]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Sync with 2.35.8
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Sat, 11 Mar 2023 20:18:15 +0000 (21:18 +0100)
committerJohannes Schindelin <johannes.schindelin@gmx.de>
Mon, 17 Apr 2023 19:16:02 +0000 (21:16 +0200)
* maint-2.35: (29 commits)
  Git 2.35.8
  Git 2.34.8
  Git 2.33.8
  Git 2.32.7
  Git 2.31.8
  tests: avoid using `test_i18ncmp`
  Git 2.30.9
  gettext: avoid using gettext if the locale dir is not present
  apply --reject: overwrite existing `.rej` symlink if it exists
  http.c: clear the 'finished' member once we are done with it
  clone.c: avoid "exceeds maximum object size" error with GCC v12.x
  range-diff: use ssize_t for parsed "len" in read_patches()
  range-diff: handle unterminated lines in read_patches()
  range-diff: drop useless "offset" variable from read_patches()
  t5604: GETTEXT_POISON fix, conclusion
  t5604: GETTEXT_POISON fix, part 1
  t5619: GETTEXT_POISON fix
  t0003: GETTEXT_POISON fix, conclusion
  t0003: GETTEXT_POISON fix, part 1
  t0033: GETTEXT_POISON fix
  http: support CURLOPT_PROTOCOLS_STR
  ...

615 files changed:
.gitignore
.mailmap
CODE_OF_CONDUCT.md
Documentation/CodingGuidelines
Documentation/Makefile
Documentation/MyFirstObjectWalk.txt
Documentation/RelNotes/2.36.0.txt [new file with mode: 0644]
Documentation/RelNotes/2.36.1.txt [new file with mode: 0644]
Documentation/RelNotes/2.36.2.txt [new file with mode: 0644]
Documentation/RelNotes/2.36.3.txt [new file with mode: 0644]
Documentation/RelNotes/2.36.4.txt [new file with mode: 0644]
Documentation/RelNotes/2.36.5.txt [new file with mode: 0644]
Documentation/SubmittingPatches
Documentation/config.txt
Documentation/config/advice.txt
Documentation/config/clone.txt
Documentation/config/core.txt
Documentation/config/extensions.txt
Documentation/config/fetch.txt
Documentation/config/gpg.txt
Documentation/config/remote.txt
Documentation/config/repack.txt
Documentation/config/reset.txt [deleted file]
Documentation/config/sparse.txt [new file with mode: 0644]
Documentation/config/stash.txt
Documentation/config/submodule.txt
Documentation/diff-options.txt
Documentation/fetch-options.txt
Documentation/git-branch.txt
Documentation/git-bundle.txt
Documentation/git-cat-file.txt
Documentation/git-check-ignore.txt
Documentation/git-checkout-index.txt
Documentation/git-clone.txt
Documentation/git-config.txt
Documentation/git-credential-cache--daemon.txt
Documentation/git-fetch-pack.txt
Documentation/git-fetch.txt
Documentation/git-fsmonitor--daemon.txt [new file with mode: 0644]
Documentation/git-help.txt
Documentation/git-hook.txt [new file with mode: 0644]
Documentation/git-index-pack.txt
Documentation/git-ls-files.txt
Documentation/git-ls-tree.txt
Documentation/git-maintenance.txt
Documentation/git-mktree.txt
Documentation/git-name-rev.txt
Documentation/git-read-tree.txt
Documentation/git-rebase.txt
Documentation/git-remote.txt
Documentation/git-reset.txt
Documentation/git-sparse-checkout.txt
Documentation/git-submodule.txt
Documentation/git-update-index.txt
Documentation/git-worktree.txt
Documentation/gitattributes.txt
Documentation/gitcli.txt
Documentation/githooks.txt
Documentation/glossary-content.txt
Documentation/rev-list-options.txt
Documentation/technical/bundle-format.txt
Documentation/technical/commit-graph-format.txt
Documentation/technical/multi-pack-index.txt
Documentation/technical/pack-format.txt
Documentation/technical/partial-clone.txt
Documentation/technical/reftable.txt
GIT-VERSION-GEN
Makefile
README.md
RelNotes
add-interactive.c
add-patch.c
advice.c
advice.h
apply.c
apply.h
archive-tar.c
archive-zip.c
archive.c
attr.c
attr.h
banned.h
bisect.c
bisect.h
blame.c
block-sha1/sha1.c
branch.c
branch.h
builtin.h
builtin/add.c
builtin/am.c
builtin/bisect--helper.c
builtin/blame.c
builtin/branch.c
builtin/bundle.c
builtin/cat-file.c
builtin/checkout-index.c
builtin/checkout.c
builtin/clean.c
builtin/clone.c
builtin/commit-graph.c
builtin/commit.c
builtin/config.c
builtin/count-objects.c
builtin/diff-tree.c
builtin/diff.c
builtin/difftool.c
builtin/fast-export.c
builtin/fast-import.c
builtin/fetch-pack.c
builtin/fetch.c
builtin/fsmonitor--daemon.c [new file with mode: 0644]
builtin/gc.c
builtin/grep.c
builtin/hash-object.c
builtin/help.c
builtin/hook.c [new file with mode: 0644]
builtin/index-pack.c
builtin/log.c
builtin/ls-files.c
builtin/ls-remote.c
builtin/ls-tree.c
builtin/mailsplit.c
builtin/merge-base.c
builtin/merge-recursive.c
builtin/merge.c
builtin/mktag.c
builtin/mktree.c
builtin/multi-pack-index.c
builtin/name-rev.c
builtin/notes.c
builtin/pack-objects.c
builtin/patch-id.c
builtin/prune-packed.c
builtin/pull.c
builtin/push.c
builtin/read-tree.c
builtin/rebase.c
builtin/receive-pack.c
builtin/reflog.c
builtin/remote.c
builtin/repack.c
builtin/replace.c
builtin/reset.c
builtin/rev-list.c
builtin/send-pack.c
builtin/shortlog.c
builtin/show-branch.c
builtin/sparse-checkout.c
builtin/stash.c
builtin/stripspace.c
builtin/submodule--helper.c
builtin/tag.c
builtin/unpack-objects.c
builtin/update-index.c
builtin/update-server-info.c
builtin/worktree.c
bulk-checkin.c
bundle.c
bundle.h
cache-tree.c
cache.h
ci/install-dependencies.sh
ci/lib.sh
command-list.txt
commit-graph.c
commit-graph.h
commit.c
commit.h
compat/fsmonitor/fsm-darwin-gcc.h [new file with mode: 0644]
compat/fsmonitor/fsm-listen-darwin.c [new file with mode: 0644]
compat/fsmonitor/fsm-listen-win32.c [new file with mode: 0644]
compat/fsmonitor/fsm-listen.h [new file with mode: 0644]
compat/mingw.c
compat/mingw.h
compat/qsort_s.c
compat/terminal.c
compat/terminal.h
compat/win32/flush.c [new file with mode: 0644]
compat/winansi.c
compat/zlib-uncompress2.c
config.c
config.h
config.mak.dev
config.mak.uname
configure.ac
connect.c
contrib/buildsystems/CMakeLists.txt
contrib/coccinelle/strbuf.cocci
contrib/coccinelle/xstrdup_or_null.cocci
contrib/completion/git-completion.bash
contrib/completion/git-prompt.sh
contrib/rerere-train.sh
contrib/scalar/Makefile
contrib/scalar/scalar.c
contrib/scalar/scalar.txt
contrib/scalar/t/Makefile
contrib/scalar/t/t9099-scalar.sh
contrib/subtree/git-subtree.sh
convert.c
credential.c
csum-file.c
csum-file.h
date.c
date.h [new file with mode: 0644]
detect-compiler
diff-merges.c
diff.c
diff.h
diffcore-rename.c
dir.c
environment.c
fetch-negotiator.c
fetch-negotiator.h
fetch-pack.c
fetch-pack.h
fsmonitor--daemon.h [new file with mode: 0644]
fsmonitor-ipc.c [new file with mode: 0644]
fsmonitor-ipc.h [new file with mode: 0644]
fsmonitor-settings.c [new file with mode: 0644]
fsmonitor-settings.h [new file with mode: 0644]
fsmonitor.c
fsmonitor.h
git-compat-util.h
git-p4.py
git-send-email.perl
git-sh-setup.sh
git-submodule.sh
git.c
gitweb/gitweb.perl
gpg-interface.c
graph.c
graph.h
grep.c
grep.h
help.c
help.h
hook.c
hook.h
http-backend.c
http-push.c
ident.c
imap-send.c
list-objects-filter-options.c
list-objects-filter-options.h
list-objects.c
list-objects.h
ll-merge.c
ll-merge.h
log-tree.c
ls-refs.c
mailmap.c
match-trees.c
mem-pool.c
merge-blobs.c
merge-ort.c
merge-ort.h
merge-recursive.c
merge-recursive.h
midx.c
midx.h
notes-cache.c
notes-merge.c
notes.c
object-file.c
object-name.c
object-store.h
object.c
object.h
pack-bitmap-write.c
pack-bitmap.c
pack-bitmap.h
pack-check.c
pack-revindex.c
pack-write.c
parallel-checkout.c
parse-options.c
parse-options.h
path.h
perl/Git.pm
po/TEAMS
po/ca.po
po/de.po
po/fr.po
po/git.pot
po/id.po
po/pt_PT.po
po/sv.po
po/tr.po
po/vi.po
po/zh_CN.po
po/zh_TW.po
pretty.h
progress.c
progress.h
range-diff.c
reachable.c
read-cache.c
ref-filter.c
reflog-walk.h
reflog.c [new file with mode: 0644]
reflog.h [new file with mode: 0644]
refs.c
refs.h
refs/debug.c
refs/files-backend.c
refs/iterator.c
refs/packed-backend.c
refs/ref-cache.c
refs/refs-internal.h
refspec.c
reftable/block.c
reftable/block_test.c
reftable/blocksource.c
reftable/generic.c
reftable/iter.c
reftable/merged.c
reftable/pq.c
reftable/pq_test.c
reftable/reader.c
reftable/readwrite_test.c
reftable/record.c
reftable/record.h
reftable/record_test.c
reftable/reftable-record.h
reftable/reftable-writer.h
reftable/reftable.c [deleted file]
reftable/stack.c
reftable/stack_test.c
reftable/system.h
reftable/writer.c
remote-curl.c
remote.c
repo-settings.c
repository.c
repository.h
rerere.c
reset.c
reset.h
revision.c
revision.h
run-command.c
run-command.h
sequencer.c
sequencer.h
setup.c
shallow.c
shared.mak [new file with mode: 0644]
sparse-index.c
sparse-index.h
split-index.c
stable-qsort.c
strbuf.c
string-list.h
submodule-config.c
submodule-config.h
submodule.c
submodule.h
t/Makefile
t/README
t/helper/test-chmtime.c
t/helper/test-csprng.c [new file with mode: 0644]
t/helper/test-date.c
t/helper/test-fsmonitor-client.c [new file with mode: 0644]
t/helper/test-progress.c
t/helper/test-read-graph.c
t/helper/test-ref-store.c
t/helper/test-reftable.c
t/helper/test-run-command.c
t/helper/test-tool.c
t/helper/test-tool.h
t/interop/Makefile
t/lib-bitmap.sh
t/lib-commit-graph.sh [new file with mode: 0755]
t/lib-gpg.sh
t/lib-read-tree-m-3way.sh
t/perf/Makefile
t/perf/p1006-cat-file.sh [new file with mode: 0755]
t/perf/p2000-sparse-operations.sh
t/perf/p7519-fsmonitor.sh
t/perf/perf-lib.sh
t/t0000-basic.sh
t/t0001-init.sh
t/t0002-gitfile.sh
t/t0003-attributes.sh
t/t0006-date.sh
t/t0012-help.sh
t/t0015-hash.sh
t/t0022-crlf-rename.sh
t/t0025-crlf-renormalize.sh
t/t0027-auto-crlf.sh
t/t0029-core-unsetenvvars.sh
t/t0030-stripspace.sh
t/t0050-filesystem.sh
t/t0051-windows-named-pipe.sh
t/t0060-path-utils.sh
t/t0091-bugreport.sh
t/t0211/scrub_perf.perl
t/t0410-partial-clone.sh
t/t0500-progress-display.sh
t/t1001-read-tree-m-2way.sh
t/t1002-read-tree-m-u-2way.sh
t/t1003-read-tree-prefix.sh
t/t1006-cat-file.sh
t/t1007-hash-object.sh
t/t1011-read-tree-sparse-checkout.sh
t/t1090-sparse-checkout-scope.sh
t/t1091-sparse-checkout-builtin.sh
t/t1092-sparse-checkout-compatibility.sh
t/t1300-config.sh
t/t1350-config-hooks-path.sh
t/t1405-main-ref-store.sh
t/t1410-reflog.sh
t/t1411-reflog-show.sh
t/t1416-ref-transaction-hooks.sh
t/t1418-reflog-exists.sh [new file with mode: 0755]
t/t1450-fsck.sh
t/t1503-rev-parse-verify.sh
t/t1512-rev-parse-disambiguation.sh
t/t1800-hook.sh [new file with mode: 0755]
t/t2012-checkout-last.sh
t/t2060-switch.sh
t/t2108-update-index-refresh-racy.sh [new file with mode: 0755]
t/t2200-add-update.sh
t/t2400-worktree-add.sh
t/t2402-worktree-list.sh
t/t3007-ls-files-recurse-submodules.sh
t/t3101-ls-tree-dirname.sh
t/t3103-ls-tree-misc.sh
t/t3104-ls-tree-format.sh [new file with mode: 0755]
t/t3200-branch.sh
t/t3202-show-branch.sh
t/t3207-branch-submodule.sh [new file with mode: 0755]
t/t3302-notes-index-expensive.sh
t/t3303-notes-subtrees.sh
t/t3305-notes-fanout.sh
t/t3400-rebase.sh
t/t3404-rebase-interactive.sh
t/t3406-rebase-message.sh
t/t3412-rebase-root.sh
t/t3413-rebase-hook.sh
t/t3416-rebase-onto-threedots.sh
t/t3418-rebase-continue.sh
t/t3430-rebase-merges.sh
t/t3701-add-interactive.sh
t/t3705-add-sparse-checkout.sh
t/t3903-stash.sh
t/t4013-diff-various.sh
t/t4014-format-patch.sh
t/t4015-diff-whitespace.sh
t/t4018/kotlin-class [new file with mode: 0644]
t/t4018/kotlin-enum-class [new file with mode: 0644]
t/t4018/kotlin-fun [new file with mode: 0644]
t/t4018/kotlin-inheritace-class [new file with mode: 0644]
t/t4018/kotlin-inline-class [new file with mode: 0644]
t/t4018/kotlin-interface [new file with mode: 0644]
t/t4018/kotlin-nested-fun [new file with mode: 0644]
t/t4018/kotlin-public-class [new file with mode: 0644]
t/t4018/kotlin-sealed-class [new file with mode: 0644]
t/t4020-diff-external.sh
t/t4027-diff-submodule.sh
t/t4034-diff-words.sh
t/t4034/kotlin/expect [new file with mode: 0644]
t/t4034/kotlin/post [new file with mode: 0644]
t/t4034/kotlin/pre [new file with mode: 0644]
t/t4069-remerge-diff.sh [new file with mode: 0755]
t/t4123-apply-shrink.sh
t/t4128-apply-root.sh
t/t4150-am.sh
t/t4202-log.sh
t/t4204-patch-id.sh
t/t4216-log-bloom.sh
t/t5300-pack-object.sh
t/t5302-pack-index.sh
t/t5310-pack-bitmaps.sh
t/t5312-prune-corruption.sh
t/t5316-pack-delta-depth.sh
t/t5318-commit-graph.sh
t/t5324-split-commit-graph.sh
t/t5326-multi-pack-bitmaps.sh
t/t5327-multi-pack-bitmaps-rev.sh [new file with mode: 0755]
t/t5328-commit-graph-64bit-time.sh [new file with mode: 0755]
t/t5401-update-hooks.sh
t/t5402-post-merge-hook.sh
t/t5403-post-checkout-hook.sh
t/t5406-remote-rejects.sh
t/t5407-post-rewrite-hook.sh
t/t5409-colorize-remote-messages.sh
t/t5411-proc-receive-hook.sh
t/t5411/once-0010-report-status-v1.sh
t/t5411/test-0002-pre-receive-declined.sh
t/t5411/test-0003-pre-receive-declined--porcelain.sh
t/t5411/test-0013-bad-protocol.sh
t/t5411/test-0014-bad-protocol--porcelain.sh
t/t5411/test-0020-report-ng.sh
t/t5411/test-0021-report-ng--porcelain.sh
t/t5411/test-0022-report-unexpect-ref.sh
t/t5411/test-0023-report-unexpect-ref--porcelain.sh
t/t5411/test-0024-report-unknown-ref.sh
t/t5411/test-0025-report-unknown-ref--porcelain.sh
t/t5411/test-0026-push-options.sh
t/t5411/test-0027-push-options--porcelain.sh
t/t5411/test-0030-report-ok.sh
t/t5411/test-0031-report-ok--porcelain.sh
t/t5411/test-0032-report-with-options.sh
t/t5411/test-0033-report-with-options--porcelain.sh
t/t5411/test-0034-report-ft.sh
t/t5411/test-0035-report-ft--porcelain.sh
t/t5411/test-0036-report-multi-rewrite-for-one-ref.sh
t/t5411/test-0037-report-multi-rewrite-for-one-ref--porcelain.sh
t/t5411/test-0038-report-mixed-refs.sh
t/t5411/test-0039-report-mixed-refs--porcelain.sh
t/t5411/test-0040-process-all-refs.sh
t/t5411/test-0041-process-all-refs--porcelain.sh
t/t5411/test-0050-proc-receive-refs-with-modifiers.sh
t/t5500-fetch-pack.sh
t/t5505-remote.sh
t/t5510-fetch.sh
t/t5511-refspec.sh
t/t5516-fetch-push.sh
t/t5520-pull.sh
t/t5521-pull-options.sh
t/t5526-fetch-submodules.sh
t/t5534-push-signed.sh
t/t5537-fetch-shallow.sh
t/t5540-http-push-webdav.sh
t/t5541-http-push-smart.sh
t/t5543-atomic-push.sh
t/t5547-push-quarantine.sh
t/t5548-push-porcelain.sh
t/t5550-http-fetch-dumb.sh
t/t5571-pre-push-hook.sh
t/t5601-clone.sh
t/t5616-partial-clone.sh
t/t5617-clone-submodules-remote.sh
t/t5700-protocol-v1.sh
t/t5702-protocol-v2.sh
t/t6005-rev-list-count.sh
t/t6007-rev-list-cherry-pick-file.sh
t/t6012-rev-list-simplify.sh
t/t6020-bundle-misc.sh
t/t6030-bisect-porcelain.sh
t/t6102-rev-list-unexpected-objects.sh
t/t6111-rev-list-treesame.sh
t/t6120-describe.sh
t/t6404-recursive-merge.sh
t/t6406-merge-attr.sh
t/t6407-merge-binary.sh
t/t6423-merge-rename-directories.sh
t/t6428-merge-conflicts-sparse.sh
t/t6429-merge-sequence-rename-caching.sh
t/t6500-gc.sh
t/t7001-mv.sh
t/t7012-skip-worktree-writing.sh
t/t7063-status-untracked-cache.sh
t/t7102-reset.sh
t/t7103-reset-bare.sh
t/t7113-post-index-change-hook.sh
t/t7406-submodule-update.sh
t/t7408-submodule-reference.sh
t/t7500-commit-template-squash-signoff.sh
t/t7503-pre-commit-and-pre-merge-commit-hooks.sh
t/t7504-commit-msg-hook.sh
t/t7505-prepare-commit-msg-hook.sh
t/t7508-status.sh
t/t7519-status-fsmonitor.sh
t/t7520-ignored-hook-warning.sh
t/t7524-commit-summary.sh [new file with mode: 0755]
t/t7527-builtin-fsmonitor.sh [new file with mode: 0755]
t/t7700-repack.sh
t/t7810-grep.sh
t/t7812-grep-icase-non-ascii.sh
t/t7814-grep-recurse-submodules.sh
t/t7817-grep-sparse-checkout.sh
t/t8007-cat-file-textconv.sh
t/t9001-send-email.sh
t/t9102-git-svn-deep-rmdir.sh
t/t9123-git-svn-rebuild-with-rewriteroot.sh
t/t9128-git-svn-cmd-branch.sh
t/t9167-git-svn-cmd-branch-subproject.sh
t/t9350-fast-export.sh
t/t9502-gitweb-standalone-parse-output.sh
t/t9800-git-p4-basic.sh
t/t9902-completion.sh
t/test-lib-functions.sh
t/test-lib.sh
templates/Makefile
tmp-objdir.c
tmp-objdir.h
trace.c
trace.h
trace2.c
trace2.h
trace2/tr2_tgt_event.c
trace2/tr2_tgt_normal.c
trace2/tr2_tgt_perf.c
transport-helper.c
transport.c
transport.h
tree-walk.c
unpack-trees.c
upload-pack.c
urlmatch.c
urlmatch.h
usage.c
userdiff.c
worktree.c
worktree.h
wrapper.c
write-or-die.c
wt-status.c
xdiff/xdiffi.c
xdiff/xhistogram.c
xdiff/xmerge.c
xdiff/xpatience.c

index 054249b20a8d91d77a569294f8104e53bdd12f51..e81de1063a40048a5c123e3ac9e274480b3aa661 100644 (file)
 /git-format-patch
 /git-fsck
 /git-fsck-objects
+/git-fsmonitor--daemon
 /git-gc
 /git-get-tar-commit-id
 /git-grep
 /git-hash-object
 /git-help
+/git-hook
 /git-http-backend
 /git-http-fetch
 /git-http-push
index 9c6a446bdfb092037d21c51ec704d88f2161fdc9..07db36a9bb949c4c911d07baeb1c4c10c13bec4c 100644 (file)
--- a/.mailmap
+++ b/.mailmap
@@ -59,8 +59,9 @@ David Reiss <dreiss@facebook.com> <dreiss@dreiss-vmware.(none)>
 David S. Miller <davem@davemloft.net>
 David Turner <novalis@novalis.org> <dturner@twopensource.com>
 David Turner <novalis@novalis.org> <dturner@twosigma.com>
-Derrick Stolee <dstolee@microsoft.com> <stolee@gmail.com>
-Derrick Stolee <dstolee@microsoft.com> Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
+Derrick Stolee <derrickstolee@github.com> <stolee@gmail.com>
+Derrick Stolee <derrickstolee@github.com> Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
+Derrick Stolee <derrickstolee@github.com> <dstolee@microsoft.com>
 Deskin Miller <deskinm@umich.edu>
 Đoàn Trần Công Danh <congdanhqx@gmail.com> Doan Tran Cong Danh
 Dirk Süsserott <newsletter@dirk.my1.cc>
index 65651beada79b6267b1d0bda518a88269374cfdf..0215b1fd4c05e668f37973549384aae24dcc65cf 100644 (file)
@@ -70,8 +70,8 @@ git@sfconservancy.org, or individually:
 
   - Ævar Arnfjörð Bjarmason <avarab@gmail.com>
   - Christian Couder <christian.couder@gmail.com>
-  - Jeff King <peff@peff.net>
   - Junio C Hamano <gitster@pobox.com>
+  - Taylor Blau <me@ttaylorr.com>
 
 All complaints will be reviewed and investigated promptly and fairly.
 
index 0e27b5395d8b665fa4c474dc931640a02d4a5f6f..b20b2f94f11abb7850b56f985b72646b85713d02 100644 (file)
@@ -26,6 +26,13 @@ code.  For Git in general, a few rough rules are:
    go and fix it up."
    Cf. http://lkml.iu.edu/hypermail/linux/kernel/1001.3/01069.html
 
+ - Log messages to explain your changes are as important as the
+   changes themselves.  Clearly written code and in-code comments
+   explain how the code works and what is assumed from the surrounding
+   context.  The log messages explain what the changes wanted to
+   achieve and why the changes were necessary (more on this in the
+   accompanying SubmittingPatches document).
+
 Make your code readable and sensible, and don't try to be clever.
 
 As for more concrete guidelines, just imitate the existing code
@@ -210,6 +217,9 @@ For C programs:
    . since mid 2017 with 512f41cf, we have been using designated
      initializers for array (e.g. "int array[10] = { [5] = 2 }").
 
+   . since early 2021 with 765dc168882, we have been using variadic
+     macros, mostly for printf-like trace and debug macros.
+
    These used to be forbidden, but we have not heard any breakage
    report, and they are assumed to be safe.
 
@@ -217,7 +227,10 @@ For C programs:
    the first statement (i.e. -Wdeclaration-after-statement).
 
  - Declaring a variable in the for loop "for (int i = 0; i < 10; i++)"
-   is still not allowed in this codebase.
+   is still not allowed in this codebase.  We are in the process of
+   allowing it by waiting to see that 44ba10d6 (revision: use C99
+   declaration of variable in for() loop, 2021-11-14) does not get
+   complaints.  Let's revisit this around November 2022.
 
  - NULL pointers shall be written as NULL, not as 0.
 
index ed656db2ae90c1f5e0498867ec170395f6898b1f..44c080e3e5bb0a895ab8834822490f94f758a96d 100644 (file)
@@ -1,3 +1,6 @@
+# Import tree-wide shared Makefile behavior and libraries
+include ../shared.mak
+
 # Guard against environment variables
 MAN1_TXT =
 MAN5_TXT =
@@ -215,38 +218,6 @@ DEFAULT_EDITOR_SQ = $(subst ','\'',$(DEFAULT_EDITOR))
 ASCIIDOC_EXTRA += -a 'git-default-editor=$(DEFAULT_EDITOR_SQ)'
 endif
 
-QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
-QUIET_SUBDIR1  =
-
-ifneq ($(findstring $(MAKEFLAGS),w),w)
-PRINT_DIR = --no-print-directory
-else # "make -w"
-NO_SUBDIR = :
-endif
-
-ifneq ($(findstring $(MAKEFLAGS),s),s)
-ifndef V
-       QUIET           = @
-       QUIET_ASCIIDOC  = @echo '   ' ASCIIDOC $@;
-       QUIET_XMLTO     = @echo '   ' XMLTO $@;
-       QUIET_DB2TEXI   = @echo '   ' DB2TEXI $@;
-       QUIET_MAKEINFO  = @echo '   ' MAKEINFO $@;
-       QUIET_DBLATEX   = @echo '   ' DBLATEX $@;
-       QUIET_XSLTPROC  = @echo '   ' XSLTPROC $@;
-       QUIET_GEN       = @echo '   ' GEN $@;
-       QUIET_STDERR    = 2> /dev/null
-       QUIET_SUBDIR0   = +@subdir=
-       QUIET_SUBDIR1   = ;$(NO_SUBDIR) echo '   ' SUBDIR $$subdir; \
-                         $(MAKE) $(PRINT_DIR) -C $$subdir
-
-       QUIET_LINT_GITLINK      = @echo '   ' LINT GITLINK $<;
-       QUIET_LINT_MANSEC       = @echo '   ' LINT MAN SEC $<;
-       QUIET_LINT_MANEND       = @echo '   ' LINT MAN END $<;
-
-       export V
-endif
-endif
-
 all: html man
 
 html: $(DOC_HTML)
@@ -419,7 +390,7 @@ gitman.texi: $(MAN_XML) cat-texi.perl texi.xsl
        $(RM) $@+
 
 gitman.info: gitman.texi
-       $(QUIET_MAKEINFO)$(MAKEINFO) --no-split --no-validate $*.texi
+       $(QUIET_MAKEINFO)$(MAKEINFO) --no-split --no-validate $<
 
 $(patsubst %.txt,%.texi,$(MAN_TXT)): %.texi : %.xml
        $(QUIET_DB2TEXI)$(DOCBOOK2X_TEXI) --to-stdout $*.xml >$@
@@ -463,25 +434,11 @@ quick-install-html: require-htmlrepo
 print-man1:
        @for i in $(MAN1_TXT); do echo $$i; done
 
-## Lint: Common
-.build:
-       $(QUIET)mkdir $@
-.build/lint-docs: | .build
-       $(QUIET)mkdir $@
-
 ## Lint: gitlink
-.build/lint-docs/gitlink: | .build/lint-docs
-       $(QUIET)mkdir $@
-.build/lint-docs/gitlink/howto: | .build/lint-docs/gitlink
-       $(QUIET)mkdir $@
-.build/lint-docs/gitlink/config: | .build/lint-docs/gitlink
-       $(QUIET)mkdir $@
 LINT_DOCS_GITLINK = $(patsubst %.txt,.build/lint-docs/gitlink/%.ok,$(HOWTO_TXT) $(DOC_DEP_TXT))
-$(LINT_DOCS_GITLINK): | .build/lint-docs/gitlink
-$(LINT_DOCS_GITLINK): | .build/lint-docs/gitlink/howto
-$(LINT_DOCS_GITLINK): | .build/lint-docs/gitlink/config
 $(LINT_DOCS_GITLINK): lint-gitlink.perl
 $(LINT_DOCS_GITLINK): .build/lint-docs/gitlink/%.ok: %.txt
+       $(call mkdir_p_parent_template)
        $(QUIET_LINT_GITLINK)$(PERL_PATH) lint-gitlink.perl \
                $< \
                $(HOWTO_TXT) $(DOC_DEP_TXT) \
@@ -492,23 +449,18 @@ $(LINT_DOCS_GITLINK): .build/lint-docs/gitlink/%.ok: %.txt
 lint-docs-gitlink: $(LINT_DOCS_GITLINK)
 
 ## Lint: man-end-blurb
-.build/lint-docs/man-end-blurb: | .build/lint-docs
-       $(QUIET)mkdir $@
 LINT_DOCS_MAN_END_BLURB = $(patsubst %.txt,.build/lint-docs/man-end-blurb/%.ok,$(MAN_TXT))
-$(LINT_DOCS_MAN_END_BLURB): | .build/lint-docs/man-end-blurb
 $(LINT_DOCS_MAN_END_BLURB): lint-man-end-blurb.perl
 $(LINT_DOCS_MAN_END_BLURB): .build/lint-docs/man-end-blurb/%.ok: %.txt
+       $(call mkdir_p_parent_template)
        $(QUIET_LINT_MANEND)$(PERL_PATH) lint-man-end-blurb.perl $< >$@
 .PHONY: lint-docs-man-end-blurb
-lint-docs-man-end-blurb: $(LINT_DOCS_MAN_END_BLURB)
 
 ## Lint: man-section-order
-.build/lint-docs/man-section-order: | .build/lint-docs
-       $(QUIET)mkdir $@
 LINT_DOCS_MAN_SECTION_ORDER = $(patsubst %.txt,.build/lint-docs/man-section-order/%.ok,$(MAN_TXT))
-$(LINT_DOCS_MAN_SECTION_ORDER): | .build/lint-docs/man-section-order
 $(LINT_DOCS_MAN_SECTION_ORDER): lint-man-section-order.perl
 $(LINT_DOCS_MAN_SECTION_ORDER): .build/lint-docs/man-section-order/%.ok: %.txt
+       $(call mkdir_p_parent_template)
        $(QUIET_LINT_MANSEC)$(PERL_PATH) lint-man-section-order.perl $< >$@
 .PHONY: lint-docs-man-section-order
 lint-docs-man-section-order: $(LINT_DOCS_MAN_SECTION_ORDER)
@@ -524,7 +476,4 @@ doc-l10n install-l10n::
        $(MAKE) -C po $@
 endif
 
-# Delete the target file on error
-.DELETE_ON_ERROR:
-
 .PHONY: FORCE
index ca267941f3ecfefa1c7e9023c6801bdbed03e4fc..8d9e85566e642ecc47620cc4622414d587d3b993 100644 (file)
@@ -522,24 +522,25 @@ function shows that the all-object walk is being performed by
 `traverse_commit_list()` or `traverse_commit_list_filtered()`. Those two
 functions reside in `list-objects.c`; examining the source shows that, despite
 the name, these functions traverse all kinds of objects. Let's have a look at
-the arguments to `traverse_commit_list_filtered()`, which are a superset of the
-arguments to the unfiltered version.
+the arguments to `traverse_commit_list()`.
 
-- `struct list_objects_filter_options *filter_options`: This is a struct which
-  stores a filter-spec as outlined in `Documentation/rev-list-options.txt`.
-- `struct rev_info *revs`: This is the `rev_info` used for the walk.
+- `struct rev_info *revs`: This is the `rev_info` used for the walk. If
+  its `filter` member is not `NULL`, then `filter` contains information for
+  how to filter the object list.
 - `show_commit_fn show_commit`: A callback which will be used to handle each
   individual commit object.
 - `show_object_fn show_object`: A callback which will be used to handle each
   non-commit object (so each blob, tree, or tag).
 - `void *show_data`: A context buffer which is passed in turn to `show_commit`
   and `show_object`.
+
+In addition, `traverse_commit_list_filtered()` has an additional paramter:
+
 - `struct oidset *omitted`: A linked-list of object IDs which the provided
   filter caused to be omitted.
 
-It looks like this `traverse_commit_list_filtered()` uses callbacks we provide
-instead of needing us to call it repeatedly ourselves. Cool! Let's add the
-callbacks first.
+It looks like these methods use callbacks we provide instead of needing us
+to call it repeatedly ourselves. Cool! Let's add the callbacks first.
 
 For the sake of this tutorial, we'll simply keep track of how many of each kind
 of object we find. At file scope in `builtin/walken.c` add the following
@@ -712,20 +713,9 @@ help understand. In our case, that means we omit trees and blobs not directly
 referenced by `HEAD` or `HEAD`'s history, because we begin the walk with only
 `HEAD` in the `pending` list.)
 
-First, we'll need to `#include "list-objects-filter-options.h"` and set up the
-`struct list_objects_filter_options` at the top of the function.
-
-----
-static void walken_object_walk(struct rev_info *rev)
-{
-       struct list_objects_filter_options filter_options = { 0 };
-
-       ...
-----
-
 For now, we are not going to track the omitted objects, so we'll replace those
 parameters with `NULL`. For the sake of simplicity, we'll add a simple
-build-time branch to use our filter or not. Replace the line calling
+build-time branch to use our filter or not. Preface the line calling
 `traverse_commit_list()` with the following, which will remind us which kind of
 walk we've just performed:
 
@@ -733,19 +723,17 @@ walk we've just performed:
        if (0) {
                /* Unfiltered: */
                trace_printf(_("Unfiltered object walk.\n"));
-               traverse_commit_list(rev, walken_show_commit,
-                               walken_show_object, NULL);
        } else {
                trace_printf(
                        _("Filtered object walk with filterspec 'tree:1'.\n"));
-               parse_list_objects_filter(&filter_options, "tree:1");
-
-               traverse_commit_list_filtered(&filter_options, rev,
-                       walken_show_commit, walken_show_object, NULL, NULL);
+               CALLOC_ARRAY(rev->filter, 1);
+               parse_list_objects_filter(rev->filter, "tree:1");
        }
+       traverse_commit_list(rev, walken_show_commit,
+                            walken_show_object, NULL);
 ----
 
-`struct list_objects_filter_options` is usually built directly from a command
+The `rev->filter` member is usually built directly from a command
 line argument, so the module provides an easy way to build one from a string.
 Even though we aren't taking user input right now, we can still build one with
 a hardcoded string using `parse_list_objects_filter()`.
@@ -784,7 +772,7 @@ object:
 ----
        ...
 
-               traverse_commit_list_filtered(&filter_options, rev,
+               traverse_commit_list_filtered(rev,
                        walken_show_commit, walken_show_object, NULL, &omitted);
 
        ...
diff --git a/Documentation/RelNotes/2.36.0.txt b/Documentation/RelNotes/2.36.0.txt
new file mode 100644 (file)
index 0000000..e477fba
--- /dev/null
@@ -0,0 +1,429 @@
+Git 2.36 Release Notes
+======================
+
+Updates since Git 2.35
+----------------------
+
+Backward compatibility warts
+
+ * "git name-rev --stdin" has been deprecated and issues a warning
+   when used; use "git name-rev --annotate-stdin" instead.
+
+ * "git clone --filter=... --recurse-submodules" only makes the
+   top-level a partial clone, while submodules are fully cloned.  This
+   behaviour is changed to pass the same filter down to the submodules.
+
+ * With the fixes for CVE-2022-24765 that are common with versions of
+   Git 2.30.4, 2.31.3, 2.32.2, 2.33.3, 2.34.3, and 2.35.3, Git has
+   been taught not to recognise repositories owned by other users, in
+   order to avoid getting affected by their config files and hooks.
+   You can list the path to the safe/trusted repositories that may be
+   owned by others on a multi-valued configuration variable
+   `safe.directory` to override this behaviour, or use '*' to declare
+   that you trust anything.
+
+
+Note to those who build from the source
+
+ * Since Git 2.31, our source assumed that the compiler you use to
+   build Git supports variadic macros, with an easy-to-use escape
+   hatch to allow compilation without variadic macros with an request
+   to report that you had to use the escape hatch to the list.
+   Because we haven't heard from anybody who actually needed to use
+   the escape hatch, it has been removed, making support of variadic
+   macros a hard requirement.
+
+
+UI, Workflows & Features
+
+ * Assorted updates to "git cat-file", especially "-h".
+
+ * The command line completion (in contrib/) learns to complete
+   arguments to give to "git sparse-checkout" command.
+
+ * "git log --remerge-diff" shows the difference from mechanical merge
+   result and the result that is actually recorded in a merge commit.
+
+ * "git log" and friends learned an option --exclude-first-parent-only
+   to propagate UNINTERESTING bit down only along the first-parent
+   chain, just like --first-parent option shows commits that lack the
+   UNINTERESTING bit only along the first-parent chain.
+
+ * The command line completion script (in contrib/) learned to
+   complete all Git subcommands, including the ones that are normally
+   hidden, when GIT_COMPLETION_SHOW_ALL_COMMANDS is used.
+
+ * "git branch" learned the "--recurse-submodules" option.
+
+ * A user can forget to make a script file executable before giving
+   it to "git bisect run".  In such a case, all tests will exit with
+   126 or 127 error codes, even on revisions that are marked as good.
+   Try to recognize this situation and stop iteration early.
+
+ * When "index-pack" dies due to incoming data exceeding the maximum
+   allowed input size, include the value of the limit in the error
+   message.
+
+ * The error message given by "git switch HEAD~4" has been clarified
+   to suggest the "--detach" option that is required.
+
+ * In sparse-checkouts, files mis-marked as missing from the working tree
+   could lead to later problems.  Such files were hard to discover, and
+   harder to correct.  Automatically detecting and correcting the marking
+   of such files has been added to avoid these problems.
+
+ * "git cat-file" learns "--batch-command" mode, which is a more
+   flexible interface than the existing "--batch" or "--batch-check"
+   modes, to allow different kinds of inquiries made.
+
+ * The level of verbose output from the ort backend during inner merge
+   has been aligned to that of the recursive backend.
+
+ * "git remote rename A B", depending on the number of remote-tracking
+   refs involved, takes long time renaming them.  The command has been
+   taught to show progress bar while making the user wait.
+
+ * Bundle file format gets extended to allow a partial bundle,
+   filtered by similar criteria you would give when making a
+   partial/lazy clone.
+
+ * A new built-in userdiff driver for kotlin has been added.
+
+ * "git repack" learned a new configuration to disable triggering of
+   age-old "update-server-info" command, which is rarely useful these
+   days.
+
+ * "git stash" does not allow subcommands it internally runs as its
+   implementation detail, except for "git reset", to emit messages;
+   now "git reset" part has also been squelched.
+
+ * "git ls-tree" learns "--oid-only" option, similar to "--name-only",
+   and more generalized "--format" option.
+
+ * "git fetch --refetch" learned to fetch everything without telling
+   the other side what we already have, which is useful when you
+   cannot trust what you have in the local object store.
+
+ * "git branch" gives hint when branch tracking cannot be established
+   because fetch refspecs from multiple remote repositories overlap.
+
+ * "git worktree list --porcelain" did not c-quote pathnames and lock
+   reasons with unsafe bytes correctly, which is worked around by
+   introducing NUL terminated output format with "-z".
+
+
+Performance, Internal Implementation, Development Support etc.
+
+ * "git apply" (ab)used the util pointer of the string-list to keep
+   track of how each symbolic link needs to be handled, which has been
+   simplified by using strset.
+
+ * Fix a hand-rolled alloca() imitation that may have violated
+   alignment requirement of data being sorted in compatibility
+   implementation of qsort_s() and stable qsort().
+
+ * Use the parse-options API in "git reflog" command.
+
+ * The conditional inclusion mechanism of configuration files using
+   "[includeIf <condition>]" learns to base its decision on the
+   URL of the remote repository the repository interacts with.
+   (merge 399b198489 jt/conditional-config-on-remote-url later to maint).
+
+ * "git name-rev --stdin" does not behave like usual "--stdin" at
+   all.  Start the process of renaming it to "--annotate-stdin".
+   (merge a2585719b3 jc/name-rev-stdin later to maint).
+
+ * "git update-index", "git checkout-index", and "git clean" are
+   taught to work better with the sparse checkout feature.
+
+ * Use an internal call to reset_head() helper function instead of
+   spawning "git checkout" in "rebase", and update code paths that are
+   involved in the change.
+
+ * Messages "ort" merge backend prepares while dealing with conflicted
+   paths were unnecessarily confusing since it did not differentiate
+   inner merges and outer merges.
+
+ * Small modernization of the rerere-train script (in contrib/).
+
+ * Use designated initializers we started using in mid 2017 in more
+   parts of the codebase that are relatively quiescent.
+
+ * Improve failure case behaviour of xdiff library when memory
+   allocation fails.
+
+ * General clean-up in reftable implementation, including
+   clarification of the API documentation, tightening the code to
+   honor documented length limit, etc.
+
+ * Remove the escape hatch we added when we introduced the weather
+   balloon to use variadic macros unconditionally, to make it official
+   that we now have a hard dependency on the feature.
+
+ * Makefile refactoring with a bit of suffixes rule stripping to
+   optimize the runtime overhead.
+
+ * "git stash drop" is reimplemented as an internal call to
+   reflog_delete() function, instead of invoking "git reflog delete"
+   via run_command() API.
+
+ * Count string_list items in size_t, not "unsigned int".
+
+ * The single-key interactive operation used by "git add -p" has been
+   made more robust.
+
+ * Remove unneeded <meta http-equiv=content-type...> from gitweb
+   output.
+
+ * "git name-rev" learned to use the generation numbers when setting
+   the lower bound of searching commits used to explain the revision,
+   when available, instead of committer time.
+
+ * Replace core.fsyncObjectFiles with two new configuration variables,
+   core.fsync and core.fsyncMethod.
+
+ * Updates to refs traditionally weren't fsync'ed, but we can
+   configure using core.fsync variable to do so.
+
+ * "git reflog" command now uses parse-options API to parse its
+   command line options.
+
+
+Fixes since v2.35
+-----------------
+
+ * "rebase" and "stash" in secondary worktrees are broken in
+   Git 2.35.0, which has been corrected.
+
+ * "git pull --rebase" ignored the rebase.autostash configuration
+   variable when the remote history is a descendant of our history,
+   which has been corrected.
+   (merge 3013d98d7a pb/pull-rebase-autostash-fix later to maint).
+
+ * "git update-index --refresh" has been taught to deal better with
+   racy timestamps (just like "git status" already does).
+   (merge 2ede073fd2 ms/update-index-racy later to maint).
+
+ * Avoid tests that are run under GIT_TRACE2 set from failing
+   unnecessarily.
+   (merge 944d808e42 js/test-unset-trace2-parents later to maint).
+
+ * The merge-ort misbehaved when merge.renameLimit configuration is
+   set too low and failed to find all renames.
+   (merge 9ae39fef7f en/merge-ort-restart-optim-fix later to maint).
+
+ * We explain that revs come first before the pathspec among command
+   line arguments, but did not spell out that dashed options come
+   before other args, which has been corrected.
+   (merge c11f95010c tl/doc-cli-options-first later to maint).
+
+ * "git add -p" rewritten in C regressed hunk splitting in some cases,
+   which has been corrected.
+   (merge 7008ddc645 pw/add-p-hunk-split-fix later to maint).
+
+ * "git fetch --negotiate-only" is an internal command used by "git
+   push" to figure out which part of our history is missing from the
+   other side.  It should never recurse into submodules even when
+   fetch.recursesubmodules configuration variable is set, nor it
+   should trigger "gc".  The code has been tightened up to ensure it
+   only does common ancestry discovery and nothing else.
+   (merge de4eaae63a gc/fetch-negotiate-only-early-return later to maint).
+
+ * The code path that verifies signatures made with ssh were made to
+   work better on a system with CRLF line endings.
+   (merge caeef01ea7 fs/ssh-signing-crlf later to maint).
+
+ * "git sparse-checkout init" failed to write into $GIT_DIR/info
+   directory when the repository was created without one, which has
+   been corrected to auto-create it.
+   (merge 7f44842ac1 jt/sparse-checkout-leading-dir-fix later to maint).
+
+ * Cloning from a repository that does not yet have any branches or
+   tags but has other refs resulted in a "remote transport reported
+   error", which has been corrected.
+   (merge dccea605b6 jt/clone-not-quite-empty later to maint).
+
+ * Mark in various places in the code that the sparse index and the
+   split index features are mutually incompatible.
+   (merge 451b66c533 js/sparse-vs-split-index later to maint).
+
+ * Update the logic to compute alignment requirement for our mem-pool.
+   (merge e38bcc66d8 jc/mem-pool-alignment later to maint).
+
+ * Pick a better random number generator and use it when we prepare
+   temporary filenames.
+   (merge 47efda967c bc/csprng-mktemps later to maint).
+
+ * Update the contributor-facing documents on proposed log messages.
+   (merge cdba0295b0 jc/doc-log-messages later to maint).
+
+ * When "git fetch --prune" failed to prune the refs it wanted to
+   prune, the command issued error messages but exited with exit
+   status 0, which has been corrected.
+   (merge c9e04d905e tg/fetch-prune-exit-code-fix later to maint).
+
+ * Problems identified by Coverity in the reftable code have been
+   corrected.
+   (merge 01033de49f hn/reftable-coverity-fixes later to maint).
+
+ * A bug that made multi-pack bitmap and the object order out-of-sync,
+   making the .midx data corrupt, has been fixed.
+   (merge f8b60cf99b tb/midx-bitmap-corruption-fix later to maint).
+
+ * The build procedure has been taught to notice older version of zlib
+   and enable our replacement uncompress2() automatically.
+   (merge 07564773c2 ab/auto-detect-zlib-compress2 later to maint).
+
+ * Interaction between fetch.negotiationAlgorithm and
+   feature.experimental configuration variables has been corrected.
+   (merge 714edc620c en/fetch-negotiation-default-fix later to maint).
+
+ * "git diff --diff-filter=aR" is now parsed correctly.
+   (merge 75408ca949 js/diff-filter-negation-fix later to maint).
+
+ * When "git subtree" wants to create a merge, it used "git merge" and
+   let it be affected by end-user's "merge.ff" configuration, which
+   has been corrected.
+   (merge 9158a3564a tk/subtree-merge-not-ff-only later to maint).
+
+ * Unlike "git apply", "git patch-id" did not handle patches with
+   hunks that has only 1 line in either preimage or postimage, which
+   has been corrected.
+   (merge 757e75c81e jz/patch-id-hunk-header-parsing-fix later to maint).
+
+ * "receive-pack" checks if it will do any ref updates (various
+   conditions could reject a push) before received objects are taken
+   out of the temporary directory used for quarantine purposes, so
+   that a push that is known-to-fail will not leave crufts that a
+   future "gc" needs to clean up.
+   (merge 5407764069 cb/clear-quarantine-early-on-all-ref-update-errors later to maint).
+
+ * When there is no object to write .bitmap file for, "git
+   multi-pack-index" triggered an error, instead of just skipping,
+   which has been corrected.
+   (merge eb57277ba3 tb/midx-no-bitmap-for-no-objects later to maint).
+
+ * "git cmd -h" outside a repository should error out cleanly for many
+   commands, but instead it hit a BUG(), which has been corrected.
+   (merge 87ad07d735 js/short-help-outside-repo-fix later to maint).
+
+ * "working tree" and "per-worktree ref" were in glossary, but
+   "worktree" itself wasn't, which has been corrected.
+   (merge 2df5387ed0 jc/glossary-worktree later to maint).
+
+ * L10n support for a few error messages.
+   (merge 3d3c23b3a7 bs/forbid-i18n-of-protocol-token-in-fetch-pack later to maint).
+
+ * Test modernization.
+   (merge d4fe066e4b sy/t0001-use-path-is-helper later to maint).
+
+ * "git log --graph --graph" used to leak a graph structure, and there
+   was no way to countermand "--graph" that appear earlier on the
+   command line.  A "--no-graph" option has been added and resource
+   leakage has been plugged.
+
+ * Error output given in response to an ambiguous object name has been
+   improved.
+   (merge 3a73c1dfaf ab/ambiguous-object-name later to maint).
+
+ * "git sparse-checkout" wants to work with per-worktree configuration,
+   but did not work well in a worktree attached to a bare repository.
+   (merge 3ce1138272 ds/sparse-checkout-requires-per-worktree-config later to maint).
+
+ * Setting core.untrackedCache to true failed to add the untracked
+   cache extension to the index.
+
+ * Workaround we have for versions of PCRE2 before their version 10.36
+   were in effect only for their versions newer than 10.36 by mistake,
+   which has been corrected.
+   (merge 97169fc361 rs/pcre-invalid-utf8-fix-fix later to maint).
+
+ * Document Taylor as a new member of Git PLC at SFC.  Welcome.
+   (merge e8d56ca863 tb/coc-plc-update later to maint).
+
+ * "git checkout -b branch/with/multi/level/name && git stash" only
+   recorded the last level component of the branch name, which has
+   been corrected.
+
+ * Check the return value from parse_tree_indirect() to turn segfaults
+   into calls to die().
+   (merge 8d2eaf649a gc/parse-tree-indirect-errors later to maint).
+
+ * Newer version of GPGSM changed its output in a backward
+   incompatible way to break our code that parses its output.  It also
+   added more processes our tests need to kill when cleaning up.
+   Adjustments have been made to accommodate these changes.
+   (merge b0b70d54c4 fs/gpgsm-update later to maint).
+
+ * The untracked cache newly computed weren't written back to the
+   on-disk index file when there is no other change to the index,
+   which has been corrected.
+
+ * "git config -h" did not describe the "--type" option correctly.
+   (merge 5445124fad mf/fix-type-in-config-h later to maint).
+
+ * The way generation number v2 in the commit-graph files are
+   (not) handled has been corrected.
+   (merge 6dbf4b8172 ds/commit-graph-gen-v2-fixes later to maint).
+
+ * The method to trigger malloc check used in our tests no longer work
+   with newer versions of glibc.
+   (merge baedc59543 ep/test-malloc-check-with-glibc-2.34 later to maint).
+
+ * When "git fetch --recurse-submodules" grabbed submodule commits
+   that would be needed to recursively check out newly fetched commits
+   in the superproject, it only paid attention to submodules that are
+   in the current checkout of the superproject.  We now do so for all
+   submodules that have been run "git submodule init" on.
+
+ * "git rebase $base $non_branch_commit", when $base is an ancestor or
+   the $non_branch_commit, modified the current branch, which has been
+   corrected.
+
+ * When "shallow" information is updated, we forgot to update the
+   in-core equivalent, which has been corrected.
+
+ * When creating a loose object file, we didn't report the exact
+   filename of the file we failed to fsync, even though the
+   information was readily available, which has been corrected.
+
+ * "git am" can read from the standard input when no mailbox is given
+   on the command line, but the end-user gets no indication when it
+   happens, making Git appear stuck.
+   (merge 7b20af6a06 jc/mailsplit-warn-on-tty later to maint).
+
+ * "git mv" failed to refresh the cached stat information for the
+   entry it moved.
+   (merge b7f9130a06 vd/mv-refresh-stat later to maint).
+
+ * Other code cleanup, docfix, build fix, etc.
+   (merge cfc5cf428b jc/find-header later to maint).
+   (merge 40e7cfdd46 jh/p4-fix-use-of-process-error-exception later to maint).
+   (merge 727e6ea350 jh/p4-spawning-external-commands-cleanup later to maint).
+   (merge 0a6adc26e2 rs/grep-expr-cleanup later to maint).
+   (merge 4ed7dfa713 po/readme-mention-contributor-hints later to maint).
+   (merge 6046f7a91c en/plug-leaks-in-merge later to maint).
+   (merge 8c591dbfce bc/clarify-eol-attr later to maint).
+   (merge 518e15db74 rs/parse-options-lithelp-help later to maint).
+   (merge cbac0076ef gh/doc-typos later to maint).
+   (merge ce14de03db ab/no-errno-from-resolve-ref-unsafe later to maint).
+   (merge 2826ffad8c rc/negotiate-only-typofix later to maint).
+   (merge 0f03f04c5c en/sparse-checkout-leakfix later to maint).
+   (merge 74f3390dde sy/diff-usage-typofix later to maint).
+   (merge 45d0212a71 ll/doc-mktree-typofix later to maint).
+   (merge e9b272e4c1 js/no-more-legacy-stash later to maint).
+   (merge 6798b08e84 ab/do-not-hide-failures-in-git-dot-pm later to maint).
+   (merge 9325285df4 po/doc-check-ignore-markup-fix later to maint).
+   (merge cd26cd6c7c sy/modernize-t-lib-read-tree-m-3way later to maint).
+   (merge d17294a05e ab/hash-object-leakfix later to maint).
+   (merge b8403129d3 jd/t0015-modernize later to maint).
+   (merge 332acc248d ds/mailmap later to maint).
+   (merge 04bf052eef ab/grep-patterntype later to maint).
+   (merge 6ee36364eb ab/diff-free-more later to maint).
+   (merge 63a36017fe nj/read-tree-doc-reffix later to maint).
+   (merge eed36fce38 sm/no-git-in-upstream-of-pipe-in-tests later to maint).
+   (merge c614beb933 ep/t6423-modernize later to maint).
+   (merge 57be9c6dee ab/reflog-prep-fix later to maint).
+   (merge 5327d8982a js/in-place-reverse-in-sequencer later to maint).
+   (merge 2e2c0be51e dp/worktree-repair-in-usage later to maint).
+   (merge 6563706568 jc/coding-guidelines-decl-in-for-loop later to maint).
diff --git a/Documentation/RelNotes/2.36.1.txt b/Documentation/RelNotes/2.36.1.txt
new file mode 100644 (file)
index 0000000..a961709
--- /dev/null
@@ -0,0 +1,33 @@
+Git v2.36.1 Release Notes
+=========================
+
+Fixes since v2.36
+-----------------
+
+ * "git submodule update" without pathspec should silently skip an
+   uninitialized submodule, but it started to become noisy by mistake.
+
+ * "diff-tree --stdin" has been broken for about a year, but 2.36
+   release broke it even worse by breaking running the command with
+   <pathspec>, which in turn broke "gitk" and got noticed.  This has
+   been corrected by aligning its behaviour to that of "log".
+
+ * Regression fix for 2.36 where "git name-rev" started to sometimes
+   reference strings after they are freed.
+
+ * "git show <commit1> <commit2>... -- <pathspec>" lost the pathspec
+   when showing the second and subsequent commits, which has been
+   corrected.
+
+ * "git fast-export -- <pathspec>" lost the pathspec when showing the
+   second and subsequent commits, which has been corrected.
+
+ * "git format-patch <args> -- <pathspec>" lost the pathspec when
+   showing the second and subsequent commits, which has been
+   corrected.
+
+ * Get rid of a bogus and over-eager coccinelle rule.
+
+ * Correct choices of C compilers used in various CI jobs.
+
+Also contains minor documentation updates and code clean-ups.
diff --git a/Documentation/RelNotes/2.36.2.txt b/Documentation/RelNotes/2.36.2.txt
new file mode 100644 (file)
index 0000000..958f5b4
--- /dev/null
@@ -0,0 +1,56 @@
+Git v2.36.2 Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.30.5, v2.31.4,
+v2.32.3, v2.33.4, v2.34.4 and v2.35.4 to address the security
+issue CVE-2022-29187; see the release notes for these versions
+for details.
+
+Apart from that, this maintenance release is primarily to merge down
+updates to the build and CI procedures from the 'master' front, in
+order to ensure that we can cut healthy maintenance releases in the
+future.  It also contains a handful of small and trivially-correct
+bugfixes.
+
+Fixes since v2.36.1
+-------------------
+
+ * Fixes real problems noticed by gcc 12 and works around false
+   positives.
+
+ * Update URL to the gitk repository.
+
+ * The "--current" option of "git show-branch" should have been made
+   incompatible with the "--reflog" mode, but this was not enforced,
+   which has been corrected.
+
+ * "git archive --add-file=<path>" picked up the raw permission bits
+   from the path and propagated to zip output in some cases, without
+   normalization, which has been corrected (tar output did not have
+   this issue).
+
+ * A bit of test framework fixes with a few fixes to issues found by
+   valgrind.
+
+ * macOS CI jobs have been occasionally flaky due to tentative version
+   skew between perforce and the homebrew packager.  Instead of
+   failing the whole CI job, just let it skip the p4 tests when this
+   happens.
+
+ * The commit summary shown after making a commit is matched to what
+   is given in "git status" not to use the break-rewrite heuristics.
+
+ * Avoid problems from interaction between malloc_check and address
+   sanitizer.
+
+ * "git rebase --keep-base <upstream> <branch-to-rebase>" computed the
+   commit to rebase onto incorrectly, which has been corrected.
+
+ * The path taken by "git multi-pack-index" command from the end user
+   was compared with path internally prepared by the tool withut first
+   normalizing, which lead to duplicated paths not being noticed,
+   which has been corrected.
+
+ * "git clone --origin X" leaked piece of memory that held value read
+   from the clone.defaultRemoteName configuration variable, which has
+   been plugged.
diff --git a/Documentation/RelNotes/2.36.3.txt b/Documentation/RelNotes/2.36.3.txt
new file mode 100644 (file)
index 0000000..56db77b
--- /dev/null
@@ -0,0 +1,5 @@
+Git v2.36.3 Release Notes
+=========================
+
+This release merges the security fix that appears in v2.30.6; see
+the release notes for that version for details.
diff --git a/Documentation/RelNotes/2.36.4.txt b/Documentation/RelNotes/2.36.4.txt
new file mode 100644 (file)
index 0000000..58fb93a
--- /dev/null
@@ -0,0 +1,5 @@
+Git v2.36.4 Release Notes
+=========================
+
+This release merges the security fix that appears in v2.30.7; see
+the release notes for that version for details.
diff --git a/Documentation/RelNotes/2.36.5.txt b/Documentation/RelNotes/2.36.5.txt
new file mode 100644 (file)
index 0000000..8a098c7
--- /dev/null
@@ -0,0 +1,7 @@
+Git v2.36.5 Release Notes
+=========================
+
+This release merges up the fixes that appear in v2.30.8, v2.31.7,
+v2.32.6, v2.33.7, v2.34.7 and v2.35.7 to address the security
+issues CVE-2023-22490 and CVE-2023-23946; see the release notes
+for these versions for details.
index 92b80d94d488c2f7af6f5be2b5fbded582b65850..5bd795e5dbf90daff92fcf33a10f7c318e9d0689 100644 (file)
@@ -110,6 +110,35 @@ run `git diff --check` on your changes before you commit.
 [[describe-changes]]
 === Describe your changes well.
 
+The log message that explains your changes is just as important as the
+changes themselves.  Your code may be clearly written with in-code
+comment to sufficiently explain how it works with the surrounding
+code, but those who need to fix or enhance your code in the future
+will need to know _why_ your code does what it does, for a few
+reasons:
+
+. Your code may be doing something differently from what you wanted it
+  to do.  Writing down what you actually wanted to achieve will help
+  them fix your code and make it do what it should have been doing
+  (also, you often discover your own bugs yourself, while writing the
+  log message to summarize the thought behind it).
+
+. Your code may be doing things that were only necessary for your
+  immediate needs (e.g. "do X to directories" without implementing or
+  even designing what is to be done on files).  Writing down why you
+  excluded what the code does not do will help guide future developers.
+  Writing down "we do X to directories, because directories have
+  characteristic Y" would help them infer "oh, files also have the same
+  characteristic Y, so perhaps doing X to them would also make sense?".
+  Saying "we don't do the same X to files, because ..." will help them
+  decide if the reasoning is sound (in which case they do not waste
+  time extending your code to cover files), or reason differently (in
+  which case, they can explain why they extend your code to cover
+  files, too).
+
+The goal of your log message is to convey the _why_ behind your
+change to help future developers.
+
 The first line of the commit message should be a short description (50
 characters is the soft limit, see DISCUSSION in linkgit:git-commit[1]),
 and should skip the full stop.  It is also conventional in most cases to
@@ -142,6 +171,13 @@ The body should provide a meaningful commit message, which:
 
 . alternate solutions considered but discarded, if any.
 
+[[present-tense]]
+The problem statement that describes the status quo is written in the
+present tense.  Write "The code does X when it is given input Y",
+instead of "The code used to do Y when given input X".  You do not
+have to say "Currently"---the status quo in the problem statement is
+about the code _without_ your change, by project convention.
+
 [[imperative-mood]]
 Describe your changes in imperative mood, e.g. "make xyzzy do frotz"
 instead of "[This patch] makes xyzzy do frotz" or "[I] changed xyzzy
@@ -416,7 +452,10 @@ repositories.
 
 - `gitk-git/` comes from Paul Mackerras's gitk project:
 
-       git://ozlabs.org/~paulus/gitk
+       git://git.ozlabs.org/~paulus/gitk
+
+   Those who are interested in improve gitk can volunteer to help Paul
+   in maintaining it cf. <YntxL/fTplFm8lr6@cleo>.
 
 - `po/` comes from the localization coordinator, Jiang Xin:
 
index 8d3f5180831cf23de109bb012f035f3b4df54b33..e284b042f227f1eda81a434c022d8d33debe9cb7 100644 (file)
@@ -159,6 +159,33 @@ all branches that begin with `foo/`. This is useful if your branches are
 organized hierarchically and you would like to apply a configuration to
 all the branches in that hierarchy.
 
+`hasconfig:remote.*.url:`::
+       The data that follows this keyword is taken to
+       be a pattern with standard globbing wildcards and two
+       additional ones, `**/` and `/**`, that can match multiple
+       components. The first time this keyword is seen, the rest of
+       the config files will be scanned for remote URLs (without
+       applying any values). If there exists at least one remote URL
+       that matches this pattern, the include condition is met.
++
+Files included by this option (directly or indirectly) are not allowed
+to contain remote URLs.
++
+Note that unlike other includeIf conditions, resolving this condition
+relies on information that is not yet known at the point of reading the
+condition. A typical use case is this option being present as a
+system-level or global-level config, and the remote URL being in a
+local-level config; hence the need to scan ahead when resolving this
+condition. In order to avoid the chicken-and-egg problem in which
+potentially-included files can affect whether such files are potentially
+included, Git breaks the cycle by prohibiting these files from affecting
+the resolution of these conditions (thus, prohibiting them from
+declaring remote URLs).
++
+As for the naming of this keyword, it is for forwards compatibiliy with
+a naming scheme that supports more variable-based include conditions,
+but currently Git only supports the exact keyword described above.
+
 A few more notes on matching via `gitdir` and `gitdir/i`:
 
  * Symlinks in `$GIT_DIR` are not resolved before matching.
@@ -226,6 +253,14 @@ Example
 ; currently checked out
 [includeIf "onbranch:foo-branch"]
        path = foo.inc
+
+; include only if a remote with the given URL exists (note
+; that such a URL may be provided later in a file or in a
+; file read after this file is read, as seen in this example)
+[includeIf "hasconfig:remote.*.url:https://example.com/**"]
+       path = foo.inc
+[remote "origin"]
+       url = https://example.com/git
 ----
 
 Values
@@ -460,8 +495,6 @@ include::config/repack.txt[]
 
 include::config/rerere.txt[]
 
-include::config/reset.txt[]
-
 include::config/safe.txt[]
 
 include::config/sendemail.txt[]
@@ -470,6 +503,8 @@ include::config/sequencer.txt[]
 
 include::config/showbranch.txt[]
 
+include::config/sparse.txt[]
+
 include::config/splitindex.txt[]
 
 include::config/ssh.txt[]
index 063eec2511d37edd3c00037dec3ce9298ce20506..a00d0100a82ba710ea52470764b047e2aeb38d56 100644 (file)
@@ -4,6 +4,10 @@ advice.*::
        can tell Git that you do not need help by setting these to 'false':
 +
 --
+       ambiguousFetchRefspec::
+               Advice shown when fetch refspec for multiple remotes map to
+               the same remote-tracking branch namespace and causes branch
+               tracking set-up to fail.
        fetchShowForcedUpdates::
                Advice shown when linkgit:git-fetch[1] takes a long time
                to calculate forced updates after ref updates, or to warn
@@ -67,10 +71,10 @@ advice.*::
        commitBeforeMerge::
                Advice shown when linkgit:git-merge[1] refuses to
                merge to avoid overwriting local changes.
-       resetQuiet::
-               Advice to consider using the `--quiet` option to linkgit:git-reset[1]
-               when the command takes more than 2 seconds to enumerate unstaged
-               changes after reset.
+       resetNoRefresh::
+               Advice to consider using the `--no-refresh` option to
+               linkgit:git-reset[1] when the command takes more than 2 seconds
+               to refresh the index after reset.
        resolveConflict::
                Advice shown by various commands when conflicts
                prevent the operation from being performed.
@@ -85,6 +89,9 @@ advice.*::
                linkgit:git-switch[1] or linkgit:git-checkout[1]
                to move to the detach HEAD state, to instruct how to
                create a local branch after the fact.
+       suggestDetachingHead::
+               Advice shown when linkgit:git-switch[1] refuses to detach HEAD
+               without the explicit `--detach` option.
        checkoutAmbiguousRemoteBranchName::
                Advice shown when the argument to
                linkgit:git-checkout[1] and linkgit:git-switch[1]
@@ -116,6 +123,9 @@ advice.*::
        submoduleAlternateErrorStrategyDie::
                Advice shown when a submodule.alternateErrorStrategy option
                configured to "die" causes a fatal error.
+       submodulesNotUpdated::
+               Advice shown when a user runs a submodule command that fails
+               because `git submodule update --init` was not run.
        addIgnoredFile::
                Advice shown if a user attempts to add an ignored file to
                the index.
index 7bcfbd18a52a7a2ddfada41a245bb80d882a1bce..26f4fb137a738ead96e0a9848df9a383aa432305 100644 (file)
@@ -6,3 +6,8 @@ clone.defaultRemoteName::
 clone.rejectShallow::
        Reject to clone a repository if it is a shallow one, can be overridden by
        passing option `--reject-shallow` in command line. See linkgit:git-clone[1]
+
+clone.filterSubmodules::
+       If a partial clone filter is provided (see `--filter` in
+       linkgit:git-rev-list[1]) and `--recurse-submodules` is used, also apply
+       the filter to submodules.
index c04f62a54a154cd6315f974844c52c950d715c3c..e67392cc838499a039562f058160c500a6451585 100644 (file)
@@ -62,22 +62,54 @@ core.protectNTFS::
        Defaults to `true` on Windows, and `false` elsewhere.
 
 core.fsmonitor::
-       If set, the value of this variable is used as a command which
-       will identify all files that may have changed since the
-       requested date/time. This information is used to speed up git by
-       avoiding unnecessary processing of files that have not changed.
-       See the "fsmonitor-watchman" section of linkgit:githooks[5].
+       If set to true, enable the built-in file system monitor
+       daemon for this working directory (linkgit:git-fsmonitor{litdd}daemon[1]).
++
+Like hook-based file system monitors, the built-in file system monitor
+can speed up Git commands that need to refresh the Git index
+(e.g. `git status`) in a working directory with many files.  The
+built-in monitor eliminates the need to install and maintain an
+external third-party tool.
++
+The built-in file system monitor is currently available only on a
+limited set of supported platforms.  Currently, this includes Windows
+and MacOS.
++
+       Otherwise, this variable contains the pathname of the "fsmonitor"
+       hook command.
++
+This hook command is used to identify all files that may have changed
+since the requested date/time. This information is used to speed up
+git by avoiding unnecessary scanning of files that have not changed.
++
+See the "fsmonitor-watchman" section of linkgit:githooks[5].
++
+Note that if you concurrently use multiple versions of Git, such
+as one version on the command line and another version in an IDE
+tool, that the definition of `core.fsmonitor` was extended to
+allow boolean values in addition to hook pathnames.  Git versions
+2.35.1 and prior will not understand the boolean values and will
+consider the "true" or "false" values as hook pathnames to be
+invoked.  Git versions 2.26 thru 2.35.1 default to hook protocol
+V2 and will fall back to no fsmonitor (full scan).  Git versions
+prior to 2.26 default to hook protocol V1 and will silently
+assume there were no changes to report (no scan), so status
+commands may report incomplete results.  For this reason, it is
+best to upgrade all of your Git versions before using the built-in
+file system monitor.
 
 core.fsmonitorHookVersion::
-       Sets the version of hook that is to be used when calling fsmonitor.
-       There are currently versions 1 and 2. When this is not set,
-       version 2 will be tried first and if it fails then version 1
-       will be tried. Version 1 uses a timestamp as input to determine
-       which files have changes since that time but some monitors
-       like watchman have race conditions when used with a timestamp.
-       Version 2 uses an opaque string so that the monitor can return
-       something that can be used to determine what files have changed
-       without race conditions.
+       Sets the protocol version to be used when invoking the
+       "fsmonitor" hook.
++
+There are currently versions 1 and 2. When this is not set,
+version 2 will be tried first and if it fails then version 1
+will be tried. Version 1 uses a timestamp as input to determine
+which files have changes since that time but some monitors
+like Watchman have race conditions when used with a timestamp.
+Version 2 uses an opaque string so that the monitor can return
+something that can be used to determine what files have changed
+without race conditions.
 
 core.trustctime::
        If false, the ctime differences between the index and the
@@ -547,13 +579,64 @@ core.whitespace::
   is relevant for `indent-with-non-tab` and when Git fixes `tab-in-indent`
   errors. The default tab width is 8. Allowed values are 1 to 63.
 
+core.fsync::
+       A comma-separated list of components of the repository that
+       should be hardened via the core.fsyncMethod when created or
+       modified.  You can disable hardening of any component by
+       prefixing it with a '-'.  Items that are not hardened may be
+       lost in the event of an unclean system shutdown. Unless you
+       have special requirements, it is recommended that you leave
+       this option empty or pick one of `committed`, `added`,
+       or `all`.
++
+When this configuration is encountered, the set of components starts with
+the platform default value, disabled components are removed, and additional
+components are added. `none` resets the state so that the platform default
+is ignored.
++
+The empty string resets the fsync configuration to the platform
+default. The default on most platforms is equivalent to
+`core.fsync=committed,-loose-object`, which has good performance,
+but risks losing recent work in the event of an unclean system shutdown.
++
+* `none` clears the set of fsynced components.
+* `loose-object` hardens objects added to the repo in loose-object form.
+* `pack` hardens objects added to the repo in packfile form.
+* `pack-metadata` hardens packfile bitmaps and indexes.
+* `commit-graph` hardens the commit graph file.
+* `index` hardens the index when it is modified.
+* `objects` is an aggregate option that is equivalent to
+  `loose-object,pack`.
+* `reference` hardens references modified in the repo.
+* `derived-metadata` is an aggregate option that is equivalent to
+  `pack-metadata,commit-graph`.
+* `committed` is an aggregate option that is currently equivalent to
+  `objects`. This mode sacrifices some performance to ensure that work
+  that is committed to the repository with `git commit` or similar commands
+  is hardened.
+* `added` is an aggregate option that is currently equivalent to
+  `committed,index`. This mode sacrifices additional performance to
+  ensure that the results of commands like `git add` and similar operations
+  are hardened.
+* `all` is an aggregate option that syncs all individual components above.
+
+core.fsyncMethod::
+       A value indicating the strategy Git will use to harden repository data
+       using fsync and related primitives.
++
+* `fsync` uses the fsync() system call or platform equivalents.
+* `writeout-only` issues pagecache writeback requests, but depending on the
+  filesystem and storage hardware, data added to the repository may not be
+  durable in the event of a system crash. This is the default mode on macOS.
+
 core.fsyncObjectFiles::
        This boolean will enable 'fsync()' when writing object files.
+       This setting is deprecated. Use core.fsync instead.
 +
-This is a total waste of time and effort on a filesystem that orders
-data writes properly, but can be useful for filesystems that do not use
-journalling (traditional UNIX filesystems) or that only journal metadata
-and not file contents (OS X's HFS+, or Linux ext3 with "data=writeback").
+This setting affects data added to the Git repository in loose-object
+form. When set to true, Git will issue an fsync or similar system call
+to flush caches so that loose-objects remain consistent in the face
+of a unclean system shutdown.
 
 core.preloadIndex::
        Enable parallel index preload for operations like 'git diff'
index 4e23d73cdcadf671aab1273f648d9f09cab254c6..bccaec7a963679f8262d7c8d056fa4429b9586d1 100644 (file)
@@ -6,3 +6,34 @@ extensions.objectFormat::
 Note that this setting should only be set by linkgit:git-init[1] or
 linkgit:git-clone[1].  Trying to change it after initialization will not
 work and will produce hard-to-diagnose issues.
+
+extensions.worktreeConfig::
+       If enabled, then worktrees will load config settings from the
+       `$GIT_DIR/config.worktree` file in addition to the
+       `$GIT_COMMON_DIR/config` file. Note that `$GIT_COMMON_DIR` and
+       `$GIT_DIR` are the same for the main working tree, while other
+       working trees have `$GIT_DIR` equal to
+       `$GIT_COMMON_DIR/worktrees/<id>/`. The settings in the
+       `config.worktree` file will override settings from any other
+       config files.
++
+When enabling `extensions.worktreeConfig`, you must be careful to move
+certain values from the common config file to the main working tree's
+`config.worktree` file, if present:
++
+* `core.worktree` must be moved from `$GIT_COMMON_DIR/config` to
+  `$GIT_COMMON_DIR/config.worktree`.
+* If `core.bare` is true, then it must be moved from `$GIT_COMMON_DIR/config`
+  to `$GIT_COMMON_DIR/config.worktree`.
++
+It may also be beneficial to adjust the locations of `core.sparseCheckout`
+and `core.sparseCheckoutCone` depending on your desire for customizable
+sparse-checkout settings for each worktree. By default, the `git
+sparse-checkout` builtin enables `extensions.worktreeConfig`, assigns
+these config values on a per-worktree basis, and uses the
+`$GIT_DIR/info/sparse-checkout` file to specify the sparsity for each
+worktree independently. See linkgit:git-sparse-checkout[1] for more
+details.
++
+For historical reasons, `extensions.worktreeConfig` is respected
+regardless of the `core.repositoryFormatVersion` setting.
index 63748c02b72afe5211a710e963c2be502888545e..cd65d236b43ffc3a7c08fa9df480fcbe6c82e68c 100644 (file)
@@ -56,18 +56,19 @@ fetch.output::
        OUTPUT in linkgit:git-fetch[1] for detail.
 
 fetch.negotiationAlgorithm::
-       Control how information about the commits in the local repository is
-       sent when negotiating the contents of the packfile to be sent by the
-       server. Set to "skipping" to use an algorithm that skips commits in an
-       effort to converge faster, but may result in a larger-than-necessary
-       packfile; or set to "noop" to not send any information at all, which
-       will almost certainly result in a larger-than-necessary packfile, but
-       will skip the negotiation step.
-       The default is "default" which instructs Git to use the default algorithm
-       that never skips commits (unless the server has acknowledged it or one
-       of its descendants). If `feature.experimental` is enabled, then this
-       setting defaults to "skipping".
-       Unknown values will cause 'git fetch' to error out.
+       Control how information about the commits in the local repository
+       is sent when negotiating the contents of the packfile to be sent by
+       the server.  Set to "consecutive" to use an algorithm that walks
+       over consecutive commits checking each one.  Set to "skipping" to
+       use an algorithm that skips commits in an effort to converge
+       faster, but may result in a larger-than-necessary packfile; or set
+       to "noop" to not send any information at all, which will almost
+       certainly result in a larger-than-necessary packfile, but will skip
+       the negotiation step.  Set to "default" to override settings made
+       previously and use the default behaviour.  The default is normally
+       "consecutive", but if `feature.experimental` is true, then the
+       default is "skipping".  Unknown values will cause 'git fetch' to
+       error out.
 +
 See also the `--negotiate-only` and `--negotiation-tip` options to
 linkgit:git-fetch[1].
index 0cb189a077ca54ed83a6dfefad9be327f7176d40..86892ada771e802830cd10d3e5ff95bc74355e9e 100644 (file)
@@ -37,7 +37,7 @@ gpg.minTrustLevel::
 gpg.ssh.defaultKeyCommand::
        This command that will be run when user.signingkey is not set and a ssh
        signature is requested. On successful exit a valid ssh public key is
-       expected in the first line of its output. To automatically use the first
+       expected in the first line of its output. To automatically use the first
        available key from your ssh-agent set this to "ssh-add -L".
 
 gpg.ssh.allowedSignersFile::
@@ -66,7 +66,7 @@ This way only committers with an already valid key can add or change keys in the
 +
 Since OpensSSH 8.8 this file allows specifying a key lifetime using valid-after &
 valid-before options. Git will mark signatures as valid if the signing key was
-valid at the time of the signatures creation. This allows users to change a
+valid at the time of the signature's creation. This allows users to change a
 signing key without invalidating all previously made signatures.
 +
 Using a SSH CA key with the cert-authority option
index a8e6437a903592934198fb212ede8241d6acebca..0678b4bcfef7e6150a4661edb1b5cc229dfa9adf 100644 (file)
@@ -82,5 +82,7 @@ remote.<name>.promisor::
        objects.
 
 remote.<name>.partialclonefilter::
-       The filter that will be applied when fetching from this
-       promisor remote.
+       The filter that will be applied when fetching from this promisor remote.
+       Changing or clearing this value will only affect fetches for new commits.
+       To fetch associated objects for commits already present in the local object
+       database, use the `--refetch` option of linkgit:git-fetch[1].
index 9c413e177e02c6f28865ed79d84de3c5ccf43dd9..41ac6953c87eb55f14b01471a5b6013bb318859e 100644 (file)
@@ -25,3 +25,8 @@ repack.writeBitmaps::
        space and extra time spent on the initial repack.  This has
        no effect if multiple packfiles are created.
        Defaults to true on bare repos, false otherwise.
+
+repack.updateServerInfo::
+       If set to false, linkgit:git-repack[1] will not run
+       linkgit:git-update-server-info[1]. Defaults to true. Can be overridden
+       when true by the `-n` option of linkgit:git-repack[1].
diff --git a/Documentation/config/reset.txt b/Documentation/config/reset.txt
deleted file mode 100644 (file)
index 63b7c45..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-reset.quiet::
-       When set to true, 'git reset' will default to the '--quiet' option.
diff --git a/Documentation/config/sparse.txt b/Documentation/config/sparse.txt
new file mode 100644 (file)
index 0000000..aff49a8
--- /dev/null
@@ -0,0 +1,27 @@
+sparse.expectFilesOutsideOfPatterns::
+       Typically with sparse checkouts, files not matching any
+       sparsity patterns are marked with a SKIP_WORKTREE bit in the
+       index and are missing from the working tree.  Accordingly, Git
+       will ordinarily check whether files with the SKIP_WORKTREE bit
+       are in fact present in the working tree contrary to
+       expectations.  If Git finds any, it marks those paths as
+       present by clearing the relevant SKIP_WORKTREE bits.  This
+       option can be used to tell Git that such
+       present-despite-skipped files are expected and to stop
+       checking for them.
++
+The default is `false`, which allows Git to automatically recover
+from the list of files in the index and working tree falling out of
+sync.
++
+Set this to `true` if you are in a setup where some external factor
+relieves Git of the responsibility for maintaining the consistency
+between the presence of working tree files and sparsity patterns.  For
+example, if you have a Git-aware virtual file system that has a robust
+mechanism for keeping the working tree and the sparsity patterns up to
+date based on access patterns.
++
+Regardless of this setting, Git does not check for
+present-despite-skipped files unless sparse checkout is enabled, so
+this config option has no effect unless `core.sparseCheckout` is
+`true`.
index 9ed775281fb34f4e7ce0f7277784b7d74164daa1..b9f609ed76b7f3ff41aef03ecf0ea22fd1d355ea 100644 (file)
@@ -1,10 +1,3 @@
-stash.useBuiltin::
-       Unused configuration variable.  Used in Git versions 2.22 to
-       2.26 as an escape hatch to enable the legacy shellscript
-       implementation of stash.  Now the built-in rewrite of it in C
-       is always used. Setting this will emit a warning, to alert any
-       remaining users that setting this now does nothing.
-
 stash.showIncludeUntracked::
        If this is set to true, the `git stash show` command will show
        the untracked files of a stash entry.  Defaults to false. See
index ee454f8126aa3a69e97b5c44d64966fb43a1b8b5..6490527b45bcd4819be3fe412bcfc0aab7740ee6 100644 (file)
@@ -59,18 +59,33 @@ submodule.active::
 
 submodule.recurse::
        A boolean indicating if commands should enable the `--recurse-submodules`
-       option by default.
-       Applies to all commands that support this option
-       (`checkout`, `fetch`, `grep`, `pull`, `push`, `read-tree`, `reset`,
-       `restore` and `switch`) except `clone` and `ls-files`.
+       option by default. Defaults to false.
++
+When set to true, it can be deactivated via the
+`--no-recurse-submodules` option. Note that some Git commands
+lacking this option may call some of the above commands affected by
+`submodule.recurse`; for instance `git remote update` will call
+`git fetch` but does not have a `--no-recurse-submodules` option.
+For these commands a workaround is to temporarily change the
+configuration value by using `git -c submodule.recurse=0`.
++
+The following list shows the commands that accept
+`--recurse-submodules` and whether they are supported by this
+setting.
+
+* `checkout`, `fetch`, `grep`, `pull`, `push`, `read-tree`,
+`reset`, `restore` and `switch` are always supported.
+* `clone` and `ls-files` are not supported.
+* `branch` is supported only if `submodule.propagateBranches` is
+enabled
+
+submodule.propagateBranches::
+       [EXPERIMENTAL] A boolean that enables branching support when
+       using `--recurse-submodules` or `submodule.recurse=true`.
+       Enabling this will allow certain commands to accept
+       `--recurse-submodules` and certain commands that already accept
+       `--recurse-submodules` will now consider branches.
        Defaults to false.
-       When set to true, it can be deactivated via the
-       `--no-recurse-submodules` option. Note that some Git commands
-       lacking this option may call some of the above commands affected by
-       `submodule.recurse`; for instance `git remote update` will call
-       `git fetch` but does not have a `--no-recurse-submodules` option.
-       For these commands a workaround is to temporarily change the
-       configuration value by using `git -c submodule.recurse=0`.
 
 submodule.fetchJobs::
        Specifies how many submodules are fetched/cloned at the same time.
index c89d530d3d1d39dbed0a46b3fa3f6def92ed7def..3674ac48e92c29e2a9fe5db0ccf8ce72e7727290 100644 (file)
@@ -34,7 +34,7 @@ endif::git-diff[]
 endif::git-format-patch[]
 
 ifdef::git-log[]
---diff-merges=(off|none|on|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|remerge|r)::
 --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
@@ -64,6 +64,18 @@ ifdef::git-log[]
        each of the parents. Separate log entry and diff is generated
        for each parent.
 +
+--diff-merges=remerge:::
+--diff-merges=r:::
+--remerge-diff:::
+       With this option, two-parent merge commits are remerged to
+       create a temporary tree object -- potentially containing files
+       with conflict markers and such.  A diff is then shown between
+       that temporary tree and the actual merge commit.
++
+The output emitted when this option is used is subject to change, and
+so is its interaction with other options (unless explicitly
+documented).
++
 --diff-merges=combined:::
 --diff-merges=c:::
 -c:::
@@ -616,11 +628,8 @@ ifndef::git-format-patch[]
 Also, these upper-case letters can be downcased to exclude.  E.g.
 `--diff-filter=ad` excludes added and deleted paths.
 +
-Note that not all diffs can feature all types. For instance, diffs
-from the index to the working tree can never have Added entries
-(because the set of paths included in the diff is limited by what is in
-the index).  Similarly, copied and renamed entries cannot appear if
-detection for those types is disabled.
+Note that not all diffs can feature all types. For instance, copied and
+renamed entries cannot appear if detection for those types is disabled.
 
 -S<string>::
        Look for differences that change the number of occurrences of
index e967ff1874c252cdd73455f73146b4419b58f9c9..622bd84768b056e23fa0f432e745aaffd651c734 100644 (file)
@@ -71,6 +71,7 @@ configuration variables documented in linkgit:git-config[1], and the
        ancestors of the provided `--negotiation-tip=*` arguments,
        which we have in common with the server.
 +
+This is incompatible with `--recurse-submodules=[yes|on-demand]`.
 Internally this is used to implement the `push.negotiate` option, see
 linkgit:git-config[1].
 
@@ -162,6 +163,16 @@ endif::git-pull[]
        behavior for a remote may be specified with the remote.<name>.tagOpt
        setting. See linkgit:git-config[1].
 
+ifndef::git-pull[]
+--refetch::
+       Instead of negotiating with the server to avoid transferring commits and
+       associated objects that are already present locally, this option fetches
+       all objects as a fresh clone would. Use this to reapply a partial clone
+       filter from configuration or using `--filter=` when the filter
+       definition has changed. Automatic post-fetch maintenance will perform
+       object database pack consolidation to remove any duplicate objects.
+endif::git-pull[]
+
 --refmap=<refspec>::
        When fetching refs listed on the command line, use the
        specified refspec (can be given more than once) to map the
@@ -185,15 +196,23 @@ endif::git-pull[]
 ifndef::git-pull[]
 --recurse-submodules[=yes|on-demand|no]::
        This option controls if and under what conditions new commits of
-       populated submodules should be fetched too. It can be used as a
-       boolean option to completely disable recursion when set to 'no' or to
-       unconditionally recurse into all populated submodules when set to
-       'yes', which is the default when this option is used without any
-       value. Use 'on-demand' to only recurse into a populated submodule
-       when the superproject retrieves a commit that updates the submodule's
-       reference to a commit that isn't already in the local submodule
-       clone. By default, 'on-demand' is used, unless
-       `fetch.recurseSubmodules` is set (see linkgit:git-config[1]).
+       submodules should be fetched too. When recursing through submodules,
+       `git fetch` always attempts to fetch "changed" submodules, that is, a
+       submodule that has commits that are referenced by a newly fetched
+       superproject commit but are missing in the local submodule clone. A
+       changed submodule can be fetched as long as it is present locally e.g.
+       in `$GIT_DIR/modules/` (see linkgit:gitsubmodules[7]); if the upstream
+       adds a new submodule, that submodule cannot be fetched until it is
+       cloned e.g. by `git submodule update`.
++
+When set to 'on-demand', only changed submodules are fetched. When set
+to 'yes', all populated submodules are fetched and submodules that are
+both unpopulated and changed are fetched. When set to 'no', submodules
+are never fetched.
++
+When unspecified, this uses the value of `fetch.recurseSubmodules` if it
+is set (see linkgit:git-config[1]), defaulting to 'on-demand' if unset.
+When this option is used without any value, it defaults to 'yes'.
 endif::git-pull[]
 
 -j::
index 731e340cbc54718838cd0d42354ccdfeddfa2c52..c8b4f9ce3c7059616f867de767a5f43268f90fa6 100644 (file)
@@ -16,7 +16,8 @@ SYNOPSIS
        [--points-at <object>] [--format=<format>]
        [(-r | --remotes) | (-a | --all)]
        [--list] [<pattern>...]
-'git branch' [--track[=(direct|inherit)] | --no-track] [-f] <branchname> [<start-point>]
+'git branch' [--track[=(direct|inherit)] | --no-track] [-f]
+       [--recurse-submodules] <branchname> [<start-point>]
 'git branch' (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
 'git branch' --unset-upstream [<branchname>]
 'git branch' (-m | -M) [<oldbranch>] <newbranch>
@@ -235,6 +236,22 @@ how the `branch.<name>.remote` and `branch.<name>.merge` options are used.
        Do not set up "upstream" configuration, even if the
        branch.autoSetupMerge configuration variable is set.
 
+--recurse-submodules::
+       THIS OPTION IS EXPERIMENTAL! Causes the current command to
+       recurse into submodules if `submodule.propagateBranches` is
+       enabled. See `submodule.propagateBranches` in
+       linkgit:git-config[1]. Currently, only branch creation is
+       supported.
++
+When used in branch creation, a new branch <branchname> will be created
+in the superproject and all of the submodules in the superproject's
+<start-point>. In submodules, the branch will point to the submodule
+commit in the superproject's <start-point> but the branch's tracking
+information will be set up based on the submodule's branches and remotes
+e.g. `git branch --recurse-submodules topic origin/main` will create the
+submodule branch "topic" that points to the submodule commit in the
+superproject's "origin/main", but tracks the submodule's "origin/main".
+
 --set-upstream::
        As this option had confusing syntax, it is no longer supported.
        Please use `--track` or `--set-upstream-to` instead.
index 72ab81390525cd23aa8b63a43d0070986620db17..7685b570455cadc243929deecc197776326dfeba 100644 (file)
@@ -75,8 +75,11 @@ verify <file>::
        cleanly to the current repository.  This includes checks on the
        bundle format itself as well as checking that the prerequisite
        commits exist and are fully linked in the current repository.
-       'git bundle' prints a list of missing commits, if any, and exits
-       with a non-zero status.
+       Then, 'git bundle' prints a list of missing commits, if any.
+       Finally, information about additional capabilities, such as "object
+       filter", is printed. See "Capabilities" in link:technical/bundle-format.html
+       for more information. The exit code is zero for success, but will
+       be nonzero if the bundle file is invalid.
 
 list-heads <file>::
        Lists the references defined in the bundle.  If followed by a
index 27b27e2b300c49bb07f348291a8b04af3d128f30..24a811f0ef64b0f411c23a3598e7bc73e6a2e7ee 100644 (file)
@@ -9,8 +9,14 @@ git-cat-file - Provide content or type and size information for repository objec
 SYNOPSIS
 --------
 [verse]
-'git cat-file' (-t [--allow-unknown-type]| -s [--allow-unknown-type]| -e | -p | <type> | --textconv | --filters ) [--path=<path>] <object>
-'git cat-file' (--batch[=<format>] | --batch-check[=<format>]) [ --textconv | --filters ] [--follow-symlinks]
+'git cat-file' <type> <object>
+'git cat-file' (-e | -p) <object>
+'git cat-file' (-t | -s) [--allow-unknown-type] <object>
+'git cat-file' (--batch | --batch-check | --batch-command) [--batch-all-objects]
+            [--buffer] [--follow-symlinks] [--unordered]
+            [--textconv | --filters]
+'git cat-file' (--textconv | --filters)
+            [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]
 
 DESCRIPTION
 -----------
@@ -90,6 +96,33 @@ OPTIONS
        need to specify the path, separated by whitespace.  See the
        section `BATCH OUTPUT` below for details.
 
+--batch-command::
+--batch-command=<format>::
+       Enter a command mode that reads commands and arguments from stdin. May
+       only be combined with `--buffer`, `--textconv` or `--filters`. In the
+       case of `--textconv` or `--filters`, the input lines also need to specify
+       the path, separated by whitespace. See the section `BATCH OUTPUT` below
+       for details.
++
+`--batch-command` recognizes the following commands:
++
+--
+contents <object>::
+       Print object contents for object reference `<object>`. This corresponds to
+       the output of `--batch`.
+
+info <object>::
+       Print object info for object reference `<object>`. This corresponds to the
+       output of `--batch-check`.
+
+flush::
+       Used with `--buffer` to execute all preceding commands that were issued
+       since the beginning or since the last flush was issued. When `--buffer`
+       is used, no output will come until a `flush` is issued. When `--buffer`
+       is not used, commands are flushed each time without issuing `flush`.
+--
++
+
 --batch-all-objects::
        Instead of reading a list of objects on stdin, perform the
        requested batch operation on all objects in the repository and
@@ -104,7 +137,7 @@ OPTIONS
        that a process can interactively read and write from
        `cat-file`. With this option, the output uses normal stdio
        buffering; this is much more efficient when invoking
-       `--batch-check` on a large number of objects.
+       `--batch-check` or `--batch-command` on a large number of objects.
 
 --unordered::
        When `--batch-all-objects` is in use, visit objects in an
@@ -196,6 +229,13 @@ from stdin, one per line, and print information about them. By default,
 the whole line is considered as an object, as if it were fed to
 linkgit:git-rev-parse[1].
 
+When `--batch-command` is given, `cat-file` will read commands from stdin,
+one per line, and print information based on the command given. With
+`--batch-command`, the `info` command followed by an object will print
+information about the object the same way `--batch-check` would, and the
+`contents` command followed by an object prints contents in the same way
+`--batch` would.
+
 You can specify the information shown for each object by using a custom
 `<format>`. The `<format>` is copied literally to stdout for each
 object, with placeholders of the form `%(atom)` expanded, followed by a
@@ -231,9 +271,9 @@ newline. The available atoms are:
 If no format is specified, the default format is `%(objectname)
 %(objecttype) %(objectsize)`.
 
-If `--batch` is specified, the object information is followed by the
-object contents (consisting of `%(objectsize)` bytes), followed by a
-newline.
+If `--batch` is specified, or if `--batch-command` is used with the `contents`
+command, the object information is followed by the object contents (consisting
+of `%(objectsize)` bytes), followed by a newline.
 
 For example, `--batch` without a custom format would produce:
 
index 0c3924a63d2f8625c91cca9ceb391214c3fc3d41..2892799e32f9855bba3b5244e7051d11618fa846 100644 (file)
@@ -33,7 +33,7 @@ OPTIONS
        Instead of printing the paths that are excluded, for each path
        that matches an exclude pattern, print the exclude pattern
        together with the path.  (Matching an exclude pattern usually
-       means the path is excluded, but if the pattern begins with '!'
+       means the path is excluded, but if the pattern begins with "`!`"
        then it is a negated pattern and matching it means the path is
        NOT excluded.)
 +
@@ -77,7 +77,7 @@ If `--verbose` is specified, the output is a series of lines of the form:
 <pathname> is the path of a file being queried, <pattern> is the
 matching pattern, <source> is the pattern's source file, and <linenum>
 is the line number of the pattern within that source.  If the pattern
-contained a `!` prefix or `/` suffix, it will be preserved in the
+contained a "`!`" prefix or "`/`" suffix, it will be preserved in the
 output.  <source> will be an absolute path when referring to the file
 configured by `core.excludesFile`, or relative to the repository root
 when referring to `.git/info/exclude` or a per-directory exclude file.
index 4d33e7be0f5599cc3bb74a45cb0d20fcde1631e8..01dbd5cbf540ea96de2a1fd9b9ce0580077c29fa 100644 (file)
@@ -12,6 +12,7 @@ SYNOPSIS
 'git checkout-index' [-u] [-q] [-a] [-f] [-n] [--prefix=<string>]
                   [--stage=<number>|all]
                   [--temp]
+                  [--ignore-skip-worktree-bits]
                   [-z] [--stdin]
                   [--] [<file>...]
 
@@ -37,8 +38,9 @@ OPTIONS
 
 -a::
 --all::
-       checks out all files in the index.  Cannot be used
-       together with explicit filenames.
+       checks out all files in the index except for those with the
+       skip-worktree bit set (see `--ignore-skip-worktree-bits`).
+       Cannot be used together with explicit filenames.
 
 -n::
 --no-create::
@@ -59,6 +61,10 @@ OPTIONS
        write the content to temporary files.  The temporary name
        associations will be written to stdout.
 
+--ignore-skip-worktree-bits::
+       Check out all files, including those with the skip-worktree bit
+       set.
+
 --stdin::
        Instead of taking list of paths from the command line,
        read list of paths from the standard input.  Paths are
index 984d194934fb84253e7f6b763256e09e2ddd8e91..632bd1348ea14deb067144f187e7f57c0cf2ae60 100644 (file)
@@ -16,7 +16,7 @@ SYNOPSIS
          [--depth <depth>] [--[no-]single-branch] [--no-tags]
          [--recurse-submodules[=<pathspec>]] [--[no-]shallow-submodules]
          [--[no-]remote-submodules] [--jobs <n>] [--sparse] [--[no-]reject-shallow]
-         [--filter=<filter>] [--] <repository>
+         [--filter=<filter> [--also-filter-submodules]] [--] <repository>
          [<directory>]
 
 DESCRIPTION
@@ -182,6 +182,11 @@ objects from the source repository into a pack in the cloned repository.
        at least `<size>`. For more details on filter specifications, see
        the `--filter` option in linkgit:git-rev-list[1].
 
+--also-filter-submodules::
+       Also apply the partial clone filter to any submodules in the repository.
+       Requires `--filter` and `--recurse-submodules`. This can be turned on by
+       default by setting the `clone.filterSubmodules` config option.
+
 --mirror::
        Set up a mirror of the source repository.  This implies `--bare`.
        Compared to `--bare`, `--mirror` not only maps local branches of the
index 2285effb3638ba8952e971dbe1826db28f2b0aea..bdcfd94b642867159ae8683e42624f8e838b6444 100644 (file)
@@ -141,9 +141,13 @@ from all available files.
 See also <<FILES>>.
 
 --worktree::
-       Similar to `--local` except that `.git/config.worktree` is
+       Similar to `--local` except that `$GIT_DIR/config.worktree` is
        read from or written to if `extensions.worktreeConfig` is
-       present. If not it's the same as `--local`.
+       enabled. If not it's the same as `--local`. Note that `$GIT_DIR`
+       is equal to `$GIT_COMMON_DIR` for the main working tree, but is of
+       the form `$GIT_DIR/worktrees/<id>/` for other working trees. See
+       linkgit:git-worktree[1] to learn how to enable
+       `extensions.worktreeConfig`.
 
 -f <config-file>::
 --file <config-file>::
index 7051c6bdf8f542b8fb8c3c4a5a24471355111922..01e1c214dd82e1564b0459c4d6fe5b9f98ba1082 100644 (file)
@@ -1,5 +1,5 @@
-git-credential-cache--daemon(1)
-===============================
+git-credential-cache{litdd}daemon(1)
+====================================
 
 NAME
 ----
@@ -8,7 +8,7 @@ git-credential-cache--daemon - Temporarily store user credentials in memory
 SYNOPSIS
 --------
 [verse]
-git credential-cache--daemon [--debug] <socket>
+'git credential-cache{litdd}daemon' [--debug] <socket>
 
 DESCRIPTION
 -----------
index c9758847937e7db9fb3c4c3a498f5074e9e1f5d9..46747d5f429164f817444cd502d8bff4dc5cbe4d 100644 (file)
@@ -101,6 +101,10 @@ be in a separate packet, and the list must end with a flush packet.
        current shallow boundary instead of from the tip of each
        remote branch history.
 
+--refetch::
+       Skips negotiating commits with the server in order to fetch all matching
+       objects. Use to reapply a new partial clone blob/tree filter.
+
 --no-progress::
        Do not show the progress.
 
index 550c16ca61651a46625c2a175de08ca8c0d20880..e9d364669af7b9fa2aaf59605dc9e7fa386ca021 100644 (file)
@@ -287,12 +287,10 @@ include::transfer-data-leaks.txt[]
 
 BUGS
 ----
-Using --recurse-submodules can only fetch new commits in already checked
-out submodules right now. When e.g. upstream added a new submodule in the
-just fetched commits of the superproject the submodule itself cannot be
-fetched, making it impossible to check out that submodule later without
-having to do a fetch again. This is expected to be fixed in a future Git
-version.
+Using --recurse-submodules can only fetch new commits in submodules that are
+present locally e.g. in `$GIT_DIR/modules/`. If the upstream adds a new
+submodule, that submodule cannot be fetched until it is cloned e.g. by `git
+submodule update`. This is expected to be fixed in a future Git version.
 
 SEE ALSO
 --------
diff --git a/Documentation/git-fsmonitor--daemon.txt b/Documentation/git-fsmonitor--daemon.txt
new file mode 100644 (file)
index 0000000..cc142fb
--- /dev/null
@@ -0,0 +1,75 @@
+git-fsmonitor{litdd}daemon(1)
+=============================
+
+NAME
+----
+git-fsmonitor--daemon - A Built-in File System Monitor
+
+SYNOPSIS
+--------
+[verse]
+'git fsmonitor{litdd}daemon' start
+'git fsmonitor{litdd}daemon' run
+'git fsmonitor{litdd}daemon' stop
+'git fsmonitor{litdd}daemon' status
+
+DESCRIPTION
+-----------
+
+A daemon to watch the working directory for file and directory
+changes using platform-specific file system notification facilities.
+
+This daemon communicates directly with commands like `git status`
+using the link:technical/api-simple-ipc.html[simple IPC] interface
+instead of the slower linkgit:githooks[5] interface.
+
+This daemon is built into Git so that no third-party tools are
+required.
+
+OPTIONS
+-------
+
+start::
+       Starts a daemon in the background.
+
+run::
+       Runs a daemon in the foreground.
+
+stop::
+       Stops the daemon running in the current working
+       directory, if present.
+
+status::
+       Exits with zero status if a daemon is watching the
+       current working directory.
+
+REMARKS
+-------
+
+This daemon is a long running process used to watch a single working
+directory and maintain a list of the recently changed files and
+directories.  Performance of commands such as `git status` can be
+increased if they just ask for a summary of changes to the working
+directory and can avoid scanning the disk.
+
+When `core.fsmonitor` is set to `true` (see linkgit:git-config[1])
+commands, such as `git status`, will ask the daemon for changes and
+automatically start it (if necessary).
+
+For more information see the "File System Monitor" section in
+linkgit:git-update-index[1].
+
+CAVEATS
+-------
+
+The fsmonitor daemon does not currently know about submodules and does
+not know to filter out file system events that happen within a
+submodule.  If fsmonitor daemon is watching a super repo and a file is
+modified within the working directory of a submodule, it will report
+the change (as happening against the super repo).  However, the client
+will properly ignore these extra events, so performance may be affected
+but it will not cause an incorrect result.
+
+GIT
+---
+Part of the linkgit:git[1] suite
index 44ea63cc6d3f1943d8144a872bb1fa84089f837d..239c68db457098cae526e4691061c7373b61266a 100644 (file)
@@ -8,8 +8,8 @@ git-help - Display help information about Git
 SYNOPSIS
 --------
 [verse]
-'git help' [-a|--all [--[no-]verbose]]
-          [[-i|--info] [-m|--man] [-w|--web]] [<command>|<guide>]
+'git help' [-a|--all] [--[no-]verbose] [--[no-]external-commands] [--[no-]aliases]
+'git help' [[-i|--info] [-m|--man] [-w|--web]] [<command>|<guide>]
 'git help' [-g|--guides]
 'git help' [-c|--config]
 
@@ -46,8 +46,15 @@ OPTIONS
 -------
 -a::
 --all::
-       Prints all the available commands on the standard output. This
-       option overrides any given command or guide name.
+       Prints all the available commands on the standard output.
+
+--no-external-commands::
+       When used with `--all`, exclude the listing of external "git-*"
+       commands found in the `$PATH`.
+
+--no-aliases::
+       When used with `--all`, exclude the listing of configured
+       aliases.
 
 --verbose::
        When used with `--all` print description for all recognized
diff --git a/Documentation/git-hook.txt b/Documentation/git-hook.txt
new file mode 100644 (file)
index 0000000..77c3a8a
--- /dev/null
@@ -0,0 +1,45 @@
+git-hook(1)
+===========
+
+NAME
+----
+git-hook - Run git hooks
+
+SYNOPSIS
+--------
+[verse]
+'git hook' run [--ignore-missing] <hook-name> [-- <hook-args>]
+
+DESCRIPTION
+-----------
+
+A command interface to running git hooks (see linkgit:githooks[5]),
+for use by other scripted git commands.
+
+SUBCOMMANDS
+-----------
+
+run::
+       Run the `<hook-name>` hook. See linkgit:githooks[5] for
+       supported hook names.
++
+
+Any positional arguments to the hook should be passed after a
+mandatory `--` (or `--end-of-options`, see linkgit:gitcli[7]). See
+linkgit:githooks[5] for arguments hooks might expect (if any).
+
+OPTIONS
+-------
+
+--ignore-missing::
+       Ignore any missing hook by quietly returning zero. Used for
+       tools that want to do a blind one-shot run of a hook that may
+       or may not be present.
+
+SEE ALSO
+--------
+linkgit:githooks[5]
+
+GIT
+---
+Part of the linkgit:git[1] suite
index 1f1e3592251259960f164094c3f82bf9eae455cc..4e71c256ecb08fe44ef656c85b7246e6f2f458b1 100644 (file)
@@ -122,6 +122,14 @@ This option cannot be used with --stdin.
 +
 include::object-format-disclaimer.txt[]
 
+--promisor[=<message>]::
+       Before committing the pack-index, create a .promisor file for this
+       pack. Particularly helpful when writing a promisor pack with --fix-thin
+       since the name of the pack is not final until the pack has been fully
+       written. If a `<message>` is provided, then that content will be
+       written to the .promisor file for future reference. See
+       link:technical/partial-clone.html[partial clone] for more information.
+
 NOTES
 -----
 
index 48cc7c0b6f4b639688f64bdfc1d7562ead1da034..0dabf3f0ddc8d893818b3ce09436c1b5b1c72a33 100644 (file)
@@ -156,7 +156,7 @@ a space) at the start of each line:
 
 --recurse-submodules::
        Recursively calls ls-files on each active submodule in the repository.
-       Currently there is only support for the --cached mode.
+       Currently there is only support for the --cached and --stage modes.
 
 --abbrev[=<n>]::
        Instead of showing the full 40-byte hexadecimal object
index db02d6d79a9c2e092f6c0755300eb2a4579887c0..0240adb8eec96600572be6f3f8b988a5aa2eab45 100644 (file)
@@ -10,7 +10,7 @@ SYNOPSIS
 --------
 [verse]
 'git ls-tree' [-d] [-r] [-t] [-l] [-z]
-           [--name-only] [--name-status] [--full-name] [--full-tree] [--abbrev[=<n>]]
+           [--name-only] [--name-status] [--object-only] [--full-name] [--full-tree] [--abbrev[=<n>]] [--format=<format>]
            <tree-ish> [<path>...]
 
 DESCRIPTION
@@ -59,6 +59,15 @@ OPTIONS
 --name-only::
 --name-status::
        List only filenames (instead of the "long" output), one per line.
+       Cannot be combined with `--object-only`.
+
+--object-only::
+       List only names of the objects, one per line. Cannot be combined
+       with `--name-only` or `--name-status`.
+       This is equivalent to specifying `--format='%(objectname)'`, but
+       for both this option and that exact format the command takes a
+       hand-optimized codepath instead of going through the generic
+       formatting mechanism.
 
 --abbrev[=<n>]::
        Instead of showing the full 40-byte hexadecimal object
@@ -74,6 +83,16 @@ OPTIONS
        Do not limit the listing to the current working directory.
        Implies --full-name.
 
+--format=<format>::
+       A string that interpolates `%(fieldname)` from the result
+       being shown. It also interpolates `%%` to `%`, and
+       `%xx` where `xx` are hex digits interpolates to character
+       with hex code `xx`; for example `%00` interpolates to
+       `\0` (NUL), `%09` to `\t` (TAB) and `%0a` to `\n` (LF).
+       When specified, `--format` cannot be combined with other
+       format-altering options, including `--long`, `--name-only`
+       and `--object-only`.
+
 [<path>...]::
        When paths are given, show them (note that this isn't really raw
        pathnames, but rather a list of patterns to match).  Otherwise
@@ -82,16 +101,29 @@ OPTIONS
 
 Output Format
 -------------
-        <mode> SP <type> SP <object> TAB <file>
+
+The output format of `ls-tree` is determined by either the `--format`
+option, or other format-altering options such as `--name-only` etc.
+(see `--format` above).
+
+The use of certain `--format` directives is equivalent to using those
+options, but invoking the full formatting machinery can be slower than
+using an appropriate formatting option.
+
+In cases where the `--format` would exactly map to an existing option
+`ls-tree` will use the appropriate faster path. Thus the default format
+is equivalent to:
+
+       %(objectmode) %(objecttype) %(objectname)%x09%(path)
 
 This output format is compatible with what `--index-info --stdin` of
 'git update-index' expects.
 
 When the `-l` option is used, format changes to
 
-        <mode> SP <type> SP <object> SP <object size> TAB <file>
+       %(objectmode) %(objecttype) %(objectname) %(objectsize:padded)%x09%(path)
 
-Object size identified by <object> is given in bytes, and right-justified
+Object size identified by <objectname> is given in bytes, and right-justified
 with minimum width of 7 characters.  Object size is given only for blobs
 (file) entries; for other entries `-` character is used in place of size.
 
@@ -100,6 +132,34 @@ quoted as explained for the configuration variable `core.quotePath`
 (see linkgit:git-config[1]).  Using `-z` the filename is output
 verbatim and the line is terminated by a NUL byte.
 
+Customized format:
+
+It is possible to print in a custom format by using the `--format` option,
+which is able to interpolate different fields using a `%(fieldname)` notation.
+For example, if you only care about the "objectname" and "path" fields, you
+can execute with a specific "--format" like
+
+       git ls-tree --format='%(objectname) %(path)' <tree-ish>
+
+FIELD NAMES
+-----------
+
+Various values from structured fields can be used to interpolate
+into the resulting output. For each outputing line, the following
+names can be used:
+
+objectmode::
+       The mode of the object.
+objecttype::
+       The type of the object (`commit`, `blob` or `tree`).
+objectname::
+       The name of the object.
+objectsize[:padded]::
+       The size of a `blob` object ("-" if it's a `commit` or `tree`).
+       It also supports a padded format of size with "%(objectsize:padded)".
+path::
+       The pathname of the object.
+
 GIT
 ---
 Part of the linkgit:git[1] suite
index e2cfb68ab57907f640a618409533a98c7427af1d..e56bad28c6551f0f0a1990f245da4f551df74178 100644 (file)
@@ -10,6 +10,8 @@ SYNOPSIS
 --------
 [verse]
 'git maintenance' run [<options>]
+'git maintenance' start [--scheduler=<scheduler>]
+'git maintenance' (stop|register|unregister)
 
 
 DESCRIPTION
@@ -29,6 +31,24 @@ Git repository.
 SUBCOMMANDS
 -----------
 
+run::
+       Run one or more maintenance tasks. If one or more `--task` options
+       are specified, then those tasks are run in that order. Otherwise,
+       the tasks are determined by which `maintenance.<task>.enabled`
+       config options are true. By default, only `maintenance.gc.enabled`
+       is true.
+
+start::
+       Start running maintenance on the current repository. This performs
+       the same config updates as the `register` subcommand, then updates
+       the background scheduler to run `git maintenance run --scheduled`
+       on an hourly basis.
+
+stop::
+       Halt the background maintenance schedule. The current repository
+       is not removed from the list of maintained repositories, in case
+       the background maintenance is restarted later.
+
 register::
        Initialize Git config values so any scheduled maintenance will
        start running on this repository. This adds the repository to the
@@ -55,24 +75,6 @@ task:
 setting `maintenance.auto = false` in the current repository. This config
 setting will remain after a `git maintenance unregister` command.
 
-run::
-       Run one or more maintenance tasks. If one or more `--task` options
-       are specified, then those tasks are run in that order. Otherwise,
-       the tasks are determined by which `maintenance.<task>.enabled`
-       config options are true. By default, only `maintenance.gc.enabled`
-       is true.
-
-start::
-       Start running maintenance on the current repository. This performs
-       the same config updates as the `register` subcommand, then updates
-       the background scheduler to run `git maintenance run --scheduled`
-       on an hourly basis.
-
-stop::
-       Halt the background maintenance schedule. The current repository
-       is not removed from the list of maintained repositories, in case
-       the background maintenance is restarted later.
-
 unregister::
        Remove the current repository from background maintenance. This
        only removes the repository from the configured list. It does not
index 27fe2b32e10b2f0c92315483ac4a5e8a9722d3db..76b44f4da103872d9b39c893b62286d37b159693 100644 (file)
@@ -31,7 +31,7 @@ OPTIONS
 
 --batch::
        Allow building of more than one tree object before exiting.  Each
-       tree is separated by as single blank line. The final new-line is
+       tree is separated by a single blank line. The final new-line is
        optional.  Note - if the `-z` option is used, lines are terminated
        with NUL.
 
index 5cb0eb0855fefe582721baeb3295beb610a74891..ec8a27ce8bf8d689bb5f64554dd5426ce38262c0 100644 (file)
@@ -42,11 +42,37 @@ OPTIONS
 --all::
        List all commits reachable from all refs
 
---stdin::
+--annotate-stdin::
        Transform stdin by substituting all the 40-character SHA-1
        hexes (say $hex) with "$hex ($rev_name)".  When used with
        --name-only, substitute with "$rev_name", omitting $hex
-       altogether.  Intended for the scripter's use.
+       altogether.
++
+For example:
++
+-----------
+$ cat sample.txt
+
+An abbreviated revision 2ae0a9cb82 will not be substituted.
+The full name after substitution is 2ae0a9cb8298185a94e5998086f380a355dd8907,
+while its tree object is 70d105cc79e63b81cfdcb08a15297c23e60b07ad
+
+$ git name-rev --annotate-stdin <sample.txt
+
+An abbreviated revision 2ae0a9cb82 will not be substituted.
+The full name after substitution is 2ae0a9cb8298185a94e5998086f380a355dd8907 (master),
+while its tree object is 70d105cc79e63b81cfdcb08a15297c23e60b07ad
+
+$ git name-rev --name-only --annotate-stdin <sample.txt
+
+An abbreviated revision 2ae0a9cb82 will not be substituted.
+The full name after substitution is master,
+while its tree object is 70d105cc79e63b81cfdcb08a15297c23e60b07ad
+-----------
+
+--stdin::
+       This option is deprecated in favor of 'git name-rev --annotate-stdin'.
+       They are functionally equivalent.
 
 --name-only::
        Instead of printing both the SHA-1 and the name, print only
index 8c3aceb832475f25f5712709040033ab2f5fab59..a5356a230bb64a1ae5a71934262df541b0edf7c6 100644 (file)
@@ -375,9 +375,14 @@ have finished your work-in-progress), attempt the merge again.
 SPARSE CHECKOUT
 ---------------
 
+Note: The `update-index` and `read-tree` primitives for supporting the
+skip-worktree bit predated the introduction of
+linkgit:git-sparse-checkout[1].  Users are encouraged to use
+`sparse-checkout` in preference to these low-level primitives.
+
 "Sparse checkout" allows populating the working directory sparsely.
-It uses the skip-worktree bit (see linkgit:git-update-index[1]) to tell
-Git whether a file in the working directory is worth looking at.
+It uses the skip-worktree bit (see linkgit:git-update-index[1]) to
+tell Git whether a file in the working directory is worth looking at.
 
 'git read-tree' and other merge-based commands ('git merge', 'git
 checkout'...) can help maintaining the skip-worktree bitmap and working
@@ -385,7 +390,8 @@ directory update. `$GIT_DIR/info/sparse-checkout` is used to
 define the skip-worktree reference bitmap. When 'git read-tree' needs
 to update the working directory, it resets the skip-worktree bit in the index
 based on this file, which uses the same syntax as .gitignore files.
-If an entry matches a pattern in this file, skip-worktree will not be
+If an entry matches a pattern in this file, or the entry corresponds to
+a file present in the working tree, then skip-worktree will not be
 set on that entry. Otherwise, skip-worktree will be set.
 
 Then it compares the new skip-worktree value with the previous one. If
@@ -420,8 +426,8 @@ support.
 
 SEE ALSO
 --------
-linkgit:git-write-tree[1]; linkgit:git-ls-files[1];
-linkgit:gitignore[5]; linkgit:git-sparse-checkout[1];
+linkgit:git-write-tree[1], linkgit:git-ls-files[1],
+linkgit:gitignore[5], linkgit:git-sparse-checkout[1]
 
 GIT
 ---
index 9da4647061cdc7e85df685169c81f2f08b9d6707..262fb01aec004c880e16d2630494a194f720a713 100644 (file)
@@ -215,9 +215,10 @@ leave out at most one of A and B, in which case it defaults to HEAD.
 
 --keep-base::
        Set the starting point at which to create the new commits to the
-       merge base of <upstream> <branch>. Running
+       merge base of <upstream> and <branch>. Running
        'git rebase --keep-base <upstream> <branch>' is equivalent to
-       running 'git rebase --onto <upstream>... <upstream>'.
+       running
+       'git rebase --onto <upstream>...<branch> <upstream> <branch>'.
 +
 This option is useful in the case where one is developing a feature on
 top of an upstream branch. While the feature is being worked on, the
index 2bebc32566b692ba616d4148b31e934cba0a7bad..cde9614e362854f4aa091348ef91ba69283cec0c 100644 (file)
@@ -11,7 +11,7 @@ SYNOPSIS
 [verse]
 'git remote' [-v | --verbose]
 'git remote add' [-t <branch>] [-m <master>] [-f] [--[no-]tags] [--mirror=(fetch|push)] <name> <URL>
-'git remote rename' <old> <new>
+'git remote rename' [--[no-]progress] <old> <new>
 'git remote remove' <name>
 'git remote set-head' <name> (-a | --auto | -d | --delete | <branch>)
 'git remote set-branches' [--add] <name> <branch>...
index 6f7685f53d5aa054b714690ed57e19b22575d8ba..01cb4c9b9c56a7685f3a8d73fd91cadf5ce7a9e6 100644 (file)
@@ -105,10 +105,11 @@ OPTIONS
 
 -q::
 --quiet::
---no-quiet::
-       Be quiet, only report errors. The default behavior is set by the
-       `reset.quiet` config option. `--quiet` and `--no-quiet` will
-       override the default behavior.
+       Be quiet, only report errors.
+
+--refresh::
+--no-refresh::
+       Refresh the index after a mixed reset. Enabled by default.
 
 --pathspec-from-file=<file>::
        Pathspec is passed in `<file>` instead of commandline args. If
index b81dbe06543c169f44ffedf2e773ade6de23ecae..88e55f432f3a6c83333d9404105d6ae436f180d2 100644 (file)
@@ -3,9 +3,7 @@ git-sparse-checkout(1)
 
 NAME
 ----
-git-sparse-checkout - Initialize and modify the sparse-checkout
-configuration, which reduces the checkout to a set of paths
-given by a list of patterns.
+git-sparse-checkout - Reduce your working tree to a subset of tracked files
 
 
 SYNOPSIS
@@ -17,8 +15,20 @@ SYNOPSIS
 DESCRIPTION
 -----------
 
-Initialize and modify the sparse-checkout configuration, which reduces
-the checkout to a set of paths given by a list of patterns.
+This command is used to create sparse checkouts, which means that it
+changes the working tree from having all tracked files present, to only
+have a subset of them.  It can also switch which subset of files are
+present, or undo and go back to having all tracked files present in the
+working copy.
+
+The subset of files is chosen by providing a list of directories in
+cone mode (which is recommended), or by providing a list of patterns
+in non-cone mode.
+
+When in a sparse-checkout, other Git commands behave a bit differently.
+For example, switching branches will not update paths outside the
+sparse-checkout directories/patterns, and `git commit -a` will not record
+paths outside the sparse-checkout directories/patterns as deleted.
 
 THIS COMMAND IS EXPERIMENTAL. ITS BEHAVIOR, AND THE BEHAVIOR OF OTHER
 COMMANDS IN THE PRESENCE OF SPARSE-CHECKOUTS, WILL LIKELY CHANGE IN
@@ -28,30 +38,44 @@ THE FUTURE.
 COMMANDS
 --------
 'list'::
-       Describe the patterns in the sparse-checkout file.
+       Describe the directories or patterns in the sparse-checkout file.
 
 'set'::
-       Enable the necessary config settings
-       (extensions.worktreeConfig, core.sparseCheckout,
-       core.sparseCheckoutCone) if they are not already enabled, and
-       write a set of patterns to the sparse-checkout file from the
+       Enable the necessary sparse-checkout config settings
+       (`core.sparseCheckout`, `core.sparseCheckoutCone`, and
+       `index.sparse`) if they are not already set to the desired values,
+       and write a set of patterns to the sparse-checkout file from the
        list of arguments following the 'set' subcommand. Update the
        working directory to match the new patterns.
 +
-When the `--stdin` option is provided, the patterns are read from
-standard in as a newline-delimited list instead of from the arguments.
+To ensure that adjusting the sparse-checkout settings within a worktree
+does not alter the sparse-checkout settings in other worktrees, the 'set'
+subcommand will upgrade your repository config to use worktree-specific
+config if not already present. The sparsity defined by the arguments to
+the 'set' subcommand are stored in the worktree-specific sparse-checkout
+file. See linkgit:git-worktree[1] and the documentation of
+`extensions.worktreeConfig` in linkgit:git-config[1] for more details.
++
+When the `--stdin` option is provided, the directories or patterns are
+read from standard in as a newline-delimited list instead of from the
+arguments.
 +
 When `--cone` is passed or `core.sparseCheckoutCone` is enabled, the
-input list is considered a list of directories instead of
-sparse-checkout patterns.  This allows for better performance with a
-limited set of patterns (see 'CONE PATTERN SET' below).  Note that the
-set command will write patterns to the sparse-checkout file to include
-all files contained in those directories (recursively) as well as
-files that are siblings of ancestor directories. The input format
-matches the output of `git ls-tree --name-only`.  This includes
-interpreting pathnames that begin with a double quote (") as C-style
-quoted strings.  This may become the default in the future; --no-cone
-can be passed to request non-cone mode.
+input list is considered a list of directories.  This allows for
+better performance with a limited set of patterns (see 'CONE PATTERN
+SET' below).  The input format matches the output of `git ls-tree
+--name-only`.  This includes interpreting pathnames that begin with a
+double quote (") as C-style quoted strings.  Note that the set command
+will write patterns to the sparse-checkout file to include all files
+contained in those directories (recursively) as well as files that are
+siblings of ancestor directories. This may become the default in the
+future; --no-cone can be passed to request non-cone mode.
++
+When `--no-cone` is passed or `core.sparseCheckoutCone` is not enabled,
+the input list is considered a list of patterns.  This mode is harder
+to use and less performant, and is thus not recommended.  See the
+"Sparse Checkout" section of linkgit:git-read-tree[1] and the "Pattern
+Set" sections below for more details.
 +
 Use the `--[no-]sparse-index` option to use a sparse index (the
 default is to not use it).  A sparse index reduces the size of the
@@ -69,11 +93,10 @@ understand the sparse directory entries index extension and may fail to
 interact with your repository until it is disabled.
 
 'add'::
-       Update the sparse-checkout file to include additional patterns.
-       By default, these patterns are read from the command-line arguments,
-       but they can be read from stdin using the `--stdin` option. When
-       `core.sparseCheckoutCone` is enabled, the given patterns are interpreted
-       as directory names as in the 'set' subcommand.
+       Update the sparse-checkout file to include additional directories
+       (in cone mode) or patterns (in non-cone mode).  By default, these
+       directories or patterns are read from the command-line arguments,
+       but they can be read from stdin using the `--stdin` option.
 
 'reapply'::
        Reapply the sparsity pattern rules to paths in the working tree.
@@ -117,13 +140,14 @@ decreased in utility.
 SPARSE CHECKOUT
 ---------------
 
-"Sparse checkout" allows populating the working directory sparsely.
-It uses the skip-worktree bit (see linkgit:git-update-index[1]) to tell
-Git whether a file in the working directory is worth looking at. If
-the skip-worktree bit is set, then the file is ignored in the working
-directory. Git will avoid populating the contents of those files, which
-makes a sparse checkout helpful when working in a repository with many
-files, but only a few are important to the current user.
+"Sparse checkout" allows populating the working directory sparsely.  It
+uses the skip-worktree bit (see linkgit:git-update-index[1]) to tell Git
+whether a file in the working directory is worth looking at. If the
+skip-worktree bit is set, and the file is not present in the working tree,
+then its absence is ignored. Git will avoid populating the contents of
+those files, which makes a sparse checkout helpful when working in a
+repository with many files, but only a few are important to the current
+user.
 
 The `$GIT_DIR/info/sparse-checkout` file is used to define the
 skip-worktree reference bitmap. When Git updates the working
index 7e5f995f77e48cdc8e9c1b6b58dec8f2896b32cf..4d3ab6b9f925cde1ef8835d790fa1fd66108a36d 100644 (file)
@@ -133,7 +133,7 @@ If you really want to remove a submodule from the repository and commit
 that use linkgit:git-rm[1] instead. See linkgit:gitsubmodules[7] for removal
 options.
 
-update [--init] [--remote] [-N|--no-fetch] [--[no-]recommend-shallow] [-f|--force] [--checkout|--rebase|--merge] [--reference <repository>] [--depth <depth>] [--recursive] [--jobs <n>] [--[no-]single-branch] [--] [<path>...]::
+update [--init] [--remote] [-N|--no-fetch] [--[no-]recommend-shallow] [-f|--force] [--checkout|--rebase|--merge] [--reference <repository>] [--depth <depth>] [--recursive] [--jobs <n>] [--[no-]single-branch] [--filter <filter spec>] [--] [<path>...]::
 +
 --
 Update the registered submodules to match what the superproject
@@ -177,6 +177,10 @@ submodule with the `--init` option.
 
 If `--recursive` is specified, this command will recurse into the
 registered submodules, and update any nested submodules within.
+
+If `--filter <filter spec>` is specified, the given partial clone filter will be
+applied to the submodule. See linkgit:git-rev-list[1] for details on filter
+specifications.
 --
 set-branch (-b|--branch) <branch> [--] <path>::
 set-branch (-d|--default) [--] <path>::
index 2853f168d976857581163f2ac057110ddb501829..5ea2f2c60e45a3c91422fcaa2457c100f450fb71 100644 (file)
@@ -351,6 +351,10 @@ unchanged".  Note that "assume unchanged" bit is *not* set if
 the index (use `git update-index --really-refresh` if you want
 to mark them as "assume unchanged").
 
+Sometimes users confuse the assume-unchanged bit with the
+skip-worktree bit.  See the final paragraph in the "Skip-worktree bit"
+section below for an explanation of the differences.
+
 
 EXAMPLES
 --------
@@ -392,22 +396,47 @@ M foo.c
 SKIP-WORKTREE BIT
 -----------------
 
-Skip-worktree bit can be defined in one (long) sentence: When reading
-an entry, if it is marked as skip-worktree, then Git pretends its
-working directory version is up to date and read the index version
-instead.
-
-To elaborate, "reading" means checking for file existence, reading
-file attributes or file content. The working directory version may be
-present or absent. If present, its content may match against the index
-version or not. Writing is not affected by this bit, content safety
-is still first priority. Note that Git _can_ update working directory
-file, that is marked skip-worktree, if it is safe to do so (i.e.
-working directory version matches index version)
+Skip-worktree bit can be defined in one (long) sentence: Tell git to
+avoid writing the file to the working directory when reasonably
+possible, and treat the file as unchanged when it is not
+present in the working directory.
+
+Note that not all git commands will pay attention to this bit, and
+some only partially support it.
+
+The update-index flags and the read-tree capabilities relating to the
+skip-worktree bit predated the introduction of the
+linkgit:git-sparse-checkout[1] command, which provides a much easier
+way to configure and handle the skip-worktree bits.  If you want to
+reduce your working tree to only deal with a subset of the files in
+the repository, we strongly encourage the use of
+linkgit:git-sparse-checkout[1] in preference to the low-level
+update-index and read-tree primitives.
+
+The primary purpose of the skip-worktree bit is to enable sparse
+checkouts, i.e. to have working directories with only a subset of
+paths present.  When the skip-worktree bit is set, Git commands (such
+as `switch`, `pull`, `merge`) will avoid writing these files.
+However, these commands will sometimes write these files anyway in
+important cases such as conflicts during a merge or rebase.  Git
+commands will also avoid treating the lack of such files as an
+intentional deletion; for example `git add -u` will not not stage a
+deletion for these files and `git commit -a` will not make a commit
+deleting them either.
 
 Although this bit looks similar to assume-unchanged bit, its goal is
-different from assume-unchanged bit's. Skip-worktree also takes
-precedence over assume-unchanged bit when both are set.
+different.  The assume-unchanged bit is for leaving the file in the
+working tree but having Git omit checking it for changes and presuming
+that the file has not been changed (though if it can determine without
+stat'ing the file that it has changed, it is free to record the
+changes).  skip-worktree tells Git to ignore the absence of the file,
+avoid updating it when possible with commands that normally update
+much of the working directory (e.g. `checkout`, `switch`, `pull`,
+etc.), and not have its absence be recorded in commits.  Note that in
+sparse checkouts (setup by `git sparse-checkout` or by configuring
+core.sparseCheckout to true), if a file is marked as skip-worktree in
+the index but is found in the working tree, Git will clear the
+skip-worktree bit for that file.
 
 SPLIT INDEX
 -----------
@@ -498,7 +527,9 @@ FILE SYSTEM MONITOR
 This feature is intended to speed up git operations for repos that have
 large working directories.
 
-It enables git to work together with a file system monitor (see the
+It enables git to work together with a file system monitor (see
+linkgit:git-fsmonitor{litdd}daemon[1]
+and the
 "fsmonitor-watchman" section of linkgit:githooks[5]) that can
 inform it as to what files have been modified. This enables git to avoid
 having to lstat() every file to find modified files.
@@ -509,8 +540,8 @@ looking for new files.
 
 If you want to enable (or disable) this feature, it is easier to use
 the `core.fsmonitor` configuration variable (see
-linkgit:git-config[1]) than using the `--fsmonitor` option to
-`git update-index` in each repository, especially if you want to do so
+linkgit:git-config[1]) than using the `--fsmonitor` option to `git
+update-index` in each repository, especially if you want to do so
 across all repositories you use, because you can set the configuration
 variable in your `$HOME/.gitconfig` just once and have it affect all
 repositories you touch.
index 9e862fbcf79efaa507973b5968c3ec5f592a8756..ada30c86a7c2139cccd1315370dc2f63c4472e26 100644 (file)
@@ -10,7 +10,7 @@ SYNOPSIS
 --------
 [verse]
 'git worktree add' [-f] [--detach] [--checkout] [--lock [--reason <string>]] [-b <new-branch>] <path> [<commit-ish>]
-'git worktree list' [-v | --porcelain]
+'git worktree list' [-v | --porcelain [-z]]
 'git worktree lock' [--reason <string>] <worktree>
 'git worktree move' <worktree> <new-path>
 'git worktree prune' [-n] [-v] [--expire <expire>]
@@ -25,45 +25,49 @@ Manage multiple working trees attached to the same repository.
 
 A git repository can support multiple working trees, allowing you to check
 out more than one branch at a time.  With `git worktree add` a new working
-tree is associated with the repository.  This new working tree is called a
-"linked working tree" as opposed to the "main working tree" prepared by
-linkgit:git-init[1] or linkgit:git-clone[1].
-A repository has one main working tree (if it's not a
-bare repository) and zero or more linked working trees. When you are done
-with a linked working tree, remove it with `git worktree remove`.
+tree is associated with the repository, along with additional metadata
+that differentiates that working tree from others in the same repository.
+The working tree, along with this metadata, is called a "worktree".
+
+This new worktree is called a "linked worktree" as opposed to the "main
+worktree" prepared by linkgit:git-init[1] or linkgit:git-clone[1].
+A repository has one main worktree (if it's not a bare repository) and
+zero or more linked worktrees. When you are done with a linked worktree,
+remove it with `git worktree remove`.
 
 In its simplest form, `git worktree add <path>` automatically creates a
 new branch whose name is the final component of `<path>`, which is
 convenient if you plan to work on a new topic. For instance, `git
 worktree add ../hotfix` creates new branch `hotfix` and checks it out at
-path `../hotfix`. To instead work on an existing branch in a new working
-tree, use `git worktree add <path> <branch>`. On the other hand, if you
-just plan to make some experimental changes or do testing without
-disturbing existing development, it is often convenient to create a
-'throwaway' working tree not associated with any branch. For instance,
-`git worktree add -d <path>` creates a new working tree with a detached
-`HEAD` at the same commit as the current branch.
+path `../hotfix`. To instead work on an existing branch in a new worktree,
+use `git worktree add <path> <branch>`. On the other hand, if you just
+plan to make some experimental changes or do testing without disturbing
+existing development, it is often convenient to create a 'throwaway'
+worktree not associated with any branch. For instance,
+`git worktree add -d <path>` creates a new worktree with a detached `HEAD`
+at the same commit as the current branch.
 
 If a working tree is deleted without using `git worktree remove`, then
 its associated administrative files, which reside in the repository
 (see "DETAILS" below), will eventually be removed automatically (see
 `gc.worktreePruneExpire` in linkgit:git-config[1]), or you can run
-`git worktree prune` in the main or any linked working tree to
-clean up any stale administrative files.
+`git worktree prune` in the main or any linked worktree to clean up any
+stale administrative files.
 
-If a linked working tree is stored on a portable device or network share
-which is not always mounted, you can prevent its administrative files from
-being pruned by issuing the `git worktree lock` command, optionally
-specifying `--reason` to explain why the working tree is locked.
+If the working tree for a linked worktree is stored on a portable device
+or network share which is not always mounted, you can prevent its
+administrative files from being pruned by issuing the `git worktree lock`
+command, optionally specifying `--reason` to explain why the worktree is
+locked.
 
 COMMANDS
 --------
 add <path> [<commit-ish>]::
 
-Create `<path>` and checkout `<commit-ish>` into it. The new working directory
-is linked to the current repository, sharing everything except working
-directory specific files such as `HEAD`, `index`, etc. As a convenience,
-`<commit-ish>` may be a bare "`-`", which is synonymous with `@{-1}`.
+Create a worktree at `<path>` and checkout `<commit-ish>` into it. The new worktree
+is linked to the current repository, sharing everything except per-worktree
+files such as `HEAD`, `index`, etc. As a convenience, `<commit-ish>` may
+be a bare "`-`", which is synonymous with `@{-1}`.
 +
 If `<commit-ish>` is a branch name (call it `<branch>`) and is not found,
 and neither `-b` nor `-B` nor `--detach` are used, but there does
@@ -84,100 +88,97 @@ branches from there if `<branch>` is ambiguous but exists on the
 linkgit:git-config[1].
 +
 If `<commit-ish>` is omitted and neither `-b` nor `-B` nor `--detach` used,
-then, as a convenience, the new working tree is associated with a branch
-(call it `<branch>`) named after `$(basename <path>)`.  If `<branch>`
-doesn't exist, a new branch based on `HEAD` is automatically created as
-if `-b <branch>` was given.  If `<branch>` does exist, it will be
-checked out in the new working tree, if it's not checked out anywhere
-else, otherwise the command will refuse to create the working tree (unless
-`--force` is used).
+then, as a convenience, the new worktree is associated with a branch (call
+it `<branch>`) named after `$(basename <path>)`.  If `<branch>` doesn't
+exist, a new branch based on `HEAD` is automatically created as if
+`-b <branch>` was given.  If `<branch>` does exist, it will be checked out
+in the new worktree, if it's not checked out anywhere else, otherwise the
+command will refuse to create the worktree (unless `--force` is used).
 
 list::
 
-List details of each working tree.  The main working tree is listed first,
-followed by each of the linked working trees.  The output details include
-whether the working tree is bare, the revision currently checked out, the
+List details of each worktree.  The main worktree is listed first,
+followed by each of the linked worktrees.  The output details include
+whether the worktree is bare, the revision currently checked out, the
 branch currently checked out (or "detached HEAD" if none), "locked" if
-the worktree is locked, "prunable" if the worktree can be pruned by `prune`
-command.
+the worktree is locked, "prunable" if the worktree can be pruned by the
+`prune` command.
 
 lock::
 
-If a working tree is on a portable device or network share which
-is not always mounted, lock it to prevent its administrative
-files from being pruned automatically. This also prevents it from
-being moved or deleted. Optionally, specify a reason for the lock
-with `--reason`.
+If a worktree is on a portable device or network share which is not always
+mounted, lock it to prevent its administrative files from being pruned
+automatically. This also prevents it from being moved or deleted.
+Optionally, specify a reason for the lock with `--reason`.
 
 move::
 
-Move a working tree to a new location. Note that the main working tree
-or linked working trees containing submodules cannot be moved with this
-command. (The `git worktree repair` command, however, can reestablish
-the connection with linked working trees if you move the main working
-tree manually.)
+Move a worktree to a new location. Note that the main worktree or linked
+worktrees containing submodules cannot be moved with this command. (The
+`git worktree repair` command, however, can reestablish the connection
+with linked worktrees if you move the main worktree manually.)
 
 prune::
 
-Prune working tree information in `$GIT_DIR/worktrees`.
+Prune worktree information in `$GIT_DIR/worktrees`.
 
 remove::
 
-Remove a working tree. Only clean working trees (no untracked files
-and no modification in tracked files) can be removed. Unclean working
-trees or ones with submodules can be removed with `--force`. The main
-working tree cannot be removed.
+Remove a worktree. Only clean worktrees (no untracked files and no
+modification in tracked files) can be removed. Unclean worktrees or ones
+with submodules can be removed with `--force`. The main worktree cannot be
+removed.
 
 repair [<path>...]::
 
-Repair working tree administrative files, if possible, if they have
-become corrupted or outdated due to external factors.
+Repair worktree administrative files, if possible, if they have become
+corrupted or outdated due to external factors.
 +
-For instance, if the main working tree (or bare repository) is moved,
-linked working trees will be unable to locate it. Running `repair` in
-the main working tree will reestablish the connection from linked
-working trees back to the main working tree.
+For instance, if the main worktree (or bare repository) is moved, linked
+worktrees will be unable to locate it. Running `repair` in the main
+worktree will reestablish the connection from linked worktrees back to the
+main worktree.
 +
-Similarly, if a linked working tree is moved without using `git worktree
-move`, the main working tree (or bare repository) will be unable to
-locate it. Running `repair` within the recently-moved working tree will
-reestablish the connection. If multiple linked working trees are moved,
-running `repair` from any working tree with each tree's new `<path>` as
-an argument, will reestablish the connection to all the specified paths.
+Similarly, if the working tree for a linked worktree is moved without
+using `git worktree move`, the main worktree (or bare repository) will be
+unable to locate it. Running `repair` within the recently-moved worktree
+will reestablish the connection. If multiple linked worktrees are moved,
+running `repair` from any worktree with each tree's new `<path>` as an
+argument, will reestablish the connection to all the specified paths.
 +
-If both the main working tree and linked working trees have been moved
-manually, then running `repair` in the main working tree and specifying the
-new `<path>` of each linked working tree will reestablish all connections
-in both directions.
+If both the main worktree and linked worktrees have been moved manually,
+then running `repair` in the main worktree and specifying the new `<path>`
+of each linked worktree will reestablish all connections in both
+directions.
 
 unlock::
 
-Unlock a working tree, allowing it to be pruned, moved or deleted.
+Unlock a worktree, allowing it to be pruned, moved or deleted.
 
 OPTIONS
 -------
 
 -f::
 --force::
-       By default, `add` refuses to create a new working tree when
+       By default, `add` refuses to create a new worktree when
        `<commit-ish>` is a branch name and is already checked out by
-       another working tree, or if `<path>` is already assigned to some
-       working tree but is missing (for instance, if `<path>` was deleted
+       another worktree, or if `<path>` is already assigned to some
+       worktree but is missing (for instance, if `<path>` was deleted
        manually). This option overrides these safeguards. To add a missing but
-       locked working tree path, specify `--force` twice.
+       locked worktree path, specify `--force` twice.
 +
-`move` refuses to move a locked working tree unless `--force` is specified
-twice. If the destination is already assigned to some other working tree but is
+`move` refuses to move a locked worktree unless `--force` is specified
+twice. If the destination is already assigned to some other worktree but is
 missing (for instance, if `<new-path>` was deleted manually), then `--force`
 allows the move to proceed; use `--force` twice if the destination is locked.
 +
-`remove` refuses to remove an unclean working tree unless `--force` is used.
-To remove a locked working tree, specify `--force` twice.
+`remove` refuses to remove an unclean worktree unless `--force` is used.
+To remove a locked worktree, specify `--force` twice.
 
 -b <new-branch>::
 -B <new-branch>::
        With `add`, create a new branch named `<new-branch>` starting at
-       `<commit-ish>`, and check out `<new-branch>` into the new working tree.
+       `<commit-ish>`, and check out `<new-branch>` into the new worktree.
        If `<commit-ish>` is omitted, it defaults to `HEAD`.
        By default, `-b` refuses to create a new branch if it already
        exists. `-B` overrides this safeguard, resetting `<new-branch>` to
@@ -185,7 +186,7 @@ To remove a locked working tree, specify `--force` twice.
 
 -d::
 --detach::
-       With `add`, detach `HEAD` in the new working tree. See "DETACHED HEAD"
+       With `add`, detach `HEAD` in the new worktree. See "DETACHED HEAD"
        in linkgit:git-checkout[1].
 
 --[no-]checkout::
@@ -211,7 +212,7 @@ This can also be set up as the default behaviour by using the
        `--track` in linkgit:git-branch[1] for details.
 
 --lock::
-       Keep the working tree locked after creation. This is the
+       Keep the worktree locked after creation. This is the
        equivalent of `git worktree lock` after `git worktree add`,
        but without a race condition.
 
@@ -223,7 +224,14 @@ This can also be set up as the default behaviour by using the
 --porcelain::
        With `list`, output in an easy-to-parse format for scripts.
        This format will remain stable across Git versions and regardless of user
-       configuration.  See below for details.
+       configuration.  It is recommended to combine this with `-z`.
+       See below for details.
+
+-z::
+       Terminate each line with a NUL rather than a newline when
+       `--porcelain` is specified with `list`. This makes it possible
+       to parse the output when a worktree path contains a newline
+       character.
 
 -q::
 --quiet::
@@ -236,43 +244,42 @@ This can also be set up as the default behaviour by using the
 With `list`, output additional information about worktrees (see below).
 
 --expire <time>::
-       With `prune`, only expire unused working trees older than `<time>`.
+       With `prune`, only expire unused worktrees older than `<time>`.
 +
-With `list`, annotate missing working trees as prunable if they are
-older than `<time>`.
+With `list`, annotate missing worktrees as prunable if they are older than
+`<time>`.
 
 --reason <string>::
-       With `lock` or with `add --lock`, an explanation why the working tree is locked.
+       With `lock` or with `add --lock`, an explanation why the worktree
+       is locked.
 
 <worktree>::
-       Working trees can be identified by path, either relative or
-       absolute.
+       Worktrees can be identified by path, either relative or absolute.
 +
-If the last path components in the working tree's path is unique among
-working trees, it can be used to identify a working tree. For example if
-you only have two working trees, at `/abc/def/ghi` and `/abc/def/ggg`,
-then `ghi` or `def/ghi` is enough to point to the former working tree.
+If the last path components in the worktree's path is unique among
+worktrees, it can be used to identify a worktree. For example if you only
+have two worktrees, at `/abc/def/ghi` and `/abc/def/ggg`, then `ghi` or
+`def/ghi` is enough to point to the former worktree.
 
 REFS
 ----
-In multiple working trees, some refs may be shared between all working
-trees and some refs are local. One example is `HEAD` which is different for each
-working tree. This section is about the sharing rules and how to access
-refs of one working tree from another.
-
-In general, all pseudo refs are per working tree and all refs starting
-with `refs/` are shared. Pseudo refs are ones like `HEAD` which are
-directly under `$GIT_DIR` instead of inside `$GIT_DIR/refs`. There are
-exceptions, however: refs inside `refs/bisect` and `refs/worktree` are not
-shared.
-
-Refs that are per working tree can still be accessed from another
-working tree via two special paths, `main-worktree` and `worktrees`. The
-former gives access to per-working tree refs of the main working tree,
-while the latter to all linked working trees.
+When using multiple worktrees, some refs are shared between all worktrees,
+but others are specific to an individual worktree. One example is `HEAD`,
+which is different for each worktree. This section is about the sharing
+rules and how to access refs of one worktree from another.
+
+In general, all pseudo refs are per-worktree and all refs starting with
+`refs/` are shared. Pseudo refs are ones like `HEAD` which are directly
+under `$GIT_DIR` instead of inside `$GIT_DIR/refs`. There are exceptions,
+however: refs inside `refs/bisect` and `refs/worktree` are not shared.
+
+Refs that are per-worktree can still be accessed from another worktree via
+two special paths, `main-worktree` and `worktrees`. The former gives
+access to per-worktree refs of the main worktree, while the latter to all
+linked worktrees.
 
 For example, `main-worktree/HEAD` or `main-worktree/refs/bisect/good`
-resolve to the same value as the main working tree's `HEAD` and
+resolve to the same value as the main worktree's `HEAD` and
 `refs/bisect/good` respectively. Similarly, `worktrees/foo/HEAD` or
 `worktrees/bar/refs/bisect/bad` are the same as
 `$GIT_COMMON_DIR/worktrees/foo/HEAD` and
@@ -284,13 +291,13 @@ which will handle refs correctly.
 
 CONFIGURATION FILE
 ------------------
-By default, the repository `config` file is shared across all working
-trees. If the config variables `core.bare` or `core.worktree` are
-already present in the config file, they will be applied to the main
-working trees only.
+By default, the repository `config` file is shared across all worktrees.
+If the config variables `core.bare` or `core.worktree` are present in the
+common config file and `extensions.worktreeConfig` is disabled, then they
+will be applied to the main worktree only.
 
-In order to have configuration specific to working trees, you can turn
-on the `worktreeConfig` extension, e.g.:
+In order to have worktree-specific configuration, you can turn on the
+`worktreeConfig` extension, e.g.:
 
 ------------
 $ git config extensions.worktreeConfig true
@@ -303,40 +310,45 @@ versions will refuse to access repositories with this extension.
 
 Note that in this file, the exception for `core.bare` and `core.worktree`
 is gone. If they exist in `$GIT_DIR/config`, you must move
-them to the `config.worktree` of the main working tree. You may also
-take this opportunity to review and move other configuration that you
-do not want to share to all working trees:
+them to the `config.worktree` of the main worktree. You may also take this
+opportunity to review and move other configuration that you do not want to
+share to all worktrees:
+
+ - `core.worktree` should never be shared.
+
+ - `core.bare` should not be shared if the value is `core.bare=true`.
 
- - `core.worktree` and `core.bare` should never be shared
+ - `core.sparseCheckout` should not be shared, unless you are sure you
+   always use sparse checkout for all worktrees.
 
- - `core.sparseCheckout` is recommended per working tree, unless you
-   are sure you always use sparse checkout for all working trees.
+See the documentation of `extensions.worktreeConfig` in
+linkgit:git-config[1] for more details.
 
 DETAILS
 -------
-Each linked working tree has a private sub-directory in the repository's
+Each linked worktree has a private sub-directory in the repository's
 `$GIT_DIR/worktrees` directory.  The private sub-directory's name is usually
-the base name of the linked working tree's path, possibly appended with a
+the base name of the linked worktree's path, possibly appended with a
 number to make it unique.  For example, when `$GIT_DIR=/path/main/.git` the
 command `git worktree add /path/other/test-next next` creates the linked
-working tree in `/path/other/test-next` and also creates a
+worktree in `/path/other/test-next` and also creates a
 `$GIT_DIR/worktrees/test-next` directory (or `$GIT_DIR/worktrees/test-next1`
 if `test-next` is already taken).
 
-Within a linked working tree, `$GIT_DIR` is set to point to this private
+Within a linked worktree, `$GIT_DIR` is set to point to this private
 directory (e.g. `/path/main/.git/worktrees/test-next` in the example) and
-`$GIT_COMMON_DIR` is set to point back to the main working tree's `$GIT_DIR`
+`$GIT_COMMON_DIR` is set to point back to the main worktree's `$GIT_DIR`
 (e.g. `/path/main/.git`). These settings are made in a `.git` file located at
-the top directory of the linked working tree.
+the top directory of the linked worktree.
 
 Path resolution via `git rev-parse --git-path` uses either
 `$GIT_DIR` or `$GIT_COMMON_DIR` depending on the path. For example, in the
-linked working tree `git rev-parse --git-path HEAD` returns
+linked worktree `git rev-parse --git-path HEAD` returns
 `/path/main/.git/worktrees/test-next/HEAD` (not
 `/path/other/test-next/.git/HEAD` or `/path/main/.git/HEAD`) while `git
 rev-parse --git-path refs/heads/master` uses
 `$GIT_COMMON_DIR` and returns `/path/main/.git/refs/heads/master`,
-since refs are shared across all working trees, except `refs/bisect` and
+since refs are shared across all worktrees, except `refs/bisect` and
 `refs/worktree`.
 
 See linkgit:gitrepository-layout[5] for more information. The rule of
@@ -344,8 +356,8 @@ thumb is do not make any assumption about whether a path belongs to
 `$GIT_DIR` or `$GIT_COMMON_DIR` when you need to directly access something
 inside `$GIT_DIR`. Use `git rev-parse --git-path` to get the final path.
 
-If you manually move a linked working tree, you need to update the `gitdir` file
-in the entry's directory. For example, if a linked working tree is moved
+If you manually move a linked worktree, you need to update the `gitdir` file
+in the entry's directory. For example, if a linked worktree is moved
 to `/newpath/test-next` and its `.git` file points to
 `/path/main/.git/worktrees/test-next`, then update
 `/path/main/.git/worktrees/test-next/gitdir` to reference `/newpath/test-next`
@@ -354,10 +366,10 @@ automatically.
 
 To prevent a `$GIT_DIR/worktrees` entry from being pruned (which
 can be useful in some situations, such as when the
-entry's working tree is stored on a portable device), use the
+entry's worktree is stored on a portable device), use the
 `git worktree lock` command, which adds a file named
 `locked` to the entry's directory. The file contains the reason in
-plain text. For example, if a linked working tree's `.git` file points
+plain text. For example, if a linked worktree's `.git` file points
 to `/path/main/.git/worktrees/test-next` then a file named
 `/path/main/.git/worktrees/test-next/locked` will prevent the
 `test-next` entry from being pruned.  See
@@ -378,11 +390,11 @@ $ git worktree list
 /path/to/other-linked-worktree  1234abc  (detached HEAD)
 ------------
 
-The command also shows annotations for each working tree, according to its state.
+The command also shows annotations for each worktree, according to its state.
 These annotations are:
 
- * `locked`, if the working tree is locked.
- * `prunable`, if the working tree can be pruned via `git worktree prune`.
+ * `locked`, if the worktree is locked.
+ * `prunable`, if the worktree can be pruned via `git worktree prune`.
 
 ------------
 $ git worktree list
@@ -400,23 +412,24 @@ $ git worktree list --verbose
 /path/to/linked-worktree              abcd1234 [master]
 /path/to/locked-worktree-no-reason    abcd5678 (detached HEAD) locked
 /path/to/locked-worktree-with-reason  1234abcd (brancha)
-       locked: working tree path is mounted on a portable device
+       locked: worktree path is mounted on a portable device
 /path/to/prunable-worktree            5678abc1 (detached HEAD)
        prunable: gitdir file points to non-existent location
 ------------
 
 Note that the annotation is moved to the next line if the additional
 information is available, otherwise it stays on the same line as the
-working tree itself.
+worktree itself.
 
 Porcelain Format
 ~~~~~~~~~~~~~~~~
-The porcelain format has a line per attribute.  Attributes are listed with a
+The porcelain format has a line per attribute.  If `-z` is given then the lines
+are terminated with NUL rather than a newline.  Attributes are listed with a
 label and value separated by a single space.  Boolean attributes (like `bare`
 and `detached`) are listed as a label only, and are present only
 if the value is true.  Some attributes (like `locked`) can be listed as a label
 only or with a value depending upon whether a reason is available.  The first
-attribute of a working tree is always `worktree`, an empty line indicates the
+attribute of a worktree is always `worktree`, an empty line indicates the
 end of the record.  For example:
 
 ------------
@@ -449,7 +462,7 @@ prunable gitdir file points to non-existent location
 
 ------------
 
-If the lock reason contains "unusual" characters such as newline, they
+Unless `-z` is used any "unusual" characters in the lock reason such as newlines
 are escaped and the entire reason is quoted as explained for the
 configuration variable `core.quotePath` (see linkgit:git-config[1]).
 For Example:
@@ -468,7 +481,7 @@ demands that you fix something immediately. You might typically use
 linkgit:git-stash[1] to store your changes away temporarily, however, your
 working tree is in such a state of disarray (with new, moved, and removed
 files, and other bits and pieces strewn around) that you don't want to risk
-disturbing any of it. Instead, you create a temporary linked working tree to
+disturbing any of it. Instead, you create a temporary linked worktree to
 make the emergency fix, remove it when done, and then resume your earlier
 refactoring session.
 
index 83fd4e19a410ae7e4028e77384653d1c637aaa08..4b36d51beb66f08bff4576ed3afcbc9a6d78d63a 100644 (file)
@@ -160,11 +160,13 @@ unspecified.
 ^^^^^
 
 This attribute sets a specific line-ending style to be used in the
-working directory.  It enables end-of-line conversion without any
-content checks, effectively setting the `text` attribute.  Note that
-setting this attribute on paths which are in the index with CRLF line
-endings may make the paths to be considered dirty.  Adding the path to
-the index again will normalize the line endings in the index.
+working directory.  This attribute has effect only if the `text`
+attribute is set or unspecified, or if it is set to `auto`, the file is
+detected as text, and it is stored with LF endings in the index.  Note
+that setting this attribute on paths which are in the index with CRLF
+line endings may make the paths to be considered dirty unless
+`text=auto` is set. Adding the path to the index again will normalize
+the line endings in the index.
 
 Set to string value "crlf"::
 
@@ -827,6 +829,8 @@ patterns are available:
 
 - `java` suitable for source code in the Java language.
 
+- `kotlin` suitable for source code in the Kotlin language.
+
 - `markdown` suitable for Markdown documents.
 
 - `matlab` suitable for source code in the MATLAB and Octave languages.
index 92e4ba6a2fa9c4fd491d8c458dd4e807e08ac07a..1819a5a1859c5479064823bd786e98267f7037b5 100644 (file)
@@ -19,6 +19,15 @@ Many commands take revisions (most often "commits", but sometimes
 "tree-ish", depending on the context and command) and paths as their
 arguments.  Here are the rules:
 
+ * Options come first and then args.
+    A subcommand may take dashed options (which may take their own
+    arguments, e.g. "--max-parents 2") and arguments.  You SHOULD
+    give dashed options first and then arguments.  Some commands may
+    accept dashed options after you have already gave non-option
+    arguments (which may make the command ambiguous), but you should
+    not rely on it (because eventually we may find a way to fix
+    these ambiguity by enforcing the "options then args" rule).
+
  * Revisions come first and then paths.
    E.g. in `git diff v1.0 v2.0 arch/x86 include/asm-x86`,
    `v1.0` and `v2.0` are revisions and `arch/x86` and `include/asm-x86`
@@ -72,24 +81,24 @@ you will.
 Here are the rules regarding the "flags" that you should follow when you are
 scripting Git:
 
- * it's preferred to use the non-dashed form of Git commands, which means that
+ * It's preferred to use the non-dashed form of Git commands, which means that
    you should prefer `git foo` to `git-foo`.
 
- * splitting short options to separate words (prefer `git foo -a -b`
+ * Splitting short options to separate words (prefer `git foo -a -b`
    to `git foo -ab`, the latter may not even work).
 
- * when a command-line option takes an argument, use the 'stuck' form.  In
+ * When a command-line option takes an argument, use the 'stuck' form.  In
    other words, write `git foo -oArg` instead of `git foo -o Arg` for short
    options, and `git foo --long-opt=Arg` instead of `git foo --long-opt Arg`
    for long options.  An option that takes optional option-argument must be
    written in the 'stuck' form.
 
- * when you give a revision parameter to a command, make sure the parameter is
+ * When you give a revision parameter to a command, make sure the parameter is
    not ambiguous with a name of a file in the work tree.  E.g. do not write
    `git log -1 HEAD` but write `git log -1 HEAD --`; the former will not work
    if you happen to have a file called `HEAD` in the work tree.
 
- * many commands allow a long option `--option` to be abbreviated
+ * Many commands allow a long option `--option` to be abbreviated
    only to their unique prefix (e.g. if there is no other option
    whose name begins with `opt`, you may be able to spell `--opt` to
    invoke the `--option` flag), but you should fully spell them out
index b51959ff9418fd75583f41d77fe2603617ed563c..a16e62bc8c8ea7fd8bcb419515258b76ef682f61 100644 (file)
@@ -698,6 +698,10 @@ and "0" meaning they were not.
 Only one parameter should be set to "1" when the hook runs.  The hook
 running passing "1", "1" should not be possible.
 
+SEE ALSO
+--------
+linkgit:git-hook[1]
+
 GIT
 ---
 Part of the linkgit:git[1] suite
index c0779713355c736075db693259e8c800a7854a75..aa2f41f5e700774ef49eb7079c5239448fc61276 100644 (file)
@@ -312,7 +312,7 @@ Pathspecs are used on the command line of "git ls-files", "git
 ls-tree", "git add", "git grep", "git diff", "git checkout",
 and many other commands to
 limit the scope of operations to some subset of the tree or
-worktree.  See the documentation of each command for whether
+working tree.  See the documentation of each command for whether
 paths are relative to the current directory or toplevel.  The
 pathspec syntax is as follows:
 +
@@ -446,7 +446,7 @@ exclude;;
        interface than the <<def_plumbing,plumbing>>.
 
 [[def_per_worktree_ref]]per-worktree ref::
-       Refs that are per-<<def_working_tree,worktree>>, rather than
+       Refs that are per-<<def_worktree,worktree>>, rather than
        global.  This is presently only <<def_HEAD,HEAD>> and any refs
        that start with `refs/bisect/`, but might later include other
        unusual refs.
@@ -669,3 +669,12 @@ The most notable example is `HEAD`.
        The tree of actual checked out files.  The working tree normally
        contains the contents of the <<def_HEAD,HEAD>> commit's tree,
        plus any local changes that you have made but not yet committed.
+
+[[def_worktree]]worktree::
+       A repository can have zero (i.e. bare repository) or one or
+       more worktrees attached to it. One "worktree" consists of a
+       "working tree" and repository metadata, most of which are
+       shared among other worktrees of a single repository, and
+       some of which are maintained separately per worktree
+       (e.g. the index, HEAD and pseudorefs like MERGE_HEAD,
+       per-worktree refs and per-worktree configuration file).
index 43a86fa5627ed07e40504948f34de6b04fb5c115..fd4f4e26c90face314632ac6c2b81bed648abd17 100644 (file)
@@ -122,19 +122,27 @@ again.  Equivalent forms are `--min-parents=0` (any commit has 0 or more
 parents) and `--max-parents=-1` (negative numbers denote no upper limit).
 
 --first-parent::
-       Follow only the first parent commit upon seeing a merge
-       commit.  This option can give a better overview when
-       viewing the evolution of a particular topic branch,
-       because merges into a topic branch tend to be only about
-       adjusting to updated upstream from time to time, and
-       this option allows you to ignore the individual commits
-       brought in to your history by such a merge.
+       When finding commits to include, follow only the first
+       parent commit upon seeing a merge commit.  This option
+       can give a better overview when viewing the evolution of
+       a particular topic branch, because merges into a topic
+       branch tend to be only about adjusting to updated upstream
+       from time to time, and this option allows you to ignore
+       the individual commits brought in to your history by such
+       a merge.
 ifdef::git-log[]
 +
 This option also changes default diff format for merge commits
 to `first-parent`, see `--diff-merges=first-parent` for details.
 endif::git-log[]
 
+--exclude-first-parent-only::
+       When finding commits to exclude (with a '{caret}'), follow only
+       the first parent commit upon seeing a merge commit.
+       This can be used to find the set of changes in a topic branch
+       from the point where it diverged from the remote branch, given
+       that arbitrary merges can be valid topic branch changes.
+
 --not::
        Reverses the meaning of the '{caret}' prefix (or lack thereof)
        for all following revision specifiers, up to the next `--not`.
index bac558d049a36f4b4fbb132c7aa1dd5af4770102..b9be8644cf5d53161b7190f580be935b28d402a3 100644 (file)
@@ -71,6 +71,11 @@ and the Git bundle v2 format cannot represent a shallow clone repository.
 == Capabilities
 
 Because there is no opportunity for negotiation, unknown capabilities cause 'git
-bundle' to abort.  The only known capability is `object-format`, which specifies
-the hash algorithm in use, and can take the same values as the
-`extensions.objectFormat` configuration value.
+bundle' to abort.
+
+* `object-format` specifies the hash algorithm in use, and can take the same
+  values as the `extensions.objectFormat` configuration value.
+
+* `filter` specifies an object filter as in the `--filter` option in
+  linkgit:git-rev-list[1]. The resulting pack-file must be marked as a
+  `.promisor` pack-file after it is unbundled.
index 87971c27dd73f45e1c630435c5d2935449d79759..484b185ba98bdc00efc147851abdcbe4958ee21f 100644 (file)
@@ -93,7 +93,7 @@ CHUNK DATA:
       2 bits of the lowest byte, storing the 33rd and 34th bit of the
       commit time.
 
-  Generation Data (ID: {'G', 'D', 'A', 'T' }) (N * 4 bytes) [Optional]
+  Generation Data (ID: {'G', 'D', 'A', '2' }) (N * 4 bytes) [Optional]
     * This list of 4-byte values store corrected commit date offsets for the
       commits, arranged in the same order as commit data chunk.
     * If the corrected commit date offset cannot be stored within 31 bits,
@@ -104,7 +104,7 @@ CHUNK DATA:
       by compatible versions of Git and in case of split commit-graph chains,
       the topmost layer also has Generation Data chunk.
 
-  Generation Data Overflow (ID: {'G', 'D', 'O', 'V' }) [Optional]
+  Generation Data Overflow (ID: {'G', 'D', 'O', '2' }) [Optional]
     * This list of 8-byte values stores the corrected commit date offsets
       for commits with corrected commit date offsets that cannot be
       stored within 31 bits.
@@ -156,3 +156,11 @@ CHUNK DATA:
 TRAILER:
 
        H-byte HASH-checksum of all of the above.
+
+== Historical Notes:
+
+The Generation Data (GDA2) and Generation Data Overflow (GDO2) chunks have
+the number '2' in their chunk IDs because a previous version of Git wrote
+possibly erroneous data in these chunks with the IDs "GDAT" and "GDOV". By
+changing the IDs, newer versions of Git will silently ignore those older
+chunks and write the new information without trusting the incorrect data.
index b39c69da8cd4166cd5ded92b0896fe2e1fdea005..f2221d2b441ef82c4b3639fb9cd9010734d0a2b6 100644 (file)
@@ -24,6 +24,7 @@ and their offsets into multiple packfiles. It contains:
 ** An offset within the jth packfile for the object.
 * If large offsets are required, we use another list of large
   offsets similar to version 2 pack-indexes.
+- An optional list of objects in pseudo-pack order (used with MIDX bitmaps).
 
 Thus, we can provide O(log N) lookup time for any number
 of packfiles.
index 8d2f42f29e58cd32930e2953d2b1599eff022c92..6d3efb7d16e10683ab3ad8e6bf87217e443f350e 100644 (file)
@@ -376,6 +376,11 @@ CHUNK DATA:
        [Optional] Object Large Offsets (ID: {'L', 'O', 'F', 'F'})
            8-byte offsets into large packfiles.
 
+       [Optional] Bitmap pack order (ID: {'R', 'I', 'D', 'X'})
+           A list of MIDX positions (one per object in the MIDX, num_objects in
+           total, each a 4-byte unsigned integer in network byte order), sorted
+           according to their relative bitmap/pseudo-pack positions.
+
 TRAILER:
 
        Index checksum of the above contents.
@@ -456,9 +461,5 @@ In short, a MIDX's pseudo-pack is the de-duplicated concatenation of
 objects in packs stored by the MIDX, laid out in pack order, and the
 packs arranged in MIDX order (with the preferred pack coming first).
 
-Finally, note that the MIDX's reverse index is not stored as a chunk in
-the multi-pack-index itself. This is done because the reverse index
-includes the checksum of the pack or MIDX to which it belongs, which
-makes it impossible to write in the MIDX. To avoid races when rewriting
-the MIDX, a MIDX reverse index includes the MIDX's checksum in its
-filename (e.g., `multi-pack-index-xyz.rev`).
+The MIDX's reverse index is stored in the optional 'RIDX' chunk within
+the MIDX itself.
index a0dd7c66f247d636c464dac09ba8cfb6dd668de8..99f0eb304061adeb6b9d2b487eb1c2c11d07463b 100644 (file)
@@ -181,6 +181,9 @@ Fetching Missing Objects
   currently fetches all objects referred to by the requested objects, even
   though they are not necessary.
 
+- Fetching with `--refetch` will request a complete new filtered packfile from
+  the remote, which can be used to change a filter without needing to
+  dynamically fetch missing objects.
 
 Using many promisor remotes
 ---------------------------
index d7c3b645cfb058d00bcca798a99e51096f56f065..6a67cc4174f820931a25bbd40c83959237b2983c 100644 (file)
@@ -443,7 +443,7 @@ Obj block format
 Object blocks are optional. Writers may choose to omit object blocks,
 especially if readers will not use the object name to ref mapping.
 
-Object blocks use unique, abbreviated 2-32 object name keys, mapping to
+Object blocks use unique, abbreviated 2-31 byte object name keys, mapping to
 ref blocks containing references pointing to that object directly, or as
 the peeled value of an annotated tag. Like ref blocks, object blocks use
 the file's standard block size. The abbreviation length is available in
index 435d73c42746d12bb38b8bfc51e5f1d7f957e108..4ac6f3ab034d56d665f07a21d8859a5c6c7b5c34 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 GVF=GIT-VERSION-FILE
-DEF_VER=v2.35.8
+DEF_VER=v2.36.5
 
 LF='
 '
index c4ad7595ed62b1e7ba533f9c2d0d6a6cb3773e10..9e9d61079dac39b44faefff2092850efbbc3b774 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,9 @@
 # The default target of this Makefile is...
 all::
 
+# Import tree-wide shared Makefile behavior and libraries
+include shared.mak
+
 # Define V=1 to have a more verbose compile.
 #
 # Define SHELL_PATH to a POSIX shell if your /bin/sh is broken.
@@ -234,6 +237,14 @@ all::
 # Define NO_TRUSTABLE_FILEMODE if your filesystem may claim to support
 # the executable mode bit, but doesn't really do so.
 #
+# Define CSPRNG_METHOD to "arc4random" if your system has arc4random and
+# arc4random_buf, "libbsd" if your system has those functions from libbsd,
+# "getrandom" if your system has getrandom, "getentropy" if your system has
+# getentropy, "rtlgenrandom" for RtlGenRandom (Windows only), or "openssl" if
+# you'd want to use the OpenSSL CSPRNG.  You may set multiple options with
+# spaces, in which case a suitable option will be chosen.  If unset or set to
+# anything else, defaults to using "/dev/urandom".
+#
 # Define NEEDS_MODE_TRANSLATION if your OS strays from the typical file type
 # bits in mode values (e.g. z/OS defines I_SFMT to 0xFF000000 as opposed to the
 # usual 0xF000).
@@ -256,8 +267,6 @@ all::
 #
 # Define NO_DEFLATE_BOUND if your zlib does not have deflateBound.
 #
-# Define NO_UNCOMPRESS2 if your zlib does not have uncompress2.
-#
 # Define NO_NORETURN if using buggy versions of gcc 4.6+ and profile feedback,
 # as the compiler can crash (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49299)
 #
@@ -405,6 +414,8 @@ all::
 #
 # Define HAVE_CLOCK_MONOTONIC if your platform has CLOCK_MONOTONIC.
 #
+# Define HAVE_SYNC_FILE_RANGE if your platform has sync_file_range.
+#
 # Define NEEDS_LIBRT if your platform requires linking with librt (glibc version
 # before 2.17) for clock_gettime and CLOCK_MONOTONIC.
 #
@@ -464,6 +475,11 @@ all::
 # directory, and the JSON compilation database 'compile_commands.json' will be
 # created at the root of the repository.
 #
+# If your platform supports a built-in fsmonitor backend, set
+# FSMONITOR_DAEMON_BACKEND to the "<name>" of the corresponding
+# `compat/fsmonitor/fsm-listen-<name>.c` that implements the
+# `fsm_listen__*()` routines.
+#
 # Define DEVELOPER to enable more compiler warnings. Compiler version
 # and family are auto detected, but could be overridden by defining
 # COMPILER_FEATURES (see config.mak.dev). You can still set
@@ -693,6 +709,7 @@ TEST_BUILTINS_OBJS += test-bloom.o
 TEST_BUILTINS_OBJS += test-chmtime.o
 TEST_BUILTINS_OBJS += test-config.o
 TEST_BUILTINS_OBJS += test-crontab.o
+TEST_BUILTINS_OBJS += test-csprng.o
 TEST_BUILTINS_OBJS += test-ctype.o
 TEST_BUILTINS_OBJS += test-date.o
 TEST_BUILTINS_OBJS += test-delta.o
@@ -704,6 +721,7 @@ TEST_BUILTINS_OBJS += test-dump-split-index.o
 TEST_BUILTINS_OBJS += test-dump-untracked-cache.o
 TEST_BUILTINS_OBJS += test-example-decorate.o
 TEST_BUILTINS_OBJS += test-fast-rebase.o
+TEST_BUILTINS_OBJS += test-fsmonitor-client.o
 TEST_BUILTINS_OBJS += test-genrandom.o
 TEST_BUILTINS_OBJS += test-genzeros.o
 TEST_BUILTINS_OBJS += test-getcwd.o
@@ -823,12 +841,33 @@ GENERATED_H += hook-list.h
 .PHONY: generated-hdrs
 generated-hdrs: $(GENERATED_H)
 
-LIB_H := $(sort $(patsubst ./%,%,$(shell git ls-files '*.h' ':!t/' ':!Documentation/' 2>/dev/null || \
+## Exhaustive lists of our source files, either dynamically generated,
+## or hardcoded.
+SOURCES_CMD = ( \
+       git ls-files \
+               '*.[hcS]' \
+               '*.sh' \
+               ':!*[tp][0-9][0-9][0-9][0-9]*' \
+               ':!contrib' \
+               2>/dev/null || \
        $(FIND) . \
-       -name .git -prune -o \
-       -name t -prune -o \
-       -name Documentation -prune -o \
-       -name '*.h' -print)))
+               \( -name .git -type d -prune \) \
+               -o \( -name '[tp][0-9][0-9][0-9][0-9]*' -prune \) \
+               -o \( -name contrib -type d -prune \) \
+               -o \( -name build -type d -prune \) \
+               -o \( -name 'trash*' -type d -prune \) \
+               -o \( -name '*.[hcS]' -type f -print \) \
+               -o \( -name '*.sh' -type f -print \) \
+               | sed -e 's|^\./||' \
+       )
+FOUND_SOURCE_FILES := $(shell $(SOURCES_CMD))
+
+FOUND_C_SOURCES = $(filter %.c,$(FOUND_SOURCE_FILES))
+FOUND_H_SOURCES = $(filter %.h,$(FOUND_SOURCE_FILES))
+
+COCCI_SOURCES = $(filter-out $(THIRD_PARTY_SOURCES),$(FOUND_C_SOURCES))
+
+LIB_H = $(FOUND_H_SOURCES)
 
 LIB_OBJS += abspath.o
 LIB_OBJS += add-interactive.o
@@ -862,6 +901,7 @@ LIB_OBJS += commit-reach.o
 LIB_OBJS += commit.o
 LIB_OBJS += compat/obstack.o
 LIB_OBJS += compat/terminal.o
+LIB_OBJS += compat/zlib-uncompress2.o
 LIB_OBJS += config.o
 LIB_OBJS += connect.o
 LIB_OBJS += connected.o
@@ -899,6 +939,8 @@ LIB_OBJS += fetch-pack.o
 LIB_OBJS += fmt-merge-msg.o
 LIB_OBJS += fsck.o
 LIB_OBJS += fsmonitor.o
+LIB_OBJS += fsmonitor-ipc.o
+LIB_OBJS += fsmonitor-settings.o
 LIB_OBJS += gettext.o
 LIB_OBJS += gpg-interface.o
 LIB_OBJS += graph.o
@@ -981,6 +1023,7 @@ LIB_OBJS += rebase-interactive.o
 LIB_OBJS += rebase.o
 LIB_OBJS += ref-filter.o
 LIB_OBJS += reflog-walk.o
+LIB_OBJS += reflog.o
 LIB_OBJS += refs.o
 LIB_OBJS += refs/debug.o
 LIB_OBJS += refs/files-backend.o
@@ -1104,11 +1147,13 @@ BUILTIN_OBJS += builtin/fmt-merge-msg.o
 BUILTIN_OBJS += builtin/for-each-ref.o
 BUILTIN_OBJS += builtin/for-each-repo.o
 BUILTIN_OBJS += builtin/fsck.o
+BUILTIN_OBJS += builtin/fsmonitor--daemon.o
 BUILTIN_OBJS += builtin/gc.o
 BUILTIN_OBJS += builtin/get-tar-commit-id.o
 BUILTIN_OBJS += builtin/grep.o
 BUILTIN_OBJS += builtin/hash-object.o
 BUILTIN_OBJS += builtin/help.o
+BUILTIN_OBJS += builtin/hook.o
 BUILTIN_OBJS += builtin/index-pack.o
 BUILTIN_OBJS += builtin/init-db.o
 BUILTIN_OBJS += builtin/interpret-trailers.o
@@ -1194,7 +1239,8 @@ THIRD_PARTY_SOURCES += compat/regex/%
 THIRD_PARTY_SOURCES += sha1collisiondetection/%
 THIRD_PARTY_SOURCES += sha1dc/%
 
-GITLIBS = common-main.o $(LIB_FILE) $(XDIFF_LIB) $(REFTABLE_LIB)
+# xdiff and reftable libs may in turn depend on what is in libgit.a
+GITLIBS = common-main.o $(LIB_FILE) $(XDIFF_LIB) $(REFTABLE_LIB) $(LIB_FILE)
 EXTLIBS =
 
 GIT_USER_AGENT = git/$(GIT_VERSION)
@@ -1221,8 +1267,9 @@ PTHREAD_CFLAGS =
 SPARSE_FLAGS ?= -std=gnu99
 SP_EXTRA_FLAGS = -Wno-universal-initializer
 
-# For informing GIT-BUILD-OPTIONS of the SANITIZE=leak target
+# For informing GIT-BUILD-OPTIONS of the SANITIZE=leak,address targets
 SANITIZE_LEAK =
+SANITIZE_ADDRESS =
 
 # For the 'coccicheck' target; setting SPATCH_BATCH_SIZE higher will
 # usually result in less CPU usage at the cost of higher peak memory.
@@ -1255,10 +1302,6 @@ endif
 ALL_CFLAGS = $(DEVELOPER_CFLAGS) $(CPPFLAGS) $(CFLAGS)
 ALL_LDFLAGS = $(LDFLAGS)
 
-comma := ,
-empty :=
-space := $(empty) $(empty)
-
 ifdef SANITIZE
 SANITIZERS := $(foreach flag,$(subst $(comma),$(space),$(SANITIZE)),$(flag))
 BASIC_CFLAGS += -fsanitize=$(SANITIZE) -fno-sanitize-recover=$(SANITIZE)
@@ -1273,6 +1316,7 @@ SANITIZE_LEAK = YesCompiledWithIt
 endif
 ifneq ($(filter address,$(SANITIZERS)),)
 NO_REGEX = NeededForASAN
+SANITIZE_ADDRESS = YesCompiledWithIt
 endif
 endif
 
@@ -1727,11 +1771,6 @@ ifdef NO_DEFLATE_BOUND
        BASIC_CFLAGS += -DNO_DEFLATE_BOUND
 endif
 
-ifdef NO_UNCOMPRESS2
-       BASIC_CFLAGS += -DNO_UNCOMPRESS2
-       REFTABLE_OBJS += compat/zlib-uncompress2.o
-endif
-
 ifdef NO_POSIX_GOODIES
        BASIC_CFLAGS += -DNO_POSIX_GOODIES
 endif
@@ -1893,6 +1932,10 @@ ifdef HAVE_CLOCK_MONOTONIC
        BASIC_CFLAGS += -DHAVE_CLOCK_MONOTONIC
 endif
 
+ifdef HAVE_SYNC_FILE_RANGE
+       BASIC_CFLAGS += -DHAVE_SYNC_FILE_RANGE
+endif
+
 ifdef NEEDS_LIBRT
        EXTLIBS += -lrt
 endif
@@ -1909,6 +1952,32 @@ ifdef HAVE_GETDELIM
        BASIC_CFLAGS += -DHAVE_GETDELIM
 endif
 
+ifneq ($(findstring arc4random,$(CSPRNG_METHOD)),)
+       BASIC_CFLAGS += -DHAVE_ARC4RANDOM
+endif
+
+ifneq ($(findstring libbsd,$(CSPRNG_METHOD)),)
+       BASIC_CFLAGS += -DHAVE_ARC4RANDOM_LIBBSD
+       EXTLIBS += -lbsd
+endif
+
+ifneq ($(findstring getrandom,$(CSPRNG_METHOD)),)
+       BASIC_CFLAGS += -DHAVE_GETRANDOM
+endif
+
+ifneq ($(findstring getentropy,$(CSPRNG_METHOD)),)
+       BASIC_CFLAGS += -DHAVE_GETENTROPY
+endif
+
+ifneq ($(findstring rtlgenrandom,$(CSPRNG_METHOD)),)
+       BASIC_CFLAGS += -DHAVE_RTLGENRANDOM
+endif
+
+ifneq ($(findstring openssl,$(CSPRNG_METHOD)),)
+       BASIC_CFLAGS += -DHAVE_OPENSSL_CSPRNG
+       EXTLIBS += -lcrypto -lssl
+endif
+
 ifneq ($(PROCFS_EXECUTABLE_PATH),)
        procfs_executable_path_SQ = $(subst ','\'',$(PROCFS_EXECUTABLE_PATH))
        BASIC_CFLAGS += '-DPROCFS_EXECUTABLE_PATH="$(procfs_executable_path_SQ)"'
@@ -1936,6 +2005,11 @@ ifdef NEED_ACCESS_ROOT_HANDLER
        COMPAT_OBJS += compat/access.o
 endif
 
+ifdef FSMONITOR_DAEMON_BACKEND
+       COMPAT_CFLAGS += -DHAVE_FSMONITOR_DAEMON_BACKEND
+       COMPAT_OBJS += compat/fsmonitor/fsm-listen-$(FSMONITOR_DAEMON_BACKEND).o
+endif
+
 ifeq ($(TCLTK_PATH),)
 NO_TCLTK = NoThanks
 endif
@@ -1952,39 +2026,6 @@ ifndef PAGER_ENV
 PAGER_ENV = LESS=FRX LV=-c
 endif
 
-QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
-QUIET_SUBDIR1  =
-
-ifneq ($(findstring w,$(MAKEFLAGS)),w)
-PRINT_DIR = --no-print-directory
-else # "make -w"
-NO_SUBDIR = :
-endif
-
-ifneq ($(findstring s,$(MAKEFLAGS)),s)
-ifndef V
-       QUIET_CC       = @echo '   ' CC $@;
-       QUIET_AR       = @echo '   ' AR $@;
-       QUIET_LINK     = @echo '   ' LINK $@;
-       QUIET_BUILT_IN = @echo '   ' BUILTIN $@;
-       QUIET_GEN      = @echo '   ' GEN $@;
-       QUIET_LNCP     = @echo '   ' LN/CP $@;
-       QUIET_XGETTEXT = @echo '   ' XGETTEXT $@;
-       QUIET_MSGFMT   = @echo '   ' MSGFMT $@;
-       QUIET_GCOV     = @echo '   ' GCOV $@;
-       QUIET_SP       = @echo '   ' SP $<;
-       QUIET_HDR      = @echo '   ' HDR $(<:hcc=h);
-       QUIET_RC       = @echo '   ' RC $@;
-       QUIET_SPATCH   = @echo '   ' SPATCH $<;
-       QUIET_SUBDIR0  = +@subdir=
-       QUIET_SUBDIR1  = ;$(NO_SUBDIR) echo '   ' SUBDIR $$subdir; \
-                        $(MAKE) $(PRINT_DIR) -C $$subdir
-       export V
-       export QUIET_GEN
-       export QUIET_BUILT_IN
-endif
-endif
-
 ifdef NO_INSTALL_HARDLINKS
        export NO_INSTALL_HARDLINKS
 endif
@@ -2165,16 +2206,6 @@ shell_compatibility_test: please_set_SHELL_PATH_to_a_more_modern_shell
 strip: $(PROGRAMS) git$X
        $(STRIP) $(STRIP_OPTS) $^
 
-### Flags affecting all rules
-
-# A GNU make extension since gmake 3.72 (released in late 1994) to
-# remove the target of rules if commands in those rules fail. The
-# default is to only do that if make itself receives a signal. Affects
-# all targets, see:
-#
-#    info make --index-search=.DELETE_ON_ERROR
-.DELETE_ON_ERROR:
-
 ### Target-specific flags and dependencies
 
 # The generic compilation pattern rule and automatically
@@ -2537,8 +2568,6 @@ ASM_SRC := $(wildcard $(OBJECTS:o=S))
 ASM_OBJ := $(ASM_SRC:S=o)
 C_OBJ := $(filter-out $(ASM_OBJ),$(OBJECTS))
 
-.SUFFIXES:
-
 $(C_OBJ): %.o: %.c GIT-CFLAGS $(missing_dep_dirs) $(missing_compdb_dir)
        $(QUIET_CC)$(CC) -o $*.o -c $(dep_args) $(compdb_args) $(ALL_CFLAGS) $(EXTRA_CPPFLAGS) $<
 $(ASM_OBJ): %.o: %.S GIT-CFLAGS $(missing_dep_dirs) $(missing_compdb_dir)
@@ -2741,7 +2770,8 @@ all:: $(MOFILES)
 endif
 
 po/build/locale/%/LC_MESSAGES/git.mo: po/%.po
-       $(QUIET_MSGFMT)mkdir -p $(dir $@) && $(MSGFMT) -o $@ $<
+       $(call mkdir_p_parent_template)
+       $(QUIET_MSGFMT)$(MSGFMT) -o $@ $<
 
 LIB_PERL := $(wildcard perl/Git.pm perl/Git/*.pm perl/Git/*/*.pm perl/Git/*/*/*.pm)
 LIB_PERL_GEN := $(patsubst perl/%.pm,perl/build/lib/%.pm,$(LIB_PERL))
@@ -2757,35 +2787,16 @@ NO_PERL_CPAN_FALLBACKS_SQ = $(subst ','\'',$(NO_PERL_CPAN_FALLBACKS))
 endif
 
 perl/build/lib/%.pm: perl/%.pm GIT-PERL-DEFINES
-       $(QUIET_GEN)mkdir -p $(dir $@) && \
+       $(call mkdir_p_parent_template)
+       $(QUIET_GEN) \
        sed -e 's|@@LOCALEDIR@@|$(perl_localedir_SQ)|g' \
            -e 's|@@NO_GETTEXT@@|$(NO_GETTEXT_SQ)|g' \
            -e 's|@@NO_PERL_CPAN_FALLBACKS@@|$(NO_PERL_CPAN_FALLBACKS_SQ)|g' \
        < $< > $@
 
 perl/build/man/man3/Git.3pm: perl/Git.pm
-       $(QUIET_GEN)mkdir -p $(dir $@) && \
-       pod2man $< $@
-
-FIND_SOURCE_FILES = ( \
-       git ls-files \
-               '*.[hcS]' \
-               '*.sh' \
-               ':!*[tp][0-9][0-9][0-9][0-9]*' \
-               ':!contrib' \
-               2>/dev/null || \
-       $(FIND) . \
-               \( -name .git -type d -prune \) \
-               -o \( -name '[tp][0-9][0-9][0-9][0-9]*' -prune \) \
-               -o \( -name contrib -type d -prune \) \
-               -o \( -name build -type d -prune \) \
-               -o \( -name 'trash*' -type d -prune \) \
-               -o \( -name '*.[hcS]' -type f -print \) \
-               -o \( -name '*.sh' -type f -print \) \
-               | sed -e 's|^\./||' \
-       )
-
-FOUND_SOURCE_FILES = $(shell $(FIND_SOURCE_FILES))
+       $(call mkdir_p_parent_template)
+       $(QUIET_GEN)pod2man $< $@
 
 $(ETAGS_TARGET): $(FOUND_SOURCE_FILES)
        $(QUIET_GEN)$(RM) $@+ && \
@@ -2854,7 +2865,11 @@ GIT-BUILD-OPTIONS: FORCE
        @echo PAGER_ENV=\''$(subst ','\'',$(subst ','\'',$(PAGER_ENV)))'\' >>$@+
        @echo DC_SHA1=\''$(subst ','\'',$(subst ','\'',$(DC_SHA1)))'\' >>$@+
        @echo SANITIZE_LEAK=\''$(subst ','\'',$(subst ','\'',$(SANITIZE_LEAK)))'\' >>$@+
+       @echo SANITIZE_ADDRESS=\''$(subst ','\'',$(subst ','\'',$(SANITIZE_ADDRESS)))'\' >>$@+
        @echo X=\'$(X)\' >>$@+
+ifdef FSMONITOR_DAEMON_BACKEND
+       @echo FSMONITOR_DAEMON_BACKEND=\''$(subst ','\'',$(subst ','\'',$(FSMONITOR_DAEMON_BACKEND)))'\' >>$@+
+endif
 ifdef TEST_OUTPUT_DIRECTORY
        @echo TEST_OUTPUT_DIRECTORY=\''$(subst ','\'',$(subst ','\'',$(TEST_OUTPUT_DIRECTORY)))'\' >>$@+
 endif
@@ -2919,7 +2934,7 @@ test_bindir_programs := $(patsubst %,bin-wrappers/%,$(BINDIR_PROGRAMS_NEED_X) $(
 all:: $(TEST_PROGRAMS) $(test_bindir_programs)
 
 bin-wrappers/%: wrap-for-bin.sh
-       @mkdir -p bin-wrappers
+       $(call mkdir_p_parent_template)
        $(QUIET_GEN)sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
             -e 's|@@BUILD_DIR@@|$(shell pwd)|' \
             -e 's|@@PROG@@|$(patsubst test-%,t/helper/test-%$(X),$(@F))$(patsubst git%,$(X),$(filter $(@F),$(BINDIR_PROGRAMS_NEED_X)))|' < $< > $@ && \
@@ -2996,9 +3011,6 @@ check: $(GENERATED_H)
                exit 1; \
        fi
 
-FOUND_C_SOURCES = $(filter %.c,$(FOUND_SOURCE_FILES))
-COCCI_SOURCES = $(filter-out $(THIRD_PARTY_SOURCES),$(FOUND_C_SOURCES))
-
 %.cocci.patch: %.cocci $(COCCI_SOURCES)
        $(QUIET_SPATCH) \
        if test $(SPATCH_BATCH_SIZE) = 0; then \
index f6f43e78debd8e4dac7e483068c1f9c764beb0f5..7ce4f05bae8120d9fa258e854a8669f6ea9cb7b1 100644 (file)
--- a/README.md
+++ b/README.md
@@ -32,10 +32,16 @@ installed).
 The user discussion and development of Git take place on the Git
 mailing list -- everyone is welcome to post bug reports, feature
 requests, comments and patches to git@vger.kernel.org (read
-[Documentation/SubmittingPatches][] for instructions on patch submission).
+[Documentation/SubmittingPatches][] for instructions on patch submission
+and [Documentation/CodingGuidelines][]).
+
+Those wishing to help with error message, usage and informational message
+string translations (localization l10) should see [po/README.md][]
+(a `po` file is a Portable Object file that holds the translations).
+
 To subscribe to the list, send an email with just "subscribe git" in
-the body to majordomo@vger.kernel.org. The mailing list archives are
-available at <https://lore.kernel.org/git/>,
+the body to majordomo@vger.kernel.org (not the Git list). The mailing
+list archives are available at <https://lore.kernel.org/git/>,
 <http://marc.info/?l=git> and other archival sites.
 
 Issues which are security relevant should be disclosed privately to
@@ -64,3 +70,5 @@ and the name as (depending on your mood):
 [Documentation/giteveryday.txt]: Documentation/giteveryday.txt
 [Documentation/gitcvs-migration.txt]: Documentation/gitcvs-migration.txt
 [Documentation/SubmittingPatches]: Documentation/SubmittingPatches
+[Documentation/CodingGuidelines]: Documentation/CodingGuidelines
+[po/README.md]: po/README.md
index b96499582af20eaa46b04a18640d273eed74651c..8c469851cbdbc2423112701a37f2b466b64b119d 120000 (symlink)
--- a/RelNotes
+++ b/RelNotes
@@ -1 +1 @@
-Documentation/RelNotes/2.35.8.txt
\ No newline at end of file
+Documentation/RelNotes/2.36.5.txt
\ No newline at end of file
index 6498ae196f1e1ed34001e2da87d64defa64c8507..72472103017920ac227641042f05383a40e5c673 100644 (file)
@@ -70,6 +70,8 @@ void init_add_i_state(struct add_i_state *s, struct repository *r)
                              &s->interactive_diff_algorithm);
 
        git_config_get_bool("interactive.singlekey", &s->use_single_key);
+       if (s->use_single_key)
+               setbuf(stdin, NULL);
 }
 
 void clear_add_i_state(struct add_i_state *s)
@@ -797,14 +799,14 @@ static int run_revert(struct add_i_state *s, const struct pathspec *ps,
        diffopt.flags.override_submodule_config = 1;
        diffopt.repo = s->r;
 
-       if (do_diff_cache(&oid, &diffopt))
+       if (do_diff_cache(&oid, &diffopt)) {
+               diff_free(&diffopt);
                res = -1;
-       else {
+       else {
                diffcore_std(&diffopt);
                diff_flush(&diffopt);
        }
        free(paths);
-       clear_pathspec(&diffopt.pathspec);
 
        if (!res && write_locked_index(s->r->index, &index_lock,
                                       COMMIT_LOCK) < 0)
index 573eef0cc4a86642bc92fba74763aaa913af1b2f..55d719f78451635848db00552b77542057879ff4 100644 (file)
@@ -383,6 +383,17 @@ static int is_octal(const char *p, size_t len)
        return 1;
 }
 
+static void complete_file(char marker, struct hunk *hunk)
+{
+       if (marker == '-' || marker == '+')
+               /*
+                * Last hunk ended in non-context line (i.e. it
+                * appended lines to the file, so there are no
+                * trailing context lines).
+                */
+               hunk->splittable_into++;
+}
+
 static int parse_diff(struct add_p_state *s, const struct pathspec *ps)
 {
        struct strvec args = STRVEC_INIT;
@@ -472,6 +483,7 @@ static int parse_diff(struct add_p_state *s, const struct pathspec *ps)
                        eol = pend;
 
                if (starts_with(p, "diff ")) {
+                       complete_file(marker, hunk);
                        ALLOC_GROW_BY(s->file_diff, s->file_diff_nr, 1,
                                   file_diff_alloc);
                        file_diff = s->file_diff + s->file_diff_nr - 1;
@@ -598,13 +610,7 @@ static int parse_diff(struct add_p_state *s, const struct pathspec *ps)
                                file_diff->hunk->colored_end = hunk->colored_end;
                }
        }
-
-       if (marker == '-' || marker == '+')
-               /*
-                * Last hunk ended in non-context line (i.e. it appended lines
-                * to the file, so there are no trailing context lines).
-                */
-               hunk->splittable_into++;
+       complete_file(marker, hunk);
 
        /* non-colored shorter than colored? */
        if (colored_p != colored_pend) {
index 1dfc91d176702d4a99301a1299f4bb0d7a479ec2..6fda9edbc2474fe15c128014b99660034d269177 100644 (file)
--- a/advice.c
+++ b/advice.c
@@ -39,9 +39,11 @@ static struct {
        [ADVICE_ADD_EMPTY_PATHSPEC]                     = { "addEmptyPathspec", 1 },
        [ADVICE_ADD_IGNORED_FILE]                       = { "addIgnoredFile", 1 },
        [ADVICE_AM_WORK_DIR]                            = { "amWorkDir", 1 },
+       [ADVICE_AMBIGUOUS_FETCH_REFSPEC]                = { "ambiguousFetchRefspec", 1 },
        [ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME]  = { "checkoutAmbiguousRemoteBranchName", 1 },
        [ADVICE_COMMIT_BEFORE_MERGE]                    = { "commitBeforeMerge", 1 },
        [ADVICE_DETACHED_HEAD]                          = { "detachedHead", 1 },
+       [ADVICE_SUGGEST_DETACHING_HEAD]                 = { "suggestDetachingHead", 1 },
        [ADVICE_FETCH_SHOW_FORCED_UPDATES]              = { "fetchShowForcedUpdates", 1 },
        [ADVICE_GRAFT_FILE_DEPRECATED]                  = { "graftFileDeprecated", 1 },
        [ADVICE_IGNORED_HOOK]                           = { "ignoredHook", 1 },
@@ -60,7 +62,7 @@ static struct {
        [ADVICE_PUSH_NON_FF_MATCHING]                   = { "pushNonFFMatching", 1 },
        [ADVICE_PUSH_UNQUALIFIED_REF_NAME]              = { "pushUnqualifiedRefName", 1 },
        [ADVICE_PUSH_UPDATE_REJECTED]                   = { "pushUpdateRejected", 1 },
-       [ADVICE_RESET_QUIET_WARNING]                    = { "resetQuiet", 1 },
+       [ADVICE_RESET_NO_REFRESH_WARNING]               = { "resetNoRefresh", 1 },
        [ADVICE_RESOLVE_CONFLICT]                       = { "resolveConflict", 1 },
        [ADVICE_RM_HINTS]                               = { "rmHints", 1 },
        [ADVICE_SEQUENCER_IN_USE]                       = { "sequencerInUse", 1 },
@@ -70,6 +72,7 @@ static struct {
        [ADVICE_STATUS_HINTS]                           = { "statusHints", 1 },
        [ADVICE_STATUS_U_OPTION]                        = { "statusUoption", 1 },
        [ADVICE_SUBMODULE_ALTERNATE_ERROR_STRATEGY_DIE] = { "submoduleAlternateErrorStrategyDie", 1 },
+       [ADVICE_SUBMODULES_NOT_UPDATED]                 = { "submodulesNotUpdated", 1 },
        [ADVICE_UPDATE_SPARSE_PATH]                     = { "updateSparsePath", 1 },
        [ADVICE_WAITING_FOR_EDITOR]                     = { "waitingForEditor", 1 },
 };
index 601265fd1070da02246eae167a85e855b3979eae..7ddc6cbc1ac8d7d9d15c9761187b87b5c00e4107 100644 (file)
--- a/advice.h
+++ b/advice.h
@@ -17,9 +17,11 @@ struct string_list;
        ADVICE_ADD_EMPTY_PATHSPEC,
        ADVICE_ADD_IGNORED_FILE,
        ADVICE_AM_WORK_DIR,
+       ADVICE_AMBIGUOUS_FETCH_REFSPEC,
        ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME,
        ADVICE_COMMIT_BEFORE_MERGE,
        ADVICE_DETACHED_HEAD,
+       ADVICE_SUGGEST_DETACHING_HEAD,
        ADVICE_FETCH_SHOW_FORCED_UPDATES,
        ADVICE_GRAFT_FILE_DEPRECATED,
        ADVICE_IGNORED_HOOK,
@@ -35,7 +37,7 @@ struct string_list;
        ADVICE_PUSH_UPDATE_REJECTED_ALIAS,
        ADVICE_PUSH_UPDATE_REJECTED,
        ADVICE_PUSH_REF_NEEDS_UPDATE,
-       ADVICE_RESET_QUIET_WARNING,
+       ADVICE_RESET_NO_REFRESH_WARNING,
        ADVICE_RESOLVE_CONFLICT,
        ADVICE_RM_HINTS,
        ADVICE_SEQUENCER_IN_USE,
@@ -44,6 +46,7 @@ struct string_list;
        ADVICE_STATUS_HINTS,
        ADVICE_STATUS_U_OPTION,
        ADVICE_SUBMODULE_ALTERNATE_ERROR_STRATEGY_DIE,
+       ADVICE_SUBMODULES_NOT_UPDATED,
        ADVICE_UPDATE_SPARSE_PATH,
        ADVICE_WAITING_FOR_EDITOR,
        ADVICE_SKIPPED_CHERRY_PICKS,
diff --git a/apply.c b/apply.c
index 47f26860a8bbbab979e8ade4d259958e628a5b7a..5258314e9bc416ac0a422157ae5c79bcc89d5ffe 100644 (file)
--- a/apply.c
+++ b/apply.c
@@ -103,7 +103,8 @@ int init_apply_state(struct apply_state *state,
        state->linenr = 1;
        string_list_init_nodup(&state->fn_table);
        string_list_init_nodup(&state->limit_by_name);
-       string_list_init_nodup(&state->symlink_changes);
+       strset_init(&state->removed_symlinks);
+       strset_init(&state->kept_symlinks);
        strbuf_init(&state->root, 0);
 
        git_apply_config();
@@ -117,7 +118,8 @@ int init_apply_state(struct apply_state *state,
 void clear_apply_state(struct apply_state *state)
 {
        string_list_clear(&state->limit_by_name, 0);
-       string_list_clear(&state->symlink_changes, 0);
+       strset_clear(&state->removed_symlinks);
+       strset_clear(&state->kept_symlinks);
        strbuf_release(&state->root);
 
        /* &state->fn_table is cleared at the end of apply_patch() */
@@ -217,13 +219,18 @@ static void free_fragment_list(struct fragment *list)
        }
 }
 
-static void free_patch(struct patch *patch)
+void release_patch(struct patch *patch)
 {
        free_fragment_list(patch->fragments);
        free(patch->def_name);
        free(patch->old_name);
        free(patch->new_name);
        free(patch->result);
+}
+
+static void free_patch(struct patch *patch)
+{
+       release_patch(patch);
        free(patch);
 }
 
@@ -3157,7 +3164,7 @@ static int apply_binary(struct apply_state *state,
                 * See if the old one matches what the patch
                 * applies to.
                 */
-               hash_object_file(the_hash_algo, img->buf, img->len, blob_type,
+               hash_object_file(the_hash_algo, img->buf, img->len, OBJ_BLOB,
                                 &oid);
                if (strcmp(oid_to_hex(&oid), patch->old_oid_prefix))
                        return error(_("the patch applies to '%s' (%s), "
@@ -3203,7 +3210,7 @@ static int apply_binary(struct apply_state *state,
                                     name);
 
                /* verify that the result matches */
-               hash_object_file(the_hash_algo, img->buf, img->len, blob_type,
+               hash_object_file(the_hash_algo, img->buf, img->len, OBJ_BLOB,
                                 &oid);
                if (strcmp(oid_to_hex(&oid), patch->new_oid_prefix))
                        return error(_("binary patch to '%s' creates incorrect result (expecting %s, got %s)"),
@@ -3492,7 +3499,7 @@ static int three_way_merge(struct apply_state *state,
 {
        mmfile_t base_file, our_file, their_file;
        mmbuffer_t result = { NULL };
-       int status;
+       enum ll_merge_result status;
 
        /* resolve trivial cases first */
        if (oideq(base, ours))
@@ -3509,6 +3516,9 @@ static int three_way_merge(struct apply_state *state,
                          &their_file, "theirs",
                          state->repo->index,
                          NULL);
+       if (status == LL_MERGE_BINARY_CONFLICT)
+               warning("Cannot merge binary files: %s (%s vs. %s)",
+                       path, "ours", "theirs");
        free(base_file.ptr);
        free(our_file.ptr);
        free(their_file.ptr);
@@ -3589,7 +3599,7 @@ static int try_threeway(struct apply_state *state,
 
        /* Preimage the patch was prepared for */
        if (patch->is_new)
-               write_object_file("", 0, blob_type, &pre_oid);
+               write_object_file("", 0, OBJ_BLOB, &pre_oid);
        else if (get_oid(patch->old_oid_prefix, &pre_oid) ||
                 read_blob_object(&buf, &pre_oid, patch->old_mode))
                return error(_("repository lacks the necessary blob to perform 3-way merge."));
@@ -3605,7 +3615,7 @@ static int try_threeway(struct apply_state *state,
                return -1;
        }
        /* post_oid is theirs */
-       write_object_file(tmp_image.buf, tmp_image.len, blob_type, &post_oid);
+       write_object_file(tmp_image.buf, tmp_image.len, OBJ_BLOB, &post_oid);
        clear_image(&tmp_image);
 
        /* our_oid is ours */
@@ -3618,7 +3628,7 @@ static int try_threeway(struct apply_state *state,
                        return error(_("cannot read the current contents of '%s'"),
                                     patch->old_name);
        }
-       write_object_file(tmp_image.buf, tmp_image.len, blob_type, &our_oid);
+       write_object_file(tmp_image.buf, tmp_image.len, OBJ_BLOB, &our_oid);
        clear_image(&tmp_image);
 
        /* in-core three-way merge between post and our using pre as base */
@@ -3814,59 +3824,31 @@ static int check_to_create(struct apply_state *state,
        return 0;
 }
 
-static uintptr_t register_symlink_changes(struct apply_state *state,
-                                         const char *path,
-                                         uintptr_t what)
-{
-       struct string_list_item *ent;
-
-       ent = string_list_lookup(&state->symlink_changes, path);
-       if (!ent) {
-               ent = string_list_insert(&state->symlink_changes, path);
-               ent->util = (void *)0;
-       }
-       ent->util = (void *)(what | ((uintptr_t)ent->util));
-       return (uintptr_t)ent->util;
-}
-
-static uintptr_t check_symlink_changes(struct apply_state *state, const char *path)
-{
-       struct string_list_item *ent;
-
-       ent = string_list_lookup(&state->symlink_changes, path);
-       if (!ent)
-               return 0;
-       return (uintptr_t)ent->util;
-}
-
 static void prepare_symlink_changes(struct apply_state *state, struct patch *patch)
 {
        for ( ; patch; patch = patch->next) {
                if ((patch->old_name && S_ISLNK(patch->old_mode)) &&
                    (patch->is_rename || patch->is_delete))
                        /* the symlink at patch->old_name is removed */
-                       register_symlink_changes(state, patch->old_name, APPLY_SYMLINK_GOES_AWAY);
+                       strset_add(&state->removed_symlinks, patch->old_name);
 
                if (patch->new_name && S_ISLNK(patch->new_mode))
                        /* the symlink at patch->new_name is created or remains */
-                       register_symlink_changes(state, patch->new_name, APPLY_SYMLINK_IN_RESULT);
+                       strset_add(&state->kept_symlinks, patch->new_name);
        }
 }
 
 static int path_is_beyond_symlink_1(struct apply_state *state, struct strbuf *name)
 {
        do {
-               unsigned int change;
-
                while (--name->len && name->buf[name->len] != '/')
                        ; /* scan backwards */
                if (!name->len)
                        break;
                name->buf[name->len] = '\0';
-               change = check_symlink_changes(state, name->buf);
-               if (change & APPLY_SYMLINK_IN_RESULT)
+               if (strset_contains(&state->kept_symlinks, name->buf))
                        return 1;
-               if (change & APPLY_SYMLINK_GOES_AWAY)
+               if (strset_contains(&state->removed_symlinks, name->buf))
                        /*
                         * This cannot be "return 0", because we may
                         * see a new one created at a higher level.
@@ -4346,7 +4328,7 @@ static int add_index_file(struct apply_state *state,
                        }
                        fill_stat_cache_info(state->repo->index, ce, &st);
                }
-               if (write_object_file(buf, size, blob_type, &ce->oid) < 0) {
+               if (write_object_file(buf, size, OBJ_BLOB, &ce->oid) < 0) {
                        discard_cache_entry(ce);
                        return error(_("unable to create backing store "
                                       "for newly created file %s"), path);
diff --git a/apply.h b/apply.h
index 16202da16026f8ef127e406418229d1f47802b53..b9f18ce87d1e0374a04aaaf785592c752dba6058 100644 (file)
--- a/apply.h
+++ b/apply.h
@@ -4,6 +4,7 @@
 #include "hash.h"
 #include "lockfile.h"
 #include "string-list.h"
+#include "strmap.h"
 
 struct repository;
 
@@ -25,20 +26,6 @@ enum apply_verbosity {
        verbosity_verbose = 1
 };
 
-/*
- * We need to keep track of how symlinks in the preimage are
- * manipulated by the patches.  A patch to add a/b/c where a/b
- * is a symlink should not be allowed to affect the directory
- * the symlink points at, but if the same patch removes a/b,
- * it is perfectly fine, as the patch removes a/b to make room
- * to create a directory a/b so that a/b/c can be created.
- *
- * See also "struct string_list symlink_changes" in "struct
- * apply_state".
- */
-#define APPLY_SYMLINK_GOES_AWAY 01
-#define APPLY_SYMLINK_IN_RESULT 02
-
 struct apply_state {
        const char *prefix;
 
@@ -86,7 +73,16 @@ struct apply_state {
 
        /* Various "current state" */
        int linenr; /* current line number */
-       struct string_list symlink_changes; /* we have to track symlinks */
+       /*
+        * We need to keep track of how symlinks in the preimage are
+        * manipulated by the patches.  A patch to add a/b/c where a/b
+        * is a symlink should not be allowed to affect the directory
+        * the symlink points at, but if the same patch removes a/b,
+        * it is perfectly fine, as the patch removes a/b to make room
+        * to create a directory a/b so that a/b/c can be created.
+        */
+       struct strset removed_symlinks;
+       struct strset kept_symlinks;
 
        /*
         * For "diff-stat" like behaviour, we keep track of the biggest change
@@ -177,6 +173,8 @@ int parse_git_diff_header(struct strbuf *root,
                          unsigned int size,
                          struct patch *patch);
 
+void release_patch(struct patch *patch);
+
 /*
  * Some aspects of the apply behavior are controlled by the following
  * bits in the "options" parameter passed to apply_all_patches().
index 3c74db174687d7c95abf2ef8f042ef2e49146b4e..042feb66d287329c43cd7b4f94d03339f6c144a3 100644 (file)
@@ -461,9 +461,9 @@ static int write_tar_filter_archive(const struct archiver *ar,
 }
 
 static struct archiver tar_archiver = {
-       "tar",
-       write_tar_archive,
-       ARCHIVER_REMOTE
+       .name = "tar",
+       .write_archive = write_tar_archive,
+       .flags = ARCHIVER_REMOTE,
 };
 
 void init_tar_archiver(void)
index 2961e01c754fc4641af62f7d45e63458eb4f942d..9fe43d740d83f99111c31ef64207cf908765c17e 100644 (file)
@@ -9,6 +9,7 @@
 #include "object-store.h"
 #include "userdiff.h"
 #include "xdiff-interface.h"
+#include "date.h"
 
 static int zip_date;
 static int zip_time;
@@ -637,9 +638,9 @@ static int write_zip_archive(const struct archiver *ar,
 }
 
 static struct archiver zip_archiver = {
-       "zip",
-       write_zip_archive,
-       ARCHIVER_WANT_COMPRESSION_LEVELS|ARCHIVER_REMOTE
+       .name = "zip",
+       .write_archive = write_zip_archive,
+       .flags = ARCHIVER_WANT_COMPRESSION_LEVELS|ARCHIVER_REMOTE,
 };
 
 void init_zip_archiver(void)
index d571249cf393396ca9815cf805f39b3d3d82c2d6..12a08af5311baf03d303fd4a56b39b050eab86a6 100644 (file)
--- a/archive.c
+++ b/archive.c
@@ -12,7 +12,7 @@
 
 static char const * const archive_usage[] = {
        N_("git archive [<options>] <tree-ish> [<path>...]"),
-       N_("git archive --list"),
+       "git archive --list",
        N_("git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"),
        N_("git archive --remote <repo> [--exec <cmd>] --list"),
        NULL
@@ -342,7 +342,7 @@ int write_archive_entries(struct archiver_args *args,
                else
                        err = write_entry(args, &fake_oid, path_in_archive.buf,
                                          path_in_archive.len,
-                                         info->stat.st_mode,
+                                         canon_mode(info->stat.st_mode),
                                          content.buf, content.len);
                if (err)
                        break;
diff --git a/attr.c b/attr.c
index d5f269167bb8ad72fd2a0d95e0d4388e209a7cda..c010bd9fa3ed3fe3ff0998d34ed0d2acfddc2eef 100644 (file)
--- a/attr.c
+++ b/attr.c
@@ -14,7 +14,6 @@
 #include "utf8.h"
 #include "quote.h"
 #include "thread-utils.h"
-#include "dir.h"
 
 const char git_attr__true[] = "(builtin)true";
 const char git_attr__false[] = "\0(builtin)false";
@@ -80,7 +79,7 @@ static int attr_hash_entry_cmp(const void *unused_cmp_data,
  * Access to this dictionary must be surrounded with a mutex.
  */
 static struct attr_hashmap g_attr_hashmap = {
-       HASHMAP_INIT(attr_hash_entry_cmp, NULL)
+       .map = HASHMAP_INIT(attr_hash_entry_cmp, NULL),
 };
 
 /*
diff --git a/attr.h b/attr.h
index 583543a84a929f4eb4b61232c6e4a04271fe40dd..2f22dffadb32ad6f0b2b9a325e098b9bb0f199f7 100644 (file)
--- a/attr.h
+++ b/attr.h
@@ -133,7 +133,6 @@ struct git_attr;
 /* opaque structures used internally for attribute collection */
 struct all_attrs_item;
 struct attr_stack;
-struct index_state;
 
 /*
  * Given a string, return the gitattribute object that
index 7ab4f2e49219bdb38e4fe4e5b85d5a0cc3765566..6ccf46bc197e8cce014421f803e07e1f8f9d4963 100644 (file)
--- a/banned.h
+++ b/banned.h
 
 #undef sprintf
 #undef vsprintf
-#ifdef HAVE_VARIADIC_MACROS
 #define sprintf(...) BANNED(sprintf)
 #define vsprintf(...) BANNED(vsprintf)
-#else
-#define sprintf(buf,fmt,arg) BANNED(sprintf)
-#define vsprintf(buf,fmt,arg) BANNED(vsprintf)
-#endif
 
 #undef gmtime
 #define gmtime(t) BANNED(gmtime)
index 888949fba6b5d5301b49daff323f977daf9f4e01..9e6a2b7f201a604f40d074c13be6d0c892cdf46d 100644 (file)
--- a/bisect.c
+++ b/bisect.c
@@ -724,7 +724,8 @@ static int is_expected_rev(const struct object_id *oid)
        return res;
 }
 
-static enum bisect_error bisect_checkout(const struct object_id *bisect_rev, int no_checkout)
+enum bisect_error bisect_checkout(const struct object_id *bisect_rev,
+                                 int no_checkout)
 {
        char bisect_rev_hex[GIT_MAX_HEXSZ + 1];
        struct commit *commit;
index ec24ac2d7ee9d18fa6a9188534040602fd728e38..1015aeb8eaeaee7f539a4631b6dbf1c27175c7fb 100644 (file)
--- a/bisect.h
+++ b/bisect.h
@@ -3,6 +3,7 @@
 
 struct commit_list;
 struct repository;
+struct object_id;
 
 /*
  * Find bisection. If something is found, `reaches` will be the number of
@@ -69,4 +70,7 @@ void read_bisect_terms(const char **bad, const char **good);
 
 int bisect_clean_state(void);
 
+enum bisect_error bisect_checkout(const struct object_id *bisect_rev,
+                                 int no_checkout);
+
 #endif
diff --git a/blame.c b/blame.c
index 206c295660f29b1fd44842ef0f28caf4d2e04788..186ad96120983107d10417e52829e60df12c2bc4 100644 (file)
--- a/blame.c
+++ b/blame.c
@@ -1403,7 +1403,6 @@ static struct blame_origin *find_origin(struct repository *r,
                }
        }
        diff_flush(&diff_opts);
-       clear_pathspec(&diff_opts.pathspec);
        return porigin;
 }
 
@@ -1447,7 +1446,6 @@ static struct blame_origin *find_rename(struct repository *r,
                }
        }
        diff_flush(&diff_opts);
-       clear_pathspec(&diff_opts.pathspec);
        return porigin;
 }
 
@@ -2328,7 +2326,6 @@ static void find_copy_in_parent(struct blame_scoreboard *sb,
        } while (unblamed);
        target->suspects = reverse_blame(leftover, NULL);
        diff_flush(&diff_opts);
-       clear_pathspec(&diff_opts.pathspec);
 }
 
 /*
@@ -2615,7 +2612,7 @@ void assign_blame(struct blame_scoreboard *sb, int opt)
                else {
                        commit->object.flags |= UNINTERESTING;
                        if (commit->object.parsed)
-                               mark_parents_uninteresting(commit);
+                               mark_parents_uninteresting(sb->revs, commit);
                }
                /* treat root commit as boundary */
                if (!commit->parents && !sb->show_root)
index 1bb6e7c069035bbf688d12cf8bcffa58790da5fc..5974cd7dd3cc128a7d0f7fd9a5f5c7c9c972de15 100644 (file)
 
 #include "sha1.h"
 
-#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
-
-/*
- * Force usage of rol or ror by selecting the one with the smaller constant.
- * It _can_ generate slightly smaller code (a constant of 1 is special), but
- * perhaps more importantly it's possibly faster on any uarch that does a
- * rotate with a loop.
- */
-
-#define SHA_ASM(op, x, n) ({ unsigned int __res; __asm__(op " %1,%0":"=r" (__res):"i" (n), "0" (x)); __res; })
-#define SHA_ROL(x,n)   SHA_ASM("rol", x, n)
-#define SHA_ROR(x,n)   SHA_ASM("ror", x, n)
-
-#else
-
 #define SHA_ROT(X,l,r) (((X) << (l)) | ((X) >> (r)))
 #define SHA_ROL(X,n)   SHA_ROT(X,n,32-(n))
 #define SHA_ROR(X,n)   SHA_ROT(X,32-(n),n)
 
-#endif
-
 /*
  * If you have 32 registers or more, the compiler can (and should)
  * try to change the array[] accesses into registers. However, on
index 5d20a2e8484b22f321a60e01d63cb4c4bd8e88fe..01ecb816d5c4181786e7affab5aabd6a270a1db8 100644 (file)
--- a/branch.c
+++ b/branch.c
@@ -8,6 +8,8 @@
 #include "sequencer.h"
 #include "commit.h"
 #include "worktree.h"
+#include "submodule-config.h"
+#include "run-command.h"
 
 struct tracking {
        struct refspec_item spec;
@@ -16,17 +18,31 @@ struct tracking {
        int matches;
 };
 
+struct find_tracked_branch_cb {
+       struct tracking *tracking;
+       struct string_list ambiguous_remotes;
+};
+
 static int find_tracked_branch(struct remote *remote, void *priv)
 {
-       struct tracking *tracking = priv;
+       struct find_tracked_branch_cb *ftb = priv;
+       struct tracking *tracking = ftb->tracking;
 
        if (!remote_find_tracking(remote, &tracking->spec)) {
-               if (++tracking->matches == 1) {
+               switch (++tracking->matches) {
+               case 1:
                        string_list_append(tracking->srcs, tracking->spec.src);
                        tracking->remote = remote->name;
-               } else {
+                       break;
+               case 2:
+                       /* there are at least two remotes; backfill the first one */
+                       string_list_append(&ftb->ambiguous_remotes, tracking->remote);
+                       /* fall through */
+               default:
+                       string_list_append(&ftb->ambiguous_remotes, remote->name);
                        free(tracking->spec.src);
                        string_list_clear(tracking->srcs, 0);
+               break;
                }
                tracking->spec.src = NULL;
        }
@@ -218,9 +234,11 @@ static int inherit_tracking(struct tracking *tracking, const char *orig_ref)
 }
 
 /*
- * This is called when new_ref is branched off of orig_ref, and tries
- * to infer the settings for branch.<new_ref>.{remote,merge} from the
- * config.
+ * Used internally to set the branch.<new_ref>.{remote,merge} config
+ * settings so that branch 'new_ref' tracks 'orig_ref'. Unlike
+ * dwim_and_setup_tracking(), this does not do DWIM, i.e. "origin/main"
+ * will not be expanded to "refs/remotes/origin/main", so it is not safe
+ * for 'orig_ref' to be raw user input.
  */
 static void setup_tracking(const char *new_ref, const char *orig_ref,
                           enum branch_track track, int quiet)
@@ -228,14 +246,21 @@ static void setup_tracking(const char *new_ref, const char *orig_ref,
        struct tracking tracking;
        struct string_list tracking_srcs = STRING_LIST_INIT_DUP;
        int config_flags = quiet ? 0 : BRANCH_CONFIG_VERBOSE;
+       struct find_tracked_branch_cb ftb_cb = {
+               .tracking = &tracking,
+               .ambiguous_remotes = STRING_LIST_INIT_DUP,
+       };
+
+       if (!track)
+               BUG("asked to set up tracking, but tracking is disallowed");
 
        memset(&tracking, 0, sizeof(tracking));
        tracking.spec.dst = (char *)orig_ref;
        tracking.srcs = &tracking_srcs;
        if (track != BRANCH_TRACK_INHERIT)
-               for_each_remote(find_tracked_branch, &tracking);
+               for_each_remote(find_tracked_branch, &ftb_cb);
        else if (inherit_tracking(&tracking, orig_ref))
-               return;
+               goto cleanup;
 
        if (!tracking.matches)
                switch (track) {
@@ -245,20 +270,52 @@ static void setup_tracking(const char *new_ref, const char *orig_ref,
                case BRANCH_TRACK_INHERIT:
                        break;
                default:
-                       return;
+                       goto cleanup;
                }
 
-       if (tracking.matches > 1)
-               die(_("not tracking: ambiguous information for ref %s"),
-                   orig_ref);
+       if (tracking.matches > 1) {
+               int status = die_message(_("not tracking: ambiguous information for ref '%s'"),
+                                           orig_ref);
+               if (advice_enabled(ADVICE_AMBIGUOUS_FETCH_REFSPEC)) {
+                       struct strbuf remotes_advice = STRBUF_INIT;
+                       struct string_list_item *item;
+
+                       for_each_string_list_item(item, &ftb_cb.ambiguous_remotes)
+                               /*
+                                * TRANSLATORS: This is a line listing a remote with duplicate
+                                * refspecs in the advice message below. For RTL languages you'll
+                                * probably want to swap the "%s" and leading "  " space around.
+                                */
+                               strbuf_addf(&remotes_advice, _("  %s\n"), item->string);
+
+                       /*
+                        * TRANSLATORS: The second argument is a \n-delimited list of
+                        * duplicate refspecs, composed above.
+                        */
+                       advise(_("There are multiple remotes whose fetch refspecs map to the remote\n"
+                                "tracking ref '%s':\n"
+                                "%s"
+                                "\n"
+                                "This is typically a configuration error.\n"
+                                "\n"
+                                "To support setting up tracking branches, ensure that\n"
+                                "different remotes' fetch refspecs map into different\n"
+                                "tracking namespaces."), orig_ref,
+                              remotes_advice.buf);
+                       strbuf_release(&remotes_advice);
+               }
+               exit(status);
+       }
 
        if (tracking.srcs->nr < 1)
                string_list_append(tracking.srcs, orig_ref);
        if (install_branch_config_multiple_remotes(config_flags, new_ref,
                                tracking.remote, tracking.srcs) < 0)
-               exit(-1);
+               exit(1);
 
-       string_list_clear(tracking.srcs, 0);
+cleanup:
+       string_list_clear(&tracking_srcs, 0);
+       string_list_clear(&ftb_cb.ambiguous_remotes, 0);
 }
 
 int read_branch_desc(struct strbuf *buf, const char *branch_name)
@@ -346,40 +403,44 @@ N_("\n"
 "will track its remote counterpart, you may want to use\n"
 "\"git push -u\" to set the upstream config as you push.");
 
-void create_branch(struct repository *r,
-                  const char *name, const char *start_name,
-                  int force, int clobber_head_ok, int reflog,
-                  int quiet, enum branch_track track)
+/**
+ * DWIMs a user-provided ref to determine the starting point for a
+ * branch and validates it, where:
+ *
+ *   - r is the repository to validate the branch for
+ *
+ *   - start_name is the ref that we would like to test. This is
+ *     expanded with DWIM and assigned to out_real_ref.
+ *
+ *   - track is the tracking mode of the new branch. If tracking is
+ *     explicitly requested, start_name must be a branch (because
+ *     otherwise start_name cannot be tracked)
+ *
+ *   - out_oid is an out parameter containing the object_id of start_name
+ *
+ *   - out_real_ref is an out parameter containing the full, 'real' form
+ *     of start_name e.g. refs/heads/main instead of main
+ *
+ */
+static void dwim_branch_start(struct repository *r, const char *start_name,
+                          enum branch_track track, char **out_real_ref,
+                          struct object_id *out_oid)
 {
        struct commit *commit;
        struct object_id oid;
        char *real_ref;
-       struct strbuf ref = STRBUF_INIT;
-       int forcing = 0;
-       int dont_change_ref = 0;
        int explicit_tracking = 0;
 
        if (track == BRANCH_TRACK_EXPLICIT || track == BRANCH_TRACK_OVERRIDE)
                explicit_tracking = 1;
 
-       if ((track == BRANCH_TRACK_OVERRIDE || clobber_head_ok)
-           ? validate_branchname(name, &ref)
-           : validate_new_branchname(name, &ref, force)) {
-               if (!force)
-                       dont_change_ref = 1;
-               else
-                       forcing = 1;
-       }
-
        real_ref = NULL;
        if (get_oid_mb(start_name, &oid)) {
                if (explicit_tracking) {
-                       if (advice_enabled(ADVICE_SET_UPSTREAM_FAILURE)) {
-                               error(_(upstream_missing), start_name);
-                               advise(_(upstream_advice));
-                               exit(1);
-                       }
-                       die(_(upstream_missing), start_name);
+                       int code = die_message(_(upstream_missing), start_name);
+                       advise_if_enabled(ADVICE_SET_UPSTREAM_FAILURE,
+                                         _(upstream_advice));
+                       exit(code);
                }
                die(_("not a valid object name: '%s'"), start_name);
        }
@@ -407,40 +468,240 @@ void create_branch(struct repository *r,
 
        if ((commit = lookup_commit_reference(r, &oid)) == NULL)
                die(_("not a valid branch point: '%s'"), start_name);
-       oidcpy(&oid, &commit->object.oid);
+       if (out_real_ref) {
+               *out_real_ref = real_ref;
+               real_ref = NULL;
+       }
+       if (out_oid)
+               oidcpy(out_oid, &commit->object.oid);
+
+       FREE_AND_NULL(real_ref);
+}
+
+void create_branch(struct repository *r,
+                  const char *name, const char *start_name,
+                  int force, int clobber_head_ok, int reflog,
+                  int quiet, enum branch_track track, int dry_run)
+{
+       struct object_id oid;
+       char *real_ref;
+       struct strbuf ref = STRBUF_INIT;
+       int forcing = 0;
+       struct ref_transaction *transaction;
+       struct strbuf err = STRBUF_INIT;
+       char *msg;
+
+       if (track == BRANCH_TRACK_OVERRIDE)
+               BUG("'track' cannot be BRANCH_TRACK_OVERRIDE. Did you mean to call dwim_and_setup_tracking()?");
+       if (clobber_head_ok && !force)
+               BUG("'clobber_head_ok' can only be used with 'force'");
+
+       if (clobber_head_ok ?
+                         validate_branchname(name, &ref) :
+                         validate_new_branchname(name, &ref, force)) {
+               forcing = 1;
+       }
+
+       dwim_branch_start(r, start_name, track, &real_ref, &oid);
+       if (dry_run)
+               goto cleanup;
 
        if (reflog)
                log_all_ref_updates = LOG_REFS_NORMAL;
 
-       if (!dont_change_ref) {
-               struct ref_transaction *transaction;
-               struct strbuf err = STRBUF_INIT;
-               char *msg;
-
-               if (forcing)
-                       msg = xstrfmt("branch: Reset to %s", start_name);
-               else
-                       msg = xstrfmt("branch: Created from %s", start_name);
-
-               transaction = ref_transaction_begin(&err);
-               if (!transaction ||
-                   ref_transaction_update(transaction, ref.buf,
-                                          &oid, forcing ? NULL : null_oid(),
-                                          0, msg, &err) ||
-                   ref_transaction_commit(transaction, &err))
-                       die("%s", err.buf);
-               ref_transaction_free(transaction);
-               strbuf_release(&err);
-               free(msg);
-       }
+       if (forcing)
+               msg = xstrfmt("branch: Reset to %s", start_name);
+       else
+               msg = xstrfmt("branch: Created from %s", start_name);
+       transaction = ref_transaction_begin(&err);
+       if (!transaction ||
+               ref_transaction_update(transaction, ref.buf,
+                                       &oid, forcing ? NULL : null_oid(),
+                                       0, msg, &err) ||
+               ref_transaction_commit(transaction, &err))
+               die("%s", err.buf);
+       ref_transaction_free(transaction);
+       strbuf_release(&err);
+       free(msg);
 
        if (real_ref && track)
                setup_tracking(ref.buf + 11, real_ref, track, quiet);
 
+cleanup:
        strbuf_release(&ref);
        free(real_ref);
 }
 
+void dwim_and_setup_tracking(struct repository *r, const char *new_ref,
+                            const char *orig_ref, enum branch_track track,
+                            int quiet)
+{
+       char *real_orig_ref;
+       dwim_branch_start(r, orig_ref, track, &real_orig_ref, NULL);
+       setup_tracking(new_ref, real_orig_ref, track, quiet);
+}
+
+/**
+ * Creates a branch in a submodule by calling
+ * create_branches_recursively() in a child process. The child process
+ * is necessary because install_branch_config_multiple_remotes() (which
+ * is called by setup_tracking()) does not support writing configs to
+ * submodules.
+ */
+static int submodule_create_branch(struct repository *r,
+                                  const struct submodule *submodule,
+                                  const char *name, const char *start_oid,
+                                  const char *tracking_name, int force,
+                                  int reflog, int quiet,
+                                  enum branch_track track, int dry_run)
+{
+       int ret = 0;
+       struct child_process child = CHILD_PROCESS_INIT;
+       struct strbuf child_err = STRBUF_INIT;
+       struct strbuf out_buf = STRBUF_INIT;
+       char *out_prefix = xstrfmt("submodule '%s': ", submodule->name);
+       child.git_cmd = 1;
+       child.err = -1;
+       child.stdout_to_stderr = 1;
+
+       prepare_other_repo_env(&child.env_array, r->gitdir);
+       /*
+        * submodule_create_branch() is indirectly invoked by "git
+        * branch", but we cannot invoke "git branch" in the child
+        * process. "git branch" accepts a branch name and start point,
+        * where the start point is assumed to provide both the OID
+        * (start_oid) and the branch to use for tracking
+        * (tracking_name). But when recursing through submodules,
+        * start_oid and tracking name need to be specified separately
+        * (see create_branches_recursively()).
+        */
+       strvec_pushl(&child.args, "submodule--helper", "create-branch", NULL);
+       if (dry_run)
+               strvec_push(&child.args, "--dry-run");
+       if (force)
+               strvec_push(&child.args, "--force");
+       if (quiet)
+               strvec_push(&child.args, "--quiet");
+       if (reflog)
+               strvec_push(&child.args, "--create-reflog");
+
+       switch (track) {
+       case BRANCH_TRACK_NEVER:
+               strvec_push(&child.args, "--no-track");
+               break;
+       case BRANCH_TRACK_ALWAYS:
+       case BRANCH_TRACK_EXPLICIT:
+               strvec_push(&child.args, "--track=direct");
+               break;
+       case BRANCH_TRACK_OVERRIDE:
+               BUG("BRANCH_TRACK_OVERRIDE cannot be used when creating a branch.");
+               break;
+       case BRANCH_TRACK_INHERIT:
+               strvec_push(&child.args, "--track=inherit");
+               break;
+       case BRANCH_TRACK_UNSPECIFIED:
+               /* Default for "git checkout". Do not pass --track. */
+       case BRANCH_TRACK_REMOTE:
+               /* Default for "git branch". Do not pass --track. */
+               break;
+       }
+
+       strvec_pushl(&child.args, name, start_oid, tracking_name, NULL);
+
+       if ((ret = start_command(&child)))
+               return ret;
+       ret = finish_command(&child);
+       strbuf_read(&child_err, child.err, 0);
+       strbuf_add_lines(&out_buf, out_prefix, child_err.buf, child_err.len);
+
+       if (ret)
+               fprintf(stderr, "%s", out_buf.buf);
+       else
+               printf("%s", out_buf.buf);
+
+       strbuf_release(&child_err);
+       strbuf_release(&out_buf);
+       return ret;
+}
+
+void create_branches_recursively(struct repository *r, const char *name,
+                                const char *start_commitish,
+                                const char *tracking_name, int force,
+                                int reflog, int quiet, enum branch_track track,
+                                int dry_run)
+{
+       int i = 0;
+       char *branch_point = NULL;
+       struct object_id super_oid;
+       struct submodule_entry_list submodule_entry_list;
+
+       /* Perform dwim on start_commitish to get super_oid and branch_point. */
+       dwim_branch_start(r, start_commitish, BRANCH_TRACK_NEVER,
+                         &branch_point, &super_oid);
+
+       /*
+        * If we were not given an explicit name to track, then assume we are at
+        * the top level and, just like the non-recursive case, the tracking
+        * name is the branch point.
+        */
+       if (!tracking_name)
+               tracking_name = branch_point;
+
+       submodules_of_tree(r, &super_oid, &submodule_entry_list);
+       /*
+        * Before creating any branches, first check that the branch can
+        * be created in every submodule.
+        */
+       for (i = 0; i < submodule_entry_list.entry_nr; i++) {
+               if (submodule_entry_list.entries[i].repo == NULL) {
+                       int code = die_message(
+                               _("submodule '%s': unable to find submodule"),
+                               submodule_entry_list.entries[i].submodule->name);
+                       if (advice_enabled(ADVICE_SUBMODULES_NOT_UPDATED))
+                               advise(_("You may try updating the submodules using 'git checkout %s && git submodule update --init'"),
+                                      start_commitish);
+                       exit(code);
+               }
+
+               if (submodule_create_branch(
+                           submodule_entry_list.entries[i].repo,
+                           submodule_entry_list.entries[i].submodule, name,
+                           oid_to_hex(&submodule_entry_list.entries[i]
+                                               .name_entry->oid),
+                           tracking_name, force, reflog, quiet, track, 1))
+                       die(_("submodule '%s': cannot create branch '%s'"),
+                           submodule_entry_list.entries[i].submodule->name,
+                           name);
+       }
+
+       create_branch(the_repository, name, start_commitish, force, 0, reflog, quiet,
+                     BRANCH_TRACK_NEVER, dry_run);
+       if (dry_run)
+               return;
+       /*
+        * NEEDSWORK If tracking was set up in the superproject but not the
+        * submodule, users might expect "git branch --recurse-submodules" to
+        * fail or give a warning, but this is not yet implemented because it is
+        * tedious to determine whether or not tracking was set up in the
+        * superproject.
+        */
+       if (track)
+               setup_tracking(name, tracking_name, track, quiet);
+
+       for (i = 0; i < submodule_entry_list.entry_nr; i++) {
+               if (submodule_create_branch(
+                           submodule_entry_list.entries[i].repo,
+                           submodule_entry_list.entries[i].submodule, name,
+                           oid_to_hex(&submodule_entry_list.entries[i]
+                                               .name_entry->oid),
+                           tracking_name, force, reflog, quiet, track, 0))
+                       die(_("submodule '%s': cannot create branch '%s'"),
+                           submodule_entry_list.entries[i].submodule->name,
+                           name);
+               repo_clear(submodule_entry_list.entries[i].repo);
+       }
+}
+
 void remove_merge_branch_state(struct repository *r)
 {
        unlink(git_path_merge_head(r));
index 815dcd40c0761104eba38215d04232e7f601ab1d..04df2aa5b515e9e9372d6db75ff09ebe017ffffe 100644 (file)
--- a/branch.h
+++ b/branch.h
@@ -18,6 +18,28 @@ extern enum branch_track git_branch_track;
 
 /* Functions for acting on the information about branches. */
 
+/**
+ * Sets branch.<new_ref>.{remote,merge} config settings such that
+ * new_ref tracks orig_ref according to the specified tracking mode.
+ *
+ *   - new_ref is the name of the branch that we are setting tracking
+ *     for.
+ *
+ *   - orig_ref is the name of the ref that is 'upstream' of new_ref.
+ *     orig_ref will be expanded with DWIM so that the config settings
+ *     are in the correct format e.g. "refs/remotes/origin/main" instead
+ *     of "origin/main".
+ *
+ *   - track is the tracking mode e.g. BRANCH_TRACK_REMOTE causes
+ *     new_ref to track orig_ref directly, whereas BRANCH_TRACK_INHERIT
+ *     causes new_ref to track whatever orig_ref tracks.
+ *
+ *   - quiet suppresses tracking information.
+ */
+void dwim_and_setup_tracking(struct repository *r, const char *new_ref,
+                            const char *orig_ref, enum branch_track track,
+                            int quiet);
+
 /*
  * Creates a new branch, where:
  *
@@ -30,8 +52,8 @@ extern enum branch_track git_branch_track;
  *
  *   - force enables overwriting an existing (non-head) branch
  *
- *   - clobber_head_ok allows the currently checked out (hence existing)
- *     branch to be overwritten; without 'force', it has no effect.
+ *   - clobber_head_ok, when enabled with 'force', allows the currently
+ *     checked out (head) branch to be overwritten
  *
  *   - reflog creates a reflog for the branch
  *
@@ -40,12 +62,44 @@ extern enum branch_track git_branch_track;
  *   - track causes the new branch to be configured to merge the remote branch
  *     that start_name is a tracking branch for (if any).
  *
+ *   - dry_run causes the branch to be validated but not created.
+ *
  */
 void create_branch(struct repository *r,
                   const char *name, const char *start_name,
                   int force, int clobber_head_ok,
-                  int reflog, int quiet, enum branch_track track);
+                  int reflog, int quiet, enum branch_track track,
+                  int dry_run);
 
+/*
+ * Creates a new branch in a repository and its submodules (and its
+ * submodules, recursively). The parameters are mostly analogous to
+ * those of create_branch() except for start_name, which is represented
+ * by two different parameters:
+ *
+ * - start_commitish is the commit-ish, in repository r, that determines
+ *   which commits the branches will point to. The superproject branch
+ *   will point to the commit of start_commitish and the submodule
+ *   branches will point to the gitlink commit oids in start_commitish's
+ *   tree.
+ *
+ * - tracking_name is the name of the ref, in repository r, that will be
+ *   used to set up tracking information. This value is propagated to
+ *   all submodules, which will evaluate the ref using their own ref
+ *   stores. If NULL, this defaults to start_commitish.
+ *
+ * When this function is called on the superproject, start_commitish
+ * can be any user-provided ref and tracking_name can be NULL (similar
+ * to create_branches()). But when recursing through submodules,
+ * start_commitish is the plain gitlink commit oid. Since the oid cannot
+ * be used for tracking information, tracking_name is propagated and
+ * used for tracking instead.
+ */
+void create_branches_recursively(struct repository *r, const char *name,
+                                const char *start_commitish,
+                                const char *tracking_name, int force,
+                                int reflog, int quiet, enum branch_track track,
+                                int dry_run);
 /*
  * Check if 'name' can be a valid name for a branch; die otherwise.
  * Return 1 if the named branch already exists; return 0 otherwise.
index 8a58743ed63d039f762f56c18f5c6e6debe0faba..40e9ecc8485324a40e142d5cbc9345a22e45f333 100644 (file)
--- a/builtin.h
+++ b/builtin.h
@@ -159,11 +159,13 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix);
 int cmd_for_each_repo(int argc, const char **argv, const char *prefix);
 int cmd_format_patch(int argc, const char **argv, const char *prefix);
 int cmd_fsck(int argc, const char **argv, const char *prefix);
+int cmd_fsmonitor__daemon(int argc, const char **argv, const char *prefix);
 int cmd_gc(int argc, const char **argv, const char *prefix);
 int cmd_get_tar_commit_id(int argc, const char **argv, const char *prefix);
 int cmd_grep(int argc, const char **argv, const char *prefix);
 int cmd_hash_object(int argc, const char **argv, const char *prefix);
 int cmd_help(int argc, const char **argv, const char *prefix);
+int cmd_hook(int argc, const char **argv, const char *prefix);
 int cmd_index_pack(int argc, const char **argv, const char *prefix);
 int cmd_init_db(int argc, const char **argv, const char *prefix);
 int cmd_interpret_trailers(int argc, const char **argv, const char *prefix);
index 84dff3e796918ada3777fd7c01114ff5c9521fec..3ffb86a43384f21cad4fdcc0d8549e37dba12227 100644 (file)
@@ -32,7 +32,6 @@ static int add_renormalize;
 static int pathspec_file_nul;
 static int include_sparse;
 static const char *pathspec_from_file;
-static int legacy_stash_p; /* support for the scripted `git stash` */
 
 struct update_callback_data {
        int flags;
@@ -388,8 +387,6 @@ static struct option builtin_add_options[] = {
                   N_("override the executable bit of the listed files")),
        OPT_HIDDEN_BOOL(0, "warn-embedded-repo", &warn_on_embedded_repo,
                        N_("warn when adding an embedded repository")),
-       OPT_HIDDEN_BOOL(0, "legacy-stash-p", &legacy_stash_p,
-                       N_("backend for `git stash -p`")),
        OPT_PATHSPEC_FROM_FILE(&pathspec_from_file),
        OPT_PATHSPEC_FILE_NUL(&pathspec_file_nul),
        OPT_END(),
@@ -512,17 +509,6 @@ int cmd_add(int argc, const char **argv, const char *prefix)
                        die(_("options '%s' and '%s' cannot be used together"), "--pathspec-from-file", "--interactive/--patch");
                exit(interactive_add(argv + 1, prefix, patch_interactive));
        }
-       if (legacy_stash_p) {
-               struct pathspec pathspec;
-
-               parse_pathspec(&pathspec, 0,
-                       PATHSPEC_PREFER_FULL |
-                       PATHSPEC_SYMLINK_LEADING_PATH |
-                       PATHSPEC_PREFIX_ORIGIN,
-                       prefix, argv);
-
-               return run_add_interactive(NULL, "--patch=stash", &pathspec);
-       }
 
        if (edit_interactive) {
                if (pathspec_from_file)
index b6be1f1cb11e47dcb1012e1afe60fbae654f25cd..0f4111bafa0b0887ae29903509a0af7447ab13ff 100644 (file)
@@ -34,6 +34,7 @@
 #include "string-list.h"
 #include "packfile.h"
 #include "repository.h"
+#include "pretty.h"
 
 /**
  * Returns the length of the first line of msg.
@@ -199,7 +200,7 @@ static int am_option_parse_empty(const struct option *opt,
        else if (!strcmp(arg, "keep"))
                *opt_value = KEEP_EMPTY_COMMIT;
        else
-               return error(_("Invalid value for --empty: %s"), arg);
+               return error(_("invalid value for '%s': '%s'"), "--empty", arg);
 
        return 0;
 }
@@ -474,7 +475,7 @@ static int run_applypatch_msg_hook(struct am_state *state)
        int ret;
 
        assert(state->msg);
-       ret = run_hook_le(NULL, "applypatch-msg", am_path(state, "final-commit"), NULL);
+       ret = run_hooks_l("applypatch-msg", am_path(state, "final-commit"), NULL);
 
        if (!ret) {
                FREE_AND_NULL(state->msg);
@@ -1636,7 +1637,7 @@ static void do_commit(const struct am_state *state)
        const char *reflog_msg, *author, *committer = NULL;
        struct strbuf sb = STRBUF_INIT;
 
-       if (run_hook_le(NULL, "pre-applypatch", NULL))
+       if (run_hooks("pre-applypatch"))
                exit(1);
 
        if (write_cache_as_tree(&tree, 0, NULL))
@@ -1688,7 +1689,7 @@ static void do_commit(const struct am_state *state)
                fclose(fp);
        }
 
-       run_hook_le(NULL, "post-applypatch", NULL);
+       run_hooks("post-applypatch");
 
        strbuf_release(&sb);
 }
@@ -2239,7 +2240,8 @@ static int parse_opt_patchformat(const struct option *opt, const char *arg, int
         * when you add new options
         */
        else
-               return error(_("Invalid value for --patch-format: %s"), arg);
+               return error(_("invalid value for '%s': '%s'"),
+                            "--patch-format", arg);
        return 0;
 }
 
@@ -2282,7 +2284,8 @@ static int parse_opt_show_current_patch(const struct option *opt, const char *ar
                                break;
                }
                if (new_value >= ARRAY_SIZE(valid_modes))
-                       return error(_("Invalid value for --show-current-patch: %s"), arg);
+                       return error(_("invalid value for '%s': '%s'"),
+                                    "--show-current-patch", arg);
        }
 
        if (resume->mode == RESUME_SHOW_PATCH && new_value != resume->sub_mode)
index 28a2e6a5750b737d18412cde48394b73e9a74c30..8b2b259ff0d11ebf6d28765b2a926a5efb1b644e 100644 (file)
@@ -22,15 +22,15 @@ static GIT_PATH_FUNC(git_path_bisect_run, "BISECT_RUN")
 
 static const char * const git_bisect_helper_usage[] = {
        N_("git bisect--helper --bisect-reset [<commit>]"),
-       N_("git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --term-new]"),
+       "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --term-new]",
        N_("git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}=<term>]"
                                            " [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] [<paths>...]"),
-       N_("git bisect--helper --bisect-next"),
+       "git bisect--helper --bisect-next",
        N_("git bisect--helper --bisect-state (bad|new) [<rev>]"),
        N_("git bisect--helper --bisect-state (good|old) [<rev>...]"),
        N_("git bisect--helper --bisect-replay <filename>"),
        N_("git bisect--helper --bisect-skip [(<rev>|<range>)...]"),
-       N_("git bisect--helper --bisect-visualize"),
+       "git bisect--helper --bisect-visualize",
        N_("git bisect--helper --bisect-run <cmd>..."),
        NULL
 };
@@ -1089,14 +1089,52 @@ static int bisect_visualize(struct bisect_terms *terms, const char **argv, int a
        return res;
 }
 
+static int get_first_good(const char *refname, const struct object_id *oid,
+                         int flag, void *cb_data)
+{
+       oidcpy(cb_data, oid);
+       return 1;
+}
+
+static int verify_good(const struct bisect_terms *terms,
+                      const char **quoted_argv)
+{
+       int rc;
+       enum bisect_error res;
+       struct object_id good_rev;
+       struct object_id current_rev;
+       char *good_glob = xstrfmt("%s-*", terms->term_good);
+       int no_checkout = ref_exists("BISECT_HEAD");
+
+       for_each_glob_ref_in(get_first_good, good_glob, "refs/bisect/",
+                            &good_rev);
+       free(good_glob);
+
+       if (read_ref(no_checkout ? "BISECT_HEAD" : "HEAD", &current_rev))
+               return -1;
+
+       res = bisect_checkout(&good_rev, no_checkout);
+       if (res != BISECT_OK)
+               return -1;
+
+       printf(_("running %s\n"), quoted_argv[0]);
+       rc = run_command_v_opt(quoted_argv, RUN_USING_SHELL);
+
+       res = bisect_checkout(&current_rev, no_checkout);
+       if (res != BISECT_OK)
+               return -1;
+
+       return rc;
+}
+
 static int bisect_run(struct bisect_terms *terms, const char **argv, int argc)
 {
        int res = BISECT_OK;
        struct strbuf command = STRBUF_INIT;
-       struct strvec args = STRVEC_INIT;
        struct strvec run_args = STRVEC_INIT;
        const char *new_state;
        int temporary_stdout_fd, saved_stdout;
+       int is_first_run = 1;
 
        if (bisect_next_check(terms, NULL))
                return BISECT_FAILED;
@@ -1111,16 +1149,37 @@ static int bisect_run(struct bisect_terms *terms, const char **argv, int argc)
        strvec_push(&run_args, command.buf);
 
        while (1) {
-               strvec_clear(&args);
-
                printf(_("running %s\n"), command.buf);
                res = run_command_v_opt(run_args.v, RUN_USING_SHELL);
 
+               /*
+                * Exit code 126 and 127 can either come from the shell
+                * if it was unable to execute or even find the script,
+                * or from the script itself.  Check with a known-good
+                * revision to avoid trashing the bisect run due to a
+                * missing or non-executable script.
+                */
+               if (is_first_run && (res == 126 || res == 127)) {
+                       int rc = verify_good(terms, run_args.v);
+                       is_first_run = 0;
+                       if (rc < 0) {
+                               error(_("unable to verify '%s' on good"
+                                       " revision"), command.buf);
+                               res = BISECT_FAILED;
+                               break;
+                       }
+                       if (rc == res) {
+                               error(_("bogus exit code %d for good revision"),
+                                     rc);
+                               res = BISECT_FAILED;
+                               break;
+                       }
+               }
+
                if (res < 0 || 128 <= res) {
                        error(_("bisect run failed: exit code %d from"
                                " '%s' is < 0 or >= 128"), res, command.buf);
-                       strbuf_release(&command);
-                       return res;
+                       break;
                }
 
                if (res == 125)
@@ -1132,8 +1191,10 @@ static int bisect_run(struct bisect_terms *terms, const char **argv, int argc)
 
                temporary_stdout_fd = open(git_path_bisect_run(), O_CREAT | O_WRONLY | O_TRUNC, 0666);
 
-               if (temporary_stdout_fd < 0)
-                       return error_errno(_("cannot open file '%s' for writing"), git_path_bisect_run());
+               if (temporary_stdout_fd < 0) {
+                       res = error_errno(_("cannot open file '%s' for writing"), git_path_bisect_run());
+                       break;
+               }
 
                fflush(stdout);
                saved_stdout = dup(1);
@@ -1158,16 +1219,16 @@ static int bisect_run(struct bisect_terms *terms, const char **argv, int argc)
                        res = BISECT_OK;
                } else if (res) {
                        error(_("bisect run failed: 'git bisect--helper --bisect-state"
-                       " %s' exited with error code %d"), args.v[0], res);
+                       " %s' exited with error code %d"), new_state, res);
                } else {
                        continue;
                }
-
-               strbuf_release(&command);
-               strvec_clear(&args);
-               strvec_clear(&run_args);
-               return res;
+               break;
        }
+
+       strbuf_release(&command);
+       strvec_clear(&run_args);
+       return res;
 }
 
 int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
@@ -1209,7 +1270,7 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
                OPT_CMDMODE(0, "bisect-visualize", &cmdmode,
                         N_("visualize the bisection"), BISECT_VISUALIZE),
                OPT_CMDMODE(0, "bisect-run", &cmdmode,
-                        N_("use <cmd>... to automatically bisect."), BISECT_RUN),
+                        N_("use <cmd>... to automatically bisect"), BISECT_RUN),
                OPT_BOOL(0, "no-log", &nolog,
                         N_("no log for BISECT_WRITE")),
                OPT_END()
index 7fafeac408141bb89e5c69512c3a7f174729e4dd..8d15b68afc9da3ffe0e1bce952e1e0fe72afd428 100644 (file)
@@ -721,8 +721,8 @@ static int git_blame_config(const char *var, const char *value, void *cb)
        }
        if (!strcmp(var, "color.blame.repeatedlines")) {
                if (color_parse_mem(value, strlen(value), repeated_meta_color))
-                       warning(_("invalid color '%s' in color.blame.repeatedLines"),
-                               value);
+                       warning(_("invalid value for '%s': '%s'"),
+                               "color.blame.repeatedLines", value);
                return 0;
        }
        if (!strcmp(var, "color.blame.highlightrecent")) {
@@ -739,7 +739,8 @@ static int git_blame_config(const char *var, const char *value, void *cb)
                        coloring_mode &= ~(OUTPUT_COLOR_LINE |
                                            OUTPUT_SHOW_AGE_WITH_COLOR);
                } else {
-                       warning(_("invalid value for blame.coloring"));
+                       warning(_("invalid value for '%s': '%s'"),
+                               "blame.coloring", value);
                        return 0;
                }
        }
@@ -934,6 +935,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
                parse_revision_opt(&revs, &ctx, options, blame_opt_usage);
        }
 parse_done:
+       revision_opts_finish(&revs);
        no_whole_file_rename = !revs.diffopt.flags.follow_renames;
        xdl_opts |= revs.diffopt.xdl_opts & XDF_INDENT_HEURISTIC;
        revs.diffopt.flags.follow_renames = 0;
index 4ce2a247542ba07012a954dacd7ed2c5284e61d1..5d00d0b8d327c5cc048ac0baf997e3670d5ff3df 100644 (file)
@@ -27,7 +27,8 @@
 
 static const char * const builtin_branch_usage[] = {
        N_("git branch [<options>] [-r | -a] [--merged] [--no-merged]"),
-       N_("git branch [<options>] [-l] [-f] <branch-name> [<start-point>]"),
+       N_("git branch [<options>] [-f] [--recurse-submodules] <branch-name> [<start-point>]"),
+       N_("git branch [<options>] [-l] [<pattern>...]"),
        N_("git branch [<options>] [-r] (-d | -D) <branch-name>..."),
        N_("git branch [<options>] (-m | -M) [<old-branch>] <new-branch>"),
        N_("git branch [<options>] (-c | -C) [<old-branch>] <new-branch>"),
@@ -38,6 +39,8 @@ static const char * const builtin_branch_usage[] = {
 
 static const char *head;
 static struct object_id head_oid;
+static int recurse_submodules = 0;
+static int submodule_propagate_branches = 0;
 
 static int branch_use_color = -1;
 static char branch_colors[][COLOR_MAXLEN] = {
@@ -99,6 +102,15 @@ static int git_branch_config(const char *var, const char *value, void *cb)
                        return config_error_nonbool(var);
                return color_parse(value, branch_colors[slot]);
        }
+       if (!strcmp(var, "submodule.recurse")) {
+               recurse_submodules = git_config_bool(var, value);
+               return 0;
+       }
+       if (!strcasecmp(var, "submodule.propagateBranches")) {
+               submodule_propagate_branches = git_config_bool(var, value);
+               return 0;
+       }
+
        return git_color_default_config(var, value, cb);
 }
 
@@ -621,14 +633,16 @@ static int edit_branch_description(const char *branch_name)
 
 int cmd_branch(int argc, const char **argv, const char *prefix)
 {
-       int delete = 0, rename = 0, copy = 0, force = 0, list = 0;
-       int show_current = 0;
-       int reflog = 0, edit_description = 0;
-       int quiet = 0, unset_upstream = 0;
+       /* possible actions */
+       int delete = 0, rename = 0, copy = 0, list = 0,
+           unset_upstream = 0, show_current = 0, edit_description = 0;
        const char *new_upstream = NULL;
+       int noncreate_actions = 0;
+       /* possible options */
+       int reflog = 0, quiet = 0, icase = 0, force = 0,
+           recurse_submodules_explicit = 0;
        enum branch_track track;
        struct ref_filter filter;
-       int icase = 0;
        static struct ref_sorting *sorting;
        struct string_list sorting_options = STRING_LIST_INIT_DUP;
        struct ref_format format = REF_FORMAT_INIT;
@@ -677,6 +691,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
                OPT_CALLBACK(0, "points-at", &filter.points_at, N_("object"),
                        N_("print only branches of the object"), parse_opt_object_name),
                OPT_BOOL('i', "ignore-case", &icase, N_("sorting and filtering are case insensitive")),
+               OPT_BOOL(0, "recurse-submodules", &recurse_submodules_explicit, N_("recurse through submodules")),
                OPT_STRING(  0 , "format", &format.format, N_("format"), N_("format to use for the output")),
                OPT_END(),
        };
@@ -713,10 +728,23 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
            filter.reachable_from || filter.unreachable_from || filter.points_at.nr)
                list = 1;
 
-       if (!!delete + !!rename + !!copy + !!new_upstream + !!show_current +
-           list + edit_description + unset_upstream > 1)
+       noncreate_actions = !!delete + !!rename + !!copy + !!new_upstream +
+                           !!show_current + !!list + !!edit_description +
+                           !!unset_upstream;
+       if (noncreate_actions > 1)
                usage_with_options(builtin_branch_usage, options);
 
+       if (recurse_submodules_explicit) {
+               if (!submodule_propagate_branches)
+                       die(_("branch with --recurse-submodules can only be used if submodule.propagateBranches is enabled"));
+               if (noncreate_actions)
+                       die(_("--recurse-submodules can only be used to create branches"));
+       }
+
+       recurse_submodules =
+               (recurse_submodules || recurse_submodules_explicit) &&
+               submodule_propagate_branches;
+
        if (filter.abbrev == -1)
                filter.abbrev = DEFAULT_ABBREV;
        filter.ignore_case = icase;
@@ -828,12 +856,9 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
                if (!ref_exists(branch->refname))
                        die(_("branch '%s' does not exist"), branch->name);
 
-               /*
-                * create_branch takes care of setting up the tracking
-                * info and making sure new_upstream is correct
-                */
-               create_branch(the_repository, branch->name, new_upstream,
-                             0, 0, 0, quiet, BRANCH_TRACK_OVERRIDE);
+               dwim_and_setup_tracking(the_repository, branch->name,
+                                       new_upstream, BRANCH_TRACK_OVERRIDE,
+                                       quiet);
        } else if (unset_upstream) {
                struct branch *branch = branch_get(argv[0]);
                struct strbuf buf = STRBUF_INIT;
@@ -857,7 +882,10 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
                strbuf_addf(&buf, "branch.%s.merge", branch->name);
                git_config_set_multivar(buf.buf, NULL, NULL, CONFIG_FLAGS_MULTI_REPLACE);
                strbuf_release(&buf);
-       } else if (argc > 0 && argc <= 2) {
+       } else if (!noncreate_actions && argc > 0 && argc <= 2) {
+               const char *branch_name = argv[0];
+               const char *start_name = argc == 2 ? argv[1] : head;
+
                if (filter.kind != FILTER_REFS_BRANCHES)
                        die(_("The -a, and -r, options to 'git branch' do not take a branch name.\n"
                                  "Did you mean to use: -a|-r --list <pattern>?"));
@@ -865,10 +893,14 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
                if (track == BRANCH_TRACK_OVERRIDE)
                        die(_("the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead."));
 
-               create_branch(the_repository,
-                             argv[0], (argc == 2) ? argv[1] : head,
-                             force, 0, reflog, quiet, track);
-
+               if (recurse_submodules) {
+                       create_branches_recursively(the_repository, branch_name,
+                                                   start_name, NULL, force,
+                                                   reflog, quiet, track, 0);
+                       return 0;
+               }
+               create_branch(the_repository, branch_name, start_name, force, 0,
+                             reflog, quiet, track, 0);
        } else
                usage_with_options(builtin_branch_usage, options);
 
index 5a85d7cd0fe48da00cd4d844576b29af7c3c9afc..2adad545a2e972221869703658e98be0c514d005 100644 (file)
@@ -93,6 +93,7 @@ static int cmd_bundle_create(int argc, const char **argv, const char *prefix) {
        if (!startup_info->have_repository)
                die(_("Need a repository to create a bundle."));
        ret = !!create_bundle(the_repository, bundle_file, argc, argv, &pack_opts, version);
+       strvec_clear(&pack_opts);
        free(bundle_file);
        return ret;
 }
index d94050e6c188ff4594a065da87695c67c560ac94..50cf38999d10125428e4c558383582af4f191b95 100644 (file)
 #include "object-store.h"
 #include "promisor-remote.h"
 
+enum batch_mode {
+       BATCH_MODE_CONTENTS,
+       BATCH_MODE_INFO,
+       BATCH_MODE_QUEUE_AND_DISPATCH,
+};
+
 struct batch_options {
        int enabled;
        int follow_symlinks;
-       int print_contents;
+       enum batch_mode batch_mode;
        int buffer_output;
        int all_objects;
        int unordered;
-       int cmdmode; /* may be 'w' or 'c' for --filters or --textconv */
+       int transform_mode; /* may be 'w' or 'c' for --filters or --textconv */
        const char *format;
 };
 
@@ -73,14 +79,17 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name,
        struct object_info oi = OBJECT_INFO_INIT;
        struct strbuf sb = STRBUF_INIT;
        unsigned flags = OBJECT_INFO_LOOKUP_REPLACE;
+       unsigned get_oid_flags = GET_OID_RECORD_PATH | GET_OID_ONLY_TO_DIE;
        const char *path = force_path;
+       const int opt_cw = (opt == 'c' || opt == 'w');
+       if (!path && opt_cw)
+               get_oid_flags |= GET_OID_REQUIRE_PATH;
 
        if (unknown_type)
                flags |= OBJECT_INFO_ALLOW_UNKNOWN_TYPE;
 
-       if (get_oid_with_context(the_repository, obj_name,
-                                GET_OID_RECORD_PATH,
-                                &oid, &obj_context))
+       if (get_oid_with_context(the_repository, obj_name, get_oid_flags, &oid,
+                                &obj_context))
                die("Not a valid object name %s", obj_name);
 
        if (!path)
@@ -112,9 +121,6 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name,
                return !has_object_file(&oid);
 
        case 'w':
-               if (!path)
-                       die("git cat-file --filters %s: <object> must be "
-                           "<sha1:path>", obj_name);
 
                if (filter_object(path, obj_context.mode,
                                  &oid, &buf, &size))
@@ -122,10 +128,6 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name,
                break;
 
        case 'c':
-               if (!path)
-                       die("git cat-file --textconv %s: <object> must be <sha1:path>",
-                           obj_name);
-
                if (textconv_object(the_repository, path, obj_context.mode,
                                    &oid, 1, &buf, &size))
                        break;
@@ -154,7 +156,10 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name,
                break;
 
        case 0:
-               if (type_from_string(exp_type) == OBJ_BLOB) {
+       {
+               enum object_type exp_type_id = type_from_string(exp_type);
+
+               if (exp_type_id == OBJ_BLOB) {
                        struct object_id blob_oid;
                        if (oid_object_info(the_repository, &oid, NULL) == OBJ_TAG) {
                                char *buffer = read_object_file(&oid, &type,
@@ -176,10 +181,10 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name,
                         * fall-back to the usual case.
                         */
                }
-               buf = read_object_with_reference(the_repository,
-                                                &oid, exp_type, &size, NULL);
+               buf = read_object_with_reference(the_repository, &oid,
+                                                exp_type_id, &size, NULL);
                break;
-
+       }
        default:
                die("git cat-file: unknown option: %s", exp_type);
        }
@@ -306,19 +311,19 @@ static void print_object_or_die(struct batch_options *opt, struct expand_data *d
        if (data->type == OBJ_BLOB) {
                if (opt->buffer_output)
                        fflush(stdout);
-               if (opt->cmdmode) {
+               if (opt->transform_mode) {
                        char *contents;
                        unsigned long size;
 
                        if (!data->rest)
                                die("missing path for '%s'", oid_to_hex(oid));
 
-                       if (opt->cmdmode == 'w') {
+                       if (opt->transform_mode == 'w') {
                                if (filter_object(data->rest, 0100644, oid,
                                                  &contents, &size))
                                        die("could not convert '%s' %s",
                                            oid_to_hex(oid), data->rest);
-                       } else if (opt->cmdmode == 'c') {
+                       } else if (opt->transform_mode == 'c') {
                                enum object_type type;
                                if (!textconv_object(the_repository,
                                                     data->rest, 0100644, oid,
@@ -330,7 +335,7 @@ static void print_object_or_die(struct batch_options *opt, struct expand_data *d
                                        die("could not convert '%s' %s",
                                            oid_to_hex(oid), data->rest);
                        } else
-                               BUG("invalid cmdmode: %c", opt->cmdmode);
+                               BUG("invalid transform_mode: %c", opt->transform_mode);
                        batch_write(opt, contents, size);
                        free(contents);
                } else {
@@ -355,6 +360,13 @@ static void print_object_or_die(struct batch_options *opt, struct expand_data *d
        }
 }
 
+static void print_default_format(struct strbuf *scratch, struct expand_data *data)
+{
+       strbuf_addf(scratch, "%s %s %"PRIuMAX"\n", oid_to_hex(&data->oid),
+                   type_name(data->type),
+                   (uintmax_t)data->size);
+}
+
 /*
  * If "pack" is non-NULL, then "offset" is the byte offset within the pack from
  * which the object may be accessed (though note that we may also rely on
@@ -386,11 +398,17 @@ static void batch_object_write(const char *obj_name,
        }
 
        strbuf_reset(scratch);
-       strbuf_expand(scratch, opt->format, expand_format, data);
-       strbuf_addch(scratch, '\n');
+
+       if (!opt->format) {
+               print_default_format(scratch, data);
+       } else {
+               strbuf_expand(scratch, opt->format, expand_format, data);
+               strbuf_addch(scratch, '\n');
+       }
+
        batch_write(opt, scratch->buf, scratch->len);
 
-       if (opt->print_contents) {
+       if (opt->batch_mode == BATCH_MODE_CONTENTS) {
                print_object_or_die(opt, data);
                batch_write(opt, "\n", 1);
        }
@@ -512,6 +530,137 @@ static int batch_unordered_packed(const struct object_id *oid,
                                      data);
 }
 
+typedef void (*parse_cmd_fn_t)(struct batch_options *, const char *,
+                              struct strbuf *, struct expand_data *);
+
+struct queued_cmd {
+       parse_cmd_fn_t fn;
+       char *line;
+};
+
+static void parse_cmd_contents(struct batch_options *opt,
+                            const char *line,
+                            struct strbuf *output,
+                            struct expand_data *data)
+{
+       opt->batch_mode = BATCH_MODE_CONTENTS;
+       batch_one_object(line, output, opt, data);
+}
+
+static void parse_cmd_info(struct batch_options *opt,
+                          const char *line,
+                          struct strbuf *output,
+                          struct expand_data *data)
+{
+       opt->batch_mode = BATCH_MODE_INFO;
+       batch_one_object(line, output, opt, data);
+}
+
+static void dispatch_calls(struct batch_options *opt,
+               struct strbuf *output,
+               struct expand_data *data,
+               struct queued_cmd *cmd,
+               int nr)
+{
+       int i;
+
+       if (!opt->buffer_output)
+               die(_("flush is only for --buffer mode"));
+
+       for (i = 0; i < nr; i++)
+               cmd[i].fn(opt, cmd[i].line, output, data);
+
+       fflush(stdout);
+}
+
+static void free_cmds(struct queued_cmd *cmd, size_t *nr)
+{
+       size_t i;
+
+       for (i = 0; i < *nr; i++)
+               FREE_AND_NULL(cmd[i].line);
+
+       *nr = 0;
+}
+
+
+static const struct parse_cmd {
+       const char *name;
+       parse_cmd_fn_t fn;
+       unsigned takes_args;
+} commands[] = {
+       { "contents", parse_cmd_contents, 1},
+       { "info", parse_cmd_info, 1},
+       { "flush", NULL, 0},
+};
+
+static void batch_objects_command(struct batch_options *opt,
+                                   struct strbuf *output,
+                                   struct expand_data *data)
+{
+       struct strbuf input = STRBUF_INIT;
+       struct queued_cmd *queued_cmd = NULL;
+       size_t alloc = 0, nr = 0;
+
+       while (!strbuf_getline(&input, stdin)) {
+               int i;
+               const struct parse_cmd *cmd = NULL;
+               const char *p = NULL, *cmd_end;
+               struct queued_cmd call = {0};
+
+               if (!input.len)
+                       die(_("empty command in input"));
+               if (isspace(*input.buf))
+                       die(_("whitespace before command: '%s'"), input.buf);
+
+               for (i = 0; i < ARRAY_SIZE(commands); i++) {
+                       if (!skip_prefix(input.buf, commands[i].name, &cmd_end))
+                               continue;
+
+                       cmd = &commands[i];
+                       if (cmd->takes_args) {
+                               if (*cmd_end != ' ')
+                                       die(_("%s requires arguments"),
+                                           commands[i].name);
+
+                               p = cmd_end + 1;
+                       } else if (*cmd_end) {
+                               die(_("%s takes no arguments"),
+                                   commands[i].name);
+                       }
+
+                       break;
+               }
+
+               if (!cmd)
+                       die(_("unknown command: '%s'"), input.buf);
+
+               if (!strcmp(cmd->name, "flush")) {
+                       dispatch_calls(opt, output, data, queued_cmd, nr);
+                       free_cmds(queued_cmd, &nr);
+               } else if (!opt->buffer_output) {
+                       cmd->fn(opt, p, output, data);
+               } else {
+                       ALLOC_GROW(queued_cmd, nr + 1, alloc);
+                       call.fn = cmd->fn;
+                       call.line = xstrdup_or_null(p);
+                       queued_cmd[nr++] = call;
+               }
+       }
+
+       if (opt->buffer_output &&
+           nr &&
+           !git_env_bool("GIT_TEST_CAT_FILE_NO_FLUSH_ON_EXIT", 0)) {
+               dispatch_calls(opt, output, data, queued_cmd, nr);
+               free_cmds(queued_cmd, &nr);
+       }
+
+       free(queued_cmd);
+       strbuf_release(&input);
+}
+
+#define DEFAULT_FORMAT "%(objectname) %(objecttype) %(objectsize)"
+
 static int batch_objects(struct batch_options *opt)
 {
        struct strbuf input = STRBUF_INIT;
@@ -520,9 +669,6 @@ static int batch_objects(struct batch_options *opt)
        int save_warning;
        int retval = 0;
 
-       if (!opt->format)
-               opt->format = "%(objectname) %(objecttype) %(objectsize)";
-
        /*
         * Expand once with our special mark_query flag, which will prime the
         * object_info to be handed to oid_object_info_extended for each
@@ -530,17 +676,22 @@ static int batch_objects(struct batch_options *opt)
         */
        memset(&data, 0, sizeof(data));
        data.mark_query = 1;
-       strbuf_expand(&output, opt->format, expand_format, &data);
+       strbuf_expand(&output,
+                     opt->format ? opt->format : DEFAULT_FORMAT,
+                     expand_format,
+                     &data);
        data.mark_query = 0;
        strbuf_release(&output);
-       if (opt->cmdmode)
+       if (opt->transform_mode)
                data.split_on_whitespace = 1;
 
+       if (opt->format && !strcmp(opt->format, DEFAULT_FORMAT))
+               opt->format = NULL;
        /*
         * If we are printing out the object, then always fill in the type,
         * since we will want to decide whether or not to stream.
         */
-       if (opt->print_contents)
+       if (opt->batch_mode == BATCH_MODE_CONTENTS)
                data.info.typep = &data.type;
 
        if (opt->all_objects) {
@@ -594,6 +745,11 @@ static int batch_objects(struct batch_options *opt)
        save_warning = warn_on_object_refname_ambiguity;
        warn_on_object_refname_ambiguity = 0;
 
+       if (opt->batch_mode == BATCH_MODE_QUEUE_AND_DISPATCH) {
+               batch_objects_command(opt, &output, &data);
+               goto cleanup;
+       }
+
        while (strbuf_getline(&input, stdin) != EOF) {
                if (data.split_on_whitespace) {
                        /*
@@ -612,18 +768,13 @@ static int batch_objects(struct batch_options *opt)
                batch_one_object(input.buf, &output, opt, &data);
        }
 
+ cleanup:
        strbuf_release(&input);
        strbuf_release(&output);
        warn_on_object_refname_ambiguity = save_warning;
        return retval;
 }
 
-static const char * const cat_file_usage[] = {
-       N_("git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -p | <type> | --textconv | --filters) [--path=<path>] <object>"),
-       N_("git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-symlinks] [--textconv | --filters]"),
-       NULL
-};
-
 static int git_cat_file_config(const char *var, const char *value, void *cb)
 {
        if (userdiff_config(var, value) < 0)
@@ -645,7 +796,16 @@ static int batch_option_callback(const struct option *opt,
        }
 
        bo->enabled = 1;
-       bo->print_contents = !strcmp(opt->long_name, "batch");
+
+       if (!strcmp(opt->long_name, "batch"))
+               bo->batch_mode = BATCH_MODE_CONTENTS;
+       else if (!strcmp(opt->long_name, "batch-check"))
+               bo->batch_mode = BATCH_MODE_INFO;
+       else if (!strcmp(opt->long_name, "batch-command"))
+               bo->batch_mode = BATCH_MODE_QUEUE_AND_DISPATCH;
+       else
+               BUG("%s given to batch-option-callback", opt->long_name);
+
        bo->format = arg;
 
        return 0;
@@ -654,90 +814,142 @@ static int batch_option_callback(const struct option *opt,
 int cmd_cat_file(int argc, const char **argv, const char *prefix)
 {
        int opt = 0;
+       int opt_cw = 0;
+       int opt_epts = 0;
        const char *exp_type = NULL, *obj_name = NULL;
        struct batch_options batch = {0};
        int unknown_type = 0;
 
+       const char * const usage[] = {
+               N_("git cat-file <type> <object>"),
+               N_("git cat-file (-e | -p) <object>"),
+               N_("git cat-file (-t | -s) [--allow-unknown-type] <object>"),
+               N_("git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]\n"
+                  "             [--buffer] [--follow-symlinks] [--unordered]\n"
+                  "             [--textconv | --filters]"),
+               N_("git cat-file (--textconv | --filters)\n"
+                  "             [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]"),
+               NULL
+       };
        const struct option options[] = {
-               OPT_GROUP(N_("<type> can be one of: blob, tree, commit, tag")),
-               OPT_CMDMODE('t', NULL, &opt, N_("show object type"), 't'),
-               OPT_CMDMODE('s', NULL, &opt, N_("show object size"), 's'),
+               /* Simple queries */
+               OPT_GROUP(N_("Check object existence or emit object contents")),
                OPT_CMDMODE('e', NULL, &opt,
-                           N_("exit with zero when there's no error"), 'e'),
-               OPT_CMDMODE('p', NULL, &opt, N_("pretty-print object's content"), 'p'),
-               OPT_CMDMODE(0, "textconv", &opt,
-                           N_("for blob objects, run textconv on object's content"), 'c'),
-               OPT_CMDMODE(0, "filters", &opt,
-                           N_("for blob objects, run filters on object's content"), 'w'),
-               OPT_STRING(0, "path", &force_path, N_("blob"),
-                          N_("use a specific path for --textconv/--filters")),
+                           N_("check if <object> exists"), 'e'),
+               OPT_CMDMODE('p', NULL, &opt, N_("pretty-print <object> content"), 'p'),
+
+               OPT_GROUP(N_("Emit [broken] object attributes")),
+               OPT_CMDMODE('t', NULL, &opt, N_("show object type (one of 'blob', 'tree', 'commit', 'tag', ...)"), 't'),
+               OPT_CMDMODE('s', NULL, &opt, N_("show object size"), 's'),
                OPT_BOOL(0, "allow-unknown-type", &unknown_type,
                          N_("allow -s and -t to work with broken/corrupt objects")),
-               OPT_BOOL(0, "buffer", &batch.buffer_output, N_("buffer --batch output")),
-               OPT_CALLBACK_F(0, "batch", &batch, "format",
-                       N_("show info and content of objects fed from the standard input"),
+               /* Batch mode */
+               OPT_GROUP(N_("Batch objects requested on stdin (or --batch-all-objects)")),
+               OPT_CALLBACK_F(0, "batch", &batch, N_("format"),
+                       N_("show full <object> or <rev> contents"),
+                       PARSE_OPT_OPTARG | PARSE_OPT_NONEG,
+                       batch_option_callback),
+               OPT_CALLBACK_F(0, "batch-check", &batch, N_("format"),
+                       N_("like --batch, but don't emit <contents>"),
                        PARSE_OPT_OPTARG | PARSE_OPT_NONEG,
                        batch_option_callback),
-               OPT_CALLBACK_F(0, "batch-check", &batch, "format",
-                       N_("show info about objects fed from the standard input"),
+               OPT_CALLBACK_F(0, "batch-command", &batch, N_("format"),
+                       N_("read commands from stdin"),
                        PARSE_OPT_OPTARG | PARSE_OPT_NONEG,
                        batch_option_callback),
+               OPT_CMDMODE(0, "batch-all-objects", &opt,
+                           N_("with --batch[-check]: ignores stdin, batches all known objects"), 'b'),
+               /* Batch-specific options */
+               OPT_GROUP(N_("Change or optimize batch output")),
+               OPT_BOOL(0, "buffer", &batch.buffer_output, N_("buffer --batch output")),
                OPT_BOOL(0, "follow-symlinks", &batch.follow_symlinks,
-                        N_("follow in-tree symlinks (used with --batch or --batch-check)")),
-               OPT_BOOL(0, "batch-all-objects", &batch.all_objects,
-                        N_("show all objects with --batch or --batch-check")),
+                        N_("follow in-tree symlinks")),
                OPT_BOOL(0, "unordered", &batch.unordered,
-                        N_("do not order --batch-all-objects output")),
+                        N_("do not order objects before emitting them")),
+               /* Textconv options, stand-ole*/
+               OPT_GROUP(N_("Emit object (blob or tree) with conversion or filter (stand-alone, or with batch)")),
+               OPT_CMDMODE(0, "textconv", &opt,
+                           N_("run textconv on object's content"), 'c'),
+               OPT_CMDMODE(0, "filters", &opt,
+                           N_("run filters on object's content"), 'w'),
+               OPT_STRING(0, "path", &force_path, N_("blob|tree"),
+                          N_("use a <path> for (--textconv | --filters); Not with 'batch'")),
                OPT_END()
        };
 
        git_config(git_cat_file_config, NULL);
 
        batch.buffer_output = -1;
-       argc = parse_options(argc, argv, prefix, options, cat_file_usage, 0);
-
-       if (opt) {
-               if (batch.enabled && (opt == 'c' || opt == 'w'))
-                       batch.cmdmode = opt;
-               else if (argc == 1)
-                       obj_name = argv[0];
-               else
-                       usage_with_options(cat_file_usage, options);
-       }
-       if (!opt && !batch.enabled) {
-               if (argc == 2) {
-                       exp_type = argv[0];
-                       obj_name = argv[1];
-               } else
-                       usage_with_options(cat_file_usage, options);
-       }
-       if (batch.enabled) {
-               if (batch.cmdmode != opt || argc)
-                       usage_with_options(cat_file_usage, options);
-               if (batch.cmdmode && batch.all_objects)
-                       die("--batch-all-objects cannot be combined with "
-                           "--textconv nor with --filters");
-       }
 
-       if ((batch.follow_symlinks || batch.all_objects) && !batch.enabled) {
-               usage_with_options(cat_file_usage, options);
-       }
+       argc = parse_options(argc, argv, prefix, options, usage, 0);
+       opt_cw = (opt == 'c' || opt == 'w');
+       opt_epts = (opt == 'e' || opt == 'p' || opt == 't' || opt == 's');
 
-       if (force_path && opt != 'c' && opt != 'w') {
-               error("--path=<path> needs --textconv or --filters");
-               usage_with_options(cat_file_usage, options);
-       }
+       /* --batch-all-objects? */
+       if (opt == 'b')
+               batch.all_objects = 1;
 
-       if (force_path && batch.enabled) {
-               error("options '--path=<path>' and '--batch' cannot be used together");
-               usage_with_options(cat_file_usage, options);
-       }
+       /* Option compatibility */
+       if (force_path && !opt_cw)
+               usage_msg_optf(_("'%s=<%s>' needs '%s' or '%s'"),
+                              usage, options,
+                              "--path", _("path|tree-ish"), "--filters",
+                              "--textconv");
 
+       /* Option compatibility with batch mode */
+       if (batch.enabled)
+               ;
+       else if (batch.follow_symlinks)
+               usage_msg_optf(_("'%s' requires a batch mode"), usage, options,
+                              "--follow-symlinks");
+       else if (batch.buffer_output >= 0)
+               usage_msg_optf(_("'%s' requires a batch mode"), usage, options,
+                              "--buffer");
+       else if (batch.all_objects)
+               usage_msg_optf(_("'%s' requires a batch mode"), usage, options,
+                              "--batch-all-objects");
+
+       /* Batch defaults */
        if (batch.buffer_output < 0)
                batch.buffer_output = batch.all_objects;
 
-       if (batch.enabled)
+       /* Return early if we're in batch mode? */
+       if (batch.enabled) {
+               if (opt_cw)
+                       batch.transform_mode = opt;
+               else if (opt && opt != 'b')
+                       usage_msg_optf(_("'-%c' is incompatible with batch mode"),
+                                      usage, options, opt);
+               else if (argc)
+                       usage_msg_opt(_("batch modes take no arguments"), usage,
+                                     options);
+
                return batch_objects(&batch);
+       }
+
+       if (opt) {
+               if (!argc && opt == 'c')
+                       usage_msg_optf(_("<rev> required with '%s'"),
+                                      usage, options, "--textconv");
+               else if (!argc && opt == 'w')
+                       usage_msg_optf(_("<rev> required with '%s'"),
+                                      usage, options, "--filters");
+               else if (!argc && opt_epts)
+                       usage_msg_optf(_("<object> required with '-%c'"),
+                                      usage, options, opt);
+               else if (argc == 1)
+                       obj_name = argv[0];
+               else
+                       usage_msg_opt(_("too many arguments"), usage, options);
+       } else if (!argc) {
+               usage_with_options(usage, options);
+       } else if (argc != 2) {
+               usage_msg_optf(_("only two arguments allowed in <type> <object> mode, not %d"),
+                             usage, options, argc);
+       } else if (argc) {
+               exp_type = argv[0];
+               obj_name = argv[1];
+       }
 
        if (unknown_type && opt != 't' && opt != 's')
                die("git cat-file --allow-unknown-type: use with -s or -t");
index e21620d964e5e89f7254dc4d99597d220fb3d650..97e06e8c52c012c918558cd73aa65d5750b8118b 100644 (file)
@@ -7,6 +7,7 @@
 #define USE_THE_INDEX_COMPATIBILITY_MACROS
 #include "builtin.h"
 #include "config.h"
+#include "dir.h"
 #include "lockfile.h"
 #include "quote.h"
 #include "cache-tree.h"
@@ -17,6 +18,7 @@
 #define CHECKOUT_ALL 4
 static int nul_term_line;
 static int checkout_stage; /* default to checkout stage0 */
+static int ignore_skip_worktree; /* default to 0 */
 static int to_tempfile;
 static char topath[4][TEMPORARY_FILENAME_LENGTH + 1];
 
@@ -65,6 +67,8 @@ static int checkout_file(const char *name, const char *prefix)
        int namelen = strlen(name);
        int pos = cache_name_pos(name, namelen);
        int has_same_name = 0;
+       int is_file = 0;
+       int is_skipped = 1;
        int did_checkout = 0;
        int errs = 0;
 
@@ -78,6 +82,12 @@ static int checkout_file(const char *name, const char *prefix)
                        break;
                has_same_name = 1;
                pos++;
+               if (S_ISSPARSEDIR(ce->ce_mode))
+                       break;
+               is_file = 1;
+               if (!ignore_skip_worktree && ce_skip_worktree(ce))
+                       break;
+               is_skipped = 0;
                if (ce_stage(ce) != checkout_stage
                    && (CHECKOUT_ALL != checkout_stage || !ce_stage(ce)))
                        continue;
@@ -106,6 +116,11 @@ static int checkout_file(const char *name, const char *prefix)
                fprintf(stderr, "git checkout-index: %s ", name);
                if (!has_same_name)
                        fprintf(stderr, "is not in the cache");
+               else if (!is_file)
+                       fprintf(stderr, "is a sparse directory");
+               else if (is_skipped)
+                       fprintf(stderr, "has skip-worktree enabled; "
+                                       "use '--ignore-skip-worktree-bits' to checkout");
                else if (checkout_stage)
                        fprintf(stderr, "does not exist at stage %d",
                                checkout_stage);
@@ -121,10 +136,27 @@ static int checkout_all(const char *prefix, int prefix_length)
        int i, errs = 0;
        struct cache_entry *last_ce = NULL;
 
-       /* TODO: audit for interaction with sparse-index. */
-       ensure_full_index(&the_index);
        for (i = 0; i < active_nr ; i++) {
                struct cache_entry *ce = active_cache[i];
+
+               if (S_ISSPARSEDIR(ce->ce_mode)) {
+                       if (!ce_skip_worktree(ce))
+                               BUG("sparse directory '%s' does not have skip-worktree set", ce->name);
+
+                       /*
+                        * If the current entry is a sparse directory and skip-worktree
+                        * entries are being checked out, expand the index and continue
+                        * the loop on the current index position (now pointing to the
+                        * first entry inside the expanded sparse directory).
+                        */
+                       if (ignore_skip_worktree) {
+                               ensure_full_index(&the_index);
+                               ce = active_cache[i];
+                       }
+               }
+
+               if (!ignore_skip_worktree && ce_skip_worktree(ce))
+                       continue;
                if (ce_stage(ce) != checkout_stage
                    && (CHECKOUT_ALL != checkout_stage || !ce_stage(ce)))
                        continue;
@@ -185,6 +217,8 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix)
        struct option builtin_checkout_index_options[] = {
                OPT_BOOL('a', "all", &all,
                        N_("check out all files in the index")),
+               OPT_BOOL(0, "ignore-skip-worktree-bits", &ignore_skip_worktree,
+                       N_("do not skip files with skip-worktree set")),
                OPT__FORCE(&force, N_("force overwrite of existing files"), 0),
                OPT__QUIET(&quiet,
                        N_("no warning for existing files and files not in index")),
@@ -212,6 +246,9 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix)
        git_config(git_default_config, NULL);
        prefix_length = prefix ? strlen(prefix) : 0;
 
+       prepare_repo_settings(the_repository);
+       the_repository->settings.command_requires_full_index = 0;
+
        if (read_cache() < 0) {
                die("invalid cache");
        }
index cc804ba8e1e6cdb8748eabc7e91575ac2ee53a4a..797681481d10b552e645237c99a8d9bff7df766a 100644 (file)
@@ -9,6 +9,7 @@
 #include "config.h"
 #include "diff.h"
 #include "dir.h"
+#include "hook.h"
 #include "ll-merge.h"
 #include "lockfile.h"
 #include "merge-recursive.h"
@@ -114,7 +115,7 @@ static void branch_info_release(struct branch_info *info)
 static int post_checkout_hook(struct commit *old_commit, struct commit *new_commit,
                              int changed)
 {
-       return run_hook_le(NULL, "post-checkout",
+       return run_hooks_l("post-checkout",
                           oid_to_hex(old_commit ? &old_commit->object.oid : null_oid()),
                           oid_to_hex(new_commit ? &new_commit->object.oid : null_oid()),
                           changed ? "1" : "0", NULL);
@@ -245,6 +246,7 @@ static int checkout_merged(int pos, const struct checkout *state,
        struct cache_entry *ce = active_cache[pos];
        const char *path = ce->name;
        mmfile_t ancestor, ours, theirs;
+       enum ll_merge_result merge_status;
        int status;
        struct object_id oid;
        mmbuffer_t result_buf;
@@ -275,13 +277,16 @@ static int checkout_merged(int pos, const struct checkout *state,
        memset(&ll_opts, 0, sizeof(ll_opts));
        git_config_get_bool("merge.renormalize", &renormalize);
        ll_opts.renormalize = renormalize;
-       status = ll_merge(&result_buf, path, &ancestor, "base",
-                         &ours, "ours", &theirs, "theirs",
-                         state->istate, &ll_opts);
+       merge_status = ll_merge(&result_buf, path, &ancestor, "base",
+                               &ours, "ours", &theirs, "theirs",
+                               state->istate, &ll_opts);
        free(ancestor.ptr);
        free(ours.ptr);
        free(theirs.ptr);
-       if (status < 0 || !result_buf.ptr) {
+       if (merge_status == LL_MERGE_BINARY_CONFLICT)
+               warning("Cannot merge binary files: %s (%s vs. %s)",
+                       path, "ours", "theirs");
+       if (merge_status < 0 || !result_buf.ptr) {
                free(result_buf.ptr);
                return error(_("path '%s': cannot merge"), path);
        }
@@ -298,7 +303,7 @@ static int checkout_merged(int pos, const struct checkout *state,
         * (it also writes the merge result to the object database even
         * when it may contain conflicts).
         */
-       if (write_object_file(result_buf.ptr, result_buf.size, blob_type, &oid))
+       if (write_object_file(result_buf.ptr, result_buf.size, OBJ_BLOB, &oid))
                die(_("Unable to add merge result for '%s'"), path);
        free(result_buf.ptr);
        ce = make_transient_cache_entry(mode, &oid, path, 2, ce_mem_pool);
@@ -733,6 +738,7 @@ static int merge_working_tree(const struct checkout_opts *opts,
                struct tree_desc trees[2];
                struct tree *tree;
                struct unpack_trees_options topts;
+               const struct object_id *old_commit_oid;
 
                memset(&topts, 0, sizeof(topts));
                topts.head_idx = -1;
@@ -760,9 +766,15 @@ static int merge_working_tree(const struct checkout_opts *opts,
                                       &new_branch_info->commit->object.oid :
                                       &new_branch_info->oid, NULL);
                topts.preserve_ignored = !opts->overwrite_ignore;
-               tree = parse_tree_indirect(old_branch_info->commit ?
-                                          &old_branch_info->commit->object.oid :
-                                          the_hash_algo->empty_tree);
+
+               old_commit_oid = old_branch_info->commit ?
+                       &old_branch_info->commit->object.oid :
+                       the_hash_algo->empty_tree;
+               tree = parse_tree_indirect(old_commit_oid);
+               if (!tree)
+                       die(_("unable to parse commit %s"),
+                               oid_to_hex(old_commit_oid));
+
                init_tree_desc(&trees[0], tree->buffer, tree->size);
                parse_tree(new_tree);
                tree = new_tree;
@@ -904,7 +916,8 @@ static void update_refs_for_switch(const struct checkout_opts *opts,
                                      opts->new_branch_force ? 1 : 0,
                                      opts->new_branch_log,
                                      opts->quiet,
-                                     opts->track);
+                                     opts->track,
+                                     0);
                free(new_branch_info->name);
                free(new_branch_info->refname);
                new_branch_info->name = xstrdup(opts->new_branch);
@@ -1391,23 +1404,31 @@ static void die_expecting_a_branch(const struct branch_info *branch_info)
 {
        struct object_id oid;
        char *to_free;
+       int code;
 
        if (dwim_ref(branch_info->name, strlen(branch_info->name), &oid, &to_free, 0) == 1) {
                const char *ref = to_free;
 
                if (skip_prefix(ref, "refs/tags/", &ref))
-                       die(_("a branch is expected, got tag '%s'"), ref);
-               if (skip_prefix(ref, "refs/remotes/", &ref))
-                       die(_("a branch is expected, got remote branch '%s'"), ref);
-               die(_("a branch is expected, got '%s'"), ref);
+                       code = die_message(_("a branch is expected, got tag '%s'"), ref);
+               else if (skip_prefix(ref, "refs/remotes/", &ref))
+                       code = die_message(_("a branch is expected, got remote branch '%s'"), ref);
+               else
+                       code = die_message(_("a branch is expected, got '%s'"), ref);
        }
-       if (branch_info->commit)
-               die(_("a branch is expected, got commit '%s'"), branch_info->name);
-       /*
-        * This case should never happen because we already die() on
-        * non-commit, but just in case.
-        */
-       die(_("a branch is expected, got '%s'"), branch_info->name);
+       else if (branch_info->commit)
+               code = die_message(_("a branch is expected, got commit '%s'"), branch_info->name);
+       else
+               /*
+                * This case should never happen because we already die() on
+                * non-commit, but just in case.
+                */
+               code = die_message(_("a branch is expected, got '%s'"), branch_info->name);
+
+       if (advice_enabled(ADVICE_SUGGEST_DETACHING_HEAD))
+               advise(_("If you want to detach HEAD at the commit, try again with the --detach option."));
+
+       exit(code);
 }
 
 static void die_if_some_operation_in_progress(void)
@@ -1602,9 +1623,10 @@ static int checkout_main(int argc, const char **argv, const char *prefix,
        opts->show_progress = -1;
 
        git_config(git_checkout_config, opts);
-
-       prepare_repo_settings(the_repository);
-       the_repository->settings.command_requires_full_index = 0;
+       if (the_repository->gitdir) {
+               prepare_repo_settings(the_repository);
+               the_repository->settings.command_requires_full_index = 0;
+       }
 
        opts->track = BRANCH_TRACK_UNSPECIFIED;
 
index 3ff02bbbffeb7ed041b8a9af7f0b6f6d26c88492..5466636e66604ef5331a6f508d7d4a62e330d1e7 100644 (file)
@@ -1009,6 +1009,9 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
                dir.flags |= DIR_KEEP_UNTRACKED_CONTENTS;
        }
 
+       prepare_repo_settings(the_repository);
+       the_repository->settings.command_requires_full_index = 0;
+
        if (read_cache() < 0)
                die(_("index file corrupt"));
 
index 4541a55013d75ca8d662797fbe2dad9ce7a8d52e..7d3a3ffb40804d2bc9211263587b6109bcb24426 100644 (file)
@@ -32,6 +32,8 @@
 #include "connected.h"
 #include "packfile.h"
 #include "list-objects-filter-options.h"
+#include "hook.h"
+#include "bundle.h"
 
 /*
  * Overall FIXMEs:
@@ -71,6 +73,8 @@ static int option_dissociate;
 static int max_jobs = -1;
 static struct string_list option_recurse_submodules = STRING_LIST_INIT_NODUP;
 static struct list_objects_filter_options filter_options;
+static int option_filter_submodules = -1;    /* unspecified */
+static int config_filter_submodules = -1;    /* unspecified */
 static struct string_list server_options = STRING_LIST_INIT_NODUP;
 static int option_remote_submodules;
 
@@ -150,6 +154,8 @@ static struct option builtin_clone_options[] = {
        OPT_SET_INT('6', "ipv6", &family, N_("use IPv6 addresses only"),
                        TRANSPORT_FAMILY_IPV6),
        OPT_PARSE_LIST_OBJECTS_FILTER(&filter_options),
+       OPT_BOOL(0, "also-filter-submodules", &option_filter_submodules,
+                   N_("apply partial clone filters to submodules")),
        OPT_BOOL(0, "remote-submodules", &option_remote_submodules,
                    N_("any cloned submodules will use their remote-tracking branch")),
        OPT_BOOL(0, "sparse", &option_sparse_checkout,
@@ -652,7 +658,7 @@ static int git_sparse_checkout_init(const char *repo)
        return result;
 }
 
-static int checkout(int submodule_progress)
+static int checkout(int submodule_progress, int filter_submodules)
 {
        struct object_id oid;
        char *head;
@@ -697,6 +703,8 @@ static int checkout(int submodule_progress)
        init_checkout_metadata(&opts.meta, head, &oid, NULL);
 
        tree = parse_tree_indirect(&oid);
+       if (!tree)
+               die(_("unable to parse commit %s"), oid_to_hex(&oid));
        parse_tree(tree);
        init_tree_desc(&t, tree->buffer, tree->size);
        if (unpack_trees(1, &t, &opts) < 0)
@@ -707,7 +715,7 @@ static int checkout(int submodule_progress)
        if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
                die(_("unable to write new index file"));
 
-       err |= run_hook_le(NULL, "post-checkout", oid_to_hex(null_oid()),
+       err |= run_hooks_l("post-checkout", oid_to_hex(null_oid()),
                           oid_to_hex(&oid), "1", NULL);
 
        if (!err && (option_recurse_submodules.nr > 0)) {
@@ -731,6 +739,10 @@ static int checkout(int submodule_progress)
                        strvec_push(&args, "--no-fetch");
                }
 
+               if (filter_submodules && filter_options.choice)
+                       strvec_pushf(&args, "--filter=%s",
+                                    expand_list_objects_filter_spec(&filter_options));
+
                if (option_single_branch >= 0)
                        strvec_push(&args, option_single_branch ?
                                               "--single-branch" :
@@ -751,6 +763,8 @@ static int git_clone_config(const char *k, const char *v, void *cb)
        }
        if (!strcmp(k, "clone.rejectshallow"))
                config_reject_shallow = git_config_bool(k, v);
+       if (!strcmp(k, "clone.filtersubmodules"))
+               config_filter_submodules = git_config_bool(k, v);
 
        return git_default_config(k, v, cb);
 }
@@ -864,7 +878,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
        const struct ref *refs, *remote_head;
        struct ref *remote_head_points_at = NULL;
        const struct ref *our_head_points_at;
-       struct ref *mapped_refs;
+       struct ref *mapped_refs = NULL;
        const struct ref *ref;
        struct strbuf key = STRBUF_INIT;
        struct strbuf branch_top = STRBUF_INIT, reflog_msg = STRBUF_INIT;
@@ -873,6 +887,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
        struct remote *remote;
        int err = 0, complete_refs_before_fetch = 1;
        int submodule_progress;
+       int filter_submodules = 0;
 
        struct transport_ls_refs_options transport_ls_refs_options =
                TRANSPORT_LS_REFS_OPTIONS_INIT;
@@ -1068,12 +1083,35 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
        if (option_reject_shallow != -1)
                reject_shallow = option_reject_shallow;
 
+       /*
+        * If option_filter_submodules is specified from CLI option,
+        * ignore config_filter_submodules from git_clone_config.
+        */
+       if (config_filter_submodules != -1)
+               filter_submodules = config_filter_submodules;
+       if (option_filter_submodules != -1)
+               filter_submodules = option_filter_submodules;
+
+       /*
+        * Exit if the user seems to be doing something silly with submodule
+        * filter flags (but not with filter configs, as those should be
+        * set-and-forget).
+        */
+       if (option_filter_submodules > 0 && !filter_options.choice)
+               die(_("the option '%s' requires '%s'"),
+                   "--also-filter-submodules", "--filter");
+       if (option_filter_submodules > 0 && !option_recurse_submodules.nr)
+               die(_("the option '%s' requires '%s'"),
+                   "--also-filter-submodules", "--recurse-submodules");
+
        /*
         * apply the remote name provided by --origin only after this second
         * call to git_config, to ensure it overrides all config-based values.
         */
-       if (option_origin != NULL)
+       if (option_origin != NULL) {
+               free(remote_name);
                remote_name = xstrdup(option_origin);
+       }
 
        if (remote_name == NULL)
                remote_name = xstrdup("origin");
@@ -1139,6 +1177,18 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
        transport->family = family;
        transport->cloning = 1;
 
+       if (is_bundle) {
+               struct bundle_header header = BUNDLE_HEADER_INIT;
+               int fd = read_bundle_header(path, &header);
+               int has_filter = header.filter.choice != LOFC_DISABLED;
+
+               if (fd > 0)
+                       close(fd);
+               bundle_header_release(&header);
+               if (has_filter)
+                       die(_("cannot clone from filtered bundle"));
+       }
+
        transport_set_option(transport, TRANS_OPT_KEEP, "yes");
 
        if (reject_shallow)
@@ -1186,7 +1236,10 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
 
        refs = transport_get_remote_refs(transport, &transport_ls_refs_options);
 
-       if (refs) {
+       if (refs)
+               mapped_refs = wanted_peer_refs(refs, &remote->fetch);
+
+       if (mapped_refs) {
                int hash_algo = hash_algo_by_ptr(transport_get_hash_algo(transport));
 
                /*
@@ -1195,8 +1248,6 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
                 */
                initialize_repository_version(hash_algo, 1);
                repo_set_hash_algo(the_repository, hash_algo);
-
-               mapped_refs = wanted_peer_refs(refs, &remote->fetch);
                /*
                 * transport_get_remote_refs() may return refs with null sha-1
                 * in mapped_refs (see struct transport->get_refs_list
@@ -1235,14 +1286,14 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
        }
        else {
                const char *branch;
-               char *ref;
+               const char *ref;
+               char *ref_free = NULL;
 
                if (option_branch)
                        die(_("Remote branch %s not found in upstream %s"),
                                        option_branch, remote_name);
 
                warning(_("You appear to have cloned an empty repository."));
-               mapped_refs = NULL;
                our_head_points_at = NULL;
                remote_head_points_at = NULL;
                remote_head = NULL;
@@ -1252,17 +1303,16 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
                    skip_prefix(transport_ls_refs_options.unborn_head_target,
                                "refs/heads/", &branch)) {
                        ref = transport_ls_refs_options.unborn_head_target;
-                       transport_ls_refs_options.unborn_head_target = NULL;
                        create_symref("HEAD", ref, reflog_msg.buf);
                } else {
                        branch = git_default_branch_name(0);
-                       ref = xstrfmt("refs/heads/%s", branch);
+                       ref_free = xstrfmt("refs/heads/%s", branch);
+                       ref = ref_free;
                }
 
                if (!option_bare)
                        install_branch_config(0, branch, remote_name, ref);
-
-               free(ref);
+               free(ref_free);
        }
 
        write_refspec_config(src_ref_prefix, our_head_points_at,
@@ -1273,7 +1323,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
 
        if (is_local)
                clone_local(path, git_dir);
-       else if (refs && complete_refs_before_fetch) {
+       else if (mapped_refs && complete_refs_before_fetch) {
                if (transport_fetch_refs(transport, mapped_refs))
                        die(_("remote transport reported error"));
        }
@@ -1301,7 +1351,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
        }
 
        junk_mode = JUNK_LEAVE_REPO;
-       err = checkout(submodule_progress);
+       err = checkout(submodule_progress, filter_submodules);
 
        free(remote_name);
        strbuf_release(&reflog_msg);
@@ -1314,7 +1364,6 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
        UNLEAK(repo);
        junk_mode = JUNK_LEAVE_ALL;
 
-       strvec_clear(&transport_ls_refs_options.ref_prefixes);
-       free(transport_ls_refs_options.unborn_head_target);
+       transport_ls_refs_options_release(&transport_ls_refs_options);
        return err;
 }
index 4247fbde95af2772f69f9160db07db039c44cda4..51c4040ea6c879bda3631343643f3a52063a1bdc 100644 (file)
@@ -192,7 +192,7 @@ static int git_commit_graph_write_config(const char *var, const char *value,
 
 static int graph_write(int argc, const char **argv)
 {
-       struct string_list pack_indexes = STRING_LIST_INIT_NODUP;
+       struct string_list pack_indexes = STRING_LIST_INIT_DUP;
        struct strbuf buf = STRBUF_INIT;
        struct oidset commits = OIDSET_INIT;
        struct object_directory *odb = NULL;
@@ -273,8 +273,8 @@ static int graph_write(int argc, const char **argv)
 
        if (opts.stdin_packs) {
                while (strbuf_getline(&buf, stdin) != EOF)
-                       string_list_append(&pack_indexes,
-                                          strbuf_detach(&buf, NULL));
+                       string_list_append_nodup(&pack_indexes,
+                                                strbuf_detach(&buf, NULL));
        } else if (opts.stdin_commits) {
                oidset_init(&commits, 0);
                if (opts.progress)
index b9ed0374e301ae958906435fa6592e9d3bbe52fa..009a1de0a3d3f69e05a802d7d2356935018b0f81 100644 (file)
@@ -37,6 +37,7 @@
 #include "help.h"
 #include "commit-reach.h"
 #include "commit-graph.h"
+#include "pretty.h"
 
 static const char * const builtin_commit_usage[] = {
        N_("git commit [<options>] [--] <pathspec>..."),
@@ -725,11 +726,13 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
        int clean_message_contents = (cleanup_mode != COMMIT_MSG_CLEANUP_NONE);
        int old_display_comment_prefix;
        int merge_contains_scissors = 0;
+       int invoked_hook;
 
        /* This checks and barfs if author is badly specified */
        determine_author_info(author_ident);
 
-       if (!no_verify && run_commit_hook(use_editor, index_file, "pre-commit", NULL))
+       if (!no_verify && run_commit_hook(use_editor, index_file, &invoked_hook,
+                                         "pre-commit", NULL))
                return 0;
 
        if (squash_message) {
@@ -1052,10 +1055,10 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
                return 0;
        }
 
-       if (!no_verify && hook_exists("pre-commit")) {
+       if (!no_verify && invoked_hook) {
                /*
-                * Re-read the index as pre-commit hook could have updated it,
-                * and write it out as a tree.  We must do this before we invoke
+                * Re-read the index as the pre-commit-commit hook was invoked
+                * and could have updated it. We must do this before we invoke
                 * the editor and after we invoke run_status above.
                 */
                discard_cache();
@@ -1067,7 +1070,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
                return 0;
        }
 
-       if (run_commit_hook(use_editor, index_file, "prepare-commit-msg",
+       if (run_commit_hook(use_editor, index_file, NULL, "prepare-commit-msg",
                            git_path_commit_editmsg(), hook_arg1, hook_arg2, NULL))
                return 0;
 
@@ -1084,7 +1087,8 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
        }
 
        if (!no_verify &&
-           run_commit_hook(use_editor, index_file, "commit-msg", git_path_commit_editmsg(), NULL)) {
+           run_commit_hook(use_editor, index_file, NULL, "commit-msg",
+                           git_path_commit_editmsg(), NULL)) {
                return 0;
        }
 
@@ -1242,8 +1246,6 @@ static int parse_and_validate_options(int argc, const char *argv[],
                                      struct commit *current_head,
                                      struct wt_status *s)
 {
-       int f = 0;
-
        argc = parse_options(argc, argv, prefix, options, usage, 0);
        finalize_deferred_config(s);
 
@@ -1251,7 +1253,7 @@ static int parse_and_validate_options(int argc, const char *argv[],
                force_author = find_author_by_nickname(force_author);
 
        if (force_author && renew_authorship)
-               die(_("Using both --reset-author and --author does not make sense"));
+               die(_("options '%s' and '%s' cannot be used together"), "--reset-author", "--author");
 
        if (logfile || have_option_m || use_message)
                use_editor = 0;
@@ -1268,20 +1270,16 @@ static int parse_and_validate_options(int argc, const char *argv[],
                        die(_("You are in the middle of a rebase -- cannot amend."));
        }
        if (fixup_message && squash_message)
-               die(_("Options --squash and --fixup cannot be used together"));
-       if (use_message)
-               f++;
-       if (edit_message)
-               f++;
-       if (fixup_message)
-               f++;
-       if (logfile)
-               f++;
-       if (f > 1)
-               die(_("Only one of -c/-C/-F/--fixup can be used."));
-       if (have_option_m && (edit_message || use_message || logfile))
-               die((_("Option -m cannot be combined with -c/-C/-F.")));
-       if (f || have_option_m)
+               die(_("options '%s' and '%s' cannot be used together"), "--squash", "--fixup");
+       die_for_incompatible_opt4(!!use_message, "-C",
+                                 !!edit_message, "-c",
+                                 !!logfile, "-F",
+                                 !!fixup_message, "--fixup");
+       die_for_incompatible_opt4(have_option_m, "-m",
+                                 !!edit_message, "-c",
+                                 !!use_message, "-C",
+                                 !!logfile, "-F");
+       if (use_message || edit_message || logfile ||fixup_message || have_option_m)
                template_file = NULL;
        if (edit_message)
                use_message = edit_message;
@@ -1306,9 +1304,10 @@ static int parse_and_validate_options(int argc, const char *argv[],
        if (patch_interactive)
                interactive = 1;
 
-       if (also + only + all + interactive > 1)
-               die(_("Only one of --include/--only/--all/--interactive/--patch can be used."));
-
+       die_for_incompatible_opt4(also, "-i/--include",
+                                 only, "-o/--only",
+                                 all, "-a/--all",
+                                 interactive, "--interactive/-p/--patch");
        if (fixup_message) {
                /*
                 * We limit --fixup's suboptions to only alpha characters.
@@ -1845,7 +1844,8 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
 
        repo_rerere(the_repository, 0);
        run_auto_maintenance(quiet);
-       run_commit_hook(use_editor, get_index_file(), "post-commit", NULL);
+       run_commit_hook(use_editor, get_index_file(), NULL, "post-commit",
+                       NULL);
        if (amend && !no_post_rewrite) {
                commit_post_rewrite(the_repository, current_head, &oid);
        }
index 542d8d02b2b00a8675d6bff9245019d0251d043f..e7b88a9c08dc17055dd201eb5f985a77b6150604 100644 (file)
@@ -151,7 +151,7 @@ static struct option builtin_config_options[] = {
        OPT_BIT(0, "get-color", &actions, N_("find the color configured: slot [default]"), ACTION_GET_COLOR),
        OPT_BIT(0, "get-colorbool", &actions, N_("find the color setting: slot [stdout-is-tty]"), ACTION_GET_COLORBOOL),
        OPT_GROUP(N_("Type")),
-       OPT_CALLBACK('t', "type", &type, "", N_("value is given this type"), option_parse_type),
+       OPT_CALLBACK('t', "type", &type, N_("type"), N_("value is given this type"), option_parse_type),
        OPT_CALLBACK_VALUE(0, "bool", &type, N_("value is \"true\" or \"false\""), TYPE_BOOL),
        OPT_CALLBACK_VALUE(0, "int", &type, N_("value is decimal number"), TYPE_INT),
        OPT_CALLBACK_VALUE(0, "bool-or-int", &type, N_("value is --bool or --int"), TYPE_BOOL_OR_INT),
@@ -612,7 +612,7 @@ static int get_urlmatch(const char *var, const char *url)
 
                strbuf_release(&matched->value);
        }
-       string_list_clear(&config.vars, 1);
+       urlmatch_config_release(&config);
        string_list_clear(&values, 1);
        free(config.url.url);
 
index 3fae474f6f1f4fb78911ab4a26a160f04527d292..07b941959628b9d02dbf0282e779040cea5b27be 100644 (file)
@@ -87,7 +87,7 @@ static int print_alternate(struct object_directory *odb, void *data)
 }
 
 static char const * const count_objects_usage[] = {
-       N_("git count-objects [-v] [-H | --human-readable]"),
+       "git count-objects [-v] [-H | --human-readable]",
        NULL
 };
 
index 0e0ac1f1670f3b21f01c4fbbc602c53392331a9c..116097a404a1f1a2e6c3ea735e9159c9eca66066 100644 (file)
@@ -195,6 +195,7 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)
                int saved_dcctc = 0;
 
                opt->diffopt.rotate_to_strict = 0;
+               opt->diffopt.no_free = 1;
                if (opt->diffopt.detect_rename) {
                        if (!the_index.cache)
                                repo_read_index(the_repository);
@@ -217,6 +218,8 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)
                }
                opt->diffopt.degraded_cc_to_c = saved_dcctc;
                opt->diffopt.needed_rename_limit = saved_nrl;
+               opt->diffopt.no_free = 0;
+               diff_free(&opt->diffopt);
        }
 
        return diff_result_code(&opt->diffopt, 0);
index fa4683377ebbe51ee42d964d29a30011f12f1261..bb7fafca61815460ba085859322314b4c41c8b6b 100644 (file)
@@ -28,9 +28,9 @@ static const char builtin_diff_usage[] =
 "git diff [<options>] [<commit>] [--] [<path>...]\n"
 "   or: git diff [<options>] --cached [--merge-base] [<commit>] [--] [<path>...]\n"
 "   or: git diff [<options>] [--merge-base] <commit> [<commit>...] <commit> [--] [<path>...]\n"
-"   or: git diff [<options>] <commit>...<commit>] [--] [<path>...]\n"
-"   or: git diff [<options>] <blob> <blob>]\n"
-"   or: git diff [<options>] --no-index [--] <path> <path>]\n"
+"   or: git diff [<options>] <commit>...<commit> [--] [<path>...]\n"
+"   or: git diff [<options>] <blob> <blob>\n"
+"   or: git diff [<options>] --no-index [--] <path> <path>\n"
 COMMON_DIFF_OPTIONS_HELP;
 
 static const char *blob_path(struct object_array_entry *entry)
index c79fbbf67e5ee0d4e7d09c7997f1fa04dc1400bc..faa3507369a23d16dfd454aab83c6b813aceb59f 100644 (file)
@@ -732,8 +732,9 @@ int cmd_difftool(int argc, const char **argv, const char *prefix)
        } else if (dir_diff)
                die(_("options '%s' and '%s' cannot be used together"), "--dir-diff", "--no-index");
 
-       if (use_gui_tool + !!difftool_cmd + !!extcmd > 1)
-               die(_("options '%s', '%s', and '%s' cannot be used together"), "--gui", "--tool", "--extcmd");
+       die_for_incompatible_opt3(use_gui_tool, "--gui",
+                                 !!difftool_cmd, "--tool",
+                                 !!extcmd, "--extcmd");
 
        if (use_gui_tool)
                setenv("GIT_MERGETOOL_GUI", "true", 1);
index 9f1c730e5876d5a0a8d6e015d8a9978b90e890e6..1355b5a96d3c900503fed1b09f1b7e8ad8d6ee3c 100644 (file)
@@ -26,7 +26,7 @@
 #include "commit-slab.h"
 
 static const char *fast_export_usage[] = {
-       N_("git fast-export [rev-list-opts]"),
+       N_("git fast-export [<rev-list-opts>]"),
        NULL
 };
 
@@ -300,7 +300,7 @@ static void export_blob(const struct object_id *oid)
                if (!buf)
                        die("could not read blob %s", oid_to_hex(oid));
                if (check_object_signature(the_repository, oid, buf, size,
-                                          type_name(type), NULL) < 0)
+                                          type) < 0)
                        die("oid mismatch in blob %s", oid_to_hex(oid));
                object = parse_object_buffer(the_repository, oid, type,
                                             size, buf, &eaten);
@@ -1261,6 +1261,7 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)
        revs.diffopt.format_callback = show_filemodify;
        revs.diffopt.format_callback_data = &paths_of_changed_objects;
        revs.diffopt.flags.recursive = 1;
+       revs.diffopt.no_free = 1;
        while ((commit = get_revision(&revs)))
                handle_commit(commit, &revs, &paths_of_changed_objects);
 
index 2b2e28bad79cbaef25b4eb8fea4c0f800ba4a89d..28d3193c380326e890463c759e3de06cb2073037 100644 (file)
@@ -19,6 +19,7 @@
 #include "mem-pool.h"
 #include "commit-reach.h"
 #include "khash.h"
+#include "date.h"
 
 #define PACK_ID_BITS 16
 #define MAX_PACK_ID ((1<<PACK_ID_BITS)-1)
@@ -176,8 +177,9 @@ static int global_argc;
 static const char **global_argv;
 
 /* Memory pools */
-static struct mem_pool fi_mem_pool =  {NULL, 2*1024*1024 -
-                                      sizeof(struct mp_block), 0 };
+static struct mem_pool fi_mem_pool = {
+       .block_alloc = 2*1024*1024 - sizeof(struct mp_block),
+};
 
 /* Atom management */
 static unsigned int atom_table_sz = 4451;
@@ -205,7 +207,9 @@ static int import_marks_file_done;
 static int relative_marks_paths;
 
 /* Our last blob */
-static struct last_object last_blob = { STRBUF_INIT, 0, 0, 0 };
+static struct last_object last_blob = {
+       .data = STRBUF_INIT,
+ };
 
 /* Tree management */
 static unsigned int tree_entry_alloc = 1000;
@@ -231,7 +235,10 @@ static struct tag *last_tag;
 static whenspec_type whenspec = WHENSPEC_RAW;
 static struct strbuf command_buf = STRBUF_INIT;
 static int unread_command_buf;
-static struct recent_command cmd_hist = {&cmd_hist, &cmd_hist, NULL};
+static struct recent_command cmd_hist = {
+       .prev = &cmd_hist,
+       .next = &cmd_hist,
+};
 static struct recent_command *cmd_tail = &cmd_hist;
 static struct recent_command *rc_free;
 static unsigned int cmd_save = 100;
@@ -858,7 +865,7 @@ static void end_packfile(void)
                struct tag *t;
 
                close_pack_windows(pack_data);
-               finalize_hashfile(pack_file, cur_pack_oid.hash, 0);
+               finalize_hashfile(pack_file, cur_pack_oid.hash, FSYNC_COMPONENT_PACK, 0);
                fixup_pack_header_footer(pack_data->pack_fd, pack_data->hash,
                                         pack_data->pack_name, object_count,
                                         cur_pack_oid.hash, pack_size);
@@ -937,8 +944,8 @@ static int store_object(
        git_hash_ctx c;
        git_zstream s;
 
-       hdrlen = xsnprintf((char *)hdr, sizeof(hdr), "%s %lu",
-                          type_name(type), (unsigned long)dat->len) + 1;
+       hdrlen = format_object_header((char *)hdr, sizeof(hdr), type,
+                                     dat->len);
        the_hash_algo->init_fn(&c);
        the_hash_algo->update_fn(&c, hdr, hdrlen);
        the_hash_algo->update_fn(&c, dat->buf, dat->len);
@@ -1091,7 +1098,7 @@ static void stream_blob(uintmax_t len, struct object_id *oidout, uintmax_t mark)
        hashfile_checkpoint(pack_file, &checkpoint);
        offset = checkpoint.offset;
 
-       hdrlen = xsnprintf((char *)out_buf, out_sz, "blob %" PRIuMAX, len) + 1;
+       hdrlen = format_object_header((char *)out_buf, out_sz, OBJ_BLOB, len);
 
        the_hash_algo->init_fn(&c);
        the_hash_algo->update_fn(&c, out_buf, hdrlen);
@@ -2483,7 +2490,7 @@ static void note_change_n(const char *p, struct branch *b, unsigned char *old_fa
                unsigned long size;
                char *buf = read_object_with_reference(the_repository,
                                                       &commit_oid,
-                                                      commit_type, &size,
+                                                      OBJ_COMMIT, &size,
                                                       &commit_oid);
                if (!buf || size < the_hash_algo->hexsz + 6)
                        die("Not a valid commit: %s", p);
@@ -2555,7 +2562,7 @@ static void parse_from_existing(struct branch *b)
                char *buf;
 
                buf = read_object_with_reference(the_repository,
-                                                &b->oid, commit_type, &size,
+                                                &b->oid, OBJ_COMMIT, &size,
                                                 &b->oid);
                parse_from_commit(b, buf, size);
                free(buf);
@@ -2651,7 +2658,7 @@ static struct hash_list *parse_merge(unsigned int *count)
                        unsigned long size;
                        char *buf = read_object_with_reference(the_repository,
                                                               &n->oid,
-                                                              commit_type,
+                                                              OBJ_COMMIT,
                                                               &size, &n->oid);
                        if (!buf || size < the_hash_algo->hexsz + 6)
                                die("Not a valid commit: %s", from);
index c2d96f4c89ab0fa7207f74a17d0bdf94f8bd3780..f045bbbe946dcbf96eff8849317c499595de295f 100644 (file)
@@ -153,11 +153,15 @@ int cmd_fetch_pack(int argc, const char **argv, const char *prefix)
                        args.from_promisor = 1;
                        continue;
                }
-               if (skip_prefix(arg, ("--" CL_ARG__FILTER "="), &arg)) {
+               if (!strcmp("--refetch", arg)) {
+                       args.refetch = 1;
+                       continue;
+               }
+               if (skip_prefix(arg, ("--filter="), &arg)) {
                        parse_list_objects_filter(&args.filter_options, arg);
                        continue;
                }
-               if (!strcmp(arg, ("--no-" CL_ARG__FILTER))) {
+               if (!strcmp(arg, ("--no-filter"))) {
                        list_objects_filter_set_no_filter(&args.filter_options);
                        continue;
                }
index 5f06b21f8e97c5459fdb558302c5b9b95e99eee8..e3791f09ed51d0d96b945b747d3dd74ad2d63165 100644 (file)
@@ -59,7 +59,7 @@ static int prune_tags = -1; /* unspecified */
 
 static int all, append, dry_run, force, keep, multiple, update_head_ok;
 static int write_fetch_head = 1;
-static int verbosity, deepen_relative, set_upstream;
+static int verbosity, deepen_relative, set_upstream, refetch;
 static int progress = -1;
 static int enable_auto_gc = 1;
 static int tags = TAGS_DEFAULT, unshallow, update_shallow, deepen;
@@ -76,6 +76,7 @@ static struct transport *gtransport;
 static struct transport *gsecondary;
 static const char *submodule_prefix = "";
 static int recurse_submodules = RECURSE_SUBMODULES_DEFAULT;
+static int recurse_submodules_cli = RECURSE_SUBMODULES_DEFAULT;
 static int recurse_submodules_default = RECURSE_SUBMODULES_ON_DEMAND;
 static int shown_url = 0;
 static struct refspec refmap = REFSPEC_INIT_FETCH;
@@ -167,7 +168,7 @@ static struct option builtin_fetch_options[] = {
                 N_("prune remote-tracking branches no longer on remote")),
        OPT_BOOL('P', "prune-tags", &prune_tags,
                 N_("prune local tags no longer on remote and clobber changed tags")),
-       OPT_CALLBACK_F(0, "recurse-submodules", &recurse_submodules, N_("on-demand"),
+       OPT_CALLBACK_F(0, "recurse-submodules", &recurse_submodules_cli, N_("on-demand"),
                    N_("control recursive fetching of submodules"),
                    PARSE_OPT_OPTARG, option_fetch_parse_recurse_submodules),
        OPT_BOOL(0, "dry-run", &dry_run,
@@ -189,6 +190,9 @@ static struct option builtin_fetch_options[] = {
        OPT_SET_INT_F(0, "unshallow", &unshallow,
                      N_("convert to a complete repository"),
                      1, PARSE_OPT_NONEG),
+       OPT_SET_INT_F(0, "refetch", &refetch,
+                     N_("re-fetch without negotiating common commits"),
+                     1, PARSE_OPT_NONEG),
        { OPTION_STRING, 0, "submodule-prefix", &submodule_prefix, N_("dir"),
                   N_("prepend this to submodule path output"), PARSE_OPT_HIDDEN },
        OPT_CALLBACK_F(0, "recurse-submodules-default",
@@ -348,7 +352,19 @@ static void clear_item(struct refname_hash_entry *item)
        item->ignore = 1;
 }
 
+
+static void add_already_queued_tags(const char *refname,
+                                   const struct object_id *old_oid,
+                                   const struct object_id *new_oid,
+                                   void *cb_data)
+{
+       struct hashmap *queued_tags = cb_data;
+       if (starts_with(refname, "refs/tags/") && new_oid)
+               (void) refname_hash_add(queued_tags, refname, new_oid);
+}
+
 static void find_non_local_tags(const struct ref *refs,
+                               struct ref_transaction *transaction,
                                struct ref **head,
                                struct ref ***tail)
 {
@@ -366,6 +382,16 @@ static void find_non_local_tags(const struct ref *refs,
        create_fetch_oidset(head, &fetch_oids);
 
        for_each_ref(add_one_refname, &existing_refs);
+
+       /*
+        * If we already have a transaction, then we need to filter out all
+        * tags which have already been queued up.
+        */
+       if (transaction)
+               ref_transaction_for_each_queued_update(transaction,
+                                                      add_already_queued_tags,
+                                                      &existing_refs);
+
        for (ref = refs; ref; ref = ref->next) {
                if (!starts_with(ref->name, "refs/tags/"))
                        continue;
@@ -599,7 +625,7 @@ static struct ref *get_ref_map(struct remote *remote,
                /* also fetch all tags */
                get_fetch_map(remote_refs, tag_refspec, &tail, 0);
        else if (tags == TAGS_DEFAULT && *autotags)
-               find_non_local_tags(remote_refs, &ref_map, &tail);
+               find_non_local_tags(remote_refs, NULL, &ref_map, &tail);
 
        /* Now append any refs to be updated opportunistically: */
        *tail = orefs;
@@ -763,8 +789,8 @@ static void prepare_format_display(struct ref *ref_map)
        else if (!strcasecmp(format, "compact"))
                compact_format = 1;
        else
-               die(_("configuration fetch.output contains invalid value %s"),
-                   format);
+               die(_("invalid value for '%s': '%s'"),
+                   "fetch.output", format);
 
        for (rm = ref_map; rm; rm = rm->next) {
                if (rm->status == REF_STATUS_REJECT_SHALLOW ||
@@ -1082,22 +1108,20 @@ N_("it took %.2f seconds to check forced updates; you can use\n"
    "to avoid this check\n");
 
 static int store_updated_refs(const char *raw_url, const char *remote_name,
-                             int connectivity_checked, struct ref *ref_map,
-                             struct worktree **worktrees)
+                             int connectivity_checked,
+                             struct ref_transaction *transaction, struct ref *ref_map,
+                             struct fetch_head *fetch_head, struct worktree **worktrees)
 {
-       struct fetch_head fetch_head;
        int url_len, i, rc = 0;
        struct strbuf note = STRBUF_INIT, err = STRBUF_INIT;
-       struct ref_transaction *transaction = NULL;
        const char *what, *kind;
        struct ref *rm;
        char *url;
        int want_status;
-       int summary_width = transport_summary_width(ref_map);
+       int summary_width = 0;
 
-       rc = open_fetch_head(&fetch_head);
-       if (rc)
-               return -1;
+       if (verbosity >= 0)
+               summary_width = transport_summary_width(ref_map);
 
        if (raw_url)
                url = transport_anonymize_url(raw_url);
@@ -1114,14 +1138,6 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
                }
        }
 
-       if (atomic_fetch) {
-               transaction = ref_transaction_begin(&err);
-               if (!transaction) {
-                       error("%s", err.buf);
-                       goto abort;
-               }
-       }
-
        prepare_format_display(ref_map);
 
        /*
@@ -1133,7 +1149,6 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
             want_status <= FETCH_HEAD_IGNORE;
             want_status++) {
                for (rm = ref_map; rm; rm = rm->next) {
-                       struct commit *commit = NULL;
                        struct ref *ref = NULL;
 
                        if (rm->status == REF_STATUS_REJECT_SHALLOW) {
@@ -1144,21 +1159,34 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
                        }
 
                        /*
-                        * References in "refs/tags/" are often going to point
-                        * to annotated tags, which are not part of the
-                        * commit-graph. We thus only try to look up refs in
-                        * the graph which are not in that namespace to not
-                        * regress performance in repositories with many
-                        * annotated tags.
+                        * When writing FETCH_HEAD we need to determine whether
+                        * we already have the commit or not. If not, then the
+                        * reference is not for merge and needs to be written
+                        * to the reflog after other commits which we already
+                        * have. We're not interested in this property though
+                        * in case FETCH_HEAD is not to be updated, so we can
+                        * skip the classification in that case.
                         */
-                       if (!starts_with(rm->name, "refs/tags/"))
-                               commit = lookup_commit_in_graph(the_repository, &rm->old_oid);
-                       if (!commit) {
-                               commit = lookup_commit_reference_gently(the_repository,
-                                                                       &rm->old_oid,
-                                                                       1);
-                               if (!commit)
-                                       rm->fetch_head_status = FETCH_HEAD_NOT_FOR_MERGE;
+                       if (fetch_head->fp) {
+                               struct commit *commit = NULL;
+
+                               /*
+                                * References in "refs/tags/" are often going to point
+                                * to annotated tags, which are not part of the
+                                * commit-graph. We thus only try to look up refs in
+                                * the graph which are not in that namespace to not
+                                * regress performance in repositories with many
+                                * annotated tags.
+                                */
+                               if (!starts_with(rm->name, "refs/tags/"))
+                                       commit = lookup_commit_in_graph(the_repository, &rm->old_oid);
+                               if (!commit) {
+                                       commit = lookup_commit_reference_gently(the_repository,
+                                                                               &rm->old_oid,
+                                                                               1);
+                                       if (!commit)
+                                               rm->fetch_head_status = FETCH_HEAD_NOT_FOR_MERGE;
+                               }
                        }
 
                        if (rm->fetch_head_status != want_status)
@@ -1205,7 +1233,7 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
                                strbuf_addf(&note, "'%s' of ", what);
                        }
 
-                       append_fetch_head(&fetch_head, &rm->old_oid,
+                       append_fetch_head(fetch_head, &rm->old_oid,
                                          rm->fetch_head_status,
                                          note.buf, url, url_len);
 
@@ -1237,17 +1265,6 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
                }
        }
 
-       if (!rc && transaction) {
-               rc = ref_transaction_commit(transaction, &err);
-               if (rc) {
-                       error("%s", err.buf);
-                       goto abort;
-               }
-       }
-
-       if (!rc)
-               commit_fetch_head(&fetch_head);
-
        if (rc & STORE_REF_ERROR_DF_CONFLICT)
                error(_("some local refs could not be updated; try running\n"
                      " 'git remote prune %s' to remove any old, conflicting "
@@ -1265,9 +1282,7 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
  abort:
        strbuf_release(&note);
        strbuf_release(&err);
-       ref_transaction_free(transaction);
        free(url);
-       close_fetch_head(&fetch_head);
        return rc;
 }
 
@@ -1292,6 +1307,14 @@ static int check_exist_and_connected(struct ref *ref_map)
        if (deepen)
                return -1;
 
+       /*
+        * Similarly, if we need to refetch, we always want to perform a full
+        * fetch ignoring existing objects.
+        */
+       if (refetch)
+               return -1;
+
+
        /*
         * check_connected() allows objects to merely be promised, but
         * we need all direct targets to exist.
@@ -1307,7 +1330,9 @@ static int check_exist_and_connected(struct ref *ref_map)
 }
 
 static int fetch_and_consume_refs(struct transport *transport,
+                                 struct ref_transaction *transaction,
                                  struct ref *ref_map,
+                                 struct fetch_head *fetch_head,
                                  struct worktree **worktrees)
 {
        int connectivity_checked = 1;
@@ -1330,7 +1355,8 @@ static int fetch_and_consume_refs(struct transport *transport,
 
        trace2_region_enter("fetch", "consume_refs", the_repository);
        ret = store_updated_refs(transport->url, transport->remote->name,
-                                connectivity_checked, ref_map, worktrees);
+                                connectivity_checked, transaction, ref_map,
+                                fetch_head, worktrees);
        trace2_region_leave("fetch", "consume_refs", the_repository);
 
 out:
@@ -1338,13 +1364,15 @@ out:
        return ret;
 }
 
-static int prune_refs(struct refspec *rs, struct ref *ref_map,
+static int prune_refs(struct refspec *rs,
+                     struct ref_transaction *transaction,
+                     struct ref *ref_map,
                      const char *raw_url)
 {
        int url_len, i, result = 0;
        struct ref *ref, *stale_refs = get_stale_heads(rs, ref_map);
+       struct strbuf err = STRBUF_INIT;
        char *url;
-       int summary_width = transport_summary_width(stale_refs);
        const char *dangling_msg = dry_run
                ? _("   (%s will become dangling)")
                : _("   (%s has become dangling)");
@@ -1363,16 +1391,27 @@ static int prune_refs(struct refspec *rs, struct ref *ref_map,
                url_len = i - 3;
 
        if (!dry_run) {
-               struct string_list refnames = STRING_LIST_INIT_NODUP;
+               if (transaction) {
+                       for (ref = stale_refs; ref; ref = ref->next) {
+                               result = ref_transaction_delete(transaction, ref->name, NULL, 0,
+                                                               "fetch: prune", &err);
+                               if (result)
+                                       goto cleanup;
+                       }
+               } else {
+                       struct string_list refnames = STRING_LIST_INIT_NODUP;
 
-               for (ref = stale_refs; ref; ref = ref->next)
-                       string_list_append(&refnames, ref->name);
+                       for (ref = stale_refs; ref; ref = ref->next)
+                               string_list_append(&refnames, ref->name);
 
-               result = delete_refs("fetch: prune", &refnames, 0);
-               string_list_clear(&refnames, 0);
+                       result = delete_refs("fetch: prune", &refnames, 0);
+                       string_list_clear(&refnames, 0);
+               }
        }
 
        if (verbosity >= 0) {
+               int summary_width = transport_summary_width(stale_refs);
+
                for (ref = stale_refs; ref; ref = ref->next) {
                        struct strbuf sb = STRBUF_INIT;
                        if (!shown_url) {
@@ -1388,6 +1427,8 @@ static int prune_refs(struct refspec *rs, struct ref *ref_map,
                }
        }
 
+cleanup:
+       strbuf_release(&err);
        free(url);
        free_refs(stale_refs);
        return result;
@@ -1487,6 +1528,8 @@ static struct transport *prepare_transport(struct remote *remote, int deepen)
                set_option(transport, TRANS_OPT_DEEPEN_RELATIVE, "yes");
        if (update_shallow)
                set_option(transport, TRANS_OPT_UPDATE_SHALLOW, "yes");
+       if (refetch)
+               set_option(transport, TRANS_OPT_REFETCH, "yes");
        if (filter_options.choice) {
                const char *spec =
                        expand_list_objects_filter_spec(&filter_options);
@@ -1502,10 +1545,13 @@ static struct transport *prepare_transport(struct remote *remote, int deepen)
        return transport;
 }
 
-static void backfill_tags(struct transport *transport, struct ref *ref_map,
-                         struct worktree **worktrees)
+static int backfill_tags(struct transport *transport,
+                        struct ref_transaction *transaction,
+                        struct ref *ref_map,
+                        struct fetch_head *fetch_head,
+                        struct worktree **worktrees)
 {
-       int cannot_reuse;
+       int retcode, cannot_reuse;
 
        /*
         * Once we have set TRANS_OPT_DEEPEN_SINCE, we can't unset it
@@ -1524,18 +1570,21 @@ static void backfill_tags(struct transport *transport, struct ref *ref_map,
        transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, NULL);
        transport_set_option(transport, TRANS_OPT_DEPTH, "0");
        transport_set_option(transport, TRANS_OPT_DEEPEN_RELATIVE, NULL);
-       fetch_and_consume_refs(transport, ref_map, worktrees);
+       retcode = fetch_and_consume_refs(transport, transaction, ref_map, fetch_head, worktrees);
 
        if (gsecondary) {
                transport_disconnect(gsecondary);
                gsecondary = NULL;
        }
+
+       return retcode;
 }
 
 static int do_fetch(struct transport *transport,
                    struct refspec *rs)
 {
-       struct ref *ref_map;
+       struct ref_transaction *transaction = NULL;
+       struct ref *ref_map = NULL;
        int autotags = (transport->remote->fetch_tags == 1);
        int retcode = 0;
        const struct ref *remote_refs;
@@ -1543,6 +1592,8 @@ static int do_fetch(struct transport *transport,
                TRANSPORT_LS_REFS_OPTIONS_INIT;
        int must_list_refs = 1;
        struct worktree **worktrees = get_worktrees();
+       struct fetch_head fetch_head = { 0 };
+       struct strbuf err = STRBUF_INIT;
 
        if (tags == TAGS_DEFAULT) {
                if (transport->remote->fetch_tags == 2)
@@ -1593,13 +1644,25 @@ static int do_fetch(struct transport *transport,
        } else
                remote_refs = NULL;
 
-       strvec_clear(&transport_ls_refs_options.ref_prefixes);
+       transport_ls_refs_options_release(&transport_ls_refs_options);
 
        ref_map = get_ref_map(transport->remote, remote_refs, rs,
                              tags, &autotags);
        if (!update_head_ok)
                check_not_current_branch(ref_map, worktrees);
 
+       retcode = open_fetch_head(&fetch_head);
+       if (retcode)
+               goto cleanup;
+
+       if (atomic_fetch) {
+               transaction = ref_transaction_begin(&err);
+               if (!transaction) {
+                       retcode = error("%s", err.buf);
+                       goto cleanup;
+               }
+       }
+
        if (tags == TAGS_DEFAULT && autotags)
                transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, "1");
        if (prune) {
@@ -1609,19 +1672,61 @@ static int do_fetch(struct transport *transport,
                 * don't care whether --tags was specified.
                 */
                if (rs->nr) {
-                       prune_refs(rs, ref_map, transport->url);
+                       retcode = prune_refs(rs, transaction, ref_map, transport->url);
                } else {
-                       prune_refs(&transport->remote->fetch,
-                                  ref_map,
-                                  transport->url);
+                       retcode = prune_refs(&transport->remote->fetch,
+                                            transaction, ref_map,
+                                            transport->url);
                }
+               if (retcode != 0)
+                       retcode = 1;
        }
-       if (fetch_and_consume_refs(transport, ref_map, worktrees)) {
-               free_refs(ref_map);
+
+       if (fetch_and_consume_refs(transport, transaction, ref_map, &fetch_head, worktrees)) {
                retcode = 1;
                goto cleanup;
        }
 
+       /*
+        * If neither --no-tags nor --tags was specified, do automated tag
+        * following.
+        */
+       if (tags == TAGS_DEFAULT && autotags) {
+               struct ref *tags_ref_map = NULL, **tail = &tags_ref_map;
+
+               find_non_local_tags(remote_refs, transaction, &tags_ref_map, &tail);
+               if (tags_ref_map) {
+                       /*
+                        * If backfilling of tags fails then we want to tell
+                        * the user so, but we have to continue regardless to
+                        * populate upstream information of the references we
+                        * have already fetched above. The exception though is
+                        * when `--atomic` is passed: in that case we'll abort
+                        * the transaction and don't commit anything.
+                        */
+                       if (backfill_tags(transport, transaction, tags_ref_map,
+                                         &fetch_head, worktrees))
+                               retcode = 1;
+               }
+
+               free_refs(tags_ref_map);
+       }
+
+       if (transaction) {
+               if (retcode)
+                       goto cleanup;
+
+               retcode = ref_transaction_commit(transaction, &err);
+               if (retcode) {
+                       error("%s", err.buf);
+                       ref_transaction_free(transaction);
+                       transaction = NULL;
+                       goto cleanup;
+               }
+       }
+
+       commit_fetch_head(&fetch_head);
+
        if (set_upstream) {
                struct branch *branch = branch_get("HEAD");
                struct ref *rm;
@@ -1641,7 +1746,7 @@ static int do_fetch(struct transport *transport,
                        if (!rm->peer_ref) {
                                if (source_ref) {
                                        warning(_("multiple branches detected, incompatible with --set-upstream"));
-                                       goto skip;
+                                       goto cleanup;
                                } else {
                                        source_ref = rm;
                                }
@@ -1655,7 +1760,7 @@ static int do_fetch(struct transport *transport,
                                warning(_("could not set upstream of HEAD to '%s' from '%s' when "
                                          "it does not point to any branch."),
                                        shortname, transport->remote->name);
-                               goto skip;
+                               goto cleanup;
                        }
 
                        if (!strcmp(source_ref->name, "HEAD") ||
@@ -1675,21 +1780,16 @@ static int do_fetch(struct transport *transport,
                                  "you need to specify exactly one branch with the --set-upstream option"));
                }
        }
-skip:
-       free_refs(ref_map);
 
-       /* if neither --no-tags nor --tags was specified, do automated tag
-        * following ... */
-       if (tags == TAGS_DEFAULT && autotags) {
-               struct ref **tail = &ref_map;
-               ref_map = NULL;
-               find_non_local_tags(remote_refs, &ref_map, &tail);
-               if (ref_map)
-                       backfill_tags(transport, ref_map, worktrees);
-               free_refs(ref_map);
+cleanup:
+       if (retcode && transaction) {
+               ref_transaction_abort(transaction, &err);
+               error("%s", err.buf);
        }
 
-cleanup:
+       close_fetch_head(&fetch_head);
+       strbuf_release(&err);
+       free_refs(ref_map);
        free_worktrees(worktrees);
        return retcode;
 }
@@ -2014,11 +2114,35 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
        }
 
        git_config(git_fetch_config, NULL);
-       prepare_repo_settings(the_repository);
-       the_repository->settings.command_requires_full_index = 0;
+       if (the_repository->gitdir) {
+               prepare_repo_settings(the_repository);
+               the_repository->settings.command_requires_full_index = 0;
+       }
 
        argc = parse_options(argc, argv, prefix,
                             builtin_fetch_options, builtin_fetch_usage, 0);
+
+       if (recurse_submodules_cli != RECURSE_SUBMODULES_DEFAULT)
+               recurse_submodules = recurse_submodules_cli;
+
+       if (negotiate_only) {
+               switch (recurse_submodules_cli) {
+               case RECURSE_SUBMODULES_OFF:
+               case RECURSE_SUBMODULES_DEFAULT:
+                       /*
+                        * --negotiate-only should never recurse into
+                        * submodules. Skip it by setting recurse_submodules to
+                        * RECURSE_SUBMODULES_OFF.
+                        */
+                       recurse_submodules = RECURSE_SUBMODULES_OFF;
+                       break;
+
+               default:
+                       die(_("options '%s' and '%s' cannot be used together"),
+                           "--negotiate-only", "--recurse-submodules");
+               }
+       }
+
        if (recurse_submodules != RECURSE_SUBMODULES_OFF) {
                int *sfjc = submodule_fetch_jobs_config == -1
                            ? &submodule_fetch_jobs_config : NULL;
@@ -2029,7 +2153,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
        }
 
        if (negotiate_only && !negotiation_tip.nr)
-               die(_("--negotiate-only needs one or more --negotiate-tip=*"));
+               die(_("--negotiate-only needs one or more --negotiation-tip=*"));
 
        if (deepen_relative) {
                if (deepen_relative < 0)
@@ -2100,7 +2224,8 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
                        gtransport->smart_options->acked_commits = &acked_commits;
                } else {
                        warning(_("protocol does not support --negotiate-only, exiting"));
-                       return 1;
+                       result = 1;
+                       goto cleanup;
                }
                if (server_options.nr)
                        gtransport->server_options = &server_options;
@@ -2146,17 +2271,26 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
                        max_children = fetch_parallel_config;
 
                add_options_to_argv(&options);
-               result = fetch_populated_submodules(the_repository,
-                                                   &options,
-                                                   submodule_prefix,
-                                                   recurse_submodules,
-                                                   recurse_submodules_default,
-                                                   verbosity < 0,
-                                                   max_children);
+               result = fetch_submodules(the_repository,
+                                         &options,
+                                         submodule_prefix,
+                                         recurse_submodules,
+                                         recurse_submodules_default,
+                                         verbosity < 0,
+                                         max_children);
                strvec_clear(&options);
        }
 
-       string_list_clear(&list, 0);
+       /*
+        * Skip irrelevant tasks because we know objects were not
+        * fetched.
+        *
+        * NEEDSWORK: as a future optimization, we can return early
+        * whenever objects were not fetched e.g. if we already have all
+        * of them.
+        */
+       if (negotiate_only)
+               goto cleanup;
 
        prepare_repo_settings(the_repository);
        if (fetch_write_commit_graph > 0 ||
@@ -2172,8 +2306,27 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
                                             NULL);
        }
 
-       if (enable_auto_gc)
+       if (enable_auto_gc) {
+               if (refetch) {
+                       /*
+                        * Hint auto-maintenance strongly to encourage repacking,
+                        * but respect config settings disabling it.
+                        */
+                       int opt_val;
+                       if (git_config_get_int("gc.autopacklimit", &opt_val))
+                               opt_val = -1;
+                       if (opt_val != 0)
+                               git_config_push_parameter("gc.autoPackLimit=1");
+
+                       if (git_config_get_int("maintenance.incremental-repack.auto", &opt_val))
+                               opt_val = -1;
+                       if (opt_val != 0)
+                               git_config_push_parameter("maintenance.incremental-repack.auto=-1");
+               }
                run_auto_maintenance(verbosity < 0);
+       }
 
+ cleanup:
+       string_list_clear(&list, 0);
        return result;
 }
diff --git a/builtin/fsmonitor--daemon.c b/builtin/fsmonitor--daemon.c
new file mode 100644 (file)
index 0000000..46be55a
--- /dev/null
@@ -0,0 +1,1479 @@
+#include "builtin.h"
+#include "config.h"
+#include "parse-options.h"
+#include "fsmonitor.h"
+#include "fsmonitor-ipc.h"
+#include "compat/fsmonitor/fsm-listen.h"
+#include "fsmonitor--daemon.h"
+#include "simple-ipc.h"
+#include "khash.h"
+#include "pkt-line.h"
+
+static const char * const builtin_fsmonitor__daemon_usage[] = {
+       N_("git fsmonitor--daemon start [<options>]"),
+       N_("git fsmonitor--daemon run [<options>]"),
+       N_("git fsmonitor--daemon stop"),
+       N_("git fsmonitor--daemon status"),
+       NULL
+};
+
+#ifdef HAVE_FSMONITOR_DAEMON_BACKEND
+/*
+ * Global state loaded from config.
+ */
+#define FSMONITOR__IPC_THREADS "fsmonitor.ipcthreads"
+static int fsmonitor__ipc_threads = 8;
+
+#define FSMONITOR__START_TIMEOUT "fsmonitor.starttimeout"
+static int fsmonitor__start_timeout_sec = 60;
+
+#define FSMONITOR__ANNOUNCE_STARTUP "fsmonitor.announcestartup"
+static int fsmonitor__announce_startup = 0;
+
+static int fsmonitor_config(const char *var, const char *value, void *cb)
+{
+       if (!strcmp(var, FSMONITOR__IPC_THREADS)) {
+               int i = git_config_int(var, value);
+               if (i < 1)
+                       return error(_("value of '%s' out of range: %d"),
+                                    FSMONITOR__IPC_THREADS, i);
+               fsmonitor__ipc_threads = i;
+               return 0;
+       }
+
+       if (!strcmp(var, FSMONITOR__START_TIMEOUT)) {
+               int i = git_config_int(var, value);
+               if (i < 0)
+                       return error(_("value of '%s' out of range: %d"),
+                                    FSMONITOR__START_TIMEOUT, i);
+               fsmonitor__start_timeout_sec = i;
+               return 0;
+       }
+
+       if (!strcmp(var, FSMONITOR__ANNOUNCE_STARTUP)) {
+               int is_bool;
+               int i = git_config_bool_or_int(var, value, &is_bool);
+               if (i < 0)
+                       return error(_("value of '%s' not bool or int: %d"),
+                                    var, i);
+               fsmonitor__announce_startup = i;
+               return 0;
+       }
+
+       return git_default_config(var, value, cb);
+}
+
+/*
+ * Acting as a CLIENT.
+ *
+ * Send a "quit" command to the `git-fsmonitor--daemon` (if running)
+ * and wait for it to shutdown.
+ */
+static int do_as_client__send_stop(void)
+{
+       struct strbuf answer = STRBUF_INIT;
+       int ret;
+
+       ret = fsmonitor_ipc__send_command("quit", &answer);
+
+       /* The quit command does not return any response data. */
+       strbuf_release(&answer);
+
+       if (ret)
+               return ret;
+
+       trace2_region_enter("fsm_client", "polling-for-daemon-exit", NULL);
+       while (fsmonitor_ipc__get_state() == IPC_STATE__LISTENING)
+               sleep_millisec(50);
+       trace2_region_leave("fsm_client", "polling-for-daemon-exit", NULL);
+
+       return 0;
+}
+
+static int do_as_client__status(void)
+{
+       enum ipc_active_state state = fsmonitor_ipc__get_state();
+
+       switch (state) {
+       case IPC_STATE__LISTENING:
+               printf(_("fsmonitor-daemon is watching '%s'\n"),
+                      the_repository->worktree);
+               return 0;
+
+       default:
+               printf(_("fsmonitor-daemon is not watching '%s'\n"),
+                      the_repository->worktree);
+               return 1;
+       }
+}
+
+enum fsmonitor_cookie_item_result {
+       FCIR_ERROR = -1, /* could not create cookie file ? */
+       FCIR_INIT,
+       FCIR_SEEN,
+       FCIR_ABORT,
+};
+
+struct fsmonitor_cookie_item {
+       struct hashmap_entry entry;
+       char *name;
+       enum fsmonitor_cookie_item_result result;
+};
+
+static int cookies_cmp(const void *data, const struct hashmap_entry *he1,
+                    const struct hashmap_entry *he2, const void *keydata)
+{
+       const struct fsmonitor_cookie_item *a =
+               container_of(he1, const struct fsmonitor_cookie_item, entry);
+       const struct fsmonitor_cookie_item *b =
+               container_of(he2, const struct fsmonitor_cookie_item, entry);
+
+       return strcmp(a->name, keydata ? keydata : b->name);
+}
+
+static enum fsmonitor_cookie_item_result with_lock__wait_for_cookie(
+       struct fsmonitor_daemon_state *state)
+{
+       /* assert current thread holding state->main_lock */
+
+       int fd;
+       struct fsmonitor_cookie_item *cookie;
+       struct strbuf cookie_pathname = STRBUF_INIT;
+       struct strbuf cookie_filename = STRBUF_INIT;
+       enum fsmonitor_cookie_item_result result;
+       int my_cookie_seq;
+
+       CALLOC_ARRAY(cookie, 1);
+
+       my_cookie_seq = state->cookie_seq++;
+
+       strbuf_addf(&cookie_filename, "%i-%i", getpid(), my_cookie_seq);
+
+       strbuf_addbuf(&cookie_pathname, &state->path_cookie_prefix);
+       strbuf_addbuf(&cookie_pathname, &cookie_filename);
+
+       cookie->name = strbuf_detach(&cookie_filename, NULL);
+       cookie->result = FCIR_INIT;
+       hashmap_entry_init(&cookie->entry, strhash(cookie->name));
+
+       hashmap_add(&state->cookies, &cookie->entry);
+
+       trace_printf_key(&trace_fsmonitor, "cookie-wait: '%s' '%s'",
+                        cookie->name, cookie_pathname.buf);
+
+       /*
+        * Create the cookie file on disk and then wait for a notification
+        * that the listener thread has seen it.
+        */
+       fd = open(cookie_pathname.buf, O_WRONLY | O_CREAT | O_EXCL, 0600);
+       if (fd < 0) {
+               error_errno(_("could not create fsmonitor cookie '%s'"),
+                           cookie->name);
+
+               cookie->result = FCIR_ERROR;
+               goto done;
+       }
+
+       /*
+        * Technically, close() and unlink() can fail, but we don't
+        * care here.  We only created the file to trigger a watch
+        * event from the FS to know that when we're up to date.
+        */
+       close(fd);
+       unlink(cookie_pathname.buf);
+
+       /*
+        * Technically, this is an infinite wait (well, unless another
+        * thread sends us an abort).  I'd like to change this to
+        * use `pthread_cond_timedwait()` and return an error/timeout
+        * and let the caller do the trivial response thing, but we
+        * don't have that routine in our thread-utils.
+        *
+        * After extensive beta testing I'm not really worried about
+        * this.  Also note that the above open() and unlink() calls
+        * will cause at least two FS events on that path, so the odds
+        * of getting stuck are pretty slim.
+        */
+       while (cookie->result == FCIR_INIT)
+               pthread_cond_wait(&state->cookies_cond,
+                                 &state->main_lock);
+
+done:
+       hashmap_remove(&state->cookies, &cookie->entry, NULL);
+
+       result = cookie->result;
+
+       free(cookie->name);
+       free(cookie);
+       strbuf_release(&cookie_pathname);
+
+       return result;
+}
+
+/*
+ * Mark these cookies as _SEEN and wake up the corresponding client threads.
+ */
+static void with_lock__mark_cookies_seen(struct fsmonitor_daemon_state *state,
+                                        const struct string_list *cookie_names)
+{
+       /* assert current thread holding state->main_lock */
+
+       int k;
+       int nr_seen = 0;
+
+       for (k = 0; k < cookie_names->nr; k++) {
+               struct fsmonitor_cookie_item key;
+               struct fsmonitor_cookie_item *cookie;
+
+               key.name = cookie_names->items[k].string;
+               hashmap_entry_init(&key.entry, strhash(key.name));
+
+               cookie = hashmap_get_entry(&state->cookies, &key, entry, NULL);
+               if (cookie) {
+                       trace_printf_key(&trace_fsmonitor, "cookie-seen: '%s'",
+                                        cookie->name);
+                       cookie->result = FCIR_SEEN;
+                       nr_seen++;
+               }
+       }
+
+       if (nr_seen)
+               pthread_cond_broadcast(&state->cookies_cond);
+}
+
+/*
+ * Set _ABORT on all pending cookies and wake up all client threads.
+ */
+static void with_lock__abort_all_cookies(struct fsmonitor_daemon_state *state)
+{
+       /* assert current thread holding state->main_lock */
+
+       struct hashmap_iter iter;
+       struct fsmonitor_cookie_item *cookie;
+       int nr_aborted = 0;
+
+       hashmap_for_each_entry(&state->cookies, &iter, cookie, entry) {
+               trace_printf_key(&trace_fsmonitor, "cookie-abort: '%s'",
+                                cookie->name);
+               cookie->result = FCIR_ABORT;
+               nr_aborted++;
+       }
+
+       if (nr_aborted)
+               pthread_cond_broadcast(&state->cookies_cond);
+}
+
+/*
+ * Requests to and from a FSMonitor Protocol V2 provider use an opaque
+ * "token" as a virtual timestamp.  Clients can request a summary of all
+ * created/deleted/modified files relative to a token.  In the response,
+ * clients receive a new token for the next (relative) request.
+ *
+ *
+ * Token Format
+ * ============
+ *
+ * The contents of the token are private and provider-specific.
+ *
+ * For the built-in fsmonitor--daemon, we define a token as follows:
+ *
+ *     "builtin" ":" <token_id> ":" <sequence_nr>
+ *
+ * The "builtin" prefix is used as a namespace to avoid conflicts
+ * with other providers (such as Watchman).
+ *
+ * The <token_id> is an arbitrary OPAQUE string, such as a GUID,
+ * UUID, or {timestamp,pid}.  It is used to group all filesystem
+ * events that happened while the daemon was monitoring (and in-sync
+ * with the filesystem).
+ *
+ *     Unlike FSMonitor Protocol V1, it is not defined as a timestamp
+ *     and does not define less-than/greater-than relationships.
+ *     (There are too many race conditions to rely on file system
+ *     event timestamps.)
+ *
+ * The <sequence_nr> is a simple integer incremented whenever the
+ * daemon needs to make its state public.  For example, if 1000 file
+ * system events come in, but no clients have requested the data,
+ * the daemon can continue to accumulate file changes in the same
+ * bin and does not need to advance the sequence number.  However,
+ * as soon as a client does arrive, the daemon needs to start a new
+ * bin and increment the sequence number.
+ *
+ *     The sequence number serves as the boundary between 2 sets
+ *     of bins -- the older ones that the client has already seen
+ *     and the newer ones that it hasn't.
+ *
+ * When a new <token_id> is created, the <sequence_nr> is reset to
+ * zero.
+ *
+ *
+ * About Token Ids
+ * ===============
+ *
+ * A new token_id is created:
+ *
+ * [1] each time the daemon is started.
+ *
+ * [2] any time that the daemon must re-sync with the filesystem
+ *     (such as when the kernel drops or we miss events on a very
+ *     active volume).
+ *
+ * [3] in response to a client "flush" command (for dropped event
+ *     testing).
+ *
+ * When a new token_id is created, the daemon is free to discard all
+ * cached filesystem events associated with any previous token_ids.
+ * Events associated with a non-current token_id will never be sent
+ * to a client.  A token_id change implicitly means that the daemon
+ * has gap in its event history.
+ *
+ * Therefore, clients that present a token with a stale (non-current)
+ * token_id will always be given a trivial response.
+ */
+struct fsmonitor_token_data {
+       struct strbuf token_id;
+       struct fsmonitor_batch *batch_head;
+       struct fsmonitor_batch *batch_tail;
+       uint64_t client_ref_count;
+};
+
+struct fsmonitor_batch {
+       struct fsmonitor_batch *next;
+       uint64_t batch_seq_nr;
+       const char **interned_paths;
+       size_t nr, alloc;
+       time_t pinned_time;
+};
+
+static struct fsmonitor_token_data *fsmonitor_new_token_data(void)
+{
+       static int test_env_value = -1;
+       static uint64_t flush_count = 0;
+       struct fsmonitor_token_data *token;
+       struct fsmonitor_batch *batch;
+
+       CALLOC_ARRAY(token, 1);
+       batch = fsmonitor_batch__new();
+
+       strbuf_init(&token->token_id, 0);
+       token->batch_head = batch;
+       token->batch_tail = batch;
+       token->client_ref_count = 0;
+
+       if (test_env_value < 0)
+               test_env_value = git_env_bool("GIT_TEST_FSMONITOR_TOKEN", 0);
+
+       if (!test_env_value) {
+               struct timeval tv;
+               struct tm tm;
+               time_t secs;
+
+               gettimeofday(&tv, NULL);
+               secs = tv.tv_sec;
+               gmtime_r(&secs, &tm);
+
+               strbuf_addf(&token->token_id,
+                           "%"PRIu64".%d.%4d%02d%02dT%02d%02d%02d.%06ldZ",
+                           flush_count++,
+                           getpid(),
+                           tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
+                           tm.tm_hour, tm.tm_min, tm.tm_sec,
+                           (long)tv.tv_usec);
+       } else {
+               strbuf_addf(&token->token_id, "test_%08x", test_env_value++);
+       }
+
+       /*
+        * We created a new <token_id> and are starting a new series
+        * of tokens with a zero <seq_nr>.
+        *
+        * Since clients cannot guess our new (non test) <token_id>
+        * they will always receive a trivial response (because of the
+        * mismatch on the <token_id>).  The trivial response will
+        * tell them our new <token_id> so that subsequent requests
+        * will be relative to our new series.  (And when sending that
+        * response, we pin the current head of the batch list.)
+        *
+        * Even if the client correctly guesses the <token_id>, their
+        * request of "builtin:<token_id>:0" asks for all changes MORE
+        * RECENT than batch/bin 0.
+        *
+        * This implies that it is a waste to accumulate paths in the
+        * initial batch/bin (because they will never be transmitted).
+        *
+        * So the daemon could be running for days and watching the
+        * file system, but doesn't need to actually accumulate any
+        * paths UNTIL we need to set a reference point for a later
+        * relative request.
+        *
+        * However, it is very useful for testing to always have a
+        * reference point set.  Pin batch 0 to force early file system
+        * events to accumulate.
+        */
+       if (test_env_value)
+               batch->pinned_time = time(NULL);
+
+       return token;
+}
+
+struct fsmonitor_batch *fsmonitor_batch__new(void)
+{
+       struct fsmonitor_batch *batch;
+
+       CALLOC_ARRAY(batch, 1);
+
+       return batch;
+}
+
+void fsmonitor_batch__free_list(struct fsmonitor_batch *batch)
+{
+       while (batch) {
+               struct fsmonitor_batch *next = batch->next;
+
+               /*
+                * The actual strings within the array of this batch
+                * are interned, so we don't own them.  We only own
+                * the array.
+                */
+               free(batch->interned_paths);
+               free(batch);
+
+               batch = next;
+       }
+}
+
+void fsmonitor_batch__add_path(struct fsmonitor_batch *batch,
+                              const char *path)
+{
+       const char *interned_path = strintern(path);
+
+       trace_printf_key(&trace_fsmonitor, "event: %s", interned_path);
+
+       ALLOC_GROW(batch->interned_paths, batch->nr + 1, batch->alloc);
+       batch->interned_paths[batch->nr++] = interned_path;
+}
+
+static void fsmonitor_batch__combine(struct fsmonitor_batch *batch_dest,
+                                    const struct fsmonitor_batch *batch_src)
+{
+       size_t k;
+
+       ALLOC_GROW(batch_dest->interned_paths,
+                  batch_dest->nr + batch_src->nr + 1,
+                  batch_dest->alloc);
+
+       for (k = 0; k < batch_src->nr; k++)
+               batch_dest->interned_paths[batch_dest->nr++] =
+                       batch_src->interned_paths[k];
+}
+
+/*
+ * To keep the batch list from growing unbounded in response to filesystem
+ * activity, we try to truncate old batches from the end of the list as
+ * they become irrelevant.
+ *
+ * We assume that the .git/index will be updated with the most recent token
+ * any time the index is updated.  And future commands will only ask for
+ * recent changes *since* that new token.  So as tokens advance into the
+ * future, older batch items will never be requested/needed.  So we can
+ * truncate them without loss of functionality.
+ *
+ * However, multiple commands may be talking to the daemon concurrently
+ * or perform a slow command, so a little "token skew" is possible.
+ * Therefore, we want this to be a little bit lazy and have a generous
+ * delay.
+ *
+ * The current reader thread walked backwards in time from `token->batch_head`
+ * back to `batch_marker` somewhere in the middle of the batch list.
+ *
+ * Let's walk backwards in time from that marker an arbitrary delay
+ * and truncate the list there.  Note that these timestamps are completely
+ * artificial (based on when we pinned the batch item) and not on any
+ * filesystem activity.
+ *
+ * Return the obsolete portion of the list after we have removed it from
+ * the official list so that the caller can free it after leaving the lock.
+ */
+#define MY_TIME_DELAY_SECONDS (5 * 60) /* seconds */
+
+static struct fsmonitor_batch *with_lock__truncate_old_batches(
+       struct fsmonitor_daemon_state *state,
+       const struct fsmonitor_batch *batch_marker)
+{
+       /* assert current thread holding state->main_lock */
+
+       const struct fsmonitor_batch *batch;
+       struct fsmonitor_batch *remainder;
+
+       if (!batch_marker)
+               return NULL;
+
+       trace_printf_key(&trace_fsmonitor, "Truncate: mark (%"PRIu64",%"PRIu64")",
+                        batch_marker->batch_seq_nr,
+                        (uint64_t)batch_marker->pinned_time);
+
+       for (batch = batch_marker; batch; batch = batch->next) {
+               time_t t;
+
+               if (!batch->pinned_time) /* an overflow batch */
+                       continue;
+
+               t = batch->pinned_time + MY_TIME_DELAY_SECONDS;
+               if (t > batch_marker->pinned_time) /* too close to marker */
+                       continue;
+
+               goto truncate_past_here;
+       }
+
+       return NULL;
+
+truncate_past_here:
+       state->current_token_data->batch_tail = (struct fsmonitor_batch *)batch;
+
+       remainder = ((struct fsmonitor_batch *)batch)->next;
+       ((struct fsmonitor_batch *)batch)->next = NULL;
+
+       return remainder;
+}
+
+static void fsmonitor_free_token_data(struct fsmonitor_token_data *token)
+{
+       if (!token)
+               return;
+
+       assert(token->client_ref_count == 0);
+
+       strbuf_release(&token->token_id);
+
+       fsmonitor_batch__free_list(token->batch_head);
+
+       free(token);
+}
+
+/*
+ * Flush all of our cached data about the filesystem.  Call this if we
+ * lose sync with the filesystem and miss some notification events.
+ *
+ * [1] If we are missing events, then we no longer have a complete
+ *     history of the directory (relative to our current start token).
+ *     We should create a new token and start fresh (as if we just
+ *     booted up).
+ *
+ * [2] Some of those lost events may have been for cookie files.  We
+ *     should assume the worst and abort them rather letting them starve.
+ *
+ * If there are no concurrent threads reading the current token data
+ * series, we can free it now.  Otherwise, let the last reader free
+ * it.
+ *
+ * Either way, the old token data series is no longer associated with
+ * our state data.
+ */
+static void with_lock__do_force_resync(struct fsmonitor_daemon_state *state)
+{
+       /* assert current thread holding state->main_lock */
+
+       struct fsmonitor_token_data *free_me = NULL;
+       struct fsmonitor_token_data *new_one = NULL;
+
+       new_one = fsmonitor_new_token_data();
+
+       if (state->current_token_data->client_ref_count == 0)
+               free_me = state->current_token_data;
+       state->current_token_data = new_one;
+
+       fsmonitor_free_token_data(free_me);
+
+       with_lock__abort_all_cookies(state);
+}
+
+void fsmonitor_force_resync(struct fsmonitor_daemon_state *state)
+{
+       pthread_mutex_lock(&state->main_lock);
+       with_lock__do_force_resync(state);
+       pthread_mutex_unlock(&state->main_lock);
+}
+
+/*
+ * Format an opaque token string to send to the client.
+ */
+static void with_lock__format_response_token(
+       struct strbuf *response_token,
+       const struct strbuf *response_token_id,
+       const struct fsmonitor_batch *batch)
+{
+       /* assert current thread holding state->main_lock */
+
+       strbuf_reset(response_token);
+       strbuf_addf(response_token, "builtin:%s:%"PRIu64,
+                   response_token_id->buf, batch->batch_seq_nr);
+}
+
+/*
+ * Parse an opaque token from the client.
+ * Returns -1 on error.
+ */
+static int fsmonitor_parse_client_token(const char *buf_token,
+                                       struct strbuf *requested_token_id,
+                                       uint64_t *seq_nr)
+{
+       const char *p;
+       char *p_end;
+
+       strbuf_reset(requested_token_id);
+       *seq_nr = 0;
+
+       if (!skip_prefix(buf_token, "builtin:", &p))
+               return -1;
+
+       while (*p && *p != ':')
+               strbuf_addch(requested_token_id, *p++);
+       if (!*p++)
+               return -1;
+
+       *seq_nr = (uint64_t)strtoumax(p, &p_end, 10);
+       if (*p_end)
+               return -1;
+
+       return 0;
+}
+
+KHASH_INIT(str, const char *, int, 0, kh_str_hash_func, kh_str_hash_equal)
+
+static int do_handle_client(struct fsmonitor_daemon_state *state,
+                           const char *command,
+                           ipc_server_reply_cb *reply,
+                           struct ipc_server_reply_data *reply_data)
+{
+       struct fsmonitor_token_data *token_data = NULL;
+       struct strbuf response_token = STRBUF_INIT;
+       struct strbuf requested_token_id = STRBUF_INIT;
+       struct strbuf payload = STRBUF_INIT;
+       uint64_t requested_oldest_seq_nr = 0;
+       uint64_t total_response_len = 0;
+       const char *p;
+       const struct fsmonitor_batch *batch_head;
+       const struct fsmonitor_batch *batch;
+       struct fsmonitor_batch *remainder = NULL;
+       intmax_t count = 0, duplicates = 0;
+       kh_str_t *shown;
+       int hash_ret;
+       int do_trivial = 0;
+       int do_flush = 0;
+       int do_cookie = 0;
+       enum fsmonitor_cookie_item_result cookie_result;
+
+       /*
+        * We expect `command` to be of the form:
+        *
+        * <command> := quit NUL
+        *            | flush NUL
+        *            | <V1-time-since-epoch-ns> NUL
+        *            | <V2-opaque-fsmonitor-token> NUL
+        */
+
+       if (!strcmp(command, "quit")) {
+               /*
+                * A client has requested over the socket/pipe that the
+                * daemon shutdown.
+                *
+                * Tell the IPC thread pool to shutdown (which completes
+                * the await in the main thread (which can stop the
+                * fsmonitor listener thread)).
+                *
+                * There is no reply to the client.
+                */
+               return SIMPLE_IPC_QUIT;
+
+       } else if (!strcmp(command, "flush")) {
+               /*
+                * Flush all of our cached data and generate a new token
+                * just like if we lost sync with the filesystem.
+                *
+                * Then send a trivial response using the new token.
+                */
+               do_flush = 1;
+               do_trivial = 1;
+
+       } else if (!skip_prefix(command, "builtin:", &p)) {
+               /* assume V1 timestamp or garbage */
+
+               char *p_end;
+
+               strtoumax(command, &p_end, 10);
+               trace_printf_key(&trace_fsmonitor,
+                                ((*p_end) ?
+                                 "fsmonitor: invalid command line '%s'" :
+                                 "fsmonitor: unsupported V1 protocol '%s'"),
+                                command);
+               do_trivial = 1;
+
+       } else {
+               /* We have "builtin:*" */
+               if (fsmonitor_parse_client_token(command, &requested_token_id,
+                                                &requested_oldest_seq_nr)) {
+                       trace_printf_key(&trace_fsmonitor,
+                                        "fsmonitor: invalid V2 protocol token '%s'",
+                                        command);
+                       do_trivial = 1;
+
+               } else {
+                       /*
+                        * We have a V2 valid token:
+                        *     "builtin:<token_id>:<seq_nr>"
+                        */
+                       do_cookie = 1;
+               }
+       }
+
+       pthread_mutex_lock(&state->main_lock);
+
+       if (!state->current_token_data)
+               BUG("fsmonitor state does not have a current token");
+
+       /*
+        * Write a cookie file inside the directory being watched in
+        * an effort to flush out existing filesystem events that we
+        * actually care about.  Suspend this client thread until we
+        * see the filesystem events for this cookie file.
+        *
+        * Creating the cookie lets us guarantee that our FS listener
+        * thread has drained the kernel queue and we are caught up
+        * with the kernel.
+        *
+        * If we cannot create the cookie (or otherwise guarantee that
+        * we are caught up), we send a trivial response.  We have to
+        * assume that there might be some very, very recent activity
+        * on the FS still in flight.
+        */
+       if (do_cookie) {
+               cookie_result = with_lock__wait_for_cookie(state);
+               if (cookie_result != FCIR_SEEN) {
+                       error(_("fsmonitor: cookie_result '%d' != SEEN"),
+                             cookie_result);
+                       do_trivial = 1;
+               }
+       }
+
+       if (do_flush)
+               with_lock__do_force_resync(state);
+
+       /*
+        * We mark the current head of the batch list as "pinned" so
+        * that the listener thread will treat this item as read-only
+        * (and prevent any more paths from being added to it) from
+        * now on.
+        */
+       token_data = state->current_token_data;
+       batch_head = token_data->batch_head;
+       ((struct fsmonitor_batch *)batch_head)->pinned_time = time(NULL);
+
+       /*
+        * FSMonitor Protocol V2 requires that we send a response header
+        * with a "new current token" and then all of the paths that changed
+        * since the "requested token".  We send the seq_nr of the just-pinned
+        * head batch so that future requests from a client will be relative
+        * to it.
+        */
+       with_lock__format_response_token(&response_token,
+                                        &token_data->token_id, batch_head);
+
+       reply(reply_data, response_token.buf, response_token.len + 1);
+       total_response_len += response_token.len + 1;
+
+       trace2_data_string("fsmonitor", the_repository, "response/token",
+                          response_token.buf);
+       trace_printf_key(&trace_fsmonitor, "response token: %s",
+                        response_token.buf);
+
+       if (!do_trivial) {
+               if (strcmp(requested_token_id.buf, token_data->token_id.buf)) {
+                       /*
+                        * The client last spoke to a different daemon
+                        * instance -OR- the daemon had to resync with
+                        * the filesystem (and lost events), so reject.
+                        */
+                       trace2_data_string("fsmonitor", the_repository,
+                                          "response/token", "different");
+                       do_trivial = 1;
+
+               } else if (requested_oldest_seq_nr <
+                          token_data->batch_tail->batch_seq_nr) {
+                       /*
+                        * The client wants older events than we have for
+                        * this token_id.  This means that the end of our
+                        * batch list was truncated and we cannot give the
+                        * client a complete snapshot relative to their
+                        * request.
+                        */
+                       trace_printf_key(&trace_fsmonitor,
+                                        "client requested truncated data");
+                       do_trivial = 1;
+               }
+       }
+
+       if (do_trivial) {
+               pthread_mutex_unlock(&state->main_lock);
+
+               reply(reply_data, "/", 2);
+
+               trace2_data_intmax("fsmonitor", the_repository,
+                                  "response/trivial", 1);
+
+               goto cleanup;
+       }
+
+       /*
+        * We're going to hold onto a pointer to the current
+        * token-data while we walk the list of batches of files.
+        * During this time, we will NOT be under the lock.
+        * So we ref-count it.
+        *
+        * This allows the listener thread to continue prepending
+        * new batches of items to the token-data (which we'll ignore).
+        *
+        * AND it allows the listener thread to do a token-reset
+        * (and install a new `current_token_data`).
+        */
+       token_data->client_ref_count++;
+
+       pthread_mutex_unlock(&state->main_lock);
+
+       /*
+        * The client request is relative to the token that they sent,
+        * so walk the batch list backwards from the current head back
+        * to the batch (sequence number) they named.
+        *
+        * We use khash to de-dup the list of pathnames.
+        *
+        * NEEDSWORK: each batch contains a list of interned strings,
+        * so we only need to do pointer comparisons here to build the
+        * hash table.  Currently, we're still comparing the string
+        * values.
+        */
+       shown = kh_init_str();
+       for (batch = batch_head;
+            batch && batch->batch_seq_nr > requested_oldest_seq_nr;
+            batch = batch->next) {
+               size_t k;
+
+               for (k = 0; k < batch->nr; k++) {
+                       const char *s = batch->interned_paths[k];
+                       size_t s_len;
+
+                       if (kh_get_str(shown, s) != kh_end(shown))
+                               duplicates++;
+                       else {
+                               kh_put_str(shown, s, &hash_ret);
+
+                               trace_printf_key(&trace_fsmonitor,
+                                                "send[%"PRIuMAX"]: %s",
+                                                count, s);
+
+                               /* Each path gets written with a trailing NUL */
+                               s_len = strlen(s) + 1;
+
+                               if (payload.len + s_len >=
+                                   LARGE_PACKET_DATA_MAX) {
+                                       reply(reply_data, payload.buf,
+                                             payload.len);
+                                       total_response_len += payload.len;
+                                       strbuf_reset(&payload);
+                               }
+
+                               strbuf_add(&payload, s, s_len);
+                               count++;
+                       }
+               }
+       }
+
+       if (payload.len) {
+               reply(reply_data, payload.buf, payload.len);
+               total_response_len += payload.len;
+       }
+
+       kh_release_str(shown);
+
+       pthread_mutex_lock(&state->main_lock);
+
+       if (token_data->client_ref_count > 0)
+               token_data->client_ref_count--;
+
+       if (token_data->client_ref_count == 0) {
+               if (token_data != state->current_token_data) {
+                       /*
+                        * The listener thread did a token-reset while we were
+                        * walking the batch list.  Therefore, this token is
+                        * stale and can be discarded completely.  If we are
+                        * the last reader thread using this token, we own
+                        * that work.
+                        */
+                       fsmonitor_free_token_data(token_data);
+               } else if (batch) {
+                       /*
+                        * We are holding the lock and are the only
+                        * reader of the ref-counted portion of the
+                        * list, so we get the honor of seeing if the
+                        * list can be truncated to save memory.
+                        *
+                        * The main loop did not walk to the end of the
+                        * list, so this batch is the first item in the
+                        * batch-list that is older than the requested
+                        * end-point sequence number.  See if the tail
+                        * end of the list is obsolete.
+                        */
+                       remainder = with_lock__truncate_old_batches(state,
+                                                                   batch);
+               }
+       }
+
+       pthread_mutex_unlock(&state->main_lock);
+
+       if (remainder)
+               fsmonitor_batch__free_list(remainder);
+
+       trace2_data_intmax("fsmonitor", the_repository, "response/length", total_response_len);
+       trace2_data_intmax("fsmonitor", the_repository, "response/count/files", count);
+       trace2_data_intmax("fsmonitor", the_repository, "response/count/duplicates", duplicates);
+
+cleanup:
+       strbuf_release(&response_token);
+       strbuf_release(&requested_token_id);
+       strbuf_release(&payload);
+
+       return 0;
+}
+
+static ipc_server_application_cb handle_client;
+
+static int handle_client(void *data,
+                        const char *command, size_t command_len,
+                        ipc_server_reply_cb *reply,
+                        struct ipc_server_reply_data *reply_data)
+{
+       struct fsmonitor_daemon_state *state = data;
+       int result;
+
+       /*
+        * The Simple IPC API now supports {char*, len} arguments, but
+        * FSMonitor always uses proper null-terminated strings, so
+        * we can ignore the command_len argument.  (Trust, but verify.)
+        */
+       if (command_len != strlen(command))
+               BUG("FSMonitor assumes text messages");
+
+       trace_printf_key(&trace_fsmonitor, "requested token: %s", command);
+
+       trace2_region_enter("fsmonitor", "handle_client", the_repository);
+       trace2_data_string("fsmonitor", the_repository, "request", command);
+
+       result = do_handle_client(state, command, reply, reply_data);
+
+       trace2_region_leave("fsmonitor", "handle_client", the_repository);
+
+       return result;
+}
+
+#define FSMONITOR_DIR           "fsmonitor--daemon"
+#define FSMONITOR_COOKIE_DIR    "cookies"
+#define FSMONITOR_COOKIE_PREFIX (FSMONITOR_DIR "/" FSMONITOR_COOKIE_DIR "/")
+
+enum fsmonitor_path_type fsmonitor_classify_path_workdir_relative(
+       const char *rel)
+{
+       if (fspathncmp(rel, ".git", 4))
+               return IS_WORKDIR_PATH;
+       rel += 4;
+
+       if (!*rel)
+               return IS_DOT_GIT;
+       if (*rel != '/')
+               return IS_WORKDIR_PATH; /* e.g. .gitignore */
+       rel++;
+
+       if (!fspathncmp(rel, FSMONITOR_COOKIE_PREFIX,
+                       strlen(FSMONITOR_COOKIE_PREFIX)))
+               return IS_INSIDE_DOT_GIT_WITH_COOKIE_PREFIX;
+
+       return IS_INSIDE_DOT_GIT;
+}
+
+enum fsmonitor_path_type fsmonitor_classify_path_gitdir_relative(
+       const char *rel)
+{
+       if (!fspathncmp(rel, FSMONITOR_COOKIE_PREFIX,
+                       strlen(FSMONITOR_COOKIE_PREFIX)))
+               return IS_INSIDE_GITDIR_WITH_COOKIE_PREFIX;
+
+       return IS_INSIDE_GITDIR;
+}
+
+static enum fsmonitor_path_type try_classify_workdir_abs_path(
+       struct fsmonitor_daemon_state *state,
+       const char *path)
+{
+       const char *rel;
+
+       if (fspathncmp(path, state->path_worktree_watch.buf,
+                      state->path_worktree_watch.len))
+               return IS_OUTSIDE_CONE;
+
+       rel = path + state->path_worktree_watch.len;
+
+       if (!*rel)
+               return IS_WORKDIR_PATH; /* it is the root dir exactly */
+       if (*rel != '/')
+               return IS_OUTSIDE_CONE;
+       rel++;
+
+       return fsmonitor_classify_path_workdir_relative(rel);
+}
+
+enum fsmonitor_path_type fsmonitor_classify_path_absolute(
+       struct fsmonitor_daemon_state *state,
+       const char *path)
+{
+       const char *rel;
+       enum fsmonitor_path_type t;
+
+       t = try_classify_workdir_abs_path(state, path);
+       if (state->nr_paths_watching == 1)
+               return t;
+       if (t != IS_OUTSIDE_CONE)
+               return t;
+
+       if (fspathncmp(path, state->path_gitdir_watch.buf,
+                      state->path_gitdir_watch.len))
+               return IS_OUTSIDE_CONE;
+
+       rel = path + state->path_gitdir_watch.len;
+
+       if (!*rel)
+               return IS_GITDIR; /* it is the <gitdir> exactly */
+       if (*rel != '/')
+               return IS_OUTSIDE_CONE;
+       rel++;
+
+       return fsmonitor_classify_path_gitdir_relative(rel);
+}
+
+/*
+ * We try to combine small batches at the front of the batch-list to avoid
+ * having a long list.  This hopefully makes it a little easier when we want
+ * to truncate and maintain the list.  However, we don't want the paths array
+ * to just keep growing and growing with realloc, so we insert an arbitrary
+ * limit.
+ */
+#define MY_COMBINE_LIMIT (1024)
+
+void fsmonitor_publish(struct fsmonitor_daemon_state *state,
+                      struct fsmonitor_batch *batch,
+                      const struct string_list *cookie_names)
+{
+       if (!batch && !cookie_names->nr)
+               return;
+
+       pthread_mutex_lock(&state->main_lock);
+
+       if (batch) {
+               struct fsmonitor_batch *head;
+
+               head = state->current_token_data->batch_head;
+               if (!head) {
+                       BUG("token does not have batch");
+               } else if (head->pinned_time) {
+                       /*
+                        * We cannot alter the current batch list
+                        * because:
+                        *
+                        * [a] it is being transmitted to at least one
+                        * client and the handle_client() thread has a
+                        * ref-count, but not a lock on the batch list
+                        * starting with this item.
+                        *
+                        * [b] it has been transmitted in the past to
+                        * at least one client such that future
+                        * requests are relative to this head batch.
+                        *
+                        * So, we can only prepend a new batch onto
+                        * the front of the list.
+                        */
+                       batch->batch_seq_nr = head->batch_seq_nr + 1;
+                       batch->next = head;
+                       state->current_token_data->batch_head = batch;
+               } else if (!head->batch_seq_nr) {
+                       /*
+                        * Batch 0 is unpinned.  See the note in
+                        * `fsmonitor_new_token_data()` about why we
+                        * don't need to accumulate these paths.
+                        */
+                       fsmonitor_batch__free_list(batch);
+               } else if (head->nr + batch->nr > MY_COMBINE_LIMIT) {
+                       /*
+                        * The head batch in the list has never been
+                        * transmitted to a client, but folding the
+                        * contents of the new batch onto it would
+                        * exceed our arbitrary limit, so just prepend
+                        * the new batch onto the list.
+                        */
+                       batch->batch_seq_nr = head->batch_seq_nr + 1;
+                       batch->next = head;
+                       state->current_token_data->batch_head = batch;
+               } else {
+                       /*
+                        * We are free to add the paths in the given
+                        * batch onto the end of the current head batch.
+                        */
+                       fsmonitor_batch__combine(head, batch);
+                       fsmonitor_batch__free_list(batch);
+               }
+       }
+
+       if (cookie_names->nr)
+               with_lock__mark_cookies_seen(state, cookie_names);
+
+       pthread_mutex_unlock(&state->main_lock);
+}
+
+static void *fsm_listen__thread_proc(void *_state)
+{
+       struct fsmonitor_daemon_state *state = _state;
+
+       trace2_thread_start("fsm-listen");
+
+       trace_printf_key(&trace_fsmonitor, "Watching: worktree '%s'",
+                        state->path_worktree_watch.buf);
+       if (state->nr_paths_watching > 1)
+               trace_printf_key(&trace_fsmonitor, "Watching: gitdir '%s'",
+                                state->path_gitdir_watch.buf);
+
+       fsm_listen__loop(state);
+
+       pthread_mutex_lock(&state->main_lock);
+       if (state->current_token_data &&
+           state->current_token_data->client_ref_count == 0)
+               fsmonitor_free_token_data(state->current_token_data);
+       state->current_token_data = NULL;
+       pthread_mutex_unlock(&state->main_lock);
+
+       trace2_thread_exit();
+       return NULL;
+}
+
+static int fsmonitor_run_daemon_1(struct fsmonitor_daemon_state *state)
+{
+       struct ipc_server_opts ipc_opts = {
+               .nr_threads = fsmonitor__ipc_threads,
+
+               /*
+                * We know that there are no other active threads yet,
+                * so we can let the IPC layer temporarily chdir() if
+                * it needs to when creating the server side of the
+                * Unix domain socket.
+                */
+               .uds_disallow_chdir = 0
+       };
+
+       /*
+        * Start the IPC thread pool before the we've started the file
+        * system event listener thread so that we have the IPC handle
+        * before we need it.
+        */
+       if (ipc_server_run_async(&state->ipc_server_data,
+                                fsmonitor_ipc__get_path(), &ipc_opts,
+                                handle_client, state))
+               return error_errno(
+                       _("could not start IPC thread pool on '%s'"),
+                       fsmonitor_ipc__get_path());
+
+       /*
+        * Start the fsmonitor listener thread to collect filesystem
+        * events.
+        */
+       if (pthread_create(&state->listener_thread, NULL,
+                          fsm_listen__thread_proc, state) < 0) {
+               ipc_server_stop_async(state->ipc_server_data);
+               ipc_server_await(state->ipc_server_data);
+
+               return error(_("could not start fsmonitor listener thread"));
+       }
+
+       /*
+        * The daemon is now fully functional in background threads.
+        * Wait for the IPC thread pool to shutdown (whether by client
+        * request or from filesystem activity).
+        */
+       ipc_server_await(state->ipc_server_data);
+
+       /*
+        * The fsmonitor listener thread may have received a shutdown
+        * event from the IPC thread pool, but it doesn't hurt to tell
+        * it again.  And wait for it to shutdown.
+        */
+       fsm_listen__stop_async(state);
+       pthread_join(state->listener_thread, NULL);
+
+       return state->error_code;
+}
+
+static int fsmonitor_run_daemon(void)
+{
+       struct fsmonitor_daemon_state state;
+       int err;
+
+       memset(&state, 0, sizeof(state));
+
+       hashmap_init(&state.cookies, cookies_cmp, NULL, 0);
+       pthread_mutex_init(&state.main_lock, NULL);
+       pthread_cond_init(&state.cookies_cond, NULL);
+       state.error_code = 0;
+       state.current_token_data = fsmonitor_new_token_data();
+
+       /* Prepare to (recursively) watch the <worktree-root> directory. */
+       strbuf_init(&state.path_worktree_watch, 0);
+       strbuf_addstr(&state.path_worktree_watch, absolute_path(get_git_work_tree()));
+       state.nr_paths_watching = 1;
+
+       /*
+        * We create and delete cookie files somewhere inside the .git
+        * directory to help us keep sync with the file system.  If
+        * ".git" is not a directory, then <gitdir> is not inside the
+        * cone of <worktree-root>, so set up a second watch to watch
+        * the <gitdir> so that we get events for the cookie files.
+        */
+       strbuf_init(&state.path_gitdir_watch, 0);
+       strbuf_addbuf(&state.path_gitdir_watch, &state.path_worktree_watch);
+       strbuf_addstr(&state.path_gitdir_watch, "/.git");
+       if (!is_directory(state.path_gitdir_watch.buf)) {
+               strbuf_reset(&state.path_gitdir_watch);
+               strbuf_addstr(&state.path_gitdir_watch, absolute_path(get_git_dir()));
+               state.nr_paths_watching = 2;
+       }
+
+       /*
+        * We will write filesystem syncing cookie files into
+        * <gitdir>/<fsmonitor-dir>/<cookie-dir>/<pid>-<seq>.
+        *
+        * The extra layers of subdirectories here keep us from
+        * changing the mtime on ".git/" or ".git/foo/" when we create
+        * or delete cookie files.
+        *
+        * There have been problems with some IDEs that do a
+        * non-recursive watch of the ".git/" directory and run a
+        * series of commands any time something happens.
+        *
+        * For example, if we place our cookie files directly in
+        * ".git/" or ".git/foo/" then a `git status` (or similar
+        * command) from the IDE will cause a cookie file to be
+        * created in one of those dirs.  This causes the mtime of
+        * those dirs to change.  This triggers the IDE's watch
+        * notification.  This triggers the IDE to run those commands
+        * again.  And the process repeats and the machine never goes
+        * idle.
+        *
+        * Adding the extra layers of subdirectories prevents the
+        * mtime of ".git/" and ".git/foo" from changing when a
+        * cookie file is created.
+        */
+       strbuf_init(&state.path_cookie_prefix, 0);
+       strbuf_addbuf(&state.path_cookie_prefix, &state.path_gitdir_watch);
+
+       strbuf_addch(&state.path_cookie_prefix, '/');
+       strbuf_addstr(&state.path_cookie_prefix, FSMONITOR_DIR);
+       mkdir(state.path_cookie_prefix.buf, 0777);
+
+       strbuf_addch(&state.path_cookie_prefix, '/');
+       strbuf_addstr(&state.path_cookie_prefix, FSMONITOR_COOKIE_DIR);
+       mkdir(state.path_cookie_prefix.buf, 0777);
+
+       strbuf_addch(&state.path_cookie_prefix, '/');
+
+       /*
+        * Confirm that we can create platform-specific resources for the
+        * filesystem listener before we bother starting all the threads.
+        */
+       if (fsm_listen__ctor(&state)) {
+               err = error(_("could not initialize listener thread"));
+               goto done;
+       }
+
+       err = fsmonitor_run_daemon_1(&state);
+
+done:
+       pthread_cond_destroy(&state.cookies_cond);
+       pthread_mutex_destroy(&state.main_lock);
+       fsm_listen__dtor(&state);
+
+       ipc_server_free(state.ipc_server_data);
+
+       strbuf_release(&state.path_worktree_watch);
+       strbuf_release(&state.path_gitdir_watch);
+       strbuf_release(&state.path_cookie_prefix);
+
+       return err;
+}
+
+static int try_to_run_foreground_daemon(int detach_console)
+{
+       /*
+        * Technically, we don't need to probe for an existing daemon
+        * process, since we could just call `fsmonitor_run_daemon()`
+        * and let it fail if the pipe/socket is busy.
+        *
+        * However, this method gives us a nicer error message for a
+        * common error case.
+        */
+       if (fsmonitor_ipc__get_state() == IPC_STATE__LISTENING)
+               die(_("fsmonitor--daemon is already running '%s'"),
+                   the_repository->worktree);
+
+       if (fsmonitor__announce_startup) {
+               fprintf(stderr, _("running fsmonitor-daemon in '%s'\n"),
+                       the_repository->worktree);
+               fflush(stderr);
+       }
+
+#ifdef GIT_WINDOWS_NATIVE
+       if (detach_console)
+               FreeConsole();
+#endif
+
+       return !!fsmonitor_run_daemon();
+}
+
+static start_bg_wait_cb bg_wait_cb;
+
+static int bg_wait_cb(const struct child_process *cp, void *cb_data)
+{
+       enum ipc_active_state s = fsmonitor_ipc__get_state();
+
+       switch (s) {
+       case IPC_STATE__LISTENING:
+               /* child is "ready" */
+               return 0;
+
+       case IPC_STATE__NOT_LISTENING:
+       case IPC_STATE__PATH_NOT_FOUND:
+               /* give child more time */
+               return 1;
+
+       default:
+       case IPC_STATE__INVALID_PATH:
+       case IPC_STATE__OTHER_ERROR:
+               /* all the time in world won't help */
+               return -1;
+       }
+}
+
+static int try_to_start_background_daemon(void)
+{
+       struct child_process cp = CHILD_PROCESS_INIT;
+       enum start_bg_result sbgr;
+
+       /*
+        * Before we try to create a background daemon process, see
+        * if a daemon process is already listening.  This makes it
+        * easier for us to report an already-listening error to the
+        * console, since our spawn/daemon can only report the success
+        * of creating the background process (and not whether it
+        * immediately exited).
+        */
+       if (fsmonitor_ipc__get_state() == IPC_STATE__LISTENING)
+               die(_("fsmonitor--daemon is already running '%s'"),
+                   the_repository->worktree);
+
+       if (fsmonitor__announce_startup) {
+               fprintf(stderr, _("starting fsmonitor-daemon in '%s'\n"),
+                       the_repository->worktree);
+               fflush(stderr);
+       }
+
+       cp.git_cmd = 1;
+
+       strvec_push(&cp.args, "fsmonitor--daemon");
+       strvec_push(&cp.args, "run");
+       strvec_push(&cp.args, "--detach");
+       strvec_pushf(&cp.args, "--ipc-threads=%d", fsmonitor__ipc_threads);
+
+       cp.no_stdin = 1;
+       cp.no_stdout = 1;
+       cp.no_stderr = 1;
+
+       sbgr = start_bg_command(&cp, bg_wait_cb, NULL,
+                               fsmonitor__start_timeout_sec);
+
+       switch (sbgr) {
+       case SBGR_READY:
+               return 0;
+
+       default:
+       case SBGR_ERROR:
+       case SBGR_CB_ERROR:
+               return error(_("daemon failed to start"));
+
+       case SBGR_TIMEOUT:
+               return error(_("daemon not online yet"));
+
+       case SBGR_DIED:
+               return error(_("daemon terminated"));
+       }
+}
+
+int cmd_fsmonitor__daemon(int argc, const char **argv, const char *prefix)
+{
+       const char *subcmd;
+       int detach_console = 0;
+
+       struct option options[] = {
+               OPT_BOOL(0, "detach", &detach_console, N_("detach from console")),
+               OPT_INTEGER(0, "ipc-threads",
+                           &fsmonitor__ipc_threads,
+                           N_("use <n> ipc worker threads")),
+               OPT_INTEGER(0, "start-timeout",
+                           &fsmonitor__start_timeout_sec,
+                           N_("max seconds to wait for background daemon startup")),
+
+               OPT_END()
+       };
+
+       git_config(fsmonitor_config, NULL);
+
+       argc = parse_options(argc, argv, prefix, options,
+                            builtin_fsmonitor__daemon_usage, 0);
+       if (argc != 1)
+               usage_with_options(builtin_fsmonitor__daemon_usage, options);
+       subcmd = argv[0];
+
+       if (fsmonitor__ipc_threads < 1)
+               die(_("invalid 'ipc-threads' value (%d)"),
+                   fsmonitor__ipc_threads);
+
+       if (!strcmp(subcmd, "start"))
+               return !!try_to_start_background_daemon();
+
+       if (!strcmp(subcmd, "run"))
+               return !!try_to_run_foreground_daemon(detach_console);
+
+       if (!strcmp(subcmd, "stop"))
+               return !!do_as_client__send_stop();
+
+       if (!strcmp(subcmd, "status"))
+               return !!do_as_client__status();
+
+       die(_("Unhandled subcommand '%s'"), subcmd);
+}
+
+#else
+int cmd_fsmonitor__daemon(int argc, const char **argv, const char *prefix)
+{
+       struct option options[] = {
+               OPT_END()
+       };
+
+       if (argc == 2 && !strcmp(argv[1], "-h"))
+               usage_with_options(builtin_fsmonitor__daemon_usage, options);
+
+       die(_("fsmonitor--daemon not supported on this platform"));
+}
+#endif
index 8e60ef1eaba426eae66c99d15d5dfdcbc26efac4..b335cffa33561fa80f268260a7edbc7af9ae4136 100644 (file)
@@ -30,8 +30,8 @@
 #include "promisor-remote.h"
 #include "refs.h"
 #include "remote.h"
-#include "object-store.h"
 #include "exec-cmd.h"
+#include "hook.h"
 
 #define FAILED_RUN "failed to run %s"
 
@@ -394,7 +394,7 @@ static int need_to_gc(void)
        else
                return 0;
 
-       if (run_hook_le(NULL, "pre-auto-gc", NULL))
+       if (run_hooks("pre-auto-gc"))
                return 0;
        return 1;
 }
index 9e34a820ad4d837937a0ecb2bc712de972506b50..bcb07ea7f75ba35079d0093248df0647292665a1 100644 (file)
@@ -26,6 +26,8 @@
 #include "object-store.h"
 #include "packfile.h"
 
+static const char *grep_prefix;
+
 static char const * const grep_usage[] = {
        N_("git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"),
        NULL
@@ -284,7 +286,7 @@ static int wait_all(void)
 static int grep_cmd_config(const char *var, const char *value, void *cb)
 {
        int st = grep_config(var, value, cb);
-       if (git_color_default_config(var, value, cb) < 0)
+       if (git_color_default_config(var, value, NULL) < 0)
                st = -1;
 
        if (!strcmp(var, "grep.threads")) {
@@ -315,11 +317,11 @@ static void grep_source_name(struct grep_opt *opt, const char *filename,
        strbuf_reset(out);
 
        if (opt->null_following_name) {
-               if (opt->relative && opt->prefix_length) {
+               if (opt->relative && grep_prefix) {
                        struct strbuf rel_buf = STRBUF_INIT;
                        const char *rel_name =
                                relative_path(filename + tree_name_len,
-                                             opt->prefix, &rel_buf);
+                                             grep_prefix, &rel_buf);
 
                        if (tree_name_len)
                                strbuf_add(out, filename, tree_name_len);
@@ -332,8 +334,8 @@ static void grep_source_name(struct grep_opt *opt, const char *filename,
                return;
        }
 
-       if (opt->relative && opt->prefix_length)
-               quote_path(filename + tree_name_len, opt->prefix, out, 0);
+       if (opt->relative && grep_prefix)
+               quote_path(filename + tree_name_len, grep_prefix, out, 0);
        else
                quote_c_style(filename + tree_name_len, out, NULL, 0);
 
@@ -482,7 +484,7 @@ static int grep_submodule(struct grep_opt *opt,
                object_type = oid_object_info(subrepo, oid, NULL);
                obj_read_unlock();
                data = read_object_with_reference(subrepo,
-                                                 oid, tree_type,
+                                                 oid, OBJ_TREE,
                                                  &size, NULL);
                if (!data)
                        die(_("unable to read tree (%s)"), oid_to_hex(oid));
@@ -651,7 +653,7 @@ static int grep_object(struct grep_opt *opt, const struct pathspec *pathspec,
                int hit, len;
 
                data = read_object_with_reference(opt->repo,
-                                                 &obj->oid, tree_type,
+                                                 &obj->oid, OBJ_TREE,
                                                  &size, NULL);
                if (!data)
                        die(_("unable to read tree (%s)"), oid_to_hex(&obj->oid));
@@ -843,7 +845,6 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
        int i;
        int dummy;
        int use_index = 1;
-       int pattern_type_arg = GREP_PATTERN_TYPE_UNSPECIFIED;
        int allow_revs;
 
        struct option options[] = {
@@ -877,16 +878,16 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
                        N_("descend at most <depth> levels"), PARSE_OPT_NONEG,
                        NULL, 1 },
                OPT_GROUP(""),
-               OPT_SET_INT('E', "extended-regexp", &pattern_type_arg,
+               OPT_SET_INT('E', "extended-regexp", &opt.pattern_type_option,
                            N_("use extended POSIX regular expressions"),
                            GREP_PATTERN_TYPE_ERE),
-               OPT_SET_INT('G', "basic-regexp", &pattern_type_arg,
+               OPT_SET_INT('G', "basic-regexp", &opt.pattern_type_option,
                            N_("use basic POSIX regular expressions (default)"),
                            GREP_PATTERN_TYPE_BRE),
-               OPT_SET_INT('F', "fixed-strings", &pattern_type_arg,
+               OPT_SET_INT('F', "fixed-strings", &opt.pattern_type_option,
                            N_("interpret patterns as fixed strings"),
                            GREP_PATTERN_TYPE_FIXED),
-               OPT_SET_INT('P', "perl-regexp", &pattern_type_arg,
+               OPT_SET_INT('P', "perl-regexp", &opt.pattern_type_option,
                            N_("use Perl-compatible regular expressions"),
                            GREP_PATTERN_TYPE_PCRE),
                OPT_GROUP(""),
@@ -962,9 +963,10 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
                           PARSE_OPT_NOCOMPLETE),
                OPT_END()
        };
+       grep_prefix = prefix;
 
-       git_config(grep_cmd_config, NULL);
-       grep_init(&opt, the_repository, prefix);
+       grep_init(&opt, the_repository);
+       git_config(grep_cmd_config, &opt);
 
        /*
         * If there is no -- then the paths must exist in the working
@@ -979,7 +981,6 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
        argc = parse_options(argc, argv, prefix, options, grep_usage,
                             PARSE_OPT_KEEP_DASHDASH |
                             PARSE_OPT_STOP_AT_NON_OPTION);
-       grep_commit_pattern_type(pattern_type_arg, &opt);
 
        if (use_index && !startup_info->have_repository) {
                int fallback = 0;
@@ -1167,11 +1168,9 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
        if (!show_in_pager && !opt.status_only)
                setup_pager();
 
-       if (!use_index && (untracked || cached))
-               die(_("--cached or --untracked cannot be used with --no-index"));
-
-       if (untracked && cached)
-               die(_("--untracked cannot be used with --cached"));
+       die_for_incompatible_opt3(!use_index, "--no-index",
+                                 untracked, "--untracked",
+                                 cached, "--cached");
 
        if (!use_index || untracked) {
                int use_exclude = (opt_exclude < 0) ? use_index : !!opt_exclude;
index c7b3ad74c60cb914aa480b24ab7fc768903159bc..fbae878c2b951599fcfb82021185c67cc942b5ca 100644 (file)
@@ -25,7 +25,7 @@ static int hash_literally(struct object_id *oid, int fd, const char *type, unsig
        if (strbuf_read(&buf, fd, 4096) < 0)
                ret = -1;
        else
-               ret = hash_object_file_literally(buf.buf, buf.len, type, oid,
+               ret = write_object_file_literally(buf.buf, buf.len, type, oid,
                                                 flags);
        strbuf_release(&buf);
        return ret;
@@ -81,7 +81,7 @@ int cmd_hash_object(int argc, const char **argv, const char *prefix)
 {
        static const char * const hash_object_usage[] = {
                N_("git hash-object [-t <type>] [-w] [--path=<file> | --no-filters] [--stdin] [--] <file>..."),
-               N_("git hash-object  --stdin-paths"),
+               "git hash-object  --stdin-paths",
                NULL
        };
        const char *type = blob_type;
@@ -92,6 +92,7 @@ int cmd_hash_object(int argc, const char **argv, const char *prefix)
        int nongit = 0;
        unsigned flags = HASH_FORMAT_CHECK;
        const char *vpath = NULL;
+       char *vpath_free = NULL;
        const struct option hash_object_options[] = {
                OPT_STRING('t', NULL, &type, N_("type"), N_("object type")),
                OPT_BIT('w', NULL, &flags, N_("write the object into the object database"),
@@ -114,8 +115,10 @@ int cmd_hash_object(int argc, const char **argv, const char *prefix)
        else
                prefix = setup_git_directory_gently(&nongit);
 
-       if (vpath && prefix)
-               vpath = prefix_filename(prefix, vpath);
+       if (vpath && prefix) {
+               vpath_free = prefix_filename(prefix, vpath);
+               vpath = vpath_free;
+       }
 
        git_config(git_default_config, NULL);
 
@@ -156,5 +159,7 @@ int cmd_hash_object(int argc, const char **argv, const char *prefix)
        if (stdin_paths)
                hash_stdin_paths(type, no_filters, flags, literally);
 
+       free(vpath_free);
+
        return 0;
 }
index d387131dd836c4eed62aa243ddbc1789934db8e0..222f994f863cba4226e867bf0f1022e9d551e308 100644 (file)
@@ -51,9 +51,14 @@ static const char *html_path;
 static int verbose = 1;
 static enum help_format help_format = HELP_FORMAT_NONE;
 static int exclude_guides;
+static int show_external_commands = -1;
+static int show_aliases = -1;
 static struct option builtin_help_options[] = {
        OPT_CMDMODE('a', "all", &cmd_mode, N_("print all available commands"),
                    HELP_ACTION_ALL),
+       OPT_BOOL(0, "external-commands", &show_external_commands,
+                N_("show external commands in --all")),
+       OPT_BOOL(0, "aliases", &show_aliases, N_("show aliases in --all")),
        OPT_HIDDEN_BOOL(0, "exclude-guides", &exclude_guides, N_("exclude guides")),
        OPT_SET_INT('m', "man", &help_format, N_("show man page"), HELP_FORMAT_MAN),
        OPT_SET_INT('w', "web", &help_format, N_("show manual in web browser"),
@@ -75,10 +80,10 @@ static struct option builtin_help_options[] = {
 };
 
 static const char * const builtin_help_usage[] = {
-       N_("git help [-a|--all] [--[no-]verbose]]\n"
-          "         [[-i|--info] [-m|--man] [-w|--web]] [<command>]"),
-       N_("git help [-g|--guides]"),
-       N_("git help [-c|--config]"),
+       "git help [-a|--all] [--[no-]verbose]] [--[no-]external-commands] [--[no-]aliases]",
+       N_("git help [[-i|--info] [-m|--man] [-w|--web]] [<command>]"),
+       "git help [-g|--guides]",
+       "git help [-c|--config]",
        NULL
 };
 
@@ -574,11 +579,40 @@ static const char *check_git_cmd(const char* cmd)
        return cmd;
 }
 
-static void no_extra_argc(int argc)
+static void no_help_format(const char *opt_mode, enum help_format fmt)
+{
+       const char *opt_fmt;
+
+       switch (fmt) {
+       case HELP_FORMAT_NONE:
+               return;
+       case HELP_FORMAT_MAN:
+               opt_fmt = "--man";
+               break;
+       case HELP_FORMAT_INFO:
+               opt_fmt = "--info";
+               break;
+       case HELP_FORMAT_WEB:
+               opt_fmt = "--web";
+               break;
+       default:
+               BUG("unreachable");
+       }
+
+       usage_msg_optf(_("options '%s' and '%s' cannot be used together"),
+                      builtin_help_usage, builtin_help_options, opt_mode,
+                      opt_fmt);
+}
+
+static void opt_mode_usage(int argc, const char *opt_mode,
+                          enum help_format fmt)
 {
        if (argc)
-               usage_msg_opt(_("this option doesn't take any other arguments"),
-                             builtin_help_usage, builtin_help_options);
+               usage_msg_optf(_("the '%s' option doesn't take any non-option arguments"),
+                              builtin_help_usage, builtin_help_options,
+                              opt_mode);
+
+       no_help_format(opt_mode, fmt);
 }
 
 int cmd_help(int argc, const char **argv, const char *prefix)
@@ -591,11 +625,19 @@ int cmd_help(int argc, const char **argv, const char *prefix)
                        builtin_help_usage, 0);
        parsed_help_format = help_format;
 
+       if (cmd_mode != HELP_ACTION_ALL &&
+           (show_external_commands >= 0 ||
+            show_aliases >= 0))
+               usage_msg_opt(_("the '--no-[external-commands|aliases]' options can only be used with '--all'"),
+                             builtin_help_usage, builtin_help_options);
+
        switch (cmd_mode) {
        case HELP_ACTION_ALL:
+               opt_mode_usage(argc, "--all", help_format);
                if (verbose) {
                        setup_pager();
-                       list_all_cmds_help();
+                       list_all_cmds_help(show_external_commands,
+                                          show_aliases);
                        return 0;
                }
                printf(_("usage: %s%s"), _(git_usage_string), "\n\n");
@@ -604,20 +646,21 @@ int cmd_help(int argc, const char **argv, const char *prefix)
                printf("%s\n", _(git_more_info_string));
                break;
        case HELP_ACTION_GUIDES:
-               no_extra_argc(argc);
+               opt_mode_usage(argc, "--guides", help_format);
                list_guides_help();
                printf("%s\n", _(git_more_info_string));
                return 0;
        case HELP_ACTION_CONFIG_FOR_COMPLETION:
-               no_extra_argc(argc);
+               opt_mode_usage(argc, "--config-for-completion", help_format);
                list_config_help(SHOW_CONFIG_VARS);
                return 0;
        case HELP_ACTION_CONFIG_SECTIONS_FOR_COMPLETION:
-               no_extra_argc(argc);
+               opt_mode_usage(argc, "--config-sections-for-completion",
+                              help_format);
                list_config_help(SHOW_CONFIG_SECTIONS);
                return 0;
        case HELP_ACTION_CONFIG:
-               no_extra_argc(argc);
+               opt_mode_usage(argc, "--config", help_format);
                setup_pager();
                list_config_help(SHOW_CONFIG_HUMAN);
                printf("\n%s\n", _("'git help config' for more information"));
diff --git a/builtin/hook.c b/builtin/hook.c
new file mode 100644 (file)
index 0000000..54e5c6e
--- /dev/null
@@ -0,0 +1,84 @@
+#include "cache.h"
+#include "builtin.h"
+#include "config.h"
+#include "hook.h"
+#include "parse-options.h"
+#include "strbuf.h"
+#include "strvec.h"
+
+#define BUILTIN_HOOK_RUN_USAGE \
+       N_("git hook run [--ignore-missing] <hook-name> [-- <hook-args>]")
+
+static const char * const builtin_hook_usage[] = {
+       BUILTIN_HOOK_RUN_USAGE,
+       NULL
+};
+
+static const char * const builtin_hook_run_usage[] = {
+       BUILTIN_HOOK_RUN_USAGE,
+       NULL
+};
+
+static int run(int argc, const char **argv, const char *prefix)
+{
+       int i;
+       struct run_hooks_opt opt = RUN_HOOKS_OPT_INIT;
+       int ignore_missing = 0;
+       const char *hook_name;
+       struct option run_options[] = {
+               OPT_BOOL(0, "ignore-missing", &ignore_missing,
+                        N_("silently ignore missing requested <hook-name>")),
+               OPT_END(),
+       };
+       int ret;
+
+       argc = parse_options(argc, argv, prefix, run_options,
+                            builtin_hook_run_usage,
+                            PARSE_OPT_KEEP_DASHDASH);
+
+       if (!argc)
+               goto usage;
+
+       /*
+        * Having a -- for "run" when providing <hook-args> is
+        * mandatory.
+        */
+       if (argc > 1 && strcmp(argv[1], "--") &&
+           strcmp(argv[1], "--end-of-options"))
+               goto usage;
+
+       /* Add our arguments, start after -- */
+       for (i = 2 ; i < argc; i++)
+               strvec_push(&opt.args, argv[i]);
+
+       /* Need to take into account core.hooksPath */
+       git_config(git_default_config, NULL);
+
+       hook_name = argv[0];
+       if (!ignore_missing)
+               opt.error_if_missing = 1;
+       ret = run_hooks_opt(hook_name, &opt);
+       if (ret < 0) /* error() return */
+               ret = 1;
+       return ret;
+usage:
+       usage_with_options(builtin_hook_run_usage, run_options);
+}
+
+int cmd_hook(int argc, const char **argv, const char *prefix)
+{
+       struct option builtin_hook_options[] = {
+               OPT_END(),
+       };
+
+       argc = parse_options(argc, argv, NULL, builtin_hook_options,
+                            builtin_hook_usage, PARSE_OPT_STOP_AT_NON_OPTION);
+       if (!argc)
+               goto usage;
+
+       if (!strcmp(argv[0], "run"))
+               return run(argc, argv, prefix);
+
+usage:
+       usage_with_options(builtin_hook_usage, builtin_hook_options);
+}
index 3c2e6aee3cc67be5df9bc1b4b62f5cd8a5c26b86..680b66b0636522be7bf831e69be3adf2115ff94a 100644 (file)
@@ -323,8 +323,12 @@ static void use(int bytes)
        if (signed_add_overflows(consumed_bytes, bytes))
                die(_("pack too large for current definition of off_t"));
        consumed_bytes += bytes;
-       if (max_input_size && consumed_bytes > max_input_size)
-               die(_("pack exceeds maximum allowed size"));
+       if (max_input_size && consumed_bytes > max_input_size) {
+               struct strbuf size_limit = STRBUF_INIT;
+               strbuf_humanise_bytes(&size_limit, max_input_size);
+               die(_("pack exceeds maximum allowed size (%s)"),
+                   size_limit.buf);
+       }
 }
 
 static const char *open_pack_file(const char *pack_name)
@@ -449,8 +453,7 @@ static void *unpack_entry_data(off_t offset, unsigned long size,
        int hdrlen;
 
        if (!is_delta_type(type)) {
-               hdrlen = xsnprintf(hdr, sizeof(hdr), "%s %"PRIuMAX,
-                                  type_name(type),(uintmax_t)size) + 1;
+               hdrlen = format_object_header(hdr, sizeof(hdr), type, size);
                the_hash_algo->init_fn(&c);
                the_hash_algo->update_fn(&c, hdr, hdrlen);
        } else
@@ -579,7 +582,7 @@ static void *unpack_data(struct object_entry *obj,
                if (!n)
                        die(Q_("premature end of pack file, %"PRIuMAX" byte missing",
                               "premature end of pack file, %"PRIuMAX" bytes missing",
-                              (unsigned int)len),
+                              len),
                            (uintmax_t)len);
                from += n;
                len -= n;
@@ -971,7 +974,7 @@ static struct base_data *resolve_delta(struct object_entry *delta_obj,
        if (!result_data)
                bad_object(delta_obj->idx.offset, _("failed to apply delta"));
        hash_object_file(the_hash_algo, result_data, result_size,
-                        type_name(delta_obj->real_type), &delta_obj->idx.oid);
+                        delta_obj->real_type, &delta_obj->idx.oid);
        sha1_object(result_data, NULL, result_size, delta_obj->real_type,
                    &delta_obj->idx.oid);
 
@@ -1109,6 +1112,7 @@ static void *threaded_second_pass(void *data)
                        list_add(&child->list, &work_head);
                        base_cache_used += child->size;
                        prune_base_data(NULL);
+                       free_base_data(child);
                } else {
                        /*
                         * This child does not have its own children. It may be
@@ -1131,6 +1135,7 @@ static void *threaded_second_pass(void *data)
 
                                p = next_p;
                        }
+                       FREE_AND_NULL(child);
                }
                work_unlock();
        }
@@ -1286,7 +1291,7 @@ static void conclude_pack(int fix_thin_pack, const char *curr_pack, unsigned cha
                            nr_objects - nr_objects_initial);
                stop_progress_msg(&progress, msg.buf);
                strbuf_release(&msg);
-               finalize_hashfile(f, tail_hash, 0);
+               finalize_hashfile(f, tail_hash, FSYNC_COMPONENT_PACK, 0);
                hashcpy(read_hash, pack_hash);
                fixup_pack_header_footer(output_fd, pack_hash,
                                         curr_pack, nr_objects,
@@ -1413,9 +1418,8 @@ static void fix_unresolved_deltas(struct hashfile *f)
                if (!data)
                        continue;
 
-               if (check_object_signature(the_repository, &d->oid,
-                                          data, size,
-                                          type_name(type), NULL))
+               if (check_object_signature(the_repository, &d->oid, data, size,
+                                          type) < 0)
                        die(_("local object %s is corrupt"), oid_to_hex(&d->oid));
 
                /*
@@ -1424,6 +1428,7 @@ static void fix_unresolved_deltas(struct hashfile *f)
                 * object).
                 */
                append_obj_to_pack(f, d->oid.hash, data, size, type);
+               free(data);
                threaded_second_pass(NULL);
 
                display_progress(progress, nr_resolved_deltas);
@@ -1508,7 +1513,7 @@ static void final(const char *final_pack_name, const char *curr_pack_name,
        if (!from_stdin) {
                close(input_fd);
        } else {
-               fsync_or_die(output_fd, curr_pack_name);
+               fsync_component_or_die(FSYNC_COMPONENT_PACK, output_fd, curr_pack_name);
                err = close(output_fd);
                if (err)
                        die_errno(_("error while closing pack file"));
@@ -1703,6 +1708,7 @@ static void show_pack_info(int stat_only)
                          i + 1,
                          chain_histogram[i]);
        }
+       free(chain_histogram);
 }
 
 int cmd_index_pack(int argc, const char **argv, const char *prefix)
@@ -1932,6 +1938,7 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
        if (do_fsck_object && fsck_finish(&fsck_options))
                die(_("fsck error in pack objects"));
 
+       free(opts.anomaly);
        free(objects);
        strbuf_release(&index_name_buf);
        strbuf_release(&rev_index_name_buf);
index 4b493408cc5d1253e84fd17dddec58340d38aa7e..3ac479bec3c17aa7734195bc31dbacfb22a1523e 100644 (file)
@@ -35,6 +35,7 @@
 #include "repository.h"
 #include "commit-reach.h"
 #include "range-diff.h"
+#include "tmp-objdir.h"
 
 #define MAIL_DEFAULT_WRAP 72
 #define COVER_FROM_AUTO_MAX_SUBJECT_LEN 100
@@ -416,12 +417,19 @@ static void finish_early_output(struct rev_info *rev)
        show_early_header(rev, "done", n);
 }
 
-static int cmd_log_walk(struct rev_info *rev)
+static int cmd_log_walk_no_free(struct rev_info *rev)
 {
        struct commit *commit;
        int saved_nrl = 0;
        int saved_dcctc = 0;
 
+       if (rev->remerge_diff) {
+               rev->remerge_objdir = tmp_objdir_create("remerge-diff");
+               if (!rev->remerge_objdir)
+                       die(_("unable to create temporary object directory"));
+               tmp_objdir_replace_primary_odb(rev->remerge_objdir, 1);
+       }
+
        if (rev->early_output)
                setup_early_output();
 
@@ -436,7 +444,6 @@ static int cmd_log_walk(struct rev_info *rev)
         * and HAS_CHANGES being accumulated in rev->diffopt, so be careful to
         * retain that state information if replacing rev->diffopt in this loop
         */
-       rev->diffopt.no_free = 1;
        while ((commit = get_revision(rev)) != NULL) {
                if (!log_tree_commit(rev, commit) && rev->max_count >= 0)
                        /*
@@ -461,8 +468,11 @@ static int cmd_log_walk(struct rev_info *rev)
        }
        rev->diffopt.degraded_cc_to_c = saved_dcctc;
        rev->diffopt.needed_rename_limit = saved_nrl;
-       rev->diffopt.no_free = 0;
-       diff_free(&rev->diffopt);
+
+       if (rev->remerge_diff) {
+               tmp_objdir_destroy(rev->remerge_objdir);
+               rev->remerge_objdir = NULL;
+       }
 
        if (rev->diffopt.output_format & DIFF_FORMAT_CHECKDIFF &&
            rev->diffopt.flags.check_failed) {
@@ -471,6 +481,17 @@ static int cmd_log_walk(struct rev_info *rev)
        return diff_result_code(&rev->diffopt, 0);
 }
 
+static int cmd_log_walk(struct rev_info *rev)
+{
+       int retval;
+
+       rev->diffopt.no_free = 1;
+       retval = cmd_log_walk_no_free(rev);
+       rev->diffopt.no_free = 0;
+       diff_free(&rev->diffopt);
+       return retval;
+}
+
 static int git_log_config(const char *var, const char *value, void *cb)
 {
        const char *slot_name;
@@ -520,8 +541,6 @@ static int git_log_config(const char *var, const char *value, void *cb)
                return 0;
        }
 
-       if (grep_config(var, value, cb) < 0)
-               return -1;
        if (git_gpg_config(var, value, cb) < 0)
                return -1;
        return git_diff_ui_config(var, value, cb);
@@ -536,6 +555,8 @@ int cmd_whatchanged(int argc, const char **argv, const char *prefix)
        git_config(git_log_config, NULL);
 
        repo_init_revisions(the_repository, &rev, prefix);
+       git_config(grep_config, &rev.grep_filter);
+
        rev.diff = 1;
        rev.simplify_history = 0;
        memset(&opt, 0, sizeof(opt));
@@ -650,6 +671,8 @@ int cmd_show(int argc, const char **argv, const char *prefix)
 
        memset(&match_all, 0, sizeof(match_all));
        repo_init_revisions(the_repository, &rev, prefix);
+       git_config(grep_config, &rev.grep_filter);
+
        rev.diff = 1;
        rev.always_show_header = 1;
        rev.no_walk = 1;
@@ -665,6 +688,7 @@ int cmd_show(int argc, const char **argv, const char *prefix)
 
        count = rev.pending.nr;
        objects = rev.pending.objects;
+       rev.diffopt.no_free = 1;
        for (i = 0; i < count && !ret; i++) {
                struct object *o = objects[i].item;
                const char *name = objects[i].name;
@@ -710,12 +734,16 @@ int cmd_show(int argc, const char **argv, const char *prefix)
                        rev.pending.nr = rev.pending.alloc = 0;
                        rev.pending.objects = NULL;
                        add_object_array(o, name, &rev.pending);
-                       ret = cmd_log_walk(&rev);
+                       ret = cmd_log_walk_no_free(&rev);
                        break;
                default:
                        ret = error(_("unknown type: %d"), o->type);
                }
        }
+
+       rev.diffopt.no_free = 0;
+       diff_free(&rev.diffopt);
+
        free(objects);
        return ret;
 }
@@ -733,6 +761,8 @@ int cmd_log_reflog(int argc, const char **argv, const char *prefix)
 
        repo_init_revisions(the_repository, &rev, prefix);
        init_reflog_walk(&rev.reflog_info);
+       git_config(grep_config, &rev.grep_filter);
+
        rev.verbose_header = 1;
        memset(&opt, 0, sizeof(opt));
        opt.def = "HEAD";
@@ -766,6 +796,8 @@ int cmd_log(int argc, const char **argv, const char *prefix)
        git_config(git_log_config, NULL);
 
        repo_init_revisions(the_repository, &rev, prefix);
+       git_config(grep_config, &rev.grep_filter);
+
        rev.always_show_header = 1;
        memset(&opt, 0, sizeof(opt));
        opt.def = "HEAD";
@@ -1848,10 +1880,13 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
        extra_hdr.strdup_strings = 1;
        extra_to.strdup_strings = 1;
        extra_cc.strdup_strings = 1;
+
        init_log_defaults();
        init_display_notes(&notes_opt);
        git_config(git_format_config, NULL);
        repo_init_revisions(the_repository, &rev, prefix);
+       git_config(grep_config, &rev.grep_filter);
+
        rev.show_notes = show_notes;
        memcpy(&rev.notes_opt, &notes_opt, sizeof(notes_opt));
        rev.commit_format = CMIT_FMT_EMAIL;
@@ -1861,6 +1896,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
        rev.diff = 1;
        rev.max_parents = 1;
        rev.diffopt.flags.recursive = 1;
+       rev.diffopt.no_free = 1;
        rev.subject_prefix = fmt_patch_subject_prefix;
        memset(&s_r_opt, 0, sizeof(s_r_opt));
        s_r_opt.def = "HEAD";
@@ -1958,6 +1994,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
                die(_("--name-status does not make sense"));
        if (rev.diffopt.output_format & DIFF_FORMAT_CHECKDIFF)
                die(_("--check does not make sense"));
+       if (rev.remerge_diff)
+               die(_("--remerge-diff does not make sense"));
 
        if (!use_patch_format &&
                (!rev.diffopt.output_format ||
@@ -1978,18 +2016,13 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
        if (rev.show_notes)
                load_display_notes(&rev.notes_opt);
 
-       if (use_stdout + rev.diffopt.close_file + !!output_directory > 1)
-               die(_("options '%s', '%s', and '%s' cannot be used together"), "--stdout", "--output", "--output-directory");
+       die_for_incompatible_opt3(use_stdout, "--stdout",
+                                 rev.diffopt.close_file, "--output",
+                                 !!output_directory, "--output-directory");
 
        if (use_stdout) {
                setup_pager();
-       } else if (rev.diffopt.close_file) {
-               /*
-                * The diff code parsed --output; it has already opened the
-                * file, but we must instruct it not to close after each diff.
-                */
-               rev.diffopt.no_free = 1;
-       } else {
+       } else if (!rev.diffopt.close_file) {
                int saved;
 
                if (!output_directory)
index f7ea56cc63820b27efe7bec00ab9ac8660e06766..e791b65e7e9afb2b9f51fee4af9a0f1c978b9536 100644 (file)
@@ -244,7 +244,7 @@ static void show_ce(struct repository *repo, struct dir_struct *dir,
                        printf("%s%06o %s %d\t",
                               tag,
                               ce->ce_mode,
-                              find_unique_abbrev(&ce->oid, abbrev),
+                              repo_find_unique_abbrev(repo, &ce->oid, abbrev),
                               ce_stage(ce));
                }
                write_eolinfo(repo->index, ce, fullname);
@@ -726,7 +726,7 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
                setup_work_tree();
 
        if (recurse_submodules &&
-           (show_stage || show_deleted || show_others || show_unmerged ||
+           (show_deleted || show_others || show_unmerged ||
             show_killed || show_modified || show_resolve_undo || with_tree))
                die("ls-files --recurse-submodules unsupported mode");
 
index 44448fa61d168d7b846f5e241b58e0e6cce9e128..d856085e9414a2bea070cbe9c84268c66158c33a 100644 (file)
@@ -155,6 +155,7 @@ int cmd_ls_remote(int argc, const char **argv, const char *prefix)
 
        ref_array_clear(&ref_array);
        if (transport_disconnect(transport))
-               return 1;
+               status = 1;
+       transport_ls_refs_options_release(&transport_options);
        return status;
 }
index 3a442631c71a07f0d0dda791ed72af83f2b92bca..e279be8bb636d6a945f36ad10699b50cf115fd78 100644 (file)
 
 static int line_termination = '\n';
 #define LS_RECURSIVE 1
-#define LS_TREE_ONLY 2
-#define LS_SHOW_TREES 4
-#define LS_NAME_ONLY 8
-#define LS_SHOW_SIZE 16
+#define LS_TREE_ONLY (1 << 1)
+#define LS_SHOW_TREES (1 << 2)
 static int abbrev;
 static int ls_options;
 static struct pathspec pathspec;
 static int chomp_prefix;
 static const char *ls_tree_prefix;
+static const char *format;
+struct show_tree_data {
+       unsigned mode;
+       enum object_type type;
+       const struct object_id *oid;
+       const char *pathname;
+       struct strbuf *base;
+};
 
 static const  char * const ls_tree_usage[] = {
        N_("git ls-tree [<options>] <tree-ish> [<path>...]"),
        NULL
 };
 
-static int show_recursive(const char *base, int baselen, const char *pathname)
+static enum ls_tree_cmdmode {
+       MODE_DEFAULT = 0,
+       MODE_LONG,
+       MODE_NAME_ONLY,
+       MODE_NAME_STATUS,
+       MODE_OBJECT_ONLY,
+} cmdmode;
+
+static void expand_objectsize(struct strbuf *line, const struct object_id *oid,
+                             const enum object_type type, unsigned int padded)
+{
+       if (type == OBJ_BLOB) {
+               unsigned long size;
+               if (oid_object_info(the_repository, oid, &size) < 0)
+                       die(_("could not get object info about '%s'"),
+                           oid_to_hex(oid));
+               if (padded)
+                       strbuf_addf(line, "%7"PRIuMAX, (uintmax_t)size);
+               else
+                       strbuf_addf(line, "%"PRIuMAX, (uintmax_t)size);
+       } else if (padded) {
+               strbuf_addf(line, "%7s", "-");
+       } else {
+               strbuf_addstr(line, "-");
+       }
+}
+
+static size_t expand_show_tree(struct strbuf *sb, const char *start,
+                              void *context)
+{
+       struct show_tree_data *data = context;
+       const char *end;
+       const char *p;
+       unsigned int errlen;
+       size_t len = strbuf_expand_literal_cb(sb, start, NULL);
+
+       if (len)
+               return len;
+       if (*start != '(')
+               die(_("bad ls-tree format: element '%s' does not start with '('"), start);
+
+       end = strchr(start + 1, ')');
+       if (!end)
+               die(_("bad ls-tree format: element '%s' does not end in ')'"), start);
+
+       len = end - start + 1;
+       if (skip_prefix(start, "(objectmode)", &p)) {
+               strbuf_addf(sb, "%06o", data->mode);
+       } else if (skip_prefix(start, "(objecttype)", &p)) {
+               strbuf_addstr(sb, type_name(data->type));
+       } else if (skip_prefix(start, "(objectsize:padded)", &p)) {
+               expand_objectsize(sb, data->oid, data->type, 1);
+       } else if (skip_prefix(start, "(objectsize)", &p)) {
+               expand_objectsize(sb, data->oid, data->type, 0);
+       } else if (skip_prefix(start, "(objectname)", &p)) {
+               strbuf_add_unique_abbrev(sb, data->oid, abbrev);
+       } else if (skip_prefix(start, "(path)", &p)) {
+               const char *name = data->base->buf;
+               const char *prefix = chomp_prefix ? ls_tree_prefix : NULL;
+               struct strbuf quoted = STRBUF_INIT;
+               struct strbuf sbuf = STRBUF_INIT;
+               strbuf_addstr(data->base, data->pathname);
+               name = relative_path(data->base->buf, prefix, &sbuf);
+               quote_c_style(name, &quoted, NULL, 0);
+               strbuf_addbuf(sb, &quoted);
+               strbuf_release(&sbuf);
+               strbuf_release(&quoted);
+       } else {
+               errlen = (unsigned long)len;
+               die(_("bad ls-tree format: %%%.*s"), errlen, start);
+       }
+       return len;
+}
+
+static int show_recursive(const char *base, size_t baselen, const char *pathname)
 {
        int i;
 
@@ -43,7 +123,7 @@ static int show_recursive(const char *base, int baselen, const char *pathname)
 
        for (i = 0; i < pathspec.nr; i++) {
                const char *spec = pathspec.items[i].match;
-               int len, speclen;
+               size_t len, speclen;
 
                if (strncmp(base, spec, baselen))
                        continue;
@@ -61,69 +141,197 @@ static int show_recursive(const char *base, int baselen, const char *pathname)
        return 0;
 }
 
-static int show_tree(const struct object_id *oid, struct strbuf *base,
-               const char *pathname, unsigned mode, void *context)
+static int show_tree_fmt(const struct object_id *oid, struct strbuf *base,
+                        const char *pathname, unsigned mode, void *context)
 {
-       int retval = 0;
-       int baselen;
-       const char *type = blob_type;
-
-       if (S_ISGITLINK(mode)) {
-               /*
-                * Maybe we want to have some recursive version here?
-                *
-                * Something similar to this incomplete example:
-                *
-               if (show_subprojects(base, baselen, pathname))
-                       retval = READ_TREE_RECURSIVE;
-                *
-                */
-               type = commit_type;
-       } else if (S_ISDIR(mode)) {
-               if (show_recursive(base->buf, base->len, pathname)) {
-                       retval = READ_TREE_RECURSIVE;
-                       if (!(ls_options & LS_SHOW_TREES))
-                               return retval;
-               }
-               type = tree_type;
-       }
-       else if (ls_options & LS_TREE_ONLY)
+       size_t baselen;
+       int recurse = 0;
+       struct strbuf sb = STRBUF_INIT;
+       enum object_type type = object_type(mode);
+
+       struct show_tree_data data = {
+               .mode = mode,
+               .type = type,
+               .oid = oid,
+               .pathname = pathname,
+               .base = base,
+       };
+
+       if (type == OBJ_TREE && show_recursive(base->buf, base->len, pathname))
+               recurse = READ_TREE_RECURSIVE;
+       if (type == OBJ_TREE && recurse && !(ls_options & LS_SHOW_TREES))
+               return recurse;
+       if (type == OBJ_BLOB && (ls_options & LS_TREE_ONLY))
                return 0;
 
-       if (!(ls_options & LS_NAME_ONLY)) {
-               if (ls_options & LS_SHOW_SIZE) {
-                       char size_text[24];
-                       if (!strcmp(type, blob_type)) {
-                               unsigned long size;
-                               if (oid_object_info(the_repository, oid, &size) == OBJ_BAD)
-                                       xsnprintf(size_text, sizeof(size_text),
-                                                 "BAD");
-                               else
-                                       xsnprintf(size_text, sizeof(size_text),
-                                                 "%"PRIuMAX, (uintmax_t)size);
-                       } else
-                               xsnprintf(size_text, sizeof(size_text), "-");
-                       printf("%06o %s %s %7s\t", mode, type,
-                              find_unique_abbrev(oid, abbrev),
-                              size_text);
-               } else
-                       printf("%06o %s %s\t", mode, type,
-                              find_unique_abbrev(oid, abbrev));
-       }
        baselen = base->len;
+       strbuf_expand(&sb, format, expand_show_tree, &data);
+       strbuf_addch(&sb, line_termination);
+       fwrite(sb.buf, sb.len, 1, stdout);
+       strbuf_release(&sb);
+       strbuf_setlen(base, baselen);
+       return recurse;
+}
+
+static int show_tree_common(struct show_tree_data *data, int *recurse,
+                           const struct object_id *oid, struct strbuf *base,
+                           const char *pathname, unsigned mode)
+{
+       enum object_type type = object_type(mode);
+       int ret = -1;
+
+       *recurse = 0;
+       data->mode = mode;
+       data->type = type;
+       data->oid = oid;
+       data->pathname = pathname;
+       data->base = base;
+
+       if (type == OBJ_BLOB) {
+               if (ls_options & LS_TREE_ONLY)
+                       ret = 0;
+       } else if (type == OBJ_TREE &&
+                  show_recursive(base->buf, base->len, pathname)) {
+               *recurse = READ_TREE_RECURSIVE;
+               if (!(ls_options & LS_SHOW_TREES))
+                       ret = *recurse;
+       }
+
+       return ret;
+}
+
+static void show_tree_common_default_long(struct strbuf *base,
+                                         const char *pathname,
+                                         const size_t baselen)
+{
+       strbuf_addstr(base, pathname);
+       write_name_quoted_relative(base->buf,
+                                  chomp_prefix ? ls_tree_prefix : NULL, stdout,
+                                  line_termination);
+       strbuf_setlen(base, baselen);
+}
+
+static int show_tree_default(const struct object_id *oid, struct strbuf *base,
+                            const char *pathname, unsigned mode,
+                            void *context)
+{
+       int early;
+       int recurse;
+       struct show_tree_data data = { 0 };
+
+       early = show_tree_common(&data, &recurse, oid, base, pathname, mode);
+       if (early >= 0)
+               return early;
+
+       printf("%06o %s %s\t", data.mode, type_name(data.type),
+              find_unique_abbrev(data.oid, abbrev));
+       show_tree_common_default_long(base, pathname, data.base->len);
+       return recurse;
+}
+
+static int show_tree_long(const struct object_id *oid, struct strbuf *base,
+                         const char *pathname, unsigned mode, void *context)
+{
+       int early;
+       int recurse;
+       struct show_tree_data data = { 0 };
+       char size_text[24];
+
+       early = show_tree_common(&data, &recurse, oid, base, pathname, mode);
+       if (early >= 0)
+               return early;
+
+       if (data.type == OBJ_BLOB) {
+               unsigned long size;
+               if (oid_object_info(the_repository, data.oid, &size) == OBJ_BAD)
+                       xsnprintf(size_text, sizeof(size_text), "BAD");
+               else
+                       xsnprintf(size_text, sizeof(size_text),
+                                 "%" PRIuMAX, (uintmax_t)size);
+       } else {
+               xsnprintf(size_text, sizeof(size_text), "-");
+       }
+
+       printf("%06o %s %s %7s\t", data.mode, type_name(data.type),
+              find_unique_abbrev(data.oid, abbrev), size_text);
+       show_tree_common_default_long(base, pathname, data.base->len);
+       return recurse;
+}
+
+static int show_tree_name_only(const struct object_id *oid, struct strbuf *base,
+                              const char *pathname, unsigned mode, void *context)
+{
+       int early;
+       int recurse;
+       const size_t baselen = base->len;
+       struct show_tree_data data = { 0 };
+
+       early = show_tree_common(&data, &recurse, oid, base, pathname, mode);
+       if (early >= 0)
+               return early;
+
        strbuf_addstr(base, pathname);
        write_name_quoted_relative(base->buf,
                                   chomp_prefix ? ls_tree_prefix : NULL,
                                   stdout, line_termination);
        strbuf_setlen(base, baselen);
-       return retval;
+       return recurse;
+}
+
+static int show_tree_object(const struct object_id *oid, struct strbuf *base,
+                           const char *pathname, unsigned mode, void *context)
+{
+       int early;
+       int recurse;
+       struct show_tree_data data = { 0 };
+
+       early = show_tree_common(&data, &recurse, oid, base, pathname, mode);
+       if (early >= 0)
+               return early;
+
+       printf("%s%c", find_unique_abbrev(oid, abbrev), line_termination);
+       return recurse;
 }
 
+struct ls_tree_cmdmode_to_fmt {
+       enum ls_tree_cmdmode mode;
+       const char *const fmt;
+       read_tree_fn_t fn;
+};
+
+static struct ls_tree_cmdmode_to_fmt ls_tree_cmdmode_format[] = {
+       {
+               .mode = MODE_DEFAULT,
+               .fmt = "%(objectmode) %(objecttype) %(objectname)%x09%(path)",
+               .fn = show_tree_default,
+       },
+       {
+               .mode = MODE_LONG,
+               .fmt = "%(objectmode) %(objecttype) %(objectname) %(objectsize:padded)%x09%(path)",
+               .fn = show_tree_long,
+       },
+       {
+               .mode = MODE_NAME_ONLY, /* And MODE_NAME_STATUS */
+               .fmt = "%(path)",
+               .fn = show_tree_name_only,
+       },
+       {
+               .mode = MODE_OBJECT_ONLY,
+               .fmt = "%(objectname)",
+               .fn = show_tree_object
+       },
+       {
+               /* fallback */
+               .fn = show_tree_default,
+       },
+};
+
 int cmd_ls_tree(int argc, const char **argv, const char *prefix)
 {
        struct object_id oid;
        struct tree *tree;
        int i, full_tree = 0;
+       read_tree_fn_t fn = NULL;
        const struct option ls_tree_options[] = {
                OPT_BIT('d', NULL, &ls_options, N_("only show trees"),
                        LS_TREE_ONLY),
@@ -133,24 +341,30 @@ int cmd_ls_tree(int argc, const char **argv, const char *prefix)
                        LS_SHOW_TREES),
                OPT_SET_INT('z', NULL, &line_termination,
                            N_("terminate entries with NUL byte"), 0),
-               OPT_BIT('l', "long", &ls_options, N_("include object size"),
-                       LS_SHOW_SIZE),
-               OPT_BIT(0, "name-only", &ls_options, N_("list only filenames"),
-                       LS_NAME_ONLY),
-               OPT_BIT(0, "name-status", &ls_options, N_("list only filenames"),
-                       LS_NAME_ONLY),
+               OPT_CMDMODE('l', "long", &cmdmode, N_("include object size"),
+                           MODE_LONG),
+               OPT_CMDMODE(0, "name-only", &cmdmode, N_("list only filenames"),
+                           MODE_NAME_ONLY),
+               OPT_CMDMODE(0, "name-status", &cmdmode, N_("list only filenames"),
+                           MODE_NAME_STATUS),
+               OPT_CMDMODE(0, "object-only", &cmdmode, N_("list only objects"),
+                           MODE_OBJECT_ONLY),
                OPT_SET_INT(0, "full-name", &chomp_prefix,
                            N_("use full path names"), 0),
                OPT_BOOL(0, "full-tree", &full_tree,
                         N_("list entire tree; not just current directory "
                            "(implies --full-name)")),
+               OPT_STRING_F(0, "format", &format, N_("format"),
+                                        N_("format to use for the output"),
+                                        PARSE_OPT_NONEG),
                OPT__ABBREV(&abbrev),
                OPT_END()
        };
+       struct ls_tree_cmdmode_to_fmt *m2f = ls_tree_cmdmode_format;
 
        git_config(git_default_config, NULL);
        ls_tree_prefix = prefix;
-       if (prefix && *prefix)
+       if (prefix)
                chomp_prefix = strlen(prefix);
 
        argc = parse_options(argc, argv, prefix, ls_tree_options,
@@ -159,11 +373,23 @@ int cmd_ls_tree(int argc, const char **argv, const char *prefix)
                ls_tree_prefix = prefix = NULL;
                chomp_prefix = 0;
        }
+       /*
+        * We wanted to detect conflicts between --name-only and
+        * --name-status, but once we're done with that subsequent
+        * code should only need to check the primary name.
+        */
+       if (cmdmode == MODE_NAME_STATUS)
+               cmdmode = MODE_NAME_ONLY;
+
        /* -d -r should imply -t, but -d by itself should not have to. */
        if ( (LS_TREE_ONLY|LS_RECURSIVE) ==
            ((LS_TREE_ONLY|LS_RECURSIVE) & ls_options))
                ls_options |= LS_SHOW_TREES;
 
+       if (format && cmdmode)
+               usage_msg_opt(
+                       _("--format can't be combined with other format-altering options"),
+                       ls_tree_usage, ls_tree_options);
        if (argc < 1)
                usage_with_options(ls_tree_usage, ls_tree_options);
        if (get_oid(argv[0], &oid))
@@ -185,6 +411,24 @@ int cmd_ls_tree(int argc, const char **argv, const char *prefix)
        tree = parse_tree_indirect(&oid);
        if (!tree)
                die("not a tree object");
-       return !!read_tree(the_repository, tree,
-                          &pathspec, show_tree, NULL);
+       /*
+        * The generic show_tree_fmt() is slower than show_tree(), so
+        * take the fast path if possible.
+        */
+       while (m2f) {
+               if (!m2f->fmt) {
+                       fn = format ? show_tree_fmt : show_tree_default;
+               } else if (format && !strcmp(format, m2f->fmt)) {
+                       cmdmode = m2f->mode;
+                       fn = m2f->fn;
+               } else if (!format && cmdmode == m2f->mode) {
+                       fn = m2f->fn;
+               } else {
+                       m2f++;
+                       continue;
+               }
+               break;
+       }
+
+       return !!read_tree(the_repository, tree, &pathspec, fn, NULL);
 }
index 7baef30569fce8e6b4a7353067bb4aba00561557..30952353a370a3343f614ee5a14a3f5ca9560444 100644 (file)
@@ -223,6 +223,9 @@ static int split_mbox(const char *file, const char *dir, int allow_bare,
        FILE *f = !strcmp(file, "-") ? stdin : fopen(file, "r");
        int file_done = 0;
 
+       if (isatty(fileno(f)))
+               warning(_("reading patches from stdin/tty..."));
+
        if (!f) {
                error_errno("cannot open mbox %s", file);
                goto out;
index 6719ac198dc2092ae49829d5946ca00664e34b0e..a11f8c6e4bb04a25a8763ba9930ab86079a1f14c 100644 (file)
@@ -138,6 +138,7 @@ int cmd_merge_base(int argc, const char **argv, const char *prefix)
        int rev_nr = 0;
        int show_all = 0;
        int cmdmode = 0;
+       int ret;
 
        struct option options[] = {
                OPT_BOOL('a', "all", &show_all, N_("output all common ancestors")),
@@ -159,12 +160,14 @@ int cmd_merge_base(int argc, const char **argv, const char *prefix)
                if (argc < 2)
                        usage_with_options(merge_base_usage, options);
                if (show_all)
-                       die("--is-ancestor cannot be used with --all");
+                       die(_("options '%s' and '%s' cannot be used together"),
+                           "--is-ancestor", "--all");
                return handle_is_ancestor(argc, argv);
        }
 
        if (cmdmode == 'r' && show_all)
-               die("--independent cannot be used with --all");
+               die(_("options '%s' and '%s' cannot be used together"),
+                   "--independent", "--all");
 
        if (cmdmode == 'o')
                return handle_octopus(argc, argv, show_all);
@@ -184,5 +187,7 @@ int cmd_merge_base(int argc, const char **argv, const char *prefix)
        ALLOC_ARRAY(rev, argc);
        while (argc-- > 0)
                rev[rev_nr++] = get_commit_reference(*argv++);
-       return show_merge_base(rev, rev_nr, show_all);
+       ret = show_merge_base(rev, rev_nr, show_all);
+       free(rev);
+       return ret;
 }
index a4bfd8fc51d6b26edda7a1c8afca4946f6ff485d..b9acbf5d3427e7dd88533351db5d2fc245cc25f6 100644 (file)
@@ -58,7 +58,7 @@ int cmd_merge_recursive(int argc, const char **argv, const char *prefix)
                                   "Ignoring %s.",
                                   "cannot handle more than %d bases. "
                                   "Ignoring %s.",
-                                   (int)ARRAY_SIZE(bases)-1),
+                                   ARRAY_SIZE(bases)-1),
                                (int)ARRAY_SIZE(bases)-1, argv[i]);
        }
        if (argc - i != 3) /* "--" "<head>" "<remote>" */
index 74e53cf20a776e23efaa36702dffec408e4d29fa..f178f5a3ee18c71d2acda9455b020f9c03da9509 100644 (file)
@@ -490,7 +490,7 @@ static void finish(struct commit *head_commit,
        }
 
        /* Run a post-merge hook */
-       run_hook_le(NULL, "post-merge", squash ? "1" : "0", NULL);
+       run_hooks_l("post-merge", squash ? "1" : "0", NULL);
 
        apply_autostash(git_path_merge_autostash(the_repository));
        strbuf_release(&reflog_message);
@@ -845,15 +845,20 @@ static void prepare_to_commit(struct commit_list *remoteheads)
        struct strbuf msg = STRBUF_INIT;
        const char *index_file = get_index_file();
 
-       if (!no_verify && run_commit_hook(0 < option_edit, index_file, "pre-merge-commit", NULL))
-               abort_commit(remoteheads, NULL);
-       /*
-        * Re-read the index as pre-merge-commit hook could have updated it,
-        * and write it out as a tree.  We must do this before we invoke
-        * the editor and after we invoke run_status above.
-        */
-       if (hook_exists("pre-merge-commit"))
-               discard_cache();
+       if (!no_verify) {
+               int invoked_hook;
+
+               if (run_commit_hook(0 < option_edit, index_file, &invoked_hook,
+                                   "pre-merge-commit", NULL))
+                       abort_commit(remoteheads, NULL);
+               /*
+                * Re-read the index as pre-merge-commit hook could have updated it,
+                * and write it out as a tree.  We must do this before we invoke
+                * the editor and after we invoke run_status above.
+                */
+               if (invoked_hook)
+                       discard_cache();
+       }
        read_cache_from(index_file);
        strbuf_addbuf(&msg, &merge_msg);
        if (squash)
@@ -875,7 +880,8 @@ static void prepare_to_commit(struct commit_list *remoteheads)
                append_signoff(&msg, ignore_non_trailer(msg.buf, msg.len), 0);
        write_merge_heads(remoteheads);
        write_file_buf(git_path_merge_msg(the_repository), msg.buf, msg.len);
-       if (run_commit_hook(0 < option_edit, get_index_file(), "prepare-commit-msg",
+       if (run_commit_hook(0 < option_edit, get_index_file(), NULL,
+                           "prepare-commit-msg",
                            git_path_merge_msg(the_repository), "merge", NULL))
                abort_commit(remoteheads, NULL);
        if (0 < option_edit) {
@@ -884,7 +890,7 @@ static void prepare_to_commit(struct commit_list *remoteheads)
        }
 
        if (!no_verify && run_commit_hook(0 < option_edit, get_index_file(),
-                                         "commit-msg",
+                                         NULL, "commit-msg",
                                          git_path_merge_msg(the_repository), NULL))
                abort_commit(remoteheads, NULL);
 
@@ -1273,7 +1279,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
        int best_cnt = -1, merge_was_ok = 0, automerge_was_ok = 0;
        struct commit_list *common = NULL;
        const char *best_strategy = NULL, *wt_strategy = NULL;
-       struct commit_list *remoteheads, *p;
+       struct commit_list *remoteheads = NULL, *p;
        void *branch_to_free;
        int orig_argc = argc;
 
@@ -1568,8 +1574,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 
                if (autostash)
                        create_autostash(the_repository,
-                                        git_path_merge_autostash(the_repository),
-                                        "merge");
+                                        git_path_merge_autostash(the_repository));
                if (checkout_fast_forward(the_repository,
                                          &head_commit->object.oid,
                                          &commit->object.oid,
@@ -1640,8 +1645,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
 
        if (autostash)
                create_autostash(the_repository,
-                                git_path_merge_autostash(the_repository),
-                                "merge");
+                                git_path_merge_autostash(the_repository));
 
        /* We are going to make a new commit. */
        git_committer_info(IDENT_STRICT);
@@ -1752,6 +1756,10 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
                ret = suggest_conflicts();
 
 done:
+       if (!automerge_was_ok) {
+               free_commit_list(common);
+               free_commit_list(remoteheads);
+       }
        strbuf_release(&buf);
        free(branch_to_free);
        return ret;
index 3b2dbbb37e6fe1afc11af79aae774ca526496413..5d22909122d195873f2427812084dc8bd4319180 100644 (file)
@@ -7,7 +7,7 @@
 #include "config.h"
 
 static char const * const builtin_mktag_usage[] = {
-       N_("git mktag"),
+       "git mktag",
        NULL
 };
 static int option_strict = 1;
@@ -61,9 +61,8 @@ static int verify_object_in_tag(struct object_id *tagged_oid, int *tagged_type)
                    type_name(*tagged_type), type_name(type));
 
        repl = lookup_replace_object(the_repository, tagged_oid);
-       ret = check_object_signature(the_repository, repl,
-                                    buffer, size, type_name(*tagged_type),
-                                    NULL);
+       ret = check_object_signature(the_repository, repl, buffer, size,
+                                    *tagged_type);
        free(buffer);
 
        return ret;
@@ -97,10 +96,10 @@ int cmd_mktag(int argc, const char **argv, const char *prefix)
                                &tagged_oid, &tagged_type))
                die(_("tag on stdin did not pass our strict fsck check"));
 
-       if (verify_object_in_tag(&tagged_oid, &tagged_type))
+       if (verify_object_in_tag(&tagged_oid, &tagged_type) < 0)
                die(_("tag on stdin did not refer to a valid object"));
 
-       if (write_object_file(buf.buf, buf.len, tag_type, &result) < 0)
+       if (write_object_file(buf.buf, buf.len, OBJ_TAG, &result) < 0)
                die(_("unable to write tag file"));
 
        strbuf_release(&buf);
index ae78ca1c02981a6d846027d7ce01484e5e3a1851..902edba6d2cb43d69addf875a0e5a58e3abe879d 100644 (file)
@@ -58,12 +58,12 @@ static void write_tree(struct object_id *oid)
                strbuf_add(&buf, ent->oid.hash, the_hash_algo->rawsz);
        }
 
-       write_object_file(buf.buf, buf.len, tree_type, oid);
+       write_object_file(buf.buf, buf.len, OBJ_TREE, oid);
        strbuf_release(&buf);
 }
 
 static const char *mktree_usage[] = {
-       N_("git mktree [-z] [--missing] [--batch]"),
+       "git mktree [-z] [--missing] [--batch]",
        NULL
 };
 
index 4480ba398277d4edc67e60eff47686d579de53c8..5edbb7fe86e81fb09ca2245ba920bc8bccd18726 100644 (file)
@@ -44,7 +44,7 @@ static char const * const builtin_multi_pack_index_usage[] = {
 };
 
 static struct opts_multi_pack_index {
-       const char *object_dir;
+       char *object_dir;
        const char *preferred_pack;
        const char *refs_snapshot;
        unsigned long batch_size;
@@ -52,9 +52,23 @@ static struct opts_multi_pack_index {
        int stdin_packs;
 } opts;
 
+
+static int parse_object_dir(const struct option *opt, const char *arg,
+                           int unset)
+{
+       free(opts.object_dir);
+       if (unset)
+               opts.object_dir = xstrdup(get_object_directory());
+       else
+               opts.object_dir = real_pathdup(arg, 1);
+       return 0;
+}
+
 static struct option common_opts[] = {
-       OPT_FILENAME(0, "object-dir", &opts.object_dir,
-         N_("object directory containing set of packfile and pack-index pairs")),
+       OPT_CALLBACK(0, "object-dir", &opts.object_dir,
+         N_("directory"),
+         N_("object directory containing set of packfile and pack-index pairs"),
+         parse_object_dir),
        OPT_END(),
 };
 
@@ -232,31 +246,40 @@ static int cmd_multi_pack_index_repack(int argc, const char **argv)
 int cmd_multi_pack_index(int argc, const char **argv,
                         const char *prefix)
 {
+       int res;
        struct option *builtin_multi_pack_index_options = common_opts;
 
        git_config(git_default_config, NULL);
 
+       if (the_repository &&
+           the_repository->objects &&
+           the_repository->objects->odb)
+               opts.object_dir = xstrdup(the_repository->objects->odb->path);
+
        argc = parse_options(argc, argv, prefix,
                             builtin_multi_pack_index_options,
                             builtin_multi_pack_index_usage,
                             PARSE_OPT_STOP_AT_NON_OPTION);
 
-       if (!opts.object_dir)
-               opts.object_dir = get_object_directory();
-
        if (!argc)
                goto usage;
 
        if (!strcmp(argv[0], "repack"))
-               return cmd_multi_pack_index_repack(argc, argv);
+               res = cmd_multi_pack_index_repack(argc, argv);
        else if (!strcmp(argv[0], "write"))
-               return cmd_multi_pack_index_write(argc, argv);
+               res =  cmd_multi_pack_index_write(argc, argv);
        else if (!strcmp(argv[0], "verify"))
-               return cmd_multi_pack_index_verify(argc, argv);
+               res =  cmd_multi_pack_index_verify(argc, argv);
        else if (!strcmp(argv[0], "expire"))
-               return cmd_multi_pack_index_expire(argc, argv);
+               res =  cmd_multi_pack_index_expire(argc, argv);
+       else {
+               error(_("unrecognized subcommand: %s"), argv[0]);
+               goto usage;
+       }
+
+       free(opts.object_dir);
+       return res;
 
-       error(_("unrecognized subcommand: %s"), argv[0]);
 usage:
        usage_with_options(builtin_multi_pack_index_usage,
                           builtin_multi_pack_index_options);
index 27f60153a6c732c9a47ed47eb79f4e736f714841..02ea9d16330f650502e1722a7b5fb95fa7f52cb1 100644 (file)
@@ -9,6 +9,7 @@
 #include "prio-queue.h"
 #include "hash-lookup.h"
 #include "commit-slab.h"
+#include "commit-graph.h"
 
 /*
  * One day.  See the 'name a rev shortly after epoch' test in t6120 when
@@ -17,7 +18,7 @@
 #define CUTOFF_DATE_SLOP 86400
 
 struct rev_name {
-       char *tip_name;
+       const char *tip_name;
        timestamp_t taggerdate;
        int generation;
        int distance;
@@ -26,15 +27,64 @@ struct rev_name {
 
 define_commit_slab(commit_rev_name, struct rev_name);
 
+static timestamp_t generation_cutoff = GENERATION_NUMBER_INFINITY;
 static timestamp_t cutoff = TIME_MAX;
 static struct commit_rev_name rev_names;
 
+/* Disable the cutoff checks entirely */
+static void disable_cutoff(void)
+{
+       generation_cutoff = 0;
+       cutoff = 0;
+}
+
+/* Cutoff searching any commits older than this one */
+static void set_commit_cutoff(struct commit *commit)
+{
+
+       if (cutoff > commit->date)
+               cutoff = commit->date;
+
+       if (generation_cutoff) {
+               timestamp_t generation = commit_graph_generation(commit);
+
+               if (generation_cutoff > generation)
+                       generation_cutoff = generation;
+       }
+}
+
+/* adjust the commit date cutoff with a slop to allow for slightly incorrect
+ * commit timestamps in case of clock skew.
+ */
+static void adjust_cutoff_timestamp_for_slop(void)
+{
+       if (cutoff) {
+               /* check for undeflow */
+               if (cutoff > TIME_MIN + CUTOFF_DATE_SLOP)
+                       cutoff = cutoff - CUTOFF_DATE_SLOP;
+               else
+                       cutoff = TIME_MIN;
+       }
+}
+
+/* Check if a commit is before the cutoff. Prioritize generation numbers
+ * first, but use the commit timestamp if we lack generation data.
+ */
+static int commit_is_before_cutoff(struct commit *commit)
+{
+       if (generation_cutoff < GENERATION_NUMBER_INFINITY)
+               return generation_cutoff &&
+                       commit_graph_generation(commit) < generation_cutoff;
+
+       return commit->date < cutoff;
+}
+
 /* How many generations are maximally preferred over _one_ merge traversal? */
 #define MERGE_TRAVERSAL_WEIGHT 65535
 
 static int is_valid_rev_name(const struct rev_name *name)
 {
-       return name && (name->generation || name->tip_name);
+       return name && name->tip_name;
 }
 
 static struct rev_name *get_commit_rev_name(const struct commit *commit)
@@ -96,20 +146,9 @@ static struct rev_name *create_or_update_name(struct commit *commit,
 {
        struct rev_name *name = commit_rev_name_at(&rev_names, commit);
 
-       if (is_valid_rev_name(name)) {
-               if (!is_better_name(name, taggerdate, generation, distance, from_tag))
-                       return NULL;
-
-               /*
-                * This string might still be shared with ancestors
-                * (generation > 0).  We can release it here regardless,
-                * because the new name that has just won will be better
-                * for them as well, so name_rev() will replace these
-                * stale pointers when it processes the parents.
-                */
-               if (!name->generation)
-                       free(name->tip_name);
-       }
+       if (is_valid_rev_name(name) &&
+           !is_better_name(name, taggerdate, generation, distance, from_tag))
+               return NULL;
 
        name->taggerdate = taggerdate;
        name->generation = generation;
@@ -151,7 +190,7 @@ static void name_rev(struct commit *start_commit,
        struct rev_name *start_name;
 
        parse_commit(start_commit);
-       if (start_commit->date < cutoff)
+       if (commit_is_before_cutoff(start_commit))
                return;
 
        start_name = create_or_update_name(start_commit, taggerdate, 0, 0,
@@ -181,7 +220,7 @@ static void name_rev(struct commit *start_commit,
                        int generation, distance;
 
                        parse_commit(parent);
-                       if (parent->date < cutoff)
+                       if (commit_is_before_cutoff(parent))
                                continue;
 
                        if (parent_number > 1) {
@@ -473,7 +512,7 @@ static void show_name(const struct object *obj,
 static char const * const name_rev_usage[] = {
        N_("git name-rev [<options>] <commit>..."),
        N_("git name-rev [<options>] --all"),
-       N_("git name-rev [<options>] --stdin"),
+       N_("git name-rev [<options>] --annotate-stdin"),
        NULL
 };
 
@@ -527,7 +566,7 @@ static void name_rev_line(char *p, struct name_ref_data *data)
 int cmd_name_rev(int argc, const char **argv, const char *prefix)
 {
        struct object_array revs = OBJECT_ARRAY_INIT;
-       int all = 0, transform_stdin = 0, allow_undefined = 1, always = 0, peel_tag = 0;
+       int all = 0, annotate_stdin = 0, transform_stdin = 0, allow_undefined = 1, always = 0, peel_tag = 0;
        struct name_ref_data data = { 0, 0, STRING_LIST_INIT_NODUP, STRING_LIST_INIT_NODUP };
        struct option opts[] = {
                OPT_BOOL(0, "name-only", &data.name_only, N_("print only ref-based names (no object names)")),
@@ -538,7 +577,8 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix)
                                   N_("ignore refs matching <pattern>")),
                OPT_GROUP(""),
                OPT_BOOL(0, "all", &all, N_("list all commits reachable from all refs")),
-               OPT_BOOL(0, "stdin", &transform_stdin, N_("read from stdin")),
+               OPT_BOOL(0, "stdin", &transform_stdin, N_("deprecated: use annotate-stdin instead")),
+               OPT_BOOL(0, "annotate-stdin", &annotate_stdin, N_("annotate text from stdin")),
                OPT_BOOL(0, "undefined", &allow_undefined, N_("allow to print `undefined` names (default)")),
                OPT_BOOL(0, "always",     &always,
                           N_("show abbreviated commit object as fallback")),
@@ -554,12 +594,20 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix)
        init_commit_rev_name(&rev_names);
        git_config(git_default_config, NULL);
        argc = parse_options(argc, argv, prefix, opts, name_rev_usage, 0);
-       if (all + transform_stdin + !!argc > 1) {
+
+       if (transform_stdin) {
+               warning("--stdin is deprecated. Please use --annotate-stdin instead, "
+                                       "which is functionally equivalent.\n"
+                                       "This option will be removed in a future release.");
+               annotate_stdin = 1;
+       }
+
+       if (all + annotate_stdin + !!argc > 1) {
                error("Specify either a list, or --all, not both!");
                usage_with_options(name_rev_usage, opts);
        }
-       if (all || transform_stdin)
-               cutoff = 0;
+       if (all || annotate_stdin)
+               disable_cutoff();
 
        for (; argc; argc--, argv++) {
                struct object_id oid;
@@ -587,10 +635,8 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix)
                        continue;
                }
 
-               if (commit) {
-                       if (cutoff > commit->date)
-                               cutoff = commit->date;
-               }
+               if (commit)
+                       set_commit_cutoff(commit);
 
                if (peel_tag) {
                        if (!commit) {
@@ -603,25 +649,19 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix)
                add_object_array(object, *argv, &revs);
        }
 
-       if (cutoff) {
-               /* check for undeflow */
-               if (cutoff > TIME_MIN + CUTOFF_DATE_SLOP)
-                       cutoff = cutoff - CUTOFF_DATE_SLOP;
-               else
-                       cutoff = TIME_MIN;
-       }
+       adjust_cutoff_timestamp_for_slop();
+
        for_each_ref(name_ref, &data);
        name_tips();
 
-       if (transform_stdin) {
-               char buffer[2048];
+       if (annotate_stdin) {
+               struct strbuf sb = STRBUF_INIT;
 
-               while (!feof(stdin)) {
-                       char *p = fgets(buffer, sizeof(buffer), stdin);
-                       if (!p)
-                               break;
-                       name_rev_line(p, &data);
+               while (strbuf_getline(&sb, stdin) != EOF) {
+                       strbuf_addch(&sb, '\n');
+                       name_rev_line(sb.buf, &data);
                }
+               strbuf_release(&sb);
        } else if (all) {
                int i, max;
 
index 05d60483e8261d86a1295512c46a7e8cebe42469..a3d0d15a227f2142f2d9d5fddbe0017d0e7a5c7f 100644 (file)
@@ -32,8 +32,8 @@ static const char * const git_notes_usage[] = {
        N_("git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]"),
        N_("git notes [--ref <notes-ref>] show [<object>]"),
        N_("git notes [--ref <notes-ref>] merge [-v | -q] [-s <strategy>] <notes-ref>"),
-       N_("git notes merge --commit [-v | -q]"),
-       N_("git notes merge --abort [-v | -q]"),
+       "git notes merge --commit [-v | -q]",
+       "git notes merge --abort [-v | -q]",
        N_("git notes [--ref <notes-ref>] remove [<object>...]"),
        N_("git notes [--ref <notes-ref>] prune [-n] [-v]"),
        N_("git notes [--ref <notes-ref>] get-ref"),
@@ -89,7 +89,7 @@ static const char * const git_notes_prune_usage[] = {
 };
 
 static const char * const git_notes_get_ref_usage[] = {
-       N_("git notes get-ref"),
+       "git notes get-ref",
        NULL
 };
 
@@ -199,7 +199,7 @@ static void prepare_note_data(const struct object_id *object, struct note_data *
 
 static void write_note_data(struct note_data *d, struct object_id *oid)
 {
-       if (write_object_file(d->buf.buf, d->buf.len, blob_type, oid)) {
+       if (write_object_file(d->buf.buf, d->buf.len, OBJ_BLOB, oid)) {
                int status = die_message(_("unable to write note object"));
 
                if (d->edit_path)
index ba2006f2212bea19b202ba3db155b345bf7fbb89..014dcd4bc98459315b6fbac672df828e06299be0 100644 (file)
@@ -237,8 +237,6 @@ static unsigned long cache_max_small_delta_size = 1000;
 
 static unsigned long window_memory_limit = 0;
 
-static struct list_objects_filter_options filter_options;
-
 static struct string_list uri_protocols = STRING_LIST_INIT_NODUP;
 
 enum missing_action {
@@ -1199,16 +1197,26 @@ static void write_pack_file(void)
                        display_progress(progress_state, written);
                }
 
-               /*
-                * Did we write the wrong # entries in the header?
-                * If so, rewrite it like in fast-import
-                */
                if (pack_to_stdout) {
-                       finalize_hashfile(f, hash, CSUM_HASH_IN_STREAM | CSUM_CLOSE);
+                       /*
+                        * We never fsync when writing to stdout since we may
+                        * not be writing to an actual pack file. For instance,
+                        * the upload-pack code passes a pipe here. Calling
+                        * fsync on a pipe results in unnecessary
+                        * synchronization with the reader on some platforms.
+                        */
+                       finalize_hashfile(f, hash, FSYNC_COMPONENT_NONE,
+                                         CSUM_HASH_IN_STREAM | CSUM_CLOSE);
                } else if (nr_written == nr_remaining) {
-                       finalize_hashfile(f, hash, CSUM_HASH_IN_STREAM | CSUM_FSYNC | CSUM_CLOSE);
+                       finalize_hashfile(f, hash, FSYNC_COMPONENT_PACK,
+                                         CSUM_HASH_IN_STREAM | CSUM_FSYNC | CSUM_CLOSE);
                } else {
-                       int fd = finalize_hashfile(f, hash, 0);
+                       /*
+                        * If we wrote the wrong number of entries in the
+                        * header, rewrite it like in fast-import.
+                        */
+
+                       int fd = finalize_hashfile(f, hash, FSYNC_COMPONENT_PACK, 0);
                        fixup_pack_header_footer(fd, hash, pack_tmp_name,
                                                 nr_written, hash, offset);
                        close(fd);
@@ -1802,7 +1810,7 @@ static void add_preferred_base(struct object_id *oid)
                return;
 
        data = read_object_with_reference(the_repository, oid,
-                                         tree_type, &size, &tree_oid);
+                                         OBJ_TREE, &size, &tree_oid);
        if (!data)
                return;
 
@@ -3504,7 +3512,7 @@ static int option_parse_missing_action(const struct option *opt,
                return 0;
        }
 
-       die(_("invalid value for --missing"));
+       die(_("invalid value for '%s': '%s'"), "--missing", arg);
        return 0;
 }
 
@@ -3651,7 +3659,7 @@ static int pack_options_allow_reuse(void)
 
 static int get_object_list_from_bitmap(struct rev_info *revs)
 {
-       if (!(bitmap_git = prepare_bitmap_walk(revs, &filter_options, 0)))
+       if (!(bitmap_git = prepare_bitmap_walk(revs, 0)))
                return -1;
 
        if (pack_options_allow_reuse() &&
@@ -3714,9 +3722,8 @@ static void mark_bitmap_preferred_tips(void)
        }
 }
 
-static void get_object_list(int ac, const char **av)
+static void get_object_list(struct rev_info *revs, int ac, const char **av)
 {
-       struct rev_info revs;
        struct setup_revision_opt s_r_opt = {
                .allow_exclude_promisor_objects = 1,
        };
@@ -3724,9 +3731,8 @@ static void get_object_list(int ac, const char **av)
        int flags = 0;
        int save_warning;
 
-       repo_init_revisions(the_repository, &revs, NULL);
        save_commit_buffer = 0;
-       setup_revisions(ac, av, &revs, &s_r_opt);
+       setup_revisions(ac, av, revs, &s_r_opt);
 
        /* make sure shallows are read */
        is_repository_shallow(the_repository);
@@ -3756,13 +3762,13 @@ static void get_object_list(int ac, const char **av)
                        }
                        die(_("not a rev '%s'"), line);
                }
-               if (handle_revision_arg(line, &revs, flags, REVARG_CANNOT_BE_FILENAME))
+               if (handle_revision_arg(line, revs, flags, REVARG_CANNOT_BE_FILENAME))
                        die(_("bad revision '%s'"), line);
        }
 
        warn_on_object_refname_ambiguity = save_warning;
 
-       if (use_bitmap_index && !get_object_list_from_bitmap(&revs))
+       if (use_bitmap_index && !get_object_list_from_bitmap(revs))
                return;
 
        if (use_delta_islands)
@@ -3771,24 +3777,24 @@ static void get_object_list(int ac, const char **av)
        if (write_bitmap_index)
                mark_bitmap_preferred_tips();
 
-       if (prepare_revision_walk(&revs))
+       if (prepare_revision_walk(revs))
                die(_("revision walk setup failed"));
-       mark_edges_uninteresting(&revs, show_edge, sparse);
+       mark_edges_uninteresting(revs, show_edge, sparse);
 
        if (!fn_show_object)
                fn_show_object = show_object;
-       traverse_commit_list_filtered(&filter_options, &revs,
-                                     show_commit, fn_show_object, NULL,
-                                     NULL);
+       traverse_commit_list(revs,
+                            show_commit, fn_show_object,
+                            NULL);
 
        if (unpack_unreachable_expiration) {
-               revs.ignore_missing_links = 1;
-               if (add_unseen_recent_objects_to_traversal(&revs,
+               revs->ignore_missing_links = 1;
+               if (add_unseen_recent_objects_to_traversal(revs,
                                unpack_unreachable_expiration))
                        die(_("unable to add recent objects"));
-               if (prepare_revision_walk(&revs))
+               if (prepare_revision_walk(revs))
                        die(_("revision walk setup failed"));
-               traverse_commit_list(&revs, record_recent_commit,
+               traverse_commit_list(revs, record_recent_commit,
                                     record_recent_object, NULL);
        }
 
@@ -3861,6 +3867,21 @@ static int option_parse_unpack_unreachable(const struct option *opt,
        return 0;
 }
 
+struct po_filter_data {
+       unsigned have_revs:1;
+       struct rev_info revs;
+};
+
+static struct list_objects_filter_options *po_filter_revs_init(void *value)
+{
+       struct po_filter_data *data = value;
+
+       repo_init_revisions(the_repository, &data->revs, NULL);
+       data->have_revs = 1;
+
+       return &data->revs.filter;
+}
+
 int cmd_pack_objects(int argc, const char **argv, const char *prefix)
 {
        int use_internal_rev_list = 0;
@@ -3871,6 +3892,8 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
        int rev_list_index = 0;
        int stdin_packs = 0;
        struct string_list keep_pack_list = STRING_LIST_INIT_NODUP;
+       struct po_filter_data pfd = { .have_revs = 0 };
+
        struct option pack_objects_options[] = {
                OPT_SET_INT('q', "quiet", &progress,
                            N_("do not show progress meter"), 0),
@@ -3956,7 +3979,7 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
                              &write_bitmap_index,
                              N_("write a bitmap index if possible"),
                              WRITE_BITMAP_QUIET, PARSE_OPT_HIDDEN),
-               OPT_PARSE_LIST_OBJECTS_FILTER(&filter_options),
+               OPT_PARSE_LIST_OBJECTS_FILTER_INIT(&pfd, po_filter_revs_init),
                OPT_CALLBACK_F(0, "missing", NULL, N_("action"),
                  N_("handling for missing objects"), PARSE_OPT_NONEG,
                  option_parse_missing_action),
@@ -3976,9 +3999,11 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
        read_replace_refs = 0;
 
        sparse = git_env_bool("GIT_TEST_PACK_SPARSE", -1);
-       prepare_repo_settings(the_repository);
-       if (sparse < 0)
-               sparse = the_repository->settings.pack_use_sparse;
+       if (the_repository->gitdir) {
+               prepare_repo_settings(the_repository);
+               if (sparse < 0)
+                       sparse = the_repository->settings.pack_use_sparse;
+       }
 
        reset_pack_idx_option(&pack_idx_opts);
        git_config(git_pack_config, NULL);
@@ -4074,7 +4099,7 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
        if (!rev_list_all || !rev_list_reflog || !rev_list_index)
                unpack_unreachable_expiration = 0;
 
-       if (filter_options.choice) {
+       if (pfd.have_revs && pfd.revs.filter.choice) {
                if (!pack_to_stdout)
                        die(_("cannot use --filter without --stdout"));
                if (stdin_packs)
@@ -4150,8 +4175,13 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
                        add_unreachable_loose_objects();
        } else if (!use_internal_rev_list) {
                read_object_list_from_stdin();
+       } else if (pfd.have_revs) {
+               get_object_list(&pfd.revs, rp.nr, rp.v);
        } else {
-               get_object_list(rp.nr, rp.v);
+               struct rev_info revs;
+
+               repo_init_revisions(the_repository, &revs, NULL);
+               get_object_list(&revs, rp.nr, rp.v);
        }
        cleanup_preferred_base();
        if (include_tag && nr_result)
index 822ffff51fbd3aa23abc166ab016fb00933f8e9a..881fcf32732caf810789c254d31eb05058ca0187 100644 (file)
@@ -32,8 +32,12 @@ static int scan_hunk_header(const char *p, int *p_before, int *p_after)
        n = strspn(q, digits);
        if (q[n] == ',') {
                q += n + 1;
+               *p_before = atoi(q);
                n = strspn(q, digits);
+       } else {
+               *p_before = 1;
        }
+
        if (n == 0 || q[n] != ' ' || q[n+1] != '+')
                return 0;
 
@@ -41,13 +45,14 @@ static int scan_hunk_header(const char *p, int *p_before, int *p_after)
        n = strspn(r, digits);
        if (r[n] == ',') {
                r += n + 1;
+               *p_after = atoi(r);
                n = strspn(r, digits);
+       } else {
+               *p_after = 1;
        }
        if (n == 0)
                return 0;
 
-       *p_before = atoi(q);
-       *p_after = atoi(r);
        return 1;
 }
 
index b7b9281a8cea2c009ef9a4487094613f032f6aba..da3273a268b47d89be86ac05780905fa9ad766d8 100644 (file)
@@ -3,7 +3,7 @@
 #include "prune-packed.h"
 
 static const char * const prune_packed_usage[] = {
-       N_("git prune-packed [-n | --dry-run] [-q | --quiet]"),
+       "git prune-packed [-n | --dry-run] [-q | --quiet]",
        NULL
 };
 
index 100cbf9fb85b59fee6a8f9f90ced02c9abdaac6e..4d667abc19d91c0c83ef9faf6b1944f73d2ff48c 100644 (file)
@@ -42,9 +42,9 @@ static enum rebase_type parse_config_rebase(const char *key, const char *value,
                return v;
 
        if (fatal)
-               die(_("Invalid value for %s: %s"), key, value);
+               die(_("invalid value for '%s': '%s'"), key, value);
        else
-               error(_("Invalid value for %s: %s"), key, value);
+               error(_("invalid value for '%s': '%s'"), key, value);
 
        return REBASE_INVALID;
 }
@@ -318,7 +318,7 @@ static const char *config_get_ff(void)
        if (!strcmp(value, "only"))
                return "--ff-only";
 
-       die(_("Invalid value for pull.ff: %s"), value);
+       die(_("invalid value for '%s': '%s'"), "pull.ff", value);
 }
 
 /**
@@ -994,8 +994,10 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
                set_reflog_message(argc, argv);
 
        git_config(git_pull_config, NULL);
-       prepare_repo_settings(the_repository);
-       the_repository->settings.command_requires_full_index = 0;
+       if (the_repository->gitdir) {
+               prepare_repo_settings(the_repository);
+               the_repository->settings.command_requires_full_index = 0;
+       }
 
        argc = parse_options(argc, argv, prefix, pull_options, pull_usage, 0);
 
@@ -1038,14 +1040,13 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
                oidclr(&orig_head);
 
        if (opt_rebase) {
-               int autostash = config_autostash;
-               if (opt_autostash != -1)
-                       autostash = opt_autostash;
+               if (opt_autostash == -1)
+                       opt_autostash = config_autostash;
 
                if (is_null_oid(&orig_head) && !is_cache_unborn())
                        die(_("Updating an unborn branch with changes added to the index."));
 
-               if (!autostash)
+               if (!opt_autostash)
                        require_clean_work_tree(the_repository,
                                N_("pull with rebase"),
                                _("please commit or stash them."), 1, 0);
index 359db90321c31ea27aa9160f08d21b89179ca488..cad997965a7fb73d757f7a74570b634cbc9408e9 100644 (file)
@@ -486,7 +486,7 @@ static int git_push_config(const char *k, const char *v, void *cb)
                                if (value && !strcasecmp(value, "if-asked"))
                                        set_push_cert_flags(flags, SEND_PACK_PUSH_CERT_IF_ASKED);
                                else
-                                       return error("Invalid value for '%s'", k);
+                                       return error(_("invalid value for '%s'"), k);
                        }
                }
        } else if (!strcmp(k, "push.recursesubmodules")) {
index 2109c4c9e5c1c747ea08c8e2152b610c5159ddbe..9f1f33e95466a4b2ff4f99a3b5e95878e40c6d38 100644 (file)
@@ -160,15 +160,22 @@ int cmd_read_tree(int argc, const char **argv, const char *cmd_prefix)
        argc = parse_options(argc, argv, cmd_prefix, read_tree_options,
                             read_tree_usage, 0);
 
-       hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
-
        prefix_set = opts.prefix ? 1 : 0;
        if (1 < opts.merge + opts.reset + prefix_set)
                die("Which one? -m, --reset, or --prefix?");
 
+       /* Prefix should not start with a directory separator */
+       if (opts.prefix && opts.prefix[0] == '/')
+               die("Invalid prefix, prefix cannot start with '/'");
+
        if (opts.reset)
                opts.reset = UNPACK_RESET_OVERWRITE_UNTRACKED;
 
+       prepare_repo_settings(the_repository);
+       the_repository->settings.command_requires_full_index = 0;
+
+       hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
+
        /*
         * NEEDSWORK
         *
@@ -210,6 +217,9 @@ int cmd_read_tree(int argc, const char **argv, const char *cmd_prefix)
        if (opts.merge && !opts.index_only)
                setup_work_tree();
 
+       if (opts.skip_sparse_checkout)
+               ensure_full_index(&the_index);
+
        if (opts.merge) {
                switch (stage - 1) {
                case 0:
index 36490d06c8ac6ad4c10596b7e2a4556ec7aaa8c8..7f3bffc0a234ad54310258f47d185e907f8ac585 100644 (file)
@@ -28,6 +28,7 @@
 #include "sequencer.h"
 #include "rebase-interactive.h"
 #include "reset.h"
+#include "hook.h"
 
 #define DEFAULT_REFLOG_ACTION "rebase"
 
@@ -36,7 +37,7 @@ static char const * const builtin_rebase_usage[] = {
                "[--onto <newbase> | --keep-base] [<upstream> [<branch>]]"),
        N_("git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] "
                "--root [<branch>]"),
-       N_("git rebase --continue | --abort | --skip | --edit-todo"),
+       "git rebase --continue | --abort | --skip | --edit-todo",
        NULL
 };
 
@@ -570,7 +571,8 @@ static int finish_rebase(struct rebase_options *opts)
 
 static int move_to_original_branch(struct rebase_options *opts)
 {
-       struct strbuf orig_head_reflog = STRBUF_INIT, head_reflog = STRBUF_INIT;
+       struct strbuf branch_reflog = STRBUF_INIT, head_reflog = STRBUF_INIT;
+       struct reset_head_opts ropts = { 0 };
        int ret;
 
        if (!opts->head_name)
@@ -579,16 +581,17 @@ static int move_to_original_branch(struct rebase_options *opts)
        if (!opts->onto)
                BUG("move_to_original_branch without onto");
 
-       strbuf_addf(&orig_head_reflog, "rebase finished: %s onto %s",
+       strbuf_addf(&branch_reflog, "rebase finished: %s onto %s",
                    opts->head_name, oid_to_hex(&opts->onto->object.oid));
        strbuf_addf(&head_reflog, "rebase finished: returning to %s",
                    opts->head_name);
-       ret = reset_head(the_repository, NULL, "", opts->head_name,
-                        RESET_HEAD_REFS_ONLY,
-                        orig_head_reflog.buf, head_reflog.buf,
-                        DEFAULT_REFLOG_ACTION);
+       ropts.branch = opts->head_name;
+       ropts.flags = RESET_HEAD_REFS_ONLY;
+       ropts.branch_msg = branch_reflog.buf;
+       ropts.head_msg = head_reflog.buf;
+       ret = reset_head(the_repository, &ropts);
 
-       strbuf_release(&orig_head_reflog);
+       strbuf_release(&branch_reflog);
        strbuf_release(&head_reflog);
        return ret;
 }
@@ -670,13 +673,15 @@ static int run_am(struct rebase_options *opts)
 
        status = run_command(&format_patch);
        if (status) {
+               struct reset_head_opts ropts = { 0 };
                unlink(rebased_patches);
                free(rebased_patches);
                strvec_clear(&am.args);
 
-               reset_head(the_repository, &opts->orig_head, "checkout",
-                          opts->head_name, 0,
-                          "HEAD", NULL, DEFAULT_REFLOG_ACTION);
+               ropts.oid = &opts->orig_head;
+               ropts.branch = opts->head_name;
+               ropts.default_reflog_action = DEFAULT_REFLOG_ACTION;
+               reset_head(the_repository, &ropts);
                error(_("\ngit encountered an error while preparing the "
                        "patches to replay\n"
                        "these revisions:\n"
@@ -812,6 +817,28 @@ static int rebase_config(const char *var, const char *value, void *data)
        return git_default_config(var, value, data);
 }
 
+static int checkout_up_to_date(struct rebase_options *options)
+{
+       struct strbuf buf = STRBUF_INIT;
+       struct reset_head_opts ropts = { 0 };
+       int ret = 0;
+
+       strbuf_addf(&buf, "%s: checkout %s",
+                   getenv(GIT_REFLOG_ACTION_ENVIRONMENT),
+                   options->switch_to);
+       ropts.oid = &options->orig_head;
+       ropts.branch = options->head_name;
+       ropts.flags = RESET_HEAD_RUN_POST_CHECKOUT_HOOK;
+       if (!ropts.branch)
+               ropts.flags |=  RESET_HEAD_DETACH;
+       ropts.head_msg = buf.buf;
+       if (reset_head(the_repository, &ropts) < 0)
+               ret = error(_("could not switch to %s"), options->switch_to);
+       strbuf_release(&buf);
+
+       return ret;
+}
+
 /*
  * Determines whether the commits in from..to are linear, i.e. contain
  * no merge commits. This function *expects* `from` to be an ancestor of
@@ -1017,6 +1044,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
        int reschedule_failed_exec = -1;
        int allow_preemptive_ff = 1;
        int preserve_merges_selected = 0;
+       struct reset_head_opts ropts = { 0 };
        struct option builtin_rebase_options[] = {
                OPT_STRING(0, "onto", &options.onto_name,
                           N_("revision"),
@@ -1254,9 +1282,8 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 
                rerere_clear(the_repository, &merge_rr);
                string_list_clear(&merge_rr, 1);
-
-               if (reset_head(the_repository, NULL, "reset", NULL, RESET_HEAD_HARD,
-                              NULL, NULL, DEFAULT_REFLOG_ACTION) < 0)
+               ropts.flags = RESET_HEAD_HARD;
+               if (reset_head(the_repository, &ropts) < 0)
                        die(_("could not discard worktree changes"));
                remove_branch_state(the_repository, 0);
                if (read_basic_state(&options))
@@ -1273,9 +1300,11 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 
                if (read_basic_state(&options))
                        exit(1);
-               if (reset_head(the_repository, &options.orig_head, "reset",
-                              options.head_name, RESET_HEAD_HARD,
-                              NULL, NULL, DEFAULT_REFLOG_ACTION) < 0)
+               ropts.oid = &options.orig_head;
+               ropts.branch = options.head_name;
+               ropts.flags = RESET_HEAD_HARD;
+               ropts.default_reflog_action = DEFAULT_REFLOG_ACTION;
+               if (reset_head(the_repository, &ropts) < 0)
                        die(_("could not move back to %s"),
                            oid_to_hex(&options.orig_head));
                remove_branch_state(the_repository, 0);
@@ -1554,33 +1583,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
                options.upstream_arg = "--root";
        }
 
-       /* Make sure the branch to rebase onto is valid. */
-       if (keep_base) {
-               strbuf_reset(&buf);
-               strbuf_addstr(&buf, options.upstream_name);
-               strbuf_addstr(&buf, "...");
-               options.onto_name = xstrdup(buf.buf);
-       } else if (!options.onto_name)
-               options.onto_name = options.upstream_name;
-       if (strstr(options.onto_name, "...")) {
-               if (get_oid_mb(options.onto_name, &merge_base) < 0) {
-                       if (keep_base)
-                               die(_("'%s': need exactly one merge base with branch"),
-                                   options.upstream_name);
-                       else
-                               die(_("'%s': need exactly one merge base"),
-                                   options.onto_name);
-               }
-               options.onto = lookup_commit_or_die(&merge_base,
-                                                   options.onto_name);
-       } else {
-               options.onto =
-                       lookup_commit_reference_by_name(options.onto_name);
-               if (!options.onto)
-                       die(_("Does not point to a valid commit '%s'"),
-                               options.onto_name);
-       }
-
        /*
         * If the branch to rebase is given, that is the branch we will rebase
         * branch_name -- branch/commit being rebased, or
@@ -1630,6 +1632,34 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
        } else
                BUG("unexpected number of arguments left to parse");
 
+       /* Make sure the branch to rebase onto is valid. */
+       if (keep_base) {
+               strbuf_reset(&buf);
+               strbuf_addstr(&buf, options.upstream_name);
+               strbuf_addstr(&buf, "...");
+               strbuf_addstr(&buf, branch_name);
+               options.onto_name = xstrdup(buf.buf);
+       } else if (!options.onto_name)
+               options.onto_name = options.upstream_name;
+       if (strstr(options.onto_name, "...")) {
+               if (get_oid_mb(options.onto_name, &merge_base) < 0) {
+                       if (keep_base)
+                               die(_("'%s': need exactly one merge base with branch"),
+                                   options.upstream_name);
+                       else
+                               die(_("'%s': need exactly one merge base"),
+                                   options.onto_name);
+               }
+               options.onto = lookup_commit_or_die(&merge_base,
+                                                   options.onto_name);
+       } else {
+               options.onto =
+                       lookup_commit_reference_by_name(options.onto_name);
+               if (!options.onto)
+                       die(_("Does not point to a valid commit '%s'"),
+                               options.onto_name);
+       }
+
        if (options.fork_point > 0) {
                struct commit *head =
                        lookup_commit_reference(the_repository,
@@ -1641,10 +1671,10 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
        if (repo_read_index(the_repository) < 0)
                die(_("could not read index"));
 
-       if (options.autostash) {
-               create_autostash(the_repository, state_dir_path("autostash", &options),
-                                DEFAULT_REFLOG_ACTION);
-       }
+       if (options.autostash)
+               create_autostash(the_repository,
+                                state_dir_path("autostash", &options));
+
 
        if (require_clean_work_tree(the_repository, "rebase",
                                    _("Please commit or stash them."), 1, 1)) {
@@ -1673,21 +1703,9 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
                if (!(options.flags & REBASE_FORCE)) {
                        /* Lazily switch to the target branch if needed... */
                        if (options.switch_to) {
-                               strbuf_reset(&buf);
-                               strbuf_addf(&buf, "%s: checkout %s",
-                                           getenv(GIT_REFLOG_ACTION_ENVIRONMENT),
-                                           options.switch_to);
-                               if (reset_head(the_repository,
-                                              &options.orig_head, "checkout",
-                                              options.head_name,
-                                              RESET_HEAD_RUN_POST_CHECKOUT_HOOK,
-                                              NULL, buf.buf,
-                                              DEFAULT_REFLOG_ACTION) < 0) {
-                                       ret = error(_("could not switch to "
-                                                       "%s"),
-                                                     options.switch_to);
+                               ret = checkout_up_to_date(&options);
+                               if (ret)
                                        goto cleanup;
-                               }
                        }
 
                        if (!(options.flags & REBASE_NO_QUIET))
@@ -1712,7 +1730,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 
        /* If a hook exists, give it a chance to interrupt*/
        if (!ok_to_skip_pre_rebase &&
-           run_hook_le(NULL, "pre-rebase", options.upstream_arg,
+           run_hooks_l("pre-rebase", options.upstream_arg,
                        argc ? argv[0] : NULL, NULL))
                die(_("The pre-rebase hook refused to rebase."));
 
@@ -1754,10 +1772,13 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 
        strbuf_addf(&msg, "%s: checkout %s",
                    getenv(GIT_REFLOG_ACTION_ENVIRONMENT), options.onto_name);
-       if (reset_head(the_repository, &options.onto->object.oid, "checkout", NULL,
-                      RESET_HEAD_DETACH | RESET_ORIG_HEAD |
-                      RESET_HEAD_RUN_POST_CHECKOUT_HOOK,
-                      NULL, msg.buf, DEFAULT_REFLOG_ACTION))
+       ropts.oid = &options.onto->object.oid;
+       ropts.orig_head = &options.orig_head,
+       ropts.flags = RESET_HEAD_DETACH | RESET_ORIG_HEAD |
+                       RESET_HEAD_RUN_POST_CHECKOUT_HOOK;
+       ropts.head_msg = msg.buf;
+       ropts.default_reflog_action = DEFAULT_REFLOG_ACTION;
+       if (reset_head(the_repository, &ropts))
                die(_("Could not detach HEAD"));
        strbuf_release(&msg);
 
@@ -1772,9 +1793,11 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
                strbuf_addf(&msg, "rebase finished: %s onto %s",
                        options.head_name ? options.head_name : "detached HEAD",
                        oid_to_hex(&options.onto->object.oid));
-               reset_head(the_repository, NULL, "Fast-forwarded", options.head_name,
-                          RESET_HEAD_REFS_ONLY, "HEAD", msg.buf,
-                          DEFAULT_REFLOG_ACTION);
+               memset(&ropts, 0, sizeof(ropts));
+               ropts.branch = options.head_name;
+               ropts.flags = RESET_HEAD_REFS_ONLY;
+               ropts.head_msg = msg.buf;
+               reset_head(the_repository, &ropts);
                strbuf_release(&msg);
                ret = finish_rebase(&options);
                goto cleanup;
index 9f4a0b816cf9b6acd077a10a728a83e4048b9b5e..9aabffa1afb646f0513068de3d6366a7bc58809a 100644 (file)
@@ -581,32 +581,19 @@ static char *prepare_push_cert_nonce(const char *path, timestamp_t stamp)
        return strbuf_detach(&buf, NULL);
 }
 
-/*
- * NEEDSWORK: reuse find_commit_header() from jk/commit-author-parsing
- * after dropping "_commit" from its name and possibly moving it out
- * of commit.c
- */
 static char *find_header(const char *msg, size_t len, const char *key,
                         const char **next_line)
 {
-       int key_len = strlen(key);
-       const char *line = msg;
-
-       while (line && line < msg + len) {
-               const char *eol = strchrnul(line, '\n');
-
-               if ((msg + len <= eol) || line == eol)
-                       return NULL;
-               if (line + key_len < eol &&
-                   !memcmp(line, key, key_len) && line[key_len] == ' ') {
-                       int offset = key_len + 1;
-                       if (next_line)
-                               *next_line = *eol ? eol + 1 : eol;
-                       return xmemdupz(line + offset, (eol - line) - offset);
-               }
-               line = *eol ? eol + 1 : NULL;
-       }
-       return NULL;
+       size_t out_len;
+       const char *val = find_header_mem(msg, len, key, &out_len);
+
+       if (!val)
+               return NULL;
+
+       if (next_line)
+               *next_line = val + out_len + 1;
+
+       return xmemdupz(val, out_len);
 }
 
 /*
@@ -762,7 +749,7 @@ static void prepare_push_cert_sha1(struct child_process *proc)
                int bogs /* beginning_of_gpg_sig */;
 
                already_done = 1;
-               if (write_object_file(push_cert.buf, push_cert.len, "blob",
+               if (write_object_file(push_cert.buf, push_cert.len, OBJ_BLOB,
                                      &push_cert_oid))
                        oidclr(&push_cert_oid);
 
@@ -826,13 +813,14 @@ static int run_and_feed_hook(const char *hook_name, feed_fn feed,
        proc.trace2_hook_name = hook_name;
 
        if (feed_state->push_options) {
-               int i;
+               size_t i;
                for (i = 0; i < feed_state->push_options->nr; i++)
                        strvec_pushf(&proc.env_array,
-                                    "GIT_PUSH_OPTION_%d=%s", i,
+                                    "GIT_PUSH_OPTION_%"PRIuMAX"=%s",
+                                    (uintmax_t)i,
                                     feed_state->push_options->items[i].string);
-               strvec_pushf(&proc.env_array, "GIT_PUSH_OPTION_COUNT=%d",
-                            feed_state->push_options->nr);
+               strvec_pushf(&proc.env_array, "GIT_PUSH_OPTION_COUNT=%"PRIuMAX"",
+                            (uintmax_t)feed_state->push_options->nr);
        } else
                strvec_pushf(&proc.env_array, "GIT_PUSH_OPTION_COUNT");
 
@@ -1421,12 +1409,17 @@ static const char *push_to_deploy(unsigned char *sha1,
 static const char *push_to_checkout_hook = "push-to-checkout";
 
 static const char *push_to_checkout(unsigned char *hash,
+                                   int *invoked_hook,
                                    struct strvec *env,
                                    const char *work_tree)
 {
+       struct run_hooks_opt opt = RUN_HOOKS_OPT_INIT;
+       opt.invoked_hook = invoked_hook;
+
        strvec_pushf(env, "GIT_WORK_TREE=%s", absolute_path(work_tree));
-       if (run_hook_le(env->v, push_to_checkout_hook,
-                       hash_to_hex(hash), NULL))
+       strvec_pushv(&opt.env, env->v);
+       strvec_push(&opt.args, hash_to_hex(hash));
+       if (run_hooks_opt(push_to_checkout_hook, &opt))
                return "push-to-checkout hook declined";
        else
                return NULL;
@@ -1436,6 +1429,7 @@ static const char *update_worktree(unsigned char *sha1, const struct worktree *w
 {
        const char *retval, *git_dir;
        struct strvec env = STRVEC_INIT;
+       int invoked_hook;
 
        if (!worktree || !worktree->path)
                BUG("worktree->path must be non-NULL");
@@ -1446,10 +1440,9 @@ static const char *update_worktree(unsigned char *sha1, const struct worktree *w
 
        strvec_pushf(&env, "GIT_DIR=%s", absolute_path(git_dir));
 
-       if (!hook_exists(push_to_checkout_hook))
+       retval = push_to_checkout(sha1, &invoked_hook, &env, worktree->path);
+       if (!invoked_hook)
                retval = push_to_deploy(sha1, &env, worktree->path);
-       else
-               retval = push_to_checkout(sha1, &env, worktree->path);
 
        strvec_clear(&env);
        return retval;
@@ -1971,6 +1964,15 @@ static void execute_commands(struct command *commands,
                return;
        }
 
+       /*
+        * If there is no command ready to run, should return directly to destroy
+        * temporary data in the quarantine area.
+        */
+       for (cmd = commands; cmd && cmd->error_string; cmd = cmd->next)
+               ; /* nothing */
+       if (!cmd)
+               return;
+
        /*
         * Now we'll start writing out refs, which means the objects need
         * to be in their final positions so that other processes can see them.
index a4b1dd27e13c93c670489f11c7c20b980952ba2a..c943c2aabe6e00ebad5fbb9c795ffd3a2639d6bb 100644 (file)
 #include "builtin.h"
 #include "config.h"
-#include "lockfile.h"
-#include "object-store.h"
-#include "repository.h"
-#include "commit.h"
-#include "refs.h"
-#include "dir.h"
-#include "tree-walk.h"
-#include "diff.h"
 #include "revision.h"
 #include "reachable.h"
 #include "worktree.h"
+#include "reflog.h"
 
-/* NEEDSWORK: switch to using parse_options */
-static const char reflog_expire_usage[] =
-N_("git reflog expire [--expire=<time>] "
-   "[--expire-unreachable=<time>] "
-   "[--rewrite] [--updateref] [--stale-fix] [--dry-run | -n] "
-   "[--verbose] [--all] <refs>...");
-static const char reflog_delete_usage[] =
-N_("git reflog delete [--rewrite] [--updateref] "
-   "[--dry-run | -n] [--verbose] <refs>...");
-static const char reflog_exists_usage[] =
-N_("git reflog exists <ref>");
+#define BUILTIN_REFLOG_SHOW_USAGE \
+       N_("git reflog [show] [<log-options>] [<ref>]")
 
-static timestamp_t default_reflog_expire;
-static timestamp_t default_reflog_expire_unreachable;
+#define BUILTIN_REFLOG_EXPIRE_USAGE \
+       N_("git reflog expire [--expire=<time>] [--expire-unreachable=<time>]\n" \
+          "                  [--rewrite] [--updateref] [--stale-fix]\n" \
+          "                  [--dry-run | -n] [--verbose] [--all [--single-worktree] | <refs>...]")
 
-struct cmd_reflog_expire_cb {
-       int stalefix;
-       timestamp_t expire_total;
-       timestamp_t expire_unreachable;
-       int recno;
-};
+#define BUILTIN_REFLOG_DELETE_USAGE \
+       N_("git reflog delete [--rewrite] [--updateref]\n" \
+          "                  [--dry-run | -n] [--verbose] <ref>@{<specifier>}...")
 
-struct expire_reflog_policy_cb {
-       enum {
-               UE_NORMAL,
-               UE_ALWAYS,
-               UE_HEAD
-       } unreachable_expire_kind;
-       struct commit_list *mark_list;
-       unsigned long mark_limit;
-       struct cmd_reflog_expire_cb cmd;
-       struct commit *tip_commit;
-       struct commit_list *tips;
-       unsigned int dry_run:1;
-};
+#define BUILTIN_REFLOG_EXISTS_USAGE \
+       N_("git reflog exists <ref>")
 
-struct worktree_reflogs {
-       struct worktree *worktree;
-       struct string_list reflogs;
+static const char *const reflog_show_usage[] = {
+       BUILTIN_REFLOG_SHOW_USAGE,
+       NULL,
 };
 
-/* Remember to update object flag allocation in object.h */
-#define INCOMPLETE     (1u<<10)
-#define STUDYING       (1u<<11)
-#define REACHABLE      (1u<<12)
-
-static int tree_is_complete(const struct object_id *oid)
-{
-       struct tree_desc desc;
-       struct name_entry entry;
-       int complete;
-       struct tree *tree;
-
-       tree = lookup_tree(the_repository, oid);
-       if (!tree)
-               return 0;
-       if (tree->object.flags & SEEN)
-               return 1;
-       if (tree->object.flags & INCOMPLETE)
-               return 0;
-
-       if (!tree->buffer) {
-               enum object_type type;
-               unsigned long size;
-               void *data = read_object_file(oid, &type, &size);
-               if (!data) {
-                       tree->object.flags |= INCOMPLETE;
-                       return 0;
-               }
-               tree->buffer = data;
-               tree->size = size;
-       }
-       init_tree_desc(&desc, tree->buffer, tree->size);
-       complete = 1;
-       while (tree_entry(&desc, &entry)) {
-               if (!has_object_file(&entry.oid) ||
-                   (S_ISDIR(entry.mode) && !tree_is_complete(&entry.oid))) {
-                       tree->object.flags |= INCOMPLETE;
-                       complete = 0;
-               }
-       }
-       free_tree_buffer(tree);
-
-       if (complete)
-               tree->object.flags |= SEEN;
-       return complete;
-}
-
-static int commit_is_complete(struct commit *commit)
-{
-       struct object_array study;
-       struct object_array found;
-       int is_incomplete = 0;
-       int i;
-
-       /* early return */
-       if (commit->object.flags & SEEN)
-               return 1;
-       if (commit->object.flags & INCOMPLETE)
-               return 0;
-       /*
-        * Find all commits that are reachable and are not marked as
-        * SEEN.  Then make sure the trees and blobs contained are
-        * complete.  After that, mark these commits also as SEEN.
-        * If some of the objects that are needed to complete this
-        * commit are missing, mark this commit as INCOMPLETE.
-        */
-       memset(&study, 0, sizeof(study));
-       memset(&found, 0, sizeof(found));
-       add_object_array(&commit->object, NULL, &study);
-       add_object_array(&commit->object, NULL, &found);
-       commit->object.flags |= STUDYING;
-       while (study.nr) {
-               struct commit *c;
-               struct commit_list *parent;
-
-               c = (struct commit *)object_array_pop(&study);
-               if (!c->object.parsed && !parse_object(the_repository, &c->object.oid))
-                       c->object.flags |= INCOMPLETE;
-
-               if (c->object.flags & INCOMPLETE) {
-                       is_incomplete = 1;
-                       break;
-               }
-               else if (c->object.flags & SEEN)
-                       continue;
-               for (parent = c->parents; parent; parent = parent->next) {
-                       struct commit *p = parent->item;
-                       if (p->object.flags & STUDYING)
-                               continue;
-                       p->object.flags |= STUDYING;
-                       add_object_array(&p->object, NULL, &study);
-                       add_object_array(&p->object, NULL, &found);
-               }
-       }
-       if (!is_incomplete) {
-               /*
-                * make sure all commits in "found" array have all the
-                * necessary objects.
-                */
-               for (i = 0; i < found.nr; i++) {
-                       struct commit *c =
-                               (struct commit *)found.objects[i].item;
-                       if (!tree_is_complete(get_commit_tree_oid(c))) {
-                               is_incomplete = 1;
-                               c->object.flags |= INCOMPLETE;
-                       }
-               }
-               if (!is_incomplete) {
-                       /* mark all found commits as complete, iow SEEN */
-                       for (i = 0; i < found.nr; i++)
-                               found.objects[i].item->flags |= SEEN;
-               }
-       }
-       /* clear flags from the objects we traversed */
-       for (i = 0; i < found.nr; i++)
-               found.objects[i].item->flags &= ~STUDYING;
-       if (is_incomplete)
-               commit->object.flags |= INCOMPLETE;
-       else {
-               /*
-                * If we come here, we have (1) traversed the ancestry chain
-                * from the "commit" until we reach SEEN commits (which are
-                * known to be complete), and (2) made sure that the commits
-                * encountered during the above traversal refer to trees that
-                * are complete.  Which means that we know *all* the commits
-                * we have seen during this process are complete.
-                */
-               for (i = 0; i < found.nr; i++)
-                       found.objects[i].item->flags |= SEEN;
-       }
-       /* free object arrays */
-       object_array_clear(&study);
-       object_array_clear(&found);
-       return !is_incomplete;
-}
-
-static int keep_entry(struct commit **it, struct object_id *oid)
-{
-       struct commit *commit;
-
-       if (is_null_oid(oid))
-               return 1;
-       commit = lookup_commit_reference_gently(the_repository, oid, 1);
-       if (!commit)
-               return 0;
-
-       /*
-        * Make sure everything in this commit exists.
-        *
-        * We have walked all the objects reachable from the refs
-        * and cache earlier.  The commits reachable by this commit
-        * must meet SEEN commits -- and then we should mark them as
-        * SEEN as well.
-        */
-       if (!commit_is_complete(commit))
-               return 0;
-       *it = commit;
-       return 1;
-}
-
-/*
- * Starting from commits in the cb->mark_list, mark commits that are
- * reachable from them.  Stop the traversal at commits older than
- * the expire_limit and queue them back, so that the caller can call
- * us again to restart the traversal with longer expire_limit.
- */
-static void mark_reachable(struct expire_reflog_policy_cb *cb)
-{
-       struct commit_list *pending;
-       timestamp_t expire_limit = cb->mark_limit;
-       struct commit_list *leftover = NULL;
-
-       for (pending = cb->mark_list; pending; pending = pending->next)
-               pending->item->object.flags &= ~REACHABLE;
-
-       pending = cb->mark_list;
-       while (pending) {
-               struct commit_list *parent;
-               struct commit *commit = pop_commit(&pending);
-               if (commit->object.flags & REACHABLE)
-                       continue;
-               if (parse_commit(commit))
-                       continue;
-               commit->object.flags |= REACHABLE;
-               if (commit->date < expire_limit) {
-                       commit_list_insert(commit, &leftover);
-                       continue;
-               }
-               commit->object.flags |= REACHABLE;
-               parent = commit->parents;
-               while (parent) {
-                       commit = parent->item;
-                       parent = parent->next;
-                       if (commit->object.flags & REACHABLE)
-                               continue;
-                       commit_list_insert(commit, &pending);
-               }
-       }
-       cb->mark_list = leftover;
-}
-
-static int unreachable(struct expire_reflog_policy_cb *cb, struct commit *commit, struct object_id *oid)
-{
-       /*
-        * We may or may not have the commit yet - if not, look it
-        * up using the supplied sha1.
-        */
-       if (!commit) {
-               if (is_null_oid(oid))
-                       return 0;
-
-               commit = lookup_commit_reference_gently(the_repository, oid,
-                                                       1);
-
-               /* Not a commit -- keep it */
-               if (!commit)
-                       return 0;
-       }
-
-       /* Reachable from the current ref?  Don't prune. */
-       if (commit->object.flags & REACHABLE)
-               return 0;
-
-       if (cb->mark_list && cb->mark_limit) {
-               cb->mark_limit = 0; /* dig down to the root */
-               mark_reachable(cb);
-       }
-
-       return !(commit->object.flags & REACHABLE);
-}
-
-/*
- * Return true iff the specified reflog entry should be expired.
- */
-static int should_expire_reflog_ent(struct object_id *ooid, struct object_id *noid,
-                                   const char *email, timestamp_t timestamp, int tz,
-                                   const char *message, void *cb_data)
-{
-       struct expire_reflog_policy_cb *cb = cb_data;
-       struct commit *old_commit, *new_commit;
-
-       if (timestamp < cb->cmd.expire_total)
-               return 1;
-
-       old_commit = new_commit = NULL;
-       if (cb->cmd.stalefix &&
-           (!keep_entry(&old_commit, ooid) || !keep_entry(&new_commit, noid)))
-               return 1;
-
-       if (timestamp < cb->cmd.expire_unreachable) {
-               switch (cb->unreachable_expire_kind) {
-               case UE_ALWAYS:
-                       return 1;
-               case UE_NORMAL:
-               case UE_HEAD:
-                       if (unreachable(cb, old_commit, ooid) || unreachable(cb, new_commit, noid))
-                               return 1;
-                       break;
-               }
-       }
-
-       if (cb->cmd.recno && --(cb->cmd.recno) == 0)
-               return 1;
-
-       return 0;
-}
-
-static int should_expire_reflog_ent_verbose(struct object_id *ooid,
-                                           struct object_id *noid,
-                                           const char *email,
-                                           timestamp_t timestamp, int tz,
-                                           const char *message, void *cb_data)
-{
-       struct expire_reflog_policy_cb *cb = cb_data;
-       int expire;
-
-       expire = should_expire_reflog_ent(ooid, noid, email, timestamp, tz,
-                                         message, cb);
-
-       if (!expire)
-               printf("keep %s", message);
-       else if (cb->dry_run)
-               printf("would prune %s", message);
-       else
-               printf("prune %s", message);
-
-       return expire;
-}
-
-static int push_tip_to_list(const char *refname, const struct object_id *oid,
-                           int flags, void *cb_data)
-{
-       struct commit_list **list = cb_data;
-       struct commit *tip_commit;
-       if (flags & REF_ISSYMREF)
-               return 0;
-       tip_commit = lookup_commit_reference_gently(the_repository, oid, 1);
-       if (!tip_commit)
-               return 0;
-       commit_list_insert(tip_commit, list);
-       return 0;
-}
-
-static int is_head(const char *refname)
-{
-       switch (ref_type(refname)) {
-       case REF_TYPE_OTHER_PSEUDOREF:
-       case REF_TYPE_MAIN_PSEUDOREF:
-               if (parse_worktree_ref(refname, NULL, NULL, &refname))
-                       BUG("not a worktree ref: %s", refname);
-               break;
-       default:
-               break;
-       }
-       return !strcmp(refname, "HEAD");
-}
+static const char *const reflog_expire_usage[] = {
+       BUILTIN_REFLOG_EXPIRE_USAGE,
+       NULL
+};
 
-static void reflog_expiry_prepare(const char *refname,
-                                 const struct object_id *oid,
-                                 void *cb_data)
-{
-       struct expire_reflog_policy_cb *cb = cb_data;
-       struct commit_list *elem;
-       struct commit *commit = NULL;
-
-       if (!cb->cmd.expire_unreachable || is_head(refname)) {
-               cb->unreachable_expire_kind = UE_HEAD;
-       } else {
-               commit = lookup_commit(the_repository, oid);
-               cb->unreachable_expire_kind = commit ? UE_NORMAL : UE_ALWAYS;
-       }
+static const char *const reflog_delete_usage[] = {
+       BUILTIN_REFLOG_DELETE_USAGE,
+       NULL
+};
 
-       if (cb->cmd.expire_unreachable <= cb->cmd.expire_total)
-               cb->unreachable_expire_kind = UE_ALWAYS;
+static const char *const reflog_exists_usage[] = {
+       BUILTIN_REFLOG_EXISTS_USAGE,
+       NULL,
+};
 
-       switch (cb->unreachable_expire_kind) {
-       case UE_ALWAYS:
-               return;
-       case UE_HEAD:
-               for_each_ref(push_tip_to_list, &cb->tips);
-               for (elem = cb->tips; elem; elem = elem->next)
-                       commit_list_insert(elem->item, &cb->mark_list);
-               break;
-       case UE_NORMAL:
-               commit_list_insert(commit, &cb->mark_list);
-               /* For reflog_expiry_cleanup() below */
-               cb->tip_commit = commit;
-       }
-       cb->mark_limit = cb->cmd.expire_total;
-       mark_reachable(cb);
-}
+static const char *const reflog_usage[] = {
+       BUILTIN_REFLOG_SHOW_USAGE,
+       BUILTIN_REFLOG_EXPIRE_USAGE,
+       BUILTIN_REFLOG_DELETE_USAGE,
+       BUILTIN_REFLOG_EXISTS_USAGE,
+       NULL
+};
 
-static void reflog_expiry_cleanup(void *cb_data)
-{
-       struct expire_reflog_policy_cb *cb = cb_data;
-       struct commit_list *elem;
+static timestamp_t default_reflog_expire;
+static timestamp_t default_reflog_expire_unreachable;
 
-       switch (cb->unreachable_expire_kind) {
-       case UE_ALWAYS:
-               return;
-       case UE_HEAD:
-               for (elem = cb->tips; elem; elem = elem->next)
-                       clear_commit_marks(elem->item, REACHABLE);
-               free_commit_list(cb->tips);
-               break;
-       case UE_NORMAL:
-               clear_commit_marks(cb->tip_commit, REACHABLE);
-               break;
-       }
-}
+struct worktree_reflogs {
+       struct worktree *worktree;
+       struct string_list reflogs;
+};
 
 static int collect_reflog(const char *ref, const struct object_id *oid, int unused, void *cb_data)
 {
@@ -520,18 +152,18 @@ static int reflog_expire_config(const char *var, const char *value, void *cb)
        return 0;
 }
 
-static void set_reflog_expiry_param(struct cmd_reflog_expire_cb *cb, int slot, const char *ref)
+static void set_reflog_expiry_param(struct cmd_reflog_expire_cb *cb, const char *ref)
 {
        struct reflog_expire_cfg *ent;
 
-       if (slot == (EXPIRE_TOTAL|EXPIRE_UNREACH))
+       if (cb->explicit_expiry == (EXPIRE_TOTAL|EXPIRE_UNREACH))
                return; /* both given explicitly -- nothing to tweak */
 
        for (ent = reflog_expire_cfg; ent; ent = ent->next) {
                if (!wildmatch(ent->pattern, ref, 0)) {
-                       if (!(slot & EXPIRE_TOTAL))
+                       if (!(cb->explicit_expiry & EXPIRE_TOTAL))
                                cb->expire_total = ent->expire_total;
-                       if (!(slot & EXPIRE_UNREACH))
+                       if (!(cb->explicit_expiry & EXPIRE_UNREACH))
                                cb->expire_unreachable = ent->expire_unreachable;
                        return;
                }
@@ -541,29 +173,94 @@ static void set_reflog_expiry_param(struct cmd_reflog_expire_cb *cb, int slot, c
         * If unconfigured, make stash never expire
         */
        if (!strcmp(ref, "refs/stash")) {
-               if (!(slot & EXPIRE_TOTAL))
+               if (!(cb->explicit_expiry & EXPIRE_TOTAL))
                        cb->expire_total = 0;
-               if (!(slot & EXPIRE_UNREACH))
+               if (!(cb->explicit_expiry & EXPIRE_UNREACH))
                        cb->expire_unreachable = 0;
                return;
        }
 
        /* Nothing matched -- use the default value */
-       if (!(slot & EXPIRE_TOTAL))
+       if (!(cb->explicit_expiry & EXPIRE_TOTAL))
                cb->expire_total = default_reflog_expire;
-       if (!(slot & EXPIRE_UNREACH))
+       if (!(cb->explicit_expiry & EXPIRE_UNREACH))
                cb->expire_unreachable = default_reflog_expire_unreachable;
 }
 
+static int expire_unreachable_callback(const struct option *opt,
+                                const char *arg,
+                                int unset)
+{
+       struct cmd_reflog_expire_cb *cmd = opt->value;
+
+       if (parse_expiry_date(arg, &cmd->expire_unreachable))
+               die(_("invalid timestamp '%s' given to '--%s'"),
+                   arg, opt->long_name);
+
+       cmd->explicit_expiry |= EXPIRE_UNREACH;
+       return 0;
+}
+
+static int expire_total_callback(const struct option *opt,
+                                const char *arg,
+                                int unset)
+{
+       struct cmd_reflog_expire_cb *cmd = opt->value;
+
+       if (parse_expiry_date(arg, &cmd->expire_total))
+               die(_("invalid timestamp '%s' given to '--%s'"),
+                   arg, opt->long_name);
+
+       cmd->explicit_expiry |= EXPIRE_TOTAL;
+       return 0;
+}
+
+static int cmd_reflog_show(int argc, const char **argv, const char *prefix)
+{
+       struct option options[] = {
+               OPT_END()
+       };
+
+       parse_options(argc, argv, prefix, options, reflog_show_usage,
+                     PARSE_OPT_KEEP_DASHDASH | PARSE_OPT_KEEP_ARGV0 |
+                     PARSE_OPT_KEEP_UNKNOWN);
+
+       return cmd_log_reflog(argc, argv, prefix);
+}
+
 static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)
 {
        struct cmd_reflog_expire_cb cmd = { 0 };
        timestamp_t now = time(NULL);
        int i, status, do_all, all_worktrees = 1;
-       int explicit_expiry = 0;
        unsigned int flags = 0;
        int verbose = 0;
        reflog_expiry_should_prune_fn *should_prune_fn = should_expire_reflog_ent;
+       const struct option options[] = {
+               OPT_BIT(0, "dry-run", &flags, N_("do not actually prune any entries"),
+                       EXPIRE_REFLOGS_DRY_RUN),
+               OPT_BIT(0, "rewrite", &flags,
+                       N_("rewrite the old SHA1 with the new SHA1 of the entry that now precedes it"),
+                       EXPIRE_REFLOGS_REWRITE),
+               OPT_BIT(0, "updateref", &flags,
+                       N_("update the reference to the value of the top reflog entry"),
+                       EXPIRE_REFLOGS_UPDATE_REF),
+               OPT_BOOL(0, "verbose", &verbose, N_("print extra information on screen")),
+               OPT_CALLBACK_F(0, "expire", &cmd, N_("timestamp"),
+                              N_("prune entries older than the specified time"),
+                              PARSE_OPT_NONEG,
+                              expire_total_callback),
+               OPT_CALLBACK_F(0, "expire-unreachable", &cmd, N_("timestamp"),
+                              N_("prune entries older than <time> that are not reachable from the current tip of the branch"),
+                              PARSE_OPT_NONEG,
+                              expire_unreachable_callback),
+               OPT_BOOL(0, "stale-fix", &cmd.stalefix,
+                        N_("prune any reflog entries that point to broken commits")),
+               OPT_BOOL(0, "all", &do_all, N_("process the reflogs of all references")),
+               OPT_BOOL(1, "single-worktree", &all_worktrees,
+                        N_("limits processing to reflogs from the current worktree only")),
+               OPT_END()
+       };
 
        default_reflog_expire_unreachable = now - 30 * 24 * 3600;
        default_reflog_expire = now - 90 * 24 * 3600;
@@ -572,45 +269,11 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)
        save_commit_buffer = 0;
        do_all = status = 0;
 
+       cmd.explicit_expiry = 0;
        cmd.expire_total = default_reflog_expire;
        cmd.expire_unreachable = default_reflog_expire_unreachable;
 
-       for (i = 1; i < argc; i++) {
-               const char *arg = argv[i];
-
-               if (!strcmp(arg, "--dry-run") || !strcmp(arg, "-n"))
-                       flags |= EXPIRE_REFLOGS_DRY_RUN;
-               else if (skip_prefix(arg, "--expire=", &arg)) {
-                       if (parse_expiry_date(arg, &cmd.expire_total))
-                               die(_("'%s' is not a valid timestamp"), arg);
-                       explicit_expiry |= EXPIRE_TOTAL;
-               }
-               else if (skip_prefix(arg, "--expire-unreachable=", &arg)) {
-                       if (parse_expiry_date(arg, &cmd.expire_unreachable))
-                               die(_("'%s' is not a valid timestamp"), arg);
-                       explicit_expiry |= EXPIRE_UNREACH;
-               }
-               else if (!strcmp(arg, "--stale-fix"))
-                       cmd.stalefix = 1;
-               else if (!strcmp(arg, "--rewrite"))
-                       flags |= EXPIRE_REFLOGS_REWRITE;
-               else if (!strcmp(arg, "--updateref"))
-                       flags |= EXPIRE_REFLOGS_UPDATE_REF;
-               else if (!strcmp(arg, "--all"))
-                       do_all = 1;
-               else if (!strcmp(arg, "--single-worktree"))
-                       all_worktrees = 0;
-               else if (!strcmp(arg, "--verbose"))
-                       verbose = 1;
-               else if (!strcmp(arg, "--")) {
-                       i++;
-                       break;
-               }
-               else if (arg[0] == '-')
-                       usage(_(reflog_expire_usage));
-               else
-                       break;
-       }
+       argc = parse_options(argc, argv, prefix, options, reflog_expire_usage, 0);
 
        if (verbose)
                should_prune_fn = should_expire_reflog_ent_verbose;
@@ -657,7 +320,7 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)
                                .dry_run = !!(flags & EXPIRE_REFLOGS_DRY_RUN),
                        };
 
-                       set_reflog_expiry_param(&cb.cmd, explicit_expiry, item->string);
+                       set_reflog_expiry_param(&cb.cmd,  item->string);
                        status |= reflog_expire(item->string, flags,
                                                reflog_expiry_prepare,
                                                should_prune_fn,
@@ -667,7 +330,7 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)
                string_list_clear(&collected.reflogs, 0);
        }
 
-       for (; i < argc; i++) {
+       for (i = 0; i < argc; i++) {
                char *ref;
                struct expire_reflog_policy_cb cb = { .cmd = cmd };
 
@@ -675,7 +338,7 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)
                        status |= error(_("%s points nowhere!"), argv[i]);
                        continue;
                }
-               set_reflog_expiry_param(&cb.cmd, explicit_expiry, ref);
+               set_reflog_expiry_param(&cb.cmd, ref);
                status |= reflog_expire(ref, flags,
                                        reflog_expiry_prepare,
                                        should_prune_fn,
@@ -686,142 +349,94 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)
        return status;
 }
 
-static int count_reflog_ent(struct object_id *ooid, struct object_id *noid,
-               const char *email, timestamp_t timestamp, int tz,
-               const char *message, void *cb_data)
-{
-       struct cmd_reflog_expire_cb *cb = cb_data;
-       if (!cb->expire_total || timestamp < cb->expire_total)
-               cb->recno++;
-       return 0;
-}
-
 static int cmd_reflog_delete(int argc, const char **argv, const char *prefix)
 {
-       struct cmd_reflog_expire_cb cmd = { 0 };
        int i, status = 0;
        unsigned int flags = 0;
        int verbose = 0;
-       reflog_expiry_should_prune_fn *should_prune_fn = should_expire_reflog_ent;
-
-       for (i = 1; i < argc; i++) {
-               const char *arg = argv[i];
-               if (!strcmp(arg, "--dry-run") || !strcmp(arg, "-n"))
-                       flags |= EXPIRE_REFLOGS_DRY_RUN;
-               else if (!strcmp(arg, "--rewrite"))
-                       flags |= EXPIRE_REFLOGS_REWRITE;
-               else if (!strcmp(arg, "--updateref"))
-                       flags |= EXPIRE_REFLOGS_UPDATE_REF;
-               else if (!strcmp(arg, "--verbose"))
-                       verbose = 1;
-               else if (!strcmp(arg, "--")) {
-                       i++;
-                       break;
-               }
-               else if (arg[0] == '-')
-                       usage(_(reflog_delete_usage));
-               else
-                       break;
-       }
-
-       if (verbose)
-               should_prune_fn = should_expire_reflog_ent_verbose;
 
-       if (argc - i < 1)
+       const struct option options[] = {
+               OPT_BIT(0, "dry-run", &flags, N_("do not actually prune any entries"),
+                       EXPIRE_REFLOGS_DRY_RUN),
+               OPT_BIT(0, "rewrite", &flags,
+                       N_("rewrite the old SHA1 with the new SHA1 of the entry that now precedes it"),
+                       EXPIRE_REFLOGS_REWRITE),
+               OPT_BIT(0, "updateref", &flags,
+                       N_("update the reference to the value of the top reflog entry"),
+                       EXPIRE_REFLOGS_UPDATE_REF),
+               OPT_BOOL(0, "verbose", &verbose, N_("print extra information on screen")),
+               OPT_END()
+       };
+
+       argc = parse_options(argc, argv, prefix, options, reflog_delete_usage, 0);
+
+       if (argc < 1)
                return error(_("no reflog specified to delete"));
 
-       for ( ; i < argc; i++) {
-               const char *spec = strstr(argv[i], "@{");
-               char *ep, *ref;
-               int recno;
-               struct expire_reflog_policy_cb cb = {
-                       .dry_run = !!(flags & EXPIRE_REFLOGS_DRY_RUN),
-               };
-
-               if (!spec) {
-                       status |= error(_("not a reflog: %s"), argv[i]);
-                       continue;
-               }
-
-               if (!dwim_log(argv[i], spec - argv[i], NULL, &ref)) {
-                       status |= error(_("no reflog for '%s'"), argv[i]);
-                       continue;
-               }
-
-               recno = strtoul(spec + 2, &ep, 10);
-               if (*ep == '}') {
-                       cmd.recno = -recno;
-                       for_each_reflog_ent(ref, count_reflog_ent, &cmd);
-               } else {
-                       cmd.expire_total = approxidate(spec + 2);
-                       for_each_reflog_ent(ref, count_reflog_ent, &cmd);
-                       cmd.expire_total = 0;
-               }
+       for (i = 0; i < argc; i++)
+               status |= reflog_delete(argv[i], flags, verbose);
 
-               cb.cmd = cmd;
-               status |= reflog_expire(ref, flags,
-                                       reflog_expiry_prepare,
-                                       should_prune_fn,
-                                       reflog_expiry_cleanup,
-                                       &cb);
-               free(ref);
-       }
        return status;
 }
 
 static int cmd_reflog_exists(int argc, const char **argv, const char *prefix)
 {
-       int i, start = 0;
-
-       for (i = 1; i < argc; i++) {
-               const char *arg = argv[i];
-               if (!strcmp(arg, "--")) {
-                       i++;
-                       break;
-               }
-               else if (arg[0] == '-')
-                       usage(_(reflog_exists_usage));
-               else
-                       break;
-       }
-
-       start = i;
-
-       if (argc - start != 1)
-               usage(_(reflog_exists_usage));
-
-       if (check_refname_format(argv[start], REFNAME_ALLOW_ONELEVEL))
-               die(_("invalid ref format: %s"), argv[start]);
-       return !reflog_exists(argv[start]);
+       struct option options[] = {
+               OPT_END()
+       };
+       const char *refname;
+
+       argc = parse_options(argc, argv, prefix, options, reflog_exists_usage,
+                            0);
+       if (!argc)
+               usage_with_options(reflog_exists_usage, options);
+
+       refname = argv[0];
+       if (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL))
+               die(_("invalid ref format: %s"), refname);
+       return !reflog_exists(refname);
 }
 
 /*
  * main "reflog"
  */
 
-static const char reflog_usage[] =
-N_("git reflog [ show | expire | delete | exists ]");
-
 int cmd_reflog(int argc, const char **argv, const char *prefix)
 {
-       if (argc > 1 && !strcmp(argv[1], "-h"))
-               usage(_(reflog_usage));
+       struct option options[] = {
+               OPT_END()
+       };
 
-       /* With no command, we default to showing it. */
-       if (argc < 2 || *argv[1] == '-')
-               return cmd_log_reflog(argc, argv, prefix);
+       argc = parse_options(argc, argv, prefix, options, reflog_usage,
+                            PARSE_OPT_KEEP_DASHDASH | PARSE_OPT_KEEP_ARGV0 |
+                            PARSE_OPT_KEEP_UNKNOWN |
+                            PARSE_OPT_NO_INTERNAL_HELP);
 
-       if (!strcmp(argv[1], "show"))
-               return cmd_log_reflog(argc - 1, argv + 1, prefix);
+       /*
+        * With "git reflog" we default to showing it. !argc is
+        * impossible with PARSE_OPT_KEEP_ARGV0.
+        */
+       if (argc == 1)
+               goto log_reflog;
 
-       if (!strcmp(argv[1], "expire"))
-               return cmd_reflog_expire(argc - 1, argv + 1, prefix);
+       if (!strcmp(argv[1], "-h"))
+               usage_with_options(reflog_usage, options);
+       else if (*argv[1] == '-')
+               goto log_reflog;
 
-       if (!strcmp(argv[1], "delete"))
+       if (!strcmp(argv[1], "show"))
+               return cmd_reflog_show(argc - 1, argv + 1, prefix);
+       else if (!strcmp(argv[1], "expire"))
+               return cmd_reflog_expire(argc - 1, argv + 1, prefix);
+       else if (!strcmp(argv[1], "delete"))
                return cmd_reflog_delete(argc - 1, argv + 1, prefix);
-
-       if (!strcmp(argv[1], "exists"))
+       else if (!strcmp(argv[1], "exists"))
                return cmd_reflog_exists(argc - 1, argv + 1, prefix);
 
+       /*
+        * Fall-through for e.g. "git reflog -1", "git reflog master",
+        * as well as the plain "git reflog" above goto above.
+        */
+log_reflog:
        return cmd_log_reflog(argc, argv, prefix);
 }
index 299c466116debac6b8c69658c5f499454496fdbd..5f4cde9d784e310e939dc7952e4096e45f60cbb7 100644 (file)
 #include "object-store.h"
 #include "strvec.h"
 #include "commit-reach.h"
+#include "progress.h"
 
 static const char * const builtin_remote_usage[] = {
-       N_("git remote [-v | --verbose]"),
+       "git remote [-v | --verbose]",
        N_("git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--mirror=<fetch|push>] <name> <url>"),
-       N_("git remote rename <old> <new>"),
+       N_("git remote rename [--[no-]progress] <old> <new>"),
        N_("git remote remove <name>"),
        N_("git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"),
        N_("git remote [-v | --verbose] show [-n] <name>"),
@@ -36,7 +37,7 @@ static const char * const builtin_remote_add_usage[] = {
 };
 
 static const char * const builtin_remote_rename_usage[] = {
-       N_("git remote rename <old> <new>"),
+       N_("git remote rename [--[no-]progress] <old> <new>"),
        NULL
 };
 
@@ -571,6 +572,7 @@ struct rename_info {
        const char *old_name;
        const char *new_name;
        struct string_list *remote_branches;
+       uint32_t symrefs_nr;
 };
 
 static int read_remote_branches(const char *refname,
@@ -587,10 +589,12 @@ static int read_remote_branches(const char *refname,
                item = string_list_append(rename->remote_branches, refname);
                symref = resolve_ref_unsafe(refname, RESOLVE_REF_READING,
                                            NULL, &flag);
-               if (symref && (flag & REF_ISSYMREF))
+               if (symref && (flag & REF_ISSYMREF)) {
                        item->util = xstrdup(symref);
-               else
+                       rename->symrefs_nr++;
+               } else {
                        item->util = NULL;
+               }
        }
        strbuf_release(&buf);
 
@@ -674,7 +678,9 @@ static void handle_push_default(const char* old_name, const char* new_name)
 
 static int mv(int argc, const char **argv)
 {
+       int show_progress = isatty(2);
        struct option options[] = {
+               OPT_BOOL(0, "progress", &show_progress, N_("force progress reporting")),
                OPT_END()
        };
        struct remote *oldremote, *newremote;
@@ -682,14 +688,19 @@ static int mv(int argc, const char **argv)
                old_remote_context = STRBUF_INIT;
        struct string_list remote_branches = STRING_LIST_INIT_DUP;
        struct rename_info rename;
-       int i, refspec_updated = 0;
+       int i, refs_renamed_nr = 0, refspec_updated = 0;
+       struct progress *progress = NULL;
+
+       argc = parse_options(argc, argv, NULL, options,
+                            builtin_remote_rename_usage, 0);
 
-       if (argc != 3)
+       if (argc != 2)
                usage_with_options(builtin_remote_rename_usage, options);
 
-       rename.old_name = argv[1];
-       rename.new_name = argv[2];
+       rename.old_name = argv[0];
+       rename.new_name = argv[1];
        rename.remote_branches = &remote_branches;
+       rename.symrefs_nr = 0;
 
        oldremote = remote_get(rename.old_name);
        if (!remote_is_configured(oldremote, 1)) {
@@ -764,15 +775,26 @@ static int mv(int argc, const char **argv)
         * the new symrefs.
         */
        for_each_ref(read_remote_branches, &rename);
+       if (show_progress) {
+               /*
+                * Count symrefs twice, since "renaming" them is done by
+                * deleting and recreating them in two separate passes.
+                */
+               progress = start_progress(_("Renaming remote references"),
+                                         rename.remote_branches->nr + rename.symrefs_nr);
+       }
        for (i = 0; i < remote_branches.nr; i++) {
                struct string_list_item *item = remote_branches.items + i;
-               int flag = 0;
+               struct strbuf referent = STRBUF_INIT;
 
-               read_ref_full(item->string, RESOLVE_REF_READING, NULL, &flag);
-               if (!(flag & REF_ISSYMREF))
+               if (refs_read_symbolic_ref(get_main_ref_store(the_repository), item->string,
+                                          &referent))
                        continue;
                if (delete_ref(NULL, item->string, NULL, REF_NO_DEREF))
                        die(_("deleting '%s' failed"), item->string);
+
+               strbuf_release(&referent);
+               display_progress(progress, ++refs_renamed_nr);
        }
        for (i = 0; i < remote_branches.nr; i++) {
                struct string_list_item *item = remote_branches.items + i;
@@ -788,6 +810,7 @@ static int mv(int argc, const char **argv)
                                item->string, buf.buf);
                if (rename_ref(item->string, buf.buf, buf2.buf))
                        die(_("renaming '%s' failed"), item->string);
+               display_progress(progress, ++refs_renamed_nr);
        }
        for (i = 0; i < remote_branches.nr; i++) {
                struct string_list_item *item = remote_branches.items + i;
@@ -807,7 +830,9 @@ static int mv(int argc, const char **argv)
                                item->string, buf.buf);
                if (create_symref(buf.buf, buf2.buf, buf3.buf))
                        die(_("creating '%s' failed"), buf.buf);
+               display_progress(progress, ++refs_renamed_nr);
        }
+       stop_progress(&progress);
        string_list_clear(&remote_branches, 1);
 
        handle_push_default(rename.old_name, rename.new_name);
index da1e364a756b9f8c74f38f8ec596798cf3ec38ad..d1a563d5b65666b68596ad353a945e8e11c6ac70 100644 (file)
@@ -22,6 +22,7 @@ static int delta_base_offset = 1;
 static int pack_kept_objects = -1;
 static int write_bitmaps = -1;
 static int use_delta_islands;
+static int run_update_server_info = 1;
 static char *packdir, *packtmp_name, *packtmp;
 
 static const char *const git_repack_usage[] = {
@@ -54,6 +55,10 @@ static int repack_config(const char *var, const char *value, void *cb)
                use_delta_islands = git_config_bool(var, value);
                return 0;
        }
+       if (strcmp(var, "repack.updateserverinfo") == 0) {
+               run_update_server_info = git_config_bool(var, value);
+               return 0;
+       }
        return git_default_config(var, value, cb);
 }
 
@@ -620,7 +625,6 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
        const char *unpack_unreachable = NULL;
        int keep_unreachable = 0;
        struct string_list keep_pack_list = STRING_LIST_INIT_NODUP;
-       int no_update_server_info = 0;
        struct pack_objects_args po_args = {NULL};
        int geometric_factor = 0;
        int write_midx = 0;
@@ -637,8 +641,8 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
                                N_("pass --no-reuse-delta to git-pack-objects")),
                OPT_BOOL('F', NULL, &po_args.no_reuse_object,
                                N_("pass --no-reuse-object to git-pack-objects")),
-               OPT_BOOL('n', NULL, &no_update_server_info,
-                               N_("do not run git-update-server-info")),
+               OPT_NEGBIT('n', NULL, &run_update_server_info,
+                               N_("do not run git-update-server-info"), 1),
                OPT__QUIET(&po_args.quiet, N_("be quiet")),
                OPT_BOOL('l', "local", &po_args.local,
                                N_("pass --local to git-pack-objects")),
@@ -939,7 +943,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
                        prune_shallow(PRUNE_QUICK);
        }
 
-       if (!no_update_server_info)
+       if (run_update_server_info)
                update_server_info(0);
        remove_temporary_files();
 
index 6ff1734d5879d36c994d0ab4b82b95e60a348750..5068f4f0b2acf8e4b0f342319999cedffccc4223 100644 (file)
@@ -22,7 +22,7 @@ static const char * const git_replace_usage[] = {
        N_("git replace [-f] <object> <replacement>"),
        N_("git replace [-f] --edit <object>"),
        N_("git replace [-f] --graft <commit> [<parent>...]"),
-       N_("git replace [-f] --convert-graft-file"),
+       "git replace [-f] --convert-graft-file",
        N_("git replace -d <object>..."),
        N_("git replace [--format=<format>] [-l [<pattern>]]"),
        NULL
@@ -409,7 +409,7 @@ static int check_one_mergetag(struct commit *commit,
        int i;
 
        hash_object_file(the_hash_algo, extra->value, extra->len,
-                        type_name(OBJ_TAG), &tag_oid);
+                        OBJ_TAG, &tag_oid);
        tag = lookup_tag(the_repository, &tag_oid);
        if (!tag)
                return error(_("bad mergetag in commit '%s'"), ref);
@@ -474,7 +474,7 @@ static int create_graft(int argc, const char **argv, int force, int gentle)
                return -1;
        }
 
-       if (write_object_file(buf.buf, buf.len, commit_type, &new_oid)) {
+       if (write_object_file(buf.buf, buf.len, OBJ_COMMIT, &new_oid)) {
                strbuf_release(&buf);
                return error(_("could not write replacement commit for: '%s'"),
                             old_ref);
index b97745ee94e5a30a25a477f432a275d6ae953ee2..344fff8f3a9322a7895b607a8236c5461625407d 100644 (file)
@@ -204,10 +204,16 @@ static int pathspec_needs_expanded_index(const struct pathspec *pathspec)
                        /*
                         * Special case: if the pattern is a path inside the cone
                         * followed by only wildcards, the pattern cannot match
-                        * partial sparse directories, so we don't expand the index.
+                        * partial sparse directories, so we know we don't need to
+                        * expand the index.
+                        *
+                        * Examples:
+                        * - in-cone/foo***: doesn't need expanded index
+                        * - not-in-cone/bar*: may need expanded index
+                        * - **.c: may need expanded index
                         */
-                       if (path_in_cone_mode_sparse_checkout(item.original, &the_index) &&
-                           strspn(item.original + item.nowildcard_len, "*") == item.len - item.nowildcard_len)
+                       if (strspn(item.original + item.nowildcard_len, "*") == item.len - item.nowildcard_len &&
+                           path_in_cone_mode_sparse_checkout(item.original, &the_index))
                                continue;
 
                        for (pos = 0; pos < active_nr; pos++) {
@@ -274,7 +280,6 @@ static int read_from_tree(const struct pathspec *pathspec,
                return 1;
        diffcore_std(&opt);
        diff_flush(&opt);
-       clear_pathspec(&opt.pathspec);
 
        return 0;
 }
@@ -387,6 +392,7 @@ static int git_reset_config(const char *var, const char *value, void *cb)
 int cmd_reset(int argc, const char **argv, const char *prefix)
 {
        int reset_type = NONE, update_ref_status = 0, quiet = 0;
+       int no_refresh = 0;
        int patch_mode = 0, pathspec_file_nul = 0, unborn;
        const char *rev, *pathspec_from_file = NULL;
        struct object_id oid;
@@ -394,6 +400,8 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
        int intent_to_add = 0;
        const struct option options[] = {
                OPT__QUIET(&quiet, N_("be quiet, only report errors")),
+               OPT_BOOL(0, "no-refresh", &no_refresh,
+                               N_("skip refreshing the index after reset")),
                OPT_SET_INT(0, "mixed", &reset_type,
                                                N_("reset HEAD and index"), MIXED),
                OPT_SET_INT(0, "soft", &reset_type, N_("reset only HEAD"), SOFT),
@@ -415,7 +423,6 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
        };
 
        git_config(git_reset_config, NULL);
-       git_config_get_bool("reset.quiet", &quiet);
 
        argc = parse_options(argc, argv, prefix, options, git_reset_usage,
                                                PARSE_OPT_KEEP_DASHDASH);
@@ -512,17 +519,16 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
                        if (read_from_tree(&pathspec, &oid, intent_to_add))
                                return 1;
                        the_index.updated_skipworktree = 1;
-                       if (!quiet && get_git_work_tree()) {
+                       if (!no_refresh && get_git_work_tree()) {
                                uint64_t t_begin, t_delta_in_ms;
 
                                t_begin = getnanotime();
                                refresh_index(&the_index, flags, NULL, NULL,
                                              _("Unstaged changes after reset:"));
                                t_delta_in_ms = (getnanotime() - t_begin) / 1000000;
-                               if (advice_enabled(ADVICE_RESET_QUIET_WARNING) && t_delta_in_ms > REFRESH_INDEX_DELAY_WARNING_IN_MS) {
-                                       printf(_("\nIt took %.2f seconds to enumerate unstaged changes after reset.  You can\n"
-                                               "use '--quiet' to avoid this.  Set the config setting reset.quiet to true\n"
-                                               "to make this the default.\n"), t_delta_in_ms / 1000.0);
+                               if (!quiet && advice_enabled(ADVICE_RESET_NO_REFRESH_WARNING) && t_delta_in_ms > REFRESH_INDEX_DELAY_WARNING_IN_MS) {
+                                       advise(_("It took %.2f seconds to refresh the index after reset.  You can use\n"
+                                                "'--no-refresh' to avoid this."), t_delta_in_ms / 1000.0);
                                }
                        }
                } else {
index 777558e9b067ebbf7e91ba4e65570a86bd25a105..572da1472e5adf933c7680339ed3409cf62f3e24 100644 (file)
@@ -20,7 +20,7 @@
 #include "packfile.h"
 
 static const char rev_list_usage[] =
-"git rev-list [OPTION] <commit-id>... [ -- paths... ]\n"
+"git rev-list [<options>] <commit-id>... [-- <path>...]\n"
 "  limiting output:\n"
 "    --max-count=<n>\n"
 "    --max-age=<epoch>\n"
@@ -62,7 +62,6 @@ static const char rev_list_usage[] =
 static struct progress *progress;
 static unsigned progress_counter;
 
-static struct list_objects_filter_options filter_options;
 static struct oidset omitted_objects;
 static int arg_print_omitted; /* print objects omitted by filter */
 
@@ -400,7 +399,6 @@ static inline int parse_missing_action_value(const char *value)
 }
 
 static int try_bitmap_count(struct rev_info *revs,
-                           struct list_objects_filter_options *filter,
                            int filter_provided_objects)
 {
        uint32_t commit_count = 0,
@@ -436,7 +434,7 @@ static int try_bitmap_count(struct rev_info *revs,
         */
        max_count = revs->max_count;
 
-       bitmap_git = prepare_bitmap_walk(revs, filter, filter_provided_objects);
+       bitmap_git = prepare_bitmap_walk(revs, filter_provided_objects);
        if (!bitmap_git)
                return -1;
 
@@ -453,7 +451,6 @@ static int try_bitmap_count(struct rev_info *revs,
 }
 
 static int try_bitmap_traversal(struct rev_info *revs,
-                               struct list_objects_filter_options *filter,
                                int filter_provided_objects)
 {
        struct bitmap_index *bitmap_git;
@@ -465,7 +462,7 @@ static int try_bitmap_traversal(struct rev_info *revs,
        if (revs->max_count >= 0)
                return -1;
 
-       bitmap_git = prepare_bitmap_walk(revs, filter, filter_provided_objects);
+       bitmap_git = prepare_bitmap_walk(revs, filter_provided_objects);
        if (!bitmap_git)
                return -1;
 
@@ -475,7 +472,6 @@ static int try_bitmap_traversal(struct rev_info *revs,
 }
 
 static int try_bitmap_disk_usage(struct rev_info *revs,
-                                struct list_objects_filter_options *filter,
                                 int filter_provided_objects)
 {
        struct bitmap_index *bitmap_git;
@@ -483,7 +479,7 @@ static int try_bitmap_disk_usage(struct rev_info *revs,
        if (!show_disk_usage)
                return -1;
 
-       bitmap_git = prepare_bitmap_walk(revs, filter, filter_provided_objects);
+       bitmap_git = prepare_bitmap_walk(revs, filter_provided_objects);
        if (!bitmap_git)
                return -1;
 
@@ -595,17 +591,6 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
                        show_progress = arg;
                        continue;
                }
-
-               if (skip_prefix(arg, ("--" CL_ARG__FILTER "="), &arg)) {
-                       parse_list_objects_filter(&filter_options, arg);
-                       if (filter_options.choice && !revs.blob_objects)
-                               die(_("object filtering requires --objects"));
-                       continue;
-               }
-               if (!strcmp(arg, ("--no-" CL_ARG__FILTER))) {
-                       list_objects_filter_set_no_filter(&filter_options);
-                       continue;
-               }
                if (!strcmp(arg, "--filter-provided-objects")) {
                        filter_provided_objects = 1;
                        continue;
@@ -688,11 +673,11 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
                progress = start_delayed_progress(show_progress, 0);
 
        if (use_bitmap_index) {
-               if (!try_bitmap_count(&revs, &filter_options, filter_provided_objects))
+               if (!try_bitmap_count(&revs, filter_provided_objects))
                        return 0;
-               if (!try_bitmap_disk_usage(&revs, &filter_options, filter_provided_objects))
+               if (!try_bitmap_disk_usage(&revs, filter_provided_objects))
                        return 0;
-               if (!try_bitmap_traversal(&revs, &filter_options, filter_provided_objects))
+               if (!try_bitmap_traversal(&revs, filter_provided_objects))
                        return 0;
        }
 
@@ -733,7 +718,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
                oidset_init(&missing_objects, DEFAULT_OIDSET_SIZE);
 
        traverse_commit_list_filtered(
-               &filter_options, &revs, show_commit, show_object, &info,
+               &revs, show_commit, show_object, &info,
                (arg_print_omitted ? &omitted_objects : NULL));
 
        if (arg_print_omitted) {
index 69c432ef1a6272c12f6c71558c973eecd3796c90..64962be016825a47acddf374cd6ebf80db163af0 100644 (file)
@@ -145,7 +145,7 @@ static int send_pack_config(const char *k, const char *v, void *cb)
                                if (value && !strcasecmp(value, "if-asked"))
                                        args.push_cert = SEND_PACK_PUSH_CERT_IF_ASKED;
                                else
-                                       return error("Invalid value for '%s'", k);
+                                       return error(_("invalid value for '%s'"), k);
                        }
                }
        }
index e7f7af5de3ff005150680d19761828c7b9984ecf..26c5c0cf93545777301c27f02279450347425fde 100644 (file)
@@ -388,6 +388,7 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)
                parse_revision_opt(&rev, &ctx, options, shortlog_usage);
        }
 parse_done:
+       revision_opts_finish(&rev);
        argc = parse_options_end(&ctx);
 
        if (nongit && argc > 1) {
@@ -434,7 +435,7 @@ static void add_wrapped_shortlog_msg(struct strbuf *sb, const char *s,
 
 void shortlog_output(struct shortlog *log)
 {
-       int i, j;
+       size_t i, j;
        struct strbuf sb = STRBUF_INIT;
 
        if (log->sort_by_number)
@@ -447,10 +448,10 @@ void shortlog_output(struct shortlog *log)
                                (int)UTIL_TO_INT(item), item->string);
                } else {
                        struct string_list *onelines = item->util;
-                       fprintf(log->file, "%s (%d):\n",
-                               item->string, onelines->nr);
-                       for (j = onelines->nr - 1; j >= 0; j--) {
-                               const char *msg = onelines->items[j].string;
+                       fprintf(log->file, "%s (%"PRIuMAX"):\n",
+                               item->string, (uintmax_t)onelines->nr);
+                       for (j = onelines->nr; j >= 1; j--) {
+                               const char *msg = onelines->items[j - 1].string;
 
                                if (log->wrap_lines) {
                                        strbuf_reset(&sb);
index e12c5e80e3e4425831b9803c334245eaedf3bd9a..64c649c6a238605cb847bbf515cbdca58cde990c 100644 (file)
@@ -8,6 +8,7 @@
 #include "parse-options.h"
 #include "dir.h"
 #include "commit-slab.h"
+#include "date.h"
 
 static const char* show_branch_usage[] = {
     N_("git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
@@ -711,6 +712,10 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)
                                "--all/--remotes/--independent/--merge-base");
        }
 
+       if (with_current_branch && reflog)
+               die(_("options '%s' and '%s' cannot be used together"),
+                   "--reflog", "--current");
+
        /* If nothing is specified, show all branches by default */
        if (ac <= topics && all_heads + all_remotes == 0)
                all_heads = 1;
index 679c10703684044aa02555227b5cdcdf92591d9b..0217d44c5b1c409c858a8df2f9c9b623a78b4804 100644 (file)
@@ -1,4 +1,5 @@
 #include "builtin.h"
+#include "cache.h"
 #include "config.h"
 #include "dir.h"
 #include "parse-options.h"
@@ -7,7 +8,6 @@
 #include "run-command.h"
 #include "strbuf.h"
 #include "string-list.h"
-#include "cache.h"
 #include "cache-tree.h"
 #include "lockfile.h"
 #include "resolve-undo.h"
@@ -15,6 +15,7 @@
 #include "wt-status.h"
 #include "quote.h"
 #include "sparse-index.h"
+#include "worktree.h"
 
 static const char *empty_base = "";
 
@@ -43,7 +44,7 @@ static void write_patterns_to_file(FILE *fp, struct pattern_list *pl)
 }
 
 static char const * const builtin_sparse_checkout_list_usage[] = {
-       N_("git sparse-checkout list"),
+       "git sparse-checkout list",
        NULL
 };
 
@@ -185,6 +186,8 @@ static void clean_tracked_sparse_directories(struct repository *r)
                                item->string);
                }
 
+               strvec_clear(&s);
+               clear_pathspec(&p);
                dir_clear(&dir);
        }
 
@@ -325,11 +328,11 @@ static int write_patterns_and_update(struct pattern_list *pl)
 
        fd = hold_lock_file_for_update(&lk, sparse_filename,
                                      LOCK_DIE_ON_ERROR);
+       free(sparse_filename);
 
        result = update_working_directory(pl);
        if (result) {
                rollback_lock_file(&lk);
-               free(sparse_filename);
                clear_pattern_list(pl);
                update_working_directory(NULL);
                return result;
@@ -345,7 +348,6 @@ static int write_patterns_and_update(struct pattern_list *pl)
        fflush(fp);
        commit_lock_file(&lk);
 
-       free(sparse_filename);
        clear_pattern_list(pl);
 
        return 0;
@@ -359,26 +361,23 @@ enum sparse_checkout_mode {
 
 static int set_config(enum sparse_checkout_mode mode)
 {
-       const char *config_path;
-
-       if (upgrade_repository_format(1) < 0)
-               die(_("unable to upgrade repository format to enable worktreeConfig"));
-       if (git_config_set_gently("extensions.worktreeConfig", "true")) {
-               error(_("failed to set extensions.worktreeConfig setting"));
+       /* Update to use worktree config, if not already. */
+       if (init_worktree_config(the_repository)) {
+               error(_("failed to initialize worktree config"));
                return 1;
        }
 
-       config_path = git_path("config.worktree");
-       git_config_set_in_file_gently(config_path,
-                                     "core.sparseCheckout",
-                                     mode ? "true" : NULL);
-
-       git_config_set_in_file_gently(config_path,
-                                     "core.sparseCheckoutCone",
-                                     mode == MODE_CONE_PATTERNS ? "true" : NULL);
+       if (repo_config_set_worktree_gently(the_repository,
+                                           "core.sparseCheckout",
+                                           mode ? "true" : "false") ||
+           repo_config_set_worktree_gently(the_repository,
+                                           "core.sparseCheckoutCone",
+                                           mode == MODE_CONE_PATTERNS ?
+                                               "true" : "false"))
+               return 1;
 
        if (mode == MODE_NO_PATTERNS)
-               set_sparse_index_config(the_repository, 0);
+               return set_sparse_index_config(the_repository, 0);
 
        return 0;
 }
@@ -401,6 +400,7 @@ static int update_modes(int *cone_mode, int *sparse_index)
                core_sparse_checkout_cone = 1;
        } else {
                mode = MODE_ALL_PATTERNS;
+               core_sparse_checkout_cone = 0;
        }
        if (record_mode && set_config(mode))
                return 1;
@@ -419,7 +419,7 @@ static int update_modes(int *cone_mode, int *sparse_index)
 }
 
 static char const * const builtin_sparse_checkout_init_usage[] = {
-       N_("git sparse-checkout init [--cone] [--[no-]sparse-index]"),
+       "git sparse-checkout init [--cone] [--[no-]sparse-index]",
        NULL
 };
 
@@ -471,6 +471,9 @@ static int sparse_checkout_init(int argc, const char **argv)
                FILE *fp;
 
                /* assume we are in a fresh repo, but update the sparse-checkout file */
+               if (safe_create_leading_directories(sparse_filename))
+                       die(_("unable to create leading directories of %s"),
+                           sparse_filename);
                fp = xfopen(sparse_filename, "w");
                if (!fp)
                        die(_("failed to open '%s'"), sparse_filename);
@@ -678,18 +681,76 @@ static int modify_pattern_list(int argc, const char **argv, int use_stdin,
        return result;
 }
 
+static void sanitize_paths(int argc, const char **argv,
+                          const char *prefix, int skip_checks)
+{
+       int i;
+
+       if (!argc)
+               return;
+
+       if (prefix && *prefix && core_sparse_checkout_cone) {
+               /*
+                * The args are not pathspecs, so unfortunately we
+                * cannot imitate how cmd_add() uses parse_pathspec().
+                */
+               int prefix_len = strlen(prefix);
+
+               for (i = 0; i < argc; i++)
+                       argv[i] = prefix_path(prefix, prefix_len, argv[i]);
+       }
+
+       if (skip_checks)
+               return;
+
+       if (prefix && *prefix && !core_sparse_checkout_cone)
+               die(_("please run from the toplevel directory in non-cone mode"));
+
+       if (core_sparse_checkout_cone) {
+               for (i = 0; i < argc; i++) {
+                       if (argv[i][0] == '/')
+                               die(_("specify directories rather than patterns (no leading slash)"));
+                       if (argv[i][0] == '!')
+                               die(_("specify directories rather than patterns.  If your directory starts with a '!', pass --skip-checks"));
+                       if (strpbrk(argv[i], "*?[]"))
+                               die(_("specify directories rather than patterns.  If your directory really has any of '*?[]\\' in it, pass --skip-checks"));
+               }
+       }
+
+       for (i = 0; i < argc; i++) {
+               struct cache_entry *ce;
+               struct index_state *index = the_repository->index;
+               int pos = index_name_pos(index, argv[i], strlen(argv[i]));
+
+               if (pos < 0)
+                       continue;
+               ce = index->cache[pos];
+               if (S_ISSPARSEDIR(ce->ce_mode))
+                       continue;
+
+               if (core_sparse_checkout_cone)
+                       die(_("'%s' is not a directory; to treat it as a directory anyway, rerun with --skip-checks"), argv[i]);
+               else
+                       warning(_("pass a leading slash before paths such as '%s' if you want a single file (see NON-CONE PROBLEMS in the git-sparse-checkout manual)."), argv[i]);
+       }
+}
+
 static char const * const builtin_sparse_checkout_add_usage[] = {
-       N_("git sparse-checkout add (--stdin | <patterns>)"),
+       N_("git sparse-checkout add [--skip-checks] (--stdin | <patterns>)"),
        NULL
 };
 
 static struct sparse_checkout_add_opts {
+       int skip_checks;
        int use_stdin;
 } add_opts;
 
 static int sparse_checkout_add(int argc, const char **argv, const char *prefix)
 {
        static struct option builtin_sparse_checkout_add_options[] = {
+               OPT_BOOL_F(0, "skip-checks", &add_opts.skip_checks,
+                          N_("skip some sanity checks on the given paths that might give false positives"),
+                          PARSE_OPT_NONEG),
                OPT_BOOL(0, "stdin", &add_opts.use_stdin,
                         N_("read patterns from standard in")),
                OPT_END(),
@@ -705,17 +766,20 @@ static int sparse_checkout_add(int argc, const char **argv, const char *prefix)
                             builtin_sparse_checkout_add_usage,
                             PARSE_OPT_KEEP_UNKNOWN);
 
+       sanitize_paths(argc, argv, prefix, add_opts.skip_checks);
+
        return modify_pattern_list(argc, argv, add_opts.use_stdin, ADD);
 }
 
 static char const * const builtin_sparse_checkout_set_usage[] = {
-       N_("git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] (--stdin | <patterns>)"),
+       N_("git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] (--stdin | <patterns>)"),
        NULL
 };
 
 static struct sparse_checkout_set_opts {
        int cone_mode;
        int sparse_index;
+       int skip_checks;
        int use_stdin;
 } set_opts;
 
@@ -729,6 +793,9 @@ static int sparse_checkout_set(int argc, const char **argv, const char *prefix)
                         N_("initialize the sparse-checkout in cone mode")),
                OPT_BOOL(0, "sparse-index", &set_opts.sparse_index,
                         N_("toggle the use of a sparse index")),
+               OPT_BOOL_F(0, "skip-checks", &set_opts.skip_checks,
+                          N_("skip some sanity checks on the given paths that might give false positives"),
+                          PARSE_OPT_NONEG),
                OPT_BOOL_F(0, "stdin", &set_opts.use_stdin,
                           N_("read patterns from standard in"),
                           PARSE_OPT_NONEG),
@@ -756,13 +823,15 @@ static int sparse_checkout_set(int argc, const char **argv, const char *prefix)
        if (!core_sparse_checkout_cone && argc == 0) {
                argv = default_patterns;
                argc = default_patterns_nr;
+       } else {
+               sanitize_paths(argc, argv, prefix, set_opts.skip_checks);
        }
 
        return modify_pattern_list(argc, argv, set_opts.use_stdin, REPLACE);
 }
 
 static char const * const builtin_sparse_checkout_reapply_usage[] = {
-       N_("git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"),
+       "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]",
        NULL
 };
 
@@ -784,15 +853,15 @@ static int sparse_checkout_reapply(int argc, const char **argv)
        if (!core_apply_sparse_checkout)
                die(_("must be in a sparse-checkout to reapply sparsity patterns"));
 
+       reapply_opts.cone_mode = -1;
+       reapply_opts.sparse_index = -1;
+
        argc = parse_options(argc, argv, NULL,
                             builtin_sparse_checkout_reapply_options,
                             builtin_sparse_checkout_reapply_usage, 0);
 
        repo_read_index(the_repository);
 
-       reapply_opts.cone_mode = -1;
-       reapply_opts.sparse_index = -1;
-
        if (update_modes(&reapply_opts.cone_mode, &reapply_opts.sparse_index))
                return 1;
 
@@ -800,7 +869,7 @@ static int sparse_checkout_reapply(int argc, const char **argv)
 }
 
 static char const * const builtin_sparse_checkout_disable_usage[] = {
-       N_("git sparse-checkout disable"),
+       "git sparse-checkout disable",
        NULL
 };
 
index 86cd0b456e7752d7ffdb578ce892ca17c4e9c6a9..0c7b6a95882d9405e3cdf4a8d3d2d251dc0588db 100644 (file)
@@ -16,7 +16,7 @@
 #include "log-tree.h"
 #include "diffcore.h"
 #include "exec-cmd.h"
-#include "entry.h"
+#include "reflog.h"
 
 #define INCLUDE_ALL_FILES 2
 
@@ -310,7 +310,7 @@ static int reset_head(void)
         * API for resetting.
         */
        cp.git_cmd = 1;
-       strvec_push(&cp.args, "reset");
+       strvec_pushl(&cp.args, "reset", "--quiet", "--refresh", NULL);
 
        return run_command(&cp);
 }
@@ -634,20 +634,9 @@ static int reflog_is_empty(const char *refname)
 
 static int do_drop_stash(struct stash_info *info, int quiet)
 {
-       int ret;
-       struct child_process cp_reflog = CHILD_PROCESS_INIT;
-
-       /*
-        * reflog does not provide a simple function for deleting refs. One will
-        * need to be added to avoid implementing too much reflog code here
-        */
-
-       cp_reflog.git_cmd = 1;
-       strvec_pushl(&cp_reflog.args, "reflog", "delete", "--updateref",
-                    "--rewrite", NULL);
-       strvec_push(&cp_reflog.args, info->revision.buf);
-       ret = run_command(&cp_reflog);
-       if (!ret) {
+       if (!reflog_delete(info->revision.buf,
+                          EXPIRE_REFLOGS_REWRITE | EXPIRE_REFLOGS_UPDATE_REF,
+                          0)) {
                if (!quiet)
                        printf_ln(_("Dropped %s (%s)"), info->revision.buf,
                                  oid_to_hex(&info->w_commit));
@@ -788,7 +777,6 @@ static int list_stash(int argc, const char **argv, const char *prefix)
 static int show_stat = 1;
 static int show_patch;
 static int show_include_untracked;
-static int use_legacy_stash;
 
 static int git_stash_config(const char *var, const char *value, void *cb)
 {
@@ -804,10 +792,6 @@ static int git_stash_config(const char *var, const char *value, void *cb)
                show_include_untracked = git_config_bool(var, value);
                return 0;
        }
-       if (!strcmp(var, "stash.usebuiltin")) {
-               use_legacy_stash = !git_config_bool(var, value);
-               return 0;
-       }
        return git_diff_basic_config(var, value, cb);
 }
 
@@ -1332,7 +1316,7 @@ static int do_create_stash(const struct pathspec *ps, struct strbuf *stash_msg_b
 
        branch_ref = resolve_ref_unsafe("HEAD", 0, NULL, &flags);
        if (flags & REF_ISSYMREF)
-               branch_name = strrchr(branch_ref, '/') + 1;
+               skip_prefix(branch_ref, "refs/heads/", &branch_name);
        head_short_sha1 = find_unique_abbrev(&head_commit->object.oid,
                                             DEFAULT_ABBREV);
        strbuf_addf(&msg, "%s: %s ", branch_name, head_short_sha1);
@@ -1638,7 +1622,8 @@ static int do_push_stash(const struct pathspec *ps, const char *stash_msg, int q
                        struct child_process cp = CHILD_PROCESS_INIT;
 
                        cp.git_cmd = 1;
-                       strvec_pushl(&cp.args, "reset", "-q", "--", NULL);
+                       strvec_pushl(&cp.args, "reset", "-q", "--refresh", "--",
+                                    NULL);
                        add_pathspecs(&cp.args, ps);
                        if (run_command(&cp)) {
                                ret = -1;
@@ -1782,11 +1767,6 @@ int cmd_stash(int argc, const char **argv, const char *prefix)
 
        git_config(git_stash_config, NULL);
 
-       if (use_legacy_stash ||
-           !git_env_bool("GIT_TEST_STASH_USE_BUILTIN", -1))
-               warning(_("the stash.useBuiltin support has been removed!\n"
-                         "See its entry in 'git help config' for details."));
-
        argc = parse_options(argc, argv, prefix, options, git_stash_usage,
                             PARSE_OPT_KEEP_UNKNOWN | PARSE_OPT_KEEP_DASHDASH);
 
@@ -1819,8 +1799,8 @@ int cmd_stash(int argc, const char **argv, const char *prefix)
        else if (!strcmp(argv[0], "save"))
                return !!save_stash(argc, argv, prefix);
        else if (*argv[0] != '-')
-               usage_msg_opt(xstrfmt(_("unknown subcommand: %s"), argv[0]),
-                             git_stash_usage, options);
+               usage_msg_optf(_("unknown subcommand: %s"),
+                              git_stash_usage, options, argv[0]);
 
        /* Assume 'stash push' */
        strvec_push(&args, "push");
index be33eb83c1b72664dffc17ddffd09f79b57a2887..1e34cf2bebdf5160f0236c1d41a080de5d1744e0 100644 (file)
@@ -15,8 +15,8 @@ static void comment_lines(struct strbuf *buf)
 }
 
 static const char * const stripspace_usage[] = {
-       N_("git stripspace [-s | --strip-comments]"),
-       N_("git stripspace [-c | --comment-lines]"),
+       "git stripspace [-s | --strip-comments]",
+       "git stripspace [-c | --comment-lines]",
        NULL
 };
 
index c5d3fc3817f5990fec156496839ec29686e4b9e6..1a8e5d062149ec7c7ea2e031c286fbfd15b1d386 100644 (file)
@@ -20,6 +20,8 @@
 #include "diff.h"
 #include "object-store.h"
 #include "advice.h"
+#include "branch.h"
+#include "list-objects-filter-options.h"
 
 #define OPT_QUIET (1 << 0)
 #define OPT_CACHED (1 << 1)
 typedef void (*each_submodule_fn)(const struct cache_entry *list_item,
                                  void *cb_data);
 
-static char *get_default_remote(void)
+static char *repo_get_default_remote(struct repository *repo)
 {
        char *dest = NULL, *ret;
        struct strbuf sb = STRBUF_INIT;
-       const char *refname = resolve_ref_unsafe("HEAD", 0, NULL, NULL);
+       struct ref_store *store = get_main_ref_store(repo);
+       const char *refname = refs_resolve_ref_unsafe(store, "HEAD", 0, NULL,
+                                                     NULL);
 
        if (!refname)
                die(_("No such ref: %s"), "HEAD");
@@ -46,7 +50,7 @@ static char *get_default_remote(void)
                die(_("Expecting a full ref name, got %s"), refname);
 
        strbuf_addf(&sb, "branch.%s.remote", refname);
-       if (git_config_get_string(sb.buf, &dest))
+       if (repo_config_get_string(repo, sb.buf, &dest))
                ret = xstrdup("origin");
        else
                ret = dest;
@@ -55,19 +59,17 @@ static char *get_default_remote(void)
        return ret;
 }
 
-static int print_default_remote(int argc, const char **argv, const char *prefix)
+static char *get_default_remote_submodule(const char *module_path)
 {
-       char *remote;
-
-       if (argc != 1)
-               die(_("submodule--helper print-default-remote takes no arguments"));
+       struct repository subrepo;
 
-       remote = get_default_remote();
-       if (remote)
-               printf("%s\n", remote);
+       repo_submodule_init(&subrepo, the_repository, module_path, null_oid());
+       return repo_get_default_remote(&subrepo);
+}
 
-       free(remote);
-       return 0;
+static char *get_default_remote(void)
+{
+       return repo_get_default_remote(the_repository);
 }
 
 static int starts_with_dot_slash(const char *str)
@@ -245,11 +247,10 @@ static int resolve_relative_url_test(int argc, const char **argv, const char *pr
        return 0;
 }
 
-/* the result should be freed by the caller. */
-static char *get_submodule_displaypath(const char *path, const char *prefix)
+static char *do_get_submodule_displaypath(const char *path,
+                                         const char *prefix,
+                                         const char *super_prefix)
 {
-       const char *super_prefix = get_super_prefix();
-
        if (prefix && super_prefix) {
                BUG("cannot have prefix '%s' and superprefix '%s'",
                    prefix, super_prefix);
@@ -265,6 +266,13 @@ static char *get_submodule_displaypath(const char *path, const char *prefix)
        }
 }
 
+/* the result should be freed by the caller. */
+static char *get_submodule_displaypath(const char *path, const char *prefix)
+{
+       const char *super_prefix = get_super_prefix();
+       return do_get_submodule_displaypath(path, prefix, super_prefix);
+}
+
 static char *compute_rev_name(const char *sub_path, const char* object_id)
 {
        struct strbuf sb = STRBUF_INIT;
@@ -586,18 +594,22 @@ static int module_foreach(int argc, const char **argv, const char *prefix)
 
 struct init_cb {
        const char *prefix;
+       const char *superprefix;
        unsigned int flags;
 };
 #define INIT_CB_INIT { 0 }
 
 static void init_submodule(const char *path, const char *prefix,
-                          unsigned int flags)
+                          const char *superprefix, unsigned int flags)
 {
        const struct submodule *sub;
        struct strbuf sb = STRBUF_INIT;
        char *upd = NULL, *url = NULL, *displaypath;
 
-       displaypath = get_submodule_displaypath(path, prefix);
+       /* try superprefix from the environment, if it is not passed explicitly */
+       if (!superprefix)
+               superprefix = get_super_prefix();
+       displaypath = do_get_submodule_displaypath(path, prefix, superprefix);
 
        sub = submodule_from_path(the_repository, null_oid(), path);
 
@@ -671,7 +683,7 @@ static void init_submodule(const char *path, const char *prefix,
 static void init_submodule_cb(const struct cache_entry *list_item, void *cb_data)
 {
        struct init_cb *info = cb_data;
-       init_submodule(list_item->name, info->prefix, info->flags);
+       init_submodule(list_item->name, info->prefix, info->superprefix, info->flags);
 }
 
 static int module_init(int argc, const char **argv, const char *prefix)
@@ -1341,9 +1353,8 @@ static void sync_submodule(const char *path, const char *prefix,
 {
        const struct submodule *sub;
        char *remote_key = NULL;
-       char *sub_origin_url, *super_config_url, *displaypath;
+       char *sub_origin_url, *super_config_url, *displaypath, *default_remote;
        struct strbuf sb = STRBUF_INIT;
-       struct child_process cp = CHILD_PROCESS_INIT;
        char *sub_config_path = NULL;
 
        if (!is_submodule_active(the_repository, path))
@@ -1382,21 +1393,15 @@ static void sync_submodule(const char *path, const char *prefix,
        if (!is_submodule_populated_gently(path, NULL))
                goto cleanup;
 
-       prepare_submodule_repo_env(&cp.env_array);
-       cp.git_cmd = 1;
-       cp.dir = path;
-       strvec_pushl(&cp.args, "submodule--helper",
-                    "print-default-remote", NULL);
-
        strbuf_reset(&sb);
-       if (capture_command(&cp, &sb, 0))
+       default_remote = get_default_remote_submodule(path);
+       if (!default_remote)
                die(_("failed to get the default remote for submodule '%s'"),
                      path);
 
-       strbuf_strip_suffix(&sb, "\n");
-       remote_key = xstrfmt("remote.%s.url", sb.buf);
+       remote_key = xstrfmt("remote.%s.url", default_remote);
+       free(default_remote);
 
-       strbuf_reset(&sb);
        submodule_to_gitdir(&sb, path);
        strbuf_addstr(&sb, "/config");
 
@@ -1630,6 +1635,7 @@ struct module_clone_data {
        const char *name;
        const char *url;
        const char *depth;
+       struct list_objects_filter_options *filter_options;
        struct string_list reference;
        unsigned int quiet: 1;
        unsigned int progress: 1;
@@ -1637,7 +1643,10 @@ struct module_clone_data {
        unsigned int require_init: 1;
        int single_branch;
 };
-#define MODULE_CLONE_DATA_INIT { .reference = STRING_LIST_INIT_NODUP, .single_branch = -1 }
+#define MODULE_CLONE_DATA_INIT { \
+       .reference = STRING_LIST_INIT_NODUP, \
+       .single_branch = -1, \
+}
 
 struct submodule_alternate_setup {
        const char *submodule_name;
@@ -1796,6 +1805,10 @@ static int clone_submodule(struct module_clone_data *clone_data)
                        strvec_push(&cp.args, "--dissociate");
                if (sm_gitdir && *sm_gitdir)
                        strvec_pushl(&cp.args, "--separate-git-dir", sm_gitdir, NULL);
+               if (clone_data->filter_options && clone_data->filter_options->choice)
+                       strvec_pushf(&cp.args, "--filter=%s",
+                                    expand_list_objects_filter_spec(
+                                            clone_data->filter_options));
                if (clone_data->single_branch >= 0)
                        strvec_push(&cp.args, clone_data->single_branch ?
                                    "--single-branch" :
@@ -1852,6 +1865,7 @@ static int module_clone(int argc, const char **argv, const char *prefix)
 {
        int dissociate = 0, quiet = 0, progress = 0, require_init = 0;
        struct module_clone_data clone_data = MODULE_CLONE_DATA_INIT;
+       struct list_objects_filter_options filter_options;
 
        struct option module_clone_options[] = {
                OPT_STRING(0, "prefix", &clone_data.prefix,
@@ -1874,24 +1888,26 @@ static int module_clone(int argc, const char **argv, const char *prefix)
                OPT_STRING(0, "depth", &clone_data.depth,
                           N_("string"),
                           N_("depth for shallow clones")),
-               OPT__QUIET(&quiet, "Suppress output for cloning a submodule"),
+               OPT__QUIET(&quiet, "suppress output for cloning a submodule"),
                OPT_BOOL(0, "progress", &progress,
                           N_("force cloning progress")),
                OPT_BOOL(0, "require-init", &require_init,
                           N_("disallow cloning into non-empty directory")),
                OPT_BOOL(0, "single-branch", &clone_data.single_branch,
                         N_("clone only one branch, HEAD or --branch")),
+               OPT_PARSE_LIST_OBJECTS_FILTER(&filter_options),
                OPT_END()
        };
 
        const char *const git_submodule_helper_usage[] = {
                N_("git submodule--helper clone [--prefix=<path>] [--quiet] "
                   "[--reference <repository>] [--name <name>] [--depth <depth>] "
-                  "[--single-branch] "
+                  "[--single-branch] [--filter <filter-spec>] "
                   "--url <url> --path <path>"),
                NULL
        };
 
+       memset(&filter_options, 0, sizeof(filter_options));
        argc = parse_options(argc, argv, prefix, module_clone_options,
                             git_submodule_helper_usage, 0);
 
@@ -1899,12 +1915,14 @@ static int module_clone(int argc, const char **argv, const char *prefix)
        clone_data.quiet = !!quiet;
        clone_data.progress = !!progress;
        clone_data.require_init = !!require_init;
+       clone_data.filter_options = &filter_options;
 
        if (argc || !clone_data.url || !clone_data.path || !*(clone_data.path))
                usage_with_options(git_submodule_helper_usage,
                                   module_clone_options);
 
        clone_submodule(&clone_data);
+       list_objects_filter_release(&filter_options);
        return 0;
 }
 
@@ -1945,29 +1963,6 @@ static void determine_submodule_update_strategy(struct repository *r,
        free(key);
 }
 
-static int module_update_module_mode(int argc, const char **argv, const char *prefix)
-{
-       const char *path, *update = NULL;
-       int just_cloned;
-       struct submodule_update_strategy update_strategy = { .type = SM_UPDATE_CHECKOUT };
-
-       if (argc < 3 || argc > 4)
-               die("submodule--helper update-module-clone expects <just-cloned> <path> [<update>]");
-
-       just_cloned = git_config_int("just_cloned", argv[1]);
-       path = argv[2];
-
-       if (argc == 4)
-               update = argv[3];
-
-       determine_submodule_update_strategy(the_repository,
-                                           just_cloned, path, update,
-                                           &update_strategy);
-       fputs(submodule_strategy_to_string(&update_strategy), stdout);
-
-       return 0;
-}
-
 struct update_clone_data {
        const struct submodule *sub;
        struct object_id oid;
@@ -1975,27 +1970,13 @@ struct update_clone_data {
 };
 
 struct submodule_update_clone {
-       /* index into 'list', the list of submodules to look into for cloning */
+       /* index into 'update_data.list', the list of submodules to look into for cloning */
        int current;
-       struct module_list list;
-       unsigned warn_if_uninitialized : 1;
-
-       /* update parameter passed via commandline */
-       struct submodule_update_strategy update;
 
        /* configuration parameters which are passed on to the children */
-       int progress;
-       int quiet;
-       int recommend_shallow;
-       struct string_list references;
-       int dissociate;
-       unsigned require_init;
-       const char *depth;
-       const char *recursive_prefix;
-       const char *prefix;
-       int single_branch;
+       struct update_data *update_data;
 
-       /* to be consumed by git-submodule.sh */
+       /* to be consumed by update_submodule() */
        struct update_clone_data *update_clone;
        int update_clone_nr; int update_clone_alloc;
 
@@ -2005,32 +1986,47 @@ struct submodule_update_clone {
        /* failed clones to be retried again */
        const struct cache_entry **failed_clones;
        int failed_clones_nr, failed_clones_alloc;
-
-       int max_jobs;
 };
-#define SUBMODULE_UPDATE_CLONE_INIT { \
-       .list = MODULE_LIST_INIT, \
-       .update = SUBMODULE_UPDATE_STRATEGY_INIT, \
-       .recommend_shallow = -1, \
-       .references = STRING_LIST_INIT_DUP, \
-       .single_branch = -1, \
-       .max_jobs = 1, \
-}
+#define SUBMODULE_UPDATE_CLONE_INIT { 0 }
 
 struct update_data {
+       const char *prefix;
        const char *recursive_prefix;
-       const char *sm_path;
        const char *displaypath;
-       struct object_id oid;
+       const char *update_default;
        struct object_id suboid;
+       struct string_list references;
        struct submodule_update_strategy update_strategy;
+       struct list_objects_filter_options *filter_options;
+       struct module_list list;
        int depth;
-       unsigned int force: 1;
-       unsigned int quiet: 1;
-       unsigned int nofetch: 1;
-       unsigned int just_cloned: 1;
+       int max_jobs;
+       int single_branch;
+       int recommend_shallow;
+       unsigned int require_init;
+       unsigned int force;
+       unsigned int quiet;
+       unsigned int nofetch;
+       unsigned int remote;
+       unsigned int progress;
+       unsigned int dissociate;
+       unsigned int init;
+       unsigned int warn_if_uninitialized;
+       unsigned int recursive;
+
+       /* copied over from update_clone_data */
+       struct object_id oid;
+       unsigned int just_cloned;
+       const char *sm_path;
 };
-#define UPDATE_DATA_INIT { .update_strategy = SUBMODULE_UPDATE_STRATEGY_INIT }
+#define UPDATE_DATA_INIT { \
+       .update_strategy = SUBMODULE_UPDATE_STRATEGY_INIT, \
+       .list = MODULE_LIST_INIT, \
+       .recommend_shallow = -1, \
+       .references = STRING_LIST_INIT_DUP, \
+       .single_branch = -1, \
+       .max_jobs = 1, \
+}
 
 static void next_submodule_warn_missing(struct submodule_update_clone *suc,
                struct strbuf *out, const char *displaypath)
@@ -2039,7 +2035,7 @@ static void next_submodule_warn_missing(struct submodule_update_clone *suc,
         * Only mention uninitialized submodules when their
         * paths have been specified.
         */
-       if (suc->warn_if_uninitialized) {
+       if (suc->update_data->warn_if_uninitialized) {
                strbuf_addf(out,
                        _("Submodule path '%s' not initialized"),
                        displaypath);
@@ -2071,8 +2067,8 @@ static int prepare_to_clone_next_submodule(const struct cache_entry *ce,
        int need_free_url = 0;
 
        if (ce_stage(ce)) {
-               if (suc->recursive_prefix)
-                       strbuf_addf(&sb, "%s/%s", suc->recursive_prefix, ce->name);
+               if (suc->update_data->recursive_prefix)
+                       strbuf_addf(&sb, "%s/%s", suc->update_data->recursive_prefix, ce->name);
                else
                        strbuf_addstr(&sb, ce->name);
                strbuf_addf(out, _("Skipping unmerged submodule %s"), sb.buf);
@@ -2082,8 +2078,8 @@ static int prepare_to_clone_next_submodule(const struct cache_entry *ce,
 
        sub = submodule_from_path(the_repository, null_oid(), ce->name);
 
-       if (suc->recursive_prefix)
-               displaypath = relative_path(suc->recursive_prefix,
+       if (suc->update_data->recursive_prefix)
+               displaypath = relative_path(suc->update_data->recursive_prefix,
                                            ce->name, &displaypath_sb);
        else
                displaypath = ce->name;
@@ -2101,8 +2097,8 @@ static int prepare_to_clone_next_submodule(const struct cache_entry *ce,
        }
        free(key);
 
-       if (suc->update.type == SM_UPDATE_NONE
-           || (suc->update.type == SM_UPDATE_UNSPECIFIED
+       if (suc->update_data->update_strategy.type == SM_UPDATE_NONE
+           || (suc->update_data->update_strategy.type == SM_UPDATE_UNSPECIFIED
                && update_type == SM_UPDATE_NONE)) {
                strbuf_addf(out, _("Skipping submodule '%s'"), displaypath);
                strbuf_addch(out, '\n');
@@ -2146,30 +2142,33 @@ static int prepare_to_clone_next_submodule(const struct cache_entry *ce,
        child->err = -1;
        strvec_push(&child->args, "submodule--helper");
        strvec_push(&child->args, "clone");
-       if (suc->progress)
+       if (suc->update_data->progress)
                strvec_push(&child->args, "--progress");
-       if (suc->quiet)
+       if (suc->update_data->quiet)
                strvec_push(&child->args, "--quiet");
-       if (suc->prefix)
-               strvec_pushl(&child->args, "--prefix", suc->prefix, NULL);
-       if (suc->recommend_shallow && sub->recommend_shallow == 1)
+       if (suc->update_data->prefix)
+               strvec_pushl(&child->args, "--prefix", suc->update_data->prefix, NULL);
+       if (suc->update_data->recommend_shallow && sub->recommend_shallow == 1)
                strvec_push(&child->args, "--depth=1");
-       if (suc->require_init)
+       else if (suc->update_data->depth)
+               strvec_pushf(&child->args, "--depth=%d", suc->update_data->depth);
+       if (suc->update_data->filter_options && suc->update_data->filter_options->choice)
+               strvec_pushf(&child->args, "--filter=%s",
+                            expand_list_objects_filter_spec(suc->update_data->filter_options));
+       if (suc->update_data->require_init)
                strvec_push(&child->args, "--require-init");
        strvec_pushl(&child->args, "--path", sub->path, NULL);
        strvec_pushl(&child->args, "--name", sub->name, NULL);
        strvec_pushl(&child->args, "--url", url, NULL);
-       if (suc->references.nr) {
+       if (suc->update_data->references.nr) {
                struct string_list_item *item;
-               for_each_string_list_item(item, &suc->references)
+               for_each_string_list_item(item, &suc->update_data->references)
                        strvec_pushl(&child->args, "--reference", item->string, NULL);
        }
-       if (suc->dissociate)
+       if (suc->update_data->dissociate)
                strvec_push(&child->args, "--dissociate");
-       if (suc->depth)
-               strvec_push(&child->args, suc->depth);
-       if (suc->single_branch >= 0)
-               strvec_push(&child->args, suc->single_branch ?
+       if (suc->update_data->single_branch >= 0)
+               strvec_push(&child->args, suc->update_data->single_branch ?
                                              "--single-branch" :
                                              "--no-single-branch");
 
@@ -2191,8 +2190,8 @@ static int update_clone_get_next_task(struct child_process *child,
        const struct cache_entry *ce;
        int index;
 
-       for (; suc->current < suc->list.nr; suc->current++) {
-               ce = suc->list.entries[suc->current];
+       for (; suc->current < suc->update_data->list.nr; suc->current++) {
+               ce = suc->update_data->list.entries[suc->current];
                if (prepare_to_clone_next_submodule(ce, child, suc, err)) {
                        int *p = xmalloc(sizeof(*p));
                        *p = suc->current;
@@ -2207,7 +2206,7 @@ static int update_clone_get_next_task(struct child_process *child,
         * stragglers again, which we can imagine as an extension of the
         * entry list.
         */
-       index = suc->current - suc->list.nr;
+       index = suc->current - suc->update_data->list.nr;
        if (index < suc->failed_clones_nr) {
                int *p;
                ce = suc->failed_clones[index];
@@ -2252,8 +2251,8 @@ static int update_clone_task_finished(int result,
        if (!result)
                return 0;
 
-       if (idx < suc->list.nr) {
-               ce  = suc->list.entries[idx];
+       if (idx < suc->update_data->list.nr) {
+               ce  = suc->update_data->list.entries[idx];
                strbuf_addf(err, _("Failed to clone '%s'. Retry scheduled"),
                            ce->name);
                strbuf_addch(err, '\n');
@@ -2263,7 +2262,7 @@ static int update_clone_task_finished(int result,
                suc->failed_clones[suc->failed_clones_nr++] = ce;
                return 0;
        } else {
-               idx -= suc->list.nr;
+               idx -= suc->update_data->list.nr;
                ce  = suc->failed_clones[idx];
                strbuf_addf(err, _("Failed to clone '%s' a second time, aborting"),
                            ce->name);
@@ -2327,83 +2326,76 @@ static int fetch_in_submodule(const char *module_path, int depth, int quiet, str
 
 static int run_update_command(struct update_data *ud, int subforce)
 {
-       struct strvec args = STRVEC_INIT;
-       struct strvec child_env = STRVEC_INIT;
+       struct child_process cp = CHILD_PROCESS_INIT;
        char *oid = oid_to_hex(&ud->oid);
        int must_die_on_failure = 0;
-       int git_cmd;
 
        switch (ud->update_strategy.type) {
        case SM_UPDATE_CHECKOUT:
-               git_cmd = 1;
-               strvec_pushl(&args, "checkout", "-q", NULL);
+               cp.git_cmd = 1;
+               strvec_pushl(&cp.args, "checkout", "-q", NULL);
                if (subforce)
-                       strvec_push(&args, "-f");
+                       strvec_push(&cp.args, "-f");
                break;
        case SM_UPDATE_REBASE:
-               git_cmd = 1;
-               strvec_push(&args, "rebase");
+               cp.git_cmd = 1;
+               strvec_push(&cp.args, "rebase");
                if (ud->quiet)
-                       strvec_push(&args, "--quiet");
+                       strvec_push(&cp.args, "--quiet");
                must_die_on_failure = 1;
                break;
        case SM_UPDATE_MERGE:
-               git_cmd = 1;
-               strvec_push(&args, "merge");
+               cp.git_cmd = 1;
+               strvec_push(&cp.args, "merge");
                if (ud->quiet)
-                       strvec_push(&args, "--quiet");
+                       strvec_push(&cp.args, "--quiet");
                must_die_on_failure = 1;
                break;
        case SM_UPDATE_COMMAND:
-               git_cmd = 0;
-               strvec_push(&args, ud->update_strategy.command);
+               cp.use_shell = 1;
+               strvec_push(&cp.args, ud->update_strategy.command);
                must_die_on_failure = 1;
                break;
        default:
                BUG("unexpected update strategy type: %s",
                    submodule_strategy_to_string(&ud->update_strategy));
        }
-       strvec_push(&args, oid);
+       strvec_push(&cp.args, oid);
 
-       prepare_submodule_repo_env(&child_env);
-       if (run_command_v_opt_cd_env(args.v, git_cmd ? RUN_GIT_CMD : RUN_USING_SHELL,
-                                    ud->sm_path, child_env.v)) {
+       cp.dir = xstrdup(ud->sm_path);
+       prepare_submodule_repo_env(&cp.env_array);
+       if (run_command(&cp)) {
                switch (ud->update_strategy.type) {
                case SM_UPDATE_CHECKOUT:
-                       printf(_("Unable to checkout '%s' in submodule path '%s'"),
-                              oid, ud->displaypath);
+                       die_message(_("Unable to checkout '%s' in submodule path '%s'"),
+                                   oid, ud->displaypath);
                        break;
                case SM_UPDATE_REBASE:
-                       printf(_("Unable to rebase '%s' in submodule path '%s'"),
-                              oid, ud->displaypath);
+                       die_message(_("Unable to rebase '%s' in submodule path '%s'"),
+                           oid, ud->displaypath);
                        break;
                case SM_UPDATE_MERGE:
-                       printf(_("Unable to merge '%s' in submodule path '%s'"),
-                              oid, ud->displaypath);
+                       die_message(_("Unable to merge '%s' in submodule path '%s'"),
+                           oid, ud->displaypath);
                        break;
                case SM_UPDATE_COMMAND:
-                       printf(_("Execution of '%s %s' failed in submodule path '%s'"),
-                              ud->update_strategy.command, oid, ud->displaypath);
+                       die_message(_("Execution of '%s %s' failed in submodule path '%s'"),
+                           ud->update_strategy.command, oid, ud->displaypath);
                        break;
                default:
                        BUG("unexpected update strategy type: %s",
                            submodule_strategy_to_string(&ud->update_strategy));
                }
-               /*
-                * NEEDSWORK: We are currently printing to stdout with error
-                * return so that the shell caller handles the error output
-                * properly. Once we start handling the error messages within
-                * C, we should use die() instead.
-                */
                if (must_die_on_failure)
-                       return 2;
-               /*
-                * This signifies to the caller in shell that the command
-                * failed without dying
-                */
+                       exit(128);
+
+               /* the command failed, but update must continue */
                return 1;
        }
 
+       if (ud->quiet)
+               return 0;
+
        switch (ud->update_strategy.type) {
        case SM_UPDATE_CHECKOUT:
                printf(_("Submodule path '%s': checked out '%s'\n"),
@@ -2429,7 +2421,7 @@ static int run_update_command(struct update_data *ud, int subforce)
        return 0;
 }
 
-static int do_run_update_procedure(struct update_data *ud)
+static int run_update_procedure(struct update_data *ud)
 {
        int subforce = is_null_oid(&ud->suboid) || ud->force;
 
@@ -2459,21 +2451,211 @@ static int do_run_update_procedure(struct update_data *ud)
        return run_update_command(ud, subforce);
 }
 
-static void update_submodule(struct update_clone_data *ucd)
+static const char *remote_submodule_branch(const char *path)
 {
-       fprintf(stdout, "dummy %s %d\t%s\n",
-               oid_to_hex(&ucd->oid),
-               ucd->just_cloned,
-               ucd->sub->path);
+       const struct submodule *sub;
+       const char *branch = NULL;
+       char *key;
+
+       sub = submodule_from_path(the_repository, null_oid(), path);
+       if (!sub)
+               return NULL;
+
+       key = xstrfmt("submodule.%s.branch", sub->name);
+       if (repo_config_get_string_tmp(the_repository, key, &branch))
+               branch = sub->branch;
+       free(key);
+
+       if (!branch)
+               return "HEAD";
+
+       if (!strcmp(branch, ".")) {
+               const char *refname = resolve_ref_unsafe("HEAD", 0, NULL, NULL);
+
+               if (!refname)
+                       die(_("No such ref: %s"), "HEAD");
+
+               /* detached HEAD */
+               if (!strcmp(refname, "HEAD"))
+                       die(_("Submodule (%s) branch configured to inherit "
+                             "branch from superproject, but the superproject "
+                             "is not on any branch"), sub->name);
+
+               if (!skip_prefix(refname, "refs/heads/", &refname))
+                       die(_("Expecting a full ref name, got %s"), refname);
+               return refname;
+       }
+
+       return branch;
 }
 
-static int update_submodules(struct submodule_update_clone *suc)
+static void ensure_core_worktree(const char *path)
 {
-       int i;
+       const char *cw;
+       struct repository subrepo;
+
+       if (repo_submodule_init(&subrepo, the_repository, path, null_oid()))
+               die(_("could not get a repository handle for submodule '%s'"), path);
+
+       if (!repo_config_get_string_tmp(&subrepo, "core.worktree", &cw)) {
+               char *cfg_file, *abs_path;
+               const char *rel_path;
+               struct strbuf sb = STRBUF_INIT;
+
+               cfg_file = repo_git_path(&subrepo, "config");
+
+               abs_path = absolute_pathdup(path);
+               rel_path = relative_path(abs_path, subrepo.gitdir, &sb);
+
+               git_config_set_in_file(cfg_file, "core.worktree", rel_path);
+
+               free(cfg_file);
+               free(abs_path);
+               strbuf_release(&sb);
+       }
+}
+
+static void update_data_to_args(struct update_data *update_data, struct strvec *args)
+{
+       strvec_pushl(args, "submodule--helper", "update", "--recursive", NULL);
+       strvec_pushf(args, "--jobs=%d", update_data->max_jobs);
+       if (update_data->recursive_prefix)
+               strvec_pushl(args, "--recursive-prefix",
+                            update_data->recursive_prefix, NULL);
+       if (update_data->quiet)
+               strvec_push(args, "--quiet");
+       if (update_data->force)
+               strvec_push(args, "--force");
+       if (update_data->init)
+               strvec_push(args, "--init");
+       if (update_data->remote)
+               strvec_push(args, "--remote");
+       if (update_data->nofetch)
+               strvec_push(args, "--no-fetch");
+       if (update_data->dissociate)
+               strvec_push(args, "--dissociate");
+       if (update_data->progress)
+               strvec_push(args, "--progress");
+       if (update_data->require_init)
+               strvec_push(args, "--require-init");
+       if (update_data->depth)
+               strvec_pushf(args, "--depth=%d", update_data->depth);
+       if (update_data->update_default)
+               strvec_pushl(args, "--update", update_data->update_default, NULL);
+       if (update_data->references.nr) {
+               struct string_list_item *item;
+               for_each_string_list_item(item, &update_data->references)
+                       strvec_pushl(args, "--reference", item->string, NULL);
+       }
+       if (update_data->filter_options && update_data->filter_options->choice)
+               strvec_pushf(args, "--filter=%s",
+                               expand_list_objects_filter_spec(
+                                       update_data->filter_options));
+       if (update_data->recommend_shallow == 0)
+               strvec_push(args, "--no-recommend-shallow");
+       else if (update_data->recommend_shallow == 1)
+               strvec_push(args, "--recommend-shallow");
+       if (update_data->single_branch >= 0)
+               strvec_push(args, update_data->single_branch ?
+                                   "--single-branch" :
+                                   "--no-single-branch");
+}
+
+static int update_submodule(struct update_data *update_data)
+{
+       char *prefixed_path;
+
+       ensure_core_worktree(update_data->sm_path);
+
+       if (update_data->recursive_prefix)
+               prefixed_path = xstrfmt("%s%s", update_data->recursive_prefix,
+                                       update_data->sm_path);
+       else
+               prefixed_path = xstrdup(update_data->sm_path);
+
+       update_data->displaypath = get_submodule_displaypath(prefixed_path,
+                                                            update_data->prefix);
+       free(prefixed_path);
+
+       determine_submodule_update_strategy(the_repository, update_data->just_cloned,
+                                           update_data->sm_path, update_data->update_default,
+                                           &update_data->update_strategy);
+
+       if (update_data->just_cloned)
+               oidcpy(&update_data->suboid, null_oid());
+       else if (resolve_gitlink_ref(update_data->sm_path, "HEAD", &update_data->suboid))
+               die(_("Unable to find current revision in submodule path '%s'"),
+                       update_data->displaypath);
+
+       if (update_data->remote) {
+               char *remote_name = get_default_remote_submodule(update_data->sm_path);
+               const char *branch = remote_submodule_branch(update_data->sm_path);
+               char *remote_ref = xstrfmt("refs/remotes/%s/%s", remote_name, branch);
+
+               if (!update_data->nofetch) {
+                       if (fetch_in_submodule(update_data->sm_path, update_data->depth,
+                                             0, NULL))
+                               die(_("Unable to fetch in submodule path '%s'"),
+                                   update_data->sm_path);
+               }
+
+               if (resolve_gitlink_ref(update_data->sm_path, remote_ref, &update_data->oid))
+                       die(_("Unable to find %s revision in submodule path '%s'"),
+                           remote_ref, update_data->sm_path);
+
+               free(remote_ref);
+       }
+
+       if (!oideq(&update_data->oid, &update_data->suboid) || update_data->force)
+               if (run_update_procedure(update_data))
+                       return 1;
+
+       if (update_data->recursive) {
+               struct child_process cp = CHILD_PROCESS_INIT;
+               struct update_data next = *update_data;
+               int res;
+
+               if (update_data->recursive_prefix)
+                       prefixed_path = xstrfmt("%s%s/", update_data->recursive_prefix,
+                                               update_data->sm_path);
+               else
+                       prefixed_path = xstrfmt("%s/", update_data->sm_path);
+
+               next.recursive_prefix = get_submodule_displaypath(prefixed_path,
+                                                                 update_data->prefix);
+               next.prefix = NULL;
+               oidcpy(&next.oid, null_oid());
+               oidcpy(&next.suboid, null_oid());
+
+               cp.dir = update_data->sm_path;
+               cp.git_cmd = 1;
+               prepare_submodule_repo_env(&cp.env_array);
+               update_data_to_args(&next, &cp.args);
 
-       run_processes_parallel_tr2(suc->max_jobs, update_clone_get_next_task,
+               /* die() if child process die()'d */
+               res = run_command(&cp);
+               if (!res)
+                       return 0;
+               die_message(_("Failed to recurse into submodule path '%s'"),
+                           update_data->displaypath);
+               if (res == 128)
+                       exit(res);
+               else if (res)
+                       return 1;
+       }
+
+       return 0;
+}
+
+static int update_submodules(struct update_data *update_data)
+{
+       int i, res = 0;
+       struct submodule_update_clone suc = SUBMODULE_UPDATE_CLONE_INIT;
+
+       suc.update_data = update_data;
+       run_processes_parallel_tr2(suc.update_data->max_jobs, update_clone_get_next_task,
                                   update_clone_start_failure,
-                                  update_clone_task_finished, suc, "submodule",
+                                  update_clone_task_finished, &suc, "submodule",
                                   "parallel/update");
 
        /*
@@ -2484,209 +2666,139 @@ static int update_submodules(struct submodule_update_clone *suc)
         *   checkout involve more straightforward sequential I/O.
         * - the listener can avoid doing any work if fetching failed.
         */
-       if (suc->quickstop)
-               return 1;
+       if (suc.quickstop) {
+               res = 1;
+               goto cleanup;
+       }
 
-       for (i = 0; i < suc->update_clone_nr; i++)
-               update_submodule(&suc->update_clone[i]);
+       for (i = 0; i < suc.update_clone_nr; i++) {
+               struct update_clone_data ucd = suc.update_clone[i];
 
-       return 0;
+               oidcpy(&update_data->oid, &ucd.oid);
+               update_data->just_cloned = ucd.just_cloned;
+               update_data->sm_path = ucd.sub->path;
+
+               if (update_submodule(update_data))
+                       res = 1;
+       }
+
+cleanup:
+       string_list_clear(&update_data->references, 0);
+       return res;
 }
 
-static int update_clone(int argc, const char **argv, const char *prefix)
+static int module_update(int argc, const char **argv, const char *prefix)
 {
-       const char *update = NULL;
        struct pathspec pathspec;
-       struct submodule_update_clone suc = SUBMODULE_UPDATE_CLONE_INIT;
+       struct update_data opt = UPDATE_DATA_INIT;
+       struct list_objects_filter_options filter_options;
+       int ret;
 
-       struct option module_update_clone_options[] = {
-               OPT_STRING(0, "prefix", &prefix,
+       struct option module_update_options[] = {
+               OPT__FORCE(&opt.force, N_("force checkout updates"), 0),
+               OPT_BOOL(0, "init", &opt.init,
+                        N_("initialize uninitialized submodules before update")),
+               OPT_BOOL(0, "remote", &opt.remote,
+                        N_("use SHA-1 of submodule's remote tracking branch")),
+               OPT_BOOL(0, "recursive", &opt.recursive,
+                        N_("traverse submodules recursively")),
+               OPT_BOOL('N', "no-fetch", &opt.nofetch,
+                        N_("don't fetch new objects from the remote site")),
+               OPT_STRING(0, "prefix", &opt.prefix,
                           N_("path"),
                           N_("path into the working tree")),
-               OPT_STRING(0, "recursive-prefix", &suc.recursive_prefix,
+               OPT_STRING(0, "recursive-prefix", &opt.recursive_prefix,
                           N_("path"),
                           N_("path into the working tree, across nested "
                              "submodule boundaries")),
-               OPT_STRING(0, "update", &update,
+               OPT_STRING(0, "update", &opt.update_default,
                           N_("string"),
                           N_("rebase, merge, checkout or none")),
-               OPT_STRING_LIST(0, "reference", &suc.references, N_("repo"),
+               OPT_STRING_LIST(0, "reference", &opt.references, N_("repo"),
                           N_("reference repository")),
-               OPT_BOOL(0, "dissociate", &suc.dissociate,
+               OPT_BOOL(0, "dissociate", &opt.dissociate,
                           N_("use --reference only while cloning")),
-               OPT_STRING(0, "depth", &suc.depth, "<depth>",
+               OPT_INTEGER(0, "depth", &opt.depth,
                           N_("create a shallow clone truncated to the "
                              "specified number of revisions")),
-               OPT_INTEGER('j', "jobs", &suc.max_jobs,
+               OPT_INTEGER('j', "jobs", &opt.max_jobs,
                            N_("parallel jobs")),
-               OPT_BOOL(0, "recommend-shallow", &suc.recommend_shallow,
+               OPT_BOOL(0, "recommend-shallow", &opt.recommend_shallow,
                            N_("whether the initial clone should follow the shallow recommendation")),
-               OPT__QUIET(&suc.quiet, N_("don't print cloning progress")),
-               OPT_BOOL(0, "progress", &suc.progress,
+               OPT__QUIET(&opt.quiet, N_("don't print cloning progress")),
+               OPT_BOOL(0, "progress", &opt.progress,
                            N_("force cloning progress")),
-               OPT_BOOL(0, "require-init", &suc.require_init,
+               OPT_BOOL(0, "require-init", &opt.require_init,
                           N_("disallow cloning into non-empty directory")),
-               OPT_BOOL(0, "single-branch", &suc.single_branch,
+               OPT_BOOL(0, "single-branch", &opt.single_branch,
                         N_("clone only one branch, HEAD or --branch")),
+               OPT_PARSE_LIST_OBJECTS_FILTER(&filter_options),
                OPT_END()
        };
 
        const char *const git_submodule_helper_usage[] = {
-               N_("git submodule--helper update-clone [--prefix=<path>] [<path>...]"),
+               N_("git submodule [--quiet] update"
+               " [--init [--filter=<filter-spec>]] [--remote]"
+               " [-N|--no-fetch] [-f|--force]"
+               " [--checkout|--merge|--rebase]"
+               " [--[no-]recommend-shallow] [--reference <repository>]"
+               " [--recursive] [--[no-]single-branch] [--] [<path>...]"),
                NULL
        };
-       suc.prefix = prefix;
 
-       update_clone_config_from_gitmodules(&suc.max_jobs);
-       git_config(git_update_clone_config, &suc.max_jobs);
+       update_clone_config_from_gitmodules(&opt.max_jobs);
+       git_config(git_update_clone_config, &opt.max_jobs);
 
-       argc = parse_options(argc, argv, prefix, module_update_clone_options,
+       memset(&filter_options, 0, sizeof(filter_options));
+       argc = parse_options(argc, argv, prefix, module_update_options,
                             git_submodule_helper_usage, 0);
 
-       if (update)
-               if (parse_submodule_update_strategy(update, &suc.update) < 0)
+       if (filter_options.choice && !opt.init) {
+               usage_with_options(git_submodule_helper_usage,
+                                  module_update_options);
+       }
+
+       opt.filter_options = &filter_options;
+
+       if (opt.update_default)
+               if (parse_submodule_update_strategy(opt.update_default,
+                                                   &opt.update_strategy) < 0)
                        die(_("bad value for update parameter"));
 
-       if (module_list_compute(argc, argv, prefix, &pathspec, &suc.list) < 0)
+       if (module_list_compute(argc, argv, prefix, &pathspec, &opt.list) < 0) {
+               list_objects_filter_release(&filter_options);
                return 1;
+       }
 
        if (pathspec.nr)
-               suc.warn_if_uninitialized = 1;
-
-       return update_submodules(&suc);
-}
-
-static int run_update_procedure(int argc, const char **argv, const char *prefix)
-{
-       int force = 0, quiet = 0, nofetch = 0, just_cloned = 0;
-       char *prefixed_path, *update = NULL;
-       struct update_data update_data = UPDATE_DATA_INIT;
-
-       struct option options[] = {
-               OPT__QUIET(&quiet, N_("suppress output for update by rebase or merge")),
-               OPT__FORCE(&force, N_("force checkout updates"), 0),
-               OPT_BOOL('N', "no-fetch", &nofetch,
-                        N_("don't fetch new objects from the remote site")),
-               OPT_BOOL(0, "just-cloned", &just_cloned,
-                        N_("overrides update mode in case the repository is a fresh clone")),
-               OPT_INTEGER(0, "depth", &update_data.depth, N_("depth for shallow fetch")),
-               OPT_STRING(0, "prefix", &prefix,
-                          N_("path"),
-                          N_("path into the working tree")),
-               OPT_STRING(0, "update", &update,
-                          N_("string"),
-                          N_("rebase, merge, checkout or none")),
-               OPT_STRING(0, "recursive-prefix", &update_data.recursive_prefix, N_("path"),
-                          N_("path into the working tree, across nested "
-                             "submodule boundaries")),
-               OPT_CALLBACK_F(0, "oid", &update_data.oid, N_("sha1"),
-                              N_("SHA1 expected by superproject"), PARSE_OPT_NONEG,
-                              parse_opt_object_id),
-               OPT_CALLBACK_F(0, "suboid", &update_data.suboid, N_("subsha1"),
-                              N_("SHA1 of submodule's HEAD"), PARSE_OPT_NONEG,
-                              parse_opt_object_id),
-               OPT_END()
-       };
-
-       const char *const usage[] = {
-               N_("git submodule--helper run-update-procedure [<options>] <path>"),
-               NULL
-       };
-
-       argc = parse_options(argc, argv, prefix, options, usage, 0);
-
-       if (argc != 1)
-               usage_with_options(usage, options);
-
-       update_data.force = !!force;
-       update_data.quiet = !!quiet;
-       update_data.nofetch = !!nofetch;
-       update_data.just_cloned = !!just_cloned;
-       update_data.sm_path = argv[0];
-
-       if (update_data.recursive_prefix)
-               prefixed_path = xstrfmt("%s%s", update_data.recursive_prefix, update_data.sm_path);
-       else
-               prefixed_path = xstrdup(update_data.sm_path);
-
-       update_data.displaypath = get_submodule_displaypath(prefixed_path, prefix);
-
-       determine_submodule_update_strategy(the_repository, update_data.just_cloned,
-                                           update_data.sm_path, update,
-                                           &update_data.update_strategy);
-
-       free(prefixed_path);
+               opt.warn_if_uninitialized = 1;
 
-       if (!oideq(&update_data.oid, &update_data.suboid) || update_data.force)
-               return do_run_update_procedure(&update_data);
+       if (opt.init) {
+               struct module_list list = MODULE_LIST_INIT;
+               struct init_cb info = INIT_CB_INIT;
 
-       return 3;
-}
-
-static int resolve_relative_path(int argc, const char **argv, const char *prefix)
-{
-       struct strbuf sb = STRBUF_INIT;
-       if (argc != 3)
-               die("submodule--helper relative-path takes exactly 2 arguments, got %d", argc);
-
-       printf("%s", relative_path(argv[1], argv[2], &sb));
-       strbuf_release(&sb);
-       return 0;
-}
-
-static const char *remote_submodule_branch(const char *path)
-{
-       const struct submodule *sub;
-       const char *branch = NULL;
-       char *key;
-
-       sub = submodule_from_path(the_repository, null_oid(), path);
-       if (!sub)
-               return NULL;
-
-       key = xstrfmt("submodule.%s.branch", sub->name);
-       if (repo_config_get_string_tmp(the_repository, key, &branch))
-               branch = sub->branch;
-       free(key);
-
-       if (!branch)
-               return "HEAD";
-
-       if (!strcmp(branch, ".")) {
-               const char *refname = resolve_ref_unsafe("HEAD", 0, NULL, NULL);
+               if (module_list_compute(argc, argv, opt.prefix,
+                                       &pathspec, &list) < 0)
+                       return 1;
 
-               if (!refname)
-                       die(_("No such ref: %s"), "HEAD");
+               /*
+                * If there are no path args and submodule.active is set then,
+                * by default, only initialize 'active' modules.
+                */
+               if (!argc && git_config_get_value_multi("submodule.active"))
+                       module_list_active(&list);
 
-               /* detached HEAD */
-               if (!strcmp(refname, "HEAD"))
-                       die(_("Submodule (%s) branch configured to inherit "
-                             "branch from superproject, but the superproject "
-                             "is not on any branch"), sub->name);
+               info.prefix = opt.prefix;
+               info.superprefix = opt.recursive_prefix;
+               if (opt.quiet)
+                       info.flags |= OPT_QUIET;
 
-               if (!skip_prefix(refname, "refs/heads/", &refname))
-                       die(_("Expecting a full ref name, got %s"), refname);
-               return refname;
+               for_each_listed_submodule(&list, init_submodule_cb, &info);
        }
 
-       return branch;
-}
-
-static int resolve_remote_submodule_branch(int argc, const char **argv,
-               const char *prefix)
-{
-       const char *ret;
-       struct strbuf sb = STRBUF_INIT;
-       if (argc != 2)
-               die("submodule--helper remote-branch takes exactly one arguments, got %d", argc);
-
-       ret = remote_submodule_branch(argv[1]);
-       if (!ret)
-               die("submodule %s doesn't exist", argv[1]);
-
-       printf("%s", ret);
-       strbuf_release(&sb);
-       return 0;
+       ret = update_submodules(&opt);
+       list_objects_filter_release(&filter_options);
+       return ret;
 }
 
 static int push_check(int argc, const char **argv, const char *prefix)
@@ -2766,40 +2878,6 @@ static int push_check(int argc, const char **argv, const char *prefix)
        return 0;
 }
 
-static int ensure_core_worktree(int argc, const char **argv, const char *prefix)
-{
-       const char *path;
-       const char *cw;
-       struct repository subrepo;
-
-       if (argc != 2)
-               BUG("submodule--helper ensure-core-worktree <path>");
-
-       path = argv[1];
-
-       if (repo_submodule_init(&subrepo, the_repository, path, null_oid()))
-               die(_("could not get a repository handle for submodule '%s'"), path);
-
-       if (!repo_config_get_string_tmp(&subrepo, "core.worktree", &cw)) {
-               char *cfg_file, *abs_path;
-               const char *rel_path;
-               struct strbuf sb = STRBUF_INIT;
-
-               cfg_file = repo_git_path(&subrepo, "config");
-
-               abs_path = absolute_pathdup(path);
-               rel_path = relative_path(abs_path, subrepo.gitdir, &sb);
-
-               git_config_set_in_file(cfg_file, "core.worktree", rel_path);
-
-               free(cfg_file);
-               free(abs_path);
-               strbuf_release(&sb);
-       }
-
-       return 0;
-}
-
 static int absorb_git_dirs(int argc, const char **argv, const char *prefix)
 {
        int i;
@@ -2883,7 +2961,7 @@ static int module_config(int argc, const char **argv, const char *prefix)
        const char *const git_submodule_helper_usage[] = {
                N_("git submodule--helper config <name> [<value>]"),
                N_("git submodule--helper config --unset <name>"),
-               N_("git submodule--helper config --check-writeable"),
+               "git submodule--helper config --check-writeable",
                NULL
        };
 
@@ -2984,6 +3062,44 @@ static int module_set_branch(int argc, const char **argv, const char *prefix)
        return !!ret;
 }
 
+static int module_create_branch(int argc, const char **argv, const char *prefix)
+{
+       enum branch_track track;
+       int quiet = 0, force = 0, reflog = 0, dry_run = 0;
+
+       struct option options[] = {
+               OPT__QUIET(&quiet, N_("print only error messages")),
+               OPT__FORCE(&force, N_("force creation"), 0),
+               OPT_BOOL(0, "create-reflog", &reflog,
+                        N_("create the branch's reflog")),
+               OPT_CALLBACK_F('t', "track",  &track, "(direct|inherit)",
+                       N_("set branch tracking configuration"),
+                       PARSE_OPT_OPTARG,
+                       parse_opt_tracking_mode),
+               OPT__DRY_RUN(&dry_run,
+                            N_("show whether the branch would be created")),
+               OPT_END()
+       };
+       const char *const usage[] = {
+               N_("git submodule--helper create-branch [-f|--force] [--create-reflog] [-q|--quiet] [-t|--track] [-n|--dry-run] <name> <start-oid> <start-name>"),
+               NULL
+       };
+
+       git_config(git_default_config, NULL);
+       track = git_branch_track;
+       argc = parse_options(argc, argv, prefix, options, usage, 0);
+
+       if (argc != 3)
+               usage_with_options(usage, options);
+
+       if (!quiet && !dry_run)
+               printf_ln(_("creating branch '%s'"), argv[0]);
+
+       create_branches_recursively(the_repository, argv[0], argv[1], argv[2],
+                                   force, reflog, quiet, track, dry_run);
+       return 0;
+}
+
 struct add_data {
        const char *prefix;
        const char *branch;
@@ -3248,6 +3364,7 @@ static int module_add(int argc, const char **argv, const char *prefix)
 {
        int force = 0, quiet = 0, progress = 0, dissociate = 0;
        struct add_data add_data = ADD_DATA_INIT;
+       char *to_free = NULL;
 
        struct option options[] = {
                OPT_STRING('b', "branch", &add_data.branch, N_("branch"),
@@ -3299,7 +3416,8 @@ static int module_add(int argc, const char **argv, const char *prefix)
                              "of the working tree"));
 
                /* dereference source url relative to parent's url */
-               add_data.realrepo = resolve_relative_url(add_data.repo, NULL, 1);
+               to_free = resolve_relative_url(add_data.repo, NULL, 1);
+               add_data.realrepo = to_free;
        } else if (is_dir_sep(add_data.repo[0]) || strchr(add_data.repo, ':')) {
                add_data.realrepo = add_data.repo;
        } else {
@@ -3352,6 +3470,7 @@ static int module_add(int argc, const char **argv, const char *prefix)
        }
        configure_added_submodule(&add_data);
        free(add_data.sm_path);
+       free(to_free);
 
        return 0;
 }
@@ -3369,20 +3488,14 @@ static struct cmd_struct commands[] = {
        {"name", module_name, 0},
        {"clone", module_clone, 0},
        {"add", module_add, SUPPORT_SUPER_PREFIX},
-       {"update-module-mode", module_update_module_mode, 0},
-       {"update-clone", update_clone, 0},
-       {"run-update-procedure", run_update_procedure, 0},
-       {"ensure-core-worktree", ensure_core_worktree, 0},
-       {"relative-path", resolve_relative_path, 0},
+       {"update", module_update, 0},
        {"resolve-relative-url-test", resolve_relative_url_test, 0},
        {"foreach", module_foreach, SUPPORT_SUPER_PREFIX},
        {"init", module_init, SUPPORT_SUPER_PREFIX},
        {"status", module_status, SUPPORT_SUPER_PREFIX},
-       {"print-default-remote", print_default_remote, 0},
        {"sync", module_sync, SUPPORT_SUPER_PREFIX},
        {"deinit", module_deinit, 0},
        {"summary", module_summary, SUPPORT_SUPER_PREFIX},
-       {"remote-branch", resolve_remote_submodule_branch, 0},
        {"push-check", push_check, 0},
        {"absorb-git-dirs", absorb_git_dirs, SUPPORT_SUPER_PREFIX},
        {"is-active", is_active, 0},
@@ -3390,6 +3503,7 @@ static struct cmd_struct commands[] = {
        {"config", module_config, 0},
        {"set-url", module_set_url, 0},
        {"set-branch", module_set_branch, 0},
+       {"create-branch", module_create_branch, 0},
 };
 
 int cmd_submodule__helper(int argc, const char **argv, const char *prefix)
index 134b3f1edf06246aed1eed1e5890a27fff22a3bf..e5a8f856936a1e494d91aa8ebfa2ff9f64f375d8 100644 (file)
@@ -20,6 +20,7 @@
 #include "oid-array.h"
 #include "column.h"
 #include "ref-filter.h"
+#include "date.h"
 
 static const char * const git_tag_usage[] = {
        N_("git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]\n"
@@ -238,7 +239,7 @@ static int build_tag_object(struct strbuf *buf, int sign, struct object_id *resu
 {
        if (sign && do_sign(buf) < 0)
                return error(_("unable to sign the tag"));
-       if (write_object_file(buf->buf, buf->len, tag_type, result) < 0)
+       if (write_object_file(buf->buf, buf->len, OBJ_TAG, result) < 0)
                return error(_("unable to write tag file"));
        return 0;
 }
index 4a9466295ba10de5752cca92fa08b1a28461777b..dbeb0680a5856300e3a14db9387193a5fe65a0fc 100644 (file)
@@ -177,7 +177,7 @@ static void write_cached_object(struct object *obj, struct obj_buffer *obj_buf)
        struct object_id oid;
 
        if (write_object_file(obj_buf->buffer, obj_buf->size,
-                             type_name(obj->type), &oid) < 0)
+                             obj->type, &oid) < 0)
                die("failed to write object %s", oid_to_hex(&obj->oid));
        obj->flags |= FLAG_WRITTEN;
 }
@@ -243,7 +243,7 @@ static void write_object(unsigned nr, enum object_type type,
                         void *buf, unsigned long size)
 {
        if (!strict) {
-               if (write_object_file(buf, size, type_name(type),
+               if (write_object_file(buf, size, type,
                                      &obj_list[nr].oid) < 0)
                        die("failed to write object");
                added_object(nr, type, buf, size);
@@ -251,7 +251,7 @@ static void write_object(unsigned nr, enum object_type type,
                obj_list[nr].obj = NULL;
        } else if (type == OBJ_BLOB) {
                struct blob *blob;
-               if (write_object_file(buf, size, type_name(type),
+               if (write_object_file(buf, size, type,
                                      &obj_list[nr].oid) < 0)
                        die("failed to write object");
                added_object(nr, type, buf, size);
@@ -266,7 +266,7 @@ static void write_object(unsigned nr, enum object_type type,
        } else {
                struct object *obj;
                int eaten;
-               hash_object_file(the_hash_algo, buf, size, type_name(type),
+               hash_object_file(the_hash_algo, buf, size, type,
                                 &obj_list[nr].oid);
                added_object(nr, type, buf, size);
                obj = parse_object_buffer(the_repository, &obj_list[nr].oid,
index 187203e8bb53cbeaf80d2f4b89c04134a2a5c95f..876112abb21a4dbc6f222dc8da8838be4819de3d 100644 (file)
@@ -606,7 +606,7 @@ static struct cache_entry *read_one_ent(const char *which,
                        error("%s: not in %s branch.", path, which);
                return NULL;
        }
-       if (mode == S_IFDIR) {
+       if (!the_index.sparse_index && mode == S_IFDIR) {
                if (which)
                        error("%s: not a blob in %s branch.", path, which);
                return NULL;
@@ -743,8 +743,6 @@ static int do_reupdate(int ac, const char **av,
                 */
                has_head = 0;
  redo:
-       /* TODO: audit for interaction with sparse-index. */
-       ensure_full_index(&the_index);
        for (pos = 0; pos < active_nr; pos++) {
                const struct cache_entry *ce = active_cache[pos];
                struct cache_entry *old = NULL;
@@ -761,6 +759,16 @@ static int do_reupdate(int ac, const char **av,
                        discard_cache_entry(old);
                        continue; /* unchanged */
                }
+
+               /* At this point, we know the contents of the sparse directory are
+                * modified with respect to HEAD, so we expand the index and restart
+                * to process each path individually
+                */
+               if (S_ISSPARSEDIR(ce->ce_mode)) {
+                       ensure_full_index(&the_index);
+                       goto redo;
+               }
+
                /* Be careful.  The working tree may not have the
                 * path anymore, in which case, under 'allow_remove',
                 * or worse yet 'allow_replace', active_nr may decrease.
@@ -787,6 +795,17 @@ static int refresh(struct refresh_params *o, unsigned int flag)
        setup_work_tree();
        read_cache();
        *o->has_errors |= refresh_cache(o->flags | flag);
+       if (has_racy_timestamp(&the_index)) {
+               /*
+                * Even if nothing else has changed, updating the file
+                * increases the chance that racy timestamps become
+                * non-racy, helping future run-time performance.
+                * We do that even in case of "errors" returned by
+                * refresh_cache() as these are no actual errors.
+                * cmd_status() does the same.
+                */
+               active_cache_changed |= SOMETHING_CHANGED;
+       }
        return 0;
 }
 
@@ -1077,6 +1096,9 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
 
        git_config(git_default_config, NULL);
 
+       prepare_repo_settings(r);
+       the_repository->settings.command_requires_full_index = 0;
+
        /* we will diagnose later if it turns out that we need to update it */
        newfd = hold_locked_index(&lock_file, 0);
        if (newfd < 0)
@@ -1214,14 +1236,17 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
        }
 
        if (fsmonitor > 0) {
-               if (git_config_get_fsmonitor() == 0)
+               enum fsmonitor_mode fsm_mode = fsm_settings__get_mode(r);
+               if (fsm_mode == FSMONITOR_MODE_DISABLED) {
                        warning(_("core.fsmonitor is unset; "
                                "set it if you really want to "
                                "enable fsmonitor"));
+               }
                add_fsmonitor(&the_index);
                report(_("fsmonitor enabled"));
        } else if (!fsmonitor) {
-               if (git_config_get_fsmonitor() == 1)
+               enum fsmonitor_mode fsm_mode = fsm_settings__get_mode(r);
+               if (fsm_mode > FSMONITOR_MODE_DISABLED)
                        warning(_("core.fsmonitor is set; "
                                "remove it if you really want to "
                                "disable fsmonitor"));
index 4321a344567ed83e6828be41eb150d90c4d7756a..880fffec58750ea52b15618341f6189bd5a878db 100644 (file)
@@ -4,7 +4,7 @@
 #include "parse-options.h"
 
 static const char * const update_server_info_usage[] = {
-       N_("git update-server-info [--force]"),
+       "git update-server-info [--force]",
        NULL
 };
 
index 2838254f7f2e10f780ea8608d591c6fd8e8f5521..8b32cd16515d75d5d6abb360ff5d1e32f2158ca5 100644 (file)
@@ -22,6 +22,7 @@ static const char * const worktree_usage[] = {
        N_("git worktree move <worktree> <new-path>"),
        N_("git worktree prune [<options>]"),
        N_("git worktree remove [<options>] <worktree>"),
+       N_("git worktree repair [<path>...]"),
        N_("git worktree unlock <path>"),
        NULL
 };
@@ -236,6 +237,74 @@ static void check_candidate_path(const char *path,
                die(_("'%s' is a missing but already registered worktree;\nuse '%s -f' to override, or 'prune' or 'remove' to clear"), path, cmd);
 }
 
+static void copy_sparse_checkout(const char *worktree_git_dir)
+{
+       char *from_file = git_pathdup("info/sparse-checkout");
+       char *to_file = xstrfmt("%s/info/sparse-checkout", worktree_git_dir);
+
+       if (file_exists(from_file)) {
+               if (safe_create_leading_directories(to_file) ||
+                       copy_file(to_file, from_file, 0666))
+                       error(_("failed to copy '%s' to '%s'; sparse-checkout may not work correctly"),
+                               from_file, to_file);
+       }
+
+       free(from_file);
+       free(to_file);
+}
+
+static void copy_filtered_worktree_config(const char *worktree_git_dir)
+{
+       char *from_file = git_pathdup("config.worktree");
+       char *to_file = xstrfmt("%s/config.worktree", worktree_git_dir);
+
+       if (file_exists(from_file)) {
+               struct config_set cs = { { 0 } };
+               const char *core_worktree;
+               int bare;
+
+               if (safe_create_leading_directories(to_file) ||
+                       copy_file(to_file, from_file, 0666)) {
+                       error(_("failed to copy worktree config from '%s' to '%s'"),
+                               from_file, to_file);
+                       goto worktree_copy_cleanup;
+               }
+
+               git_configset_init(&cs);
+               git_configset_add_file(&cs, from_file);
+
+               if (!git_configset_get_bool(&cs, "core.bare", &bare) &&
+                       bare &&
+                       git_config_set_multivar_in_file_gently(
+                               to_file, "core.bare", NULL, "true", 0))
+                       error(_("failed to unset '%s' in '%s'"),
+                               "core.bare", to_file);
+               if (!git_configset_get_value(&cs, "core.worktree", &core_worktree) &&
+                       git_config_set_in_file_gently(to_file,
+                                                       "core.worktree", NULL))
+                       error(_("failed to unset '%s' in '%s'"),
+                               "core.worktree", to_file);
+
+               git_configset_clear(&cs);
+       }
+
+worktree_copy_cleanup:
+       free(from_file);
+       free(to_file);
+}
+
+static int checkout_worktree(const struct add_opts *opts,
+                            struct strvec *child_env)
+{
+       struct child_process cp = CHILD_PROCESS_INIT;
+       cp.git_cmd = 1;
+       strvec_pushl(&cp.args, "reset", "--hard", "--no-recurse-submodules", NULL);
+       if (opts->quiet)
+               strvec_push(&cp.args, "--quiet");
+       strvec_pushv(&cp.env_array, child_env->v);
+       return run_command(&cp);
+}
+
 static int add_worktree(const char *path, const char *refname,
                        const struct add_opts *opts)
 {
@@ -335,6 +404,21 @@ static int add_worktree(const char *path, const char *refname,
        strbuf_addf(&sb, "%s/commondir", sb_repo.buf);
        write_file(sb.buf, "../..");
 
+       /*
+        * If the current worktree has sparse-checkout enabled, then copy
+        * the sparse-checkout patterns from the current worktree.
+        */
+       if (core_apply_sparse_checkout)
+               copy_sparse_checkout(sb_repo.buf);
+
+       /*
+        * If we are using worktree config, then copy all current config
+        * values from the current worktree into the new one, that way the
+        * new worktree behaves the same as this one.
+        */
+       if (repository_format_worktree_config)
+               copy_filtered_worktree_config(sb_repo.buf);
+
        strvec_pushf(&child_env, "%s=%s", GIT_DIR_ENVIRONMENT, sb_git.buf);
        strvec_pushf(&child_env, "%s=%s", GIT_WORK_TREE_ENVIRONMENT, path);
        cp.git_cmd = 1;
@@ -354,17 +438,9 @@ static int add_worktree(const char *path, const char *refname,
        if (ret)
                goto done;
 
-       if (opts->checkout) {
-               struct child_process cp = CHILD_PROCESS_INIT;
-               cp.git_cmd = 1;
-               strvec_pushl(&cp.args, "reset", "--hard", "--no-recurse-submodules", NULL);
-               if (opts->quiet)
-                       strvec_push(&cp.args, "--quiet");
-               strvec_pushv(&cp.env_array, child_env.v);
-               ret = run_command(&cp);
-               if (ret)
-                       goto done;
-       }
+       if (opts->checkout &&
+           (ret = checkout_worktree(opts, &child_env)))
+               goto done;
 
        is_junk = 0;
        FREE_AND_NULL(junk_work_tree);
@@ -382,21 +458,17 @@ done:
         * is_junk is cleared, but do return appropriate code when hook fails.
         */
        if (!ret && opts->checkout) {
-               const char *hook = find_hook("post-checkout");
-               if (hook) {
-                       const char *env[] = { "GIT_DIR", "GIT_WORK_TREE", NULL };
-                       struct child_process cp = CHILD_PROCESS_INIT;
-                       cp.no_stdin = 1;
-                       cp.stdout_to_stderr = 1;
-                       cp.dir = path;
-                       strvec_pushv(&cp.env_array, env);
-                       cp.trace2_hook_name = "post-checkout";
-                       strvec_pushl(&cp.args, absolute_path(hook),
-                                    oid_to_hex(null_oid()),
-                                    oid_to_hex(&commit->object.oid),
-                                    "1", NULL);
-                       ret = run_command(&cp);
-               }
+               struct run_hooks_opt opt = RUN_HOOKS_OPT_INIT;
+
+               strvec_pushl(&opt.env, "GIT_DIR", "GIT_WORK_TREE", NULL);
+               strvec_pushl(&opt.args,
+                            oid_to_hex(null_oid()),
+                            oid_to_hex(&commit->object.oid),
+                            "1",
+                            NULL);
+               opt.dir = path;
+
+               ret = run_hooks_opt("post-checkout", &opt);
        }
 
        strvec_clear(&child_env);
@@ -579,35 +651,37 @@ static int add(int ac, const char **av, const char *prefix)
        return add_worktree(path, branch, &opts);
 }
 
-static void show_worktree_porcelain(struct worktree *wt)
+static void show_worktree_porcelain(struct worktree *wt, int line_terminator)
 {
        const char *reason;
 
-       printf("worktree %s\n", wt->path);
+       printf("worktree %s%c", wt->path, line_terminator);
        if (wt->is_bare)
-               printf("bare\n");
+               printf("bare%c", line_terminator);
        else {
-               printf("HEAD %s\n", oid_to_hex(&wt->head_oid));
+               printf("HEAD %s%c", oid_to_hex(&wt->head_oid), line_terminator);
                if (wt->is_detached)
-                       printf("detached\n");
+                       printf("detached%c", line_terminator);
                else if (wt->head_ref)
-                       printf("branch %s\n", wt->head_ref);
+                       printf("branch %s%c", wt->head_ref, line_terminator);
        }
 
        reason = worktree_lock_reason(wt);
-       if (reason && *reason) {
-               struct strbuf sb = STRBUF_INIT;
-               quote_c_style(reason, &sb, NULL, 0);
-               printf("locked %s\n", sb.buf);
-               strbuf_release(&sb);
-       } else if (reason)
-               printf("locked\n");
+       if (reason) {
+               fputs("locked", stdout);
+               if (*reason) {
+                       fputc(' ', stdout);
+                       write_name_quoted(reason, stdout, line_terminator);
+               } else {
+                       fputc(line_terminator, stdout);
+               }
+       }
 
        reason = worktree_prune_reason(wt, expire);
        if (reason)
-               printf("prunable %s\n", reason);
+               printf("prunable %s%c", reason, line_terminator);
 
-       printf("\n");
+       fputc(line_terminator, stdout);
 }
 
 static void show_worktree(struct worktree *wt, int path_maxlen, int abbrev_len)
@@ -685,12 +759,15 @@ static void pathsort(struct worktree **wt)
 static int list(int ac, const char **av, const char *prefix)
 {
        int porcelain = 0;
+       int line_terminator = '\n';
 
        struct option options[] = {
                OPT_BOOL(0, "porcelain", &porcelain, N_("machine-readable output")),
                OPT__VERBOSE(&verbose, N_("show extended annotations and reasons, if available")),
                OPT_EXPIRY_DATE(0, "expire", &expire,
                                N_("add 'prunable' annotation to worktrees older than <time>")),
+               OPT_SET_INT('z', NULL, &line_terminator,
+                           N_("terminate records with a NUL character"), '\0'),
                OPT_END()
        };
 
@@ -700,6 +777,8 @@ static int list(int ac, const char **av, const char *prefix)
                usage_with_options(worktree_usage, options);
        else if (verbose && porcelain)
                die(_("options '%s' and '%s' cannot be used together"), "--verbose", "--porcelain");
+       else if (!line_terminator && !porcelain)
+               die(_("the option '%s' requires '%s'"), "-z", "--porcelain");
        else {
                struct worktree **worktrees = get_worktrees();
                int path_maxlen = 0, abbrev = DEFAULT_ABBREV, i;
@@ -712,7 +791,8 @@ static int list(int ac, const char **av, const char *prefix)
 
                for (i = 0; worktrees[i]; i++) {
                        if (porcelain)
-                               show_worktree_porcelain(worktrees[i]);
+                               show_worktree_porcelain(worktrees[i],
+                                                       line_terminator);
                        else
                                show_worktree(worktrees[i], path_maxlen, abbrev);
                }
index 8785b2ac80699255ae8abd0801922ba025235309..6d6c37171c9578b45cc41587f9cdfecb75ebc826 100644 (file)
@@ -53,9 +53,10 @@ static void finish_bulk_checkin(struct bulk_checkin_state *state)
                unlink(state->pack_tmp_name);
                goto clear_exit;
        } else if (state->nr_written == 1) {
-               finalize_hashfile(state->f, hash, CSUM_HASH_IN_STREAM | CSUM_FSYNC | CSUM_CLOSE);
+               finalize_hashfile(state->f, hash, FSYNC_COMPONENT_PACK,
+                                 CSUM_HASH_IN_STREAM | CSUM_FSYNC | CSUM_CLOSE);
        } else {
-               int fd = finalize_hashfile(state->f, hash, 0);
+               int fd = finalize_hashfile(state->f, hash, FSYNC_COMPONENT_PACK, 0);
                fixup_pack_header_footer(fd, hash, state->pack_tmp_name,
                                         state->nr_written, hash,
                                         state->offset);
@@ -220,8 +221,8 @@ static int deflate_to_pack(struct bulk_checkin_state *state,
        if (seekback == (off_t) -1)
                return error("cannot find the current offset");
 
-       header_len = xsnprintf((char *)obuf, sizeof(obuf), "%s %" PRIuMAX,
-                              type_name(type), (uintmax_t)size) + 1;
+       header_len = format_object_header((char *)obuf, sizeof(obuf),
+                                         type, size);
        the_hash_algo->init_fn(&ctx);
        the_hash_algo->update_fn(&ctx, obuf, header_len);
 
index a0bb687b0f4ea30d44883dcb9d4de5bf1e5963ea..d50cfb5aa7e9c28afc121f9bf27499518a3fee37 100644 (file)
--- a/bundle.c
+++ b/bundle.c
@@ -11,7 +11,7 @@
 #include "run-command.h"
 #include "refs.h"
 #include "strvec.h"
-
+#include "list-objects-filter-options.h"
 
 static const char v2_bundle_signature[] = "# v2 git bundle\n";
 static const char v3_bundle_signature[] = "# v3 git bundle\n";
@@ -33,6 +33,7 @@ void bundle_header_release(struct bundle_header *header)
 {
        string_list_clear(&header->prerequisites, 1);
        string_list_clear(&header->references, 1);
+       list_objects_filter_release(&header->filter);
 }
 
 static int parse_capability(struct bundle_header *header, const char *capability)
@@ -45,6 +46,10 @@ static int parse_capability(struct bundle_header *header, const char *capability
                header->hash_algo = &hash_algos[algo];
                return 0;
        }
+       if (skip_prefix(capability, "filter=", &arg)) {
+               parse_list_objects_filter(&header->filter, arg);
+               return 0;
+       }
        return error(_("unknown capability '%s'"), capability);
 }
 
@@ -220,6 +225,8 @@ int verify_bundle(struct repository *r,
        req_nr = revs.pending.nr;
        setup_revisions(2, argv, &revs, NULL);
 
+       list_objects_filter_copy(&revs.filter, &header->filter);
+
        if (prepare_revision_walk(&revs))
                die(_("revision walk setup failed"));
 
@@ -255,20 +262,27 @@ int verify_bundle(struct repository *r,
 
                r = &header->references;
                printf_ln(Q_("The bundle contains this ref:",
-                            "The bundle contains these %d refs:",
+                            "The bundle contains these %"PRIuMAX" refs:",
                             r->nr),
-                         r->nr);
+                         (uintmax_t)r->nr);
                list_refs(r, 0, NULL);
+
                r = &header->prerequisites;
                if (!r->nr) {
                        printf_ln(_("The bundle records a complete history."));
                } else {
                        printf_ln(Q_("The bundle requires this ref:",
-                                    "The bundle requires these %d refs:",
+                                    "The bundle requires these %"PRIuMAX" refs:",
                                     r->nr),
-                                 r->nr);
+                                 (uintmax_t)r->nr);
                        list_refs(r, 0, NULL);
                }
+
+               printf_ln("The bundle uses this hash algorithm: %s",
+                         header->hash_algo->name);
+               if (header->filter.choice)
+                       printf_ln("The bundle uses this filter: %s",
+                                 list_objects_filter_spec(&header->filter));
        }
        return ret;
 }
@@ -319,6 +333,9 @@ static int write_pack_data(int bundle_fd, struct rev_info *revs, struct strvec *
                     "--stdout", "--thin", "--delta-base-offset",
                     NULL);
        strvec_pushv(&pack_objects.args, pack_options->v);
+       if (revs->filter.choice)
+               strvec_pushf(&pack_objects.args, "--filter=%s",
+                            list_objects_filter_spec(&revs->filter));
        pack_objects.in = -1;
        pack_objects.out = bundle_fd;
        pack_objects.git_cmd = 1;
@@ -486,10 +503,37 @@ int create_bundle(struct repository *r, const char *path,
        int bundle_to_stdout;
        int ref_count = 0;
        struct rev_info revs, revs_copy;
-       int min_version = the_hash_algo == &hash_algos[GIT_HASH_SHA1] ? 2 : 3;
+       int min_version = 2;
        struct bundle_prerequisites_info bpi;
        int i;
 
+       /* init revs to list objects for pack-objects later */
+       save_commit_buffer = 0;
+       repo_init_revisions(r, &revs, NULL);
+
+       /*
+        * Pre-initialize the '--objects' flag so we can parse a
+        * --filter option successfully.
+        */
+       revs.tree_objects = revs.blob_objects = 1;
+
+       argc = setup_revisions(argc, argv, &revs, NULL);
+
+       /*
+        * Reasons to require version 3:
+        *
+        * 1. @object-format is required because our hash algorithm is not
+        *    SHA1.
+        * 2. @filter is required because we parsed an object filter.
+        */
+       if (the_hash_algo != &hash_algos[GIT_HASH_SHA1] || revs.filter.choice)
+               min_version = 3;
+
+       if (argc > 1) {
+               error(_("unrecognized argument: %s"), argv[1]);
+               goto err;
+       }
+
        bundle_to_stdout = !strcmp(path, "-");
        if (bundle_to_stdout)
                bundle_fd = 1;
@@ -512,17 +556,14 @@ int create_bundle(struct repository *r, const char *path,
                write_or_die(bundle_fd, capability, strlen(capability));
                write_or_die(bundle_fd, the_hash_algo->name, strlen(the_hash_algo->name));
                write_or_die(bundle_fd, "\n", 1);
-       }
 
-       /* init revs to list objects for pack-objects later */
-       save_commit_buffer = 0;
-       repo_init_revisions(r, &revs, NULL);
-
-       argc = setup_revisions(argc, argv, &revs, NULL);
-
-       if (argc > 1) {
-               error(_("unrecognized argument: %s"), argv[1]);
-               goto err;
+               if (revs.filter.choice) {
+                       const char *value = expand_list_objects_filter_spec(&revs.filter);
+                       capability = "@filter=";
+                       write_or_die(bundle_fd, capability, strlen(capability));
+                       write_or_die(bundle_fd, value, strlen(value));
+                       write_or_die(bundle_fd, "\n", 1);
+               }
        }
 
        /* save revs.pending in revs_copy for later use */
@@ -544,6 +585,12 @@ int create_bundle(struct repository *r, const char *path,
                die("revision walk setup failed");
        bpi.fd = bundle_fd;
        bpi.pending = &revs_copy.pending;
+
+       /*
+        * Remove any object walking here. We only care about commits and
+        * tags here. The revs_copy has the right instances of these values.
+        */
+       revs.blob_objects = revs.tree_objects = 0;
        traverse_commit_list(&revs, write_bundle_prerequisites, NULL, &bpi);
        object_array_remove_duplicates(&revs_copy.pending);
 
@@ -574,6 +621,10 @@ int unbundle(struct repository *r, struct bundle_header *header,
        struct child_process ip = CHILD_PROCESS_INIT;
        strvec_pushl(&ip.args, "index-pack", "--fix-thin", "--stdin", NULL);
 
+       /* If there is a filter, then we need to create the promisor pack. */
+       if (header->filter.choice)
+               strvec_push(&ip.args, "--promisor=from-bundle");
+
        if (extra_index_pack_args) {
                strvec_pushv(&ip.args, extra_index_pack_args->v);
                strvec_clear(extra_index_pack_args);
index 06009fe6b1f00b939350ba88ba7bf8f72565de4c..7fef2108f436861726ca4efb6937f9d434e61d7e 100644 (file)
--- a/bundle.h
+++ b/bundle.h
@@ -4,12 +4,14 @@
 #include "strvec.h"
 #include "cache.h"
 #include "string-list.h"
+#include "list-objects-filter-options.h"
 
 struct bundle_header {
        unsigned version;
        struct string_list prerequisites;
        struct string_list references;
        const struct git_hash_algo *hash_algo;
+       struct list_objects_filter_options filter;
 };
 
 #define BUNDLE_HEADER_INIT \
index 65ca99336136f1f50695f06c6b404859b13cc0a3..6752f69d515e12f7bd8c98ac2e27548b68da46d5 100644 (file)
@@ -432,15 +432,15 @@ static int update_one(struct cache_tree *it,
        if (repair) {
                struct object_id oid;
                hash_object_file(the_hash_algo, buffer.buf, buffer.len,
-                                tree_type, &oid);
+                                OBJ_TREE, &oid);
                if (has_object_file_with_flags(&oid, OBJECT_INFO_SKIP_FETCH_OBJECT))
                        oidcpy(&it->oid, &oid);
                else
                        to_invalidate = 1;
        } else if (dryrun) {
                hash_object_file(the_hash_algo, buffer.buf, buffer.len,
-                                tree_type, &it->oid);
-       } else if (write_object_file_flags(buffer.buf, buffer.len, tree_type,
+                                OBJ_TREE, &it->oid);
+       } else if (write_object_file_flags(buffer.buf, buffer.len, OBJ_TREE,
                                           &it->oid, flags & WRITE_TREE_SILENT
                                           ? HASH_SILENT : 0)) {
                strbuf_release(&buffer);
@@ -948,7 +948,7 @@ static int verify_one(struct repository *r,
                strbuf_addf(&tree_buf, "%o %.*s%c", mode, entlen, name, '\0');
                strbuf_add(&tree_buf, oid->hash, r->hash_algo->rawsz);
        }
-       hash_object_file(r->hash_algo, tree_buf.buf, tree_buf.len, tree_type,
+       hash_object_file(r->hash_algo, tree_buf.buf, tree_buf.len, OBJ_TREE,
                         &new_oid);
        if (!oideq(&new_oid, &it->oid))
                BUG("cache-tree for path %.*s does not match. "
diff --git a/cache.h b/cache.h
index 281f00ab1b161dc71d0bcdae91222e9429ba0342..595582becc83a5ffc1dfcc19eb59123d772b44c4 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -18,7 +18,6 @@
 #include "repository.h"
 #include "mem-pool.h"
 
-#include <zlib.h>
 typedef struct git_zstream {
        z_stream z;
        unsigned long avail_in;
@@ -567,7 +566,7 @@ extern char *git_work_tree_cfg;
 int is_inside_work_tree(void);
 const char *get_git_dir(void);
 const char *get_git_common_dir(void);
-char *get_object_directory(void);
+const char *get_object_directory(void);
 char *get_index_file(void);
 char *get_graft_file(struct repository *r);
 void set_git_dir(const char *path, int make_realpath);
@@ -889,6 +888,7 @@ void *read_blob_data_from_index(struct index_state *, const char *, unsigned lon
 #define CE_MATCH_IGNORE_FSMONITOR 0X20
 int is_racy_timestamp(const struct index_state *istate,
                      const struct cache_entry *ce);
+int has_racy_timestamp(struct index_state *istate);
 int ie_match_stat(struct index_state *, const struct cache_entry *, struct stat *, unsigned int);
 int ie_modified(struct index_state *, const struct cache_entry *, struct stat *, unsigned int);
 
@@ -993,16 +993,65 @@ void reset_shared_repository(void);
 extern int read_replace_refs;
 extern char *git_replace_ref_base;
 
+/*
+ * These values are used to help identify parts of a repository to fsync.
+ * FSYNC_COMPONENT_NONE identifies data that will not be a persistent part of the
+ * repository and so shouldn't be fsynced.
+ */
+enum fsync_component {
+       FSYNC_COMPONENT_NONE,
+       FSYNC_COMPONENT_LOOSE_OBJECT            = 1 << 0,
+       FSYNC_COMPONENT_PACK                    = 1 << 1,
+       FSYNC_COMPONENT_PACK_METADATA           = 1 << 2,
+       FSYNC_COMPONENT_COMMIT_GRAPH            = 1 << 3,
+       FSYNC_COMPONENT_INDEX                   = 1 << 4,
+       FSYNC_COMPONENT_REFERENCE               = 1 << 5,
+};
+
+#define FSYNC_COMPONENTS_OBJECTS (FSYNC_COMPONENT_LOOSE_OBJECT | \
+                                 FSYNC_COMPONENT_PACK)
+
+#define FSYNC_COMPONENTS_DERIVED_METADATA (FSYNC_COMPONENT_PACK_METADATA | \
+                                          FSYNC_COMPONENT_COMMIT_GRAPH)
+
+#define FSYNC_COMPONENTS_DEFAULT ((FSYNC_COMPONENTS_OBJECTS | \
+                                  FSYNC_COMPONENTS_DERIVED_METADATA) & \
+                                 ~FSYNC_COMPONENT_LOOSE_OBJECT)
+
+#define FSYNC_COMPONENTS_COMMITTED (FSYNC_COMPONENTS_OBJECTS | \
+                                   FSYNC_COMPONENT_REFERENCE)
+
+#define FSYNC_COMPONENTS_ADDED (FSYNC_COMPONENTS_COMMITTED | \
+                               FSYNC_COMPONENT_INDEX)
+
+#define FSYNC_COMPONENTS_ALL (FSYNC_COMPONENT_LOOSE_OBJECT | \
+                             FSYNC_COMPONENT_PACK | \
+                             FSYNC_COMPONENT_PACK_METADATA | \
+                             FSYNC_COMPONENT_COMMIT_GRAPH | \
+                             FSYNC_COMPONENT_INDEX | \
+                             FSYNC_COMPONENT_REFERENCE)
+
+/*
+ * A bitmask indicating which components of the repo should be fsynced.
+ */
+extern enum fsync_component fsync_components;
 extern int fsync_object_files;
 extern int use_fsync;
+
+enum fsync_method {
+       FSYNC_METHOD_FSYNC,
+       FSYNC_METHOD_WRITEOUT_ONLY
+};
+
+extern enum fsync_method fsync_method;
 extern int core_preload_index;
 extern int precomposed_unicode;
 extern int protect_hfs;
 extern int protect_ntfs;
-extern const char *core_fsmonitor;
 
 extern int core_apply_sparse_checkout;
 extern int core_sparse_checkout_cone;
+extern int sparse_expect_files_outside_of_patterns;
 
 /*
  * Returns the boolean value of $GIT_OPTIONAL_LOCKS (or the default value).
@@ -1319,9 +1368,23 @@ enum unpack_loose_header_result unpack_loose_header(git_zstream *stream,
 struct object_info;
 int parse_loose_header(const char *hdr, struct object_info *oi);
 
+/**
+ * With in-core object data in "buf", rehash it to make sure the
+ * object name actually matches "oid" to detect object corruption.
+ *
+ * A negative value indicates an error, usually that the OID is not
+ * what we expected, but it might also indicate another error.
+ */
 int check_object_signature(struct repository *r, const struct object_id *oid,
-                          void *buf, unsigned long size, const char *type,
-                          struct object_id *real_oidp);
+                          void *map, unsigned long size,
+                          enum object_type type);
+
+/**
+ * A streaming version of check_object_signature().
+ * Try reading the object named with "oid" using
+ * the streaming interface and rehash it to do the same.
+ */
+int stream_object_signature(struct repository *r, const struct object_id *oid);
 
 int finalize_object_file(const char *tmpfile, const char *filename);
 
@@ -1375,6 +1438,7 @@ struct object_context {
 #define GET_OID_FOLLOW_SYMLINKS 0100
 #define GET_OID_RECORD_PATH     0200
 #define GET_OID_ONLY_TO_DIE    04000
+#define GET_OID_REQUIRE_PATH  010000
 
 #define GET_OID_DISAMBIGUATORS \
        (GET_OID_COMMIT | GET_OID_COMMITTISH | \
@@ -1547,7 +1611,7 @@ int cache_name_stage_compare(const char *name1, int len1, int stage1, const char
 
 void *read_object_with_reference(struct repository *r,
                                 const struct object_id *oid,
-                                const char *required_type,
+                                enum object_type required_type,
                                 unsigned long *size,
                                 struct object_id *oid_ret);
 
@@ -1557,48 +1621,6 @@ struct object *repo_peel_to_type(struct repository *r,
 #define peel_to_type(name, namelen, obj, type) \
        repo_peel_to_type(the_repository, name, namelen, obj, type)
 
-enum date_mode_type {
-       DATE_NORMAL = 0,
-       DATE_HUMAN,
-       DATE_RELATIVE,
-       DATE_SHORT,
-       DATE_ISO8601,
-       DATE_ISO8601_STRICT,
-       DATE_RFC2822,
-       DATE_STRFTIME,
-       DATE_RAW,
-       DATE_UNIX
-};
-
-struct date_mode {
-       enum date_mode_type type;
-       const char *strftime_fmt;
-       int local;
-};
-
-/*
- * Convenience helper for passing a constant type, like:
- *
- *   show_date(t, tz, DATE_MODE(NORMAL));
- */
-#define DATE_MODE(t) date_mode_from_type(DATE_##t)
-struct date_mode *date_mode_from_type(enum date_mode_type type);
-
-const char *show_date(timestamp_t time, int timezone, const struct date_mode *mode);
-void show_date_relative(timestamp_t time, struct strbuf *timebuf);
-void show_date_human(timestamp_t time, int tz, const struct timeval *now,
-                       struct strbuf *timebuf);
-int parse_date(const char *date, struct strbuf *out);
-int parse_date_basic(const char *date, timestamp_t *timestamp, int *offset);
-int parse_expiry_date(const char *date, timestamp_t *timestamp);
-void datestamp(struct strbuf *out);
-#define approxidate(s) approxidate_careful((s), NULL)
-timestamp_t approxidate_careful(const char *, int *);
-timestamp_t approxidate_relative(const char *date);
-void parse_date_format(const char *format, struct date_mode *mode);
-int date_overflows(timestamp_t date);
-time_t tm_to_time_t(const struct tm *tm);
-
 #define IDENT_STRICT          1
 #define IDENT_NO_DATE         2
 #define IDENT_NO_NAME         4
@@ -1644,14 +1666,6 @@ struct ident_split {
  */
 int split_ident_line(struct ident_split *, const char *, int);
 
-/*
- * Like show_date, but pull the timestamp and tz parameters from
- * the ident_split. It will also sanity-check the values and produce
- * a well-known sentinel date if they appear bogus.
- */
-const char *show_ident_date(const struct ident_split *id,
-                           const struct date_mode *mode);
-
 /*
  * Compare split idents for equality or strict ordering. Note that we
  * compare only the ident part of the line, ignoring any timestamp.
@@ -1749,6 +1763,8 @@ int copy_file_with_time(const char *dst, const char *src, int mode);
 
 void write_or_die(int fd, const void *buf, size_t count);
 void fsync_or_die(int fd, const char *);
+int fsync_component(enum fsync_component component, int fd);
+void fsync_component_or_die(enum fsync_component component, int fd, const char *msg);
 
 ssize_t read_in_full(int fd, void *buf, size_t count);
 ssize_t write_in_full(int fd, const void *buf, size_t count);
index df6c61713cc6771ddabc9ab7d425e4dab161feda..a1a7b34eb981e6995ab52780239213cc89e4c2f9 100755 (executable)
@@ -15,7 +15,7 @@ case "$runs_on_pool" in
 ubuntu-*)
        sudo apt-get -q update
        sudo apt-get -q -y install language-pack-is libsvn-perl apache2 \
-               $UBUNTU_COMMON_PKGS $PYTHON_PACKAGE
+               $UBUNTU_COMMON_PKGS $CC_PACKAGE $PYTHON_PACKAGE
        mkdir --parents "$P4_PATH"
        pushd "$P4_PATH"
                wget --quiet "$P4WHENCE/bin.linux26x86_64/p4d"
@@ -80,15 +80,17 @@ linux-gcc-default)
        ;;
 esac
 
-if type p4d >/dev/null && type p4 >/dev/null
+if type p4d >/dev/null 2>&1 && type p4 >/dev/null 2>&1
 then
        echo "$(tput setaf 6)Perforce Server Version$(tput sgr0)"
        p4d -V
        echo "$(tput setaf 6)Perforce Client Version$(tput sgr0)"
        p4 -V
 fi
-if type git-lfs >/dev/null
+if type git-lfs >/dev/null 2>&1
 then
        echo "$(tput setaf 6)Git-LFS Version$(tput sgr0)"
        git-lfs version
+else
+       echo >&2 "WARNING: git-lfs wasn't installed, see above for clues why"
 fi
index 5e01a927f105b450412c346590cf07eaa4f07578..916057a46782ce95f6bee2df9744a8e22bd35f2c 100755 (executable)
--- a/ci/lib.sh
+++ b/ci/lib.sh
@@ -122,7 +122,7 @@ then
        test macos != "$CI_OS_NAME" || CI_OS_NAME=osx
        CI_REPO_SLUG="$GITHUB_REPOSITORY"
        CI_JOB_ID="$GITHUB_RUN_ID"
-       CC="${CC:-gcc}"
+       CC="${CC_PACKAGE:-${CC:-gcc}}"
        DONT_SKIP_TAGS=t
 
        cache_dir="$HOME/none"
@@ -196,7 +196,6 @@ esac
 case "$jobname" in
 linux32)
        CC=gcc
-       MAKEFLAGS="$MAKEFLAGS NO_UNCOMPRESS2=1"
        ;;
 linux-musl)
        CC=gcc
index 675c28f0bd038e1b017649a96851056ef6a0fd83..9bd6f3c48f4d1853e4cc5df7a9685696f63d72ce 100644 (file)
@@ -103,6 +103,7 @@ git-grep                                mainporcelain           info
 git-gui                                 mainporcelain
 git-hash-object                         plumbingmanipulators
 git-help                                ancillaryinterrogators          complete
+git-hook                                purehelpers
 git-http-backend                        synchingrepositories
 git-http-fetch                          synchelpers
 git-http-push                           synchelpers
index 265c010122e8edefc141f1dec8f506078bbbee19..2b528187316e28eb114b575727dc26101aa9296a 100644 (file)
@@ -39,8 +39,8 @@ void git_test_write_commit_graph_or_die(void)
 #define GRAPH_CHUNKID_OIDFANOUT 0x4f494446 /* "OIDF" */
 #define GRAPH_CHUNKID_OIDLOOKUP 0x4f49444c /* "OIDL" */
 #define GRAPH_CHUNKID_DATA 0x43444154 /* "CDAT" */
-#define GRAPH_CHUNKID_GENERATION_DATA 0x47444154 /* "GDAT" */
-#define GRAPH_CHUNKID_GENERATION_DATA_OVERFLOW 0x47444f56 /* "GDOV" */
+#define GRAPH_CHUNKID_GENERATION_DATA 0x47444132 /* "GDA2" */
+#define GRAPH_CHUNKID_GENERATION_DATA_OVERFLOW 0x47444f32 /* "GDO2" */
 #define GRAPH_CHUNKID_EXTRAEDGES 0x45444745 /* "EDGE" */
 #define GRAPH_CHUNKID_BLOOMINDEXES 0x42494458 /* "BIDX" */
 #define GRAPH_CHUNKID_BLOOMDATA 0x42444154 /* "BDAT" */
@@ -407,6 +407,9 @@ struct commit_graph *parse_commit_graph(struct repository *r,
                        &graph->chunk_generation_data);
                pair_chunk(cf, GRAPH_CHUNKID_GENERATION_DATA_OVERFLOW,
                        &graph->chunk_generation_data_overflow);
+
+               if (graph->chunk_generation_data)
+                       graph->read_generation_data = 1;
        }
 
        if (r->settings.commit_graph_read_changed_paths) {
@@ -803,7 +806,7 @@ static void fill_commit_graph_info(struct commit *item, struct commit_graph *g,
                                die(_("commit-graph requires overflow generation data but has none"));
 
                        offset_pos = offset ^ CORRECTED_COMMIT_DATE_OFFSET_OVERFLOW;
-                       graph_data->generation = get_be64(g->chunk_generation_data_overflow + 8 * offset_pos);
+                       graph_data->generation = item->date + get_be64(g->chunk_generation_data_overflow + 8 * offset_pos);
                } else
                        graph_data->generation = item->date + offset;
        } else
@@ -1556,12 +1559,16 @@ static void compute_generation_numbers(struct write_commit_graph_context *ctx)
                                if (current->date && current->date > max_corrected_commit_date)
                                        max_corrected_commit_date = current->date - 1;
                                commit_graph_data_at(current)->generation = max_corrected_commit_date + 1;
-
-                               if (commit_graph_data_at(current)->generation - current->date > GENERATION_NUMBER_V2_OFFSET_MAX)
-                                       ctx->num_generation_data_overflows++;
                        }
                }
        }
+
+       for (i = 0; i < ctx->commits.nr; i++) {
+               struct commit *c = ctx->commits.list[i];
+               timestamp_t offset = commit_graph_data_at(c)->generation - c->date;
+               if (offset > GENERATION_NUMBER_V2_OFFSET_MAX)
+                       ctx->num_generation_data_overflows++;
+       }
        stop_progress(&ctx->progress);
 }
 
@@ -1679,21 +1686,22 @@ int write_commit_graph_reachable(struct object_directory *odb,
 }
 
 static int fill_oids_from_packs(struct write_commit_graph_context *ctx,
-                               struct string_list *pack_indexes)
+                               const struct string_list *pack_indexes)
 {
        uint32_t i;
        struct strbuf progress_title = STRBUF_INIT;
        struct strbuf packname = STRBUF_INIT;
        int dirlen;
+       int ret = 0;
 
        strbuf_addf(&packname, "%s/pack/", ctx->odb->path);
        dirlen = packname.len;
        if (ctx->report_progress) {
                strbuf_addf(&progress_title,
-                           Q_("Finding commits for commit graph in %d pack",
-                              "Finding commits for commit graph in %d packs",
+                           Q_("Finding commits for commit graph in %"PRIuMAX" pack",
+                              "Finding commits for commit graph in %"PRIuMAX" packs",
                               pack_indexes->nr),
-                           pack_indexes->nr);
+                           (uintmax_t)pack_indexes->nr);
                ctx->progress = start_delayed_progress(progress_title.buf, 0);
                ctx->progress_done = 0;
        }
@@ -1703,12 +1711,12 @@ static int fill_oids_from_packs(struct write_commit_graph_context *ctx,
                strbuf_addstr(&packname, pack_indexes->items[i].string);
                p = add_packed_git(packname.buf, packname.len, 1);
                if (!p) {
-                       error(_("error adding pack %s"), packname.buf);
-                       return -1;
+                       ret = error(_("error adding pack %s"), packname.buf);
+                       goto cleanup;
                }
                if (open_pack_index(p)) {
-                       error(_("error opening index for %s"), packname.buf);
-                       return -1;
+                       ret = error(_("error opening index for %s"), packname.buf);
+                       goto cleanup;
                }
                for_each_object_in_pack(p, add_packed_commits, ctx,
                                        FOR_EACH_OBJECT_PACK_ORDER);
@@ -1716,11 +1724,12 @@ static int fill_oids_from_packs(struct write_commit_graph_context *ctx,
                free(p);
        }
 
+cleanup:
        stop_progress(&ctx->progress);
        strbuf_release(&progress_title);
        strbuf_release(&packname);
 
-       return 0;
+       return ret;
 }
 
 static int fill_oids_from_commits(struct write_commit_graph_context *ctx,
@@ -1852,6 +1861,7 @@ static int write_commit_graph_file(struct write_commit_graph_context *ctx)
 
                hold_lock_file_for_update_mode(&lk, lock_name,
                                               LOCK_DIE_ON_ERROR, 0444);
+               free(lock_name);
 
                fd = git_mkstemp_mode(ctx->graph_name, 0444);
                if (fd < 0) {
@@ -1942,7 +1952,8 @@ static int write_commit_graph_file(struct write_commit_graph_context *ctx)
        }
 
        close_commit_graph(ctx->r->objects);
-       finalize_hashfile(f, file_hash, CSUM_HASH_IN_STREAM | CSUM_FSYNC);
+       finalize_hashfile(f, file_hash, FSYNC_COMPONENT_COMMIT_GRAPH,
+                         CSUM_HASH_IN_STREAM | CSUM_FSYNC);
        free_chunkfile(cf);
 
        if (ctx->split) {
@@ -1976,6 +1987,7 @@ static int write_commit_graph_file(struct write_commit_graph_context *ctx)
                } else {
                        char *graph_name = get_commit_graph_filename(ctx->odb);
                        unlink(graph_name);
+                       free(graph_name);
                }
 
                ctx->commit_graph_hash_after[ctx->num_commit_graphs_after - 1] = xstrdup(hash_to_hex(file_hash));
@@ -2194,7 +2206,8 @@ static void mark_commit_graphs(struct write_commit_graph_context *ctx)
                struct stat st;
                struct utimbuf updated_time;
 
-               stat(ctx->commit_graph_filenames_before[i], &st);
+               if (stat(ctx->commit_graph_filenames_before[i], &st) < 0)
+                       continue;
 
                updated_time.actime = st.st_atime;
                updated_time.modtime = now;
@@ -2235,7 +2248,8 @@ static void expire_commit_graphs(struct write_commit_graph_context *ctx)
                strbuf_setlen(&path, dirnamelen);
                strbuf_addstr(&path, de->d_name);
 
-               stat(path.buf, &st);
+               if (stat(path.buf, &st) < 0)
+                       continue;
 
                if (st.st_mtime > expire_time)
                        continue;
@@ -2259,7 +2273,7 @@ out:
 }
 
 int write_commit_graph(struct object_directory *odb,
-                      struct string_list *pack_indexes,
+                      const struct string_list *const pack_indexes,
                       struct oidset *commits,
                       enum commit_graph_write_flags flags,
                       const struct commit_graph_opts *opts)
index 04a94e18302d8d2e9b91933497cfb868a3cf3c12..2e3ac35237e919790555bae317bd580cf065b727 100644 (file)
@@ -142,7 +142,7 @@ int write_commit_graph_reachable(struct object_directory *odb,
                                 enum commit_graph_write_flags flags,
                                 const struct commit_graph_opts *opts);
 int write_commit_graph(struct object_directory *odb,
-                      struct string_list *pack_indexes,
+                      const struct string_list *pack_indexes,
                       struct oidset *commits,
                       enum commit_graph_write_flags flags,
                       const struct commit_graph_opts *opts);
index a348f085b2b853d2f14d6848f3ff57edf85601b8..59b6c3e45525c5f5c1d19577612364992e245a6d 100644 (file)
--- a/commit.c
+++ b/commit.c
@@ -21,6 +21,7 @@
 #include "commit-reach.h"
 #include "run-command.h"
 #include "shallow.h"
+#include "hook.h"
 
 static struct commit_extra_header *read_commit_extra_header_lines(const char *buf, size_t len, const char **);
 
@@ -248,6 +249,16 @@ int for_each_commit_graft(each_commit_graft_fn fn, void *cb_data)
        return ret;
 }
 
+void reset_commit_grafts(struct repository *r)
+{
+       int i;
+
+       for (i = 0; i < r->parsed_objects->grafts_nr; i++)
+               free(r->parsed_objects->grafts[i]);
+       r->parsed_objects->grafts_nr = 0;
+       r->parsed_objects->commit_graft_prepared = 0;
+}
+
 struct commit_buffer {
        void *buffer;
        unsigned long size;
@@ -1567,7 +1578,7 @@ int commit_tree_extended(const char *msg, size_t msg_len,
                goto out;
        }
 
-       result = write_object_file(buffer.buf, buffer.len, commit_type, ret);
+       result = write_object_file(buffer.buf, buffer.len, OBJ_COMMIT, ret);
 out:
        strbuf_release(&buffer);
        return result;
@@ -1631,12 +1642,20 @@ struct commit_list **commit_list_append(struct commit *commit,
        return &new_commit->next;
 }
 
-const char *find_commit_header(const char *msg, const char *key, size_t *out_len)
+const char *find_header_mem(const char *msg, size_t len,
+                       const char *key, size_t *out_len)
 {
        int key_len = strlen(key);
        const char *line = msg;
 
-       while (line) {
+       /*
+        * NEEDSWORK: It's possible for strchrnul() to scan beyond the range
+        * given by len. However, current callers are safe because they compute
+        * len by scanning a NUL-terminated block of memory starting at msg.
+        * Nonetheless, it would be better to ensure the function does not look
+        * at msg beyond the len provided by the caller.
+        */
+       while (line && line < msg + len) {
                const char *eol = strchrnul(line, '\n');
 
                if (line == eol)
@@ -1653,6 +1672,10 @@ const char *find_commit_header(const char *msg, const char *key, size_t *out_len
        return NULL;
 }
 
+const char *find_commit_header(const char *msg, const char *key, size_t *out_len)
+{
+       return find_header_mem(msg, strlen(msg), key, out_len);
+}
 /*
  * Inspect the given string and determine the true "end" of the log message, in
  * order to find where to put a new Signed-off-by trailer.  Ignored are
@@ -1700,24 +1723,25 @@ size_t ignore_non_trailer(const char *buf, size_t len)
 }
 
 int run_commit_hook(int editor_is_used, const char *index_file,
-                   const char *name, ...)
+                   int *invoked_hook, const char *name, ...)
 {
-       struct strvec hook_env = STRVEC_INIT;
+       struct run_hooks_opt opt = RUN_HOOKS_OPT_INIT;
        va_list args;
-       int ret;
+       const char *arg;
 
-       strvec_pushf(&hook_env, "GIT_INDEX_FILE=%s", index_file);
+       strvec_pushf(&opt.env, "GIT_INDEX_FILE=%s", index_file);
 
        /*
         * Let the hook know that no editor will be launched.
         */
        if (!editor_is_used)
-               strvec_push(&hook_env, "GIT_EDITOR=:");
+               strvec_push(&opt.env, "GIT_EDITOR=:");
 
        va_start(args, name);
-       ret = run_hook_ve(hook_env.v, name, args);
+       while ((arg = va_arg(args, const char *)))
+               strvec_push(&opt.args, arg);
        va_end(args);
-       strvec_clear(&hook_env);
 
-       return ret;
+       opt.invoked_hook = invoked_hook;
+       return run_hooks_opt(name, &opt);
 }
index 3ea32766bcb00ada1c55f948ab6cc503b04c72a7..21e4d25ce7878ab6463110b6b3104c7b99d159cb 100644 (file)
--- a/commit.h
+++ b/commit.h
@@ -249,6 +249,7 @@ int commit_graft_pos(struct repository *r, const struct object_id *oid);
 int register_commit_graft(struct repository *r, struct commit_graft *, int);
 void prepare_commit_graft(struct repository *r);
 struct commit_graft *lookup_commit_graft(struct repository *r, const struct object_id *oid);
+void reset_commit_grafts(struct repository *r);
 
 struct commit *get_fork_point(const char *refname, struct commit *commit);
 
@@ -290,12 +291,17 @@ void free_commit_extra_headers(struct commit_extra_header *extra);
 
 /*
  * Search the commit object contents given by "msg" for the header "key".
+ * Reads up to "len" bytes of "msg".
  * Returns a pointer to the start of the header contents, or NULL. The length
  * of the header, up to the first newline, is returned via out_len.
  *
  * Note that some headers (like mergetag) may be multi-line. It is the caller's
  * responsibility to parse further in this case!
  */
+const char *find_header_mem(const char *msg, size_t len,
+                       const char *key,
+                       size_t *out_len);
+
 const char *find_commit_header(const char *msg, const char *key,
                               size_t *out_len);
 
@@ -364,7 +370,8 @@ int compare_commits_by_commit_date(const void *a_, const void *b_, void *unused)
 int compare_commits_by_gen_then_commit_date(const void *a_, const void *b_, void *unused);
 
 LAST_ARG_MUST_BE_NULL
-int run_commit_hook(int editor_is_used, const char *index_file, const char *name, ...);
+int run_commit_hook(int editor_is_used, const char *index_file,
+                   int *invoked_hook, const char *name, ...);
 
 /* Sign a commit or tag buffer, storing the result in a header. */
 int sign_with_header(struct strbuf *buf, const char *keyid);
diff --git a/compat/fsmonitor/fsm-darwin-gcc.h b/compat/fsmonitor/fsm-darwin-gcc.h
new file mode 100644 (file)
index 0000000..1c75c3d
--- /dev/null
@@ -0,0 +1,92 @@
+#ifndef FSM_DARWIN_GCC_H
+#define FSM_DARWIN_GCC_H
+
+#ifndef __clang__
+/*
+ * It is possible to #include CoreFoundation/CoreFoundation.h when compiling
+ * with clang, but not with GCC as of time of writing.
+ *
+ * See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93082 for details.
+ */
+typedef unsigned int FSEventStreamCreateFlags;
+#define kFSEventStreamEventFlagNone               0x00000000
+#define kFSEventStreamEventFlagMustScanSubDirs    0x00000001
+#define kFSEventStreamEventFlagUserDropped        0x00000002
+#define kFSEventStreamEventFlagKernelDropped      0x00000004
+#define kFSEventStreamEventFlagEventIdsWrapped    0x00000008
+#define kFSEventStreamEventFlagHistoryDone        0x00000010
+#define kFSEventStreamEventFlagRootChanged        0x00000020
+#define kFSEventStreamEventFlagMount              0x00000040
+#define kFSEventStreamEventFlagUnmount            0x00000080
+#define kFSEventStreamEventFlagItemCreated        0x00000100
+#define kFSEventStreamEventFlagItemRemoved        0x00000200
+#define kFSEventStreamEventFlagItemInodeMetaMod   0x00000400
+#define kFSEventStreamEventFlagItemRenamed        0x00000800
+#define kFSEventStreamEventFlagItemModified       0x00001000
+#define kFSEventStreamEventFlagItemFinderInfoMod  0x00002000
+#define kFSEventStreamEventFlagItemChangeOwner    0x00004000
+#define kFSEventStreamEventFlagItemXattrMod       0x00008000
+#define kFSEventStreamEventFlagItemIsFile         0x00010000
+#define kFSEventStreamEventFlagItemIsDir          0x00020000
+#define kFSEventStreamEventFlagItemIsSymlink      0x00040000
+#define kFSEventStreamEventFlagOwnEvent           0x00080000
+#define kFSEventStreamEventFlagItemIsHardlink     0x00100000
+#define kFSEventStreamEventFlagItemIsLastHardlink 0x00200000
+#define kFSEventStreamEventFlagItemCloned         0x00400000
+
+typedef struct __FSEventStream *FSEventStreamRef;
+typedef const FSEventStreamRef ConstFSEventStreamRef;
+
+typedef unsigned int CFStringEncoding;
+#define kCFStringEncodingUTF8 0x08000100
+
+typedef const struct __CFString *CFStringRef;
+typedef const struct __CFArray *CFArrayRef;
+typedef const struct __CFRunLoop *CFRunLoopRef;
+
+struct FSEventStreamContext {
+    long long version;
+    void *cb_data, *retain, *release, *copy_description;
+};
+
+typedef struct FSEventStreamContext FSEventStreamContext;
+typedef unsigned int FSEventStreamEventFlags;
+#define kFSEventStreamCreateFlagNoDefer 0x02
+#define kFSEventStreamCreateFlagWatchRoot 0x04
+#define kFSEventStreamCreateFlagFileEvents 0x10
+
+typedef unsigned long long FSEventStreamEventId;
+#define kFSEventStreamEventIdSinceNow 0xFFFFFFFFFFFFFFFFULL
+
+typedef void (*FSEventStreamCallback)(ConstFSEventStreamRef streamRef,
+                                     void *context,
+                                     __SIZE_TYPE__ num_of_events,
+                                     void *event_paths,
+                                     const FSEventStreamEventFlags event_flags[],
+                                     const FSEventStreamEventId event_ids[]);
+typedef double CFTimeInterval;
+FSEventStreamRef FSEventStreamCreate(void *allocator,
+                                    FSEventStreamCallback callback,
+                                    FSEventStreamContext *context,
+                                    CFArrayRef paths_to_watch,
+                                    FSEventStreamEventId since_when,
+                                    CFTimeInterval latency,
+                                    FSEventStreamCreateFlags flags);
+CFStringRef CFStringCreateWithCString(void *allocator, const char *string,
+                                     CFStringEncoding encoding);
+CFArrayRef CFArrayCreate(void *allocator, const void **items, long long count,
+                        void *callbacks);
+void CFRunLoopRun(void);
+void CFRunLoopStop(CFRunLoopRef run_loop);
+CFRunLoopRef CFRunLoopGetCurrent(void);
+extern CFStringRef kCFRunLoopDefaultMode;
+void FSEventStreamScheduleWithRunLoop(FSEventStreamRef stream,
+                                     CFRunLoopRef run_loop,
+                                     CFStringRef run_loop_mode);
+unsigned char FSEventStreamStart(FSEventStreamRef stream);
+void FSEventStreamStop(FSEventStreamRef stream);
+void FSEventStreamInvalidate(FSEventStreamRef stream);
+void FSEventStreamRelease(FSEventStreamRef stream);
+
+#endif /* !clang */
+#endif /* FSM_DARWIN_GCC_H */
diff --git a/compat/fsmonitor/fsm-listen-darwin.c b/compat/fsmonitor/fsm-listen-darwin.c
new file mode 100644 (file)
index 0000000..0741fe8
--- /dev/null
@@ -0,0 +1,427 @@
+#ifndef __clang__
+#include "fsm-darwin-gcc.h"
+#else
+#include <CoreFoundation/CoreFoundation.h>
+#include <CoreServices/CoreServices.h>
+
+#ifndef AVAILABLE_MAC_OS_X_VERSION_10_13_AND_LATER
+/*
+ * This enum value was added in 10.13 to:
+ *
+ * /Applications/Xcode.app/Contents/Developer/Platforms/ \
+ *    MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/ \
+ *    Library/Frameworks/CoreServices.framework/Frameworks/ \
+ *    FSEvents.framework/Versions/Current/Headers/FSEvents.h
+ *
+ * If we're compiling against an older SDK, this symbol won't be
+ * present.  Silently define it here so that we don't have to ifdef
+ * the logging or masking below.  This should be harmless since older
+ * versions of macOS won't ever emit this FS event anyway.
+ */
+#define kFSEventStreamEventFlagItemCloned         0x00400000
+#endif
+#endif
+
+#include "cache.h"
+#include "fsmonitor.h"
+#include "fsm-listen.h"
+#include "fsmonitor--daemon.h"
+
+struct fsmonitor_daemon_backend_data
+{
+       CFStringRef cfsr_worktree_path;
+       CFStringRef cfsr_gitdir_path;
+
+       CFArrayRef cfar_paths_to_watch;
+       int nr_paths_watching;
+
+       FSEventStreamRef stream;
+
+       CFRunLoopRef rl;
+
+       enum shutdown_style {
+               SHUTDOWN_EVENT = 0,
+               FORCE_SHUTDOWN,
+               FORCE_ERROR_STOP,
+       } shutdown_style;
+
+       unsigned int stream_scheduled:1;
+       unsigned int stream_started:1;
+};
+
+static void log_flags_set(const char *path, const FSEventStreamEventFlags flag)
+{
+       struct strbuf msg = STRBUF_INIT;
+
+       if (flag & kFSEventStreamEventFlagMustScanSubDirs)
+               strbuf_addstr(&msg, "MustScanSubDirs|");
+       if (flag & kFSEventStreamEventFlagUserDropped)
+               strbuf_addstr(&msg, "UserDropped|");
+       if (flag & kFSEventStreamEventFlagKernelDropped)
+               strbuf_addstr(&msg, "KernelDropped|");
+       if (flag & kFSEventStreamEventFlagEventIdsWrapped)
+               strbuf_addstr(&msg, "EventIdsWrapped|");
+       if (flag & kFSEventStreamEventFlagHistoryDone)
+               strbuf_addstr(&msg, "HistoryDone|");
+       if (flag & kFSEventStreamEventFlagRootChanged)
+               strbuf_addstr(&msg, "RootChanged|");
+       if (flag & kFSEventStreamEventFlagMount)
+               strbuf_addstr(&msg, "Mount|");
+       if (flag & kFSEventStreamEventFlagUnmount)
+               strbuf_addstr(&msg, "Unmount|");
+       if (flag & kFSEventStreamEventFlagItemChangeOwner)
+               strbuf_addstr(&msg, "ItemChangeOwner|");
+       if (flag & kFSEventStreamEventFlagItemCreated)
+               strbuf_addstr(&msg, "ItemCreated|");
+       if (flag & kFSEventStreamEventFlagItemFinderInfoMod)
+               strbuf_addstr(&msg, "ItemFinderInfoMod|");
+       if (flag & kFSEventStreamEventFlagItemInodeMetaMod)
+               strbuf_addstr(&msg, "ItemInodeMetaMod|");
+       if (flag & kFSEventStreamEventFlagItemIsDir)
+               strbuf_addstr(&msg, "ItemIsDir|");
+       if (flag & kFSEventStreamEventFlagItemIsFile)
+               strbuf_addstr(&msg, "ItemIsFile|");
+       if (flag & kFSEventStreamEventFlagItemIsHardlink)
+               strbuf_addstr(&msg, "ItemIsHardlink|");
+       if (flag & kFSEventStreamEventFlagItemIsLastHardlink)
+               strbuf_addstr(&msg, "ItemIsLastHardlink|");
+       if (flag & kFSEventStreamEventFlagItemIsSymlink)
+               strbuf_addstr(&msg, "ItemIsSymlink|");
+       if (flag & kFSEventStreamEventFlagItemModified)
+               strbuf_addstr(&msg, "ItemModified|");
+       if (flag & kFSEventStreamEventFlagItemRemoved)
+               strbuf_addstr(&msg, "ItemRemoved|");
+       if (flag & kFSEventStreamEventFlagItemRenamed)
+               strbuf_addstr(&msg, "ItemRenamed|");
+       if (flag & kFSEventStreamEventFlagItemXattrMod)
+               strbuf_addstr(&msg, "ItemXattrMod|");
+       if (flag & kFSEventStreamEventFlagOwnEvent)
+               strbuf_addstr(&msg, "OwnEvent|");
+       if (flag & kFSEventStreamEventFlagItemCloned)
+               strbuf_addstr(&msg, "ItemCloned|");
+
+       trace_printf_key(&trace_fsmonitor, "fsevent: '%s', flags=%u %s",
+                        path, flag, msg.buf);
+
+       strbuf_release(&msg);
+}
+
+static int ef_is_root_delete(const FSEventStreamEventFlags ef)
+{
+       return (ef & kFSEventStreamEventFlagItemIsDir &&
+               ef & kFSEventStreamEventFlagItemRemoved);
+}
+
+static int ef_is_root_renamed(const FSEventStreamEventFlags ef)
+{
+       return (ef & kFSEventStreamEventFlagItemIsDir &&
+               ef & kFSEventStreamEventFlagItemRenamed);
+}
+
+static int ef_is_dropped(const FSEventStreamEventFlags ef)
+{
+       return (ef & kFSEventStreamEventFlagMustScanSubDirs ||
+               ef & kFSEventStreamEventFlagKernelDropped ||
+               ef & kFSEventStreamEventFlagUserDropped);
+}
+
+static void fsevent_callback(ConstFSEventStreamRef streamRef,
+                            void *ctx,
+                            size_t num_of_events,
+                            void *event_paths,
+                            const FSEventStreamEventFlags event_flags[],
+                            const FSEventStreamEventId event_ids[])
+{
+       struct fsmonitor_daemon_state *state = ctx;
+       struct fsmonitor_daemon_backend_data *data = state->backend_data;
+       char **paths = (char **)event_paths;
+       struct fsmonitor_batch *batch = NULL;
+       struct string_list cookie_list = STRING_LIST_INIT_DUP;
+       const char *path_k;
+       const char *slash;
+       int k;
+       struct strbuf tmp = STRBUF_INIT;
+
+       /*
+        * Build a list of all filesystem changes into a private/local
+        * list and without holding any locks.
+        */
+       for (k = 0; k < num_of_events; k++) {
+               /*
+                * On Mac, we receive an array of absolute paths.
+                */
+               path_k = paths[k];
+
+               /*
+                * If you want to debug FSEvents, log them to GIT_TRACE_FSMONITOR.
+                * Please don't log them to Trace2.
+                *
+                * trace_printf_key(&trace_fsmonitor, "Path: '%s'", path_k);
+                */
+
+               /*
+                * If event[k] is marked as dropped, we assume that we have
+                * lost sync with the filesystem and should flush our cached
+                * data.  We need to:
+                *
+                * [1] Abort/wake any client threads waiting for a cookie and
+                *     flush the cached state data (the current token), and
+                *     create a new token.
+                *
+                * [2] Discard the batch that we were locally building (since
+                *     they are conceptually relative to the just flushed
+                *     token).
+                */
+               if (ef_is_dropped(event_flags[k])) {
+                       if (trace_pass_fl(&trace_fsmonitor))
+                               log_flags_set(path_k, event_flags[k]);
+
+                       fsmonitor_force_resync(state);
+                       fsmonitor_batch__free_list(batch);
+                       string_list_clear(&cookie_list, 0);
+
+                       /*
+                        * We assume that any events that we received
+                        * in this callback after this dropped event
+                        * may still be valid, so we continue rather
+                        * than break.  (And just in case there is a
+                        * delete of ".git" hiding in there.)
+                        */
+                       continue;
+               }
+
+               switch (fsmonitor_classify_path_absolute(state, path_k)) {
+
+               case IS_INSIDE_DOT_GIT_WITH_COOKIE_PREFIX:
+               case IS_INSIDE_GITDIR_WITH_COOKIE_PREFIX:
+                       /* special case cookie files within .git or gitdir */
+
+                       /* Use just the filename of the cookie file. */
+                       slash = find_last_dir_sep(path_k);
+                       string_list_append(&cookie_list,
+                                          slash ? slash + 1 : path_k);
+                       break;
+
+               case IS_INSIDE_DOT_GIT:
+               case IS_INSIDE_GITDIR:
+                       /* ignore all other paths inside of .git or gitdir */
+                       break;
+
+               case IS_DOT_GIT:
+               case IS_GITDIR:
+                       /*
+                        * If .git directory is deleted or renamed away,
+                        * we have to quit.
+                        */
+                       if (ef_is_root_delete(event_flags[k])) {
+                               trace_printf_key(&trace_fsmonitor,
+                                                "event: gitdir removed");
+                               goto force_shutdown;
+                       }
+                       if (ef_is_root_renamed(event_flags[k])) {
+                               trace_printf_key(&trace_fsmonitor,
+                                                "event: gitdir renamed");
+                               goto force_shutdown;
+                       }
+                       break;
+
+               case IS_WORKDIR_PATH:
+                       /* try to queue normal pathnames */
+
+                       if (trace_pass_fl(&trace_fsmonitor))
+                               log_flags_set(path_k, event_flags[k]);
+
+                       /*
+                        * Because of the implicit "binning" (the
+                        * kernel calls us at a given frequency) and
+                        * de-duping (the kernel is free to combine
+                        * multiple events for a given pathname), an
+                        * individual fsevent could be marked as both
+                        * a file and directory.  Add it to the queue
+                        * with both spellings so that the client will
+                        * know how much to invalidate/refresh.
+                        */
+
+                       if (event_flags[k] & kFSEventStreamEventFlagItemIsFile) {
+                               const char *rel = path_k +
+                                       state->path_worktree_watch.len + 1;
+
+                               if (!batch)
+                                       batch = fsmonitor_batch__new();
+                               fsmonitor_batch__add_path(batch, rel);
+                       }
+
+                       if (event_flags[k] & kFSEventStreamEventFlagItemIsDir) {
+                               const char *rel = path_k +
+                                       state->path_worktree_watch.len + 1;
+
+                               strbuf_reset(&tmp);
+                               strbuf_addstr(&tmp, rel);
+                               strbuf_addch(&tmp, '/');
+
+                               if (!batch)
+                                       batch = fsmonitor_batch__new();
+                               fsmonitor_batch__add_path(batch, tmp.buf);
+                       }
+
+                       break;
+
+               case IS_OUTSIDE_CONE:
+               default:
+                       trace_printf_key(&trace_fsmonitor,
+                                        "ignoring '%s'", path_k);
+                       break;
+               }
+       }
+
+       fsmonitor_publish(state, batch, &cookie_list);
+       string_list_clear(&cookie_list, 0);
+       strbuf_release(&tmp);
+       return;
+
+force_shutdown:
+       fsmonitor_batch__free_list(batch);
+       string_list_clear(&cookie_list, 0);
+
+       data->shutdown_style = FORCE_SHUTDOWN;
+       CFRunLoopStop(data->rl);
+       strbuf_release(&tmp);
+       return;
+}
+
+/*
+ * In the call to `FSEventStreamCreate()` to setup our watch, the
+ * `latency` argument determines the frequency of calls to our callback
+ * with new FS events.  Too slow and events get dropped; too fast and
+ * we burn CPU unnecessarily.  Since it is rather obscure, I don't
+ * think this needs to be a config setting.  I've done extensive
+ * testing on my systems and chosen the value below.  It gives good
+ * results and I've not seen any dropped events.
+ *
+ * With a latency of 0.1, I was seeing lots of dropped events during
+ * the "touch 100000" files test within t/perf/p7519, but with a
+ * latency of 0.001 I did not see any dropped events.  So I'm going
+ * to assume that this is the "correct" value.
+ *
+ * https://developer.apple.com/documentation/coreservices/1443980-fseventstreamcreate
+ */
+
+int fsm_listen__ctor(struct fsmonitor_daemon_state *state)
+{
+       FSEventStreamCreateFlags flags = kFSEventStreamCreateFlagNoDefer |
+               kFSEventStreamCreateFlagWatchRoot |
+               kFSEventStreamCreateFlagFileEvents;
+       FSEventStreamContext ctx = {
+               0,
+               state,
+               NULL,
+               NULL,
+               NULL
+       };
+       struct fsmonitor_daemon_backend_data *data;
+       const void *dir_array[2];
+
+       CALLOC_ARRAY(data, 1);
+       state->backend_data = data;
+
+       data->cfsr_worktree_path = CFStringCreateWithCString(
+               NULL, state->path_worktree_watch.buf, kCFStringEncodingUTF8);
+       dir_array[data->nr_paths_watching++] = data->cfsr_worktree_path;
+
+       if (state->nr_paths_watching > 1) {
+               data->cfsr_gitdir_path = CFStringCreateWithCString(
+                       NULL, state->path_gitdir_watch.buf,
+                       kCFStringEncodingUTF8);
+               dir_array[data->nr_paths_watching++] = data->cfsr_gitdir_path;
+       }
+
+       data->cfar_paths_to_watch = CFArrayCreate(NULL, dir_array,
+                                                 data->nr_paths_watching,
+                                                 NULL);
+       data->stream = FSEventStreamCreate(NULL, fsevent_callback, &ctx,
+                                          data->cfar_paths_to_watch,
+                                          kFSEventStreamEventIdSinceNow,
+                                          0.001, flags);
+       if (data->stream == NULL)
+               goto failed;
+
+       /*
+        * `data->rl` needs to be set inside the listener thread.
+        */
+
+       return 0;
+
+failed:
+       error(_("Unable to create FSEventStream."));
+
+       FREE_AND_NULL(state->backend_data);
+       return -1;
+}
+
+void fsm_listen__dtor(struct fsmonitor_daemon_state *state)
+{
+       struct fsmonitor_daemon_backend_data *data;
+
+       if (!state || !state->backend_data)
+               return;
+
+       data = state->backend_data;
+
+       if (data->stream) {
+               if (data->stream_started)
+                       FSEventStreamStop(data->stream);
+               if (data->stream_scheduled)
+                       FSEventStreamInvalidate(data->stream);
+               FSEventStreamRelease(data->stream);
+       }
+
+       FREE_AND_NULL(state->backend_data);
+}
+
+void fsm_listen__stop_async(struct fsmonitor_daemon_state *state)
+{
+       struct fsmonitor_daemon_backend_data *data;
+
+       data = state->backend_data;
+       data->shutdown_style = SHUTDOWN_EVENT;
+
+       CFRunLoopStop(data->rl);
+}
+
+void fsm_listen__loop(struct fsmonitor_daemon_state *state)
+{
+       struct fsmonitor_daemon_backend_data *data;
+
+       data = state->backend_data;
+
+       data->rl = CFRunLoopGetCurrent();
+
+       FSEventStreamScheduleWithRunLoop(data->stream, data->rl, kCFRunLoopDefaultMode);
+       data->stream_scheduled = 1;
+
+       if (!FSEventStreamStart(data->stream)) {
+               error(_("Failed to start the FSEventStream"));
+               goto force_error_stop_without_loop;
+       }
+       data->stream_started = 1;
+
+       CFRunLoopRun();
+
+       switch (data->shutdown_style) {
+       case FORCE_ERROR_STOP:
+               state->error_code = -1;
+               /* fall thru */
+       case FORCE_SHUTDOWN:
+               ipc_server_stop_async(state->ipc_server_data);
+               /* fall thru */
+       case SHUTDOWN_EVENT:
+       default:
+               break;
+       }
+       return;
+
+force_error_stop_without_loop:
+       state->error_code = -1;
+       ipc_server_stop_async(state->ipc_server_data);
+       return;
+}
diff --git a/compat/fsmonitor/fsm-listen-win32.c b/compat/fsmonitor/fsm-listen-win32.c
new file mode 100644 (file)
index 0000000..5b928ab
--- /dev/null
@@ -0,0 +1,586 @@
+#include "cache.h"
+#include "config.h"
+#include "fsmonitor.h"
+#include "fsm-listen.h"
+#include "fsmonitor--daemon.h"
+
+/*
+ * The documentation of ReadDirectoryChangesW() states that the maximum
+ * buffer size is 64K when the monitored directory is remote.
+ *
+ * Larger buffers may be used when the monitored directory is local and
+ * will help us receive events faster from the kernel and avoid dropped
+ * events.
+ *
+ * So we try to use a very large buffer and silently fallback to 64K if
+ * we get an error.
+ */
+#define MAX_RDCW_BUF_FALLBACK (65536)
+#define MAX_RDCW_BUF          (65536 * 8)
+
+struct one_watch
+{
+       char buffer[MAX_RDCW_BUF];
+       DWORD buf_len;
+       DWORD count;
+
+       struct strbuf path;
+       HANDLE hDir;
+       HANDLE hEvent;
+       OVERLAPPED overlapped;
+
+       /*
+        * Is there an active ReadDirectoryChangesW() call pending.  If so, we
+        * need to later call GetOverlappedResult() and possibly CancelIoEx().
+        */
+       BOOL is_active;
+};
+
+struct fsmonitor_daemon_backend_data
+{
+       struct one_watch *watch_worktree;
+       struct one_watch *watch_gitdir;
+
+       HANDLE hEventShutdown;
+
+       HANDLE hListener[3]; /* we don't own these handles */
+#define LISTENER_SHUTDOWN 0
+#define LISTENER_HAVE_DATA_WORKTREE 1
+#define LISTENER_HAVE_DATA_GITDIR 2
+       int nr_listener_handles;
+};
+
+/*
+ * Convert the WCHAR path from the notification into UTF8 and
+ * then normalize it.
+ */
+static int normalize_path_in_utf8(FILE_NOTIFY_INFORMATION *info,
+                                 struct strbuf *normalized_path)
+{
+       int reserve;
+       int len = 0;
+
+       strbuf_reset(normalized_path);
+       if (!info->FileNameLength)
+               goto normalize;
+
+       /*
+        * Pre-reserve enough space in the UTF8 buffer for
+        * each Unicode WCHAR character to be mapped into a
+        * sequence of 2 UTF8 characters.  That should let us
+        * avoid ERROR_INSUFFICIENT_BUFFER 99.9+% of the time.
+        */
+       reserve = info->FileNameLength + 1;
+       strbuf_grow(normalized_path, reserve);
+
+       for (;;) {
+               len = WideCharToMultiByte(CP_UTF8, 0, info->FileName,
+                                         info->FileNameLength / sizeof(WCHAR),
+                                         normalized_path->buf,
+                                         strbuf_avail(normalized_path) - 1,
+                                         NULL, NULL);
+               if (len > 0)
+                       goto normalize;
+               if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
+                       error(_("[GLE %ld] could not convert path to UTF-8: '%.*ls'"),
+                             GetLastError(),
+                             (int)(info->FileNameLength / sizeof(WCHAR)),
+                             info->FileName);
+                       return -1;
+               }
+
+               strbuf_grow(normalized_path,
+                           strbuf_avail(normalized_path) + reserve);
+       }
+
+normalize:
+       strbuf_setlen(normalized_path, len);
+       return strbuf_normalize_path(normalized_path);
+}
+
+void fsm_listen__stop_async(struct fsmonitor_daemon_state *state)
+{
+       SetEvent(state->backend_data->hListener[LISTENER_SHUTDOWN]);
+}
+
+static struct one_watch *create_watch(struct fsmonitor_daemon_state *state,
+                                     const char *path)
+{
+       struct one_watch *watch = NULL;
+       DWORD desired_access = FILE_LIST_DIRECTORY;
+       DWORD share_mode =
+               FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE;
+       HANDLE hDir;
+       wchar_t wpath[MAX_PATH];
+
+       if (xutftowcs_path(wpath, path) < 0) {
+               error(_("could not convert to wide characters: '%s'"), path);
+               return NULL;
+       }
+
+       hDir = CreateFileW(wpath,
+                          desired_access, share_mode, NULL, OPEN_EXISTING,
+                          FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED,
+                          NULL);
+       if (hDir == INVALID_HANDLE_VALUE) {
+               error(_("[GLE %ld] could not watch '%s'"),
+                     GetLastError(), path);
+               return NULL;
+       }
+
+       CALLOC_ARRAY(watch, 1);
+
+       watch->buf_len = sizeof(watch->buffer); /* assume full MAX_RDCW_BUF */
+
+       strbuf_init(&watch->path, 0);
+       strbuf_addstr(&watch->path, path);
+
+       watch->hDir = hDir;
+       watch->hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
+
+       return watch;
+}
+
+static void destroy_watch(struct one_watch *watch)
+{
+       if (!watch)
+               return;
+
+       strbuf_release(&watch->path);
+       if (watch->hDir != INVALID_HANDLE_VALUE)
+               CloseHandle(watch->hDir);
+       if (watch->hEvent != INVALID_HANDLE_VALUE)
+               CloseHandle(watch->hEvent);
+
+       free(watch);
+}
+
+static int start_rdcw_watch(struct fsmonitor_daemon_backend_data *data,
+                           struct one_watch *watch)
+{
+       DWORD dwNotifyFilter =
+               FILE_NOTIFY_CHANGE_FILE_NAME |
+               FILE_NOTIFY_CHANGE_DIR_NAME |
+               FILE_NOTIFY_CHANGE_ATTRIBUTES |
+               FILE_NOTIFY_CHANGE_SIZE |
+               FILE_NOTIFY_CHANGE_LAST_WRITE |
+               FILE_NOTIFY_CHANGE_CREATION;
+
+       ResetEvent(watch->hEvent);
+
+       memset(&watch->overlapped, 0, sizeof(watch->overlapped));
+       watch->overlapped.hEvent = watch->hEvent;
+
+       /*
+        * Queue an async call using Overlapped IO.  This returns immediately.
+        * Our event handle will be signalled when the real result is available.
+        *
+        * The return value here just means that we successfully queued it.
+        * We won't know if the Read...() actually produces data until later.
+        */
+       watch->is_active = ReadDirectoryChangesW(
+               watch->hDir, watch->buffer, watch->buf_len, TRUE,
+               dwNotifyFilter, &watch->count, &watch->overlapped, NULL);
+
+       if (watch->is_active)
+               return 0;
+
+       error(_("ReadDirectoryChangedW failed on '%s' [GLE %ld]"),
+             watch->path.buf, GetLastError());
+       return -1;
+}
+
+static int recv_rdcw_watch(struct one_watch *watch)
+{
+       DWORD gle;
+
+       watch->is_active = FALSE;
+
+       /*
+        * The overlapped result is ready.  If the Read...() was successful
+        * we finally receive the actual result into our buffer.
+        */
+       if (GetOverlappedResult(watch->hDir, &watch->overlapped, &watch->count,
+                               TRUE))
+               return 0;
+
+       gle = GetLastError();
+       if (gle == ERROR_INVALID_PARAMETER &&
+           /*
+            * The kernel throws an invalid parameter error when our
+            * buffer is too big and we are pointed at a remote
+            * directory (and possibly for other reasons).  Quietly
+            * set it down and try again.
+            *
+            * See note about MAX_RDCW_BUF at the top.
+            */
+           watch->buf_len > MAX_RDCW_BUF_FALLBACK) {
+               watch->buf_len = MAX_RDCW_BUF_FALLBACK;
+               return -2;
+       }
+
+       /*
+        * NEEDSWORK: If an external <gitdir> is deleted, the above
+        * returns an error.  I'm not sure that there's anything that
+        * we can do here other than failing -- the <worktree>/.git
+        * link file would be broken anyway.  We might try to check
+        * for that and return a better error message, but I'm not
+        * sure it is worth it.
+        */
+
+       error(_("GetOverlappedResult failed on '%s' [GLE %ld]"),
+             watch->path.buf, gle);
+       return -1;
+}
+
+static void cancel_rdcw_watch(struct one_watch *watch)
+{
+       DWORD count;
+
+       if (!watch || !watch->is_active)
+               return;
+
+       /*
+        * The calls to ReadDirectoryChangesW() and GetOverlappedResult()
+        * form a "pair" (my term) where we queue an IO and promise to
+        * hang around and wait for the kernel to give us the result.
+        *
+        * If for some reason after we queue the IO, we have to quit
+        * or otherwise not stick around for the second half, we must
+        * tell the kernel to abort the IO.  This prevents the kernel
+        * from writing to our buffer and/or signalling our event
+        * after we free them.
+        *
+        * (Ask me how much fun it was to track that one down).
+        */
+       CancelIoEx(watch->hDir, &watch->overlapped);
+       GetOverlappedResult(watch->hDir, &watch->overlapped, &count, TRUE);
+       watch->is_active = FALSE;
+}
+
+/*
+ * Process filesystem events that happen anywhere (recursively) under the
+ * <worktree> root directory.  For a normal working directory, this includes
+ * both version controlled files and the contents of the .git/ directory.
+ *
+ * If <worktree>/.git is a file, then we only see events for the file
+ * itself.
+ */
+static int process_worktree_events(struct fsmonitor_daemon_state *state)
+{
+       struct fsmonitor_daemon_backend_data *data = state->backend_data;
+       struct one_watch *watch = data->watch_worktree;
+       struct strbuf path = STRBUF_INIT;
+       struct string_list cookie_list = STRING_LIST_INIT_DUP;
+       struct fsmonitor_batch *batch = NULL;
+       const char *p = watch->buffer;
+
+       /*
+        * If the kernel gets more events than will fit in the kernel
+        * buffer associated with our RDCW handle, it drops them and
+        * returns a count of zero.
+        *
+        * Yes, the call returns WITHOUT error and with length zero.
+        * This is the documented behavior.  (My testing has confirmed
+        * that it also sets the last error to ERROR_NOTIFY_ENUM_DIR,
+        * but we do not rely on that since the function did not
+        * return an error and it is not documented.)
+        *
+        * (The "overflow" case is not ambiguous with the "no data" case
+        * because we did an INFINITE wait.)
+        *
+        * This means we have a gap in coverage.  Tell the daemon layer
+        * to resync.
+        */
+       if (!watch->count) {
+               trace2_data_string("fsmonitor", NULL, "fsm-listen/kernel",
+                                  "overflow");
+               fsmonitor_force_resync(state);
+               return LISTENER_HAVE_DATA_WORKTREE;
+       }
+
+       /*
+        * On Windows, `info` contains an "array" of paths that are
+        * relative to the root of whichever directory handle received
+        * the event.
+        */
+       for (;;) {
+               FILE_NOTIFY_INFORMATION *info = (void *)p;
+               const char *slash;
+               enum fsmonitor_path_type t;
+
+               strbuf_reset(&path);
+               if (normalize_path_in_utf8(info, &path) == -1)
+                       goto skip_this_path;
+
+               t = fsmonitor_classify_path_workdir_relative(path.buf);
+
+               switch (t) {
+               case IS_INSIDE_DOT_GIT_WITH_COOKIE_PREFIX:
+                       /* special case cookie files within .git */
+
+                       /* Use just the filename of the cookie file. */
+                       slash = find_last_dir_sep(path.buf);
+                       string_list_append(&cookie_list,
+                                          slash ? slash + 1 : path.buf);
+                       break;
+
+               case IS_INSIDE_DOT_GIT:
+                       /* ignore everything inside of "<worktree>/.git/" */
+                       break;
+
+               case IS_DOT_GIT:
+                       /* "<worktree>/.git" was deleted (or renamed away) */
+                       if ((info->Action == FILE_ACTION_REMOVED) ||
+                           (info->Action == FILE_ACTION_RENAMED_OLD_NAME)) {
+                               trace2_data_string("fsmonitor", NULL,
+                                                  "fsm-listen/dotgit",
+                                                  "removed");
+                               goto force_shutdown;
+                       }
+                       break;
+
+               case IS_WORKDIR_PATH:
+                       /* queue normal pathname */
+                       if (!batch)
+                               batch = fsmonitor_batch__new();
+                       fsmonitor_batch__add_path(batch, path.buf);
+                       break;
+
+               case IS_GITDIR:
+               case IS_INSIDE_GITDIR:
+               case IS_INSIDE_GITDIR_WITH_COOKIE_PREFIX:
+               default:
+                       BUG("unexpected path classification '%d' for '%s'",
+                           t, path.buf);
+               }
+
+skip_this_path:
+               if (!info->NextEntryOffset)
+                       break;
+               p += info->NextEntryOffset;
+       }
+
+       fsmonitor_publish(state, batch, &cookie_list);
+       batch = NULL;
+       string_list_clear(&cookie_list, 0);
+       strbuf_release(&path);
+       return LISTENER_HAVE_DATA_WORKTREE;
+
+force_shutdown:
+       fsmonitor_batch__free_list(batch);
+       string_list_clear(&cookie_list, 0);
+       strbuf_release(&path);
+       return LISTENER_SHUTDOWN;
+}
+
+/*
+ * Process filesystem events that happened anywhere (recursively) under the
+ * external <gitdir> (such as non-primary worktrees or submodules).
+ * We only care about cookie files that our client threads created here.
+ *
+ * Note that we DO NOT get filesystem events on the external <gitdir>
+ * itself (it is not inside something that we are watching).  In particular,
+ * we do not get an event if the external <gitdir> is deleted.
+ */
+static int process_gitdir_events(struct fsmonitor_daemon_state *state)
+{
+       struct fsmonitor_daemon_backend_data *data = state->backend_data;
+       struct one_watch *watch = data->watch_gitdir;
+       struct strbuf path = STRBUF_INIT;
+       struct string_list cookie_list = STRING_LIST_INIT_DUP;
+       const char *p = watch->buffer;
+
+       if (!watch->count) {
+               trace2_data_string("fsmonitor", NULL, "fsm-listen/kernel",
+                                  "overflow");
+               fsmonitor_force_resync(state);
+               return LISTENER_HAVE_DATA_GITDIR;
+       }
+
+       for (;;) {
+               FILE_NOTIFY_INFORMATION *info = (void *)p;
+               const char *slash;
+               enum fsmonitor_path_type t;
+
+               strbuf_reset(&path);
+               if (normalize_path_in_utf8(info, &path) == -1)
+                       goto skip_this_path;
+
+               t = fsmonitor_classify_path_gitdir_relative(path.buf);
+
+               switch (t) {
+               case IS_INSIDE_GITDIR_WITH_COOKIE_PREFIX:
+                       /* special case cookie files within gitdir */
+
+                       /* Use just the filename of the cookie file. */
+                       slash = find_last_dir_sep(path.buf);
+                       string_list_append(&cookie_list,
+                                          slash ? slash + 1 : path.buf);
+                       break;
+
+               case IS_INSIDE_GITDIR:
+                       goto skip_this_path;
+
+               default:
+                       BUG("unexpected path classification '%d' for '%s'",
+                           t, path.buf);
+               }
+
+skip_this_path:
+               if (!info->NextEntryOffset)
+                       break;
+               p += info->NextEntryOffset;
+       }
+
+       fsmonitor_publish(state, NULL, &cookie_list);
+       string_list_clear(&cookie_list, 0);
+       strbuf_release(&path);
+       return LISTENER_HAVE_DATA_GITDIR;
+}
+
+void fsm_listen__loop(struct fsmonitor_daemon_state *state)
+{
+       struct fsmonitor_daemon_backend_data *data = state->backend_data;
+       DWORD dwWait;
+       int result;
+
+       state->error_code = 0;
+
+       if (start_rdcw_watch(data, data->watch_worktree) == -1)
+               goto force_error_stop;
+
+       if (data->watch_gitdir &&
+           start_rdcw_watch(data, data->watch_gitdir) == -1)
+               goto force_error_stop;
+
+       for (;;) {
+               dwWait = WaitForMultipleObjects(data->nr_listener_handles,
+                                               data->hListener,
+                                               FALSE, INFINITE);
+
+               if (dwWait == WAIT_OBJECT_0 + LISTENER_HAVE_DATA_WORKTREE) {
+                       result = recv_rdcw_watch(data->watch_worktree);
+                       if (result == -1) {
+                               /* hard error */
+                               goto force_error_stop;
+                       }
+                       if (result == -2) {
+                               /* retryable error */
+                               if (start_rdcw_watch(data, data->watch_worktree) == -1)
+                                       goto force_error_stop;
+                               continue;
+                       }
+
+                       /* have data */
+                       if (process_worktree_events(state) == LISTENER_SHUTDOWN)
+                               goto force_shutdown;
+                       if (start_rdcw_watch(data, data->watch_worktree) == -1)
+                               goto force_error_stop;
+                       continue;
+               }
+
+               if (dwWait == WAIT_OBJECT_0 + LISTENER_HAVE_DATA_GITDIR) {
+                       result = recv_rdcw_watch(data->watch_gitdir);
+                       if (result == -1) {
+                               /* hard error */
+                               goto force_error_stop;
+                       }
+                       if (result == -2) {
+                               /* retryable error */
+                               if (start_rdcw_watch(data, data->watch_gitdir) == -1)
+                                       goto force_error_stop;
+                               continue;
+                       }
+
+                       /* have data */
+                       if (process_gitdir_events(state) == LISTENER_SHUTDOWN)
+                               goto force_shutdown;
+                       if (start_rdcw_watch(data, data->watch_gitdir) == -1)
+                               goto force_error_stop;
+                       continue;
+               }
+
+               if (dwWait == WAIT_OBJECT_0 + LISTENER_SHUTDOWN)
+                       goto clean_shutdown;
+
+               error(_("could not read directory changes [GLE %ld]"),
+                     GetLastError());
+               goto force_error_stop;
+       }
+
+force_error_stop:
+       state->error_code = -1;
+
+force_shutdown:
+       /*
+        * Tell the IPC thead pool to stop (which completes the await
+        * in the main thread (which will also signal this thread (if
+        * we are still alive))).
+        */
+       ipc_server_stop_async(state->ipc_server_data);
+
+clean_shutdown:
+       cancel_rdcw_watch(data->watch_worktree);
+       cancel_rdcw_watch(data->watch_gitdir);
+}
+
+int fsm_listen__ctor(struct fsmonitor_daemon_state *state)
+{
+       struct fsmonitor_daemon_backend_data *data;
+
+       CALLOC_ARRAY(data, 1);
+
+       data->hEventShutdown = CreateEvent(NULL, TRUE, FALSE, NULL);
+
+       data->watch_worktree = create_watch(state,
+                                           state->path_worktree_watch.buf);
+       if (!data->watch_worktree)
+               goto failed;
+
+       if (state->nr_paths_watching > 1) {
+               data->watch_gitdir = create_watch(state,
+                                                 state->path_gitdir_watch.buf);
+               if (!data->watch_gitdir)
+                       goto failed;
+       }
+
+       data->hListener[LISTENER_SHUTDOWN] = data->hEventShutdown;
+       data->nr_listener_handles++;
+
+       data->hListener[LISTENER_HAVE_DATA_WORKTREE] =
+               data->watch_worktree->hEvent;
+       data->nr_listener_handles++;
+
+       if (data->watch_gitdir) {
+               data->hListener[LISTENER_HAVE_DATA_GITDIR] =
+                       data->watch_gitdir->hEvent;
+               data->nr_listener_handles++;
+       }
+
+       state->backend_data = data;
+       return 0;
+
+failed:
+       CloseHandle(data->hEventShutdown);
+       destroy_watch(data->watch_worktree);
+       destroy_watch(data->watch_gitdir);
+
+       return -1;
+}
+
+void fsm_listen__dtor(struct fsmonitor_daemon_state *state)
+{
+       struct fsmonitor_daemon_backend_data *data;
+
+       if (!state || !state->backend_data)
+               return;
+
+       data = state->backend_data;
+
+       CloseHandle(data->hEventShutdown);
+       destroy_watch(data->watch_worktree);
+       destroy_watch(data->watch_gitdir);
+
+       FREE_AND_NULL(state->backend_data);
+}
diff --git a/compat/fsmonitor/fsm-listen.h b/compat/fsmonitor/fsm-listen.h
new file mode 100644 (file)
index 0000000..f053934
--- /dev/null
@@ -0,0 +1,49 @@
+#ifndef FSM_LISTEN_H
+#define FSM_LISTEN_H
+
+/* This needs to be implemented by each backend */
+
+#ifdef HAVE_FSMONITOR_DAEMON_BACKEND
+
+struct fsmonitor_daemon_state;
+
+/*
+ * Initialize platform-specific data for the fsmonitor listener thread.
+ * This will be called from the main thread PRIOR to staring the
+ * fsmonitor_fs_listener thread.
+ *
+ * Returns 0 if successful.
+ * Returns -1 otherwise.
+ */
+int fsm_listen__ctor(struct fsmonitor_daemon_state *state);
+
+/*
+ * Cleanup platform-specific data for the fsmonitor listener thread.
+ * This will be called from the main thread AFTER joining the listener.
+ */
+void fsm_listen__dtor(struct fsmonitor_daemon_state *state);
+
+/*
+ * The main body of the platform-specific event loop to watch for
+ * filesystem events.  This will run in the fsmonitor_fs_listen thread.
+ *
+ * It should call `ipc_server_stop_async()` if the listener thread
+ * prematurely terminates (because of a filesystem error or if it
+ * detects that the .git directory has been deleted).  (It should NOT
+ * do so if the listener thread receives a normal shutdown signal from
+ * the IPC layer.)
+ *
+ * It should set `state->error_code` to -1 if the daemon should exit
+ * with an error.
+ */
+void fsm_listen__loop(struct fsmonitor_daemon_state *state);
+
+/*
+ * Gently request that the fsmonitor listener thread shutdown.
+ * It does not wait for it to stop.  The caller should do a JOIN
+ * to wait for it.
+ */
+void fsm_listen__stop_async(struct fsmonitor_daemon_state *state);
+
+#endif /* HAVE_FSMONITOR_DAEMON_BACKEND */
+#endif /* FSM_LISTEN_H */
index 41fc16310c8018057be238efdd348fdee94616bd..6fe80fdf014021ee1620e941a5214aba92ba4ca5 100644 (file)
@@ -962,9 +962,11 @@ static inline void time_t_to_filetime(time_t t, FILETIME *ft)
 int mingw_utime (const char *file_name, const struct utimbuf *times)
 {
        FILETIME mft, aft;
-       int fh, rc;
+       int rc;
        DWORD attrs;
        wchar_t wfilename[MAX_PATH];
+       HANDLE osfilehandle;
+
        if (xutftowcs_path(wfilename, file_name) < 0)
                return -1;
 
@@ -976,7 +978,17 @@ int mingw_utime (const char *file_name, const struct utimbuf *times)
                SetFileAttributesW(wfilename, attrs & ~FILE_ATTRIBUTE_READONLY);
        }
 
-       if ((fh = _wopen(wfilename, O_RDWR | O_BINARY)) < 0) {
+       osfilehandle = CreateFileW(wfilename,
+                                  FILE_WRITE_ATTRIBUTES,
+                                  0 /*FileShare.None*/,
+                                  NULL,
+                                  OPEN_EXISTING,
+                                  (attrs != INVALID_FILE_ATTRIBUTES &&
+                                       (attrs & FILE_ATTRIBUTE_DIRECTORY)) ?
+                                       FILE_FLAG_BACKUP_SEMANTICS : 0,
+                                  NULL);
+       if (osfilehandle == INVALID_HANDLE_VALUE) {
+               errno = err_win_to_posix(GetLastError());
                rc = -1;
                goto revert_attrs;
        }
@@ -988,12 +1000,15 @@ int mingw_utime (const char *file_name, const struct utimbuf *times)
                GetSystemTimeAsFileTime(&mft);
                aft = mft;
        }
-       if (!SetFileTime((HANDLE)_get_osfhandle(fh), NULL, &aft, &mft)) {
+
+       if (!SetFileTime(osfilehandle, NULL, &aft, &mft)) {
                errno = EINVAL;
                rc = -1;
        } else
                rc = 0;
-       close(fh);
+
+       if (osfilehandle != INVALID_HANDLE_VALUE)
+               CloseHandle(osfilehandle);
 
 revert_attrs:
        if (attrs != INVALID_FILE_ATTRIBUTES &&
index ffa53a44b016596520ce701664dccac228b2cfb7..494cc8de92221bab3c71d49baaf17f9cd0faeb04 100644 (file)
@@ -329,6 +329,9 @@ int mingw_getpagesize(void);
 #define getpagesize mingw_getpagesize
 #endif
 
+int win32_fsync_no_flush(int fd);
+#define fsync_no_flush win32_fsync_no_flush
+
 struct rlimit {
        unsigned int rlim_cur;
 };
index 52d1f0a73dd8292d8e02d7b9135d6f8c1606e324..0f7ff30f5f37b39d8f112f18b207db873f4b19fb 100644 (file)
@@ -49,21 +49,15 @@ int git_qsort_s(void *b, size_t n, size_t s,
                int (*cmp)(const void *, const void *, void *), void *ctx)
 {
        const size_t size = st_mult(n, s);
-       char buf[1024];
+       char *tmp;
 
        if (!n)
                return 0;
        if (!b || !cmp)
                return -1;
 
-       if (size < sizeof(buf)) {
-               /* The temporary array fits on the small on-stack buffer. */
-               msort_with_tmp(b, n, s, cmp, buf, ctx);
-       } else {
-               /* It's somewhat large, so malloc it.  */
-               char *tmp = xmalloc(size);
-               msort_with_tmp(b, n, s, cmp, tmp, ctx);
-               free(tmp);
-       }
+       tmp = xmalloc(size);
+       msort_with_tmp(b, n, s, cmp, tmp, ctx);
+       free(tmp);
        return 0;
 }
index 5b903e7c7e3e32c25e59efcc151217d00d243d65..7db330c52dcc2326f245f8984e259f0a8dac1294 100644 (file)
@@ -1,4 +1,4 @@
-#include "git-compat-util.h"
+#include "cache.h"
 #include "compat/terminal.h"
 #include "sigchain.h"
 #include "strbuf.h"
@@ -11,7 +11,7 @@
 static void restore_term_on_signal(int sig)
 {
        restore_term();
-       sigchain_pop(sig);
+       /* restore_term calls sigchain_pop_common */
        raise(sig);
 }
 
@@ -20,55 +20,227 @@ static void restore_term_on_signal(int sig)
 #define INPUT_PATH "/dev/tty"
 #define OUTPUT_PATH "/dev/tty"
 
+static volatile sig_atomic_t term_fd_needs_closing;
 static int term_fd = -1;
 static struct termios old_term;
 
+static const char *background_resume_msg;
+static const char *restore_error_msg;
+static volatile sig_atomic_t ttou_received;
+
+/* async safe error function for use by signal handlers. */
+static void write_err(const char *msg)
+{
+       write_in_full(2, "error: ", strlen("error: "));
+       write_in_full(2, msg, strlen(msg));
+       write_in_full(2, "\n", 1);
+}
+
+static void print_background_resume_msg(int signo)
+{
+       int saved_errno = errno;
+       sigset_t mask;
+       struct sigaction old_sa;
+       struct sigaction sa = { .sa_handler = SIG_DFL };
+
+       ttou_received = 1;
+       write_err(background_resume_msg);
+       sigaction(signo, &sa, &old_sa);
+       raise(signo);
+       sigemptyset(&mask);
+       sigaddset(&mask, signo);
+       sigprocmask(SIG_UNBLOCK, &mask, NULL);
+       /* Stopped here */
+       sigprocmask(SIG_BLOCK, &mask, NULL);
+       sigaction(signo, &old_sa, NULL);
+       errno = saved_errno;
+}
+
+static void restore_terminal_on_suspend(int signo)
+{
+       int saved_errno = errno;
+       int res;
+       struct termios t;
+       sigset_t mask;
+       struct sigaction old_sa;
+       struct sigaction sa = { .sa_handler = SIG_DFL };
+       int can_restore = 1;
+
+       if (tcgetattr(term_fd, &t) < 0)
+               can_restore = 0;
+
+       if (tcsetattr(term_fd, TCSAFLUSH, &old_term) < 0)
+               write_err(restore_error_msg);
+
+       sigaction(signo, &sa, &old_sa);
+       raise(signo);
+       sigemptyset(&mask);
+       sigaddset(&mask, signo);
+       sigprocmask(SIG_UNBLOCK, &mask, NULL);
+       /* Stopped here */
+       sigprocmask(SIG_BLOCK, &mask, NULL);
+       sigaction(signo, &old_sa, NULL);
+       if (!can_restore) {
+               write_err(restore_error_msg);
+               goto out;
+       }
+       /*
+        * If we resume in the background then we receive SIGTTOU when calling
+        * tcsetattr() below. Set up a handler to print an error message in that
+        * case.
+        */
+       sigemptyset(&mask);
+       sigaddset(&mask, SIGTTOU);
+       sa.sa_mask = old_sa.sa_mask;
+       sa.sa_handler = print_background_resume_msg;
+       sa.sa_flags = SA_RESTART;
+       sigaction(SIGTTOU, &sa, &old_sa);
+ again:
+       ttou_received = 0;
+       sigprocmask(SIG_UNBLOCK, &mask, NULL);
+       res = tcsetattr(term_fd, TCSAFLUSH, &t);
+       sigprocmask(SIG_BLOCK, &mask, NULL);
+       if (ttou_received)
+               goto again;
+       else if (res < 0)
+               write_err(restore_error_msg);
+       sigaction(SIGTTOU, &old_sa, NULL);
+ out:
+       errno = saved_errno;
+}
+
+static void reset_job_signals(void)
+{
+       if (restore_error_msg) {
+               signal(SIGTTIN, SIG_DFL);
+               signal(SIGTTOU, SIG_DFL);
+               signal(SIGTSTP, SIG_DFL);
+               restore_error_msg = NULL;
+               background_resume_msg = NULL;
+       }
+}
+
+static void close_term_fd(void)
+{
+       if (term_fd_needs_closing)
+               close(term_fd);
+       term_fd_needs_closing = 0;
+       term_fd = -1;
+}
+
 void restore_term(void)
 {
        if (term_fd < 0)
                return;
 
        tcsetattr(term_fd, TCSAFLUSH, &old_term);
-       close(term_fd);
-       term_fd = -1;
+       close_term_fd();
+       sigchain_pop_common();
+       reset_job_signals();
 }
 
-int save_term(int full_duplex)
+int save_term(enum save_term_flags flags)
 {
+       struct sigaction sa;
+
        if (term_fd < 0)
-               term_fd = open("/dev/tty", O_RDWR);
+               term_fd = ((flags & SAVE_TERM_STDIN)
+                          ? 0
+                          : open("/dev/tty", O_RDWR));
+       if (term_fd < 0)
+               return -1;
+       term_fd_needs_closing = !(flags & SAVE_TERM_STDIN);
+       if (tcgetattr(term_fd, &old_term) < 0) {
+               close_term_fd();
+               return -1;
+       }
+       sigchain_push_common(restore_term_on_signal);
+       /*
+        * If job control is disabled then the shell will have set the
+        * disposition of SIGTSTP to SIG_IGN.
+        */
+       sigaction(SIGTSTP, NULL, &sa);
+       if (sa.sa_handler == SIG_IGN)
+               return 0;
+
+       /* avoid calling gettext() from signal handler */
+       background_resume_msg = _("cannot resume in the background, please use 'fg' to resume");
+       restore_error_msg = _("cannot restore terminal settings");
+       sa.sa_handler = restore_terminal_on_suspend;
+       sa.sa_flags = SA_RESTART;
+       sigemptyset(&sa.sa_mask);
+       sigaddset(&sa.sa_mask, SIGTSTP);
+       sigaddset(&sa.sa_mask, SIGTTIN);
+       sigaddset(&sa.sa_mask, SIGTTOU);
+       sigaction(SIGTSTP, &sa, NULL);
+       sigaction(SIGTTIN, &sa, NULL);
+       sigaction(SIGTTOU, &sa, NULL);
 
-       return (term_fd < 0) ? -1 : tcgetattr(term_fd, &old_term);
+       return 0;
 }
 
-static int disable_bits(tcflag_t bits)
+static int disable_bits(enum save_term_flags flags, tcflag_t bits)
 {
        struct termios t;
 
-       if (save_term(0) < 0)
-               goto error;
+       if (save_term(flags) < 0)
+               return -1;
 
        t = old_term;
-       sigchain_push_common(restore_term_on_signal);
 
        t.c_lflag &= ~bits;
+       if (bits & ICANON) {
+               t.c_cc[VMIN] = 1;
+               t.c_cc[VTIME] = 0;
+       }
        if (!tcsetattr(term_fd, TCSAFLUSH, &t))
                return 0;
 
-error:
-       close(term_fd);
-       term_fd = -1;
+       sigchain_pop_common();
+       reset_job_signals();
+       close_term_fd();
        return -1;
 }
 
-static int disable_echo(void)
+static int disable_echo(enum save_term_flags flags)
 {
-       return disable_bits(ECHO);
+       return disable_bits(flags, ECHO);
 }
 
-static int enable_non_canonical(void)
+static int enable_non_canonical(enum save_term_flags flags)
 {
-       return disable_bits(ICANON | ECHO);
+       return disable_bits(flags, ICANON | ECHO);
+}
+
+/*
+ * On macos it is not possible to use poll() with a terminal so use select
+ * instead.
+ */
+static int getchar_with_timeout(int timeout)
+{
+       struct timeval tv, *tvp = NULL;
+       fd_set readfds;
+       int res;
+
+ again:
+       if (timeout >= 0) {
+               tv.tv_sec = timeout / 1000;
+               tv.tv_usec = (timeout % 1000) * 1000;
+               tvp = &tv;
+       }
+
+       FD_ZERO(&readfds);
+       FD_SET(0, &readfds);
+       res = select(1, &readfds, NULL, NULL, tvp);
+       if (!res)
+               return EOF;
+       if (res < 0) {
+               if (errno == EINTR)
+                       goto again;
+               else
+                       return EOF;
+       }
+       return getchar();
 }
 
 #elif defined(GIT_WINDOWS_NATIVE)
@@ -100,6 +272,8 @@ void restore_term(void)
                return;
        }
 
+       sigchain_pop_common();
+
        if (hconin == INVALID_HANDLE_VALUE)
                return;
 
@@ -114,7 +288,7 @@ void restore_term(void)
        hconin = hconout = INVALID_HANDLE_VALUE;
 }
 
-int save_term(int full_duplex)
+int save_term(enum save_term_flags flags)
 {
        hconin = CreateFileA("CONIN$", GENERIC_READ | GENERIC_WRITE,
            FILE_SHARE_READ, NULL, OPEN_EXISTING,
@@ -122,7 +296,7 @@ int save_term(int full_duplex)
        if (hconin == INVALID_HANDLE_VALUE)
                return -1;
 
-       if (full_duplex) {
+       if (flags & SAVE_TERM_DUPLEX) {
                hconout = CreateFileA("CONOUT$", GENERIC_READ | GENERIC_WRITE,
                        FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
                        FILE_ATTRIBUTE_NORMAL, NULL);
@@ -134,6 +308,7 @@ int save_term(int full_duplex)
 
        GetConsoleMode(hconin, &cmode_in);
        use_stty = 0;
+       sigchain_push_common(restore_term_on_signal);
        return 0;
 error:
        CloseHandle(hconin);
@@ -141,7 +316,7 @@ error:
        return -1;
 }
 
-static int disable_bits(DWORD bits)
+static int disable_bits(enum save_term_flags flags, DWORD bits)
 {
        if (use_stty) {
                struct child_process cp = CHILD_PROCESS_INIT;
@@ -150,7 +325,11 @@ static int disable_bits(DWORD bits)
 
                if (bits & ENABLE_LINE_INPUT) {
                        string_list_append(&stty_restore, "icanon");
-                       strvec_push(&cp.args, "-icanon");
+                       /*
+                        * POSIX allows VMIN and VTIME to overlap with VEOF and
+                        * VEOL - let's hope that is not the case on windows.
+                        */
+                       strvec_pushl(&cp.args, "-icanon", "min", "1", "time", "0", NULL);
                }
 
                if (bits & ENABLE_ECHO_INPUT) {
@@ -174,27 +353,28 @@ static int disable_bits(DWORD bits)
                use_stty = 0;
        }
 
-       if (save_term(0) < 0)
+       if (save_term(flags) < 0)
                return -1;
 
-       sigchain_push_common(restore_term_on_signal);
        if (!SetConsoleMode(hconin, cmode_in & ~bits)) {
                CloseHandle(hconin);
                hconin = INVALID_HANDLE_VALUE;
+               sigchain_pop_common();
                return -1;
        }
 
        return 0;
 }
 
-static int disable_echo(void)
+static int disable_echo(enum save_term_flags flags)
 {
-       return disable_bits(ENABLE_ECHO_INPUT);
+       return disable_bits(flags, ENABLE_ECHO_INPUT);
 }
 
-static int enable_non_canonical(void)
+static int enable_non_canonical(enum save_term_flags flags)
 {
-       return disable_bits(ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT);
+       return disable_bits(flags,
+                           ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT);
 }
 
 /*
@@ -228,6 +408,16 @@ static int mingw_getchar(void)
 }
 #define getchar mingw_getchar
 
+static int getchar_with_timeout(int timeout)
+{
+       struct pollfd pfd = { .fd = 0, .events = POLLIN };
+
+       if (poll(&pfd, 1, timeout) < 1)
+               return EOF;
+
+       return getchar();
+}
+
 #endif
 
 #ifndef FORCE_TEXT
@@ -250,7 +440,7 @@ char *git_terminal_prompt(const char *prompt, int echo)
                return NULL;
        }
 
-       if (!echo && disable_echo()) {
+       if (!echo && disable_echo(0)) {
                fclose(input_fh);
                fclose(output_fh);
                return NULL;
@@ -344,7 +534,7 @@ int read_key_without_echo(struct strbuf *buf)
        static int warning_displayed;
        int ch;
 
-       if (warning_displayed || enable_non_canonical() < 0) {
+       if (warning_displayed || enable_non_canonical(SAVE_TERM_STDIN) < 0) {
                if (!warning_displayed) {
                        warning("reading single keystrokes not supported on "
                                "this platform; reading line instead");
@@ -378,14 +568,9 @@ int read_key_without_echo(struct strbuf *buf)
                 * half a second when we know that the sequence is complete.
                 */
                while (!is_known_escape_sequence(buf->buf)) {
-                       struct pollfd pfd = { .fd = 0, .events = POLLIN };
-
-                       if (poll(&pfd, 1, 500) < 1)
-                               break;
-
-                       ch = getchar();
+                       ch = getchar_with_timeout(500);
                        if (ch == EOF)
-                               return 0;
+                               break;
                        strbuf_addch(buf, ch);
                }
        }
@@ -396,10 +581,10 @@ int read_key_without_echo(struct strbuf *buf)
 
 #else
 
-int save_term(int full_duplex)
+int save_term(enum save_term_flags flags)
 {
-       /* full_duplex == 1, but no support available */
-       return -full_duplex;
+       /* no duplex support available */
+       return -!!(flags & SAVE_TERM_DUPLEX);
 }
 
 void restore_term(void)
index e1770c575b2c5c501d3fbf3bcbe3873d288a1c92..79ed00cf61ae1abfa2f433a174dc38ca5fc81706 100644 (file)
@@ -1,7 +1,22 @@
 #ifndef COMPAT_TERMINAL_H
 #define COMPAT_TERMINAL_H
 
-int save_term(int full_duplex);
+enum save_term_flags {
+       /* Save input and output settings */
+       SAVE_TERM_DUPLEX = 1 << 0,
+       /* Save stdin rather than /dev/tty (fails if stdin is not a terminal) */
+       SAVE_TERM_STDIN  = 1 << 1,
+};
+
+/*
+ * Save the terminal attributes so they can be restored later by a
+ * call to restore_term(). Note that every successful call to
+ * save_term() must be matched by a call to restore_term() even if the
+ * attributes have not been changed. Returns 0 on success, -1 on
+ * failure.
+ */
+int save_term(enum save_term_flags flags);
+/* Restore the terminal attributes that were saved with save_term() */
 void restore_term(void);
 
 char *git_terminal_prompt(const char *prompt, int echo);
diff --git a/compat/win32/flush.c b/compat/win32/flush.c
new file mode 100644 (file)
index 0000000..291f90e
--- /dev/null
@@ -0,0 +1,28 @@
+#include "git-compat-util.h"
+#include <winternl.h>
+#include "lazyload.h"
+
+int win32_fsync_no_flush(int fd)
+{
+       IO_STATUS_BLOCK io_status;
+
+#define FLUSH_FLAGS_FILE_DATA_ONLY 1
+
+       DECLARE_PROC_ADDR(ntdll.dll, NTSTATUS, NTAPI, NtFlushBuffersFileEx,
+                        HANDLE FileHandle, ULONG Flags, PVOID Parameters, ULONG ParameterSize,
+                        PIO_STATUS_BLOCK IoStatusBlock);
+
+       if (!INIT_PROC_ADDR(NtFlushBuffersFileEx)) {
+               errno = ENOSYS;
+               return -1;
+       }
+
+       memset(&io_status, 0, sizeof(io_status));
+       if (NtFlushBuffersFileEx((HANDLE)_get_osfhandle(fd), FLUSH_FLAGS_FILE_DATA_ONLY,
+                               NULL, 0, &io_status)) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       return 0;
+}
index 4fceecf14ce599b585801bcb1ebc0b4e2c22af06..3abe8dd5a2711b5268cb5efe623d8c027f0d3d83 100644 (file)
@@ -3,6 +3,7 @@
  */
 
 #undef NOGDI
+
 #include "../git-compat-util.h"
 #include <wingdi.h>
 #include <winreg.h>
index 722610b971804abf47130d07bbd6c0b084c5036f..77a1b08048463da25ba8d6b36031ccb7e8cce7b5 100644 (file)
@@ -1,3 +1,6 @@
+#include "git-compat-util.h"
+
+#if ZLIB_VERNUM < 0x1290
 /* taken from zlib's uncompr.c
 
    commit cacf7f1d4e3d44d871b605da3b647f07d718623f
 
 */
 
-#include "../reftable/system.h"
-#define z_const
-
 /*
  * Copyright (C) 1995-2003, 2010, 2014, 2016 Jean-loup Gailly, Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
-#include <zlib.h>
-
 /* clang-format off */
 
 /* ===========================================================================
@@ -93,3 +91,6 @@ int ZEXPORT uncompress2 (
           err == Z_BUF_ERROR && left + stream.avail_out ? Z_DATA_ERROR :
           err;
 }
+#else
+static void *dummy_variable = &dummy_variable;
+#endif
index 6a01938222f65e574ee7dfac8d4005fc1c350c20..ab980722a019364c1744b1821e19d3b250b24ea5 100644 (file)
--- a/config.c
+++ b/config.c
@@ -6,6 +6,7 @@
  *
  */
 #include "cache.h"
+#include "date.h"
 #include "branch.h"
 #include "config.h"
 #include "environment.h"
@@ -21,6 +22,7 @@
 #include "dir.h"
 #include "color.h"
 #include "refs.h"
+#include "worktree.h"
 
 struct config_source {
        struct config_source *prev;
@@ -120,6 +122,22 @@ static long config_buf_ftell(struct config_source *conf)
        return conf->u.buf.pos;
 }
 
+struct config_include_data {
+       int depth;
+       config_fn_t fn;
+       void *data;
+       const struct config_options *opts;
+       struct git_config_source *config_source;
+
+       /*
+        * All remote URLs discovered when reading all config files.
+        */
+       struct string_list *remote_urls;
+};
+#define CONFIG_INCLUDE_INIT { 0 }
+
+static int git_config_include(const char *var, const char *value, void *data);
+
 #define MAX_INCLUDE_DEPTH 10
 static const char include_depth_advice[] = N_(
 "exceeded maximum include depth (%d) while including\n"
@@ -294,9 +312,92 @@ static int include_by_branch(const char *cond, size_t cond_len)
        return ret;
 }
 
-static int include_condition_is_true(const struct config_options *opts,
+static int add_remote_url(const char *var, const char *value, void *data)
+{
+       struct string_list *remote_urls = data;
+       const char *remote_name;
+       size_t remote_name_len;
+       const char *key;
+
+       if (!parse_config_key(var, "remote", &remote_name, &remote_name_len,
+                             &key) &&
+           remote_name &&
+           !strcmp(key, "url"))
+               string_list_append(remote_urls, value);
+       return 0;
+}
+
+static void populate_remote_urls(struct config_include_data *inc)
+{
+       struct config_options opts;
+
+       struct config_source *store_cf = cf;
+       struct key_value_info *store_kvi = current_config_kvi;
+       enum config_scope store_scope = current_parsing_scope;
+
+       opts = *inc->opts;
+       opts.unconditional_remote_url = 1;
+
+       cf = NULL;
+       current_config_kvi = NULL;
+       current_parsing_scope = 0;
+
+       inc->remote_urls = xmalloc(sizeof(*inc->remote_urls));
+       string_list_init_dup(inc->remote_urls);
+       config_with_options(add_remote_url, inc->remote_urls, inc->config_source, &opts);
+
+       cf = store_cf;
+       current_config_kvi = store_kvi;
+       current_parsing_scope = store_scope;
+}
+
+static int forbid_remote_url(const char *var, const char *value, void *data)
+{
+       const char *remote_name;
+       size_t remote_name_len;
+       const char *key;
+
+       if (!parse_config_key(var, "remote", &remote_name, &remote_name_len,
+                             &key) &&
+           remote_name &&
+           !strcmp(key, "url"))
+               die(_("remote URLs cannot be configured in file directly or indirectly included by includeIf.hasconfig:remote.*.url"));
+       return 0;
+}
+
+static int at_least_one_url_matches_glob(const char *glob, int glob_len,
+                                        struct string_list *remote_urls)
+{
+       struct strbuf pattern = STRBUF_INIT;
+       struct string_list_item *url_item;
+       int found = 0;
+
+       strbuf_add(&pattern, glob, glob_len);
+       for_each_string_list_item(url_item, remote_urls) {
+               if (!wildmatch(pattern.buf, url_item->string, WM_PATHNAME)) {
+                       found = 1;
+                       break;
+               }
+       }
+       strbuf_release(&pattern);
+       return found;
+}
+
+static int include_by_remote_url(struct config_include_data *inc,
+               const char *cond, size_t cond_len)
+{
+       if (inc->opts->unconditional_remote_url)
+               return 1;
+       if (!inc->remote_urls)
+               populate_remote_urls(inc);
+       return at_least_one_url_matches_glob(cond, cond_len,
+                                            inc->remote_urls);
+}
+
+static int include_condition_is_true(struct config_include_data *inc,
                                     const char *cond, size_t cond_len)
 {
+       const struct config_options *opts = inc->opts;
 
        if (skip_prefix_mem(cond, cond_len, "gitdir:", &cond, &cond_len))
                return include_by_gitdir(opts, cond, cond_len, 0);
@@ -304,12 +405,15 @@ static int include_condition_is_true(const struct config_options *opts,
                return include_by_gitdir(opts, cond, cond_len, 1);
        else if (skip_prefix_mem(cond, cond_len, "onbranch:", &cond, &cond_len))
                return include_by_branch(cond, cond_len);
+       else if (skip_prefix_mem(cond, cond_len, "hasconfig:remote.*.url:", &cond,
+                                  &cond_len))
+               return include_by_remote_url(inc, cond, cond_len);
 
        /* unknown conditionals are always false */
        return 0;
 }
 
-int git_config_include(const char *var, const char *value, void *data)
+static int git_config_include(const char *var, const char *value, void *data)
 {
        struct config_include_data *inc = data;
        const char *cond, *key;
@@ -328,9 +432,15 @@ int git_config_include(const char *var, const char *value, void *data)
                ret = handle_path_include(value, inc);
 
        if (!parse_config_key(var, "includeif", &cond, &cond_len, &key) &&
-           (cond && include_condition_is_true(inc->opts, cond, cond_len)) &&
-           !strcmp(key, "path"))
+           cond && include_condition_is_true(inc, cond, cond_len) &&
+           !strcmp(key, "path")) {
+               config_fn_t old_fn = inc->fn;
+
+               if (inc->opts->unconditional_remote_url)
+                       inc->fn = forbid_remote_url;
                ret = handle_path_include(value, inc);
+               inc->fn = old_fn;
+       }
 
        return ret;
 }
@@ -1213,6 +1323,80 @@ static int git_parse_maybe_bool_text(const char *value)
        return -1;
 }
 
+static const struct fsync_component_name {
+       const char *name;
+       enum fsync_component component_bits;
+} fsync_component_names[] = {
+       { "loose-object", FSYNC_COMPONENT_LOOSE_OBJECT },
+       { "pack", FSYNC_COMPONENT_PACK },
+       { "pack-metadata", FSYNC_COMPONENT_PACK_METADATA },
+       { "commit-graph", FSYNC_COMPONENT_COMMIT_GRAPH },
+       { "index", FSYNC_COMPONENT_INDEX },
+       { "objects", FSYNC_COMPONENTS_OBJECTS },
+       { "reference", FSYNC_COMPONENT_REFERENCE },
+       { "derived-metadata", FSYNC_COMPONENTS_DERIVED_METADATA },
+       { "committed", FSYNC_COMPONENTS_COMMITTED },
+       { "added", FSYNC_COMPONENTS_ADDED },
+       { "all", FSYNC_COMPONENTS_ALL },
+};
+
+static enum fsync_component parse_fsync_components(const char *var, const char *string)
+{
+       enum fsync_component current = FSYNC_COMPONENTS_DEFAULT;
+       enum fsync_component positive = 0, negative = 0;
+
+       while (string) {
+               int i;
+               size_t len;
+               const char *ep;
+               int negated = 0;
+               int found = 0;
+
+               string = string + strspn(string, ", \t\n\r");
+               ep = strchrnul(string, ',');
+               len = ep - string;
+               if (!strcmp(string, "none")) {
+                       current = FSYNC_COMPONENT_NONE;
+                       goto next_name;
+               }
+
+               if (*string == '-') {
+                       negated = 1;
+                       string++;
+                       len--;
+                       if (!len)
+                               warning(_("invalid value for variable %s"), var);
+               }
+
+               if (!len)
+                       break;
+
+               for (i = 0; i < ARRAY_SIZE(fsync_component_names); ++i) {
+                       const struct fsync_component_name *n = &fsync_component_names[i];
+
+                       if (strncmp(n->name, string, len))
+                               continue;
+
+                       found = 1;
+                       if (negated)
+                               negative |= n->component_bits;
+                       else
+                               positive |= n->component_bits;
+               }
+
+               if (!found) {
+                       char *component = xstrndup(string, len);
+                       warning(_("ignoring unknown core.fsync component '%s'"), component);
+                       free(component);
+               }
+
+next_name:
+               string = ep;
+       }
+
+       return (current & ~negative) | positive;
+}
+
 int git_parse_maybe_bool(const char *value)
 {
        int v = git_parse_maybe_bool_text(value);
@@ -1490,7 +1674,28 @@ static int git_default_core_config(const char *var, const char *value, void *cb)
                return 0;
        }
 
+       if (!strcmp(var, "core.fsync")) {
+               if (!value)
+                       return config_error_nonbool(var);
+               fsync_components = parse_fsync_components(var, value);
+               return 0;
+       }
+
+       if (!strcmp(var, "core.fsyncmethod")) {
+               if (!value)
+                       return config_error_nonbool(var);
+               if (!strcmp(value, "fsync"))
+                       fsync_method = FSYNC_METHOD_FSYNC;
+               else if (!strcmp(value, "writeout-only"))
+                       fsync_method = FSYNC_METHOD_WRITEOUT_ONLY;
+               else
+                       warning(_("ignoring unknown core.fsyncMethod value '%s'"), value);
+
+       }
+
        if (!strcmp(var, "core.fsyncobjectfiles")) {
+               if (fsync_object_files < 0)
+                       warning(_("core.fsyncObjectFiles is deprecated; use core.fsync instead"));
                fsync_object_files = git_config_bool(var, value);
                return 0;
        }
@@ -1544,6 +1749,17 @@ static int git_default_core_config(const char *var, const char *value, void *cb)
        return platform_core_config(var, value, cb);
 }
 
+static int git_default_sparse_config(const char *var, const char *value)
+{
+       if (!strcmp(var, "sparse.expectfilesoutsideofpatterns")) {
+               sparse_expect_files_outside_of_patterns = git_config_bool(var, value);
+               return 0;
+       }
+
+       /* Add other config variables here and to Documentation/config/sparse.txt. */
+       return 0;
+}
+
 static int git_default_i18n_config(const char *var, const char *value)
 {
        if (!strcmp(var, "i18n.commitencoding"))
@@ -1675,6 +1891,9 @@ int git_default_config(const char *var, const char *value, void *cb)
                return 0;
        }
 
+       if (starts_with(var, "sparse."))
+               return git_default_sparse_config(var, value);
+
        /* Add other config variables here and to Documentation/config.txt. */
        return 0;
 }
@@ -1929,11 +2148,13 @@ int config_with_options(config_fn_t fn, void *data,
                        const struct config_options *opts)
 {
        struct config_include_data inc = CONFIG_INCLUDE_INIT;
+       int ret;
 
        if (opts->respect_includes) {
                inc.fn = fn;
                inc.data = data;
                inc.opts = opts;
+               inc.config_source = config_source;
                fn = git_config_include;
                data = &inc;
        }
@@ -1946,17 +2167,23 @@ int config_with_options(config_fn_t fn, void *data,
         * regular lookup sequence.
         */
        if (config_source && config_source->use_stdin) {
-               return git_config_from_stdin(fn, data);
+               ret = git_config_from_stdin(fn, data);
        } else if (config_source && config_source->file) {
-               return git_config_from_file(fn, config_source->file, data);
+               ret = git_config_from_file(fn, config_source->file, data);
        } else if (config_source && config_source->blob) {
                struct repository *repo = config_source->repo ?
                        config_source->repo : the_repository;
-               return git_config_from_blob_ref(fn, repo, config_source->blob,
+               ret = git_config_from_blob_ref(fn, repo, config_source->blob,
                                                data);
+       } else {
+               ret = do_git_config_sequence(opts, fn, data);
        }
 
-       return do_git_config_sequence(opts, fn, data);
+       if (inc.remote_urls) {
+               string_list_clear(inc.remote_urls, 0);
+               FREE_AND_NULL(inc.remote_urls);
+       }
+       return ret;
 }
 
 static void configset_iter(struct config_set *cs, config_fn_t fn, void *data)
@@ -2178,8 +2405,8 @@ int git_configset_get_string(struct config_set *cs, const char *key, char **dest
                return 1;
 }
 
-int git_configset_get_string_tmp(struct config_set *cs, const char *key,
-                                const char **dest)
+static int git_configset_get_string_tmp(struct config_set *cs, const char *key,
+                                       const char **dest)
 {
        const char *value;
        if (!git_configset_get_value(cs, key, &value)) {
@@ -2508,20 +2735,6 @@ int git_config_get_max_percent_split_change(void)
        return -1; /* default value */
 }
 
-int git_config_get_fsmonitor(void)
-{
-       if (git_config_get_pathname("core.fsmonitor", &core_fsmonitor))
-               core_fsmonitor = getenv("GIT_TEST_FSMONITOR");
-
-       if (core_fsmonitor && !*core_fsmonitor)
-               core_fsmonitor = NULL;
-
-       if (core_fsmonitor)
-               return 1;
-
-       return 0;
-}
-
 int git_config_get_index_threads(int *dest)
 {
        int is_bool, val;
@@ -2884,6 +3097,20 @@ int git_config_set_gently(const char *key, const char *value)
        return git_config_set_multivar_gently(key, value, NULL, 0);
 }
 
+int repo_config_set_worktree_gently(struct repository *r,
+                                   const char *key, const char *value)
+{
+       /* Only use worktree-specific config if it is is already enabled. */
+       if (repository_format_worktree_config) {
+               char *file = repo_git_path(r, "config.worktree");
+               int ret = git_config_set_multivar_in_file_gently(
+                                       file, key, value, NULL, 0);
+               free(file);
+               return ret;
+       }
+       return repo_config_set_multivar_gently(r, key, value, NULL, 0);
+}
+
 void git_config_set(const char *key, const char *value)
 {
        git_config_set_multivar(key, value, NULL, 0);
@@ -3181,14 +3408,28 @@ void git_config_set_multivar_in_file(const char *config_filename,
 int git_config_set_multivar_gently(const char *key, const char *value,
                                   const char *value_pattern, unsigned flags)
 {
-       return git_config_set_multivar_in_file_gently(NULL, key, value, value_pattern,
-                                                     flags);
+       return repo_config_set_multivar_gently(the_repository, key, value,
+                                              value_pattern, flags);
+}
+
+int repo_config_set_multivar_gently(struct repository *r, const char *key,
+                                   const char *value,
+                                   const char *value_pattern, unsigned flags)
+{
+       char *file = repo_git_path(r, "config");
+       int res = git_config_set_multivar_in_file_gently(file,
+                                                        key, value,
+                                                        value_pattern,
+                                                        flags);
+       free(file);
+       return res;
 }
 
 void git_config_set_multivar(const char *key, const char *value,
                             const char *value_pattern, unsigned flags)
 {
-       git_config_set_multivar_in_file(NULL, key, value, value_pattern,
+       git_config_set_multivar_in_file(git_path("config"),
+                                       key, value, value_pattern,
                                        flags);
 }
 
index f119de01309ccf5ce5b0a6434d38fa70c472bab0..7654f61c6349a6e8deec22f4e2c79b35d45059ba 100644 (file)
--- a/config.h
+++ b/config.h
@@ -89,6 +89,15 @@ struct config_options {
        unsigned int ignore_worktree : 1;
        unsigned int ignore_cmdline : 1;
        unsigned int system_gently : 1;
+
+       /*
+        * For internal use. Include all includeif.hasremoteurl paths without
+        * checking if the repo has that remote URL, and when doing so, verify
+        * that files included in this way do not configure any remote URLs
+        * themselves.
+        */
+       unsigned int unconditional_remote_url : 1;
+
        const char *commondir;
        const char *git_dir;
        config_parser_event_fn_t event_fn;
@@ -126,6 +135,8 @@ int git_default_config(const char *, const char *, void *);
 /**
  * Read a specific file in git-config format.
  * This function takes the same callback and data parameters as `git_config`.
+ *
+ * Unlike git_config(), this function does not respect includes.
  */
 int git_config_from_file(config_fn_t fn, const char *, void *);
 
@@ -158,6 +169,8 @@ void read_very_early_config(config_fn_t cb, void *data);
  * will first feed the user-wide one to the callback, and then the
  * repo-specific one; by overwriting, the higher-priority repo-specific
  * value is left at the end).
+ *
+ * Unlike git_config_from_file(), this function respects includes.
  */
 void git_config(config_fn_t fn, void *);
 
@@ -253,6 +266,13 @@ void git_config_set_in_file(const char *, const char *, const char *);
 
 int git_config_set_gently(const char *, const char *);
 
+/**
+ * Write a config value that should apply to the current worktree. If
+ * extensions.worktreeConfig is enabled, then the write will happen in the
+ * current worktree's config. Otherwise, write to the common config file.
+ */
+int repo_config_set_worktree_gently(struct repository *, const char *, const char *);
+
 /**
  * write config values to `.git/config`, takes a key/value pair as parameter.
  */
@@ -281,6 +301,7 @@ int git_config_parse_key(const char *, char **, size_t *);
 
 int git_config_set_multivar_gently(const char *, const char *, const char *, unsigned);
 void git_config_set_multivar(const char *, const char *, const char *, unsigned);
+int repo_config_set_multivar_gently(struct repository *, const char *, const char *, const char *, unsigned);
 int git_config_set_multivar_in_file_gently(const char *, const char *, const char *, const char *, unsigned);
 
 /**
@@ -338,39 +359,6 @@ const char *current_config_origin_type(void);
 const char *current_config_name(void);
 int current_config_line(void);
 
-/**
- * Include Directives
- * ------------------
- *
- * By default, the config parser does not respect include directives.
- * However, a caller can use the special `git_config_include` wrapper
- * callback to support them. To do so, you simply wrap your "real" callback
- * function and data pointer in a `struct config_include_data`, and pass
- * the wrapper to the regular config-reading functions. For example:
- *
- * -------------------------------------------
- * int read_file_with_include(const char *file, config_fn_t fn, void *data)
- * {
- * struct config_include_data inc = CONFIG_INCLUDE_INIT;
- * inc.fn = fn;
- * inc.data = data;
- * return git_config_from_file(git_config_include, file, &inc);
- * }
- * -------------------------------------------
- *
- * `git_config` respects includes automatically. The lower-level
- * `git_config_from_file` does not.
- *
- */
-struct config_include_data {
-       int depth;
-       config_fn_t fn;
-       void *data;
-       const struct config_options *opts;
-};
-#define CONFIG_INCLUDE_INIT { 0 }
-int git_config_include(const char *name, const char *value, void *data);
-
 /*
  * Match and parse a config key of the form:
  *
@@ -486,7 +474,6 @@ void git_configset_clear(struct config_set *cs);
 int git_configset_get_value(struct config_set *cs, const char *key, const char **dest);
 
 int git_configset_get_string(struct config_set *cs, const char *key, char **dest);
-int git_configset_get_string_tmp(struct config_set *cs, const char *key, const char **dest);
 int git_configset_get_int(struct config_set *cs, const char *key, int *dest);
 int git_configset_get_ulong(struct config_set *cs, const char *key, unsigned long *dest);
 int git_configset_get_bool(struct config_set *cs, const char *key, int *dest);
@@ -610,7 +597,6 @@ int git_config_get_pathname(const char *key, const char **dest);
 int git_config_get_index_threads(int *dest);
 int git_config_get_split_index(void);
 int git_config_get_max_percent_split_change(void);
-int git_config_get_fsmonitor(void);
 
 /* This dies if the configured or default date is in the future */
 int git_config_get_expiry(const char *key, const char **output);
index 3deb076d5e31cc5e08132c4047b77a2161251a55..c3104f400b2303fffb7ad21a33853654210ac306 100644 (file)
@@ -65,4 +65,10 @@ DEVELOPER_CFLAGS += -Wno-uninitialized
 endif
 endif
 
+# https://bugzilla.redhat.com/show_bug.cgi?id=2075786
+ifneq ($(filter gcc12,$(COMPILER_FEATURES)),)
+DEVELOPER_CFLAGS += -Wno-error=stringop-overread
+DEVELOPER_CFLAGS += -Wno-error=dangling-pointer
+endif
+
 GIT_TEST_PERL_FATAL_WARNINGS = YesPlease
index c48db45106c8dc0e4138ccb8ecff016f3f7d0faa..259d1511cafb7624c91efc445ab500984bbff870 100644 (file)
@@ -57,6 +57,7 @@ ifeq ($(uname_S),Linux)
        HAVE_CLOCK_MONOTONIC = YesPlease
        # -lrt is needed for clock_gettime on glibc <= 2.16
        NEEDS_LIBRT = YesPlease
+       HAVE_SYNC_FILE_RANGE = YesPlease
        HAVE_GETDELIM = YesPlease
        FREAD_READS_DIRECTORIES = UnfortunatelyYes
        BASIC_CFLAGS += -DHAVE_SYSINFO
@@ -66,7 +67,6 @@ ifeq ($(uname_S),Linux)
        # centos7/rhel7 provides gcc 4.8.5 and zlib 1.2.7.
        ifneq ($(findstring .el7.,$(uname_R)),)
                BASIC_CFLAGS += -std=c99
-               NO_UNCOMPRESS2 = YesPlease
        endif
 endif
 ifeq ($(uname_S),GNU/kFreeBSD)
@@ -146,6 +146,7 @@ ifeq ($(uname_S),Darwin)
        HAVE_BSD_SYSCTL = YesPlease
        FREAD_READS_DIRECTORIES = UnfortunatelyYes
        HAVE_NS_GET_EXECUTABLE_PATH = YesPlease
+       CSPRNG_METHOD = arc4random
 
        # Workaround for `gettext` being keg-only and not even being linked via
        # `brew link --force gettext`, should be obsolete as of
@@ -157,6 +158,16 @@ ifeq ($(uname_S),Darwin)
                        MSGFMT = /usr/local/opt/gettext/bin/msgfmt
                endif
        endif
+
+       # The builtin FSMonitor on MacOS builds upon Simple-IPC.  Both require
+       # Unix domain sockets and PThreads.
+       ifndef NO_PTHREADS
+       ifndef NO_UNIX_SOCKETS
+       FSMONITOR_DAEMON_BACKEND = darwin
+       endif
+       endif
+
+       BASIC_LDFLAGS += -framework CoreServices
 endif
 ifeq ($(uname_S),SunOS)
        NEEDS_SOCKET = YesPlease
@@ -261,15 +272,12 @@ ifeq ($(uname_S),FreeBSD)
        HAVE_PATHS_H = YesPlease
        HAVE_BSD_SYSCTL = YesPlease
        HAVE_BSD_KERN_PROC_SYSCTL = YesPlease
+       CSPRNG_METHOD = arc4random
        PAGER_ENV = LESS=FRX LV=-c MORE=FRX
        FREAD_READS_DIRECTORIES = UnfortunatelyYes
        FILENO_IS_A_MACRO = UnfortunatelyYes
 endif
 ifeq ($(uname_S),OpenBSD)
-       # Versions < 7.0 need compatibility layer
-       ifeq ($(shell expr "$(uname_R)" : "[1-6]\."),2)
-               NO_UNCOMPRESS2 = UnfortunatelyYes
-       endif
        NO_STRCASESTR = YesPlease
        NO_MEMMEM = YesPlease
        USE_ST_TIMESPEC = YesPlease
@@ -279,6 +287,7 @@ ifeq ($(uname_S),OpenBSD)
        HAVE_PATHS_H = YesPlease
        HAVE_BSD_SYSCTL = YesPlease
        HAVE_BSD_KERN_PROC_SYSCTL = YesPlease
+       CSPRNG_METHOD = arc4random
        PROCFS_EXECUTABLE_PATH = /proc/curproc/file
        FREAD_READS_DIRECTORIES = UnfortunatelyYes
        FILENO_IS_A_MACRO = UnfortunatelyYes
@@ -290,6 +299,7 @@ ifeq ($(uname_S),MirBSD)
        NEEDS_LIBICONV = YesPlease
        HAVE_PATHS_H = YesPlease
        HAVE_BSD_SYSCTL = YesPlease
+       CSPRNG_METHOD = arc4random
 endif
 ifeq ($(uname_S),NetBSD)
        ifeq ($(shell expr "$(uname_R)" : '[01]\.'),2)
@@ -301,6 +311,7 @@ ifeq ($(uname_S),NetBSD)
        HAVE_PATHS_H = YesPlease
        HAVE_BSD_SYSCTL = YesPlease
        HAVE_BSD_KERN_PROC_SYSCTL = YesPlease
+       CSPRNG_METHOD = arc4random
        PROCFS_EXECUTABLE_PATH = /proc/curproc/exe
 endif
 ifeq ($(uname_S),AIX)
@@ -430,10 +441,16 @@ ifeq ($(uname_S),Windows)
        NO_STRTOUMAX = YesPlease
        NO_MKDTEMP = YesPlease
        NO_INTTYPES_H = YesPlease
+       CSPRNG_METHOD = rtlgenrandom
        # VS2015 with UCRT claims that snprintf and friends are C99 compliant,
        # so we don't need this:
        #
        #   SNPRINTF_RETURNS_BOGUS = YesPlease
+
+       # The builtin FSMonitor requires Named Pipes and Threads on Windows.
+       # These are always available, so we do not have to conditionally
+       # support it.
+       FSMONITOR_DAEMON_BACKEND = win32
        NO_SVN_TESTS = YesPlease
        RUNTIME_PREFIX = YesPlease
        HAVE_WPGMPTR = YesWeDo
@@ -462,6 +479,7 @@ endif
        CFLAGS =
        BASIC_CFLAGS = -nologo -I. -Icompat/vcbuild/include -DWIN32 -D_CONSOLE -DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE
        COMPAT_OBJS = compat/msvc.o compat/winansi.o \
+               compat/win32/flush.o \
                compat/win32/path-utils.o \
                compat/win32/pthread.o compat/win32/syslog.o \
                compat/win32/trace2_win32_process_info.o \
@@ -525,7 +543,6 @@ ifeq ($(uname_S),Interix)
        endif
 endif
 ifeq ($(uname_S),Minix)
-       NO_UNCOMPRESS2 = YesPlease
        NO_IPV6 = YesPlease
        NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
        NO_NSEC = YesPlease
@@ -581,7 +598,6 @@ ifeq ($(uname_S),NONSTOP_KERNEL)
        NO_SETENV = YesPlease
        NO_UNSETENV = YesPlease
        NO_MKDTEMP = YesPlease
-       NO_UNCOMPRESS2 = YesPlease
        # Currently libiconv-1.9.1.
        OLD_ICONV = UnfortunatelyYes
        NO_REGEX = NeedsStartEnd
@@ -599,6 +615,7 @@ ifeq ($(uname_S),NONSTOP_KERNEL)
        NO_MMAP = YesPlease
        NO_POLL = YesPlease
        NO_INTPTR_T = UnfortunatelyYes
+       CSPRNG_METHOD = openssl
        SANE_TOOL_PATH = /usr/coreutils/bin:/usr/local/bin
        SHELL_PATH = /usr/coreutils/bin/bash
 endif
@@ -619,6 +636,11 @@ ifeq ($(uname_S),MINGW)
        NO_STRTOUMAX = YesPlease
        NO_MKDTEMP = YesPlease
        NO_SVN_TESTS = YesPlease
+
+       # The builtin FSMonitor requires Named Pipes and Threads on Windows.
+       # These are always available, so we do not have to conditionally
+       # support it.
+       FSMONITOR_DAEMON_BACKEND = win32
        RUNTIME_PREFIX = YesPlease
        HAVE_WPGMPTR = YesWeDo
        NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
@@ -634,11 +656,13 @@ ifeq ($(uname_S),MINGW)
        NO_POSIX_GOODIES = UnfortunatelyYes
        DEFAULT_HELP_FORMAT = html
        HAVE_PLATFORM_PROCINFO = YesPlease
+       CSPRNG_METHOD = rtlgenrandom
        BASIC_LDFLAGS += -municode
        COMPAT_CFLAGS += -DNOGDI -Icompat -Icompat/win32
        COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
        COMPAT_OBJS += compat/mingw.o compat/winansi.o \
                compat/win32/trace2_win32_process_info.o \
+               compat/win32/flush.o \
                compat/win32/path-utils.o \
                compat/win32/pthread.o compat/win32/syslog.o \
                compat/win32/dirent.o
@@ -726,7 +750,6 @@ vcxproj:
        git diff-index --cached --quiet HEAD --
 
        # Make .vcxproj files and add them
-       unset QUIET_GEN QUIET_BUILT_IN; \
        perl contrib/buildsystems/generate -g Vcxproj
        git add -f git.sln {*,*/lib,t/helper/*}/*.vcxproj
 
index d60d494ee4c81b7ccbe3a1e36285a41125e56107..316a31d2313380dfe62385da237ef7d4418d11a5 100644 (file)
@@ -664,22 +664,9 @@ AC_LINK_IFELSE([ZLIBTEST_SRC],
        NO_DEFLATE_BOUND=yes])
 LIBS="$old_LIBS"
 
-AC_DEFUN([ZLIBTEST_UNCOMPRESS2_SRC], [
-AC_LANG_PROGRAM([#include <zlib.h>],
- [uncompress2(NULL,NULL,NULL,NULL);])])
-AC_MSG_CHECKING([for uncompress2 in -lz])
-old_LIBS="$LIBS"
-LIBS="$LIBS -lz"
-AC_LINK_IFELSE([ZLIBTEST_UNCOMPRESS2_SRC],
-       [AC_MSG_RESULT([yes])],
-       [AC_MSG_RESULT([no])
-       NO_UNCOMPRESS2=yes])
-LIBS="$old_LIBS"
-
 GIT_UNSTASH_FLAGS($ZLIB_PATH)
 
 GIT_CONF_SUBST([NO_DEFLATE_BOUND])
-GIT_CONF_SUBST([NO_UNCOMPRESS2])
 
 #
 # Define NEEDS_SOCKET if linking with libc is not enough (SunOS,
@@ -1095,6 +1082,14 @@ AC_COMPILE_IFELSE([CLOCK_MONOTONIC_SRC],
        [AC_MSG_RESULT([no])
        HAVE_CLOCK_MONOTONIC=])
 GIT_CONF_SUBST([HAVE_CLOCK_MONOTONIC])
+
+#
+# Define HAVE_SYNC_FILE_RANGE=YesPlease if sync_file_range is available.
+GIT_CHECK_FUNC(sync_file_range,
+       [HAVE_SYNC_FILE_RANGE=YesPlease],
+       [HAVE_SYNC_FILE_RANGE=])
+GIT_CONF_SUBST([HAVE_SYNC_FILE_RANGE])
+
 #
 # Define NO_SETITIMER if you don't have setitimer.
 GIT_CHECK_FUNC(setitimer,
index eaf7d6d26187f7265e507bca6ba8d6bf5110f26b..afc79a6236e8d5fa7d4f6092c0e89d45e46cba41 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -379,7 +379,7 @@ struct ref **get_remote_heads(struct packet_reader *reader,
 
 /* Returns 1 when a valid ref has been added to `list`, 0 otherwise */
 static int process_ref_v2(struct packet_reader *reader, struct ref ***list,
-                         char **unborn_head_target)
+                         const char **unborn_head_target)
 {
        int ret = 1;
        int i = 0;
@@ -483,7 +483,7 @@ struct ref **get_remote_refs(int fd_out, struct packet_reader *reader,
        const char *hash_name;
        struct strvec *ref_prefixes = transport_options ?
                &transport_options->ref_prefixes : NULL;
-       char **unborn_head_target = transport_options ?
+       const char **unborn_head_target = transport_options ?
                &transport_options->unborn_head_target : NULL;
        *list = NULL;
 
index 5100f56bb37a41f82f895cb14f6311d5081a3482..185f56f414f4b75109857cdf9d4a0a240e2069b6 100644 (file)
@@ -260,11 +260,19 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
                                _CONSOLE DETECT_MSYS_TTY STRIP_EXTENSION=".exe"  NO_SYMLINK_HEAD UNRELIABLE_FSTAT
                                NOGDI OBJECT_CREATION_MODE=1 __USE_MINGW_ANSI_STDIO=0
                                USE_NED_ALLOCATOR OVERRIDE_STRDUP MMAP_PREVENTS_DELETE USE_WIN32_MMAP
-                               UNICODE _UNICODE HAVE_WPGMPTR ENSURE_MSYSTEM_IS_SET)
-       list(APPEND compat_SOURCES compat/mingw.c compat/winansi.c compat/win32/path-utils.c
-               compat/win32/pthread.c compat/win32mmap.c compat/win32/syslog.c
-               compat/win32/trace2_win32_process_info.c compat/win32/dirent.c
-               compat/nedmalloc/nedmalloc.c compat/strdup.c)
+                               UNICODE _UNICODE HAVE_WPGMPTR ENSURE_MSYSTEM_IS_SET HAVE_RTLGENRANDOM)
+       list(APPEND compat_SOURCES
+               compat/mingw.c
+               compat/winansi.c
+               compat/win32/flush.c
+               compat/win32/path-utils.c
+               compat/win32/pthread.c
+               compat/win32mmap.c
+               compat/win32/syslog.c
+               compat/win32/trace2_win32_process_info.c
+               compat/win32/dirent.c
+               compat/nedmalloc/nedmalloc.c
+               compat/strdup.c)
        set(NO_UNIX_SOCKETS 1)
 
 elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
@@ -285,6 +293,16 @@ else()
        endif()
 endif()
 
+if(SUPPORTS_SIMPLE_IPC)
+       if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
+               add_compile_definitions(HAVE_FSMONITOR_DAEMON_BACKEND)
+               list(APPEND compat_SOURCES compat/fsmonitor/fsm-listen-win32.c)
+       elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+               add_compile_definitions(HAVE_FSMONITOR_DAEMON_BACKEND)
+               list(APPEND compat_SOURCES compat/fsmonitor/fsm-listen-darwin.c)
+       endif()
+endif()
+
 set(EXE_EXTENSION ${CMAKE_EXECUTABLE_SUFFIX})
 
 #header checks
index d9ada69b4323f2e9611aa6add5b21a77e622a7c8..0970d98ad72f82bab1fc2b6ea6238c48526fa112 100644 (file)
@@ -15,7 +15,7 @@ constant fmt !~ "%";
 @@
 expression E;
 struct strbuf SB;
-format F =~ "s";
+format F =~ "^s$";
 @@
 - strbuf_addf(E, "%@F@", SB.buf);
 + strbuf_addbuf(E, &SB);
@@ -23,7 +23,7 @@ format F =~ "s";
 @@
 expression E;
 struct strbuf *SBP;
-format F =~ "s";
+format F =~ "^s$";
 @@
 - strbuf_addf(E, "%@F@", SBP->buf);
 + strbuf_addbuf(E, SBP);
@@ -44,7 +44,7 @@ struct strbuf *SBP;
 
 @@
 expression E1, E2;
-format F =~ "s";
+format F =~ "^s$";
 @@
 - strbuf_addf(E1, "%@F@", E2);
 + strbuf_addstr(E1, E2);
index 8e05d1ca4b61b9792a6f7cc4e7d322efeab02e01..9c1d2939b61f0a588f6b611084b68c1cc7a0cef8 100644 (file)
@@ -1,11 +1,3 @@
-@@
-expression E;
-expression V;
-@@
-- if (E)
--    V = xstrdup(E);
-+ V = xstrdup_or_null(E);
-
 @@
 expression E;
 @@
index 377d6c5494ac9643ce3435cf270cd8a2420c0287..ba5c395d2d804f522d5730f7bca2fa6e17d63a96 100644 (file)
 #     and git-switch completion (e.g., completing "foo" when "origin/foo"
 #     exists).
 #
+#   GIT_COMPLETION_SHOW_ALL_COMMANDS
+#
+#     When set to "1" suggest all commands, including plumbing commands
+#     which are hidden by default (e.g. "cat-file" on "git ca<TAB>").
+#
 #   GIT_COMPLETION_SHOW_ALL
 #
 #     When set to "1" suggest all options, including options which are
@@ -2885,6 +2890,10 @@ _git_restore ()
        --*)
                __gitcomp_builtin restore
                ;;
+       *)
+               if __git rev-parse --verify --quiet HEAD >/dev/null; then
+                       __git_complete_index_file "--modified"
+               fi
        esac
 }
 
@@ -2986,9 +2995,37 @@ _git_show_branch ()
        __git_complete_revlist
 }
 
+__gitcomp_directories ()
+{
+       local _tmp_dir _tmp_completions _found=0
+
+       # Get the directory of the current token; this differs from dirname
+       # in that it keeps up to the final trailing slash.  If no slash found
+       # that's fine too.
+       [[ "$cur" =~ .*/ ]]
+       _tmp_dir=$BASH_REMATCH
+
+       # Find possible directory completions, adding trailing '/' characters,
+       # de-quoting, and handling unusual characters.
+       while IFS= read -r -d $'\0' c ; do
+               # If there are directory completions, find ones that start
+               # with "$cur", the current token, and put those in COMPREPLY
+               if [[ $c == "$cur"* ]]; then
+                       COMPREPLY+=("$c/")
+                       _found=1
+               fi
+       done < <(git ls-tree -z -d --name-only HEAD $_tmp_dir)
+
+       if [[ $_found == 0 ]] && [[ "$cur" =~ /$ ]]; then
+               # No possible further completions any deeper, so assume we're at
+               # a leaf directory and just consider it complete
+               __gitcomp_direct_append "$cur "
+       fi
+}
+
 _git_sparse_checkout ()
 {
-       local subcommands="list init set disable"
+       local subcommands="list init set disable add reapply"
        local subcommand="$(__git_find_on_cmdline "$subcommands")"
        if [ -z "$subcommand" ]; then
                __gitcomp "$subcommands"
@@ -2996,14 +3033,14 @@ _git_sparse_checkout ()
        fi
 
        case "$subcommand,$cur" in
-       init,--*)
-               __gitcomp "--cone"
-               ;;
-       set,--*)
-               __gitcomp "--stdin"
-               ;;
-       *)
+       *,--*)
+               __gitcomp_builtin sparse-checkout_$subcommand "" "--"
                ;;
+       set,*|add,*)
+               if [ "$(__git config core.sparseCheckoutCone)" == "true" ] ||
+               [ -n "$(__git_find_on_cmdline --cone)" ]; then
+                       __gitcomp_directories
+               fi
        esac
 }
 
@@ -3455,7 +3492,13 @@ __git_main ()
                        then
                                __gitcomp "$GIT_TESTING_PORCELAIN_COMMAND_LIST"
                        else
-                               __gitcomp "$(__git --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config)"
+                               local list_cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config
+
+                               if test "${GIT_COMPLETION_SHOW_ALL_COMMANDS-}" = "1"
+                               then
+                                       list_cmds=builtins,$list_cmds
+                               fi
+                               __gitcomp "$(__git --list-cmds=$list_cmds)"
                        fi
                        ;;
                esac
index db7c0068fb55d9a520478e0b46ba952dc650f816..87b2b916c0326789d891adee035f6c3383cd49af 100644 (file)
 #     git           always compare HEAD to @{upstream}
 #     svn           always compare HEAD to your SVN upstream
 #
+# By default, __git_ps1 will compare HEAD to your SVN upstream if it can
+# find one, or @{upstream} otherwise.  Once you have set
+# GIT_PS1_SHOWUPSTREAM, you can override it on a per-repository basis by
+# setting the bash.showUpstream config variable.
+#
 # You can change the separator between the branch name and the above
 # state symbols by setting GIT_PS1_STATESEPARATOR. The default separator
 # is SP.
 # single '?' character by setting GIT_PS1_COMPRESSSPARSESTATE, or omitted
 # by setting GIT_PS1_OMITSPARSESTATE.
 #
-# By default, __git_ps1 will compare HEAD to your SVN upstream if it can
-# find one, or @{upstream} otherwise.  Once you have set
-# GIT_PS1_SHOWUPSTREAM, you can override it on a per-repository basis by
-# setting the bash.showUpstream config variable.
-#
 # If you would like to see more information about the identity of
 # commits checked out as a detached HEAD, set GIT_PS1_DESCRIBE_STYLE
 # to one of these values:
@@ -115,7 +115,7 @@ __git_ps1_show_upstream ()
 {
        local key value
        local svn_remote svn_url_pattern count n
-       local upstream=git legacy="" verbose="" name=""
+       local upstream_type=git legacy="" verbose="" name=""
 
        svn_remote=()
        # get some config options from git-config
@@ -132,7 +132,7 @@ __git_ps1_show_upstream ()
                svn-remote.*.url)
                        svn_remote[$((${#svn_remote[@]} + 1))]="$value"
                        svn_url_pattern="$svn_url_pattern\\|$value"
-                       upstream=svn+git # default upstream is SVN if available, else git
+                       upstream_type=svn+git # default upstream type is SVN if available, else git
                        ;;
                esac
        done <<< "$output"
@@ -141,16 +141,16 @@ __git_ps1_show_upstream ()
        local option
        for option in ${GIT_PS1_SHOWUPSTREAM}; do
                case "$option" in
-               git|svn) upstream="$option" ;;
+               git|svn) upstream_type="$option" ;;
                verbose) verbose=1 ;;
                legacy)  legacy=1  ;;
                name)    name=1 ;;
                esac
        done
 
-       # Find our upstream
-       case "$upstream" in
-       git)    upstream="@{upstream}" ;;
+       # Find our upstream type
+       case "$upstream_type" in
+       git)    upstream_type="@{upstream}" ;;
        svn*)
                # get the upstream from the "git-svn-id: ..." in a commit message
                # (git-svn uses essentially the same procedure internally)
@@ -167,12 +167,12 @@ __git_ps1_show_upstream ()
 
                        if [[ -z "$svn_upstream" ]]; then
                                # default branch name for checkouts with no layout:
-                               upstream=${GIT_SVN_ID:-git-svn}
+                               upstream_type=${GIT_SVN_ID:-git-svn}
                        else
-                               upstream=${svn_upstream#/}
+                               upstream_type=${svn_upstream#/}
                        fi
-               elif [[ "svn+git" = "$upstream" ]]; then
-                       upstream="@{upstream}"
+               elif [[ "svn+git" = "$upstream_type" ]]; then
+                       upstream_type="@{upstream}"
                fi
                ;;
        esac
@@ -180,11 +180,11 @@ __git_ps1_show_upstream ()
        # Find how many commits we are ahead/behind our upstream
        if [[ -z "$legacy" ]]; then
                count="$(git rev-list --count --left-right \
-                               "$upstream"...HEAD 2>/dev/null)"
+                               "$upstream_type"...HEAD 2>/dev/null)"
        else
                # produce equivalent output to --count for older versions of git
                local commits
-               if commits="$(git rev-list --left-right "$upstream"...HEAD 2>/dev/null)"
+               if commits="$(git rev-list --left-right "$upstream_type"...HEAD 2>/dev/null)"
                then
                        local commit behind=0 ahead=0
                        for commit in $commits
@@ -214,26 +214,26 @@ __git_ps1_show_upstream ()
                *)          # diverged from upstream
                        p="<>" ;;
                esac
-       else
+       else # verbose, set upstream instead of p
                case "$count" in
                "") # no upstream
-                       p="" ;;
+                       upstream="" ;;
                "0      0") # equal to upstream
-                       p=" u=" ;;
+                       upstream="|u=" ;;
                "0      "*) # ahead of upstream
-                       p=" u+${count#0 }" ;;
+                       upstream="|u+${count#0  }" ;;
                *"      0") # behind upstream
-                       p=" u-${count%  0}" ;;
+                       upstream="|u-${count%   0}" ;;
                *)          # diverged from upstream
-                       p=" u+${count#* }-${count%      *}" ;;
+                       upstream="|u+${count#*  }-${count%      *}" ;;
                esac
                if [[ -n "$count" && -n "$name" ]]; then
                        __git_ps1_upstream_name=$(git rev-parse \
-                               --abbrev-ref "$upstream" 2>/dev/null)
+                               --abbrev-ref "$upstream_type" 2>/dev/null)
                        if [ $pcmode = yes ] && [ $ps1_expanded = yes ]; then
-                               p="$p \${__git_ps1_upstream_name}"
+                               upstream="$upstream \${__git_ps1_upstream_name}"
                        else
-                               p="$p ${__git_ps1_upstream_name}"
+                               upstream="$upstream ${__git_ps1_upstream_name}"
                                # not needed anymore; keep user's
                                # environment clean
                                unset __git_ps1_upstream_name
@@ -512,7 +512,8 @@ __git_ps1 ()
        local u=""
        local h=""
        local c=""
-       local p=""
+       local p="" # short version of upstream state indicator
+       local upstream="" # verbose version of upstream state indicator
 
        if [ "true" = "$inside_gitdir" ]; then
                if [ "true" = "$bare_repo" ]; then
@@ -568,8 +569,8 @@ __git_ps1 ()
                b="\${__git_ps1_branch_name}"
        fi
 
-       local f="$h$w$i$s$u"
-       local gitstring="$c$b${f:+$z$f}${sparse}$r$p"
+       local f="$h$w$i$s$u$p"
+       local gitstring="$c$b${f:+$z$f}${sparse}$r${upstream}"
 
        if [ $pcmode = yes ]; then
                if [ "${__git_printf_supports_v-}" != yes ]; then
index 75125d6ae003fcd213a32a0f893ae0ae48b48a1a..26b724c8c6d9f273f112e10d1c7c58024403fea4 100755 (executable)
@@ -86,7 +86,7 @@ do
        fi
        if test -s "$GIT_DIR/MERGE_RR"
        then
-               git show -s --pretty=format:"Learning from %h %s" "$commit"
+               git --no-pager show -s --format="Learning from %h %s" "$commit"
                git rerere
                git checkout -q $commit -- .
                git rerere
index 231b1ee17963c5d41a1667428ea7e64f8ac285c3..37f283f35d74d6f3879c9719f810dd5798fd0933 100644 (file)
@@ -1,18 +1,8 @@
-QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
-QUIET_SUBDIR1  =
-
-ifneq ($(findstring s,$(MAKEFLAGS)),s)
-ifndef V
-       QUIET_GEN      = @echo '   ' GEN $@;
-       QUIET_SUBDIR0  = +@subdir=
-       QUIET_SUBDIR1  = ;$(NO_SUBDIR) echo '   ' SUBDIR $$subdir; \
-                        $(MAKE) $(PRINT_DIR) -C $$subdir
-else
-       export V
-endif
-endif
-
-all:
+# The default target of this Makefile is...
+all::
+
+# Import tree-wide shared Makefile behavior and libraries
+include ../../shared.mak
 
 include ../../config.mak.uname
 -include ../../config.mak.autogen
@@ -21,7 +11,7 @@ include ../../config.mak.uname
 TARGETS = scalar$(X) scalar.o
 GITLIBS = ../../common-main.o ../../libgit.a ../../xdiff/lib.a
 
-all: scalar$(X) ../../bin-wrappers/scalar
+all:: scalar$(X) ../../bin-wrappers/scalar
 
 $(GITLIBS):
        $(QUIET_SUBDIR0)../.. $(QUIET_SUBDIR1) $(subst ../../,,$@)
index 1ce9c2b00e8058bba4b5bb33a875cddf40b1047b..58ca0e56f14ab9059399203990648730a59a84a3 100644 (file)
@@ -152,7 +152,6 @@ static int set_recommended_config(int reconfigure)
                { "pack.useBitmaps", "false", 1 },
                { "pack.useSparse", "true", 1 },
                { "receive.autoGC", "false", 1 },
-               { "reset.quiet", "true", 1 },
                { "feature.manyFiles", "false", 1 },
                { "feature.experimental", "false", 1 },
                { "fetch.unpackLimit", "1", 1 },
@@ -808,6 +807,25 @@ int cmd_main(int argc, const char **argv)
        struct strbuf scalar_usage = STRBUF_INIT;
        int i;
 
+       while (argc > 1 && *argv[1] == '-') {
+               if (!strcmp(argv[1], "-C")) {
+                       if (argc < 3)
+                               die(_("-C requires a <directory>"));
+                       if (chdir(argv[2]) < 0)
+                               die_errno(_("could not change to '%s'"),
+                                         argv[2]);
+                       argc -= 2;
+                       argv += 2;
+               } else if (!strcmp(argv[1], "-c")) {
+                       if (argc < 3)
+                               die(_("-c requires a <key>=<value> argument"));
+                       git_config_push_parameter(argv[2]);
+                       argc -= 2;
+                       argv += 2;
+               } else
+                       break;
+       }
+
        if (argc > 1) {
                argv++;
                argc--;
@@ -818,7 +836,8 @@ int cmd_main(int argc, const char **argv)
        }
 
        strbuf_addstr(&scalar_usage,
-                     N_("scalar <command> [<options>]\n\nCommands:\n"));
+                     N_("scalar [-C <directory>] [-c <key>=<value>] "
+                        "<command> [<options>]\n\nCommands:\n"));
        for (i = 0; builtins[i].name; i++)
                strbuf_addf(&scalar_usage, "\t%s\n", builtins[i].name);
 
index f416d637289c2cfae93c3c32184a1b1a5177b4e0..cf4e5b889cc364e992b1f28405442ed5950103fa 100644 (file)
@@ -36,6 +36,16 @@ The `scalar` command implements various subcommands, and different options
 depending on the subcommand. With the exception of `clone`, `list` and
 `reconfigure --all`, all subcommands expect to be run in an enlistment.
 
+The following options can be specified _before_ the subcommand:
+
+-C <directory>::
+       Before running the subcommand, change the working directory. This
+       option imitates the same option of linkgit:git[1].
+
+-c <key>=<value>::
+       For the duration of running the specified subcommand, configure this
+       setting. This option imitates the same option of linkgit:git[1].
+
 COMMANDS
 --------
 
index 6170672bb371f98cdb4216591382298b2c0a2dbf..01e82e56d15629abd0444646341c1a9d639fc310 100644 (file)
@@ -1,3 +1,6 @@
+# Import tree-wide shared Makefile behavior and libraries
+include ../../../shared.mak
+
 # Run scalar tests
 #
 # Copyright (c) 2005,2021 Junio C Hamano, Johannes Schindelin
index 2e1502ad45e1d3995b5100a188e540241e100a78..89781568f43abf301b6df3a932b064c44ecd3e80 100755 (executable)
@@ -85,4 +85,12 @@ test_expect_success 'scalar delete with enlistment' '
        test_path_is_missing cloned
 '
 
+test_expect_success 'scalar supports -c/-C' '
+       test_when_finished "scalar delete sub" &&
+       git init sub &&
+       scalar -C sub -c status.aheadBehind=bogus register &&
+       test -z "$(git -C sub config --local status.aheadBehind)" &&
+       test true = "$(git -C sub config core.preloadIndex)"
+'
+
 test_done
index 71f1fd94bde8b0cd1653677612b0f21e5b36bcd4..1af1d9653e94b39623f8435957c6e7537c41c60a 100755 (executable)
@@ -975,10 +975,10 @@ cmd_merge () {
 
        if test -n "$arg_addmerge_message"
        then
-               git merge -Xsubtree="$arg_prefix" \
+               git merge --no-ff -Xsubtree="$arg_prefix" \
                        --message="$arg_addmerge_message" "$rev"
        else
-               git merge -Xsubtree="$arg_prefix" $rev
+               git merge --no-ff -Xsubtree="$arg_prefix" $rev
        fi
 }
 
index df7186bd813a2eebabeb57bb6ef0bef2d8b5cc9b..8e39731efb0bd26e9aa6c6341f049f2965e659f2 100644 (file)
--- a/convert.c
+++ b/convert.c
@@ -1159,7 +1159,7 @@ static int ident_to_worktree(const char *src, size_t len,
        /* are we "faking" in place editing ? */
        if (src == buf->buf)
                to_free = strbuf_detach(buf, NULL);
-       hash_object_file(the_hash_algo, src, len, "blob", &oid);
+       hash_object_file(the_hash_algo, src, len, OBJ_BLOB, &oid);
 
        strbuf_grow(buf, len + cnt * (the_hash_algo->hexsz + 3));
        for (;;) {
@@ -1574,12 +1574,12 @@ static void null_free_fn(struct stream_filter *filter)
 }
 
 static struct stream_filter_vtbl null_vtbl = {
-       null_filter_fn,
-       null_free_fn,
+       .filter = null_filter_fn,
+       .free = null_free_fn,
 };
 
 static struct stream_filter null_filter_singleton = {
-       &null_vtbl,
+       .vtbl = &null_vtbl,
 };
 
 int is_null_stream_filter(struct stream_filter *filter)
@@ -1683,8 +1683,8 @@ static void lf_to_crlf_free_fn(struct stream_filter *filter)
 }
 
 static struct stream_filter_vtbl lf_to_crlf_vtbl = {
-       lf_to_crlf_filter_fn,
-       lf_to_crlf_free_fn,
+       .filter = lf_to_crlf_filter_fn,
+       .free = lf_to_crlf_free_fn,
 };
 
 static struct stream_filter *lf_to_crlf_filter(void)
@@ -1779,8 +1779,8 @@ static void cascade_free_fn(struct stream_filter *filter)
 }
 
 static struct stream_filter_vtbl cascade_vtbl = {
-       cascade_filter_fn,
-       cascade_free_fn,
+       .filter = cascade_filter_fn,
+       .free = cascade_free_fn,
 };
 
 static struct stream_filter *cascade_filter(struct stream_filter *one,
@@ -1931,8 +1931,8 @@ static void ident_free_fn(struct stream_filter *filter)
 }
 
 static struct stream_filter_vtbl ident_vtbl = {
-       ident_filter_fn,
-       ident_free_fn,
+       .filter = ident_filter_fn,
+       .free = ident_free_fn,
 };
 
 static struct stream_filter *ident_filter(const struct object_id *oid)
index e7240f3f636f9d687836b7fe6df65b548ce285fd..f6389a50684a6e99bad1fe39b04a96fb99abc726 100644 (file)
@@ -130,6 +130,7 @@ static void credential_apply_config(struct credential *c)
        git_config(urlmatch_config_entry, &config);
        string_list_clear(&config.vars, 1);
        free(normalized_url);
+       urlmatch_config_release(&config);
        strbuf_release(&url);
 
        c->configured = 1;
index 26e8a6df44e9415ffe02fc612ec045c6fa32b032..59ef3398ca2b01676055fff40b80ac7896f87ffc 100644 (file)
@@ -58,7 +58,8 @@ static void free_hashfile(struct hashfile *f)
        free(f);
 }
 
-int finalize_hashfile(struct hashfile *f, unsigned char *result, unsigned int flags)
+int finalize_hashfile(struct hashfile *f, unsigned char *result,
+                     enum fsync_component component, unsigned int flags)
 {
        int fd;
 
@@ -69,7 +70,7 @@ int finalize_hashfile(struct hashfile *f, unsigned char *result, unsigned int fl
        if (flags & CSUM_HASH_IN_STREAM)
                flush(f, f->buffer, the_hash_algo->rawsz);
        if (flags & CSUM_FSYNC)
-               fsync_or_die(f->fd, f->name);
+               fsync_component_or_die(component, f->fd, f->name);
        if (flags & CSUM_CLOSE) {
                if (close(f->fd))
                        die_errno("%s: sha1 file error on close", f->name);
index 291215b34eb12bee5583913ad93388c1f9175c0f..0d29f528fbcb51df13eac225c0e2cc120198bd3f 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef CSUM_FILE_H
 #define CSUM_FILE_H
 
+#include "cache.h"
 #include "hash.h"
 
 struct progress;
@@ -38,7 +39,7 @@ int hashfile_truncate(struct hashfile *, struct hashfile_checkpoint *);
 struct hashfile *hashfd(int fd, const char *name);
 struct hashfile *hashfd_check(const char *name);
 struct hashfile *hashfd_throughput(int fd, const char *name, struct progress *tp);
-int finalize_hashfile(struct hashfile *, unsigned char *, unsigned int);
+int finalize_hashfile(struct hashfile *, unsigned char *, enum fsync_component, unsigned int);
 void hashwrite(struct hashfile *, const void *, unsigned int);
 void hashflush(struct hashfile *f);
 void crc32_begin(struct hashfile *);
diff --git a/date.c b/date.c
index 84bb4451c1ae167cfd88ae4a4b936a69b1c9296c..68a260c214d333f61bf1c9156405520e8fc9c361 100644 (file)
--- a/date.c
+++ b/date.c
@@ -5,6 +5,7 @@
  */
 
 #include "cache.h"
+#include "date.h"
 
 /*
  * This is like mktime, but without normalization of tm_wday and tm_yday.
@@ -205,11 +206,10 @@ void show_date_relative(timestamp_t time, struct strbuf *timebuf)
 
 struct date_mode *date_mode_from_type(enum date_mode_type type)
 {
-       static struct date_mode mode;
+       static struct date_mode mode = DATE_MODE_INIT;
        if (type == DATE_STRFTIME)
                BUG("cannot create anonymous strftime date_mode struct");
        mode.type = type;
-       mode.local = 0;
        return &mode;
 }
 
@@ -993,6 +993,11 @@ void parse_date_format(const char *format, struct date_mode *mode)
                die("unknown date format %s", format);
 }
 
+void date_mode_release(struct date_mode *mode)
+{
+       free((char *)mode->strftime_fmt);
+}
+
 void datestamp(struct strbuf *out)
 {
        time_t now;
diff --git a/date.h b/date.h
new file mode 100644 (file)
index 0000000..5d4eaba
--- /dev/null
+++ b/date.h
@@ -0,0 +1,74 @@
+#ifndef DATE_H
+#define DATE_H
+
+/**
+ * The date mode type. This has DATE_NORMAL at an explicit "= 0" to
+ * accommodate a memset([...], 0, [...]) initialization when "struct
+ * date_mode" is used as an embedded struct member, as in the case of
+ * e.g. "struct pretty_print_context" and "struct rev_info".
+ */
+enum date_mode_type {
+       DATE_NORMAL = 0,
+       DATE_HUMAN,
+       DATE_RELATIVE,
+       DATE_SHORT,
+       DATE_ISO8601,
+       DATE_ISO8601_STRICT,
+       DATE_RFC2822,
+       DATE_STRFTIME,
+       DATE_RAW,
+       DATE_UNIX
+};
+
+struct date_mode {
+       enum date_mode_type type;
+       const char *strftime_fmt;
+       int local;
+};
+
+#define DATE_MODE_INIT { \
+       .type = DATE_NORMAL, \
+}
+
+/**
+ * Convenience helper for passing a constant type, like:
+ *
+ *   show_date(t, tz, DATE_MODE(NORMAL));
+ */
+#define DATE_MODE(t) date_mode_from_type(DATE_##t)
+struct date_mode *date_mode_from_type(enum date_mode_type type);
+
+/**
+ * Format <'time', 'timezone'> into static memory according to 'mode'
+ * and return it. The mode is an initialized "struct date_mode"
+ * (usually from the DATE_MODE() macro).
+ */
+const char *show_date(timestamp_t time, int timezone, const struct date_mode *mode);
+
+/**
+ * Parse a date format for later use with show_date().
+ *
+ * When the "date_mode_type" is DATE_STRFTIME the "strftime_fmt"
+ * member of "struct date_mode" will be a malloc()'d format string to
+ * be used with strbuf_addftime(), in which case you'll need to call
+ * date_mode_release() later.
+ */
+void parse_date_format(const char *format, struct date_mode *mode);
+
+/**
+ * Release a "struct date_mode", currently only required if
+ * parse_date_format() has parsed a "DATE_STRFTIME" format.
+ */
+void date_mode_release(struct date_mode *mode);
+
+void show_date_relative(timestamp_t time, struct strbuf *timebuf);
+int parse_date(const char *date, struct strbuf *out);
+int parse_date_basic(const char *date, timestamp_t *timestamp, int *offset);
+int parse_expiry_date(const char *date, timestamp_t *timestamp);
+void datestamp(struct strbuf *out);
+#define approxidate(s) approxidate_careful((s), NULL)
+timestamp_t approxidate_careful(const char *, int *);
+timestamp_t approxidate_relative(const char *date);
+int date_overflows(timestamp_t date);
+time_t tm_to_time_t(const struct tm *tm);
+#endif
index 11d60da5b72512332185c703658cee6d14f551bc..50087f567062c4ff858bd6cae83fb3c59a0e4038 100755 (executable)
@@ -9,7 +9,7 @@ CC="$*"
 #
 # FreeBSD clang version 3.4.1 (tags/RELEASE...)
 get_version_line() {
-       $CC -v 2>&1 | grep ' version '
+       LANG=C LC_ALL=C $CC -v 2>&1 | grep ' version '
 }
 
 get_family() {
index 5060ccd890bd307b1276e367e3b70872718e3af7..7f64156b8bfec6bb5ec17038eee0d73c68487988 100644 (file)
@@ -17,12 +17,14 @@ static void suppress(struct rev_info *revs)
        revs->combined_all_paths = 0;
        revs->merges_imply_patch = 0;
        revs->merges_need_diff = 0;
+       revs->remerge_diff = 0;
 }
 
 static void set_separate(struct rev_info *revs)
 {
        suppress(revs);
        revs->separate_merges = 1;
+       revs->simplify_history = 0;
 }
 
 static void set_first_parent(struct rev_info *revs)
@@ -45,6 +47,13 @@ static void set_dense_combined(struct rev_info *revs)
        revs->dense_combined_merges = 1;
 }
 
+static void set_remerge_diff(struct rev_info *revs)
+{
+       suppress(revs);
+       revs->remerge_diff = 1;
+       revs->simplify_history = 0;
+}
+
 static diff_merges_setup_func_t func_by_opt(const char *optarg)
 {
        if (!strcmp(optarg, "off") || !strcmp(optarg, "none"))
@@ -57,6 +66,8 @@ static diff_merges_setup_func_t func_by_opt(const char *optarg)
                return set_combined;
        else if (!strcmp(optarg, "cc") || !strcmp(optarg, "dense-combined"))
                return set_dense_combined;
+       else if (!strcmp(optarg, "r") || !strcmp(optarg, "remerge"))
+               return set_remerge_diff;
        else if (!strcmp(optarg, "m") || !strcmp(optarg, "on"))
                return set_to_default;
        return NULL;
@@ -67,7 +78,7 @@ static void set_diff_merges(struct rev_info *revs, const char *optarg)
        diff_merges_setup_func_t func = func_by_opt(optarg);
 
        if (!func)
-               die(_("unknown value for --diff-merges: %s"), optarg);
+               die(_("invalid value for '%s': '%s'"), "--diff-merges", optarg);
 
        func(revs);
 
@@ -110,6 +121,9 @@ int diff_merges_parse_opts(struct rev_info *revs, const char **argv)
        } else if (!strcmp(arg, "--cc")) {
                set_dense_combined(revs);
                revs->merges_imply_patch = 1;
+       } else if (!strcmp(arg, "--remerge-diff")) {
+               set_remerge_diff(revs);
+               revs->merges_imply_patch = 1;
        } else if (!strcmp(arg, "--no-diff-merges")) {
                suppress(revs);
        } else if (!strcmp(arg, "--combined-all-paths")) {
diff --git a/diff.c b/diff.c
index c862771a58939f0cd2a20b2056c8d93b17c7be26..ef7159968b68c43c361a4cacc4558e14fe82fd4f 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -28,6 +28,7 @@
 #include "help.h"
 #include "promisor-remote.h"
 #include "dir.h"
+#include "strmap.h"
 
 #ifdef NO_FAST_WORKING_DIRECTORY
 #define FAST_WORKING_DIRECTORY 0
@@ -799,6 +800,14 @@ static void append_emitted_diff_symbol(struct diff_options *o,
        f->line = e->line ? xmemdupz(e->line, e->len) : NULL;
 }
 
+static void free_emitted_diff_symbols(struct emitted_diff_symbols *e)
+{
+       if (!e)
+               return;
+       free(e->buf);
+       free(e);
+}
+
 struct moved_entry {
        const struct emitted_diff_symbol *es;
        struct moved_entry *next_line;
@@ -2226,7 +2235,7 @@ static void free_diff_words_data(struct emit_callback *ecbdata)
 {
        if (ecbdata->diff_words) {
                diff_words_flush(ecbdata);
-               free (ecbdata->diff_words->opt->emitted_symbols);
+               free_emitted_diff_symbols(ecbdata->diff_words->opt->emitted_symbols);
                free (ecbdata->diff_words->opt);
                free (ecbdata->diff_words->minus.text.ptr);
                free (ecbdata->diff_words->minus.orig);
@@ -3353,6 +3362,31 @@ struct userdiff_driver *get_textconv(struct repository *r,
        return userdiff_get_textconv(r, one->driver);
 }
 
+static struct strbuf *additional_headers(struct diff_options *o,
+                                        const char *path)
+{
+       if (!o->additional_path_headers)
+               return NULL;
+       return strmap_get(o->additional_path_headers, path);
+}
+
+static void add_formatted_headers(struct strbuf *msg,
+                                 struct strbuf *more_headers,
+                                 const char *line_prefix,
+                                 const char *meta,
+                                 const char *reset)
+{
+       char *next, *newline;
+
+       for (next = more_headers->buf; *next; next = newline) {
+               newline = strchrnul(next, '\n');
+               strbuf_addf(msg, "%s%s%.*s%s\n", line_prefix, meta,
+                           (int)(newline - next), next, reset);
+               if (*newline)
+                       newline++;
+       }
+}
+
 static void builtin_diff(const char *name_a,
                         const char *name_b,
                         struct diff_filespec *one,
@@ -3411,6 +3445,17 @@ static void builtin_diff(const char *name_a,
        b_two = quote_two(b_prefix, name_b + (*name_b == '/'));
        lbl[0] = DIFF_FILE_VALID(one) ? a_one : "/dev/null";
        lbl[1] = DIFF_FILE_VALID(two) ? b_two : "/dev/null";
+       if (!DIFF_FILE_VALID(one) && !DIFF_FILE_VALID(two)) {
+               /*
+                * We should only reach this point for pairs from
+                * create_filepairs_for_header_only_notifications().  For
+                * these, we should avoid the "/dev/null" special casing
+                * above, meaning we avoid showing such pairs as either
+                * "new file" or "deleted file" below.
+                */
+               lbl[0] = a_one;
+               lbl[1] = b_two;
+       }
        strbuf_addf(&header, "%s%sdiff --git %s %s%s\n", line_prefix, meta, a_one, b_two, reset);
        if (lbl[0][0] == '/') {
                /* /dev/null */
@@ -4275,6 +4320,7 @@ static void fill_metainfo(struct strbuf *msg,
        const char *set = diff_get_color(use_color, DIFF_METAINFO);
        const char *reset = diff_get_color(use_color, DIFF_RESET);
        const char *line_prefix = diff_line_prefix(o);
+       struct strbuf *more_headers = NULL;
 
        *must_show_header = 1;
        strbuf_init(msg, PATH_MAX * 2 + 300);
@@ -4311,6 +4357,11 @@ static void fill_metainfo(struct strbuf *msg,
        default:
                *must_show_header = 0;
        }
+       if ((more_headers = additional_headers(o, name))) {
+               add_formatted_headers(msg, more_headers,
+                                     line_prefix, set, reset);
+               *must_show_header = 1;
+       }
        if (one && two && !oideq(&one->oid, &two->oid)) {
                const unsigned hexsz = the_hash_algo->hexsz;
                int abbrev = o->abbrev ? o->abbrev : DEFAULT_ABBREV;
@@ -4570,6 +4621,43 @@ void repo_diff_setup(struct repository *r, struct diff_options *options)
        prep_parse_options(options);
 }
 
+static const char diff_status_letters[] = {
+       DIFF_STATUS_ADDED,
+       DIFF_STATUS_COPIED,
+       DIFF_STATUS_DELETED,
+       DIFF_STATUS_MODIFIED,
+       DIFF_STATUS_RENAMED,
+       DIFF_STATUS_TYPE_CHANGED,
+       DIFF_STATUS_UNKNOWN,
+       DIFF_STATUS_UNMERGED,
+       DIFF_STATUS_FILTER_AON,
+       DIFF_STATUS_FILTER_BROKEN,
+       '\0',
+};
+
+static unsigned int filter_bit['Z' + 1];
+
+static void prepare_filter_bits(void)
+{
+       int i;
+
+       if (!filter_bit[DIFF_STATUS_ADDED]) {
+               for (i = 0; diff_status_letters[i]; i++)
+                       filter_bit[(int) diff_status_letters[i]] = (1 << i);
+       }
+}
+
+static unsigned filter_bit_tst(char status, const struct diff_options *opt)
+{
+       return opt->filter & filter_bit[(int) status];
+}
+
+unsigned diff_filter_bit(char status)
+{
+       prepare_filter_bits();
+       return filter_bit[(int) status];
+}
+
 void diff_setup_done(struct diff_options *options)
 {
        unsigned check_mask = DIFF_FORMAT_NAME |
@@ -4683,6 +4771,12 @@ void diff_setup_done(struct diff_options *options)
        if (!options->use_color || external_diff())
                options->color_moved = 0;
 
+       if (options->filter_not) {
+               if (!options->filter)
+                       options->filter = ~filter_bit[DIFF_STATUS_FILTER_AON];
+               options->filter &= ~options->filter_not;
+       }
+
        FREE_AND_NULL(options->parseopts);
 }
 
@@ -4774,43 +4868,6 @@ static int parse_dirstat_opt(struct diff_options *options, const char *params)
        return 1;
 }
 
-static const char diff_status_letters[] = {
-       DIFF_STATUS_ADDED,
-       DIFF_STATUS_COPIED,
-       DIFF_STATUS_DELETED,
-       DIFF_STATUS_MODIFIED,
-       DIFF_STATUS_RENAMED,
-       DIFF_STATUS_TYPE_CHANGED,
-       DIFF_STATUS_UNKNOWN,
-       DIFF_STATUS_UNMERGED,
-       DIFF_STATUS_FILTER_AON,
-       DIFF_STATUS_FILTER_BROKEN,
-       '\0',
-};
-
-static unsigned int filter_bit['Z' + 1];
-
-static void prepare_filter_bits(void)
-{
-       int i;
-
-       if (!filter_bit[DIFF_STATUS_ADDED]) {
-               for (i = 0; diff_status_letters[i]; i++)
-                       filter_bit[(int) diff_status_letters[i]] = (1 << i);
-       }
-}
-
-static unsigned filter_bit_tst(char status, const struct diff_options *opt)
-{
-       return opt->filter & filter_bit[(int) status];
-}
-
-unsigned diff_filter_bit(char status)
-{
-       prepare_filter_bits();
-       return filter_bit[(int) status];
-}
-
 static int diff_opt_diff_filter(const struct option *option,
                                const char *optarg, int unset)
 {
@@ -4820,21 +4877,6 @@ static int diff_opt_diff_filter(const struct option *option,
        BUG_ON_OPT_NEG(unset);
        prepare_filter_bits();
 
-       /*
-        * If there is a negation e.g. 'd' in the input, and we haven't
-        * initialized the filter field with another --diff-filter, start
-        * from full set of bits, except for AON.
-        */
-       if (!opt->filter) {
-               for (i = 0; (optch = optarg[i]) != '\0'; i++) {
-                       if (optch < 'a' || 'z' < optch)
-                               continue;
-                       opt->filter = (1 << (ARRAY_SIZE(diff_status_letters) - 1)) - 1;
-                       opt->filter &= ~filter_bit[DIFF_STATUS_FILTER_AON];
-                       break;
-               }
-       }
-
        for (i = 0; (optch = optarg[i]) != '\0'; i++) {
                unsigned int bit;
                int negate;
@@ -4851,7 +4893,7 @@ static int diff_opt_diff_filter(const struct option *option,
                        return error(_("unknown change class '%c' in --diff-filter=%s"),
                                     optarg[i], optarg);
                if (negate)
-                       opt->filter &= ~bit;
+                       opt->filter_not |= bit;
                else
                        opt->filter |= bit;
        }
@@ -5596,7 +5638,7 @@ static void prep_parse_options(struct diff_options *options)
                               N_("select files by diff type"),
                               PARSE_OPT_NONEG, diff_opt_diff_filter),
                { OPTION_CALLBACK, 0, "output", options, N_("<file>"),
-                 N_("Output to a specific file"),
+                 N_("output to a specific file"),
                  PARSE_OPT_NONEG, NULL, 0, diff_opt_output },
 
                OPT_END()
@@ -5803,12 +5845,27 @@ int diff_unmodified_pair(struct diff_filepair *p)
 
 static void diff_flush_patch(struct diff_filepair *p, struct diff_options *o)
 {
-       if (diff_unmodified_pair(p))
+       int include_conflict_headers =
+           (additional_headers(o, p->one->path) &&
+            (!o->filter || filter_bit_tst(DIFF_STATUS_UNMERGED, o)));
+
+       /*
+        * Check if we can return early without showing a diff.  Note that
+        * diff_filepair only stores {oid, path, mode, is_valid}
+        * information for each path, and thus diff_unmodified_pair() only
+        * considers those bits of info.  However, we do not want pairs
+        * created by create_filepairs_for_header_only_notifications()
+        * (which always look like unmodified pairs) to be ignored, so
+        * return early if both p is unmodified AND we don't want to
+        * include_conflict_headers.
+        */
+       if (diff_unmodified_pair(p) && !include_conflict_headers)
                return;
 
+       /* Actually, we can also return early to avoid showing tree diffs */
        if ((DIFF_FILE_VALID(p->one) && S_ISDIR(p->one->mode)) ||
            (DIFF_FILE_VALID(p->two) && S_ISDIR(p->two->mode)))
-               return; /* no tree diffs in patch format */
+               return;
 
        run_diff(p, o);
 }
@@ -5839,10 +5896,17 @@ static void diff_flush_checkdiff(struct diff_filepair *p,
        run_checkdiff(p, o);
 }
 
-int diff_queue_is_empty(void)
+int diff_queue_is_empty(struct diff_options *o)
 {
        struct diff_queue_struct *q = &diff_queued_diff;
        int i;
+       int include_conflict_headers =
+           (o->additional_path_headers &&
+            (!o->filter || filter_bit_tst(DIFF_STATUS_UNMERGED, o)));
+
+       if (include_conflict_headers)
+               return 0;
+
        for (i = 0; i < q->nr; i++)
                if (!diff_unmodified_pair(q->queue[i]))
                        return 0;
@@ -6276,6 +6340,54 @@ void diff_warn_rename_limit(const char *varname, int needed, int degraded_cc)
                warning(_(rename_limit_advice), varname, needed);
 }
 
+static void create_filepairs_for_header_only_notifications(struct diff_options *o)
+{
+       struct strset present;
+       struct diff_queue_struct *q = &diff_queued_diff;
+       struct hashmap_iter iter;
+       struct strmap_entry *e;
+       int i;
+
+       strset_init_with_options(&present, /*pool*/ NULL, /*strdup*/ 0);
+
+       /*
+        * Find out which paths exist in diff_queued_diff, preferring
+        * one->path for any pair that has multiple paths.
+        */
+       for (i = 0; i < q->nr; i++) {
+               struct diff_filepair *p = q->queue[i];
+               char *path = p->one->path ? p->one->path : p->two->path;
+
+               if (strmap_contains(o->additional_path_headers, path))
+                       strset_add(&present, path);
+       }
+
+       /*
+        * Loop over paths in additional_path_headers; for each NOT already
+        * in diff_queued_diff, create a synthetic filepair and insert that
+        * into diff_queued_diff.
+        */
+       strmap_for_each_entry(o->additional_path_headers, &iter, e) {
+               if (!strset_contains(&present, e->key)) {
+                       struct diff_filespec *one, *two;
+                       struct diff_filepair *p;
+
+                       one = alloc_filespec(e->key);
+                       two = alloc_filespec(e->key);
+                       fill_filespec(one, null_oid(), 0, 0);
+                       fill_filespec(two, null_oid(), 0, 0);
+                       p = diff_queue(q, one, two);
+                       p->status = DIFF_STATUS_MODIFIED;
+               }
+       }
+
+       /* Re-sort the filepairs */
+       diffcore_fix_diff_index();
+
+       /* Cleanup */
+       strset_clear(&present);
+}
+
 static void diff_flush_patch_all_file_pairs(struct diff_options *o)
 {
        int i;
@@ -6288,6 +6400,9 @@ static void diff_flush_patch_all_file_pairs(struct diff_options *o)
        if (o->color_moved)
                o->emitted_symbols = &esm;
 
+       if (o->additional_path_headers)
+               create_filepairs_for_header_only_notifications(o);
+
        for (i = 0; i < q->nr; i++) {
                struct diff_filepair *p = q->queue[i];
                if (check_pair_status(p))
@@ -6345,6 +6460,8 @@ void diff_free(struct diff_options *options)
 
        diff_free_file(options);
        diff_free_ignore_regex(options);
+       clear_pathspec(&options->pathspec);
+       FREE_AND_NULL(options->parseopts);
 }
 
 void diff_flush(struct diff_options *options)
@@ -6358,7 +6475,7 @@ void diff_flush(struct diff_options *options)
         * Order: raw, stat, summary, patch
         * or:    name/name-status/checkdiff (other bits clear)
         */
-       if (!q->nr)
+       if (!q->nr && !options->additional_path_headers)
                goto free_queue;
 
        if (output_format & (DIFF_FORMAT_RAW |
diff --git a/diff.h b/diff.h
index 8ba85c5e60562b081ad7c12ddcddbd37e2004551..8ae18e5ab1ef31b5ff8911a3e1fb671bd4043482 100644 (file)
--- a/diff.h
+++ b/diff.h
@@ -283,7 +283,7 @@ struct diff_options {
        struct diff_flags flags;
 
        /* diff-filter bits */
-       unsigned int filter;
+       unsigned int filter, filter_not;
 
        int use_color;
 
@@ -395,6 +395,7 @@ struct diff_options {
 
        struct repository *repo;
        struct option *parseopts;
+       struct strmap *additional_path_headers;
 
        int no_free;
 };
@@ -593,7 +594,7 @@ void diffcore_fix_diff_index(void);
 "                show all files diff when -S is used and hit is found.\n" \
 "  -a  --text    treat all files as text.\n"
 
-int diff_queue_is_empty(void);
+int diff_queue_is_empty(struct diff_options *o);
 void diff_flush(struct diff_options*);
 void diff_free(struct diff_options*);
 void diff_warn_rename_limit(const char *varname, int needed, int degraded_cc);
index bebd4ed6a42a1612f666f9221010479bc1263ccd..c0422d9e709a65d5a77d1444fcff0a4d313299bd 100644 (file)
@@ -261,7 +261,7 @@ static unsigned int hash_filespec(struct repository *r,
                if (diff_populate_filespec(r, filespec, NULL))
                        return 0;
                hash_object_file(r->hash_algo, filespec->data, filespec->size,
-                                "blob", &filespec->oid);
+                                OBJ_BLOB, &filespec->oid);
        }
        return oidhash(&filespec->oid);
 }
diff --git a/dir.c b/dir.c
index 689c98cb4a0ea6bb56bab6f7d20dfde365d35edb..19a1950e089bb3ed899d9f546811d7fa4b207605 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -1113,7 +1113,7 @@ static int add_patterns(const char *fname, const char *base, int baselen,
                                       &istate->cache[pos]->oid);
                        else
                                hash_object_file(the_hash_algo, buf, size,
-                                                "blob", &oid_stat->oid);
+                                                OBJ_BLOB, &oid_stat->oid);
                        fill_stat_data(&oid_stat->stat, &st);
                        oid_stat->valid = 1;
                }
@@ -1463,10 +1463,11 @@ static int path_in_sparse_checkout_1(const char *path,
        const char *end, *slash;
 
        /*
-        * We default to accepting a path if there are no patterns or
-        * they are of the wrong type.
+        * We default to accepting a path if the path is empty, there are no
+        * patterns, or the patterns are of the wrong type.
         */
-       if (init_sparse_checkout_patterns(istate) ||
+       if (!*path ||
+           init_sparse_checkout_patterns(istate) ||
            (require_cone_mode &&
             !istate->sparse_checkout_patterns->use_cone_patterns))
                return 1;
@@ -2781,7 +2782,8 @@ void remove_untracked_cache(struct index_state *istate)
 
 static struct untracked_cache_dir *validate_untracked_cache(struct dir_struct *dir,
                                                      int base_len,
-                                                     const struct pathspec *pathspec)
+                                                     const struct pathspec *pathspec,
+                                                     struct index_state *istate)
 {
        struct untracked_cache_dir *root;
        static int untracked_cache_disabled = -1;
@@ -2845,8 +2847,11 @@ static struct untracked_cache_dir *validate_untracked_cache(struct dir_struct *d
                return NULL;
        }
 
-       if (!dir->untracked->root)
+       if (!dir->untracked->root) {
+               /* Untracked cache existed but is not initialized; fix that */
                FLEX_ALLOC_STR(dir->untracked->root, name, "");
+               istate->cache_changed |= UNTRACKED_CHANGED;
+       }
 
        /* Validate $GIT_DIR/info/exclude and core.excludesfile */
        root = dir->untracked->root;
@@ -2916,7 +2921,7 @@ int read_directory(struct dir_struct *dir, struct index_state *istate,
                return dir->nr;
        }
 
-       untracked = validate_untracked_cache(dir, len, pathspec);
+       untracked = validate_untracked_cache(dir, len, pathspec, istate);
        if (!untracked)
                /*
                 * make sure untracked cache code path is disabled,
@@ -2936,7 +2941,9 @@ int read_directory(struct dir_struct *dir, struct index_state *istate,
 
                if (force_untracked_cache < 0)
                        force_untracked_cache =
-                               git_env_bool("GIT_FORCE_UNTRACKED_CACHE", 0);
+                               git_env_bool("GIT_FORCE_UNTRACKED_CACHE", -1);
+               if (force_untracked_cache < 0)
+                       force_untracked_cache = (istate->repo->settings.core_untracked_cache == UNTRACKED_CACHE_WRITE);
                if (force_untracked_cache &&
                        dir->untracked == istate->untracked &&
                    (dir->untracked->dir_opened ||
index fd0501e77a5b8d96dad8b5fe3714b74f13786be7..b3296ce7d15140bff12299b25d1450f69f8508ee 100644 (file)
@@ -42,8 +42,10 @@ const char *git_attributes_file;
 const char *git_hooks_path;
 int zlib_compression_level = Z_BEST_SPEED;
 int pack_compression_level = Z_DEFAULT_COMPRESSION;
-int fsync_object_files;
+int fsync_object_files = -1;
 int use_fsync = -1;
+enum fsync_method fsync_method = FSYNC_METHOD_DEFAULT;
+enum fsync_component fsync_components = FSYNC_COMPONENTS_DEFAULT;
 size_t packed_git_window_size = DEFAULT_PACKED_GIT_WINDOW_SIZE;
 size_t packed_git_limit = DEFAULT_PACKED_GIT_LIMIT;
 size_t delta_base_cache_limit = 96 * 1024 * 1024;
@@ -70,6 +72,7 @@ char *notes_ref_name;
 int grafts_replace_parents = 1;
 int core_apply_sparse_checkout;
 int core_sparse_checkout_cone;
+int sparse_expect_files_outside_of_patterns;
 int merge_log_config = -1;
 int precomposed_unicode = -1; /* see probe_utf8_pathname_composition() */
 unsigned long pack_size_limit_cfg;
@@ -84,7 +87,6 @@ int protect_hfs = PROTECT_HFS_DEFAULT;
 #define PROTECT_NTFS_DEFAULT 1
 #endif
 int protect_ntfs = PROTECT_NTFS_DEFAULT;
-const char *core_fsmonitor;
 
 /*
  * The character that begins a commented line in user-editable file
@@ -271,7 +273,7 @@ const char *get_git_work_tree(void)
        return the_repository->worktree;
 }
 
-char *get_object_directory(void)
+const char *get_object_directory(void)
 {
        if (!the_repository->objects->odb)
                BUG("git environment hasn't been setup");
index 273390229fe4c442915e911b421339e2391fc37c..be383367f55a537944bcf6b43aa7e158cb7f5cad 100644 (file)
@@ -18,8 +18,13 @@ void fetch_negotiator_init(struct repository *r,
                noop_negotiator_init(negotiator);
                return;
 
-       case FETCH_NEGOTIATION_DEFAULT:
+       case FETCH_NEGOTIATION_CONSECUTIVE:
                default_negotiator_init(negotiator);
                return;
        }
 }
+
+void fetch_negotiator_init_noop(struct fetch_negotiator *negotiator)
+{
+       noop_negotiator_init(negotiator);
+}
index ea78868504bdcff0121c40cd40b6857df1680cfc..e348905a1f0008950c66aca1c7b1d69a1253cccf 100644 (file)
@@ -53,7 +53,15 @@ struct fetch_negotiator {
        void *data;
 };
 
+/*
+ * Initialize a negotiator based on the repository settings.
+ */
 void fetch_negotiator_init(struct repository *r,
                           struct fetch_negotiator *negotiator);
 
+/*
+ * Initialize a noop negotiator.
+ */
+void fetch_negotiator_init_noop(struct fetch_negotiator *negotiator);
+
 #endif
index dd6ec449f2dbc87dfb0e9922d1e1c772ccae419e..4e1e88eea097dde85dbbe200ed28d2886a5f2dca 100644 (file)
@@ -312,19 +312,21 @@ static int find_common(struct fetch_negotiator *negotiator,
                const char *remote_hex;
                struct object *o;
 
-               /*
-                * If that object is complete (i.e. it is an ancestor of a
-                * local ref), we tell them we have it but do not have to
-                * tell them about its ancestors, which they already know
-                * about.
-                *
-                * We use lookup_object here because we are only
-                * interested in the case we *know* the object is
-                * reachable and we have already scanned it.
-                */
-               if (((o = lookup_object(the_repository, remote)) != NULL) &&
-                               (o->flags & COMPLETE)) {
-                       continue;
+               if (!args->refetch) {
+                       /*
+                       * If that object is complete (i.e. it is an ancestor of a
+                       * local ref), we tell them we have it but do not have to
+                       * tell them about its ancestors, which they already know
+                       * about.
+                       *
+                       * We use lookup_object here because we are only
+                       * interested in the case we *know* the object is
+                       * reachable and we have already scanned it.
+                       */
+                       if (((o = lookup_object(the_repository, remote)) != NULL) &&
+                                       (o->flags & COMPLETE)) {
+                               continue;
+                       }
                }
 
                remote_hex = oid_to_hex(remote);
@@ -692,30 +694,37 @@ static void mark_complete_and_common_ref(struct fetch_negotiator *negotiator,
        int old_save_commit_buffer = save_commit_buffer;
        timestamp_t cutoff = 0;
 
+       if (args->refetch)
+               return;
+
        save_commit_buffer = 0;
 
        trace2_region_enter("fetch-pack", "parse_remote_refs_and_find_cutoff", NULL);
        for (ref = *refs; ref; ref = ref->next) {
-               struct object *o;
+               struct commit *commit;
+
+               commit = lookup_commit_in_graph(the_repository, &ref->old_oid);
+               if (!commit) {
+                       struct object *o;
 
-               if (!has_object_file_with_flags(&ref->old_oid,
+                       if (!has_object_file_with_flags(&ref->old_oid,
                                                OBJECT_INFO_QUICK |
-                                                       OBJECT_INFO_SKIP_FETCH_OBJECT))
-                       continue;
-               o = parse_object(the_repository, &ref->old_oid);
-               if (!o)
-                       continue;
+                                               OBJECT_INFO_SKIP_FETCH_OBJECT))
+                               continue;
+                       o = parse_object(the_repository, &ref->old_oid);
+                       if (!o || o->type != OBJ_COMMIT)
+                               continue;
+
+                       commit = (struct commit *)o;
+               }
 
                /*
                 * We already have it -- which may mean that we were
                 * in sync with the other side at some time after
                 * that (it is OK if we guess wrong here).
                 */
-               if (o->type == OBJ_COMMIT) {
-                       struct commit *commit = (struct commit *)o;
-                       if (!cutoff || cutoff < commit->date)
-                               cutoff = commit->date;
-               }
+               if (!cutoff || cutoff < commit->date)
+                       cutoff = commit->date;
        }
        trace2_region_leave("fetch-pack", "parse_remote_refs_and_find_cutoff", NULL);
 
@@ -1024,7 +1033,11 @@ static struct ref *do_fetch_pack(struct fetch_pack_args *args,
        struct fetch_negotiator *negotiator;
 
        negotiator = &negotiator_alloc;
-       fetch_negotiator_init(r, negotiator);
+       if (args->refetch) {
+               fetch_negotiator_init_noop(negotiator);
+       } else {
+               fetch_negotiator_init(r, negotiator);
+       }
 
        sort_ref_list(&ref, ref_compare_name);
        QSORT(sought, nr_sought, cmp_ref_by_name);
@@ -1117,7 +1130,7 @@ static struct ref *do_fetch_pack(struct fetch_pack_args *args,
 
        mark_complete_and_common_ref(negotiator, args, &ref);
        filter_refs(args, &ref, sought, nr_sought);
-       if (everything_local(args, &ref)) {
+       if (!args->refetch && everything_local(args, &ref)) {
                packet_flush(fd[1]);
                goto all_done;
        }
@@ -1415,9 +1428,17 @@ static int process_ack(struct fetch_negotiator *negotiator,
         * otherwise.
         */
        if (*received_ready && reader->status != PACKET_READ_DELIM)
-               die(_("expected packfile to be sent after 'ready'"));
+               /*
+                * TRANSLATORS: The parameter will be 'ready', a protocol
+                * keyword.
+                */
+               die(_("expected packfile to be sent after '%s'"), "ready");
        if (!*received_ready && reader->status != PACKET_READ_FLUSH)
-               die(_("expected no other sections to be sent after no 'ready'"));
+               /*
+                * TRANSLATORS: The parameter will be 'ready', a protocol
+                * keyword.
+                */
+               die(_("expected no other sections to be sent after no '%s'"), "ready");
 
        return 0;
 }
@@ -1575,7 +1596,10 @@ static struct ref *do_fetch_pack_v2(struct fetch_pack_args *args,
        struct strvec index_pack_args = STRVEC_INIT;
 
        negotiator = &negotiator_alloc;
-       fetch_negotiator_init(r, negotiator);
+       if (args->refetch)
+               fetch_negotiator_init_noop(negotiator);
+       else
+               fetch_negotiator_init(r, negotiator);
 
        packet_reader_init(&reader, fd[0], NULL, 0,
                           PACKET_READ_CHOMP_NEWLINE |
@@ -1601,7 +1625,7 @@ static struct ref *do_fetch_pack_v2(struct fetch_pack_args *args,
                        /* Filter 'ref' by 'sought' and those that aren't local */
                        mark_complete_and_common_ref(negotiator, args, &ref);
                        filter_refs(args, &ref, sought, nr_sought);
-                       if (everything_local(args, &ref))
+                       if (!args->refetch && everything_local(args, &ref))
                                state = FETCH_DONE;
                        else
                                state = FETCH_SEND_REQUEST;
index 7f94a2a58318099c6fd8e8940ce7926478bc2a4c..8c7752fc8212c7f911f9f462a2b306c48022bc2f 100644 (file)
@@ -42,6 +42,7 @@ struct fetch_pack_args {
        unsigned update_shallow:1;
        unsigned reject_shallow_remote:1;
        unsigned deepen:1;
+       unsigned refetch:1;
 
        /*
         * Indicate that the remote of this request is a promisor remote. The
diff --git a/fsmonitor--daemon.h b/fsmonitor--daemon.h
new file mode 100644 (file)
index 0000000..bd09fff
--- /dev/null
@@ -0,0 +1,166 @@
+#ifndef FSMONITOR_DAEMON_H
+#define FSMONITOR_DAEMON_H
+
+#ifdef HAVE_FSMONITOR_DAEMON_BACKEND
+
+#include "cache.h"
+#include "dir.h"
+#include "run-command.h"
+#include "simple-ipc.h"
+#include "thread-utils.h"
+
+struct fsmonitor_batch;
+struct fsmonitor_token_data;
+
+/*
+ * Create a new batch of path(s).  The returned batch is considered
+ * private and not linked into the fsmonitor daemon state.  The caller
+ * should fill this batch with one or more paths and then publish it.
+ */
+struct fsmonitor_batch *fsmonitor_batch__new(void);
+
+/*
+ * Free the list of batches starting with this one.
+ */
+void fsmonitor_batch__free_list(struct fsmonitor_batch *batch);
+
+/*
+ * Add this path to this batch of modified files.
+ *
+ * The batch should be private and NOT (yet) linked into the fsmonitor
+ * daemon state and therefore not yet visible to worker threads and so
+ * no locking is required.
+ */
+void fsmonitor_batch__add_path(struct fsmonitor_batch *batch, const char *path);
+
+struct fsmonitor_daemon_backend_data; /* opaque platform-specific data */
+
+struct fsmonitor_daemon_state {
+       pthread_t listener_thread;
+       pthread_mutex_t main_lock;
+
+       struct strbuf path_worktree_watch;
+       struct strbuf path_gitdir_watch;
+       int nr_paths_watching;
+
+       struct fsmonitor_token_data *current_token_data;
+
+       struct strbuf path_cookie_prefix;
+       pthread_cond_t cookies_cond;
+       int cookie_seq;
+       struct hashmap cookies;
+
+       int error_code;
+       struct fsmonitor_daemon_backend_data *backend_data;
+
+       struct ipc_server_data *ipc_server_data;
+};
+
+/*
+ * Pathname classifications.
+ *
+ * The daemon classifies the pathnames that it receives from file
+ * system notification events into the following categories and uses
+ * that to decide whether clients are told about them.  (And to watch
+ * for file system synchronization events.)
+ *
+ * The daemon only collects and reports on the set of modified paths
+ * within the working directory (proper).
+ *
+ * The client should only care about paths within the working
+ * directory proper (inside the working directory and not ".git" nor
+ * inside of ".git/").  That is, the client has read the index and is
+ * asking for a list of any paths in the working directory that have
+ * been modified since the last token.  The client does not care about
+ * file system changes within the ".git/" directory (such as new loose
+ * objects or packfiles).  So the client will only receive paths that
+ * are classified as IS_WORKDIR_PATH.
+ *
+ * Note that ".git" is usually a directory and is therefore inside
+ * the cone of the FS watch that we have on the working directory root,
+ * so we will also get FS events for disk activity on and within ".git/"
+ * that we need to respond to or filter from the client.
+ *
+ * But Git also allows ".git" to be a *file* that points to a GITDIR
+ * outside of the working directory.  When this happens, we need to
+ * create FS watches on both the working directory root *and* on the
+ * (external) GITDIR root.  (The latter is required because we put
+ * cookie files inside it and use them to sync with the FS event
+ * stream.)
+ *
+ * Note that in the context of this discussion, I'm using "GITDIR"
+ * to only mean an external GITDIR referenced by a ".git" file.
+ *
+ * The platform FS event backends will receive watch-specific
+ * relative paths (except for those OS's that always emit absolute
+ * paths).  We use the following enum and routines to classify each
+ * path so that we know how to handle it.  There is a slight asymmetry
+ * here because ".git/" is inside the working directory and the
+ * (external) GITDIR is not, and therefore how we handle events may
+ * vary slightly, so I have different enums for "IS...DOT_GIT..." and
+ * "IS...GITDIR...".
+ *
+ * The daemon uses the IS_DOT_GIT and IS_GITDIR internally to mean the
+ * exact ".git" file/directory or GITDIR directory.  If the daemon
+ * receives a delete event for either of these paths, it will
+ * automatically shutdown, for example.
+ *
+ * Note that the daemon DOES NOT explicitly watch nor special case the
+ * index.  The daemon does not read the index nor have any internal
+ * index-relative state, so there are no "IS...INDEX..." enum values.
+ */
+enum fsmonitor_path_type {
+       IS_WORKDIR_PATH = 0,
+
+       IS_DOT_GIT,
+       IS_INSIDE_DOT_GIT,
+       IS_INSIDE_DOT_GIT_WITH_COOKIE_PREFIX,
+
+       IS_GITDIR,
+       IS_INSIDE_GITDIR,
+       IS_INSIDE_GITDIR_WITH_COOKIE_PREFIX,
+
+       IS_OUTSIDE_CONE,
+};
+
+/*
+ * Classify a pathname relative to the root of the working directory.
+ */
+enum fsmonitor_path_type fsmonitor_classify_path_workdir_relative(
+       const char *relative_path);
+
+/*
+ * Classify a pathname relative to a <gitdir> that is external to the
+ * worktree directory.
+ */
+enum fsmonitor_path_type fsmonitor_classify_path_gitdir_relative(
+       const char *relative_path);
+
+/*
+ * Classify an absolute pathname received from a filesystem event.
+ */
+enum fsmonitor_path_type fsmonitor_classify_path_absolute(
+       struct fsmonitor_daemon_state *state,
+       const char *path);
+
+/*
+ * Prepend the this batch of path(s) onto the list of batches associated
+ * with the current token.  This makes the batch visible to worker threads.
+ *
+ * The caller no longer owns the batch and must not free it.
+ *
+ * Wake up the client threads waiting on these cookies.
+ */
+void fsmonitor_publish(struct fsmonitor_daemon_state *state,
+                      struct fsmonitor_batch *batch,
+                      const struct string_list *cookie_names);
+
+/*
+ * If the platform-specific layer loses sync with the filesystem,
+ * it should call this to invalidate cached data and abort waiting
+ * threads.
+ */
+void fsmonitor_force_resync(struct fsmonitor_daemon_state *state);
+
+#endif /* HAVE_FSMONITOR_DAEMON_BACKEND */
+#endif /* FSMONITOR_DAEMON_H */
diff --git a/fsmonitor-ipc.c b/fsmonitor-ipc.c
new file mode 100644 (file)
index 0000000..789e739
--- /dev/null
@@ -0,0 +1,171 @@
+#include "cache.h"
+#include "fsmonitor.h"
+#include "simple-ipc.h"
+#include "fsmonitor-ipc.h"
+#include "run-command.h"
+#include "strbuf.h"
+#include "trace2.h"
+
+#ifndef HAVE_FSMONITOR_DAEMON_BACKEND
+
+/*
+ * A trivial implementation of the fsmonitor_ipc__ API for unsupported
+ * platforms.
+ */
+
+int fsmonitor_ipc__is_supported(void)
+{
+       return 0;
+}
+
+const char *fsmonitor_ipc__get_path(void)
+{
+       return NULL;
+}
+
+enum ipc_active_state fsmonitor_ipc__get_state(void)
+{
+       return IPC_STATE__OTHER_ERROR;
+}
+
+int fsmonitor_ipc__send_query(const char *since_token,
+                             struct strbuf *answer)
+{
+       return -1;
+}
+
+int fsmonitor_ipc__send_command(const char *command,
+                               struct strbuf *answer)
+{
+       return -1;
+}
+
+#else
+
+int fsmonitor_ipc__is_supported(void)
+{
+       return 1;
+}
+
+GIT_PATH_FUNC(fsmonitor_ipc__get_path, "fsmonitor--daemon.ipc")
+
+enum ipc_active_state fsmonitor_ipc__get_state(void)
+{
+       return ipc_get_active_state(fsmonitor_ipc__get_path());
+}
+
+static int spawn_daemon(void)
+{
+       const char *args[] = { "fsmonitor--daemon", "start", NULL };
+
+       return run_command_v_opt_tr2(args, RUN_COMMAND_NO_STDIN | RUN_GIT_CMD,
+                                   "fsmonitor");
+}
+
+int fsmonitor_ipc__send_query(const char *since_token,
+                             struct strbuf *answer)
+{
+       int ret = -1;
+       int tried_to_spawn = 0;
+       enum ipc_active_state state = IPC_STATE__OTHER_ERROR;
+       struct ipc_client_connection *connection = NULL;
+       struct ipc_client_connect_options options
+               = IPC_CLIENT_CONNECT_OPTIONS_INIT;
+       const char *tok = since_token ? since_token : "";
+       size_t tok_len = since_token ? strlen(since_token) : 0;
+
+       options.wait_if_busy = 1;
+       options.wait_if_not_found = 0;
+
+       trace2_region_enter("fsm_client", "query", NULL);
+       trace2_data_string("fsm_client", NULL, "query/command", tok);
+
+try_again:
+       state = ipc_client_try_connect(fsmonitor_ipc__get_path(), &options,
+                                      &connection);
+
+       switch (state) {
+       case IPC_STATE__LISTENING:
+               ret = ipc_client_send_command_to_connection(
+                       connection, tok, tok_len, answer);
+               ipc_client_close_connection(connection);
+
+               trace2_data_intmax("fsm_client", NULL,
+                                  "query/response-length", answer->len);
+               goto done;
+
+       case IPC_STATE__NOT_LISTENING:
+       case IPC_STATE__PATH_NOT_FOUND:
+               if (tried_to_spawn)
+                       goto done;
+
+               tried_to_spawn++;
+               if (spawn_daemon())
+                       goto done;
+
+               /*
+                * Try again, but this time give the daemon a chance to
+                * actually create the pipe/socket.
+                *
+                * Granted, the daemon just started so it can't possibly have
+                * any FS cached yet, so we'll always get a trivial answer.
+                * BUT the answer should include a new token that can serve
+                * as the basis for subsequent requests.
+                */
+               options.wait_if_not_found = 1;
+               goto try_again;
+
+       case IPC_STATE__INVALID_PATH:
+               ret = error(_("fsmonitor_ipc__send_query: invalid path '%s'"),
+                           fsmonitor_ipc__get_path());
+               goto done;
+
+       case IPC_STATE__OTHER_ERROR:
+       default:
+               ret = error(_("fsmonitor_ipc__send_query: unspecified error on '%s'"),
+                           fsmonitor_ipc__get_path());
+               goto done;
+       }
+
+done:
+       trace2_region_leave("fsm_client", "query", NULL);
+
+       return ret;
+}
+
+int fsmonitor_ipc__send_command(const char *command,
+                               struct strbuf *answer)
+{
+       struct ipc_client_connection *connection = NULL;
+       struct ipc_client_connect_options options
+               = IPC_CLIENT_CONNECT_OPTIONS_INIT;
+       int ret;
+       enum ipc_active_state state;
+       const char *c = command ? command : "";
+       size_t c_len = command ? strlen(command) : 0;
+
+       strbuf_reset(answer);
+
+       options.wait_if_busy = 1;
+       options.wait_if_not_found = 0;
+
+       state = ipc_client_try_connect(fsmonitor_ipc__get_path(), &options,
+                                      &connection);
+       if (state != IPC_STATE__LISTENING) {
+               die(_("fsmonitor--daemon is not running"));
+               return -1;
+       }
+
+       ret = ipc_client_send_command_to_connection(connection, c, c_len,
+                                                   answer);
+       ipc_client_close_connection(connection);
+
+       if (ret == -1) {
+               die(_("could not send '%s' command to fsmonitor--daemon"), c);
+               return -1;
+       }
+
+       return 0;
+}
+
+#endif
diff --git a/fsmonitor-ipc.h b/fsmonitor-ipc.h
new file mode 100644 (file)
index 0000000..b6a7067
--- /dev/null
@@ -0,0 +1,48 @@
+#ifndef FSMONITOR_IPC_H
+#define FSMONITOR_IPC_H
+
+#include "simple-ipc.h"
+
+/*
+ * Returns true if built-in file system monitor daemon is defined
+ * for this platform.
+ */
+int fsmonitor_ipc__is_supported(void);
+
+/*
+ * Returns the pathname to the IPC named pipe or Unix domain socket
+ * where a `git-fsmonitor--daemon` process will listen.  This is a
+ * per-worktree value.
+ *
+ * Returns NULL if the daemon is not supported on this platform.
+ */
+const char *fsmonitor_ipc__get_path(void);
+
+/*
+ * Try to determine whether there is a `git-fsmonitor--daemon` process
+ * listening on the IPC pipe/socket.
+ */
+enum ipc_active_state fsmonitor_ipc__get_state(void);
+
+/*
+ * Connect to a `git-fsmonitor--daemon` process via simple-ipc
+ * and ask for the set of changed files since the given token.
+ *
+ * Spawn a daemon process in the background if necessary.
+ *
+ * Returns -1 on error; 0 on success.
+ */
+int fsmonitor_ipc__send_query(const char *since_token,
+                             struct strbuf *answer);
+
+/*
+ * Connect to a `git-fsmonitor--daemon` process via simple-ipc and
+ * send a command verb.  If no daemon is available, we DO NOT try to
+ * start one.
+ *
+ * Returns -1 on error; 0 on success.
+ */
+int fsmonitor_ipc__send_command(const char *command,
+                               struct strbuf *answer);
+
+#endif /* FSMONITOR_IPC_H */
diff --git a/fsmonitor-settings.c b/fsmonitor-settings.c
new file mode 100644 (file)
index 0000000..757d230
--- /dev/null
@@ -0,0 +1,114 @@
+#include "cache.h"
+#include "config.h"
+#include "repository.h"
+#include "fsmonitor-settings.h"
+
+/*
+ * We keep this structure defintion private and have getters
+ * for all fields so that we can lazy load it as needed.
+ */
+struct fsmonitor_settings {
+       enum fsmonitor_mode mode;
+       char *hook_path;
+};
+
+static void lookup_fsmonitor_settings(struct repository *r)
+{
+       struct fsmonitor_settings *s;
+       const char *const_str;
+       int bool_value;
+
+       if (r->settings.fsmonitor)
+               return;
+
+       CALLOC_ARRAY(s, 1);
+       s->mode = FSMONITOR_MODE_DISABLED;
+
+       r->settings.fsmonitor = s;
+
+       /*
+        * Overload the existing "core.fsmonitor" config setting (which
+        * has historically been either unset or a hook pathname) to
+        * now allow a boolean value to enable the builtin FSMonitor
+        * or to turn everything off.  (This does imply that you can't
+        * use a hook script named "true" or "false", but that's OK.)
+        */
+       switch (repo_config_get_maybe_bool(r, "core.fsmonitor", &bool_value)) {
+
+       case 0: /* config value was set to <bool> */
+               if (bool_value)
+                       fsm_settings__set_ipc(r);
+               return;
+
+       case 1: /* config value was unset */
+               const_str = getenv("GIT_TEST_FSMONITOR");
+               break;
+
+       case -1: /* config value set to an arbitrary string */
+               if (repo_config_get_pathname(r, "core.fsmonitor", &const_str))
+                       return; /* should not happen */
+               break;
+
+       default: /* should not happen */
+               return;
+       }
+
+       if (!const_str || !*const_str)
+               return;
+
+       fsm_settings__set_hook(r, const_str);
+}
+
+enum fsmonitor_mode fsm_settings__get_mode(struct repository *r)
+{
+       if (!r)
+               r = the_repository;
+
+       lookup_fsmonitor_settings(r);
+
+       return r->settings.fsmonitor->mode;
+}
+
+const char *fsm_settings__get_hook_path(struct repository *r)
+{
+       if (!r)
+               r = the_repository;
+
+       lookup_fsmonitor_settings(r);
+
+       return r->settings.fsmonitor->hook_path;
+}
+
+void fsm_settings__set_ipc(struct repository *r)
+{
+       if (!r)
+               r = the_repository;
+
+       lookup_fsmonitor_settings(r);
+
+       r->settings.fsmonitor->mode = FSMONITOR_MODE_IPC;
+       FREE_AND_NULL(r->settings.fsmonitor->hook_path);
+}
+
+void fsm_settings__set_hook(struct repository *r, const char *path)
+{
+       if (!r)
+               r = the_repository;
+
+       lookup_fsmonitor_settings(r);
+
+       r->settings.fsmonitor->mode = FSMONITOR_MODE_HOOK;
+       FREE_AND_NULL(r->settings.fsmonitor->hook_path);
+       r->settings.fsmonitor->hook_path = strdup(path);
+}
+
+void fsm_settings__set_disabled(struct repository *r)
+{
+       if (!r)
+               r = the_repository;
+
+       lookup_fsmonitor_settings(r);
+
+       r->settings.fsmonitor->mode = FSMONITOR_MODE_DISABLED;
+       FREE_AND_NULL(r->settings.fsmonitor->hook_path);
+}
diff --git a/fsmonitor-settings.h b/fsmonitor-settings.h
new file mode 100644 (file)
index 0000000..a4c5d7b
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef FSMONITOR_SETTINGS_H
+#define FSMONITOR_SETTINGS_H
+
+struct repository;
+
+enum fsmonitor_mode {
+       FSMONITOR_MODE_DISABLED = 0,
+       FSMONITOR_MODE_HOOK = 1, /* core.fsmonitor=<hook_path> */
+       FSMONITOR_MODE_IPC = 2,  /* core.fsmonitor=<true> */
+};
+
+void fsm_settings__set_ipc(struct repository *r);
+void fsm_settings__set_hook(struct repository *r, const char *path);
+void fsm_settings__set_disabled(struct repository *r);
+
+enum fsmonitor_mode fsm_settings__get_mode(struct repository *r);
+const char *fsm_settings__get_hook_path(struct repository *r);
+
+struct fsmonitor_settings;
+
+#endif /* FSMONITOR_SETTINGS_H */
index ab9bfc60b34e3146f73194d01cf8963a90f1d768..292a6742b4fa23332000a61ad3db6ca28cf88018 100644 (file)
@@ -3,6 +3,7 @@
 #include "dir.h"
 #include "ewah/ewok.h"
 #include "fsmonitor.h"
+#include "fsmonitor-ipc.h"
 #include "run-command.h"
 #include "strbuf.h"
 
@@ -148,15 +149,18 @@ void write_fsmonitor_extension(struct strbuf *sb, struct index_state *istate)
 /*
  * Call the query-fsmonitor hook passing the last update token of the saved results.
  */
-static int query_fsmonitor(int version, const char *last_update, struct strbuf *query_result)
+static int query_fsmonitor_hook(struct repository *r,
+                               int version,
+                               const char *last_update,
+                               struct strbuf *query_result)
 {
        struct child_process cp = CHILD_PROCESS_INIT;
        int result;
 
-       if (!core_fsmonitor)
+       if (fsm_settings__get_mode(r) != FSMONITOR_MODE_HOOK)
                return -1;
 
-       strvec_push(&cp.args, core_fsmonitor);
+       strvec_push(&cp.args, fsm_settings__get_hook_path(r));
        strvec_pushf(&cp.args, "%d", version);
        strvec_pushf(&cp.args, "%s", last_update);
        cp.use_shell = 1;
@@ -168,29 +172,15 @@ static int query_fsmonitor(int version, const char *last_update, struct strbuf *
 
        if (result)
                trace2_data_intmax("fsm_hook", NULL, "query/failed", result);
-       else {
+       else
                trace2_data_intmax("fsm_hook", NULL, "query/response-length",
                                   query_result->len);
 
-               if (fsmonitor_is_trivial_response(query_result))
-                       trace2_data_intmax("fsm_hook", NULL,
-                                          "query/trivial-response", 1);
-       }
-
        trace2_region_leave("fsm_hook", "query", NULL);
 
        return result;
 }
 
-int fsmonitor_is_trivial_response(const struct strbuf *query_result)
-{
-       static char trivial_response[3] = { '\0', '/', '\0' };
-
-       return query_result->len >= 3 &&
-               !memcmp(trivial_response,
-                       &query_result->buf[query_result->len - 3], 3);
-}
-
 static void fsmonitor_refresh_callback(struct index_state *istate, char *name)
 {
        int i, len = strlen(name);
@@ -229,6 +219,43 @@ static void fsmonitor_refresh_callback(struct index_state *istate, char *name)
        untracked_cache_invalidate_path(istate, name, 0);
 }
 
+/*
+ * The number of pathnames that we need to receive from FSMonitor
+ * before we force the index to be updated.
+ *
+ * Note that any pathname within the set of received paths MAY cause
+ * cache-entry or istate flag bits to be updated and thus cause the
+ * index to be updated on disk.
+ *
+ * However, the response may contain many paths (such as ignored
+ * paths) that will not update any flag bits.  And thus not force the
+ * index to be updated.  (This is fine and normal.)  It also means
+ * that the token will not be updated in the FSMonitor index
+ * extension.  So the next Git command will find the same token in the
+ * index, make the same token-relative request, and receive the same
+ * response (plus any newly changed paths).  If this response is large
+ * (and continues to grow), performance could be impacted.
+ *
+ * For example, if the user runs a build and it writes 100K object
+ * files but doesn't modify any source files, the index would not need
+ * to be updated.  The FSMonitor response (after the build and
+ * relative to a pre-build token) might be 5MB.  Each subsequent Git
+ * command will receive that same 100K/5MB response until something
+ * causes the index to be updated.  And `refresh_fsmonitor()` will
+ * have to iterate over those 100K paths each time.
+ *
+ * Performance could be improved if we optionally force update the
+ * index after a very large response and get an updated token into
+ * the FSMonitor index extension.  This should allow subsequent
+ * commands to get smaller and more current responses.
+ *
+ * The value chosen here does not need to be precise.  The index
+ * will be updated automatically the first time the user touches
+ * a tracked file and causes a command like `git status` to
+ * update an mtime to be updated and/or set a flag bit.
+ */
+static int fsmonitor_force_update_threshold = 100;
+
 void refresh_fsmonitor(struct index_state *istate)
 {
        struct strbuf query_result = STRBUF_INIT;
@@ -238,17 +265,62 @@ void refresh_fsmonitor(struct index_state *istate)
        struct strbuf last_update_token = STRBUF_INIT;
        char *buf;
        unsigned int i;
+       int is_trivial = 0;
+       struct repository *r = istate->repo ? istate->repo : the_repository;
+       enum fsmonitor_mode fsm_mode = fsm_settings__get_mode(r);
 
-       if (!core_fsmonitor || istate->fsmonitor_has_run_once)
+       if (fsm_mode <= FSMONITOR_MODE_DISABLED ||
+           istate->fsmonitor_has_run_once)
                return;
 
-       hook_version = fsmonitor_hook_version();
-
        istate->fsmonitor_has_run_once = 1;
 
        trace_printf_key(&trace_fsmonitor, "refresh fsmonitor");
+
+       if (fsm_mode == FSMONITOR_MODE_IPC) {
+               query_success = !fsmonitor_ipc__send_query(
+                       istate->fsmonitor_last_update ?
+                       istate->fsmonitor_last_update : "builtin:fake",
+                       &query_result);
+               if (query_success) {
+                       /*
+                        * The response contains a series of nul terminated
+                        * strings.  The first is the new token.
+                        *
+                        * Use `char *buf` as an interlude to trick the CI
+                        * static analysis to let us use `strbuf_addstr()`
+                        * here (and only copy the token) rather than
+                        * `strbuf_addbuf()`.
+                        */
+                       buf = query_result.buf;
+                       strbuf_addstr(&last_update_token, buf);
+                       bol = last_update_token.len + 1;
+                       is_trivial = query_result.buf[bol] == '/';
+                       if (is_trivial)
+                               trace2_data_intmax("fsm_client", NULL,
+                                                  "query/trivial-response", 1);
+               } else {
+                       /*
+                        * The builtin daemon is not available on this
+                        * platform -OR- we failed to get a response.
+                        *
+                        * Generate a fake token (rather than a V1
+                        * timestamp) for the index extension.  (If
+                        * they switch back to the hook API, we don't
+                        * want ambiguous state.)
+                        */
+                       strbuf_addstr(&last_update_token, "builtin:fake");
+               }
+
+               goto apply_results;
+       }
+
+       assert(fsm_mode == FSMONITOR_MODE_HOOK);
+
+       hook_version = fsmonitor_hook_version();
+
        /*
-        * This could be racy so save the date/time now and query_fsmonitor
+        * This could be racy so save the date/time now and query_fsmonitor_hook
         * should be inclusive to ensure we don't miss potential changes.
         */
        last_update = getnanotime();
@@ -256,13 +328,14 @@ void refresh_fsmonitor(struct index_state *istate)
                strbuf_addf(&last_update_token, "%"PRIu64"", last_update);
 
        /*
-        * If we have a last update token, call query_fsmonitor for the set of
+        * If we have a last update token, call query_fsmonitor_hook for the set of
         * changes since that token, else assume everything is possibly dirty
         * and check it all.
         */
        if (istate->fsmonitor_last_update) {
                if (hook_version == -1 || hook_version == HOOK_INTERFACE_VERSION2) {
-                       query_success = !query_fsmonitor(HOOK_INTERFACE_VERSION2,
+                       query_success = !query_fsmonitor_hook(
+                               r, HOOK_INTERFACE_VERSION2,
                                istate->fsmonitor_last_update, &query_result);
 
                        if (query_success) {
@@ -283,6 +356,7 @@ void refresh_fsmonitor(struct index_state *istate)
                                        query_success = 0;
                                } else {
                                        bol = last_update_token.len + 1;
+                                       is_trivial = query_result.buf[bol] == '/';
                                }
                        } else if (hook_version < 0) {
                                hook_version = HOOK_INTERFACE_VERSION1;
@@ -292,37 +366,83 @@ void refresh_fsmonitor(struct index_state *istate)
                }
 
                if (hook_version == HOOK_INTERFACE_VERSION1) {
-                       query_success = !query_fsmonitor(HOOK_INTERFACE_VERSION1,
+                       query_success = !query_fsmonitor_hook(
+                               r, HOOK_INTERFACE_VERSION1,
                                istate->fsmonitor_last_update, &query_result);
+                       if (query_success)
+                               is_trivial = query_result.buf[0] == '/';
                }
 
-               trace_performance_since(last_update, "fsmonitor process '%s'", core_fsmonitor);
-               trace_printf_key(&trace_fsmonitor, "fsmonitor process '%s' returned %s",
-                       core_fsmonitor, query_success ? "success" : "failure");
+               if (is_trivial)
+                       trace2_data_intmax("fsm_hook", NULL,
+                                          "query/trivial-response", 1);
+
+               trace_performance_since(last_update, "fsmonitor process '%s'",
+                                       fsm_settings__get_hook_path(r));
+               trace_printf_key(&trace_fsmonitor,
+                                "fsmonitor process '%s' returned %s",
+                                fsm_settings__get_hook_path(r),
+                                query_success ? "success" : "failure");
        }
 
-       /* a fsmonitor process can return '/' to indicate all entries are invalid */
-       if (query_success && query_result.buf[bol] != '/') {
-               /* Mark all entries returned by the monitor as dirty */
+apply_results:
+       /*
+        * The response from FSMonitor (excluding the header token) is
+        * either:
+        *
+        * [a] a (possibly empty) list of NUL delimited relative
+        *     pathnames of changed paths.  This list can contain
+        *     files and directories.  Directories have a trailing
+        *     slash.
+        *
+        * [b] a single '/' to indicate the provider had no
+        *     information and that we should consider everything
+        *     invalid.  We call this a trivial response.
+        */
+       trace2_region_enter("fsmonitor", "apply_results", istate->repo);
+
+       if (query_success && !is_trivial) {
+               /*
+                * Mark all pathnames returned by the monitor as dirty.
+                *
+                * This updates both the cache-entries and the untracked-cache.
+                */
+               int count = 0;
+
                buf = query_result.buf;
                for (i = bol; i < query_result.len; i++) {
                        if (buf[i] != '\0')
                                continue;
                        fsmonitor_refresh_callback(istate, buf + bol);
                        bol = i + 1;
+                       count++;
                }
-               if (bol < query_result.len)
+               if (bol < query_result.len) {
                        fsmonitor_refresh_callback(istate, buf + bol);
+                       count++;
+               }
 
                /* Now mark the untracked cache for fsmonitor usage */
                if (istate->untracked)
                        istate->untracked->use_fsmonitor = 1;
-       } else {
 
-               /* We only want to run the post index changed hook if we've actually changed entries, so keep track
-                * if we actually changed entries or not */
+               if (count > fsmonitor_force_update_threshold)
+                       istate->cache_changed |= FSMONITOR_CHANGED;
+
+               trace2_data_intmax("fsmonitor", istate->repo, "apply_count",
+                                  count);
+
+       } else {
+               /*
+                * We failed to get a response or received a trivial response,
+                * so invalidate everything.
+                *
+                * We only want to run the post index changed hook if
+                * we've actually changed entries, so keep track if we
+                * actually changed entries or not.
+                */
                int is_cache_changed = 0;
-               /* Mark all entries invalid */
+
                for (i = 0; i < istate->cache_nr; i++) {
                        if (istate->cache[i]->ce_flags & CE_FSMONITOR_VALID) {
                                is_cache_changed = 1;
@@ -330,13 +450,18 @@ void refresh_fsmonitor(struct index_state *istate)
                        }
                }
 
-               /* If we're going to check every file, ensure we save the results */
+               /*
+                * If we're going to check every file, ensure we save
+                * the results.
+                */
                if (is_cache_changed)
                        istate->cache_changed |= FSMONITOR_CHANGED;
 
                if (istate->untracked)
                        istate->untracked->use_fsmonitor = 0;
        }
+       trace2_region_leave("fsmonitor", "apply_results", istate->repo);
+
        strbuf_release(&query_result);
 
        /* Now that we've updated istate, save the last_update_token */
@@ -411,7 +536,8 @@ void remove_fsmonitor(struct index_state *istate)
 void tweak_fsmonitor(struct index_state *istate)
 {
        unsigned int i;
-       int fsmonitor_enabled = git_config_get_fsmonitor();
+       int fsmonitor_enabled = (fsm_settings__get_mode(istate->repo)
+                                > FSMONITOR_MODE_DISABLED);
 
        if (istate->fsmonitor_dirty) {
                if (fsmonitor_enabled) {
@@ -431,16 +557,8 @@ void tweak_fsmonitor(struct index_state *istate)
                istate->fsmonitor_dirty = NULL;
        }
 
-       switch (fsmonitor_enabled) {
-       case -1: /* keep: do nothing */
-               break;
-       case 0: /* false */
-               remove_fsmonitor(istate);
-               break;
-       case 1: /* true */
+       if (fsmonitor_enabled)
                add_fsmonitor(istate);
-               break;
-       default: /* unknown value: do nothing */
-               break;
-       }
+       else
+               remove_fsmonitor(istate);
 }
index f20d72631d76b4b5e7d7cff75a833215a5d57a71..3f41f653691abd65d2fae4c1a686c382807274e1 100644 (file)
@@ -3,6 +3,7 @@
 
 #include "cache.h"
 #include "dir.h"
+#include "fsmonitor-settings.h"
 
 extern struct trace_key trace_fsmonitor;
 
@@ -57,7 +58,10 @@ int fsmonitor_is_trivial_response(const struct strbuf *query_result);
  */
 static inline int is_fsmonitor_refreshed(const struct index_state *istate)
 {
-       return !core_fsmonitor || istate->fsmonitor_has_run_once;
+       enum fsmonitor_mode fsm_mode = fsm_settings__get_mode(istate->repo);
+
+       return fsm_mode <= FSMONITOR_MODE_DISABLED ||
+               istate->fsmonitor_has_run_once;
 }
 
 /*
@@ -67,7 +71,10 @@ static inline int is_fsmonitor_refreshed(const struct index_state *istate)
  */
 static inline void mark_fsmonitor_valid(struct index_state *istate, struct cache_entry *ce)
 {
-       if (core_fsmonitor && !(ce->ce_flags & CE_FSMONITOR_VALID)) {
+       enum fsmonitor_mode fsm_mode = fsm_settings__get_mode(istate->repo);
+
+       if (fsm_mode > FSMONITOR_MODE_DISABLED &&
+           !(ce->ce_flags & CE_FSMONITOR_VALID)) {
                istate->cache_changed = 1;
                ce->ce_flags |= CE_FSMONITOR_VALID;
                trace_printf_key(&trace_fsmonitor, "mark_fsmonitor_clean '%s'", ce->name);
@@ -83,7 +90,9 @@ static inline void mark_fsmonitor_valid(struct index_state *istate, struct cache
  */
 static inline void mark_fsmonitor_invalid(struct index_state *istate, struct cache_entry *ce)
 {
-       if (core_fsmonitor) {
+       enum fsmonitor_mode fsm_mode = fsm_settings__get_mode(istate->repo);
+
+       if (fsm_mode > FSMONITOR_MODE_DISABLED) {
                ce->ce_flags &= ~CE_FSMONITOR_VALID;
                untracked_cache_invalidate_path(istate, ce->name, 1);
                trace_printf_key(&trace_fsmonitor, "mark_fsmonitor_invalid '%s'", ce->name);
index 1c651c880e43ada6d7ef04238c1aa01ed73379cb..33636827d5da453c4c6282a18e3fa4c8aba227ec 100644 (file)
 #else
 #include <stdint.h>
 #endif
+#ifdef HAVE_ARC4RANDOM_LIBBSD
+#include <bsd/stdlib.h>
+#endif
+#ifdef HAVE_GETRANDOM
+#include <sys/random.h>
+#endif
 #ifdef NO_INTPTR_T
 /*
  * On I16LP32, ILP32 and LP64 "long" is the safe bet, however
@@ -587,12 +593,14 @@ void warning_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
 #include <openssl/x509v3.h>
 #endif /* NO_OPENSSL */
 
+#ifdef HAVE_OPENSSL_CSPRNG
+#include <openssl/rand.h>
+#endif
+
 /*
  * Let callers be aware of the constant return value; this can help
  * gcc with -Wuninitialized analysis. We restrict this trick to gcc, though,
- * because some compilers may not support variadic macros. Since we're only
- * trying to help gcc, anyway, it's OK; other compilers will fall back to
- * using the function as usual.
+ * because other compilers may be confused by this.
  */
 #if defined(__GNUC__)
 static inline int const_error(void)
@@ -1322,25 +1330,42 @@ static inline int regexec_buf(const regex_t *preg, const char *buf, size_t size,
 #endif
 #endif
 
-/*
- * This is always defined as a first step towards making the use of variadic
- * macros unconditional. If it causes compilation problems on your platform,
- * please report it to the Git mailing list at git@vger.kernel.org.
- */
-#define HAVE_VARIADIC_MACROS 1
-
 /* usage.c: only to be used for testing BUG() implementation (see test-tool) */
 extern int BUG_exit_code;
 
-#ifdef HAVE_VARIADIC_MACROS
 __attribute__((format (printf, 3, 4))) NORETURN
 void BUG_fl(const char *file, int line, const char *fmt, ...);
 #define BUG(...) BUG_fl(__FILE__, __LINE__, __VA_ARGS__)
+
+#ifdef __APPLE__
+#define FSYNC_METHOD_DEFAULT FSYNC_METHOD_WRITEOUT_ONLY
 #else
-__attribute__((format (printf, 1, 2))) NORETURN
-void BUG(const char *fmt, ...);
+#define FSYNC_METHOD_DEFAULT FSYNC_METHOD_FSYNC
 #endif
 
+enum fsync_action {
+       FSYNC_WRITEOUT_ONLY,
+       FSYNC_HARDWARE_FLUSH
+};
+
+/*
+ * Issues an fsync against the specified file according to the specified mode.
+ *
+ * FSYNC_WRITEOUT_ONLY attempts to use interfaces available on some operating
+ * systems to flush the OS cache without issuing a flush command to the storage
+ * controller. If those interfaces are unavailable, the function fails with
+ * ENOSYS.
+ *
+ * FSYNC_HARDWARE_FLUSH does an OS writeout and hardware flush to ensure that
+ * changes are durable. It is not expected to fail.
+ */
+int git_fsync(int fd, enum fsync_action action);
+
+/*
+ * Writes out trace statistics for fsync using the trace2 API.
+ */
+void trace_git_fsync_stats(void);
+
 /*
  * Preserves errno, prints a message, but gives no warning for ENOENT.
  * Returns 0 on success, which includes trying to unlink an object that does
@@ -1462,6 +1487,18 @@ void unleak_memory(const void *ptr, size_t len);
 #define UNLEAK(var) do {} while (0)
 #endif
 
+#define z_const
+#include <zlib.h>
+
+#if ZLIB_VERNUM < 0x1290
+/*
+ * This is uncompress2, which is only available in zlib >= 1.2.9
+ * (released as of early 2017). See compat/zlib-uncompress2.c.
+ */
+int uncompress2(Bytef *dest, uLongf *destLen, const Bytef *source,
+               uLong *sourceLen);
+#endif
+
 /*
  * This include must come after system headers, since it introduces macros that
  * replace system names.
@@ -1508,4 +1545,11 @@ static inline void *container_of_or_null_offset(void *ptr, size_t offset)
 
 void sleep_millisec(int millisec);
 
+/*
+ * Generate len bytes from the system cryptographically secure PRNG.
+ * Returns 0 on success and -1 on error, setting errno.  The inability to
+ * satisfy the full request is an error.
+ */
+int csprng_bytes(void *buf, size_t len);
+
 #endif
index cb37545455e9d8b782c078582a7e5a8b902af845..a9b1f9044108e4dce94b865f1f777039d8755613 100755 (executable)
--- a/git-p4.py
+++ b/git-p4.py
@@ -108,10 +108,7 @@ def p4_build_cmd(cmd):
         # Provide a way to not pass this option by setting git-p4.retries to 0
         real_cmd += ["-r", str(retries)]
 
-    if not isinstance(cmd, list):
-        real_cmd = ' '.join(real_cmd) + ' ' + cmd
-    else:
-        real_cmd += cmd
+    real_cmd += cmd
 
     # now check that we can actually talk to the server
     global p4_access_checked
@@ -223,153 +220,93 @@ def decode_path(path):
 
 def run_git_hook(cmd, param=[]):
     """Execute a hook if the hook exists."""
+    args = ['git', 'hook', 'run', '--ignore-missing', cmd]
+    if param:
+        args.append("--")
+        for p in param:
+            args.append(p)
+    return subprocess.call(args) == 0
+
+def write_pipe(c, stdin, *k, **kw):
     if verbose:
-        sys.stderr.write("Looking for hook: %s\n" % cmd)
-        sys.stderr.flush()
-
-    hooks_path = gitConfig("core.hooksPath")
-    if len(hooks_path) <= 0:
-        hooks_path = os.path.join(os.environ["GIT_DIR"], "hooks")
-
-    if not isinstance(param, list):
-        param=[param]
-
-    # resolve hook file name, OS depdenent
-    hook_file = os.path.join(hooks_path, cmd)
-    if platform.system() == 'Windows':
-        if not os.path.isfile(hook_file):
-            # look for the file with an extension
-            files = glob.glob(hook_file + ".*")
-            if not files:
-                return True
-            files.sort()
-            hook_file = files.pop()
-            while hook_file.upper().endswith(".SAMPLE"):
-                # The file is a sample hook. We don't want it
-                if len(files) > 0:
-                    hook_file = files.pop()
-                else:
-                    return True
-
-    if not os.path.isfile(hook_file) or not os.access(hook_file, os.X_OK):
-        return True
-
-    return run_hook_command(hook_file, param) == 0
-
-def run_hook_command(cmd, param):
-    """Executes a git hook command
-       cmd = the command line file to be executed. This can be
-       a file that is run by OS association.
-
-       param = a list of parameters to pass to the cmd command
-
-       On windows, the extension is checked to see if it should
-       be run with the Git for Windows Bash shell.  If there
-       is no file extension, the file is deemed a bash shell
-       and will be handed off to sh.exe. Otherwise, Windows
-       will be called with the shell to handle the file assocation.
-
-       For non Windows operating systems, the file is called
-       as an executable.
-    """
-    cli = [cmd] + param
-    use_shell = False
-    if platform.system() == 'Windows':
-        (root,ext) = os.path.splitext(cmd)
-        if ext == "":
-            exe_path = os.environ.get("EXEPATH")
-            if exe_path is None:
-                exe_path = ""
-            else:
-                exe_path = os.path.join(exe_path, "bin")
-            cli = [os.path.join(exe_path, "SH.EXE")] + cli
-        else:
-            use_shell = True
-    return subprocess.call(cli, shell=use_shell)
-
-
-def write_pipe(c, stdin):
-    if verbose:
-        sys.stderr.write('Writing pipe: %s\n' % str(c))
+        sys.stderr.write('Writing pipe: {}\n'.format(' '.join(c)))
 
-    expand = not isinstance(c, list)
-    p = subprocess.Popen(c, stdin=subprocess.PIPE, shell=expand)
+    p = subprocess.Popen(c, stdin=subprocess.PIPE, *k, **kw)
     pipe = p.stdin
     val = pipe.write(stdin)
     pipe.close()
     if p.wait():
-        die('Command failed: %s' % str(c))
+        die('Command failed: {}'.format(' '.join(c)))
 
     return val
 
-def p4_write_pipe(c, stdin):
+def p4_write_pipe(c, stdin, *k, **kw):
     real_cmd = p4_build_cmd(c)
     if bytes is not str and isinstance(stdin, str):
         stdin = encode_text_stream(stdin)
-    return write_pipe(real_cmd, stdin)
+    return write_pipe(real_cmd, stdin, *k, **kw)
 
-def read_pipe_full(c):
+def read_pipe_full(c, *k, **kw):
     """ Read output from  command. Returns a tuple
         of the return status, stdout text and stderr
         text.
     """
     if verbose:
-        sys.stderr.write('Reading pipe: %s\n' % str(c))
+        sys.stderr.write('Reading pipe: {}\n'.format(' '.join(c)))
 
-    expand = not isinstance(c, list)
-    p = subprocess.Popen(c, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=expand)
+    p = subprocess.Popen(
+        c, stdout=subprocess.PIPE, stderr=subprocess.PIPE, *k, **kw)
     (out, err) = p.communicate()
     return (p.returncode, out, decode_text_stream(err))
 
-def read_pipe(c, ignore_error=False, raw=False):
+def read_pipe(c, ignore_error=False, raw=False, *k, **kw):
     """ Read output from  command. Returns the output text on
         success. On failure, terminates execution, unless
         ignore_error is True, when it returns an empty string.
 
         If raw is True, do not attempt to decode output text.
     """
-    (retcode, out, err) = read_pipe_full(c)
+    (retcode, out, err) = read_pipe_full(c, *k, **kw)
     if retcode != 0:
         if ignore_error:
             out = ""
         else:
-            die('Command failed: %s\nError: %s' % (str(c), err))
+            die('Command failed: {}\nError: {}'.format(' '.join(c), err))
     if not raw:
         out = decode_text_stream(out)
     return out
 
-def read_pipe_text(c):
+def read_pipe_text(c, *k, **kw):
     """ Read output from a command with trailing whitespace stripped.
         On error, returns None.
     """
-    (retcode, out, err) = read_pipe_full(c)
+    (retcode, out, err) = read_pipe_full(c, *k, **kw)
     if retcode != 0:
         return None
     else:
         return decode_text_stream(out).rstrip()
 
-def p4_read_pipe(c, ignore_error=False, raw=False):
+def p4_read_pipe(c, ignore_error=False, raw=False, *k, **kw):
     real_cmd = p4_build_cmd(c)
-    return read_pipe(real_cmd, ignore_error, raw=raw)
+    return read_pipe(real_cmd, ignore_error, raw=raw, *k, **kw)
 
-def read_pipe_lines(c, raw=False):
+def read_pipe_lines(c, raw=False, *k, **kw):
     if verbose:
-        sys.stderr.write('Reading pipe: %s\n' % str(c))
+        sys.stderr.write('Reading pipe: {}\n'.format(' '.join(c)))
 
-    expand = not isinstance(c, list)
-    p = subprocess.Popen(c, stdout=subprocess.PIPE, shell=expand)
+    p = subprocess.Popen(c, stdout=subprocess.PIPE, *k, **kw)
     pipe = p.stdout
     lines = pipe.readlines()
     if not raw:
         lines = [decode_text_stream(line) for line in lines]
     if pipe.close() or p.wait():
-        die('Command failed: %s' % str(c))
+        die('Command failed: {}'.format(' '.join(c)))
     return lines
 
-def p4_read_pipe_lines(c):
+def p4_read_pipe_lines(c, *k, **kw):
     """Specifically invoke p4 on the command supplied. """
     real_cmd = p4_build_cmd(c)
-    return read_pipe_lines(real_cmd)
+    return read_pipe_lines(real_cmd, *k, **kw)
 
 def p4_has_command(cmd):
     """Ask p4 for help on this command.  If it returns an error, the
@@ -400,23 +337,22 @@ def p4_has_move_command():
     # assume it failed because @... was invalid changelist
     return True
 
-def system(cmd, ignore_error=False):
-    expand = not isinstance(cmd, list)
+def system(cmd, ignore_error=False, *k, **kw):
     if verbose:
-        sys.stderr.write("executing %s\n" % str(cmd))
-    retcode = subprocess.call(cmd, shell=expand)
+        sys.stderr.write("executing {}\n".format(
+            ' '.join(cmd) if isinstance(cmd, list) else cmd))
+    retcode = subprocess.call(cmd, *k, **kw)
     if retcode and not ignore_error:
-        raise CalledProcessError(retcode, cmd)
+        raise subprocess.CalledProcessError(retcode, cmd)
 
     return retcode
 
-def p4_system(cmd):
+def p4_system(cmd, *k, **kw):
     """Specifically invoke p4 as the system command. """
     real_cmd = p4_build_cmd(cmd)
-    expand = not isinstance(real_cmd, list)
-    retcode = subprocess.call(real_cmd, shell=expand)
+    retcode = subprocess.call(real_cmd, *k, **kw)
     if retcode:
-        raise CalledProcessError(retcode, real_cmd)
+        raise subprocess.CalledProcessError(retcode, real_cmd)
 
 def die_bad_access(s):
     die("failure accessing depot: {0}".format(s.rstrip()))
@@ -735,18 +671,11 @@ def isModeExecChanged(src_mode, dst_mode):
     return isModeExec(src_mode) != isModeExec(dst_mode)
 
 def p4CmdList(cmd, stdin=None, stdin_mode='w+b', cb=None, skip_info=False,
-        errors_as_exceptions=False):
-
-    if not isinstance(cmd, list):
-        cmd = "-G " + cmd
-        expand = True
-    else:
-        cmd = ["-G"] + cmd
-        expand = False
+        errors_as_exceptions=False, *k, **kw):
 
-    cmd = p4_build_cmd(cmd)
+    cmd = p4_build_cmd(["-G"] + cmd)
     if verbose:
-        sys.stderr.write("Opening pipe: %s\n" % str(cmd))
+        sys.stderr.write("Opening pipe: {}\n".format(' '.join(cmd)))
 
     # Use a temporary file to avoid deadlocks without
     # subprocess.communicate(), which would put another copy
@@ -763,10 +692,8 @@ def p4CmdList(cmd, stdin=None, stdin_mode='w+b', cb=None, skip_info=False,
         stdin_file.flush()
         stdin_file.seek(0)
 
-    p4 = subprocess.Popen(cmd,
-                          shell=expand,
-                          stdin=stdin_file,
-                          stdout=subprocess.PIPE)
+    p4 = subprocess.Popen(
+        cmd, stdin=stdin_file, stdout=subprocess.PIPE, *k, **kw)
 
     result = []
     try:
@@ -819,8 +746,8 @@ def p4CmdList(cmd, stdin=None, stdin_mode='w+b', cb=None, skip_info=False,
 
     return result
 
-def p4Cmd(cmd):
-    list = p4CmdList(cmd)
+def p4Cmd(cmd, *k, **kw):
+    list = p4CmdList(cmd, *k, **kw)
     result = {}
     for entry in list:
         result.update(entry)
@@ -869,7 +796,7 @@ def isValidGitDir(path):
     return git_dir(path) != None
 
 def parseRevision(ref):
-    return read_pipe("git rev-parse %s" % ref).strip()
+    return read_pipe(["git", "rev-parse", ref]).strip()
 
 def branchExists(ref):
     rev = read_pipe(["git", "rev-parse", "-q", "--verify", ref],
@@ -975,11 +902,11 @@ def p4BranchesInGit(branchesAreInRemotes=True):
 
     branches = {}
 
-    cmdline = "git rev-parse --symbolic "
+    cmdline = ["git", "rev-parse", "--symbolic"]
     if branchesAreInRemotes:
-        cmdline += "--remotes"
+        cmdline.append("--remotes")
     else:
-        cmdline += "--branches"
+        cmdline.append("--branches")
 
     for line in read_pipe_lines(cmdline):
         line = line.strip()
@@ -1044,7 +971,7 @@ def createOrUpdateBranchesFromOrigin(localRefPrefix = "refs/remotes/p4/", silent
 
     originPrefix = "origin/p4/"
 
-    for line in read_pipe_lines("git rev-parse --symbolic --remotes"):
+    for line in read_pipe_lines(["git", "rev-parse", "--symbolic", "--remotes"]):
         line = line.strip()
         if (not line.startswith(originPrefix)) or line.endswith("HEAD"):
             continue
@@ -1082,7 +1009,7 @@ def createOrUpdateBranchesFromOrigin(localRefPrefix = "refs/remotes/p4/", silent
                               remoteHead, ','.join(settings['depot-paths'])))
 
         if update:
-            system("git update-ref %s %s" % (remoteHead, originHead))
+            system(["git", "update-ref", remoteHead, originHead])
 
 def originP4BranchesExist():
         return gitBranchExists("origin") or gitBranchExists("origin/p4") or gitBranchExists("origin/p4/master")
@@ -1196,7 +1123,7 @@ def getClientSpec():
     """Look at the p4 client spec, create a View() object that contains
        all the mappings, and return it."""
 
-    specList = p4CmdList("client -o")
+    specList = p4CmdList(["client", "-o"])
     if len(specList) != 1:
         die('Output from "client -o" is %d lines, expecting 1' %
             len(specList))
@@ -1225,7 +1152,7 @@ def getClientSpec():
 def getClientRoot():
     """Grab the client directory."""
 
-    output = p4CmdList("client -o")
+    output = p4CmdList(["client", "-o"])
     if len(output) != 1:
         die('Output from "client -o" is %d lines, expecting 1' % len(output))
 
@@ -1480,7 +1407,7 @@ class P4UserMap:
         if self.myP4UserId:
             return self.myP4UserId
 
-        results = p4CmdList("user -o")
+        results = p4CmdList(["user", "-o"])
         for r in results:
             if 'User' in r:
                 self.myP4UserId = r['User']
@@ -1505,7 +1432,7 @@ class P4UserMap:
         self.users = {}
         self.emails = {}
 
-        for output in p4CmdList("users"):
+        for output in p4CmdList(["users"]):
             if "User" not in output:
                 continue
             self.users[output["User"]] = output["FullName"] + " <" + output["Email"] + ">"
@@ -1629,7 +1556,7 @@ class P4Submit(Command, P4UserMap):
             die("Large file system not supported for git-p4 submit command. Please remove it from config.")
 
     def check(self):
-        if len(p4CmdList("opened ...")) > 0:
+        if len(p4CmdList(["opened", "..."])) > 0:
             die("You have files opened with perforce! Close them before starting the sync.")
 
     def separate_jobs_from_description(self, message):
@@ -1733,7 +1660,7 @@ class P4Submit(Command, P4UserMap):
         # then gets used to patch up the username in the change. If the same
         # client spec is being used by multiple processes then this might go
         # wrong.
-        results = p4CmdList("client -o")        # find the current client
+        results = p4CmdList(["client", "-o"])        # find the current client
         client = None
         for r in results:
             if 'Client' in r:
@@ -1749,7 +1676,7 @@ class P4Submit(Command, P4UserMap):
 
     def modifyChangelistUser(self, changelist, newUser):
         # fixup the user field of a changelist after it has been submitted.
-        changes = p4CmdList("change -o %s" % changelist)
+        changes = p4CmdList(["change", "-o", changelist])
         if len(changes) != 1:
             die("Bad output from p4 change modifying %s to user %s" %
                 (changelist, newUser))
@@ -1760,7 +1687,7 @@ class P4Submit(Command, P4UserMap):
         # p4 does not understand format version 3 and above
         input = marshal.dumps(c, 2)
 
-        result = p4CmdList("change -f -i", stdin=input)
+        result = p4CmdList(["change", "-f", "-i"], stdin=input)
         for r in result:
             if 'code' in r:
                 if r['code'] == 'error':
@@ -1866,7 +1793,7 @@ class P4Submit(Command, P4UserMap):
         if "P4EDITOR" in os.environ and (os.environ.get("P4EDITOR") != ""):
             editor = os.environ.get("P4EDITOR")
         else:
-            editor = read_pipe("git var GIT_EDITOR").strip()
+            editor = read_pipe(["git", "var", "GIT_EDITOR"]).strip()
         system(["sh", "-c", ('%s "$@"' % editor), editor, template_file])
 
         # If the file was not saved, prompt to see if this patch should
@@ -1924,7 +1851,8 @@ class P4Submit(Command, P4UserMap):
 
         (p4User, gitEmail) = self.p4UserForCommit(id)
 
-        diff = read_pipe_lines("git diff-tree -r %s \"%s^\" \"%s\"" % (self.diffOpts, id, id))
+        diff = read_pipe_lines(
+            ["git", "diff-tree", "-r"] + self.diffOpts + ["{}^".format(id), id])
         filesToAdd = set()
         filesToChangeType = set()
         filesToDelete = set()
@@ -2060,7 +1988,7 @@ class P4Submit(Command, P4UserMap):
         #
         # Apply the patch for real, and do add/delete/+x handling.
         #
-        system(applyPatchCmd)
+        system(applyPatchCmd, shell=True)
 
         for f in filesToChangeType:
             p4_edit(f, "-t", "auto")
@@ -2410,17 +2338,17 @@ class P4Submit(Command, P4UserMap):
         #
         if self.detectRenames:
             # command-line -M arg
-            self.diffOpts = "-M"
+            self.diffOpts = ["-M"]
         else:
             # If not explicitly set check the config variable
             detectRenames = gitConfig("git-p4.detectRenames")
 
             if detectRenames.lower() == "false" or detectRenames == "":
-                self.diffOpts = ""
+                self.diffOpts = []
             elif detectRenames.lower() == "true":
-                self.diffOpts = "-M"
+                self.diffOpts = ["-M"]
             else:
-                self.diffOpts = "-M%s" % detectRenames
+                self.diffOpts = ["-M{}".format(detectRenames)]
 
         # no command-line arg for -C or --find-copies-harder, just
         # config variables
@@ -2428,12 +2356,12 @@ class P4Submit(Command, P4UserMap):
         if detectCopies.lower() == "false" or detectCopies == "":
             pass
         elif detectCopies.lower() == "true":
-            self.diffOpts += " -C"
+            self.diffOpts.append("-C")
         else:
-            self.diffOpts += " -C%s" % detectCopies
+            self.diffOpts.append("-C{}".format(detectCopies))
 
         if gitConfigBool("git-p4.detectCopiesHarder"):
-            self.diffOpts += " --find-copies-harder"
+            self.diffOpts.append("--find-copies-harder")
 
         num_shelves = len(self.update_shelve)
         if num_shelves > 0 and num_shelves != len(commits):
@@ -3381,12 +3309,9 @@ class P4Sync(Command, P4UserMap):
         lostAndFoundBranches = set()
 
         user = gitConfig("git-p4.branchUser")
-        if len(user) > 0:
-            command = "branches -u %s" % user
-        else:
-            command = "branches"
 
-        for info in p4CmdList(command):
+        for info in p4CmdList(
+            ["branches"] + (["-u", user] if len(user) > 0 else [])):
             details = p4Cmd(["branch", "-o", info["branch"]])
             viewIdx = 0
             while "View%s" % viewIdx in details:
@@ -3477,7 +3402,8 @@ class P4Sync(Command, P4UserMap):
         while True:
             if self.verbose:
                 print("trying: earliest %s latest %s" % (earliestCommit, latestCommit))
-            next = read_pipe("git rev-list --bisect %s %s" % (latestCommit, earliestCommit)).strip()
+            next = read_pipe(["git", "rev-list", "--bisect",
+                latestCommit, earliestCommit]).strip()
             if len(next) == 0:
                 if self.verbose:
                     print("argh")
@@ -3633,7 +3559,7 @@ class P4Sync(Command, P4UserMap):
             if self.hasOrigin:
                 if not self.silent:
                     print('Syncing with origin first, using "git fetch origin"')
-                system("git fetch origin")
+                system(["git", "fetch", "origin"])
 
     def importHeadRevision(self, revision):
         print("Doing initial import of %s from revision %s into %s" % (' '.join(self.depotPaths), revision, self.branch))
@@ -3800,8 +3726,8 @@ class P4Sync(Command, P4UserMap):
         if len(self.branch) == 0:
             self.branch = self.refPrefix + "master"
             if gitBranchExists("refs/heads/p4") and self.importIntoRemotes:
-                system("git update-ref %s refs/heads/p4" % self.branch)
-                system("git branch -D p4")
+                system(["git", "update-ref", self.branch, "refs/heads/p4"])
+                system(["git", "branch", "-D", "p4"])
 
         # accept either the command-line option, or the configuration variable
         if self.useClientSpec:
@@ -4004,7 +3930,7 @@ class P4Sync(Command, P4UserMap):
         # Cleanup temporary branches created during import
         if self.tempBranches != []:
             for branch in self.tempBranches:
-                read_pipe("git update-ref -d %s" % branch)
+                read_pipe(["git", "update-ref", "-d", branch])
             os.rmdir(os.path.join(os.environ.get("GIT_DIR", ".git"), self.tempBranchLocation))
 
         # Create a symbolic ref p4/HEAD pointing to p4/<branch> to allow
@@ -4036,7 +3962,7 @@ class P4Rebase(Command):
     def rebase(self):
         if os.system("git update-index --refresh") != 0:
             die("Some files in your working directory are modified and different than what is in your index. You can use git update-index <filename> to bring the index up to date or stash away all your changes with git stash.");
-        if len(read_pipe("git diff-index HEAD --")) > 0:
+        if len(read_pipe(["git", "diff-index", "HEAD", "--"])) > 0:
             die("You have uncommitted changes. Please commit them before rebasing or stash them away with git stash.");
 
         [upstream, settings] = findUpstreamBranchPoint()
@@ -4047,9 +3973,10 @@ class P4Rebase(Command):
         upstream = re.sub("~[0-9]+$", "", upstream)
 
         print("Rebasing the current branch onto %s" % upstream)
-        oldHead = read_pipe("git rev-parse HEAD").strip()
-        system("git rebase %s" % upstream)
-        system("git diff-tree --stat --summary -M %s HEAD --" % oldHead)
+        oldHead = read_pipe(["git", "rev-parse", "HEAD"]).strip()
+        system(["git", "rebase", upstream])
+        system(["git", "diff-tree", "--stat", "--summary", "-M", oldHead,
+            "HEAD", "--"])
         return True
 
 class P4Clone(P4Sync):
@@ -4110,7 +4037,7 @@ class P4Clone(P4Sync):
             init_cmd.append("--bare")
         retcode = subprocess.call(init_cmd)
         if retcode:
-            raise CalledProcessError(retcode, init_cmd)
+            raise subprocess.CalledProcessError(retcode, init_cmd)
 
         if not P4Sync.run(self, depotPaths):
             return False
@@ -4126,7 +4053,7 @@ class P4Clone(P4Sync):
 
         # auto-set this variable if invoked with --use-client-spec
         if self.useClientSpec_from_options:
-            system("git config --bool git-p4.useclientspec true")
+            system(["git", "config", "--bool", "git-p4.useclientspec", "true"])
 
         return True
 
@@ -4257,10 +4184,7 @@ class P4Branches(Command):
         if originP4BranchesExist():
             createOrUpdateBranchesFromOrigin()
 
-        cmdline = "git rev-parse --symbolic "
-        cmdline += " --remotes"
-
-        for line in read_pipe_lines(cmdline):
+        for line in read_pipe_lines(["git", "rev-parse", "--symbolic", "--remotes"]):
             line = line.strip()
 
             if not line.startswith('p4/') or line == "p4/HEAD":
@@ -4343,9 +4267,9 @@ def main():
             cmd.gitdir = os.path.abspath(".git")
             if not isValidGitDir(cmd.gitdir):
                 # "rev-parse --git-dir" without arguments will try $PWD/.git
-                cmd.gitdir = read_pipe("git rev-parse --git-dir").strip()
+                cmd.gitdir = read_pipe(["git", "rev-parse", "--git-dir"]).strip()
                 if os.path.exists(cmd.gitdir):
-                    cdup = read_pipe("git rev-parse --show-cdup").strip()
+                    cdup = read_pipe(["git", "rev-parse", "--show-cdup"]).strip()
                     if len(cdup) > 0:
                         chdir(cdup);
 
index 04087221aa7407bce8f722eaef82131692845159..5861e99a6eb2a16bb45e759645e124a66a50e107 100755 (executable)
@@ -225,13 +225,13 @@ my $multiedit;
 my $editor;
 
 sub system_or_msg {
-       my ($args, $msg) = @_;
+       my ($args, $msg, $cmd_name) = @_;
        system(@$args);
        my $signalled = $? & 127;
        my $exit_code = $? >> 8;
        return unless $signalled or $exit_code;
 
-       my @sprintf_args = ($args->[0], $exit_code);
+       my @sprintf_args = ($cmd_name ? $cmd_name : $args->[0], $exit_code);
        if (defined $msg) {
                # Quiet the 'redundant' warning category, except we
                # need to support down to Perl 5.8, so we can't do a
@@ -2075,10 +2075,10 @@ sub validate_patch {
        my ($fn, $xfer_encoding) = @_;
 
        if ($repo) {
+               my $hook_name = 'sendemail-validate';
                my $hooks_path = $repo->command_oneline('rev-parse', '--git-path', 'hooks');
                require File::Spec;
-               my $validate_hook = File::Spec->catfile($hooks_path,
-                                           'sendemail-validate');
+               my $validate_hook = File::Spec->catfile($hooks_path, $hook_name);
                my $hook_error;
                if (-x $validate_hook) {
                        require Cwd;
@@ -2088,13 +2088,18 @@ sub validate_patch {
                        chdir($repo->wc_path() or $repo->repo_path())
                                or die("chdir: $!");
                        local $ENV{"GIT_DIR"} = $repo->repo_path();
-                       $hook_error = system_or_msg([$validate_hook, $target]);
+                       my @cmd = ("git", "hook", "run", "--ignore-missing",
+                                   $hook_name, "--");
+                       my @cmd_msg = (@cmd, "<patch>");
+                       my @cmd_run = (@cmd, $target);
+                       $hook_error = system_or_msg(\@cmd_run, undef, "@cmd_msg");
                        chdir($cwd_save) or die("chdir: $!");
                }
                if ($hook_error) {
-                       die sprintf(__("fatal: %s: rejected by sendemail-validate hook\n" .
-                                      "%s\n" .
-                                      "warning: no patches were sent\n"), $fn, $hook_error);
+                       $hook_error = sprintf(
+                           __("fatal: %s: rejected by %s hook\n%s\nwarning: no patches were sent\n"),
+                           $fn, $hook_name, $hook_error);
+                       die $hook_error;
                }
        }
 
index b93f39288ce41f06b0e1f564d833a40f6c8577b9..d92df37e9924719b2aa6d1c84a88d56811d2bd4f 100644 (file)
@@ -101,7 +101,6 @@ $LONG_USAGE")"
        case "$1" in
                -h)
                echo "$LONG_USAGE"
-               case "$0" in *git-legacy-stash) exit 129;; esac
                exit
        esac
 fi
index 652861aa66a400940c24ea8405177f372009eafe..fd0b4a2c947762b023999191ff6f3b5c78cb58fc 100755 (executable)
@@ -10,7 +10,7 @@ USAGE="[--quiet] [--cached]
    or: $dashless [--quiet] status [--cached] [--recursive] [--] [<path>...]
    or: $dashless [--quiet] init [--] [<path>...]
    or: $dashless [--quiet] deinit [-f|--force] (--all| [--] <path>...)
-   or: $dashless [--quiet] update [--init] [--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-shallow] [--reference <repository>] [--recursive] [--[no-]single-branch] [--] [<path>...]
+   or: $dashless [--quiet] update [--init [--filter=<filter-spec>]] [--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-shallow] [--reference <repository>] [--recursive] [--[no-]single-branch] [--] [<path>...]
    or: $dashless [--quiet] set-branch (--default|--branch <branch>) [--] <path>
    or: $dashless [--quiet] set-url [--] <path> <newurl>
    or: $dashless [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...]
@@ -49,14 +49,7 @@ dissociate=
 single_branch=
 jobs=
 recommend_shallow=
-
-die_if_unmatched ()
-{
-       if test "$1" = "#unmatched"
-       then
-               exit ${2:-1}
-       fi
-}
+filter=
 
 isnumber()
 {
@@ -246,20 +239,6 @@ cmd_deinit()
        git ${wt_prefix:+-C "$wt_prefix"} submodule--helper deinit ${GIT_QUIET:+--quiet} ${force:+--force} ${deinit_all:+--all} -- "$@"
 }
 
-# usage: fetch_in_submodule <module_path> [<depth>] [<sha1>]
-# Because arguments are positional, use an empty string to omit <depth>
-# but include <sha1>.
-fetch_in_submodule () (
-       sanitize_submodule_env &&
-       cd "$1" &&
-       if test $# -eq 3
-       then
-               echo "$3" | git fetch ${GIT_QUIET:+--quiet} --stdin ${2:+"$2"}
-       else
-               git fetch ${GIT_QUIET:+--quiet} ${2:+"$2"}
-       fi
-)
-
 #
 # Update each submodule path to correct revision, using clone and checkout as needed
 #
@@ -347,6 +326,14 @@ cmd_update()
                --no-single-branch)
                        single_branch="--no-single-branch"
                        ;;
+               --filter)
+                       case "$2" in '') usage ;; esac
+                       filter="--filter=$2"
+                       shift
+                       ;;
+               --filter=*)
+                       filter="$1"
+                       ;;
                --)
                        shift
                        break
@@ -361,133 +348,28 @@ cmd_update()
                shift
        done
 
-       if test -n "$init"
-       then
-               cmd_init "--" "$@" || return
-       fi
-
-       {
-       git submodule--helper update-clone ${GIT_QUIET:+--quiet} \
+       git ${wt_prefix:+-C "$wt_prefix"} submodule--helper update \
+               ${GIT_QUIET:+--quiet} \
+               ${force:+--force} \
                ${progress:+"--progress"} \
+               ${remote:+--remote} \
+               ${recursive:+--recursive} \
+               ${init:+--init} \
+               ${nofetch:+--no-fetch} \
                ${wt_prefix:+--prefix "$wt_prefix"} \
                ${prefix:+--recursive-prefix "$prefix"} \
                ${update:+--update "$update"} \
                ${reference:+"$reference"} \
                ${dissociate:+"--dissociate"} \
-               ${depth:+--depth "$depth"} \
+               ${depth:+"$depth"} \
                ${require_init:+--require-init} \
+               ${dissociate:+"--dissociate"} \
                $single_branch \
                $recommend_shallow \
                $jobs \
+               $filter \
                -- \
-               "$@" || echo "#unmatched" $?
-       } | {
-       err=
-       while read -r quickabort sha1 just_cloned sm_path
-       do
-               die_if_unmatched "$quickabort" "$sha1"
-
-               git submodule--helper ensure-core-worktree "$sm_path" || exit 1
-
-               displaypath=$(git submodule--helper relative-path "$prefix$sm_path" "$wt_prefix")
-
-               if test $just_cloned -eq 1
-               then
-                       subsha1=
-               else
-                       just_cloned=
-                       subsha1=$(sanitize_submodule_env; cd "$sm_path" &&
-                               git rev-parse --verify HEAD) ||
-                       die "fatal: $(eval_gettext "Unable to find current revision in submodule path '\$displaypath'")"
-               fi
-
-               if test -n "$remote"
-               then
-                       branch=$(git submodule--helper remote-branch "$sm_path")
-                       if test -z "$nofetch"
-                       then
-                               # Fetch remote before determining tracking $sha1
-                               fetch_in_submodule "$sm_path" $depth ||
-                               die "fatal: $(eval_gettext "Unable to fetch in submodule path '\$sm_path'")"
-                       fi
-                       remote_name=$(sanitize_submodule_env; cd "$sm_path" && git submodule--helper print-default-remote)
-                       sha1=$(sanitize_submodule_env; cd "$sm_path" &&
-                               git rev-parse --verify "${remote_name}/${branch}") ||
-                       die "fatal: $(eval_gettext "Unable to find current \${remote_name}/\${branch} revision in submodule path '\$sm_path'")"
-               fi
-
-               out=$(git submodule--helper run-update-procedure \
-                         ${wt_prefix:+--prefix "$wt_prefix"} \
-                         ${GIT_QUIET:+--quiet} \
-                         ${force:+--force} \
-                         ${just_cloned:+--just-cloned} \
-                         ${nofetch:+--no-fetch} \
-                         ${depth:+"$depth"} \
-                         ${update:+--update "$update"} \
-                         ${prefix:+--recursive-prefix "$prefix"} \
-                         ${sha1:+--oid "$sha1"} \
-                         ${subsha1:+--suboid "$subsha1"} \
-                         "--" \
-                         "$sm_path")
-
-               # exit codes for run-update-procedure:
-               # 0: update was successful, say command output
-               # 1: update procedure failed, but should not die
-               # 2 or 128: subcommand died during execution
-               # 3: no update procedure was run
-               res="$?"
-               case $res in
-               0)
-                       say "$out"
-                       ;;
-               1)
-                       err="${err};fatal: $out"
-                       continue
-                       ;;
-               2|128)
-                       die_with_status $res "fatal: $out"
-                       ;;
-               esac
-
-               if test -n "$recursive"
-               then
-                       (
-                               prefix=$(git submodule--helper relative-path "$prefix$sm_path/" "$wt_prefix")
-                               wt_prefix=
-                               sanitize_submodule_env
-                               cd "$sm_path" &&
-                               eval cmd_update
-                       )
-                       res=$?
-                       if test $res -gt 0
-                       then
-                               die_msg="fatal: $(eval_gettext "Failed to recurse into submodule path '\$displaypath'")"
-                               if test $res -ne 2
-                               then
-                                       err="${err};$die_msg"
-                                       continue
-                               else
-                                       die_with_status $res "$die_msg"
-                               fi
-                       fi
-               fi
-       done
-
-       if test -n "$err"
-       then
-               OIFS=$IFS
-               IFS=';'
-               for e in $err
-               do
-                       if test -n "$e"
-                       then
-                               echo >&2 "$e"
-                       fi
-               done
-               IFS=$OIFS
-               exit 1
-       fi
-       }
+               "$@"
 }
 
 #
diff --git a/git.c b/git.c
index edda922ce6d423b8b734b47b979f4912b9a4d281..3d8e48cf555a5d1d56abd4d093145e6a9f77db94 100644 (file)
--- a/git.c
+++ b/git.c
@@ -436,6 +436,7 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv)
        } else {
                prefix = NULL;
        }
+       assert(!prefix || *prefix);
        precompose_argv_prefix(argc, argv, NULL);
        if (use_pager == -1 && run_setup &&
                !(p->option & DELAY_PAGER_CONFIG))
@@ -536,11 +537,13 @@ static struct cmd_struct commands[] = {
        { "format-patch", cmd_format_patch, RUN_SETUP },
        { "fsck", cmd_fsck, RUN_SETUP },
        { "fsck-objects", cmd_fsck, RUN_SETUP },
+       { "fsmonitor--daemon", cmd_fsmonitor__daemon, RUN_SETUP },
        { "gc", cmd_gc, RUN_SETUP },
        { "get-tar-commit-id", cmd_get_tar_commit_id, NO_PARSEOPT },
        { "grep", cmd_grep, RUN_SETUP_GENTLY },
        { "hash-object", cmd_hash_object },
        { "help", cmd_help },
+       { "hook", cmd_hook, RUN_SETUP },
        { "index-pack", cmd_index_pack, RUN_SETUP_GENTLY | NO_PARSEOPT },
        { "init", cmd_init_db },
        { "init-db", cmd_init_db },
index fbd1c20a232bb098509e0e25981de5016dea555f..606b50104c6b9b3beda8a3029fcd30dd553508d9 100755 (executable)
@@ -4213,8 +4213,7 @@ sub git_header_html {
        my %opts = @_;
 
        my $title = get_page_title();
-       my $content_type = get_content_type_html();
-       print $cgi->header(-type=>$content_type, -charset => 'utf-8',
+       print $cgi->header(-type=>get_content_type_html(), -charset => 'utf-8',
                           -status=> $status, -expires => $expires)
                unless ($opts{'-no_http_header'});
        my $mod_perl_version = $ENV{'MOD_PERL'} ? " $ENV{'MOD_PERL'}" : '';
@@ -4225,7 +4224,6 @@ sub git_header_html {
 <!-- git web interface version $version, (C) 2005-2006, Kay Sievers <kay.sievers\@vrfy.org>, Christian Gierke -->
 <!-- git core binaries version $git_version -->
 <head>
-<meta http-equiv="content-type" content="$content_type; charset=utf-8"/>
 <meta name="generator" content="gitweb/$version git/$git_version$mod_perl_version"/>
 <meta name="robots" content="index, nofollow"/>
 <title>$title</title>
index b52eb0e2e04b37c6868f7573d750b688a4ec0e68..280f1fa1a58233f032cce7f2fe8bf4317f1e0ab8 100644 (file)
@@ -433,7 +433,6 @@ static int verify_ssh_signed_buffer(struct signature_check *sigc,
        struct tempfile *buffer_file;
        int ret = -1;
        const char *line;
-       size_t trust_size;
        char *principal;
        struct strbuf ssh_principals_out = STRBUF_INIT;
        struct strbuf ssh_principals_err = STRBUF_INIT;
@@ -502,15 +501,30 @@ static int verify_ssh_signed_buffer(struct signature_check *sigc,
                ret = -1;
        } else {
                /* Check every principal we found (one per line) */
-               for (line = ssh_principals_out.buf; *line;
-                    line = strchrnul(line + 1, '\n')) {
-                       while (*line == '\n')
-                               line++;
-                       if (!*line)
-                               break;
+               const char *next;
+               for (line = ssh_principals_out.buf;
+                    *line;
+                    line = next) {
+                       const char *end_of_text;
+
+                       next = end_of_text = strchrnul(line, '\n');
+
+                        /* Did we find a LF, and did we have CR before it? */
+                       if (*end_of_text &&
+                           line < end_of_text &&
+                           end_of_text[-1] == '\r')
+                               end_of_text--;
+
+                       /* Unless we hit NUL, skip over the LF we found */
+                       if (*next)
+                               next++;
 
-                       trust_size = strcspn(line, "\n");
-                       principal = xmemdupz(line, trust_size);
+                       /* Not all lines are data.  Skip empty ones */
+                       if (line == end_of_text)
+                               continue;
+
+                       /* We now know we have an non-empty line. Process it */
+                       principal = xmemdupz(line, end_of_text - line);
 
                        child_process_init(&ssh_keygen);
                        strbuf_release(&ssh_keygen_out);
@@ -702,7 +716,7 @@ int git_gpg_config(const char *var, const char *value, void *cb)
                        return config_error_nonbool(var);
                fmt = get_format_by_name(value);
                if (!fmt)
-                       return error("unsupported value for %s: %s",
+                       return error(_("invalid value for '%s': '%s'"),
                                     var, value);
                use_format = fmt;
                return 0;
@@ -717,8 +731,8 @@ int git_gpg_config(const char *var, const char *value, void *cb)
                free(trust);
 
                if (ret)
-                       return error("unsupported value for %s: %s", var,
-                                    value);
+                       return error(_("invalid value for '%s': '%s'"),
+                                    var, value);
                return 0;
        }
 
@@ -920,6 +934,7 @@ static int sign_buffer_gpg(struct strbuf *buffer, struct strbuf *signature,
        struct child_process gpg = CHILD_PROCESS_INIT;
        int ret;
        size_t bottom;
+       const char *cp;
        struct strbuf gpg_status = STRBUF_INIT;
 
        strvec_pushl(&gpg.args,
@@ -939,7 +954,13 @@ static int sign_buffer_gpg(struct strbuf *buffer, struct strbuf *signature,
                           signature, 1024, &gpg_status, 0);
        sigchain_pop(SIGPIPE);
 
-       ret |= !strstr(gpg_status.buf, "\n[GNUPG:] SIG_CREATED ");
+       for (cp = gpg_status.buf;
+            cp && (cp = strstr(cp, "[GNUPG:] SIG_CREATED "));
+            cp++) {
+               if (cp == gpg_status.buf || cp[-1] == '\n')
+                       break; /* found */
+       }
+       ret |= !cp;
        strbuf_release(&gpg_status);
        if (ret)
                return error(_("gpg failed to sign the data"));
diff --git a/graph.c b/graph.c
index e3828eb8f2309048353524e4132d33dd6cda3555..568b6e7cd41512d17cc68e0595675ee858165164 100644 (file)
--- a/graph.c
+++ b/graph.c
@@ -401,6 +401,18 @@ struct git_graph *graph_init(struct rev_info *opt)
        return graph;
 }
 
+void graph_clear(struct git_graph *graph)
+{
+       if (!graph)
+               return;
+
+       free(graph->columns);
+       free(graph->new_columns);
+       free(graph->mapping);
+       free(graph->old_mapping);
+       free(graph);
+}
+
 static void graph_update_state(struct git_graph *graph, enum graph_state s)
 {
        graph->prev_state = graph->state;
diff --git a/graph.h b/graph.h
index 8313e293c78d8e72fd02dbda94f28a4df80eee05..e88632a0140f70ef25535e23120c898c007b8349 100644 (file)
--- a/graph.h
+++ b/graph.h
@@ -139,6 +139,11 @@ void graph_set_column_colors(const char **colors, unsigned short colors_max);
  */
 struct git_graph *graph_init(struct rev_info *opt);
 
+/*
+ * Free a struct git_graph.
+ */
+void graph_clear(struct git_graph *graph);
+
 /*
  * Update a git_graph with a new commit.
  * This will cause the graph to begin outputting lines for the new commit
diff --git a/grep.c b/grep.c
index 7bb0360869a64bca7af1e2d7faecb937a63b7910..82eb7da1022ecc0c08a83ca7bc46e18602ff275b 100644 (file)
--- a/grep.c
+++ b/grep.c
@@ -19,27 +19,6 @@ static void std_output(struct grep_opt *opt, const void *buf, size_t size)
        fwrite(buf, size, 1, stdout);
 }
 
-static struct grep_opt grep_defaults = {
-       .relative = 1,
-       .pathname = 1,
-       .max_depth = -1,
-       .pattern_type_option = GREP_PATTERN_TYPE_UNSPECIFIED,
-       .colors = {
-               [GREP_COLOR_CONTEXT] = "",
-               [GREP_COLOR_FILENAME] = GIT_COLOR_MAGENTA,
-               [GREP_COLOR_FUNCTION] = "",
-               [GREP_COLOR_LINENO] = GIT_COLOR_GREEN,
-               [GREP_COLOR_COLUMNNO] = GIT_COLOR_GREEN,
-               [GREP_COLOR_MATCH_CONTEXT] = GIT_COLOR_BOLD_RED,
-               [GREP_COLOR_MATCH_SELECTED] = GIT_COLOR_BOLD_RED,
-               [GREP_COLOR_SELECTED] = "",
-               [GREP_COLOR_SEP] = GIT_COLOR_CYAN,
-       },
-       .only_matching = 0,
-       .color = -1,
-       .output = std_output,
-};
-
 static const char *color_grep_slots[] = {
        [GREP_COLOR_CONTEXT]        = "context",
        [GREP_COLOR_FILENAME]       = "filename",
@@ -75,20 +54,12 @@ define_list_config_array_extra(color_grep_slots, {"match"});
  */
 int grep_config(const char *var, const char *value, void *cb)
 {
-       struct grep_opt *opt = &grep_defaults;
+       struct grep_opt *opt = cb;
        const char *slot;
 
        if (userdiff_config(var, value) < 0)
                return -1;
 
-       /*
-        * The instance of grep_opt that we set up here is copied by
-        * grep_init() to be used by each individual invocation.
-        * When populating a new field of this structure here, be
-        * sure to think about ownership -- e.g., you might need to
-        * override the shallow copy in grep_init() with a deep copy.
-        */
-
        if (!strcmp(var, "grep.extendedregexp")) {
                opt->extended_regexp_option = git_config_bool(var, value);
                return 0;
@@ -134,78 +105,16 @@ int grep_config(const char *var, const char *value, void *cb)
        return 0;
 }
 
-/*
- * Initialize one instance of grep_opt and copy the
- * default values from the template we read the configuration
- * information in an earlier call to git_config(grep_config).
- */
-void grep_init(struct grep_opt *opt, struct repository *repo, const char *prefix)
+void grep_init(struct grep_opt *opt, struct repository *repo)
 {
-       *opt = grep_defaults;
+       struct grep_opt blank = GREP_OPT_INIT;
+       memcpy(opt, &blank, sizeof(*opt));
 
        opt->repo = repo;
-       opt->prefix = prefix;
-       opt->prefix_length = (prefix && *prefix) ? strlen(prefix) : 0;
        opt->pattern_tail = &opt->pattern_list;
        opt->header_tail = &opt->header_list;
 }
 
-static void grep_set_pattern_type_option(enum grep_pattern_type pattern_type, struct grep_opt *opt)
-{
-       /*
-        * When committing to the pattern type by setting the relevant
-        * fields in grep_opt it's generally not necessary to zero out
-        * the fields we're not choosing, since they won't have been
-        * set by anything. The extended_regexp_option field is the
-        * only exception to this.
-        *
-        * This is because in the process of parsing grep.patternType
-        * & grep.extendedRegexp we set opt->pattern_type_option and
-        * opt->extended_regexp_option, respectively. We then
-        * internally use opt->extended_regexp_option to see if we're
-        * compiling an ERE. It must be unset if that's not actually
-        * the case.
-        */
-       if (pattern_type != GREP_PATTERN_TYPE_ERE &&
-           opt->extended_regexp_option)
-               opt->extended_regexp_option = 0;
-
-       switch (pattern_type) {
-       case GREP_PATTERN_TYPE_UNSPECIFIED:
-               /* fall through */
-
-       case GREP_PATTERN_TYPE_BRE:
-               break;
-
-       case GREP_PATTERN_TYPE_ERE:
-               opt->extended_regexp_option = 1;
-               break;
-
-       case GREP_PATTERN_TYPE_FIXED:
-               opt->fixed = 1;
-               break;
-
-       case GREP_PATTERN_TYPE_PCRE:
-               opt->pcre2 = 1;
-               break;
-       }
-}
-
-void grep_commit_pattern_type(enum grep_pattern_type pattern_type, struct grep_opt *opt)
-{
-       if (pattern_type != GREP_PATTERN_TYPE_UNSPECIFIED)
-               grep_set_pattern_type_option(pattern_type, opt);
-       else if (opt->pattern_type_option != GREP_PATTERN_TYPE_UNSPECIFIED)
-               grep_set_pattern_type_option(opt->pattern_type_option, opt);
-       else if (opt->extended_regexp_option)
-               /*
-                * This branch *must* happen after setting from the
-                * opt->pattern_type_option above, we don't want
-                * grep.extendedRegexp to override grep.patternType!
-                */
-               grep_set_pattern_type_option(GREP_PATTERN_TYPE_ERE, opt);
-}
-
 static struct grep_pat *create_grep_pat(const char *pat, size_t patlen,
                                        const char *origin, int no,
                                        enum grep_pat_token t,
@@ -386,7 +295,7 @@ static void compile_pcre2_pattern(struct grep_pat *p, const struct grep_opt *opt
        if (!opt->ignore_locale && is_utf8_locale() && !literal)
                options |= (PCRE2_UTF | PCRE2_MATCH_INVALID_UTF);
 
-#ifdef GIT_PCRE2_VERSION_10_36_OR_HIGHER
+#ifndef GIT_PCRE2_VERSION_10_36_OR_HIGHER
        /* Work around https://bugs.exim.org/show_bug.cgi?id=2642 fixed in 10.36 */
        if (PCRE2_MATCH_INVALID_UTF && options & (PCRE2_UTF | PCRE2_CASELESS))
                options |= PCRE2_NO_START_OPTIMIZE;
@@ -523,11 +432,17 @@ static void compile_regexp(struct grep_pat *p, struct grep_opt *opt)
        int err;
        int regflags = REG_NEWLINE;
 
+       if (opt->pattern_type_option == GREP_PATTERN_TYPE_UNSPECIFIED)
+               opt->pattern_type_option = (opt->extended_regexp_option
+                                           ? GREP_PATTERN_TYPE_ERE
+                                           : GREP_PATTERN_TYPE_BRE);
+
        p->word_regexp = opt->word_regexp;
        p->ignore_case = opt->ignore_case;
-       p->fixed = opt->fixed;
+       p->fixed = opt->pattern_type_option == GREP_PATTERN_TYPE_FIXED;
 
-       if (memchr(p->pattern, 0, p->patternlen) && !opt->pcre2)
+       if (opt->pattern_type_option != GREP_PATTERN_TYPE_PCRE &&
+           memchr(p->pattern, 0, p->patternlen))
                die(_("given pattern contains NULL byte (via -f <file>). This is only supported with -P under PCRE v2"));
 
        p->is_fixed = is_fixed(p->pattern, p->patternlen);
@@ -578,14 +493,14 @@ static void compile_regexp(struct grep_pat *p, struct grep_opt *opt)
                return;
        }
 
-       if (opt->pcre2) {
+       if (opt->pattern_type_option == GREP_PATTERN_TYPE_PCRE) {
                compile_pcre2_pattern(p, opt);
                return;
        }
 
        if (p->ignore_case)
                regflags |= REG_ICASE;
-       if (opt->extended_regexp_option)
+       if (opt->pattern_type_option == GREP_PATTERN_TYPE_ERE)
                regflags |= REG_EXTENDED;
        err = regcomp(&p->regexp, p->pattern, regflags);
        if (err) {
@@ -595,6 +510,35 @@ static void compile_regexp(struct grep_pat *p, struct grep_opt *opt)
        }
 }
 
+static struct grep_expr *grep_not_expr(struct grep_expr *expr)
+{
+       struct grep_expr *z = xcalloc(1, sizeof(*z));
+       z->node = GREP_NODE_NOT;
+       z->u.unary = expr;
+       return z;
+}
+
+static struct grep_expr *grep_binexp(enum grep_expr_node kind,
+                                    struct grep_expr *left,
+                                    struct grep_expr *right)
+{
+       struct grep_expr *z = xcalloc(1, sizeof(*z));
+       z->node = kind;
+       z->u.binary.left = left;
+       z->u.binary.right = right;
+       return z;
+}
+
+static struct grep_expr *grep_or_expr(struct grep_expr *left, struct grep_expr *right)
+{
+       return grep_binexp(GREP_NODE_OR, left, right);
+}
+
+static struct grep_expr *grep_and_expr(struct grep_expr *left, struct grep_expr *right)
+{
+       return grep_binexp(GREP_NODE_AND, left, right);
+}
+
 static struct grep_expr *compile_pattern_or(struct grep_pat **);
 static struct grep_expr *compile_pattern_atom(struct grep_pat **list)
 {
@@ -638,12 +582,10 @@ static struct grep_expr *compile_pattern_not(struct grep_pat **list)
                if (!p->next)
                        die("--not not followed by pattern expression");
                *list = p->next;
-               CALLOC_ARRAY(x, 1);
-               x->node = GREP_NODE_NOT;
-               x->u.unary = compile_pattern_not(list);
-               if (!x->u.unary)
+               x = compile_pattern_not(list);
+               if (!x)
                        die("--not followed by non pattern expression");
-               return x;
+               return grep_not_expr(x);
        default:
                return compile_pattern_atom(list);
        }
@@ -652,7 +594,7 @@ static struct grep_expr *compile_pattern_not(struct grep_pat **list)
 static struct grep_expr *compile_pattern_and(struct grep_pat **list)
 {
        struct grep_pat *p;
-       struct grep_expr *x, *y, *z;
+       struct grep_expr *x, *y;
 
        x = compile_pattern_not(list);
        p = *list;
@@ -665,11 +607,7 @@ static struct grep_expr *compile_pattern_and(struct grep_pat **list)
                y = compile_pattern_and(list);
                if (!y)
                        die("--and not followed by pattern expression");
-               CALLOC_ARRAY(z, 1);
-               z->node = GREP_NODE_AND;
-               z->u.binary.left = x;
-               z->u.binary.right = y;
-               return z;
+               return grep_and_expr(x, y);
        }
        return x;
 }
@@ -677,7 +615,7 @@ static struct grep_expr *compile_pattern_and(struct grep_pat **list)
 static struct grep_expr *compile_pattern_or(struct grep_pat **list)
 {
        struct grep_pat *p;
-       struct grep_expr *x, *y, *z;
+       struct grep_expr *x, *y;
 
        x = compile_pattern_and(list);
        p = *list;
@@ -685,11 +623,7 @@ static struct grep_expr *compile_pattern_or(struct grep_pat **list)
                y = compile_pattern_or(list);
                if (!y)
                        die("not a pattern expression %s", p->pattern);
-               CALLOC_ARRAY(z, 1);
-               z->node = GREP_NODE_OR;
-               z->u.binary.left = x;
-               z->u.binary.right = y;
-               return z;
+               return grep_or_expr(x, y);
        }
        return x;
 }
@@ -699,14 +633,6 @@ static struct grep_expr *compile_pattern_expr(struct grep_pat **list)
        return compile_pattern_or(list);
 }
 
-static struct grep_expr *grep_not_expr(struct grep_expr *expr)
-{
-       struct grep_expr *z = xcalloc(1, sizeof(*z));
-       z->node = GREP_NODE_NOT;
-       z->u.unary = expr;
-       return z;
-}
-
 static struct grep_expr *grep_true_expr(void)
 {
        struct grep_expr *z = xcalloc(1, sizeof(*z));
@@ -714,15 +640,6 @@ static struct grep_expr *grep_true_expr(void)
        return z;
 }
 
-static struct grep_expr *grep_or_expr(struct grep_expr *left, struct grep_expr *right)
-{
-       struct grep_expr *z = xcalloc(1, sizeof(*z));
-       z->node = GREP_NODE_OR;
-       z->u.binary.left = left;
-       z->u.binary.right = right;
-       return z;
-}
-
 static struct grep_expr *prep_header_patterns(struct grep_opt *opt)
 {
        struct grep_pat *p;
diff --git a/grep.h b/grep.h
index 6a1f0ab01729b8a11eb873a93829f7ee57d07dd4..c722d25ed9d272fd333162a64ba367bc19ff77da 100644 (file)
--- a/grep.h
+++ b/grep.h
@@ -134,9 +134,6 @@ struct grep_opt {
         */
        struct repository *repo;
 
-       const char *prefix;
-       int prefix_length;
-       regex_t regexp;
        int linenum;
        int columnnum;
        int invert;
@@ -146,7 +143,6 @@ struct grep_opt {
        int unmatch_name_only;
        int count;
        int word_regexp;
-       int fixed;
        int all_match;
        int no_body_match;
        int body_hit;
@@ -157,7 +153,6 @@ struct grep_opt {
        int allow_textconv;
        int extended;
        int use_reflog_filter;
-       int pcre2;
        int relative;
        int pathname;
        int null_following_name;
@@ -167,7 +162,7 @@ struct grep_opt {
        int funcname;
        int funcbody;
        int extended_regexp_option;
-       int pattern_type_option;
+       enum grep_pattern_type pattern_type_option;
        int ignore_locale;
        char colors[NR_GREP_COLORS][COLOR_MAXLEN];
        unsigned pre_context;
@@ -182,9 +177,29 @@ struct grep_opt {
        void *output_priv;
 };
 
+#define GREP_OPT_INIT { \
+       .relative = 1, \
+       .pathname = 1, \
+       .max_depth = -1, \
+       .pattern_type_option = GREP_PATTERN_TYPE_UNSPECIFIED, \
+       .colors = { \
+               [GREP_COLOR_CONTEXT] = "", \
+               [GREP_COLOR_FILENAME] = GIT_COLOR_MAGENTA, \
+               [GREP_COLOR_FUNCTION] = "", \
+               [GREP_COLOR_LINENO] = GIT_COLOR_GREEN, \
+               [GREP_COLOR_COLUMNNO] = GIT_COLOR_GREEN, \
+               [GREP_COLOR_MATCH_CONTEXT] = GIT_COLOR_BOLD_RED, \
+               [GREP_COLOR_MATCH_SELECTED] = GIT_COLOR_BOLD_RED, \
+               [GREP_COLOR_SELECTED] = "", \
+               [GREP_COLOR_SEP] = GIT_COLOR_CYAN, \
+       }, \
+       .only_matching = 0, \
+       .color = -1, \
+       .output = std_output, \
+}
+
 int grep_config(const char *var, const char *value, void *);
-void grep_init(struct grep_opt *, struct repository *repo, const char *prefix);
-void grep_commit_pattern_type(enum grep_pattern_type, struct grep_opt *opt);
+void grep_init(struct grep_opt *, struct repository *repo);
 
 void append_grep_pat(struct grep_opt *opt, const char *pat, size_t patlen, const char *origin, int no, enum grep_pat_token t);
 void append_grep_pattern(struct grep_opt *opt, const char *pat, const char *origin, int no, enum grep_pat_token t);
diff --git a/help.c b/help.c
index 71444906ddfb24c6604a2da547cb94675553bcb0..41c41c2aa11757645be53662b6d42011d93b00e2 100644 (file)
--- a/help.c
+++ b/help.c
@@ -12,6 +12,7 @@
 #include "refs.h"
 #include "parse-options.h"
 #include "prompt.h"
+#include "fsmonitor-ipc.h"
 
 struct category_description {
        uint32_t category;
@@ -124,7 +125,9 @@ static void print_cmd_by_category(const struct category_description *catdesc,
                uint32_t mask = catdesc[i].category;
                const char *desc = catdesc[i].desc;
 
-               printf("\n%s\n", _(desc));
+               if (i)
+                       putchar('\n');
+               puts(_(desc));
                print_command_list(cmds, mask, longest);
        }
        free(cmds);
@@ -317,7 +320,7 @@ void list_commands(struct cmdnames *main_cmds, struct cmdnames *other_cmds)
        }
 
        if (other_cmds->cnt) {
-               printf_ln(_("git commands available from elsewhere on your $PATH"));
+               puts(_("git commands available from elsewhere on your $PATH"));
                putchar('\n');
                pretty_print_cmdnames(other_cmds, colopts);
                putchar('\n');
@@ -327,6 +330,7 @@ void list_commands(struct cmdnames *main_cmds, struct cmdnames *other_cmds)
 void list_common_cmds_help(void)
 {
        puts(_("These are common Git commands used in various situations:"));
+       putchar('\n');
        print_cmd_by_category(common_categories, NULL);
 }
 
@@ -432,15 +436,10 @@ static int get_alias(const char *var, const char *value, void *data)
        return 0;
 }
 
-void list_all_cmds_help(void)
+static void list_all_cmds_help_external_commands(void)
 {
        struct string_list others = STRING_LIST_INIT_DUP;
-       struct string_list alias_list = STRING_LIST_INIT_DUP;
-       struct cmdname_help *aliases;
-       int i, longest;
-
-       printf_ln(_("See 'git help <command>' to read about a specific subcommand"));
-       print_cmd_by_category(main_categories, &longest);
+       int i;
 
        list_all_other_cmds(&others);
        if (others.nr)
@@ -448,6 +447,13 @@ void list_all_cmds_help(void)
        for (i = 0; i < others.nr; i++)
                printf("   %s\n", others.items[i].string);
        string_list_clear(&others, 0);
+}
+
+static void list_all_cmds_help_aliases(int longest)
+{
+       struct string_list alias_list = STRING_LIST_INIT_DUP;
+       struct cmdname_help *aliases;
+       int i;
 
        git_config(get_alias, &alias_list);
        string_list_sort(&alias_list);
@@ -473,6 +479,20 @@ void list_all_cmds_help(void)
        string_list_clear(&alias_list, 1);
 }
 
+void list_all_cmds_help(int show_external_commands, int show_aliases)
+{
+       int longest;
+
+       puts(_("See 'git help <command>' to read about a specific subcommand"));
+       putchar('\n');
+       print_cmd_by_category(main_categories, &longest);
+
+       if (show_external_commands)
+               list_all_cmds_help_external_commands();
+       if (show_aliases)
+               list_all_cmds_help_aliases(longest);
+}
+
 int is_in_cmdlist(struct cmdnames *c, const char *s)
 {
        int i;
@@ -695,6 +715,9 @@ void get_version_info(struct strbuf *buf, int show_build_options)
                strbuf_addf(buf, "sizeof-size_t: %d\n", (int)sizeof(size_t));
                strbuf_addf(buf, "shell-path: %s\n", SHELL_PATH);
                /* NEEDSWORK: also save and output GIT-BUILD_OPTIONS? */
+
+               if (fsmonitor_ipc__is_supported())
+                       strbuf_addstr(buf, "feature: fsmonitor--daemon\n");
        }
 }
 
diff --git a/help.h b/help.h
index 9d383f1a0b22a9a6d29be5b21e7fe09fcae5ddb8..971a3ad855acdc2d02697993ed8a7730626b8572 100644 (file)
--- a/help.h
+++ b/help.h
@@ -20,7 +20,7 @@ static inline void mput_char(char c, unsigned int num)
 }
 
 void list_common_cmds_help(void);
-void list_all_cmds_help(void);
+void list_all_cmds_help(int show_external_commands, int show_aliases);
 void list_guides_help(void);
 
 void list_all_main_cmds(struct string_list *list);
diff --git a/hook.c b/hook.c
index 55e1145a4b7b8c59276f082ab0b240817702ace4..1d51be3b77a713bcd45428988c97841156a513cf 100644 (file)
--- a/hook.c
+++ b/hook.c
@@ -1,6 +1,7 @@
 #include "cache.h"
 #include "hook.h"
 #include "run-command.h"
+#include "config.h"
 
 const char *find_hook(const char *name)
 {
@@ -40,3 +41,140 @@ int hook_exists(const char *name)
 {
        return !!find_hook(name);
 }
+
+static int pick_next_hook(struct child_process *cp,
+                         struct strbuf *out,
+                         void *pp_cb,
+                         void **pp_task_cb)
+{
+       struct hook_cb_data *hook_cb = pp_cb;
+       const char *hook_path = hook_cb->hook_path;
+
+       if (!hook_path)
+               return 0;
+
+       cp->no_stdin = 1;
+       strvec_pushv(&cp->env_array, hook_cb->options->env.v);
+       cp->stdout_to_stderr = 1;
+       cp->trace2_hook_name = hook_cb->hook_name;
+       cp->dir = hook_cb->options->dir;
+
+       strvec_push(&cp->args, hook_path);
+       strvec_pushv(&cp->args, hook_cb->options->args.v);
+
+       /* Provide context for errors if necessary */
+       *pp_task_cb = (char *)hook_path;
+
+       /*
+        * This pick_next_hook() will be called again, we're only
+        * running one hook, so indicate that no more work will be
+        * done.
+        */
+       hook_cb->hook_path = NULL;
+
+       return 1;
+}
+
+static int notify_start_failure(struct strbuf *out,
+                               void *pp_cb,
+                               void *pp_task_cp)
+{
+       struct hook_cb_data *hook_cb = pp_cb;
+       const char *hook_path = pp_task_cp;
+
+       hook_cb->rc |= 1;
+
+       strbuf_addf(out, _("Couldn't start hook '%s'\n"),
+                   hook_path);
+
+       return 1;
+}
+
+static int notify_hook_finished(int result,
+                               struct strbuf *out,
+                               void *pp_cb,
+                               void *pp_task_cb)
+{
+       struct hook_cb_data *hook_cb = pp_cb;
+       struct run_hooks_opt *opt = hook_cb->options;
+
+       hook_cb->rc |= result;
+
+       if (opt->invoked_hook)
+               *opt->invoked_hook = 1;
+
+       return 0;
+}
+
+static void run_hooks_opt_clear(struct run_hooks_opt *options)
+{
+       strvec_clear(&options->env);
+       strvec_clear(&options->args);
+}
+
+int run_hooks_opt(const char *hook_name, struct run_hooks_opt *options)
+{
+       struct strbuf abs_path = STRBUF_INIT;
+       struct hook_cb_data cb_data = {
+               .rc = 0,
+               .hook_name = hook_name,
+               .options = options,
+       };
+       const char *const hook_path = find_hook(hook_name);
+       int jobs = 1;
+       int ret = 0;
+
+       if (!options)
+               BUG("a struct run_hooks_opt must be provided to run_hooks");
+
+       if (options->invoked_hook)
+               *options->invoked_hook = 0;
+
+       if (!hook_path && !options->error_if_missing)
+               goto cleanup;
+
+       if (!hook_path) {
+               ret = error("cannot find a hook named %s", hook_name);
+               goto cleanup;
+       }
+
+       cb_data.hook_path = hook_path;
+       if (options->dir) {
+               strbuf_add_absolute_path(&abs_path, hook_path);
+               cb_data.hook_path = abs_path.buf;
+       }
+
+       run_processes_parallel_tr2(jobs,
+                                  pick_next_hook,
+                                  notify_start_failure,
+                                  notify_hook_finished,
+                                  &cb_data,
+                                  "hook",
+                                  hook_name);
+       ret = cb_data.rc;
+cleanup:
+       strbuf_release(&abs_path);
+       run_hooks_opt_clear(options);
+       return ret;
+}
+
+int run_hooks(const char *hook_name)
+{
+       struct run_hooks_opt opt = RUN_HOOKS_OPT_INIT;
+
+       return run_hooks_opt(hook_name, &opt);
+}
+
+int run_hooks_l(const char *hook_name, ...)
+{
+       struct run_hooks_opt opt = RUN_HOOKS_OPT_INIT;
+       va_list ap;
+       const char *arg;
+
+       va_start(ap, hook_name);
+       while ((arg = va_arg(ap, const char *)))
+               strvec_push(&opt.args, arg);
+       va_end(ap);
+
+       return run_hooks_opt(hook_name, &opt);
+}
diff --git a/hook.h b/hook.h
index 6aa36fc7ff9b07e9a97cbfccaa53b81452fe5b37..4258b13da0d7c3c88a81b79eb25e8cc6a29dc6b6 100644 (file)
--- a/hook.h
+++ b/hook.h
@@ -1,5 +1,49 @@
 #ifndef HOOK_H
 #define HOOK_H
+#include "strvec.h"
+
+struct run_hooks_opt
+{
+       /* Environment vars to be set for each hook */
+       struct strvec env;
+
+       /* Args to be passed to each hook */
+       struct strvec args;
+
+       /* Emit an error if the hook is missing */
+       unsigned int error_if_missing:1;
+
+       /**
+        * An optional initial working directory for the hook,
+        * translates to "struct child_process"'s "dir" member.
+        */
+       const char *dir;
+
+       /**
+        * A pointer which if provided will be set to 1 or 0 depending
+        * on if a hook was started, regardless of whether or not that
+        * was successful. I.e. if the underlying start_command() was
+        * successful this will be set to 1.
+        *
+        * Used for avoiding TOCTOU races in code that would otherwise
+        * call hook_exist() after a "maybe hook run" to see if a hook
+        * was invoked.
+        */
+       int *invoked_hook;
+};
+
+#define RUN_HOOKS_OPT_INIT { \
+       .env = STRVEC_INIT, \
+       .args = STRVEC_INIT, \
+}
+
+struct hook_cb_data {
+       /* rc reflects the cumulative failure state */
+       int rc;
+       const char *hook_name;
+       const char *hook_path;
+       struct run_hooks_opt *options;
+};
 
 /*
  * Returns the path to the hook file, or NULL if the hook is missing
@@ -13,4 +57,29 @@ const char *find_hook(const char *name);
  */
 int hook_exists(const char *hookname);
 
+/**
+ * Takes a `hook_name`, resolves it to a path with find_hook(), and
+ * runs the hook for you with the options specified in "struct
+ * run_hooks opt". Will free memory associated with the "struct run_hooks_opt".
+ *
+ * Returns the status code of the run hook, or a negative value on
+ * error().
+ */
+int run_hooks_opt(const char *hook_name, struct run_hooks_opt *options);
+
+/**
+ * A wrapper for run_hooks_opt() which provides a dummy "struct
+ * run_hooks_opt" initialized with "RUN_HOOKS_OPT_INIT".
+ */
+int run_hooks(const char *hook_name);
+
+/**
+ * Like run_hooks(), a wrapper for run_hooks_opt().
+ *
+ * In addition to the wrapping behavior provided by run_hooks(), this
+ * wrapper takes a list of strings terminated by a NULL
+ * argument. These things will be used as positional arguments to the
+ * hook. This function behaves like the old run_hook_le() API.
+ */
+int run_hooks_l(const char *hook_name, ...);
 #endif
index 807fb8839e7859ca4e9af298f28a74e5bb7455ec..81a7229ece00addacc4b2edce12dc79810c06c02 100644 (file)
@@ -13,6 +13,7 @@
 #include "packfile.h"
 #include "object-store.h"
 #include "protocol.h"
+#include "date.h"
 
 static const char content_type[] = "Content-Type";
 static const char content_length[] = "Content-Length";
index b4aeae9e2695369c648ba615e182ab5c3f08561b..fa6be6420dda42fae3955c59a102afbef9650a91 100644 (file)
@@ -363,7 +363,7 @@ static void start_put(struct transfer_request *request)
        git_zstream stream;
 
        unpacked = read_object_file(&request->obj->oid, &type, &len);
-       hdrlen = xsnprintf(hdr, sizeof(hdr), "%s %"PRIuMAX , type_name(type), (uintmax_t)len) + 1;
+       hdrlen = format_object_header(hdr, sizeof(hdr), type, len);
 
        /* Set it up */
        git_deflate_init(&stream, zlib_compression_level);
diff --git a/ident.c b/ident.c
index 6aba4b5cb6f2cb3bf469f4f9111845a70a0e5031..89ca5b47008ee50749744914dd80a009d9adcaff 100644 (file)
--- a/ident.c
+++ b/ident.c
@@ -7,6 +7,7 @@
  */
 #include "cache.h"
 #include "config.h"
+#include "date.h"
 
 static struct strbuf git_default_name = STRBUF_INIT;
 static struct strbuf git_default_email = STRBUF_INIT;
index e6090a0346ad4947791a04ffce71ba1d0a8e8e28..a50af56b827033dc68923e038566e7718fb81a65 100644 (file)
@@ -27,7 +27,7 @@
 #include "exec-cmd.h"
 #include "run-command.h"
 #include "parse-options.h"
-#ifdef NO_OPENSSL
+#if defined(NO_OPENSSL) && !defined(HAVE_OPENSSL_CSPRNG)
 typedef void *SSL;
 #endif
 #ifdef USE_CURL_FOR_IMAP_SEND
@@ -98,17 +98,7 @@ struct imap_server_conf {
 };
 
 static struct imap_server_conf server = {
-       NULL,   /* name */
-       NULL,   /* tunnel */
-       NULL,   /* host */
-       0,      /* port */
-       NULL,   /* folder */
-       NULL,   /* user */
-       NULL,   /* pass */
-       0,      /* use_ssl */
-       1,      /* ssl_verify */
-       0,      /* use_html */
-       NULL,   /* auth_method */
+       .ssl_verify = 1,
 };
 
 struct imap_socket {
index fd8d59f653ab9b04cc709f9d0f4b00f407bf7ae9..4b25287886dfe7368582dd615d424e66e6f320f9 100644 (file)
@@ -40,22 +40,7 @@ const char *list_object_filter_config_name(enum list_objects_filter_choice c)
        BUG("list_object_filter_config_name: invalid argument '%d'", c);
 }
 
-/*
- * Parse value of the argument to the "filter" keyword.
- * On the command line this looks like:
- *       --filter=<arg>
- * and in the pack protocol as:
- *       "filter" SP <arg>
- *
- * The filter keyword will be used by many commands.
- * See Documentation/rev-list-options.txt for allowed values for <arg>.
- *
- * Capture the given arg as the "filter_spec".  This can be forwarded to
- * subordinate commands when necessary (although it's better to pass it through
- * expand_list_objects_filter_spec() first).  We also "intern" the arg for the
- * convenience of the current command.
- */
-static int gently_parse_list_objects_filter(
+int gently_parse_list_objects_filter(
        struct list_objects_filter_options *filter_options,
        const char *arg,
        struct strbuf *errbuf)
@@ -300,6 +285,10 @@ int opt_parse_list_objects_filter(const struct option *opt,
                                  const char *arg, int unset)
 {
        struct list_objects_filter_options *filter_options = opt->value;
+       opt_lof_init init = (opt_lof_init)opt->defval;
+
+       if (init)
+               filter_options = init(opt->value);
 
        if (unset || !arg)
                list_objects_filter_set_no_filter(filter_options);
@@ -415,3 +404,22 @@ void partial_clone_get_default_filter_spec(
                                         &errbuf);
        strbuf_release(&errbuf);
 }
+
+void list_objects_filter_copy(
+       struct list_objects_filter_options *dest,
+       const struct list_objects_filter_options *src)
+{
+       int i;
+       struct string_list_item *item;
+
+       /* Copy everything. We will overwrite the pointers shortly. */
+       memcpy(dest, src, sizeof(struct list_objects_filter_options));
+
+       string_list_init_dup(&dest->filter_spec);
+       for_each_string_list_item(item, &src->filter_spec)
+               string_list_append(&dest->filter_spec, item->string);
+
+       ALLOC_ARRAY(dest->sub, dest->sub_alloc);
+       for (i = 0; i < src->sub_nr; i++)
+               list_objects_filter_copy(&dest->sub[i], &src->sub[i]);
+}
index da5b6737e27e36a6e198a59a070cd30f17179ceb..ffc02d77e760009d3e4eec78d5d9abff3fe1e634 100644 (file)
@@ -69,8 +69,25 @@ struct list_objects_filter_options {
         */
 };
 
-/* Normalized command line arguments */
-#define CL_ARG__FILTER "filter"
+/*
+ * Parse value of the argument to the "filter" keyword.
+ * On the command line this looks like:
+ *       --filter=<arg>
+ * and in the pack protocol as:
+ *       "filter" SP <arg>
+ *
+ * The filter keyword will be used by many commands.
+ * See Documentation/rev-list-options.txt for allowed values for <arg>.
+ *
+ * Capture the given arg as the "filter_spec".  This can be forwarded to
+ * subordinate commands when necessary (although it's better to pass it through
+ * expand_list_objects_filter_spec() first).  We also "intern" the arg for the
+ * convenience of the current command.
+ */
+int gently_parse_list_objects_filter(
+       struct list_objects_filter_options *filter_options,
+       const char *arg,
+       struct strbuf *errbuf);
 
 void list_objects_filter_die_if_populated(
        struct list_objects_filter_options *filter_options);
@@ -87,13 +104,31 @@ void parse_list_objects_filter(
        struct list_objects_filter_options *filter_options,
        const char *arg);
 
+/**
+ * The opt->value to opt_parse_list_objects_filter() is either a
+ * "struct list_objects_filter_option *" when using
+ * OPT_PARSE_LIST_OBJECTS_FILTER().
+ *
+ * Or, if using no "struct option" field is used by the callback,
+ * except the "defval" which is expected to be an "opt_lof_init"
+ * function, which is called with the "opt->value" and must return a
+ * pointer to the ""struct list_objects_filter_option *" to be used.
+ *
+ * The OPT_PARSE_LIST_OBJECTS_FILTER_INIT() can be used e.g. the
+ * "struct list_objects_filter_option" is embedded in a "struct
+ * rev_info", which the "defval" could be tasked with lazily
+ * initializing. See cmd_pack_objects() for an example.
+ */
 int opt_parse_list_objects_filter(const struct option *opt,
                                  const char *arg, int unset);
+typedef struct list_objects_filter_options *(*opt_lof_init)(void *);
+#define OPT_PARSE_LIST_OBJECTS_FILTER_INIT(fo, init) \
+       { OPTION_CALLBACK, 0, "filter", (fo), N_("args"), \
+         N_("object filtering"), 0, opt_parse_list_objects_filter, \
+         (intptr_t)(init) }
 
 #define OPT_PARSE_LIST_OBJECTS_FILTER(fo) \
-       OPT_CALLBACK(0, CL_ARG__FILTER, fo, N_("args"), \
-         N_("object filtering"), \
-         opt_parse_list_objects_filter)
+       OPT_PARSE_LIST_OBJECTS_FILTER_INIT((fo), NULL)
 
 /*
  * Translates abbreviated numbers in the filter's filter_spec into their
@@ -132,4 +167,8 @@ void partial_clone_get_default_filter_spec(
        struct list_objects_filter_options *filter_options,
        const char *remote);
 
+void list_objects_filter_copy(
+       struct list_objects_filter_options *dest,
+       const struct list_objects_filter_options *src);
+
 #endif /* LIST_OBJECTS_FILTER_OPTIONS_H */
index 2f623f8211534dabe732b1da140a2512a5a5fcf5..250d9de41cb56072e95420530b203ce417191a2b 100644 (file)
@@ -21,6 +21,23 @@ struct traversal_context {
        struct filter *filter;
 };
 
+static void show_commit(struct traversal_context *ctx,
+                       struct commit *commit)
+{
+       if (!ctx->show_commit)
+               return;
+       ctx->show_commit(commit, ctx->show_data);
+}
+
+static void show_object(struct traversal_context *ctx,
+                       struct object *object,
+                       const char *name)
+{
+       if (!ctx->show_object)
+               return;
+       ctx->show_object(object, name, ctx->show_data);
+}
+
 static void process_blob(struct traversal_context *ctx,
                         struct blob *blob,
                         struct strbuf *path,
@@ -60,7 +77,7 @@ static void process_blob(struct traversal_context *ctx,
        if (r & LOFR_MARK_SEEN)
                obj->flags |= SEEN;
        if (r & LOFR_DO_SHOW)
-               ctx->show_object(obj, path->buf, ctx->show_data);
+               show_object(ctx, obj, path->buf);
        strbuf_setlen(path, pathlen);
 }
 
@@ -194,7 +211,7 @@ static void process_tree(struct traversal_context *ctx,
        if (r & LOFR_MARK_SEEN)
                obj->flags |= SEEN;
        if (r & LOFR_DO_SHOW)
-               ctx->show_object(obj, base->buf, ctx->show_data);
+               show_object(ctx, obj, base->buf);
        if (base->len)
                strbuf_addch(base, '/');
 
@@ -210,7 +227,7 @@ static void process_tree(struct traversal_context *ctx,
        if (r & LOFR_MARK_SEEN)
                obj->flags |= SEEN;
        if (r & LOFR_DO_SHOW)
-               ctx->show_object(obj, base->buf, ctx->show_data);
+               show_object(ctx, obj, base->buf);
 
        strbuf_setlen(base, baselen);
        free_tree_buffer(tree);
@@ -228,7 +245,7 @@ static void process_tag(struct traversal_context *ctx,
        if (r & LOFR_MARK_SEEN)
                tag->object.flags |= SEEN;
        if (r & LOFR_DO_SHOW)
-               ctx->show_object(&tag->object, name, ctx->show_data);
+               show_object(ctx, &tag->object, name);
 }
 
 static void mark_edge_parents_uninteresting(struct commit *commit,
@@ -402,7 +419,7 @@ static void do_traverse(struct traversal_context *ctx)
                if (r & LOFR_MARK_SEEN)
                        commit->object.flags |= SEEN;
                if (r & LOFR_DO_SHOW)
-                       ctx->show_commit(commit, ctx->show_data);
+                       show_commit(ctx, commit);
 
                if (ctx->revs->tree_blobs_in_commit_order)
                        /*
@@ -416,35 +433,25 @@ static void do_traverse(struct traversal_context *ctx)
        strbuf_release(&csp);
 }
 
-void traverse_commit_list(struct rev_info *revs,
-                         show_commit_fn show_commit,
-                         show_object_fn show_object,
-                         void *show_data)
-{
-       struct traversal_context ctx;
-       ctx.revs = revs;
-       ctx.show_commit = show_commit;
-       ctx.show_object = show_object;
-       ctx.show_data = show_data;
-       ctx.filter = NULL;
-       do_traverse(&ctx);
-}
-
 void traverse_commit_list_filtered(
-       struct list_objects_filter_options *filter_options,
        struct rev_info *revs,
        show_commit_fn show_commit,
        show_object_fn show_object,
        void *show_data,
        struct oidset *omitted)
 {
-       struct traversal_context ctx;
+       struct traversal_context ctx = {
+               .revs = revs,
+               .show_object = show_object,
+               .show_commit = show_commit,
+               .show_data = show_data,
+       };
+
+       if (revs->filter.choice)
+               ctx.filter = list_objects_filter__init(omitted, &revs->filter);
 
-       ctx.revs = revs;
-       ctx.show_object = show_object;
-       ctx.show_commit = show_commit;
-       ctx.show_data = show_data;
-       ctx.filter = list_objects_filter__init(omitted, filter_options);
        do_traverse(&ctx);
-       list_objects_filter__free(ctx.filter);
+
+       if (ctx.filter)
+               list_objects_filter__free(ctx.filter);
 }
index a952680e46671db2543bc4abff78a2d898cd1408..9eaf4de844950017a947df7efbcceaf9f0d9feb5 100644 (file)
@@ -7,7 +7,6 @@ struct rev_info;
 
 typedef void (*show_commit_fn)(struct commit *, void *);
 typedef void (*show_object_fn)(struct object *, const char *, void *);
-void traverse_commit_list(struct rev_info *, show_commit_fn, show_object_fn, void *);
 
 typedef void (*show_edge_fn)(struct commit *);
 void mark_edges_uninteresting(struct rev_info *revs,
@@ -18,11 +17,20 @@ struct oidset;
 struct list_objects_filter_options;
 
 void traverse_commit_list_filtered(
-       struct list_objects_filter_options *filter_options,
        struct rev_info *revs,
        show_commit_fn show_commit,
        show_object_fn show_object,
        void *show_data,
        struct oidset *omitted);
 
+static inline void traverse_commit_list(
+       struct rev_info *revs,
+       show_commit_fn show_commit,
+       show_object_fn show_object,
+       void *show_data)
+{
+       traverse_commit_list_filtered(revs, show_commit,
+                                     show_object, show_data, NULL);
+}
+
 #endif /* LIST_OBJECTS_H */
index 261657578c756c94f27ba03392ef82f4173d5460..a937cec59a6e8cd80f2272940ed0960a08d35125 100644 (file)
@@ -14,7 +14,7 @@
 
 struct ll_merge_driver;
 
-typedef int (*ll_merge_fn)(const struct ll_merge_driver *,
+typedef enum ll_merge_result (*ll_merge_fn)(const struct ll_merge_driver *,
                           mmbuffer_t *result,
                           const char *path,
                           mmfile_t *orig, const char *orig_name,
@@ -49,7 +49,7 @@ void reset_merge_attributes(void)
 /*
  * Built-in low-levels
  */
-static int ll_binary_merge(const struct ll_merge_driver *drv_unused,
+static enum ll_merge_result ll_binary_merge(const struct ll_merge_driver *drv_unused,
                           mmbuffer_t *result,
                           const char *path,
                           mmfile_t *orig, const char *orig_name,
@@ -58,6 +58,7 @@ static int ll_binary_merge(const struct ll_merge_driver *drv_unused,
                           const struct ll_merge_options *opts,
                           int marker_size)
 {
+       enum ll_merge_result ret;
        mmfile_t *stolen;
        assert(opts);
 
@@ -68,16 +69,19 @@ static int ll_binary_merge(const struct ll_merge_driver *drv_unused,
         */
        if (opts->virtual_ancestor) {
                stolen = orig;
+               ret = LL_MERGE_OK;
        } else {
                switch (opts->variant) {
                default:
-                       warning("Cannot merge binary files: %s (%s vs. %s)",
-                               path, name1, name2);
-                       /* fallthru */
+                       ret = LL_MERGE_BINARY_CONFLICT;
+                       stolen = src1;
+                       break;
                case XDL_MERGE_FAVOR_OURS:
+                       ret = LL_MERGE_OK;
                        stolen = src1;
                        break;
                case XDL_MERGE_FAVOR_THEIRS:
+                       ret = LL_MERGE_OK;
                        stolen = src2;
                        break;
                }
@@ -87,16 +91,10 @@ static int ll_binary_merge(const struct ll_merge_driver *drv_unused,
        result->size = stolen->size;
        stolen->ptr = NULL;
 
-       /*
-        * With -Xtheirs or -Xours, we have cleanly merged;
-        * otherwise we got a conflict.
-        */
-       return opts->variant == XDL_MERGE_FAVOR_OURS ||
-              opts->variant == XDL_MERGE_FAVOR_THEIRS ?
-              0 : 1;
+       return ret;
 }
 
-static int ll_xdl_merge(const struct ll_merge_driver *drv_unused,
+static enum ll_merge_result ll_xdl_merge(const struct ll_merge_driver *drv_unused,
                        mmbuffer_t *result,
                        const char *path,
                        mmfile_t *orig, const char *orig_name,
@@ -105,7 +103,9 @@ static int ll_xdl_merge(const struct ll_merge_driver *drv_unused,
                        const struct ll_merge_options *opts,
                        int marker_size)
 {
+       enum ll_merge_result ret;
        xmparam_t xmp;
+       int status;
        assert(opts);
 
        if (orig->size > MAX_XDIFF_SIZE ||
@@ -133,10 +133,12 @@ static int ll_xdl_merge(const struct ll_merge_driver *drv_unused,
        xmp.ancestor = orig_name;
        xmp.file1 = name1;
        xmp.file2 = name2;
-       return xdl_merge(orig, src1, src2, &xmp, result);
+       status = xdl_merge(orig, src1, src2, &xmp, result);
+       ret = (status > 0) ? LL_MERGE_CONFLICT : status;
+       return ret;
 }
 
-static int ll_union_merge(const struct ll_merge_driver *drv_unused,
+static enum ll_merge_result ll_union_merge(const struct ll_merge_driver *drv_unused,
                          mmbuffer_t *result,
                          const char *path,
                          mmfile_t *orig, const char *orig_name,
@@ -178,7 +180,7 @@ static void create_temp(mmfile_t *src, char *path, size_t len)
 /*
  * User defined low-level merge driver support.
  */
-static int ll_ext_merge(const struct ll_merge_driver *fn,
+static enum ll_merge_result ll_ext_merge(const struct ll_merge_driver *fn,
                        mmbuffer_t *result,
                        const char *path,
                        mmfile_t *orig, const char *orig_name,
@@ -194,6 +196,7 @@ static int ll_ext_merge(const struct ll_merge_driver *fn,
        const char *args[] = { NULL, NULL };
        int status, fd, i;
        struct stat st;
+       enum ll_merge_result ret;
        assert(opts);
 
        sq_quote_buf(&path_sq, path);
@@ -236,7 +239,8 @@ static int ll_ext_merge(const struct ll_merge_driver *fn,
                unlink_or_warn(temp[i]);
        strbuf_release(&cmd);
        strbuf_release(&path_sq);
-       return status;
+       ret = (status > 0) ? LL_MERGE_CONFLICT : status;
+       return ret;
 }
 
 /*
@@ -362,7 +366,7 @@ static void normalize_file(mmfile_t *mm, const char *path, struct index_state *i
        }
 }
 
-int ll_merge(mmbuffer_t *result_buf,
+enum ll_merge_result ll_merge(mmbuffer_t *result_buf,
             const char *path,
             mmfile_t *ancestor, const char *ancestor_label,
             mmfile_t *ours, const char *our_label,
index aceb1b24132306a272182556ee15003a1f0d4e08..e4a20e81a3aea90b64e65b1f33a38efa595d9a2a 100644 (file)
@@ -82,13 +82,20 @@ struct ll_merge_options {
        long xdl_opts;
 };
 
+enum ll_merge_result {
+       LL_MERGE_ERROR = -1,
+       LL_MERGE_OK = 0,
+       LL_MERGE_CONFLICT,
+       LL_MERGE_BINARY_CONFLICT,
+};
+
 /**
  * Perform a three-way single-file merge in core.  This is a thin wrapper
  * around `xdl_merge` that takes the path and any merge backend specified in
  * `.gitattributes` or `.git/info/attributes` into account.
  * Returns 0 for a clean merge.
  */
-int ll_merge(mmbuffer_t *result_buf,
+enum ll_merge_result ll_merge(mmbuffer_t *result_buf,
             const char *path,
             mmfile_t *ancestor, const char *ancestor_label,
             mmfile_t *ours, const char *our_label,
index d3e7a40b648c7dc6eb30880ac3e04908342a8b09..3a03e34c305c07533574177a7b5483d038f5290c 100644 (file)
@@ -1,12 +1,15 @@
 #include "cache.h"
+#include "commit-reach.h"
 #include "config.h"
 #include "diff.h"
 #include "object-store.h"
 #include "repository.h"
+#include "tmp-objdir.h"
 #include "commit.h"
 #include "tag.h"
 #include "graph.h"
 #include "log-tree.h"
+#include "merge-ort.h"
 #include "reflog-walk.h"
 #include "refs.h"
 #include "string-list.h"
@@ -16,6 +19,7 @@
 #include "line-log.h"
 #include "help.h"
 #include "range-diff.h"
+#include "strmap.h"
 
 static struct decoration name_decoration = { "object names" };
 static int decoration_loaded;
@@ -561,7 +565,7 @@ static int show_one_mergetag(struct commit *commit,
        struct strbuf signature = STRBUF_INIT;
 
        hash_object_file(the_hash_algo, extra->value, extra->len,
-                        type_name(OBJ_TAG), &oid);
+                        OBJ_TAG, &oid);
        tag = lookup_tag(the_repository, &oid);
        if (!tag)
                return -1; /* error message already given */
@@ -849,7 +853,7 @@ int log_tree_diff_flush(struct rev_info *opt)
        opt->shown_dashes = 0;
        diffcore_std(&opt->diffopt);
 
-       if (diff_queue_is_empty()) {
+       if (diff_queue_is_empty(&opt->diffopt)) {
                int saved_fmt = opt->diffopt.output_format;
                opt->diffopt.output_format = DIFF_FORMAT_NO_OUTPUT;
                diff_flush(&opt->diffopt);
@@ -904,6 +908,106 @@ static int do_diff_combined(struct rev_info *opt, struct commit *commit)
        return !opt->loginfo;
 }
 
+static void setup_additional_headers(struct diff_options *o,
+                                    struct strmap *all_headers)
+{
+       struct hashmap_iter iter;
+       struct strmap_entry *entry;
+
+       /*
+        * Make o->additional_path_headers contain the subset of all_headers
+        * that match o->pathspec.  If there aren't any that match o->pathspec,
+        * then make o->additional_path_headers be NULL.
+        */
+
+       if (!o->pathspec.nr) {
+               o->additional_path_headers = all_headers;
+               return;
+       }
+
+       o->additional_path_headers = xmalloc(sizeof(struct strmap));
+       strmap_init_with_options(o->additional_path_headers, NULL, 0);
+       strmap_for_each_entry(all_headers, &iter, entry) {
+               if (match_pathspec(the_repository->index, &o->pathspec,
+                                  entry->key, strlen(entry->key),
+                                  0 /* prefix */, NULL /* seen */,
+                                  0 /* is_dir */))
+                       strmap_put(o->additional_path_headers,
+                                  entry->key, entry->value);
+       }
+       if (!strmap_get_size(o->additional_path_headers)) {
+               strmap_clear(o->additional_path_headers, 0);
+               FREE_AND_NULL(o->additional_path_headers);
+       }
+}
+
+static void cleanup_additional_headers(struct diff_options *o)
+{
+       if (!o->pathspec.nr) {
+               o->additional_path_headers = NULL;
+               return;
+       }
+       if (!o->additional_path_headers)
+               return;
+
+       strmap_clear(o->additional_path_headers, 0);
+       FREE_AND_NULL(o->additional_path_headers);
+}
+
+static int do_remerge_diff(struct rev_info *opt,
+                          struct commit_list *parents,
+                          struct object_id *oid,
+                          struct commit *commit)
+{
+       struct merge_options o;
+       struct commit_list *bases;
+       struct merge_result res = {0};
+       struct pretty_print_context ctx = {0};
+       struct commit *parent1 = parents->item;
+       struct commit *parent2 = parents->next->item;
+       struct strbuf parent1_desc = STRBUF_INIT;
+       struct strbuf parent2_desc = STRBUF_INIT;
+
+       /* Setup merge options */
+       init_merge_options(&o, the_repository);
+       o.show_rename_progress = 0;
+       o.record_conflict_msgs_as_headers = 1;
+       o.msg_header_prefix = "remerge";
+
+       ctx.abbrev = DEFAULT_ABBREV;
+       format_commit_message(parent1, "%h (%s)", &parent1_desc, &ctx);
+       format_commit_message(parent2, "%h (%s)", &parent2_desc, &ctx);
+       o.branch1 = parent1_desc.buf;
+       o.branch2 = parent2_desc.buf;
+
+       /* Parse the relevant commits and get the merge bases */
+       parse_commit_or_die(parent1);
+       parse_commit_or_die(parent2);
+       bases = get_merge_bases(parent1, parent2);
+
+       /* Re-merge the parents */
+       merge_incore_recursive(&o, bases, parent1, parent2, &res);
+
+       /* Show the diff */
+       setup_additional_headers(&opt->diffopt, res.path_messages);
+       diff_tree_oid(&res.tree->object.oid, oid, "", &opt->diffopt);
+       log_tree_diff_flush(opt);
+
+       /* Cleanup */
+       cleanup_additional_headers(&opt->diffopt);
+       strbuf_release(&parent1_desc);
+       strbuf_release(&parent2_desc);
+       merge_finalize(&o, &res);
+
+       /* Clean up the contents of the temporary object directory */
+       if (opt->remerge_objdir)
+               tmp_objdir_discard_objects(opt->remerge_objdir);
+       else
+               BUG("did a remerge diff without remerge_objdir?!?");
+
+       return !opt->loginfo;
+}
+
 /*
  * Show the diff of a commit.
  *
@@ -938,6 +1042,18 @@ static int log_tree_diff(struct rev_info *opt, struct commit *commit, struct log
        }
 
        if (is_merge) {
+               int octopus = (parents->next->next != NULL);
+
+               if (opt->remerge_diff) {
+                       if (octopus) {
+                               show_log(opt);
+                               fprintf(opt->diffopt.file,
+                                       "diff: warning: Skipping remerge-diff "
+                                       "for octopus merges.\n");
+                               return 1;
+                       }
+                       return do_remerge_diff(opt, parents, oid, commit);
+               }
                if (opt->combine_merges)
                        return do_diff_combined(opt, commit);
                if (opt->separate_merges) {
@@ -982,6 +1098,7 @@ int log_tree_commit(struct rev_info *opt, struct commit *commit)
        opt->loginfo = &log;
        opt->diffopt.no_free = 1;
 
+       /* NEEDSWORK: no restoring of no_free?  Why? */
        if (opt->line_level_traverse)
                return line_log_print(opt, commit);
 
index 54078323dcb92b68463e6c16b23621ae8f47a2f1..98e69373c8404ead982595fc9dbda5c4fe8137a1 100644 (file)
--- a/ls-refs.c
+++ b/ls-refs.c
@@ -34,7 +34,8 @@ static void ensure_config_read(void)
                } else if (!strcmp(str, "ignore")) {
                        /* do nothing */
                } else {
-                       die(_("invalid value '%s' for lsrefs.unborn"), str);
+                       die(_("invalid value for '%s': '%s'"),
+                           "lsrefs.unborn", str);
                }
        }
        config_read = 1;
index 40ce152024d7dc3cf6d387dc5d0c1a47542129bd..7befdc5e4835d533b994f75ee42709937a5d046c 100644 (file)
--- a/mailmap.c
+++ b/mailmap.c
@@ -43,8 +43,8 @@ static void free_mailmap_info(void *p, const char *s)
 static void free_mailmap_entry(void *p, const char *s)
 {
        struct mailmap_entry *me = (struct mailmap_entry *)p;
-       debug_mm("mailmap: removing entries for <%s>, with %d sub-entries\n",
-                s, me->namemap.nr);
+       debug_mm("mailmap: removing entries for <%s>, with %"PRIuMAX" sub-entries\n",
+                s, (uintmax_t)me->namemap.nr);
        debug_mm("mailmap: - simple: '%s' <%s>\n",
                 debug_str(me->name), debug_str(me->email));
 
@@ -250,7 +250,8 @@ int read_mailmap(struct string_list *map)
 
 void clear_mailmap(struct string_list *map)
 {
-       debug_mm("mailmap: clearing %d entries...\n", map->nr);
+       debug_mm("mailmap: clearing %"PRIuMAX" entries...\n",
+                (uintmax_t)map->nr);
        map->strdup_strings = 1;
        string_list_clear_func(map, free_mailmap_entry);
        debug_mm("mailmap: cleared\n");
index df413989fa85cb007f3c7d88375283b6243687ca..49398e599fe3afdc88f481608fb58b0887b019e3 100644 (file)
@@ -235,7 +235,7 @@ static int splice_tree(const struct object_id *oid1, const char *prefix,
                rewrite_with = oid2;
        }
        hashcpy(rewrite_here, rewrite_with->hash);
-       status = write_object_file(buf, sz, tree_type, result);
+       status = write_object_file(buf, sz, OBJ_TREE, result);
        free(buf);
        return status;
 }
index ccdcad2e3d622fdd9491d3d1cbdc26f673bb41df..599d8e895f81216e0e0cb44696734cb2a157309b 100644 (file)
@@ -7,6 +7,26 @@
 
 #define BLOCK_GROWTH_SIZE (1024 * 1024 - sizeof(struct mp_block))
 
+/*
+ * The inner union is an approximation for C11's max_align_t, and the
+ * struct + offsetof computes _Alignof. This can all just be replaced
+ * with _Alignof(max_align_t) if/when C11 is part of the baseline.
+ * Note that _Alignof(X) need not be the same as sizeof(X); it's only
+ * required to be a (possibly trivial) factor. They are the same for
+ * most architectures, but m68k for example has only 2-byte alignment
+ * for its 4-byte and 8-byte types, so using sizeof would waste space.
+ *
+ * Add more types to the union if the current set is insufficient.
+ */
+struct git_max_alignment {
+       char unalign;
+       union {
+               uintmax_t max_align_uintmax;
+               void *max_align_pointer;
+       } aligned;
+};
+#define GIT_MAX_ALIGNMENT offsetof(struct git_max_alignment, aligned)
+
 /*
  * Allocate a new mp_block and insert it after the block specified in
  * `insert_after`. If `insert_after` is NULL, then insert block at the
@@ -69,9 +89,9 @@ void *mem_pool_alloc(struct mem_pool *pool, size_t len)
        struct mp_block *p = NULL;
        void *r;
 
-       /* round up to a 'uintmax_t' alignment */
-       if (len & (sizeof(uintmax_t) - 1))
-               len += sizeof(uintmax_t) - (len & (sizeof(uintmax_t) - 1));
+       /* round up to a 'GIT_MAX_ALIGNMENT' alignment */
+       if (len & (GIT_MAX_ALIGNMENT - 1))
+               len += GIT_MAX_ALIGNMENT - (len & (GIT_MAX_ALIGNMENT - 1));
 
        if (pool->mp_block &&
            pool->mp_block->end - pool->mp_block->next_free >= len)
index ee0a0e90c94682f4d990b298d27d734d01d90581..8138090f81cf726ee9834daa7edbfc5b542aec44 100644 (file)
@@ -36,7 +36,7 @@ static void *three_way_filemerge(struct index_state *istate,
                                 mmfile_t *their,
                                 unsigned long *size)
 {
-       int merge_status;
+       enum ll_merge_result merge_status;
        mmbuffer_t res;
 
        /*
@@ -50,6 +50,9 @@ static void *three_way_filemerge(struct index_state *istate,
                                istate, NULL);
        if (merge_status < 0)
                return NULL;
+       if (merge_status == LL_MERGE_BINARY_CONFLICT)
+               warning("Cannot merge binary files: %s (%s vs. %s)",
+                       path, ".our", ".their");
 
        *size = res.size;
        return res.ptr;
index c319797021938a9df635c8db146ac6555331c7db..8545354dafd0600e02eb1bb509d8f9bedd23d1c9 100644 (file)
@@ -634,17 +634,57 @@ static void path_msg(struct merge_options *opt,
                     const char *fmt, ...)
 {
        va_list ap;
-       struct strbuf *sb = strmap_get(&opt->priv->output, path);
+       struct strbuf *sb, *dest;
+       struct strbuf tmp = STRBUF_INIT;
+
+       if (opt->record_conflict_msgs_as_headers && omittable_hint)
+               return; /* Do not record mere hints in headers */
+       if (opt->priv->call_depth && opt->verbosity < 5)
+               return; /* Ignore messages from inner merges */
+
+       sb = strmap_get(&opt->priv->output, path);
        if (!sb) {
                sb = xmalloc(sizeof(*sb));
                strbuf_init(sb, 0);
                strmap_put(&opt->priv->output, path, sb);
        }
 
+       dest = (opt->record_conflict_msgs_as_headers ? &tmp : sb);
+
        va_start(ap, fmt);
-       strbuf_vaddf(sb, fmt, ap);
+       if (opt->priv->call_depth) {
+               strbuf_addchars(dest, ' ', 2);
+               strbuf_addstr(dest, "From inner merge:");
+               strbuf_addchars(dest, ' ', opt->priv->call_depth * 2);
+       }
+       strbuf_vaddf(dest, fmt, ap);
        va_end(ap);
 
+       if (opt->record_conflict_msgs_as_headers) {
+               int i_sb = 0, i_tmp = 0;
+
+               /* Start with the specified prefix */
+               if (opt->msg_header_prefix)
+                       strbuf_addf(sb, "%s ", opt->msg_header_prefix);
+
+               /* Copy tmp to sb, adding spaces after newlines */
+               strbuf_grow(sb, sb->len + 2*tmp.len); /* more than sufficient */
+               for (; i_tmp < tmp.len; i_tmp++, i_sb++) {
+                       /* Copy next character from tmp to sb */
+                       sb->buf[sb->len + i_sb] = tmp.buf[i_tmp];
+
+                       /* If we copied a newline, add a space */
+                       if (tmp.buf[i_tmp] == '\n')
+                               sb->buf[++i_sb] = ' ';
+               }
+               /* Update length and ensure it's NUL-terminated */
+               sb->len += i_sb;
+               sb->buf[sb->len] = '\0';
+
+               strbuf_release(&tmp);
+       }
+
+       /* Add final newline character to sb */
        strbuf_addch(sb, '\n');
 }
 
@@ -688,13 +728,15 @@ static void add_flattened_path(struct strbuf *out, const char *s)
                        out->buf[i] = '_';
 }
 
-static char *unique_path(struct strmap *existing_paths,
+static char *unique_path(struct merge_options *opt,
                         const char *path,
                         const char *branch)
 {
+       char *ret = NULL;
        struct strbuf newpath = STRBUF_INIT;
        int suffix = 0;
        size_t base_len;
+       struct strmap *existing_paths = &opt->priv->paths;
 
        strbuf_addf(&newpath, "%s~", path);
        add_flattened_path(&newpath, branch);
@@ -705,7 +747,11 @@ static char *unique_path(struct strmap *existing_paths,
                strbuf_addf(&newpath, "_%d", suffix++);
        }
 
-       return strbuf_detach(&newpath, NULL);
+       /* Track the new path in our memory pool */
+       ret = mem_pool_alloc(&opt->priv->pool, newpath.len + 1);
+       memcpy(ret, newpath.buf, newpath.len + 1);
+       strbuf_release(&newpath);
+       return ret;
 }
 
 /*** Function Grouping: functions related to collect_merge_info() ***/
@@ -1743,7 +1789,7 @@ static int merge_3way(struct merge_options *opt,
        mmfile_t orig, src1, src2;
        struct ll_merge_options ll_opts = {0};
        char *base, *name1, *name2;
-       int merge_status;
+       enum ll_merge_result merge_status;
 
        if (!opt->priv->attr_index.initialized)
                initialize_attr_index(opt);
@@ -1787,6 +1833,10 @@ static int merge_3way(struct merge_options *opt,
        merge_status = ll_merge(result_buf, path, &orig, base,
                                &src1, name1, &src2, name2,
                                &opt->priv->attr_index, &ll_opts);
+       if (merge_status == LL_MERGE_BINARY_CONFLICT)
+               path_msg(opt, path, 0,
+                        "warning: Cannot merge binary files: %s (%s vs. %s)",
+                        path, name1, name2);
 
        free(base);
        free(name1);
@@ -1888,7 +1938,7 @@ static int handle_content_merge(struct merge_options *opt,
 
                if (!ret &&
                    write_object_file(result_buf.ptr, result_buf.size,
-                                     blob_type, &result->oid))
+                                     OBJ_BLOB, &result->oid))
                        ret = err(opt, _("Unable to add %s to database"),
                                  path);
 
@@ -2416,7 +2466,7 @@ static void apply_directory_rename_modifications(struct merge_options *opt,
                 */
                ci->path_conflict = 1;
                if (pair->status == 'A')
-                       path_msg(opt, new_path, 0,
+                       path_msg(opt, new_path, 1,
                                 _("CONFLICT (file location): %s added in %s "
                                   "inside a directory that was renamed in %s, "
                                   "suggesting it should perhaps be moved to "
@@ -2424,7 +2474,7 @@ static void apply_directory_rename_modifications(struct merge_options *opt,
                                 old_path, branch_with_new_path,
                                 branch_with_dir_rename, new_path);
                else
-                       path_msg(opt, new_path, 0,
+                       path_msg(opt, new_path, 1,
                                 _("CONFLICT (file location): %s renamed to %s "
                                   "in %s, inside a directory that was renamed "
                                   "in %s, suggesting it should perhaps be "
@@ -3048,18 +3098,21 @@ static int detect_and_process_renames(struct merge_options *opt,
                                      struct tree *side1,
                                      struct tree *side2)
 {
-       struct diff_queue_struct combined;
+       struct diff_queue_struct combined = { 0 };
        struct rename_info *renames = &opt->priv->renames;
-       int need_dir_renames, s, clean = 1;
+       int need_dir_renames, s, i, clean = 1;
        unsigned detection_run = 0;
 
-       memset(&combined, 0, sizeof(combined));
        if (!possible_renames(renames))
                goto cleanup;
 
        trace2_region_enter("merge", "regular renames", opt->repo);
        detection_run |= detect_regular_renames(opt, MERGE_SIDE1);
        detection_run |= detect_regular_renames(opt, MERGE_SIDE2);
+       if (renames->needed_limit) {
+               renames->cached_pairs_valid_side = 0;
+               renames->redo_after_renames = 0;
+       }
        if (renames->redo_after_renames && detection_run) {
                int i, side;
                struct diff_filepair *p;
@@ -3133,13 +3186,9 @@ simple_cleanup:
                free(renames->pairs[s].queue);
                DIFF_QUEUE_CLEAR(&renames->pairs[s]);
        }
-       if (combined.nr) {
-               int i;
-               for (i = 0; i < combined.nr; i++)
-                       pool_diff_free_filepair(&opt->priv->pool,
-                                               combined.queue[i]);
-               free(combined.queue);
-       }
+       for (i = 0; i < combined.nr; i++)
+               pool_diff_free_filepair(&opt->priv->pool, combined.queue[i]);
+       free(combined.queue);
 
        return clean;
 }
@@ -3343,7 +3392,7 @@ static void write_tree(struct object_id *result_oid,
        }
 
        /* Write this object file out, and record in result_oid */
-       write_object_file(buf.buf, buf.len, tree_type, result_oid);
+       write_object_file(buf.buf, buf.len, OBJ_TREE, result_oid);
        strbuf_release(&buf);
 }
 
@@ -3637,7 +3686,7 @@ static void process_entry(struct merge_options *opt,
                 */
                df_file_index = (ci->dirmask & (1 << 1)) ? 2 : 1;
                branch = (df_file_index == 1) ? opt->branch1 : opt->branch2;
-               path = unique_path(&opt->priv->paths, path, branch);
+               path = unique_path(opt, path, branch);
                strmap_put(&opt->priv->paths, path, new_ci);
 
                path_msg(opt, path, 0,
@@ -3762,14 +3811,12 @@ static void process_entry(struct merge_options *opt,
                        /* Insert entries into opt->priv_paths */
                        assert(rename_a || rename_b);
                        if (rename_a) {
-                               a_path = unique_path(&opt->priv->paths,
-                                                    path, opt->branch1);
+                               a_path = unique_path(opt, path, opt->branch1);
                                strmap_put(&opt->priv->paths, a_path, ci);
                        }
 
                        if (rename_b)
-                               b_path = unique_path(&opt->priv->paths,
-                                                    path, opt->branch2);
+                               b_path = unique_path(opt, path, opt->branch2);
                        else
                                b_path = path;
                        strmap_put(&opt->priv->paths, b_path, new_ci);
@@ -4017,8 +4064,8 @@ static void process_entries(struct merge_options *opt,
        trace2_region_enter("merge", "process_entries cleanup", opt->repo);
        if (dir_metadata.offsets.nr != 1 ||
            (uintptr_t)dir_metadata.offsets.items[0].util != 0) {
-               printf("dir_metadata.offsets.nr = %d (should be 1)\n",
-                      dir_metadata.offsets.nr);
+               printf("dir_metadata.offsets.nr = %"PRIuMAX" (should be 1)\n",
+                      (uintmax_t)dir_metadata.offsets.nr);
                printf("dir_metadata.offsets.items[0].util = %u (should be 0)\n",
                       (unsigned)(uintptr_t)dir_metadata.offsets.items[0].util);
                fflush(stdout);
@@ -4157,7 +4204,7 @@ static int record_conflicted_index_entries(struct merge_options *opt)
                                struct stat st;
 
                                if (!lstat(path, &st)) {
-                                       char *new_name = unique_path(&opt->priv->paths,
+                                       char *new_name = unique_path(opt,
                                                                     path,
                                                                     "cruft");
 
@@ -4165,7 +4212,6 @@ static int record_conflicted_index_entries(struct merge_options *opt)
                                                 _("Note: %s not up to date and in way of checking out conflicted version; old copy renamed to %s"),
                                                 path, new_name);
                                        errs |= rename(path, new_name);
-                                       free(new_name);
                                }
                                errs |= checkout_entry(ce, &state, NULL, NULL);
                        }
@@ -4255,6 +4301,9 @@ void merge_switch_to_result(struct merge_options *opt,
                struct string_list olist = STRING_LIST_INIT_NODUP;
                int i;
 
+               if (opt->record_conflict_msgs_as_headers)
+                       BUG("Either display conflict messages or record them as headers, not both");
+
                trace2_region_enter("merge", "display messages", opt->repo);
 
                /* Hack to pre-allocate olist to the desired size */
@@ -4356,6 +4405,9 @@ static void merge_start(struct merge_options *opt, struct merge_result *result)
        assert(opt->recursive_variant >= MERGE_VARIANT_NORMAL &&
               opt->recursive_variant <= MERGE_VARIANT_THEIRS);
 
+       if (opt->msg_header_prefix)
+               assert(opt->record_conflict_msgs_as_headers);
+
        /*
         * detect_renames, verbosity, buffer_output, and obuf are ignored
         * fields that were used by "recursive" rather than "ort" -- but
@@ -4556,6 +4608,7 @@ redo:
        trace2_region_leave("merge", "process_entries", opt->repo);
 
        /* Set return values */
+       result->path_messages = &opt->priv->output;
        result->tree = parse_tree_indirect(&working_tree_oid);
        /* existence of conflicted entries implies unclean */
        result->clean &= strmap_empty(&opt->priv->conflicted);
@@ -4575,7 +4628,7 @@ static void merge_ort_internal(struct merge_options *opt,
                               struct commit *h2,
                               struct merge_result *result)
 {
-       struct commit_list *iter;
+       struct commit *next;
        struct commit *merged_merge_bases;
        const char *ancestor_name;
        struct strbuf merge_base_abbrev = STRBUF_INIT;
@@ -4604,7 +4657,8 @@ static void merge_ort_internal(struct merge_options *opt,
                ancestor_name = merge_base_abbrev.buf;
        }
 
-       for (iter = merge_bases; iter; iter = iter->next) {
+       for (next = pop_commit(&merge_bases); next;
+            next = pop_commit(&merge_bases)) {
                const char *saved_b1, *saved_b2;
                struct commit *prev = merged_merge_bases;
 
@@ -4621,7 +4675,7 @@ static void merge_ort_internal(struct merge_options *opt,
                saved_b2 = opt->branch2;
                opt->branch1 = "Temporary merge branch 1";
                opt->branch2 = "Temporary merge branch 2";
-               merge_ort_internal(opt, NULL, prev, iter->item, result);
+               merge_ort_internal(opt, NULL, prev, next, result);
                if (result->clean < 0)
                        return;
                opt->branch1 = saved_b1;
@@ -4632,8 +4686,7 @@ static void merge_ort_internal(struct merge_options *opt,
                                                         result->tree,
                                                         "merged tree");
                commit_list_insert(prev, &merged_merge_bases->parents);
-               commit_list_insert(iter->item,
-                                  &merged_merge_bases->parents->next);
+               commit_list_insert(next, &merged_merge_bases->parents->next);
 
                clear_or_reinit_internal_opts(opt->priv, 1);
        }
index c011864ffeb115b43a26940a8f0b24d33c8e8182..fe599b8786891c74cbc5e911689f4a4d319152cd 100644 (file)
@@ -5,6 +5,7 @@
 
 struct commit;
 struct tree;
+struct strmap;
 
 struct merge_result {
        /*
@@ -23,6 +24,15 @@ struct merge_result {
         */
        struct tree *tree;
 
+       /*
+        * Special messages and conflict notices for various paths
+        *
+        * This is a map of pathnames to strbufs.  It contains various
+        * warning/conflict/notice messages (possibly multiple per path)
+        * that callers may want to use.
+        */
+       struct strmap *path_messages;
+
        /*
         * Additional metadata used by merge_switch_to_result() or future calls
         * to merge_incore_*().  Includes data needed to update the index (if
index d9457797dbb73bfed720ac9ca0b9bcf56575c62a..1ee6364e8b16b17295258667e70b77ea1f1fffa4 100644 (file)
@@ -1044,7 +1044,7 @@ static int merge_3way(struct merge_options *opt,
        mmfile_t orig, src1, src2;
        struct ll_merge_options ll_opts = {0};
        char *base, *name1, *name2;
-       int merge_status;
+       enum ll_merge_result merge_status;
 
        ll_opts.renormalize = opt->renormalize;
        ll_opts.extra_marker_size = extra_marker_size;
@@ -1090,6 +1090,9 @@ static int merge_3way(struct merge_options *opt,
        merge_status = ll_merge(result_buf, a->path, &orig, base,
                                &src1, name1, &src2, name2,
                                opt->repo->index, &ll_opts);
+       if (merge_status == LL_MERGE_BINARY_CONFLICT)
+               warning("Cannot merge binary files: %s (%s vs. %s)",
+                       a->path, name1, name2);
 
        free(base);
        free(name1);
@@ -1373,7 +1376,7 @@ static int merge_mode_and_contents(struct merge_options *opt,
 
                        if (!ret &&
                            write_object_file(result_buf.ptr, result_buf.size,
-                                             blob_type, &result->blob.oid))
+                                             OBJ_BLOB, &result->blob.oid))
                                ret = err(opt, _("Unable to add %s to database"),
                                          a->path);
 
@@ -3711,6 +3714,10 @@ static int merge_start(struct merge_options *opt, struct tree *head)
 
        assert(opt->priv == NULL);
 
+       /* Not supported; option specific to merge-ort */
+       assert(!opt->record_conflict_msgs_as_headers);
+       assert(!opt->msg_header_prefix);
+
        /* Sanity check on repo state; index must match head */
        if (repo_index_has_changes(opt->repo, head, &sb)) {
                err(opt, _("Your local changes to the following files would be overwritten by merge:\n  %s"),
index 0795a1d3ec1809ea42fd11c1e3ad35467050d286..b88000e3c25277d07d20b7ba29755b9670cd28ff 100644 (file)
@@ -46,6 +46,8 @@ struct merge_options {
        /* miscellaneous control options */
        const char *subtree_shift;
        unsigned renormalize : 1;
+       unsigned record_conflict_msgs_as_headers : 1;
+       const char *msg_header_prefix;
 
        /* internal fields used by the implementation */
        struct merge_options_internal *priv;
diff --git a/midx.c b/midx.c
index 837b46b2af5fd766b981964ca27be427225b7591..3db0e47735f600c936ec8a9566d5587228534481 100644 (file)
--- a/midx.c
+++ b/midx.c
@@ -33,6 +33,7 @@
 #define MIDX_CHUNKID_OIDLOOKUP 0x4f49444c /* "OIDL" */
 #define MIDX_CHUNKID_OBJECTOFFSETS 0x4f4f4646 /* "OOFF" */
 #define MIDX_CHUNKID_LARGEOFFSETS 0x4c4f4646 /* "LOFF" */
+#define MIDX_CHUNKID_REVINDEX 0x52494458 /* "RIDX" */
 #define MIDX_CHUNK_FANOUT_SIZE (sizeof(uint32_t) * 256)
 #define MIDX_CHUNK_OFFSET_WIDTH (2 * sizeof(uint32_t))
 #define MIDX_CHUNK_LARGE_OFFSET_WIDTH (sizeof(uint64_t))
@@ -161,6 +162,9 @@ struct multi_pack_index *load_multi_pack_index(const char *object_dir, int local
 
        pair_chunk(cf, MIDX_CHUNKID_LARGEOFFSETS, &m->chunk_large_offsets);
 
+       if (git_env_bool("GIT_TEST_MIDX_READ_RIDX", 1))
+               pair_chunk(cf, MIDX_CHUNKID_REVINDEX, &m->chunk_revindex);
+
        m->num_objects = ntohl(m->chunk_oid_fanout[255]);
 
        CALLOC_ARRAY(m->pack_names, m->num_packs);
@@ -833,6 +837,18 @@ static int write_midx_large_offsets(struct hashfile *f,
        return 0;
 }
 
+static int write_midx_revindex(struct hashfile *f,
+                              void *data)
+{
+       struct write_midx_context *ctx = data;
+       uint32_t i;
+
+       for (i = 0; i < ctx->entries_nr; i++)
+               hashwrite_be32(f, ctx->pack_order[i]);
+
+       return 0;
+}
+
 struct midx_pack_order_data {
        uint32_t nr;
        uint32_t pack;
@@ -1061,6 +1077,9 @@ static int write_midx_bitmap(char *midx_name, unsigned char *midx_hash,
        char *bitmap_name = xstrfmt("%s-%s.bitmap", midx_name, hash_to_hex(midx_hash));
        int ret;
 
+       if (!ctx->entries_nr)
+               BUG("cannot write a bitmap without any objects");
+
        if (flags & MIDX_WRITE_BITMAP_HASH_CACHE)
                options |= BITMAP_OPT_HASH_CACHE;
 
@@ -1113,17 +1132,26 @@ cleanup:
 static struct multi_pack_index *lookup_multi_pack_index(struct repository *r,
                                                        const char *object_dir)
 {
+       struct multi_pack_index *result = NULL;
        struct multi_pack_index *cur;
+       char *obj_dir_real = real_pathdup(object_dir, 1);
+       struct strbuf cur_path_real = STRBUF_INIT;
 
        /* Ensure the given object_dir is local, or a known alternate. */
-       find_odb(r, object_dir);
+       find_odb(r, obj_dir_real);
 
        for (cur = get_multi_pack_index(r); cur; cur = cur->next) {
-               if (!strcmp(object_dir, cur->object_dir))
-                       return cur;
+               strbuf_realpath(&cur_path_real, cur->object_dir, 1);
+               if (!strcmp(obj_dir_real, cur_path_real.buf)) {
+                       result = cur;
+                       goto cleanup;
+               }
        }
 
-       return NULL;
+cleanup:
+       free(obj_dir_real);
+       strbuf_release(&cur_path_real);
+       return result;
 }
 
 static int write_midx_internal(const char *object_dir,
@@ -1385,6 +1413,12 @@ static int write_midx_internal(const char *object_dir,
                goto cleanup;
        }
 
+       if (!ctx.entries_nr) {
+               if (flags & MIDX_WRITE_BITMAP)
+                       warning(_("refusing to write multi-pack .bitmap without any objects"));
+               flags &= ~(MIDX_WRITE_REV_INDEX | MIDX_WRITE_BITMAP);
+       }
+
        cf = init_chunkfile(f);
 
        add_chunk(cf, MIDX_CHUNKID_PACKNAMES, pack_name_concat_len,
@@ -1403,16 +1437,22 @@ static int write_midx_internal(const char *object_dir,
                        (size_t)ctx.num_large_offsets * MIDX_CHUNK_LARGE_OFFSET_WIDTH,
                        write_midx_large_offsets);
 
+       if (flags & (MIDX_WRITE_REV_INDEX | MIDX_WRITE_BITMAP)) {
+               ctx.pack_order = midx_pack_order(&ctx);
+               add_chunk(cf, MIDX_CHUNKID_REVINDEX,
+                         ctx.entries_nr * sizeof(uint32_t),
+                         write_midx_revindex);
+       }
+
        write_midx_header(f, get_num_chunks(cf), ctx.nr - dropped_packs);
        write_chunkfile(cf, &ctx);
 
-       finalize_hashfile(f, midx_hash, CSUM_FSYNC | CSUM_HASH_IN_STREAM);
+       finalize_hashfile(f, midx_hash, FSYNC_COMPONENT_PACK_METADATA,
+                         CSUM_FSYNC | CSUM_HASH_IN_STREAM);
        free_chunkfile(cf);
 
-       if (flags & (MIDX_WRITE_REV_INDEX | MIDX_WRITE_BITMAP))
-               ctx.pack_order = midx_pack_order(&ctx);
-
-       if (flags & MIDX_WRITE_REV_INDEX)
+       if (flags & MIDX_WRITE_REV_INDEX &&
+           git_env_bool("GIT_TEST_MIDX_WRITE_REV", 0))
                write_midx_reverse_index(midx_name.buf, midx_hash, &ctx);
        if (flags & MIDX_WRITE_BITMAP) {
                if (write_midx_bitmap(midx_name.buf, midx_hash, &ctx,
diff --git a/midx.h b/midx.h
index b7d79a515c63a73422755737d789b0c2febe22a9..22e8e53288ec226f7673d8a0f277961d5bb1d856 100644 (file)
--- a/midx.h
+++ b/midx.h
@@ -36,6 +36,7 @@ struct multi_pack_index {
        const unsigned char *chunk_oid_lookup;
        const unsigned char *chunk_object_offsets;
        const unsigned char *chunk_large_offsets;
+       const unsigned char *chunk_revindex;
 
        const char **pack_names;
        struct packed_git **packs;
index 2473314d686858493c6730e895e7106e44a462f9..9dfd251a8151d4205297b5c27064a01acf448f69 100644 (file)
@@ -92,7 +92,7 @@ int notes_cache_put(struct notes_cache *c, struct object_id *key_oid,
 {
        struct object_id value_oid;
 
-       if (write_object_file(data, size, "blob", &value_oid) < 0)
+       if (write_object_file(data, size, OBJ_BLOB, &value_oid) < 0)
                return -1;
        return add_note(&c->tree, key_oid, &value_oid, NULL);
 }
index b4a3a903e86f3fdc38064e5f16c63974d2a191e4..b4cc594a790965aca297fe87392a50b643e6fb41 100644 (file)
@@ -113,6 +113,7 @@ static struct notes_merge_pair *find_notes_merge_pair_pos(
 }
 
 static struct object_id uninitialized = {
+       .hash =
        "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" \
        "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
 };
@@ -175,7 +176,6 @@ static struct notes_merge_pair *diff_tree_remote(struct notes_merge_options *o,
                       oid_to_hex(&mp->remote));
        }
        diff_flush(&opt);
-       clear_pathspec(&opt.pathspec);
 
        *num_changes = len;
        return changes;
@@ -261,7 +261,6 @@ static void diff_tree_local(struct notes_merge_options *o,
                       oid_to_hex(&mp->local));
        }
        diff_flush(&opt);
-       clear_pathspec(&opt.pathspec);
 }
 
 static void check_notes_merge_worktree(struct notes_merge_options *o)
@@ -344,7 +343,7 @@ static int ll_merge_in_worktree(struct notes_merge_options *o,
 {
        mmbuffer_t result_buf;
        mmfile_t base, local, remote;
-       int status;
+       enum ll_merge_result status;
 
        read_mmblob(&base, &p->base);
        read_mmblob(&local, &p->local);
@@ -358,6 +357,9 @@ static int ll_merge_in_worktree(struct notes_merge_options *o,
        free(local.ptr);
        free(remote.ptr);
 
+       if (status == LL_MERGE_BINARY_CONFLICT)
+               warning("Cannot merge binary files: %s (%s vs. %s)",
+                       oid_to_hex(&p->obj), o->local_ref, o->remote_ref);
        if ((status < 0) || !result_buf.ptr)
                die("Failed to execute internal merge");
 
diff --git a/notes.c b/notes.c
index f87dac40684030a70566a618ee3dbcedd97bc641..7452e71cc8dd289c7ace9361a6c6e090b8b113f9 100644 (file)
--- a/notes.c
+++ b/notes.c
@@ -675,7 +675,7 @@ static int tree_write_stack_finish_subtree(struct tree_write_stack *tws)
                ret = tree_write_stack_finish_subtree(n);
                if (ret)
                        return ret;
-               ret = write_object_file(n->buf.buf, n->buf.len, tree_type, &s);
+               ret = write_object_file(n->buf.buf, n->buf.len, OBJ_TREE, &s);
                if (ret)
                        return ret;
                strbuf_release(&n->buf);
@@ -836,7 +836,7 @@ int combine_notes_concatenate(struct object_id *cur_oid,
        free(new_msg);
 
        /* create a new blob object from buf */
-       ret = write_object_file(buf, buf_len, blob_type, cur_oid);
+       ret = write_object_file(buf, buf_len, OBJ_BLOB, cur_oid);
        free(buf);
        return ret;
 }
@@ -916,7 +916,7 @@ int combine_notes_cat_sort_uniq(struct object_id *cur_oid,
                                 string_list_join_lines_helper, &buf))
                goto out;
 
-       ret = write_object_file(buf.buf, buf.len, blob_type, cur_oid);
+       ret = write_object_file(buf.buf, buf.len, OBJ_BLOB, cur_oid);
 
 out:
        strbuf_release(&buf);
@@ -1192,7 +1192,7 @@ int write_notes_tree(struct notes_tree *t, struct object_id *result)
        ret = for_each_note(t, flags, write_each_note, &cb_data) ||
              write_each_non_note_until(NULL, &cb_data) ||
              tree_write_stack_finish_subtree(&root) ||
-             write_object_file(root.buf.buf, root.buf.len, tree_type, result);
+             write_object_file(root.buf.buf, root.buf.len, OBJ_TREE, result);
        strbuf_release(&root.buf);
        return ret;
 }
index 8be57f48de738a7f61de8b18e10a41e2007ac045..b5d1d12b68a704a2934a339cab336a70df75b718 100644 (file)
@@ -167,49 +167,49 @@ static void git_hash_unknown_final_oid(struct object_id *oid, git_hash_ctx *ctx)
 
 const struct git_hash_algo hash_algos[GIT_HASH_NALGOS] = {
        {
-               NULL,
-               0x00000000,
-               0,
-               0,
-               0,
-               git_hash_unknown_init,
-               git_hash_unknown_clone,
-               git_hash_unknown_update,
-               git_hash_unknown_final,
-               git_hash_unknown_final_oid,
-               NULL,
-               NULL,
-               NULL,
+               .name = NULL,
+               .format_id = 0x00000000,
+               .rawsz = 0,
+               .hexsz = 0,
+               .blksz = 0,
+               .init_fn = git_hash_unknown_init,
+               .clone_fn = git_hash_unknown_clone,
+               .update_fn = git_hash_unknown_update,
+               .final_fn = git_hash_unknown_final,
+               .final_oid_fn = git_hash_unknown_final_oid,
+               .empty_tree = NULL,
+               .empty_blob = NULL,
+               .null_oid = NULL,
        },
        {
-               "sha1",
-               GIT_SHA1_FORMAT_ID,
-               GIT_SHA1_RAWSZ,
-               GIT_SHA1_HEXSZ,
-               GIT_SHA1_BLKSZ,
-               git_hash_sha1_init,
-               git_hash_sha1_clone,
-               git_hash_sha1_update,
-               git_hash_sha1_final,
-               git_hash_sha1_final_oid,
-               &empty_tree_oid,
-               &empty_blob_oid,
-               &null_oid_sha1,
+               .name = "sha1",
+               .format_id = GIT_SHA1_FORMAT_ID,
+               .rawsz = GIT_SHA1_RAWSZ,
+               .hexsz = GIT_SHA1_HEXSZ,
+               .blksz = GIT_SHA1_BLKSZ,
+               .init_fn = git_hash_sha1_init,
+               .clone_fn = git_hash_sha1_clone,
+               .update_fn = git_hash_sha1_update,
+               .final_fn = git_hash_sha1_final,
+               .final_oid_fn = git_hash_sha1_final_oid,
+               .empty_tree = &empty_tree_oid,
+               .empty_blob = &empty_blob_oid,
+               .null_oid = &null_oid_sha1,
        },
        {
-               "sha256",
-               GIT_SHA256_FORMAT_ID,
-               GIT_SHA256_RAWSZ,
-               GIT_SHA256_HEXSZ,
-               GIT_SHA256_BLKSZ,
-               git_hash_sha256_init,
-               git_hash_sha256_clone,
-               git_hash_sha256_update,
-               git_hash_sha256_final,
-               git_hash_sha256_final_oid,
-               &empty_tree_oid_sha256,
-               &empty_blob_oid_sha256,
-               &null_oid_sha256,
+               .name = "sha256",
+               .format_id = GIT_SHA256_FORMAT_ID,
+               .rawsz = GIT_SHA256_RAWSZ,
+               .hexsz = GIT_SHA256_HEXSZ,
+               .blksz = GIT_SHA256_BLKSZ,
+               .init_fn = git_hash_sha256_init,
+               .clone_fn = git_hash_sha256_clone,
+               .update_fn = git_hash_sha256_update,
+               .final_fn = git_hash_sha256_final,
+               .final_oid_fn = git_hash_sha256_final_oid,
+               .empty_tree = &empty_tree_oid_sha256,
+               .empty_blob = &empty_blob_oid_sha256,
+               .null_oid = &null_oid_sha256,
        }
 };
 
@@ -274,10 +274,11 @@ static struct cached_object {
 static int cached_object_nr, cached_object_alloc;
 
 static struct cached_object empty_tree = {
-       { EMPTY_TREE_SHA1_BIN_LITERAL },
-       OBJ_TREE,
-       "",
-       0
+       .oid = {
+               .hash = EMPTY_TREE_SHA1_BIN_LITERAL,
+       },
+       .type = OBJ_TREE,
+       .buf = "",
 };
 
 static struct cached_object *find_cached_object(const struct object_id *oid)
@@ -1049,35 +1050,50 @@ void *xmmap(void *start, size_t length,
        return ret;
 }
 
-/*
- * With an in-core object data in "map", rehash it to make sure the
- * object name actually matches "oid" to detect object corruption.
- * With "map" == NULL, try reading the object named with "oid" using
- * the streaming interface and rehash it to do the same.
- */
+static int format_object_header_literally(char *str, size_t size,
+                                         const char *type, size_t objsize)
+{
+       return xsnprintf(str, size, "%s %"PRIuMAX, type, (uintmax_t)objsize) + 1;
+}
+
+int format_object_header(char *str, size_t size, enum object_type type,
+                        size_t objsize)
+{
+       const char *name = type_name(type);
+
+       if (!name)
+               BUG("could not get a type name for 'enum object_type' value %d", type);
+
+       return format_object_header_literally(str, size, name, objsize);
+}
+
 int check_object_signature(struct repository *r, const struct object_id *oid,
-                          void *map, unsigned long size, const char *type,
-                          struct object_id *real_oidp)
+                          void *buf, unsigned long size,
+                          enum object_type type)
 {
-       struct object_id tmp;
-       struct object_id *real_oid = real_oidp ? real_oidp : &tmp;
+       struct object_id real_oid;
+
+       hash_object_file(r->hash_algo, buf, size, type, &real_oid);
+
+       return !oideq(oid, &real_oid) ? -1 : 0;
+}
+
+int stream_object_signature(struct repository *r, const struct object_id *oid)
+{
+       struct object_id real_oid;
+       unsigned long size;
        enum object_type obj_type;
        struct git_istream *st;
        git_hash_ctx c;
        char hdr[MAX_HEADER_LEN];
        int hdrlen;
 
-       if (map) {
-               hash_object_file(r->hash_algo, map, size, type, real_oid);
-               return !oideq(oid, real_oid) ? -1 : 0;
-       }
-
        st = open_istream(r, oid, &obj_type, &size, NULL);
        if (!st)
                return -1;
 
        /* Generate the header */
-       hdrlen = xsnprintf(hdr, sizeof(hdr), "%s %"PRIuMAX , type_name(obj_type), (uintmax_t)size) + 1;
+       hdrlen = format_object_header(hdr, sizeof(hdr), obj_type, size);
 
        /* Sha1.. */
        r->hash_algo->init_fn(&c);
@@ -1094,9 +1110,9 @@ int check_object_signature(struct repository *r, const struct object_id *oid,
                        break;
                r->hash_algo->update_fn(&c, buf, readlen);
        }
-       r->hash_algo->final_oid_fn(real_oid, &c);
+       r->hash_algo->final_oid_fn(&real_oid, &c);
        close_istream(st);
-       return !oideq(oid, real_oid) ? -1 : 0;
+       return !oideq(oid, &real_oid) ? -1 : 0;
 }
 
 int git_open_cloexec(const char *name, int flags)
@@ -1662,7 +1678,7 @@ int pretend_object_file(void *buf, unsigned long len, enum object_type type,
 {
        struct cached_object *co;
 
-       hash_object_file(the_hash_algo, buf, len, type_name(type), oid);
+       hash_object_file(the_hash_algo, buf, len, type, oid);
        if (has_object_file_with_flags(oid, OBJECT_INFO_QUICK | OBJECT_INFO_SKIP_FETCH_OBJECT) ||
            find_cached_object(oid))
                return 0;
@@ -1722,16 +1738,15 @@ void *read_object_file_extended(struct repository *r,
 
 void *read_object_with_reference(struct repository *r,
                                 const struct object_id *oid,
-                                const char *required_type_name,
+                                enum object_type required_type,
                                 unsigned long *size,
                                 struct object_id *actual_oid_return)
 {
-       enum object_type type, required_type;
+       enum object_type type;
        void *buffer;
        unsigned long isize;
        struct object_id actual_oid;
 
-       required_type = type_from_string(required_type_name);
        oidcpy(&actual_oid, oid);
        while (1) {
                int ref_length = -1;
@@ -1769,21 +1784,40 @@ void *read_object_with_reference(struct repository *r,
        }
 }
 
+static void hash_object_body(const struct git_hash_algo *algo, git_hash_ctx *c,
+                            const void *buf, unsigned long len,
+                            struct object_id *oid,
+                            char *hdr, int *hdrlen)
+{
+       algo->init_fn(c);
+       algo->update_fn(c, hdr, *hdrlen);
+       algo->update_fn(c, buf, len);
+       algo->final_oid_fn(oid, c);
+}
+
 static void write_object_file_prepare(const struct git_hash_algo *algo,
                                      const void *buf, unsigned long len,
-                                     const char *type, struct object_id *oid,
+                                     enum object_type type, struct object_id *oid,
                                      char *hdr, int *hdrlen)
 {
        git_hash_ctx c;
 
        /* Generate the header */
-       *hdrlen = xsnprintf(hdr, *hdrlen, "%s %"PRIuMAX , type, (uintmax_t)len)+1;
+       *hdrlen = format_object_header(hdr, *hdrlen, type, len);
 
        /* Sha1.. */
-       algo->init_fn(&c);
-       algo->update_fn(&c, hdr, *hdrlen);
-       algo->update_fn(&c, buf, len);
-       algo->final_oid_fn(oid, &c);
+       hash_object_body(algo, &c, buf, len, oid, hdr, hdrlen);
+}
+
+static void write_object_file_prepare_literally(const struct git_hash_algo *algo,
+                                     const void *buf, unsigned long len,
+                                     const char *type, struct object_id *oid,
+                                     char *hdr, int *hdrlen)
+{
+       git_hash_ctx c;
+
+       *hdrlen = format_object_header_literally(hdr, *hdrlen, type, len);
+       hash_object_body(algo, &c, buf, len, oid, hdr, hdrlen);
 }
 
 /*
@@ -1836,24 +1870,36 @@ static int write_buffer(int fd, const void *buf, size_t len)
        return 0;
 }
 
-int hash_object_file(const struct git_hash_algo *algo, const void *buf,
-                    unsigned long len, const char *type,
-                    struct object_id *oid)
+static void hash_object_file_literally(const struct git_hash_algo *algo,
+                                      const void *buf, unsigned long len,
+                                      const char *type, struct object_id *oid)
 {
        char hdr[MAX_HEADER_LEN];
        int hdrlen = sizeof(hdr);
-       write_object_file_prepare(algo, buf, len, type, oid, hdr, &hdrlen);
-       return 0;
+
+       write_object_file_prepare_literally(algo, buf, len, type, oid, hdr, &hdrlen);
+}
+
+void hash_object_file(const struct git_hash_algo *algo, const void *buf,
+                     unsigned long len, enum object_type type,
+                     struct object_id *oid)
+{
+       hash_object_file_literally(algo, buf, len, type_name(type), oid);
 }
 
 /* Finalize a file on disk, and close it. */
-static void close_loose_object(int fd)
+static void close_loose_object(int fd, const char *filename)
 {
-       if (!the_repository->objects->odb->will_destroy) {
-               if (fsync_object_files)
-                       fsync_or_die(fd, "loose object file");
-       }
+       if (the_repository->objects->odb->will_destroy)
+               goto out;
+
+       if (fsync_object_files > 0)
+               fsync_or_die(fd, filename);
+       else
+               fsync_component_or_die(FSYNC_COMPONENT_LOOSE_OBJECT, fd,
+                                      filename);
 
+out:
        if (close(fd) != 0)
                die_errno(_("error when closing loose object file"));
 }
@@ -1965,7 +2011,7 @@ static int write_loose_object(const struct object_id *oid, char *hdr,
                die(_("confused by unstable object source data for %s"),
                    oid_to_hex(oid));
 
-       close_loose_object(fd);
+       close_loose_object(fd, tmp_file.buf);
 
        if (mtime) {
                struct utimbuf utb;
@@ -1998,7 +2044,7 @@ static int freshen_packed_object(const struct object_id *oid)
 }
 
 int write_object_file_flags(const void *buf, unsigned long len,
-                           const char *type, struct object_id *oid,
+                           enum object_type type, struct object_id *oid,
                            unsigned flags)
 {
        char hdr[MAX_HEADER_LEN];
@@ -2014,9 +2060,9 @@ int write_object_file_flags(const void *buf, unsigned long len,
        return write_loose_object(oid, hdr, hdrlen, buf, len, 0, flags);
 }
 
-int hash_object_file_literally(const void *buf, unsigned long len,
-                              const char *type, struct object_id *oid,
-                              unsigned flags)
+int write_object_file_literally(const void *buf, unsigned long len,
+                               const char *type, struct object_id *oid,
+                               unsigned flags)
 {
        char *header;
        int hdrlen, status = 0;
@@ -2024,8 +2070,8 @@ int hash_object_file_literally(const void *buf, unsigned long len,
        /* type string, SP, %lu of the length plus NUL must fit this */
        hdrlen = strlen(type) + MAX_HEADER_LEN;
        header = xmalloc(hdrlen);
-       write_object_file_prepare(the_hash_algo, buf, len, type, oid, header,
-                                 &hdrlen);
+       write_object_file_prepare_literally(the_hash_algo, buf, len, type,
+                                           oid, header, &hdrlen);
 
        if (!(flags & HASH_WRITE_OBJECT))
                goto cleanup;
@@ -2052,7 +2098,7 @@ int force_object_loose(const struct object_id *oid, time_t mtime)
        buf = read_object(the_repository, oid, &type, &len);
        if (!buf)
                return error(_("cannot read object for %s"), oid_to_hex(oid));
-       hdrlen = xsnprintf(hdr, sizeof(hdr), "%s %"PRIuMAX , type_name(type), (uintmax_t)len) + 1;
+       hdrlen = format_object_header(hdr, sizeof(hdr), type, len);
        ret = write_loose_object(oid, hdr, hdrlen, buf, len, mtime, 0);
        free(buf);
 
@@ -2118,7 +2164,8 @@ static int index_mem(struct index_state *istate,
                     enum object_type type,
                     const char *path, unsigned flags)
 {
-       int ret, re_allocated = 0;
+       int ret = 0;
+       int re_allocated = 0;
        int write_object = flags & HASH_WRITE_OBJECT;
 
        if (!type)
@@ -2145,10 +2192,9 @@ static int index_mem(struct index_state *istate,
        }
 
        if (write_object)
-               ret = write_object_file(buf, size, type_name(type), oid);
+               ret = write_object_file(buf, size, type, oid);
        else
-               ret = hash_object_file(the_hash_algo, buf, size,
-                                      type_name(type), oid);
+               hash_object_file(the_hash_algo, buf, size, type, oid);
        if (re_allocated)
                free(buf);
        return ret;
@@ -2160,7 +2206,7 @@ static int index_stream_convert_blob(struct index_state *istate,
                                     const char *path,
                                     unsigned flags)
 {
-       int ret;
+       int ret = 0;
        const int write_object = flags & HASH_WRITE_OBJECT;
        struct strbuf sbuf = STRBUF_INIT;
 
@@ -2171,11 +2217,11 @@ static int index_stream_convert_blob(struct index_state *istate,
                                 get_conv_flags(flags));
 
        if (write_object)
-               ret = write_object_file(sbuf.buf, sbuf.len, type_name(OBJ_BLOB),
+               ret = write_object_file(sbuf.buf, sbuf.len, OBJ_BLOB,
                                        oid);
        else
-               ret = hash_object_file(the_hash_algo, sbuf.buf, sbuf.len,
-                                      type_name(OBJ_BLOB), oid);
+               hash_object_file(the_hash_algo, sbuf.buf, sbuf.len, OBJ_BLOB,
+                                oid);
        strbuf_release(&sbuf);
        return ret;
 }
@@ -2294,8 +2340,8 @@ int index_path(struct index_state *istate, struct object_id *oid,
                        return error_errno("readlink(\"%s\")", path);
                if (!(flags & HASH_WRITE_OBJECT))
                        hash_object_file(the_hash_algo, sb.buf, sb.len,
-                                        blob_type, oid);
-               else if (write_object_file(sb.buf, sb.len, blob_type, oid))
+                                        OBJ_BLOB, oid);
+               else if (write_object_file(sb.buf, sb.len, OBJ_BLOB, oid))
                        rc = error(_("%s: failed to insert into database"), path);
                strbuf_release(&sb);
                break;
@@ -2577,8 +2623,12 @@ int read_loose_object(const char *path,
                goto out;
        }
 
-       if (unpack_loose_header(&stream, map, mapsize, hdr, sizeof(hdr),
-                               NULL) < 0) {
+       switch (unpack_loose_header(&stream, map, mapsize, hdr, sizeof(hdr),
+                                   NULL)) {
+       case ULHR_OK:
+               break;
+       case ULHR_BAD:
+       case ULHR_TOO_LONG:
                error(_("unable to unpack header of %s"), path);
                goto out;
        }
@@ -2599,9 +2649,10 @@ int read_loose_object(const char *path,
                        git_inflate_end(&stream);
                        goto out;
                }
-               if (check_object_signature(the_repository, expected_oid,
+               hash_object_file_literally(the_repository->hash_algo,
                                           *contents, *size,
-                                          oi->type_name->buf, real_oid))
+                                          oi->type_name->buf, real_oid);
+               if (!oideq(expected_oid, real_oid))
                        goto out;
        }
 
index fdff4601b2c70cc7e4585096534382ddc5024990..f0e327f91f57ac9dabaec840cd1eb77a4b4293ec 100644 (file)
@@ -15,6 +15,7 @@
 #include "submodule.h"
 #include "midx.h"
 #include "commit-reach.h"
+#include "date.h"
 
 static int get_oid_oneline(struct repository *r, const char *, struct object_id *, struct commit_list *);
 
@@ -351,35 +352,118 @@ static int init_object_disambiguation(struct repository *r,
        return 0;
 }
 
+struct ambiguous_output {
+       const struct disambiguate_state *ds;
+       struct strbuf advice;
+       struct strbuf sb;
+};
+
 static int show_ambiguous_object(const struct object_id *oid, void *data)
 {
-       const struct disambiguate_state *ds = data;
-       struct strbuf desc = STRBUF_INIT;
+       struct ambiguous_output *state = data;
+       const struct disambiguate_state *ds = state->ds;
+       struct strbuf *advice = &state->advice;
+       struct strbuf *sb = &state->sb;
        int type;
+       const char *hash;
 
        if (ds->fn && !ds->fn(ds->repo, oid, ds->cb_data))
                return 0;
 
+       hash = repo_find_unique_abbrev(ds->repo, oid, DEFAULT_ABBREV);
        type = oid_object_info(ds->repo, oid, NULL);
+
+       if (type < 0) {
+               /*
+                * TRANSLATORS: This is a line of ambiguous object
+                * output shown when we cannot look up or parse the
+                * object in question. E.g. "deadbeef [bad object]".
+                */
+               strbuf_addf(sb, _("%s [bad object]"), hash);
+               goto out;
+       }
+
+       assert(type == OBJ_TREE || type == OBJ_COMMIT ||
+              type == OBJ_BLOB || type == OBJ_TAG);
+
        if (type == OBJ_COMMIT) {
+               struct strbuf date = STRBUF_INIT;
+               struct strbuf msg = STRBUF_INIT;
                struct commit *commit = lookup_commit(ds->repo, oid);
+
                if (commit) {
                        struct pretty_print_context pp = {0};
                        pp.date_mode.type = DATE_SHORT;
-                       format_commit_message(commit, " %ad - %s", &desc, &pp);
+                       format_commit_message(commit, "%ad", &date, &pp);
+                       format_commit_message(commit, "%s", &msg, &pp);
                }
+
+               /*
+                * TRANSLATORS: This is a line of ambiguous commit
+                * object output. E.g.:
+                *
+                *    "deadbeef commit 2021-01-01 - Some Commit Message"
+                */
+               strbuf_addf(sb, _("%s commit %s - %s"), hash, date.buf,
+                           msg.buf);
+
+               strbuf_release(&date);
+               strbuf_release(&msg);
        } else if (type == OBJ_TAG) {
                struct tag *tag = lookup_tag(ds->repo, oid);
-               if (!parse_tag(tag) && tag->tag)
-                       strbuf_addf(&desc, " %s", tag->tag);
+
+               if (!parse_tag(tag) && tag->tag) {
+                       /*
+                        * TRANSLATORS: This is a line of ambiguous
+                        * tag object output. E.g.:
+                        *
+                        *    "deadbeef tag 2022-01-01 - Some Tag Message"
+                        *
+                        * The second argument is the YYYY-MM-DD found
+                        * in the tag.
+                        *
+                        * The third argument is the "tag" string
+                        * from object.c.
+                        */
+                       strbuf_addf(sb, _("%s tag %s - %s"), hash,
+                                   show_date(tag->date, 0, DATE_MODE(SHORT)),
+                                   tag->tag);
+               } else {
+                       /*
+                        * TRANSLATORS: This is a line of ambiguous
+                        * tag object output where we couldn't parse
+                        * the tag itself. E.g.:
+                        *
+                        *    "deadbeef [bad tag, could not parse it]"
+                        */
+                       strbuf_addf(sb, _("%s [bad tag, could not parse it]"),
+                                   hash);
+               }
+       } else if (type == OBJ_TREE) {
+               /*
+                * TRANSLATORS: This is a line of ambiguous <type>
+                * object output. E.g. "deadbeef tree".
+                */
+               strbuf_addf(sb, _("%s tree"), hash);
+       } else if (type == OBJ_BLOB) {
+               /*
+                * TRANSLATORS: This is a line of ambiguous <type>
+                * object output. E.g. "deadbeef blob".
+                */
+               strbuf_addf(sb, _("%s blob"), hash);
        }
 
-       advise("  %s %s%s",
-              repo_find_unique_abbrev(ds->repo, oid, DEFAULT_ABBREV),
-              type_name(type) ? type_name(type) : "unknown type",
-              desc.buf);
 
-       strbuf_release(&desc);
+out:
+       /*
+        * TRANSLATORS: This is line item of ambiguous object output
+        * from describe_ambiguous_object() above. For RTL languages
+        * you'll probably want to swap the "%s" and leading " " space
+        * around.
+        */
+       strbuf_addf(advice, _("  %s\n"), sb->buf);
+
+       strbuf_reset(sb);
        return 0;
 }
 
@@ -476,6 +560,11 @@ static enum get_oid_result get_short_oid(struct repository *r,
 
        if (!quietly && (status == SHORT_NAME_AMBIGUOUS)) {
                struct oid_array collect = OID_ARRAY_INIT;
+               struct ambiguous_output out = {
+                       .ds = &ds,
+                       .sb = STRBUF_INIT,
+                       .advice = STRBUF_INIT,
+               };
 
                error(_("short object ID %s is ambiguous"), ds.hex_pfx);
 
@@ -488,13 +577,22 @@ static enum get_oid_result get_short_oid(struct repository *r,
                if (!ds.ambiguous)
                        ds.fn = NULL;
 
-               advise(_("The candidates are:"));
                repo_for_each_abbrev(r, ds.hex_pfx, collect_ambiguous, &collect);
                sort_ambiguous_oid_array(r, &collect);
 
-               if (oid_array_for_each(&collect, show_ambiguous_object, &ds))
+               if (oid_array_for_each(&collect, show_ambiguous_object, &out))
                        BUG("show_ambiguous_object shouldn't return non-zero");
+
+               /*
+                * TRANSLATORS: The argument is the list of ambiguous
+                * objects composed in show_ambiguous_object(). See
+                * its "TRANSLATORS" comments for details.
+                */
+               advise(_("The candidates are:\n%s"), out.advice.buf);
+
                oid_array_clear(&collect);
+               strbuf_release(&out.advice);
+               strbuf_release(&out.sb);
        }
 
        return status;
@@ -1795,13 +1893,13 @@ static enum get_oid_result get_oid_with_context_1(struct repository *repo,
        const char *cp;
        int only_to_die = flags & GET_OID_ONLY_TO_DIE;
 
-       if (only_to_die)
-               flags |= GET_OID_QUIETLY;
-
        memset(oc, 0, sizeof(*oc));
        oc->mode = S_IFINVALID;
        strbuf_init(&oc->symlink_path, 0);
        ret = get_oid_1(repo, name, namelen, oid, flags);
+       if (!ret && flags & GET_OID_REQUIRE_PATH)
+               die(_("<object>:<path> required, only <object> '%s' given"),
+                   name);
        if (!ret)
                return ret;
        /*
@@ -1932,7 +2030,7 @@ void maybe_die_on_misspelt_object_name(struct repository *r,
 {
        struct object_context oc;
        struct object_id oid;
-       get_oid_with_context_1(r, name, GET_OID_ONLY_TO_DIE,
+       get_oid_with_context_1(r, name, GET_OID_ONLY_TO_DIE | GET_OID_QUIETLY,
                               prefix, &oid, &oc);
 }
 
index 6f89482df030cb28c91a7d2620903473e661370f..bd2322ed8ce3368d8b06ab570f2f1f4c2217d757 100644 (file)
@@ -245,22 +245,22 @@ static inline void *repo_read_object_file(struct repository *r,
 /* Read and unpack an object file into memory, write memory to an object file */
 int oid_object_info(struct repository *r, const struct object_id *, unsigned long *);
 
-int hash_object_file(const struct git_hash_algo *algo, const void *buf,
-                    unsigned long len, const char *type,
-                    struct object_id *oid);
+void hash_object_file(const struct git_hash_algo *algo, const void *buf,
+                     unsigned long len, enum object_type type,
+                     struct object_id *oid);
 
 int write_object_file_flags(const void *buf, unsigned long len,
-                           const char *type, struct object_id *oid,
+                           enum object_type type, struct object_id *oid,
                            unsigned flags);
 static inline int write_object_file(const void *buf, unsigned long len,
-                                   const char *type, struct object_id *oid)
+                                   enum object_type type, struct object_id *oid)
 {
        return write_object_file_flags(buf, len, type, oid, 0);
 }
 
-int hash_object_file_literally(const void *buf, unsigned long len,
-                              const char *type, struct object_id *oid,
-                              unsigned flags);
+int write_object_file_literally(const void *buf, unsigned long len,
+                               const char *type, struct object_id *oid,
+                               unsigned flags);
 
 /*
  * Add an object file to the in-memory object store, without writing it
@@ -331,6 +331,14 @@ int repo_has_object_file_with_flags(struct repository *r,
  */
 int has_loose_object_nonlocal(const struct object_id *);
 
+/**
+ * format_object_header() is a thin wrapper around s xsnprintf() that
+ * writes the initial "<type> <obj-len>" part of the loose object
+ * header. It returns the size that snprintf() returns + 1.
+ */
+int format_object_header(char *str, size_t size, enum object_type type,
+                        size_t objsize);
+
 void assert_oid_type(const struct object_id *oid, enum object_type expect);
 
 /*
index c37501fc1202d17bf1002d39b06afed864c11be3..588b8156f1d634a5cb9c25038961ca9a0d28d255 100644 (file)
--- a/object.c
+++ b/object.c
@@ -279,7 +279,7 @@ struct object *parse_object(struct repository *r, const struct object_id *oid)
        if ((obj && obj->type == OBJ_BLOB && repo_has_object_file(r, oid)) ||
            (!obj && repo_has_object_file(r, oid) &&
             oid_object_info(r, oid, NULL) == OBJ_BLOB)) {
-               if (check_object_signature(r, repl, NULL, 0, NULL, NULL) < 0) {
+               if (stream_object_signature(r, repl) < 0) {
                        error(_("hash mismatch %s"), oid_to_hex(oid));
                        return NULL;
                }
@@ -289,8 +289,7 @@ struct object *parse_object(struct repository *r, const struct object_id *oid)
 
        buffer = repo_read_object_file(r, oid, &type, &size);
        if (buffer) {
-               if (check_object_signature(r, repl, buffer, size,
-                                          type_name(type), NULL) < 0) {
+               if (check_object_signature(r, repl, buffer, size, type) < 0) {
                        free(buffer);
                        error(_("hash mismatch %s"), oid_to_hex(repl));
                        return NULL;
index cb556ab7753d5ddb01bc9421bbf490c0e684769b..a2219464c2b31043692fb9c0d224fdf0b1c2c253 100644 (file)
--- a/object.h
+++ b/object.h
@@ -75,7 +75,7 @@ struct object_array {
  * builtin/fsck.c:           0--3
  * builtin/gc.c:             0
  * builtin/index-pack.c:                                     2021
- * builtin/reflog.c:                   10--12
+ * reflog.c:                           10--12
  * builtin/show-branch.c:    0-------------------------------------------26
  * builtin/unpack-objects.c:                                 2021
  */
index 9c55c1531e1f55c28ecb4767de17e815968d35f6..cf681547f2e626b324fd5bcc9c33fbec8f449d81 100644 (file)
@@ -575,15 +575,15 @@ void bitmap_writer_select_commits(struct commit **indexed_commits,
 
        QSORT(indexed_commits, indexed_commits_nr, date_compare);
 
-       if (writer.show_progress)
-               writer.progress = start_progress("Selecting bitmap commits", 0);
-
        if (indexed_commits_nr < 100) {
                for (i = 0; i < indexed_commits_nr; ++i)
                        push_bitmapped_commit(indexed_commits[i]);
                return;
        }
 
+       if (writer.show_progress)
+               writer.progress = start_progress("Selecting bitmap commits", 0);
+
        for (;;) {
                struct commit *chosen = NULL;
 
@@ -719,7 +719,8 @@ void bitmap_writer_finish(struct pack_idx_entry **index,
        if (options & BITMAP_OPT_HASH_CACHE)
                write_hash_cache(f, index, index_nr);
 
-       finalize_hashfile(f, NULL, CSUM_HASH_IN_STREAM | CSUM_FSYNC | CSUM_CLOSE);
+       finalize_hashfile(f, NULL, FSYNC_COMPONENT_PACK_METADATA,
+                         CSUM_HASH_IN_STREAM | CSUM_FSYNC | CSUM_CLOSE);
 
        if (adjust_shared_perm(tmp_file.buf))
                die_errno("unable to make temporary bitmap file readable");
index f772d3cb7f7c181a9b703a9535f9ec55dfd60513..97909d48da381f81622d36fb5889fd5d7013b04a 100644 (file)
@@ -358,7 +358,9 @@ static int open_midx_bitmap_1(struct bitmap_index *bitmap_git,
 cleanup:
        munmap(bitmap_git->map, bitmap_git->map_size);
        bitmap_git->map_size = 0;
+       bitmap_git->map_pos = 0;
        bitmap_git->map = NULL;
+       bitmap_git->midx = NULL;
        return -1;
 }
 
@@ -405,6 +407,8 @@ static int open_pack_bitmap_1(struct bitmap_index *bitmap_git, struct packed_git
                munmap(bitmap_git->map, bitmap_git->map_size);
                bitmap_git->map = NULL;
                bitmap_git->map_size = 0;
+               bitmap_git->map_pos = 0;
+               bitmap_git->pack = NULL;
                return -1;
        }
 
@@ -735,8 +739,7 @@ static int add_commit_to_bitmap(struct bitmap_index *bitmap_git,
 static struct bitmap *find_objects(struct bitmap_index *bitmap_git,
                                   struct rev_info *revs,
                                   struct object_list *roots,
-                                  struct bitmap *seen,
-                                  struct list_objects_filter_options *filter)
+                                  struct bitmap *seen)
 {
        struct bitmap *base = NULL;
        int needs_walk = 0;
@@ -819,9 +822,9 @@ static struct bitmap *find_objects(struct bitmap_index *bitmap_git,
                show_data.bitmap_git = bitmap_git;
                show_data.base = base;
 
-               traverse_commit_list_filtered(filter, revs,
-                                             show_commit, show_object,
-                                             &show_data, NULL);
+               traverse_commit_list(revs,
+                                    show_commit, show_object,
+                                    &show_data);
 
                revs->include_check = NULL;
                revs->include_check_obj = NULL;
@@ -1215,7 +1218,6 @@ static int can_filter_bitmap(struct list_objects_filter_options *filter)
 }
 
 struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
-                                        struct list_objects_filter_options *filter,
                                         int filter_provided_objects)
 {
        unsigned int i;
@@ -1236,7 +1238,7 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
        if (revs->prune)
                return NULL;
 
-       if (!can_filter_bitmap(filter))
+       if (!can_filter_bitmap(&revs->filter))
                return NULL;
 
        /* try to open a bitmapped pack, but don't parse it yet
@@ -1293,8 +1295,7 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
 
        if (haves) {
                revs->ignore_missing_links = 1;
-               haves_bitmap = find_objects(bitmap_git, revs, haves, NULL,
-                                           filter);
+               haves_bitmap = find_objects(bitmap_git, revs, haves, NULL);
                reset_revision_walk();
                revs->ignore_missing_links = 0;
 
@@ -1302,8 +1303,7 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
                        BUG("failed to perform bitmap walk");
        }
 
-       wants_bitmap = find_objects(bitmap_git, revs, wants, haves_bitmap,
-                                   filter);
+       wants_bitmap = find_objects(bitmap_git, revs, wants, haves_bitmap);
 
        if (!wants_bitmap)
                BUG("failed to perform bitmap walk");
@@ -1311,8 +1311,10 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
        if (haves_bitmap)
                bitmap_and_not(wants_bitmap, haves_bitmap);
 
-       filter_bitmap(bitmap_git, (filter && filter_provided_objects) ? NULL : wants,
-                     wants_bitmap, filter);
+       filter_bitmap(bitmap_git,
+                     (revs->filter.choice && filter_provided_objects) ? NULL : wants,
+                     wants_bitmap,
+                     &revs->filter);
 
        bitmap_git->result = wants_bitmap;
        bitmap_git->haves = haves_bitmap;
index 19a63fa1abc6921df7470b84aa7275c0e7863fac..3d3ddd77345002f3075047b1f0bf545a4e229157 100644 (file)
@@ -10,7 +10,6 @@
 struct commit;
 struct repository;
 struct rev_info;
-struct list_objects_filter_options;
 
 static const char BITMAP_IDX_SIGNATURE[] = {'B', 'I', 'T', 'M'};
 
@@ -54,7 +53,6 @@ void test_bitmap_walk(struct rev_info *revs);
 int test_bitmap_commits(struct repository *r);
 int test_bitmap_hashes(struct repository *r);
 struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
-                                        struct list_objects_filter_options *filter,
                                         int filter_provided_objects);
 uint32_t midx_preferred_pack(struct bitmap_index *bitmap_git);
 int reuse_partial_packfile_from_bitmap(struct bitmap_index *,
index 3f418e3a6afb8ec7a8b401dcca89d5550813748f..bfb593ba7261a18a8283604f4e1cfdd10eb978f6 100644 (file)
@@ -127,7 +127,7 @@ static int verify_packfile(struct repository *r,
 
                if (type == OBJ_BLOB && big_file_threshold <= size) {
                        /*
-                        * Let check_object_signature() check it with
+                        * Let stream_object_signature() check it with
                         * the streaming interface; no point slurping
                         * the data in-core only to discard.
                         */
@@ -142,8 +142,11 @@ static int verify_packfile(struct repository *r,
                        err = error("cannot unpack %s from %s at offset %"PRIuMAX"",
                                    oid_to_hex(&oid), p->pack_name,
                                    (uintmax_t)entries[i].offset);
-               else if (check_object_signature(r, &oid, data, size,
-                                               type_name(type), NULL))
+               else if (data && check_object_signature(r, &oid, data, size,
+                                                       type) < 0)
+                       err = error("packed %s from %s is corrupt",
+                                   oid_to_hex(&oid), p->pack_name);
+               else if (!data && stream_object_signature(r, &oid) < 0)
                        err = error("packed %s from %s is corrupt",
                                    oid_to_hex(&oid), p->pack_name);
                else if (fn) {
index 70d0fbafcbf954e33b58e6fb79dd173282f59eea..08dc1601679f1011f7ff38b7a721dbb4dd116c85 100644 (file)
@@ -298,9 +298,29 @@ int load_midx_revindex(struct multi_pack_index *m)
 {
        struct strbuf revindex_name = STRBUF_INIT;
        int ret;
+
        if (m->revindex_data)
                return 0;
 
+       if (m->chunk_revindex) {
+               /*
+                * If the MIDX `m` has a `RIDX` chunk, then use its contents for
+                * the reverse index instead of trying to load a separate `.rev`
+                * file.
+                *
+                * Note that we do *not* set `m->revindex_map` here, since we do
+                * not want to accidentally call munmap() in the middle of the
+                * MIDX.
+                */
+               trace2_data_string("load_midx_revindex", the_repository,
+                                  "source", "midx");
+               m->revindex_data = (const uint32_t *)m->chunk_revindex;
+               return 0;
+       }
+
+       trace2_data_string("load_midx_revindex", the_repository,
+                          "source", "rev");
+
        get_midx_rev_filename(&revindex_name, m);
 
        ret = load_revindex_from_disk(revindex_name.buf,
index a5846f3a346dd032c11cf047af8fc65d57c726e0..51812cb1299222cbcbc976ef2b8304f7e25bfbff 100644 (file)
@@ -159,9 +159,9 @@ const char *write_idx_file(const char *index_name, struct pack_idx_entry **objec
        }
 
        hashwrite(f, sha1, the_hash_algo->rawsz);
-       finalize_hashfile(f, NULL, CSUM_HASH_IN_STREAM | CSUM_CLOSE |
-                                   ((opts->flags & WRITE_IDX_VERIFY)
-                                   ? 0 : CSUM_FSYNC));
+       finalize_hashfile(f, NULL, FSYNC_COMPONENT_PACK_METADATA,
+                         CSUM_HASH_IN_STREAM | CSUM_CLOSE |
+                         ((opts->flags & WRITE_IDX_VERIFY) ? 0 : CSUM_FSYNC));
        return index_name;
 }
 
@@ -281,8 +281,9 @@ const char *write_rev_file_order(const char *rev_name,
        if (rev_name && adjust_shared_perm(rev_name) < 0)
                die(_("failed to make %s readable"), rev_name);
 
-       finalize_hashfile(f, NULL, CSUM_HASH_IN_STREAM | CSUM_CLOSE |
-                                   ((flags & WRITE_IDX_VERIFY) ? 0 : CSUM_FSYNC));
+       finalize_hashfile(f, NULL, FSYNC_COMPONENT_PACK_METADATA,
+                         CSUM_HASH_IN_STREAM | CSUM_CLOSE |
+                         ((flags & WRITE_IDX_VERIFY) ? 0 : CSUM_FSYNC));
 
        return rev_name;
 }
@@ -390,7 +391,7 @@ void fixup_pack_header_footer(int pack_fd,
                the_hash_algo->final_fn(partial_pack_hash, &old_hash_ctx);
        the_hash_algo->final_fn(new_pack_hash, &new_hash_ctx);
        write_or_die(pack_fd, new_pack_hash, the_hash_algo->rawsz);
-       fsync_or_die(pack_fd, pack_name);
+       fsync_component_or_die(FSYNC_COMPONENT_PACK, pack_fd, pack_name);
 }
 
 char *index_pack_lockfile(int ip_out, int *is_well_formed)
index 8dd7e7bad404321856c43cfcbe9a7fbab4fd9ebe..31a3d0ee1bf851792c21bc3a9ef52fc33d9e5637 100644 (file)
@@ -39,8 +39,8 @@ void get_parallel_checkout_configs(int *num_workers, int *threshold)
 
        if (env_workers && *env_workers) {
                if (strtol_i(env_workers, 10, num_workers)) {
-                       die("invalid value for GIT_TEST_CHECKOUT_WORKERS: '%s'",
-                           env_workers);
+                       die(_("invalid value for '%s': '%s'"),
+                           "GIT_TEST_CHECKOUT_WORKERS", env_workers);
                }
                if (*num_workers < 1)
                        *num_workers = online_cpus();
index a8283037be966596184862aa358bff6fd37194f3..6e57744fd22eeab78a71b915e9d0be3becd8e152 100644 (file)
@@ -1079,3 +1079,50 @@ void NORETURN usage_msg_opt(const char *msg,
        die_message("%s\n", msg); /* The extra \n is intentional */
        usage_with_options(usagestr, options);
 }
+
+void NORETURN usage_msg_optf(const char * const fmt,
+                            const char * const *usagestr,
+                            const struct option *options, ...)
+{
+       struct strbuf msg = STRBUF_INIT;
+       va_list ap;
+       va_start(ap, options);
+       strbuf_vaddf(&msg, fmt, ap);
+       va_end(ap);
+
+       usage_msg_opt(msg.buf, usagestr, options);
+}
+
+void die_for_incompatible_opt4(int opt1, const char *opt1_name,
+                              int opt2, const char *opt2_name,
+                              int opt3, const char *opt3_name,
+                              int opt4, const char *opt4_name)
+{
+       int count = 0;
+       const char *options[4];
+
+       if (opt1)
+               options[count++] = opt1_name;
+       if (opt2)
+               options[count++] = opt2_name;
+       if (opt3)
+               options[count++] = opt3_name;
+       if (opt4)
+               options[count++] = opt4_name;
+       switch (count) {
+       case 4:
+               die(_("options '%s', '%s', '%s', and '%s' cannot be used together"),
+                   opt1_name, opt2_name, opt3_name, opt4_name);
+               break;
+       case 3:
+               die(_("options '%s', '%s', and '%s' cannot be used together"),
+                   options[0], options[1], options[2]);
+               break;
+       case 2:
+               die(_("options '%s' and '%s' cannot be used together"),
+                   options[0], options[1]);
+               break;
+       default:
+               break;
+       }
+}
index e22846d3b7be06fd2af2f81532633d6d773f0bab..685fccac137fc23884f0e816d53b7be549506441 100644 (file)
@@ -85,6 +85,11 @@ typedef enum parse_opt_result parse_opt_ll_cb(struct parse_opt_ctx_t *ctx,
  *   token to explain the kind of argument this option wants. Does not
  *   begin in capital letter, and does not end with a full stop.
  *   Should be wrapped by N_() for translation.
+ *   Is automatically enclosed in brackets when printed, unless it
+ *   contains any of the following characters: ()<>[]|
+ *   E.g. "name" is shown as "<name>" to indicate that a name value
+ *   needs to be supplied, not the literal string "name", but
+ *   "<start>,<end>" and "(this|that)" are printed verbatim.
  *
  * `help`::
  *   the short help associated to what the option does.
@@ -225,6 +230,32 @@ NORETURN void usage_msg_opt(const char *msg,
                            const char * const *usagestr,
                            const struct option *options);
 
+/**
+ * usage_msg_optf() is like usage_msg_opt() except that the first
+ * argument is a format string, and optional format arguments follow
+ * after the 3rd option.
+ */
+__attribute__((format (printf,1,4)))
+void NORETURN usage_msg_optf(const char *fmt,
+                            const char * const *usagestr,
+                            const struct option *options, ...);
+
+void die_for_incompatible_opt4(int opt1, const char *opt1_name,
+                              int opt2, const char *opt2_name,
+                              int opt3, const char *opt3_name,
+                              int opt4, const char *opt4_name);
+
+
+static inline void die_for_incompatible_opt3(int opt1, const char *opt1_name,
+                                            int opt2, const char *opt2_name,
+                                            int opt3, const char *opt3_name)
+{
+       die_for_incompatible_opt4(opt1, opt1_name,
+                                 opt2, opt2_name,
+                                 opt3, opt3_name,
+                                 0, "");
+}
+
 /*
  * Use these assertions for callbacks that expect to be called with NONEG and
  * NOARG respectively, and do not otherwise handle the "unset" and "arg"
diff --git a/path.h b/path.h
index b68691a86b80417a82e5124aef37b9c8a9a02c95..0a59c85a62eda03acd290fa564b7e197288e26ad 100644 (file)
--- a/path.h
+++ b/path.h
@@ -169,20 +169,6 @@ void report_linked_checkout_garbage(void);
                return r->cached_paths.var; \
        }
 
-struct path_cache {
-       const char *squash_msg;
-       const char *merge_msg;
-       const char *merge_rr;
-       const char *merge_mode;
-       const char *merge_head;
-       const char *merge_autostash;
-       const char *auto_merge;
-       const char *fetch_head;
-       const char *shallow;
-};
-
-#define PATH_CACHE_INIT { 0 }
-
 const char *git_path_squash_msg(struct repository *r);
 const char *git_path_merge_msg(struct repository *r);
 const char *git_path_merge_rr(struct repository *r);
index 090a7df63fc004ecff6fc3425c1fb13006fb499d..080cdc2a21d32da831524a088edf0635357c78df 100644 (file)
@@ -1686,6 +1686,16 @@ sub _setup_git_cmd_env {
 # by searching for it at proper places.
 sub _execv_git_cmd { exec('git', @_); }
 
+sub _is_sig {
+       my ($v, $n) = @_;
+
+       # We are avoiding a "use POSIX qw(SIGPIPE SIGABRT)" in the hot
+       # Git.pm codepath.
+       require POSIX;
+       no strict 'refs';
+       $v == *{"POSIX::$n"}->();
+}
+
 # Close pipe to a subprocess.
 sub _cmd_close {
        my $ctx = shift @_;
@@ -1698,9 +1708,16 @@ sub _cmd_close {
                } elsif ($? >> 8) {
                        # The caller should pepper this.
                        throw Git::Error::Command($ctx, $? >> 8);
+               } elsif ($? & 127 && _is_sig($? & 127, "SIGPIPE")) {
+                       # we might e.g. closed a live stream; the command
+                       # dying of SIGPIPE would drive us here.
+               } elsif ($? & 127 && _is_sig($? & 127, "SIGABRT")) {
+                       die sprintf('BUG?: got SIGABRT ($? = %d, $? & 127 = %d) when closing pipe',
+                                   $?, $? & 127);
+               } elsif ($? & 127) {
+                       die sprintf('got signal ($? = %d, $? & 127 = %d) when closing pipe',
+                                   $?, $? & 127);
                }
-               # else we might e.g. closed a live stream; the command
-               # dying of SIGPIPE would drive us here.
        }
 }
 
index 3dd51fc15996dd35ce007eb485c0753adfab70b0..2e407267c8fc9f0b3fefe131ad5f8c5eb0d73a07 100644 (file)
--- a/po/TEAMS
+++ b/po/TEAMS
@@ -51,8 +51,8 @@ Repository:   https://github.com/Arusekk/git-po
 Leader:                Arusekk <arek_koz@o2.pl>
 
 Language:      pt_PT (Portuguese - Portugal)
-Repository:    https://github.com/git-l10n-pt-PT/git-po/
-Leader:                Daniel Santos <daniel@brilhante.top>
+Repository:    https://codeberg.org/git-pt/Git-PO-pt_PT/
+Leader:                Daniel Santos <dacs.git@brilhante.top>
 
 Language:      ru (Russian)
 Repository:    https://github.com/DJm00n/git-po-ru/
@@ -73,7 +73,7 @@ Leader:               Trần Ngọc Quân <vnwildman AT gmail.com>
 Members:       Nguyễn Thái Ngọc Duy <pclouds AT gmail.com>
 
 Language:      zh_CN (Simplified Chinese)
-Repository:    https://github.com/fangyi-zhou/git/
+Repository:    https://github.com/fangyi-zhou/git-po/
 Leader:                Fangyi Zhou <me AT fangyi.io>
 Members:       Ray Chen <oldsharp AT gmail.com>
                依云 <lilydjwg AT gmail.com>
index afcffad4743ccbc3b43bc5b9f482d3582034e1e8..524330a561ba5c2ec156e54b917061df63497675 100644 (file)
--- a/po/ca.po
+++ b/po/ca.po
@@ -24,6 +24,7 @@
 #   hook             |  lligam
 #   hunk             |  tros
 #   not supported    |  no està admès
+#   pull             |  baixar
 #   push             |  pujar
 #   repository       |  repositori
 #   setting          |  paràmetre
 #   squash           |  «squash»
 #   trailer          |  «trailer»
 #   unstage          |  «unstage»
+#
+# Vegeu també https://git.github.io/htmldocs/gitglossary.html
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: Git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2022-01-17 08:31+0800\n"
-"PO-Revision-Date: 2022-01-23 19:00-0600\n"
+"POT-Creation-Date: 2022-04-06 14:40+0800\n"
+"PO-Revision-Date: 2022-04-13 19:00-0600\n"
 "Last-Translator: Jordi Mas i Hernàndez <jmas@softcatala.org>\n"
 "Language-Team: Catalan\n"
 "Language: ca\n"
@@ -71,213 +75,212 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Poedit 2.3.1\n"
 
-#: add-interactive.c:380
+#: add-interactive.c:382
 #, c-format
 msgid "Huh (%s)?"
 msgstr "Perdó (%s)?"
 
-#: add-interactive.c:533 add-interactive.c:834 reset.c:65 sequencer.c:3509
-#: sequencer.c:3974 sequencer.c:4136 builtin/rebase.c:1233
-#: builtin/rebase.c:1642
+#: add-interactive.c:535 add-interactive.c:836 reset.c:136 sequencer.c:3505
+#: sequencer.c:3970 sequencer.c:4127 builtin/rebase.c:1261
+#: builtin/rebase.c:1671
 msgid "could not read index"
 msgstr "no s'ha pogut llegir l'índex"
 
-#: add-interactive.c:588 git-add--interactive.perl:269
+#: add-interactive.c:590 git-add--interactive.perl:269
 #: git-add--interactive.perl:294
 msgid "binary"
 msgstr "binari"
 
-#: add-interactive.c:646 git-add--interactive.perl:278
+#: add-interactive.c:648 git-add--interactive.perl:278
 #: git-add--interactive.perl:332
 msgid "nothing"
 msgstr "res"
 
-#: add-interactive.c:647 git-add--interactive.perl:314
+#: add-interactive.c:649 git-add--interactive.perl:314
 #: git-add--interactive.perl:329
 msgid "unchanged"
 msgstr "sense canvis"
 
-#: add-interactive.c:684 git-add--interactive.perl:641
+#: add-interactive.c:686 git-add--interactive.perl:641
 msgid "Update"
 msgstr "Actualitza"
 
-#: add-interactive.c:701 add-interactive.c:889
+#: add-interactive.c:703 add-interactive.c:891
 #, c-format
 msgid "could not stage '%s'"
 msgstr "no s'ha pogut fer «stage» «%s»"
 
-#: add-interactive.c:707 add-interactive.c:896 reset.c:89 sequencer.c:3713
+#: add-interactive.c:709 add-interactive.c:898 reset.c:160 sequencer.c:3709
 msgid "could not write index"
 msgstr "no s'ha pogut escriure l'índex"
 
-#: add-interactive.c:710 git-add--interactive.perl:626
+#: add-interactive.c:712 git-add--interactive.perl:626
 #, c-format, perl-format
 msgid "updated %d path\n"
 msgid_plural "updated %d paths\n"
 msgstr[0] "actualitzat %d camí\n"
 msgstr[1] "actualitzats %d camins\n"
 
-#: add-interactive.c:728 git-add--interactive.perl:676
+#: add-interactive.c:730 git-add--interactive.perl:676
 #, c-format, perl-format
 msgid "note: %s is untracked now.\n"
 msgstr "nota: %s està ara sense seguiment.\n"
 
-#: add-interactive.c:733 apply.c:4151 builtin/checkout.c:306
+#: add-interactive.c:735 apply.c:4133 builtin/checkout.c:311
 #: builtin/reset.c:167
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "make_cache_entry ha fallat per al camí «%s»"
 
-#: add-interactive.c:763 git-add--interactive.perl:653
+#: add-interactive.c:765 git-add--interactive.perl:653
 msgid "Revert"
 msgstr "Reverteix"
 
-#: add-interactive.c:779
+#: add-interactive.c:781
 msgid "Could not parse HEAD^{tree}"
 msgstr "No s'ha pogut analitzar HEAD^{tree}"
 
-#: add-interactive.c:817 git-add--interactive.perl:629
+#: add-interactive.c:819 git-add--interactive.perl:629
 #, c-format, perl-format
 msgid "reverted %d path\n"
 msgid_plural "reverted %d paths\n"
 msgstr[0] "revertit %d camí\n"
 msgstr[1] "revertits %d camins\n"
 
-#: add-interactive.c:868 git-add--interactive.perl:693
+#: add-interactive.c:870 git-add--interactive.perl:693
 #, c-format
 msgid "No untracked files.\n"
 msgstr "Sense fitxers no seguits.\n"
 
-#: add-interactive.c:872 git-add--interactive.perl:687
+#: add-interactive.c:874 git-add--interactive.perl:687
 msgid "Add untracked"
 msgstr "Afegeix sense seguiment"
 
-#: add-interactive.c:899 git-add--interactive.perl:623
+#: add-interactive.c:901 git-add--interactive.perl:623
 #, c-format, perl-format
 msgid "added %d path\n"
 msgid_plural "added %d paths\n"
 msgstr[0] "afegit %d camí\n"
 msgstr[1] "afegits %d camins\n"
 
-#: add-interactive.c:929
+#: add-interactive.c:931
 #, c-format
 msgid "ignoring unmerged: %s"
 msgstr "s'està ignorant allò no fusionat: %s"
 
-#: add-interactive.c:941 add-patch.c:1752 git-add--interactive.perl:1371
+#: add-interactive.c:943 add-patch.c:1758 git-add--interactive.perl:1371
 #, c-format
 msgid "Only binary files changed.\n"
-msgstr "Només s'han canviat els fitxers binaris.\n"
+msgstr "Només han canviat fitxers binaris.\n"
 
-#: add-interactive.c:943 add-patch.c:1750 git-add--interactive.perl:1373
+#: add-interactive.c:945 add-patch.c:1756 git-add--interactive.perl:1373
 #, c-format
 msgid "No changes.\n"
 msgstr "Sense canvis.\n"
 
-#: add-interactive.c:947 git-add--interactive.perl:1381
+#: add-interactive.c:949 git-add--interactive.perl:1381
 msgid "Patch update"
 msgstr "Actualització del pedaç"
 
-#: add-interactive.c:986 git-add--interactive.perl:1794
+#: add-interactive.c:988 git-add--interactive.perl:1794
 msgid "Review diff"
 msgstr "Reviseu les diferències"
 
-#: add-interactive.c:1014
+#: add-interactive.c:1016
 msgid "show paths with changes"
 msgstr "mostra els camins amb canvis"
 
-#: add-interactive.c:1016
+#: add-interactive.c:1018
 msgid "add working tree state to the staged set of changes"
 msgstr "afegeix l'estat de l'arbre de treball al conjunt de canvis «staged»"
 
-#: add-interactive.c:1018
+#: add-interactive.c:1020
 msgid "revert staged set of changes back to the HEAD version"
 msgstr "reverteix el conjunt de canvis «staged» a la versió HEAD"
 
-#: add-interactive.c:1020
+#: add-interactive.c:1022
 msgid "pick hunks and update selectively"
 msgstr "selecciona els trossos i actualitza selectivament"
 
-#: add-interactive.c:1022
+#: add-interactive.c:1024
 msgid "view diff between HEAD and index"
 msgstr "visualitza les diferències entre HEAD i l'índex"
 
-#: add-interactive.c:1024
+#: add-interactive.c:1026
 msgid "add contents of untracked files to the staged set of changes"
 msgstr "afegeix contingut de fitxers no seguits al conjunt de canvis «staged»"
 
-#: add-interactive.c:1032 add-interactive.c:1081
+#: add-interactive.c:1034 add-interactive.c:1083
 msgid "Prompt help:"
 msgstr "Mostra ajuda:"
 
-#: add-interactive.c:1034
+#: add-interactive.c:1036
 msgid "select a single item"
 msgstr "seleccioneu un únic ítem"
 
-#: add-interactive.c:1036
+#: add-interactive.c:1038
 msgid "select a range of items"
 msgstr "seleccioneu un rang d'ítems"
 
-#: add-interactive.c:1038
+#: add-interactive.c:1040
 msgid "select multiple ranges"
 msgstr "seleccioneu rangs múltiples"
 
-#: add-interactive.c:1040 add-interactive.c:1085
+#: add-interactive.c:1042 add-interactive.c:1087
 msgid "select item based on unique prefix"
 msgstr "seleccioneu un ítem basant-se en un prefix únic"
 
-#: add-interactive.c:1042
+#: add-interactive.c:1044
 msgid "unselect specified items"
 msgstr "desselecciona els ítems especificats"
 
-#: add-interactive.c:1044
+#: add-interactive.c:1046
 msgid "choose all items"
 msgstr "trieu tots els ítems"
 
-#: add-interactive.c:1046
+#: add-interactive.c:1048
 msgid "(empty) finish selecting"
 msgstr "(buit) finalitza la selecció"
 
-#: add-interactive.c:1083
+#: add-interactive.c:1085
 msgid "select a numbered item"
 msgstr "seleccioneu un ítem numerat"
 
-#: add-interactive.c:1087
+#: add-interactive.c:1089
 msgid "(empty) select nothing"
 msgstr "(buit) no seleccionis res"
 
-#: add-interactive.c:1095 builtin/clean.c:839 git-add--interactive.perl:1898
+#: add-interactive.c:1097 builtin/clean.c:839 git-add--interactive.perl:1898
 msgid "*** Commands ***"
 msgstr "*** Ordres ***"
 
-#: add-interactive.c:1096 builtin/clean.c:840 git-add--interactive.perl:1895
+#: add-interactive.c:1098 builtin/clean.c:840 git-add--interactive.perl:1895
 msgid "What now"
 msgstr "I ara què"
 
-#: add-interactive.c:1148 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "staged"
 msgstr "staged"
 
-#: add-interactive.c:1148 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "unstaged"
 msgstr "unstaged"
 
-#: add-interactive.c:1148 apply.c:5020 apply.c:5023 builtin/am.c:2367
-#: builtin/am.c:2370 builtin/bugreport.c:107 builtin/clone.c:128
-#: builtin/fetch.c:153 builtin/merge.c:287 builtin/pull.c:194
-#: builtin/submodule--helper.c:404 builtin/submodule--helper.c:1858
-#: builtin/submodule--helper.c:1861 builtin/submodule--helper.c:2504
-#: builtin/submodule--helper.c:2507 builtin/submodule--helper.c:2574
-#: builtin/submodule--helper.c:2579 builtin/submodule--helper.c:2812
+#: add-interactive.c:1150 apply.c:5002 apply.c:5005 builtin/am.c:2370
+#: builtin/am.c:2373 builtin/bugreport.c:107 builtin/clone.c:132
+#: builtin/fetch.c:154 builtin/merge.c:287 builtin/pull.c:194
+#: builtin/submodule--helper.c:412 builtin/submodule--helper.c:1872
+#: builtin/submodule--helper.c:1875 builtin/submodule--helper.c:2709
+#: builtin/submodule--helper.c:2712 builtin/submodule--helper.c:2891
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "camí"
 
-#: add-interactive.c:1155
+#: add-interactive.c:1157
 msgid "could not refresh index"
 msgstr "no s'ha pogut actualitzar l'índex"
 
-#: add-interactive.c:1169 builtin/clean.c:804 git-add--interactive.perl:1805
+#: add-interactive.c:1171 builtin/clean.c:804 git-add--interactive.perl:1805
 #, c-format
 msgid "Bye.\n"
 msgstr "Adeu.\n"
@@ -433,8 +436,8 @@ msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be marked for"
 " applying."
 msgstr ""
-"Si el pedaç s'aplica netament, el tros editat es marcarà immediatament per a "
-"aplicar-lo."
+"Si el pedaç s'aplica netament, el tros editat es marcarà immediatament per a"
+" aplicar-lo."
 
 #: add-patch.c:111
 msgid ""
@@ -595,24 +598,24 @@ msgstr "no s'ha pogut analitzar la capçalera del tros «%.*s»"
 msgid "could not parse colored hunk header '%.*s'"
 msgstr "no s'ha pogut analitzar la capçalera del tros acolorida «%.*s»"
 
-#: add-patch.c:420
+#: add-patch.c:431
 msgid "could not parse diff"
 msgstr "no s'ha pogut analitzar el diff"
 
-#: add-patch.c:439
+#: add-patch.c:450
 msgid "could not parse colored diff"
 msgstr "no s'ha pogut analitzar el diff acolorit"
 
-#: add-patch.c:453
+#: add-patch.c:464
 #, c-format
 msgid "failed to run '%s'"
 msgstr "no s'ha pogut executar «%s»"
 
-#: add-patch.c:612
+#: add-patch.c:618
 msgid "mismatched output from interactive.diffFilter"
 msgstr "sortida no coincident des d'interactive.diffFilter"
 
-#: add-patch.c:613
+#: add-patch.c:619
 msgid ""
 "Your filter must maintain a one-to-one correspondence\n"
 "between its input and output lines."
@@ -620,7 +623,7 @@ msgstr ""
 "El filtre ha de mantenir una correspondència d'un a un\n"
 "entre les línies d'entrada i sortida."
 
-#: add-patch.c:791
+#: add-patch.c:797
 #, c-format
 msgid ""
 "expected context line #%d in\n"
@@ -629,7 +632,7 @@ msgstr ""
 "s'esperava la línia amb contingut #%d a\n"
 "%.*s"
 
-#: add-patch.c:806
+#: add-patch.c:812
 #, c-format
 msgid ""
 "hunks do not overlap:\n"
@@ -642,12 +645,12 @@ msgstr ""
 "\tno acaben amb:\n"
 "%.*s"
 
-#: add-patch.c:1082 git-add--interactive.perl:1115
+#: add-patch.c:1088 git-add--interactive.perl:1115
 msgid "Manual hunk edit mode -- see bottom for a quick guide.\n"
 msgstr ""
-"Mode d'edició de trossos manual - vegeu més avall per una guia ràpida.\n"
+"Mode d'edició de trossos manual - vegeu més avall per una guia ràpida.\n"
 
-#: add-patch.c:1086
+#: add-patch.c:1092
 #, c-format
 msgid ""
 "---\n"
@@ -661,7 +664,7 @@ msgstr ""
 "Les línies que comencin per %c s'eliminaran.\n"
 
 #. TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
-#: add-patch.c:1100 git-add--interactive.perl:1129
+#: add-patch.c:1106 git-add--interactive.perl:1129
 msgid ""
 "If it does not apply cleanly, you will be given an opportunity to\n"
 "edit again.  If all lines of the hunk are removed, then the edit is\n"
@@ -671,11 +674,11 @@ msgstr ""
 "de nou. Si s'eliminen totes les línies del tros, llavors l'edició s'avorta\n"
 "i el tros es deixa sense cap canvi.\n"
 
-#: add-patch.c:1133
+#: add-patch.c:1139
 msgid "could not parse hunk header"
 msgstr "no s'ha pogut analitzar la capçalera del tros"
 
-#: add-patch.c:1178
+#: add-patch.c:1184
 msgid "'git apply --cached' failed"
 msgstr "«git apply --cached» ha fallat"
 
@@ -690,7 +693,7 @@ msgstr "«git apply --cached» ha fallat"
 #. Consider translating (saying "no" discards!) as
 #. (saying "n" for "no" discards!) if the translation
 #. of the word "no" does not start with n.
-#: add-patch.c:1247 git-add--interactive.perl:1244
+#: add-patch.c:1253 git-add--interactive.perl:1244
 msgid ""
 "Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]?"
 " "
@@ -698,19 +701,19 @@ msgstr ""
 "El tros editat no s'aplica. Editeu-lo de nou (si responeu «no» es "
 "descartarà) [y/n]? "
 
-#: add-patch.c:1290
+#: add-patch.c:1296
 msgid "The selected hunks do not apply to the index!"
 msgstr "Els trossos seleccionats no s'apliquen a l'índex!"
 
-#: add-patch.c:1291 git-add--interactive.perl:1348
+#: add-patch.c:1297 git-add--interactive.perl:1348
 msgid "Apply them to the worktree anyway? "
 msgstr "Voleu aplicar-los igualment a l'arbre de treball? "
 
-#: add-patch.c:1298 git-add--interactive.perl:1351
+#: add-patch.c:1304 git-add--interactive.perl:1351
 msgid "Nothing was applied.\n"
 msgstr "No s'ha aplicat res.\n"
 
-#: add-patch.c:1355
+#: add-patch.c:1361
 msgid ""
 "j - leave this hunk undecided, see next undecided hunk\n"
 "J - leave this hunk undecided, see next hunk\n"
@@ -732,73 +735,73 @@ msgstr ""
 "e - edita manualment el tros actual\n"
 "? - mostra l'ajuda\n"
 
-#: add-patch.c:1517 add-patch.c:1527
+#: add-patch.c:1523 add-patch.c:1533
 msgid "No previous hunk"
 msgstr "Sense tros previ"
 
-#: add-patch.c:1522 add-patch.c:1532
+#: add-patch.c:1528 add-patch.c:1538
 msgid "No next hunk"
 msgstr "No hi ha tros següent"
 
-#: add-patch.c:1538
+#: add-patch.c:1544
 msgid "No other hunks to goto"
 msgstr "No hi ha altres trossos on anar-hi"
 
-#: add-patch.c:1549 git-add--interactive.perl:1608
+#: add-patch.c:1555 git-add--interactive.perl:1608
 msgid "go to which hunk (<ret> to see more)? "
 msgstr "ves a quin tros (<ret> per a veure'n més)? "
 
-#: add-patch.c:1550 git-add--interactive.perl:1610
+#: add-patch.c:1556 git-add--interactive.perl:1610
 msgid "go to which hunk? "
 msgstr "ves a quin tros? "
 
-#: add-patch.c:1561
+#: add-patch.c:1567
 #, c-format
 msgid "Invalid number: '%s'"
 msgstr "Número no vàlid: «%s»"
 
-#: add-patch.c:1566
+#: add-patch.c:1572
 #, c-format
 msgid "Sorry, only %d hunk available."
 msgid_plural "Sorry, only %d hunks available."
 msgstr[0] "Només %d tros disponible."
 msgstr[1] "Només %d trossos disponibles."
 
-#: add-patch.c:1575
+#: add-patch.c:1581
 msgid "No other hunks to search"
 msgstr "No hi ha cap altre tros a cercar"
 
-#: add-patch.c:1581 git-add--interactive.perl:1663
+#: add-patch.c:1587 git-add--interactive.perl:1663
 msgid "search for regex? "
 msgstr "cerca per expressió regular? "
 
-#: add-patch.c:1596
+#: add-patch.c:1602
 #, c-format
 msgid "Malformed search regexp %s: %s"
 msgstr "Expressió regular de cerca mal formada %s: %s"
 
-#: add-patch.c:1613
+#: add-patch.c:1619
 msgid "No hunk matches the given pattern"
 msgstr "No hi ha trossos que coincideixin amb el patró donat"
 
-#: add-patch.c:1620
+#: add-patch.c:1626
 msgid "Sorry, cannot split this hunk"
 msgstr "No es pot dividir aquest tros"
 
-#: add-patch.c:1624
+#: add-patch.c:1630
 #, c-format
 msgid "Split into %d hunks."
 msgstr "Divideix en %d trossos."
 
-#: add-patch.c:1628
+#: add-patch.c:1634
 msgid "Sorry, cannot edit this hunk"
 msgstr "No es pot editar aquest tros"
 
-#: add-patch.c:1680
+#: add-patch.c:1686
 msgid "'git apply' failed"
 msgstr "«git apply» ha fallat"
 
-#: advice.c:78
+#: advice.c:81
 #, c-format
 msgid ""
 "\n"
@@ -807,66 +810,66 @@ msgstr ""
 "\n"
 "Desactiva aquest missatge amb «git config advice.%s false»"
 
-#: advice.c:94
+#: advice.c:97
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%sconsell: %.*s%s\n"
 
-#: advice.c:178
+#: advice.c:181
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr "Fer «cherry pick» no és possible perquè teniu fitxers sense fusionar."
 
-#: advice.c:180
+#: advice.c:183
 msgid "Committing is not possible because you have unmerged files."
 msgstr "Cometre no és possible perquè teniu fitxers sense fusionar."
 
-#: advice.c:182
+#: advice.c:185
 msgid "Merging is not possible because you have unmerged files."
 msgstr "Fusionar no és possible perquè teniu fitxers sense fusionar."
 
-#: advice.c:184
+#: advice.c:187
 msgid "Pulling is not possible because you have unmerged files."
 msgstr "Baixar no és possible perquè teniu fitxers sense fusionar."
 
-#: advice.c:186
+#: advice.c:189
 msgid "Reverting is not possible because you have unmerged files."
 msgstr "Revertir no és possible perquè teniu fitxers sense fusionar."
 
-#: advice.c:188
+#: advice.c:191
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr "No és possible %s perquè teniu fitxers sense fusionar."
 
-#: advice.c:196
+#: advice.c:199
 msgid ""
 "Fix them up in the work tree, and then use 'git add/rm <file>'\n"
 "as appropriate to mark resolution and make a commit."
 msgstr ""
 "Arregleu-los en l'arbre de treball, i després useu\n"
-"«git add/rm <fitxer>» segons sigui apropiat per a marcar la\n"
-"resolució i feu una comissió."
+"«git add/rm <fitxer>» segons sigui apropiat per a\n"
+"marcar la resolució i feu una comissió."
 
-#: advice.c:204
+#: advice.c:207
 msgid "Exiting because of an unresolved conflict."
 msgstr "S'està sortint a causa d'un conflicte no resolt."
 
-#: advice.c:209 builtin/merge.c:1382
+#: advice.c:212 builtin/merge.c:1388
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "No heu conclòs la vostra fusió (MERGE_HEAD existeix)."
 
-#: advice.c:211
+#: advice.c:214
 msgid "Please, commit your changes before merging."
 msgstr "Cometeu els vostres canvis abans de fusionar."
 
-#: advice.c:212
+#: advice.c:215
 msgid "Exiting because of unfinished merge."
 msgstr "S'està sortint a causa d'una fusió no terminada."
 
-#: advice.c:217
+#: advice.c:220
 msgid "Not possible to fast-forward, aborting."
 msgstr "No és possible avançar ràpidament, s'està avortant."
 
-#: advice.c:227
+#: advice.c:230
 #, c-format
 msgid ""
 "The following paths and/or pathspecs matched paths that exist\n"
@@ -877,7 +880,7 @@ msgstr ""
 "amb camins que existeixen fora de la vostra definició de\n"
 "«sparse-checkout», així que no serà actualitzaran en l'índex:\n"
 
-#: advice.c:234
+#: advice.c:237
 msgid ""
 "If you intend to update such entries, try one of the following:\n"
 "* Use the --sparse option.\n"
@@ -887,7 +890,7 @@ msgstr ""
 "* Utilitzeu l'opció --sparse.\n"
 "* Inhabiliteu o modifiqueu les regles de dispersió."
 
-#: advice.c:242
+#: advice.c:245
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -944,86 +947,89 @@ msgstr "opció d'espai en blanc «%s» no reconeguda"
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "opció ignora l'espai en blanc «%s» no reconeguda"
 
-#: apply.c:136 archive.c:584 range-diff.c:559 revision.c:2303 revision.c:2307
-#: revision.c:2316 revision.c:2321 revision.c:2527 revision.c:2870
-#: revision.c:2874 revision.c:2880 revision.c:2883 revision.c:2885
-#: builtin/add.c:510 builtin/add.c:512 builtin/add.c:529 builtin/add.c:541
-#: builtin/branch.c:727 builtin/checkout.c:467 builtin/checkout.c:470
-#: builtin/checkout.c:1644 builtin/checkout.c:1754 builtin/checkout.c:1757
-#: builtin/clone.c:906 builtin/commit.c:358 builtin/commit.c:361
-#: builtin/commit.c:1196 builtin/describe.c:593 builtin/diff-tree.c:155
-#: builtin/difftool.c:733 builtin/fast-export.c:1245 builtin/fetch.c:2038
-#: builtin/fetch.c:2043 builtin/index-pack.c:1852 builtin/init-db.c:560
-#: builtin/log.c:1946 builtin/log.c:1948 builtin/ls-files.c:778
-#: builtin/merge.c:1403 builtin/merge.c:1405 builtin/pack-objects.c:4073
-#: builtin/push.c:592 builtin/push.c:630 builtin/push.c:636 builtin/push.c:641
-#: builtin/rebase.c:1193 builtin/rebase.c:1195 builtin/rebase.c:1199
-#: builtin/repack.c:684 builtin/repack.c:715 builtin/reset.c:426
-#: builtin/reset.c:462 builtin/rev-list.c:541 builtin/show-branch.c:710
-#: builtin/stash.c:1707 builtin/stash.c:1710 builtin/submodule--helper.c:1316
-#: builtin/submodule--helper.c:2975 builtin/tag.c:526 builtin/tag.c:572
-#: builtin/worktree.c:702
+#: apply.c:138 archive.c:584 parse-options.c:1122 range-diff.c:555
+#: revision.c:2314 revision.c:2318 revision.c:2327 revision.c:2332
+#: revision.c:2560 revision.c:2895 revision.c:2899 revision.c:2907
+#: revision.c:2910 revision.c:2912 builtin/add.c:507 builtin/add.c:509
+#: builtin/add.c:515 builtin/add.c:527 builtin/branch.c:755
+#: builtin/checkout.c:472 builtin/checkout.c:475 builtin/checkout.c:1663
+#: builtin/checkout.c:1773 builtin/checkout.c:1776 builtin/clone.c:921
+#: builtin/commit.c:359 builtin/commit.c:362 builtin/commit.c:1200
+#: builtin/commit.c:1256 builtin/commit.c:1273 builtin/describe.c:593
+#: builtin/diff-tree.c:155 builtin/difftool.c:733 builtin/fast-export.c:1245
+#: builtin/fetch.c:2141 builtin/fetch.c:2162 builtin/fetch.c:2167
+#: builtin/help.c:602 builtin/index-pack.c:1858 builtin/init-db.c:560
+#: builtin/log.c:1968 builtin/log.c:1970 builtin/ls-files.c:778
+#: builtin/merge-base.c:163 builtin/merge-base.c:169 builtin/merge.c:1409
+#: builtin/merge.c:1411 builtin/pack-objects.c:4098 builtin/push.c:592
+#: builtin/push.c:630 builtin/push.c:636 builtin/push.c:641
+#: builtin/rebase.c:1221 builtin/rebase.c:1223 builtin/rebase.c:1227
+#: builtin/repack.c:688 builtin/repack.c:719 builtin/reset.c:433
+#: builtin/reset.c:469 builtin/rev-list.c:537 builtin/show-branch.c:711
+#: builtin/stash.c:1696 builtin/stash.c:1699 builtin/submodule--helper.c:1328
+#: builtin/submodule--helper.c:3054 builtin/tag.c:527 builtin/tag.c:573
+#: builtin/worktree.c:779
 #, c-format
 msgid "options '%s' and '%s' cannot be used together"
 msgstr "les opcions «%s» i «%s» no es poden usar juntes"
 
-#: apply.c:139 apply.c:150 apply.c:153
+#: apply.c:141 apply.c:152 apply.c:155
 #, c-format
 msgid "'%s' outside a repository"
 msgstr "«%s» fora d'un repositori"
 
-#: apply.c:800
+#: apply.c:807
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr "No es pot preparar l'expressió regular de marca de temps %s"
 
-#: apply.c:809
+#: apply.c:816
 #, c-format
 msgid "regexec returned %d for input: %s"
-msgstr "regexec ha retornat %d per l'entrada: %s"
+msgstr "regexec ha retornat %d per l'entrada: %s"
 
-#: apply.c:883
+#: apply.c:890
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr "no s'ha pogut trobar el nom de fitxer en el pedaç a la línia %d"
 
-#: apply.c:921
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr ""
 "git apply: git-diff incorrecte - s'esperava /dev/null, s'ha rebut %s en la "
 "línia %d"
 
-#: apply.c:927
+#: apply.c:934
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr ""
 "git apply: git-diff incorrecte - nom de fitxer nou inconsistent en la línia "
 "%d"
 
-#: apply.c:928
+#: apply.c:935
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr ""
 "git apply: git-diff incorrecte - nom de fitxer antic inconsistent en la "
 "línia %d"
 
-#: apply.c:933
+#: apply.c:940
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr "git apply: git-diff incorrecte - s'esperava /dev/null en la línia %d"
 
-#: apply.c:962
+#: apply.c:969
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "mode no vàlid en la línia %d: %s"
 
-#: apply.c:1281
+#: apply.c:1288
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr "línies de capçalera %d i %d inconsistents"
 
-#: apply.c:1371
+#: apply.c:1378
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname"
@@ -1038,93 +1044,93 @@ msgstr[1] ""
 "a la capçalera de git diff li manca informació de nom de fitxer en eliminar "
 "%d components de nom de camí inicial (línia %d)"
 
-#: apply.c:1384
+#: apply.c:1391
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr ""
 "a la capçalera de git diff li manca informació de nom de fitxer (línia %d)"
 
-#: apply.c:1480
+#: apply.c:1487
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr "recompte: línia inesperada: %.*s"
 
-#: apply.c:1549
+#: apply.c:1556
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr "fragment de pedaç sense capçalera a la línia %d: %.*s"
 
-#: apply.c:1752
+#: apply.c:1759
 msgid "new file depends on old contents"
 msgstr "el fitxer nou depèn dels continguts antics"
 
-#: apply.c:1754
+#: apply.c:1761
 msgid "deleted file still has contents"
 msgstr "el fitxer suprimit encara té continguts"
 
-#: apply.c:1788
+#: apply.c:1795
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "pedaç malmès a la línia %d"
 
-#: apply.c:1825
+#: apply.c:1832
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "el fitxer nou %s depèn dels continguts antics"
 
-#: apply.c:1827
+#: apply.c:1834
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "el fitxer suprimit %s encara té continguts"
 
-#: apply.c:1830
+#: apply.c:1837
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** advertència: el fitxer %s queda buit però no se suprimeix"
 
-#: apply.c:1978
+#: apply.c:1985
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "pedaç binari malmès a la línia %d: %.*s"
 
-#: apply.c:2015
+#: apply.c:2022
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "pedaç binari no reconegut a la línia %d"
 
-#: apply.c:2177
+#: apply.c:2184
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "pedaç amb només escombraries a la línia %d"
 
-#: apply.c:2263
+#: apply.c:2270
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "no s'ha pogut llegir l'enllaç simbòlic %s"
 
-#: apply.c:2267
+#: apply.c:2274
 #, c-format
 msgid "unable to open or read %s"
 msgstr "no s'ha pogut obrir o llegir %s"
 
-#: apply.c:2936
+#: apply.c:2943
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "inici de línia no vàlid: «%c»"
 
-#: apply.c:3057
+#: apply.c:3064
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "El tros #%d ha tingut èxit a %d (desplaçament d'%d línia)."
 msgstr[1] "El tros #%d ha tingut èxit a %d (desplaçament de %d línies)."
 
-#: apply.c:3069
+#: apply.c:3076
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "El context s'ha reduït a (%ld/%ld) per a aplicar el fragment a %d"
 
-#: apply.c:3075
+#: apply.c:3082
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1133,23 +1139,23 @@ msgstr ""
 "tot cercant:\n"
 "%.*s"
 
-#: apply.c:3097
+#: apply.c:3104
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "manquen les dades de pedaç binari de «%s»"
 
-#: apply.c:3105
+#: apply.c:3112
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr "no es pot aplicar al revés un pedaç binari sense el tros revés a «%s»"
 
-#: apply.c:3152
+#: apply.c:3159
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr ""
 "no es pot aplicar un pedaç binari a «%s» sense la línia d'índex completa"
 
-#: apply.c:3163
+#: apply.c:3170
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
@@ -1157,290 +1163,291 @@ msgstr ""
 "el pedaç s'aplica a «%s» (%s), el qual no coincideix amb els continguts "
 "actuals."
 
-#: apply.c:3171
+#: apply.c:3178
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "el pedaç s'aplica a un «%s» buit però no és buit"
 
-#: apply.c:3189
+#: apply.c:3196
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "no es pot llegir la postimatge %s necessària per a «%s»"
 
-#: apply.c:3202
+#: apply.c:3209
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "el pedaç binari no s'aplica a «%s»"
 
-#: apply.c:3209
+#: apply.c:3216
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 "el pedaç binari a «%s» crea un resultat incorrecte (s'esperava %s, s'ha "
 "rebut %s)"
 
-#: apply.c:3230
+#: apply.c:3237
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "el pedaç ha fallat: %s:%ld"
 
-#: apply.c:3353
+#: apply.c:3360
 #, c-format
 msgid "cannot checkout %s"
 msgstr "no es pot agafar %s"
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:104 pack-revindex.c:214
+#: apply.c:3412 apply.c:3423 apply.c:3469 midx.c:105 pack-revindex.c:214
 #: setup.c:309
 #, c-format
 msgid "failed to read %s"
 msgstr "s'ha produït un error en llegir %s"
 
-#: apply.c:3413
+#: apply.c:3420
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "s'està llegint de «%s» més enllà d'un enllaç simbòlic"
 
-#: apply.c:3442 apply.c:3711
+#: apply.c:3449 apply.c:3721
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "el camí %s s'ha canviat de nom / s'ha suprimit"
 
-#: apply.c:3549 apply.c:3726
+#: apply.c:3559 apply.c:3736
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s: no existeix en l'índex"
 
-#: apply.c:3558 apply.c:3734 apply.c:3978
+#: apply.c:3568 apply.c:3744 apply.c:3960
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s: no coincideix amb l'índex"
 
-#: apply.c:3595
+#: apply.c:3605
 msgid "repository lacks the necessary blob to perform 3-way merge."
 msgstr ""
 "al repositori li manca el blob necessari per a fer a una fusió de 3 vies."
 
-#: apply.c:3598
+#: apply.c:3608
 #, c-format
 msgid "Performing three-way merge...\n"
 msgstr "S'està fent una fusió de 3 vies...\n"
 
-#: apply.c:3614 apply.c:3618
+#: apply.c:3624 apply.c:3628
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "no es poden llegir els continguts actuals de «%s»"
 
-#: apply.c:3630
+#: apply.c:3640
 #, c-format
 msgid "Failed to perform three-way merge...\n"
 msgstr "S'ha produït un error en fer una fusió de tres vies...\n"
 
-#: apply.c:3644
+#: apply.c:3654
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "S'ha aplicat el pedaç a «%s» amb conflictes.\n"
 
-#: apply.c:3649
+#: apply.c:3659
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "S'ha aplicat el pedaç a «%s» netament.\n"
 
-#: apply.c:3666
+#: apply.c:3676
 #, c-format
 msgid "Falling back to direct application...\n"
 msgstr "S'està usant alternativament l'aplicació directa...\n"
 
-#: apply.c:3678
+#: apply.c:3688
 msgid "removal patch leaves file contents"
 msgstr "el pedaç d'eliminació deixa els continguts dels fitxers"
 
-#: apply.c:3751
+#: apply.c:3761
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s: tipus erroni"
 
-#: apply.c:3753
+#: apply.c:3763
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s és del tipus %o, s'esperava %o"
 
-#: apply.c:3918 apply.c:3920 read-cache.c:889 read-cache.c:918
-#: read-cache.c:1381
+#: apply.c:3900 apply.c:3902 read-cache.c:903 read-cache.c:932
+#: read-cache.c:1399
 #, c-format
 msgid "invalid path '%s'"
 msgstr "camí no vàlid: «%s»"
 
-#: apply.c:3976
+#: apply.c:3958
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s: ja existeix en l'índex"
 
-#: apply.c:3980
+#: apply.c:3962
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s: ja existeix en el directori de treball"
 
-#: apply.c:4000
+#: apply.c:3982
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "el mode nou (%o) de %s no coincideix amb el mode antic (%o)"
 
-#: apply.c:4005
+#: apply.c:3987
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "el mode nou (%o) de %s no coincideix amb el mode antic (%o) de %s"
 
-#: apply.c:4025
+#: apply.c:4007
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "el fitxer afectat «%s» és més enllà d'un enllaç simbòlic"
 
-#: apply.c:4029
+#: apply.c:4011
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s: el pedaç no s'aplica"
 
-#: apply.c:4044
+#: apply.c:4026
 #, c-format
 msgid "Checking patch %s..."
 msgstr "S'està comprovant el pedaç %s..."
 
-#: apply.c:4136
+#: apply.c:4118
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "falta la informació sha1 o és inútil per al submòdul %s"
 
-#: apply.c:4143
+#: apply.c:4125
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "canvi de mode per a %s, el qual no està en la HEAD actual"
 
-#: apply.c:4146
+#: apply.c:4128
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "falta informació sha1 o és inútil (%s)."
 
-#: apply.c:4155
+#: apply.c:4137
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "no s'ha pogut afegir %s a l'índex temporal"
 
-#: apply.c:4165
+#: apply.c:4147
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "no s'ha pogut escriure l'índex temporal a %s"
 
-#: apply.c:4303
+#: apply.c:4285
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "no s'ha pogut eliminar %s de l'índex"
 
-#: apply.c:4337
+#: apply.c:4319
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "pedaç malmès per al submòdul %s"
 
-#: apply.c:4343
+#: apply.c:4325
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "no s'ha pogut fer stat al fitxer novament creat «%s»"
 
-#: apply.c:4351
+#: apply.c:4333
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr ""
 "no s'ha pogut crear un magatzem de suport per al fitxer novament creat %s"
 
-#: apply.c:4357 apply.c:4502
+#: apply.c:4339 apply.c:4484
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "no s'ha pogut afegir una entrada de cau per a %s"
 
-#: apply.c:4400 builtin/bisect--helper.c:540 builtin/gc.c:2258
+#: apply.c:4382 builtin/bisect--helper.c:540 builtin/gc.c:2258
 #: builtin/gc.c:2293
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "no s'ha pogut escriure a «%s»"
 
-#: apply.c:4404
+#: apply.c:4386
 #, c-format
 msgid "closing file '%s'"
 msgstr "s'està tancant el fitxer «%s»"
 
-#: apply.c:4474
+#: apply.c:4456
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "no s'ha pogut escriure el fitxer «%s» mode %o"
 
-#: apply.c:4572
+#: apply.c:4554
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "El pedaç %s s'ha aplicat netament."
 
-#: apply.c:4580
+#: apply.c:4562
 msgid "internal error"
 msgstr "error intern"
 
-#: apply.c:4583
+#: apply.c:4565
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "S'està aplicant el pedaç %%s amb %d rebuig..."
 msgstr[1] "S'està aplicant el pedaç %%s amb %d rebutjos..."
 
-#: apply.c:4594
+#: apply.c:4576
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "s'està truncant el nom del fitxer .rej a %.*s.rej"
 
-#: apply.c:4602
+#: apply.c:4584
 #, c-format
 msgid "cannot open %s"
 msgstr "no es pot obrir %s"
 
-#: apply.c:4616
+#: apply.c:4598
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "El tros #%d s'ha aplicat netament."
 
-#: apply.c:4620
+#: apply.c:4602
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "S'ha rebutjat el tros #%d."
 
-#: apply.c:4749
+#: apply.c:4731
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "S'ha omès el pedaç «%s»."
 
-#: apply.c:4758
+#: apply.c:4740
 msgid "No valid patches in input (allow with \"--allow-empty\")"
-msgstr "No hi ha pedaços vàlids a l'entrada (permeteu-los amb «--allow-empty»)"
+msgstr ""
+"No hi ha pedaços vàlids a l'entrada (permeteu-los amb «--allow-empty»)"
 
-#: apply.c:4779
+#: apply.c:4761
 msgid "unable to read index file"
 msgstr "no es pot llegir el fitxer d'índex"
 
-#: apply.c:4936
+#: apply.c:4918
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "no es pot obrir el pedaç «%s»: %s"
 
-#: apply.c:4963
+#: apply.c:4945
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "s'ha silenciat %d error d'espai en blanc"
 msgstr[1] "s'han silenciat %d errors d'espai en blanc"
 
-#: apply.c:4969 apply.c:4984
+#: apply.c:4951 apply.c:4966
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d línia afegeix errors d'espai en blanc."
 msgstr[1] "%d línies afegeixen errors d'espai en blanc."
 
-#: apply.c:4977
+#: apply.c:4959
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
@@ -1449,146 +1456,146 @@ msgstr[0] ""
 msgstr[1] ""
 "S'han aplicat %d línies després d'arreglar els errors d'espai en blanc."
 
-#: apply.c:4993 builtin/add.c:704 builtin/mv.c:338 builtin/rm.c:430
+#: apply.c:4975 builtin/add.c:690 builtin/mv.c:338 builtin/rm.c:430
 msgid "Unable to write new index file"
 msgstr "No s'ha pogut escriure un fitxer d'índex nou"
 
-#: apply.c:5021
+#: apply.c:5003
 msgid "don't apply changes matching the given path"
 msgstr "no apliquis els canvis que coincideixin amb el camí donat"
 
-#: apply.c:5024
+#: apply.c:5006
 msgid "apply changes matching the given path"
 msgstr "aplica els canvis que coincideixin amb el camí donat"
 
-#: apply.c:5026 builtin/am.c:2376
+#: apply.c:5008 builtin/am.c:2379
 msgid "num"
 msgstr "nombre"
 
-#: apply.c:5027
+#: apply.c:5009
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr ""
 "elimina <nombre> barres obliqües inicials dels camins de diferència "
 "tradicionals"
 
-#: apply.c:5030
+#: apply.c:5012
 msgid "ignore additions made by the patch"
 msgstr "ignora afegiments fets pel pedaç"
 
-#: apply.c:5032
+#: apply.c:5014
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr ""
 "en lloc d'aplicar el pedaç, emet les estadístiques de diferència de "
 "l'entrada"
 
-#: apply.c:5036
+#: apply.c:5018
 msgid "show number of added and deleted lines in decimal notation"
 msgstr "mostra el nombre de línies afegides i suprimides en notació decimal"
 
-#: apply.c:5038
+#: apply.c:5020
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "en lloc d'aplicar el pedaç, emet un resum de l'entrada"
 
-#: apply.c:5040
+#: apply.c:5022
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "en lloc d'aplicar el pedaç, veges si el pedaç és aplicable"
 
-#: apply.c:5042
+#: apply.c:5024
 msgid "make sure the patch is applicable to the current index"
 msgstr "assegura que el pedaç sigui aplicable a l'índex actual"
 
-#: apply.c:5044
+#: apply.c:5026
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "marca els fitxers nous amb «git add --intent-to-add»"
 
-#: apply.c:5046
+#: apply.c:5028
 msgid "apply a patch without touching the working tree"
 msgstr "aplica un pedaç sense tocar l'arbre de treball"
 
-#: apply.c:5048
+#: apply.c:5030
 msgid "accept a patch that touches outside the working area"
 msgstr "accepta un pedaç que toqui fora de l'àrea de treball"
 
-#: apply.c:5051
+#: apply.c:5033
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "aplica el pedaç també (useu amb --stat/--summary/--check)"
 
-#: apply.c:5053
+#: apply.c:5035
 msgid "attempt three-way merge, fall back on normal patch if that fails"
 msgstr ""
 "intenta una fusió de tres vies, si falla intenta llavors un pedaç normal"
 
-#: apply.c:5055
+#: apply.c:5037
 msgid "build a temporary index based on embedded index information"
 msgstr ""
 "construeix un índex temporal basat en la informació d'índex incrustada"
 
-#: apply.c:5058 builtin/checkout-index.c:196
+#: apply.c:5040 builtin/checkout-index.c:230
 msgid "paths are separated with NUL character"
 msgstr "els camins se separen amb el caràcter NUL"
 
-#: apply.c:5060
+#: apply.c:5042
 msgid "ensure at least <n> lines of context match"
 msgstr "assegura't que almenys <n> línies de context coincideixin"
 
-#: apply.c:5061 builtin/am.c:2352 builtin/am.c:2355
+#: apply.c:5043 builtin/am.c:2355 builtin/am.c:2358
 #: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
-#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3960
-#: builtin/rebase.c:1051
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3983
+#: builtin/rebase.c:1079
 msgid "action"
 msgstr "acció"
 
-#: apply.c:5062
+#: apply.c:5044
 msgid "detect new or modified lines that have whitespace errors"
 msgstr ""
 "detecta les línies noves o modificades que tinguin errors d'espai en blanc"
 
-#: apply.c:5065 apply.c:5068
+#: apply.c:5047 apply.c:5050
 msgid "ignore changes in whitespace when finding context"
 msgstr "ignora els canvis d'espai en blanc en cercar context"
 
-#: apply.c:5071
+#: apply.c:5053
 msgid "apply the patch in reverse"
 msgstr "aplica el pedaç al revés"
 
-#: apply.c:5073
+#: apply.c:5055
 msgid "don't expect at least one line of context"
 msgstr "no esperis almenys una línia de context"
 
-#: apply.c:5075
+#: apply.c:5057
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "deixa els trossos rebutjats en fitxers *.rej corresponents"
 
-#: apply.c:5077
+#: apply.c:5059
 msgid "allow overlapping hunks"
 msgstr "permet trossos superposats"
 
-#: apply.c:5080
+#: apply.c:5062
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "tolera una línia nova incorrectament detectada al final del fitxer"
 
-#: apply.c:5083
+#: apply.c:5065
 msgid "do not trust the line counts in the hunk headers"
 msgstr "no confiïs en els recomptes de línia en les capçaleres dels trossos"
 
-#: apply.c:5085 builtin/am.c:2364
+#: apply.c:5067 builtin/am.c:2367
 msgid "root"
 msgstr "arrel"
 
-#: apply.c:5086
+#: apply.c:5068
 msgid "prepend <root> to all filenames"
 msgstr "anteposa <arrel> a tots els noms de fitxer"
 
-#: apply.c:5089
+#: apply.c:5071
 msgid "don't return error for empty patches"
 msgstr "no retornis l'error per als pedaços buits"
 
-#: archive-tar.c:125 archive-zip.c:345
+#: archive-tar.c:125 archive-zip.c:346
 #, c-format
 msgid "cannot stream blob %s"
 msgstr "no es pot transmetre el blob %s"
 
-#: archive-tar.c:265 archive-zip.c:358
+#: archive-tar.c:265 archive-zip.c:359
 #, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
 msgstr "mode de fitxer no compatible: 0%o (SHA1: %s)"
@@ -1607,22 +1614,22 @@ msgstr "no s'ha pogut redirigir el descriptor"
 msgid "'%s' filter reported error"
 msgstr "«%s» error reportat pel filtre"
 
-#: archive-zip.c:318
+#: archive-zip.c:319
 #, c-format
 msgid "path is not valid UTF-8: %s"
 msgstr "el camí no és vàlid en UTF-8: %s"
 
-#: archive-zip.c:322
+#: archive-zip.c:323
 #, c-format
 msgid "path too long (%d chars, SHA1: %s): %s"
 msgstr "el camí és massa llarg (%d caràcters, SHA1: %s): %s"
 
-#: archive-zip.c:469 builtin/pack-objects.c:365 builtin/pack-objects.c:368
+#: archive-zip.c:470 builtin/pack-objects.c:363 builtin/pack-objects.c:366
 #, c-format
 msgid "deflate error (%d)"
 msgstr "error de deflació (%d)"
 
-#: archive-zip.c:603
+#: archive-zip.c:604
 #, c-format
 msgid "timestamp too large for this system: %<PRIuMAX>"
 msgstr "marca de temps massa gran per a aquest sistema: %<PRIuMAX>"
@@ -1631,10 +1638,6 @@ msgstr "marca de temps massa gran per a aquest sistema: %<PRIuMAX>"
 msgid "git archive [<options>] <tree-ish> [<path>...]"
 msgstr "git archive [<opcions>] <arbre> [<camí>...]"
 
-#: archive.c:15
-msgid "git archive --list"
-msgstr "git archive --list"
-
 #: archive.c:16
 msgid ""
 "git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> "
@@ -1648,12 +1651,12 @@ msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote <repositori> [--exec <ordre>] --list"
 
 #: archive.c:188 archive.c:341 builtin/gc.c:497 builtin/notes.c:238
-#: builtin/tag.c:578
+#: builtin/tag.c:579
 #, c-format
 msgid "cannot read '%s'"
 msgstr "no es pot llegir «%s»"
 
-#: archive.c:426 builtin/add.c:215 builtin/add.c:671 builtin/rm.c:334
+#: archive.c:426 builtin/add.c:214 builtin/add.c:657 builtin/rm.c:334
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "l'especificació de camí «%s» no ha coincidit amb cap fitxer"
@@ -1695,7 +1698,7 @@ msgstr "format"
 msgid "archive format"
 msgstr "format d'arxiu"
 
-#: archive.c:552 builtin/log.c:1790
+#: archive.c:552 builtin/log.c:1809
 msgid "prefix"
 msgstr "prefix"
 
@@ -1703,12 +1706,12 @@ msgstr "prefix"
 msgid "prepend prefix to each pathname in the archive"
 msgstr "anteposa el prefix a cada nom de camí en l'arxiu"
 
-#: archive.c:554 archive.c:557 builtin/blame.c:880 builtin/blame.c:884
-#: builtin/blame.c:885 builtin/commit-tree.c:115 builtin/config.c:135
+#: archive.c:554 archive.c:557 builtin/blame.c:881 builtin/blame.c:885
+#: builtin/blame.c:886 builtin/commit-tree.c:115 builtin/config.c:135
 #: builtin/fast-export.c:1181 builtin/fast-export.c:1183
-#: builtin/fast-export.c:1187 builtin/grep.c:935 builtin/hash-object.c:103
+#: builtin/fast-export.c:1187 builtin/grep.c:936 builtin/hash-object.c:104
 #: builtin/ls-files.c:654 builtin/ls-files.c:657 builtin/notes.c:410
-#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:190
+#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:195
 msgid "file"
 msgstr "fitxer"
 
@@ -1736,8 +1739,8 @@ msgstr "estableix el nivell de compressió"
 msgid "list supported archive formats"
 msgstr "llista els formats d'arxiu admesos"
 
-#: archive.c:568 builtin/archive.c:89 builtin/clone.c:118 builtin/clone.c:121
-#: builtin/submodule--helper.c:1870 builtin/submodule--helper.c:2513
+#: archive.c:568 builtin/archive.c:89 builtin/clone.c:122 builtin/clone.c:125
+#: builtin/submodule--helper.c:1884 builtin/submodule--helper.c:2718
 msgid "repo"
 msgstr "repositori"
 
@@ -1758,11 +1761,12 @@ msgstr "camí a l'ordre git-upload-archive remota"
 msgid "Unexpected option --remote"
 msgstr "Opció inesperada --remote"
 
-#: archive.c:580 fetch-pack.c:300 revision.c:2887 builtin/add.c:544
-#: builtin/add.c:576 builtin/checkout.c:1763 builtin/commit.c:370
-#: builtin/fast-export.c:1230 builtin/index-pack.c:1848 builtin/log.c:2115
-#: builtin/reset.c:435 builtin/reset.c:493 builtin/rm.c:281
-#: builtin/stash.c:1719 builtin/worktree.c:508 http-fetch.c:144
+#: archive.c:580 fetch-pack.c:300 revision.c:2914 builtin/add.c:530
+#: builtin/add.c:562 builtin/checkout.c:1782 builtin/clone.c:1099
+#: builtin/clone.c:1102 builtin/commit.c:371 builtin/fast-export.c:1230
+#: builtin/index-pack.c:1854 builtin/log.c:2140 builtin/reset.c:442
+#: builtin/reset.c:500 builtin/rm.c:281 builtin/stash.c:1708
+#: builtin/worktree.c:580 builtin/worktree.c:781 http-fetch.c:144
 #: http-fetch.c:153
 #, c-format
 msgid "the option '%s' requires '%s'"
@@ -1782,17 +1786,17 @@ msgstr "Format d'arxiu desconegut «%s»"
 msgid "Argument not supported for format '%s': -%d"
 msgstr "Argument no admès per al format «%s»: -%d"
 
-#: attr.c:203
+#: attr.c:202
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s no és un nom d'atribut vàlid"
 
-#: attr.c:364
+#: attr.c:363
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s no està permès: %s:%d"
 
-#: attr.c:404
+#: attr.c:403
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1810,12 +1814,12 @@ msgstr "Comentari amb cometes errònies en el fitxer «%s»: %s"
 msgid "We cannot bisect more!\n"
 msgstr "No podem bisecar més!\n"
 
-#: bisect.c:764
+#: bisect.c:765
 #, c-format
 msgid "Not a valid commit name %s"
 msgstr "No és un nom de comissió vàlid %s"
 
-#: bisect.c:789
+#: bisect.c:790
 #, c-format
 msgid ""
 "The merge base %s is bad.\n"
@@ -1824,7 +1828,7 @@ msgstr ""
 "La base de fusió %s és errònia.\n"
 "Això vol dir que el defecte s'ha arreglat entre %s i [%s].\n"
 
-#: bisect.c:794
+#: bisect.c:795
 #, c-format
 msgid ""
 "The merge base %s is new.\n"
@@ -1833,7 +1837,7 @@ msgstr ""
 "La base de fusió %s és nova.\n"
 "La propietat s'ha canviat entre %s i [%s].\n"
 
-#: bisect.c:799
+#: bisect.c:800
 #, c-format
 msgid ""
 "The merge base %s is %s.\n"
@@ -1842,7 +1846,7 @@ msgstr ""
 "La base de fusió %s és %s.\n"
 "Això vol dir que la primera comissió «%s» és entre %s i [%s].\n"
 
-#: bisect.c:807
+#: bisect.c:808
 #, c-format
 msgid ""
 "Some %s revs are not ancestors of the %s rev.\n"
@@ -1853,7 +1857,7 @@ msgstr ""
 "git bisect no pot funcionar correctament en aquest cas.\n"
 "Potser heu confós les revisions %s i %s?\n"
 
-#: bisect.c:820
+#: bisect.c:821
 #, c-format
 msgid ""
 "the merge base between %s and [%s] must be skipped.\n"
@@ -1864,36 +1868,36 @@ msgstr ""
 "Llavors, no podem estar segurs que la primera comissió %s sigui entre %s i %s.\n"
 "Continuem de totes maneres."
 
-#: bisect.c:859
+#: bisect.c:860
 #, c-format
 msgid "Bisecting: a merge base must be tested\n"
 msgstr "Bisecant: s'ha de provar una base de fusió\n"
 
-#: bisect.c:909
+#: bisect.c:910
 #, c-format
 msgid "a %s revision is needed"
 msgstr "es necessita una revisió %s"
 
-#: bisect.c:939
+#: bisect.c:940
 #, c-format
 msgid "could not create file '%s'"
 msgstr "no s'ha pogut crear el fitxer «%s»"
 
-#: bisect.c:985 builtin/merge.c:155
+#: bisect.c:986 builtin/merge.c:155
 #, c-format
 msgid "could not read file '%s'"
 msgstr "no s'ha pogut llegir el fitxer «%s»"
 
-#: bisect.c:1025
+#: bisect.c:1026
 msgid "reading bisect refs failed"
 msgstr "la lectura de les referències de bisecció ha fallat"
 
-#: bisect.c:1055
+#: bisect.c:1056
 #, c-format
 msgid "%s was both %s and %s\n"
 msgstr "%s era ambdós %s i %s\n"
 
-#: bisect.c:1064
+#: bisect.c:1065
 #, c-format
 msgid ""
 "No testable commit found.\n"
@@ -1902,7 +1906,7 @@ msgstr ""
 "No s'ha trobat cap comissió comprovable.\n"
 "Potser heu començat amb paràmetres de camí incorrectes?\n"
 
-#: bisect.c:1093
+#: bisect.c:1094
 #, c-format
 msgid "(roughly %d step)"
 msgid_plural "(roughly %d steps)"
@@ -1911,54 +1915,54 @@ msgstr[1] "(aproximadament %d passos)"
 
 #. TRANSLATORS: the last %s will be replaced with "(roughly %d
 #. steps)" translation.
-#: bisect.c:1099
+#: bisect.c:1100
 #, c-format
 msgid "Bisecting: %d revision left to test after this %s\n"
 msgid_plural "Bisecting: %d revisions left to test after this %s\n"
 msgstr[0] "Bisecant: manca %d revisió a provar després d'aquesta %s\n"
 msgstr[1] "Bisecant: manquen %d revisions a provar després d'aquesta %s\n"
 
-#: blame.c:2776
+#: blame.c:2773
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents i --reverse no funcionen bé juntes."
 
-#: blame.c:2790
+#: blame.c:2787
 msgid "cannot use --contents with final commit object name"
 msgstr "no es pot usar --contents amb el nom d'objecte de la comissió final"
 
-#: blame.c:2811
+#: blame.c:2808
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "--reverse i --first-parent junts requereixen una última comissió "
 "especificada"
 
-#: blame.c:2820 bundle.c:224 midx.c:1042 ref-filter.c:2370 remote.c:2158
-#: sequencer.c:2352 sequencer.c:4899 submodule.c:883 builtin/commit.c:1114
-#: builtin/log.c:429 builtin/log.c:1036 builtin/log.c:1644 builtin/log.c:2071
-#: builtin/log.c:2362 builtin/merge.c:431 builtin/pack-objects.c:3373
-#: builtin/pack-objects.c:3775 builtin/pack-objects.c:3790
+#: blame.c:2817 bundle.c:231 midx.c:1058 ref-filter.c:2371 remote.c:2157
+#: sequencer.c:2348 sequencer.c:4872 submodule.c:913 builtin/commit.c:1118
+#: builtin/log.c:437 builtin/log.c:1055 builtin/log.c:1663 builtin/log.c:2096
+#: builtin/log.c:2387 builtin/merge.c:431 builtin/pack-objects.c:3381
+#: builtin/pack-objects.c:3781 builtin/pack-objects.c:3796
 #: builtin/shortlog.c:255
 msgid "revision walk setup failed"
 msgstr "la configuració del recorregut de revisions ha fallat"
 
-#: blame.c:2838
+#: blame.c:2835
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "--reverse --first-parent junts requereixen un rang de la cadena de pares "
 "primers"
 
-#: blame.c:2849
+#: blame.c:2846
 #, c-format
 msgid "no such path %s in %s"
 msgstr "no hi ha tal camí %s en %s"
 
-#: blame.c:2860
+#: blame.c:2857
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "no es pot llegir el blob %s per al camí %s"
 
-#: branch.c:77
+#: branch.c:93
 msgid ""
 "cannot inherit upstream tracking configuration of multiple refs when "
 "rebasing is requested"
@@ -1966,34 +1970,31 @@ msgstr ""
 "no es pot heretar la configuració del seguiment de la font de múltiples "
 "referències quan es demana fer «rebase»"
 
-#: branch.c:88
+#: branch.c:104
 #, c-format
 msgid "not setting branch '%s' as its own upstream"
 msgstr "no s'està establert la branca «%s» com a la seva pròpia font"
 
-#: branch.c:144
+#: branch.c:160
 #, c-format
 msgid "branch '%s' set up to track '%s' by rebasing."
-msgstr ""
-"la branca «%s» està configurada per a seguir «%s» fent "
-"«rebase»."
+msgstr "la branca «%s» està configurada per a seguir «%s» fent «rebase»."
 
-#: branch.c:145
+#: branch.c:161
 #, c-format
 msgid "branch '%s' set up to track '%s'."
-msgstr ""
-"la branca «%s» està configurada per a seguir «%s»."
+msgstr "la branca «%s» està configurada per a seguir «%s»."
 
-#: branch.c:148
+#: branch.c:164
 #, c-format
 msgid "branch '%s' set up to track:"
 msgstr "la branca «%s» està configurada per a seguir:"
 
-#: branch.c:160
+#: branch.c:176
 msgid "unable to write upstream branch configuration"
 msgstr "no es pot escriure la configuració de la branca font"
 
-#: branch.c:162
+#: branch.c:178
 msgid ""
 "\n"
 "After fixing the error cause you may try to fix up\n"
@@ -2003,41 +2004,76 @@ msgstr ""
 "Després de corregir la causa de l'error, podeu intentar\n"
 "corregir la informació de seguiment remot executant:"
 
-#: branch.c:203
+#: branch.c:219
 #, c-format
 msgid "asked to inherit tracking from '%s', but no remote is set"
 msgstr ""
-"s'ha demanat que hereti el seguiment de «%s», però no s'ha establert cap"
-" remot"
+"s'ha demanat que hereti el seguiment de «%s», però no s'ha establert cap "
+"remot"
 
-#: branch.c:209
+#: branch.c:225
 #, c-format
 msgid "asked to inherit tracking from '%s', but no merge configuration is set"
 msgstr ""
-"s'ha demanat que hereti el seguiment de «%s», però no s'ha establert cap"
-" configuració de fusionat"
+"s'ha demanat que hereti el seguiment de «%s», però no s'ha establert cap "
+"configuració de fusionat"
+
+#: branch.c:277
+#, c-format
+msgid "not tracking: ambiguous information for ref '%s'"
+msgstr "no s'està seguint: informació ambigua per a la referència «%s»"
+
+#. TRANSLATORS: This is a line listing a remote with duplicate
+#. refspecs in the advice message below. For RTL languages you'll
+#. probably want to swap the "%s" and leading "  " space around.
+#. TRANSLATORS: This is line item of ambiguous object output
+#. from describe_ambiguous_object() above. For RTL languages
+#. you'll probably want to swap the "%s" and leading " " space
+#. around.
+#: branch.c:289 object-name.c:464
+#, c-format
+msgid "  %s\n"
+msgstr "  %s\n"
 
-#: branch.c:252
+#. TRANSLATORS: The second argument is a \n-delimited list of
+#. duplicate refspecs, composed above.
+#: branch.c:295
 #, c-format
-msgid "not tracking: ambiguous information for ref %s"
-msgstr "no s'està seguint: informació ambigua per a la referència %s"
+msgid ""
+"There are multiple remotes whose fetch refspecs map to the remote\n"
+"tracking ref '%s':\n"
+"%s\n"
+"This is typically a configuration error.\n"
+"\n"
+"To support setting up tracking branches, ensure that\n"
+"different remotes' fetch refspecs map into different\n"
+"tracking namespaces."
+msgstr ""
+"Hi ha diversos remots pels quals les refspecs coincideixen amb la ref\n"
+"de seguiment remot «%s»:\n"
+"%s\n"
+"Normalment es tracta d'un error de configuració.\n"
+"\n"
+"Per a donar suport a la creació de branques de seguiment, assegureu-vos que\n"
+"els diferents refspecs remots s'assignen a diferents espais de noms\n"
+"de seguiment."
 
-#: branch.c:287
+#: branch.c:344
 #, c-format
 msgid "'%s' is not a valid branch name"
 msgstr "«%s» no és un nom de branca vàlid"
 
-#: branch.c:307
+#: branch.c:364
 #, c-format
 msgid "a branch named '%s' already exists"
 msgstr "ja existeix una branca amb nom «%s»"
 
-#: branch.c:313
+#: branch.c:370
 #, c-format
 msgid "cannot force update the branch '%s' checked out at '%s'"
 msgstr "no es pot forçar l'actualització de la branca «%s», agafada a «%s»"
 
-#: branch.c:336
+#: branch.c:393
 #, c-format
 msgid ""
 "cannot set up tracking information; starting point '%s' is not a branch"
@@ -2045,12 +2081,12 @@ msgstr ""
 "no es pot configurar la informació de seguiment; el punt inicial «%s» no és "
 "una branca"
 
-#: branch.c:338
+#: branch.c:395
 #, c-format
 msgid "the requested upstream branch '%s' does not exist"
 msgstr "la branca font demanada «%s» no existeix"
 
-#: branch.c:340
+#: branch.c:397
 msgid ""
 "\n"
 "If you are planning on basing your work on an upstream\n"
@@ -2071,126 +2107,144 @@ msgstr ""
 "«git push -u» per a establir la configuració font\n"
 "mentre pugeu."
 
-#: branch.c:384 builtin/replace.c:321 builtin/replace.c:377
+#: branch.c:445 builtin/replace.c:321 builtin/replace.c:377
 #: builtin/replace.c:423 builtin/replace.c:453
 #, c-format
 msgid "not a valid object name: '%s'"
 msgstr "no és un nom d'objecte vàlid: «%s»"
 
-#: branch.c:404
+#: branch.c:465
 #, c-format
 msgid "ambiguous object name: '%s'"
 msgstr "nom d'objecte ambigu: «%s»"
 
-#: branch.c:409
+#: branch.c:470
 #, c-format
 msgid "not a valid branch point: '%s'"
 msgstr "no és un punt de ramificació vàlid: «%s»"
 
-#: branch.c:469
+#: branch.c:658
+#, c-format
+msgid "submodule '%s': unable to find submodule"
+msgstr "submòdul «%s»: no es pot trobar el submòdul"
+
+#: branch.c:661
+#, c-format
+msgid ""
+"You may try updating the submodules using 'git checkout %s && git submodule "
+"update --init'"
+msgstr ""
+"Podeu provar d'actualitzar els submòduls utilitzant «git checkout %s && git submodule update --init»"
+
+#: branch.c:672 branch.c:698
+#, c-format
+msgid "submodule '%s': cannot create branch '%s'"
+msgstr "submòdul «%s»: no es pot crear la branca: «%s»"
+
+#: branch.c:730
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr "«%s» ja s'ha agafat a «%s»"
 
-#: branch.c:494
+#: branch.c:755
 #, c-format
 msgid "HEAD of working tree %s is not updated"
 msgstr "HEAD de l'arbre de treball %s no està actualitzat"
 
-#: bundle.c:44
+#: bundle.c:45
 #, c-format
 msgid "unrecognized bundle hash algorithm: %s"
 msgstr "algoritme de hash del farcell desconegut: %s"
 
-#: bundle.c:48
+#: bundle.c:53
 #, c-format
 msgid "unknown capability '%s'"
 msgstr "funcionalitat «%s» desconeguda"
 
-#: bundle.c:74
+#: bundle.c:79
 #, c-format
 msgid "'%s' does not look like a v2 or v3 bundle file"
 msgstr "«%s» no sembla un fitxer de farcell v2 o v3"
 
-#: bundle.c:113
+#: bundle.c:118
 #, c-format
 msgid "unrecognized header: %s%s (%d)"
 msgstr "capçalera no reconeguda: %s%s (%d)"
 
-#: bundle.c:140 rerere.c:464 rerere.c:674 sequencer.c:2620 sequencer.c:3406
-#: builtin/commit.c:862
+#: bundle.c:145 rerere.c:464 rerere.c:675 sequencer.c:2616 sequencer.c:3402
+#: builtin/commit.c:865
 #, c-format
 msgid "could not open '%s'"
 msgstr "no s'ha pogut obrir «%s»"
 
-#: bundle.c:198
+#: bundle.c:203
 msgid "Repository lacks these prerequisite commits:"
 msgstr "Al repositori li manquen aquestes comissions prerequerides:"
 
-#: bundle.c:201
+#: bundle.c:206
 msgid "need a repository to verify a bundle"
 msgstr "cal un repositori per a verificar un farcell"
 
-#: bundle.c:257
+#: bundle.c:264
 #, c-format
 msgid "The bundle contains this ref:"
-msgid_plural "The bundle contains these %d refs:"
+msgid_plural "The bundle contains these %<PRIuMAX> refs:"
 msgstr[0] "El farcell conté aquesta referència:"
-msgstr[1] "El farcell conté aquestes %d referències:"
+msgstr[1] "El farcell conté aquestes %<PRIuMAX> referències:"
 
-#: bundle.c:264
+#: bundle.c:272
 msgid "The bundle records a complete history."
 msgstr "El farcell registra una història completa."
 
-#: bundle.c:266
+#: bundle.c:274
 #, c-format
 msgid "The bundle requires this ref:"
-msgid_plural "The bundle requires these %d refs:"
+msgid_plural "The bundle requires these %<PRIuMAX> refs:"
 msgstr[0] "El farcell requereix aquesta referència:"
-msgstr[1] "El farcell requereix aquestes %d referències:"
+msgstr[1] "El farcell requereix aquestes %<PRIuMAX> referències:"
 
-#: bundle.c:333
+#: bundle.c:350
 msgid "unable to dup bundle descriptor"
 msgstr "no s'ha pogut duplicar el descriptor del farcell"
 
-#: bundle.c:340
+#: bundle.c:357
 msgid "Could not spawn pack-objects"
 msgstr "No s'ha pogut engendrar el pack-objects"
 
-#: bundle.c:351
+#: bundle.c:368
 msgid "pack-objects died"
 msgstr "el pack-objects s'ha mort"
 
-#: bundle.c:400
+#: bundle.c:417
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "les opcions de la llista de revisions exclouen la referència «%s»"
 
-#: bundle.c:504
+#: bundle.c:533 builtin/log.c:211 builtin/log.c:1975 builtin/shortlog.c:400
+#, c-format
+msgid "unrecognized argument: %s"
+msgstr "argument no reconegut: %s"
+
+#: bundle.c:548
 #, c-format
 msgid "unsupported bundle version %d"
 msgstr "versió del farcell no compatible %d"
 
-#: bundle.c:506
+#: bundle.c:550
 #, c-format
 msgid "cannot write bundle version %d with algorithm %s"
-msgstr "no es pot escriure la versió %d amb l'algorisme %s"
-
-#: bundle.c:524 builtin/log.c:210 builtin/log.c:1953 builtin/shortlog.c:399
-#, c-format
-msgid "unrecognized argument: %s"
-msgstr "argument no reconegut: %s"
+msgstr "no es pot escriure la versió del farcell %d amb l'algorisme %s"
 
-#: bundle.c:553
+#: bundle.c:600
 msgid "Refusing to create empty bundle."
 msgstr "S'està refusant crear un farcell buit."
 
-#: bundle.c:563
+#: bundle.c:610
 #, c-format
 msgid "cannot create '%s'"
 msgstr "no es pot crear «%s»"
 
-#: bundle.c:588
+#: bundle.c:639
 msgid "index-pack died"
 msgstr "l'index-pack s'ha mort"
 
@@ -2219,7 +2273,7 @@ msgstr "el fragment final té un id %<PRIx32> que no és zero"
 msgid "invalid color value: %.*s"
 msgstr "valor de color no vàlid: %.*s"
 
-#: commit-graph.c:204 midx.c:51
+#: commit-graph.c:204 midx.c:52
 msgid "invalid hash version"
 msgstr "especificació de hash no vàlida"
 
@@ -2250,225 +2304,227 @@ msgid "commit-graph file is too small to hold %u chunks"
 msgstr ""
 "el fitxer del graf de comissions és massa petit per a guardar %u fragments"
 
-#: commit-graph.c:482
+#: commit-graph.c:485
 msgid "commit-graph has no base graphs chunk"
 msgstr "el fragment del graf de comissions no té grafs de base"
 
-#: commit-graph.c:492
+#: commit-graph.c:495
 msgid "commit-graph chain does not match"
 msgstr "la cadena del graf de comissions no coincideix"
 
-#: commit-graph.c:540
+#: commit-graph.c:543
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
 msgstr ""
 "la cadena del graf de comissions no és vàlida: la línia «%s» no és un hash"
 
-#: commit-graph.c:564
+#: commit-graph.c:567
 msgid "unable to find all commit-graph files"
 msgstr "no es poden trobar tots els fitxers del graf de comissions"
 
-#: commit-graph.c:749 commit-graph.c:786
+#: commit-graph.c:752 commit-graph.c:789
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr ""
 "posició de la comissió no vàlida. Probablement el graf de comissions està "
 "malmès"
 
-#: commit-graph.c:770
+#: commit-graph.c:773
 #, c-format
 msgid "could not find commit %s"
 msgstr "no s'ha pogut trobar la comissió %s"
 
-#: commit-graph.c:803
+#: commit-graph.c:806
 msgid "commit-graph requires overflow generation data but has none"
 msgstr ""
 "el graf de comissions requereix dades de generació de desbordaments però no "
 "en té cap"
 
-#: commit-graph.c:1108 builtin/am.c:1369
+#: commit-graph.c:1111 builtin/am.c:1370 builtin/checkout.c:775
+#: builtin/clone.c:705
 #, c-format
 msgid "unable to parse commit %s"
 msgstr "no s'ha pogut analitzar la comissió %s"
 
-#: commit-graph.c:1370 builtin/pack-objects.c:3070
+#: commit-graph.c:1373 builtin/pack-objects.c:3078
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "no s'ha pogut obtenir el tipus de l'objecte: %s"
 
-#: commit-graph.c:1401
+#: commit-graph.c:1404
 msgid "Loading known commits in commit graph"
 msgstr "S'estan carregant comissions conegudes al graf de comissions"
 
-#: commit-graph.c:1418
+#: commit-graph.c:1421
 msgid "Expanding reachable commits in commit graph"
 msgstr "S'estan expandint les comissions abastables al graf de comissions"
 
-#: commit-graph.c:1438
+#: commit-graph.c:1441
 msgid "Clearing commit marks in commit graph"
 msgstr "S'estan esborrant les marques de comissions al graf de comissions"
 
-#: commit-graph.c:1457
+#: commit-graph.c:1460
 msgid "Computing commit graph topological levels"
 msgstr "S'estan calculant els nivells topològics del graf de comissions"
 
-#: commit-graph.c:1510
+#: commit-graph.c:1513
 msgid "Computing commit graph generation numbers"
 msgstr "S'estan calculant els nombres de generació del graf de comissions"
 
-#: commit-graph.c:1591
+#: commit-graph.c:1598
 msgid "Computing commit changed paths Bloom filters"
 msgstr ""
 "S'estan calculant els canvis les rutes de la comissió en els filtres Bloom"
 
-#: commit-graph.c:1668
+#: commit-graph.c:1675
 msgid "Collecting referenced commits"
 msgstr "S'estan recollint els objectes referenciats"
 
-#: commit-graph.c:1693
+#: commit-graph.c:1701
 #, c-format
-msgid "Finding commits for commit graph in %d pack"
-msgid_plural "Finding commits for commit graph in %d packs"
-msgstr[0] "S'estan cercant les comissions pel graf de comissions en %d paquet"
+msgid "Finding commits for commit graph in %<PRIuMAX> pack"
+msgid_plural "Finding commits for commit graph in %<PRIuMAX> packs"
+msgstr[0] ""
+"S'estan cercant les comissions pel graf de comissions en %<PRIuMAX> paquet"
 msgstr[1] ""
-"S'estan cercant les comissions pel graf de comissions en %d paquets"
+"S'estan cercant les comissions pel graf de comissions en %<PRIuMAX> paquets"
 
-#: commit-graph.c:1706
+#: commit-graph.c:1714
 #, c-format
 msgid "error adding pack %s"
 msgstr "error en afegir paquet %s"
 
-#: commit-graph.c:1710
+#: commit-graph.c:1718
 #, c-format
 msgid "error opening index for %s"
 msgstr "s'ha produït un error en obrir l'índex per «%s»"
 
-#: commit-graph.c:1747
+#: commit-graph.c:1756
 msgid "Finding commits for commit graph among packed objects"
 msgstr ""
 "S'estan cercant les comissions pel graf de comissions entre els objectes "
 "empaquetats"
 
-#: commit-graph.c:1765
+#: commit-graph.c:1774
 msgid "Finding extra edges in commit graph"
 msgstr "S'estan cercant les vores addicionals al graf de comissions"
 
-#: commit-graph.c:1814
+#: commit-graph.c:1823
 msgid "failed to write correct number of base graph ids"
 msgstr ""
 "s'ha produït un error en escriure el nombre correcte d'ids base del graf"
 
-#: commit-graph.c:1845 midx.c:1149
+#: commit-graph.c:1854 midx.c:1168 builtin/sparse-checkout.c:475
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "no s'han pogut crear els directoris inicials de «%s»"
 
-#: commit-graph.c:1858
+#: commit-graph.c:1868
 msgid "unable to create temporary graph layer"
 msgstr "no s'ha pogut crear una capa de graf temporal"
 
-#: commit-graph.c:1863
+#: commit-graph.c:1873
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr "no s'han pogut ajustar els permisos compartits per a «%s»"
 
-#: commit-graph.c:1920
+#: commit-graph.c:1930
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "S'està escrivint el graf de comissions en %d pas"
 msgstr[1] "S'està escrivint el graf de comissions en %d passos"
 
-#: commit-graph.c:1956
+#: commit-graph.c:1967
 msgid "unable to open commit-graph chain file"
 msgstr "no s'ha pogut obrir el fitxer d'encadenament del graf de comissions"
 
-#: commit-graph.c:1972
+#: commit-graph.c:1983
 msgid "failed to rename base commit-graph file"
 msgstr "no s'ha pogut canviar el nom del fitxer base del graf de comissions"
 
-#: commit-graph.c:1992
+#: commit-graph.c:2004
 msgid "failed to rename temporary commit-graph file"
 msgstr ""
 "no s'ha pogut canviar el nom del fitxer temporal del graf de comissions"
 
-#: commit-graph.c:2125
+#: commit-graph.c:2137
 msgid "Scanning merged commits"
 msgstr "S'estan escanejant les comissions fusionades"
 
-#: commit-graph.c:2169
+#: commit-graph.c:2181
 msgid "Merging commit-graph"
 msgstr "S'està fusionant el graf de comissions"
 
-#: commit-graph.c:2277
+#: commit-graph.c:2289
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr ""
 "s'està intentant escriure un graf de comissions, però «core.commitGraph» "
 "està desactivat"
 
-#: commit-graph.c:2384
+#: commit-graph.c:2396
 msgid "too many commits to write graph"
 msgstr "massa comissions per a escriure un graf"
 
-#: commit-graph.c:2482
+#: commit-graph.c:2494
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 "el fitxer commit-graph (graf de comissions) té una suma de verificació "
 "incorrecta i probablement és corrupte"
 
-#: commit-graph.c:2492
+#: commit-graph.c:2504
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "el gràfic de comissions té una ordre OID incorrecta; %s llavors %s"
 
-#: commit-graph.c:2502 commit-graph.c:2517
+#: commit-graph.c:2514 commit-graph.c:2529
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr ""
 "el graf de comissions té un valor de «fanout» incorrecte: fanout[%d] = %u !="
 " %u"
 
-#: commit-graph.c:2509
+#: commit-graph.c:2521
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr ""
 "s'ha produït un error en analitzar la comissió %s del graf de comissions"
 
-#: commit-graph.c:2527
+#: commit-graph.c:2539
 msgid "Verifying commits in commit graph"
 msgstr "S'estan verificant les comissions al graf de comissions"
 
-#: commit-graph.c:2542
+#: commit-graph.c:2554
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "no s'han pogut analitzar la comissió %s de la base de dades d'objectes per "
 "al graf de comissions"
 
-#: commit-graph.c:2549
+#: commit-graph.c:2561
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
 "OID de l'arbre arrel per a comissions %s en el graf de comissions és %s != "
 "%s"
 
-#: commit-graph.c:2559
+#: commit-graph.c:2571
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr ""
 "la llista de pares del graf de comissions per a la comissió %s és massa "
 "llarga"
 
-#: commit-graph.c:2568
+#: commit-graph.c:2580
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "el pare pel graf de comissions %s és %s != %s"
 
-#: commit-graph.c:2582
+#: commit-graph.c:2594
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr "la llista pare del graf de comissions per %s acaba aviat"
 
-#: commit-graph.c:2587
+#: commit-graph.c:2599
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero "
@@ -2477,7 +2533,7 @@ msgstr ""
 "el graf de comissions té nombre de generació zero per a la comissió %s, però"
 " té no zero en altres llocs"
 
-#: commit-graph.c:2591
+#: commit-graph.c:2603
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero "
@@ -2486,32 +2542,32 @@ msgstr ""
 "el graf de comissions té un nombre de generació diferent de zero per a "
 "comissió %s però té zero en altres llocs"
 
-#: commit-graph.c:2608
+#: commit-graph.c:2620
 #, c-format
 msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
 msgstr ""
 "generació del graf de comissions per a la comissió %s és %<PRIuMAX> < "
 "%<PRIuMAX>"
 
-#: commit-graph.c:2614
+#: commit-graph.c:2626
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
 "la data d'enviament per a la comissió %s en el graf de comissions és "
 "%<PRIuMAX> != %<PRIuMAX>"
 
-#: commit.c:53 sequencer.c:3109 builtin/am.c:399 builtin/am.c:444
-#: builtin/am.c:449 builtin/am.c:1448 builtin/am.c:2123 builtin/replace.c:456
+#: commit.c:54 sequencer.c:3105 builtin/am.c:400 builtin/am.c:445
+#: builtin/am.c:450 builtin/am.c:1449 builtin/am.c:2124 builtin/replace.c:456
 #, c-format
 msgid "could not parse %s"
 msgstr "no s'ha pogut analitzar %s"
 
-#: commit.c:55
+#: commit.c:56
 #, c-format
 msgid "%s %s is not a commit!"
 msgstr "%s %s no és una comissió!"
 
-#: commit.c:196
+#: commit.c:197
 msgid ""
 "Support for <GIT_DIR>/info/grafts is deprecated\n"
 "and will be removed in a future Git version.\n"
@@ -2531,27 +2587,27 @@ msgstr ""
 "Desactiveu aquest missatge executant\n"
 "«git config advice.graftFileDeprecated false»"
 
-#: commit.c:1241
+#: commit.c:1252
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr "La comissió %s té una signatura GPG no fiable, suposadament de %s."
 
-#: commit.c:1245
+#: commit.c:1256
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "La comissió %s té una signatura GPG incorrecta suposadament de %s."
 
-#: commit.c:1248
+#: commit.c:1259
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "La comissió %s no té signatura GPG."
 
-#: commit.c:1251
+#: commit.c:1262
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "La comissió %s té una signatura GPG bona de %s\n"
 
-#: commit.c:1505
+#: commit.c:1516
 msgid ""
 "Warning: commit message did not conform to UTF-8.\n"
 "You may want to amend it after fixing the message, or set the config\n"
@@ -2566,7 +2622,15 @@ msgstr ""
 msgid "memory exhausted"
 msgstr "memòria esgotada"
 
-#: config.c:125
+#: compat/terminal.c:167
+msgid "cannot resume in the background, please use 'fg' to resume"
+msgstr "no es pot reprendre en segon pla, si us plau useu «fg» per a reprendre"
+
+#: compat/terminal.c:168
+msgid "cannot restore terminal settings"
+msgstr "no es poden restaurar els paràmetres del terminal"
+
+#: config.c:143
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2581,345 +2645,372 @@ msgstr ""
 "\t%s\n"
 "Això pot ser degut a inclusions circulars."
 
-#: config.c:141
+#: config.c:159
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "no s'ha pogut expandir el camí d'inclusió «%s»"
 
-#: config.c:152
+#: config.c:170
 msgid "relative config includes must come from files"
 msgstr "les inclusions de configuració relatives han de venir de fitxers"
 
-#: config.c:201
+#: config.c:219
 msgid "relative config include conditionals must come from files"
 msgstr ""
 "els condicionals d'inclusió de configuració relatius han de venir de fitxers"
 
-#: config.c:398
+#: config.c:364
+msgid ""
+"remote URLs cannot be configured in file directly or indirectly included by "
+"includeIf.hasconfig:remote.*.url"
+msgstr ""
+"URL remots no es poden configurar en un fitxer directament o indirectament "
+"inclòs per «includeIf.hasconfig:remote.*.url»"
+
+#: config.c:508
 #, c-format
 msgid "invalid config format: %s"
 msgstr "format de configuració no vàlid: %s"
 
-#: config.c:402
+#: config.c:512
 #, c-format
 msgid "missing environment variable name for configuration '%.*s'"
 msgstr "falta el nom de la variable d'entorn per a la configuració «%.*s»"
 
-#: config.c:407
+#: config.c:517
 #, c-format
 msgid "missing environment variable '%s' for configuration '%.*s'"
 msgstr "falta la variable d'entorn «%s» per a la configuració «%.*s»"
 
-#: config.c:443
+#: config.c:553
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "la clau no conté una secció: «%s»"
 
-#: config.c:448
+#: config.c:558
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr "la clau no conté un nom de variable: «%s»"
 
-#: config.c:470 sequencer.c:2806
+#: config.c:580 sequencer.c:2802
 #, c-format
 msgid "invalid key: %s"
 msgstr "clau no vàlida: %s"
 
-#: config.c:475
+#: config.c:585
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "clau no vàlida (línia nova): %s"
 
-#: config.c:495
+#: config.c:605
 msgid "empty config key"
 msgstr "clau de configuració buida"
 
-#: config.c:513 config.c:525
+#: config.c:623 config.c:635
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "paràmetre de configuració erroni: %s"
 
-#: config.c:539 config.c:556 config.c:563 config.c:572
+#: config.c:649 config.c:666 config.c:673 config.c:682
 #, c-format
 msgid "bogus format in %s"
 msgstr "format erroni a %s"
 
-#: config.c:606
+#: config.c:716
 #, c-format
 msgid "bogus count in %s"
 msgstr "comptatge erroni a %s"
 
-#: config.c:610
+#: config.c:720
 #, c-format
 msgid "too many entries in %s"
 msgstr "hi ha massa arguments a %s"
 
-#: config.c:620
+#: config.c:730
 #, c-format
 msgid "missing config key %s"
 msgstr "falta la clau de configuració %s"
 
-#: config.c:628
+#: config.c:738
 #, c-format
 msgid "missing config value %s"
 msgstr "falta el valor de configuració %s"
 
-#: config.c:979
+#: config.c:1089
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "línia de configuració %d errònia en el blob %s"
 
-#: config.c:983
+#: config.c:1093
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "línia de configuració %d errònia en el fitxer %s"
 
-#: config.c:987
+#: config.c:1097
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "línia de configuració %d errònia en l'entrada estàndard"
 
-#: config.c:991
+#: config.c:1101
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "línia de configuració %d errònia en el blob de submòdul %s"
 
-#: config.c:995
+#: config.c:1105
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "línia de configuració %d errònia en la línia d'ordres %s"
 
-#: config.c:999
+#: config.c:1109
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "línia de configuració %d errònia en %s"
 
-#: config.c:1136
+#: config.c:1246
 msgid "out of range"
 msgstr "fora de rang"
 
-#: config.c:1136
+#: config.c:1246
 msgid "invalid unit"
 msgstr "unitat no vàlida"
 
-#: config.c:1137
+#: config.c:1247
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "valor de configuració numèric erroni «%s» per «%s»: %s"
 
-#: config.c:1147
+#: config.c:1257
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr "valor de configuració numèric erroni «%s» per «%s» en el blob %s: %s"
 
-#: config.c:1150
+#: config.c:1260
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr ""
 "valor de configuració numèric «%s» erroni per «%s» en el fitxer %s: %s"
 
-#: config.c:1153
+#: config.c:1263
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr ""
 "valor de configuració numèric «%s» erroni per «%s» en l'entrada estàndard: "
 "%s"
 
-#: config.c:1156
+#: config.c:1266
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr ""
 "valor de configuració numèric «%s» erroni per «%s» en el blob de submòdul "
 "%s: %s"
 
-#: config.c:1159
+#: config.c:1269
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr ""
 "valor de configuració numèric «%s» erroni per «%s» en la línia d'ordres %s: "
 "%s"
 
-#: config.c:1162
+#: config.c:1272
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr "valor de configuració numèric incorrecte «%s» per «%s» en %s: %s"
 
-#: config.c:1241
+#: config.c:1368
+#, c-format
+msgid "invalid value for variable %s"
+msgstr "valor no vàlid per a la variable %s"
+
+#: config.c:1389
+#, c-format
+msgid "ignoring unknown core.fsync component '%s'"
+msgstr "s'ignora el component core.fsync «%s» desconegut"
+
+#: config.c:1425
 #, c-format
 msgid "bad boolean config value '%s' for '%s'"
 msgstr "valor de configuració booleà erroni «%s» per a «%s»"
 
-#: config.c:1259
+#: config.c:1443
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "s'ha produït un error en expandir el directori d'usuari en: «%s»"
 
-#: config.c:1268
+#: config.c:1452
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "«%s» per a «%s» no és una marca de temps vàlida"
 
-#: config.c:1361
+#: config.c:1545
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "la longitud d'«abbrev» està fora de rang: %d"
 
-#: config.c:1375 config.c:1386
+#: config.c:1559 config.c:1570
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "nivell de compressió de zlib incorrecte %d"
 
-#: config.c:1476
+#: config.c:1660
 msgid "core.commentChar should only be one character"
 msgstr "core.commentChar només hauria de ser un caràcter"
 
-#: config.c:1509
+#: config.c:1692
+#, c-format
+msgid "ignoring unknown core.fsyncMethod value '%s'"
+msgstr "s'ignora el valor desconegut «%s» de core.fsyncMethod"
+
+#: config.c:1698
+msgid "core.fsyncObjectFiles is deprecated; use core.fsync instead"
+msgstr "core.fsyncObjectFiles és obsolet; useu core.fsync"
+
+#: config.c:1714
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "mode de creació d'objecte no vàlid: %s"
 
-#: config.c:1584
+#: config.c:1800
 #, c-format
 msgid "malformed value for %s"
 msgstr "valor no vàlid per a %s"
 
-#: config.c:1610
+#: config.c:1826
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "valor no vàlid per a %s: %s"
 
-#: config.c:1611
+#: config.c:1827
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr ""
 "ha de ser un dels elements següents: nothing, matching, simple, upstream o "
 "current"
 
-#: config.c:1672 builtin/pack-objects.c:4053
+#: config.c:1888 builtin/pack-objects.c:4078
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "nivell de compressió de paquet %d erroni"
 
-#: config.c:1795
+#: config.c:2014
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "no s'ha pogut carregar l'objecte blob de configuració «%s»"
 
-#: config.c:1798
+#: config.c:2017
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "la referència «%s» no assenyala a un blob"
 
-#: config.c:1816
+#: config.c:2035
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "no s'ha pogut resoldre el blob de configuració: «%s»"
 
-#: config.c:1861
+#: config.c:2080
 #, c-format
 msgid "failed to parse %s"
 msgstr "s'ha produït un error en analitzar %s"
 
-#: config.c:1917
+#: config.c:2136
 msgid "unable to parse command-line config"
 msgstr "no s'ha pogut analitzar la configuració de la línia d'ordres"
 
-#: config.c:2285
+#: config.c:2512
 msgid "unknown error occurred while reading the configuration files"
 msgstr ""
 "un error desconegut ha ocorregut en llegir els fitxers de configuració"
 
-#: config.c:2459
+#: config.c:2686
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "%s no vàlid: «%s»"
 
-#: config.c:2504
+#: config.c:2731
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr "valor «%d» a splitIndex.maxPercentChange ha d'estar entre 0 i 100"
 
-#: config.c:2550
+#: config.c:2763
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "no s'ha pogut analitzar «%s» de la configuració de la línia d'ordres"
 
-#: config.c:2552
+#: config.c:2765
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "variable de configuració «%s» errònia en el fitxer «%s» a la línia %d"
 
-#: config.c:2637
+#: config.c:2850
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "nom de secció no vàlid «%s»"
 
-#: config.c:2669
+#: config.c:2882
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s té múltiples valors"
 
-#: config.c:2698
+#: config.c:2911
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "no es pot escriure un nou fitxer de configuració %s"
 
-#: config.c:2950 config.c:3277
+#: config.c:3177 config.c:3518
 #, c-format
 msgid "could not lock config file %s"
 msgstr "no s'ha pogut blocar el fitxer de configuració %s"
 
-#: config.c:2961
+#: config.c:3188
 #, c-format
 msgid "opening %s"
 msgstr "s'està obrint %s"
 
-#: config.c:2998 builtin/config.c:361
+#: config.c:3225 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "patró no vàlid: %s"
 
-#: config.c:3023
+#: config.c:3250
 #, c-format
 msgid "invalid config file %s"
 msgstr "fitxer de configuració no vàlid %s"
 
-#: config.c:3036 config.c:3290
+#: config.c:3263 config.c:3531
 #, c-format
 msgid "fstat on %s failed"
 msgstr "ha fallat «fstat» a %s"
 
-#: config.c:3047
+#: config.c:3274
 #, c-format
 msgid "unable to mmap '%s'%s"
 msgstr "no s'ha pogut fer «mmap» «%s»%s"
 
-#: config.c:3057 config.c:3295
+#: config.c:3284 config.c:3536
 #, c-format
 msgid "chmod on %s failed"
 msgstr "ha fallat chmod a %s"
 
-#: config.c:3142 config.c:3392
+#: config.c:3369 config.c:3633
 #, c-format
 msgid "could not write config file %s"
 msgstr "no s'ha pogut escriure el fitxer de configuració «%s»"
 
-#: config.c:3176
+#: config.c:3403
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "no s'ha pogut establir «%s» a «%s»"
 
-#: config.c:3178 builtin/remote.c:662 builtin/remote.c:860
-#: builtin/remote.c:868
+#: config.c:3405 builtin/remote.c:666 builtin/remote.c:885
+#: builtin/remote.c:893
 #, c-format
 msgid "could not unset '%s'"
 msgstr "no s'ha pogut desassignar «%s»"
 
-#: config.c:3268
+#: config.c:3509
 #, c-format
 msgid "invalid section name: %s"
 msgstr "nom de secció no vàlida: %s"
 
-#: config.c:3435
+#: config.c:3676
 #, c-format
 msgid "missing value for '%s'"
 msgstr "falta el valor per «%s»"
@@ -3261,68 +3352,68 @@ msgid "refusing to work with credential missing protocol field"
 msgstr ""
 "s'ha rebutjat treballar amb credencials que no tenen el camp de protocol"
 
-#: credential.c:395
+#: credential.c:396
 #, c-format
 msgid "url contains a newline in its %s component: %s"
 msgstr "url conté una línia nova en %s component: %s"
 
-#: credential.c:439
+#: credential.c:440
 #, c-format
 msgid "url has no scheme: %s"
 msgstr "l'url no té esquema: %s"
 
-#: credential.c:512
+#: credential.c:513
 #, c-format
 msgid "credential url cannot be parsed: %s"
 msgstr "no s'ha pogut analitzar l'URL de credencials: %s"
 
-#: date.c:138
+#: date.c:139
 msgid "in the future"
 msgstr "en el futur"
 
-#: date.c:144
+#: date.c:145
 #, c-format
 msgid "%<PRIuMAX> second ago"
 msgid_plural "%<PRIuMAX> seconds ago"
 msgstr[0] "fa %<PRIuMAX> segon"
 msgstr[1] "fa %<PRIuMAX> segons"
 
-#: date.c:151
+#: date.c:152
 #, c-format
 msgid "%<PRIuMAX> minute ago"
 msgid_plural "%<PRIuMAX> minutes ago"
 msgstr[0] "fa %<PRIuMAX> minut"
 msgstr[1] "fa %<PRIuMAX> minuts"
 
-#: date.c:158
+#: date.c:159
 #, c-format
 msgid "%<PRIuMAX> hour ago"
 msgid_plural "%<PRIuMAX> hours ago"
 msgstr[0] "fa %<PRIuMAX> hora"
 msgstr[1] "fa %<PRIuMAX> hores"
 
-#: date.c:165
+#: date.c:166
 #, c-format
 msgid "%<PRIuMAX> day ago"
 msgid_plural "%<PRIuMAX> days ago"
 msgstr[0] "fa %<PRIuMAX> dia"
 msgstr[1] "fa %<PRIuMAX> dies"
 
-#: date.c:171
+#: date.c:172
 #, c-format
 msgid "%<PRIuMAX> week ago"
 msgid_plural "%<PRIuMAX> weeks ago"
 msgstr[0] "fa %<PRIuMAX> setmana"
 msgstr[1] "fa %<PRIuMAX> setmanes"
 
-#: date.c:178
+#: date.c:179
 #, c-format
 msgid "%<PRIuMAX> month ago"
 msgid_plural "%<PRIuMAX> months ago"
 msgstr[0] "fa %<PRIuMAX> mes"
 msgstr[1] "fa %<PRIuMAX> mesos"
 
-#: date.c:189
+#: date.c:190
 #, c-format
 msgid "%<PRIuMAX> year"
 msgid_plural "%<PRIuMAX> years"
@@ -3330,14 +3421,14 @@ msgstr[0] "%<PRIuMAX> any"
 msgstr[1] "%<PRIuMAX> anys"
 
 #. TRANSLATORS: "%s" is "<n> years"
-#: date.c:192
+#: date.c:193
 #, c-format
 msgid "%s, %<PRIuMAX> month ago"
 msgid_plural "%s, %<PRIuMAX> months ago"
 msgstr[0] "fa %s i %<PRIuMAX> mes"
 msgstr[1] "fa %s i %<PRIuMAX> mesos"
 
-#: date.c:197 date.c:202
+#: date.c:198 date.c:203
 #, c-format
 msgid "%<PRIuMAX> year ago"
 msgid_plural "%<PRIuMAX> years ago"
@@ -3371,10 +3462,14 @@ msgstr ""
 msgid "Marked %d islands, done.\n"
 msgstr "Marcades %d illes, fet.\n"
 
-#: diff-merges.c:70
+#: diff-merges.c:81 gpg-interface.c:719 gpg-interface.c:734 ls-refs.c:37
+#: parallel-checkout.c:42 sequencer.c:2805 setup.c:562 builtin/am.c:203
+#: builtin/am.c:2243 builtin/am.c:2287 builtin/blame.c:724 builtin/blame.c:742
+#: builtin/fetch.c:792 builtin/pack-objects.c:3515 builtin/pull.c:45
+#: builtin/pull.c:47 builtin/pull.c:321
 #, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr "valor desconegut per a --diff-merges: %s"
+msgid "invalid value for '%s': '%s'"
+msgstr "valor no vàlid per a «%s»: «%s»"
 
 #: diff-lib.c:561
 msgid "--merge-base does not work with ranges"
@@ -3408,19 +3503,19 @@ msgstr ""
 "No és un repositori Git. Useu --no-index per a comparar dos camins fora del "
 "directori de treball"
 
-#: diff.c:158
+#: diff.c:159
 #, c-format
 msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
 msgstr ""
 "  S'ha produït un error en analitzar el percentatge limitant de dirstat "
 "«%s»\n"
 
-#: diff.c:163
+#: diff.c:164
 #, c-format
 msgid "  Unknown dirstat parameter '%s'\n"
 msgstr "  Paràmetre de dirstat desconegut «%s»\n"
 
-#: diff.c:299
+#: diff.c:300
 msgid ""
 "color moved setting must be one of 'no', 'default', 'blocks', 'zebra', "
 "'dimmed-zebra', 'plain'"
@@ -3428,7 +3523,7 @@ msgstr ""
 "el paràmetre de color en moviment ha de ser «no», «default», «blocks», "
 "«zebra», «dimmed-zebra» o «plain»"
 
-#: diff.c:327
+#: diff.c:328
 #, c-format
 msgid ""
 "unknown color-moved-ws mode '%s', possible values are 'ignore-space-change',"
@@ -3438,7 +3533,7 @@ msgstr ""
 "«ignore-space-change», «ignore-space-at-eol», «ignore-all-space», «allow-"
 "indentation-change»"
 
-#: diff.c:335
+#: diff.c:336
 msgid ""
 "color-moved-ws: allow-indentation-change cannot be combined with other "
 "whitespace modes"
@@ -3446,13 +3541,13 @@ msgstr ""
 "color-moved-ws: allow-indentation-change no es pot combinar amb altres modes"
 " d'espai en blanc"
 
-#: diff.c:412
+#: diff.c:413
 #, c-format
 msgid "Unknown value for 'diff.submodule' config variable: '%s'"
 msgstr ""
 "Valor desconegut de la variable de configuració de «diff.submodule»: «%s»"
 
-#: diff.c:472
+#: diff.c:473
 #, c-format
 msgid ""
 "Found errors in 'diff.dirstat' config variable:\n"
@@ -3461,49 +3556,49 @@ msgstr ""
 "S'han trobat errors en la variable de configuració «diff.dirstat»:\n"
 "%s"
 
-#: diff.c:4237
+#: diff.c:4282
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "el diff external s'ha mort, s'està aturant a %s"
 
-#: diff.c:4589
+#: diff.c:4677 parse-options.c:1114
 #, c-format
 msgid "options '%s', '%s', '%s', and '%s' cannot be used together"
 msgstr "les opcions «%s», «%s», «%s», i «%s» no es poden usar juntes"
 
-#: diff.c:4593 builtin/difftool.c:736 builtin/log.c:1982
-#: builtin/worktree.c:506
+#: diff.c:4681 parse-options.c:1118 builtin/worktree.c:578
 #, c-format
 msgid "options '%s', '%s', and '%s' cannot be used together"
 msgstr "les opcions «%s», «%s», i «%s» no es poden usar juntes"
 
-#: diff.c:4597
+#: diff.c:4685
 #, c-format
 msgid "options '%s' and '%s' cannot be used together, use '%s' with '%s'"
 msgstr "les opcions «%s» i «%s» no es poden usar juntes, useu «%s» amb «%s»"
 
-#: diff.c:4601
+#: diff.c:4689
 #, c-format
 msgid ""
 "options '%s' and '%s' cannot be used together, use '%s' with '%s' and '%s'"
-msgstr "les opcions «%s» i «%s» no es poden usar juntes, useu «%s» amb «%s» i «%s»"
+msgstr ""
+"les opcions «%s» i «%s» no es poden usar juntes, useu «%s» amb «%s» i «%s»"
 
-#: diff.c:4681
+#: diff.c:4769
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow requereix exactament una especificació de camí"
 
-#: diff.c:4729
+#: diff.c:4823
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "valor --stat no vàlid: %s"
 
-#: diff.c:4734 diff.c:4739 diff.c:4744 diff.c:4749 diff.c:5277
+#: diff.c:4828 diff.c:4833 diff.c:4838 diff.c:4843 diff.c:5319
 #: parse-options.c:217 parse-options.c:221
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s espera un valor numèric"
 
-#: diff.c:4766
+#: diff.c:4860
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3512,199 +3607,199 @@ msgstr ""
 "S'ha produït un error en analitzar el paràmetre d'opció de --dirstat/-X:\n"
 "%s"
 
-#: diff.c:4851
+#: diff.c:4893
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "classe de canvi «%c» desconeguda a --diff-filter=%s"
 
-#: diff.c:4875
+#: diff.c:4917
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "valor desconegut després de ws-error-highlight=%.*s"
 
-#: diff.c:4889
+#: diff.c:4931
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "no s'ha pogut resoldre «%s»"
 
-#: diff.c:4939 diff.c:4945
+#: diff.c:4981 diff.c:4987
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s espera una forma <n>/<m>"
 
-#: diff.c:4957
+#: diff.c:4999
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s esperava un caràcter, s'ha rebut «%s»"
 
-#: diff.c:4978
+#: diff.c:5020
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "argument --color-moved incorrecte: %s"
 
-#: diff.c:4997
+#: diff.c:5039
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "mode «%s» no vàlid en --color-moved-ws"
 
-#: diff.c:5037
+#: diff.c:5079
 msgid "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and \"histogram\""
 msgstr ""
 "l'opció diff-algorithm accepta «myers», «minimal», «patience» i «histogram»"
 
-#: diff.c:5073 diff.c:5093
+#: diff.c:5115 diff.c:5135
 #, c-format
 msgid "invalid argument to %s"
 msgstr "argument no vàlid a %s"
 
-#: diff.c:5197
+#: diff.c:5239
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr "expressió regular donada a -I: no vàlida: «%s»"
 
-#: diff.c:5246
+#: diff.c:5288
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr ""
 "s'ha produït un error en analitzar el paràmetre d'opció de --submodule: «%s»"
 
-#: diff.c:5302
+#: diff.c:5344
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "argument --word-diff incorrecte: %s"
 
-#: diff.c:5338
+#: diff.c:5380
 msgid "Diff output format options"
 msgstr "Opcions del format de sortida del diff"
 
-#: diff.c:5340 diff.c:5346
+#: diff.c:5382 diff.c:5388
 msgid "generate patch"
 msgstr "genera el pedaç"
 
-#: diff.c:5343 builtin/log.c:179
+#: diff.c:5385 builtin/log.c:180
 msgid "suppress diff output"
 msgstr "omet la sortida de diferències"
 
-#: diff.c:5348 diff.c:5462 diff.c:5469
+#: diff.c:5390 diff.c:5504 diff.c:5511
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5349 diff.c:5352
+#: diff.c:5391 diff.c:5394
 msgid "generate diffs with <n> lines context"
 msgstr "genera diffs amb <n> línies de context"
 
-#: diff.c:5354
+#: diff.c:5396
 msgid "generate the diff in raw format"
 msgstr "genera el diff en format cru"
 
-#: diff.c:5357
+#: diff.c:5399
 msgid "synonym for '-p --raw'"
 msgstr "sinònim de «-p --raw»"
 
-#: diff.c:5361
+#: diff.c:5403
 msgid "synonym for '-p --stat'"
 msgstr "sinònim de «-p --stat»"
 
-#: diff.c:5365
+#: diff.c:5407
 msgid "machine friendly --stat"
 msgstr "llegible per màquina --stat"
 
-#: diff.c:5368
+#: diff.c:5410
 msgid "output only the last line of --stat"
 msgstr "mostra només l'última línia de --stat"
 
-#: diff.c:5370 diff.c:5378
+#: diff.c:5412 diff.c:5420
 msgid "<param1,param2>..."
 msgstr "<param1,param2>..."
 
-#: diff.c:5371
+#: diff.c:5413
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
 "genera la distribució de la quantitat relativa de canvis per a cada "
 "subdirectori"
 
-#: diff.c:5375
+#: diff.c:5417
 msgid "synonym for --dirstat=cumulative"
 msgstr "sinònim de --dirstat=cumulative"
 
-#: diff.c:5379
+#: diff.c:5421
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "sinònim de --dirstat=files,param1,param2..."
 
-#: diff.c:5383
+#: diff.c:5425
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 "avisa si els canvis introdueixen marcadors en conflicte o errors d'espai en "
 "blanc"
 
-#: diff.c:5386
+#: diff.c:5428
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr "resum condensat com ara creacions, canvis de nom i mode"
 
-#: diff.c:5389
+#: diff.c:5431
 msgid "show only names of changed files"
 msgstr "mostra només els noms de fitxers canviats"
 
-#: diff.c:5392
+#: diff.c:5434
 msgid "show only names and status of changed files"
 msgstr "mostra només els noms i l'estat dels fitxers canviats"
 
-#: diff.c:5394
+#: diff.c:5436
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<amplada>[<amplada-nom>[,<recompte>]]"
 
-#: diff.c:5395
+#: diff.c:5437
 msgid "generate diffstat"
 msgstr "genera diffstat"
 
-#: diff.c:5397 diff.c:5400 diff.c:5403
+#: diff.c:5439 diff.c:5442 diff.c:5445
 msgid "<width>"
 msgstr "<amplada>"
 
-#: diff.c:5398
+#: diff.c:5440
 msgid "generate diffstat with a given width"
 msgstr "genera diffstat amb una amplada donada"
 
-#: diff.c:5401
+#: diff.c:5443
 msgid "generate diffstat with a given name width"
 msgstr "genera diffstat amb un nom d'amplada donat"
 
-#: diff.c:5404
+#: diff.c:5446
 msgid "generate diffstat with a given graph width"
 msgstr "genera diffstat amb una amplada de graf donada"
 
-#: diff.c:5406
+#: diff.c:5448
 msgid "<count>"
 msgstr "<comptador>"
 
-#: diff.c:5407
+#: diff.c:5449
 msgid "generate diffstat with limited lines"
 msgstr "genera diffstat amb línies limitades"
 
-#: diff.c:5410
+#: diff.c:5452
 msgid "generate compact summary in diffstat"
 msgstr "genera un resum compacte a diffstat"
 
-#: diff.c:5413
+#: diff.c:5455
 msgid "output a binary diff that can be applied"
 msgstr "diff amb sortida binària que pot ser aplicada"
 
-#: diff.c:5416
+#: diff.c:5458
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr ""
 "mostra els noms complets dels objectes pre i post-imatge a les línies "
 "«index»"
 
-#: diff.c:5418
+#: diff.c:5460
 msgid "show colored diff"
 msgstr "mostra un diff amb colors"
 
-#: diff.c:5419
+#: diff.c:5461
 msgid "<kind>"
 msgstr "<kind>"
 
-#: diff.c:5420
+#: diff.c:5462
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
@@ -3712,7 +3807,7 @@ msgstr ""
 "ressalta els errors d'espai en blanc a les línies «context», «old» o «new» "
 "al diff"
 
-#: diff.c:5423
+#: diff.c:5465
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -3720,92 +3815,92 @@ msgstr ""
 "no consolidis els noms de camí i utilitza NULs com a terminadors de camp de "
 "sortida en --raw o --numstat"
 
-#: diff.c:5426 diff.c:5429 diff.c:5432 diff.c:5541
+#: diff.c:5468 diff.c:5471 diff.c:5474 diff.c:5583
 msgid "<prefix>"
 msgstr "<prefix>"
 
-#: diff.c:5427
+#: diff.c:5469
 msgid "show the given source prefix instead of \"a/\""
 msgstr "mostra el prefix d'origen donat en lloc de «a/»"
 
-#: diff.c:5430
+#: diff.c:5472
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "mostra el prefix de destinació indicat en lloc de «b/»"
 
-#: diff.c:5433
+#: diff.c:5475
 msgid "prepend an additional prefix to every line of output"
 msgstr "afegir un prefix addicional per a cada línia de sortida"
 
-#: diff.c:5436
+#: diff.c:5478
 msgid "do not show any source or destination prefix"
 msgstr "no mostris cap prefix d'origen o destí"
 
-#: diff.c:5439
+#: diff.c:5481
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr ""
 "mostra el context entre trossos de diferència fins al nombre especificat de "
 "línies"
 
-#: diff.c:5443 diff.c:5448 diff.c:5453
+#: diff.c:5485 diff.c:5490 diff.c:5495
 msgid "<char>"
 msgstr "<char>"
 
-#: diff.c:5444
+#: diff.c:5486
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr ""
 "especifiqueu el caràcter per a indicar una línia nova en comptes de «+»"
 
-#: diff.c:5449
+#: diff.c:5491
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr ""
 "especifiqueu el caràcter per a indicar una línia antiga en comptes de «-»"
 
-#: diff.c:5454
+#: diff.c:5496
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "especifiqueu el caràcter per a indicar context en comptes de « »"
 
-#: diff.c:5457
+#: diff.c:5499
 msgid "Diff rename options"
 msgstr "Opcions de canvi de nom del diff"
 
-#: diff.c:5458
+#: diff.c:5500
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5459
+#: diff.c:5501
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr ""
 "divideix els canvis de reescriptura completa en parells de suprimir i crear"
 
-#: diff.c:5463
+#: diff.c:5505
 msgid "detect renames"
 msgstr "detecta els canvis de noms"
 
-#: diff.c:5467
+#: diff.c:5509
 msgid "omit the preimage for deletes"
 msgstr "omet les preimatges per les supressions"
 
-#: diff.c:5470
+#: diff.c:5512
 msgid "detect copies"
 msgstr "detecta còpies"
 
-#: diff.c:5474
+#: diff.c:5516
 msgid "use unmodified files as source to find copies"
 msgstr "usa els fitxers no modificats com a font per a trobar còpies"
 
-#: diff.c:5476
+#: diff.c:5518
 msgid "disable rename detection"
 msgstr "inhabilita la detecció de canvis de nom"
 
-#: diff.c:5479
+#: diff.c:5521
 msgid "use empty blobs as rename source"
 msgstr "usa els blobs buits com a font de canvi de nom"
 
-#: diff.c:5481
+#: diff.c:5523
 msgid "continue listing the history of a file beyond renames"
 msgstr "continua llistant l'històric d'un fitxer més enllà dels canvis de nom"
 
-#: diff.c:5484
+#: diff.c:5526
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
@@ -3813,162 +3908,162 @@ msgstr ""
 "evita la detecció de canvi de nom/còpia si el nombre d'objectius de canvi de"
 " nom/còpia supera el límit indicat"
 
-#: diff.c:5486
+#: diff.c:5528
 msgid "Diff algorithm options"
 msgstr "Opcions de l'algorisme Diff"
 
-#: diff.c:5488
+#: diff.c:5530
 msgid "produce the smallest possible diff"
 msgstr "produeix el diff més petit possible"
 
-#: diff.c:5491
+#: diff.c:5533
 msgid "ignore whitespace when comparing lines"
 msgstr "ignora els espais en blanc en comparar línies"
 
-#: diff.c:5494
+#: diff.c:5536
 msgid "ignore changes in amount of whitespace"
 msgstr "ignora els canvis en la quantitat d'espai en blanc"
 
-#: diff.c:5497
+#: diff.c:5539
 msgid "ignore changes in whitespace at EOL"
 msgstr "ignora els canvis d'espai en blanc al final de la línia"
 
-#: diff.c:5500
+#: diff.c:5542
 msgid "ignore carrier-return at the end of line"
 msgstr "ignora els retorns de línia al final de la línia"
 
-#: diff.c:5503
+#: diff.c:5545
 msgid "ignore changes whose lines are all blank"
 msgstr "ignora els canvis en línies que estan en blanc"
 
-#: diff.c:5505 diff.c:5527 diff.c:5530 diff.c:5575
+#: diff.c:5547 diff.c:5569 diff.c:5572 diff.c:5617
 msgid "<regex>"
 msgstr "<regex>"
 
-#: diff.c:5506
+#: diff.c:5548
 msgid "ignore changes whose all lines match <regex>"
 msgstr "ignora els canvis en les línies que coincideixen amb <regex>"
 
-#: diff.c:5509
+#: diff.c:5551
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr ""
 "heurística per a desplaçar els límits del tros de diferència per a una "
 "lectura fàcil"
 
-#: diff.c:5512
+#: diff.c:5554
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "genera diff usant l'algorisme «patience diff»"
 
-#: diff.c:5516
+#: diff.c:5558
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "genera diff usant l'algorisme «histogram diff»"
 
-#: diff.c:5518
+#: diff.c:5560
 msgid "<algorithm>"
 msgstr "<algorisme>"
 
-#: diff.c:5519
+#: diff.c:5561
 msgid "choose a diff algorithm"
 msgstr "trieu un algorisme per al diff"
 
-#: diff.c:5521
+#: diff.c:5563
 msgid "<text>"
 msgstr "<text>"
 
-#: diff.c:5522
+#: diff.c:5564
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "genera diff usant l'algorisme «anchored diff»"
 
-#: diff.c:5524 diff.c:5533 diff.c:5536
+#: diff.c:5566 diff.c:5575 diff.c:5578
 msgid "<mode>"
 msgstr "<mode>"
 
-#: diff.c:5525
+#: diff.c:5567
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr ""
 "mostra el diff de paraules usant <mode> per a delimitar les paraules "
 "modificades"
 
-#: diff.c:5528
+#: diff.c:5570
 msgid "use <regex> to decide what a word is"
 msgstr "utilitza <regex> per a decidir què és una paraula"
 
-#: diff.c:5531
+#: diff.c:5573
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "equivalent a --word-diff=color --word-diff-regex=<regex>"
 
-#: diff.c:5534
+#: diff.c:5576
 msgid "moved lines of code are colored differently"
 msgstr "les línies de codi que s'ha mogut s'acoloreixen diferent"
 
-#: diff.c:5537
+#: diff.c:5579
 msgid "how white spaces are ignored in --color-moved"
 msgstr "com s'ignoren els espais en blanc a --color-moved"
 
-#: diff.c:5540
+#: diff.c:5582
 msgid "Other diff options"
 msgstr "Altres opcions diff"
 
-#: diff.c:5542
+#: diff.c:5584
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "quan s'executa des d'un subdirectori, exclou els canvis de fora i mostra els"
 " camins relatius"
 
-#: diff.c:5546
+#: diff.c:5588
 msgid "treat all files as text"
 msgstr "tracta tots els fitxers com a text"
 
-#: diff.c:5548
+#: diff.c:5590
 msgid "swap two inputs, reverse the diff"
 msgstr "intercanvia les dues entrades, inverteix el diff"
 
-#: diff.c:5550
+#: diff.c:5592
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "surt amb 1 si hi ha diferències, 0 en cas contrari"
 
-#: diff.c:5552
+#: diff.c:5594
 msgid "disable all output of the program"
 msgstr "inhabilita totes les sortides del programa"
 
-#: diff.c:5554
+#: diff.c:5596
 msgid "allow an external diff helper to be executed"
 msgstr "permet executar un ajudant de diff extern"
 
-#: diff.c:5556
+#: diff.c:5598
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 "executa els filtres externs de conversió de text en comparar fitxers binaris"
 
-#: diff.c:5558
+#: diff.c:5600
 msgid "<when>"
 msgstr "<quan>"
 
-#: diff.c:5559
+#: diff.c:5601
 msgid "ignore changes to submodules in the diff generation"
 msgstr "ignora els canvis als submòduls en la generació del diff"
 
-#: diff.c:5562
+#: diff.c:5604
 msgid "<format>"
 msgstr "<format>"
 
-#: diff.c:5563
+#: diff.c:5605
 msgid "specify how differences in submodules are shown"
 msgstr "especifiqueu com es mostren els canvis als submòduls"
 
-#: diff.c:5567
+#: diff.c:5609
 msgid "hide 'git add -N' entries from the index"
 msgstr "amaga les entrades «git add -N» de l'índex"
 
-#: diff.c:5570
+#: diff.c:5612
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "tracta les entrades «git add -N» com a reals a l'índex"
 
-#: diff.c:5572
+#: diff.c:5614
 msgid "<string>"
 msgstr "<cadena>"
 
-#: diff.c:5573
+#: diff.c:5615
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
@@ -3976,7 +4071,7 @@ msgstr ""
 "cerca les diferències que canvien el nombre d'ocurrències de la cadena "
 "especificada"
 
-#: diff.c:5576
+#: diff.c:5618
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
@@ -3984,35 +4079,35 @@ msgstr ""
 "cerca les diferències que canvien el nombre d'ocurrències de l'expressió "
 "regular especificada"
 
-#: diff.c:5579
+#: diff.c:5621
 msgid "show all changes in the changeset with -S or -G"
 msgstr "mostra tots els canvis amb el conjunt de canvis amb -S o -G"
 
-#: diff.c:5582
+#: diff.c:5624
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "tracta <cadena> a -S com a expressió regular POSIX ampliada"
 
-#: diff.c:5585
+#: diff.c:5627
 msgid "control the order in which files appear in the output"
 msgstr "controla l'ordre amb el qual els fitxers apareixen en la sortida"
 
-#: diff.c:5586 diff.c:5589
+#: diff.c:5628 diff.c:5631
 msgid "<path>"
 msgstr "<camí>"
 
-#: diff.c:5587
+#: diff.c:5629
 msgid "show the change in the specified path first"
 msgstr "mostra el canvi primer al camí especificat"
 
-#: diff.c:5590
+#: diff.c:5632
 msgid "skip the output to the specified path"
 msgstr "omet la sortida al camí especificat"
 
-#: diff.c:5592
+#: diff.c:5634
 msgid "<object-id>"
 msgstr "<id de l'objecte>"
 
-#: diff.c:5593
+#: diff.c:5635
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
@@ -4020,33 +4115,33 @@ msgstr ""
 "cerca les diferències que canvien el nombre d'ocurrències de l'objecte "
 "especificat"
 
-#: diff.c:5595
+#: diff.c:5637
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5596
+#: diff.c:5638
 msgid "select files by diff type"
 msgstr "seleccioneu els fitxers per tipus de diff"
 
-#: diff.c:5598
+#: diff.c:5640
 msgid "<file>"
 msgstr "<fitxer>"
 
-#: diff.c:5599
-msgid "Output to a specific file"
-msgstr "Sortida a un fitxer específic"
+#: diff.c:5641
+msgid "output to a specific file"
+msgstr "sortida a un fitxer específic"
 
-#: diff.c:6257
+#: diff.c:6321
 msgid "exhaustive rename detection was skipped due to too many files."
 msgstr ""
 "s'ha omès la detecció de canvi de nom exhaustiva perquè hi ha massa fitxers."
 
-#: diff.c:6260
+#: diff.c:6324
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
 "només s'han trobat còpies des de camins modificats perquè de massa fitxers."
 
-#: diff.c:6263
+#: diff.c:6327
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -4100,39 +4195,39 @@ msgstr "inhabilita la coincidència de patrons «cone»"
 msgid "cannot use %s as an exclude file"
 msgstr "no es pot usar %s com a fitxer d'exclusió"
 
-#: dir.c:2418
+#: dir.c:2419
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "no s'ha pogut obrir el directori «%s»"
 
-#: dir.c:2720
+#: dir.c:2721
 msgid "failed to get kernel name and information"
 msgstr "s'ha produït un error en obtenir el nombre i la informació del nucli"
 
-#: dir.c:2844
+#: dir.c:2846
 msgid "untracked cache is disabled on this system or location"
 msgstr ""
 "la memòria cau no seguida està inhabilitada en aquest sistema o ubicació"
 
-#: dir.c:3112
+#: dir.c:3119
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
 msgstr ""
-"No s'ha pogut endevinar cap nom de directori.\n"
+"No s'ha pogut deduir cap nom de directori.\n"
 "Especifiqueu un directori en la línia d'ordres"
 
-#: dir.c:3800
+#: dir.c:3807
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "el fitxer d'índex al repositori %s és malmès"
 
-#: dir.c:3847 dir.c:3852
+#: dir.c:3854 dir.c:3859
 #, c-format
 msgid "could not create directories for %s"
 msgstr "no s'han pogut crear directoris per %s"
 
-#: dir.c:3881
+#: dir.c:3888
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "no s'ha pogut migrar el directori de «%s» a «%s»"
@@ -4151,7 +4246,7 @@ msgstr "S'està filtrant el contingut"
 msgid "could not stat file '%s'"
 msgstr "no s'ha pogut fer «stat» sobre el fitxer «%s»"
 
-#: environment.c:145
+#: environment.c:147
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "camí d'espai de noms git incorrecte «%s»"
@@ -4184,250 +4279,275 @@ msgstr "git fetch-pack: s'esperava ACK/NAK, s'ha rebut «%s»"
 msgid "unable to write to remote"
 msgstr "no s'ha pogut escriure al remot"
 
-#: fetch-pack.c:395 fetch-pack.c:1439
+#: fetch-pack.c:397 fetch-pack.c:1460
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "línia de shallow no vàlida: %s"
 
-#: fetch-pack.c:401 fetch-pack.c:1445
+#: fetch-pack.c:403 fetch-pack.c:1466
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "línia d'unshallow no vàlida: %s"
 
-#: fetch-pack.c:403 fetch-pack.c:1447
+#: fetch-pack.c:405 fetch-pack.c:1468
 #, c-format
 msgid "object not found: %s"
 msgstr "objecte no trobat: %s"
 
-#: fetch-pack.c:406 fetch-pack.c:1450
+#: fetch-pack.c:408 fetch-pack.c:1471
 #, c-format
 msgid "error in object: %s"
 msgstr "error en objecte: %s"
 
-#: fetch-pack.c:408 fetch-pack.c:1452
+#: fetch-pack.c:410 fetch-pack.c:1473
 #, c-format
 msgid "no shallow found: %s"
 msgstr "no s'ha trobat cap shallow: %s"
 
-#: fetch-pack.c:411 fetch-pack.c:1456
+#: fetch-pack.c:413 fetch-pack.c:1477
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "s'esperava shallow/unshallow, s'ha rebut %s"
 
-#: fetch-pack.c:451
+#: fetch-pack.c:453
 #, c-format
 msgid "got %s %d %s"
 msgstr "s'ha rebut %s %d %s"
 
-#: fetch-pack.c:468
+#: fetch-pack.c:470
 #, c-format
 msgid "invalid commit %s"
 msgstr "comissió no vàlida %s"
 
-#: fetch-pack.c:499
+#: fetch-pack.c:501
 msgid "giving up"
 msgstr "s'abandona"
 
-#: fetch-pack.c:512 progress.c:339
+#: fetch-pack.c:514 progress.h:25
 msgid "done"
 msgstr "fet"
 
-#: fetch-pack.c:524
+#: fetch-pack.c:526
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "s'ha rebut %s (%d) %s"
 
-#: fetch-pack.c:560
+#: fetch-pack.c:562
 #, c-format
 msgid "Marking %s as complete"
 msgstr "S'està marcant %s com a complet"
 
-#: fetch-pack.c:775
+#: fetch-pack.c:784
 #, c-format
 msgid "already have %s (%s)"
 msgstr "ja es té %s (%s)"
 
-#: fetch-pack.c:861
+#: fetch-pack.c:870
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr ""
 "fetch-pack: no s'ha pogut bifurcar del desmultiplexor de banda lateral"
 
-#: fetch-pack.c:869
+#: fetch-pack.c:878
 msgid "protocol error: bad pack header"
 msgstr "error de protocol: capçalera de paquet errònia"
 
-#: fetch-pack.c:965
+#: fetch-pack.c:974
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack: no es pot bifurcar de %s"
 
-#: fetch-pack.c:971
+#: fetch-pack.c:980
 msgid "fetch-pack: invalid index-pack output"
 msgstr "fetch-pack: sortida d'index-pack no vàlida"
 
-#: fetch-pack.c:988
+#: fetch-pack.c:997
 #, c-format
 msgid "%s failed"
 msgstr "%s ha fallat"
 
-#: fetch-pack.c:990
+#: fetch-pack.c:999
 msgid "error in sideband demultiplexer"
 msgstr "error en desmultiplexor de banda lateral"
 
-#: fetch-pack.c:1035
+#: fetch-pack.c:1048
 #, c-format
 msgid "Server version is %.*s"
 msgstr "La versió del servidor és %.*s"
 
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1052 fetch-pack.c:1058
-#: fetch-pack.c:1062 fetch-pack.c:1066 fetch-pack.c:1070 fetch-pack.c:1074
-#: fetch-pack.c:1078 fetch-pack.c:1082 fetch-pack.c:1086 fetch-pack.c:1090
-#: fetch-pack.c:1096 fetch-pack.c:1102 fetch-pack.c:1107 fetch-pack.c:1112
+#: fetch-pack.c:1056 fetch-pack.c:1062 fetch-pack.c:1065 fetch-pack.c:1071
+#: fetch-pack.c:1075 fetch-pack.c:1079 fetch-pack.c:1083 fetch-pack.c:1087
+#: fetch-pack.c:1091 fetch-pack.c:1095 fetch-pack.c:1099 fetch-pack.c:1103
+#: fetch-pack.c:1109 fetch-pack.c:1115 fetch-pack.c:1120 fetch-pack.c:1125
 #, c-format
 msgid "Server supports %s"
 msgstr "El servidor accepta %s"
 
-#: fetch-pack.c:1045
+#: fetch-pack.c:1058
 msgid "Server does not support shallow clients"
 msgstr "El servidor no permet clients superficials"
 
-#: fetch-pack.c:1105
+#: fetch-pack.c:1118
 msgid "Server does not support --shallow-since"
 msgstr "El servidor no admet --shallow-since"
 
-#: fetch-pack.c:1110
+#: fetch-pack.c:1123
 msgid "Server does not support --shallow-exclude"
 msgstr "El servidor no admet --shallow-exclude"
 
-#: fetch-pack.c:1114
+#: fetch-pack.c:1127
 msgid "Server does not support --deepen"
 msgstr "El servidor no admet --deepen"
 
-#: fetch-pack.c:1116
+#: fetch-pack.c:1129
 msgid "Server does not support this repository's object format"
 msgstr ""
 "El servidor no és compatible amb el format d'objecte d'aquest repositori"
 
-#: fetch-pack.c:1129
+#: fetch-pack.c:1142
 msgid "no common commits"
 msgstr "cap comissió en comú"
 
-#: fetch-pack.c:1138 fetch-pack.c:1485 builtin/clone.c:1130
+#: fetch-pack.c:1151 fetch-pack.c:1506 builtin/clone.c:1166
 msgid "source repository is shallow, reject to clone."
 msgstr "el repositori font és superficial, es rebutja clonar-ho."
 
-#: fetch-pack.c:1144 fetch-pack.c:1681
+#: fetch-pack.c:1157 fetch-pack.c:1705
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: l'obtenció ha fallat."
 
-#: fetch-pack.c:1258
+#: fetch-pack.c:1271
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "algoritmes no coincidents: client %s; servidor %s"
 
-#: fetch-pack.c:1262
+#: fetch-pack.c:1275
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "el servidor no és compatible amb l'algorisme «%s»"
 
-#: fetch-pack.c:1295
+#: fetch-pack.c:1308
 msgid "Server does not support shallow requests"
 msgstr "El servidor no permet sol·licituds superficials"
 
-#: fetch-pack.c:1302
+#: fetch-pack.c:1315
 msgid "Server supports filter"
 msgstr "El servidor accepta filtratge"
 
-#: fetch-pack.c:1345 fetch-pack.c:2063
+#: fetch-pack.c:1358 fetch-pack.c:2087
 msgid "unable to write request to remote"
 msgstr "no s'ha pogut escriure la sol·licitud al remot"
 
-#: fetch-pack.c:1363
+#: fetch-pack.c:1376
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "error en llegir la capçalera de la secció «%s»"
 
-#: fetch-pack.c:1369
+#: fetch-pack.c:1382
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "s'esperava «%s», s'ha rebut «%s»"
 
-#: fetch-pack.c:1403
+#: fetch-pack.c:1416
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "línia de confirmació inesperada: «%s»"
 
-#: fetch-pack.c:1408
+#: fetch-pack.c:1421
 #, c-format
 msgid "error processing acks: %d"
 msgstr "s'ha produït un error en processar els acks: %d"
 
-#: fetch-pack.c:1418
-msgid "expected packfile to be sent after 'ready'"
-msgstr "s'esperava l'enviament del fitxer de paquet després de «ready»"
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#: fetch-pack.c:1435
+#, c-format
+msgid "expected packfile to be sent after '%s'"
+msgstr "s'esperava que el fitxer de paquet s'enviés després de «%s»"
 
-#: fetch-pack.c:1420
-msgid "expected no other sections to be sent after no 'ready'"
-msgstr "s'esperava que no s'enviés cap altra secció després de no «ready»"
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#: fetch-pack.c:1441
+#, c-format
+msgid "expected no other sections to be sent after no '%s'"
+msgstr "no s'esperava que cap altra secció s'enviés després de «%s»"
 
-#: fetch-pack.c:1461
+#: fetch-pack.c:1482
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "s'ha produït un error en processar la informació superficial: %d"
 
-#: fetch-pack.c:1510
+#: fetch-pack.c:1531
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "s'esperava wanted-ref, s'ha rebut «%s»"
 
-#: fetch-pack.c:1515
+#: fetch-pack.c:1536
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "wanted-ref inesperat: «%s»"
 
-#: fetch-pack.c:1520
+#: fetch-pack.c:1541
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "s'ha produït un error en processar les referències desitjades: %d"
 
-#: fetch-pack.c:1550
+#: fetch-pack.c:1571
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack: s'esperava un paquet de final de resposta"
 
-#: fetch-pack.c:1959
+#: fetch-pack.c:1983
 msgid "no matching remote head"
 msgstr "no hi ha cap HEAD remot coincident"
 
-#: fetch-pack.c:1982 builtin/clone.c:581
+#: fetch-pack.c:2006 builtin/clone.c:587
 msgid "remote did not send all necessary objects"
 msgstr "el remot no ha enviat tots els objectes necessaris"
 
-#: fetch-pack.c:2085
+#: fetch-pack.c:2109
 msgid "unexpected 'ready' from remote"
 msgstr "«ready» no esperat des del remot"
 
-#: fetch-pack.c:2108
+#: fetch-pack.c:2132
 #, c-format
 msgid "no such remote ref %s"
 msgstr "no existeix la referència remota %s"
 
-#: fetch-pack.c:2111
+#: fetch-pack.c:2135
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "El servidor no permet sol·licitar objectes no anunciats %s"
 
-#: gpg-interface.c:329 gpg-interface.c:457 gpg-interface.c:974
-#: gpg-interface.c:990
+#: fsmonitor-ipc.c:119
+#, c-format
+msgid "fsmonitor_ipc__send_query: invalid path '%s'"
+msgstr "fsmonitor_ipc__send_query: camí no vàlid «%s»"
+
+#: fsmonitor-ipc.c:125
+#, c-format
+msgid "fsmonitor_ipc__send_query: unspecified error on '%s'"
+msgstr "fsmonitor_ipc__send_query: error no especificat en «%s»"
+
+#: fsmonitor-ipc.c:155
+msgid "fsmonitor--daemon is not running"
+msgstr "fsmonitor--daemon no s'està executant"
+
+#: fsmonitor-ipc.c:164
+#, c-format
+msgid "could not send '%s' command to fsmonitor--daemon"
+msgstr "no s'ha pogut enviar l'ordre «%s» a fsmonitor--daemon"
+
+#: gpg-interface.c:329 gpg-interface.c:456 gpg-interface.c:995
+#: gpg-interface.c:1011
 msgid "could not create temporary file"
 msgstr "no s'ha pogut crear el fitxer temporal"
 
-#: gpg-interface.c:332 gpg-interface.c:460
+#: gpg-interface.c:332 gpg-interface.c:459
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr ""
 "s'ha produït un error en escriure la clau de signatura separada a «%s»"
 
-#: gpg-interface.c:451
+#: gpg-interface.c:450
 msgid ""
 "gpg.ssh.allowedSignersFile needs to be configured and exist for ssh "
 "signature verification"
@@ -4435,7 +4555,7 @@ msgstr ""
 "gpg.ssh.allowedSignersFile s'ha de configurar i existeix per a la "
 "verificació de la signatura ssh"
 
-#: gpg-interface.c:480
+#: gpg-interface.c:479
 msgid ""
 "ssh-keygen -Y find-principals/verify is needed for ssh signature "
 "verification (available in openssh version 8.2p1+)"
@@ -4443,65 +4563,65 @@ msgstr ""
 "ssh-keygen -Y find-principals/verify és necessari per a la verificació de la"
 " signatura ssh (disponible a opensh versió 8.2p1+)"
 
-#: gpg-interface.c:536
+#: gpg-interface.c:550
 #, c-format
 msgid "ssh signing revocation file configured but not found: %s"
 msgstr "fitxer de revocació de la signatura ssh configurat però no trobat: %s"
 
-#: gpg-interface.c:624
+#: gpg-interface.c:638
 #, c-format
 msgid "bad/incompatible signature '%s'"
 msgstr "la signatura «%s» és incompatible o està malmesa"
 
-#: gpg-interface.c:801 gpg-interface.c:806
+#: gpg-interface.c:815 gpg-interface.c:820
 #, c-format
 msgid "failed to get the ssh fingerprint for key '%s'"
 msgstr "no s'ha pogut obtenir l'empremta ssh de la clau  «%s»"
 
-#: gpg-interface.c:829
+#: gpg-interface.c:843
 msgid ""
 "either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured"
 msgstr ""
 "o bé user.signingkey o gpg.ssh.defaultKeyCommand han de ser configurats"
 
-#: gpg-interface.c:851
+#: gpg-interface.c:865
 #, c-format
 msgid "gpg.ssh.defaultKeyCommand succeeded but returned no keys: %s %s"
 msgstr ""
 "gpg.ssh.defaultKeyCommand ha tingut èxit però no ha retornat cap clau: %s %s"
 
-#: gpg-interface.c:857
+#: gpg-interface.c:871
 #, c-format
 msgid "gpg.ssh.defaultKeyCommand failed: %s %s"
 msgstr "gpg.ssh.defaultKeyCommand ha fallat: %s %s"
 
-#: gpg-interface.c:945
+#: gpg-interface.c:966
 msgid "gpg failed to sign the data"
 msgstr "gpg ha fallat en signar les dades"
 
-#: gpg-interface.c:967
+#: gpg-interface.c:988
 msgid "user.signingkey needs to be set for ssh signing"
 msgstr "user.signingkey s'ha d'establir per a signar amb ssh"
 
-#: gpg-interface.c:978
+#: gpg-interface.c:999
 #, c-format
 msgid "failed writing ssh signing key to '%s'"
 msgstr "s'ha produït un error en escriure la clau de signatura ssh a «%s»"
 
-#: gpg-interface.c:996
+#: gpg-interface.c:1017
 #, c-format
 msgid "failed writing ssh signing key buffer to '%s'"
 msgstr "s'ha produït un error en escriure la clau de signatura ssh a «%s»"
 
-#: gpg-interface.c:1014
+#: gpg-interface.c:1035
 msgid ""
 "ssh-keygen -Y sign is needed for ssh signing (available in openssh version "
 "8.2p1+)"
 msgstr ""
-"ssh-keygen -Y sign és necessari per a signar amb ssh (disponible a openssh versió "
-"8.2p1+)"
+"ssh-keygen -Y sign és necessari per a signar amb ssh (disponible a openssh "
+"versió 8.2p1+)"
 
-#: gpg-interface.c:1026
+#: gpg-interface.c:1047
 #, c-format
 msgid "failed reading ssh signing data buffer from '%s'"
 msgstr "s'ha produït un error en llegir la signatura ssh des de «%s»"
@@ -4511,7 +4631,7 @@ msgstr "s'ha produït un error en llegir la signatura ssh des de «%s»"
 msgid "ignored invalid color '%.*s' in log.graphColors"
 msgstr "ignora el color no vàlid «%.*s» a log.graphColors"
 
-#: grep.c:531
+#: grep.c:446
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
@@ -4519,109 +4639,109 @@ msgstr ""
 "el patró indicat conté byte NULL (via -f <fitxer>). Això només és compatible"
 " amb -P sota PCRE v2"
 
-#: grep.c:1942
+#: grep.c:1859
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "«%s»: no s'ha pogut llegir %s"
 
-#: grep.c:1959 setup.c:177 builtin/clone.c:302 builtin/diff.c:90
+#: grep.c:1876 setup.c:177 builtin/clone.c:308 builtin/diff.c:90
 #: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "s'ha produït un error en fer stat a «%s»"
 
-#: grep.c:1970
+#: grep.c:1887
 #, c-format
 msgid "'%s': short read"
 msgstr "«%s»: lectura curta"
 
-#: help.c:24
+#: help.c:25
 msgid "start a working area (see also: git help tutorial)"
 msgstr "començar una àrea de treball (vegeu també: git help tutorial)"
 
-#: help.c:25
+#: help.c:26
 msgid "work on the current change (see also: git help everyday)"
 msgstr "treballar en el canvi actual (vegeu també: git help everyday)"
 
-#: help.c:26
+#: help.c:27
 msgid "examine the history and state (see also: git help revisions)"
 msgstr "examinar la història i l'estat (vegeu també: git help revisions)"
 
-#: help.c:27
+#: help.c:28
 msgid "grow, mark and tweak your common history"
 msgstr "fer créixer, marcar i ajustar la vostra història comuna"
 
-#: help.c:28
+#: help.c:29
 msgid "collaborate (see also: git help workflows)"
 msgstr "col·laborar (vegeu també: git help workflow)"
 
-#: help.c:32
+#: help.c:33
 msgid "Main Porcelain Commands"
 msgstr "Ordres principals de porcellana"
 
-#: help.c:33
+#: help.c:34
 msgid "Ancillary Commands / Manipulators"
 msgstr "Ordres auxiliars / manipuladors"
 
-#: help.c:34
+#: help.c:35
 msgid "Ancillary Commands / Interrogators"
 msgstr "Ordres auxiliars / interrogadors"
 
-#: help.c:35
+#: help.c:36
 msgid "Interacting with Others"
 msgstr "Interaccionar amb altres"
 
-#: help.c:36
+#: help.c:37
 msgid "Low-level Commands / Manipulators"
 msgstr "Ordres de baix nivell / Manipuladors"
 
-#: help.c:37
+#: help.c:38
 msgid "Low-level Commands / Interrogators"
 msgstr "Ordres de baix nivell / Interrogadors"
 
-#: help.c:38
+#: help.c:39
 msgid "Low-level Commands / Syncing Repositories"
 msgstr "Ordres de baix nivell / Sincronització de repositoris"
 
-#: help.c:39
+#: help.c:40
 msgid "Low-level Commands / Internal Helpers"
 msgstr "Ordres de baix nivell / Ajudants interns"
 
-#: help.c:313
+#: help.c:316
 #, c-format
 msgid "available git commands in '%s'"
 msgstr "ordres de git disponibles en «%s»"
 
-#: help.c:320
+#: help.c:323
 msgid "git commands available from elsewhere on your $PATH"
 msgstr "ordres de git disponibles d'altres llocs en el vostre $PATH"
 
-#: help.c:329
+#: help.c:332
 msgid "These are common Git commands used in various situations:"
 msgstr "Aquestes són ordres habituals del Git usades en diverses situacions:"
 
-#: help.c:378 git.c:100
+#: help.c:382 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "tipus de llistat de l'ordre no compatible «%s»"
 
-#: help.c:418
+#: help.c:422
 msgid "The Git concept guides are:"
 msgstr "Les guies de Git de conceptes són:"
 
-#: help.c:442
-msgid "See 'git help <command>' to read about a specific subcommand"
-msgstr "Vegeu «git help <ordre>» per a llegir sobre una subordre específica"
-
-#: help.c:447
+#: help.c:446
 msgid "External commands"
 msgstr "Ordres externes"
 
-#: help.c:462
+#: help.c:468
 msgid "Command aliases"
 msgstr "Àlies d'ordres"
 
-#: help.c:543
+#: help.c:486
+msgid "See 'git help <command>' to read about a specific subcommand"
+msgstr "Vegeu «git help <ordre>» per a llegir sobre una subordre específica"
+
+#: help.c:563
 #, c-format
 msgid ""
 "'%s' appears to be a git command, but we were not\n"
@@ -4630,38 +4750,38 @@ msgstr ""
 "«%s» sembla una ordre de git, però no hem pogut\n"
 "executar-la. Pot ser que git-%s estigui malmès?"
 
-#: help.c:565 help.c:662
+#: help.c:585 help.c:682
 #, c-format
 msgid "git: '%s' is not a git command. See 'git --help'."
 msgstr "git: «%s» no és una ordre de git. Vegeu «git --help»."
 
-#: help.c:613
+#: help.c:633
 msgid "Uh oh. Your system reports no Git commands at all."
 msgstr "Ai. El vostre sistema no informa de cap ordre de Git."
 
-#: help.c:635
+#: help.c:655
 #, c-format
 msgid "WARNING: You called a Git command named '%s', which does not exist."
 msgstr ""
 "ADVERTÈNCIA: Heu invocat una ordre de Git amb nom «%s», la qual no existeix."
 
-#: help.c:640
+#: help.c:660
 #, c-format
 msgid "Continuing under the assumption that you meant '%s'."
 msgstr "El procés continuarà, pressuposant que volíeu dir «%s»."
 
-#: help.c:646
+#: help.c:666
 #, c-format
 msgid "Run '%s' instead [y/N]? "
 msgstr "Voleu executar «%s» en el seu lloc? [y/N]? "
 
-#: help.c:654
+#: help.c:674
 #, c-format
 msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
 msgstr ""
 "El procés continuarà en %0.1f segons, pressuposant que volíeu dir «%s»."
 
-#: help.c:666
+#: help.c:686
 msgid ""
 "\n"
 "The most similar command is"
@@ -4675,16 +4795,16 @@ msgstr[1] ""
 "\n"
 "Les ordres més similars són"
 
-#: help.c:706
+#: help.c:729
 msgid "git version [<options>]"
 msgstr "git version [<opcions>]"
 
-#: help.c:761
+#: help.c:784
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s: %s - %s"
 
-#: help.c:765
+#: help.c:788
 msgid ""
 "\n"
 "Did you mean this?"
@@ -4698,7 +4818,7 @@ msgstr[1] ""
 "\n"
 "Volíeu dir un d'aquests?"
 
-#: hook.c:27
+#: hook.c:28
 #, c-format
 msgid ""
 "The '%s' hook was ignored because it's not set as executable.\n"
@@ -4707,15 +4827,20 @@ msgstr ""
 "El lligam «%s» s'ha ignorat perquè no s'ha establert com a executable.\n"
 "Podeu desactivar aquest avís amb «git config advice.ignoredHook false»."
 
-#: ident.c:353
+#: hook.c:87
+#, c-format
+msgid "Couldn't start hook '%s'\n"
+msgstr "No s'ha pogut iniciar el lligam «%s»'\n"
+
+#: ident.c:354
 msgid "Author identity unknown\n"
 msgstr "Identitat de l'autor desconeguda\n"
 
-#: ident.c:356
+#: ident.c:357
 msgid "Committer identity unknown\n"
 msgstr "Es desconeix la identitat del comitent\n"
 
-#: ident.c:362
+#: ident.c:363
 msgid ""
 "\n"
 "*** Please tell me who you are.\n"
@@ -4740,76 +4865,76 @@ msgstr ""
 "per a establir la identitat predeterminada del vostre compte.\n"
 "Ometeu --global per a establir la identitat només en aquest repositori.\n"
 
-#: ident.c:397
+#: ident.c:398
 msgid "no email was given and auto-detection is disabled"
 msgstr ""
 "no s'ha proporcionat cap adreça electrònica i la detecció automàtica està "
 "inhabilitada"
 
-#: ident.c:402
+#: ident.c:403
 #, c-format
 msgid "unable to auto-detect email address (got '%s')"
 msgstr ""
 "no s'ha pogut detectar automàticament una adreça electrònica vàlida (s'ha "
 "rebut «%s»)"
 
-#: ident.c:419
+#: ident.c:420
 msgid "no name was given and auto-detection is disabled"
 msgstr ""
 "no s'ha proporcionat cap nom i la detecció automàtica està inhabilitada"
 
-#: ident.c:425
+#: ident.c:426
 #, c-format
 msgid "unable to auto-detect name (got '%s')"
 msgstr "no s'ha pogut detectar automàticament el nom (s'ha rebut «%s»)"
 
-#: ident.c:433
+#: ident.c:434
 #, c-format
 msgid "empty ident name (for <%s>) not allowed"
 msgstr "nom d'identitat buit (per <%s>) no és permès"
 
-#: ident.c:439
+#: ident.c:440
 #, c-format
 msgid "name consists only of disallowed characters: %s"
 msgstr "el nom conté només caràcters no permesos: %s"
 
-#: ident.c:454 builtin/commit.c:648
+#: ident.c:455 builtin/commit.c:649
 #, c-format
 msgid "invalid date format: %s"
 msgstr "format de data no vàlid: %s"
 
-#: list-objects-filter-options.c:83
+#: list-objects-filter-options.c:68
 msgid "expected 'tree:<depth>'"
 msgstr "s'esperava «tree:<profunditat>»"
 
-#: list-objects-filter-options.c:98
+#: list-objects-filter-options.c:83
 msgid "sparse:path filters support has been dropped"
 msgstr "sparse: s'ha eliminat la implementació de filtres de camí sparse"
 
-#: list-objects-filter-options.c:105
+#: list-objects-filter-options.c:90
 #, c-format
 msgid "'%s' for 'object:type=<type>' is not a valid object type"
 msgstr "«%s» per a «object:type=<type>» no és un tipus d'objecte vàlid"
 
-#: list-objects-filter-options.c:124
+#: list-objects-filter-options.c:109
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "filtre d'especificació no vàlid: «%s»"
 
-#: list-objects-filter-options.c:140
+#: list-objects-filter-options.c:125
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
 msgstr "cal escapar el caràcter en el sub-filter-spec «%c»"
 
-#: list-objects-filter-options.c:182
+#: list-objects-filter-options.c:167
 msgid "expected something after combine:"
 msgstr "s'esperava alguna cosa després de combinar:"
 
-#: list-objects-filter-options.c:264
+#: list-objects-filter-options.c:249
 msgid "multiple filter-specs cannot be combined"
 msgstr "no es poden combinar múltiples especificacions de filtratge"
 
-#: list-objects-filter-options.c:376
+#: list-objects-filter-options.c:365
 msgid "unable to upgrade repository format to support partial clone"
 msgstr ""
 "no s'ha pogut actualitzar el format del repositori perquè sigui compatible "
@@ -4825,17 +4950,17 @@ msgstr "no s'ha pogut accedir a un blob dispers en «%s»"
 msgid "unable to parse sparse filter data in %s"
 msgstr "no s'han pogut analitzar les dades disperses filtrades %s"
 
-#: list-objects.c:127
+#: list-objects.c:144
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
 msgstr "l'entrada «%s» a l'arbre %s té mode d'arbre, però no és un arbre"
 
-#: list-objects.c:140
+#: list-objects.c:157
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr "l'entrada «%s» a l'arbre %s té mode blob, però no és un blob"
 
-#: list-objects.c:398
+#: list-objects.c:415
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "no s'ha pogut carregar l'arrel de l'arbre per la comissió %s"
@@ -4865,17 +4990,12 @@ msgstr ""
 msgid "Unable to create '%s.lock': %s"
 msgstr "No s'ha pogut crear «%s.lock»: %s"
 
-#: ls-refs.c:37
-#, c-format
-msgid "invalid value '%s' for lsrefs.unborn"
-msgstr "valor «%s» no vàlid per a «lsrefs.unborn»"
-
-#: ls-refs.c:174
+#: ls-refs.c:175
 #, c-format
 msgid "unexpected line: '%s'"
 msgstr "línia inesperada: «%s»"
 
-#: ls-refs.c:178
+#: ls-refs.c:179
 msgid "expected flush after ls-refs arguments"
 msgstr "s'esperava una neteja després dels arguments ls-refs"
 
@@ -4883,40 +5003,40 @@ msgstr "s'esperava una neteja després dels arguments ls-refs"
 msgid "quoted CRLF detected"
 msgstr "CRLF citat detectat"
 
-#: mailinfo.c:1254 builtin/am.c:184 builtin/mailinfo.c:46
+#: mailinfo.c:1254 builtin/am.c:185 builtin/mailinfo.c:46
 #, c-format
 msgid "bad action '%s' for '%s'"
 msgstr "acció «%s» incorrecta per a «%s»"
 
-#: merge-ort.c:1584 merge-recursive.c:1211
+#: merge-ort.c:1630 merge-recursive.c:1214
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "S'ha produït un error en fusionar el submòdul %s (no està agafat)"
 
-#: merge-ort.c:1593 merge-recursive.c:1218
+#: merge-ort.c:1639 merge-recursive.c:1221
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr ""
 "S'ha produït un error en fusionar el submòdul %s (no hi ha comissions)"
 
-#: merge-ort.c:1602 merge-recursive.c:1225
+#: merge-ort.c:1648 merge-recursive.c:1228
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr ""
 "S'ha produït un error en fusionar el submòdul %s (les comissions no "
 "segueixen merge-base)"
 
-#: merge-ort.c:1612 merge-ort.c:1620
+#: merge-ort.c:1658 merge-ort.c:1666
 #, c-format
 msgid "Note: Fast-forwarding submodule %s to %s"
 msgstr "Nota: avançament ràpid del submòdul %s a %s"
 
-#: merge-ort.c:1642
+#: merge-ort.c:1688
 #, c-format
 msgid "Failed to merge submodule %s"
 msgstr "S'ha produït un error en fusionar el submòdul «%s»"
 
-#: merge-ort.c:1649
+#: merge-ort.c:1695
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but a possible merge resolution exists:\n"
@@ -4925,7 +5045,7 @@ msgstr ""
 "S'ha produït un error en fusionar el submòdul %s, però existeix una solució possible:\n"
 "%s\n"
 
-#: merge-ort.c:1653 merge-recursive.c:1281
+#: merge-ort.c:1699 merge-recursive.c:1284
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -4942,7 +5062,7 @@ msgstr ""
 "\n"
 "que acceptarà aquest suggeriment.\n"
 
-#: merge-ort.c:1666
+#: merge-ort.c:1712
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but multiple possible merges exist:\n"
@@ -4951,21 +5071,21 @@ msgstr ""
 "S'ha produït un error en fusionar el submòdul %s, però existeixen múltiples solucions possibles:\n"
 "%s"
 
-#: merge-ort.c:1887 merge-recursive.c:1372
+#: merge-ort.c:1937 merge-recursive.c:1375
 msgid "Failed to execute internal merge"
 msgstr "S'ha produït un error en executar la fusió interna"
 
-#: merge-ort.c:1892 merge-recursive.c:1377
+#: merge-ort.c:1942 merge-recursive.c:1380
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "No s'ha pogut afegir %s a la base de dades"
 
-#: merge-ort.c:1899 merge-recursive.c:1410
+#: merge-ort.c:1949 merge-recursive.c:1413
 #, c-format
 msgid "Auto-merging %s"
 msgstr "S'està autofusionant %s"
 
-#: merge-ort.c:2038 merge-recursive.c:2132
+#: merge-ort.c:2088 merge-recursive.c:2135
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -4975,7 +5095,7 @@ msgstr ""
 "existent a %s en forma de canvi del nom del directori implícit, posant-hi "
 "els camins següents a: %s."
 
-#: merge-ort.c:2048 merge-recursive.c:2142
+#: merge-ort.c:2098 merge-recursive.c:2145
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -4985,7 +5105,7 @@ msgstr ""
 "camí a %s; els canvis del nom del directori implícits han intentat posar "
 "aquests camins a: %s segons"
 
-#: merge-ort.c:2106
+#: merge-ort.c:2156
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to rename %s to; it was "
@@ -4996,7 +5116,7 @@ msgstr ""
 "%s; s'han canviat de nom a múltiples altres directoris, sense una destinació"
 " per a la majoria dels fitxers."
 
-#: merge-ort.c:2260 merge-recursive.c:2478
+#: merge-ort.c:2310 merge-recursive.c:2481
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
@@ -5005,7 +5125,7 @@ msgstr ""
 "AVÍS: S'està evitant aplicar el canvi de nom %s -> %s a %s, perquè %s ell "
 "mateix ja havia canviat de nom."
 
-#: merge-ort.c:2400 merge-recursive.c:3261
+#: merge-ort.c:2450 merge-recursive.c:3264
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
@@ -5014,7 +5134,7 @@ msgstr ""
 "Pedaç actualitzat: %s afegit a %s dins d'un directori que va canviar de nom "
 "a %s; movent-lo a %s."
 
-#: merge-ort.c:2407 merge-recursive.c:3268
+#: merge-ort.c:2457 merge-recursive.c:3271
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in"
@@ -5023,7 +5143,7 @@ msgstr ""
 "Pedaç actualitzat: %s canviat al nom %s a %s, dins d'un directori que va "
 "canviar de nom a %s; movent-lo a %s."
 
-#: merge-ort.c:2420 merge-recursive.c:3264
+#: merge-ort.c:2470 merge-recursive.c:3267
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed"
@@ -5032,7 +5152,7 @@ msgstr ""
 "CONFLICTE (ubicació del fitxer): %s afegit a %s dins d'un directori que va "
 "canviar de nom a %s suggerint que potser hauria de moure's a %s."
 
-#: merge-ort.c:2428 merge-recursive.c:3271
+#: merge-ort.c:2478 merge-recursive.c:3274
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
@@ -5042,13 +5162,13 @@ msgstr ""
 "directori que va canviar de nom a %s, suggerint que potser hauria de moure's"
 " a %s."
 
-#: merge-ort.c:2584
+#: merge-ort.c:2634
 #, c-format
 msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
 msgstr ""
 "CONFLICTE (canvi de nom/canvi de nom): %s ara té el nom %s a %s i %s a %s."
 
-#: merge-ort.c:2679
+#: merge-ort.c:2729
 #, c-format
 msgid ""
 "CONFLICT (rename involved in collision): rename of %s -> %s has content "
@@ -5059,24 +5179,24 @@ msgstr ""
 "%s té conflictes de contingut i col·lisiona amb un altre camí; això pot "
 "donar lloc a marcadors de conflicte imbricats."
 
-#: merge-ort.c:2698 merge-ort.c:2722
+#: merge-ort.c:2748 merge-ort.c:2772
 #, c-format
 msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
 msgstr ""
 "CONFLICTE (canvi de nom/supressió): %s ara té el nom %s a %s, però s'ha "
 "suprimit a %s."
 
-#: merge-ort.c:3212 merge-recursive.c:3022
+#: merge-ort.c:3261 merge-recursive.c:3025
 #, c-format
 msgid "cannot read object %s"
 msgstr "no es pot llegir l'objecte %s"
 
-#: merge-ort.c:3215 merge-recursive.c:3025
+#: merge-ort.c:3264 merge-recursive.c:3028
 #, c-format
 msgid "object %s is not a blob"
 msgstr "l'objecte %s no és un blob"
 
-#: merge-ort.c:3644
+#: merge-ort.c:3693
 #, c-format
 msgid ""
 "CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
@@ -5085,7 +5205,7 @@ msgstr ""
 "CONFLICTE (fitxer/directori): directori en el camí de %s des de %s; en "
 "comptes es mou a %s."
 
-#: merge-ort.c:3721
+#: merge-ort.c:3770
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed both"
@@ -5094,7 +5214,7 @@ msgstr ""
 "CONFLICTE (tipus diferents): %s tenia diferents tipus a cada costat; se'ls "
 "ha canviat el nom per tal que cadascun pugui ser registrat en algun lloc."
 
-#: merge-ort.c:3728
+#: merge-ort.c:3777
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed one "
@@ -5104,24 +5224,24 @@ msgstr ""
 "canviat el nom d'un d'ells per tal que cadascun pugui ser registrat en algun"
 " lloc."
 
-#: merge-ort.c:3819 merge-recursive.c:3101
+#: merge-ort.c:3866 merge-recursive.c:3104
 msgid "content"
 msgstr "contingut"
 
-#: merge-ort.c:3821 merge-recursive.c:3105
+#: merge-ort.c:3868 merge-recursive.c:3108
 msgid "add/add"
 msgstr "afegiment/afegiment"
 
-#: merge-ort.c:3823 merge-recursive.c:3150
+#: merge-ort.c:3870 merge-recursive.c:3153
 msgid "submodule"
 msgstr "submòdul"
 
-#: merge-ort.c:3825 merge-recursive.c:3151
+#: merge-ort.c:3872 merge-recursive.c:3154
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "CONFLICTE (%s): Conflicte de fusió en %s"
 
-#: merge-ort.c:3869
+#: merge-ort.c:3916
 #, c-format
 msgid ""
 "CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
@@ -5130,7 +5250,7 @@ msgstr ""
 "CONFLICTE: (modificació/supressió): %s suprimit a %s i modificat a %s. La "
 "versió %s de %s s'ha deixat en l'arbre."
 
-#: merge-ort.c:4165
+#: merge-ort.c:4212
 #, c-format
 msgid ""
 "Note: %s not up to date and in way of checking out conflicted version; old "
@@ -5141,13 +5261,13 @@ msgstr ""
 
 #. TRANSLATORS: The %s arguments are: 1) tree hash of a merge
 #. base, and 2-3) the trees for the two trees we're merging.
-#: merge-ort.c:4534
+#: merge-ort.c:4586
 #, c-format
 msgid "collecting merge info failed for trees %s, %s, %s"
 msgstr ""
 "ha fallat la recollida de la informació de fusió per als arbres %s, %s, %s"
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3716
+#: merge-ort-wrappers.c:13 merge-recursive.c:3723
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -5156,7 +5276,7 @@ msgstr ""
 "Els canvis locals als fitxers següents se sobreescriuran per la fusió:\n"
 "  %s"
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3482 builtin/merge.c:405
+#: merge-ort-wrappers.c:33 merge-recursive.c:3485 builtin/merge.c:405
 msgid "Already up to date."
 msgstr "Ja està al dia."
 
@@ -5194,7 +5314,7 @@ msgstr ": potser un conflicte D/F?"
 msgid "refusing to lose untracked file at '%s'"
 msgstr "s'està refusant perdre el fitxer no seguit a «%s»"
 
-#: merge-recursive.c:956 builtin/cat-file.c:41
+#: merge-recursive.c:956 builtin/cat-file.c:47
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "no es pot llegir l'objecte %s «%s»"
@@ -5219,48 +5339,48 @@ msgstr "s'ha produït un error en fer l'enllaç simbòlic «%s»: %s"
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "no se sap què fer amb %06o %s «%s»"
 
-#: merge-recursive.c:1233 merge-recursive.c:1246
+#: merge-recursive.c:1236 merge-recursive.c:1249
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "Avançament ràpid del submòdul %s a la següent comissió:"
 
-#: merge-recursive.c:1236 merge-recursive.c:1249
+#: merge-recursive.c:1239 merge-recursive.c:1252
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "Avançament ràpid al submòdul %s"
 
-#: merge-recursive.c:1273
+#: merge-recursive.c:1276
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 "Ha fallat en fusionar el submòdul %s (no s'ha trobat les comissions "
 "següents)"
 
-#: merge-recursive.c:1277
+#: merge-recursive.c:1280
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr ""
 "S'ha produït un error en fusionar el submòdul %s (sense avançament ràpid)"
 
-#: merge-recursive.c:1278
+#: merge-recursive.c:1281
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "S'ha trobat una possible resolució de fusió pel submòdul:\n"
 
-#: merge-recursive.c:1290
+#: merge-recursive.c:1293
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr ""
 "S'ha produït un error en fusionar el submòdul %s (s'han trobat múltiples "
 "fusions)"
 
-#: merge-recursive.c:1434
+#: merge-recursive.c:1437
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr ""
 "Error: s'està refusant perdre el fitxer no seguit a %s; en comptes s'ha "
 "escrit a %s."
 
-#: merge-recursive.c:1506
+#: merge-recursive.c:1509
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5269,7 +5389,7 @@ msgstr ""
 "CONFLICTE: (%s/supressió): %s suprimit en %s i %s en %s. La versió %s de %s "
 "s'ha deixat en l'arbre."
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1514
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5278,7 +5398,7 @@ msgstr ""
 "CONFLICTE: (%s/supressió): %s suprimit en %s i %s a %s en %s. La versió %s "
 "de %s s'ha deixat en l'arbre."
 
-#: merge-recursive.c:1518
+#: merge-recursive.c:1521
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5287,7 +5407,7 @@ msgstr ""
 "CONFLICTE: (%s/supressió): %s suprimit en %s i %s en %s. La versió %s de %s "
 "s'ha deixat en l'arbre a %s."
 
-#: merge-recursive.c:1523
+#: merge-recursive.c:1526
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5296,46 +5416,46 @@ msgstr ""
 "CONFLICTE: (%s/supressió): %s suprimit en %s i %s a %s en %s. La versió %s "
 "de %s s'ha deixat en l'arbre a %s."
 
-#: merge-recursive.c:1558
+#: merge-recursive.c:1561
 msgid "rename"
 msgstr "canvi de nom"
 
-#: merge-recursive.c:1558
+#: merge-recursive.c:1561
 msgid "renamed"
 msgstr "canviat de nom"
 
-#: merge-recursive.c:1609 merge-recursive.c:2515 merge-recursive.c:3178
+#: merge-recursive.c:1612 merge-recursive.c:2518 merge-recursive.c:3181
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "S'està refusant a perdre el fitxer brut a %s"
 
-#: merge-recursive.c:1619
+#: merge-recursive.c:1622
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
 "S'està refusant perdre el fitxer no seguit a «%s», malgrat que està en mig "
 "de l'operació."
 
-#: merge-recursive.c:1677
+#: merge-recursive.c:1680
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "CONFLICTE (canvi de nom/afegiment): Canvi de nom %s->%s a %s.  S'ha afegit "
 "%s a %s"
 
-#: merge-recursive.c:1708
+#: merge-recursive.c:1711
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s és un directori en %s; s'està afegint com a %s en lloc d'això"
 
-#: merge-recursive.c:1713
+#: merge-recursive.c:1716
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr ""
 "S'està refusant perdre el fitxer no seguit a %s; en comptes, s'està afegint "
 "com a %s"
 
-#: merge-recursive.c:1740
+#: merge-recursive.c:1743
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename "
@@ -5344,18 +5464,18 @@ msgstr ""
 "CONFLICTE (canvi de nom/canvi de nom): Canvi de nom «%s»->«%s» en la branca "
 "«%s» canvi de nom «%s»->«%s» en «%s»%s"
 
-#: merge-recursive.c:1745
+#: merge-recursive.c:1748
 msgid " (left unresolved)"
 msgstr " (deixat sense resolució)"
 
-#: merge-recursive.c:1837
+#: merge-recursive.c:1840
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "CONFLICTE (canvi de nom/canvi de nom): Canvi de nom %s->%s en %s. Canvi de "
 "nom %s->%s en %s"
 
-#: merge-recursive.c:2100
+#: merge-recursive.c:2103
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -5366,7 +5486,7 @@ msgstr ""
 "%s perquè el directori %s s'han canviat de nom a múltiples altres "
 "directoris, sense una destinació per a la majoria dels fitxers."
 
-#: merge-recursive.c:2234
+#: merge-recursive.c:2237
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory "
@@ -5375,38 +5495,38 @@ msgstr ""
 "CONFLICTE (canvi de nom/canvi de nom): canvi de nom %s->%s en %s. Canvi de "
 "nom de directori %s->%s en %s"
 
-#: merge-recursive.c:3089
+#: merge-recursive.c:3092
 msgid "modify"
 msgstr "modificació"
 
-#: merge-recursive.c:3089
+#: merge-recursive.c:3092
 msgid "modified"
 msgstr "modificat"
 
-#: merge-recursive.c:3128
+#: merge-recursive.c:3131
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "S'ha omès %s (el fusionat és igual a l'existent)"
 
-#: merge-recursive.c:3181
+#: merge-recursive.c:3184
 #, c-format
 msgid "Adding as %s instead"
 msgstr "S'està afegint com a %s en lloc d'això"
 
-#: merge-recursive.c:3385
+#: merge-recursive.c:3388
 #, c-format
 msgid "Removing %s"
 msgstr "S'està eliminant %s"
 
-#: merge-recursive.c:3408
+#: merge-recursive.c:3411
 msgid "file/directory"
 msgstr "fitxer/directori"
 
-#: merge-recursive.c:3413
+#: merge-recursive.c:3416
 msgid "directory/file"
 msgstr "directori/fitxer"
 
-#: merge-recursive.c:3420
+#: merge-recursive.c:3423
 #, c-format
 msgid ""
 "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
@@ -5414,42 +5534,42 @@ msgstr ""
 "CONFLICTE (%s): Hi ha un directori amb nom %s en %s. S'està afegint %s com a"
 " %s"
 
-#: merge-recursive.c:3429
+#: merge-recursive.c:3432
 #, c-format
 msgid "Adding %s"
 msgstr "S'està afegint %s"
 
-#: merge-recursive.c:3438
+#: merge-recursive.c:3441
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "CONFLICTE (afegiment/afegiment): Conflicte de fusió en %s"
 
-#: merge-recursive.c:3491
+#: merge-recursive.c:3494
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "la fusió dels arbres %s i %s ha fallat"
 
-#: merge-recursive.c:3585
+#: merge-recursive.c:3588
 msgid "Merging:"
 msgstr "S'està fusionant:"
 
-#: merge-recursive.c:3598
+#: merge-recursive.c:3601
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "s'ha trobat %u avantpassat en comú:"
 msgstr[1] "s'han trobat %u avantpassats en comú:"
 
-#: merge-recursive.c:3648
+#: merge-recursive.c:3651
 msgid "merge returned no commit"
 msgstr "la fusió no ha retornat cap comissió"
 
-#: merge-recursive.c:3816
+#: merge-recursive.c:3823
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "No s'ha pogut analitzar l'objecte «%s»"
 
-#: merge-recursive.c:3834 builtin/merge.c:720 builtin/merge.c:906
+#: merge-recursive.c:3841 builtin/merge.c:720 builtin/merge.c:912
 #: builtin/stash.c:489
 msgid "Unable to write index."
 msgstr "No s'ha pogut escriure l'índex."
@@ -5458,234 +5578,239 @@ msgstr "No s'ha pogut escriure l'índex."
 msgid "failed to read the cache"
 msgstr "s'ha produït un error en llegir la memòria cau"
 
-#: merge.c:102 rerere.c:704 builtin/am.c:1988 builtin/am.c:2022
-#: builtin/checkout.c:598 builtin/checkout.c:853 builtin/clone.c:706
+#: merge.c:102 rerere.c:705 builtin/am.c:1989 builtin/am.c:2023
+#: builtin/checkout.c:603 builtin/checkout.c:865 builtin/clone.c:714
 #: builtin/stash.c:269
 msgid "unable to write new index file"
 msgstr "no s'ha pogut escriure un fitxer d'índex nou"
 
-#: midx.c:78
+#: midx.c:79
 msgid "multi-pack-index OID fanout is of the wrong size"
 msgstr "l'OID de l'índex multipaquet és d'una mida incorrecta"
 
-#: midx.c:111
+#: midx.c:112
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "el fitxer de l'índex multipaquet %s és massa petit"
 
-#: midx.c:127
+#: midx.c:128
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr ""
 "la signatura de l'índex multipaquet 0x%08x no coincideix amb la signatura "
 "0x%08x"
 
-#: midx.c:132
+#: midx.c:133
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "no es reconeix la versió %d de l'índex multipaquet"
 
-#: midx.c:137
+#: midx.c:138
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr ""
 "la versió del hash índex multipaquet %u no coincideix amb la versió %u"
 
-#: midx.c:154
+#: midx.c:155
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "falta un fragment de nom de paquet necessari al multi-index"
 
-#: midx.c:156
+#: midx.c:157
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "falta un fragment «fanout» OID necessari al multi-pack-index"
 
-#: midx.c:158
+#: midx.c:159
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "falta un fragment de cerca «fanout» OID necessari al multi-pack-index"
 
-#: midx.c:160
+#: midx.c:161
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "falta un fragment necessari dels desplaçaments al multi-pack-index"
 
-#: midx.c:176
+#: midx.c:180
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr ""
 "els noms de paquet de l'índex multipaquet estan desordenats «%s» abans de "
 "«%s»"
 
-#: midx.c:224
+#: midx.c:228
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "pack-int-id: %u incorrecte (%u paquets en total)"
 
-#: midx.c:274
+#: midx.c:278
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr ""
 "l'índex multipaquet emmagatzema un desplaçament de 64 bits, però off_t és "
 "massa petit"
 
-#: midx.c:505
+#: midx.c:509
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "no s'ha pogut afegir el fitxer de paquet «%s»"
 
-#: midx.c:511
+#: midx.c:515
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "no s'ha pogut obrir l'índex del paquet «%s»"
 
-#: midx.c:579
+#: midx.c:583
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "no s'ha pogut localitzar l'objecte %d en el fitxer de paquet"
 
-#: midx.c:895
+#: midx.c:911
 msgid "cannot store reverse index file"
 msgstr "no es pot emmagatzemar el fitxer d'índex invers"
 
-#: midx.c:993
+#: midx.c:1009
 #, c-format
 msgid "could not parse line: %s"
 msgstr "no s'ha pogut analitzar la línia: %s"
 
-#: midx.c:995
+#: midx.c:1011
 #, c-format
 msgid "malformed line: %s"
 msgstr "línia mal formada: %s"
 
-#: midx.c:1162
+#: midx.c:1181
 msgid "ignoring existing multi-pack-index; checksum mismatch"
 msgstr ""
 "s'està ignorant l'índex multipaquet existent; la suma de verificació no "
 "coincideix"
 
-#: midx.c:1187
+#: midx.c:1206
 msgid "could not load pack"
 msgstr "no s'ha pogut carregar el paquet"
 
-#: midx.c:1193
+#: midx.c:1212
 #, c-format
 msgid "could not open index for %s"
 msgstr "s'ha produït un error en obrir l'índex per «%s»"
 
-#: midx.c:1204
+#: midx.c:1223
 msgid "Adding packfiles to multi-pack-index"
 msgstr "S'estan afegint fitxers empaquetats a l'índex multipaquet"
 
-#: midx.c:1247
+#: midx.c:1266
 #, c-format
 msgid "unknown preferred pack: '%s'"
 msgstr "paquet preferit desconegut: «%s»"
 
-#: midx.c:1292
+#: midx.c:1311
 #, c-format
 msgid "cannot select preferred pack %s with no objects"
-msgstr "no es pot selecionar un paquet preferit %s sense objectes"
+msgstr "no es pot seleccionar un paquet preferit %s sense objectes"
 
-#: midx.c:1324
+#: midx.c:1343
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "no s'ha vist caure el fitxer empaquetat %s"
 
-#: midx.c:1370
+#: midx.c:1389
 #, c-format
 msgid "preferred pack '%s' is expired"
 msgstr "el paquet preferit «%s» ha caducat"
 
-#: midx.c:1383
+#: midx.c:1402
 msgid "no pack files to index."
 msgstr "no hi ha fitxers empaquetats a indexar."
 
-#: midx.c:1420
+#: midx.c:1409
+#, fuzzy
+msgid "refusing to write multi-pack .bitmap without any objects"
+msgstr "es nega a escriure el .bitmap multi-paquet sense cap objecte"
+
+#: midx.c:1451
 msgid "could not write multi-pack bitmap"
 msgstr "no s'han pogut escriure els mapes de bits dels multipaquets"
 
-#: midx.c:1430
+#: midx.c:1461
 msgid "could not write multi-pack-index"
 msgstr "no s'ha pogut escriure l'índex multipaquet"
 
-#: midx.c:1489 builtin/clean.c:37
+#: midx.c:1520 builtin/clean.c:37
 #, c-format
 msgid "failed to remove %s"
 msgstr "s'ha produït un error en eliminar %s"
 
-#: midx.c:1522
+#: midx.c:1553
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "no s'ha pogut netejar l'índex multipaquet a %s"
 
-#: midx.c:1585
+#: midx.c:1616
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr ""
 "el fitxer de l'índex multipaquet existeix, però no s'ha pogut analitzar"
 
-#: midx.c:1593
+#: midx.c:1624
 msgid "incorrect checksum"
 msgstr "suma de verificació incorrecta"
 
-#: midx.c:1596
+#: midx.c:1627
 msgid "Looking for referenced packfiles"
 msgstr "S'estan cercant fitxers empaquetats referenciats"
 
-#: midx.c:1611
+#: midx.c:1642
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr ""
 "oid fanout desordenat: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 
-#: midx.c:1616
+#: midx.c:1647
 msgid "the midx contains no oid"
 msgstr "el midx no conté cap oid"
 
-#: midx.c:1625
+#: midx.c:1656
 msgid "Verifying OID order in multi-pack-index"
 msgstr "S'està verificant l'ordre OID a l'índex multipaquet"
 
-#: midx.c:1634
+#: midx.c:1665
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "oid lookup desordenat: oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1654
+#: midx.c:1685
 msgid "Sorting objects by packfile"
 msgstr "S'estan ordenant els objectes per fitxer empaquetats"
 
-#: midx.c:1661
+#: midx.c:1692
 msgid "Verifying object offsets"
 msgstr "S'estan verificant els desplaçaments dels objectes"
 
-#: midx.c:1677
+#: midx.c:1708
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "no s'ha pogut carregar l'entrada del paquet per a oid[%d] = %s"
 
-#: midx.c:1683
+#: midx.c:1714
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "no s'ha pogut carregar l'índex del paquet per al fitxer empaquetat %s"
 
-#: midx.c:1692
+#: midx.c:1723
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr ""
 "desplaçament incorrecte de l'objecte per a oid[%d] = %s: %<PRIx64> != "
 "%<PRIx64>"
 
-#: midx.c:1719
+#: midx.c:1750
 msgid "Counting referenced objects"
 msgstr "S'estan comptant els objectes referenciats"
 
-#: midx.c:1729
+#: midx.c:1760
 msgid "Finding and deleting unreferenced packfiles"
 msgstr "S'estan cercant i suprimint els fitxers de paquets no referenciats"
 
-#: midx.c:1921
+#: midx.c:1952
 msgid "could not start pack-objects"
 msgstr "no s'ha pogut iniciar el pack-objects"
 
-#: midx.c:1941
+#: midx.c:1972
 msgid "could not finish pack-objects"
 msgstr "no s'ha pogut finalitzar el pack-objects"
 
@@ -5704,7 +5829,7 @@ msgstr "no s'ha pogut crear un fil «lazy_name»: %s"
 msgid "unable to join lazy_name thread: %s"
 msgstr "no s'ha pogut unir el fil «lazy_name»: %s"
 
-#: notes-merge.c:277
+#: notes-merge.c:276
 #, c-format
 msgid ""
 "You have not concluded your previous notes merge (%s exists).\n"
@@ -5713,7 +5838,7 @@ msgstr ""
 "No heu acabat la vostra fusió de notes prèvia (%s existeix).\n"
 "Useu «git notes merge --commit» o «git notes merge --abort» per a cometre/avortar la fusió prèvia abans de començar una fusió de notes nova."
 
-#: notes-merge.c:284
+#: notes-merge.c:283
 #, c-format
 msgid "You have not concluded your notes merge (%s exists)."
 msgstr "No heu conclòs la vostra fusió de notes (%s existeix)."
@@ -5740,279 +5865,343 @@ msgstr "S'està refusant reescriure les notes en %s (fora de refs/notes/)"
 msgid "Bad %s value: '%s'"
 msgstr "Valor erroni de %s: «%s»"
 
-#: object-file.c:456
+#: object-file.c:457
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr ""
 "no existeix el directori d'objecte %s; comproveu "
 ".git/objects/info/alternates"
 
-#: object-file.c:514
+#: object-file.c:515
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr "no s'ha pogut normalitzar el camí a l'objecte alternatiu: %s"
 
-#: object-file.c:588
+#: object-file.c:589
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr ""
 "%s: s'estan ignorant els emmagatzematges alternatius d'objectes, imbricació "
 "massa profunda"
 
-#: object-file.c:595
+#: object-file.c:596
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr "no s'ha pogut normalitzar el directori de l'objecte: %s"
 
-#: object-file.c:638
+#: object-file.c:639
 msgid "unable to fdopen alternates lockfile"
 msgstr "no s'ha pogut fer «fdopen» al fitxer de bloqueig alternatiu"
 
-#: object-file.c:656
+#: object-file.c:657
 msgid "unable to read alternates file"
 msgstr "no es pot llegir el fitxer «alternates»"
 
-#: object-file.c:663
+#: object-file.c:664
 msgid "unable to move new alternates file into place"
 msgstr "no s'ha pogut moure el nou fitxer «alternates» al lloc"
 
-#: object-file.c:741
+#: object-file.c:742
 #, c-format
 msgid "path '%s' does not exist"
 msgstr "el camí «%s» no existeix"
 
-#: object-file.c:762
+#: object-file.c:763
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr ""
 "encara no s'admet el repositori de referència «%s» com a agafament enllaçat."
 
-#: object-file.c:768
+#: object-file.c:769
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "el repositori de referència «%s» no és un repositori local."
 
-#: object-file.c:774
+#: object-file.c:775
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr "el repositori de referència «%s» és superficial"
 
-#: object-file.c:782
+#: object-file.c:783
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr "el repositori de referència «%s» és empeltat"
 
-#: object-file.c:813
+#: object-file.c:814
 #, c-format
 msgid "could not find object directory matching %s"
 msgstr "no s'ha pogut trobar el directori de l'objecte que coincideixi amb %s"
 
-#: object-file.c:863
+#: object-file.c:864
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr ""
 "línia no vàlida quan s'analitzaven les referències de l'«alternate»: %s"
 
-#: object-file.c:1013
+#: object-file.c:1014
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr "s'està intentant fer mmap %<PRIuMAX> per sobre del límit %<PRIuMAX>"
 
-#: object-file.c:1048
+#: object-file.c:1049
 #, c-format
 msgid "mmap failed%s"
 msgstr "mmap ha fallat%s"
 
-#: object-file.c:1214
+#: object-file.c:1230
 #, c-format
 msgid "object file %s is empty"
 msgstr "el tipus d'objecte %s és buit"
 
-#: object-file.c:1333 object-file.c:2542
+#: object-file.c:1349 object-file.c:2588
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr "objecte solt corrupte «%s»"
 
-#: object-file.c:1335 object-file.c:2546
+#: object-file.c:1351 object-file.c:2592
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr "brossa al final de l'objecte solt «%s»"
 
-#: object-file.c:1457
+#: object-file.c:1473
 #, c-format
 msgid "unable to parse %s header"
 msgstr "no s'ha pogut analitzar la capçalera %s"
 
-#: object-file.c:1459
+#: object-file.c:1475
 msgid "invalid object type"
 msgstr "tipus d'objecte és incorrecte"
 
-#: object-file.c:1470
+#: object-file.c:1486
 #, c-format
 msgid "unable to unpack %s header"
 msgstr "no s'ha pogut desempaquetar la capçalera %s"
 
-#: object-file.c:1474
+#: object-file.c:1490
 #, c-format
 msgid "header for %s too long, exceeds %d bytes"
 msgstr "la capçalera per a %s és massa llarga, supera els %d bytes"
 
-#: object-file.c:1704
+#: object-file.c:1720
 #, c-format
 msgid "failed to read object %s"
 msgstr "s'ha produït un error en llegir l'objecte %s"
 
-#: object-file.c:1708
+#: object-file.c:1724
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr "no s'ha trobat el reemplaçament %s per a %s"
 
-#: object-file.c:1712
+#: object-file.c:1728
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr "l'objecte solt %s (emmagatzemat a %s) és corrupte"
 
-#: object-file.c:1716
+#: object-file.c:1732
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr "l'objecte empaquetat %s (emmagatzemat a %s) és corrupte"
 
-#: object-file.c:1821
+#: object-file.c:1855
 #, c-format
 msgid "unable to write file %s"
 msgstr "no s'ha pogut escriure al fitxer %s"
 
-#: object-file.c:1828
+#: object-file.c:1862
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr "no s'ha pogut establir el permís a «%s»"
 
-#: object-file.c:1835
+#: object-file.c:1869
 msgid "file write error"
 msgstr "s'ha produït un error en escriure al fitxer"
 
-#: object-file.c:1858
+#: object-file.c:1904
 msgid "error when closing loose object file"
 msgstr "error en tancar el fitxer d'objecte solt"
 
-#: object-file.c:1925
+#: object-file.c:1971
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr ""
 "permisos insuficients per a afegir un objecte a la base de dades del "
 "repositori %s"
 
-#: object-file.c:1927
+#: object-file.c:1973
 msgid "unable to create temporary file"
 msgstr "no s'ha pogut crear un fitxer temporal"
 
-#: object-file.c:1951
+#: object-file.c:1997
 msgid "unable to write loose object file"
 msgstr "no s'ha pogut escriure el fitxer d'objecte solt"
 
-#: object-file.c:1957
+#: object-file.c:2003
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr "no s'ha pogut desinflar l'object nou %s (%d)"
 
-#: object-file.c:1961
+#: object-file.c:2007
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr "ha fallat deflateEnd a l'objecte %s(%d)"
 
-#: object-file.c:1965
+#: object-file.c:2011
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr "confós per la font de dades inestable de l'objecte per a %s"
 
-#: object-file.c:1976 builtin/pack-objects.c:1243
+#: object-file.c:2022 builtin/pack-objects.c:1251
 #, c-format
 msgid "failed utime() on %s"
 msgstr "ha fallat utime() a %s"
 
-#: object-file.c:2054
+#: object-file.c:2100
 #, c-format
 msgid "cannot read object for %s"
 msgstr "no es pot llegir l'objecte per a %s"
 
-#: object-file.c:2105
+#: object-file.c:2151
 msgid "corrupt commit"
 msgstr "comissió corrupta"
 
-#: object-file.c:2113
+#: object-file.c:2159
 msgid "corrupt tag"
 msgstr "etiqueta corrupta"
 
-#: object-file.c:2213
+#: object-file.c:2259
 #, c-format
 msgid "read error while indexing %s"
 msgstr "error de lectura mentre s'indexava %s"
 
-#: object-file.c:2216
+#: object-file.c:2262
 #, c-format
 msgid "short read while indexing %s"
 msgstr "lectura curta mentre s'indexa %s"
 
-#: object-file.c:2289 object-file.c:2299
+#: object-file.c:2335 object-file.c:2345
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr "%s: no s'han pogut inserir a la base de dades"
 
-#: object-file.c:2305
+#: object-file.c:2351
 #, c-format
 msgid "%s: unsupported file type"
 msgstr "%s: tipus de fitxer no suportat"
 
-#: object-file.c:2329 builtin/fetch.c:1453
+#: object-file.c:2375 builtin/fetch.c:1494
 #, c-format
 msgid "%s is not a valid object"
 msgstr "%s no és un objecte vàlid"
 
-#: object-file.c:2331
+#: object-file.c:2377
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "%s no és un objecte de «%s» vàlid"
 
-#: object-file.c:2358
+#: object-file.c:2404
 #, c-format
 msgid "unable to open %s"
 msgstr "no s'ha pogut obrir %s"
 
-#: object-file.c:2553
+#: object-file.c:2599
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr "no coincideix la suma per a %s (s'esperava %s)"
 
-#: object-file.c:2576
+#: object-file.c:2622
 #, c-format
 msgid "unable to mmap %s"
 msgstr "no s'ha pogut fer «mmap» %s"
 
-#: object-file.c:2582
+#: object-file.c:2628
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr "no s'ha pogut desempaquetar la capçalera de %s"
 
-#: object-file.c:2587
+#: object-file.c:2633
 #, c-format
 msgid "unable to parse header of %s"
 msgstr "no s'ha pogut analitzar la capçalera de %s"
 
-#: object-file.c:2598
+#: object-file.c:2644
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr "no s'han pogut desempaquetar els continguts de %s"
 
-#: object-name.c:480
+#. TRANSLATORS: This is a line of ambiguous object
+#. output shown when we cannot look up or parse the
+#. object in question. E.g. "deadbeef [bad object]".
+#: object-name.c:382
+#, c-format
+msgid "%s [bad object]"
+msgstr "%s [objecte incorrecte]"
+
+#. TRANSLATORS: This is a line of ambiguous commit
+#. object output. E.g.:
+#. *
+#.    "deadbeef commit 2021-01-01 - Some Commit Message"
+#: object-name.c:407
+#, c-format
+msgid "%s commit %s - %s"
+msgstr "%s comissió %s - %s"
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output. E.g.:
+#. *
+#.    "deadbeef tag 2022-01-01 - Some Tag Message"
+#. *
+#. The second argument is the YYYY-MM-DD found
+#. in the tag.
+#. *
+#. The third argument is the "tag" string
+#. from object.c.
+#: object-name.c:428
+#, c-format
+msgid "%s tag %s - %s"
+msgstr "%s etiqueta %s - %s"
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output where we couldn't parse
+#. the tag itself. E.g.:
+#. *
+#.    "deadbeef [bad tag, could not parse it]"
+#: object-name.c:439
+#, c-format, fuzzy
+msgid "%s [bad tag, could not parse it]"
+msgstr "tagetiqueta dolenta, no s'ha pogut analitzar]"
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef tree".
+#: object-name.c:447
+#, c-format, fuzzy
+msgid "%s tree"
+msgstr "arbre del 0%"
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef blob".
+#: object-name.c:453
+#, c-format, fuzzy
+msgid "%s blob"
+msgstr "blob"
+
+#: object-name.c:569
 #, c-format
 msgid "short object ID %s is ambiguous"
 msgstr "l'id d'objecte curt %s és ambigu"
 
-#: object-name.c:491
-msgid "The candidates are:"
-msgstr "Els candidats són:"
+#. TRANSLATORS: The argument is the list of ambiguous
+#. objects composed in show_ambiguous_object(). See
+#. its "TRANSLATORS" comments for details.
+#: object-name.c:591
+#, c-format
+msgid ""
+"The candidates are:\n"
+"%s"
+msgstr ""
+"Els candidats són:\n"
+"%s"
 
-#: object-name.c:790
+#: object-name.c:888
 msgid ""
 "Git normally never creates a ref that ends with 40 hex characters\n"
 "because it will be ignored when you just specify 40-hex. These refs\n"
@@ -6036,22 +6225,22 @@ msgstr ""
 "suprimiu-les. Desactiveu aquest missatge executant\n"
 "«git config advice.objectNameWarning false»"
 
-#: object-name.c:910
+#: object-name.c:1008
 #, c-format
 msgid "log for '%.*s' only goes back to %s"
 msgstr "registre per a «%.*s» només retorna a %s"
 
-#: object-name.c:918
+#: object-name.c:1016
 #, c-format
 msgid "log for '%.*s' only has %d entries"
 msgstr "registre per a «%.*s» només té %d entrades"
 
-#: object-name.c:1696
+#: object-name.c:1794
 #, c-format
 msgid "path '%s' exists on disk, but not in '%.*s'"
 msgstr "el camí «%s» existeix al disc, però no a «%.*s»"
 
-#: object-name.c:1702
+#: object-name.c:1800
 #, c-format
 msgid ""
 "path '%s' exists, but not '%s'\n"
@@ -6060,12 +6249,12 @@ msgstr ""
 "el camí «%s» existeix, però no «%s»\n"
 "consell: volíeu dir «%.*s:%s» conegut com a «%.*s:./%s»?"
 
-#: object-name.c:1711
+#: object-name.c:1809
 #, c-format
 msgid "path '%s' does not exist in '%.*s'"
 msgstr "el camí «%s» no existeix en «%.*s»"
 
-#: object-name.c:1739
+#: object-name.c:1837
 #, c-format
 msgid ""
 "path '%s' is in the index, but not at stage %d\n"
@@ -6074,7 +6263,7 @@ msgstr ""
 "el camí «%s» està a l'índex, però no a «stage» %d\n"
 ".consell: volíeu dir «:%d:%s»?"
 
-#: object-name.c:1755
+#: object-name.c:1853
 #, c-format
 msgid ""
 "path '%s' is in the index, but not '%s'\n"
@@ -6083,22 +6272,27 @@ msgstr ""
 "el camí «%s» està a l'índex, però no a «%s»\n"
 ".consell: volíeu dir «:%d:%s» conegut com a «:%d:./%s»?"
 
-#: object-name.c:1763
+#: object-name.c:1861
 #, c-format
 msgid "path '%s' exists on disk, but not in the index"
 msgstr "el camí «%s» existeix al disc, però no a l'índex"
 
-#: object-name.c:1765
+#: object-name.c:1863
 #, c-format
 msgid "path '%s' does not exist (neither on disk nor in the index)"
 msgstr "el camí «%s» no existeix (ni al disc ni a l'índex)"
 
-#: object-name.c:1778
+#: object-name.c:1876
 msgid "relative path syntax can't be used outside working tree"
 msgstr ""
 "la sintaxi de camí relatiu no es pot utilitzar fora de l'arbre de treball"
 
-#: object-name.c:1916
+#: object-name.c:1901
+#, c-format, fuzzy
+msgid "<object>:<path> required, only <object> '%s' given"
+msgstr "<object>:<path> requerit, només <object>'%s' donat"
+
+#: object-name.c:2014
 #, c-format
 msgid "invalid object name '%.*s'."
 msgstr "nom d'objecte no vàlid «%.*s»."
@@ -6123,7 +6317,7 @@ msgstr "l'objecte %s té un identificador de tipus %d desconegut"
 msgid "unable to parse object: %s"
 msgstr "no s'ha pogut analitzar l'objecte: %s"
 
-#: object.c:283 object.c:295
+#: object.c:283 object.c:294
 #, c-format
 msgid "hash mismatch %s"
 msgstr "el resum no coincideix %s"
@@ -6132,21 +6326,21 @@ msgstr "el resum no coincideix %s"
 msgid "multi-pack bitmap is missing required reverse index"
 msgstr "falta l'índex invers necessari al mapa de bits multipaquet"
 
-#: pack-bitmap.c:429
+#: pack-bitmap.c:433
 msgid "load_reverse_index: could not open pack"
 msgstr "load_reverse_index: no s'ha pogut obrir el paquet"
 
-#: pack-bitmap.c:1069 pack-bitmap.c:1075 builtin/pack-objects.c:2424
+#: pack-bitmap.c:1072 pack-bitmap.c:1078 builtin/pack-objects.c:2432
 #, c-format
 msgid "unable to get size of %s"
 msgstr "no s'ha pogut obtenir la mida de %s"
 
-#: pack-bitmap.c:1935
+#: pack-bitmap.c:1937
 #, c-format
 msgid "could not find %s in pack %s at offset %<PRIuMAX>"
 msgstr "no s'ha pogut trobar %s al paquet %s al desplaçament %<PRIuMAX>"
 
-#: pack-bitmap.c:1971 builtin/rev-list.c:92
+#: pack-bitmap.c:1973 builtin/rev-list.c:91
 #, c-format
 msgid "unable to get disk usage of %s"
 msgstr "no s'ha pogut obtenir l'ús del disc de %s"
@@ -6190,7 +6384,7 @@ msgstr "no s'ha pogut fer stat a: %s"
 msgid "failed to make %s readable"
 msgstr "s'ha produït un error en fer %s llegible"
 
-#: pack-write.c:520
+#: pack-write.c:521
 #, c-format
 msgid "could not write '%s' promisor file"
 msgstr "no s'ha pogut escriure «%s» al fitxer «promisor»"
@@ -6237,7 +6431,7 @@ msgid "malformed object name '%s'"
 msgstr "nom d'objecte «%s» mal format"
 
 #: parse-options-cb.c:307
-#,  c-format
+#, c-format
 msgid "option `%s' expects \"%s\" or \"%s\""
 msgstr "l'opció «%s» espera «%s» o «%s»"
 
@@ -6510,15 +6704,15 @@ msgstr "no s'ha pogut analitzar el format --pretty"
 
 #: promisor-remote.c:31
 msgid "promisor-remote: unable to fork off fetch subprocess"
-msgstr "promisor-remote: no es pot bifurcar obtenint el subprocés"
+msgstr "promisor-remote: no es pot bifurcar el subprocés d'obtenció"
 
 #: promisor-remote.c:38 promisor-remote.c:40
 msgid "promisor-remote: could not write to fetch subprocess"
-msgstr "promisor-remote: no s'ha pogut escriure per a obtenir el subprocés"
+msgstr "promisor-remote: no s'ha pogut escriure per al subprocés d'obtenció"
 
 #: promisor-remote.c:44
 msgid "promisor-remote: could not close stdin to fetch subprocess"
-msgstr "promisor-remote: no s'ha pogut tancar stdin per a obtenir el subprocés"
+msgstr "promisor-remote: no s'ha pogut tancar stdin al subprocés d'obtenció"
 
 #: promisor-remote.c:54
 #, c-format
@@ -6533,20 +6727,20 @@ msgstr "object-info: s'esperava una neteja després dels arguments"
 msgid "Removing duplicate objects"
 msgstr "S'estan eliminant els objectes duplicats"
 
-#: range-diff.c:67
+#: range-diff.c:68
 msgid "could not start `log`"
 msgstr "no s'ha pogut iniciar «log»"
 
-#: range-diff.c:69
+#: range-diff.c:70
 msgid "could not read `log` output"
 msgstr "no s'ha pogut llegir la sortida de «log»"
 
-#: range-diff.c:97 sequencer.c:5602
+#: range-diff.c:98 sequencer.c:5575
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "no s'ha pogut analitzar la comissió «%s»"
 
-#: range-diff.c:111
+#: range-diff.c:109
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
@@ -6555,65 +6749,65 @@ msgstr ""
 "no s'ha pogut analitzar la primera línia de la sortida «log»: no començava "
 "amb «commit»: «%s»"
 
-#: range-diff.c:137
+#: range-diff.c:132
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "no s'ha pogut llegir la capçalera de la gif «%.*s»"
 
-#: range-diff.c:304
+#: range-diff.c:300
 msgid "failed to generate diff"
 msgstr "s'ha produït un error en generar el diff"
 
-#: range-diff.c:562 range-diff.c:564
+#: range-diff.c:558 range-diff.c:560
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "no s'ha pogut llegir el fitxer de registre per a «%s»"
 
-#: read-cache.c:723
+#: read-cache.c:737
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr "no s'afegirà l'àlies «%s»: («%s» ja existeix en l'índex)"
 
-#: read-cache.c:739
+#: read-cache.c:753
 msgid "cannot create an empty blob in the object database"
 msgstr "no es pot crear un blob buit a la base de dades d'objectes"
 
-#: read-cache.c:761
+#: read-cache.c:775
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr ""
 "%s: només pot afegir fitxers normals, enllaços simbòlics o directoris git"
 
-#: read-cache.c:766 builtin/submodule--helper.c:3242
+#: read-cache.c:780 builtin/submodule--helper.c:3359
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr "«%s» no té una comissió comprovada"
 
-#: read-cache.c:818
+#: read-cache.c:832
 #, c-format
 msgid "unable to index file '%s'"
 msgstr "no es pot llegir indexar el fitxer «%s»"
 
-#: read-cache.c:837
+#: read-cache.c:851
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr "no s'ha pogut afegir «%s» a l'índex"
 
-#: read-cache.c:848
+#: read-cache.c:862
 #, c-format
 msgid "unable to stat '%s'"
 msgstr "no s'ha pogut fer «stat» a «%s»"
 
-#: read-cache.c:1386
+#: read-cache.c:1404
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr "«%s» apareix com a fitxer i com a directori"
 
-#: read-cache.c:1601
+#: read-cache.c:1619
 msgid "Refresh index"
 msgstr "Actualitza l'índex"
 
-#: read-cache.c:1733
+#: read-cache.c:1751
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -6622,7 +6816,7 @@ msgstr ""
 "index.version està establerta, però el valor no és vàlid.\n"
 "S'està usant la versió %i"
 
-#: read-cache.c:1743
+#: read-cache.c:1761
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -6631,143 +6825,148 @@ msgstr ""
 "GIT_INDEX_VERSION està establerta, però el valor no és vàlid.\n"
 "S'està usant la versió %i"
 
-#: read-cache.c:1799
+#: read-cache.c:1817
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "signatura malmesa 0x%08x"
 
-#: read-cache.c:1802
+#: read-cache.c:1820
 #, c-format
 msgid "bad index version %d"
 msgstr "versió d'índex incorrecta %d"
 
-#: read-cache.c:1811
+#: read-cache.c:1829
 msgid "bad index file sha1 signature"
 msgstr "signatura sha1 malmesa al fitxer d'índex"
 
-#: read-cache.c:1845
+#: read-cache.c:1863
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "l'índex usa l'extensió %.4s, que no es pot entendre"
 
-#: read-cache.c:1847
+#: read-cache.c:1865
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "s'està ignorant l'extensió %.4s"
 
-#: read-cache.c:1884
+#: read-cache.c:1902
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "format d'entrada d'índex desconeguda «0x%08x»"
 
-#: read-cache.c:1900
+#: read-cache.c:1918
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "camp del nom mal formatat l'índex, camí a prop «%s»"
 
-#: read-cache.c:1957
+#: read-cache.c:1975
 msgid "unordered stage entries in index"
 msgstr "entrades «stage» no ordenades en l'índex"
 
-#: read-cache.c:1960
+#: read-cache.c:1978
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "múltiples entrades «stage» per al fitxer fusionat «%s»"
 
-#: read-cache.c:1963
+#: read-cache.c:1981
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "entrades «stage» no ordenades per a «%s»"
 
-#: read-cache.c:2078 read-cache.c:2384 rerere.c:549 rerere.c:583 rerere.c:1095
-#: submodule.c:1662 builtin/add.c:600 builtin/check-ignore.c:183
-#: builtin/checkout.c:527 builtin/checkout.c:719 builtin/clean.c:1013
-#: builtin/commit.c:378 builtin/diff-tree.c:122 builtin/grep.c:519
-#: builtin/mv.c:148 builtin/reset.c:499 builtin/rm.c:293
-#: builtin/submodule--helper.c:327 builtin/submodule--helper.c:3202
+#: read-cache.c:2096 read-cache.c:2402 rerere.c:549 rerere.c:583 rerere.c:1096
+#: submodule.c:1831 builtin/add.c:586 builtin/check-ignore.c:183
+#: builtin/checkout.c:532 builtin/checkout.c:724 builtin/clean.c:1016
+#: builtin/commit.c:379 builtin/diff-tree.c:122 builtin/grep.c:521
+#: builtin/mv.c:148 builtin/reset.c:506 builtin/rm.c:293
+#: builtin/submodule--helper.c:335 builtin/submodule--helper.c:3319
 msgid "index file corrupt"
 msgstr "fitxer d'índex malmès"
 
-#: read-cache.c:2222
+#: read-cache.c:2240
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "no s'ha pogut crear fil «load_cache_entries»: %s"
 
-#: read-cache.c:2235
+#: read-cache.c:2253
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "no s'ha pogut unir al fil «load_cache_entries»: %s"
 
-#: read-cache.c:2268
+#: read-cache.c:2286
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: ha fallat l'obertura del fitxer d'índex"
 
-#: read-cache.c:2272
+#: read-cache.c:2290
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s: no es pot fer «stat» a l'índex obert"
 
-#: read-cache.c:2276
+#: read-cache.c:2294
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s: fitxer d'índex més petit que s'esperava"
 
-#: read-cache.c:2280
+#: read-cache.c:2298
 #, c-format
 msgid "%s: unable to map index file%s"
 msgstr "%s: no es pot mapar el fitxer d'índex%s"
 
-#: read-cache.c:2323
+#: read-cache.c:2341
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "no s'ha pogut crear un fil «load_index_extensions»: %s"
 
-#: read-cache.c:2350
+#: read-cache.c:2368
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "no s'ha pogut unir un fil «load_index_extensions»: %s"
 
-#: read-cache.c:2396
+#: read-cache.c:2414
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "no s'ha pogut refrescar l'índex compartit «%s»"
 
-#: read-cache.c:2455
+#: read-cache.c:2473
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "índex malmès, s'esperava %s a %s, s'ha rebut %s"
 
-#: read-cache.c:3086 strbuf.c:1191 wrapper.c:641 builtin/merge.c:1150
+#: read-cache.c:3032
+#, fuzzy
+msgid "cannot write split index for a sparse index"
+msgstr "no es pot escriure l'índex de divisió per a un índex dispers"
+
+#: read-cache.c:3114 strbuf.c:1192 wrapper.c:717 builtin/merge.c:1156
 #, c-format
 msgid "could not close '%s'"
 msgstr "no s'ha pogut tancar «%s»"
 
-#: read-cache.c:3129
+#: read-cache.c:3157
 msgid "failed to convert to a sparse-index"
 msgstr "s'ha produït un error en convertir a un índex dispers"
 
-#: read-cache.c:3200
+#: read-cache.c:3228
 #, c-format
 msgid "could not stat '%s'"
 msgstr "no s'ha pogut fer stat a «%s»"
 
-#: read-cache.c:3213
+#: read-cache.c:3241
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "no s'ha pogut obrir el directori git: %s"
 
-#: read-cache.c:3225
+#: read-cache.c:3253
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "no s'ha pogut desenllaçar: %s"
 
-#: read-cache.c:3254
+#: read-cache.c:3282
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "no s'han pogut corregir els bits de permisos en «%s»"
 
-#: read-cache.c:3411
+#: read-cache.c:3439
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s: no es pot baixar fins al «stage» #0"
@@ -6881,9 +7080,9 @@ msgstr ""
 "No obstant, si elimineu tot, s'avortarà el «rebase».\n"
 "\n"
 
-#: rebase-interactive.c:113 rerere.c:469 rerere.c:676 sequencer.c:3883
-#: sequencer.c:3909 sequencer.c:5708 builtin/fsck.c:328 builtin/gc.c:1791
-#: builtin/rebase.c:190
+#: rebase-interactive.c:113 rerere.c:469 rerere.c:677 sequencer.c:3879
+#: sequencer.c:3905 sequencer.c:5681 builtin/fsck.c:328 builtin/gc.c:1791
+#: builtin/rebase.c:191
 #, c-format
 msgid "could not write '%s'"
 msgstr "no s'ha pogut escriure «%s»"
@@ -6921,7 +7120,7 @@ msgstr ""
 msgid "%s: 'preserve' superseded by 'merges'"
 msgstr "%s: «conserva» substituït per «fusiona»"
 
-#: ref-filter.c:42 wt-status.c:2048
+#: ref-filter.c:42 wt-status.c:2057
 msgid "gone"
 msgstr "no hi és"
 
@@ -7089,81 +7288,91 @@ msgstr "aquesta ordre rebutja l'àtom %%(%.*s)"
 msgid "--format=%.*s cannot be used with --python, --shell, --tcl"
 msgstr "no es pot usar --format=%.*s amb --python, --shell, --tcl"
 
-#: ref-filter.c:1706
+#: ref-filter.c:1707
 #, c-format
 msgid "(no branch, rebasing %s)"
 msgstr "(sense branca, s'està fent «rebase» %s)"
 
-#: ref-filter.c:1709
+#: ref-filter.c:1710
 #, c-format
 msgid "(no branch, rebasing detached HEAD %s)"
 msgstr "(sense branca, s'està fent «rebase» d'un «HEAD» separat %s)"
 
-#: ref-filter.c:1712
+#: ref-filter.c:1713
 #, c-format
 msgid "(no branch, bisect started on %s)"
 msgstr "(sense branca, bisecció començada en %s)"
 
-#: ref-filter.c:1716
+#: ref-filter.c:1717
 #, c-format
 msgid "(HEAD detached at %s)"
 msgstr "(HEAD separat a %s)"
 
-#: ref-filter.c:1719
+#: ref-filter.c:1720
 #, c-format
 msgid "(HEAD detached from %s)"
 msgstr "(HEAD separat des de %s)"
 
-#: ref-filter.c:1722
+#: ref-filter.c:1723
 msgid "(no branch)"
 msgstr "(sense branca)"
 
-#: ref-filter.c:1754 ref-filter.c:1972
+#: ref-filter.c:1755 ref-filter.c:1973
 #, c-format
 msgid "missing object %s for %s"
 msgstr "manca l'objecte %s per a %s"
 
-#: ref-filter.c:1764
+#: ref-filter.c:1765
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer ha fallat en %s per a %s"
 
-#: ref-filter.c:2155
+#: ref-filter.c:2156
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "objecte mal format a «%s»"
 
-#: ref-filter.c:2245
+#: ref-filter.c:2246
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "s'està ignorant la referència amb nom malmès %s"
 
-#: ref-filter.c:2250 refs.c:676
+#: ref-filter.c:2251 refs.c:672
 #, c-format
 msgid "ignoring broken ref %s"
-msgstr "s'està ignorant la referència trencada %s"
+msgstr "s'està ignorant la referència malmesa %s"
 
-#: ref-filter.c:2629
+#: ref-filter.c:2630
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "format: manca l'àtom %%(end)"
 
-#: ref-filter.c:2740
+#: ref-filter.c:2741
 #, c-format
 msgid "malformed object name %s"
 msgstr "nom d'objecte %s mal format"
 
-#: ref-filter.c:2745
+#: ref-filter.c:2746
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "l'opció «%s» ha d'apuntar a una comissió"
 
-#: refs.c:261
+#: reflog.c:407
+#, c-format
+msgid "not a reflog: %s"
+msgstr "no és un registre de referència: %s"
+
+#: reflog.c:410
+#, c-format
+msgid "no reflog for '%s'"
+msgstr "cap registre de referència per a «%s»"
+
+#: refs.c:262
 #, c-format
 msgid "%s does not point to a valid object!"
 msgstr "%s no apunta a un objecte vàlid"
 
-#: refs.c:563
+#: refs.c:561
 #, c-format
 msgid ""
 "Using '%s' as the name for the initial branch. This default branch name\n"
@@ -7188,81 +7397,81 @@ msgstr ""
 "\n"
 "\tgit branch -m <nom>\n"
 
-#: refs.c:585
+#: refs.c:583
 #, c-format
 msgid "could not retrieve `%s`"
 msgstr "no s'ha pogut recuperar «%s»"
 
-#: refs.c:595
+#: refs.c:593
 #, c-format
 msgid "invalid branch name: %s = %s"
 msgstr "nom de branca no vàlida: %s = %s"
 
-#: refs.c:674
+#: refs.c:670
 #, c-format
 msgid "ignoring dangling symref %s"
 msgstr "s'està ignorant symref penjant %s"
 
-#: refs.c:925
+#: refs.c:919
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "registre per a ref %s té un buit després de %s"
 
-#: refs.c:932
+#: refs.c:926
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr "registre per als ref %s ha acabat inesperadament a %s"
 
-#: refs.c:997
+#: refs.c:991
 #, c-format
 msgid "log for %s is empty"
 msgstr "el registre per a %s és buit"
 
-#: refs.c:1090
+#: refs.c:1086
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "s'està refusant la referència amb nom malmès «%s»"
 
-#: refs.c:1168
+#: refs.c:1164
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "ha fallat update_ref per a la ref «%s»: %s"
 
-#: refs.c:2067
+#: refs.c:2059
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "no es permeten múltiples actualitzacions per a la referència «%s»"
 
-#: refs.c:2150
+#: refs.c:2145
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "no està permès actualitzar les referències en un entorn de quarantena"
 
-#: refs.c:2161
+#: refs.c:2156
 msgid "ref updates aborted by hook"
 msgstr "les actualitzacions de referències s'han avortat per un lligam"
 
-#: refs.c:2269 refs.c:2299
+#: refs.c:2264 refs.c:2294
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "«%s» existeix; no es pot crear «%s»"
 
-#: refs.c:2275 refs.c:2310
+#: refs.c:2270 refs.c:2305
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "no es poden processar «%s» i «%s» a la vegada"
 
-#: refs/files-backend.c:1267
+#: refs/files-backend.c:1295
 #, c-format
 msgid "could not remove reference %s"
 msgstr "no s'ha pogut eliminar la referència %s"
 
-#: refs/files-backend.c:1281 refs/packed-backend.c:1549
-#: refs/packed-backend.c:1559
+#: refs/files-backend.c:1310 refs/packed-backend.c:1565
+#: refs/packed-backend.c:1575
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr "no s'ha pogut suprimir la referència %s: %s"
 
-#: refs/files-backend.c:1284 refs/packed-backend.c:1562
+#: refs/files-backend.c:1313 refs/packed-backend.c:1578
 #, c-format
 msgid "could not delete references: %s"
 msgstr "no s'han pogut suprimir les referències: %s"
@@ -7286,37 +7495,37 @@ msgstr "més d'un paquet de recepció donat, usant el primer"
 msgid "more than one uploadpack given, using the first"
 msgstr "més d'un paquet de càrrega donat, usant el primer"
 
-#: remote.c:699
+#: remote.c:698
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr "No es poden obtenir ambdós %s i %s a %s"
 
-#: remote.c:703
+#: remote.c:702
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr "%s generalment segueix %s, no %s"
 
-#: remote.c:707
+#: remote.c:706
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr "%s segueix ambdós %s i %s"
 
-#: remote.c:775
+#: remote.c:774
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr "la clau «%s» del patró no té «*»"
 
-#: remote.c:785
+#: remote.c:784
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr "el valor «%s» del patró no té «*»"
 
-#: remote.c:1192
+#: remote.c:1191
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "l'especificació de referència src %s no coincideix amb cap referència"
 
-#: remote.c:1197
+#: remote.c:1196
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr ""
@@ -7325,7 +7534,7 @@ msgstr ""
 #. TRANSLATORS: "matches '%s'%" is the <dst> part of "git push
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
-#: remote.c:1212
+#: remote.c:1211
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -7348,7 +7557,7 @@ msgstr ""
 "\n"
 "Res d'això ha funcionat. Cal que proporcioneu una referència completa."
 
-#: remote.c:1232
+#: remote.c:1231
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -7359,7 +7568,7 @@ msgstr ""
 "Voleu crear una branca nova empenyent a\n"
 "«%s:refs/heads/%s»?"
 
-#: remote.c:1237
+#: remote.c:1236
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -7369,7 +7578,7 @@ msgstr ""
 "La part <src> de l'especificació de la referència és un objecte d'etiqueta.\n"
 "Voleu crear una etiqueta pujant-la a «%srefs/tags/%s»?"
 
-#: remote.c:1242
+#: remote.c:1241
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -7379,7 +7588,7 @@ msgstr ""
 "La part <src> de l'especificació de la referència és un objecte d'arbre.\n"
 "Voleu crear una etiqueta pujant-la a «%srefs/tags/%s»?"
 
-#: remote.c:1247
+#: remote.c:1246
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -7390,118 +7599,118 @@ msgstr ""
 "Voleu posar una etiqueta al blob nou mitjançant la pujada a\n"
 "?«%s:refs/tags/%s»?"
 
-#: remote.c:1283
+#: remote.c:1282
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "«%s» no es pot resoldre a una branca"
 
-#: remote.c:1294
+#: remote.c:1293
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "no s'ha pogut suprimir «%s»: la referència remota no existeix"
 
-#: remote.c:1306
+#: remote.c:1305
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr ""
 "l'especificació de la referència dst %s coincideixen amb més d'una "
 "referència"
 
-#: remote.c:1313
+#: remote.c:1312
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "l'especificació de la referència dst %s rep més d'una referència src"
 
-#: remote.c:1834 remote.c:1941
+#: remote.c:1833 remote.c:1940
 msgid "HEAD does not point to a branch"
 msgstr "HEAD no assenyala cap branca"
 
-#: remote.c:1843
+#: remote.c:1842
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "no existeix la branca: «%s»"
 
-#: remote.c:1846
+#: remote.c:1845
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "cap font configurada per a la branca «%s»"
 
-#: remote.c:1852
+#: remote.c:1851
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "la branca font «%s» no s'emmagatzema com a branca amb seguiment remot"
 
-#: remote.c:1867
+#: remote.c:1866
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr ""
 "el destí de pujada «%s» en el remot «%s» no té cap branca amb seguiment "
 "remot"
 
-#: remote.c:1882
+#: remote.c:1881
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "la branca «%s» no té cap remot al qual pujar"
 
-#: remote.c:1892
+#: remote.c:1891
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
-msgstr "les especificacions de referència de «%s» no inclouen «%s»"
+msgstr "les especificacions de referència de pujada «%s» no inclouen «%s»"
 
-#: remote.c:1905
+#: remote.c:1904
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "push no té destí (push.default és «nothing»)"
 
-#: remote.c:1927
+#: remote.c:1926
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "no es pot resoldre una pujada «simple» a un sol destí"
 
-#: remote.c:2060
+#: remote.c:2059
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "no s'ha pogut trobar la referència remota %s"
 
-#: remote.c:2073
+#: remote.c:2072
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* S'estan ignorant les referències «%s» localment"
 
-#: remote.c:2236
+#: remote.c:2235
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "La vostra branca està basada en «%s», però la font no hi és.\n"
 
-#: remote.c:2240
+#: remote.c:2239
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (useu «git branch --unset-upstream» per a arreglar-ho)\n"
 
-#: remote.c:2243
+#: remote.c:2242
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "La vostra branca està al dia amb «%s».\n"
 
-#: remote.c:2247
+#: remote.c:2246
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "La vostra branca i «%s» es refereixen a diferents comissions.\n"
 
-#: remote.c:2250
+#: remote.c:2249
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (useu «%s» per a detalls)\n"
 
-#: remote.c:2254
+#: remote.c:2253
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "La vostra branca està %2$d comissió per davant de «%1$s».\n"
 msgstr[1] "La vostra branca està %2$d comissions per davant de «%1$s».\n"
 
-#: remote.c:2260
+#: remote.c:2259
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (useu «git push» per a publicar les vostres comissions locals)\n"
 
-#: remote.c:2263
+#: remote.c:2262
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -7513,11 +7722,11 @@ msgstr[1] ""
 "La vostra branca està %2$d comissions per darrere de «%1$s», i pot avançar-"
 "se ràpidament.\n"
 
-#: remote.c:2271
+#: remote.c:2270
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (useu «git pull» per a actualitzar la vostra branca local)\n"
 
-#: remote.c:2274
+#: remote.c:2273
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -7532,11 +7741,11 @@ msgstr[1] ""
 "La vostra branca i «%s» han divergit,\n"
 "i tenen %d i %d comissions distintes cada una, respectivament.\n"
 
-#: remote.c:2284
+#: remote.c:2283
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (useu «git pull» per a fusionar la branca remota amb la vostra)\n"
 
-#: remote.c:2476
+#: remote.c:2475
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "no es pot analitzar el nom de l'objecte esperat «%s»"
@@ -7574,104 +7783,108 @@ msgstr "s'han produït errors en escriure «%s» (%s)"
 msgid "failed to flush '%s'"
 msgstr "no s'ha pogut buidar «%s»"
 
-#: rerere.c:487 rerere.c:1023
+#: rerere.c:487 rerere.c:1024
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
 msgstr "no s'han pogut analitzar els pedaços en conflicte a «%s»"
 
-#: rerere.c:668
+#: rerere.c:669
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr "s'ha produït un error en fer «failed utime()» a «%s»"
 
-#: rerere.c:678
+#: rerere.c:679
 #, c-format
 msgid "writing '%s' failed"
 msgstr "s'ha produït un error en escriure «%s»"
 
-#: rerere.c:698
+#: rerere.c:699
 #, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr "«Staged» «%s» utilitzant una resolució anterior."
 
-#: rerere.c:737
+#: rerere.c:738
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr "Es recorda la resolució per a «%s»."
 
-#: rerere.c:772
+#: rerere.c:773
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr "S'ha resolt «%s» usant una resolució anterior."
 
-#: rerere.c:787
+#: rerere.c:788
 #, c-format
 msgid "cannot unlink stray '%s'"
 msgstr "no es pot desenllaçar «%s» (extraviat)"
 
-#: rerere.c:791
+#: rerere.c:792
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr "Imatge prèvia registrada per a «%s»"
 
-#: rerere.c:865 submodule.c:2121 builtin/log.c:2017
-#: builtin/submodule--helper.c:1777 builtin/submodule--helper.c:1820
+#: rerere.c:866 submodule.c:2290 builtin/log.c:2042
+#: builtin/submodule--helper.c:1786 builtin/submodule--helper.c:1833
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "no s'ha pogut crear el directori «%s»"
 
-#: rerere.c:1041
+#: rerere.c:1042
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr "ha fallat en actualitzar l'estat en conflicte a «%s»"
 
-#: rerere.c:1052 rerere.c:1059
+#: rerere.c:1053 rerere.c:1060
 #, c-format
 msgid "no remembered resolution for '%s'"
 msgstr "no hi ha cap resolució recordada per a «%s»"
 
-#: rerere.c:1061
+#: rerere.c:1062
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr "no es pot fer «unlink» de «%s»"
 
-#: rerere.c:1071
+#: rerere.c:1072
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr "Imatge prèvia actualitzada per a «%s»"
 
-#: rerere.c:1080
+#: rerere.c:1081
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr "S'ha oblidat la resolució per a «%s»\n"
 
-#: rerere.c:1191
+#: rerere.c:1192
 msgid "unable to open rr-cache directory"
 msgstr "no s'ha pogut obrir el directori rr-cache"
 
-#: reset.c:42
+#: reset.c:112
 msgid "could not determine HEAD revision"
 msgstr "no s'ha pogut determinar la revisió de HEAD"
 
-#: reset.c:70 reset.c:76 sequencer.c:3700
+#: reset.c:141 reset.c:147 sequencer.c:3696
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "s'ha produït un error en cercar l'arbre de %s"
 
-#: revision.c:2347
+#: revision.c:2358
 msgid "--unpacked=<packfile> no longer supported"
 msgstr "--unpacked=<packfile> ja no s'admet"
 
-#: revision.c:2686
+#: revision.c:2712
 msgid "your current branch appears to be broken"
 msgstr "la vostra branca actual sembla malmesa"
 
-#: revision.c:2689
+#: revision.c:2715
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "la branca actual «%s» encara no té cap comissió"
 
-#: revision.c:2891
+#: revision.c:2901
+msgid "object filtering requires --objects"
+msgstr "el filtratge d'objectes requereix --objects"
+
+#: revision.c:2918
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L no és encara compatible amb formats que no siguin «-p» o «-s»"
 
@@ -7707,7 +7920,7 @@ msgstr "send-pack: no es pot bifurcar obtenint un subprocés"
 #: send-pack.c:457
 msgid "push negotiation failed; proceeding anyway with push"
 msgstr ""
-"ha fallat la negociació de l'empenta; s'està procedint igualment amb "
+"ha fallat la negociació de la pujada; s'està procedint igualment amb "
 "l'empenta"
 
 #: send-pack.c:528
@@ -7732,7 +7945,7 @@ msgstr "el destí receptor no admet pujar --atomic"
 
 #: send-pack.c:551
 msgid "the receiving end does not support push options"
-msgstr "el destí receptor no admet opcions de pujada"
+msgstr "el receptor al destí no admet opcions de pujada"
 
 #: sequencer.c:197
 #, c-format
@@ -7744,7 +7957,7 @@ msgstr "mode de neteja «%s» no vàlid en la comissió del missatge"
 msgid "could not delete '%s'"
 msgstr "no s'ha pogut suprimir «%s»"
 
-#: sequencer.c:345 sequencer.c:4751 builtin/rebase.c:563 builtin/rebase.c:1297
+#: sequencer.c:345 sequencer.c:4724 builtin/rebase.c:564 builtin/rebase.c:1326
 #: builtin/rm.c:409
 #, c-format
 msgid "could not remove '%s'"
@@ -7807,13 +8020,13 @@ msgstr ""
 "Per a interrompre i tornar a l'estat anterior abans de «git revert»,\n"
 "executeu «git revert --abort»."
 
-#: sequencer.c:448 sequencer.c:3292
+#: sequencer.c:448 sequencer.c:3288
 #, c-format
 msgid "could not lock '%s'"
 msgstr "no s'ha pogut bloquejar «%s»"
 
-#: sequencer.c:450 sequencer.c:3091 sequencer.c:3296 sequencer.c:3310
-#: sequencer.c:3561 sequencer.c:5618 strbuf.c:1188 wrapper.c:639
+#: sequencer.c:450 sequencer.c:3087 sequencer.c:3292 sequencer.c:3306
+#: sequencer.c:3557 sequencer.c:5591 strbuf.c:1189 wrapper.c:715
 #, c-format
 msgid "could not write to '%s'"
 msgstr "no s'ha pogut escriure a «%s»"
@@ -7823,14 +8036,14 @@ msgstr "no s'ha pogut escriure a «%s»"
 msgid "could not write eol to '%s'"
 msgstr "no s'ha pogut escriure el terminador de línia a «%s»"
 
-#: sequencer.c:460 sequencer.c:3096 sequencer.c:3298 sequencer.c:3312
-#: sequencer.c:3569
+#: sequencer.c:460 sequencer.c:3092 sequencer.c:3294 sequencer.c:3308
+#: sequencer.c:3565
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "s'ha produït un error en finalitzar «%s»"
 
-#: sequencer.c:473 sequencer.c:1934 sequencer.c:3116 sequencer.c:3551
-#: sequencer.c:3679 builtin/am.c:289 builtin/commit.c:834 builtin/merge.c:1148
+#: sequencer.c:473 sequencer.c:1930 sequencer.c:3112 sequencer.c:3547
+#: sequencer.c:3675 builtin/am.c:290 builtin/commit.c:837 builtin/merge.c:1154
 #, c-format
 msgid "could not read '%s'"
 msgstr "no s'ha pogut llegir «%s»"
@@ -7849,7 +8062,7 @@ msgstr "cometeu els vostres canvis o feu un «stash» per a procedir."
 msgid "%s: fast-forward"
 msgstr "%s: avanç ràpid"
 
-#: sequencer.c:574 builtin/tag.c:614
+#: sequencer.c:574 builtin/tag.c:615
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Mode de neteja no vàlid %s"
@@ -7879,8 +8092,8 @@ msgstr "no hi ha una clau a «%.*s»"
 msgid "unable to dequote value of '%s'"
 msgstr "no s'han pogut treure les cometes del valor de «%s»"
 
-#: sequencer.c:841 wrapper.c:209 wrapper.c:379 builtin/am.c:756
-#: builtin/am.c:848 builtin/rebase.c:694
+#: sequencer.c:841 wrapper.c:219 wrapper.c:389 builtin/am.c:757
+#: builtin/am.c:849 builtin/rebase.c:699
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "no s'ha pogut obrir «%s» per a lectura"
@@ -8000,349 +8213,344 @@ msgstr ""
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1288
+#: sequencer.c:1287
 msgid "couldn't look up newly created commit"
 msgstr "no s'ha pogut trobar la comissió novament creada"
 
-#: sequencer.c:1290
+#: sequencer.c:1289
 msgid "could not parse newly created commit"
 msgstr "no s'ha pogut analitzar la comissió novament creada"
 
-#: sequencer.c:1339
+#: sequencer.c:1336
 msgid "unable to resolve HEAD after creating commit"
 msgstr "no s'ha pogut resoldre HEAD després de crear la comissió"
 
-#: sequencer.c:1342
+#: sequencer.c:1338
 msgid "detached HEAD"
 msgstr "HEAD separat"
 
-#: sequencer.c:1346
+#: sequencer.c:1342
 msgid " (root-commit)"
 msgstr " (comissió arrel)"
 
-#: sequencer.c:1367
+#: sequencer.c:1363
 msgid "could not parse HEAD"
 msgstr "no s'ha pogut analitzar HEAD"
 
-#: sequencer.c:1369
+#: sequencer.c:1365
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s no és una comissió!"
 
-#: sequencer.c:1373 sequencer.c:1451 builtin/commit.c:1708
+#: sequencer.c:1369 sequencer.c:1447 builtin/commit.c:1707
 msgid "could not parse HEAD commit"
 msgstr "no s'ha pogut analitzar la comissió HEAD"
 
-#: sequencer.c:1429 sequencer.c:2314
+#: sequencer.c:1425 sequencer.c:2310
 msgid "unable to parse commit author"
 msgstr "no s'ha pogut analitzar l'autor de la comissió"
 
-#: sequencer.c:1440 builtin/am.c:1643 builtin/merge.c:710
+#: sequencer.c:1436 builtin/am.c:1644 builtin/merge.c:710
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree ha fallat en escriure un arbre"
 
-#: sequencer.c:1473 sequencer.c:1593
+#: sequencer.c:1469 sequencer.c:1589
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "no s'ha pogut llegir el missatge de comissió des de «%s»"
 
-#: sequencer.c:1504 sequencer.c:1536
+#: sequencer.c:1500 sequencer.c:1532
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr "identitat d'autor no vàlida: «%s»"
 
-#: sequencer.c:1510
+#: sequencer.c:1506
 msgid "corrupt author: missing date information"
 msgstr "autor malmès: falta la informació de la data"
 
-#: sequencer.c:1549 builtin/am.c:1670 builtin/commit.c:1822
-#: builtin/merge.c:915 builtin/merge.c:940 t/helper/test-fast-rebase.c:78
+#: sequencer.c:1545 builtin/am.c:1671 builtin/commit.c:1821
+#: builtin/merge.c:921 builtin/merge.c:946 t/helper/test-fast-rebase.c:78
 msgid "failed to write commit object"
 msgstr "s'ha produït un error en escriure l'objecte de comissió"
 
-#: sequencer.c:1576 sequencer.c:4523 t/helper/test-fast-rebase.c:199
+#: sequencer.c:1572 sequencer.c:4496 t/helper/test-fast-rebase.c:199
 #: t/helper/test-fast-rebase.c:217
 #, c-format
 msgid "could not update %s"
 msgstr "no s'ha pogut actualitzar %s"
 
-#: sequencer.c:1625
+#: sequencer.c:1621
 #, c-format
 msgid "could not parse commit %s"
 msgstr "no s'ha pogut analitzar la comissió %s"
 
-#: sequencer.c:1630
+#: sequencer.c:1626
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "no s'ha pogut analitzar la comissió pare %s"
 
-#: sequencer.c:1713 sequencer.c:1994
+#: sequencer.c:1709 sequencer.c:1990
 #, c-format
 msgid "unknown command: %d"
 msgstr "ordre desconeguda: %d"
 
-#: sequencer.c:1755
+#: sequencer.c:1751
 msgid "This is the 1st commit message:"
 msgstr "Aquest és el 1r missatge de comissió:"
 
-#: sequencer.c:1756
+#: sequencer.c:1752
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Aquest és el missatge de comissió #%d:"
 
-#: sequencer.c:1757
+#: sequencer.c:1753
 msgid "The 1st commit message will be skipped:"
 msgstr "El primer missatge de comissió s'ometrà:"
 
-#: sequencer.c:1758
+#: sequencer.c:1754
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "El missatge de comissió núm. #%d s'ometrà:"
 
-#: sequencer.c:1759
+#: sequencer.c:1755
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "Això és una combinació de %d comissions."
 
-#: sequencer.c:1906 sequencer.c:1963
+#: sequencer.c:1902 sequencer.c:1959
 #, c-format
 msgid "cannot write '%s'"
 msgstr "no es pot escriure «%s»"
 
-#: sequencer.c:1953
+#: sequencer.c:1949
 msgid "need a HEAD to fixup"
 msgstr "cal un HEAD per a reparar-ho"
 
-#: sequencer.c:1955 sequencer.c:3596
+#: sequencer.c:1951 sequencer.c:3592
 msgid "could not read HEAD"
 msgstr "no s'ha pogut llegir HEAD"
 
-#: sequencer.c:1957
+#: sequencer.c:1953
 msgid "could not read HEAD's commit message"
 msgstr "no s'ha pogut llegir el missatge de comissió de HEAD"
 
-#: sequencer.c:1981
+#: sequencer.c:1977
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "no s'ha pogut llegir el missatge de comissió: %s"
 
-#: sequencer.c:2091
+#: sequencer.c:2087
 msgid "your index file is unmerged."
 msgstr "el vostre fitxer d'índex està sense fusionar."
 
-#: sequencer.c:2098
+#: sequencer.c:2094
 msgid "cannot fixup root commit"
 msgstr "no es pot arreglar la comissió arrel"
 
-#: sequencer.c:2117
+#: sequencer.c:2113
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "la comissió %s és una fusió però no s'ha donat cap opció -m."
 
-#: sequencer.c:2125 sequencer.c:2133
+#: sequencer.c:2121 sequencer.c:2129
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "la comissió %s no té pare %d"
 
-#: sequencer.c:2139
+#: sequencer.c:2135
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "no es pot obtenir el missatge de comissió de %s"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:2158
+#: sequencer.c:2154
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: no es pot analitzar la comissió pare %s"
 
-#: sequencer.c:2224
+#: sequencer.c:2220
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "no s'ha pogut canviar el nom «%s» a «%s»"
 
-#: sequencer.c:2284
+#: sequencer.c:2280
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "no s'ha pogut revertir %s... %s"
 
-#: sequencer.c:2285
+#: sequencer.c:2281
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "no s'ha pogut aplicar %s... %s"
 
-#: sequencer.c:2306
+#: sequencer.c:2302
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr "descartant %s %s -- el contingut del pedaç ja està a la font\n"
 
-#: sequencer.c:2364
+#: sequencer.c:2360
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: s'ha produït un error en llegir l'índex"
 
-#: sequencer.c:2372
+#: sequencer.c:2368
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: s'ha produït un error en actualitzar l'índex"
 
-#: sequencer.c:2452
+#: sequencer.c:2448
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s no accepta arguments: «%s»"
 
-#: sequencer.c:2461
+#: sequencer.c:2457
 #, c-format
 msgid "missing arguments for %s"
 msgstr "falten els arguments per a %s"
 
-#: sequencer.c:2504
+#: sequencer.c:2500
 #, c-format
 msgid "could not parse '%s'"
 msgstr "no s'ha pogut analitzar «%s»"
 
-#: sequencer.c:2565
+#: sequencer.c:2561
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "línia no vàlida %d: %.*s"
 
-#: sequencer.c:2576
+#: sequencer.c:2572
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "no es pot «%s» sense una comissió prèvia"
 
-#: sequencer.c:2624 builtin/rebase.c:184
+#: sequencer.c:2620 builtin/rebase.c:185
 #, c-format
 msgid "could not read '%s'."
 msgstr "no s'ha pogut llegir «%s»."
 
-#: sequencer.c:2662
+#: sequencer.c:2658
 msgid "cancelling a cherry picking in progress"
 msgstr "s'està cancel·lant un «cherry pick» en curs"
 
-#: sequencer.c:2671
+#: sequencer.c:2667
 msgid "cancelling a revert in progress"
 msgstr "s'està cancel·lant la reversió en curs"
 
-#: sequencer.c:2711
+#: sequencer.c:2707
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "corregiu-ho usant «git rebase --edit-todo»."
 
-#: sequencer.c:2713
+#: sequencer.c:2709
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "full d'instruccions inusable: «%s»"
 
-#: sequencer.c:2718
+#: sequencer.c:2714
 msgid "no commits parsed."
 msgstr "no s'ha analitzat cap comissió."
 
-#: sequencer.c:2729
+#: sequencer.c:2725
 msgid "cannot cherry-pick during a revert."
 msgstr "no es pot fer «cherry pick» durant una reversió."
 
-#: sequencer.c:2731
+#: sequencer.c:2727
 msgid "cannot revert during a cherry-pick."
 msgstr "no es pot revertir durant un «cherry pick»."
 
-#: sequencer.c:2809
-#, c-format
-msgid "invalid value for %s: %s"
-msgstr "valor no vàlid per a %s: %s"
-
-#: sequencer.c:2918
+#: sequencer.c:2914
 msgid "unusable squash-onto"
 msgstr "«squash-onto» no usable"
 
-#: sequencer.c:2938
+#: sequencer.c:2934
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "full d'opcions mal format: «%s»"
 
-#: sequencer.c:3033 sequencer.c:4902
+#: sequencer.c:3029 sequencer.c:4875
 msgid "empty commit set passed"
 msgstr "conjunt de comissions buit passat"
 
-#: sequencer.c:3050
+#: sequencer.c:3046
 msgid "revert is already in progress"
 msgstr "una reversió ja està en curs"
 
-#: sequencer.c:3052
+#: sequencer.c:3048
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "intenteu «git revert (--continue | %s--abort | --quit)»"
 
-#: sequencer.c:3055
+#: sequencer.c:3051
 msgid "cherry-pick is already in progress"
 msgstr "un «cherry pick» ja està en curs"
 
-#: sequencer.c:3057
+#: sequencer.c:3053
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "intenteu «git cherry-pick (--continue | %s--abort | --quit)»"
 
-#: sequencer.c:3071
+#: sequencer.c:3067
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "no s'ha pogut crear el directori de seqüenciador «%s»"
 
-#: sequencer.c:3086
+#: sequencer.c:3082
 msgid "could not lock HEAD"
 msgstr "no s'ha pogut bloquejar HEAD"
 
-#: sequencer.c:3146 sequencer.c:4612
+#: sequencer.c:3142 sequencer.c:4585
 msgid "no cherry-pick or revert in progress"
 msgstr "ni hi ha cap «cherry pick» ni cap reversió en curs"
 
-#: sequencer.c:3148 sequencer.c:3159
+#: sequencer.c:3144 sequencer.c:3155
 msgid "cannot resolve HEAD"
 msgstr "no es pot resoldre HEAD"
 
-#: sequencer.c:3150 sequencer.c:3194
+#: sequencer.c:3146 sequencer.c:3190
 msgid "cannot abort from a branch yet to be born"
 msgstr "no es pot avortar des d'una branca que encara ha de nàixer"
 
-#: sequencer.c:3180 builtin/fetch.c:1004 builtin/fetch.c:1416
-#: builtin/grep.c:772
+#: sequencer.c:3176 builtin/fetch.c:1030 builtin/fetch.c:1457
+#: builtin/grep.c:774
 #, c-format
 msgid "cannot open '%s'"
 msgstr "no es pot obrir «%s»"
 
-#: sequencer.c:3182
+#: sequencer.c:3178
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "no es pot llegir «%s»: %s"
 
-#: sequencer.c:3183
+#: sequencer.c:3179
 msgid "unexpected end of file"
 msgstr "final de fitxer inesperat"
 
-#: sequencer.c:3189
+#: sequencer.c:3185
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "el fitxer HEAD emmagatzemat abans de fer «cherry pick» «%s» és malmès"
 
-#: sequencer.c:3200
+#: sequencer.c:3196
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr "Sembla que heu mogut HEAD sense rebobinar, comproveu-ho HEAD"
 
-#: sequencer.c:3241
+#: sequencer.c:3237
 msgid "no revert in progress"
 msgstr "no hi ha cap reversió en curs"
 
-#: sequencer.c:3250
+#: sequencer.c:3246
 msgid "no cherry-pick in progress"
 msgstr "ni hi ha cap «cherry pick» en curs"
 
-#: sequencer.c:3260
+#: sequencer.c:3256
 msgid "failed to skip the commit"
 msgstr "s'ha produït un error en ometre la comissió"
 
-#: sequencer.c:3267
+#: sequencer.c:3263
 msgid "there is nothing to skip"
 msgstr "no hi ha res a ometre"
 
-#: sequencer.c:3270
+#: sequencer.c:3266
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -8351,16 +8559,16 @@ msgstr ""
 "heu fet ja una comissió?\n"
 "proveu «git %s --continue»"
 
-#: sequencer.c:3432 sequencer.c:4503
+#: sequencer.c:3428 sequencer.c:4476
 msgid "cannot read HEAD"
 msgstr "no es pot llegir HEAD"
 
-#: sequencer.c:3449
+#: sequencer.c:3445
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "no s'ha pogut copiar «%s» a «%s»"
 
-#: sequencer.c:3457
+#: sequencer.c:3453
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -8379,27 +8587,27 @@ msgstr ""
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:3467
+#: sequencer.c:3463
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "No s'ha pogut aplicar %s... %.*s"
 
-#: sequencer.c:3474
+#: sequencer.c:3470
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "No s'ha pogut fusionar %.*s"
 
-#: sequencer.c:3488 sequencer.c:3492 builtin/difftool.c:633
+#: sequencer.c:3484 sequencer.c:3488 builtin/difftool.c:633
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "no s'ha pogut copiar «%s» a «%s»"
 
-#: sequencer.c:3503
+#: sequencer.c:3499
 #, c-format
 msgid "Executing: %s\n"
 msgstr "S'està executant: %s\n"
 
-#: sequencer.c:3514
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -8414,11 +8622,11 @@ msgstr ""
 " git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3520
+#: sequencer.c:3516
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "i ha fet canvis a l'índex i/o l'arbre de treball\n"
 
-#: sequencer.c:3526
+#: sequencer.c:3522
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -8434,91 +8642,91 @@ msgstr ""
 "\n"
 " git rebase --continue\n"
 
-#: sequencer.c:3586
+#: sequencer.c:3582
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "nom d'etiqueta no permès: «%.*s»"
 
-#: sequencer.c:3659
+#: sequencer.c:3655
 msgid "writing fake root commit"
 msgstr "s'està escrivint una comissió arrel falsa"
 
-#: sequencer.c:3664
+#: sequencer.c:3660
 msgid "writing squash-onto"
 msgstr "s'està escrivint «squash-onto»"
 
-#: sequencer.c:3743
+#: sequencer.c:3739
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "no s'ha pogut resoldre «%s»"
 
-#: sequencer.c:3775
+#: sequencer.c:3771
 msgid "cannot merge without a current revision"
 msgstr "no es pot fusionar sense una revisió actual"
 
-#: sequencer.c:3797
+#: sequencer.c:3793
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "no s'ha pogut analitzar «%.*s»"
 
-#: sequencer.c:3806
+#: sequencer.c:3802
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "no hi ha res per a fusionar «%.*s»"
 
-#: sequencer.c:3818
+#: sequencer.c:3814
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr ""
 "no es pot executar la fusió «octopus» a la part superior d'una [arrel nova]"
 
-#: sequencer.c:3873
+#: sequencer.c:3869
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "no s'ha pogut llegir el missatge de comissió de «%s»"
 
-#: sequencer.c:4019
+#: sequencer.c:4013
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "no s'ha pogut fusionar «%.*s»"
 
-#: sequencer.c:4035
+#: sequencer.c:4029
 msgid "merge: Unable to write new index file"
 msgstr "fusió: no s'ha pogut escriure un fitxer d'índex nou"
 
-#: sequencer.c:4116
+#: sequencer.c:4110
 msgid "Cannot autostash"
 msgstr "No es pot fer un «stash» automàticament"
 
-#: sequencer.c:4119
+#: sequencer.c:4113
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Resposta de «stash» inesperada: «%s»"
 
-#: sequencer.c:4125
+#: sequencer.c:4119
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "No s'ha pogut crear el directori per a «%s»"
 
-#: sequencer.c:4128
+#: sequencer.c:4122
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "S'ha creat un «stash» automàticament: %s\n"
 
-#: sequencer.c:4132
+#: sequencer.c:4124
 msgid "could not reset --hard"
 msgstr "no s'ha pogut fer reset --hard"
 
-#: sequencer.c:4157
+#: sequencer.c:4148
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "S'ha aplicat el «stash» automàticament.\n"
 
-#: sequencer.c:4169
+#: sequencer.c:4160
 #, c-format
 msgid "cannot store %s"
 msgstr "no es pot emmagatzemar %s"
 
-#: sequencer.c:4172
+#: sequencer.c:4163
 #, c-format
 msgid ""
 "%s\n"
@@ -8529,30 +8737,30 @@ msgstr ""
 "Els vostres canvis estan segurs en el «stash».\n"
 "Podeu executar «git stash pop» o «git stash drop» en qualsevol moment.\n"
 
-#: sequencer.c:4177
+#: sequencer.c:4168
 msgid "Applying autostash resulted in conflicts."
 msgstr "L'aplicació del «stash» automàticament ha donat conflictes."
 
-#: sequencer.c:4178
+#: sequencer.c:4169
 msgid "Autostash exists; creating a new stash entry."
 msgstr ""
 "El «stash» automàtic ja existeix; s'està creant una entrada «stash» nova."
 
-#: sequencer.c:4252
+#: sequencer.c:4225
 msgid "could not detach HEAD"
 msgstr "no s'ha pogut separar HEAD"
 
-#: sequencer.c:4267
+#: sequencer.c:4240
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "Aturat a HEAD\n"
 
-#: sequencer.c:4269
+#: sequencer.c:4242
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Aturat a %s\n"
 
-#: sequencer.c:4301
+#: sequencer.c:4274
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -8573,58 +8781,58 @@ msgstr ""
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:4347
+#: sequencer.c:4320
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "S'està fent «rebase» (%d/%d)%s"
 
-#: sequencer.c:4393
+#: sequencer.c:4366
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Aturat a %s...  %.*s\n"
 
-#: sequencer.c:4463
+#: sequencer.c:4436
 #, c-format
 msgid "unknown command %d"
 msgstr "ordre %d desconeguda"
 
-#: sequencer.c:4511
+#: sequencer.c:4484
 msgid "could not read orig-head"
 msgstr "no s'ha pogut llegir orig-head"
 
-#: sequencer.c:4516
+#: sequencer.c:4489
 msgid "could not read 'onto'"
 msgstr "no s'ha pogut llegir «onto»"
 
-#: sequencer.c:4530
+#: sequencer.c:4503
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "no s'ha pogut actualitzar HEAD a %s"
 
-#: sequencer.c:4590
+#: sequencer.c:4563
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "S'ha fet «rebase» i actualitzat %s amb èxit.\n"
 
-#: sequencer.c:4642
+#: sequencer.c:4615
 msgid "cannot rebase: You have unstaged changes."
 msgstr "no es pot fer «rebase»: teniu canvis «unstaged»."
 
-#: sequencer.c:4651
+#: sequencer.c:4624
 msgid "cannot amend non-existing commit"
 msgstr "no es pot esmenar una comissió no existent"
 
-#: sequencer.c:4653
+#: sequencer.c:4626
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "fitxer no vàlid: «%s»"
 
-#: sequencer.c:4655
+#: sequencer.c:4628
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "contingut no vàlid: «%s»"
 
-#: sequencer.c:4658
+#: sequencer.c:4631
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -8634,59 +8842,59 @@ msgstr ""
 "Teniu canvis no comesos en el vostre arbre de treball. \n"
 "Cometeu-los primer i després executeu «git rebase --continue» de nou."
 
-#: sequencer.c:4694 sequencer.c:4733
+#: sequencer.c:4667 sequencer.c:4706
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "no s'ha pogut escriure el fitxer: «%s»"
 
-#: sequencer.c:4749
+#: sequencer.c:4722
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "no s'ha pogut eliminar CHERRY_PICK_HEAD"
 
-#: sequencer.c:4759
+#: sequencer.c:4732
 msgid "could not commit staged changes."
 msgstr "no s'han pogut cometre els canvis «staged»."
 
-#: sequencer.c:4879
+#: sequencer.c:4852
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: no es pot fer «cherry pick» a %s"
 
-#: sequencer.c:4883
+#: sequencer.c:4856
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: revisió incorrecta"
 
-#: sequencer.c:4918
+#: sequencer.c:4891
 msgid "can't revert as initial commit"
 msgstr "no es pot revertir com a comissió inicial"
 
-#: sequencer.c:5189 sequencer.c:5418
+#: sequencer.c:5162 sequencer.c:5391
 #, c-format
 msgid "skipped previously applied commit %s"
 msgstr "omet les comissions aplicades anteriorment %s"
 
-#: sequencer.c:5259 sequencer.c:5434
+#: sequencer.c:5232 sequencer.c:5407
 msgid "use --reapply-cherry-picks to include skipped commits"
 msgstr "useu --reapply-cherry-picks per a incloure les comissions omeses"
 
-#: sequencer.c:5405
+#: sequencer.c:5378
 msgid "make_script: unhandled options"
 msgstr "make_script: opcions no gestionades"
 
-#: sequencer.c:5408
+#: sequencer.c:5381
 msgid "make_script: error preparing revisions"
 msgstr "make_script: s'ha produït un error en preparar les revisions"
 
-#: sequencer.c:5666 sequencer.c:5683
+#: sequencer.c:5639 sequencer.c:5656
 msgid "nothing to do"
 msgstr "res a fer"
 
-#: sequencer.c:5702
+#: sequencer.c:5675
 msgid "could not skip unnecessary pick commands"
 msgstr "no s'han pogut ometre les ordres «picks» no necessàries"
 
-#: sequencer.c:5802
+#: sequencer.c:5775
 msgid "the script was already rearranged."
 msgstr "l'script ja estava endreçat."
 
@@ -8741,93 +8949,93 @@ msgstr ""
 msgid "this operation must be run in a work tree"
 msgstr "aquesta operació s'ha d'executar en un arbre de treball"
 
-#: setup.c:722
+#: setup.c:723
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr "S'esperava una versió de repositori de git <= %d, s'ha trobat %d"
 
-#: setup.c:730
+#: setup.c:731
 msgid "unknown repository extension found:"
 msgid_plural "unknown repository extensions found:"
 msgstr[0] "s'ha trobat una extensió de repositori desconeguda:"
 msgstr[1] "s'han trobat extensions de repositori desconegudes:"
 
-#: setup.c:744
+#: setup.c:745
 msgid "repo version is 0, but v1-only extension found:"
 msgid_plural "repo version is 0, but v1-only extensions found:"
 msgstr[0] ""
 "el repositori és versió 0, però només s'han trobat una extensió v1:"
 msgstr[1] "el repositori és versió 0, però només s'han trobat extensions v1:"
 
-#: setup.c:765
+#: setup.c:766
 #, c-format
 msgid "error opening '%s'"
 msgstr "s'ha produït un error en obrir «%s»"
 
-#: setup.c:767
+#: setup.c:768
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr "massa gran per a ser un fitxer .git: «%s»"
 
-#: setup.c:769
+#: setup.c:770
 #, c-format
 msgid "error reading %s"
 msgstr "error en llegir %s"
 
-#: setup.c:771
+#: setup.c:772
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr "format gitfile no vàlid: %s"
 
-#: setup.c:773
+#: setup.c:774
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr "sense camí al gitfile: %s"
 
-#: setup.c:775
+#: setup.c:776
 #, c-format
 msgid "not a git repository: %s"
 msgstr "no és un repositori de git: %s"
 
-#: setup.c:877
+#: setup.c:878
 #, c-format
 msgid "'$%s' too big"
 msgstr "«$%s» massa gran"
 
-#: setup.c:891
+#: setup.c:892
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr "no és un repositori de git: «%s»"
 
-#: setup.c:920 setup.c:922 setup.c:953
+#: setup.c:921 setup.c:923 setup.c:954
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr "no es pot canviar de directori a «%s»"
 
-#: setup.c:925 setup.c:981 setup.c:991 setup.c:1030 setup.c:1038
+#: setup.c:926 setup.c:982 setup.c:992 setup.c:1031 setup.c:1039
 msgid "cannot come back to cwd"
 msgstr "no es pot tornar al directori de treball actual"
 
-#: setup.c:1052
+#: setup.c:1053
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr "s'ha produït un error en fer stat a «%*s%s%s»"
 
-#: setup.c:1295
+#: setup.c:1296
 msgid "Unable to read current working directory"
 msgstr "No s'ha pogut llegir el directori de treball actual"
 
-#: setup.c:1304 setup.c:1310
+#: setup.c:1305 setup.c:1311
 #, c-format
 msgid "cannot change to '%s'"
 msgstr "no es pot canviar a «%s»"
 
-#: setup.c:1315
+#: setup.c:1316
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
 msgstr "no és un repositori de git (ni cap dels directoris pares): %s"
 
-#: setup.c:1321
+#: setup.c:1322
 #, c-format
 msgid ""
 "not a git repository (or any parent up to mount point %s)\n"
@@ -8836,7 +9044,7 @@ msgstr ""
 "no és un repositori de git (ni cap pare fins al punt de muntatge %s)\n"
 "S'atura a la frontera de sistema de fitxers (GIT_DISCOVERY_ACROSS_FILESYSTEM no està establert)."
 
-#: setup.c:1446
+#: setup.c:1447
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -8845,57 +9053,62 @@ msgstr ""
 "hi ha un problema amb el valor de mode de fitxer core.sharedRepository (0%.3o).\n"
 "El propietari dels fitxers sempre ha de tenir permisos de lectura i escriptura."
 
-#: setup.c:1508
+#: setup.c:1509
 msgid "fork failed"
 msgstr "el «fork» ha fallat"
 
-#: setup.c:1513
+#: setup.c:1514
 msgid "setsid failed"
 msgstr "«setsid» ha fallat"
 
-#: sparse-index.c:289
+#: sparse-index.c:285
 #, c-format
 msgid "index entry is a directory, but not sparse (%08x)"
 msgstr "l'entrada d'índex és un directori, però no dispers (%08x)"
 
+#: split-index.c:9
+#, fuzzy
+msgid "cannot use split index with a sparse index"
+msgstr "no es pot utilitzar l'índex de divisió amb un índex dispers"
+
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:850
+#: strbuf.c:851
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:852
+#: strbuf.c:853
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u GiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:860
+#: strbuf.c:861
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:862
+#: strbuf.c:863
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u MiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:869
+#: strbuf.c:870
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:871
+#: strbuf.c:872
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u KiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:877
+#: strbuf.c:878
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -8903,86 +9116,86 @@ msgstr[0] "%u byte"
 msgstr[1] "%u bytes"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:879
+#: strbuf.c:880
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
 msgstr[0] "%u byte/s"
 msgstr[1] "%u bytes/s"
 
-#: strbuf.c:1186 wrapper.c:207 wrapper.c:377 builtin/am.c:765
-#: builtin/rebase.c:650
+#: strbuf.c:1187 wrapper.c:217 wrapper.c:387 builtin/am.c:766
+#: builtin/rebase.c:653
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "no s'ha pogut obrir «%s» per a escriptura"
 
-#: strbuf.c:1195
+#: strbuf.c:1196
 #, c-format
 msgid "could not edit '%s'"
 msgstr "no s'ha pogut editar «%s»"
 
-#: submodule-config.c:237
+#: submodule-config.c:238
 #, c-format
 msgid "ignoring suspicious submodule name: %s"
 msgstr "s'està ignorant el nom de submòdul sospitós %s"
 
-#: submodule-config.c:304
+#: submodule-config.c:305
 msgid "negative values not allowed for submodule.fetchjobs"
 msgstr "no es permeten els valors negatius a submodule.fetchjobs"
 
-#: submodule-config.c:402
+#: submodule-config.c:403
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr ""
 "s'està ignorant «%s» que pot interpretar-se com a una opció de línia "
 "d'ordres: %s"
 
-#: submodule-config.c:499
+#: submodule-config.c:500 builtin/push.c:489 builtin/send-pack.c:148
 #, c-format
-msgid "invalid value for %s"
-msgstr "valor no vàlid per a %s"
+msgid "invalid value for '%s'"
+msgstr "valor no vàlid per a «%s»"
 
-#: submodule-config.c:767
+#: submodule-config.c:828
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr "No s'ha pogut actualitzar l'entrada de .gitmodules %s"
 
-#: submodule.c:114 submodule.c:143
+#: submodule.c:115 submodule.c:144
 msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
 msgstr ""
 "No es pot canviar un .gitmodules no fusionat, primer resoleu els conflictes "
 "de fusió"
 
-#: submodule.c:118 submodule.c:147
+#: submodule.c:119 submodule.c:148
 #, c-format
 msgid "Could not find section in .gitmodules where path=%s"
 msgstr "No s'ha pogut trobar la secció en .gitmodules on path=%s"
 
-#: submodule.c:154
+#: submodule.c:155
 #, c-format
 msgid "Could not remove .gitmodules entry for %s"
 msgstr "No s'ha pogut eliminar l'entrada de .gitmodules per a %s"
 
-#: submodule.c:165
+#: submodule.c:166
 msgid "staging updated .gitmodules failed"
 msgstr "l'allistament del .gitmodules actualitzat ha fallat"
 
-#: submodule.c:358
+#: submodule.c:346
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "al submòdul sense popular «%s»"
 
-#: submodule.c:389
+#: submodule.c:377
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "L'especificació «%s» és en el submòdul «%.*s»"
 
-#: submodule.c:466
+#: submodule.c:454
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "argument incorrecte --ignore-submodules: %s"
 
-#: submodule.c:844
+#: submodule.c:866
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -8991,12 +9204,12 @@ msgstr ""
 "El submòdul en la comissió %s al camí: «%s» col·lideix amb un submòdul amb "
 "el mateix nom. Ometent-lo."
 
-#: submodule.c:954
+#: submodule.c:987
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr "l'entrada del submòdul «%s» (%s) és a %s, no és una comissió"
 
-#: submodule.c:1042
+#: submodule.c:1069
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
@@ -9005,36 +9218,48 @@ msgstr ""
 "No s'ha pogut executar l'ordre «git rev-list <commits> --not --remotes -n 1»"
 " en el submòdul %s"
 
-#: submodule.c:1165
+#: submodule.c:1192
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "ha fallat el procés per al submòdul «%s»"
 
-#: submodule.c:1194 builtin/branch.c:699 builtin/submodule--helper.c:2714
+#: submodule.c:1221 builtin/branch.c:714 builtin/submodule--helper.c:2827
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "S'ha produït un error en resoldre HEAD com a referència vàlida."
 
-#: submodule.c:1205
+#: submodule.c:1232
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "S'està pujant el submòdul «%s»\n"
 
-#: submodule.c:1208
+#: submodule.c:1235
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "No s'ha pogut pujar el submòdul «%s»\n"
 
-#: submodule.c:1491
+#: submodule.c:1567
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "S'està obtenint el submòdul %s%s\n"
 
-#: submodule.c:1525
+#: submodule.c:1589
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "No s'ha pogut accedir al submòdul «%s»\n"
 
-#: submodule.c:1680
+#: submodule.c:1618
+#, c-format, fuzzy
+msgid "Could not access submodule '%s' at commit %s\n"
+msgstr "No s'ha pogut accedir al submòdul «%s» en els percentatges"
+
+#: submodule.c:1629
+#, c-format, fuzzy
+msgid "Fetching submodule %s%s at commit %s\n"
+msgstr ""
+"S'estan recollint els submòduls un percentatge de percentatges a les "
+"comissions"
+
+#: submodule.c:1849
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -9043,63 +9268,63 @@ msgstr ""
 "Errors durant l'obtenció de submòduls:\n"
 "%s"
 
-#: submodule.c:1705
+#: submodule.c:1874
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "«%s» no reconegut com un repositori git"
 
-#: submodule.c:1722
+#: submodule.c:1891
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr "No s'ha pogut executar «git status --porcelain=2» en el submòdul %s"
 
-#: submodule.c:1763
+#: submodule.c:1932
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr "«git status --porcelain=2» ha fallat en el submòdul %s"
 
-#: submodule.c:1838
+#: submodule.c:2007
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "no s'ha pogut iniciar «git status» al submòdul «%s»"
 
-#: submodule.c:1851
+#: submodule.c:2020
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "no s'ha pogut executar «git status» al submòdul «%s»"
 
-#: submodule.c:1868
+#: submodule.c:2037
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr ""
 "No s'ha pogut desassignar el paràmetre «core.worktree» al submòdul «%s»"
 
-#: submodule.c:1895 submodule.c:2210
+#: submodule.c:2064 submodule.c:2379
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr ""
 "s'ha produït un error en cercar recursivament al camí del submòdul «%s»"
 
-#: submodule.c:1917
+#: submodule.c:2086
 msgid "could not reset submodule index"
 msgstr "no s'ha pogut restablir l'índex del submòdul"
 
-#: submodule.c:1959
+#: submodule.c:2128
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "el submòdul «%s» té l'índex brut"
 
-#: submodule.c:2013
+#: submodule.c:2182
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "No s'ha pogut actualitzar el submòdul «%s»."
 
-#: submodule.c:2081
+#: submodule.c:2250
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr "submodule git dir «%s» està dins git dir «%.*s»"
 
-#: submodule.c:2102
+#: submodule.c:2271
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -9107,17 +9332,17 @@ msgstr ""
 "no està admès relocate_gitdir per al submòdul «%s» amb més d'un arbre de "
 "treball"
 
-#: submodule.c:2114 submodule.c:2174
+#: submodule.c:2283 submodule.c:2343
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "no s'ha trobat el nom pel submòdul «%s»"
 
-#: submodule.c:2118
+#: submodule.c:2287
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr "s'ha refusat moure «%s» a un directori git existent"
 
-#: submodule.c:2124
+#: submodule.c:2293
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -9128,11 +9353,11 @@ msgstr ""
 "«%s» a\n"
 "«%s»\n"
 
-#: submodule.c:2255
+#: submodule.c:2424
 msgid "could not start ls-files in .."
 msgstr "no s'ha pogut iniciar ls-files a .."
 
-#: submodule.c:2295
+#: submodule.c:2464
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree ha retornat un codi de retorn %d no esperat"
@@ -9153,8 +9378,8 @@ msgstr "l'execució de l'ordre «trailer» «%s» ha fallat"
 msgid "unknown value '%s' for key '%s'"
 msgstr "valor desconegut «%s» per a la clau «%s»"
 
-#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
-#: builtin/remote.c:327
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:300
+#: builtin/remote.c:328
 #, c-format
 msgid "more than one %s"
 msgstr "més d'un %s"
@@ -9169,11 +9394,11 @@ msgstr "testimoni de «trailer» buit en el «trailer» «%.*s»"
 msgid "could not read input file '%s'"
 msgstr "no s'ha pogut llegir el fitxer d'entrada «%s»"
 
-#: trailer.c:766 builtin/mktag.c:89 imap-send.c:1573
+#: trailer.c:766 builtin/mktag.c:88 imap-send.c:1563
 msgid "could not read from stdin"
 msgstr "no s'ha pogut llegir des de stdin"
 
-#: trailer.c:1024 wrapper.c:684
+#: trailer.c:1024 wrapper.c:760
 #, c-format
 msgid "could not stat %s"
 msgstr "no s'ha pogut fer stat a %s"
@@ -9241,7 +9466,7 @@ msgstr "no s'ha pogut executar «fast-import»"
 msgid "error while running fast-import"
 msgstr "error en executar la importació ràpida"
 
-#: transport-helper.c:549 transport-helper.c:1251
+#: transport-helper.c:549 transport-helper.c:1254
 #, c-format
 msgid "could not read ref %s"
 msgstr "no s'ha pogut llegir la referència %s"
@@ -9259,7 +9484,7 @@ msgstr "el protocol no permet establir el camí del servei remot"
 msgid "invalid remote service path"
 msgstr "el camí del servei remot no és vàlid"
 
-#: transport-helper.c:661 transport.c:1479
+#: transport-helper.c:661 transport.c:1496
 msgid "operation not supported by protocol"
 msgstr "opció no admesa pel protocol"
 
@@ -9268,73 +9493,73 @@ msgstr "opció no admesa pel protocol"
 msgid "can't connect to subservice %s"
 msgstr "no es pot connectar al subservei %s"
 
-#: transport-helper.c:693 transport.c:404
+#: transport-helper.c:693 transport.c:415
 msgid "--negotiate-only requires protocol v2"
 msgstr "--negotiate-only requereix el protocol v2"
 
-#: transport-helper.c:755
+#: transport-helper.c:758
 msgid "'option' without a matching 'ok/error' directive"
 msgstr "«option» sense una directiva «ok/error» coincident"
 
-#: transport-helper.c:798
+#: transport-helper.c:801
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "s'esperava error/OK, l'ajudant ha dit «%s»"
 
-#: transport-helper.c:859
+#: transport-helper.c:862
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "l'ajudant ha informat d'un estat inesperat de %s"
 
-#: transport-helper.c:942
+#: transport-helper.c:945
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "l'ajudant %s no admet dry-run"
 
-#: transport-helper.c:945
+#: transport-helper.c:948
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "l'ajudant %s no admet --signed"
 
-#: transport-helper.c:948
+#: transport-helper.c:951
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "l'ajudant %s no admet --signed=if-asked"
 
-#: transport-helper.c:953
+#: transport-helper.c:956
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr "l'ajudant %s no admet --atomic"
 
-#: transport-helper.c:957
+#: transport-helper.c:960
 #, c-format
 msgid "helper %s does not support --%s"
 msgstr "l'ajudant %s no admet --%s"
 
-#: transport-helper.c:964
+#: transport-helper.c:967
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "l'ajudant %s no admet «push-option»"
 
-#: transport-helper.c:1064
+#: transport-helper.c:1067
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr ""
 "remot-helper no permet pujar; es necessiten especificacions de referència"
 
-#: transport-helper.c:1069
+#: transport-helper.c:1072
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "l'ajudant %s no admet «force»"
 
-#: transport-helper.c:1116
+#: transport-helper.c:1119
 msgid "couldn't run fast-export"
 msgstr "no s'ha pogut executar l'exportació ràpida"
 
-#: transport-helper.c:1121
+#: transport-helper.c:1124
 msgid "error while running fast-export"
 msgstr "error en executar l'exportació ràpida"
 
-#: transport-helper.c:1146
+#: transport-helper.c:1149
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -9343,52 +9568,52 @@ msgstr ""
 "No hi ha referències en comú i no n'hi ha cap d'especificada.\n"
 "No es farà res. Potser hauríeu d'especificar una branca.\n"
 
-#: transport-helper.c:1228
+#: transport-helper.c:1231
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr "format d'objecte no suportat «%s»"
 
-#: transport-helper.c:1237
+#: transport-helper.c:1240
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "resposta mal formada al llistat de referències: %s"
 
-#: transport-helper.c:1389
+#: transport-helper.c:1392
 #, c-format
 msgid "read(%s) failed"
 msgstr "ha fallat la lectura(%s)"
 
-#: transport-helper.c:1416
+#: transport-helper.c:1419
 #, c-format
 msgid "write(%s) failed"
 msgstr "ha fallat l'escriptura(%s)"
 
-#: transport-helper.c:1465
+#: transport-helper.c:1468
 #, c-format
 msgid "%s thread failed"
 msgstr "%s ha fallat el fil"
 
-#: transport-helper.c:1469
+#: transport-helper.c:1472
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "el fil %s no s'ha pogut unir: %s"
 
-#: transport-helper.c:1488 transport-helper.c:1492
+#: transport-helper.c:1491 transport-helper.c:1495
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "no es pot iniciar el fil per a copiar les dades: %s"
 
-#: transport-helper.c:1529
+#: transport-helper.c:1532
 #, c-format
 msgid "%s process failed to wait"
 msgstr "el procés %s no ha pogut esperar"
 
-#: transport-helper.c:1533
+#: transport-helper.c:1536
 #, c-format
 msgid "%s process failed"
 msgstr "el procés %s ha fallat"
 
-#: transport-helper.c:1551 transport-helper.c:1560
+#: transport-helper.c:1554 transport-helper.c:1563
 msgid "can't start thread for copying data"
 msgstr "no es pot iniciar el fil per a copiar dades"
 
@@ -9397,52 +9622,52 @@ msgstr "no es pot iniciar el fil per a copiar dades"
 msgid "Would set upstream of '%s' to '%s' of '%s'\n"
 msgstr "Canviaria la font de «%s» a «%s» de «%s»\n"
 
-#: transport.c:145
+#: transport.c:138
 #, c-format
 msgid "could not read bundle '%s'"
-msgstr "no s'ha pogut llegir el paquet «%s»"
+msgstr "no s'ha pogut llegir el farcell «%s»"
 
-#: transport.c:227
+#: transport.c:234
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr "transport: opció de profunditat no vàlida «%s»"
 
-#: transport.c:279
+#: transport.c:289
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "vegeu «protocol.version» a «git help config» per a més detalls"
 
-#: transport.c:280
+#: transport.c:290
 msgid "server options require protocol version 2 or later"
 msgstr "les opcions del servidor requereixen el protocol versió 2 o posterior"
 
-#: transport.c:407
+#: transport.c:418
 msgid "server does not support wait-for-done"
 msgstr "el servidor no admet «wait-for-done»"
 
-#: transport.c:759
+#: transport.c:770
 msgid "could not parse transport.color.* config"
 msgstr "no s'ha pogut analitzar la configuració de transport.color.*"
 
-#: transport.c:834
+#: transport.c:845
 msgid "support for protocol v2 not implemented yet"
 msgstr ""
 "encara no s'ha implementat la compatibilitat amb la versió v2 del protocol"
 
-#: transport.c:967
+#: transport.c:978
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "valor desconegut per al config «%s»': %s"
 
-#: transport.c:1033
+#: transport.c:1044
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "no es permet el transport «%s»"
 
-#: transport.c:1082
+#: transport.c:1093
 msgid "git-over-rsync is no longer supported"
 msgstr "git-over-rsync ja no s'admet"
 
-#: transport.c:1185
+#: transport.c:1196
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -9451,7 +9676,7 @@ msgstr ""
 "Els camins de submòdul següents contenen canvis que no\n"
 "es poden trobar en cap remot:\n"
 
-#: transport.c:1189
+#: transport.c:1200
 #, c-format
 msgid ""
 "\n"
@@ -9471,17 +9696,17 @@ msgstr ""
 "\n"
 "\tgit push --recurse-submodules=on-demand\n"
 "\n"
-"o canviar de directori al camí i useu\n"
+"o feu cd al camí i useu\n"
 "\n"
 "\tgit push\n"
 "\n"
 "per a pujar-los a un remot.\n"
 
-#: transport.c:1197
+#: transport.c:1208
 msgid "Aborting."
 msgstr "S'està avortant."
 
-#: transport.c:1343
+#: transport.c:1354
 msgid "failed to push all needed submodules"
 msgstr "no s'han pogut pujar tots els submòduls necessaris"
 
@@ -9569,7 +9794,8 @@ msgstr ""
 msgid ""
 "Refusing to remove the current working directory:\n"
 "%s"
-msgstr "S'ha rebutjat suprimir el directori de treball actual:\n"
+msgstr ""
+"S'ha rebutjat suprimir el directori de treball actual:\n"
 "%s"
 
 #: unpack-trees.c:142
@@ -9733,7 +9959,7 @@ msgid ""
 "reapply`.\n"
 msgstr ""
 "Després de corregir els camins anteriors és possible que vulgueu executar "
-"`git sparse-checkout reapply`.\n"
+"«git sparse-checkout reapply».\n"
 
 #: unpack-trees.c:358
 msgid "Updating files"
@@ -9750,17 +9976,17 @@ msgstr ""
 "minúscules). Només un camí del mateix grup de col·lisió es troba a l'arbre\n"
 "de treball:\n"
 
-#: unpack-trees.c:1636
+#: unpack-trees.c:1664
 msgid "Updating index flags"
 msgstr "Actualitzant els indicadors d'índex"
 
-#: unpack-trees.c:2803
+#: unpack-trees.c:2925
 #, c-format
 msgid "worktree and untracked commit have duplicate entries: %s"
 msgstr ""
 "l'arbre de treball i la comissió no seguida tenen entrades duplicades: %s"
 
-#: upload-pack.c:1565
+#: upload-pack.c:1579
 msgid "expected flush after fetch arguments"
 msgstr "s'esperava una neteja després dels arguments del «fetch»"
 
@@ -9797,126 +10023,140 @@ msgstr "segment de camí «..» no vàlid"
 msgid "Fetching objects"
 msgstr "S'estan obtenint objectes"
 
-#: worktree.c:238 builtin/am.c:2209 builtin/bisect--helper.c:156
+#: worktree.c:237 builtin/am.c:2210 builtin/bisect--helper.c:156
 #, c-format
 msgid "failed to read '%s'"
 msgstr "s'ha produït un error en llegir «%s»"
 
-#: worktree.c:305
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr "«%s» a l'arbre de treball principal no és al directori del repositori"
 
-#: worktree.c:316
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr ""
 "El fitxer «%s» no conté el camí absolut a la ubicació de l'arbre de treball"
 
-#: worktree.c:328
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr "«%s» no existeix"
 
-#: worktree.c:334
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr "«%s» no és un fitxer .git, codi d'error %d"
 
-#: worktree.c:343
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "«%s» no assenyala de tornada a «%s»"
 
-#: worktree.c:604
+#: worktree.c:600
 msgid "not a directory"
 msgstr "no és en un directori"
 
-#: worktree.c:613
+#: worktree.c:609
 msgid ".git is not a file"
 msgstr ".git no és un fitxer"
 
-#: worktree.c:615
+#: worktree.c:611
 msgid ".git file broken"
 msgstr "fitxer .git malmès"
 
-#: worktree.c:617
+#: worktree.c:613
 msgid ".git file incorrect"
 msgstr "fitxer .git malmès"
 
-#: worktree.c:723
+#: worktree.c:719
 msgid "not a valid path"
 msgstr "no és un camí vàlid"
 
-#: worktree.c:729
+#: worktree.c:725
 msgid "unable to locate repository; .git is not a file"
 msgstr "no s'ha pogut trobar el repositori; .git no és un fitxer"
 
-#: worktree.c:733
+#: worktree.c:729
 msgid "unable to locate repository; .git file does not reference a repository"
 msgstr ""
 "no s'ha pogut trobar el repositori; el fitxer .git no fa referència a un "
 "repositori"
 
-#: worktree.c:737
+#: worktree.c:733
 msgid "unable to locate repository; .git file broken"
 msgstr "no s'ha pogut trobar el repositori; el fitxer .git està malmès"
 
-#: worktree.c:743
+#: worktree.c:739
 msgid "gitdir unreadable"
 msgstr "gitdir illegible"
 
-#: worktree.c:747
+#: worktree.c:743
 msgid "gitdir incorrect"
 msgstr "gitdir incorrecte"
 
-#: worktree.c:772
+#: worktree.c:768
 msgid "not a valid directory"
 msgstr "no és en un directori vàlid"
 
-#: worktree.c:778
+#: worktree.c:774
 msgid "gitdir file does not exist"
 msgstr "el fitxer gitdir no existeix"
 
-#: worktree.c:783 worktree.c:792
+#: worktree.c:779 worktree.c:788
 #, c-format
 msgid "unable to read gitdir file (%s)"
 msgstr "no s'ha pogut llegir el fitxer gitdir (%s)"
 
-#: worktree.c:802
+#: worktree.c:798
 #, c-format
 msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
 msgstr "lectura curta (s'esperaven %<PRIuMAX> bytes, llegits %<PRIuMAX>)"
 
-#: worktree.c:810
+#: worktree.c:806
 msgid "invalid gitdir file"
 msgstr "fitxer gitdir no vàlid"
 
-#: worktree.c:818
+#: worktree.c:814
 msgid "gitdir file points to non-existent location"
 msgstr "el fitxer gitdir indica una ubicació no existent"
 
-#: wrapper.c:151
+#: worktree.c:830
+#, c-format, fuzzy
+msgid "unable to set %s in '%s'"
+msgstr "no s'han pogut establir els percentatges en «%s»"
+
+#: worktree.c:832
+#, c-format, fuzzy
+msgid "unable to unset %s in '%s'"
+msgstr "no s'han pogut establir els percentatges en '%s'"
+
+#: worktree.c:852
+msgid "failed to set extensions.worktreeConfig setting"
+msgstr "no s'ha pogut establir el paràmetre extensions.worktreeConfig"
+
+#: wrapper.c:161
 #, c-format
 msgid "could not setenv '%s'"
 msgstr "no s'ha pogut fer setenv «%s»"
 
-#: wrapper.c:203
+#: wrapper.c:213
 #, c-format
 msgid "unable to create '%s'"
 msgstr "no s'ha pogut crear «%s»"
 
-#: wrapper.c:205 wrapper.c:375
+#: wrapper.c:215 wrapper.c:385
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr "no s'ha pogut obrir «%s» per a lectura i escriptura"
 
-#: wrapper.c:406 wrapper.c:607
+#: wrapper.c:416 wrapper.c:683
 #, c-format
 msgid "unable to access '%s'"
 msgstr "no s'ha pogut accedir a «%s»"
 
-#: wrapper.c:615
+#: wrapper.c:691
 msgid "unable to get current working directory"
 msgstr "no s'ha pogut obtenir el directori de treball actual"
 
@@ -9952,11 +10192,11 @@ msgstr ""
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr "  (useu «git rm <fitxer>...» per a senyalar resolució)"
 
-#: wt-status.c:211 wt-status.c:1131
+#: wt-status.c:211 wt-status.c:1140
 msgid "Changes to be committed:"
 msgstr "Canvis a cometre:"
 
-#: wt-status.c:234 wt-status.c:1140
+#: wt-status.c:234 wt-status.c:1149
 msgid "Changes not staged for commit:"
 msgstr "Canvis no «staged» per a cometre:"
 
@@ -9982,7 +10222,7 @@ msgstr ""
 #: wt-status.c:254
 #, c-format
 msgid "  (use \"git %s <file>...\" to include in what will be committed)"
-msgstr "  (useu «git %s <fitxer>...» per a incloure-ho en la comissió)"
+msgstr "  (useu «git %s <fitxer>...» per a incloure'ls en la comissió)"
 
 #: wt-status.c:266
 msgid "both deleted:"
@@ -10056,22 +10296,22 @@ msgstr "contingut modificat, "
 msgid "untracked content, "
 msgstr "contingut no seguit, "
 
-#: wt-status.c:964
+#: wt-status.c:973
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] "L'«stash» té actualment %d entrada"
 msgstr[1] "L'«stash» té actualment %d entrades"
 
-#: wt-status.c:995
+#: wt-status.c:1004
 msgid "Submodules changed but not updated:"
 msgstr "Submòduls canviats però no actualitzats:"
 
-#: wt-status.c:997
+#: wt-status.c:1006
 msgid "Submodule changes to be committed:"
 msgstr "Canvis de submòdul a cometre:"
 
-#: wt-status.c:1079
+#: wt-status.c:1088
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -10079,7 +10319,7 @@ msgstr ""
 "No modifiqueu ni elimineu la línia de dalt.\n"
 "Tot el que hi ha a sota s'ignorarà."
 
-#: wt-status.c:1171
+#: wt-status.c:1180
 #, c-format
 msgid ""
 "\n"
@@ -10090,113 +10330,115 @@ msgstr ""
 "S'ha trigat un %.2f segons a calcular els valors de la branca d'endavant i darrere.\n"
 "Podeu utilitzar «--no-ahead-behind» per a evitar-ho.\n"
 
-#: wt-status.c:1201
+#: wt-status.c:1210
 msgid "You have unmerged paths."
 msgstr "Teniu camins sense fusionar."
 
-#: wt-status.c:1204
+#: wt-status.c:1213
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (arregleu els conflictes i executeu «git commit»)"
 
-#: wt-status.c:1206
+#: wt-status.c:1215
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (useu «git merge --abort» per a avortar la fusió)"
 
-#: wt-status.c:1210
+#: wt-status.c:1219
 msgid "All conflicts fixed but you are still merging."
 msgstr "Tots els conflictes estan arreglats però encara esteu fusionant."
 
-#: wt-status.c:1213
+#: wt-status.c:1222
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (useu «git commit» per a concloure la fusió)"
 
-#: wt-status.c:1224
+#: wt-status.c:1233
 msgid "You are in the middle of an am session."
 msgstr "Esteu enmig d'una sessió am."
 
-#: wt-status.c:1227
+#: wt-status.c:1236
 msgid "The current patch is empty."
 msgstr "El pedaç actual està buit."
 
-#: wt-status.c:1232
+#: wt-status.c:1241
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (arregleu els conflictes i després executeu «git am --continue»)"
 
-#: wt-status.c:1234
+#: wt-status.c:1243
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (useu «git am --skip» per a ometre aquest pedaç)"
 
-#: wt-status.c:1237
+#: wt-status.c:1246
 msgid "  (use \"git am --allow-empty\" to record this patch as an empty commit)"
-msgstr "  (useu «git am --allow-empty» per a enregistrar aquest pedaç com una comissió buida)"
+msgstr ""
+"  (useu «git am --allow-empty» per a enregistrar aquest pedaç com una "
+"comissió buida)"
 
-#: wt-status.c:1239
+#: wt-status.c:1248
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr "  (useu «git am --abort» per a restaurar la branca original)"
 
-#: wt-status.c:1372
+#: wt-status.c:1381
 msgid "git-rebase-todo is missing."
 msgstr "Manca git-rebase-todo."
 
-#: wt-status.c:1374
+#: wt-status.c:1383
 msgid "No commands done."
 msgstr "No s'ha fet cap ordre."
 
-#: wt-status.c:1377
-#, c-format
-msgid "Last command done (%d command done):"
-msgid_plural "Last commands done (%d commands done):"
-msgstr[0] "Última ordre feta (%d ordre feta):"
-msgstr[1] "Últimes ordres fetes (%d ordres fetes):"
+#: wt-status.c:1386
+#, c-format, fuzzy
+msgid "Last command done (%<PRIuMAX> command done):"
+msgid_plural "Last commands done (%<PRIuMAX> commands done):"
+msgstr[0] "Darrera ordre feta (%<PRIuMAX> ordre feta):"
+msgstr[1] "Darrer ordre feta (%<PRIuMAX> ordres fetes):"
 
-#: wt-status.c:1388
+#: wt-status.c:1397
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (vegeu més en el fitxer %s)"
 
-#: wt-status.c:1393
+#: wt-status.c:1402
 msgid "No commands remaining."
 msgstr "No manca cap ordre."
 
-#: wt-status.c:1396
-#, c-format
-msgid "Next command to do (%d remaining command):"
-msgid_plural "Next commands to do (%d remaining commands):"
-msgstr[0] "Ordre següent a fer (manca %d ordre):"
-msgstr[1] "Ordres següents a fer (manquen %d ordres):"
+#: wt-status.c:1405
+#, c-format, fuzzy
+msgid "Next command to do (%<PRIuMAX> remaining command):"
+msgid_plural "Next commands to do (%<PRIuMAX> remaining commands):"
+msgstr[0] "Següent ordre a fer (%<PRIuMAX> restant ordre):"
+msgstr[1] "Següent ordre a fer (%<PRIuMAX> ordres restants):"
 
-#: wt-status.c:1404
+#: wt-status.c:1413
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr "  (useu «git rebase --edit-todo» per a veure i editar)"
 
-#: wt-status.c:1416
+#: wt-status.c:1425
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "Actualment esteu fent «rebase» de la branca «%s» en «%s»."
 
-#: wt-status.c:1421
+#: wt-status.c:1430
 msgid "You are currently rebasing."
 msgstr "Actualment esteu fent «rebase»."
 
-#: wt-status.c:1434
+#: wt-status.c:1443
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr ""
 "  (arregleu els conflictes i després executeu «git rebase --continue»)"
 
-#: wt-status.c:1436
+#: wt-status.c:1445
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (useu «git rebase --skip» per a ometre aquest pedaç)"
 
-#: wt-status.c:1438
+#: wt-status.c:1447
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr "  (useu «git rebase --abort» per a agafar la branca original)"
 
-#: wt-status.c:1445
+#: wt-status.c:1454
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr ""
 "  (tots els conflictes estan arreglats: executeu «git rebase --continue»)"
 
-#: wt-status.c:1449
+#: wt-status.c:1458
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
@@ -10204,164 +10446,164 @@ msgstr ""
 "Actualment esteu dividint una comissió mentre es fa «rebase» de la branca "
 "«%s» en «%s»."
 
-#: wt-status.c:1454
+#: wt-status.c:1463
 msgid "You are currently splitting a commit during a rebase."
 msgstr "Actualment esteu dividint una comissió durant un «rebase»."
 
-#: wt-status.c:1457
+#: wt-status.c:1466
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr ""
 "  (Una vegada que el vostre directori de treball sigui net, executeu «git "
 "rebase --continue»)"
 
-#: wt-status.c:1461
+#: wt-status.c:1470
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr ""
 "Actualment esteu editant una comissió mentre es fa «rebase» de la branca "
 "«%s» en «%s»."
 
-#: wt-status.c:1466
+#: wt-status.c:1475
 msgid "You are currently editing a commit during a rebase."
 msgstr "Actualment esteu editant una comissió durant un «rebase»."
 
-#: wt-status.c:1469
+#: wt-status.c:1478
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr "  (useu «git commit --amend» per a esmenar la comissió actual)"
 
-#: wt-status.c:1471
+#: wt-status.c:1480
 msgid "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr ""
 "  (useu «git rebase --continue» una vegada que estigueu satisfet amb els "
 "vostres canvis)"
 
-#: wt-status.c:1482
+#: wt-status.c:1491
 msgid "Cherry-pick currently in progress."
 msgstr "Hi ha «cherry pick» actualment en curs."
 
-#: wt-status.c:1485
+#: wt-status.c:1494
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "Actualment esteu fent «cherry pick» a la comissió %s."
 
-#: wt-status.c:1492
+#: wt-status.c:1501
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr "  (arregleu els conflictes i executeu «git cherry-pick --continue»)"
 
-#: wt-status.c:1495
+#: wt-status.c:1504
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (executeu «git cherry-pick --continue» per a continuar)"
 
-#: wt-status.c:1498
+#: wt-status.c:1507
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr ""
 "  (tots els conflictes estan arreglats: executeu «git cherry-pick "
 "--continue»)"
 
-#: wt-status.c:1500
+#: wt-status.c:1509
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr "  (useu «git cherry-pick --skip» per a ometre aquest pedaç)"
 
-#: wt-status.c:1502
+#: wt-status.c:1511
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr ""
 "  (useu «git cherry-pick --abort» per a cancel·lar l'operació de «cherry "
 "pick»)"
 
-#: wt-status.c:1512
+#: wt-status.c:1521
 msgid "Revert currently in progress."
 msgstr "Una reversió està actualment en curs."
 
-#: wt-status.c:1515
+#: wt-status.c:1524
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Actualment esteu revertint la comissió %s."
 
-#: wt-status.c:1521
+#: wt-status.c:1530
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (arregleu els conflictes i executeu «git revert --continue»)"
 
-#: wt-status.c:1524
+#: wt-status.c:1533
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (executeu «git revert --continue» per a continuar)"
 
-#: wt-status.c:1527
+#: wt-status.c:1536
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr ""
 "  (tots els conflictes estan arreglats: executeu «git revert --continue»)"
 
-#: wt-status.c:1529
+#: wt-status.c:1538
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr "  (useu «git revert --skip» per a ometre aquest pedaç)"
 
-#: wt-status.c:1531
+#: wt-status.c:1540
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (useu «git revert --abort» per a cancel·lar l'operació de reversió)"
 
-#: wt-status.c:1541
+#: wt-status.c:1550
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "Actualment esteu bisecant, heu començat des de la branca «%s»."
 
-#: wt-status.c:1545
+#: wt-status.c:1554
 msgid "You are currently bisecting."
 msgstr "Actualment esteu bisecant."
 
-#: wt-status.c:1548
+#: wt-status.c:1557
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (useu «git bisect reset» per a tornar a la branca original)"
 
-#: wt-status.c:1559
+#: wt-status.c:1568
 msgid "You are in a sparse checkout."
 msgstr "Esteu en un «sparse-checkout»."
 
-#: wt-status.c:1562
+#: wt-status.c:1571
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
 msgstr ""
 "Esteu en un «sparse-checkout» amb un %d%% de fitxers seguits presents."
 
-#: wt-status.c:1806
+#: wt-status.c:1815
 msgid "On branch "
 msgstr "En la branca "
 
-#: wt-status.c:1813
+#: wt-status.c:1822
 msgid "interactive rebase in progress; onto "
 msgstr "«rebase» interactiu en curs; sobre "
 
-#: wt-status.c:1815
+#: wt-status.c:1824
 msgid "rebase in progress; onto "
 msgstr "«rebase» en curs; sobre "
 
-#: wt-status.c:1820
+#: wt-status.c:1829
 msgid "HEAD detached at "
 msgstr "HEAD separat a "
 
-#: wt-status.c:1822
+#: wt-status.c:1831
 msgid "HEAD detached from "
 msgstr "HEAD separat des de "
 
-#: wt-status.c:1825
+#: wt-status.c:1834
 msgid "Not currently on any branch."
 msgstr "Actualment no s'és en cap branca."
 
-#: wt-status.c:1842
+#: wt-status.c:1851
 msgid "Initial commit"
 msgstr "Comissió inicial"
 
-#: wt-status.c:1843
+#: wt-status.c:1852
 msgid "No commits yet"
 msgstr "No s'ha fet cap comissió encara"
 
-#: wt-status.c:1857
+#: wt-status.c:1866
 msgid "Untracked files"
 msgstr "Fitxers no seguits"
 
-#: wt-status.c:1859
+#: wt-status.c:1868
 msgid "Ignored files"
 msgstr "Fitxers ignorats"
 
-#: wt-status.c:1863
+#: wt-status.c:1872
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -10373,30 +10615,30 @@ msgstr ""
 "oblidar-vos d'afegir fitxers nous vosaltres mateixos (vegeu\n"
 "«git help status»)."
 
-#: wt-status.c:1869
+#: wt-status.c:1878
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Els fitxers no seguits no estan llistats%s"
 
-#: wt-status.c:1871
+#: wt-status.c:1880
 msgid " (use -u option to show untracked files)"
 msgstr " (useu l'opció -u per a mostrar els fitxers no seguits)"
 
-#: wt-status.c:1877
+#: wt-status.c:1886
 msgid "No changes"
 msgstr "Sense canvis"
 
-#: wt-status.c:1882
+#: wt-status.c:1891
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr "no hi ha canvis afegits a cometre (useu «git add» o «git commit -a»)\n"
 
-#: wt-status.c:1886
+#: wt-status.c:1895
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "no hi ha canvis afegits a cometre\n"
 
-#: wt-status.c:1890
+#: wt-status.c:1899
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -10405,64 +10647,64 @@ msgstr ""
 "no hi ha res afegit a cometre però hi ha fitxers no seguits (useu «git add» "
 "per a seguir-los)\n"
 
-#: wt-status.c:1894
+#: wt-status.c:1903
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr "no hi ha res afegit a cometre però hi ha fitxers no seguits\n"
 
-#: wt-status.c:1898
+#: wt-status.c:1907
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 "no hi ha res a cometre (creeu/copieu fitxers i useu «git add» per a seguir-"
 "los)\n"
 
-#: wt-status.c:1902 wt-status.c:1908
+#: wt-status.c:1911 wt-status.c:1917
 #, c-format
 msgid "nothing to commit\n"
 msgstr "no hi ha res a cometre\n"
 
-#: wt-status.c:1905
+#: wt-status.c:1914
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr "no hi ha res a cometre (useu -u per a mostrar els fitxers no seguits)\n"
 
-#: wt-status.c:1910
+#: wt-status.c:1919
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "no hi ha res a cometre, l'arbre de treball està net\n"
 
-#: wt-status.c:2015
+#: wt-status.c:2024
 msgid "No commits yet on "
 msgstr "No s'ha fet cap comissió encara a "
 
-#: wt-status.c:2019
+#: wt-status.c:2028
 msgid "HEAD (no branch)"
 msgstr "HEAD (sense branca)"
 
-#: wt-status.c:2050
+#: wt-status.c:2059
 msgid "different"
 msgstr "diferent"
 
-#: wt-status.c:2052 wt-status.c:2060
+#: wt-status.c:2061 wt-status.c:2069
 msgid "behind "
 msgstr "darrere "
 
-#: wt-status.c:2055 wt-status.c:2058
+#: wt-status.c:2064 wt-status.c:2067
 msgid "ahead "
 msgstr "davant per "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2596
+#: wt-status.c:2605
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "no es pot %s: Teniu canvis «unstaged»."
 
-#: wt-status.c:2602
+#: wt-status.c:2611
 msgid "additionally, your index contains uncommitted changes."
 msgstr "addicionalment, el vostre índex conté canvis sense cometre."
 
-#: wt-status.c:2604
+#: wt-status.c:2613
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "no es pot %s: El vostre índex conté canvis sense cometre."
@@ -10485,147 +10727,153 @@ msgstr "no s'ha pogut començar un fil «accept_thread» «%s»"
 msgid "could not start worker[0] for '%s'"
 msgstr "no s'ha pogut iniciar el fil[0] per a «%s»"
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:347
+#: compat/precompose_utf8.c:58 builtin/clone.c:353
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "s'ha produït un error en desenllaçar «%s»"
 
+#: compat/fsmonitor/fsm-listen-darwin.c:355
+#, fuzzy
+msgid "Unable to create FSEventStream."
+msgstr "No s'ha pogut crear el FSEventStream."
+
+#: compat/fsmonitor/fsm-listen-darwin.c:403
+#, fuzzy
+msgid "Failed to start the FSEventStream"
+msgstr "No s'ha pogut iniciar el FSEventStream"
+
 #: builtin/add.c:26
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<opcions>] [--] <especificació-de-camí>..."
 
-#: builtin/add.c:64
+#: builtin/add.c:63
 #, c-format
 msgid "cannot chmod %cx '%s'"
 msgstr "no es pot fer chmod %cx «%s»"
 
-#: builtin/add.c:106
+#: builtin/add.c:105
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "estat de diff inesperat %c"
 
-#: builtin/add.c:111 builtin/commit.c:298
+#: builtin/add.c:110 builtin/commit.c:299
 msgid "updating files failed"
 msgstr "s'ha produït un error en actualitzar els fitxers"
 
-#: builtin/add.c:121
+#: builtin/add.c:120
 #, c-format
 msgid "remove '%s'\n"
 msgstr "elimina «%s»\n"
 
-#: builtin/add.c:205
+#: builtin/add.c:204
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Canvis «unstaged» després d'actualitzar l'índex:"
 
-#: builtin/add.c:313 builtin/rev-parse.c:993
+#: builtin/add.c:312 builtin/rev-parse.c:993
 msgid "Could not read the index"
 msgstr "No s'ha pogut llegir l'índex"
 
-#: builtin/add.c:326
+#: builtin/add.c:325
 msgid "Could not write patch"
 msgstr "No s'ha pogut escriure el pedaç"
 
-#: builtin/add.c:329
+#: builtin/add.c:328
 msgid "editing patch failed"
 msgstr "l'edició del pedaç ha fallat"
 
-#: builtin/add.c:332
+#: builtin/add.c:331
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "No s'ha pogut fer stat a «%s»"
 
-#: builtin/add.c:334
+#: builtin/add.c:333
 msgid "Empty patch. Aborted."
 msgstr "El pedaç és buit. S'ha avortat."
 
-#: builtin/add.c:340
+#: builtin/add.c:339
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "No s'ha pogut aplicar «%s»"
 
-#: builtin/add.c:348
+#: builtin/add.c:347
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr "Els camins següents s'ignoren per un dels vostres fitxers .gitignore:\n"
 
-#: builtin/add.c:368 builtin/clean.c:927 builtin/fetch.c:174 builtin/mv.c:124
+#: builtin/add.c:367 builtin/clean.c:927 builtin/fetch.c:175 builtin/mv.c:124
 #: builtin/prune-packed.c:14 builtin/pull.c:208 builtin/push.c:550
-#: builtin/remote.c:1429 builtin/rm.c:244 builtin/send-pack.c:194
+#: builtin/remote.c:1454 builtin/rm.c:244 builtin/send-pack.c:194
 msgid "dry run"
 msgstr "fes una prova"
 
-#: builtin/add.c:369 builtin/check-ignore.c:22 builtin/commit.c:1484
-#: builtin/count-objects.c:98 builtin/fsck.c:789 builtin/log.c:2313
+#: builtin/add.c:368 builtin/check-ignore.c:22 builtin/commit.c:1483
+#: builtin/count-objects.c:98 builtin/fsck.c:789 builtin/log.c:2338
 #: builtin/mv.c:123 builtin/read-tree.c:120
 msgid "be verbose"
 msgstr "sigues detallat"
 
-#: builtin/add.c:371
+#: builtin/add.c:370
 msgid "interactive picking"
 msgstr "selecció interactiva"
 
-#: builtin/add.c:372 builtin/checkout.c:1581 builtin/reset.c:409
+#: builtin/add.c:371 builtin/checkout.c:1599 builtin/reset.c:417
 msgid "select hunks interactively"
 msgstr "selecciona els trossos interactivament"
 
-#: builtin/add.c:373
+#: builtin/add.c:372
 msgid "edit current diff and apply"
 msgstr "edita la diferència actual i aplica-la"
 
-#: builtin/add.c:374
+#: builtin/add.c:373
 msgid "allow adding otherwise ignored files"
 msgstr "permet afegir fitxers que d'altra manera s'ignoren"
 
-#: builtin/add.c:375
+#: builtin/add.c:374
 msgid "update tracked files"
 msgstr "actualitza els fitxers seguits"
 
-#: builtin/add.c:376
+#: builtin/add.c:375
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr "torna a normalitzar EOL dels fitxers seguits (implica -u)"
 
-#: builtin/add.c:377
+#: builtin/add.c:376
 msgid "record only the fact that the path will be added later"
 msgstr "registra només el fet que el camí s'afegirà més tard"
 
-#: builtin/add.c:378
+#: builtin/add.c:377
 msgid "add changes from all tracked and untracked files"
 msgstr "afegeix els canvis de tots els fitxers seguits i no seguits"
 
-#: builtin/add.c:381
+#: builtin/add.c:380
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr ""
 "ignora els camins eliminats en l'arbre de treball (el mateix que --no-all)"
 
-#: builtin/add.c:383
+#: builtin/add.c:382
 msgid "don't add, only refresh the index"
 msgstr "no afegeixis, només actualitza l'índex"
 
-#: builtin/add.c:384
+#: builtin/add.c:383
 msgid "just skip files which cannot be added because of errors"
 msgstr "només omet els fitxers que no es poden afegir a causa d'errors"
 
-#: builtin/add.c:385
+#: builtin/add.c:384
 msgid "check if - even missing - files are ignored in dry run"
 msgstr ""
 "comprova si els fitxers, fins i tot els absents, s'ignoren en fer una prova"
 
-#: builtin/add.c:386 builtin/mv.c:128 builtin/rm.c:251
+#: builtin/add.c:385 builtin/mv.c:128 builtin/rm.c:251
 msgid "allow updating entries outside of the sparse-checkout cone"
 msgstr "permet actualitzar entrada fora del con del «sparse-checkout»"
 
-#: builtin/add.c:388 builtin/update-index.c:1004
+#: builtin/add.c:387 builtin/update-index.c:1023
 msgid "override the executable bit of the listed files"
 msgstr "sobreescriu el bit executable dels fitxers llistats"
 
-#: builtin/add.c:390
+#: builtin/add.c:389
 msgid "warn when adding an embedded repository"
 msgstr "avisa'm quan s'afegeixi un repositori incrustat"
 
-#: builtin/add.c:392
-msgid "backend for `git stash -p`"
-msgstr "rerefons per a «git stash -p»"
-
-#: builtin/add.c:410
+#: builtin/add.c:407
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -10656,12 +10904,12 @@ msgstr ""
 "\n"
 "Vegeu «git help submodule» per a més informació."
 
-#: builtin/add.c:439
+#: builtin/add.c:436
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "s'està afegint un repositori incrustat: %s"
 
-#: builtin/add.c:459
+#: builtin/add.c:456
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
@@ -10671,27 +10919,27 @@ msgstr ""
 "Desactiveu aquest missatge executant\n"
 "«git config advice.addIgnoredFile false»"
 
-#: builtin/add.c:474
+#: builtin/add.c:471
 msgid "adding files failed"
 msgstr "l'afegiment de fitxers ha fallat"
 
-#: builtin/add.c:548
+#: builtin/add.c:534
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "el paràmetre --chmod «%s» ha de ser o -x o +x"
 
-#: builtin/add.c:569 builtin/checkout.c:1751 builtin/commit.c:364
-#: builtin/reset.c:429 builtin/rm.c:275 builtin/stash.c:1713
+#: builtin/add.c:555 builtin/checkout.c:1770 builtin/commit.c:365
+#: builtin/reset.c:436 builtin/rm.c:275 builtin/stash.c:1702
 #, c-format
 msgid "'%s' and pathspec arguments cannot be used together"
 msgstr "«%s» i l'especificació de camí no es poden usar juntes"
 
-#: builtin/add.c:580
+#: builtin/add.c:566
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "No s'ha especificat res, no s'ha afegit res.\n"
 
-#: builtin/add.c:582
+#: builtin/add.c:568
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
@@ -10701,119 +10949,115 @@ msgstr ""
 "Desactiveu aquest missatge executant\n"
 "«git config advice.addEmptyPathspec false»"
 
-#: builtin/am.c:202
-#, c-format
-msgid "Invalid value for --empty: %s"
-msgstr "Valor no vàlid per a --empty: %s"
-
-#: builtin/am.c:392
+#: builtin/am.c:393
 msgid "could not parse author script"
 msgstr "no s'ha pogut analitzar l'script d'autor"
 
-#: builtin/am.c:482
+#: builtin/am.c:483
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "s'ha suprimit «%s» pel lligam applypatch-msg"
 
-#: builtin/am.c:524
+#: builtin/am.c:525
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Línia d'entrada mal formada: «%s»."
 
-#: builtin/am.c:562
+#: builtin/am.c:563
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "S'ha produït un error en copiar les notes de «%s» a «%s»"
 
-#: builtin/am.c:588
+#: builtin/am.c:589
 msgid "fseek failed"
 msgstr "fseek ha fallat"
 
-#: builtin/am.c:776
+#: builtin/am.c:777
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "no s'ha pogut analitzar el pedaç «%s»"
 
-#: builtin/am.c:841
+#: builtin/am.c:842
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Només una sèrie de pedaços StGIT es pot aplicar a la vegada"
 
-#: builtin/am.c:889
+#: builtin/am.c:890
 msgid "invalid timestamp"
 msgstr "marca de temps no vàlida"
 
-#: builtin/am.c:894 builtin/am.c:906
+#: builtin/am.c:895 builtin/am.c:907
 msgid "invalid Date line"
 msgstr "línia Date no vàlida"
 
-#: builtin/am.c:901
+#: builtin/am.c:902
 msgid "invalid timezone offset"
 msgstr "desplaçament del fus horari no vàlid"
 
-#: builtin/am.c:994
+#: builtin/am.c:995
 msgid "Patch format detection failed."
 msgstr "La detecció de format de pedaç ha fallat."
 
-#: builtin/am.c:999 builtin/clone.c:300
+#: builtin/am.c:1000 builtin/clone.c:306
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "s'ha produït un error en crear el directori «%s»"
 
-#: builtin/am.c:1004
+#: builtin/am.c:1005
 msgid "Failed to split patches."
 msgstr "S'ha produït un error en dividir els pedaços."
 
-#: builtin/am.c:1153
+#: builtin/am.c:1154
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "Quan hàgiu resolt aquest problema, executeu «%s --continue»."
 
-#: builtin/am.c:1154
+#: builtin/am.c:1155
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "Si preferiu ometre aquest pedaç, executeu «%s --skip» en lloc d'això."
 
-#: builtin/am.c:1159
+#: builtin/am.c:1160
 #, c-format
 msgid "To record the empty patch as an empty commit, run \"%s --allow-empty\"."
 msgstr ""
-"Per a enregistrar un pedaç buit com a comissió buida, executeu «%s --allow-empty»."
+"Per a enregistrar un pedaç buit com a comissió buida, executeu «%s --allow-"
+"empty»."
 
-#: builtin/am.c:1161
+#: builtin/am.c:1162
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr ""
 "Per a restaurar la branca original i deixar d'apedaçar, executeu «%s "
 "--abort»."
 
-#: builtin/am.c:1256
+#: builtin/am.c:1257
 msgid ""
 "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 "Pedaç enviat amb format=flowed; es pot perdre l'espai al final de les "
 "línies."
 
-#: builtin/am.c:1344
+#: builtin/am.c:1345
 #, c-format
 msgid "missing author line in commit %s"
 msgstr "manca la línia d'autor en la comissió %s"
 
-#: builtin/am.c:1347
+#: builtin/am.c:1348
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "línia d'identitat no vàlida: %.*s"
 
-#: builtin/am.c:1566
+#: builtin/am.c:1567
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 "Al repositori li manquen els blobs necessaris per a retrocedir a una fusió "
 "de 3 vies."
 
-#: builtin/am.c:1568
+#: builtin/am.c:1569
 msgid "Using index info to reconstruct a base tree..."
 msgstr "S'està usant la informació d'índex per a reconstruir un arbre base..."
 
-#: builtin/am.c:1587
+#: builtin/am.c:1588
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -10821,84 +11065,84 @@ msgstr ""
 "Heu editat el vostre pedaç a mà?\n"
 "No s'aplica als blobs recordats en el seu índex."
 
-#: builtin/am.c:1593
+#: builtin/am.c:1594
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "S'està retrocedint a apedaçar la base i una fusió de 3 vies..."
 
-#: builtin/am.c:1619
+#: builtin/am.c:1620
 msgid "Failed to merge in the changes."
 msgstr "S'ha produït un error en fusionar els canvis."
 
-#: builtin/am.c:1651
+#: builtin/am.c:1652
 msgid "applying to an empty history"
 msgstr "s'està aplicant a una història buida"
 
-#: builtin/am.c:1703 builtin/am.c:1707
+#: builtin/am.c:1704 builtin/am.c:1708
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "no es pot reprendre: %s no existeix."
 
-#: builtin/am.c:1725
+#: builtin/am.c:1726
 msgid "Commit Body is:"
 msgstr "El cos de la comissió és:"
 
 #. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a]
 #. in your translation. The program will only accept English
 #. input at this point.
-#: builtin/am.c:1735
+#: builtin/am.c:1736
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr ""
 "Voleu aplicar-lo? [y]es/[n]o/[e]dita/[v]isualitza el pedaç/[a]ccepta'ls "
 "tots: "
 
-#: builtin/am.c:1781 builtin/commit.c:409
+#: builtin/am.c:1782 builtin/commit.c:410
 msgid "unable to write index file"
 msgstr "no s'ha pogut escriure el fitxer d'índex"
 
-#: builtin/am.c:1785
+#: builtin/am.c:1786
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Índex brut: no es poden aplicar pedaços (bruts: %s)"
 
-#: builtin/am.c:1827
+#: builtin/am.c:1828
 #, c-format
 msgid "Skipping: %.*s"
 msgstr "S'està ometent: %.*s"
 
-#: builtin/am.c:1832
+#: builtin/am.c:1833
 #, c-format
 msgid "Creating an empty commit: %.*s"
 msgstr "S'està creant una comissió buida: %.*s"
 
-#: builtin/am.c:1836
+#: builtin/am.c:1837
 msgid "Patch is empty."
 msgstr "El pedaç està buit."
 
-#: builtin/am.c:1847 builtin/am.c:1916
+#: builtin/am.c:1848 builtin/am.c:1917
 #, c-format
 msgid "Applying: %.*s"
 msgstr "S'està aplicant: %.*s"
 
-#: builtin/am.c:1864
+#: builtin/am.c:1865
 msgid "No changes -- Patch already applied."
 msgstr "Sense canvis -- El pedaç ja s'ha aplicat."
 
-#: builtin/am.c:1870
+#: builtin/am.c:1871
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "El pedaç ha fallat a %s %.*s"
 
-#: builtin/am.c:1874
+#: builtin/am.c:1875
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr ""
 "Useu «git am --show-current-patch=diff» per a veure el pedaç que ha fallat"
 
-#: builtin/am.c:1920
+#: builtin/am.c:1921
 msgid "No changes - recorded it as an empty commit."
 msgstr "No hi ha canvis - enregistrat com una comissió buida."
 
-#: builtin/am.c:1922
+#: builtin/am.c:1923
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -10908,7 +11152,7 @@ msgstr ""
 "Si no hi ha res per a fer «stage», probablement alguna altra cosa ja ha\n"
 "introduït els mateixos canvis; potser voleu ometre aquest pedaç."
 
-#: builtin/am.c:1930
+#: builtin/am.c:1931
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as such.\n"
@@ -10918,17 +11162,17 @@ msgstr ""
 "Heu de fer «git add» a cada fitxer amb conflictes resolts per a marcar-los com a tal.\n"
 "Podeu executar «git rm» en un fitxer per a acceptar «suprimit per ells» pel fitxer."
 
-#: builtin/am.c:2038 builtin/am.c:2042 builtin/am.c:2054 builtin/reset.c:448
-#: builtin/reset.c:456
+#: builtin/am.c:2039 builtin/am.c:2043 builtin/am.c:2055 builtin/reset.c:455
+#: builtin/reset.c:463
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "No s'ha pogut analitzar l'objecte «%s»."
 
-#: builtin/am.c:2090 builtin/am.c:2166
+#: builtin/am.c:2091 builtin/am.c:2167
 msgid "failed to clean index"
 msgstr "s'ha produït un error en netejar l'índex"
 
-#: builtin/am.c:2134
+#: builtin/am.c:2135
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -10936,168 +11180,159 @@ msgstr ""
 "Sembla que heu mogut HEAD després de l'última fallada de «am».\n"
 "No s'està rebobinant a ORIG_HEAD"
 
-#: builtin/am.c:2242
-#, c-format
-msgid "Invalid value for --patch-format: %s"
-msgstr "Valor no vàlid per a --patch-format: %s"
-
-#: builtin/am.c:2285
-#, c-format
-msgid "Invalid value for --show-current-patch: %s"
-msgstr "Valor no vàlid per --show-current-patch: %s"
-
-#: builtin/am.c:2289
+#: builtin/am.c:2292
 #, c-format
 msgid "options '%s=%s' and '%s=%s' cannot be used together"
 msgstr "les opcions «%s=%s» i «%s=%s» no es poden usar juntes"
 
-#: builtin/am.c:2320
+#: builtin/am.c:2323
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<opcions>] [(<bústia> | <directori-de-correu>)...]"
 
-#: builtin/am.c:2321
+#: builtin/am.c:2324
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<opcions>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2327
+#: builtin/am.c:2330
 msgid "run interactively"
 msgstr "executa interactivament"
 
-#: builtin/am.c:2329
+#: builtin/am.c:2332
 msgid "historical option -- no-op"
 msgstr "opció històrica -- no-op"
 
-#: builtin/am.c:2331
+#: builtin/am.c:2334
 msgid "allow fall back on 3way merging if needed"
 msgstr "permet retrocedir a una fusió de 3 vies si és necessari"
 
-#: builtin/am.c:2332 builtin/init-db.c:547 builtin/prune-packed.c:16
-#: builtin/repack.c:642 builtin/stash.c:962
+#: builtin/am.c:2335 builtin/init-db.c:547 builtin/prune-packed.c:16
+#: builtin/repack.c:646 builtin/stash.c:946
 msgid "be quiet"
 msgstr "silenciós"
 
-#: builtin/am.c:2334
+#: builtin/am.c:2337
 msgid "add a Signed-off-by trailer to the commit message"
 msgstr "afegeix un «trailer» tipus «Signed-off-by» al missatge de comissió"
 
-#: builtin/am.c:2337
+#: builtin/am.c:2340
 msgid "recode into utf8 (default)"
 msgstr "recodifica en utf8 (per defecte)"
 
-#: builtin/am.c:2339
+#: builtin/am.c:2342
 msgid "pass -k flag to git-mailinfo"
 msgstr "passa l'indicador -k a git-mailinfo"
 
-#: builtin/am.c:2341
+#: builtin/am.c:2344
 msgid "pass -b flag to git-mailinfo"
 msgstr "passa l'indicador -b a git-mailinfo"
 
-#: builtin/am.c:2343
+#: builtin/am.c:2346
 msgid "pass -m flag to git-mailinfo"
 msgstr "passa l'indicador -m a git-mailinfo"
 
-#: builtin/am.c:2345
+#: builtin/am.c:2348
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "passa l'indicador --keep-cr a git-mailsplit per al format mbox"
 
-#: builtin/am.c:2348
+#: builtin/am.c:2351
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr ""
 "no passis l'indicador --keep-cr a git-mailsplit independentment d'am.keepcr"
 
-#: builtin/am.c:2351
+#: builtin/am.c:2354
 msgid "strip everything before a scissors line"
 msgstr "elimina tot abans d'una línia de tisores"
 
-#: builtin/am.c:2353
+#: builtin/am.c:2356
 msgid "pass it through git-mailinfo"
 msgstr "passa-ho a través del git-mailinfo"
 
-#: builtin/am.c:2356 builtin/am.c:2359 builtin/am.c:2362 builtin/am.c:2365
-#: builtin/am.c:2368 builtin/am.c:2371 builtin/am.c:2374 builtin/am.c:2377
-#: builtin/am.c:2383
+#: builtin/am.c:2359 builtin/am.c:2362 builtin/am.c:2365 builtin/am.c:2368
+#: builtin/am.c:2371 builtin/am.c:2374 builtin/am.c:2377 builtin/am.c:2380
+#: builtin/am.c:2386
 msgid "pass it through git-apply"
 msgstr "passa-ho a través de git-apply"
 
-#: builtin/am.c:2373 builtin/commit.c:1515 builtin/fmt-merge-msg.c:18
-#: builtin/fmt-merge-msg.c:21 builtin/grep.c:919 builtin/merge.c:263
+#: builtin/am.c:2376 builtin/commit.c:1514 builtin/fmt-merge-msg.c:18
+#: builtin/fmt-merge-msg.c:21 builtin/grep.c:920 builtin/merge.c:263
 #: builtin/pull.c:142 builtin/pull.c:204 builtin/pull.c:221
-#: builtin/rebase.c:1046 builtin/repack.c:653 builtin/repack.c:657
-#: builtin/repack.c:659 builtin/show-branch.c:649 builtin/show-ref.c:172
-#: builtin/tag.c:445 parse-options.h:154 parse-options.h:175
-#: parse-options.h:317
+#: builtin/rebase.c:1074 builtin/repack.c:657 builtin/repack.c:661
+#: builtin/repack.c:663 builtin/show-branch.c:650 builtin/show-ref.c:172
+#: builtin/tag.c:446 parse-options.h:159 parse-options.h:180
+#: parse-options.h:348
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2379 builtin/branch.c:680 builtin/bugreport.c:109
-#: builtin/for-each-ref.c:41 builtin/replace.c:555 builtin/tag.c:479
-#: builtin/verify-tag.c:38
+#: builtin/am.c:2382 builtin/branch.c:695 builtin/bugreport.c:109
+#: builtin/cat-file.c:848 builtin/cat-file.c:852 builtin/cat-file.c:856
+#: builtin/for-each-ref.c:41 builtin/ls-tree.c:357 builtin/replace.c:555
+#: builtin/tag.c:480 builtin/verify-tag.c:38
 msgid "format"
 msgstr "format"
 
-#: builtin/am.c:2380
+#: builtin/am.c:2383
 msgid "format the patch(es) are in"
 msgstr "el format en el qual estan els pedaços"
 
-#: builtin/am.c:2386
+#: builtin/am.c:2389
 msgid "override error message when patch failure occurs"
 msgstr "sobreescriu el missatge d'error si falla l'aplicació del pedaç"
 
-#: builtin/am.c:2388
+#: builtin/am.c:2391
 msgid "continue applying patches after resolving a conflict"
 msgstr "segueix aplicant pedaços després de resoldre un conflicte"
 
-#: builtin/am.c:2391
+#: builtin/am.c:2394
 msgid "synonyms for --continue"
 msgstr "sinònims de --continue"
 
-#: builtin/am.c:2394
+#: builtin/am.c:2397
 msgid "skip the current patch"
 msgstr "omet el pedaç actual"
 
-#: builtin/am.c:2397
+#: builtin/am.c:2400
 msgid "restore the original branch and abort the patching operation"
 msgstr "restaura la branca original i interromp l'operació d'apedaçament"
 
-#: builtin/am.c:2400
+#: builtin/am.c:2403
 msgid "abort the patching operation but keep HEAD where it is"
 msgstr "interromp l'operació d'apedaçament però manté HEAD on és"
 
-#: builtin/am.c:2404
+#: builtin/am.c:2407
 msgid "show the patch being applied"
 msgstr "mostra el pedaç que s'està aplicant"
 
-#: builtin/am.c:2408
+#: builtin/am.c:2411
 msgid "record the empty patch as an empty commit"
 msgstr "registra el pedaç buit com una comissió buida"
 
-#: builtin/am.c:2412
+#: builtin/am.c:2415
 msgid "lie about committer date"
 msgstr "menteix sobre la data del comitent"
 
-#: builtin/am.c:2414
+#: builtin/am.c:2417
 msgid "use current timestamp for author date"
 msgstr "usa la marca de temps actual per a la data d'autor"
 
-#: builtin/am.c:2416 builtin/commit-tree.c:118 builtin/commit.c:1643
-#: builtin/merge.c:302 builtin/pull.c:179 builtin/rebase.c:1099
-#: builtin/revert.c:117 builtin/tag.c:460
+#: builtin/am.c:2419 builtin/commit-tree.c:118 builtin/commit.c:1642
+#: builtin/merge.c:302 builtin/pull.c:179 builtin/rebase.c:1127
+#: builtin/revert.c:117 builtin/tag.c:461
 msgid "key-id"
 msgstr "ID de clau"
 
-#: builtin/am.c:2417 builtin/rebase.c:1100
+#: builtin/am.c:2420 builtin/rebase.c:1128
 msgid "GPG-sign commits"
 msgstr "signa les comissions amb GPG"
 
-#: builtin/am.c:2420
+#: builtin/am.c:2423
 msgid "how to handle empty patches"
 msgstr "com gestionar les comissions buides"
 
-#: builtin/am.c:2423
+#: builtin/am.c:2426
 msgid "(internal use for git-rebase)"
 msgstr "(ús intern per a git-rebase)"
 
-#: builtin/am.c:2441
+#: builtin/am.c:2444
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
@@ -11105,18 +11340,18 @@ msgstr ""
 "Fa molt que l'opció -b/--binary no fa res, i\n"
 "s'eliminarà. No l'useu més."
 
-#: builtin/am.c:2448
+#: builtin/am.c:2451
 msgid "failed to read the index"
 msgstr "s'ha produït un error en llegir l'índex"
 
-#: builtin/am.c:2463
+#: builtin/am.c:2466
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr ""
 "un directori de «rebase» anterior %s encara existeix però s'ha donat una "
 "bústia."
 
-#: builtin/am.c:2487
+#: builtin/am.c:2490
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -11125,11 +11360,11 @@ msgstr ""
 "S'ha trobat un directori %s extraviat.\n"
 "Useu «git am --abort» per a eliminar-lo."
 
-#: builtin/am.c:2493
+#: builtin/am.c:2496
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "Una operació de resolució no està en curs; no reprenem."
 
-#: builtin/am.c:2503
+#: builtin/am.c:2506
 msgid "interactive mode requires patches on the command line"
 msgstr "el mode interactiu requereix pedaços a la línia d'ordres"
 
@@ -11166,14 +11401,6 @@ msgstr "git archive: s'esperava una neteja"
 msgid "git bisect--helper --bisect-reset [<commit>]"
 msgstr "git bisect--helper --bisect-reset [<comissió>]"
 
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | "
-"--term-new]"
-msgstr ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | "
-"--term-new]"
-
 #: builtin/bisect--helper.c:26
 msgid ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<term> "
@@ -11184,10 +11411,6 @@ msgstr ""
 "--term-{old,good}=<term>] [--no-checkout] [--first-parent] [<bad> "
 "[<good>...]] [--] [<paths>...]"
 
-#: builtin/bisect--helper.c:28
-msgid "git bisect--helper --bisect-next"
-msgstr "git bisect--helper --bisect-next"
-
 #: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr "git bisect--helper --bisect-state (bad|new) [<rev>]"
@@ -11204,10 +11427,6 @@ msgstr "git bisect--helper --bisect-replay <filename>"
 msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
 msgstr "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
 
-#: builtin/bisect--helper.c:33
-msgid "git bisect--helper --bisect-visualize"
-msgstr "git bisect--helper --bisect-visualize"
-
 #: builtin/bisect--helper.c:34
 msgid "git bisect--helper --bisect-run <cmd>..."
 msgstr "git bisect--helper --bisect-run <ordre>..."
@@ -11428,42 +11647,52 @@ msgstr "«%s»? Què voleu dir?"
 msgid "cannot read file '%s' for replaying"
 msgstr "no es pot llegir «%s» per a reproducció"
 
-#: builtin/bisect--helper.c:1107 builtin/bisect--helper.c:1274
+#: builtin/bisect--helper.c:1120 builtin/bisect--helper.c:1152
+#, c-format
+msgid "running %s\n"
+msgstr "s'està executant %s\n"
+
+#: builtin/bisect--helper.c:1145 builtin/bisect--helper.c:1335
 msgid "bisect run failed: no command provided."
 msgstr "ha fallat l'execució de bisect: no s'ha proporcionat cap ordre."
 
-#: builtin/bisect--helper.c:1116
+#: builtin/bisect--helper.c:1166
 #, c-format
-msgid "running %s\n"
-msgstr "s'està executant %s\n"
+msgid "unable to verify '%s' on good revision"
+msgstr "no s'ha pogut verificar «%s» en una bona revisió"
 
-#: builtin/bisect--helper.c:1120
+#: builtin/bisect--helper.c:1172
+#, c-format
+msgid "bogus exit code %d for good revision"
+msgstr "codi d'error de sortida %d per a una bona revisió"
+
+#: builtin/bisect--helper.c:1180
 #, c-format
 msgid "bisect run failed: exit code %d from '%s' is < 0 or >= 128"
 msgstr ""
 "l'execució de la de bisecció ha fallat: codi de sortida %d de «%s» és < 0 o "
 ">= 128"
 
-#: builtin/bisect--helper.c:1136
+#: builtin/bisect--helper.c:1195
 #, c-format
 msgid "cannot open file '%s' for writing"
 msgstr "no es pot obrir «%s» per a escriptura"
 
-#: builtin/bisect--helper.c:1152
+#: builtin/bisect--helper.c:1213
 msgid "bisect run cannot continue any more"
 msgstr "l'execució de la bisecció no pot continuar més"
 
-#: builtin/bisect--helper.c:1154
+#: builtin/bisect--helper.c:1215
 #, c-format
 msgid "bisect run success"
 msgstr "execució de bisecció amb èxit"
 
-#: builtin/bisect--helper.c:1157
+#: builtin/bisect--helper.c:1218
 #, c-format
 msgid "bisect found first bad commit"
 msgstr "la bisecció ha trobat una primera comissió errònia"
 
-#: builtin/bisect--helper.c:1160
+#: builtin/bisect--helper.c:1221
 #, c-format
 msgid ""
 "bisect run failed: 'git bisect--helper --bisect-state %s' exited with error "
@@ -11472,71 +11701,71 @@ msgstr ""
 "l'execució de la bisecció ha fallat: «git bisect--helper --bisect-state %s» "
 "ha sortit amb el codi d'error %d"
 
-#: builtin/bisect--helper.c:1192
+#: builtin/bisect--helper.c:1253
 msgid "reset the bisection state"
 msgstr "restableix l'estat de la bisecció"
 
-#: builtin/bisect--helper.c:1194
+#: builtin/bisect--helper.c:1255
 msgid "check whether bad or good terms exist"
 msgstr "comprova si existeixen termes correctes o incorrectes"
 
-#: builtin/bisect--helper.c:1196
+#: builtin/bisect--helper.c:1257
 msgid "print out the bisect terms"
 msgstr "imprimeix els termes de la bisecció"
 
-#: builtin/bisect--helper.c:1198
+#: builtin/bisect--helper.c:1259
 msgid "start the bisect session"
 msgstr "inicia la sessió bisecció"
 
-#: builtin/bisect--helper.c:1200
+#: builtin/bisect--helper.c:1261
 msgid "find the next bisection commit"
 msgstr "troba la comissió de bisecció següent"
 
-#: builtin/bisect--helper.c:1202
+#: builtin/bisect--helper.c:1263
 msgid "mark the state of ref (or refs)"
 msgstr "marca l'estat de la referència o referències"
 
-#: builtin/bisect--helper.c:1204
+#: builtin/bisect--helper.c:1265
 msgid "list the bisection steps so far"
 msgstr "mostra les passes de la bisecció fins ara"
 
-#: builtin/bisect--helper.c:1206
+#: builtin/bisect--helper.c:1267
 msgid "replay the bisection process from the given file"
 msgstr "torna a reproduir el procés de bisecció des del fitxer donat"
 
-#: builtin/bisect--helper.c:1208
+#: builtin/bisect--helper.c:1269
 msgid "skip some commits for checkout"
 msgstr "omet algunes comissions en agafar"
 
-#: builtin/bisect--helper.c:1210
+#: builtin/bisect--helper.c:1271
 msgid "visualize the bisection"
 msgstr "visualitza la bisecció"
 
-#: builtin/bisect--helper.c:1212
-msgid "use <cmd>... to automatically bisect."
-msgstr "useu <cmd>... per a fer una bisecció automàticament."
+#: builtin/bisect--helper.c:1273
+msgid "use <cmd>... to automatically bisect"
+msgstr "useu <cmd>... per a fer una bisecció automàticament"
 
-#: builtin/bisect--helper.c:1214
+#: builtin/bisect--helper.c:1275
 msgid "no log for BISECT_WRITE"
 msgstr "no hi ha registre per a BISECT_WRITE"
 
-#: builtin/bisect--helper.c:1229
+#: builtin/bisect--helper.c:1290
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr "--bisect-reset no requereix cap argument ni comissió"
 
-#: builtin/bisect--helper.c:1234
+#: builtin/bisect--helper.c:1295
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms requereix 0 o 1 argument"
 
-#: builtin/bisect--helper.c:1243
+#: builtin/bisect--helper.c:1304
 msgid "--bisect-next requires 0 arguments"
 msgstr "--bisect-next no requereix cap argument"
 
-#: builtin/bisect--helper.c:1254
+#: builtin/bisect--helper.c:1315
 msgid "--bisect-log requires 0 arguments"
 msgstr "--bisect-log no requereix cap argument"
 
-#: builtin/bisect--helper.c:1259
+#: builtin/bisect--helper.c:1320
 msgid "no logfile given"
 msgstr "no s'ha donat cap fitxer de registre"
 
@@ -11557,149 +11786,140 @@ msgstr "s'esperava un color: %s"
 msgid "must end with a color"
 msgstr "ha d'acabar amb un color"
 
-#: builtin/blame.c:724
-#, c-format
-msgid "invalid color '%s' in color.blame.repeatedLines"
-msgstr "color «%s» no vàlid en «color.blame.repeatedLines»"
-
-#: builtin/blame.c:742
-msgid "invalid value for blame.coloring"
-msgstr "valor no vàlid per a «blame.coloring»"
-
-#: builtin/blame.c:841
+#: builtin/blame.c:842
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "no s'ha pogut trobar la revisió %s a ignorar"
 
-#: builtin/blame.c:863
+#: builtin/blame.c:864
 msgid "show blame entries as we find them, incrementally"
 msgstr "mostra les entrades «blame» mentre les trobem, incrementalment"
 
-#: builtin/blame.c:864
+#: builtin/blame.c:865
 msgid "do not show object names of boundary commits (Default: off)"
 msgstr ""
 "no mostris els noms d'objectes de les comissions de frontera (per defecte: "
 "desactivat)"
 
-#: builtin/blame.c:865
+#: builtin/blame.c:866
 msgid "do not treat root commits as boundaries (Default: off)"
 msgstr ""
 "no tractis les comissions arrel com de frontera (per defecte: desactivat)"
 
-#: builtin/blame.c:866
+#: builtin/blame.c:867
 msgid "show work cost statistics"
 msgstr "mostra les estadístiques de preu de treball"
 
-#: builtin/blame.c:867 builtin/checkout.c:1536 builtin/clone.c:94
-#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:180
+#: builtin/blame.c:868 builtin/checkout.c:1554 builtin/clone.c:98
+#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:181
 #: builtin/merge.c:301 builtin/multi-pack-index.c:103
 #: builtin/multi-pack-index.c:154 builtin/multi-pack-index.c:180
 #: builtin/multi-pack-index.c:208 builtin/pull.c:120 builtin/push.c:566
-#: builtin/send-pack.c:202
+#: builtin/remote.c:683 builtin/send-pack.c:202
 msgid "force progress reporting"
 msgstr "força l'informe de progrés"
 
-#: builtin/blame.c:868
+#: builtin/blame.c:869
 msgid "show output score for blame entries"
 msgstr "mostra la puntuació de sortida de les entrades «blame»"
 
-#: builtin/blame.c:869
+#: builtin/blame.c:870
 msgid "show original filename (Default: auto)"
 msgstr "mostra el nom de fitxer original (per defecte: automàtic)"
 
-#: builtin/blame.c:870
+#: builtin/blame.c:871
 msgid "show original linenumber (Default: off)"
 msgstr "mostra el número de línia original (per defecte: desactivat)"
 
-#: builtin/blame.c:871
+#: builtin/blame.c:872
 msgid "show in a format designed for machine consumption"
 msgstr "presenta en un format dissenyat per a ser consumit per una màquina"
 
-#: builtin/blame.c:872
+#: builtin/blame.c:873
 msgid "show porcelain format with per-line commit information"
 msgstr "mostra en format de porcellana amb informació de comissió per línia"
 
-#: builtin/blame.c:873
+#: builtin/blame.c:874
 msgid "use the same output mode as git-annotate (Default: off)"
 msgstr ""
 "usa el mateix mode de sortida que git-annotate (per defecte: desactivat)"
 
-#: builtin/blame.c:874
+#: builtin/blame.c:875
 msgid "show raw timestamp (Default: off)"
 msgstr "mostra la marca de temps en cru (per defecte: desactivat)"
 
-#: builtin/blame.c:875
+#: builtin/blame.c:876
 msgid "show long commit SHA1 (Default: off)"
 msgstr "mostra l'SHA1 de comissió llarg (per defecte: desactivat)"
 
-#: builtin/blame.c:876
+#: builtin/blame.c:877
 msgid "suppress author name and timestamp (Default: off)"
 msgstr "omet el nom d'autor i la marca de temps (per defecte: desactivat)"
 
-#: builtin/blame.c:877
+#: builtin/blame.c:878
 msgid "show author email instead of name (Default: off)"
 msgstr ""
 "mostra el correu electrònic de l'autor en comptes del nom (per defecte: "
 "desactivat)"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:879
 msgid "ignore whitespace differences"
 msgstr "ignora les diferències d'espai en blanc"
 
-#: builtin/blame.c:879 builtin/log.c:1838
+#: builtin/blame.c:880 builtin/log.c:1857
 msgid "rev"
 msgstr "rev"
 
-#: builtin/blame.c:879
+#: builtin/blame.c:880
 msgid "ignore <rev> when blaming"
 msgstr "ignora <rev> en fer «blame»"
 
-#: builtin/blame.c:880
+#: builtin/blame.c:881
 msgid "ignore revisions from <file>"
 msgstr "ignora les revisions de <fitxer>"
 
-#: builtin/blame.c:881
+#: builtin/blame.c:882
 msgid "color redundant metadata from previous line differently"
 msgstr ""
 "acoloreix les metadades redundants de la línia anterior de manera diferent"
 
-#: builtin/blame.c:882
+#: builtin/blame.c:883
 msgid "color lines by age"
 msgstr "acoloreix les línies per antiguitat"
 
-#: builtin/blame.c:883
+#: builtin/blame.c:884
 msgid "spend extra cycles to find better match"
 msgstr "gasta cicles extres per a trobar una coincidència millor"
 
-#: builtin/blame.c:884
+#: builtin/blame.c:885
 msgid "use revisions from <file> instead of calling git-rev-list"
 msgstr "usa les revisions de <fitxer> en lloc d'invocar git-rev-list"
 
-#: builtin/blame.c:885
+#: builtin/blame.c:886
 msgid "use <file>'s contents as the final image"
 msgstr "usa els continguts de <fitxer> com a la imatge final"
 
-#: builtin/blame.c:886 builtin/blame.c:887
+#: builtin/blame.c:887 builtin/blame.c:888
 msgid "score"
 msgstr "puntuació"
 
-#: builtin/blame.c:886
+#: builtin/blame.c:887
 msgid "find line copies within and across files"
 msgstr "troba còpies de línia dins i a través dels fitxers"
 
-#: builtin/blame.c:887
+#: builtin/blame.c:888
 msgid "find line movements within and across files"
 msgstr "troba moviments de línia dins i a través dels fitxers"
 
-#: builtin/blame.c:888
+#: builtin/blame.c:889
 msgid "range"
 msgstr "rang"
 
-#: builtin/blame.c:889
+#: builtin/blame.c:890
 msgid "process only line range <start>,<end> or function :<funcname>"
 msgstr "processa només el rang <start>,<end> o la funció :<funcname>"
 
-#: builtin/blame.c:947
+#: builtin/blame.c:949
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr ""
 "no es pot usar --progress amb els formats --incremental o de porcellana"
@@ -11711,18 +11931,18 @@ msgstr ""
 #. among various forms of relative timestamps, but
 #. your language may need more or fewer display
 #. columns.
-#: builtin/blame.c:998
+#: builtin/blame.c:1000
 msgid "4 years, 11 months ago"
 msgstr "fa 4 anys i 11 mesos"
 
-#: builtin/blame.c:1114
+#: builtin/blame.c:1116
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] "el fitxer %s té només %lu línia"
 msgstr[1] "el fitxer %s té només %lu línies"
 
-#: builtin/blame.c:1159
+#: builtin/blame.c:1161
 msgid "Blaming lines"
 msgstr "S'està fent un «blame»"
 
@@ -11731,30 +11951,38 @@ msgid "git branch [<options>] [-r | -a] [--merged] [--no-merged]"
 msgstr "git branch [<opcions>] [-r | -a] [--merged | --no-merged]"
 
 #: builtin/branch.c:30
-msgid "git branch [<options>] [-l] [-f] <branch-name> [<start-point>]"
-msgstr "git branch [<opcions>] [-l] [-f] <nom-de-branca> [<punt-inicial>]"
+msgid ""
+"git branch [<options>] [-f] [--recurse-submodules] <branch-name> [<start-"
+"point>]"
+msgstr ""
+"git branch [<options>] [-f] [--recurse-submodules] <branch-name> [<start-"
+"point>]"
 
 #: builtin/branch.c:31
+msgid "git branch [<options>] [-l] [<pattern>...]"
+msgstr "git branch [<options>] [-l] [<pattern>...]"
+
+#: builtin/branch.c:32
 msgid "git branch [<options>] [-r] (-d | -D) <branch-name>..."
 msgstr "git branch [<opcions>] [-r] (-d | -D) <nom-de-branca>..."
 
-#: builtin/branch.c:32
+#: builtin/branch.c:33
 msgid "git branch [<options>] (-m | -M) [<old-branch>] <new-branch>"
 msgstr "git branch [<opcions>] (-m | -M) [<branca-antiga>] <branca-nova>"
 
-#: builtin/branch.c:33
+#: builtin/branch.c:34
 msgid "git branch [<options>] (-c | -C) [<old-branch>] <new-branch>"
 msgstr "git branch [<opcions>] (-c | -C) [<branca-antiga>] <branca-nova>"
 
-#: builtin/branch.c:34
+#: builtin/branch.c:35
 msgid "git branch [<options>] [-r | -a] [--points-at]"
 msgstr "git branch [<opcions>] [-r | -a] [--points-at]"
 
-#: builtin/branch.c:35
+#: builtin/branch.c:36
 msgid "git branch [<options>] [-r | -a] [--format]"
 msgstr "git branch [<opcions>] [-r | -a] [--format]"
 
-#: builtin/branch.c:153
+#: builtin/branch.c:165
 #, c-format
 msgid ""
 "deleting branch '%s' that has been merged to\n"
@@ -11764,7 +11992,7 @@ msgstr ""
 "         fusionat a «%s», però encara no\n"
 "         s'ha fusionat a HEAD."
 
-#: builtin/branch.c:157
+#: builtin/branch.c:169
 #, c-format
 msgid ""
 "not deleting branch '%s' that is not yet merged to\n"
@@ -11774,12 +12002,12 @@ msgstr ""
 "         s'ha fusionat a «%s», encara que està\n"
 "         fusionada a HEAD."
 
-#: builtin/branch.c:171
+#: builtin/branch.c:183
 #, c-format
 msgid "Couldn't look up commit object for '%s'"
 msgstr "No s'ha pogut trobar l'objecte de comissió de «%s»"
 
-#: builtin/branch.c:175
+#: builtin/branch.c:187
 #, c-format
 msgid ""
 "The branch '%s' is not fully merged.\n"
@@ -11788,115 +12016,115 @@ msgstr ""
 "La branca «%s» no està totalment fusionada.\n"
 "Si esteu segur que la voleu suprimir, executeu «git branch -D %s»."
 
-#: builtin/branch.c:188
+#: builtin/branch.c:200
 msgid "Update of config-file failed"
 msgstr "L'actualització del fitxer de configuració ha fallat"
 
-#: builtin/branch.c:223
+#: builtin/branch.c:235
 msgid "cannot use -a with -d"
 msgstr "no es pot usar -a amb -d"
 
-#: builtin/branch.c:230
+#: builtin/branch.c:242
 msgid "Couldn't look up commit object for HEAD"
 msgstr "No s'ha pogut trobar l'objecte de comissió de HEAD"
 
-#: builtin/branch.c:247
+#: builtin/branch.c:259
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr "No es pot suprimir la branca «%s» agafada a «%s»"
 
-#: builtin/branch.c:262
+#: builtin/branch.c:274
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "no s'ha trobat la branca amb seguiment remot «%s»."
 
-#: builtin/branch.c:263
+#: builtin/branch.c:275
 #, c-format
 msgid "branch '%s' not found."
 msgstr "no s'ha trobat la branca «%s»."
 
-#: builtin/branch.c:294
+#: builtin/branch.c:306
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "S'ha suprimit la branca amb seguiment remot %s (era %s).\n"
 
-#: builtin/branch.c:295
+#: builtin/branch.c:307
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "S'ha suprimit la branca %s (era %s).\n"
 
-#: builtin/branch.c:445 builtin/tag.c:63
+#: builtin/branch.c:457 builtin/tag.c:64
 msgid "unable to parse format string"
 msgstr "no s'ha pogut analitzar la cadena de format"
 
-#: builtin/branch.c:476
+#: builtin/branch.c:488
 msgid "could not resolve HEAD"
 msgstr "no s'ha pogut resoldre HEAD"
 
-#: builtin/branch.c:482
+#: builtin/branch.c:494
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "HEAD (%s) apunta fora de refs/heads/"
 
-#: builtin/branch.c:497
+#: builtin/branch.c:509
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "S'està fent «rebase» en la branca %s a %s"
 
-#: builtin/branch.c:501
+#: builtin/branch.c:513
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "La branca %s s'està bisecant a %s"
 
-#: builtin/branch.c:518
+#: builtin/branch.c:530
 msgid "cannot copy the current branch while not on any."
 msgstr "no es pot copiar branca actual mentre no s'és a cap."
 
-#: builtin/branch.c:520
+#: builtin/branch.c:532
 msgid "cannot rename the current branch while not on any."
 msgstr "no es pot canviar el nom de la branca actual mentre no s'és a cap."
 
-#: builtin/branch.c:531
+#: builtin/branch.c:543
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Nom de branca no vàlid: «%s»"
 
-#: builtin/branch.c:560
+#: builtin/branch.c:572
 msgid "Branch rename failed"
 msgstr "El canvi de nom de branca ha fallat"
 
-#: builtin/branch.c:562
+#: builtin/branch.c:574
 msgid "Branch copy failed"
 msgstr "La còpia de la branca ha fallat"
 
-#: builtin/branch.c:566
+#: builtin/branch.c:578
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "S'ha creat una còpia d'una branca mal anomenada «%s»"
 
-#: builtin/branch.c:569
+#: builtin/branch.c:581
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "S'ha canviat el nom de la branca mal anomenada «%s»"
 
-#: builtin/branch.c:575
+#: builtin/branch.c:587
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "S'ha canviat el nom de la branca a %s, però HEAD no està actualitzat!"
 
-#: builtin/branch.c:584
+#: builtin/branch.c:596
 msgid "Branch is renamed, but update of config-file failed"
 msgstr ""
 "La branca està canviada de nom, però l'actualització del fitxer de "
 "configuració ha fallat"
 
-#: builtin/branch.c:586
+#: builtin/branch.c:598
 msgid "Branch is copied, but update of config-file failed"
 msgstr ""
 "La branca està copiada, però l'actualització del fitxer de configuració ha "
 "fallat"
 
-#: builtin/branch.c:602
+#: builtin/branch.c:614
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -11907,176 +12135,193 @@ msgstr ""
 "  %s\n"
 "S'eliminaran les línies que comencin amb «%c».\n"
 
-#: builtin/branch.c:637
+#: builtin/branch.c:651
 msgid "Generic options"
 msgstr "Opcions genèriques"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:653
 msgid "show hash and subject, give twice for upstream branch"
 msgstr "mostra el hash i l'assumpte, doneu dues vegades per a la branca font"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:654
 msgid "suppress informational messages"
 msgstr "omet els missatges informatius"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:656 builtin/checkout.c:1571
+#: builtin/submodule--helper.c:3077
 msgid "set branch tracking configuration"
 msgstr "estableix la configuració del seguiment de la branca"
 
-#: builtin/branch.c:645
+#: builtin/branch.c:659
 msgid "do not use"
 msgstr "no usar"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:661
 msgid "upstream"
 msgstr "font"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:661
 msgid "change the upstream info"
 msgstr "canvia la informació de font"
 
-#: builtin/branch.c:648
+#: builtin/branch.c:662
 msgid "unset the upstream info"
 msgstr "treu la informació de la font"
 
-#: builtin/branch.c:649
+#: builtin/branch.c:663
 msgid "use colored output"
 msgstr "usa sortida amb colors"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:664
 msgid "act on remote-tracking branches"
 msgstr "actua en branques amb seguiment remot"
 
-#: builtin/branch.c:652 builtin/branch.c:654
+#: builtin/branch.c:666 builtin/branch.c:668
 msgid "print only branches that contain the commit"
 msgstr "imprimeix només les branques que continguin la comissió"
 
-#: builtin/branch.c:653 builtin/branch.c:655
+#: builtin/branch.c:667 builtin/branch.c:669
 msgid "print only branches that don't contain the commit"
 msgstr "imprimeix només les branques que no continguin la comissió"
 
-#: builtin/branch.c:658
+#: builtin/branch.c:672
 msgid "Specific git-branch actions:"
 msgstr "Accions de git-branch específiques:"
 
-#: builtin/branch.c:659
+#: builtin/branch.c:673
 msgid "list both remote-tracking and local branches"
 msgstr "llista les branques amb seguiment remot i les locals"
 
-#: builtin/branch.c:661
+#: builtin/branch.c:675
 msgid "delete fully merged branch"
 msgstr "suprimeix la branca si està completament fusionada"
 
-#: builtin/branch.c:662
+#: builtin/branch.c:676
 msgid "delete branch (even if not merged)"
 msgstr "suprimeix la branca (encara que no estigui fusionada)"
 
-#: builtin/branch.c:663
+#: builtin/branch.c:677
 msgid "move/rename a branch and its reflog"
 msgstr "mou/canvia de nom una branca i el seu registre de referència"
 
-#: builtin/branch.c:664
+#: builtin/branch.c:678
 msgid "move/rename a branch, even if target exists"
 msgstr "mou/canvia de nom una branca, encara que el destí existeixi"
 
-#: builtin/branch.c:665
+#: builtin/branch.c:679
 msgid "copy a branch and its reflog"
 msgstr "copia una branca i el seu registre de referència"
 
-#: builtin/branch.c:666
+#: builtin/branch.c:680
 msgid "copy a branch, even if target exists"
 msgstr "copia una branca, encara que el destí existeixi"
 
-#: builtin/branch.c:667
+#: builtin/branch.c:681
 msgid "list branch names"
 msgstr "llista els noms de branca"
 
-#: builtin/branch.c:668
+#: builtin/branch.c:682
 msgid "show current branch name"
 msgstr "mostra el nom de la branca actual"
 
-#: builtin/branch.c:669
+#: builtin/branch.c:683 builtin/submodule--helper.c:3075
 msgid "create the branch's reflog"
 msgstr "crea el registre de referència de la branca"
 
-#: builtin/branch.c:671
+#: builtin/branch.c:685
 msgid "edit the description for the branch"
 msgstr "edita la descripció de la branca"
 
-#: builtin/branch.c:672
+#: builtin/branch.c:686
 msgid "force creation, move/rename, deletion"
 msgstr "força creació, moviment/canvi de nom, supressió"
 
-#: builtin/branch.c:673
+#: builtin/branch.c:687
 msgid "print only branches that are merged"
 msgstr "imprimeix només les branques que s'han fusionat"
 
-#: builtin/branch.c:674
+#: builtin/branch.c:688
 msgid "print only branches that are not merged"
 msgstr "imprimeix només les branques que no s'han fusionat"
 
-#: builtin/branch.c:675
+#: builtin/branch.c:689
 msgid "list branches in columns"
 msgstr "llista les branques en columnes"
 
-#: builtin/branch.c:677 builtin/for-each-ref.c:45 builtin/notes.c:413
+#: builtin/branch.c:691 builtin/for-each-ref.c:45 builtin/notes.c:413
 #: builtin/notes.c:416 builtin/notes.c:579 builtin/notes.c:582
-#: builtin/tag.c:475
+#: builtin/tag.c:476
 msgid "object"
 msgstr "objecte"
 
-#: builtin/branch.c:678
+#: builtin/branch.c:692
 msgid "print only branches of the object"
 msgstr "imprimeix només les branques de l'objecte"
 
-#: builtin/branch.c:679 builtin/for-each-ref.c:51 builtin/tag.c:482
+#: builtin/branch.c:693 builtin/for-each-ref.c:51 builtin/tag.c:483
 msgid "sorting and filtering are case insensitive"
 msgstr "l'ordenació i el filtratge distingeixen entre majúscules i minúscules"
 
-#: builtin/branch.c:680 builtin/for-each-ref.c:41 builtin/tag.c:480
-#: builtin/verify-tag.c:38
+#: builtin/branch.c:694 builtin/ls-files.c:667
+msgid "recurse through submodules"
+msgstr "inclou recursivament als submòduls"
+
+#: builtin/branch.c:695 builtin/for-each-ref.c:41 builtin/ls-tree.c:358
+#: builtin/tag.c:481 builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "format a usar en la sortida"
 
-#: builtin/branch.c:703 builtin/clone.c:678
+#: builtin/branch.c:718 builtin/clone.c:684
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD no trobat sota refs/heads!"
 
-#: builtin/branch.c:742 builtin/branch.c:798 builtin/branch.c:807
+#: builtin/branch.c:739
+msgid ""
+"branch with --recurse-submodules can only be used if "
+"submodule.propagateBranches is enabled"
+msgstr ""
+"la branca amb --recurse-submodules només es pot utilitzar si "
+"submodule.propagateBranches està habilitat"
+
+#: builtin/branch.c:741
+msgid "--recurse-submodules can only be used to create branches"
+msgstr "--recurse-submodules només es pot utilitzar per a crear branques"
+
+#: builtin/branch.c:770 builtin/branch.c:826 builtin/branch.c:835
 msgid "branch name required"
 msgstr "cal el nom de branca"
 
-#: builtin/branch.c:774
+#: builtin/branch.c:802
 msgid "Cannot give description to detached HEAD"
 msgstr "No es pot donar descripció a un HEAD separat"
 
-#: builtin/branch.c:779
+#: builtin/branch.c:807
 msgid "cannot edit description of more than one branch"
 msgstr "no es pot editar la descripció de més d'una branca"
 
-#: builtin/branch.c:786
+#: builtin/branch.c:814
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "Encara no hi ha cap comissió en la branca «%s»."
 
-#: builtin/branch.c:789
+#: builtin/branch.c:817
 #, c-format
 msgid "No branch named '%s'."
 msgstr "No hi ha cap branca amb nom «%s»."
 
-#: builtin/branch.c:804
+#: builtin/branch.c:832
 msgid "too many branches for a copy operation"
 msgstr "hi ha massa branques per a una operació de còpia"
 
-#: builtin/branch.c:813
+#: builtin/branch.c:841
 msgid "too many arguments for a rename operation"
 msgstr "hi ha massa arguments per a una operació de canvi de nom"
 
-#: builtin/branch.c:818
+#: builtin/branch.c:846
 msgid "too many arguments to set new upstream"
 msgstr "hi ha massa arguments per a establir una nova font"
 
-#: builtin/branch.c:822
+#: builtin/branch.c:850
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
@@ -12084,31 +12329,31 @@ msgstr ""
 "no s'ha pogut establir la font de HEAD com a %s quan no assenyala cap "
 "branca."
 
-#: builtin/branch.c:825 builtin/branch.c:848
+#: builtin/branch.c:853 builtin/branch.c:873
 #, c-format
 msgid "no such branch '%s'"
 msgstr "no existeix la branca «%s»"
 
-#: builtin/branch.c:829
+#: builtin/branch.c:857
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "la branca «%s» no existeix"
 
-#: builtin/branch.c:842
+#: builtin/branch.c:867
 msgid "too many arguments to unset upstream"
 msgstr "hi ha massa arguments per a desassignar la font"
 
-#: builtin/branch.c:846
+#: builtin/branch.c:871
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr ""
 "no s'ha pogut desassignar la font de HEAD perquè no assenyala cap branca."
 
-#: builtin/branch.c:852
+#: builtin/branch.c:877
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "La branca «%s» no té informació de font"
 
-#: builtin/branch.c:862
+#: builtin/branch.c:890
 msgid ""
 "The -a, and -r, options to 'git branch' do not take a branch name.\n"
 "Did you mean to use: -a|-r --list <pattern>?"
@@ -12116,7 +12361,7 @@ msgstr ""
 "Les opcions -a i -r a «git branch» no prenen un nom de branca.\n"
 "Volíeu usar -a|-r --list <pattern>?"
 
-#: builtin/branch.c:866
+#: builtin/branch.c:894
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -12231,19 +12476,19 @@ msgstr "git bundle list-heads <fitxer> [<refname>...]"
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr "git bundle unbundle <fitxer> [<refname>...]"
 
-#: builtin/bundle.c:65 builtin/pack-objects.c:3876
+#: builtin/bundle.c:65 builtin/pack-objects.c:3899
 msgid "do not show progress meter"
 msgstr "no mostris l'indicador de progrés"
 
-#: builtin/bundle.c:67 builtin/bundle.c:167 builtin/pack-objects.c:3878
+#: builtin/bundle.c:67 builtin/bundle.c:168 builtin/pack-objects.c:3901
 msgid "show progress meter"
 msgstr "mostra l'indicador de progrés"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3880
+#: builtin/bundle.c:69 builtin/pack-objects.c:3903
 msgid "show progress meter during object writing phase"
 msgstr "mostra l'indicador de progrés durant la fase d'escriptura d'objectes"
 
-#: builtin/bundle.c:72 builtin/pack-objects.c:3883
+#: builtin/bundle.c:72 builtin/pack-objects.c:3906
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "similar a --all-progress quan l'indicador de progrés es mostra"
 
@@ -12255,116 +12500,243 @@ msgstr "especifica la versió del format del farcell"
 msgid "Need a repository to create a bundle."
 msgstr "Cal un repositori per a crear un farcell."
 
-#: builtin/bundle.c:107
+#: builtin/bundle.c:108
 msgid "do not show bundle details"
 msgstr "no mostris els detalls del farcell"
 
-#: builtin/bundle.c:126
+#: builtin/bundle.c:127
 #, c-format
 msgid "%s is okay\n"
 msgstr "%s està bé\n"
 
-#: builtin/bundle.c:182
+#: builtin/bundle.c:183
 msgid "Need a repository to unbundle."
 msgstr "Cal un repositori per a desfer un farcell."
 
-#: builtin/bundle.c:185
+#: builtin/bundle.c:186
 msgid "Unbundling objects"
 msgstr "S'estan desagrupant objectes"
 
-#: builtin/bundle.c:219 builtin/remote.c:1733
+#: builtin/bundle.c:220 builtin/remote.c:1758
 #, c-format
 msgid "Unknown subcommand: %s"
 msgstr "Subordre desconeguda: %s"
 
-#: builtin/cat-file.c:622
-msgid ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | "
-"-p | <type> | --textconv | --filters) [--path=<path>] <object>"
-msgstr ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | "
-"-p | <tipus> | --textconv | --filters [--path=<camí>]) <objecte>"
+#: builtin/cat-file.c:568
+msgid "flush is only for --buffer mode"
+msgstr "flush només és per al mode --buffer"
+
+#: builtin/cat-file.c:612
+msgid "empty command in input"
+msgstr "ordre buida en l'entrada"
+
+#: builtin/cat-file.c:614
+#, c-format, fuzzy
+msgid "whitespace before command: '%s'"
+msgstr "espai en blanc abans de l'ordre: '%s'"
 
 #: builtin/cat-file.c:623
-msgid ""
-"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
-"symlinks] [--textconv | --filters]"
-msgstr ""
-"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
-"symlinks] [--textconv | --filters]"
+#, c-format
+msgid "%s requires arguments"
+msgstr "%s requereix arguments"
 
-#: builtin/cat-file.c:644
-msgid "only one batch option may be specified"
-msgstr "només es pot especificar una opció per lots"
+#: builtin/cat-file.c:628
+#, c-format
+msgid "%s takes no arguments"
+msgstr "%s no accepta cap valor"
 
-#: builtin/cat-file.c:662
-msgid "<type> can be one of: blob, tree, commit, tag"
-msgstr "<tipus> pot ser un de: blob, tree, commit, tag"
+#: builtin/cat-file.c:636
+#, c-format
+msgid "unknown command: '%s'"
+msgstr "ordre desconeguda: «%s»"
 
-#: builtin/cat-file.c:663
-msgid "show object type"
-msgstr "mostra el tipus de l'objecte"
+#: builtin/cat-file.c:795
+msgid "only one batch option may be specified"
+msgstr "només es pot especificar una opció per lots"
 
-#: builtin/cat-file.c:664
-msgid "show object size"
-msgstr "mostra la mida de l'objecte"
+#: builtin/cat-file.c:824
+msgid "git cat-file <type> <object>"
+msgstr "git cat-file <type> <object>"
 
-#: builtin/cat-file.c:666
-msgid "exit with zero when there's no error"
-msgstr "surt amb zero quan no hi ha error"
+#: builtin/cat-file.c:825
+msgid "git cat-file (-e | -p) <object>"
+msgstr "git cat-file (-e | -p) <object>"
 
-#: builtin/cat-file.c:667
-msgid "pretty-print object's content"
-msgstr "imprimeix bellament el contingut de l'objecte"
+#: builtin/cat-file.c:826
+msgid "git cat-file (-t | -s) [--allow-unknown-type] <object>"
+msgstr "git cat-file (-t | -s) [--allow-unknown-type] <object>"
 
-#: builtin/cat-file.c:669
-msgid "for blob objects, run textconv on object's content"
+#: builtin/cat-file.c:827
+msgid ""
+"git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]\n"
+"             [--buffer] [--follow-symlinks] [--unordered]\n"
+"             [--textconv | --filters]"
 msgstr ""
-"en els objectes de blob, executa textconv en el contingut de l'objecte"
+"git cat-file (--batch | --batch-check | --batch-command) [--batch-all-objects]\n"
+"             [--buffer] [--follow-symlinks] [--unordered]\n"
+"             [--textconv | --filters]"
 
-#: builtin/cat-file.c:671
-msgid "for blob objects, run filters on object's content"
+#: builtin/cat-file.c:830
+msgid ""
+"git cat-file (--textconv | --filters)\n"
+"             [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]"
 msgstr ""
-"en els objectes de blob, executa els filtres en el contingut de l'objecte"
+"git cat-file (--textconv | --filters)\n"
+"             [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]"
 
-#: builtin/cat-file.c:672
-msgid "blob"
-msgstr "blob"
+#: builtin/cat-file.c:836
+#, fuzzy
+msgid "Check object existence or emit object contents"
+msgstr "Comprova l'existència de l'objecte o emet el contingut de l'objecte"
+
+#: builtin/cat-file.c:838
+#, fuzzy
+msgid "check if <object> exists"
+msgstr "comprova si <object> existeix"
+
+#: builtin/cat-file.c:839
+#, fuzzy
+msgid "pretty-print <object> content"
+msgstr "empremta de <object> contingut"
 
-#: builtin/cat-file.c:673
-msgid "use a specific path for --textconv/--filters"
-msgstr "usa un camí específic per a --textconv/--filters"
+#: builtin/cat-file.c:841
+#, fuzzy
+msgid "Emit [broken] object attributes"
+msgstr "Emet els atributs de l'objecte  objectbroken]"
+
+#: builtin/cat-file.c:842
+#, fuzzy
+msgid "show object type (one of 'blob', 'tree', 'commit', 'tag', ...)"
+msgstr ""
+"mostra el tipus d'objecte (un de 'blob', 'tree', 'commit', 'tag', ...)"
+
+#: builtin/cat-file.c:843
+msgid "show object size"
+msgstr "mostra la mida de l'objecte"
 
-#: builtin/cat-file.c:675
+#: builtin/cat-file.c:845
 msgid "allow -s and -t to work with broken/corrupt objects"
 msgstr "permet que -s i -t funcionin amb objectes trencats/malmesos"
 
-#: builtin/cat-file.c:676
+#: builtin/cat-file.c:847
+#, fuzzy
+msgid "Batch objects requested on stdin (or --batch-all-objects)"
+msgstr "Objectes lots sol·licitats a stdin (o --batch-all-objects)"
+
+#: builtin/cat-file.c:849
+#, fuzzy
+msgid "show full <object> or <rev> contents"
+msgstr "mostra el contingut complet de <object> o <rev>"
+
+#: builtin/cat-file.c:853
+#, fuzzy
+msgid "like --batch, but don't emit <contents>"
+msgstr "com --batch, però no emeti <contents>"
+
+#: builtin/cat-file.c:857
+#, fuzzy
+msgid "read commands from stdin"
+msgstr "llegeix les ordres de stdin"
+
+#: builtin/cat-file.c:861
+#, fuzzy
+msgid "with --batch[-check]: ignores stdin, batches all known objects"
+msgstr "amb --batch--check:: ignora stdin, bateja tots els objectes coneguts"
+
+#: builtin/cat-file.c:863
+#, fuzzy
+msgid "Change or optimize batch output"
+msgstr "Canvia o optimitza la sortida per lots"
+
+#: builtin/cat-file.c:864
 msgid "buffer --batch output"
 msgstr "posa la sortida de --batch en memòria intermèdia"
 
-#: builtin/cat-file.c:678
-msgid "show info and content of objects fed from the standard input"
-msgstr ""
-"mostra la informació i contingut dels objectes rebuts de l'entrada estàndard"
+#: builtin/cat-file.c:866
+#, fuzzy
+msgid "follow in-tree symlinks"
+msgstr "segueix els enllaços simbòlics en l'arbre"
 
-#: builtin/cat-file.c:682
-msgid "show info about objects fed from the standard input"
-msgstr "mostra informació sobre els objectes rebuts de l'entrada estàndard"
+#: builtin/cat-file.c:868
+#, fuzzy
+msgid "do not order objects before emitting them"
+msgstr "no ordena objectes abans d'emetre'ls"
 
-#: builtin/cat-file.c:686
-msgid "follow in-tree symlinks (used with --batch or --batch-check)"
+#: builtin/cat-file.c:870
+#, fuzzy
+msgid ""
+"Emit object (blob or tree) with conversion or filter (stand-alone, or with "
+"batch)"
 msgstr ""
-"segueix els enllaços simbòlics en l'arbre (s'usa amb --batch o --batch-"
-"check)"
+"Emet l'objecte (blob o arbre) amb conversió o filtre (stand-alone, o amb "
+"lot)"
+
+#: builtin/cat-file.c:872
+#, fuzzy
+msgid "run textconv on object's content"
+msgstr "executar textconv al contingut de l'objecte"
+
+#: builtin/cat-file.c:874
+#, fuzzy
+msgid "run filters on object's content"
+msgstr "executa els filtres al contingut de l'objecte"
+
+#: builtin/cat-file.c:875
+msgid "blob|tree"
+msgstr "blob|tree"
+
+#: builtin/cat-file.c:876
+#, fuzzy
+msgid "use a <path> for (--textconv | --filters); Not with 'batch'"
+msgstr "useu un <path> per a (--textconv | --filters); No amb 'batch'"
+
+#: builtin/cat-file.c:894
+#, c-format
+msgid "'%s=<%s>' needs '%s' or '%s'"
+msgstr "«%s=<%s>» necessita «%s» o «%s»"
+
+#: builtin/cat-file.c:896
+msgid "path|tree-ish"
+msgstr "path|tree-ish"
+
+#: builtin/cat-file.c:903 builtin/cat-file.c:906 builtin/cat-file.c:909
+#, c-format
+msgid "'%s' requires a batch mode"
+msgstr "%s requereix un mode batch"
+
+#: builtin/cat-file.c:921
+#, c-format
+msgid "'-%c' is incompatible with batch mode"
+msgstr "«-%c» és incompatible amb el model batch"
+
+#: builtin/cat-file.c:924
+msgid "batch modes take no arguments"
+msgstr "el mode batch no accepta cap argument"
+
+#: builtin/cat-file.c:932 builtin/cat-file.c:935
+#, c-format
+msgid "<rev> required with '%s'"
+msgstr "<rev> requerida amb «%s»"
+
+#: builtin/cat-file.c:938
+#, c-format
+msgid "<object> required with '-%c'"
+msgstr "<object> requerit amb «-%c»"
 
-#: builtin/cat-file.c:688
-msgid "show all objects with --batch or --batch-check"
-msgstr "mostra tots els objectes amb --batch o --batch-check"
+#: builtin/cat-file.c:943 builtin/notes.c:374 builtin/notes.c:429
+#: builtin/notes.c:507 builtin/notes.c:519 builtin/notes.c:596
+#: builtin/notes.c:663 builtin/notes.c:813 builtin/notes.c:965
+#: builtin/notes.c:987 builtin/prune-packed.c:25 builtin/receive-pack.c:2489
+#: builtin/tag.c:592
+msgid "too many arguments"
+msgstr "hi ha massa arguments"
 
-#: builtin/cat-file.c:690
-msgid "do not order --batch-all-objects output"
-msgstr "no ordenar la sortida de --batch-all-objects"
+#: builtin/cat-file.c:947
+#, c-format, fuzzy
+msgid "only two arguments allowed in <type> <object> mode, not %d"
+msgstr ""
+"només es permeten dos arguments en el mode <type> <object>, no en un "
+"percentatge"
 
 #: builtin/check-attr.c:13
 msgid "git check-attr [-a | --all | <attr>...] [--] <pathname>..."
@@ -12382,7 +12754,7 @@ msgstr "informa de tots els atributs establerts en el fitxer"
 msgid "use .gitattributes only from the index"
 msgstr "usa .gitattributes només des de l'índex"
 
-#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:100
+#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:101
 msgid "read file names from stdin"
 msgstr "llegeix els noms de fitxer de stdin"
 
@@ -12390,8 +12762,8 @@ msgstr "llegeix els noms de fitxer de stdin"
 msgid "terminate input and output records by a NUL character"
 msgstr "acaba els registres d'entrada i de sortida amb un caràcter NUL"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1532 builtin/gc.c:550
-#: builtin/worktree.c:493
+#: builtin/check-ignore.c:21 builtin/checkout.c:1550 builtin/gc.c:550
+#: builtin/worktree.c:565
 msgid "suppress progress reporting"
 msgstr "omet els informes de progrés"
 
@@ -12448,163 +12820,168 @@ msgstr "no hi ha contactes especificats"
 msgid "git checkout--worker [<options>]"
 msgstr "git checkout--worker [<opcions>]"
 
-#: builtin/checkout--worker.c:118 builtin/checkout-index.c:201
-#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1864
-#: builtin/submodule--helper.c:1867 builtin/submodule--helper.c:1875
-#: builtin/submodule--helper.c:2511 builtin/submodule--helper.c:2577
-#: builtin/worktree.c:491 builtin/worktree.c:728
+#: builtin/checkout--worker.c:118 builtin/checkout-index.c:235
+#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1878
+#: builtin/submodule--helper.c:1881 builtin/submodule--helper.c:1889
+#: builtin/submodule--helper.c:2716 builtin/worktree.c:563
+#: builtin/worktree.c:808
 msgid "string"
 msgstr "cadena"
 
-#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:236
 msgid "when creating files, prepend <string>"
 msgstr "en crear fitxers, anteposa <cadena>"
 
-#: builtin/checkout-index.c:152
+#: builtin/checkout-index.c:184
 msgid "git checkout-index [<options>] [--] [<file>...]"
 msgstr "git checkout-index [<opcions>] [--] [<fitxer>...]"
 
-#: builtin/checkout-index.c:169
+#: builtin/checkout-index.c:201
 msgid "stage should be between 1 and 3 or all"
 msgstr "«stage» ha de ser entre 1 i 3 o all"
 
-#: builtin/checkout-index.c:187
+#: builtin/checkout-index.c:219
 msgid "check out all files in the index"
 msgstr "agafa tots els fitxers en l'índex"
 
-#: builtin/checkout-index.c:188
+#: builtin/checkout-index.c:221
+#, fuzzy
+msgid "do not skip files with skip-worktree set"
+msgstr "no ometis els fitxers amb el conjunt d'arbres de salt"
+
+#: builtin/checkout-index.c:222
 msgid "force overwrite of existing files"
 msgstr "força la sobreescriptura de fitxers existents"
 
-#: builtin/checkout-index.c:190
+#: builtin/checkout-index.c:224
 msgid "no warning for existing files and files not in index"
 msgstr ""
 "cap advertència per a fitxers existents i fitxers que no siguin a l'índex"
 
-#: builtin/checkout-index.c:192
+#: builtin/checkout-index.c:226
 msgid "don't checkout new files"
 msgstr "no agafis fitxers nous"
 
-#: builtin/checkout-index.c:194
+#: builtin/checkout-index.c:228
 msgid "update stat information in the index file"
 msgstr "actualitza la informació d'estadístiques en el fitxer d'índex"
 
-#: builtin/checkout-index.c:198
+#: builtin/checkout-index.c:232
 msgid "read list of paths from the standard input"
 msgstr "llegeix la llista de camins des de l'entrada estàndard"
 
-#: builtin/checkout-index.c:200
+#: builtin/checkout-index.c:234
 msgid "write the content to temporary files"
 msgstr "escriu el contingut a fitxers temporals"
 
-#: builtin/checkout-index.c:204
+#: builtin/checkout-index.c:238
 msgid "copy out the files from named stage"
 msgstr "copia els fitxers des de «stage» amb nom"
 
-#: builtin/checkout.c:33
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [<opcions>] <branca>"
 
-#: builtin/checkout.c:34
+#: builtin/checkout.c:35
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [<opcions>] [<branca>] -- <fitxer>..."
 
-#: builtin/checkout.c:39
+#: builtin/checkout.c:40
 msgid "git switch [<options>] [<branch>]"
 msgstr "git switch [<options>] [<branch>]"
 
-#: builtin/checkout.c:44
+#: builtin/checkout.c:45
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<opcions>] [--source=<branca>] <fitxer>..."
 
-#: builtin/checkout.c:198 builtin/checkout.c:237
+#: builtin/checkout.c:199 builtin/checkout.c:238
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "el camí «%s» no té la nostra versió"
 
-#: builtin/checkout.c:200 builtin/checkout.c:239
+#: builtin/checkout.c:201 builtin/checkout.c:240
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "el camí «%s» no té la seva versió"
 
-#: builtin/checkout.c:216
+#: builtin/checkout.c:217
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "el camí «%s» no té totes les versions necessàries"
 
-#: builtin/checkout.c:269
+#: builtin/checkout.c:271
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "el camí «%s» no té les versions necessàries"
 
-#: builtin/checkout.c:286
+#: builtin/checkout.c:291
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "camí «%s»: no es pot fusionar"
 
-#: builtin/checkout.c:302
+#: builtin/checkout.c:307
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "No s'ha pogut afegir el resultat de fusió per a «%s»"
 
-#: builtin/checkout.c:419
+#: builtin/checkout.c:424
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "Recreat un conflicte de fusió"
 msgstr[1] "Recreats %d conflictes de fusió"
 
-#: builtin/checkout.c:424
+#: builtin/checkout.c:429
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "S'ha actualitzat %d camí des de %s"
 msgstr[1] "S'han actualitzat %d camins des de %s"
 
-#: builtin/checkout.c:431
+#: builtin/checkout.c:436
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "S'ha actualitzat un camí des de l'índex"
 msgstr[1] "S'ha actualitzat %d camins des de l'índex"
 
-#: builtin/checkout.c:454 builtin/checkout.c:457 builtin/checkout.c:460
-#: builtin/checkout.c:464
+#: builtin/checkout.c:459 builtin/checkout.c:462 builtin/checkout.c:465
+#: builtin/checkout.c:469
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "«%s» no es pot usar amb actualització de camins"
 
-#: builtin/checkout.c:474
+#: builtin/checkout.c:479
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr ""
 "No es poden actualitzar els camins i canviar a la branca «%s» a la vegada."
 
-#: builtin/checkout.c:478
+#: builtin/checkout.c:483
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "no s'ha especificat ni «%s» ni «%s»"
 
-#: builtin/checkout.c:482
+#: builtin/checkout.c:487
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "«%s» s'ha d'utilitzar quan no s'especifica «%s»"
 
-#: builtin/checkout.c:487 builtin/checkout.c:492
+#: builtin/checkout.c:492 builtin/checkout.c:497
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "«%s» o «%s» no poden utilitzar-se amb %s"
 
-#: builtin/checkout.c:566 builtin/checkout.c:573
+#: builtin/checkout.c:571 builtin/checkout.c:578
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "el camí «%s» està sense fusionar"
 
-#: builtin/checkout.c:747
+#: builtin/checkout.c:753
 msgid "you need to resolve your current index first"
 msgstr "heu de primer resoldre el vostre índex actual"
 
-#: builtin/checkout.c:797
+#: builtin/checkout.c:809
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -12613,50 +12990,50 @@ msgstr ""
 "no es pot continuar amb els canvis «staged» als fitxers següents:\n"
 "%s"
 
-#: builtin/checkout.c:890
+#: builtin/checkout.c:902
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "No es pot fer reflog per a «%s»: %s\n"
 
-#: builtin/checkout.c:934
+#: builtin/checkout.c:947
 msgid "HEAD is now at"
 msgstr "HEAD ara és a"
 
-#: builtin/checkout.c:938 builtin/clone.c:609 t/helper/test-fast-rebase.c:203
+#: builtin/checkout.c:951 builtin/clone.c:615 t/helper/test-fast-rebase.c:203
 msgid "unable to update HEAD"
 msgstr "no s'ha pogut actualitzar HEAD"
 
-#: builtin/checkout.c:942
+#: builtin/checkout.c:955
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "Restableix la branca «%s»\n"
 
-#: builtin/checkout.c:945
+#: builtin/checkout.c:958
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Ja esteu en «%s»\n"
 
-#: builtin/checkout.c:949
+#: builtin/checkout.c:962
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "S'ha canviat i restablert a la branca «%s»\n"
 
-#: builtin/checkout.c:951 builtin/checkout.c:1388
+#: builtin/checkout.c:964 builtin/checkout.c:1398
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "S'ha canviat a la branca nova «%s»\n"
 
-#: builtin/checkout.c:953
+#: builtin/checkout.c:966
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "S'ha canviat a la branca «%s»\n"
 
-#: builtin/checkout.c:1004
+#: builtin/checkout.c:1017
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " ... i %d més.\n"
 
-#: builtin/checkout.c:1010
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -12679,7 +13056,7 @@ msgstr[1] ""
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1029
+#: builtin/checkout.c:1042
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -12706,19 +13083,19 @@ msgstr[1] ""
 " git branch <nom-de-branca-nova> %s\n"
 "\n"
 
-#: builtin/checkout.c:1064
+#: builtin/checkout.c:1077
 msgid "internal error in revision walk"
 msgstr "error intern en el passeig per revisions"
 
-#: builtin/checkout.c:1068
+#: builtin/checkout.c:1081
 msgid "Previous HEAD position was"
 msgstr "La posició de HEAD anterior era"
 
-#: builtin/checkout.c:1114 builtin/checkout.c:1383
+#: builtin/checkout.c:1124 builtin/checkout.c:1393
 msgid "You are on a branch yet to be born"
 msgstr "Sou en una branca que encara ha de néixer"
 
-#: builtin/checkout.c:1196
+#: builtin/checkout.c:1206
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -12727,7 +13104,7 @@ msgstr ""
 "«%s» podria ser tant un fitxer local com una branca de seguiment.\n"
 "Useu -- (i opcionalment --no-guess) per a desambiguar-ho"
 
-#: builtin/checkout.c:1203
+#: builtin/checkout.c:1213
 msgid ""
 "If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
 "you can do so by fully qualifying the name with the --track option:\n"
@@ -12747,51 +13124,59 @@ msgstr ""
 "remota, p. ex. «origin» al remot, considereu configurar l'opció\n"
 "checkout.defaultRemote=origin en la vostra configuració."
 
-#: builtin/checkout.c:1213
+#: builtin/checkout.c:1223
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "«%s» coincideixen múltiples (%d) branques de seguiment remotes"
 
-#: builtin/checkout.c:1279
+#: builtin/checkout.c:1289
 msgid "only one reference expected"
 msgstr "només s'esperava una referència"
 
-#: builtin/checkout.c:1296
+#: builtin/checkout.c:1306
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "s'esperava només una referència, s'han donat %d."
 
-#: builtin/checkout.c:1342 builtin/worktree.c:269 builtin/worktree.c:436
+#: builtin/checkout.c:1352 builtin/worktree.c:338 builtin/worktree.c:508
 #, c-format
 msgid "invalid reference: %s"
 msgstr "referència no vàlida: %s"
 
-#: builtin/checkout.c:1355 builtin/checkout.c:1725
+#: builtin/checkout.c:1365 builtin/checkout.c:1744
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "la referència no és un arbre: %s"
 
-#: builtin/checkout.c:1402
+#: builtin/checkout.c:1413
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "s'espera una branca, s'ha obtingut l'etiqueta «%s»"
 
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1415
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "s'espera una branca, s'ha obtingut la branca remota «%s»"
 
-#: builtin/checkout.c:1405 builtin/checkout.c:1413
+#: builtin/checkout.c:1417 builtin/checkout.c:1426
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "s'espera una branca, s'ha obtingut «%s»"
 
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1420
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "s'espera una branca, s'ha obtingut la comissió «%s»"
 
-#: builtin/checkout.c:1424
+#: builtin/checkout.c:1429
+msgid ""
+"If you want to detach HEAD at the commit, try again with the --detach "
+"option."
+msgstr ""
+"Si voleu desacoblar HEAD a la comissió, torneu-ho a provar amb l'opció "
+"--detach."
+
+#: builtin/checkout.c:1442
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
@@ -12799,7 +13184,7 @@ msgstr ""
 "no es pot canviar de branca mentre es fusiona\n"
 "Considereu usar «git merge --quit» o «git worktree add»."
 
-#: builtin/checkout.c:1428
+#: builtin/checkout.c:1446
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
@@ -12807,7 +13192,7 @@ msgstr ""
 "no es pot canviar de branca en mig d'una sessió «am»\n"
 "Considereu usar «git am --quit» o «git worktree add»."
 
-#: builtin/checkout.c:1432
+#: builtin/checkout.c:1450
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -12815,7 +13200,7 @@ msgstr ""
 "no es pot canviar de branca mentre es fa «rebase»\n"
 "Considereu usar «git rebase --quit» o «git worktree add»."
 
-#: builtin/checkout.c:1436
+#: builtin/checkout.c:1454
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -12823,7 +13208,7 @@ msgstr ""
 "no es pot canviar de branca mentre es fa «cherry-pick»\n"
 "Considereu usar «git cherry-pick --quit» o «git worktree add»."
 
-#: builtin/checkout.c:1440
+#: builtin/checkout.c:1458
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -12831,127 +13216,123 @@ msgstr ""
 "no es pot canviar de branca mentre s'està revertint\n"
 "Considereu «git revert --quit» o «git worktree add»."
 
-#: builtin/checkout.c:1444
+#: builtin/checkout.c:1462
 msgid "you are switching branch while bisecting"
 msgstr "s'està canviant la branca mentre es fa una bisecció"
 
-#: builtin/checkout.c:1451
+#: builtin/checkout.c:1469
 msgid "paths cannot be used with switching branches"
 msgstr "els camins no es poden usar amb canvi de branca"
 
-#: builtin/checkout.c:1454 builtin/checkout.c:1458 builtin/checkout.c:1462
+#: builtin/checkout.c:1472 builtin/checkout.c:1476 builtin/checkout.c:1480
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "«%s» no es pot usar amb canvi de branca"
 
-#: builtin/checkout.c:1466 builtin/checkout.c:1469 builtin/checkout.c:1472
-#: builtin/checkout.c:1477 builtin/checkout.c:1482
+#: builtin/checkout.c:1484 builtin/checkout.c:1487 builtin/checkout.c:1490
+#: builtin/checkout.c:1495 builtin/checkout.c:1500
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "«%s» no es pot usar amb «%s»"
 
-#: builtin/checkout.c:1479
+#: builtin/checkout.c:1497
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "«%s» no pot prendre <start-point>"
 
-#: builtin/checkout.c:1487
+#: builtin/checkout.c:1505
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "No es pot canviar la branca a la no comissió «%s»"
 
-#: builtin/checkout.c:1494
+#: builtin/checkout.c:1512
 msgid "missing branch or commit argument"
 msgstr "manca branca o argument de comissió"
 
-#: builtin/checkout.c:1537
+#: builtin/checkout.c:1555
 msgid "perform a 3-way merge with the new branch"
 msgstr "realitza una fusió de 3 vies amb la branca nova"
 
-#: builtin/checkout.c:1538 builtin/log.c:1825 parse-options.h:323
+#: builtin/checkout.c:1556 builtin/log.c:1844 parse-options.h:354
 msgid "style"
 msgstr "estil"
 
-#: builtin/checkout.c:1539
+#: builtin/checkout.c:1557
 msgid "conflict style (merge, diff3, or zdiff3)"
 msgstr "estil de conflicte (merge, diff3, o zdiff3)"
 
-#: builtin/checkout.c:1551 builtin/worktree.c:488
+#: builtin/checkout.c:1569 builtin/worktree.c:560
 msgid "detach HEAD at named commit"
 msgstr "separa HEAD a la comissió anomenada"
 
-#: builtin/checkout.c:1553
-msgid "set up tracking mode (see git-pull(1))"
-msgstr "configura el mode de seguiment (vegeu git-pull(1))"
-
-#: builtin/checkout.c:1556
+#: builtin/checkout.c:1574
 msgid "force checkout (throw away local modifications)"
 msgstr "agafa a la força (descarta qualsevol modificació local)"
 
-#: builtin/checkout.c:1558
+#: builtin/checkout.c:1576
 msgid "new-branch"
 msgstr "branca-nova"
 
-#: builtin/checkout.c:1558
+#: builtin/checkout.c:1576
 msgid "new unparented branch"
 msgstr "branca òrfena nova"
 
-#: builtin/checkout.c:1560 builtin/merge.c:305
+#: builtin/checkout.c:1578 builtin/merge.c:305
 msgid "update ignored files (default)"
 msgstr "actualitza els fitxers ignorats (per defecte)"
 
-#: builtin/checkout.c:1563
+#: builtin/checkout.c:1581
 msgid "do not check if another worktree is holding the given ref"
-msgstr "no comprovis si altre arbre de treball té la referència donada"
+msgstr "no comprovis si un altre arbre de treball té la referència donada"
 
-#: builtin/checkout.c:1576
+#: builtin/checkout.c:1594
 msgid "checkout our version for unmerged files"
 msgstr "agafa la versió nostra dels fitxers sense fusionar"
 
-#: builtin/checkout.c:1579
+#: builtin/checkout.c:1597
 msgid "checkout their version for unmerged files"
 msgstr "agafa la versió seva dels fitxers sense fusionar"
 
-#: builtin/checkout.c:1583
+#: builtin/checkout.c:1601
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "no limitis les especificacions de camí només a entrades disperses"
 
-#: builtin/checkout.c:1640
+#: builtin/checkout.c:1659
 #, c-format
 msgid "options '-%c', '-%c', and '%s' cannot be used together"
 msgstr "les opcions «-%c», «-%c», i «%s» no es poden usar juntes"
 
-#: builtin/checkout.c:1681
+#: builtin/checkout.c:1700
 msgid "--track needs a branch name"
 msgstr "--track necessita un nom de branca"
 
-#: builtin/checkout.c:1686
+#: builtin/checkout.c:1705
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "falta el nom de la branca; proveu -%c"
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1737
 #, c-format
 msgid "could not resolve %s"
 msgstr "no es pot resoldre %s"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1753
 msgid "invalid path specification"
 msgstr "especificació de camí no vàlida"
 
-#: builtin/checkout.c:1741
+#: builtin/checkout.c:1760
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr ""
 "«%s» no és una comissió i la branca «%s» no es pot crear a partir d'aquesta "
 "comissió"
 
-#: builtin/checkout.c:1745
+#: builtin/checkout.c:1764
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout: --detach no accepta un argument de camí «%s»"
 
-#: builtin/checkout.c:1770
+#: builtin/checkout.c:1789
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -12959,71 +13340,71 @@ msgstr ""
 "git checkout: --ours/--theirs, --force i --merge són incompatibles en\n"
 "agafar de l'índex."
 
-#: builtin/checkout.c:1775
+#: builtin/checkout.c:1794
 msgid "you must specify path(s) to restore"
 msgstr "heu d'especificar el camí o camins a restaurar"
 
-#: builtin/checkout.c:1800 builtin/checkout.c:1802 builtin/checkout.c:1854
-#: builtin/checkout.c:1856 builtin/clone.c:126 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2959
-#: builtin/submodule--helper.c:3253 builtin/worktree.c:484
-#: builtin/worktree.c:486
+#: builtin/checkout.c:1819 builtin/checkout.c:1821 builtin/checkout.c:1873
+#: builtin/checkout.c:1875 builtin/clone.c:130 builtin/remote.c:171
+#: builtin/remote.c:173 builtin/submodule--helper.c:3038
+#: builtin/submodule--helper.c:3371 builtin/worktree.c:556
+#: builtin/worktree.c:558
 msgid "branch"
 msgstr "branca"
 
-#: builtin/checkout.c:1801
+#: builtin/checkout.c:1820
 msgid "create and checkout a new branch"
 msgstr "crea i agafa una branca nova"
 
-#: builtin/checkout.c:1803
+#: builtin/checkout.c:1822
 msgid "create/reset and checkout a branch"
 msgstr "crea/restableix i agafa una branca"
 
-#: builtin/checkout.c:1804
+#: builtin/checkout.c:1823
 msgid "create reflog for new branch"
 msgstr "crea un registre de referència per a la branca nova"
 
-#: builtin/checkout.c:1806
+#: builtin/checkout.c:1825
 msgid "second guess 'git checkout <no-such-branch>' (default)"
-msgstr "segona suposició «git checkout <no-such-branch>» (per defecte)"
+msgstr "segona deducció «git checkout <no-such-branch>» (per defecte)"
 
-#: builtin/checkout.c:1807
+#: builtin/checkout.c:1826
 msgid "use overlay mode (default)"
 msgstr "utilitza el mode de superposició (per defecte)"
 
-#: builtin/checkout.c:1855
+#: builtin/checkout.c:1874
 msgid "create and switch to a new branch"
 msgstr "crea i canvia a una branca nova"
 
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1876
 msgid "create/reset and switch to a branch"
 msgstr "crea/restableix i canvia a una branca"
 
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1878
 msgid "second guess 'git switch <no-such-branch>'"
-msgstr "segona suposició «git switch <no-such-branch>»"
+msgstr "segona deducció «git switch <no-such-branch>»"
 
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1880
 msgid "throw away local modifications"
 msgstr "descarta les modificacions locals"
 
-#: builtin/checkout.c:1897
+#: builtin/checkout.c:1916
 msgid "which tree-ish to checkout from"
 msgstr "des de quin arbre agafar"
 
-#: builtin/checkout.c:1899
+#: builtin/checkout.c:1918
 msgid "restore the index"
 msgstr "restaura l'índex"
 
-#: builtin/checkout.c:1901
+#: builtin/checkout.c:1920
 msgid "restore the working tree (default)"
 msgstr "restaura l'arbre de treball (per defecte)"
 
-#: builtin/checkout.c:1903
+#: builtin/checkout.c:1922
 msgid "ignore unmerged entries"
 msgstr "ignora les entrades sense fusionar"
 
-#: builtin/checkout.c:1904
+#: builtin/checkout.c:1923
 msgid "use overlay mode"
 msgstr "utilitza el mode de superposició"
 
@@ -13171,8 +13552,8 @@ msgid "remove whole directories"
 msgstr "elimina directoris sencers"
 
 #: builtin/clean.c:932 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:937 builtin/log.c:184 builtin/log.c:186
-#: builtin/ls-files.c:651 builtin/name-rev.c:535 builtin/name-rev.c:537
+#: builtin/grep.c:938 builtin/log.c:185 builtin/log.c:187
+#: builtin/ls-files.c:651 builtin/name-rev.c:585 builtin/name-rev.c:587
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "patró"
@@ -13209,212 +13590,217 @@ msgstr ""
 msgid "-x and -X cannot be used together"
 msgstr "-x i -X no es poden usar junts"
 
-#: builtin/clone.c:45
+#: builtin/clone.c:47
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<opcions>] [--] <repositori> [<directori>]"
 
-#: builtin/clone.c:96
+#: builtin/clone.c:100
 msgid "don't clone shallow repository"
 msgstr "no clonis un repositori superficial"
 
-#: builtin/clone.c:98
+#: builtin/clone.c:102
 msgid "don't create a checkout"
 msgstr "no facis cap agafament"
 
-#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:542
+#: builtin/clone.c:103 builtin/clone.c:105 builtin/init-db.c:542
 msgid "create a bare repository"
 msgstr "crea un repositori nu"
 
-#: builtin/clone.c:103
+#: builtin/clone.c:107
 msgid "create a mirror repository (implies bare)"
 msgstr "crea un repositori mirall (implica bare)"
 
-#: builtin/clone.c:105
+#: builtin/clone.c:109
 msgid "to clone from a local repository"
 msgstr "per a clonar des d'un repositori local"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "don't use local hardlinks, always copy"
 msgstr "no usis enllaços durs locals, sempre copia"
 
-#: builtin/clone.c:109
+#: builtin/clone.c:113
 msgid "setup as shared repository"
 msgstr "configura com a repositori compartit"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "pathspec"
 msgstr "especificació de camí"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "initialize submodules in the clone"
 msgstr "inicialitza els submòduls en el clon"
 
-#: builtin/clone.c:115
+#: builtin/clone.c:119
 msgid "number of submodules cloned in parallel"
 msgstr "nombre de submòduls clonats en paral·lel"
 
-#: builtin/clone.c:116 builtin/init-db.c:539
+#: builtin/clone.c:120 builtin/init-db.c:539
 msgid "template-directory"
 msgstr "directori-de-plantilla"
 
-#: builtin/clone.c:117 builtin/init-db.c:540
+#: builtin/clone.c:121 builtin/init-db.c:540
 msgid "directory from which templates will be used"
 msgstr "directori des del qual s'usaran les plantilles"
 
-#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1871
-#: builtin/submodule--helper.c:2514 builtin/submodule--helper.c:3260
+#: builtin/clone.c:123 builtin/clone.c:125 builtin/submodule--helper.c:1885
+#: builtin/submodule--helper.c:2719 builtin/submodule--helper.c:3378
 msgid "reference repository"
 msgstr "repositori de referència"
 
-#: builtin/clone.c:123 builtin/submodule--helper.c:1873
-#: builtin/submodule--helper.c:2516
+#: builtin/clone.c:127 builtin/submodule--helper.c:1887
+#: builtin/submodule--helper.c:2721
 msgid "use --reference only while cloning"
 msgstr "usa --reference només en clonar"
 
-#: builtin/clone.c:124 builtin/column.c:27 builtin/fmt-merge-msg.c:27
+#: builtin/clone.c:128 builtin/column.c:27 builtin/fmt-merge-msg.c:27
 #: builtin/init-db.c:550 builtin/merge-file.c:48 builtin/merge.c:290
-#: builtin/pack-objects.c:3944 builtin/repack.c:665
-#: builtin/submodule--helper.c:3262 t/helper/test-simple-ipc.c:595
+#: builtin/pack-objects.c:3967 builtin/repack.c:669
+#: builtin/submodule--helper.c:3380 t/helper/test-simple-ipc.c:595
 #: t/helper/test-simple-ipc.c:597
 msgid "name"
 msgstr "nom"
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "usa <nom> en lloc d'«origin» per a seguir la font"
 
-#: builtin/clone.c:127
+#: builtin/clone.c:131
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "agafa <branca> en lloc de la HEAD del remot"
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133
 msgid "path to git-upload-pack on the remote"
 msgstr "camí a git-upload-pack en el remot"
 
-#: builtin/clone.c:130 builtin/fetch.c:181 builtin/grep.c:876
+#: builtin/clone.c:134 builtin/fetch.c:182 builtin/grep.c:877
 #: builtin/pull.c:212
 msgid "depth"
 msgstr "profunditat"
 
-#: builtin/clone.c:131
+#: builtin/clone.c:135
 msgid "create a shallow clone of that depth"
-msgstr "crea un clon superficial de tal profunditat"
+msgstr "crea un clon superficial d'aquesta profunditat"
 
-#: builtin/clone.c:132 builtin/fetch.c:183 builtin/pack-objects.c:3933
+#: builtin/clone.c:136 builtin/fetch.c:184 builtin/pack-objects.c:3956
 #: builtin/pull.c:215
 msgid "time"
 msgstr "data"
 
-#: builtin/clone.c:133
+#: builtin/clone.c:137
 msgid "create a shallow clone since a specific time"
 msgstr "crea un clon superficial des d'una data específica"
 
-#: builtin/clone.c:134 builtin/fetch.c:185 builtin/fetch.c:208
-#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1022
+#: builtin/clone.c:138 builtin/fetch.c:186 builtin/fetch.c:212
+#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1050
 msgid "revision"
 msgstr "revisió"
 
-#: builtin/clone.c:135 builtin/fetch.c:186 builtin/pull.c:219
+#: builtin/clone.c:139 builtin/fetch.c:187 builtin/pull.c:219
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "aprofundeix la història d'un clon superficial, excloent una revisió"
 
-#: builtin/clone.c:137 builtin/submodule--helper.c:1883
-#: builtin/submodule--helper.c:2530
+#: builtin/clone.c:141 builtin/submodule--helper.c:1897
+#: builtin/submodule--helper.c:2735
 msgid "clone only one branch, HEAD or --branch"
 msgstr "clona només una branca, HEAD o --branch"
 
-#: builtin/clone.c:139
+#: builtin/clone.c:143
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr ""
-"no cloneu cap etiqueta, i feu que els «fetch» següents no els segueixen"
+"no cloneu cap etiqueta, i feu que els «fetch» següents no les segueixin"
 
-#: builtin/clone.c:141
+#: builtin/clone.c:145
 msgid "any cloned submodules will be shallow"
 msgstr "qualsevol submòdul clonat serà superficial"
 
-#: builtin/clone.c:142 builtin/init-db.c:548
+#: builtin/clone.c:146 builtin/init-db.c:548
 msgid "gitdir"
 msgstr "directori de git"
 
-#: builtin/clone.c:143 builtin/init-db.c:549
+#: builtin/clone.c:147 builtin/init-db.c:549
 msgid "separate git dir from working tree"
 msgstr "separa el directori de git de l'arbre de treball"
 
-#: builtin/clone.c:144
+#: builtin/clone.c:148
 msgid "key=value"
 msgstr "clau=valor"
 
-#: builtin/clone.c:145
+#: builtin/clone.c:149
 msgid "set config inside the new repository"
 msgstr "estableix la configuració dins del repositori nou"
 
-#: builtin/clone.c:147 builtin/fetch.c:203 builtin/ls-remote.c:77
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
 #: builtin/pull.c:234 builtin/push.c:575 builtin/send-pack.c:200
 msgid "server-specific"
 msgstr "específic al servidor"
 
-#: builtin/clone.c:147 builtin/fetch.c:203 builtin/ls-remote.c:77
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
 #: builtin/pull.c:235 builtin/push.c:575 builtin/send-pack.c:201
 msgid "option to transmit"
 msgstr "opció a transmetre"
 
-#: builtin/clone.c:148 builtin/fetch.c:204 builtin/pull.c:238
+#: builtin/clone.c:152 builtin/fetch.c:208 builtin/pull.c:238
 #: builtin/push.c:576
 msgid "use IPv4 addresses only"
 msgstr "usa només adreces IPv4"
 
-#: builtin/clone.c:150 builtin/fetch.c:206 builtin/pull.c:241
+#: builtin/clone.c:154 builtin/fetch.c:210 builtin/pull.c:241
 #: builtin/push.c:578
 msgid "use IPv6 addresses only"
 msgstr "usa només adreces IPv6"
 
-#: builtin/clone.c:154
+#: builtin/clone.c:158
+#, fuzzy
+msgid "apply partial clone filters to submodules"
+msgstr "Aplica els filtres de clonatge parcial als submòduls"
+
+#: builtin/clone.c:160
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr ""
 "qualsevol submòdul clonat utilitzarà la seva branca de seguiment remot"
 
-#: builtin/clone.c:156
+#: builtin/clone.c:162
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr ""
 "inicialitza el fitxer «sparse-checkout» per a incloure només els fitxers a "
 "l'arrel"
 
-#: builtin/clone.c:231
+#: builtin/clone.c:237
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info: No s'ha pogut afegir un alternatiu per a «%s»: %s\n"
 
-#: builtin/clone.c:304
+#: builtin/clone.c:310
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s existeix i no és directori"
 
-#: builtin/clone.c:322
+#: builtin/clone.c:328
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "no s'ha pogut iniciar l'iterador sobre «%s»"
 
-#: builtin/clone.c:353
+#: builtin/clone.c:359
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "s'ha produït un error en crear l'enllaç «%s»"
 
-#: builtin/clone.c:357
+#: builtin/clone.c:363
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "s'ha produït un error en copiar el fitxer a «%s»"
 
-#: builtin/clone.c:362
+#: builtin/clone.c:368
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "no s'ha pogut iterar sobre «%s»"
 
-#: builtin/clone.c:389
+#: builtin/clone.c:395
 #, c-format
 msgid "done.\n"
 msgstr "fet.\n"
 
-#: builtin/clone.c:403
+#: builtin/clone.c:409
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -13424,102 +13810,102 @@ msgstr ""
 "Podeu inspeccionar el que s'ha agafat amb «git status»\n"
 "i tornar-ho a provar amb «git restore --source=HEAD :/»\n"
 
-#: builtin/clone.c:480
+#: builtin/clone.c:486
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "No s'ha pogut trobar la branca remota %s per a clonar."
 
-#: builtin/clone.c:597
+#: builtin/clone.c:603
 #, c-format
 msgid "unable to update %s"
 msgstr "no s'ha pogut actualitzar %s"
 
-#: builtin/clone.c:645
+#: builtin/clone.c:651
 msgid "failed to initialize sparse-checkout"
 msgstr "no s'ha pogut inicialitzar «sparse-checkout»"
 
-#: builtin/clone.c:668
+#: builtin/clone.c:674
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 "la HEAD remot es refereix a una referència que no existeix; no s'ha pogut "
 "agafar.\n"
 
-#: builtin/clone.c:701
+#: builtin/clone.c:709
 msgid "unable to checkout working tree"
 msgstr "no s'ha pogut agafar l'arbre de treball"
 
-#: builtin/clone.c:779
+#: builtin/clone.c:793
 msgid "unable to write parameters to config file"
 msgstr "no s'han pogut escriure els paràmetres al fitxer de configuració"
 
-#: builtin/clone.c:842
+#: builtin/clone.c:856
 msgid "cannot repack to clean up"
 msgstr "no es pot reempaquetar per a netejar"
 
-#: builtin/clone.c:844
+#: builtin/clone.c:858
 msgid "cannot unlink temporary alternates file"
 msgstr "no es pot desenllaçar el fitxer d'alternatives temporal"
 
-#: builtin/clone.c:886
+#: builtin/clone.c:901
 msgid "Too many arguments."
 msgstr "Hi ha massa arguments."
 
-#: builtin/clone.c:890 contrib/scalar/scalar.c:414
+#: builtin/clone.c:905 contrib/scalar/scalar.c:413
 msgid "You must specify a repository to clone."
 msgstr "Heu d'especificar un repositori per a clonar."
 
-#: builtin/clone.c:903
+#: builtin/clone.c:918
 #, c-format
 msgid "options '%s' and '%s %s' cannot be used together"
 msgstr "les opcions «%s» i «%s %s» no es poden usar juntes"
 
-#: builtin/clone.c:920
+#: builtin/clone.c:935
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "el repositori «%s» no existeix"
 
-#: builtin/clone.c:924 builtin/fetch.c:2052
+#: builtin/clone.c:939 builtin/fetch.c:2176
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "la profunditat %s no és un nombre positiu"
 
-#: builtin/clone.c:934
+#: builtin/clone.c:949
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "el camí destí «%s» ja existeix i no és un directori buit."
 
-#: builtin/clone.c:940
+#: builtin/clone.c:955
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr "el camí destí «%s» ja existeix i no és un directori buit."
 
-#: builtin/clone.c:954
+#: builtin/clone.c:969
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "l'arbre de treball «%s» ja existeix."
 
-#: builtin/clone.c:969 builtin/clone.c:990 builtin/difftool.c:256
-#: builtin/log.c:2012 builtin/worktree.c:281 builtin/worktree.c:313
+#: builtin/clone.c:984 builtin/clone.c:1005 builtin/difftool.c:256
+#: builtin/log.c:2037 builtin/worktree.c:350 builtin/worktree.c:382
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "no s'han pogut crear els directoris inicials de «%s»"
 
-#: builtin/clone.c:974
+#: builtin/clone.c:989
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "no s'ha pogut crear el directori d'arbre de treball «%s»"
 
-#: builtin/clone.c:994
+#: builtin/clone.c:1009
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "S'està clonant al repositori nu «%s»...\n"
 
-#: builtin/clone.c:996
+#: builtin/clone.c:1011
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "S'està clonant a «%s»...\n"
 
-#: builtin/clone.c:1025
+#: builtin/clone.c:1040
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-"
 "if-able"
@@ -13527,47 +13913,51 @@ msgstr ""
 "clone --recursive no és compatible amb ambdós --reference i --reference-if-"
 "able"
 
-#: builtin/clone.c:1080 builtin/remote.c:200 builtin/remote.c:710
+#: builtin/clone.c:1116 builtin/remote.c:201 builtin/remote.c:721
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "«%s» no és un nom de remot vàlid"
 
-#: builtin/clone.c:1121
+#: builtin/clone.c:1157
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "--depth s'ignora en els clons locals; useu file:// en lloc d'això."
 
-#: builtin/clone.c:1123
+#: builtin/clone.c:1159
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-since s'ignora en els clons locals; useu file:// en lloc d'això."
 
-#: builtin/clone.c:1125
+#: builtin/clone.c:1161
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-exclude s'ignora en els clons locals; useu file:// en lloc d'això."
 
-#: builtin/clone.c:1127
+#: builtin/clone.c:1163
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr "--filter s'ignora en els clons locals; useu file:// en lloc d'això."
 
-#: builtin/clone.c:1132
+#: builtin/clone.c:1168
 msgid "source repository is shallow, ignoring --local"
 msgstr "el repositori font és superficial, s'està ignorant --local"
 
-#: builtin/clone.c:1137
+#: builtin/clone.c:1173
 msgid "--local is ignored"
 msgstr "--local s'ignora"
 
-#: builtin/clone.c:1216 builtin/clone.c:1276
+#: builtin/clone.c:1185
+msgid "cannot clone from filtered bundle"
+msgstr "no es pot clonar des del farell filtrat"
+
+#: builtin/clone.c:1265 builtin/clone.c:1324
 msgid "remote transport reported error"
 msgstr "el transport remot ha informat d'un error"
 
-#: builtin/clone.c:1228 builtin/clone.c:1239
+#: builtin/clone.c:1277 builtin/clone.c:1289
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "La branca remota %s no es troba en la font %s"
 
-#: builtin/clone.c:1242
+#: builtin/clone.c:1292
 msgid "You appear to have cloned an empty repository."
 msgstr "Sembla que heu clonat un repositori buit."
 
@@ -13623,7 +14013,7 @@ msgstr ""
 "[--changed-paths] [--[no-]max-new-filters <n>] [--[no-]progress] <split "
 "options>"
 
-#: builtin/commit-graph.c:51 builtin/fetch.c:192 builtin/log.c:1794
+#: builtin/commit-graph.c:51 builtin/fetch.c:196 builtin/log.c:1813
 msgid "dir"
 msgstr "directori"
 
@@ -13723,7 +14113,7 @@ msgstr ""
 msgid "duplicate parent %s ignored"
 msgstr "s'han ignorat el pare %s duplicat"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:577
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:590
 #, c-format
 msgid "not a valid object name %s"
 msgstr "no és un nom d'objecte vàlid %s"
@@ -13746,13 +14136,13 @@ msgstr "pare"
 msgid "id of a parent commit object"
 msgstr "id d'un objecte de comissió pare"
 
-#: builtin/commit-tree.c:112 builtin/commit.c:1627 builtin/merge.c:284
-#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1677
-#: builtin/tag.c:454
+#: builtin/commit-tree.c:112 builtin/commit.c:1626 builtin/merge.c:284
+#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1666
+#: builtin/tag.c:455
 msgid "message"
 msgstr "missatge"
 
-#: builtin/commit-tree.c:113 builtin/commit.c:1627
+#: builtin/commit-tree.c:113 builtin/commit.c:1626
 msgid "commit message"
 msgstr "missatge de comissió"
 
@@ -13760,7 +14150,7 @@ msgstr "missatge de comissió"
 msgid "read commit log message from file"
 msgstr "llegeix el missatge de registre de comissió des d'un fitxer"
 
-#: builtin/commit-tree.c:119 builtin/commit.c:1644 builtin/merge.c:303
+#: builtin/commit-tree.c:119 builtin/commit.c:1643 builtin/merge.c:303
 #: builtin/pull.c:180 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "signa la comissió amb GPG"
@@ -13773,15 +14163,15 @@ msgstr "ha de donar exactament un arbre"
 msgid "git commit-tree: failed to read"
 msgstr "git commit-tree: ha fallat en llegir"
 
-#: builtin/commit.c:42
+#: builtin/commit.c:43
 msgid "git commit [<options>] [--] <pathspec>..."
 msgstr "git commit [<opcions>] [--] <especificació-de-camí>..."
 
-#: builtin/commit.c:47
+#: builtin/commit.c:48
 msgid "git status [<options>] [--] <pathspec>..."
 msgstr "git status [<opcions>] [--] <especificació-de-camí>..."
 
-#: builtin/commit.c:52
+#: builtin/commit.c:53
 msgid ""
 "You asked to amend the most recent commit, but doing so would make\n"
 "it empty. You can repeat your command with --allow-empty, or you can\n"
@@ -13791,7 +14181,7 @@ msgstr ""
 "deixaria buida. Podeu repetir la vostra ordre amb --allow-empty, o\n"
 "podeu eliminar la comissió per complet amb «git reset HEAD^».\n"
 
-#: builtin/commit.c:57
+#: builtin/commit.c:58
 msgid ""
 "The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
 "If you wish to commit it anyway, use:\n"
@@ -13805,15 +14195,15 @@ msgstr ""
 "    git commit --allow-empty\n"
 "\n"
 
-#: builtin/commit.c:64
+#: builtin/commit.c:65
 msgid "Otherwise, please use 'git rebase --skip'\n"
 msgstr "Altrament, si us plau useu «git rebase --skip»\n"
 
-#: builtin/commit.c:67
+#: builtin/commit.c:68
 msgid "Otherwise, please use 'git cherry-pick --skip'\n"
 msgstr "Altrament, si us plau useu «git cherry-pick --skip»\n"
 
-#: builtin/commit.c:70
+#: builtin/commit.c:71
 msgid ""
 "and then use:\n"
 "\n"
@@ -13835,69 +14225,69 @@ msgstr ""
 "    git cherry-pick --skip\n"
 "\n"
 
-#: builtin/commit.c:325
+#: builtin/commit.c:326
 msgid "failed to unpack HEAD tree object"
 msgstr "s'ha produït un error en desempaquetar l'objecte d'arbre HEAD"
 
-#: builtin/commit.c:375
+#: builtin/commit.c:376
 msgid "No paths with --include/--only does not make sense."
 msgstr "--include/--only no té sentit sense camí."
 
-#: builtin/commit.c:387
+#: builtin/commit.c:388
 msgid "unable to create temporary index"
 msgstr "no s'ha pogut crear un índex temporal"
 
-#: builtin/commit.c:396
+#: builtin/commit.c:397
 msgid "interactive add failed"
 msgstr "l'afegiment interactiu ha fallat"
 
-#: builtin/commit.c:411
+#: builtin/commit.c:412
 msgid "unable to update temporary index"
 msgstr "no s'ha pogut actualitzar l'índex temporal"
 
-#: builtin/commit.c:413
+#: builtin/commit.c:414
 msgid "Failed to update main cache tree"
 msgstr "S'ha produït un error en actualitzar l'arbre principal de memòria cau"
 
-#: builtin/commit.c:438 builtin/commit.c:461 builtin/commit.c:509
+#: builtin/commit.c:439 builtin/commit.c:462 builtin/commit.c:510
 msgid "unable to write new_index file"
 msgstr "no s'ha pogut escriure el fitxer new_index"
 
-#: builtin/commit.c:490
+#: builtin/commit.c:491
 msgid "cannot do a partial commit during a merge."
 msgstr "no es pot fer una comissió parcial durant una fusió."
 
-#: builtin/commit.c:492
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr "no es pot fer una comissió parcial durant un «cherry pick»."
 
-#: builtin/commit.c:494
+#: builtin/commit.c:495
 msgid "cannot do a partial commit during a rebase."
 msgstr "no es pot fer una comissió parcial durant un «rebase»."
 
-#: builtin/commit.c:502
+#: builtin/commit.c:503
 msgid "cannot read the index"
 msgstr "no es pot llegir l'índex"
 
-#: builtin/commit.c:521
+#: builtin/commit.c:522
 msgid "unable to write temporary index file"
 msgstr "no s'ha pogut escriure un fitxer d'índex temporal"
 
-#: builtin/commit.c:619
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "a la comissió «%s» li manca la capçalera d'autor"
 
-#: builtin/commit.c:621
+#: builtin/commit.c:622
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "la comissió «%s» té una línia d'autor mal formada"
 
-#: builtin/commit.c:640
+#: builtin/commit.c:641
 msgid "malformed --author parameter"
 msgstr "paràmetre --author mal format"
 
-#: builtin/commit.c:693
+#: builtin/commit.c:694
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
@@ -13905,43 +14295,43 @@ msgstr ""
 "no es pot seleccionar un caràcter de comentari que\n"
 "no sigui usat en el missatge de comissió actual"
 
-#: builtin/commit.c:747 builtin/commit.c:781 builtin/commit.c:1166
+#: builtin/commit.c:750 builtin/commit.c:784 builtin/commit.c:1170
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "no s'ha pogut cercar la comissió %s"
 
-#: builtin/commit.c:759 builtin/shortlog.c:416
+#: builtin/commit.c:762 builtin/shortlog.c:417
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(s'està llegint el missatge de registre des de l'entrada estàndard)\n"
 
-#: builtin/commit.c:761
+#: builtin/commit.c:764
 msgid "could not read log from standard input"
 msgstr "no s'ha pogut llegir el registre des de l'entrada estàndard"
 
-#: builtin/commit.c:765
+#: builtin/commit.c:768
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "no s'ha pogut llegir el fitxer de registre «%s»"
 
-#: builtin/commit.c:802
+#: builtin/commit.c:805
 #, c-format
 msgid "options '%s' and '%s:%s' cannot be used together"
 msgstr "les opcions «%s» i «%s:%s» no es poden usar juntes"
 
-#: builtin/commit.c:814 builtin/commit.c:830
+#: builtin/commit.c:817 builtin/commit.c:833
 msgid "could not read SQUASH_MSG"
 msgstr "no s'ha pogut llegir SQUASH_MSG"
 
-#: builtin/commit.c:821
+#: builtin/commit.c:824
 msgid "could not read MERGE_MSG"
 msgstr "no s'ha pogut llegir MERGE_MSG"
 
-#: builtin/commit.c:881
+#: builtin/commit.c:884
 msgid "could not write commit template"
 msgstr "no s'ha pogut escriure la plantilla de comissió"
 
-#: builtin/commit.c:894
+#: builtin/commit.c:897
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13950,7 +14340,7 @@ msgstr ""
 "Introduïu el missatge de comissió per als vostres canvis.\n"
 "S'ignoraran les línies que comencin amb «%c».\n"
 
-#: builtin/commit.c:896
+#: builtin/commit.c:899
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13960,7 +14350,7 @@ msgstr ""
 "S'ignoraran les línies que comencin amb «%c». Un missatge de\n"
 "comissió buit avorta la comissió.\n"
 
-#: builtin/commit.c:900
+#: builtin/commit.c:903
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13969,7 +14359,7 @@ msgstr ""
 "Introduïu el missatge de comissió pels vostres canvis. Es mantindran\n"
 "les línies que comencin amb «%c»; podeu eliminar-les si voleu.\n"
 
-#: builtin/commit.c:904
+#: builtin/commit.c:907
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13980,7 +14370,7 @@ msgstr ""
 "Es mantindran les línies que comencin amb «%c»; podeu eliminar-les vosaltres\n"
 "mateixos si voleu. Un missatge buit avorta la comissió.\n"
 
-#: builtin/commit.c:916
+#: builtin/commit.c:919
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -13994,7 +14384,7 @@ msgstr ""
 "\tgit update-ref -d MERGE_HEAD\n"
 "i intenteu-ho de nou.\n"
 
-#: builtin/commit.c:921
+#: builtin/commit.c:924
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -14008,169 +14398,149 @@ msgstr ""
 "\tgit update-ref -d CHERRY_PICK_HEAD\n"
 "i intenteu-ho de nou.\n"
 
-#: builtin/commit.c:948
+#: builtin/commit.c:951
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%sAutor:    %.*s <%.*s>"
 
-#: builtin/commit.c:956
+#: builtin/commit.c:959
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%sData:      %s"
 
-#: builtin/commit.c:963
+#: builtin/commit.c:966
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%sComitent: %.*s <%.*s>"
 
-#: builtin/commit.c:981
+#: builtin/commit.c:984
 msgid "Cannot read index"
 msgstr "No es pot llegir l'índex"
 
-#: builtin/commit.c:1026
+#: builtin/commit.c:1029
 msgid "unable to pass trailers to --trailers"
 msgstr "no s'han pogut passar els «trailers» a --trailers"
 
-#: builtin/commit.c:1066
+#: builtin/commit.c:1069
 msgid "Error building trees"
 msgstr "Error en construir els arbres"
 
-#: builtin/commit.c:1080 builtin/tag.c:316
+#: builtin/commit.c:1083 builtin/tag.c:317
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "Especifiqueu el missatge usant l'opció -m o l'opció -F.\n"
 
-#: builtin/commit.c:1124
+#: builtin/commit.c:1128
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr ""
 "--author «%s» no és «Nom <adreça-electrònica>» i no coincideix amb\n"
 "cap autor existent"
 
-#: builtin/commit.c:1138
+#: builtin/commit.c:1142
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "Mode d'ignorància no vàlid «%s»"
 
-#: builtin/commit.c:1156 builtin/commit.c:1451
+#: builtin/commit.c:1160 builtin/commit.c:1450
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "Mode de fitxers no seguits no vàlid «%s»"
 
-#: builtin/commit.c:1227
+#: builtin/commit.c:1231
 msgid "You are in the middle of a merge -- cannot reword."
 msgstr "Esteu enmig d'una fusió -- no es pot fer «reword»."
 
-#: builtin/commit.c:1229
+#: builtin/commit.c:1233
 msgid "You are in the middle of a cherry-pick -- cannot reword."
 msgstr "Esteu enmig d'un «cherry pick» -- no es pot fer «reword»."
 
-#: builtin/commit.c:1232
+#: builtin/commit.c:1236
 #, c-format
 msgid "reword option of '%s' and path '%s' cannot be used together"
 msgstr "les opcions de «reword» «%s» i camí «%s» no es poden usar juntes"
 
-#: builtin/commit.c:1234
+#: builtin/commit.c:1238
 #, c-format
 msgid "reword option of '%s' and '%s' cannot be used together"
 msgstr "les opcions de «reword» «%s» i «%s» no es poden usar juntes"
 
-#: builtin/commit.c:1254
-msgid "Using both --reset-author and --author does not make sense"
-msgstr "Usar ambdós --reset-author i --author no té sentit"
-
-#: builtin/commit.c:1261
+#: builtin/commit.c:1263
 msgid "You have nothing to amend."
 msgstr "No teniu res a esmenar."
 
-#: builtin/commit.c:1264
+#: builtin/commit.c:1266
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "Esteu enmig d'una fusió -- no es pot esmenar."
 
-#: builtin/commit.c:1266
+#: builtin/commit.c:1268
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr "Esteu enmig d'un «cherry pick» -- no es pot esmenar."
 
-#: builtin/commit.c:1268
+#: builtin/commit.c:1270
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr "Esteu enmig d'un «rebase» -- no es pot esmenar."
 
-#: builtin/commit.c:1271
-msgid "Options --squash and --fixup cannot be used together"
-msgstr "Les opcions --squash i --fixup no es poden usar juntes"
-
-#: builtin/commit.c:1281
-msgid "Only one of -c/-C/-F/--fixup can be used."
-msgstr "Només un de -c/-C/-F/--fixup es pot usar."
-
-#: builtin/commit.c:1283
-msgid "Option -m cannot be combined with -c/-C/-F."
-msgstr "l'opció -m no es pot combinar amb -c/-C/-F/."
-
-#: builtin/commit.c:1292
+#: builtin/commit.c:1290
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr "--reset-author només es pot usar amb -C, -c o --amend."
 
-#: builtin/commit.c:1310
-msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
-msgstr "Només un de --include/--only/--all/--interactive/--patch es pot usar."
-
-#: builtin/commit.c:1338
+#: builtin/commit.c:1337
 #, c-format
 msgid "unknown option: --fixup=%s:%s"
 msgstr "opció desconeguda: --fixup=%s:%s"
 
-#: builtin/commit.c:1355
+#: builtin/commit.c:1354
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "els camins «%s ...» amb -a no tenen sentit"
 
-#: builtin/commit.c:1486 builtin/commit.c:1655
+#: builtin/commit.c:1485 builtin/commit.c:1654
 msgid "show status concisely"
 msgstr "mostra l'estat concisament"
 
-#: builtin/commit.c:1488 builtin/commit.c:1657
+#: builtin/commit.c:1487 builtin/commit.c:1656
 msgid "show branch information"
 msgstr "mostra la informació de branca"
 
-#: builtin/commit.c:1490
+#: builtin/commit.c:1489
 msgid "show stash information"
 msgstr "mostra la informació de «stash»"
 
-#: builtin/commit.c:1492 builtin/commit.c:1659
+#: builtin/commit.c:1491 builtin/commit.c:1658
 msgid "compute full ahead/behind values"
 msgstr "calcula els valors complets endavant/darrere"
 
-#: builtin/commit.c:1494
+#: builtin/commit.c:1493
 msgid "version"
 msgstr "versió"
 
-#: builtin/commit.c:1494 builtin/commit.c:1661 builtin/push.c:551
-#: builtin/worktree.c:690
+#: builtin/commit.c:1493 builtin/commit.c:1660 builtin/push.c:551
+#: builtin/worktree.c:765
 msgid "machine-readable output"
 msgstr "sortida llegible per una màquina"
 
-#: builtin/commit.c:1497 builtin/commit.c:1663
+#: builtin/commit.c:1496 builtin/commit.c:1662
 msgid "show status in long format (default)"
 msgstr "mostra l'estat en format llarg (per defecte)"
 
-#: builtin/commit.c:1500 builtin/commit.c:1666
+#: builtin/commit.c:1499 builtin/commit.c:1665
 msgid "terminate entries with NUL"
 msgstr "acaba les entrades amb NUL"
 
-#: builtin/commit.c:1502 builtin/commit.c:1506 builtin/commit.c:1669
+#: builtin/commit.c:1501 builtin/commit.c:1505 builtin/commit.c:1668
 #: builtin/fast-export.c:1172 builtin/fast-export.c:1175
-#: builtin/fast-export.c:1178 builtin/rebase.c:1111 parse-options.h:337
+#: builtin/fast-export.c:1178 builtin/rebase.c:1139 parse-options.h:368
 msgid "mode"
 msgstr "mode"
 
-#: builtin/commit.c:1503 builtin/commit.c:1669
+#: builtin/commit.c:1502 builtin/commit.c:1668
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr ""
 "mostra els fitxers no seguits, modes opcionals: all, normal, no. (Per "
 "defecte: all)"
 
-#: builtin/commit.c:1507
+#: builtin/commit.c:1506
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
@@ -14178,11 +14548,11 @@ msgstr ""
 "mostra els fitxers ignorats, modes opcionals: traditional, matching, no. "
 "(Per defecte: traditional, matching, no.)"
 
-#: builtin/commit.c:1509 parse-options.h:192
+#: builtin/commit.c:1508 parse-options.h:197
 msgid "when"
 msgstr "quan"
 
-#: builtin/commit.c:1510
+#: builtin/commit.c:1509
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
@@ -14190,196 +14560,196 @@ msgstr ""
 "ignora els canvis als submòduls, opcional quan: all, dirty, untracked. (Per "
 "defecte: all)"
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1511
 msgid "list untracked files in columns"
 msgstr "mostra els fitxers no seguits en columnes"
 
-#: builtin/commit.c:1513
+#: builtin/commit.c:1512
 msgid "do not detect renames"
 msgstr "no detectis canvis de noms"
 
-#: builtin/commit.c:1515
+#: builtin/commit.c:1514
 msgid "detect renames, optionally set similarity index"
 msgstr ""
 "detecta canvis de noms, i opcionalment estableix un índex de semblança"
 
-#: builtin/commit.c:1538
+#: builtin/commit.c:1537
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr ""
 "No s'admet la combinació d'arguments d'ignorància i de fitxers no seguits"
 
-#: builtin/commit.c:1620
+#: builtin/commit.c:1619
 msgid "suppress summary after successful commit"
 msgstr "omet el resum després d'una comissió reeixida"
 
-#: builtin/commit.c:1621
+#: builtin/commit.c:1620
 msgid "show diff in commit message template"
 msgstr "mostra la diferència en la plantilla de missatge de comissió"
 
-#: builtin/commit.c:1623
+#: builtin/commit.c:1622
 msgid "Commit message options"
 msgstr "Opcions de missatge de comissió"
 
-#: builtin/commit.c:1624 builtin/merge.c:288 builtin/tag.c:456
+#: builtin/commit.c:1623 builtin/merge.c:288 builtin/tag.c:457
 msgid "read message from file"
 msgstr "llegiu el missatge des d'un fitxer"
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1624
 msgid "author"
 msgstr "autor"
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1624
 msgid "override author for commit"
 msgstr "sobreescriu l'autor de la comissió"
 
-#: builtin/commit.c:1626 builtin/gc.c:551
+#: builtin/commit.c:1625 builtin/gc.c:551
 msgid "date"
 msgstr "data"
 
-#: builtin/commit.c:1626
+#: builtin/commit.c:1625
 msgid "override date for commit"
 msgstr "sobreescriu la data de la comissió"
 
-#: builtin/commit.c:1628 builtin/commit.c:1629 builtin/commit.c:1635
-#: parse-options.h:329 ref-filter.h:89
+#: builtin/commit.c:1627 builtin/commit.c:1628 builtin/commit.c:1634
+#: parse-options.h:360 ref-filter.h:89
 msgid "commit"
 msgstr "comissió"
 
-#: builtin/commit.c:1628
+#: builtin/commit.c:1627
 msgid "reuse and edit message from specified commit"
 msgstr "reusa i edita el missatge de la comissió especificada"
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1628
 msgid "reuse message from specified commit"
 msgstr "reusa el missatge de la comissió especificada"
 
 #. TRANSLATORS: Leave "[(amend|reword):]" as-is,
 #. and only translate <commit>.
-#: builtin/commit.c:1634
+#: builtin/commit.c:1633
 msgid "[(amend|reword):]commit"
 msgstr "[(amend|reword):]commit"
 
-#: builtin/commit.c:1634
+#: builtin/commit.c:1633
 msgid ""
 "use autosquash formatted message to fixup or amend/reword specified commit"
 msgstr ""
 "usa un missatge amb format de «squash» automàtic per a esmenar la comissió "
 "especificada"
 
-#: builtin/commit.c:1635
+#: builtin/commit.c:1634
 msgid "use autosquash formatted message to squash specified commit"
 msgstr ""
 "usa un missatge amb format de «squash» automàtic per a fer «squash» de la "
 "comissió especificada"
 
-#: builtin/commit.c:1636
+#: builtin/commit.c:1635
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "l'autor de la comissió soc jo ara (s'usa amb -C/-c/--amend)"
 
-#: builtin/commit.c:1637 builtin/interpret-trailers.c:111
+#: builtin/commit.c:1636 builtin/interpret-trailers.c:111
 msgid "trailer"
 msgstr "remolc"
 
-#: builtin/commit.c:1637
+#: builtin/commit.c:1636
 msgid "add custom trailer(s)"
 msgstr "afegeix un «trailer» personalitzat"
 
-#: builtin/commit.c:1638 builtin/log.c:1769 builtin/merge.c:306
+#: builtin/commit.c:1637 builtin/log.c:1788 builtin/merge.c:306
 #: builtin/pull.c:146 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr "afegeix un «trailer» tipus «Signed-off-by»"
 
-#: builtin/commit.c:1639
+#: builtin/commit.c:1638
 msgid "use specified template file"
 msgstr "usa el fitxer de plantilla especificat"
 
-#: builtin/commit.c:1640
+#: builtin/commit.c:1639
 msgid "force edit of commit"
 msgstr "força l'edició de la comissió"
 
-#: builtin/commit.c:1642
+#: builtin/commit.c:1641
 msgid "include status in commit message template"
 msgstr "inclou l'estat en la plantilla de missatge de comissió"
 
-#: builtin/commit.c:1647
+#: builtin/commit.c:1646
 msgid "Commit contents options"
 msgstr "Opcions per al contingut de les comissions"
 
-#: builtin/commit.c:1648
+#: builtin/commit.c:1647
 msgid "commit all changed files"
 msgstr "comet tots els fitxers canviats"
 
-#: builtin/commit.c:1649
+#: builtin/commit.c:1648
 msgid "add specified files to index for commit"
 msgstr "afegeix els fitxers especificats a l'índex per a cometre"
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1649
 msgid "interactively add files"
 msgstr "afegeix els fitxers interactivament"
 
-#: builtin/commit.c:1651
+#: builtin/commit.c:1650
 msgid "interactively add changes"
 msgstr "afegeix els canvis interactivament"
 
-#: builtin/commit.c:1652
+#: builtin/commit.c:1651
 msgid "commit only specified files"
 msgstr "comet només els fitxers especificats"
 
-#: builtin/commit.c:1653
+#: builtin/commit.c:1652
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr "evita els lligams de precomissió i missatge de comissió"
 
-#: builtin/commit.c:1654
+#: builtin/commit.c:1653
 msgid "show what would be committed"
 msgstr "mostra què es cometria"
 
-#: builtin/commit.c:1667
+#: builtin/commit.c:1666
 msgid "amend previous commit"
 msgstr "esmena la comissió anterior"
 
-#: builtin/commit.c:1668
+#: builtin/commit.c:1667
 msgid "bypass post-rewrite hook"
 msgstr "evita el lligam de post escriptura"
 
-#: builtin/commit.c:1675
+#: builtin/commit.c:1674
 msgid "ok to record an empty change"
 msgstr "està bé registrar un canvi buit"
 
-#: builtin/commit.c:1677
+#: builtin/commit.c:1676
 msgid "ok to record a change with an empty message"
 msgstr "està bé registrar un canvi amb missatge buit"
 
-#: builtin/commit.c:1753
+#: builtin/commit.c:1752
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Fitxer MERGE_HEAD malmès (%s)"
 
-#: builtin/commit.c:1760
+#: builtin/commit.c:1759
 msgid "could not read MERGE_MODE"
 msgstr "no s'ha pogut llegir MERGE_MODE"
 
-#: builtin/commit.c:1781
+#: builtin/commit.c:1780
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "no s'ha pogut llegir el missatge de comissió: %s"
 
-#: builtin/commit.c:1788
+#: builtin/commit.c:1787
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "S'està avortant la comissió a causa d'un missatge de comissió buit.\n"
 
-#: builtin/commit.c:1793
+#: builtin/commit.c:1792
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "S'està avortant la comissió; no heu editat el missatge.\n"
 
-#: builtin/commit.c:1804
+#: builtin/commit.c:1803
 #, c-format
 msgid "Aborting commit due to empty commit message body.\n"
 msgstr ""
 "S'està interrompent la comissió a causa d'un missatge de comissió buit.\n"
 
-#: builtin/commit.c:1840
+#: builtin/commit.c:1839
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -14506,6 +14876,10 @@ msgstr "troba el paràmetre de color: ranura [stdout-és-tty]"
 msgid "Type"
 msgstr "Tipus"
 
+#: builtin/config.c:154 builtin/env--helper.c:42 builtin/hash-object.c:97
+msgid "type"
+msgstr "tipus"
+
 #: builtin/config.c:154 builtin/env--helper.c:43
 msgid "value is given this type"
 msgstr "el valor té donat aquest tipus"
@@ -14720,10 +15094,6 @@ msgstr ""
 msgid "no such section: %s"
 msgstr "no existeix la secció: %s"
 
-#: builtin/count-objects.c:90
-msgid "git count-objects [-v] [-H | --human-readable]"
-msgstr "git count-objects [-v] [-H | --human-readable]"
-
 #: builtin/count-objects.c:100
 msgid "print sizes in human readable format"
 msgstr "imprimeix les mides en un format llegible pels humans"
@@ -14899,7 +15269,7 @@ msgstr "només considera les etiquetes que coincideixen amb <patró>"
 msgid "do not consider tags matching <pattern>"
 msgstr "no consideris les etiquetes que no coincideixen amb <patró>"
 
-#: builtin/describe.c:570 builtin/name-rev.c:544
+#: builtin/describe.c:570 builtin/name-rev.c:595
 msgid "show abbreviated commit object as fallback"
 msgstr "mostra l'objecte de comissió abreviat com a sistema alternatiu"
 
@@ -14947,7 +15317,7 @@ msgstr "%s...%s: sense una base de fusió"
 msgid "Not a git repository"
 msgstr "No és un repositori de git"
 
-#: builtin/diff.c:537 builtin/grep.c:698
+#: builtin/diff.c:537 builtin/grep.c:700
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "s'ha donat un objecte no vàlid «%s»."
@@ -15066,11 +15436,11 @@ msgstr "passa-ho a «diff»"
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool requereix worktree o --no-index"
 
-#: builtin/difftool.c:744
+#: builtin/difftool.c:745
 msgid "no <tool> given for --tool=<tool>"
 msgstr "no s'ha proporcionat l'<eina> per a --tool=<eina>"
 
-#: builtin/difftool.c:751
+#: builtin/difftool.c:752
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "no s'ha proporcionat l'<ordre> per a --extcmd=<ordre>"
 
@@ -15078,10 +15448,6 @@ msgstr "no s'ha proporcionat l'<ordre> per a --extcmd=<ordre>"
 msgid "git env--helper --type=[bool|ulong] <options> <env-var>"
 msgstr "git env--helper --type=[bool|ulong] <opcions> <env-var>"
 
-#: builtin/env--helper.c:42 builtin/hash-object.c:96
-msgid "type"
-msgstr "tipus"
-
 #: builtin/env--helper.c:46
 msgid "default for git_env_*(...) to fall back on"
 msgstr "valor per defecte per a git_env_*(...) en cas d'absència"
@@ -15103,11 +15469,11 @@ msgid ""
 "`%s`"
 msgstr ""
 "l'opció «--default» espera un valor llarg sense signe amb «--type=ulong», no"
-" `%s`"
+" «%s»"
 
 #: builtin/fast-export.c:29
-msgid "git fast-export [rev-list-opts]"
-msgstr "git fast-export [opcions-de-llista-de-revisions]"
+msgid "git fast-export [<rev-list-opts>]"
+msgstr "git fast-export [<rev-list-opts>]"
 
 #: builtin/fast-export.c:843
 msgid "Error: Cannot export nested tags unless --mark-tags is specified."
@@ -15165,7 +15531,7 @@ msgstr "usa la característica fet per a acabar el flux"
 msgid "skip output of blob data"
 msgstr "omet la sortida de dades de blob"
 
-#: builtin/fast-export.c:1196 builtin/log.c:1841
+#: builtin/fast-export.c:1196 builtin/log.c:1860
 msgid "refspec"
 msgstr "especificació de referència"
 
@@ -15199,39 +15565,39 @@ msgstr "mostra els ID dels objectes originals dels blobs i comissions"
 msgid "label tags with mark ids"
 msgstr "marca les etiquetes amb els identificadors de marca"
 
-#: builtin/fast-import.c:3090
+#: builtin/fast-import.c:3097
 #, c-format
 msgid "Missing from marks for submodule '%s'"
 msgstr "Falten les marques «from» per al submòdul «%s»"
 
-#: builtin/fast-import.c:3092
+#: builtin/fast-import.c:3099
 #, c-format
 msgid "Missing to marks for submodule '%s'"
 msgstr "Falten les marques per al submòdul «%s»"
 
-#: builtin/fast-import.c:3227
+#: builtin/fast-import.c:3234
 #, c-format
 msgid "Expected 'mark' command, got %s"
 msgstr "S'esperava l'ordre «mark», s'ha rebut %s"
 
-#: builtin/fast-import.c:3232
+#: builtin/fast-import.c:3239
 #, c-format
 msgid "Expected 'to' command, got %s"
 msgstr "S'esperava l'ordre «to», s'ha rebut «%s»"
 
-#: builtin/fast-import.c:3324
+#: builtin/fast-import.c:3331
 msgid "Expected format name:filename for submodule rewrite option"
 msgstr ""
 "S'esperava el format «nom:nom de fitxer» per a l'opció de reescriptura de "
 "submòdul"
 
-#: builtin/fast-import.c:3379
+#: builtin/fast-import.c:3386
 #, c-format
 msgid "feature '%s' forbidden in input without --allow-unsafe-features"
 msgstr ""
 "característica «%s» prohibida a l'entrada sense --allow-unsafe-features"
 
-#: builtin/fetch-pack.c:242
+#: builtin/fetch-pack.c:246
 #, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr "S'ha creat el fitxer de bloqueig però no s'ha informat: %s"
@@ -15253,104 +15619,109 @@ msgstr "git fetch --multiple [<opcions>] [(<repositori> | <grup>)...]"
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<opcions>]"
 
-#: builtin/fetch.c:123
+#: builtin/fetch.c:124
 msgid "fetch.parallel cannot be negative"
 msgstr "fetch.parallel no pot ser negatiu"
 
-#: builtin/fetch.c:146 builtin/pull.c:189
+#: builtin/fetch.c:147 builtin/pull.c:189
 msgid "fetch from all remotes"
 msgstr "obtén de tots els remots"
 
-#: builtin/fetch.c:148 builtin/pull.c:249
+#: builtin/fetch.c:149 builtin/pull.c:249
 msgid "set upstream for git pull/fetch"
 msgstr "estableix la font per a git pull/fetch"
 
-#: builtin/fetch.c:150 builtin/pull.c:192
+#: builtin/fetch.c:151 builtin/pull.c:192
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "annexa a .git/FETCH_HEAD en lloc de sobreescriure"
 
-#: builtin/fetch.c:152
+#: builtin/fetch.c:153
 msgid "use atomic transaction to update references"
 msgstr "usa una transacció atòmica per a actualitzar les referències"
 
-#: builtin/fetch.c:154 builtin/pull.c:195
+#: builtin/fetch.c:155 builtin/pull.c:195
 msgid "path to upload pack on remote end"
 msgstr "camí al qual pujar el paquet al costat remot"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:156
 msgid "force overwrite of local reference"
 msgstr "força la sobreescriptura de la referència local"
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:158
 msgid "fetch from multiple remotes"
 msgstr "obtén de múltiples remots"
 
-#: builtin/fetch.c:159 builtin/pull.c:199
+#: builtin/fetch.c:160 builtin/pull.c:199
 msgid "fetch all tags and associated objects"
 msgstr "obtén totes les etiquetes i tots els objectes associats"
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:162
 msgid "do not fetch all tags (--no-tags)"
 msgstr "no obtinguis les etiquetes (--no-tags)"
 
-#: builtin/fetch.c:163
+#: builtin/fetch.c:164
 msgid "number of submodules fetched in parallel"
 msgstr "nombre de submòduls obtinguts en paral·lel"
 
-#: builtin/fetch.c:165
+#: builtin/fetch.c:166
 msgid "modify the refspec to place all refs within refs/prefetch/"
 msgstr ""
-"modifica l'especificació de referència per a col·locar totes les referències "
-"dins de refs/prefetch/"
+"modifica l'especificació de referència per a col·locar totes les referències"
+" dins de refs/prefetch/"
 
-#: builtin/fetch.c:167 builtin/pull.c:202
+#: builtin/fetch.c:168 builtin/pull.c:202
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "poda les branques amb seguiment remot que ja no estiguin en el remot"
 
-#: builtin/fetch.c:169
+#: builtin/fetch.c:170
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 "poda les etiquetes locals que ja no existeixen al remot i adjunta les "
 "etiquetes que han canviat"
 
-#: builtin/fetch.c:170 builtin/fetch.c:195 builtin/pull.c:123
+#: builtin/fetch.c:171 builtin/fetch.c:199 builtin/pull.c:123
 msgid "on-demand"
 msgstr "sota demanda"
 
-#: builtin/fetch.c:171
+#: builtin/fetch.c:172
 msgid "control recursive fetching of submodules"
 msgstr "controla l'obtenció recursiva de submòduls"
 
-#: builtin/fetch.c:176
+#: builtin/fetch.c:177
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr "escriu les referències obtingudes al fitxer FETCH_HEAD"
 
-#: builtin/fetch.c:177 builtin/pull.c:210
+#: builtin/fetch.c:178 builtin/pull.c:210
 msgid "keep downloaded pack"
 msgstr "retén el paquet baixat"
 
-#: builtin/fetch.c:179
+#: builtin/fetch.c:180
 msgid "allow updating of HEAD ref"
 msgstr "permet l'actualització de la referència HEAD"
 
-#: builtin/fetch.c:182 builtin/fetch.c:188 builtin/pull.c:213
+#: builtin/fetch.c:183 builtin/fetch.c:189 builtin/pull.c:213
 #: builtin/pull.c:222
 msgid "deepen history of shallow clone"
 msgstr "aprofundeix la història d'un clon superficial"
 
-#: builtin/fetch.c:184 builtin/pull.c:216
+#: builtin/fetch.c:185 builtin/pull.c:216
 msgid "deepen history of shallow repository based on time"
 msgstr "aprofundeix la història d'un clon superficial basat en una data"
 
-#: builtin/fetch.c:190 builtin/pull.c:225
+#: builtin/fetch.c:191 builtin/pull.c:225
 msgid "convert to a complete repository"
 msgstr "converteix en un repositori complet"
 
-#: builtin/fetch.c:193
+#: builtin/fetch.c:194
+#, fuzzy
+msgid "re-fetch without negotiating common commits"
+msgstr "tornar a capturar sense negociar comissions comunes"
+
+#: builtin/fetch.c:197
 msgid "prepend this to submodule path output"
 msgstr "anteposa això a la sortida de camí del submòdul"
 
-#: builtin/fetch.c:196
+#: builtin/fetch.c:200
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
@@ -15358,110 +15729,105 @@ msgstr ""
 "per defecte per a l'obtenció recursiva de submòduls (prioritat més baixa que"
 " els fitxers de configuració)"
 
-#: builtin/fetch.c:200 builtin/pull.c:228
+#: builtin/fetch.c:204 builtin/pull.c:228
 msgid "accept refs that update .git/shallow"
 msgstr "accepta les referències que actualitzin .git/shallow"
 
-#: builtin/fetch.c:201 builtin/pull.c:230
+#: builtin/fetch.c:205 builtin/pull.c:230
 msgid "refmap"
 msgstr "mapa de referències"
 
-#: builtin/fetch.c:202 builtin/pull.c:231
+#: builtin/fetch.c:206 builtin/pull.c:231
 msgid "specify fetch refmap"
 msgstr "específica l'obtenció del mapa de referències"
 
-#: builtin/fetch.c:209 builtin/pull.c:244
+#: builtin/fetch.c:213 builtin/pull.c:244
 msgid "report that we have only objects reachable from this object"
 msgstr "informa que només hi ha objectes abastables des d'aquest objecte"
 
-#: builtin/fetch.c:211
+#: builtin/fetch.c:215
 msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
 msgstr ""
 "no obtinguis un fitxer de paquet; en canvi, mostra els avantpassats dels "
 "consells de negociació"
 
-#: builtin/fetch.c:214 builtin/fetch.c:216
+#: builtin/fetch.c:218 builtin/fetch.c:220
 msgid "run 'maintenance --auto' after fetching"
 msgstr "executa «maintenance --auto» després d'obtenir"
 
-#: builtin/fetch.c:218 builtin/pull.c:247
+#: builtin/fetch.c:222 builtin/pull.c:247
 msgid "check for forced-updates on all updated branches"
 msgstr ""
 "comprova si hi ha actualitzacions forçades a totes les branques "
 "actualitzades"
 
-#: builtin/fetch.c:220
+#: builtin/fetch.c:224
 msgid "write the commit-graph after fetching"
 msgstr "escriu el graf de comissions després de recollir"
 
-#: builtin/fetch.c:222
+#: builtin/fetch.c:226
 msgid "accept refspecs from stdin"
 msgstr "llegeix les especificacions de referència des de stdin"
 
-#: builtin/fetch.c:592
+#: builtin/fetch.c:618
 msgid "couldn't find remote ref HEAD"
 msgstr "no s'ha pogut trobar la referència HEAD remota"
 
-#: builtin/fetch.c:766
-#, c-format
-msgid "configuration fetch.output contains invalid value %s"
-msgstr "la configuració fetch.output conté un valor no vàlid %s"
-
-#: builtin/fetch.c:867
+#: builtin/fetch.c:893
 #, c-format
 msgid "object %s not found"
 msgstr "objecte %s no trobat"
 
-#: builtin/fetch.c:871
+#: builtin/fetch.c:897
 msgid "[up to date]"
 msgstr "[al dia]"
 
-#: builtin/fetch.c:883 builtin/fetch.c:901 builtin/fetch.c:973
+#: builtin/fetch.c:909 builtin/fetch.c:927 builtin/fetch.c:999
 msgid "[rejected]"
 msgstr "[rebutjat]"
 
-#: builtin/fetch.c:885
+#: builtin/fetch.c:911
 msgid "can't fetch in current branch"
 msgstr "no es pot obtenir en la branca actual"
 
-#: builtin/fetch.c:886
+#: builtin/fetch.c:912
 msgid "checked out in another worktree"
 msgstr "s'ha agafat en un altre arbre de treball"
 
-#: builtin/fetch.c:896
+#: builtin/fetch.c:922
 msgid "[tag update]"
 msgstr "[actualització d'etiqueta]"
 
-#: builtin/fetch.c:897 builtin/fetch.c:934 builtin/fetch.c:956
-#: builtin/fetch.c:968
+#: builtin/fetch.c:923 builtin/fetch.c:960 builtin/fetch.c:982
+#: builtin/fetch.c:994
 msgid "unable to update local ref"
 msgstr "no s'ha pogut actualitzar la referència local"
 
-#: builtin/fetch.c:901
+#: builtin/fetch.c:927
 msgid "would clobber existing tag"
 msgstr "s'adjuntaria l'etiqueta existent"
 
-#: builtin/fetch.c:923
+#: builtin/fetch.c:949
 msgid "[new tag]"
 msgstr "[etiqueta nova]"
 
-#: builtin/fetch.c:926
+#: builtin/fetch.c:952
 msgid "[new branch]"
 msgstr "[branca nova]"
 
-#: builtin/fetch.c:929
+#: builtin/fetch.c:955
 msgid "[new ref]"
 msgstr "[referència nova]"
 
-#: builtin/fetch.c:968
+#: builtin/fetch.c:994
 msgid "forced update"
 msgstr "actualització forçada"
 
-#: builtin/fetch.c:973
+#: builtin/fetch.c:999
 msgid "non-fast-forward"
 msgstr "sense avanç ràpid"
 
-#: builtin/fetch.c:1076
+#: builtin/fetch.c:1102
 msgid ""
 "fetch normally indicates which branches had a forced update,\n"
 "but that check has been disabled; to re-enable, use '--show-forced-updates'\n"
@@ -15471,7 +15837,7 @@ msgstr ""
 "però aquesta comprovació s'ha desactivat. Per a tornar a habilitar-la, utilitzeu\n"
 "«--show-forced-updates» o executeu «git config fetch.showForcedUpdates true»"
 
-#: builtin/fetch.c:1080
+#: builtin/fetch.c:1106
 #, c-format
 msgid ""
 "it took %.2f seconds to check forced updates; you can use\n"
@@ -15482,23 +15848,23 @@ msgstr ""
 "utilitzar «--no-show-forced-updates» o executar «git config \n"
 "fetch.showForcedUpdates false» per a evitar aquesta comprovació.\n"
 
-#: builtin/fetch.c:1112
+#: builtin/fetch.c:1136
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s no ha enviat tots els objectes necessaris\n"
 
-#: builtin/fetch.c:1141
+#: builtin/fetch.c:1156
 #, c-format
 msgid "rejected %s because shallow roots are not allowed to be updated"
 msgstr ""
 "s'ha rebutjat %s perquè no es permeten actualitzar les arrels superficials"
 
-#: builtin/fetch.c:1231 builtin/fetch.c:1379
+#: builtin/fetch.c:1259 builtin/fetch.c:1418
 #, c-format
 msgid "From %.*s\n"
 msgstr "De %.*s\n"
 
-#: builtin/fetch.c:1252
+#: builtin/fetch.c:1269
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -15508,71 +15874,71 @@ msgstr ""
 " intenteu executar «git remote prune %s» per a eliminar\n"
 " qualsevol branca antiga o conflictiva"
 
-#: builtin/fetch.c:1349
+#: builtin/fetch.c:1377
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s es tornarà penjant)"
 
-#: builtin/fetch.c:1350
+#: builtin/fetch.c:1378
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s s'ha tornat penjant)"
 
-#: builtin/fetch.c:1382
+#: builtin/fetch.c:1421
 msgid "[deleted]"
 msgstr "[suprimit]"
 
-#: builtin/fetch.c:1383 builtin/remote.c:1128
+#: builtin/fetch.c:1422 builtin/remote.c:1153
 msgid "(none)"
 msgstr "(cap)"
 
-#: builtin/fetch.c:1405
+#: builtin/fetch.c:1446
 #, c-format
 msgid "refusing to fetch into branch '%s' checked out at '%s'"
 msgstr "s'ha rebutjat l'obtenció en la branca «%s» agafada a «%s»"
 
-#: builtin/fetch.c:1425
+#: builtin/fetch.c:1466
 #, c-format
 msgid "option \"%s\" value \"%s\" is not valid for %s"
 msgstr "l'opció «%s» amb valor «%s» no és vàlida per a %s"
 
-#: builtin/fetch.c:1428
+#: builtin/fetch.c:1469
 #, c-format
 msgid "option \"%s\" is ignored for %s\n"
 msgstr "s'ignora l'opció «%s» per a %s\n"
 
-#: builtin/fetch.c:1455
+#: builtin/fetch.c:1496
 #, c-format
 msgid "the object %s does not exist"
 msgstr "l'objecte %s no existeix"
 
-#: builtin/fetch.c:1643
+#: builtin/fetch.c:1748
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr "s'han detectat múltiples branques, incompatible amb --set-upstream"
 
-#: builtin/fetch.c:1655
+#: builtin/fetch.c:1760
 #, c-format
 msgid ""
 "could not set upstream of HEAD to '%s' from '%s' when it does not point to "
 "any branch."
 msgstr ""
-"no s'ha pogut establir la font de HEAD a «%s» des de «%s» quan no assenyala cap "
-"branca."
+"no s'ha pogut establir la font de HEAD a «%s» des de «%s» quan no assenyala "
+"cap branca."
 
-#: builtin/fetch.c:1668
+#: builtin/fetch.c:1773
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr ""
 "no s'està configurant la font per a una branca remota amb seguiment remot"
 
-#: builtin/fetch.c:1670
+#: builtin/fetch.c:1775
 msgid "not setting upstream for a remote tag"
 msgstr "no s'està configurant la font d'una etiqueta remota"
 
-#: builtin/fetch.c:1672
+#: builtin/fetch.c:1777
 msgid "unknown branch type"
 msgstr "tipus de branca desconegut"
 
-#: builtin/fetch.c:1674
+#: builtin/fetch.c:1779
 msgid ""
 "no source branch found;\n"
 "you need to specify exactly one branch with the --set-upstream option"
@@ -15580,22 +15946,22 @@ msgstr ""
 "no s'ha trobat cap branca d'origen.\n"
 "heu d'especificar exactament una branca amb l'opció --set-upstream"
 
-#: builtin/fetch.c:1804 builtin/fetch.c:1867
+#: builtin/fetch.c:1904 builtin/fetch.c:1967
 #, c-format
 msgid "Fetching %s\n"
 msgstr "S'està obtenint %s\n"
 
-#: builtin/fetch.c:1814 builtin/fetch.c:1869
+#: builtin/fetch.c:1914 builtin/fetch.c:1969
 #, c-format
 msgid "could not fetch %s"
 msgstr "no s'ha pogut obtenir %s"
 
-#: builtin/fetch.c:1826
+#: builtin/fetch.c:1926
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr "no s'ha pogut obtenir «%s» (codi de sortida: %d)\n"
 
-#: builtin/fetch.c:1930
+#: builtin/fetch.c:2030
 msgid ""
 "no remote repository specified; please specify either a URL or a\n"
 "remote name from which new revisions should be fetched"
@@ -15603,48 +15969,49 @@ msgstr ""
 "no s'ha especificat cap repositori remot. Especifiqueu un URL o\n"
 "un nom remot del qual s'han d'obtenir les revisions noves"
 
-#: builtin/fetch.c:1966
+#: builtin/fetch.c:2066
 msgid "you need to specify a tag name"
 msgstr "necessiteu especificar un nom d'etiqueta"
 
-#: builtin/fetch.c:2032
-msgid "--negotiate-only needs one or more --negotiate-tip=*"
-msgstr "--negotiate-only necessita un o més --negotiate-tip=*"
+#: builtin/fetch.c:2156
+#, fuzzy
+msgid "--negotiate-only needs one or more --negotiation-tip=*"
+msgstr "--negotiate-only necessita un o més --negotiation-tip=*"
 
-#: builtin/fetch.c:2036
+#: builtin/fetch.c:2160
 msgid "negative depth in --deepen is not supported"
 msgstr "no s'admet una profunditat negativa en --deepen"
 
-#: builtin/fetch.c:2045
+#: builtin/fetch.c:2169
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "--unshallow en un repositori complet no té sentit"
 
-#: builtin/fetch.c:2062
+#: builtin/fetch.c:2186
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all no accepta un argument de repositori"
 
-#: builtin/fetch.c:2064
+#: builtin/fetch.c:2188
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all no té sentit amb especificacions de referència"
 
-#: builtin/fetch.c:2073
+#: builtin/fetch.c:2197
 #, c-format
 msgid "no such remote or remote group: %s"
 msgstr "no existeix un remot ni un grup remot: %s"
 
-#: builtin/fetch.c:2081
+#: builtin/fetch.c:2205
 msgid "fetching a group and specifying refspecs does not make sense"
 msgstr "obtenir un grup i especificar referències no té sentit"
 
-#: builtin/fetch.c:2097
+#: builtin/fetch.c:2221
 msgid "must supply remote when using --negotiate-only"
 msgstr "s'ha de subministrar el remot en usar --negotiate-only"
 
-#: builtin/fetch.c:2102
+#: builtin/fetch.c:2226
 msgid "protocol does not support --negotiate-only, exiting"
 msgstr "el protocol no admet --negotiate-only, se surt"
 
-#: builtin/fetch.c:2121
+#: builtin/fetch.c:2246
 msgid ""
 "--filter can only be used with the remote configured in "
 "extensions.partialclone"
@@ -15652,11 +16019,11 @@ msgstr ""
 "--filter només es pot utilitzar amb el remot configurat en "
 "extensions.partialclone"
 
-#: builtin/fetch.c:2125
+#: builtin/fetch.c:2250
 msgid "--atomic can only be used when fetching from one remote"
 msgstr "l'opció --atomic només es pot usar quan s'obté des d'un remot"
 
-#: builtin/fetch.c:2129
+#: builtin/fetch.c:2254
 msgid "--stdin can only be used when fetching from one remote"
 msgstr "l'opció --stdin només es pot usar quan s'obté des d'un remot"
 
@@ -15728,7 +16095,7 @@ msgstr "posa els marcadors de posició entre cometes adequades per al Tcl"
 msgid "show only <n> matched refs"
 msgstr "mostra només <n> referències coincidents"
 
-#: builtin/for-each-ref.c:42 builtin/tag.c:481
+#: builtin/for-each-ref.c:42 builtin/tag.c:482
 msgid "respect format colors"
 msgstr "respecta els colors del format"
 
@@ -15922,7 +16289,7 @@ msgstr "S'estan comprovant els directoris d'objecte"
 msgid "Checking %s link"
 msgstr "S'està comprovant l'enllaç %s"
 
-#: builtin/fsck.c:710 builtin/index-pack.c:859
+#: builtin/fsck.c:710 builtin/index-pack.c:862
 #, c-format
 msgid "invalid %s"
 msgstr "%s no vàlid"
@@ -15981,8 +16348,7 @@ msgstr "fes dels objectes d'índex nodes cap"
 
 #: builtin/fsck.c:795
 msgid "make reflogs head nodes (default)"
-msgstr ""
-"fes que els registres de referències siguin nodes cap (per defecte)"
+msgstr "fes que els registres de referències siguin nodes cap (per defecte)"
 
 #: builtin/fsck.c:796
 msgid "also consider packs and alternate objects"
@@ -15992,7 +16358,7 @@ msgstr "també considera els paquets i els objectes alternatius"
 msgid "check only connectivity"
 msgstr "comprova només la connectivitat"
 
-#: builtin/fsck.c:798 builtin/mktag.c:76
+#: builtin/fsck.c:798 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr "habilita la comprovació més estricta"
 
@@ -16022,6 +16388,124 @@ msgstr "%s: falta l'objecte"
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "paràmetre no vàlid: s'esperava sha1, s'ha obtingut «%s»"
 
+#: builtin/fsmonitor--daemon.c:13
+msgid "git fsmonitor--daemon start [<options>]"
+msgstr "git fsmonitor--daemon start [<options>]"
+
+#: builtin/fsmonitor--daemon.c:14
+msgid "git fsmonitor--daemon run [<options>]"
+msgstr "git fsmonitor--daemon run [<options>]"
+
+#: builtin/fsmonitor--daemon.c:15
+msgid "git fsmonitor--daemon stop"
+msgstr "git fsmonitor--daemon stop"
+
+#: builtin/fsmonitor--daemon.c:16
+msgid "git fsmonitor--daemon status"
+msgstr "git fsmonitor--daemon status"
+
+#: builtin/fsmonitor--daemon.c:38 builtin/fsmonitor--daemon.c:47
+#, c-format
+msgid "value of '%s' out of range: %d"
+msgstr "el valor de «%s» està fora de rang: %d"
+
+#: builtin/fsmonitor--daemon.c:57
+#, c-format, fuzzy
+msgid "value of '%s' not bool or int: %d"
+msgstr "valor de \"%s\" no bool ni int: el percentatge"
+
+#: builtin/fsmonitor--daemon.c:99
+#, c-format
+msgid "fsmonitor-daemon is watching '%s'\n"
+msgstr "fsmonitor-daemon està veient '%s'\n"
+
+#: builtin/fsmonitor--daemon.c:104
+#, c-format
+msgid "fsmonitor-daemon is not watching '%s'\n"
+msgstr "fsmonitor-daemon no està vigilant «%s»\n"
+
+#: builtin/fsmonitor--daemon.c:170
+#, c-format, fuzzy
+msgid "could not create fsmonitor cookie '%s'"
+msgstr "no s'ha pogut crear la galeta fsmonitor '%s'"
+
+#: builtin/fsmonitor--daemon.c:753
+#, c-format
+msgid "fsmonitor: cookie_result '%d' != SEEN"
+msgstr "fsmonitor: cookie_result '%d' != SEEN"
+
+#: builtin/fsmonitor--daemon.c:1187
+#, c-format, fuzzy
+msgid "could not start IPC thread pool on '%s'"
+msgstr "no s'ha pogut iniciar el grup de fils IPC a «%s»"
+
+#: builtin/fsmonitor--daemon.c:1199
+#, fuzzy
+msgid "could not start fsmonitor listener thread"
+msgstr "no s'ha pogut iniciar el fil d'oient del fsmonitor"
+
+#: builtin/fsmonitor--daemon.c:1297
+#, fuzzy
+msgid "could not initialize listener thread"
+msgstr "no s'ha pogut inicialitzar el fil d'oient"
+
+#: builtin/fsmonitor--daemon.c:1328 builtin/fsmonitor--daemon.c:1383
+#, c-format
+msgid "fsmonitor--daemon is already running '%s'"
+msgstr "fsmonitor--daemon is already running «%s»"
+
+#: builtin/fsmonitor--daemon.c:1332
+#, c-format
+msgid "running fsmonitor-daemon in '%s'\n"
+msgstr "s'està executant fsmonitor-daemon en «%s»\n"
+
+#: builtin/fsmonitor--daemon.c:1387
+#, c-format, fuzzy
+msgid "starting fsmonitor-daemon in '%s'\n"
+msgstr "s'està iniciant fsmonitor-daemon a «%s»"
+
+#: builtin/fsmonitor--daemon.c:1413
+#, fuzzy
+msgid "daemon failed to start"
+msgstr "el dimoni ha fallat en iniciar"
+
+#: builtin/fsmonitor--daemon.c:1416
+#, fuzzy
+msgid "daemon not online yet"
+msgstr "el dimoni encara no està en línia"
+
+#: builtin/fsmonitor--daemon.c:1419
+msgid "daemon terminated"
+msgstr "s'ha finalitzat el dimoni"
+
+#: builtin/fsmonitor--daemon.c:1429
+msgid "detach from console"
+msgstr "separat de la consola"
+
+#: builtin/fsmonitor--daemon.c:1432
+msgid "use <n> ipc worker threads"
+msgstr "usa <n> fils de treball ipc"
+
+#: builtin/fsmonitor--daemon.c:1435
+#, fuzzy
+msgid "max seconds to wait for background daemon startup"
+msgstr "màxim de segons a esperar a l'inici del dimoni de fons"
+
+#: builtin/fsmonitor--daemon.c:1449
+#, c-format, fuzzy
+msgid "invalid 'ipc-threads' value (%d)"
+msgstr "valor «ipc-threads» no vàlid (%)"
+
+#: builtin/fsmonitor--daemon.c:1464
+#, c-format, fuzzy
+msgid "Unhandled subcommand '%s'"
+msgstr "Subordre no gestionada '%s'"
+
+#: builtin/fsmonitor--daemon.c:1477
+#, fuzzy
+msgid "fsmonitor--daemon not supported on this platform"
+msgstr "fsmonitor--daemon no és compatible amb aquesta plataforma"
+
 #: builtin/gc.c:39
 msgid "git gc [<options>]"
 msgstr "git gc [<opcions>]"
@@ -16277,8 +16761,8 @@ msgstr "s'ha produït un error en iniciar systemctl"
 msgid "failed to run systemctl"
 msgstr "s'ha produït un error en executar systemctl"
 
-#: builtin/gc.c:2210 builtin/gc.c:2215 builtin/worktree.c:62
-#: builtin/worktree.c:944
+#: builtin/gc.c:2210 builtin/gc.c:2215 builtin/worktree.c:63
+#: builtin/worktree.c:1024
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "s'ha produït un error en suprimir «%s»"
@@ -16326,16 +16810,16 @@ msgstr "git maintenance <subcommand> [<options>]"
 msgid "invalid subcommand: %s"
 msgstr "subordre no vàlida: %s"
 
-#: builtin/grep.c:30
+#: builtin/grep.c:32
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<opcions>] [-e] <patró> [<revisió>...] [[--] <camí>...]"
 
-#: builtin/grep.c:239
+#: builtin/grep.c:241
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep: s'ha produït un error en crear fil: %s"
 
-#: builtin/grep.c:293
+#: builtin/grep.c:295
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "s'ha especificat un nombre de fils no vàlid (%d) per a %s"
@@ -16343,263 +16827,255 @@ msgstr "s'ha especificat un nombre de fils no vàlid (%d) per a %s"
 #. TRANSLATORS: %s is the configuration
 #. variable for tweaking threads, currently
 #. grep.threads
-#: builtin/grep.c:301 builtin/index-pack.c:1582 builtin/index-pack.c:1785
-#: builtin/pack-objects.c:3142
+#: builtin/grep.c:303 builtin/index-pack.c:1587 builtin/index-pack.c:1791
+#: builtin/pack-objects.c:3150
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "no s'admeten fils, s'ignorarà %s"
 
-#: builtin/grep.c:488 builtin/grep.c:617 builtin/grep.c:657
+#: builtin/grep.c:490 builtin/grep.c:619 builtin/grep.c:659
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "no s'ha pogut llegir l'arbre (%s)"
 
-#: builtin/grep.c:672
+#: builtin/grep.c:674
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "no es pot fer grep des d'un objecte de tipus %s"
 
-#: builtin/grep.c:752
+#: builtin/grep.c:754
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "l'opció «%c» espera un valor numèric"
 
-#: builtin/grep.c:851
+#: builtin/grep.c:852
 msgid "search in index instead of in the work tree"
 msgstr "cerca en l'índex en lloc de l'arbre de treball"
 
-#: builtin/grep.c:853
+#: builtin/grep.c:854
 msgid "find in contents not managed by git"
 msgstr "cerca en continguts no gestionats per git"
 
-#: builtin/grep.c:855
+#: builtin/grep.c:856
 msgid "search in both tracked and untracked files"
 msgstr "cerca tant en fitxers seguits com en no seguits"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:858
 msgid "ignore files specified via '.gitignore'"
 msgstr "ignora els fitxers especificats mitjançant «.gitignore»"
 
-#: builtin/grep.c:859
+#: builtin/grep.c:860
 msgid "recursively search in each submodule"
 msgstr "cerca recursivament a cada submòdul"
 
-#: builtin/grep.c:862
+#: builtin/grep.c:863
 msgid "show non-matching lines"
 msgstr "mostra les línies no coincidents"
 
-#: builtin/grep.c:864
+#: builtin/grep.c:865
 msgid "case insensitive matching"
 msgstr "coincidència no distingeix entre majúscules i minúscules"
 
-#: builtin/grep.c:866
+#: builtin/grep.c:867
 msgid "match patterns only at word boundaries"
 msgstr "coincideix amb els patrons només als límits de paraula"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:869
 msgid "process binary files as text"
 msgstr "processa els fitxers binaris com a text"
 
-#: builtin/grep.c:870
+#: builtin/grep.c:871
 msgid "don't match patterns in binary files"
 msgstr "no coincideixis amb els patrons en els fitxers binaris"
 
-#: builtin/grep.c:873
+#: builtin/grep.c:874
 msgid "process binary files with textconv filters"
 msgstr "processa els fitxers binaris amb filtres de textconv"
 
-#: builtin/grep.c:875
+#: builtin/grep.c:876
 msgid "search in subdirectories (default)"
 msgstr "cerca als subdirectoris (per defecte)"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:878
 msgid "descend at most <depth> levels"
 msgstr "descendeix com a màxim <profunditat> nivells"
 
-#: builtin/grep.c:881
+#: builtin/grep.c:882
 msgid "use extended POSIX regular expressions"
 msgstr "usa les expressions regulars POSIX ampliades"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:885
 msgid "use basic POSIX regular expressions (default)"
 msgstr "usa les expressions regulars POSIX bàsiques (per defecte)"
 
-#: builtin/grep.c:887
+#: builtin/grep.c:888
 msgid "interpret patterns as fixed strings"
 msgstr "interpreta els patrons com a cadenes fixes"
 
-#: builtin/grep.c:890
+#: builtin/grep.c:891
 msgid "use Perl-compatible regular expressions"
 msgstr "usa les expressions regulars compatibles amb Perl"
 
-#: builtin/grep.c:893
+#: builtin/grep.c:894
 msgid "show line numbers"
 msgstr "mostra els números de línia"
 
-#: builtin/grep.c:894
+#: builtin/grep.c:895
 msgid "show column number of first match"
 msgstr "mostra el nombre de columna de la primera coincidència"
 
-#: builtin/grep.c:895
+#: builtin/grep.c:896
 msgid "don't show filenames"
 msgstr "no mostris els noms de fitxer"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:897
 msgid "show filenames"
 msgstr "mostra els noms de fitxer"
 
-#: builtin/grep.c:898
+#: builtin/grep.c:899
 msgid "show filenames relative to top directory"
 msgstr "mostra els noms de fitxer relatius al directori superior"
 
-#: builtin/grep.c:900
+#: builtin/grep.c:901
 msgid "show only filenames instead of matching lines"
 msgstr "mostra només els noms de fitxer en lloc de les línies coincidents"
 
-#: builtin/grep.c:902
+#: builtin/grep.c:903
 msgid "synonym for --files-with-matches"
 msgstr "sinònim de --files-with-matches"
 
-#: builtin/grep.c:905
+#: builtin/grep.c:906
 msgid "show only the names of files without match"
 msgstr "mostra només els noms dels fitxers sense coincidència"
 
-#: builtin/grep.c:907
+#: builtin/grep.c:908
 msgid "print NUL after filenames"
 msgstr "imprimeix NUL després dels noms de fitxer"
 
-#: builtin/grep.c:910
+#: builtin/grep.c:911
 msgid "show only matching parts of a line"
 msgstr "mostra només les parts de coincidents de la línia"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:913
 msgid "show the number of matches instead of matching lines"
 msgstr "mostra el nombre de coincidències en lloc de les línies coincidents"
 
-#: builtin/grep.c:913
+#: builtin/grep.c:914
 msgid "highlight matches"
 msgstr "ressalta les coincidències"
 
-#: builtin/grep.c:915
+#: builtin/grep.c:916
 msgid "print empty line between matches from different files"
 msgstr "imprimeix una línia buida entre coincidències de fitxers distints"
 
-#: builtin/grep.c:917
+#: builtin/grep.c:918
 msgid "show filename only once above matches from same file"
 msgstr ""
 "mostra el nom de fitxer només una vegada a dalt de les coincidències del "
 "mateix fitxer"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:921
 msgid "show <n> context lines before and after matches"
 msgstr "mostra <n> línies de context abans i després d'una coincidència"
 
-#: builtin/grep.c:923
+#: builtin/grep.c:924
 msgid "show <n> context lines before matches"
 msgstr "mostra <n> línies de context abans d'una coincidència"
 
-#: builtin/grep.c:925
+#: builtin/grep.c:926
 msgid "show <n> context lines after matches"
 msgstr "mostra <n> línies de context després d'una coincidència"
 
-#: builtin/grep.c:927
+#: builtin/grep.c:928
 msgid "use <n> worker threads"
 msgstr "usa <n> fils de treball"
 
-#: builtin/grep.c:928
+#: builtin/grep.c:929
 msgid "shortcut for -C NUM"
 msgstr "drecera per a -C NUM"
 
-#: builtin/grep.c:931
+#: builtin/grep.c:932
 msgid "show a line with the function name before matches"
 msgstr "mostra una línia amb el nom de funció abans de les coincidències"
 
-#: builtin/grep.c:933
+#: builtin/grep.c:934
 msgid "show the surrounding function"
 msgstr "mostra la funció circumdant"
 
-#: builtin/grep.c:936
+#: builtin/grep.c:937
 msgid "read patterns from file"
 msgstr "llegeix els patrons des d'un fitxer"
 
-#: builtin/grep.c:938
+#: builtin/grep.c:939
 msgid "match <pattern>"
 msgstr "coincideix amb <patró>"
 
-#: builtin/grep.c:940
+#: builtin/grep.c:941
 msgid "combine patterns specified with -e"
 msgstr "combina els patrons especificats amb -e"
 
-#: builtin/grep.c:952
+#: builtin/grep.c:953
 msgid "indicate hit with exit status without output"
 msgstr "indica coincidència amb estat de sortida sense sortida textual"
 
-#: builtin/grep.c:954
+#: builtin/grep.c:955
 msgid "show only matches from files that match all patterns"
 msgstr ""
 "mostra només les coincidències dels fitxers que coincideixin amb tots els "
 "patrons"
 
-#: builtin/grep.c:957
+#: builtin/grep.c:958
 msgid "pager"
 msgstr "paginador"
 
-#: builtin/grep.c:957
+#: builtin/grep.c:958
 msgid "show matching files in the pager"
 msgstr "mostra els fitxers coincidents en el paginador"
 
-#: builtin/grep.c:961
+#: builtin/grep.c:962
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "permet la invocació de grep(1) (ignorat per aquesta compilació)"
 
-#: builtin/grep.c:1027
+#: builtin/grep.c:1028
 msgid "no pattern given"
 msgstr "no s'ha donat cap patró"
 
-#: builtin/grep.c:1063
+#: builtin/grep.c:1064
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr "--no-index o --untracked no es pot usar amb revisions"
 
-#: builtin/grep.c:1071
+#: builtin/grep.c:1072
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "no s'ha pogut resoldre la revisió: %s"
 
-#: builtin/grep.c:1101
+#: builtin/grep.c:1102
 msgid "--untracked not supported with --recurse-submodules"
 msgstr "--untracked no s'admet amb --recurse-submodules"
 
-#: builtin/grep.c:1105
+#: builtin/grep.c:1106
 msgid "invalid option combination, ignoring --threads"
 msgstr "combinació d'opcions no vàlida, s'està ignorant --threads"
 
-#: builtin/grep.c:1108 builtin/pack-objects.c:4059
+#: builtin/grep.c:1109 builtin/pack-objects.c:4084
 msgid "no threads support, ignoring --threads"
 msgstr "no s'admeten fils, s'ignorarà --threads"
 
-#: builtin/grep.c:1111 builtin/index-pack.c:1579 builtin/pack-objects.c:3139
+#: builtin/grep.c:1112 builtin/index-pack.c:1584 builtin/pack-objects.c:3147
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "s'ha especificat un nombre de fils no vàlid (%d)"
 
-#: builtin/grep.c:1145
+#: builtin/grep.c:1146
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager només funciona en l'arbre de treball"
 
-#: builtin/grep.c:1171
-msgid "--cached or --untracked cannot be used with --no-index"
-msgstr "--cached o --untracked no es pot usar amb --no-index"
-
-#: builtin/grep.c:1174
-msgid "--untracked cannot be used with --cached"
-msgstr "--untracked no es pot usar amb --cached"
-
-#: builtin/grep.c:1180
+#: builtin/grep.c:1179
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr ""
 "--[no-]exclude-standard no es pot utilitzar per als continguts seguits"
 
-#: builtin/grep.c:1188
+#: builtin/grep.c:1187
 msgid "both --cached and trees are given"
 msgstr "ambdós --cached i arbres venen donats"
 
@@ -16611,109 +17087,103 @@ msgstr ""
 "git hash-object [-t <tipus>] [-w] [--path=<fitxer> | --no-filters] [--stdin]"
 " [--] <fitxer>..."
 
-#: builtin/hash-object.c:84
-msgid "git hash-object  --stdin-paths"
-msgstr "git hash-object  --stdin-paths"
-
-#: builtin/hash-object.c:96
+#: builtin/hash-object.c:97
 msgid "object type"
 msgstr "tipus d'objecte"
 
-#: builtin/hash-object.c:97
+#: builtin/hash-object.c:98
 msgid "write the object into the object database"
 msgstr "escriu l'objecte a la base de dades d'objectes"
 
-#: builtin/hash-object.c:99
+#: builtin/hash-object.c:100
 msgid "read the object from stdin"
 msgstr "llegeix l'objecte des de stdin"
 
-#: builtin/hash-object.c:101
+#: builtin/hash-object.c:102
 msgid "store file as is without filters"
 msgstr "emmagatzema el fitxer tal com és sense filtres"
 
-#: builtin/hash-object.c:102
+#: builtin/hash-object.c:103
 msgid ""
 "just hash any random garbage to create corrupt objects for debugging Git"
 msgstr ""
 "només suma qualsevol brossa aleatòria per a crear objectes malmesos per a "
 "depurar al Git"
 
-#: builtin/hash-object.c:103
+#: builtin/hash-object.c:104
 msgid "process file as it were from this path"
 msgstr "processa el fitxer com si fos d'aquest camí"
 
-#: builtin/help.c:55
+#: builtin/help.c:57
 msgid "print all available commands"
 msgstr "imprimeix totes les ordres disponibles"
 
-#: builtin/help.c:57
+#: builtin/help.c:60
+#, fuzzy
+msgid "show external commands in --all"
+msgstr "mostra les ordres externes a --all"
+
+#: builtin/help.c:61
+#, fuzzy
+msgid "show aliases in --all"
+msgstr "mostra els àlies a --all"
+
+#: builtin/help.c:62
 msgid "exclude guides"
 msgstr "exclou guies"
 
-#: builtin/help.c:58
+#: builtin/help.c:63
 msgid "show man page"
 msgstr "mostra la pàgina de manual"
 
-#: builtin/help.c:59
+#: builtin/help.c:64
 msgid "show manual in web browser"
 msgstr "mostra la pàgina de manual en el navegador web"
 
-#: builtin/help.c:61
+#: builtin/help.c:66
 msgid "show info page"
 msgstr "mostra la pàgina d'informació"
 
-#: builtin/help.c:63
+#: builtin/help.c:68
 msgid "print command description"
 msgstr "imprimeix la descripció de l'ordre"
 
-#: builtin/help.c:65
+#: builtin/help.c:70
 msgid "print list of useful guides"
 msgstr "imprimeix la llista de guies útils"
 
-#: builtin/help.c:67
+#: builtin/help.c:72
 msgid "print all configuration variable names"
 msgstr "imprimeix tots els noms de les variables de configuració"
 
-#: builtin/help.c:78
-msgid ""
-"git help [-a|--all] [--[no-]verbose]]\n"
-"         [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
-msgstr ""
-"git help [-a|--all] [--[no-]verbose]]\n"
-"         [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
-
-#: builtin/help.c:80
-msgid "git help [-g|--guides]"
-msgstr "git help [-g|--guides]"
+#: builtin/help.c:84
+msgid "git help [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
+msgstr "git help [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
 
-#: builtin/help.c:81
-msgid "git help [-c|--config]"
-msgstr "git help [-c|--config]"
-
-#: builtin/help.c:196
+#: builtin/help.c:201
 #, c-format
 msgid "unrecognized help format '%s'"
 msgstr "format d'ajuda no reconegut «%s»"
 
-#: builtin/help.c:222
+#: builtin/help.c:227
 msgid "Failed to start emacsclient."
 msgstr "S'ha produït un error en iniciar emacsclient."
 
-#: builtin/help.c:235
+#: builtin/help.c:240
 msgid "Failed to parse emacsclient version."
 msgstr "S'ha produït un error en analitzar la versió d'emacsclient."
 
-#: builtin/help.c:243
+#: builtin/help.c:248
 #, c-format
 msgid "emacsclient version '%d' too old (< 22)."
 msgstr "la versió d'emacsclient «%d» és massa vella (< 22)."
 
-#: builtin/help.c:261 builtin/help.c:283 builtin/help.c:293 builtin/help.c:301
+#: builtin/help.c:266 builtin/help.c:288 builtin/help.c:298 builtin/help.c:306
 #, c-format
 msgid "failed to exec '%s'"
 msgstr "s'ha produït un error en executar «%s»"
 
-#: builtin/help.c:339
+#: builtin/help.c:344
 #, c-format
 msgid ""
 "'%s': path for unsupported man viewer.\n"
@@ -16722,7 +17192,7 @@ msgstr ""
 "«%s»: camí a un visualitzador de manuals no compatible.\n"
 "Considereu usar «man.<eina>.cmd» en lloc d'això."
 
-#: builtin/help.c:351
+#: builtin/help.c:356
 #, c-format
 msgid ""
 "'%s': cmd for supported man viewer.\n"
@@ -16731,42 +17201,59 @@ msgstr ""
 "«%s»: ordre per a un visualitzador de manuals compatible.\n"
 "Considereu usar «man.<eina>.path» en lloc d'això."
 
-#: builtin/help.c:466
+#: builtin/help.c:471
 #, c-format
 msgid "'%s': unknown man viewer."
 msgstr "«%s»: visualitzador de manuals desconegut."
 
-#: builtin/help.c:482
+#: builtin/help.c:487
 msgid "no man viewer handled the request"
 msgstr "cap visualitzador de manuals ha gestionat la sol·licitud"
 
-#: builtin/help.c:489
+#: builtin/help.c:494
 msgid "no info viewer handled the request"
 msgstr "cap visualitzador d'informació ha gestionat la sol·licitud"
 
-#: builtin/help.c:550 builtin/help.c:561 git.c:348
+#: builtin/help.c:555 builtin/help.c:566 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "«%s» és un àlies de «%s»"
 
-#: builtin/help.c:564 git.c:380
+#: builtin/help.c:569 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr "cadena «alias.%s» incorrecte: %s"
 
-#: builtin/help.c:580
-msgid "this option doesn't take any other arguments"
-msgstr "aquesta opció no accepta cap altre argument"
+#: builtin/help.c:611
+#, c-format, fuzzy
+msgid "the '%s' option doesn't take any non-option arguments"
+msgstr "l'opció «%s» no pren cap argument que no sigui una opció"
+
+#: builtin/help.c:631
+#, fuzzy
+msgid ""
+"the '--no-[external-commands|aliases]' options can only be used with '--all'"
+msgstr ""
+"les opcions «--no-exexternal-commands|aliases with» només es poden utilitzar"
+" amb «--all»"
 
-#: builtin/help.c:601 builtin/help.c:628
+#: builtin/help.c:643 builtin/help.c:671
 #, c-format
 msgid "usage: %s%s"
 msgstr "ús: %s%s"
 
-#: builtin/help.c:623
+#: builtin/help.c:666
 msgid "'git help config' for more information"
 msgstr "«git help config» per a més informació"
 
+#: builtin/hook.c:10
+msgid "git hook run [--ignore-missing] <hook-name> [-- <hook-args>]"
+msgstr "git hook run [--ignore-missing] <hook-name> [-- <hook-args>]"
+
+#: builtin/hook.c:30
+msgid "silently ignore missing requested <hook-name>"
+msgstr "ignora silenciosament la sol·licitud <hook-name> perduda"
+
 #: builtin/index-pack.c:221
 #, c-format
 msgid "object type mismatch at %s"
@@ -16801,52 +17288,53 @@ msgstr "error de lectura d'entrada"
 msgid "used more bytes than were available"
 msgstr "s'han usat més octets que hi havia disponibles"
 
-#: builtin/index-pack.c:324 builtin/pack-objects.c:756
+#: builtin/index-pack.c:324 builtin/pack-objects.c:754
 msgid "pack too large for current definition of off_t"
 msgstr "paquet massa gran per a la definició actual d'off_t"
 
-#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
-msgid "pack exceeds maximum allowed size"
-msgstr "el paquet supera la mida màxima permesa"
+#: builtin/index-pack.c:329
+#, c-format
+msgid "pack exceeds maximum allowed size (%s)"
+msgstr "el paquet supera la mida màxima permesa (%s)"
 
-#: builtin/index-pack.c:358
+#: builtin/index-pack.c:362
 msgid "pack signature mismatch"
 msgstr "hi ha una discordança de signatura de paquet"
 
-#: builtin/index-pack.c:360
+#: builtin/index-pack.c:364
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "la versió de paquet %<PRIu32> no és compatible"
 
-#: builtin/index-pack.c:376
+#: builtin/index-pack.c:380
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "el paquet té un objecte incorrecte a la posició %<PRIuMAX>: %s"
 
-#: builtin/index-pack.c:482
+#: builtin/index-pack.c:485
 #, c-format
 msgid "inflate returned %d"
 msgstr "la inflació ha retornat %d"
 
-#: builtin/index-pack.c:531
+#: builtin/index-pack.c:534
 msgid "offset value overflow for delta base object"
 msgstr ""
 "desbordament de valor de desplaçament per a l'objecte base de diferències"
 
-#: builtin/index-pack.c:539
+#: builtin/index-pack.c:542
 msgid "delta base offset is out of bound"
 msgstr "el desplaçament de base de diferències està fora de límits"
 
-#: builtin/index-pack.c:547
+#: builtin/index-pack.c:550
 #, c-format
 msgid "unknown object type %d"
 msgstr "tipus d'objecte desconegut %d"
 
-#: builtin/index-pack.c:578
+#: builtin/index-pack.c:581
 msgid "cannot pread pack file"
 msgstr "no es pot fer pread en el fitxer empaquetat"
 
-#: builtin/index-pack.c:580
+#: builtin/index-pack.c:583
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
@@ -16854,193 +17342,193 @@ msgstr[0] "el final del fitxer empaquetat és prematur, manca %<PRIuMAX> octet"
 msgstr[1] ""
 "el final del fitxer empaquetat és prematur, manquen %<PRIuMAX> octets"
 
-#: builtin/index-pack.c:606
+#: builtin/index-pack.c:609
 msgid "serious inflate inconsistency"
 msgstr "hi ha una inconsistència seriosa d'inflació"
 
-#: builtin/index-pack.c:751 builtin/index-pack.c:757 builtin/index-pack.c:781
-#: builtin/index-pack.c:820 builtin/index-pack.c:829
+#: builtin/index-pack.c:754 builtin/index-pack.c:760 builtin/index-pack.c:784
+#: builtin/index-pack.c:823 builtin/index-pack.c:832
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "S'HA TROBAT UNA COL·LISIÓ SHA1 AMB %s !"
 
-#: builtin/index-pack.c:754 builtin/pack-objects.c:292
-#: builtin/pack-objects.c:352 builtin/pack-objects.c:458
+#: builtin/index-pack.c:757 builtin/pack-objects.c:290
+#: builtin/pack-objects.c:350 builtin/pack-objects.c:456
 #, c-format
 msgid "unable to read %s"
 msgstr "no s'ha pogut llegir %s"
 
-#: builtin/index-pack.c:818
+#: builtin/index-pack.c:821
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "no es pot llegir la informació d'objecte existent %s"
 
-#: builtin/index-pack.c:826
+#: builtin/index-pack.c:829
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "no es pot llegir l'objecte existent %s"
 
-#: builtin/index-pack.c:840
+#: builtin/index-pack.c:843
 #, c-format
 msgid "invalid blob object %s"
 msgstr "objecte de blob no vàlid %s"
 
-#: builtin/index-pack.c:843 builtin/index-pack.c:862
+#: builtin/index-pack.c:846 builtin/index-pack.c:865
 msgid "fsck error in packed object"
 msgstr "fsck error en un objecte empaquetat"
 
-#: builtin/index-pack.c:864
+#: builtin/index-pack.c:867
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr "No tots els objectes fills de %s són abastables"
 
-#: builtin/index-pack.c:925 builtin/index-pack.c:972
+#: builtin/index-pack.c:928 builtin/index-pack.c:975
 msgid "failed to apply delta"
 msgstr "s'ha produït un error en aplicar la diferència"
 
-#: builtin/index-pack.c:1156
+#: builtin/index-pack.c:1161
 msgid "Receiving objects"
 msgstr "S'estan rebent objectes"
 
-#: builtin/index-pack.c:1156
+#: builtin/index-pack.c:1161
 msgid "Indexing objects"
 msgstr "S'estan indexant objectes"
 
-#: builtin/index-pack.c:1190
+#: builtin/index-pack.c:1195
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "el paquet és malmès (discordança SHA1)"
 
-#: builtin/index-pack.c:1195
+#: builtin/index-pack.c:1200
 msgid "cannot fstat packfile"
 msgstr "no es pot fer fstat en el fitxer de paquet"
 
-#: builtin/index-pack.c:1198
+#: builtin/index-pack.c:1203
 msgid "pack has junk at the end"
 msgstr "el paquet té brossa al seu final"
 
-#: builtin/index-pack.c:1210
+#: builtin/index-pack.c:1215
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr "confusió més enllà de la bogeria en parse_pack_objects()"
 
-#: builtin/index-pack.c:1233
+#: builtin/index-pack.c:1238
 msgid "Resolving deltas"
 msgstr "S'estan resolent les diferències"
 
-#: builtin/index-pack.c:1244 builtin/pack-objects.c:2905
+#: builtin/index-pack.c:1249 builtin/pack-objects.c:2913
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "no s'ha pogut crear fil: %s"
 
-#: builtin/index-pack.c:1277
+#: builtin/index-pack.c:1282
 msgid "confusion beyond insanity"
 msgstr "confusió més enllà de la bogeria"
 
-#: builtin/index-pack.c:1283
+#: builtin/index-pack.c:1288
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
 msgstr[0] "s'ha completat amb %d objecte local"
 msgstr[1] "s'ha completat amb %d objectes locals"
 
-#: builtin/index-pack.c:1295
+#: builtin/index-pack.c:1300
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr "Suma de verificació final no esperada per a %s (corrupció de disc?)"
 
-#: builtin/index-pack.c:1299
+#: builtin/index-pack.c:1304
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] "El paquet té %d diferència no resolta"
 msgstr[1] "El paquet té %d diferències no resoltes"
 
-#: builtin/index-pack.c:1323
+#: builtin/index-pack.c:1328
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "no s'ha pogut desinflar l'objecte annexat (%d)"
 
-#: builtin/index-pack.c:1419
+#: builtin/index-pack.c:1423
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "l'objecte local %s és malmès"
 
-#: builtin/index-pack.c:1440
+#: builtin/index-pack.c:1445
 #, c-format
 msgid "packfile name '%s' does not end with '.%s'"
 msgstr "el nom del fitxer de paquet «%s» no acaba amb «.%s»"
 
-#: builtin/index-pack.c:1464
+#: builtin/index-pack.c:1469
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "no es pot escriure «%s» al fitxer «%s»"
 
-#: builtin/index-pack.c:1472
+#: builtin/index-pack.c:1477
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr "no s'ha pogut tancar el fitxer %s escrit «%s»"
 
-#: builtin/index-pack.c:1489
+#: builtin/index-pack.c:1494
 #, c-format
 msgid "unable to rename temporary '*.%s' file to '%s'"
 msgstr "no s'ha pogut canviar el nom del fitxer temporal «*.%s» a «%s»"
 
-#: builtin/index-pack.c:1514
+#: builtin/index-pack.c:1519
 msgid "error while closing pack file"
 msgstr "error en tancar el fitxer empaquetat"
 
-#: builtin/index-pack.c:1573 builtin/pack-objects.c:3150
+#: builtin/index-pack.c:1578 builtin/pack-objects.c:3158
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "pack.indexversion=%<PRIu32> incorrecte"
 
-#: builtin/index-pack.c:1643
+#: builtin/index-pack.c:1648
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "No es pot obrir el fitxer empaquetat existent «%s»"
 
-#: builtin/index-pack.c:1645
+#: builtin/index-pack.c:1650
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "No es pot obrir el fitxer d'índex de paquets existent de «%s»"
 
-#: builtin/index-pack.c:1693
+#: builtin/index-pack.c:1698
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] "sense diferències: %d objecte"
 msgstr[1] "sense diferències: %d objectes"
 
-#: builtin/index-pack.c:1700
+#: builtin/index-pack.c:1705
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
 msgstr[0] "longitud de cadena = %d: %lu objecte"
 msgstr[1] "longitud de cadena = %d: %lu objectes"
 
-#: builtin/index-pack.c:1742
+#: builtin/index-pack.c:1748
 msgid "Cannot come back to cwd"
 msgstr "No es pot tornar al directori de treball actual"
 
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1799
-#: builtin/index-pack.c:1819 builtin/index-pack.c:1823
+#: builtin/index-pack.c:1802 builtin/index-pack.c:1805
+#: builtin/index-pack.c:1825 builtin/index-pack.c:1829
 #, c-format
 msgid "bad %s"
 msgstr "%s incorrecte"
 
-#: builtin/index-pack.c:1829 builtin/init-db.c:379 builtin/init-db.c:614
+#: builtin/index-pack.c:1835 builtin/init-db.c:379 builtin/init-db.c:614
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "algorisme hash desconegut «%s»"
 
-#: builtin/index-pack.c:1850
+#: builtin/index-pack.c:1856
 msgid "--stdin requires a git repository"
 msgstr "--stdin requereix un repositori git"
 
-#: builtin/index-pack.c:1867
+#: builtin/index-pack.c:1873
 msgid "--verify with no packfile name given"
 msgstr "s'ha donat --verify sense nom de fitxer de paquet"
 
-#: builtin/index-pack.c:1933 builtin/unpack-objects.c:584
+#: builtin/index-pack.c:1939 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "error fsck als objectes del paquet"
 
@@ -17250,40 +17738,40 @@ msgstr "--trailer amb --only-input no té sentit"
 msgid "no input file given for in-place editing"
 msgstr "no s'ha donat cap fitxer d'entrada per a edició in situ"
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<opcions>] [<rang-de-revisions>] [[--] <camí>...]"
 
-#: builtin/log.c:60
+#: builtin/log.c:61
 msgid "git show [<options>] <object>..."
 msgstr "git show [<opcions>] <objecte>..."
 
-#: builtin/log.c:113
+#: builtin/log.c:114
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "opció --decorate no vàlida: %s"
 
-#: builtin/log.c:180
+#: builtin/log.c:181
 msgid "show source"
 msgstr "mostra la font"
 
-#: builtin/log.c:181
+#: builtin/log.c:182
 msgid "use mail map file"
 msgstr "usa el fitxer de mapa de correu"
 
-#: builtin/log.c:184
+#: builtin/log.c:185
 msgid "only decorate refs that match <pattern>"
 msgstr "només decora les referències que coincideixin amb <patró>"
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "do not decorate refs that match <pattern>"
 msgstr "no decoris les referències que coincideixen amb <patró>"
 
-#: builtin/log.c:187
+#: builtin/log.c:188
 msgid "decorate options"
 msgstr "opcions de decoració"
 
-#: builtin/log.c:190
+#: builtin/log.c:191
 msgid ""
 "trace the evolution of line range <start>,<end> or function :<funcname> in "
 "<file>"
@@ -17291,89 +17779,94 @@ msgstr ""
 "traça l'evolució del rang de línia <start>,<end> o funcions :<funcname> a "
 "<file>"
 
-#: builtin/log.c:213
+#: builtin/log.c:214
 msgid "-L<range>:<file> cannot be used with pathspec"
 msgstr "-L<range>:<file> no es pot usar amb una especificació de camí"
 
-#: builtin/log.c:321
+#: builtin/log.c:322
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "Sortida final: %d %s\n"
 
-#: builtin/log.c:586
+#: builtin/log.c:429
+#, fuzzy
+msgid "unable to create temporary object directory"
+msgstr "no s'ha pogut crear el directori temporal de l'objecte"
+
+#: builtin/log.c:599
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: fitxer incorrecte"
 
-#: builtin/log.c:601 builtin/log.c:691
+#: builtin/log.c:614 builtin/log.c:706
 #, c-format
 msgid "could not read object %s"
 msgstr "no s'ha pogut llegir l'objecte %s"
 
-#: builtin/log.c:716
+#: builtin/log.c:731
 #, c-format
 msgid "unknown type: %d"
 msgstr "tipus desconegut: %d"
 
-#: builtin/log.c:861
+#: builtin/log.c:880
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr "%s: cobertura no vàlida des del mode descripció"
 
-#: builtin/log.c:868
+#: builtin/log.c:887
 msgid "format.headers without value"
 msgstr "format.headers sense valor"
 
-#: builtin/log.c:997
+#: builtin/log.c:1016
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "no s'ha pogut obrir el fitxer de pedaç %s"
 
-#: builtin/log.c:1014
+#: builtin/log.c:1033
 msgid "need exactly one range"
 msgstr "necessita exactament un interval"
 
-#: builtin/log.c:1024
+#: builtin/log.c:1043
 msgid "not a range"
 msgstr "no és un interval"
 
-#: builtin/log.c:1188
+#: builtin/log.c:1207
 msgid "cover letter needs email format"
 msgstr "la carta de presentació necessita un format de correu electrònic"
 
-#: builtin/log.c:1194
+#: builtin/log.c:1213
 msgid "failed to create cover-letter file"
 msgstr "s'ha produït un error en crear el fitxer de carta de presentació"
 
-#: builtin/log.c:1281
+#: builtin/log.c:1300
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "in-reply-to boig: %s"
 
-#: builtin/log.c:1308
+#: builtin/log.c:1327
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<opcions>] [<des-de> | <rang-de-revisions>]"
 
-#: builtin/log.c:1366
+#: builtin/log.c:1385
 msgid "two output directories?"
 msgstr "dos directoris de sortida?"
 
-#: builtin/log.c:1517 builtin/log.c:2344 builtin/log.c:2346 builtin/log.c:2358
+#: builtin/log.c:1536 builtin/log.c:2369 builtin/log.c:2371 builtin/log.c:2383
 #, c-format
 msgid "unknown commit %s"
 msgstr "comissió desconeguda %s"
 
-#: builtin/log.c:1528 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1547 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "s'ha produït un error en resoldre «%s» com a referència vàlida"
 
-#: builtin/log.c:1537
+#: builtin/log.c:1556
 msgid "could not find exact merge base"
 msgstr "no s'ha pogut trobar la base exacta de la fusió"
 
-#: builtin/log.c:1547
+#: builtin/log.c:1566
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -17381,284 +17874,287 @@ msgid ""
 msgstr ""
 "no s'ha pogut obtenir la font, si voleu registrar la comissió base\n"
 "automàticament, useu git branch --set-upstream-to per a seguir una\n"
-"una branca remota. També podeu especificar la comissió base amb "
-"--base=<base-commit-id> manualment"
+"una branca remota. També podeu especificar la comissió base amb --base=<base-commit-id> manualment"
 
-#: builtin/log.c:1570
+#: builtin/log.c:1589
 msgid "failed to find exact merge base"
 msgstr "no s'ha pogut trobar la base exacta de la fusió"
 
-#: builtin/log.c:1587
+#: builtin/log.c:1606
 msgid "base commit should be the ancestor of revision list"
 msgstr "la comissió base ha de ser l'avantpassat de la llista de revisions"
 
-#: builtin/log.c:1597
+#: builtin/log.c:1616
 msgid "base commit shouldn't be in revision list"
 msgstr "la comissió base no ha de ser en la llista de revisions"
 
-#: builtin/log.c:1655
+#: builtin/log.c:1674
 msgid "cannot get patch id"
 msgstr "no es pot obtenir l'id del pedaç"
 
-#: builtin/log.c:1718
+#: builtin/log.c:1737
 msgid "failed to infer range-diff origin of current series"
 msgstr ""
 "no s'ha pogut inferir el rang de diferències d'origen de les sèries actuals"
 
-#: builtin/log.c:1720
+#: builtin/log.c:1739
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr ""
 "utilitzant «%s» com a origen de rang de diferències de la sèrie actual"
 
-#: builtin/log.c:1764
+#: builtin/log.c:1783
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "usa [PATCH n/m] fins i tot amb un sol pedaç"
 
-#: builtin/log.c:1767
+#: builtin/log.c:1786
 msgid "use [PATCH] even with multiple patches"
 msgstr "usa [PATCH] fins i tot amb múltiples pedaços"
 
-#: builtin/log.c:1771
+#: builtin/log.c:1790
 msgid "print patches to standard out"
 msgstr "imprimeix els pedaços a la sortida estàndard"
 
-#: builtin/log.c:1773
+#: builtin/log.c:1792
 msgid "generate a cover letter"
 msgstr "genera una carta de presentació"
 
-#: builtin/log.c:1775
+#: builtin/log.c:1794
 msgid "use simple number sequence for output file names"
 msgstr "usa una seqüència de números per als noms dels fitxers de sortida"
 
-#: builtin/log.c:1776
+#: builtin/log.c:1795
 msgid "sfx"
 msgstr "sufix"
 
-#: builtin/log.c:1777
+#: builtin/log.c:1796
 msgid "use <sfx> instead of '.patch'"
 msgstr "usa <sufix> en lloc de «.patch»"
 
-#: builtin/log.c:1779
+#: builtin/log.c:1798
 msgid "start numbering patches at <n> instead of 1"
 msgstr "comença numerant els pedaços a <n> en lloc d'1"
 
-#: builtin/log.c:1780
+#: builtin/log.c:1799
 msgid "reroll-count"
 msgstr "reroll-count"
 
-#: builtin/log.c:1781
+#: builtin/log.c:1800
 msgid "mark the series as Nth re-roll"
 msgstr "marca la sèrie com a l'enèsima llançada"
 
-#: builtin/log.c:1783
+#: builtin/log.c:1802
 msgid "max length of output filename"
 msgstr "mida màxima del nom del fitxer de sortida"
 
-#: builtin/log.c:1785
+#: builtin/log.c:1804
 msgid "use [RFC PATCH] instead of [PATCH]"
 msgstr "useu [RFC PATCH] en comptes de [PATCH]"
 
-#: builtin/log.c:1788
+#: builtin/log.c:1807
 msgid "cover-from-description-mode"
 msgstr "cover-from-description-mode"
 
-#: builtin/log.c:1789
+#: builtin/log.c:1808
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr ""
 "genera parts d'una carta de presentació basant-se en la descripció d'una "
 "branca"
 
-#: builtin/log.c:1791
+#: builtin/log.c:1810
 msgid "use [<prefix>] instead of [PATCH]"
 msgstr "useu [<prefix>] en comptes de [PATCH]"
 
-#: builtin/log.c:1794
+#: builtin/log.c:1813
 msgid "store resulting files in <dir>"
 msgstr "emmagatzema els fitxers resultants a <directori>"
 
-#: builtin/log.c:1797
+#: builtin/log.c:1816
 msgid "don't strip/add [PATCH]"
 msgstr "no despullis/afegeixis [PATCH]"
 
-#: builtin/log.c:1800
+#: builtin/log.c:1819
 msgid "don't output binary diffs"
 msgstr "no emetis diferències binàries"
 
-#: builtin/log.c:1802
+#: builtin/log.c:1821
 msgid "output all-zero hash in From header"
 msgstr "emet un hash de tots zeros en la capçalera From"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1823
 msgid "don't include a patch matching a commit upstream"
 msgstr "no incloguis pedaços que coincideixin amb comissions a la font"
 
-#: builtin/log.c:1806
+#: builtin/log.c:1825
 msgid "show patch format instead of default (patch + stat)"
 msgstr ""
 "mostra el format de pedaç en lloc del per defecte (pedaç + estadístiques)"
 
-#: builtin/log.c:1808
+#: builtin/log.c:1827
 msgid "Messaging"
 msgstr "Missatgeria"
 
-#: builtin/log.c:1809
+#: builtin/log.c:1828
 msgid "header"
 msgstr "capçalera"
 
-#: builtin/log.c:1810
+#: builtin/log.c:1829
 msgid "add email header"
 msgstr "afegeix una capçalera de correu electrònic"
 
-#: builtin/log.c:1811 builtin/log.c:1812
+#: builtin/log.c:1830 builtin/log.c:1831
 msgid "email"
 msgstr "correu electrònic"
 
-#: builtin/log.c:1811
+#: builtin/log.c:1830
 msgid "add To: header"
 msgstr "afegeix la capçalera To:"
 
-#: builtin/log.c:1812
+#: builtin/log.c:1831
 msgid "add Cc: header"
 msgstr "afegeix la capçalera Cc:"
 
-#: builtin/log.c:1813
+#: builtin/log.c:1832
 msgid "ident"
 msgstr "identitat"
 
-#: builtin/log.c:1814
+#: builtin/log.c:1833
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 "estableix l'adreça From a <identitat> (o la identitat del comitent si manca)"
 
-#: builtin/log.c:1816
+#: builtin/log.c:1835
 msgid "message-id"
 msgstr "ID de missatge"
 
-#: builtin/log.c:1817
+#: builtin/log.c:1836
 msgid "make first mail a reply to <message-id>"
 msgstr "fes que el primer missatge sigui una resposta a <ID de missatge>"
 
-#: builtin/log.c:1818 builtin/log.c:1821
+#: builtin/log.c:1837 builtin/log.c:1840
 msgid "boundary"
 msgstr "límit"
 
-#: builtin/log.c:1819
+#: builtin/log.c:1838
 msgid "attach the patch"
 msgstr "adjunta el pedaç"
 
-#: builtin/log.c:1822
+#: builtin/log.c:1841
 msgid "inline the patch"
 msgstr "posa el pedaç en el cos"
 
-#: builtin/log.c:1826
+#: builtin/log.c:1845
 msgid "enable message threading, styles: shallow, deep"
 msgstr "habilita l'enfilada de missatges, estils: shallow, deep"
 
-#: builtin/log.c:1828
+#: builtin/log.c:1847
 msgid "signature"
 msgstr "signatura"
 
-#: builtin/log.c:1829
+#: builtin/log.c:1848
 msgid "add a signature"
 msgstr "afegeix una signatura"
 
-#: builtin/log.c:1830
+#: builtin/log.c:1849
 msgid "base-commit"
 msgstr "comissió base"
 
-#: builtin/log.c:1831
+#: builtin/log.c:1850
 msgid "add prerequisite tree info to the patch series"
 msgstr "afegeix la informació d'arbre requerida a la sèrie de pedaços"
 
-#: builtin/log.c:1834
+#: builtin/log.c:1853
 msgid "add a signature from a file"
 msgstr "afegeix una signatura des d'un fitxer"
 
-#: builtin/log.c:1835
+#: builtin/log.c:1854
 msgid "don't print the patch filenames"
 msgstr "no imprimeixis els noms de fitxer del pedaç"
 
-#: builtin/log.c:1837
+#: builtin/log.c:1856
 msgid "show progress while generating patches"
 msgstr "mostra el progrés durant la generació de pedaços"
 
-#: builtin/log.c:1839
+#: builtin/log.c:1858
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
 "mostra els canvis contra <rev> a la carta de presentació o a un sol pedaç"
 
-#: builtin/log.c:1842
+#: builtin/log.c:1861
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
 "mostra els canvis contra <refspec> a la carta de presentació o a un sol "
 "pedaç"
 
-#: builtin/log.c:1844 builtin/range-diff.c:28
+#: builtin/log.c:1863 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr "percentatge pel qual la creació és ponderada"
 
-#: builtin/log.c:1931
+#: builtin/log.c:1953
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "línia d'identitat no vàlida: %s"
 
-#: builtin/log.c:1956
+#: builtin/log.c:1978
 msgid "--name-only does not make sense"
 msgstr "--name-only no té sentit"
 
-#: builtin/log.c:1958
+#: builtin/log.c:1980
 msgid "--name-status does not make sense"
 msgstr "--name-status no té sentit"
 
-#: builtin/log.c:1960
+#: builtin/log.c:1982
 msgid "--check does not make sense"
 msgstr "--check no té sentit"
 
-#: builtin/log.c:2104
+#: builtin/log.c:1984
+msgid "--remerge-diff does not make sense"
+msgstr "--remerge-diff no té sentit"
+
+#: builtin/log.c:2129
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff requereix --cover-letter o un sol pedaç"
 
-#: builtin/log.c:2108
+#: builtin/log.c:2133
 msgid "Interdiff:"
 msgstr "Interdiff:"
 
-#: builtin/log.c:2109
+#: builtin/log.c:2134
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Interdiff contra v%d:"
 
-#: builtin/log.c:2119
+#: builtin/log.c:2144
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff requereix --cover-letter o un sol pedaç"
 
-#: builtin/log.c:2127
+#: builtin/log.c:2152
 msgid "Range-diff:"
 msgstr "Diferència de l'interval:"
 
-#: builtin/log.c:2128
+#: builtin/log.c:2153
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "Diferència de l'interval contra el v%d:"
 
-#: builtin/log.c:2139
+#: builtin/log.c:2164
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "no s'ha pogut llegir el fitxer de signatura «%s»"
 
-#: builtin/log.c:2175
+#: builtin/log.c:2200
 msgid "Generating patches"
 msgstr "S'estan generant els pedaços"
 
-#: builtin/log.c:2219
+#: builtin/log.c:2244
 msgid "failed to create output files"
 msgstr "no s'han pogut crear els fitxers de sortida"
 
-#: builtin/log.c:2279
+#: builtin/log.c:2304
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<font> [<cap> [<límit>]]]"
 
-#: builtin/log.c:2333
+#: builtin/log.c:2358
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> "
@@ -17756,10 +18252,6 @@ msgstr "afegeix les exclusions estàndards de git"
 msgid "make the output relative to the project top directory"
 msgstr "fes que la sortida sigui relativa al directori superior del projecte"
 
-#: builtin/ls-files.c:667
-msgid "recurse through submodules"
-msgstr "inclou recursivament als submòduls"
-
 #: builtin/ls-files.c:669
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr "si qualsevol <fitxer> no és en l'índex, tracta-ho com a error"
@@ -17799,7 +18291,7 @@ msgstr ""
 msgid "do not print remote URL"
 msgstr "no imprimeixis l'URL remot"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1103
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1131
 msgid "exec"
 msgstr "executable"
 
@@ -17831,43 +18323,73 @@ msgstr "surt amb codi de sortida 2 si no es troba cap referència coincident"
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr "mostra la referència subjacent a més de l'objecte que assenyali"
 
-#: builtin/ls-tree.c:30
+#: builtin/ls-tree.c:36
 msgid "git ls-tree [<options>] <tree-ish> [<path>...]"
 msgstr "git ls-tree [<opcions>] <arbre> [<camí>...]"
 
-#: builtin/ls-tree.c:128
+#: builtin/ls-tree.c:54
+#, c-format, fuzzy
+msgid "could not get object info about '%s'"
+msgstr "no s'ha pogut obtenir la informació de l'objecte sobre «%s»"
+
+#: builtin/ls-tree.c:79
+#, c-format, fuzzy
+msgid "bad ls-tree format: element '%s' does not start with '('"
+msgstr "format ls-tree dolent: l'element '%s' no comença amb '('"
+
+#: builtin/ls-tree.c:83
+#, c-format, fuzzy
+msgid "bad ls-tree format: element '%s' does not end in ')'"
+msgstr "format ls-tree dolent: l'element '%s' no acaba en ')'"
+
+#: builtin/ls-tree.c:109
+#, c-format, fuzzy
+msgid "bad ls-tree format: %%%.*s"
+msgstr "format incorrecte de ls-tree:%%.*s"
+
+#: builtin/ls-tree.c:336
 msgid "only show trees"
 msgstr "mostra només els arbres"
 
-#: builtin/ls-tree.c:130
+#: builtin/ls-tree.c:338
 msgid "recurse into subtrees"
 msgstr "inclou recursivament als subarbres"
 
-#: builtin/ls-tree.c:132
+#: builtin/ls-tree.c:340
 msgid "show trees when recursing"
 msgstr "mostra els arbres quan es treballa recursivament"
 
-#: builtin/ls-tree.c:135
+#: builtin/ls-tree.c:343
 msgid "terminate entries with NUL byte"
 msgstr "acaba les entrades amb un octet NUL"
 
-#: builtin/ls-tree.c:136
+#: builtin/ls-tree.c:344
 msgid "include object size"
 msgstr "mida de l'objecte d'inclusió"
 
-#: builtin/ls-tree.c:138 builtin/ls-tree.c:140
+#: builtin/ls-tree.c:346 builtin/ls-tree.c:348
 msgid "list only filenames"
 msgstr "llista només els noms de fitxer"
 
-#: builtin/ls-tree.c:143
+#: builtin/ls-tree.c:350
+#, fuzzy
+msgid "list only objects"
+msgstr "llista només els objectes"
+
+#: builtin/ls-tree.c:353
 msgid "use full path names"
 msgstr "usa els noms de camí complets"
 
-#: builtin/ls-tree.c:145
+#: builtin/ls-tree.c:355
 msgid "list entire tree; not just current directory (implies --full-name)"
 msgstr ""
 "llista l'arbre sencer; no només el directori actual (implica --full-name)"
 
+#: builtin/ls-tree.c:391
+#, fuzzy
+msgid "--format can't be combined with other format-altering options"
+msgstr "--format no es pot combinar amb altres opcions d'alteració de format"
+
 #. TRANSLATORS: keep <> in "<" mail ">" info.
 #: builtin/mailinfo.c:14
 msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
@@ -17917,7 +18439,12 @@ msgstr "acció quan es troba un CR en una cita"
 msgid "use headers in message's body"
 msgstr "utilitza les capçaleres en el cos del missatge"
 
-#: builtin/mailsplit.c:239
+#: builtin/mailsplit.c:227
+#, fuzzy
+msgid "reading patches from stdin/tty..."
+msgstr "llegir pedaços de stdin/tty..."
+
+#: builtin/mailsplit.c:242
 #, c-format
 msgid "empty mbox: '%s'"
 msgstr "mbox buit: «%s»"
@@ -17942,23 +18469,23 @@ msgstr "git merge-base --is-ancestor <comissió> <comissió>"
 msgid "git merge-base --fork-point <ref> [<commit>]"
 msgstr "git merge-base --fork-point <referència> [<comissió>]"
 
-#: builtin/merge-base.c:143
+#: builtin/merge-base.c:144
 msgid "output all common ancestors"
 msgstr "emet tots els avantpassats comuns"
 
-#: builtin/merge-base.c:145
+#: builtin/merge-base.c:146
 msgid "find ancestors for a single n-way merge"
 msgstr "troba els avantpassats per a una sola fusió d'n vies"
 
-#: builtin/merge-base.c:147
+#: builtin/merge-base.c:148
 msgid "list revs not reachable from others"
 msgstr "llista les revisions no abastables d'altres"
 
-#: builtin/merge-base.c:149
+#: builtin/merge-base.c:150
 msgid "is the first one ancestor of the other?"
 msgstr "és la primera un avantpassat de l'altre?"
 
-#: builtin/merge-base.c:151
+#: builtin/merge-base.c:152
 msgid "find where <commit> forked from reflog of <ref>"
 msgstr ""
 "troba on <comissió> s'ha bifurcat del registre de referències de "
@@ -18110,7 +18637,7 @@ msgid "verify that the named commit has a valid GPG signature"
 msgstr "verifica que la comissió anomenada tingui una signatura GPG vàlida"
 
 #: builtin/merge.c:280 builtin/notes.c:785 builtin/pull.c:172
-#: builtin/rebase.c:1117 builtin/revert.c:114
+#: builtin/rebase.c:1145 builtin/revert.c:114
 msgid "strategy"
 msgstr "estratègia"
 
@@ -18227,8 +18754,8 @@ msgid ""
 "\n"
 msgstr ""
 "Introduïu un missatge de comissió per a explicar per què aquesta fusió és\n"
-"necessària, especialment si es fusiona una branca amb funcionalitat\n"
-"nova.\n"
+"necessària, especialment si es fusiona una branca amb funcionalitat nova.\n"
+"\n"
 
 #: builtin/merge.c:836
 msgid "An empty message aborts the commit.\n"
@@ -18243,74 +18770,74 @@ msgstr ""
 "Les línies que comencen amb «%c» seran ignorades i un missatge buit "
 "interromp la comissió.\n"
 
-#: builtin/merge.c:894
+#: builtin/merge.c:900
 msgid "Empty commit message."
 msgstr "El missatge de comissió és buit."
 
-#: builtin/merge.c:909
+#: builtin/merge.c:915
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Meravellós.\n"
 
-#: builtin/merge.c:970
+#: builtin/merge.c:976
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "La fusió automàtica ha fallat; arregleu els conflictes i després cometeu el "
 "resultat.\n"
 
-#: builtin/merge.c:1009
+#: builtin/merge.c:1015
 msgid "No current branch."
 msgstr "No hi ha cap branca actual."
 
-#: builtin/merge.c:1011
+#: builtin/merge.c:1017
 msgid "No remote for the current branch."
 msgstr "No hi ha cap remot per a la branca actual."
 
-#: builtin/merge.c:1013
+#: builtin/merge.c:1019
 msgid "No default upstream defined for the current branch."
 msgstr "No hi ha cap font per defecte definida per a la branca actual."
 
-#: builtin/merge.c:1018
+#: builtin/merge.c:1024
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "No hi ha cap branca amb seguiment remot per a %s de %s"
 
-#: builtin/merge.c:1075
+#: builtin/merge.c:1081
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Valor incorrecte «%s» en l'entorn «%s»"
 
-#: builtin/merge.c:1177
+#: builtin/merge.c:1183
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "no és quelcom que puguem fusionar en %s: %s"
 
-#: builtin/merge.c:1211
+#: builtin/merge.c:1217
 msgid "not something we can merge"
 msgstr "no és quelcom que puguem fusionar"
 
-#: builtin/merge.c:1324
+#: builtin/merge.c:1330
 msgid "--abort expects no arguments"
 msgstr "--abort no espera cap argument"
 
-#: builtin/merge.c:1328
+#: builtin/merge.c:1334
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "No hi ha fusió a avortar (manca MERGE_HEAD)."
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1352
 msgid "--quit expects no arguments"
 msgstr "--quit no espera cap argument"
 
-#: builtin/merge.c:1359
+#: builtin/merge.c:1365
 msgid "--continue expects no arguments"
 msgstr "--continue no espera cap argument"
 
-#: builtin/merge.c:1363
+#: builtin/merge.c:1369
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "No hi ha cap fusió en curs (manca MERGE_HEAD)."
 
-#: builtin/merge.c:1379
+#: builtin/merge.c:1385
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -18318,7 +18845,7 @@ msgstr ""
 "No heu conclòs la vostra fusió (MERGE_HEAD existeix).\n"
 "Cometeu els vostres canvis abans de fusionar."
 
-#: builtin/merge.c:1386
+#: builtin/merge.c:1392
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -18326,88 +18853,84 @@ msgstr ""
 "No heu conclòs el vostre «cherry pick» (CHERRY_PICK_HEAD existeix).\n"
 "Cometeu els vostres canvis abans de fusionar."
 
-#: builtin/merge.c:1389
+#: builtin/merge.c:1395
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "No heu conclòs el vostre «cherry pick» (CHERRY_PICK_HEAD existeix)."
 
-#: builtin/merge.c:1421
+#: builtin/merge.c:1427
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr ""
 "No hi ha una comissió especificada i merge.defaultToUpstream no està "
 "establert."
 
-#: builtin/merge.c:1438
+#: builtin/merge.c:1444
 msgid "Squash commit into empty head not supported yet"
 msgstr "Una comissió «squash» a un HEAD buit encara no es permet"
 
-#: builtin/merge.c:1440
+#: builtin/merge.c:1446
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr "Una comissió no d'avanç ràpid no té sentit a un HEAD buit"
 
-#: builtin/merge.c:1445
+#: builtin/merge.c:1451
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - no és una cosa que puguem fusionar"
 
-#: builtin/merge.c:1447
+#: builtin/merge.c:1453
 msgid "Can merge only exactly one commit into empty head"
 msgstr "Es pot fusionar només una comissió a un HEAD buit"
 
-#: builtin/merge.c:1534
+#: builtin/merge.c:1540
 msgid "refusing to merge unrelated histories"
 msgstr "s'està refusant fusionar històries no relacionades"
 
-#: builtin/merge.c:1553
+#: builtin/merge.c:1559
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "S'estan actualitzant %s..%s\n"
 
-#: builtin/merge.c:1601
+#: builtin/merge.c:1606
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "S'està intentant una fusió molt trivial en l'índex...\n"
 
-#: builtin/merge.c:1608
+#: builtin/merge.c:1613
 #, c-format
 msgid "Nope.\n"
 msgstr "No.\n"
 
-#: builtin/merge.c:1667 builtin/merge.c:1733
+#: builtin/merge.c:1671 builtin/merge.c:1737
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "S'està rebobinant l'arbre a la pristina...\n"
 
-#: builtin/merge.c:1671
+#: builtin/merge.c:1675
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "S'està intentant l'estratègia de fusió %s...\n"
 
-#: builtin/merge.c:1723
+#: builtin/merge.c:1727
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Cap estratègia de fusió ha gestionat la fusió.\n"
 
-#: builtin/merge.c:1725
+#: builtin/merge.c:1729
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "L'estratègia de fusió %s ha fallat.\n"
 
-#: builtin/merge.c:1735
+#: builtin/merge.c:1739
 #, c-format
 msgid "Using the %s strategy to prepare resolving by hand.\n"
 msgstr "S'està usant l'estratègia %s per a preparar la resolució a mà.\n"
 
-#: builtin/merge.c:1749
+#: builtin/merge.c:1753
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
 "La fusió automàtica ha sortit bé; s'ha aturat abans de cometre com s'havia "
 "demanat\n"
 
-#: builtin/mktag.c:10
-msgid "git mktag"
-msgstr "git mktag"
-
 #: builtin/mktag.c:27
 #, c-format
 msgid "warning: tag input does not pass fsck: %s"
@@ -18433,22 +18956,18 @@ msgstr "no s'ha pogut llegir l'objecte etiquetat «%s»"
 msgid "object '%s' tagged as '%s', but is a '%s' type"
 msgstr "l'objecte «%s» s'ha etiquetat com a «%s», però és del tipus «%s»"
 
-#: builtin/mktag.c:98
+#: builtin/mktag.c:97
 msgid "tag on stdin did not pass our strict fsck check"
 msgstr "l'etiqueta a stdin no ha passat la comprovació estricta del fsck"
 
-#: builtin/mktag.c:101
+#: builtin/mktag.c:100
 msgid "tag on stdin did not refer to a valid object"
 msgstr "l'etiqueta a stdin no apunta a un objecte vàlid"
 
-#: builtin/mktag.c:104 builtin/tag.c:242
+#: builtin/mktag.c:103 builtin/tag.c:243
 msgid "unable to write tag file"
 msgstr "no s'ha pogut escriure el fitxer d'etiqueta"
 
-#: builtin/mktree.c:66
-msgid "git mktree [-z] [--missing] [--batch]"
-msgstr "git mktree [-z] [--missing] [--batch]"
-
 #: builtin/mktree.c:154
 msgid "input is NUL terminated"
 msgstr "l'entrada és acabada amb NUL"
@@ -18502,20 +19021,20 @@ msgstr "escriu un map de bits multipaquet"
 
 #: builtin/multi-pack-index.c:105
 msgid "write multi-pack index containing only given indexes"
-msgstr ""
-"escriu un índex multipaquet que contingui només els índexs donats"
+msgstr "escriu un índex multipaquet que contingui només els índexs donats"
 
 #: builtin/multi-pack-index.c:107
 msgid "refs snapshot for selecting bitmap commits"
-msgstr "instantània de referències per a seleccionar les comissions de mapa de bits"
+msgstr ""
+"instantània de referències per a seleccionar les comissions de mapa de bits"
 
 #: builtin/multi-pack-index.c:206
 msgid ""
 "during repack, collect pack-files of smaller size into a batch that is "
 "larger than this size"
 msgstr ""
-"durant el reempaquetament, recull els fitxers de paquets de mida més "
-"petita en un lot que és més gran que aquesta mida"
+"durant el reempaquetament, recull els fitxers de paquets de mida més petita "
+"en un lot que és més gran que aquesta mida"
 
 #: builtin/mv.c:18
 msgid "git mv [<options>] <source>... <destination>"
@@ -18610,53 +19129,58 @@ msgstr "%s, origen=%s, destí=%s"
 msgid "Renaming %s to %s\n"
 msgstr "S'està canviant el nom de %s a %s\n"
 
-#: builtin/mv.c:314 builtin/remote.c:790 builtin/repack.c:857
+#: builtin/mv.c:314 builtin/remote.c:812 builtin/repack.c:861
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "el canvi del nom de «%s» ha fallat"
 
-#: builtin/name-rev.c:474
+#: builtin/name-rev.c:524
 msgid "git name-rev [<options>] <commit>..."
 msgstr "git name-rev [<opcions>] <comissió>..."
 
-#: builtin/name-rev.c:475
+#: builtin/name-rev.c:525
 msgid "git name-rev [<options>] --all"
 msgstr "git name-rev [<opcions>] --all"
 
-#: builtin/name-rev.c:476
-msgid "git name-rev [<options>] --stdin"
-msgstr "git name-rev [<opcions>] --stdin"
+#: builtin/name-rev.c:526
+msgid "git name-rev [<options>] --annotate-stdin"
+msgstr "git name-rev [<options>] --annotate-stdin"
 
-#: builtin/name-rev.c:533
+#: builtin/name-rev.c:583
 msgid "print only ref-based names (no object names)"
 msgstr ""
 "imprimeix només els noms basats en referències (no els noms d'objecte)"
 
-#: builtin/name-rev.c:534
+#: builtin/name-rev.c:584
 msgid "only use tags to name the commits"
 msgstr "només usa les etiquetes per a anomenar les comissions"
 
-#: builtin/name-rev.c:536
+#: builtin/name-rev.c:586
 msgid "only use refs matching <pattern>"
 msgstr "només usa les referències que coincideixin amb <patró>"
 
-#: builtin/name-rev.c:538
+#: builtin/name-rev.c:588
 msgid "ignore refs matching <pattern>"
 msgstr "ignora les referències que coincideixin amb <patró>"
 
-#: builtin/name-rev.c:540
+#: builtin/name-rev.c:590
 msgid "list all commits reachable from all refs"
 msgstr "llista totes les comissions abastables de totes les referències"
 
-#: builtin/name-rev.c:541
-msgid "read from stdin"
-msgstr "llegeix de stdin"
+#: builtin/name-rev.c:591
+msgid "deprecated: use annotate-stdin instead"
+msgstr "obsolet: useu annotate-stdin"
 
-#: builtin/name-rev.c:542
+#: builtin/name-rev.c:592
+#, fuzzy
+msgid "annotate text from stdin"
+msgstr "anota el text de stdin"
+
+#: builtin/name-rev.c:593
 msgid "allow to print `undefined` names (default)"
 msgstr "permet imprimir els noms «undefined» (per defecte)"
 
-#: builtin/name-rev.c:548
+#: builtin/name-rev.c:599
 msgid "dereference tags in the input (internal use)"
 msgstr "desreferencia les etiquetes en l'entrada (ús intern)"
 
@@ -18701,14 +19225,6 @@ msgstr ""
 "git notes [--ref <referència-de-notes>] merge [-v | -q] [-s <estratègia>] "
 "<referència-de-notes>"
 
-#: builtin/notes.c:35
-msgid "git notes merge --commit [-v | -q]"
-msgstr "git notes merge --commit [-v | -q]"
-
-#: builtin/notes.c:36
-msgid "git notes merge --abort [-v | -q]"
-msgstr "git notes merge --abort [-v | -q]"
-
 #: builtin/notes.c:37
 msgid "git notes [--ref <notes-ref>] remove [<object>...]"
 msgstr "git notes [--ref <referència-de-notes>] remove [<objecte>...]"
@@ -18769,10 +19285,6 @@ msgstr "git notes remove [<objecte>]"
 msgid "git notes prune [<options>]"
 msgstr "git notes prune [<opcions>]"
 
-#: builtin/notes.c:92
-msgid "git notes get-ref"
-msgstr "git notes get-ref"
-
 #: builtin/notes.c:97
 msgid "Write/edit the notes for the following object:"
 msgstr "Escriviu/editeu les notes per l'objecte següent:"
@@ -18805,7 +19317,7 @@ msgstr "no s'ha pogut escriure l'objecte de nota"
 msgid "the note contents have been left in %s"
 msgstr "s'han deixat els continguts de la nota en %s"
 
-#: builtin/notes.c:240 builtin/tag.c:581
+#: builtin/notes.c:240 builtin/tag.c:582
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "no s'ha pogut obrir o llegir «%s»"
@@ -18844,13 +19356,6 @@ msgstr "s'ha produït un error en copiar les notes de «%s» a «%s»"
 msgid "refusing to %s notes in %s (outside of refs/notes/)"
 msgstr "s'està refusant %s les notes en %s (fora de refs/notes/)"
 
-#: builtin/notes.c:374 builtin/notes.c:429 builtin/notes.c:507
-#: builtin/notes.c:519 builtin/notes.c:596 builtin/notes.c:663
-#: builtin/notes.c:813 builtin/notes.c:965 builtin/notes.c:987
-#: builtin/prune-packed.c:25 builtin/receive-pack.c:2487 builtin/tag.c:591
-msgid "too many arguments"
-msgstr "hi ha massa arguments"
-
 #: builtin/notes.c:387 builtin/notes.c:676
 #, c-format
 msgid "no note found for object %s."
@@ -19041,7 +19546,7 @@ msgstr ""
 "cometeu el resultat amb «git notes merge --commit», o avorteu la fusió amb "
 "«git notes merge --abort».\n"
 
-#: builtin/notes.c:899 builtin/tag.c:594
+#: builtin/notes.c:899 builtin/tag.c:595
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "S'ha produït un error en resoldre «%s» com a referència vàlida."
@@ -19059,7 +19564,7 @@ msgstr "l'intent d'eliminar una nota no existent no és un error"
 msgid "read object names from the standard input"
 msgstr "llegeix els noms d'objecte des de l'entrada estàndard"
 
-#: builtin/notes.c:956 builtin/prune.c:144 builtin/worktree.c:147
+#: builtin/notes.c:956 builtin/prune.c:144 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr "no eliminis, només mostra"
 
@@ -19075,7 +19580,7 @@ msgstr "referència de notes"
 msgid "use notes from <notes-ref>"
 msgstr "usa les notes de <referència-de-notes>"
 
-#: builtin/notes.c:1036 builtin/stash.c:1818
+#: builtin/notes.c:1036 builtin/stash.c:1802
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "subordre desconeguda: %s"
@@ -19094,7 +19599,7 @@ msgstr ""
 "git pack-objects [<opcions>...] <nom-base> [< <llista-de-referències> | < "
 "<llista-de-objectes>]"
 
-#: builtin/pack-objects.c:572
+#: builtin/pack-objects.c:570
 #, c-format
 msgid ""
 "write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
@@ -19103,117 +19608,117 @@ msgstr ""
 "write_reuse_object: no s'ha pogut localitzar %s, s'esperava a la posició "
 "%<PRIuMAX> al paquet %s"
 
-#: builtin/pack-objects.c:580
+#: builtin/pack-objects.c:578
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr "CRC de l'objecte empaquetat malmès per a %s"
 
-#: builtin/pack-objects.c:591
+#: builtin/pack-objects.c:589
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr "objecte empaquetat corrupte per a %s"
 
-#: builtin/pack-objects.c:722
+#: builtin/pack-objects.c:720
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr "diferència recursiva detectada per a l'objecte  %s"
 
-#: builtin/pack-objects.c:941
+#: builtin/pack-objects.c:939
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr "ordenats %u objectes, s'esperaven %<PRIu32>"
 
-#: builtin/pack-objects.c:1036
+#: builtin/pack-objects.c:1034
 #, c-format
 msgid "expected object at offset %<PRIuMAX> in pack %s"
 msgstr "objecte esperat a la posició %<PRIuMAX> al paquet %s"
 
-#: builtin/pack-objects.c:1160
+#: builtin/pack-objects.c:1158
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr ""
 "s'està inhabilitant l'escriptura de mapes de bits, es divideixen els paquets"
 " a causa de pack.packSizeLimit"
 
-#: builtin/pack-objects.c:1173
+#: builtin/pack-objects.c:1171
 msgid "Writing objects"
 msgstr "S'estan escrivint els objectes"
 
-#: builtin/pack-objects.c:1235 builtin/update-index.c:90
+#: builtin/pack-objects.c:1243 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "s'ha produït un error en fer stat a %s"
 
-#: builtin/pack-objects.c:1268
+#: builtin/pack-objects.c:1276
 msgid "failed to write bitmap index"
 msgstr "s'ha produït un error en escriure l'índex de mapa de bits"
 
-#: builtin/pack-objects.c:1294
+#: builtin/pack-objects.c:1302
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "escrits %<PRIu32> objectes mentre s'esperaven %<PRIu32>"
 
-#: builtin/pack-objects.c:1536
+#: builtin/pack-objects.c:1544
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr ""
 "s'està inhabilitant l'escriptura de mapes de bits, perquè alguns objectes no"
 " s'empaqueten"
 
-#: builtin/pack-objects.c:1984
+#: builtin/pack-objects.c:1992
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "desbordament del desplaçament base de diferències en paquet per a %s"
 
-#: builtin/pack-objects.c:1993
+#: builtin/pack-objects.c:2001
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "desplaçament base de diferències fora dels límits per a %s"
 
-#: builtin/pack-objects.c:2274
+#: builtin/pack-objects.c:2282
 msgid "Counting objects"
 msgstr "S'estan comptant els objectes"
 
-#: builtin/pack-objects.c:2439
+#: builtin/pack-objects.c:2447
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "no s'ha pogut analitzar la capçalera de l'objecte de %s"
 
-#: builtin/pack-objects.c:2509 builtin/pack-objects.c:2525
-#: builtin/pack-objects.c:2535
+#: builtin/pack-objects.c:2517 builtin/pack-objects.c:2533
+#: builtin/pack-objects.c:2543
 #, c-format
 msgid "object %s cannot be read"
 msgstr "no es pot llegir l'objecte %s"
 
-#: builtin/pack-objects.c:2512 builtin/pack-objects.c:2539
+#: builtin/pack-objects.c:2520 builtin/pack-objects.c:2547
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr ""
 "l'objecte %s té una longitud d'objecte inconsistent (%<PRIuMAX> vs "
 "%<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2549
+#: builtin/pack-objects.c:2557
 msgid "suboptimal pack - out of memory"
 msgstr "paquet subòptim - sense memòria"
 
-#: builtin/pack-objects.c:2864
+#: builtin/pack-objects.c:2872
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Compressió de diferències usant fins a %d fils"
 
-#: builtin/pack-objects.c:3003
+#: builtin/pack-objects.c:3011
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr ""
 "no s'han pogut empaquetar els objectes abastables des de l'etiqueta %s"
 
-#: builtin/pack-objects.c:3089
+#: builtin/pack-objects.c:3097
 msgid "Compressing objects"
 msgstr "S'estan comprimint els objectes"
 
-#: builtin/pack-objects.c:3095
+#: builtin/pack-objects.c:3103
 msgid "inconsistency with delta count"
 msgstr "inconsistència amb el comptador de diferències"
 
-#: builtin/pack-objects.c:3174
+#: builtin/pack-objects.c:3182
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> "
@@ -19222,26 +19727,26 @@ msgstr ""
 "el valor de uploadpack.blobpackfileuri ha de tenir la forma «<object-hash> "
 "<pack-hash> <uri>» (s'ha rebut «%s»)"
 
-#: builtin/pack-objects.c:3177
+#: builtin/pack-objects.c:3185
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
 msgstr ""
-"l'objecte ja està configurat en un altre uploadpack.blobpackfileuri (s'ha rebut "
-"«%s»)"
+"l'objecte ja està configurat en un altre uploadpack.blobpackfileuri (s'ha "
+"rebut «%s»)"
 
-#: builtin/pack-objects.c:3212
+#: builtin/pack-objects.c:3220
 #, c-format
 msgid "could not get type of object %s in pack %s"
 msgstr "no s'ha pogut obtenir el tipus de l'objecte %s al paquet %s"
 
-#: builtin/pack-objects.c:3340 builtin/pack-objects.c:3351
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3348 builtin/pack-objects.c:3359
+#: builtin/pack-objects.c:3373
 #, c-format
 msgid "could not find pack '%s'"
 msgstr "no s'ha pogut trobar el paquet «%s»"
 
-#: builtin/pack-objects.c:3408
+#: builtin/pack-objects.c:3416
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -19250,7 +19755,7 @@ msgstr ""
 "s'esperava un identificador vora de l'objecte, s'ha rebut brossa:\n"
 " %s"
 
-#: builtin/pack-objects.c:3414
+#: builtin/pack-objects.c:3422
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -19259,256 +19764,252 @@ msgstr ""
 "s'esperava un identificador d'objecte, s'ha rebut brossa:\n"
 " %s"
 
-#: builtin/pack-objects.c:3507
-msgid "invalid value for --missing"
-msgstr "valor no vàlid per a --missing"
-
-#: builtin/pack-objects.c:3532 builtin/pack-objects.c:3619
+#: builtin/pack-objects.c:3540 builtin/pack-objects.c:3627
 msgid "cannot open pack index"
 msgstr "no s'ha pogut obrir l'índex del paquet"
 
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3549
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "no s'ha pogut examinar l'objecte solt a %s"
 
-#: builtin/pack-objects.c:3627
+#: builtin/pack-objects.c:3635
 msgid "unable to force loose object"
 msgstr "no s'ha pogut forçar l'objecte solt"
 
-#: builtin/pack-objects.c:3757
+#: builtin/pack-objects.c:3763
 #, c-format
 msgid "not a rev '%s'"
 msgstr "«%s» no és una revisió"
 
-#: builtin/pack-objects.c:3760 builtin/rev-parse.c:1061
+#: builtin/pack-objects.c:3766 builtin/rev-parse.c:1061
 #, c-format
 msgid "bad revision '%s'"
-msgstr "revisió incorrecte «%s»"
+msgstr "revisió incorrecta «%s»"
 
-#: builtin/pack-objects.c:3788
+#: builtin/pack-objects.c:3794
 msgid "unable to add recent objects"
 msgstr "no s'han pogut afegir els objectes recents"
 
-#: builtin/pack-objects.c:3841
+#: builtin/pack-objects.c:3847
 #, c-format
 msgid "unsupported index version %s"
 msgstr "versió d'índex no compatible %s"
 
-#: builtin/pack-objects.c:3845
+#: builtin/pack-objects.c:3851
 #, c-format
 msgid "bad index version '%s'"
 msgstr "versió d'índex incorrecta «%s»"
 
-#: builtin/pack-objects.c:3884
+#: builtin/pack-objects.c:3907
 msgid "<version>[,<offset>]"
 msgstr "<versió>[,<desplaçament>]"
 
-#: builtin/pack-objects.c:3885
+#: builtin/pack-objects.c:3908
 msgid "write the pack index file in the specified idx format version"
 msgstr ""
 "escriu el fitxer d'índex de paquet en la versió de format d'índex "
 "especificada"
 
-#: builtin/pack-objects.c:3888
+#: builtin/pack-objects.c:3911
 msgid "maximum size of each output pack file"
 msgstr "mida màxima de cada fitxer empaquetat de sortida"
 
-#: builtin/pack-objects.c:3890
+#: builtin/pack-objects.c:3913
 msgid "ignore borrowed objects from alternate object store"
 msgstr ""
 "ignora els objectes manllevats d'un emmagatzematge d'objectes alternatiu"
 
-#: builtin/pack-objects.c:3892
+#: builtin/pack-objects.c:3915
 msgid "ignore packed objects"
 msgstr "ignora els objectes empaquetats"
 
-#: builtin/pack-objects.c:3894
+#: builtin/pack-objects.c:3917
 msgid "limit pack window by objects"
 msgstr "limita la finestra d'empaquetament per objectes"
 
-#: builtin/pack-objects.c:3896
+#: builtin/pack-objects.c:3919
 msgid "limit pack window by memory in addition to object limit"
 msgstr ""
 "limita la finestra d'empaquetament per memòria a més del límit d'objectes"
 
-#: builtin/pack-objects.c:3898
+#: builtin/pack-objects.c:3921
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr ""
 "longitud màxima de la cadena de diferències permesa en el paquet resultant"
 
-#: builtin/pack-objects.c:3900
+#: builtin/pack-objects.c:3923
 msgid "reuse existing deltas"
 msgstr "reusa les diferències existents"
 
-#: builtin/pack-objects.c:3902
+#: builtin/pack-objects.c:3925
 msgid "reuse existing objects"
 msgstr "reusa els objectes existents"
 
-#: builtin/pack-objects.c:3904
+#: builtin/pack-objects.c:3927
 msgid "use OFS_DELTA objects"
 msgstr "usa objectes OFS_DELTA"
 
-#: builtin/pack-objects.c:3906
+#: builtin/pack-objects.c:3929
 msgid "use threads when searching for best delta matches"
 msgstr "usa fils en cercar les millores coincidències de diferències"
 
-#: builtin/pack-objects.c:3908
+#: builtin/pack-objects.c:3931
 msgid "do not create an empty pack output"
 msgstr "no creïs una emissió de paquet buida"
 
-#: builtin/pack-objects.c:3910
+#: builtin/pack-objects.c:3933
 msgid "read revision arguments from standard input"
 msgstr "llegeix els arguments de revisió des de l'entrada estàndard"
 
-#: builtin/pack-objects.c:3912
+#: builtin/pack-objects.c:3935
 msgid "limit the objects to those that are not yet packed"
 msgstr "limita els objectes als quals encara no s'hagin empaquetat"
 
-#: builtin/pack-objects.c:3915
+#: builtin/pack-objects.c:3938
 msgid "include objects reachable from any reference"
 msgstr "inclou els objectes abastables de qualsevol referència"
 
-#: builtin/pack-objects.c:3918
+#: builtin/pack-objects.c:3941
 msgid "include objects referred by reflog entries"
 msgstr ""
 "inclou els objectes als quals facin referència les entrades del registre de "
 "referències"
 
-#: builtin/pack-objects.c:3921
+#: builtin/pack-objects.c:3944
 msgid "include objects referred to by the index"
 msgstr "inclou els objectes als quals faci referència l'índex"
 
-#: builtin/pack-objects.c:3924
+#: builtin/pack-objects.c:3947
 msgid "read packs from stdin"
 msgstr "llegeix els paquets des de stdin"
 
-#: builtin/pack-objects.c:3926
+#: builtin/pack-objects.c:3949
 msgid "output pack to stdout"
 msgstr "emet el paquet a stdout"
 
-#: builtin/pack-objects.c:3928
+#: builtin/pack-objects.c:3951
 msgid "include tag objects that refer to objects to be packed"
 msgstr ""
 "inclou els objectes d'etiqueta que facin referència als objectes a "
 "empaquetar"
 
-#: builtin/pack-objects.c:3930
+#: builtin/pack-objects.c:3953
 msgid "keep unreachable objects"
 msgstr "retén els objectes inabastables"
 
-#: builtin/pack-objects.c:3932
+#: builtin/pack-objects.c:3955
 msgid "pack loose unreachable objects"
 msgstr "empaqueta els objectes inabastables solts"
 
-#: builtin/pack-objects.c:3934
+#: builtin/pack-objects.c:3957
 msgid "unpack unreachable objects newer than <time>"
 msgstr "desempaqueta els objectes inabastables més nous que <data>"
 
-#: builtin/pack-objects.c:3937
+#: builtin/pack-objects.c:3960
 msgid "use the sparse reachability algorithm"
 msgstr "utilitza l'algorisme d'accessibilitat dispers"
 
-#: builtin/pack-objects.c:3939
+#: builtin/pack-objects.c:3962
 msgid "create thin packs"
 msgstr "crea paquets prims"
 
-#: builtin/pack-objects.c:3941
+#: builtin/pack-objects.c:3964
 msgid "create packs suitable for shallow fetches"
 msgstr "crea paquets adequats per a les obtencions superficials"
 
-#: builtin/pack-objects.c:3943
+#: builtin/pack-objects.c:3966
 msgid "ignore packs that have companion .keep file"
 msgstr "ignora els paquets que tinguin un fitxer .keep corresponent"
 
-#: builtin/pack-objects.c:3945
+#: builtin/pack-objects.c:3968
 msgid "ignore this pack"
 msgstr "ignora aquest paquet"
 
-#: builtin/pack-objects.c:3947
+#: builtin/pack-objects.c:3970
 msgid "pack compression level"
 msgstr "nivell de compressió de paquet"
 
-#: builtin/pack-objects.c:3949
+#: builtin/pack-objects.c:3972
 msgid "do not hide commits by grafts"
 msgstr "no amaguis les comissions per empelt"
 
-#: builtin/pack-objects.c:3951
+#: builtin/pack-objects.c:3974
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr ""
 "usa un índex de mapa de bits, si està disponible, per a accelerar el "
 "recompte d'objectes"
 
-#: builtin/pack-objects.c:3953
+#: builtin/pack-objects.c:3976
 msgid "write a bitmap index together with the pack index"
 msgstr "escriu un índex de mapa de bits juntament amb l'índex de paquet"
 
-#: builtin/pack-objects.c:3957
+#: builtin/pack-objects.c:3980
 msgid "write a bitmap index if possible"
 msgstr "escriu un índex de mapa de bits si és possible"
 
-#: builtin/pack-objects.c:3961
+#: builtin/pack-objects.c:3984
 msgid "handling for missing objects"
 msgstr "gestió dels objectes absents"
 
-#: builtin/pack-objects.c:3964
+#: builtin/pack-objects.c:3987
 msgid "do not pack objects in promisor packfiles"
 msgstr "empaquetis els objectes als fitxers de paquet «promisor»"
 
-#: builtin/pack-objects.c:3966
+#: builtin/pack-objects.c:3989
 msgid "respect islands during delta compression"
 msgstr "respecta les illes durant la compressió delta"
 
-#: builtin/pack-objects.c:3968
+#: builtin/pack-objects.c:3991
 msgid "protocol"
 msgstr "protocol"
 
-#: builtin/pack-objects.c:3969
+#: builtin/pack-objects.c:3992
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr ""
 "exclou qualsevol uploadpack.blobpackfileuri configurat amb aquest protocol"
 
-#: builtin/pack-objects.c:4002
+#: builtin/pack-objects.c:4027
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "la profunditat de la cadena delta %d és massa profunda, forçant %d"
 
-#: builtin/pack-objects.c:4007
+#: builtin/pack-objects.c:4032
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "pack.deltaCacheLimit és massa alt, forçant %d"
 
-#: builtin/pack-objects.c:4063
+#: builtin/pack-objects.c:4088
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 "--max-pack-size no es pot utilitzar per a construir un paquet per a la "
 "transferència"
 
-#: builtin/pack-objects.c:4065
+#: builtin/pack-objects.c:4090
 msgid "minimum pack size limit is 1 MiB"
 msgstr "el límit mínim de mida del paquet és 1 MiB"
 
-#: builtin/pack-objects.c:4070
+#: builtin/pack-objects.c:4095
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "--thin no es pot utilitzar per a construir un paquet indexable"
 
-#: builtin/pack-objects.c:4079
+#: builtin/pack-objects.c:4104
 msgid "cannot use --filter without --stdout"
 msgstr "no es pot utilitzar --filter sense --stdout"
 
-#: builtin/pack-objects.c:4081
+#: builtin/pack-objects.c:4106
 msgid "cannot use --filter with --stdin-packs"
 msgstr "no es pot utilitzar --filter sense --stdin-packs"
 
-#: builtin/pack-objects.c:4085
+#: builtin/pack-objects.c:4110
 msgid "cannot use internal rev list with --stdin-packs"
 msgstr "no es pot utilitzar la llista de revisió interna amb --stdin-packs"
 
-#: builtin/pack-objects.c:4144
+#: builtin/pack-objects.c:4169
 msgid "Enumerating objects"
 msgstr "S'estan enumerant els objectes"
 
-#: builtin/pack-objects.c:4180
+#: builtin/pack-objects.c:4210
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -19543,10 +20044,6 @@ msgstr "empaqueta-ho tot"
 msgid "prune loose refs (default)"
 msgstr "poda les referències soltes (per defecte)"
 
-#: builtin/prune-packed.c:6
-msgid "git prune-packed [-n | --dry-run] [-q | --quiet]"
-msgstr "git prune-packed [-n | --dry-run] [-q | --quiet]"
-
 #: builtin/prune.c:14
 msgid "git prune [-n] [-v] [--progress] [--expire <time>] [--] [<head>...]"
 msgstr "git prune [-n] [-v] [--progress] [--expire <data>] [--] [<head>...]"
@@ -19561,17 +20058,13 @@ msgstr "fes caducar els objectes més antics que <data>"
 
 #: builtin/prune.c:150
 msgid "limit traversal to objects outside promisor packfiles"
-msgstr "limita el recorregut als objectes fora dels fitxers de paquet «promisor»"
+msgstr ""
+"limita el recorregut als objectes fora dels fitxers de paquet «promisor»"
 
 #: builtin/prune.c:163
 msgid "cannot prune in a precious-objects repo"
 msgstr "no es pot podar en un repositori d'objectes preciosos"
 
-#: builtin/pull.c:45 builtin/pull.c:47
-#, c-format
-msgid "Invalid value for %s: %s"
-msgstr "Valor no vàlid per a %s: %s"
-
 #: builtin/pull.c:67
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
 msgstr ""
@@ -19597,7 +20090,7 @@ msgstr "permet l'avanç ràpid"
 msgid "control use of pre-merge-commit and commit-msg hooks"
 msgstr "controla l'ús dels lligams pre-merge-commit i commit-msg"
 
-#: builtin/pull.c:171 parse-options.h:340
+#: builtin/pull.c:171 parse-options.h:371
 msgid "automatically stash/stash pop before and after"
 msgstr "fes «stash» i «stash pop» automàticament abans i després"
 
@@ -19613,11 +20106,6 @@ msgstr "força la sobreescriptura de la branca local"
 msgid "number of submodules pulled in parallel"
 msgstr "nombre de submòduls baixats en paral·lel"
 
-#: builtin/pull.c:321
-#, c-format
-msgid "Invalid value for pull.ff: %s"
-msgstr "Valor no vàlid per a pull.ff: %s"
-
 #: builtin/pull.c:449
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
@@ -19652,7 +20140,7 @@ msgstr ""
 "Perquè aquest no és el remot configurat per defecte per a la vostra\n"
 "branca actual, heu d'especificar una branca en la línia d'ordres."
 
-#: builtin/pull.c:460 builtin/rebase.c:951
+#: builtin/pull.c:460 builtin/rebase.c:978
 msgid "You are not currently on a branch."
 msgstr "Actualment no sou en cap branca."
 
@@ -19669,16 +20157,16 @@ msgid "See git-pull(1) for details."
 msgstr "Vegeu git-pull(1) per a més informació."
 
 #: builtin/pull.c:467 builtin/pull.c:473 builtin/pull.c:482
-#: builtin/rebase.c:957
+#: builtin/rebase.c:984
 msgid "<remote>"
 msgstr "<remot>"
 
 #: builtin/pull.c:467 builtin/pull.c:482 builtin/pull.c:487
-#: contrib/scalar/scalar.c:375
+#: contrib/scalar/scalar.c:374
 msgid "<branch>"
 msgstr "<branca>"
 
-#: builtin/pull.c:475 builtin/rebase.c:949
+#: builtin/pull.c:475 builtin/rebase.c:976
 msgid "There is no tracking information for the current branch."
 msgstr "No hi ha cap informació de seguiment per a la branca actual."
 
@@ -19686,8 +20174,8 @@ msgstr "No hi ha cap informació de seguiment per a la branca actual."
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:"
 msgstr ""
-"Si voleu establir la informació de seguiment per a aquesta branca, podeu fer-ho"
-" amb:"
+"Si voleu establir la informació de seguiment per a aquesta branca, podeu "
+"fer-ho amb:"
 
 #: builtin/pull.c:489
 #, c-format
@@ -19735,20 +20223,20 @@ msgstr ""
 "--no-rebase o --ff-only en la línia d'ordres per a sobreescriure el valor\n"
 "per defecte configuració en aquesta execució.\n"
 
-#: builtin/pull.c:1046
+#: builtin/pull.c:1047
 msgid "Updating an unborn branch with changes added to the index."
 msgstr ""
 "S'està actualitzant una branca no nascuda amb canvis afegits a l'índex."
 
-#: builtin/pull.c:1050
+#: builtin/pull.c:1051
 msgid "pull with rebase"
 msgstr "baixar fent «rebase»"
 
-#: builtin/pull.c:1051
+#: builtin/pull.c:1052
 msgid "please commit or stash them."
 msgstr "cometeu-los o emmagatzemeu-los."
 
-#: builtin/pull.c:1076
+#: builtin/pull.c:1077
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -19759,7 +20247,7 @@ msgstr ""
 "s'està avançant ràpidament el vostre arbre de treball des de\n"
 "la comissió %s."
 
-#: builtin/pull.c:1082
+#: builtin/pull.c:1083
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -19776,23 +20264,23 @@ msgstr ""
 "$ git reset --hard\n"
 "per a recuperar."
 
-#: builtin/pull.c:1097
+#: builtin/pull.c:1098
 msgid "Cannot merge multiple branches into empty head."
 msgstr "No es poden fusionar múltiples branques a un HEAD buit."
 
-#: builtin/pull.c:1102
+#: builtin/pull.c:1103
 msgid "Cannot rebase onto multiple branches."
 msgstr "No es pot fer «rebase» sobre múltiples branques."
 
-#: builtin/pull.c:1104
+#: builtin/pull.c:1105
 msgid "Cannot fast-forward to multiple branches."
 msgstr "No es pot fer un avançament ràpid a branques múltiples."
 
-#: builtin/pull.c:1119
+#: builtin/pull.c:1120
 msgid "Need to specify how to reconcile divergent branches."
 msgstr "Cal especificar com reconciliar les branques divergents."
 
-#: builtin/pull.c:1133
+#: builtin/pull.c:1134
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 "no es pot fer «rebase» amb modificacions als submòduls enregistrades "
@@ -19975,7 +20463,7 @@ msgstr "S'està pujant a %s\n"
 msgid "failed to push some refs to '%s'"
 msgstr "s'ha produït un error en pujar algunes referències a «%s»"
 
-#: builtin/push.c:544 builtin/submodule--helper.c:3259
+#: builtin/push.c:544 builtin/submodule--helper.c:3377
 msgid "repository"
 msgstr "repositori"
 
@@ -20213,11 +20701,11 @@ msgstr "depura unpack-trees"
 msgid "suppress feedback messages"
 msgstr "suprimeix els missatges de retroacció"
 
-#: builtin/read-tree.c:183
+#: builtin/read-tree.c:190
 msgid "You need to resolve your current index first"
 msgstr "Primer heu de resoldre el vostre índex actual"
 
-#: builtin/rebase.c:35
+#: builtin/rebase.c:36
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
 "[<upstream> [<branch>]]"
@@ -20225,7 +20713,7 @@ msgstr ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
 "[<upstream> [<branch>]]"
 
-#: builtin/rebase.c:37
+#: builtin/rebase.c:38
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root "
 "[<branch>]"
@@ -20233,48 +20721,44 @@ msgstr ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root "
 "[<branch>]"
 
-#: builtin/rebase.c:39
-msgid "git rebase --continue | --abort | --skip | --edit-todo"
-msgstr "git rebase --continue | --abort | --skip | --edit-todo"
-
-#: builtin/rebase.c:230
+#: builtin/rebase.c:231
 #, c-format
 msgid "could not create temporary %s"
 msgstr "no s'ha pogut crear el fitxer temporal %s"
 
-#: builtin/rebase.c:236
+#: builtin/rebase.c:237
 msgid "could not mark as interactive"
 msgstr "no s'ha pogut marcar com a interactiu"
 
-#: builtin/rebase.c:289
+#: builtin/rebase.c:290
 msgid "could not generate todo list"
 msgstr "no s'ha pogut generar la llista per a fer"
 
-#: builtin/rebase.c:331
+#: builtin/rebase.c:332
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "s'ha de proporcionar una comissió base amb --upstream o --onto"
 
-#: builtin/rebase.c:390
+#: builtin/rebase.c:391
 #, c-format
 msgid "%s requires the merge backend"
 msgstr "%s requereix un rerefons de fusió"
 
-#: builtin/rebase.c:432
+#: builtin/rebase.c:433
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "no s'ha pogut obtenir «onto»: «%s»"
 
-#: builtin/rebase.c:449
+#: builtin/rebase.c:450
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "orig-head no és vàlid: «%s»"
 
-#: builtin/rebase.c:474
+#: builtin/rebase.c:475
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "s'ignora allow_rerere_autoupdate no vàlid: «%s»"
 
-#: builtin/rebase.c:597
+#: builtin/rebase.c:600
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -20286,7 +20770,7 @@ msgstr ""
 "Alternativament podeu ometre aquesta comissió: executeu «git rebase --skip».\n"
 "Per a avortar i tornar a l'estat anterior abans de l'ordre «git rebase», executeu «git rebase --abort»."
 
-#: builtin/rebase.c:680
+#: builtin/rebase.c:685
 #, c-format
 msgid ""
 "\n"
@@ -20305,13 +20789,18 @@ msgstr ""
 "\n"
 "Com a resultat, git no pot fer un «rebase» d'elles."
 
-#: builtin/rebase.c:925
+#: builtin/rebase.c:836
+#, c-format
+msgid "could not switch to %s"
+msgstr "no s'ha pogut commutar a %s"
+
+#: builtin/rebase.c:952
 #, c-format
 msgid "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask\"."
 msgstr ""
 "tipus buit no reconegut «%s»; els valors vàlids són «drop», «keep» i «ask»."
 
-#: builtin/rebase.c:943
+#: builtin/rebase.c:970
 #, c-format
 msgid ""
 "%s\n"
@@ -20328,7 +20817,7 @@ msgstr ""
 "    git rebase '<branca>'\n"
 "\n"
 
-#: builtin/rebase.c:959
+#: builtin/rebase.c:986
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -20341,179 +20830,179 @@ msgstr ""
 "    git branch --set-upstream-to=%s/<branca> %s\n"
 "\n"
 
-#: builtin/rebase.c:989
+#: builtin/rebase.c:1016
 msgid "exec commands cannot contain newlines"
 msgstr "les ordres exec no poden contenir línies noves"
 
-#: builtin/rebase.c:993
+#: builtin/rebase.c:1020
 msgid "empty exec command"
 msgstr "ordre exec buida"
 
-#: builtin/rebase.c:1023
+#: builtin/rebase.c:1051
 msgid "rebase onto given branch instead of upstream"
 msgstr "fes un «rebase» en la branca donada en comptes de la font"
 
-#: builtin/rebase.c:1025
+#: builtin/rebase.c:1053
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr "utilitza la base de fusió de la font i la branca com a base actual"
 
-#: builtin/rebase.c:1027
+#: builtin/rebase.c:1055
 msgid "allow pre-rebase hook to run"
 msgstr "permet al lligam pre-rebase executar-se"
 
-#: builtin/rebase.c:1029
+#: builtin/rebase.c:1057
 msgid "be quiet. implies --no-stat"
 msgstr "silenciós. Implica --no-stat"
 
-#: builtin/rebase.c:1032
+#: builtin/rebase.c:1060
 msgid "display a diffstat of what changed upstream"
 msgstr "mostra un «diffstat» del que ha canviat a la font"
 
-#: builtin/rebase.c:1035
+#: builtin/rebase.c:1063
 msgid "do not show diffstat of what changed upstream"
 msgstr "no mostris «diffstat» del que ha canviat a la font"
 
-#: builtin/rebase.c:1038
+#: builtin/rebase.c:1066
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "afegeix un «trailer» tipus «Signed-off-by» a cada comissió"
 
-#: builtin/rebase.c:1041
+#: builtin/rebase.c:1069
 msgid "make committer date match author date"
 msgstr "fes que la data del «comitter» coincideixi amb la data de l'autor"
 
-#: builtin/rebase.c:1043
+#: builtin/rebase.c:1071
 msgid "ignore author date and use current date"
 msgstr "ignora la data de l'autor i utilitza la data actual"
 
-#: builtin/rebase.c:1045
+#: builtin/rebase.c:1073
 msgid "synonym of --reset-author-date"
 msgstr "sinònim de --reset-author-date"
 
-#: builtin/rebase.c:1047 builtin/rebase.c:1051
+#: builtin/rebase.c:1075 builtin/rebase.c:1079
 msgid "passed to 'git apply'"
 msgstr "passa-ho a «git apply»"
 
-#: builtin/rebase.c:1049
+#: builtin/rebase.c:1077
 msgid "ignore changes in whitespace"
 msgstr "ignora els canvis d'espais en blanc"
 
-#: builtin/rebase.c:1053 builtin/rebase.c:1056
+#: builtin/rebase.c:1081 builtin/rebase.c:1084
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "«cherry pick» totes les comissions, inclús les no canviades"
 
-#: builtin/rebase.c:1058
+#: builtin/rebase.c:1086
 msgid "continue"
 msgstr "continua"
 
-#: builtin/rebase.c:1061
+#: builtin/rebase.c:1089
 msgid "skip current patch and continue"
 msgstr "omet el pedaç actual i continua"
 
-#: builtin/rebase.c:1063
+#: builtin/rebase.c:1091
 msgid "abort and check out the original branch"
 msgstr "interromp i agafa la branca original"
 
-#: builtin/rebase.c:1066
+#: builtin/rebase.c:1094
 msgid "abort but keep HEAD where it is"
 msgstr "interromp però manté HEAD on és"
 
-#: builtin/rebase.c:1067
+#: builtin/rebase.c:1095
 msgid "edit the todo list during an interactive rebase"
 msgstr "edita la llista de coses a fer durant un «rebase» interactiu"
 
-#: builtin/rebase.c:1070
+#: builtin/rebase.c:1098
 msgid "show the patch file being applied or merged"
 msgstr "mostra el pedaç que s'està aplicant o fusionant"
 
-#: builtin/rebase.c:1073
+#: builtin/rebase.c:1101
 msgid "use apply strategies to rebase"
 msgstr "utilitza estratègies d'aplicació per a fer «rebase»"
 
-#: builtin/rebase.c:1077
+#: builtin/rebase.c:1105
 msgid "use merging strategies to rebase"
 msgstr "utilitza estratègies de fusió per a fer «rebase»"
 
-#: builtin/rebase.c:1081
+#: builtin/rebase.c:1109
 msgid "let the user edit the list of commits to rebase"
 msgstr "permet a l'usuari editar la llista de comissions a fer «rebase»"
 
-#: builtin/rebase.c:1085
+#: builtin/rebase.c:1113
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(EN DESÚS) intenta recrear fusions en lloc d'ignorar-les"
 
-#: builtin/rebase.c:1090
+#: builtin/rebase.c:1118
 msgid "how to handle commits that become empty"
 msgstr "com gestionar les comissions que queden buides"
 
-#: builtin/rebase.c:1093
+#: builtin/rebase.c:1121
 msgid "keep commits which start empty"
 msgstr "manté les comissions que comencen en blanc"
 
-#: builtin/rebase.c:1097
+#: builtin/rebase.c:1125
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "mou les comissions que comencen amb squash!/fixup! sota -i"
 
-#: builtin/rebase.c:1104
+#: builtin/rebase.c:1132
 msgid "add exec lines after each commit of the editable list"
 msgstr "afegeix línies d'exec després de cada comissió de la llista editable"
 
-#: builtin/rebase.c:1108
+#: builtin/rebase.c:1136
 msgid "allow rebasing commits with empty messages"
 msgstr "permet fer «rebase» de les comissions amb missatges buits"
 
-#: builtin/rebase.c:1112
+#: builtin/rebase.c:1140
 msgid "try to rebase merges instead of skipping them"
 msgstr "intenta fer «rebase» de les fusions en comptes d'ometre-les"
 
-#: builtin/rebase.c:1115
+#: builtin/rebase.c:1143
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "usa «merge-base --fork-point» per a refinar la font"
 
-#: builtin/rebase.c:1117
+#: builtin/rebase.c:1145
 msgid "use the given merge strategy"
 msgstr "utilitza l'estratègia de fusió donada"
 
-#: builtin/rebase.c:1119 builtin/revert.c:115
+#: builtin/rebase.c:1147 builtin/revert.c:115
 msgid "option"
 msgstr "opció"
 
-#: builtin/rebase.c:1120
+#: builtin/rebase.c:1148
 msgid "pass the argument through to the merge strategy"
 msgstr "passa l'argument a l'estratègia de fusió"
 
-#: builtin/rebase.c:1123
+#: builtin/rebase.c:1151
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "fes «rebase» de totes les comissions accessibles fins a l'arrel"
 
-#: builtin/rebase.c:1126
+#: builtin/rebase.c:1154
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "torna a planificar automàticament qualsevol «exec» que falli"
 
-#: builtin/rebase.c:1128
+#: builtin/rebase.c:1156
 msgid "apply all changes, even those already present upstream"
 msgstr "aplica tots els canvis, fins i tot els que ja estan a la font"
 
-#: builtin/rebase.c:1149
+#: builtin/rebase.c:1177
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "Sembla que «git am» està en curs. No es pot fer «rebase»."
 
-#: builtin/rebase.c:1180
+#: builtin/rebase.c:1208
 msgid "--preserve-merges was replaced by --rebase-merges"
 msgstr "--preserve-merges ha estat substituït per --rebase-merges"
 
-#: builtin/rebase.c:1202
+#: builtin/rebase.c:1230
 msgid "No rebase in progress?"
 msgstr "No hi ha un «rebase» en curs?"
 
-#: builtin/rebase.c:1206
+#: builtin/rebase.c:1234
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr "L'acció --edit-todo només es pot usar durant un «rebase» interactiu."
 
-#: builtin/rebase.c:1229 t/helper/test-fast-rebase.c:122
+#: builtin/rebase.c:1257 t/helper/test-fast-rebase.c:122
 msgid "Cannot read HEAD"
 msgstr "No es pot llegir HEAD"
 
-#: builtin/rebase.c:1241
+#: builtin/rebase.c:1269
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -20521,16 +21010,16 @@ msgstr ""
 "Heu d'editar tots els conflictes de fusió i després\n"
 "marcar-los com a resolts fent servir git add"
 
-#: builtin/rebase.c:1260
+#: builtin/rebase.c:1287
 msgid "could not discard worktree changes"
 msgstr "no s'han pogut descartar els canvis de l'arbre de treball"
 
-#: builtin/rebase.c:1279
+#: builtin/rebase.c:1308
 #, c-format
 msgid "could not move back to %s"
 msgstr "no s'ha pogut tornar a %s"
 
-#: builtin/rebase.c:1325
+#: builtin/rebase.c:1354
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -20550,124 +21039,119 @@ msgstr ""
 "i executeu aquesta ordre de nou. S'atura l'operació en cas que\n"
 "tingueu quelcom valuós.\n"
 
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1382
 msgid "switch `C' expects a numerical value"
 msgstr "«switch» «c» espera un valor numèric"
 
-#: builtin/rebase.c:1395
+#: builtin/rebase.c:1424
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Mode desconegut: %s"
 
-#: builtin/rebase.c:1434
+#: builtin/rebase.c:1463
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy requereix --merge o --interactive"
 
-#: builtin/rebase.c:1463
+#: builtin/rebase.c:1492
 msgid "apply options and merge options cannot be used together"
 msgstr "les opcions apply i merge no es poden usar juntes"
 
-#: builtin/rebase.c:1476
+#: builtin/rebase.c:1505
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "Rerefons de «rebase» desconegut: %s"
 
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1534
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec requereix --exec o --interactive"
 
-#: builtin/rebase.c:1536
+#: builtin/rebase.c:1565
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "font no vàlida: «%s»"
 
-#: builtin/rebase.c:1542
+#: builtin/rebase.c:1571
 msgid "Could not create new root commit"
 msgstr "No s'ha pogut crear una comissió arrel nova"
 
-#: builtin/rebase.c:1568
+#: builtin/rebase.c:1597
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr "«%s»: necessita exactament una base de fusió amb branca"
 
-#: builtin/rebase.c:1571
+#: builtin/rebase.c:1600
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "«%s»: necessita exactament una base de fusió"
 
-#: builtin/rebase.c:1580
+#: builtin/rebase.c:1609
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "No apunta a una comissió vàlida «%s»"
 
-#: builtin/rebase.c:1607
+#: builtin/rebase.c:1636
 #, c-format
 msgid "no such branch/commit '%s'"
 msgstr "no existeix aquesta branca o comissió «%s»"
 
-#: builtin/rebase.c:1618 builtin/submodule--helper.c:39
-#: builtin/submodule--helper.c:2659
+#: builtin/rebase.c:1647 builtin/submodule--helper.c:43
+#: builtin/submodule--helper.c:2477
 #, c-format
 msgid "No such ref: %s"
 msgstr "No hi ha tal referència: %s"
 
-#: builtin/rebase.c:1629
+#: builtin/rebase.c:1658
 msgid "Could not resolve HEAD to a revision"
 msgstr "No s'ha pogut resoldre HEAD a una revisió"
 
-#: builtin/rebase.c:1650
+#: builtin/rebase.c:1679
 msgid "Please commit or stash them."
 msgstr "Cometeu-los o emmagatzemeu-los."
 
-#: builtin/rebase.c:1686
-#, c-format
-msgid "could not switch to %s"
-msgstr "no s'ha pogut commutar a %s"
-
-#: builtin/rebase.c:1697
+#: builtin/rebase.c:1714
 msgid "HEAD is up to date."
 msgstr "HEAD està al dia."
 
-#: builtin/rebase.c:1699
+#: builtin/rebase.c:1716
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "La branca actual %s està al dia.\n"
 
-#: builtin/rebase.c:1707
+#: builtin/rebase.c:1724
 msgid "HEAD is up to date, rebase forced."
 msgstr "La branca actual està al dia, «rebase» forçat."
 
-#: builtin/rebase.c:1709
+#: builtin/rebase.c:1726
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "La branca actual %s està al dia; «rebase» forçat.\n"
 
-#: builtin/rebase.c:1717
+#: builtin/rebase.c:1734
 msgid "The pre-rebase hook refused to rebase."
 msgstr "El lligam pre-«rebase» ha refusat a fer «rebase»."
 
-#: builtin/rebase.c:1724
+#: builtin/rebase.c:1741
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Canvis a %s:\n"
 
-#: builtin/rebase.c:1727
+#: builtin/rebase.c:1744
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Canvis de %s a %s:\n"
 
-#: builtin/rebase.c:1752
+#: builtin/rebase.c:1769
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "Primer, s'està rebobinant HEAD per a reproduir el vostre treball al "
 "damunt...\n"
 
-#: builtin/rebase.c:1761
+#: builtin/rebase.c:1781
 msgid "Could not detach HEAD"
 msgstr "No s'ha pogut separar HEAD"
 
-#: builtin/rebase.c:1770
+#: builtin/rebase.c:1790
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Avanç ràpid %s a %s.\n"
@@ -20676,7 +21160,7 @@ msgstr "Avanç ràpid %s a %s.\n"
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack <git-dir>"
 
-#: builtin/receive-pack.c:1275
+#: builtin/receive-pack.c:1263
 msgid ""
 "By default, updating the current branch in a non-bare repository\n"
 "is denied, because it will make the index and work tree inconsistent\n"
@@ -20707,7 +21191,7 @@ msgstr ""
 "per defecte, establiu la variable de configuració\n"
 "«receive.denyCurrentBranch» a «refuse»."
 
-#: builtin/receive-pack.c:1295
+#: builtin/receive-pack.c:1283
 msgid ""
 "By default, deleting the current branch is denied, because the next\n"
 "'git clone' won't result in any file checked out, causing confusion.\n"
@@ -20729,79 +21213,117 @@ msgstr ""
 "\n"
 "Per a silenciar aquest missatge, podeu establir-la a «refuse»."
 
-#: builtin/receive-pack.c:2474
+#: builtin/receive-pack.c:2476
 msgid "quiet"
 msgstr "silenciós"
 
-#: builtin/receive-pack.c:2489
+#: builtin/receive-pack.c:2491
 msgid "you must specify a directory"
 msgstr "heu d'especificar un directori"
 
-#: builtin/reflog.c:17
+#: builtin/reflog.c:9
+msgid "git reflog [show] [<log-options>] [<ref>]"
+msgstr "git reflog [show] [<log-options>] [<ref>]"
+
+#: builtin/reflog.c:12
 msgid ""
-"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] "
-"[--rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all]"
-" <refs>..."
+"git reflog expire [--expire=<time>] [--expire-unreachable=<time>]\n"
+"                  [--rewrite] [--updateref] [--stale-fix]\n"
+"                  [--dry-run | -n] [--verbose] [--all [--single-worktree] | <refs>...]"
 msgstr ""
-"git reflog expire [--expire=<data>] [--expire-unreachable=<data>] "
-"[--rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all]"
-" <referències>..."
+"git reflog expire [--expire=<time>] [--expire-unreachable=<time>]\n"
+"                  [--rewrite] [--updateref] [--stale-fix]\n"
+"                  [--dry-run | -n] [--verbose] [--all [--single-worktree] | <refs>...]"
 
-#: builtin/reflog.c:22
+#: builtin/reflog.c:17
 msgid ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] "
-"<refs>..."
+"git reflog delete [--rewrite] [--updateref]\n"
+"                  [--dry-run | -n] [--verbose] <ref>@{<specifier>}..."
 msgstr ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] "
-"<referències>..."
+"git reflog delete [--rewrite] [--updateref]\n"
+"                  [--dry-run | -n] [--verbose] <ref>@{<specifier>}..."
 
-#: builtin/reflog.c:25
+#: builtin/reflog.c:21
 msgid "git reflog exists <ref>"
 msgstr "git reflog exists <referència>"
 
-#: builtin/reflog.c:585 builtin/reflog.c:590
-#, c-format
-msgid "'%s' is not a valid timestamp"
-msgstr "«%s» no és una marca de temps vàlida"
+#: builtin/reflog.c:197 builtin/reflog.c:211
+#, c-format, fuzzy
+msgid "invalid timestamp '%s' given to '--%s'"
+msgstr "el codi de temps «%s» no és vàlid donat a «--%s»"
+
+#: builtin/reflog.c:240 builtin/reflog.c:359
+#, fuzzy
+msgid "do not actually prune any entries"
+msgstr "no practiquis cap entrada"
+
+#: builtin/reflog.c:243 builtin/reflog.c:362
+msgid ""
+"rewrite the old SHA1 with the new SHA1 of the entry that now precedes it"
+msgstr "reescriu l'antic SHA1 amb el nou SHA1 de l'entrada que ara precedeix"
+
+#: builtin/reflog.c:246 builtin/reflog.c:365
+msgid "update the reference to the value of the top reflog entry"
+msgstr "actualitza la referència al valor de l'entrada de reflog superior"
+
+#: builtin/reflog.c:248 builtin/reflog.c:367
+#, fuzzy
+msgid "print extra information on screen"
+msgstr "imprimeix informació extra a la pantalla"
+
+#: builtin/reflog.c:249 builtin/reflog.c:253
+msgid "timestamp"
+msgstr "marca de temps"
+
+#: builtin/reflog.c:250
+#, fuzzy
+msgid "prune entries older than the specified time"
+msgstr "poda les entrades més antigues que el temps especificat"
+
+#: builtin/reflog.c:254
+#, fuzzy
+msgid ""
+"prune entries older than <time> that are not reachable from the current tip "
+"of the branch"
+msgstr ""
+"poda les entrades més antigues de <time> que no es poden accedir des de la "
+"punta actual de la branca"
 
-#: builtin/reflog.c:631
+#: builtin/reflog.c:258
+#, fuzzy
+msgid "prune any reflog entries that point to broken commits"
+msgstr "poda qualsevol entrada de reflog que apunti a comissions trencades"
+
+#: builtin/reflog.c:259
+#, fuzzy
+msgid "process the reflogs of all references"
+msgstr "processa els reflogs de totes les referències"
+
+#: builtin/reflog.c:261
+#, fuzzy
+msgid "limits processing to reflogs from the current worktree only"
+msgstr "limita el processament a reflogs només de l'arbre de treball actual"
+
+#: builtin/reflog.c:294
 #, c-format
 msgid "Marking reachable objects..."
 msgstr "S'estan marcant els objectes abastables..."
 
-#: builtin/reflog.c:675
+#: builtin/reflog.c:338
 #, c-format
 msgid "%s points nowhere!"
 msgstr "%s no apunta a enlloc"
 
-#: builtin/reflog.c:731
+#: builtin/reflog.c:374
 msgid "no reflog specified to delete"
 msgstr "no s'ha especificat cap registre de referència per a suprimir"
 
-#: builtin/reflog.c:742
-#, c-format
-msgid "not a reflog: %s"
-msgstr "no és un registre de referència: %s"
-
-#: builtin/reflog.c:747
-#, c-format
-msgid "no reflog for '%s'"
-msgstr "cap registre de referència per a «%s»"
-
-#: builtin/reflog.c:794
+#: builtin/reflog.c:396
 #, c-format
 msgid "invalid ref format: %s"
 msgstr "format de referència no vàlid: %s"
 
-#: builtin/reflog.c:803
-msgid "git reflog [ show | expire | delete | exists ]"
-msgstr "git reflog [ show | expire | delete | exists ]"
-
-#: builtin/remote.c:17
-msgid "git remote [-v | --verbose]"
-msgstr "git remote [-v | --verbose]"
-
-#: builtin/remote.c:18
+#: builtin/remote.c:19
 msgid ""
 "git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] "
 "[--mirror=<fetch|push>] <name> <url>"
@@ -20809,87 +21331,87 @@ msgstr ""
 "git remote add [-t <branca>] [-m <mestra>] [-f] [--tags | --no-tags] "
 "[--mirror=<fetch|push>] <nom> <url>"
 
-#: builtin/remote.c:19 builtin/remote.c:39
-msgid "git remote rename <old> <new>"
-msgstr "git remote rename <antic> <nou>"
+#: builtin/remote.c:20 builtin/remote.c:40
+msgid "git remote rename [--[no-]progress] <old> <new>"
+msgstr "git remote rename [--[no-]progress] <old> <new>"
 
-#: builtin/remote.c:20 builtin/remote.c:44
+#: builtin/remote.c:21 builtin/remote.c:45
 msgid "git remote remove <name>"
 msgstr "git remote remove <nom>"
 
-#: builtin/remote.c:21 builtin/remote.c:49
+#: builtin/remote.c:22 builtin/remote.c:50
 msgid "git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"
 msgstr "git remote set-head <nom> (-a | --auto | -d | --delete | <branca>)"
 
-#: builtin/remote.c:22
+#: builtin/remote.c:23
 msgid "git remote [-v | --verbose] show [-n] <name>"
 msgstr "git remote [-v | --verbose] show [-n] <nom>"
 
-#: builtin/remote.c:23
+#: builtin/remote.c:24
 msgid "git remote prune [-n | --dry-run] <name>"
 msgstr "git remote prune [-n | --dry-run] <nom>"
 
-#: builtin/remote.c:24
+#: builtin/remote.c:25
 msgid ""
 "git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
 msgstr ""
 "git remote [-v | --verbose] update [-p | --prune] [(<grup> | <remot>)...]"
 
-#: builtin/remote.c:25
+#: builtin/remote.c:26
 msgid "git remote set-branches [--add] <name> <branch>..."
 msgstr "git remote set-branches [--add] <nom> <branca>..."
 
-#: builtin/remote.c:26 builtin/remote.c:75
+#: builtin/remote.c:27 builtin/remote.c:76
 msgid "git remote get-url [--push] [--all] <name>"
 msgstr "git remote get-url [--push] [--all] <nom>"
 
-#: builtin/remote.c:27 builtin/remote.c:80
+#: builtin/remote.c:28 builtin/remote.c:81
 msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]"
 msgstr "git remote set-url [--push] <nom> <url-nou> [<url-antic>]"
 
-#: builtin/remote.c:28 builtin/remote.c:81
+#: builtin/remote.c:29 builtin/remote.c:82
 msgid "git remote set-url --add <name> <newurl>"
 msgstr "git remote set-url --add <nom> <url-nou>"
 
-#: builtin/remote.c:29 builtin/remote.c:82
+#: builtin/remote.c:30 builtin/remote.c:83
 msgid "git remote set-url --delete <name> <url>"
 msgstr "git remote set-url --delete <nom> <url>"
 
-#: builtin/remote.c:34
+#: builtin/remote.c:35
 msgid "git remote add [<options>] <name> <url>"
 msgstr "git remote add [<opcions>] <nom> <url>"
 
-#: builtin/remote.c:54
+#: builtin/remote.c:55
 msgid "git remote set-branches <name> <branch>..."
 msgstr "git remote set-branches <nom> <branca>..."
 
-#: builtin/remote.c:55
+#: builtin/remote.c:56
 msgid "git remote set-branches --add <name> <branch>..."
 msgstr "git remote set-branches --add <nom> <branca>..."
 
-#: builtin/remote.c:60
+#: builtin/remote.c:61
 msgid "git remote show [<options>] <name>"
 msgstr "git remote show [<opcions>] <nom>"
 
-#: builtin/remote.c:65
+#: builtin/remote.c:66
 msgid "git remote prune [<options>] <name>"
 msgstr "git remote prune [<opcions>] <nom>"
 
-#: builtin/remote.c:70
+#: builtin/remote.c:71
 msgid "git remote update [<options>] [<group> | <remote>]..."
 msgstr "git remote update [<opcions>] [<grup> | <remot>]..."
 
-#: builtin/remote.c:99
+#: builtin/remote.c:100
 #, c-format
 msgid "Updating %s"
 msgstr "S'està actualitzant %s"
 
-#: builtin/remote.c:101
+#: builtin/remote.c:102
 #, c-format
 msgid "Could not fetch %s"
 msgstr "No s'ha pogut obtenir %s"
 
-#: builtin/remote.c:131
+#: builtin/remote.c:132
 msgid ""
 "--mirror is dangerous and deprecated; please\n"
 "\t use --mirror=fetch or --mirror=push instead"
@@ -20898,79 +21420,79 @@ msgstr ""
 "\t useu --mirror=fetch o\n"
 "\t --mirror=push en lloc d'això"
 
-#: builtin/remote.c:148
+#: builtin/remote.c:149
 #, c-format
 msgid "unknown mirror argument: %s"
 msgstr "argument de «mirror» desconegut: %s"
 
-#: builtin/remote.c:164
+#: builtin/remote.c:165
 msgid "fetch the remote branches"
 msgstr "obtén les branques remotes"
 
-#: builtin/remote.c:166
+#: builtin/remote.c:167
 msgid "import all tags and associated objects when fetching"
 msgstr "en obtenir, importa totes les etiquetes i tots els objectes"
 
-#: builtin/remote.c:169
+#: builtin/remote.c:170
 msgid "or do not fetch any tag at all (--no-tags)"
 msgstr "o no obtinguis cap etiqueta (--no-tags)"
 
-#: builtin/remote.c:171
+#: builtin/remote.c:172
 msgid "branch(es) to track"
 msgstr "branques a seguir"
 
-#: builtin/remote.c:172
+#: builtin/remote.c:173
 msgid "master branch"
 msgstr "branca mestra"
 
-#: builtin/remote.c:174
+#: builtin/remote.c:175
 msgid "set up remote as a mirror to push to or fetch from"
 msgstr "estableix el remot com a mirall al qual pujar o del qual obtenir"
 
-#: builtin/remote.c:186
+#: builtin/remote.c:187
 msgid "specifying a master branch makes no sense with --mirror"
 msgstr "especificar una branca mestra no té sentit amb --mirror"
 
-#: builtin/remote.c:188
+#: builtin/remote.c:189
 msgid "specifying branches to track makes sense only with fetch mirrors"
 msgstr ""
 "especificar les branques a seguir té sentit només amb miralls d'obtenció"
 
-#: builtin/remote.c:195 builtin/remote.c:705
+#: builtin/remote.c:196 builtin/remote.c:716
 #, c-format
 msgid "remote %s already exists."
 msgstr "el remot %s ja existeix."
 
-#: builtin/remote.c:240
+#: builtin/remote.c:241
 #, c-format
 msgid "Could not setup master '%s'"
 msgstr "No s'ha pogut configurar la mestra «%s»"
 
-#: builtin/remote.c:322
+#: builtin/remote.c:323
 #, c-format
 msgid "unhandled branch.%s.rebase=%s; assuming 'true'"
 msgstr "no s'ha gestionat branch.%s.rebase=%s; assumint «true»"
 
-#: builtin/remote.c:366
+#: builtin/remote.c:367
 #, c-format
 msgid "Could not get fetch map for refspec %s"
 msgstr ""
 "No s'ha pogut obtenir el mapa d'obtenció de l'especificació de referència %s"
 
-#: builtin/remote.c:460 builtin/remote.c:468
+#: builtin/remote.c:461 builtin/remote.c:469
 msgid "(matching)"
 msgstr "(coincident)"
 
-#: builtin/remote.c:472
+#: builtin/remote.c:473
 msgid "(delete)"
 msgstr "(suprimir)"
 
-#: builtin/remote.c:660
+#: builtin/remote.c:664
 #, c-format
 msgid "could not set '%s'"
 msgstr "no s'ha pogut establir «%s»"
 
-#: builtin/remote.c:665
+#: builtin/remote.c:669
 #, c-format
 msgid ""
 "The %s configuration remote.pushDefault in:\n"
@@ -20981,17 +21503,17 @@ msgstr ""
 "\t%s:%d\n"
 "ara anomena un remot no existent «%s»"
 
-#: builtin/remote.c:696 builtin/remote.c:841 builtin/remote.c:948
+#: builtin/remote.c:707 builtin/remote.c:866 builtin/remote.c:973
 #, c-format
 msgid "No such remote: '%s'"
 msgstr "No existeix el remot «%s»"
 
-#: builtin/remote.c:715
+#: builtin/remote.c:726
 #, c-format
 msgid "Could not rename config section '%s' to '%s'"
 msgstr "No s'ha pogut canviar el nom de la secció de configuració «%s» a «%s»"
 
-#: builtin/remote.c:735
+#: builtin/remote.c:746
 #, c-format
 msgid ""
 "Not updating non-default fetch refspec\n"
@@ -21002,17 +21524,22 @@ msgstr ""
 "\t%s\n"
 "\tActualitzeu la configuració manualment si és necessari."
 
-#: builtin/remote.c:775
+#: builtin/remote.c:783
+#, fuzzy
+msgid "Renaming remote references"
+msgstr "Canviant el nom de les referències remotes"
+
+#: builtin/remote.c:794
 #, c-format
 msgid "deleting '%s' failed"
 msgstr "la supressió de «%s» ha fallat"
 
-#: builtin/remote.c:809
+#: builtin/remote.c:832
 #, c-format
 msgid "creating '%s' failed"
 msgstr "la creació de «%s» ha fallat"
 
-#: builtin/remote.c:887
+#: builtin/remote.c:912
 msgid ""
 "Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
 "to delete it, use:"
@@ -21026,306 +21553,306 @@ msgstr[1] ""
 "Nota: Algunes branques fora de la jerarquia refs/remotes/ no s'han eliminat;\n"
 "per a suprimir-les, useu:"
 
-#: builtin/remote.c:901
+#: builtin/remote.c:926
 #, c-format
 msgid "Could not remove config section '%s'"
 msgstr "No s'ha pogut eliminar la secció de configuració «%s»"
 
-#: builtin/remote.c:1009
+#: builtin/remote.c:1034
 #, c-format
 msgid " new (next fetch will store in remotes/%s)"
 msgstr " nou (la pròxima obtenció emmagatzemarà a remotes/%s)"
 
-#: builtin/remote.c:1012
+#: builtin/remote.c:1037
 msgid " tracked"
 msgstr " seguit"
 
-#: builtin/remote.c:1014
+#: builtin/remote.c:1039
 msgid " stale (use 'git remote prune' to remove)"
 msgstr " estancat (useu «git remote prune» per a eliminar)"
 
-#: builtin/remote.c:1016
+#: builtin/remote.c:1041
 msgid " ???"
 msgstr " ???"
 
-#: builtin/remote.c:1057
+#: builtin/remote.c:1082
 #, c-format
 msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
 msgstr "branch.%s.merge no vàlid; no es pot fer «rebase» sobre > 1 branca"
 
-#: builtin/remote.c:1066
+#: builtin/remote.c:1091
 #, c-format
 msgid "rebases interactively onto remote %s"
 msgstr "es fa «rebase» interactivament sobre el remot %s"
 
-#: builtin/remote.c:1068
+#: builtin/remote.c:1093
 #, c-format
 msgid "rebases interactively (with merges) onto remote %s"
 msgstr "es fa «rebase» interactivament (amb fusions) sobre el remot %s"
 
-#: builtin/remote.c:1071
+#: builtin/remote.c:1096
 #, c-format
 msgid "rebases onto remote %s"
 msgstr "es fa «rebase» sobre el remot %s"
 
-#: builtin/remote.c:1075
+#: builtin/remote.c:1100
 #, c-format
 msgid " merges with remote %s"
 msgstr " es fusiona amb el remot %s"
 
-#: builtin/remote.c:1078
+#: builtin/remote.c:1103
 #, c-format
 msgid "merges with remote %s"
 msgstr "es fusiona amb el remot %s"
 
-#: builtin/remote.c:1081
+#: builtin/remote.c:1106
 #, c-format
 msgid "%-*s    and with remote %s\n"
 msgstr "%-*s    i amb el remot %s\n"
 
-#: builtin/remote.c:1124
+#: builtin/remote.c:1149
 msgid "create"
 msgstr "crea"
 
-#: builtin/remote.c:1127
+#: builtin/remote.c:1152
 msgid "delete"
 msgstr "suprimeix"
 
-#: builtin/remote.c:1131
+#: builtin/remote.c:1156
 msgid "up to date"
 msgstr "al dia"
 
-#: builtin/remote.c:1134
+#: builtin/remote.c:1159
 msgid "fast-forwardable"
 msgstr "avanç ràpid possible"
 
-#: builtin/remote.c:1137
+#: builtin/remote.c:1162
 msgid "local out of date"
 msgstr "local no actualitzat"
 
-#: builtin/remote.c:1144
+#: builtin/remote.c:1169
 #, c-format
 msgid "    %-*s forces to %-*s (%s)"
 msgstr "    %-*s força a %-*s (%s)"
 
-#: builtin/remote.c:1147
+#: builtin/remote.c:1172
 #, c-format
 msgid "    %-*s pushes to %-*s (%s)"
 msgstr "    %-*s puja a %-*s (%s)"
 
-#: builtin/remote.c:1151
+#: builtin/remote.c:1176
 #, c-format
 msgid "    %-*s forces to %s"
 msgstr "    %-*s força a %s"
 
-#: builtin/remote.c:1154
+#: builtin/remote.c:1179
 #, c-format
 msgid "    %-*s pushes to %s"
 msgstr "    %-*s puja a %s"
 
-#: builtin/remote.c:1222
+#: builtin/remote.c:1247
 msgid "do not query remotes"
 msgstr "no consultis els remots"
 
-#: builtin/remote.c:1243
+#: builtin/remote.c:1268
 #, c-format
 msgid "* remote %s"
 msgstr "* remot %s"
 
-#: builtin/remote.c:1244
+#: builtin/remote.c:1269
 #, c-format
 msgid "  Fetch URL: %s"
 msgstr "  URL d'obtenció: %s"
 
-#: builtin/remote.c:1245 builtin/remote.c:1261 builtin/remote.c:1398
+#: builtin/remote.c:1270 builtin/remote.c:1286 builtin/remote.c:1423
 msgid "(no URL)"
 msgstr "(sense URL)"
 
 #. TRANSLATORS: the colon ':' should align
 #. with the one in " Fetch URL: %s"
 #. translation.
-#: builtin/remote.c:1259 builtin/remote.c:1261
+#: builtin/remote.c:1284 builtin/remote.c:1286
 #, c-format
 msgid "  Push  URL: %s"
 msgstr "  URL de pujada: %s"
 
-#: builtin/remote.c:1263 builtin/remote.c:1265 builtin/remote.c:1267
+#: builtin/remote.c:1288 builtin/remote.c:1290 builtin/remote.c:1292
 #, c-format
 msgid "  HEAD branch: %s"
 msgstr "  Branca de HEAD: %s"
 
-#: builtin/remote.c:1263
+#: builtin/remote.c:1288
 msgid "(not queried)"
 msgstr "(no consultat)"
 
-#: builtin/remote.c:1265
+#: builtin/remote.c:1290
 msgid "(unknown)"
 msgstr "(desconegut)"
 
-#: builtin/remote.c:1269
+#: builtin/remote.c:1294
 #, c-format
 msgid "  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
 msgstr ""
 "  Branca de HEAD (la HEAD remot és ambigua, pot ser un dels següents):\n"
 
-#: builtin/remote.c:1281
+#: builtin/remote.c:1306
 #, c-format
 msgid "  Remote branch:%s"
 msgid_plural "  Remote branches:%s"
 msgstr[0] "  Branca remota:%s"
 msgstr[1] "  Branques remotes:%s"
 
-#: builtin/remote.c:1284 builtin/remote.c:1310
+#: builtin/remote.c:1309 builtin/remote.c:1335
 msgid " (status not queried)"
 msgstr " (estat no consultat)"
 
-#: builtin/remote.c:1293
+#: builtin/remote.c:1318
 msgid "  Local branch configured for 'git pull':"
 msgid_plural "  Local branches configured for 'git pull':"
 msgstr[0] "  Branca local configurada per a «git pull»:"
 msgstr[1] "  Branques locals configurades per a «git pull»:"
 
-#: builtin/remote.c:1301
+#: builtin/remote.c:1326
 msgid "  Local refs will be mirrored by 'git push'"
 msgstr "  «git push» reflectirà les referències locals"
 
-#: builtin/remote.c:1307
+#: builtin/remote.c:1332
 #, c-format
 msgid "  Local ref configured for 'git push'%s:"
 msgid_plural "  Local refs configured for 'git push'%s:"
 msgstr[0] "  Referència local configurada per a «git push»%s:"
 msgstr[1] "  Referències locals configurades per a «git push»%s:"
 
-#: builtin/remote.c:1328
+#: builtin/remote.c:1353
 msgid "set refs/remotes/<name>/HEAD according to remote"
 msgstr "estableix refs/remotes/<nom>/HEAD segons el remot"
 
-#: builtin/remote.c:1330
+#: builtin/remote.c:1355
 msgid "delete refs/remotes/<name>/HEAD"
 msgstr "suprimeix refs/remotes/<nom>/HEAD"
 
-#: builtin/remote.c:1344
+#: builtin/remote.c:1369
 msgid "Cannot determine remote HEAD"
 msgstr "No es pot determinar la HEAD remota"
 
-#: builtin/remote.c:1346
+#: builtin/remote.c:1371
 msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
 msgstr "Múltiples branques de HEAD remotes. Trieu-ne una explícitament amb:"
 
-#: builtin/remote.c:1356
+#: builtin/remote.c:1381
 #, c-format
 msgid "Could not delete %s"
 msgstr "No s'ha pogut suprimir %s"
 
-#: builtin/remote.c:1364
+#: builtin/remote.c:1389
 #, c-format
 msgid "Not a valid ref: %s"
 msgstr "No és una referència vàlida: %s"
 
-#: builtin/remote.c:1366
+#: builtin/remote.c:1391
 #, c-format
 msgid "Could not setup %s"
 msgstr "No s'ha pogut configurar %s"
 
-#: builtin/remote.c:1384
+#: builtin/remote.c:1409
 #, c-format
 msgid " %s will become dangling!"
 msgstr " %s es tornarà penjant!"
 
-#: builtin/remote.c:1385
+#: builtin/remote.c:1410
 #, c-format
 msgid " %s has become dangling!"
 msgstr " %s s'ha tornat penjant!"
 
-#: builtin/remote.c:1394
+#: builtin/remote.c:1419
 #, c-format
 msgid "Pruning %s"
 msgstr "S'està podant %s"
 
-#: builtin/remote.c:1395
+#: builtin/remote.c:1420
 #, c-format
 msgid "URL: %s"
 msgstr "URL: %s"
 
-#: builtin/remote.c:1411
+#: builtin/remote.c:1436
 #, c-format
 msgid " * [would prune] %s"
 msgstr " * [podaria] %s"
 
-#: builtin/remote.c:1414
+#: builtin/remote.c:1439
 #, c-format
 msgid " * [pruned] %s"
 msgstr " * [podat] %s"
 
-#: builtin/remote.c:1459
+#: builtin/remote.c:1484
 msgid "prune remotes after fetching"
 msgstr "poda els remots després d'obtenir-los"
 
-#: builtin/remote.c:1523 builtin/remote.c:1579 builtin/remote.c:1649
+#: builtin/remote.c:1548 builtin/remote.c:1604 builtin/remote.c:1674
 #, c-format
 msgid "No such remote '%s'"
 msgstr "No hi ha tal remot «%s»"
 
-#: builtin/remote.c:1541
+#: builtin/remote.c:1566
 msgid "add branch"
 msgstr "afegeix branca"
 
-#: builtin/remote.c:1548
+#: builtin/remote.c:1573
 msgid "no remote specified"
 msgstr "cap remot especificat"
 
-#: builtin/remote.c:1565
+#: builtin/remote.c:1590
 msgid "query push URLs rather than fetch URLs"
 msgstr "consulta els URL de pujada en lloc dels URL d'obtenció"
 
-#: builtin/remote.c:1567
+#: builtin/remote.c:1592
 msgid "return all URLs"
 msgstr "retorna tots els URL"
 
-#: builtin/remote.c:1597
+#: builtin/remote.c:1622
 #, c-format
 msgid "no URLs configured for remote '%s'"
 msgstr "cap URL configurat per al remot «%s»"
 
-#: builtin/remote.c:1623
+#: builtin/remote.c:1648
 msgid "manipulate push URLs"
 msgstr "manipula els URL de pujada"
 
-#: builtin/remote.c:1625
+#: builtin/remote.c:1650
 msgid "add URL"
 msgstr "afegeix URL"
 
-#: builtin/remote.c:1627
+#: builtin/remote.c:1652
 msgid "delete URLs"
 msgstr "suprimeix els URL"
 
-#: builtin/remote.c:1634
+#: builtin/remote.c:1659
 msgid "--add --delete doesn't make sense"
 msgstr "--add --delete no té sentit"
 
-#: builtin/remote.c:1675
+#: builtin/remote.c:1700
 #, c-format
 msgid "Invalid old URL pattern: %s"
 msgstr "Patró d'URL antic no vàlid: %s"
 
-#: builtin/remote.c:1683
+#: builtin/remote.c:1708
 #, c-format
 msgid "No such URL found: %s"
 msgstr "No s'ha trobat tal URL: %s"
 
-#: builtin/remote.c:1685
+#: builtin/remote.c:1710
 msgid "Will not delete all non-push URLs"
 msgstr "No se suprimiran tots els URL no de pujada"
 
-#: builtin/remote.c:1702
+#: builtin/remote.c:1727
 msgid "be verbose; must be placed before a subcommand"
 msgstr "sigues detallat; s'ha de col·locar abans d'una subordre"
 
-#: builtin/repack.c:28
+#: builtin/repack.c:29
 msgid "git repack [<options>]"
 msgstr "git repack [<opcions>]"
 
-#: builtin/repack.c:33
+#: builtin/repack.c:34
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -21333,152 +21860,154 @@ msgstr ""
 "Els reempaquetaments incrementals són incompatibles amb els índexs de mapes de bits.  Useu\n"
 "--no-write-bitmap-index o inhabiliteu el paràmetre de configuració pack.writebitmaps."
 
-#: builtin/repack.c:201
+#: builtin/repack.c:206
 msgid "could not start pack-objects to repack promisor objects"
 msgstr ""
 "no s'ha pogut iniciar pack-objects per a tornar a empaquetar els objectes "
 "«promisor»"
 
-#: builtin/repack.c:275 builtin/repack.c:820
+#: builtin/repack.c:280 builtin/repack.c:824
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
-"repack: s'esperen només línies amb l'id d'objecte hexadecimal complet "
-"des de pack-objects."
+"repack: s'esperen només línies amb l'id d'objecte hexadecimal complet des de"
+" pack-objects."
 
-#: builtin/repack.c:299
+#: builtin/repack.c:304
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr ""
-"no s'ha pogut finalitzar pack-objects per a tornar a empaquetar els objectes "
-"«promisor»"
+"no s'ha pogut finalitzar pack-objects per a tornar a empaquetar els objectes"
+" «promisor»"
 
-#: builtin/repack.c:314
+#: builtin/repack.c:319
 #, c-format
 msgid "cannot open index for %s"
 msgstr "no s'ha pogut obrir l'índex per a %s"
 
-#: builtin/repack.c:373
+#: builtin/repack.c:378
 #, c-format
 msgid "pack %s too large to consider in geometric progression"
-msgstr "el paquet %s és massa gran per a considerar-ho en progressió geomètrica"
+msgstr ""
+"el paquet %s és massa gran per a considerar-ho en progressió geomètrica"
 
-#: builtin/repack.c:406 builtin/repack.c:413 builtin/repack.c:418
+#: builtin/repack.c:411 builtin/repack.c:418 builtin/repack.c:423
 #, c-format
 msgid "pack %s too large to roll up"
 msgstr "el paquet %s és massa gran per a enrotllar-lo"
 
-#: builtin/repack.c:498
+#: builtin/repack.c:503
 #, c-format
 msgid "could not open tempfile %s for writing"
 msgstr "no s'ha pogut obrir el fitxer temporal «%s» per a escriptura"
 
-#: builtin/repack.c:516
+#: builtin/repack.c:521
 msgid "could not close refs snapshot tempfile"
-msgstr "no s'ha pogut tancar el fitxer temporal amb la instantània de referències"
+msgstr ""
+"no s'ha pogut tancar el fitxer temporal amb la instantània de referències"
 
-#: builtin/repack.c:630
+#: builtin/repack.c:634
 msgid "pack everything in a single pack"
 msgstr "empaqueta-ho tot en un únic paquet"
 
-#: builtin/repack.c:632
+#: builtin/repack.c:636
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "el mateix que -a, i solta els objectes inabastables"
 
-#: builtin/repack.c:635
+#: builtin/repack.c:639
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "elimina els paquets redundants, i executeu git-prune-packed"
 
-#: builtin/repack.c:637
+#: builtin/repack.c:641
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "passa --no-reuse-delta a git-pack-objects"
 
-#: builtin/repack.c:639
+#: builtin/repack.c:643
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "passa --no-reuse-object a git-pack-objects"
 
-#: builtin/repack.c:641
+#: builtin/repack.c:645
 msgid "do not run git-update-server-info"
 msgstr "no executis git-update-server-info"
 
-#: builtin/repack.c:644
+#: builtin/repack.c:648
 msgid "pass --local to git-pack-objects"
 msgstr "passa --local a git-pack-objects"
 
-#: builtin/repack.c:646
+#: builtin/repack.c:650
 msgid "write bitmap index"
 msgstr "escriu índex de mapa de bits"
 
-#: builtin/repack.c:648
+#: builtin/repack.c:652
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "passa --delta-islands a git-pack-objects"
 
-#: builtin/repack.c:649
+#: builtin/repack.c:653
 msgid "approxidate"
 msgstr "data aproximada"
 
-#: builtin/repack.c:650
+#: builtin/repack.c:654
 msgid "with -A, do not loosen objects older than this"
 msgstr "amb -A, no soltis els objectes més antics que aquest"
 
-#: builtin/repack.c:652
+#: builtin/repack.c:656
 msgid "with -a, repack unreachable objects"
 msgstr "amb -a, reempaqueta els objectes inabastables"
 
-#: builtin/repack.c:654
+#: builtin/repack.c:658
 msgid "size of the window used for delta compression"
 msgstr "mida de la finestra que s'usa per a compressió de diferències"
 
-#: builtin/repack.c:655 builtin/repack.c:661
+#: builtin/repack.c:659 builtin/repack.c:665
 msgid "bytes"
 msgstr "octets"
 
-#: builtin/repack.c:656
+#: builtin/repack.c:660
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr ""
 "el mateix que l'anterior, però limita la mida de memòria en lloc del nombre "
 "d'entrades"
 
-#: builtin/repack.c:658
+#: builtin/repack.c:662
 msgid "limits the maximum delta depth"
 msgstr "limita la profunditat màxima de les diferències"
 
-#: builtin/repack.c:660
+#: builtin/repack.c:664
 msgid "limits the maximum number of threads"
 msgstr "limita el nombre màxim de fils"
 
-#: builtin/repack.c:662
+#: builtin/repack.c:666
 msgid "maximum size of each packfile"
 msgstr "mida màxima de cada fitxer de paquet"
 
-#: builtin/repack.c:664
+#: builtin/repack.c:668
 msgid "repack objects in packs marked with .keep"
 msgstr "reempaqueta els objectes en paquets marcats amb .keep"
 
-#: builtin/repack.c:666
+#: builtin/repack.c:670
 msgid "do not repack this pack"
 msgstr "no reempaquetis aquest paquet"
 
-#: builtin/repack.c:668
+#: builtin/repack.c:672
 msgid "find a geometric progression with factor <N>"
 msgstr "troba una progressió geomètrica amb el factor <N>"
 
-#: builtin/repack.c:670
+#: builtin/repack.c:674
 msgid "write a multi-pack index of the resulting packs"
 msgstr "escriu un índex multipaquet dels paquets resultants"
 
-#: builtin/repack.c:680
+#: builtin/repack.c:684
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "no es poden suprimir paquets en un repositori d'objectes preciosos"
 
-#: builtin/repack.c:829
+#: builtin/repack.c:833
 msgid "Nothing new to pack."
 msgstr "Res nou a empaquetar."
 
-#: builtin/repack.c:859
+#: builtin/repack.c:863
 #, c-format
 msgid "missing required file: %s"
 msgstr "falta el fitxer requerit: %s"
 
-#: builtin/repack.c:861
+#: builtin/repack.c:865
 #, c-format
 msgid "could not unlink: %s"
 msgstr "no s'ha pogut desenllaçar: «%s»"
@@ -21495,10 +22024,6 @@ msgstr "git replace [-f] --edit <objecte>"
 msgid "git replace [-f] --graft <commit> [<parent>...]"
 msgstr "git replace [-f] --graft <comissió> [<parent>...]"
 
-#: builtin/replace.c:25
-msgid "git replace [-f] --convert-graft-file"
-msgstr "git replace [-f] --convert-graft-file"
-
 #: builtin/replace.c:26
 msgid "git replace -d <object>..."
 msgstr "git replace -d <objecte>..."
@@ -21653,7 +22178,8 @@ msgstr "la comissió nova és la mateixa que l'antiga: «%s»"
 msgid ""
 "could not convert the following graft(s):\n"
 "%s"
-msgstr "no s'han pogut convertir els següents «grafts»:\n"
+msgstr ""
+"no s'han pogut convertir els següents «grafts»:\n"
 "%s"
 
 #: builtin/replace.c:547
@@ -21800,97 +22326,93 @@ msgstr "S'ha produït un error en cercar l'arbre de %s."
 msgid "HEAD is now at %s"
 msgstr "HEAD ara és a %s"
 
-#: builtin/reset.c:299
+#: builtin/reset.c:304
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "No es pot fer un restabliment de %s enmig d'una fusió."
 
-#: builtin/reset.c:396 builtin/stash.c:606 builtin/stash.c:680
-#: builtin/stash.c:704
+#: builtin/reset.c:402 builtin/stash.c:606 builtin/stash.c:669
+#: builtin/stash.c:693
 msgid "be quiet, only report errors"
 msgstr "sigues silenciós, només informa d'errors"
 
-#: builtin/reset.c:398
+#: builtin/reset.c:404
+msgid "skip refreshing the index after reset"
+msgstr "omet l'actualització de l'índex després de reiniciar"
+
+#: builtin/reset.c:406
 msgid "reset HEAD and index"
 msgstr "restableix HEAD i l'índex"
 
-#: builtin/reset.c:399
+#: builtin/reset.c:407
 msgid "reset only HEAD"
 msgstr "restableix només HEAD"
 
-#: builtin/reset.c:401 builtin/reset.c:403
+#: builtin/reset.c:409 builtin/reset.c:411
 msgid "reset HEAD, index and working tree"
 msgstr "restableix HEAD, l'índex i l'arbre de treball"
 
-#: builtin/reset.c:405
+#: builtin/reset.c:413
 msgid "reset HEAD but keep local changes"
 msgstr "restableix HEAD però retén els canvis locals"
 
-#: builtin/reset.c:411
+#: builtin/reset.c:419
 msgid "record only the fact that removed paths will be added later"
 msgstr "registra només el fet que els camins eliminats s'afegiran després"
 
-#: builtin/reset.c:445
+#: builtin/reset.c:452
 #, c-format
 msgid "Failed to resolve '%s' as a valid revision."
 msgstr "S'ha produït un error en resoldre «%s» com a revisió vàlida."
 
-#: builtin/reset.c:453
+#: builtin/reset.c:460
 #, c-format
 msgid "Failed to resolve '%s' as a valid tree."
 msgstr "S'ha produït un error en resoldre «%s» com a arbre vàlid."
 
-#: builtin/reset.c:472
+#: builtin/reset.c:479
 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
 msgstr ""
 "--mixed amb camins està en desús; useu «git reset -- <camins>» en lloc "
 "d'això."
 
-#: builtin/reset.c:474
+#: builtin/reset.c:481
 #, c-format
 msgid "Cannot do %s reset with paths."
 msgstr "No es pot restablir de %s amb camins."
 
-#: builtin/reset.c:489
+#: builtin/reset.c:496
 #, c-format
 msgid "%s reset is not allowed in a bare repository"
 msgstr "el restabliment de %s no es permet en un repositori nu"
 
-#: builtin/reset.c:520
+#: builtin/reset.c:527
 msgid "Unstaged changes after reset:"
 msgstr "Canvis «unstaged» després del restabliment:"
 
-#: builtin/reset.c:523
-#, c-format
+#: builtin/reset.c:530
+#, c-format, fuzzy
 msgid ""
-"\n"
-"It took %.2f seconds to enumerate unstaged changes after reset.  You can\n"
-"use '--quiet' to avoid this.  Set the config setting reset.quiet to true\n"
-"to make this the default.\n"
+"It took %.2f seconds to refresh the index after reset.  You can use\n"
+"'--no-refresh' to avoid this."
 msgstr ""
-"\n"
-"S'ha trigat %.2f segons a enumerar els canvis «unstaged» després del reinici.\n"
-"Podeu utilitzar «--quiet» per a evitar-ho. Establiu el paràmetre de configuració\n"
-"reset.quiet a true per a fer que aquesta configuració sigui predeterminada.\n"
+"Es van trigar un temps de,2f segons a actualitzar l'índex després de reiniciar.  Pots utilitzar\n"
+".--no-refresh' per evitar això."
 
-#: builtin/reset.c:541
+#: builtin/reset.c:547
 #, c-format
 msgid "Could not reset index file to revision '%s'."
 msgstr "No s'ha pogut restablir el fitxer d'índex a la revisió «%s»."
 
-#: builtin/reset.c:546
+#: builtin/reset.c:552
 msgid "Could not write new index file."
 msgstr "No s'ha pogut escriure el fitxer d'índex nou."
 
-#: builtin/rev-list.c:602
-msgid "object filtering requires --objects"
-msgstr "el filtratge d'objectes requereix --objects"
-
-#: builtin/rev-list.c:674
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr "el rev-list no permet mostrar notes"
 
-#: builtin/rev-list.c:679
+#: builtin/rev-list.c:664
 #, c-format
 msgid "marked counting and '%s' cannot be used together"
 msgstr "«marked counting» i «%s» no es poden usar junts"
@@ -22217,7 +22739,8 @@ msgstr "ordena la sortida segons el nombre de comissions per autor"
 #: builtin/shortlog.c:356
 msgid "suppress commit descriptions, only provides commit count"
 msgstr ""
-"omet les descripcions de les comissions, només proveeix el recompte de comissions"
+"omet les descripcions de les comissions, només proveeix el recompte de "
+"comissions"
 
 #: builtin/shortlog.c:358
 msgid "show the email address of each author"
@@ -22239,11 +22762,11 @@ msgstr "camp"
 msgid "group by field"
 msgstr "agrupa per camp"
 
-#: builtin/shortlog.c:394
+#: builtin/shortlog.c:395
 msgid "too many arguments given outside repository"
 msgstr "hi ha massa arguments donats fora del repositori"
 
-#: builtin/show-branch.c:13
+#: builtin/show-branch.c:14
 msgid ""
 "git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
 "                [--current] [--color[=<when>] | --no-color] [--sparse]\n"
@@ -22255,120 +22778,120 @@ msgstr ""
 "                [--more=<n> | --list | --independent | --merge-base]\n"
 "                [--no-name | --sha1-name] [--topics] [(<rev> | <glob>)...]"
 
-#: builtin/show-branch.c:17
+#: builtin/show-branch.c:18
 msgid "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"
 msgstr ""
 "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<referència>]"
 
-#: builtin/show-branch.c:395
+#: builtin/show-branch.c:396
 #, c-format
 msgid "ignoring %s; cannot handle more than %d ref"
 msgid_plural "ignoring %s; cannot handle more than %d refs"
 msgstr[0] "s'està ignorant %s; no es pot gestionar més de %d referència"
 msgstr[1] "s'està ignorant %s; no es poden gestionar més de %d referències"
 
-#: builtin/show-branch.c:547
+#: builtin/show-branch.c:548
 #, c-format
 msgid "no matching refs with %s"
 msgstr "no hi ha referències coincidents amb %s"
 
-#: builtin/show-branch.c:644
+#: builtin/show-branch.c:645
 msgid "show remote-tracking and local branches"
 msgstr "mostra les branques amb seguiment remot i les locals"
 
-#: builtin/show-branch.c:646
+#: builtin/show-branch.c:647
 msgid "show remote-tracking branches"
 msgstr "mostra les branques amb seguiment remot"
 
-#: builtin/show-branch.c:648
+#: builtin/show-branch.c:649
 msgid "color '*!+-' corresponding to the branch"
 msgstr "colora «*!+-» corresponent a la branca"
 
-#: builtin/show-branch.c:650
+#: builtin/show-branch.c:651
 msgid "show <n> more commits after the common ancestor"
 msgstr "mostra <n> comissions després de l'avantpassat comú"
 
-#: builtin/show-branch.c:652
+#: builtin/show-branch.c:653
 msgid "synonym to more=-1"
 msgstr "sinònim de more=-1"
 
-#: builtin/show-branch.c:653
+#: builtin/show-branch.c:654
 msgid "suppress naming strings"
 msgstr "omet anomenar cadenes"
 
-#: builtin/show-branch.c:655
+#: builtin/show-branch.c:656
 msgid "include the current branch"
 msgstr "inclou la branca actual"
 
-#: builtin/show-branch.c:657
+#: builtin/show-branch.c:658
 msgid "name commits with their object names"
 msgstr "anomena les comissions amb els seus noms d'objecte"
 
-#: builtin/show-branch.c:659
+#: builtin/show-branch.c:660
 msgid "show possible merge bases"
 msgstr "mostra les bases de fusió possibles"
 
-#: builtin/show-branch.c:661
+#: builtin/show-branch.c:662
 msgid "show refs unreachable from any other ref"
 msgstr "mostra les referències inabastables de qualsevol altra referència"
 
-#: builtin/show-branch.c:663
+#: builtin/show-branch.c:664
 msgid "show commits in topological order"
 msgstr "mostra les comissions en ordre topològic"
 
-#: builtin/show-branch.c:666
+#: builtin/show-branch.c:667
 msgid "show only commits not on the first branch"
 msgstr "mostra només les comissions que no siguin en la primera branca"
 
-#: builtin/show-branch.c:668
+#: builtin/show-branch.c:669
 msgid "show merges reachable from only one tip"
 msgstr "mostra les fusions abastables de només una punta"
 
-#: builtin/show-branch.c:670
+#: builtin/show-branch.c:671
 msgid "topologically sort, maintaining date order where possible"
 msgstr "ordena topològicament, mantenint l'ordre de dates on sigui possible"
 
-#: builtin/show-branch.c:673
+#: builtin/show-branch.c:674
 msgid "<n>[,<base>]"
 msgstr "<n>[,<base>]"
 
-#: builtin/show-branch.c:674
+#: builtin/show-branch.c:675
 msgid "show <n> most recent ref-log entries starting at base"
 msgstr "mostra les <n> entrades més recents començant a la base"
 
-#: builtin/show-branch.c:734
+#: builtin/show-branch.c:735
 msgid "no branches given, and HEAD is not valid"
 msgstr "no s'ha donat cap branca, i HEAD no és vàlid"
 
-#: builtin/show-branch.c:737
+#: builtin/show-branch.c:738
 msgid "--reflog option needs one branch name"
 msgstr "l'opció --reflog necessita un nom de branca"
 
-#: builtin/show-branch.c:740
+#: builtin/show-branch.c:741
 #, c-format
 msgid "only %d entry can be shown at one time."
 msgid_plural "only %d entries can be shown at one time."
 msgstr[0] "es pot mostrar només %d entrada a la vegada."
 msgstr[1] "es poden mostrar només %d entrades a la vegada."
 
-#: builtin/show-branch.c:744
+#: builtin/show-branch.c:745
 #, c-format
 msgid "no such ref %s"
 msgstr "no hi ha tal referència %s"
 
-#: builtin/show-branch.c:830
+#: builtin/show-branch.c:831
 #, c-format
 msgid "cannot handle more than %d rev."
 msgid_plural "cannot handle more than %d revs."
 msgstr[0] "no es pot gestionar més d'%d revisió."
 msgstr[1] "no es poden gestionar més de %d revisions."
 
-#: builtin/show-branch.c:834
+#: builtin/show-branch.c:835
 #, c-format
 msgid "'%s' is not a valid ref."
 msgstr "«%s» no és una referència vàlida."
 
-#: builtin/show-branch.c:837
+#: builtin/show-branch.c:838
 #, c-format
 msgid "cannot find commit %s (%s)"
 msgstr "no es pot trobar la comissió %s (%s)"
@@ -22427,25 +22950,21 @@ msgstr "no imprimeixis els resultats a stdout (útil amb --verify)"
 msgid "show refs from stdin that aren't in local repository"
 msgstr "mostra les referències de stdin que no siguin en el repositori local"
 
-#: builtin/sparse-checkout.c:22
+#: builtin/sparse-checkout.c:23
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr "git sparse-checkout (init|list|set|add|reapply|disable) <opcions>"
 
-#: builtin/sparse-checkout.c:46
-msgid "git sparse-checkout list"
-msgstr "git sparse-checkout list"
-
-#: builtin/sparse-checkout.c:60
+#: builtin/sparse-checkout.c:61
 msgid "this worktree is not sparse"
 msgstr "aquest arbre de treball no és dispers"
 
-#: builtin/sparse-checkout.c:75
+#: builtin/sparse-checkout.c:76
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr ""
 "aquest arbre de treball no és dispers (pot ser que el fitxer sparse-checkout"
 " no existeixi)"
 
-#: builtin/sparse-checkout.c:176
+#: builtin/sparse-checkout.c:177
 #, c-format
 msgid ""
 "directory '%s' contains untracked files, but is not in the sparse-checkout "
@@ -22454,101 +22973,140 @@ msgstr ""
 "el directori «%s» conté fitxers no seguits, però no està en el con de "
 "sparse-checkout"
 
-#: builtin/sparse-checkout.c:184
+#: builtin/sparse-checkout.c:185
 #, c-format
 msgid "failed to remove directory '%s'"
 msgstr "s'ha produït un error en suprimir el directori «%s»"
 
-#: builtin/sparse-checkout.c:324
+#: builtin/sparse-checkout.c:327
 msgid "failed to create directory for sparse-checkout file"
 msgstr "no s'ha pogut crear el directori per al fitxer sparse-checkout"
 
-#: builtin/sparse-checkout.c:365
-msgid "unable to upgrade repository format to enable worktreeConfig"
-msgstr ""
-"no s'ha pogut actualitzar el format del repositori per a habilitar "
-"worktreeConfig"
-
-#: builtin/sparse-checkout.c:367
-msgid "failed to set extensions.worktreeConfig setting"
-msgstr "no s'ha pogut establir el paràmetre extensions.worktreeConfig"
+#: builtin/sparse-checkout.c:366
+#, fuzzy
+msgid "failed to initialize worktree config"
+msgstr "no s'ha pogut inicialitzar l'arbre de treball to"
 
 #: builtin/sparse-checkout.c:411
 msgid "failed to modify sparse-index config"
 msgstr "no s'ha pogut modificar la configuració de l'índex dispers"
 
-#: builtin/sparse-checkout.c:422
-msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
-msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
-
-#: builtin/sparse-checkout.c:441 builtin/sparse-checkout.c:729
-#: builtin/sparse-checkout.c:778
+#: builtin/sparse-checkout.c:441 builtin/sparse-checkout.c:793
+#: builtin/sparse-checkout.c:847
 msgid "initialize the sparse-checkout in cone mode"
 msgstr "inicialitza el «sparse-checkout» en mode con"
 
-#: builtin/sparse-checkout.c:443 builtin/sparse-checkout.c:731
-#: builtin/sparse-checkout.c:780
+#: builtin/sparse-checkout.c:443 builtin/sparse-checkout.c:795
+#: builtin/sparse-checkout.c:849
 msgid "toggle the use of a sparse index"
 msgstr "commuta l'ús d'un índex dispers"
 
-#: builtin/sparse-checkout.c:476
+#: builtin/sparse-checkout.c:479
 #, c-format
 msgid "failed to open '%s'"
 msgstr "s'ha produït un error en obrir «%s»"
 
-#: builtin/sparse-checkout.c:528
+#: builtin/sparse-checkout.c:531
 #, c-format
 msgid "could not normalize path %s"
 msgstr "no s'ha pogut normalitzar el camí %s"
 
-#: builtin/sparse-checkout.c:557
+#: builtin/sparse-checkout.c:560
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr "no s'ha pogut treure la cita a la cadena amb estil C «%s»"
 
-#: builtin/sparse-checkout.c:612 builtin/sparse-checkout.c:640
+#: builtin/sparse-checkout.c:615 builtin/sparse-checkout.c:643
 msgid "unable to load existing sparse-checkout patterns"
 msgstr "no s'han pogut carregar els patrons de «sparse-checkout» existents"
 
-#: builtin/sparse-checkout.c:616
+#: builtin/sparse-checkout.c:619
 msgid "existing sparse-checkout patterns do not use cone mode"
 msgstr "els patrons de «sparse-checkout» existents no usen el mode con"
 
-#: builtin/sparse-checkout.c:682
-msgid "git sparse-checkout add (--stdin | <patterns>)"
-msgstr "git sparse-checkout add (--stdin | <patrons>)"
+#: builtin/sparse-checkout.c:707
+#, fuzzy
+msgid "please run from the toplevel directory in non-cone mode"
+msgstr ""
+"executeu des del directori de nivell superior en mode que no sigui "
+"compatible"
+
+#: builtin/sparse-checkout.c:712
+#, fuzzy
+msgid "specify directories rather than patterns (no leading slash)"
+msgstr ""
+"especifica els directoris en lloc dels patrons (sense barra inclinada)"
+
+#: builtin/sparse-checkout.c:714
+#, fuzzy
+msgid ""
+"specify directories rather than patterns.  If your directory starts with a "
+"'!', pass --skip-checks"
+msgstr ""
+"especifica els directoris en lloc dels patrons.  Si el vostre directori "
+"comença amb un '!', passeu --skip-checks"
+
+#: builtin/sparse-checkout.c:716
+#, fuzzy
+msgid ""
+"specify directories rather than patterns.  If your directory really has any "
+"of '*?[]\\' in it, pass --skip-checks"
+msgstr ""
+"especifica els directoris en lloc dels patrons.  Si el vostre directori "
+"realment té alguna de '*?\\\\', passeu --skip-checks"
+
+#: builtin/sparse-checkout.c:732
+#, c-format, fuzzy
+msgid ""
+"'%s' is not a directory; to treat it as a directory anyway, rerun with "
+"--skip-checks"
+msgstr ""
+"%%s' no és un directori; per tractar-lo com un directori de totes maneres, "
+"torneu a executar amb --skip-checks"
+
+#: builtin/sparse-checkout.c:734
+#, c-format, fuzzy
+msgid ""
+"pass a leading slash before paths such as '%s' if you want a single file "
+"(see NON-CONE PROBLEMS in the git-sparse-checkout manual)."
+msgstr ""
+"passa una barra d'inici abans dels camins com ara «%s» si voleu un sol "
+"fitxer (vegeu els problemes NO CONE al manual de git-sparse-checkout)."
+
+#: builtin/sparse-checkout.c:739
+msgid "git sparse-checkout add [--skip-checks] (--stdin | <patterns>)"
+msgstr "git sparse-checkout add [--skip-checks] (--stdin | <patterns>)"
+
+#: builtin/sparse-checkout.c:752 builtin/sparse-checkout.c:797
+#, fuzzy
+msgid ""
+"skip some sanity checks on the given paths that might give false positives"
+msgstr ""
+"omet alguns controls de sanitat en els camins donats que podrien donar "
+"falsos positius"
 
-#: builtin/sparse-checkout.c:694 builtin/sparse-checkout.c:733
+#: builtin/sparse-checkout.c:755 builtin/sparse-checkout.c:800
 msgid "read patterns from standard in"
 msgstr "llegeix els patrons de l'entrada estàndard"
 
-#: builtin/sparse-checkout.c:699
+#: builtin/sparse-checkout.c:760
 msgid "no sparse-checkout to add to"
 msgstr "no hi ha un sparse-checkout a afegir"
 
-#: builtin/sparse-checkout.c:712
+#: builtin/sparse-checkout.c:775
 msgid ""
-"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] (--stdin | "
-"<patterns>)"
+"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] "
+"(--stdin | <patterns>)"
 msgstr ""
-"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] (--stdin | "
-"<patrons>)"
-
-#: builtin/sparse-checkout.c:765
-msgid "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
-msgstr "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
+"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] "
+"(--stdin | <patterns>)"
 
-#: builtin/sparse-checkout.c:785
+#: builtin/sparse-checkout.c:854
 msgid "must be in a sparse-checkout to reapply sparsity patterns"
 msgstr ""
-"ha d'estar en un sparse-checkout per a tornar a aplicar patrons "
-"de dispersió"
+"ha d'estar en un sparse-checkout per a tornar a aplicar patrons de dispersió"
 
-#: builtin/sparse-checkout.c:803
-msgid "git sparse-checkout disable"
-msgstr "git sparse-checkout disable"
-
-#: builtin/sparse-checkout.c:845
+#: builtin/sparse-checkout.c:914
 msgid "error while refreshing working directory"
 msgstr "s'ha produït un error en actualitzar el directori de treball"
 
@@ -22686,167 +23244,151 @@ msgstr "L'índex no estava «unstashed»."
 msgid "could not restore untracked files from stash"
 msgstr "no s'han pogut restaurar els fitxers no seguits des del «stash»"
 
-#: builtin/stash.c:608 builtin/stash.c:706
+#: builtin/stash.c:608 builtin/stash.c:695
 msgid "attempt to recreate the index"
 msgstr "intenta tornar a crear l'índex"
 
-#: builtin/stash.c:652
+#: builtin/stash.c:641
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "Descartada %s (%s)"
 
-#: builtin/stash.c:655
+#: builtin/stash.c:644
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s: no s'ha pogut descartar l'entrada «stash»"
 
-#: builtin/stash.c:668
+#: builtin/stash.c:657
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "«%s» no és una referència «stash»"
 
-#: builtin/stash.c:718
+#: builtin/stash.c:707
 msgid "The stash entry is kept in case you need it again."
 msgstr "Es conserva l'entrada «stash» en cas que la necessiteu altra vegada."
 
-#: builtin/stash.c:741
+#: builtin/stash.c:730
 msgid "No branch name specified"
 msgstr "Cap nom de branca especificat"
 
-#: builtin/stash.c:825
+#: builtin/stash.c:809
 msgid "failed to parse tree"
 msgstr "s'ha produït un error en analitzar l'arbre"
 
-#: builtin/stash.c:836
+#: builtin/stash.c:820
 msgid "failed to unpack trees"
 msgstr "s'ha produït un error en desempaquetar els arbres"
 
-#: builtin/stash.c:856
+#: builtin/stash.c:840
 msgid "include untracked files in the stash"
 msgstr "inclou els fitxers no seguits a «stash»"
 
-#: builtin/stash.c:859
+#: builtin/stash.c:843
 msgid "only show untracked files in the stash"
 msgstr "mostra només els fitxers no seguits a «stash»"
 
-#: builtin/stash.c:946 builtin/stash.c:983
+#: builtin/stash.c:930 builtin/stash.c:967
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "No es pot actualitzar %s amb %s"
 
-#: builtin/stash.c:964 builtin/stash.c:1678 builtin/stash.c:1750
+#: builtin/stash.c:948 builtin/stash.c:1667 builtin/stash.c:1739
 msgid "stash message"
 msgstr "missatge «stash»"
 
-#: builtin/stash.c:974
+#: builtin/stash.c:958
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "«git stash store» requereix un argument <comissió>"
 
-#: builtin/stash.c:1159
+#: builtin/stash.c:1143
 msgid "No staged changes"
 msgstr "No hi ha canvis a «stage»"
 
-#: builtin/stash.c:1220
+#: builtin/stash.c:1204
 msgid "No changes selected"
 msgstr "No hi ha canvis seleccionats"
 
-#: builtin/stash.c:1320
+#: builtin/stash.c:1304
 msgid "You do not have the initial commit yet"
 msgstr "Encara no teniu la comissió inicial"
 
-#: builtin/stash.c:1347
+#: builtin/stash.c:1331
 msgid "Cannot save the current index state"
 msgstr "No es pot desar l'estat d'índex actual"
 
-#: builtin/stash.c:1356
+#: builtin/stash.c:1340
 msgid "Cannot save the untracked files"
 msgstr "No es poden desar els fitxers no seguits"
 
-#: builtin/stash.c:1367 builtin/stash.c:1386
+#: builtin/stash.c:1351 builtin/stash.c:1370
 msgid "Cannot save the current worktree state"
 msgstr "No es pot desar l'estat d'arbre de treball actual"
 
-#: builtin/stash.c:1377
+#: builtin/stash.c:1361
 msgid "Cannot save the current staged state"
 msgstr "No es pot desar l'estat «stage» actual"
 
-#: builtin/stash.c:1414
+#: builtin/stash.c:1398
 msgid "Cannot record working tree state"
 msgstr "No es pot registrar l'estat de l'arbre de treball"
 
-#: builtin/stash.c:1463
+#: builtin/stash.c:1447
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr "No es poden usar --patch i --include-untracked o --all a la vegada"
 
-#: builtin/stash.c:1474
+#: builtin/stash.c:1458
 msgid "Can't use --staged and --include-untracked or --all at the same time"
 msgstr "No es poden usar --staged i --include-untracked o --all a la vegada"
 
-#: builtin/stash.c:1492
+#: builtin/stash.c:1476
 msgid "Did you forget to 'git add'?"
 msgstr "Heu oblidat de fer «git add»?"
 
-#: builtin/stash.c:1507
+#: builtin/stash.c:1491
 msgid "No local changes to save"
 msgstr "No hi ha canvis locals a desar"
 
-#: builtin/stash.c:1514
+#: builtin/stash.c:1498
 msgid "Cannot initialize stash"
 msgstr "No es pot inicialitzar el magatzem"
 
-#: builtin/stash.c:1529
+#: builtin/stash.c:1513
 msgid "Cannot save the current status"
 msgstr "No es pot desar l'estat actual"
 
-#: builtin/stash.c:1534
+#: builtin/stash.c:1518
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "S'han desat el directori de treball i l'estat d'índex %s"
 
-#: builtin/stash.c:1627
+#: builtin/stash.c:1615
 msgid "Cannot remove worktree changes"
 msgstr "No es poden eliminar els canvis de l'arbre de treball"
 
-#: builtin/stash.c:1667 builtin/stash.c:1739
+#: builtin/stash.c:1656 builtin/stash.c:1728
 msgid "keep index"
 msgstr "mantén l'índex"
 
-#: builtin/stash.c:1669 builtin/stash.c:1741
+#: builtin/stash.c:1658 builtin/stash.c:1730
 msgid "stash staged changes only"
 msgstr "fes «stash» només dels canvis «staged»"
 
-#: builtin/stash.c:1671 builtin/stash.c:1743
+#: builtin/stash.c:1660 builtin/stash.c:1732
 msgid "stash in patch mode"
 msgstr "fes «stash» en mode pedaç"
 
-#: builtin/stash.c:1672 builtin/stash.c:1744
+#: builtin/stash.c:1661 builtin/stash.c:1733
 msgid "quiet mode"
 msgstr "mode silenciós"
 
-#: builtin/stash.c:1674 builtin/stash.c:1746
+#: builtin/stash.c:1663 builtin/stash.c:1735
 msgid "include untracked files in stash"
 msgstr "inclou els fitxers no seguits a «stash»"
 
-#: builtin/stash.c:1676 builtin/stash.c:1748
+#: builtin/stash.c:1665 builtin/stash.c:1737
 msgid "include ignore files"
 msgstr "inclou els fitxers ignorats"
 
-#: builtin/stash.c:1783
-msgid ""
-"the stash.useBuiltin support has been removed!\n"
-"See its entry in 'git help config' for details."
-msgstr ""
-"s'ha eliminat l'opció stash.useBuiltin.\n"
-"Per a més detalls vegeu la seva entrada a «git help config»."
-
-#: builtin/stripspace.c:18
-msgid "git stripspace [-s | --strip-comments]"
-msgstr "git stripspace [-s | --strip-comments]"
-
-#: builtin/stripspace.c:19
-msgid "git stripspace [-c | --comment-lines]"
-msgstr "git stripspace [-c | --comment-lines]"
-
 #: builtin/stripspace.c:37
 msgid "skip and remove all lines starting with comment character"
 msgstr ""
@@ -22856,21 +23398,17 @@ msgstr ""
 msgid "prepend comment character and space to each line"
 msgstr "anteposa el caràcter de comentari i un espai a cada línia"
 
-#: builtin/submodule--helper.c:46 builtin/submodule--helper.c:2668
+#: builtin/submodule--helper.c:50 builtin/submodule--helper.c:2486
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "S'espera un nom de referència ple, s'ha rebut %s"
 
-#: builtin/submodule--helper.c:63
-msgid "submodule--helper print-default-remote takes no arguments"
-msgstr "submodule--helper print-default-remote no pren cap argument"
-
-#: builtin/submodule--helper.c:101
+#: builtin/submodule--helper.c:103
 #, c-format
 msgid "cannot strip one component off url '%s'"
 msgstr "no es pot despullar un component de l'url «%s»"
 
-#: builtin/submodule--helper.c:211
+#: builtin/submodule--helper.c:213
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
@@ -22879,26 +23417,26 @@ msgstr ""
 "no s'ha pogut trobar la configuració «%s». S'assumeix que aquest repositori "
 "és el seu repositori font autoritzat."
 
-#: builtin/submodule--helper.c:405 builtin/submodule--helper.c:1859
+#: builtin/submodule--helper.c:413 builtin/submodule--helper.c:1873
 msgid "alternative anchor for relative paths"
 msgstr "àncora alternativa per als camins relatius"
 
-#: builtin/submodule--helper.c:410
+#: builtin/submodule--helper.c:418
 msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper list [--prefix=<camí>] [<camí>...]"
 
-#: builtin/submodule--helper.c:468 builtin/submodule--helper.c:605
-#: builtin/submodule--helper.c:628
+#: builtin/submodule--helper.c:476 builtin/submodule--helper.c:617
+#: builtin/submodule--helper.c:640
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr "No s'ha trobat cap url per al camí de submòdul «%s» a .gitmodules"
 
-#: builtin/submodule--helper.c:520
+#: builtin/submodule--helper.c:528
 #, c-format
 msgid "Entering '%s'\n"
 msgstr "S'està entrant a «%s»\n"
 
-#: builtin/submodule--helper.c:523
+#: builtin/submodule--helper.c:531
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
@@ -22907,81 +23445,80 @@ msgstr ""
 "run_command ha retornat un estat diferent de zero per a %s\n"
 "."
 
-#: builtin/submodule--helper.c:545
+#: builtin/submodule--helper.c:553
 #, c-format
 msgid ""
 "run_command returned non-zero status while recursing in the nested submodules of %s\n"
 "."
 msgstr ""
-"run_command ha retornat un estat diferent de zero mentre es treballava recursivament als "
-"submòduls imbricats de %s\n"
+"run_command ha retornat un estat diferent de zero mentre es treballava recursivament als submòduls imbricats de %s\n"
 "."
 
-#: builtin/submodule--helper.c:561
+#: builtin/submodule--helper.c:569
 msgid "suppress output of entering each submodule command"
 msgstr "omet la sortida en entrar a cada ordre del submòdul"
 
-#: builtin/submodule--helper.c:563 builtin/submodule--helper.c:864
-#: builtin/submodule--helper.c:1453
+#: builtin/submodule--helper.c:571 builtin/submodule--helper.c:876
+#: builtin/submodule--helper.c:1458
 msgid "recurse into nested submodules"
 msgstr "inclou recursivament els submòduls imbricats"
 
-#: builtin/submodule--helper.c:568
+#: builtin/submodule--helper.c:576
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr "git submodule--helper foreach [--quiet] [--recursive] [--] <ordre>"
 
-#: builtin/submodule--helper.c:642
+#: builtin/submodule--helper.c:654
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr "S'ha produït un error en registrar l'url per al camí de submòdul «%s»"
 
-#: builtin/submodule--helper.c:646
+#: builtin/submodule--helper.c:658
 #, c-format
 msgid "Submodule '%s' (%s) registered for path '%s'\n"
 msgstr "S'ha registrat el submòdul «%s» (%s) per al camí «%s»\n"
 
-#: builtin/submodule--helper.c:656
+#: builtin/submodule--helper.c:668
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr ""
 "advertència: se suggereix el mode d'actualització per ordre per al submòdul "
 "«%s»\n"
 
-#: builtin/submodule--helper.c:663
+#: builtin/submodule--helper.c:675
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr ""
 "S'ha produït un error en registrar el mode d'actualització per al camí de "
 "submòdul «%s»"
 
-#: builtin/submodule--helper.c:685
+#: builtin/submodule--helper.c:697
 msgid "suppress output for initializing a submodule"
 msgstr "omet la sortida en inicialitzar un submòdul"
 
-#: builtin/submodule--helper.c:690
+#: builtin/submodule--helper.c:702
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr "git submodule--helper init [<opcions>] [<camí>]"
 
-#: builtin/submodule--helper.c:763 builtin/submodule--helper.c:898
+#: builtin/submodule--helper.c:775 builtin/submodule--helper.c:910
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr "no s'ha trobat cap mapatge de submòdul a .gitmodules per al camí «%s»"
 
-#: builtin/submodule--helper.c:811
+#: builtin/submodule--helper.c:823
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr "no s'ha pogut resoldre la referència a HEAD dins del submòdul «%s»"
 
-#: builtin/submodule--helper.c:838 builtin/submodule--helper.c:1423
+#: builtin/submodule--helper.c:850 builtin/submodule--helper.c:1428
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "s'ha produït un error en cercar recursivament al submòdul «%s»"
 
-#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1590
+#: builtin/submodule--helper.c:874 builtin/submodule--helper.c:1595
 msgid "suppress submodule status output"
 msgstr "suprimeix la sortida de l'estat del submòdul"
 
-#: builtin/submodule--helper.c:863
+#: builtin/submodule--helper.c:875
 msgid ""
 "use commit stored in the index instead of the one stored in the submodule "
 "HEAD"
@@ -22989,98 +23526,98 @@ msgstr ""
 "utilitza la comissió emmagatzemada a l'índex en lloc de l'emmagatzemada al "
 "HEAD del submòdul"
 
-#: builtin/submodule--helper.c:869
+#: builtin/submodule--helper.c:881
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr "git submodule status [--quiet] [--cached] [--recursive] [<camí>...]"
 
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:905
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper name <camí>"
 
-#: builtin/submodule--helper.c:965
+#: builtin/submodule--helper.c:977
 #, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr "* %s %s(blob)->%s(submòdul)"
 
-#: builtin/submodule--helper.c:968
+#: builtin/submodule--helper.c:980
 #, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr "* %s %s(submòdul)->%s(blob)"
 
-#: builtin/submodule--helper.c:981
+#: builtin/submodule--helper.c:993
 #, c-format
 msgid "%s"
 msgstr "%s"
 
-#: builtin/submodule--helper.c:1031
+#: builtin/submodule--helper.c:1043
 #, c-format
 msgid "couldn't hash object from '%s'"
 msgstr "no s'ha pogut fer el resum de l'objecte de «%s»"
 
-#: builtin/submodule--helper.c:1035
+#: builtin/submodule--helper.c:1047
 #, c-format
 msgid "unexpected mode %o\n"
 msgstr "mode inesperat %o\n"
 
-#: builtin/submodule--helper.c:1276
+#: builtin/submodule--helper.c:1288
 msgid "use the commit stored in the index instead of the submodule HEAD"
 msgstr ""
 "utilitza la comissió emmagatzemada a l'índex en lloc de l'emmagatzemada al "
 "HEAD del submòdul"
 
-#: builtin/submodule--helper.c:1278
+#: builtin/submodule--helper.c:1290
 msgid "compare the commit in the index with that in the submodule HEAD"
 msgstr ""
 "compara la comissió emmagatzemada a l'índex en lloc de l'emmagatzemada al "
 "HEAD del submòdul"
 
-#: builtin/submodule--helper.c:1280
+#: builtin/submodule--helper.c:1292
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr "omet els submòduls amb el valor «ignore_config» establert a «all»"
 
-#: builtin/submodule--helper.c:1282
+#: builtin/submodule--helper.c:1294
 msgid "limit the summary size"
 msgstr "limita la mida del resum"
 
-#: builtin/submodule--helper.c:1287
+#: builtin/submodule--helper.c:1299
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1323
 msgid "could not fetch a revision for HEAD"
 msgstr "no s'ha pogut obtenir una revisió per a HEAD"
 
-#: builtin/submodule--helper.c:1373
+#: builtin/submodule--helper.c:1384
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr "S'està sincronitzant l'url del submòdul per a «%s»\n"
 
-#: builtin/submodule--helper.c:1379
+#: builtin/submodule--helper.c:1390
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr ""
 "s'ha produït un error en registrar l'url per al camí del submòdul «%s»"
 
-#: builtin/submodule--helper.c:1393
+#: builtin/submodule--helper.c:1399
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr ""
 "s'ha produït un error en obtenir el remot per defecte pel submòdul «%s»"
 
-#: builtin/submodule--helper.c:1404
+#: builtin/submodule--helper.c:1409
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr "s'ha produït un error en actualitzar el remot pel submòdul «%s»"
 
-#: builtin/submodule--helper.c:1451
+#: builtin/submodule--helper.c:1456
 msgid "suppress output of synchronizing submodule url"
 msgstr "omet la sortida de la sincronització de l'URL del submòdul"
 
-#: builtin/submodule--helper.c:1458
+#: builtin/submodule--helper.c:1463
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<camí>]"
 
-#: builtin/submodule--helper.c:1508
+#: builtin/submodule--helper.c:1513
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory. This will be replaced "
@@ -23089,7 +23626,7 @@ msgstr ""
 "L'arbre de treball del submòdul «%s» conté un directori .git. Aquest es "
 "reemplaçarà amb un fitxer a .git mitjançant l'ús d'«absorbgitdirs»."
 
-#: builtin/submodule--helper.c:1525
+#: builtin/submodule--helper.c:1530
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
@@ -23098,47 +23635,47 @@ msgstr ""
 "L'arbre de treball del submòdul «%s» conté modificacions locals; useu «-f» "
 "per a descartar-les"
 
-#: builtin/submodule--helper.c:1533
+#: builtin/submodule--helper.c:1538
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "S'ha esborrat el directori «%s»\n"
 
-#: builtin/submodule--helper.c:1535
+#: builtin/submodule--helper.c:1540
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr "No s'ha pogut eliminar l'arbre de treball de submòdul «%s»\n"
 
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1551
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr "no s'ha pogut crear el directori de submòdul buit %s"
 
-#: builtin/submodule--helper.c:1562
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr "S'ha desregistrat el submòdul «%s» (%s) per al camí «%s»\n"
 
-#: builtin/submodule--helper.c:1591
+#: builtin/submodule--helper.c:1596
 msgid "remove submodule working trees even if they contain local changes"
 msgstr ""
 "elimina els arbres de treball dels submòduls fins i tot si contenen canvis "
 "locals"
 
-#: builtin/submodule--helper.c:1592
+#: builtin/submodule--helper.c:1597
 msgid "unregister all submodules"
 msgstr "desregistra tots els submòduls"
 
-#: builtin/submodule--helper.c:1597
+#: builtin/submodule--helper.c:1602
 msgid ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
 msgstr ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<camí>...]]"
 
-#: builtin/submodule--helper.c:1611
+#: builtin/submodule--helper.c:1616
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr "Useu «--all» si realment voleu desinicialitzar tots els submòduls"
 
-#: builtin/submodule--helper.c:1656
+#: builtin/submodule--helper.c:1665
 msgid ""
 "An alternate computed from a superproject's alternate is invalid.\n"
 "To allow Git to clone without an alternate in such a case, set\n"
@@ -23150,102 +23687,102 @@ msgstr ""
 "submodule.alternateErrorStrategy a «info» o bé cloneu amb\n"
 "«--reference-if-able' en comptes de «--reference»."
 
-#: builtin/submodule--helper.c:1701 builtin/submodule--helper.c:1704
+#: builtin/submodule--helper.c:1710 builtin/submodule--helper.c:1713
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "el submòdul «%s» no pot afegir un alternatiu: %s"
 
-#: builtin/submodule--helper.c:1740
+#: builtin/submodule--helper.c:1749
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr "No es reconeix el valor «%s» per a submodule.alternateErrorStrategy"
 
-#: builtin/submodule--helper.c:1747
+#: builtin/submodule--helper.c:1756
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "No es reconeix el valor «%s» per a submodule.alternateLocation"
 
-#: builtin/submodule--helper.c:1772
+#: builtin/submodule--helper.c:1781
 #, c-format
 msgid "refusing to create/use '%s' in another submodule's git dir"
 msgstr "s'ha rebutjat crear/usar «%s» en el directori git d'un altre submòdul"
 
-#: builtin/submodule--helper.c:1813
+#: builtin/submodule--helper.c:1826
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
 msgstr "el clonatge de «%s» al camí de submòdul «%s» ha fallat"
 
-#: builtin/submodule--helper.c:1818
+#: builtin/submodule--helper.c:1831
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr "directori no buit: «%s»"
 
-#: builtin/submodule--helper.c:1830
+#: builtin/submodule--helper.c:1843
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr "no s'ha pogut obtenir el directori de submòdul per a «%s»"
 
-#: builtin/submodule--helper.c:1862
+#: builtin/submodule--helper.c:1876
 msgid "where the new submodule will be cloned to"
 msgstr "a on es clonarà el submòdul nou"
 
-#: builtin/submodule--helper.c:1865
+#: builtin/submodule--helper.c:1879
 msgid "name of the new submodule"
 msgstr "nom del submòdul nou"
 
-#: builtin/submodule--helper.c:1868
+#: builtin/submodule--helper.c:1882
 msgid "url where to clone the submodule from"
 msgstr "url del qual clonar el submòdul"
 
-#: builtin/submodule--helper.c:1876 builtin/submodule--helper.c:3265
+#: builtin/submodule--helper.c:1890 builtin/submodule--helper.c:3383
 msgid "depth for shallow clones"
 msgstr "profunditat dels clons superficials"
 
-#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:2526
-#: builtin/submodule--helper.c:3258
+#: builtin/submodule--helper.c:1893 builtin/submodule--helper.c:2731
+#: builtin/submodule--helper.c:3376
 msgid "force cloning progress"
 msgstr "força el progrés del clonatge"
 
-#: builtin/submodule--helper.c:1881 builtin/submodule--helper.c:2528
+#: builtin/submodule--helper.c:1895 builtin/submodule--helper.c:2733
 msgid "disallow cloning into non-empty directory"
 msgstr "no permetis clonar en un directori no buit"
 
-#: builtin/submodule--helper.c:1888
+#: builtin/submodule--helper.c:1903
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
-"<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
-"<url> --path <path>"
+"<repository>] [--name <name>] [--depth <depth>] [--single-branch] [--filter "
+"<filter-spec>]--url <url> --path <path>"
 msgstr ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
-"<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
-"<url> --path <path>"
+"<repository>] [--name <name>] [--depth <depth>] [--single-branch] [--filter "
+"<filter-spec>]--url <url> --path <path>"
 
-#: builtin/submodule--helper.c:1925
+#: builtin/submodule--helper.c:1943
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr "Mode d'actualització «%s» no vàlid per al camí de submòdul «%s»"
 
-#: builtin/submodule--helper.c:1929
+#: builtin/submodule--helper.c:1947
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr ""
 "Mode d'actualització «%s» configurat no vàlid per al camí de submòdul «%s»"
 
-#: builtin/submodule--helper.c:2044
+#: builtin/submodule--helper.c:2041
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "El camí de submòdul «%s» no està inicialitzat"
 
-#: builtin/submodule--helper.c:2048
+#: builtin/submodule--helper.c:2045
 msgid "Maybe you want to use 'update --init'?"
 msgstr "Potser voleu usar «update --init»?"
 
-#: builtin/submodule--helper.c:2078
+#: builtin/submodule--helper.c:2075
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "S'està ometent el submòdul no fusionat %s"
 
-#: builtin/submodule--helper.c:2107
+#: builtin/submodule--helper.c:2104
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "S'està ometent el submòdul «%s»"
@@ -23260,234 +23797,264 @@ msgstr "S'ha produït un error en clonar «%s». S'ha programat un reintent"
 msgid "Failed to clone '%s' a second time, aborting"
 msgstr "S'ha produït un error per segon cop en clonar «%s», s'està avortant"
 
-#: builtin/submodule--helper.c:2373
+#: builtin/submodule--helper.c:2371
 #, c-format
 msgid "Unable to checkout '%s' in submodule path '%s'"
 msgstr "No s'ha pogut agafar «%s» en el camí de submòdul «%s»"
 
-#: builtin/submodule--helper.c:2377
+#: builtin/submodule--helper.c:2375
 #, c-format
 msgid "Unable to rebase '%s' in submodule path '%s'"
 msgstr "No s'ha pogut fer «rebase» «%s» en el camí de submòdul «%s»"
 
-#: builtin/submodule--helper.c:2381
+#: builtin/submodule--helper.c:2379
 #, c-format
 msgid "Unable to merge '%s' in submodule path '%s'"
 msgstr "No s'ha pogut fusionar «%s» en el camí de submòdul «%s»"
 
-#: builtin/submodule--helper.c:2385
+#: builtin/submodule--helper.c:2383
 #, c-format
 msgid "Execution of '%s %s' failed in submodule path '%s'"
 msgstr "L'execució de «%s %s» ha fallat en el camí de submòdul «%s»"
 
-#: builtin/submodule--helper.c:2409
+#: builtin/submodule--helper.c:2402
 #, c-format
 msgid "Submodule path '%s': checked out '%s'\n"
 msgstr "Camí de submòdul «%s»: s'ha agafat «%s»\n"
 
-#: builtin/submodule--helper.c:2413
+#: builtin/submodule--helper.c:2406
 #, c-format
 msgid "Submodule path '%s': rebased into '%s'\n"
 msgstr "Camí de submòdul «%s»: s'ha fet «rebase» en «%s»\n"
 
-#: builtin/submodule--helper.c:2417
+#: builtin/submodule--helper.c:2410
 #, c-format
 msgid "Submodule path '%s': merged in '%s'\n"
 msgstr "Camí de submòdul «%s»: s'ha fusionat en «%s»\n"
 
-#: builtin/submodule--helper.c:2421
+#: builtin/submodule--helper.c:2414
 #, c-format
 msgid "Submodule path '%s': '%s %s'\n"
 msgstr "El camí de submòdul «%s»: '%s %s'\n"
 
-#: builtin/submodule--helper.c:2445
+#: builtin/submodule--helper.c:2438
 #, c-format
 msgid "Unable to fetch in submodule path '%s'; trying to directly fetch %s:"
 msgstr ""
 "No s'ha pogut obtenir en el camí de submòdul «$%s»; s'està intentant obtenir"
 " directament %s:"
 
-#: builtin/submodule--helper.c:2454
+#: builtin/submodule--helper.c:2447
 #, c-format
 msgid ""
 "Fetched in submodule path '%s', but it did not contain %s. Direct fetching "
 "of that commit failed."
 msgstr ""
-"S'ha obtingut en un camí de submòdul «%s», però no contenia %s. "
-"L'obtenció directa d'aquesta comissió ha fallat."
+"S'ha obtingut en un camí de submòdul «%s», però no contenia %s. L'obtenció "
+"directa d'aquesta comissió ha fallat."
+
+#: builtin/submodule--helper.c:2481
+#, c-format
+msgid ""
+"Submodule (%s) branch configured to inherit branch from superproject, but "
+"the superproject is not on any branch"
+msgstr ""
+"La branca de submòdul (%s) està configurada per a heretar la branca del "
+"superprojecte, però el superprojecte no és en cap branca"
+
+#: builtin/submodule--helper.c:2499
+#, c-format
+msgid "could not get a repository handle for submodule '%s'"
+msgstr "no s'ha pogut obtenir el gestor del repositori pel submòdul «%s»"
+
+#: builtin/submodule--helper.c:2588
+#, c-format, fuzzy
+msgid "Unable to find current revision in submodule path '%s'"
+msgstr "No s'ha pogut trobar la revisió actual al camí del submòdul «%s»"
+
+#: builtin/submodule--helper.c:2599
+#, c-format, fuzzy
+msgid "Unable to fetch in submodule path '%s'"
+msgstr "No s'ha pogut recuperar el camí del submòdul «%s»"
+
+#: builtin/submodule--helper.c:2604
+#, c-format, fuzzy
+msgid "Unable to find %s revision in submodule path '%s'"
+msgstr ""
+"No s'ha pogut trobar la revisió de percentatges en el camí del submòdul «%s»"
+
+#: builtin/submodule--helper.c:2640
+#, c-format, fuzzy
+msgid "Failed to recurse into submodule path '%s'"
+msgstr "No s'ha pogut tornar a repetir al camí del submòdul «%s»"
+
+#: builtin/submodule--helper.c:2699
+msgid "force checkout updates"
+msgstr "força les actualitzacions"
+
+#: builtin/submodule--helper.c:2701
+msgid "initialize uninitialized submodules before update"
+msgstr "inicialitza els submòduls sense inicialitzar abans d'actualitzar"
+
+#: builtin/submodule--helper.c:2703
+#, fuzzy
+msgid "use SHA-1 of submodule's remote tracking branch"
+msgstr "utilitza SHA-1 de la branca de seguiment remota del submòdul"
+
+#: builtin/submodule--helper.c:2705
+#, fuzzy
+msgid "traverse submodules recursively"
+msgstr "traverteix els submòduls recursivament"
 
-#: builtin/submodule--helper.c:2505 builtin/submodule--helper.c:2575
-#: builtin/submodule--helper.c:2813
+#: builtin/submodule--helper.c:2707
+msgid "don't fetch new objects from the remote site"
+msgstr "no obtinguis els objectes nous del lloc remot"
+
+#: builtin/submodule--helper.c:2710 builtin/submodule--helper.c:2892
 msgid "path into the working tree"
 msgstr "camí a l'arbre de treball"
 
-#: builtin/submodule--helper.c:2508 builtin/submodule--helper.c:2580
+#: builtin/submodule--helper.c:2713
 msgid "path into the working tree, across nested submodule boundaries"
 msgstr "camí a l'arbre de treball, a través de fronteres de submòduls niats"
 
-#: builtin/submodule--helper.c:2512 builtin/submodule--helper.c:2578
+#: builtin/submodule--helper.c:2717
 msgid "rebase, merge, checkout or none"
 msgstr "rebase, merge, checkout o none"
 
-#: builtin/submodule--helper.c:2518
+#: builtin/submodule--helper.c:2723
 msgid "create a shallow clone truncated to the specified number of revisions"
 msgstr "crea un clon superficial truncat al nombre de revisions especificat"
 
-#: builtin/submodule--helper.c:2521
+#: builtin/submodule--helper.c:2726
 msgid "parallel jobs"
 msgstr "tasques paral·leles"
 
-#: builtin/submodule--helper.c:2523
+#: builtin/submodule--helper.c:2728
 msgid "whether the initial clone should follow the shallow recommendation"
 msgstr "si el clonatge inicial ha de seguir la recomanació de superficialitat"
 
-#: builtin/submodule--helper.c:2524
+#: builtin/submodule--helper.c:2729
 msgid "don't print cloning progress"
 msgstr "no imprimeixis el progrés del clonatge"
 
-#: builtin/submodule--helper.c:2535
-msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
-msgstr "git submodule--helper update-clone [--prefix=<camí>] [<camí>...]"
-
-#: builtin/submodule--helper.c:2548
-msgid "bad value for update parameter"
-msgstr "valor incorrecte per al paràmetre update"
-
-#: builtin/submodule--helper.c:2566
-msgid "suppress output for update by rebase or merge"
-msgstr "omet la sortida per les actualitzacions per «rebase» o fusió"
-
-#: builtin/submodule--helper.c:2567
-msgid "force checkout updates"
-msgstr "força les actualitzacions"
-
-#: builtin/submodule--helper.c:2569
-msgid "don't fetch new objects from the remote site"
-msgstr "no obtinguis els objectes nous del lloc remot"
-
-#: builtin/submodule--helper.c:2571
-msgid "overrides update mode in case the repository is a fresh clone"
-msgstr ""
-"sobreescriu el mode d'actualització en cas que el repositori sigui un clon "
-"nou"
-
-#: builtin/submodule--helper.c:2572
-msgid "depth for shallow fetch"
-msgstr "profunditat dels clons superficials"
-
-#: builtin/submodule--helper.c:2582
-msgid "sha1"
-msgstr "sha1"
-
-#: builtin/submodule--helper.c:2583
-msgid "SHA1 expected by superproject"
-msgstr "SHA1 esperat per superproject"
-
-#: builtin/submodule--helper.c:2585
-msgid "subsha1"
-msgstr "subsha1"
-
-#: builtin/submodule--helper.c:2586
-msgid "SHA1 of submodule's HEAD"
-msgstr "SHA1 del HEAD del submòdul"
-
-#: builtin/submodule--helper.c:2592
-msgid "git submodule--helper run-update-procedure [<options>] <path>"
-msgstr "git submodule--helper run-update-procedure [<options>] <path>"
-
-#: builtin/submodule--helper.c:2663
-#, c-format
+#: builtin/submodule--helper.c:2741
 msgid ""
-"Submodule (%s) branch configured to inherit branch from superproject, but "
-"the superproject is not on any branch"
+"git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] "
+"[-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] "
+"[--[no-]recommend-shallow] [--reference <repository>] [--recursive] "
+"[--[no-]single-branch] [--] [<path>...]"
 msgstr ""
-"La branca de submòdul (%s) està configurada per a heretar la branca del "
-"superprojecte, però el superprojecte no és en cap branca"
+"git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] "
+"[-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] "
+"[--[no-]recommend-shallow] [--reference <repository>] [--recursive] "
+"[--[no-]single-branch] [--] [<path>...]"
 
-#: builtin/submodule--helper.c:2781
-#, c-format
-msgid "could not get a repository handle for submodule '%s'"
-msgstr "no s'ha pogut obtenir el gestor del repositori pel submòdul «%s»"
+#: builtin/submodule--helper.c:2767
+msgid "bad value for update parameter"
+msgstr "valor incorrecte per al paràmetre update"
 
-#: builtin/submodule--helper.c:2814
+#: builtin/submodule--helper.c:2893
 msgid "recurse into submodules"
 msgstr "inclou recursivament als submòduls"
 
-#: builtin/submodule--helper.c:2820
+#: builtin/submodule--helper.c:2899
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr "git submodule--helper absorb-git-dirs [<opcions>] [<camí>...]"
 
-#: builtin/submodule--helper.c:2876
+#: builtin/submodule--helper.c:2955
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr "comprova si és segur escriure al fitxer .gitmodules"
 
-#: builtin/submodule--helper.c:2879
+#: builtin/submodule--helper.c:2958
 msgid "unset the config in the .gitmodules file"
 msgstr "desconfigura l'opció de configuració al fitxer .gitmodules"
 
-#: builtin/submodule--helper.c:2884
+#: builtin/submodule--helper.c:2963
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config <nom> [<valor>]"
 
-#: builtin/submodule--helper.c:2885
+#: builtin/submodule--helper.c:2964
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset <nom>"
 
-#: builtin/submodule--helper.c:2886
-msgid "git submodule--helper config --check-writeable"
-msgstr "git submodule--helper config --check-writeable"
-
-#: builtin/submodule--helper.c:2905 builtin/submodule--helper.c:3121
-#: builtin/submodule--helper.c:3277
+#: builtin/submodule--helper.c:2984 builtin/submodule--helper.c:3238
+#: builtin/submodule--helper.c:3395
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr "assegureu-vos que el fitxer .gitmodules és a l'arbre de treball"
 
-#: builtin/submodule--helper.c:2921
+#: builtin/submodule--helper.c:3000
 msgid "suppress output for setting url of a submodule"
 msgstr "omet la sortida en configurar un URL d'un submòdul"
 
-#: builtin/submodule--helper.c:2925
+#: builtin/submodule--helper.c:3004
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr "git submodule--helper set-url [--quiet] <path> <newurl>"
 
-#: builtin/submodule--helper.c:2958
+#: builtin/submodule--helper.c:3037
 msgid "set the default tracking branch to master"
 msgstr "estableix la branca de seguiment per defecte a «master»"
 
-#: builtin/submodule--helper.c:2960
+#: builtin/submodule--helper.c:3039
 msgid "set the default tracking branch"
 msgstr "estableix la branca de seguiment per defecte"
 
-#: builtin/submodule--helper.c:2964
+#: builtin/submodule--helper.c:3043
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 
-#: builtin/submodule--helper.c:2965
+#: builtin/submodule--helper.c:3044
 msgid ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 msgstr ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 
-#: builtin/submodule--helper.c:2972
+#: builtin/submodule--helper.c:3051
 msgid "--branch or --default required"
 msgstr "cal --branch o --default"
 
-#: builtin/submodule--helper.c:3038
+#: builtin/submodule--helper.c:3072 builtin/submodule--helper.c:3375
+msgid "print only error messages"
+msgstr "mostra només els missatges d'error"
+
+#: builtin/submodule--helper.c:3073
+msgid "force creation"
+msgstr "força la creació"
+
+#: builtin/submodule--helper.c:3081
+#, fuzzy
+msgid "show whether the branch would be created"
+msgstr "mostra si es crearà la branca"
+
+#: builtin/submodule--helper.c:3085
+msgid ""
+"git submodule--helper create-branch [-f|--force] [--create-reflog] "
+"[-q|--quiet] [-t|--track] [-n|--dry-run] <name> <start_oid> <start_name>"
+msgstr ""
+"git submodule--helper create-branch [-f|--force] [--create-reflog] "
+"[-q|--quiet] [-t|--track] [-n|--dry-run] <name> <start_oid> <start_name>"
+
+#: builtin/submodule--helper.c:3097
+#, c-format
+msgid "creating branch '%s'"
+msgstr "s'està creant la branca «%s»"
+
+#: builtin/submodule--helper.c:3155
 #, c-format
 msgid "Adding existing repo at '%s' to the index\n"
 msgstr "S'està afegint el repositori existent a «%s» a l'índex\n"
 
-#: builtin/submodule--helper.c:3041
+#: builtin/submodule--helper.c:3158
 #, c-format
 msgid "'%s' already exists and is not a valid git repo"
 msgstr "«%s» ja existeix i no és un repositori de git vàlid"
 
-#: builtin/submodule--helper.c:3054
+#: builtin/submodule--helper.c:3171
 #, c-format
 msgid "A git directory for '%s' is found locally with remote(s):\n"
 msgstr "S'ha trobat un directori de git per a «%s» localment amb els remots:\n"
 
-#: builtin/submodule--helper.c:3061
+#: builtin/submodule--helper.c:3178
 #, c-format
 msgid ""
 "If you want to reuse this local git directory instead of cloning again from\n"
@@ -23500,56 +24067,50 @@ msgstr ""
 "useu l'opció «--force». Si el directori de git local no és el repositori correcte\n"
 "o no esteu segur de què vol dir això, trieu un altre nom amb l'opció «--name»."
 
-#: builtin/submodule--helper.c:3073
+#: builtin/submodule--helper.c:3190
 #, c-format
 msgid "Reactivating local git directory for submodule '%s'\n"
-msgstr ""
-"S'està reactivant el directori de git local per al submòdul «%s»\n"
+msgstr "S'està reactivant el directori de git local per al submòdul «%s»\n"
 
-#: builtin/submodule--helper.c:3110
+#: builtin/submodule--helper.c:3227
 #, c-format
 msgid "unable to checkout submodule '%s'"
 msgstr "no s'ha pogut agafar el submòdul «%s»"
 
-#: builtin/submodule--helper.c:3149
+#: builtin/submodule--helper.c:3266
 #, c-format
 msgid "Failed to add submodule '%s'"
 msgstr "S'ha produït un error en afegir el submòdul «%s»"
 
-#: builtin/submodule--helper.c:3153 builtin/submodule--helper.c:3158
-#: builtin/submodule--helper.c:3166
+#: builtin/submodule--helper.c:3270 builtin/submodule--helper.c:3275
+#: builtin/submodule--helper.c:3283
 #, c-format
 msgid "Failed to register submodule '%s'"
 msgstr "S'ha produït un error en registrar el submòdul «%s»"
 
-#: builtin/submodule--helper.c:3222
+#: builtin/submodule--helper.c:3339
 #, c-format
 msgid "'%s' already exists in the index"
 msgstr "«%s» ja existeix en l'índex"
 
-#: builtin/submodule--helper.c:3225
+#: builtin/submodule--helper.c:3342
 #, c-format
 msgid "'%s' already exists in the index and is not a submodule"
 msgstr "«%s» ja existeix en l'índex i no és submòdul"
 
-#: builtin/submodule--helper.c:3254
+#: builtin/submodule--helper.c:3372
 msgid "branch of repository to add as submodule"
 msgstr "la branca del repositori a afegir com a submòdul"
 
-#: builtin/submodule--helper.c:3255
+#: builtin/submodule--helper.c:3373
 msgid "allow adding an otherwise ignored submodule path"
 msgstr "permet afegir un camí de submòdul que si no s'hagués ignorat"
 
-#: builtin/submodule--helper.c:3257
-msgid "print only error messages"
-msgstr "mostra només els missatges d'error"
-
-#: builtin/submodule--helper.c:3261
+#: builtin/submodule--helper.c:3379
 msgid "borrow the objects from reference repositories"
-msgstr ""
-"manlleva els objectes dels repositoris de referències"
+msgstr "manlleva els objectes dels repositoris de referències"
 
-#: builtin/submodule--helper.c:3263
+#: builtin/submodule--helper.c:3381
 msgid ""
 "sets the submodule’s name to the given string instead of defaulting to its "
 "path"
@@ -23557,32 +24118,32 @@ msgstr ""
 "estableix el nom del submòdul a la cadena donada en lloc de per defecte al "
 "seu camí"
 
-#: builtin/submodule--helper.c:3270
+#: builtin/submodule--helper.c:3388
 msgid "git submodule--helper add [<options>] [--] <repository> [<path>]"
 msgstr "git submodule--helper add [<opcions>] [--] <repositori> [<camí>]"
 
-#: builtin/submodule--helper.c:3298
+#: builtin/submodule--helper.c:3416
 msgid "Relative path can only be used from the toplevel of the working tree"
 msgstr ""
 "El camí relatiu només es pot usar des del nivell superior de l'arbre de "
 "treball"
 
-#: builtin/submodule--helper.c:3306
+#: builtin/submodule--helper.c:3425
 #, c-format
 msgid "repo URL: '%s' must be absolute or begin with ./|../"
 msgstr "URL de repositori: «%s» ha de ser absolut o començar amb ./|../"
 
-#: builtin/submodule--helper.c:3341
+#: builtin/submodule--helper.c:3460
 #, c-format
 msgid "'%s' is not a valid submodule name"
 msgstr "«%s» no és un nom de submòdul vàlid"
 
-#: builtin/submodule--helper.c:3405 git.c:452 git.c:726
+#: builtin/submodule--helper.c:3520 git.c:453 git.c:729
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s no admet --super-prefix"
 
-#: builtin/submodule--helper.c:3411
+#: builtin/submodule--helper.c:3526
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "«%s» no és una subordre vàlida de submodule--helper"
@@ -23615,7 +24176,7 @@ msgstr "raó"
 msgid "reason of the update"
 msgstr "raó de l'actualització"
 
-#: builtin/tag.c:25
+#: builtin/tag.c:26
 msgid ""
 "git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]\n"
 "        <tagname> [<head>]"
@@ -23623,11 +24184,11 @@ msgstr ""
 "git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <fitxer>]\n"
 "        <tagname> [<head>]"
 
-#: builtin/tag.c:27
+#: builtin/tag.c:28
 msgid "git tag -d <tagname>..."
 msgstr "git tag -d <nom-d'etiqueta>..."
 
-#: builtin/tag.c:28
+#: builtin/tag.c:29
 msgid ""
 "git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--points-at <object>]\n"
 "        [--format=<format>] [--merged <commit>] [--no-merged <commit>] [<pattern>...]"
@@ -23635,21 +24196,21 @@ msgstr ""
 "git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--points-at <object>]\n"
 "        [--format=<format>] [--merged <comissió>] [--no-merged <comissió>] [<patró>...]"
 
-#: builtin/tag.c:30
+#: builtin/tag.c:31
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr "git tag -v [--format=<format>] <nom-d'etiqueta>..."
 
-#: builtin/tag.c:100
+#: builtin/tag.c:101
 #, c-format
 msgid "tag '%s' not found."
 msgstr "no s'ha trobat l'etiqueta «%s»."
 
-#: builtin/tag.c:135
+#: builtin/tag.c:136
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr "S'ha suprimit l'etiqueta «%s» (era %s)\n"
 
-#: builtin/tag.c:170
+#: builtin/tag.c:171
 #, c-format
 msgid ""
 "\n"
@@ -23662,7 +24223,7 @@ msgstr ""
 "  %s\n"
 "Les línies que comencin amb «%c» s'ignoraran.\n"
 
-#: builtin/tag.c:174
+#: builtin/tag.c:175
 #, c-format
 msgid ""
 "\n"
@@ -23675,11 +24236,11 @@ msgstr ""
 "  %s\n"
 "Les línies que comencin amb «%c» es retindran; podeu eliminar-les per vós mateix si voleu.\n"
 
-#: builtin/tag.c:240
+#: builtin/tag.c:241
 msgid "unable to sign the tag"
 msgstr "no s'ha pogut signar l'etiqueta"
 
-#: builtin/tag.c:258
+#: builtin/tag.c:259
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -23692,115 +24253,119 @@ msgstr ""
 "\n"
 "\tgit tag -f %s %s^{}"
 
-#: builtin/tag.c:274
+#: builtin/tag.c:275
 msgid "bad object type."
 msgstr "el tipus d'objecte és incorrecte."
 
-#: builtin/tag.c:325
+#: builtin/tag.c:326
 msgid "no tag message?"
 msgstr "no hi ha cap missatge d'etiqueta?"
 
-#: builtin/tag.c:332
+#: builtin/tag.c:333
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "S'ha deixat el missatge de l'etiqueta en %s\n"
 
-#: builtin/tag.c:444
+#: builtin/tag.c:445
 msgid "list tag names"
 msgstr "llista els noms d'etiqueta"
 
-#: builtin/tag.c:446
+#: builtin/tag.c:447
 msgid "print <n> lines of each tag message"
 msgstr "imprimeix <n> línies de cada missatge d'etiqueta"
 
-#: builtin/tag.c:448
+#: builtin/tag.c:449
 msgid "delete tags"
 msgstr "suprimeix les etiquetes"
 
-#: builtin/tag.c:449
+#: builtin/tag.c:450
 msgid "verify tags"
 msgstr "verifica les etiquetes"
 
-#: builtin/tag.c:451
+#: builtin/tag.c:452
 msgid "Tag creation options"
 msgstr "Opcions de creació d'etiquetes"
 
-#: builtin/tag.c:453
+#: builtin/tag.c:454
 msgid "annotated tag, needs a message"
 msgstr "etiqueta anotada, necessita un missatge"
 
-#: builtin/tag.c:455
+#: builtin/tag.c:456
 msgid "tag message"
 msgstr "missatge d'etiqueta"
 
-#: builtin/tag.c:457
+#: builtin/tag.c:458
 msgid "force edit of tag message"
 msgstr "força l'edició del missatge de l'etiqueta"
 
-#: builtin/tag.c:458
+#: builtin/tag.c:459
 msgid "annotated and GPG-signed tag"
 msgstr "etiqueta anotada i signada per GPG"
 
-#: builtin/tag.c:461
+#: builtin/tag.c:462
 msgid "use another key to sign the tag"
 msgstr "usa una altra clau per a signar l'etiqueta"
 
-#: builtin/tag.c:462
+#: builtin/tag.c:463
 msgid "replace the tag if exists"
 msgstr "reemplaça l'etiqueta si existeix"
 
-#: builtin/tag.c:463 builtin/update-ref.c:511
+#: builtin/tag.c:464 builtin/update-ref.c:511
 msgid "create a reflog"
 msgstr "crea un registre de referències"
 
-#: builtin/tag.c:465
+#: builtin/tag.c:466
 msgid "Tag listing options"
 msgstr "Opcions de llistat d'etiquetes"
 
-#: builtin/tag.c:466
+#: builtin/tag.c:467
 msgid "show tag list in columns"
 msgstr "mostra la llista d'etiquetes en columnes"
 
-#: builtin/tag.c:467 builtin/tag.c:469
+#: builtin/tag.c:468 builtin/tag.c:470
 msgid "print only tags that contain the commit"
 msgstr "imprimeix només les etiquetes que continguin la comissió"
 
-#: builtin/tag.c:468 builtin/tag.c:470
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that don't contain the commit"
 msgstr "imprimeix només les etiquetes que no continguin la comissió"
 
-#: builtin/tag.c:471
+#: builtin/tag.c:472
 msgid "print only tags that are merged"
 msgstr "imprimeix només les etiquetes que s'han fusionat"
 
-#: builtin/tag.c:472
+#: builtin/tag.c:473
 msgid "print only tags that are not merged"
 msgstr "imprimeix només les etiquetes que no s'han fusionat"
 
-#: builtin/tag.c:476
+#: builtin/tag.c:477
 msgid "print only tags of the object"
 msgstr "imprimeix només les etiquetes de l'objecte"
 
-#: builtin/tag.c:558
+#: builtin/tag.c:559
 #, c-format
 msgid "the '%s' option is only allowed in list mode"
 msgstr "l'opció «%s» només està permesa en mode de llista"
 
-#: builtin/tag.c:597
+#: builtin/tag.c:598
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "«%s» no és un nom d'etiqueta vàlid."
 
-#: builtin/tag.c:602
+#: builtin/tag.c:603
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "l'etiqueta «%s» ja existeix"
 
-#: builtin/tag.c:633
+#: builtin/tag.c:634
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "Etiqueta «%s» actualitzada (era %s)\n"
 
+#: builtin/unpack-objects.c:95
+msgid "pack exceeds maximum allowed size"
+msgstr "el paquet supera la mida màxima permesa"
+
 #: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
 msgstr "S'estan desempaquetant els objectes"
@@ -23866,148 +24431,148 @@ msgstr " D'acord"
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<opcions>] [--] [<fitxer>...]"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:993
 msgid "continue refresh even when index needs update"
 msgstr ""
 "continua l'actualització encara que l'índex necessiti una actualització"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:996
 msgid "refresh: ignore submodules"
 msgstr "actualitza: ignora els submòduls"
 
-#: builtin/update-index.c:980
+#: builtin/update-index.c:999
 msgid "do not ignore new files"
 msgstr "no ignoris els fitxers nous"
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:1001
 msgid "let files replace directories and vice-versa"
 msgstr "deixa que els fitxers reemplacin els directoris i viceversa"
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:1003
 msgid "notice files missing from worktree"
 msgstr "tingues en compte els fitxers absents de l'arbre de treball"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:1005
 msgid "refresh even if index contains unmerged entries"
 msgstr "actualitza encara que l'índex contingui entrades no fusionades"
 
-#: builtin/update-index.c:989
+#: builtin/update-index.c:1008
 msgid "refresh stat information"
 msgstr "actualitza la informació d'estadístiques"
 
-#: builtin/update-index.c:993
+#: builtin/update-index.c:1012
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "com --refresh, però ignora el paràmetre assume-unchanged"
 
-#: builtin/update-index.c:997
+#: builtin/update-index.c:1016
 msgid "<mode>,<object>,<path>"
 msgstr "<mode>,<objecte>,<camí>"
 
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1017
 msgid "add the specified entry to the index"
 msgstr "afegeix l'entrada especificada a l'índex"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1027
 msgid "mark files as \"not changing\""
 msgstr "marca els fitxers com a «no canviant»"
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1030
 msgid "clear assumed-unchanged bit"
 msgstr "esborra el bit assumed-unchanged"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1033
 msgid "mark files as \"index-only\""
 msgstr "marca els fitxers com a «només índex»"
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1036
 msgid "clear skip-worktree bit"
 msgstr "esborra el bit skip-worktree"
 
-#: builtin/update-index.c:1020
+#: builtin/update-index.c:1039
 msgid "do not touch index-only entries"
 msgstr "no toquis les entrades de només índex"
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1041
 msgid "add to index only; do not add content to object database"
 msgstr ""
 "només afegeix a l'índex; no afegeixis el contingut a la base de dades "
 "d'objectes"
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1043
 msgid "remove named paths even if present in worktree"
 msgstr ""
 "elimina els camins anomenats encara que estiguin presents en l'arbre de "
 "treball"
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1045
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "amb --stdin: les línies d'entrada acaben amb octets nuls"
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1047
 msgid "read list of paths to be updated from standard input"
 msgstr "llegeix la llista de camins a actualitzar des de l'entrada estàndard"
 
-#: builtin/update-index.c:1032
+#: builtin/update-index.c:1051
 msgid "add entries from standard input to the index"
 msgstr "afegeix les entrades de l'entrada estàndard a l'índex"
 
-#: builtin/update-index.c:1036
+#: builtin/update-index.c:1055
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "reemplena les «stage» #2 i #3 per als camins llistats"
 
-#: builtin/update-index.c:1040
+#: builtin/update-index.c:1059
 msgid "only update entries that differ from HEAD"
 msgstr "només actualitza les entrades que difereixin de HEAD"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1063
 msgid "ignore files missing from worktree"
 msgstr "ignora els fitxers absents de l'arbre de treball"
 
-#: builtin/update-index.c:1047
+#: builtin/update-index.c:1066
 msgid "report actions to standard output"
 msgstr "informa de les accions en la sortida estàndard"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1068
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(per a porcellanes) oblida't dels conflictes no resolts ni desats"
 
-#: builtin/update-index.c:1053
+#: builtin/update-index.c:1072
 msgid "write index in this format"
 msgstr "escriu l'índex en aquest format"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1074
 msgid "enable or disable split index"
 msgstr "habilita o inhabilita l'índex dividit"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1076
 msgid "enable/disable untracked cache"
 msgstr "habilita/inhabilita la memòria cau no seguida"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1078
 msgid "test if the filesystem supports untracked cache"
 msgstr "prova si el sistema de fitxers admet la memòria cau no seguida"
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1080
 msgid "enable untracked cache without testing the filesystem"
 msgstr "habilita la memòria cau no seguida sense provar el sistema de fitxers"
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1082
 msgid "write out the index even if is not flagged as changed"
 msgstr "escriu l'índex encara que no estigui marcat com a canviat"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1084
 msgid "enable or disable file system monitor"
 msgstr "habilita o inhabilita el monitor del sistema de fitxers"
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1086
 msgid "mark files as fsmonitor valid"
 msgstr "marca els fitxers com a vàlids pel fsmonitor"
 
-#: builtin/update-index.c:1070
+#: builtin/update-index.c:1089
 msgid "clear fsmonitor valid bit"
 msgstr "esborra el bit de validesa del fsmonitor"
 
-#: builtin/update-index.c:1173
+#: builtin/update-index.c:1195
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
@@ -24015,7 +24580,7 @@ msgstr ""
 "core.splitIndex està establert a fals; elimineu-lo o canviar-lo, si realment"
 " voleu habilitar l'índex dividit"
 
-#: builtin/update-index.c:1182
+#: builtin/update-index.c:1204
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
@@ -24023,7 +24588,7 @@ msgstr ""
 "core.splitIndex està establert a cert; elimineu-lo o canvieu-lo, si realment"
 " voleu inhabilitar l'índex dividit"
 
-#: builtin/update-index.c:1194
+#: builtin/update-index.c:1216
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -24031,11 +24596,11 @@ msgstr ""
 "core.untrackedCache està establert a cert; elimineu-lo o canvieu-lo, si "
 "realment voleu inhabilitar el cau no seguit"
 
-#: builtin/update-index.c:1198
+#: builtin/update-index.c:1220
 msgid "Untracked cache disabled"
 msgstr "La memòria cau no seguida està inhabilitada"
 
-#: builtin/update-index.c:1206
+#: builtin/update-index.c:1228
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want"
 " to enable the untracked cache"
@@ -24043,29 +24608,29 @@ msgstr ""
 "core.untrackedCache està establert a fals; elimineu-lo o canviar-lo, si "
 "realment voleu habilitar el cau no seguit"
 
-#: builtin/update-index.c:1210
+#: builtin/update-index.c:1232
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "La memòria cau no seguida està habilitada per a «%s»"
 
-#: builtin/update-index.c:1218
+#: builtin/update-index.c:1241
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
 "core.fsmonitor està establert a fals; establiu-lo a cert si realment voleu "
 "habilitar fsmonitor"
 
-#: builtin/update-index.c:1222
+#: builtin/update-index.c:1246
 msgid "fsmonitor enabled"
 msgstr "fsmonitor habilitat"
 
-#: builtin/update-index.c:1225
+#: builtin/update-index.c:1250
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 "core.fsmonitor està establert a cert; elimineu-lo si realment voleu "
 "inhabilitar fsmonitor"
 
-#: builtin/update-index.c:1229
+#: builtin/update-index.c:1254
 msgid "fsmonitor disabled"
 msgstr "fsmonitor inhabilitat"
 
@@ -24099,10 +24664,6 @@ msgstr "stdin té arguments acabats amb NUL"
 msgid "read updates from stdin"
 msgstr "llegeix les actualitzacions des de stdin"
 
-#: builtin/update-server-info.c:7
-msgid "git update-server-info [--force]"
-msgstr "git update-server-info [--force]"
-
 #: builtin/update-server-info.c:15
 msgid "update the info files from scratch"
 msgstr "actualitza els fitxers d'informació des de zero"
@@ -24185,33 +24746,37 @@ msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<opcions>] <arbre de treball>"
 
 #: builtin/worktree.c:25
+msgid "git worktree repair [<path>...]"
+msgstr "git worktree repair [<path>...]"
+
+#: builtin/worktree.c:26
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <camí>"
 
-#: builtin/worktree.c:75
+#: builtin/worktree.c:76
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr "S'està eliminant %s/%s: %s"
 
-#: builtin/worktree.c:148
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
 msgstr "informa dels arbres de treball podats"
 
-#: builtin/worktree.c:150
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr "fes caducar els arbres de treball més antics que <data>"
 
-#: builtin/worktree.c:220
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr "«%s» ja existeix"
 
-#: builtin/worktree.c:229
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
 msgstr "destinació de l'arbre de treball no utilitzable «%s»"
 
-#: builtin/worktree.c:234
+#: builtin/worktree.c:235
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -24220,7 +24785,7 @@ msgstr ""
 "«%s» és un arbre de treball que manca però que està bloquejat;\n"
 "useu «%s -f -f» per a sobreescriure-ho, o «unlock» i «prune» o «remove» per a netejar"
 
-#: builtin/worktree.c:236
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -24229,131 +24794,157 @@ msgstr ""
 "manca «%s» però ja està registrat a l'arbre de treball;\n"
 "useu «%s»  per a sobreescriure-ho, o «prune» o «remove» per a netejar"
 
-#: builtin/worktree.c:287
+#: builtin/worktree.c:248
+#, c-format, fuzzy
+msgid "failed to copy '%s' to '%s'; sparse-checkout may not work correctly"
+msgstr ""
+"no s'ha pogut copiar '%s' a '%s'; la comprovació de la dispersió pot no "
+"funcionar correctament"
+
+#: builtin/worktree.c:268
+#, c-format, fuzzy
+msgid "failed to copy worktree config from '%s' to '%s'"
+msgstr ""
+"no s'ha pogut copiar la configuració de l'arbre de treball de «%s» a «%s»"
+
+#: builtin/worktree.c:280 builtin/worktree.c:285
+#, c-format, fuzzy
+msgid "failed to unset '%s' in '%s'"
+msgstr "no s'ha pogut desassignar «%s» a «%s»"
+
+#: builtin/worktree.c:356
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "no s'ha pogut crear directori de «%s»"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:378
 msgid "initializing"
 msgstr "s'està inicialitzant"
 
-#: builtin/worktree.c:420 builtin/worktree.c:426
+#: builtin/worktree.c:492 builtin/worktree.c:498
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "S'està preparant l'arbre de treball (branca nova «%s»)"
 
-#: builtin/worktree.c:422
+#: builtin/worktree.c:494
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
-msgstr "S'està preparant l'arbre de treball (s'està reiniciant la branca «%s»; estava a %s)"
+msgstr ""
+"S'està preparant l'arbre de treball (s'està reiniciant la branca «%s»; "
+"estava a %s)"
 
-#: builtin/worktree.c:431
+#: builtin/worktree.c:503
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "S'està preparant l'arbre de treball (s'està agafant «%s»)"
 
-#: builtin/worktree.c:437
+#: builtin/worktree.c:509
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "S'està preparant l'arbre de treball (HEAD %s separat)"
 
-#: builtin/worktree.c:482
+#: builtin/worktree.c:554
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr "agafa <branca> encara que sigui agafada en altre arbre de treball"
 
-#: builtin/worktree.c:485
+#: builtin/worktree.c:557
 msgid "create a new branch"
 msgstr "crea una branca nova"
 
-#: builtin/worktree.c:487
+#: builtin/worktree.c:559
 msgid "create or reset a branch"
 msgstr "crea o restableix una branca"
 
-#: builtin/worktree.c:489
+#: builtin/worktree.c:561
 msgid "populate the new working tree"
 msgstr "emplena l'arbre de treball nou"
 
-#: builtin/worktree.c:490
+#: builtin/worktree.c:562
 msgid "keep the new working tree locked"
 msgstr "mantén l'arbre de treball nou bloquejat"
 
-#: builtin/worktree.c:492 builtin/worktree.c:729
+#: builtin/worktree.c:564 builtin/worktree.c:809
 msgid "reason for locking"
 msgstr "raó per a bloquejar"
 
-#: builtin/worktree.c:495
+#: builtin/worktree.c:567
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "configura el mode de seguiment (vegeu git-branch(1))"
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:570
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr ""
 "prova de fer coincidir el nom de la branca nova amb una branca amb seguiment"
 " remot"
 
-#: builtin/worktree.c:512
+#: builtin/worktree.c:584
 msgid "added with --lock"
 msgstr "afegit amb --lock"
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:646
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "--[no-]track només es pot usar si es crea una branca nova"
 
-#: builtin/worktree.c:691
+#: builtin/worktree.c:766
 msgid "show extended annotations and reasons, if available"
 msgstr "mostra les anotacions esteses i les raons, si estan disponibles"
 
-#: builtin/worktree.c:693
+#: builtin/worktree.c:768
 msgid "add 'prunable' annotation to worktrees older than <time>"
-msgstr "afegeix l'anotació «prunable» als arbres de treball més antics que <data>"
+msgstr ""
+"afegeix l'anotació «prunable» als arbres de treball més antics que <data>"
+
+#: builtin/worktree.c:770
+#, fuzzy
+msgid "terminate records with a NUL character"
+msgstr "finalitza els registres amb un caràcter NUL"
 
-#: builtin/worktree.c:741 builtin/worktree.c:774 builtin/worktree.c:848
-#: builtin/worktree.c:972
+#: builtin/worktree.c:821 builtin/worktree.c:854 builtin/worktree.c:928
+#: builtin/worktree.c:1052
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "«%s» no és un arbre de treball"
 
-#: builtin/worktree.c:743 builtin/worktree.c:776
+#: builtin/worktree.c:823 builtin/worktree.c:856
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "No es pot bloquejar ni desbloquejar l'arbre de treball principal"
 
-#: builtin/worktree.c:748
+#: builtin/worktree.c:828
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "«%s» ja està bloquejat, raó: «%s»"
 
-#: builtin/worktree.c:750
+#: builtin/worktree.c:830
 #, c-format
 msgid "'%s' is already locked"
 msgstr "«%s» ja està bloquejat"
 
-#: builtin/worktree.c:778
+#: builtin/worktree.c:858
 #, c-format
 msgid "'%s' is not locked"
 msgstr "«%s» no està bloquejat"
 
-#: builtin/worktree.c:819
+#: builtin/worktree.c:899
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr ""
 "els arbres de treball que contenen submòduls no es poden moure ni eliminar"
 
-#: builtin/worktree.c:827
+#: builtin/worktree.c:907
 msgid "force move even if worktree is dirty or locked"
 msgstr ""
 "força el moviment encara que l'arbre de treball estigui brut o bloquejat"
 
-#: builtin/worktree.c:850 builtin/worktree.c:974
+#: builtin/worktree.c:930 builtin/worktree.c:1054
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "«%s» és un arbre de treball principal"
 
-#: builtin/worktree.c:855
+#: builtin/worktree.c:935
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "no s'ha pogut deduir el nom de destí des de «%s»"
 
-#: builtin/worktree.c:868
+#: builtin/worktree.c:948
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -24362,7 +24953,7 @@ msgstr ""
 "no es pot moure un arbre de treball bloquejat, raó del bloqueig: %s\n"
 "useu primer «move -f -f» per a sobreescriure'l o desbloquejar-lo primer"
 
-#: builtin/worktree.c:870
+#: builtin/worktree.c:950
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -24370,38 +24961,38 @@ msgstr ""
 "no es pot moure un arbre de treball bloquejat;\n"
 "useu primer «move -f -f» per a sobreescriure'l o desbloquejar-lo primer"
 
-#: builtin/worktree.c:873
+#: builtin/worktree.c:953
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "la validació ha fallat, no es pot moure l'arbre de treball: %s"
 
-#: builtin/worktree.c:878
+#: builtin/worktree.c:958
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "s'ha produït un error en moure «%s» a «%s»"
 
-#: builtin/worktree.c:924
+#: builtin/worktree.c:1004
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "no s'ha pogut executar «git status» a «%s»"
 
-#: builtin/worktree.c:928
+#: builtin/worktree.c:1008
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
 "«%s» conté fitxers modificats o no seguits, useu --force per a suprimir-los"
 
-#: builtin/worktree.c:933
+#: builtin/worktree.c:1013
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "no s'ha pogut executar «git status» a «%s», codi %d"
 
-#: builtin/worktree.c:956
+#: builtin/worktree.c:1036
 msgid "force removal even if worktree is dirty or locked"
 msgstr ""
 "força l'eliminació encara que l'arbre de treball estigui brut o bloquejat"
 
-#: builtin/worktree.c:979
+#: builtin/worktree.c:1059
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -24410,7 +25001,7 @@ msgstr ""
 "no es pot suprimir un arbre de treball bloquejat, raó del bloqueig: %s\n"
 "useu primer «remove -f -f» per a sobreescriure'l o desbloquejar-lo"
 
-#: builtin/worktree.c:981
+#: builtin/worktree.c:1061
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -24418,17 +25009,17 @@ msgstr ""
 "no es pot suprimir un arbre de treball bloquejat;\n"
 "useu primer «remove -f -f» per a sobreescriure'l o desbloquejar-lo"
 
-#: builtin/worktree.c:984
+#: builtin/worktree.c:1064
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "la validació ha fallat, no es pot suprmir l'arbre de treball: %s"
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:1088
 #, c-format
 msgid "repair: %s: %s"
 msgstr "repara: %s: %s"
 
-#: builtin/worktree.c:1011
+#: builtin/worktree.c:1091
 #, c-format
 msgid "error: %s: %s"
 msgstr "error: %s: %s"
@@ -24531,29 +25122,29 @@ msgstr "àlies buit per a %s"
 msgid "recursive alias: %s"
 msgstr "àlies recursiu: %s"
 
-#: git.c:479
+#: git.c:480
 msgid "write failure on standard output"
 msgstr "fallada d'escriptura en la sortida estàndard"
 
-#: git.c:481
+#: git.c:482
 msgid "unknown write failure on standard output"
 msgstr "fallada d'escriptura desconeguda en la sortida estàndard"
 
-#: git.c:483
+#: git.c:484
 msgid "close failed on standard output"
 msgstr "ha fallat el tancament en la sortida estàndard"
 
-#: git.c:835
+#: git.c:838
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr "bucle d'àlies detectat expansió de «%s» no acaba:%s"
 
-#: git.c:885
+#: git.c:888
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "no es pot gestionar %s com a integrat"
 
-#: git.c:898
+#: git.c:901
 #, c-format
 msgid ""
 "usage: %s\n"
@@ -24562,12 +25153,12 @@ msgstr ""
 "ús: %s\n"
 "\n"
 
-#: git.c:918
+#: git.c:921
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr "ha fallat l'expansió de l'àlies «%s»; «%s» no és una ordre git\n"
 
-#: git.c:930
+#: git.c:933
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "s'ha produït un error en executar l'ordre «%s»: %s\n"
@@ -24723,143 +25314,144 @@ msgstr ""
 "  petició: %s\n"
 "   redirecció: %s"
 
-#: remote-curl.c:183
+#: remote-curl.c:184
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr "citació no vàlida en el valor de l'opció de pujada: «%s»"
 
-#: remote-curl.c:304
+#: remote-curl.c:308
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr "%sinfo/refs no vàlides: és un repositori git?"
 
-#: remote-curl.c:405
+#: remote-curl.c:409
 msgid "invalid server response; expected service, got flush packet"
 msgstr ""
-"resposta del servidor no és vàlida; el servei esperat, ha rebut in paquet "
-"de neteja"
+"resposta del servidor no és vàlida; el servei esperat, ha rebut in paquet de"
+" neteja"
 
-#: remote-curl.c:436
+#: remote-curl.c:440
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr "resposta del servidor no vàlida; s'ha obtingut «%s»"
 
-#: remote-curl.c:496
+#: remote-curl.c:500
 #, c-format
 msgid "repository '%s' not found"
 msgstr "no s'ha trobat el repositori «%s»"
 
-#: remote-curl.c:500
+#: remote-curl.c:504
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr "S'ha produït un error en autenticar per «%s»"
 
-#: remote-curl.c:504
+#: remote-curl.c:508
 #, c-format
 msgid "unable to access '%s' with http.pinnedPubkey configuration: %s"
 msgstr "no es pot accedir a «%s» la configuració de http.pinnedPubkey :%s"
 
-#: remote-curl.c:508
+#: remote-curl.c:512
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "no s'ha pogut accedir a «%s»: %s"
 
-#: remote-curl.c:514
+#: remote-curl.c:518
 #, c-format
 msgid "redirecting to %s"
 msgstr "s'està redirigint a %s"
 
-#: remote-curl.c:645
+#: remote-curl.c:649
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr "no hauria de tenir EOF quan s'és lax amb els EOF"
 
-#: remote-curl.c:657
+#: remote-curl.c:661
 msgid "remote server sent unexpected response end packet"
 msgstr "el servidor remot ha enviat un paquet de final de resposta inesperat"
 
-#: remote-curl.c:726
+#: remote-curl.c:730
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr ""
 "no s'han pogut rebobinar les dades de publicació rpc - proveu d'augmentar "
 "http.postBuffer"
 
-#: remote-curl.c:755
+#: remote-curl.c:759
 #, c-format
 msgid "remote-curl: bad line length character: %.4s"
 msgstr "remote-curl: caràcter de longitud de línia erroni: %.4s"
 
-#: remote-curl.c:757
+#: remote-curl.c:761
 msgid "remote-curl: unexpected response end packet"
 msgstr "remote-curl: paquet final de resposta inesperat"
 
-#: remote-curl.c:833
+#: remote-curl.c:837
 #, c-format
 msgid "RPC failed; %s"
 msgstr "RPC ha fallat; %s"
 
-#: remote-curl.c:873
+#: remote-curl.c:877
 msgid "cannot handle pushes this big"
 msgstr "no es pot gestionar pujades tan grans"
 
-#: remote-curl.c:986
+#: remote-curl.c:990
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr "no es pot descomprimir la sol·licitud; error de deflate zlib %d"
 
-#: remote-curl.c:990
+#: remote-curl.c:994
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
-msgstr "no es pot descomprimir la sol·licitud; error de finalització de zlib %d"
+msgstr ""
+"no es pot descomprimir la sol·licitud; error de finalització de zlib %d"
 
-#: remote-curl.c:1040
+#: remote-curl.c:1044
 #, c-format
 msgid "%d bytes of length header were received"
 msgstr "s'han rebut %d bytes de longitud de capçalera"
 
-#: remote-curl.c:1042
+#: remote-curl.c:1046
 #, c-format
 msgid "%d bytes of body are still expected"
 msgstr "encara s'esperen %d bytes del cos"
 
-#: remote-curl.c:1131
+#: remote-curl.c:1135
 msgid "dumb http transport does not support shallow capabilities"
 msgstr "el transport ximple http no admet capacitats superficials"
 
-#: remote-curl.c:1146
+#: remote-curl.c:1150
 msgid "fetch failed."
 msgstr "l'obtenció ha fallat."
 
-#: remote-curl.c:1192
+#: remote-curl.c:1198
 msgid "cannot fetch by sha1 over smart http"
 msgstr "no s'ha pogut obtenir per sha1 a través de l'http intel·ligent"
 
-#: remote-curl.c:1236 remote-curl.c:1242
+#: remote-curl.c:1242 remote-curl.c:1248
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr "error de protocol: s'esperava sha/ref, s'ha obtingut «%s»"
 
-#: remote-curl.c:1254 remote-curl.c:1372
+#: remote-curl.c:1260 remote-curl.c:1378
 #, c-format
 msgid "http transport does not support %s"
 msgstr "El transport http no admet %s"
 
-#: remote-curl.c:1290
+#: remote-curl.c:1296
 msgid "git-http-push failed"
 msgstr "git-http-push ha fallat"
 
-#: remote-curl.c:1478
+#: remote-curl.c:1485
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr "remote-curl: ús: git remote-curl <remote> [<url>]"
 
-#: remote-curl.c:1510
+#: remote-curl.c:1517
 msgid "remote-curl: error reading command stream from git"
 msgstr "remote-curl: error en llegir el flux d'ordres del git"
 
-#: remote-curl.c:1517
+#: remote-curl.c:1524
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr "remote-curl: s'ha intentat l'obtenció sense un dipòsit local"
 
-#: remote-curl.c:1558
+#: remote-curl.c:1565
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr "remote-curl: ordre «%s» desconeguda del git"
@@ -24872,125 +25464,123 @@ msgstr "cal un directori de treball"
 msgid "could not find enlistment root"
 msgstr "no s'ha pogut trobar un arrel d'allistament"
 
-#: contrib/scalar/scalar.c:89 contrib/scalar/scalar.c:351
-#: contrib/scalar/scalar.c:436 contrib/scalar/scalar.c:579
+#: contrib/scalar/scalar.c:89 contrib/scalar/scalar.c:350
+#: contrib/scalar/scalar.c:435 contrib/scalar/scalar.c:578
 #, c-format
 msgid "could not switch to '%s'"
 msgstr "no s'ha pogut commutar a «%s»"
 
-#: contrib/scalar/scalar.c:180
+#: contrib/scalar/scalar.c:179
 #, c-format
 msgid "could not configure %s=%s"
 msgstr "no s'ha pogut configurar %s=%s"
 
-#: contrib/scalar/scalar.c:198
+#: contrib/scalar/scalar.c:197
 msgid "could not configure log.excludeDecoration"
 msgstr "no s'ha pogut configurar log.excludeDecoration"
 
-#: contrib/scalar/scalar.c:219
+#: contrib/scalar/scalar.c:218
 msgid "Scalar enlistments require a worktree"
 msgstr "Els allistaments escalars requereixen un arbre de treball"
 
-#: contrib/scalar/scalar.c:311
+#: contrib/scalar/scalar.c:310
 #, c-format
 msgid "remote HEAD is not a branch: '%.*s'"
 msgstr "el HEAD remot no és una branca: «%.*s»"
 
-#: contrib/scalar/scalar.c:317
+#: contrib/scalar/scalar.c:316
 msgid "failed to get default branch name from remote; using local default"
 msgstr ""
-"no s'ha pogut obtenir el nom de la branca per defecte del remot; s'usa "
-"ela predeterminada localment"
+"no s'ha pogut obtenir el nom de la branca per defecte del remot; s'usa ela "
+"predeterminada localment"
 
-#: contrib/scalar/scalar.c:330
+#: contrib/scalar/scalar.c:329
 msgid "failed to get default branch name"
-msgstr ""
-"s'ha produït un error en obtenir el nom de branca predeterminada"
+msgstr "s'ha produït un error en obtenir el nom de branca predeterminada"
 
-#: contrib/scalar/scalar.c:341
+#: contrib/scalar/scalar.c:340
 msgid "failed to unregister repository"
 msgstr "s'ha produït un error en desregistrar el repositori"
 
-#: contrib/scalar/scalar.c:356
+#: contrib/scalar/scalar.c:355
 msgid "failed to delete enlistment directory"
 msgstr "s'ha produït un error en suprimir l'allistament del directori"
 
-#: contrib/scalar/scalar.c:376
+#: contrib/scalar/scalar.c:375
 msgid "branch to checkout after clone"
 msgstr "branca a agafar després de clonar"
 
-#: contrib/scalar/scalar.c:378
+#: contrib/scalar/scalar.c:377
 msgid "when cloning, create full working directory"
 msgstr "quan es clona, crear un directori de treball complet"
 
-#: contrib/scalar/scalar.c:380
+#: contrib/scalar/scalar.c:379
 msgid "only download metadata for the branch that will be checked out"
 msgstr "només baixa les metadades per a la branca que s'agafarà"
 
-#: contrib/scalar/scalar.c:385
+#: contrib/scalar/scalar.c:384
 msgid "scalar clone [<options>] [--] <repo> [<dir>]"
 msgstr "scalar clone [<opcions>] [--] <repo> [<dir>]"
 
-#: contrib/scalar/scalar.c:410
+#: contrib/scalar/scalar.c:409
 #, c-format
 msgid "cannot deduce worktree name from '%s'"
 msgstr "no es pot deduir el nom de l'arbre de treball de «%s»"
 
-#: contrib/scalar/scalar.c:419
+#: contrib/scalar/scalar.c:418
 #, c-format
 msgid "directory '%s' exists already"
 msgstr "el directori «%s» ja existeix"
 
-#: contrib/scalar/scalar.c:446
+#: contrib/scalar/scalar.c:445
 #, c-format
 msgid "failed to get default branch for '%s'"
-msgstr ""
-"s'ha produït un error en obtenir la branca per defecte per a «%s»"
+msgstr "s'ha produït un error en obtenir la branca per defecte per a «%s»"
 
-#: contrib/scalar/scalar.c:457
+#: contrib/scalar/scalar.c:456
 #, c-format
 msgid "could not configure remote in '%s'"
 msgstr "no s'ha pogut configurar el remot a «%s»"
 
-#: contrib/scalar/scalar.c:466
+#: contrib/scalar/scalar.c:465
 #, c-format
 msgid "could not configure '%s'"
 msgstr "no s'ha pogut configurar «%s»"
 
-#: contrib/scalar/scalar.c:469
+#: contrib/scalar/scalar.c:468
 msgid "partial clone failed; attempting full clone"
 msgstr "ha fallat la clonació parcial; s'està intentant la clonació completa"
 
-#: contrib/scalar/scalar.c:473
+#: contrib/scalar/scalar.c:472
 msgid "could not configure for full clone"
 msgstr "no s'ha pogut configurar per a una clonació completa"
 
-#: contrib/scalar/scalar.c:505
+#: contrib/scalar/scalar.c:504
 msgid "`scalar list` does not take arguments"
 msgstr "«scalar list» no accepta arguments"
 
-#: contrib/scalar/scalar.c:518
+#: contrib/scalar/scalar.c:517
 msgid "scalar register [<enlistment>]"
 msgstr "scalar register [<enlistment>]"
 
-#: contrib/scalar/scalar.c:545
+#: contrib/scalar/scalar.c:544
 msgid "reconfigure all registered enlistments"
 msgstr "reconfigura tots els allistaments registrats"
 
-#: contrib/scalar/scalar.c:549
+#: contrib/scalar/scalar.c:548
 msgid "scalar reconfigure [--all | <enlistment>]"
 msgstr "scalar reconfigure [--all | <enlistment>]"
 
-#: contrib/scalar/scalar.c:567
+#: contrib/scalar/scalar.c:566
 msgid "--all or <enlistment>, but not both"
 msgstr "--all o <enlistment>, però no ambdós"
 
-#: contrib/scalar/scalar.c:582
+#: contrib/scalar/scalar.c:581
 #, c-format
 msgid "git repository gone in '%s'"
 msgstr "no existeix un repositori de git a: «%s»"
 
-#: contrib/scalar/scalar.c:622
+#: contrib/scalar/scalar.c:621
 msgid ""
 "scalar run <task> [<enlistment>]\n"
 "Tasks:\n"
@@ -24998,42 +25588,55 @@ msgstr ""
 "scalar run <task>  {<enlistment>]\n"
 "Tasques:\n"
 
-#: contrib/scalar/scalar.c:640
+#: contrib/scalar/scalar.c:639
 #, c-format
 msgid "no such task: '%s'"
 msgstr "no existeix la tasca: «%s»"
 
-#: contrib/scalar/scalar.c:690
+#: contrib/scalar/scalar.c:689
 msgid "scalar unregister [<enlistment>]"
 msgstr "scalar unregister [<enlistment>]"
 
-#: contrib/scalar/scalar.c:737
+#: contrib/scalar/scalar.c:736
 msgid "scalar delete <enlistment>"
 msgstr "supressió de l'escalar <enlistment>"
 
-#: contrib/scalar/scalar.c:752
+#: contrib/scalar/scalar.c:751
 msgid "refusing to delete current working directory"
 msgstr "s'ha rebutjat suprimir el directori de treball actual"
 
-#: contrib/scalar/scalar.c:767
+#: contrib/scalar/scalar.c:766
 msgid "include Git version"
 msgstr "inclou la versió del Git"
 
-#: contrib/scalar/scalar.c:769
+#: contrib/scalar/scalar.c:768
 msgid "include Git's build options"
 msgstr "inclou les opcions de construcció del Git"
 
-#: contrib/scalar/scalar.c:773
+#: contrib/scalar/scalar.c:772
 msgid "scalar verbose [-v | --verbose] [--build-options]"
 msgstr "scalar verbose [-v | --verbose] [--build-options]"
 
+#: contrib/scalar/scalar.c:813
+msgid "-C requires a <directory>"
+msgstr "-C requereix un <directory>"
+
+#: contrib/scalar/scalar.c:815
+#, c-format
+msgid "could not change to '%s'"
+msgstr "no s'ha pogut canviar a «%s»"
+
 #: contrib/scalar/scalar.c:821
+msgid "-c requires a <key>=<value> argument"
+msgstr "-c requereix un argument <key>=<value>"
+
+#: contrib/scalar/scalar.c:839
 msgid ""
-"scalar <command> [<options>]\n"
+"scalar [-C <directory>] [-c <key>=<value>] <command> [<options>]\n"
 "\n"
 "Commands:\n"
 msgstr ""
-"scalar <ordre> [<opcions>]\n"
+"scalar [-C <directory>] [-c <key>=<value>] <command> [<options>]\n"
 "\n"
 "Ordres:\n"
 
@@ -25045,43 +25648,43 @@ msgstr "no hi ha informació disponible del compilador\n"
 msgid "no libc information available\n"
 msgstr "no hi ha informació disponible de libc\n"
 
-#: list-objects-filter-options.h:94
+#: list-objects-filter-options.h:126
 msgid "args"
 msgstr "arguments"
 
-#: list-objects-filter-options.h:95
+#: list-objects-filter-options.h:127
 msgid "object filtering"
 msgstr "filtratge d'objecte"
 
-#: parse-options.h:183
+#: parse-options.h:188
 msgid "expiry-date"
 msgstr "data-de-caducitat"
 
-#: parse-options.h:197
+#: parse-options.h:202
 msgid "no-op (backward compatibility)"
 msgstr "operació nul·la (per a compatibilitat amb versions anteriors)"
 
-#: parse-options.h:310
+#: parse-options.h:341
 msgid "be more verbose"
 msgstr "sigues més detallat"
 
-#: parse-options.h:312
+#: parse-options.h:343
 msgid "be more quiet"
 msgstr "sigues més discret"
 
-#: parse-options.h:318
+#: parse-options.h:349
 msgid "use <n> digits to display object names"
 msgstr "usa <n> xifres per a mostrar els noms d'objecte"
 
-#: parse-options.h:337
+#: parse-options.h:368
 msgid "how to strip spaces and #comments from message"
 msgstr "com suprimir els espais i #comentaris del missatge"
 
-#: parse-options.h:338
+#: parse-options.h:369
 msgid "read pathspec from file"
 msgstr "llegeix l'especificació del camí del fitxer"
 
-#: parse-options.h:339
+#: parse-options.h:370
 msgid ""
 "with --pathspec-from-file, pathspec elements are separated with NUL "
 "character"
@@ -25344,459 +25947,465 @@ msgid "Display help information about Git"
 msgstr "Mostra informació d'ajuda del Git"
 
 #: command-list.h:108
+#, fuzzy
+msgid "Run git hooks"
+msgstr "Executa els ganxos del git"
+
+#: command-list.h:109
 msgid "Server side implementation of Git over HTTP"
 msgstr "Implementació al servidor del Git sobre HTTP"
 
-#: command-list.h:109
+#: command-list.h:110
 msgid "Download from a remote Git repository via HTTP"
 msgstr "Baixa des d'un repositori Git remot via HTTP"
 
-#: command-list.h:110
+#: command-list.h:111
 msgid "Push objects over HTTP/DAV to another repository"
 msgstr "Pujar objectes sobre HTTP/DAV a un altre repositori"
 
-#: command-list.h:111
+#: command-list.h:112
 msgid "Send a collection of patches from stdin to an IMAP folder"
 msgstr ""
 "Envia una col·lecció de pedaços des de l'entrada estàndard a una carpeta "
 "IMAP"
 
-#: command-list.h:112
+#: command-list.h:113
 msgid "Build pack index file for an existing packed archive"
 msgstr ""
 "Construeix el fitxer d'índex del paquet per a un arxiu empaquetat existent"
 
-#: command-list.h:113
+#: command-list.h:114
 msgid "Create an empty Git repository or reinitialize an existing one"
 msgstr "Crea un repositori de Git buit o reinicialitza un existent"
 
-#: command-list.h:114
+#: command-list.h:115
 msgid "Instantly browse your working repository in gitweb"
 msgstr "Navegueu instantàniament pel vostre repositori de treball a gitweb"
 
-#: command-list.h:115
+#: command-list.h:116
 msgid "Add or parse structured information in commit messages"
 msgstr ""
 "Afegeix o analitza la informació estructurada en els missatges de comissió"
 
-#: command-list.h:116
+#: command-list.h:117
 msgid "Show commit logs"
 msgstr "Mostra els registres de comissió"
 
-#: command-list.h:117
+#: command-list.h:118
 msgid "Show information about files in the index and the working tree"
 msgstr "Mostra informació sobre els fitxers a l'índex i a l'arbre de treball"
 
-#: command-list.h:118
+#: command-list.h:119
 msgid "List references in a remote repository"
 msgstr "Mostra les referències d'un repositori remot"
 
-#: command-list.h:119
+#: command-list.h:120
 msgid "List the contents of a tree object"
 msgstr "Mostra els continguts d'un objecte de l'arbre"
 
-#: command-list.h:120
+#: command-list.h:121
 msgid "Extracts patch and authorship from a single e-mail message"
 msgstr "Extreu el pedaç i l'autoria d'un sol missatge de correu electrònic"
 
-#: command-list.h:121
+#: command-list.h:122
 msgid "Simple UNIX mbox splitter program"
 msgstr "Programa de divisió mbox simple per a UNIX"
 
-#: command-list.h:122
+#: command-list.h:123
 msgid "Run tasks to optimize Git repository data"
 msgstr "Executa tasques per a optimitzar les dades del repositori Git"
 
-#: command-list.h:123
+#: command-list.h:124
 msgid "Join two or more development histories together"
 msgstr "Uneix dues o més històries de desenvolupament"
 
-#: command-list.h:124
+#: command-list.h:125
 msgid "Find as good common ancestors as possible for a merge"
 msgstr "Troba els millors avantpassats comuns possibles per a una fusió"
 
-#: command-list.h:125
+#: command-list.h:126
 msgid "Run a three-way file merge"
 msgstr "Executa una fusió de fitxers de tres vies"
 
-#: command-list.h:126
+#: command-list.h:127
 msgid "Run a merge for files needing merging"
 msgstr "Executa una fusió per als fitxers que cal fusionar"
 
-#: command-list.h:127
+#: command-list.h:128
 msgid "The standard helper program to use with git-merge-index"
 msgstr "El programa d'ajuda estàndard a utilitzar amb git-merge-index"
 
-#: command-list.h:128
+#: command-list.h:129
 msgid "Show three-way merge without touching index"
 msgstr "Mostra la fusió de tres vies sense tocar l'índex"
 
-#: command-list.h:129
+#: command-list.h:130
 msgid "Run merge conflict resolution tools to resolve merge conflicts"
 msgstr ""
 "Executa eines de resolució de conflictes per a resoldre conflictes de fusió"
 
-#: command-list.h:130
+#: command-list.h:131
 msgid "Creates a tag object with extra validation"
 msgstr "Crea un objecte etiqueta amb validació addicional"
 
-#: command-list.h:131
+#: command-list.h:132
 msgid "Build a tree-object from ls-tree formatted text"
 msgstr "Construeix un objecte en arbre a partir de text formatat amb ls-tree"
 
-#: command-list.h:132
+#: command-list.h:133
 msgid "Write and verify multi-pack-indexes"
 msgstr "Escriu i verifica els índexs dels paquets multipaquet"
 
-#: command-list.h:133
+#: command-list.h:134
 msgid "Move or rename a file, a directory, or a symlink"
 msgstr "Mou o canvia de nom a un fitxer, directori o enllaç simbòlic"
 
-#: command-list.h:134
+#: command-list.h:135
 msgid "Find symbolic names for given revs"
 msgstr "Cerca noms simbòlics per a les revisions donades"
 
-#: command-list.h:135
+#: command-list.h:136
 msgid "Add or inspect object notes"
 msgstr "Afegeix o inspecciona notes de l'objecte"
 
-#: command-list.h:136
+#: command-list.h:137
 msgid "Import from and submit to Perforce repositories"
 msgstr "Importa des de i envia a repositoris Perforce"
 
-#: command-list.h:137
+#: command-list.h:138
 msgid "Create a packed archive of objects"
 msgstr "Crea un arxiu empaquetat d'objectes"
 
-#: command-list.h:138
+#: command-list.h:139
 msgid "Find redundant pack files"
 msgstr "Troba fitxers empaquetats redundants"
 
-#: command-list.h:139
+#: command-list.h:140
 msgid "Pack heads and tags for efficient repository access"
 msgstr ""
 "Empaqueta els caps i les etiquetes per a un accés eficient al repositori"
 
-#: command-list.h:140
+#: command-list.h:141
 msgid "Compute unique ID for a patch"
 msgstr "Calcula un identificador únic per a cada pedaç"
 
-#: command-list.h:141
+#: command-list.h:142
 msgid "Prune all unreachable objects from the object database"
 msgstr "Poda tots els objectes no accessibles de la base de dades d'objectes"
 
-#: command-list.h:142
+#: command-list.h:143
 msgid "Remove extra objects that are already in pack files"
 msgstr "Elimina els objectes extres que ja estan en fitxers empaquetats"
 
-#: command-list.h:143
+#: command-list.h:144
 msgid "Fetch from and integrate with another repository or a local branch"
 msgstr "Obtén i integra amb un altre repositori o una branca local"
 
-#: command-list.h:144
+#: command-list.h:145
 msgid "Update remote refs along with associated objects"
 msgstr ""
 "Actualitza les referències remotes juntament amb els objectes associats"
 
-#: command-list.h:145
+#: command-list.h:146
 msgid "Applies a quilt patchset onto the current branch"
 msgstr "Aplica un conjunt de pedaços a la branca actual"
 
-#: command-list.h:146
+#: command-list.h:147
 msgid "Compare two commit ranges (e.g. two versions of a branch)"
 msgstr "Compara dos rangs de comissions (p. ex. dues versions d'una branca)"
 
-#: command-list.h:147
+#: command-list.h:148
 msgid "Reads tree information into the index"
 msgstr "Llegeix la informació de l'arbre a l'índex"
 
-#: command-list.h:148
+#: command-list.h:149
 msgid "Reapply commits on top of another base tip"
 msgstr "Torna a aplicar les comissions sobre un altre punt de basament"
 
-#: command-list.h:149
+#: command-list.h:150
 msgid "Receive what is pushed into the repository"
 msgstr "Rep el que s'envia al repositori"
 
-#: command-list.h:150
+#: command-list.h:151
 msgid "Manage reflog information"
 msgstr "Gestiona la informació del registre de referències"
 
-#: command-list.h:151
+#: command-list.h:152
 msgid "Manage set of tracked repositories"
 msgstr "Gestiona el conjunt de repositoris seguits"
 
-#: command-list.h:152
+#: command-list.h:153
 msgid "Pack unpacked objects in a repository"
 msgstr "Empaqueta els objectes desempaquetats en un repositori"
 
-#: command-list.h:153
+#: command-list.h:154
 msgid "Create, list, delete refs to replace objects"
 msgstr "Crea, llista i esborra referències per a substituir objectes"
 
-#: command-list.h:154
+#: command-list.h:155
 msgid "Generates a summary of pending changes"
 msgstr "Genera un resum dels canvis pendents"
 
-#: command-list.h:155
+#: command-list.h:156
 msgid "Reuse recorded resolution of conflicted merges"
 msgstr "Reutilitza la resolució registrada dels conflictes de fusió"
 
-#: command-list.h:156
+#: command-list.h:157
 msgid "Reset current HEAD to the specified state"
 msgstr "Restableix la HEAD actual a l'estat especificat"
 
-#: command-list.h:157
+#: command-list.h:158
 msgid "Restore working tree files"
 msgstr "Restaura els fitxers de l'arbre de treball"
 
-#: command-list.h:158
+#: command-list.h:159
 msgid "Lists commit objects in reverse chronological order"
 msgstr "Mostra les comissions en ordre topològic invers"
 
-#: command-list.h:159
+#: command-list.h:160
 msgid "Pick out and massage parameters"
 msgstr "Trieu i personalitzeu els paràmetres"
 
-#: command-list.h:160
+#: command-list.h:161
 msgid "Revert some existing commits"
 msgstr "Reverteix comissions existents"
 
-#: command-list.h:161
+#: command-list.h:162
 msgid "Remove files from the working tree and from the index"
 msgstr "Elimina fitxers de l'arbre de treball i de l'índex"
 
-#: command-list.h:162
+#: command-list.h:163
 msgid "Send a collection of patches as emails"
 msgstr "Envia una col·lecció de pedaços com a correus electrònics"
 
-#: command-list.h:163
+#: command-list.h:164
 msgid "Push objects over Git protocol to another repository"
 msgstr "Puja objectes sobre el protocol Git a un altre repositori"
 
-#: command-list.h:164
+#: command-list.h:165
 msgid "Git's i18n setup code for shell scripts"
 msgstr ""
 "Codi de configuració i18n del Git per als scripts de l'intèrpret d'ordres"
 
-#: command-list.h:165
+#: command-list.h:166
 msgid "Common Git shell script setup code"
 msgstr "Codi de scripts de configuració comuns pel Git shell"
 
-#: command-list.h:166
+#: command-list.h:167
 msgid "Restricted login shell for Git-only SSH access"
 msgstr "Intèrpret d'ordres d'entrada restringit només per a accés SSH al Git"
 
-#: command-list.h:167
+#: command-list.h:168
 msgid "Summarize 'git log' output"
 msgstr "Resumeix la sortida «git log»"
 
-#: command-list.h:168
+#: command-list.h:169
 msgid "Show various types of objects"
 msgstr "Mostra diversos tipus d'objectes"
 
-#: command-list.h:169
+#: command-list.h:170
 msgid "Show branches and their commits"
 msgstr "Mostra les branques i les seves comissions"
 
-#: command-list.h:170
+#: command-list.h:171
 msgid "Show packed archive index"
 msgstr "Mostra l'índex d'arxius empaquetat"
 
-#: command-list.h:171
+#: command-list.h:172
 msgid "List references in a local repository"
 msgstr "Llista les referències en un repositori local"
 
-#: command-list.h:172
-msgid "Initialize and modify the sparse-checkout"
-msgstr "Inicialitza i modifica el «sparse-checkout»"
-
 #: command-list.h:173
+#, fuzzy
+msgid "Reduce your working tree to a subset of tracked files"
+msgstr "Redueix l'arbre de treball a un subconjunt de fitxers seguits"
+
+#: command-list.h:174
 msgid "Add file contents to the staging area"
 msgstr "Afegeix el contingut del fitxer a l'àrea de «staging»"
 
-#: command-list.h:174
+#: command-list.h:175
 msgid "Stash the changes in a dirty working directory away"
 msgstr "Fes «stash» dels canvis en un directori de treball brut"
 
-#: command-list.h:175
+#: command-list.h:176
 msgid "Show the working tree status"
 msgstr "Mostra l'estat de l'arbre de treball"
 
-#: command-list.h:176
+#: command-list.h:177
 msgid "Remove unnecessary whitespace"
 msgstr "Elimina l'espai en blanc innecessari"
 
-#: command-list.h:177
+#: command-list.h:178
 msgid "Initialize, update or inspect submodules"
 msgstr "Inicialitza, actualitza o inspecciona submòduls"
 
-#: command-list.h:178
+#: command-list.h:179
 msgid "Bidirectional operation between a Subversion repository and Git"
 msgstr "Operació bidireccional entre un repositori a Subversion i Git"
 
-#: command-list.h:179
+#: command-list.h:180
 msgid "Switch branches"
 msgstr "Commuta entre branques"
 
-#: command-list.h:180
+#: command-list.h:181
 msgid "Read, modify and delete symbolic refs"
 msgstr "Llegeix, modifica i suprimeix referències simbòliques"
 
-#: command-list.h:181
+#: command-list.h:182
 msgid "Create, list, delete or verify a tag object signed with GPG"
 msgstr ""
 "Crea, llista, suprimeix o verifica un objecte d'etiqueta signat amb GPG"
 
-#: command-list.h:182
+#: command-list.h:183
 msgid "Creates a temporary file with a blob's contents"
 msgstr "Crea un fitxer temporal amb els continguts dels blobs"
 
-#: command-list.h:183
+#: command-list.h:184
 msgid "Unpack objects from a packed archive"
 msgstr "Desempaqueta objectes d'un arxiu empaquetat"
 
-#: command-list.h:184
+#: command-list.h:185
 msgid "Register file contents in the working tree to the index"
 msgstr "Registra els continguts del fitxer en l'arbre de treball a l'índex"
 
-#: command-list.h:185
+#: command-list.h:186
 msgid "Update the object name stored in a ref safely"
 msgstr ""
 "Actualitza el nom de l'objecte emmagatzemat en una referència de forma "
 "segura"
 
-#: command-list.h:186
+#: command-list.h:187
 msgid "Update auxiliary info file to help dumb servers"
 msgstr ""
 "Actualitza el fitxer d'informació auxiliar per a ajudar als servidors "
 "ximples"
 
-#: command-list.h:187
+#: command-list.h:188
 msgid "Send archive back to git-archive"
 msgstr "Envia l'arxiu de tornada al git-archive"
 
-#: command-list.h:188
+#: command-list.h:189
 msgid "Send objects packed back to git-fetch-pack"
 msgstr "Envia els objectes empaquetats de tornada al git-fetch-pack"
 
-#: command-list.h:189
+#: command-list.h:190
 msgid "Show a Git logical variable"
 msgstr "Mostra una variable lògica del Git"
 
-#: command-list.h:190
+#: command-list.h:191
 msgid "Check the GPG signature of commits"
 msgstr "Verifica la signatura GPG de les comissions"
 
-#: command-list.h:191
+#: command-list.h:192
 msgid "Validate packed Git archive files"
 msgstr "Valida els fitxers d'arxius Git empaquetats"
 
-#: command-list.h:192
+#: command-list.h:193
 msgid "Check the GPG signature of tags"
 msgstr "Verifica la signatura GPG de les etiquetes"
 
-#: command-list.h:193
+#: command-list.h:194
 msgid "Show logs with difference each commit introduces"
 msgstr "Mostra registres amb la diferència introduïda per cada comissió"
 
-#: command-list.h:194
+#: command-list.h:195
 msgid "Manage multiple working trees"
 msgstr "Gestiona múltiples arbres de treball"
 
-#: command-list.h:195
+#: command-list.h:196
 msgid "Create a tree object from the current index"
 msgstr "Crea un objecte arbre des de l'índex actual"
 
-#: command-list.h:196
+#: command-list.h:197
 msgid "Defining attributes per path"
 msgstr "La definició d'atributs per camí"
 
-#: command-list.h:197
+#: command-list.h:198
 msgid "Git command-line interface and conventions"
 msgstr "Interfície i convencions de la línia d'ordres del Git"
 
-#: command-list.h:198
+#: command-list.h:199
 msgid "A Git core tutorial for developers"
 msgstr "Un tutorial bàsic del Git per a desenvolupadors"
 
-#: command-list.h:199
+#: command-list.h:200
 msgid "Providing usernames and passwords to Git"
 msgstr "Proporcionar noms d'usuari i contrasenyes a Git"
 
-#: command-list.h:200
+#: command-list.h:201
 msgid "Git for CVS users"
 msgstr "Git per a usuaris del CVS"
 
-#: command-list.h:201
+#: command-list.h:202
 msgid "Tweaking diff output"
 msgstr "Ajustament de la sortida de diferències"
 
-#: command-list.h:202
+#: command-list.h:203
 msgid "A useful minimum set of commands for Everyday Git"
 msgstr "Un conjunt mínim útil d'ordres diàries del Git"
 
-#: command-list.h:203
+#: command-list.h:204
 msgid "Frequently asked questions about using Git"
 msgstr "Preguntes freqüents sobre l'ús del Git"
 
-#: command-list.h:204
+#: command-list.h:205
 msgid "A Git Glossary"
 msgstr "Un glossari de Git"
 
-#: command-list.h:205
+#: command-list.h:206
 msgid "Hooks used by Git"
 msgstr "Lligams utilitzats pel Git"
 
-#: command-list.h:206
+#: command-list.h:207
 msgid "Specifies intentionally untracked files to ignore"
 msgstr "Especifica els fitxers intencionalment no seguits a ignorar"
 
-#: command-list.h:207
+#: command-list.h:208
 msgid "The Git repository browser"
 msgstr "El navegador de repositoris Git"
 
-#: command-list.h:208
+#: command-list.h:209
 msgid "Map author/committer names and/or E-Mail addresses"
 msgstr "Assigna noms d'autor i comitent i/o adreces de correu electrònic"
 
-#: command-list.h:209
+#: command-list.h:210
 msgid "Defining submodule properties"
 msgstr "La definició de les propietats de submòduls"
 
-#: command-list.h:210
+#: command-list.h:211
 msgid "Git namespaces"
 msgstr "Espais de noms del Git"
 
-#: command-list.h:211
+#: command-list.h:212
 msgid "Helper programs to interact with remote repositories"
 msgstr "Programes d'ajuda per a interactuar amb repositoris remots"
 
-#: command-list.h:212
+#: command-list.h:213
 msgid "Git Repository Layout"
 msgstr "Disposició del repositori del Git"
 
-#: command-list.h:213
+#: command-list.h:214
 msgid "Specifying revisions and ranges for Git"
 msgstr "L'especificació de revisions i rangs per al Git"
 
-#: command-list.h:214
+#: command-list.h:215
 msgid "Mounting one repository inside another"
 msgstr "Muntant un repositori dins un altre"
 
-#: command-list.h:215
+#: command-list.h:216
 msgid "A tutorial introduction to Git"
 msgstr "Un tutorial d'introducció al Git"
 
-#: command-list.h:216
+#: command-list.h:217
 msgid "A tutorial introduction to Git: part two"
 msgstr "Un tutorial d'introducció al Git: segona part"
 
-#: command-list.h:217
+#: command-list.h:218
 msgid "Git web interface (web frontend to Git repositories)"
 msgstr "Interfície web del Git (interfície web pels repositoris Git)"
 
-#: command-list.h:218
+#: command-list.h:219
 msgid "An overview of recommended workflows with Git"
 msgstr "Una visió de conjunt de fluxos de treball recomanats amb Git"
 
@@ -25805,8 +26414,8 @@ msgid ""
 "Error: Your local changes to the following files would be overwritten by "
 "merge"
 msgstr ""
-"Error: Els vostres canvis locals als fitxers següents se sobreescriurien per "
-"a fusionar"
+"Error: Els vostres canvis locals als fitxers següents se sobreescriurien per"
+" a fusionar"
 
 #: git-merge-octopus.sh:61
 msgid "Automated merge did not work."
@@ -25841,74 +26450,47 @@ msgid "Simple merge did not work, trying automatic merge."
 msgstr ""
 "La fusió simple no ha funcionat, s'està intentant una fusió automàtica."
 
-#: git-submodule.sh:401
-#, sh-format
-msgid "Unable to find current revision in submodule path '$displaypath'"
-msgstr ""
-"No s'ha pogut trobar la revisió actual en el camí de submòdul «$displaypath»"
-
-#: git-submodule.sh:411
-#, sh-format
-msgid "Unable to fetch in submodule path '$sm_path'"
-msgstr "No s'ha pogut obtenir en el camí de submòdul «$sm_path»"
-
-#: git-submodule.sh:416
-#, sh-format
-msgid ""
-"Unable to find current ${remote_name}/${branch} revision in submodule path "
-"'$sm_path'"
-msgstr ""
-"No s'ha pogut trobar la revisió actual de ${remote_name}/${branch} en el "
-"camí de submòdul «$sm_path»"
-
-#: git-submodule.sh:464
-#, sh-format
-msgid "Failed to recurse into submodule path '$displaypath'"
-msgstr ""
-"S'ha produït un error en recórrer recursivament dins del camí de submòdul "
-"«$displaypath»"
-
 #: git-sh-setup.sh:89 git-sh-setup.sh:94
 #, sh-format
 msgid "usage: $dashless $USAGE"
 msgstr "ús: $dashless $USAGE"
 
-#: git-sh-setup.sh:183
+#: git-sh-setup.sh:182
 #, sh-format
 msgid "Cannot chdir to $cdup, the toplevel of the working tree"
 msgstr ""
 "No es pot canviar de directori a $cdup, el nivell superior de l'arbre de "
 "treball"
 
-#: git-sh-setup.sh:192 git-sh-setup.sh:199
+#: git-sh-setup.sh:191 git-sh-setup.sh:198
 #, sh-format
 msgid "fatal: $program_name cannot be used without a working tree."
 msgstr "fatal: no es pot usar $program_name sense un arbre de treball."
 
-#: git-sh-setup.sh:213
+#: git-sh-setup.sh:212
 msgid "Cannot rewrite branches: You have unstaged changes."
 msgstr "No es poden reescriure branques: Teniu canvis «unstaged»."
 
-#: git-sh-setup.sh:216
+#: git-sh-setup.sh:215
 #, sh-format
 msgid "Cannot $action: You have unstaged changes."
 msgstr "No es pot $action: Teniu canvis «unstaged»."
 
-#: git-sh-setup.sh:227
+#: git-sh-setup.sh:226
 #, sh-format
 msgid "Cannot $action: Your index contains uncommitted changes."
 msgstr "No es pot $action: El vostre índex conté canvis sense cometre."
 
-#: git-sh-setup.sh:229
+#: git-sh-setup.sh:228
 msgid "Additionally, your index contains uncommitted changes."
 msgstr "Addicionalment, el vostre índex conté canvis sense cometre."
 
-#: git-sh-setup.sh:349
+#: git-sh-setup.sh:348
 msgid "You need to run this command from the toplevel of the working tree."
 msgstr ""
 "Heu d'executar aquesta ordre des del nivell superior de l'arbre de treball."
 
-#: git-sh-setup.sh:354
+#: git-sh-setup.sh:353
 msgid "Unable to determine absolute path of git directory"
 msgstr "No s'ha pogut determinar el camí absolut del directori de git"
 
@@ -26589,23 +27171,17 @@ msgstr "no es pot enviar el missatge en 7 bits"
 msgid "invalid transfer encoding"
 msgstr "codificació de transferència no vàlida"
 
-#: git-send-email.perl:2095
-#, perl-format
-msgid ""
-"fatal: %s: rejected by sendemail-validate hook\n"
-"%s\n"
-"warning: no patches were sent\n"
-msgstr ""
-"fatal: %s: rebutjat pel lligam sendemail-validate\n"
-"%s\n"
-"avís: no s'ha enviat cap pedaç\n"
+#: git-send-email.perl:2099
+#, perl-format, fuzzy
+msgid "fatal: %s: rejected by %s hook\n"
+msgstr "fatal: percentatges: rebutjats per cents fatal"
 
-#: git-send-email.perl:2105 git-send-email.perl:2158 git-send-email.perl:2168
+#: git-send-email.perl:2111 git-send-email.perl:2164 git-send-email.perl:2174
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "no s'ha pogut obrir %s: %s\n"
 
-#: git-send-email.perl:2108
+#: git-send-email.perl:2114
 #, perl-format
 msgid ""
 "fatal: %s:%d is longer than 998 characters\n"
@@ -26614,13 +27190,285 @@ msgstr ""
 "fatal: %s:%d té més de 998 caràcters\n"
 "avís: no s'ha enviat cap pedaç\n"
 
-#: git-send-email.perl:2126
+#: git-send-email.perl:2132
 #, perl-format
 msgid "Skipping %s with backup suffix '%s'.\n"
 msgstr "S'està ometent %s amb el sufix de còpia de seguretat «%s».\n"
 
 #. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:2130
+#: git-send-email.perl:2136
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "Esteu segur que voleu enviar %s? [y|N]: "
+
+#~ msgid "git archive --list"
+#~ msgstr "git archive --list"
+
+#, c-format
+#~ msgid "unknown value for --diff-merges: %s"
+#~ msgstr "valor desconegut per a --diff-merges: %s"
+
+#, c-format
+#~ msgid "invalid value '%s' for lsrefs.unborn"
+#~ msgstr "valor «%s» no vàlid per a «lsrefs.unborn»"
+
+#~ msgid "backend for `git stash -p`"
+#~ msgstr "rerefons per a «git stash -p»"
+
+#, c-format
+#~ msgid "Invalid value for --empty: %s"
+#~ msgstr "Valor no vàlid per a --empty: %s"
+
+#, c-format
+#~ msgid "Invalid value for --patch-format: %s"
+#~ msgstr "Valor no vàlid per a --patch-format: %s"
+
+#, c-format
+#~ msgid "Invalid value for --show-current-patch: %s"
+#~ msgstr "Valor no vàlid per --show-current-patch: %s"
+
+#~ msgid ""
+#~ "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | "
+#~ "--term-new]"
+#~ msgstr ""
+#~ "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | "
+#~ "--term-new]"
+
+#~ msgid "git bisect--helper --bisect-next"
+#~ msgstr "git bisect--helper --bisect-next"
+
+#~ msgid "git bisect--helper --bisect-visualize"
+#~ msgstr "git bisect--helper --bisect-visualize"
+
+#, c-format
+#~ msgid "invalid color '%s' in color.blame.repeatedLines"
+#~ msgstr "color «%s» no vàlid en «color.blame.repeatedLines»"
+
+#~ msgid "invalid value for blame.coloring"
+#~ msgstr "valor no vàlid per a «blame.coloring»"
+
+#~ msgid ""
+#~ "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | "
+#~ "-p | <type> | --textconv | --filters) [--path=<path>] <object>"
+#~ msgstr ""
+#~ "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | "
+#~ "-p | <tipus> | --textconv | --filters [--path=<camí>]) <objecte>"
+
+#~ msgid "show object type"
+#~ msgstr "mostra el tipus de l'objecte"
+
+#~ msgid "exit with zero when there's no error"
+#~ msgstr "surt amb zero quan no hi ha error"
+
+#~ msgid "show info and content of objects fed from the standard input"
+#~ msgstr ""
+#~ "mostra la informació i contingut dels objectes rebuts de l'entrada estàndard"
+
+#~ msgid "show info about objects fed from the standard input"
+#~ msgstr "mostra informació sobre els objectes rebuts de l'entrada estàndard"
+
+#~ msgid "follow in-tree symlinks (used with --batch or --batch-check)"
+#~ msgstr ""
+#~ "segueix els enllaços simbòlics en l'arbre (s'usa amb --batch o --batch-"
+#~ "check)"
+
+#~ msgid "show all objects with --batch or --batch-check"
+#~ msgstr "mostra tots els objectes amb --batch o --batch-check"
+
+#~ msgid "do not order --batch-all-objects output"
+#~ msgstr "no ordenar la sortida de --batch-all-objects"
+
+#~ msgid "set up tracking mode (see git-pull(1))"
+#~ msgstr "configura el mode de seguiment (vegeu git-pull(1))"
+
+#~ msgid "Using both --reset-author and --author does not make sense"
+#~ msgstr "Usar ambdós --reset-author i --author no té sentit"
+
+#~ msgid "Options --squash and --fixup cannot be used together"
+#~ msgstr "Les opcions --squash i --fixup no es poden usar juntes"
+
+#~ msgid "Only one of -c/-C/-F/--fixup can be used."
+#~ msgstr "Només un de -c/-C/-F/--fixup es pot usar."
+
+#~ msgid "Option -m cannot be combined with -c/-C/-F."
+#~ msgstr "l'opció -m no es pot combinar amb -c/-C/-F/."
+
+#~ msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
+#~ msgstr "Només un de --include/--only/--all/--interactive/--patch es pot usar."
+
+#~ msgid "git count-objects [-v] [-H | --human-readable]"
+#~ msgstr "git count-objects [-v] [-H | --human-readable]"
+
+#, c-format
+#~ msgid "configuration fetch.output contains invalid value %s"
+#~ msgstr "la configuració fetch.output conté un valor no vàlid %s"
+
+#~ msgid "--cached or --untracked cannot be used with --no-index"
+#~ msgstr "--cached o --untracked no es pot usar amb --no-index"
+
+#~ msgid "--untracked cannot be used with --cached"
+#~ msgstr "--untracked no es pot usar amb --cached"
+
+#~ msgid "git hash-object  --stdin-paths"
+#~ msgstr "git hash-object  --stdin-paths"
+
+#~ msgid "git help [-g|--guides]"
+#~ msgstr "git help [-g|--guides]"
+
+#~ msgid "git help [-c|--config]"
+#~ msgstr "git help [-c|--config]"
+
+#~ msgid "git mktag"
+#~ msgstr "git mktag"
+
+#~ msgid "git mktree [-z] [--missing] [--batch]"
+#~ msgstr "git mktree [-z] [--missing] [--batch]"
+
+#~ msgid "read from stdin"
+#~ msgstr "llegeix de stdin"
+
+#~ msgid "git notes merge --commit [-v | -q]"
+#~ msgstr "git notes merge --commit [-v | -q]"
+
+#~ msgid "git notes merge --abort [-v | -q]"
+#~ msgstr "git notes merge --abort [-v | -q]"
+
+#~ msgid "git notes get-ref"
+#~ msgstr "git notes get-ref"
+
+#~ msgid "invalid value for --missing"
+#~ msgstr "valor no vàlid per a --missing"
+
+#~ msgid "git prune-packed [-n | --dry-run] [-q | --quiet]"
+#~ msgstr "git prune-packed [-n | --dry-run] [-q | --quiet]"
+
+#, c-format
+#~ msgid "Invalid value for %s: %s"
+#~ msgstr "Valor no vàlid per a %s: %s"
+
+#, c-format
+#~ msgid "Invalid value for pull.ff: %s"
+#~ msgstr "Valor no vàlid per a pull.ff: %s"
+
+#~ msgid "git rebase --continue | --abort | --skip | --edit-todo"
+#~ msgstr "git rebase --continue | --abort | --skip | --edit-todo"
+
+#, c-format
+#~ msgid "'%s' is not a valid timestamp"
+#~ msgstr "«%s» no és una marca de temps vàlida"
+
+#~ msgid "git reflog [ show | expire | delete | exists ]"
+#~ msgstr "git reflog [ show | expire | delete | exists ]"
+
+#~ msgid "git remote [-v | --verbose]"
+#~ msgstr "git remote [-v | --verbose]"
+
+#~ msgid "git replace [-f] --convert-graft-file"
+#~ msgstr "git replace [-f] --convert-graft-file"
+
+#, c-format
+#~ msgid ""
+#~ "\n"
+#~ "It took %.2f seconds to enumerate unstaged changes after reset.  You can\n"
+#~ "use '--quiet' to avoid this.  Set the config setting reset.quiet to true\n"
+#~ "to make this the default.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "S'ha trigat %.2f segons a enumerar els canvis «unstaged» després del reinici.\n"
+#~ "Podeu utilitzar «--quiet» per a evitar-ho. Establiu el paràmetre de configuració\n"
+#~ "reset.quiet a true per a fer que aquesta configuració sigui predeterminada.\n"
+
+#~ msgid "git sparse-checkout list"
+#~ msgstr "git sparse-checkout list"
+
+#~ msgid "unable to upgrade repository format to enable worktreeConfig"
+#~ msgstr ""
+#~ "no s'ha pogut actualitzar el format del repositori per a habilitar "
+#~ "worktreeConfig"
+
+#~ msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
+#~ msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
+
+#~ msgid "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
+#~ msgstr "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
+
+#~ msgid "git sparse-checkout disable"
+#~ msgstr "git sparse-checkout disable"
+
+#~ msgid ""
+#~ "the stash.useBuiltin support has been removed!\n"
+#~ "See its entry in 'git help config' for details."
+#~ msgstr ""
+#~ "s'ha eliminat l'opció stash.useBuiltin.\n"
+#~ "Per a més detalls vegeu la seva entrada a «git help config»."
+
+#~ msgid "git stripspace [-s | --strip-comments]"
+#~ msgstr "git stripspace [-s | --strip-comments]"
+
+#~ msgid "git stripspace [-c | --comment-lines]"
+#~ msgstr "git stripspace [-c | --comment-lines]"
+
+#~ msgid "submodule--helper print-default-remote takes no arguments"
+#~ msgstr "submodule--helper print-default-remote no pren cap argument"
+
+#~ msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
+#~ msgstr "git submodule--helper update-clone [--prefix=<camí>] [<camí>...]"
+
+#~ msgid "suppress output for update by rebase or merge"
+#~ msgstr "omet la sortida per les actualitzacions per «rebase» o fusió"
+
+#~ msgid "overrides update mode in case the repository is a fresh clone"
+#~ msgstr ""
+#~ "sobreescriu el mode d'actualització en cas que el repositori sigui un clon "
+#~ "nou"
+
+#~ msgid "depth for shallow fetch"
+#~ msgstr "profunditat per a les obtencions superficials"
+
+#~ msgid "sha1"
+#~ msgstr "sha1"
+
+#~ msgid "SHA1 expected by superproject"
+#~ msgstr "SHA1 esperat per superproject"
+
+#~ msgid "subsha1"
+#~ msgstr "subsha1"
+
+#~ msgid "SHA1 of submodule's HEAD"
+#~ msgstr "SHA1 del HEAD del submòdul"
+
+#~ msgid "git submodule--helper run-update-procedure [<options>] <path>"
+#~ msgstr "git submodule--helper run-update-procedure [<options>] <path>"
+
+#~ msgid "git submodule--helper config --check-writeable"
+#~ msgstr "git submodule--helper config --check-writeable"
+
+#~ msgid "git update-server-info [--force]"
+#~ msgstr "git update-server-info [--force]"
+
+#~ msgid "Initialize and modify the sparse-checkout"
+#~ msgstr "Inicialitza i modifica el «sparse-checkout»"
+
+#, sh-format
+#~ msgid ""
+#~ "Unable to find current ${remote_name}/${branch} revision in submodule path "
+#~ "'$sm_path'"
+#~ msgstr ""
+#~ "No s'ha pogut trobar la revisió actual de ${remote_name}/${branch} en el "
+#~ "camí de submòdul «$sm_path»"
+
+#, sh-format
+#~ msgid "Failed to recurse into submodule path '$displaypath'"
+#~ msgstr ""
+#~ "S'ha produït un error en recórrer recursivament dins del camí de submòdul "
+#~ "«$displaypath»"
+
+#, perl-format
+#~ msgid ""
+#~ "fatal: %s: rejected by sendemail-validate hook\n"
+#~ "%s\n"
+#~ "warning: no patches were sent\n"
+#~ msgstr ""
+#~ "fatal: %s: rebutjat pel lligam sendemail-validate\n"
+#~ "%s\n"
+#~ "avís: no s'ha enviat cap pedaç\n"
index 19ffd9a5ad89f59372ef0bc6e6f5b74f2e9951df..ef04b54370a19065741c8e6d6bd3c154f24dede2 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2022-01-17 08:31+0800\n"
-"PO-Revision-Date: 2022-01-15 18:20+0100\n"
+"POT-Creation-Date: 2022-04-13 14:52+0800\n"
+"PO-Revision-Date: 2022-04-10 15:07+0200\n"
 "Last-Translator: Matthias Rüster <matthias.ruester@gmail.com>\n"
 "Language-Team: Matthias Rüster <matthias.ruester@gmail.com>\n"
 "Language: de\n"
@@ -17,215 +17,214 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n!=1);\n"
-"X-Generator: Poedit 3.0\n"
+"X-Generator: Poedit 3.0.1\n"
 
-#: add-interactive.c:380
+#: add-interactive.c:382
 #, c-format
 msgid "Huh (%s)?"
 msgstr "Wie bitte (%s)?"
 
-#: add-interactive.c:533 add-interactive.c:834 reset.c:65 sequencer.c:3509
-#: sequencer.c:3974 sequencer.c:4136 builtin/rebase.c:1233
-#: builtin/rebase.c:1642
+#: add-interactive.c:535 add-interactive.c:836 reset.c:136 sequencer.c:3505
+#: sequencer.c:3970 sequencer.c:4127 builtin/rebase.c:1261
+#: builtin/rebase.c:1671
 msgid "could not read index"
 msgstr "Index konnte nicht gelesen werden"
 
-#: add-interactive.c:588 git-add--interactive.perl:269
+#: add-interactive.c:590 git-add--interactive.perl:269
 #: git-add--interactive.perl:294
 msgid "binary"
 msgstr "Binär"
 
-#: add-interactive.c:646 git-add--interactive.perl:278
+#: add-interactive.c:648 git-add--interactive.perl:278
 #: git-add--interactive.perl:332
 msgid "nothing"
 msgstr "Nichts"
 
-#: add-interactive.c:647 git-add--interactive.perl:314
+#: add-interactive.c:649 git-add--interactive.perl:314
 #: git-add--interactive.perl:329
 msgid "unchanged"
 msgstr "unverändert"
 
-#: add-interactive.c:684 git-add--interactive.perl:641
+#: add-interactive.c:686 git-add--interactive.perl:641
 msgid "Update"
 msgstr "Aktualisieren"
 
-#: add-interactive.c:701 add-interactive.c:889
+#: add-interactive.c:703 add-interactive.c:891
 #, c-format
 msgid "could not stage '%s'"
 msgstr "Konnte '%s' nicht zum Commit vormerken."
 
-#: add-interactive.c:707 add-interactive.c:896 reset.c:89 sequencer.c:3713
+#: add-interactive.c:709 add-interactive.c:898 reset.c:160 sequencer.c:3709
 msgid "could not write index"
 msgstr "konnte Index nicht schreiben"
 
-#: add-interactive.c:710 git-add--interactive.perl:626
+#: add-interactive.c:712 git-add--interactive.perl:626
 #, c-format, perl-format
 msgid "updated %d path\n"
 msgid_plural "updated %d paths\n"
 msgstr[0] "%d Pfad aktualisiert\n"
 msgstr[1] "%d Pfade aktualisiert\n"
 
-#: add-interactive.c:728 git-add--interactive.perl:676
+#: add-interactive.c:730 git-add--interactive.perl:676
 #, c-format, perl-format
 msgid "note: %s is untracked now.\n"
 msgstr "Hinweis: %s ist nun unversioniert.\n"
 
-#: add-interactive.c:733 apply.c:4151 builtin/checkout.c:306
+#: add-interactive.c:735 apply.c:4133 builtin/checkout.c:311
 #: builtin/reset.c:167
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "make_cache_entry für Pfad '%s' fehlgeschlagen"
 
-#: add-interactive.c:763 git-add--interactive.perl:653
+#: add-interactive.c:765 git-add--interactive.perl:653
 msgid "Revert"
 msgstr "Revert"
 
-#: add-interactive.c:779
+#: add-interactive.c:781
 msgid "Could not parse HEAD^{tree}"
 msgstr "Konnte HEAD^{tree} nicht parsen."
 
-#: add-interactive.c:817 git-add--interactive.perl:629
+#: add-interactive.c:819 git-add--interactive.perl:629
 #, c-format, perl-format
 msgid "reverted %d path\n"
 msgid_plural "reverted %d paths\n"
 msgstr[0] "%d Pfad wiederhergestellt\n"
 msgstr[1] "%d Pfade wiederhergestellt\n"
 
-#: add-interactive.c:868 git-add--interactive.perl:693
+#: add-interactive.c:870 git-add--interactive.perl:693
 #, c-format
 msgid "No untracked files.\n"
 msgstr "Keine unversionierten Dateien.\n"
 
-#: add-interactive.c:872 git-add--interactive.perl:687
+#: add-interactive.c:874 git-add--interactive.perl:687
 msgid "Add untracked"
 msgstr "Unversionierte Dateien hinzufügen"
 
-#: add-interactive.c:899 git-add--interactive.perl:623
+#: add-interactive.c:901 git-add--interactive.perl:623
 #, c-format, perl-format
 msgid "added %d path\n"
 msgid_plural "added %d paths\n"
 msgstr[0] "%d Pfad hinzugefügt\n"
 msgstr[1] "%d Pfade hinzugefügt\n"
 
-#: add-interactive.c:929
+#: add-interactive.c:931
 #, c-format
 msgid "ignoring unmerged: %s"
 msgstr "Ignoriere nicht zusammengeführte Datei: %s"
 
-#: add-interactive.c:941 add-patch.c:1752 git-add--interactive.perl:1371
+#: add-interactive.c:943 add-patch.c:1758 git-add--interactive.perl:1371
 #, c-format
 msgid "Only binary files changed.\n"
 msgstr "Nur Binärdateien geändert.\n"
 
-#: add-interactive.c:943 add-patch.c:1750 git-add--interactive.perl:1373
+#: add-interactive.c:945 add-patch.c:1756 git-add--interactive.perl:1373
 #, c-format
 msgid "No changes.\n"
 msgstr "Keine Änderungen.\n"
 
-#: add-interactive.c:947 git-add--interactive.perl:1381
+#: add-interactive.c:949 git-add--interactive.perl:1381
 msgid "Patch update"
 msgstr "Patch Aktualisierung"
 
-#: add-interactive.c:986 git-add--interactive.perl:1794
+#: add-interactive.c:988 git-add--interactive.perl:1794
 msgid "Review diff"
 msgstr "Diff überprüfen"
 
-#: add-interactive.c:1014
+#: add-interactive.c:1016
 msgid "show paths with changes"
 msgstr "Zeige Pfade mit Änderungen"
 
-#: add-interactive.c:1016
+#: add-interactive.c:1018
 msgid "add working tree state to the staged set of changes"
 msgstr "Zustand des Arbeitsverzeichnisses zum Commit vormerken"
 
-#: add-interactive.c:1018
+#: add-interactive.c:1020
 msgid "revert staged set of changes back to the HEAD version"
 msgstr "Zum Commit vorgemerkte Änderungen auf HEAD-Version zurücksetzen"
 
-#: add-interactive.c:1020
+#: add-interactive.c:1022
 msgid "pick hunks and update selectively"
 msgstr "Blöcke und Änderung gezielt auswählen"
 
-#: add-interactive.c:1022
+#: add-interactive.c:1024
 msgid "view diff between HEAD and index"
 msgstr "Differenz zwischen HEAD und Index ansehen"
 
-#: add-interactive.c:1024
+#: add-interactive.c:1026
 msgid "add contents of untracked files to the staged set of changes"
 msgstr "Inhalte von unversionierten Dateien zum Commit vormerken"
 
-#: add-interactive.c:1032 add-interactive.c:1081
+#: add-interactive.c:1034 add-interactive.c:1083
 msgid "Prompt help:"
 msgstr "Hilfe für Eingaben:"
 
-#: add-interactive.c:1034
+#: add-interactive.c:1036
 msgid "select a single item"
 msgstr "Ein einzelnes Element auswählen"
 
-#: add-interactive.c:1036
+#: add-interactive.c:1038
 msgid "select a range of items"
 msgstr "Eine Reihe von Elementen auswählen"
 
-#: add-interactive.c:1038
+#: add-interactive.c:1040
 msgid "select multiple ranges"
 msgstr "Mehrere Reihen auswählen"
 
-#: add-interactive.c:1040 add-interactive.c:1085
+#: add-interactive.c:1042 add-interactive.c:1087
 msgid "select item based on unique prefix"
 msgstr "Element basierend auf eindeutigen Präfix auswählen"
 
-#: add-interactive.c:1042
+#: add-interactive.c:1044
 msgid "unselect specified items"
 msgstr "Angegebene Elemente abwählen"
 
-#: add-interactive.c:1044
+#: add-interactive.c:1046
 msgid "choose all items"
 msgstr "Alle Elemente auswählen"
 
-#: add-interactive.c:1046
+#: add-interactive.c:1048
 msgid "(empty) finish selecting"
 msgstr "(leer) Auswählen beenden"
 
-#: add-interactive.c:1083
+#: add-interactive.c:1085
 msgid "select a numbered item"
 msgstr "Ein nummeriertes Element auswählen"
 
-#: add-interactive.c:1087
+#: add-interactive.c:1089
 msgid "(empty) select nothing"
 msgstr "(leer) nichts auswählen"
 
-#: add-interactive.c:1095 builtin/clean.c:839 git-add--interactive.perl:1898
+#: add-interactive.c:1097 builtin/clean.c:839 git-add--interactive.perl:1898
 msgid "*** Commands ***"
 msgstr "*** Befehle ***"
 
-#: add-interactive.c:1096 builtin/clean.c:840 git-add--interactive.perl:1895
+#: add-interactive.c:1098 builtin/clean.c:840 git-add--interactive.perl:1895
 msgid "What now"
 msgstr "Was nun"
 
-#: add-interactive.c:1148 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "staged"
 msgstr "zur Staging-Area hinzugefügt"
 
-#: add-interactive.c:1148 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "unstaged"
 msgstr "aus Staging-Area entfernt"
 
-#: add-interactive.c:1148 apply.c:5020 apply.c:5023 builtin/am.c:2367
-#: builtin/am.c:2370 builtin/bugreport.c:107 builtin/clone.c:128
-#: builtin/fetch.c:153 builtin/merge.c:287 builtin/pull.c:194
-#: builtin/submodule--helper.c:404 builtin/submodule--helper.c:1858
-#: builtin/submodule--helper.c:1861 builtin/submodule--helper.c:2504
-#: builtin/submodule--helper.c:2507 builtin/submodule--helper.c:2574
-#: builtin/submodule--helper.c:2579 builtin/submodule--helper.c:2812
+#: add-interactive.c:1150 apply.c:5002 apply.c:5005 builtin/am.c:2370
+#: builtin/am.c:2373 builtin/bugreport.c:107 builtin/clone.c:132
+#: builtin/fetch.c:154 builtin/merge.c:287 builtin/pull.c:194
+#: builtin/submodule--helper.c:412 builtin/submodule--helper.c:1872
+#: builtin/submodule--helper.c:1875 builtin/submodule--helper.c:2709
+#: builtin/submodule--helper.c:2712 builtin/submodule--helper.c:2891
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "Pfad"
 
-#: add-interactive.c:1155
+#: add-interactive.c:1157
 msgid "could not refresh index"
 msgstr "Index konnte nicht aktualisiert werden"
 
-#: add-interactive.c:1169 builtin/clean.c:804 git-add--interactive.perl:1805
+#: add-interactive.c:1171 builtin/clean.c:804 git-add--interactive.perl:1805
 #, c-format
 msgid "Bye.\n"
 msgstr "Tschüss.\n"
@@ -554,24 +553,24 @@ msgstr "Konnte Block-Header '%.*s' nicht parsen."
 msgid "could not parse colored hunk header '%.*s'"
 msgstr "Konnte farbigen Block-Header '%.*s' nicht parsen."
 
-#: add-patch.c:420
+#: add-patch.c:431
 msgid "could not parse diff"
-msgstr "Konnte Differenz nicht parsen."
+msgstr "konnte Diff nicht parsen"
 
-#: add-patch.c:439
+#: add-patch.c:450
 msgid "could not parse colored diff"
-msgstr "Konnte farbige Differenz nicht parsen."
+msgstr "konnte farbigen Diff nicht parsen"
 
-#: add-patch.c:453
+#: add-patch.c:464
 #, c-format
 msgid "failed to run '%s'"
 msgstr "'%s' konnte nicht ausgeführt werden"
 
-#: add-patch.c:612
+#: add-patch.c:618
 msgid "mismatched output from interactive.diffFilter"
 msgstr "nicht übereinstimmende Ausgabe von interactive.diffFilter"
 
-#: add-patch.c:613
+#: add-patch.c:619
 msgid ""
 "Your filter must maintain a one-to-one correspondence\n"
 "between its input and output lines."
@@ -579,7 +578,7 @@ msgstr ""
 "Der Filter muss eine Eins-zu-Eins-Beziehung\n"
 "zwischen den Ein- und Ausgabe-Zeilen einhalten."
 
-#: add-patch.c:791
+#: add-patch.c:797
 #, c-format
 msgid ""
 "expected context line #%d in\n"
@@ -588,7 +587,7 @@ msgstr ""
 "Erwartete Kontextzeile #%d in\n"
 "%.*s"
 
-#: add-patch.c:806
+#: add-patch.c:812
 #, c-format
 msgid ""
 "hunks do not overlap:\n"
@@ -601,13 +600,13 @@ msgstr ""
 "\tendet nicht mit:\n"
 "%.*s"
 
-#: add-patch.c:1082 git-add--interactive.perl:1115
+#: add-patch.c:1088 git-add--interactive.perl:1115
 msgid "Manual hunk edit mode -- see bottom for a quick guide.\n"
 msgstr ""
 "Manueller Editiermodus für Patch-Blöcke -- siehe nach unten für eine\n"
 "Kurzanleitung.\n"
 
-#: add-patch.c:1086
+#: add-patch.c:1092
 #, c-format
 msgid ""
 "---\n"
@@ -621,7 +620,7 @@ msgstr ""
 "Zeilen, die mit %c beginnen, werden entfernt.\n"
 
 #. TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
-#: add-patch.c:1100 git-add--interactive.perl:1129
+#: add-patch.c:1106 git-add--interactive.perl:1129
 msgid ""
 "If it does not apply cleanly, you will be given an opportunity to\n"
 "edit again.  If all lines of the hunk are removed, then the edit is\n"
@@ -632,13 +631,13 @@ msgstr ""
 "werden,\n"
 "wird die Bearbeitung abgebrochen und der Patch-Block bleibt unverändert.\n"
 
-#: add-patch.c:1133
+#: add-patch.c:1139
 msgid "could not parse hunk header"
-msgstr "Konnte Block-Header nicht parsen."
+msgstr "konnte Block-Header nicht parsen"
 
-#: add-patch.c:1178
+#: add-patch.c:1184
 msgid "'git apply --cached' failed"
-msgstr "'git apply --cached' schlug fehl."
+msgstr "'git apply --cached' schlug fehl"
 
 #. TRANSLATORS: do not translate [y/n]
 #. The program will only accept that input at this point.
@@ -652,27 +651,27 @@ msgstr "'git apply --cached' schlug fehl."
 #. Consider translating (saying "no" discards!) as
 #. (saying "n" for "no" discards!) if the translation
 #. of the word "no" does not start with n.
-#: add-patch.c:1247 git-add--interactive.perl:1244
+#: add-patch.c:1253 git-add--interactive.perl:1244
 msgid ""
 "Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? "
 msgstr ""
 "Ihr bearbeiteter Patch-Block kann nicht angewendet werden.\n"
 "Erneut bearbeiten? (\"n\" verwirft Bearbeitung!) [y/n]?"
 
-#: add-patch.c:1290
+#: add-patch.c:1296
 msgid "The selected hunks do not apply to the index!"
 msgstr ""
 "Die ausgewählten Patch-Blöcke können nicht auf den Index angewendet werden!"
 
-#: add-patch.c:1291 git-add--interactive.perl:1348
+#: add-patch.c:1297 git-add--interactive.perl:1348
 msgid "Apply them to the worktree anyway? "
 msgstr "Trotzdem auf Arbeitsverzeichnis anwenden? "
 
-#: add-patch.c:1298 git-add--interactive.perl:1351
+#: add-patch.c:1304 git-add--interactive.perl:1351
 msgid "Nothing was applied.\n"
 msgstr "Nichts angewendet.\n"
 
-#: add-patch.c:1355
+#: add-patch.c:1361
 msgid ""
 "j - leave this hunk undecided, see next undecided hunk\n"
 "J - leave this hunk undecided, see next hunk\n"
@@ -696,73 +695,73 @@ msgstr ""
 "e - aktuellen Patch-Block manuell editieren\n"
 "? - Hilfe anzeigen\n"
 
-#: add-patch.c:1517 add-patch.c:1527
+#: add-patch.c:1523 add-patch.c:1533
 msgid "No previous hunk"
 msgstr "Kein vorheriger Patch-Block"
 
-#: add-patch.c:1522 add-patch.c:1532
+#: add-patch.c:1528 add-patch.c:1538
 msgid "No next hunk"
 msgstr "Kein folgender Patch-Block"
 
-#: add-patch.c:1538
+#: add-patch.c:1544
 msgid "No other hunks to goto"
 msgstr "Keine anderen Patch-Blöcke verbleibend"
 
-#: add-patch.c:1549 git-add--interactive.perl:1608
+#: add-patch.c:1555 git-add--interactive.perl:1608
 msgid "go to which hunk (<ret> to see more)? "
 msgstr "zu welchem Patch-Block springen (<Enter> für mehr Informationen)? "
 
-#: add-patch.c:1550 git-add--interactive.perl:1610
+#: add-patch.c:1556 git-add--interactive.perl:1610
 msgid "go to which hunk? "
 msgstr "zu welchem Patch-Block springen? "
 
-#: add-patch.c:1561
+#: add-patch.c:1567
 #, c-format
 msgid "Invalid number: '%s'"
 msgstr "Ungültige Nummer: '%s'"
 
-#: add-patch.c:1566
+#: add-patch.c:1572
 #, c-format
 msgid "Sorry, only %d hunk available."
 msgid_plural "Sorry, only %d hunks available."
 msgstr[0] "Entschuldigung, nur %d Patch-Block verfügbar."
 msgstr[1] "Entschuldigung, nur %d Patch-Blöcke verfügbar."
 
-#: add-patch.c:1575
+#: add-patch.c:1581
 msgid "No other hunks to search"
 msgstr "Keine anderen Patch-Blöcke zum Durchsuchen"
 
-#: add-patch.c:1581 git-add--interactive.perl:1663
+#: add-patch.c:1587 git-add--interactive.perl:1663
 msgid "search for regex? "
 msgstr "Suche nach regulärem Ausdruck? "
 
-#: add-patch.c:1596
+#: add-patch.c:1602
 #, c-format
 msgid "Malformed search regexp %s: %s"
 msgstr "Fehlerhafter regulärer Ausdruck für Suche %s: %s"
 
-#: add-patch.c:1613
+#: add-patch.c:1619
 msgid "No hunk matches the given pattern"
 msgstr "Kein Patch-Block entspricht dem angegebenen Muster"
 
-#: add-patch.c:1620
+#: add-patch.c:1626
 msgid "Sorry, cannot split this hunk"
 msgstr "Entschuldigung, kann diesen Patch-Block nicht aufteilen"
 
-#: add-patch.c:1624
+#: add-patch.c:1630
 #, c-format
 msgid "Split into %d hunks."
 msgstr "In %d Patch-Block aufgeteilt."
 
-#: add-patch.c:1628
+#: add-patch.c:1634
 msgid "Sorry, cannot edit this hunk"
 msgstr "Entschuldigung, kann diesen Patch-Block nicht bearbeiten"
 
-#: add-patch.c:1680
+#: add-patch.c:1686
 msgid "'git apply' failed"
 msgstr "'git apply' schlug fehl"
 
-#: advice.c:78
+#: advice.c:81
 #, c-format
 msgid ""
 "\n"
@@ -771,43 +770,43 @@ msgstr ""
 "\n"
 "Deaktivieren Sie diese Nachricht mit \"git config advice.%s false\""
 
-#: advice.c:94
+#: advice.c:97
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%sHinweis: %.*s%s\n"
 
-#: advice.c:178
+#: advice.c:181
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr ""
 "Cherry-Picken ist nicht möglich, weil Sie nicht zusammengeführte Dateien "
 "haben."
 
-#: advice.c:180
+#: advice.c:183
 msgid "Committing is not possible because you have unmerged files."
 msgstr ""
 "Committen ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
 
-#: advice.c:182
+#: advice.c:185
 msgid "Merging is not possible because you have unmerged files."
 msgstr ""
 "Mergen ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
 
-#: advice.c:184
+#: advice.c:187
 msgid "Pulling is not possible because you have unmerged files."
 msgstr ""
 "Pullen ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
 
-#: advice.c:186
+#: advice.c:189
 msgid "Reverting is not possible because you have unmerged files."
 msgstr ""
 "Reverten ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
 
-#: advice.c:188
+#: advice.c:191
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr "%s ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben."
 
-#: advice.c:196
+#: advice.c:199
 msgid ""
 "Fix them up in the work tree, and then use 'git add/rm <file>'\n"
 "as appropriate to mark resolution and make a commit."
@@ -816,27 +815,27 @@ msgstr ""
 "dann 'git add/rm <Datei>', um die Auflösung entsprechend zu markieren\n"
 "und zu committen."
 
-#: advice.c:204
+#: advice.c:207
 msgid "Exiting because of an unresolved conflict."
 msgstr "Beende wegen unaufgelöstem Konflikt."
 
-#: advice.c:209 builtin/merge.c:1382
+#: advice.c:212 builtin/merge.c:1388
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Sie haben Ihren Merge nicht abgeschlossen (MERGE_HEAD existiert)."
 
-#: advice.c:211
+#: advice.c:214
 msgid "Please, commit your changes before merging."
 msgstr "Bitte committen Sie Ihre Änderungen, bevor Sie mergen."
 
-#: advice.c:212
+#: advice.c:215
 msgid "Exiting because of unfinished merge."
 msgstr "Beende wegen nicht abgeschlossenem Merge."
 
-#: advice.c:217
+#: advice.c:220
 msgid "Not possible to fast-forward, aborting."
 msgstr "Vorspulen nicht möglich, breche ab."
 
-#: advice.c:227
+#: advice.c:230
 #, c-format
 msgid ""
 "The following paths and/or pathspecs matched paths that exist\n"
@@ -847,7 +846,7 @@ msgstr ""
 "der außerhalb Ihrer partiellen Checkout-Definition existierte, weshalb\n"
 "diese nicht im Index aktualisiert werden:\n"
 
-#: advice.c:234
+#: advice.c:237
 msgid ""
 "If you intend to update such entries, try one of the following:\n"
 "* Use the --sparse option.\n"
@@ -858,7 +857,7 @@ msgstr ""
 "* Verwenden Sie die Option --sparse.\n"
 "* Deaktivieren oder ändern Sie die Regeln für partielle Checkouts."
 
-#: advice.c:242
+#: advice.c:245
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -907,7 +906,7 @@ msgstr "Befehlszeile endet mit \\"
 
 #: alias.c:51
 msgid "unclosed quote"
-msgstr "Nicht geschlossene Anführungszeichen."
+msgstr "nicht geschlossene Anführungszeichen"
 
 #: apply.c:70
 #, c-format
@@ -919,84 +918,87 @@ msgstr "Nicht erkannte Whitespace-Option: '%s'"
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "nicht erkannte Option zum Ignorieren von Whitespace: '%s'"
 
-#: apply.c:136 archive.c:584 range-diff.c:559 revision.c:2303 revision.c:2307
-#: revision.c:2316 revision.c:2321 revision.c:2527 revision.c:2870
-#: revision.c:2874 revision.c:2880 revision.c:2883 revision.c:2885
-#: builtin/add.c:510 builtin/add.c:512 builtin/add.c:529 builtin/add.c:541
-#: builtin/branch.c:727 builtin/checkout.c:467 builtin/checkout.c:470
-#: builtin/checkout.c:1644 builtin/checkout.c:1754 builtin/checkout.c:1757
-#: builtin/clone.c:906 builtin/commit.c:358 builtin/commit.c:361
-#: builtin/commit.c:1196 builtin/describe.c:593 builtin/diff-tree.c:155
-#: builtin/difftool.c:733 builtin/fast-export.c:1245 builtin/fetch.c:2038
-#: builtin/fetch.c:2043 builtin/index-pack.c:1852 builtin/init-db.c:560
-#: builtin/log.c:1946 builtin/log.c:1948 builtin/ls-files.c:778
-#: builtin/merge.c:1403 builtin/merge.c:1405 builtin/pack-objects.c:4073
-#: builtin/push.c:592 builtin/push.c:630 builtin/push.c:636 builtin/push.c:641
-#: builtin/rebase.c:1193 builtin/rebase.c:1195 builtin/rebase.c:1199
-#: builtin/repack.c:684 builtin/repack.c:715 builtin/reset.c:426
-#: builtin/reset.c:462 builtin/rev-list.c:541 builtin/show-branch.c:710
-#: builtin/stash.c:1707 builtin/stash.c:1710 builtin/submodule--helper.c:1316
-#: builtin/submodule--helper.c:2975 builtin/tag.c:526 builtin/tag.c:572
-#: builtin/worktree.c:702
+#: apply.c:138 archive.c:584 parse-options.c:1122 range-diff.c:555
+#: revision.c:2314 revision.c:2318 revision.c:2327 revision.c:2332
+#: revision.c:2560 revision.c:2895 revision.c:2899 revision.c:2907
+#: revision.c:2910 revision.c:2912 builtin/add.c:507 builtin/add.c:509
+#: builtin/add.c:515 builtin/add.c:527 builtin/branch.c:755
+#: builtin/checkout.c:472 builtin/checkout.c:475 builtin/checkout.c:1663
+#: builtin/checkout.c:1773 builtin/checkout.c:1776 builtin/clone.c:921
+#: builtin/commit.c:359 builtin/commit.c:362 builtin/commit.c:1200
+#: builtin/commit.c:1256 builtin/commit.c:1273 builtin/describe.c:593
+#: builtin/diff-tree.c:155 builtin/difftool.c:733 builtin/fast-export.c:1245
+#: builtin/fetch.c:2141 builtin/fetch.c:2162 builtin/fetch.c:2167
+#: builtin/help.c:602 builtin/index-pack.c:1858 builtin/init-db.c:560
+#: builtin/log.c:1968 builtin/log.c:1970 builtin/ls-files.c:778
+#: builtin/merge-base.c:163 builtin/merge-base.c:169 builtin/merge.c:1409
+#: builtin/merge.c:1411 builtin/pack-objects.c:4098 builtin/push.c:592
+#: builtin/push.c:630 builtin/push.c:636 builtin/push.c:641
+#: builtin/rebase.c:1221 builtin/rebase.c:1223 builtin/rebase.c:1227
+#: builtin/repack.c:688 builtin/repack.c:719 builtin/reset.c:433
+#: builtin/reset.c:469 builtin/rev-list.c:537 builtin/show-branch.c:711
+#: builtin/stash.c:1696 builtin/stash.c:1699 builtin/submodule--helper.c:1328
+#: builtin/submodule--helper.c:3054 builtin/tag.c:527 builtin/tag.c:573
+#: builtin/worktree.c:779
 #, c-format
 msgid "options '%s' and '%s' cannot be used together"
 msgstr "die Optionen '%s' und '%s' können nicht gemeinsam verwendet werden"
 
-#: apply.c:139 apply.c:150 apply.c:153
+#: apply.c:141 apply.c:152 apply.c:155
 #, c-format
 msgid "'%s' outside a repository"
 msgstr "'%s' außerhalb eines Repositories"
 
-#: apply.c:800
+#: apply.c:807
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr "Kann regulären Ausdruck für Zeitstempel %s nicht verarbeiten"
 
-#: apply.c:809
+#: apply.c:816
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr "Ausführung des regulären Ausdrucks gab %d zurück. Eingabe: %s"
 
-#: apply.c:883
+#: apply.c:890
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr "konnte keinen Dateinamen in Zeile %d des Patches finden"
 
-#: apply.c:921
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr ""
 "git apply: ungültiges 'git-diff' - erwartete /dev/null, erhielt %s in Zeile "
 "%d"
 
-#: apply.c:927
+#: apply.c:934
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr ""
 "git apply: ungültiges 'git-diff' - Inkonsistenter neuer Dateiname in Zeile %d"
 
-#: apply.c:928
+#: apply.c:935
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr ""
 "git apply: ungültiges 'git-diff' - Inkonsistenter alter Dateiname in Zeile %d"
 
-#: apply.c:933
+#: apply.c:940
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr "git apply: ungültiges 'git-diff' - erwartete /dev/null in Zeile %d"
 
-#: apply.c:962
+#: apply.c:969
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "Ungültiger Modus in Zeile %d: %s"
 
-#: apply.c:1281
+#: apply.c:1288
 #, c-format
 msgid "inconsistent header lines %d and %d"
-msgstr "Inkonsistente Kopfzeilen %d und %d."
+msgstr "inkonsistente Kopfzeilen %d und %d"
 
-#: apply.c:1371
+#: apply.c:1378
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -1011,82 +1013,82 @@ msgstr[1] ""
 "Dem Kopfbereich von \"git diff\" fehlen Informationen zum Dateinamen, wenn "
 "%d vorangestellte Teile des Pfades entfernt werden (Zeile %d)"
 
-#: apply.c:1384
+#: apply.c:1391
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr ""
 "Dem Kopfbereich von \"git diff\" fehlen Informationen zum Dateinamen (Zeile "
 "%d)"
 
-#: apply.c:1480
+#: apply.c:1487
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr "recount: unerwartete Zeile: %.*s"
 
-#: apply.c:1549
+#: apply.c:1556
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr "Patch-Fragment ohne Kopfbereich bei Zeile %d: %.*s"
 
-#: apply.c:1752
+#: apply.c:1759
 msgid "new file depends on old contents"
 msgstr "neue Datei hängt von alten Inhalten ab"
 
-#: apply.c:1754
+#: apply.c:1761
 msgid "deleted file still has contents"
 msgstr "entfernte Datei hat noch Inhalte"
 
-#: apply.c:1788
+#: apply.c:1795
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "fehlerhafter Patch bei Zeile %d"
 
-#: apply.c:1825
+#: apply.c:1832
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "neue Datei %s hängt von alten Inhalten ab"
 
-#: apply.c:1827
+#: apply.c:1834
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "entfernte Datei %s hat noch Inhalte"
 
-#: apply.c:1830
+#: apply.c:1837
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
-msgstr "** Warnung: Datei %s wird leer, aber nicht entfernt."
+msgstr "** Warnung: Datei %s wird leer, aber ist nicht entfernt"
 
-#: apply.c:1978
+#: apply.c:1985
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "fehlerhafter Binär-Patch bei Zeile %d: %.*s"
 
-#: apply.c:2015
+#: apply.c:2022
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "nicht erkannter Binär-Patch bei Zeile %d"
 
-#: apply.c:2177
+#: apply.c:2184
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "Patch mit nutzlosen Informationen bei Zeile %d"
 
-#: apply.c:2263
+#: apply.c:2270
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "konnte symbolische Verknüpfung %s nicht lesen"
 
-#: apply.c:2267
+#: apply.c:2274
 #, c-format
 msgid "unable to open or read %s"
 msgstr "konnte %s nicht öffnen oder lesen"
 
-#: apply.c:2936
+#: apply.c:2943
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "Ungültiger Zeilenanfang: '%c'"
 
-#: apply.c:3057
+#: apply.c:3064
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
@@ -1094,12 +1096,12 @@ msgstr[0] "Patch-Bereich #%d erfolgreich angewendet bei %d (%d Zeile versetzt)"
 msgstr[1] ""
 "Patch-Bereich #%d erfolgreich angewendet bei %d (%d Zeilen versetzt)"
 
-#: apply.c:3069
+#: apply.c:3076
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "Kontext reduziert zu (%ld/%ld), um Patch-Bereich bei %d anzuwenden"
 
-#: apply.c:3075
+#: apply.c:3082
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1108,467 +1110,467 @@ msgstr ""
 "bei der Suche nach:\n"
 "%.*s"
 
-#: apply.c:3097
+#: apply.c:3104
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "keine Daten in Binär-Patch für '%s'"
 
-#: apply.c:3105
+#: apply.c:3112
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr ""
 "kann binären Patch nicht in umgekehrter Reihenfolge anwenden ohne einen\n"
 "umgekehrten Patch-Block auf '%s'"
 
-#: apply.c:3152
+#: apply.c:3159
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr ""
 "kann binären Patch auf '%s' nicht ohne eine vollständige Index-Zeile anwenden"
 
-#: apply.c:3163
+#: apply.c:3170
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr ""
 "der Patch wird angewendet auf '%s' (%s), was nicht den aktuellen Inhalten\n"
-"entspricht"
+"entspricht."
 
-#: apply.c:3171
+#: apply.c:3178
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "der Patch wird auf ein leeres '%s' angewendet, was aber nicht leer ist"
 
-#: apply.c:3189
+#: apply.c:3196
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "das erforderliche Postimage %s für '%s' kann nicht gelesen werden"
 
-#: apply.c:3202
+#: apply.c:3209
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "Konnte Binär-Patch nicht auf '%s' anwenden"
 
-#: apply.c:3209
+#: apply.c:3216
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 "Binär-Patch für '%s' erzeugt falsches Ergebnis (erwartete %s, bekam %s)"
 
-#: apply.c:3230
+#: apply.c:3237
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "Anwendung des Patches fehlgeschlagen: %s:%ld"
 
-#: apply.c:3353
+#: apply.c:3360
 #, c-format
 msgid "cannot checkout %s"
 msgstr "kann %s nicht auschecken"
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:104 pack-revindex.c:214
-#: setup.c:309
+#: apply.c:3412 apply.c:3423 apply.c:3469 midx.c:105 pack-revindex.c:214
+#: setup.c:310
 #, c-format
 msgid "failed to read %s"
 msgstr "Fehler beim Lesen von %s"
 
-#: apply.c:3413
+#: apply.c:3420
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "'%s' ist hinter einer symbolischen Verknüpfung"
 
-#: apply.c:3442 apply.c:3711
+#: apply.c:3449 apply.c:3721
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "Pfad %s wurde umbenannt/gelöscht"
 
-#: apply.c:3549 apply.c:3726
+#: apply.c:3559 apply.c:3736
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s ist nicht im Index"
 
-#: apply.c:3558 apply.c:3734 apply.c:3978
+#: apply.c:3568 apply.c:3744 apply.c:3960
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s entspricht nicht der Version im Index"
 
-#: apply.c:3595
+#: apply.c:3605
 msgid "repository lacks the necessary blob to perform 3-way merge."
 msgstr ""
 "Dem Repository fehlt der notwendige Blob, um einen 3-Wege-Merge "
 "durchzuführen."
 
-#: apply.c:3598
+#: apply.c:3608
 #, c-format
 msgid "Performing three-way merge...\n"
 msgstr "Führe 3-Wege-Merge durch...\n"
 
-#: apply.c:3614 apply.c:3618
+#: apply.c:3624 apply.c:3628
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "kann aktuelle Inhalte von '%s' nicht lesen"
 
-#: apply.c:3630
+#: apply.c:3640
 #, c-format
 msgid "Failed to perform three-way merge...\n"
 msgstr "Fehler beim Durchführen des 3-Wege-Merges...\n"
 
-#: apply.c:3644
+#: apply.c:3654
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Patch auf '%s' mit Konflikten angewendet.\n"
 
-#: apply.c:3649
+#: apply.c:3659
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Patch auf '%s' sauber angewendet.\n"
 
-#: apply.c:3666
+#: apply.c:3676
 #, c-format
 msgid "Falling back to direct application...\n"
 msgstr "Ausweichen auf direkte Anwendung...\n"
 
-#: apply.c:3678
+#: apply.c:3688
 msgid "removal patch leaves file contents"
 msgstr "Lösch-Patch hinterlässt Dateiinhalte"
 
-#: apply.c:3751
+#: apply.c:3761
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s: falscher Typ"
 
-#: apply.c:3753
+#: apply.c:3763
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s ist vom Typ %o, erwartete %o"
 
-#: apply.c:3918 apply.c:3920 read-cache.c:889 read-cache.c:918
-#: read-cache.c:1381
+#: apply.c:3900 apply.c:3902 read-cache.c:903 read-cache.c:932
+#: read-cache.c:1399
 #, c-format
 msgid "invalid path '%s'"
 msgstr "Ungültiger Pfad '%s'"
 
-#: apply.c:3976
+#: apply.c:3958
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s ist bereits bereitgestellt"
 
-#: apply.c:3980
+#: apply.c:3962
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s existiert bereits im Arbeitsverzeichnis"
 
-#: apply.c:4000
+#: apply.c:3982
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "neuer Modus (%o) von %s entspricht nicht dem alten Modus (%o)"
 
-#: apply.c:4005
+#: apply.c:3987
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "neuer Modus (%o) von %s entspricht nicht dem alten Modus (%o) von %s"
 
-#: apply.c:4025
+#: apply.c:4007
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "betroffene Datei '%s' ist hinter einer symbolischen Verknüpfung"
 
-#: apply.c:4029
+#: apply.c:4011
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s: Patch konnte nicht angewendet werden"
 
-#: apply.c:4044
+#: apply.c:4026
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Prüfe Patch %s..."
 
-#: apply.c:4136
+#: apply.c:4118
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "SHA-1 Information fehlt oder ist unbrauchbar für Submodul %s"
 
-#: apply.c:4143
+#: apply.c:4125
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "Modusänderung für %s, was sich nicht im aktuellen HEAD befindet"
 
-#: apply.c:4146
+#: apply.c:4128
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "SHA-1 Information fehlt oder ist unbrauchbar (%s)."
 
-#: apply.c:4155
+#: apply.c:4137
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "konnte %s nicht zum temporären Index hinzufügen"
 
-#: apply.c:4165
+#: apply.c:4147
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "konnte temporären Index nicht nach %s schreiben"
 
-#: apply.c:4303
+#: apply.c:4285
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "konnte %s nicht aus dem Index entfernen"
 
-#: apply.c:4337
+#: apply.c:4319
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "fehlerhafter Patch für Submodul %s"
 
-#: apply.c:4343
+#: apply.c:4325
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "konnte neu erstellte Datei '%s' nicht lesen"
 
-#: apply.c:4351
+#: apply.c:4333
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr "kann internen Speicher für eben erstellte Datei %s nicht erzeugen"
 
-#: apply.c:4357 apply.c:4502
+#: apply.c:4339 apply.c:4484
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "kann für %s keinen Eintrag in den Zwischenspeicher hinzufügen"
 
-#: apply.c:4400 builtin/bisect--helper.c:540 builtin/gc.c:2258
+#: apply.c:4382 builtin/bisect--helper.c:540 builtin/gc.c:2258
 #: builtin/gc.c:2293
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "Fehler beim Schreiben nach '%s'"
 
-#: apply.c:4404
+#: apply.c:4386
 #, c-format
 msgid "closing file '%s'"
 msgstr "schließe Datei '%s'"
 
-#: apply.c:4474
+#: apply.c:4456
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "konnte Datei '%s' mit Modus %o nicht schreiben"
 
-#: apply.c:4572
+#: apply.c:4554
 #, c-format
 msgid "Applied patch %s cleanly."
-msgstr "Patch %s sauber angewendet"
+msgstr "Patch %s sauber angewendet."
 
-#: apply.c:4580
+#: apply.c:4562
 msgid "internal error"
 msgstr "interner Fehler"
 
-#: apply.c:4583
+#: apply.c:4565
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "Wende Patch %%s mit %d Zurückweisung an..."
 msgstr[1] "Wende Patch %%s mit %d Zurückweisungen an..."
 
-#: apply.c:4594
+#: apply.c:4576
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "Verkürze Name von .rej Datei zu %.*s.rej"
 
-#: apply.c:4602
+#: apply.c:4584
 #, c-format
 msgid "cannot open %s"
 msgstr "kann '%s' nicht öffnen"
 
-#: apply.c:4616
+#: apply.c:4598
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "Patch-Bereich #%d sauber angewendet."
 
-#: apply.c:4620
+#: apply.c:4602
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "Patch-Block #%d zurückgewiesen."
 
-#: apply.c:4749
+#: apply.c:4731
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Patch '%s' ausgelassen."
 
-#: apply.c:4758
+#: apply.c:4740
 msgid "No valid patches in input (allow with \"--allow-empty\")"
 msgstr "Keine gültigen Patches in der Eingabe (erlauben mit \"--allow-empty\")"
 
-#: apply.c:4779
+#: apply.c:4761
 msgid "unable to read index file"
 msgstr "Konnte Index-Datei nicht lesen"
 
-#: apply.c:4936
+#: apply.c:4918
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "kann Patch '%s' nicht öffnen: %s"
 
-#: apply.c:4963
+#: apply.c:4945
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "unterdrückte %d Whitespace-Fehler"
 msgstr[1] "unterdrückte %d Whitespace-Fehler"
 
-#: apply.c:4969 apply.c:4984
+#: apply.c:4951 apply.c:4966
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d Zeile fügt Whitespace-Fehler hinzu."
 msgstr[1] "%d Zeilen fügen Whitespace-Fehler hinzu."
 
-#: apply.c:4977
+#: apply.c:4959
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] "%d Zeile nach Behebung von Whitespace-Fehlern angewendet."
 msgstr[1] "%d Zeilen nach Behebung von Whitespace-Fehlern angewendet."
 
-#: apply.c:4993 builtin/add.c:704 builtin/mv.c:338 builtin/rm.c:430
+#: apply.c:4975 builtin/add.c:690 builtin/mv.c:338 builtin/rm.c:430
 msgid "Unable to write new index file"
-msgstr "Konnte neue Index-Datei nicht schreiben."
+msgstr "Konnte neue Index-Datei nicht schreiben"
 
-#: apply.c:5021
+#: apply.c:5003
 msgid "don't apply changes matching the given path"
 msgstr "keine Änderungen im angegebenen Pfad anwenden"
 
-#: apply.c:5024
+#: apply.c:5006
 msgid "apply changes matching the given path"
 msgstr "Änderungen nur im angegebenen Pfad anwenden"
 
-#: apply.c:5026 builtin/am.c:2376
+#: apply.c:5008 builtin/am.c:2379
 msgid "num"
 msgstr "Anzahl"
 
-#: apply.c:5027
+#: apply.c:5009
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr ""
 "<Anzahl> vorangestellte Schrägstriche von herkömmlichen Differenzpfaden "
 "entfernen"
 
-#: apply.c:5030
+#: apply.c:5012
 msgid "ignore additions made by the patch"
 msgstr "hinzugefügte Zeilen des Patches ignorieren"
 
-#: apply.c:5032
+#: apply.c:5014
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr ""
 "statt den Patch anzuwenden, den \"diffstat\" für die Eingabe ausgegeben"
 
-#: apply.c:5036
+#: apply.c:5018
 msgid "show number of added and deleted lines in decimal notation"
 msgstr ""
 "die Anzahl von hinzugefügten/entfernten Zeilen in Dezimalnotation anzeigen"
 
-#: apply.c:5038
+#: apply.c:5020
 msgid "instead of applying the patch, output a summary for the input"
 msgstr ""
 "statt den Patch anzuwenden, eine Zusammenfassung für die Eingabe ausgeben"
 
-#: apply.c:5040
+#: apply.c:5022
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr ""
 "statt den Patch anzuwenden, anzeigen ob der Patch angewendet werden kann"
 
-#: apply.c:5042
+#: apply.c:5024
 msgid "make sure the patch is applicable to the current index"
 msgstr ""
 "sicherstellen, dass der Patch mit dem aktuellen Index angewendet werden kann"
 
-#: apply.c:5044
+#: apply.c:5026
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "neue Dateien mit `git add --intent-to-add` markieren"
 
-#: apply.c:5046
+#: apply.c:5028
 msgid "apply a patch without touching the working tree"
 msgstr "Patch anwenden, ohne Änderungen im Arbeitsverzeichnis vorzunehmen"
 
-#: apply.c:5048
+#: apply.c:5030
 msgid "accept a patch that touches outside the working area"
 msgstr ""
 "Patch anwenden, der Änderungen außerhalb des Arbeitsverzeichnisses vornimmt"
 
-#: apply.c:5051
+#: apply.c:5033
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "Patch anwenden (Benutzung mit --stat/--summary/--check)"
 
-#: apply.c:5053
+#: apply.c:5035
 msgid "attempt three-way merge, fall back on normal patch if that fails"
 msgstr ""
 "versuche 3-Wege-Merge, weiche auf normalen Patch aus, wenn dies fehlschlägt"
 
-#: apply.c:5055
+#: apply.c:5037
 msgid "build a temporary index based on embedded index information"
 msgstr ""
 "einen temporären Index, basierend auf den integrierten Index-Informationen, "
 "erstellen"
 
-#: apply.c:5058 builtin/checkout-index.c:196
+#: apply.c:5040 builtin/checkout-index.c:230
 msgid "paths are separated with NUL character"
 msgstr "Pfade sind getrennt durch NUL Zeichen"
 
-#: apply.c:5060
+#: apply.c:5042
 msgid "ensure at least <n> lines of context match"
 msgstr ""
 "sicher stellen, dass mindestens <n> Zeilen des Kontextes übereinstimmen"
 
-#: apply.c:5061 builtin/am.c:2352 builtin/am.c:2355
+#: apply.c:5043 builtin/am.c:2355 builtin/am.c:2358
 #: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
-#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3960
-#: builtin/rebase.c:1051
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3983
+#: builtin/rebase.c:1079
 msgid "action"
 msgstr "Aktion"
 
-#: apply.c:5062
+#: apply.c:5044
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "neue oder geänderte Zeilen, die Whitespace-Fehler haben, ermitteln"
 
-#: apply.c:5065 apply.c:5068
+#: apply.c:5047 apply.c:5050
 msgid "ignore changes in whitespace when finding context"
 msgstr "Änderungen im Whitespace bei der Suche des Kontextes ignorieren"
 
-#: apply.c:5071
+#: apply.c:5053
 msgid "apply the patch in reverse"
 msgstr "den Patch in umgekehrter Reihenfolge anwenden"
 
-#: apply.c:5073
+#: apply.c:5055
 msgid "don't expect at least one line of context"
 msgstr "keinen Kontext erwarten"
 
-#: apply.c:5075
+#: apply.c:5057
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr ""
 "zurückgewiesene Patch-Blöcke in entsprechenden *.rej Dateien hinterlassen"
 
-#: apply.c:5077
+#: apply.c:5059
 msgid "allow overlapping hunks"
 msgstr "sich überlappende Patch-Blöcke erlauben"
 
-#: apply.c:5080
+#: apply.c:5062
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "fehlerhaft erkannten fehlenden Zeilenumbruch am Dateiende tolerieren"
 
-#: apply.c:5083
+#: apply.c:5065
 msgid "do not trust the line counts in the hunk headers"
 msgstr "den Zeilennummern im Kopf des Patch-Blocks nicht vertrauen"
 
-#: apply.c:5085 builtin/am.c:2364
+#: apply.c:5067 builtin/am.c:2367
 msgid "root"
 msgstr "Wurzelverzeichnis"
 
-#: apply.c:5086
+#: apply.c:5068
 msgid "prepend <root> to all filenames"
 msgstr "<Wurzelverzeichnis> vor alle Dateinamen stellen"
 
-#: apply.c:5089
+#: apply.c:5071
 msgid "don't return error for empty patches"
 msgstr "keinen Fehler für leere Patches zurückgeben"
 
-#: archive-tar.c:125 archive-zip.c:345
+#: archive-tar.c:125 archive-zip.c:346
 #, c-format
 msgid "cannot stream blob %s"
-msgstr "Kann Blob %s nicht streamen."
+msgstr "kann Blob %s nicht streamen"
 
-#: archive-tar.c:265 archive-zip.c:358
+#: archive-tar.c:265 archive-zip.c:359
 #, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
 msgstr "Nicht unterstützter Dateimodus: 0%o (SHA1: %s)"
@@ -1576,33 +1578,33 @@ msgstr "Nicht unterstützter Dateimodus: 0%o (SHA1: %s)"
 #: archive-tar.c:447
 #, c-format
 msgid "unable to start '%s' filter"
-msgstr "Konnte '%s' Filter nicht starten."
+msgstr "konnte '%s' Filter nicht starten"
 
 #: archive-tar.c:450
 msgid "unable to redirect descriptor"
-msgstr "Konnte Descriptor nicht umleiten."
+msgstr "konnte Descriptor nicht umleiten"
 
 #: archive-tar.c:457
 #, c-format
 msgid "'%s' filter reported error"
-msgstr "'%s' Filter meldete Fehler."
+msgstr "'%s' Filter meldete Fehler"
 
-#: archive-zip.c:318
+#: archive-zip.c:319
 #, c-format
 msgid "path is not valid UTF-8: %s"
 msgstr "Pfad ist kein gültiges UTF-8: %s"
 
-#: archive-zip.c:322
+#: archive-zip.c:323
 #, c-format
 msgid "path too long (%d chars, SHA1: %s): %s"
 msgstr "Pfad zu lang (%d Zeichen, SHA1: %s): %s"
 
-#: archive-zip.c:469 builtin/pack-objects.c:365 builtin/pack-objects.c:368
+#: archive-zip.c:470 builtin/pack-objects.c:363 builtin/pack-objects.c:366
 #, c-format
 msgid "deflate error (%d)"
 msgstr "Fehler beim Komprimieren (%d)"
 
-#: archive-zip.c:603
+#: archive-zip.c:604
 #, c-format
 msgid "timestamp too large for this system: %<PRIuMAX>"
 msgstr "Timestamp zu groß für dieses System: %<PRIuMAX>"
@@ -1611,10 +1613,6 @@ msgstr "Timestamp zu groß für dieses System: %<PRIuMAX>"
 msgid "git archive [<options>] <tree-ish> [<path>...]"
 msgstr "git archive [<Optionen>] <Commit-Referenz> [<Pfad>...]"
 
-#: archive.c:15
-msgid "git archive --list"
-msgstr "git archive --list"
-
 #: archive.c:16
 msgid ""
 "git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"
@@ -1627,12 +1625,12 @@ msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote <Repository> [--exec <Programm>] --list"
 
 #: archive.c:188 archive.c:341 builtin/gc.c:497 builtin/notes.c:238
-#: builtin/tag.c:578
+#: builtin/tag.c:579
 #, c-format
 msgid "cannot read '%s'"
 msgstr "kann '%s' nicht lesen"
 
-#: archive.c:426 builtin/add.c:215 builtin/add.c:671 builtin/rm.c:334
+#: archive.c:426 builtin/add.c:214 builtin/add.c:657 builtin/rm.c:334
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "Pfadspezifikation '%s' stimmt mit keinen Dateien überein"
@@ -1654,7 +1652,7 @@ msgstr "Kein Tree-Objekt: %s"
 
 #: archive.c:481
 msgid "current working directory is untracked"
-msgstr "Aktuelles Arbeitsverzeichnis ist unversioniert."
+msgstr "aktuelles Arbeitsverzeichnis ist unversioniert"
 
 #: archive.c:522
 #, c-format
@@ -1674,7 +1672,7 @@ msgstr "Format"
 msgid "archive format"
 msgstr "Archivformat"
 
-#: archive.c:552 builtin/log.c:1790
+#: archive.c:552 builtin/log.c:1809
 msgid "prefix"
 msgstr "Präfix"
 
@@ -1682,12 +1680,12 @@ msgstr "Präfix"
 msgid "prepend prefix to each pathname in the archive"
 msgstr "einen Präfix vor jeden Pfadnamen in dem Archiv stellen"
 
-#: archive.c:554 archive.c:557 builtin/blame.c:880 builtin/blame.c:884
-#: builtin/blame.c:885 builtin/commit-tree.c:115 builtin/config.c:135
+#: archive.c:554 archive.c:557 builtin/blame.c:881 builtin/blame.c:885
+#: builtin/blame.c:886 builtin/commit-tree.c:115 builtin/config.c:135
 #: builtin/fast-export.c:1181 builtin/fast-export.c:1183
-#: builtin/fast-export.c:1187 builtin/grep.c:935 builtin/hash-object.c:103
+#: builtin/fast-export.c:1187 builtin/grep.c:936 builtin/hash-object.c:104
 #: builtin/ls-files.c:654 builtin/ls-files.c:657 builtin/notes.c:410
-#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:190
+#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:195
 msgid "file"
 msgstr "Datei"
 
@@ -1715,8 +1713,8 @@ msgstr "Komprimierungsgrad setzen"
 msgid "list supported archive formats"
 msgstr "unterstützte Archivformate auflisten"
 
-#: archive.c:568 builtin/archive.c:89 builtin/clone.c:118 builtin/clone.c:121
-#: builtin/submodule--helper.c:1870 builtin/submodule--helper.c:2513
+#: archive.c:568 builtin/archive.c:89 builtin/clone.c:122 builtin/clone.c:125
+#: builtin/submodule--helper.c:1884 builtin/submodule--helper.c:2718
 msgid "repo"
 msgstr "Repository"
 
@@ -1737,11 +1735,12 @@ msgstr "Pfad zum externen \"git-upload-archive\"-Programm"
 msgid "Unexpected option --remote"
 msgstr "Unerwartete Option --remote"
 
-#: archive.c:580 fetch-pack.c:300 revision.c:2887 builtin/add.c:544
-#: builtin/add.c:576 builtin/checkout.c:1763 builtin/commit.c:370
-#: builtin/fast-export.c:1230 builtin/index-pack.c:1848 builtin/log.c:2115
-#: builtin/reset.c:435 builtin/reset.c:493 builtin/rm.c:281
-#: builtin/stash.c:1719 builtin/worktree.c:508 http-fetch.c:144
+#: archive.c:580 fetch-pack.c:300 revision.c:2914 builtin/add.c:530
+#: builtin/add.c:562 builtin/checkout.c:1782 builtin/clone.c:1099
+#: builtin/clone.c:1102 builtin/commit.c:371 builtin/fast-export.c:1230
+#: builtin/index-pack.c:1854 builtin/log.c:2140 builtin/reset.c:442
+#: builtin/reset.c:500 builtin/rm.c:281 builtin/stash.c:1708
+#: builtin/worktree.c:580 builtin/worktree.c:781 http-fetch.c:144
 #: http-fetch.c:153
 #, c-format
 msgid "the option '%s' requires '%s'"
@@ -1761,17 +1760,17 @@ msgstr "Unbekanntes Archivformat '%s'"
 msgid "Argument not supported for format '%s': -%d"
 msgstr "Argument für Format '%s' nicht unterstützt: -%d"
 
-#: attr.c:203
+#: attr.c:202
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s ist kein gültiger Attributname"
 
-#: attr.c:364
+#: attr.c:363
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s nicht erlaubt: %s:%d"
 
-#: attr.c:404
+#: attr.c:403
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1789,12 +1788,12 @@ msgstr "Ungültiger Inhalt bzgl. Anführungszeichen in Datei '%s': %s"
 msgid "We cannot bisect more!\n"
 msgstr "Keine binäre Suche mehr möglich!\n"
 
-#: bisect.c:764
+#: bisect.c:765
 #, c-format
 msgid "Not a valid commit name %s"
 msgstr "%s ist kein gültiger Commit-Name"
 
-#: bisect.c:789
+#: bisect.c:790
 #, c-format
 msgid ""
 "The merge base %s is bad.\n"
@@ -1803,7 +1802,7 @@ msgstr ""
 "Die Merge-Basis %s ist fehlerhaft.\n"
 "Das bedeutet, der Fehler wurde zwischen %s und [%s] behoben.\n"
 
-#: bisect.c:794
+#: bisect.c:795
 #, c-format
 msgid ""
 "The merge base %s is new.\n"
@@ -1812,7 +1811,7 @@ msgstr ""
 "Die Merge-Basis %s ist neu.\n"
 "Das bedeutet, die Eigenschaft hat sich zwischen %s und [%s] geändert.\n"
 
-#: bisect.c:799
+#: bisect.c:800
 #, c-format
 msgid ""
 "The merge base %s is %s.\n"
@@ -1821,7 +1820,7 @@ msgstr ""
 "Die Merge-Basis %s ist %s.\n"
 "Das bedeutet, der erste '%s' Commit befindet sich zwischen %s und [%s].\n"
 
-#: bisect.c:807
+#: bisect.c:808
 #, c-format
 msgid ""
 "Some %s revs are not ancestors of the %s rev.\n"
@@ -1832,7 +1831,7 @@ msgstr ""
 "git bisect kann in diesem Fall nicht richtig arbeiten.\n"
 "Vielleicht verwechselten Sie %s und %s Commits?\n"
 
-#: bisect.c:820
+#: bisect.c:821
 #, c-format
 msgid ""
 "the merge base between %s and [%s] must be skipped.\n"
@@ -1844,36 +1843,36 @@ msgstr ""
 "erste %s Commit zwischen %s und %s befindet.\n"
 "Es wird dennoch fortgesetzt."
 
-#: bisect.c:859
+#: bisect.c:860
 #, c-format
 msgid "Bisecting: a merge base must be tested\n"
-msgstr "binäre Suche: eine Merge-Basis muss geprüft werden\n"
+msgstr "Binäre Suche: eine Merge-Basis muss geprüft werden\n"
 
-#: bisect.c:909
+#: bisect.c:910
 #, c-format
 msgid "a %s revision is needed"
 msgstr "ein %s Commit wird benötigt"
 
-#: bisect.c:939
+#: bisect.c:940
 #, c-format
 msgid "could not create file '%s'"
 msgstr "konnte Datei '%s' nicht erstellen"
 
-#: bisect.c:985 builtin/merge.c:155
+#: bisect.c:986 builtin/merge.c:155
 #, c-format
 msgid "could not read file '%s'"
 msgstr "Konnte Datei '%s' nicht lesen"
 
-#: bisect.c:1025
+#: bisect.c:1026
 msgid "reading bisect refs failed"
 msgstr "Lesen von Referenzen für binäre Suche fehlgeschlagen"
 
-#: bisect.c:1055
+#: bisect.c:1056
 #, c-format
 msgid "%s was both %s and %s\n"
 msgstr "%s war sowohl %s als auch %s\n"
 
-#: bisect.c:1064
+#: bisect.c:1065
 #, c-format
 msgid ""
 "No testable commit found.\n"
@@ -1882,7 +1881,7 @@ msgstr ""
 "Kein testbarer Commit gefunden.\n"
 "Vielleicht starteten Sie mit schlechten Pfad-Argumenten?\n"
 
-#: bisect.c:1093
+#: bisect.c:1094
 #, c-format
 msgid "(roughly %d step)"
 msgid_plural "(roughly %d steps)"
@@ -1892,56 +1891,56 @@ msgstr[1] "(ungefähr %d Schritte)"
 #. TRANSLATORS: the last %s will be replaced with "(roughly %d
 #. steps)" translation.
 #.
-#: bisect.c:1099
+#: bisect.c:1100
 #, c-format
 msgid "Bisecting: %d revision left to test after this %s\n"
 msgid_plural "Bisecting: %d revisions left to test after this %s\n"
-msgstr[0] "binäre Suche: danach noch %d Commit zum Testen übrig %s\n"
-msgstr[1] "binäre Suche: danach noch %d Commits zum Testen übrig %s\n"
+msgstr[0] "Binäre Suche: danach noch %d Commit zum Testen übrig %s\n"
+msgstr[1] "Binäre Suche: danach noch %d Commits zum Testen übrig %s\n"
 
-#: blame.c:2776
+#: blame.c:2773
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents und --reverse funktionieren gemeinsam nicht."
 
-#: blame.c:2790
+#: blame.c:2787
 msgid "cannot use --contents with final commit object name"
 msgstr ""
 "kann --contents nicht mit endgültigem Namen des Commit-Objektes benutzen"
 
-#: blame.c:2811
+#: blame.c:2808
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "--reverse und --first-parent zusammen erfordern die Angabe eines "
 "endgültigen\n"
 "Commits"
 
-#: blame.c:2820 bundle.c:224 midx.c:1042 ref-filter.c:2370 remote.c:2158
-#: sequencer.c:2352 sequencer.c:4899 submodule.c:883 builtin/commit.c:1114
-#: builtin/log.c:429 builtin/log.c:1036 builtin/log.c:1644 builtin/log.c:2071
-#: builtin/log.c:2362 builtin/merge.c:431 builtin/pack-objects.c:3373
-#: builtin/pack-objects.c:3775 builtin/pack-objects.c:3790
+#: blame.c:2817 bundle.c:231 midx.c:1058 ref-filter.c:2371 remote.c:2157
+#: sequencer.c:2348 sequencer.c:4872 submodule.c:913 builtin/commit.c:1118
+#: builtin/log.c:437 builtin/log.c:1055 builtin/log.c:1663 builtin/log.c:2096
+#: builtin/log.c:2387 builtin/merge.c:431 builtin/pack-objects.c:3381
+#: builtin/pack-objects.c:3781 builtin/pack-objects.c:3796
 #: builtin/shortlog.c:255
 msgid "revision walk setup failed"
 msgstr "Einrichtung des Revisionsgangs fehlgeschlagen"
 
-#: blame.c:2838
+#: blame.c:2835
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "--reverse und --first-parent zusammen erfordern einen Bereich entlang der\n"
 "\"first-parent\"-Kette"
 
-#: blame.c:2849
+#: blame.c:2846
 #, c-format
 msgid "no such path %s in %s"
 msgstr "Pfad %s nicht in %s gefunden"
 
-#: blame.c:2860
+#: blame.c:2857
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "kann Blob %s für Pfad '%s' nicht lesen"
 
-#: branch.c:77
+#: branch.c:93
 msgid ""
 "cannot inherit upstream tracking configuration of multiple refs when "
 "rebasing is requested"
@@ -1949,31 +1948,31 @@ msgstr ""
 "Upstream-Tracking-Konfiguration von mehreren Referenzen kann nicht vererbt "
 "werden, wenn ein Rebase angefordert wird"
 
-#: branch.c:88
+#: branch.c:104
 #, c-format
 msgid "not setting branch '%s' as its own upstream"
 msgstr "Branch %s nicht als sein eigener Upstream-Branch gesetzt"
 
-#: branch.c:144
+#: branch.c:160
 #, c-format
 msgid "branch '%s' set up to track '%s' by rebasing."
 msgstr "Branch '%s' folgt nun '%s' durch Rebase."
 
-#: branch.c:145
+#: branch.c:161
 #, c-format
 msgid "branch '%s' set up to track '%s'."
 msgstr "Branch '%s' folgt nun '%s'."
 
-#: branch.c:148
+#: branch.c:164
 #, c-format
 msgid "branch '%s' set up to track:"
 msgstr "Branch '%s' folgt nun:"
 
-#: branch.c:160
+#: branch.c:176
 msgid "unable to write upstream branch configuration"
 msgstr "konnte Konfiguration zu Upstream-Branch nicht schreiben"
 
-#: branch.c:162
+#: branch.c:178
 msgid ""
 "\n"
 "After fixing the error cause you may try to fix up\n"
@@ -1983,53 +1982,92 @@ msgstr ""
 "Nachdem Sie die Fehlerursache behoben haben, können Sie\n"
 "die Tracking-Informationen erneut setzen mit:"
 
-#: branch.c:203
+#: branch.c:219
 #, c-format
 msgid "asked to inherit tracking from '%s', but no remote is set"
 msgstr ""
 "Vererbung des Tracking von '%s' angefragt, aber es ist kein Remote-"
 "Repository gesetzt"
 
-#: branch.c:209
+#: branch.c:225
 #, c-format
 msgid "asked to inherit tracking from '%s', but no merge configuration is set"
 msgstr ""
 "Vererbung des Tracking von '%s' angefragt, aber es ist keine Merge-"
 "Konfiguration gesetzt"
 
-#: branch.c:252
+#: branch.c:277
+#, c-format
+msgid "not tracking: ambiguous information for ref '%s'"
+msgstr "kein Tracking: mehrdeutige Informationen für Referenz '%s'"
+
+#. TRANSLATORS: This is a line listing a remote with duplicate
+#. refspecs in the advice message below. For RTL languages you'll
+#. probably want to swap the "%s" and leading "  " space around.
+#.
+#. TRANSLATORS: This is line item of ambiguous object output
+#. from describe_ambiguous_object() above. For RTL languages
+#. you'll probably want to swap the "%s" and leading " " space
+#. around.
+#.
+#: branch.c:289 object-name.c:464
+#, c-format
+msgid "  %s\n"
+msgstr "  %s\n"
+
+#. TRANSLATORS: The second argument is a \n-delimited list of
+#. duplicate refspecs, composed above.
+#.
+#: branch.c:295
 #, c-format
-msgid "not tracking: ambiguous information for ref %s"
-msgstr "kein Tracking: mehrdeutige Informationen für Referenz %s"
+msgid ""
+"There are multiple remotes whose fetch refspecs map to the remote\n"
+"tracking ref '%s':\n"
+"%s\n"
+"This is typically a configuration error.\n"
+"\n"
+"To support setting up tracking branches, ensure that\n"
+"different remotes' fetch refspecs map into different\n"
+"tracking namespaces."
+msgstr ""
+"Es gibt mehrere Remote-Repositories, deren Fetch-Refspecs der\n"
+"Remote-Tracking-Referenz '%s' zugeordnet sind:\n"
+"%s\n"
+"Das ist in der Regel ein Konfigurationsfehler.\n"
+"\n"
+"Um das Setzen von Tracking-Branches zu unterstützen,\n"
+"stellen Sie sicher, dass verschiedene Fetch-Refspecs der\n"
+"Remote-Repositories zu verschiedenen Tracking-Namensräumen\n"
+"zugeordnet werden."
 
-#: branch.c:287
+#: branch.c:344
 #, c-format
 msgid "'%s' is not a valid branch name"
 msgstr "'%s' ist kein gültiger Branchname"
 
-#: branch.c:307
+#: branch.c:364
 #, c-format
 msgid "a branch named '%s' already exists"
 msgstr "Branch '%s' existiert bereits"
 
-#: branch.c:313
+#: branch.c:370
 #, c-format
 msgid "cannot force update the branch '%s' checked out at '%s'"
 msgstr ""
 "kann Aktualisierung des Branches '%s' nicht erzwingen, ausgecheckt in '%s'"
 
-#: branch.c:336
+#: branch.c:393
 #, c-format
 msgid "cannot set up tracking information; starting point '%s' is not a branch"
 msgstr ""
 "kann Tracking-Informationen nicht einrichten; Startpunkt '%s' ist kein Branch"
 
-#: branch.c:338
+#: branch.c:395
 #, c-format
 msgid "the requested upstream branch '%s' does not exist"
 msgstr "der angeforderte Upstream-Branch '%s' existiert nicht"
 
-#: branch.c:340
+#: branch.c:397
 msgid ""
 "\n"
 "If you are planning on basing your work on an upstream\n"
@@ -2050,126 +2088,145 @@ msgstr ""
 "\"git push -u\" verwenden, um den Upstream-Branch beim \"push\"\n"
 "zu konfigurieren."
 
-#: branch.c:384 builtin/replace.c:321 builtin/replace.c:377
+#: branch.c:445 builtin/replace.c:321 builtin/replace.c:377
 #: builtin/replace.c:423 builtin/replace.c:453
 #, c-format
 msgid "not a valid object name: '%s'"
 msgstr "kein gültiger Objektname: '%s'"
 
-#: branch.c:404
+#: branch.c:465
 #, c-format
 msgid "ambiguous object name: '%s'"
 msgstr "mehrdeutiger Objekt-Name: '%s'"
 
-#: branch.c:409
+#: branch.c:470
 #, c-format
 msgid "not a valid branch point: '%s'"
 msgstr "ungültiger Branchpunkt: '%s'"
 
-#: branch.c:469
+#: branch.c:658
+#, c-format
+msgid "submodule '%s': unable to find submodule"
+msgstr "Submodul '%s': Submodul konnte nicht gefunden werden"
+
+#: branch.c:661
+#, c-format
+msgid ""
+"You may try updating the submodules using 'git checkout %s && git submodule "
+"update --init'"
+msgstr ""
+"Sie können versuchen die Submodule mit 'git checkout %s && git submodule "
+"update --init' zu aktualisieren"
+
+#: branch.c:672 branch.c:698
+#, c-format
+msgid "submodule '%s': cannot create branch '%s'"
+msgstr "Submodul '%s': kann Branch nicht erzeugen: '%s'"
+
+#: branch.c:730
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr "'%s' ist bereits in '%s' ausgecheckt"
 
-#: branch.c:494
+#: branch.c:755
 #, c-format
 msgid "HEAD of working tree %s is not updated"
-msgstr "HEAD des Arbeitsverzeichnisses %s ist nicht aktualisiert."
+msgstr "HEAD des Arbeitsverzeichnisses %s ist nicht aktualisiert"
 
-#: bundle.c:44
+#: bundle.c:45
 #, c-format
 msgid "unrecognized bundle hash algorithm: %s"
 msgstr "unbekannter Paket-Hash-Algorithmus: %s"
 
-#: bundle.c:48
+#: bundle.c:53
 #, c-format
 msgid "unknown capability '%s'"
 msgstr "unbekannte Fähigkeit '%s'"
 
-#: bundle.c:74
+#: bundle.c:79
 #, c-format
 msgid "'%s' does not look like a v2 or v3 bundle file"
 msgstr "'%s' sieht nicht wie eine v2 oder v3 Paketdatei aus"
 
-#: bundle.c:113
+#: bundle.c:118
 #, c-format
 msgid "unrecognized header: %s%s (%d)"
 msgstr "nicht erkannter Kopfbereich: %s%s (%d)"
 
-#: bundle.c:140 rerere.c:464 rerere.c:674 sequencer.c:2620 sequencer.c:3406
-#: builtin/commit.c:862
+#: bundle.c:145 rerere.c:464 rerere.c:675 sequencer.c:2616 sequencer.c:3402
+#: builtin/commit.c:865
 #, c-format
 msgid "could not open '%s'"
 msgstr "Konnte '%s' nicht öffnen"
 
-#: bundle.c:198
+#: bundle.c:203
 msgid "Repository lacks these prerequisite commits:"
 msgstr "Dem Repository fehlen folgende vorausgesetzte Commits:"
 
-#: bundle.c:201
+#: bundle.c:206
 msgid "need a repository to verify a bundle"
-msgstr "Um ein Paket zu überprüfen wird ein Repository benötigt."
+msgstr "um ein Paket zu überprüfen wird ein Repository benötigt"
 
-#: bundle.c:257
+#: bundle.c:264
 #, c-format
 msgid "The bundle contains this ref:"
-msgid_plural "The bundle contains these %d refs:"
+msgid_plural "The bundle contains these %<PRIuMAX> refs:"
 msgstr[0] "Das Paket enthält diese Referenz:"
-msgstr[1] "Das Paket enthält diese %d Referenzen:"
+msgstr[1] "Das Paket enthält diese %<PRIuMAX> Referenzen:"
 
-#: bundle.c:264
+#: bundle.c:272
 msgid "The bundle records a complete history."
 msgstr "Das Paket speichert eine komplette Historie."
 
-#: bundle.c:266
+#: bundle.c:274
 #, c-format
 msgid "The bundle requires this ref:"
-msgid_plural "The bundle requires these %d refs:"
+msgid_plural "The bundle requires these %<PRIuMAX> refs:"
 msgstr[0] "Das Paket benötigt diese Referenz:"
-msgstr[1] "Das Paket benötigt diese %d Referenzen:"
+msgstr[1] "Das Paket benötigt diese %<PRIuMAX> Referenzen:"
 
-#: bundle.c:333
+#: bundle.c:350
 msgid "unable to dup bundle descriptor"
-msgstr "Konnte dup für Descriptor des Pakets nicht ausführen."
+msgstr "konnte dup für Descriptor des Pakets nicht ausführen"
 
-#: bundle.c:340
+#: bundle.c:357
 msgid "Could not spawn pack-objects"
 msgstr "Konnte Paketobjekte nicht erstellen"
 
-#: bundle.c:351
+#: bundle.c:368
 msgid "pack-objects died"
 msgstr "Erstellung der Paketobjekte abgebrochen"
 
-#: bundle.c:400
+#: bundle.c:417
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "Referenz '%s' wird durch \"rev-list\" Optionen ausgeschlossen"
 
-#: bundle.c:504
+#: bundle.c:533 builtin/log.c:211 builtin/log.c:1975 builtin/shortlog.c:400
+#, c-format
+msgid "unrecognized argument: %s"
+msgstr "nicht erkanntes Argument: %s"
+
+#: bundle.c:548
 #, c-format
 msgid "unsupported bundle version %d"
 msgstr "nicht unterstützte Paket-Version %d"
 
-#: bundle.c:506
+#: bundle.c:550
 #, c-format
 msgid "cannot write bundle version %d with algorithm %s"
 msgstr "kann Paket-Version %d nicht mit Algorithmus %s schreiben"
 
-#: bundle.c:524 builtin/log.c:210 builtin/log.c:1953 builtin/shortlog.c:399
-#, c-format
-msgid "unrecognized argument: %s"
-msgstr "nicht erkanntes Argument: %s"
-
-#: bundle.c:553
+#: bundle.c:600
 msgid "Refusing to create empty bundle."
 msgstr "Erstellung eines leeren Pakets zurückgewiesen."
 
-#: bundle.c:563
+#: bundle.c:610
 #, c-format
 msgid "cannot create '%s'"
 msgstr "kann '%s' nicht erstellen"
 
-#: bundle.c:588
+#: bundle.c:639
 msgid "index-pack died"
 msgstr "Erstellung der Paketindexdatei abgebrochen"
 
@@ -2197,7 +2254,7 @@ msgstr "letzter Chunk hat nicht-Null ID %<PRIx32>"
 msgid "invalid color value: %.*s"
 msgstr "Ungültiger Farbwert: %.*s"
 
-#: commit-graph.c:204 midx.c:51
+#: commit-graph.c:204 midx.c:52
 msgid "invalid hash version"
 msgstr "ungültige Hash-Version"
 
@@ -2208,224 +2265,225 @@ msgstr "Commit-Graph-Datei ist zu klein"
 #: commit-graph.c:355
 #, c-format
 msgid "commit-graph signature %X does not match signature %X"
-msgstr "Commit-Graph-Signatur %X stimmt nicht mit Signatur %X überein."
+msgstr "Commit-Graph-Signatur %X stimmt nicht mit Signatur %X überein"
 
 #: commit-graph.c:362
 #, c-format
 msgid "commit-graph version %X does not match version %X"
-msgstr "Commit-Graph-Version %X stimmt nicht mit Version %X überein."
+msgstr "Commit-Graph-Version %X stimmt nicht mit Version %X überein"
 
 #: commit-graph.c:369
 #, c-format
 msgid "commit-graph hash version %X does not match version %X"
-msgstr "Hash-Version des Commit-Graph %X stimmt nicht mit Version %X überein."
+msgstr "Hash-Version des Commit-Graph %X stimmt nicht mit Version %X überein"
 
 #: commit-graph.c:386
 #, c-format
 msgid "commit-graph file is too small to hold %u chunks"
 msgstr "Commit-Graph-Datei ist zu klein, um %u Chunks zu enthalten"
 
-#: commit-graph.c:482
+#: commit-graph.c:485
 msgid "commit-graph has no base graphs chunk"
 msgstr "Commit-Graph hat keinen Basis-Graph-Chunk"
 
-#: commit-graph.c:492
+#: commit-graph.c:495
 msgid "commit-graph chain does not match"
-msgstr "Commit-Graph Verkettung stimmt nicht überein."
+msgstr "Commit-Graph Verkettung stimmt nicht überein"
 
-#: commit-graph.c:540
+#: commit-graph.c:543
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
 msgstr "Ungültige Commit-Graph Verkettung: Zeile '%s' ist kein Hash"
 
-#: commit-graph.c:564
+#: commit-graph.c:567
 msgid "unable to find all commit-graph files"
-msgstr "Konnte nicht alle Commit-Graph-Dateien finden."
+msgstr "konnte nicht alle Commit-Graph-Dateien finden"
 
-#: commit-graph.c:749 commit-graph.c:786
+#: commit-graph.c:752 commit-graph.c:789
 msgid "invalid commit position. commit-graph is likely corrupt"
-msgstr "Ungültige Commit-Position. Commit-Graph ist wahrscheinlich beschädigt."
+msgstr "ungültige Commit-Position. Commit-Graph ist wahrscheinlich beschädigt"
 
-#: commit-graph.c:770
+#: commit-graph.c:773
 #, c-format
 msgid "could not find commit %s"
-msgstr "Konnte Commit %s nicht finden."
+msgstr "konnte Commit %s nicht finden"
 
-#: commit-graph.c:803
+#: commit-graph.c:806
 msgid "commit-graph requires overflow generation data but has none"
 msgstr "Commit-Graph erfordert Überlaufgenerierungsdaten, aber hat keine"
 
-#: commit-graph.c:1108 builtin/am.c:1369
+#: commit-graph.c:1111 builtin/am.c:1370 builtin/checkout.c:775
+#: builtin/clone.c:705
 #, c-format
 msgid "unable to parse commit %s"
-msgstr "Konnte Commit '%s' nicht parsen."
+msgstr "konnte Commit '%s' nicht parsen"
 
-#: commit-graph.c:1370 builtin/pack-objects.c:3070
+#: commit-graph.c:1373 builtin/pack-objects.c:3078
 #, c-format
 msgid "unable to get type of object %s"
-msgstr "Konnte Art von Objekt '%s' nicht bestimmen."
+msgstr "konnte Art von Objekt '%s' nicht bestimmen"
 
-#: commit-graph.c:1401
+#: commit-graph.c:1404
 msgid "Loading known commits in commit graph"
 msgstr "Lade bekannte Commits in Commit-Graph"
 
-#: commit-graph.c:1418
+#: commit-graph.c:1421
 msgid "Expanding reachable commits in commit graph"
 msgstr "Erweitere erreichbare Commits in Commit-Graph"
 
-#: commit-graph.c:1438
+#: commit-graph.c:1441
 msgid "Clearing commit marks in commit graph"
 msgstr "Lösche Commit-Markierungen in Commit-Graph"
 
-#: commit-graph.c:1457
+#: commit-graph.c:1460
 msgid "Computing commit graph topological levels"
 msgstr "Topologische Ebenen des Commit-Graph werden berechnet"
 
-#: commit-graph.c:1510
+#: commit-graph.c:1513
 msgid "Computing commit graph generation numbers"
 msgstr "Commit-Graph Generationsnummern berechnen"
 
-#: commit-graph.c:1591
+#: commit-graph.c:1598
 msgid "Computing commit changed paths Bloom filters"
 msgstr "Berechnung der Bloom-Filter für veränderte Pfade des Commits"
 
-#: commit-graph.c:1668
+#: commit-graph.c:1675
 msgid "Collecting referenced commits"
 msgstr "Sammle referenzierte Commits"
 
-#: commit-graph.c:1693
+#: commit-graph.c:1701
 #, c-format
-msgid "Finding commits for commit graph in %d pack"
-msgid_plural "Finding commits for commit graph in %d packs"
-msgstr[0] "Suche Commits für Commit-Graph in %d Paket"
-msgstr[1] "Suche Commits für Commit-Graph in %d Paketen"
+msgid "Finding commits for commit graph in %<PRIuMAX> pack"
+msgid_plural "Finding commits for commit graph in %<PRIuMAX> packs"
+msgstr[0] "Suche Commits für Commit-Graph in %<PRIuMAX> Paket"
+msgstr[1] "Suche Commits für Commit-Graph in %<PRIuMAX> Paketen"
 
-#: commit-graph.c:1706
+#: commit-graph.c:1714
 #, c-format
 msgid "error adding pack %s"
-msgstr "Fehler beim Hinzufügen von Paket %s."
+msgstr "Fehler beim Hinzufügen von Paket %s"
 
-#: commit-graph.c:1710
+#: commit-graph.c:1718
 #, c-format
 msgid "error opening index for %s"
-msgstr "Fehler beim Öffnen des Index für %s."
+msgstr "Fehler beim Öffnen des Index für %s"
 
-#: commit-graph.c:1747
+#: commit-graph.c:1756
 msgid "Finding commits for commit graph among packed objects"
 msgstr "Suche Commits für Commit-Graph in gepackten Objekten"
 
-#: commit-graph.c:1765
+#: commit-graph.c:1774
 msgid "Finding extra edges in commit graph"
 msgstr "Suche zusätzliche Ränder in Commit-Graph"
 
-#: commit-graph.c:1814
+#: commit-graph.c:1823
 msgid "failed to write correct number of base graph ids"
-msgstr "Fehler beim Schreiben der korrekten Anzahl von Basis-Graph-IDs."
+msgstr "Fehler beim Schreiben der korrekten Anzahl von Basis-Graph-IDs"
 
-#: commit-graph.c:1845 midx.c:1149
+#: commit-graph.c:1854 midx.c:1168 builtin/sparse-checkout.c:475
 #, c-format
 msgid "unable to create leading directories of %s"
-msgstr "Konnte führende Verzeichnisse von '%s' nicht erstellen."
+msgstr "konnte führende Verzeichnisse von '%s' nicht erstellen"
 
-#: commit-graph.c:1858
+#: commit-graph.c:1868
 msgid "unable to create temporary graph layer"
 msgstr "konnte temporäre Graphen-Schicht nicht erstellen"
 
-#: commit-graph.c:1863
+#: commit-graph.c:1873
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr "konnte geteilte Zugriffsberechtigungen für '%s' nicht ändern"
 
-#: commit-graph.c:1920
+#: commit-graph.c:1930
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "Schreibe Commit-Graph in %d Durchgang"
 msgstr[1] "Schreibe Commit-Graph in %d Durchgängen"
 
-#: commit-graph.c:1956
+#: commit-graph.c:1967
 msgid "unable to open commit-graph chain file"
 msgstr "konnte Commit-Graph Chain-Datei nicht öffnen"
 
-#: commit-graph.c:1972
+#: commit-graph.c:1983
 msgid "failed to rename base commit-graph file"
 msgstr "konnte Basis-Commit-Graph-Datei nicht umbenennen"
 
-#: commit-graph.c:1992
+#: commit-graph.c:2004
 msgid "failed to rename temporary commit-graph file"
 msgstr "konnte temporäre Commit-Graph-Datei nicht umbenennen"
 
-#: commit-graph.c:2125
+#: commit-graph.c:2137
 msgid "Scanning merged commits"
 msgstr "Durchsuche zusammengeführte Commits"
 
-#: commit-graph.c:2169
+#: commit-graph.c:2181
 msgid "Merging commit-graph"
 msgstr "Zusammenführen von Commit-Graph"
 
-#: commit-graph.c:2277
+#: commit-graph.c:2289
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr ""
 "versuche einen Commit-Graph zu schreiben, aber 'core.commitGraph' ist "
 "deaktiviert"
 
-#: commit-graph.c:2384
+#: commit-graph.c:2396
 msgid "too many commits to write graph"
 msgstr "zu viele Commits zum Schreiben des Graphen"
 
-#: commit-graph.c:2482
+#: commit-graph.c:2494
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 "die Commit-Graph-Datei hat eine falsche Prüfsumme und ist wahrscheinlich "
 "beschädigt"
 
-#: commit-graph.c:2492
+#: commit-graph.c:2504
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "Commit-Graph hat fehlerhafte OID-Reihenfolge: %s dann %s"
 
-#: commit-graph.c:2502 commit-graph.c:2517
+#: commit-graph.c:2514 commit-graph.c:2529
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr "Commit-Graph hat fehlerhaften Fanout-Wert: fanout[%d] = %u != %u"
 
-#: commit-graph.c:2509
+#: commit-graph.c:2521
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "konnte Commit %s von Commit-Graph nicht parsen"
 
-#: commit-graph.c:2527
+#: commit-graph.c:2539
 msgid "Verifying commits in commit graph"
 msgstr "Commit in Commit-Graph überprüfen"
 
-#: commit-graph.c:2542
+#: commit-graph.c:2554
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "Fehler beim Parsen des Commits %s von Objekt-Datenbank für Commit-Graph"
 
-#: commit-graph.c:2549
+#: commit-graph.c:2561
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
 "OID des Wurzelverzeichnisses für Commit %s in Commit-Graph ist %s != %s"
 
-#: commit-graph.c:2559
+#: commit-graph.c:2571
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr "Commit-Graph Vorgänger-Liste für Commit %s ist zu lang"
 
-#: commit-graph.c:2568
+#: commit-graph.c:2580
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "Commit-Graph-Vorgänger für %s ist %s != %s"
 
-#: commit-graph.c:2582
+#: commit-graph.c:2594
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr "Commit-Graph Vorgänger-Liste für Commit %s endet zu früh"
 
-#: commit-graph.c:2587
+#: commit-graph.c:2599
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
@@ -2433,7 +2491,7 @@ msgstr ""
 "Commit-Graph hat Generationsnummer null für Commit %s, aber sonst ungleich "
 "null"
 
-#: commit-graph.c:2591
+#: commit-graph.c:2603
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
@@ -2441,29 +2499,29 @@ msgstr ""
 "Commit-Graph hat Generationsnummer ungleich null für Commit %s, aber sonst "
 "null"
 
-#: commit-graph.c:2608
+#: commit-graph.c:2620
 #, c-format
 msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
 msgstr "Commit-Graph Erstellung für Commit %s ist %<PRIuMAX> < %<PRIuMAX>"
 
-#: commit-graph.c:2614
+#: commit-graph.c:2626
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
 "Commit-Datum für Commit %s in Commit-Graph ist %<PRIuMAX> != %<PRIuMAX>"
 
-#: commit.c:53 sequencer.c:3109 builtin/am.c:399 builtin/am.c:444
-#: builtin/am.c:449 builtin/am.c:1448 builtin/am.c:2123 builtin/replace.c:456
+#: commit.c:54 sequencer.c:3105 builtin/am.c:400 builtin/am.c:445
+#: builtin/am.c:450 builtin/am.c:1449 builtin/am.c:2124 builtin/replace.c:456
 #, c-format
 msgid "could not parse %s"
 msgstr "konnte %s nicht parsen"
 
-#: commit.c:55
+#: commit.c:56
 #, c-format
 msgid "%s %s is not a commit!"
 msgstr "%s %s ist kein Commit!"
 
-#: commit.c:196
+#: commit.c:197
 msgid ""
 "Support for <GIT_DIR>/info/grafts is deprecated\n"
 "and will be removed in a future Git version.\n"
@@ -2484,28 +2542,28 @@ msgstr ""
 "Sie können diese Meldung unterdrücken, indem Sie\n"
 "\"git config advice.graftFileDeprecated false\" ausführen."
 
-#: commit.c:1241
+#: commit.c:1252
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr ""
 "Commit %s hat eine nicht vertrauenswürdige GPG-Signatur, angeblich von %s."
 
-#: commit.c:1245
+#: commit.c:1256
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "Commit %s hat eine ungültige GPG-Signatur, angeblich von %s."
 
-#: commit.c:1248
+#: commit.c:1259
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "Commit %s hat keine GPG-Signatur."
 
-#: commit.c:1251
+#: commit.c:1262
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "Commit %s hat eine gültige GPG-Signatur von %s\n"
 
-#: commit.c:1505
+#: commit.c:1516
 msgid ""
 "Warning: commit message did not conform to UTF-8.\n"
 "You may want to amend it after fixing the message, or set the config\n"
@@ -2521,7 +2579,17 @@ msgstr ""
 msgid "memory exhausted"
 msgstr "Speicher verbraucht"
 
-#: config.c:125
+#: compat/terminal.c:167
+msgid "cannot resume in the background, please use 'fg' to resume"
+msgstr ""
+"kann nicht im Hintergrund fortgesetzt werden, bitte verwenden Sie 'fg', um "
+"fortzufahren"
+
+#: compat/terminal.c:168
+msgid "cannot restore terminal settings"
+msgstr "kann Terminaleinstellungen nicht wiederherstellen"
+
+#: config.c:143
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2537,350 +2605,377 @@ msgstr ""
 "überschritten.\n"
 "Das könnte durch zirkulare Includes entstanden sein."
 
-#: config.c:141
+#: config.c:159
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "Konnte Include-Pfad '%s' nicht erweitern."
 
-#: config.c:152
+#: config.c:170
 msgid "relative config includes must come from files"
-msgstr "Relative Includes von Konfigurationen müssen aus Dateien kommen."
+msgstr "relative Includes von Konfigurationen müssen aus Dateien kommen"
 
-#: config.c:201
+#: config.c:219
 msgid "relative config include conditionals must come from files"
 msgstr ""
 "Bedingungen für das Einbinden von Konfigurationen aus relativen Pfaden "
 "müssen\n"
-"aus Dateien kommen."
+"aus Dateien kommen"
+
+#: config.c:364
+msgid ""
+"remote URLs cannot be configured in file directly or indirectly included by "
+"includeIf.hasconfig:remote.*.url"
+msgstr ""
+"Remote-URLs können nicht in der Datei direkt oder indirekt einbezogen durch "
+"includeIf.hasconfig:remote.*.url konfiguriert werden"
 
-#: config.c:398
+#: config.c:508
 #, c-format
 msgid "invalid config format: %s"
 msgstr "ungültiges Konfigurationsformat: %s"
 
-#: config.c:402
+#: config.c:512
 #, c-format
 msgid "missing environment variable name for configuration '%.*s'"
 msgstr "fehlender Name der Umgebungsvariable für Konfiguration '%.*s'"
 
-#: config.c:407
+#: config.c:517
 #, c-format
 msgid "missing environment variable '%s' for configuration '%.*s'"
 msgstr "fehlende Umgebungsvariable '%s' für Konfiguration '%.*s'"
 
-#: config.c:443
+#: config.c:553
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "Schlüssel enthält keine Sektion: %s"
 
-#: config.c:448
+#: config.c:558
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr "Schlüssel enthält keinen Variablennamen: %s"
 
-#: config.c:470 sequencer.c:2806
+#: config.c:580 sequencer.c:2802
 #, c-format
 msgid "invalid key: %s"
 msgstr "Ungültiger Schlüssel: %s"
 
-#: config.c:475
+#: config.c:585
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "Ungültiger Schlüssel (neue Zeile): %s"
 
-#: config.c:495
+#: config.c:605
 msgid "empty config key"
 msgstr "leerer Konfigurationsschlüssel"
 
-#: config.c:513 config.c:525
+#: config.c:623 config.c:635
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "Fehlerhafter Konfigurationsparameter: %s"
 
-#: config.c:539 config.c:556 config.c:563 config.c:572
+#: config.c:649 config.c:666 config.c:673 config.c:682
 #, c-format
 msgid "bogus format in %s"
 msgstr "Fehlerhaftes Format in %s"
 
-#: config.c:606
+#: config.c:716
 #, c-format
 msgid "bogus count in %s"
 msgstr "falsche Zählung in %s"
 
-#: config.c:610
+#: config.c:720
 #, c-format
 msgid "too many entries in %s"
 msgstr "zu viele Einträge in %s"
 
-#: config.c:620
+#: config.c:730
 #, c-format
 msgid "missing config key %s"
 msgstr "fehlender Konfigurationsschlüssel %s"
 
-#: config.c:628
+#: config.c:738
 #, c-format
 msgid "missing config value %s"
 msgstr "fehlender Konfigurationswert %s"
 
-#: config.c:979
+#: config.c:1089
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "Ungültige Konfigurationszeile %d in Blob %s"
 
-#: config.c:983
+#: config.c:1093
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "Ungültige Konfigurationszeile %d in Datei %s"
 
-#: config.c:987
+#: config.c:1097
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "Ungültige Konfigurationszeile %d in Standard-Eingabe"
 
-#: config.c:991
+#: config.c:1101
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "Ungültige Konfigurationszeile %d in Submodul-Blob %s"
 
-#: config.c:995
+#: config.c:1105
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "Ungültige Konfigurationszeile %d in Kommandozeile %s"
 
-#: config.c:999
+#: config.c:1109
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "Ungültige Konfigurationszeile %d in %s"
 
-#: config.c:1136
+#: config.c:1246
 msgid "out of range"
 msgstr "Außerhalb des Bereichs"
 
-#: config.c:1136
+#: config.c:1246
 msgid "invalid unit"
 msgstr "Ungültige Einheit"
 
-#: config.c:1137
+#: config.c:1247
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s': %s"
 
-#: config.c:1147
+#: config.c:1257
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Blob %s: %s"
 
-#: config.c:1150
+#: config.c:1260
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr ""
 "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Datei %s: %s"
 
-#: config.c:1153
+#: config.c:1263
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr ""
 "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Standard-Eingabe: "
 "%s"
 
-#: config.c:1156
+#: config.c:1266
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr ""
 "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Submodul-Blob %s: "
 "%s"
 
-#: config.c:1159
+#: config.c:1269
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr ""
 "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in Befehlszeile %s: "
 "%s"
 
-#: config.c:1162
+#: config.c:1272
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in %s: %s"
 
-#: config.c:1241
+#: config.c:1368
+#, c-format
+msgid "invalid value for variable %s"
+msgstr "ungültiger Wert für Variable %s"
+
+#: config.c:1389
+#, c-format
+msgid "ignoring unknown core.fsync component '%s'"
+msgstr "ignoriere unbekannte Komponente '%s' für core.fsync"
+
+#: config.c:1425
 #, c-format
 msgid "bad boolean config value '%s' for '%s'"
 msgstr "ungültiger boolescher Konfigurationswert '%s' für '%s'"
 
-#: config.c:1259
+#: config.c:1443
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "Fehler beim Erweitern des Nutzerverzeichnisses in: '%s'"
 
-#: config.c:1268
+#: config.c:1452
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "'%s' ist kein gültiger Zeitstempel für '%s'"
 
-#: config.c:1361
+#: config.c:1545
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "Länge für Abkürzung von Commit-IDs außerhalb des Bereichs: %d"
 
-#: config.c:1375 config.c:1386
+#: config.c:1559 config.c:1570
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "ungültiger zlib Komprimierungsgrad %d"
 
-#: config.c:1476
+#: config.c:1660
 msgid "core.commentChar should only be one character"
 msgstr "core.commentChar sollte nur ein Zeichen sein"
 
-#: config.c:1509
+#: config.c:1692
+#, c-format
+msgid "ignoring unknown core.fsyncMethod value '%s'"
+msgstr "ignoriere unbekannten Wert '%s' für core.fsyncMethod"
+
+#: config.c:1698
+msgid "core.fsyncObjectFiles is deprecated; use core.fsync instead"
+msgstr "core.fsyncObjectFiles is veraltet; nutzen Sie stattdessen core.fsync"
+
+#: config.c:1714
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "Ungültiger Modus für Objekterstellung: %s"
 
-#: config.c:1584
+#: config.c:1800
 #, c-format
 msgid "malformed value for %s"
-msgstr "Ungültiger Wert für %s."
+msgstr "ungültiger Wert für %s"
 
-#: config.c:1610
+#: config.c:1826
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "Ungültiger Wert für %s: %s"
 
-#: config.c:1611
+#: config.c:1827
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr ""
 "Muss einer von diesen sein: nothing, matching, simple, upstream, current"
 
-#: config.c:1672 builtin/pack-objects.c:4053
+#: config.c:1888 builtin/pack-objects.c:4078
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "ungültiger Komprimierungsgrad (%d) für Paketierung"
 
-#: config.c:1795
+#: config.c:2014
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "Konnte Blob-Objekt '%s' für Konfiguration nicht laden."
 
-#: config.c:1798
+#: config.c:2017
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "Referenz '%s' zeigt auf keinen Blob."
 
-#: config.c:1816
+#: config.c:2035
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "Konnte Blob '%s' für Konfiguration nicht auflösen."
 
-#: config.c:1861
+#: config.c:2080
 #, c-format
 msgid "failed to parse %s"
 msgstr "Fehler beim Parsen von %s."
 
-#: config.c:1917
+#: config.c:2136
 msgid "unable to parse command-line config"
 msgstr ""
 "Konnte die über die Befehlszeile angegebene Konfiguration nicht parsen."
 
-#: config.c:2285
+#: config.c:2512
 msgid "unknown error occurred while reading the configuration files"
 msgstr ""
 "Es trat ein unbekannter Fehler beim Lesen der Konfigurationsdateien auf."
 
-#: config.c:2459
+#: config.c:2686
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "Ungültiger %s: '%s'"
 
-#: config.c:2504
+#: config.c:2731
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr ""
 "Der Wert '%d' von splitIndex.maxPercentChange sollte zwischen 0 und 100 "
 "liegen."
 
-#: config.c:2550
+#: config.c:2763
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr ""
 "Konnte Wert '%s' aus der über die Befehlszeile angegebenen Konfiguration\n"
 "nicht parsen."
 
-#: config.c:2552
+#: config.c:2765
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "ungültige Konfigurationsvariable '%s' in Datei '%s' bei Zeile %d"
 
-#: config.c:2637
+#: config.c:2850
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "Ungültiger Sektionsname '%s'"
 
-#: config.c:2669
+#: config.c:2882
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s hat mehrere Werte"
 
-#: config.c:2698
+#: config.c:2911
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "Konnte neue Konfigurationsdatei '%s' nicht schreiben."
 
-#: config.c:2950 config.c:3277
+#: config.c:3177 config.c:3518
 #, c-format
 msgid "could not lock config file %s"
 msgstr "Konnte Konfigurationsdatei '%s' nicht sperren."
 
-#: config.c:2961
+#: config.c:3188
 #, c-format
 msgid "opening %s"
 msgstr "Öffne %s"
 
-#: config.c:2998 builtin/config.c:361
+#: config.c:3225 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "Ungültiges Muster: %s"
 
-#: config.c:3023
+#: config.c:3250
 #, c-format
 msgid "invalid config file %s"
 msgstr "Ungültige Konfigurationsdatei %s"
 
-#: config.c:3036 config.c:3290
+#: config.c:3263 config.c:3531
 #, c-format
 msgid "fstat on %s failed"
 msgstr "fstat auf %s fehlgeschlagen"
 
-#: config.c:3047
+#: config.c:3274
 #, c-format
 msgid "unable to mmap '%s'%s"
 msgstr "mmap für '%s'(%s) fehlgeschlagen"
 
-#: config.c:3057 config.c:3295
+#: config.c:3284 config.c:3536
 #, c-format
 msgid "chmod on %s failed"
 msgstr "chmod auf %s fehlgeschlagen"
 
-#: config.c:3142 config.c:3392
+#: config.c:3369 config.c:3633
 #, c-format
 msgid "could not write config file %s"
 msgstr "Konnte Konfigurationsdatei %s nicht schreiben."
 
-#: config.c:3176
+#: config.c:3403
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "Konnte '%s' nicht zu '%s' setzen."
 
-#: config.c:3178 builtin/remote.c:662 builtin/remote.c:860 builtin/remote.c:868
+#: config.c:3405 builtin/remote.c:666 builtin/remote.c:885 builtin/remote.c:893
 #, c-format
 msgid "could not unset '%s'"
 msgstr "Konnte '%s' nicht aufheben."
 
-#: config.c:3268
+#: config.c:3509
 #, c-format
 msgid "invalid section name: %s"
 msgstr "Ungültiger Sektionsname: %s"
 
-#: config.c:3435
+#: config.c:3676
 #, c-format
 msgid "missing value for '%s'"
 msgstr "Fehlender Wert für '%s'"
@@ -3219,68 +3314,68 @@ msgstr "Weigerung, mit fehlendem Hostnamen in Zugangsdaten zu arbeiten"
 msgid "refusing to work with credential missing protocol field"
 msgstr "Weigerung, mit fehlendem Protokoll in Zugangsdaten zu arbeiten"
 
-#: credential.c:395
+#: credential.c:396
 #, c-format
 msgid "url contains a newline in its %s component: %s"
 msgstr "URL enthält Zeilenumbruch in der %s Komponente: %s"
 
-#: credential.c:439
+#: credential.c:440
 #, c-format
 msgid "url has no scheme: %s"
 msgstr "URL hat kein Schema: %s"
 
-#: credential.c:512
+#: credential.c:513
 #, c-format
 msgid "credential url cannot be parsed: %s"
 msgstr "URL mit Zugangsdaten konnte nicht geparst werden: %s"
 
-#: date.c:138
+#: date.c:139
 msgid "in the future"
 msgstr "in der Zukunft"
 
-#: date.c:144
+#: date.c:145
 #, c-format
 msgid "%<PRIuMAX> second ago"
 msgid_plural "%<PRIuMAX> seconds ago"
 msgstr[0] "vor %<PRIuMAX> Sekunde"
 msgstr[1] "vor %<PRIuMAX> Sekunden"
 
-#: date.c:151
+#: date.c:152
 #, c-format
 msgid "%<PRIuMAX> minute ago"
 msgid_plural "%<PRIuMAX> minutes ago"
 msgstr[0] "vor %<PRIuMAX> Minute"
 msgstr[1] "vor %<PRIuMAX> Minuten"
 
-#: date.c:158
+#: date.c:159
 #, c-format
 msgid "%<PRIuMAX> hour ago"
 msgid_plural "%<PRIuMAX> hours ago"
 msgstr[0] "vor %<PRIuMAX> Stunde"
 msgstr[1] "vor %<PRIuMAX> Stunden"
 
-#: date.c:165
+#: date.c:166
 #, c-format
 msgid "%<PRIuMAX> day ago"
 msgid_plural "%<PRIuMAX> days ago"
 msgstr[0] "vor %<PRIuMAX> Tag"
 msgstr[1] "vor %<PRIuMAX> Tagen"
 
-#: date.c:171
+#: date.c:172
 #, c-format
 msgid "%<PRIuMAX> week ago"
 msgid_plural "%<PRIuMAX> weeks ago"
 msgstr[0] "vor %<PRIuMAX> Woche"
 msgstr[1] "vor %<PRIuMAX> Wochen"
 
-#: date.c:178
+#: date.c:179
 #, c-format
 msgid "%<PRIuMAX> month ago"
 msgid_plural "%<PRIuMAX> months ago"
 msgstr[0] "vor %<PRIuMAX> Monat"
 msgstr[1] "vor %<PRIuMAX> Monaten"
 
-#: date.c:189
+#: date.c:190
 #, c-format
 msgid "%<PRIuMAX> year"
 msgid_plural "%<PRIuMAX> years"
@@ -3288,14 +3383,14 @@ msgstr[0] "vor %<PRIuMAX> Jahr"
 msgstr[1] "vor %<PRIuMAX> Jahren"
 
 #. TRANSLATORS: "%s" is "<n> years"
-#: date.c:192
+#: date.c:193
 #, c-format
 msgid "%s, %<PRIuMAX> month ago"
 msgid_plural "%s, %<PRIuMAX> months ago"
 msgstr[0] "%s, und %<PRIuMAX> Monat"
 msgstr[1] "%s, und %<PRIuMAX> Monaten"
 
-#: date.c:197 date.c:202
+#: date.c:198 date.c:203
 #, c-format
 msgid "%<PRIuMAX> year ago"
 msgid_plural "%<PRIuMAX> years ago"
@@ -3329,10 +3424,14 @@ msgstr ""
 msgid "Marked %d islands, done.\n"
 msgstr "%d Delta-Islands markiert, fertig.\n"
 
-#: diff-merges.c:70
+#: diff-merges.c:81 gpg-interface.c:719 gpg-interface.c:734 ls-refs.c:37
+#: parallel-checkout.c:42 sequencer.c:2805 setup.c:563 builtin/am.c:203
+#: builtin/am.c:2243 builtin/am.c:2287 builtin/blame.c:724 builtin/blame.c:742
+#: builtin/fetch.c:792 builtin/pack-objects.c:3515 builtin/pull.c:45
+#: builtin/pull.c:47 builtin/pull.c:321
 #, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr "unbekannter Wert für --diff-merges: %s"
+msgid "invalid value for '%s': '%s'"
+msgstr "ungültiger Wert für '%s': '%s'"
 
 #: diff-lib.c:561
 msgid "--merge-base does not work with ranges"
@@ -3366,18 +3465,18 @@ msgstr ""
 "Kein Git-Repository. Nutzen Sie --no-index, um zwei Pfade außerhalb des "
 "Arbeitsverzeichnisses zu vergleichen."
 
-#: diff.c:158
+#: diff.c:159
 #, c-format
 msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
 msgstr ""
 "  Fehler beim Parsen des abgeschnittenen \"dirstat\" Prozentsatzes '%s'\n"
 
-#: diff.c:163
+#: diff.c:164
 #, c-format
 msgid "  Unknown dirstat parameter '%s'\n"
 msgstr "  Unbekannter \"dirstat\" Parameter '%s'\n"
 
-#: diff.c:299
+#: diff.c:300
 msgid ""
 "color moved setting must be one of 'no', 'default', 'blocks', 'zebra', "
 "'dimmed-zebra', 'plain'"
@@ -3385,7 +3484,7 @@ msgstr ""
 "\"color moved\"-Einstellung muss eines von diesen sein: 'no', 'default', "
 "'blocks', 'zebra', 'dimmed-zebra', 'plain'"
 
-#: diff.c:327
+#: diff.c:328
 #, c-format
 msgid ""
 "unknown color-moved-ws mode '%s', possible values are 'ignore-space-change', "
@@ -3394,7 +3493,7 @@ msgstr ""
 "Unbekannter color-moved-ws Modus '%s', mögliche Werte sind 'ignore-space-"
 "change', 'ignore-space-at-eol', 'ignore-all-space', 'allow-identation-change'"
 
-#: diff.c:335
+#: diff.c:336
 msgid ""
 "color-moved-ws: allow-indentation-change cannot be combined with other "
 "whitespace modes"
@@ -3402,12 +3501,12 @@ msgstr ""
 "color-moved-ws: allow-indentation-change kann nicht mit anderen\n"
 "Whitespace-Modi kombiniert werden."
 
-#: diff.c:412
+#: diff.c:413
 #, c-format
 msgid "Unknown value for 'diff.submodule' config variable: '%s'"
 msgstr "Unbekannter Wert in Konfigurationsvariable 'diff.submodule': '%s'"
 
-#: diff.c:472
+#: diff.c:473
 #, c-format
 msgid ""
 "Found errors in 'diff.dirstat' config variable:\n"
@@ -3416,32 +3515,32 @@ msgstr ""
 "Fehler in 'diff.dirstat' Konfigurationsvariable gefunden:\n"
 "%s"
 
-#: diff.c:4237
+#: diff.c:4282
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "externes Diff-Programm unerwartet beendet, angehalten bei %s"
 
-#: diff.c:4589
+#: diff.c:4677 parse-options.c:1114
 #, c-format
 msgid "options '%s', '%s', '%s', and '%s' cannot be used together"
 msgstr ""
 "die Optionen '%s', '%s', '%s' und '%s' können nicht gemeinsam verwendet "
 "werden"
 
-#: diff.c:4593 builtin/difftool.c:736 builtin/log.c:1982 builtin/worktree.c:506
+#: diff.c:4681 parse-options.c:1118 builtin/worktree.c:578
 #, c-format
 msgid "options '%s', '%s', and '%s' cannot be used together"
 msgstr ""
 "die Optionen '%s', '%s' und '%s' können nicht gemeinsam verwendet werden"
 
-#: diff.c:4597
+#: diff.c:4685
 #, c-format
 msgid "options '%s' and '%s' cannot be used together, use '%s' with '%s'"
 msgstr ""
 "die Optionen '%s' und '%s' können nicht gemeinsam verwendet werden, nutzen "
 "Sie '%s' mit '%s'"
 
-#: diff.c:4601
+#: diff.c:4689
 #, c-format
 msgid ""
 "options '%s' and '%s' cannot be used together, use '%s' with '%s' and '%s'"
@@ -3449,22 +3548,22 @@ msgstr ""
 "die Optionen '%s' und '%s' können nicht gemeinsam verwendet werden, nutzen "
 "Sie '%s' mit '%s' und '%s'"
 
-#: diff.c:4681
+#: diff.c:4769
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow erfordert genau eine Pfadspezifikation"
 
-#: diff.c:4729
+#: diff.c:4823
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "Ungültiger --stat Wert: %s"
 
-#: diff.c:4734 diff.c:4739 diff.c:4744 diff.c:4749 diff.c:5277
+#: diff.c:4828 diff.c:4833 diff.c:4838 diff.c:4843 diff.c:5319
 #: parse-options.c:217 parse-options.c:221
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s erwartet einen numerischen Wert."
 
-#: diff.c:4766
+#: diff.c:4860
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3473,42 +3572,42 @@ msgstr ""
 "Fehler beim Parsen des --dirstat/-X Optionsparameters:\n"
 "%s"
 
-#: diff.c:4851
+#: diff.c:4893
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "unbekannte Änderungsklasse '%c' in --diff-filter=%s"
 
-#: diff.c:4875
+#: diff.c:4917
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "unbekannter Wert nach ws-error-highlight=%.*s"
 
-#: diff.c:4889
+#: diff.c:4931
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "konnte '%s' nicht auflösen"
 
-#: diff.c:4939 diff.c:4945
+#: diff.c:4981 diff.c:4987
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s erwartet die Form <n>/<m>"
 
-#: diff.c:4957
+#: diff.c:4999
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s erwartet ein Zeichen, '%s' bekommen"
 
-#: diff.c:4978
+#: diff.c:5020
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "ungültiges --color-moved Argument: %s"
 
-#: diff.c:4997
+#: diff.c:5039
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "ungültiger Modus '%s' in --color-moved-ws"
 
-#: diff.c:5037
+#: diff.c:5079
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
@@ -3516,157 +3615,157 @@ msgstr ""
 "Option diff-algorithm akzeptiert: \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
 
-#: diff.c:5073 diff.c:5093
+#: diff.c:5115 diff.c:5135
 #, c-format
 msgid "invalid argument to %s"
 msgstr "ungültiges Argument für %s"
 
-#: diff.c:5197
+#: diff.c:5239
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr "ungültiger regulärer Ausdruck für -I gegeben: '%s'"
 
-#: diff.c:5246
+#: diff.c:5288
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "Fehler beim Parsen des --submodule Optionsparameters: '%s'"
 
-#: diff.c:5302
+#: diff.c:5344
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "ungültiges --word-diff Argument: %s"
 
-#: diff.c:5338
+#: diff.c:5380
 msgid "Diff output format options"
 msgstr "Diff-Optionen zu Ausgabeformaten"
 
-#: diff.c:5340 diff.c:5346
+#: diff.c:5382 diff.c:5388
 msgid "generate patch"
 msgstr "Patch erzeugen"
 
-#: diff.c:5343 builtin/log.c:179
+#: diff.c:5385 builtin/log.c:180
 msgid "suppress diff output"
 msgstr "Ausgabe der Unterschiede unterdrücken"
 
-#: diff.c:5348 diff.c:5462 diff.c:5469
+#: diff.c:5390 diff.c:5504 diff.c:5511
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5349 diff.c:5352
+#: diff.c:5391 diff.c:5394
 msgid "generate diffs with <n> lines context"
 msgstr "Unterschiede mit <n> Zeilen des Kontextes erstellen"
 
-#: diff.c:5354
+#: diff.c:5396
 msgid "generate the diff in raw format"
 msgstr "Unterschiede im Rohformat erstellen"
 
-#: diff.c:5357
+#: diff.c:5399
 msgid "synonym for '-p --raw'"
 msgstr "Synonym für '-p --raw'"
 
-#: diff.c:5361
+#: diff.c:5403
 msgid "synonym for '-p --stat'"
 msgstr "Synonym für '-p --stat'"
 
-#: diff.c:5365
+#: diff.c:5407
 msgid "machine friendly --stat"
 msgstr "maschinenlesbare Ausgabe von --stat"
 
-#: diff.c:5368
+#: diff.c:5410
 msgid "output only the last line of --stat"
 msgstr "nur die letzte Zeile von --stat ausgeben"
 
-#: diff.c:5370 diff.c:5378
+#: diff.c:5412 diff.c:5420
 msgid "<param1,param2>..."
 msgstr "<Parameter1,Parameter2>..."
 
-#: diff.c:5371
+#: diff.c:5413
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
 "die Verteilung des relativen Umfangs der Änderungen für jedes "
 "Unterverzeichnis ausgeben"
 
-#: diff.c:5375
+#: diff.c:5417
 msgid "synonym for --dirstat=cumulative"
 msgstr "Synonym für --dirstat=cumulative"
 
-#: diff.c:5379
+#: diff.c:5421
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "Synonym für --dirstat=files,Parameter1,Parameter2..."
 
-#: diff.c:5383
+#: diff.c:5425
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 "warnen, wenn Änderungen Konfliktmarker oder Whitespace-Fehler einbringen"
 
-#: diff.c:5386
+#: diff.c:5428
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr ""
 "gekürzte Zusammenfassung, wie z.B. Erstellungen, Umbenennungen und "
 "Änderungen der Datei-Rechte"
 
-#: diff.c:5389
+#: diff.c:5431
 msgid "show only names of changed files"
 msgstr "nur Dateinamen der geänderten Dateien anzeigen"
 
-#: diff.c:5392
+#: diff.c:5434
 msgid "show only names and status of changed files"
 msgstr "nur Dateinamen und Status der geänderten Dateien anzeigen"
 
-#: diff.c:5394
+#: diff.c:5436
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<Breite>[,<Namens-Breite>[,<Anzahl>]]"
 
-#: diff.c:5395
+#: diff.c:5437
 msgid "generate diffstat"
 msgstr "Zusammenfassung der Unterschiede erzeugen"
 
-#: diff.c:5397 diff.c:5400 diff.c:5403
+#: diff.c:5439 diff.c:5442 diff.c:5445
 msgid "<width>"
 msgstr "<Breite>"
 
-#: diff.c:5398
+#: diff.c:5440
 msgid "generate diffstat with a given width"
 msgstr "Zusammenfassung der Unterschiede mit gegebener Breite erzeugen"
 
-#: diff.c:5401
+#: diff.c:5443
 msgid "generate diffstat with a given name width"
 msgstr "Zusammenfassung der Unterschiede mit gegebener Namens-Breite erzeugen"
 
-#: diff.c:5404
+#: diff.c:5446
 msgid "generate diffstat with a given graph width"
 msgstr "Zusammenfassung der Unterschiede mit gegebener Graph-Breite erzeugen"
 
-#: diff.c:5406
+#: diff.c:5448
 msgid "<count>"
 msgstr "<Anzahl>"
 
-#: diff.c:5407
+#: diff.c:5449
 msgid "generate diffstat with limited lines"
 msgstr "Zusammenfassung der Unterschiede mit begrenzten Zeilen erzeugen"
 
-#: diff.c:5410
+#: diff.c:5452
 msgid "generate compact summary in diffstat"
 msgstr "kompakte Zusammenstellung in Zusammenfassung der Unterschiede erzeugen"
 
-#: diff.c:5413
+#: diff.c:5455
 msgid "output a binary diff that can be applied"
 msgstr "eine binäre Differenz ausgeben, dass angewendet werden kann"
 
-#: diff.c:5416
+#: diff.c:5458
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr "vollständige Objekt-Namen in den \"index\"-Zeilen anzeigen"
 
-#: diff.c:5418
+#: diff.c:5460
 msgid "show colored diff"
 msgstr "farbige Unterschiede anzeigen"
 
-#: diff.c:5419
+#: diff.c:5461
 msgid "<kind>"
 msgstr "<Art>"
 
-#: diff.c:5420
+#: diff.c:5462
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
@@ -3674,7 +3773,7 @@ msgstr ""
 "Whitespace-Fehler in den Zeilen 'context', 'old' oder 'new' bei den "
 "Unterschieden hervorheben"
 
-#: diff.c:5423
+#: diff.c:5465
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -3682,91 +3781,91 @@ msgstr ""
 "die Pfadnamen nicht verschleiern und NUL-Zeichen als Schlusszeichen in "
 "Ausgabefeldern bei --raw oder --numstat nutzen"
 
-#: diff.c:5426 diff.c:5429 diff.c:5432 diff.c:5541
+#: diff.c:5468 diff.c:5471 diff.c:5474 diff.c:5583
 msgid "<prefix>"
 msgstr "<Präfix>"
 
-#: diff.c:5427
+#: diff.c:5469
 msgid "show the given source prefix instead of \"a/\""
 msgstr "den gegebenen Quell-Präfix statt \"a/\" anzeigen"
 
-#: diff.c:5430
+#: diff.c:5472
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "den gegebenen Ziel-Präfix statt \"b/\" anzeigen"
 
-#: diff.c:5433
+#: diff.c:5475
 msgid "prepend an additional prefix to every line of output"
 msgstr "einen zusätzlichen Präfix bei jeder Ausgabezeile voranstellen"
 
-#: diff.c:5436
+#: diff.c:5478
 msgid "do not show any source or destination prefix"
 msgstr "keine Quell- oder Ziel-Präfixe anzeigen"
 
-#: diff.c:5439
+#: diff.c:5481
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr ""
 "Kontext zwischen Unterschied-Blöcken bis zur angegebenen Anzahl von Zeilen "
 "anzeigen"
 
-#: diff.c:5443 diff.c:5448 diff.c:5453
+#: diff.c:5485 diff.c:5490 diff.c:5495
 msgid "<char>"
 msgstr "<Zeichen>"
 
-#: diff.c:5444
+#: diff.c:5486
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "das Zeichen festlegen, das eine neue Zeile kennzeichnet (statt '+')"
 
-#: diff.c:5449
+#: diff.c:5491
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "das Zeichen festlegen, das eine alte Zeile kennzeichnet (statt '-')"
 
-#: diff.c:5454
+#: diff.c:5496
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "das Zeichen festlegen, das den Kontext kennzeichnet (statt ' ')"
 
-#: diff.c:5457
+#: diff.c:5499
 msgid "Diff rename options"
 msgstr "Diff-Optionen zur Umbenennung"
 
-#: diff.c:5458
+#: diff.c:5500
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5459
+#: diff.c:5501
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr ""
 "teile komplette Rewrite-Änderungen in Änderungen mit \"löschen\" und "
 "\"erstellen\""
 
-#: diff.c:5463
+#: diff.c:5505
 msgid "detect renames"
 msgstr "Umbenennungen erkennen"
 
-#: diff.c:5467
+#: diff.c:5509
 msgid "omit the preimage for deletes"
 msgstr "Preimage für Löschungen weglassen"
 
-#: diff.c:5470
+#: diff.c:5512
 msgid "detect copies"
 msgstr "Kopien erkennen"
 
-#: diff.c:5474
+#: diff.c:5516
 msgid "use unmodified files as source to find copies"
 msgstr "ungeänderte Dateien als Quelle zum Finden von Kopien nutzen"
 
-#: diff.c:5476
+#: diff.c:5518
 msgid "disable rename detection"
 msgstr "Erkennung von Umbenennungen deaktivieren"
 
-#: diff.c:5479
+#: diff.c:5521
 msgid "use empty blobs as rename source"
 msgstr "leere Blobs als Quelle von Umbenennungen nutzen"
 
-#: diff.c:5481
+#: diff.c:5523
 msgid "continue listing the history of a file beyond renames"
 msgstr "Auflistung der Historie einer Datei nach Umbenennung fortführen"
 
-#: diff.c:5484
+#: diff.c:5526
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
@@ -3774,164 +3873,164 @@ msgstr ""
 "Erkennung von Umbenennungen und Kopien verhindern, wenn die Anzahl der Ziele "
 "für Umbenennungen und Kopien das gegebene Limit überschreitet"
 
-#: diff.c:5486
+#: diff.c:5528
 msgid "Diff algorithm options"
 msgstr "Diff Algorithmus-Optionen"
 
-#: diff.c:5488
+#: diff.c:5530
 msgid "produce the smallest possible diff"
 msgstr "die kleinstmöglichen Änderungen erzeugen"
 
-#: diff.c:5491
+#: diff.c:5533
 msgid "ignore whitespace when comparing lines"
 msgstr "Whitespace-Änderungen beim Vergleich von Zeilen ignorieren"
 
-#: diff.c:5494
+#: diff.c:5536
 msgid "ignore changes in amount of whitespace"
 msgstr "Änderungen bei der Anzahl von Whitespace ignorieren"
 
-#: diff.c:5497
+#: diff.c:5539
 msgid "ignore changes in whitespace at EOL"
 msgstr "Whitespace-Änderungen am Zeilenende ignorieren"
 
-#: diff.c:5500
+#: diff.c:5542
 msgid "ignore carrier-return at the end of line"
 msgstr "den Zeilenumbruch am Ende der Zeile ignorieren"
 
-#: diff.c:5503
+#: diff.c:5545
 msgid "ignore changes whose lines are all blank"
 msgstr "Änderungen in leeren Zeilen ignorieren"
 
-#: diff.c:5505 diff.c:5527 diff.c:5530 diff.c:5575
+#: diff.c:5547 diff.c:5569 diff.c:5572 diff.c:5617
 msgid "<regex>"
 msgstr "<Regex>"
 
-#: diff.c:5506
+#: diff.c:5548
 msgid "ignore changes whose all lines match <regex>"
 msgstr ""
 "Änderungen ignorieren, bei denen alle Zeilen mit <Regex> übereinstimmen"
 
-#: diff.c:5509
+#: diff.c:5551
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr ""
 "Heuristik, um Grenzen der Änderungsblöcke für bessere Lesbarkeit zu "
 "verschieben"
 
-#: diff.c:5512
+#: diff.c:5554
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "Änderungen durch Nutzung des Algorithmus \"Patience Diff\" erzeugen"
 
-#: diff.c:5516
+#: diff.c:5558
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "Änderungen durch Nutzung des Algorithmus \"Histogram Diff\" erzeugen"
 
-#: diff.c:5518
+#: diff.c:5560
 msgid "<algorithm>"
 msgstr "<Algorithmus>"
 
-#: diff.c:5519
+#: diff.c:5561
 msgid "choose a diff algorithm"
 msgstr "einen Algorithmus für Änderungen wählen"
 
-#: diff.c:5521
+#: diff.c:5563
 msgid "<text>"
 msgstr "<Text>"
 
-#: diff.c:5522
+#: diff.c:5564
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "Änderungen durch Nutzung des Algorithmus \"Anchored Diff\" erzeugen"
 
-#: diff.c:5524 diff.c:5533 diff.c:5536
+#: diff.c:5566 diff.c:5575 diff.c:5578
 msgid "<mode>"
 msgstr "<Modus>"
 
-#: diff.c:5525
+#: diff.c:5567
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr "Wort-Änderungen zeigen, nutze <Modus>, um Wörter abzugrenzen"
 
-#: diff.c:5528
+#: diff.c:5570
 msgid "use <regex> to decide what a word is"
 msgstr "<Regex> nutzen, um zu entscheiden, was ein Wort ist"
 
-#: diff.c:5531
+#: diff.c:5573
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "entsprechend wie --word-diff=color --word-diff-regex=<Regex>"
 
-#: diff.c:5534
+#: diff.c:5576
 msgid "moved lines of code are colored differently"
 msgstr "verschobene Codezeilen sind andersfarbig"
 
-#: diff.c:5537
+#: diff.c:5579
 msgid "how white spaces are ignored in --color-moved"
 msgstr "wie Whitespaces in --color-moved ignoriert werden"
 
-#: diff.c:5540
+#: diff.c:5582
 msgid "Other diff options"
 msgstr "Andere Diff-Optionen"
 
-#: diff.c:5542
+#: diff.c:5584
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "wenn vom Unterverzeichnis aufgerufen, schließe Änderungen außerhalb aus und "
 "zeige relative Pfade an"
 
-#: diff.c:5546
+#: diff.c:5588
 msgid "treat all files as text"
 msgstr "alle Dateien als Text behandeln"
 
-#: diff.c:5548
+#: diff.c:5590
 msgid "swap two inputs, reverse the diff"
 msgstr "die beiden Eingaben vertauschen und die Änderungen umkehren"
 
-#: diff.c:5550
+#: diff.c:5592
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr ""
 "mit Exit-Status 1 beenden, wenn Änderungen vorhanden sind, andernfalls mit 0"
 
-#: diff.c:5552
+#: diff.c:5594
 msgid "disable all output of the program"
 msgstr "alle Ausgaben vom Programm deaktivieren"
 
-#: diff.c:5554
+#: diff.c:5596
 msgid "allow an external diff helper to be executed"
 msgstr "erlaube die Ausführung eines externes Programms für Änderungen"
 
-#: diff.c:5556
+#: diff.c:5598
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 "Führe externe Text-Konvertierungsfilter aus, wenn binäre Dateien vergleicht "
 "werden"
 
-#: diff.c:5558
+#: diff.c:5600
 msgid "<when>"
 msgstr "<wann>"
 
-#: diff.c:5559
+#: diff.c:5601
 msgid "ignore changes to submodules in the diff generation"
 msgstr ""
 "Änderungen in Submodulen während der Erstellung der Unterschiede ignorieren"
 
-#: diff.c:5562
+#: diff.c:5604
 msgid "<format>"
 msgstr "<Format>"
 
-#: diff.c:5563
+#: diff.c:5605
 msgid "specify how differences in submodules are shown"
 msgstr "angeben, wie Unterschiede in Submodulen gezeigt werden"
 
-#: diff.c:5567
+#: diff.c:5609
 msgid "hide 'git add -N' entries from the index"
 msgstr "'git add -N' Einträge vom Index verstecken"
 
-#: diff.c:5570
+#: diff.c:5612
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "'git add -N' Einträge im Index als echt behandeln"
 
-#: diff.c:5572
+#: diff.c:5614
 msgid "<string>"
 msgstr "<Zeichenkette>"
 
-#: diff.c:5573
+#: diff.c:5615
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
@@ -3939,7 +4038,7 @@ msgstr ""
 "nach Unterschieden suchen, welche die Anzahl des Vorkommens der angegebenen "
 "Zeichenkette verändern"
 
-#: diff.c:5576
+#: diff.c:5618
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
@@ -3947,37 +4046,37 @@ msgstr ""
 "nach Unterschieden suchen, welche die Anzahl des Vorkommens des angegebenen "
 "regulären Ausdrucks verändern"
 
-#: diff.c:5579
+#: diff.c:5621
 msgid "show all changes in the changeset with -S or -G"
 msgstr "alle Änderungen im Changeset mit -S oder -G anzeigen"
 
-#: diff.c:5582
+#: diff.c:5624
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr ""
 "<Zeichenkette> bei -S als erweiterten POSIX regulären Ausdruck behandeln"
 
-#: diff.c:5585
+#: diff.c:5627
 msgid "control the order in which files appear in the output"
 msgstr ""
 "die Reihenfolge kontrollieren, in der die Dateien in der Ausgabe erscheinen"
 
-#: diff.c:5586 diff.c:5589
+#: diff.c:5628 diff.c:5631
 msgid "<path>"
 msgstr "<Pfad>"
 
-#: diff.c:5587
+#: diff.c:5629
 msgid "show the change in the specified path first"
 msgstr "die Änderung des angegebenen Pfades zuerst anzeigen"
 
-#: diff.c:5590
+#: diff.c:5632
 msgid "skip the output to the specified path"
 msgstr "überspringe die Ausgabe bis zum angegebenen Pfad"
 
-#: diff.c:5592
+#: diff.c:5634
 msgid "<object-id>"
 msgstr "<Objekt-ID>"
 
-#: diff.c:5593
+#: diff.c:5635
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
@@ -3985,33 +4084,33 @@ msgstr ""
 "nach Unterschieden suchen, welche die Anzahl des Vorkommens des angegebenen "
 "Objektes verändern"
 
-#: diff.c:5595
+#: diff.c:5637
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5596
+#: diff.c:5638
 msgid "select files by diff type"
 msgstr "Dateien anhand der Art der Änderung wählen"
 
-#: diff.c:5598
+#: diff.c:5640
 msgid "<file>"
 msgstr "<Datei>"
 
-#: diff.c:5599
-msgid "Output to a specific file"
+#: diff.c:5641
+msgid "output to a specific file"
 msgstr "Ausgabe zu einer bestimmten Datei"
 
-#: diff.c:6257
+#: diff.c:6321
 msgid "exhaustive rename detection was skipped due to too many files."
 msgstr ""
 "genaue Erkennung für Umbenennungen wurde aufgrund zu vieler Dateien\n"
 "übersprungen."
 
-#: diff.c:6260
+#: diff.c:6324
 msgid "only found copies from modified paths due to too many files."
 msgstr "nur Kopien von geänderten Pfaden, aufgrund zu vieler Dateien, gefunden"
 
-#: diff.c:6263
+#: diff.c:6327
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -4064,22 +4163,22 @@ msgstr "deaktiviere Cone-Muster-Übereinstimmung"
 msgid "cannot use %s as an exclude file"
 msgstr "kann %s nicht als exclude-Filter benutzen"
 
-#: dir.c:2418
+#: dir.c:2419
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "konnte Verzeichnis '%s' nicht öffnen"
 
-#: dir.c:2720
+#: dir.c:2721
 msgid "failed to get kernel name and information"
 msgstr "Fehler beim Sammeln von Namen und Informationen zum Kernel"
 
-#: dir.c:2844
+#: dir.c:2846
 msgid "untracked cache is disabled on this system or location"
 msgstr ""
 "Cache für unversionierte Dateien ist auf diesem System oder\n"
 "für dieses Verzeichnis deaktiviert"
 
-#: dir.c:3112
+#: dir.c:3119
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -4087,17 +4186,17 @@ msgstr ""
 "Konnte keinen Verzeichnisnamen erraten.\n"
 "Bitte geben Sie ein Verzeichnis auf der Befehlszeile an."
 
-#: dir.c:3800
+#: dir.c:3807
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "Index-Datei in Repository %s beschädigt"
 
-#: dir.c:3847 dir.c:3852
+#: dir.c:3854 dir.c:3859
 #, c-format
 msgid "could not create directories for %s"
 msgstr "Konnte Verzeichnisse für '%s' nicht erstellen"
 
-#: dir.c:3881
+#: dir.c:3888
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "Konnte Git-Verzeichnis nicht von '%s' nach '%s' migrieren"
@@ -4116,7 +4215,7 @@ msgstr "Filtere Inhalt"
 msgid "could not stat file '%s'"
 msgstr "konnte Datei '%s' nicht lesen"
 
-#: environment.c:145
+#: environment.c:147
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "ungültiger Git-Namespace-Pfad \"%s\""
@@ -4147,249 +4246,276 @@ msgstr "git fetch-pack: ACK/NAK erwartet, '%s' bekommen"
 msgid "unable to write to remote"
 msgstr "konnte nicht zum Remote schreiben"
 
-#: fetch-pack.c:395 fetch-pack.c:1439
+#: fetch-pack.c:397 fetch-pack.c:1460
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "ungültige shallow-Zeile: %s"
 
-#: fetch-pack.c:401 fetch-pack.c:1445
+#: fetch-pack.c:403 fetch-pack.c:1466
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "ungültige unshallow-Zeile: %s"
 
-#: fetch-pack.c:403 fetch-pack.c:1447
+#: fetch-pack.c:405 fetch-pack.c:1468
 #, c-format
 msgid "object not found: %s"
 msgstr "Objekt nicht gefunden: %s"
 
-#: fetch-pack.c:406 fetch-pack.c:1450
+#: fetch-pack.c:408 fetch-pack.c:1471
 #, c-format
 msgid "error in object: %s"
 msgstr "Fehler in Objekt: %s"
 
-#: fetch-pack.c:408 fetch-pack.c:1452
+#: fetch-pack.c:410 fetch-pack.c:1473
 #, c-format
 msgid "no shallow found: %s"
 msgstr "kein shallow-Objekt gefunden: %s"
 
-#: fetch-pack.c:411 fetch-pack.c:1456
+#: fetch-pack.c:413 fetch-pack.c:1477
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "shallow/unshallow erwartet, %s bekommen"
 
-#: fetch-pack.c:451
+#: fetch-pack.c:453
 #, c-format
 msgid "got %s %d %s"
 msgstr "%s %d %s bekommen"
 
-#: fetch-pack.c:468
+#: fetch-pack.c:470
 #, c-format
 msgid "invalid commit %s"
 msgstr "ungültiger Commit %s"
 
-#: fetch-pack.c:499
+#: fetch-pack.c:501
 msgid "giving up"
 msgstr "gebe auf"
 
-#: fetch-pack.c:512 progress.c:339
+#: fetch-pack.c:514 progress.h:25
 msgid "done"
 msgstr "fertig"
 
-#: fetch-pack.c:524
+#: fetch-pack.c:526
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "%s (%d) %s bekommen"
 
-#: fetch-pack.c:560
+#: fetch-pack.c:562
 #, c-format
 msgid "Marking %s as complete"
 msgstr "Markiere %s als vollständig"
 
-#: fetch-pack.c:775
+#: fetch-pack.c:784
 #, c-format
 msgid "already have %s (%s)"
 msgstr "habe %s (%s) bereits"
 
-#: fetch-pack.c:861
+#: fetch-pack.c:870
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack: Fehler beim Starten des sideband demultiplexer"
 
-#: fetch-pack.c:869
+#: fetch-pack.c:878
 msgid "protocol error: bad pack header"
 msgstr "Protokollfehler: ungültiger Pack-Header"
 
-#: fetch-pack.c:965
+#: fetch-pack.c:974
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack: konnte %s nicht starten"
 
-#: fetch-pack.c:971
+#: fetch-pack.c:980
 msgid "fetch-pack: invalid index-pack output"
 msgstr "fetch-pack: ungültige index-pack Ausgabe"
 
-#: fetch-pack.c:988
+#: fetch-pack.c:997
 #, c-format
 msgid "%s failed"
 msgstr "%s fehlgeschlagen"
 
-#: fetch-pack.c:990
+#: fetch-pack.c:999
 msgid "error in sideband demultiplexer"
 msgstr "Fehler in sideband demultiplexer"
 
-#: fetch-pack.c:1035
+#: fetch-pack.c:1048
 #, c-format
 msgid "Server version is %.*s"
 msgstr "Server-Version ist %.*s"
 
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1052 fetch-pack.c:1058
-#: fetch-pack.c:1062 fetch-pack.c:1066 fetch-pack.c:1070 fetch-pack.c:1074
-#: fetch-pack.c:1078 fetch-pack.c:1082 fetch-pack.c:1086 fetch-pack.c:1090
-#: fetch-pack.c:1096 fetch-pack.c:1102 fetch-pack.c:1107 fetch-pack.c:1112
+#: fetch-pack.c:1056 fetch-pack.c:1062 fetch-pack.c:1065 fetch-pack.c:1071
+#: fetch-pack.c:1075 fetch-pack.c:1079 fetch-pack.c:1083 fetch-pack.c:1087
+#: fetch-pack.c:1091 fetch-pack.c:1095 fetch-pack.c:1099 fetch-pack.c:1103
+#: fetch-pack.c:1109 fetch-pack.c:1115 fetch-pack.c:1120 fetch-pack.c:1125
 #, c-format
 msgid "Server supports %s"
 msgstr "Server unterstützt %s"
 
-#: fetch-pack.c:1045
+#: fetch-pack.c:1058
 msgid "Server does not support shallow clients"
 msgstr "Server unterstützt keine shallow-Clients"
 
-#: fetch-pack.c:1105
+#: fetch-pack.c:1118
 msgid "Server does not support --shallow-since"
 msgstr "Server unterstützt kein --shallow-since"
 
-#: fetch-pack.c:1110
+#: fetch-pack.c:1123
 msgid "Server does not support --shallow-exclude"
 msgstr "Server unterstützt kein --shallow-exclude"
 
-#: fetch-pack.c:1114
+#: fetch-pack.c:1127
 msgid "Server does not support --deepen"
 msgstr "Server unterstützt kein --deepen"
 
-#: fetch-pack.c:1116
+#: fetch-pack.c:1129
 msgid "Server does not support this repository's object format"
 msgstr "Server unterstützt das Objekt-Format dieses Repositories nicht"
 
-#: fetch-pack.c:1129
+#: fetch-pack.c:1142
 msgid "no common commits"
 msgstr "keine gemeinsamen Commits"
 
-#: fetch-pack.c:1138 fetch-pack.c:1485 builtin/clone.c:1130
+#: fetch-pack.c:1151 fetch-pack.c:1506 builtin/clone.c:1166
 msgid "source repository is shallow, reject to clone."
 msgstr ""
 "Quelle ist ein Repository mit unvollständiger Historie (shallow), Klonen "
 "zurückgewiesen."
 
-#: fetch-pack.c:1144 fetch-pack.c:1681
+#: fetch-pack.c:1157 fetch-pack.c:1705
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: Abholen fehlgeschlagen."
 
-#: fetch-pack.c:1258
+#: fetch-pack.c:1271
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "Algorithmen stimmen nicht überein: Client %s; Server %s"
 
-#: fetch-pack.c:1262
+#: fetch-pack.c:1275
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "der Server unterstützt Algorithmus '%s' nicht"
 
-#: fetch-pack.c:1295
+#: fetch-pack.c:1308
 msgid "Server does not support shallow requests"
 msgstr "Server unterstützt keine shallow-Anfragen"
 
-#: fetch-pack.c:1302
+#: fetch-pack.c:1315
 msgid "Server supports filter"
 msgstr "Server unterstützt Filter"
 
-#: fetch-pack.c:1345 fetch-pack.c:2063
+#: fetch-pack.c:1358 fetch-pack.c:2087
 msgid "unable to write request to remote"
 msgstr "konnte Anfrage nicht zum Remote schreiben"
 
-#: fetch-pack.c:1363
+#: fetch-pack.c:1376
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "Fehler beim Lesen von Sektionskopf '%s'."
 
-#: fetch-pack.c:1369
+#: fetch-pack.c:1382
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "'%s' erwartet, '%s' empfangen"
 
-#: fetch-pack.c:1403
+#: fetch-pack.c:1416
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "Unerwartete Acknowledgment-Zeile: '%s'"
 
-#: fetch-pack.c:1408
+#: fetch-pack.c:1421
 #, c-format
 msgid "error processing acks: %d"
 msgstr "Fehler beim Verarbeiten von ACKS: %d"
 
-#: fetch-pack.c:1418
-msgid "expected packfile to be sent after 'ready'"
-msgstr "Erwartete Versand einer Packdatei nach 'ready'."
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#.
+#: fetch-pack.c:1435
+#, c-format
+msgid "expected packfile to be sent after '%s'"
+msgstr "erwartete Versand einer Packdatei nach '%s'"
 
-#: fetch-pack.c:1420
-msgid "expected no other sections to be sent after no 'ready'"
-msgstr "Erwartete keinen Versand einer anderen Sektion ohne 'ready'."
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#.
+#: fetch-pack.c:1441
+#, c-format
+msgid "expected no other sections to be sent after no '%s'"
+msgstr "erwartete keinen Versand anderer Sektionen nach keinem '%s'"
 
-#: fetch-pack.c:1461
+#: fetch-pack.c:1482
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "Fehler beim Verarbeiten von Shallow-Informationen: %d"
 
-#: fetch-pack.c:1510
+#: fetch-pack.c:1531
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "wanted-ref erwartet, '%s' bekommen"
 
-#: fetch-pack.c:1515
+#: fetch-pack.c:1536
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "unerwartetes wanted-ref: '%s'"
 
-#: fetch-pack.c:1520
+#: fetch-pack.c:1541
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "Fehler beim Verarbeiten von wanted-refs: %d"
 
-#: fetch-pack.c:1550
+#: fetch-pack.c:1571
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack: Antwort-Endpaket erwartet"
 
-#: fetch-pack.c:1959
+#: fetch-pack.c:1983
 msgid "no matching remote head"
 msgstr "kein übereinstimmender Remote-Branch"
 
-#: fetch-pack.c:1982 builtin/clone.c:581
+#: fetch-pack.c:2006 builtin/clone.c:587
 msgid "remote did not send all necessary objects"
 msgstr "Remote-Repository hat nicht alle erforderlichen Objekte gesendet"
 
-#: fetch-pack.c:2085
+#: fetch-pack.c:2109
 msgid "unexpected 'ready' from remote"
 msgstr "unerwartetes 'ready' von Remote-Repository"
 
-#: fetch-pack.c:2108
+#: fetch-pack.c:2132
 #, c-format
 msgid "no such remote ref %s"
 msgstr "Remote-Referenz %s nicht gefunden"
 
-#: fetch-pack.c:2111
+#: fetch-pack.c:2135
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "Der Server lehnt Anfrage nach nicht angebotenem Objekt %s ab."
 
-#: gpg-interface.c:329 gpg-interface.c:457 gpg-interface.c:974
-#: gpg-interface.c:990
+#: fsmonitor-ipc.c:119
+#, c-format
+msgid "fsmonitor_ipc__send_query: invalid path '%s'"
+msgstr "fsmonitor_ipc__send_query: ungültiger Pfad '%s'"
+
+#: fsmonitor-ipc.c:125
+#, c-format
+msgid "fsmonitor_ipc__send_query: unspecified error on '%s'"
+msgstr "fsmonitor_ipc__send_query: nicht spezifizierter Fehler bei '%s'"
+
+#: fsmonitor-ipc.c:155
+msgid "fsmonitor--daemon is not running"
+msgstr "fsmonitor--daemon läuft nicht"
+
+#: fsmonitor-ipc.c:164
+#, c-format
+msgid "could not send '%s' command to fsmonitor--daemon"
+msgstr "konnte '%s' Befehl nicht an fsmonitor--daemon senden"
+
+#: gpg-interface.c:329 gpg-interface.c:456 gpg-interface.c:995
+#: gpg-interface.c:1011
 msgid "could not create temporary file"
 msgstr "konnte temporäre Datei nicht erstellen"
 
-#: gpg-interface.c:332 gpg-interface.c:460
+#: gpg-interface.c:332 gpg-interface.c:459
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr "Fehler beim Schreiben der losgelösten Signatur nach '%s'"
 
-#: gpg-interface.c:451
+#: gpg-interface.c:450
 msgid ""
 "gpg.ssh.allowedSignersFile needs to be configured and exist for ssh "
 "signature verification"
@@ -4397,7 +4523,7 @@ msgstr ""
 "gpg.ssh.allowedSignersFile muss konfiguriert sein und für die Überprüfung "
 "der SSH-Signatur vorhanden sein"
 
-#: gpg-interface.c:480
+#: gpg-interface.c:479
 msgid ""
 "ssh-keygen -Y find-principals/verify is needed for ssh signature "
 "verification (available in openssh version 8.2p1+)"
@@ -4405,59 +4531,59 @@ msgstr ""
 "ssh-keygen -Y find-principals/verify wird für die Verifizierung der SSH-"
 "Signatur benötigt (verfügbar in openssh Version 8.2p1+)"
 
-#: gpg-interface.c:536
+#: gpg-interface.c:550
 #, c-format
 msgid "ssh signing revocation file configured but not found: %s"
 msgstr "SSH-Signatursperrdatei konfiguriert, aber nicht gefunden: %s"
 
-#: gpg-interface.c:624
+#: gpg-interface.c:638
 #, c-format
 msgid "bad/incompatible signature '%s'"
 msgstr "fehlerhafte/inkompatible Signatur '%s'"
 
-#: gpg-interface.c:801 gpg-interface.c:806
+#: gpg-interface.c:815 gpg-interface.c:820
 #, c-format
 msgid "failed to get the ssh fingerprint for key '%s'"
 msgstr "konnte SSH-Fingerabdruck für Schlüssel '%s' nicht bekommen"
 
-#: gpg-interface.c:829
+#: gpg-interface.c:843
 msgid ""
 "either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured"
 msgstr ""
 "entweder user.signingkey oder gpg.ssh.defaultKeyCommand muss konfiguriert "
 "sein"
 
-#: gpg-interface.c:851
+#: gpg-interface.c:865
 #, c-format
 msgid "gpg.ssh.defaultKeyCommand succeeded but returned no keys: %s %s"
 msgstr ""
 "gpg.ssh.defaultKeyCommand war erfolgreich, gab aber keine Schlüssel zurück: "
 "%s %s"
 
-#: gpg-interface.c:857
+#: gpg-interface.c:871
 #, c-format
 msgid "gpg.ssh.defaultKeyCommand failed: %s %s"
 msgstr "gpg.ssh.defaultKeyCommand fehlgeschlagen: %s %s"
 
-#: gpg-interface.c:945
+#: gpg-interface.c:966
 msgid "gpg failed to sign the data"
 msgstr "gpg beim Signieren der Daten fehlgeschlagen"
 
-#: gpg-interface.c:967
+#: gpg-interface.c:988
 msgid "user.signingkey needs to be set for ssh signing"
 msgstr "user.signingkey muss für die SSH-Signatur gesetzt sein"
 
-#: gpg-interface.c:978
+#: gpg-interface.c:999
 #, c-format
 msgid "failed writing ssh signing key to '%s'"
 msgstr "Fehler beim Schreiben des SSH-Signaturschlüssels nach '%s'"
 
-#: gpg-interface.c:996
+#: gpg-interface.c:1017
 #, c-format
 msgid "failed writing ssh signing key buffer to '%s'"
 msgstr "Fehler beim Schreiben des SSH-Signaturschlüsselpuffers nach '%s'"
 
-#: gpg-interface.c:1014
+#: gpg-interface.c:1035
 msgid ""
 "ssh-keygen -Y sign is needed for ssh signing (available in openssh version "
 "8.2p1+)"
@@ -4465,7 +4591,7 @@ msgstr ""
 "\"ssh-keygen -Y sign\" wird für die SSH-Signatur benötigt (verfügbar in "
 "openssh Version 8.2p1+)"
 
-#: gpg-interface.c:1026
+#: gpg-interface.c:1047
 #, c-format
 msgid "failed reading ssh signing data buffer from '%s'"
 msgstr "Fehler beim Lesen des SSH-Signaturdatenpuffers von '%s'"
@@ -4475,7 +4601,7 @@ msgstr "Fehler beim Lesen des SSH-Signaturdatenpuffers von '%s'"
 msgid "ignored invalid color '%.*s' in log.graphColors"
 msgstr "ungültige Farbe '%.*s' in log.graphColors ignoriert"
 
-#: grep.c:531
+#: grep.c:446
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
@@ -4483,111 +4609,111 @@ msgstr ""
 "Angegebenes Muster enthält NULL Byte (über -f <Datei>). Das wird nur mit -"
 "Punter PCRE v2 unterstützt."
 
-#: grep.c:1942
+#: grep.c:1859
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "'%s': konnte %s nicht lesen"
 
-#: grep.c:1959 setup.c:177 builtin/clone.c:302 builtin/diff.c:90
+#: grep.c:1876 setup.c:178 builtin/clone.c:308 builtin/diff.c:90
 #: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "Konnte '%s' nicht lesen"
 
-#: grep.c:1970
+#: grep.c:1887
 #, c-format
 msgid "'%s': short read"
 msgstr "'%s': read() zu kurz"
 
-#: help.c:24
+#: help.c:25
 msgid "start a working area (see also: git help tutorial)"
 msgstr "Arbeitsverzeichnis anlegen (siehe auch: git help tutorial)"
 
-#: help.c:25
+#: help.c:26
 msgid "work on the current change (see also: git help everyday)"
 msgstr "an aktuellen Änderungen arbeiten (siehe auch: git help everyday)"
 
-#: help.c:26
+#: help.c:27
 msgid "examine the history and state (see also: git help revisions)"
 msgstr "Historie und Status untersuchen (siehe auch: git help revisions)"
 
-#: help.c:27
+#: help.c:28
 msgid "grow, mark and tweak your common history"
 msgstr "Historie erweitern und bearbeiten"
 
-#: help.c:28
+#: help.c:29
 msgid "collaborate (see also: git help workflows)"
 msgstr "mit anderen zusammenarbeiten (siehe auch: git help workflows)"
 
-#: help.c:32
+#: help.c:33
 msgid "Main Porcelain Commands"
 msgstr "Hauptbefehle"
 
-#: help.c:33
+#: help.c:34
 msgid "Ancillary Commands / Manipulators"
 msgstr "Nebenbefehle / Manipulationen"
 
-#: help.c:34
+#: help.c:35
 msgid "Ancillary Commands / Interrogators"
 msgstr "Nebenbefehle / Abfragen"
 
-#: help.c:35
+#: help.c:36
 msgid "Interacting with Others"
 msgstr "mit anderen interagieren"
 
-#: help.c:36
+#: help.c:37
 msgid "Low-level Commands / Manipulators"
 msgstr "Systembefehle / Manipulationen"
 
-#: help.c:37
+#: help.c:38
 msgid "Low-level Commands / Interrogators"
 msgstr "Systembefehle / Abfragen"
 
-#: help.c:38
+#: help.c:39
 msgid "Low-level Commands / Syncing Repositories"
 msgstr "Systembefehle / Repositories synchronisieren"
 
-#: help.c:39
+#: help.c:40
 msgid "Low-level Commands / Internal Helpers"
 msgstr "Systembefehle / Interne Hilfsbefehle"
 
-#: help.c:313
+#: help.c:316
 #, c-format
 msgid "available git commands in '%s'"
 msgstr "Vorhandene Git-Befehle in '%s'"
 
-#: help.c:320
+#: help.c:323
 msgid "git commands available from elsewhere on your $PATH"
 msgstr "Vorhandene Git-Befehle anderswo in Ihrem $PATH"
 
-#: help.c:329
+#: help.c:332
 msgid "These are common Git commands used in various situations:"
 msgstr "Allgemeine Git-Befehle, verwendet in verschiedenen Situationen:"
 
-#: help.c:378 git.c:100
+#: help.c:382 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "Nicht unterstützte Art zur Befehlsauflistung '%s'."
 
-#: help.c:418
+#: help.c:422
 msgid "The Git concept guides are:"
 msgstr "Die Git-Konzeptanleitungen sind:"
 
-#: help.c:442
-msgid "See 'git help <command>' to read about a specific subcommand"
-msgstr ""
-"Siehe 'git help <Befehl>', um mehr über einen spezifischen Unterbefehl zu "
-"lesen."
-
-#: help.c:447
+#: help.c:446
 msgid "External commands"
 msgstr "Externe Befehle"
 
-#: help.c:462
+#: help.c:468
 msgid "Command aliases"
 msgstr "Alias-Befehle"
 
-#: help.c:543
+#: help.c:486
+msgid "See 'git help <command>' to read about a specific subcommand"
+msgstr ""
+"Siehe 'git help <Befehl>', um mehr über einen spezifischen Unterbefehl zu "
+"lesen."
+
+#: help.c:563
 #, c-format
 msgid ""
 "'%s' appears to be a git command, but we were not\n"
@@ -4596,37 +4722,37 @@ msgstr ""
 "'%s' scheint ein git-Befehl zu sein, konnte aber\n"
 "nicht ausgeführt werden. Vielleicht ist git-%s fehlerhaft?"
 
-#: help.c:565 help.c:662
+#: help.c:585 help.c:682
 #, c-format
 msgid "git: '%s' is not a git command. See 'git --help'."
 msgstr "git: '%s' ist kein Git-Befehl. Siehe 'git --help'."
 
-#: help.c:613
+#: help.c:633
 msgid "Uh oh. Your system reports no Git commands at all."
 msgstr "Uh oh. Keine Git-Befehle auf Ihrem System vorhanden."
 
-#: help.c:635
+#: help.c:655
 #, c-format
 msgid "WARNING: You called a Git command named '%s', which does not exist."
 msgstr ""
 "WARNUNG: Sie haben Git-Befehl '%s' ausgeführt, welcher nicht existiert."
 
-#: help.c:640
+#: help.c:660
 #, c-format
 msgid "Continuing under the assumption that you meant '%s'."
 msgstr "Setze fort unter der Annahme, dass Sie '%s' meinten."
 
-#: help.c:646
+#: help.c:666
 #, c-format
 msgid "Run '%s' instead [y/N]? "
 msgstr "Stattdessen '%s' ausführen (y/N)? "
 
-#: help.c:654
+#: help.c:674
 #, c-format
 msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
 msgstr "Setze in %0.1f Sekunden fort unter der Annahme, dass Sie '%s' meinten."
 
-#: help.c:666
+#: help.c:686
 msgid ""
 "\n"
 "The most similar command is"
@@ -4640,16 +4766,16 @@ msgstr[1] ""
 "\n"
 "Die ähnlichsten Befehle sind"
 
-#: help.c:706
+#: help.c:729
 msgid "git version [<options>]"
 msgstr "git version [<Optionen>]"
 
-#: help.c:761
+#: help.c:784
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s: %s - %s"
 
-#: help.c:765
+#: help.c:788
 msgid ""
 "\n"
 "Did you mean this?"
@@ -4663,7 +4789,7 @@ msgstr[1] ""
 "\n"
 "Haben Sie eines von diesen gemeint?"
 
-#: hook.c:27
+#: hook.c:28
 #, c-format
 msgid ""
 "The '%s' hook was ignored because it's not set as executable.\n"
@@ -4673,15 +4799,20 @@ msgstr ""
 "Sie können diese Warnung mit `git config advice.ignoredHook false` "
 "deaktivieren."
 
-#: ident.c:353
+#: hook.c:87
+#, c-format
+msgid "Couldn't start hook '%s'\n"
+msgstr "Konnte Hook '%s' nicht starten\n"
+
+#: ident.c:354
 msgid "Author identity unknown\n"
 msgstr "Identität des Autors unbekannt\n"
 
-#: ident.c:356
+#: ident.c:357
 msgid "Committer identity unknown\n"
 msgstr "Identität des Commit-Erstellers unbekannt\n"
 
-#: ident.c:362
+#: ident.c:363
 msgid ""
 "\n"
 "*** Please tell me who you are.\n"
@@ -4707,71 +4838,71 @@ msgstr ""
 "Lassen Sie die Option \"--global\" weg, um die Identität nur\n"
 "für dieses Repository zu setzen.\n"
 
-#: ident.c:397
+#: ident.c:398
 msgid "no email was given and auto-detection is disabled"
 msgstr "keine E-Mail angegeben und automatische Erkennung ist deaktiviert"
 
-#: ident.c:402
+#: ident.c:403
 #, c-format
 msgid "unable to auto-detect email address (got '%s')"
 msgstr "Konnte die E-Mail-Adresse nicht automatisch erkennen ('%s' erhalten)"
 
-#: ident.c:419
+#: ident.c:420
 msgid "no name was given and auto-detection is disabled"
 msgstr "kein Name angegeben und automatische Erkennung ist deaktiviert"
 
-#: ident.c:425
+#: ident.c:426
 #, c-format
 msgid "unable to auto-detect name (got '%s')"
 msgstr "konnte Namen nicht automatisch erkennen ('%s' erhalten)"
 
-#: ident.c:433
+#: ident.c:434
 #, c-format
 msgid "empty ident name (for <%s>) not allowed"
 msgstr "Leerer Name in Identifikation (für <%s>) nicht erlaubt."
 
-#: ident.c:439
+#: ident.c:440
 #, c-format
 msgid "name consists only of disallowed characters: %s"
 msgstr "Name besteht nur aus nicht erlaubten Zeichen: %s"
 
-#: ident.c:454 builtin/commit.c:648
+#: ident.c:455 builtin/commit.c:649
 #, c-format
 msgid "invalid date format: %s"
 msgstr "Ungültiges Datumsformat: %s"
 
-#: list-objects-filter-options.c:83
+#: list-objects-filter-options.c:68
 msgid "expected 'tree:<depth>'"
 msgstr "'tree:<Tiefe>' erwartet"
 
-#: list-objects-filter-options.c:98
+#: list-objects-filter-options.c:83
 msgid "sparse:path filters support has been dropped"
 msgstr "Keine Unterstützung für sparse:path Filter mehr"
 
-#: list-objects-filter-options.c:105
+#: list-objects-filter-options.c:90
 #, c-format
 msgid "'%s' for 'object:type=<type>' is not a valid object type"
 msgstr "'%s' für 'object:type=<Typ>' ist kein gültiger Objekttyp"
 
-#: list-objects-filter-options.c:124
+#: list-objects-filter-options.c:109
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "Ungültige filter-spec '%s'"
 
-#: list-objects-filter-options.c:140
+#: list-objects-filter-options.c:125
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
 msgstr "Zeichen in sub-filter-spec muss maskiert werden: '%c'"
 
-#: list-objects-filter-options.c:182
+#: list-objects-filter-options.c:167
 msgid "expected something after combine:"
 msgstr "erwartete etwas nach 'combine:'"
 
-#: list-objects-filter-options.c:264
+#: list-objects-filter-options.c:249
 msgid "multiple filter-specs cannot be combined"
 msgstr "mehrere filter-specs können nicht kombiniert werden"
 
-#: list-objects-filter-options.c:376
+#: list-objects-filter-options.c:365
 msgid "unable to upgrade repository format to support partial clone"
 msgstr ""
 "Repository-Format konnte nicht erweitert werden, um partielles Klonen zu "
@@ -4787,18 +4918,18 @@ msgstr "konnte nicht auf partiellen Blob '%s' zugreifen"
 msgid "unable to parse sparse filter data in %s"
 msgstr "konnte partielle Filter-Daten in %s nicht parsen"
 
-#: list-objects.c:127
+#: list-objects.c:144
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
 msgstr ""
 "Eintrag '%s' im Tree-Objekt %s hat Tree-Modus, aber ist kein Tree-Objekt"
 
-#: list-objects.c:140
+#: list-objects.c:157
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr "Eintrag '%s' im Tree-Objekt %s hat Blob-Modus, aber ist kein Blob"
 
-#: list-objects.c:398
+#: list-objects.c:415
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "Konnte Root-Tree-Objekt für Commit %s nicht laden."
@@ -4828,17 +4959,12 @@ msgstr ""
 msgid "Unable to create '%s.lock': %s"
 msgstr "Konnte '%s.lock' nicht erstellen: %s"
 
-#: ls-refs.c:37
-#, c-format
-msgid "invalid value '%s' for lsrefs.unborn"
-msgstr "ungültiger Wert '%s' für lsrefs.unborn"
-
-#: ls-refs.c:174
+#: ls-refs.c:175
 #, c-format
 msgid "unexpected line: '%s'"
 msgstr "unerwartete Zeile: '%s'"
 
-#: ls-refs.c:178
+#: ls-refs.c:179
 msgid "expected flush after ls-refs arguments"
 msgstr "erwartete Flush nach Argumenten für die Auflistung der Referenzen"
 
@@ -4846,37 +4972,37 @@ msgstr "erwartete Flush nach Argumenten für die Auflistung der Referenzen"
 msgid "quoted CRLF detected"
 msgstr "angeführtes CRLF entdeckt"
 
-#: mailinfo.c:1254 builtin/am.c:184 builtin/mailinfo.c:46
+#: mailinfo.c:1254 builtin/am.c:185 builtin/mailinfo.c:46
 #, c-format
 msgid "bad action '%s' for '%s'"
 msgstr "ungültige Aktion '%s' für '%s'"
 
-#: merge-ort.c:1584 merge-recursive.c:1211
+#: merge-ort.c:1630 merge-recursive.c:1214
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "Fehler beim Merge von Submodul %s (nicht ausgecheckt)."
 
-#: merge-ort.c:1593 merge-recursive.c:1218
+#: merge-ort.c:1639 merge-recursive.c:1221
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "Fehler beim Merge von Submodul %s (Commits nicht vorhanden)."
 
-#: merge-ort.c:1602 merge-recursive.c:1225
+#: merge-ort.c:1648 merge-recursive.c:1228
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr "Fehler beim Merge von Submodul %s (Commits folgen keiner Merge-Basis)"
 
-#: merge-ort.c:1612 merge-ort.c:1620
+#: merge-ort.c:1658 merge-ort.c:1666
 #, c-format
 msgid "Note: Fast-forwarding submodule %s to %s"
 msgstr "Hinweis: Spule Submodul %s vor zu %s"
 
-#: merge-ort.c:1642
+#: merge-ort.c:1688
 #, c-format
 msgid "Failed to merge submodule %s"
 msgstr "Fehler beim Zusammenführen von Submodul %s"
 
-#: merge-ort.c:1649
+#: merge-ort.c:1695
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but a possible merge resolution exists:\n"
@@ -4886,7 +5012,7 @@ msgstr ""
 "Auflösung des Merges vorhanden:\n"
 "%s\n"
 
-#: merge-ort.c:1653 merge-recursive.c:1281
+#: merge-ort.c:1699 merge-recursive.c:1284
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -4903,7 +5029,7 @@ msgstr ""
 "\n"
 "hinzu, um diesen Vorschlag zu akzeptieren.\n"
 
-#: merge-ort.c:1666
+#: merge-ort.c:1712
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but multiple possible merges exist:\n"
@@ -4913,21 +5039,21 @@ msgstr ""
 "sind vorhanden:\n"
 "%s"
 
-#: merge-ort.c:1887 merge-recursive.c:1372
+#: merge-ort.c:1937 merge-recursive.c:1375
 msgid "Failed to execute internal merge"
 msgstr "Fehler bei Ausführung des internen Merges"
 
-#: merge-ort.c:1892 merge-recursive.c:1377
+#: merge-ort.c:1942 merge-recursive.c:1380
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "Konnte %s nicht zur Datenbank hinzufügen"
 
-#: merge-ort.c:1899 merge-recursive.c:1410
+#: merge-ort.c:1949 merge-recursive.c:1413
 #, c-format
 msgid "Auto-merging %s"
 msgstr "automatischer Merge von %s"
 
-#: merge-ort.c:2038 merge-recursive.c:2132
+#: merge-ort.c:2088 merge-recursive.c:2135
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -4938,7 +5064,7 @@ msgstr ""
 "Weg von impliziter Verzeichnisumbenennung, die versucht, einen oder mehrere\n"
 "Pfade dahin zu setzen: %s."
 
-#: merge-ort.c:2048 merge-recursive.c:2142
+#: merge-ort.c:2098 merge-recursive.c:2145
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -4949,7 +5075,7 @@ msgstr ""
 "%s mappen; implizite Verzeichnisumbenennungen versuchten diese Pfade dahin\n"
 "zu setzen: %s"
 
-#: merge-ort.c:2106
+#: merge-ort.c:2156
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to rename %s to; it was "
@@ -4960,7 +5086,7 @@ msgstr ""
 "ist; es wurde zu mehreren anderen Verzeichnissen umbenannt, ohne dass ein "
 "Ziel die Mehrheit der Dateien erhält."
 
-#: merge-ort.c:2260 merge-recursive.c:2478
+#: merge-ort.c:2310 merge-recursive.c:2481
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
@@ -4969,7 +5095,7 @@ msgstr ""
 "WARNUNG: Vermeide Umbenennung %s -> %s von %s, weil %s selbst umbenannt "
 "wurde."
 
-#: merge-ort.c:2400 merge-recursive.c:3261
+#: merge-ort.c:2450 merge-recursive.c:3264
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
@@ -4978,7 +5104,7 @@ msgstr ""
 "Pfad aktualisiert: %s hinzugefügt in %s innerhalb eines Verzeichnisses, das "
 "umbenannt wurde in %s; verschiebe es nach %s."
 
-#: merge-ort.c:2407 merge-recursive.c:3268
+#: merge-ort.c:2457 merge-recursive.c:3271
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
@@ -4987,7 +5113,7 @@ msgstr ""
 "Pfad aktualisiert: %s umbenannt nach %s in %s, innerhalb eines "
 "Verzeichnisses, das umbenannt wurde in %s; verschiebe es nach %s."
 
-#: merge-ort.c:2420 merge-recursive.c:3264
+#: merge-ort.c:2470 merge-recursive.c:3267
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed "
@@ -4996,7 +5122,7 @@ msgstr ""
 "KONFLIKT (Speicherort): %s hinzugefügt in %s innerhalb eines Verzeichnisses, "
 "das umbenannt wurde in %s, es sollte vielleicht nach %s verschoben werden."
 
-#: merge-ort.c:2428 merge-recursive.c:3271
+#: merge-ort.c:2478 merge-recursive.c:3274
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
@@ -5006,13 +5132,13 @@ msgstr ""
 "Verzeichnisses, das umbenannt wurde in %s, es sollte vielleicht nach %s "
 "verschoben werden."
 
-#: merge-ort.c:2584
+#: merge-ort.c:2634
 #, c-format
 msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
 msgstr ""
 "KONFLIKT (umbenennen/umbenennen): %s zu %s in %s umbenannt und zu %s in %s."
 
-#: merge-ort.c:2679
+#: merge-ort.c:2729
 #, c-format
 msgid ""
 "CONFLICT (rename involved in collision): rename of %s -> %s has content "
@@ -5023,23 +5149,23 @@ msgstr ""
 "Inhaltskonflikte UND kollidiert mit einem anderen Pfad; dies kann zu "
 "verschachtelten Konfliktmarkierungen führen."
 
-#: merge-ort.c:2698 merge-ort.c:2722
+#: merge-ort.c:2748 merge-ort.c:2772
 #, c-format
 msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
 msgstr ""
 "KONFLIKT (umbenennen/löschen): %s zu %s in %s umbenannt, aber in %s gelöscht."
 
-#: merge-ort.c:3212 merge-recursive.c:3022
+#: merge-ort.c:3261 merge-recursive.c:3025
 #, c-format
 msgid "cannot read object %s"
 msgstr "kann Objekt %s nicht lesen"
 
-#: merge-ort.c:3215 merge-recursive.c:3025
+#: merge-ort.c:3264 merge-recursive.c:3028
 #, c-format
 msgid "object %s is not a blob"
 msgstr "Objekt %s ist kein Blob"
 
-#: merge-ort.c:3644
+#: merge-ort.c:3693
 #, c-format
 msgid ""
 "CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
@@ -5048,7 +5174,7 @@ msgstr ""
 "KONFLIKT (Datei/Verzeichnis): Verzeichnis im Weg von %s aus %s; stattdessen "
 "nach %s verschieben."
 
-#: merge-ort.c:3721
+#: merge-ort.c:3770
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed both "
@@ -5058,7 +5184,7 @@ msgstr ""
 "Seite; beide wurden umbenannt, damit jeder irgendwo aufgezeichnet werden "
 "kann."
 
-#: merge-ort.c:3728
+#: merge-ort.c:3777
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed one "
@@ -5068,24 +5194,24 @@ msgstr ""
 "Seite; eines der beiden wurde umbenannt, damit jeder irgendwo aufgezeichnet "
 "werden kann."
 
-#: merge-ort.c:3819 merge-recursive.c:3101
+#: merge-ort.c:3866 merge-recursive.c:3104
 msgid "content"
 msgstr "Inhalt"
 
-#: merge-ort.c:3821 merge-recursive.c:3105
+#: merge-ort.c:3868 merge-recursive.c:3108
 msgid "add/add"
 msgstr "hinzufügen/hinzufügen"
 
-#: merge-ort.c:3823 merge-recursive.c:3150
+#: merge-ort.c:3870 merge-recursive.c:3153
 msgid "submodule"
 msgstr "Submodul"
 
-#: merge-ort.c:3825 merge-recursive.c:3151
+#: merge-ort.c:3872 merge-recursive.c:3154
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "KONFLIKT (%s): Merge-Konflikt in %s"
 
-#: merge-ort.c:3869
+#: merge-ort.c:3916
 #, c-format
 msgid ""
 "CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
@@ -5094,7 +5220,7 @@ msgstr ""
 "KONFLIKT (ändern/löschen): %s gelöscht in %s und geändert in %s. Stand %s "
 "von %s wurde im Arbeitsbereich gelassen."
 
-#: merge-ort.c:4165
+#: merge-ort.c:4212
 #, c-format
 msgid ""
 "Note: %s not up to date and in way of checking out conflicted version; old "
@@ -5106,13 +5232,13 @@ msgstr ""
 #. TRANSLATORS: The %s arguments are: 1) tree hash of a merge
 #. base, and 2-3) the trees for the two trees we're merging.
 #.
-#: merge-ort.c:4534
+#: merge-ort.c:4586
 #, c-format
 msgid "collecting merge info failed for trees %s, %s, %s"
 msgstr ""
 "Sammeln von Merge-Informationen für die Referenzen %s, %s, %s fehlgeschlagen"
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3716
+#: merge-ort-wrappers.c:13 merge-recursive.c:3723
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -5122,7 +5248,7 @@ msgstr ""
 "überschrieben werden:\n"
 "  %s"
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3482 builtin/merge.c:405
+#: merge-ort-wrappers.c:33 merge-recursive.c:3485 builtin/merge.c:405
 msgid "Already up to date."
 msgstr "Bereits aktuell."
 
@@ -5161,7 +5287,7 @@ msgstr ": vielleicht ein Verzeichnis/Datei-Konflikt?"
 msgid "refusing to lose untracked file at '%s'"
 msgstr "verweigere, da unversionierte Dateien in '%s' verloren gehen würden"
 
-#: merge-recursive.c:956 builtin/cat-file.c:41
+#: merge-recursive.c:956 builtin/cat-file.c:47
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "kann Objekt %s '%s' nicht lesen"
@@ -5186,45 +5312,45 @@ msgstr "Fehler beim Erstellen einer symbolischen Verknüpfung für '%s': %s"
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "weiß nicht was mit %06o %s '%s' zu machen ist"
 
-#: merge-recursive.c:1233 merge-recursive.c:1246
+#: merge-recursive.c:1236 merge-recursive.c:1249
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "Spule Submodul %s zu dem folgenden Commit vor:"
 
-#: merge-recursive.c:1236 merge-recursive.c:1249
+#: merge-recursive.c:1239 merge-recursive.c:1252
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "Spule Submodul %s vor"
 
-#: merge-recursive.c:1273
+#: merge-recursive.c:1276
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 "Fehler beim Merge von Submodule %s (dem Merge nachfolgende Commits nicht "
 "gefunden)"
 
-#: merge-recursive.c:1277
+#: merge-recursive.c:1280
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "Fehler beim Merge von Submodul %s (kein Vorspulen)"
 
-#: merge-recursive.c:1278
+#: merge-recursive.c:1281
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "Mögliche Auflösung des Merges für Submodul gefunden:\n"
 
-#: merge-recursive.c:1290
+#: merge-recursive.c:1293
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr "Fehler beim Merge von Submodul %s (mehrere Merges gefunden)"
 
-#: merge-recursive.c:1434
+#: merge-recursive.c:1437
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr ""
 "Fehler: Verweigere unversionierte Datei bei %s zu verlieren;\n"
 "schreibe stattdessen nach %s."
 
-#: merge-recursive.c:1506
+#: merge-recursive.c:1509
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5233,7 +5359,7 @@ msgstr ""
 "KONFLIKT (%s/löschen): %s gelöscht in %s und %s in %s. Stand %s von %s wurde "
 "im Arbeitsbereich gelassen."
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1514
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5242,7 +5368,7 @@ msgstr ""
 "KONFLIKT (%s/löschen): %s gelöscht in %s und %s nach %s in %s. Stand %s von "
 "%s wurde im Arbeitsbereich gelassen."
 
-#: merge-recursive.c:1518
+#: merge-recursive.c:1521
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5251,7 +5377,7 @@ msgstr ""
 "KONFLIKT (%s/löschen): %s gelöscht in %s und %s in %s. Stand %s von %s wurde "
 "im Arbeitsbereich bei %s gelassen."
 
-#: merge-recursive.c:1523
+#: merge-recursive.c:1526
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5260,46 +5386,46 @@ msgstr ""
 "KONFLIKT (%s/löschen): %s gelöscht in %s und %s nach %s in %s. Stand %s von "
 "%s wurde im Arbeitsbereich bei %s gelassen."
 
-#: merge-recursive.c:1558
+#: merge-recursive.c:1561
 msgid "rename"
 msgstr "umbenennen"
 
-#: merge-recursive.c:1558
+#: merge-recursive.c:1561
 msgid "renamed"
 msgstr "umbenannt"
 
-#: merge-recursive.c:1609 merge-recursive.c:2515 merge-recursive.c:3178
+#: merge-recursive.c:1612 merge-recursive.c:2518 merge-recursive.c:3181
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "Verweigere geänderte Datei bei %s zu verlieren."
 
-#: merge-recursive.c:1619
+#: merge-recursive.c:1622
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
 "Verweigere unversionierte Datei bei %s zu verlieren, auch wenn diese im Weg "
 "ist."
 
-#: merge-recursive.c:1677
+#: merge-recursive.c:1680
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "KONFLIKT (umbenennen/hinzufügen): Benenne um %s->%s in %s. %s hinzugefügt in "
 "%s"
 
-#: merge-recursive.c:1708
+#: merge-recursive.c:1711
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s ist ein Verzeichnis in %s, füge es stattdessen als %s hinzu"
 
-#: merge-recursive.c:1713
+#: merge-recursive.c:1716
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr ""
 "Verweigere unversionierte Datei bei %s zu verlieren; füge stattdessen %s "
 "hinzu"
 
-#: merge-recursive.c:1740
+#: merge-recursive.c:1743
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -5308,18 +5434,18 @@ msgstr ""
 "KONFLIKT (umbenennen/umbenennen): Benenne um \"%s\"->\"%s\" in Branch \"%s\" "
 "und \"%s\"->\"%s\" in Branch \"%s\"%s"
 
-#: merge-recursive.c:1745
+#: merge-recursive.c:1748
 msgid " (left unresolved)"
 msgstr " (bleibt unaufgelöst)"
 
-#: merge-recursive.c:1837
+#: merge-recursive.c:1840
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "KONFLIKT (umbenennen/umbenennen): Benenne um %s->%s in %s. Benenne um %s->%s "
 "in %s"
 
-#: merge-recursive.c:2100
+#: merge-recursive.c:2103
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -5332,7 +5458,7 @@ msgstr ""
 "wobei\n"
 "keines dieser Ziele die Mehrheit der Dateien erhielt."
 
-#: merge-recursive.c:2234
+#: merge-recursive.c:2237
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -5341,80 +5467,80 @@ msgstr ""
 "KONFLIKT (umbenennen/umbenennen): Benenne Verzeichnis um %s->%s in %s.\n"
 "Benenne Verzeichnis um %s->%s in %s"
 
-#: merge-recursive.c:3089
+#: merge-recursive.c:3092
 msgid "modify"
 msgstr "ändern"
 
-#: merge-recursive.c:3089
+#: merge-recursive.c:3092
 msgid "modified"
 msgstr "geändert"
 
-#: merge-recursive.c:3128
+#: merge-recursive.c:3131
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "%s ausgelassen (Ergebnis des Merges existiert bereits)"
 
-#: merge-recursive.c:3181
+#: merge-recursive.c:3184
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Füge stattdessen als %s hinzu"
 
-#: merge-recursive.c:3385
+#: merge-recursive.c:3388
 #, c-format
 msgid "Removing %s"
 msgstr "Entferne %s"
 
-#: merge-recursive.c:3408
+#: merge-recursive.c:3411
 msgid "file/directory"
 msgstr "Datei/Verzeichnis"
 
-#: merge-recursive.c:3413
+#: merge-recursive.c:3416
 msgid "directory/file"
 msgstr "Verzeichnis/Datei"
 
-#: merge-recursive.c:3420
+#: merge-recursive.c:3423
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
 "KONFLIKT (%s): Es existiert bereits ein Verzeichnis %s in %s. Füge %s als %s "
 "hinzu."
 
-#: merge-recursive.c:3429
+#: merge-recursive.c:3432
 #, c-format
 msgid "Adding %s"
 msgstr "Füge %s hinzu"
 
-#: merge-recursive.c:3438
+#: merge-recursive.c:3441
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "KONFLIKT (hinzufügen/hinzufügen): Merge-Konflikt in %s"
 
-#: merge-recursive.c:3491
+#: merge-recursive.c:3494
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "Zusammenführen der \"Tree\"-Objekte %s und %s fehlgeschlagen"
 
-#: merge-recursive.c:3585
+#: merge-recursive.c:3588
 msgid "Merging:"
 msgstr "Merge:"
 
-#: merge-recursive.c:3598
+#: merge-recursive.c:3601
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "%u gemeinsamen Vorgänger-Commit gefunden"
 msgstr[1] "%u gemeinsame Vorgänger-Commits gefunden"
 
-#: merge-recursive.c:3648
+#: merge-recursive.c:3651
 msgid "merge returned no commit"
 msgstr "Merge hat keinen Commit zurückgegeben"
 
-#: merge-recursive.c:3816
+#: merge-recursive.c:3823
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "Konnte Objekt '%s' nicht parsen."
 
-#: merge-recursive.c:3834 builtin/merge.c:720 builtin/merge.c:906
+#: merge-recursive.c:3841 builtin/merge.c:720 builtin/merge.c:912
 #: builtin/stash.c:489
 msgid "Unable to write index."
 msgstr "Konnte Index nicht schreiben."
@@ -5423,170 +5549,174 @@ msgstr "Konnte Index nicht schreiben."
 msgid "failed to read the cache"
 msgstr "Lesen des Zwischenspeichers fehlgeschlagen"
 
-#: merge.c:102 rerere.c:704 builtin/am.c:1988 builtin/am.c:2022
-#: builtin/checkout.c:598 builtin/checkout.c:853 builtin/clone.c:706
+#: merge.c:102 rerere.c:705 builtin/am.c:1989 builtin/am.c:2023
+#: builtin/checkout.c:603 builtin/checkout.c:865 builtin/clone.c:714
 #: builtin/stash.c:269
 msgid "unable to write new index file"
 msgstr "Konnte neue Index-Datei nicht schreiben."
 
-#: midx.c:78
+#: midx.c:79
 msgid "multi-pack-index OID fanout is of the wrong size"
-msgstr "multi-pack-index OID fanout hat die falsche Größe"
+msgstr "Multi-Pack-Index OID fanout hat die falsche Größe"
 
-#: midx.c:111
+#: midx.c:112
 #, c-format
 msgid "multi-pack-index file %s is too small"
-msgstr "multi-pack-index-Datei %s ist zu klein."
+msgstr "Multi-Pack-Index-Datei %s ist zu klein."
 
-#: midx.c:127
+#: midx.c:128
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr ""
-"multi-pack-index-Signatur 0x%08x stimmt nicht mit Signatur 0x%08x überein."
+"Multi-Pack-Index-Signatur 0x%08x stimmt nicht mit Signatur 0x%08x überein."
 
-#: midx.c:132
+#: midx.c:133
 #, c-format
 msgid "multi-pack-index version %d not recognized"
-msgstr "multi-pack-index-Version %d nicht erkannt."
+msgstr "Multi-Pack-Index-Version %d nicht erkannt."
 
-#: midx.c:137
+#: midx.c:138
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
-msgstr "multi-pack-index Hash-Version %u stimmt nicht mit Version %u überein"
+msgstr "Multi-Pack-Index Hash-Version %u stimmt nicht mit Version %u überein"
 
-#: midx.c:154
+#: midx.c:155
 msgid "multi-pack-index missing required pack-name chunk"
-msgstr "multi-pack-index fehlt erforderlicher Pack-Namen Chunk"
+msgstr "Multi-Pack-Index fehlt erforderlicher Pack-Namen Chunk"
 
-#: midx.c:156
+#: midx.c:157
 msgid "multi-pack-index missing required OID fanout chunk"
-msgstr "multi-pack-index fehlt erforderlicher OID fanout Chunk"
+msgstr "Multi-Pack-Index fehlt erforderlicher OID fanout Chunk"
 
-#: midx.c:158
+#: midx.c:159
 msgid "multi-pack-index missing required OID lookup chunk"
-msgstr "multi-pack-index fehlt erforderlicher OID lookup Chunk"
+msgstr "Multi-Pack-Index fehlt erforderlicher OID lookup Chunk"
 
-#: midx.c:160
+#: midx.c:161
 msgid "multi-pack-index missing required object offsets chunk"
-msgstr "multi-pack-index fehlt erforderlicher Objekt offset Chunk"
+msgstr "Multi-Pack-Index fehlt erforderlicher Objekt offset Chunk"
 
-#: midx.c:176
+#: midx.c:180
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
-msgstr "Falsche Reihenfolge bei multi-pack-index Pack-Namen: '%s' vor '%s'"
+msgstr "Falsche Reihenfolge bei Multi-Pack-Index Pack-Namen: '%s' vor '%s'"
 
-#: midx.c:224
+#: midx.c:228
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "Ungültige pack-int-id: %u (%u Pakete insgesamt)"
 
-#: midx.c:274
+#: midx.c:278
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr ""
-"multi-pack-index speichert einen 64-Bit Offset, aber off_t ist zu klein"
+"Multi-Pack-Index speichert einen 64-Bit Offset, aber off_t ist zu klein"
 
-#: midx.c:505
+#: midx.c:509
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "Fehler beim Hinzufügen von Packdatei '%s'"
 
-#: midx.c:511
+#: midx.c:515
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "Fehler beim Öffnen von pack-index '%s'"
 
-#: midx.c:579
+#: midx.c:583
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "Fehler beim Lokalisieren von Objekt %d in Packdatei"
 
-#: midx.c:895
+#: midx.c:911
 msgid "cannot store reverse index file"
 msgstr "kann Reverse-Index-Datei nicht speichern"
 
-#: midx.c:993
+#: midx.c:1009
 #, c-format
 msgid "could not parse line: %s"
 msgstr "Zeile konnte nicht geparst werden: %s"
 
-#: midx.c:995
+#: midx.c:1011
 #, c-format
 msgid "malformed line: %s"
 msgstr "fehlerhafte Zeile: %s"
 
-#: midx.c:1162
+#: midx.c:1181
 msgid "ignoring existing multi-pack-index; checksum mismatch"
 msgstr ""
-"ignoriere existierenden multi-pack-index; Prüfsumme stimmt nicht überein"
+"ignoriere existierenden Multi-Pack-Index; Prüfsumme stimmt nicht überein"
 
-#: midx.c:1187
+#: midx.c:1206
 msgid "could not load pack"
 msgstr "Paket konnte nicht geladen werden"
 
-#: midx.c:1193
+#: midx.c:1212
 #, c-format
 msgid "could not open index for %s"
 msgstr "konnte Index für %s nicht öffnen"
 
-#: midx.c:1204
+#: midx.c:1223
 msgid "Adding packfiles to multi-pack-index"
-msgstr "Packdateien zum multi-pack-index hinzufügen"
+msgstr "Packdateien zum Multi-Pack-Index hinzufügen"
 
-#: midx.c:1247
+#: midx.c:1266
 #, c-format
 msgid "unknown preferred pack: '%s'"
 msgstr "unbekanntes bevorzugtes Paket: '%s'"
 
-#: midx.c:1292
+#: midx.c:1311
 #, c-format
 msgid "cannot select preferred pack %s with no objects"
 msgstr "bevorzugtes Paket %s ohne Objekte kann nicht ausgewählt werden"
 
-#: midx.c:1324
+#: midx.c:1343
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "Pack-Datei %s zum Weglassen nicht gefunden"
 
-#: midx.c:1370
+#: midx.c:1389
 #, c-format
 msgid "preferred pack '%s' is expired"
 msgstr "bevorzugtes Paket '%s' ist abgelaufen"
 
-#: midx.c:1383
+#: midx.c:1402
 msgid "no pack files to index."
 msgstr "keine Packdateien zum Indizieren."
 
-#: midx.c:1420
+#: midx.c:1409
+msgid "refusing to write multi-pack .bitmap without any objects"
+msgstr "Schreiben der Multi-Pack-Bitmap ohne Objekte abgelehnt"
+
+#: midx.c:1451
 msgid "could not write multi-pack bitmap"
-msgstr "Multipack-Bitmap konnte nicht geschrieben werden"
+msgstr "Multi-Pack-Bitmap konnte nicht geschrieben werden"
 
-#: midx.c:1430
+#: midx.c:1461
 msgid "could not write multi-pack-index"
 msgstr "Multi-Pack-Index konnte nicht geschrieben werden"
 
-#: midx.c:1489 builtin/clean.c:37
+#: midx.c:1520 builtin/clean.c:37
 #, c-format
 msgid "failed to remove %s"
 msgstr "Fehler beim Löschen von %s"
 
-#: midx.c:1522
+#: midx.c:1553
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
-msgstr "Fehler beim Löschen des multi-pack-index bei %s"
+msgstr "Fehler beim Löschen des Multi-Pack-Index bei %s"
 
-#: midx.c:1585
+#: midx.c:1616
 msgid "multi-pack-index file exists, but failed to parse"
-msgstr "multi-pack-index-Datei existiert, aber das Parsen schlug fehl"
+msgstr "Multi-Pack-Index-Datei existiert, aber das Parsen schlug fehl"
 
-#: midx.c:1593
+#: midx.c:1624
 msgid "incorrect checksum"
 msgstr "Prüfsumme nicht korrekt"
 
-#: midx.c:1596
+#: midx.c:1627
 msgid "Looking for referenced packfiles"
 msgstr "Suche nach referenzierten Pack-Dateien"
 
-#: midx.c:1611
+#: midx.c:1642
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
@@ -5594,55 +5724,55 @@ msgstr ""
 "Ungültige oid fanout Reihenfolge: fanout[%d] = %<PRIx32> > %<PRIx32> = "
 "fanout[%d]"
 
-#: midx.c:1616
+#: midx.c:1647
 msgid "the midx contains no oid"
 msgstr "das midx enthält keine oid"
 
-#: midx.c:1625
+#: midx.c:1656
 msgid "Verifying OID order in multi-pack-index"
-msgstr "Verifiziere OID-Reihenfolge im multi-pack-index"
+msgstr "Verifiziere OID-Reihenfolge im Multi-Pack-Index"
 
-#: midx.c:1634
+#: midx.c:1665
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "Ungültige oid lookup Reihenfolge: oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1654
+#: midx.c:1685
 msgid "Sorting objects by packfile"
 msgstr "Sortiere Objekte nach Pack-Datei"
 
-#: midx.c:1661
+#: midx.c:1692
 msgid "Verifying object offsets"
 msgstr "Überprüfe Objekt-Offsets"
 
-#: midx.c:1677
+#: midx.c:1708
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "Fehler beim Laden des Pack-Eintrags für oid[%d] = %s"
 
-#: midx.c:1683
+#: midx.c:1714
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "Fehler beim Laden des Pack-Index für Packdatei %s"
 
-#: midx.c:1692
+#: midx.c:1723
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "Falscher Objekt-Offset für oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 
-#: midx.c:1719
+#: midx.c:1750
 msgid "Counting referenced objects"
 msgstr "Referenzierte Objekte zählen"
 
-#: midx.c:1729
+#: midx.c:1760
 msgid "Finding and deleting unreferenced packfiles"
 msgstr "Suchen und Löschen von unreferenzierten Pack-Dateien"
 
-#: midx.c:1921
+#: midx.c:1952
 msgid "could not start pack-objects"
 msgstr "Konnte 'pack-objects' nicht ausführen"
 
-#: midx.c:1941
+#: midx.c:1972
 msgid "could not finish pack-objects"
 msgstr "Konnte 'pack-objects' nicht beenden"
 
@@ -5661,7 +5791,7 @@ msgstr "Kann lazy_name Thread nicht erzeugen: %s"
 msgid "unable to join lazy_name thread: %s"
 msgstr "Kann lazy_name Thread nicht beitreten: %s"
 
-#: notes-merge.c:277
+#: notes-merge.c:276
 #, c-format
 msgid ""
 "You have not concluded your previous notes merge (%s exists).\n"
@@ -5676,7 +5806,7 @@ msgstr ""
 "Merge\n"
 "von Notizen beginnen."
 
-#: notes-merge.c:284
+#: notes-merge.c:283
 #, c-format
 msgid "You have not concluded your notes merge (%s exists)."
 msgstr "Sie haben Ihren Merge von Notizen nicht abgeschlossen (%s existiert)."
@@ -5706,279 +5836,350 @@ msgstr ""
 msgid "Bad %s value: '%s'"
 msgstr "Ungültiger %s Wert: '%s'"
 
-#: object-file.c:456
+#: object-file.c:457
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr ""
 "Objektverzeichnis %s existiert nicht; prüfe .git/objects/info/alternates"
 
-#: object-file.c:514
+#: object-file.c:515
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr "Konnte alternativen Objektpfad '%s' nicht normalisieren."
 
-#: object-file.c:588
+#: object-file.c:589
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr "%s: ignoriere alternative Objektspeicher - Verschachtelung zu tief"
 
-#: object-file.c:595
+#: object-file.c:596
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr "Konnte Objektverzeichnis '%s' nicht normalisieren."
 
-#: object-file.c:638
+#: object-file.c:639
 msgid "unable to fdopen alternates lockfile"
 msgstr "Konnte fdopen nicht auf Lock-Datei für \"alternates\" aufrufen."
 
-#: object-file.c:656
+#: object-file.c:657
 msgid "unable to read alternates file"
 msgstr "Konnte \"alternates\"-Datei nicht lesen."
 
-#: object-file.c:663
+#: object-file.c:664
 msgid "unable to move new alternates file into place"
 msgstr "Konnte neue \"alternates\"-Datei nicht übernehmen."
 
-#: object-file.c:741
+#: object-file.c:742
 #, c-format
 msgid "path '%s' does not exist"
 msgstr "Pfad '%s' existiert nicht"
 
-#: object-file.c:762
+#: object-file.c:763
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr ""
 "Referenziertes Repository '%s' wird noch nicht als verknüpftes\n"
 "Arbeitsverzeichnis unterstützt."
 
-#: object-file.c:768
+#: object-file.c:769
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "Referenziertes Repository '%s' ist kein lokales Repository."
 
-#: object-file.c:774
+#: object-file.c:775
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr ""
 "Referenziertes Repository '%s' hat eine unvollständige Historie (shallow)."
 
-#: object-file.c:782
+#: object-file.c:783
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr ""
 "Referenziertes Repository '%s' ist mit künstlichen Vorgängern (\"grafts\") "
 "eingehängt."
 
-#: object-file.c:813
+#: object-file.c:814
 #, c-format
 msgid "could not find object directory matching %s"
 msgstr "konnte Objekt-Verzeichnis nicht finden, dass '%s' entsprechen soll"
 
-#: object-file.c:863
+#: object-file.c:864
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr "Ungültige Zeile beim Parsen alternativer Referenzen: %s"
 
-#: object-file.c:1013
+#: object-file.c:1014
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr "Versuche mmap %<PRIuMAX> über Limit %<PRIuMAX>."
 
-#: object-file.c:1048
+#: object-file.c:1049
 #, c-format
 msgid "mmap failed%s"
 msgstr "mmap fehlgeschlagen%s"
 
-#: object-file.c:1214
+#: object-file.c:1230
 #, c-format
 msgid "object file %s is empty"
 msgstr "Objektdatei %s ist leer."
 
-#: object-file.c:1333 object-file.c:2542
+#: object-file.c:1349 object-file.c:2588
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr "Fehlerhaftes loses Objekt '%s'."
 
-#: object-file.c:1335 object-file.c:2546
+#: object-file.c:1351 object-file.c:2592
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr "Nutzlose Daten am Ende von losem Objekt '%s'."
 
-#: object-file.c:1457
+#: object-file.c:1473
 #, c-format
 msgid "unable to parse %s header"
 msgstr "Konnte %s Kopfbereich nicht parsen."
 
-#: object-file.c:1459
+#: object-file.c:1475
 msgid "invalid object type"
 msgstr "ungültiger Objekt-Typ"
 
-#: object-file.c:1470
+#: object-file.c:1486
 #, c-format
 msgid "unable to unpack %s header"
 msgstr "Konnte %s Kopfbereich nicht entpacken."
 
-#: object-file.c:1474
+#: object-file.c:1490
 #, c-format
 msgid "header for %s too long, exceeds %d bytes"
 msgstr "Header für %s zu lang, überschreitet %d Bytes"
 
-#: object-file.c:1704
+#: object-file.c:1720
 #, c-format
 msgid "failed to read object %s"
 msgstr "Konnte Objekt %s nicht lesen."
 
-#: object-file.c:1708
+#: object-file.c:1724
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr "Ersetzung %s für %s nicht gefunden."
 
-#: object-file.c:1712
+#: object-file.c:1728
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr "Loses Objekt %s (gespeichert in %s) ist beschädigt."
 
-#: object-file.c:1716
+#: object-file.c:1732
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr "Gepacktes Objekt %s (gespeichert in %s) ist beschädigt."
 
-#: object-file.c:1821
+#: object-file.c:1855
 #, c-format
 msgid "unable to write file %s"
 msgstr "Konnte Datei %s nicht schreiben."
 
-#: object-file.c:1828
+#: object-file.c:1862
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr "Konnte Zugriffsberechtigung auf '%s' nicht setzen."
 
-#: object-file.c:1835
+#: object-file.c:1869
 msgid "file write error"
 msgstr "Fehler beim Schreiben einer Datei."
 
-#: object-file.c:1858
+#: object-file.c:1904
 msgid "error when closing loose object file"
 msgstr "Fehler beim Schließen der Datei für lose Objekte."
 
-#: object-file.c:1925
+#: object-file.c:1971
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr ""
 "Unzureichende Berechtigung zum Hinzufügen eines Objektes zur Repository-"
 "Datenbank %s"
 
-#: object-file.c:1927
+#: object-file.c:1973
 msgid "unable to create temporary file"
 msgstr "Konnte temporäre Datei nicht erstellen."
 
-#: object-file.c:1951
+#: object-file.c:1997
 msgid "unable to write loose object file"
 msgstr "Fehler beim Schreiben der Datei für lose Objekte."
 
-#: object-file.c:1957
+#: object-file.c:2003
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr "Konnte neues Objekt %s (%d) nicht komprimieren."
 
-#: object-file.c:1961
+#: object-file.c:2007
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr "deflateEnd auf Objekt %s fehlgeschlagen (%d)"
 
-#: object-file.c:1965
+#: object-file.c:2011
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr "Fehler wegen instabilen Objektquelldaten für %s"
 
-#: object-file.c:1976 builtin/pack-objects.c:1243
+#: object-file.c:2022 builtin/pack-objects.c:1251
 #, c-format
 msgid "failed utime() on %s"
 msgstr "Fehler beim Aufruf von utime() auf '%s'."
 
-#: object-file.c:2054
+#: object-file.c:2100
 #, c-format
 msgid "cannot read object for %s"
 msgstr "Kann Objekt für %s nicht lesen."
 
-#: object-file.c:2105
+#: object-file.c:2151
 msgid "corrupt commit"
 msgstr "fehlerhafter Commit"
 
-#: object-file.c:2113
+#: object-file.c:2159
 msgid "corrupt tag"
 msgstr "fehlerhaftes Tag"
 
-#: object-file.c:2213
+#: object-file.c:2259
 #, c-format
 msgid "read error while indexing %s"
 msgstr "Lesefehler beim Indizieren von '%s'."
 
-#: object-file.c:2216
+#: object-file.c:2262
 #, c-format
 msgid "short read while indexing %s"
 msgstr "read() zu kurz beim Indizieren von '%s'."
 
-#: object-file.c:2289 object-file.c:2299
+#: object-file.c:2335 object-file.c:2345
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr "%s: Fehler beim Einfügen in die Datenbank"
 
-#: object-file.c:2305
+#: object-file.c:2351
 #, c-format
 msgid "%s: unsupported file type"
 msgstr "%s: nicht unterstützte Dateiart"
 
-#: object-file.c:2329 builtin/fetch.c:1453
+#: object-file.c:2375 builtin/fetch.c:1494
 #, c-format
 msgid "%s is not a valid object"
 msgstr "%s ist kein gültiges Objekt"
 
-#: object-file.c:2331
+#: object-file.c:2377
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "%s ist kein gültiges '%s' Objekt"
 
-#: object-file.c:2358
+#: object-file.c:2404
 #, c-format
 msgid "unable to open %s"
 msgstr "kann %s nicht öffnen"
 
-#: object-file.c:2553
+#: object-file.c:2599
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr "Hash für %s stimmt nicht überein (%s erwartet)."
 
-#: object-file.c:2576
+#: object-file.c:2622
 #, c-format
 msgid "unable to mmap %s"
 msgstr "Konnte mmap nicht auf %s ausführen."
 
-#: object-file.c:2582
+#: object-file.c:2628
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr "Konnte Kopfbereich von %s nicht entpacken."
 
-#: object-file.c:2587
+#: object-file.c:2633
 #, c-format
 msgid "unable to parse header of %s"
 msgstr "Konnte Kopfbereich von %s nicht parsen."
 
-#: object-file.c:2598
+#: object-file.c:2644
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr "Konnte Inhalt von %s nicht entpacken."
 
-#: object-name.c:480
+#. TRANSLATORS: This is a line of ambiguous object
+#. output shown when we cannot look up or parse the
+#. object in question. E.g. "deadbeef [bad object]".
+#.
+#: object-name.c:382
+#, c-format
+msgid "%s [bad object]"
+msgstr "%s [ungültiges Objekt]"
+
+#. TRANSLATORS: This is a line of ambiguous commit
+#. object output. E.g.:
+#. *
+#.    "deadbeef commit 2021-01-01 - Some Commit Message"
+#.
+#: object-name.c:407
+#, c-format
+msgid "%s commit %s - %s"
+msgstr "%s Commit %s - %s"
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output. E.g.:
+#. *
+#.    "deadbeef tag 2022-01-01 - Some Tag Message"
+#. *
+#. The second argument is the YYYY-MM-DD found
+#. in the tag.
+#. *
+#. The third argument is the "tag" string
+#. from object.c.
+#.
+#: object-name.c:428
+#, c-format
+msgid "%s tag %s - %s"
+msgstr "%s Tag %s - %s"
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output where we couldn't parse
+#. the tag itself. E.g.:
+#. *
+#.    "deadbeef [bad tag, could not parse it]"
+#.
+#: object-name.c:439
+#, c-format
+msgid "%s [bad tag, could not parse it]"
+msgstr "%s [ungültiger Tag, konnte es nicht parsen]"
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef tree".
+#.
+#: object-name.c:447
+#, c-format
+msgid "%s tree"
+msgstr "%s Tree"
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef blob".
+#.
+#: object-name.c:453
+#, c-format
+msgid "%s blob"
+msgstr "%s Blob"
+
+#: object-name.c:569
 #, c-format
 msgid "short object ID %s is ambiguous"
 msgstr "kurze Objekt-ID %s ist mehrdeutig"
 
-#: object-name.c:491
-msgid "The candidates are:"
-msgstr "Die Kandidaten sind:"
+#. TRANSLATORS: The argument is the list of ambiguous
+#. objects composed in show_ambiguous_object(). See
+#. its "TRANSLATORS" comments for details.
+#.
+#: object-name.c:591
+#, c-format
+msgid ""
+"The candidates are:\n"
+"%s"
+msgstr ""
+"Die Kandidaten sind:\n"
+"%s"
 
-#: object-name.c:790
+#: object-name.c:888
 msgid ""
 "Git normally never creates a ref that ends with 40 hex characters\n"
 "because it will be ignored when you just specify 40-hex. These refs\n"
@@ -6003,22 +6204,22 @@ msgstr ""
 "indem Sie \"git config advice.objectNameWarning false\"\n"
 "ausführen."
 
-#: object-name.c:910
+#: object-name.c:1008
 #, c-format
 msgid "log for '%.*s' only goes back to %s"
 msgstr "Log für '%.*s' geht nur bis %s zurück"
 
-#: object-name.c:918
+#: object-name.c:1016
 #, c-format
 msgid "log for '%.*s' only has %d entries"
 msgstr "Log für '%.*s' hat nur %d Einträge"
 
-#: object-name.c:1696
+#: object-name.c:1794
 #, c-format
 msgid "path '%s' exists on disk, but not in '%.*s'"
 msgstr "Pfad '%s' befindet sich im Dateisystem, aber nicht in '%.*s'"
 
-#: object-name.c:1702
+#: object-name.c:1800
 #, c-format
 msgid ""
 "path '%s' exists, but not '%s'\n"
@@ -6027,12 +6228,12 @@ msgstr ""
 "Pfad '%s' existiert, aber nicht '%s'\n"
 "Hinweis: Meinten Sie '%.*s:%s' auch bekannt als '%.*s:./%s'?"
 
-#: object-name.c:1711
+#: object-name.c:1809
 #, c-format
 msgid "path '%s' does not exist in '%.*s'"
 msgstr "Pfad '%s' existiert nicht in '%.*s'"
 
-#: object-name.c:1739
+#: object-name.c:1837
 #, c-format
 msgid ""
 "path '%s' is in the index, but not at stage %d\n"
@@ -6041,7 +6242,7 @@ msgstr ""
 "Pfad '%s' ist im Index, aber nicht in Stufe %d\n"
 "Hinweis: Meinten Sie ':%d:%s'?"
 
-#: object-name.c:1755
+#: object-name.c:1853
 #, c-format
 msgid ""
 "path '%s' is in the index, but not '%s'\n"
@@ -6050,23 +6251,28 @@ msgstr ""
 "Pfad '%s' ist im Index, aber nicht '%s'\n"
 "Hinweis: Meinten Sie ':%d:%s' auch bekannt als ':%d:./%s'?"
 
-#: object-name.c:1763
+#: object-name.c:1861
 #, c-format
 msgid "path '%s' exists on disk, but not in the index"
 msgstr "Pfad '%s' existiert im Dateisystem, aber nicht im Index"
 
-#: object-name.c:1765
+#: object-name.c:1863
 #, c-format
 msgid "path '%s' does not exist (neither on disk nor in the index)"
 msgstr "Pfad '%s' existiert nicht (weder im Dateisystem noch im Index)"
 
-#: object-name.c:1778
+#: object-name.c:1876
 msgid "relative path syntax can't be used outside working tree"
 msgstr ""
 "Die Syntax für relative Pfade kann nicht außerhalb des Arbeitsverzeichnisses "
 "benutzt werden."
 
-#: object-name.c:1916
+#: object-name.c:1901
+#, c-format
+msgid "<object>:<path> required, only <object> '%s' given"
+msgstr "<Objekt>:<Pfad> benötigt, nur <Objekt> '%s' angegeben"
+
+#: object-name.c:2014
 #, c-format
 msgid "invalid object name '%.*s'."
 msgstr "ungültiger Objektname '%.*s'."
@@ -6091,30 +6297,30 @@ msgstr "Objekt %s hat eine unbekannte Typ-Identifikation %d"
 msgid "unable to parse object: %s"
 msgstr "Konnte Objekt '%s' nicht parsen."
 
-#: object.c:283 object.c:295
+#: object.c:283 object.c:294
 #, c-format
 msgid "hash mismatch %s"
 msgstr "Hash stimmt nicht mit %s überein."
 
 #: pack-bitmap.c:353
 msgid "multi-pack bitmap is missing required reverse index"
-msgstr "Multipack-Bitmap fehlt erforderlicher Reverse-Index"
+msgstr "Multi-Pack-Bitmap fehlt erforderlicher Reverse-Index"
 
-#: pack-bitmap.c:429
+#: pack-bitmap.c:433
 msgid "load_reverse_index: could not open pack"
 msgstr "load_reverse_index: Paket konnte nicht geöffnet werden"
 
-#: pack-bitmap.c:1069 pack-bitmap.c:1075 builtin/pack-objects.c:2424
+#: pack-bitmap.c:1072 pack-bitmap.c:1078 builtin/pack-objects.c:2432
 #, c-format
 msgid "unable to get size of %s"
 msgstr "Konnte Größe von %s nicht bestimmen."
 
-#: pack-bitmap.c:1935
+#: pack-bitmap.c:1937
 #, c-format
 msgid "could not find %s in pack %s at offset %<PRIuMAX>"
 msgstr "konnte %s nicht in Paket %s bei Offset %<PRIuMAX> finden"
 
-#: pack-bitmap.c:1971 builtin/rev-list.c:92
+#: pack-bitmap.c:1973 builtin/rev-list.c:91
 #, c-format
 msgid "unable to get disk usage of %s"
 msgstr "konnte Festplattennutzung von %s nicht bekommen"
@@ -6159,7 +6365,7 @@ msgstr "konnte nicht lesen: %s"
 msgid "failed to make %s readable"
 msgstr "Fehler beim lesbar machen von %s"
 
-#: pack-write.c:520
+#: pack-write.c:521
 #, c-format
 msgid "could not write '%s' promisor file"
 msgstr "konnte Promisor-Datei '%s' nicht schreiben"
@@ -6503,20 +6709,20 @@ msgstr "object-info: erwartete Flush nach Argumenten"
 msgid "Removing duplicate objects"
 msgstr "Lösche doppelte Objekte"
 
-#: range-diff.c:67
+#: range-diff.c:68
 msgid "could not start `log`"
 msgstr "Konnte `log` nicht starten."
 
-#: range-diff.c:69
+#: range-diff.c:70
 msgid "could not read `log` output"
 msgstr "Konnte Ausgabe von `log` nicht lesen."
 
-#: range-diff.c:97 sequencer.c:5602
+#: range-diff.c:98 sequencer.c:5575
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "Konnte Commit '%s' nicht parsen."
 
-#: range-diff.c:111
+#: range-diff.c:109
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
@@ -6525,67 +6731,67 @@ msgstr ""
 "konnte erste Zeile der Ausgabe von `log` nicht parsen: fängt nicht mit "
 "'commit ' an: '%s'"
 
-#: range-diff.c:137
+#: range-diff.c:132
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "Konnte Git-Header '%.*s' nicht parsen."
 
-#: range-diff.c:304
+#: range-diff.c:300
 msgid "failed to generate diff"
 msgstr "Fehler beim Generieren des Diffs."
 
-#: range-diff.c:562 range-diff.c:564
+#: range-diff.c:558 range-diff.c:560
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "Konnte Log für '%s' nicht parsen."
 
-#: read-cache.c:723
+#: read-cache.c:737
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr ""
 "Dateialias '%s' wird nicht hinzugefügt ('%s' existiert bereits im Index)."
 
-#: read-cache.c:739
+#: read-cache.c:753
 msgid "cannot create an empty blob in the object database"
 msgstr "Kann keinen leeren Blob in die Objektdatenbank schreiben."
 
-#: read-cache.c:761
+#: read-cache.c:775
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr ""
 "%s: Kann nur reguläre Dateien, symbolische Links oder Git-Verzeichnisse "
 "hinzufügen."
 
-#: read-cache.c:766 builtin/submodule--helper.c:3242
+#: read-cache.c:780 builtin/submodule--helper.c:3359
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr "'%s' hat keinen Commit ausgecheckt"
 
-#: read-cache.c:818
+#: read-cache.c:832
 #, c-format
 msgid "unable to index file '%s'"
 msgstr "Konnte Datei '%s' nicht indizieren."
 
-#: read-cache.c:837
+#: read-cache.c:851
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr "Konnte '%s' nicht dem Index hinzufügen."
 
-#: read-cache.c:848
+#: read-cache.c:862
 #, c-format
 msgid "unable to stat '%s'"
 msgstr "konnte '%s' nicht lesen"
 
-#: read-cache.c:1386
+#: read-cache.c:1404
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr "'%s' scheint eine Datei und ein Verzeichnis zu sein"
 
-#: read-cache.c:1601
+#: read-cache.c:1619
 msgid "Refresh index"
 msgstr "Aktualisiere Index"
 
-#: read-cache.c:1733
+#: read-cache.c:1751
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -6594,7 +6800,7 @@ msgstr ""
 "index.version gesetzt, aber Wert ungültig.\n"
 "Verwende Version %i"
 
-#: read-cache.c:1743
+#: read-cache.c:1761
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -6603,143 +6809,147 @@ msgstr ""
 "GIT_INDEX_VERSION gesetzt, aber Wert ungültig.\n"
 "Verwende Version %i"
 
-#: read-cache.c:1799
+#: read-cache.c:1817
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "Ungültige Signatur 0x%08x"
 
-#: read-cache.c:1802
+#: read-cache.c:1820
 #, c-format
 msgid "bad index version %d"
 msgstr "Ungültige Index-Version %d"
 
-#: read-cache.c:1811
+#: read-cache.c:1829
 msgid "bad index file sha1 signature"
 msgstr "Ungültige SHA1-Signatur der Index-Datei."
 
-#: read-cache.c:1845
+#: read-cache.c:1863
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "Index verwendet Erweiterung %.4s, welche wir nicht unterstützen."
 
-#: read-cache.c:1847
+#: read-cache.c:1865
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "Ignoriere Erweiterung %.4s"
 
-#: read-cache.c:1884
+#: read-cache.c:1902
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "Unbekanntes Format für Index-Eintrag 0x%08x"
 
-#: read-cache.c:1900
+#: read-cache.c:1918
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "Ungültiges Namensfeld im Index, in der Nähe von Pfad '%s'."
 
-#: read-cache.c:1957
+#: read-cache.c:1975
 msgid "unordered stage entries in index"
 msgstr "Ungeordnete Stage-Einträge im Index."
 
-#: read-cache.c:1960
+#: read-cache.c:1978
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "Mehrere Stage-Einträge für zusammengeführte Datei '%s'."
 
-#: read-cache.c:1963
+#: read-cache.c:1981
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "Ungeordnete Stage-Einträge für '%s'."
 
-#: read-cache.c:2078 read-cache.c:2384 rerere.c:549 rerere.c:583 rerere.c:1095
-#: submodule.c:1662 builtin/add.c:600 builtin/check-ignore.c:183
-#: builtin/checkout.c:527 builtin/checkout.c:719 builtin/clean.c:1013
-#: builtin/commit.c:378 builtin/diff-tree.c:122 builtin/grep.c:519
-#: builtin/mv.c:148 builtin/reset.c:499 builtin/rm.c:293
-#: builtin/submodule--helper.c:327 builtin/submodule--helper.c:3202
+#: read-cache.c:2096 read-cache.c:2402 rerere.c:549 rerere.c:583 rerere.c:1096
+#: submodule.c:1831 builtin/add.c:586 builtin/check-ignore.c:183
+#: builtin/checkout.c:532 builtin/checkout.c:724 builtin/clean.c:1016
+#: builtin/commit.c:379 builtin/diff-tree.c:122 builtin/grep.c:521
+#: builtin/mv.c:148 builtin/reset.c:506 builtin/rm.c:293
+#: builtin/submodule--helper.c:335 builtin/submodule--helper.c:3319
 msgid "index file corrupt"
 msgstr "Index-Datei beschädigt"
 
-#: read-cache.c:2222
+#: read-cache.c:2240
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "Kann Thread für load_cache_entries nicht erzeugen: %s"
 
-#: read-cache.c:2235
+#: read-cache.c:2253
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "Kann Thread für load_cache_entries nicht erzeugen: %s"
 
-#: read-cache.c:2268
+#: read-cache.c:2286
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: Öffnen der Index-Datei fehlgeschlagen."
 
-#: read-cache.c:2272
+#: read-cache.c:2290
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s: Kann geöffneten Index nicht lesen."
 
-#: read-cache.c:2276
+#: read-cache.c:2294
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s: Index-Datei ist kleiner als erwartet."
 
-#: read-cache.c:2280
+#: read-cache.c:2298
 #, c-format
 msgid "%s: unable to map index file%s"
 msgstr "%s: Konnte Index-Datei nicht mappen%s"
 
-#: read-cache.c:2323
+#: read-cache.c:2341
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "Kann Thread für load_index_extensions nicht erzeugen: %s"
 
-#: read-cache.c:2350
+#: read-cache.c:2368
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "Kann Thread für load_index_extensions nicht beitreten: %s"
 
-#: read-cache.c:2396
+#: read-cache.c:2414
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "Konnte geteilten Index '%s' nicht aktualisieren."
 
-#: read-cache.c:2455
+#: read-cache.c:2473
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "Fehlerhafter Index. Erwartete %s in %s, erhielt %s."
 
-#: read-cache.c:3086 strbuf.c:1191 wrapper.c:641 builtin/merge.c:1150
+#: read-cache.c:3032
+msgid "cannot write split index for a sparse index"
+msgstr "kann aufgeteilten Index nicht für ein Sparse-Index schreiben"
+
+#: read-cache.c:3114 strbuf.c:1192 wrapper.c:717 builtin/merge.c:1156
 #, c-format
 msgid "could not close '%s'"
 msgstr "Konnte '%s' nicht schließen."
 
-#: read-cache.c:3129
+#: read-cache.c:3157
 msgid "failed to convert to a sparse-index"
 msgstr "Konvertierung zu einem Sparse-Index fehlgeschlagen"
 
-#: read-cache.c:3200
+#: read-cache.c:3228
 #, c-format
 msgid "could not stat '%s'"
 msgstr "Konnte '%s' nicht lesen."
 
-#: read-cache.c:3213
+#: read-cache.c:3241
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "konnte Git-Verzeichnis nicht öffnen: %s"
 
-#: read-cache.c:3225
+#: read-cache.c:3253
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "Konnte '%s' nicht entfernen."
 
-#: read-cache.c:3254
+#: read-cache.c:3282
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "Konnte Zugriffsberechtigung auf '%s' nicht setzen."
 
-#: read-cache.c:3411
+#: read-cache.c:3439
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s: Kann nicht auf Stufe #0 wechseln."
@@ -6861,9 +7071,9 @@ msgstr ""
 "Wenn Sie jedoch alles löschen, wird der Rebase abgebrochen.\n"
 "\n"
 
-#: rebase-interactive.c:113 rerere.c:469 rerere.c:676 sequencer.c:3883
-#: sequencer.c:3909 sequencer.c:5708 builtin/fsck.c:328 builtin/gc.c:1791
-#: builtin/rebase.c:190
+#: rebase-interactive.c:113 rerere.c:469 rerere.c:677 sequencer.c:3879
+#: sequencer.c:3905 sequencer.c:5681 builtin/fsck.c:328 builtin/gc.c:1791
+#: builtin/rebase.c:191
 #, c-format
 msgid "could not write '%s'"
 msgstr "Konnte '%s' nicht schreiben."
@@ -6904,7 +7114,7 @@ msgstr ""
 msgid "%s: 'preserve' superseded by 'merges'"
 msgstr "%s: 'preserve' wurde durch 'merges' ersetzt"
 
-#: ref-filter.c:42 wt-status.c:2048
+#: ref-filter.c:42 wt-status.c:2057
 msgid "gone"
 msgstr "entfernt"
 
@@ -7071,81 +7281,91 @@ msgstr "dieser Befehl lehnt Atom ab %%(%.*s)"
 msgid "--format=%.*s cannot be used with --python, --shell, --tcl"
 msgstr "--format=%.*s kann nicht mit --python, --shell, --tcl verwendet werden"
 
-#: ref-filter.c:1706
+#: ref-filter.c:1707
 #, c-format
 msgid "(no branch, rebasing %s)"
 msgstr "(kein Branch, Rebase von %s)"
 
-#: ref-filter.c:1709
+#: ref-filter.c:1710
 #, c-format
 msgid "(no branch, rebasing detached HEAD %s)"
 msgstr "(kein Branch, Rebase von losgelöstem HEAD %s)"
 
-#: ref-filter.c:1712
+#: ref-filter.c:1713
 #, c-format
 msgid "(no branch, bisect started on %s)"
 msgstr "(kein Branch, binäre Suche begonnen bei %s)"
 
-#: ref-filter.c:1716
+#: ref-filter.c:1717
 #, c-format
 msgid "(HEAD detached at %s)"
 msgstr "(HEAD losgelöst bei %s)"
 
-#: ref-filter.c:1719
+#: ref-filter.c:1720
 #, c-format
 msgid "(HEAD detached from %s)"
 msgstr "(HEAD losgelöst von %s)"
 
-#: ref-filter.c:1722
+#: ref-filter.c:1723
 msgid "(no branch)"
 msgstr "(kein Branch)"
 
-#: ref-filter.c:1754 ref-filter.c:1972
+#: ref-filter.c:1755 ref-filter.c:1973
 #, c-format
 msgid "missing object %s for %s"
 msgstr "Objekt %s fehlt für %s"
 
-#: ref-filter.c:1764
+#: ref-filter.c:1765
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer bei %s für %s fehlgeschlagen"
 
-#: ref-filter.c:2155
+#: ref-filter.c:2156
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "fehlerhaftes Objekt bei '%s'"
 
-#: ref-filter.c:2245
+#: ref-filter.c:2246
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "Ignoriere Referenz mit fehlerhaftem Namen %s"
 
-#: ref-filter.c:2250 refs.c:676
+#: ref-filter.c:2251 refs.c:672
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "Ignoriere fehlerhafte Referenz %s"
 
-#: ref-filter.c:2629
+#: ref-filter.c:2630
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "Format: %%(end) Atom fehlt"
 
-#: ref-filter.c:2740
+#: ref-filter.c:2741
 #, c-format
 msgid "malformed object name %s"
 msgstr "missgebildeter Objektname %s"
 
-#: ref-filter.c:2745
+#: ref-filter.c:2746
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "die Option `%s' muss auf einen Commit zeigen"
 
-#: refs.c:261
+#: reflog.c:407
+#, c-format
+msgid "not a reflog: %s"
+msgstr "Kein Reflog: %s"
+
+#: reflog.c:410
+#, c-format
+msgid "no reflog for '%s'"
+msgstr "Kein Reflog für '%s'."
+
+#: refs.c:262
 #, c-format
 msgid "%s does not point to a valid object!"
 msgstr "%s zeigt auf kein gültiges Objekt!"
 
-#: refs.c:563
+#: refs.c:561
 #, c-format
 msgid ""
 "Using '%s' as the name for the initial branch. This default branch name\n"
@@ -7172,83 +7392,83 @@ msgstr ""
 "\n"
 "\tgit branch -m <Name>\n"
 
-#: refs.c:585
+#: refs.c:583
 #, c-format
 msgid "could not retrieve `%s`"
 msgstr "konnte `%s` nicht abrufen"
 
-#: refs.c:595
+#: refs.c:593
 #, c-format
 msgid "invalid branch name: %s = %s"
 msgstr "ungültiger Branchname: %s = %s"
 
-#: refs.c:674
+#: refs.c:670
 #, c-format
 msgid "ignoring dangling symref %s"
 msgstr "Ignoriere unreferenzierte symbolische Referenz %s"
 
-#: refs.c:925
+#: refs.c:919
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "Log für Referenz %s hat eine Lücke nach %s."
 
-#: refs.c:932
+#: refs.c:926
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr "Log für Referenz %s unerwartet bei %s beendet."
 
-#: refs.c:997
+#: refs.c:991
 #, c-format
 msgid "log for %s is empty"
 msgstr "Log für %s ist leer."
 
-#: refs.c:1090
+#: refs.c:1086
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "verweigere Aktualisierung einer Referenz mit fehlerhaftem Namen '%s'"
 
-#: refs.c:1168
+#: refs.c:1164
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "update_ref für Referenz '%s' fehlgeschlagen: %s"
 
-#: refs.c:2067
+#: refs.c:2059
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "mehrere Aktualisierungen für Referenz '%s' nicht erlaubt"
 
-#: refs.c:2150
+#: refs.c:2145
 msgid "ref updates forbidden inside quarantine environment"
 msgstr ""
 "Aktualisierungen von Referenzen ist innerhalb der Quarantäne-Umgebung "
 "verboten"
 
-#: refs.c:2161
+#: refs.c:2156
 msgid "ref updates aborted by hook"
 msgstr "Aktualisierungen von Referenzen durch Hook abgebrochen"
 
-#: refs.c:2269 refs.c:2299
+#: refs.c:2264 refs.c:2294
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "'%s' existiert; kann '%s' nicht erstellen"
 
-#: refs.c:2275 refs.c:2310
+#: refs.c:2270 refs.c:2305
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "kann '%s' und '%s' nicht zur selben Zeit verarbeiten"
 
-#: refs/files-backend.c:1267
+#: refs/files-backend.c:1295
 #, c-format
 msgid "could not remove reference %s"
 msgstr "konnte Referenz %s nicht löschen"
 
-#: refs/files-backend.c:1281 refs/packed-backend.c:1549
-#: refs/packed-backend.c:1559
+#: refs/files-backend.c:1310 refs/packed-backend.c:1565
+#: refs/packed-backend.c:1575
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr "konnte Referenz %s nicht entfernen: %s"
 
-#: refs/files-backend.c:1284 refs/packed-backend.c:1562
+#: refs/files-backend.c:1313 refs/packed-backend.c:1578
 #, c-format
 msgid "could not delete references: %s"
 msgstr "konnte Referenzen nicht entfernen: %s"
@@ -7273,37 +7493,37 @@ msgstr "Mehr als ein receivepack-Befehl angegeben, benutze den ersten."
 msgid "more than one uploadpack given, using the first"
 msgstr "Mehr als ein uploadpack-Befehl angegeben, benutze den ersten."
 
-#: remote.c:699
+#: remote.c:698
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr "Kann 'fetch' nicht für sowohl %s als auch %s nach %s ausführen."
 
-#: remote.c:703
+#: remote.c:702
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr "%s folgt üblicherweise %s, nicht %s"
 
-#: remote.c:707
+#: remote.c:706
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr "%s folgt sowohl %s als auch %s"
 
-#: remote.c:775
+#: remote.c:774
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr "Schlüssel '%s' des Musters hatte kein '*'."
 
-#: remote.c:785
+#: remote.c:784
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr "Wert '%s' des Musters hat kein '*'."
 
-#: remote.c:1192
+#: remote.c:1191
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "Src-Refspec %s entspricht keiner Referenz."
 
-#: remote.c:1197
+#: remote.c:1196
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr "Src-Refspec %s entspricht mehr als einer Referenz."
@@ -7312,7 +7532,7 @@ msgstr "Src-Refspec %s entspricht mehr als einer Referenz."
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1212
+#: remote.c:1211
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -7339,7 +7559,7 @@ msgstr ""
 "Keines hat funktioniert, sodass wir aufgegeben haben. Sie müssen die\n"
 "Referenz mit vollqualifizierten Namen angeben."
 
-#: remote.c:1232
+#: remote.c:1231
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -7350,7 +7570,7 @@ msgstr ""
 "Meinten Sie, einen neuen Branch mittels Push nach\n"
 "'%s:refs/heads/%s' zu erstellen?"
 
-#: remote.c:1237
+#: remote.c:1236
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -7361,7 +7581,7 @@ msgstr ""
 "Meinten Sie, einen neuen Tag mittels Push nach\n"
 "'%s:refs/tags/%s' zu erstellen?"
 
-#: remote.c:1242
+#: remote.c:1241
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -7372,7 +7592,7 @@ msgstr ""
 "Meinten Sie, einen Tag für ein neues Tree-Objekt\n"
 "mittels Push nach '%s:refs/tags/'%s' zu erstellen?"
 
-#: remote.c:1247
+#: remote.c:1246
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -7383,117 +7603,117 @@ msgstr ""
 "Meinten Sie, einen Tag für ein neues Blob-Objekt\n"
 "mittels Push nach '%s:refs/tags/%s' zu erstellen?"
 
-#: remote.c:1283
+#: remote.c:1282
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "%s kann nicht zu Branch aufgelöst werden."
 
-#: remote.c:1294
+#: remote.c:1293
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "Konnte '%s' nicht löschen: Remote-Referenz existiert nicht."
 
-#: remote.c:1306
+#: remote.c:1305
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "Dst-Refspec %s entspricht mehr als einer Referenz."
 
-#: remote.c:1313
+#: remote.c:1312
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "Dst-Referenz %s empfängt von mehr als einer Quelle"
 
-#: remote.c:1834 remote.c:1941
+#: remote.c:1833 remote.c:1940
 msgid "HEAD does not point to a branch"
 msgstr "HEAD zeigt auf keinen Branch"
 
-#: remote.c:1843
+#: remote.c:1842
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "Branch nicht gefunden: '%s'"
 
-#: remote.c:1846
+#: remote.c:1845
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "Kein Upstream-Branch für Branch '%s' konfiguriert."
 
-#: remote.c:1852
+#: remote.c:1851
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "Upstream-Branch '%s' nicht als Remote-Tracking-Branch gespeichert"
 
-#: remote.c:1867
+#: remote.c:1866
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr ""
 "Ziel für \"push\" '%s' auf Remote-Repository '%s' hat keinen lokal gefolgten "
 "Branch"
 
-#: remote.c:1882
+#: remote.c:1881
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "Branch '%s' hat keinen Upstream-Branch gesetzt"
 
-#: remote.c:1892
+#: remote.c:1891
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "Push-Refspecs für '%s' beinhalten nicht '%s'"
 
-#: remote.c:1905
+#: remote.c:1904
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "kein Ziel für \"push\" (push.default ist 'nothing')"
 
-#: remote.c:1927
+#: remote.c:1926
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "kann einzelnes Ziel für \"push\" im Modus 'simple' nicht auflösen"
 
-#: remote.c:2060
+#: remote.c:2059
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "Konnte Remote-Referenz %s nicht finden."
 
-#: remote.c:2073
+#: remote.c:2072
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* Ignoriere sonderbare Referenz '%s' lokal"
 
-#: remote.c:2236
+#: remote.c:2235
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr ""
 "Ihr Branch basiert auf '%s', aber der Upstream-Branch wurde entfernt.\n"
 
-#: remote.c:2240
+#: remote.c:2239
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (benutzen Sie \"git branch --unset-upstream\" zum Beheben)\n"
 
-#: remote.c:2243
+#: remote.c:2242
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Ihr Branch ist auf demselben Stand wie '%s'.\n"
 
-#: remote.c:2247
+#: remote.c:2246
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Ihr Branch und '%s' zeigen auf unterschiedliche Commits.\n"
 
-#: remote.c:2250
+#: remote.c:2249
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (benutzen Sie \"%s\" für Details)\n"
 
-#: remote.c:2254
+#: remote.c:2253
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "Ihr Branch ist %2$d Commit vor '%1$s'.\n"
 msgstr[1] "Ihr Branch ist %2$d Commits vor '%1$s'.\n"
 
-#: remote.c:2260
+#: remote.c:2259
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (benutzen Sie \"git push\", um lokale Commits zu publizieren)\n"
 
-#: remote.c:2263
+#: remote.c:2262
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -7503,12 +7723,12 @@ msgstr[0] ""
 msgstr[1] ""
 "Ihr Branch ist %2$d Commits hinter '%1$s', und kann vorgespult werden.\n"
 
-#: remote.c:2271
+#: remote.c:2270
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr ""
 "  (benutzen Sie \"git pull\", um Ihren lokalen Branch zu aktualisieren)\n"
 
-#: remote.c:2274
+#: remote.c:2273
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -7523,13 +7743,13 @@ msgstr[1] ""
 "Ihr Branch und '%s' sind divergiert,\n"
 "und haben jeweils %d und %d unterschiedliche Commits.\n"
 
-#: remote.c:2284
+#: remote.c:2283
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr ""
 "  (benutzen Sie \"git pull\", um Ihren Branch mit dem Remote-Branch "
 "zusammenzuführen)\n"
 
-#: remote.c:2476
+#: remote.c:2475
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "Kann erwarteten Objektnamen '%s' nicht parsen."
@@ -7567,104 +7787,108 @@ msgstr "Fehler beim Schreiben von '%s' (%s)."
 msgid "failed to flush '%s'"
 msgstr "Flush bei '%s' fehlgeschlagen."
 
-#: rerere.c:487 rerere.c:1023
+#: rerere.c:487 rerere.c:1024
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
 msgstr "Konnte Konflikt-Blöcke in '%s' nicht parsen."
 
-#: rerere.c:668
+#: rerere.c:669
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr "Fehler beim Aufruf von utime() auf '%s'."
 
-#: rerere.c:678
+#: rerere.c:679
 #, c-format
 msgid "writing '%s' failed"
 msgstr "Schreiben von '%s' fehlgeschlagen."
 
-#: rerere.c:698
+#: rerere.c:699
 #, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr "'%s' mit vorheriger Konfliktauflösung zum Commit vorgemerkt."
 
-#: rerere.c:737
+#: rerere.c:738
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr "Konfliktauflösung für '%s' aufgezeichnet."
 
-#: rerere.c:772
+#: rerere.c:773
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr "Konflikte in '%s' mit vorheriger Konfliktauflösung beseitigt."
 
-#: rerere.c:787
+#: rerere.c:788
 #, c-format
 msgid "cannot unlink stray '%s'"
 msgstr "Kann '%s' nicht löschen."
 
-#: rerere.c:791
+#: rerere.c:792
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr "Preimage für '%s' aufgezeichnet."
 
-#: rerere.c:865 submodule.c:2121 builtin/log.c:2017
-#: builtin/submodule--helper.c:1777 builtin/submodule--helper.c:1820
+#: rerere.c:866 submodule.c:2290 builtin/log.c:2042
+#: builtin/submodule--helper.c:1786 builtin/submodule--helper.c:1833
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "Konnte Verzeichnis '%s' nicht erstellen."
 
-#: rerere.c:1041
+#: rerere.c:1042
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr "Fehler beim Aktualisieren des Konflikt-Status in '%s'."
 
-#: rerere.c:1052 rerere.c:1059
+#: rerere.c:1053 rerere.c:1060
 #, c-format
 msgid "no remembered resolution for '%s'"
 msgstr "Keine aufgezeichnete Konfliktauflösung für '%s'."
 
-#: rerere.c:1061
+#: rerere.c:1062
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr "Kann '%s' nicht löschen."
 
-#: rerere.c:1071
+#: rerere.c:1072
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr "Preimage für '%s' aktualisiert."
 
-#: rerere.c:1080
+#: rerere.c:1081
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr "Aufgezeichnete Konfliktauflösung für '%s' gelöscht.\n"
 
-#: rerere.c:1191
+#: rerere.c:1192
 msgid "unable to open rr-cache directory"
 msgstr "Konnte rr-cache Verzeichnis nicht öffnen."
 
-#: reset.c:42
+#: reset.c:112
 msgid "could not determine HEAD revision"
 msgstr "Konnte HEAD-Commit nicht bestimmen."
 
-#: reset.c:70 reset.c:76 sequencer.c:3700
+#: reset.c:141 reset.c:147 sequencer.c:3696
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "Fehler beim Finden des \"Tree\"-Objektes von %s."
 
-#: revision.c:2347
+#: revision.c:2358
 msgid "--unpacked=<packfile> no longer supported"
 msgstr "--unpacked=<Pack-Datei> wird nicht länger unterstützt"
 
-#: revision.c:2686
+#: revision.c:2712
 msgid "your current branch appears to be broken"
 msgstr "Ihr aktueller Branch scheint fehlerhaft zu sein."
 
-#: revision.c:2689
+#: revision.c:2715
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "Ihr aktueller Branch '%s' hat noch keine Commits."
 
-#: revision.c:2891
+#: revision.c:2901
+msgid "object filtering requires --objects"
+msgstr "Das Filtern von Objekten erfordert --objects."
+
+#: revision.c:2918
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L unterstützt noch keine anderen Diff-Formate außer -p und -s"
 
@@ -7735,7 +7959,7 @@ msgstr "Ungültiger \"cleanup\"-Modus '%s' für Commit-Beschreibungen."
 msgid "could not delete '%s'"
 msgstr "Konnte '%s' nicht löschen."
 
-#: sequencer.c:345 sequencer.c:4751 builtin/rebase.c:563 builtin/rebase.c:1297
+#: sequencer.c:345 sequencer.c:4724 builtin/rebase.c:564 builtin/rebase.c:1326
 #: builtin/rm.c:409
 #, c-format
 msgid "could not remove '%s'"
@@ -7800,13 +8024,13 @@ msgstr ""
 "Um abzubrechen und zurück zum Zustand vor \"git revert\" zu gelangen,\n"
 "führen Sie \"git revert --abort\" aus."
 
-#: sequencer.c:448 sequencer.c:3292
+#: sequencer.c:448 sequencer.c:3288
 #, c-format
 msgid "could not lock '%s'"
 msgstr "Konnte '%s' nicht sperren"
 
-#: sequencer.c:450 sequencer.c:3091 sequencer.c:3296 sequencer.c:3310
-#: sequencer.c:3561 sequencer.c:5618 strbuf.c:1188 wrapper.c:639
+#: sequencer.c:450 sequencer.c:3087 sequencer.c:3292 sequencer.c:3306
+#: sequencer.c:3557 sequencer.c:5591 strbuf.c:1189 wrapper.c:715
 #, c-format
 msgid "could not write to '%s'"
 msgstr "Konnte nicht nach '%s' schreiben."
@@ -7816,14 +8040,14 @@ msgstr "Konnte nicht nach '%s' schreiben."
 msgid "could not write eol to '%s'"
 msgstr "Konnte EOL nicht nach '%s' schreiben."
 
-#: sequencer.c:460 sequencer.c:3096 sequencer.c:3298 sequencer.c:3312
-#: sequencer.c:3569
+#: sequencer.c:460 sequencer.c:3092 sequencer.c:3294 sequencer.c:3308
+#: sequencer.c:3565
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "Fehler beim Fertigstellen von '%s'."
 
-#: sequencer.c:473 sequencer.c:1934 sequencer.c:3116 sequencer.c:3551
-#: sequencer.c:3679 builtin/am.c:289 builtin/commit.c:834 builtin/merge.c:1148
+#: sequencer.c:473 sequencer.c:1930 sequencer.c:3112 sequencer.c:3547
+#: sequencer.c:3675 builtin/am.c:290 builtin/commit.c:837 builtin/merge.c:1154
 #, c-format
 msgid "could not read '%s'"
 msgstr "Konnte '%s' nicht lesen"
@@ -7843,7 +8067,7 @@ msgstr ""
 msgid "%s: fast-forward"
 msgstr "%s: Vorspulen"
 
-#: sequencer.c:574 builtin/tag.c:614
+#: sequencer.c:574 builtin/tag.c:615
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Ungültiger \"cleanup\" Modus %s"
@@ -7874,8 +8098,8 @@ msgstr "Kein Schlüssel in '%.*s' vorhanden."
 msgid "unable to dequote value of '%s'"
 msgstr "Konnte Anführungszeichen von '%s' nicht entfernen."
 
-#: sequencer.c:841 wrapper.c:209 wrapper.c:379 builtin/am.c:756
-#: builtin/am.c:848 builtin/rebase.c:694
+#: sequencer.c:841 wrapper.c:219 wrapper.c:389 builtin/am.c:757
+#: builtin/am.c:849 builtin/rebase.c:699
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "Konnte '%s' nicht zum Lesen öffnen."
@@ -7998,351 +8222,346 @@ msgstr ""
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1288
+#: sequencer.c:1287
 msgid "couldn't look up newly created commit"
 msgstr "Konnte neu erstellten Commit nicht nachschlagen."
 
-#: sequencer.c:1290
+#: sequencer.c:1289
 msgid "could not parse newly created commit"
 msgstr "Konnte neu erstellten Commit nicht analysieren."
 
-#: sequencer.c:1339
+#: sequencer.c:1336
 msgid "unable to resolve HEAD after creating commit"
 msgstr "Konnte HEAD nicht auflösen, nachdem der Commit erstellt wurde."
 
-#: sequencer.c:1342
+#: sequencer.c:1338
 msgid "detached HEAD"
 msgstr "losgelöster HEAD"
 
-#: sequencer.c:1346
+#: sequencer.c:1342
 msgid " (root-commit)"
 msgstr " (Root-Commit)"
 
-#: sequencer.c:1367
+#: sequencer.c:1363
 msgid "could not parse HEAD"
 msgstr "Konnte HEAD nicht parsen."
 
-#: sequencer.c:1369
+#: sequencer.c:1365
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s ist kein Commit!"
 
-#: sequencer.c:1373 sequencer.c:1451 builtin/commit.c:1708
+#: sequencer.c:1369 sequencer.c:1447 builtin/commit.c:1707
 msgid "could not parse HEAD commit"
 msgstr "Konnte Commit von HEAD nicht analysieren."
 
-#: sequencer.c:1429 sequencer.c:2314
+#: sequencer.c:1425 sequencer.c:2310
 msgid "unable to parse commit author"
 msgstr "Konnte Commit-Autor nicht parsen."
 
-#: sequencer.c:1440 builtin/am.c:1643 builtin/merge.c:710
+#: sequencer.c:1436 builtin/am.c:1644 builtin/merge.c:710
 msgid "git write-tree failed to write a tree"
 msgstr "\"git write-tree\" schlug beim Schreiben eines \"Tree\"-Objektes fehl"
 
-#: sequencer.c:1473 sequencer.c:1593
+#: sequencer.c:1469 sequencer.c:1589
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "Konnte Commit-Beschreibung von '%s' nicht lesen."
 
-#: sequencer.c:1504 sequencer.c:1536
+#: sequencer.c:1500 sequencer.c:1532
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr "ungültige Autor-Identität '%s'"
 
-#: sequencer.c:1510
+#: sequencer.c:1506
 msgid "corrupt author: missing date information"
 msgstr "unbrauchbarer Autor: Datumsinformationen fehlen"
 
-#: sequencer.c:1549 builtin/am.c:1670 builtin/commit.c:1822 builtin/merge.c:915
-#: builtin/merge.c:940 t/helper/test-fast-rebase.c:78
+#: sequencer.c:1545 builtin/am.c:1671 builtin/commit.c:1821 builtin/merge.c:921
+#: builtin/merge.c:946 t/helper/test-fast-rebase.c:78
 msgid "failed to write commit object"
 msgstr "Fehler beim Schreiben des Commit-Objektes."
 
-#: sequencer.c:1576 sequencer.c:4523 t/helper/test-fast-rebase.c:199
+#: sequencer.c:1572 sequencer.c:4496 t/helper/test-fast-rebase.c:199
 #: t/helper/test-fast-rebase.c:217
 #, c-format
 msgid "could not update %s"
 msgstr "Konnte %s nicht aktualisieren."
 
-#: sequencer.c:1625
+#: sequencer.c:1621
 #, c-format
 msgid "could not parse commit %s"
 msgstr "Konnte Commit %s nicht parsen."
 
-#: sequencer.c:1630
+#: sequencer.c:1626
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "Konnte Eltern-Commit %s nicht parsen."
 
-#: sequencer.c:1713 sequencer.c:1994
+#: sequencer.c:1709 sequencer.c:1990
 #, c-format
 msgid "unknown command: %d"
 msgstr "Unbekannter Befehl: %d"
 
-#: sequencer.c:1755
+#: sequencer.c:1751
 msgid "This is the 1st commit message:"
 msgstr "Das ist die erste Commit-Beschreibung:"
 
-#: sequencer.c:1756
+#: sequencer.c:1752
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Das ist Commit-Beschreibung #%d:"
 
-#: sequencer.c:1757
+#: sequencer.c:1753
 msgid "The 1st commit message will be skipped:"
 msgstr "Die erste Commit-Beschreibung wird übersprungen:"
 
-#: sequencer.c:1758
+#: sequencer.c:1754
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "Die Commit-Beschreibung #%d wird ausgelassen:"
 
-#: sequencer.c:1759
+#: sequencer.c:1755
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "Das ist eine Kombination aus %d Commits."
 
-#: sequencer.c:1906 sequencer.c:1963
+#: sequencer.c:1902 sequencer.c:1959
 #, c-format
 msgid "cannot write '%s'"
 msgstr "kann '%s' nicht schreiben"
 
-#: sequencer.c:1953
+#: sequencer.c:1949
 msgid "need a HEAD to fixup"
 msgstr "benötige HEAD für fixup"
 
-#: sequencer.c:1955 sequencer.c:3596
+#: sequencer.c:1951 sequencer.c:3592
 msgid "could not read HEAD"
 msgstr "Konnte HEAD nicht lesen"
 
-#: sequencer.c:1957
+#: sequencer.c:1953
 msgid "could not read HEAD's commit message"
 msgstr "Konnte Commit-Beschreibung von HEAD nicht lesen"
 
-#: sequencer.c:1981
+#: sequencer.c:1977
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "Konnte Commit-Beschreibung von %s nicht lesen."
 
-#: sequencer.c:2091
+#: sequencer.c:2087
 msgid "your index file is unmerged."
 msgstr "Ihre Index-Datei ist nicht zusammengeführt."
 
-#: sequencer.c:2098
+#: sequencer.c:2094
 msgid "cannot fixup root commit"
 msgstr "kann fixup nicht auf Root-Commit anwenden"
 
-#: sequencer.c:2117
+#: sequencer.c:2113
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "Commit %s ist ein Merge, aber die Option -m wurde nicht angegeben."
 
-#: sequencer.c:2125 sequencer.c:2133
+#: sequencer.c:2121 sequencer.c:2129
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "Commit %s hat keinen Eltern-Commit %d"
 
-#: sequencer.c:2139
+#: sequencer.c:2135
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "Kann keine Commit-Beschreibung für %s bekommen."
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:2158
+#: sequencer.c:2154
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: kann Eltern-Commit %s nicht parsen"
 
-#: sequencer.c:2224
+#: sequencer.c:2220
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "Konnte '%s' nicht zu '%s' umbenennen."
 
-#: sequencer.c:2284
+#: sequencer.c:2280
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "Konnte \"revert\" nicht auf %s... (%s) ausführen"
 
-#: sequencer.c:2285
+#: sequencer.c:2281
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "Konnte %s... (%s) nicht anwenden"
 
-#: sequencer.c:2306
+#: sequencer.c:2302
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr "Weglassen von %s %s -- Patch-Inhalte sind bereits im Upstream-Branch\n"
 
-#: sequencer.c:2364
+#: sequencer.c:2360
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: Fehler beim Lesen des Index"
 
-#: sequencer.c:2372
+#: sequencer.c:2368
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: Fehler beim Aktualisieren des Index"
 
-#: sequencer.c:2452
+#: sequencer.c:2448
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s akzeptiert keine Argumente: '%s'"
 
-#: sequencer.c:2461
+#: sequencer.c:2457
 #, c-format
 msgid "missing arguments for %s"
 msgstr "Fehlende Argumente für %s."
 
-#: sequencer.c:2504
+#: sequencer.c:2500
 #, c-format
 msgid "could not parse '%s'"
 msgstr "Konnte '%s' nicht parsen."
 
-#: sequencer.c:2565
+#: sequencer.c:2561
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "Ungültige Zeile %d: %.*s"
 
-#: sequencer.c:2576
+#: sequencer.c:2572
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "Kann '%s' nicht ohne vorherigen Commit ausführen"
 
-#: sequencer.c:2624 builtin/rebase.c:184
+#: sequencer.c:2620 builtin/rebase.c:185
 #, c-format
 msgid "could not read '%s'."
 msgstr "Konnte '%s' nicht lesen."
 
-#: sequencer.c:2662
+#: sequencer.c:2658
 msgid "cancelling a cherry picking in progress"
 msgstr "Abbrechen eines laufenden \"cherry-pick\""
 
-#: sequencer.c:2671
+#: sequencer.c:2667
 msgid "cancelling a revert in progress"
 msgstr "Abbrechen eines laufenden \"revert\""
 
-#: sequencer.c:2711
+#: sequencer.c:2707
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr ""
 "Bitte beheben Sie dieses, indem Sie 'git rebase --edit-todo' ausführen."
 
-#: sequencer.c:2713
+#: sequencer.c:2709
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "Unbenutzbares Instruktionsblatt: '%s'"
 
-#: sequencer.c:2718
+#: sequencer.c:2714
 msgid "no commits parsed."
 msgstr "Keine Commits geparst."
 
-#: sequencer.c:2729
+#: sequencer.c:2725
 msgid "cannot cherry-pick during a revert."
 msgstr "Kann Cherry-Pick nicht während eines Reverts ausführen."
 
-#: sequencer.c:2731
+#: sequencer.c:2727
 msgid "cannot revert during a cherry-pick."
 msgstr "Kann Revert nicht während eines Cherry-Picks ausführen."
 
-#: sequencer.c:2809
-#, c-format
-msgid "invalid value for %s: %s"
-msgstr "ungültiger Wert für %s: %s"
-
-#: sequencer.c:2918
+#: sequencer.c:2914
 msgid "unusable squash-onto"
 msgstr "unbenutzbares squash-onto"
 
-#: sequencer.c:2938
+#: sequencer.c:2934
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "fehlerhaftes Optionsblatt: '%s'"
 
-#: sequencer.c:3033 sequencer.c:4902
+#: sequencer.c:3029 sequencer.c:4875
 msgid "empty commit set passed"
 msgstr "leere Menge von Commits übergeben"
 
-#: sequencer.c:3050
+#: sequencer.c:3046
 msgid "revert is already in progress"
 msgstr "\"revert\" ist bereits im Gange"
 
-#: sequencer.c:3052
+#: sequencer.c:3048
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "versuchen Sie \"git revert (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:3055
+#: sequencer.c:3051
 msgid "cherry-pick is already in progress"
 msgstr "\"cherry-pick\" wird bereits durchgeführt"
 
-#: sequencer.c:3057
+#: sequencer.c:3053
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "versuchen Sie \"git cherry-pick (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:3071
+#: sequencer.c:3067
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "konnte \"sequencer\"-Verzeichnis '%s' nicht erstellen"
 
-#: sequencer.c:3086
+#: sequencer.c:3082
 msgid "could not lock HEAD"
 msgstr "konnte HEAD nicht sperren"
 
-#: sequencer.c:3146 sequencer.c:4612
+#: sequencer.c:3142 sequencer.c:4585
 msgid "no cherry-pick or revert in progress"
 msgstr "kein \"cherry-pick\" oder \"revert\" im Gange"
 
-#: sequencer.c:3148 sequencer.c:3159
+#: sequencer.c:3144 sequencer.c:3155
 msgid "cannot resolve HEAD"
 msgstr "kann HEAD nicht auflösen"
 
-#: sequencer.c:3150 sequencer.c:3194
+#: sequencer.c:3146 sequencer.c:3190
 msgid "cannot abort from a branch yet to be born"
 msgstr "kann nicht abbrechen: bin auf einem Branch, der noch nicht geboren ist"
 
-#: sequencer.c:3180 builtin/fetch.c:1004 builtin/fetch.c:1416
-#: builtin/grep.c:772
+#: sequencer.c:3176 builtin/fetch.c:1030 builtin/fetch.c:1457
+#: builtin/grep.c:774
 #, c-format
 msgid "cannot open '%s'"
 msgstr "kann '%s' nicht öffnen"
 
-#: sequencer.c:3182
+#: sequencer.c:3178
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "kann '%s' nicht lesen: %s"
 
-#: sequencer.c:3183
+#: sequencer.c:3179
 msgid "unexpected end of file"
 msgstr "unerwartetes Dateiende"
 
-#: sequencer.c:3189
+#: sequencer.c:3185
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "gespeicherte \"pre-cherry-pick\" HEAD Datei '%s' ist beschädigt"
 
-#: sequencer.c:3200
+#: sequencer.c:3196
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr ""
 "Sie scheinen HEAD verändert zu haben. Keine Rückspulung, prüfen Sie HEAD."
 
-#: sequencer.c:3241
+#: sequencer.c:3237
 msgid "no revert in progress"
 msgstr "kein Revert im Gange"
 
-#: sequencer.c:3250
+#: sequencer.c:3246
 msgid "no cherry-pick in progress"
 msgstr "kein \"cherry-pick\" im Gange"
 
-#: sequencer.c:3260
+#: sequencer.c:3256
 msgid "failed to skip the commit"
 msgstr "Überspringen des Commits fehlgeschlagen"
 
-#: sequencer.c:3267
+#: sequencer.c:3263
 msgid "there is nothing to skip"
 msgstr "nichts zum Überspringen vorhanden"
 
-#: sequencer.c:3270
+#: sequencer.c:3266
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -8351,16 +8570,16 @@ msgstr ""
 "Haben Sie bereits committet?\n"
 "Versuchen Sie \"git %s --continue\""
 
-#: sequencer.c:3432 sequencer.c:4503
+#: sequencer.c:3428 sequencer.c:4476
 msgid "cannot read HEAD"
 msgstr "kann HEAD nicht lesen"
 
-#: sequencer.c:3449
+#: sequencer.c:3445
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "konnte '%s' nicht nach '%s' kopieren"
 
-#: sequencer.c:3457
+#: sequencer.c:3453
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -8379,27 +8598,27 @@ msgstr ""
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:3467
+#: sequencer.c:3463
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "Konnte %s... (%.*s) nicht anwenden"
 
-#: sequencer.c:3474
+#: sequencer.c:3470
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "Konnte \"%.*s\" nicht zusammenführen"
 
-#: sequencer.c:3488 sequencer.c:3492 builtin/difftool.c:633
+#: sequencer.c:3484 sequencer.c:3488 builtin/difftool.c:633
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "konnte '%s' nicht nach '%s' kopieren"
 
-#: sequencer.c:3503
+#: sequencer.c:3499
 #, c-format
 msgid "Executing: %s\n"
 msgstr "Führe aus: %s\n"
 
-#: sequencer.c:3514
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -8415,11 +8634,11 @@ msgstr ""
 "\n"
 "ausführen.\n"
 
-#: sequencer.c:3520
+#: sequencer.c:3516
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "Der Index und/oder das Arbeitsverzeichnis wurde geändert.\n"
 
-#: sequencer.c:3526
+#: sequencer.c:3522
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -8437,91 +8656,91 @@ msgstr ""
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3586
+#: sequencer.c:3582
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "unerlaubter Beschriftungsname: '%.*s'"
 
-#: sequencer.c:3659
+#: sequencer.c:3655
 msgid "writing fake root commit"
 msgstr "unechten Root-Commit schreiben"
 
-#: sequencer.c:3664
+#: sequencer.c:3660
 msgid "writing squash-onto"
 msgstr "squash-onto schreiben"
 
-#: sequencer.c:3743
+#: sequencer.c:3739
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "konnte '%s' nicht auflösen"
 
-#: sequencer.c:3775
+#: sequencer.c:3771
 msgid "cannot merge without a current revision"
 msgstr "kann nicht ohne einen aktuellen Commit mergen"
 
-#: sequencer.c:3797
+#: sequencer.c:3793
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "konnte '%.*s' nicht parsen"
 
-#: sequencer.c:3806
+#: sequencer.c:3802
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "nichts zum Zusammenführen: '%.*s'"
 
-#: sequencer.c:3818
+#: sequencer.c:3814
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr ""
 "Oktopus-Merge kann nicht auf Basis von [neuem Root-Commit] ausgeführt werden"
 
-#: sequencer.c:3873
+#: sequencer.c:3869
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "konnte keine Commit-Beschreibung von '%s' bekommen"
 
-#: sequencer.c:4019
+#: sequencer.c:4013
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "konnte nicht einmal versuchen '%.*s' zu mergen"
 
-#: sequencer.c:4035
+#: sequencer.c:4029
 msgid "merge: Unable to write new index file"
 msgstr "merge: Konnte neue Index-Datei nicht schreiben."
 
-#: sequencer.c:4116
+#: sequencer.c:4110
 msgid "Cannot autostash"
 msgstr "Kann automatischen Stash nicht erzeugen"
 
-#: sequencer.c:4119
+#: sequencer.c:4113
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Unerwartete 'stash'-Antwort: '%s'"
 
-#: sequencer.c:4125
+#: sequencer.c:4119
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "Konnte Verzeichnis für '%s' nicht erstellen"
 
-#: sequencer.c:4128
+#: sequencer.c:4122
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Automatischen Stash erzeugt: %s\n"
 
-#: sequencer.c:4132
+#: sequencer.c:4124
 msgid "could not reset --hard"
 msgstr "konnte 'reset --hard' nicht ausführen"
 
-#: sequencer.c:4157
+#: sequencer.c:4148
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Automatischen Stash angewendet.\n"
 
-#: sequencer.c:4169
+#: sequencer.c:4160
 #, c-format
 msgid "cannot store %s"
 msgstr "kann %s nicht speichern"
 
-#: sequencer.c:4172
+#: sequencer.c:4163
 #, c-format
 msgid ""
 "%s\n"
@@ -8532,29 +8751,29 @@ msgstr ""
 "Ihre Änderungen sind im Stash sicher.\n"
 "Sie können jederzeit \"git stash pop\" oder \"git stash drop\" ausführen.\n"
 
-#: sequencer.c:4177
+#: sequencer.c:4168
 msgid "Applying autostash resulted in conflicts."
 msgstr "Beim Anwenden des automatischen Stash traten Konflikte auf."
 
-#: sequencer.c:4178
+#: sequencer.c:4169
 msgid "Autostash exists; creating a new stash entry."
 msgstr "Automatischer Stash existiert; ein neuer Stash-Eintrag wird erstellt."
 
-#: sequencer.c:4252
+#: sequencer.c:4225
 msgid "could not detach HEAD"
 msgstr "konnte HEAD nicht loslösen"
 
-#: sequencer.c:4267
+#: sequencer.c:4240
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "Angehalten bei HEAD\n"
 
-#: sequencer.c:4269
+#: sequencer.c:4242
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Angehalten bei %s\n"
 
-#: sequencer.c:4301
+#: sequencer.c:4274
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -8576,60 +8795,60 @@ msgstr ""
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:4347
+#: sequencer.c:4320
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "Rebase (%d/%d)%s"
 
-#: sequencer.c:4393
+#: sequencer.c:4366
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Angehalten bei %s... %.*s\n"
 
-#: sequencer.c:4463
+#: sequencer.c:4436
 #, c-format
 msgid "unknown command %d"
 msgstr "Unbekannter Befehl %d"
 
-#: sequencer.c:4511
+#: sequencer.c:4484
 msgid "could not read orig-head"
 msgstr "Konnte orig-head nicht lesen."
 
-#: sequencer.c:4516
+#: sequencer.c:4489
 msgid "could not read 'onto'"
 msgstr "Konnte 'onto' nicht lesen."
 
-#: sequencer.c:4530
+#: sequencer.c:4503
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "Konnte HEAD nicht auf %s aktualisieren."
 
-#: sequencer.c:4590
+#: sequencer.c:4563
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "Erfolgreich Rebase ausgeführt und %s aktualisiert.\n"
 
-#: sequencer.c:4642
+#: sequencer.c:4615
 msgid "cannot rebase: You have unstaged changes."
 msgstr ""
 "Rebase nicht möglich: Sie haben Änderungen, die nicht zum Commit\n"
 "vorgemerkt sind."
 
-#: sequencer.c:4651
+#: sequencer.c:4624
 msgid "cannot amend non-existing commit"
 msgstr "Kann nicht existierenden Commit nicht nachbessern."
 
-#: sequencer.c:4653
+#: sequencer.c:4626
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "Ungültige Datei: '%s'"
 
-#: sequencer.c:4655
+#: sequencer.c:4628
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "Ungültige Inhalte: '%s'"
 
-#: sequencer.c:4658
+#: sequencer.c:4631
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -8640,69 +8859,69 @@ msgstr ""
 "committen Sie diese zuerst und führen Sie dann 'git rebase --continue'\n"
 "erneut aus."
 
-#: sequencer.c:4694 sequencer.c:4733
+#: sequencer.c:4667 sequencer.c:4706
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "Konnte Datei nicht schreiben: '%s'"
 
-#: sequencer.c:4749
+#: sequencer.c:4722
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "Konnte CHERRY_PICK_HEAD nicht löschen."
 
-#: sequencer.c:4759
+#: sequencer.c:4732
 msgid "could not commit staged changes."
 msgstr "Konnte Änderungen aus der Staging-Area nicht committen."
 
-#: sequencer.c:4879
+#: sequencer.c:4852
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: %s kann nicht in \"cherry-pick\" benutzt werden"
 
-#: sequencer.c:4883
+#: sequencer.c:4856
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: ungültiger Commit"
 
-#: sequencer.c:4918
+#: sequencer.c:4891
 msgid "can't revert as initial commit"
 msgstr "Kann nicht als allerersten Commit einen Revert ausführen."
 
-#: sequencer.c:5189 sequencer.c:5418
+#: sequencer.c:5162 sequencer.c:5391
 #, c-format
 msgid "skipped previously applied commit %s"
 msgstr "zuvor angewendeten Commit %s übersprungen"
 
-#: sequencer.c:5259 sequencer.c:5434
+#: sequencer.c:5232 sequencer.c:5407
 msgid "use --reapply-cherry-picks to include skipped commits"
 msgstr ""
 "verwenden Sie --reapply-cherry-picks, um übersprungene Commits einzubeziehen"
 
-#: sequencer.c:5405
+#: sequencer.c:5378
 msgid "make_script: unhandled options"
 msgstr "make_script: unbehandelte Optionen"
 
-#: sequencer.c:5408
+#: sequencer.c:5381
 msgid "make_script: error preparing revisions"
 msgstr "make_script: Fehler beim Vorbereiten der Commits"
 
-#: sequencer.c:5666 sequencer.c:5683
+#: sequencer.c:5639 sequencer.c:5656
 msgid "nothing to do"
 msgstr "Nichts zu tun."
 
-#: sequencer.c:5702
+#: sequencer.c:5675
 msgid "could not skip unnecessary pick commands"
 msgstr "Konnte unnötige \"pick\"-Befehle nicht auslassen."
 
-#: sequencer.c:5802
+#: sequencer.c:5775
 msgid "the script was already rearranged."
 msgstr "Das Script wurde bereits umgeordnet."
 
-#: setup.c:134
+#: setup.c:135
 #, c-format
 msgid "'%s' is outside repository at '%s'"
 msgstr "'%s' liegt außerhalb des Repositories von '%s'"
 
-#: setup.c:186
+#: setup.c:187
 #, c-format
 msgid ""
 "%s: no such path in the working tree.\n"
@@ -8712,7 +8931,7 @@ msgstr ""
 "Benutzen Sie 'git <Befehl> -- <Pfad>...' zur Angabe von Pfaden, die lokal\n"
 "nicht existieren."
 
-#: setup.c:199
+#: setup.c:200
 #, c-format
 msgid ""
 "ambiguous argument '%s': unknown revision or path not in the working tree.\n"
@@ -8724,13 +8943,13 @@ msgstr ""
 "Benutzen Sie '--', um Pfade und Commits zu trennen, ähnlich wie:\n"
 "'git <Befehl> [<Commit>...] -- [<Datei>...]'"
 
-#: setup.c:265
+#: setup.c:266
 #, c-format
 msgid "option '%s' must come before non-option arguments"
 msgstr ""
 "die Option '%s' muss vor den Argumenten kommen, die keine Optionen sind"
 
-#: setup.c:284
+#: setup.c:285
 #, c-format
 msgid ""
 "ambiguous argument '%s': both revision and filename\n"
@@ -8741,101 +8960,101 @@ msgstr ""
 "Benutzen Sie '--', um Pfade und Commits zu trennen, ähnlich wie:\n"
 "'git <Befehl> [<Commit>...] -- [<Datei>...]'"
 
-#: setup.c:420
+#: setup.c:421
 msgid "unable to set up work tree using invalid config"
 msgstr ""
 "Konnte Arbeitsverzeichnis mit ungültiger Konfiguration nicht einrichten."
 
-#: setup.c:424 builtin/rev-parse.c:895
+#: setup.c:425 builtin/rev-parse.c:895
 msgid "this operation must be run in a work tree"
 msgstr "Diese Operation muss in einem Arbeitsverzeichnis ausgeführt werden."
 
-#: setup.c:722
+#: setup.c:724
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr "Erwartete Git-Repository-Version <= %d, %d gefunden"
 
-#: setup.c:730
+#: setup.c:732
 msgid "unknown repository extension found:"
 msgid_plural "unknown repository extensions found:"
 msgstr[0] "Unbekannte Repository-Erweiterung gefunden:"
 msgstr[1] "Unbekannte Repository-Erweiterungen gefunden:"
 
-#: setup.c:744
+#: setup.c:746
 msgid "repo version is 0, but v1-only extension found:"
 msgid_plural "repo version is 0, but v1-only extensions found:"
 msgstr[0] "Repository-Version ist 0, aber Erweiterung nur für v1 gefunden:"
 msgstr[1] "Repository-Version ist 0, aber Erweiterungen nur für v1 gefunden:"
 
-#: setup.c:765
+#: setup.c:767
 #, c-format
 msgid "error opening '%s'"
 msgstr "Fehler beim Öffnen von '%s'."
 
-#: setup.c:767
+#: setup.c:769
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr "Zu groß, um eine .git-Datei zu sein: '%s'"
 
-#: setup.c:769
+#: setup.c:771
 #, c-format
 msgid "error reading %s"
 msgstr "Fehler beim Lesen von '%s'."
 
-#: setup.c:771
+#: setup.c:773
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr "Ungültiges gitfile-Format: %s"
 
-#: setup.c:773
+#: setup.c:775
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr "Kein Pfad in gitfile: %s"
 
-#: setup.c:775
+#: setup.c:777
 #, c-format
 msgid "not a git repository: %s"
 msgstr "Kein Git-Repository: %s"
 
-#: setup.c:877
+#: setup.c:879
 #, c-format
 msgid "'$%s' too big"
 msgstr "'$%s' zu groß"
 
-#: setup.c:891
+#: setup.c:893
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr "Kein Git-Repository: '%s'"
 
-#: setup.c:920 setup.c:922 setup.c:953
+#: setup.c:922 setup.c:924 setup.c:955
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr "Kann nicht in Verzeichnis '%s' wechseln."
 
-#: setup.c:925 setup.c:981 setup.c:991 setup.c:1030 setup.c:1038
+#: setup.c:927 setup.c:983 setup.c:993 setup.c:1032 setup.c:1040
 msgid "cannot come back to cwd"
 msgstr "Kann nicht zum aktuellen Arbeitsverzeichnis zurückwechseln."
 
-#: setup.c:1052
+#: setup.c:1054
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr "Konnte '%*s%s%s' nicht lesen."
 
-#: setup.c:1295
+#: setup.c:1338
 msgid "Unable to read current working directory"
 msgstr "Konnte aktuelles Arbeitsverzeichnis nicht lesen."
 
-#: setup.c:1304 setup.c:1310
+#: setup.c:1347 setup.c:1353
 #, c-format
 msgid "cannot change to '%s'"
 msgstr "Kann nicht nach '%s' wechseln."
 
-#: setup.c:1315
+#: setup.c:1358
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
 msgstr "Kein Git-Repository (oder irgendeines der Elternverzeichnisse): %s"
 
-#: setup.c:1321
+#: setup.c:1364
 #, c-format
 msgid ""
 "not a git repository (or any parent up to mount point %s)\n"
@@ -8845,7 +9064,20 @@ msgstr ""
 "%s)\n"
 "Stoppe bei Dateisystemgrenze (GIT_DISCOVERY_ACROSS_FILESYSTEM nicht gesetzt)."
 
-#: setup.c:1446
+#: setup.c:1374
+#, c-format
+msgid ""
+"unsafe repository ('%s' is owned by someone else)\n"
+"To add an exception for this directory, call:\n"
+"\n"
+"\tgit config --global --add safe.directory %s"
+msgstr ""
+"unsicheres Repository ('%s' gehört jemand anderem)\n"
+"Um eine Ausnahme für dieses Repository hinzuzufügen, führen Sie aus:\n"
+"\n"
+"\tgit config --global --add safe.directory %s"
+
+#: setup.c:1502
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -8854,57 +9086,61 @@ msgstr ""
 "Problem mit Wert für Dateimodus (0%.3o) von core.sharedRepository.\n"
 "Der Besitzer der Dateien muss immer Lese- und Schreibrechte haben."
 
-#: setup.c:1508
+#: setup.c:1564
 msgid "fork failed"
 msgstr "fork fehlgeschlagen"
 
-#: setup.c:1513
+#: setup.c:1569
 msgid "setsid failed"
 msgstr "setsid fehlgeschlagen"
 
-#: sparse-index.c:289
+#: sparse-index.c:285
 #, c-format
 msgid "index entry is a directory, but not sparse (%08x)"
 msgstr "Index-Eintrag ist ein Verzeichnis, aber nicht partiell (%08x)"
 
+#: split-index.c:9
+msgid "cannot use split index with a sparse index"
+msgstr "kann aufgeteilten Index nicht mit einem Sparse-Index benutzen"
+
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:850
+#: strbuf.c:851
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:852
+#: strbuf.c:853
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u GiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:860
+#: strbuf.c:861
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:862
+#: strbuf.c:863
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u MiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:869
+#: strbuf.c:870
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:871
+#: strbuf.c:872
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u KiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:877
+#: strbuf.c:878
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -8912,86 +9148,86 @@ msgstr[0] "%u Byte"
 msgstr[1] "%u Bytes"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:879
+#: strbuf.c:880
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
 msgstr[0] "%u Byte/s"
 msgstr[1] "%u Bytes/s"
 
-#: strbuf.c:1186 wrapper.c:207 wrapper.c:377 builtin/am.c:765
-#: builtin/rebase.c:650
+#: strbuf.c:1187 wrapper.c:217 wrapper.c:387 builtin/am.c:766
+#: builtin/rebase.c:653
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "Konnte '%s' nicht zum Schreiben öffnen."
 
-#: strbuf.c:1195
+#: strbuf.c:1196
 #, c-format
 msgid "could not edit '%s'"
 msgstr "Konnte '%s' nicht editieren."
 
-#: submodule-config.c:237
+#: submodule-config.c:238
 #, c-format
 msgid "ignoring suspicious submodule name: %s"
 msgstr "Ignoriere verdächtigen Submodulnamen: %s"
 
-#: submodule-config.c:304
+#: submodule-config.c:305
 msgid "negative values not allowed for submodule.fetchjobs"
 msgstr "Negative Werte für submodule.fetchjobs nicht erlaubt."
 
-#: submodule-config.c:402
+#: submodule-config.c:403
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr ""
 "Ignoriere '%s', was als eine Befehlszeilenoption '%s' interpretiert werden "
 "würde."
 
-#: submodule-config.c:499
+#: submodule-config.c:500 builtin/push.c:489 builtin/send-pack.c:148
 #, c-format
-msgid "invalid value for %s"
-msgstr "Ungültiger Wert für %s"
+msgid "invalid value for '%s'"
+msgstr "ungültiger Wert für '%s'"
 
-#: submodule-config.c:767
+#: submodule-config.c:828
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr "Konnte Eintrag '%s' in .gitmodules nicht aktualisieren"
 
-#: submodule.c:114 submodule.c:143
+#: submodule.c:115 submodule.c:144
 msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
 msgstr ""
 "Kann nicht zusammengeführte .gitmodules-Datei nicht ändern, lösen\n"
 "Sie zuerst die Konflikte auf"
 
-#: submodule.c:118 submodule.c:147
+#: submodule.c:119 submodule.c:148
 #, c-format
 msgid "Could not find section in .gitmodules where path=%s"
 msgstr "Konnte keine Sektion in .gitmodules mit Pfad \"%s\" finden"
 
-#: submodule.c:154
+#: submodule.c:155
 #, c-format
 msgid "Could not remove .gitmodules entry for %s"
 msgstr "Konnte Eintrag '%s' nicht aus .gitmodules entfernen"
 
-#: submodule.c:165
+#: submodule.c:166
 msgid "staging updated .gitmodules failed"
 msgstr "Konnte aktualisierte .gitmodules-Datei nicht zum Commit vormerken"
 
-#: submodule.c:358
+#: submodule.c:346
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "In nicht ausgechecktem Submodul '%s'."
 
-#: submodule.c:389
+#: submodule.c:377
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "Pfadspezifikation '%s' befindet sich in Submodul '%.*s'"
 
-#: submodule.c:466
+#: submodule.c:454
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "ungültiges --ignore-submodules Argument: %s"
 
-#: submodule.c:844
+#: submodule.c:866
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -9000,12 +9236,12 @@ msgstr ""
 "Submodul in Commit %s beim Pfad: '%s' hat den gleichen Namen wie ein "
 "Submodul. Wird übersprungen."
 
-#: submodule.c:954
+#: submodule.c:987
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr "Submodul-Eintrag '%s' (%s) ist ein %s, kein Commit."
 
-#: submodule.c:1042
+#: submodule.c:1069
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
@@ -9014,36 +9250,46 @@ msgstr ""
 "Konnte 'git rev-list <Commits> --not --remotes -n 1' nicht in Submodul '%s' "
 "ausführen."
 
-#: submodule.c:1165
+#: submodule.c:1192
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "Prozess für Submodul '%s' fehlgeschlagen"
 
-#: submodule.c:1194 builtin/branch.c:699 builtin/submodule--helper.c:2714
+#: submodule.c:1221 builtin/branch.c:714 builtin/submodule--helper.c:2827
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "Konnte HEAD nicht als gültige Referenz auflösen."
 
-#: submodule.c:1205
+#: submodule.c:1232
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "Pushe Submodul '%s'\n"
 
-#: submodule.c:1208
+#: submodule.c:1235
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "Kann Push für Submodul '%s' nicht ausführen\n"
 
-#: submodule.c:1491
+#: submodule.c:1567
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "Anfordern des Submoduls %s%s\n"
 
-#: submodule.c:1525
+#: submodule.c:1589
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "Konnte nicht auf Submodul '%s' zugreifen\n"
 
-#: submodule.c:1680
+#: submodule.c:1618
+#, c-format
+msgid "Could not access submodule '%s' at commit %s\n"
+msgstr "Konnte nicht auf Submodul '%s' beim Commit %s zugreifen\n"
+
+#: submodule.c:1629
+#, c-format
+msgid "Fetching submodule %s%s at commit %s\n"
+msgstr "Anfordern des Submoduls %s%s beim Commit %s\n"
+
+#: submodule.c:1849
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -9052,62 +9298,62 @@ msgstr ""
 "Fehler während des Anforderns der Submodule:\n"
 "%s"
 
-#: submodule.c:1705
+#: submodule.c:1874
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "'%s' nicht als Git-Repository erkannt"
 
-#: submodule.c:1722
+#: submodule.c:1891
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr "Konnte 'git status --porcelain=2' nicht in Submodul %s ausführen"
 
-#: submodule.c:1763
+#: submodule.c:1932
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr "'git status --porcelain=2' ist in Submodul %s fehlgeschlagen"
 
-#: submodule.c:1838
+#: submodule.c:2007
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "Konnte 'git status' in Submodul '%s' nicht starten."
 
-#: submodule.c:1851
+#: submodule.c:2020
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "Konnte 'git status' in Submodul '%s' nicht ausführen."
 
-#: submodule.c:1868
+#: submodule.c:2037
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr "Konnte core.worktree Einstellung in Submodul '%s' nicht aufheben."
 
-#: submodule.c:1895 submodule.c:2210
+#: submodule.c:2064 submodule.c:2379
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr "Fehler bei Rekursion in Submodul-Pfad '%s'"
 
-#: submodule.c:1917
+#: submodule.c:2086
 msgid "could not reset submodule index"
 msgstr "konnte Index des Submoduls nicht zurücksetzen"
 
-#: submodule.c:1959
+#: submodule.c:2128
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "Submodul '%s' hat einen geänderten Index."
 
-#: submodule.c:2013
+#: submodule.c:2182
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "Submodule '%s' konnte nicht aktualisiert werden."
 
-#: submodule.c:2081
+#: submodule.c:2250
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr ""
 "Git-Verzeichnis des Submoduls '%s' ist im Git-Verzeichnis '%.*s' enthalten."
 
-#: submodule.c:2102
+#: submodule.c:2271
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -9115,17 +9361,17 @@ msgstr ""
 "relocate_gitdir für Submodul '%s' mit mehr als einem Arbeitsverzeichnis\n"
 "wird nicht unterstützt"
 
-#: submodule.c:2114 submodule.c:2174
+#: submodule.c:2283 submodule.c:2343
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "Konnte Name für Submodul '%s' nicht nachschlagen."
 
-#: submodule.c:2118
+#: submodule.c:2287
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr "Verschieben von '%s' in ein existierendes Git-Verzeichnis verweigert."
 
-#: submodule.c:2124
+#: submodule.c:2293
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -9136,11 +9382,11 @@ msgstr ""
 "'%s' nach\n"
 "'%s'\n"
 
-#: submodule.c:2255
+#: submodule.c:2424
 msgid "could not start ls-files in .."
 msgstr "Konnte 'ls-files' nicht in .. starten"
 
-#: submodule.c:2295
+#: submodule.c:2464
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree mit unerwartetem Rückgabewert %d beendet"
@@ -9161,8 +9407,8 @@ msgstr "Ausführen des Anhang-Befehls '%s' fehlgeschlagen"
 msgid "unknown value '%s' for key '%s'"
 msgstr "unbekannter Wert '%s' für Schlüssel %s"
 
-#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
-#: builtin/remote.c:327
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:300
+#: builtin/remote.c:328
 #, c-format
 msgid "more than one %s"
 msgstr "mehr als ein %s"
@@ -9177,11 +9423,11 @@ msgstr "leerer Anhang-Token in Anhang '%.*s'"
 msgid "could not read input file '%s'"
 msgstr "Konnte Eingabe-Datei '%s' nicht lesen"
 
-#: trailer.c:766 builtin/mktag.c:89 imap-send.c:1573
+#: trailer.c:766 builtin/mktag.c:88 imap-send.c:1563
 msgid "could not read from stdin"
 msgstr "konnte nicht von der Standard-Eingabe lesen"
 
-#: trailer.c:1024 wrapper.c:684
+#: trailer.c:1024 wrapper.c:760
 #, c-format
 msgid "could not stat %s"
 msgstr "Konnte '%s' nicht lesen"
@@ -9251,7 +9497,7 @@ msgstr "konnte \"fast-import\" nicht ausführen"
 msgid "error while running fast-import"
 msgstr "Fehler beim Ausführen von 'fast-import'"
 
-#: transport-helper.c:549 transport-helper.c:1251
+#: transport-helper.c:549 transport-helper.c:1254
 #, c-format
 msgid "could not read ref %s"
 msgstr "konnte Referenz %s nicht lesen"
@@ -9270,7 +9516,7 @@ msgstr ""
 msgid "invalid remote service path"
 msgstr "ungültiger Remote-Service Pfad."
 
-#: transport-helper.c:661 transport.c:1479
+#: transport-helper.c:661 transport.c:1496
 msgid "operation not supported by protocol"
 msgstr "die Operation wird von dem Protokoll nicht unterstützt"
 
@@ -9279,72 +9525,72 @@ msgstr "die Operation wird von dem Protokoll nicht unterstützt"
 msgid "can't connect to subservice %s"
 msgstr "kann keine Verbindung zu Subservice %s herstellen"
 
-#: transport-helper.c:693 transport.c:404
+#: transport-helper.c:693 transport.c:415
 msgid "--negotiate-only requires protocol v2"
 msgstr "--negotiate-only benötigt Protokoll v2"
 
-#: transport-helper.c:755
+#: transport-helper.c:758
 msgid "'option' without a matching 'ok/error' directive"
 msgstr "'option' ohne passende 'ok/error' Direktive"
 
-#: transport-helper.c:798
+#: transport-helper.c:801
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "erwartete ok/error, Remote-Helper gab '%s' aus"
 
-#: transport-helper.c:859
+#: transport-helper.c:862
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "Remote-Helper meldete unerwarteten Status von %s"
 
-#: transport-helper.c:942
+#: transport-helper.c:945
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "Remote-Helper %s unterstützt kein Trockenlauf"
 
-#: transport-helper.c:945
+#: transport-helper.c:948
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "Remote-Helper %s unterstützt kein --signed"
 
-#: transport-helper.c:948
+#: transport-helper.c:951
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "Remote-Helper %s unterstützt kein --signed=if-asked"
 
-#: transport-helper.c:953
+#: transport-helper.c:956
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr "Remote-Helper %s unterstützt kein --atomic"
 
-#: transport-helper.c:957
+#: transport-helper.c:960
 #, c-format
 msgid "helper %s does not support --%s"
 msgstr "Remote-Helper %s unterstützt kein --%s"
 
-#: transport-helper.c:964
+#: transport-helper.c:967
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "Remote-Helper %s unterstützt nicht 'push-option'"
 
-#: transport-helper.c:1064
+#: transport-helper.c:1067
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr "Remote-Helper unterstützt kein Push; Refspec benötigt"
 
-#: transport-helper.c:1069
+#: transport-helper.c:1072
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "Remote-Helper %s unterstützt kein 'force'."
 
-#: transport-helper.c:1116
+#: transport-helper.c:1119
 msgid "couldn't run fast-export"
 msgstr "Konnte \"fast-export\" nicht ausführen."
 
-#: transport-helper.c:1121
+#: transport-helper.c:1124
 msgid "error while running fast-export"
 msgstr "Fehler beim Ausführen von \"fast-export\"."
 
-#: transport-helper.c:1146
+#: transport-helper.c:1149
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -9353,52 +9599,52 @@ msgstr ""
 "Keine gemeinsamen Referenzen und nichts spezifiziert; keine Ausführung.\n"
 "Vielleicht sollten Sie einen Branch angeben.\n"
 
-#: transport-helper.c:1228
+#: transport-helper.c:1231
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr "nicht unterstütztes Objekt-Format '%s'"
 
-#: transport-helper.c:1237
+#: transport-helper.c:1240
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "Ungültige Antwort in Referenzliste: %s"
 
-#: transport-helper.c:1389
+#: transport-helper.c:1392
 #, c-format
 msgid "read(%s) failed"
 msgstr "Lesen von %s fehlgeschlagen."
 
-#: transport-helper.c:1416
+#: transport-helper.c:1419
 #, c-format
 msgid "write(%s) failed"
 msgstr "Schreiben von %s fehlgeschlagen."
 
-#: transport-helper.c:1465
+#: transport-helper.c:1468
 #, c-format
 msgid "%s thread failed"
 msgstr "Thread %s fehlgeschlagen."
 
-#: transport-helper.c:1469
+#: transport-helper.c:1472
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "Fehler beim Beitreten zu Thread %s: %s"
 
-#: transport-helper.c:1488 transport-helper.c:1492
+#: transport-helper.c:1491 transport-helper.c:1495
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "Kann Thread zum Kopieren von Daten nicht starten: %s"
 
-#: transport-helper.c:1529
+#: transport-helper.c:1532
 #, c-format
 msgid "%s process failed to wait"
 msgstr "Fehler beim Warten von Prozess %s."
 
-#: transport-helper.c:1533
+#: transport-helper.c:1536
 #, c-format
 msgid "%s process failed"
 msgstr "Prozess %s fehlgeschlagen"
 
-#: transport-helper.c:1551 transport-helper.c:1560
+#: transport-helper.c:1554 transport-helper.c:1563
 msgid "can't start thread for copying data"
 msgstr "Kann Thread zum Kopieren von Daten nicht starten."
 
@@ -9407,51 +9653,51 @@ msgstr "Kann Thread zum Kopieren von Daten nicht starten."
 msgid "Would set upstream of '%s' to '%s' of '%s'\n"
 msgstr "Würde Upstream-Branch von '%s' zu '%s' von '%s' setzen\n"
 
-#: transport.c:145
+#: transport.c:138
 #, c-format
 msgid "could not read bundle '%s'"
 msgstr "Konnte Paket '%s' nicht lesen."
 
-#: transport.c:227
+#: transport.c:234
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr "transport: ungültige depth Option '%s'"
 
-#: transport.c:279
+#: transport.c:289
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "Siehe protocol.version in 'git help config' für weitere Informationen"
 
-#: transport.c:280
+#: transport.c:290
 msgid "server options require protocol version 2 or later"
 msgstr "Server-Optionen benötigen Protokoll-Version 2 oder höher"
 
-#: transport.c:407
+#: transport.c:418
 msgid "server does not support wait-for-done"
 msgstr "Server unterstützt nicht 'wait-for-done'"
 
-#: transport.c:759
+#: transport.c:770
 msgid "could not parse transport.color.* config"
 msgstr "Konnte transport.color.* Konfiguration nicht parsen."
 
-#: transport.c:834
+#: transport.c:845
 msgid "support for protocol v2 not implemented yet"
 msgstr "Unterstützung für Protokoll v2 noch nicht implementiert."
 
-#: transport.c:967
+#: transport.c:978
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "Unbekannter Wert für Konfiguration '%s': %s"
 
-#: transport.c:1033
+#: transport.c:1044
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "Übertragungsart '%s' nicht erlaubt."
 
-#: transport.c:1082
+#: transport.c:1093
 msgid "git-over-rsync is no longer supported"
 msgstr "git-over-rsync wird nicht länger unterstützt."
 
-#: transport.c:1185
+#: transport.c:1196
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -9460,7 +9706,7 @@ msgstr ""
 "Die folgenden Submodul-Pfade enthalten Änderungen, die in keinem\n"
 "Remote-Repository gefunden wurden:\n"
 
-#: transport.c:1189
+#: transport.c:1200
 #, c-format
 msgid ""
 "\n"
@@ -9487,11 +9733,11 @@ msgstr ""
 "zum Versenden zu einem Remote-Repository.\n"
 "\n"
 
-#: transport.c:1197
+#: transport.c:1208
 msgid "Aborting."
 msgstr "Abbruch."
 
-#: transport.c:1343
+#: transport.c:1354
 msgid "failed to push all needed submodules"
 msgstr "Fehler beim Versand aller erforderlichen Submodule."
 
@@ -9790,17 +10036,17 @@ msgstr ""
 "auf einem case-insensitiven Dateisystem) und nur einer von der\n"
 "selben Kollissionsgruppe ist im Arbeitsverzeichnis:\n"
 
-#: unpack-trees.c:1636
+#: unpack-trees.c:1664
 msgid "Updating index flags"
 msgstr "Aktualisiere Index-Markierungen"
 
-#: unpack-trees.c:2803
+#: unpack-trees.c:2925
 #, c-format
 msgid "worktree and untracked commit have duplicate entries: %s"
 msgstr ""
 "Arbeitsverzeichnis und unversionierter Commit haben doppelte Einträge: %s"
 
-#: upload-pack.c:1565
+#: upload-pack.c:1579
 msgid "expected flush after fetch arguments"
 msgstr "erwartete Flush nach Abrufen der Argumente"
 
@@ -9837,124 +10083,138 @@ msgstr "ungültiges '..' Pfadsegment"
 msgid "Fetching objects"
 msgstr "Anfordern der Objekte"
 
-#: worktree.c:238 builtin/am.c:2209 builtin/bisect--helper.c:156
+#: worktree.c:237 builtin/am.c:2210 builtin/bisect--helper.c:156
 #, c-format
 msgid "failed to read '%s'"
 msgstr "Fehler beim Lesen von '%s'"
 
-#: worktree.c:305
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr "'%s' im Hauptarbeitsverzeichnis ist nicht das Repository-Verzeichnis."
 
-#: worktree.c:316
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr "'%s' Datei enthält nicht den absoluten Pfad zum Arbeitsverzeichnis."
 
-#: worktree.c:328
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr "'%s' existiert nicht."
 
-#: worktree.c:334
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr "'%s' ist keine .git-Datei, Fehlercode %d"
 
-#: worktree.c:343
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "'%s' zeigt nicht zurück auf '%s'"
 
-#: worktree.c:604
+#: worktree.c:600
 msgid "not a directory"
 msgstr "kein Verzeichnis"
 
-#: worktree.c:613
+#: worktree.c:609
 msgid ".git is not a file"
 msgstr ".git ist keine Datei"
 
-#: worktree.c:615
+#: worktree.c:611
 msgid ".git file broken"
 msgstr ".git-Datei kaputt"
 
-#: worktree.c:617
+#: worktree.c:613
 msgid ".git file incorrect"
 msgstr ".git-Datei fehlerhaft"
 
-#: worktree.c:723
+#: worktree.c:719
 msgid "not a valid path"
 msgstr "kein gültiger Pfad"
 
-#: worktree.c:729
+#: worktree.c:725
 msgid "unable to locate repository; .git is not a file"
 msgstr "konnte Repository nicht finden; .git ist keine Datei"
 
-#: worktree.c:733
+#: worktree.c:729
 msgid "unable to locate repository; .git file does not reference a repository"
 msgstr ""
 "konnte Repository nicht finden; .git-Datei referenziert kein Repository"
 
-#: worktree.c:737
+#: worktree.c:733
 msgid "unable to locate repository; .git file broken"
 msgstr "Konnte Repository nicht finden; .git-Datei ist kaputt"
 
-#: worktree.c:743
+#: worktree.c:739
 msgid "gitdir unreadable"
 msgstr "gitdir nicht lesbar"
 
-#: worktree.c:747
+#: worktree.c:743
 msgid "gitdir incorrect"
 msgstr "gitdir fehlerhaft"
 
-#: worktree.c:772
+#: worktree.c:768
 msgid "not a valid directory"
 msgstr "kein gültiges Verzeichnis"
 
-#: worktree.c:778
+#: worktree.c:774
 msgid "gitdir file does not exist"
 msgstr "gitdir-Datei existiert nicht"
 
-#: worktree.c:783 worktree.c:792
+#: worktree.c:779 worktree.c:788
 #, c-format
 msgid "unable to read gitdir file (%s)"
 msgstr "konnte gitdir-Datei nicht lesen (%s)"
 
-#: worktree.c:802
+#: worktree.c:798
 #, c-format
 msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
 msgstr "read() zu kurz (%<PRIuMAX> Bytes erwartet, %<PRIuMAX> gelesen)"
 
-#: worktree.c:810
+#: worktree.c:806
 msgid "invalid gitdir file"
 msgstr "ungültige gitdir-Datei"
 
-#: worktree.c:818
+#: worktree.c:814
 msgid "gitdir file points to non-existent location"
 msgstr "gitdir-Datei verweist auf nicht existierenden Ort"
 
-#: wrapper.c:151
+#: worktree.c:830
+#, c-format
+msgid "unable to set %s in '%s'"
+msgstr "konnte %s nicht in '%s' setzen"
+
+#: worktree.c:832
+#, c-format
+msgid "unable to unset %s in '%s'"
+msgstr "konnte %s nicht in '%s' aufheben"
+
+#: worktree.c:852
+msgid "failed to set extensions.worktreeConfig setting"
+msgstr "Einstellung für extensions.worktreeConfig konnte nicht gesetzt werden"
+
+#: wrapper.c:161
 #, c-format
 msgid "could not setenv '%s'"
 msgstr "konnte '%s' nicht setzen"
 
-#: wrapper.c:203
+#: wrapper.c:213
 #, c-format
 msgid "unable to create '%s'"
 msgstr "konnte '%s' nicht erstellen"
 
-#: wrapper.c:205 wrapper.c:375
+#: wrapper.c:215 wrapper.c:385
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr "konnte '%s' nicht zum Lesen und Schreiben öffnen"
 
-#: wrapper.c:406 wrapper.c:607
+#: wrapper.c:416 wrapper.c:683
 #, c-format
 msgid "unable to access '%s'"
 msgstr "konnte nicht auf '%s' zugreifen"
 
-#: wrapper.c:615
+#: wrapper.c:691
 msgid "unable to get current working directory"
 msgstr "konnte aktuelles Arbeitsverzeichnis nicht bekommen"
 
@@ -9997,11 +10257,11 @@ msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr ""
 "  (benutzen Sie \"git add/rm <Datei>...\", um die Auflösung zu markieren)"
 
-#: wt-status.c:211 wt-status.c:1131
+#: wt-status.c:211 wt-status.c:1140
 msgid "Changes to be committed:"
 msgstr "Zum Commit vorgemerkte Änderungen:"
 
-#: wt-status.c:234 wt-status.c:1140
+#: wt-status.c:234 wt-status.c:1149
 msgid "Changes not staged for commit:"
 msgstr "Änderungen, die nicht zum Commit vorgemerkt sind:"
 
@@ -10109,22 +10369,22 @@ msgstr "geänderter Inhalt, "
 msgid "untracked content, "
 msgstr "unversionierter Inhalt, "
 
-#: wt-status.c:964
+#: wt-status.c:973
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] "Ihr Stash hat gerade %d Eintrag"
 msgstr[1] "Ihr Stash hat gerade %d Einträge"
 
-#: wt-status.c:995
+#: wt-status.c:1004
 msgid "Submodules changed but not updated:"
 msgstr "Submodule geändert, aber nicht aktualisiert:"
 
-#: wt-status.c:997
+#: wt-status.c:1006
 msgid "Submodule changes to be committed:"
 msgstr "Änderungen in Submodul zum Committen:"
 
-#: wt-status.c:1079
+#: wt-status.c:1088
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -10132,7 +10392,7 @@ msgstr ""
 "Ändern oder entfernen Sie nicht die obige Zeile.\n"
 "Alles unterhalb von ihr wird ignoriert."
 
-#: wt-status.c:1171
+#: wt-status.c:1180
 #, c-format
 msgid ""
 "\n"
@@ -10144,121 +10404,121 @@ msgstr ""
 "berechnen.\n"
 "Sie können '--no-ahead-behind' benutzen, um das zu verhindern.\n"
 
-#: wt-status.c:1201
+#: wt-status.c:1210
 msgid "You have unmerged paths."
 msgstr "Sie haben nicht zusammengeführte Pfade."
 
-#: wt-status.c:1204
+#: wt-status.c:1213
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (beheben Sie die Konflikte und führen Sie \"git commit\" aus)"
 
-#: wt-status.c:1206
+#: wt-status.c:1215
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (benutzen Sie \"git merge --abort\", um den Merge abzubrechen)"
 
-#: wt-status.c:1210
+#: wt-status.c:1219
 msgid "All conflicts fixed but you are still merging."
 msgstr "Alle Konflikte sind behoben, aber Sie sind immer noch beim Merge."
 
-#: wt-status.c:1213
+#: wt-status.c:1222
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (benutzen Sie \"git commit\", um den Merge abzuschließen)"
 
-#: wt-status.c:1224
+#: wt-status.c:1233
 msgid "You are in the middle of an am session."
 msgstr "Eine \"am\"-Sitzung ist im Gange."
 
-#: wt-status.c:1227
+#: wt-status.c:1236
 msgid "The current patch is empty."
 msgstr "Der aktuelle Patch ist leer."
 
-#: wt-status.c:1232
+#: wt-status.c:1241
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr ""
 "  (beheben Sie die Konflikte und führen Sie dann \"git am --continue\" aus)"
 
-#: wt-status.c:1234
+#: wt-status.c:1243
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (benutzen Sie \"git am --skip\", um diesen Patch auszulassen)"
 
-#: wt-status.c:1237
+#: wt-status.c:1246
 msgid ""
 "  (use \"git am --allow-empty\" to record this patch as an empty commit)"
 msgstr ""
 "  (benutzen Sie \"git am --allow-empty\", um den aktuellen Patch als leeren "
 "Commit zu speichern)"
 
-#: wt-status.c:1239
+#: wt-status.c:1248
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr ""
 "  (benutzen Sie \"git am --abort\", um den ursprünglichen Branch "
 "wiederherzustellen)"
 
-#: wt-status.c:1372
+#: wt-status.c:1381
 msgid "git-rebase-todo is missing."
 msgstr "git-rebase-todo fehlt."
 
-#: wt-status.c:1374
+#: wt-status.c:1383
 msgid "No commands done."
 msgstr "Keine Befehle ausgeführt."
 
-#: wt-status.c:1377
+#: wt-status.c:1386
 #, c-format
-msgid "Last command done (%d command done):"
-msgid_plural "Last commands done (%d commands done):"
-msgstr[0] "Zuletzt ausgeführter Befehl (%d Befehl ausgeführt):"
-msgstr[1] "Zuletzt ausgeführte Befehle (%d Befehle ausgeführt):"
+msgid "Last command done (%<PRIuMAX> command done):"
+msgid_plural "Last commands done (%<PRIuMAX> commands done):"
+msgstr[0] "Letzter Befehl erledigt (%<PRIuMAX> Befehl erledigt):"
+msgstr[1] "Letzte Befehle erledigt (%<PRIuMAX> Befehle erledigt):"
 
-#: wt-status.c:1388
+#: wt-status.c:1397
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (mehr Informationen in Datei %s)"
 
-#: wt-status.c:1393
+#: wt-status.c:1402
 msgid "No commands remaining."
 msgstr "Keine Befehle verbleibend."
 
-#: wt-status.c:1396
+#: wt-status.c:1405
 #, c-format
-msgid "Next command to do (%d remaining command):"
-msgid_plural "Next commands to do (%d remaining commands):"
-msgstr[0] "Nächster auszuführender Befehl (%d Befehle verbleibend):"
-msgstr[1] "Nächste auszuführende Befehle (%d Befehle verbleibend):"
+msgid "Next command to do (%<PRIuMAX> remaining command):"
+msgid_plural "Next commands to do (%<PRIuMAX> remaining commands):"
+msgstr[0] "Nächster auszuführender Befehl (%<PRIuMAX> Befehle verbleibend):"
+msgstr[1] "Nächste auszuführende Befehle (%<PRIuMAX> Befehle verbleibend):"
 
-#: wt-status.c:1404
+#: wt-status.c:1413
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr "  (benutzen Sie \"git rebase --edit-todo\" zum Ansehen und Bearbeiten)"
 
-#: wt-status.c:1416
+#: wt-status.c:1425
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "Sie sind gerade beim Rebase von Branch '%s' auf '%s'."
 
-#: wt-status.c:1421
+#: wt-status.c:1430
 msgid "You are currently rebasing."
 msgstr "Sie sind gerade beim Rebase."
 
-#: wt-status.c:1434
+#: wt-status.c:1443
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr ""
 "  (beheben Sie die Konflikte und führen Sie dann \"git rebase --continue\" "
 "aus)"
 
-#: wt-status.c:1436
+#: wt-status.c:1445
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (benutzen Sie \"git rebase --skip\", um diesen Patch auszulassen)"
 
-#: wt-status.c:1438
+#: wt-status.c:1447
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr ""
 "  (benutzen Sie \"git rebase --abort\", um den ursprünglichen Branch "
 "auszuchecken)"
 
-#: wt-status.c:1445
+#: wt-status.c:1454
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr "  (alle Konflikte behoben: führen Sie \"git rebase --continue\" aus)"
 
-#: wt-status.c:1449
+#: wt-status.c:1458
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
@@ -10266,174 +10526,174 @@ msgstr ""
 "Sie teilen gerade einen Commit auf, während ein Rebase von Branch '%s' auf "
 "'%s' im Gange ist."
 
-#: wt-status.c:1454
+#: wt-status.c:1463
 msgid "You are currently splitting a commit during a rebase."
 msgstr "Sie teilen gerade einen Commit während eines Rebase auf."
 
-#: wt-status.c:1457
+#: wt-status.c:1466
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr ""
 "  (Sobald Ihr Arbeitsverzeichnis unverändert ist, führen Sie \"git rebase --"
 "continue\" aus)"
 
-#: wt-status.c:1461
+#: wt-status.c:1470
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr ""
 "Sie editieren gerade einen Commit während eines Rebase von Branch '%s' auf "
 "'%s'."
 
-#: wt-status.c:1466
+#: wt-status.c:1475
 msgid "You are currently editing a commit during a rebase."
 msgstr "Sie editieren gerade einen Commit während eines Rebase."
 
-#: wt-status.c:1469
+#: wt-status.c:1478
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr ""
 "  (benutzen Sie \"git commit --amend\", um den aktuellen Commit "
 "nachzubessern)"
 
-#: wt-status.c:1471
+#: wt-status.c:1480
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr ""
 "  (benutzen Sie \"git rebase --continue\" sobald Ihre Änderungen "
 "abgeschlossen sind)"
 
-#: wt-status.c:1482
+#: wt-status.c:1491
 msgid "Cherry-pick currently in progress."
 msgstr "Cherry-pick zurzeit im Gange."
 
-#: wt-status.c:1485
+#: wt-status.c:1494
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "Sie führen gerade \"cherry-pick\" von Commit %s aus."
 
-#: wt-status.c:1492
+#: wt-status.c:1501
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr ""
 "  (beheben Sie die Konflikte und führen Sie dann \"git cherry-pick --continue"
 "\" aus)"
 
-#: wt-status.c:1495
+#: wt-status.c:1504
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (Führen Sie \"git cherry-pick --continue\" aus, um weiterzumachen)"
 
-#: wt-status.c:1498
+#: wt-status.c:1507
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr ""
 "  (alle Konflikte behoben: führen Sie \"git cherry-pick --continue\" aus)"
 
-#: wt-status.c:1500
+#: wt-status.c:1509
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr ""
 "  (benutzen Sie \"git cherry-pick --skip\", um diesen Patch auszulassen)"
 
-#: wt-status.c:1502
+#: wt-status.c:1511
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr ""
 "  (benutzen Sie \"git cherry-pick --abort\", um die Cherry-Pick-Operation "
 "abzubrechen)"
 
-#: wt-status.c:1512
+#: wt-status.c:1521
 msgid "Revert currently in progress."
 msgstr "Revert zurzeit im Gange."
 
-#: wt-status.c:1515
+#: wt-status.c:1524
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Sie sind gerade beim Revert von Commit '%s'."
 
-#: wt-status.c:1521
+#: wt-status.c:1530
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr ""
 "  (beheben Sie die Konflikte und führen Sie dann \"git revert --continue\" "
 "aus)"
 
-#: wt-status.c:1524
+#: wt-status.c:1533
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (Führen Sie \"git revert --continue\", um weiterzumachen)"
 
-#: wt-status.c:1527
+#: wt-status.c:1536
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (alle Konflikte behoben: führen Sie \"git revert --continue\" aus)"
 
-#: wt-status.c:1529
+#: wt-status.c:1538
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr "  (benutzen Sie \"git revert --skip\", um diesen Patch auszulassen)"
 
-#: wt-status.c:1531
+#: wt-status.c:1540
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr ""
 "  (benutzen Sie \"git revert --abort\", um die Revert-Operation abzubrechen)"
 
-#: wt-status.c:1541
+#: wt-status.c:1550
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "Sie sind gerade bei einer binären Suche, gestartet von Branch '%s'."
 
-#: wt-status.c:1545
+#: wt-status.c:1554
 msgid "You are currently bisecting."
 msgstr "Sie sind gerade bei einer binären Suche."
 
-#: wt-status.c:1548
+#: wt-status.c:1557
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr ""
 "  (benutzen Sie \"git bisect reset\", um zum ursprünglichen Branch "
 "zurückzukehren)"
 
-#: wt-status.c:1559
+#: wt-status.c:1568
 msgid "You are in a sparse checkout."
 msgstr "Sie befinden sich in einem partiellen Checkout."
 
-#: wt-status.c:1562
+#: wt-status.c:1571
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
 msgstr ""
 "Sie sind in einem partiellen Checkout mit %d%% vorhandenen versionierten "
 "Dateien."
 
-#: wt-status.c:1806
+#: wt-status.c:1815
 msgid "On branch "
 msgstr "Auf Branch "
 
-#: wt-status.c:1813
+#: wt-status.c:1822
 msgid "interactive rebase in progress; onto "
 msgstr "interaktives Rebase im Gange; auf "
 
-#: wt-status.c:1815
+#: wt-status.c:1824
 msgid "rebase in progress; onto "
 msgstr "Rebase im Gange; auf "
 
-#: wt-status.c:1820
+#: wt-status.c:1829
 msgid "HEAD detached at "
 msgstr "HEAD losgelöst bei "
 
-#: wt-status.c:1822
+#: wt-status.c:1831
 msgid "HEAD detached from "
 msgstr "HEAD losgelöst von "
 
-#: wt-status.c:1825
+#: wt-status.c:1834
 msgid "Not currently on any branch."
 msgstr "Im Moment auf keinem Branch."
 
-#: wt-status.c:1842
+#: wt-status.c:1851
 msgid "Initial commit"
 msgstr "Initialer Commit"
 
-#: wt-status.c:1843
+#: wt-status.c:1852
 msgid "No commits yet"
 msgstr "Noch keine Commits"
 
-#: wt-status.c:1857
+#: wt-status.c:1866
 msgid "Untracked files"
 msgstr "Unversionierte Dateien"
 
-#: wt-status.c:1859
+#: wt-status.c:1868
 msgid "Ignored files"
 msgstr "Ignorierte Dateien"
 
-#: wt-status.c:1863
+#: wt-status.c:1872
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -10444,32 +10704,32 @@ msgstr ""
 "'status -uno' könnte das beschleunigen, aber Sie müssen darauf achten,\n"
 "neue Dateien selbstständig hinzuzufügen (siehe 'git help status')."
 
-#: wt-status.c:1869
+#: wt-status.c:1878
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Unversionierte Dateien nicht aufgelistet%s"
 
-#: wt-status.c:1871
+#: wt-status.c:1880
 msgid " (use -u option to show untracked files)"
 msgstr " (benutzen Sie die Option -u, um unversionierte Dateien anzuzeigen)"
 
-#: wt-status.c:1877
+#: wt-status.c:1886
 msgid "No changes"
 msgstr "Keine Änderungen"
 
-#: wt-status.c:1882
+#: wt-status.c:1891
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 "keine Änderungen zum Commit vorgemerkt (benutzen Sie \"git add\" und/oder "
 "\"git commit -a\")\n"
 
-#: wt-status.c:1886
+#: wt-status.c:1895
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "keine Änderungen zum Commit vorgemerkt\n"
 
-#: wt-status.c:1890
+#: wt-status.c:1899
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -10478,67 +10738,67 @@ msgstr ""
 "nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien\n"
 "(benutzen Sie \"git add\" zum Versionieren)\n"
 
-#: wt-status.c:1894
+#: wt-status.c:1903
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr "nichts zum Commit vorgemerkt, aber es gibt unversionierte Dateien\n"
 
-#: wt-status.c:1898
+#: wt-status.c:1907
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 "nichts zu committen (erstellen/kopieren Sie Dateien und benutzen\n"
 "Sie \"git add\" zum Versionieren)\n"
 
-#: wt-status.c:1902 wt-status.c:1908
+#: wt-status.c:1911 wt-status.c:1917
 #, c-format
 msgid "nothing to commit\n"
 msgstr "nichts zu committen\n"
 
-#: wt-status.c:1905
+#: wt-status.c:1914
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr ""
 "nichts zu committen (benutzen Sie die Option -u, um unversionierte Dateien "
 "anzuzeigen)\n"
 
-#: wt-status.c:1910
+#: wt-status.c:1919
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "nichts zu committen, Arbeitsverzeichnis unverändert\n"
 
-#: wt-status.c:2015
+#: wt-status.c:2024
 msgid "No commits yet on "
 msgstr "Noch keine Commits in "
 
-#: wt-status.c:2019
+#: wt-status.c:2028
 msgid "HEAD (no branch)"
 msgstr "HEAD (kein Branch)"
 
-#: wt-status.c:2050
+#: wt-status.c:2059
 msgid "different"
 msgstr "unterschiedlich"
 
-#: wt-status.c:2052 wt-status.c:2060
+#: wt-status.c:2061 wt-status.c:2069
 msgid "behind "
 msgstr "hinterher "
 
-#: wt-status.c:2055 wt-status.c:2058
+#: wt-status.c:2064 wt-status.c:2067
 msgid "ahead "
 msgstr "voraus "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2596
+#: wt-status.c:2605
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr ""
 "%s nicht möglich: Sie haben Änderungen, die nicht zum Commit vorgemerkt sind."
 
-#: wt-status.c:2602
+#: wt-status.c:2611
 msgid "additionally, your index contains uncommitted changes."
 msgstr "Zusätzlich enthält die Staging-Area nicht committete Änderungen."
 
-#: wt-status.c:2604
+#: wt-status.c:2613
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr ""
@@ -10562,155 +10822,159 @@ msgstr "konnte accept_thread nicht für '%s' starten"
 msgid "could not start worker[0] for '%s'"
 msgstr "konnte worker[0] nicht für '%s' starten"
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:347
+#: compat/precompose_utf8.c:58 builtin/clone.c:353
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "Konnte '%s' nicht entfernen."
 
+#: compat/fsmonitor/fsm-listen-darwin.c:355
+msgid "Unable to create FSEventStream."
+msgstr "Konnte FSEventStream nicht erstellen."
+
+#: compat/fsmonitor/fsm-listen-darwin.c:403
+msgid "Failed to start the FSEventStream"
+msgstr "Konnte FSEventStream nicht starten."
+
 #: builtin/add.c:26
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<Optionen>] [--] <Pfadspezifikation>..."
 
-#: builtin/add.c:64
+#: builtin/add.c:63
 #, c-format
 msgid "cannot chmod %cx '%s'"
 msgstr "kann chmod %cx '%s' nicht ausführen"
 
-#: builtin/add.c:106
+#: builtin/add.c:105
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "unerwarteter Differenz-Status %c"
 
-#: builtin/add.c:111 builtin/commit.c:298
+#: builtin/add.c:110 builtin/commit.c:299
 msgid "updating files failed"
 msgstr "Aktualisierung der Dateien fehlgeschlagen"
 
-#: builtin/add.c:121
+#: builtin/add.c:120
 #, c-format
 msgid "remove '%s'\n"
 msgstr "lösche '%s'\n"
 
-#: builtin/add.c:205
+#: builtin/add.c:204
 msgid "Unstaged changes after refreshing the index:"
 msgstr ""
 "Nicht zum Commit vorgemerkte Änderungen nach Aktualisierung der Staging-Area:"
 
-#: builtin/add.c:313 builtin/rev-parse.c:993
+#: builtin/add.c:312 builtin/rev-parse.c:993
 msgid "Could not read the index"
 msgstr "Konnte den Index nicht lesen"
 
-#: builtin/add.c:326
+#: builtin/add.c:325
 msgid "Could not write patch"
 msgstr "Konnte Patch nicht schreiben"
 
-#: builtin/add.c:329
+#: builtin/add.c:328
 msgid "editing patch failed"
 msgstr "Bearbeitung des Patches fehlgeschlagen"
 
-#: builtin/add.c:332
+#: builtin/add.c:331
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "Konnte Verzeichnis '%s' nicht lesen"
 
-#: builtin/add.c:334
+#: builtin/add.c:333
 msgid "Empty patch. Aborted."
 msgstr "Leerer Patch. Abgebrochen."
 
-#: builtin/add.c:340
+#: builtin/add.c:339
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "Konnte '%s' nicht anwenden."
 
-#: builtin/add.c:348
+#: builtin/add.c:347
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr ""
 "Die folgenden Pfade werden durch eine Ihrer \".gitignore\" Dateien "
 "ignoriert:\n"
 
-#: builtin/add.c:368 builtin/clean.c:927 builtin/fetch.c:174 builtin/mv.c:124
+#: builtin/add.c:367 builtin/clean.c:927 builtin/fetch.c:175 builtin/mv.c:124
 #: builtin/prune-packed.c:14 builtin/pull.c:208 builtin/push.c:550
-#: builtin/remote.c:1429 builtin/rm.c:244 builtin/send-pack.c:194
+#: builtin/remote.c:1454 builtin/rm.c:244 builtin/send-pack.c:194
 msgid "dry run"
 msgstr "Probelauf"
 
-#: builtin/add.c:369 builtin/check-ignore.c:22 builtin/commit.c:1484
-#: builtin/count-objects.c:98 builtin/fsck.c:789 builtin/log.c:2313
+#: builtin/add.c:368 builtin/check-ignore.c:22 builtin/commit.c:1483
+#: builtin/count-objects.c:98 builtin/fsck.c:789 builtin/log.c:2338
 #: builtin/mv.c:123 builtin/read-tree.c:120
 msgid "be verbose"
 msgstr "erweiterte Ausgaben"
 
-#: builtin/add.c:371
+#: builtin/add.c:370
 msgid "interactive picking"
 msgstr "interaktives Auswählen"
 
-#: builtin/add.c:372 builtin/checkout.c:1581 builtin/reset.c:409
+#: builtin/add.c:371 builtin/checkout.c:1599 builtin/reset.c:417
 msgid "select hunks interactively"
 msgstr "Blöcke interaktiv auswählen"
 
-#: builtin/add.c:373
+#: builtin/add.c:372
 msgid "edit current diff and apply"
 msgstr "aktuelle Unterschiede editieren und anwenden"
 
-#: builtin/add.c:374
+#: builtin/add.c:373
 msgid "allow adding otherwise ignored files"
 msgstr "das Hinzufügen andernfalls ignorierter Dateien erlauben"
 
-#: builtin/add.c:375
+#: builtin/add.c:374
 msgid "update tracked files"
 msgstr "versionierte Dateien aktualisieren"
 
-#: builtin/add.c:376
+#: builtin/add.c:375
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr ""
 "erneutes Normalisieren der Zeilenenden von versionierten Dateien (impliziert "
 "-u)"
 
-#: builtin/add.c:377
+#: builtin/add.c:376
 msgid "record only the fact that the path will be added later"
 msgstr "nur speichern, dass der Pfad später hinzugefügt werden soll"
 
-#: builtin/add.c:378
+#: builtin/add.c:377
 msgid "add changes from all tracked and untracked files"
 msgstr ""
 "Änderungen von allen versionierten und unversionierten Dateien hinzufügen"
 
-#: builtin/add.c:381
+#: builtin/add.c:380
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr "gelöschte Pfade im Arbeitsverzeichnis ignorieren (genau wie --no-all)"
 
-#: builtin/add.c:383
+#: builtin/add.c:382
 msgid "don't add, only refresh the index"
 msgstr "nichts hinzufügen, nur den Index aktualisieren"
 
-#: builtin/add.c:384
+#: builtin/add.c:383
 msgid "just skip files which cannot be added because of errors"
 msgstr ""
 "Dateien überspringen, die aufgrund von Fehlern nicht hinzugefügt werden "
 "konnten"
 
-#: builtin/add.c:385
+#: builtin/add.c:384
 msgid "check if - even missing - files are ignored in dry run"
 msgstr "prüfen ob - auch fehlende - Dateien im Probelauf ignoriert werden"
 
-#: builtin/add.c:386 builtin/mv.c:128 builtin/rm.c:251
+#: builtin/add.c:385 builtin/mv.c:128 builtin/rm.c:251
 msgid "allow updating entries outside of the sparse-checkout cone"
 msgstr ""
 "erlaube das Aktualisieren von Einträgen außerhalb des partiellen Checkouts "
 "im Cone-Modus"
 
-#: builtin/add.c:388 builtin/update-index.c:1004
+#: builtin/add.c:387 builtin/update-index.c:1023
 msgid "override the executable bit of the listed files"
 msgstr "das \"ausführbar\"-Bit der aufgelisteten Dateien überschreiben"
 
-#: builtin/add.c:390
+#: builtin/add.c:389
 msgid "warn when adding an embedded repository"
 msgstr "warnen wenn eingebettetes Repository hinzugefügt wird"
 
-#: builtin/add.c:392
-msgid "backend for `git stash -p`"
-msgstr "Backend für `git stash -p`"
-
-#: builtin/add.c:410
+#: builtin/add.c:407
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -10744,12 +11008,12 @@ msgstr ""
 "\n"
 "Siehe \"git help submodule\" für weitere Informationen."
 
-#: builtin/add.c:439
+#: builtin/add.c:436
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "Füge eingebettetes Repository hinzu: %s"
 
-#: builtin/add.c:459
+#: builtin/add.c:456
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
@@ -10759,28 +11023,28 @@ msgstr ""
 "Um diese Meldung abzuschalten, führen Sie folgenden Befehl aus:\n"
 "\"git config advice.addIgnoredFile false\""
 
-#: builtin/add.c:474
+#: builtin/add.c:471
 msgid "adding files failed"
 msgstr "Hinzufügen von Dateien fehlgeschlagen"
 
-#: builtin/add.c:548
+#: builtin/add.c:534
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "--chmod Parameter '%s' muss entweder -x oder +x sein"
 
-#: builtin/add.c:569 builtin/checkout.c:1751 builtin/commit.c:364
-#: builtin/reset.c:429 builtin/rm.c:275 builtin/stash.c:1713
+#: builtin/add.c:555 builtin/checkout.c:1770 builtin/commit.c:365
+#: builtin/reset.c:436 builtin/rm.c:275 builtin/stash.c:1702
 #, c-format
 msgid "'%s' and pathspec arguments cannot be used together"
 msgstr ""
 "'%s' und Pfadspezifikation-Argumente können nicht gemeinsam verwendet werden"
 
-#: builtin/add.c:580
+#: builtin/add.c:566
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "Nichts spezifiziert, nichts hinzugefügt.\n"
 
-#: builtin/add.c:582
+#: builtin/add.c:568
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
@@ -10790,124 +11054,119 @@ msgstr ""
 "Um diese Meldung abzuschalten, führen Sie folgenden Befehl aus:\n"
 "\"git config advice.addEmptyPathspec false\""
 
-#: builtin/am.c:202
-#, c-format
-msgid "Invalid value for --empty: %s"
-msgstr "Ungültiger Wert für --empty: %s"
-
-#: builtin/am.c:392
+#: builtin/am.c:393
 msgid "could not parse author script"
 msgstr "konnte Autor-Skript nicht parsen"
 
-#: builtin/am.c:482
+#: builtin/am.c:483
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "'%s' wurde durch den applypatch-msg Hook entfernt"
 
-#: builtin/am.c:524
+#: builtin/am.c:525
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Fehlerhafte Eingabezeile: '%s'."
 
-#: builtin/am.c:562
+#: builtin/am.c:563
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Fehler beim Kopieren der Notizen von '%s' nach '%s'"
 
-#: builtin/am.c:588
+#: builtin/am.c:589
 msgid "fseek failed"
 msgstr "\"fseek\" fehlgeschlagen"
 
-#: builtin/am.c:776
+#: builtin/am.c:777
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "konnte Patch '%s' nicht parsen"
 
-#: builtin/am.c:841
+#: builtin/am.c:842
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Es kann nur eine StGIT Patch-Serie auf einmal angewendet werden."
 
-#: builtin/am.c:889
+#: builtin/am.c:890
 msgid "invalid timestamp"
 msgstr "ungültiger Zeitstempel"
 
-#: builtin/am.c:894 builtin/am.c:906
+#: builtin/am.c:895 builtin/am.c:907
 msgid "invalid Date line"
 msgstr "Ungültige \"Date\"-Zeile"
 
-#: builtin/am.c:901
+#: builtin/am.c:902
 msgid "invalid timezone offset"
 msgstr "Ungültiger Offset in der Zeitzone"
 
-#: builtin/am.c:994
+#: builtin/am.c:995
 msgid "Patch format detection failed."
 msgstr "Patch-Formaterkennung fehlgeschlagen."
 
-#: builtin/am.c:999 builtin/clone.c:300
+#: builtin/am.c:1000 builtin/clone.c:306
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "Fehler beim Erstellen von Verzeichnis '%s'"
 
-#: builtin/am.c:1004
+#: builtin/am.c:1005
 msgid "Failed to split patches."
 msgstr "Fehler beim Aufteilen der Patches."
 
-#: builtin/am.c:1153
+#: builtin/am.c:1154
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr ""
 "Wenn Sie das Problem aufgelöst haben, führen Sie \"%s --continue\" aus."
 
-#: builtin/am.c:1154
+#: builtin/am.c:1155
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr ""
 "Falls Sie diesen Patch auslassen möchten, führen Sie stattdessen \"%s --skip"
 "\" aus."
 
-#: builtin/am.c:1159
+#: builtin/am.c:1160
 #, c-format
 msgid "To record the empty patch as an empty commit, run \"%s --allow-empty\"."
 msgstr ""
 "Um den leeren Patch als einen leeren Commit zu speichern, führen Sie \"%s --"
 "allow-empty\" aus."
 
-#: builtin/am.c:1161
+#: builtin/am.c:1162
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr ""
 "Um den ursprünglichen Branch wiederherzustellen und die Anwendung der "
 "Patches abzubrechen, führen Sie \"%s --abort\" aus."
 
-#: builtin/am.c:1256
+#: builtin/am.c:1257
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 "Patch mit format=flowed versendet; Leerzeichen am Ende von Zeilen könnte "
 "verloren gehen."
 
-#: builtin/am.c:1344
+#: builtin/am.c:1345
 #, c-format
 msgid "missing author line in commit %s"
 msgstr "Autor-Zeile fehlt in Commit %s"
 
-#: builtin/am.c:1347
+#: builtin/am.c:1348
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "Ungültige Identifikationszeile: %.*s"
 
-#: builtin/am.c:1566
+#: builtin/am.c:1567
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 "Dem Repository fehlen notwendige Blobs um auf einen 3-Wege-Merge "
 "zurückzufallen."
 
-#: builtin/am.c:1568
+#: builtin/am.c:1569
 msgid "Using index info to reconstruct a base tree..."
 msgstr ""
 "Verwende Informationen aus der Staging-Area, um ein Basisverzeichnis "
 "nachzustellen..."
 
-#: builtin/am.c:1587
+#: builtin/am.c:1588
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -10915,24 +11174,24 @@ msgstr ""
 "Haben Sie den Patch per Hand editiert?\n"
 "Er kann nicht auf die Blobs in seiner 'index' Zeile angewendet werden."
 
-#: builtin/am.c:1593
+#: builtin/am.c:1594
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "Falle zurück zum Patchen der Basis und zum 3-Wege-Merge..."
 
-#: builtin/am.c:1619
+#: builtin/am.c:1620
 msgid "Failed to merge in the changes."
 msgstr "Merge der Änderungen fehlgeschlagen."
 
-#: builtin/am.c:1651
+#: builtin/am.c:1652
 msgid "applying to an empty history"
 msgstr "auf leere Historie anwenden"
 
-#: builtin/am.c:1703 builtin/am.c:1707
+#: builtin/am.c:1704 builtin/am.c:1708
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "Kann nicht fortsetzen: %s existiert nicht"
 
-#: builtin/am.c:1725
+#: builtin/am.c:1726
 msgid "Commit Body is:"
 msgstr "Commit-Beschreibung ist:"
 
@@ -10940,59 +11199,59 @@ msgstr "Commit-Beschreibung ist:"
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1735
+#: builtin/am.c:1736
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr "Anwenden? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 
-#: builtin/am.c:1781 builtin/commit.c:409
+#: builtin/am.c:1782 builtin/commit.c:410
 msgid "unable to write index file"
-msgstr "Konnte Index-Datei nicht schreiben."
+msgstr "konnte Index-Datei nicht schreiben"
 
-#: builtin/am.c:1785
+#: builtin/am.c:1786
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Geänderter Index: kann Patches nicht anwenden (geändert: %s)"
 
-#: builtin/am.c:1827
+#: builtin/am.c:1828
 #, c-format
 msgid "Skipping: %.*s"
 msgstr "Überspringe: %.*s"
 
-#: builtin/am.c:1832
+#: builtin/am.c:1833
 #, c-format
 msgid "Creating an empty commit: %.*s"
 msgstr "Erzeuge leeren Commit: %.*s"
 
-#: builtin/am.c:1836
+#: builtin/am.c:1837
 msgid "Patch is empty."
 msgstr "Patch ist leer."
 
-#: builtin/am.c:1847 builtin/am.c:1916
+#: builtin/am.c:1848 builtin/am.c:1917
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Wende an: %.*s"
 
-#: builtin/am.c:1864
+#: builtin/am.c:1865
 msgid "No changes -- Patch already applied."
 msgstr "Keine Änderungen -- Patches bereits angewendet."
 
-#: builtin/am.c:1870
+#: builtin/am.c:1871
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "Anwendung des Patches fehlgeschlagen bei %s %.*s"
 
-#: builtin/am.c:1874
+#: builtin/am.c:1875
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr ""
 "Benutzen Sie 'git am --show-current-patch=diff', um den\n"
 "fehlgeschlagenen Patch zu sehen"
 
-#: builtin/am.c:1920
+#: builtin/am.c:1921
 msgid "No changes - recorded it as an empty commit."
 msgstr "Keine Änderungen - wurde als leerer Commit gespeichert."
 
-#: builtin/am.c:1922
+#: builtin/am.c:1923
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -11003,7 +11262,7 @@ msgstr ""
 "diese bereits anderweitig eingefügt worden sein; Sie könnten diesen Patch\n"
 "auslassen."
 
-#: builtin/am.c:1930
+#: builtin/am.c:1931
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -11016,17 +11275,17 @@ msgstr ""
 "Sie können `git rm` auf Dateien ausführen, um \"von denen gelöscht\" für\n"
 "diese zu akzeptieren."
 
-#: builtin/am.c:2038 builtin/am.c:2042 builtin/am.c:2054 builtin/reset.c:448
-#: builtin/reset.c:456
+#: builtin/am.c:2039 builtin/am.c:2043 builtin/am.c:2055 builtin/reset.c:455
+#: builtin/reset.c:463
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "Konnte Objekt '%s' nicht parsen."
 
-#: builtin/am.c:2090 builtin/am.c:2166
+#: builtin/am.c:2091 builtin/am.c:2167
 msgid "failed to clean index"
 msgstr "Fehler beim Bereinigen des Index"
 
-#: builtin/am.c:2134
+#: builtin/am.c:2135
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -11034,169 +11293,160 @@ msgstr ""
 "Sie scheinen seit dem letzten gescheiterten 'am' HEAD geändert zu haben.\n"
 "Keine Zurücksetzung zu ORIG_HEAD."
 
-#: builtin/am.c:2242
-#, c-format
-msgid "Invalid value for --patch-format: %s"
-msgstr "Ungültiger Wert für --patch-format: %s"
-
-#: builtin/am.c:2285
-#, c-format
-msgid "Invalid value for --show-current-patch: %s"
-msgstr "Ungültiger Wert für --show-current-patch: %s"
-
-#: builtin/am.c:2289
+#: builtin/am.c:2292
 #, c-format
 msgid "options '%s=%s' and '%s=%s' cannot be used together"
 msgstr ""
 "die Optionen '%s=%s' und '%s=%s' können nicht gemeinsam verwendet werden"
 
-#: builtin/am.c:2320
+#: builtin/am.c:2323
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<Optionen>] [(<mbox> | <E-Mail-Verzeichnis>)...]"
 
-#: builtin/am.c:2321
+#: builtin/am.c:2324
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<Optionen>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2327
+#: builtin/am.c:2330
 msgid "run interactively"
 msgstr "interaktiv ausführen"
 
-#: builtin/am.c:2329
+#: builtin/am.c:2332
 msgid "historical option -- no-op"
 msgstr "historische Option -- kein Effekt"
 
-#: builtin/am.c:2331
+#: builtin/am.c:2334
 msgid "allow fall back on 3way merging if needed"
 msgstr "erlaube, falls notwendig, das Zurückfallen auf einen 3-Wege-Merge"
 
-#: builtin/am.c:2332 builtin/init-db.c:547 builtin/prune-packed.c:16
-#: builtin/repack.c:642 builtin/stash.c:962
+#: builtin/am.c:2335 builtin/init-db.c:547 builtin/prune-packed.c:16
+#: builtin/repack.c:646 builtin/stash.c:946
 msgid "be quiet"
 msgstr "weniger Ausgaben"
 
-#: builtin/am.c:2334
+#: builtin/am.c:2337
 msgid "add a Signed-off-by trailer to the commit message"
 msgstr "eine Signed-off-by Zeile der Commit-Beschreibung hinzufügen"
 
-#: builtin/am.c:2337
+#: builtin/am.c:2340
 msgid "recode into utf8 (default)"
 msgstr "nach UTF-8 umkodieren (Standard)"
 
-#: builtin/am.c:2339
+#: builtin/am.c:2342
 msgid "pass -k flag to git-mailinfo"
 msgstr "-k an git-mailinfo übergeben"
 
-#: builtin/am.c:2341
+#: builtin/am.c:2344
 msgid "pass -b flag to git-mailinfo"
 msgstr "-b an git-mailinfo übergeben"
 
-#: builtin/am.c:2343
+#: builtin/am.c:2346
 msgid "pass -m flag to git-mailinfo"
 msgstr "-m an git-mailinfo übergeben"
 
-#: builtin/am.c:2345
+#: builtin/am.c:2348
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "--keep-cr an git-mailsplit für mbox-Format übergeben"
 
-#: builtin/am.c:2348
+#: builtin/am.c:2351
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr "kein --keep-cr an git-mailsplit übergeben, unabhängig von am.keepcr"
 
-#: builtin/am.c:2351
+#: builtin/am.c:2354
 msgid "strip everything before a scissors line"
 msgstr "alles vor einer Scheren-Zeile entfernen"
 
-#: builtin/am.c:2353
+#: builtin/am.c:2356
 msgid "pass it through git-mailinfo"
 msgstr "an git-mailinfo weitergeben"
 
-#: builtin/am.c:2356 builtin/am.c:2359 builtin/am.c:2362 builtin/am.c:2365
-#: builtin/am.c:2368 builtin/am.c:2371 builtin/am.c:2374 builtin/am.c:2377
-#: builtin/am.c:2383
+#: builtin/am.c:2359 builtin/am.c:2362 builtin/am.c:2365 builtin/am.c:2368
+#: builtin/am.c:2371 builtin/am.c:2374 builtin/am.c:2377 builtin/am.c:2380
+#: builtin/am.c:2386
 msgid "pass it through git-apply"
 msgstr "an git-apply übergeben"
 
-#: builtin/am.c:2373 builtin/commit.c:1515 builtin/fmt-merge-msg.c:18
-#: builtin/fmt-merge-msg.c:21 builtin/grep.c:919 builtin/merge.c:263
+#: builtin/am.c:2376 builtin/commit.c:1514 builtin/fmt-merge-msg.c:18
+#: builtin/fmt-merge-msg.c:21 builtin/grep.c:920 builtin/merge.c:263
 #: builtin/pull.c:142 builtin/pull.c:204 builtin/pull.c:221
-#: builtin/rebase.c:1046 builtin/repack.c:653 builtin/repack.c:657
-#: builtin/repack.c:659 builtin/show-branch.c:649 builtin/show-ref.c:172
-#: builtin/tag.c:445 parse-options.h:154 parse-options.h:175
-#: parse-options.h:317
+#: builtin/rebase.c:1074 builtin/repack.c:657 builtin/repack.c:661
+#: builtin/repack.c:663 builtin/show-branch.c:650 builtin/show-ref.c:172
+#: builtin/tag.c:446 parse-options.h:159 parse-options.h:180
+#: parse-options.h:348
 msgid "n"
 msgstr "Anzahl"
 
-#: builtin/am.c:2379 builtin/branch.c:680 builtin/bugreport.c:109
-#: builtin/for-each-ref.c:41 builtin/replace.c:555 builtin/tag.c:479
-#: builtin/verify-tag.c:38
+#: builtin/am.c:2382 builtin/branch.c:695 builtin/bugreport.c:109
+#: builtin/cat-file.c:848 builtin/cat-file.c:852 builtin/cat-file.c:856
+#: builtin/for-each-ref.c:41 builtin/ls-tree.c:357 builtin/replace.c:555
+#: builtin/tag.c:480 builtin/verify-tag.c:38
 msgid "format"
 msgstr "Format"
 
-#: builtin/am.c:2380
+#: builtin/am.c:2383
 msgid "format the patch(es) are in"
 msgstr "Patch-Format"
 
-#: builtin/am.c:2386
+#: builtin/am.c:2389
 msgid "override error message when patch failure occurs"
 msgstr "Meldung bei fehlerhafter Patch-Anwendung überschreiben"
 
-#: builtin/am.c:2388
+#: builtin/am.c:2391
 msgid "continue applying patches after resolving a conflict"
 msgstr "Anwendung der Patches nach Auflösung eines Konfliktes fortsetzen"
 
-#: builtin/am.c:2391
+#: builtin/am.c:2394
 msgid "synonyms for --continue"
 msgstr "Synonyme für --continue"
 
-#: builtin/am.c:2394
+#: builtin/am.c:2397
 msgid "skip the current patch"
 msgstr "den aktuellen Patch auslassen"
 
-#: builtin/am.c:2397
+#: builtin/am.c:2400
 msgid "restore the original branch and abort the patching operation"
 msgstr ""
 "ursprünglichen Branch wiederherstellen und Anwendung der Patches abbrechen"
 
-#: builtin/am.c:2400
+#: builtin/am.c:2403
 msgid "abort the patching operation but keep HEAD where it is"
 msgstr "Patch-Operation abbrechen, aber HEAD an aktueller Stelle belassen"
 
-#: builtin/am.c:2404
+#: builtin/am.c:2407
 msgid "show the patch being applied"
 msgstr "den Patch, der gerade angewendet wird, anzeigen"
 
-#: builtin/am.c:2408
+#: builtin/am.c:2411
 msgid "record the empty patch as an empty commit"
 msgstr "leerer Patch als leeren Commit gespeichert"
 
-#: builtin/am.c:2412
+#: builtin/am.c:2415
 msgid "lie about committer date"
 msgstr "Autor-Datum als Commit-Datum verwenden"
 
-#: builtin/am.c:2414
+#: builtin/am.c:2417
 msgid "use current timestamp for author date"
 msgstr "aktuellen Zeitstempel als Autor-Datum verwenden"
 
-#: builtin/am.c:2416 builtin/commit-tree.c:118 builtin/commit.c:1643
-#: builtin/merge.c:302 builtin/pull.c:179 builtin/rebase.c:1099
-#: builtin/revert.c:117 builtin/tag.c:460
+#: builtin/am.c:2419 builtin/commit-tree.c:118 builtin/commit.c:1642
+#: builtin/merge.c:302 builtin/pull.c:179 builtin/rebase.c:1127
+#: builtin/revert.c:117 builtin/tag.c:461
 msgid "key-id"
 msgstr "GPG-Schlüsselkennung"
 
-#: builtin/am.c:2417 builtin/rebase.c:1100
+#: builtin/am.c:2420 builtin/rebase.c:1128
 msgid "GPG-sign commits"
 msgstr "Commits mit GPG signieren"
 
-#: builtin/am.c:2420
+#: builtin/am.c:2423
 msgid "how to handle empty patches"
 msgstr "wie leere Patches behandelt werden sollen"
 
-#: builtin/am.c:2423
+#: builtin/am.c:2426
 msgid "(internal use for git-rebase)"
 msgstr "(intern für git-rebase verwendet)"
 
-#: builtin/am.c:2441
+#: builtin/am.c:2444
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
@@ -11204,16 +11454,16 @@ msgstr ""
 "Die -b/--binary Option hat seit Langem keinen Effekt und wird\n"
 "entfernt. Bitte verwenden Sie diese nicht mehr."
 
-#: builtin/am.c:2448
+#: builtin/am.c:2451
 msgid "failed to read the index"
 msgstr "Fehler beim Lesen des Index"
 
-#: builtin/am.c:2463
+#: builtin/am.c:2466
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr "Vorheriges Rebase-Verzeichnis %s existiert noch, aber mbox gegeben."
 
-#: builtin/am.c:2487
+#: builtin/am.c:2490
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -11222,11 +11472,11 @@ msgstr ""
 "Stray %s Verzeichnis gefunden.\n"
 "Benutzen Sie \"git am --abort\", um es zu entfernen."
 
-#: builtin/am.c:2493
+#: builtin/am.c:2496
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "Es ist keine Auflösung im Gange, es wird nicht fortgesetzt."
 
-#: builtin/am.c:2503
+#: builtin/am.c:2506
 msgid "interactive mode requires patches on the command line"
 msgstr "Interaktiver Modus benötigt Patches über die Kommandozeile"
 
@@ -11236,7 +11486,7 @@ msgstr "git apply [<Optionen>] [<Patch>...]"
 
 #: builtin/archive.c:18
 msgid "could not redirect output"
-msgstr "Konnte Ausgabe nicht umleiten."
+msgstr "konnte Ausgabe nicht umleiten"
 
 #: builtin/archive.c:35
 msgid "git archive: Remote with no URL"
@@ -11263,14 +11513,6 @@ msgstr "git archive: erwartete eine Spülung (flush)"
 msgid "git bisect--helper --bisect-reset [<commit>]"
 msgstr "git bisect--helper --bisect-reset [<Commit>]"
 
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
-msgstr ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
-
 #: builtin/bisect--helper.c:26
 msgid ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
@@ -11281,10 +11523,6 @@ msgstr ""
 "good}=<Begriff>] [--no-checkout] [--first-parent] [<schlecht> [<gut>...]] "
 "[--] [<Pfade>...]"
 
-#: builtin/bisect--helper.c:28
-msgid "git bisect--helper --bisect-next"
-msgstr "git bisect--helper --bisect-next"
-
 #: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr "git bisect--helper --bisect-state (bad|new) [<Commit>]"
@@ -11301,10 +11539,6 @@ msgstr "git bisect--helper --bisect-replay <Dateiname>"
 msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
 msgstr "git bisect--helper --bisect-skip [(<Commit>|<Bereich>)...]"
 
-#: builtin/bisect--helper.c:33
-msgid "git bisect--helper --bisect-visualize"
-msgstr "git bisect--helper --bisect-visualize"
-
 #: builtin/bisect--helper.c:34
 msgid "git bisect--helper --bisect-run <cmd>..."
 msgstr "git bisect--helper --bisect-run <Programm>..."
@@ -11529,40 +11763,50 @@ msgstr "'%s'?? Was reden Sie da?"
 msgid "cannot read file '%s' for replaying"
 msgstr "kann Datei '%s' nicht für die Wiederholung lesen"
 
-#: builtin/bisect--helper.c:1107 builtin/bisect--helper.c:1274
+#: builtin/bisect--helper.c:1120 builtin/bisect--helper.c:1152
+#, c-format
+msgid "running %s\n"
+msgstr "Ausführen von %s\n"
+
+#: builtin/bisect--helper.c:1145 builtin/bisect--helper.c:1335
 msgid "bisect run failed: no command provided."
 msgstr "'bisect run' fehlgeschlagen: kein Befehl angegeben."
 
-#: builtin/bisect--helper.c:1116
+#: builtin/bisect--helper.c:1166
 #, c-format
-msgid "running %s\n"
-msgstr "Ausführen von %s\n"
+msgid "unable to verify '%s' on good revision"
+msgstr "konnte '%s' nicht für guten Commit überprüfen"
+
+#: builtin/bisect--helper.c:1172
+#, c-format
+msgid "bogus exit code %d for good revision"
+msgstr "fehlerhafter Exit-Code %d für guten Commit"
 
-#: builtin/bisect--helper.c:1120
+#: builtin/bisect--helper.c:1180
 #, c-format
 msgid "bisect run failed: exit code %d from '%s' is < 0 or >= 128"
 msgstr "'bisect run' fehlgeschlagen: Exit-Code %d von '%s' ist < 0 oder >= 128"
 
-#: builtin/bisect--helper.c:1136
+#: builtin/bisect--helper.c:1195
 #, c-format
 msgid "cannot open file '%s' for writing"
 msgstr "Datei '%s' kann nicht zum Schreiben geöffnet werden"
 
-#: builtin/bisect--helper.c:1152
+#: builtin/bisect--helper.c:1213
 msgid "bisect run cannot continue any more"
 msgstr "'bisect run' kann nicht mehr fortgesetzt werden"
 
-#: builtin/bisect--helper.c:1154
+#: builtin/bisect--helper.c:1215
 #, c-format
 msgid "bisect run success"
 msgstr "'bisect run' erfolgreich ausgeführt"
 
-#: builtin/bisect--helper.c:1157
+#: builtin/bisect--helper.c:1218
 #, c-format
 msgid "bisect found first bad commit"
 msgstr "binäre Suche fand ersten schlechten Commit"
 
-#: builtin/bisect--helper.c:1160
+#: builtin/bisect--helper.c:1221
 #, c-format
 msgid ""
 "bisect run failed: 'git bisect--helper --bisect-state %s' exited with error "
@@ -11571,71 +11815,71 @@ msgstr ""
 "'bisect run' fehlgeschlagen: 'git bisect--helper --bisect-state %s' mit "
 "Fehlercode %d beendet"
 
-#: builtin/bisect--helper.c:1192
+#: builtin/bisect--helper.c:1253
 msgid "reset the bisection state"
 msgstr "den Zustand der binären Suche zurücksetzen"
 
-#: builtin/bisect--helper.c:1194
+#: builtin/bisect--helper.c:1255
 msgid "check whether bad or good terms exist"
 msgstr "prüfen, ob Begriffe für gute und schlechte Commits existieren"
 
-#: builtin/bisect--helper.c:1196
+#: builtin/bisect--helper.c:1257
 msgid "print out the bisect terms"
 msgstr "die Begriffe für die binäre Suche ausgeben"
 
-#: builtin/bisect--helper.c:1198
+#: builtin/bisect--helper.c:1259
 msgid "start the bisect session"
 msgstr "Sitzung für binäre Suche starten"
 
-#: builtin/bisect--helper.c:1200
+#: builtin/bisect--helper.c:1261
 msgid "find the next bisection commit"
 msgstr "nächsten Commit für die binäre Suche finden"
 
-#: builtin/bisect--helper.c:1202
+#: builtin/bisect--helper.c:1263
 msgid "mark the state of ref (or refs)"
 msgstr "den Status der Referenz(en) markieren"
 
-#: builtin/bisect--helper.c:1204
+#: builtin/bisect--helper.c:1265
 msgid "list the bisection steps so far"
 msgstr "die bisherigen Schritte der binären Suche auflisten"
 
-#: builtin/bisect--helper.c:1206
+#: builtin/bisect--helper.c:1267
 msgid "replay the bisection process from the given file"
 msgstr "binäre Suche aus der angegebenen Datei wiederholen"
 
-#: builtin/bisect--helper.c:1208
+#: builtin/bisect--helper.c:1269
 msgid "skip some commits for checkout"
 msgstr "einige Commits für das Auschecken überspringen"
 
-#: builtin/bisect--helper.c:1210
+#: builtin/bisect--helper.c:1271
 msgid "visualize the bisection"
 msgstr "binäre Suche visualisieren"
 
-#: builtin/bisect--helper.c:1212
-msgid "use <cmd>... to automatically bisect."
-msgstr "verwende <Programm>... für die automatische binäre Suche."
+#: builtin/bisect--helper.c:1273
+msgid "use <cmd>... to automatically bisect"
+msgstr "verwende <Programm>... für die automatische binäre Suche"
 
-#: builtin/bisect--helper.c:1214
+#: builtin/bisect--helper.c:1275
 msgid "no log for BISECT_WRITE"
 msgstr "kein Log für BISECT_WRITE"
 
-#: builtin/bisect--helper.c:1229
+#: builtin/bisect--helper.c:1290
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr "--bisect-reset benötigt entweder kein Argument oder ein Commit"
 
-#: builtin/bisect--helper.c:1234
+#: builtin/bisect--helper.c:1295
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms benötigt 0 oder 1 Argument"
 
-#: builtin/bisect--helper.c:1243
+#: builtin/bisect--helper.c:1304
 msgid "--bisect-next requires 0 arguments"
 msgstr "--bisect-next benötigt 0 Argumente"
 
-#: builtin/bisect--helper.c:1254
+#: builtin/bisect--helper.c:1315
 msgid "--bisect-log requires 0 arguments"
 msgstr "--bisect-log benötigt 0 Argumente"
 
-#: builtin/bisect--helper.c:1259
+#: builtin/bisect--helper.c:1320
 msgid "no logfile given"
 msgstr "keine Log-Datei angegeben"
 
@@ -11656,148 +11900,139 @@ msgstr "erwarte eine Farbe: %s"
 msgid "must end with a color"
 msgstr "muss mit einer Farbe enden"
 
-#: builtin/blame.c:724
-#, c-format
-msgid "invalid color '%s' in color.blame.repeatedLines"
-msgstr "ungültige Farbe '%s' in color.blame.repeatedLines"
-
-#: builtin/blame.c:742
-msgid "invalid value for blame.coloring"
-msgstr "ungültiger Wert für blame.coloring"
-
-#: builtin/blame.c:841
+#: builtin/blame.c:842
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "konnte Commit %s zum Ignorieren nicht finden"
 
-#: builtin/blame.c:863
+#: builtin/blame.c:864
 msgid "show blame entries as we find them, incrementally"
 msgstr "\"blame\"-Einträge schrittweise anzeigen, während wir sie finden"
 
-#: builtin/blame.c:864
+#: builtin/blame.c:865
 msgid "do not show object names of boundary commits (Default: off)"
 msgstr "keine Objektnamen für Grenz-Commits anzeigen (Standard: aus)"
 
-#: builtin/blame.c:865
+#: builtin/blame.c:866
 msgid "do not treat root commits as boundaries (Default: off)"
 msgstr "Root-Commits nicht als Grenzen behandeln (Standard: aus)"
 
-#: builtin/blame.c:866
+#: builtin/blame.c:867
 msgid "show work cost statistics"
 msgstr "Statistiken zum Arbeitsaufwand anzeigen"
 
-#: builtin/blame.c:867 builtin/checkout.c:1536 builtin/clone.c:94
-#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:180
+#: builtin/blame.c:868 builtin/checkout.c:1554 builtin/clone.c:98
+#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:181
 #: builtin/merge.c:301 builtin/multi-pack-index.c:103
 #: builtin/multi-pack-index.c:154 builtin/multi-pack-index.c:180
 #: builtin/multi-pack-index.c:208 builtin/pull.c:120 builtin/push.c:566
-#: builtin/send-pack.c:202
+#: builtin/remote.c:683 builtin/send-pack.c:202
 msgid "force progress reporting"
 msgstr "Fortschrittsanzeige erzwingen"
 
-#: builtin/blame.c:868
+#: builtin/blame.c:869
 msgid "show output score for blame entries"
 msgstr "Ausgabebewertung für \"blame\"-Einträge anzeigen"
 
-#: builtin/blame.c:869
+#: builtin/blame.c:870
 msgid "show original filename (Default: auto)"
 msgstr "ursprünglichen Dateinamen anzeigen (Standard: auto)"
 
-#: builtin/blame.c:870
+#: builtin/blame.c:871
 msgid "show original linenumber (Default: off)"
 msgstr "ursprüngliche Zeilennummer anzeigen (Standard: aus)"
 
-#: builtin/blame.c:871
+#: builtin/blame.c:872
 msgid "show in a format designed for machine consumption"
 msgstr "Anzeige in einem Format für maschinelle Auswertung"
 
-#: builtin/blame.c:872
+#: builtin/blame.c:873
 msgid "show porcelain format with per-line commit information"
 msgstr ""
 "Anzeige in Format für Fremdprogramme mit Commit-Informationen pro Zeile"
 
-#: builtin/blame.c:873
+#: builtin/blame.c:874
 msgid "use the same output mode as git-annotate (Default: off)"
 msgstr ""
 "den gleichen Ausgabemodus benutzen wie \"git-annotate\" (Standard: aus)"
 
-#: builtin/blame.c:874
+#: builtin/blame.c:875
 msgid "show raw timestamp (Default: off)"
 msgstr "unbearbeiteten Zeitstempel anzeigen (Standard: aus)"
 
-#: builtin/blame.c:875
+#: builtin/blame.c:876
 msgid "show long commit SHA1 (Default: off)"
 msgstr "langen Commit-SHA1 anzeigen (Standard: aus)"
 
-#: builtin/blame.c:876
+#: builtin/blame.c:877
 msgid "suppress author name and timestamp (Default: off)"
 msgstr "den Namen des Autors und den Zeitstempel unterdrücken (Standard: aus)"
 
-#: builtin/blame.c:877
+#: builtin/blame.c:878
 msgid "show author email instead of name (Default: off)"
 msgstr ""
 "statt des Namens die E-Mail-Adresse des Autors anzeigen (Standard: aus)"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:879
 msgid "ignore whitespace differences"
 msgstr "Whitespace-Unterschiede ignorieren"
 
-#: builtin/blame.c:879 builtin/log.c:1838
+#: builtin/blame.c:880 builtin/log.c:1857
 msgid "rev"
 msgstr "Commit"
 
-#: builtin/blame.c:879
+#: builtin/blame.c:880
 msgid "ignore <rev> when blaming"
 msgstr "ignoriere <Commit> beim Ausführen von 'blame'"
 
-#: builtin/blame.c:880
+#: builtin/blame.c:881
 msgid "ignore revisions from <file>"
 msgstr "ignoriere Commits aus <Datei>"
 
-#: builtin/blame.c:881
+#: builtin/blame.c:882
 msgid "color redundant metadata from previous line differently"
 msgstr "redundante Metadaten der vorherigen Zeile unterschiedlich einfärben"
 
-#: builtin/blame.c:882
+#: builtin/blame.c:883
 msgid "color lines by age"
 msgstr "Zeilen nach Alter einfärben"
 
-#: builtin/blame.c:883
+#: builtin/blame.c:884
 msgid "spend extra cycles to find better match"
 msgstr ""
 "mehr Arbeitsschritte ausführen, um eine bessere Übereinstimmung zu finden"
 
-#: builtin/blame.c:884
+#: builtin/blame.c:885
 msgid "use revisions from <file> instead of calling git-rev-list"
 msgstr "Commits von <Datei> benutzen, statt \"git-rev-list\" aufzurufen"
 
-#: builtin/blame.c:885
+#: builtin/blame.c:886
 msgid "use <file>'s contents as the final image"
 msgstr "Inhalte der <Datei>en als endgültiges Abbild benutzen"
 
-#: builtin/blame.c:886 builtin/blame.c:887
+#: builtin/blame.c:887 builtin/blame.c:888
 msgid "score"
 msgstr "Bewertung"
 
-#: builtin/blame.c:886
+#: builtin/blame.c:887
 msgid "find line copies within and across files"
 msgstr "kopierte Zeilen innerhalb oder zwischen Dateien finden"
 
-#: builtin/blame.c:887
+#: builtin/blame.c:888
 msgid "find line movements within and across files"
 msgstr "verschobene Zeilen innerhalb oder zwischen Dateien finden"
 
-#: builtin/blame.c:888
+#: builtin/blame.c:889
 msgid "range"
 msgstr "Bereich"
 
-#: builtin/blame.c:889
+#: builtin/blame.c:890
 msgid "process only line range <start>,<end> or function :<funcname>"
 msgstr ""
 "nur Zeilen im Bereich <Start>,<Ende> oder Funktion :<Funktionsname> "
 "verarbeiten"
 
-#: builtin/blame.c:947
+#: builtin/blame.c:949
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr ""
 "--progress kann nicht mit --incremental oder Formaten für Fremdprogramme\n"
@@ -11811,18 +12046,18 @@ msgstr ""
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:998
+#: builtin/blame.c:1000
 msgid "4 years, 11 months ago"
 msgstr "vor 4 Jahren und 11 Monaten"
 
-#: builtin/blame.c:1114
+#: builtin/blame.c:1116
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] "Datei %s hat nur %lu Zeile"
 msgstr[1] "Datei %s hat nur %lu Zeilen"
 
-#: builtin/blame.c:1159
+#: builtin/blame.c:1161
 msgid "Blaming lines"
 msgstr "Verarbeite Zeilen"
 
@@ -11831,30 +12066,38 @@ msgid "git branch [<options>] [-r | -a] [--merged] [--no-merged]"
 msgstr "git branch [<Optionen>] [-r | -a] [--merged] [--no-merged]"
 
 #: builtin/branch.c:30
-msgid "git branch [<options>] [-l] [-f] <branch-name> [<start-point>]"
-msgstr "git branch [<Optionen>] [-l] [-f] <Branchname> [<Startpunkt>]"
+msgid ""
+"git branch [<options>] [-f] [--recurse-submodules] <branch-name> [<start-"
+"point>]"
+msgstr ""
+"git branch [<Optionen>] [-f] [--recurse-submodules] <Branchname> "
+"[<Startpunkt>]"
 
 #: builtin/branch.c:31
+msgid "git branch [<options>] [-l] [<pattern>...]"
+msgstr "git branch [<Optionen>] [-l] [<Muster>...]"
+
+#: builtin/branch.c:32
 msgid "git branch [<options>] [-r] (-d | -D) <branch-name>..."
 msgstr "git branch [<Optionen>] [-r] (-d | -D) <Branchname>..."
 
-#: builtin/branch.c:32
+#: builtin/branch.c:33
 msgid "git branch [<options>] (-m | -M) [<old-branch>] <new-branch>"
 msgstr "git branch [<Optionen>] (-m | -M) [<alter-Branch>] <neuer-Branch>"
 
-#: builtin/branch.c:33
+#: builtin/branch.c:34
 msgid "git branch [<options>] (-c | -C) [<old-branch>] <new-branch>"
 msgstr "git branch [<Optionen>] (-c | -C) [<alter-Branch>] <neuer-Branch>"
 
-#: builtin/branch.c:34
+#: builtin/branch.c:35
 msgid "git branch [<options>] [-r | -a] [--points-at]"
 msgstr "git branch [<Optionen>] [-r | -a] [--points-at]"
 
-#: builtin/branch.c:35
+#: builtin/branch.c:36
 msgid "git branch [<options>] [-r | -a] [--format]"
 msgstr "git branch [<Optionen>] [-r | -a] [--format]"
 
-#: builtin/branch.c:153
+#: builtin/branch.c:165
 #, c-format
 msgid ""
 "deleting branch '%s' that has been merged to\n"
@@ -11863,7 +12106,7 @@ msgstr ""
 "entferne Branch '%s', der zusammengeführt wurde mit\n"
 "         '%s', aber noch nicht mit HEAD zusammengeführt wurde."
 
-#: builtin/branch.c:157
+#: builtin/branch.c:169
 #, c-format
 msgid ""
 "not deleting branch '%s' that is not yet merged to\n"
@@ -11872,12 +12115,12 @@ msgstr ""
 "entferne Branch '%s' nicht, der noch nicht zusammengeführt wurde mit\n"
 "         '%s', obwohl er mit HEAD zusammengeführt wurde."
 
-#: builtin/branch.c:171
+#: builtin/branch.c:183
 #, c-format
 msgid "Couldn't look up commit object for '%s'"
 msgstr "Konnte Commit-Objekt für '%s' nicht nachschlagen."
 
-#: builtin/branch.c:175
+#: builtin/branch.c:187
 #, c-format
 msgid ""
 "The branch '%s' is not fully merged.\n"
@@ -11887,118 +12130,118 @@ msgstr ""
 "Wenn Sie sicher sind diesen Branch zu entfernen, führen Sie 'git branch -D "
 "%s' aus."
 
-#: builtin/branch.c:188
+#: builtin/branch.c:200
 msgid "Update of config-file failed"
 msgstr "Aktualisierung der Konfigurationsdatei fehlgeschlagen."
 
-#: builtin/branch.c:223
+#: builtin/branch.c:235
 msgid "cannot use -a with -d"
 msgstr "kann -a nicht mit -d benutzen"
 
-#: builtin/branch.c:230
+#: builtin/branch.c:242
 msgid "Couldn't look up commit object for HEAD"
 msgstr "Konnte Commit-Objekt für HEAD nicht nachschlagen."
 
-#: builtin/branch.c:247
+#: builtin/branch.c:259
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr "Kann Branch '%s' nicht entfernen, ausgecheckt in '%s'."
 
-#: builtin/branch.c:262
+#: builtin/branch.c:274
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "Remote-Tracking-Branch '%s' nicht gefunden"
 
-#: builtin/branch.c:263
+#: builtin/branch.c:275
 #, c-format
 msgid "branch '%s' not found."
 msgstr "Branch '%s' nicht gefunden."
 
-#: builtin/branch.c:294
+#: builtin/branch.c:306
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "Remote-Tracking-Branch %s entfernt (war %s).\n"
 
-#: builtin/branch.c:295
+#: builtin/branch.c:307
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "Branch %s entfernt (war %s).\n"
 
-#: builtin/branch.c:445 builtin/tag.c:63
+#: builtin/branch.c:457 builtin/tag.c:64
 msgid "unable to parse format string"
 msgstr "Konnte Formatierungsstring nicht parsen."
 
-#: builtin/branch.c:476
+#: builtin/branch.c:488
 msgid "could not resolve HEAD"
-msgstr "Konnte HEAD-Commit nicht auflösen."
+msgstr "konnte HEAD-Commit nicht auflösen"
 
-#: builtin/branch.c:482
+#: builtin/branch.c:494
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "HEAD (%s) wurde nicht unter \"refs/heads/\" gefunden!"
 
-#: builtin/branch.c:497
+#: builtin/branch.c:509
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "Branch %s wird auf %s umgesetzt"
 
-#: builtin/branch.c:501
+#: builtin/branch.c:513
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "Binäre Suche von Branch %s zu %s im Gange"
 
-#: builtin/branch.c:518
+#: builtin/branch.c:530
 msgid "cannot copy the current branch while not on any."
 msgstr ""
 "Kann den aktuellen Branch nicht kopieren, solange Sie sich auf keinem "
 "befinden."
 
-#: builtin/branch.c:520
+#: builtin/branch.c:532
 msgid "cannot rename the current branch while not on any."
 msgstr ""
 "Kann aktuellen Branch nicht umbenennen, solange Sie sich auf keinem befinden."
 
-#: builtin/branch.c:531
+#: builtin/branch.c:543
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Ungültiger Branchname: '%s'"
 
-#: builtin/branch.c:560
+#: builtin/branch.c:572
 msgid "Branch rename failed"
 msgstr "Umbenennung des Branches fehlgeschlagen"
 
-#: builtin/branch.c:562
+#: builtin/branch.c:574
 msgid "Branch copy failed"
 msgstr "Kopie des Branches fehlgeschlagen"
 
-#: builtin/branch.c:566
+#: builtin/branch.c:578
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "Kopie eines falsch benannten Branches '%s' erstellt."
 
-#: builtin/branch.c:569
+#: builtin/branch.c:581
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "falsch benannten Branch '%s' umbenannt"
 
-#: builtin/branch.c:575
+#: builtin/branch.c:587
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "Branch umbenannt zu %s, aber HEAD ist nicht aktualisiert!"
 
-#: builtin/branch.c:584
+#: builtin/branch.c:596
 msgid "Branch is renamed, but update of config-file failed"
 msgstr ""
 "Branch ist umbenannt, aber die Aktualisierung der Konfigurationsdatei ist "
 "fehlgeschlagen."
 
-#: builtin/branch.c:586
+#: builtin/branch.c:598
 msgid "Branch is copied, but update of config-file failed"
 msgstr ""
 "Branch wurde kopiert, aber die Aktualisierung der Konfigurationsdatei ist\n"
 "fehlgeschlagen."
 
-#: builtin/branch.c:602
+#: builtin/branch.c:614
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -12009,177 +12252,194 @@ msgstr ""
 "  %s\n"
 "Zeilen, die mit '%c' beginnen, werden entfernt.\n"
 
-#: builtin/branch.c:637
+#: builtin/branch.c:651
 msgid "Generic options"
 msgstr "Allgemeine Optionen"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:653
 msgid "show hash and subject, give twice for upstream branch"
 msgstr "Hash und Betreff anzeigen; -vv: zusätzlich Upstream-Branch"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:654
 msgid "suppress informational messages"
 msgstr "Informationsmeldungen unterdrücken"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:656 builtin/checkout.c:1571
+#: builtin/submodule--helper.c:3077
 msgid "set branch tracking configuration"
 msgstr "Branch-Tracking-Konfiguration setzen"
 
-#: builtin/branch.c:645
+#: builtin/branch.c:659
 msgid "do not use"
 msgstr "nicht verwenden"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:661
 msgid "upstream"
 msgstr "Upstream"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:661
 msgid "change the upstream info"
 msgstr "Informationen zum Upstream-Branch ändern"
 
-#: builtin/branch.c:648
+#: builtin/branch.c:662
 msgid "unset the upstream info"
 msgstr "Informationen zum Upstream-Branch entfernen"
 
-#: builtin/branch.c:649
+#: builtin/branch.c:663
 msgid "use colored output"
 msgstr "farbige Ausgaben verwenden"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:664
 msgid "act on remote-tracking branches"
 msgstr "auf Remote-Tracking-Branches wirken"
 
-#: builtin/branch.c:652 builtin/branch.c:654
+#: builtin/branch.c:666 builtin/branch.c:668
 msgid "print only branches that contain the commit"
 msgstr "nur Branches ausgeben, die diesen Commit enthalten"
 
-#: builtin/branch.c:653 builtin/branch.c:655
+#: builtin/branch.c:667 builtin/branch.c:669
 msgid "print only branches that don't contain the commit"
 msgstr "nur Branches ausgeben, die diesen Commit nicht enthalten"
 
-#: builtin/branch.c:658
+#: builtin/branch.c:672
 msgid "Specific git-branch actions:"
 msgstr "spezifische Aktionen für \"git-branch\":"
 
-#: builtin/branch.c:659
+#: builtin/branch.c:673
 msgid "list both remote-tracking and local branches"
 msgstr "Remote-Tracking und lokale Branches auflisten"
 
-#: builtin/branch.c:661
+#: builtin/branch.c:675
 msgid "delete fully merged branch"
 msgstr "vollständig zusammengeführten Branch entfernen"
 
-#: builtin/branch.c:662
+#: builtin/branch.c:676
 msgid "delete branch (even if not merged)"
 msgstr "Branch löschen (auch wenn nicht zusammengeführt)"
 
-#: builtin/branch.c:663
+#: builtin/branch.c:677
 msgid "move/rename a branch and its reflog"
 msgstr "einen Branch und dessen Reflog verschieben/umbenennen"
 
-#: builtin/branch.c:664
+#: builtin/branch.c:678
 msgid "move/rename a branch, even if target exists"
 msgstr ""
 "einen Branch verschieben/umbenennen, auch wenn das Ziel bereits existiert"
 
-#: builtin/branch.c:665
+#: builtin/branch.c:679
 msgid "copy a branch and its reflog"
 msgstr "einen Branch und dessen Reflog kopieren"
 
-#: builtin/branch.c:666
+#: builtin/branch.c:680
 msgid "copy a branch, even if target exists"
 msgstr "einen Branch kopieren, auch wenn das Ziel bereits existiert"
 
-#: builtin/branch.c:667
+#: builtin/branch.c:681
 msgid "list branch names"
 msgstr "Branchnamen auflisten"
 
-#: builtin/branch.c:668
+#: builtin/branch.c:682
 msgid "show current branch name"
 msgstr "Zeige aktuellen Branchnamen."
 
-#: builtin/branch.c:669
+#: builtin/branch.c:683 builtin/submodule--helper.c:3075
 msgid "create the branch's reflog"
 msgstr "das Reflog des Branches erzeugen"
 
-#: builtin/branch.c:671
+#: builtin/branch.c:685
 msgid "edit the description for the branch"
 msgstr "die Beschreibung für den Branch bearbeiten"
 
-#: builtin/branch.c:672
+#: builtin/branch.c:686
 msgid "force creation, move/rename, deletion"
 msgstr "Erstellung, Verschiebung/Umbenennung oder Löschung erzwingen"
 
-#: builtin/branch.c:673
+#: builtin/branch.c:687
 msgid "print only branches that are merged"
 msgstr "nur zusammengeführte Branches ausgeben"
 
-#: builtin/branch.c:674
+#: builtin/branch.c:688
 msgid "print only branches that are not merged"
 msgstr "nur nicht zusammengeführte Branches ausgeben"
 
-#: builtin/branch.c:675
+#: builtin/branch.c:689
 msgid "list branches in columns"
 msgstr "Branches in Spalten auflisten"
 
-#: builtin/branch.c:677 builtin/for-each-ref.c:45 builtin/notes.c:413
+#: builtin/branch.c:691 builtin/for-each-ref.c:45 builtin/notes.c:413
 #: builtin/notes.c:416 builtin/notes.c:579 builtin/notes.c:582
-#: builtin/tag.c:475
+#: builtin/tag.c:476
 msgid "object"
 msgstr "Objekt"
 
-#: builtin/branch.c:678
+#: builtin/branch.c:692
 msgid "print only branches of the object"
 msgstr "nur Branches von diesem Objekt ausgeben"
 
-#: builtin/branch.c:679 builtin/for-each-ref.c:51 builtin/tag.c:482
+#: builtin/branch.c:693 builtin/for-each-ref.c:51 builtin/tag.c:483
 msgid "sorting and filtering are case insensitive"
 msgstr "Sortierung und Filterung sind unabhängig von Groß- und Kleinschreibung"
 
-#: builtin/branch.c:680 builtin/for-each-ref.c:41 builtin/tag.c:480
-#: builtin/verify-tag.c:38
+#: builtin/branch.c:694 builtin/ls-files.c:667
+msgid "recurse through submodules"
+msgstr "Rekursion in Submodulen durchführen"
+
+#: builtin/branch.c:695 builtin/for-each-ref.c:41 builtin/ls-tree.c:358
+#: builtin/tag.c:481 builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "für die Ausgabe zu verwendendes Format"
 
-#: builtin/branch.c:703 builtin/clone.c:678
+#: builtin/branch.c:718 builtin/clone.c:684
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD wurde nicht unter \"refs/heads\" gefunden!"
 
-#: builtin/branch.c:742 builtin/branch.c:798 builtin/branch.c:807
+#: builtin/branch.c:739
+msgid ""
+"branch with --recurse-submodules can only be used if submodule."
+"propagateBranches is enabled"
+msgstr ""
+"Branch mit --recurse-submodules kann nur genutzt werden, wenn submodule."
+"propagateBranches aktiviert ist"
+
+#: builtin/branch.c:741
+msgid "--recurse-submodules can only be used to create branches"
+msgstr "--recurse-submodules kann nur genutzt werden, um Branches zu erstellen"
+
+#: builtin/branch.c:770 builtin/branch.c:826 builtin/branch.c:835
 msgid "branch name required"
 msgstr "Branchname erforderlich"
 
-#: builtin/branch.c:774
+#: builtin/branch.c:802
 msgid "Cannot give description to detached HEAD"
 msgstr "zu losgelöstem HEAD kann keine Beschreibung hinterlegt werden"
 
-#: builtin/branch.c:779
+#: builtin/branch.c:807
 msgid "cannot edit description of more than one branch"
 msgstr "Beschreibung von mehr als einem Branch kann nicht bearbeitet werden"
 
-#: builtin/branch.c:786
+#: builtin/branch.c:814
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "Noch kein Commit in Branch '%s'."
 
-#: builtin/branch.c:789
+#: builtin/branch.c:817
 #, c-format
 msgid "No branch named '%s'."
 msgstr "Branch '%s' nicht vorhanden."
 
-#: builtin/branch.c:804
+#: builtin/branch.c:832
 msgid "too many branches for a copy operation"
 msgstr "zu viele Branches für eine Kopieroperation angegeben"
 
-#: builtin/branch.c:813
+#: builtin/branch.c:841
 msgid "too many arguments for a rename operation"
 msgstr "zu viele Argumente für eine Umbenennen-Operation angegeben"
 
-#: builtin/branch.c:818
+#: builtin/branch.c:846
 msgid "too many arguments to set new upstream"
 msgstr "zu viele Argumente angegeben, um Upstream-Branch zu setzen"
 
-#: builtin/branch.c:822
+#: builtin/branch.c:850
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
@@ -12187,34 +12447,34 @@ msgstr ""
 "Konnte keinen neuen Upstream-Branch von HEAD zu %s setzen, da dieser auf\n"
 "keinen Branch zeigt."
 
-#: builtin/branch.c:825 builtin/branch.c:848
+#: builtin/branch.c:853 builtin/branch.c:873
 #, c-format
 msgid "no such branch '%s'"
 msgstr "Branch '%s' nicht gefunden"
 
-#: builtin/branch.c:829
+#: builtin/branch.c:857
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "Branch '%s' existiert nicht"
 
-#: builtin/branch.c:842
+#: builtin/branch.c:867
 msgid "too many arguments to unset upstream"
 msgstr ""
 "zu viele Argumente angegeben, um Konfiguration zu Upstream-Branch zu "
 "entfernen"
 
-#: builtin/branch.c:846
+#: builtin/branch.c:871
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr ""
 "Konnte Konfiguration zu Upstream-Branch von HEAD nicht entfernen, da dieser\n"
 "auf keinen Branch zeigt."
 
-#: builtin/branch.c:852
+#: builtin/branch.c:877
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "Branch '%s' hat keinen Upstream-Branch gesetzt"
 
-#: builtin/branch.c:862
+#: builtin/branch.c:890
 msgid ""
 "The -a, and -r, options to 'git branch' do not take a branch name.\n"
 "Did you mean to use: -a|-r --list <pattern>?"
@@ -12223,7 +12483,7 @@ msgstr ""
 "verwendet werden.\n"
 "Wollten Sie -a|-r --list <Muster> benutzen?"
 
-#: builtin/branch.c:866
+#: builtin/branch.c:894
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -12340,19 +12600,19 @@ msgstr "git bundle list-heads <Datei> [<Referenzname>...]"
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr "git bundle unbundle <Datei> [<Referenzname>...]"
 
-#: builtin/bundle.c:65 builtin/pack-objects.c:3876
+#: builtin/bundle.c:65 builtin/pack-objects.c:3899
 msgid "do not show progress meter"
 msgstr "keine Fortschrittsanzeige anzeigen"
 
-#: builtin/bundle.c:67 builtin/bundle.c:167 builtin/pack-objects.c:3878
+#: builtin/bundle.c:67 builtin/bundle.c:168 builtin/pack-objects.c:3901
 msgid "show progress meter"
 msgstr "Fortschrittsanzeige anzeigen"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3880
+#: builtin/bundle.c:69 builtin/pack-objects.c:3903
 msgid "show progress meter during object writing phase"
 msgstr "Forschrittsanzeige während des Schreibens von Objekten anzeigen"
 
-#: builtin/bundle.c:72 builtin/pack-objects.c:3883
+#: builtin/bundle.c:72 builtin/pack-objects.c:3906
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "ähnlich zu --all-progress wenn Fortschrittsanzeige darstellt wird"
 
@@ -12364,116 +12624,230 @@ msgstr "Version des Paket-Formats angeben"
 msgid "Need a repository to create a bundle."
 msgstr "Um ein Paket zu erstellen wird ein Repository benötigt."
 
-#: builtin/bundle.c:107
+#: builtin/bundle.c:108
 msgid "do not show bundle details"
 msgstr "Keine Bundle-Details anzeigen"
 
-#: builtin/bundle.c:126
+#: builtin/bundle.c:127
 #, c-format
 msgid "%s is okay\n"
 msgstr "%s ist in Ordnung\n"
 
-#: builtin/bundle.c:182
+#: builtin/bundle.c:183
 msgid "Need a repository to unbundle."
 msgstr "Zum Entpacken wird ein Repository benötigt."
 
-#: builtin/bundle.c:185
+#: builtin/bundle.c:186
 msgid "Unbundling objects"
 msgstr "Entpacken von Objekten"
 
-#: builtin/bundle.c:219 builtin/remote.c:1733
+#: builtin/bundle.c:220 builtin/remote.c:1758
 #, c-format
 msgid "Unknown subcommand: %s"
 msgstr "Unbekannter Unterbefehl: %s"
 
-#: builtin/cat-file.c:622
-msgid ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <type> | --textconv | --filters) [--path=<path>] <object>"
-msgstr ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <Art> | --textconv | --filters) [--path=<Pfad>] <Objekt>"
+#: builtin/cat-file.c:568
+msgid "flush is only for --buffer mode"
+msgstr "Flush ist nur für --buffer Modus"
+
+#: builtin/cat-file.c:612
+msgid "empty command in input"
+msgstr "leerer Befehl in der Eingabe"
+
+#: builtin/cat-file.c:614
+#, c-format
+msgid "whitespace before command: '%s'"
+msgstr "Whitespace vor Befehl: '%s'"
 
 #: builtin/cat-file.c:623
-msgid ""
-"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
-"symlinks] [--textconv | --filters]"
-msgstr ""
-"git cat-file (--batch[=<Format>] | --batch-check[=<Format>]) [--follow-"
-"symlinks] [--textconv | --filters]"
+#, c-format
+msgid "%s requires arguments"
+msgstr "%s benötigt Argumente"
+
+#: builtin/cat-file.c:628
+#, c-format
+msgid "%s takes no arguments"
+msgstr "%s braucht kein Argument"
 
-#: builtin/cat-file.c:644
+#: builtin/cat-file.c:636
+#, c-format
+msgid "unknown command: '%s'"
+msgstr "unbekannter Befehl: '%s'"
+
+#: builtin/cat-file.c:795
 msgid "only one batch option may be specified"
 msgstr "Nur eine Batch-Option erlaubt."
 
-#: builtin/cat-file.c:662
-msgid "<type> can be one of: blob, tree, commit, tag"
-msgstr "<Art> kann sein: blob, tree, commit, tag"
+#: builtin/cat-file.c:824
+msgid "git cat-file <type> <object>"
+msgstr "git cat-file <Typ> <Objekt>"
 
-#: builtin/cat-file.c:663
-msgid "show object type"
-msgstr "Objektart anzeigen"
+#: builtin/cat-file.c:825
+msgid "git cat-file (-e | -p) <object>"
+msgstr "git cat-file (-e | -p) <Objekt>"
 
-#: builtin/cat-file.c:664
-msgid "show object size"
-msgstr "Objektgröße anzeigen"
+#: builtin/cat-file.c:826
+msgid "git cat-file (-t | -s) [--allow-unknown-type] <object>"
+msgstr "git cat-file (-t | -s) [--allow-unknown-type] <Objekt>"
 
-#: builtin/cat-file.c:666
-msgid "exit with zero when there's no error"
-msgstr "mit Rückgabewert 0 beenden, wenn kein Fehler aufgetreten ist"
+#: builtin/cat-file.c:827
+msgid ""
+"git cat-file (--batch | --batch-check | --batch-command) [--batch-all-"
+"objects]\n"
+"             [--buffer] [--follow-symlinks] [--unordered]\n"
+"             [--textconv | --filters]"
+msgstr ""
+"git cat-file (--batch | --batch-check | --batch-command) [--batch-all-"
+"objects]\n"
+"             [--buffer] [--follow-symlinks] [--unordered]\n"
+"             [--textconv | --filters]"
+
+#: builtin/cat-file.c:830
+msgid ""
+"git cat-file (--textconv | --filters)\n"
+"             [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]"
+msgstr ""
+"git cat-file (--textconv | --filters)\n"
+"             [<Commit>:<Pfad|Commit-Referenz> | --path=<Pfad|Commit-"
+"Referenz> <Commit>]"
+
+#: builtin/cat-file.c:836
+msgid "Check object existence or emit object contents"
+msgstr "Überprüfen von Objektexistenz oder Ausgeben von Objekt-Inhalten"
 
-#: builtin/cat-file.c:667
-msgid "pretty-print object's content"
-msgstr "ansprechende Anzeige des Objektinhaltes"
+#: builtin/cat-file.c:838
+msgid "check if <object> exists"
+msgstr "prüfe, ob <Objekt> vorhanden ist"
 
-#: builtin/cat-file.c:669
-msgid "for blob objects, run textconv on object's content"
-msgstr "eine Textkonvertierung auf den Inhalt von Blob-Objekten ausführen"
+#: builtin/cat-file.c:839
+msgid "pretty-print <object> content"
+msgstr "ansprechende Anzeige für <Objekt> Inhalt"
 
-#: builtin/cat-file.c:671
-msgid "for blob objects, run filters on object's content"
-msgstr "für Blob-Objekte, Filter auf Objekt-Inhalte ausführen"
+#: builtin/cat-file.c:841
+msgid "Emit [broken] object attributes"
+msgstr "Ausgabe von [fehlerhaften] Objekt-Attributen"
 
-#: builtin/cat-file.c:672
-msgid "blob"
-msgstr "Blob"
+#: builtin/cat-file.c:842
+msgid "show object type (one of 'blob', 'tree', 'commit', 'tag', ...)"
+msgstr "zeige Objekt-Typ (eines von 'blob', 'tree', 'commit', 'tag', ...)"
 
-#: builtin/cat-file.c:673
-msgid "use a specific path for --textconv/--filters"
-msgstr "einen bestimmten Pfad für --textconv/--filters verwenden"
+#: builtin/cat-file.c:843
+msgid "show object size"
+msgstr "Objektgröße anzeigen"
 
-#: builtin/cat-file.c:675
+#: builtin/cat-file.c:845
 msgid "allow -s and -t to work with broken/corrupt objects"
 msgstr "-s und -t mit beschädigten Objekten erlauben"
 
-#: builtin/cat-file.c:676
-msgid "buffer --batch output"
-msgstr "Ausgabe von --batch puffern"
-
-#: builtin/cat-file.c:678
-msgid "show info and content of objects fed from the standard input"
+#: builtin/cat-file.c:847
+msgid "Batch objects requested on stdin (or --batch-all-objects)"
 msgstr ""
-"Anzeige von Informationen und Inhalt von Objekten, gelesen von der Standard-"
-"Eingabe"
+"Batch-Objekte von Standard-Eingabe (oder --batch-all-objects) angefordert"
 
-#: builtin/cat-file.c:682
-msgid "show info about objects fed from the standard input"
-msgstr ""
-"Anzeige von Informationen über Objekte, gelesen von der Standard-Eingabe"
+#: builtin/cat-file.c:849
+msgid "show full <object> or <rev> contents"
+msgstr "vollständige Inhalte von <Objekt> oder <Commit> anzeigen"
 
-#: builtin/cat-file.c:686
-msgid "follow in-tree symlinks (used with --batch or --batch-check)"
+#: builtin/cat-file.c:853
+msgid "like --batch, but don't emit <contents>"
+msgstr "wie --batch, aber keine Ausgabe von <Inhalten>"
+
+#: builtin/cat-file.c:857
+msgid "read commands from stdin"
+msgstr "Befehle von der Standard-Eingabe lesen"
+
+#: builtin/cat-file.c:861
+msgid "with --batch[-check]: ignores stdin, batches all known objects"
 msgstr ""
-"symbolischen Verknüpfungen innerhalb des Repositories folgen (verwendet mit "
-"--batch oder --batch-check)"
+"mit --batch[-check]: ignoriert Standard-Eingabe, Stapelverarbeitung aller "
+"bekannten Objekte"
 
-#: builtin/cat-file.c:688
-msgid "show all objects with --batch or --batch-check"
-msgstr "alle Objekte mit --batch oder --batch-check anzeigen"
+#: builtin/cat-file.c:863
+msgid "Change or optimize batch output"
+msgstr "Ändern oder Optimieren der Batch-Ausgabe"
 
-#: builtin/cat-file.c:690
-msgid "do not order --batch-all-objects output"
-msgstr "Ausgabe von --batch-all-objects nicht ordnen"
+#: builtin/cat-file.c:864
+msgid "buffer --batch output"
+msgstr "Ausgabe von --batch puffern"
+
+#: builtin/cat-file.c:866
+msgid "follow in-tree symlinks"
+msgstr "folge symbolische Verknüpfungen in Verzeichnissen"
+
+#: builtin/cat-file.c:868
+msgid "do not order objects before emitting them"
+msgstr "Objekte nicht ordnen, bevor sie ausgegeben werden"
+
+#: builtin/cat-file.c:870
+msgid ""
+"Emit object (blob or tree) with conversion or filter (stand-alone, or with "
+"batch)"
+msgstr ""
+"Objekt (Blob oder Verzeichnis) mit Konvertierung oder Filter (eigenständig "
+"oder mit Batch) ausgeben"
+
+#: builtin/cat-file.c:872
+msgid "run textconv on object's content"
+msgstr "eine Textkonvertierung auf Objekt-Inhalte ausführen"
+
+#: builtin/cat-file.c:874
+msgid "run filters on object's content"
+msgstr "Filter auf Objekt-Inhalte ausführen"
+
+#: builtin/cat-file.c:875
+msgid "blob|tree"
+msgstr "Blob|Verzeichnis"
+
+#: builtin/cat-file.c:876
+msgid "use a <path> for (--textconv | --filters); Not with 'batch'"
+msgstr ""
+"nutzen Sie einen <Pfad> für (--textconv | --filters); Nicht mit 'batch'"
+
+#: builtin/cat-file.c:894
+#, c-format
+msgid "'%s=<%s>' needs '%s' or '%s'"
+msgstr "'%s=<%s>' benötigt '%s' oder '%s'"
+
+#: builtin/cat-file.c:896
+msgid "path|tree-ish"
+msgstr "Pfad|Commit-Referenz"
+
+#: builtin/cat-file.c:903 builtin/cat-file.c:906 builtin/cat-file.c:909
+#, c-format
+msgid "'%s' requires a batch mode"
+msgstr "'%s' erfordert einen Batch-Modus"
+
+#: builtin/cat-file.c:921
+#, c-format
+msgid "'-%c' is incompatible with batch mode"
+msgstr "'%c' ist inkompatibel mit dem Batch-Modus"
+
+#: builtin/cat-file.c:924
+msgid "batch modes take no arguments"
+msgstr "Batch-Modi erwarten keine Argumente"
+
+#: builtin/cat-file.c:932 builtin/cat-file.c:935
+#, c-format
+msgid "<rev> required with '%s'"
+msgstr "<Commit> benötigt mit '%s'"
+
+#: builtin/cat-file.c:938
+#, c-format
+msgid "<object> required with '-%c'"
+msgstr "<Objekt> benötigt mit '-%c'"
+
+#: builtin/cat-file.c:943 builtin/notes.c:374 builtin/notes.c:429
+#: builtin/notes.c:507 builtin/notes.c:519 builtin/notes.c:596
+#: builtin/notes.c:663 builtin/notes.c:813 builtin/notes.c:965
+#: builtin/notes.c:987 builtin/prune-packed.c:25 builtin/receive-pack.c:2489
+#: builtin/tag.c:592
+msgid "too many arguments"
+msgstr "zu viele Argumente"
+
+#: builtin/cat-file.c:947
+#, c-format
+msgid "only two arguments allowed in <type> <object> mode, not %d"
+msgstr "nur zwei Argumente im <Typ> <Objekt> Modus erlaubt, nicht %d"
 
 #: builtin/check-attr.c:13
 msgid "git check-attr [-a | --all | <attr>...] [--] <pathname>..."
@@ -12491,7 +12865,7 @@ msgstr "alle Attribute einer Datei ausgeben"
 msgid "use .gitattributes only from the index"
 msgstr "nur .gitattributes vom Index verwenden"
 
-#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:100
+#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:101
 msgid "read file names from stdin"
 msgstr "Dateinamen von der Standard-Eingabe lesen"
 
@@ -12499,8 +12873,8 @@ msgstr "Dateinamen von der Standard-Eingabe lesen"
 msgid "terminate input and output records by a NUL character"
 msgstr "Einträge von Ein- und Ausgabe mit NUL-Zeichen abschließen"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1532 builtin/gc.c:550
-#: builtin/worktree.c:493
+#: builtin/check-ignore.c:21 builtin/checkout.c:1550 builtin/gc.c:550
+#: builtin/worktree.c:565
 msgid "suppress progress reporting"
 msgstr "Fortschrittsanzeige unterdrücken"
 
@@ -12547,7 +12921,7 @@ msgstr "ebenfalls Kontakte von der Standard-Eingabe lesen"
 #: builtin/check-mailmap.c:25
 #, c-format
 msgid "unable to parse contact: %s"
-msgstr "Konnte Kontakt '%s' nicht parsen."
+msgstr "konnte Kontakt nicht parsen: %s"
 
 #: builtin/check-mailmap.c:48
 msgid "no contacts specified"
@@ -12557,165 +12931,169 @@ msgstr "keine Kontakte angegeben"
 msgid "git checkout--worker [<options>]"
 msgstr "git checkout--worker [<Optionen>]"
 
-#: builtin/checkout--worker.c:118 builtin/checkout-index.c:201
-#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1864
-#: builtin/submodule--helper.c:1867 builtin/submodule--helper.c:1875
-#: builtin/submodule--helper.c:2511 builtin/submodule--helper.c:2577
-#: builtin/worktree.c:491 builtin/worktree.c:728
+#: builtin/checkout--worker.c:118 builtin/checkout-index.c:235
+#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1878
+#: builtin/submodule--helper.c:1881 builtin/submodule--helper.c:1889
+#: builtin/submodule--helper.c:2716 builtin/worktree.c:563
+#: builtin/worktree.c:808
 msgid "string"
 msgstr "Zeichenkette"
 
-#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:236
 msgid "when creating files, prepend <string>"
 msgstr ""
 "wenn Dateien erzeugt werden, stelle <Zeichenkette> dem Dateinamen voran"
 
-#: builtin/checkout-index.c:152
+#: builtin/checkout-index.c:184
 msgid "git checkout-index [<options>] [--] [<file>...]"
 msgstr "git checkout-index [<Optionen>] [--] [<Datei>...]"
 
-#: builtin/checkout-index.c:169
+#: builtin/checkout-index.c:201
 msgid "stage should be between 1 and 3 or all"
 msgstr "stage sollte zwischen 1 und 3 oder 'all' sein"
 
-#: builtin/checkout-index.c:187
+#: builtin/checkout-index.c:219
 msgid "check out all files in the index"
 msgstr "alle Dateien im Index auschecken"
 
-#: builtin/checkout-index.c:188
+#: builtin/checkout-index.c:221
+msgid "do not skip files with skip-worktree set"
+msgstr "Dateien mit gesetztem skip-worktree nicht überspringen"
+
+#: builtin/checkout-index.c:222
 msgid "force overwrite of existing files"
 msgstr "das Überschreiben bereits existierender Dateien erzwingen"
 
-#: builtin/checkout-index.c:190
+#: builtin/checkout-index.c:224
 msgid "no warning for existing files and files not in index"
 msgstr ""
 "keine Warnung für existierende Dateien, und Dateien, die sich nicht im Index "
 "befinden"
 
-#: builtin/checkout-index.c:192
+#: builtin/checkout-index.c:226
 msgid "don't checkout new files"
 msgstr "keine neuen Dateien auschecken"
 
-#: builtin/checkout-index.c:194
+#: builtin/checkout-index.c:228
 msgid "update stat information in the index file"
 msgstr "Dateiinformationen in der Index-Datei aktualisieren"
 
-#: builtin/checkout-index.c:198
+#: builtin/checkout-index.c:232
 msgid "read list of paths from the standard input"
 msgstr "eine Liste von Pfaden von der Standard-Eingabe lesen"
 
-#: builtin/checkout-index.c:200
+#: builtin/checkout-index.c:234
 msgid "write the content to temporary files"
 msgstr "den Inhalt in temporäre Dateien schreiben"
 
-#: builtin/checkout-index.c:204
+#: builtin/checkout-index.c:238
 msgid "copy out the files from named stage"
 msgstr "Dateien von dem benannten Stand kopieren"
 
-#: builtin/checkout.c:33
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [<Optionen>] <Branch>"
 
-#: builtin/checkout.c:34
+#: builtin/checkout.c:35
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [<Optionen>] [<Branch>] -- <Datei>..."
 
-#: builtin/checkout.c:39
+#: builtin/checkout.c:40
 msgid "git switch [<options>] [<branch>]"
 msgstr "git switch [<Optionen>] [<Branch>]"
 
-#: builtin/checkout.c:44
+#: builtin/checkout.c:45
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<Optionen>] [--source=<Branch>] <Datei>..."
 
-#: builtin/checkout.c:198 builtin/checkout.c:237
+#: builtin/checkout.c:199 builtin/checkout.c:238
 #, c-format
 msgid "path '%s' does not have our version"
-msgstr "Pfad '%s' hat nicht unsere Version."
+msgstr "Pfad '%s' hat nicht unsere Version"
 
-#: builtin/checkout.c:200 builtin/checkout.c:239
+#: builtin/checkout.c:201 builtin/checkout.c:240
 #, c-format
 msgid "path '%s' does not have their version"
-msgstr "Pfad '%s' hat nicht deren Version."
+msgstr "Pfad '%s' hat nicht deren Version"
 
-#: builtin/checkout.c:216
+#: builtin/checkout.c:217
 #, c-format
 msgid "path '%s' does not have all necessary versions"
-msgstr "Pfad '%s' hat nicht alle notwendigen Versionen."
+msgstr "Pfad '%s' hat nicht alle notwendigen Versionen"
 
-#: builtin/checkout.c:269
+#: builtin/checkout.c:271
 #, c-format
 msgid "path '%s' does not have necessary versions"
-msgstr "Pfad '%s' hat nicht die notwendigen Versionen."
+msgstr "Pfad '%s' hat nicht die notwendigen Versionen"
 
-#: builtin/checkout.c:286
+#: builtin/checkout.c:291
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "Pfad '%s': kann nicht zusammenführen"
 
-#: builtin/checkout.c:302
+#: builtin/checkout.c:307
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "Konnte Merge-Ergebnis von '%s' nicht hinzufügen."
 
-#: builtin/checkout.c:419
+#: builtin/checkout.c:424
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "%d Merge-Konflikt wieder erstellt"
 msgstr[1] "%d Merge-Konflikte wieder erstellt"
 
-#: builtin/checkout.c:424
+#: builtin/checkout.c:429
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "%d Pfad von %s aktualisiert"
 msgstr[1] "%d Pfade von %s aktualisiert"
 
-#: builtin/checkout.c:431
+#: builtin/checkout.c:436
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "%d Pfad vom Index aktualisiert"
 msgstr[1] "%d Pfade vom Index aktualisiert"
 
-#: builtin/checkout.c:454 builtin/checkout.c:457 builtin/checkout.c:460
-#: builtin/checkout.c:464
+#: builtin/checkout.c:459 builtin/checkout.c:462 builtin/checkout.c:465
+#: builtin/checkout.c:469
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "'%s' kann nicht mit der Aktualisierung von Pfaden verwendet werden"
 
-#: builtin/checkout.c:474
+#: builtin/checkout.c:479
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr ""
 "Kann nicht gleichzeitig Pfade aktualisieren und zu Branch '%s' wechseln"
 
-#: builtin/checkout.c:478
+#: builtin/checkout.c:483
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "Weder '%s' noch '%s' ist angegeben"
 
-#: builtin/checkout.c:482
+#: builtin/checkout.c:487
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "'%s' kann nur genutzt werden, wenn '%s' nicht verwendet wird"
 
-#: builtin/checkout.c:487 builtin/checkout.c:492
+#: builtin/checkout.c:492 builtin/checkout.c:497
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "'%s' oder '%s' kann nicht mit %s verwendet werden"
 
-#: builtin/checkout.c:566 builtin/checkout.c:573
+#: builtin/checkout.c:571 builtin/checkout.c:578
 #, c-format
 msgid "path '%s' is unmerged"
-msgstr "Pfad '%s' ist nicht zusammengeführt."
+msgstr "Pfad '%s' ist nicht zusammengeführt"
 
-#: builtin/checkout.c:747
+#: builtin/checkout.c:753
 msgid "you need to resolve your current index first"
 msgstr "Sie müssen zuerst die Konflikte in Ihrem aktuellen Index auflösen."
 
-#: builtin/checkout.c:797
+#: builtin/checkout.c:809
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -12724,50 +13102,50 @@ msgstr ""
 "Kann nicht mit vorgemerkten Änderungen in folgenden Dateien fortsetzen:\n"
 "%s"
 
-#: builtin/checkout.c:890
+#: builtin/checkout.c:902
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "Kann \"reflog\" für '%s' nicht durchführen: %s\n"
 
-#: builtin/checkout.c:934
+#: builtin/checkout.c:947
 msgid "HEAD is now at"
 msgstr "HEAD ist jetzt bei"
 
-#: builtin/checkout.c:938 builtin/clone.c:609 t/helper/test-fast-rebase.c:203
+#: builtin/checkout.c:951 builtin/clone.c:615 t/helper/test-fast-rebase.c:203
 msgid "unable to update HEAD"
 msgstr "Konnte HEAD nicht aktualisieren."
 
-#: builtin/checkout.c:942
+#: builtin/checkout.c:955
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "Setze Branch '%s' neu\n"
 
-#: builtin/checkout.c:945
+#: builtin/checkout.c:958
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Bereits auf '%s'\n"
 
-#: builtin/checkout.c:949
+#: builtin/checkout.c:962
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "Zu umgesetztem Branch '%s' gewechselt\n"
 
-#: builtin/checkout.c:951 builtin/checkout.c:1388
+#: builtin/checkout.c:964 builtin/checkout.c:1398
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "Zu neuem Branch '%s' gewechselt\n"
 
-#: builtin/checkout.c:953
+#: builtin/checkout.c:966
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "Zu Branch '%s' gewechselt\n"
 
-#: builtin/checkout.c:1004
+#: builtin/checkout.c:1017
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " ... und %d weitere.\n"
 
-#: builtin/checkout.c:1010
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -12790,7 +13168,7 @@ msgstr[1] ""
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1029
+#: builtin/checkout.c:1042
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -12817,19 +13195,19 @@ msgstr[1] ""
 " git branch <neuer-Branchname> %s\n"
 "\n"
 
-#: builtin/checkout.c:1064
+#: builtin/checkout.c:1077
 msgid "internal error in revision walk"
 msgstr "interner Fehler im Revisionsgang"
 
-#: builtin/checkout.c:1068
+#: builtin/checkout.c:1081
 msgid "Previous HEAD position was"
 msgstr "Vorherige Position von HEAD war"
 
-#: builtin/checkout.c:1114 builtin/checkout.c:1383
+#: builtin/checkout.c:1124 builtin/checkout.c:1393
 msgid "You are on a branch yet to be born"
 msgstr "Sie sind auf einem Branch, der noch nicht geboren ist"
 
-#: builtin/checkout.c:1196
+#: builtin/checkout.c:1206
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -12839,7 +13217,7 @@ msgstr ""
 "Bitte benutzen Sie -- (und optional --no-guess), um diese\n"
 "eindeutig voneinander zu unterscheiden."
 
-#: builtin/checkout.c:1203
+#: builtin/checkout.c:1213
 msgid ""
 "If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
 "you can do so by fully qualifying the name with the --track option:\n"
@@ -12862,51 +13240,58 @@ msgstr ""
 "bevorzugen möchten, z.B. 'origin', können Sie die Einstellung\n"
 "checkout.defaultRemote=origin in Ihrer Konfiguration setzen."
 
-#: builtin/checkout.c:1213
+#: builtin/checkout.c:1223
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "'%s' entspricht mehreren (%d) Remote-Tracking-Branches"
 
-#: builtin/checkout.c:1279
+#: builtin/checkout.c:1289
 msgid "only one reference expected"
 msgstr "nur eine Referenz erwartet"
 
-#: builtin/checkout.c:1296
+#: builtin/checkout.c:1306
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "nur eine Referenz erwartet, %d gegeben."
 
-#: builtin/checkout.c:1342 builtin/worktree.c:269 builtin/worktree.c:436
+#: builtin/checkout.c:1352 builtin/worktree.c:338 builtin/worktree.c:508
 #, c-format
 msgid "invalid reference: %s"
 msgstr "Ungültige Referenz: %s"
 
-#: builtin/checkout.c:1355 builtin/checkout.c:1725
+#: builtin/checkout.c:1365 builtin/checkout.c:1744
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "Referenz ist kein \"Tree\"-Objekt: %s"
 
-#: builtin/checkout.c:1402
+#: builtin/checkout.c:1413
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "Ein Branch wird erwartet, Tag '%s' bekommen"
 
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1415
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "Ein Branch wird erwartet, Remote-Branch '%s' bekommen"
 
-#: builtin/checkout.c:1405 builtin/checkout.c:1413
+#: builtin/checkout.c:1417 builtin/checkout.c:1426
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "Ein Branch wird erwartet, '%s' bekommen"
 
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1420
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "Ein Branch wird erwartet, Commit '%s' bekommen"
 
-#: builtin/checkout.c:1424
+#: builtin/checkout.c:1429
+msgid ""
+"If you want to detach HEAD at the commit, try again with the --detach option."
+msgstr ""
+"Wenn Sie HEAD bei dem Commit loslösen möchten, versuchen Sie es erneut mit "
+"der --detach Option."
+
+#: builtin/checkout.c:1442
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
@@ -12914,7 +13299,7 @@ msgstr ""
 "Der Branch kann nicht während eines Merges gewechselt werden.\n"
 "Ziehen Sie \"git merge --quit\" oder \"git worktree add\" in Betracht."
 
-#: builtin/checkout.c:1428
+#: builtin/checkout.c:1446
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
@@ -12923,7 +13308,7 @@ msgstr ""
 "werden.\n"
 "Ziehen Sie \"git am --quit\" oder \"git worktree add\" in Betracht."
 
-#: builtin/checkout.c:1432
+#: builtin/checkout.c:1450
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -12932,7 +13317,7 @@ msgstr ""
 "werden.\n"
 "Ziehen Sie \"git rebase --quit\" oder \"git worktree add\" in Betracht."
 
-#: builtin/checkout.c:1436
+#: builtin/checkout.c:1454
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -12941,7 +13326,7 @@ msgstr ""
 "gewechselt werden.\n"
 "Ziehen Sie \"git cherry-pick --quit\" oder \"git worktree add\" in Betracht."
 
-#: builtin/checkout.c:1440
+#: builtin/checkout.c:1458
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -12950,129 +13335,125 @@ msgstr ""
 "werden.\n"
 "Ziehen Sie \"git revert --quit\" oder \"git worktree add\" in Betracht."
 
-#: builtin/checkout.c:1444
+#: builtin/checkout.c:1462
 msgid "you are switching branch while bisecting"
 msgstr "Sie wechseln den Branch während einer binären Suche"
 
-#: builtin/checkout.c:1451
+#: builtin/checkout.c:1469
 msgid "paths cannot be used with switching branches"
 msgstr "Pfade können nicht beim Wechseln von Branches verwendet werden"
 
-#: builtin/checkout.c:1454 builtin/checkout.c:1458 builtin/checkout.c:1462
+#: builtin/checkout.c:1472 builtin/checkout.c:1476 builtin/checkout.c:1480
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "'%s' kann nicht beim Wechseln von Branches verwendet werden"
 
-#: builtin/checkout.c:1466 builtin/checkout.c:1469 builtin/checkout.c:1472
-#: builtin/checkout.c:1477 builtin/checkout.c:1482
+#: builtin/checkout.c:1484 builtin/checkout.c:1487 builtin/checkout.c:1490
+#: builtin/checkout.c:1495 builtin/checkout.c:1500
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "'%s' kann nicht mit '%s' verwendet werden"
 
-#: builtin/checkout.c:1479
+#: builtin/checkout.c:1497
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "'%s' kann nicht <Startpunkt> bekommen"
 
-#: builtin/checkout.c:1487
+#: builtin/checkout.c:1505
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "Kann Branch nicht zu Nicht-Commit '%s' wechseln"
 
-#: builtin/checkout.c:1494
+#: builtin/checkout.c:1512
 msgid "missing branch or commit argument"
 msgstr "Branch- oder Commit-Argument fehlt"
 
-#: builtin/checkout.c:1537
+#: builtin/checkout.c:1555
 msgid "perform a 3-way merge with the new branch"
 msgstr "einen 3-Wege-Merge mit dem neuen Branch ausführen"
 
-#: builtin/checkout.c:1538 builtin/log.c:1825 parse-options.h:323
+#: builtin/checkout.c:1556 builtin/log.c:1844 parse-options.h:354
 msgid "style"
 msgstr "Stil"
 
-#: builtin/checkout.c:1539
+#: builtin/checkout.c:1557
 msgid "conflict style (merge, diff3, or zdiff3)"
 msgstr "Konfliktstil (merge, diff3 oder zdiff3)"
 
-#: builtin/checkout.c:1551 builtin/worktree.c:488
+#: builtin/checkout.c:1569 builtin/worktree.c:560
 msgid "detach HEAD at named commit"
 msgstr "HEAD bei benanntem Commit loslösen"
 
-#: builtin/checkout.c:1553
-msgid "set up tracking mode (see git-pull(1))"
-msgstr "Modus zum Folgen von Branches einstellen (siehe git-pull(1))"
-
-#: builtin/checkout.c:1556
+#: builtin/checkout.c:1574
 msgid "force checkout (throw away local modifications)"
 msgstr "Auschecken erzwingen (verwirft lokale Änderungen)"
 
-#: builtin/checkout.c:1558
+#: builtin/checkout.c:1576
 msgid "new-branch"
 msgstr "neuer Branch"
 
-#: builtin/checkout.c:1558
+#: builtin/checkout.c:1576
 msgid "new unparented branch"
 msgstr "neuer Branch ohne Eltern-Commit"
 
-#: builtin/checkout.c:1560 builtin/merge.c:305
+#: builtin/checkout.c:1578 builtin/merge.c:305
 msgid "update ignored files (default)"
 msgstr "ignorierte Dateien aktualisieren (Standard)"
 
-#: builtin/checkout.c:1563
+#: builtin/checkout.c:1581
 msgid "do not check if another worktree is holding the given ref"
 msgstr ""
 "Prüfung, ob die Referenz bereits in einem anderen Arbeitsverzeichnis "
 "ausgecheckt wurde, deaktivieren"
 
-#: builtin/checkout.c:1576
+#: builtin/checkout.c:1594
 msgid "checkout our version for unmerged files"
 msgstr "unsere Variante für nicht zusammengeführte Dateien auschecken"
 
-#: builtin/checkout.c:1579
+#: builtin/checkout.c:1597
 msgid "checkout their version for unmerged files"
 msgstr "ihre Variante für nicht zusammengeführte Dateien auschecken"
 
-#: builtin/checkout.c:1583
+#: builtin/checkout.c:1601
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "keine Einschränkung bei Pfadspezifikationen zum partiellen Auschecken"
 
-#: builtin/checkout.c:1640
+#: builtin/checkout.c:1659
 #, c-format
 msgid "options '-%c', '-%c', and '%s' cannot be used together"
 msgstr ""
 "die Optionen '-%c', '-%c' und '%s' können nicht gemeinsam verwendet werden"
 
-#: builtin/checkout.c:1681
+#: builtin/checkout.c:1700
 msgid "--track needs a branch name"
 msgstr "--track benötigt ein Branchname"
 
-#: builtin/checkout.c:1686
+#: builtin/checkout.c:1705
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "kein Branchname; versuchen Sie -%c"
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1737
 #, c-format
 msgid "could not resolve %s"
 msgstr "konnte %s nicht auflösen"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1753
 msgid "invalid path specification"
 msgstr "ungültige Pfadspezifikation"
 
-#: builtin/checkout.c:1741
+#: builtin/checkout.c:1760
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr ""
 "'%s' ist kein Commit und es kann kein Branch '%s' aus diesem erstellt werden."
 
-#: builtin/checkout.c:1745
+#: builtin/checkout.c:1764
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout: --detach nimmt kein Pfad-Argument '%s'"
 
-#: builtin/checkout.c:1770
+#: builtin/checkout.c:1789
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -13080,71 +13461,71 @@ msgstr ""
 "git checkout: --ours/--theirs, --force und --merge sind inkompatibel wenn\n"
 "Sie aus dem Index auschecken."
 
-#: builtin/checkout.c:1775
+#: builtin/checkout.c:1794
 msgid "you must specify path(s) to restore"
 msgstr "Sie müssen Pfad(e) zur Wiederherstellung angeben."
 
-#: builtin/checkout.c:1800 builtin/checkout.c:1802 builtin/checkout.c:1854
-#: builtin/checkout.c:1856 builtin/clone.c:126 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2959
-#: builtin/submodule--helper.c:3253 builtin/worktree.c:484
-#: builtin/worktree.c:486
+#: builtin/checkout.c:1819 builtin/checkout.c:1821 builtin/checkout.c:1873
+#: builtin/checkout.c:1875 builtin/clone.c:130 builtin/remote.c:171
+#: builtin/remote.c:173 builtin/submodule--helper.c:3038
+#: builtin/submodule--helper.c:3371 builtin/worktree.c:556
+#: builtin/worktree.c:558
 msgid "branch"
 msgstr "Branch"
 
-#: builtin/checkout.c:1801
+#: builtin/checkout.c:1820
 msgid "create and checkout a new branch"
 msgstr "einen neuen Branch erzeugen und auschecken"
 
-#: builtin/checkout.c:1803
+#: builtin/checkout.c:1822
 msgid "create/reset and checkout a branch"
 msgstr "einen Branch erstellen/umsetzen und auschecken"
 
-#: builtin/checkout.c:1804
+#: builtin/checkout.c:1823
 msgid "create reflog for new branch"
 msgstr "das Reflog für den neuen Branch erzeugen"
 
-#: builtin/checkout.c:1806
+#: builtin/checkout.c:1825
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr "Zweite Vermutung 'git checkout <kein-solcher-Branch>' (Standard)"
 
-#: builtin/checkout.c:1807
+#: builtin/checkout.c:1826
 msgid "use overlay mode (default)"
 msgstr "benutze Overlay-Modus (Standard)"
 
-#: builtin/checkout.c:1855
+#: builtin/checkout.c:1874
 msgid "create and switch to a new branch"
 msgstr "einen neuen Branch erzeugen und dahin wechseln"
 
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1876
 msgid "create/reset and switch to a branch"
 msgstr "einen Branch erstellen/umsetzen und dahin wechseln"
 
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1878
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "Zweite Vermutung 'git switch <kein-solcher-Branch>'"
 
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1880
 msgid "throw away local modifications"
 msgstr "lokale Änderungen verwerfen"
 
-#: builtin/checkout.c:1897
+#: builtin/checkout.c:1916
 msgid "which tree-ish to checkout from"
 msgstr "Von welcher Commit-Referenz ausgecheckt werden soll"
 
-#: builtin/checkout.c:1899
+#: builtin/checkout.c:1918
 msgid "restore the index"
 msgstr "Index wiederherstellen"
 
-#: builtin/checkout.c:1901
+#: builtin/checkout.c:1920
 msgid "restore the working tree (default)"
 msgstr "das Arbeitsverzeichnis wiederherstellen (Standard)"
 
-#: builtin/checkout.c:1903
+#: builtin/checkout.c:1922
 msgid "ignore unmerged entries"
 msgstr "ignoriere nicht zusammengeführte Einträge"
 
-#: builtin/checkout.c:1904
+#: builtin/checkout.c:1923
 msgid "use overlay mode"
 msgstr "benutze Overlay-Modus"
 
@@ -13292,8 +13673,8 @@ msgid "remove whole directories"
 msgstr "ganze Verzeichnisse löschen"
 
 #: builtin/clean.c:932 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:937 builtin/log.c:184 builtin/log.c:186
-#: builtin/ls-files.c:651 builtin/name-rev.c:535 builtin/name-rev.c:537
+#: builtin/grep.c:938 builtin/log.c:185 builtin/log.c:187
+#: builtin/ls-files.c:651 builtin/name-rev.c:585 builtin/name-rev.c:587
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "Muster"
@@ -13330,216 +13711,220 @@ msgstr ""
 msgid "-x and -X cannot be used together"
 msgstr "-x und -X können nicht gemeinsam verwendet werden"
 
-#: builtin/clone.c:45
+#: builtin/clone.c:47
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<Optionen>] [--] <Repository> [<Verzeichnis>]"
 
-#: builtin/clone.c:96
+#: builtin/clone.c:100
 msgid "don't clone shallow repository"
 msgstr "Repository mit unvollständiger Historie nicht klonen"
 
-#: builtin/clone.c:98
+#: builtin/clone.c:102
 msgid "don't create a checkout"
 msgstr "kein Auschecken"
 
-#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:542
+#: builtin/clone.c:103 builtin/clone.c:105 builtin/init-db.c:542
 msgid "create a bare repository"
 msgstr "ein Bare-Repository erstellen"
 
-#: builtin/clone.c:103
+#: builtin/clone.c:107
 msgid "create a mirror repository (implies bare)"
 msgstr "ein Spiegelarchiv erstellen (impliziert bare)"
 
-#: builtin/clone.c:105
+#: builtin/clone.c:109
 msgid "to clone from a local repository"
 msgstr "von einem lokalen Repository klonen"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "don't use local hardlinks, always copy"
 msgstr "lokal keine harten Verweise verwenden, immer Kopien"
 
-#: builtin/clone.c:109
+#: builtin/clone.c:113
 msgid "setup as shared repository"
 msgstr "als verteiltes Repository einrichten"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "pathspec"
 msgstr "Pfadspezifikation"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "initialize submodules in the clone"
 msgstr "Submodule im Klon initialisieren"
 
-#: builtin/clone.c:115
+#: builtin/clone.c:119
 msgid "number of submodules cloned in parallel"
 msgstr "Anzahl der parallel zu klonenden Submodule"
 
-#: builtin/clone.c:116 builtin/init-db.c:539
+#: builtin/clone.c:120 builtin/init-db.c:539
 msgid "template-directory"
 msgstr "Vorlagenverzeichnis"
 
-#: builtin/clone.c:117 builtin/init-db.c:540
+#: builtin/clone.c:121 builtin/init-db.c:540
 msgid "directory from which templates will be used"
 msgstr "Verzeichnis, von welchem die Vorlagen verwendet werden"
 
-#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1871
-#: builtin/submodule--helper.c:2514 builtin/submodule--helper.c:3260
+#: builtin/clone.c:123 builtin/clone.c:125 builtin/submodule--helper.c:1885
+#: builtin/submodule--helper.c:2719 builtin/submodule--helper.c:3378
 msgid "reference repository"
 msgstr "Repository referenzieren"
 
-#: builtin/clone.c:123 builtin/submodule--helper.c:1873
-#: builtin/submodule--helper.c:2516
+#: builtin/clone.c:127 builtin/submodule--helper.c:1887
+#: builtin/submodule--helper.c:2721
 msgid "use --reference only while cloning"
 msgstr "--reference nur während des Klonens benutzen"
 
-#: builtin/clone.c:124 builtin/column.c:27 builtin/fmt-merge-msg.c:27
+#: builtin/clone.c:128 builtin/column.c:27 builtin/fmt-merge-msg.c:27
 #: builtin/init-db.c:550 builtin/merge-file.c:48 builtin/merge.c:290
-#: builtin/pack-objects.c:3944 builtin/repack.c:665
-#: builtin/submodule--helper.c:3262 t/helper/test-simple-ipc.c:595
+#: builtin/pack-objects.c:3967 builtin/repack.c:669
+#: builtin/submodule--helper.c:3380 t/helper/test-simple-ipc.c:595
 #: t/helper/test-simple-ipc.c:597
 msgid "name"
 msgstr "Name"
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "<Name> statt 'origin' für Upstream-Repository verwenden"
 
-#: builtin/clone.c:127
+#: builtin/clone.c:131
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "<Branch> auschecken, anstatt HEAD des Remote-Repositories"
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133
 msgid "path to git-upload-pack on the remote"
 msgstr "Pfad zu \"git-upload-pack\" auf der Gegenseite"
 
-#: builtin/clone.c:130 builtin/fetch.c:181 builtin/grep.c:876
+#: builtin/clone.c:134 builtin/fetch.c:182 builtin/grep.c:877
 #: builtin/pull.c:212
 msgid "depth"
 msgstr "Tiefe"
 
-#: builtin/clone.c:131
+#: builtin/clone.c:135
 msgid "create a shallow clone of that depth"
 msgstr ""
 "einen Klon mit unvollständiger Historie (shallow) in dieser Tiefe erstellen"
 
-#: builtin/clone.c:132 builtin/fetch.c:183 builtin/pack-objects.c:3933
+#: builtin/clone.c:136 builtin/fetch.c:184 builtin/pack-objects.c:3956
 #: builtin/pull.c:215
 msgid "time"
 msgstr "Zeit"
 
-#: builtin/clone.c:133
+#: builtin/clone.c:137
 msgid "create a shallow clone since a specific time"
 msgstr ""
 "einen Klon mit unvollständiger Historie (shallow) seit einer bestimmten "
 "Zeit\n"
 "erstellen"
 
-#: builtin/clone.c:134 builtin/fetch.c:185 builtin/fetch.c:208
-#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1022
+#: builtin/clone.c:138 builtin/fetch.c:186 builtin/fetch.c:212
+#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1050
 msgid "revision"
 msgstr "Commit"
 
-#: builtin/clone.c:135 builtin/fetch.c:186 builtin/pull.c:219
+#: builtin/clone.c:139 builtin/fetch.c:187 builtin/pull.c:219
 msgid "deepen history of shallow clone, excluding rev"
 msgstr ""
 "die Historie eines Klons mit unvollständiger Historie (shallow) mittels\n"
 "Ausschluss eines Commits vertiefen"
 
-#: builtin/clone.c:137 builtin/submodule--helper.c:1883
-#: builtin/submodule--helper.c:2530
+#: builtin/clone.c:141 builtin/submodule--helper.c:1897
+#: builtin/submodule--helper.c:2735
 msgid "clone only one branch, HEAD or --branch"
 msgstr "nur einen Branch klonen, HEAD oder --branch"
 
-#: builtin/clone.c:139
+#: builtin/clone.c:143
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr "keine Tags klonen, und auch bei späteren Abrufen nicht beachten"
 
-#: builtin/clone.c:141
+#: builtin/clone.c:145
 msgid "any cloned submodules will be shallow"
 msgstr "jedes geklonte Submodul mit unvollständiger Historie (shallow)"
 
-#: builtin/clone.c:142 builtin/init-db.c:548
+#: builtin/clone.c:146 builtin/init-db.c:548
 msgid "gitdir"
 msgstr ".git-Verzeichnis"
 
-#: builtin/clone.c:143 builtin/init-db.c:549
+#: builtin/clone.c:147 builtin/init-db.c:549
 msgid "separate git dir from working tree"
 msgstr "Git-Verzeichnis vom Arbeitsverzeichnis separieren"
 
-#: builtin/clone.c:144
+#: builtin/clone.c:148
 msgid "key=value"
 msgstr "Schlüssel=Wert"
 
-#: builtin/clone.c:145
+#: builtin/clone.c:149
 msgid "set config inside the new repository"
 msgstr "Konfiguration innerhalb des neuen Repositories setzen"
 
-#: builtin/clone.c:147 builtin/fetch.c:203 builtin/ls-remote.c:77
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
 #: builtin/pull.c:234 builtin/push.c:575 builtin/send-pack.c:200
 msgid "server-specific"
 msgstr "serverspezifisch"
 
-#: builtin/clone.c:147 builtin/fetch.c:203 builtin/ls-remote.c:77
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
 #: builtin/pull.c:235 builtin/push.c:575 builtin/send-pack.c:201
 msgid "option to transmit"
 msgstr "Option übertragen"
 
-#: builtin/clone.c:148 builtin/fetch.c:204 builtin/pull.c:238
+#: builtin/clone.c:152 builtin/fetch.c:208 builtin/pull.c:238
 #: builtin/push.c:576
 msgid "use IPv4 addresses only"
 msgstr "nur IPv4-Adressen benutzen"
 
-#: builtin/clone.c:150 builtin/fetch.c:206 builtin/pull.c:241
+#: builtin/clone.c:154 builtin/fetch.c:210 builtin/pull.c:241
 #: builtin/push.c:578
 msgid "use IPv6 addresses only"
 msgstr "nur IPv6-Adressen benutzen"
 
-#: builtin/clone.c:154
+#: builtin/clone.c:158
+msgid "apply partial clone filters to submodules"
+msgstr "partielle Klonfilter auf Submodule anwenden"
+
+#: builtin/clone.c:160
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "jedes geklonte Submodul nutzt seinen Remote-Tracking-Branch"
 
-#: builtin/clone.c:156
+#: builtin/clone.c:162
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr ""
 "Initialisiere Datei für partiellen Checkout, um nur Dateien im\n"
 "Root-Verzeichnis einzubeziehen"
 
-#: builtin/clone.c:231
+#: builtin/clone.c:237
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info: Konnte Alternative für '%s' nicht hinzufügen: %s\n"
 
-#: builtin/clone.c:304
+#: builtin/clone.c:310
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s existiert und ist kein Verzeichnis"
 
-#: builtin/clone.c:322
+#: builtin/clone.c:328
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "Fehler beim Starten der Iteration über '%s'"
 
-#: builtin/clone.c:353
+#: builtin/clone.c:359
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "Konnte Verweis '%s' nicht erstellen"
 
-#: builtin/clone.c:357
+#: builtin/clone.c:363
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "Konnte Datei nicht nach '%s' kopieren"
 
-#: builtin/clone.c:362
+#: builtin/clone.c:368
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "Fehler beim Iterieren über '%s'"
 
-#: builtin/clone.c:389
+#: builtin/clone.c:395
 #, c-format
 msgid "done.\n"
 msgstr "Fertig.\n"
 
-#: builtin/clone.c:403
+#: builtin/clone.c:409
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -13549,103 +13934,103 @@ msgstr ""
 "Sie können mit 'git status' prüfen, was ausgecheckt worden ist\n"
 "und das Auschecken mit 'git restore --source=HEAD :/' erneut versuchen.\n"
 
-#: builtin/clone.c:480
+#: builtin/clone.c:486
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "Konnte zu klonenden Remote-Branch %s nicht finden."
 
-#: builtin/clone.c:597
+#: builtin/clone.c:603
 #, c-format
 msgid "unable to update %s"
 msgstr "kann %s nicht aktualisieren"
 
-#: builtin/clone.c:645
+#: builtin/clone.c:651
 msgid "failed to initialize sparse-checkout"
 msgstr "Fehler beim Initialisieren vom partiellen Checkout."
 
-#: builtin/clone.c:668
+#: builtin/clone.c:674
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 "Externer HEAD bezieht sich auf eine nicht existierende Referenz und kann "
 "nicht ausgecheckt werden.\n"
 
-#: builtin/clone.c:701
+#: builtin/clone.c:709
 msgid "unable to checkout working tree"
 msgstr "Arbeitsverzeichnis konnte nicht ausgecheckt werden"
 
-#: builtin/clone.c:779
+#: builtin/clone.c:793
 msgid "unable to write parameters to config file"
 msgstr "konnte Parameter nicht in Konfigurationsdatei schreiben"
 
-#: builtin/clone.c:842
+#: builtin/clone.c:856
 msgid "cannot repack to clean up"
 msgstr "Kann \"repack\" zum Aufräumen nicht aufrufen"
 
-#: builtin/clone.c:844
+#: builtin/clone.c:858
 msgid "cannot unlink temporary alternates file"
 msgstr "Kann temporäre \"alternates\"-Datei nicht entfernen"
 
-#: builtin/clone.c:886
+#: builtin/clone.c:901
 msgid "Too many arguments."
 msgstr "Zu viele Argumente."
 
-#: builtin/clone.c:890 contrib/scalar/scalar.c:414
+#: builtin/clone.c:905 contrib/scalar/scalar.c:413
 msgid "You must specify a repository to clone."
 msgstr "Sie müssen ein Repository zum Klonen angeben."
 
-#: builtin/clone.c:903
+#: builtin/clone.c:918
 #, c-format
 msgid "options '%s' and '%s %s' cannot be used together"
 msgstr "die Optionen '%s' und '%s %s' können nicht gemeinsam verwendet werden"
 
-#: builtin/clone.c:920
+#: builtin/clone.c:935
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "Repository '%s' existiert nicht"
 
-#: builtin/clone.c:924 builtin/fetch.c:2052
+#: builtin/clone.c:939 builtin/fetch.c:2176
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "Tiefe %s ist keine positive Zahl"
 
-#: builtin/clone.c:934
+#: builtin/clone.c:949
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "Zielpfad '%s' existiert bereits und ist kein leeres Verzeichnis."
 
-#: builtin/clone.c:940
+#: builtin/clone.c:955
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr ""
 "Pfad des Repositories '%s' existiert bereits und ist kein leeres Verzeichnis."
 
-#: builtin/clone.c:954
+#: builtin/clone.c:969
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "Arbeitsverzeichnis '%s' existiert bereits."
 
-#: builtin/clone.c:969 builtin/clone.c:990 builtin/difftool.c:256
-#: builtin/log.c:2012 builtin/worktree.c:281 builtin/worktree.c:313
+#: builtin/clone.c:984 builtin/clone.c:1005 builtin/difftool.c:256
+#: builtin/log.c:2037 builtin/worktree.c:350 builtin/worktree.c:382
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "Konnte führende Verzeichnisse von '%s' nicht erstellen."
 
-#: builtin/clone.c:974
+#: builtin/clone.c:989
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "Konnte Arbeitsverzeichnis '%s' nicht erstellen"
 
-#: builtin/clone.c:994
+#: builtin/clone.c:1009
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Klone in Bare-Repository '%s' ...\n"
 
-#: builtin/clone.c:996
+#: builtin/clone.c:1011
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Klone nach '%s'...\n"
 
-#: builtin/clone.c:1025
+#: builtin/clone.c:1040
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
@@ -13653,55 +14038,59 @@ msgstr ""
 "'clone --recursive' ist nicht kompatibel mit --reference und --reference-if-"
 "able"
 
-#: builtin/clone.c:1080 builtin/remote.c:200 builtin/remote.c:710
+#: builtin/clone.c:1116 builtin/remote.c:201 builtin/remote.c:721
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "'%s' ist kein gültiger Name für ein Remote-Repository"
 
-#: builtin/clone.c:1121
+#: builtin/clone.c:1157
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr ""
 "--depth wird in lokalen Klonen ignoriert; benutzen Sie stattdessen \"file://"
 "\"."
 
-#: builtin/clone.c:1123
+#: builtin/clone.c:1159
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-since wird in lokalen Klonen ignoriert; benutzen Sie stattdessen "
 "\"file://\"."
 
-#: builtin/clone.c:1125
+#: builtin/clone.c:1161
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-exclude wird in lokalen Klonen ignoriert; benutzen Sie stattdessen "
 "\"file://\"."
 
-#: builtin/clone.c:1127
+#: builtin/clone.c:1163
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr ""
 "--filter wird in lokalen Klonen ignoriert; benutzen Sie stattdessen \"file://"
 "\"."
 
-#: builtin/clone.c:1132
+#: builtin/clone.c:1168
 msgid "source repository is shallow, ignoring --local"
 msgstr ""
 "Quelle ist ein Repository mit unvollständiger Historie (shallow),\n"
 "ignoriere --local"
 
-#: builtin/clone.c:1137
+#: builtin/clone.c:1173
 msgid "--local is ignored"
 msgstr "--local wird ignoriert"
 
-#: builtin/clone.c:1216 builtin/clone.c:1276
+#: builtin/clone.c:1185
+msgid "cannot clone from filtered bundle"
+msgstr "kann nicht von gefiltertem Bundle klonen"
+
+#: builtin/clone.c:1265 builtin/clone.c:1324
 msgid "remote transport reported error"
 msgstr "Remoteübertragung meldete Fehler"
 
-#: builtin/clone.c:1228 builtin/clone.c:1239
+#: builtin/clone.c:1277 builtin/clone.c:1289
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "Remote-Branch %s nicht im Upstream-Repository %s gefunden"
 
-#: builtin/clone.c:1242
+#: builtin/clone.c:1292
 msgid "You appear to have cloned an empty repository."
 msgstr "Sie scheinen ein leeres Repository geklont zu haben."
 
@@ -13754,7 +14143,7 @@ msgstr ""
 "split[=<Strategie>]] [--reachable|--stdin-packs|--stdin-commits] [--changed-"
 "paths] [--[no-]max-new-filters <Anzahl>] [--[no-]progress] <Split-Optionen>"
 
-#: builtin/commit-graph.c:51 builtin/fetch.c:192 builtin/log.c:1794
+#: builtin/commit-graph.c:51 builtin/fetch.c:196 builtin/log.c:1813
 msgid "dir"
 msgstr "Verzeichnis"
 
@@ -13859,7 +14248,7 @@ msgstr ""
 msgid "duplicate parent %s ignored"
 msgstr "doppelter Vorgänger %s ignoriert"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:577
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:590
 #, c-format
 msgid "not a valid object name %s"
 msgstr "Kein gültiger Objektname: %s"
@@ -13882,13 +14271,13 @@ msgstr "Eltern-Commit"
 msgid "id of a parent commit object"
 msgstr "ID eines Eltern-Commit-Objektes."
 
-#: builtin/commit-tree.c:112 builtin/commit.c:1627 builtin/merge.c:284
-#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1677
-#: builtin/tag.c:454
+#: builtin/commit-tree.c:112 builtin/commit.c:1626 builtin/merge.c:284
+#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1666
+#: builtin/tag.c:455
 msgid "message"
 msgstr "Beschreibung"
 
-#: builtin/commit-tree.c:113 builtin/commit.c:1627
+#: builtin/commit-tree.c:113 builtin/commit.c:1626
 msgid "commit message"
 msgstr "Commit-Beschreibung"
 
@@ -13896,7 +14285,7 @@ msgstr "Commit-Beschreibung"
 msgid "read commit log message from file"
 msgstr "Commit-Beschreibung von Datei lesen"
 
-#: builtin/commit-tree.c:119 builtin/commit.c:1644 builtin/merge.c:303
+#: builtin/commit-tree.c:119 builtin/commit.c:1643 builtin/merge.c:303
 #: builtin/pull.c:180 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "Commit mit GPG signieren"
@@ -13909,15 +14298,15 @@ msgstr "Brauche genau ein Tree-Objekt."
 msgid "git commit-tree: failed to read"
 msgstr "git commit-tree: Fehler beim Lesen"
 
-#: builtin/commit.c:42
+#: builtin/commit.c:43
 msgid "git commit [<options>] [--] <pathspec>..."
 msgstr "git commit [<Optionen>] [--] <Pfadspezifikation>..."
 
-#: builtin/commit.c:47
+#: builtin/commit.c:48
 msgid "git status [<options>] [--] <pathspec>..."
 msgstr "git status [<Optionen>] [--] <Pfadspezifikation>..."
 
-#: builtin/commit.c:52
+#: builtin/commit.c:53
 msgid ""
 "You asked to amend the most recent commit, but doing so would make\n"
 "it empty. You can repeat your command with --allow-empty, or you can\n"
@@ -13927,7 +14316,7 @@ msgstr ""
 "machen. Sie können Ihren Befehl mit --allow-empty wiederholen, oder diesen\n"
 "Commit mit \"git reset HEAD^\" vollständig entfernen.\n"
 
-#: builtin/commit.c:57
+#: builtin/commit.c:58
 msgid ""
 "The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
 "If you wish to commit it anyway, use:\n"
@@ -13942,15 +14331,15 @@ msgstr ""
 "    git commit --allow-empty\n"
 "\n"
 
-#: builtin/commit.c:64
+#: builtin/commit.c:65
 msgid "Otherwise, please use 'git rebase --skip'\n"
 msgstr "Andernfalls benutzen Sie bitte 'git rebase --skip'\n"
 
-#: builtin/commit.c:67
+#: builtin/commit.c:68
 msgid "Otherwise, please use 'git cherry-pick --skip'\n"
 msgstr "Andernfalls benutzen Sie bitte 'git cherry-pick --skip'\n"
 
-#: builtin/commit.c:70
+#: builtin/commit.c:71
 msgid ""
 "and then use:\n"
 "\n"
@@ -13972,70 +14361,70 @@ msgstr ""
 "    git cherry-pick --skip\n"
 "\n"
 
-#: builtin/commit.c:325
+#: builtin/commit.c:326
 msgid "failed to unpack HEAD tree object"
 msgstr "Fehler beim Entpacken des Tree-Objektes von HEAD."
 
-#: builtin/commit.c:375
+#: builtin/commit.c:376
 msgid "No paths with --include/--only does not make sense."
 msgstr "Keine Pfade mit der Option --include/--only ist nicht sinnvoll."
 
-#: builtin/commit.c:387
+#: builtin/commit.c:388
 msgid "unable to create temporary index"
 msgstr "Konnte temporären Index nicht erstellen."
 
-#: builtin/commit.c:396
+#: builtin/commit.c:397
 msgid "interactive add failed"
 msgstr "interaktives Hinzufügen fehlgeschlagen"
 
-#: builtin/commit.c:411
+#: builtin/commit.c:412
 msgid "unable to update temporary index"
 msgstr "Konnte temporären Index nicht aktualisieren."
 
-#: builtin/commit.c:413
+#: builtin/commit.c:414
 msgid "Failed to update main cache tree"
 msgstr "Konnte Haupt-Cache-Verzeichnis nicht aktualisieren"
 
-#: builtin/commit.c:438 builtin/commit.c:461 builtin/commit.c:509
+#: builtin/commit.c:439 builtin/commit.c:462 builtin/commit.c:510
 msgid "unable to write new_index file"
 msgstr "Konnte new_index Datei nicht schreiben"
 
-#: builtin/commit.c:490
+#: builtin/commit.c:491
 msgid "cannot do a partial commit during a merge."
 msgstr "Kann keinen Teil-Commit durchführen, während ein Merge im Gange ist."
 
-#: builtin/commit.c:492
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr ""
 "Kann keinen Teil-Commit durchführen, während \"cherry-pick\" im Gange ist."
 
-#: builtin/commit.c:494
+#: builtin/commit.c:495
 msgid "cannot do a partial commit during a rebase."
 msgstr "kann keinen Teil-Commit durchführen, während ein Rebase im Gange ist."
 
-#: builtin/commit.c:502
+#: builtin/commit.c:503
 msgid "cannot read the index"
 msgstr "Kann Index nicht lesen"
 
-#: builtin/commit.c:521
+#: builtin/commit.c:522
 msgid "unable to write temporary index file"
 msgstr "Konnte temporäre Index-Datei nicht schreiben."
 
-#: builtin/commit.c:619
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "Commit '%s' fehlt Autor-Kopfbereich"
 
-#: builtin/commit.c:621
+#: builtin/commit.c:622
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "Commit '%s' hat fehlerhafte Autor-Zeile"
 
-#: builtin/commit.c:640
+#: builtin/commit.c:641
 msgid "malformed --author parameter"
 msgstr "Fehlerhafter --author Parameter"
 
-#: builtin/commit.c:693
+#: builtin/commit.c:694
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
@@ -14043,43 +14432,43 @@ msgstr ""
 "Konnte kein Kommentar-Zeichen auswählen, das nicht in\n"
 "der aktuellen Commit-Beschreibung verwendet wird."
 
-#: builtin/commit.c:747 builtin/commit.c:781 builtin/commit.c:1166
+#: builtin/commit.c:750 builtin/commit.c:784 builtin/commit.c:1170
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "Konnte Commit %s nicht nachschlagen"
 
-#: builtin/commit.c:759 builtin/shortlog.c:416
+#: builtin/commit.c:762 builtin/shortlog.c:417
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(lese Log-Nachricht von Standard-Eingabe)\n"
 
-#: builtin/commit.c:761
+#: builtin/commit.c:764
 msgid "could not read log from standard input"
 msgstr "Konnte Log nicht von Standard-Eingabe lesen."
 
-#: builtin/commit.c:765
+#: builtin/commit.c:768
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "Konnte Log-Datei '%s' nicht lesen"
 
-#: builtin/commit.c:802
+#: builtin/commit.c:805
 #, c-format
 msgid "options '%s' and '%s:%s' cannot be used together"
 msgstr "die Optionen '%s' und '%s:%s' können nicht gemeinsam verwendet werden"
 
-#: builtin/commit.c:814 builtin/commit.c:830
+#: builtin/commit.c:817 builtin/commit.c:833
 msgid "could not read SQUASH_MSG"
 msgstr "Konnte SQUASH_MSG nicht lesen"
 
-#: builtin/commit.c:821
+#: builtin/commit.c:824
 msgid "could not read MERGE_MSG"
 msgstr "Konnte MERGE_MSG nicht lesen"
 
-#: builtin/commit.c:881
+#: builtin/commit.c:884
 msgid "could not write commit template"
 msgstr "Konnte Commit-Vorlage nicht schreiben"
 
-#: builtin/commit.c:894
+#: builtin/commit.c:897
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -14088,7 +14477,7 @@ msgstr ""
 "Bitte geben Sie eine Commit-Beschreibung für Ihre Änderungen ein. Zeilen,\n"
 "die mit '%c' beginnen, werden ignoriert.\n"
 
-#: builtin/commit.c:896
+#: builtin/commit.c:899
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -14098,7 +14487,7 @@ msgstr ""
 "die mit '%c' beginnen, werden ignoriert, und eine leere Beschreibung\n"
 "bricht den Commit ab.\n"
 
-#: builtin/commit.c:900
+#: builtin/commit.c:903
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -14108,7 +14497,7 @@ msgstr ""
 "die mit '%c' beginnen, werden beibehalten; wenn Sie möchten, können Sie\n"
 "diese entfernen.\n"
 
-#: builtin/commit.c:904
+#: builtin/commit.c:907
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -14121,7 +14510,7 @@ msgstr ""
 "entfernen.\n"
 "Eine leere Beschreibung bricht den Commit ab.\n"
 
-#: builtin/commit.c:916
+#: builtin/commit.c:919
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -14135,7 +14524,7 @@ msgstr ""
 "\tgit update-ref -d MERGE_HEAD\n"
 "aus und versuchen Sie es erneut.\n"
 
-#: builtin/commit.c:921
+#: builtin/commit.c:924
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -14149,177 +14538,154 @@ msgstr ""
 "\tgit update-ref -d CHERRY_PICK_HEAD\n"
 "aus und versuchen Sie es erneut.\n"
 
-#: builtin/commit.c:948
+#: builtin/commit.c:951
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%sAutor:           %.*s <%.*s>"
 
-#: builtin/commit.c:956
+#: builtin/commit.c:959
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%sDatum:            %s"
 
-#: builtin/commit.c:963
+#: builtin/commit.c:966
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%sCommit-Ersteller: %.*s <%.*s>"
 
-#: builtin/commit.c:981
+#: builtin/commit.c:984
 msgid "Cannot read index"
 msgstr "Kann Index nicht lesen"
 
-#: builtin/commit.c:1026
+#: builtin/commit.c:1029
 msgid "unable to pass trailers to --trailers"
 msgstr "konnte Anhänge nicht an --trailers weitergeben"
 
-#: builtin/commit.c:1066
+#: builtin/commit.c:1069
 msgid "Error building trees"
 msgstr "Fehler beim Erzeugen der \"Tree\"-Objekte"
 
-#: builtin/commit.c:1080 builtin/tag.c:316
+#: builtin/commit.c:1083 builtin/tag.c:317
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr ""
 "Bitte liefern Sie eine Beschreibung entweder mit der Option -m oder -F.\n"
 
-#: builtin/commit.c:1124
+#: builtin/commit.c:1128
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr ""
 "--author '%s' ist nicht im Format 'Name <E-Mail>' und stimmt mit keinem "
 "vorhandenen Autor überein"
 
-#: builtin/commit.c:1138
+#: builtin/commit.c:1142
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "Ungültiger ignored-Modus '%s'."
 
-#: builtin/commit.c:1156 builtin/commit.c:1451
+#: builtin/commit.c:1160 builtin/commit.c:1450
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "Ungültiger Modus '%s' für unversionierte Dateien"
 
-#: builtin/commit.c:1227
+#: builtin/commit.c:1231
 msgid "You are in the middle of a merge -- cannot reword."
 msgstr "Ein Merge ist im Gange -- kann Umformulierung nicht durchführen."
 
-#: builtin/commit.c:1229
+#: builtin/commit.c:1233
 msgid "You are in the middle of a cherry-pick -- cannot reword."
 msgstr "\"cherry-pick\" ist im Gange -- kann Umformulierung nicht durchführen."
 
-#: builtin/commit.c:1232
+#: builtin/commit.c:1236
 #, c-format
 msgid "reword option of '%s' and path '%s' cannot be used together"
 msgstr ""
 "Umformulierungsoption von '%s' und Pfad '%s' können nicht gemeinsam "
 "verwendet werden"
 
-#: builtin/commit.c:1234
+#: builtin/commit.c:1238
 #, c-format
 msgid "reword option of '%s' and '%s' cannot be used together"
 msgstr ""
 "Umformulierungsoption von '%s' und '%s' können nicht gemeinsam verwendet "
 "werden"
 
-#: builtin/commit.c:1254
-msgid "Using both --reset-author and --author does not make sense"
-msgstr "--reset-author und --author können nicht gemeinsam verwendet werden"
-
-#: builtin/commit.c:1261
+#: builtin/commit.c:1263
 msgid "You have nothing to amend."
 msgstr "Sie haben nichts zum Nachbessern."
 
-#: builtin/commit.c:1264
+#: builtin/commit.c:1266
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "Ein Merge ist im Gange -- Nachbesserung nicht möglich."
 
-#: builtin/commit.c:1266
+#: builtin/commit.c:1268
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr "\"cherry-pick\" ist im Gange -- Nachbesserung nicht möglich."
 
-#: builtin/commit.c:1268
+#: builtin/commit.c:1270
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr "Ein Rebase ist im Gange -- Nachbesserung nicht möglich."
 
-#: builtin/commit.c:1271
-msgid "Options --squash and --fixup cannot be used together"
-msgstr ""
-"die Optionen --squash und --fixup können nicht gemeinsam verwendet werden"
-
-#: builtin/commit.c:1281
-msgid "Only one of -c/-C/-F/--fixup can be used."
-msgstr "Es kann nur eine Option von -c/-C/-F/--fixup verwendet werden."
-
-#: builtin/commit.c:1283
-msgid "Option -m cannot be combined with -c/-C/-F."
-msgstr "Die Option -m kann nicht mit -c/-C/-F kombiniert werden."
-
-#: builtin/commit.c:1292
+#: builtin/commit.c:1290
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr "--reset-author kann nur mit -C, -c oder --amend verwendet werden."
 
-#: builtin/commit.c:1310
-msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
-msgstr ""
-"Es kann nur eine Option von --include/--only/--all/--interactive/--patch "
-"verwendet werden."
-
-#: builtin/commit.c:1338
+#: builtin/commit.c:1337
 #, c-format
 msgid "unknown option: --fixup=%s:%s"
 msgstr "unbekannte Option: --fixup=%s:%s"
 
-#: builtin/commit.c:1355
+#: builtin/commit.c:1354
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "Pfade '%s ...' mit -a sind nicht sinnvoll"
 
-#: builtin/commit.c:1486 builtin/commit.c:1655
+#: builtin/commit.c:1485 builtin/commit.c:1654
 msgid "show status concisely"
 msgstr "Status im Kurzformat anzeigen"
 
-#: builtin/commit.c:1488 builtin/commit.c:1657
+#: builtin/commit.c:1487 builtin/commit.c:1656
 msgid "show branch information"
 msgstr "Branchinformationen anzeigen"
 
-#: builtin/commit.c:1490
+#: builtin/commit.c:1489
 msgid "show stash information"
 msgstr "Stashinformationen anzeigen"
 
-#: builtin/commit.c:1492 builtin/commit.c:1659
+#: builtin/commit.c:1491 builtin/commit.c:1658
 msgid "compute full ahead/behind values"
 msgstr "voraus/hinterher-Werte berechnen"
 
-#: builtin/commit.c:1494
+#: builtin/commit.c:1493
 msgid "version"
 msgstr "Version"
 
-#: builtin/commit.c:1494 builtin/commit.c:1661 builtin/push.c:551
-#: builtin/worktree.c:690
+#: builtin/commit.c:1493 builtin/commit.c:1660 builtin/push.c:551
+#: builtin/worktree.c:765
 msgid "machine-readable output"
 msgstr "maschinenlesbare Ausgabe"
 
-#: builtin/commit.c:1497 builtin/commit.c:1663
+#: builtin/commit.c:1496 builtin/commit.c:1662
 msgid "show status in long format (default)"
 msgstr "Status im Langformat anzeigen (Standard)"
 
-#: builtin/commit.c:1500 builtin/commit.c:1666
+#: builtin/commit.c:1499 builtin/commit.c:1665
 msgid "terminate entries with NUL"
 msgstr "Einträge mit NUL-Zeichen abschließen"
 
-#: builtin/commit.c:1502 builtin/commit.c:1506 builtin/commit.c:1669
+#: builtin/commit.c:1501 builtin/commit.c:1505 builtin/commit.c:1668
 #: builtin/fast-export.c:1172 builtin/fast-export.c:1175
-#: builtin/fast-export.c:1178 builtin/rebase.c:1111 parse-options.h:337
+#: builtin/fast-export.c:1178 builtin/rebase.c:1139 parse-options.h:368
 msgid "mode"
 msgstr "Modus"
 
-#: builtin/commit.c:1503 builtin/commit.c:1669
+#: builtin/commit.c:1502 builtin/commit.c:1668
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr ""
 "unversionierte Dateien anzeigen, optionale Modi: all, normal, no. (Standard: "
 "all)"
 
-#: builtin/commit.c:1507
+#: builtin/commit.c:1506
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
@@ -14327,11 +14693,11 @@ msgstr ""
 "ignorierte Dateien anzeigen, optionale Modi: traditional, matching, no. "
 "(Standard: traditional)"
 
-#: builtin/commit.c:1509 parse-options.h:192
+#: builtin/commit.c:1508 parse-options.h:197
 msgid "when"
 msgstr "wann"
 
-#: builtin/commit.c:1510
+#: builtin/commit.c:1509
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
@@ -14339,195 +14705,195 @@ msgstr ""
 "Änderungen in Submodulen ignorieren, optional wenn: all, dirty, untracked. "
 "(Standard: all)"
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1511
 msgid "list untracked files in columns"
 msgstr "unversionierte Dateien in Spalten auflisten"
 
-#: builtin/commit.c:1513
+#: builtin/commit.c:1512
 msgid "do not detect renames"
 msgstr "keine Umbenennungen ermitteln"
 
-#: builtin/commit.c:1515
+#: builtin/commit.c:1514
 msgid "detect renames, optionally set similarity index"
 msgstr "Umbenennungen erkennen, optional Index für Gleichheit setzen"
 
-#: builtin/commit.c:1538
+#: builtin/commit.c:1537
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr ""
 "Nicht unterstützte Kombination von ignored und untracked-files Argumenten."
 
-#: builtin/commit.c:1620
+#: builtin/commit.c:1619
 msgid "suppress summary after successful commit"
 msgstr "Zusammenfassung nach erfolgreichem Commit unterdrücken"
 
-#: builtin/commit.c:1621
+#: builtin/commit.c:1620
 msgid "show diff in commit message template"
 msgstr "Unterschiede in Commit-Beschreibungsvorlage anzeigen"
 
-#: builtin/commit.c:1623
+#: builtin/commit.c:1622
 msgid "Commit message options"
 msgstr "Optionen für Commit-Beschreibung"
 
-#: builtin/commit.c:1624 builtin/merge.c:288 builtin/tag.c:456
+#: builtin/commit.c:1623 builtin/merge.c:288 builtin/tag.c:457
 msgid "read message from file"
 msgstr "Beschreibung von Datei lesen"
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1624
 msgid "author"
 msgstr "Autor"
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1624
 msgid "override author for commit"
 msgstr "Autor eines Commits überschreiben"
 
-#: builtin/commit.c:1626 builtin/gc.c:551
+#: builtin/commit.c:1625 builtin/gc.c:551
 msgid "date"
 msgstr "Datum"
 
-#: builtin/commit.c:1626
+#: builtin/commit.c:1625
 msgid "override date for commit"
 msgstr "Datum eines Commits überschreiben"
 
-#: builtin/commit.c:1628 builtin/commit.c:1629 builtin/commit.c:1635
-#: parse-options.h:329 ref-filter.h:89
+#: builtin/commit.c:1627 builtin/commit.c:1628 builtin/commit.c:1634
+#: parse-options.h:360 ref-filter.h:89
 msgid "commit"
 msgstr "Commit"
 
-#: builtin/commit.c:1628
+#: builtin/commit.c:1627
 msgid "reuse and edit message from specified commit"
 msgstr "Beschreibung des angegebenen Commits wiederverwenden und editieren"
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1628
 msgid "reuse message from specified commit"
 msgstr "Beschreibung des angegebenen Commits wiederverwenden"
 
 #. TRANSLATORS: Leave "[(amend|reword):]" as-is,
 #. and only translate <commit>.
 #.
-#: builtin/commit.c:1634
+#: builtin/commit.c:1633
 msgid "[(amend|reword):]commit"
 msgstr "[(amend|reword):]Commit"
 
-#: builtin/commit.c:1634
+#: builtin/commit.c:1633
 msgid ""
 "use autosquash formatted message to fixup or amend/reword specified commit"
 msgstr ""
 "eine autosquash-formatierte Beschreibung zum Nachbessern/Umformulieren des "
 "angegebenen Commits verwenden"
 
-#: builtin/commit.c:1635
+#: builtin/commit.c:1634
 msgid "use autosquash formatted message to squash specified commit"
 msgstr ""
 "eine autosquash-formatierte Beschreibung beim \"squash\" des angegebenen "
 "Commits verwenden"
 
-#: builtin/commit.c:1636
+#: builtin/commit.c:1635
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "Sie als Autor des Commits setzen (verwendet mit -C/-c/--amend)"
 
-#: builtin/commit.c:1637 builtin/interpret-trailers.c:111
+#: builtin/commit.c:1636 builtin/interpret-trailers.c:111
 msgid "trailer"
 msgstr "Anhang"
 
-#: builtin/commit.c:1637
+#: builtin/commit.c:1636
 msgid "add custom trailer(s)"
 msgstr "benutzerdefinierte Anhänge hinzufügen"
 
-#: builtin/commit.c:1638 builtin/log.c:1769 builtin/merge.c:306
+#: builtin/commit.c:1637 builtin/log.c:1788 builtin/merge.c:306
 #: builtin/pull.c:146 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr "eine Signed-off-by Zeile hinzufügen"
 
-#: builtin/commit.c:1639
+#: builtin/commit.c:1638
 msgid "use specified template file"
 msgstr "angegebene Vorlagendatei verwenden"
 
-#: builtin/commit.c:1640
+#: builtin/commit.c:1639
 msgid "force edit of commit"
 msgstr "Bearbeitung des Commits erzwingen"
 
-#: builtin/commit.c:1642
+#: builtin/commit.c:1641
 msgid "include status in commit message template"
 msgstr "Status in die Commit-Beschreibungsvorlage einfügen"
 
-#: builtin/commit.c:1647
+#: builtin/commit.c:1646
 msgid "Commit contents options"
 msgstr "Optionen für Commit-Inhalt"
 
-#: builtin/commit.c:1648
+#: builtin/commit.c:1647
 msgid "commit all changed files"
 msgstr "alle geänderten Dateien committen"
 
-#: builtin/commit.c:1649
+#: builtin/commit.c:1648
 msgid "add specified files to index for commit"
 msgstr "die angegebenen Dateien zusätzlich zum Commit vormerken"
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1649
 msgid "interactively add files"
 msgstr "interaktives Hinzufügen von Dateien"
 
-#: builtin/commit.c:1651
+#: builtin/commit.c:1650
 msgid "interactively add changes"
 msgstr "interaktives Hinzufügen von Änderungen"
 
-#: builtin/commit.c:1652
+#: builtin/commit.c:1651
 msgid "commit only specified files"
 msgstr "nur die angegebenen Dateien committen"
 
-#: builtin/commit.c:1653
+#: builtin/commit.c:1652
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr "Hooks pre-commit und commit-msg umgehen"
 
-#: builtin/commit.c:1654
+#: builtin/commit.c:1653
 msgid "show what would be committed"
 msgstr "anzeigen, was committet werden würde"
 
-#: builtin/commit.c:1667
+#: builtin/commit.c:1666
 msgid "amend previous commit"
 msgstr "vorherigen Commit ändern"
 
-#: builtin/commit.c:1668
+#: builtin/commit.c:1667
 msgid "bypass post-rewrite hook"
 msgstr "\"post-rewrite hook\" umgehen"
 
-#: builtin/commit.c:1675
+#: builtin/commit.c:1674
 msgid "ok to record an empty change"
 msgstr "Aufzeichnung einer leeren Änderung erlauben"
 
-#: builtin/commit.c:1677
+#: builtin/commit.c:1676
 msgid "ok to record a change with an empty message"
 msgstr "Aufzeichnung einer Änderung mit einer leeren Beschreibung erlauben"
 
-#: builtin/commit.c:1753
+#: builtin/commit.c:1752
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Beschädigte MERGE_HEAD-Datei (%s)"
 
-#: builtin/commit.c:1760
+#: builtin/commit.c:1759
 msgid "could not read MERGE_MODE"
 msgstr "Konnte MERGE_MODE nicht lesen"
 
-#: builtin/commit.c:1781
+#: builtin/commit.c:1780
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "Konnte Commit-Beschreibung nicht lesen: %s"
 
-#: builtin/commit.c:1788
+#: builtin/commit.c:1787
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "Commit aufgrund leerer Beschreibung abgebrochen.\n"
 
-#: builtin/commit.c:1793
+#: builtin/commit.c:1792
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "Commit abgebrochen; Sie haben die Beschreibung nicht editiert.\n"
 
-#: builtin/commit.c:1804
+#: builtin/commit.c:1803
 #, c-format
 msgid "Aborting commit due to empty commit message body.\n"
 msgstr "Commit aufgrund leerer Commit-Beschreibung abgebrochen.\n"
 
-#: builtin/commit.c:1840
+#: builtin/commit.c:1839
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -14652,6 +15018,10 @@ msgstr "die Farbeinstellung finden: Slot [Standard-Ausgabe-ist-Terminal]"
 msgid "Type"
 msgstr "Typ"
 
+#: builtin/config.c:154 builtin/env--helper.c:42 builtin/hash-object.c:97
+msgid "type"
+msgstr "Art"
+
 #: builtin/config.c:154 builtin/env--helper.c:43
 msgid "value is given this type"
 msgstr "Wert ist mit diesem Typ angegeben"
@@ -14868,10 +15238,6 @@ msgstr ""
 msgid "no such section: %s"
 msgstr "Sektion nicht gefunden: %s"
 
-#: builtin/count-objects.c:90
-msgid "git count-objects [-v] [-H | --human-readable]"
-msgstr "git count-objects [-v] [-H | --human-readable]"
-
 #: builtin/count-objects.c:100
 msgid "print sizes in human readable format"
 msgstr "gibt Größenangaben in menschenlesbaren Format aus"
@@ -15044,7 +15410,7 @@ msgstr "nur Tags, die <Muster> entsprechen, betrachten"
 msgid "do not consider tags matching <pattern>"
 msgstr "keine Tags betrachten, die <Muster> entsprechen"
 
-#: builtin/describe.c:570 builtin/name-rev.c:544
+#: builtin/describe.c:570 builtin/name-rev.c:595
 msgid "show abbreviated commit object as fallback"
 msgstr "gekürztes Commit-Objekt anzeigen, wenn sonst nichts zutrifft"
 
@@ -15095,7 +15461,7 @@ msgstr "%s...%s: keine Merge-Basis"
 msgid "Not a git repository"
 msgstr "Kein Git-Repository"
 
-#: builtin/diff.c:537 builtin/grep.c:698
+#: builtin/diff.c:537 builtin/grep.c:700
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "Objekt '%s' ist ungültig."
@@ -15214,11 +15580,11 @@ msgstr "an `diff` übergeben"
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool benötigt Arbeitsverzeichnis oder --no-index"
 
-#: builtin/difftool.c:744
+#: builtin/difftool.c:745
 msgid "no <tool> given for --tool=<tool>"
 msgstr "kein <Tool> für --tool=<Tool> angegeben"
 
-#: builtin/difftool.c:751
+#: builtin/difftool.c:752
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "kein <Programm> für --extcmd=<Programm> angegeben"
 
@@ -15226,10 +15592,6 @@ msgstr "kein <Programm> für --extcmd=<Programm> angegeben"
 msgid "git env--helper --type=[bool|ulong] <options> <env-var>"
 msgstr "git env--helper --type=[bool|ulong] <Optionen> <Umgebungsvariable>"
 
-#: builtin/env--helper.c:42 builtin/hash-object.c:96
-msgid "type"
-msgstr "Art"
-
 #: builtin/env--helper.c:46
 msgid "default for git_env_*(...) to fall back on"
 msgstr "Standard für git_env_*(...), um darauf zurückzugreifen"
@@ -15255,8 +15617,8 @@ msgstr ""
 "type=ulong`, nicht `%s`"
 
 #: builtin/fast-export.c:29
-msgid "git fast-export [rev-list-opts]"
-msgstr "git fast-export [rev-list-opts]"
+msgid "git fast-export [<rev-list-opts>]"
+msgstr "git fast-export [<rev-list-opts>]"
 
 #: builtin/fast-export.c:843
 msgid "Error: Cannot export nested tags unless --mark-tags is specified."
@@ -15313,7 +15675,7 @@ msgstr "die \"done\"-Funktion benutzen, um den Datenstrom abzuschließen"
 msgid "skip output of blob data"
 msgstr "Ausgabe von Blob-Daten überspringen"
 
-#: builtin/fast-export.c:1196 builtin/log.c:1841
+#: builtin/fast-export.c:1196 builtin/log.c:1860
 msgid "refspec"
 msgstr "Refspec"
 
@@ -15347,36 +15709,36 @@ msgstr "originale Objekt-IDs von Blobs/Commits anzeigen"
 msgid "label tags with mark ids"
 msgstr "Tags mit Markierungs-IDs beschriften"
 
-#: builtin/fast-import.c:3090
+#: builtin/fast-import.c:3097
 #, c-format
 msgid "Missing from marks for submodule '%s'"
 msgstr "Fehlende 'from'-Markierungen für Submodul '%s'"
 
-#: builtin/fast-import.c:3092
+#: builtin/fast-import.c:3099
 #, c-format
 msgid "Missing to marks for submodule '%s'"
 msgstr "Fehlende 'to'-Markierungen für Submodul '%s'"
 
-#: builtin/fast-import.c:3227
+#: builtin/fast-import.c:3234
 #, c-format
 msgid "Expected 'mark' command, got %s"
 msgstr "'mark' Befehl erwartet, '%s' bekommen"
 
-#: builtin/fast-import.c:3232
+#: builtin/fast-import.c:3239
 #, c-format
 msgid "Expected 'to' command, got %s"
 msgstr "'to' Befehl erwartet, '%s' bekommen"
 
-#: builtin/fast-import.c:3324
+#: builtin/fast-import.c:3331
 msgid "Expected format name:filename for submodule rewrite option"
 msgstr "Format 'Name:Dateiname' für Submodul-Rewrite-Option erwartet"
 
-#: builtin/fast-import.c:3379
+#: builtin/fast-import.c:3386
 #, c-format
 msgid "feature '%s' forbidden in input without --allow-unsafe-features"
 msgstr "Feature '%s' verboten in Eingabe ohne Option --allow-unsafe-features"
 
-#: builtin/fetch-pack.c:242
+#: builtin/fetch-pack.c:246
 #, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr "Lock-Datei erstellt, aber nicht gemeldet: %s"
@@ -15397,110 +15759,114 @@ msgstr "git fetch --multiple [<Optionen>] [(<Repository> | <Gruppe>)...]"
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<Optionen>]"
 
-#: builtin/fetch.c:123
+#: builtin/fetch.c:124
 msgid "fetch.parallel cannot be negative"
 msgstr "fetch.parallel kann nicht negativ sein"
 
-#: builtin/fetch.c:146 builtin/pull.c:189
+#: builtin/fetch.c:147 builtin/pull.c:189
 msgid "fetch from all remotes"
 msgstr "fordert von allen Remote-Repositories an"
 
-#: builtin/fetch.c:148 builtin/pull.c:249
+#: builtin/fetch.c:149 builtin/pull.c:249
 msgid "set upstream for git pull/fetch"
 msgstr "Upstream für \"git pull/fetch\" setzen"
 
-#: builtin/fetch.c:150 builtin/pull.c:192
+#: builtin/fetch.c:151 builtin/pull.c:192
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "an .git/FETCH_HEAD anhängen statt zu überschreiben"
 
-#: builtin/fetch.c:152
+#: builtin/fetch.c:153
 msgid "use atomic transaction to update references"
 msgstr "atomare Transaktionen nutzen, um Referenzen zu aktualisieren"
 
-#: builtin/fetch.c:154 builtin/pull.c:195
+#: builtin/fetch.c:155 builtin/pull.c:195
 msgid "path to upload pack on remote end"
 msgstr "Pfad des Programms zum Hochladen von Paketen auf der Gegenseite"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:156
 msgid "force overwrite of local reference"
 msgstr "das Überschreiben einer lokalen Referenz erzwingen"
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:158
 msgid "fetch from multiple remotes"
 msgstr "von mehreren Remote-Repositories anfordern"
 
-#: builtin/fetch.c:159 builtin/pull.c:199
+#: builtin/fetch.c:160 builtin/pull.c:199
 msgid "fetch all tags and associated objects"
 msgstr "alle Tags und verbundene Objekte anfordern"
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:162
 msgid "do not fetch all tags (--no-tags)"
 msgstr "nicht alle Tags anfordern (--no-tags)"
 
-#: builtin/fetch.c:163
+#: builtin/fetch.c:164
 msgid "number of submodules fetched in parallel"
 msgstr "Anzahl der parallel anzufordernden Submodule"
 
-#: builtin/fetch.c:165
+#: builtin/fetch.c:166
 msgid "modify the refspec to place all refs within refs/prefetch/"
 msgstr ""
 "Refspec verändern, damit alle Referenzen unter refs/prefetch/ platziert "
 "werden"
 
-#: builtin/fetch.c:167 builtin/pull.c:202
+#: builtin/fetch.c:168 builtin/pull.c:202
 msgid "prune remote-tracking branches no longer on remote"
 msgstr ""
 "Remote-Tracking-Branches entfernen, die sich nicht mehr im Remote-Repository "
 "befinden"
 
-#: builtin/fetch.c:169
+#: builtin/fetch.c:170
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 "lokale Tags entfernen, die sich nicht mehr im Remote-Repository befinden, "
 "und geänderte Tags aktualisieren"
 
-#: builtin/fetch.c:170 builtin/fetch.c:195 builtin/pull.c:123
+#: builtin/fetch.c:171 builtin/fetch.c:199 builtin/pull.c:123
 msgid "on-demand"
 msgstr "bei-Bedarf"
 
-#: builtin/fetch.c:171
+#: builtin/fetch.c:172
 msgid "control recursive fetching of submodules"
 msgstr "rekursive Anforderungen von Submodulen kontrollieren"
 
-#: builtin/fetch.c:176
+#: builtin/fetch.c:177
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr "schreibe angeforderte Referenzen in die FETCH_HEAD-Datei"
 
-#: builtin/fetch.c:177 builtin/pull.c:210
+#: builtin/fetch.c:178 builtin/pull.c:210
 msgid "keep downloaded pack"
 msgstr "heruntergeladenes Paket behalten"
 
-#: builtin/fetch.c:179
+#: builtin/fetch.c:180
 msgid "allow updating of HEAD ref"
 msgstr "Aktualisierung der \"HEAD\"-Referenz erlauben"
 
-#: builtin/fetch.c:182 builtin/fetch.c:188 builtin/pull.c:213
+#: builtin/fetch.c:183 builtin/fetch.c:189 builtin/pull.c:213
 #: builtin/pull.c:222
 msgid "deepen history of shallow clone"
 msgstr ""
 "die Historie eines Klons mit unvollständiger Historie (shallow) vertiefen"
 
-#: builtin/fetch.c:184 builtin/pull.c:216
+#: builtin/fetch.c:185 builtin/pull.c:216
 msgid "deepen history of shallow repository based on time"
 msgstr ""
 "die Historie eines Klons mit unvollständiger Historie (shallow) auf "
 "Zeitbasis\n"
 "vertiefen"
 
-#: builtin/fetch.c:190 builtin/pull.c:225
+#: builtin/fetch.c:191 builtin/pull.c:225
 msgid "convert to a complete repository"
 msgstr "zu einem vollständigen Repository konvertieren"
 
-#: builtin/fetch.c:193
+#: builtin/fetch.c:194
+msgid "re-fetch without negotiating common commits"
+msgstr "erneutes Abrufen ohne Aushandeln gemeinsamer Commits"
+
+#: builtin/fetch.c:197
 msgid "prepend this to submodule path output"
 msgstr "dies an die Ausgabe der Submodul-Pfade voranstellen"
 
-#: builtin/fetch.c:196
+#: builtin/fetch.c:200
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
@@ -15508,110 +15874,105 @@ msgstr ""
 "Standard für die rekursive Anforderung von Submodulen (geringere Priorität\n"
 "als Konfigurationsdateien)"
 
-#: builtin/fetch.c:200 builtin/pull.c:228
+#: builtin/fetch.c:204 builtin/pull.c:228
 msgid "accept refs that update .git/shallow"
 msgstr "Referenzen, die .git/shallow aktualisieren, akzeptieren"
 
-#: builtin/fetch.c:201 builtin/pull.c:230
+#: builtin/fetch.c:205 builtin/pull.c:230
 msgid "refmap"
 msgstr "Refmap"
 
-#: builtin/fetch.c:202 builtin/pull.c:231
+#: builtin/fetch.c:206 builtin/pull.c:231
 msgid "specify fetch refmap"
 msgstr "Refmap für 'fetch' angeben"
 
-#: builtin/fetch.c:209 builtin/pull.c:244
+#: builtin/fetch.c:213 builtin/pull.c:244
 msgid "report that we have only objects reachable from this object"
 msgstr ""
 "ausgeben, dass wir nur Objekte haben, die von diesem Objekt aus erreichbar "
 "sind"
 
-#: builtin/fetch.c:211
+#: builtin/fetch.c:215
 msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
 msgstr ""
 "keine Packdatei anfordern; stattdessen die Vorgänger der Verhandlungstipps "
 "anzeigen"
 
-#: builtin/fetch.c:214 builtin/fetch.c:216
+#: builtin/fetch.c:218 builtin/fetch.c:220
 msgid "run 'maintenance --auto' after fetching"
 msgstr "führe 'maintenance --auto' nach \"fetch\" aus"
 
-#: builtin/fetch.c:218 builtin/pull.c:247
+#: builtin/fetch.c:222 builtin/pull.c:247
 msgid "check for forced-updates on all updated branches"
 msgstr "Prüfe auf erzwungene Aktualisierungen in allen aktualisierten Branches"
 
-#: builtin/fetch.c:220
+#: builtin/fetch.c:224
 msgid "write the commit-graph after fetching"
 msgstr "Schreibe den Commit-Graph nach \"fetch\""
 
-#: builtin/fetch.c:222
+#: builtin/fetch.c:226
 msgid "accept refspecs from stdin"
 msgstr "akzeptiere Refspecs von der Standard-Eingabe"
 
-#: builtin/fetch.c:592
+#: builtin/fetch.c:618
 msgid "couldn't find remote ref HEAD"
 msgstr "konnte Remote-Referenz von HEAD nicht finden"
 
-#: builtin/fetch.c:766
-#, c-format
-msgid "configuration fetch.output contains invalid value %s"
-msgstr "Konfiguration fetch.output enthält ungültigen Wert %s"
-
-#: builtin/fetch.c:867
+#: builtin/fetch.c:893
 #, c-format
 msgid "object %s not found"
 msgstr "Objekt %s nicht gefunden"
 
-#: builtin/fetch.c:871
+#: builtin/fetch.c:897
 msgid "[up to date]"
 msgstr "[aktuell]"
 
-#: builtin/fetch.c:883 builtin/fetch.c:901 builtin/fetch.c:973
+#: builtin/fetch.c:909 builtin/fetch.c:927 builtin/fetch.c:999
 msgid "[rejected]"
 msgstr "[zurückgewiesen]"
 
-#: builtin/fetch.c:885
+#: builtin/fetch.c:911
 msgid "can't fetch in current branch"
 msgstr "kann \"fetch\" im aktuellen Branch nicht ausführen"
 
-#: builtin/fetch.c:886
+#: builtin/fetch.c:912
 msgid "checked out in another worktree"
 msgstr "in einem anderen Arbeitsverzeichnis ausgecheckt"
 
-#: builtin/fetch.c:896
+#: builtin/fetch.c:922
 msgid "[tag update]"
 msgstr "[Tag Aktualisierung]"
 
-#: builtin/fetch.c:897 builtin/fetch.c:934 builtin/fetch.c:956
-#: builtin/fetch.c:968
+#: builtin/fetch.c:923 builtin/fetch.c:960 builtin/fetch.c:982
+#: builtin/fetch.c:994
 msgid "unable to update local ref"
 msgstr "kann lokale Referenz nicht aktualisieren"
 
-#: builtin/fetch.c:901
+#: builtin/fetch.c:927
 msgid "would clobber existing tag"
 msgstr "würde bestehende Tags verändern"
 
-#: builtin/fetch.c:923
+#: builtin/fetch.c:949
 msgid "[new tag]"
 msgstr "[neues Tag]"
 
-#: builtin/fetch.c:926
+#: builtin/fetch.c:952
 msgid "[new branch]"
 msgstr "[neuer Branch]"
 
-#: builtin/fetch.c:929
+#: builtin/fetch.c:955
 msgid "[new ref]"
 msgstr "[neue Referenz]"
 
-#: builtin/fetch.c:968
+#: builtin/fetch.c:994
 msgid "forced update"
 msgstr "Aktualisierung erzwungen"
 
-#: builtin/fetch.c:973
+#: builtin/fetch.c:999
 msgid "non-fast-forward"
 msgstr "kein Vorspulen"
 
-#: builtin/fetch.c:1076
+#: builtin/fetch.c:1102
 msgid ""
 "fetch normally indicates which branches had a forced update,\n"
 "but that check has been disabled; to re-enable, use '--show-forced-updates'\n"
@@ -15622,7 +15983,7 @@ msgstr ""
 "aktivieren, nutzen Sie die Option '--show-forced-updates' oder führen\n"
 "Sie 'git config fetch.showForcedUpdates true' aus."
 
-#: builtin/fetch.c:1080
+#: builtin/fetch.c:1106
 #, c-format
 msgid ""
 "it took %.2f seconds to check forced updates; you can use\n"
@@ -15635,24 +15996,24 @@ msgstr ""
 "'git config fetch.showForcedUpdates false' ausführen, um diese Überprüfung\n"
 "zu umgehen.\n"
 
-#: builtin/fetch.c:1112
+#: builtin/fetch.c:1136
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s hat nicht alle erforderlichen Objekte gesendet\n"
 
-#: builtin/fetch.c:1141
+#: builtin/fetch.c:1156
 #, c-format
 msgid "rejected %s because shallow roots are not allowed to be updated"
 msgstr ""
 "%s zurückgewiesen, da Root-Commits von Repositories mit unvollständiger\n"
 "Historie (shallow) nicht aktualisiert werden dürfen."
 
-#: builtin/fetch.c:1231 builtin/fetch.c:1379
+#: builtin/fetch.c:1259 builtin/fetch.c:1418
 #, c-format
 msgid "From %.*s\n"
 msgstr "Von %.*s\n"
 
-#: builtin/fetch.c:1252
+#: builtin/fetch.c:1269
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -15661,49 +16022,49 @@ msgstr ""
 "Einige lokale Referenzen konnten nicht aktualisiert werden; versuchen Sie\n"
 "'git remote prune %s', um jeden älteren, widersprüchlichen Branch zu löschen."
 
-#: builtin/fetch.c:1349
+#: builtin/fetch.c:1377
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s wird unreferenziert)"
 
-#: builtin/fetch.c:1350
+#: builtin/fetch.c:1378
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s wurde unreferenziert)"
 
-#: builtin/fetch.c:1382
+#: builtin/fetch.c:1421
 msgid "[deleted]"
 msgstr "[gelöscht]"
 
-#: builtin/fetch.c:1383 builtin/remote.c:1128
+#: builtin/fetch.c:1422 builtin/remote.c:1153
 msgid "(none)"
 msgstr "(nichts)"
 
-#: builtin/fetch.c:1405
+#: builtin/fetch.c:1446
 #, c-format
 msgid "refusing to fetch into branch '%s' checked out at '%s'"
 msgstr "Anfordern in Branch '%s' verweigert, ausgecheckt in '%s'"
 
-#: builtin/fetch.c:1425
+#: builtin/fetch.c:1466
 #, c-format
 msgid "option \"%s\" value \"%s\" is not valid for %s"
 msgstr "Option \"%s\" Wert \"%s\" ist nicht gültig für %s"
 
-#: builtin/fetch.c:1428
+#: builtin/fetch.c:1469
 #, c-format
 msgid "option \"%s\" is ignored for %s\n"
 msgstr "Option \"%s\" wird ignoriert für %s\n"
 
-#: builtin/fetch.c:1455
+#: builtin/fetch.c:1496
 #, c-format
 msgid "the object %s does not exist"
 msgstr "das Objekt %s ist nicht vorhanden"
 
-#: builtin/fetch.c:1643
+#: builtin/fetch.c:1748
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr "mehrere Branches erkannt, inkompatibel mit --set-upstream"
 
-#: builtin/fetch.c:1655
+#: builtin/fetch.c:1760
 #, c-format
 msgid ""
 "could not set upstream of HEAD to '%s' from '%s' when it does not point to "
@@ -15712,19 +16073,19 @@ msgstr ""
 "konnte keinen Upstream-Branch von HEAD auf '%s' von '%s' setzen, da dieser "
 "auf keinen Branch zeigt."
 
-#: builtin/fetch.c:1668
+#: builtin/fetch.c:1773
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr "setze keinen Upstream für einen entfernten Remote-Tracking-Branch"
 
-#: builtin/fetch.c:1670
+#: builtin/fetch.c:1775
 msgid "not setting upstream for a remote tag"
 msgstr "setze keinen Upstream für einen Tag eines Remote-Repositories"
 
-#: builtin/fetch.c:1672
+#: builtin/fetch.c:1777
 msgid "unknown branch type"
 msgstr "unbekannter Branch-Typ"
 
-#: builtin/fetch.c:1674
+#: builtin/fetch.c:1779
 msgid ""
 "no source branch found;\n"
 "you need to specify exactly one branch with the --set-upstream option"
@@ -15732,22 +16093,22 @@ msgstr ""
 "kein Quell-Branch gefunden;\n"
 "Sie müssen bei der Option --set-upstream genau einen Branch angeben"
 
-#: builtin/fetch.c:1804 builtin/fetch.c:1867
+#: builtin/fetch.c:1904 builtin/fetch.c:1967
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Fordere an von %s\n"
 
-#: builtin/fetch.c:1814 builtin/fetch.c:1869
+#: builtin/fetch.c:1914 builtin/fetch.c:1969
 #, c-format
 msgid "could not fetch %s"
 msgstr "konnte %s nicht anfordern"
 
-#: builtin/fetch.c:1826
+#: builtin/fetch.c:1926
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr "Konnte '%s' nicht anfordern (Exit-Code: %d)\n"
 
-#: builtin/fetch.c:1930
+#: builtin/fetch.c:2030
 msgid ""
 "no remote repository specified; please specify either a URL or a\n"
 "remote name from which new revisions should be fetched"
@@ -15756,52 +16117,52 @@ msgstr ""
 "oder den Namen des Remote-Repositories an, von welchem neue\n"
 "Commits angefordert werden sollen"
 
-#: builtin/fetch.c:1966
+#: builtin/fetch.c:2066
 msgid "you need to specify a tag name"
 msgstr "Sie müssen den Namen des Tags angeben"
 
-#: builtin/fetch.c:2032
-msgid "--negotiate-only needs one or more --negotiate-tip=*"
-msgstr "--negotiate-only benötigt einen oder mehrere --negotiate-tip=*"
+#: builtin/fetch.c:2156
+msgid "--negotiate-only needs one or more --negotiation-tip=*"
+msgstr "--negotiate-only benötigt einen oder mehrere --negotiation-tip=*"
 
-#: builtin/fetch.c:2036
+#: builtin/fetch.c:2160
 msgid "negative depth in --deepen is not supported"
 msgstr "negative Tiefe wird von --deepen nicht unterstützt"
 
-#: builtin/fetch.c:2045
+#: builtin/fetch.c:2169
 msgid "--unshallow on a complete repository does not make sense"
 msgstr ""
 "--unshallow kann nicht in einem Repository mit vollständiger Historie "
 "verwendet werden"
 
-#: builtin/fetch.c:2062
+#: builtin/fetch.c:2186
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all akzeptiert kein Repository als Argument"
 
-#: builtin/fetch.c:2064
+#: builtin/fetch.c:2188
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all kann nicht mit Refspecs verwendet werden"
 
-#: builtin/fetch.c:2073
+#: builtin/fetch.c:2197
 #, c-format
 msgid "no such remote or remote group: %s"
 msgstr "Remote-Repository (einzeln oder Gruppe) nicht gefunden: %s"
 
-#: builtin/fetch.c:2081
+#: builtin/fetch.c:2205
 msgid "fetching a group and specifying refspecs does not make sense"
 msgstr ""
 "das Abrufen einer Gruppe und die Angabe einer Pfadspezifikation ist nicht "
 "sinnvoll"
 
-#: builtin/fetch.c:2097
+#: builtin/fetch.c:2221
 msgid "must supply remote when using --negotiate-only"
 msgstr "Remote wird benötigt, wenn --negotiate-only benutzt wird"
 
-#: builtin/fetch.c:2102
+#: builtin/fetch.c:2226
 msgid "protocol does not support --negotiate-only, exiting"
 msgstr "Protokoll unterstützt --negotiate-only nicht, beende"
 
-#: builtin/fetch.c:2121
+#: builtin/fetch.c:2246
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -15809,13 +16170,13 @@ msgstr ""
 "--filter kann nur mit den Remote-Repositories verwendet werden,\n"
 "die in extensions.partialclone konfiguriert sind"
 
-#: builtin/fetch.c:2125
+#: builtin/fetch.c:2250
 msgid "--atomic can only be used when fetching from one remote"
 msgstr ""
 "--atomic kann nur verwendet werden, wenn nur von einem Remote-Repository "
 "abgefragt wird"
 
-#: builtin/fetch.c:2129
+#: builtin/fetch.c:2254
 msgid "--stdin can only be used when fetching from one remote"
 msgstr ""
 "--stdin kann nur verwendet werden, wenn nur von einem Remote-Repository "
@@ -15888,7 +16249,7 @@ msgstr "Platzhalter als Tcl-String formatieren"
 msgid "show only <n> matched refs"
 msgstr "nur <n> passende Referenzen anzeigen"
 
-#: builtin/for-each-ref.c:42 builtin/tag.c:481
+#: builtin/for-each-ref.c:42 builtin/tag.c:482
 msgid "respect format colors"
 msgstr "Formatfarben beachten"
 
@@ -16082,7 +16443,7 @@ msgstr "Prüfe Objekt-Verzeichnisse"
 msgid "Checking %s link"
 msgstr "Prüfe %s Verknüpfung"
 
-#: builtin/fsck.c:710 builtin/index-pack.c:859
+#: builtin/fsck.c:710 builtin/index-pack.c:862
 #, c-format
 msgid "invalid %s"
 msgstr "Ungültiger Objekt-Typ %s"
@@ -16151,7 +16512,7 @@ msgstr "ebenso Pakete und alternative Objekte betrachten"
 msgid "check only connectivity"
 msgstr "nur Konnektivität prüfen"
 
-#: builtin/fsck.c:798 builtin/mktag.c:76
+#: builtin/fsck.c:798 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr "genauere Prüfung aktivieren"
 
@@ -16181,6 +16542,118 @@ msgstr "%s: Objekt nicht vorhanden"
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "Ungültiger Parameter: SHA-1 erwartet, '%s' bekommen"
 
+#: builtin/fsmonitor--daemon.c:13
+msgid "git fsmonitor--daemon start [<options>]"
+msgstr "git fsmonitor--daemon start [<Optionen>]"
+
+#: builtin/fsmonitor--daemon.c:14
+msgid "git fsmonitor--daemon run [<options>]"
+msgstr "git fsmonitor--daemon run [<Optionen>]"
+
+#: builtin/fsmonitor--daemon.c:15
+msgid "git fsmonitor--daemon stop"
+msgstr "git fsmonitor--daemon stop"
+
+#: builtin/fsmonitor--daemon.c:16
+msgid "git fsmonitor--daemon status"
+msgstr "git fsmonitor--daemon status"
+
+#: builtin/fsmonitor--daemon.c:38 builtin/fsmonitor--daemon.c:47
+#, c-format
+msgid "value of '%s' out of range: %d"
+msgstr "Wert von '%s' außerhalb des Bereichs: %d"
+
+#: builtin/fsmonitor--daemon.c:57
+#, c-format
+msgid "value of '%s' not bool or int: %d"
+msgstr "Wert von '%s' ist nicht bool oder int: %d"
+
+#: builtin/fsmonitor--daemon.c:99
+#, c-format
+msgid "fsmonitor-daemon is watching '%s'\n"
+msgstr "fsmonitor-daemon beobachtet '%s'\n"
+
+#: builtin/fsmonitor--daemon.c:104
+#, c-format
+msgid "fsmonitor-daemon is not watching '%s'\n"
+msgstr "fsmonitor-daemon beobachtet '%s nicht'\n"
+
+#: builtin/fsmonitor--daemon.c:170
+#, c-format
+msgid "could not create fsmonitor cookie '%s'"
+msgstr "konnte fsmonitor Cookie '%s' nicht erstellen"
+
+#: builtin/fsmonitor--daemon.c:753
+#, c-format
+msgid "fsmonitor: cookie_result '%d' != SEEN"
+msgstr "fsmonitor: cookie_result '%d' != SEEN"
+
+#: builtin/fsmonitor--daemon.c:1187
+#, c-format
+msgid "could not start IPC thread pool on '%s'"
+msgstr "konnte IPC-Threadpool nicht unter '%s' starten"
+
+#: builtin/fsmonitor--daemon.c:1199
+msgid "could not start fsmonitor listener thread"
+msgstr "konnte Thread für fsmonitor listener nicht starten"
+
+#: builtin/fsmonitor--daemon.c:1297
+msgid "could not initialize listener thread"
+msgstr "konnte listener Thread nicht initialisieren"
+
+#: builtin/fsmonitor--daemon.c:1328 builtin/fsmonitor--daemon.c:1383
+#, c-format
+msgid "fsmonitor--daemon is already running '%s'"
+msgstr "fsmonitor--daemon läuft bereits '%s'"
+
+#: builtin/fsmonitor--daemon.c:1332
+#, c-format
+msgid "running fsmonitor-daemon in '%s'\n"
+msgstr "fsmonitor-daemon wird in '%s' ausgeführt\n"
+
+#: builtin/fsmonitor--daemon.c:1387
+#, c-format
+msgid "starting fsmonitor-daemon in '%s'\n"
+msgstr "starte fsmonitor-daemon unter '%s'\n"
+
+#: builtin/fsmonitor--daemon.c:1413
+msgid "daemon failed to start"
+msgstr "Fehler beim Starten des Daemons"
+
+#: builtin/fsmonitor--daemon.c:1416
+msgid "daemon not online yet"
+msgstr "Daemon ist noch nicht online"
+
+#: builtin/fsmonitor--daemon.c:1419
+msgid "daemon terminated"
+msgstr "Daemon beendet"
+
+#: builtin/fsmonitor--daemon.c:1429
+msgid "detach from console"
+msgstr "von der Konsole loslösen"
+
+#: builtin/fsmonitor--daemon.c:1432
+msgid "use <n> ipc worker threads"
+msgstr "<n> IPC-Arbeitsthreads benutzen"
+
+#: builtin/fsmonitor--daemon.c:1435
+msgid "max seconds to wait for background daemon startup"
+msgstr "maximale Sekunden, um auf Starten des Hintergrund-Daemons zu warten"
+
+#: builtin/fsmonitor--daemon.c:1449
+#, c-format
+msgid "invalid 'ipc-threads' value (%d)"
+msgstr "ungültiger 'ipc-threads' Wert (%d)"
+
+#: builtin/fsmonitor--daemon.c:1464
+#, c-format
+msgid "Unhandled subcommand '%s'"
+msgstr "Nicht behandelter Unterbefehl '%s'"
+
+#: builtin/fsmonitor--daemon.c:1477
+msgid "fsmonitor--daemon not supported on this platform"
+msgstr "fsmonitor--daemon wird auf dieser Plattform nicht unterstützt"
+
 #: builtin/gc.c:39
 msgid "git gc [<options>]"
 msgstr "git gc [<Optionen>]"
@@ -16315,7 +16788,7 @@ msgstr "konnte 'git pack-objects' Prozess nicht beenden"
 
 #: builtin/gc.c:1090
 msgid "failed to write multi-pack-index"
-msgstr "Fehler beim Schreiben des multi-pack-index"
+msgstr "Fehler beim Schreiben des Multi-Pack-Index"
 
 #: builtin/gc.c:1106
 msgid "'git multi-pack-index expire' failed"
@@ -16440,8 +16913,8 @@ msgstr "Fehler beim Starten von systemctl"
 msgid "failed to run systemctl"
 msgstr "Fehler beim Ausführen von systemctl"
 
-#: builtin/gc.c:2210 builtin/gc.c:2215 builtin/worktree.c:62
-#: builtin/worktree.c:944
+#: builtin/gc.c:2210 builtin/gc.c:2215 builtin/worktree.c:63
+#: builtin/worktree.c:1024
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "Fehler beim Löschen von '%s'"
@@ -16489,16 +16962,16 @@ msgstr "git maintenance <Unterbefehl> [<Optionen>]"
 msgid "invalid subcommand: %s"
 msgstr "ungültiger Unterbefehl: %s"
 
-#: builtin/grep.c:30
+#: builtin/grep.c:32
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<Optionen>] [-e] <Muster> [<Commit>...] [[--] <Pfad>...]"
 
-#: builtin/grep.c:239
+#: builtin/grep.c:241
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep: Fehler beim Erzeugen eines Thread: %s"
 
-#: builtin/grep.c:293
+#: builtin/grep.c:295
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "ungültige Anzahl von Threads (%d) für %s angegeben"
@@ -16507,266 +16980,258 @@ msgstr "ungültige Anzahl von Threads (%d) für %s angegeben"
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:301 builtin/index-pack.c:1582 builtin/index-pack.c:1785
-#: builtin/pack-objects.c:3142
+#: builtin/grep.c:303 builtin/index-pack.c:1587 builtin/index-pack.c:1791
+#: builtin/pack-objects.c:3150
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "keine Unterstützung von Threads, '%s' wird ignoriert"
 
-#: builtin/grep.c:488 builtin/grep.c:617 builtin/grep.c:657
+#: builtin/grep.c:490 builtin/grep.c:619 builtin/grep.c:659
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "konnte \"Tree\"-Objekt (%s) nicht lesen"
 
-#: builtin/grep.c:672
+#: builtin/grep.c:674
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "kann \"grep\" nicht mit Objekten des Typs %s durchführen"
 
-#: builtin/grep.c:752
+#: builtin/grep.c:754
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "Schalter `%c' erwartet einen numerischen Wert"
 
-#: builtin/grep.c:851
+#: builtin/grep.c:852
 msgid "search in index instead of in the work tree"
 msgstr "im Index statt im Arbeitsverzeichnis suchen"
 
-#: builtin/grep.c:853
+#: builtin/grep.c:854
 msgid "find in contents not managed by git"
 msgstr "auch in Inhalten finden, die nicht von Git verwaltet werden"
 
-#: builtin/grep.c:855
+#: builtin/grep.c:856
 msgid "search in both tracked and untracked files"
 msgstr "in versionierten und unversionierten Dateien suchen"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:858
 msgid "ignore files specified via '.gitignore'"
 msgstr "Dateien, die über '.gitignore' angegeben sind, ignorieren"
 
-#: builtin/grep.c:859
+#: builtin/grep.c:860
 msgid "recursively search in each submodule"
 msgstr "rekursive Suche in jedem Submodul"
 
-#: builtin/grep.c:862
+#: builtin/grep.c:863
 msgid "show non-matching lines"
 msgstr "Zeilen ohne Übereinstimmungen anzeigen"
 
-#: builtin/grep.c:864
+#: builtin/grep.c:865
 msgid "case insensitive matching"
 msgstr "Übereinstimmungen unabhängig von Groß- und Kleinschreibung finden"
 
-#: builtin/grep.c:866
+#: builtin/grep.c:867
 msgid "match patterns only at word boundaries"
 msgstr "nur ganze Wörter suchen"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:869
 msgid "process binary files as text"
 msgstr "binäre Dateien als Text verarbeiten"
 
-#: builtin/grep.c:870
+#: builtin/grep.c:871
 msgid "don't match patterns in binary files"
 msgstr "keine Muster in Binärdateien finden"
 
-#: builtin/grep.c:873
+#: builtin/grep.c:874
 msgid "process binary files with textconv filters"
 msgstr "binäre Dateien mit \"textconv\"-Filtern verarbeiten"
 
-#: builtin/grep.c:875
+#: builtin/grep.c:876
 msgid "search in subdirectories (default)"
 msgstr "in Unterverzeichnissen suchen (Standard)"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:878
 msgid "descend at most <depth> levels"
 msgstr "höchstens <Tiefe> Ebenen durchlaufen"
 
-#: builtin/grep.c:881
+#: builtin/grep.c:882
 msgid "use extended POSIX regular expressions"
 msgstr "erweiterte reguläre Ausdrücke aus POSIX verwenden"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:885
 msgid "use basic POSIX regular expressions (default)"
 msgstr "grundlegende reguläre Ausdrücke aus POSIX verwenden (Standard)"
 
-#: builtin/grep.c:887
+#: builtin/grep.c:888
 msgid "interpret patterns as fixed strings"
 msgstr "Muster als feste Zeichenketten interpretieren"
 
-#: builtin/grep.c:890
+#: builtin/grep.c:891
 msgid "use Perl-compatible regular expressions"
 msgstr "Perl-kompatible reguläre Ausdrücke verwenden"
 
-#: builtin/grep.c:893
+#: builtin/grep.c:894
 msgid "show line numbers"
 msgstr "Zeilennummern anzeigen"
 
-#: builtin/grep.c:894
+#: builtin/grep.c:895
 msgid "show column number of first match"
 msgstr "Nummer der Spalte des ersten Treffers anzeigen"
 
-#: builtin/grep.c:895
+#: builtin/grep.c:896
 msgid "don't show filenames"
 msgstr "keine Dateinamen anzeigen"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:897
 msgid "show filenames"
 msgstr "Dateinamen anzeigen"
 
-#: builtin/grep.c:898
+#: builtin/grep.c:899
 msgid "show filenames relative to top directory"
 msgstr "Dateinamen relativ zum Projektverzeichnis anzeigen"
 
-#: builtin/grep.c:900
+#: builtin/grep.c:901
 msgid "show only filenames instead of matching lines"
 msgstr "nur Dateinamen anzeigen anstatt übereinstimmende Zeilen"
 
-#: builtin/grep.c:902
+#: builtin/grep.c:903
 msgid "synonym for --files-with-matches"
 msgstr "Synonym für --files-with-matches"
 
-#: builtin/grep.c:905
+#: builtin/grep.c:906
 msgid "show only the names of files without match"
 msgstr "nur die Dateinamen ohne Übereinstimmungen anzeigen"
 
-#: builtin/grep.c:907
+#: builtin/grep.c:908
 msgid "print NUL after filenames"
 msgstr "NUL-Zeichen nach Dateinamen ausgeben"
 
-#: builtin/grep.c:910
+#: builtin/grep.c:911
 msgid "show only matching parts of a line"
 msgstr "nur übereinstimmende Teile der Zeile anzeigen"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:913
 msgid "show the number of matches instead of matching lines"
 msgstr "anstatt der Zeilen, die Anzahl der übereinstimmenden Zeilen anzeigen"
 
-#: builtin/grep.c:913
+#: builtin/grep.c:914
 msgid "highlight matches"
 msgstr "Übereinstimmungen hervorheben"
 
-#: builtin/grep.c:915
+#: builtin/grep.c:916
 msgid "print empty line between matches from different files"
 msgstr ""
 "eine Leerzeile zwischen Übereinstimmungen in verschiedenen Dateien ausgeben"
 
-#: builtin/grep.c:917
+#: builtin/grep.c:918
 msgid "show filename only once above matches from same file"
 msgstr ""
 "den Dateinamen nur einmal oberhalb der Übereinstimmungen aus dieser Datei "
 "anzeigen"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:921
 msgid "show <n> context lines before and after matches"
 msgstr "<n> Zeilen vor und nach den Übereinstimmungen anzeigen"
 
-#: builtin/grep.c:923
+#: builtin/grep.c:924
 msgid "show <n> context lines before matches"
 msgstr "<n> Zeilen vor den Übereinstimmungen anzeigen"
 
-#: builtin/grep.c:925
+#: builtin/grep.c:926
 msgid "show <n> context lines after matches"
 msgstr "<n> Zeilen nach den Übereinstimmungen anzeigen"
 
-#: builtin/grep.c:927
+#: builtin/grep.c:928
 msgid "use <n> worker threads"
 msgstr "<n> Threads benutzen"
 
-#: builtin/grep.c:928
+#: builtin/grep.c:929
 msgid "shortcut for -C NUM"
 msgstr "Kurzform für -C NUM"
 
-#: builtin/grep.c:931
+#: builtin/grep.c:932
 msgid "show a line with the function name before matches"
 msgstr "eine Zeile mit dem Funktionsnamen vor Übereinstimmungen anzeigen"
 
-#: builtin/grep.c:933
+#: builtin/grep.c:934
 msgid "show the surrounding function"
 msgstr "die umgebende Funktion anzeigen"
 
-#: builtin/grep.c:936
+#: builtin/grep.c:937
 msgid "read patterns from file"
 msgstr "Muster von einer Datei lesen"
 
-#: builtin/grep.c:938
+#: builtin/grep.c:939
 msgid "match <pattern>"
 msgstr "<Muster> finden"
 
-#: builtin/grep.c:940
+#: builtin/grep.c:941
 msgid "combine patterns specified with -e"
 msgstr "Muster kombinieren, die mit -e angegeben wurden"
 
-#: builtin/grep.c:952
+#: builtin/grep.c:953
 msgid "indicate hit with exit status without output"
 msgstr "Übereinstimmungen nur durch Beendigungsstatus anzeigen"
 
-#: builtin/grep.c:954
+#: builtin/grep.c:955
 msgid "show only matches from files that match all patterns"
 msgstr ""
 "nur Übereinstimmungen von Dateien anzeigen, die allen Mustern entsprechen"
 
-#: builtin/grep.c:957
+#: builtin/grep.c:958
 msgid "pager"
 msgstr "Anzeigeprogramm"
 
-#: builtin/grep.c:957
+#: builtin/grep.c:958
 msgid "show matching files in the pager"
 msgstr "Dateien mit Übereinstimmungen im Anzeigeprogramm anzeigen"
 
-#: builtin/grep.c:961
+#: builtin/grep.c:962
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "den Aufruf von grep(1) erlauben (von dieser Programmversion ignoriert)"
 
-#: builtin/grep.c:1027
+#: builtin/grep.c:1028
 msgid "no pattern given"
 msgstr "Kein Muster angegeben."
 
-#: builtin/grep.c:1063
+#: builtin/grep.c:1064
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr "--no-index oder --untracked können nicht mit Commits verwendet werden"
 
-#: builtin/grep.c:1071
+#: builtin/grep.c:1072
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "Konnte Commit nicht auflösen: %s"
 
-#: builtin/grep.c:1101
+#: builtin/grep.c:1102
 msgid "--untracked not supported with --recurse-submodules"
 msgstr "--untracked zusammen mit --recurse-submodules wird nicht unterstützt"
 
-#: builtin/grep.c:1105
+#: builtin/grep.c:1106
 msgid "invalid option combination, ignoring --threads"
 msgstr "Ungültige Kombination von Optionen, --threads wird ignoriert."
 
-#: builtin/grep.c:1108 builtin/pack-objects.c:4059
+#: builtin/grep.c:1109 builtin/pack-objects.c:4084
 msgid "no threads support, ignoring --threads"
 msgstr "Keine Unterstützung für Threads, --threads wird ignoriert."
 
-#: builtin/grep.c:1111 builtin/index-pack.c:1579 builtin/pack-objects.c:3139
+#: builtin/grep.c:1112 builtin/index-pack.c:1584 builtin/pack-objects.c:3147
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "ungültige Anzahl von Threads angegeben (%d)"
 
-#: builtin/grep.c:1145
+#: builtin/grep.c:1146
 msgid "--open-files-in-pager only works on the worktree"
 msgstr ""
 "--open-files-in-pager kann nur innerhalb des Arbeitsverzeichnisses verwendet "
 "werden"
 
-#: builtin/grep.c:1171
-msgid "--cached or --untracked cannot be used with --no-index"
-msgstr "--cached und --untracked können nicht mit --no-index verwendet werden"
-
-#: builtin/grep.c:1174
-msgid "--untracked cannot be used with --cached"
-msgstr "--untracked kann nicht mit --cached verwendet werden"
-
-#: builtin/grep.c:1180
+#: builtin/grep.c:1179
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr ""
 "--[no-]exclude-standard kann nicht mit versionierten Inhalten verwendet "
 "werden"
 
-#: builtin/grep.c:1188
+#: builtin/grep.c:1187
 msgid "both --cached and trees are given"
 msgstr "--cached und \"Tree\"-Objekte angegeben"
 
@@ -16778,109 +17243,101 @@ msgstr ""
 "git hash-object [-t <Art>] [-w] [--path=<Datei> | --no-filters] [--stdin] "
 "[--] <Datei>..."
 
-#: builtin/hash-object.c:84
-msgid "git hash-object  --stdin-paths"
-msgstr "git hash-object  --stdin-paths"
-
-#: builtin/hash-object.c:96
+#: builtin/hash-object.c:97
 msgid "object type"
 msgstr "Art des Objektes"
 
-#: builtin/hash-object.c:97
+#: builtin/hash-object.c:98
 msgid "write the object into the object database"
 msgstr "das Objekt in die Objektdatenbank schreiben"
 
-#: builtin/hash-object.c:99
+#: builtin/hash-object.c:100
 msgid "read the object from stdin"
 msgstr "das Objekt von der Standard-Eingabe lesen"
 
-#: builtin/hash-object.c:101
+#: builtin/hash-object.c:102
 msgid "store file as is without filters"
 msgstr "Datei wie sie ist speichern, ohne Filter"
 
-#: builtin/hash-object.c:102
+#: builtin/hash-object.c:103
 msgid ""
 "just hash any random garbage to create corrupt objects for debugging Git"
 msgstr ""
 "Hash über zufällige Daten, zur Erzeugung von beschädigten Objekten zur\n"
 "Fehlersuche in Git, erzeugen"
 
-#: builtin/hash-object.c:103
+#: builtin/hash-object.c:104
 msgid "process file as it were from this path"
 msgstr "Datei verarbeiten, als ob sie von diesem Pfad wäre"
 
-#: builtin/help.c:55
+#: builtin/help.c:57
 msgid "print all available commands"
 msgstr "alle vorhandenen Befehle anzeigen"
 
-#: builtin/help.c:57
+#: builtin/help.c:60
+msgid "show external commands in --all"
+msgstr "zeige externe Befehle bei --all"
+
+#: builtin/help.c:61
+msgid "show aliases in --all"
+msgstr "zeige Aliase bei --all"
+
+#: builtin/help.c:62
 msgid "exclude guides"
 msgstr "Anleitungen ausschließen"
 
-#: builtin/help.c:58
+#: builtin/help.c:63
 msgid "show man page"
 msgstr "Handbuch anzeigen"
 
-#: builtin/help.c:59
+#: builtin/help.c:64
 msgid "show manual in web browser"
 msgstr "Handbuch in einem Webbrowser anzeigen"
 
-#: builtin/help.c:61
+#: builtin/help.c:66
 msgid "show info page"
 msgstr "Info-Seite anzeigen"
 
-#: builtin/help.c:63
+#: builtin/help.c:68
 msgid "print command description"
 msgstr "Beschreibung des Befehls ausgeben"
 
-#: builtin/help.c:65
+#: builtin/help.c:70
 msgid "print list of useful guides"
 msgstr "Liste von allgemein verwendeten Anleitungen anzeigen"
 
-#: builtin/help.c:67
+#: builtin/help.c:72
 msgid "print all configuration variable names"
 msgstr "alle Namen der Konfigurationsvariablen ausgeben"
 
-#: builtin/help.c:78
-msgid ""
-"git help [-a|--all] [--[no-]verbose]]\n"
-"         [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
-msgstr ""
-"git help [-a|--all] [--[no-]verbose]]\n"
-"         [[-i|--info] [-m|--man] [-w|--web]] [<Befehl>]"
-
-#: builtin/help.c:80
-msgid "git help [-g|--guides]"
-msgstr "git help [-g|--guides]"
+#: builtin/help.c:84
+msgid "git help [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
+msgstr "git help [[-i|--info] [-m|--man] [-w|--web]] [<Befehl>]"
 
-#: builtin/help.c:81
-msgid "git help [-c|--config]"
-msgstr "git help [-c|--config]"
-
-#: builtin/help.c:196
+#: builtin/help.c:201
 #, c-format
 msgid "unrecognized help format '%s'"
 msgstr "nicht erkanntes Hilfeformat: %s"
 
-#: builtin/help.c:222
+#: builtin/help.c:227
 msgid "Failed to start emacsclient."
 msgstr "Konnte emacsclient nicht starten."
 
-#: builtin/help.c:235
+#: builtin/help.c:240
 msgid "Failed to parse emacsclient version."
 msgstr "Konnte Version des emacsclient nicht parsen."
 
-#: builtin/help.c:243
+#: builtin/help.c:248
 #, c-format
 msgid "emacsclient version '%d' too old (< 22)."
 msgstr "Version des emacsclient '%d' ist zu alt (< 22)."
 
-#: builtin/help.c:261 builtin/help.c:283 builtin/help.c:293 builtin/help.c:301
+#: builtin/help.c:266 builtin/help.c:288 builtin/help.c:298 builtin/help.c:306
 #, c-format
 msgid "failed to exec '%s'"
 msgstr "Fehler beim Ausführen von '%s'"
 
-#: builtin/help.c:339
+#: builtin/help.c:344
 #, c-format
 msgid ""
 "'%s': path for unsupported man viewer.\n"
@@ -16889,7 +17346,7 @@ msgstr ""
 "'%s': Pfad für nicht unterstützten Handbuchbetrachter.\n"
 "Sie könnten stattdessen 'man.<Werkzeug>.cmd' benutzen."
 
-#: builtin/help.c:351
+#: builtin/help.c:356
 #, c-format
 msgid ""
 "'%s': cmd for supported man viewer.\n"
@@ -16898,42 +17355,58 @@ msgstr ""
 "'%s': Programm für unterstützten Handbuchbetrachter.\n"
 "Sie könnten stattdessen 'man.<Werkzeug>.path' benutzen."
 
-#: builtin/help.c:466
+#: builtin/help.c:471
 #, c-format
 msgid "'%s': unknown man viewer."
 msgstr "'%s': unbekannter Handbuch-Betrachter."
 
-#: builtin/help.c:482
+#: builtin/help.c:487
 msgid "no man viewer handled the request"
 msgstr "kein Handbuch-Betrachter konnte mit dieser Anfrage umgehen"
 
-#: builtin/help.c:489
+#: builtin/help.c:494
 msgid "no info viewer handled the request"
 msgstr "kein Informations-Betrachter konnte mit dieser Anfrage umgehen"
 
-#: builtin/help.c:550 builtin/help.c:561 git.c:348
+#: builtin/help.c:555 builtin/help.c:566 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "'%s' ist ein Alias für '%s'"
 
-#: builtin/help.c:564 git.c:380
+#: builtin/help.c:569 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr "Ungültiger alias.%s String: %s"
 
-#: builtin/help.c:580
-msgid "this option doesn't take any other arguments"
-msgstr "diese Option akzeptiert keine anderen Argumente"
+#: builtin/help.c:611
+#, c-format
+msgid "the '%s' option doesn't take any non-option arguments"
+msgstr "die Option '%s' akzeptiert keine anderen Nicht-Optionsargumente"
+
+#: builtin/help.c:631
+msgid ""
+"the '--no-[external-commands|aliases]' options can only be used with '--all'"
+msgstr ""
+"die Optionen '--no-[external-commands|aliases]' können nur mit '--all' "
+"verwendet werden"
 
-#: builtin/help.c:601 builtin/help.c:628
+#: builtin/help.c:643 builtin/help.c:671
 #, c-format
 msgid "usage: %s%s"
 msgstr "Verwendung: %s%s"
 
-#: builtin/help.c:623
+#: builtin/help.c:666
 msgid "'git help config' for more information"
 msgstr "'git help config' für weitere Informationen"
 
+#: builtin/hook.c:10
+msgid "git hook run [--ignore-missing] <hook-name> [-- <hook-args>]"
+msgstr "git hook run [--ignore-missing] <Hook-Name> [-- <Hook-Argumente>]"
+
+#: builtin/hook.c:30
+msgid "silently ignore missing requested <hook-name>"
+msgstr "fehlende Anforderung <Hook-Name> stillschweigend ignorieren"
+
 #: builtin/index-pack.c:221
 #, c-format
 msgid "object type mismatch at %s"
@@ -16968,245 +17441,246 @@ msgstr "Fehler beim Lesen der Eingabe"
 msgid "used more bytes than were available"
 msgstr "verwendete mehr Bytes als verfügbar waren"
 
-#: builtin/index-pack.c:324 builtin/pack-objects.c:756
+#: builtin/index-pack.c:324 builtin/pack-objects.c:754
 msgid "pack too large for current definition of off_t"
 msgstr "Paket ist zu groß für die aktuelle Definition von off_t"
 
-#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
-msgid "pack exceeds maximum allowed size"
-msgstr "Paket überschreitet die maximal erlaubte Größe"
+#: builtin/index-pack.c:329
+#, c-format
+msgid "pack exceeds maximum allowed size (%s)"
+msgstr "Paket überschreitet die maximal erlaubte Größe (%s)"
 
-#: builtin/index-pack.c:358
+#: builtin/index-pack.c:362
 msgid "pack signature mismatch"
 msgstr "Paketsignatur stimmt nicht überein"
 
-#: builtin/index-pack.c:360
+#: builtin/index-pack.c:364
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "Paketversion %<PRIu32> nicht unterstützt"
 
-#: builtin/index-pack.c:376
+#: builtin/index-pack.c:380
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "Paket hat ein ungültiges Objekt bei Versatz %<PRIuMAX>: %s"
 
-#: builtin/index-pack.c:482
+#: builtin/index-pack.c:485
 #, c-format
 msgid "inflate returned %d"
 msgstr "Dekomprimierung gab %d zurück"
 
-#: builtin/index-pack.c:531
+#: builtin/index-pack.c:534
 msgid "offset value overflow for delta base object"
 msgstr "Wert für Versatz bei Differenzobjekt übergelaufen"
 
-#: builtin/index-pack.c:539
+#: builtin/index-pack.c:542
 msgid "delta base offset is out of bound"
 msgstr ""
 "Wert für Versatz bei Differenzobjekt liegt außerhalb des gültigen Bereichs"
 
-#: builtin/index-pack.c:547
+#: builtin/index-pack.c:550
 #, c-format
 msgid "unknown object type %d"
 msgstr "Unbekannter Objekt-Typ %d"
 
-#: builtin/index-pack.c:578
+#: builtin/index-pack.c:581
 msgid "cannot pread pack file"
 msgstr "Kann Paketdatei %s nicht lesen"
 
-#: builtin/index-pack.c:580
+#: builtin/index-pack.c:583
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
 msgstr[0] "frühzeitiges Ende der Paketdatei, vermisse %<PRIuMAX> Byte"
 msgstr[1] "frühzeitiges Ende der Paketdatei, vermisse %<PRIuMAX> Bytes"
 
-#: builtin/index-pack.c:606
+#: builtin/index-pack.c:609
 msgid "serious inflate inconsistency"
 msgstr "ernsthafte Inkonsistenz nach Dekomprimierung"
 
-#: builtin/index-pack.c:751 builtin/index-pack.c:757 builtin/index-pack.c:781
-#: builtin/index-pack.c:820 builtin/index-pack.c:829
+#: builtin/index-pack.c:754 builtin/index-pack.c:760 builtin/index-pack.c:784
+#: builtin/index-pack.c:823 builtin/index-pack.c:832
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "SHA1 KOLLISION MIT %s GEFUNDEN !"
 
-#: builtin/index-pack.c:754 builtin/pack-objects.c:292
-#: builtin/pack-objects.c:352 builtin/pack-objects.c:458
+#: builtin/index-pack.c:757 builtin/pack-objects.c:290
+#: builtin/pack-objects.c:350 builtin/pack-objects.c:456
 #, c-format
 msgid "unable to read %s"
 msgstr "kann %s nicht lesen"
 
-#: builtin/index-pack.c:818
+#: builtin/index-pack.c:821
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "Kann existierende Informationen zu Objekt %s nicht lesen."
 
-#: builtin/index-pack.c:826
+#: builtin/index-pack.c:829
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "Kann existierendes Objekt %s nicht lesen."
 
-#: builtin/index-pack.c:840
+#: builtin/index-pack.c:843
 #, c-format
 msgid "invalid blob object %s"
 msgstr "ungültiges Blob-Objekt %s"
 
-#: builtin/index-pack.c:843 builtin/index-pack.c:862
+#: builtin/index-pack.c:846 builtin/index-pack.c:865
 msgid "fsck error in packed object"
 msgstr "fsck Fehler in gepacktem Objekt"
 
-#: builtin/index-pack.c:864
+#: builtin/index-pack.c:867
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr "Nicht alle Kind-Objekte von %s sind erreichbar"
 
-#: builtin/index-pack.c:925 builtin/index-pack.c:972
+#: builtin/index-pack.c:928 builtin/index-pack.c:975
 msgid "failed to apply delta"
 msgstr "Konnte Dateiunterschied nicht anwenden"
 
-#: builtin/index-pack.c:1156
+#: builtin/index-pack.c:1161
 msgid "Receiving objects"
 msgstr "Empfange Objekte"
 
-#: builtin/index-pack.c:1156
+#: builtin/index-pack.c:1161
 msgid "Indexing objects"
 msgstr "Indiziere Objekte"
 
-#: builtin/index-pack.c:1190
+#: builtin/index-pack.c:1195
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "Paket ist beschädigt (SHA1 unterschiedlich)"
 
-#: builtin/index-pack.c:1195
+#: builtin/index-pack.c:1200
 msgid "cannot fstat packfile"
 msgstr "kann Paketdatei nicht lesen"
 
-#: builtin/index-pack.c:1198
+#: builtin/index-pack.c:1203
 msgid "pack has junk at the end"
 msgstr "Paketende enthält nicht verwendbaren Inhalt"
 
-#: builtin/index-pack.c:1210
+#: builtin/index-pack.c:1215
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr "Fehler beim Ausführen von \"parse_pack_objects()\""
 
-#: builtin/index-pack.c:1233
+#: builtin/index-pack.c:1238
 msgid "Resolving deltas"
 msgstr "Löse Unterschiede auf"
 
-#: builtin/index-pack.c:1244 builtin/pack-objects.c:2905
+#: builtin/index-pack.c:1249 builtin/pack-objects.c:2913
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "kann Thread nicht erzeugen: %s"
 
-#: builtin/index-pack.c:1277
+#: builtin/index-pack.c:1282
 msgid "confusion beyond insanity"
 msgstr "Fehler beim Auflösen der Unterschiede"
 
-#: builtin/index-pack.c:1283
+#: builtin/index-pack.c:1288
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
 msgstr[0] "abgeschlossen mit %d lokalem Objekt"
 msgstr[1] "abgeschlossen mit %d lokalen Objekten"
 
-#: builtin/index-pack.c:1295
+#: builtin/index-pack.c:1300
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr "unerwartete Prüfsumme für %s (Festplattenfehler?)"
 
-#: builtin/index-pack.c:1299
+#: builtin/index-pack.c:1304
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] "Paket hat %d unaufgelösten Unterschied"
 msgstr[1] "Paket hat %d unaufgelöste Unterschiede"
 
-#: builtin/index-pack.c:1323
+#: builtin/index-pack.c:1328
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "Konnte angehängtes Objekt (%d) nicht komprimieren"
 
-#: builtin/index-pack.c:1419
+#: builtin/index-pack.c:1423
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "lokales Objekt %s ist beschädigt"
 
-#: builtin/index-pack.c:1440
+#: builtin/index-pack.c:1445
 #, c-format
 msgid "packfile name '%s' does not end with '.%s'"
 msgstr "Name der Paketdatei '%s' endet nicht mit '.%s'"
 
-#: builtin/index-pack.c:1464
+#: builtin/index-pack.c:1469
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "Kann %s Datei '%s' nicht schreiben."
 
-#: builtin/index-pack.c:1472
+#: builtin/index-pack.c:1477
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr "Kann eben geschriebene %s Datei '%s' nicht schließen."
 
-#: builtin/index-pack.c:1489
+#: builtin/index-pack.c:1494
 #, c-format
 msgid "unable to rename temporary '*.%s' file to '%s'"
 msgstr "konnte temporäre Datei '*.%s' nicht zu '%s' umbenennen"
 
-#: builtin/index-pack.c:1514
+#: builtin/index-pack.c:1519
 msgid "error while closing pack file"
 msgstr "Fehler beim Schließen der Paketdatei"
 
-#: builtin/index-pack.c:1573 builtin/pack-objects.c:3150
+#: builtin/index-pack.c:1578 builtin/pack-objects.c:3158
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "\"pack.indexversion=%<PRIu32>\" ist ungültig"
 
-#: builtin/index-pack.c:1643
+#: builtin/index-pack.c:1648
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "Kann existierende Paketdatei '%s' nicht öffnen"
 
-#: builtin/index-pack.c:1645
+#: builtin/index-pack.c:1650
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "Kann existierende Indexdatei für Paket '%s' nicht öffnen"
 
-#: builtin/index-pack.c:1693
+#: builtin/index-pack.c:1698
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] "kein Unterschied: %d Objekt"
 msgstr[1] "kein Unterschied: %d Objekte"
 
-#: builtin/index-pack.c:1700
+#: builtin/index-pack.c:1705
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
 msgstr[0] "Länge der Objekt-Liste = %d: %lu Objekt"
 msgstr[1] "Länge der Objekt-Liste = %d: %lu Objekte"
 
-#: builtin/index-pack.c:1742
+#: builtin/index-pack.c:1748
 msgid "Cannot come back to cwd"
 msgstr "Kann nicht zurück zum Arbeitsverzeichnis wechseln"
 
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1799
-#: builtin/index-pack.c:1819 builtin/index-pack.c:1823
+#: builtin/index-pack.c:1802 builtin/index-pack.c:1805
+#: builtin/index-pack.c:1825 builtin/index-pack.c:1829
 #, c-format
 msgid "bad %s"
 msgstr "%s ist ungültig"
 
-#: builtin/index-pack.c:1829 builtin/init-db.c:379 builtin/init-db.c:614
+#: builtin/index-pack.c:1835 builtin/init-db.c:379 builtin/init-db.c:614
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "unbekannter Hash-Algorithmus '%s'"
 
-#: builtin/index-pack.c:1850
+#: builtin/index-pack.c:1856
 msgid "--stdin requires a git repository"
 msgstr "--stdin erfordert ein Git-Repository"
 
-#: builtin/index-pack.c:1867
+#: builtin/index-pack.c:1873
 msgid "--verify with no packfile name given"
 msgstr "--verify wurde ohne Namen der Paketdatei angegeben"
 
-#: builtin/index-pack.c:1933 builtin/unpack-objects.c:584
+#: builtin/index-pack.c:1939 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "fsck Fehler beim Packen von Objekten"
 
@@ -17415,40 +17889,40 @@ msgstr "--trailer und --only-input können nicht gemeinsam verwendet werden"
 msgid "no input file given for in-place editing"
 msgstr "keine Datei zur direkten Bearbeitung angegeben"
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<Optionen>] [<Commitbereich>] [[--] <Pfad>...]"
 
-#: builtin/log.c:60
+#: builtin/log.c:61
 msgid "git show [<options>] <object>..."
 msgstr "git show [<Optionen>] <Objekt>..."
 
-#: builtin/log.c:113
+#: builtin/log.c:114
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "Ungültige Option für --decorate: %s"
 
-#: builtin/log.c:180
+#: builtin/log.c:181
 msgid "show source"
 msgstr "Quelle anzeigen"
 
-#: builtin/log.c:181
+#: builtin/log.c:182
 msgid "use mail map file"
 msgstr "\"mailmap\"-Datei verwenden"
 
-#: builtin/log.c:184
+#: builtin/log.c:185
 msgid "only decorate refs that match <pattern>"
 msgstr "\"decorate\" nur bei Referenzen anwenden, die <Muster> entsprechen"
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "do not decorate refs that match <pattern>"
 msgstr "\"decorate\" nicht bei Referenzen anwenden, die <Muster> entsprechen"
 
-#: builtin/log.c:187
+#: builtin/log.c:188
 msgid "decorate options"
 msgstr "decorate-Optionen"
 
-#: builtin/log.c:190
+#: builtin/log.c:191
 msgid ""
 "trace the evolution of line range <start>,<end> or function :<funcname> in "
 "<file>"
@@ -17456,90 +17930,94 @@ msgstr ""
 "Entwicklung der Zeilen vom Bereich <Start>,<Ende> oder Funktion :"
 "<Funktionsname> in <Datei> verfolgen"
 
-#: builtin/log.c:213
+#: builtin/log.c:214
 msgid "-L<range>:<file> cannot be used with pathspec"
 msgstr "-L<Bereich>:<Datei> kann nicht mit Pfadspezifikation verwendet werden"
 
-#: builtin/log.c:321
+#: builtin/log.c:322
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "letzte Ausgabe: %d %s\n"
 
-#: builtin/log.c:586
+#: builtin/log.c:429
+msgid "unable to create temporary object directory"
+msgstr "konnte temporäres Objektverzeichnis nicht erstellen"
+
+#: builtin/log.c:599
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: ungültige Datei"
 
-#: builtin/log.c:601 builtin/log.c:691
+#: builtin/log.c:614 builtin/log.c:706
 #, c-format
 msgid "could not read object %s"
 msgstr "Konnte Objekt %s nicht lesen."
 
-#: builtin/log.c:716
+#: builtin/log.c:731
 #, c-format
 msgid "unknown type: %d"
 msgstr "Unbekannter Typ: %d"
 
-#: builtin/log.c:861
+#: builtin/log.c:880
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr ""
 "%s: Ungültiger Modus für Erstellung des Deckblattes aus der Beschreibung"
 
-#: builtin/log.c:868
+#: builtin/log.c:887
 msgid "format.headers without value"
 msgstr "format.headers ohne Wert"
 
-#: builtin/log.c:997
+#: builtin/log.c:1016
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "Kann Patch-Datei %s nicht öffnen"
 
-#: builtin/log.c:1014
+#: builtin/log.c:1033
 msgid "need exactly one range"
 msgstr "Brauche genau einen Commit-Bereich."
 
-#: builtin/log.c:1024
+#: builtin/log.c:1043
 msgid "not a range"
 msgstr "Kein Commit-Bereich."
 
-#: builtin/log.c:1188
+#: builtin/log.c:1207
 msgid "cover letter needs email format"
 msgstr "Anschreiben benötigt E-Mail-Format"
 
-#: builtin/log.c:1194
+#: builtin/log.c:1213
 msgid "failed to create cover-letter file"
 msgstr "Fehler beim Erstellen der Datei für das Anschreiben."
 
-#: builtin/log.c:1281
+#: builtin/log.c:1300
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "ungültiges in-reply-to: %s"
 
-#: builtin/log.c:1308
+#: builtin/log.c:1327
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<Optionen>] [<seit> | <Commitbereich>]"
 
-#: builtin/log.c:1366
+#: builtin/log.c:1385
 msgid "two output directories?"
 msgstr "Zwei Ausgabeverzeichnisse?"
 
-#: builtin/log.c:1517 builtin/log.c:2344 builtin/log.c:2346 builtin/log.c:2358
+#: builtin/log.c:1536 builtin/log.c:2369 builtin/log.c:2371 builtin/log.c:2383
 #, c-format
 msgid "unknown commit %s"
 msgstr "Unbekannter Commit %s"
 
-#: builtin/log.c:1528 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1547 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "Konnte '%s' nicht als gültige Referenz auflösen."
 
-#: builtin/log.c:1537
+#: builtin/log.c:1556
 msgid "could not find exact merge base"
 msgstr "Konnte keine exakte Merge-Basis finden."
 
-#: builtin/log.c:1547
+#: builtin/log.c:1566
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -17550,278 +18028,282 @@ msgstr ""
 "'git branch --set-upstream-to', um einem Remote-Branch zu folgen.\n"
 "Oder geben Sie den Basis-Commit mit '--base=<Basis-Commit-Id>' manuell an."
 
-#: builtin/log.c:1570
+#: builtin/log.c:1589
 msgid "failed to find exact merge base"
 msgstr "Fehler beim Finden einer exakten Merge-Basis."
 
-#: builtin/log.c:1587
+#: builtin/log.c:1606
 msgid "base commit should be the ancestor of revision list"
 msgstr "Basis-Commit sollte der Vorgänger der Revisionsliste sein."
 
-#: builtin/log.c:1597
+#: builtin/log.c:1616
 msgid "base commit shouldn't be in revision list"
 msgstr "Basis-Commit sollte nicht in der Revisionsliste enthalten sein."
 
-#: builtin/log.c:1655
+#: builtin/log.c:1674
 msgid "cannot get patch id"
 msgstr "kann Patch-Id nicht lesen"
 
-#: builtin/log.c:1718
+#: builtin/log.c:1737
 msgid "failed to infer range-diff origin of current series"
 msgstr "Fehler beim Ableiten des range-diff Ursprungs der aktuellen Serie"
 
-#: builtin/log.c:1720
+#: builtin/log.c:1739
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr "nutze '%s' als range-diff Ursprung der aktuellen Serie"
 
-#: builtin/log.c:1764
+#: builtin/log.c:1783
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "[PATCH n/m] auch mit einzelnem Patch verwenden"
 
-#: builtin/log.c:1767
+#: builtin/log.c:1786
 msgid "use [PATCH] even with multiple patches"
 msgstr "[PATCH] auch mit mehreren Patches verwenden"
 
-#: builtin/log.c:1771
+#: builtin/log.c:1790
 msgid "print patches to standard out"
 msgstr "Ausgabe der Patches in Standard-Ausgabe"
 
-#: builtin/log.c:1773
+#: builtin/log.c:1792
 msgid "generate a cover letter"
 msgstr "ein Deckblatt erzeugen"
 
-#: builtin/log.c:1775
+#: builtin/log.c:1794
 msgid "use simple number sequence for output file names"
 msgstr "einfache Nummernfolge für die Namen der Ausgabedateien verwenden"
 
-#: builtin/log.c:1776
+#: builtin/log.c:1795
 msgid "sfx"
 msgstr "Dateiendung"
 
-#: builtin/log.c:1777
+#: builtin/log.c:1796
 msgid "use <sfx> instead of '.patch'"
 msgstr "<Dateiendung> statt '.patch' verwenden"
 
-#: builtin/log.c:1779
+#: builtin/log.c:1798
 msgid "start numbering patches at <n> instead of 1"
 msgstr "die Nummerierung der Patches bei <n> statt bei 1 beginnen"
 
-#: builtin/log.c:1780
+#: builtin/log.c:1799
 msgid "reroll-count"
 msgstr "Reroll-Anzahl"
 
-#: builtin/log.c:1781
+#: builtin/log.c:1800
 msgid "mark the series as Nth re-roll"
 msgstr "die Serie als n-te Fassung kennzeichnen"
 
-#: builtin/log.c:1783
+#: builtin/log.c:1802
 msgid "max length of output filename"
 msgstr "maximale Länge des Dateinamens für die Ausgabe"
 
-#: builtin/log.c:1785
+#: builtin/log.c:1804
 msgid "use [RFC PATCH] instead of [PATCH]"
 msgstr "[RFC PATCH] statt [PATCH] verwenden"
 
-#: builtin/log.c:1788
+#: builtin/log.c:1807
 msgid "cover-from-description-mode"
 msgstr "Modus für Erstellung des Deckblattes aus der Beschreibung"
 
-#: builtin/log.c:1789
+#: builtin/log.c:1808
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr ""
 "Erzeuge Teile des Deckblattes basierend auf der Beschreibung des Branches"
 
-#: builtin/log.c:1791
+#: builtin/log.c:1810
 msgid "use [<prefix>] instead of [PATCH]"
 msgstr "nutze [<Präfix>] statt [PATCH]"
 
-#: builtin/log.c:1794
+#: builtin/log.c:1813
 msgid "store resulting files in <dir>"
 msgstr "erzeugte Dateien in <Verzeichnis> speichern"
 
-#: builtin/log.c:1797
+#: builtin/log.c:1816
 msgid "don't strip/add [PATCH]"
 msgstr "[PATCH] nicht entfernen/hinzufügen"
 
-#: builtin/log.c:1800
+#: builtin/log.c:1819
 msgid "don't output binary diffs"
 msgstr "keine binären Unterschiede ausgeben"
 
-#: builtin/log.c:1802
+#: builtin/log.c:1821
 msgid "output all-zero hash in From header"
 msgstr "Hash mit Nullen in \"From\"-Header ausgeben"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1823
 msgid "don't include a patch matching a commit upstream"
 msgstr ""
 "keine Patches einschließen, die einem Commit im Upstream-Branch entsprechen"
 
-#: builtin/log.c:1806
+#: builtin/log.c:1825
 msgid "show patch format instead of default (patch + stat)"
 msgstr "Patchformat anstatt des Standards anzeigen (Patch + Zusammenfassung)"
 
-#: builtin/log.c:1808
+#: builtin/log.c:1827
 msgid "Messaging"
 msgstr "E-Mail-Einstellungen"
 
-#: builtin/log.c:1809
+#: builtin/log.c:1828
 msgid "header"
 msgstr "Header"
 
-#: builtin/log.c:1810
+#: builtin/log.c:1829
 msgid "add email header"
 msgstr "E-Mail-Header hinzufügen"
 
-#: builtin/log.c:1811 builtin/log.c:1812
+#: builtin/log.c:1830 builtin/log.c:1831
 msgid "email"
 msgstr "E-Mail"
 
-#: builtin/log.c:1811
+#: builtin/log.c:1830
 msgid "add To: header"
 msgstr "\"To:\"-Header hinzufügen"
 
-#: builtin/log.c:1812
+#: builtin/log.c:1831
 msgid "add Cc: header"
 msgstr "\"Cc:\"-Header hinzufügen"
 
-#: builtin/log.c:1813
+#: builtin/log.c:1832
 msgid "ident"
 msgstr "Ident"
 
-#: builtin/log.c:1814
+#: builtin/log.c:1833
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 "\"From\"-Adresse auf <Ident> setzen (oder Ident des Commit-Erstellers, wenn "
 "fehlend)"
 
-#: builtin/log.c:1816
+#: builtin/log.c:1835
 msgid "message-id"
 msgstr "message-id"
 
-#: builtin/log.c:1817
+#: builtin/log.c:1836
 msgid "make first mail a reply to <message-id>"
 msgstr "aus erster E-Mail eine Antwort zu <message-id> machen"
 
-#: builtin/log.c:1818 builtin/log.c:1821
+#: builtin/log.c:1837 builtin/log.c:1840
 msgid "boundary"
 msgstr "Grenze"
 
-#: builtin/log.c:1819
+#: builtin/log.c:1838
 msgid "attach the patch"
 msgstr "den Patch anhängen"
 
-#: builtin/log.c:1822
+#: builtin/log.c:1841
 msgid "inline the patch"
 msgstr "den Patch direkt in die Nachricht einfügen"
 
-#: builtin/log.c:1826
+#: builtin/log.c:1845
 msgid "enable message threading, styles: shallow, deep"
 msgstr "Nachrichtenverkettung aktivieren, Stile: shallow, deep"
 
-#: builtin/log.c:1828
+#: builtin/log.c:1847
 msgid "signature"
 msgstr "Signatur"
 
-#: builtin/log.c:1829
+#: builtin/log.c:1848
 msgid "add a signature"
 msgstr "eine Signatur hinzufügen"
 
-#: builtin/log.c:1830
+#: builtin/log.c:1849
 msgid "base-commit"
 msgstr "Basis-Commit"
 
-#: builtin/log.c:1831
+#: builtin/log.c:1850
 msgid "add prerequisite tree info to the patch series"
 msgstr "erforderliche Revisions-Informationen der Patch-Serie hinzufügen"
 
-#: builtin/log.c:1834
+#: builtin/log.c:1853
 msgid "add a signature from a file"
 msgstr "eine Signatur aus einer Datei hinzufügen"
 
-#: builtin/log.c:1835
+#: builtin/log.c:1854
 msgid "don't print the patch filenames"
 msgstr "keine Dateinamen der Patches anzeigen"
 
-#: builtin/log.c:1837
+#: builtin/log.c:1856
 msgid "show progress while generating patches"
 msgstr "Forschrittsanzeige während der Erzeugung der Patches"
 
-#: builtin/log.c:1839
+#: builtin/log.c:1858
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
 "Änderungen gegenüber <Commit> im Deckblatt oder einzelnem Patch anzeigen"
 
-#: builtin/log.c:1842
+#: builtin/log.c:1861
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
 "Änderungen gegenüber <Refspec> im Deckblatt oder einzelnem Patch anzeigen"
 
-#: builtin/log.c:1844 builtin/range-diff.c:28
+#: builtin/log.c:1863 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr "Prozentsatz mit welchem Erzeugung gewichtet wird"
 
-#: builtin/log.c:1931
+#: builtin/log.c:1953
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "Ungültige Identifikationszeile: %s"
 
-#: builtin/log.c:1956
+#: builtin/log.c:1978
 msgid "--name-only does not make sense"
 msgstr "--name-only kann nicht verwendet werden"
 
-#: builtin/log.c:1958
+#: builtin/log.c:1980
 msgid "--name-status does not make sense"
 msgstr "--name-status kann nicht verwendet werden"
 
-#: builtin/log.c:1960
+#: builtin/log.c:1982
 msgid "--check does not make sense"
 msgstr "--check kann nicht verwendet werden"
 
-#: builtin/log.c:2104
+#: builtin/log.c:1984
+msgid "--remerge-diff does not make sense"
+msgstr "--remerge-diff ist nicht sinnvoll"
+
+#: builtin/log.c:2129
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff erfordert --cover-letter oder einzelnen Patch"
 
-#: builtin/log.c:2108
+#: builtin/log.c:2133
 msgid "Interdiff:"
 msgstr "Interdiff:"
 
-#: builtin/log.c:2109
+#: builtin/log.c:2134
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Interdiff gegen v%d:"
 
-#: builtin/log.c:2119
+#: builtin/log.c:2144
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff erfordert --cover-letter oder einzelnen Patch."
 
-#: builtin/log.c:2127
+#: builtin/log.c:2152
 msgid "Range-diff:"
 msgstr "Range-Diff:"
 
-#: builtin/log.c:2128
+#: builtin/log.c:2153
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "Range-Diff gegen v%d:"
 
-#: builtin/log.c:2139
+#: builtin/log.c:2164
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "Konnte Signatur-Datei '%s' nicht lesen"
 
-#: builtin/log.c:2175
+#: builtin/log.c:2200
 msgid "Generating patches"
 msgstr "Erzeuge Patches"
 
-#: builtin/log.c:2219
+#: builtin/log.c:2244
 msgid "failed to create output files"
 msgstr "Fehler beim Erstellen der Ausgabedateien."
 
-#: builtin/log.c:2279
+#: builtin/log.c:2304
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<Upstream> [<Branch> [<Limit>]]]"
 
-#: builtin/log.c:2333
+#: builtin/log.c:2358
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -17920,10 +18402,6 @@ msgstr "die standardmäßigen Git-Ausschlüsse hinzufügen"
 msgid "make the output relative to the project top directory"
 msgstr "Ausgabe relativ zum Projektverzeichnis"
 
-#: builtin/ls-files.c:667
-msgid "recurse through submodules"
-msgstr "Rekursion in Submodulen durchführen"
-
 #: builtin/ls-files.c:669
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr "als Fehler behandeln, wenn sich eine <Datei> nicht im Index befindet"
@@ -17964,7 +18442,7 @@ msgstr ""
 msgid "do not print remote URL"
 msgstr "URL des Remote-Repositories nicht ausgeben"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1103
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1131
 msgid "exec"
 msgstr "Programm"
 
@@ -17998,44 +18476,73 @@ msgstr ""
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr "zusätzlich zum Objekt die darauf verweisenden Referenzen anzeigen"
 
-#: builtin/ls-tree.c:30
+#: builtin/ls-tree.c:36
 msgid "git ls-tree [<options>] <tree-ish> [<path>...]"
 msgstr "git ls-tree [<Optionen>] <Commit-Referenz> [<Pfad>...]"
 
-#: builtin/ls-tree.c:128
+#: builtin/ls-tree.c:54
+#, c-format
+msgid "could not get object info about '%s'"
+msgstr "konnte Objekt-Informationen über '%s' nicht bestimmen"
+
+#: builtin/ls-tree.c:79
+#, c-format
+msgid "bad ls-tree format: element '%s' does not start with '('"
+msgstr "ungültiges ls-tree-Format: Element '%s' fängt nicht mit '(' an"
+
+#: builtin/ls-tree.c:83
+#, c-format
+msgid "bad ls-tree format: element '%s' does not end in ')'"
+msgstr "ungültiges ls-tree-Format: Element '%s' endet nicht mit ')'"
+
+#: builtin/ls-tree.c:109
+#, c-format
+msgid "bad ls-tree format: %%%.*s"
+msgstr "ungültiges ls-tree-Format: %%%.*s"
+
+#: builtin/ls-tree.c:336
 msgid "only show trees"
 msgstr "nur Verzeichnisse anzeigen"
 
-#: builtin/ls-tree.c:130
+#: builtin/ls-tree.c:338
 msgid "recurse into subtrees"
 msgstr "Rekursion in Unterverzeichnissen durchführen"
 
-#: builtin/ls-tree.c:132
+#: builtin/ls-tree.c:340
 msgid "show trees when recursing"
 msgstr "Verzeichnisse bei Rekursion anzeigen"
 
-#: builtin/ls-tree.c:135
+#: builtin/ls-tree.c:343
 msgid "terminate entries with NUL byte"
 msgstr "Einträge mit NUL-Byte abschließen"
 
-#: builtin/ls-tree.c:136
+#: builtin/ls-tree.c:344
 msgid "include object size"
 msgstr "Objektgröße einschließen"
 
-#: builtin/ls-tree.c:138 builtin/ls-tree.c:140
+#: builtin/ls-tree.c:346 builtin/ls-tree.c:348
 msgid "list only filenames"
 msgstr "nur Dateinamen auflisten"
 
-#: builtin/ls-tree.c:143
+#: builtin/ls-tree.c:350
+msgid "list only objects"
+msgstr "nur Objekte auflisten"
+
+#: builtin/ls-tree.c:353
 msgid "use full path names"
 msgstr "vollständige Pfadnamen verwenden"
 
-#: builtin/ls-tree.c:145
+#: builtin/ls-tree.c:355
 msgid "list entire tree; not just current directory (implies --full-name)"
 msgstr ""
 "das gesamte Verzeichnis auflisten; nicht nur das aktuelle Verzeichnis "
 "(impliziert --full-name)"
 
+#: builtin/ls-tree.c:391
+msgid "--format can't be combined with other format-altering options"
+msgstr ""
+"--format kann nicht mit anderen formatändernden Optionen kombiniert werden"
+
 #. TRANSLATORS: keep <> in "<" mail ">" info.
 #: builtin/mailinfo.c:14
 msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
@@ -18085,7 +18592,11 @@ msgstr "Aktion, wenn ein angeführtes CR gefunden wird"
 msgid "use headers in message's body"
 msgstr "nutze Header im Inhalt der Nachricht"
 
-#: builtin/mailsplit.c:239
+#: builtin/mailsplit.c:227
+msgid "reading patches from stdin/tty..."
+msgstr "lese Patches von Standard-Eingabe/Terminal..."
+
+#: builtin/mailsplit.c:242
 #, c-format
 msgid "empty mbox: '%s'"
 msgstr "Leere mbox: '%s'"
@@ -18110,23 +18621,23 @@ msgstr "git merge-base --is-ancestor <Commit> <Commit>"
 msgid "git merge-base --fork-point <ref> [<commit>]"
 msgstr "git merge-base --fork-point <Referenz> [<Commit>]"
 
-#: builtin/merge-base.c:143
+#: builtin/merge-base.c:144
 msgid "output all common ancestors"
 msgstr "Ausgabe aller gemeinsamen Vorgänger-Commits"
 
-#: builtin/merge-base.c:145
+#: builtin/merge-base.c:146
 msgid "find ancestors for a single n-way merge"
 msgstr "Vorgänger-Commits für einen einzelnen n-Wege-Merge finden"
 
-#: builtin/merge-base.c:147
+#: builtin/merge-base.c:148
 msgid "list revs not reachable from others"
 msgstr "Commits auflisten, die nicht durch Andere erreichbar sind"
 
-#: builtin/merge-base.c:149
+#: builtin/merge-base.c:150
 msgid "is the first one ancestor of the other?"
 msgstr "ist der Erste ein Vorgänger-Commit des Anderen?"
 
-#: builtin/merge-base.c:151
+#: builtin/merge-base.c:152
 msgid "find where <commit> forked from reflog of <ref>"
 msgstr "<Commit> finden, von wo Reflog von <Referenz> abgespalten wurde"
 
@@ -18276,7 +18787,7 @@ msgid "verify that the named commit has a valid GPG signature"
 msgstr "den genannten Commit auf eine gültige GPG-Signatur überprüfen"
 
 #: builtin/merge.c:280 builtin/notes.c:785 builtin/pull.c:172
-#: builtin/rebase.c:1117 builtin/revert.c:114
+#: builtin/rebase.c:1145 builtin/revert.c:114
 msgid "strategy"
 msgstr "Strategie"
 
@@ -18412,75 +18923,75 @@ msgstr ""
 "Zeilen, die mit '%c' beginnen, werden ignoriert,\n"
 "und eine leere Beschreibung bricht den Commit ab.\n"
 
-#: builtin/merge.c:894
+#: builtin/merge.c:900
 msgid "Empty commit message."
 msgstr "Leere Commit-Beschreibung"
 
-#: builtin/merge.c:909
+#: builtin/merge.c:915
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Wunderbar.\n"
 
-#: builtin/merge.c:970
+#: builtin/merge.c:976
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "Automatischer Merge fehlgeschlagen; beheben Sie die Konflikte und committen "
 "Sie dann das Ergebnis.\n"
 
-#: builtin/merge.c:1009
+#: builtin/merge.c:1015
 msgid "No current branch."
 msgstr "Sie befinden sich auf keinem Branch."
 
-#: builtin/merge.c:1011
+#: builtin/merge.c:1017
 msgid "No remote for the current branch."
 msgstr "Kein Remote-Repository für den aktuellen Branch."
 
-#: builtin/merge.c:1013
+#: builtin/merge.c:1019
 msgid "No default upstream defined for the current branch."
 msgstr ""
 "Es ist kein Standard-Upstream-Branch für den aktuellen Branch definiert."
 
-#: builtin/merge.c:1018
+#: builtin/merge.c:1024
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "Kein Remote-Tracking-Branch für %s von %s"
 
-#: builtin/merge.c:1075
+#: builtin/merge.c:1081
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Fehlerhafter Wert '%s' in Umgebungsvariable '%s'"
 
-#: builtin/merge.c:1177
+#: builtin/merge.c:1183
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "nichts was wir in %s zusammenführen können: %s"
 
-#: builtin/merge.c:1211
+#: builtin/merge.c:1217
 msgid "not something we can merge"
 msgstr "nichts was wir zusammenführen können"
 
-#: builtin/merge.c:1324
+#: builtin/merge.c:1330
 msgid "--abort expects no arguments"
 msgstr "--abort akzeptiert keine Argumente"
 
-#: builtin/merge.c:1328
+#: builtin/merge.c:1334
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "Es gibt keinen Merge abzubrechen (MERGE_HEAD fehlt)"
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1352
 msgid "--quit expects no arguments"
 msgstr "--quit erwartet keine Argumente"
 
-#: builtin/merge.c:1359
+#: builtin/merge.c:1365
 msgid "--continue expects no arguments"
 msgstr "--continue erwartet keine Argumente"
 
-#: builtin/merge.c:1363
+#: builtin/merge.c:1369
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "Es ist kein Merge im Gange (MERGE_HEAD fehlt)."
 
-#: builtin/merge.c:1379
+#: builtin/merge.c:1385
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -18488,7 +18999,7 @@ msgstr ""
 "Sie haben Ihren Merge nicht abgeschlossen (MERGE_HEAD existiert).\n"
 "Bitte committen Sie Ihre Änderungen, bevor Sie den Merge ausführen."
 
-#: builtin/merge.c:1386
+#: builtin/merge.c:1392
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -18496,88 +19007,84 @@ msgstr ""
 "Sie haben \"cherry-pick\" nicht abgeschlossen (CHERRY_PICK_HEAD existiert).\n"
 "Bitte committen Sie Ihre Änderungen, bevor Sie den Merge ausführen."
 
-#: builtin/merge.c:1389
+#: builtin/merge.c:1395
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr ""
 "Sie haben \"cherry-pick\" nicht abgeschlossen (CHERRY_PICK_HEAD existiert)."
 
-#: builtin/merge.c:1421
+#: builtin/merge.c:1427
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr "Kein Commit angegeben und merge.defaultToUpstream ist nicht gesetzt."
 
-#: builtin/merge.c:1438
+#: builtin/merge.c:1444
 msgid "Squash commit into empty head not supported yet"
 msgstr "Squash-Merge auf einen leeren Branch wird noch nicht unterstützt"
 
-#: builtin/merge.c:1440
+#: builtin/merge.c:1446
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr ""
 "Nicht vorzuspulender Commit kann nicht in einem leeren Branch verwendet "
 "werden."
 
-#: builtin/merge.c:1445
+#: builtin/merge.c:1451
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - nichts was wir zusammenführen können"
 
-#: builtin/merge.c:1447
+#: builtin/merge.c:1453
 msgid "Can merge only exactly one commit into empty head"
 msgstr "Kann nur exakt einen Commit in einem leeren Branch zusammenführen"
 
-#: builtin/merge.c:1534
+#: builtin/merge.c:1540
 msgid "refusing to merge unrelated histories"
 msgstr "verweigere den Merge von nicht zusammenhängenden Historien"
 
-#: builtin/merge.c:1553
+#: builtin/merge.c:1559
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Aktualisiere %s..%s\n"
 
-#: builtin/merge.c:1601
+#: builtin/merge.c:1606
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
-msgstr "Probiere wirklich trivialen \"in-index\"-Merge ...\n"
+msgstr "Probiere wirklich trivialen \"in-index\"-Merge...\n"
 
-#: builtin/merge.c:1608
+#: builtin/merge.c:1613
 #, c-format
 msgid "Nope.\n"
 msgstr "Nein.\n"
 
-#: builtin/merge.c:1667 builtin/merge.c:1733
+#: builtin/merge.c:1671 builtin/merge.c:1737
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Rücklauf des Verzeichnisses bis zum Ursprung...\n"
 
-#: builtin/merge.c:1671
+#: builtin/merge.c:1675
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Probiere Merge-Strategie %s...\n"
 
-#: builtin/merge.c:1723
+#: builtin/merge.c:1727
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Keine Merge-Strategie behandelt diesen Merge.\n"
 
-#: builtin/merge.c:1725
+#: builtin/merge.c:1729
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "Merge mit Strategie %s fehlgeschlagen.\n"
 
-#: builtin/merge.c:1735
+#: builtin/merge.c:1739
 #, c-format
 msgid "Using the %s strategy to prepare resolving by hand.\n"
 msgstr "Benutze die Strategie %s, um die Auflösung per Hand vorzubereiten.\n"
 
-#: builtin/merge.c:1749
+#: builtin/merge.c:1753
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
 "Automatischer Merge abgeschlossen; halte, wie gewünscht, vor dem Commit an\n"
 
-#: builtin/mktag.c:10
-msgid "git mktag"
-msgstr "git mktag"
-
 #: builtin/mktag.c:27
 #, c-format
 msgid "warning: tag input does not pass fsck: %s"
@@ -18603,23 +19110,19 @@ msgstr "konnte getaggtes Objekt '%s' nicht lesen"
 msgid "object '%s' tagged as '%s', but is a '%s' type"
 msgstr "Objekt '%s' als '%s' getaggt, aber ist ein '%s' Typ"
 
-#: builtin/mktag.c:98
+#: builtin/mktag.c:97
 msgid "tag on stdin did not pass our strict fsck check"
 msgstr ""
 "Tag von der Standardeingabe für unsere strenge Überprüfung bei fsck ungültig"
 
-#: builtin/mktag.c:101
+#: builtin/mktag.c:100
 msgid "tag on stdin did not refer to a valid object"
 msgstr "Tag von der Standard-Eingabe verweiste nicht auf gültiges Objekt"
 
-#: builtin/mktag.c:104 builtin/tag.c:242
+#: builtin/mktag.c:103 builtin/tag.c:243
 msgid "unable to write tag file"
 msgstr "konnte Tag-Datei nicht schreiben"
 
-#: builtin/mktree.c:66
-msgid "git mktree [-z] [--missing] [--batch]"
-msgstr "git mktree [-z] [--missing] [--batch]"
-
 #: builtin/mktree.c:154
 msgid "input is NUL terminated"
 msgstr "Eingabe ist durch NUL-Zeichen abgeschlossen"
@@ -18668,11 +19171,11 @@ msgstr ""
 
 #: builtin/multi-pack-index.c:100
 msgid "write multi-pack bitmap"
-msgstr "schreibe Multipack-Bitmap"
+msgstr "schreibe Multi-Pack-Bitmap"
 
 #: builtin/multi-pack-index.c:105
 msgid "write multi-pack index containing only given indexes"
-msgstr "Multipack-Index schreiben, der nur die gegebenen Indexe enthält"
+msgstr "Multi-Pack-Index schreiben, der nur die gegebenen Indexe enthält"
 
 #: builtin/multi-pack-index.c:107
 msgid "refs snapshot for selecting bitmap commits"
@@ -18683,8 +19186,8 @@ msgid ""
 "during repack, collect pack-files of smaller size into a batch that is "
 "larger than this size"
 msgstr ""
-"Während des Umpackens, sammle Paket-Dateien von geringerer Größe in "
-"einenStapel, welcher größer ist als diese Größe"
+"während des Umpackens, sammle Paket-Dateien von geringerer Größe in einen "
+"Stapel, welcher größer ist als diese Größe"
 
 #: builtin/mv.c:18
 msgid "git mv [<options>] <source>... <destination>"
@@ -18780,52 +19283,56 @@ msgstr "%s, Quelle=%s, Ziel=%s"
 msgid "Renaming %s to %s\n"
 msgstr "Benenne %s nach %s um\n"
 
-#: builtin/mv.c:314 builtin/remote.c:790 builtin/repack.c:857
+#: builtin/mv.c:314 builtin/remote.c:812 builtin/repack.c:861
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "Umbenennung von '%s' fehlgeschlagen"
 
-#: builtin/name-rev.c:474
+#: builtin/name-rev.c:524
 msgid "git name-rev [<options>] <commit>..."
 msgstr "git name-rev [<Optionen>] <Commit>..."
 
-#: builtin/name-rev.c:475
+#: builtin/name-rev.c:525
 msgid "git name-rev [<options>] --all"
 msgstr "git name-rev [<Optionen>] --all"
 
-#: builtin/name-rev.c:476
-msgid "git name-rev [<options>] --stdin"
-msgstr "git name-rev [<Optionen>] --stdin"
+#: builtin/name-rev.c:526
+msgid "git name-rev [<options>] --annotate-stdin"
+msgstr "git name-rev [<Optionen>] --annotate-stdin"
 
-#: builtin/name-rev.c:533
+#: builtin/name-rev.c:583
 msgid "print only ref-based names (no object names)"
 msgstr "nur Referenzen-basierte Namen ausgeben (keine Objektnamen)"
 
-#: builtin/name-rev.c:534
+#: builtin/name-rev.c:584
 msgid "only use tags to name the commits"
 msgstr "nur Tags verwenden, um die Commits zu benennen"
 
-#: builtin/name-rev.c:536
+#: builtin/name-rev.c:586
 msgid "only use refs matching <pattern>"
 msgstr "nur Referenzen verwenden, die <Muster> entsprechen"
 
-#: builtin/name-rev.c:538
+#: builtin/name-rev.c:588
 msgid "ignore refs matching <pattern>"
 msgstr "ignoriere Referenzen die <Muster> entsprechen"
 
-#: builtin/name-rev.c:540
+#: builtin/name-rev.c:590
 msgid "list all commits reachable from all refs"
 msgstr "alle Commits auflisten, die von allen Referenzen erreichbar sind"
 
-#: builtin/name-rev.c:541
-msgid "read from stdin"
-msgstr "von der Standard-Eingabe lesen"
+#: builtin/name-rev.c:591
+msgid "deprecated: use annotate-stdin instead"
+msgstr "veraltet: benutzen Sie stattdessen annotate-stdin"
 
-#: builtin/name-rev.c:542
+#: builtin/name-rev.c:592
+msgid "annotate text from stdin"
+msgstr "annotiere Text von der Standard-Eingabe"
+
+#: builtin/name-rev.c:593
 msgid "allow to print `undefined` names (default)"
 msgstr "Ausgabe von `undefinierten` Namen erlauben (Standard)"
 
-#: builtin/name-rev.c:548
+#: builtin/name-rev.c:599
 msgid "dereference tags in the input (internal use)"
 msgstr "Tags in der Eingabe dereferenzieren (interne Verwendung)"
 
@@ -18869,14 +19376,6 @@ msgstr ""
 "git notes [--ref <Notiz-Referenz>] merge [-v | -q] [-s <Strategie>] <Notiz-"
 "Referenz>"
 
-#: builtin/notes.c:35
-msgid "git notes merge --commit [-v | -q]"
-msgstr "git notes merge --commit [-v | -q]"
-
-#: builtin/notes.c:36
-msgid "git notes merge --abort [-v | -q]"
-msgstr "git notes merge --abort [-v | -q]"
-
 #: builtin/notes.c:37
 msgid "git notes [--ref <notes-ref>] remove [<object>...]"
 msgstr "git notes [--ref <Notiz-Referenz>] remove [<Objekt>...]"
@@ -18937,10 +19436,6 @@ msgstr "git notes remove [<Objekt>]"
 msgid "git notes prune [<options>]"
 msgstr "git notes prune [<Optionen>]"
 
-#: builtin/notes.c:92
-msgid "git notes get-ref"
-msgstr "git notes get-ref"
-
 #: builtin/notes.c:97
 msgid "Write/edit the notes for the following object:"
 msgstr "Schreiben/Bearbeiten der Notizen für das folgende Objekt:"
@@ -18973,7 +19468,7 @@ msgstr "Konnte Notiz-Objekt nicht schreiben"
 msgid "the note contents have been left in %s"
 msgstr "Die Notiz-Inhalte wurden in %s belassen."
 
-#: builtin/notes.c:240 builtin/tag.c:581
+#: builtin/notes.c:240 builtin/tag.c:582
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "konnte '%s' nicht öffnen oder lesen"
@@ -19015,13 +19510,6 @@ msgstr ""
 "Ausführung von %s auf Notizen in %s (außerhalb von refs/notes/) "
 "zurückgewiesen"
 
-#: builtin/notes.c:374 builtin/notes.c:429 builtin/notes.c:507
-#: builtin/notes.c:519 builtin/notes.c:596 builtin/notes.c:663
-#: builtin/notes.c:813 builtin/notes.c:965 builtin/notes.c:987
-#: builtin/prune-packed.c:25 builtin/receive-pack.c:2487 builtin/tag.c:591
-msgid "too many arguments"
-msgstr "Zu viele Argumente."
-
 #: builtin/notes.c:387 builtin/notes.c:676
 #, c-format
 msgid "no note found for object %s."
@@ -19214,7 +19702,7 @@ msgstr ""
 "commit',\n"
 "oder brechen Sie den Merge mit 'git notes merge --abort' ab.\n"
 
-#: builtin/notes.c:899 builtin/tag.c:594
+#: builtin/notes.c:899 builtin/tag.c:595
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "Konnte '%s' nicht als gültige Referenz auflösen."
@@ -19232,7 +19720,7 @@ msgstr "der Versuch, eine nicht existierende Notiz zu löschen, ist kein Fehler"
 msgid "read object names from the standard input"
 msgstr "Objektnamen von der Standard-Eingabe lesen"
 
-#: builtin/notes.c:956 builtin/prune.c:144 builtin/worktree.c:147
+#: builtin/notes.c:956 builtin/prune.c:144 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr "nicht löschen, nur anzeigen"
 
@@ -19248,7 +19736,7 @@ msgstr "Notiz-Referenz"
 msgid "use notes from <notes-ref>"
 msgstr "Notizen von <Notiz-Referenz> verwenden"
 
-#: builtin/notes.c:1036 builtin/stash.c:1818
+#: builtin/notes.c:1036 builtin/stash.c:1802
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "Unbekannter Unterbefehl: %s"
@@ -19267,7 +19755,7 @@ msgstr ""
 "git pack-objects [<Optionen>...] <Basis-Name> [< <Referenzliste> | < "
 "<Objektliste>]"
 
-#: builtin/pack-objects.c:572
+#: builtin/pack-objects.c:570
 #, c-format
 msgid ""
 "write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
@@ -19276,115 +19764,115 @@ msgstr ""
 "write_reuse_object: konnte %s nicht finden, erwartet bei Offset %<PRIuMAX> "
 "in Paket %s"
 
-#: builtin/pack-objects.c:580
+#: builtin/pack-objects.c:578
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr "Ungültiges CRC für gepacktes Objekt %s."
 
-#: builtin/pack-objects.c:591
+#: builtin/pack-objects.c:589
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr "Fehlerhaftes gepacktes Objekt für %s."
 
-#: builtin/pack-objects.c:722
+#: builtin/pack-objects.c:720
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr "Rekursiver Unterschied für Objekt %s festgestellt."
 
-#: builtin/pack-objects.c:941
+#: builtin/pack-objects.c:939
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr "%u Objekte geordnet, %<PRIu32> erwartet."
 
-#: builtin/pack-objects.c:1036
+#: builtin/pack-objects.c:1034
 #, c-format
 msgid "expected object at offset %<PRIuMAX> in pack %s"
 msgstr "Objekt beim Offset %<PRIuMAX> in Paket %s erwartet"
 
-#: builtin/pack-objects.c:1160
+#: builtin/pack-objects.c:1158
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr ""
 "Deaktiviere Schreiben der Bitmap, Pakete wurden durch pack.packSizeLimit\n"
 "aufgetrennt."
 
-#: builtin/pack-objects.c:1173
+#: builtin/pack-objects.c:1171
 msgid "Writing objects"
 msgstr "Schreibe Objekte"
 
-#: builtin/pack-objects.c:1235 builtin/update-index.c:90
+#: builtin/pack-objects.c:1243 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "Konnte '%s' nicht lesen"
 
-#: builtin/pack-objects.c:1268
+#: builtin/pack-objects.c:1276
 msgid "failed to write bitmap index"
 msgstr "Fehler beim Schreiben des Bitmap-Index"
 
-#: builtin/pack-objects.c:1294
+#: builtin/pack-objects.c:1302
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "Schrieb %<PRIu32> Objekte während %<PRIu32> erwartet waren."
 
-#: builtin/pack-objects.c:1536
+#: builtin/pack-objects.c:1544
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr ""
 "Deaktiviere Schreiben der Bitmap, da einige Objekte nicht in eine Pack-"
 "Datei\n"
 "geschrieben wurden."
 
-#: builtin/pack-objects.c:1984
+#: builtin/pack-objects.c:1992
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "\"delta base offset\" Überlauf in Paket für %s"
 
-#: builtin/pack-objects.c:1993
+#: builtin/pack-objects.c:2001
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "\"delta base offset\" liegt außerhalb des gültigen Bereichs für %s"
 
-#: builtin/pack-objects.c:2274
+#: builtin/pack-objects.c:2282
 msgid "Counting objects"
 msgstr "Zähle Objekte"
 
-#: builtin/pack-objects.c:2439
+#: builtin/pack-objects.c:2447
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "Konnte Kopfbereich von Objekt '%s' nicht parsen."
 
-#: builtin/pack-objects.c:2509 builtin/pack-objects.c:2525
-#: builtin/pack-objects.c:2535
+#: builtin/pack-objects.c:2517 builtin/pack-objects.c:2533
+#: builtin/pack-objects.c:2543
 #, c-format
 msgid "object %s cannot be read"
 msgstr "Objekt %s kann nicht gelesen werden."
 
-#: builtin/pack-objects.c:2512 builtin/pack-objects.c:2539
+#: builtin/pack-objects.c:2520 builtin/pack-objects.c:2547
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr "Inkonsistente Objektlänge bei Objekt %s (%<PRIuMAX> vs %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2549
+#: builtin/pack-objects.c:2557
 msgid "suboptimal pack - out of memory"
 msgstr "ungünstiges Packet - Speicher voll"
 
-#: builtin/pack-objects.c:2864
+#: builtin/pack-objects.c:2872
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Delta-Kompression verwendet bis zu %d Threads."
 
-#: builtin/pack-objects.c:3003
+#: builtin/pack-objects.c:3011
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "Konnte keine Objekte packen, die von Tag %s erreichbar sind."
 
-#: builtin/pack-objects.c:3089
+#: builtin/pack-objects.c:3097
 msgid "Compressing objects"
 msgstr "Komprimiere Objekte"
 
-#: builtin/pack-objects.c:3095
+#: builtin/pack-objects.c:3103
 msgid "inconsistency with delta count"
 msgstr "Inkonsistenz mit der Anzahl von Deltas"
 
-#: builtin/pack-objects.c:3174
+#: builtin/pack-objects.c:3182
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
@@ -19393,7 +19881,7 @@ msgstr ""
 "Wert für uploadpack.blobpackfileuri muss in der Form '<Objekt-Hash> <Pack-"
 "Hash> <URI>' vorliegen ('%s' erhalten)"
 
-#: builtin/pack-objects.c:3177
+#: builtin/pack-objects.c:3185
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
@@ -19401,18 +19889,18 @@ msgstr ""
 "Objekt bereits in einem anderen uploadpack.blobpackfileuri konfiguriert "
 "('%s' erhalten)"
 
-#: builtin/pack-objects.c:3212
+#: builtin/pack-objects.c:3220
 #, c-format
 msgid "could not get type of object %s in pack %s"
 msgstr "konnte Typ von Objekt %s in Paket %s nicht bestimmen"
 
-#: builtin/pack-objects.c:3340 builtin/pack-objects.c:3351
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3348 builtin/pack-objects.c:3359
+#: builtin/pack-objects.c:3373
 #, c-format
 msgid "could not find pack '%s'"
 msgstr "Konnte Paket '%s' nicht finden"
 
-#: builtin/pack-objects.c:3408
+#: builtin/pack-objects.c:3416
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -19421,7 +19909,7 @@ msgstr ""
 "erwartete Randobjekt-ID, erhielt nutzlose Daten:\n"
 " %s"
 
-#: builtin/pack-objects.c:3414
+#: builtin/pack-objects.c:3422
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -19430,259 +19918,255 @@ msgstr ""
 "erwartete Objekt-ID, erhielt nutzlose Daten:\n"
 " %s"
 
-#: builtin/pack-objects.c:3507
-msgid "invalid value for --missing"
-msgstr "ungültiger Wert für --missing"
-
-#: builtin/pack-objects.c:3532 builtin/pack-objects.c:3619
+#: builtin/pack-objects.c:3540 builtin/pack-objects.c:3627
 msgid "cannot open pack index"
 msgstr "kann Paketindex nicht öffnen"
 
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3549
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "loses Objekt bei %s konnte nicht untersucht werden"
 
-#: builtin/pack-objects.c:3627
+#: builtin/pack-objects.c:3635
 msgid "unable to force loose object"
 msgstr "konnte loses Objekt nicht erzwingen"
 
-#: builtin/pack-objects.c:3757
+#: builtin/pack-objects.c:3763
 #, c-format
 msgid "not a rev '%s'"
 msgstr "'%s' ist kein Commit"
 
-#: builtin/pack-objects.c:3760 builtin/rev-parse.c:1061
+#: builtin/pack-objects.c:3766 builtin/rev-parse.c:1061
 #, c-format
 msgid "bad revision '%s'"
 msgstr "ungültiger Commit '%s'"
 
-#: builtin/pack-objects.c:3788
+#: builtin/pack-objects.c:3794
 msgid "unable to add recent objects"
 msgstr "konnte neuere Objekte nicht hinzufügen"
 
-#: builtin/pack-objects.c:3841
+#: builtin/pack-objects.c:3847
 #, c-format
 msgid "unsupported index version %s"
 msgstr "nicht unterstützte Index-Version %s"
 
-#: builtin/pack-objects.c:3845
+#: builtin/pack-objects.c:3851
 #, c-format
 msgid "bad index version '%s'"
 msgstr "ungültige Index-Version '%s'"
 
-#: builtin/pack-objects.c:3884
+#: builtin/pack-objects.c:3907
 msgid "<version>[,<offset>]"
 msgstr "<Version>[,<Offset>]"
 
-#: builtin/pack-objects.c:3885
+#: builtin/pack-objects.c:3908
 msgid "write the pack index file in the specified idx format version"
 msgstr ""
 "die Index-Datei des Paketes in der angegebenen Indexformat-Version schreiben"
 
-#: builtin/pack-objects.c:3888
+#: builtin/pack-objects.c:3911
 msgid "maximum size of each output pack file"
 msgstr "maximale Größe für jede ausgegebene Paketdatei"
 
-#: builtin/pack-objects.c:3890
+#: builtin/pack-objects.c:3913
 msgid "ignore borrowed objects from alternate object store"
 msgstr "geliehene Objekte von alternativem Objektspeicher ignorieren"
 
-#: builtin/pack-objects.c:3892
+#: builtin/pack-objects.c:3915
 msgid "ignore packed objects"
 msgstr "gepackte Objekte ignorieren"
 
-#: builtin/pack-objects.c:3894
+#: builtin/pack-objects.c:3917
 msgid "limit pack window by objects"
 msgstr "Paketfenster durch Objekte begrenzen"
 
-#: builtin/pack-objects.c:3896
+#: builtin/pack-objects.c:3919
 msgid "limit pack window by memory in addition to object limit"
 msgstr ""
 "Paketfenster, zusätzlich zur Objektbegrenzung, durch Speicher begrenzen"
 
-#: builtin/pack-objects.c:3898
+#: builtin/pack-objects.c:3921
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr ""
 "maximale Länge der erlaubten Differenzverkettung im resultierenden Paket"
 
-#: builtin/pack-objects.c:3900
+#: builtin/pack-objects.c:3923
 msgid "reuse existing deltas"
 msgstr "existierende Unterschiede wiederverwenden"
 
-#: builtin/pack-objects.c:3902
+#: builtin/pack-objects.c:3925
 msgid "reuse existing objects"
 msgstr "existierende Objekte wiederverwenden"
 
-#: builtin/pack-objects.c:3904
+#: builtin/pack-objects.c:3927
 msgid "use OFS_DELTA objects"
 msgstr "OFS_DELTA Objekte verwenden"
 
-#: builtin/pack-objects.c:3906
+#: builtin/pack-objects.c:3929
 msgid "use threads when searching for best delta matches"
 msgstr ""
 "Threads bei der Suche nach den besten Übereinstimmungen bei Unterschieden "
 "verwenden"
 
-#: builtin/pack-objects.c:3908
+#: builtin/pack-objects.c:3931
 msgid "do not create an empty pack output"
 msgstr "keine leeren Pakete erzeugen"
 
-#: builtin/pack-objects.c:3910
+#: builtin/pack-objects.c:3933
 msgid "read revision arguments from standard input"
 msgstr "Argumente bezüglich Commits von der Standard-Eingabe lesen"
 
-#: builtin/pack-objects.c:3912
+#: builtin/pack-objects.c:3935
 msgid "limit the objects to those that are not yet packed"
 msgstr "die Objekte zu solchen, die noch nicht gepackt wurden, begrenzen"
 
-#: builtin/pack-objects.c:3915
+#: builtin/pack-objects.c:3938
 msgid "include objects reachable from any reference"
 msgstr "Objekte einschließen, die von jeder Referenz erreichbar sind"
 
-#: builtin/pack-objects.c:3918
+#: builtin/pack-objects.c:3941
 msgid "include objects referred by reflog entries"
 msgstr ""
 "Objekte einschließen, die von Einträgen des Reflogs referenziert werden"
 
-#: builtin/pack-objects.c:3921
+#: builtin/pack-objects.c:3944
 msgid "include objects referred to by the index"
 msgstr "Objekte einschließen, die vom Index referenziert werden"
 
-#: builtin/pack-objects.c:3924
+#: builtin/pack-objects.c:3947
 msgid "read packs from stdin"
 msgstr "Pakete von der Standard-Eingabe lesen"
 
-#: builtin/pack-objects.c:3926
+#: builtin/pack-objects.c:3949
 msgid "output pack to stdout"
 msgstr "Paket in die Standard-Ausgabe schreiben"
 
-#: builtin/pack-objects.c:3928
+#: builtin/pack-objects.c:3951
 msgid "include tag objects that refer to objects to be packed"
 msgstr "Tag-Objekte einschließen, die auf gepackte Objekte referenzieren"
 
-#: builtin/pack-objects.c:3930
+#: builtin/pack-objects.c:3953
 msgid "keep unreachable objects"
 msgstr "nicht erreichbare Objekte behalten"
 
-#: builtin/pack-objects.c:3932
+#: builtin/pack-objects.c:3955
 msgid "pack loose unreachable objects"
 msgstr "nicht erreichbare lose Objekte packen"
 
-#: builtin/pack-objects.c:3934
+#: builtin/pack-objects.c:3957
 msgid "unpack unreachable objects newer than <time>"
 msgstr "nicht erreichbare Objekte entpacken, die neuer als <Zeit> sind"
 
-#: builtin/pack-objects.c:3937
+#: builtin/pack-objects.c:3960
 msgid "use the sparse reachability algorithm"
 msgstr "den \"sparse\" Algorithmus zur Bestimmung der Erreichbarkeit benutzen"
 
-#: builtin/pack-objects.c:3939
+#: builtin/pack-objects.c:3962
 msgid "create thin packs"
 msgstr "dünnere Pakete erzeugen"
 
-#: builtin/pack-objects.c:3941
+#: builtin/pack-objects.c:3964
 msgid "create packs suitable for shallow fetches"
 msgstr ""
 "Pakete geeignet für Abholung mit unvollständiger Historie (shallow) erzeugen"
 
-#: builtin/pack-objects.c:3943
+#: builtin/pack-objects.c:3966
 msgid "ignore packs that have companion .keep file"
 msgstr "Pakete ignorieren, die .keep Dateien haben"
 
-#: builtin/pack-objects.c:3945
+#: builtin/pack-objects.c:3968
 msgid "ignore this pack"
 msgstr "dieses Paket ignorieren"
 
-#: builtin/pack-objects.c:3947
+#: builtin/pack-objects.c:3970
 msgid "pack compression level"
 msgstr "Komprimierungsgrad für Paketierung"
 
-#: builtin/pack-objects.c:3949
+#: builtin/pack-objects.c:3972
 msgid "do not hide commits by grafts"
 msgstr "keine künstlichen Vorgänger-Commits (\"grafts\") verbergen"
 
-#: builtin/pack-objects.c:3951
+#: builtin/pack-objects.c:3974
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr ""
 "Bitmap-Index (falls verfügbar) zur Optimierung der Objektzählung benutzen"
 
-#: builtin/pack-objects.c:3953
+#: builtin/pack-objects.c:3976
 msgid "write a bitmap index together with the pack index"
 msgstr "Bitmap-Index zusammen mit Pack-Index schreiben"
 
-#: builtin/pack-objects.c:3957
+#: builtin/pack-objects.c:3980
 msgid "write a bitmap index if possible"
 msgstr "Bitmap-Index schreiben, wenn möglich"
 
-#: builtin/pack-objects.c:3961
+#: builtin/pack-objects.c:3984
 msgid "handling for missing objects"
 msgstr "Behandlung für fehlende Objekte"
 
-#: builtin/pack-objects.c:3964
+#: builtin/pack-objects.c:3987
 msgid "do not pack objects in promisor packfiles"
 msgstr ""
 "keine Objekte aus Packdateien von partiell geklonten Remote-Repositories "
 "packen"
 
-#: builtin/pack-objects.c:3966
+#: builtin/pack-objects.c:3989
 msgid "respect islands during delta compression"
 msgstr "Delta-Islands bei Delta-Kompression beachten"
 
-#: builtin/pack-objects.c:3968
+#: builtin/pack-objects.c:3991
 msgid "protocol"
 msgstr "Protokoll"
 
-#: builtin/pack-objects.c:3969
+#: builtin/pack-objects.c:3992
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr ""
 "jegliche konfigurierte uploadpack.blobpackfileuri für dieses Protkoll "
 "ausschließen"
 
-#: builtin/pack-objects.c:4002
+#: builtin/pack-objects.c:4027
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "Tiefe für Verkettung von Unterschieden %d ist zu tief, erzwinge %d"
 
-#: builtin/pack-objects.c:4007
+#: builtin/pack-objects.c:4032
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "pack.deltaCacheLimit ist zu hoch, erzwinge %d"
 
-#: builtin/pack-objects.c:4063
+#: builtin/pack-objects.c:4088
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 "--max-pack-size kann nicht für die Erstellung eines Pakets für eine "
 "Übertragung\n"
 "benutzt werden."
 
-#: builtin/pack-objects.c:4065
+#: builtin/pack-objects.c:4090
 msgid "minimum pack size limit is 1 MiB"
 msgstr "Minimales Limit für die Paketgröße ist 1 MiB."
 
-#: builtin/pack-objects.c:4070
+#: builtin/pack-objects.c:4095
 msgid "--thin cannot be used to build an indexable pack"
 msgstr ""
 "--thin kann nicht benutzt werden, um ein indizierbares Paket zu erstellen."
 
-#: builtin/pack-objects.c:4079
+#: builtin/pack-objects.c:4104
 msgid "cannot use --filter without --stdout"
 msgstr "Kann --filter nicht ohne --stdout benutzen."
 
-#: builtin/pack-objects.c:4081
+#: builtin/pack-objects.c:4106
 msgid "cannot use --filter with --stdin-packs"
 msgstr "kann --filter nicht mit --stdin-packs benutzen"
 
-#: builtin/pack-objects.c:4085
+#: builtin/pack-objects.c:4110
 msgid "cannot use internal rev list with --stdin-packs"
 msgstr ""
 "interne Commit-Liste kann nicht gemeinsam mit --stdin-packs verwendet werden"
 
-#: builtin/pack-objects.c:4144
+#: builtin/pack-objects.c:4169
 msgid "Enumerating objects"
 msgstr "Objekte aufzählen"
 
-#: builtin/pack-objects.c:4180
+#: builtin/pack-objects.c:4210
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -19718,10 +20202,6 @@ msgstr "alles packen"
 msgid "prune loose refs (default)"
 msgstr "lose Referenzen entfernen (Standard)"
 
-#: builtin/prune-packed.c:6
-msgid "git prune-packed [-n | --dry-run] [-q | --quiet]"
-msgstr "git prune-packed [-n | --dry-run] [-q | --quiet]"
-
 #: builtin/prune.c:14
 msgid "git prune [-n] [-v] [--progress] [--expire <time>] [--] [<head>...]"
 msgstr "git prune [-n] [-v] [--progress] [--expire <Zeit>] [--] [<Branch>...]"
@@ -19744,11 +20224,6 @@ msgstr ""
 msgid "cannot prune in a precious-objects repo"
 msgstr "kann \"prune\" in precious-objects Repository nicht ausführen"
 
-#: builtin/pull.c:45 builtin/pull.c:47
-#, c-format
-msgid "Invalid value for %s: %s"
-msgstr "Ungültiger Wert für %s: %s"
-
 #: builtin/pull.c:67
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
 msgstr "git pull [<Optionen>] [<Repository> [<Refspec>...]]"
@@ -19773,7 +20248,7 @@ msgstr "Vorspulen erlauben"
 msgid "control use of pre-merge-commit and commit-msg hooks"
 msgstr "Benutzung der pre-merge-commit und commit-msg Hooks kontrollieren"
 
-#: builtin/pull.c:171 parse-options.h:340
+#: builtin/pull.c:171 parse-options.h:371
 msgid "automatically stash/stash pop before and after"
 msgstr "automatischer Stash/Stash-Pop davor und danach"
 
@@ -19789,11 +20264,6 @@ msgstr "das Überschreiben von lokalen Branches erzwingen"
 msgid "number of submodules pulled in parallel"
 msgstr "Anzahl der parallel mit 'pull' zu verarbeitenden Submodule"
 
-#: builtin/pull.c:321
-#, c-format
-msgid "Invalid value for pull.ff: %s"
-msgstr "Ungültiger Wert für pull.ff: %s"
-
 #: builtin/pull.c:449
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
@@ -19829,7 +20299,7 @@ msgstr ""
 "Repository für den aktuellen Branch ist, müssen Sie einen Branch auf\n"
 "der Befehlszeile angeben."
 
-#: builtin/pull.c:460 builtin/rebase.c:951
+#: builtin/pull.c:460 builtin/rebase.c:978
 msgid "You are not currently on a branch."
 msgstr "Im Moment auf keinem Branch."
 
@@ -19848,16 +20318,16 @@ msgid "See git-pull(1) for details."
 msgstr "Siehe git-pull(1) für weitere Details."
 
 #: builtin/pull.c:467 builtin/pull.c:473 builtin/pull.c:482
-#: builtin/rebase.c:957
+#: builtin/rebase.c:984
 msgid "<remote>"
 msgstr "<Remote-Repository>"
 
 #: builtin/pull.c:467 builtin/pull.c:482 builtin/pull.c:487
-#: contrib/scalar/scalar.c:375
+#: contrib/scalar/scalar.c:374
 msgid "<branch>"
 msgstr "<Branch>"
 
-#: builtin/pull.c:475 builtin/rebase.c:949
+#: builtin/pull.c:475 builtin/rebase.c:976
 msgid "There is no tracking information for the current branch."
 msgstr "Es gibt keine Tracking-Informationen für den aktuellen Branch."
 
@@ -19918,21 +20388,21 @@ msgstr ""
 "Option --rebase, --no-rebase oder --ff-only auf der Kommandozeile nutzen,\n"
 "um das konfigurierte Standardverhalten pro Aufruf zu überschreiben.\n"
 
-#: builtin/pull.c:1046
+#: builtin/pull.c:1047
 msgid "Updating an unborn branch with changes added to the index."
 msgstr ""
 "Aktualisiere einen ungeborenen Branch mit Änderungen, die zum Commit "
 "vorgemerkt sind."
 
-#: builtin/pull.c:1050
+#: builtin/pull.c:1051
 msgid "pull with rebase"
 msgstr "Pull mit Rebase"
 
-#: builtin/pull.c:1051
+#: builtin/pull.c:1052
 msgid "please commit or stash them."
 msgstr "Bitte committen Sie die Änderungen oder benutzen Sie \"stash\"."
 
-#: builtin/pull.c:1076
+#: builtin/pull.c:1077
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -19942,7 +20412,7 @@ msgstr ""
 "\"fetch\" aktualisierte die Spitze des aktuellen Branches.\n"
 "Spule Ihr Arbeitsverzeichnis von Commit %s vor."
 
-#: builtin/pull.c:1082
+#: builtin/pull.c:1083
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -19959,25 +20429,25 @@ msgstr ""
 "$ git reset --hard\n"
 "zur Wiederherstellung aus."
 
-#: builtin/pull.c:1097
+#: builtin/pull.c:1098
 msgid "Cannot merge multiple branches into empty head."
 msgstr "Kann nicht mehrere Branches in einen leeren Branch zusammenführen."
 
-#: builtin/pull.c:1102
+#: builtin/pull.c:1103
 msgid "Cannot rebase onto multiple branches."
 msgstr "Kann Rebase nicht auf mehrere Branches ausführen."
 
-#: builtin/pull.c:1104
+#: builtin/pull.c:1105
 msgid "Cannot fast-forward to multiple branches."
 msgstr "Kann nicht zu mehreren Branches vorspulen."
 
-#: builtin/pull.c:1119
+#: builtin/pull.c:1120
 msgid "Need to specify how to reconcile divergent branches."
 msgstr ""
 "Es muss angegeben werden, wie mit abweichenden Branches umgegangen werden "
 "sollen."
 
-#: builtin/pull.c:1133
+#: builtin/pull.c:1134
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 "Kann Rebase nicht mit lokal aufgezeichneten Änderungen in Submodulen "
@@ -20168,7 +20638,7 @@ msgstr "Push nach %s\n"
 msgid "failed to push some refs to '%s'"
 msgstr "Fehler beim Versenden einiger Referenzen nach '%s'"
 
-#: builtin/push.c:544 builtin/submodule--helper.c:3259
+#: builtin/push.c:544 builtin/submodule--helper.c:3377
 msgid "repository"
 msgstr "Repository"
 
@@ -20409,11 +20879,11 @@ msgstr "unpack-trees protokollieren"
 msgid "suppress feedback messages"
 msgstr "Rückmeldungen unterdrücken"
 
-#: builtin/read-tree.c:183
+#: builtin/read-tree.c:190
 msgid "You need to resolve your current index first"
 msgstr "Sie müssen zuerst die Konflikte in Ihrem aktuellen Index auflösen."
 
-#: builtin/rebase.c:35
+#: builtin/rebase.c:36
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
 "[<upstream> [<branch>]]"
@@ -20421,55 +20891,51 @@ msgstr ""
 "git rebase [-i] [<Optionen>] [--exec <Programm>] [--onto <neue-Basis> | --"
 "keep-base] [<Upstream> [<Branch>]]"
 
-#: builtin/rebase.c:37
+#: builtin/rebase.c:38
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]"
 msgstr ""
 "git rebase [-i] [<Optionen>] [--exec <Programm>] [--onto <neue-Basis>] --"
 "root [<Branch>]"
 
-#: builtin/rebase.c:39
-msgid "git rebase --continue | --abort | --skip | --edit-todo"
-msgstr "git rebase --continue | --abort | --skip | --edit-todo"
-
-#: builtin/rebase.c:230
+#: builtin/rebase.c:231
 #, c-format
 msgid "could not create temporary %s"
 msgstr "Konnte temporäres Verzeichnis '%s' nicht erstellen."
 
-#: builtin/rebase.c:236
+#: builtin/rebase.c:237
 msgid "could not mark as interactive"
 msgstr "Markierung auf interaktiven Rebase fehlgeschlagen."
 
-#: builtin/rebase.c:289
+#: builtin/rebase.c:290
 msgid "could not generate todo list"
 msgstr "Konnte TODO-Liste nicht erzeugen."
 
-#: builtin/rebase.c:331
+#: builtin/rebase.c:332
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "Ein Basis-Commit muss mit --upstream oder --onto angegeben werden."
 
-#: builtin/rebase.c:390
+#: builtin/rebase.c:391
 #, c-format
 msgid "%s requires the merge backend"
 msgstr "%s erfordert das Merge-Backend"
 
-#: builtin/rebase.c:432
+#: builtin/rebase.c:433
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "Konnte 'onto' nicht bestimmen: '%s'"
 
-#: builtin/rebase.c:449
+#: builtin/rebase.c:450
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "Ungültiges orig-head: '%s'"
 
-#: builtin/rebase.c:474
+#: builtin/rebase.c:475
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "Ignoriere ungültiges allow_rerere_autoupdate: '%s'"
 
-#: builtin/rebase.c:597
+#: builtin/rebase.c:600
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -20485,7 +20951,7 @@ msgstr ""
 "Um abzubrechen und zurück zum Zustand vor \"git rebase\" zu gelangen,\n"
 "führen Sie \"git rebase --abort\" aus."
 
-#: builtin/rebase.c:680
+#: builtin/rebase.c:685
 #, c-format
 msgid ""
 "\n"
@@ -20505,7 +20971,12 @@ msgstr ""
 "Infolge dessen kann Git auf diesen Revisionen Rebase nicht\n"
 "ausführen."
 
-#: builtin/rebase.c:925
+#: builtin/rebase.c:836
+#, c-format
+msgid "could not switch to %s"
+msgstr "Konnte nicht zu %s wechseln."
+
+#: builtin/rebase.c:952
 #, c-format
 msgid ""
 "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
@@ -20514,7 +20985,7 @@ msgstr ""
 "nicht erkannter leerer Typ '%s'; gültige Werte sind \"drop\", \"keep\", und "
 "\"ask\"."
 
-#: builtin/rebase.c:943
+#: builtin/rebase.c:970
 #, c-format
 msgid ""
 "%s\n"
@@ -20532,7 +21003,7 @@ msgstr ""
 "    git rebase '<Branch>'\n"
 "\n"
 
-#: builtin/rebase.c:959
+#: builtin/rebase.c:986
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -20546,186 +21017,186 @@ msgstr ""
 "    git branch --set-upstream-to=%s/<Branch> %s\n"
 "\n"
 
-#: builtin/rebase.c:989
+#: builtin/rebase.c:1016
 msgid "exec commands cannot contain newlines"
 msgstr "\"exec\"-Befehle können keine neuen Zeilen enthalten"
 
-#: builtin/rebase.c:993
+#: builtin/rebase.c:1020
 msgid "empty exec command"
 msgstr "Leerer \"exec\"-Befehl."
 
-#: builtin/rebase.c:1023
+#: builtin/rebase.c:1051
 msgid "rebase onto given branch instead of upstream"
 msgstr "Rebase auf angegebenen Branch anstelle des Upstream-Branches ausführen"
 
-#: builtin/rebase.c:1025
+#: builtin/rebase.c:1053
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr "Nutze die Merge-Basis von Upstream und Branch als die aktuelle Basis"
 
-#: builtin/rebase.c:1027
+#: builtin/rebase.c:1055
 msgid "allow pre-rebase hook to run"
 msgstr "Ausführung des pre-rebase-Hooks erlauben"
 
-#: builtin/rebase.c:1029
+#: builtin/rebase.c:1057
 msgid "be quiet. implies --no-stat"
 msgstr "weniger Ausgaben (impliziert --no-stat)"
 
-#: builtin/rebase.c:1032
+#: builtin/rebase.c:1060
 msgid "display a diffstat of what changed upstream"
 msgstr ""
 "Zusammenfassung der Unterschiede gegenüber dem Upstream-Branch anzeigen"
 
-#: builtin/rebase.c:1035
+#: builtin/rebase.c:1063
 msgid "do not show diffstat of what changed upstream"
 msgstr ""
 "Zusammenfassung der Unterschiede gegenüber dem Upstream-Branch verbergen"
 
-#: builtin/rebase.c:1038
+#: builtin/rebase.c:1066
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "eine Signed-off-by Zeile zu jedem Commit hinzufügen"
 
-#: builtin/rebase.c:1041
+#: builtin/rebase.c:1069
 msgid "make committer date match author date"
 msgstr "Datum des Commit-Erstellers soll mit Datum des Autors übereinstimmen"
 
-#: builtin/rebase.c:1043
+#: builtin/rebase.c:1071
 msgid "ignore author date and use current date"
 msgstr "ignoriere Autor-Datum und nutze aktuelles Datum"
 
-#: builtin/rebase.c:1045
+#: builtin/rebase.c:1073
 msgid "synonym of --reset-author-date"
 msgstr "Synonym für --reset-author-date"
 
-#: builtin/rebase.c:1047 builtin/rebase.c:1051
+#: builtin/rebase.c:1075 builtin/rebase.c:1079
 msgid "passed to 'git apply'"
 msgstr "an 'git apply' übergeben"
 
-#: builtin/rebase.c:1049
+#: builtin/rebase.c:1077
 msgid "ignore changes in whitespace"
 msgstr "Whitespace-Änderungen ignorieren"
 
-#: builtin/rebase.c:1053 builtin/rebase.c:1056
+#: builtin/rebase.c:1081 builtin/rebase.c:1084
 msgid "cherry-pick all commits, even if unchanged"
 msgstr ""
 "Cherry-Pick auf alle Commits ausführen, auch wenn diese unverändert sind"
 
-#: builtin/rebase.c:1058
+#: builtin/rebase.c:1086
 msgid "continue"
 msgstr "fortsetzen"
 
-#: builtin/rebase.c:1061
+#: builtin/rebase.c:1089
 msgid "skip current patch and continue"
 msgstr "den aktuellen Patch auslassen und fortfahren"
 
-#: builtin/rebase.c:1063
+#: builtin/rebase.c:1091
 msgid "abort and check out the original branch"
 msgstr "abbrechen und den ursprünglichen Branch auschecken"
 
-#: builtin/rebase.c:1066
+#: builtin/rebase.c:1094
 msgid "abort but keep HEAD where it is"
 msgstr "abbrechen, aber HEAD an aktueller Stelle belassen"
 
-#: builtin/rebase.c:1067
+#: builtin/rebase.c:1095
 msgid "edit the todo list during an interactive rebase"
 msgstr "TODO-Liste während eines interaktiven Rebase bearbeiten"
 
-#: builtin/rebase.c:1070
+#: builtin/rebase.c:1098
 msgid "show the patch file being applied or merged"
 msgstr "den Patch, der gerade angewendet oder zusammengeführt wird, anzeigen"
 
-#: builtin/rebase.c:1073
+#: builtin/rebase.c:1101
 msgid "use apply strategies to rebase"
 msgstr "Strategien von 'git am' bei Rebase verwenden"
 
-#: builtin/rebase.c:1077
+#: builtin/rebase.c:1105
 msgid "use merging strategies to rebase"
 msgstr "Merge-Strategien beim Rebase verwenden"
 
-#: builtin/rebase.c:1081
+#: builtin/rebase.c:1109
 msgid "let the user edit the list of commits to rebase"
 msgstr "den Benutzer die Liste der Commits für den Rebase bearbeiten lassen"
 
-#: builtin/rebase.c:1085
+#: builtin/rebase.c:1113
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(VERALTET) Versuche, Merges wiederherzustellen statt sie zu ignorieren"
 
-#: builtin/rebase.c:1090
+#: builtin/rebase.c:1118
 msgid "how to handle commits that become empty"
 msgstr "wie sollen Commits behandelt werden, die leer werden"
 
-#: builtin/rebase.c:1093
+#: builtin/rebase.c:1121
 msgid "keep commits which start empty"
 msgstr "behalte Commits, die leer beginnen"
 
-#: builtin/rebase.c:1097
+#: builtin/rebase.c:1125
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "bei -i Commits verschieben, die mit squash!/fixup! beginnen"
 
-#: builtin/rebase.c:1104
+#: builtin/rebase.c:1132
 msgid "add exec lines after each commit of the editable list"
 msgstr "exec-Zeilen nach jedem Commit der editierbaren Liste hinzufügen"
 
-#: builtin/rebase.c:1108
+#: builtin/rebase.c:1136
 msgid "allow rebasing commits with empty messages"
 msgstr "Rebase von Commits mit leerer Beschreibung erlauben"
 
-#: builtin/rebase.c:1112
+#: builtin/rebase.c:1140
 msgid "try to rebase merges instead of skipping them"
 msgstr "versuchen, Rebase mit Merges auszuführen, statt diese zu überspringen"
 
-#: builtin/rebase.c:1115
+#: builtin/rebase.c:1143
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "'merge-base --fork-point' benutzen, um Upstream-Branch zu bestimmen"
 
-#: builtin/rebase.c:1117
+#: builtin/rebase.c:1145
 msgid "use the given merge strategy"
 msgstr "angegebene Merge-Strategie verwenden"
 
-#: builtin/rebase.c:1119 builtin/revert.c:115
+#: builtin/rebase.c:1147 builtin/revert.c:115
 msgid "option"
 msgstr "Option"
 
-#: builtin/rebase.c:1120
+#: builtin/rebase.c:1148
 msgid "pass the argument through to the merge strategy"
 msgstr "Argument zur Merge-Strategie durchreichen"
 
-#: builtin/rebase.c:1123
+#: builtin/rebase.c:1151
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "Rebase auf alle erreichbaren Commits bis zum Root-Commit ausführen"
 
-#: builtin/rebase.c:1126
+#: builtin/rebase.c:1154
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "jeden fehlgeschlagenen `exec`-Befehl neu ansetzen"
 
-#: builtin/rebase.c:1128
+#: builtin/rebase.c:1156
 msgid "apply all changes, even those already present upstream"
 msgstr ""
 "alle Änderungen anwenden, auch jene, die bereits im Upstream-Branch "
 "vorhanden sind"
 
-#: builtin/rebase.c:1149
+#: builtin/rebase.c:1177
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "'git am' scheint im Gange zu sein. Kann Rebase nicht durchführen."
 
-#: builtin/rebase.c:1180
+#: builtin/rebase.c:1208
 msgid "--preserve-merges was replaced by --rebase-merges"
 msgstr "--preserve-merges wurde durch --rebase-merges ersetzt"
 
-#: builtin/rebase.c:1202
+#: builtin/rebase.c:1230
 msgid "No rebase in progress?"
 msgstr "Kein Rebase im Gange?"
 
-#: builtin/rebase.c:1206
+#: builtin/rebase.c:1234
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr ""
 "Die --edit-todo Aktion kann nur während eines interaktiven Rebase verwendet "
 "werden."
 
-#: builtin/rebase.c:1229 t/helper/test-fast-rebase.c:122
+#: builtin/rebase.c:1257 t/helper/test-fast-rebase.c:122
 msgid "Cannot read HEAD"
 msgstr "Kann HEAD nicht lesen"
 
-#: builtin/rebase.c:1241
+#: builtin/rebase.c:1269
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -20733,16 +21204,16 @@ msgstr ""
 "Sie müssen alle Merge-Konflikte editieren und diese dann\n"
 "mittels \"git add\" als aufgelöst markieren"
 
-#: builtin/rebase.c:1260
+#: builtin/rebase.c:1287
 msgid "could not discard worktree changes"
 msgstr "Konnte Änderungen im Arbeitsverzeichnis nicht verwerfen."
 
-#: builtin/rebase.c:1279
+#: builtin/rebase.c:1308
 #, c-format
 msgid "could not move back to %s"
 msgstr "Konnte nicht zu %s zurückgehen."
 
-#: builtin/rebase.c:1325
+#: builtin/rebase.c:1354
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -20763,126 +21234,121 @@ msgstr ""
 "und führen Sie diesen Befehl nochmal aus. Es wird angehalten, falls noch\n"
 "etwas Schützenswertes vorhanden ist.\n"
 
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1382
 msgid "switch `C' expects a numerical value"
 msgstr "Schalter `C' erwartet einen numerischen Wert."
 
-#: builtin/rebase.c:1395
+#: builtin/rebase.c:1424
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Unbekannter Modus: %s"
 
-#: builtin/rebase.c:1434
+#: builtin/rebase.c:1463
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy erfordert --merge oder --interactive"
 
-#: builtin/rebase.c:1463
+#: builtin/rebase.c:1492
 msgid "apply options and merge options cannot be used together"
 msgstr ""
 "Optionen für \"am\" und Optionen für \"merge\" können nicht gemeinsam "
 "verwendet werden"
 
-#: builtin/rebase.c:1476
+#: builtin/rebase.c:1505
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "Unbekanntes Rebase-Backend: %s"
 
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1534
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec erfordert --exec oder --interactive"
 
-#: builtin/rebase.c:1536
+#: builtin/rebase.c:1565
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "Ungültiger Upstream '%s'"
 
-#: builtin/rebase.c:1542
+#: builtin/rebase.c:1571
 msgid "Could not create new root commit"
 msgstr "Konnte neuen Root-Commit nicht erstellen."
 
-#: builtin/rebase.c:1568
+#: builtin/rebase.c:1597
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr "'%s': benötige genau eine Merge-Basis mit dem Branch"
 
-#: builtin/rebase.c:1571
+#: builtin/rebase.c:1600
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "'%s': benötige genau eine Merge-Basis"
 
-#: builtin/rebase.c:1580
+#: builtin/rebase.c:1609
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "'%s' zeigt auf keinen gültigen Commit."
 
-#: builtin/rebase.c:1607
+#: builtin/rebase.c:1636
 #, c-format
 msgid "no such branch/commit '%s'"
 msgstr "Branch/Commit '%s' nicht gefunden"
 
-#: builtin/rebase.c:1618 builtin/submodule--helper.c:39
-#: builtin/submodule--helper.c:2659
+#: builtin/rebase.c:1647 builtin/submodule--helper.c:43
+#: builtin/submodule--helper.c:2477
 #, c-format
 msgid "No such ref: %s"
 msgstr "Referenz nicht gefunden: %s"
 
-#: builtin/rebase.c:1629
+#: builtin/rebase.c:1658
 msgid "Could not resolve HEAD to a revision"
 msgstr "Konnte HEAD zu keinem Commit auflösen."
 
-#: builtin/rebase.c:1650
+#: builtin/rebase.c:1679
 msgid "Please commit or stash them."
 msgstr "Bitte committen Sie die Änderungen oder benutzen Sie \"stash\"."
 
-#: builtin/rebase.c:1686
-#, c-format
-msgid "could not switch to %s"
-msgstr "Konnte nicht zu %s wechseln."
-
-#: builtin/rebase.c:1697
+#: builtin/rebase.c:1714
 msgid "HEAD is up to date."
 msgstr "HEAD ist aktuell."
 
-#: builtin/rebase.c:1699
+#: builtin/rebase.c:1716
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "Aktueller Branch %s ist auf dem neuesten Stand.\n"
 
-#: builtin/rebase.c:1707
+#: builtin/rebase.c:1724
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD ist aktuell, Rebase erzwungen."
 
-#: builtin/rebase.c:1709
+#: builtin/rebase.c:1726
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "Aktueller Branch %s ist auf dem neuesten Stand, Rebase erzwungen.\n"
 
-#: builtin/rebase.c:1717
+#: builtin/rebase.c:1734
 msgid "The pre-rebase hook refused to rebase."
 msgstr "Der \"pre-rebase hook\" hat den Rebase zurückgewiesen."
 
-#: builtin/rebase.c:1724
+#: builtin/rebase.c:1741
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Änderungen zu %s:\n"
 
-#: builtin/rebase.c:1727
+#: builtin/rebase.c:1744
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Änderungen von %s zu %s:\n"
 
-#: builtin/rebase.c:1752
+#: builtin/rebase.c:1769
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "Zunächst wird der Branch zurückgespult, um Ihre Änderungen darauf neu "
 "anzuwenden...\n"
 
-#: builtin/rebase.c:1761
+#: builtin/rebase.c:1781
 msgid "Could not detach HEAD"
 msgstr "Konnte HEAD nicht loslösen."
 
-#: builtin/rebase.c:1770
+#: builtin/rebase.c:1790
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Spule %s vor zu %s.\n"
@@ -20891,7 +21357,7 @@ msgstr "Spule %s vor zu %s.\n"
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack <Git-Verzeichnis>"
 
-#: builtin/receive-pack.c:1275
+#: builtin/receive-pack.c:1263
 msgid ""
 "By default, updating the current branch in a non-bare repository\n"
 "is denied, because it will make the index and work tree inconsistent\n"
@@ -20923,7 +21389,7 @@ msgstr ""
 "setzen Sie die Konfigurationsvariable 'receive.denyCurrentBranch' auf\n"
 "'refuse'."
 
-#: builtin/receive-pack.c:1295
+#: builtin/receive-pack.c:1283
 msgid ""
 "By default, deleting the current branch is denied, because the next\n"
 "'git clone' won't result in any file checked out, causing confusion.\n"
@@ -20944,79 +21410,116 @@ msgstr ""
 "\n"
 "Um diese Meldung zu unterdrücken, setzen Sie die Variable auf 'refuse'."
 
-#: builtin/receive-pack.c:2474
+#: builtin/receive-pack.c:2476
 msgid "quiet"
 msgstr "weniger Ausgaben"
 
-#: builtin/receive-pack.c:2489
+#: builtin/receive-pack.c:2491
 msgid "you must specify a directory"
 msgstr "Sie müssen ein Verzeichnis angeben"
 
-#: builtin/reflog.c:17
+#: builtin/reflog.c:9
+msgid "git reflog [show] [<log-options>] [<ref>]"
+msgstr "git reflog [show] [<log-Optionen>] [<Referenz>]"
+
+#: builtin/reflog.c:12
 msgid ""
-"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<refs>..."
+"git reflog expire [--expire=<time>] [--expire-unreachable=<time>]\n"
+"                  [--rewrite] [--updateref] [--stale-fix]\n"
+"                  [--dry-run | -n] [--verbose] [--all [--single-worktree] | "
+"<refs>...]"
 msgstr ""
-"git reflog expire [--expire=<Zeit>] [--expire-unreachable=<Zeit>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<Referenzen>..."
+"git reflog expire [--expire=<Zeit>] [--expire-unreachable=<Zeit>]\n"
+"                  [--rewrite] [--updateref] [--stale-fix]\n"
+"                  [--dry-run | -n] [--verbose] [--all [--single-worktree] | "
+"<Referenzen>...]"
 
-#: builtin/reflog.c:22
+#: builtin/reflog.c:17
 msgid ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] "
-"<refs>..."
+"git reflog delete [--rewrite] [--updateref]\n"
+"                  [--dry-run | -n] [--verbose] <ref>@{<specifier>}..."
 msgstr ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] "
-"<Referenzen>..."
+"git reflog delete [--rewrite] [--updateref]\n"
+"                  [--dry-run | -n] [--verbose] "
+"<Referenz>@{<Spezifikation>}..."
 
-#: builtin/reflog.c:25
+#: builtin/reflog.c:21
 msgid "git reflog exists <ref>"
 msgstr "git reflog exists <Referenz>"
 
-#: builtin/reflog.c:585 builtin/reflog.c:590
+#: builtin/reflog.c:197 builtin/reflog.c:211
 #, c-format
-msgid "'%s' is not a valid timestamp"
-msgstr "'%s' ist kein gültiger Zeitstempel"
+msgid "invalid timestamp '%s' given to '--%s'"
+msgstr "ungültiger Zeitstempel '%s' für '--%s'"
+
+#: builtin/reflog.c:240 builtin/reflog.c:359
+msgid "do not actually prune any entries"
+msgstr "Einträge nicht wirklich löschen"
+
+#: builtin/reflog.c:243 builtin/reflog.c:362
+msgid ""
+"rewrite the old SHA1 with the new SHA1 of the entry that now precedes it"
+msgstr ""
+"den alten SHA1 mit dem neuen SHA1 des Eintrags, der ihm jetzt vorausgeht, "
+"umschreiben"
+
+#: builtin/reflog.c:246 builtin/reflog.c:365
+msgid "update the reference to the value of the top reflog entry"
+msgstr "den Verweis auf den Wert des obersten Reflog-Eintrags aktualisieren"
+
+#: builtin/reflog.c:248 builtin/reflog.c:367
+msgid "print extra information on screen"
+msgstr "gebe zusätzliche Informationen auf dem Bildschirm aus"
+
+#: builtin/reflog.c:249 builtin/reflog.c:253
+msgid "timestamp"
+msgstr "Zeitstempel"
+
+#: builtin/reflog.c:250
+msgid "prune entries older than the specified time"
+msgstr "lösche Einträge älter als die angegebene Zeit"
+
+#: builtin/reflog.c:254
+msgid ""
+"prune entries older than <time> that are not reachable from the current tip "
+"of the branch"
+msgstr ""
+"entferne Einträge älter als <Zeit>, die nicht von der aktuellen Spitze des "
+"Branches erreichbar sind"
+
+#: builtin/reflog.c:258
+msgid "prune any reflog entries that point to broken commits"
+msgstr "lösche alle Reflog-Einträge die auf einen fehlerhaften Commit zeigen"
+
+#: builtin/reflog.c:259
+msgid "process the reflogs of all references"
+msgstr "Reflogs von allen Referenzen verarbeiten"
+
+#: builtin/reflog.c:261
+msgid "limits processing to reflogs from the current worktree only"
+msgstr ""
+"Verarbeitung der Reflogs auf das aktuelle Arbeitsverzeichnis beschränken"
 
-#: builtin/reflog.c:631
+#: builtin/reflog.c:294
 #, c-format
 msgid "Marking reachable objects..."
 msgstr "Markiere nicht erreichbare Objekte..."
 
-#: builtin/reflog.c:675
+#: builtin/reflog.c:338
 #, c-format
 msgid "%s points nowhere!"
 msgstr "%s zeigt auf nichts!"
 
-#: builtin/reflog.c:731
+#: builtin/reflog.c:374
 msgid "no reflog specified to delete"
 msgstr "Kein Reflog zum Löschen angegeben."
 
-#: builtin/reflog.c:742
-#, c-format
-msgid "not a reflog: %s"
-msgstr "Kein Reflog: %s"
-
-#: builtin/reflog.c:747
-#, c-format
-msgid "no reflog for '%s'"
-msgstr "Kein Reflog für '%s'."
-
-#: builtin/reflog.c:794
+#: builtin/reflog.c:396
 #, c-format
 msgid "invalid ref format: %s"
 msgstr "Ungültiges Format für Referenzen: %s"
 
-#: builtin/reflog.c:803
-msgid "git reflog [ show | expire | delete | exists ]"
-msgstr "git reflog [ show | expire | delete | exists ]"
-
-#: builtin/remote.c:17
-msgid "git remote [-v | --verbose]"
-msgstr "git remote [-v | --verbose]"
-
-#: builtin/remote.c:18
+#: builtin/remote.c:19
 msgid ""
 "git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--"
 "mirror=<fetch|push>] <name> <url>"
@@ -21024,87 +21527,87 @@ msgstr ""
 "git remote add [-t <Branch>] [-m <master>] [-f] [--tags | --no-tags] [--"
 "mirror=<fetch|push>] <Name> <URL>"
 
-#: builtin/remote.c:19 builtin/remote.c:39
-msgid "git remote rename <old> <new>"
-msgstr "git remote rename <alt> <neu>"
+#: builtin/remote.c:20 builtin/remote.c:40
+msgid "git remote rename [--[no-]progress] <old> <new>"
+msgstr "git remote rename [--[no-]progress] <alt> <neu>"
 
-#: builtin/remote.c:20 builtin/remote.c:44
+#: builtin/remote.c:21 builtin/remote.c:45
 msgid "git remote remove <name>"
 msgstr "git remote remove <Name>"
 
-#: builtin/remote.c:21 builtin/remote.c:49
+#: builtin/remote.c:22 builtin/remote.c:50
 msgid "git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"
 msgstr "git remote set-head <Name> (-a | --auto | -d | --delete | <Branch>)"
 
-#: builtin/remote.c:22
+#: builtin/remote.c:23
 msgid "git remote [-v | --verbose] show [-n] <name>"
 msgstr "git remote [-v | --verbose] show [-n] <Name>"
 
-#: builtin/remote.c:23
+#: builtin/remote.c:24
 msgid "git remote prune [-n | --dry-run] <name>"
 msgstr "git remote prune [-n | --dry-run] <Name>"
 
-#: builtin/remote.c:24
+#: builtin/remote.c:25
 msgid ""
 "git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
 msgstr ""
 "git remote [-v | --verbose] update [-p | --prune] [(<Gruppe> | <Remote>)...]"
 
-#: builtin/remote.c:25
+#: builtin/remote.c:26
 msgid "git remote set-branches [--add] <name> <branch>..."
 msgstr "git remote set-branches [--add] <Name> <Branch>..."
 
-#: builtin/remote.c:26 builtin/remote.c:75
+#: builtin/remote.c:27 builtin/remote.c:76
 msgid "git remote get-url [--push] [--all] <name>"
 msgstr "git remote get-url [--push] [--all] <Name>"
 
-#: builtin/remote.c:27 builtin/remote.c:80
+#: builtin/remote.c:28 builtin/remote.c:81
 msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]"
 msgstr "git remote set-url [--push] <Name> <neueURL> [<alteURL>]"
 
-#: builtin/remote.c:28 builtin/remote.c:81
+#: builtin/remote.c:29 builtin/remote.c:82
 msgid "git remote set-url --add <name> <newurl>"
 msgstr "git remote set-url --add <Name> <neueURL>"
 
-#: builtin/remote.c:29 builtin/remote.c:82
+#: builtin/remote.c:30 builtin/remote.c:83
 msgid "git remote set-url --delete <name> <url>"
 msgstr "git remote set-url --delete <Name> <URL>"
 
-#: builtin/remote.c:34
+#: builtin/remote.c:35
 msgid "git remote add [<options>] <name> <url>"
 msgstr "git remote add [<Optionen>] <Name> <URL>"
 
-#: builtin/remote.c:54
+#: builtin/remote.c:55
 msgid "git remote set-branches <name> <branch>..."
 msgstr "git remote set-branches <Name> <Branch>..."
 
-#: builtin/remote.c:55
+#: builtin/remote.c:56
 msgid "git remote set-branches --add <name> <branch>..."
 msgstr "git remote set-branches --add <Name> <Branch>..."
 
-#: builtin/remote.c:60
+#: builtin/remote.c:61
 msgid "git remote show [<options>] <name>"
 msgstr "git remote show [<Optionen>] <Name>"
 
-#: builtin/remote.c:65
+#: builtin/remote.c:66
 msgid "git remote prune [<options>] <name>"
 msgstr "git remote prune [<Optionen>] <Name>"
 
-#: builtin/remote.c:70
+#: builtin/remote.c:71
 msgid "git remote update [<options>] [<group> | <remote>]..."
 msgstr "git remote update [<Optionen>] [<Gruppe> | <externesRepository>]..."
 
-#: builtin/remote.c:99
+#: builtin/remote.c:100
 #, c-format
 msgid "Updating %s"
 msgstr "Aktualisiere %s"
 
-#: builtin/remote.c:101
+#: builtin/remote.c:102
 #, c-format
 msgid "Could not fetch %s"
 msgstr "Konnte nicht von %s anfordern"
 
-#: builtin/remote.c:131
+#: builtin/remote.c:132
 msgid ""
 "--mirror is dangerous and deprecated; please\n"
 "\t use --mirror=fetch or --mirror=push instead"
@@ -21112,82 +21615,82 @@ msgstr ""
 "--mirror ist gefährlich und veraltet; bitte\n"
 "\t benutzen Sie stattdessen --mirror=fetch oder --mirror=push"
 
-#: builtin/remote.c:148
+#: builtin/remote.c:149
 #, c-format
 msgid "unknown mirror argument: %s"
 msgstr "unbekanntes Argument für Option mirror: %s"
 
-#: builtin/remote.c:164
+#: builtin/remote.c:165
 msgid "fetch the remote branches"
 msgstr "die Remote-Branches anfordern"
 
-#: builtin/remote.c:166
+#: builtin/remote.c:167
 msgid "import all tags and associated objects when fetching"
 msgstr "alle Tags und verbundene Objekte beim Anfordern importieren"
 
-#: builtin/remote.c:169
+#: builtin/remote.c:170
 msgid "or do not fetch any tag at all (--no-tags)"
 msgstr "oder fordere gar keine Tags an (--no-tags)"
 
-#: builtin/remote.c:171
+#: builtin/remote.c:172
 msgid "branch(es) to track"
 msgstr "Branch(es) zur Übernahme"
 
-#: builtin/remote.c:172
+#: builtin/remote.c:173
 msgid "master branch"
 msgstr "Hauptbranch"
 
-#: builtin/remote.c:174
+#: builtin/remote.c:175
 msgid "set up remote as a mirror to push to or fetch from"
 msgstr ""
 "Aufsetzen des Remote-Repositories als Spiegel-Repository für \"push\" und "
 "\"fetch\""
 
-#: builtin/remote.c:186
+#: builtin/remote.c:187
 msgid "specifying a master branch makes no sense with --mirror"
 msgstr ""
 "--mirror kann nicht mit der Angabe eines Hauptbranches verwendet werden"
 
-#: builtin/remote.c:188
+#: builtin/remote.c:189
 msgid "specifying branches to track makes sense only with fetch mirrors"
 msgstr ""
 "die Angabe von zu folgenden Branches kann nur mit dem Anfordern von "
 "Spiegelarchiven verwendet werden"
 
-#: builtin/remote.c:195 builtin/remote.c:705
+#: builtin/remote.c:196 builtin/remote.c:716
 #, c-format
 msgid "remote %s already exists."
 msgstr "externes Repository %s existiert bereits."
 
-#: builtin/remote.c:240
+#: builtin/remote.c:241
 #, c-format
 msgid "Could not setup master '%s'"
 msgstr "Konnte symbolische Referenz für Hauptbranch von '%s' nicht einrichten"
 
-#: builtin/remote.c:322
+#: builtin/remote.c:323
 #, c-format
 msgid "unhandled branch.%s.rebase=%s; assuming 'true'"
 msgstr "unbehandeltes branch.%s.rebase=%s; 'true' wird angenommen"
 
-#: builtin/remote.c:366
+#: builtin/remote.c:367
 #, c-format
 msgid "Could not get fetch map for refspec %s"
 msgstr "Konnte Fetch-Map für Refspec %s nicht bekommen"
 
-#: builtin/remote.c:460 builtin/remote.c:468
+#: builtin/remote.c:461 builtin/remote.c:469
 msgid "(matching)"
 msgstr "(übereinstimmend)"
 
-#: builtin/remote.c:472
+#: builtin/remote.c:473
 msgid "(delete)"
 msgstr "(lösche)"
 
-#: builtin/remote.c:660
+#: builtin/remote.c:664
 #, c-format
 msgid "could not set '%s'"
 msgstr "konnte '%s' nicht setzen"
 
-#: builtin/remote.c:665
+#: builtin/remote.c:669
 #, c-format
 msgid ""
 "The %s configuration remote.pushDefault in:\n"
@@ -21198,17 +21701,17 @@ msgstr ""
 "\t%s:%d\n"
 "benennt jetzt das nicht existierende Remote-Repository '%s'"
 
-#: builtin/remote.c:696 builtin/remote.c:841 builtin/remote.c:948
+#: builtin/remote.c:707 builtin/remote.c:866 builtin/remote.c:973
 #, c-format
 msgid "No such remote: '%s'"
 msgstr "Remote-Repository nicht gefunden: '%s'"
 
-#: builtin/remote.c:715
+#: builtin/remote.c:726
 #, c-format
 msgid "Could not rename config section '%s' to '%s'"
 msgstr "Konnte Sektion '%s' in Konfiguration nicht nach '%s' umbenennen"
 
-#: builtin/remote.c:735
+#: builtin/remote.c:746
 #, c-format
 msgid ""
 "Not updating non-default fetch refspec\n"
@@ -21219,17 +21722,21 @@ msgstr ""
 "\t%s\n"
 "\tBitte aktualisieren Sie, falls notwendig, die Konfiguration manuell."
 
-#: builtin/remote.c:775
+#: builtin/remote.c:783
+msgid "Renaming remote references"
+msgstr "Umbenennen von Remote-Referenzen"
+
+#: builtin/remote.c:794
 #, c-format
 msgid "deleting '%s' failed"
 msgstr "Konnte '%s' nicht löschen"
 
-#: builtin/remote.c:809
+#: builtin/remote.c:832
 #, c-format
 msgid "creating '%s' failed"
 msgstr "Konnte '%s' nicht erstellen"
 
-#: builtin/remote.c:887
+#: builtin/remote.c:912
 msgid ""
 "Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
 "to delete it, use:"
@@ -21245,118 +21752,118 @@ msgstr[1] ""
 "entfernt;\n"
 "um diese zu entfernen, benutzen Sie:"
 
-#: builtin/remote.c:901
+#: builtin/remote.c:926
 #, c-format
 msgid "Could not remove config section '%s'"
 msgstr "Konnte Sektion '%s' nicht aus Konfiguration entfernen"
 
-#: builtin/remote.c:1009
+#: builtin/remote.c:1034
 #, c-format
 msgid " new (next fetch will store in remotes/%s)"
 msgstr " neu (wird bei nächstem \"fetch\" in remotes/%s gespeichert)"
 
-#: builtin/remote.c:1012
+#: builtin/remote.c:1037
 msgid " tracked"
 msgstr " gefolgt"
 
-#: builtin/remote.c:1014
+#: builtin/remote.c:1039
 msgid " stale (use 'git remote prune' to remove)"
 msgstr " veraltet (benutzen Sie 'git remote prune' zum Löschen)"
 
-#: builtin/remote.c:1016
+#: builtin/remote.c:1041
 msgid " ???"
 msgstr " ???"
 
-#: builtin/remote.c:1057
+#: builtin/remote.c:1082
 #, c-format
 msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
 msgstr "ungültiges branch.%s.merge; kann Rebase nicht auf > 1 Branch ausführen"
 
-#: builtin/remote.c:1066
+#: builtin/remote.c:1091
 #, c-format
 msgid "rebases interactively onto remote %s"
 msgstr "interaktiver Rebase auf Remote-Branch %s"
 
-#: builtin/remote.c:1068
+#: builtin/remote.c:1093
 #, c-format
 msgid "rebases interactively (with merges) onto remote %s"
 msgstr "interaktiver Rebase (mit Merges) auf Remote-Branch %s"
 
-#: builtin/remote.c:1071
+#: builtin/remote.c:1096
 #, c-format
 msgid "rebases onto remote %s"
 msgstr "Rebase auf Remote-Branch %s"
 
-#: builtin/remote.c:1075
+#: builtin/remote.c:1100
 #, c-format
 msgid " merges with remote %s"
 msgstr " führt mit Remote-Branch %s zusammen"
 
-#: builtin/remote.c:1078
+#: builtin/remote.c:1103
 #, c-format
 msgid "merges with remote %s"
 msgstr "führt mit Remote-Branch %s zusammen"
 
-#: builtin/remote.c:1081
+#: builtin/remote.c:1106
 #, c-format
 msgid "%-*s    and with remote %s\n"
 msgstr "%-*s    und mit Remote-Branch %s\n"
 
-#: builtin/remote.c:1124
+#: builtin/remote.c:1149
 msgid "create"
 msgstr "erstellt"
 
-#: builtin/remote.c:1127
+#: builtin/remote.c:1152
 msgid "delete"
 msgstr "gelöscht"
 
-#: builtin/remote.c:1131
+#: builtin/remote.c:1156
 msgid "up to date"
 msgstr "aktuell"
 
-#: builtin/remote.c:1134
+#: builtin/remote.c:1159
 msgid "fast-forwardable"
 msgstr "vorspulbar"
 
-#: builtin/remote.c:1137
+#: builtin/remote.c:1162
 msgid "local out of date"
 msgstr "lokal nicht aktuell"
 
-#: builtin/remote.c:1144
+#: builtin/remote.c:1169
 #, c-format
 msgid "    %-*s forces to %-*s (%s)"
 msgstr "    %-*s erzwingt Versandt nach %-*s (%s)"
 
-#: builtin/remote.c:1147
+#: builtin/remote.c:1172
 #, c-format
 msgid "    %-*s pushes to %-*s (%s)"
 msgstr "    %-*s versendet nach %-*s (%s)"
 
-#: builtin/remote.c:1151
+#: builtin/remote.c:1176
 #, c-format
 msgid "    %-*s forces to %s"
 msgstr "    %-*s erzwingt Versand nach %s"
 
-#: builtin/remote.c:1154
+#: builtin/remote.c:1179
 #, c-format
 msgid "    %-*s pushes to %s"
 msgstr "    %-*s versendet nach %s"
 
-#: builtin/remote.c:1222
+#: builtin/remote.c:1247
 msgid "do not query remotes"
 msgstr "keine Abfrage von Remote-Repositories"
 
-#: builtin/remote.c:1243
+#: builtin/remote.c:1268
 #, c-format
 msgid "* remote %s"
 msgstr "* Remote-Repository %s"
 
-#: builtin/remote.c:1244
+#: builtin/remote.c:1269
 #, c-format
 msgid "  Fetch URL: %s"
 msgstr "  URL zum Abholen: %s"
 
-#: builtin/remote.c:1245 builtin/remote.c:1261 builtin/remote.c:1398
+#: builtin/remote.c:1270 builtin/remote.c:1286 builtin/remote.c:1423
 msgid "(no URL)"
 msgstr "(keine URL)"
 
@@ -21364,25 +21871,25 @@ msgstr "(keine URL)"
 #. with the one in " Fetch URL: %s"
 #. translation.
 #.
-#: builtin/remote.c:1259 builtin/remote.c:1261
+#: builtin/remote.c:1284 builtin/remote.c:1286
 #, c-format
 msgid "  Push  URL: %s"
 msgstr "  URL zum Versenden: %s"
 
-#: builtin/remote.c:1263 builtin/remote.c:1265 builtin/remote.c:1267
+#: builtin/remote.c:1288 builtin/remote.c:1290 builtin/remote.c:1292
 #, c-format
 msgid "  HEAD branch: %s"
 msgstr "  Hauptbranch: %s"
 
-#: builtin/remote.c:1263
+#: builtin/remote.c:1288
 msgid "(not queried)"
 msgstr "(nicht abgefragt)"
 
-#: builtin/remote.c:1265
+#: builtin/remote.c:1290
 msgid "(unknown)"
 msgstr "(unbekannt)"
 
-#: builtin/remote.c:1269
+#: builtin/remote.c:1294
 #, c-format
 msgid ""
 "  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
@@ -21390,166 +21897,166 @@ msgstr ""
 "  Hauptbranch (externer HEAD ist mehrdeutig, könnte einer der folgenden "
 "sein):\n"
 
-#: builtin/remote.c:1281
+#: builtin/remote.c:1306
 #, c-format
 msgid "  Remote branch:%s"
 msgid_plural "  Remote branches:%s"
 msgstr[0] "  Remote-Branch:%s"
 msgstr[1] "  Remote-Branches:%s"
 
-#: builtin/remote.c:1284 builtin/remote.c:1310
+#: builtin/remote.c:1309 builtin/remote.c:1335
 msgid " (status not queried)"
 msgstr " (Zustand nicht abgefragt)"
 
-#: builtin/remote.c:1293
+#: builtin/remote.c:1318
 msgid "  Local branch configured for 'git pull':"
 msgid_plural "  Local branches configured for 'git pull':"
 msgstr[0] "  Lokaler Branch konfiguriert für 'git pull':"
 msgstr[1] "  Lokale Branches konfiguriert für 'git pull':"
 
-#: builtin/remote.c:1301
+#: builtin/remote.c:1326
 msgid "  Local refs will be mirrored by 'git push'"
 msgstr "  Lokale Referenzen werden von 'git push' gespiegelt"
 
-#: builtin/remote.c:1307
+#: builtin/remote.c:1332
 #, c-format
 msgid "  Local ref configured for 'git push'%s:"
 msgid_plural "  Local refs configured for 'git push'%s:"
 msgstr[0] "  Lokale Referenz konfiguriert für 'git push'%s:"
 msgstr[1] "  Lokale Referenzen konfiguriert für 'git push'%s:"
 
-#: builtin/remote.c:1328
+#: builtin/remote.c:1353
 msgid "set refs/remotes/<name>/HEAD according to remote"
 msgstr "setzt refs/remotes/<Name>/HEAD gemäß dem Remote-Repository"
 
-#: builtin/remote.c:1330
+#: builtin/remote.c:1355
 msgid "delete refs/remotes/<name>/HEAD"
 msgstr "entfernt refs/remotes/<Name>/HEAD"
 
-#: builtin/remote.c:1344
+#: builtin/remote.c:1369
 msgid "Cannot determine remote HEAD"
 msgstr "Kann HEAD des Remote-Repositories nicht bestimmen"
 
-#: builtin/remote.c:1346
+#: builtin/remote.c:1371
 msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
 msgstr ""
 "Mehrere Hauptbranches im Remote-Repository. Bitte wählen Sie explizit einen "
 "aus mit:"
 
-#: builtin/remote.c:1356
+#: builtin/remote.c:1381
 #, c-format
 msgid "Could not delete %s"
 msgstr "Konnte %s nicht entfernen"
 
-#: builtin/remote.c:1364
+#: builtin/remote.c:1389
 #, c-format
 msgid "Not a valid ref: %s"
 msgstr "keine gültige Referenz: %s"
 
-#: builtin/remote.c:1366
+#: builtin/remote.c:1391
 #, c-format
 msgid "Could not setup %s"
 msgstr "Konnte %s nicht einrichten"
 
-#: builtin/remote.c:1384
+#: builtin/remote.c:1409
 #, c-format
 msgid " %s will become dangling!"
 msgstr " %s wird unreferenziert!"
 
-#: builtin/remote.c:1385
+#: builtin/remote.c:1410
 #, c-format
 msgid " %s has become dangling!"
 msgstr " %s wurde unreferenziert!"
 
-#: builtin/remote.c:1394
+#: builtin/remote.c:1419
 #, c-format
 msgid "Pruning %s"
 msgstr "entferne veraltete Branches von %s"
 
-#: builtin/remote.c:1395
+#: builtin/remote.c:1420
 #, c-format
 msgid "URL: %s"
 msgstr "URL: %s"
 
-#: builtin/remote.c:1411
+#: builtin/remote.c:1436
 #, c-format
 msgid " * [would prune] %s"
 msgstr " * [würde veralteten Branch entfernen] %s"
 
-#: builtin/remote.c:1414
+#: builtin/remote.c:1439
 #, c-format
 msgid " * [pruned] %s"
 msgstr "* [veralteten Branch entfernt] %s"
 
-#: builtin/remote.c:1459
+#: builtin/remote.c:1484
 msgid "prune remotes after fetching"
 msgstr "entferne veraltete Branches im Remote-Repository nach \"fetch\""
 
-#: builtin/remote.c:1523 builtin/remote.c:1579 builtin/remote.c:1649
+#: builtin/remote.c:1548 builtin/remote.c:1604 builtin/remote.c:1674
 #, c-format
 msgid "No such remote '%s'"
 msgstr "Remote-Repository '%s' nicht gefunden"
 
-#: builtin/remote.c:1541
+#: builtin/remote.c:1566
 msgid "add branch"
 msgstr "Branch hinzufügen"
 
-#: builtin/remote.c:1548
+#: builtin/remote.c:1573
 msgid "no remote specified"
 msgstr "kein Remote-Repository angegeben"
 
-#: builtin/remote.c:1565
+#: builtin/remote.c:1590
 msgid "query push URLs rather than fetch URLs"
 msgstr "nur URLs für Push ausgeben"
 
-#: builtin/remote.c:1567
+#: builtin/remote.c:1592
 msgid "return all URLs"
 msgstr "alle URLs ausgeben"
 
-#: builtin/remote.c:1597
+#: builtin/remote.c:1622
 #, c-format
 msgid "no URLs configured for remote '%s'"
 msgstr "Keine URLs für Remote-Repository '%s' konfiguriert."
 
-#: builtin/remote.c:1623
+#: builtin/remote.c:1648
 msgid "manipulate push URLs"
 msgstr "URLs für \"push\" manipulieren"
 
-#: builtin/remote.c:1625
+#: builtin/remote.c:1650
 msgid "add URL"
 msgstr "URL hinzufügen"
 
-#: builtin/remote.c:1627
+#: builtin/remote.c:1652
 msgid "delete URLs"
 msgstr "URLs löschen"
 
-#: builtin/remote.c:1634
+#: builtin/remote.c:1659
 msgid "--add --delete doesn't make sense"
 msgstr "--add und --delete können nicht gemeinsam verwendet werden"
 
-#: builtin/remote.c:1675
+#: builtin/remote.c:1700
 #, c-format
 msgid "Invalid old URL pattern: %s"
 msgstr "ungültiges altes URL Format: %s"
 
-#: builtin/remote.c:1683
+#: builtin/remote.c:1708
 #, c-format
 msgid "No such URL found: %s"
 msgstr "URL nicht gefunden: %s"
 
-#: builtin/remote.c:1685
+#: builtin/remote.c:1710
 msgid "Will not delete all non-push URLs"
 msgstr "Werde keine URLs entfernen, die nicht für \"push\" bestimmt sind"
 
-#: builtin/remote.c:1702
+#: builtin/remote.c:1727
 msgid "be verbose; must be placed before a subcommand"
 msgstr "erweiterte Ausgaben; muss vor einem Unterbefehl angegeben werden"
 
-#: builtin/repack.c:28
+#: builtin/repack.c:29
 msgid "git repack [<options>]"
 msgstr "git repack [<Optionen>]"
 
-#: builtin/repack.c:33
+#: builtin/repack.c:34
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -21558,153 +22065,153 @@ msgstr ""
 "--no-write-bitmap-index oder deaktivieren Sie die pack.writebitmaps\n"
 "Konfiguration."
 
-#: builtin/repack.c:201
+#: builtin/repack.c:206
 msgid "could not start pack-objects to repack promisor objects"
 msgstr ""
 "Konnte 'pack-objects' für das Neupacken von Objekten aus partiell geklonten\n"
 "Remote-Repositories nicht starten."
 
-#: builtin/repack.c:275 builtin/repack.c:820
+#: builtin/repack.c:280 builtin/repack.c:824
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 "repack: Erwarte Zeilen mit vollständiger Hex-Objekt-ID nur von pack-objects."
 
-#: builtin/repack.c:299
+#: builtin/repack.c:304
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr ""
 "Konnte 'pack-objects' für das Neupacken von Objekten aus partiell geklonten\n"
 "Remote-Repositories nicht abschließen."
 
-#: builtin/repack.c:314
+#: builtin/repack.c:319
 #, c-format
 msgid "cannot open index for %s"
 msgstr "konnte Index für %s nicht öffnen"
 
-#: builtin/repack.c:373
+#: builtin/repack.c:378
 #, c-format
 msgid "pack %s too large to consider in geometric progression"
 msgstr ""
 "Paket %s zu groß, um es bei der geometrischen Progression zu berücksichtigen"
 
-#: builtin/repack.c:406 builtin/repack.c:413 builtin/repack.c:418
+#: builtin/repack.c:411 builtin/repack.c:418 builtin/repack.c:423
 #, c-format
 msgid "pack %s too large to roll up"
 msgstr "Paket %s zu groß zum Aufrollen"
 
-#: builtin/repack.c:498
+#: builtin/repack.c:503
 #, c-format
 msgid "could not open tempfile %s for writing"
 msgstr "konnte temporäre Datei '%s' nicht zum Schreiben öffnen"
 
-#: builtin/repack.c:516
+#: builtin/repack.c:521
 msgid "could not close refs snapshot tempfile"
 msgstr "konnte temporäre Referenzen-Snapshot-Datei nicht schließen"
 
-#: builtin/repack.c:630
+#: builtin/repack.c:634
 msgid "pack everything in a single pack"
 msgstr "alles in eine einzige Pack-Datei packen"
 
-#: builtin/repack.c:632
+#: builtin/repack.c:636
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "genau wie -a, unerreichbare Objekte werden aber nicht gelöscht"
 
-#: builtin/repack.c:635
+#: builtin/repack.c:639
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "redundante Pakete entfernen und \"git-prune-packed\" ausführen"
 
-#: builtin/repack.c:637
+#: builtin/repack.c:641
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "--no-reuse-delta an git-pack-objects übergeben"
 
-#: builtin/repack.c:639
+#: builtin/repack.c:643
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "--no-reuse-object an git-pack-objects übergeben"
 
-#: builtin/repack.c:641
+#: builtin/repack.c:645
 msgid "do not run git-update-server-info"
 msgstr "git-update-server-info nicht ausführen"
 
-#: builtin/repack.c:644
+#: builtin/repack.c:648
 msgid "pass --local to git-pack-objects"
 msgstr "--local an git-pack-objects übergeben"
 
-#: builtin/repack.c:646
+#: builtin/repack.c:650
 msgid "write bitmap index"
 msgstr "Bitmap-Index schreiben"
 
-#: builtin/repack.c:648
+#: builtin/repack.c:652
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "--delta-islands an git-pack-objects übergeben"
 
-#: builtin/repack.c:649
+#: builtin/repack.c:653
 msgid "approxidate"
 msgstr "Datumsangabe"
 
-#: builtin/repack.c:650
+#: builtin/repack.c:654
 msgid "with -A, do not loosen objects older than this"
 msgstr "mit -A, keine Objekte älter als dieses Datum löschen"
 
-#: builtin/repack.c:652
+#: builtin/repack.c:656
 msgid "with -a, repack unreachable objects"
 msgstr "mit -a, nicht erreichbare Objekte neu packen"
 
-#: builtin/repack.c:654
+#: builtin/repack.c:658
 msgid "size of the window used for delta compression"
 msgstr "Größe des Fensters für die Delta-Kompression"
 
-#: builtin/repack.c:655 builtin/repack.c:661
+#: builtin/repack.c:659 builtin/repack.c:665
 msgid "bytes"
 msgstr "Bytes"
 
-#: builtin/repack.c:656
+#: builtin/repack.c:660
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr ""
 "gleiches wie oben, aber die Speichergröße statt der Anzahl der Einträge "
 "limitieren"
 
-#: builtin/repack.c:658
+#: builtin/repack.c:662
 msgid "limits the maximum delta depth"
 msgstr "die maximale Delta-Tiefe limitieren"
 
-#: builtin/repack.c:660
+#: builtin/repack.c:664
 msgid "limits the maximum number of threads"
 msgstr "maximale Anzahl von Threads limitieren"
 
-#: builtin/repack.c:662
+#: builtin/repack.c:666
 msgid "maximum size of each packfile"
 msgstr "maximale Größe für jede Paketdatei"
 
-#: builtin/repack.c:664
+#: builtin/repack.c:668
 msgid "repack objects in packs marked with .keep"
 msgstr ""
 "Objekte umpacken, die sich in mit .keep markierten Pack-Dateien befinden"
 
-#: builtin/repack.c:666
+#: builtin/repack.c:670
 msgid "do not repack this pack"
 msgstr "dieses Paket nicht neu packen"
 
-#: builtin/repack.c:668
+#: builtin/repack.c:672
 msgid "find a geometric progression with factor <N>"
 msgstr "eine geometrische Progression mit Faktor <N> finden"
 
-#: builtin/repack.c:670
+#: builtin/repack.c:674
 msgid "write a multi-pack index of the resulting packs"
-msgstr "ein Multipack-Index des resultierenden Pakets schreiben"
+msgstr "ein Multi-Pack-Index des resultierenden Pakets schreiben"
 
-#: builtin/repack.c:680
+#: builtin/repack.c:684
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "kann Pack-Dateien in precious-objects Repository nicht löschen"
 
-#: builtin/repack.c:829
+#: builtin/repack.c:833
 msgid "Nothing new to pack."
 msgstr "Nichts Neues zum Packen."
 
-#: builtin/repack.c:859
+#: builtin/repack.c:863
 #, c-format
 msgid "missing required file: %s"
 msgstr "benötigte Datei fehlt: %s"
 
-#: builtin/repack.c:861
+#: builtin/repack.c:865
 #, c-format
 msgid "could not unlink: %s"
 msgstr "konnte nicht löschen: %s"
@@ -21721,10 +22228,6 @@ msgstr "git replace [-f] --edit <Objekt>"
 msgid "git replace [-f] --graft <commit> [<parent>...]"
 msgstr "git replace [-f] --graft <Commit> [<Eltern-Commit>...]"
 
-#: builtin/replace.c:25
-msgid "git replace [-f] --convert-graft-file"
-msgstr "git replace [-f] --convert-graft-file"
-
 #: builtin/replace.c:26
 msgid "git replace -d <object>..."
 msgstr "git replace -d <Objekt>..."
@@ -22028,98 +22531,94 @@ msgstr "Fehler beim Finden des \"Tree\"-Objektes von %s."
 msgid "HEAD is now at %s"
 msgstr "HEAD ist jetzt bei %s"
 
-#: builtin/reset.c:299
+#: builtin/reset.c:304
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Kann keinen '%s'-Reset durchführen, während ein Merge im Gange ist."
 
-#: builtin/reset.c:396 builtin/stash.c:606 builtin/stash.c:680
-#: builtin/stash.c:704
+#: builtin/reset.c:402 builtin/stash.c:606 builtin/stash.c:669
+#: builtin/stash.c:693
 msgid "be quiet, only report errors"
 msgstr "weniger Ausgaben, nur Fehler melden"
 
-#: builtin/reset.c:398
+#: builtin/reset.c:404
+msgid "skip refreshing the index after reset"
+msgstr "Aktualisierung des Indexes nach dem Zurücksetzen überspringen"
+
+#: builtin/reset.c:406
 msgid "reset HEAD and index"
 msgstr "HEAD und Index umsetzen"
 
-#: builtin/reset.c:399
+#: builtin/reset.c:407
 msgid "reset only HEAD"
 msgstr "nur HEAD umsetzen"
 
-#: builtin/reset.c:401 builtin/reset.c:403
+#: builtin/reset.c:409 builtin/reset.c:411
 msgid "reset HEAD, index and working tree"
 msgstr "HEAD, Index und Arbeitsverzeichnis umsetzen"
 
-#: builtin/reset.c:405
+#: builtin/reset.c:413
 msgid "reset HEAD but keep local changes"
 msgstr "HEAD umsetzen, aber lokale Änderungen behalten"
 
-#: builtin/reset.c:411
+#: builtin/reset.c:419
 msgid "record only the fact that removed paths will be added later"
 msgstr "nur speichern, dass gelöschte Pfade später hinzugefügt werden sollen"
 
-#: builtin/reset.c:445
+#: builtin/reset.c:452
 #, c-format
 msgid "Failed to resolve '%s' as a valid revision."
 msgstr "Konnte '%s' nicht als gültigen Commit auflösen."
 
-#: builtin/reset.c:453
+#: builtin/reset.c:460
 #, c-format
 msgid "Failed to resolve '%s' as a valid tree."
 msgstr "Konnte '%s' nicht als gültiges \"Tree\"-Objekt auflösen."
 
-#: builtin/reset.c:472
+#: builtin/reset.c:479
 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
 msgstr ""
 "--mixed mit Pfaden ist veraltet; benutzen Sie stattdessen 'git reset -- "
 "<Pfade>'."
 
-#: builtin/reset.c:474
+#: builtin/reset.c:481
 #, c-format
 msgid "Cannot do %s reset with paths."
 msgstr "Ein '%s'-Reset mit Pfaden ist nicht möglich."
 
-#: builtin/reset.c:489
+#: builtin/reset.c:496
 #, c-format
 msgid "%s reset is not allowed in a bare repository"
 msgstr "'%s'-Reset ist in einem Bare-Repository nicht erlaubt"
 
-#: builtin/reset.c:520
+#: builtin/reset.c:527
 msgid "Unstaged changes after reset:"
 msgstr "Nicht zum Commit vorgemerkte Änderungen nach Zurücksetzung:"
 
-#: builtin/reset.c:523
+#: builtin/reset.c:530
 #, c-format
 msgid ""
-"\n"
-"It took %.2f seconds to enumerate unstaged changes after reset.  You can\n"
-"use '--quiet' to avoid this.  Set the config setting reset.quiet to true\n"
-"to make this the default.\n"
+"It took %.2f seconds to refresh the index after reset.  You can use\n"
+"'--no-refresh' to avoid this."
 msgstr ""
-"\n"
-"Es dauerte %.2f Sekunden, um über die nach einem Reset nicht zum Commit\n"
-"vorgemerkten Änderungen zu zählen. Sie können '--quiet' benutzen, um\n"
-"das zu verhindern. Setzen Sie die Konfigurationseinstellung reset.quiet\n"
-"auf \"true\", um das zum Standard zu machen.\n"
+"Es dauerte %.2f Sekunden, um den Index nach dem Zurücksetzen zu\n"
+"aktualisieren. Sie können '--no-refresh' verwenden, um dies zu\n"
+"vermeiden."
 
-#: builtin/reset.c:541
+#: builtin/reset.c:547
 #, c-format
 msgid "Could not reset index file to revision '%s'."
 msgstr "Konnte Index-Datei nicht zu Commit '%s' setzen."
 
-#: builtin/reset.c:546
+#: builtin/reset.c:552
 msgid "Could not write new index file."
 msgstr "Konnte neue Index-Datei nicht schreiben."
 
-#: builtin/rev-list.c:602
-msgid "object filtering requires --objects"
-msgstr "Das Filtern von Objekten erfordert --objects."
-
-#: builtin/rev-list.c:674
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr "rev-list unterstützt keine Anzeige von Notizen"
 
-#: builtin/rev-list.c:679
+#: builtin/rev-list.c:664
 #, c-format
 msgid "marked counting and '%s' cannot be used together"
 msgstr "markiertes Zählen und '%s' können nicht gemeinsam verwendet werden"
@@ -22474,11 +22973,11 @@ msgstr "Feld"
 msgid "group by field"
 msgstr "Gruppieren nach Feld"
 
-#: builtin/shortlog.c:394
+#: builtin/shortlog.c:395
 msgid "too many arguments given outside repository"
 msgstr "zu viele Argumente außerhalb des Repositories angegeben"
 
-#: builtin/show-branch.c:13
+#: builtin/show-branch.c:14
 msgid ""
 "git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
 "                [--current] [--color[=<when>] | --no-color] [--sparse]\n"
@@ -22490,120 +22989,120 @@ msgstr ""
 "                [--more=<n> | --list | --independent | --merge-base]\n"
 "                [--no-name | --sha1-name] [--topics] [(<Commit> | <glob>)...]"
 
-#: builtin/show-branch.c:17
+#: builtin/show-branch.c:18
 msgid "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"
 msgstr "git show-branch (-g | --reflog)[=<n>[,<Basis>]] [--list] [<Referenz>]"
 
-#: builtin/show-branch.c:395
+#: builtin/show-branch.c:396
 #, c-format
 msgid "ignoring %s; cannot handle more than %d ref"
 msgid_plural "ignoring %s; cannot handle more than %d refs"
 msgstr[0] "ignoriere %s; kann nicht mehr als %d Referenz behandeln"
 msgstr[1] "ignoriere %s; kann nicht mehr als %d Referenzen behandeln"
 
-#: builtin/show-branch.c:547
+#: builtin/show-branch.c:548
 #, c-format
 msgid "no matching refs with %s"
 msgstr "keine übereinstimmenden Referenzen mit %s"
 
-#: builtin/show-branch.c:644
+#: builtin/show-branch.c:645
 msgid "show remote-tracking and local branches"
 msgstr "Remote-Tracking und lokale Branches anzeigen"
 
-#: builtin/show-branch.c:646
+#: builtin/show-branch.c:647
 msgid "show remote-tracking branches"
 msgstr "Remote-Tracking-Branches anzeigen"
 
-#: builtin/show-branch.c:648
+#: builtin/show-branch.c:649
 msgid "color '*!+-' corresponding to the branch"
 msgstr "'*!+-' entsprechend des Branches einfärben"
 
-#: builtin/show-branch.c:650
+#: builtin/show-branch.c:651
 msgid "show <n> more commits after the common ancestor"
 msgstr "<n> weitere Commits nach dem gemeinsamen Vorgänger-Commit anzeigen"
 
-#: builtin/show-branch.c:652
+#: builtin/show-branch.c:653
 msgid "synonym to more=-1"
 msgstr "Synonym für more=-1"
 
-#: builtin/show-branch.c:653
+#: builtin/show-branch.c:654
 msgid "suppress naming strings"
 msgstr "Namen unterdrücken"
 
-#: builtin/show-branch.c:655
+#: builtin/show-branch.c:656
 msgid "include the current branch"
 msgstr "den aktuellen Branch einbeziehen"
 
-#: builtin/show-branch.c:657
+#: builtin/show-branch.c:658
 msgid "name commits with their object names"
 msgstr "Commits nach ihren Objektnamen benennen"
 
-#: builtin/show-branch.c:659
+#: builtin/show-branch.c:660
 msgid "show possible merge bases"
 msgstr "mögliche Merge-Basen anzeigen"
 
-#: builtin/show-branch.c:661
+#: builtin/show-branch.c:662
 msgid "show refs unreachable from any other ref"
 msgstr ""
 "Referenzen, die unerreichbar von allen anderen Referenzen sind, anzeigen"
 
-#: builtin/show-branch.c:663
+#: builtin/show-branch.c:664
 msgid "show commits in topological order"
 msgstr "Commits in topologischer Ordnung anzeigen"
 
-#: builtin/show-branch.c:666
+#: builtin/show-branch.c:667
 msgid "show only commits not on the first branch"
 msgstr "nur Commits anzeigen, die sich nicht im ersten Branch befinden"
 
-#: builtin/show-branch.c:668
+#: builtin/show-branch.c:669
 msgid "show merges reachable from only one tip"
 msgstr "Merges anzeigen, die nur von einem Branch aus erreichbar sind"
 
-#: builtin/show-branch.c:670
+#: builtin/show-branch.c:671
 msgid "topologically sort, maintaining date order where possible"
 msgstr "topologische Sortierung, Beibehaltung Datumsordnung wo möglich"
 
-#: builtin/show-branch.c:673
+#: builtin/show-branch.c:674
 msgid "<n>[,<base>]"
 msgstr "<n>[,<Basis>]"
 
-#: builtin/show-branch.c:674
+#: builtin/show-branch.c:675
 msgid "show <n> most recent ref-log entries starting at base"
 msgstr "die <n> jüngsten Einträge im Reflog, beginnend an der Basis, anzeigen"
 
-#: builtin/show-branch.c:734
+#: builtin/show-branch.c:735
 msgid "no branches given, and HEAD is not valid"
 msgstr "keine Branches angegeben, und HEAD ist ungültig"
 
-#: builtin/show-branch.c:737
+#: builtin/show-branch.c:738
 msgid "--reflog option needs one branch name"
 msgstr "die Option --reflog benötigt einen Branchnamen"
 
-#: builtin/show-branch.c:740
+#: builtin/show-branch.c:741
 #, c-format
 msgid "only %d entry can be shown at one time."
 msgid_plural "only %d entries can be shown at one time."
 msgstr[0] "nur %d Eintrag kann zur selben Zeit angezeigt werden."
 msgstr[1] "nur %d Einträge können zur selben Zeit angezeigt werden."
 
-#: builtin/show-branch.c:744
+#: builtin/show-branch.c:745
 #, c-format
 msgid "no such ref %s"
 msgstr "Referenz nicht gefunden: %s"
 
-#: builtin/show-branch.c:830
+#: builtin/show-branch.c:831
 #, c-format
 msgid "cannot handle more than %d rev."
 msgid_plural "cannot handle more than %d revs."
 msgstr[0] "Kann nicht mehr als %d Commit behandeln."
 msgstr[1] "Kann nicht mehr als %d Commits behandeln."
 
-#: builtin/show-branch.c:834
+#: builtin/show-branch.c:835
 #, c-format
 msgid "'%s' is not a valid ref."
 msgstr "'%s' ist keine gültige Referenz."
 
-#: builtin/show-branch.c:837
+#: builtin/show-branch.c:838
 #, c-format
 msgid "cannot find commit %s (%s)"
 msgstr "kann Commit %s (%s) nicht finden"
@@ -22664,25 +23163,21 @@ msgstr ""
 "Referenzen von der Standard-Eingabe anzeigen, die sich nicht im lokalen "
 "Repository befinden"
 
-#: builtin/sparse-checkout.c:22
+#: builtin/sparse-checkout.c:23
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr "git sparse-checkout (init|list|set|add|reapply|disable) <Optionen>"
 
-#: builtin/sparse-checkout.c:46
-msgid "git sparse-checkout list"
-msgstr "git sparse-checkout list"
-
-#: builtin/sparse-checkout.c:60
+#: builtin/sparse-checkout.c:61
 msgid "this worktree is not sparse"
 msgstr "dieses Arbeitsverzeichnis ist nicht partiell"
 
-#: builtin/sparse-checkout.c:75
+#: builtin/sparse-checkout.c:76
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr ""
 "dieses Arbeitsverzeichnis ist nicht partiell (Datei für partieller Checkout "
 "existiert eventuell nicht)"
 
-#: builtin/sparse-checkout.c:176
+#: builtin/sparse-checkout.c:177
 #, c-format
 msgid ""
 "directory '%s' contains untracked files, but is not in the sparse-checkout "
@@ -22691,104 +23186,138 @@ msgstr ""
 "Verzeichnis '%s' enthält unversionierte Dateien, aber ist nicht innerhalb "
 "des partiellen Checkouts im Cone-Modus"
 
-#: builtin/sparse-checkout.c:184
+#: builtin/sparse-checkout.c:185
 #, c-format
 msgid "failed to remove directory '%s'"
 msgstr "Fehler beim Löschen des Verzeichnisses '%s'"
 
-#: builtin/sparse-checkout.c:324
+#: builtin/sparse-checkout.c:327
 msgid "failed to create directory for sparse-checkout file"
 msgstr ""
 "Fehler beim Erstellen eines Verzeichnisses für Datei eines partiellen "
 "Checkouts"
 
-#: builtin/sparse-checkout.c:365
-msgid "unable to upgrade repository format to enable worktreeConfig"
-msgstr ""
-"Repository-Format konnte nicht erweitert werden, um worktreeConfig zu "
-"aktivieren"
-
-#: builtin/sparse-checkout.c:367
-msgid "failed to set extensions.worktreeConfig setting"
-msgstr "Einstellung für extensions.worktreeConfig konnte nicht gesetzt werden"
+#: builtin/sparse-checkout.c:366
+msgid "failed to initialize worktree config"
+msgstr "Fehler beim Initialisieren der Arbeitsverzeichnis-Konfiguration"
 
 #: builtin/sparse-checkout.c:411
 msgid "failed to modify sparse-index config"
 msgstr "Verändern der Konfiguration für Sparse-Index fehlgeschlagen"
 
-#: builtin/sparse-checkout.c:422
-msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
-msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
-
-#: builtin/sparse-checkout.c:441 builtin/sparse-checkout.c:729
-#: builtin/sparse-checkout.c:778
+#: builtin/sparse-checkout.c:441 builtin/sparse-checkout.c:793
+#: builtin/sparse-checkout.c:847
 msgid "initialize the sparse-checkout in cone mode"
 msgstr "initialisiere den partiellen Checkout im Cone-Modus"
 
-#: builtin/sparse-checkout.c:443 builtin/sparse-checkout.c:731
-#: builtin/sparse-checkout.c:780
+#: builtin/sparse-checkout.c:443 builtin/sparse-checkout.c:795
+#: builtin/sparse-checkout.c:849
 msgid "toggle the use of a sparse index"
 msgstr "die Nutzung des Sparse-Index umschalten"
 
-#: builtin/sparse-checkout.c:476
+#: builtin/sparse-checkout.c:479
 #, c-format
 msgid "failed to open '%s'"
 msgstr "Fehler beim Öffnen von '%s'"
 
-#: builtin/sparse-checkout.c:528
+#: builtin/sparse-checkout.c:531
 #, c-format
 msgid "could not normalize path %s"
 msgstr "konnte Pfad '%s' nicht normalisieren"
 
-#: builtin/sparse-checkout.c:557
+#: builtin/sparse-checkout.c:560
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr "konnte Anführungszeichen von C-Style Zeichenkette '%s' nicht entfernen"
 
-#: builtin/sparse-checkout.c:612 builtin/sparse-checkout.c:640
+#: builtin/sparse-checkout.c:615 builtin/sparse-checkout.c:643
 msgid "unable to load existing sparse-checkout patterns"
 msgstr "konnte die existierenden Muster des partiellen Checkouts nicht laden"
 
-#: builtin/sparse-checkout.c:616
+#: builtin/sparse-checkout.c:619
 msgid "existing sparse-checkout patterns do not use cone mode"
 msgstr ""
 "existierenden Muster des partiellen Checkouts benutzen nicht den Cone-Modus"
 
-#: builtin/sparse-checkout.c:682
-msgid "git sparse-checkout add (--stdin | <patterns>)"
-msgstr "git sparse-checkout add (--stdin | <Muster>)"
+#: builtin/sparse-checkout.c:707
+msgid "please run from the toplevel directory in non-cone mode"
+msgstr ""
+"bitte von der obersten Ebene des Arbeitsverzeichnisses im Nicht-Cone-Modus "
+"ausführen"
+
+#: builtin/sparse-checkout.c:712
+msgid "specify directories rather than patterns (no leading slash)"
+msgstr "geben Sie Verzeichnisse statt Muster an (kein führender Schrägstich)"
+
+#: builtin/sparse-checkout.c:714
+msgid ""
+"specify directories rather than patterns.  If your directory starts with a "
+"'!', pass --skip-checks"
+msgstr ""
+"geben Sie Verzeichnisse statt Muster an. Wenn Ihr Verzeichnis mit '!' "
+"beginnt, geben Sie --skip-checks an"
+
+#: builtin/sparse-checkout.c:716
+msgid ""
+"specify directories rather than patterns.  If your directory really has any "
+"of '*?[]\\' in it, pass --skip-checks"
+msgstr ""
+"geben Sie Verzeichnisse statt Muster an. Wenn Ihr Verzeichnis wirklich eines "
+"von '*?[]\\' enthält, geben Sie --skip-checks an"
+
+#: builtin/sparse-checkout.c:732
+#, c-format
+msgid ""
+"'%s' is not a directory; to treat it as a directory anyway, rerun with --"
+"skip-checks"
+msgstr ""
+"'%s' ist kein Verzeichnis; um es trotzdem als Verzeichnis zu behandeln, "
+"führen Sie es mit --skip-checks erneut aus"
+
+#: builtin/sparse-checkout.c:734
+#, c-format
+msgid ""
+"pass a leading slash before paths such as '%s' if you want a single file "
+"(see NON-CONE PROBLEMS in the git-sparse-checkout manual)."
+msgstr ""
+"übergeben Sie einen führenden Schrägstrich vor Pfaden wie '%s', wenn Sie "
+"eine einzelne Datei haben möchten (siehe NON-CONE PROBLEMS im git-sparse-"
+"checkout Handbuch)."
+
+#: builtin/sparse-checkout.c:739
+msgid "git sparse-checkout add [--skip-checks] (--stdin | <patterns>)"
+msgstr "git sparse-checkout add [--skip-checks] (--stdin | <Muster>)"
+
+#: builtin/sparse-checkout.c:752 builtin/sparse-checkout.c:797
+msgid ""
+"skip some sanity checks on the given paths that might give false positives"
+msgstr ""
+"überspringe einige Plausibilitätsprüfungen für die angegebenen Pfade, die zu "
+"falsch positiven Ergebnissen führen könnten"
 
-#: builtin/sparse-checkout.c:694 builtin/sparse-checkout.c:733
+#: builtin/sparse-checkout.c:755 builtin/sparse-checkout.c:800
 msgid "read patterns from standard in"
 msgstr "Muster von der Standard-Eingabe lesen"
 
-#: builtin/sparse-checkout.c:699
+#: builtin/sparse-checkout.c:760
 msgid "no sparse-checkout to add to"
 msgstr "kein partieller Checkout zum Hinzufügen"
 
-#: builtin/sparse-checkout.c:712
+#: builtin/sparse-checkout.c:775
 msgid ""
-"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] (--stdin | "
-"<patterns>)"
+"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] "
+"(--stdin | <patterns>)"
 msgstr ""
-"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] (--stdin | "
-"<Muster>)"
-
-#: builtin/sparse-checkout.c:765
-msgid "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
-msgstr "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
+"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] "
+"(--stdin | <Muster>)"
 
-#: builtin/sparse-checkout.c:785
+#: builtin/sparse-checkout.c:854
 msgid "must be in a sparse-checkout to reapply sparsity patterns"
 msgstr ""
 "muss sich in einem partiellen Checkout befinden, um Sparsity-Muster erneut "
 "anwenden zu können"
 
-#: builtin/sparse-checkout.c:803
-msgid "git sparse-checkout disable"
-msgstr "git sparse-checkout disable"
-
-#: builtin/sparse-checkout.c:845
+#: builtin/sparse-checkout.c:914
 msgid "error while refreshing working directory"
 msgstr "Fehler während der Aktualisierung des Arbeitsverzeichnisses."
 
@@ -22931,171 +23460,155 @@ msgstr "Index wurde nicht aus dem Stash zurückgeladen."
 msgid "could not restore untracked files from stash"
 msgstr "Konnte unversionierte Dateien vom Stash nicht wiederherstellen."
 
-#: builtin/stash.c:608 builtin/stash.c:706
+#: builtin/stash.c:608 builtin/stash.c:695
 msgid "attempt to recreate the index"
 msgstr "Versuche Index wiederherzustellen."
 
-#: builtin/stash.c:652
+#: builtin/stash.c:641
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "%s (%s) gelöscht"
 
-#: builtin/stash.c:655
+#: builtin/stash.c:644
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s: Konnte Stash-Eintrag nicht löschen"
 
-#: builtin/stash.c:668
+#: builtin/stash.c:657
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "'%s' ist keine Stash-Referenz"
 
-#: builtin/stash.c:718
+#: builtin/stash.c:707
 msgid "The stash entry is kept in case you need it again."
 msgstr ""
 "Der Stash-Eintrag wird für den Fall behalten, dass Sie diesen nochmal "
 "benötigen."
 
-#: builtin/stash.c:741
+#: builtin/stash.c:730
 msgid "No branch name specified"
 msgstr "Kein Branchname spezifiziert"
 
-#: builtin/stash.c:825
+#: builtin/stash.c:809
 msgid "failed to parse tree"
 msgstr "Parsen der Tree-Objekte fehlgeschlagen"
 
-#: builtin/stash.c:836
+#: builtin/stash.c:820
 msgid "failed to unpack trees"
 msgstr "Entpacken der Tree-Objekte fehlgeschlagen"
 
-#: builtin/stash.c:856
+#: builtin/stash.c:840
 msgid "include untracked files in the stash"
 msgstr "unversionierte Dateien in Stash einbeziehen"
 
-#: builtin/stash.c:859
+#: builtin/stash.c:843
 msgid "only show untracked files in the stash"
 msgstr "nur unversionierte Dateien im Stash anzeigen"
 
-#: builtin/stash.c:946 builtin/stash.c:983
+#: builtin/stash.c:930 builtin/stash.c:967
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "Kann nicht %s mit %s aktualisieren."
 
-#: builtin/stash.c:964 builtin/stash.c:1678 builtin/stash.c:1750
+#: builtin/stash.c:948 builtin/stash.c:1667 builtin/stash.c:1739
 msgid "stash message"
 msgstr "Stash-Beschreibung"
 
-#: builtin/stash.c:974
+#: builtin/stash.c:958
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" erwartet ein Argument <Commit>"
 
-#: builtin/stash.c:1159
+#: builtin/stash.c:1143
 msgid "No staged changes"
 msgstr "Keine Änderungen im Index"
 
-#: builtin/stash.c:1220
+#: builtin/stash.c:1204
 msgid "No changes selected"
 msgstr "Keine Änderungen ausgewählt"
 
-#: builtin/stash.c:1320
+#: builtin/stash.c:1304
 msgid "You do not have the initial commit yet"
 msgstr "Sie haben bisher noch keinen initialen Commit"
 
-#: builtin/stash.c:1347
+#: builtin/stash.c:1331
 msgid "Cannot save the current index state"
 msgstr "Kann den aktuellen Zustand des Index nicht speichern"
 
-#: builtin/stash.c:1356
+#: builtin/stash.c:1340
 msgid "Cannot save the untracked files"
 msgstr "Kann die unversionierten Dateien nicht speichern"
 
-#: builtin/stash.c:1367 builtin/stash.c:1386
+#: builtin/stash.c:1351 builtin/stash.c:1370
 msgid "Cannot save the current worktree state"
 msgstr "Kann den aktuellen Zustand des Arbeitsverzeichnisses nicht speichern"
 
-#: builtin/stash.c:1377
+#: builtin/stash.c:1361
 msgid "Cannot save the current staged state"
 msgstr "Kann den aktuellen Zustand des Index nicht speichern"
 
-#: builtin/stash.c:1414
+#: builtin/stash.c:1398
 msgid "Cannot record working tree state"
 msgstr "Kann Zustand des Arbeitsverzeichnisses nicht aufzeichnen"
 
-#: builtin/stash.c:1463
+#: builtin/stash.c:1447
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr ""
 "Kann nicht gleichzeitig --patch und --include-untracked oder --all verwenden"
 
-#: builtin/stash.c:1474
+#: builtin/stash.c:1458
 msgid "Can't use --staged and --include-untracked or --all at the same time"
 msgstr ""
 "Kann nicht gleichzeitig --staged und --include-untracked oder --all verwenden"
 
-#: builtin/stash.c:1492
+#: builtin/stash.c:1476
 msgid "Did you forget to 'git add'?"
 msgstr "Haben Sie vielleicht 'git add' vergessen?"
 
-#: builtin/stash.c:1507
+#: builtin/stash.c:1491
 msgid "No local changes to save"
 msgstr "Keine lokalen Änderungen zum Speichern"
 
-#: builtin/stash.c:1514
+#: builtin/stash.c:1498
 msgid "Cannot initialize stash"
 msgstr "Kann \"stash\" nicht initialisieren"
 
-#: builtin/stash.c:1529
+#: builtin/stash.c:1513
 msgid "Cannot save the current status"
 msgstr "Kann den aktuellen Status nicht speichern"
 
-#: builtin/stash.c:1534
+#: builtin/stash.c:1518
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Arbeitsverzeichnis und Index-Status %s gespeichert."
 
-#: builtin/stash.c:1627
+#: builtin/stash.c:1615
 msgid "Cannot remove worktree changes"
 msgstr "Kann Änderungen im Arbeitsverzeichnis nicht löschen"
 
-#: builtin/stash.c:1667 builtin/stash.c:1739
+#: builtin/stash.c:1656 builtin/stash.c:1728
 msgid "keep index"
 msgstr "behalte Index"
 
-#: builtin/stash.c:1669 builtin/stash.c:1741
+#: builtin/stash.c:1658 builtin/stash.c:1730
 msgid "stash staged changes only"
 msgstr "nur Änderungen stashen, die zum Commit vorgemerkt sind"
 
-#: builtin/stash.c:1671 builtin/stash.c:1743
+#: builtin/stash.c:1660 builtin/stash.c:1732
 msgid "stash in patch mode"
 msgstr "Stash in Patch-Modus"
 
-#: builtin/stash.c:1672 builtin/stash.c:1744
+#: builtin/stash.c:1661 builtin/stash.c:1733
 msgid "quiet mode"
 msgstr "weniger Ausgaben"
 
-#: builtin/stash.c:1674 builtin/stash.c:1746
+#: builtin/stash.c:1663 builtin/stash.c:1735
 msgid "include untracked files in stash"
 msgstr "unversionierte Dateien in Stash einbeziehen"
 
-#: builtin/stash.c:1676 builtin/stash.c:1748
+#: builtin/stash.c:1665 builtin/stash.c:1737
 msgid "include ignore files"
 msgstr "ignorierte Dateien einbeziehen"
 
-#: builtin/stash.c:1783
-msgid ""
-"the stash.useBuiltin support has been removed!\n"
-"See its entry in 'git help config' for details."
-msgstr ""
-"Die Unterstützung für stash.useBuiltin wurde entfernt!\n"
-"Siehe dessen Eintrag in 'git help config' für Details."
-
-#: builtin/stripspace.c:18
-msgid "git stripspace [-s | --strip-comments]"
-msgstr "git stripspace [-s | --strip-comments]"
-
-#: builtin/stripspace.c:19
-msgid "git stripspace [-c | --comment-lines]"
-msgstr "git stripspace [-c | --comment-lines]"
-
 #: builtin/stripspace.c:37
 msgid "skip and remove all lines starting with comment character"
 msgstr ""
@@ -23106,21 +23619,17 @@ msgstr ""
 msgid "prepend comment character and space to each line"
 msgstr "Kommentarzeichen mit Leerzeichen an jede Zeile voranstellen"
 
-#: builtin/submodule--helper.c:46 builtin/submodule--helper.c:2668
+#: builtin/submodule--helper.c:50 builtin/submodule--helper.c:2486
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "Vollständiger Referenzname erwartet, %s erhalten"
 
-#: builtin/submodule--helper.c:63
-msgid "submodule--helper print-default-remote takes no arguments"
-msgstr "'submodule--helper print-default-remote' erwartet keine Argumente."
-
-#: builtin/submodule--helper.c:101
+#: builtin/submodule--helper.c:103
 #, c-format
 msgid "cannot strip one component off url '%s'"
 msgstr "Kann eine Komponente von URL '%s' nicht extrahieren"
 
-#: builtin/submodule--helper.c:211
+#: builtin/submodule--helper.c:213
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
@@ -23129,26 +23638,26 @@ msgstr ""
 "Konnte Konfiguration '%s' nicht nachschlagen. Nehme an, dass dieses\n"
 "Repository sein eigenes verbindliches Upstream-Repository ist."
 
-#: builtin/submodule--helper.c:405 builtin/submodule--helper.c:1859
+#: builtin/submodule--helper.c:413 builtin/submodule--helper.c:1873
 msgid "alternative anchor for relative paths"
 msgstr "Alternativer Anker für relative Pfade"
 
-#: builtin/submodule--helper.c:410
+#: builtin/submodule--helper.c:418
 msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper list [--prefix=<Pfad>] [<Pfad>...]"
 
-#: builtin/submodule--helper.c:468 builtin/submodule--helper.c:605
-#: builtin/submodule--helper.c:628
+#: builtin/submodule--helper.c:476 builtin/submodule--helper.c:617
+#: builtin/submodule--helper.c:640
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr "Keine URL für Submodul-Pfad '%s' in .gitmodules gefunden"
 
-#: builtin/submodule--helper.c:520
+#: builtin/submodule--helper.c:528
 #, c-format
 msgid "Entering '%s'\n"
 msgstr "Betrete '%s'\n"
 
-#: builtin/submodule--helper.c:523
+#: builtin/submodule--helper.c:531
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
@@ -23157,7 +23666,7 @@ msgstr ""
 "run_command gab nicht-Null Status für '%s' zurück.\n"
 "."
 
-#: builtin/submodule--helper.c:545
+#: builtin/submodule--helper.c:553
 #, c-format
 msgid ""
 "run_command returned non-zero status while recursing in the nested "
@@ -23169,164 +23678,164 @@ msgstr ""
 "nicht-Null Status zurück.\n"
 "."
 
-#: builtin/submodule--helper.c:561
+#: builtin/submodule--helper.c:569
 msgid "suppress output of entering each submodule command"
 msgstr "Ausgaben beim Betreten eines Submodul-Befehls unterdrücken"
 
-#: builtin/submodule--helper.c:563 builtin/submodule--helper.c:864
-#: builtin/submodule--helper.c:1453
+#: builtin/submodule--helper.c:571 builtin/submodule--helper.c:876
+#: builtin/submodule--helper.c:1458
 msgid "recurse into nested submodules"
 msgstr "Rekursion in verschachtelte Submodule durchführen"
 
-#: builtin/submodule--helper.c:568
+#: builtin/submodule--helper.c:576
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr "git submodule--helper foreach [--quiet] [--recursive] [--] <Befehl>"
 
-#: builtin/submodule--helper.c:642
+#: builtin/submodule--helper.c:654
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr ""
 "Fehler beim Eintragen der URL für Submodul-Pfad '%s' in die Konfiguration."
 
-#: builtin/submodule--helper.c:646
+#: builtin/submodule--helper.c:658
 #, c-format
 msgid "Submodule '%s' (%s) registered for path '%s'\n"
 msgstr "Submodul '%s' (%s) für Pfad '%s' in die Konfiguration eingetragen.\n"
 
-#: builtin/submodule--helper.c:656
+#: builtin/submodule--helper.c:668
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr "Warnung: 'update'-Modus für Submodul '%s' vorgeschlagen\n"
 
-#: builtin/submodule--helper.c:663
+#: builtin/submodule--helper.c:675
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr ""
 "Fehler bei Änderung des Aktualisierungsmodus für Submodul-Pfad '%s' in der\n"
 "Konfiguration."
 
-#: builtin/submodule--helper.c:685
+#: builtin/submodule--helper.c:697
 msgid "suppress output for initializing a submodule"
 msgstr "Ausgaben bei Initialisierung eines Submoduls unterdrücken"
 
-#: builtin/submodule--helper.c:690
+#: builtin/submodule--helper.c:702
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr "git submodule--helper init [<Optionen>] [<Pfad>]"
 
-#: builtin/submodule--helper.c:763 builtin/submodule--helper.c:898
+#: builtin/submodule--helper.c:775 builtin/submodule--helper.c:910
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr "Keine Submodul-Zuordnung in .gitmodules für Pfad '%s' gefunden"
 
-#: builtin/submodule--helper.c:811
+#: builtin/submodule--helper.c:823
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr "Konnte HEAD-Referenz nicht innerhalb des Submodul-Pfads '%s' auflösen."
 
-#: builtin/submodule--helper.c:838 builtin/submodule--helper.c:1423
+#: builtin/submodule--helper.c:850 builtin/submodule--helper.c:1428
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "Fehler bei Rekursion in Submodul '%s'."
 
-#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1590
+#: builtin/submodule--helper.c:874 builtin/submodule--helper.c:1595
 msgid "suppress submodule status output"
 msgstr "Ausgabe des Submodul-Status unterdrücken"
 
-#: builtin/submodule--helper.c:863
+#: builtin/submodule--helper.c:875
 msgid ""
 "use commit stored in the index instead of the one stored in the submodule "
 "HEAD"
 msgstr ""
 "den Commit benutzen, der im Index gespeichert ist, statt den im Submodul HEAD"
 
-#: builtin/submodule--helper.c:869
+#: builtin/submodule--helper.c:881
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr "git submodule status [--quiet] [--cached] [--recursive] [<Pfad>...]"
 
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:905
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper name <Pfad>"
 
-#: builtin/submodule--helper.c:965
+#: builtin/submodule--helper.c:977
 #, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr "* %s %s(blob)->%s(submodule)"
 
-#: builtin/submodule--helper.c:968
+#: builtin/submodule--helper.c:980
 #, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr "* %s %s(submodule)->%s(blob)"
 
-#: builtin/submodule--helper.c:981
+#: builtin/submodule--helper.c:993
 #, c-format
 msgid "%s"
 msgstr "%s"
 
-#: builtin/submodule--helper.c:1031
+#: builtin/submodule--helper.c:1043
 #, c-format
 msgid "couldn't hash object from '%s'"
 msgstr "Hash eines Objektes von '%s' konnte nicht erzeugt werden"
 
-#: builtin/submodule--helper.c:1035
+#: builtin/submodule--helper.c:1047
 #, c-format
 msgid "unexpected mode %o\n"
 msgstr "unerwarteter Modus %o\n"
 
-#: builtin/submodule--helper.c:1276
+#: builtin/submodule--helper.c:1288
 msgid "use the commit stored in the index instead of the submodule HEAD"
 msgstr ""
 "benutze den Commit, der im Index gespeichert ist, statt vom Submodul HEAD"
 
-#: builtin/submodule--helper.c:1278
+#: builtin/submodule--helper.c:1290
 msgid "compare the commit in the index with that in the submodule HEAD"
 msgstr "den Commit aus dem Index mit dem im Submodul HEAD vergleichen"
 
-#: builtin/submodule--helper.c:1280
+#: builtin/submodule--helper.c:1292
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr ""
 "überspringe Submodule, wo der 'ignore_config' Wert auf 'all' gesetzt ist"
 
-#: builtin/submodule--helper.c:1282
+#: builtin/submodule--helper.c:1294
 msgid "limit the summary size"
 msgstr "Größe der Zusammenfassung begrenzen"
 
-#: builtin/submodule--helper.c:1287
+#: builtin/submodule--helper.c:1299
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr "git submodule--helper summary [<Optionen>] [<Commit>] [--] [<Pfad>]"
 
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1323
 msgid "could not fetch a revision for HEAD"
 msgstr "konnte keinen Commit für HEAD holen"
 
-#: builtin/submodule--helper.c:1373
+#: builtin/submodule--helper.c:1384
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr "Synchronisiere Submodul-URL für '%s'\n"
 
-#: builtin/submodule--helper.c:1379
+#: builtin/submodule--helper.c:1390
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr "Fehler beim Registrieren der URL für Submodul-Pfad '%s'"
 
-#: builtin/submodule--helper.c:1393
+#: builtin/submodule--helper.c:1399
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr "Fehler beim Lesen des Standard-Remote-Repositories für Submodul '%s'"
 
-#: builtin/submodule--helper.c:1404
+#: builtin/submodule--helper.c:1409
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr "Fehler beim Aktualisieren des Remote-Repositories für Submodul '%s'"
 
-#: builtin/submodule--helper.c:1451
+#: builtin/submodule--helper.c:1456
 msgid "suppress output of synchronizing submodule url"
 msgstr "Ausgaben bei der Synchronisierung der Submodul-URLs unterdrücken"
 
-#: builtin/submodule--helper.c:1458
+#: builtin/submodule--helper.c:1463
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<Pfad>]"
 
-#: builtin/submodule--helper.c:1508
+#: builtin/submodule--helper.c:1513
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory. This will be replaced "
@@ -23335,7 +23844,7 @@ msgstr ""
 "Arbeitsverzeichnis von Submodul in '%s' enthält ein .git-Verzeichnis. Durch "
 "die Nutzung von \"absorbgitdirs\" wird dieses durch eine .git-Datei ersetzt."
 
-#: builtin/submodule--helper.c:1525
+#: builtin/submodule--helper.c:1530
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
@@ -23344,49 +23853,49 @@ msgstr ""
 "Arbeitsverzeichnis von Submodul in '%s' enthält lokale Änderungen;\n"
 "verwenden Sie '-f', um diese zu verwerfen."
 
-#: builtin/submodule--helper.c:1533
+#: builtin/submodule--helper.c:1538
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "Verzeichnis '%s' bereinigt.\n"
 
-#: builtin/submodule--helper.c:1535
+#: builtin/submodule--helper.c:1540
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr "Konnte Arbeitsverzeichnis des Submoduls in '%s' nicht löschen.\n"
 
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1551
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr "Konnte kein leeres Verzeichnis für Submodul in '%s' erstellen."
 
-#: builtin/submodule--helper.c:1562
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr "Submodul '%s' (%s) für Pfad '%s' ausgetragen.\n"
 
-#: builtin/submodule--helper.c:1591
+#: builtin/submodule--helper.c:1596
 msgid "remove submodule working trees even if they contain local changes"
 msgstr ""
 "Arbeitsverzeichnisse von Submodulen löschen, auch wenn lokale Änderungen "
 "vorliegen"
 
-#: builtin/submodule--helper.c:1592
+#: builtin/submodule--helper.c:1597
 msgid "unregister all submodules"
 msgstr "alle Submodule austragen"
 
-#: builtin/submodule--helper.c:1597
+#: builtin/submodule--helper.c:1602
 msgid ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
 msgstr ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<Pfad>...]]"
 
-#: builtin/submodule--helper.c:1611
+#: builtin/submodule--helper.c:1616
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr ""
 "Verwenden Sie '--all', wenn Sie wirklich alle Submodule deinitialisieren\n"
 "möchten."
 
-#: builtin/submodule--helper.c:1656
+#: builtin/submodule--helper.c:1665
 msgid ""
 "An alternate computed from a superproject's alternate is invalid.\n"
 "To allow Git to clone without an alternate in such a case, set\n"
@@ -23399,104 +23908,104 @@ msgstr ""
 "submodule.alternateErrorStrategy auf 'info' oder klone mit der Option\n"
 "'--reference-if-able' statt '--reference'."
 
-#: builtin/submodule--helper.c:1701 builtin/submodule--helper.c:1704
+#: builtin/submodule--helper.c:1710 builtin/submodule--helper.c:1713
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "Submodul '%s' kann Alternative nicht hinzufügen: %s"
 
-#: builtin/submodule--helper.c:1740
+#: builtin/submodule--helper.c:1749
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr "Wert '%s' für submodule.alternateErrorStrategy wird nicht erkannt"
 
-#: builtin/submodule--helper.c:1747
+#: builtin/submodule--helper.c:1756
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "Wert '%s' für submodule.alternateLocation wird nicht erkannt."
 
-#: builtin/submodule--helper.c:1772
+#: builtin/submodule--helper.c:1781
 #, c-format
 msgid "refusing to create/use '%s' in another submodule's git dir"
 msgstr ""
 "Erstellung/Benutzung von '%s' in einem anderen Submodul-Git-Verzeichnis\n"
 "verweigert."
 
-#: builtin/submodule--helper.c:1813
+#: builtin/submodule--helper.c:1826
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
 msgstr "Klonen von '%s' in Submodul-Pfad '%s' fehlgeschlagen."
 
-#: builtin/submodule--helper.c:1818
+#: builtin/submodule--helper.c:1831
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr "Verzeichnis ist nicht leer: '%s'"
 
-#: builtin/submodule--helper.c:1830
+#: builtin/submodule--helper.c:1843
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr "Konnte Submodul-Verzeichnis '%s' nicht finden."
 
-#: builtin/submodule--helper.c:1862
+#: builtin/submodule--helper.c:1876
 msgid "where the new submodule will be cloned to"
 msgstr "Pfad für neues Submodul"
 
-#: builtin/submodule--helper.c:1865
+#: builtin/submodule--helper.c:1879
 msgid "name of the new submodule"
 msgstr "Name des neuen Submoduls"
 
-#: builtin/submodule--helper.c:1868
+#: builtin/submodule--helper.c:1882
 msgid "url where to clone the submodule from"
 msgstr "URL von der das Submodul geklont wird"
 
-#: builtin/submodule--helper.c:1876 builtin/submodule--helper.c:3265
+#: builtin/submodule--helper.c:1890 builtin/submodule--helper.c:3383
 msgid "depth for shallow clones"
 msgstr "Tiefe des Klons mit unvollständiger Historie (shallow)"
 
-#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:2526
-#: builtin/submodule--helper.c:3258
+#: builtin/submodule--helper.c:1893 builtin/submodule--helper.c:2731
+#: builtin/submodule--helper.c:3376
 msgid "force cloning progress"
 msgstr "Fortschrittsanzeige beim Klonen erzwingen"
 
-#: builtin/submodule--helper.c:1881 builtin/submodule--helper.c:2528
+#: builtin/submodule--helper.c:1895 builtin/submodule--helper.c:2733
 msgid "disallow cloning into non-empty directory"
 msgstr "Klonen in ein nicht leeres Verzeichnis verbieten"
 
-#: builtin/submodule--helper.c:1888
+#: builtin/submodule--helper.c:1903
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
-"<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
-"<url> --path <path>"
+"<repository>] [--name <name>] [--depth <depth>] [--single-branch] [--filter "
+"<filter-spec>] --url <url> --path <path>"
 msgstr ""
 "git submodule--helper clone [--prefix=<Pfad>] [--quiet] [--reference "
-"<Repository>] [--name <Name>] [--depth <Tiefe>] [--single-branch] --url "
-"<URL> --path <Pfad>"
+"<Repository>] [--name <Name>] [--depth <Tiefe>] [--single-branch] [--filter "
+"<filter-spec>] --url <URL> --path <Pfad>"
 
-#: builtin/submodule--helper.c:1925
+#: builtin/submodule--helper.c:1943
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr "Ungültiger Aktualisierungsmodus '%s' für Submodul-Pfad '%s'."
 
-#: builtin/submodule--helper.c:1929
+#: builtin/submodule--helper.c:1947
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr ""
 "Ungültiger Aktualisierungsmodus '%s' für Submodul-Pfad '%s' konfiguriert."
 
-#: builtin/submodule--helper.c:2044
+#: builtin/submodule--helper.c:2041
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "Submodul-Pfad '%s' nicht initialisiert"
 
-#: builtin/submodule--helper.c:2048
+#: builtin/submodule--helper.c:2045
 msgid "Maybe you want to use 'update --init'?"
 msgstr "Meinten Sie vielleicht 'update --init'?"
 
-#: builtin/submodule--helper.c:2078
+#: builtin/submodule--helper.c:2075
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "Überspringe nicht zusammengeführtes Submodul %s"
 
-#: builtin/submodule--helper.c:2107
+#: builtin/submodule--helper.c:2104
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "Überspringe Submodul '%s'"
@@ -23511,54 +24020,54 @@ msgstr "Fehler beim Klonen von '%s'. Weiterer Versuch geplant"
 msgid "Failed to clone '%s' a second time, aborting"
 msgstr "Zweiter Versuch '%s' zu klonen fehlgeschlagen, breche ab."
 
-#: builtin/submodule--helper.c:2373
+#: builtin/submodule--helper.c:2371
 #, c-format
 msgid "Unable to checkout '%s' in submodule path '%s'"
 msgstr "Konnte '%s' nicht im Submodul-Pfad '%s' auschecken"
 
-#: builtin/submodule--helper.c:2377
+#: builtin/submodule--helper.c:2375
 #, c-format
 msgid "Unable to rebase '%s' in submodule path '%s'"
 msgstr "Rebase von '%s' in Submodul-Pfad '%s' nicht möglich"
 
-#: builtin/submodule--helper.c:2381
+#: builtin/submodule--helper.c:2379
 #, c-format
 msgid "Unable to merge '%s' in submodule path '%s'"
 msgstr "Merge von '%s' in Submodul-Pfad '%s' nicht möglich"
 
-#: builtin/submodule--helper.c:2385
+#: builtin/submodule--helper.c:2383
 #, c-format
 msgid "Execution of '%s %s' failed in submodule path '%s'"
 msgstr "Ausführung von '%s %s' in Submodul-Pfad '%s' fehlgeschlagen"
 
-#: builtin/submodule--helper.c:2409
+#: builtin/submodule--helper.c:2402
 #, c-format
 msgid "Submodule path '%s': checked out '%s'\n"
 msgstr "Submodul-Pfad '%s': '%s' ausgecheckt\n"
 
-#: builtin/submodule--helper.c:2413
+#: builtin/submodule--helper.c:2406
 #, c-format
 msgid "Submodule path '%s': rebased into '%s'\n"
 msgstr "Submodul-Pfad '%s': Rebase in '%s'\n"
 
-#: builtin/submodule--helper.c:2417
+#: builtin/submodule--helper.c:2410
 #, c-format
 msgid "Submodule path '%s': merged in '%s'\n"
 msgstr "Submodul-Pfad '%s': zusammengeführt in '%s'\n"
 
-#: builtin/submodule--helper.c:2421
+#: builtin/submodule--helper.c:2414
 #, c-format
 msgid "Submodule path '%s': '%s %s'\n"
 msgstr "Submodul-Pfad '%s': '%s %s'\n"
 
-#: builtin/submodule--helper.c:2445
+#: builtin/submodule--helper.c:2438
 #, c-format
 msgid "Unable to fetch in submodule path '%s'; trying to directly fetch %s:"
 msgstr ""
 "Konnte \"fetch\" in Submodul-Pfad '%s' nicht ausführen; versuche %s direkt "
 "anzufordern:"
 
-#: builtin/submodule--helper.c:2454
+#: builtin/submodule--helper.c:2447
 #, c-format
 msgid ""
 "Fetched in submodule path '%s', but it did not contain %s. Direct fetching "
@@ -23567,187 +24076,213 @@ msgstr ""
 "\"fetch\" in Submodul-Pfad '%s' ausgeführt, aber enthielt nicht %s. Direktes "
 "Anfordern dieses Commits ist fehlgeschlagen."
 
-#: builtin/submodule--helper.c:2505 builtin/submodule--helper.c:2575
-#: builtin/submodule--helper.c:2813
+#: builtin/submodule--helper.c:2481
+#, c-format
+msgid ""
+"Submodule (%s) branch configured to inherit branch from superproject, but "
+"the superproject is not on any branch"
+msgstr ""
+"Branch von Submodul (%s) ist konfiguriert, den Branch des Hauptprojektes\n"
+"zu erben, aber das Hauptprojekt befindet sich auf keinem Branch."
+
+#: builtin/submodule--helper.c:2499
+#, c-format
+msgid "could not get a repository handle for submodule '%s'"
+msgstr "Konnte kein Repository-Handle für Submodul '%s' erhalten."
+
+#: builtin/submodule--helper.c:2588
+#, c-format
+msgid "Unable to find current revision in submodule path '%s'"
+msgstr "Konnte aktuellen Commit nicht in Submodul-Pfad '%s' finden"
+
+#: builtin/submodule--helper.c:2599
+#, c-format
+msgid "Unable to fetch in submodule path '%s'"
+msgstr "Konnte \"fetch\" nicht in Submodul-Pfad '%s' ausführen"
+
+#: builtin/submodule--helper.c:2604
+#, c-format
+msgid "Unable to find %s revision in submodule path '%s'"
+msgstr "Konnte %s Commit in Submodul-Pfad '%s' nicht finden"
+
+#: builtin/submodule--helper.c:2640
+#, c-format
+msgid "Failed to recurse into submodule path '%s'"
+msgstr "Fehler bei Rekursion in Submodul-Pfad '%s'"
+
+#: builtin/submodule--helper.c:2699
+msgid "force checkout updates"
+msgstr "Checkout-Aktualisierungen erzwingen"
+
+#: builtin/submodule--helper.c:2701
+msgid "initialize uninitialized submodules before update"
+msgstr "initialisiere nicht-initialisierte Submodule vor dem Update"
+
+#: builtin/submodule--helper.c:2703
+msgid "use SHA-1 of submodule's remote tracking branch"
+msgstr "nutze SHA-1 von Remote-Tracking-Branch des Submoduls"
+
+#: builtin/submodule--helper.c:2705
+msgid "traverse submodules recursively"
+msgstr "Submodule rekursiv durchlaufen"
+
+#: builtin/submodule--helper.c:2707
+msgid "don't fetch new objects from the remote site"
+msgstr "keine neuen Objekte von Remote abrufen"
+
+#: builtin/submodule--helper.c:2710 builtin/submodule--helper.c:2892
 msgid "path into the working tree"
 msgstr "Pfad zum Arbeitsverzeichnis"
 
-#: builtin/submodule--helper.c:2508 builtin/submodule--helper.c:2580
+#: builtin/submodule--helper.c:2713
 msgid "path into the working tree, across nested submodule boundaries"
 msgstr ""
 "Pfad zum Arbeitsverzeichnis, über verschachtelte Submodul-Grenzen hinweg"
 
-#: builtin/submodule--helper.c:2512 builtin/submodule--helper.c:2578
+#: builtin/submodule--helper.c:2717
 msgid "rebase, merge, checkout or none"
 msgstr "rebase, merge, checkout oder none"
 
-#: builtin/submodule--helper.c:2518
+#: builtin/submodule--helper.c:2723
 msgid "create a shallow clone truncated to the specified number of revisions"
 msgstr ""
 "einen Klon mit unvollständiger Historie (shallow) erstellen, abgeschnitten "
 "bei der angegebenen Anzahl von Commits"
 
-#: builtin/submodule--helper.c:2521
+#: builtin/submodule--helper.c:2726
 msgid "parallel jobs"
 msgstr "Parallele Ausführungen"
 
-#: builtin/submodule--helper.c:2523
+#: builtin/submodule--helper.c:2728
 msgid "whether the initial clone should follow the shallow recommendation"
 msgstr ""
 "ob das initiale Klonen den Empfehlungen für eine unvollständige\n"
 "Historie (shallow) folgen soll"
 
-#: builtin/submodule--helper.c:2524
+#: builtin/submodule--helper.c:2729
 msgid "don't print cloning progress"
 msgstr "keine Fortschrittsanzeige beim Klonen"
 
-#: builtin/submodule--helper.c:2535
-msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
-msgstr "git submodule--helper update-clone [--prefix=<Pfad>] [<Pfad>...]"
-
-#: builtin/submodule--helper.c:2548
-msgid "bad value for update parameter"
-msgstr "Fehlerhafter Wert für update Parameter"
-
-#: builtin/submodule--helper.c:2566
-msgid "suppress output for update by rebase or merge"
-msgstr "Ausgaben bei Aktualisierung durch Rebase oder Merge unterdrücken"
-
-#: builtin/submodule--helper.c:2567
-msgid "force checkout updates"
-msgstr "Checkout-Aktualisierungen erzwingen"
-
-#: builtin/submodule--helper.c:2569
-msgid "don't fetch new objects from the remote site"
-msgstr "keine neuen Objekte von Remote abrufen"
-
-#: builtin/submodule--helper.c:2571
-msgid "overrides update mode in case the repository is a fresh clone"
-msgstr ""
-"überschreibt den Aktualisierungsmodus, falls es sich bei dem Repository um "
-"einen neuen Klon handelt"
-
-#: builtin/submodule--helper.c:2572
-msgid "depth for shallow fetch"
-msgstr "Tiefe des Abrufens mit unvollständiger Historie (shallow)"
-
-#: builtin/submodule--helper.c:2582
-msgid "sha1"
-msgstr "sha1"
-
-#: builtin/submodule--helper.c:2583
-msgid "SHA1 expected by superproject"
-msgstr "SHA1 vom übergeordneten Projekt erwartet"
-
-#: builtin/submodule--helper.c:2585
-msgid "subsha1"
-msgstr "subsha1"
-
-#: builtin/submodule--helper.c:2586
-msgid "SHA1 of submodule's HEAD"
-msgstr "SHA1 vom HEAD des Submoduls"
-
-#: builtin/submodule--helper.c:2592
-msgid "git submodule--helper run-update-procedure [<options>] <path>"
-msgstr "git submodule--helper run-update-procedure [<Optionen>] <Pfad>"
-
-#: builtin/submodule--helper.c:2663
-#, c-format
+#: builtin/submodule--helper.c:2741
 msgid ""
-"Submodule (%s) branch configured to inherit branch from superproject, but "
-"the superproject is not on any branch"
+"git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] "
+"[-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-"
+"shallow] [--reference <repository>] [--recursive] [--[no-]single-branch] "
+"[--] [<path>...]"
 msgstr ""
-"Branch von Submodul (%s) ist konfiguriert, den Branch des Hauptprojektes\n"
-"zu erben, aber das Hauptprojekt befindet sich auf keinem Branch."
+"git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] "
+"[-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-"
+"shallow] [--reference <Repository>] [--recursive] [--[no-]single-branch] "
+"[--] [<Pfad>...]"
 
-#: builtin/submodule--helper.c:2781
-#, c-format
-msgid "could not get a repository handle for submodule '%s'"
-msgstr "Konnte kein Repository-Handle für Submodul '%s' erhalten."
+#: builtin/submodule--helper.c:2767
+msgid "bad value for update parameter"
+msgstr "Fehlerhafter Wert für update Parameter"
 
-#: builtin/submodule--helper.c:2814
+#: builtin/submodule--helper.c:2893
 msgid "recurse into submodules"
 msgstr "Rekursion in Submodule durchführen"
 
-#: builtin/submodule--helper.c:2820
+#: builtin/submodule--helper.c:2899
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr "git submodule--helper absorb-git-dirs [<Optionen>] [<Pfad>...]"
 
-#: builtin/submodule--helper.c:2876
+#: builtin/submodule--helper.c:2955
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr "prüfen, ob es sicher ist, in die Datei .gitmodules zu schreiben"
 
-#: builtin/submodule--helper.c:2879
+#: builtin/submodule--helper.c:2958
 msgid "unset the config in the .gitmodules file"
 msgstr "Konfiguration in der .gitmodules-Datei entfernen"
 
-#: builtin/submodule--helper.c:2884
+#: builtin/submodule--helper.c:2963
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config <name> [<Wert>]"
 
-#: builtin/submodule--helper.c:2885
+#: builtin/submodule--helper.c:2964
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset <Name>"
 
-#: builtin/submodule--helper.c:2886
-msgid "git submodule--helper config --check-writeable"
-msgstr "git submodule--helper config --check-writeable"
-
-#: builtin/submodule--helper.c:2905 builtin/submodule--helper.c:3121
-#: builtin/submodule--helper.c:3277
+#: builtin/submodule--helper.c:2984 builtin/submodule--helper.c:3238
+#: builtin/submodule--helper.c:3395
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr ""
 "Bitte stellen Sie sicher, dass sich die Datei .gitmodules im "
 "Arbeitsverzeichnis befindet."
 
-#: builtin/submodule--helper.c:2921
+#: builtin/submodule--helper.c:3000
 msgid "suppress output for setting url of a submodule"
 msgstr "Ausgaben beim Setzen der URL eines Submoduls unterdrücken"
 
-#: builtin/submodule--helper.c:2925
+#: builtin/submodule--helper.c:3004
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr "git submodule--helper set-url [--quiet] <Pfad> <neue URL>"
 
-#: builtin/submodule--helper.c:2958
+#: builtin/submodule--helper.c:3037
 msgid "set the default tracking branch to master"
 msgstr "Standard-Tracking-Branch auf master setzen"
 
-#: builtin/submodule--helper.c:2960
+#: builtin/submodule--helper.c:3039
 msgid "set the default tracking branch"
 msgstr "Standard-Tracking-Branch setzen"
 
-#: builtin/submodule--helper.c:2964
+#: builtin/submodule--helper.c:3043
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr "git submodule--helper set-branch [-q|--quiet] (-d|--default) [<Pfad>]"
 
-#: builtin/submodule--helper.c:2965
+#: builtin/submodule--helper.c:3044
 msgid ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 msgstr ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <Branch> <Pfad>"
 
-#: builtin/submodule--helper.c:2972
+#: builtin/submodule--helper.c:3051
 msgid "--branch or --default required"
 msgstr "Option --branch oder --default erforderlich"
 
-#: builtin/submodule--helper.c:3038
-#, c-format
-msgid "Adding existing repo at '%s' to the index\n"
-msgstr "Füge existierendes Repository in '%s' dem Index hinzu\n"
+#: builtin/submodule--helper.c:3072 builtin/submodule--helper.c:3375
+msgid "print only error messages"
+msgstr "nur Fehlermeldungen ausgeben"
 
-#: builtin/submodule--helper.c:3041
+#: builtin/submodule--helper.c:3073
+msgid "force creation"
+msgstr "erzwinge Erstellung"
+
+#: builtin/submodule--helper.c:3081
+msgid "show whether the branch would be created"
+msgstr "anzeigen, ob der Branch erzeugt werden würde"
+
+#: builtin/submodule--helper.c:3085
+msgid ""
+"git submodule--helper create-branch [-f|--force] [--create-reflog] [-q|--"
+"quiet] [-t|--track] [-n|--dry-run] <name> <start-oid> <start-name>"
+msgstr ""
+"git submodule--helper create-branch [-f|--force] [--create-reflog] [-q|--"
+"quiet] [-t|--track] [-n|--dry-run] <Name> <Start-oid> <Start-Name>"
+
+#: builtin/submodule--helper.c:3097
+#, c-format
+msgid "creating branch '%s'"
+msgstr "erstelle Branch '%s'"
+
+#: builtin/submodule--helper.c:3155
+#, c-format
+msgid "Adding existing repo at '%s' to the index\n"
+msgstr "Füge existierendes Repository in '%s' dem Index hinzu\n"
+
+#: builtin/submodule--helper.c:3158
 #, c-format
 msgid "'%s' already exists and is not a valid git repo"
 msgstr "'%s' existiert bereits und ist kein gültiges Git-Repository"
 
-#: builtin/submodule--helper.c:3054
+#: builtin/submodule--helper.c:3171
 #, c-format
 msgid "A git directory for '%s' is found locally with remote(s):\n"
 msgstr ""
 "Ein Git-Verzeichnis für '%s' wurde lokal gefunden mit den Remote-"
 "Repositories:\n"
 
-#: builtin/submodule--helper.c:3061
+#: builtin/submodule--helper.c:3178
 #, c-format
 msgid ""
 "If you want to reuse this local git directory instead of cloning again from\n"
@@ -23765,54 +24300,50 @@ msgstr ""
 "nicht das korrekte Repository ist oder Sie unsicher sind, was das bedeutet,\n"
 "wählen Sie einen anderen Namen mit der Option '--name'."
 
-#: builtin/submodule--helper.c:3073
+#: builtin/submodule--helper.c:3190
 #, c-format
 msgid "Reactivating local git directory for submodule '%s'\n"
 msgstr "Reaktiviere lokales Git-Verzeichnis für Submodul '%s'\n"
 
-#: builtin/submodule--helper.c:3110
+#: builtin/submodule--helper.c:3227
 #, c-format
 msgid "unable to checkout submodule '%s'"
 msgstr "kann Submodul '%s' nicht auschecken"
 
-#: builtin/submodule--helper.c:3149
+#: builtin/submodule--helper.c:3266
 #, c-format
 msgid "Failed to add submodule '%s'"
 msgstr "Hinzufügen von Submodul '%s' fehlgeschlagen"
 
-#: builtin/submodule--helper.c:3153 builtin/submodule--helper.c:3158
-#: builtin/submodule--helper.c:3166
+#: builtin/submodule--helper.c:3270 builtin/submodule--helper.c:3275
+#: builtin/submodule--helper.c:3283
 #, c-format
 msgid "Failed to register submodule '%s'"
 msgstr "Fehler beim Registrieren von Submodul '%s'"
 
-#: builtin/submodule--helper.c:3222
+#: builtin/submodule--helper.c:3339
 #, c-format
 msgid "'%s' already exists in the index"
 msgstr "'%s' existiert bereits im Index"
 
-#: builtin/submodule--helper.c:3225
+#: builtin/submodule--helper.c:3342
 #, c-format
 msgid "'%s' already exists in the index and is not a submodule"
 msgstr "'%s' existiert bereits im Index und ist kein Submodul"
 
-#: builtin/submodule--helper.c:3254
+#: builtin/submodule--helper.c:3372
 msgid "branch of repository to add as submodule"
 msgstr "Branch des Repositories zum Hinzufügen als Submodul"
 
-#: builtin/submodule--helper.c:3255
+#: builtin/submodule--helper.c:3373
 msgid "allow adding an otherwise ignored submodule path"
 msgstr "das Hinzufügen eines andernfalls ignorierten Submodul-Pfads erlauben"
 
-#: builtin/submodule--helper.c:3257
-msgid "print only error messages"
-msgstr "nur Fehlermeldungen ausgeben"
-
-#: builtin/submodule--helper.c:3261
+#: builtin/submodule--helper.c:3379
 msgid "borrow the objects from reference repositories"
 msgstr "die Objekte von Referenz-Repositories ausleihen"
 
-#: builtin/submodule--helper.c:3263
+#: builtin/submodule--helper.c:3381
 msgid ""
 "sets the submodule’s name to the given string instead of defaulting to its "
 "path"
@@ -23820,32 +24351,32 @@ msgstr ""
 "legt den Namen des Submoduls auf die angegebene Zeichenkette fest, statt "
 "standardmäßig dessen Pfad zu nehmen"
 
-#: builtin/submodule--helper.c:3270
+#: builtin/submodule--helper.c:3388
 msgid "git submodule--helper add [<options>] [--] <repository> [<path>]"
 msgstr "git submodule--helper add [<Optionen>] [--] <Repository> [<Pfad>]"
 
-#: builtin/submodule--helper.c:3298
+#: builtin/submodule--helper.c:3416
 msgid "Relative path can only be used from the toplevel of the working tree"
 msgstr ""
 "Relative Pfade können nur von der obersten Ebene des Arbeitsverzeichnisses "
 "benutzt werden."
 
-#: builtin/submodule--helper.c:3306
+#: builtin/submodule--helper.c:3425
 #, c-format
 msgid "repo URL: '%s' must be absolute or begin with ./|../"
 msgstr "repo URL: '%s' muss absolut sein oder mit ./|../ beginnen"
 
-#: builtin/submodule--helper.c:3341
+#: builtin/submodule--helper.c:3460
 #, c-format
 msgid "'%s' is not a valid submodule name"
 msgstr "'%s' ist kein gültiger Submodul-Name"
 
-#: builtin/submodule--helper.c:3405 git.c:452 git.c:726
+#: builtin/submodule--helper.c:3520 git.c:453 git.c:729
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s unterstützt kein --super-prefix"
 
-#: builtin/submodule--helper.c:3411
+#: builtin/submodule--helper.c:3526
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "'%s' ist kein gültiger Unterbefehl von submodule--helper"
@@ -23879,7 +24410,7 @@ msgstr "Grund"
 msgid "reason of the update"
 msgstr "Grund für die Aktualisierung"
 
-#: builtin/tag.c:25
+#: builtin/tag.c:26
 msgid ""
 "git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]\n"
 "        <tagname> [<head>]"
@@ -23887,11 +24418,11 @@ msgstr ""
 "git tag [-a | -s | -u <Schlüssel-ID>] [-f] [-m <Beschreibung> | -F <Datei>]\n"
 "        <Tagname> [<Commit>]"
 
-#: builtin/tag.c:27
+#: builtin/tag.c:28
 msgid "git tag -d <tagname>..."
 msgstr "git tag -d <Tagname>..."
 
-#: builtin/tag.c:28
+#: builtin/tag.c:29
 msgid ""
 "git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--"
 "points-at <object>]\n"
@@ -23903,21 +24434,21 @@ msgstr ""
 "        [--format=<format>] [--merged <Commit>] [--no-merged <Commit>] "
 "[<Muster>...]"
 
-#: builtin/tag.c:30
+#: builtin/tag.c:31
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr "git tag -v [--format=<Format>] <Tagname>..."
 
-#: builtin/tag.c:100
+#: builtin/tag.c:101
 #, c-format
 msgid "tag '%s' not found."
 msgstr "Tag '%s' nicht gefunden."
 
-#: builtin/tag.c:135
+#: builtin/tag.c:136
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr "Tag '%s' gelöscht (war %s)\n"
 
-#: builtin/tag.c:170
+#: builtin/tag.c:171
 #, c-format
 msgid ""
 "\n"
@@ -23930,7 +24461,7 @@ msgstr ""
 "  %s\n"
 "ein. Zeilen, die mit '%c' beginnen, werden ignoriert.\n"
 
-#: builtin/tag.c:174
+#: builtin/tag.c:175
 #, c-format
 msgid ""
 "\n"
@@ -23945,11 +24476,11 @@ msgstr ""
 "ein. Zeilen, die mit '%c' beginnen, werden behalten; Sie dürfen diese\n"
 "selbst entfernen wenn Sie möchten.\n"
 
-#: builtin/tag.c:240
+#: builtin/tag.c:241
 msgid "unable to sign the tag"
 msgstr "konnte Tag nicht signieren"
 
-#: builtin/tag.c:258
+#: builtin/tag.c:259
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -23963,115 +24494,119 @@ msgstr ""
 "\n"
 "\tgit tag -f %s %s^{}"
 
-#: builtin/tag.c:274
+#: builtin/tag.c:275
 msgid "bad object type."
 msgstr "ungültiger Objekt-Typ"
 
-#: builtin/tag.c:325
+#: builtin/tag.c:326
 msgid "no tag message?"
 msgstr "keine Tag-Beschreibung?"
 
-#: builtin/tag.c:332
+#: builtin/tag.c:333
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "Die Tag-Beschreibung wurde in %s gelassen\n"
 
-#: builtin/tag.c:444
+#: builtin/tag.c:445
 msgid "list tag names"
 msgstr "Tagnamen auflisten"
 
-#: builtin/tag.c:446
+#: builtin/tag.c:447
 msgid "print <n> lines of each tag message"
 msgstr "<n> Zeilen jeder Tag-Beschreibung anzeigen"
 
-#: builtin/tag.c:448
+#: builtin/tag.c:449
 msgid "delete tags"
 msgstr "Tags löschen"
 
-#: builtin/tag.c:449
+#: builtin/tag.c:450
 msgid "verify tags"
 msgstr "Tags überprüfen"
 
-#: builtin/tag.c:451
+#: builtin/tag.c:452
 msgid "Tag creation options"
 msgstr "Optionen für Erstellung von Tags"
 
-#: builtin/tag.c:453
+#: builtin/tag.c:454
 msgid "annotated tag, needs a message"
 msgstr "annotiertes Tag, benötigt eine Beschreibung"
 
-#: builtin/tag.c:455
+#: builtin/tag.c:456
 msgid "tag message"
 msgstr "Tag-Beschreibung"
 
-#: builtin/tag.c:457
+#: builtin/tag.c:458
 msgid "force edit of tag message"
 msgstr "Bearbeitung der Tag-Beschreibung erzwingen"
 
-#: builtin/tag.c:458
+#: builtin/tag.c:459
 msgid "annotated and GPG-signed tag"
 msgstr "annotiertes und GPG-signiertes Tag"
 
-#: builtin/tag.c:461
+#: builtin/tag.c:462
 msgid "use another key to sign the tag"
 msgstr "einen anderen Schlüssel verwenden, um das Tag zu signieren"
 
-#: builtin/tag.c:462
+#: builtin/tag.c:463
 msgid "replace the tag if exists"
 msgstr "das Tag ersetzen, wenn es existiert"
 
-#: builtin/tag.c:463 builtin/update-ref.c:511
+#: builtin/tag.c:464 builtin/update-ref.c:511
 msgid "create a reflog"
 msgstr "Reflog erstellen"
 
-#: builtin/tag.c:465
+#: builtin/tag.c:466
 msgid "Tag listing options"
 msgstr "Optionen für Auflistung der Tags"
 
-#: builtin/tag.c:466
+#: builtin/tag.c:467
 msgid "show tag list in columns"
 msgstr "Liste der Tags in Spalten anzeigen"
 
-#: builtin/tag.c:467 builtin/tag.c:469
+#: builtin/tag.c:468 builtin/tag.c:470
 msgid "print only tags that contain the commit"
 msgstr "nur Tags ausgeben, die diesen Commit beinhalten"
 
-#: builtin/tag.c:468 builtin/tag.c:470
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that don't contain the commit"
 msgstr "nur Tags ausgeben, die diesen Commit nicht enthalten"
 
-#: builtin/tag.c:471
+#: builtin/tag.c:472
 msgid "print only tags that are merged"
 msgstr "nur Tags ausgeben, die gemerged wurden"
 
-#: builtin/tag.c:472
+#: builtin/tag.c:473
 msgid "print only tags that are not merged"
 msgstr "nur Tags ausgeben, die nicht gemerged wurden"
 
-#: builtin/tag.c:476
+#: builtin/tag.c:477
 msgid "print only tags of the object"
 msgstr "nur Tags von dem Objekt ausgeben"
 
-#: builtin/tag.c:558
+#: builtin/tag.c:559
 #, c-format
 msgid "the '%s' option is only allowed in list mode"
 msgstr "die Option '%s' ist nur im Listenmodus erlaubt"
 
-#: builtin/tag.c:597
+#: builtin/tag.c:598
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "'%s' ist kein gültiger Tagname."
 
-#: builtin/tag.c:602
+#: builtin/tag.c:603
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "Tag '%s' existiert bereits"
 
-#: builtin/tag.c:633
+#: builtin/tag.c:634
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "Tag '%s' aktualisiert (war %s)\n"
 
+#: builtin/unpack-objects.c:95
+msgid "pack exceeds maximum allowed size"
+msgstr "Paket überschreitet die maximal erlaubte Größe"
+
 #: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
 msgstr "Entpacke Objekte"
@@ -24139,167 +24674,167 @@ msgstr " OK"
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<Optionen>] [--] [<Datei>...]"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:993
 msgid "continue refresh even when index needs update"
 msgstr ""
 "Aktualisierung fortsetzen, auch wenn der Index aktualisiert werden muss"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:996
 msgid "refresh: ignore submodules"
 msgstr "Aktualisierung: ignoriert Submodule"
 
-#: builtin/update-index.c:980
+#: builtin/update-index.c:999
 msgid "do not ignore new files"
 msgstr "keine neuen Dateien ignorieren"
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:1001
 msgid "let files replace directories and vice-versa"
 msgstr "Dateien Verzeichnisse ersetzen lassen, und umgedreht"
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:1003
 msgid "notice files missing from worktree"
 msgstr "fehlende Dateien im Arbeitsverzeichnis beachten"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:1005
 msgid "refresh even if index contains unmerged entries"
 msgstr ""
 "aktualisieren, auch wenn der Index nicht zusammengeführte Einträge beinhaltet"
 
-#: builtin/update-index.c:989
+#: builtin/update-index.c:1008
 msgid "refresh stat information"
 msgstr "Dateiinformationen aktualisieren"
 
-#: builtin/update-index.c:993
+#: builtin/update-index.c:1012
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "wie --refresh, ignoriert aber \"assume-unchanged\" Einstellung"
 
-#: builtin/update-index.c:997
+#: builtin/update-index.c:1016
 msgid "<mode>,<object>,<path>"
 msgstr "<Modus>,<Objekt>,<Pfad>"
 
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1017
 msgid "add the specified entry to the index"
 msgstr "den angegebenen Eintrag zum Commit vormerken"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1027
 msgid "mark files as \"not changing\""
 msgstr "diese Datei immer als unverändert betrachten"
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1030
 msgid "clear assumed-unchanged bit"
 msgstr "\"assumed-unchanged\"-Bit löschen"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1033
 msgid "mark files as \"index-only\""
 msgstr "Dateien als \"index-only\" markieren"
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1036
 msgid "clear skip-worktree bit"
 msgstr "\"skip-worktree\"-Bit löschen"
 
-#: builtin/update-index.c:1020
+#: builtin/update-index.c:1039
 msgid "do not touch index-only entries"
 msgstr "\"index-only\" Einträge überspringen"
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1041
 msgid "add to index only; do not add content to object database"
 msgstr ""
 "die Änderungen nur zum Commit vormerken; Inhalt wird nicht der Objekt-"
 "Datenbank hinzugefügt"
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1043
 msgid "remove named paths even if present in worktree"
 msgstr ""
 "benannte Pfade löschen, auch wenn sie sich im Arbeitsverzeichnis befinden"
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1045
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "mit --stdin: eingegebene Zeilen sind durch NUL-Bytes abgeschlossen"
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1047
 msgid "read list of paths to be updated from standard input"
 msgstr "Liste der zu aktualisierenden Pfade von der Standard-Eingabe lesen"
 
-#: builtin/update-index.c:1032
+#: builtin/update-index.c:1051
 msgid "add entries from standard input to the index"
 msgstr "Einträge von der Standard-Eingabe zum Commit vormerken"
 
-#: builtin/update-index.c:1036
+#: builtin/update-index.c:1055
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr ""
 "wiederholtes Einpflegen der Zustände #2 und #3 für die aufgelisteten Pfade"
 
-#: builtin/update-index.c:1040
+#: builtin/update-index.c:1059
 msgid "only update entries that differ from HEAD"
 msgstr "nur Einträge aktualisieren, die unterschiedlich zu HEAD sind"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1063
 msgid "ignore files missing from worktree"
 msgstr "fehlende Dateien im Arbeitsverzeichnis ignorieren"
 
-#: builtin/update-index.c:1047
+#: builtin/update-index.c:1066
 msgid "report actions to standard output"
 msgstr "die Aktionen in der Standard-Ausgabe ausgeben"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1068
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(für Fremdprogramme) keine gespeicherten, nicht aufgelöste Konflikte"
 
-#: builtin/update-index.c:1053
+#: builtin/update-index.c:1072
 msgid "write index in this format"
 msgstr "Index-Datei in diesem Format schreiben"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1074
 msgid "enable or disable split index"
-msgstr "Splitting des Index aktivieren oder deaktivieren"
+msgstr "aufgeteilten Index aktivieren oder deaktivieren"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1076
 msgid "enable/disable untracked cache"
 msgstr "Cache für unversionierte Dateien aktivieren oder deaktivieren"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1078
 msgid "test if the filesystem supports untracked cache"
 msgstr ""
 "prüfen, ob das Dateisystem einen Cache für unversionierte Dateien unterstützt"
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1080
 msgid "enable untracked cache without testing the filesystem"
 msgstr ""
 "Cache für unversionierte Dateien ohne Prüfung des Dateisystems aktivieren"
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1082
 msgid "write out the index even if is not flagged as changed"
 msgstr "Index rausschreiben, auch wenn dieser nicht als geändert markiert ist"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1084
 msgid "enable or disable file system monitor"
 msgstr "Dateisystem-Monitor aktivieren oder deaktivieren"
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1086
 msgid "mark files as fsmonitor valid"
 msgstr "Dateien als \"fsmonitor valid\" markieren"
 
-#: builtin/update-index.c:1070
+#: builtin/update-index.c:1089
 msgid "clear fsmonitor valid bit"
 msgstr "\"fsmonitor valid\"-Bit löschen"
 
-#: builtin/update-index.c:1173
+#: builtin/update-index.c:1195
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
 msgstr ""
 "core.splitIndex ist auf 'false' gesetzt; entfernen oder ändern Sie dies,\n"
-"wenn sie wirklich das Splitting des Index aktivieren möchten"
+"wenn sie wirklich die Aufteilung des Index aktivieren möchten"
 
-#: builtin/update-index.c:1182
+#: builtin/update-index.c:1204
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
 msgstr ""
 "core.splitIndex ist auf 'true' gesetzt; entfernen oder ändern Sie dies,\n"
-"wenn Sie wirklich das Splitting des Index deaktivieren möchten"
+"wenn Sie wirklich die Aufteilung des Index deaktivieren möchten"
 
-#: builtin/update-index.c:1194
+#: builtin/update-index.c:1216
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -24307,11 +24842,11 @@ msgstr ""
 "core.untrackedCache ist auf 'true' gesetzt; entfernen oder ändern Sie dies,\n"
 "wenn Sie wirklich den Cache für unversionierte Dateien deaktivieren möchten"
 
-#: builtin/update-index.c:1198
+#: builtin/update-index.c:1220
 msgid "Untracked cache disabled"
 msgstr "Cache für unversionierte Dateien deaktiviert"
 
-#: builtin/update-index.c:1206
+#: builtin/update-index.c:1228
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -24320,23 +24855,23 @@ msgstr ""
 "dies,\n"
 "wenn sie wirklich den Cache für unversionierte Dateien aktivieren möchten"
 
-#: builtin/update-index.c:1210
+#: builtin/update-index.c:1232
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "Cache für unversionierte Dateien für '%s' aktiviert"
 
-#: builtin/update-index.c:1218
+#: builtin/update-index.c:1241
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
 "core.fsmonitor nicht gesetzt; setzen Sie es, wenn Sie den Dateisystem-"
 "Monitor\n"
 "wirklich aktivieren möchten"
 
-#: builtin/update-index.c:1222
+#: builtin/update-index.c:1246
 msgid "fsmonitor enabled"
 msgstr "Dateisystem-Monitor aktiviert"
 
-#: builtin/update-index.c:1225
+#: builtin/update-index.c:1250
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
@@ -24344,7 +24879,7 @@ msgstr ""
 "Monitor\n"
 "wirklich deaktivieren möchten."
 
-#: builtin/update-index.c:1229
+#: builtin/update-index.c:1254
 msgid "fsmonitor disabled"
 msgstr "Dateisystem-Monitor deaktiviert"
 
@@ -24377,10 +24912,6 @@ msgstr "Standard-Eingabe hat durch NUL-Zeichen abgeschlossene Argumente"
 msgid "read updates from stdin"
 msgstr "Aktualisierungen von der Standard-Eingabe lesen"
 
-#: builtin/update-server-info.c:7
-msgid "git update-server-info [--force]"
-msgstr "git update-server-info [--force]"
-
 #: builtin/update-server-info.c:15
 msgid "update the info files from scratch"
 msgstr "die Informationsdateien von Grund auf aktualisieren"
@@ -24464,33 +24995,37 @@ msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<Optionen>] <Arbeitsverzeichnis>"
 
 #: builtin/worktree.c:25
+msgid "git worktree repair [<path>...]"
+msgstr "git worktree repair [<Pfad>...]"
+
+#: builtin/worktree.c:26
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <Pfad>"
 
-#: builtin/worktree.c:75
+#: builtin/worktree.c:76
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr "Entferne %s/%s: %s"
 
-#: builtin/worktree.c:148
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
 msgstr "entfernte Arbeitsverzeichnisse ausgeben"
 
-#: builtin/worktree.c:150
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr "Arbeitsverzeichnisse älter als <Zeit> verfallen lassen"
 
-#: builtin/worktree.c:220
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr "'%s' existiert bereits"
 
-#: builtin/worktree.c:229
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
 msgstr "nicht nutzbares Ziel des Arbeitsverzeichnisses '%s'"
 
-#: builtin/worktree.c:234
+#: builtin/worktree.c:235
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -24500,7 +25035,7 @@ msgstr ""
 "benutzen Sie '%s -f -f' zum Überschreiben, oder 'unlock' und 'prune'\n"
 "oder 'remove' zum Löschen"
 
-#: builtin/worktree.c:236
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -24510,137 +25045,159 @@ msgstr ""
 "benutzen Sie '%s -f' zum Überschreiben, oder 'prune' oder 'remove' zum\n"
 "Löschen"
 
-#: builtin/worktree.c:287
+#: builtin/worktree.c:248
+#, c-format
+msgid "failed to copy '%s' to '%s'; sparse-checkout may not work correctly"
+msgstr ""
+"Fehler beim Kopieren von '%s' nach '%s'; partieller Checkout funktioniert "
+"möglicherweise nicht richtig"
+
+#: builtin/worktree.c:268
+#, c-format
+msgid "failed to copy worktree config from '%s' to '%s'"
+msgstr ""
+"Fehler beim Kopieren der Arbeitsverzeichniskonfiguration von '%s' nach '%s'"
+
+#: builtin/worktree.c:280 builtin/worktree.c:285
+#, c-format
+msgid "failed to unset '%s' in '%s'"
+msgstr "Fehler beim Aufheben von '%s' in '%s'"
+
+#: builtin/worktree.c:356
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "Konnte Verzeichnis '%s' nicht erstellen."
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:378
 msgid "initializing"
 msgstr "initialisiere"
 
-#: builtin/worktree.c:420 builtin/worktree.c:426
+#: builtin/worktree.c:492 builtin/worktree.c:498
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "Bereite Arbeitsverzeichnis vor (neuer Branch '%s')"
 
-#: builtin/worktree.c:422
+#: builtin/worktree.c:494
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr "Bereite Arbeitsverzeichnis vor (setze Branch '%s' um; war bei %s)"
 
-#: builtin/worktree.c:431
+#: builtin/worktree.c:503
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "Bereite Arbeitsverzeichnis vor (checke '%s' aus)"
 
-#: builtin/worktree.c:437
+#: builtin/worktree.c:509
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Bereite Arbeitsverzeichnis vor (losgelöster HEAD %s)"
 
-#: builtin/worktree.c:482
+#: builtin/worktree.c:554
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr ""
 "<Branch> auschecken, auch wenn dieser bereits in einem anderen "
 "Arbeitsverzeichnis ausgecheckt ist"
 
-#: builtin/worktree.c:485
+#: builtin/worktree.c:557
 msgid "create a new branch"
 msgstr "neuen Branch erstellen"
 
-#: builtin/worktree.c:487
+#: builtin/worktree.c:559
 msgid "create or reset a branch"
 msgstr "Branch erstellen oder umsetzen"
 
-#: builtin/worktree.c:489
+#: builtin/worktree.c:561
 msgid "populate the new working tree"
 msgstr "das neue Arbeitsverzeichnis auschecken"
 
-#: builtin/worktree.c:490
+#: builtin/worktree.c:562
 msgid "keep the new working tree locked"
 msgstr "das neue Arbeitsverzeichnis gesperrt lassen"
 
-#: builtin/worktree.c:492 builtin/worktree.c:729
+#: builtin/worktree.c:564 builtin/worktree.c:809
 msgid "reason for locking"
 msgstr "Sperrgrund"
 
-#: builtin/worktree.c:495
+#: builtin/worktree.c:567
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "Modus zum Folgen von Branches einstellen (siehe git-branch(1))"
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:570
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr ""
 "versuchen, eine Übereinstimmung des Branchnamens mit einem\n"
 "Remote-Tracking-Branch herzustellen"
 
-#: builtin/worktree.c:512
+#: builtin/worktree.c:584
 msgid "added with --lock"
 msgstr "mit --lock hinzugefügt"
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:646
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr ""
 "--[no]-track kann nur verwendet werden, wenn ein neuer Branch erstellt wird."
 
-#: builtin/worktree.c:691
+#: builtin/worktree.c:766
 msgid "show extended annotations and reasons, if available"
 msgstr "erweiterte Anmerkungen und Gründe anzeigen, falls vorhanden"
 
-#: builtin/worktree.c:693
+#: builtin/worktree.c:768
 msgid "add 'prunable' annotation to worktrees older than <time>"
 msgstr ""
 "'prunable'-Anmerkung zu Arbeitsverzeichnissen älter als <Zeit> hinzufügen"
 
-#: builtin/worktree.c:741 builtin/worktree.c:774 builtin/worktree.c:848
-#: builtin/worktree.c:972
+#: builtin/worktree.c:770
+msgid "terminate records with a NUL character"
+msgstr "Einträge mit NUL-Zeichen abschließen"
+
+#: builtin/worktree.c:821 builtin/worktree.c:854 builtin/worktree.c:928
+#: builtin/worktree.c:1052
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "'%s' ist kein Arbeitsverzeichnis"
 
-#: builtin/worktree.c:743 builtin/worktree.c:776
+#: builtin/worktree.c:823 builtin/worktree.c:856
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "Das Hauptarbeitsverzeichnis kann nicht gesperrt oder entsperrt werden."
 
-#: builtin/worktree.c:748
+#: builtin/worktree.c:828
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "'%s' ist bereits gesperrt, Grund: %s"
 
-#: builtin/worktree.c:750
+#: builtin/worktree.c:830
 #, c-format
 msgid "'%s' is already locked"
 msgstr "'%s' ist bereits gesperrt"
 
-#: builtin/worktree.c:778
+#: builtin/worktree.c:858
 #, c-format
 msgid "'%s' is not locked"
 msgstr "'%s' ist nicht gesperrt"
 
-#: builtin/worktree.c:819
+#: builtin/worktree.c:899
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr ""
 "Arbeitsverzeichnisse, die Submodule enthalten, können nicht verschoben oder\n"
 "entfernt werden."
 
-#: builtin/worktree.c:827
+#: builtin/worktree.c:907
 msgid "force move even if worktree is dirty or locked"
 msgstr ""
 "Verschieben erzwingen, auch wenn das Arbeitsverzeichnis geändert oder "
 "gesperrt ist"
 
-#: builtin/worktree.c:850 builtin/worktree.c:974
+#: builtin/worktree.c:930 builtin/worktree.c:1054
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "'%s' ist ein Hauptarbeitsverzeichnis"
 
-#: builtin/worktree.c:855
+#: builtin/worktree.c:935
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "konnte Zielname aus '%s' nicht bestimmen"
 
-#: builtin/worktree.c:868
+#: builtin/worktree.c:948
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -24650,7 +25207,7 @@ msgstr ""
 "benutzen Sie 'move -f -f' zum Überschreiben oder entsperren Sie zuerst\n"
 "das Arbeitsverzeichnis"
 
-#: builtin/worktree.c:870
+#: builtin/worktree.c:950
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -24659,40 +25216,40 @@ msgstr ""
 "benutzen Sie 'move -f -f' zum Überschreiben oder entsperren Sie zuerst\n"
 "das Arbeitsverzeichnis"
 
-#: builtin/worktree.c:873
+#: builtin/worktree.c:953
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "Validierung fehlgeschlagen, kann Arbeitszeichnis nicht verschieben: %s"
 
-#: builtin/worktree.c:878
+#: builtin/worktree.c:958
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "Fehler beim Verschieben von '%s' nach '%s'"
 
-#: builtin/worktree.c:924
+#: builtin/worktree.c:1004
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "Fehler beim Ausführen von 'git status' auf '%s'"
 
-#: builtin/worktree.c:928
+#: builtin/worktree.c:1008
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
 "'%s' enthält geänderte oder nicht versionierte Dateien, benutzen Sie --force "
 "zum Löschen"
 
-#: builtin/worktree.c:933
+#: builtin/worktree.c:1013
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "Fehler beim Ausführen von 'git status' auf '%s'. Code: %d"
 
-#: builtin/worktree.c:956
+#: builtin/worktree.c:1036
 msgid "force removal even if worktree is dirty or locked"
 msgstr ""
 "Löschen erzwingen, auch wenn das Arbeitsverzeichnis geändert oder gesperrt "
 "ist"
 
-#: builtin/worktree.c:979
+#: builtin/worktree.c:1059
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -24702,7 +25259,7 @@ msgstr ""
 "Benutzen Sie 'remove -f -f' zum Überschreiben oder entsperren Sie zuerst\n"
 "das Arbeitsverzeichnis."
 
-#: builtin/worktree.c:981
+#: builtin/worktree.c:1061
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -24711,17 +25268,17 @@ msgstr ""
 "benutzen Sie 'remove -f -f' zum Überschreiben oder entsperren Sie zuerst\n"
 "das Arbeitsverzeichnis"
 
-#: builtin/worktree.c:984
+#: builtin/worktree.c:1064
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "Validierung fehlgeschlagen, kann Arbeitsverzeichnis nicht löschen: %s"
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:1088
 #, c-format
 msgid "repair: %s: %s"
 msgstr "repariere: %s: %s"
 
-#: builtin/worktree.c:1011
+#: builtin/worktree.c:1091
 #, c-format
 msgid "error: %s: %s"
 msgstr "Fehler: %s: %s"
@@ -24827,29 +25384,29 @@ msgstr "leerer Alias für %s"
 msgid "recursive alias: %s"
 msgstr "rekursiver Alias: %s"
 
-#: git.c:479
+#: git.c:480
 msgid "write failure on standard output"
 msgstr "Fehler beim Schreiben in die Standard-Ausgabe."
 
-#: git.c:481
+#: git.c:482
 msgid "unknown write failure on standard output"
 msgstr "Unbekannter Fehler beim Schreiben in die Standard-Ausgabe."
 
-#: git.c:483
+#: git.c:484
 msgid "close failed on standard output"
 msgstr "Fehler beim Schließen der Standard-Ausgabe."
 
-#: git.c:835
+#: git.c:838
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr "Alias-Schleife erkannt: Erweiterung von '%s' schließt nicht ab:%s"
 
-#: git.c:885
+#: git.c:888
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "Kann %s nicht als eingebauten Befehl behandeln."
 
-#: git.c:898
+#: git.c:901
 #, c-format
 msgid ""
 "usage: %s\n"
@@ -24858,12 +25415,12 @@ msgstr ""
 "Verwendung: %s\n"
 "\n"
 
-#: git.c:918
+#: git.c:921
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr "Erweiterung von Alias '%s' fehlgeschlagen; '%s' ist kein Git-Befehl\n"
 
-#: git.c:930
+#: git.c:933
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "Fehler beim Ausführen von Befehl '%s': %s\n"
@@ -25020,143 +25577,143 @@ msgstr ""
 "  gefragt nach: %s\n"
 "    umgeleitet: %s"
 
-#: remote-curl.c:183
+#: remote-curl.c:184
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr "Ungültiges Quoting beim \"push-option\"-Wert: '%s'"
 
-#: remote-curl.c:304
+#: remote-curl.c:308
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr "%sinfo/refs nicht gültig: Ist das ein Git-Repository?"
 
-#: remote-curl.c:405
+#: remote-curl.c:409
 msgid "invalid server response; expected service, got flush packet"
 msgstr "ungültige Antwort des Servers; Service erwartet, Flush-Paket bekommen"
 
-#: remote-curl.c:436
+#: remote-curl.c:440
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr "ungültige Serverantwort; '%s' bekommen"
 
-#: remote-curl.c:496
+#: remote-curl.c:500
 #, c-format
 msgid "repository '%s' not found"
 msgstr "Repository '%s' nicht gefunden"
 
-#: remote-curl.c:500
+#: remote-curl.c:504
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr "Authentifizierung fehlgeschlagen für '%s'"
 
-#: remote-curl.c:504
+#: remote-curl.c:508
 #, c-format
 msgid "unable to access '%s' with http.pinnedPubkey configuration: %s"
 msgstr ""
 "auf '%s' kann nicht mit Konfiguration http.pinnedPubkey zugegriffen werden: "
 "%s"
 
-#: remote-curl.c:508
+#: remote-curl.c:512
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "konnte nicht auf '%s' zugreifen: %s"
 
-#: remote-curl.c:514
+#: remote-curl.c:518
 #, c-format
 msgid "redirecting to %s"
 msgstr "Umleitung nach %s"
 
-#: remote-curl.c:645
+#: remote-curl.c:649
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr "sollte kein EOF haben, wenn nicht behutsam mit EOF"
 
-#: remote-curl.c:657
+#: remote-curl.c:661
 msgid "remote server sent unexpected response end packet"
 msgstr "Remote Server sendete unerwartetes Antwort-Endpaket"
 
-#: remote-curl.c:726
+#: remote-curl.c:730
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr ""
 "konnte nicht RPC-POST-Daten zurückspulen - Versuchen Sie http.postBuffer zu "
 "erhöhen"
 
-#: remote-curl.c:755
+#: remote-curl.c:759
 #, c-format
 msgid "remote-curl: bad line length character: %.4s"
 msgstr "remote-curl: ungültiges Zeichen für Zeilenlänge: %.4s"
 
-#: remote-curl.c:757
+#: remote-curl.c:761
 msgid "remote-curl: unexpected response end packet"
 msgstr "remote-curl: unerwartetes Antwort-Endpaket"
 
-#: remote-curl.c:833
+#: remote-curl.c:837
 #, c-format
 msgid "RPC failed; %s"
 msgstr "RPC fehlgeschlagen; %s"
 
-#: remote-curl.c:873
+#: remote-curl.c:877
 msgid "cannot handle pushes this big"
 msgstr "kann solche großen Übertragungen nicht verarbeiten"
 
-#: remote-curl.c:986
+#: remote-curl.c:990
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr "kann Request nicht komprimieren; \"zlib deflate\"-Fehler %d"
 
-#: remote-curl.c:990
+#: remote-curl.c:994
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr "kann Request nicht komprimieren; \"zlib end\"-Fehler %d"
 
-#: remote-curl.c:1040
+#: remote-curl.c:1044
 #, c-format
 msgid "%d bytes of length header were received"
 msgstr "%d Bytes des Längen-Headers wurden empfangen"
 
-#: remote-curl.c:1042
+#: remote-curl.c:1046
 #, c-format
 msgid "%d bytes of body are still expected"
 msgstr "%d Bytes des Bodys werden noch erwartet"
 
-#: remote-curl.c:1131
+#: remote-curl.c:1135
 msgid "dumb http transport does not support shallow capabilities"
 msgstr "Dumb HTTP-Transport unterstützt keine shallow-Funktionen"
 
-#: remote-curl.c:1146
+#: remote-curl.c:1150
 msgid "fetch failed."
 msgstr "\"fetch\" fehlgeschlagen."
 
-#: remote-curl.c:1192
+#: remote-curl.c:1198
 msgid "cannot fetch by sha1 over smart http"
 msgstr "kann SHA-1 nicht über Smart-HTTP anfordern"
 
-#: remote-curl.c:1236 remote-curl.c:1242
+#: remote-curl.c:1242 remote-curl.c:1248
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr "Protokollfehler: SHA-1/Referenz erwartet, '%s' bekommen"
 
-#: remote-curl.c:1254 remote-curl.c:1372
+#: remote-curl.c:1260 remote-curl.c:1378
 #, c-format
 msgid "http transport does not support %s"
 msgstr "HTTP-Transport unterstützt nicht %s"
 
-#: remote-curl.c:1290
+#: remote-curl.c:1296
 msgid "git-http-push failed"
 msgstr "\"git-http-push\" fehlgeschlagen"
 
-#: remote-curl.c:1478
+#: remote-curl.c:1485
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr "remote-curl: Verwendung: git remote-curl <Remote-Repository> [<URL>]"
 
-#: remote-curl.c:1510
+#: remote-curl.c:1517
 msgid "remote-curl: error reading command stream from git"
 msgstr "remote-curl: Fehler beim Lesen des Kommando-Streams von Git"
 
-#: remote-curl.c:1517
+#: remote-curl.c:1524
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr "remote-curl: \"fetch\" ohne lokales Repository versucht"
 
-#: remote-curl.c:1558
+#: remote-curl.c:1565
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr "remote-curl: Unbekannter Befehl '%s' von Git"
@@ -25169,123 +25726,123 @@ msgstr "Arbeitsverzeichnis benötigt"
 msgid "could not find enlistment root"
 msgstr "konnte Root-Verzeichnis für Eintragungen nicht finden"
 
-#: contrib/scalar/scalar.c:89 contrib/scalar/scalar.c:351
-#: contrib/scalar/scalar.c:436 contrib/scalar/scalar.c:579
+#: contrib/scalar/scalar.c:89 contrib/scalar/scalar.c:350
+#: contrib/scalar/scalar.c:435 contrib/scalar/scalar.c:578
 #, c-format
 msgid "could not switch to '%s'"
 msgstr "konnte nicht zu '%s' wechseln"
 
-#: contrib/scalar/scalar.c:180
+#: contrib/scalar/scalar.c:179
 #, c-format
 msgid "could not configure %s=%s"
 msgstr "konnte %s=%s nicht konfigurieren"
 
-#: contrib/scalar/scalar.c:198
+#: contrib/scalar/scalar.c:197
 msgid "could not configure log.excludeDecoration"
 msgstr "konnte log.excludeDecoration nicht konfigurieren"
 
-#: contrib/scalar/scalar.c:219
+#: contrib/scalar/scalar.c:218
 msgid "Scalar enlistments require a worktree"
 msgstr "Skalare Eintragungen erfordern ein Arbeitsverzeichnis"
 
-#: contrib/scalar/scalar.c:311
+#: contrib/scalar/scalar.c:310
 #, c-format
 msgid "remote HEAD is not a branch: '%.*s'"
 msgstr "externer HEAD ist kein Branch: '%.*s'"
 
-#: contrib/scalar/scalar.c:317
+#: contrib/scalar/scalar.c:316
 msgid "failed to get default branch name from remote; using local default"
 msgstr ""
 "Fehler beim Abfragen des Standard-Branchnamens vom Remote-Repository; nutze "
 "lokalen Standardwert"
 
-#: contrib/scalar/scalar.c:330
+#: contrib/scalar/scalar.c:329
 msgid "failed to get default branch name"
 msgstr "Fehler beim Abfragen des Standard-Branchnamens"
 
-#: contrib/scalar/scalar.c:341
+#: contrib/scalar/scalar.c:340
 msgid "failed to unregister repository"
 msgstr "Fehler beim Austragen des Repositories"
 
-#: contrib/scalar/scalar.c:356
+#: contrib/scalar/scalar.c:355
 msgid "failed to delete enlistment directory"
 msgstr "Fehler beim Löschen des Eintragungs-Verzeichnisses"
 
-#: contrib/scalar/scalar.c:376
+#: contrib/scalar/scalar.c:375
 msgid "branch to checkout after clone"
 msgstr "Branch, der nach dem Klonen ausgecheckt werden soll"
 
-#: contrib/scalar/scalar.c:378
+#: contrib/scalar/scalar.c:377
 msgid "when cloning, create full working directory"
 msgstr "vollständiges Arbeitsverzeichnis beim Klonen erstellen"
 
-#: contrib/scalar/scalar.c:380
+#: contrib/scalar/scalar.c:379
 msgid "only download metadata for the branch that will be checked out"
 msgstr "lade nur Metadaten des Branches herunter, der ausgecheckt wird"
 
-#: contrib/scalar/scalar.c:385
+#: contrib/scalar/scalar.c:384
 msgid "scalar clone [<options>] [--] <repo> [<dir>]"
 msgstr "scalar clone [<Optionen>] [--] <Repository> [<Verzeichnis>]"
 
-#: contrib/scalar/scalar.c:410
+#: contrib/scalar/scalar.c:409
 #, c-format
 msgid "cannot deduce worktree name from '%s'"
 msgstr "konnte Name für Arbeitsverzeichnis nicht von '%s' ableiten"
 
-#: contrib/scalar/scalar.c:419
+#: contrib/scalar/scalar.c:418
 #, c-format
 msgid "directory '%s' exists already"
 msgstr "Verzeichnis '%s' existiert bereits"
 
-#: contrib/scalar/scalar.c:446
+#: contrib/scalar/scalar.c:445
 #, c-format
 msgid "failed to get default branch for '%s'"
 msgstr "Fehler beim Abfragen des Default-Branches für '%s'"
 
-#: contrib/scalar/scalar.c:457
+#: contrib/scalar/scalar.c:456
 #, c-format
 msgid "could not configure remote in '%s'"
 msgstr "konnte Remote-Repository in '%s' nicht konfigurieren"
 
-#: contrib/scalar/scalar.c:466
+#: contrib/scalar/scalar.c:465
 #, c-format
 msgid "could not configure '%s'"
 msgstr "konnte '%s' nicht konfigurieren"
 
-#: contrib/scalar/scalar.c:469
+#: contrib/scalar/scalar.c:468
 msgid "partial clone failed; attempting full clone"
 msgstr "partielles Klonen fehlgeschlagen; versuche vollständiges Klonen"
 
-#: contrib/scalar/scalar.c:473
+#: contrib/scalar/scalar.c:472
 msgid "could not configure for full clone"
 msgstr "konnte nicht für vollständiges Klonen konfigurieren"
 
-#: contrib/scalar/scalar.c:505
+#: contrib/scalar/scalar.c:504
 msgid "`scalar list` does not take arguments"
 msgstr "`scalar list` akzeptiert keine Argumente"
 
-#: contrib/scalar/scalar.c:518
+#: contrib/scalar/scalar.c:517
 msgid "scalar register [<enlistment>]"
 msgstr "scalar register [<Eintragung>]"
 
-#: contrib/scalar/scalar.c:545
+#: contrib/scalar/scalar.c:544
 msgid "reconfigure all registered enlistments"
 msgstr "alle registrierten Eintragungen neu konfigurieren"
 
-#: contrib/scalar/scalar.c:549
+#: contrib/scalar/scalar.c:548
 msgid "scalar reconfigure [--all | <enlistment>]"
 msgstr "scalar reconfigure [--all | <Eintragung>]"
 
-#: contrib/scalar/scalar.c:567
+#: contrib/scalar/scalar.c:566
 msgid "--all or <enlistment>, but not both"
 msgstr "--all oder <Eintragung>, aber nicht beides"
 
-#: contrib/scalar/scalar.c:582
+#: contrib/scalar/scalar.c:581
 #, c-format
 msgid "git repository gone in '%s'"
 msgstr "Git-Repository entfernt in '%s'"
 
-#: contrib/scalar/scalar.c:622
+#: contrib/scalar/scalar.c:621
 msgid ""
 "scalar run <task> [<enlistment>]\n"
 "Tasks:\n"
@@ -25293,42 +25850,55 @@ msgstr ""
 "scalar run <Aufgabe> [<Eintragung>]\n"
 "Aufgaben:\n"
 
-#: contrib/scalar/scalar.c:640
+#: contrib/scalar/scalar.c:639
 #, c-format
 msgid "no such task: '%s'"
 msgstr "Aufgabe nicht gefunden: '%s'"
 
-#: contrib/scalar/scalar.c:690
+#: contrib/scalar/scalar.c:689
 msgid "scalar unregister [<enlistment>]"
 msgstr "scalar unregister [<Eintragung>]"
 
-#: contrib/scalar/scalar.c:737
+#: contrib/scalar/scalar.c:736
 msgid "scalar delete <enlistment>"
 msgstr "scalar delete <Eintragung>"
 
-#: contrib/scalar/scalar.c:752
+#: contrib/scalar/scalar.c:751
 msgid "refusing to delete current working directory"
 msgstr "Löschen des aktuellen Arbeitsverzeichnisses wurde verweigert"
 
-#: contrib/scalar/scalar.c:767
+#: contrib/scalar/scalar.c:766
 msgid "include Git version"
 msgstr "Git-Version einbeziehen"
 
-#: contrib/scalar/scalar.c:769
+#: contrib/scalar/scalar.c:768
 msgid "include Git's build options"
 msgstr "Build-Optionen von Git einbeziehen"
 
-#: contrib/scalar/scalar.c:773
+#: contrib/scalar/scalar.c:772
 msgid "scalar verbose [-v | --verbose] [--build-options]"
 msgstr "scalar verbose [-v | --verbose] [--build-options]"
 
+#: contrib/scalar/scalar.c:813
+msgid "-C requires a <directory>"
+msgstr "-C erfordert ein <Verzeichnis>"
+
+#: contrib/scalar/scalar.c:815
+#, c-format
+msgid "could not change to '%s'"
+msgstr "konnte nicht zu '%s' wechseln"
+
 #: contrib/scalar/scalar.c:821
+msgid "-c requires a <key>=<value> argument"
+msgstr "-c benötigt ein <Schlüssel>=<Wert> Argument"
+
+#: contrib/scalar/scalar.c:839
 msgid ""
-"scalar <command> [<options>]\n"
+"scalar [-C <directory>] [-c <key>=<value>] <command> [<options>]\n"
 "\n"
 "Commands:\n"
 msgstr ""
-"scalar <Befehl> [<Optionen>]\n"
+"scalar [-C <Verzeichnis>] [-c <Schlüssel>=<Wert>] <Befehl> [<Optionen>]\n"
 "\n"
 "Befehle:\n"
 
@@ -25340,44 +25910,44 @@ msgstr "keine Compiler-Information verfügbar\n"
 msgid "no libc information available\n"
 msgstr "keine libc Informationen verfügbar\n"
 
-#: list-objects-filter-options.h:94
+#: list-objects-filter-options.h:126
 msgid "args"
 msgstr "Argumente"
 
-#: list-objects-filter-options.h:95
+#: list-objects-filter-options.h:127
 msgid "object filtering"
 msgstr "Filtern nach Objekten"
 
-#: parse-options.h:183
+#: parse-options.h:188
 msgid "expiry-date"
 msgstr "Verfallsdatum"
 
-#: parse-options.h:197
+#: parse-options.h:202
 msgid "no-op (backward compatibility)"
 msgstr "Kein Effekt (Rückwärtskompatibilität)"
 
-#: parse-options.h:310
+#: parse-options.h:341
 msgid "be more verbose"
 msgstr "erweiterte Ausgaben"
 
-#: parse-options.h:312
+#: parse-options.h:343
 msgid "be more quiet"
 msgstr "weniger Ausgaben"
 
-#: parse-options.h:318
+#: parse-options.h:349
 msgid "use <n> digits to display object names"
 msgstr "benutze <Anzahl> Ziffern zur Anzeige von Objektnamen"
 
-#: parse-options.h:337
+#: parse-options.h:368
 msgid "how to strip spaces and #comments from message"
 msgstr ""
 "wie Leerzeichen und #Kommentare von der Beschreibung getrennt werden sollen"
 
-#: parse-options.h:338
+#: parse-options.h:369
 msgid "read pathspec from file"
 msgstr "Pfadspezifikation aus einer Datei lesen"
 
-#: parse-options.h:339
+#: parse-options.h:370
 msgid ""
 "with --pathspec-from-file, pathspec elements are separated with NUL character"
 msgstr ""
@@ -25645,463 +26215,469 @@ msgid "Display help information about Git"
 msgstr "Hilfsinformationen über Git anzeigen"
 
 #: command-list.h:108
+msgid "Run git hooks"
+msgstr "Git-Hooks ausführen"
+
+#: command-list.h:109
 msgid "Server side implementation of Git over HTTP"
 msgstr "serverseitige Implementierung von Git über HTTP"
 
-#: command-list.h:109
+#: command-list.h:110
 msgid "Download from a remote Git repository via HTTP"
 msgstr "von einem Remote-Git-Repository über HTTP herunterladen"
 
-#: command-list.h:110
+#: command-list.h:111
 msgid "Push objects over HTTP/DAV to another repository"
 msgstr "Objekte über HTTP/DAV zu einem anderen Repository übertragen"
 
-#: command-list.h:111
+#: command-list.h:112
 msgid "Send a collection of patches from stdin to an IMAP folder"
 msgstr ""
 "eine Sammlung von Patches von der Standard-Eingabe zu einem IMAP-Ordner "
 "senden"
 
-#: command-list.h:112
+#: command-list.h:113
 msgid "Build pack index file for an existing packed archive"
 msgstr "Pack-Index-Datei für ein existierendes gepacktes Archiv erzeugen"
 
-#: command-list.h:113
+#: command-list.h:114
 msgid "Create an empty Git repository or reinitialize an existing one"
 msgstr ""
 "ein leeres Git-Repository erstellen oder ein bestehendes neuinitialisieren"
 
-#: command-list.h:114
+#: command-list.h:115
 msgid "Instantly browse your working repository in gitweb"
 msgstr "Ihr aktuelles Repository sofort in gitweb betrachten"
 
-#: command-list.h:115
+#: command-list.h:116
 msgid "Add or parse structured information in commit messages"
 msgstr ""
 "Strukturierte Informationen in Commit-Beschreibungen hinzufügen oder parsen"
 
-#: command-list.h:116
+#: command-list.h:117
 msgid "Show commit logs"
 msgstr "Commit-Historie anzeigen"
 
-#: command-list.h:117
+#: command-list.h:118
 msgid "Show information about files in the index and the working tree"
 msgstr ""
 "Informationen über Dateien in dem Index und im Arbeitsverzeichnis anzeigen"
 
-#: command-list.h:118
+#: command-list.h:119
 msgid "List references in a remote repository"
 msgstr "Referenzen in einem Remote-Repository auflisten"
 
-#: command-list.h:119
+#: command-list.h:120
 msgid "List the contents of a tree object"
 msgstr "Inhalte eines Tree-Objektes auflisten"
 
-#: command-list.h:120
+#: command-list.h:121
 msgid "Extracts patch and authorship from a single e-mail message"
 msgstr ""
 "Patch und Urheberschaft von einer einzelnen E-Mail-Nachricht extrahieren"
 
-#: command-list.h:121
+#: command-list.h:122
 msgid "Simple UNIX mbox splitter program"
 msgstr "einfaches UNIX mbox Splitter-Programm"
 
-#: command-list.h:122
+#: command-list.h:123
 msgid "Run tasks to optimize Git repository data"
 msgstr "Aufgaben ausführen, um Git-Repository-Daten zu optimieren"
 
-#: command-list.h:123
+#: command-list.h:124
 msgid "Join two or more development histories together"
 msgstr "zwei oder mehr Entwicklungszweige zusammenführen"
 
-#: command-list.h:124
+#: command-list.h:125
 msgid "Find as good common ancestors as possible for a merge"
 msgstr "möglichst besten gemeinsamen Vorgänger-Commit für einen Merge finden"
 
-#: command-list.h:125
+#: command-list.h:126
 msgid "Run a three-way file merge"
 msgstr "einen 3-Wege-Datei-Merge ausführen"
 
-#: command-list.h:126
+#: command-list.h:127
 msgid "Run a merge for files needing merging"
 msgstr "einen Merge für zusammenzuführende Dateien ausführen"
 
-#: command-list.h:127
+#: command-list.h:128
 msgid "The standard helper program to use with git-merge-index"
 msgstr "das Standard-Hilfsprogramm für die Verwendung mit git-merge-index"
 
-#: command-list.h:128
+#: command-list.h:129
 msgid "Show three-way merge without touching index"
 msgstr "3-Wege-Merge anzeigen ohne den Index zu verändern"
 
-#: command-list.h:129
+#: command-list.h:130
 msgid "Run merge conflict resolution tools to resolve merge conflicts"
 msgstr ""
 "Ausführen von Tools zur Auflösung von Merge-Konflikten zur Behebung dieser"
 
-#: command-list.h:130
+#: command-list.h:131
 msgid "Creates a tag object with extra validation"
 msgstr "Erstellt ein Tag-Objekt mit zusätzlicher Validierung"
 
-#: command-list.h:131
+#: command-list.h:132
 msgid "Build a tree-object from ls-tree formatted text"
 msgstr "Tree-Objekt aus ls-tree formattiertem Text erzeugen"
 
-#: command-list.h:132
+#: command-list.h:133
 msgid "Write and verify multi-pack-indexes"
-msgstr "multi-pack-indexes schreiben und überprüfen"
+msgstr "Multi-Pack-Indexe schreiben und überprüfen"
 
-#: command-list.h:133
+#: command-list.h:134
 msgid "Move or rename a file, a directory, or a symlink"
 msgstr ""
 "eine Datei, ein Verzeichnis, oder eine symbolische Verknüpfung verschieben "
 "oder umbenennen"
 
-#: command-list.h:134
+#: command-list.h:135
 msgid "Find symbolic names for given revs"
 msgstr "symbolische Namen für die gegebenen Commits finden"
 
-#: command-list.h:135
+#: command-list.h:136
 msgid "Add or inspect object notes"
 msgstr "Objekt-Notizen hinzufügen oder überprüfen"
 
-#: command-list.h:136
+#: command-list.h:137
 msgid "Import from and submit to Perforce repositories"
 msgstr "von Perforce Repositories importieren und nach diese senden"
 
-#: command-list.h:137
+#: command-list.h:138
 msgid "Create a packed archive of objects"
 msgstr "ein gepacktes Archiv von Objekten erstellen"
 
-#: command-list.h:138
+#: command-list.h:139
 msgid "Find redundant pack files"
 msgstr "redundante Paketdateien finden"
 
-#: command-list.h:139
+#: command-list.h:140
 msgid "Pack heads and tags for efficient repository access"
 msgstr "Branches und Tags für effizienten Zugriff auf das Repository packen"
 
-#: command-list.h:140
+#: command-list.h:141
 msgid "Compute unique ID for a patch"
 msgstr "eindeutige ID für einen Patch berechnen"
 
-#: command-list.h:141
+#: command-list.h:142
 msgid "Prune all unreachable objects from the object database"
 msgstr "alle nicht erreichbaren Objekte von der Objektdatenbank entfernen"
 
-#: command-list.h:142
+#: command-list.h:143
 msgid "Remove extra objects that are already in pack files"
 msgstr ""
 "zusätzliche Objekte, die sich bereits in Paketdateien befinden, entfernen"
 
-#: command-list.h:143
+#: command-list.h:144
 msgid "Fetch from and integrate with another repository or a local branch"
 msgstr ""
 "Objekte von einem externen Repository anfordern und sie mit einem anderen "
 "Repository oder einem lokalen Branch zusammenführen"
 
-#: command-list.h:144
+#: command-list.h:145
 msgid "Update remote refs along with associated objects"
 msgstr "Remote-Referenzen mitsamt den verbundenen Objekten aktualisieren"
 
-#: command-list.h:145
+#: command-list.h:146
 msgid "Applies a quilt patchset onto the current branch"
 msgstr "Patches aus quilt auf aktuellen Branch anwenden"
 
-#: command-list.h:146
+#: command-list.h:147
 msgid "Compare two commit ranges (e.g. two versions of a branch)"
 msgstr "zwei Commit-Bereiche vergleichen (zwei Versionen eines Branches)"
 
-#: command-list.h:147
+#: command-list.h:148
 msgid "Reads tree information into the index"
 msgstr "Verzeichnisinformationen in den Index einlesen"
 
-#: command-list.h:148
+#: command-list.h:149
 msgid "Reapply commits on top of another base tip"
 msgstr "Wiederholtes Anwenden von Commits auf anderem Basis-Commit"
 
-#: command-list.h:149
+#: command-list.h:150
 msgid "Receive what is pushed into the repository"
 msgstr "Empfangen was in das Repository übertragen wurde"
 
-#: command-list.h:150
+#: command-list.h:151
 msgid "Manage reflog information"
 msgstr "Reflog Informationen verwalten"
 
-#: command-list.h:151
+#: command-list.h:152
 msgid "Manage set of tracked repositories"
 msgstr "Menge von hinterlegten Repositories verwalten"
 
-#: command-list.h:152
+#: command-list.h:153
 msgid "Pack unpacked objects in a repository"
 msgstr "ungepackte Objekte in einem Repository packen"
 
-#: command-list.h:153
+#: command-list.h:154
 msgid "Create, list, delete refs to replace objects"
 msgstr "Referenzen für ersetzende Objekte erstellen, auflisten, löschen"
 
-#: command-list.h:154
+#: command-list.h:155
 msgid "Generates a summary of pending changes"
 msgstr "eine Übersicht über ausstehende Änderungen generieren"
 
-#: command-list.h:155
+#: command-list.h:156
 msgid "Reuse recorded resolution of conflicted merges"
 msgstr "aufgezeichnete Auflösung von Merge-Konflikten wiederverwenden"
 
-#: command-list.h:156
+#: command-list.h:157
 msgid "Reset current HEAD to the specified state"
 msgstr "aktuellen HEAD zu einem spezifizierten Zustand setzen"
 
-#: command-list.h:157
+#: command-list.h:158
 msgid "Restore working tree files"
 msgstr "Dateien im Arbeitsverzeichnis wiederherstellen"
 
-#: command-list.h:158
+#: command-list.h:159
 msgid "Lists commit objects in reverse chronological order"
 msgstr "Commit-Objekte in umgekehrter chronologischer Ordnung auflisten"
 
-#: command-list.h:159
+#: command-list.h:160
 msgid "Pick out and massage parameters"
 msgstr "Parameter herauspicken und ändern"
 
-#: command-list.h:160
+#: command-list.h:161
 msgid "Revert some existing commits"
 msgstr "einige bestehende Commits rückgängig machen"
 
-#: command-list.h:161
+#: command-list.h:162
 msgid "Remove files from the working tree and from the index"
 msgstr "Dateien im Arbeitsverzeichnis und vom Index löschen"
 
-#: command-list.h:162
+#: command-list.h:163
 msgid "Send a collection of patches as emails"
 msgstr "eine Sammlung von Patches als E-Mails versenden"
 
-#: command-list.h:163
+#: command-list.h:164
 msgid "Push objects over Git protocol to another repository"
 msgstr "Objekte über das Git Protokoll zu einem anderen Repository übertragen"
 
-#: command-list.h:164
+#: command-list.h:165
 msgid "Git's i18n setup code for shell scripts"
 msgstr "Gits i18n-Konfigurationscode für Shell-Skripte"
 
-#: command-list.h:165
+#: command-list.h:166
 msgid "Common Git shell script setup code"
 msgstr "allgemeiner Git Shell-Skript Konfigurationscode"
 
-#: command-list.h:166
+#: command-list.h:167
 msgid "Restricted login shell for Git-only SSH access"
 msgstr "Login-Shell beschränkt für Nur-Git SSH-Zugriff"
 
-#: command-list.h:167
+#: command-list.h:168
 msgid "Summarize 'git log' output"
 msgstr "Ausgabe von 'git log' zusammenfassen"
 
-#: command-list.h:168
+#: command-list.h:169
 msgid "Show various types of objects"
 msgstr "verschiedene Arten von Objekten anzeigen"
 
-#: command-list.h:169
+#: command-list.h:170
 msgid "Show branches and their commits"
 msgstr "Branches und ihre Commits ausgeben"
 
-#: command-list.h:170
+#: command-list.h:171
 msgid "Show packed archive index"
 msgstr "gepackten Archiv-Index anzeigen"
 
-#: command-list.h:171
+#: command-list.h:172
 msgid "List references in a local repository"
 msgstr "Referenzen in einem lokales Repository auflisten"
 
-#: command-list.h:172
-msgid "Initialize and modify the sparse-checkout"
-msgstr "Initialisiere und verändere den partiellen Checkout"
-
 #: command-list.h:173
+msgid "Reduce your working tree to a subset of tracked files"
+msgstr ""
+"Reduzieren Sie Ihr Arbeitsverzeichnis auf eine Teilmenge der versionierten "
+"Dateien"
+
+#: command-list.h:174
 msgid "Add file contents to the staging area"
 msgstr "Dateiinhalte der Staging-Area hinzufügen"
 
-#: command-list.h:174
+#: command-list.h:175
 msgid "Stash the changes in a dirty working directory away"
 msgstr "Änderungen in einem Arbeitsverzeichnis aufbewahren"
 
-#: command-list.h:175
+#: command-list.h:176
 msgid "Show the working tree status"
 msgstr "den Zustand des Arbeitsverzeichnisses anzeigen"
 
-#: command-list.h:176
+#: command-list.h:177
 msgid "Remove unnecessary whitespace"
 msgstr "nicht erforderlichen Whitespace entfernen"
 
-#: command-list.h:177
+#: command-list.h:178
 msgid "Initialize, update or inspect submodules"
 msgstr "Submodule initialisieren, aktualisieren oder inspizieren"
 
-#: command-list.h:178
+#: command-list.h:179
 msgid "Bidirectional operation between a Subversion repository and Git"
 msgstr ""
 "Bidirektionale Operationen zwischen einem Subversion Repository und Git"
 
-#: command-list.h:179
+#: command-list.h:180
 msgid "Switch branches"
 msgstr "Branches wechseln"
 
-#: command-list.h:180
+#: command-list.h:181
 msgid "Read, modify and delete symbolic refs"
 msgstr "symbolische Referenzen lesen, ändern und löschen"
 
-#: command-list.h:181
+#: command-list.h:182
 msgid "Create, list, delete or verify a tag object signed with GPG"
 msgstr ""
 "ein mit GPG signiertes Tag-Objekt erzeugen, auflisten, löschen oder "
 "verifizieren."
 
-#: command-list.h:182
+#: command-list.h:183
 msgid "Creates a temporary file with a blob's contents"
 msgstr "eine temporäre Datei mit den Inhalten eines Blobs erstellen"
 
-#: command-list.h:183
+#: command-list.h:184
 msgid "Unpack objects from a packed archive"
 msgstr "Objekte von einem gepackten Archiv entpacken"
 
-#: command-list.h:184
+#: command-list.h:185
 msgid "Register file contents in the working tree to the index"
 msgstr "Dateiinhalte aus dem Arbeitsverzeichnis im Index registrieren"
 
-#: command-list.h:185
+#: command-list.h:186
 msgid "Update the object name stored in a ref safely"
 msgstr ""
 "den Objektnamen, der in einer Referenz gespeichert ist, sicher aktualisieren"
 
-#: command-list.h:186
+#: command-list.h:187
 msgid "Update auxiliary info file to help dumb servers"
 msgstr "Hilfsinformationsdatei zur Hilfe von einfachen Servern aktualisieren"
 
-#: command-list.h:187
+#: command-list.h:188
 msgid "Send archive back to git-archive"
 msgstr "Archiv zurück zu git-archive senden"
 
-#: command-list.h:188
+#: command-list.h:189
 msgid "Send objects packed back to git-fetch-pack"
 msgstr "Objekte gepackt zurück an git-fetch-pack senden"
 
-#: command-list.h:189
+#: command-list.h:190
 msgid "Show a Git logical variable"
 msgstr "eine logische Variable von Git anzeigen"
 
-#: command-list.h:190
+#: command-list.h:191
 msgid "Check the GPG signature of commits"
 msgstr "die GPG-Signatur von Commits prüfen"
 
-#: command-list.h:191
+#: command-list.h:192
 msgid "Validate packed Git archive files"
 msgstr "gepackte Git-Archivdateien validieren"
 
-#: command-list.h:192
+#: command-list.h:193
 msgid "Check the GPG signature of tags"
 msgstr "die GPG-Signatur von Tags prüfen"
 
-#: command-list.h:193
+#: command-list.h:194
 msgid "Show logs with difference each commit introduces"
 msgstr "Logs mit dem Unterschied, den jeder Commit einführt, anzeigen"
 
-#: command-list.h:194
+#: command-list.h:195
 msgid "Manage multiple working trees"
 msgstr "mehrere Arbeitsverzeichnisse verwalten"
 
-#: command-list.h:195
+#: command-list.h:196
 msgid "Create a tree object from the current index"
 msgstr "Tree-Objekt vom aktuellen Index erstellen"
 
-#: command-list.h:196
+#: command-list.h:197
 msgid "Defining attributes per path"
 msgstr "Definition von Attributen pro Pfad"
 
-#: command-list.h:197
+#: command-list.h:198
 msgid "Git command-line interface and conventions"
 msgstr "Git Kommandozeilenschnittstelle und Konventionen"
 
-#: command-list.h:198
+#: command-list.h:199
 msgid "A Git core tutorial for developers"
 msgstr "eine Git Anleitung für Entwickler"
 
-#: command-list.h:199
+#: command-list.h:200
 msgid "Providing usernames and passwords to Git"
 msgstr "Bereitstellung von Benutzernamen und Passwörtern für Git"
 
-#: command-list.h:200
+#: command-list.h:201
 msgid "Git for CVS users"
 msgstr "Git für CVS Benutzer"
 
-#: command-list.h:201
+#: command-list.h:202
 msgid "Tweaking diff output"
 msgstr "Diff-Ausgabe optimieren"
 
-#: command-list.h:202
+#: command-list.h:203
 msgid "A useful minimum set of commands for Everyday Git"
 msgstr ""
 "ein kleine, nützliche Menge von Befehlen für die tägliche Verwendung von Git"
 
-#: command-list.h:203
+#: command-list.h:204
 msgid "Frequently asked questions about using Git"
 msgstr "Häufig gestellte Fragen über die Nutzung von Git"
 
-#: command-list.h:204
+#: command-list.h:205
 msgid "A Git Glossary"
 msgstr "ein Git-Glossar"
 
-#: command-list.h:205
+#: command-list.h:206
 msgid "Hooks used by Git"
 msgstr "von Git verwendete Hooks"
 
-#: command-list.h:206
+#: command-list.h:207
 msgid "Specifies intentionally untracked files to ignore"
 msgstr "Spezifikation von bewusst ignorierten, unversionierten Dateien"
 
-#: command-list.h:207
+#: command-list.h:208
 msgid "The Git repository browser"
 msgstr "der Git-Repository-Browser"
 
-#: command-list.h:208
+#: command-list.h:209
 msgid "Map author/committer names and/or E-Mail addresses"
 msgstr "Autor/Commit-Ersteller und/oder E-Mail-Adressen zuordnen"
 
-#: command-list.h:209
+#: command-list.h:210
 msgid "Defining submodule properties"
 msgstr "Definition von Submodul-Eigenschaften"
 
-#: command-list.h:210
+#: command-list.h:211
 msgid "Git namespaces"
 msgstr "Git Namensbereiche"
 
-#: command-list.h:211
+#: command-list.h:212
 msgid "Helper programs to interact with remote repositories"
 msgstr "Hilfsprogramme zur Interaktion mit Remote-Repositories"
 
-#: command-list.h:212
+#: command-list.h:213
 msgid "Git Repository Layout"
 msgstr "Git Repository Aufbau"
 
-#: command-list.h:213
+#: command-list.h:214
 msgid "Specifying revisions and ranges for Git"
 msgstr "Spezifikation von Commits und Bereichen für Git"
 
-#: command-list.h:214
+#: command-list.h:215
 msgid "Mounting one repository inside another"
 msgstr "Einbinden eines Repositories in ein anderes"
 
-#: command-list.h:215
+#: command-list.h:216
 msgid "A tutorial introduction to Git"
 msgstr "eine einführende Anleitung zu Git"
 
-#: command-list.h:216
+#: command-list.h:217
 msgid "A tutorial introduction to Git: part two"
 msgstr "eine einführende Anleitung zu Git: Teil zwei"
 
-#: command-list.h:217
+#: command-list.h:218
 msgid "Git web interface (web frontend to Git repositories)"
 msgstr "Git Web Interface (Web-Frontend für Git-Repositories)"
 
-#: command-list.h:218
+#: command-list.h:219
 msgid "An overview of recommended workflows with Git"
 msgstr "Eine Übersicht über empfohlene Arbeitsabläufe mit Git"
 
@@ -26146,82 +26722,58 @@ msgstr "Versuche einfachen Merge mit $pretty_name"
 msgid "Simple merge did not work, trying automatic merge."
 msgstr "Einfacher Merge hat nicht funktioniert, versuche automatischen Merge."
 
-#: git-submodule.sh:401
-#, sh-format
-msgid "Unable to find current revision in submodule path '$displaypath'"
-msgstr "Konnte aktuellen Commit in Submodul-Pfad '$displaypath' nicht finden."
-
-#: git-submodule.sh:411
-#, sh-format
-msgid "Unable to fetch in submodule path '$sm_path'"
-msgstr "Konnte \"fetch\" in Submodul-Pfad '$sm_path' nicht ausführen"
-
-#: git-submodule.sh:416
-#, sh-format
-msgid ""
-"Unable to find current ${remote_name}/${branch} revision in submodule path "
-"'$sm_path'"
-msgstr ""
-"Konnte aktuellen Commit von ${remote_name}/${branch} in Submodul-Pfad\n"
-"'$sm_path' nicht finden."
-
-#: git-submodule.sh:464
-#, sh-format
-msgid "Failed to recurse into submodule path '$displaypath'"
-msgstr "Fehler bei Rekursion in Submodul-Pfad '$displaypath'"
-
 #: git-sh-setup.sh:89 git-sh-setup.sh:94
 #, sh-format
 msgid "usage: $dashless $USAGE"
 msgstr "Verwendung: $dashless $USAGE"
 
-#: git-sh-setup.sh:183
+#: git-sh-setup.sh:182
 #, sh-format
 msgid "Cannot chdir to $cdup, the toplevel of the working tree"
 msgstr ""
 "Konnte nicht in Verzeichnis $cdup wechseln, der obersten Ebene des\n"
 "Arbeitsverzeichnisses."
 
-#: git-sh-setup.sh:192 git-sh-setup.sh:199
+#: git-sh-setup.sh:191 git-sh-setup.sh:198
 #, sh-format
 msgid "fatal: $program_name cannot be used without a working tree."
 msgstr ""
 "fatal: $program_name kann ohne ein Arbeitsverzeichnis nicht verwendet werden."
 
-#: git-sh-setup.sh:213
+#: git-sh-setup.sh:212
 msgid "Cannot rewrite branches: You have unstaged changes."
 msgstr ""
 "Kann Branches nicht neu schreiben: Sie haben Änderungen, die nicht zum "
 "Commit\n"
 "vorgemerkt sind."
 
-#: git-sh-setup.sh:216
+#: git-sh-setup.sh:215
 #, sh-format
 msgid "Cannot $action: You have unstaged changes."
 msgstr ""
 "Kann $action nicht ausführen: Sie haben Änderungen, die nicht zum Commit\n"
 "vorgemerkt sind."
 
-#: git-sh-setup.sh:227
+#: git-sh-setup.sh:226
 #, sh-format
 msgid "Cannot $action: Your index contains uncommitted changes."
 msgstr ""
 "Kann $action nicht ausführen: Die Staging-Area beinhaltet nicht committete\n"
 "Änderungen."
 
-#: git-sh-setup.sh:229
+#: git-sh-setup.sh:228
 msgid "Additionally, your index contains uncommitted changes."
 msgstr "Zusätzlich beinhaltet die Staging-Area nicht committete Änderungen."
 
-#: git-sh-setup.sh:349
+#: git-sh-setup.sh:348
 msgid "You need to run this command from the toplevel of the working tree."
 msgstr ""
 "Sie müssen den Befehl von der obersten Ebene des Arbeitsverzeichnisses "
 "ausführen."
 
-#: git-sh-setup.sh:354
+#: git-sh-setup.sh:353
 msgid "Unable to determine absolute path of git directory"
-msgstr "Konnte absoluten Pfad des Git-Verzeichnisses nicht bestimmen."
+msgstr "Konnte absoluten Pfad des Git-Verzeichnisses nicht bestimmen"
 
 #. TRANSLATORS: you can adjust this to align "git add -i" status menu
 #: git-add--interactive.perl:212
@@ -26584,7 +27136,7 @@ msgstr "fatal: Befehl '%s' mit Exit-Code %d beendet"
 
 #: git-send-email.perl:257
 msgid "the editor exited uncleanly, aborting everything"
-msgstr "Der Editor wurde unsauber beendet, breche alles ab."
+msgstr "der Editor wurde unsauber beendet, breche alles ab"
 
 #: git-send-email.perl:346
 #, perl-format
@@ -26833,7 +27385,7 @@ msgstr ""
 
 #: git-send-email.perl:1583
 msgid "Send this email reply required"
-msgstr "Zum Versenden dieser E-Mail ist eine Antwort erforderlich."
+msgstr "Zum Versenden dieser E-Mail ist eine Antwort erforderlich"
 
 #: git-send-email.perl:1617
 msgid "The required SMTP server is not properly defined."
@@ -26929,29 +27481,29 @@ msgstr "(%s) Fehler beim Schließen der Pipe nach '%s'"
 
 #: git-send-email.perl:2050
 msgid "cannot send message as 7bit"
-msgstr "Kann Nachricht nicht als 7bit versenden."
+msgstr "kann Nachricht nicht als 7bit versenden"
 
 #: git-send-email.perl:2058
 msgid "invalid transfer encoding"
-msgstr "Ungültiges Transfer-Encoding"
+msgstr "ungültiges Transfer-Encoding"
 
-#: git-send-email.perl:2095
+#: git-send-email.perl:2100
 #, perl-format
 msgid ""
-"fatal: %s: rejected by sendemail-validate hook\n"
+"fatal: %s: rejected by %s hook\n"
 "%s\n"
 "warning: no patches were sent\n"
 msgstr ""
-"fatal: %s: zurückgewiesen durch 'sendemail-validate' Hook\n"
+"fatal: %s: zurückgewiesen von %s Hook\n"
 "%s\n"
 "Warnung: Es wurden keine Patches gesendet\n"
 
-#: git-send-email.perl:2105 git-send-email.perl:2158 git-send-email.perl:2168
+#: git-send-email.perl:2110 git-send-email.perl:2163 git-send-email.perl:2173
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "konnte %s nicht öffnen: %s\n"
 
-#: git-send-email.perl:2108
+#: git-send-email.perl:2113
 #, perl-format
 msgid ""
 "fatal: %s:%d is longer than 998 characters\n"
@@ -26960,13 +27512,13 @@ msgstr ""
 "fatal: %s:%d ist länger als 998 Zeichen\n"
 "Warnung: Es wurden keine Patches gesendet\n"
 
-#: git-send-email.perl:2126
+#: git-send-email.perl:2131
 #, perl-format
 msgid "Skipping %s with backup suffix '%s'.\n"
 msgstr "Lasse %s mit Backup-Suffix '%s' aus.\n"
 
 #. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:2130
+#: git-send-email.perl:2135
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "Wollen Sie %s wirklich versenden? [y|N]: "
index fc004019a31ef4ba32f56a696b00f0cde3846717..7f3ace88880c1f43de64f0fca9e0e7bc21b8e4a9 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -59,6 +59,7 @@
 #   shallow          |  superficiel
 #   shell            |  interpréteur de commandes
 #   sparse           |  clairsemé
+#   split (index)    |  index scindé
 #   stash            |  remisage
 #   to stash         |  remiser
 #   tag              |  étiquette
@@ -77,8 +78,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2022-01-17 08:34+0800\n"
-"PO-Revision-Date: 2022-01-12 21:11+0100\n"
+"POT-Creation-Date: 2022-04-13 14:52+0800\n"
+"PO-Revision-Date: 2022-04-13 21:17+0200\n"
 "Last-Translator: Cédric Malard <c.malard-git@valdun.net>\n"
 "Language-Team: Jean-Noël Avila <jn.avila@free.fr>\n"
 "Language: fr\n"
@@ -88,216 +89,215 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=n<=1 ?0 : 1;\n"
 "X-Generator: Poedit 3.0.1\n"
 
-#: add-interactive.c:380
+#: add-interactive.c:382
 #, c-format
 msgid "Huh (%s)?"
 msgstr "Hein (%s) ?"
 
-#: add-interactive.c:533 add-interactive.c:834 reset.c:65 sequencer.c:3509
-#: sequencer.c:3974 sequencer.c:4136 builtin/rebase.c:1233
-#: builtin/rebase.c:1642
+#: add-interactive.c:535 add-interactive.c:836 reset.c:136 sequencer.c:3505
+#: sequencer.c:3970 sequencer.c:4127 builtin/rebase.c:1261
+#: builtin/rebase.c:1671
 msgid "could not read index"
 msgstr "impossible de lire l'index"
 
-#: add-interactive.c:588 git-add--interactive.perl:269
+#: add-interactive.c:590 git-add--interactive.perl:269
 #: git-add--interactive.perl:294
 msgid "binary"
 msgstr "binaire"
 
-#: add-interactive.c:646 git-add--interactive.perl:278
+#: add-interactive.c:648 git-add--interactive.perl:278
 #: git-add--interactive.perl:332
 msgid "nothing"
 msgstr "rien"
 
-#: add-interactive.c:647 git-add--interactive.perl:314
+#: add-interactive.c:649 git-add--interactive.perl:314
 #: git-add--interactive.perl:329
 msgid "unchanged"
 msgstr "inchangé"
 
-#: add-interactive.c:684 git-add--interactive.perl:641
+#: add-interactive.c:686 git-add--interactive.perl:641
 msgid "Update"
 msgstr "Mise à jour"
 
-#: add-interactive.c:701 add-interactive.c:889
+#: add-interactive.c:703 add-interactive.c:891
 #, c-format
 msgid "could not stage '%s'"
 msgstr "impossible d'indexer '%s'"
 
-#: add-interactive.c:707 add-interactive.c:896 reset.c:89 sequencer.c:3713
+#: add-interactive.c:709 add-interactive.c:898 reset.c:160 sequencer.c:3709
 msgid "could not write index"
 msgstr "impossible d'écrire l'index"
 
-#: add-interactive.c:710 git-add--interactive.perl:626
+#: add-interactive.c:712 git-add--interactive.perl:626
 #, c-format, perl-format
 msgid "updated %d path\n"
 msgid_plural "updated %d paths\n"
 msgstr[0] "%d chemin mis à jour\n"
 msgstr[1] "%d chemins mis à jour\n"
 
-#: add-interactive.c:728 git-add--interactive.perl:676
+#: add-interactive.c:730 git-add--interactive.perl:676
 #, c-format, perl-format
 msgid "note: %s is untracked now.\n"
 msgstr "note : %s n'est plus suivi à présent.\n"
 
-#: add-interactive.c:733 apply.c:4151 builtin/checkout.c:306
+#: add-interactive.c:735 apply.c:4133 builtin/checkout.c:311
 #: builtin/reset.c:167
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "échec de make_cache_entry pour le chemin '%s'"
 
-#: add-interactive.c:763 git-add--interactive.perl:653
+#: add-interactive.c:765 git-add--interactive.perl:653
 msgid "Revert"
 msgstr "Inverser"
 
-#: add-interactive.c:779
+#: add-interactive.c:781
 msgid "Could not parse HEAD^{tree}"
 msgstr "Impossible d'analyser HEAD^{tree}"
 
-#: add-interactive.c:817 git-add--interactive.perl:629
+#: add-interactive.c:819 git-add--interactive.perl:629
 #, c-format, perl-format
 msgid "reverted %d path\n"
 msgid_plural "reverted %d paths\n"
 msgstr[0] "%d chemin inversé\n"
 msgstr[1] "%d chemins inversés\n"
 
-#: add-interactive.c:868 git-add--interactive.perl:693
+#: add-interactive.c:870 git-add--interactive.perl:693
 #, c-format
 msgid "No untracked files.\n"
 msgstr "Aucun Fichier non suivi.\n"
 
-#: add-interactive.c:872 git-add--interactive.perl:687
+#: add-interactive.c:874 git-add--interactive.perl:687
 msgid "Add untracked"
 msgstr "Ajouter un fichier non-suivi"
 
-#: add-interactive.c:899 git-add--interactive.perl:623
+#: add-interactive.c:901 git-add--interactive.perl:623
 #, c-format, perl-format
 msgid "added %d path\n"
 msgid_plural "added %d paths\n"
 msgstr[0] "%d chemin ajouté\n"
 msgstr[1] "%d chemins ajoutés\n"
 
-#: add-interactive.c:929
+#: add-interactive.c:931
 #, c-format
 msgid "ignoring unmerged: %s"
 msgstr "fichier non-fusionné ignoré : %s"
 
-#: add-interactive.c:941 add-patch.c:1752 git-add--interactive.perl:1371
+#: add-interactive.c:943 add-patch.c:1758 git-add--interactive.perl:1371
 #, c-format
 msgid "Only binary files changed.\n"
 msgstr "Seuls des fichiers binaires ont changé.\n"
 
-#: add-interactive.c:943 add-patch.c:1750 git-add--interactive.perl:1373
+#: add-interactive.c:945 add-patch.c:1756 git-add--interactive.perl:1373
 #, c-format
 msgid "No changes.\n"
 msgstr "Aucune modification.\n"
 
-#: add-interactive.c:947 git-add--interactive.perl:1381
+#: add-interactive.c:949 git-add--interactive.perl:1381
 msgid "Patch update"
 msgstr "Mise à jour par patch"
 
-#: add-interactive.c:986 git-add--interactive.perl:1794
+#: add-interactive.c:988 git-add--interactive.perl:1794
 msgid "Review diff"
 msgstr "Réviser la différence"
 
-#: add-interactive.c:1014
+#: add-interactive.c:1016
 msgid "show paths with changes"
 msgstr "afficher les chemins comprenant des modifications"
 
-#: add-interactive.c:1016
+#: add-interactive.c:1018
 msgid "add working tree state to the staged set of changes"
 msgstr ""
 "ajouter l'état de l'arbre de travail à l'ensemble des modifications indexées"
 
-#: add-interactive.c:1018
+#: add-interactive.c:1020
 msgid "revert staged set of changes back to the HEAD version"
 msgstr "retourner l'ensemble de modifications indexées à la version HEAD"
 
-#: add-interactive.c:1020
+#: add-interactive.c:1022
 msgid "pick hunks and update selectively"
 msgstr "sélection et mise à jour individuelle des sections"
 
-#: add-interactive.c:1022
+#: add-interactive.c:1024
 msgid "view diff between HEAD and index"
 msgstr "visualiser les diffs entre HEAD et l'index"
 
-#: add-interactive.c:1024
+#: add-interactive.c:1026
 msgid "add contents of untracked files to the staged set of changes"
 msgstr ""
 "ajouter le contenu des fichiers non-suivis à l'ensemble des modifications "
 "indexées"
 
-#: add-interactive.c:1032 add-interactive.c:1081
+#: add-interactive.c:1034 add-interactive.c:1083
 msgid "Prompt help:"
 msgstr "Aide :"
 
-#: add-interactive.c:1034
+#: add-interactive.c:1036
 msgid "select a single item"
 msgstr "sélectionner un seul élément"
 
-#: add-interactive.c:1036
+#: add-interactive.c:1038
 msgid "select a range of items"
 msgstr "sélectionner une plage d'éléments"
 
-#: add-interactive.c:1038
+#: add-interactive.c:1040
 msgid "select multiple ranges"
 msgstr "sélectionner plusieurs plages"
 
-#: add-interactive.c:1040 add-interactive.c:1085
+#: add-interactive.c:1042 add-interactive.c:1087
 msgid "select item based on unique prefix"
 msgstr "sélectionner un élément basé sur une préfixe unique"
 
-#: add-interactive.c:1042
+#: add-interactive.c:1044
 msgid "unselect specified items"
 msgstr "désélectionner les éléments spécifiés"
 
-#: add-interactive.c:1044
+#: add-interactive.c:1046
 msgid "choose all items"
 msgstr "choisir tous les éléments"
 
-#: add-interactive.c:1046
+#: add-interactive.c:1048
 msgid "(empty) finish selecting"
 msgstr "(vide) arrêter de sélectionner"
 
-#: add-interactive.c:1083
+#: add-interactive.c:1085
 msgid "select a numbered item"
 msgstr "sélectionner un élément par son numéro"
 
-#: add-interactive.c:1087
+#: add-interactive.c:1089
 msgid "(empty) select nothing"
 msgstr "(vide) ne rien sélectionner"
 
-#: add-interactive.c:1095 builtin/clean.c:839 git-add--interactive.perl:1898
+#: add-interactive.c:1097 builtin/clean.c:839 git-add--interactive.perl:1898
 msgid "*** Commands ***"
 msgstr "*** Commandes ***"
 
-#: add-interactive.c:1096 builtin/clean.c:840 git-add--interactive.perl:1895
+#: add-interactive.c:1098 builtin/clean.c:840 git-add--interactive.perl:1895
 msgid "What now"
 msgstr "Et maintenant"
 
-#: add-interactive.c:1148 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "staged"
 msgstr "indexé"
 
-#: add-interactive.c:1148 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "unstaged"
 msgstr "non-indexé"
 
-#: add-interactive.c:1148 apply.c:5020 apply.c:5023 builtin/am.c:2367
-#: builtin/am.c:2370 builtin/bugreport.c:107 builtin/clone.c:128
-#: builtin/fetch.c:153 builtin/merge.c:287 builtin/pull.c:194
-#: builtin/submodule--helper.c:404 builtin/submodule--helper.c:1858
-#: builtin/submodule--helper.c:1861 builtin/submodule--helper.c:2504
-#: builtin/submodule--helper.c:2507 builtin/submodule--helper.c:2574
-#: builtin/submodule--helper.c:2579 builtin/submodule--helper.c:2812
+#: add-interactive.c:1150 apply.c:5002 apply.c:5005 builtin/am.c:2370
+#: builtin/am.c:2373 builtin/bugreport.c:107 builtin/clone.c:132
+#: builtin/fetch.c:154 builtin/merge.c:287 builtin/pull.c:194
+#: builtin/submodule--helper.c:412 builtin/submodule--helper.c:1872
+#: builtin/submodule--helper.c:1875 builtin/submodule--helper.c:2709
+#: builtin/submodule--helper.c:2712 builtin/submodule--helper.c:2891
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "chemin"
 
-#: add-interactive.c:1155
+#: add-interactive.c:1157
 msgid "could not refresh index"
 msgstr "impossible de rafraîchir l'index"
 
-#: add-interactive.c:1169 builtin/clean.c:804 git-add--interactive.perl:1805
+#: add-interactive.c:1171 builtin/clean.c:804 git-add--interactive.perl:1805
 #, c-format
 msgid "Bye.\n"
 msgstr "Au revoir.\n"
@@ -556,15 +556,15 @@ msgstr ""
 #, c-format, perl-format
 msgid "Apply mode change to index and worktree [y,n,q,a,d%s,?]? "
 msgstr ""
-"Appliquer le changement de mode dans l'index et l'arbre de travail [y,n,q,a,d"
-"%s,?] ? "
+"Appliquer le changement de mode dans l'index et l'arbre de travail [y,n,q,a,"
+"d%s,?] ? "
 
 #: add-patch.c:172 add-patch.c:217 git-add--interactive.perl:1470
 #, c-format, perl-format
 msgid "Apply deletion to index and worktree [y,n,q,a,d%s,?]? "
 msgstr ""
-"Appliquer la suppression dans l'index et l'arbre de travail [y,n,q,a,d"
-"%s,?] ? "
+"Appliquer la suppression dans l'index et l'arbre de travail [y,n,q,a,"
+"d%s,?] ? "
 
 #: add-patch.c:173 add-patch.c:218 git-add--interactive.perl:1471
 #, c-format, perl-format
@@ -616,24 +616,24 @@ msgstr "impossible d'analyser l'entête de section '%.*s'"
 msgid "could not parse colored hunk header '%.*s'"
 msgstr "impossible d'analyser l'entête coloré de section '%.*s'"
 
-#: add-patch.c:420
+#: add-patch.c:431
 msgid "could not parse diff"
 msgstr "impossible d'analyser la diff"
 
-#: add-patch.c:439
+#: add-patch.c:450
 msgid "could not parse colored diff"
 msgstr "impossible d'analyser la diff colorée"
 
-#: add-patch.c:453
+#: add-patch.c:464
 #, c-format
 msgid "failed to run '%s'"
 msgstr "échec pour lancer '%s'"
 
-#: add-patch.c:612
+#: add-patch.c:618
 msgid "mismatched output from interactive.diffFilter"
 msgstr "sortie sans correspondance depuis interactive.diffFilter"
 
-#: add-patch.c:613
+#: add-patch.c:619
 msgid ""
 "Your filter must maintain a one-to-one correspondence\n"
 "between its input and output lines."
@@ -641,7 +641,7 @@ msgstr ""
 "Votre filtre doit maintenir une correspondance un-pour-un\n"
 "entre les lignes en entrée et en sortie."
 
-#: add-patch.c:791
+#: add-patch.c:797
 #, c-format
 msgid ""
 "expected context line #%d in\n"
@@ -650,7 +650,7 @@ msgstr ""
 "ligne de contexte attendue #%d dans\n"
 "%.*s"
 
-#: add-patch.c:806
+#: add-patch.c:812
 #, c-format
 msgid ""
 "hunks do not overlap:\n"
@@ -663,12 +663,12 @@ msgstr ""
 "\tne se termine pas par :\n"
 "%.*s"
 
-#: add-patch.c:1082 git-add--interactive.perl:1115
+#: add-patch.c:1088 git-add--interactive.perl:1115
 msgid "Manual hunk edit mode -- see bottom for a quick guide.\n"
 msgstr ""
 "Mode d'édition manuelle de section -- voir ci-dessous pour un guide rapide.\n"
 
-#: add-patch.c:1086
+#: add-patch.c:1092
 #, c-format
 msgid ""
 "---\n"
@@ -682,7 +682,7 @@ msgstr ""
 "Les lignes commençant par %c seront éliminées.\n"
 
 #. TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
-#: add-patch.c:1100 git-add--interactive.perl:1129
+#: add-patch.c:1106 git-add--interactive.perl:1129
 msgid ""
 "If it does not apply cleanly, you will be given an opportunity to\n"
 "edit again.  If all lines of the hunk are removed, then the edit is\n"
@@ -692,11 +692,11 @@ msgstr ""
 "l'éditer à nouveau. Si toutes les lignes de la section sont supprimées,\n"
 "alors l'édition sera abandonnée et la section conservée.\n"
 
-#: add-patch.c:1133
+#: add-patch.c:1139
 msgid "could not parse hunk header"
 msgstr "impossible d'analyser l'entête de section"
 
-#: add-patch.c:1178
+#: add-patch.c:1184
 msgid "'git apply --cached' failed"
 msgstr "'git apply --cached' a échoué"
 
@@ -712,26 +712,26 @@ msgstr "'git apply --cached' a échoué"
 #. Consider translating (saying "no" discards!) as
 #. (saying "n" for "no" discards!) if the translation
 #. of the word "no" does not start with n.
-#: add-patch.c:1247 git-add--interactive.perl:1244
+#: add-patch.c:1253 git-add--interactive.perl:1244
 msgid ""
 "Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? "
 msgstr ""
 "Votre section éditée ne s'applique pas. L'éditer à nouveau (\"no\" "
 "l'élimine !) [y|n] ? "
 
-#: add-patch.c:1290
+#: add-patch.c:1296
 msgid "The selected hunks do not apply to the index!"
 msgstr "Les sections sélectionnées ne s'applique pas à l'index !"
 
-#: add-patch.c:1291 git-add--interactive.perl:1348
+#: add-patch.c:1297 git-add--interactive.perl:1348
 msgid "Apply them to the worktree anyway? "
 msgstr "Les appliquer quand même à l'arbre de travail ? "
 
-#: add-patch.c:1298 git-add--interactive.perl:1351
+#: add-patch.c:1304 git-add--interactive.perl:1351
 msgid "Nothing was applied.\n"
 msgstr "Rien n'a été appliqué.\n"
 
-#: add-patch.c:1355
+#: add-patch.c:1361
 msgid ""
 "j - leave this hunk undecided, see next undecided hunk\n"
 "J - leave this hunk undecided, see next hunk\n"
@@ -753,73 +753,73 @@ msgstr ""
 "e - éditer manuellement la section actuelle\n"
 "? - afficher l'aide\n"
 
-#: add-patch.c:1517 add-patch.c:1527
+#: add-patch.c:1523 add-patch.c:1533
 msgid "No previous hunk"
 msgstr "Pas de section précédente"
 
-#: add-patch.c:1522 add-patch.c:1532
+#: add-patch.c:1528 add-patch.c:1538
 msgid "No next hunk"
 msgstr "Pas de section suivante"
 
-#: add-patch.c:1538
+#: add-patch.c:1544
 msgid "No other hunks to goto"
 msgstr "Aucune autre section à atteindre"
 
-#: add-patch.c:1549 git-add--interactive.perl:1608
+#: add-patch.c:1555 git-add--interactive.perl:1608
 msgid "go to which hunk (<ret> to see more)? "
 msgstr "aller à quelle section (<ret> pour voir plus) ? "
 
-#: add-patch.c:1550 git-add--interactive.perl:1610
+#: add-patch.c:1556 git-add--interactive.perl:1610
 msgid "go to which hunk? "
 msgstr "aller à quelle section ? "
 
-#: add-patch.c:1561
+#: add-patch.c:1567
 #, c-format
 msgid "Invalid number: '%s'"
 msgstr "Numéro invalide : '%s'"
 
-#: add-patch.c:1566
+#: add-patch.c:1572
 #, c-format
 msgid "Sorry, only %d hunk available."
 msgid_plural "Sorry, only %d hunks available."
 msgstr[0] "Désolé, %d seule section disponible."
 msgstr[1] "Désolé, Seulement %d sections disponibles."
 
-#: add-patch.c:1575
+#: add-patch.c:1581
 msgid "No other hunks to search"
 msgstr "Aucune autre section à rechercher"
 
-#: add-patch.c:1581 git-add--interactive.perl:1663
+#: add-patch.c:1587 git-add--interactive.perl:1663
 msgid "search for regex? "
 msgstr "rechercher la regex ? "
 
-#: add-patch.c:1596
+#: add-patch.c:1602
 #, c-format
 msgid "Malformed search regexp %s: %s"
 msgstr "Regex de recherche malformée %s : %s"
 
-#: add-patch.c:1613
+#: add-patch.c:1619
 msgid "No hunk matches the given pattern"
 msgstr "Aucune section ne correspond au motif donné"
 
-#: add-patch.c:1620
+#: add-patch.c:1626
 msgid "Sorry, cannot split this hunk"
 msgstr "Désolé, impossible de découper cette section"
 
-#: add-patch.c:1624
+#: add-patch.c:1630
 #, c-format
 msgid "Split into %d hunks."
 msgstr "Découpée en %d sections."
 
-#: add-patch.c:1628
+#: add-patch.c:1634
 msgid "Sorry, cannot edit this hunk"
 msgstr "Désolé, impossible d'éditer cette section"
 
-#: add-patch.c:1680
+#: add-patch.c:1686
 msgid "'git apply' failed"
 msgstr "'git apply' a échoué"
 
-#: advice.c:78
+#: advice.c:81
 #, c-format
 msgid ""
 "\n"
@@ -828,37 +828,37 @@ msgstr ""
 "\n"
 "Désactivez ce message avec \"git config advice.%s false\""
 
-#: advice.c:94
+#: advice.c:97
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%sastuce: %.*s%s\n"
 
-#: advice.c:178
+#: advice.c:181
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr "Impossible de picorer car vous avez des fichiers non fusionnés."
 
-#: advice.c:180
+#: advice.c:183
 msgid "Committing is not possible because you have unmerged files."
 msgstr "Impossible de valider car vous avez des fichiers non fusionnés."
 
-#: advice.c:182
+#: advice.c:185
 msgid "Merging is not possible because you have unmerged files."
 msgstr "Impossible de fusionner car vous avez des fichiers non fusionnés."
 
-#: advice.c:184
+#: advice.c:187
 msgid "Pulling is not possible because you have unmerged files."
 msgstr "Impossible de tirer car vous avez des fichiers non fusionnés."
 
-#: advice.c:186
+#: advice.c:189
 msgid "Reverting is not possible because you have unmerged files."
 msgstr "Impossible d'annuler car vous avez des fichiers non fusionnés."
 
-#: advice.c:188
+#: advice.c:191
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr "%s n'est pas possible car vous avez des fichiers non fusionnés."
 
-#: advice.c:196
+#: advice.c:199
 msgid ""
 "Fix them up in the work tree, and then use 'git add/rm <file>'\n"
 "as appropriate to mark resolution and make a commit."
@@ -866,27 +866,27 @@ msgstr ""
 "Corrigez-les puis lancez 'git add/rm <fichier>'\n"
 "si nécessaire pour marquer la résolution et valider."
 
-#: advice.c:204
+#: advice.c:207
 msgid "Exiting because of an unresolved conflict."
 msgstr "Abandon à cause de conflit non résolu."
 
-#: advice.c:209 builtin/merge.c:1382
+#: advice.c:212 builtin/merge.c:1388
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Vous n'avez pas terminé votre fusion (MERGE_HEAD existe)."
 
-#: advice.c:211
+#: advice.c:214
 msgid "Please, commit your changes before merging."
 msgstr "Veuillez valider vos changements avant de fusionner."
 
-#: advice.c:212
+#: advice.c:215
 msgid "Exiting because of unfinished merge."
 msgstr "Abandon à cause d'une fusion non terminée."
 
-#: advice.c:217
+#: advice.c:220
 msgid "Not possible to fast-forward, aborting."
 msgstr "Pas possible d'avancer rapidement, abandon."
 
-#: advice.c:227
+#: advice.c:230
 #, c-format
 msgid ""
 "The following paths and/or pathspecs matched paths that exist\n"
@@ -898,7 +898,7 @@ msgstr ""
 "qui existent hors de votre définition d'extraction clairsemée, et ne seront\n"
 "donc pas mis à jour dans l'index :\n"
 
-#: advice.c:234
+#: advice.c:237
 msgid ""
 "If you intend to update such entries, try one of the following:\n"
 "* Use the --sparse option.\n"
@@ -908,7 +908,7 @@ msgstr ""
 "* d'utiliser l'option --sparse,\n"
 "* de désactiver ou modifier les règles de choix clairsemé."
 
-#: advice.c:242
+#: advice.c:245
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -971,87 +971,90 @@ msgstr "option d'espace non reconnue '%s'"
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "option d'ignorance d'espace non reconnue '%s'"
 
-#: apply.c:136 archive.c:584 range-diff.c:559 revision.c:2303 revision.c:2307
-#: revision.c:2316 revision.c:2321 revision.c:2527 revision.c:2870
-#: revision.c:2874 revision.c:2880 revision.c:2883 revision.c:2885
-#: builtin/add.c:510 builtin/add.c:512 builtin/add.c:529 builtin/add.c:541
-#: builtin/branch.c:727 builtin/checkout.c:467 builtin/checkout.c:470
-#: builtin/checkout.c:1644 builtin/checkout.c:1754 builtin/checkout.c:1757
-#: builtin/clone.c:906 builtin/commit.c:358 builtin/commit.c:361
-#: builtin/commit.c:1196 builtin/describe.c:593 builtin/diff-tree.c:155
-#: builtin/difftool.c:733 builtin/fast-export.c:1245 builtin/fetch.c:2038
-#: builtin/fetch.c:2043 builtin/index-pack.c:1852 builtin/init-db.c:560
-#: builtin/log.c:1946 builtin/log.c:1948 builtin/ls-files.c:778
-#: builtin/merge.c:1403 builtin/merge.c:1405 builtin/pack-objects.c:4073
-#: builtin/push.c:592 builtin/push.c:630 builtin/push.c:636 builtin/push.c:641
-#: builtin/rebase.c:1193 builtin/rebase.c:1195 builtin/rebase.c:1199
-#: builtin/repack.c:684 builtin/repack.c:715 builtin/reset.c:426
-#: builtin/reset.c:462 builtin/rev-list.c:541 builtin/show-branch.c:710
-#: builtin/stash.c:1707 builtin/stash.c:1710 builtin/submodule--helper.c:1316
-#: builtin/submodule--helper.c:2975 builtin/tag.c:526 builtin/tag.c:572
-#: builtin/worktree.c:702
+#: apply.c:138 archive.c:584 parse-options.c:1122 range-diff.c:555
+#: revision.c:2314 revision.c:2318 revision.c:2327 revision.c:2332
+#: revision.c:2560 revision.c:2895 revision.c:2899 revision.c:2907
+#: revision.c:2910 revision.c:2912 builtin/add.c:507 builtin/add.c:509
+#: builtin/add.c:515 builtin/add.c:527 builtin/branch.c:755
+#: builtin/checkout.c:472 builtin/checkout.c:475 builtin/checkout.c:1663
+#: builtin/checkout.c:1773 builtin/checkout.c:1776 builtin/clone.c:921
+#: builtin/commit.c:359 builtin/commit.c:362 builtin/commit.c:1200
+#: builtin/commit.c:1256 builtin/commit.c:1273 builtin/describe.c:593
+#: builtin/diff-tree.c:155 builtin/difftool.c:733 builtin/fast-export.c:1245
+#: builtin/fetch.c:2141 builtin/fetch.c:2162 builtin/fetch.c:2167
+#: builtin/help.c:602 builtin/index-pack.c:1858 builtin/init-db.c:560
+#: builtin/log.c:1968 builtin/log.c:1970 builtin/ls-files.c:778
+#: builtin/merge-base.c:163 builtin/merge-base.c:169 builtin/merge.c:1409
+#: builtin/merge.c:1411 builtin/pack-objects.c:4098 builtin/push.c:592
+#: builtin/push.c:630 builtin/push.c:636 builtin/push.c:641
+#: builtin/rebase.c:1221 builtin/rebase.c:1223 builtin/rebase.c:1227
+#: builtin/repack.c:688 builtin/repack.c:719 builtin/reset.c:433
+#: builtin/reset.c:469 builtin/rev-list.c:537 builtin/show-branch.c:711
+#: builtin/stash.c:1696 builtin/stash.c:1699 builtin/submodule--helper.c:1328
+#: builtin/submodule--helper.c:3054 builtin/tag.c:527 builtin/tag.c:573
+#: builtin/worktree.c:779
 #, c-format
 msgid "options '%s' and '%s' cannot be used together"
 msgstr "les options '%s' et '%s' ne peuvent pas être utilisées ensemble"
 
-#: apply.c:139 apply.c:150 apply.c:153
+#: apply.c:141 apply.c:152 apply.c:155
 #, c-format
 msgid "'%s' outside a repository"
 msgstr "'%s' hors d'un dépôt"
 
-#: apply.c:800
+#: apply.c:807
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr "Impossible de préparer la regexp d'horodatage %s"
 
-#: apply.c:809
+#: apply.c:816
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr "regexec a retourné %d pour l'entrée : %s"
 
-#: apply.c:883
+#: apply.c:890
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr "nom de fichier du patch introuvable à la ligne %d"
 
-#: apply.c:921
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr ""
 "git apply : mauvais format de git-diff - /dev/null attendu, %s trouvé à la "
 "ligne %d"
 
-#: apply.c:927
+#: apply.c:934
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr ""
 "git apply : mauvais format de git-diff - nouveau nom de fichier inconsistant "
 "à la ligne %d"
 
-#: apply.c:928
+#: apply.c:935
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr ""
 "git apply : mauvais format de git-diff - ancien nom de fichier inconsistant "
 "à la ligne %d"
 
-#: apply.c:933
+#: apply.c:940
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr ""
 "git apply : mauvais format de git-diff - /dev/null attendu à la ligne %d"
 
-#: apply.c:962
+#: apply.c:969
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "mode invalide dans la ligne %d : %s"
 
-#: apply.c:1281
+#: apply.c:1288
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr "lignes d'entête inconsistantes %d et %d"
 
-#: apply.c:1371
+#: apply.c:1378
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -1066,93 +1069,93 @@ msgstr[1] ""
 "information de nom de fichier manquante dans l'en-tête de git diff lors de "
 "la suppression de %d composants de préfixe de chemin (ligne %d)"
 
-#: apply.c:1384
+#: apply.c:1391
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr ""
 "information de nom de fichier manquante dans l'en-tête de git diff (ligne %d)"
 
-#: apply.c:1480
+#: apply.c:1487
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr "recomptage : ligne inattendue : %.*s"
 
-#: apply.c:1549
+#: apply.c:1556
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr "fragment de patch sans en-tête à la ligne %d : %.*s"
 
-#: apply.c:1752
+#: apply.c:1759
 msgid "new file depends on old contents"
 msgstr "le nouveau fichier dépend de contenus anciens"
 
-#: apply.c:1754
+#: apply.c:1761
 msgid "deleted file still has contents"
 msgstr "le fichier supprimé a encore du contenu"
 
-#: apply.c:1788
+#: apply.c:1795
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "patch corrompu à la ligne %d"
 
-#: apply.c:1825
+#: apply.c:1832
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "le nouveau fichier %s dépend de contenus anciens"
 
-#: apply.c:1827
+#: apply.c:1834
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "le fichier supprimé %s a encore du contenu"
 
-#: apply.c:1830
+#: apply.c:1837
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** attention : le fichier %s devient vide mais n'est pas supprimé"
 
-#: apply.c:1978
+#: apply.c:1985
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "patch binaire corrompu à la ligne %d : %.*s"
 
-#: apply.c:2015
+#: apply.c:2022
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "patch binaire non reconnu à la ligne %d"
 
-#: apply.c:2177
+#: apply.c:2184
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "patch totalement incompréhensible à la ligne %d"
 
-#: apply.c:2263
+#: apply.c:2270
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "lecture du lien symbolique %s impossible"
 
-#: apply.c:2267
+#: apply.c:2274
 #, c-format
 msgid "unable to open or read %s"
 msgstr "ouverture ou lecture de %s impossible"
 
-#: apply.c:2936
+#: apply.c:2943
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "début de ligne invalide : '%c'"
 
-#: apply.c:3057
+#: apply.c:3064
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "La section n°%d a réussi à la ligne %d (offset %d ligne)."
 msgstr[1] "La section n°%d a réussi à la ligne %d (offset %d lignes)."
 
-#: apply.c:3069
+#: apply.c:3076
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "Contexte réduit à (%ld/%ld) pour appliquer le fragment à la ligne %d"
 
-#: apply.c:3075
+#: apply.c:3082
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1161,464 +1164,464 @@ msgstr ""
 "pendant la recherche de :\n"
 "%.*s"
 
-#: apply.c:3097
+#: apply.c:3104
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "données de patch binaire manquantes pour '%s'"
 
-#: apply.c:3105
+#: apply.c:3112
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr ""
 "impossible d'appliquer l'inverse d'un patch binaire à '%s' sans la section "
 "inverse"
 
-#: apply.c:3152
+#: apply.c:3159
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr ""
 "impossible d'appliquer un patch binaire à '%s' sans la ligne complète d'index"
 
-#: apply.c:3163
+#: apply.c:3170
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr ""
 "le patch s'applique à '%s' (%s), ce qui ne correspond pas au contenu actuel."
 
-#: apply.c:3171
+#: apply.c:3178
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "le patch s'applique à un '%s' vide mais ce n'est pas vide"
 
-#: apply.c:3189
+#: apply.c:3196
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "l'image postérieure nécessaire %s pour '%s' ne peut pas être lue"
 
-#: apply.c:3202
+#: apply.c:3209
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "le patch binaire ne s'applique par correctement à '%s'"
 
-#: apply.c:3209
+#: apply.c:3216
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 "le patch binaire sur '%s' crée un résultat incorrect (%s attendu, mais %s "
 "trouvé)"
 
-#: apply.c:3230
+#: apply.c:3237
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "le patch a échoué : %s:%ld"
 
-#: apply.c:3353
+#: apply.c:3360
 #, c-format
 msgid "cannot checkout %s"
 msgstr "extraction de %s impossible"
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:104 pack-revindex.c:214
-#: setup.c:309
+#: apply.c:3412 apply.c:3423 apply.c:3469 midx.c:105 pack-revindex.c:214
+#: setup.c:310
 #, c-format
 msgid "failed to read %s"
 msgstr "échec de la lecture de %s"
 
-#: apply.c:3413
+#: apply.c:3420
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "lecture depuis '%s' au-delà d'un lien symbolique"
 
-#: apply.c:3442 apply.c:3711
+#: apply.c:3449 apply.c:3721
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "le chemin %s a été renommé/supprimé"
 
-#: apply.c:3549 apply.c:3726
+#: apply.c:3559 apply.c:3736
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s : n'existe pas dans l'index"
 
-#: apply.c:3558 apply.c:3734 apply.c:3978
+#: apply.c:3568 apply.c:3744 apply.c:3960
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s : ne correspond pas à l'index"
 
-#: apply.c:3595
+#: apply.c:3605
 msgid "repository lacks the necessary blob to perform 3-way merge."
 msgstr ""
 "le dépôt n'a pas les blobs nécessaires pour effectuer une fusion à 3 points."
 
-#: apply.c:3598
+#: apply.c:3608
 #, c-format
 msgid "Performing three-way merge...\n"
 msgstr "Application d'une fusion à 3 points…\n"
 
-#: apply.c:3614 apply.c:3618
+#: apply.c:3624 apply.c:3628
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "impossible de lire le contenu actuel de '%s'"
 
-#: apply.c:3630
+#: apply.c:3640
 #, c-format
 msgid "Failed to perform three-way merge...\n"
 msgstr "Échec de l'application de la fusion à 3 points…\n"
 
-#: apply.c:3644
+#: apply.c:3654
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Patch %s appliqué avec des conflits.\n"
 
-#: apply.c:3649
+#: apply.c:3659
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Patch %s appliqué proprement.\n"
 
-#: apply.c:3666
+#: apply.c:3676
 #, c-format
 msgid "Falling back to direct application...\n"
 msgstr "Retour à une application directe…\n"
 
-#: apply.c:3678
+#: apply.c:3688
 msgid "removal patch leaves file contents"
 msgstr "le patch de suppression laisse un contenu dans le fichier"
 
-#: apply.c:3751
+#: apply.c:3761
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s : type erroné"
 
-#: apply.c:3753
+#: apply.c:3763
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s est de type %o, mais %o attendu"
 
-#: apply.c:3918 apply.c:3920 read-cache.c:889 read-cache.c:918
-#: read-cache.c:1381
+#: apply.c:3900 apply.c:3902 read-cache.c:903 read-cache.c:932
+#: read-cache.c:1399
 #, c-format
 msgid "invalid path '%s'"
 msgstr "chemin invalide '%s'"
 
-#: apply.c:3976
+#: apply.c:3958
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s : existe déjà dans l'index"
 
-#: apply.c:3980
+#: apply.c:3962
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s : existe déjà dans la copie de travail"
 
-#: apply.c:4000
+#: apply.c:3982
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "le nouveau mode (%o) de %s ne correspond pas à l'ancien mode (%o)"
 
-#: apply.c:4005
+#: apply.c:3987
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr ""
 "le nouveau mode (%o) de %s ne correspond pas à l'ancien mode (%o) de %s"
 
-#: apply.c:4025
+#: apply.c:4007
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "le fichier affecté '%s' est au-delà d'un lien symbolique"
 
-#: apply.c:4029
+#: apply.c:4011
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s : le patch ne s'applique pas"
 
-#: apply.c:4044
+#: apply.c:4026
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Vérification du patch %s..."
 
-#: apply.c:4136
+#: apply.c:4118
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr ""
 "l'information sha1 est manquante ou inutilisable pour le sous-module %s"
 
-#: apply.c:4143
+#: apply.c:4125
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "le mode change pour %s, qui n'est pas dans la HEAD actuelle"
 
-#: apply.c:4146
+#: apply.c:4128
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "l'information de sha1 est manquante ou inutilisable (%s)."
 
-#: apply.c:4155
+#: apply.c:4137
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "impossible d'ajouter %s à l'index temporaire"
 
-#: apply.c:4165
+#: apply.c:4147
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "impossible d'écrire l'index temporaire dans %s"
 
-#: apply.c:4303
+#: apply.c:4285
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "suppression de %s dans l'index impossible"
 
-#: apply.c:4337
+#: apply.c:4319
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "patch corrompu pour le sous-module %s"
 
-#: apply.c:4343
+#: apply.c:4325
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "stat du fichier nouvellement créé '%s' impossible"
 
-#: apply.c:4351
+#: apply.c:4333
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr ""
 "création du magasin de stockage pour le fichier nouvellement créé %s "
 "impossible"
 
-#: apply.c:4357 apply.c:4502
+#: apply.c:4339 apply.c:4484
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "ajout de l'élément de cache %s impossible"
 
-#: apply.c:4400 builtin/bisect--helper.c:540 builtin/gc.c:2258
+#: apply.c:4382 builtin/bisect--helper.c:540 builtin/gc.c:2258
 #: builtin/gc.c:2293
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "échec de l'écriture dans '%s'"
 
-#: apply.c:4404
+#: apply.c:4386
 #, c-format
 msgid "closing file '%s'"
 msgstr "fermeture du fichier '%s'"
 
-#: apply.c:4474
+#: apply.c:4456
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "écriture du fichier '%s' mode %o impossible"
 
-#: apply.c:4572
+#: apply.c:4554
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Patch %s appliqué proprement."
 
-#: apply.c:4580
+#: apply.c:4562
 msgid "internal error"
 msgstr "erreur interne"
 
-#: apply.c:4583
+#: apply.c:4565
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "Application du patch %%s avec %d rejet..."
 msgstr[1] "Application du patch %%s avec %d rejets..."
 
-#: apply.c:4594
+#: apply.c:4576
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "troncature du nom de fichier .rej en %.*s.rej"
 
-#: apply.c:4602
+#: apply.c:4584
 #, c-format
 msgid "cannot open %s"
 msgstr "impossible d'ouvrir %s"
 
-#: apply.c:4616
+#: apply.c:4598
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "Section n°%d appliquée proprement."
 
-#: apply.c:4620
+#: apply.c:4602
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "Section n°%d rejetée."
 
-#: apply.c:4749
+#: apply.c:4731
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Chemin '%s' non traité."
 
-#: apply.c:4758
+#: apply.c:4740
 msgid "No valid patches in input (allow with \"--allow-empty\")"
 msgstr "Pas de rustine valide sur l'entrée (permis avec \"--allow-empty\")"
 
-#: apply.c:4779
+#: apply.c:4761
 msgid "unable to read index file"
 msgstr "lecture du fichier d'index impossible"
 
-#: apply.c:4936
+#: apply.c:4918
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "ouverture impossible du patch '%s' :%s"
 
-#: apply.c:4963
+#: apply.c:4945
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "%d erreur d'espace ignorée"
 msgstr[1] "%d erreurs d'espace ignorées"
 
-#: apply.c:4969 apply.c:4984
+#: apply.c:4951 apply.c:4966
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d ligne a ajouté des erreurs d'espace."
 msgstr[1] "%d lignes ont ajouté des erreurs d'espace."
 
-#: apply.c:4977
+#: apply.c:4959
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] "%d ligne ajoutée après correction des erreurs d'espace."
 msgstr[1] "%d lignes ajoutées après correction des erreurs d'espace."
 
-#: apply.c:4993 builtin/add.c:704 builtin/mv.c:338 builtin/rm.c:430
+#: apply.c:4975 builtin/add.c:690 builtin/mv.c:338 builtin/rm.c:430
 msgid "Unable to write new index file"
 msgstr "Impossible d'écrire le nouveau fichier d'index"
 
-#: apply.c:5021
+#: apply.c:5003
 msgid "don't apply changes matching the given path"
 msgstr "ne pas appliquer les modifications qui correspondent au chemin donné"
 
-#: apply.c:5024
+#: apply.c:5006
 msgid "apply changes matching the given path"
 msgstr "appliquer les modifications qui correspondent au chemin donné"
 
-#: apply.c:5026 builtin/am.c:2376
+#: apply.c:5008 builtin/am.c:2379
 msgid "num"
 msgstr "num"
 
-#: apply.c:5027
+#: apply.c:5009
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "supprimer <num> barres obliques des chemins traditionnels de diff"
 
-#: apply.c:5030
+#: apply.c:5012
 msgid "ignore additions made by the patch"
 msgstr "ignorer les additions réalisées par le patch"
 
-#: apply.c:5032
+#: apply.c:5014
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "au lieu d'appliquer le patch, afficher le diffstat de l'entrée"
 
-#: apply.c:5036
+#: apply.c:5018
 msgid "show number of added and deleted lines in decimal notation"
 msgstr ""
 "afficher le nombre de lignes ajoutées et supprimées en notation décimale"
 
-#: apply.c:5038
+#: apply.c:5020
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "au lieu d'appliquer le patch, afficher un résumé de l'entrée"
 
-#: apply.c:5040
+#: apply.c:5022
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "au lieu d'appliquer le patch, voir si le patch est applicable"
 
-#: apply.c:5042
+#: apply.c:5024
 msgid "make sure the patch is applicable to the current index"
 msgstr "s'assurer que le patch est applicable sur l'index actuel"
 
-#: apply.c:5044
+#: apply.c:5026
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "marquer les nouveaux fichiers `git add --intent-to-add`"
 
-#: apply.c:5046
+#: apply.c:5028
 msgid "apply a patch without touching the working tree"
 msgstr "appliquer les patch sans toucher à la copie de travail"
 
-#: apply.c:5048
+#: apply.c:5030
 msgid "accept a patch that touches outside the working area"
 msgstr "accepter un patch qui touche hors de la copie de travail"
 
-#: apply.c:5051
+#: apply.c:5033
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "appliquer aussi le patch (à utiliser avec --stat/--summary/--check)"
 
-#: apply.c:5053
+#: apply.c:5035
 msgid "attempt three-way merge, fall back on normal patch if that fails"
 msgstr ""
 "tenter une fusion à 3 points, revenir à un rustinage normal en cas d'échec"
 
-#: apply.c:5055
+#: apply.c:5037
 msgid "build a temporary index based on embedded index information"
 msgstr ""
 "construire un index temporaire fondé sur l'information de l'index embarqué"
 
-#: apply.c:5058 builtin/checkout-index.c:196
+#: apply.c:5040 builtin/checkout-index.c:230
 msgid "paths are separated with NUL character"
 msgstr "les chemins sont séparés par un caractère NUL"
 
-#: apply.c:5060
+#: apply.c:5042
 msgid "ensure at least <n> lines of context match"
 msgstr "s'assurer d'au moins <n> lignes de correspondance de contexte"
 
-#: apply.c:5061 builtin/am.c:2352 builtin/am.c:2355
+#: apply.c:5043 builtin/am.c:2355 builtin/am.c:2358
 #: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
-#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3960
-#: builtin/rebase.c:1051
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3983
+#: builtin/rebase.c:1079
 msgid "action"
 msgstr "action"
 
-#: apply.c:5062
+#: apply.c:5044
 msgid "detect new or modified lines that have whitespace errors"
 msgstr ""
 "détecter des lignes nouvelles ou modifiées qui contiennent des erreurs "
 "d'espace"
 
-#: apply.c:5065 apply.c:5068
+#: apply.c:5047 apply.c:5050
 msgid "ignore changes in whitespace when finding context"
 msgstr "ignorer des modifications d'espace lors de la recherche de contexte"
 
-#: apply.c:5071
+#: apply.c:5053
 msgid "apply the patch in reverse"
 msgstr "appliquer le patch en sens inverse"
 
-#: apply.c:5073
+#: apply.c:5055
 msgid "don't expect at least one line of context"
 msgstr "ne pas s'attendre à au moins une ligne de contexte"
 
-#: apply.c:5075
+#: apply.c:5057
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "laisser les sections rejetées dans les fichiers *.rej correspondants"
 
-#: apply.c:5077
+#: apply.c:5059
 msgid "allow overlapping hunks"
 msgstr "accepter les recouvrements de sections"
 
-#: apply.c:5080
+#: apply.c:5062
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr ""
 "tolérer des erreurs de détection de retours chariot manquants en fin de "
 "fichier"
 
-#: apply.c:5083
+#: apply.c:5065
 msgid "do not trust the line counts in the hunk headers"
 msgstr "ne pas se fier au compte de lignes dans les en-têtes de section"
 
-#: apply.c:5085 builtin/am.c:2364
+#: apply.c:5067 builtin/am.c:2367
 msgid "root"
 msgstr "racine"
 
-#: apply.c:5086
+#: apply.c:5068
 msgid "prepend <root> to all filenames"
 msgstr "préfixer tous les noms de fichier avec <root>"
 
-#: apply.c:5089
+#: apply.c:5071
 msgid "don't return error for empty patches"
 msgstr "ne pas renvoyer d'erreur pour les rustines vides"
 
-#: archive-tar.c:125 archive-zip.c:345
+#: archive-tar.c:125 archive-zip.c:346
 #, c-format
 msgid "cannot stream blob %s"
 msgstr "impossible de transmettre le blob %s en flux"
 
-#: archive-tar.c:265 archive-zip.c:358
+#: archive-tar.c:265 archive-zip.c:359
 #, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
 msgstr "mode de fichier non supporté :0%o (SHA1: %s)"
@@ -1637,22 +1640,22 @@ msgstr "impossible de rediriger un descripteur"
 msgid "'%s' filter reported error"
 msgstr "le filtre '%s' a retourné une erreur"
 
-#: archive-zip.c:318
+#: archive-zip.c:319
 #, c-format
 msgid "path is not valid UTF-8: %s"
 msgstr "le chemin n'est pas codé en UTF-8 valide : %s"
 
-#: archive-zip.c:322
+#: archive-zip.c:323
 #, c-format
 msgid "path too long (%d chars, SHA1: %s): %s"
 msgstr "le chemin est trop long (%d caractères, SHA1 : %s) : %s"
 
-#: archive-zip.c:469 builtin/pack-objects.c:365 builtin/pack-objects.c:368
+#: archive-zip.c:470 builtin/pack-objects.c:363 builtin/pack-objects.c:366
 #, c-format
 msgid "deflate error (%d)"
 msgstr "erreur de compression (%d)"
 
-#: archive-zip.c:603
+#: archive-zip.c:604
 #, c-format
 msgid "timestamp too large for this system: %<PRIuMAX>"
 msgstr "l'horodatage est trop grand pour ce système : %<PRIuMAX>"
@@ -1661,10 +1664,6 @@ msgstr "l'horodatage est trop grand pour ce système : %<PRIuMAX>"
 msgid "git archive [<options>] <tree-ish> [<path>...]"
 msgstr "git archive [<options>] <arbre ou apparenté> [<chemin>...]"
 
-#: archive.c:15
-msgid "git archive --list"
-msgstr "git archive --list"
-
 #: archive.c:16
 msgid ""
 "git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"
@@ -1677,12 +1676,12 @@ msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote <dépôt> [--exec <commande>] --list"
 
 #: archive.c:188 archive.c:341 builtin/gc.c:497 builtin/notes.c:238
-#: builtin/tag.c:578
+#: builtin/tag.c:579
 #, c-format
 msgid "cannot read '%s'"
 msgstr "impossible de lire '%s'"
 
-#: archive.c:426 builtin/add.c:215 builtin/add.c:671 builtin/rm.c:334
+#: archive.c:426 builtin/add.c:214 builtin/add.c:657 builtin/rm.c:334
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "le chemin '%s' ne correspond à aucun fichier"
@@ -1724,7 +1723,7 @@ msgstr "fmt"
 msgid "archive format"
 msgstr "format d'archive"
 
-#: archive.c:552 builtin/log.c:1790
+#: archive.c:552 builtin/log.c:1809
 msgid "prefix"
 msgstr "préfixe"
 
@@ -1732,12 +1731,12 @@ msgstr "préfixe"
 msgid "prepend prefix to each pathname in the archive"
 msgstr "préfixer chaque chemin de fichier dans l'archive"
 
-#: archive.c:554 archive.c:557 builtin/blame.c:880 builtin/blame.c:884
-#: builtin/blame.c:885 builtin/commit-tree.c:115 builtin/config.c:135
+#: archive.c:554 archive.c:557 builtin/blame.c:881 builtin/blame.c:885
+#: builtin/blame.c:886 builtin/commit-tree.c:115 builtin/config.c:135
 #: builtin/fast-export.c:1181 builtin/fast-export.c:1183
-#: builtin/fast-export.c:1187 builtin/grep.c:935 builtin/hash-object.c:103
+#: builtin/fast-export.c:1187 builtin/grep.c:936 builtin/hash-object.c:104
 #: builtin/ls-files.c:654 builtin/ls-files.c:657 builtin/notes.c:410
-#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:190
+#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:195
 msgid "file"
 msgstr "fichier"
 
@@ -1765,8 +1764,8 @@ msgstr "régler le niveau de compression"
 msgid "list supported archive formats"
 msgstr "afficher les formats d'archive supportés"
 
-#: archive.c:568 builtin/archive.c:89 builtin/clone.c:118 builtin/clone.c:121
-#: builtin/submodule--helper.c:1870 builtin/submodule--helper.c:2513
+#: archive.c:568 builtin/archive.c:89 builtin/clone.c:122 builtin/clone.c:125
+#: builtin/submodule--helper.c:1884 builtin/submodule--helper.c:2718
 msgid "repo"
 msgstr "dépôt"
 
@@ -1787,11 +1786,12 @@ msgstr "chemin vers la commande distante git-upload-archive"
 msgid "Unexpected option --remote"
 msgstr "Option --remote inattendue"
 
-#: archive.c:580 fetch-pack.c:300 revision.c:2887 builtin/add.c:544
-#: builtin/add.c:576 builtin/checkout.c:1763 builtin/commit.c:370
-#: builtin/fast-export.c:1230 builtin/index-pack.c:1848 builtin/log.c:2115
-#: builtin/reset.c:435 builtin/reset.c:493 builtin/rm.c:281
-#: builtin/stash.c:1719 builtin/worktree.c:508 http-fetch.c:144
+#: archive.c:580 fetch-pack.c:300 revision.c:2914 builtin/add.c:530
+#: builtin/add.c:562 builtin/checkout.c:1782 builtin/clone.c:1099
+#: builtin/clone.c:1102 builtin/commit.c:371 builtin/fast-export.c:1230
+#: builtin/index-pack.c:1854 builtin/log.c:2140 builtin/reset.c:442
+#: builtin/reset.c:500 builtin/rm.c:281 builtin/stash.c:1708
+#: builtin/worktree.c:580 builtin/worktree.c:781 http-fetch.c:144
 #: http-fetch.c:153
 #, c-format
 msgid "the option '%s' requires '%s'"
@@ -1811,17 +1811,17 @@ msgstr "Format d'archive inconnu '%s'"
 msgid "Argument not supported for format '%s': -%d"
 msgstr "Argument non supporté pour le format '%s' : -%d"
 
-#: attr.c:203
+#: attr.c:202
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s n'est pas un nom valide d'attribut"
 
-#: attr.c:364
+#: attr.c:363
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s non permis : %s : %d"
 
-#: attr.c:404
+#: attr.c:403
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1839,12 +1839,12 @@ msgstr "Contenu mal cité dans le fichier '%s' : %s"
 msgid "We cannot bisect more!\n"
 msgstr "Impossible de pousser la bissection plus loin !\n"
 
-#: bisect.c:764
+#: bisect.c:765
 #, c-format
 msgid "Not a valid commit name %s"
 msgstr "%s n'est pas un nom de commit valide"
 
-#: bisect.c:789
+#: bisect.c:790
 #, c-format
 msgid ""
 "The merge base %s is bad.\n"
@@ -1853,7 +1853,7 @@ msgstr ""
 "La base de fusion %s est mauvaise.\n"
 "Cela signifie que le bogue été corrigé entre %s et [%s].\n"
 
-#: bisect.c:794
+#: bisect.c:795
 #, c-format
 msgid ""
 "The merge base %s is new.\n"
@@ -1862,7 +1862,7 @@ msgstr ""
 "La base de fusion %s est nouvelle.\n"
 "La propriété a changé entre %s et [%s].\n"
 
-#: bisect.c:799
+#: bisect.c:800
 #, c-format
 msgid ""
 "The merge base %s is %s.\n"
@@ -1871,7 +1871,7 @@ msgstr ""
 "La base de fusion %s est %s.\n"
 "Ceci signifie que le premier commit '%s' est entre %s et [%s].\n"
 
-#: bisect.c:807
+#: bisect.c:808
 #, c-format
 msgid ""
 "Some %s revs are not ancestors of the %s rev.\n"
@@ -1882,7 +1882,7 @@ msgstr ""
 "git bisect ne peut pas fonctionner correctement dans ce cas.\n"
 "Peut-être les révisions %s et %s ne sont-elles pas les bonnes ?\n"
 
-#: bisect.c:820
+#: bisect.c:821
 #, c-format
 msgid ""
 "the merge base between %s and [%s] must be skipped.\n"
@@ -1894,36 +1894,36 @@ msgstr ""
 "et %s.\n"
 "On continue tout de même."
 
-#: bisect.c:859
+#: bisect.c:860
 #, c-format
 msgid "Bisecting: a merge base must be tested\n"
 msgstr "Bissection : une base de fusion doit être testée\n"
 
-#: bisect.c:909
+#: bisect.c:910
 #, c-format
 msgid "a %s revision is needed"
 msgstr "une révision %s est nécessaire"
 
-#: bisect.c:939
+#: bisect.c:940
 #, c-format
 msgid "could not create file '%s'"
 msgstr "impossible de créer le fichier '%s'"
 
-#: bisect.c:985 builtin/merge.c:155
+#: bisect.c:986 builtin/merge.c:155
 #, c-format
 msgid "could not read file '%s'"
 msgstr "impossible de lire le fichier '%s'"
 
-#: bisect.c:1025
+#: bisect.c:1026
 msgid "reading bisect refs failed"
 msgstr "impossible de lire les références de bissection"
 
-#: bisect.c:1055
+#: bisect.c:1056
 #, c-format
 msgid "%s was both %s and %s\n"
 msgstr "%s était à la fois %s et %s\n"
 
-#: bisect.c:1064
+#: bisect.c:1065
 #, c-format
 msgid ""
 "No testable commit found.\n"
@@ -1932,7 +1932,7 @@ msgstr ""
 "Aucun commit testable n'a été trouvé\n"
 "Peut-être avez-vous démarré avec un mauvais arguement de chemin ?\n"
 
-#: bisect.c:1093
+#: bisect.c:1094
 #, c-format
 msgid "(roughly %d step)"
 msgid_plural "(roughly %d steps)"
@@ -1942,54 +1942,54 @@ msgstr[1] "(à peu près %d étapes)"
 #. TRANSLATORS: the last %s will be replaced with "(roughly %d
 #. steps)" translation.
 #.
-#: bisect.c:1099
+#: bisect.c:1100
 #, c-format
 msgid "Bisecting: %d revision left to test after this %s\n"
 msgid_plural "Bisecting: %d revisions left to test after this %s\n"
 msgstr[0] "Bissection : %d révision à tester après ceci %s\n"
 msgstr[1] "Bissection : %d révisions à tester après ceci %s\n"
 
-#: blame.c:2776
+#: blame.c:2773
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents et --reverse ne font pas bon ménage."
 
-#: blame.c:2790
+#: blame.c:2787
 msgid "cannot use --contents with final commit object name"
 msgstr "on ne peut pas utiliser --contents avec un nom d'objet commit final"
 
-#: blame.c:2811
+#: blame.c:2808
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "--reverse et --first-parent ensemble nécessitent la spécification d'un "
 "dernier commit"
 
-#: blame.c:2820 bundle.c:224 midx.c:1042 ref-filter.c:2370 remote.c:2158
-#: sequencer.c:2352 sequencer.c:4899 submodule.c:883 builtin/commit.c:1114
-#: builtin/log.c:429 builtin/log.c:1036 builtin/log.c:1644 builtin/log.c:2071
-#: builtin/log.c:2362 builtin/merge.c:431 builtin/pack-objects.c:3373
-#: builtin/pack-objects.c:3775 builtin/pack-objects.c:3790
+#: blame.c:2817 bundle.c:231 midx.c:1058 ref-filter.c:2371 remote.c:2157
+#: sequencer.c:2348 sequencer.c:4872 submodule.c:913 builtin/commit.c:1118
+#: builtin/log.c:437 builtin/log.c:1055 builtin/log.c:1663 builtin/log.c:2096
+#: builtin/log.c:2387 builtin/merge.c:431 builtin/pack-objects.c:3381
+#: builtin/pack-objects.c:3781 builtin/pack-objects.c:3796
 #: builtin/shortlog.c:255
 msgid "revision walk setup failed"
 msgstr "échec de la préparation du parcours des révisions"
 
-#: blame.c:2838
+#: blame.c:2835
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "--reverse --first-parent ensemble nécessitent une portée avec la chaîne de "
 "premier parent"
 
-#: blame.c:2849
+#: blame.c:2846
 #, c-format
 msgid "no such path %s in %s"
 msgstr "pas de chemin %s dans %s"
 
-#: blame.c:2860
+#: blame.c:2857
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "impossible de lire le blob %s  pour le chemin %s"
 
-#: branch.c:77
+#: branch.c:93
 msgid ""
 "cannot inherit upstream tracking configuration of multiple refs when "
 "rebasing is requested"
@@ -1997,31 +1997,31 @@ msgstr ""
 "impossible d'hériter la configuration de suivi de référence amont depuis "
 "plusieurs références quand un rebasage est demandé"
 
-#: branch.c:88
+#: branch.c:104
 #, c-format
 msgid "not setting branch '%s' as its own upstream"
 msgstr "la branche %s ne peut pas être sa propre branche amont"
 
-#: branch.c:144
+#: branch.c:160
 #, c-format
 msgid "branch '%s' set up to track '%s' by rebasing."
 msgstr "la branche '%s' est paramétrée pour suivre '%s' en rebasant."
 
-#: branch.c:145
+#: branch.c:161
 #, c-format
 msgid "branch '%s' set up to track '%s'."
 msgstr "la branche '%s' est paramétrée pour suivre '%s'."
 
-#: branch.c:148
+#: branch.c:164
 #, c-format
 msgid "branch '%s' set up to track:"
 msgstr "la branche '%s' est paramétrée pour suivre :"
 
-#: branch.c:160
+#: branch.c:176
 msgid "unable to write upstream branch configuration"
 msgstr "échec de l'écriture de la configuration de branche amont"
 
-#: branch.c:162
+#: branch.c:178
 msgid ""
 "\n"
 "After fixing the error cause you may try to fix up\n"
@@ -2031,52 +2031,90 @@ msgstr ""
 "Après correction de la cause de l'erreur, vous pouvez essayer\n"
 "de corriger l'information de suivi distant en invoquant :"
 
-#: branch.c:203
+#: branch.c:219
 #, c-format
 msgid "asked to inherit tracking from '%s', but no remote is set"
 msgstr "héritage de suivi depuis '%s' demandé, mais pas de distant configuré"
 
-#: branch.c:209
+#: branch.c:225
 #, c-format
 msgid "asked to inherit tracking from '%s', but no merge configuration is set"
 msgstr ""
 "héritage de suivi depuis '%s' demandé, mais pas de configuration de fusion "
 "renseignée"
 
-#: branch.c:252
+#: branch.c:277
+#, c-format
+msgid "not tracking: ambiguous information for ref '%s'"
+msgstr "pas de suivi : information ambiguë pour la référence '%s'"
+
+#. TRANSLATORS: This is a line listing a remote with duplicate
+#. refspecs in the advice message below. For RTL languages you'll
+#. probably want to swap the "%s" and leading "  " space around.
+#.
+#. TRANSLATORS: This is line item of ambiguous object output
+#. from describe_ambiguous_object() above. For RTL languages
+#. you'll probably want to swap the "%s" and leading " " space
+#. around.
+#.
+#: branch.c:289 object-name.c:464
+#, c-format
+msgid "  %s\n"
+msgstr "  %s\n"
+
+#. TRANSLATORS: The second argument is a \n-delimited list of
+#. duplicate refspecs, composed above.
+#.
+#: branch.c:295
 #, c-format
-msgid "not tracking: ambiguous information for ref %s"
-msgstr "pas de suivi : information ambiguë pour la référence %s"
+msgid ""
+"There are multiple remotes whose fetch refspecs map to the remote\n"
+"tracking ref '%s':\n"
+"%s\n"
+"This is typically a configuration error.\n"
+"\n"
+"To support setting up tracking branches, ensure that\n"
+"different remotes' fetch refspecs map into different\n"
+"tracking namespaces."
+msgstr ""
+"Il y a plusieurs distants dont les spécificateurs de référence de\n"
+"récupération correspondent à la référence de suivi '%s' :\n"
+"%s\n"
+"C'est typiquement une erreur de configuration.\n"
+"\n"
+"Pour gérer le réglage des branches de suivi, assurez-vous\n"
+"que des réfspecs de récupération de distants différents\n"
+"correspondent à des espaces de nommage de suivi différents."
 
-#: branch.c:287
+#: branch.c:344
 #, c-format
 msgid "'%s' is not a valid branch name"
 msgstr "'%s' n'est pas un nom de branche valide"
 
-#: branch.c:307
+#: branch.c:364
 #, c-format
 msgid "a branch named '%s' already exists"
 msgstr "Une branche nommée '%s' existe déjà"
 
-#: branch.c:313
+#: branch.c:370
 #, c-format
 msgid "cannot force update the branch '%s' checked out at '%s'"
 msgstr ""
 "impossible de forcer la mise à jour de la branche '%s' extraite dans '%s'"
 
-#: branch.c:336
+#: branch.c:393
 #, c-format
 msgid "cannot set up tracking information; starting point '%s' is not a branch"
 msgstr ""
 "Impossible de configurer le suivi de branche ; le point de départ '%s' n'est "
 "pas une branche"
 
-#: branch.c:338
+#: branch.c:395
 #, c-format
 msgid "the requested upstream branch '%s' does not exist"
 msgstr "la branche amont demandée '%s' n'existe pas"
 
-#: branch.c:340
+#: branch.c:397
 msgid ""
 "\n"
 "If you are planning on basing your work on an upstream\n"
@@ -2096,126 +2134,145 @@ msgstr ""
 "sa jumelle distante, vous pouvez utiliser \"git push -u\"\n"
 "pour paramétrer le suivi distant en même temps que vous poussez."
 
-#: branch.c:384 builtin/replace.c:321 builtin/replace.c:377
+#: branch.c:445 builtin/replace.c:321 builtin/replace.c:377
 #: builtin/replace.c:423 builtin/replace.c:453
 #, c-format
 msgid "not a valid object name: '%s'"
 msgstr "nom d'objet invalide : '%s'"
 
-#: branch.c:404
+#: branch.c:465
 #, c-format
 msgid "ambiguous object name: '%s'"
 msgstr "Nom d'objet ambigu : '%s'"
 
-#: branch.c:409
+#: branch.c:470
 #, c-format
 msgid "not a valid branch point: '%s'"
 msgstr "point d'embranchement invalide : '%s'"
 
-#: branch.c:469
+#: branch.c:658
+#, c-format
+msgid "submodule '%s': unable to find submodule"
+msgstr "sous-module '%s' : impossible de trouver le sous-module"
+
+#: branch.c:661
+#, c-format
+msgid ""
+"You may try updating the submodules using 'git checkout %s && git submodule "
+"update --init'"
+msgstr ""
+"Vous pouvez essayer de mettre à jour les sous-modules en utilisant 'git "
+"checkout %s && git submodule update --init'"
+
+#: branch.c:672 branch.c:698
+#, c-format
+msgid "submodule '%s': cannot create branch '%s'"
+msgstr "sous-module '%s' : impossible de créer la branche '%s'"
+
+#: branch.c:730
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr "'%s' est déjà extrait dans '%s'"
 
-#: branch.c:494
+#: branch.c:755
 #, c-format
 msgid "HEAD of working tree %s is not updated"
 msgstr "la HEAD de la copie de travail %s n'est pas mise à jour"
 
-#: bundle.c:44
+#: bundle.c:45
 #, c-format
 msgid "unrecognized bundle hash algorithm: %s"
 msgstr "algorithme d'empreinte du colis inconnu : %s"
 
-#: bundle.c:48
+#: bundle.c:53
 #, c-format
 msgid "unknown capability '%s'"
 msgstr "capacité inconnue '%s'"
 
-#: bundle.c:74
+#: bundle.c:79
 #, c-format
 msgid "'%s' does not look like a v2 or v3 bundle file"
 msgstr "'%s' ne semble pas être un fichier colis v2 our v3"
 
-#: bundle.c:113
+#: bundle.c:118
 #, c-format
 msgid "unrecognized header: %s%s (%d)"
 msgstr "en-tête non reconnu : %s%s (%d)"
 
-#: bundle.c:140 rerere.c:464 rerere.c:674 sequencer.c:2620 sequencer.c:3406
-#: builtin/commit.c:862
+#: bundle.c:145 rerere.c:464 rerere.c:675 sequencer.c:2616 sequencer.c:3402
+#: builtin/commit.c:865
 #, c-format
 msgid "could not open '%s'"
 msgstr "impossible d'ouvrir '%s'"
 
-#: bundle.c:198
+#: bundle.c:203
 msgid "Repository lacks these prerequisite commits:"
 msgstr "Le dépôt ne dispose pas des commits prérequis suivants :"
 
-#: bundle.c:201
+#: bundle.c:206
 msgid "need a repository to verify a bundle"
 msgstr "la vérification d'un colis requiert un dépôt"
 
-#: bundle.c:257
+#: bundle.c:264
 #, c-format
 msgid "The bundle contains this ref:"
-msgid_plural "The bundle contains these %d refs:"
-msgstr[0] "Le colis contient cette référence :"
-msgstr[1] "Le colis contient ces %d références :"
+msgid_plural "The bundle contains these %<PRIuMAX> refs:"
+msgstr[0] "Le colis contient cette référence :"
+msgstr[1] "Le colis contient ces %<PRIuMAX> références :"
 
-#: bundle.c:264
+#: bundle.c:272
 msgid "The bundle records a complete history."
 msgstr "Le colis enregistre l'historique complet."
 
-#: bundle.c:266
+#: bundle.c:274
 #, c-format
 msgid "The bundle requires this ref:"
-msgid_plural "The bundle requires these %d refs:"
-msgstr[0] "Le colis exige cette référence :"
-msgstr[1] "Le colis exige ces %d références :"
+msgid_plural "The bundle requires these %<PRIuMAX> refs:"
+msgstr[0] "Le colis exige cette référence :"
+msgstr[1] "Le colis exige ces %<PRIuMAX> références :"
 
-#: bundle.c:333
+#: bundle.c:350
 msgid "unable to dup bundle descriptor"
 msgstr "impossible de dupliquer le descripteur de liasse"
 
-#: bundle.c:340
+#: bundle.c:357
 msgid "Could not spawn pack-objects"
 msgstr "Impossible de créer des objets groupés"
 
-#: bundle.c:351
+#: bundle.c:368
 msgid "pack-objects died"
 msgstr "les objets groupés ont disparu"
 
-#: bundle.c:400
+#: bundle.c:417
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "la référence '%s' est exclue par les options de rev-list"
 
-#: bundle.c:504
+#: bundle.c:533 builtin/log.c:211 builtin/log.c:1975 builtin/shortlog.c:400
+#, c-format
+msgid "unrecognized argument: %s"
+msgstr "argument non reconnu : %s"
+
+#: bundle.c:548
 #, c-format
 msgid "unsupported bundle version %d"
 msgstr "version de colis non supportée %d"
 
-#: bundle.c:506
+#: bundle.c:550
 #, c-format
 msgid "cannot write bundle version %d with algorithm %s"
 msgstr "impossible d'écrire une version de colis %d avec l'algorithme %s"
 
-#: bundle.c:524 builtin/log.c:210 builtin/log.c:1953 builtin/shortlog.c:399
-#, c-format
-msgid "unrecognized argument: %s"
-msgstr "argument non reconnu : %s"
-
-#: bundle.c:553
+#: bundle.c:600
 msgid "Refusing to create empty bundle."
 msgstr "Refus de créer un colis vide."
 
-#: bundle.c:563
+#: bundle.c:610
 #, c-format
 msgid "cannot create '%s'"
 msgstr "impossible de créer '%s'"
 
-#: bundle.c:588
+#: bundle.c:639
 msgid "index-pack died"
 msgstr "l'index de groupe a disparu"
 
@@ -2243,7 +2300,7 @@ msgstr "la section finale a un id non nul %<PRIx32>"
 msgid "invalid color value: %.*s"
 msgstr "valeur invalide de couleur : %.*s"
 
-#: commit-graph.c:204 midx.c:51
+#: commit-graph.c:204 midx.c:52
 msgid "invalid hash version"
 msgstr "version d'empreinte invalide"
 
@@ -2274,218 +2331,221 @@ msgstr ""
 msgid "commit-graph file is too small to hold %u chunks"
 msgstr "le graphe de commit est trop petit pour contenir %u sections"
 
-#: commit-graph.c:482
+#: commit-graph.c:485
 msgid "commit-graph has no base graphs chunk"
 msgstr "le graphe de commit n'a pas de section de graphes de base"
 
-#: commit-graph.c:492
+#: commit-graph.c:495
 msgid "commit-graph chain does not match"
 msgstr "la chaîne de graphe de commit ne correspond pas"
 
-#: commit-graph.c:540
+#: commit-graph.c:543
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
 msgstr ""
 "chaîne de graphe de commit invalide : la ligne '%s' n'est pas une empreinte"
 
-#: commit-graph.c:564
+#: commit-graph.c:567
 msgid "unable to find all commit-graph files"
 msgstr "impossible de trouver tous les fichiers du graphe de commit"
 
-#: commit-graph.c:749 commit-graph.c:786
+#: commit-graph.c:752 commit-graph.c:789
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr ""
 "position de commit invalide. Le graphe de commit est vraisemblablement "
 "corrompu"
 
-#: commit-graph.c:770
+#: commit-graph.c:773
 #, c-format
 msgid "could not find commit %s"
 msgstr "impossible de trouver le commit %s"
 
-#: commit-graph.c:803
+#: commit-graph.c:806
 msgid "commit-graph requires overflow generation data but has none"
 msgstr ""
 "le graphe de commits requiert des données de génération de débordement mais "
 "n'en contient pas"
 
-#: commit-graph.c:1108 builtin/am.c:1369
+#: commit-graph.c:1111 builtin/am.c:1370 builtin/checkout.c:775
+#: builtin/clone.c:705
 #, c-format
 msgid "unable to parse commit %s"
 msgstr "impossible d'analyser le commit %s"
 
-#: commit-graph.c:1370 builtin/pack-objects.c:3070
+#: commit-graph.c:1373 builtin/pack-objects.c:3078
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "impossible d'obtenir le type de l'objet %s"
 
-#: commit-graph.c:1401
+#: commit-graph.c:1404
 msgid "Loading known commits in commit graph"
 msgstr "Lecture des commits connus dans un graphe de commit"
 
-#: commit-graph.c:1418
+#: commit-graph.c:1421
 msgid "Expanding reachable commits in commit graph"
 msgstr "Expansion des commits joignables dans un graphe de commit"
 
-#: commit-graph.c:1438
+#: commit-graph.c:1441
 msgid "Clearing commit marks in commit graph"
 msgstr "Suppression les marques de commit dans le graphe de commits"
 
-#: commit-graph.c:1457
+#: commit-graph.c:1460
 msgid "Computing commit graph topological levels"
 msgstr "Calcul des niveaux topologiques du graphe de commits"
 
-#: commit-graph.c:1510
+#: commit-graph.c:1513
 msgid "Computing commit graph generation numbers"
 msgstr "Calcul des chiffres de génération du graphe de commits"
 
-#: commit-graph.c:1591
+#: commit-graph.c:1598
 msgid "Computing commit changed paths Bloom filters"
 msgstr "Calcul des filtres Bloom des chemins modifiés du commit"
 
-#: commit-graph.c:1668
+#: commit-graph.c:1675
 msgid "Collecting referenced commits"
 msgstr "Collecte des commits référencés"
 
-#: commit-graph.c:1693
+#: commit-graph.c:1701
 #, c-format
-msgid "Finding commits for commit graph in %d pack"
-msgid_plural "Finding commits for commit graph in %d packs"
-msgstr[0] "Recherche de commits pour un graphe de commits dans %d paquet"
-msgstr[1] "Recherche de commits pour un graphe de commits dans %d paquets"
+msgid "Finding commits for commit graph in %<PRIuMAX> pack"
+msgid_plural "Finding commits for commit graph in %<PRIuMAX> packs"
+msgstr[0] ""
+"Recherche de commits pour un graphe de commits dans %<PRIuMAX> paquet"
+msgstr[1] ""
+"Recherche de commits pour un graphe de commits dans %<PRIuMAX> paquets"
 
-#: commit-graph.c:1706
+#: commit-graph.c:1714
 #, c-format
 msgid "error adding pack %s"
 msgstr "erreur à l'ajout du packet %s"
 
-#: commit-graph.c:1710
+#: commit-graph.c:1718
 #, c-format
 msgid "error opening index for %s"
 msgstr "erreur à l'ouverture de l'index pour %s"
 
-#: commit-graph.c:1747
+#: commit-graph.c:1756
 msgid "Finding commits for commit graph among packed objects"
 msgstr ""
 "Recherche de commits pour un graphe de commits parmi les objets empaquetés"
 
-#: commit-graph.c:1765
+#: commit-graph.c:1774
 msgid "Finding extra edges in commit graph"
 msgstr "Recherche d'arêtes supplémentaires dans un graphe de commits"
 
-#: commit-graph.c:1814
+#: commit-graph.c:1823
 msgid "failed to write correct number of base graph ids"
 msgstr "échec à l'écriture le nombre correct d'id de base de fusion"
 
-#: commit-graph.c:1845 midx.c:1149
+#: commit-graph.c:1854 midx.c:1168 builtin/sparse-checkout.c:475
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "impossible de créer les répertoires de premier niveau de %s"
 
-#: commit-graph.c:1858
+#: commit-graph.c:1868
 msgid "unable to create temporary graph layer"
 msgstr "impossible de créer une couche de graphe temporaire"
 
-#: commit-graph.c:1863
+#: commit-graph.c:1873
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr "impossible de régler les droits partagés pour '%s'"
 
-#: commit-graph.c:1920
+#: commit-graph.c:1930
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "Écriture le graphe de commits en %d passe"
 msgstr[1] "Écriture le graphe de commits en %d passes"
 
-#: commit-graph.c:1956
+#: commit-graph.c:1967
 msgid "unable to open commit-graph chain file"
 msgstr "impossible d'ouvrir le fichier de graphe de commit"
 
-#: commit-graph.c:1972
+#: commit-graph.c:1983
 msgid "failed to rename base commit-graph file"
 msgstr "échec du renommage du fichier de graphe de commits"
 
-#: commit-graph.c:1992
+#: commit-graph.c:2004
 msgid "failed to rename temporary commit-graph file"
 msgstr "impossible de renommer le fichier temporaire de graphe de commits"
 
-#: commit-graph.c:2125
+#: commit-graph.c:2137
 msgid "Scanning merged commits"
 msgstr "Analyse des commits de fusion"
 
-#: commit-graph.c:2169
+#: commit-graph.c:2181
 msgid "Merging commit-graph"
 msgstr "Fusion du graphe de commits"
 
-#: commit-graph.c:2277
+#: commit-graph.c:2289
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr ""
 "essai d'écriture de graphe de commits, mais 'core.commitGraph' est désactivé"
 
-#: commit-graph.c:2384
+#: commit-graph.c:2396
 msgid "too many commits to write graph"
 msgstr "trop de commits pour écrire un graphe"
 
-#: commit-graph.c:2482
+#: commit-graph.c:2494
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 "le graphe de commit a une somme de contrôle incorrecte et est "
 "vraisemblablement corrompu"
 
-#: commit-graph.c:2492
+#: commit-graph.c:2504
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "le graphe de commit a un ordre d'OID incorrect : %s puis %s"
 
-#: commit-graph.c:2502 commit-graph.c:2517
+#: commit-graph.c:2514 commit-graph.c:2529
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr ""
 "le graphe de commit a une valeur de dispersion incorrecte : dispersion[%d] = "
 "%u != %u"
 
-#: commit-graph.c:2509
+#: commit-graph.c:2521
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "échec de l'analyse le commit %s depuis le graphe de commits"
 
-#: commit-graph.c:2527
+#: commit-graph.c:2539
 msgid "Verifying commits in commit graph"
 msgstr "Verification des commits dans le graphe de commits"
 
-#: commit-graph.c:2542
+#: commit-graph.c:2554
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "échec de l'analyse du commit %s depuis la base de données d'objets pour le "
 "graphe de commit"
 
-#: commit-graph.c:2549
+#: commit-graph.c:2561
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
 "l'OID de l'arbre racine pour le commit %s dans le graphe de commit est %s != "
 "%s"
 
-#: commit-graph.c:2559
+#: commit-graph.c:2571
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr ""
 "la liste des parents du graphe de commit pour le commit %s est trop longue"
 
-#: commit-graph.c:2568
+#: commit-graph.c:2580
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "le parent du graphe de commit pour %s est %s != %s"
 
-#: commit-graph.c:2582
+#: commit-graph.c:2594
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr ""
 "la liste de parents du graphe de commit pour le commit %s se termine trop tôt"
 
-#: commit-graph.c:2587
+#: commit-graph.c:2599
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
@@ -2493,7 +2553,7 @@ msgstr ""
 "le graphe de commit a un numéro de génération nul pour le commit %s, mais "
 "non-nul ailleurs"
 
-#: commit-graph.c:2591
+#: commit-graph.c:2603
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
@@ -2501,32 +2561,32 @@ msgstr ""
 "le graphe de commit a un numéro de génération non-nul pour le commit %s, "
 "mais nul ailleurs"
 
-#: commit-graph.c:2608
+#: commit-graph.c:2620
 #, c-format
 msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
 msgstr ""
 "la génération du graphe de commit pour le commit %s est %<PRIuMAX> < "
 "%<PRIuMAX>"
 
-#: commit-graph.c:2614
+#: commit-graph.c:2626
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
 "la date de validation pour le commit %s dans le graphe de commit est "
 "%<PRIuMAX> != %<PRIuMAX>"
 
-#: commit.c:53 sequencer.c:3109 builtin/am.c:399 builtin/am.c:444
-#: builtin/am.c:449 builtin/am.c:1448 builtin/am.c:2123 builtin/replace.c:456
+#: commit.c:54 sequencer.c:3105 builtin/am.c:400 builtin/am.c:445
+#: builtin/am.c:450 builtin/am.c:1449 builtin/am.c:2124 builtin/replace.c:456
 #, c-format
 msgid "could not parse %s"
 msgstr "impossible d'analyser %s"
 
-#: commit.c:55
+#: commit.c:56
 #, c-format
 msgid "%s %s is not a commit!"
 msgstr "%s %s n'est pas un commit !"
 
-#: commit.c:196
+#: commit.c:197
 msgid ""
 "Support for <GIT_DIR>/info/grafts is deprecated\n"
 "and will be removed in a future Git version.\n"
@@ -2546,27 +2606,27 @@ msgstr ""
 "Supprimez ce message en lançant\n"
 "\"git config advice.graftFileDeprecated false\""
 
-#: commit.c:1241
+#: commit.c:1252
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr "La validation %s a une signature GPG non fiable, prétendument par %s."
 
-#: commit.c:1245
+#: commit.c:1256
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "La validation %s a une mauvaise signature GPG prétendument par %s."
 
-#: commit.c:1248
+#: commit.c:1259
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "La validation %s n'a pas de signature GPG."
 
-#: commit.c:1251
+#: commit.c:1262
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "La validation %s a une signature GPG correcte par %s\n"
 
-#: commit.c:1505
+#: commit.c:1516
 msgid ""
 "Warning: commit message did not conform to UTF-8.\n"
 "You may want to amend it after fixing the message, or set the config\n"
@@ -2582,7 +2642,17 @@ msgstr ""
 msgid "memory exhausted"
 msgstr "plus de mémoire"
 
-#: config.c:125
+#: compat/terminal.c:167
+msgid "cannot resume in the background, please use 'fg' to resume"
+msgstr ""
+"impossible de reprendre en arrière plan, veuillez utiliser 'fg' pour "
+"reprendre"
+
+#: compat/terminal.c:168
+msgid "cannot restore terminal settings"
+msgstr "impossible de restaurer les réglages du terminal"
+
+#: config.c:143
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2597,350 +2667,377 @@ msgstr ""
 "\t%s\n"
 "possibilité d'inclusions multiples."
 
-#: config.c:141
+#: config.c:159
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "expansion impossible du chemin d'inclusion '%s'"
 
-#: config.c:152
+#: config.c:170
 msgid "relative config includes must come from files"
 msgstr "les inclusions de configuration relatives doivent venir de fichiers"
 
-#: config.c:201
+#: config.c:219
 msgid "relative config include conditionals must come from files"
 msgstr ""
 "les conditions d'inclusion de configuration relative doivent venir de "
 "fichiers"
 
-#: config.c:398
+#: config.c:364
+msgid ""
+"remote URLs cannot be configured in file directly or indirectly included by "
+"includeIf.hasconfig:remote.*.url"
+msgstr ""
+"les URL distantes ne peuvent pas être configurées dans un fichier "
+"directement ou indirectement inclus par includeIf.hasconfig:remote.*.url"
+
+#: config.c:508
 #, c-format
 msgid "invalid config format: %s"
 msgstr "format de config invalide : %s"
 
-#: config.c:402
+#: config.c:512
 #, c-format
 msgid "missing environment variable name for configuration '%.*s'"
 msgstr "nom de variable d'environnement manquant pour le configuration '%.*s'"
 
-#: config.c:407
+#: config.c:517
 #, c-format
 msgid "missing environment variable '%s' for configuration '%.*s'"
 msgstr "variable d'environnement '%s' manquante pour le configuration '%.*s'"
 
-#: config.c:443
+#: config.c:553
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "la clé ne contient pas de section: %s"
 
-#: config.c:448
+#: config.c:558
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr "la clé ne contient pas de nom de variable : %s"
 
-#: config.c:470 sequencer.c:2806
+#: config.c:580 sequencer.c:2802
 #, c-format
 msgid "invalid key: %s"
 msgstr "clé invalide : %s"
 
-#: config.c:475
+#: config.c:585
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "clé invalide (retour chariot) : %s"
 
-#: config.c:495
+#: config.c:605
 msgid "empty config key"
 msgstr "clé de configuration vide"
 
-#: config.c:513 config.c:525
+#: config.c:623 config.c:635
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "paramètre de configuration mal formé: %s"
 
-#: config.c:539 config.c:556 config.c:563 config.c:572
+#: config.c:649 config.c:666 config.c:673 config.c:682
 #, c-format
 msgid "bogus format in %s"
 msgstr "formatage mal formé dans %s"
 
-#: config.c:606
+#: config.c:716
 #, c-format
 msgid "bogus count in %s"
 msgstr "compte faux dans %s"
 
-#: config.c:610
+#: config.c:720
 #, c-format
 msgid "too many entries in %s"
 msgstr "trop d'entrées dans %s"
 
-#: config.c:620
+#: config.c:730
 #, c-format
 msgid "missing config key %s"
 msgstr "clé de configuration %s manquante"
 
-#: config.c:628
+#: config.c:738
 #, c-format
 msgid "missing config value %s"
 msgstr "valeur de config manquante %s"
 
-#: config.c:979
+#: config.c:1089
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "ligne %d de config incorrecte dans le blob %s"
 
-#: config.c:983
+#: config.c:1093
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "ligne %d de config incorrecte dans le fichier %s"
 
-#: config.c:987
+#: config.c:1097
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "ligne %d de config incorrecte dans l'entrée standard"
 
-#: config.c:991
+#: config.c:1101
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "ligne %d de config incorrecte dans le blob de sous-module %s"
 
-#: config.c:995
+#: config.c:1105
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "ligne %d de config incorrecte dans la ligne de commande %s"
 
-#: config.c:999
+#: config.c:1109
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "ligne %d de config incorrecte dans %s"
 
-#: config.c:1136
+#: config.c:1246
 msgid "out of range"
 msgstr "hors plage"
 
-#: config.c:1136
+#: config.c:1246
 msgid "invalid unit"
 msgstr "unité invalide"
 
-#: config.c:1137
+#: config.c:1247
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "valeur numérique de configuration invalide '%s' pour '%s' : %s"
 
-#: config.c:1147
+#: config.c:1257
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr ""
 "valeur numérique de configuration incorrecte '%s' pour '%s' dans le blob "
 "%s : %s"
 
-#: config.c:1150
+#: config.c:1260
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr ""
 "valeur numérique de configuration incorrecte '%s' pour '%s' dans le fichier "
 "%s : %s"
 
-#: config.c:1153
+#: config.c:1263
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr ""
 "valeur numérique de configuration incorrecte '%s' pour '%s' dans l'entrée "
 "standard : %s"
 
-#: config.c:1156
+#: config.c:1266
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr ""
 "valeur numérique de configuration incorrecte '%s' pour '%s' dans le blob de "
 "sous-module %s : %s"
 
-#: config.c:1159
+#: config.c:1269
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr ""
 "valeur numérique de configuration incorrecte '%s' pour '%s' dans la ligne de "
 "commande %s : %s"
 
-#: config.c:1162
+#: config.c:1272
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr ""
 "valeur numérique de configuration incorrecte '%s' pour '%s' dans %s : %s"
 
-#: config.c:1241
+#: config.c:1368
+#, c-format
+msgid "invalid value for variable %s"
+msgstr "valeur invalide pour la variable %s"
+
+#: config.c:1389
+#, c-format
+msgid "ignoring unknown core.fsync component '%s'"
+msgstr "ignore le composant core.fsync inconne '%s'"
+
+#: config.c:1425
 #, c-format
 msgid "bad boolean config value '%s' for '%s'"
 msgstr "valeur booléenne de configuration invalide '%s' pour '%s'"
 
-#: config.c:1259
+#: config.c:1443
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "impossible d'étendre le répertoire utilisateur dans : '%s'"
 
-#: config.c:1268
+#: config.c:1452
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "'%s' pour '%s' n'est pas un horodatage valide"
 
-#: config.c:1361
+#: config.c:1545
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "longueur d'abbrev hors plage : %d"
 
-#: config.c:1375 config.c:1386
+#: config.c:1559 config.c:1570
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "niveau de compression zlib incorrect %d"
 
-#: config.c:1476
+#: config.c:1660
 msgid "core.commentChar should only be one character"
 msgstr "core.commentChar ne devrait être qu'un unique caractère"
 
-#: config.c:1509
+#: config.c:1692
+#, c-format
+msgid "ignoring unknown core.fsyncMethod value '%s'"
+msgstr "valeur inconnue '%s' de core.fsyncMethod"
+
+#: config.c:1698
+msgid "core.fsyncObjectFiles is deprecated; use core.fsync instead"
+msgstr "core.fsyncObjectFiles est obsolète ; utilisez core.fsync à la place"
+
+#: config.c:1714
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "mode invalide pour la création d'objet : %s"
 
-#: config.c:1584
+#: config.c:1800
 #, c-format
 msgid "malformed value for %s"
 msgstr "valeur mal formée pour %s"
 
-#: config.c:1610
+#: config.c:1826
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "valeur mal formée pour %s : %s"
 
-#: config.c:1611
+#: config.c:1827
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr "doit être parmi nothing, matching, simple, upstream ou current"
 
-#: config.c:1672 builtin/pack-objects.c:4053
+#: config.c:1888 builtin/pack-objects.c:4078
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "niveau de compression du paquet %d"
 
-#: config.c:1795
+#: config.c:2014
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "impossible de charger l'objet blob de config '%s'"
 
-#: config.c:1798
+#: config.c:2017
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "la référence '%s' ne pointe pas sur un blob"
 
-#: config.c:1816
+#: config.c:2035
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "impossible de résoudre le blob de config '%s'"
 
-#: config.c:1861
+#: config.c:2080
 #, c-format
 msgid "failed to parse %s"
 msgstr "échec de l'analyse de %s"
 
-#: config.c:1917
+#: config.c:2136
 msgid "unable to parse command-line config"
 msgstr "lecture de la configuration de ligne de commande impossible"
 
-#: config.c:2285
+#: config.c:2512
 msgid "unknown error occurred while reading the configuration files"
 msgstr "erreur inconnue pendant la lecture des fichiers de configuration"
 
-#: config.c:2459
+#: config.c:2686
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "%s invalide : '%s'"
 
-#: config.c:2504
+#: config.c:2731
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr ""
 "la valeur '%d' de splitIndex.maxPercentChange devrait se situer entre 0 et "
 "100"
 
-#: config.c:2550
+#: config.c:2763
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr ""
 "impossible d'analyser '%s' depuis le configuration en ligne de commande"
 
-#: config.c:2552
+#: config.c:2765
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr ""
 "variable de configuration '%s' incorrecte dans le fichier '%s' à la ligne %d"
 
-#: config.c:2637
+#: config.c:2850
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "nom de section invalide '%s'"
 
-#: config.c:2669
+#: config.c:2882
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s a des valeurs multiples"
 
-#: config.c:2698
+#: config.c:2911
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "impossible d'écrire le fichier de configuration %s"
 
-#: config.c:2950 config.c:3277
+#: config.c:3177 config.c:3518
 #, c-format
 msgid "could not lock config file %s"
 msgstr "impossible de verrouiller le fichier de configuration %s"
 
-#: config.c:2961
+#: config.c:3188
 #, c-format
 msgid "opening %s"
 msgstr "ouverture de %s"
 
-#: config.c:2998 builtin/config.c:361
+#: config.c:3225 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "motif invalide : %s"
 
-#: config.c:3023
+#: config.c:3250
 #, c-format
 msgid "invalid config file %s"
 msgstr "fichier de configuration invalide %s"
 
-#: config.c:3036 config.c:3290
+#: config.c:3263 config.c:3531
 #, c-format
 msgid "fstat on %s failed"
 msgstr "échec de fstat sur %s"
 
-#: config.c:3047
+#: config.c:3274
 #, c-format
 msgid "unable to mmap '%s'%s"
 msgstr "impossible de réaliser un mmap de '%s'%s"
 
-#: config.c:3057 config.c:3295
+#: config.c:3284 config.c:3536
 #, c-format
 msgid "chmod on %s failed"
 msgstr "échec de chmod sur %s"
 
-#: config.c:3142 config.c:3392
+#: config.c:3369 config.c:3633
 #, c-format
 msgid "could not write config file %s"
 msgstr "impossible d'écrire le fichier de configuration %s"
 
-#: config.c:3176
+#: config.c:3403
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "impossible de régler '%s' à '%s'"
 
-#: config.c:3178 builtin/remote.c:662 builtin/remote.c:860 builtin/remote.c:868
+#: config.c:3405 builtin/remote.c:666 builtin/remote.c:885 builtin/remote.c:893
 #, c-format
 msgid "could not unset '%s'"
 msgstr "impossible de désinitialiser '%s'"
 
-#: config.c:3268
+#: config.c:3509
 #, c-format
 msgid "invalid section name: %s"
 msgstr "nom de section invalide : %s"
 
-#: config.c:3435
+#: config.c:3676
 #, c-format
 msgid "missing value for '%s'"
 msgstr "valeur manquante pour '%s'"
@@ -3282,68 +3379,68 @@ msgid "refusing to work with credential missing protocol field"
 msgstr ""
 "refus de travailler avec un champ protocol manquant dans l'identification"
 
-#: credential.c:395
+#: credential.c:396
 #, c-format
 msgid "url contains a newline in its %s component: %s"
 msgstr "l'url contient un retour chariot dans composant %s : %s"
 
-#: credential.c:439
+#: credential.c:440
 #, c-format
 msgid "url has no scheme: %s"
 msgstr "l'url n'a pas de schéma : %s"
 
-#: credential.c:512
+#: credential.c:513
 #, c-format
 msgid "credential url cannot be parsed: %s"
 msgstr "impossible d'analyser l'url d'identification : %s"
 
-#: date.c:138
+#: date.c:139
 msgid "in the future"
 msgstr "dans le futur"
 
-#: date.c:144
+#: date.c:145
 #, c-format
 msgid "%<PRIuMAX> second ago"
 msgid_plural "%<PRIuMAX> seconds ago"
 msgstr[0] "il y a %<PRIuMAX> seconde"
 msgstr[1] "il y a %<PRIuMAX> secondes"
 
-#: date.c:151
+#: date.c:152
 #, c-format
 msgid "%<PRIuMAX> minute ago"
 msgid_plural "%<PRIuMAX> minutes ago"
 msgstr[0] "il y a %<PRIuMAX> minute"
 msgstr[1] "il y a %<PRIuMAX> minutes"
 
-#: date.c:158
+#: date.c:159
 #, c-format
 msgid "%<PRIuMAX> hour ago"
 msgid_plural "%<PRIuMAX> hours ago"
 msgstr[0] "il y a %<PRIuMAX> heure"
 msgstr[1] "il y a %<PRIuMAX> heures"
 
-#: date.c:165
+#: date.c:166
 #, c-format
 msgid "%<PRIuMAX> day ago"
 msgid_plural "%<PRIuMAX> days ago"
 msgstr[0] "il y a %<PRIuMAX> jour"
 msgstr[1] "il y a %<PRIuMAX> jours"
 
-#: date.c:171
+#: date.c:172
 #, c-format
 msgid "%<PRIuMAX> week ago"
 msgid_plural "%<PRIuMAX> weeks ago"
 msgstr[0] "il y a %<PRIuMAX> semaine"
 msgstr[1] "il y a %<PRIuMAX> semaines"
 
-#: date.c:178
+#: date.c:179
 #, c-format
 msgid "%<PRIuMAX> month ago"
 msgid_plural "%<PRIuMAX> months ago"
 msgstr[0] "il y a %<PRIuMAX> mois"
 msgstr[1] "il y a %<PRIuMAX> mois"
 
-#: date.c:189
+#: date.c:190
 #, c-format
 msgid "%<PRIuMAX> year"
 msgid_plural "%<PRIuMAX> years"
@@ -3351,14 +3448,14 @@ msgstr[0] "%<PRIuMAX> an"
 msgstr[1] "%<PRIuMAX> ans"
 
 #. TRANSLATORS: "%s" is "<n> years"
-#: date.c:192
+#: date.c:193
 #, c-format
 msgid "%s, %<PRIuMAX> month ago"
 msgid_plural "%s, %<PRIuMAX> months ago"
 msgstr[0] "il y a %s et %<PRIuMAX> mois"
 msgstr[1] "il y a %s et %<PRIuMAX> mois"
 
-#: date.c:197 date.c:202
+#: date.c:198 date.c:203
 #, c-format
 msgid "%<PRIuMAX> year ago"
 msgid_plural "%<PRIuMAX> years ago"
@@ -3391,10 +3488,14 @@ msgstr ""
 msgid "Marked %d islands, done.\n"
 msgstr "Marquage de %d îlots, fait.\n"
 
-#: diff-merges.c:70
+#: diff-merges.c:81 gpg-interface.c:719 gpg-interface.c:734 ls-refs.c:37
+#: parallel-checkout.c:42 sequencer.c:2805 setup.c:563 builtin/am.c:203
+#: builtin/am.c:2243 builtin/am.c:2287 builtin/blame.c:724 builtin/blame.c:742
+#: builtin/fetch.c:792 builtin/pack-objects.c:3515 builtin/pull.c:45
+#: builtin/pull.c:47 builtin/pull.c:321
 #, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr "valeur inconnue pour --diff-merges : %s"
+msgid "invalid value for '%s': '%s'"
+msgstr "valeur invalide pour '%s' : '%s'"
 
 #: diff-lib.c:561
 msgid "--merge-base does not work with ranges"
@@ -3428,18 +3529,18 @@ msgstr ""
 "Pas un dépôt git. Utilisez --no-index pour comparer deux chemins hors d'un "
 "arbre de travail"
 
-#: diff.c:158
+#: diff.c:159
 #, c-format
 msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
 msgstr ""
 "  Impossible d'analyser le pourcentage de modification de dirstat '%s'\n"
 
-#: diff.c:163
+#: diff.c:164
 #, c-format
 msgid "  Unknown dirstat parameter '%s'\n"
 msgstr "  Paramètre dirstat inconnu '%s'\n"
 
-#: diff.c:299
+#: diff.c:300
 msgid ""
 "color moved setting must be one of 'no', 'default', 'blocks', 'zebra', "
 "'dimmed-zebra', 'plain'"
@@ -3447,7 +3548,7 @@ msgstr ""
 "le paramètre de couleur de déplacement doit être parmi 'no', 'default', "
 "'blocks', 'zebra', 'dimmed-zebra' ou 'plain'"
 
-#: diff.c:327
+#: diff.c:328
 #, c-format
 msgid ""
 "unknown color-moved-ws mode '%s', possible values are 'ignore-space-change', "
@@ -3457,7 +3558,7 @@ msgstr ""
 "space-change', 'ignore-space-at-eol', 'ignore-all-space', 'allow-indentation-"
 "change'"
 
-#: diff.c:335
+#: diff.c:336
 msgid ""
 "color-moved-ws: allow-indentation-change cannot be combined with other "
 "whitespace modes"
@@ -3465,13 +3566,13 @@ msgstr ""
 "color-moved-ws : allow-indentation-change ne peut pas être combiné avec "
 "d'autres modes d'espace"
 
-#: diff.c:412
+#: diff.c:413
 #, c-format
 msgid "Unknown value for 'diff.submodule' config variable: '%s'"
 msgstr ""
 "Valeur inconnue pour la variable de configuration 'diff.submodule' : '%s'"
 
-#: diff.c:472
+#: diff.c:473
 #, c-format
 msgid ""
 "Found errors in 'diff.dirstat' config variable:\n"
@@ -3480,30 +3581,30 @@ msgstr ""
 "Erreurs dans la variable de configuration 'diff.dirstat' :\n"
 "%s"
 
-#: diff.c:4237
+#: diff.c:4282
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "l'application de diff externe a disparu, arrêt à %s"
 
-#: diff.c:4589
+#: diff.c:4677 parse-options.c:1114
 #, c-format
 msgid "options '%s', '%s', '%s', and '%s' cannot be used together"
 msgstr ""
 "les options '%s', '%s', '%s' et '%s' ne peuvent pas être utilisées ensemble"
 
-#: diff.c:4593 builtin/difftool.c:736 builtin/log.c:1982 builtin/worktree.c:506
+#: diff.c:4681 parse-options.c:1118 builtin/worktree.c:578
 #, c-format
 msgid "options '%s', '%s', and '%s' cannot be used together"
 msgstr "les options '%s', '%s' et '%s' ne peuvent pas être utilisées ensemble"
 
-#: diff.c:4597
+#: diff.c:4685
 #, c-format
 msgid "options '%s' and '%s' cannot be used together, use '%s' with '%s'"
 msgstr ""
 "les options '%s' et '%s' ne peuvent pas être utilisées ensemble, utilisez "
 "'%s' avec '%s'"
 
-#: diff.c:4601
+#: diff.c:4689
 #, c-format
 msgid ""
 "options '%s' and '%s' cannot be used together, use '%s' with '%s' and '%s'"
@@ -3511,22 +3612,22 @@ msgstr ""
 "les options '%s' et '%s' ne peuvent pas être utilisées ensemble, utilisez "
 "'%s' avec '%s' et '%s'"
 
-#: diff.c:4681
+#: diff.c:4769
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow a besoin d'une spécification de chemin unique"
 
-#: diff.c:4729
+#: diff.c:4823
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "valeur invalide de --stat : %s"
 
-#: diff.c:4734 diff.c:4739 diff.c:4744 diff.c:4749 diff.c:5277
+#: diff.c:4828 diff.c:4833 diff.c:4838 diff.c:4843 diff.c:5319
 #: parse-options.c:217 parse-options.c:221
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s attend une valeur numérique"
 
-#: diff.c:4766
+#: diff.c:4860
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3535,42 +3636,42 @@ msgstr ""
 "Impossible d'analyser le paramètre de l'option --dirstat/-X :\n"
 "%s"
 
-#: diff.c:4851
+#: diff.c:4893
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "classe de modification inconnue '%c' dans --diff-filter=%s"
 
-#: diff.c:4875
+#: diff.c:4917
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "valeur inconnue après ws-error-highlight=%.*s"
 
-#: diff.c:4889
+#: diff.c:4931
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "impossible de résoudre '%s'"
 
-#: diff.c:4939 diff.c:4945
+#: diff.c:4981 diff.c:4987
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "forme <n>/<m> attendue par %s"
 
-#: diff.c:4957
+#: diff.c:4999
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "caractère attendu par %s, '%s' trouvé"
 
-#: diff.c:4978
+#: diff.c:5020
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "mauvais argument --color-moved : %s"
 
-#: diff.c:4997
+#: diff.c:5039
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "mode invalide '%s' dans --color-moved-ws"
 
-#: diff.c:5037
+#: diff.c:5079
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
@@ -3578,160 +3679,160 @@ msgstr ""
 "l'option diff-algorithm accept \"myers\", \"minimal\", \"patience\" et "
 "\"histogram\""
 
-#: diff.c:5073 diff.c:5093
+#: diff.c:5115 diff.c:5135
 #, c-format
 msgid "invalid argument to %s"
 msgstr "argument invalide pour %s"
 
-#: diff.c:5197
+#: diff.c:5239
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr "regex invalide fournie à -I : '%s'"
 
-#: diff.c:5246
+#: diff.c:5288
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "échec de l'analyse du paramètre de l'option --submodule : '%s'"
 
-#: diff.c:5302
+#: diff.c:5344
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "mauvais argument pour --word-diff : %s"
 
-#: diff.c:5338
+#: diff.c:5380
 msgid "Diff output format options"
 msgstr "Options de format de sortie de diff"
 
-#: diff.c:5340 diff.c:5346
+#: diff.c:5382 diff.c:5388
 msgid "generate patch"
 msgstr "générer la rustine"
 
-#: diff.c:5343 builtin/log.c:179
+#: diff.c:5385 builtin/log.c:180
 msgid "suppress diff output"
 msgstr "supprimer la sortie des différences"
 
-#: diff.c:5348 diff.c:5462 diff.c:5469
+#: diff.c:5390 diff.c:5504 diff.c:5511
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5349 diff.c:5352
+#: diff.c:5391 diff.c:5394
 msgid "generate diffs with <n> lines context"
 msgstr "générer les diffs avec <n> lignes de contexte"
 
-#: diff.c:5354
+#: diff.c:5396
 msgid "generate the diff in raw format"
 msgstr "générer le diff en format brut"
 
-#: diff.c:5357
+#: diff.c:5399
 msgid "synonym for '-p --raw'"
 msgstr "synonyme de '-p --raw'"
 
-#: diff.c:5361
+#: diff.c:5403
 msgid "synonym for '-p --stat'"
 msgstr "synonyme de '-p --stat'"
 
-#: diff.c:5365
+#: diff.c:5407
 msgid "machine friendly --stat"
 msgstr "--stat pour traitement automatique"
 
-#: diff.c:5368
+#: diff.c:5410
 msgid "output only the last line of --stat"
 msgstr "afficher seulement la dernière ligne de --stat"
 
-#: diff.c:5370 diff.c:5378
+#: diff.c:5412 diff.c:5420
 msgid "<param1,param2>..."
 msgstr "<param1,param2>..."
 
-#: diff.c:5371
+#: diff.c:5413
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
 "afficher la distribution des quantités de modifications relatives pour "
 "chaque sous-répertoire"
 
-#: diff.c:5375
+#: diff.c:5417
 msgid "synonym for --dirstat=cumulative"
 msgstr "synonyme pour --dirstat=cumulative"
 
-#: diff.c:5379
+#: diff.c:5421
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "synonyme pour --dirstat=files,param1,param2..."
 
-#: diff.c:5383
+#: diff.c:5425
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 "avertir si les modifications introduisent des marqueurs de conflit ou des "
 "erreurs d'espace"
 
-#: diff.c:5386
+#: diff.c:5428
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr ""
 "résumé succinct tel que les créations, les renommages et les modifications "
 "de mode"
 
-#: diff.c:5389
+#: diff.c:5431
 msgid "show only names of changed files"
 msgstr "n'afficher que les noms de fichiers modifiés"
 
-#: diff.c:5392
+#: diff.c:5434
 msgid "show only names and status of changed files"
 msgstr "n'afficher que les noms et les status des fichiers modifiés"
 
-#: diff.c:5394
+#: diff.c:5436
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<largeur>[,<largeur-de-nom>[,<compte>]]"
 
-#: diff.c:5395
+#: diff.c:5437
 msgid "generate diffstat"
 msgstr "générer un diffstat"
 
-#: diff.c:5397 diff.c:5400 diff.c:5403
+#: diff.c:5439 diff.c:5442 diff.c:5445
 msgid "<width>"
 msgstr "<largeur>"
 
-#: diff.c:5398
+#: diff.c:5440
 msgid "generate diffstat with a given width"
 msgstr "générer un diffstat avec la largeur indiquée"
 
-#: diff.c:5401
+#: diff.c:5443
 msgid "generate diffstat with a given name width"
 msgstr "génerer un diffstat avec la largeur de nom indiquée"
 
-#: diff.c:5404
+#: diff.c:5446
 msgid "generate diffstat with a given graph width"
 msgstr "génerer un diffstat avec la largeur de graphe indiquée"
 
-#: diff.c:5406
+#: diff.c:5448
 msgid "<count>"
 msgstr "<compte>"
 
-#: diff.c:5407
+#: diff.c:5449
 msgid "generate diffstat with limited lines"
 msgstr "générer un diffstat avec des lignes limitées"
 
-#: diff.c:5410
+#: diff.c:5452
 msgid "generate compact summary in diffstat"
 msgstr "générer une résumé compact dans le diffstat"
 
-#: diff.c:5413
+#: diff.c:5455
 msgid "output a binary diff that can be applied"
 msgstr "produire un diff binaire qui peut être appliqué"
 
-#: diff.c:5416
+#: diff.c:5458
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr ""
 "afficher les noms complets des objets pre- et post-image sur les lignes "
 "\"index\""
 
-#: diff.c:5418
+#: diff.c:5460
 msgid "show colored diff"
 msgstr "afficher un diff coloré"
 
-#: diff.c:5419
+#: diff.c:5461
 msgid "<kind>"
 msgstr "<sorte>"
 
-#: diff.c:5420
+#: diff.c:5462
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
@@ -3739,7 +3840,7 @@ msgstr ""
 "surligner les erreurs d'espace dans les lignes 'contexte', 'ancien', "
 "'nouveau' dans le diff"
 
-#: diff.c:5423
+#: diff.c:5465
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -3747,93 +3848,93 @@ msgstr ""
 "ne pas compresser les chemins et utiliser des NULs comme terminateurs de "
 "champs dans --raw ou --numstat"
 
-#: diff.c:5426 diff.c:5429 diff.c:5432 diff.c:5541
+#: diff.c:5468 diff.c:5471 diff.c:5474 diff.c:5583
 msgid "<prefix>"
 msgstr "<préfixe>"
 
-#: diff.c:5427
+#: diff.c:5469
 msgid "show the given source prefix instead of \"a/\""
 msgstr "afficher le préfixe de source indiqué au lieu de \"a/\""
 
-#: diff.c:5430
+#: diff.c:5472
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "afficher le préfixe de destination indiqué au lieu de \"b/\""
 
-#: diff.c:5433
+#: diff.c:5475
 msgid "prepend an additional prefix to every line of output"
 msgstr "préfixer toutes les lignes en sortie avec la chaîne indiquée"
 
-#: diff.c:5436
+#: diff.c:5478
 msgid "do not show any source or destination prefix"
 msgstr "n'afficher aucun préfixe, ni de source, ni de destination"
 
-#: diff.c:5439
+#: diff.c:5481
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr ""
 "afficher le contexte entre les sections à concurrence du nombre de ligne "
 "indiqué"
 
-#: diff.c:5443 diff.c:5448 diff.c:5453
+#: diff.c:5485 diff.c:5490 diff.c:5495
 msgid "<char>"
 msgstr "<caractère>"
 
-#: diff.c:5444
+#: diff.c:5486
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "spécifier le caractère pour indiquer une nouvelle ligne au lieu de '+'"
 
-#: diff.c:5449
+#: diff.c:5491
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "spécifier le caractère pour indiquer une ancienne ligne au lieu de '-'"
 
-#: diff.c:5454
+#: diff.c:5496
 msgid "specify the character to indicate a context instead of ' '"
 msgstr ""
 "spécifier le caractère pour indiquer une ligne de contexte au lieu de ' '"
 
-#: diff.c:5457
+#: diff.c:5499
 msgid "Diff rename options"
 msgstr "Options de renommage de diff"
 
-#: diff.c:5458
+#: diff.c:5500
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5459
+#: diff.c:5501
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr ""
 "casser les modifications d'une réécrire complète en paires de suppression et "
 "création"
 
-#: diff.c:5463
+#: diff.c:5505
 msgid "detect renames"
 msgstr "détecter les renommages"
 
-#: diff.c:5467
+#: diff.c:5509
 msgid "omit the preimage for deletes"
 msgstr "supprimer la pré-image pour les suppressions"
 
-#: diff.c:5470
+#: diff.c:5512
 msgid "detect copies"
 msgstr "détecter les copies"
 
-#: diff.c:5474
+#: diff.c:5516
 msgid "use unmodified files as source to find copies"
 msgstr ""
 "utiliser les fichiers non-modifiés comme sources pour trouver des copies"
 
-#: diff.c:5476
+#: diff.c:5518
 msgid "disable rename detection"
 msgstr "désactiver la détection de renommage"
 
-#: diff.c:5479
+#: diff.c:5521
 msgid "use empty blobs as rename source"
 msgstr "utiliser des blobs vides comme source de renommage"
 
-#: diff.c:5481
+#: diff.c:5523
 msgid "continue listing the history of a file beyond renames"
 msgstr "continuer à afficher l'historique d'un fichier au delà des renommages"
 
-#: diff.c:5484
+#: diff.c:5526
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
@@ -3841,165 +3942,165 @@ msgstr ""
 "empêcher la détection de renommage/copie si le nombre de cibles de renommage/"
 "copie excède la limite indiquée"
 
-#: diff.c:5486
+#: diff.c:5528
 msgid "Diff algorithm options"
 msgstr "Options de l'algorithme de diff"
 
-#: diff.c:5488
+#: diff.c:5530
 msgid "produce the smallest possible diff"
 msgstr "produire le diff le plus petit possible"
 
-#: diff.c:5491
+#: diff.c:5533
 msgid "ignore whitespace when comparing lines"
 msgstr "ignorer les espaces lors de la comparaison de ligne"
 
-#: diff.c:5494
+#: diff.c:5536
 msgid "ignore changes in amount of whitespace"
 msgstr "ignorer des modifications du nombre d'espaces"
 
-#: diff.c:5497
+#: diff.c:5539
 msgid "ignore changes in whitespace at EOL"
 msgstr "ignorer des modifications d'espace en fin de ligne"
 
-#: diff.c:5500
+#: diff.c:5542
 msgid "ignore carrier-return at the end of line"
 msgstr "ignore le retour chariot en fin de ligne"
 
-#: diff.c:5503
+#: diff.c:5545
 msgid "ignore changes whose lines are all blank"
 msgstr "ignorer les modifications dont les lignes sont vides"
 
-#: diff.c:5505 diff.c:5527 diff.c:5530 diff.c:5575
+#: diff.c:5547 diff.c:5569 diff.c:5572 diff.c:5617
 msgid "<regex>"
 msgstr "<regex>"
 
-#: diff.c:5506
+#: diff.c:5548
 msgid "ignore changes whose all lines match <regex>"
 msgstr "ignorer les modifications dont les lignes correspondent à <regex>"
 
-#: diff.c:5509
+#: diff.c:5551
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr ""
 "heuristique qui déplace les limites de sections de diff pour faciliter la "
 "lecture"
 
-#: diff.c:5512
+#: diff.c:5554
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "générer un diff en utilisant l'algorithme de différence \"patience\""
 
-#: diff.c:5516
+#: diff.c:5558
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr ""
 "générer un diff en utilisant l'algorithme de différence \"histogramme\""
 
-#: diff.c:5518
+#: diff.c:5560
 msgid "<algorithm>"
 msgstr "<algorithme>"
 
-#: diff.c:5519
+#: diff.c:5561
 msgid "choose a diff algorithm"
 msgstr "choisir un algorithme de différence"
 
-#: diff.c:5521
+#: diff.c:5563
 msgid "<text>"
 msgstr "<texte>"
 
-#: diff.c:5522
+#: diff.c:5564
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "générer un diff en utilisant l'algorithme de différence \"ancré\""
 
-#: diff.c:5524 diff.c:5533 diff.c:5536
+#: diff.c:5566 diff.c:5575 diff.c:5578
 msgid "<mode>"
 msgstr "<mode>"
 
-#: diff.c:5525
+#: diff.c:5567
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr ""
 "afficher des différences par mot, en utilisant <mode> pour délimiter les "
 "mots modifiés"
 
-#: diff.c:5528
+#: diff.c:5570
 msgid "use <regex> to decide what a word is"
 msgstr "utiliser <regex> pour décider ce qu'est un mot"
 
-#: diff.c:5531
+#: diff.c:5573
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "équivalent à --word-diff=color --word-diff-regex=<regex>"
 
-#: diff.c:5534
+#: diff.c:5576
 msgid "moved lines of code are colored differently"
 msgstr "les lignes déplacées sont colorées différemment"
 
-#: diff.c:5537
+#: diff.c:5579
 msgid "how white spaces are ignored in --color-moved"
 msgstr "comment les espaces sont ignorés dans --color-moved"
 
-#: diff.c:5540
+#: diff.c:5582
 msgid "Other diff options"
 msgstr "Autres options diff"
 
-#: diff.c:5542
+#: diff.c:5584
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "lancé depuis un sous-répertoire, exclure les modifications en dehors et "
 "afficher les chemins relatifs"
 
-#: diff.c:5546
+#: diff.c:5588
 msgid "treat all files as text"
 msgstr "traiter les fichiers comme texte"
 
-#: diff.c:5548
+#: diff.c:5590
 msgid "swap two inputs, reverse the diff"
 msgstr "échanger les entrées, inverser le diff"
 
-#: diff.c:5550
+#: diff.c:5592
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "sortir un code d'erreur 1 s'il y avait de différences, 0 sinon"
 
-#: diff.c:5552
+#: diff.c:5594
 msgid "disable all output of the program"
 msgstr "désactiver tous les affichages du programme"
 
-#: diff.c:5554
+#: diff.c:5596
 msgid "allow an external diff helper to be executed"
 msgstr "autoriser l'exécution d'un assistant externe de diff"
 
-#: diff.c:5556
+#: diff.c:5598
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 "lancer les filtres externes de conversion en texte lors de la comparaison de "
 "fichiers binaires"
 
-#: diff.c:5558
+#: diff.c:5600
 msgid "<when>"
 msgstr "<quand>"
 
-#: diff.c:5559
+#: diff.c:5601
 msgid "ignore changes to submodules in the diff generation"
 msgstr ""
 "ignorer les modifications dans les sous-modules lors de la génération de diff"
 
-#: diff.c:5562
+#: diff.c:5604
 msgid "<format>"
 msgstr "<format>"
 
-#: diff.c:5563
+#: diff.c:5605
 msgid "specify how differences in submodules are shown"
 msgstr "spécifier comment les différences dans les sous-modules sont affichées"
 
-#: diff.c:5567
+#: diff.c:5609
 msgid "hide 'git add -N' entries from the index"
 msgstr "masquer les entrées 'git add -N' de l'index"
 
-#: diff.c:5570
+#: diff.c:5612
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "traiter les entrées 'git add -N' comme réelles dans l'index"
 
-#: diff.c:5572
+#: diff.c:5614
 msgid "<string>"
 msgstr "<chaîne>"
 
-#: diff.c:5573
+#: diff.c:5615
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
@@ -4007,7 +4108,7 @@ msgstr ""
 "rechercher les différences qui modifient le nombre d'occurrences de la "
 "chaîne spécifiée"
 
-#: diff.c:5576
+#: diff.c:5618
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
@@ -4015,38 +4116,38 @@ msgstr ""
 "rechercher les différences qui modifient le nombre d'occurrences de la regex "
 "spécifiée"
 
-#: diff.c:5579
+#: diff.c:5621
 msgid "show all changes in the changeset with -S or -G"
 msgstr ""
 "afficher toutes les modifications dans l'ensemble de modifications avec -S "
 "ou -G"
 
-#: diff.c:5582
+#: diff.c:5624
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr ""
 "traiter <chaîne> dans -S comme une expression rationnelle POSIX étendue"
 
-#: diff.c:5585
+#: diff.c:5627
 msgid "control the order in which files appear in the output"
 msgstr "contrôler l'ordre dans lequel les fichiers apparaissent dans la sortie"
 
-#: diff.c:5586 diff.c:5589
+#: diff.c:5628 diff.c:5631
 msgid "<path>"
 msgstr "<chemin>"
 
-#: diff.c:5587
+#: diff.c:5629
 msgid "show the change in the specified path first"
 msgstr "afficher la modification dans le chemin spécifié en premier"
 
-#: diff.c:5590
+#: diff.c:5632
 msgid "skip the output to the specified path"
 msgstr "sauter la sortie pour le chemin spécifié"
 
-#: diff.c:5592
+#: diff.c:5634
 msgid "<object-id>"
 msgstr "<id-objet>"
 
-#: diff.c:5593
+#: diff.c:5635
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
@@ -4054,35 +4155,35 @@ msgstr ""
 "rechercher les différences qui modifient le nombre d'occurrences de l'objet "
 "indiqué"
 
-#: diff.c:5595
+#: diff.c:5637
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5596
+#: diff.c:5638
 msgid "select files by diff type"
 msgstr "sélectionner les fichiers par types de diff"
 
-#: diff.c:5598
+#: diff.c:5640
 msgid "<file>"
 msgstr "<fichier>"
 
-#: diff.c:5599
-msgid "Output to a specific file"
-msgstr "Sortie vers un fichier spécifié"
+#: diff.c:5641
+msgid "output to a specific file"
+msgstr "sortie vers un fichier spécifique"
 
-#: diff.c:6257
+#: diff.c:6321
 msgid "exhaustive rename detection was skipped due to too many files."
 msgstr ""
 "détection exhaustive de renommage annulée à cause d'un trop grand nombre de "
 "fichiers."
 
-#: diff.c:6260
+#: diff.c:6324
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
 "recherche uniquement des copies par modification de chemin à cause d'un trop "
 "grand nombre de fichiers."
 
-#: diff.c:6263
+#: diff.c:6327
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -4136,20 +4237,20 @@ msgstr "désactivation de la correspondance de motif de cone"
 msgid "cannot use %s as an exclude file"
 msgstr "impossible d'utiliser %s comme fichier d'exclusion"
 
-#: dir.c:2418
+#: dir.c:2419
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "impossible d'ouvrir le répertoire '%s'"
 
-#: dir.c:2720
+#: dir.c:2721
 msgid "failed to get kernel name and information"
 msgstr "echec de l'obtention d'information de kernel"
 
-#: dir.c:2844
+#: dir.c:2846
 msgid "untracked cache is disabled on this system or location"
 msgstr "le cache non suivi est désactivé sur ce système ou sur cet endroit"
 
-#: dir.c:3112
+#: dir.c:3119
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -4157,17 +4258,17 @@ msgstr ""
 "Aucun nom de répertoire n'a pu être deviné\n"
 "Veuillez spécifier un répertoire dans la ligne de commande"
 
-#: dir.c:3800
+#: dir.c:3807
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "fichier d'index corrompu dans le dépôt %s"
 
-#: dir.c:3847 dir.c:3852
+#: dir.c:3854 dir.c:3859
 #, c-format
 msgid "could not create directories for %s"
 msgstr "impossible de créer les répertoires pour %s"
 
-#: dir.c:3881
+#: dir.c:3888
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "impossible de migrer le répertoire git de '%s' vers '%s'"
@@ -4188,7 +4289,7 @@ msgstr "Filtrage du contenu"
 msgid "could not stat file '%s'"
 msgstr "impossible de stat le fichier '%s'"
 
-#: environment.c:145
+#: environment.c:147
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "espaces de nom de Git \"%s\""
@@ -4220,247 +4321,274 @@ msgstr "git fetch-pack : ACK/NACK attendu, '%s' reçu"
 msgid "unable to write to remote"
 msgstr "impossible d'écrire sur un distant"
 
-#: fetch-pack.c:395 fetch-pack.c:1439
+#: fetch-pack.c:397 fetch-pack.c:1460
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "ligne de superficiel invalide : %s"
 
-#: fetch-pack.c:401 fetch-pack.c:1445
+#: fetch-pack.c:403 fetch-pack.c:1466
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "ligne de fin de superficiel invalide : %s"
 
-#: fetch-pack.c:403 fetch-pack.c:1447
+#: fetch-pack.c:405 fetch-pack.c:1468
 #, c-format
 msgid "object not found: %s"
 msgstr "objet non trouvé : %s"
 
-#: fetch-pack.c:406 fetch-pack.c:1450
+#: fetch-pack.c:408 fetch-pack.c:1471
 #, c-format
 msgid "error in object: %s"
 msgstr "erreur dans l'objet : %s"
 
-#: fetch-pack.c:408 fetch-pack.c:1452
+#: fetch-pack.c:410 fetch-pack.c:1473
 #, c-format
 msgid "no shallow found: %s"
 msgstr "pas de superficiel trouvé : %s"
 
-#: fetch-pack.c:411 fetch-pack.c:1456
+#: fetch-pack.c:413 fetch-pack.c:1477
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "superficiel/non superficiel attendu, %s trouvé"
 
-#: fetch-pack.c:451
+#: fetch-pack.c:453
 #, c-format
 msgid "got %s %d %s"
 msgstr "réponse %s %d %s"
 
-#: fetch-pack.c:468
+#: fetch-pack.c:470
 #, c-format
 msgid "invalid commit %s"
 msgstr "commit invalide %s"
 
-#: fetch-pack.c:499
+#: fetch-pack.c:501
 msgid "giving up"
 msgstr "abandon"
 
-#: fetch-pack.c:512 progress.c:339
+#: fetch-pack.c:514 progress.h:25
 msgid "done"
 msgstr "fait"
 
-#: fetch-pack.c:524
+#: fetch-pack.c:526
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "%s trouvé (%d) %s"
 
-#: fetch-pack.c:560
+#: fetch-pack.c:562
 #, c-format
 msgid "Marking %s as complete"
 msgstr "Marquage de %s comme terminé"
 
-#: fetch-pack.c:775
+#: fetch-pack.c:784
 #, c-format
 msgid "already have %s (%s)"
 msgstr "%s déjà possédé (%s)"
 
-#: fetch-pack.c:861
+#: fetch-pack.c:870
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack : impossible de dupliquer le démultiplexeur latéral"
 
-#: fetch-pack.c:869
+#: fetch-pack.c:878
 msgid "protocol error: bad pack header"
 msgstr "erreur de protocole : mauvais entête de paquet"
 
-#: fetch-pack.c:965
+#: fetch-pack.c:974
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack : impossible de dupliquer %s"
 
-#: fetch-pack.c:971
+#: fetch-pack.c:980
 msgid "fetch-pack: invalid index-pack output"
 msgstr "fetch-pack : sortie d'index de pack invalide"
 
-#: fetch-pack.c:988
+#: fetch-pack.c:997
 #, c-format
 msgid "%s failed"
 msgstr "échec de %s"
 
-#: fetch-pack.c:990
+#: fetch-pack.c:999
 msgid "error in sideband demultiplexer"
 msgstr "erreur dans le démultiplexer latéral"
 
-#: fetch-pack.c:1035
+#: fetch-pack.c:1048
 #, c-format
 msgid "Server version is %.*s"
 msgstr "La version du serveur est %.*s"
 
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1052 fetch-pack.c:1058
-#: fetch-pack.c:1062 fetch-pack.c:1066 fetch-pack.c:1070 fetch-pack.c:1074
-#: fetch-pack.c:1078 fetch-pack.c:1082 fetch-pack.c:1086 fetch-pack.c:1090
-#: fetch-pack.c:1096 fetch-pack.c:1102 fetch-pack.c:1107 fetch-pack.c:1112
+#: fetch-pack.c:1056 fetch-pack.c:1062 fetch-pack.c:1065 fetch-pack.c:1071
+#: fetch-pack.c:1075 fetch-pack.c:1079 fetch-pack.c:1083 fetch-pack.c:1087
+#: fetch-pack.c:1091 fetch-pack.c:1095 fetch-pack.c:1099 fetch-pack.c:1103
+#: fetch-pack.c:1109 fetch-pack.c:1115 fetch-pack.c:1120 fetch-pack.c:1125
 #, c-format
 msgid "Server supports %s"
 msgstr "Le serveur supporte %s"
 
-#: fetch-pack.c:1045
+#: fetch-pack.c:1058
 msgid "Server does not support shallow clients"
 msgstr "Le serveur ne supporte les clients superficiels"
 
-#: fetch-pack.c:1105
+#: fetch-pack.c:1118
 msgid "Server does not support --shallow-since"
 msgstr "Le receveur ne gère pas --shallow-since"
 
-#: fetch-pack.c:1110
+#: fetch-pack.c:1123
 msgid "Server does not support --shallow-exclude"
 msgstr "Le receveur ne gère pas --shallow-exclude"
 
-#: fetch-pack.c:1114
+#: fetch-pack.c:1127
 msgid "Server does not support --deepen"
 msgstr "Le receveur ne gère pas --deepen"
 
-#: fetch-pack.c:1116
+#: fetch-pack.c:1129
 msgid "Server does not support this repository's object format"
 msgstr "Le serveur ne supporte pas ce format d'objets de ce dépôt"
 
-#: fetch-pack.c:1129
+#: fetch-pack.c:1142
 msgid "no common commits"
 msgstr "pas de commit commun"
 
-#: fetch-pack.c:1138 fetch-pack.c:1485 builtin/clone.c:1130
+#: fetch-pack.c:1151 fetch-pack.c:1506 builtin/clone.c:1166
 msgid "source repository is shallow, reject to clone."
 msgstr "le dépôt source est superficiel, clonage rejeté."
 
-#: fetch-pack.c:1144 fetch-pack.c:1681
+#: fetch-pack.c:1157 fetch-pack.c:1705
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack : échec de le récupération."
 
-#: fetch-pack.c:1258
+#: fetch-pack.c:1271
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "non-correspondance des algorithmes : client %s ; serveur %s"
 
-#: fetch-pack.c:1262
+#: fetch-pack.c:1275
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "le serveur ne supporte pas l'algorithme '%s'"
 
-#: fetch-pack.c:1295
+#: fetch-pack.c:1308
 msgid "Server does not support shallow requests"
 msgstr "Le serveur ne supporte pas les requêtes superficielles"
 
-#: fetch-pack.c:1302
+#: fetch-pack.c:1315
 msgid "Server supports filter"
 msgstr "Le serveur supporte filter"
 
-#: fetch-pack.c:1345 fetch-pack.c:2063
+#: fetch-pack.c:1358 fetch-pack.c:2087
 msgid "unable to write request to remote"
 msgstr "impossible d'écrire la requête sur le distant"
 
-#: fetch-pack.c:1363
+#: fetch-pack.c:1376
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "erreur à la lecture de l'entête de section '%s'"
 
-#: fetch-pack.c:1369
+#: fetch-pack.c:1382
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "'%s' attendu, '%s' reçu"
 
-#: fetch-pack.c:1403
+#: fetch-pack.c:1416
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "ligne d'acquittement inattendue : '%s'"
 
-#: fetch-pack.c:1408
+#: fetch-pack.c:1421
 #, c-format
 msgid "error processing acks: %d"
 msgstr "erreur lors du traitement des acquittements : %d"
 
-#: fetch-pack.c:1418
-msgid "expected packfile to be sent after 'ready'"
-msgstr "fichier paquet attendu à envoyer après 'ready'"
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#.
+#: fetch-pack.c:1435
+#, c-format
+msgid "expected packfile to be sent after '%s'"
+msgstr "fichier paquet attendu à envoyer après '%s'"
 
-#: fetch-pack.c:1420
-msgid "expected no other sections to be sent after no 'ready'"
-msgstr "aucune autre section attendue à envoyer après absence de 'ready'"
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#.
+#: fetch-pack.c:1441
+#, c-format
+msgid "expected no other sections to be sent after no '%s'"
+msgstr "aucune autre section attendue à envoyer après absence de '%s'"
 
-#: fetch-pack.c:1461
+#: fetch-pack.c:1482
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "erreur lors du traitement de l'information de superficialité : %d"
 
-#: fetch-pack.c:1510
+#: fetch-pack.c:1531
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "wanted-ref attendu, '%s' trouvé"
 
-#: fetch-pack.c:1515
+#: fetch-pack.c:1536
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "wanted-ref inattendu : '%s'"
 
-#: fetch-pack.c:1520
+#: fetch-pack.c:1541
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "erreur lors du traitement des références voulues : %d"
 
-#: fetch-pack.c:1550
+#: fetch-pack.c:1571
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack : paquet de fin de réponse attendu"
 
-#: fetch-pack.c:1959
+#: fetch-pack.c:1983
 msgid "no matching remote head"
 msgstr "pas de HEAD distante correspondante"
 
-#: fetch-pack.c:1982 builtin/clone.c:581
+#: fetch-pack.c:2006 builtin/clone.c:587
 msgid "remote did not send all necessary objects"
 msgstr "le serveur distant n'a pas envoyé tous les objets nécessaires"
 
-#: fetch-pack.c:2085
+#: fetch-pack.c:2109
 msgid "unexpected 'ready' from remote"
 msgstr "'ready' inattendu depuis le distant"
 
-#: fetch-pack.c:2108
+#: fetch-pack.c:2132
 #, c-format
 msgid "no such remote ref %s"
 msgstr "référence distante inconnue %s"
 
-#: fetch-pack.c:2111
+#: fetch-pack.c:2135
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "Le serveur n'autorise pas de requête pour l'objet %s non annoncé"
 
-#: gpg-interface.c:329 gpg-interface.c:457 gpg-interface.c:974
-#: gpg-interface.c:990
+#: fsmonitor-ipc.c:119
+#, c-format
+msgid "fsmonitor_ipc__send_query: invalid path '%s'"
+msgstr "fsmonitor_ipc__send_query : chemin invalide '%s'"
+
+#: fsmonitor-ipc.c:125
+#, c-format
+msgid "fsmonitor_ipc__send_query: unspecified error on '%s'"
+msgstr "fsmonitor_ipc__send_query : erreur non spécifiée sur '%s'"
+
+#: fsmonitor-ipc.c:155
+msgid "fsmonitor--daemon is not running"
+msgstr "fsmonitor--daemon n'est pas en cours d'exécution"
+
+#: fsmonitor-ipc.c:164
+#, c-format
+msgid "could not send '%s' command to fsmonitor--daemon"
+msgstr "impossible de lancer la commmand '%s' à fsmonitor--daemon"
+
+#: gpg-interface.c:329 gpg-interface.c:456 gpg-interface.c:995
+#: gpg-interface.c:1011
 msgid "could not create temporary file"
 msgstr "impossible de créer un fichier temporaire"
 
-#: gpg-interface.c:332 gpg-interface.c:460
+#: gpg-interface.c:332 gpg-interface.c:459
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr "impossible d'écrire la signature détachée dans '%s'"
 
-#: gpg-interface.c:451
+#: gpg-interface.c:450
 msgid ""
 "gpg.ssh.allowedSignersFile needs to be configured and exist for ssh "
 "signature verification"
@@ -4468,7 +4596,7 @@ msgstr ""
 "gpg.ssh.allowedSignersFile doit exister et être configuré pour la "
 "vérification de signature ssh"
 
-#: gpg-interface.c:480
+#: gpg-interface.c:479
 msgid ""
 "ssh-keygen -Y find-principals/verify is needed for ssh signature "
 "verification (available in openssh version 8.2p1+)"
@@ -4476,56 +4604,56 @@ msgstr ""
 "ssh-keygen -Y -find-principals/verify est nécessaire pour la vérification de "
 "signature ssh (disponible depuis openssh version 8.2p1+)"
 
-#: gpg-interface.c:536
+#: gpg-interface.c:550
 #, c-format
 msgid "ssh signing revocation file configured but not found: %s"
 msgstr "fichier de révocation de signature ssh configuré mais non trouvé : %s"
 
-#: gpg-interface.c:624
+#: gpg-interface.c:638
 #, c-format
 msgid "bad/incompatible signature '%s'"
 msgstr "signature incompatible ou mauvaise '%s'"
 
-#: gpg-interface.c:801 gpg-interface.c:806
+#: gpg-interface.c:815 gpg-interface.c:820
 #, c-format
 msgid "failed to get the ssh fingerprint for key '%s'"
 msgstr "échec d'obtention de l'empreinte ssh pour la clé '%s'"
 
-#: gpg-interface.c:829
+#: gpg-interface.c:843
 msgid ""
 "either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured"
 msgstr "soit user.signingkey ou gpg.ssh.defaultKeyCommand doit être configuré"
 
-#: gpg-interface.c:851
+#: gpg-interface.c:865
 #, c-format
 msgid "gpg.ssh.defaultKeyCommand succeeded but returned no keys: %s %s"
 msgstr ""
 "gpg.ssh.defaultKeyCommand a réussi mais n'a retourné aucune clé : %s %s"
 
-#: gpg-interface.c:857
+#: gpg-interface.c:871
 #, c-format
 msgid "gpg.ssh.defaultKeyCommand failed: %s %s"
 msgstr "gpg.ssh.defaultKeyCommand a échoué : %s %s"
 
-#: gpg-interface.c:945
+#: gpg-interface.c:966
 msgid "gpg failed to sign the data"
 msgstr "gpg n'a pas pu signer les données"
 
-#: gpg-interface.c:967
+#: gpg-interface.c:988
 msgid "user.signingkey needs to be set for ssh signing"
 msgstr "user.signingkey doit être configuré pour pour signer avec ssh"
 
-#: gpg-interface.c:978
+#: gpg-interface.c:999
 #, c-format
 msgid "failed writing ssh signing key to '%s'"
 msgstr "impossible d'écrire la clé de signature ssh dans '%s'"
 
-#: gpg-interface.c:996
+#: gpg-interface.c:1017
 #, c-format
 msgid "failed writing ssh signing key buffer to '%s'"
 msgstr "impossible d'écrire le tampon de la clé de signature ssh dans '%s'"
 
-#: gpg-interface.c:1014
+#: gpg-interface.c:1035
 msgid ""
 "ssh-keygen -Y sign is needed for ssh signing (available in openssh version "
 "8.2p1+)"
@@ -4533,7 +4661,7 @@ msgstr ""
 "ssh-keygen -Y signe est nécessaire pour pouvoir signer avec ssh (disponible "
 "dans openssh version 8.2p1+)"
 
-#: gpg-interface.c:1026
+#: gpg-interface.c:1047
 #, c-format
 msgid "failed reading ssh signing data buffer from '%s'"
 msgstr "impossible de lire le tampon de données de signature ssh depuis '%s'"
@@ -4543,7 +4671,7 @@ msgstr "impossible de lire le tampon de données de signature ssh depuis '%s'"
 msgid "ignored invalid color '%.*s' in log.graphColors"
 msgstr "couleur invalide '%.*s' ignorée dans log.graphColors"
 
-#: grep.c:531
+#: grep.c:446
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
@@ -4551,112 +4679,112 @@ msgstr ""
 "le motif fourni contient des octets NUL (via -f <fichier>). Ce n'est "
 "supporté qu'avec -P avec PCRE v2"
 
-#: grep.c:1942
+#: grep.c:1859
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "'%s' : lecture de %s impossible"
 
-#: grep.c:1959 setup.c:177 builtin/clone.c:302 builtin/diff.c:90
+#: grep.c:1876 setup.c:178 builtin/clone.c:308 builtin/diff.c:90
 #: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "échec du stat de '%s'"
 
-#: grep.c:1970
+#: grep.c:1887
 #, c-format
 msgid "'%s': short read"
 msgstr "'%s' : lecture tronquée"
 
-#: help.c:24
+#: help.c:25
 msgid "start a working area (see also: git help tutorial)"
 msgstr "démarrer une zone de travail (voir aussi : git help tutorial)"
 
-#: help.c:25
+#: help.c:26
 msgid "work on the current change (see also: git help everyday)"
 msgstr ""
 "travailler sur la modification actuelle (voir aussi : git help revisions)"
 
-#: help.c:26
+#: help.c:27
 msgid "examine the history and state (see also: git help revisions)"
 msgstr "examiner l'historique et l'état (voir aussi : git help revisions)"
 
-#: help.c:27
+#: help.c:28
 msgid "grow, mark and tweak your common history"
 msgstr "agrandir, marquer et modifier votre historique"
 
-#: help.c:28
+#: help.c:29
 msgid "collaborate (see also: git help workflows)"
 msgstr "collaborer (voir aussi : git help workflows)"
 
-#: help.c:32
+#: help.c:33
 msgid "Main Porcelain Commands"
 msgstr "Commandes Porcelaine Principales"
 
-#: help.c:33
+#: help.c:34
 msgid "Ancillary Commands / Manipulators"
 msgstr "Commandes Auxiliaires / Manipulateurs"
 
-#: help.c:34
+#: help.c:35
 msgid "Ancillary Commands / Interrogators"
 msgstr "Commandes Auxiliaires / Interrogateurs"
 
-#: help.c:35
+#: help.c:36
 msgid "Interacting with Others"
 msgstr "Interaction avec d'autres développeurs"
 
-#: help.c:36
+#: help.c:37
 msgid "Low-level Commands / Manipulators"
 msgstr "Commandes bas-niveau / Manipulateurs"
 
-#: help.c:37
+#: help.c:38
 msgid "Low-level Commands / Interrogators"
 msgstr "Commandes bas niveau / Interrogateurs"
 
-#: help.c:38
+#: help.c:39
 msgid "Low-level Commands / Syncing Repositories"
 msgstr "Commandes bas niveau / Synchronisation de dépôts"
 
-#: help.c:39
+#: help.c:40
 msgid "Low-level Commands / Internal Helpers"
 msgstr "Commandes bas niveau / Assistants internes"
 
-#: help.c:313
+#: help.c:316
 #, c-format
 msgid "available git commands in '%s'"
 msgstr "commandes git disponibles dans '%s'"
 
-#: help.c:320
+#: help.c:323
 msgid "git commands available from elsewhere on your $PATH"
 msgstr "commandes git disponibles depuis un autre endroit de votre $PATH"
 
-#: help.c:329
+#: help.c:332
 msgid "These are common Git commands used in various situations:"
 msgstr "Ci-dessous les commandes Git habituelles dans diverses situations :"
 
-#: help.c:378 git.c:100
+#: help.c:382 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "type de liste de commandes non supporté '%s'"
 
-#: help.c:418
+#: help.c:422
 msgid "The Git concept guides are:"
 msgstr "Les guides des concepts de Git sont :"
 
-#: help.c:442
-msgid "See 'git help <command>' to read about a specific subcommand"
-msgstr ""
-"Référez-vous à 'git help <commande>' pour des informations sur une sous-"
-"commande spécifique"
-
-#: help.c:447
+#: help.c:446
 msgid "External commands"
 msgstr "Commandes externes"
 
-#: help.c:462
+#: help.c:468
 msgid "Command aliases"
 msgstr "Alias de commande"
 
-#: help.c:543
+#: help.c:486
+msgid "See 'git help <command>' to read about a specific subcommand"
+msgstr ""
+"Référez-vous à 'git help <commande>' pour des informations sur une sous-"
+"commande spécifique"
+
+#: help.c:563
 #, c-format
 msgid ""
 "'%s' appears to be a git command, but we were not\n"
@@ -4665,38 +4793,38 @@ msgstr ""
 "'%s' semble être une commande git, mais elle n'a pas pu\n"
 "être exécutée. Peut-être git-%s est-elle cassée ?"
 
-#: help.c:565 help.c:662
+#: help.c:585 help.c:682
 #, c-format
 msgid "git: '%s' is not a git command. See 'git --help'."
 msgstr "git : '%s' n'est pas une commande git. Voir 'git --help'."
 
-#: help.c:613
+#: help.c:633
 msgid "Uh oh. Your system reports no Git commands at all."
 msgstr "Ahem. Votre système n'indique aucune commande Git."
 
-#: help.c:635
+#: help.c:655
 #, c-format
 msgid "WARNING: You called a Git command named '%s', which does not exist."
 msgstr ""
 "ATTENTION : vous avez invoqué une commande Git nommée '%s' qui n'existe pas."
 
-#: help.c:640
+#: help.c:660
 #, c-format
 msgid "Continuing under the assumption that you meant '%s'."
 msgstr "Continuons en supposant que vous avez voulu dire '%s'."
 
-#: help.c:646
+#: help.c:666
 #, c-format
 msgid "Run '%s' instead [y/N]? "
 msgstr "Lancer '%s' à la place [y/N] ? "
 
-#: help.c:654
+#: help.c:674
 #, c-format
 msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
 msgstr ""
 "Continuons dans %0.1f secondes en supposant que vous avez voulu dire '%s'."
 
-#: help.c:666
+#: help.c:686
 msgid ""
 "\n"
 "The most similar command is"
@@ -4710,16 +4838,16 @@ msgstr[1] ""
 "\n"
 "Les commandes les plus ressemblantes sont"
 
-#: help.c:706
+#: help.c:729
 msgid "git version [<options>]"
 msgstr "git version [<options>]"
 
-#: help.c:761
+#: help.c:784
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s: %s - %s"
 
-#: help.c:765
+#: help.c:788
 msgid ""
 "\n"
 "Did you mean this?"
@@ -4733,7 +4861,7 @@ msgstr[1] ""
 "\n"
 "Vouliez-vous dire un de ceux-là ?"
 
-#: hook.c:27
+#: hook.c:28
 #, c-format
 msgid ""
 "The '%s' hook was ignored because it's not set as executable.\n"
@@ -4743,15 +4871,20 @@ msgstr ""
 "Vous pouvez désactiver cet avertissement avec `git config advice.ignoredHook "
 "false`."
 
-#: ident.c:353
+#: hook.c:87
+#, c-format
+msgid "Couldn't start hook '%s'\n"
+msgstr "impossible de démarrer le crochet '%s'\n"
+
+#: ident.c:354
 msgid "Author identity unknown\n"
 msgstr "Identité d'auteur inconnue\n"
 
-#: ident.c:356
+#: ident.c:357
 msgid "Committer identity unknown\n"
 msgstr "Indentité de validateur inconnue\n"
 
-#: ident.c:362
+#: ident.c:363
 msgid ""
 "\n"
 "*** Please tell me who you are.\n"
@@ -4777,72 +4910,72 @@ msgstr ""
 "Éliminez --global pour ne faire les réglages que dans ce dépôt.\n"
 "\n"
 
-#: ident.c:397
+#: ident.c:398
 msgid "no email was given and auto-detection is disabled"
 msgstr "aucun courriel fourni et l'auto-détection est désactivée"
 
-#: ident.c:402
+#: ident.c:403
 #, c-format
 msgid "unable to auto-detect email address (got '%s')"
 msgstr "impossible de détecter automatiquement l'adresse ('%s' trouvé)"
 
-#: ident.c:419
+#: ident.c:420
 msgid "no name was given and auto-detection is disabled"
 msgstr "aucun nom fourni et l'auto-détection est désactivée"
 
-#: ident.c:425
+#: ident.c:426
 #, c-format
 msgid "unable to auto-detect name (got '%s')"
 msgstr "impossible de détecter automatiquement le nom ('%s' trouvé)"
 
-#: ident.c:433
+#: ident.c:434
 #, c-format
 msgid "empty ident name (for <%s>) not allowed"
 msgstr "nom d'identifiant vide (pour <%s>) non permis"
 
-#: ident.c:439
+#: ident.c:440
 #, c-format
 msgid "name consists only of disallowed characters: %s"
 msgstr "le nom n'est constitué que de caractères interdits : %s"
 
-#: ident.c:454 builtin/commit.c:648
+#: ident.c:455 builtin/commit.c:649
 #, c-format
 msgid "invalid date format: %s"
 msgstr "format de date invalide : %s"
 
-#: list-objects-filter-options.c:83
+#: list-objects-filter-options.c:68
 msgid "expected 'tree:<depth>'"
 msgstr "attendu : 'tree:<profondeur>'"
 
-#: list-objects-filter-options.c:98
+#: list-objects-filter-options.c:83
 msgid "sparse:path filters support has been dropped"
 msgstr "sparse : le support des filtres de chemin a été abandonné"
 
-#: list-objects-filter-options.c:105
+#: list-objects-filter-options.c:90
 #, c-format
 msgid "'%s' for 'object:type=<type>' is not a valid object type"
 msgstr "'%s' pour 'object:type=<type>' n'est pas un type d'objet valide"
 
-#: list-objects-filter-options.c:124
+#: list-objects-filter-options.c:109
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "spécificateur de filtre invalide '%s'"
 
-#: list-objects-filter-options.c:140
+#: list-objects-filter-options.c:125
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
 msgstr ""
 "le caractère doit être échappé dans le spécificateur de sous-filtre : '%c'"
 
-#: list-objects-filter-options.c:182
+#: list-objects-filter-options.c:167
 msgid "expected something after combine:"
 msgstr "quelque chose attendu après combine :"
 
-#: list-objects-filter-options.c:264
+#: list-objects-filter-options.c:249
 msgid "multiple filter-specs cannot be combined"
 msgstr "impossible de combiner des spécificateurs multiples de filtre"
 
-#: list-objects-filter-options.c:376
+#: list-objects-filter-options.c:365
 msgid "unable to upgrade repository format to support partial clone"
 msgstr ""
 "impossible de mettre à jour le format de dépôt pour supporter les clones "
@@ -4858,19 +4991,19 @@ msgstr "impossible d'accéder au blob clairsemé dans '%s'"
 msgid "unable to parse sparse filter data in %s"
 msgstr "impossible d'analyser la donnée de filtre clairsemé dans %s"
 
-#: list-objects.c:127
+#: list-objects.c:144
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
 msgstr ""
 "l'entrée '%s' dans l'arbre %s a un mode d'arbre, mais n'est pas un arbre"
 
-#: list-objects.c:140
+#: list-objects.c:157
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr ""
 "l'entrée '%s' dans l'arbre %s a un mode de blob, mais n'est pas un blob"
 
-#: list-objects.c:398
+#: list-objects.c:415
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "impossible de charger l'arbre racine pour le commit %s"
@@ -4899,17 +5032,12 @@ msgstr ""
 msgid "Unable to create '%s.lock': %s"
 msgstr "Impossible de créer '%s.lock' : %s"
 
-#: ls-refs.c:37
-#, c-format
-msgid "invalid value '%s' for lsrefs.unborn"
-msgstr "valeur invalide '%s' pour lsrefs.unborn"
-
-#: ls-refs.c:174
+#: ls-refs.c:175
 #, c-format
 msgid "unexpected line: '%s'"
 msgstr "ligne inattendue : '%s'"
 
-#: ls-refs.c:178
+#: ls-refs.c:179
 msgid "expected flush after ls-refs arguments"
 msgstr "vidage attendu après les arguments ls-refs"
 
@@ -4917,39 +5045,39 @@ msgstr "vidage attendu après les arguments ls-refs"
 msgid "quoted CRLF detected"
 msgstr "CRLF citées détectées"
 
-#: mailinfo.c:1254 builtin/am.c:184 builtin/mailinfo.c:46
+#: mailinfo.c:1254 builtin/am.c:185 builtin/mailinfo.c:46
 #, c-format
 msgid "bad action '%s' for '%s'"
 msgstr "action invalide '%s' pour '%s'"
 
-#: merge-ort.c:1584 merge-recursive.c:1211
+#: merge-ort.c:1630 merge-recursive.c:1214
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "Échec de la fusion du sous-module %s (non extrait)"
 
-#: merge-ort.c:1593 merge-recursive.c:1218
+#: merge-ort.c:1639 merge-recursive.c:1221
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "Échec de fusion du sous-module %s (commits non présents)"
 
-#: merge-ort.c:1602 merge-recursive.c:1225
+#: merge-ort.c:1648 merge-recursive.c:1228
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr ""
 "Échec de la fusion du sous-module %s (les commits ne descendent pas de la "
 "base de fusion)"
 
-#: merge-ort.c:1612 merge-ort.c:1620
+#: merge-ort.c:1658 merge-ort.c:1666
 #, c-format
 msgid "Note: Fast-forwarding submodule %s to %s"
 msgstr "Note : Avance rapide du sous-module %s à %s"
 
-#: merge-ort.c:1642
+#: merge-ort.c:1688
 #, c-format
 msgid "Failed to merge submodule %s"
 msgstr "Échec de la fusion du sous-module %s"
 
-#: merge-ort.c:1649
+#: merge-ort.c:1695
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but a possible merge resolution exists:\n"
@@ -4959,7 +5087,7 @@ msgstr ""
 "existe :\n"
 "%s\n"
 
-#: merge-ort.c:1653 merge-recursive.c:1281
+#: merge-ort.c:1699 merge-recursive.c:1284
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -4976,7 +5104,7 @@ msgstr ""
 "\n"
 "qui acceptera cette suggestion.\n"
 
-#: merge-ort.c:1666
+#: merge-ort.c:1712
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but multiple possible merges exist:\n"
@@ -4986,21 +5114,21 @@ msgstr ""
 "existent :\n"
 "%s"
 
-#: merge-ort.c:1887 merge-recursive.c:1372
+#: merge-ort.c:1937 merge-recursive.c:1375
 msgid "Failed to execute internal merge"
 msgstr "Échec à l'exécution de la fusion interne"
 
-#: merge-ort.c:1892 merge-recursive.c:1377
+#: merge-ort.c:1942 merge-recursive.c:1380
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "Impossible d'ajouter %s à la base de données"
 
-#: merge-ort.c:1899 merge-recursive.c:1410
+#: merge-ort.c:1949 merge-recursive.c:1413
 #, c-format
 msgid "Auto-merging %s"
 msgstr "Fusion automatique de %s"
 
-#: merge-ort.c:2038 merge-recursive.c:2132
+#: merge-ort.c:2088 merge-recursive.c:2135
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -5009,7 +5137,7 @@ msgstr ""
 "CONFLIT (renommage implicite de répertoire) : le répertoire/fichier %s gêne "
 "des renommages implicites de répertoire déplaçant les chemins suivants : %s."
 
-#: merge-ort.c:2048 merge-recursive.c:2142
+#: merge-ort.c:2098 merge-recursive.c:2145
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -5018,7 +5146,7 @@ msgstr ""
 "CONFLIT (renommage implicite de répertoire) : impossible de transformer "
 "plusieurs chemins sur %s ; les chemins concernés sont : %s"
 
-#: merge-ort.c:2106
+#: merge-ort.c:2156
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to rename %s to; it was "
@@ -5029,7 +5157,7 @@ msgstr ""
 "parce que le répertoire a été renommé en plusieurs autres répertoires, sans "
 "aucune destination récupérant la majorité des fichiers."
 
-#: merge-ort.c:2260 merge-recursive.c:2478
+#: merge-ort.c:2310 merge-recursive.c:2481
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
@@ -5038,7 +5166,7 @@ msgstr ""
 "AVERTISSEMENT : ne renomme pas %s->%s dans %s, parce que %s lui-même a été "
 "renommé."
 
-#: merge-ort.c:2400 merge-recursive.c:3261
+#: merge-ort.c:2450 merge-recursive.c:3264
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
@@ -5047,7 +5175,7 @@ msgstr ""
 "Chemin mis à jour : %s ajouté dans %s dans un répertoire qui a été renommé "
 "en %s ; déplacé dans %s."
 
-#: merge-ort.c:2407 merge-recursive.c:3268
+#: merge-ort.c:2457 merge-recursive.c:3271
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
@@ -5056,7 +5184,7 @@ msgstr ""
 "Chemin mis à jour : %s renommé en %s dans %s, dans un répertoire qui a été "
 "renommé en %s ; déplacé dans %s."
 
-#: merge-ort.c:2420 merge-recursive.c:3264
+#: merge-ort.c:2470 merge-recursive.c:3267
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed "
@@ -5066,7 +5194,7 @@ msgstr ""
 "a été renommé dans %s, ce qui suggère qu'il devrait peut-être être déplacé "
 "vers %s."
 
-#: merge-ort.c:2428 merge-recursive.c:3271
+#: merge-ort.c:2478 merge-recursive.c:3274
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
@@ -5076,13 +5204,13 @@ msgstr ""
 "répertoire qui a été renommé dans %s, ce qui suggère qu'il devrait peut-être "
 "être déplacé vers %s."
 
-#: merge-ort.c:2584
+#: merge-ort.c:2634
 #, c-format
 msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
 msgstr ""
 "CONFLIT (renommage/renommage) : %s renommé en %s dans %s et en %s dans %s."
 
-#: merge-ort.c:2679
+#: merge-ort.c:2729
 #, c-format
 msgid ""
 "CONFLICT (rename involved in collision): rename of %s -> %s has content "
@@ -5093,24 +5221,24 @@ msgstr ""
 "des conflits de contenu ET entre en collision avec un autre chemin ; ceci "
 "peut resulter en des marqueurs de conflit imbriqués."
 
-#: merge-ort.c:2698 merge-ort.c:2722
+#: merge-ort.c:2748 merge-ort.c:2772
 #, c-format
 msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
 msgstr ""
 "CONFLIT (renommage/suppression) : Renommage de %s en %s dans %s mais "
 "supprimé dans %s."
 
-#: merge-ort.c:3212 merge-recursive.c:3022
+#: merge-ort.c:3261 merge-recursive.c:3025
 #, c-format
 msgid "cannot read object %s"
 msgstr "impossible de lire l'objet %s"
 
-#: merge-ort.c:3215 merge-recursive.c:3025
+#: merge-ort.c:3264 merge-recursive.c:3028
 #, c-format
 msgid "object %s is not a blob"
 msgstr "l'objet %s n'est pas un blob"
 
-#: merge-ort.c:3644
+#: merge-ort.c:3693
 #, c-format
 msgid ""
 "CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
@@ -5119,7 +5247,7 @@ msgstr ""
 "CONFLIT (fichier/répertoire) : répertoire au milieu de %s depuis %s ; "
 "déplacement dans %s à la place."
 
-#: merge-ort.c:3721
+#: merge-ort.c:3770
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed both "
@@ -5128,7 +5256,7 @@ msgstr ""
 "CONFLIT (types différents) : %s a des types différents des deux côtés ; "
 "renommé chacune de manière à pouvoir enregistrer les deux quelque part."
 
-#: merge-ort.c:3728
+#: merge-ort.c:3777
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed one "
@@ -5138,24 +5266,24 @@ msgstr ""
 "renommé une d'entre elles de manière à pouvoir enregistrer les deux quelque "
 "part."
 
-#: merge-ort.c:3819 merge-recursive.c:3101
+#: merge-ort.c:3866 merge-recursive.c:3104
 msgid "content"
 msgstr "contenu"
 
-#: merge-ort.c:3821 merge-recursive.c:3105
+#: merge-ort.c:3868 merge-recursive.c:3108
 msgid "add/add"
 msgstr "ajout/ajout"
 
-#: merge-ort.c:3823 merge-recursive.c:3150
+#: merge-ort.c:3870 merge-recursive.c:3153
 msgid "submodule"
 msgstr "sous-module"
 
-#: merge-ort.c:3825 merge-recursive.c:3151
+#: merge-ort.c:3872 merge-recursive.c:3154
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "CONFLIT (%s) : Conflit de fusion dans %s"
 
-#: merge-ort.c:3869
+#: merge-ort.c:3916
 #, c-format
 msgid ""
 "CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
@@ -5164,7 +5292,7 @@ msgstr ""
 "CONFLIT (modification/suppression) : %s supprimé dans %s et modifié dans %s. "
 "Version %s de %s laissée dans l'arbre."
 
-#: merge-ort.c:4165
+#: merge-ort.c:4212
 #, c-format
 msgid ""
 "Note: %s not up to date and in way of checking out conflicted version; old "
@@ -5176,12 +5304,12 @@ msgstr ""
 #. TRANSLATORS: The %s arguments are: 1) tree hash of a merge
 #. base, and 2-3) the trees for the two trees we're merging.
 #.
-#: merge-ort.c:4534
+#: merge-ort.c:4586
 #, c-format
 msgid "collecting merge info failed for trees %s, %s, %s"
 msgstr "échec de collecte l'information de fusion pour les arbres %s, %s, %s"
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3716
+#: merge-ort-wrappers.c:13 merge-recursive.c:3723
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -5191,7 +5319,7 @@ msgstr ""
 "fusion :\n"
 "  %s"
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3482 builtin/merge.c:405
+#: merge-ort-wrappers.c:33 merge-recursive.c:3485 builtin/merge.c:405
 msgid "Already up to date."
 msgstr "Déjà à jour."
 
@@ -5228,7 +5356,7 @@ msgstr ": peut-être un conflit D/F ?"
 msgid "refusing to lose untracked file at '%s'"
 msgstr "refus de perdre le fichier non suivi '%s'"
 
-#: merge-recursive.c:956 builtin/cat-file.c:41
+#: merge-recursive.c:956 builtin/cat-file.c:47
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "impossible de lire l'objet %s '%s'"
@@ -5253,44 +5381,44 @@ msgstr "échec à la création du lien symbolique '%s' : %s"
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "ne sait pas traiter %06o %s '%s'"
 
-#: merge-recursive.c:1233 merge-recursive.c:1246
+#: merge-recursive.c:1236 merge-recursive.c:1249
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "Avance rapide du sous-module %s au commit suivant :"
 
-#: merge-recursive.c:1236 merge-recursive.c:1249
+#: merge-recursive.c:1239 merge-recursive.c:1252
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "Avance rapide du sous-module %s"
 
-#: merge-recursive.c:1273
+#: merge-recursive.c:1276
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 "Échec de fusion du sous-module %s (fusion suivant les commits non trouvée)"
 
-#: merge-recursive.c:1277
+#: merge-recursive.c:1280
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "Échec de fusion du sous-module %s (pas en avance rapide)"
 
-#: merge-recursive.c:1278
+#: merge-recursive.c:1281
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "Résolution possible de fusion trouvée pour le sous-module :\n"
 
-#: merge-recursive.c:1290
+#: merge-recursive.c:1293
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr "Échec de fusion du sous-module %s (plusieurs fusions trouvées)"
 
-#: merge-recursive.c:1434
+#: merge-recursive.c:1437
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr ""
 "Erreur : refus de perdre le fichier non suivi %s ; écriture dans %s à la "
 "place."
 
-#: merge-recursive.c:1506
+#: merge-recursive.c:1509
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5299,7 +5427,7 @@ msgstr ""
 "CONFLIT (%s/suppression) : %s supprimé dans %s et %s dans %s. Version %s de "
 "%s laissée dans l'arbre."
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1514
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5308,7 +5436,7 @@ msgstr ""
 "CONFLIT (%s/suppression) : %s supprimé dans %s et %s à %s dans %s. Version "
 "%s de %s laissée dans l'arbre."
 
-#: merge-recursive.c:1518
+#: merge-recursive.c:1521
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5317,7 +5445,7 @@ msgstr ""
 "CONFLIT (%s/suppression) : %s supprimé dans %s et %s dans %s. Version %s de "
 "%s laissée dans l'arbre dans le fichier %s."
 
-#: merge-recursive.c:1523
+#: merge-recursive.c:1526
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5326,61 +5454,61 @@ msgstr ""
 "CONFLIT (%s/suppression) : %s supprimé dans %s et %s à %s dans %s. Version "
 "%s de %s laissée dans l'arbre dans le fichier %s."
 
-#: merge-recursive.c:1558
+#: merge-recursive.c:1561
 msgid "rename"
 msgstr "renommage"
 
-#: merge-recursive.c:1558
+#: merge-recursive.c:1561
 msgid "renamed"
 msgstr "renommé"
 
-#: merge-recursive.c:1609 merge-recursive.c:2515 merge-recursive.c:3178
+#: merge-recursive.c:1612 merge-recursive.c:2518 merge-recursive.c:3181
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "Refus de perdre le fichier modifié %s"
 
-#: merge-recursive.c:1619
+#: merge-recursive.c:1622
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr "Refus de perdre le fichier non suivi %s, même s'il gêne."
 
-#: merge-recursive.c:1677
+#: merge-recursive.c:1680
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "CONFLIT (renommage/ajout) : Renommage de %s->%s dans %s. %s ajouté dans %s"
 
-#: merge-recursive.c:1708
+#: merge-recursive.c:1711
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s est un répertoire dans %s ajouté plutôt comme %s"
 
-#: merge-recursive.c:1713
+#: merge-recursive.c:1716
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr "Refus de perdre le fichier non suivi %s ; ajout comme %s à la place"
 
-#: merge-recursive.c:1740
+#: merge-recursive.c:1743
 #, c-format
 msgid ""
-"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
-"\"->\"%s\" in \"%s\"%s"
+"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename "
+"\"%s\"->\"%s\" in \"%s\"%s"
 msgstr ""
 "CONFLIT (renommage/renommage) : Renommage de \"%s\"->\"%s\" dans la branche "
 "\"%s\" et renommage \"%s\"->\"%s\" dans \"%s\"%s"
 
-#: merge-recursive.c:1745
+#: merge-recursive.c:1748
 msgid " (left unresolved)"
 msgstr " (laissé non résolu)"
 
-#: merge-recursive.c:1837
+#: merge-recursive.c:1840
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "CONFLIT (renommage/renommage) : renommage '%s'->'%s' dans %s. Renommage '%s'-"
 ">'%s' dans %s"
 
-#: merge-recursive.c:2100
+#: merge-recursive.c:2103
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -5391,7 +5519,7 @@ msgstr ""
 "parce que le répertoire %s a été renommé en plusieurs autres répertoires, "
 "sans aucune destination récupérant la majorité des fichiers."
 
-#: merge-recursive.c:2234
+#: merge-recursive.c:2237
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -5400,79 +5528,79 @@ msgstr ""
 "CONFLIT (renommage/renommage) : renommage du répertoire %s->%s dans %s. "
 "Renommage de répertoire %s->%s dans %s"
 
-#: merge-recursive.c:3089
+#: merge-recursive.c:3092
 msgid "modify"
 msgstr "modification"
 
-#: merge-recursive.c:3089
+#: merge-recursive.c:3092
 msgid "modified"
 msgstr "modifié"
 
-#: merge-recursive.c:3128
+#: merge-recursive.c:3131
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "%s sauté (fusion identique à l'existant)"
 
-#: merge-recursive.c:3181
+#: merge-recursive.c:3184
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Ajout plutôt comme %s"
 
-#: merge-recursive.c:3385
+#: merge-recursive.c:3388
 #, c-format
 msgid "Removing %s"
 msgstr "Suppression de %s"
 
-#: merge-recursive.c:3408
+#: merge-recursive.c:3411
 msgid "file/directory"
 msgstr "fichier/répertoire"
 
-#: merge-recursive.c:3413
+#: merge-recursive.c:3416
 msgid "directory/file"
 msgstr "répertoire/fichier"
 
-#: merge-recursive.c:3420
+#: merge-recursive.c:3423
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
 "CONFLIT (%s) : Il y a un répertoire nommé %s dans %s. Ajout de %s comme %s"
 
-#: merge-recursive.c:3429
+#: merge-recursive.c:3432
 #, c-format
 msgid "Adding %s"
 msgstr "Ajout de %s"
 
-#: merge-recursive.c:3438
+#: merge-recursive.c:3441
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "CONFLIT (ajout/ajout) : Conflit de fusion dans %s"
 
-#: merge-recursive.c:3491
+#: merge-recursive.c:3494
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "échec de fusion des arbres %s et %s"
 
-#: merge-recursive.c:3585
+#: merge-recursive.c:3588
 msgid "Merging:"
 msgstr "Fusion :"
 
-#: merge-recursive.c:3598
+#: merge-recursive.c:3601
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "%u ancêtre commun trouvé :"
 msgstr[1] "%u ancêtres communs trouvés :"
 
-#: merge-recursive.c:3648
+#: merge-recursive.c:3651
 msgid "merge returned no commit"
 msgstr "la fusion n'a pas retourné de commit"
 
-#: merge-recursive.c:3816
+#: merge-recursive.c:3823
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "Impossible d'analyser l'objet '%s'"
 
-#: merge-recursive.c:3834 builtin/merge.c:720 builtin/merge.c:906
+#: merge-recursive.c:3841 builtin/merge.c:720 builtin/merge.c:912
 #: builtin/stash.c:489
 msgid "Unable to write index."
 msgstr "Impossible d'écrire l'index."
@@ -5481,174 +5609,178 @@ msgstr "Impossible d'écrire l'index."
 msgid "failed to read the cache"
 msgstr "impossible de lire le cache"
 
-#: merge.c:102 rerere.c:704 builtin/am.c:1988 builtin/am.c:2022
-#: builtin/checkout.c:598 builtin/checkout.c:853 builtin/clone.c:706
+#: merge.c:102 rerere.c:705 builtin/am.c:1989 builtin/am.c:2023
+#: builtin/checkout.c:603 builtin/checkout.c:865 builtin/clone.c:714
 #: builtin/stash.c:269
 msgid "unable to write new index file"
 msgstr "impossible d'écrire le nouveau fichier d'index"
 
-#: midx.c:78
+#: midx.c:79
 msgid "multi-pack-index OID fanout is of the wrong size"
 msgstr "l'étalement de l'OID d'index multi-paquet n'a pas la bonne taille"
 
-#: midx.c:111
+#: midx.c:112
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "le fichier d'index multi-paquet %s est trop petit"
 
-#: midx.c:127
+#: midx.c:128
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr ""
 "la signature de l'index multi-paquet 0x%08x ne correspond pas à la signature "
 "0x%08x"
 
-#: midx.c:132
+#: midx.c:133
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "la version d'index multi-paquet %d n'est pas reconnue"
 
-#: midx.c:137
+#: midx.c:138
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr ""
 "la version d'empreinte d'index multi-paquet %u ne correspond pas à la "
 "version %u"
 
-#: midx.c:154
+#: midx.c:155
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "index multi-paquet manque de tronçon de nom de paquet"
 
-#: midx.c:156
+#: midx.c:157
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "index multi-paquet manque de tronçon de d'étalement OID requis"
 
-#: midx.c:158
+#: midx.c:159
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "index multi-paquet manque de tronçon de recherche OID requis"
 
-#: midx.c:160
+#: midx.c:161
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "index multi-paquet manque de tronçon de décalage d'objet requis"
 
-#: midx.c:176
+#: midx.c:180
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr ""
 "index multi-paquet les noms de paquets sont en désordre : '%s' avant '%s'"
 
-#: midx.c:224
+#: midx.c:228
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "mauvais pack-int-id : %u (%u paquets au total)"
 
-#: midx.c:274
+#: midx.c:278
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr ""
 "l'index multi-paquet stock un décalage en 64-bit, mais off_t est trop petit"
 
-#: midx.c:505
+#: midx.c:509
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "échec de l'ajout du fichier paquet '%s'"
 
-#: midx.c:511
+#: midx.c:515
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "échec à l'ouverture du fichier paquet '%s'"
 
-#: midx.c:579
+#: midx.c:583
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "échec de localisation de l'objet %d dans le fichier paquet"
 
-#: midx.c:895
+#: midx.c:911
 msgid "cannot store reverse index file"
 msgstr "impossible de stocker le fichier d'index inversé"
 
-#: midx.c:993
+#: midx.c:1009
 #, c-format
 msgid "could not parse line: %s"
 msgstr "impossible d'analyser la ligne : %s"
 
-#: midx.c:995
+#: midx.c:1011
 #, c-format
 msgid "malformed line: %s"
 msgstr "ligne malformée : %s"
 
-#: midx.c:1162
+#: midx.c:1181
 msgid "ignoring existing multi-pack-index; checksum mismatch"
 msgstr ""
 "index multi-paquet existant ignoré ; non-concordance de la somme de contrôle"
 
-#: midx.c:1187
+#: midx.c:1206
 msgid "could not load pack"
 msgstr "impossible de charger le paquet"
 
-#: midx.c:1193
+#: midx.c:1212
 #, c-format
 msgid "could not open index for %s"
 msgstr "impossible d'ouvrir l'index pour %s"
 
-#: midx.c:1204
+#: midx.c:1223
 msgid "Adding packfiles to multi-pack-index"
 msgstr "Ajout de fichiers paquet à un index multi-paquet"
 
-#: midx.c:1247
+#: midx.c:1266
 #, c-format
 msgid "unknown preferred pack: '%s'"
 msgstr "paquet préféré inconnu : %s"
 
-#: midx.c:1292
+#: midx.c:1311
 #, c-format
 msgid "cannot select preferred pack %s with no objects"
 msgstr "impossible de sélectionner le paquet préféré %s avec aucun objet"
 
-#: midx.c:1324
+#: midx.c:1343
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "fichier paquet à éliminer %s non trouvé"
 
-#: midx.c:1370
+#: midx.c:1389
 #, c-format
 msgid "preferred pack '%s' is expired"
 msgstr "le paquet préféré '%s' est expiré"
 
-#: midx.c:1383
+#: midx.c:1402
 msgid "no pack files to index."
 msgstr "aucun fichier paquet à l'index."
 
-#: midx.c:1420
+#: midx.c:1409
+msgid "refusing to write multi-pack .bitmap without any objects"
+msgstr "refus d'écrire le .bitmap multi-paquet sans aucun objet"
+
+#: midx.c:1451
 msgid "could not write multi-pack bitmap"
 msgstr "impossible d'écrire le bitmap multi-paquet"
 
-#: midx.c:1430
+#: midx.c:1461
 msgid "could not write multi-pack-index"
 msgstr "échec de l'écriture de l'index de multi-paquet"
 
-#: midx.c:1489 builtin/clean.c:37
+#: midx.c:1520 builtin/clean.c:37
 #, c-format
 msgid "failed to remove %s"
 msgstr "échec de la suppression de %s"
 
-#: midx.c:1522
+#: midx.c:1553
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "échec du nettoyage de l'index de multi-paquet à %s"
 
-#: midx.c:1585
+#: midx.c:1616
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr "le fichier d'index multi-paquet existe mais n'a pu être analysé"
 
-#: midx.c:1593
+#: midx.c:1624
 msgid "incorrect checksum"
 msgstr "somme de contrôle incorrecte"
 
-#: midx.c:1596
+#: midx.c:1627
 msgid "Looking for referenced packfiles"
 msgstr "Recherche de fichiers paquets référencés"
 
-#: midx.c:1611
+#: midx.c:1642
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
@@ -5656,55 +5788,55 @@ msgstr ""
 "étalement oid en désordre : étalement[%d] = %<PRIx32> > %<PRIx32> = "
 "étalement[%d]"
 
-#: midx.c:1616
+#: midx.c:1647
 msgid "the midx contains no oid"
 msgstr "le midx ne contient aucun oid"
 
-#: midx.c:1625
+#: midx.c:1656
 msgid "Verifying OID order in multi-pack-index"
 msgstr "Vérification de l'ordre des OID dans l'index multi-paquet"
 
-#: midx.c:1634
+#: midx.c:1665
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "recherche d'oid en désordre : oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1654
+#: midx.c:1685
 msgid "Sorting objects by packfile"
 msgstr "Classement des objets par fichier paquet"
 
-#: midx.c:1661
+#: midx.c:1692
 msgid "Verifying object offsets"
 msgstr "Vérification des décalages des objets"
 
-#: midx.c:1677
+#: midx.c:1708
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "échec de la lecture de l'élément de cache pour oid[%d] = %s"
 
-#: midx.c:1683
+#: midx.c:1714
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "impossible de lire le fichier paquet %s"
 
-#: midx.c:1692
+#: midx.c:1723
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "décalage d'objet incorrect pour oid[%d] = %s : %<PRIx64> != %<PRIx64>"
 
-#: midx.c:1719
+#: midx.c:1750
 msgid "Counting referenced objects"
 msgstr "Comptage des objets référencés"
 
-#: midx.c:1729
+#: midx.c:1760
 msgid "Finding and deleting unreferenced packfiles"
 msgstr "Recherche et effacement des fichiers paquets non-référencés"
 
-#: midx.c:1921
+#: midx.c:1952
 msgid "could not start pack-objects"
 msgstr "impossible de démarrer le groupement d'objets"
 
-#: midx.c:1941
+#: midx.c:1972
 msgid "could not finish pack-objects"
 msgstr "impossible de finir le groupement d'objets"
 
@@ -5723,7 +5855,7 @@ msgstr "impossible de créer le fil lazy_name : %s"
 msgid "unable to join lazy_name thread: %s"
 msgstr "impossible de joindre le fil lazy_name : %s"
 
-#: notes-merge.c:277
+#: notes-merge.c:276
 #, c-format
 msgid ""
 "You have not concluded your previous notes merge (%s exists).\n"
@@ -5734,7 +5866,7 @@ msgstr ""
 "Veuillez utiliser 'git notes merge --commit' ou 'git notes merge --abort' "
 "pour valider/abandonner la fusion en cours avant d'en démarrer une nouvelle."
 
-#: notes-merge.c:284
+#: notes-merge.c:283
 #, c-format
 msgid "You have not concluded your notes merge (%s exists)."
 msgstr "Vous n'avez pas terminé votre fusion de notes (%s existe)."
@@ -5762,275 +5894,346 @@ msgstr "Refus de réécrire des notes dans %s (hors de refs/notes/)"
 msgid "Bad %s value: '%s'"
 msgstr "Mauvaise valeur de %s : '%s'"
 
-#: object-file.c:456
+#: object-file.c:457
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr ""
 "le répertoire objet %s n'existe pas ; vérifiez .git/objects/info/alternates"
 
-#: object-file.c:514
+#: object-file.c:515
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr "impossible de normaliser le chemin d'objet alternatif : %s"
 
-#: object-file.c:588
+#: object-file.c:589
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr "%s : magasins d'objets alternatifs ignorés, récursion trop profonde"
 
-#: object-file.c:595
+#: object-file.c:596
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr "impossible de normaliser le répertoire d'objet : %s"
 
-#: object-file.c:638
+#: object-file.c:639
 msgid "unable to fdopen alternates lockfile"
 msgstr "impossible d'ouvrir (fdopen) le fichier verrou des alternatives"
 
-#: object-file.c:656
+#: object-file.c:657
 msgid "unable to read alternates file"
 msgstr "lecture du fichier d'alternatives impossible"
 
-#: object-file.c:663
+#: object-file.c:664
 msgid "unable to move new alternates file into place"
 msgstr "impossible de déplacer le nouveau fichier d'alternative"
 
-#: object-file.c:741
+#: object-file.c:742
 #, c-format
 msgid "path '%s' does not exist"
 msgstr "le chemin '%s' n'existe pas"
 
-#: object-file.c:762
+#: object-file.c:763
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr ""
 "extraire le dépôt de référence '%s' comme une extraction liée n'est pas "
 "encore supporté."
 
-#: object-file.c:768
+#: object-file.c:769
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "le dépôt de référence '%s' n'est pas un dépôt local."
 
-#: object-file.c:774
+#: object-file.c:775
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr "le dépôt de référence '%s' est superficiel"
 
-#: object-file.c:782
+#: object-file.c:783
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr "le dépôt de référence '%s' est greffé"
 
-#: object-file.c:813
+#: object-file.c:814
 #, c-format
 msgid "could not find object directory matching %s"
 msgstr "impossible de trouver le répertoire objet correspondant à %s"
 
-#: object-file.c:863
+#: object-file.c:864
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr "ligne invalide pendant l'analyse des refs alternatives : %s"
 
-#: object-file.c:1013
+#: object-file.c:1014
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr "essai de mmap %<PRIuMAX> au delà de la limite %<PRIuMAX>"
 
-#: object-file.c:1048
+#: object-file.c:1049
 #, c-format
 msgid "mmap failed%s"
 msgstr "échec de mmap%s"
 
-#: object-file.c:1214
+#: object-file.c:1230
 #, c-format
 msgid "object file %s is empty"
 msgstr "le fichier objet %s est vide"
 
-#: object-file.c:1333 object-file.c:2542
+#: object-file.c:1349 object-file.c:2588
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr "objet libre corrompu '%s'"
 
-#: object-file.c:1335 object-file.c:2546
+#: object-file.c:1351 object-file.c:2592
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr "données incorrectes à la fin de l'objet libre '%s'"
 
-#: object-file.c:1457
+#: object-file.c:1473
 #, c-format
 msgid "unable to parse %s header"
 msgstr "impossible d'analyser l'entête %s"
 
-#: object-file.c:1459
+#: object-file.c:1475
 msgid "invalid object type"
 msgstr "type d'objet invalide"
 
-#: object-file.c:1470
+#: object-file.c:1486
 #, c-format
 msgid "unable to unpack %s header"
 msgstr "impossible de dépaqueter l'entête %s"
 
-#: object-file.c:1474
+#: object-file.c:1490
 #, c-format
 msgid "header for %s too long, exceeds %d bytes"
 msgstr "entête de %s trop long, attendu %d octets"
 
-#: object-file.c:1704
+#: object-file.c:1720
 #, c-format
 msgid "failed to read object %s"
 msgstr "impossible de lire l'objet %s"
 
-#: object-file.c:1708
+#: object-file.c:1724
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr "remplacement %s non trouvé pour %s"
 
-#: object-file.c:1712
+#: object-file.c:1728
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr "l'objet libre %s (stocké dans %s) est corrompu"
 
-#: object-file.c:1716
+#: object-file.c:1732
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr "l'objet empaqueté %s (stocké dans %s) est corrompu"
 
-#: object-file.c:1821
+#: object-file.c:1855
 #, c-format
 msgid "unable to write file %s"
 msgstr "impossible d'écrire le fichier %s"
 
-#: object-file.c:1828
+#: object-file.c:1862
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr "impossible de régler les droits de '%s'"
 
-#: object-file.c:1835
+#: object-file.c:1869
 msgid "file write error"
 msgstr "erreur d'écriture d'un fichier"
 
-#: object-file.c:1858
+#: object-file.c:1904
 msgid "error when closing loose object file"
 msgstr "erreur en fermeture du fichier d'objet esseulé"
 
-#: object-file.c:1925
+#: object-file.c:1971
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr ""
 "droits insuffisants pour ajouter un objet à la base de données %s du dépôt"
 
-#: object-file.c:1927
+#: object-file.c:1973
 msgid "unable to create temporary file"
 msgstr "impossible de créer un fichier temporaire"
 
-#: object-file.c:1951
+#: object-file.c:1997
 msgid "unable to write loose object file"
 msgstr "impossible d'écrire le fichier d'objet esseulé"
 
-#: object-file.c:1957
+#: object-file.c:2003
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr "impossible de compresser le nouvel objet %s (%d)"
 
-#: object-file.c:1961
+#: object-file.c:2007
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr "échec de deflateEnd sur l'objet %s (%d)"
 
-#: object-file.c:1965
+#: object-file.c:2011
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr "données de source d'objet instable pour %s"
 
-#: object-file.c:1976 builtin/pack-objects.c:1243
+#: object-file.c:2022 builtin/pack-objects.c:1251
 #, c-format
 msgid "failed utime() on %s"
 msgstr "échec de utime() sur %s"
 
-#: object-file.c:2054
+#: object-file.c:2100
 #, c-format
 msgid "cannot read object for %s"
 msgstr "impossible de lire l'objet pour %s"
 
-#: object-file.c:2105
+#: object-file.c:2151
 msgid "corrupt commit"
 msgstr "commit corrompu"
 
-#: object-file.c:2113
+#: object-file.c:2159
 msgid "corrupt tag"
 msgstr "étiquette corrompue"
 
-#: object-file.c:2213
+#: object-file.c:2259
 #, c-format
 msgid "read error while indexing %s"
 msgstr "erreur de lecture à l'indexation de %s"
 
-#: object-file.c:2216
+#: object-file.c:2262
 #, c-format
 msgid "short read while indexing %s"
 msgstr "lecture tronquée pendant l'indexation de %s"
 
-#: object-file.c:2289 object-file.c:2299
+#: object-file.c:2335 object-file.c:2345
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr "%s : échec de l'insertion dans la base de données"
 
-#: object-file.c:2305
+#: object-file.c:2351
 #, c-format
 msgid "%s: unsupported file type"
 msgstr "%s : type de fichier non supporté"
 
-#: object-file.c:2329 builtin/fetch.c:1453
+#: object-file.c:2375 builtin/fetch.c:1494
 #, c-format
 msgid "%s is not a valid object"
 msgstr "%s n'est pas un objet valide"
 
-#: object-file.c:2331
+#: object-file.c:2377
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "%s n'est pas un objet '%s' valide"
 
-#: object-file.c:2358
+#: object-file.c:2404
 #, c-format
 msgid "unable to open %s"
 msgstr "impossible d'ouvrir %s"
 
-#: object-file.c:2553
+#: object-file.c:2599
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr "incohérence de hachage pour %s (%s attendu)"
 
-#: object-file.c:2576
+#: object-file.c:2622
 #, c-format
 msgid "unable to mmap %s"
 msgstr "impossible de mmap %s"
 
-#: object-file.c:2582
+#: object-file.c:2628
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr "impossible de dépaqueter l'entête de %s"
 
-#: object-file.c:2587
+#: object-file.c:2633
 #, c-format
 msgid "unable to parse header of %s"
 msgstr "impossible d'analyser l'entête de %s"
 
-#: object-file.c:2598
+#: object-file.c:2644
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr "impossible de dépaqueter le contenu de %s"
 
-#: object-name.c:480
+#. TRANSLATORS: This is a line of ambiguous object
+#. output shown when we cannot look up or parse the
+#. object in question. E.g. "deadbeef [bad object]".
+#.
+#: object-name.c:382
+#, c-format
+msgid "%s [bad object]"
+msgstr "%s [mauvais objet]"
+
+#. TRANSLATORS: This is a line of ambiguous commit
+#. object output. E.g.:
+#. *
+#.    "deadbeef commit 2021-01-01 - Some Commit Message"
+#.
+#: object-name.c:407
+#, c-format
+msgid "%s commit %s - %s"
+msgstr "%s commit %s - %s"
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output. E.g.:
+#. *
+#.    "deadbeef tag 2022-01-01 - Some Tag Message"
+#. *
+#. The second argument is the YYYY-MM-DD found
+#. in the tag.
+#. *
+#. The third argument is the "tag" string
+#. from object.c.
+#.
+#: object-name.c:428
+#, c-format
+msgid "%s tag %s - %s"
+msgstr "%s étiquette %s - %s"
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output where we couldn't parse
+#. the tag itself. E.g.:
+#. *
+#.    "deadbeef [bad tag, could not parse it]"
+#.
+#: object-name.c:439
+#, c-format
+msgid "%s [bad tag, could not parse it]"
+msgstr "%s [mauvaise étiquette, impossible à analyser]"
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef tree".
+#.
+#: object-name.c:447
+#, c-format
+msgid "%s tree"
+msgstr "arbre %s"
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef blob".
+#.
+#: object-name.c:453
+#, c-format
+msgid "%s blob"
+msgstr "blob %s"
+
+#: object-name.c:569
 #, c-format
 msgid "short object ID %s is ambiguous"
 msgstr "l'id court d'objet %s est ambigu"
 
-#: object-name.c:491
-msgid "The candidates are:"
-msgstr "Les candidats sont :"
+#. TRANSLATORS: The argument is the list of ambiguous
+#. objects composed in show_ambiguous_object(). See
+#. its "TRANSLATORS" comments for details.
+#.
+#: object-name.c:591
+#, c-format
+msgid ""
+"The candidates are:\n"
+"%s"
+msgstr ""
+"Les candidats sont :\n"
+"%s"
 
-#: object-name.c:790
+#: object-name.c:888
 msgid ""
 "Git normally never creates a ref that ends with 40 hex characters\n"
 "because it will be ignored when you just specify 40-hex. These refs\n"
@@ -6054,22 +6257,22 @@ msgstr ""
 "message\n"
 "en lançant \"git config advice.objectNameWarning false\""
 
-#: object-name.c:910
+#: object-name.c:1008
 #, c-format
 msgid "log for '%.*s' only goes back to %s"
 msgstr "le journal de '%.*s' ne remonte qu'à %s"
 
-#: object-name.c:918
+#: object-name.c:1016
 #, c-format
 msgid "log for '%.*s' only has %d entries"
 msgstr "le journal de '%.*s' n'a que %d entrées"
 
-#: object-name.c:1696
+#: object-name.c:1794
 #, c-format
 msgid "path '%s' exists on disk, but not in '%.*s'"
 msgstr "le chemin '%s' existe sur le disque, mais pas dans '%.*s'"
 
-#: object-name.c:1702
+#: object-name.c:1800
 #, c-format
 msgid ""
 "path '%s' exists, but not '%s'\n"
@@ -6078,12 +6281,12 @@ msgstr ""
 "le chemin '%s' existe, mais pas '%s'\n"
 "conseil : peut-être vouliez-vous dire '%.*s:%s', soit '%.*s:./%s' ?"
 
-#: object-name.c:1711
+#: object-name.c:1809
 #, c-format
 msgid "path '%s' does not exist in '%.*s'"
 msgstr "le chemin '%s' n'existe pas dans '%.*s'"
 
-#: object-name.c:1739
+#: object-name.c:1837
 #, c-format
 msgid ""
 "path '%s' is in the index, but not at stage %d\n"
@@ -6092,7 +6295,7 @@ msgstr ""
 "le chemin '%s' est dans l'index, mais pas à l'étape %d\n"
 "conseil : vous vouliez peut-être dire ':%d:%s' ?"
 
-#: object-name.c:1755
+#: object-name.c:1853
 #, c-format
 msgid ""
 "path '%s' is in the index, but not '%s'\n"
@@ -6101,23 +6304,28 @@ msgstr ""
 "le chemin '%s' est dans l'index, mais pas '%s'\n"
 "conseil : peut-être vouliez-vous dire ':%d:%s', soit '%d:./%s' ?"
 
-#: object-name.c:1763
+#: object-name.c:1861
 #, c-format
 msgid "path '%s' exists on disk, but not in the index"
 msgstr "le chemin '%s' existe sur le disque, mais pas dans l'index"
 
-#: object-name.c:1765
+#: object-name.c:1863
 #, c-format
 msgid "path '%s' does not exist (neither on disk nor in the index)"
 msgstr "le chemin '%s' n'existe pas (ni sur le disque, ni dans l'index)"
 
-#: object-name.c:1778
+#: object-name.c:1876
 msgid "relative path syntax can't be used outside working tree"
 msgstr ""
 "la syntaxe de chemin relatif ne peut pas être utilisée hors de l'arbre de "
 "travail"
 
-#: object-name.c:1916
+#: object-name.c:1901
+#, c-format
+msgid "<object>:<path> required, only <object> '%s' given"
+msgstr "<objet>:<chemin> nécessaire, seul <objet> '%s' a été fourni"
+
+#: object-name.c:2014
 #, c-format
 msgid "invalid object name '%.*s'."
 msgstr "nom d'objet invalide : '%.*s'."
@@ -6142,7 +6350,7 @@ msgstr "l'objet %s a un id de type inconnu %d"
 msgid "unable to parse object: %s"
 msgstr "impossible d'analyser l'objet : %s"
 
-#: object.c:283 object.c:295
+#: object.c:283 object.c:294
 #, c-format
 msgid "hash mismatch %s"
 msgstr "incohérence de hachage %s"
@@ -6151,21 +6359,21 @@ msgstr "incohérence de hachage %s"
 msgid "multi-pack bitmap is missing required reverse index"
 msgstr "l'index inverse requis manque dans l'index multi-paquet"
 
-#: pack-bitmap.c:429
+#: pack-bitmap.c:433
 msgid "load_reverse_index: could not open pack"
 msgstr "load_reverse_index : impossible d'ouvrir le paquet"
 
-#: pack-bitmap.c:1069 pack-bitmap.c:1075 builtin/pack-objects.c:2424
+#: pack-bitmap.c:1072 pack-bitmap.c:1078 builtin/pack-objects.c:2432
 #, c-format
 msgid "unable to get size of %s"
 msgstr "impossible de récupérer la taille de %s"
 
-#: pack-bitmap.c:1935
+#: pack-bitmap.c:1937
 #, c-format
 msgid "could not find %s in pack %s at offset %<PRIuMAX>"
 msgstr "impossible de trouver %s dans le paquet %s à l'offset %<PRIuMAX>"
 
-#: pack-bitmap.c:1971 builtin/rev-list.c:92
+#: pack-bitmap.c:1973 builtin/rev-list.c:91
 #, c-format
 msgid "unable to get disk usage of %s"
 msgstr "impossible de récupérer l'utilisation du disque de %s"
@@ -6209,7 +6417,7 @@ msgstr "stat impossible de %s"
 msgid "failed to make %s readable"
 msgstr "échec de rendre %s lisible"
 
-#: pack-write.c:520
+#: pack-write.c:521
 #, c-format
 msgid "could not write '%s' promisor file"
 msgstr "impossible d'écrire le fichier de prometteur '%s'"
@@ -6558,20 +6766,20 @@ msgstr "object-info : vidage attendu après les arguments"
 msgid "Removing duplicate objects"
 msgstr "Suppression des objets dupliqués"
 
-#: range-diff.c:67
+#: range-diff.c:68
 msgid "could not start `log`"
 msgstr "impossible de démarrer `log`"
 
-#: range-diff.c:69
+#: range-diff.c:70
 msgid "could not read `log` output"
 msgstr "impossible de lire la sortie de `log`"
 
-#: range-diff.c:97 sequencer.c:5602
+#: range-diff.c:98 sequencer.c:5575
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "impossible d'analyser le commit '%s'"
 
-#: range-diff.c:111
+#: range-diff.c:109
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
@@ -6580,66 +6788,66 @@ msgstr ""
 "impossible d'analyser la première ligne de la sortie de `log` : ne commence "
 "pas par 'commit' : '%s'"
 
-#: range-diff.c:137
+#: range-diff.c:132
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "impossible d'analyser l'entête git '%.*s'"
 
-#: range-diff.c:304
+#: range-diff.c:300
 msgid "failed to generate diff"
 msgstr "échec de la génération de diff"
 
-#: range-diff.c:562 range-diff.c:564
+#: range-diff.c:558 range-diff.c:560
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "impossible d'analyser le journal pour '%s'"
 
-#: read-cache.c:723
+#: read-cache.c:737
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr "pas d'ajout d'alias de fichier '%s'(« %s » existe déjà dans l'index)"
 
-#: read-cache.c:739
+#: read-cache.c:753
 msgid "cannot create an empty blob in the object database"
 msgstr "impossible de créer un blob vide dans la base de donnée d'objets"
 
-#: read-cache.c:761
+#: read-cache.c:775
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr ""
 "%s : ne peut ajouter que des fichiers normaux, des liens symboliques ou des "
 "répertoires git"
 
-#: read-cache.c:766 builtin/submodule--helper.c:3242
+#: read-cache.c:780 builtin/submodule--helper.c:3359
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr "'%s' n'a pas de commit extrait"
 
-#: read-cache.c:818
+#: read-cache.c:832
 #, c-format
 msgid "unable to index file '%s'"
 msgstr "indexation du fichier '%s' impossible"
 
-#: read-cache.c:837
+#: read-cache.c:851
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr "impossible d'ajouter '%s' à l'index"
 
-#: read-cache.c:848
+#: read-cache.c:862
 #, c-format
 msgid "unable to stat '%s'"
 msgstr "fstat de '%s' impossible"
 
-#: read-cache.c:1386
+#: read-cache.c:1404
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr "'%s' existe à la fois comme un fichier et un répertoire"
 
-#: read-cache.c:1601
+#: read-cache.c:1619
 msgid "Refresh index"
 msgstr "Rafraîchir l'index"
 
-#: read-cache.c:1733
+#: read-cache.c:1751
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -6648,7 +6856,7 @@ msgstr ""
 "index.version renseignée, mais la valeur est invalide.\n"
 "Utilisation de la version %i"
 
-#: read-cache.c:1743
+#: read-cache.c:1761
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -6657,143 +6865,147 @@ msgstr ""
 "GIT_INDEX_VERSION est renseigné, mais la valeur est invalide.\n"
 "Utilisation de la version %i"
 
-#: read-cache.c:1799
+#: read-cache.c:1817
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "signature incorrecte 0x%08x"
 
-#: read-cache.c:1802
+#: read-cache.c:1820
 #, c-format
 msgid "bad index version %d"
 msgstr "mauvaise version d'index %d"
 
-#: read-cache.c:1811
+#: read-cache.c:1829
 msgid "bad index file sha1 signature"
 msgstr "mauvaise signature sha1 d'index"
 
-#: read-cache.c:1845
+#: read-cache.c:1863
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "l'index utilise l'extension %.4s qui n'est pas comprise"
 
-#: read-cache.c:1847
+#: read-cache.c:1865
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "extension %.4s ignorée"
 
-#: read-cache.c:1884
+#: read-cache.c:1902
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "format d'entrée d'index inconnu 0x%08x"
 
-#: read-cache.c:1900
+#: read-cache.c:1918
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "champ de nom malformé dans l'index, près du chemin '%s'"
 
-#: read-cache.c:1957
+#: read-cache.c:1975
 msgid "unordered stage entries in index"
 msgstr "entrées de préparation non ordonnées dans l'index"
 
-#: read-cache.c:1960
+#: read-cache.c:1978
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "entrées multiples de préparation pour le fichier fusionné '%s'"
 
-#: read-cache.c:1963
+#: read-cache.c:1981
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "entrées de préparation non ordonnées pour '%s'"
 
-#: read-cache.c:2078 read-cache.c:2384 rerere.c:549 rerere.c:583 rerere.c:1095
-#: submodule.c:1662 builtin/add.c:600 builtin/check-ignore.c:183
-#: builtin/checkout.c:527 builtin/checkout.c:719 builtin/clean.c:1013
-#: builtin/commit.c:378 builtin/diff-tree.c:122 builtin/grep.c:519
-#: builtin/mv.c:148 builtin/reset.c:499 builtin/rm.c:293
-#: builtin/submodule--helper.c:327 builtin/submodule--helper.c:3202
+#: read-cache.c:2096 read-cache.c:2402 rerere.c:549 rerere.c:583 rerere.c:1096
+#: submodule.c:1831 builtin/add.c:586 builtin/check-ignore.c:183
+#: builtin/checkout.c:532 builtin/checkout.c:724 builtin/clean.c:1016
+#: builtin/commit.c:379 builtin/diff-tree.c:122 builtin/grep.c:521
+#: builtin/mv.c:148 builtin/reset.c:506 builtin/rm.c:293
+#: builtin/submodule--helper.c:335 builtin/submodule--helper.c:3319
 msgid "index file corrupt"
 msgstr "fichier d'index corrompu"
 
-#: read-cache.c:2222
+#: read-cache.c:2240
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "impossible de créer le fil load_cache_entries : %s"
 
-#: read-cache.c:2235
+#: read-cache.c:2253
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "impossible de joindre le fil load_cache_entries : %s"
 
-#: read-cache.c:2268
+#: read-cache.c:2286
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s : l'ouverture du fichier d'index a échoué"
 
-#: read-cache.c:2272
+#: read-cache.c:2290
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s : impossible de faire un stat sur l'index ouvert"
 
-#: read-cache.c:2276
+#: read-cache.c:2294
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s : fichier d'index plus petit qu'attendu"
 
-#: read-cache.c:2280
+#: read-cache.c:2298
 #, c-format
 msgid "%s: unable to map index file%s"
 msgstr "%s : impossible de mapper le fichier d'index%s"
 
-#: read-cache.c:2323
+#: read-cache.c:2341
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "impossible de créer le fil load_index_extensions : %s"
 
-#: read-cache.c:2350
+#: read-cache.c:2368
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "impossible de joindre le fil load_index_extensions : %s"
 
-#: read-cache.c:2396
+#: read-cache.c:2414
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "impossible de rafraîchir l'index partagé '%s'"
 
-#: read-cache.c:2455
+#: read-cache.c:2473
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "index cassé, %s attendu dans %s, %s obtenu"
 
-#: read-cache.c:3086 strbuf.c:1191 wrapper.c:641 builtin/merge.c:1150
+#: read-cache.c:3032
+msgid "cannot write split index for a sparse index"
+msgstr "impossible d'écrire un index scindé pour un index clairsemé"
+
+#: read-cache.c:3114 strbuf.c:1192 wrapper.c:717 builtin/merge.c:1156
 #, c-format
 msgid "could not close '%s'"
 msgstr "impossible de fermer '%s'"
 
-#: read-cache.c:3129
+#: read-cache.c:3157
 msgid "failed to convert to a sparse-index"
 msgstr "échec de conversion d'un index clairsemé"
 
-#: read-cache.c:3200
+#: read-cache.c:3228
 #, c-format
 msgid "could not stat '%s'"
 msgstr "impossible de stat '%s'"
 
-#: read-cache.c:3213
+#: read-cache.c:3241
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "impossible d'ouvrir le répertoire git : %s"
 
-#: read-cache.c:3225
+#: read-cache.c:3253
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "échec lors de l'unlink : %s"
 
-#: read-cache.c:3254
+#: read-cache.c:3282
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "impossible de régler les bits de droit de '%s'"
 
-#: read-cache.c:3411
+#: read-cache.c:3439
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s : impossible de revenir à l'étape 0"
@@ -6915,9 +7127,9 @@ msgstr ""
 "Cependant, si vous effacez tout, le rebasage sera annulé.\n"
 "\n"
 
-#: rebase-interactive.c:113 rerere.c:469 rerere.c:676 sequencer.c:3883
-#: sequencer.c:3909 sequencer.c:5708 builtin/fsck.c:328 builtin/gc.c:1791
-#: builtin/rebase.c:190
+#: rebase-interactive.c:113 rerere.c:469 rerere.c:677 sequencer.c:3879
+#: sequencer.c:3905 sequencer.c:5681 builtin/fsck.c:328 builtin/gc.c:1791
+#: builtin/rebase.c:191
 #, c-format
 msgid "could not write '%s'"
 msgstr "impossible d'écrire '%s'"
@@ -6960,7 +7172,7 @@ msgid "%s: 'preserve' superseded by 'merges'"
 msgstr "%s : 'preserve' a été remplacé par 'merges'"
 
 # à priori on parle d'une branche ici
-#: ref-filter.c:42 wt-status.c:2048
+#: ref-filter.c:42 wt-status.c:2057
 msgid "gone"
 msgstr "disparue"
 
@@ -7127,81 +7339,91 @@ msgstr "cette commande rejette l'atome %%(%.*s)"
 msgid "--format=%.*s cannot be used with --python, --shell, --tcl"
 msgstr "--format=%.*s ne peut pas être utilisé avec --python, --shell, --tcl"
 
-#: ref-filter.c:1706
+#: ref-filter.c:1707
 #, c-format
 msgid "(no branch, rebasing %s)"
 msgstr "(aucune branche, rebasage de %s)"
 
-#: ref-filter.c:1709
+#: ref-filter.c:1710
 #, c-format
 msgid "(no branch, rebasing detached HEAD %s)"
 msgstr "(aucune branche, rebasage de la HEAD détachée %s)"
 
-#: ref-filter.c:1712
+#: ref-filter.c:1713
 #, c-format
 msgid "(no branch, bisect started on %s)"
 msgstr "(aucune branche, bisect a démarré sur %s)"
 
-#: ref-filter.c:1716
+#: ref-filter.c:1717
 #, c-format
 msgid "(HEAD detached at %s)"
 msgstr "(HEAD détachée sur %s)"
 
-#: ref-filter.c:1719
+#: ref-filter.c:1720
 #, c-format
 msgid "(HEAD detached from %s)"
 msgstr "(HEAD détachée depuis %s)"
 
-#: ref-filter.c:1722
+#: ref-filter.c:1723
 msgid "(no branch)"
 msgstr "(aucune branche)"
 
-#: ref-filter.c:1754 ref-filter.c:1972
+#: ref-filter.c:1755 ref-filter.c:1973
 #, c-format
 msgid "missing object %s for %s"
 msgstr "objet manquant %s pour %s"
 
-#: ref-filter.c:1764
+#: ref-filter.c:1765
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "échec de parse_object_buffer sur %s pour %s"
 
-#: ref-filter.c:2155
+#: ref-filter.c:2156
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "objet malformé à '%s'"
 
-#: ref-filter.c:2245
+#: ref-filter.c:2246
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "réf avec un nom cassé %s ignoré"
 
-#: ref-filter.c:2250 refs.c:676
+#: ref-filter.c:2251 refs.c:672
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "réf cassé %s ignoré"
 
-#: ref-filter.c:2629
+#: ref-filter.c:2630
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "format: atome %%(end) manquant"
 
-#: ref-filter.c:2740
+#: ref-filter.c:2741
 #, c-format
 msgid "malformed object name %s"
 msgstr "nom d'objet malformé %s"
 
-#: ref-filter.c:2745
+#: ref-filter.c:2746
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "l'option '%s' doit pointer sur un commit"
 
-#: refs.c:261
+#: reflog.c:407
+#, c-format
+msgid "not a reflog: %s"
+msgstr "'%s' n'est pas un journal de références"
+
+#: reflog.c:410
+#, c-format
+msgid "no reflog for '%s'"
+msgstr "pas de journal de références pour '%s'"
+
+#: refs.c:262
 #, c-format
 msgid "%s does not point to a valid object!"
 msgstr "%s ne pointe pas sur un objet valide!"
 
-#: refs.c:563
+#: refs.c:561
 #, c-format
 msgid ""
 "Using '%s' as the name for the initial branch. This default branch name\n"
@@ -7226,81 +7448,81 @@ msgstr ""
 "\n"
 "\tgit branch -m <nom>\n"
 
-#: refs.c:585
+#: refs.c:583
 #, c-format
 msgid "could not retrieve `%s`"
 msgstr "impossible de récupérer `%s`"
 
-#: refs.c:595
+#: refs.c:593
 #, c-format
 msgid "invalid branch name: %s = %s"
 msgstr "nom de branche invalide : %s = %s"
 
-#: refs.c:674
+#: refs.c:670
 #, c-format
 msgid "ignoring dangling symref %s"
 msgstr "symref pendant %s ignoré"
 
-#: refs.c:925
+#: refs.c:919
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "le journal pour la réf %s contient un trou après %s"
 
-#: refs.c:932
+#: refs.c:926
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr "le journal pour la réf %s s'arrête de manière inattendue sur %s"
 
-#: refs.c:997
+#: refs.c:991
 #, c-format
 msgid "log for %s is empty"
 msgstr "le journal pour la réf %s est vide"
 
-#: refs.c:1090
+#: refs.c:1086
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "refus de mettre à jour une réf avec un nom cassé '%s'"
 
-#: refs.c:1168
+#: refs.c:1164
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "échec de update_ref pour la réf '%s' : %s"
 
-#: refs.c:2067
+#: refs.c:2059
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "mises à jour multiples pour la réf '%s' non permises"
 
-#: refs.c:2150
+#: refs.c:2145
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "mises à jour des références interdites en environnement de quarantaine"
 
-#: refs.c:2161
+#: refs.c:2156
 msgid "ref updates aborted by hook"
 msgstr "mises à jour des références annulées par le crochet"
 
-#: refs.c:2269 refs.c:2299
+#: refs.c:2264 refs.c:2294
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "'%s' existe ; impossible de créer '%s'"
 
-#: refs.c:2275 refs.c:2310
+#: refs.c:2270 refs.c:2305
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "impossible de traiter '%s' et '%s' en même temps"
 
-#: refs/files-backend.c:1267
+#: refs/files-backend.c:1295
 #, c-format
 msgid "could not remove reference %s"
 msgstr "impossible de supprimer la référence %s"
 
-#: refs/files-backend.c:1281 refs/packed-backend.c:1549
-#: refs/packed-backend.c:1559
+#: refs/files-backend.c:1310 refs/packed-backend.c:1565
+#: refs/packed-backend.c:1575
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr "impossible de supprimer la référence %s : %s"
 
-#: refs/files-backend.c:1284 refs/packed-backend.c:1562
+#: refs/files-backend.c:1313 refs/packed-backend.c:1578
 #, c-format
 msgid "could not delete references: %s"
 msgstr "impossible de supprimer les références : %s"
@@ -7324,38 +7546,38 @@ msgstr "plus d'un receivepack fournis, utilisation du premier"
 msgid "more than one uploadpack given, using the first"
 msgstr "plus d'un uploadpack fournis, utilisation du premier"
 
-#: remote.c:699
+#: remote.c:698
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr "Impossible de récupérer à la fois %s et %s pour %s"
 
-#: remote.c:703
+#: remote.c:702
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr "%s suit habituellement %s, pas %s"
 
-#: remote.c:707
+#: remote.c:706
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr "%s suit à la fois %s et %s"
 
-#: remote.c:775
+#: remote.c:774
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr "la clé '%s' du modèle n'a pas de '*'"
 
-#: remote.c:785
+#: remote.c:784
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr "la valeur '%s' du modèle n'a pas de '*'"
 
-#: remote.c:1192
+#: remote.c:1191
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr ""
 "le spécificateur de référence source %s ne correspond à aucune référence"
 
-#: remote.c:1197
+#: remote.c:1196
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr ""
@@ -7365,7 +7587,7 @@ msgstr ""
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1212
+#: remote.c:1211
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -7389,7 +7611,7 @@ msgstr ""
 "Aucune n'a fonctionné, donc abandon. Veuillez spécifier une référence "
 "totalement qualifiée."
 
-#: remote.c:1232
+#: remote.c:1231
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -7400,7 +7622,7 @@ msgstr ""
 "Souhaitiez-vous créer une nouvelle branche en poussant sur\n"
 "'%s:refs/heads/%s' ?"
 
-#: remote.c:1237
+#: remote.c:1236
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -7411,7 +7633,7 @@ msgstr ""
 "Souhaitiez-vous créer une nouvelle étiquette en poussant sur\n"
 "'%s:refs/tags/%s' ?"
 
-#: remote.c:1242
+#: remote.c:1241
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -7422,7 +7644,7 @@ msgstr ""
 "Souhaitiez-vous créer un nouvel arbre en poussant sur\n"
 "'%s:refs/tags/%s' ?"
 
-#: remote.c:1247
+#: remote.c:1246
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -7433,119 +7655,119 @@ msgstr ""
 "Souhaitiez-vous créer un nouveau blob en poussant sur\n"
 "'%s:refs/tags/%s' ?"
 
-#: remote.c:1283
+#: remote.c:1282
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "'%s' ne peut pas être résolue comme une branche"
 
-#: remote.c:1294
+#: remote.c:1293
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "suppression de '%s' impossible : la référence distante n'existe pas"
 
-#: remote.c:1306
+#: remote.c:1305
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr ""
 "le spécificateur de référence dst %s correspond à plus d'un spécificateur de "
 "références"
 
-#: remote.c:1313
+#: remote.c:1312
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "le spécificateur de référence dst %s reçoit depuis plus d'une source"
 
-#: remote.c:1834 remote.c:1941
+#: remote.c:1833 remote.c:1940
 msgid "HEAD does not point to a branch"
 msgstr "HEAD ne pointe pas sur une branche"
 
-#: remote.c:1843
+#: remote.c:1842
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "pas de branche '%s'"
 
-#: remote.c:1846
+#: remote.c:1845
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "aucune branche amont configurée pour la branche '%s'"
 
-#: remote.c:1852
+#: remote.c:1851
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "la branche amont '%s' n'est pas stockée comme branche de suivi"
 
-#: remote.c:1867
+#: remote.c:1866
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr ""
 "la destination de poussée '%s' sur le serveur distant '%s' n'a pas de "
 "branche locale de suivi"
 
-#: remote.c:1882
+#: remote.c:1881
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "la branche '%s' n'a aucune branche distante de poussée"
 
-#: remote.c:1892
+#: remote.c:1891
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "les références de spec pour '%s' n'incluent pas '%s'"
 
-#: remote.c:1905
+#: remote.c:1904
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "la poussée n'a pas de destination (push.default vaut 'nothing')"
 
-#: remote.c:1927
+#: remote.c:1926
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr ""
 "impossible de résoudre une poussée 'simple' pour une destination unique"
 
-#: remote.c:2060
+#: remote.c:2059
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "impossible de trouver la référence distante %s"
 
-#: remote.c:2073
+#: remote.c:2072
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* Référence bizarre '%s' ignorée localement"
 
-#: remote.c:2236
+#: remote.c:2235
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "Votre branche est basée sur '%s', mais la branche amont a disparu.\n"
 
-#: remote.c:2240
+#: remote.c:2239
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (utilisez \"git branch --unset-upstream\" pour corriger)\n"
 
-#: remote.c:2243
+#: remote.c:2242
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Votre branche est à jour avec '%s'.\n"
 
-#: remote.c:2247
+#: remote.c:2246
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Votre branche et '%s' font référence à des commits différents.\n"
 
-#: remote.c:2250
+#: remote.c:2249
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (utilisez \"%s\" pour plus de détails)\n"
 
-#: remote.c:2254
+#: remote.c:2253
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "Votre branche est en avance sur '%s' de %d commit.\n"
 msgstr[1] "Votre branche est en avance sur '%s' de %d commits.\n"
 
-#: remote.c:2260
+#: remote.c:2259
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (utilisez \"git push\" pour publier vos commits locaux)\n"
 
-#: remote.c:2263
+#: remote.c:2262
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -7557,11 +7779,11 @@ msgstr[1] ""
 "Votre branche est en retard sur '%s' de %d commits, et peut être mise à jour "
 "en avance rapide.\n"
 
-#: remote.c:2271
+#: remote.c:2270
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (utilisez \"git pull\" pour mettre à jour votre branche locale)\n"
 
-#: remote.c:2274
+#: remote.c:2273
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -7576,12 +7798,12 @@ msgstr[1] ""
 "Votre branche et '%s' ont divergé,\n"
 "et ont %d et %d commits différents chacune respectivement.\n"
 
-#: remote.c:2284
+#: remote.c:2283
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr ""
 "  (utilisez \"git pull\" pour fusionner la branche distante dans la vôtre)\n"
 
-#: remote.c:2476
+#: remote.c:2475
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "impossible d'analyser le nom attendu d'objet '%s'"
@@ -7619,104 +7841,108 @@ msgstr "il y a eu des erreurs à l'écriture de '%s' (%s)"
 msgid "failed to flush '%s'"
 msgstr "échec du flush de '%s'"
 
-#: rerere.c:487 rerere.c:1023
+#: rerere.c:487 rerere.c:1024
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
 msgstr "impossible d'analyser la section en conflit dans '%s'"
 
-#: rerere.c:668
+#: rerere.c:669
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr "échec de utime() sur '%s'"
 
-#: rerere.c:678
+#: rerere.c:679
 #, c-format
 msgid "writing '%s' failed"
 msgstr "échec de l'écriture de '%s'"
 
-#: rerere.c:698
+#: rerere.c:699
 #, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr "'%s' indexé en utilisant la résolution pré-existante."
 
-#: rerere.c:737
+#: rerere.c:738
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr "Résolution enregistrée pour '%s'."
 
-#: rerere.c:772
+#: rerere.c:773
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr "'%s' résolu en utilisant la résolution pré-existante."
 
-#: rerere.c:787
+#: rerere.c:788
 #, c-format
 msgid "cannot unlink stray '%s'"
 msgstr "impossible de délier '%s' qui est errant"
 
-#: rerere.c:791
+#: rerere.c:792
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr "Pré-image enregistrée pour '%s'"
 
-#: rerere.c:865 submodule.c:2121 builtin/log.c:2017
-#: builtin/submodule--helper.c:1777 builtin/submodule--helper.c:1820
+#: rerere.c:866 submodule.c:2290 builtin/log.c:2042
+#: builtin/submodule--helper.c:1786 builtin/submodule--helper.c:1833
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "impossible de créer le répertoire '%s'"
 
-#: rerere.c:1041
+#: rerere.c:1042
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr "échec de la mise à jour de l'état en conflit dans '%s'"
 
-#: rerere.c:1052 rerere.c:1059
+#: rerere.c:1053 rerere.c:1060
 #, c-format
 msgid "no remembered resolution for '%s'"
 msgstr "aucune résolution enregistrée pour '%s'"
 
-#: rerere.c:1061
+#: rerere.c:1062
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr "impossible de délier '%s'"
 
-#: rerere.c:1071
+#: rerere.c:1072
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr "Pré-image mise à jour pour '%s'"
 
-#: rerere.c:1080
+#: rerere.c:1081
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr "Résolution  pour '%s' oubliée\n"
 
-#: rerere.c:1191
+#: rerere.c:1192
 msgid "unable to open rr-cache directory"
 msgstr "impossible d'ouvrir le répertoire rr-cache"
 
-#: reset.c:42
+#: reset.c:112
 msgid "could not determine HEAD revision"
 msgstr "impossible de déterminer la révision HEAD"
 
-#: reset.c:70 reset.c:76 sequencer.c:3700
+#: reset.c:141 reset.c:147 sequencer.c:3696
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "impossible de trouver l'arbre de %s"
 
-#: revision.c:2347
+#: revision.c:2358
 msgid "--unpacked=<packfile> no longer supported"
 msgstr "--unpacked=<fichier-paquet> n'est plus géré"
 
-#: revision.c:2686
+#: revision.c:2712
 msgid "your current branch appears to be broken"
 msgstr "votre branche actuelle semble cassée"
 
-#: revision.c:2689
+#: revision.c:2715
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "votre branche actuelle '%s' ne contient encore aucun commit"
 
-#: revision.c:2891
+#: revision.c:2901
+msgid "object filtering requires --objects"
+msgstr "le filtrage d'objet exige --objects"
+
+#: revision.c:2918
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L ne supporte pas encore les formats de diff autres que -p et -s"
 
@@ -7788,7 +8014,7 @@ msgstr "mode de nettoyage invalide de message de validation '%s'"
 msgid "could not delete '%s'"
 msgstr "impossible de supprimer '%s'"
 
-#: sequencer.c:345 sequencer.c:4751 builtin/rebase.c:563 builtin/rebase.c:1297
+#: sequencer.c:345 sequencer.c:4724 builtin/rebase.c:564 builtin/rebase.c:1326
 #: builtin/rm.c:409
 #, c-format
 msgid "could not remove '%s'"
@@ -7851,13 +8077,13 @@ msgstr ""
 "Pour arrêter et revenir à l'état antérieur à \"git revert\",,\n"
 "lancez \"git revert --abort\"."
 
-#: sequencer.c:448 sequencer.c:3292
+#: sequencer.c:448 sequencer.c:3288
 #, c-format
 msgid "could not lock '%s'"
 msgstr "impossible de verrouiller '%s'"
 
-#: sequencer.c:450 sequencer.c:3091 sequencer.c:3296 sequencer.c:3310
-#: sequencer.c:3561 sequencer.c:5618 strbuf.c:1188 wrapper.c:639
+#: sequencer.c:450 sequencer.c:3087 sequencer.c:3292 sequencer.c:3306
+#: sequencer.c:3557 sequencer.c:5591 strbuf.c:1189 wrapper.c:715
 #, c-format
 msgid "could not write to '%s'"
 msgstr "impossible d'écrire dans '%s'"
@@ -7867,14 +8093,14 @@ msgstr "impossible d'écrire dans '%s'"
 msgid "could not write eol to '%s'"
 msgstr "impossible d'écrire la fin de ligne dans '%s'"
 
-#: sequencer.c:460 sequencer.c:3096 sequencer.c:3298 sequencer.c:3312
-#: sequencer.c:3569
+#: sequencer.c:460 sequencer.c:3092 sequencer.c:3294 sequencer.c:3308
+#: sequencer.c:3565
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "échec lors de la finalisation de '%s'"
 
-#: sequencer.c:473 sequencer.c:1934 sequencer.c:3116 sequencer.c:3551
-#: sequencer.c:3679 builtin/am.c:289 builtin/commit.c:834 builtin/merge.c:1148
+#: sequencer.c:473 sequencer.c:1930 sequencer.c:3112 sequencer.c:3547
+#: sequencer.c:3675 builtin/am.c:290 builtin/commit.c:837 builtin/merge.c:1154
 #, c-format
 msgid "could not read '%s'"
 msgstr "impossible de lire '%s'"
@@ -7893,7 +8119,7 @@ msgstr "validez vos modifications ou les remiser pour continuer."
 msgid "%s: fast-forward"
 msgstr "%s : avance rapide"
 
-#: sequencer.c:574 builtin/tag.c:614
+#: sequencer.c:574 builtin/tag.c:615
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Mode de nettoyage invalide %s"
@@ -7924,8 +8150,8 @@ msgstr "aucune clé présente dans '%.*s'"
 msgid "unable to dequote value of '%s'"
 msgstr "impossible de décoter la valeur de '%s'"
 
-#: sequencer.c:841 wrapper.c:209 wrapper.c:379 builtin/am.c:756
-#: builtin/am.c:848 builtin/rebase.c:694
+#: sequencer.c:841 wrapper.c:219 wrapper.c:389 builtin/am.c:757
+#: builtin/am.c:849 builtin/rebase.c:699
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "impossible d'ouvrir '%s' en lecture"
@@ -8047,350 +8273,345 @@ msgstr ""
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1288
+#: sequencer.c:1287
 msgid "couldn't look up newly created commit"
 msgstr "impossible de retrouver le commit nouvellement créé"
 
-#: sequencer.c:1290
+#: sequencer.c:1289
 msgid "could not parse newly created commit"
 msgstr "impossible d'analyser le commit nouvellement créé"
 
-#: sequencer.c:1339
+#: sequencer.c:1336
 msgid "unable to resolve HEAD after creating commit"
 msgstr "impossible de résoudre HEAD après création du commit"
 
-#: sequencer.c:1342
+#: sequencer.c:1338
 msgid "detached HEAD"
 msgstr "HEAD détachée"
 
-#: sequencer.c:1346
+#: sequencer.c:1342
 msgid " (root-commit)"
 msgstr " (commit racine)"
 
-#: sequencer.c:1367
+#: sequencer.c:1363
 msgid "could not parse HEAD"
 msgstr "impossible de lire HEAD"
 
-#: sequencer.c:1369
+#: sequencer.c:1365
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s n'est pas un commit !"
 
-#: sequencer.c:1373 sequencer.c:1451 builtin/commit.c:1708
+#: sequencer.c:1369 sequencer.c:1447 builtin/commit.c:1707
 msgid "could not parse HEAD commit"
 msgstr "impossible d'analyser le commit HEAD"
 
-#: sequencer.c:1429 sequencer.c:2314
+#: sequencer.c:1425 sequencer.c:2310
 msgid "unable to parse commit author"
 msgstr "impossible d'analyser l'auteur du commit"
 
-#: sequencer.c:1440 builtin/am.c:1643 builtin/merge.c:710
+#: sequencer.c:1436 builtin/am.c:1644 builtin/merge.c:710
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree a échoué à écrire un arbre"
 
-#: sequencer.c:1473 sequencer.c:1593
+#: sequencer.c:1469 sequencer.c:1589
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "impossible de lire le message de validation de '%s'"
 
-#: sequencer.c:1504 sequencer.c:1536
+#: sequencer.c:1500 sequencer.c:1532
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr "identité d'auteur invalide '%s'"
 
-#: sequencer.c:1510
+#: sequencer.c:1506
 msgid "corrupt author: missing date information"
 msgstr "auteur corrompu : information de date manquante"
 
-#: sequencer.c:1549 builtin/am.c:1670 builtin/commit.c:1822 builtin/merge.c:915
-#: builtin/merge.c:940 t/helper/test-fast-rebase.c:78
+#: sequencer.c:1545 builtin/am.c:1671 builtin/commit.c:1821 builtin/merge.c:921
+#: builtin/merge.c:946 t/helper/test-fast-rebase.c:78
 msgid "failed to write commit object"
 msgstr "échec de l'écriture de l'objet commit"
 
-#: sequencer.c:1576 sequencer.c:4523 t/helper/test-fast-rebase.c:199
+#: sequencer.c:1572 sequencer.c:4496 t/helper/test-fast-rebase.c:199
 #: t/helper/test-fast-rebase.c:217
 #, c-format
 msgid "could not update %s"
 msgstr "impossible de mettre à jour %s"
 
-#: sequencer.c:1625
+#: sequencer.c:1621
 #, c-format
 msgid "could not parse commit %s"
 msgstr "impossible d'analyser le commit %s"
 
-#: sequencer.c:1630
+#: sequencer.c:1626
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "impossible d'analyser le commit parent %s"
 
-#: sequencer.c:1713 sequencer.c:1994
+#: sequencer.c:1709 sequencer.c:1990
 #, c-format
 msgid "unknown command: %d"
 msgstr "commande inconnue : %d"
 
-#: sequencer.c:1755
+#: sequencer.c:1751
 msgid "This is the 1st commit message:"
 msgstr "Ceci est le premier message de validation :"
 
-#: sequencer.c:1756
+#: sequencer.c:1752
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Ceci est le message de validation numéro %d :"
 
-#: sequencer.c:1757
+#: sequencer.c:1753
 msgid "The 1st commit message will be skipped:"
 msgstr "Le premier message de validation sera ignoré :"
 
-#: sequencer.c:1758
+#: sequencer.c:1754
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "Le message de validation %d sera ignoré :"
 
-#: sequencer.c:1759
+#: sequencer.c:1755
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "Ceci est la combinaison de %d commits."
 
-#: sequencer.c:1906 sequencer.c:1963
+#: sequencer.c:1902 sequencer.c:1959
 #, c-format
 msgid "cannot write '%s'"
 msgstr "impossible d'écrire '%s'"
 
-#: sequencer.c:1953
+#: sequencer.c:1949
 msgid "need a HEAD to fixup"
 msgstr "une HEAD est nécessaire à la correction"
 
-#: sequencer.c:1955 sequencer.c:3596
+#: sequencer.c:1951 sequencer.c:3592
 msgid "could not read HEAD"
 msgstr "impossible de lire HEAD"
 
-#: sequencer.c:1957
+#: sequencer.c:1953
 msgid "could not read HEAD's commit message"
 msgstr "impossible de lire le message de validation de HEAD"
 
-#: sequencer.c:1981
+#: sequencer.c:1977
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "impossible de lire le message de validation de %s"
 
-#: sequencer.c:2091
+#: sequencer.c:2087
 msgid "your index file is unmerged."
 msgstr "votre fichier d'index n'est pas fusionné."
 
-#: sequencer.c:2098
+#: sequencer.c:2094
 msgid "cannot fixup root commit"
 msgstr "impossible de réparer le commit racine"
 
-#: sequencer.c:2117
+#: sequencer.c:2113
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "le commit %s est une fusion mais l'option -m n'a pas été spécifiée."
 
-#: sequencer.c:2125 sequencer.c:2133
+#: sequencer.c:2121 sequencer.c:2129
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "le commit %s n'a pas de parent %d"
 
-#: sequencer.c:2139
+#: sequencer.c:2135
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "impossible d'obtenir un message de validation pour %s"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:2158
+#: sequencer.c:2154
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s : impossible d'analyser le commit parent %s"
 
-#: sequencer.c:2224
+#: sequencer.c:2220
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "impossible de renommer '%s' en '%s'"
 
-#: sequencer.c:2284
+#: sequencer.c:2280
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "impossible d'annuler %s... %s"
 
-#: sequencer.c:2285
+#: sequencer.c:2281
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "impossible d'appliquer %s... %s"
 
-#: sequencer.c:2306
+#: sequencer.c:2302
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr "abandon de %s %s -- le contenu de la rustine déjà en amont\n"
 
-#: sequencer.c:2364
+#: sequencer.c:2360
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s : échec à la lecture de l'index"
 
-#: sequencer.c:2372
+#: sequencer.c:2368
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s : échec du rafraîchissement de l'index"
 
-#: sequencer.c:2452
+#: sequencer.c:2448
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s n'accepte pas d'argument : '%s'"
 
-#: sequencer.c:2461
+#: sequencer.c:2457
 #, c-format
 msgid "missing arguments for %s"
 msgstr "argument manquant pour %s"
 
-#: sequencer.c:2504
+#: sequencer.c:2500
 #, c-format
 msgid "could not parse '%s'"
 msgstr "impossible d'analyser '%s'"
 
-#: sequencer.c:2565
+#: sequencer.c:2561
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "ligne %d invalide : %.*s"
 
-#: sequencer.c:2576
+#: sequencer.c:2572
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "'%s' impossible avec le commit précédent"
 
-#: sequencer.c:2624 builtin/rebase.c:184
+#: sequencer.c:2620 builtin/rebase.c:185
 #, c-format
 msgid "could not read '%s'."
 msgstr "impossible de lire '%s'."
 
-#: sequencer.c:2662
+#: sequencer.c:2658
 msgid "cancelling a cherry picking in progress"
 msgstr "annulation d'un picorage en cours"
 
-#: sequencer.c:2671
+#: sequencer.c:2667
 msgid "cancelling a revert in progress"
 msgstr "annulation d'un retour en cours"
 
-#: sequencer.c:2711
+#: sequencer.c:2707
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "veuillez corriger ceci en utilisant 'git rebase --edit-todo'."
 
-#: sequencer.c:2713
+#: sequencer.c:2709
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "feuille d'instruction inutilisable : '%s'"
 
-#: sequencer.c:2718
+#: sequencer.c:2714
 msgid "no commits parsed."
 msgstr "aucun commit analysé."
 
-#: sequencer.c:2729
+#: sequencer.c:2725
 msgid "cannot cherry-pick during a revert."
 msgstr "impossible de picorer pendant l'annulation d'un commit."
 
-#: sequencer.c:2731
+#: sequencer.c:2727
 msgid "cannot revert during a cherry-pick."
 msgstr "impossible d'annuler un commit pendant un picorage."
 
-#: sequencer.c:2809
-#, c-format
-msgid "invalid value for %s: %s"
-msgstr "valeur invalide pour %s : %s"
-
-#: sequencer.c:2918
+#: sequencer.c:2914
 msgid "unusable squash-onto"
 msgstr "\"écrase-sur\" inutilisable"
 
-#: sequencer.c:2938
+#: sequencer.c:2934
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "feuille d'options malformée : %s"
 
-#: sequencer.c:3033 sequencer.c:4902
+#: sequencer.c:3029 sequencer.c:4875
 msgid "empty commit set passed"
 msgstr "l'ensemble de commits spécifié est vide"
 
-#: sequencer.c:3050
+#: sequencer.c:3046
 msgid "revert is already in progress"
 msgstr "un retour est déjà en cours"
 
-#: sequencer.c:3052
+#: sequencer.c:3048
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "essayez \"git revert (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:3055
+#: sequencer.c:3051
 msgid "cherry-pick is already in progress"
 msgstr "un picorage est déjà en cours"
 
-#: sequencer.c:3057
+#: sequencer.c:3053
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "essayez \"git cherry-pick (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:3071
+#: sequencer.c:3067
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "impossible de créer le répertoire de séquenceur '%s'"
 
-#: sequencer.c:3086
+#: sequencer.c:3082
 msgid "could not lock HEAD"
 msgstr "impossible de verrouiller HEAD"
 
-#: sequencer.c:3146 sequencer.c:4612
+#: sequencer.c:3142 sequencer.c:4585
 msgid "no cherry-pick or revert in progress"
 msgstr "aucun picorage ou retour en cours"
 
-#: sequencer.c:3148 sequencer.c:3159
+#: sequencer.c:3144 sequencer.c:3155
 msgid "cannot resolve HEAD"
 msgstr "impossible de résoudre HEAD"
 
-#: sequencer.c:3150 sequencer.c:3194
+#: sequencer.c:3146 sequencer.c:3190
 msgid "cannot abort from a branch yet to be born"
 msgstr "impossible d'abandonner depuis une branche non encore créée"
 
-#: sequencer.c:3180 builtin/fetch.c:1004 builtin/fetch.c:1416
-#: builtin/grep.c:772
+#: sequencer.c:3176 builtin/fetch.c:1030 builtin/fetch.c:1457
+#: builtin/grep.c:774
 #, c-format
 msgid "cannot open '%s'"
 msgstr "impossible d'ouvrir '%s'"
 
-#: sequencer.c:3182
+#: sequencer.c:3178
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "impossible de lire '%s' : %s"
 
-#: sequencer.c:3183
+#: sequencer.c:3179
 msgid "unexpected end of file"
 msgstr "fin de fichier inattendue"
 
-#: sequencer.c:3189
+#: sequencer.c:3185
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "le fichier HEAD de préparation de picorage '%s' est corrompu"
 
-#: sequencer.c:3200
+#: sequencer.c:3196
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr ""
 "Vous semblez avoir déplacé la HEAD. Pas de rembobinage, vérifiez votre HEAD !"
 
-#: sequencer.c:3241
+#: sequencer.c:3237
 msgid "no revert in progress"
 msgstr "pas de retour en cours"
 
-#: sequencer.c:3250
+#: sequencer.c:3246
 msgid "no cherry-pick in progress"
 msgstr "aucun picorage en cours"
 
-#: sequencer.c:3260
+#: sequencer.c:3256
 msgid "failed to skip the commit"
 msgstr "échec du saut de commit"
 
-#: sequencer.c:3267
+#: sequencer.c:3263
 msgid "there is nothing to skip"
 msgstr "il n'y a rien à sauter"
 
-#: sequencer.c:3270
+#: sequencer.c:3266
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -8399,16 +8620,16 @@ msgstr ""
 "avez-vous déjà validé ?\n"
 "essayez \"git %s --continue\""
 
-#: sequencer.c:3432 sequencer.c:4503
+#: sequencer.c:3428 sequencer.c:4476
 msgid "cannot read HEAD"
 msgstr "impossible de lire HEAD"
 
-#: sequencer.c:3449
+#: sequencer.c:3445
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "impossible de copier '%s' vers '%s'"
 
-#: sequencer.c:3457
+#: sequencer.c:3453
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -8427,27 +8648,27 @@ msgstr ""
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:3467
+#: sequencer.c:3463
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "Impossible d'appliquer %s... %.*s"
 
-#: sequencer.c:3474
+#: sequencer.c:3470
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "Impossible de fusionner %.*s"
 
-#: sequencer.c:3488 sequencer.c:3492 builtin/difftool.c:633
+#: sequencer.c:3484 sequencer.c:3488 builtin/difftool.c:633
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "impossible de copier '%s' vers '%s'"
 
-#: sequencer.c:3503
+#: sequencer.c:3499
 #, c-format
 msgid "Executing: %s\n"
 msgstr "Exécution : %s\n"
 
-#: sequencer.c:3514
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -8462,11 +8683,11 @@ msgstr ""
 "git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3520
+#: sequencer.c:3516
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "et a mis à jour l'index ou l'arbre de travail\n"
 
-#: sequencer.c:3526
+#: sequencer.c:3522
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -8483,91 +8704,91 @@ msgstr ""
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3586
+#: sequencer.c:3582
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "nom de label illégal '%.*s'"
 
-#: sequencer.c:3659
+#: sequencer.c:3655
 msgid "writing fake root commit"
 msgstr "écriture d'un commit racine bidon"
 
-#: sequencer.c:3664
+#: sequencer.c:3660
 msgid "writing squash-onto"
 msgstr "écriture de 'écraser-sur'"
 
-#: sequencer.c:3743
+#: sequencer.c:3739
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "impossible de résoudre '%s'"
 
-#: sequencer.c:3775
+#: sequencer.c:3771
 msgid "cannot merge without a current revision"
 msgstr "impossible de fusionner avec une révision courante"
 
-#: sequencer.c:3797
+#: sequencer.c:3793
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "impossible d'analyser '%.*s'"
 
-#: sequencer.c:3806
+#: sequencer.c:3802
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "rien à fusionner : '%.*s'"
 
-#: sequencer.c:3818
+#: sequencer.c:3814
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr ""
 "une fusion octopus ne peut pas être exécutée par dessus une nouvelle racine"
 
-#: sequencer.c:3873
+#: sequencer.c:3869
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "impossible de lire le message de validation de '%s'"
 
-#: sequencer.c:4019
+#: sequencer.c:4013
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "impossible de seulement essayer de fusionner '%.*s'"
 
-#: sequencer.c:4035
+#: sequencer.c:4029
 msgid "merge: Unable to write new index file"
 msgstr "fusion : Impossible d'écrire le nouveau fichier index"
 
-#: sequencer.c:4116
+#: sequencer.c:4110
 msgid "Cannot autostash"
 msgstr "Autoremisage impossible"
 
-#: sequencer.c:4119
+#: sequencer.c:4113
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Réponse de remisage inattendue : '%s'"
 
-#: sequencer.c:4125
+#: sequencer.c:4119
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "Impossible de créer le répertoire pour '%s'"
 
-#: sequencer.c:4128
+#: sequencer.c:4122
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Autoremisage créé : %s\n"
 
-#: sequencer.c:4132
+#: sequencer.c:4124
 msgid "could not reset --hard"
 msgstr "impossible de réinitialiser --hard"
 
-#: sequencer.c:4157
+#: sequencer.c:4148
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Autoremisage appliqué.\n"
 
-#: sequencer.c:4169
+#: sequencer.c:4160
 #, c-format
 msgid "cannot store %s"
 msgstr "impossible de stocker %s"
 
-#: sequencer.c:4172
+#: sequencer.c:4163
 #, c-format
 msgid ""
 "%s\n"
@@ -8578,30 +8799,30 @@ msgstr ""
 "Vos  modifications sont à l'abri dans la remise.\n"
 "Vous pouvez lancer \"git stash pop\" ou \"git stash drop\" à tout moment.\n"
 
-#: sequencer.c:4177
+#: sequencer.c:4168
 msgid "Applying autostash resulted in conflicts."
 msgstr "L'application du remisage automatique a créé des conflits."
 
-#: sequencer.c:4178
+#: sequencer.c:4169
 msgid "Autostash exists; creating a new stash entry."
 msgstr ""
 "Un remisage automatique existe ; création d'une nouvelle entrée de remisage."
 
-#: sequencer.c:4252
+#: sequencer.c:4225
 msgid "could not detach HEAD"
 msgstr "impossible de détacher HEAD"
 
-#: sequencer.c:4267
+#: sequencer.c:4240
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "Arrêt à HEAD\n"
 
-#: sequencer.c:4269
+#: sequencer.c:4242
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Arrêté à %s\n"
 
-#: sequencer.c:4301
+#: sequencer.c:4274
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -8622,58 +8843,58 @@ msgstr ""
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:4347
+#: sequencer.c:4320
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "Rebasage (%d/%d)%s"
 
-#: sequencer.c:4393
+#: sequencer.c:4366
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Arrêt à %s... %.*s\n"
 
-#: sequencer.c:4463
+#: sequencer.c:4436
 #, c-format
 msgid "unknown command %d"
 msgstr "commande inconnue %d"
 
-#: sequencer.c:4511
+#: sequencer.c:4484
 msgid "could not read orig-head"
 msgstr "impossible de lire orig-head"
 
-#: sequencer.c:4516
+#: sequencer.c:4489
 msgid "could not read 'onto'"
 msgstr "impossible de lire 'onto'"
 
-#: sequencer.c:4530
+#: sequencer.c:4503
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "impossible de mettre à jour HEAD sur %s"
 
-#: sequencer.c:4590
+#: sequencer.c:4563
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "Rebasage et mise à jour de %s avec succès.\n"
 
-#: sequencer.c:4642
+#: sequencer.c:4615
 msgid "cannot rebase: You have unstaged changes."
 msgstr "impossible de rebaser : vous avez des modifications non indexées."
 
-#: sequencer.c:4651
+#: sequencer.c:4624
 msgid "cannot amend non-existing commit"
 msgstr "impossible de corriger un commit non-existant"
 
-#: sequencer.c:4653
+#: sequencer.c:4626
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "fichier invalide : '%s'"
 
-#: sequencer.c:4655
+#: sequencer.c:4628
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "contenu invalide : '%s'"
 
-#: sequencer.c:4658
+#: sequencer.c:4631
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -8683,68 +8904,68 @@ msgstr ""
 "Vous avez des modifications non validées dans votre copie de travail.\n"
 "Veuillez les valider d'abord, puis relancer 'git rebase --continue'."
 
-#: sequencer.c:4694 sequencer.c:4733
+#: sequencer.c:4667 sequencer.c:4706
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "impossible d'écrire le fichier : '%s'"
 
-#: sequencer.c:4749
+#: sequencer.c:4722
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "impossible de supprimer CHERRY_PICK_HEAD"
 
-#: sequencer.c:4759
+#: sequencer.c:4732
 msgid "could not commit staged changes."
 msgstr "impossible de valider les modifications indexées."
 
-#: sequencer.c:4879
+#: sequencer.c:4852
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s : impossible de picorer un %s"
 
-#: sequencer.c:4883
+#: sequencer.c:4856
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s : mauvaise révision"
 
-#: sequencer.c:4918
+#: sequencer.c:4891
 msgid "can't revert as initial commit"
 msgstr "impossible d'annuler en tant que commit initial"
 
-#: sequencer.c:5189 sequencer.c:5418
+#: sequencer.c:5162 sequencer.c:5391
 #, c-format
 msgid "skipped previously applied commit %s"
 msgstr "le commit %s appliqué précédemment a été sauté"
 
-#: sequencer.c:5259 sequencer.c:5434
+#: sequencer.c:5232 sequencer.c:5407
 msgid "use --reapply-cherry-picks to include skipped commits"
 msgstr "utilisez --reapply-cherry-picks pour inclure les commits sautés"
 
-#: sequencer.c:5405
+#: sequencer.c:5378
 msgid "make_script: unhandled options"
 msgstr "make_script : options non gérées"
 
-#: sequencer.c:5408
+#: sequencer.c:5381
 msgid "make_script: error preparing revisions"
 msgstr "make_script : erreur lors de la préparation des révisions"
 
-#: sequencer.c:5666 sequencer.c:5683
+#: sequencer.c:5639 sequencer.c:5656
 msgid "nothing to do"
 msgstr "rien à faire"
 
-#: sequencer.c:5702
+#: sequencer.c:5675
 msgid "could not skip unnecessary pick commands"
 msgstr "impossible d'éviter les commandes de picorage non nécessaires"
 
-#: sequencer.c:5802
+#: sequencer.c:5775
 msgid "the script was already rearranged."
 msgstr "le script a déjà été réarrangé."
 
-#: setup.c:134
+#: setup.c:135
 #, c-format
 msgid "'%s' is outside repository at '%s'"
 msgstr "'%s' est hors du dépôt à '%s'"
 
-#: setup.c:186
+#: setup.c:187
 #, c-format
 msgid ""
 "%s: no such path in the working tree.\n"
@@ -8754,7 +8975,7 @@ msgstr ""
 "Utilisez 'git <commande> -- <chemin>...' pour spécifier des chemins qui "
 "n'existent pas localement."
 
-#: setup.c:199
+#: setup.c:200
 #, c-format
 msgid ""
 "ambiguous argument '%s': unknown revision or path not in the working tree.\n"
@@ -8765,14 +8986,14 @@ msgstr ""
 "Utilisez '--' pour séparer les chemins des révisions, comme ceci :\n"
 "'git <commande> [<révision>...] -- [<chemin>...]'"
 
-#: setup.c:265
+#: setup.c:266
 #, c-format
 msgid "option '%s' must come before non-option arguments"
 msgstr ""
 "l'option '%s' doit être présente avant les arguments qui ne sont pas des "
 "options"
 
-#: setup.c:284
+#: setup.c:285
 #, c-format
 msgid ""
 "ambiguous argument '%s': both revision and filename\n"
@@ -8783,28 +9004,28 @@ msgstr ""
 "Utilisez '--' pour séparer les chemins des révisions, comme ceci :\n"
 "'git <commande> [<révision>...] -- [<chemin>...]'"
 
-#: setup.c:420
+#: setup.c:421
 msgid "unable to set up work tree using invalid config"
 msgstr ""
 "impossible de mettre en place le répertoire de travail en utilisant une "
 "configuration invalide"
 
-#: setup.c:424 builtin/rev-parse.c:895
+#: setup.c:425 builtin/rev-parse.c:895
 msgid "this operation must be run in a work tree"
 msgstr "cette opération doit être effectuée dans un arbre de travail"
 
-#: setup.c:722
+#: setup.c:724
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr "Version attendue du dépôt git <= %d, %d trouvée"
 
-#: setup.c:730
+#: setup.c:732
 msgid "unknown repository extension found:"
 msgid_plural "unknown repository extensions found:"
 msgstr[0] "extension de dépôt inconnue trouvée :"
 msgstr[1] "extensions de dépôt inconnues trouvées :"
 
-#: setup.c:744
+#: setup.c:746
 msgid "repo version is 0, but v1-only extension found:"
 msgid_plural "repo version is 0, but v1-only extensions found:"
 msgstr[0] ""
@@ -8812,75 +9033,75 @@ msgstr[0] ""
 msgstr[1] ""
 "la version du dépôt est 0, mais des extensions uniquement v1 trouvées :"
 
-#: setup.c:765
+#: setup.c:767
 #, c-format
 msgid "error opening '%s'"
 msgstr "erreur à l'ouverture de '%s'"
 
-#: setup.c:767
+#: setup.c:769
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr "trop gros pour être une fichier .git : '%s'"
 
-#: setup.c:769
+#: setup.c:771
 #, c-format
 msgid "error reading %s"
 msgstr "erreur à la lecture de %s"
 
-#: setup.c:771
+#: setup.c:773
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr "format de fichier git invalide : %s"
 
-#: setup.c:773
+#: setup.c:775
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr "aucun chemin dans le fichier git : %s"
 
-#: setup.c:775
+#: setup.c:777
 #, c-format
 msgid "not a git repository: %s"
 msgstr "ce n'est pas un dépôt git : %s"
 
-#: setup.c:877
+#: setup.c:879
 #, c-format
 msgid "'$%s' too big"
 msgstr "'$%s' trop gros"
 
-#: setup.c:891
+#: setup.c:893
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr "ce n'est pas un dépôt git : '%s'"
 
-#: setup.c:920 setup.c:922 setup.c:953
+#: setup.c:922 setup.c:924 setup.c:955
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr "impossible de se déplacer vers le répertoire (chdir) '%s'"
 
-#: setup.c:925 setup.c:981 setup.c:991 setup.c:1030 setup.c:1038
+#: setup.c:927 setup.c:983 setup.c:993 setup.c:1032 setup.c:1040
 msgid "cannot come back to cwd"
 msgstr "impossible de revenir au répertoire de travail courant"
 
-#: setup.c:1052
+#: setup.c:1054
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr "échec du stat de '%*s%s%s'"
 
-#: setup.c:1295
+#: setup.c:1338
 msgid "Unable to read current working directory"
 msgstr "Impossible d'accéder au répertoire de travail courant"
 
-#: setup.c:1304 setup.c:1310
+#: setup.c:1347 setup.c:1353
 #, c-format
 msgid "cannot change to '%s'"
 msgstr "impossible de modifier en '%s'"
 
-#: setup.c:1315
+#: setup.c:1358
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
 msgstr "ni ceci ni aucun de ses répertoires parents n'est un dépôt git : %s"
 
-#: setup.c:1321
+#: setup.c:1364
 #, c-format
 msgid ""
 "not a git repository (or any parent up to mount point %s)\n"
@@ -8891,7 +9112,20 @@ msgstr ""
 "Arrêt à la limite du système de fichiers (GIT_DISCOVERY_ACROSS_FILESYSTEM "
 "n'est pas défini)."
 
-#: setup.c:1446
+#: setup.c:1374
+#, c-format
+msgid ""
+"unsafe repository ('%s' is owned by someone else)\n"
+"To add an exception for this directory, call:\n"
+"\n"
+"\tgit config --global --add safe.directory %s"
+msgstr ""
+"dépôt non sécurisé ('%s' appartient à quelqu'un d'autre)\n"
+"Pour ajouter une exception pour ce dépôt, lancez :\n"
+"\n"
+"\tgit config --global --add safe.directory %s"
+
+#: setup.c:1502
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -8901,57 +9135,61 @@ msgstr ""
 "Le propriétaire des fichiers doit toujours avoir les droits en lecture et "
 "écriture."
 
-#: setup.c:1508
+#: setup.c:1564
 msgid "fork failed"
 msgstr "échec de la bifurcation"
 
-#: setup.c:1513
+#: setup.c:1569
 msgid "setsid failed"
 msgstr "échec du setsid"
 
-#: sparse-index.c:289
+#: sparse-index.c:285
 #, c-format
 msgid "index entry is a directory, but not sparse (%08x)"
 msgstr "l'entrée d'index est un répertoire, mais pas clairsemé (%08x)"
 
+#: split-index.c:9
+msgid "cannot use split index with a sparse index"
+msgstr "impossible d'utiliser l'index scindé avec un index clairsemé"
+
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:850
+#: strbuf.c:851
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u Gio"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:852
+#: strbuf.c:853
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u Gio/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:860
+#: strbuf.c:861
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u Mio"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:862
+#: strbuf.c:863
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u Mio/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:869
+#: strbuf.c:870
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u Kio"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:871
+#: strbuf.c:872
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u Kio/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:877
+#: strbuf.c:878
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -8959,87 +9197,87 @@ msgstr[0] "%u octet"
 msgstr[1] "%u octets"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:879
+#: strbuf.c:880
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
 msgstr[0] "%u octet/s"
 msgstr[1] "%u octets/s"
 
-#: strbuf.c:1186 wrapper.c:207 wrapper.c:377 builtin/am.c:765
-#: builtin/rebase.c:650
+#: strbuf.c:1187 wrapper.c:217 wrapper.c:387 builtin/am.c:766
+#: builtin/rebase.c:653
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "impossible d'ouvrir '%s' en écriture"
 
-#: strbuf.c:1195
+#: strbuf.c:1196
 #, c-format
 msgid "could not edit '%s'"
 msgstr "impossible d'éditer '%s'"
 
-#: submodule-config.c:237
+#: submodule-config.c:238
 #, c-format
 msgid "ignoring suspicious submodule name: %s"
 msgstr "nom de sous-module suspicieux %s ignoré"
 
-#: submodule-config.c:304
+#: submodule-config.c:305
 msgid "negative values not allowed for submodule.fetchjobs"
 msgstr "les valeurs négatives ne sont pas permises pour submodule.fetchjobs"
 
-#: submodule-config.c:402
+#: submodule-config.c:403
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr ""
 "'%s' ignoré et qui peut être interprété comme une option de ligne de "
 "commande : %s"
 
-#: submodule-config.c:499
+#: submodule-config.c:500 builtin/push.c:489 builtin/send-pack.c:148
 #, c-format
-msgid "invalid value for %s"
-msgstr "valeur invalide pour %s"
+msgid "invalid value for '%s'"
+msgstr "valeur invalide pour '%s'"
 
-#: submodule-config.c:767
+#: submodule-config.c:828
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr "Impossible de mettre à jour l'élément %s de .gitmodules"
 
-#: submodule.c:114 submodule.c:143
+#: submodule.c:115 submodule.c:144
 msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
 msgstr ""
 "Modification impossible de .gitmodules non fusionné, résolvez les conflits "
 "d'abord"
 
-#: submodule.c:118 submodule.c:147
+#: submodule.c:119 submodule.c:148
 #, c-format
 msgid "Could not find section in .gitmodules where path=%s"
 msgstr "Impossible de trouver une section où path=%s dans .gitmodules"
 
 # ici %s est un chemin
-#: submodule.c:154
+#: submodule.c:155
 #, c-format
 msgid "Could not remove .gitmodules entry for %s"
 msgstr "Impossible de supprimer l'élément de .gitmodules pour %s"
 
-#: submodule.c:165
+#: submodule.c:166
 msgid "staging updated .gitmodules failed"
 msgstr "échec de la mise en index du .gitmodules mis à jour"
 
-#: submodule.c:358
+#: submodule.c:346
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "dans le sous-module '%s' non populé"
 
-#: submodule.c:389
+#: submodule.c:377
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "Le chemin '%s' est dans le sous-module '%.*s'"
 
-#: submodule.c:466
+#: submodule.c:454
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "mauvais argument --ignore-submodules : %s"
 
-#: submodule.c:844
+#: submodule.c:866
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -9048,12 +9286,12 @@ msgstr ""
 "Le sous-module dans le commit %s au chemin : '%s' entre en collision avec un "
 "sous-module du même nom. Ignoré."
 
-#: submodule.c:954
+#: submodule.c:987
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr "l'entrée de sous-module '%s' (%s) est un %s, pas un commit"
 
-#: submodule.c:1042
+#: submodule.c:1069
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
@@ -9062,36 +9300,46 @@ msgstr ""
 "Impossible de lancer la commande 'git rev-list <commits> --not --remotes -n "
 "1' dans le sous-module %s"
 
-#: submodule.c:1165
+#: submodule.c:1192
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "le processus pour le sous-module '%s' a échoué"
 
-#: submodule.c:1194 builtin/branch.c:699 builtin/submodule--helper.c:2714
+#: submodule.c:1221 builtin/branch.c:714 builtin/submodule--helper.c:2827
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "Échec de résolution de HEAD comme référence valide."
 
-#: submodule.c:1205
+#: submodule.c:1232
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "Poussée du sous-module '%s'\n"
 
-#: submodule.c:1208
+#: submodule.c:1235
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "Impossible de pousser le sous-module '%s'\n"
 
-#: submodule.c:1491
+#: submodule.c:1567
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "Récupération du sous-module %s%s\n"
 
-#: submodule.c:1525
+#: submodule.c:1589
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "Impossible d'accéder au sous-module '%s'\n"
 
-#: submodule.c:1680
+#: submodule.c:1618
+#, c-format
+msgid "Could not access submodule '%s' at commit %s\n"
+msgstr "Impossible d'accéder au sous-module '%s' au commit %s\n"
+
+#: submodule.c:1629
+#, c-format
+msgid "Fetching submodule %s%s at commit %s\n"
+msgstr "Récupération du sous-module %s%s au commit %s\n"
+
+#: submodule.c:1849
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -9100,63 +9348,63 @@ msgstr ""
 "Erreurs pendant la récupération du sous-module :\n"
 "%s"
 
-#: submodule.c:1705
+#: submodule.c:1874
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "'%s' n'est pas reconnu comme dépôt git"
 
-#: submodule.c:1722
+#: submodule.c:1891
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr "impossible de lancer 'git status --porcelain=2' dans le sous-module %s"
 
-#: submodule.c:1763
+#: submodule.c:1932
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr "'git status --porcelain=2' a échoué dans le sous-module %s"
 
-#: submodule.c:1838
+#: submodule.c:2007
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "impossible de démarrer 'git status' dans le sous-module '%s'"
 
-#: submodule.c:1851
+#: submodule.c:2020
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "impossible de lancer 'git status' dans le sous-module '%s'"
 
-#: submodule.c:1868
+#: submodule.c:2037
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr "Impossible de désactiver core.worktree dans le sous-module '%s'"
 
-#: submodule.c:1895 submodule.c:2210
+#: submodule.c:2064 submodule.c:2379
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr "récursion impossible dans le sous-module '%s'"
 
-#: submodule.c:1917
+#: submodule.c:2086
 msgid "could not reset submodule index"
 msgstr "impossible de réinitialiser l'index du sous-module"
 
-#: submodule.c:1959
+#: submodule.c:2128
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "le sous-module '%s' a un index sale"
 
-#: submodule.c:2013
+#: submodule.c:2182
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "Le sous-module '%s' n'a pas pu être mis à jour."
 
-#: submodule.c:2081
+#: submodule.c:2250
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr ""
 "le répertoire git du sous-module '%s' est à l'intérieur du répertoire git "
 "'%.*s'"
 
-#: submodule.c:2102
+#: submodule.c:2271
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -9164,17 +9412,17 @@ msgstr ""
 "relocate_gitdir pour le sous-module '%s' avec plus d'un arbre de travail "
 "n'est pas supporté"
 
-#: submodule.c:2114 submodule.c:2174
+#: submodule.c:2283 submodule.c:2343
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "impossible de trouve le nom pour le sous-module '%s'"
 
-#: submodule.c:2118
+#: submodule.c:2287
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr "refus de déplacer '%s' dans une répertoire git existant"
 
-#: submodule.c:2124
+#: submodule.c:2293
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -9185,11 +9433,11 @@ msgstr ""
 "'%s' sur\n"
 "'%s'\n"
 
-#: submodule.c:2255
+#: submodule.c:2424
 msgid "could not start ls-files in .."
 msgstr "impossible de démarrer ls-files dans .."
 
-#: submodule.c:2295
+#: submodule.c:2464
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree a renvoyé un code de retour inattendu %d"
@@ -9210,8 +9458,8 @@ msgstr "échec de la commande trailer '%s'"
 msgid "unknown value '%s' for key '%s'"
 msgstr "valeur inconnue '%s' pour la clé '%s'"
 
-#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
-#: builtin/remote.c:327
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:300
+#: builtin/remote.c:328
 #, c-format
 msgid "more than one %s"
 msgstr "plus d'un %s"
@@ -9226,11 +9474,11 @@ msgstr "symbole vide dans la ligne de fin '%.*s'"
 msgid "could not read input file '%s'"
 msgstr "impossible de lire le fichier d'entrée '%s'"
 
-#: trailer.c:766 builtin/mktag.c:89 imap-send.c:1573
+#: trailer.c:766 builtin/mktag.c:88 imap-send.c:1563
 msgid "could not read from stdin"
 msgstr "impossible de lire depuis l'entrée standard"
 
-#: trailer.c:1024 wrapper.c:684
+#: trailer.c:1024 wrapper.c:760
 #, c-format
 msgid "could not stat %s"
 msgstr "stat impossible de %s"
@@ -9299,7 +9547,7 @@ msgstr "impossible de lancer fast-import"
 msgid "error while running fast-import"
 msgstr "erreur au lancement de fast-import"
 
-#: transport-helper.c:549 transport-helper.c:1251
+#: transport-helper.c:549 transport-helper.c:1254
 #, c-format
 msgid "could not read ref %s"
 msgstr "impossible de lire la réf %s"
@@ -9319,7 +9567,7 @@ msgstr ""
 msgid "invalid remote service path"
 msgstr "chemin de service distant invalide"
 
-#: transport-helper.c:661 transport.c:1479
+#: transport-helper.c:661 transport.c:1496
 msgid "operation not supported by protocol"
 msgstr "option non supportée par le protocole"
 
@@ -9328,74 +9576,74 @@ msgstr "option non supportée par le protocole"
 msgid "can't connect to subservice %s"
 msgstr "impossible de se connecter au sous-service %s"
 
-#: transport-helper.c:693 transport.c:404
+#: transport-helper.c:693 transport.c:415
 msgid "--negotiate-only requires protocol v2"
 msgstr "--negotiate-only requiert le protocole v2"
 
-#: transport-helper.c:755
+#: transport-helper.c:758
 msgid "'option' without a matching 'ok/error' directive"
 msgstr "'option' sans directive 'ok/error' correspondante"
 
-#: transport-helper.c:798
+#: transport-helper.c:801
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "ok/error attendu, l'assistant a dit '%s'"
 
-#: transport-helper.c:859
+#: transport-helper.c:862
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "l'assistant a renvoyé un statut de retour inattendu %s"
 
-#: transport-helper.c:942
+#: transport-helper.c:945
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "l'assistant %s ne gère pas dry-run"
 
-#: transport-helper.c:945
+#: transport-helper.c:948
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "l'assistant %s ne gère pas --signed"
 
-#: transport-helper.c:948
+#: transport-helper.c:951
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "l'assistant %s ne gère pas --signed=if-asked"
 
-#: transport-helper.c:953
+#: transport-helper.c:956
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr "l'assistant %s ne gère pas --atomic"
 
-#: transport-helper.c:957
+#: transport-helper.c:960
 #, c-format
 msgid "helper %s does not support --%s"
 msgstr "l'assistant %s ne gère pas --%s"
 
-#: transport-helper.c:964
+#: transport-helper.c:967
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "l'assistant %s ne gère pas 'push-option'"
 
-#: transport-helper.c:1064
+#: transport-helper.c:1067
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr ""
 "l'assistant %s ne gère pas push ; un spécificateur de référence est "
 "nécessaire"
 
-#: transport-helper.c:1069
+#: transport-helper.c:1072
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "l'assistant %s ne gère pas 'force'"
 
-#: transport-helper.c:1116
+#: transport-helper.c:1119
 msgid "couldn't run fast-export"
 msgstr "impossible de lancer fast-export"
 
-#: transport-helper.c:1121
+#: transport-helper.c:1124
 msgid "error while running fast-export"
 msgstr "erreur au lancement de fast-export"
 
-#: transport-helper.c:1146
+#: transport-helper.c:1149
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -9404,52 +9652,52 @@ msgstr ""
 "Aucune référence en commun et aucune spécfiée ; rien à faire.\n"
 "Vous devriez peut-être spécifier une branche.\n"
 
-#: transport-helper.c:1228
+#: transport-helper.c:1231
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr "format d'objet non géré '%s'"
 
-#: transport-helper.c:1237
+#: transport-helper.c:1240
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "réponse malformée dans le liste de réfs : %s"
 
-#: transport-helper.c:1389
+#: transport-helper.c:1392
 #, c-format
 msgid "read(%s) failed"
 msgstr "échec de read(%s)"
 
-#: transport-helper.c:1416
+#: transport-helper.c:1419
 #, c-format
 msgid "write(%s) failed"
 msgstr "échec de write(%s)"
 
-#: transport-helper.c:1465
+#: transport-helper.c:1468
 #, c-format
 msgid "%s thread failed"
 msgstr "échec du fil d'exécution %s"
 
-#: transport-helper.c:1469
+#: transport-helper.c:1472
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "échec de jonction du fil d'exécution %s : %s"
 
-#: transport-helper.c:1488 transport-helper.c:1492
+#: transport-helper.c:1491 transport-helper.c:1495
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "impossible de démarrer le fil d'exécution pour copier les données : %s"
 
-#: transport-helper.c:1529
+#: transport-helper.c:1532
 #, c-format
 msgid "%s process failed to wait"
 msgstr "échec du processus %s pour l'attente"
 
-#: transport-helper.c:1533
+#: transport-helper.c:1536
 #, c-format
 msgid "%s process failed"
 msgstr "échec du processus %s"
 
-#: transport-helper.c:1551 transport-helper.c:1560
+#: transport-helper.c:1554 transport-helper.c:1563
 msgid "can't start thread for copying data"
 msgstr "impossible de démarrer le fil d'exécution pour copier les données"
 
@@ -9458,51 +9706,51 @@ msgstr "impossible de démarrer le fil d'exécution pour copier les données"
 msgid "Would set upstream of '%s' to '%s' of '%s'\n"
 msgstr "Positionnerait la branche amont de '%s' sur '%s' de '%s'\n"
 
-#: transport.c:145
+#: transport.c:138
 #, c-format
 msgid "could not read bundle '%s'"
 msgstr "impossible de lire la liasse '%s'"
 
-#: transport.c:227
+#: transport.c:234
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr "transport : option de profondeur invalide '%s'"
 
-#: transport.c:279
+#: transport.c:289
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "voir protocol.version dans 'git help config' pour plus d'information"
 
-#: transport.c:280
+#: transport.c:290
 msgid "server options require protocol version 2 or later"
 msgstr "les options de serveur exigent une version 2 ou supérieure"
 
-#: transport.c:407
+#: transport.c:418
 msgid "server does not support wait-for-done"
 msgstr "le serveur ne prend pas en charge wait-for-done"
 
-#: transport.c:759
+#: transport.c:770
 msgid "could not parse transport.color.* config"
 msgstr "impossible d'analyser la configuration transport.color.*"
 
-#: transport.c:834
+#: transport.c:845
 msgid "support for protocol v2 not implemented yet"
 msgstr "le support du protocole v2 n'est pas encore implanté"
 
-#: transport.c:967
+#: transport.c:978
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "valeur inconnue pour la config '%s' : %s"
 
-#: transport.c:1033
+#: transport.c:1044
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "transport '%s' non permis"
 
-#: transport.c:1082
+#: transport.c:1093
 msgid "git-over-rsync is no longer supported"
 msgstr "git-over-rsync n'est plus supporté"
 
-#: transport.c:1185
+#: transport.c:1196
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -9511,7 +9759,7 @@ msgstr ""
 "Les chemins suivants de sous-module contiennent des modifications\n"
 "qui ne peuvent être trouvées sur aucun distant :\n"
 
-#: transport.c:1189
+#: transport.c:1200
 #, c-format
 msgid ""
 "\n"
@@ -9538,11 +9786,11 @@ msgstr ""
 "pour les pousser vers un serveur distant.\n"
 "\n"
 
-#: transport.c:1197
+#: transport.c:1208
 msgid "Aborting."
 msgstr "Abandon."
 
-#: transport.c:1343
+#: transport.c:1354
 msgid "failed to push all needed submodules"
 msgstr "échec de la poussée de tous les sous-modules nécessaires"
 
@@ -9830,17 +10078,17 @@ msgstr ""
 "sensibles à la casse dans une système de fichier insensible) et un\n"
 "seul du groupe en collision est dans l'arbre de travail :\n"
 
-#: unpack-trees.c:1636
+#: unpack-trees.c:1664
 msgid "Updating index flags"
 msgstr "Mise à jour des drapeaux de l'index"
 
-#: unpack-trees.c:2803
+#: unpack-trees.c:2925
 #, c-format
 msgid "worktree and untracked commit have duplicate entries: %s"
 msgstr ""
 "l'arbre de travail et le commit non suivi ont des entrées dupliquées : %s"
 
-#: upload-pack.c:1565
+#: upload-pack.c:1579
 msgid "expected flush after fetch arguments"
 msgstr "vidage attendu après les arguments de récupération"
 
@@ -9877,128 +10125,142 @@ msgstr "segment de chemin '..' invalide"
 msgid "Fetching objects"
 msgstr "Récupération des objets"
 
-#: worktree.c:238 builtin/am.c:2209 builtin/bisect--helper.c:156
+#: worktree.c:237 builtin/am.c:2210 builtin/bisect--helper.c:156
 #, c-format
 msgid "failed to read '%s'"
 msgstr "échec de la lecture de '%s'"
 
-#: worktree.c:305
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr ""
 "'%s' dans l'arbre de travail principal n'est pas le répertoire de dépôt"
 
-#: worktree.c:316
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr ""
 "le fichier '%s' ne contient pas de chemin absolu à l'emplacement de l'arbre "
 "de travail"
 
-#: worktree.c:328
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr "'%s' n'existe pas"
 
-#: worktree.c:334
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr "'%s' n'est pas un fichier .git, code d'erreur %d"
 
-#: worktree.c:343
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "'%s' ne pointe pas en retour sur '%s'"
 
-#: worktree.c:604
+#: worktree.c:600
 msgid "not a directory"
 msgstr "pas un répertoire"
 
-#: worktree.c:613
+#: worktree.c:609
 msgid ".git is not a file"
 msgstr ".git n'est pas un fichier"
 
-#: worktree.c:615
+#: worktree.c:611
 msgid ".git file broken"
 msgstr "fichier .git cassé"
 
-#: worktree.c:617
+#: worktree.c:613
 msgid ".git file incorrect"
 msgstr "fichier .git incorrect"
 
-#: worktree.c:723
+#: worktree.c:719
 msgid "not a valid path"
 msgstr "pas un chemin valide"
 
-#: worktree.c:729
+#: worktree.c:725
 msgid "unable to locate repository; .git is not a file"
 msgstr "impossible de localiser le dépôt ; .git n'est pas un fichier"
 
-#: worktree.c:733
+#: worktree.c:729
 msgid "unable to locate repository; .git file does not reference a repository"
 msgstr ""
 "impossible de localiser le dépôt ; .git ne fait pas référence à un dépôt"
 
-#: worktree.c:737
+#: worktree.c:733
 msgid "unable to locate repository; .git file broken"
 msgstr "impossible de localiser le dépôt ; fichier .git cassé"
 
-#: worktree.c:743
+#: worktree.c:739
 msgid "gitdir unreadable"
 msgstr "gitdir non lisible"
 
-#: worktree.c:747
+#: worktree.c:743
 msgid "gitdir incorrect"
 msgstr "gitdir incorrect"
 
-#: worktree.c:772
+#: worktree.c:768
 msgid "not a valid directory"
 msgstr "pas un répertoire valide"
 
-#: worktree.c:778
+#: worktree.c:774
 msgid "gitdir file does not exist"
 msgstr "le fichier gitdir n'existe pas"
 
-#: worktree.c:783 worktree.c:792
+#: worktree.c:779 worktree.c:788
 #, c-format
 msgid "unable to read gitdir file (%s)"
 msgstr "impossible de lire le fichier gitdir (%s)"
 
-#: worktree.c:802
+#: worktree.c:798
 #, c-format
 msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
 msgstr ""
 "lecture trop courte ( %<PRIuMAX> octets attendus, %<PRIuMAX> octets lus)"
 
-#: worktree.c:810
+#: worktree.c:806
 msgid "invalid gitdir file"
 msgstr "fichier gitdir invalide"
 
-#: worktree.c:818
+#: worktree.c:814
 msgid "gitdir file points to non-existent location"
 msgstr "le fichier gitdir pointe sur un endroit inexistant"
 
-#: wrapper.c:151
+#: worktree.c:830
+#, c-format
+msgid "unable to set %s in '%s'"
+msgstr "impossible de définir la clé %s dans '%s'"
+
+#: worktree.c:832
+#, c-format
+msgid "unable to unset %s in '%s'"
+msgstr "impossible de désinitialiser %s dans '%s'"
+
+#: worktree.c:852
+msgid "failed to set extensions.worktreeConfig setting"
+msgstr "échec de paramétrage extensions.worktreeConfig"
+
+#: wrapper.c:161
 #, c-format
 msgid "could not setenv '%s'"
 msgstr "impossible de configurer l'environnement '%s'"
 
-#: wrapper.c:203
+#: wrapper.c:213
 #, c-format
 msgid "unable to create '%s'"
 msgstr "impossible de créer '%s'"
 
-#: wrapper.c:205 wrapper.c:375
+#: wrapper.c:215 wrapper.c:385
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr "impossible d'ouvrir '%s' en lecture/écriture"
 
-#: wrapper.c:406 wrapper.c:607
+#: wrapper.c:416 wrapper.c:683
 #, c-format
 msgid "unable to access '%s'"
 msgstr "impossible d'accéder à '%s'"
 
-#: wrapper.c:615
+#: wrapper.c:691
 msgid "unable to get current working directory"
 msgstr "impossible d'accéder au répertoire de travail courant"
 
@@ -10035,11 +10297,11 @@ msgstr ""
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr "  (utilisez \"git rm <fichier>...\" pour marquer comme résolu)"
 
-#: wt-status.c:211 wt-status.c:1131
+#: wt-status.c:211 wt-status.c:1140
 msgid "Changes to be committed:"
 msgstr "Modifications qui seront validées :"
 
-#: wt-status.c:234 wt-status.c:1140
+#: wt-status.c:234 wt-status.c:1149
 msgid "Changes not staged for commit:"
 msgstr "Modifications qui ne seront pas validées :"
 
@@ -10144,22 +10406,22 @@ msgstr "contenu modifié, "
 msgid "untracked content, "
 msgstr "contenu non suivi, "
 
-#: wt-status.c:964
+#: wt-status.c:973
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] "Votre remisage contient actuellement %d entrée"
 msgstr[1] "Votre remisage contient actuellement %d entrées"
 
-#: wt-status.c:995
+#: wt-status.c:1004
 msgid "Submodules changed but not updated:"
 msgstr "Sous-modules modifiés mais non mis à jour :"
 
-#: wt-status.c:997
+#: wt-status.c:1006
 msgid "Submodule changes to be committed:"
 msgstr "Changements du sous-module à valider :"
 
-#: wt-status.c:1079
+#: wt-status.c:1088
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -10167,7 +10429,7 @@ msgstr ""
 "Ne touchez pas à la ligne ci-dessus.\n"
 "Tout ce qui suit sera éliminé."
 
-#: wt-status.c:1171
+#: wt-status.c:1180
 #, c-format
 msgid ""
 "\n"
@@ -10179,114 +10441,114 @@ msgstr ""
 "de la branche.\n"
 "Vous pouvez utiliser '--no-ahead-behind' pour éviter ceci.\n"
 
-#: wt-status.c:1201
+#: wt-status.c:1210
 msgid "You have unmerged paths."
 msgstr "Vous avez des chemins non fusionnés."
 
-#: wt-status.c:1204
+#: wt-status.c:1213
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (réglez les conflits puis lancez \"git commit\")"
 
-#: wt-status.c:1206
+#: wt-status.c:1215
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (utilisez \"git merge --abort\" pour annuler la fusion)"
 
-#: wt-status.c:1210
+#: wt-status.c:1219
 msgid "All conflicts fixed but you are still merging."
 msgstr "Tous les conflits sont réglés mais la fusion n'est pas terminée."
 
-#: wt-status.c:1213
+#: wt-status.c:1222
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (utilisez \"git commit\" pour terminer la fusion)"
 
-#: wt-status.c:1224
+#: wt-status.c:1233
 msgid "You are in the middle of an am session."
 msgstr "Vous êtes au milieu d'une session am."
 
-#: wt-status.c:1227
+#: wt-status.c:1236
 msgid "The current patch is empty."
 msgstr "Le patch actuel est vide."
 
-#: wt-status.c:1232
+#: wt-status.c:1241
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (réglez les conflits puis lancez \"git am --continue\")"
 
-#: wt-status.c:1234
+#: wt-status.c:1243
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (utilisez \"git am --skip\" pour sauter ce patch)"
 
-#: wt-status.c:1237
+#: wt-status.c:1246
 msgid ""
 "  (use \"git am --allow-empty\" to record this patch as an empty commit)"
 msgstr ""
 "  (utilisez \"git am --allow-empty\" pour enregistrer la rustine comme un "
 "commit vide)"
 
-#: wt-status.c:1239
+#: wt-status.c:1248
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr "  (utilisez \"git am --abort\" pour restaurer la branche d'origine)"
 
-#: wt-status.c:1372
+#: wt-status.c:1381
 msgid "git-rebase-todo is missing."
 msgstr "git-rebase-todo est manquant."
 
-#: wt-status.c:1374
+#: wt-status.c:1383
 msgid "No commands done."
 msgstr "Aucune commande réalisée."
 
-#: wt-status.c:1377
+#: wt-status.c:1386
 #, c-format
-msgid "Last command done (%d command done):"
-msgid_plural "Last commands done (%d commands done):"
-msgstr[0] "Dernière commande effectuée (%d commande effectuée) :"
-msgstr[1] "Dernières commandes effectuées (%d commandes effectuées) :"
+msgid "Last command done (%<PRIuMAX> command done):"
+msgid_plural "Last commands done (%<PRIuMAX> commands done):"
+msgstr[0] "Dernière commande effectuée (%<PRIuMAX> commande effectuée) :"
+msgstr[1] "Dernières commandes effectuées (%<PRIuMAX> commandes effectuées) :"
 
-#: wt-status.c:1388
+#: wt-status.c:1397
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (voir plus dans le fichier %s)"
 
-#: wt-status.c:1393
+#: wt-status.c:1402
 msgid "No commands remaining."
 msgstr "Aucune commande restante."
 
-#: wt-status.c:1396
+#: wt-status.c:1405
 #, c-format
-msgid "Next command to do (%d remaining command):"
-msgid_plural "Next commands to do (%d remaining commands):"
-msgstr[0] "Prochaine commande à effectuer (%d commande restante) :"
-msgstr[1] "Prochaines commandes à effectuer (%d commandes restantes) :"
+msgid "Next command to do (%<PRIuMAX> remaining command):"
+msgid_plural "Next commands to do (%<PRIuMAX> remaining commands):"
+msgstr[0] "Prochaine commande à effectuer (%<PRIuMAX> commande restante) :"
+msgstr[1] "Prochaines commandes à effectuer (%<PRIuMAX> commandes restantes) :"
 
-#: wt-status.c:1404
+#: wt-status.c:1413
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr "  (utilisez \"git rebase --edit-todo\" pour voir et éditer)"
 
-#: wt-status.c:1416
+#: wt-status.c:1425
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "Vous êtes en train de rebaser la branche '%s' sur '%s'."
 
-#: wt-status.c:1421
+#: wt-status.c:1430
 msgid "You are currently rebasing."
 msgstr "Vous êtes en train de rebaser."
 
-#: wt-status.c:1434
+#: wt-status.c:1443
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr "  (réglez les conflits puis lancez \"git rebase --continue\")"
 
-#: wt-status.c:1436
+#: wt-status.c:1445
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (utilisez \"git rebase --skip\" pour sauter ce patch)"
 
-#: wt-status.c:1438
+#: wt-status.c:1447
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr "  (utilisez \"git rebase --abort\" pour extraire la branche d'origine)"
 
-#: wt-status.c:1445
+#: wt-status.c:1454
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr "  (tous les conflits sont réglés : lancez \"git rebase --continue\")"
 
-#: wt-status.c:1449
+#: wt-status.c:1458
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
@@ -10294,163 +10556,163 @@ msgstr ""
 "Vous êtes actuellement en train de fractionner un commit pendant un rebasage "
 "de la branche '%s' sur '%s'."
 
-#: wt-status.c:1454
+#: wt-status.c:1463
 msgid "You are currently splitting a commit during a rebase."
 msgstr ""
 "Vous êtes actuellement en train de fractionner un commit pendant un rebasage."
 
-#: wt-status.c:1457
+#: wt-status.c:1466
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr ""
 "  (Une fois la copie de travail nettoyée, lancez \"git rebase --continue\")"
 
-#: wt-status.c:1461
+#: wt-status.c:1470
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr ""
 "Vous êtes actuellement en train d'éditer un commit pendant un rebasage de la "
 "branche '%s' sur '%s'."
 
-#: wt-status.c:1466
+#: wt-status.c:1475
 msgid "You are currently editing a commit during a rebase."
 msgstr ""
 "Vous êtes actuellement en train d'éditer un commit pendant un rebasage."
 
-#: wt-status.c:1469
+#: wt-status.c:1478
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr "  (utilisez \"git commit --amend\" pour corriger le commit actuel)"
 
-#: wt-status.c:1471
+#: wt-status.c:1480
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr ""
 "  (utilisez \"git rebase --continue\" quand vous avez effectué toutes vos "
 "modifications)"
 
-#: wt-status.c:1482
+#: wt-status.c:1491
 msgid "Cherry-pick currently in progress."
 msgstr "Picorage en cours."
 
-#: wt-status.c:1485
+#: wt-status.c:1494
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "Vous êtes actuellement en train de picorer le commit %s."
 
-#: wt-status.c:1492
+#: wt-status.c:1501
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr "  (réglez les conflits puis lancez \"git cherry-pick --continue\")"
 
-#: wt-status.c:1495
+#: wt-status.c:1504
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (lancez \"git cherry-pick --continue\" pour continuer)"
 
-#: wt-status.c:1498
+#: wt-status.c:1507
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr ""
 "  (tous les conflits sont réglés : lancez \"git cherry-pick --continue\")"
 
-#: wt-status.c:1500
+#: wt-status.c:1509
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr "  (utilisez \"git cherry-pick --skip\" pour sauter ce patch)"
 
-#: wt-status.c:1502
+#: wt-status.c:1511
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr "  (utilisez \"git cherry-pick --abort\" pour annuler le picorage)"
 
-#: wt-status.c:1512
+#: wt-status.c:1521
 msgid "Revert currently in progress."
 msgstr "Rétablissement en cours."
 
-#: wt-status.c:1515
+#: wt-status.c:1524
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Vous êtes actuellement en train de rétablir le commit %s."
 
-#: wt-status.c:1521
+#: wt-status.c:1530
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (réglez les conflits puis lancez \"git revert --continue\")"
 
-#: wt-status.c:1524
+#: wt-status.c:1533
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (lancez \"git revert --continue\" pour continuer)"
 
-#: wt-status.c:1527
+#: wt-status.c:1536
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (tous les conflits sont réglés : lancez \"git revert --continue\")"
 
-#: wt-status.c:1529
+#: wt-status.c:1538
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr "  (utilisez \"git revert --skip\" pour sauter ce patch)"
 
-#: wt-status.c:1531
+#: wt-status.c:1540
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (utilisez \"git revert --abort\" pour annuler le rétablissement)"
 
-#: wt-status.c:1541
+#: wt-status.c:1550
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "Vous êtes en cours de bissection, depuis la branche '%s'."
 
-#: wt-status.c:1545
+#: wt-status.c:1554
 msgid "You are currently bisecting."
 msgstr "Vous êtes en cours de bissection."
 
-#: wt-status.c:1548
+#: wt-status.c:1557
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (utilisez \"git bisect reset\" pour revenir à la branche d'origine)"
 
-#: wt-status.c:1559
+#: wt-status.c:1568
 msgid "You are in a sparse checkout."
 msgstr "Vous êtes dans une extraction clairsemée."
 
-#: wt-status.c:1562
+#: wt-status.c:1571
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
 msgstr ""
 "Vous êtes dans une extraction partielle avec %d %% de fichiers suivis "
 "présents."
 
-#: wt-status.c:1806
+#: wt-status.c:1815
 msgid "On branch "
 msgstr "Sur la branche "
 
-#: wt-status.c:1813
+#: wt-status.c:1822
 msgid "interactive rebase in progress; onto "
 msgstr "rebasage interactif en cours ; sur "
 
-#: wt-status.c:1815
+#: wt-status.c:1824
 msgid "rebase in progress; onto "
 msgstr "rebasage en cours ; sur "
 
-#: wt-status.c:1820
+#: wt-status.c:1829
 msgid "HEAD detached at "
 msgstr "HEAD détachée sur "
 
-#: wt-status.c:1822
+#: wt-status.c:1831
 msgid "HEAD detached from "
 msgstr "HEAD détachée depuis "
 
-#: wt-status.c:1825
+#: wt-status.c:1834
 msgid "Not currently on any branch."
 msgstr "Actuellement sur aucun branche."
 
-#: wt-status.c:1842
+#: wt-status.c:1851
 msgid "Initial commit"
 msgstr "Validation initiale"
 
-#: wt-status.c:1843
+#: wt-status.c:1852
 msgid "No commits yet"
 msgstr "Aucun commit"
 
-#: wt-status.c:1857
+#: wt-status.c:1866
 msgid "Untracked files"
 msgstr "Fichiers non suivis"
 
-#: wt-status.c:1859
+#: wt-status.c:1868
 msgid "Ignored files"
 msgstr "Fichiers ignorés"
 
-#: wt-status.c:1863
+#: wt-status.c:1872
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -10462,32 +10724,32 @@ msgstr ""
 "oublier d'ajouter les nouveaux fichiers par vous-même (voir 'git help "
 "status')."
 
-#: wt-status.c:1869
+#: wt-status.c:1878
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Fichiers non suivis non affichés%s"
 
-#: wt-status.c:1871
+#: wt-status.c:1880
 msgid " (use -u option to show untracked files)"
 msgstr " (utilisez -u pour afficher les fichiers non suivis)"
 
-#: wt-status.c:1877
+#: wt-status.c:1886
 msgid "No changes"
 msgstr "Aucune modification"
 
-#: wt-status.c:1882
+#: wt-status.c:1891
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 "aucune modification n'a été ajoutée à la validation (utilisez \"git add\" ou "
 "\"git commit -a\")\n"
 
-#: wt-status.c:1886
+#: wt-status.c:1895
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "aucune modification ajoutée à la validation\n"
 
-#: wt-status.c:1890
+#: wt-status.c:1899
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -10496,66 +10758,66 @@ msgstr ""
 "aucune modification ajoutée à la validation mais des fichiers non suivis "
 "sont présents (utilisez \"git add\" pour les suivre)\n"
 
-#: wt-status.c:1894
+#: wt-status.c:1903
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr ""
 "aucune modification ajoutée à la validation mais des fichiers non suivis "
 "sont présents\n"
 
-#: wt-status.c:1898
+#: wt-status.c:1907
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 "rien à valider (créez/copiez des fichiers et utilisez \"git add\" pour les "
 "suivre)\n"
 
-#: wt-status.c:1902 wt-status.c:1908
+#: wt-status.c:1911 wt-status.c:1917
 #, c-format
 msgid "nothing to commit\n"
 msgstr "rien à valider\n"
 
-#: wt-status.c:1905
+#: wt-status.c:1914
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr "rien à valider (utilisez -u pour afficher les fichiers non suivis)\n"
 
-#: wt-status.c:1910
+#: wt-status.c:1919
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "rien à valider, la copie de travail est propre\n"
 
-#: wt-status.c:2015
+#: wt-status.c:2024
 msgid "No commits yet on "
 msgstr "Encore aucun commit sur "
 
-#: wt-status.c:2019
+#: wt-status.c:2028
 msgid "HEAD (no branch)"
 msgstr "HEAD (aucune branche)"
 
-#: wt-status.c:2050
+#: wt-status.c:2059
 msgid "different"
 msgstr "différent"
 
-#: wt-status.c:2052 wt-status.c:2060
+#: wt-status.c:2061 wt-status.c:2069
 msgid "behind "
 msgstr "derrière "
 
-#: wt-status.c:2055 wt-status.c:2058
+#: wt-status.c:2064 wt-status.c:2067
 msgid "ahead "
 msgstr "devant "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2596
+#: wt-status.c:2605
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "impossible de %s : vous avez des modifications non indexées."
 
-#: wt-status.c:2602
+#: wt-status.c:2611
 msgid "additionally, your index contains uncommitted changes."
 msgstr "de plus, votre index contient des modifications non validées."
 
-#: wt-status.c:2604
+#: wt-status.c:2613
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "%s impossible : votre index contient des modifications non validées."
@@ -10578,151 +10840,155 @@ msgstr "impossible de démarrer accept_thread '%s'"
 msgid "could not start worker[0] for '%s'"
 msgstr "impossible de démarrer worker[0] pour '%s'"
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:347
+#: compat/precompose_utf8.c:58 builtin/clone.c:353
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "échec pour délier '%s'"
 
+#: compat/fsmonitor/fsm-listen-darwin.c:355
+msgid "Unable to create FSEventStream."
+msgstr "impossible de créer FSEVEntStream."
+
+#: compat/fsmonitor/fsm-listen-darwin.c:403
+msgid "Failed to start the FSEventStream"
+msgstr "Échec de démarrage de FSEVEntStream"
+
 #: builtin/add.c:26
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<options>] [--] <chemin>..."
 
-#: builtin/add.c:64
+#: builtin/add.c:63
 #, c-format
 msgid "cannot chmod %cx '%s'"
 msgstr "impossible de chmod %cx '%s'"
 
-#: builtin/add.c:106
+#: builtin/add.c:105
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "état de diff inattendu %c"
 
-#: builtin/add.c:111 builtin/commit.c:298
+#: builtin/add.c:110 builtin/commit.c:299
 msgid "updating files failed"
 msgstr "échec de la mise à jour des fichiers"
 
-#: builtin/add.c:121
+#: builtin/add.c:120
 #, c-format
 msgid "remove '%s'\n"
 msgstr "suppression de '%s'\n"
 
-#: builtin/add.c:205
+#: builtin/add.c:204
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Modifications non indexées après rafraîchissement de l'index :"
 
-#: builtin/add.c:313 builtin/rev-parse.c:993
+#: builtin/add.c:312 builtin/rev-parse.c:993
 msgid "Could not read the index"
 msgstr "Impossible de lire l'index"
 
-#: builtin/add.c:326
+#: builtin/add.c:325
 msgid "Could not write patch"
 msgstr "Impossible d'écrire le patch"
 
-#: builtin/add.c:329
+#: builtin/add.c:328
 msgid "editing patch failed"
 msgstr "échec de l'édition du patch"
 
-#: builtin/add.c:332
+#: builtin/add.c:331
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "Stat de '%s' impossible"
 
-#: builtin/add.c:334
+#: builtin/add.c:333
 msgid "Empty patch. Aborted."
 msgstr "Patch vide. Abandon."
 
-#: builtin/add.c:340
+#: builtin/add.c:339
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "Impossible d'appliquer '%s'"
 
-#: builtin/add.c:348
+#: builtin/add.c:347
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr ""
 "Les chemins suivants sont ignorés par un de vos fichiers .gitignore :\n"
 
-#: builtin/add.c:368 builtin/clean.c:927 builtin/fetch.c:174 builtin/mv.c:124
+#: builtin/add.c:367 builtin/clean.c:927 builtin/fetch.c:175 builtin/mv.c:124
 #: builtin/prune-packed.c:14 builtin/pull.c:208 builtin/push.c:550
-#: builtin/remote.c:1429 builtin/rm.c:244 builtin/send-pack.c:194
+#: builtin/remote.c:1454 builtin/rm.c:244 builtin/send-pack.c:194
 msgid "dry run"
 msgstr "simuler l'action"
 
-#: builtin/add.c:369 builtin/check-ignore.c:22 builtin/commit.c:1484
-#: builtin/count-objects.c:98 builtin/fsck.c:789 builtin/log.c:2313
+#: builtin/add.c:368 builtin/check-ignore.c:22 builtin/commit.c:1483
+#: builtin/count-objects.c:98 builtin/fsck.c:789 builtin/log.c:2338
 #: builtin/mv.c:123 builtin/read-tree.c:120
 msgid "be verbose"
 msgstr "mode verbeux"
 
-#: builtin/add.c:371
+#: builtin/add.c:370
 msgid "interactive picking"
 msgstr "sélection interactive"
 
-#: builtin/add.c:372 builtin/checkout.c:1581 builtin/reset.c:409
+#: builtin/add.c:371 builtin/checkout.c:1599 builtin/reset.c:417
 msgid "select hunks interactively"
 msgstr "sélection interactive des sections"
 
-#: builtin/add.c:373
+#: builtin/add.c:372
 msgid "edit current diff and apply"
 msgstr "édition du diff actuel et application"
 
-#: builtin/add.c:374
+#: builtin/add.c:373
 msgid "allow adding otherwise ignored files"
 msgstr "permettre l'ajout de fichiers ignorés"
 
-#: builtin/add.c:375
+#: builtin/add.c:374
 msgid "update tracked files"
 msgstr "mettre à jour les fichiers suivis"
 
-#: builtin/add.c:376
+#: builtin/add.c:375
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr ""
 "renormaliser les fins de lignes (EOL) des fichiers suivis (implique -u)"
 
-#: builtin/add.c:377
+#: builtin/add.c:376
 msgid "record only the fact that the path will be added later"
 msgstr "enregistrer seulement le fait que le chemin sera ajouté plus tard"
 
-#: builtin/add.c:378
+#: builtin/add.c:377
 msgid "add changes from all tracked and untracked files"
 msgstr "ajouter les modifications de tous les fichiers suivis et non suivis"
 
-#: builtin/add.c:381
+#: builtin/add.c:380
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr ""
 "ignorer les chemins effacés dans la copie de travail (identique à --no-all)"
 
-#: builtin/add.c:383
+#: builtin/add.c:382
 msgid "don't add, only refresh the index"
 msgstr "ne pas ajouter, juste rafraîchir l'index"
 
-#: builtin/add.c:384
+#: builtin/add.c:383
 msgid "just skip files which cannot be added because of errors"
 msgstr ""
 "sauter seulement les fichiers qui ne peuvent pas être ajoutés du fait "
 "d'erreurs"
 
-#: builtin/add.c:385
+#: builtin/add.c:384
 msgid "check if - even missing - files are ignored in dry run"
 msgstr "vérifier si des fichiers - même manquants - sont ignorés, à vide"
 
-#: builtin/add.c:386 builtin/mv.c:128 builtin/rm.c:251
+#: builtin/add.c:385 builtin/mv.c:128 builtin/rm.c:251
 msgid "allow updating entries outside of the sparse-checkout cone"
 msgstr ""
 "permettre la mise à jour des entrées hors du cone d'extraction clairsemée"
 
-#: builtin/add.c:388 builtin/update-index.c:1004
+#: builtin/add.c:387 builtin/update-index.c:1023
 msgid "override the executable bit of the listed files"
 msgstr "outrepasser le bit exécutable pour les fichiers listés"
 
-#: builtin/add.c:390
+#: builtin/add.c:389
 msgid "warn when adding an embedded repository"
 msgstr "avertir lors de l'ajout d'un dépôt embarqué"
 
-#: builtin/add.c:392
-msgid "backend for `git stash -p`"
-msgstr "backend pour `git stash -p`"
-
-#: builtin/add.c:410
+#: builtin/add.c:407
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -10753,12 +11019,12 @@ msgstr ""
 "\n"
 "Référez-vous à \"git help submodule\" pour plus d'information."
 
-#: builtin/add.c:439
+#: builtin/add.c:436
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "dépôt git embarqué ajouté : %s"
 
-#: builtin/add.c:459
+#: builtin/add.c:456
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
@@ -10768,29 +11034,29 @@ msgstr ""
 "Éliminez ce message en lançant\n"
 "\"git config advice.addIgnoredFile false\""
 
-#: builtin/add.c:474
+#: builtin/add.c:471
 msgid "adding files failed"
 msgstr "échec de l'ajout de fichiers"
 
-#: builtin/add.c:548
+#: builtin/add.c:534
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "Le paramètre '%s' de --chmod doit être soit -x soit +x"
 
-#: builtin/add.c:569 builtin/checkout.c:1751 builtin/commit.c:364
-#: builtin/reset.c:429 builtin/rm.c:275 builtin/stash.c:1713
+#: builtin/add.c:555 builtin/checkout.c:1770 builtin/commit.c:365
+#: builtin/reset.c:436 builtin/rm.c:275 builtin/stash.c:1702
 #, c-format
 msgid "'%s' and pathspec arguments cannot be used together"
 msgstr ""
 "'%s' et les arguments de spécificateur de chemin ne peuvent pas être "
 "utilisés ensemble"
 
-#: builtin/add.c:580
+#: builtin/add.c:566
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "Rien de spécifié, rien n'a été ajouté.\n"
 
-#: builtin/add.c:582
+#: builtin/add.c:568
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
@@ -10800,120 +11066,115 @@ msgstr ""
 "Éliminez ce message en lançant\n"
 "\"git config advice.addEmptyPathspec false\""
 
-#: builtin/am.c:202
-#, c-format
-msgid "Invalid value for --empty: %s"
-msgstr "Valeur invalide pour --empty : %s"
-
-#: builtin/am.c:392
+#: builtin/am.c:393
 msgid "could not parse author script"
 msgstr "impossible d'analyser l'auteur du script"
 
-#: builtin/am.c:482
+#: builtin/am.c:483
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "'%s' a été effacé par le crochet applypatch-msg"
 
-#: builtin/am.c:524
+#: builtin/am.c:525
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Ligne en entrée malformée : '%s'."
 
-#: builtin/am.c:562
+#: builtin/am.c:563
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Impossible de copier les notes de '%s' vers '%s'"
 
-#: builtin/am.c:588
+#: builtin/am.c:589
 msgid "fseek failed"
 msgstr "échec de fseek"
 
-#: builtin/am.c:776
+#: builtin/am.c:777
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "impossible d'analyser le patch '%s'"
 
-#: builtin/am.c:841
+#: builtin/am.c:842
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Seulement une série de patchs StGIT peut être appliquée à la fois"
 
-#: builtin/am.c:889
+#: builtin/am.c:890
 msgid "invalid timestamp"
 msgstr "horodatage invalide"
 
-#: builtin/am.c:894 builtin/am.c:906
+#: builtin/am.c:895 builtin/am.c:907
 msgid "invalid Date line"
 msgstr "ligne de Date invalide"
 
-#: builtin/am.c:901
+#: builtin/am.c:902
 msgid "invalid timezone offset"
 msgstr "décalage horaire invalide"
 
-#: builtin/am.c:994
+#: builtin/am.c:995
 msgid "Patch format detection failed."
 msgstr "Échec de détection du format du patch."
 
-#: builtin/am.c:999 builtin/clone.c:300
+#: builtin/am.c:1000 builtin/clone.c:306
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "échec de la création du répertoire '%s'"
 
-#: builtin/am.c:1004
+#: builtin/am.c:1005
 msgid "Failed to split patches."
 msgstr "Échec de découpage des patchs."
 
-#: builtin/am.c:1153
+#: builtin/am.c:1154
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "Quand vous avez résolu ce problème, lancez \"%s --continue\"."
 
-#: builtin/am.c:1154
+#: builtin/am.c:1155
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "Si vous préférez plutôt sauter ce patch, lancez \"%s --skip\"."
 
-#: builtin/am.c:1159
+#: builtin/am.c:1160
 #, c-format
 msgid "To record the empty patch as an empty commit, run \"%s --allow-empty\"."
 msgstr ""
 "Pour enregistrer la rustine vide comme un commit vide, lancez \"%s --allow-"
 "empty\"."
 
-#: builtin/am.c:1161
+#: builtin/am.c:1162
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr ""
 "Pour restaurer la branche originale et arrêter de patcher, lancez \"%s --"
 "abort\"."
 
-#: builtin/am.c:1256
+#: builtin/am.c:1257
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 "Rustine envoyée avec format=flowed ; les espaces en fin de ligne peuvent "
 "être perdus."
 
-#: builtin/am.c:1344
+#: builtin/am.c:1345
 #, c-format
 msgid "missing author line in commit %s"
 msgstr "ligne d'auteur manquante dans le commit %s"
 
-#: builtin/am.c:1347
+#: builtin/am.c:1348
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "ligne d'identification invalide : %.*s"
 
-#: builtin/am.c:1566
+#: builtin/am.c:1567
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 "Le dépôt n'a pas les blobs nécessaires pour un retour à une fusion à 3 "
 "points."
 
-#: builtin/am.c:1568
+#: builtin/am.c:1569
 msgid "Using index info to reconstruct a base tree..."
 msgstr ""
 "Utilisation de l'information de l'index pour reconstruire un arbre de base..."
 
-#: builtin/am.c:1587
+#: builtin/am.c:1588
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -10921,24 +11182,24 @@ msgstr ""
 "Avez-vous édité le patch à la main ?\n"
 "Il ne s'applique pas aux blobs enregistrés dans son index."
 
-#: builtin/am.c:1593
+#: builtin/am.c:1594
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "Retour à un patch de la base et fusion à 3 points..."
 
-#: builtin/am.c:1619
+#: builtin/am.c:1620
 msgid "Failed to merge in the changes."
 msgstr "Échec d'intégration des modifications."
 
-#: builtin/am.c:1651
+#: builtin/am.c:1652
 msgid "applying to an empty history"
 msgstr "application à un historique vide"
 
-#: builtin/am.c:1703 builtin/am.c:1707
+#: builtin/am.c:1704 builtin/am.c:1708
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "impossible de continuer : %s n'existe pas."
 
-#: builtin/am.c:1725
+#: builtin/am.c:1726
 msgid "Commit Body is:"
 msgstr "Le corps de la validation est :"
 
@@ -10946,58 +11207,58 @@ msgstr "Le corps de la validation est :"
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1735
+#: builtin/am.c:1736
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr "Appliquer ? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all : "
 
-#: builtin/am.c:1781 builtin/commit.c:409
+#: builtin/am.c:1782 builtin/commit.c:410
 msgid "unable to write index file"
 msgstr "impossible d'écrire le fichier d'index"
 
-#: builtin/am.c:1785
+#: builtin/am.c:1786
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Index sale : impossible d'appliquer des patchs (sales : %s)"
 
-#: builtin/am.c:1827
+#: builtin/am.c:1828
 #, c-format
 msgid "Skipping: %.*s"
 msgstr "Ignoré : %.*s"
 
-#: builtin/am.c:1832
+#: builtin/am.c:1833
 #, c-format
 msgid "Creating an empty commit: %.*s"
 msgstr "Création d'un commit vide : %.*s"
 
-#: builtin/am.c:1836
+#: builtin/am.c:1837
 msgid "Patch is empty."
 msgstr "Le patch actuel est vide."
 
-#: builtin/am.c:1847 builtin/am.c:1916
+#: builtin/am.c:1848 builtin/am.c:1917
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Application de  %.*s"
 
-#: builtin/am.c:1864
+#: builtin/am.c:1865
 msgid "No changes -- Patch already applied."
 msgstr "Pas de changement -- Patch déjà appliqué."
 
-#: builtin/am.c:1870
+#: builtin/am.c:1871
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "l'application de la rustine a échoué à %s %.*s"
 
-#: builtin/am.c:1874
+#: builtin/am.c:1875
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr ""
 "Utilisez 'git am --show-current-patch=diff' pour visualiser le patch en échec"
 
-#: builtin/am.c:1920
+#: builtin/am.c:1921
 msgid "No changes - recorded it as an empty commit."
 msgstr "aucune modification - enregistré comme un commit vide."
 
-#: builtin/am.c:1922
+#: builtin/am.c:1923
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -11008,7 +11269,7 @@ msgstr ""
 "introduit les mêmes changements ; vous pourriez avoir envie de sauter ce "
 "patch."
 
-#: builtin/am.c:1930
+#: builtin/am.c:1931
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -11021,17 +11282,17 @@ msgstr ""
 "Vous pouvez lancer 'git rm' sur un fichier \"supprimé par eux\" pour "
 "accepter son état."
 
-#: builtin/am.c:2038 builtin/am.c:2042 builtin/am.c:2054 builtin/reset.c:448
-#: builtin/reset.c:456
+#: builtin/am.c:2039 builtin/am.c:2043 builtin/am.c:2055 builtin/reset.c:455
+#: builtin/reset.c:463
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "Impossible d'analyser l'objet '%s'."
 
-#: builtin/am.c:2090 builtin/am.c:2166
+#: builtin/am.c:2091 builtin/am.c:2167
 msgid "failed to clean index"
 msgstr "échec du nettoyage de l'index"
 
-#: builtin/am.c:2134
+#: builtin/am.c:2135
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -11039,168 +11300,159 @@ msgstr ""
 "Vous semblez avoir déplacé la HEAD depuis le dernier échec de 'am'.\n"
 "Pas de retour à ORIG_HEAD"
 
-#: builtin/am.c:2242
-#, c-format
-msgid "Invalid value for --patch-format: %s"
-msgstr "Valeur invalide pour --patch-format : %s"
-
-#: builtin/am.c:2285
-#, c-format
-msgid "Invalid value for --show-current-patch: %s"
-msgstr "Valeur invalide pour --show-current-patch : %s"
-
-#: builtin/am.c:2289
+#: builtin/am.c:2292
 #, c-format
 msgid "options '%s=%s' and '%s=%s' cannot be used together"
 msgstr "les options '%s=%s' et '%s=%s' ne peuvent pas être utilisées ensemble"
 
-#: builtin/am.c:2320
+#: builtin/am.c:2323
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<options>] [(<mbox> | <Maildir>)...]"
 
-#: builtin/am.c:2321
+#: builtin/am.c:2324
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<options>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2327
+#: builtin/am.c:2330
 msgid "run interactively"
 msgstr "exécution interactive"
 
-#: builtin/am.c:2329
+#: builtin/am.c:2332
 msgid "historical option -- no-op"
 msgstr "option historique -- no-op"
 
-#: builtin/am.c:2331
+#: builtin/am.c:2334
 msgid "allow fall back on 3way merging if needed"
 msgstr "permettre de revenir à une fusion à 3 points si nécessaire"
 
-#: builtin/am.c:2332 builtin/init-db.c:547 builtin/prune-packed.c:16
-#: builtin/repack.c:642 builtin/stash.c:962
+#: builtin/am.c:2335 builtin/init-db.c:547 builtin/prune-packed.c:16
+#: builtin/repack.c:646 builtin/stash.c:946
 msgid "be quiet"
 msgstr "être silencieux"
 
-#: builtin/am.c:2334
+#: builtin/am.c:2337
 msgid "add a Signed-off-by trailer to the commit message"
 msgstr "ajouter une ligne terminale Signed-off-by au message de validation"
 
-#: builtin/am.c:2337
+#: builtin/am.c:2340
 msgid "recode into utf8 (default)"
 msgstr "recoder en utf-8 (par défaut)"
 
-#: builtin/am.c:2339
+#: builtin/am.c:2342
 msgid "pass -k flag to git-mailinfo"
 msgstr "passer l'option -k à git-mailinfo"
 
-#: builtin/am.c:2341
+#: builtin/am.c:2344
 msgid "pass -b flag to git-mailinfo"
 msgstr "passer l'option -b à git-mailinfo"
 
-#: builtin/am.c:2343
+#: builtin/am.c:2346
 msgid "pass -m flag to git-mailinfo"
 msgstr "passer l'option -m à git-mailinfo"
 
-#: builtin/am.c:2345
+#: builtin/am.c:2348
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "passer l'option --keep-cr à git-mailsplit fpour le format mbox"
 
-#: builtin/am.c:2348
+#: builtin/am.c:2351
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr ""
 "ne pas passer l'option --keep-cr à git-mailsplit indépendamment de am.keepcr"
 
-#: builtin/am.c:2351
+#: builtin/am.c:2354
 msgid "strip everything before a scissors line"
 msgstr "retirer tout le contenu avant la ligne des ciseaux"
 
-#: builtin/am.c:2353
+#: builtin/am.c:2356
 msgid "pass it through git-mailinfo"
 msgstr "le passer à travers git-mailinfo"
 
-#: builtin/am.c:2356 builtin/am.c:2359 builtin/am.c:2362 builtin/am.c:2365
-#: builtin/am.c:2368 builtin/am.c:2371 builtin/am.c:2374 builtin/am.c:2377
-#: builtin/am.c:2383
+#: builtin/am.c:2359 builtin/am.c:2362 builtin/am.c:2365 builtin/am.c:2368
+#: builtin/am.c:2371 builtin/am.c:2374 builtin/am.c:2377 builtin/am.c:2380
+#: builtin/am.c:2386
 msgid "pass it through git-apply"
 msgstr "le passer jusqu'à git-apply"
 
-#: builtin/am.c:2373 builtin/commit.c:1515 builtin/fmt-merge-msg.c:18
-#: builtin/fmt-merge-msg.c:21 builtin/grep.c:919 builtin/merge.c:263
+#: builtin/am.c:2376 builtin/commit.c:1514 builtin/fmt-merge-msg.c:18
+#: builtin/fmt-merge-msg.c:21 builtin/grep.c:920 builtin/merge.c:263
 #: builtin/pull.c:142 builtin/pull.c:204 builtin/pull.c:221
-#: builtin/rebase.c:1046 builtin/repack.c:653 builtin/repack.c:657
-#: builtin/repack.c:659 builtin/show-branch.c:649 builtin/show-ref.c:172
-#: builtin/tag.c:445 parse-options.h:154 parse-options.h:175
-#: parse-options.h:317
+#: builtin/rebase.c:1074 builtin/repack.c:657 builtin/repack.c:661
+#: builtin/repack.c:663 builtin/show-branch.c:650 builtin/show-ref.c:172
+#: builtin/tag.c:446 parse-options.h:159 parse-options.h:180
+#: parse-options.h:348
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2379 builtin/branch.c:680 builtin/bugreport.c:109
-#: builtin/for-each-ref.c:41 builtin/replace.c:555 builtin/tag.c:479
-#: builtin/verify-tag.c:38
+#: builtin/am.c:2382 builtin/branch.c:695 builtin/bugreport.c:109
+#: builtin/cat-file.c:848 builtin/cat-file.c:852 builtin/cat-file.c:856
+#: builtin/for-each-ref.c:41 builtin/ls-tree.c:357 builtin/replace.c:555
+#: builtin/tag.c:480 builtin/verify-tag.c:38
 msgid "format"
 msgstr "format"
 
-#: builtin/am.c:2380
+#: builtin/am.c:2383
 msgid "format the patch(es) are in"
 msgstr "format de présentation des patchs"
 
-#: builtin/am.c:2386
+#: builtin/am.c:2389
 msgid "override error message when patch failure occurs"
 msgstr "surcharger le message d'erreur lors d'un échec d'application de patch"
 
-#: builtin/am.c:2388
+#: builtin/am.c:2391
 msgid "continue applying patches after resolving a conflict"
 msgstr "continuer à appliquer les patchs après résolution d'un conflit"
 
-#: builtin/am.c:2391
+#: builtin/am.c:2394
 msgid "synonyms for --continue"
 msgstr "synonymes de --continue"
 
-#: builtin/am.c:2394
+#: builtin/am.c:2397
 msgid "skip the current patch"
 msgstr "sauter le patch courant"
 
-#: builtin/am.c:2397
+#: builtin/am.c:2400
 msgid "restore the original branch and abort the patching operation"
 msgstr "restaurer la branche originale et abandonner les applications de patch"
 
-#: builtin/am.c:2400
+#: builtin/am.c:2403
 msgid "abort the patching operation but keep HEAD where it is"
 msgstr "abandonne l'opération de patch mais garde HEAD où il est"
 
-#: builtin/am.c:2404
+#: builtin/am.c:2407
 msgid "show the patch being applied"
 msgstr "afficher le patch en cours d'application"
 
-#: builtin/am.c:2408
+#: builtin/am.c:2411
 msgid "record the empty patch as an empty commit"
 msgstr "enregistrer la rustine vide comme un commit vide"
 
-#: builtin/am.c:2412
+#: builtin/am.c:2415
 msgid "lie about committer date"
 msgstr "mentir sur la date de validation"
 
-#: builtin/am.c:2414
+#: builtin/am.c:2417
 msgid "use current timestamp for author date"
 msgstr "utiliser l'horodatage actuel pour la date d'auteur"
 
-#: builtin/am.c:2416 builtin/commit-tree.c:118 builtin/commit.c:1643
-#: builtin/merge.c:302 builtin/pull.c:179 builtin/rebase.c:1099
-#: builtin/revert.c:117 builtin/tag.c:460
+#: builtin/am.c:2419 builtin/commit-tree.c:118 builtin/commit.c:1642
+#: builtin/merge.c:302 builtin/pull.c:179 builtin/rebase.c:1127
+#: builtin/revert.c:117 builtin/tag.c:461
 msgid "key-id"
 msgstr "id-clé"
 
-#: builtin/am.c:2417 builtin/rebase.c:1100
+#: builtin/am.c:2420 builtin/rebase.c:1128
 msgid "GPG-sign commits"
 msgstr "signer les commits avec GPG"
 
-#: builtin/am.c:2420
+#: builtin/am.c:2423
 msgid "how to handle empty patches"
 msgstr "comment gérer les rustines vides"
 
-#: builtin/am.c:2423
+#: builtin/am.c:2426
 msgid "(internal use for git-rebase)"
 msgstr "(utilisation interne pour git-rebase)"
 
-#: builtin/am.c:2441
+#: builtin/am.c:2444
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
@@ -11208,17 +11460,17 @@ msgstr ""
 "L'option -b/--binary ne fait plus rien depuis longtemps,\n"
 "et elle sera supprimée. Veuillez ne plus l'utiliser."
 
-#: builtin/am.c:2448
+#: builtin/am.c:2451
 msgid "failed to read the index"
 msgstr "échec à la lecture de l'index"
 
-#: builtin/am.c:2463
+#: builtin/am.c:2466
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr ""
 "le répertoire précédent de rebasage %s existe toujours mais mbox donnée."
 
-#: builtin/am.c:2487
+#: builtin/am.c:2490
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -11227,13 +11479,13 @@ msgstr ""
 "Répertoire abandonné %s trouvé.\n"
 "Utilisez \"git am --abort\" pour le supprimer."
 
-#: builtin/am.c:2493
+#: builtin/am.c:2496
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr ""
 "Pas de résolution de l'opération en cours, nous ne sommes pas dans une "
 "reprise."
 
-#: builtin/am.c:2503
+#: builtin/am.c:2506
 msgid "interactive mode requires patches on the command line"
 msgstr "le mode interactif requiert des rustines sur la ligne de commande"
 
@@ -11270,14 +11522,6 @@ msgstr "git archive : vidage attendu"
 msgid "git bisect--helper --bisect-reset [<commit>]"
 msgstr "git bisect--helper --bisect-reset [<commit>]"
 
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
-msgstr ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
-
 #: builtin/bisect--helper.c:26
 msgid ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
@@ -11288,10 +11532,6 @@ msgstr ""
 "=<terme>][--no-checkout] [--first-parent] [<mauvais> [<bon>...]] [--] "
 "[<chemins>...]"
 
-#: builtin/bisect--helper.c:28
-msgid "git bisect--helper --bisect-next"
-msgstr "git bisect--helper --bisect-next"
-
 #: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr "git bisect--helper --bisect-state (bad|new) [<rév>]"
@@ -11308,10 +11548,6 @@ msgstr "git bisect--helper --bisect-replay <nom-de-fichier>"
 msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
 msgstr "git bisect--helper --bisect-skip [(<rév>|<plage>)...]"
 
-#: builtin/bisect--helper.c:33
-msgid "git bisect--helper --bisect-visualize"
-msgstr "git bisect--helper --bisect-visualize"
-
 #: builtin/bisect--helper.c:34
 msgid "git bisect--helper --bisect-run <cmd>..."
 msgstr "git bisect--helper --bisect-run <cmd>..."
@@ -11535,40 +11771,50 @@ msgstr "'%s' ?? de quoi parlez-vous ?"
 msgid "cannot read file '%s' for replaying"
 msgstr "impossible de lire le fichier '%s' pour rejouer"
 
-#: builtin/bisect--helper.c:1107 builtin/bisect--helper.c:1274
+#: builtin/bisect--helper.c:1120 builtin/bisect--helper.c:1152
+#, c-format
+msgid "running %s\n"
+msgstr "Lancement de %s\n"
+
+#: builtin/bisect--helper.c:1145 builtin/bisect--helper.c:1335
 msgid "bisect run failed: no command provided."
 msgstr "la bissection a échoué : aucune commande fournie."
 
-#: builtin/bisect--helper.c:1116
+#: builtin/bisect--helper.c:1166
 #, c-format
-msgid "running %s\n"
-msgstr "Lancement de %s\n"
+msgid "unable to verify '%s' on good revision"
+msgstr "impossible de vérifier '%s' sur une bonne révision"
+
+#: builtin/bisect--helper.c:1172
+#, c-format
+msgid "bogus exit code %d for good revision"
+msgstr "code de sortie %d erroné pour une bonne révision"
 
-#: builtin/bisect--helper.c:1120
+#: builtin/bisect--helper.c:1180
 #, c-format
 msgid "bisect run failed: exit code %d from '%s' is < 0 or >= 128"
 msgstr "la bissection a échoué : le code retour %d de '%s' est < 0 ou >= 128"
 
-#: builtin/bisect--helper.c:1136
+#: builtin/bisect--helper.c:1195
 #, c-format
 msgid "cannot open file '%s' for writing"
 msgstr "impossible d'ouvrir '%s' en écriture"
 
-#: builtin/bisect--helper.c:1152
+#: builtin/bisect--helper.c:1213
 msgid "bisect run cannot continue any more"
 msgstr "la bissection ne peut plus continuer"
 
-#: builtin/bisect--helper.c:1154
+#: builtin/bisect--helper.c:1215
 #, c-format
 msgid "bisect run success"
 msgstr "succès de la bissection"
 
-#: builtin/bisect--helper.c:1157
+#: builtin/bisect--helper.c:1218
 #, c-format
 msgid "bisect found first bad commit"
 msgstr "la bissection a trouvé le premier mauvais commit"
 
-#: builtin/bisect--helper.c:1160
+#: builtin/bisect--helper.c:1221
 #, c-format
 msgid ""
 "bisect run failed: 'git bisect--helper --bisect-state %s' exited with error "
@@ -11577,71 +11823,71 @@ msgstr ""
 "la bissection a échoué : 'git bisect--helper --bisect-state %s' a retourné "
 "le code erreur %d"
 
-#: builtin/bisect--helper.c:1192
+#: builtin/bisect--helper.c:1253
 msgid "reset the bisection state"
 msgstr "réinitialiser l'état de la bissection"
 
-#: builtin/bisect--helper.c:1194
+#: builtin/bisect--helper.c:1255
 msgid "check whether bad or good terms exist"
 msgstr "vérifier si les termes bons ou mauvais existent"
 
-#: builtin/bisect--helper.c:1196
+#: builtin/bisect--helper.c:1257
 msgid "print out the bisect terms"
 msgstr "afficher les termes de bissection"
 
-#: builtin/bisect--helper.c:1198
+#: builtin/bisect--helper.c:1259
 msgid "start the bisect session"
 msgstr "démarrer une session de bissection"
 
-#: builtin/bisect--helper.c:1200
+#: builtin/bisect--helper.c:1261
 msgid "find the next bisection commit"
 msgstr "trouver le prochain commit de bissection"
 
-#: builtin/bisect--helper.c:1202
+#: builtin/bisect--helper.c:1263
 msgid "mark the state of ref (or refs)"
 msgstr "marquer l'état d'une références (ou plusieurs)"
 
-#: builtin/bisect--helper.c:1204
+#: builtin/bisect--helper.c:1265
 msgid "list the bisection steps so far"
 msgstr "lister les étapes de bissection jusqu'ici"
 
-#: builtin/bisect--helper.c:1206
+#: builtin/bisect--helper.c:1267
 msgid "replay the bisection process from the given file"
 msgstr "rejouer le processus de bissection depuis le fichier fourni"
 
-#: builtin/bisect--helper.c:1208
+#: builtin/bisect--helper.c:1269
 msgid "skip some commits for checkout"
 msgstr "sauter certains commits pour l'extraction"
 
-#: builtin/bisect--helper.c:1210
+#: builtin/bisect--helper.c:1271
 msgid "visualize the bisection"
 msgstr "visualiser la bissection"
 
-#: builtin/bisect--helper.c:1212
-msgid "use <cmd>... to automatically bisect."
-msgstr "utiliser <cmd>... pour bissecter automatiquement."
+#: builtin/bisect--helper.c:1273
+msgid "use <cmd>... to automatically bisect"
+msgstr "utiliser <cmd>... pour bissecter automatiquement"
 
-#: builtin/bisect--helper.c:1214
+#: builtin/bisect--helper.c:1275
 msgid "no log for BISECT_WRITE"
 msgstr "pas de journal pour BISECT_WRITE"
 
-#: builtin/bisect--helper.c:1229
+#: builtin/bisect--helper.c:1290
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr "--bisect-reset supporte soit aucun argument, soit un commit"
 
-#: builtin/bisect--helper.c:1234
+#: builtin/bisect--helper.c:1295
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms exige 0 ou 1 argument"
 
-#: builtin/bisect--helper.c:1243
+#: builtin/bisect--helper.c:1304
 msgid "--bisect-next requires 0 arguments"
 msgstr "--bisect-next exige 0 argument"
 
-#: builtin/bisect--helper.c:1254
+#: builtin/bisect--helper.c:1315
 msgid "--bisect-log requires 0 arguments"
 msgstr "--bisect-log exige 0 argument"
 
-#: builtin/bisect--helper.c:1259
+#: builtin/bisect--helper.c:1320
 msgid "no logfile given"
 msgstr "pas de fichier de log donné"
 
@@ -11662,152 +11908,143 @@ msgstr "couleur attendue : %s"
 msgid "must end with a color"
 msgstr "doit finir avec une couleur"
 
-#: builtin/blame.c:724
-#, c-format
-msgid "invalid color '%s' in color.blame.repeatedLines"
-msgstr "couleur invalide '%s' dans color.blame.repeatedLines"
-
-#: builtin/blame.c:742
-msgid "invalid value for blame.coloring"
-msgstr "valeur invalide pour blame.coloring"
-
-#: builtin/blame.c:841
+#: builtin/blame.c:842
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "référence à ignorer %s introuvable"
 
-#: builtin/blame.c:863
+#: builtin/blame.c:864
 msgid "show blame entries as we find them, incrementally"
 msgstr ""
 "montrer les éléments de blâme au fur et à mesure de leur découverte, de "
 "manière incrémentale"
 
-#: builtin/blame.c:864
+#: builtin/blame.c:865
 msgid "do not show object names of boundary commits (Default: off)"
 msgstr ""
 "ne pas montrer les noms des objets pour les commits de limite (Défaut : "
 "désactivé)"
 
-#: builtin/blame.c:865
+#: builtin/blame.c:866
 msgid "do not treat root commits as boundaries (Default: off)"
 msgstr ""
 "ne pas traiter les commits racine comme des limites (Défaut : désactivé)"
 
-#: builtin/blame.c:866
+#: builtin/blame.c:867
 msgid "show work cost statistics"
 msgstr "montrer les statistiques de coût d'activité"
 
-#: builtin/blame.c:867 builtin/checkout.c:1536 builtin/clone.c:94
-#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:180
+#: builtin/blame.c:868 builtin/checkout.c:1554 builtin/clone.c:98
+#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:181
 #: builtin/merge.c:301 builtin/multi-pack-index.c:103
 #: builtin/multi-pack-index.c:154 builtin/multi-pack-index.c:180
 #: builtin/multi-pack-index.c:208 builtin/pull.c:120 builtin/push.c:566
-#: builtin/send-pack.c:202
+#: builtin/remote.c:683 builtin/send-pack.c:202
 msgid "force progress reporting"
 msgstr "forcer l'affichage de l'état d'avancement"
 
-#: builtin/blame.c:868
+#: builtin/blame.c:869
 msgid "show output score for blame entries"
 msgstr "montrer le score de sortie pour les éléments de blâme"
 
-#: builtin/blame.c:869
+#: builtin/blame.c:870
 msgid "show original filename (Default: auto)"
 msgstr "montrer les noms de fichier originaux (Défaut : auto)"
 
-#: builtin/blame.c:870
+#: builtin/blame.c:871
 msgid "show original linenumber (Default: off)"
 msgstr "montrer les numéros de lignes originaux (Défaut : désactivé)"
 
-#: builtin/blame.c:871
+#: builtin/blame.c:872
 msgid "show in a format designed for machine consumption"
 msgstr "afficher dans un format propice à la consommation par machine"
 
-#: builtin/blame.c:872
+#: builtin/blame.c:873
 msgid "show porcelain format with per-line commit information"
 msgstr "afficher en format porcelaine avec l'information de commit par ligne"
 
-#: builtin/blame.c:873
+#: builtin/blame.c:874
 msgid "use the same output mode as git-annotate (Default: off)"
 msgstr "utiliser le même mode de sortie que git-annotate (Défaut : désactivé)"
 
-#: builtin/blame.c:874
+#: builtin/blame.c:875
 msgid "show raw timestamp (Default: off)"
 msgstr "afficher les horodatages bruts (Défaut : désactivé)"
 
-#: builtin/blame.c:875
+#: builtin/blame.c:876
 msgid "show long commit SHA1 (Default: off)"
 msgstr "afficher les longs SHA1 de commits (Défaut : désactivé)"
 
-#: builtin/blame.c:876
+#: builtin/blame.c:877
 msgid "suppress author name and timestamp (Default: off)"
 msgstr "supprimer le nom de l'auteur et l'horodatage (Défaut : désactivé)"
 
-#: builtin/blame.c:877
+#: builtin/blame.c:878
 msgid "show author email instead of name (Default: off)"
 msgstr "afficher le courriel de l'auteur au lieu du nom (Défaut : désactivé)"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:879
 msgid "ignore whitespace differences"
 msgstr "ignorer les différences d'espace"
 
-#: builtin/blame.c:879 builtin/log.c:1838
+#: builtin/blame.c:880 builtin/log.c:1857
 msgid "rev"
 msgstr "rév"
 
-#: builtin/blame.c:879
+#: builtin/blame.c:880
 msgid "ignore <rev> when blaming"
 msgstr "ignorer <rev> pendant le blâme"
 
-#: builtin/blame.c:880
+#: builtin/blame.c:881
 msgid "ignore revisions from <file>"
 msgstr "ignorer les révisions listées dans <fichier>"
 
-#: builtin/blame.c:881
+#: builtin/blame.c:882
 msgid "color redundant metadata from previous line differently"
 msgstr ""
 "colorer différemment les métadonnées redondantes avec la ligne précédente"
 
-#: builtin/blame.c:882
+#: builtin/blame.c:883
 msgid "color lines by age"
 msgstr "colorier les lignes par âge"
 
-#: builtin/blame.c:883
+#: builtin/blame.c:884
 msgid "spend extra cycles to find better match"
 msgstr ""
 "dépenser des cycles supplémentaires pour trouver une meilleure correspondance"
 
-#: builtin/blame.c:884
+#: builtin/blame.c:885
 msgid "use revisions from <file> instead of calling git-rev-list"
 msgstr ""
 "utiliser les révisions du fichier <fichier> au lieu d'appeler git-rev-list"
 
-#: builtin/blame.c:885
+#: builtin/blame.c:886
 msgid "use <file>'s contents as the final image"
 msgstr "utiliser le contenu de <fichier> comme image finale"
 
-#: builtin/blame.c:886 builtin/blame.c:887
+#: builtin/blame.c:887 builtin/blame.c:888
 msgid "score"
 msgstr "score"
 
-#: builtin/blame.c:886
+#: builtin/blame.c:887
 msgid "find line copies within and across files"
 msgstr "trouver les copies de ligne dans et entre les fichiers"
 
-#: builtin/blame.c:887
+#: builtin/blame.c:888
 msgid "find line movements within and across files"
 msgstr "trouver les mouvements de ligne dans et entre les fichiers"
 
-#: builtin/blame.c:888
+#: builtin/blame.c:889
 msgid "range"
 msgstr "plage"
 
-#: builtin/blame.c:889
+#: builtin/blame.c:890
 msgid "process only line range <start>,<end> or function :<funcname>"
 msgstr ""
 "traiter seulement l'intervalle de ligne <début>,<fin> ou la fonction : <nom-"
 "de-fonction>"
 
-#: builtin/blame.c:947
+#: builtin/blame.c:949
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr ""
 "--progress ne peut pas être utilisé avec --incremental ou les formats "
@@ -11821,18 +12058,18 @@ msgstr ""
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:998
+#: builtin/blame.c:1000
 msgid "4 years, 11 months ago"
 msgstr "il y a 10 ans et 11 mois"
 
-#: builtin/blame.c:1114
+#: builtin/blame.c:1116
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] "le fichier %s n'a qu'%lu ligne"
 msgstr[1] "le fichier %s n'a que %lu lignes"
 
-#: builtin/blame.c:1159
+#: builtin/blame.c:1161
 msgid "Blaming lines"
 msgstr "Assignation de blâme aux lignes"
 
@@ -11841,32 +12078,40 @@ msgid "git branch [<options>] [-r | -a] [--merged] [--no-merged]"
 msgstr "git branch [<options>] [-r | -a] [--merged | --no-merged]"
 
 #: builtin/branch.c:30
-msgid "git branch [<options>] [-l] [-f] <branch-name> [<start-point>]"
-msgstr "git branch [<options>] [-l] [-f] <nom-de-branche> [<point-de-départ>]"
+msgid ""
+"git branch [<options>] [-f] [--recurse-submodules] <branch-name> [<start-"
+"point>]"
+msgstr ""
+"git branch [<options>] [-f] [--recurse-submodules] <nom-de-branche> [<point-"
+"de-départ>]"
 
 #: builtin/branch.c:31
+msgid "git branch [<options>] [-l] [<pattern>...]"
+msgstr "git branch [<options>] [-l] [<motif>...]"
+
+#: builtin/branch.c:32
 msgid "git branch [<options>] [-r] (-d | -D) <branch-name>..."
 msgstr "git branch [<options>] [-r] (-d | -D) <nom-de-branche>..."
 
-#: builtin/branch.c:32
+#: builtin/branch.c:33
 msgid "git branch [<options>] (-m | -M) [<old-branch>] <new-branch>"
 msgstr ""
 "git branch [<options>] (-m | -M) [<ancienne-branche>] <nouvelle-branche>"
 
-#: builtin/branch.c:33
+#: builtin/branch.c:34
 msgid "git branch [<options>] (-c | -C) [<old-branch>] <new-branch>"
 msgstr ""
 "git branch [<options>] (-c | -C) [<ancienne-branche>] <nouvelle-branche>"
 
-#: builtin/branch.c:34
+#: builtin/branch.c:35
 msgid "git branch [<options>] [-r | -a] [--points-at]"
 msgstr "git branch [<options>] [-r | -a] [--points-at]"
 
-#: builtin/branch.c:35
+#: builtin/branch.c:36
 msgid "git branch [<options>] [-r | -a] [--format]"
 msgstr "git branch [<options>] [-r | -a] [--format]"
 
-#: builtin/branch.c:153
+#: builtin/branch.c:165
 #, c-format
 msgid ""
 "deleting branch '%s' that has been merged to\n"
@@ -11875,7 +12120,7 @@ msgstr ""
 "suppression de la branche '%s' qui a été fusionnée dans\n"
 "         '%s', mais pas dans HEAD."
 
-#: builtin/branch.c:157
+#: builtin/branch.c:169
 #, c-format
 msgid ""
 "not deleting branch '%s' that is not yet merged to\n"
@@ -11884,12 +12129,12 @@ msgstr ""
 "branche '%s' non supprimée car elle n'a pas été fusionnée dans\n"
 "         '%s', même si elle est fusionnée dans HEAD."
 
-#: builtin/branch.c:171
+#: builtin/branch.c:183
 #, c-format
 msgid "Couldn't look up commit object for '%s'"
 msgstr "Impossible de rechercher l'objet commit pour '%s'"
 
-#: builtin/branch.c:175
+#: builtin/branch.c:187
 #, c-format
 msgid ""
 "The branch '%s' is not fully merged.\n"
@@ -11898,115 +12143,115 @@ msgstr ""
 "La branche '%s' n'est pas totalement fusionnée.\n"
 "Si vous souhaitez réellement la supprimer, lancez 'git branch -D %s'."
 
-#: builtin/branch.c:188
+#: builtin/branch.c:200
 msgid "Update of config-file failed"
 msgstr "Échec de la mise à jour du fichier de configuration"
 
-#: builtin/branch.c:223
+#: builtin/branch.c:235
 msgid "cannot use -a with -d"
 msgstr "impossible d'utiliser -a avec -d"
 
-#: builtin/branch.c:230
+#: builtin/branch.c:242
 msgid "Couldn't look up commit object for HEAD"
 msgstr "Impossible de rechercher l'objet commit pour HEAD"
 
-#: builtin/branch.c:247
+#: builtin/branch.c:259
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr "Impossible de supprimer la branche '%s' extraite dans '%s'"
 
-#: builtin/branch.c:262
+#: builtin/branch.c:274
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "branche de suivi '%s' non trouvée."
 
-#: builtin/branch.c:263
+#: builtin/branch.c:275
 #, c-format
 msgid "branch '%s' not found."
 msgstr "branche '%s' non trouvée."
 
-#: builtin/branch.c:294
+#: builtin/branch.c:306
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "Branche de suivi %s supprimée (précédemment %s).\n"
 
-#: builtin/branch.c:295
+#: builtin/branch.c:307
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "Branche %s supprimée (précédemment %s).\n"
 
-#: builtin/branch.c:445 builtin/tag.c:63
+#: builtin/branch.c:457 builtin/tag.c:64
 msgid "unable to parse format string"
 msgstr "impossible d'analyser la chaîne de format"
 
-#: builtin/branch.c:476
+#: builtin/branch.c:488
 msgid "could not resolve HEAD"
 msgstr "impossible de résoudre HEAD"
 
-#: builtin/branch.c:482
+#: builtin/branch.c:494
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "HEAD (%s) pointe hors de refs/heads/"
 
-#: builtin/branch.c:497
+#: builtin/branch.c:509
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "La branche %s est en cours de rebasage sur %s"
 
-#: builtin/branch.c:501
+#: builtin/branch.c:513
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "La branche %s est en cours de bissection sur %s"
 
-#: builtin/branch.c:518
+#: builtin/branch.c:530
 msgid "cannot copy the current branch while not on any."
 msgstr "impossible de copier la branche actuelle, il n'y en a pas."
 
-#: builtin/branch.c:520
+#: builtin/branch.c:532
 msgid "cannot rename the current branch while not on any."
 msgstr "impossible de renommer la branche actuelle, il n'y en a pas."
 
-#: builtin/branch.c:531
+#: builtin/branch.c:543
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Nom de branche invalide : '%s'"
 
-#: builtin/branch.c:560
+#: builtin/branch.c:572
 msgid "Branch rename failed"
 msgstr "Échec de renommage de la branche"
 
-#: builtin/branch.c:562
+#: builtin/branch.c:574
 msgid "Branch copy failed"
 msgstr "Échec de copie de la branche"
 
-#: builtin/branch.c:566
+#: builtin/branch.c:578
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "Création d'une copie d'une branche mal nommée '%s'"
 
-#: builtin/branch.c:569
+#: builtin/branch.c:581
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "Renommage d'une branche mal nommée '%s'"
 
-#: builtin/branch.c:575
+#: builtin/branch.c:587
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "La branche a été renommée en %s, mais HEAD n'est pas mise à jour !"
 
-#: builtin/branch.c:584
+#: builtin/branch.c:596
 msgid "Branch is renamed, but update of config-file failed"
 msgstr ""
 "La branche est renommée, mais la mise à jour du fichier de configuration a "
 "échoué"
 
-#: builtin/branch.c:586
+#: builtin/branch.c:598
 msgid "Branch is copied, but update of config-file failed"
 msgstr ""
 "La branche est copiée, mais la mise à jour du fichier de configuration a "
 "échoué"
 
-#: builtin/branch.c:602
+#: builtin/branch.c:614
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -12017,176 +12262,193 @@ msgstr ""
 "  %s\n"
 "Les lignes commençant par '%c' seront ignorées.\n"
 
-#: builtin/branch.c:637
+#: builtin/branch.c:651
 msgid "Generic options"
 msgstr "Options génériques"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:653
 msgid "show hash and subject, give twice for upstream branch"
 msgstr "afficher le hachage et le sujet, doublé pour la branche amont"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:654
 msgid "suppress informational messages"
 msgstr "supprimer les messages d'information"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:656 builtin/checkout.c:1571
+#: builtin/submodule--helper.c:3077
 msgid "set branch tracking configuration"
 msgstr "règler la configuration des branches de suivi"
 
-#: builtin/branch.c:645
+#: builtin/branch.c:659
 msgid "do not use"
 msgstr "ne pas utiliser"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:661
 msgid "upstream"
 msgstr "amont"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:661
 msgid "change the upstream info"
 msgstr "modifier l'information amont"
 
-#: builtin/branch.c:648
+#: builtin/branch.c:662
 msgid "unset the upstream info"
 msgstr "désactiver l'information amont"
 
-#: builtin/branch.c:649
+#: builtin/branch.c:663
 msgid "use colored output"
 msgstr "utiliser la coloration dans la sortie"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:664
 msgid "act on remote-tracking branches"
 msgstr "agir sur les branches de suivi distantes"
 
-#: builtin/branch.c:652 builtin/branch.c:654
+#: builtin/branch.c:666 builtin/branch.c:668
 msgid "print only branches that contain the commit"
 msgstr "afficher seulement les branches qui contiennent le commit"
 
-#: builtin/branch.c:653 builtin/branch.c:655
+#: builtin/branch.c:667 builtin/branch.c:669
 msgid "print only branches that don't contain the commit"
 msgstr "afficher seulement les branches qui ne contiennent pas le commit"
 
-#: builtin/branch.c:658
+#: builtin/branch.c:672
 msgid "Specific git-branch actions:"
 msgstr "Actions spécifiques à git-branch :"
 
-#: builtin/branch.c:659
+#: builtin/branch.c:673
 msgid "list both remote-tracking and local branches"
 msgstr "afficher à la fois les branches de suivi et les branches locales"
 
-#: builtin/branch.c:661
+#: builtin/branch.c:675
 msgid "delete fully merged branch"
 msgstr "supprimer une branche totalement fusionnée"
 
-#: builtin/branch.c:662
+#: builtin/branch.c:676
 msgid "delete branch (even if not merged)"
 msgstr "supprimer une branche (même non fusionnée)"
 
-#: builtin/branch.c:663
+#: builtin/branch.c:677
 msgid "move/rename a branch and its reflog"
 msgstr "déplacer/renommer une branche et son reflog"
 
-#: builtin/branch.c:664
+#: builtin/branch.c:678
 msgid "move/rename a branch, even if target exists"
 msgstr "déplacer/renommer une branche, même si la cible existe"
 
-#: builtin/branch.c:665
+#: builtin/branch.c:679
 msgid "copy a branch and its reflog"
 msgstr "copier une branche et son reflog"
 
-#: builtin/branch.c:666
+#: builtin/branch.c:680
 msgid "copy a branch, even if target exists"
 msgstr "copier une branche, même si la cible existe"
 
-#: builtin/branch.c:667
+#: builtin/branch.c:681
 msgid "list branch names"
 msgstr "afficher les noms des branches"
 
-#: builtin/branch.c:668
+#: builtin/branch.c:682
 msgid "show current branch name"
 msgstr "afficher le nom de la branche courante"
 
-#: builtin/branch.c:669
+#: builtin/branch.c:683 builtin/submodule--helper.c:3075
 msgid "create the branch's reflog"
 msgstr "créer le reflog de la branche"
 
-#: builtin/branch.c:671
+#: builtin/branch.c:685
 msgid "edit the description for the branch"
 msgstr "éditer la description de la branche"
 
-#: builtin/branch.c:672
+#: builtin/branch.c:686
 msgid "force creation, move/rename, deletion"
 msgstr "forcer la création, le déplacement/renommage, ou la suppression"
 
-#: builtin/branch.c:673
+#: builtin/branch.c:687
 msgid "print only branches that are merged"
 msgstr "afficher seulement les branches qui sont fusionnées"
 
-#: builtin/branch.c:674
+#: builtin/branch.c:688
 msgid "print only branches that are not merged"
 msgstr "afficher seulement les branches qui ne sont pas fusionnées"
 
-#: builtin/branch.c:675
+#: builtin/branch.c:689
 msgid "list branches in columns"
 msgstr "afficher les branches en colonnes"
 
-#: builtin/branch.c:677 builtin/for-each-ref.c:45 builtin/notes.c:413
+#: builtin/branch.c:691 builtin/for-each-ref.c:45 builtin/notes.c:413
 #: builtin/notes.c:416 builtin/notes.c:579 builtin/notes.c:582
-#: builtin/tag.c:475
+#: builtin/tag.c:476
 msgid "object"
 msgstr "objet"
 
-#: builtin/branch.c:678
+#: builtin/branch.c:692
 msgid "print only branches of the object"
 msgstr "afficher seulement les branches de l'objet"
 
-#: builtin/branch.c:679 builtin/for-each-ref.c:51 builtin/tag.c:482
+#: builtin/branch.c:693 builtin/for-each-ref.c:51 builtin/tag.c:483
 msgid "sorting and filtering are case insensitive"
 msgstr "le tri et le filtrage sont non-sensibles à la casse"
 
-#: builtin/branch.c:680 builtin/for-each-ref.c:41 builtin/tag.c:480
-#: builtin/verify-tag.c:38
+#: builtin/branch.c:694 builtin/ls-files.c:667
+msgid "recurse through submodules"
+msgstr "parcourir récursivement les sous-modules"
+
+#: builtin/branch.c:695 builtin/for-each-ref.c:41 builtin/ls-tree.c:358
+#: builtin/tag.c:481 builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "format à utiliser pour la sortie"
 
-#: builtin/branch.c:703 builtin/clone.c:678
+#: builtin/branch.c:718 builtin/clone.c:684
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD non trouvée sous refs/heads !"
 
-#: builtin/branch.c:742 builtin/branch.c:798 builtin/branch.c:807
+#: builtin/branch.c:739
+msgid ""
+"branch with --recurse-submodules can only be used if submodule."
+"propagateBranches is enabled"
+msgstr ""
+"brancher avec --recurse-submodules ne peut être utilisé que si submodule."
+"propagateBranches est activé"
+
+#: builtin/branch.c:741
+msgid "--recurse-submodules can only be used to create branches"
+msgstr "--recurse-submodules ne peut être utilisé que pour créer des branches"
+
+#: builtin/branch.c:770 builtin/branch.c:826 builtin/branch.c:835
 msgid "branch name required"
 msgstr "le nom de branche est requis"
 
-#: builtin/branch.c:774
+#: builtin/branch.c:802
 msgid "Cannot give description to detached HEAD"
 msgstr "Impossible de décrire une HEAD détachée"
 
-#: builtin/branch.c:779
+#: builtin/branch.c:807
 msgid "cannot edit description of more than one branch"
 msgstr "impossible d'éditer la description de plus d'une branche"
 
-#: builtin/branch.c:786
+#: builtin/branch.c:814
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "Aucun commit sur la branche '%s'."
 
-#: builtin/branch.c:789
+#: builtin/branch.c:817
 #, c-format
 msgid "No branch named '%s'."
 msgstr "Aucune branche nommée '%s'."
 
-#: builtin/branch.c:804
+#: builtin/branch.c:832
 msgid "too many branches for a copy operation"
 msgstr "trop de branches pour une opération de copie"
 
-#: builtin/branch.c:813
+#: builtin/branch.c:841
 msgid "too many arguments for a rename operation"
 msgstr "trop d'arguments pour une opération de renommage"
 
-#: builtin/branch.c:818
+#: builtin/branch.c:846
 msgid "too many arguments to set new upstream"
 msgstr "trop d'arguments pour spécifier une branche amont"
 
-#: builtin/branch.c:822
+#: builtin/branch.c:850
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
@@ -12194,32 +12456,32 @@ msgstr ""
 "impossible de spécifier une branche amont de HEAD par %s qui ne pointe sur "
 "aucune branche."
 
-#: builtin/branch.c:825 builtin/branch.c:848
+#: builtin/branch.c:853 builtin/branch.c:873
 #, c-format
 msgid "no such branch '%s'"
 msgstr "pas de branche '%s'"
 
-#: builtin/branch.c:829
+#: builtin/branch.c:857
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "la branche '%s' n'existe pas"
 
-#: builtin/branch.c:842
+#: builtin/branch.c:867
 msgid "too many arguments to unset upstream"
 msgstr "trop d'arguments pour désactiver un amont"
 
-#: builtin/branch.c:846
+#: builtin/branch.c:871
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr ""
 "impossible de désactiver une branche amont de HEAD quand elle ne pointe sur "
 "aucune branche."
 
-#: builtin/branch.c:852
+#: builtin/branch.c:877
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "La branche '%s' n'a aucune information de branche amont"
 
-#: builtin/branch.c:862
+#: builtin/branch.c:890
 msgid ""
 "The -a, and -r, options to 'git branch' do not take a branch name.\n"
 "Did you mean to use: -a|-r --list <pattern>?"
@@ -12228,7 +12490,7 @@ msgstr ""
 "branche.\n"
 "Vouliez-vous plutôt dire -a|-r --list <motif> ?"
 
-#: builtin/branch.c:866
+#: builtin/branch.c:894
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -12345,19 +12607,19 @@ msgstr "git bundle list-heads <fichier> [<nom-de-ref>...]"
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr "git bundle unbundle <fichier> [<nom-de-ref>...]"
 
-#: builtin/bundle.c:65 builtin/pack-objects.c:3876
+#: builtin/bundle.c:65 builtin/pack-objects.c:3899
 msgid "do not show progress meter"
 msgstr "ne pas afficher la barre de progression"
 
-#: builtin/bundle.c:67 builtin/bundle.c:167 builtin/pack-objects.c:3878
+#: builtin/bundle.c:67 builtin/bundle.c:168 builtin/pack-objects.c:3901
 msgid "show progress meter"
 msgstr "afficher la barre de progression"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3880
+#: builtin/bundle.c:69 builtin/pack-objects.c:3903
 msgid "show progress meter during object writing phase"
 msgstr "afficher la barre de progression durant la phase d'écrite des objets"
 
-#: builtin/bundle.c:72 builtin/pack-objects.c:3883
+#: builtin/bundle.c:72 builtin/pack-objects.c:3906
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "similaire à --all-progress quand la barre de progression est affichée"
 
@@ -12369,118 +12631,232 @@ msgstr "spécifier la version du format de colis"
 msgid "Need a repository to create a bundle."
 msgstr "La création d'un colis requiert un dépôt."
 
-#: builtin/bundle.c:107
+#: builtin/bundle.c:108
 msgid "do not show bundle details"
 msgstr "ne pas afficher les détails du colis"
 
-#: builtin/bundle.c:126
+#: builtin/bundle.c:127
 #, c-format
 msgid "%s is okay\n"
 msgstr "%s est correct\n"
 
-#: builtin/bundle.c:182
+#: builtin/bundle.c:183
 msgid "Need a repository to unbundle."
 msgstr "Le dépaquetage d'un colis requiert un dépôt."
 
-#: builtin/bundle.c:185
+#: builtin/bundle.c:186
 msgid "Unbundling objects"
 msgstr "Dépaquetage d'objets"
 
-#: builtin/bundle.c:219 builtin/remote.c:1733
+#: builtin/bundle.c:220 builtin/remote.c:1758
 #, c-format
 msgid "Unknown subcommand: %s"
 msgstr "Sous-commande inconnue : %s"
 
-#: builtin/cat-file.c:622
+#: builtin/cat-file.c:568
+msgid "flush is only for --buffer mode"
+msgstr "flush n'est que pour le mode --buffer"
+
+#: builtin/cat-file.c:612
+msgid "empty command in input"
+msgstr "commande vide dans l'entrée"
+
+#: builtin/cat-file.c:614
+#, c-format
+msgid "whitespace before command: '%s'"
+msgstr "caractère espace devant la commande : '%s'"
+
+#: builtin/cat-file.c:623
+#, c-format
+msgid "%s requires arguments"
+msgstr "%s nécessite des arguments"
+
+#: builtin/cat-file.c:628
+#, c-format
+msgid "%s takes no arguments"
+msgstr "%s n'accepte aucune argument"
+
+#: builtin/cat-file.c:636
+#, c-format
+msgid "unknown command: '%s'"
+msgstr "commande inconnue : %s"
+
+#: builtin/cat-file.c:795
+msgid "only one batch option may be specified"
+msgstr "une seule option de traitement ne peut être spécifiée à la fois"
+
+#: builtin/cat-file.c:824
+msgid "git cat-file <type> <object>"
+msgstr "git cat-file <type> <objet>"
+
+#: builtin/cat-file.c:825
+msgid "git cat-file (-e | -p) <object>"
+msgstr "git cat-file (-e | -p) <objet>"
+
+#: builtin/cat-file.c:826
+msgid "git cat-file (-t | -s) [--allow-unknown-type] <object>"
+msgstr "git cat-file (-t | -s) [--allow-unknown-type] <objet>"
+
+#: builtin/cat-file.c:827
 msgid ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <type> | --textconv | --filters) [--path=<path>] <object>"
+"git cat-file (--batch | --batch-check | --batch-command) [--batch-all-"
+"objects]\n"
+"             [--buffer] [--follow-symlinks] [--unordered]\n"
+"             [--textconv | --filters]"
 msgstr ""
-"git cat-file (-t [--allow-unknow-type] | -s [--allow-unknow-type] | -e | -p "
-"| <type> | --textconv | --filters) [--path=<chemin>] <objet>"
+"git cat-file (--batch | --batch-check | --batch-command) [--batch-all-"
+"objects]\n"
+"             [--buffer] [--follow-symlinks] [--unordered]\n"
+"             [--textconv | --filters]"
 
-#: builtin/cat-file.c:623
+#: builtin/cat-file.c:830
 msgid ""
-"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
-"symlinks] [--textconv | --filters]"
+"git cat-file (--textconv | --filters)\n"
+"             [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]"
 msgstr ""
-"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
-"symlinks] [--textconv | --filters]"
+"git cat-file (--textconv | --filters)\n"
+"             [<rev>:<chemin|arbresque> | --path=<chemin|arbresque> <rev>]"
 
-#: builtin/cat-file.c:644
-msgid "only one batch option may be specified"
-msgstr "une seule option de traitement ne peut être spécifiée à la fois"
+#: builtin/cat-file.c:836
+msgid "Check object existence or emit object contents"
+msgstr "Vérifie l'existence d'un objet ou émettre le contenu de l'objet"
 
-#: builtin/cat-file.c:662
-msgid "<type> can be one of: blob, tree, commit, tag"
-msgstr "<type> peut être : blob, tree, commit ou tag"
+#: builtin/cat-file.c:838
+msgid "check if <object> exists"
+msgstr "Vérification si <objet> existe"
 
-#: builtin/cat-file.c:663
-msgid "show object type"
-msgstr "afficher le type de l'objet"
+#: builtin/cat-file.c:839
+msgid "pretty-print <object> content"
+msgstr "affichage propre du contenu de <objet>"
 
-#: builtin/cat-file.c:664
+#: builtin/cat-file.c:841
+msgid "Emit [broken] object attributes"
+msgstr "Émet les attributs [broken] d'un objet"
+
+#: builtin/cat-file.c:842
+msgid "show object type (one of 'blob', 'tree', 'commit', 'tag', ...)"
+msgstr "montrer le type de l'objet (parmi 'blob', 'tree', 'commit', 'tag' ...)"
+
+#: builtin/cat-file.c:843
 msgid "show object size"
 msgstr "afficher la taille de l'objet"
 
-#: builtin/cat-file.c:666
-msgid "exit with zero when there's no error"
-msgstr "sortir avec un code d'erreur nul quand il n'y a aucune erreur"
+#: builtin/cat-file.c:845
+msgid "allow -s and -t to work with broken/corrupt objects"
+msgstr "autoriser -s et -t à travailler sur des objets cassés/corrompus"
 
-#: builtin/cat-file.c:667
-msgid "pretty-print object's content"
-msgstr "afficher avec mise en forme le contenu de l'objet"
+#: builtin/cat-file.c:847
+msgid "Batch objects requested on stdin (or --batch-all-objects)"
+msgstr "Traiter par lot les objets demandés sur stdin (ou --batch-all-objects)"
 
-#: builtin/cat-file.c:669
-msgid "for blob objects, run textconv on object's content"
-msgstr "pour les objets blob, lancer textconv sur le contenu de l'objet"
+#: builtin/cat-file.c:849
+msgid "show full <object> or <rev> contents"
+msgstr "afficher tout le contenu de <objet> ou <rev>"
 
-#: builtin/cat-file.c:671
-msgid "for blob objects, run filters on object's content"
-msgstr "pour les objets blob, lancer les filtres sur le contenu de l'objet"
+#: builtin/cat-file.c:853
+msgid "like --batch, but don't emit <contents>"
+msgstr "comme --batch, mais ne pas émettre <contenu>"
 
-#: builtin/cat-file.c:672
-msgid "blob"
-msgstr "blob"
+#: builtin/cat-file.c:857
+msgid "read commands from stdin"
+msgstr "lire les commandes depuis l'entrée standard"
 
-#: builtin/cat-file.c:673
-msgid "use a specific path for --textconv/--filters"
-msgstr "utiliser un chemin spécifique pour --textconv/--filters"
+#: builtin/cat-file.c:861
+msgid "with --batch[-check]: ignores stdin, batches all known objects"
+msgstr ""
+"avec --batch[-check] : ignore stdin, gère tous les objets connus par lots"
 
-#: builtin/cat-file.c:675
-msgid "allow -s and -t to work with broken/corrupt objects"
-msgstr "autoriser -s et -t à travailler sur des objets cassés/corrompus"
+#: builtin/cat-file.c:863
+msgid "Change or optimize batch output"
+msgstr "Changer ou optimiser la sortie de traitement"
 
-#: builtin/cat-file.c:676
+#: builtin/cat-file.c:864
 msgid "buffer --batch output"
 msgstr "bufferiser la sortie de --batch"
 
-#: builtin/cat-file.c:678
-msgid "show info and content of objects fed from the standard input"
-msgstr ""
-"afficher l'information et le contenu des objets passés en entrée standard"
+#: builtin/cat-file.c:866
+msgid "follow in-tree symlinks"
+msgstr "suivi des liens symboliques dans l'arbre"
 
-#: builtin/cat-file.c:682
-msgid "show info about objects fed from the standard input"
-msgstr "afficher l'information des objets passés en entrée standard"
+#: builtin/cat-file.c:868
+msgid "do not order objects before emitting them"
+msgstr "ne pas ordonner les objets avant de les émettre"
 
-#: builtin/cat-file.c:686
-msgid "follow in-tree symlinks (used with --batch or --batch-check)"
+#: builtin/cat-file.c:870
+msgid ""
+"Emit object (blob or tree) with conversion or filter (stand-alone, or with "
+"batch)"
 msgstr ""
-"suivre les liens symbolique internes à la copie de travail (utilisé avec --"
-"batch ou --batch-check)"
+"Émet l'objet (blob ou arbre) avec une conversion ou un filtre (autonome ou "
+"en lot)"
 
-#: builtin/cat-file.c:688
-msgid "show all objects with --batch or --batch-check"
-msgstr "montrer tous les objets avec --batch ou --batch-check"
+#: builtin/cat-file.c:872
+msgid "run textconv on object's content"
+msgstr "lancer textconv sur le contenu de l'objet"
 
-#: builtin/cat-file.c:690
-msgid "do not order --batch-all-objects output"
-msgstr "ne pas ordonner la sortie de --batch-all-objects"
+#: builtin/cat-file.c:874
+msgid "run filters on object's content"
+msgstr "lancer les filtres sur le contenu de l'objet"
 
-#: builtin/check-attr.c:13
-msgid "git check-attr [-a | --all | <attr>...] [--] <pathname>..."
-msgstr "git check-attr [-a | --all | <attr>...] [--] <chemin>..."
+#: builtin/cat-file.c:875
+msgid "blob|tree"
+msgstr "blob|arbre"
+
+#: builtin/cat-file.c:876
+msgid "use a <path> for (--textconv | --filters); Not with 'batch'"
+msgstr ""
+"utiliser un <chemin> spécifique pour (--textconv | --filters); pas pour les "
+"lots"
+
+#: builtin/cat-file.c:894
+#, c-format
+msgid "'%s=<%s>' needs '%s' or '%s'"
+msgstr "'%s=<%s>' a besoin de  '%s' ou '%s'"
+
+#: builtin/cat-file.c:896
+msgid "path|tree-ish"
+msgstr "blob|arbre-esque"
+
+#: builtin/cat-file.c:903 builtin/cat-file.c:906 builtin/cat-file.c:909
+#, c-format
+msgid "'%s' requires a batch mode"
+msgstr "%s a besoin d'un mode par lots"
+
+#: builtin/cat-file.c:921
+#, c-format
+msgid "'-%c' is incompatible with batch mode"
+msgstr "'-%c' est incompatible avec le mode par lots"
+
+#: builtin/cat-file.c:924
+msgid "batch modes take no arguments"
+msgstr "les modes par lot n'acceptent aucun argument"
+
+#: builtin/cat-file.c:932 builtin/cat-file.c:935
+#, c-format
+msgid "<rev> required with '%s'"
+msgstr "<rev> nécessaire avec '%s'"
+
+#: builtin/cat-file.c:938
+#, c-format
+msgid "<object> required with '-%c'"
+msgstr "<objet> nécessaire avec '-%c'"
+
+#: builtin/cat-file.c:943 builtin/notes.c:374 builtin/notes.c:429
+#: builtin/notes.c:507 builtin/notes.c:519 builtin/notes.c:596
+#: builtin/notes.c:663 builtin/notes.c:813 builtin/notes.c:965
+#: builtin/notes.c:987 builtin/prune-packed.c:25 builtin/receive-pack.c:2489
+#: builtin/tag.c:592
+msgid "too many arguments"
+msgstr "trop d'arguments"
+
+#: builtin/cat-file.c:947
+#, c-format
+msgid "only two arguments allowed in <type> <object> mode, not %d"
+msgstr "deux arguments seulement permis dans le mode <type> <objet>, pas %d"
+
+#: builtin/check-attr.c:13
+msgid "git check-attr [-a | --all | <attr>...] [--] <pathname>..."
+msgstr "git check-attr [-a | --all | <attr>...] [--] <chemin>..."
 
 #: builtin/check-attr.c:14
 msgid "git check-attr --stdin [-z] [-a | --all | <attr>...]"
@@ -12494,7 +12870,7 @@ msgstr "afficher tous les attributs associés au fichier"
 msgid "use .gitattributes only from the index"
 msgstr "utiliser .gitattributes seulement depuis l'index"
 
-#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:100
+#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:101
 msgid "read file names from stdin"
 msgstr "lire les noms de fichier depuis l'entrée standard"
 
@@ -12503,8 +12879,8 @@ msgid "terminate input and output records by a NUL character"
 msgstr ""
 "terminer les enregistrements en entrée et en sortie par un caractère NUL"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1532 builtin/gc.c:550
-#: builtin/worktree.c:493
+#: builtin/check-ignore.c:21 builtin/checkout.c:1550 builtin/gc.c:550
+#: builtin/worktree.c:565
 msgid "suppress progress reporting"
 msgstr "supprimer l'état d'avancement"
 
@@ -12561,165 +12937,169 @@ msgstr "aucun contact spécifié"
 msgid "git checkout--worker [<options>]"
 msgstr "git checkout--worker [<options>]"
 
-#: builtin/checkout--worker.c:118 builtin/checkout-index.c:201
-#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1864
-#: builtin/submodule--helper.c:1867 builtin/submodule--helper.c:1875
-#: builtin/submodule--helper.c:2511 builtin/submodule--helper.c:2577
-#: builtin/worktree.c:491 builtin/worktree.c:728
+#: builtin/checkout--worker.c:118 builtin/checkout-index.c:235
+#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1878
+#: builtin/submodule--helper.c:1881 builtin/submodule--helper.c:1889
+#: builtin/submodule--helper.c:2716 builtin/worktree.c:563
+#: builtin/worktree.c:808
 msgid "string"
 msgstr "chaîne"
 
-#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:236
 msgid "when creating files, prepend <string>"
 msgstr "lors de la création de fichiers, préfixer par <chaîne>"
 
-#: builtin/checkout-index.c:152
+#: builtin/checkout-index.c:184
 msgid "git checkout-index [<options>] [--] [<file>...]"
 msgstr "git checkout-index [<options>] [--] [<fichier>...]"
 
-#: builtin/checkout-index.c:169
+#: builtin/checkout-index.c:201
 msgid "stage should be between 1 and 3 or all"
 msgstr "stage doit valoir entre 1 et 3, ou all"
 
-#: builtin/checkout-index.c:187
+#: builtin/checkout-index.c:219
 msgid "check out all files in the index"
 msgstr "extraire tous les fichiers présents dans l'index"
 
-#: builtin/checkout-index.c:188
+#: builtin/checkout-index.c:221
+msgid "do not skip files with skip-worktree set"
+msgstr "ne pas sauter des fichiers avec un ensemble skip-worktree"
+
+#: builtin/checkout-index.c:222
 msgid "force overwrite of existing files"
 msgstr "forcer l'écrasement des fichiers existants"
 
-#: builtin/checkout-index.c:190
+#: builtin/checkout-index.c:224
 msgid "no warning for existing files and files not in index"
 msgstr ""
 "pas d'avertissement pour les fichiers existants et les fichiers absents de "
 "l'index"
 
-#: builtin/checkout-index.c:192
+#: builtin/checkout-index.c:226
 msgid "don't checkout new files"
 msgstr "ne pas extraire les nouveaux fichiers"
 
-#: builtin/checkout-index.c:194
+#: builtin/checkout-index.c:228
 msgid "update stat information in the index file"
 msgstr "mettre à jour l'information de stat dans le fichier d'index"
 
-#: builtin/checkout-index.c:198
+#: builtin/checkout-index.c:232
 msgid "read list of paths from the standard input"
 msgstr "lire la liste des chemins depuis l'entrée standard"
 
-#: builtin/checkout-index.c:200
+#: builtin/checkout-index.c:234
 msgid "write the content to temporary files"
 msgstr "écrire le contenu dans des fichiers temporaires"
 
-#: builtin/checkout-index.c:204
+#: builtin/checkout-index.c:238
 msgid "copy out the files from named stage"
 msgstr "copier les fichiers depuis l'index nommé"
 
-#: builtin/checkout.c:33
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [<options>] <branche>"
 
-#: builtin/checkout.c:34
+#: builtin/checkout.c:35
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [<options>] [<branche>] -- <fichier>..."
 
-#: builtin/checkout.c:39
+#: builtin/checkout.c:40
 msgid "git switch [<options>] [<branch>]"
 msgstr "git switch [<options>] <branche>"
 
-#: builtin/checkout.c:44
+#: builtin/checkout.c:45
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<options>] [--source=<branche>] <fichier>..."
 
-#: builtin/checkout.c:198 builtin/checkout.c:237
+#: builtin/checkout.c:199 builtin/checkout.c:238
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "le chemin '%s' n'a pas notre version"
 
-#: builtin/checkout.c:200 builtin/checkout.c:239
+#: builtin/checkout.c:201 builtin/checkout.c:240
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "le chemin '%s' n'a pas leur version"
 
-#: builtin/checkout.c:216
+#: builtin/checkout.c:217
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "le chemin '%s' n'a aucune des versions nécessaires"
 
-#: builtin/checkout.c:269
+#: builtin/checkout.c:271
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "le chemin '%s' n'a pas les versions nécessaires"
 
-#: builtin/checkout.c:286
+#: builtin/checkout.c:291
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "chemin '%s' : impossible de fusionner"
 
-#: builtin/checkout.c:302
+#: builtin/checkout.c:307
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "Impossible d'ajouter le résultat de fusion pour '%s'"
 
-#: builtin/checkout.c:419
+#: builtin/checkout.c:424
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "%d conflit du fusion recréé"
 msgstr[1] "%d conflits du fusion recréés"
 
-#: builtin/checkout.c:424
+#: builtin/checkout.c:429
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "%d chemin mis à jour depuis %s"
 msgstr[1] "%d chemins mis à jour depuis %s"
 
-#: builtin/checkout.c:431
+#: builtin/checkout.c:436
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "%d chemin mis à jour depuis l'index"
 msgstr[1] "%d chemins mis à jour depuis l'index"
 
-#: builtin/checkout.c:454 builtin/checkout.c:457 builtin/checkout.c:460
-#: builtin/checkout.c:464
+#: builtin/checkout.c:459 builtin/checkout.c:462 builtin/checkout.c:465
+#: builtin/checkout.c:469
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "'%s' ne peut pas être utilisé avec des mises à jour de chemins"
 
-#: builtin/checkout.c:474
+#: builtin/checkout.c:479
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr ""
 "Impossible de mettre à jour les chemins et basculer sur la branche '%s' en "
 "même temps."
 
-#: builtin/checkout.c:478
+#: builtin/checkout.c:483
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "ni '%s', ni '%s' spécifié"
 
-#: builtin/checkout.c:482
+#: builtin/checkout.c:487
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "'%s' ne peut pas être utilisé quand '%s' n'est pas spécifié"
 
-#: builtin/checkout.c:487 builtin/checkout.c:492
+#: builtin/checkout.c:492 builtin/checkout.c:497
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "'%s' ou '%s' ne peut pas être utilisé avec %s"
 
-#: builtin/checkout.c:566 builtin/checkout.c:573
+#: builtin/checkout.c:571 builtin/checkout.c:578
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "le chemin '%s' n'est pas fusionné"
 
-#: builtin/checkout.c:747
+#: builtin/checkout.c:753
 msgid "you need to resolve your current index first"
 msgstr "vous devez d'abord résoudre votre index courant"
 
-#: builtin/checkout.c:797
+#: builtin/checkout.c:809
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -12729,50 +13109,50 @@ msgstr ""
 "suivants :\n"
 "%s"
 
-#: builtin/checkout.c:890
+#: builtin/checkout.c:902
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "Impossible de faire un reflog pour '%s' : %s\n"
 
-#: builtin/checkout.c:934
+#: builtin/checkout.c:947
 msgid "HEAD is now at"
 msgstr "HEAD est maintenant sur"
 
-#: builtin/checkout.c:938 builtin/clone.c:609 t/helper/test-fast-rebase.c:203
+#: builtin/checkout.c:951 builtin/clone.c:615 t/helper/test-fast-rebase.c:203
 msgid "unable to update HEAD"
 msgstr "impossible de mettre à jour HEAD"
 
-#: builtin/checkout.c:942
+#: builtin/checkout.c:955
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "Remise à zéro de la branche '%s'\n"
 
-#: builtin/checkout.c:945
+#: builtin/checkout.c:958
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Déjà sur '%s'\n"
 
-#: builtin/checkout.c:949
+#: builtin/checkout.c:962
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "Basculement et remise à zéro de la branche '%s'\n"
 
-#: builtin/checkout.c:951 builtin/checkout.c:1388
+#: builtin/checkout.c:964 builtin/checkout.c:1398
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "Basculement sur la nouvelle branche '%s'\n"
 
-#: builtin/checkout.c:953
+#: builtin/checkout.c:966
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "Basculement sur la branche '%s'\n"
 
-#: builtin/checkout.c:1004
+#: builtin/checkout.c:1017
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " ... et %d en plus.\n"
 
-#: builtin/checkout.c:1010
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -12795,7 +13175,7 @@ msgstr[1] ""
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1029
+#: builtin/checkout.c:1042
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -12824,19 +13204,19 @@ msgstr[1] ""
 "git branch <nouvelle-branche> %s\n"
 "\n"
 
-#: builtin/checkout.c:1064
+#: builtin/checkout.c:1077
 msgid "internal error in revision walk"
 msgstr "erreur interne lors du parcours des révisions"
 
-#: builtin/checkout.c:1068
+#: builtin/checkout.c:1081
 msgid "Previous HEAD position was"
 msgstr "La position précédente de HEAD était sur"
 
-#: builtin/checkout.c:1114 builtin/checkout.c:1383
+#: builtin/checkout.c:1124 builtin/checkout.c:1393
 msgid "You are on a branch yet to be born"
 msgstr "Vous êtes sur une branche qui doit encore naître"
 
-#: builtin/checkout.c:1196
+#: builtin/checkout.c:1206
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -12845,7 +13225,7 @@ msgstr ""
 "'%s' pourrait être un fichier local ou un branche de suivi.\n"
 "Veuillez utiliser -- (et --no-guess en facultatif) pour les distinguer"
 
-#: builtin/checkout.c:1203
+#: builtin/checkout.c:1213
 msgid ""
 "If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
 "you can do so by fully qualifying the name with the --track option:\n"
@@ -12865,51 +13245,58 @@ msgstr ""
 "ambigu, vous pouvez positionner checkout.defaultRemote=origin dans\n"
 "votre config."
 
-#: builtin/checkout.c:1213
+#: builtin/checkout.c:1223
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "'%s' correspond à plusieurs (%d) branches de suivi à distance"
 
-#: builtin/checkout.c:1279
+#: builtin/checkout.c:1289
 msgid "only one reference expected"
 msgstr "une seule référence attendue"
 
-#: builtin/checkout.c:1296
+#: builtin/checkout.c:1306
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "une seule référence attendue, %d fournies."
 
-#: builtin/checkout.c:1342 builtin/worktree.c:269 builtin/worktree.c:436
+#: builtin/checkout.c:1352 builtin/worktree.c:338 builtin/worktree.c:508
 #, c-format
 msgid "invalid reference: %s"
 msgstr "référence invalide : %s"
 
-#: builtin/checkout.c:1355 builtin/checkout.c:1725
+#: builtin/checkout.c:1365 builtin/checkout.c:1744
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "la référence n'est pas un arbre : %s"
 
-#: builtin/checkout.c:1402
+#: builtin/checkout.c:1413
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "branche attendue, mais étiquette '%s' reçue"
 
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1415
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "une branche est attendue, mais une branche distante '%s' a été reçue"
 
-#: builtin/checkout.c:1405 builtin/checkout.c:1413
+#: builtin/checkout.c:1417 builtin/checkout.c:1426
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "une branche est attendue, mais '%s' a été reçue"
 
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1420
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "une branche est attendue, mais un commit '%s' a été reçu"
 
-#: builtin/checkout.c:1424
+#: builtin/checkout.c:1429
+msgid ""
+"If you want to detach HEAD at the commit, try again with the --detach option."
+msgstr ""
+"Si vous souhaitez détacher HEAD à ce commit, réessayez avec l'option --"
+"detach."
+
+#: builtin/checkout.c:1442
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
@@ -12917,7 +13304,7 @@ msgstr ""
 "impossible de basculer de branche pendant une fusion\n"
 "Envisagez \"git merge --quit\" ou \"git worktree add\"."
 
-#: builtin/checkout.c:1428
+#: builtin/checkout.c:1446
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
@@ -12925,7 +13312,7 @@ msgstr ""
 "impossible de basculer de branche pendant une session am\n"
 "Envisagez \"git am --quit\" ou \"git worktree add\"."
 
-#: builtin/checkout.c:1432
+#: builtin/checkout.c:1450
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -12933,7 +13320,7 @@ msgstr ""
 "impossible de basculer de branche pendant un rebasage\n"
 "Envisagez \"git rebase --quit\" ou \"git worktree add\"."
 
-#: builtin/checkout.c:1436
+#: builtin/checkout.c:1454
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -12941,7 +13328,7 @@ msgstr ""
 "impossible de basculer de branche pendant un picorage\n"
 "Envisagez \"git cherry-pick --quit\" ou \"git worktree add\"."
 
-#: builtin/checkout.c:1440
+#: builtin/checkout.c:1458
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -12949,128 +13336,124 @@ msgstr ""
 "impossible de basculer de branche pendant un retour\n"
 "Envisagez \"git revert --quit\" ou \"git worktree add\"."
 
-#: builtin/checkout.c:1444
+#: builtin/checkout.c:1462
 msgid "you are switching branch while bisecting"
 msgstr "vous basculez de branche en cours de bissection"
 
-#: builtin/checkout.c:1451
+#: builtin/checkout.c:1469
 msgid "paths cannot be used with switching branches"
 msgstr "impossible d'utiliser des chemins avec un basculement de branches"
 
-#: builtin/checkout.c:1454 builtin/checkout.c:1458 builtin/checkout.c:1462
+#: builtin/checkout.c:1472 builtin/checkout.c:1476 builtin/checkout.c:1480
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "'%s' ne peut pas être utilisé avec un basculement de branches"
 
-#: builtin/checkout.c:1466 builtin/checkout.c:1469 builtin/checkout.c:1472
-#: builtin/checkout.c:1477 builtin/checkout.c:1482
+#: builtin/checkout.c:1484 builtin/checkout.c:1487 builtin/checkout.c:1490
+#: builtin/checkout.c:1495 builtin/checkout.c:1500
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "'%s' ne peut pas être utilisé avec '%s'"
 
-#: builtin/checkout.c:1479
+#: builtin/checkout.c:1497
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "'%s' n'accepte pas <point-de-départ>"
 
-#: builtin/checkout.c:1487
+#: builtin/checkout.c:1505
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "Impossible de basculer de branche vers '%s' qui n'est pas un commit"
 
-#: builtin/checkout.c:1494
+#: builtin/checkout.c:1512
 msgid "missing branch or commit argument"
 msgstr "argument de branche ou de commit manquant"
 
-#: builtin/checkout.c:1537
+#: builtin/checkout.c:1555
 msgid "perform a 3-way merge with the new branch"
 msgstr "effectuer une fusion à 3 points avec la nouvelle branche"
 
-#: builtin/checkout.c:1538 builtin/log.c:1825 parse-options.h:323
+#: builtin/checkout.c:1556 builtin/log.c:1844 parse-options.h:354
 msgid "style"
 msgstr "style"
 
-#: builtin/checkout.c:1539
+#: builtin/checkout.c:1557
 msgid "conflict style (merge, diff3, or zdiff3)"
 msgstr "style de conflit (merge (fusion), diff3 ou zdiff3)"
 
-#: builtin/checkout.c:1551 builtin/worktree.c:488
+#: builtin/checkout.c:1569 builtin/worktree.c:560
 msgid "detach HEAD at named commit"
 msgstr "détacher la HEAD au commit nommé"
 
-#: builtin/checkout.c:1553
-msgid "set up tracking mode (see git-pull(1))"
-msgstr "régler le mode de suivi (voir git-pull(1))"
-
-#: builtin/checkout.c:1556
+#: builtin/checkout.c:1574
 msgid "force checkout (throw away local modifications)"
 msgstr "forcer l'extraction (laisser tomber les modifications locales)"
 
-#: builtin/checkout.c:1558
+#: builtin/checkout.c:1576
 msgid "new-branch"
 msgstr "nouvelle branche"
 
-#: builtin/checkout.c:1558
+#: builtin/checkout.c:1576
 msgid "new unparented branch"
 msgstr "nouvelle branche sans parent"
 
-#: builtin/checkout.c:1560 builtin/merge.c:305
+#: builtin/checkout.c:1578 builtin/merge.c:305
 msgid "update ignored files (default)"
 msgstr "mettre à jour les fichiers ignorés (par défaut)"
 
-#: builtin/checkout.c:1563
+#: builtin/checkout.c:1581
 msgid "do not check if another worktree is holding the given ref"
 msgstr ""
 "ne pas vérifier si une autre copie de travail contient le référence fournie"
 
-#: builtin/checkout.c:1576
+#: builtin/checkout.c:1594
 msgid "checkout our version for unmerged files"
 msgstr "extraire notre version pour les fichiers non fusionnés"
 
-#: builtin/checkout.c:1579
+#: builtin/checkout.c:1597
 msgid "checkout their version for unmerged files"
 msgstr "extraire leur version pour les fichiers non fusionnés"
 
-#: builtin/checkout.c:1583
+#: builtin/checkout.c:1601
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "ne pas limiter les spécificateurs de chemins aux seuls éléments creux"
 
-#: builtin/checkout.c:1640
+#: builtin/checkout.c:1659
 #, c-format
 msgid "options '-%c', '-%c', and '%s' cannot be used together"
 msgstr ""
 "les options '-%c', '-%c' et '%s' ne peuvent pas être utilisées ensemble"
 
-#: builtin/checkout.c:1681
+#: builtin/checkout.c:1700
 msgid "--track needs a branch name"
 msgstr "--track requiert un nom de branche"
 
-#: builtin/checkout.c:1686
+#: builtin/checkout.c:1705
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "nom de branche manquant ; essayez -%c"
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1737
 #, c-format
 msgid "could not resolve %s"
 msgstr "impossible de résoudre %s"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1753
 msgid "invalid path specification"
 msgstr "spécification de chemin invalide"
 
-#: builtin/checkout.c:1741
+#: builtin/checkout.c:1760
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr ""
 "'%s' n'est pas un commit et une branche '%s' ne peut pas en être créée depuis"
 
-#: builtin/checkout.c:1745
+#: builtin/checkout.c:1764
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout: --detach n'accepte pas un argument de chemin '%s'"
 
-#: builtin/checkout.c:1770
+#: builtin/checkout.c:1789
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -13078,72 +13461,72 @@ msgstr ""
 "git checkout: --ours/--theirs, --force et --merge sont incompatibles lors\n"
 "de l'extraction de l'index."
 
-#: builtin/checkout.c:1775
+#: builtin/checkout.c:1794
 msgid "you must specify path(s) to restore"
 msgstr "vous devez spécifier un ou des chemins à restaurer"
 
-#: builtin/checkout.c:1800 builtin/checkout.c:1802 builtin/checkout.c:1854
-#: builtin/checkout.c:1856 builtin/clone.c:126 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2959
-#: builtin/submodule--helper.c:3253 builtin/worktree.c:484
-#: builtin/worktree.c:486
+#: builtin/checkout.c:1819 builtin/checkout.c:1821 builtin/checkout.c:1873
+#: builtin/checkout.c:1875 builtin/clone.c:130 builtin/remote.c:171
+#: builtin/remote.c:173 builtin/submodule--helper.c:3038
+#: builtin/submodule--helper.c:3371 builtin/worktree.c:556
+#: builtin/worktree.c:558
 msgid "branch"
 msgstr "branche"
 
-#: builtin/checkout.c:1801
+#: builtin/checkout.c:1820
 msgid "create and checkout a new branch"
 msgstr "créer et extraire une nouvelle branche"
 
-#: builtin/checkout.c:1803
+#: builtin/checkout.c:1822
 msgid "create/reset and checkout a branch"
 msgstr "créer/réinitialiser et extraire une branche"
 
-#: builtin/checkout.c:1804
+#: builtin/checkout.c:1823
 msgid "create reflog for new branch"
 msgstr "créer un reflog pour une nouvelle branche"
 
-#: builtin/checkout.c:1806
+#: builtin/checkout.c:1825
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr ""
 "essayer d'interpréter 'git checkout <branche-inexistante>' (par défaut)"
 
-#: builtin/checkout.c:1807
+#: builtin/checkout.c:1826
 msgid "use overlay mode (default)"
 msgstr "utiliser le mode de superposition (défaut)"
 
-#: builtin/checkout.c:1855
+#: builtin/checkout.c:1874
 msgid "create and switch to a new branch"
 msgstr "créer et basculer sur une nouvelle branche"
 
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1876
 msgid "create/reset and switch to a branch"
 msgstr "créer/réinitialiser et basculer sur une branche"
 
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1878
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "interpréter 'git switch <branche-inexistante>'"
 
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1880
 msgid "throw away local modifications"
 msgstr "laisser tomber les modifications locales"
 
-#: builtin/checkout.c:1897
+#: builtin/checkout.c:1916
 msgid "which tree-ish to checkout from"
 msgstr "de quel <arbre-esque> faire l'extraction"
 
-#: builtin/checkout.c:1899
+#: builtin/checkout.c:1918
 msgid "restore the index"
 msgstr "restaurer l'index"
 
-#: builtin/checkout.c:1901
+#: builtin/checkout.c:1920
 msgid "restore the working tree (default)"
 msgstr "restaurer l'arbre de travail (par défaut)"
 
-#: builtin/checkout.c:1903
+#: builtin/checkout.c:1922
 msgid "ignore unmerged entries"
 msgstr "ignorer les entrées non-fusionnées"
 
-#: builtin/checkout.c:1904
+#: builtin/checkout.c:1923
 msgid "use overlay mode"
 msgstr "utiliser le mode de superposition"
 
@@ -13291,8 +13674,8 @@ msgid "remove whole directories"
 msgstr "supprimer les répertoires entiers"
 
 #: builtin/clean.c:932 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:937 builtin/log.c:184 builtin/log.c:186
-#: builtin/ls-files.c:651 builtin/name-rev.c:535 builtin/name-rev.c:537
+#: builtin/grep.c:938 builtin/log.c:185 builtin/log.c:187
+#: builtin/ls-files.c:651 builtin/name-rev.c:585 builtin/name-rev.c:587
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "motif"
@@ -13329,214 +13712,218 @@ msgstr ""
 msgid "-x and -X cannot be used together"
 msgstr "-x et -X ne peuvent pas être utilisés ensemble"
 
-#: builtin/clone.c:45
+#: builtin/clone.c:47
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<options>] [--] <dépôt> [<répertoire>]"
 
-#: builtin/clone.c:96
+#: builtin/clone.c:100
 msgid "don't clone shallow repository"
 msgstr "ne pas cloner un dépôt superficiel"
 
-#: builtin/clone.c:98
+#: builtin/clone.c:102
 msgid "don't create a checkout"
 msgstr "ne pas créer d'extraction"
 
-#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:542
+#: builtin/clone.c:103 builtin/clone.c:105 builtin/init-db.c:542
 msgid "create a bare repository"
 msgstr "créer un dépôt nu"
 
-#: builtin/clone.c:103
+#: builtin/clone.c:107
 msgid "create a mirror repository (implies bare)"
 msgstr "créer un dépôt miroir (implique dépôt nu)"
 
-#: builtin/clone.c:105
+#: builtin/clone.c:109
 msgid "to clone from a local repository"
 msgstr "pour cloner depuis un dépôt local"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "don't use local hardlinks, always copy"
 msgstr "ne pas utiliser de liens durs locaux, toujours copier"
 
-#: builtin/clone.c:109
+#: builtin/clone.c:113
 msgid "setup as shared repository"
 msgstr "régler comme dépôt partagé"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "pathspec"
 msgstr "spécificateur de chemin"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "initialize submodules in the clone"
 msgstr "initialiser les sous-modules dans le clone"
 
-#: builtin/clone.c:115
+#: builtin/clone.c:119
 msgid "number of submodules cloned in parallel"
 msgstr "nombre de sous-modules clonés en parallèle"
 
-#: builtin/clone.c:116 builtin/init-db.c:539
+#: builtin/clone.c:120 builtin/init-db.c:539
 msgid "template-directory"
 msgstr "répertoire-modèle"
 
-#: builtin/clone.c:117 builtin/init-db.c:540
+#: builtin/clone.c:121 builtin/init-db.c:540
 msgid "directory from which templates will be used"
 msgstr "répertoire depuis lequel les modèles vont être utilisés"
 
-#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1871
-#: builtin/submodule--helper.c:2514 builtin/submodule--helper.c:3260
+#: builtin/clone.c:123 builtin/clone.c:125 builtin/submodule--helper.c:1885
+#: builtin/submodule--helper.c:2719 builtin/submodule--helper.c:3378
 msgid "reference repository"
 msgstr "dépôt de référence"
 
-#: builtin/clone.c:123 builtin/submodule--helper.c:1873
-#: builtin/submodule--helper.c:2516
+#: builtin/clone.c:127 builtin/submodule--helper.c:1887
+#: builtin/submodule--helper.c:2721
 msgid "use --reference only while cloning"
 msgstr "utiliser seulement --reference pour cloner"
 
-#: builtin/clone.c:124 builtin/column.c:27 builtin/fmt-merge-msg.c:27
+#: builtin/clone.c:128 builtin/column.c:27 builtin/fmt-merge-msg.c:27
 #: builtin/init-db.c:550 builtin/merge-file.c:48 builtin/merge.c:290
-#: builtin/pack-objects.c:3944 builtin/repack.c:665
-#: builtin/submodule--helper.c:3262 t/helper/test-simple-ipc.c:595
+#: builtin/pack-objects.c:3967 builtin/repack.c:669
+#: builtin/submodule--helper.c:3380 t/helper/test-simple-ipc.c:595
 #: t/helper/test-simple-ipc.c:597
 msgid "name"
 msgstr "nom"
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "utiliser <nom> au lieu de 'origin' pour suivre la branche amont"
 
-#: builtin/clone.c:127
+#: builtin/clone.c:131
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "extraire <branche> au lieu de la HEAD du répertoire distant"
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133
 msgid "path to git-upload-pack on the remote"
 msgstr "chemin vers git-upload-pack sur le serveur distant"
 
-#: builtin/clone.c:130 builtin/fetch.c:181 builtin/grep.c:876
+#: builtin/clone.c:134 builtin/fetch.c:182 builtin/grep.c:877
 #: builtin/pull.c:212
 msgid "depth"
 msgstr "profondeur"
 
-#: builtin/clone.c:131
+#: builtin/clone.c:135
 msgid "create a shallow clone of that depth"
 msgstr "créer un clone superficiel de cette profondeur"
 
-#: builtin/clone.c:132 builtin/fetch.c:183 builtin/pack-objects.c:3933
+#: builtin/clone.c:136 builtin/fetch.c:184 builtin/pack-objects.c:3956
 #: builtin/pull.c:215
 msgid "time"
 msgstr "heure"
 
-#: builtin/clone.c:133
+#: builtin/clone.c:137
 msgid "create a shallow clone since a specific time"
 msgstr "créer un clone superficiel depuis une date spécifique"
 
-#: builtin/clone.c:134 builtin/fetch.c:185 builtin/fetch.c:208
-#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1022
+#: builtin/clone.c:138 builtin/fetch.c:186 builtin/fetch.c:212
+#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1050
 msgid "revision"
 msgstr "révision"
 
-#: builtin/clone.c:135 builtin/fetch.c:186 builtin/pull.c:219
+#: builtin/clone.c:139 builtin/fetch.c:187 builtin/pull.c:219
 msgid "deepen history of shallow clone, excluding rev"
 msgstr ""
 "approfondir l'historique d'un clone superficiel en excluant une révision"
 
-#: builtin/clone.c:137 builtin/submodule--helper.c:1883
-#: builtin/submodule--helper.c:2530
+#: builtin/clone.c:141 builtin/submodule--helper.c:1897
+#: builtin/submodule--helper.c:2735
 msgid "clone only one branch, HEAD or --branch"
 msgstr "cloner seulement une branche, HEAD ou --branch"
 
-#: builtin/clone.c:139
+#: builtin/clone.c:143
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr ""
 "ne pas cloner les tags et indiquer aux récupérations futures de ne pas le "
 "faire"
 
-#: builtin/clone.c:141
+#: builtin/clone.c:145
 msgid "any cloned submodules will be shallow"
 msgstr "tous les sous-modules clonés seront superficiels"
 
-#: builtin/clone.c:142 builtin/init-db.c:548
+#: builtin/clone.c:146 builtin/init-db.c:548
 msgid "gitdir"
 msgstr "gitdir"
 
-#: builtin/clone.c:143 builtin/init-db.c:549
+#: builtin/clone.c:147 builtin/init-db.c:549
 msgid "separate git dir from working tree"
 msgstr "séparer le répertoire git de la copie de travail"
 
-#: builtin/clone.c:144
+#: builtin/clone.c:148
 msgid "key=value"
 msgstr "clé=valeur"
 
-#: builtin/clone.c:145
+#: builtin/clone.c:149
 msgid "set config inside the new repository"
 msgstr "régler la configuration dans le nouveau dépôt"
 
-#: builtin/clone.c:147 builtin/fetch.c:203 builtin/ls-remote.c:77
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
 #: builtin/pull.c:234 builtin/push.c:575 builtin/send-pack.c:200
 msgid "server-specific"
 msgstr "spécifique au serveur"
 
-#: builtin/clone.c:147 builtin/fetch.c:203 builtin/ls-remote.c:77
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
 #: builtin/pull.c:235 builtin/push.c:575 builtin/send-pack.c:201
 msgid "option to transmit"
 msgstr "option à transmettre"
 
-#: builtin/clone.c:148 builtin/fetch.c:204 builtin/pull.c:238
+#: builtin/clone.c:152 builtin/fetch.c:208 builtin/pull.c:238
 #: builtin/push.c:576
 msgid "use IPv4 addresses only"
 msgstr "n'utiliser que des adresses IPv4"
 
-#: builtin/clone.c:150 builtin/fetch.c:206 builtin/pull.c:241
+#: builtin/clone.c:154 builtin/fetch.c:210 builtin/pull.c:241
 #: builtin/push.c:578
 msgid "use IPv6 addresses only"
 msgstr "n'utiliser que des adresses IPv6"
 
-#: builtin/clone.c:154
+#: builtin/clone.c:158
+msgid "apply partial clone filters to submodules"
+msgstr "appliquer les filtres de clone partiel aux sous-modules"
+
+#: builtin/clone.c:160
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr ""
 "tous les sous-modules clonés utiliseront leur branche de suivi à distance"
 
-#: builtin/clone.c:156
+#: builtin/clone.c:162
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr ""
 "initialiser le fichier d'extraction clairsemée pour n'inclure que les "
 "fichiers à la racine"
 
-#: builtin/clone.c:231
+#: builtin/clone.c:237
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info : impossible d'ajouter une alternative pour '%s' : %s\n"
 
-#: builtin/clone.c:304
+#: builtin/clone.c:310
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s existe et n'est pas un répertoire"
 
-#: builtin/clone.c:322
+#: builtin/clone.c:328
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "échec du démarrage un itérateur sur '%s'"
 
-#: builtin/clone.c:353
+#: builtin/clone.c:359
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "échec de la création du lien '%s'"
 
-#: builtin/clone.c:357
+#: builtin/clone.c:363
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "échec de la copie vers '%s'"
 
-#: builtin/clone.c:362
+#: builtin/clone.c:368
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "échec de l'itération sur '%s'"
 
-#: builtin/clone.c:389
+#: builtin/clone.c:395
 #, c-format
 msgid "done.\n"
 msgstr "fait.\n"
 
-#: builtin/clone.c:403
+#: builtin/clone.c:409
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -13546,103 +13933,103 @@ msgstr ""
 "Vous pouvez inspecter ce qui a été extrait avec 'git status'\n"
 "et réessayer avec 'git restore --source=HEAD :/'\n"
 
-#: builtin/clone.c:480
+#: builtin/clone.c:486
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "Impossible de trouver la branche distante '%s' à cloner."
 
-#: builtin/clone.c:597
+#: builtin/clone.c:603
 #, c-format
 msgid "unable to update %s"
 msgstr "impossible de mettre à jour %s"
 
-#: builtin/clone.c:645
+#: builtin/clone.c:651
 msgid "failed to initialize sparse-checkout"
 msgstr "échec lors de l'initialisation l'extraction clairsemée"
 
-#: builtin/clone.c:668
+#: builtin/clone.c:674
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 "la HEAD distante réfère à une référence non existante, impossible de "
 "l'extraire.\n"
 
-#: builtin/clone.c:701
+#: builtin/clone.c:709
 msgid "unable to checkout working tree"
 msgstr "impossible d'extraire la copie de travail"
 
-#: builtin/clone.c:779
+#: builtin/clone.c:793
 msgid "unable to write parameters to config file"
 msgstr "impossible d'écrire les paramètres dans le fichier de configuration"
 
-#: builtin/clone.c:842
+#: builtin/clone.c:856
 msgid "cannot repack to clean up"
 msgstr "impossible de remballer pour nettoyer"
 
-#: builtin/clone.c:844
+#: builtin/clone.c:858
 msgid "cannot unlink temporary alternates file"
 msgstr "impossible de délier le fichier temporaire alternates"
 
-#: builtin/clone.c:886
+#: builtin/clone.c:901
 msgid "Too many arguments."
 msgstr "Trop d'arguments."
 
-#: builtin/clone.c:890 contrib/scalar/scalar.c:414
+#: builtin/clone.c:905 contrib/scalar/scalar.c:413
 msgid "You must specify a repository to clone."
 msgstr "Vous devez spécifier un dépôt à cloner."
 
-#: builtin/clone.c:903
+#: builtin/clone.c:918
 #, c-format
 msgid "options '%s' and '%s %s' cannot be used together"
 msgstr "les options '%s' et '%s %s' ne peuvent pas être utilisées ensemble"
 
-#: builtin/clone.c:920
+#: builtin/clone.c:935
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "le dépôt '%s' n'existe pas"
 
-#: builtin/clone.c:924 builtin/fetch.c:2052
+#: builtin/clone.c:939 builtin/fetch.c:2176
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "la profondeur %s n'est pas un entier positif"
 
-#: builtin/clone.c:934
+#: builtin/clone.c:949
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr ""
 "le chemin de destination '%s' existe déjà et n'est pas un répertoire vide."
 
-#: builtin/clone.c:940
+#: builtin/clone.c:955
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr "le chemin du dépôt '%s' existe déjà et n'est pas un répertoire vide."
 
-#: builtin/clone.c:954
+#: builtin/clone.c:969
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "la copie de travail '%s' existe déjà."
 
-#: builtin/clone.c:969 builtin/clone.c:990 builtin/difftool.c:256
-#: builtin/log.c:2012 builtin/worktree.c:281 builtin/worktree.c:313
+#: builtin/clone.c:984 builtin/clone.c:1005 builtin/difftool.c:256
+#: builtin/log.c:2037 builtin/worktree.c:350 builtin/worktree.c:382
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "impossible de créer les répertoires de premier niveau dans '%s'"
 
-#: builtin/clone.c:974
+#: builtin/clone.c:989
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "impossible de créer le répertoire de la copie de travail '%s'"
 
-#: builtin/clone.c:994
+#: builtin/clone.c:1009
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Clonage dans le dépôt nu '%s'\n"
 
-#: builtin/clone.c:996
+#: builtin/clone.c:1011
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Clonage dans '%s'...\n"
 
-#: builtin/clone.c:1025
+#: builtin/clone.c:1040
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
@@ -13650,50 +14037,54 @@ msgstr ""
 "clone --recursive n'est pas compatible avec à la fois --reference et --"
 "reference-if-able"
 
-#: builtin/clone.c:1080 builtin/remote.c:200 builtin/remote.c:710
+#: builtin/clone.c:1116 builtin/remote.c:201 builtin/remote.c:721
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "'%s' n'est pas un nom valide de distante"
 
-#: builtin/clone.c:1121
+#: builtin/clone.c:1157
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr ""
 "--depth est ignoré dans les clones locaux : utilisez plutôt \"file://\"."
 
-#: builtin/clone.c:1123
+#: builtin/clone.c:1159
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-since est ignoré dans les clones locaux : utilisez plutôt \"file://"
 "\"."
 
-#: builtin/clone.c:1125
+#: builtin/clone.c:1161
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-exclude est ignoré dans les clones locaux : utilisez plutôt "
 "\"file://\"."
 
-#: builtin/clone.c:1127
+#: builtin/clone.c:1163
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr "--filter est ignoré dans les clones locaux ; utilisez plutôt file:// ."
 
-#: builtin/clone.c:1132
+#: builtin/clone.c:1168
 msgid "source repository is shallow, ignoring --local"
 msgstr "le dépôt source est superficiel, option --local ignorée"
 
-#: builtin/clone.c:1137
+#: builtin/clone.c:1173
 msgid "--local is ignored"
 msgstr "--local est ignoré"
 
-#: builtin/clone.c:1216 builtin/clone.c:1276
+#: builtin/clone.c:1185
+msgid "cannot clone from filtered bundle"
+msgstr "impossible de cloner depuis un colis filtré"
+
+#: builtin/clone.c:1265 builtin/clone.c:1324
 msgid "remote transport reported error"
 msgstr "le transport distant a retourné une erreur"
 
-#: builtin/clone.c:1228 builtin/clone.c:1239
+#: builtin/clone.c:1277 builtin/clone.c:1289
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "La branche distante %s n'a pas été trouvée dans le dépôt amont %s"
 
-#: builtin/clone.c:1242
+#: builtin/clone.c:1292
 msgid "You appear to have cloned an empty repository."
 msgstr "Vous semblez avoir cloné un dépôt vide."
 
@@ -13745,7 +14136,7 @@ msgstr ""
 "split[=<stratégie>]] [--reachable|--stdin-packs|--stdin-commits] [--changed-"
 "paths] [--[no-]max-new-filters <n>] [--[no-]progress] <options de division>"
 
-#: builtin/commit-graph.c:51 builtin/fetch.c:192 builtin/log.c:1794
+#: builtin/commit-graph.c:51 builtin/fetch.c:196 builtin/log.c:1813
 msgid "dir"
 msgstr "répertoire"
 
@@ -13846,7 +14237,7 @@ msgstr ""
 msgid "duplicate parent %s ignored"
 msgstr "le parent dupliqué %s est ignoré"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:577
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:590
 #, c-format
 msgid "not a valid object name %s"
 msgstr "nom d'objet invalide %s"
@@ -13869,13 +14260,13 @@ msgstr "parent"
 msgid "id of a parent commit object"
 msgstr "id d'un objet commit parent"
 
-#: builtin/commit-tree.c:112 builtin/commit.c:1627 builtin/merge.c:284
-#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1677
-#: builtin/tag.c:454
+#: builtin/commit-tree.c:112 builtin/commit.c:1626 builtin/merge.c:284
+#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1666
+#: builtin/tag.c:455
 msgid "message"
 msgstr "message"
 
-#: builtin/commit-tree.c:113 builtin/commit.c:1627
+#: builtin/commit-tree.c:113 builtin/commit.c:1626
 msgid "commit message"
 msgstr "message de validation"
 
@@ -13883,7 +14274,7 @@ msgstr "message de validation"
 msgid "read commit log message from file"
 msgstr "lire le message de validation depuis un fichier"
 
-#: builtin/commit-tree.c:119 builtin/commit.c:1644 builtin/merge.c:303
+#: builtin/commit-tree.c:119 builtin/commit.c:1643 builtin/merge.c:303
 #: builtin/pull.c:180 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "signer la validation avec GPG"
@@ -13896,15 +14287,15 @@ msgstr "exactement un arbre obligatoire"
 msgid "git commit-tree: failed to read"
 msgstr "git commit-tree : échec de la lecture"
 
-#: builtin/commit.c:42
+#: builtin/commit.c:43
 msgid "git commit [<options>] [--] <pathspec>..."
 msgstr "git commit [<options>] [--] <spécification-de-chemin>..."
 
-#: builtin/commit.c:47
+#: builtin/commit.c:48
 msgid "git status [<options>] [--] <pathspec>..."
 msgstr "git status [<options>] [--] <spécification-de-chemin>..."
 
-#: builtin/commit.c:52
+#: builtin/commit.c:53
 msgid ""
 "You asked to amend the most recent commit, but doing so would make\n"
 "it empty. You can repeat your command with --allow-empty, or you can\n"
@@ -13915,7 +14306,7 @@ msgstr ""
 "vide. Vous pouvez répéter votre commande avec --allow-empty, ou vous pouvez\n"
 "supprimer complètement le commit avec \"git reset HEAD^\".\n"
 
-#: builtin/commit.c:57
+#: builtin/commit.c:58
 msgid ""
 "The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
 "If you wish to commit it anyway, use:\n"
@@ -13930,15 +14321,15 @@ msgstr ""
 "    git commit --allow-empty\n"
 "\n"
 
-#: builtin/commit.c:64
+#: builtin/commit.c:65
 msgid "Otherwise, please use 'git rebase --skip'\n"
 msgstr "Sinon, veuillez utiliser 'git rebase --skip'\n"
 
-#: builtin/commit.c:67
+#: builtin/commit.c:68
 msgid "Otherwise, please use 'git cherry-pick --skip'\n"
 msgstr "Sinon, veuillez utiliser 'git cherry-pick --skip'\n"
 
-#: builtin/commit.c:70
+#: builtin/commit.c:71
 msgid ""
 "and then use:\n"
 "\n"
@@ -13960,69 +14351,69 @@ msgstr ""
 "    git cherry-pick --skip\n"
 "\n"
 
-#: builtin/commit.c:325
+#: builtin/commit.c:326
 msgid "failed to unpack HEAD tree object"
 msgstr "échec du dépaquetage de l'objet arbre HEAD"
 
-#: builtin/commit.c:375
+#: builtin/commit.c:376
 msgid "No paths with --include/--only does not make sense."
 msgstr "Aucun chemin avec les options --include/--only n'a pas de sens."
 
-#: builtin/commit.c:387
+#: builtin/commit.c:388
 msgid "unable to create temporary index"
 msgstr "impossible de créer l'index temporaire"
 
-#: builtin/commit.c:396
+#: builtin/commit.c:397
 msgid "interactive add failed"
 msgstr "échec de l'ajout interactif"
 
-#: builtin/commit.c:411
+#: builtin/commit.c:412
 msgid "unable to update temporary index"
 msgstr "impossible de mettre à jour l'index temporaire"
 
-#: builtin/commit.c:413
+#: builtin/commit.c:414
 msgid "Failed to update main cache tree"
 msgstr "Impossible de mettre à jour l'arbre de cache principal"
 
-#: builtin/commit.c:438 builtin/commit.c:461 builtin/commit.c:509
+#: builtin/commit.c:439 builtin/commit.c:462 builtin/commit.c:510
 msgid "unable to write new_index file"
 msgstr "impossible d'écrire le fichier new_index"
 
-#: builtin/commit.c:490
+#: builtin/commit.c:491
 msgid "cannot do a partial commit during a merge."
 msgstr "impossible de faire une validation partielle pendant une fusion."
 
-#: builtin/commit.c:492
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr "impossible de faire une validation partielle pendant un picorage."
 
-#: builtin/commit.c:494
+#: builtin/commit.c:495
 msgid "cannot do a partial commit during a rebase."
 msgstr "impossible de faire une validation partielle pendant un rebasage."
 
-#: builtin/commit.c:502
+#: builtin/commit.c:503
 msgid "cannot read the index"
 msgstr "impossible de lire l'index"
 
-#: builtin/commit.c:521
+#: builtin/commit.c:522
 msgid "unable to write temporary index file"
 msgstr "impossible d'écrire le fichier d'index temporaire"
 
-#: builtin/commit.c:619
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "entête d'auteur manquant dans le commit '%s'"
 
-#: builtin/commit.c:621
+#: builtin/commit.c:622
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "le commit '%s' a une ligne d'auteur malformée"
 
-#: builtin/commit.c:640
+#: builtin/commit.c:641
 msgid "malformed --author parameter"
 msgstr "paramètre --author mal formé"
 
-#: builtin/commit.c:693
+#: builtin/commit.c:694
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
@@ -14030,43 +14421,43 @@ msgstr ""
 "impossible de sélectionner un caractère de commentaire\n"
 "qui n'est pas utilisé dans le message de validation actuel"
 
-#: builtin/commit.c:747 builtin/commit.c:781 builtin/commit.c:1166
+#: builtin/commit.c:750 builtin/commit.c:784 builtin/commit.c:1170
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "impossible de rechercher le commit %s"
 
-#: builtin/commit.c:759 builtin/shortlog.c:416
+#: builtin/commit.c:762 builtin/shortlog.c:417
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(lecture du message de journal depuis l'entrée standard)\n"
 
-#: builtin/commit.c:761
+#: builtin/commit.c:764
 msgid "could not read log from standard input"
 msgstr "impossible de lire le journal depuis l'entrée standard"
 
-#: builtin/commit.c:765
+#: builtin/commit.c:768
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "impossible de lire le fichier de journal '%s'"
 
-#: builtin/commit.c:802
+#: builtin/commit.c:805
 #, c-format
 msgid "options '%s' and '%s:%s' cannot be used together"
 msgstr "les options '%s' et '%s.%s' ne peuvent pas être utilisées ensemble"
 
-#: builtin/commit.c:814 builtin/commit.c:830
+#: builtin/commit.c:817 builtin/commit.c:833
 msgid "could not read SQUASH_MSG"
 msgstr "impossible de lire SQUASH_MSG"
 
-#: builtin/commit.c:821
+#: builtin/commit.c:824
 msgid "could not read MERGE_MSG"
 msgstr "impossible de lire MERGE_MSG"
 
-#: builtin/commit.c:881
+#: builtin/commit.c:884
 msgid "could not write commit template"
 msgstr "impossible d'écrire le modèle de commit"
 
-#: builtin/commit.c:894
+#: builtin/commit.c:897
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -14075,7 +14466,7 @@ msgstr ""
 "Veuillez saisir le message de validation pour vos modifications. Les lignes\n"
 "commençant par '%c' seront ignorées.\n"
 
-#: builtin/commit.c:896
+#: builtin/commit.c:899
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -14085,7 +14476,7 @@ msgstr ""
 "commençant par '%c' seront ignorées, et un message vide abandonne la "
 "validation.\n"
 
-#: builtin/commit.c:900
+#: builtin/commit.c:903
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -14096,7 +14487,7 @@ msgstr ""
 "par '%c' seront conservées ; vous pouvez les supprimer vous-même si vous le "
 "souhaitez.\n"
 
-#: builtin/commit.c:904
+#: builtin/commit.c:907
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -14107,7 +14498,7 @@ msgstr ""
 "commençant par '%c' seront conservées ; vous pouvez les supprimer vous-même\n"
 "si vous le souhaitez. Un message vide abandonne la validation.\n"
 
-#: builtin/commit.c:916
+#: builtin/commit.c:919
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -14121,7 +14512,7 @@ msgstr ""
 "\tgit update-ref -d MERGE_HEAD\n"
 "et essayez à nouveau.\n"
 
-#: builtin/commit.c:921
+#: builtin/commit.c:924
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -14135,175 +14526,153 @@ msgstr ""
 "\tgit update-ref -d CHERRY_PICK_HEAD\n"
 "et essayez à nouveau.\n"
 
-#: builtin/commit.c:948
+#: builtin/commit.c:951
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%sAuteur :     %.*s <%.*s>"
 
-#: builtin/commit.c:956
+#: builtin/commit.c:959
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%sDate :       %s"
 
-#: builtin/commit.c:963
+#: builtin/commit.c:966
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%sValidateur : %.*s <%.*s>"
 
-#: builtin/commit.c:981
+#: builtin/commit.c:984
 msgid "Cannot read index"
 msgstr "Impossible de lire l'index"
 
-#: builtin/commit.c:1026
+#: builtin/commit.c:1029
 msgid "unable to pass trailers to --trailers"
 msgstr "impossible de passer les lignes finales à --trailers"
 
-#: builtin/commit.c:1066
+#: builtin/commit.c:1069
 msgid "Error building trees"
 msgstr "Erreur lors de la construction des arbres"
 
-#: builtin/commit.c:1080 builtin/tag.c:316
+#: builtin/commit.c:1083 builtin/tag.c:317
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "Veuillez fournir le message en utilisant l'option -m ou -F.\n"
 
-#: builtin/commit.c:1124
+#: builtin/commit.c:1128
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr ""
 "--author '%s' n'est pas de la forme 'Nom <email>' ni ne correspond à aucun "
 "auteur existant"
 
-#: builtin/commit.c:1138
+#: builtin/commit.c:1142
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "Mode de fichier ignoré invalide '%s'"
 
-#: builtin/commit.c:1156 builtin/commit.c:1451
+#: builtin/commit.c:1160 builtin/commit.c:1450
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "Mode de fichier non suivi invalide '%s'"
 
-#: builtin/commit.c:1227
+#: builtin/commit.c:1231
 msgid "You are in the middle of a merge -- cannot reword."
 msgstr "Vous êtes en pleine fusion -- impossible de reformuler."
 
-#: builtin/commit.c:1229
+#: builtin/commit.c:1233
 msgid "You are in the middle of a cherry-pick -- cannot reword."
 msgstr "Vous êtes en plein picorage -- impossible de reformuler."
 
-#: builtin/commit.c:1232
+#: builtin/commit.c:1236
 #, c-format
 msgid "reword option of '%s' and path '%s' cannot be used together"
 msgstr ""
 "l'option de reformulation de '%s' et le chemin '%s' ne peuvent pas être "
 "utilisés ensemble"
 
-#: builtin/commit.c:1234
+#: builtin/commit.c:1238
 #, c-format
 msgid "reword option of '%s' and '%s' cannot be used together"
 msgstr ""
 "l'option de reformulation de '%s' et '%s' ne peuvent pas être utilisés "
 "ensemble"
 
-#: builtin/commit.c:1254
-msgid "Using both --reset-author and --author does not make sense"
-msgstr "L'utilisation simultanée de --reset-author et --author n'a pas de sens"
-
-#: builtin/commit.c:1261
+#: builtin/commit.c:1263
 msgid "You have nothing to amend."
 msgstr "Il n'y a rien à corriger."
 
-#: builtin/commit.c:1264
+#: builtin/commit.c:1266
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "Vous êtes en pleine fusion -- impossible de corriger (amend)."
 
-#: builtin/commit.c:1266
+#: builtin/commit.c:1268
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr "Vous êtes en plein picorage -- impossible de corriger (amend)."
 
-#: builtin/commit.c:1268
+#: builtin/commit.c:1270
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr "Vous êtes en plein rebasage -- impossible de corriger (amend)."
 
-#: builtin/commit.c:1271
-msgid "Options --squash and --fixup cannot be used together"
-msgstr "Les options --squash et --fixup ne peuvent pas être utilisées ensemble"
-
-#: builtin/commit.c:1281
-msgid "Only one of -c/-C/-F/--fixup can be used."
-msgstr "Une seule option parmi -c/-C/-F/--fixup peut être utilisée."
-
-#: builtin/commit.c:1283
-msgid "Option -m cannot be combined with -c/-C/-F."
-msgstr "L'option -m ne peut pas être combinée avec -c/-C/-F."
-
-#: builtin/commit.c:1292
+#: builtin/commit.c:1290
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr "--reset-author ne peut être utilisé qu'avec -C, -c ou --amend."
 
-#: builtin/commit.c:1310
-msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
-msgstr ""
-"Une seule option parmi --include/--only/--all/--interactive/--patch peut "
-"être utilisée."
-
-#: builtin/commit.c:1338
+#: builtin/commit.c:1337
 #, c-format
 msgid "unknown option: --fixup=%s:%s"
 msgstr "option inconnue : --fixup=%s:%s"
 
-#: builtin/commit.c:1355
+#: builtin/commit.c:1354
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "des chemins '%s ...' avec l'option -a n'a pas de sens"
 
-#: builtin/commit.c:1486 builtin/commit.c:1655
+#: builtin/commit.c:1485 builtin/commit.c:1654
 msgid "show status concisely"
 msgstr "afficher l'état avec concision"
 
-#: builtin/commit.c:1488 builtin/commit.c:1657
+#: builtin/commit.c:1487 builtin/commit.c:1656
 msgid "show branch information"
 msgstr "afficher l'information de branche"
 
-#: builtin/commit.c:1490
+#: builtin/commit.c:1489
 msgid "show stash information"
 msgstr "afficher l'information de remisage"
 
-#: builtin/commit.c:1492 builtin/commit.c:1659
+#: builtin/commit.c:1491 builtin/commit.c:1658
 msgid "compute full ahead/behind values"
 msgstr "calcule les valeurs complètes en avance/en retard"
 
-#: builtin/commit.c:1494
+#: builtin/commit.c:1493
 msgid "version"
 msgstr "version"
 
-#: builtin/commit.c:1494 builtin/commit.c:1661 builtin/push.c:551
-#: builtin/worktree.c:690
+#: builtin/commit.c:1493 builtin/commit.c:1660 builtin/push.c:551
+#: builtin/worktree.c:765
 msgid "machine-readable output"
 msgstr "sortie pour traitement automatique"
 
-#: builtin/commit.c:1497 builtin/commit.c:1663
+#: builtin/commit.c:1496 builtin/commit.c:1662
 msgid "show status in long format (default)"
 msgstr "afficher l'état en format long (par défaut)"
 
-#: builtin/commit.c:1500 builtin/commit.c:1666
+#: builtin/commit.c:1499 builtin/commit.c:1665
 msgid "terminate entries with NUL"
 msgstr "terminer les éléments par NUL"
 
-#: builtin/commit.c:1502 builtin/commit.c:1506 builtin/commit.c:1669
+#: builtin/commit.c:1501 builtin/commit.c:1505 builtin/commit.c:1668
 #: builtin/fast-export.c:1172 builtin/fast-export.c:1175
-#: builtin/fast-export.c:1178 builtin/rebase.c:1111 parse-options.h:337
+#: builtin/fast-export.c:1178 builtin/rebase.c:1139 parse-options.h:368
 msgid "mode"
 msgstr "mode"
 
-#: builtin/commit.c:1503 builtin/commit.c:1669
+#: builtin/commit.c:1502 builtin/commit.c:1668
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr ""
 "afficher les fichiers non suivis, \"mode\" facultatif : all (tous), normal, "
 "no. (Défaut : all)"
 
-#: builtin/commit.c:1507
+#: builtin/commit.c:1506
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
@@ -14311,11 +14680,11 @@ msgstr ""
 "afficher les fichiers ignorés, \"mode\" facultatif : traditional "
 "(traditionnel), matching (correspondant), no. (Défaut : traditional)"
 
-#: builtin/commit.c:1509 parse-options.h:192
+#: builtin/commit.c:1508 parse-options.h:197
 msgid "when"
 msgstr "quand"
 
-#: builtin/commit.c:1510
+#: builtin/commit.c:1509
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
@@ -14323,198 +14692,198 @@ msgstr ""
 "ignorer les modifications dans les sous-modules, \"quand\" facultatif : all "
 "(tous), dirty (sale), untracked (non suivi). (Défaut : all)"
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1511
 msgid "list untracked files in columns"
 msgstr "afficher les fichiers non suivis en colonnes"
 
-#: builtin/commit.c:1513
+#: builtin/commit.c:1512
 msgid "do not detect renames"
 msgstr "ne pas détecter les renommages"
 
-#: builtin/commit.c:1515
+#: builtin/commit.c:1514
 msgid "detect renames, optionally set similarity index"
 msgstr ""
 "détecter les renommages, en spécifiant optionnellement le facteur de "
 "similarité"
 
-#: builtin/commit.c:1538
+#: builtin/commit.c:1537
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr ""
 "Combinaison non supportée d'arguments sur les fichiers ignorés et non-suivis"
 
-#: builtin/commit.c:1620
+#: builtin/commit.c:1619
 msgid "suppress summary after successful commit"
 msgstr "supprimer le résumé après une validation réussie"
 
-#: builtin/commit.c:1621
+#: builtin/commit.c:1620
 msgid "show diff in commit message template"
 msgstr "afficher les diff dans le modèle de message de validation"
 
-#: builtin/commit.c:1623
+#: builtin/commit.c:1622
 msgid "Commit message options"
 msgstr "Options du message de validation"
 
-#: builtin/commit.c:1624 builtin/merge.c:288 builtin/tag.c:456
+#: builtin/commit.c:1623 builtin/merge.c:288 builtin/tag.c:457
 msgid "read message from file"
 msgstr "lire le message depuis un fichier"
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1624
 msgid "author"
 msgstr "auteur"
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1624
 msgid "override author for commit"
 msgstr "remplacer l'auteur pour la validation"
 
-#: builtin/commit.c:1626 builtin/gc.c:551
+#: builtin/commit.c:1625 builtin/gc.c:551
 msgid "date"
 msgstr "date"
 
-#: builtin/commit.c:1626
+#: builtin/commit.c:1625
 msgid "override date for commit"
 msgstr "remplacer la date pour la validation"
 
-#: builtin/commit.c:1628 builtin/commit.c:1629 builtin/commit.c:1635
-#: parse-options.h:329 ref-filter.h:89
+#: builtin/commit.c:1627 builtin/commit.c:1628 builtin/commit.c:1634
+#: parse-options.h:360 ref-filter.h:89
 msgid "commit"
 msgstr "commit"
 
-#: builtin/commit.c:1628
+#: builtin/commit.c:1627
 msgid "reuse and edit message from specified commit"
 msgstr "réutiliser et éditer le message du commit spécifié"
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1628
 msgid "reuse message from specified commit"
 msgstr "réutiliser le message du commit spécifié"
 
 #. TRANSLATORS: Leave "[(amend|reword):]" as-is,
 #. and only translate <commit>.
 #.
-#: builtin/commit.c:1634
+#: builtin/commit.c:1633
 msgid "[(amend|reword):]commit"
 msgstr "[(amend|reword):]commit"
 
-#: builtin/commit.c:1634
+#: builtin/commit.c:1633
 msgid ""
 "use autosquash formatted message to fixup or amend/reword specified commit"
 msgstr ""
 "utiliser un message au format autosquash pour corriger ou reformuler le "
 "commit spécifié"
 
-#: builtin/commit.c:1635
+#: builtin/commit.c:1634
 msgid "use autosquash formatted message to squash specified commit"
 msgstr ""
 "utiliser un message au format autosquash pour compresser le commit spécifié"
 
-#: builtin/commit.c:1636
+#: builtin/commit.c:1635
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr ""
 "à présent je suis l'auteur de la validation (utilisé avec -C/-c/--amend)"
 
-#: builtin/commit.c:1637 builtin/interpret-trailers.c:111
+#: builtin/commit.c:1636 builtin/interpret-trailers.c:111
 msgid "trailer"
 msgstr "ligne de fin"
 
-#: builtin/commit.c:1637
+#: builtin/commit.c:1636
 msgid "add custom trailer(s)"
 msgstr "ajouter des lignes terminales personnaliser"
 
-#: builtin/commit.c:1638 builtin/log.c:1769 builtin/merge.c:306
+#: builtin/commit.c:1637 builtin/log.c:1788 builtin/merge.c:306
 #: builtin/pull.c:146 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr "ajouter une ligne terminale Signed-off-by"
 
-#: builtin/commit.c:1639
+#: builtin/commit.c:1638
 msgid "use specified template file"
 msgstr "utiliser le fichier de modèle spécifié"
 
-#: builtin/commit.c:1640
+#: builtin/commit.c:1639
 msgid "force edit of commit"
 msgstr "forcer l'édition du commit"
 
-#: builtin/commit.c:1642
+#: builtin/commit.c:1641
 msgid "include status in commit message template"
 msgstr "inclure l'état dans le modèle de message de validation"
 
-#: builtin/commit.c:1647
+#: builtin/commit.c:1646
 msgid "Commit contents options"
 msgstr "Valider les options des contenus"
 
-#: builtin/commit.c:1648
+#: builtin/commit.c:1647
 msgid "commit all changed files"
 msgstr "valider tous les fichiers modifiés"
 
-#: builtin/commit.c:1649
+#: builtin/commit.c:1648
 msgid "add specified files to index for commit"
 msgstr "ajouter les fichiers spécifiés à l'index pour la validation"
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1649
 msgid "interactively add files"
 msgstr "ajouter des fichiers en mode interactif"
 
-#: builtin/commit.c:1651
+#: builtin/commit.c:1650
 msgid "interactively add changes"
 msgstr "ajouter les modifications en mode interactif"
 
-#: builtin/commit.c:1652
+#: builtin/commit.c:1651
 msgid "commit only specified files"
 msgstr "valider seulement les fichiers spécifiés"
 
-#: builtin/commit.c:1653
+#: builtin/commit.c:1652
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr "éviter d'utiliser les crochets pre-commit et commit-msg"
 
-#: builtin/commit.c:1654
+#: builtin/commit.c:1653
 msgid "show what would be committed"
 msgstr "afficher ce qui serait validé"
 
-#: builtin/commit.c:1667
+#: builtin/commit.c:1666
 msgid "amend previous commit"
 msgstr "corriger la validation précédente"
 
-#: builtin/commit.c:1668
+#: builtin/commit.c:1667
 msgid "bypass post-rewrite hook"
 msgstr "éviter d'utiliser le crochet post-rewrite"
 
-#: builtin/commit.c:1675
+#: builtin/commit.c:1674
 msgid "ok to record an empty change"
 msgstr "accepter d'enregistrer une modification vide"
 
-#: builtin/commit.c:1677
+#: builtin/commit.c:1676
 msgid "ok to record a change with an empty message"
 msgstr "accepter d'enregistrer une modification avec un message vide"
 
-#: builtin/commit.c:1753
+#: builtin/commit.c:1752
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Fichier MERGE_HEAD corrompu (%s)"
 
-#: builtin/commit.c:1760
+#: builtin/commit.c:1759
 msgid "could not read MERGE_MODE"
 msgstr "impossible de lire MERGE_MODE"
 
-#: builtin/commit.c:1781
+#: builtin/commit.c:1780
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "impossible de lire le message de validation : %s"
 
-#: builtin/commit.c:1788
+#: builtin/commit.c:1787
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "Abandon de la validation dû à un message de validation vide.\n"
 
-#: builtin/commit.c:1793
+#: builtin/commit.c:1792
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "Abandon de la validation ; vous n'avez pas édité le message\n"
 
-#: builtin/commit.c:1804
+#: builtin/commit.c:1803
 #, c-format
 msgid "Aborting commit due to empty commit message body.\n"
 msgstr ""
 "Abandon de la validation dû à un corps de message de validation vide.\n"
 
-#: builtin/commit.c:1840
+#: builtin/commit.c:1839
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -14639,6 +15008,10 @@ msgstr "trouver le réglage de la couleur : slot [stdout-est-tty]"
 msgid "Type"
 msgstr "Type"
 
+#: builtin/config.c:154 builtin/env--helper.c:42 builtin/hash-object.c:97
+msgid "type"
+msgstr "type"
+
 #: builtin/config.c:154 builtin/env--helper.c:43
 msgid "value is given this type"
 msgstr "ce type est assigné à la valeur"
@@ -14854,10 +15227,6 @@ msgstr ""
 msgid "no such section: %s"
 msgstr "section inexistante : %s"
 
-#: builtin/count-objects.c:90
-msgid "git count-objects [-v] [-H | --human-readable]"
-msgstr "git count-objects [-v] [-H | --human-readable]"
-
 #: builtin/count-objects.c:100
 msgid "print sizes in human readable format"
 msgstr "affiche les tailles dans un format humainement lisible"
@@ -15029,7 +15398,7 @@ msgstr "ne considérer que les étiquettes correspondant à <motif>"
 msgid "do not consider tags matching <pattern>"
 msgstr "ne pas considérer les étiquettes correspondant à <motif>"
 
-#: builtin/describe.c:570 builtin/name-rev.c:544
+#: builtin/describe.c:570 builtin/name-rev.c:595
 msgid "show abbreviated commit object as fallback"
 msgstr "afficher les objets commits abrégés en dernier recours"
 
@@ -15079,7 +15448,7 @@ msgstr "%s..%s: pas de base de fusion"
 msgid "Not a git repository"
 msgstr "Ce n'est pas un dépôt git"
 
-#: builtin/diff.c:537 builtin/grep.c:698
+#: builtin/diff.c:537 builtin/grep.c:700
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "objet spécifié '%s' invalide."
@@ -15197,11 +15566,11 @@ msgstr "passé à `diff`"
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool exige un arbre de travail ou --no-index"
 
-#: builtin/difftool.c:744
+#: builtin/difftool.c:745
 msgid "no <tool> given for --tool=<tool>"
 msgstr "pas d'<outil> spécifié pour --tool=<outil>"
 
-#: builtin/difftool.c:751
+#: builtin/difftool.c:752
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "pas de <commande> spécifié pour --extcmd=<commande>"
 
@@ -15209,10 +15578,6 @@ msgstr "pas de <commande> spécifié pour --extcmd=<commande>"
 msgid "git env--helper --type=[bool|ulong] <options> <env-var>"
 msgstr "git env--helper --type=[bool|ulong] <options> <var d'env>"
 
-#: builtin/env--helper.c:42 builtin/hash-object.c:96
-msgid "type"
-msgstr "type"
-
 #: builtin/env--helper.c:46
 msgid "default for git_env_*(...) to fall back on"
 msgstr "valeur par défaut pour git_env_*(...) en cas d'absence"
@@ -15232,15 +15597,15 @@ msgstr ""
 #: builtin/env--helper.c:82
 #, c-format
 msgid ""
-"option `--default' expects an unsigned long value with `--type=ulong`, not `"
-"%s`"
+"option `--default' expects an unsigned long value with `--type=ulong`, not "
+"`%s`"
 msgstr ""
 "l'option `--default` attend une valeur entier long non signé avec `--"
 "type=ulong`, pas `%s`"
 
 #: builtin/fast-export.c:29
-msgid "git fast-export [rev-list-opts]"
-msgstr "git fast-export [options-de-liste-de-révisions]"
+msgid "git fast-export [<rev-list-opts>]"
+msgstr "git fast-export [<options-de-liste-de-révisions>]"
 
 #: builtin/fast-export.c:843
 msgid "Error: Cannot export nested tags unless --mark-tags is specified."
@@ -15299,7 +15664,7 @@ msgstr "utiliser la fonction \"done\" pour terminer le flux"
 msgid "skip output of blob data"
 msgstr "sauter l'affichage de données de blob"
 
-#: builtin/fast-export.c:1196 builtin/log.c:1841
+#: builtin/fast-export.c:1196 builtin/log.c:1860
 msgid "refspec"
 msgstr "spécificateur de référence"
 
@@ -15333,39 +15698,39 @@ msgstr "afficher les ids d'objet originaux des blobs/commits"
 msgid "label tags with mark ids"
 msgstr "marquer les étiquettes avec des ids de marque"
 
-#: builtin/fast-import.c:3090
+#: builtin/fast-import.c:3097
 #, c-format
 msgid "Missing from marks for submodule '%s'"
 msgstr "Champs from manquants pour le sous-module '%s'"
 
-#: builtin/fast-import.c:3092
+#: builtin/fast-import.c:3099
 #, c-format
 msgid "Missing to marks for submodule '%s'"
 msgstr "Champs 'to' manquants pour le sous-module '%s'"
 
-#: builtin/fast-import.c:3227
+#: builtin/fast-import.c:3234
 #, c-format
 msgid "Expected 'mark' command, got %s"
 msgstr "Commande 'mark' attendue, %s trouvé"
 
-#: builtin/fast-import.c:3232
+#: builtin/fast-import.c:3239
 #, c-format
 msgid "Expected 'to' command, got %s"
 msgstr "Commande 'to' attendue, %s trouvé"
 
-#: builtin/fast-import.c:3324
+#: builtin/fast-import.c:3331
 msgid "Expected format name:filename for submodule rewrite option"
 msgstr ""
 "Format attendu nom:<nom de fichier> pour l'option de réécriture de sous-"
 "module"
 
-#: builtin/fast-import.c:3379
+#: builtin/fast-import.c:3386
 #, c-format
 msgid "feature '%s' forbidden in input without --allow-unsafe-features"
 msgstr ""
 "la fonctionnalité '%s' est interdite en entrée sans --allow-unsafe-features"
 
-#: builtin/fetch-pack.c:242
+#: builtin/fetch-pack.c:246
 #, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr "Fichier verrou créé mais non reporté : %s"
@@ -15386,106 +15751,110 @@ msgstr "git fetch --multiple [<options>] [(<dépôt> | <groupe>)...]"
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<options>]"
 
-#: builtin/fetch.c:123
+#: builtin/fetch.c:124
 msgid "fetch.parallel cannot be negative"
 msgstr "fetch.parallel ne peut pas être négatif"
 
-#: builtin/fetch.c:146 builtin/pull.c:189
+#: builtin/fetch.c:147 builtin/pull.c:189
 msgid "fetch from all remotes"
 msgstr "récupérer depuis tous les dépôts distants"
 
-#: builtin/fetch.c:148 builtin/pull.c:249
+#: builtin/fetch.c:149 builtin/pull.c:249
 msgid "set upstream for git pull/fetch"
 msgstr "définir la branche amont pour git pull/fetch"
 
-#: builtin/fetch.c:150 builtin/pull.c:192
+#: builtin/fetch.c:151 builtin/pull.c:192
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "ajouter à .git/FETCH_HEAD au lieu de l'écraser"
 
-#: builtin/fetch.c:152
+#: builtin/fetch.c:153
 msgid "use atomic transaction to update references"
 msgstr "utiliser une transaction atomique pour mettre à jour les références"
 
-#: builtin/fetch.c:154 builtin/pull.c:195
+#: builtin/fetch.c:155 builtin/pull.c:195
 msgid "path to upload pack on remote end"
 msgstr "chemin vers lequel télécharger le paquet sur le poste distant"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:156
 msgid "force overwrite of local reference"
 msgstr "forcer l'écrasement de la branche locale"
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:158
 msgid "fetch from multiple remotes"
 msgstr "récupérer depuis plusieurs dépôts distants"
 
-#: builtin/fetch.c:159 builtin/pull.c:199
+#: builtin/fetch.c:160 builtin/pull.c:199
 msgid "fetch all tags and associated objects"
 msgstr "récupérer toutes les étiquettes et leurs objets associés"
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:162
 msgid "do not fetch all tags (--no-tags)"
 msgstr "ne pas récupérer toutes les étiquettes (--no-tags)"
 
-#: builtin/fetch.c:163
+#: builtin/fetch.c:164
 msgid "number of submodules fetched in parallel"
 msgstr "nombre de sous-modules récupérés en parallèle"
 
-#: builtin/fetch.c:165
+#: builtin/fetch.c:166
 msgid "modify the refspec to place all refs within refs/prefetch/"
 msgstr ""
 "modifier le spécificateur de référence pour placer les références dans refs/"
 "prefetch/"
 
-#: builtin/fetch.c:167 builtin/pull.c:202
+#: builtin/fetch.c:168 builtin/pull.c:202
 msgid "prune remote-tracking branches no longer on remote"
 msgstr ""
 "éliminer les branches de suivi distant si la branche n'existe plus dans le "
 "dépôt distant"
 
-#: builtin/fetch.c:169
+#: builtin/fetch.c:170
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 "éliminer les étiquettes locales qui ont disparu du dépôt distant et qui "
 "encombrent les étiquettes modifiées"
 
-#: builtin/fetch.c:170 builtin/fetch.c:195 builtin/pull.c:123
+#: builtin/fetch.c:171 builtin/fetch.c:199 builtin/pull.c:123
 msgid "on-demand"
 msgstr "à la demande"
 
-#: builtin/fetch.c:171
+#: builtin/fetch.c:172
 msgid "control recursive fetching of submodules"
 msgstr "contrôler la récupération récursive dans les sous-modules"
 
-#: builtin/fetch.c:176
+#: builtin/fetch.c:177
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr "écrire les références récupérées dans le fichier FETCH_HEAD"
 
-#: builtin/fetch.c:177 builtin/pull.c:210
+#: builtin/fetch.c:178 builtin/pull.c:210
 msgid "keep downloaded pack"
 msgstr "conserver le paquet téléchargé"
 
-#: builtin/fetch.c:179
+#: builtin/fetch.c:180
 msgid "allow updating of HEAD ref"
 msgstr "permettre la mise à jour de la référence HEAD"
 
-#: builtin/fetch.c:182 builtin/fetch.c:188 builtin/pull.c:213
+#: builtin/fetch.c:183 builtin/fetch.c:189 builtin/pull.c:213
 #: builtin/pull.c:222
 msgid "deepen history of shallow clone"
 msgstr "approfondir l'historique d'un clone superficiel"
 
-#: builtin/fetch.c:184 builtin/pull.c:216
+#: builtin/fetch.c:185 builtin/pull.c:216
 msgid "deepen history of shallow repository based on time"
 msgstr "approfondir l'historique d'un clone superficiel en fonction d'une date"
 
-#: builtin/fetch.c:190 builtin/pull.c:225
+#: builtin/fetch.c:191 builtin/pull.c:225
 msgid "convert to a complete repository"
 msgstr "convertir en un dépôt complet"
 
-#: builtin/fetch.c:193
+#: builtin/fetch.c:194
+msgid "re-fetch without negotiating common commits"
+msgstr "re-récupérer sans négocier les commits communs"
+
+#: builtin/fetch.c:197
 msgid "prepend this to submodule path output"
 msgstr "préfixer ceci à la sortie du chemin du sous-module"
 
-#: builtin/fetch.c:196
+#: builtin/fetch.c:200
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
@@ -15493,111 +15862,105 @@ msgstr ""
 "par défaut pour la récupération récursive de sous-modules (priorité plus "
 "basse que les fichiers de config)"
 
-#: builtin/fetch.c:200 builtin/pull.c:228
+#: builtin/fetch.c:204 builtin/pull.c:228
 msgid "accept refs that update .git/shallow"
 msgstr "accepter les références qui mettent à jour .git/shallow"
 
-#: builtin/fetch.c:201 builtin/pull.c:230
+#: builtin/fetch.c:205 builtin/pull.c:230
 msgid "refmap"
 msgstr "correspondance de référence"
 
-#: builtin/fetch.c:202 builtin/pull.c:231
+#: builtin/fetch.c:206 builtin/pull.c:231
 msgid "specify fetch refmap"
 msgstr "spécifier une correspondance de référence pour la récupération"
 
-#: builtin/fetch.c:209 builtin/pull.c:244
+#: builtin/fetch.c:213 builtin/pull.c:244
 msgid "report that we have only objects reachable from this object"
 msgstr "rapporte que nous n'avons que des objets joignables depuis cet objet"
 
-#: builtin/fetch.c:211
+#: builtin/fetch.c:215
 msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
 msgstr ""
 "ne pas récupérer le fichier paquet ; à la place, afficher les ancêtres des "
 "sommets de négociation"
 
-#: builtin/fetch.c:214 builtin/fetch.c:216
+#: builtin/fetch.c:218 builtin/fetch.c:220
 msgid "run 'maintenance --auto' after fetching"
 msgstr "lancer 'maintenance --auto' après la récupération"
 
-#: builtin/fetch.c:218 builtin/pull.c:247
+#: builtin/fetch.c:222 builtin/pull.c:247
 msgid "check for forced-updates on all updated branches"
 msgstr ""
 "vérifier les mises à jour forcées (forced-updates) sur toutes les branches "
 "mises à jour"
 
-#: builtin/fetch.c:220
+#: builtin/fetch.c:224
 msgid "write the commit-graph after fetching"
 msgstr "écrire le graphe de commits après le rapatriement"
 
-#: builtin/fetch.c:222
+#: builtin/fetch.c:226
 msgid "accept refspecs from stdin"
 msgstr "lire les spécificateurs de référence depuis l'entrée standard"
 
-#: builtin/fetch.c:592
+#: builtin/fetch.c:618
 msgid "couldn't find remote ref HEAD"
 msgstr "impossible de trouver la référence HEAD distante"
 
-#: builtin/fetch.c:766
-#, c-format
-msgid "configuration fetch.output contains invalid value %s"
-msgstr ""
-"le paramètre de configuration fetch.output contient une valeur invalide %s"
-
-#: builtin/fetch.c:867
+#: builtin/fetch.c:893
 #, c-format
 msgid "object %s not found"
 msgstr "objet %s non trouvé"
 
-#: builtin/fetch.c:871
+#: builtin/fetch.c:897
 msgid "[up to date]"
 msgstr "[à jour]"
 
-#: builtin/fetch.c:883 builtin/fetch.c:901 builtin/fetch.c:973
+#: builtin/fetch.c:909 builtin/fetch.c:927 builtin/fetch.c:999
 msgid "[rejected]"
 msgstr "[rejeté]"
 
-#: builtin/fetch.c:885
+#: builtin/fetch.c:911
 msgid "can't fetch in current branch"
 msgstr "impossible de récupérer dans la branche actuelle"
 
-#: builtin/fetch.c:886
+#: builtin/fetch.c:912
 msgid "checked out in another worktree"
 msgstr "extrait dans un autre arbre de travail"
 
-#: builtin/fetch.c:896
+#: builtin/fetch.c:922
 msgid "[tag update]"
 msgstr "[mise à jour de l'étiquette]"
 
-#: builtin/fetch.c:897 builtin/fetch.c:934 builtin/fetch.c:956
-#: builtin/fetch.c:968
+#: builtin/fetch.c:923 builtin/fetch.c:960 builtin/fetch.c:982
+#: builtin/fetch.c:994
 msgid "unable to update local ref"
 msgstr "impossible de mettre à jour la référence locale"
 
-#: builtin/fetch.c:901
+#: builtin/fetch.c:927
 msgid "would clobber existing tag"
 msgstr "écraserait l'étiquette existante"
 
-#: builtin/fetch.c:923
+#: builtin/fetch.c:949
 msgid "[new tag]"
 msgstr "[nouvelle étiquette]"
 
-#: builtin/fetch.c:926
+#: builtin/fetch.c:952
 msgid "[new branch]"
 msgstr "[nouvelle branche]"
 
-#: builtin/fetch.c:929
+#: builtin/fetch.c:955
 msgid "[new ref]"
 msgstr "[nouvelle référence]"
 
-#: builtin/fetch.c:968
+#: builtin/fetch.c:994
 msgid "forced update"
 msgstr "mise à jour forcée"
 
-#: builtin/fetch.c:973
+#: builtin/fetch.c:999
 msgid "non-fast-forward"
 msgstr "pas en avance rapide"
 
-#: builtin/fetch.c:1076
+#: builtin/fetch.c:1102
 msgid ""
 "fetch normally indicates which branches had a forced update,\n"
 "but that check has been disabled; to re-enable, use '--show-forced-updates'\n"
@@ -15607,7 +15970,7 @@ msgstr ""
 "mais ceci a été désactivé. Pour ré-activer, utilisez le drapeau\n"
 "'--show-forced-updates' ou lancez 'git config fetch.showForcedUpdates true'"
 
-#: builtin/fetch.c:1080
+#: builtin/fetch.c:1106
 #, c-format
 msgid ""
 "it took %.2f seconds to check forced updates; you can use\n"
@@ -15619,24 +15982,24 @@ msgstr ""
 "Vous pouvez utiliser '--no-show-forced-updates' ou lancer\n"
 "'git config fetch.showForcedUpdates false' pour éviter cette vérification\n"
 
-#: builtin/fetch.c:1112
+#: builtin/fetch.c:1136
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s n'a pas envoyé tous les objets nécessaires\n"
 
-#: builtin/fetch.c:1141
+#: builtin/fetch.c:1156
 #, c-format
 msgid "rejected %s because shallow roots are not allowed to be updated"
 msgstr ""
 "%s rejeté parce que les  mises à jour de racines superficielles ne sont pas "
 "permises"
 
-#: builtin/fetch.c:1231 builtin/fetch.c:1379
+#: builtin/fetch.c:1259 builtin/fetch.c:1418
 #, c-format
 msgid "From %.*s\n"
 msgstr "Depuis %.*s\n"
 
-#: builtin/fetch.c:1252
+#: builtin/fetch.c:1269
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -15645,49 +16008,49 @@ msgstr ""
 "des références locales n'ont pas pu être mises à jour ; essayez de lancer\n"
 " 'git remote prune %s' pour supprimer des branches anciennes en conflit"
 
-#: builtin/fetch.c:1349
+#: builtin/fetch.c:1377
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s sera en suspens)"
 
-#: builtin/fetch.c:1350
+#: builtin/fetch.c:1378
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s est devenu en suspens)"
 
-#: builtin/fetch.c:1382
+#: builtin/fetch.c:1421
 msgid "[deleted]"
 msgstr "[supprimé]"
 
-#: builtin/fetch.c:1383 builtin/remote.c:1128
+#: builtin/fetch.c:1422 builtin/remote.c:1153
 msgid "(none)"
 msgstr "(aucun(e))"
 
-#: builtin/fetch.c:1405
+#: builtin/fetch.c:1446
 #, c-format
 msgid "refusing to fetch into branch '%s' checked out at '%s'"
 msgstr "refus de récupérer dans la branche '%s' extraite dans '%s'"
 
-#: builtin/fetch.c:1425
+#: builtin/fetch.c:1466
 #, c-format
 msgid "option \"%s\" value \"%s\" is not valid for %s"
 msgstr "la valeur \"%2$s\" de l'option \"%1$s\" est invalide pour %3$s"
 
-#: builtin/fetch.c:1428
+#: builtin/fetch.c:1469
 #, c-format
 msgid "option \"%s\" is ignored for %s\n"
 msgstr "l'option \"%s\" est ignorée pour %s\n"
 
-#: builtin/fetch.c:1455
+#: builtin/fetch.c:1496
 #, c-format
 msgid "the object %s does not exist"
 msgstr "l'objet %s n'existe pas"
 
-#: builtin/fetch.c:1643
+#: builtin/fetch.c:1748
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr "branches multiples détectées, imcompatible avec --set-upstream"
 
-#: builtin/fetch.c:1655
+#: builtin/fetch.c:1760
 #, c-format
 msgid ""
 "could not set upstream of HEAD to '%s' from '%s' when it does not point to "
@@ -15696,19 +16059,19 @@ msgstr ""
 "impossible de régler la branche amont de HEAD à '%s' depuis '%s' qui ne "
 "pointe sur aucune branche."
 
-#: builtin/fetch.c:1668
+#: builtin/fetch.c:1773
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr "dépôt amont non défini pour la branche de suivi à distance"
 
-#: builtin/fetch.c:1670
+#: builtin/fetch.c:1775
 msgid "not setting upstream for a remote tag"
 msgstr "dépôt amont non défini pour l'étiquette distante"
 
-#: builtin/fetch.c:1672
+#: builtin/fetch.c:1777
 msgid "unknown branch type"
 msgstr "type de branche inconnu"
 
-#: builtin/fetch.c:1674
+#: builtin/fetch.c:1779
 msgid ""
 "no source branch found;\n"
 "you need to specify exactly one branch with the --set-upstream option"
@@ -15716,22 +16079,22 @@ msgstr ""
 "aucune branche source trouvée.\n"
 "Vous devez spécifier exactement une branche avec l'option --set-upstream"
 
-#: builtin/fetch.c:1804 builtin/fetch.c:1867
+#: builtin/fetch.c:1904 builtin/fetch.c:1967
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Récupération de %s\n"
 
-#: builtin/fetch.c:1814 builtin/fetch.c:1869
+#: builtin/fetch.c:1914 builtin/fetch.c:1969
 #, c-format
 msgid "could not fetch %s"
 msgstr "impossible de récupérer %s"
 
-#: builtin/fetch.c:1826
+#: builtin/fetch.c:1926
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr "impossible de récupérer '%s' (code de sortie : %d)\n"
 
-#: builtin/fetch.c:1930
+#: builtin/fetch.c:2030
 msgid ""
 "no remote repository specified; please specify either a URL or a\n"
 "remote name from which new revisions should be fetched"
@@ -15739,50 +16102,50 @@ msgstr ""
 "Aucun dépôt distant spécifié. Veuillez spécifier une URL ou un nom\n"
 "distant depuis lesquels les nouvelles révisions devraient être récupérées"
 
-#: builtin/fetch.c:1966
+#: builtin/fetch.c:2066
 msgid "you need to specify a tag name"
 msgstr "Vous devez spécifier un nom d'étiquette"
 
-#: builtin/fetch.c:2032
-msgid "--negotiate-only needs one or more --negotiate-tip=*"
-msgstr "--negotiate-only nécessite au moins un --negotiate-tip=*"
+#: builtin/fetch.c:2156
+msgid "--negotiate-only needs one or more --negotiation-tip=*"
+msgstr "--negotiate-only nécessite au moins un --negotiation-tip=*"
 
-#: builtin/fetch.c:2036
+#: builtin/fetch.c:2160
 msgid "negative depth in --deepen is not supported"
 msgstr "une profondeur négative dans --deepen n'est pas supportée"
 
-#: builtin/fetch.c:2045
+#: builtin/fetch.c:2169
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "--unshallow sur un dépôt complet n'a pas de sens"
 
-#: builtin/fetch.c:2062
+#: builtin/fetch.c:2186
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all n'accepte pas d'argument de dépôt"
 
-#: builtin/fetch.c:2064
+#: builtin/fetch.c:2188
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all n'a pas de sens avec des spécifications de référence"
 
-#: builtin/fetch.c:2073
+#: builtin/fetch.c:2197
 #, c-format
 msgid "no such remote or remote group: %s"
 msgstr "distant ou groupe distant inexistant : %s"
 
-#: builtin/fetch.c:2081
+#: builtin/fetch.c:2205
 msgid "fetching a group and specifying refspecs does not make sense"
 msgstr ""
 "la récupération d'un groupe avec des spécifications de référence n'a pas de "
 "sens"
 
-#: builtin/fetch.c:2097
+#: builtin/fetch.c:2221
 msgid "must supply remote when using --negotiate-only"
 msgstr "le distant doit être fourni lors de l'utilisation de --negotiate-only"
 
-#: builtin/fetch.c:2102
+#: builtin/fetch.c:2226
 msgid "protocol does not support --negotiate-only, exiting"
 msgstr "Le protocole ne prend pas en charge --negotiate-only, abandon"
 
-#: builtin/fetch.c:2121
+#: builtin/fetch.c:2246
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -15790,11 +16153,11 @@ msgstr ""
 "--filter ne peut être utilisé qu'avec le dépôt distant configuré dans "
 "extensions.partialclone"
 
-#: builtin/fetch.c:2125
+#: builtin/fetch.c:2250
 msgid "--atomic can only be used when fetching from one remote"
 msgstr "--atomic ne peut être utilisée qu'en récupérant depuis un seul distant"
 
-#: builtin/fetch.c:2129
+#: builtin/fetch.c:2254
 msgid "--stdin can only be used when fetching from one remote"
 msgstr "--stdin ne peut être utilisée qu'en récupérant depuis un seul distant"
 
@@ -15864,7 +16227,7 @@ msgstr "échapper les champs réservés pour compatibilité avec Tcl"
 msgid "show only <n> matched refs"
 msgstr "n'afficher que <n> références correspondant"
 
-#: builtin/for-each-ref.c:42 builtin/tag.c:481
+#: builtin/for-each-ref.c:42 builtin/tag.c:482
 msgid "respect format colors"
 msgstr "respecter les couleurs de formatage"
 
@@ -16058,7 +16421,7 @@ msgstr "Vérification des répertoires d'objet"
 msgid "Checking %s link"
 msgstr "Vérification du lien %s"
 
-#: builtin/fsck.c:710 builtin/index-pack.c:859
+#: builtin/fsck.c:710 builtin/index-pack.c:862
 #, c-format
 msgid "invalid %s"
 msgstr "%s invalide"
@@ -16128,7 +16491,7 @@ msgstr "inspecter aussi les objets pack et alternatifs"
 msgid "check only connectivity"
 msgstr "ne vérifier que la connectivité"
 
-#: builtin/fsck.c:798 builtin/mktag.c:76
+#: builtin/fsck.c:798 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr "activer une vérification plus strict"
 
@@ -16158,6 +16521,118 @@ msgstr "%s : objet manquant"
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "paramètre invalide : sha-1 attendu, '%s' trouvé"
 
+#: builtin/fsmonitor--daemon.c:13
+msgid "git fsmonitor--daemon start [<options>]"
+msgstr "git fsmonitor--daemon start [<options>]"
+
+#: builtin/fsmonitor--daemon.c:14
+msgid "git fsmonitor--daemon run [<options>]"
+msgstr "git fsmonitor--daemon run [<options>]"
+
+#: builtin/fsmonitor--daemon.c:15
+msgid "git fsmonitor--daemon stop"
+msgstr "git fsmonitor--daemon stop"
+
+#: builtin/fsmonitor--daemon.c:16
+msgid "git fsmonitor--daemon status"
+msgstr "git fsmonitor--daemon status"
+
+#: builtin/fsmonitor--daemon.c:38 builtin/fsmonitor--daemon.c:47
+#, c-format
+msgid "value of '%s' out of range: %d"
+msgstr "valeur de '%s' hors de gamme : %d"
+
+#: builtin/fsmonitor--daemon.c:57
+#, c-format
+msgid "value of '%s' not bool or int: %d"
+msgstr "la valeur de '%s' n'est ni bool ni int : %d"
+
+#: builtin/fsmonitor--daemon.c:99
+#, c-format
+msgid "fsmonitor-daemon is watching '%s'\n"
+msgstr "fsmonitor-daemon surveille '%s'\n"
+
+#: builtin/fsmonitor--daemon.c:104
+#, c-format
+msgid "fsmonitor-daemon is not watching '%s'\n"
+msgstr "fsmonitor-daemon ne surveille pas '%s'\n"
+
+#: builtin/fsmonitor--daemon.c:170
+#, c-format
+msgid "could not create fsmonitor cookie '%s'"
+msgstr "impossible de créer le cookie fsmonitor '%s'"
+
+#: builtin/fsmonitor--daemon.c:753
+#, c-format
+msgid "fsmonitor: cookie_result '%d' != SEEN"
+msgstr "fsmonitor: cookie_result '%d' != SEEN"
+
+#: builtin/fsmonitor--daemon.c:1187
+#, c-format
+msgid "could not start IPC thread pool on '%s'"
+msgstr "impossible de démarrer le stock de fils IPC sur '%s'"
+
+#: builtin/fsmonitor--daemon.c:1199
+msgid "could not start fsmonitor listener thread"
+msgstr "impossible de démarrer le fil d'écoute fsmonitor"
+
+#: builtin/fsmonitor--daemon.c:1297
+msgid "could not initialize listener thread"
+msgstr "impossible de démarrer le fil d'écoute"
+
+#: builtin/fsmonitor--daemon.c:1328 builtin/fsmonitor--daemon.c:1383
+#, c-format
+msgid "fsmonitor--daemon is already running '%s'"
+msgstr "fsmonitor--daemon exécute déjà '%s'"
+
+#: builtin/fsmonitor--daemon.c:1332
+#, c-format
+msgid "running fsmonitor-daemon in '%s'\n"
+msgstr "lancement du fil fsmonitor-daemon dans '%s'\n"
+
+#: builtin/fsmonitor--daemon.c:1387
+#, c-format
+msgid "starting fsmonitor-daemon in '%s'\n"
+msgstr "démarrer fsmonitor-daemon dans '%s'\n"
+
+#: builtin/fsmonitor--daemon.c:1413
+msgid "daemon failed to start"
+msgstr "échec du démarrage du daemon"
+
+#: builtin/fsmonitor--daemon.c:1416
+msgid "daemon not online yet"
+msgstr "le daemon n'est pas encore en ligne"
+
+#: builtin/fsmonitor--daemon.c:1419
+msgid "daemon terminated"
+msgstr "le daemon s'est terminé"
+
+#: builtin/fsmonitor--daemon.c:1429
+msgid "detach from console"
+msgstr "détacher de la console"
+
+#: builtin/fsmonitor--daemon.c:1432
+msgid "use <n> ipc worker threads"
+msgstr "utiliser <n> fils de travail ipc"
+
+#: builtin/fsmonitor--daemon.c:1435
+msgid "max seconds to wait for background daemon startup"
+msgstr "nombre max de secondes à attendre que le daemon démarre"
+
+#: builtin/fsmonitor--daemon.c:1449
+#, c-format
+msgid "invalid 'ipc-threads' value (%d)"
+msgstr "valeur invalide de 'ipc-threads' (%d)"
+
+#: builtin/fsmonitor--daemon.c:1464
+#, c-format
+msgid "Unhandled subcommand '%s'"
+msgstr "Sous-commande non-gérée '%s'"
+
+#: builtin/fsmonitor--daemon.c:1477
+msgid "fsmonitor--daemon not supported on this platform"
+msgstr "fsmonitor--daemon non géré sur cette plateforme"
+
 #: builtin/gc.c:39
 msgid "git gc [<options>]"
 msgstr "git gc [<options>]"
@@ -16413,8 +16888,8 @@ msgstr "échec du démarrage de systemctl"
 msgid "failed to run systemctl"
 msgstr "échec pour lancer systemctl"
 
-#: builtin/gc.c:2210 builtin/gc.c:2215 builtin/worktree.c:62
-#: builtin/worktree.c:944
+#: builtin/gc.c:2210 builtin/gc.c:2215 builtin/worktree.c:63
+#: builtin/worktree.c:1024
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "échec de la suppression de '%s'"
@@ -16464,16 +16939,16 @@ msgstr "git maintenance <subcommand> [<options>]"
 msgid "invalid subcommand: %s"
 msgstr "sous-commande invalide : %s"
 
-#: builtin/grep.c:30
+#: builtin/grep.c:32
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<options>] [-e] <motif> [<révision>...] [[--] <chemin>...]"
 
-#: builtin/grep.c:239
+#: builtin/grep.c:241
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep : échec de création du fil: %s"
 
-#: builtin/grep.c:293
+#: builtin/grep.c:295
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "nombre de fils spécifié invalide (%d) pour %s"
@@ -16482,266 +16957,258 @@ msgstr "nombre de fils spécifié invalide (%d) pour %s"
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:301 builtin/index-pack.c:1582 builtin/index-pack.c:1785
-#: builtin/pack-objects.c:3142
+#: builtin/grep.c:303 builtin/index-pack.c:1587 builtin/index-pack.c:1791
+#: builtin/pack-objects.c:3150
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "pas de support des fils, ignore %s"
 
-#: builtin/grep.c:488 builtin/grep.c:617 builtin/grep.c:657
+#: builtin/grep.c:490 builtin/grep.c:619 builtin/grep.c:659
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "impossible de lire l'arbre (%s)"
 
-#: builtin/grep.c:672
+#: builtin/grep.c:674
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "impossible de faire un grep sur un objet de type %s"
 
-#: builtin/grep.c:752
+#: builtin/grep.c:754
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "l'option '%c' attend une valeur numérique"
 
-#: builtin/grep.c:851
+#: builtin/grep.c:852
 msgid "search in index instead of in the work tree"
 msgstr "rechercher dans l'index plutôt que dans la copie de travail"
 
-#: builtin/grep.c:853
+#: builtin/grep.c:854
 msgid "find in contents not managed by git"
 msgstr "rechercher dans les contenus non gérés par git"
 
-#: builtin/grep.c:855
+#: builtin/grep.c:856
 msgid "search in both tracked and untracked files"
 msgstr "rechercher dans les fichiers suivis et non-suivis"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:858
 msgid "ignore files specified via '.gitignore'"
 msgstr "ignorer les fichiers spécifiés via '.gitignore'"
 
-#: builtin/grep.c:859
+#: builtin/grep.c:860
 msgid "recursively search in each submodule"
 msgstr "rechercher récursivement dans chaque sous-module"
 
-#: builtin/grep.c:862
+#: builtin/grep.c:863
 msgid "show non-matching lines"
 msgstr "afficher les lignes qui ne correspondent pas"
 
-#: builtin/grep.c:864
+#: builtin/grep.c:865
 msgid "case insensitive matching"
 msgstr "correspondance insensible à la casse"
 
-#: builtin/grep.c:866
+#: builtin/grep.c:867
 msgid "match patterns only at word boundaries"
 msgstr "rechercher les motifs aux séparateurs de mots"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:869
 msgid "process binary files as text"
 msgstr "traiter les fichiers binaires comme texte"
 
-#: builtin/grep.c:870
+#: builtin/grep.c:871
 msgid "don't match patterns in binary files"
 msgstr "ne pas chercher les motifs dans les fichiers binaires"
 
-#: builtin/grep.c:873
+#: builtin/grep.c:874
 msgid "process binary files with textconv filters"
 msgstr "traiter les fichiers binaires avec les filtres textconv"
 
-#: builtin/grep.c:875
+#: builtin/grep.c:876
 msgid "search in subdirectories (default)"
 msgstr "rechercher dans les sous-répertoires (défaut)"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:878
 msgid "descend at most <depth> levels"
 msgstr "descendre au plus de <profondeur> dans l'arborescence"
 
-#: builtin/grep.c:881
+#: builtin/grep.c:882
 msgid "use extended POSIX regular expressions"
 msgstr "utiliser des expressions régulières étendues POSIX"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:885
 msgid "use basic POSIX regular expressions (default)"
 msgstr "utiliser des expressions régulières basiques POSIX (par défaut)"
 
-#: builtin/grep.c:887
+#: builtin/grep.c:888
 msgid "interpret patterns as fixed strings"
 msgstr "interpréter les motifs comme de chaînes fixes"
 
-#: builtin/grep.c:890
+#: builtin/grep.c:891
 msgid "use Perl-compatible regular expressions"
 msgstr "utiliser des expressions régulières compatibles avec Perl"
 
-#: builtin/grep.c:893
+#: builtin/grep.c:894
 msgid "show line numbers"
 msgstr "afficher les numéros de ligne"
 
-#: builtin/grep.c:894
+#: builtin/grep.c:895
 msgid "show column number of first match"
 msgstr "afficher le numéro de colonne de la première correspondance"
 
-#: builtin/grep.c:895
+#: builtin/grep.c:896
 msgid "don't show filenames"
 msgstr "ne pas pas afficher les noms de fichier"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:897
 msgid "show filenames"
 msgstr "afficher les noms de fichier"
 
-#: builtin/grep.c:898
+#: builtin/grep.c:899
 msgid "show filenames relative to top directory"
 msgstr "afficher les noms de fichiers relativement au répertoire de base"
 
-#: builtin/grep.c:900
+#: builtin/grep.c:901
 msgid "show only filenames instead of matching lines"
 msgstr "n'afficher que les noms de fichiers au lieu des lignes correspondant"
 
-#: builtin/grep.c:902
+#: builtin/grep.c:903
 msgid "synonym for --files-with-matches"
 msgstr "synonyme pour --files-with-matches"
 
-#: builtin/grep.c:905
+#: builtin/grep.c:906
 msgid "show only the names of files without match"
 msgstr "n'afficher que les noms des fichiers sans correspondance"
 
-#: builtin/grep.c:907
+#: builtin/grep.c:908
 msgid "print NUL after filenames"
 msgstr "imprimer une caractère NUL après le noms de fichier"
 
-#: builtin/grep.c:910
+#: builtin/grep.c:911
 msgid "show only matching parts of a line"
 msgstr "n'afficher que les parties correspondantes d'une ligne"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:913
 msgid "show the number of matches instead of matching lines"
 msgstr "afficher le nombre de correspondances au lieu des lignes correspondant"
 
-#: builtin/grep.c:913
+#: builtin/grep.c:914
 msgid "highlight matches"
 msgstr "mettre en évidence les correspondances"
 
-#: builtin/grep.c:915
+#: builtin/grep.c:916
 msgid "print empty line between matches from different files"
 msgstr ""
 "imprimer une ligne vide entre les correspondances de fichiers différents"
 
-#: builtin/grep.c:917
+#: builtin/grep.c:918
 msgid "show filename only once above matches from same file"
 msgstr ""
 "afficher le nom de fichier une fois au dessus des correspondances du même "
 "fichier"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:921
 msgid "show <n> context lines before and after matches"
 msgstr "afficher <n> lignes de contexte avant et après les correspondances"
 
-#: builtin/grep.c:923
+#: builtin/grep.c:924
 msgid "show <n> context lines before matches"
 msgstr "afficher <n> lignes de contexte avant les correspondances"
 
-#: builtin/grep.c:925
+#: builtin/grep.c:926
 msgid "show <n> context lines after matches"
 msgstr "afficher <n> lignes de contexte après les correspondances"
 
-#: builtin/grep.c:927
+#: builtin/grep.c:928
 msgid "use <n> worker threads"
 msgstr "utiliser <n> fils de travail"
 
-#: builtin/grep.c:928
+#: builtin/grep.c:929
 msgid "shortcut for -C NUM"
 msgstr "raccourci pour -C NUM"
 
-#: builtin/grep.c:931
+#: builtin/grep.c:932
 msgid "show a line with the function name before matches"
 msgstr ""
 "afficher une ligne avec le nom de la fonction avant les correspondances"
 
-#: builtin/grep.c:933
+#: builtin/grep.c:934
 msgid "show the surrounding function"
 msgstr "afficher la fonction contenante"
 
-#: builtin/grep.c:936
+#: builtin/grep.c:937
 msgid "read patterns from file"
 msgstr "lire les motifs depuis fichier"
 
-#: builtin/grep.c:938
+#: builtin/grep.c:939
 msgid "match <pattern>"
 msgstr "rechercher <motif>"
 
-#: builtin/grep.c:940
+#: builtin/grep.c:941
 msgid "combine patterns specified with -e"
 msgstr "combiner les motifs spécifiés par -e"
 
-#: builtin/grep.c:952
+#: builtin/grep.c:953
 msgid "indicate hit with exit status without output"
 msgstr ""
 "indiquer des correspondances avec le code de sortie mais sans rien afficher"
 
-#: builtin/grep.c:954
+#: builtin/grep.c:955
 msgid "show only matches from files that match all patterns"
 msgstr ""
 "n'afficher que les correspondances de fichiers qui correspondent à tous les "
 "motifs"
 
-#: builtin/grep.c:957
+#: builtin/grep.c:958
 msgid "pager"
 msgstr "pagineur"
 
-#: builtin/grep.c:957
+#: builtin/grep.c:958
 msgid "show matching files in the pager"
 msgstr "afficher les fichiers correspondant dans le pagineur"
 
-#: builtin/grep.c:961
+#: builtin/grep.c:962
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "permettre l'appel de grep(1) (ignoré par ce build)"
 
-#: builtin/grep.c:1027
+#: builtin/grep.c:1028
 msgid "no pattern given"
 msgstr "aucun motif fourni"
 
-#: builtin/grep.c:1063
+#: builtin/grep.c:1064
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr ""
 "--no-index ou --untracked ne peuvent pas être utilisés avec des révisions"
 
-#: builtin/grep.c:1071
+#: builtin/grep.c:1072
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "impossible de résoudre la révision : %s"
 
-#: builtin/grep.c:1101
+#: builtin/grep.c:1102
 msgid "--untracked not supported with --recurse-submodules"
 msgstr "--untracked non supportée avec --recurse-submodules"
 
-#: builtin/grep.c:1105
+#: builtin/grep.c:1106
 msgid "invalid option combination, ignoring --threads"
 msgstr "option de combinaison invalide, ignore --threads"
 
-#: builtin/grep.c:1108 builtin/pack-objects.c:4059
+#: builtin/grep.c:1109 builtin/pack-objects.c:4084
 msgid "no threads support, ignoring --threads"
 msgstr "pas de support des fils, ignore --threads"
 
-#: builtin/grep.c:1111 builtin/index-pack.c:1579 builtin/pack-objects.c:3139
+#: builtin/grep.c:1112 builtin/index-pack.c:1584 builtin/pack-objects.c:3147
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "nombre de fils spécifié invalide (%d)"
 
-#: builtin/grep.c:1145
+#: builtin/grep.c:1146
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager ne fonctionne que sur la copie de travail"
 
-#: builtin/grep.c:1171
-msgid "--cached or --untracked cannot be used with --no-index"
-msgstr "--cached ou --untracked ne peuvent pas être utilisés avec --no-index"
-
-#: builtin/grep.c:1174
-msgid "--untracked cannot be used with --cached"
-msgstr "--untracked ne peut pas être utilisé avec --cached"
-
-#: builtin/grep.c:1180
+#: builtin/grep.c:1179
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr "--[no-]exclude-standard ne peut pas être utilisé avec du contenu suivi"
 
-#: builtin/grep.c:1188
+#: builtin/grep.c:1187
 msgid "both --cached and trees are given"
 msgstr "--cached et des arbres sont fournis en même temps"
 
@@ -16753,109 +17220,101 @@ msgstr ""
 "git hash-object [-t <type>] [-w] [--path=<fichier> | --no-filters] [--stdin] "
 "[--] <fichier>..."
 
-#: builtin/hash-object.c:84
-msgid "git hash-object  --stdin-paths"
-msgstr "git hash-object  --stdin-paths"
-
-#: builtin/hash-object.c:96
+#: builtin/hash-object.c:97
 msgid "object type"
 msgstr "type d'objet"
 
-#: builtin/hash-object.c:97
+#: builtin/hash-object.c:98
 msgid "write the object into the object database"
 msgstr "écrire l'objet dans la base de donnée d'objets"
 
-#: builtin/hash-object.c:99
+#: builtin/hash-object.c:100
 msgid "read the object from stdin"
 msgstr "lire l'objet depuis l'entrée standard"
 
-#: builtin/hash-object.c:101
+#: builtin/hash-object.c:102
 msgid "store file as is without filters"
 msgstr "stocker le fichier tel quel sans filtrage"
 
-#: builtin/hash-object.c:102
+#: builtin/hash-object.c:103
 msgid ""
 "just hash any random garbage to create corrupt objects for debugging Git"
 msgstr ""
 "juste hasher n'importe quel contenu pour créer des objets corrompus pour "
 "debugger Git"
 
-#: builtin/hash-object.c:103
+#: builtin/hash-object.c:104
 msgid "process file as it were from this path"
 msgstr "traiter le fichier comme s'il venait de ce chemin"
 
-#: builtin/help.c:55
+#: builtin/help.c:57
 msgid "print all available commands"
 msgstr "afficher toutes les commandes disponibles"
 
-#: builtin/help.c:57
+#: builtin/help.c:60
+msgid "show external commands in --all"
+msgstr "afficher les commandes externes dans --all"
+
+#: builtin/help.c:61
+msgid "show aliases in --all"
+msgstr "afficher les alias dans --all"
+
+#: builtin/help.c:62
 msgid "exclude guides"
 msgstr "exclure les guides"
 
-#: builtin/help.c:58
+#: builtin/help.c:63
 msgid "show man page"
 msgstr "afficher la page de manuel"
 
-#: builtin/help.c:59
+#: builtin/help.c:64
 msgid "show manual in web browser"
 msgstr "afficher le manuel dans un navigateur web"
 
-#: builtin/help.c:61
+#: builtin/help.c:66
 msgid "show info page"
 msgstr "afficher la page info"
 
-#: builtin/help.c:63
+#: builtin/help.c:68
 msgid "print command description"
 msgstr "afficher la description de la commande"
 
-#: builtin/help.c:65
+#: builtin/help.c:70
 msgid "print list of useful guides"
 msgstr "afficher une liste de guides utiles"
 
-#: builtin/help.c:67
+#: builtin/help.c:72
 msgid "print all configuration variable names"
 msgstr "afficher tous les noms de variables de configuration"
 
-#: builtin/help.c:78
-msgid ""
-"git help [-a|--all] [--[no-]verbose]]\n"
-"         [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
-msgstr ""
-"git help [-a|--all] [--[no-]verbose]]\n"
-"         [[-i|--info] [-m|--man] [-w|--web]] [<commande>]"
-
-#: builtin/help.c:80
-msgid "git help [-g|--guides]"
-msgstr "git help [-g|--guides]"
-
-#: builtin/help.c:81
-msgid "git help [-c|--config]"
-msgstr "git help [-c|--config]"
+#: builtin/help.c:84
+msgid "git help [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
+msgstr "git help [[-i|--info] [-m|--man] [-w|--web]] [<commande>]"
 
-#: builtin/help.c:196
+#: builtin/help.c:201
 #, c-format
 msgid "unrecognized help format '%s'"
 msgstr "format d'aide non reconnu '%s'"
 
-#: builtin/help.c:222
+#: builtin/help.c:227
 msgid "Failed to start emacsclient."
 msgstr "Échec de démarrage d'emacsclient."
 
-#: builtin/help.c:235
+#: builtin/help.c:240
 msgid "Failed to parse emacsclient version."
 msgstr "Échec d'analyse de la version d'emacsclient."
 
-#: builtin/help.c:243
+#: builtin/help.c:248
 #, c-format
 msgid "emacsclient version '%d' too old (< 22)."
 msgstr "la version d'emacsclient '%d' est trop ancienne (<22)."
 
-#: builtin/help.c:261 builtin/help.c:283 builtin/help.c:293 builtin/help.c:301
+#: builtin/help.c:266 builtin/help.c:288 builtin/help.c:298 builtin/help.c:306
 #, c-format
 msgid "failed to exec '%s'"
 msgstr "échec de l'exécution de '%s'"
 
-#: builtin/help.c:339
+#: builtin/help.c:344
 #, c-format
 msgid ""
 "'%s': path for unsupported man viewer.\n"
@@ -16864,7 +17323,7 @@ msgstr ""
 "'%s' : chemin pour l'utilitaire de visualisation de manuel non supporté.\n"
 "Veuillez utiliser plutôt 'man.<outil>.cmd'."
 
-#: builtin/help.c:351
+#: builtin/help.c:356
 #, c-format
 msgid ""
 "'%s': cmd for supported man viewer.\n"
@@ -16873,42 +17332,59 @@ msgstr ""
 "'%s' : chemin pour l'utilitaire de visualisation de manuel supporté.\n"
 "Veuillez utiliser plutôt 'man.<outil>.cmd'."
 
-#: builtin/help.c:466
+#: builtin/help.c:471
 #, c-format
 msgid "'%s': unknown man viewer."
 msgstr "'%s' : visualiseur de manuel inconnu."
 
-#: builtin/help.c:482
+#: builtin/help.c:487
 msgid "no man viewer handled the request"
 msgstr "aucun visualiseur de manuel n'a pris en charge la demande"
 
-#: builtin/help.c:489
+#: builtin/help.c:494
 msgid "no info viewer handled the request"
 msgstr "aucun visualiseur de 'info' n'a pris en charge la demande"
 
-#: builtin/help.c:550 builtin/help.c:561 git.c:348
+#: builtin/help.c:555 builtin/help.c:566 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "'%s' est un alias de '%s'"
 
-#: builtin/help.c:564 git.c:380
+#: builtin/help.c:569 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr "mauvais chaîne alias.%s : %s"
 
-#: builtin/help.c:580
-msgid "this option doesn't take any other arguments"
-msgstr "cette option n'accepte pas d'autre argument"
+#: builtin/help.c:611
+#, c-format
+msgid "the '%s' option doesn't take any non-option arguments"
+msgstr "l'option '%s' n'accepte pas d'argument sans option"
+
+#: builtin/help.c:631
+msgid ""
+"the '--no-[external-commands|aliases]' options can only be used with '--all'"
+msgstr ""
+"les options '--no-[external-commands|aliases]' ne peuvent être utilisées "
+"qu'avec '--all'"
 
-#: builtin/help.c:601 builtin/help.c:628
+#: builtin/help.c:643 builtin/help.c:671
 #, c-format
 msgid "usage: %s%s"
 msgstr "usage : %s%s"
 
-#: builtin/help.c:623
+#: builtin/help.c:666
 msgid "'git help config' for more information"
 msgstr "'git help config' pour plus d'information"
 
+#: builtin/hook.c:10
+msgid "git hook run [--ignore-missing] <hook-name> [-- <hook-args>]"
+msgstr ""
+"git hook run [--ignore-missing] <nom-de-crochet> [-- <arguments-de-crochet>]"
+
+#: builtin/hook.c:30
+msgid "silently ignore missing requested <hook-name>"
+msgstr "ignorer silencieusement le <nom-de-crochet> requis manquant"
+
 #: builtin/index-pack.c:221
 #, c-format
 msgid "object type mismatch at %s"
@@ -16943,245 +17419,246 @@ msgstr "erreur de lecture sur l'entrée"
 msgid "used more bytes than were available"
 msgstr "plus d'octets utilisés que disponibles"
 
-#: builtin/index-pack.c:324 builtin/pack-objects.c:756
+#: builtin/index-pack.c:324 builtin/pack-objects.c:754
 msgid "pack too large for current definition of off_t"
 msgstr "le paquet est trop grand pour la définition actuelle de off_t"
 
-#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
-msgid "pack exceeds maximum allowed size"
-msgstr "le paquet dépasse la taille maximale permise"
+#: builtin/index-pack.c:329
+#, c-format
+msgid "pack exceeds maximum allowed size (%s)"
+msgstr "le paquet dépasse la taille maximale permise (%s)"
 
-#: builtin/index-pack.c:358
+#: builtin/index-pack.c:362
 msgid "pack signature mismatch"
 msgstr "la signature du paquet ne correspond pas"
 
-#: builtin/index-pack.c:360
+#: builtin/index-pack.c:364
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "la version de paquet %<PRIu32> non supportée"
 
-#: builtin/index-pack.c:376
+#: builtin/index-pack.c:380
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "le paquet a un mauvais objet à l'offset %<PRIuMAX> : %s"
 
-#: builtin/index-pack.c:482
+#: builtin/index-pack.c:485
 #, c-format
 msgid "inflate returned %d"
 msgstr "la décompression (inflate) a retourné %d"
 
-#: builtin/index-pack.c:531
+#: builtin/index-pack.c:534
 msgid "offset value overflow for delta base object"
 msgstr "dépassement de la valeur d'offset pour l'objet delta de base"
 
-#: builtin/index-pack.c:539
+#: builtin/index-pack.c:542
 msgid "delta base offset is out of bound"
 msgstr "l'objet delta de base est hors limite"
 
-#: builtin/index-pack.c:547
+#: builtin/index-pack.c:550
 #, c-format
 msgid "unknown object type %d"
 msgstr "type d'objet inconnu %d"
 
-#: builtin/index-pack.c:578
+#: builtin/index-pack.c:581
 msgid "cannot pread pack file"
 msgstr "impossible de lire (pread) le fichier paquet"
 
-#: builtin/index-pack.c:580
+#: builtin/index-pack.c:583
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
 msgstr[0] "fin prématurée du fichier paquet, %<PRIuMAX> octet lu"
 msgstr[1] "fin prématurée du fichier paquet, %<PRIuMAX> octets lus"
 
-#: builtin/index-pack.c:606
+#: builtin/index-pack.c:609
 msgid "serious inflate inconsistency"
 msgstr "grave incohérence dans la décompression (inflate)"
 
-#: builtin/index-pack.c:751 builtin/index-pack.c:757 builtin/index-pack.c:781
-#: builtin/index-pack.c:820 builtin/index-pack.c:829
+#: builtin/index-pack.c:754 builtin/index-pack.c:760 builtin/index-pack.c:784
+#: builtin/index-pack.c:823 builtin/index-pack.c:832
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "COLLISION SHA1 TROUVÉE AVEC %s !"
 
-#: builtin/index-pack.c:754 builtin/pack-objects.c:292
-#: builtin/pack-objects.c:352 builtin/pack-objects.c:458
+#: builtin/index-pack.c:757 builtin/pack-objects.c:290
+#: builtin/pack-objects.c:350 builtin/pack-objects.c:456
 #, c-format
 msgid "unable to read %s"
 msgstr "impossible de lire %s"
 
-#: builtin/index-pack.c:818
+#: builtin/index-pack.c:821
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "impossible de lire l'information existante de l'objet %s"
 
-#: builtin/index-pack.c:826
+#: builtin/index-pack.c:829
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "impossible de lire l'objet existant %s"
 
-#: builtin/index-pack.c:840
+#: builtin/index-pack.c:843
 #, c-format
 msgid "invalid blob object %s"
 msgstr "objet blob invalide %s"
 
-#: builtin/index-pack.c:843 builtin/index-pack.c:862
+#: builtin/index-pack.c:846 builtin/index-pack.c:865
 msgid "fsck error in packed object"
 msgstr "erreur de fsck dans l'objet empaqueté"
 
-#: builtin/index-pack.c:864
+#: builtin/index-pack.c:867
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr "Tous les objets enfants de %s ne sont pas accessibles"
 
-#: builtin/index-pack.c:925 builtin/index-pack.c:972
+#: builtin/index-pack.c:928 builtin/index-pack.c:975
 msgid "failed to apply delta"
 msgstr "échec d'application du delta"
 
-#: builtin/index-pack.c:1156
+#: builtin/index-pack.c:1161
 msgid "Receiving objects"
 msgstr "Réception d'objets"
 
-#: builtin/index-pack.c:1156
+#: builtin/index-pack.c:1161
 msgid "Indexing objects"
 msgstr "Indexation d'objets"
 
-#: builtin/index-pack.c:1190
+#: builtin/index-pack.c:1195
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "le paquet est corrompu (SHA1 ne correspond pas)"
 
-#: builtin/index-pack.c:1195
+#: builtin/index-pack.c:1200
 msgid "cannot fstat packfile"
 msgstr "impossible d'obtenir le statut (fstat) du fichier paquet"
 
-#: builtin/index-pack.c:1198
+#: builtin/index-pack.c:1203
 msgid "pack has junk at the end"
 msgstr "le paquet est invalide à la fin"
 
-#: builtin/index-pack.c:1210
+#: builtin/index-pack.c:1215
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr "confusion extrême dans parse_pack_objects()"
 
-#: builtin/index-pack.c:1233
+#: builtin/index-pack.c:1238
 msgid "Resolving deltas"
 msgstr "Résolution des deltas"
 
-#: builtin/index-pack.c:1244 builtin/pack-objects.c:2905
+#: builtin/index-pack.c:1249 builtin/pack-objects.c:2913
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "impossible de créer le fil : %s"
 
-#: builtin/index-pack.c:1277
+#: builtin/index-pack.c:1282
 msgid "confusion beyond insanity"
 msgstr "confusion extrême"
 
-#: builtin/index-pack.c:1283
+#: builtin/index-pack.c:1288
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
 msgstr[0] "complété avec %d objet local"
 msgstr[1] "complété avec %d objets locaux"
 
-#: builtin/index-pack.c:1295
+#: builtin/index-pack.c:1300
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr ""
 "Somme de contrôle de fin inattendue pour %s (corruption sur le disque ?)"
 
-#: builtin/index-pack.c:1299
+#: builtin/index-pack.c:1304
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] "le paquet a %d delta non résolu"
 msgstr[1] "le paquet a %d deltas non résolus"
 
-#: builtin/index-pack.c:1323
+#: builtin/index-pack.c:1328
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "impossible de compresser l'objet ajouté (%d)"
 
-#: builtin/index-pack.c:1419
+#: builtin/index-pack.c:1423
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "l'objet local %s est corrompu"
 
-#: builtin/index-pack.c:1440
+#: builtin/index-pack.c:1445
 #, c-format
 msgid "packfile name '%s' does not end with '.%s'"
 msgstr "le nom de fichier paquet '%s' ne se termine pas par '.%s'"
 
-#: builtin/index-pack.c:1464
+#: builtin/index-pack.c:1469
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "impossible d'écrire le fichier %s '%s'"
 
-#: builtin/index-pack.c:1472
+#: builtin/index-pack.c:1477
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr "impossible de fermer le fichier %s écrit '%s'"
 
-#: builtin/index-pack.c:1489
+#: builtin/index-pack.c:1494
 #, c-format
 msgid "unable to rename temporary '*.%s' file to '%s'"
 msgstr "impossible de renommer un fichier temporaire '*.%s' en '%s'"
 
-#: builtin/index-pack.c:1514
+#: builtin/index-pack.c:1519
 msgid "error while closing pack file"
 msgstr "erreur en fermeture du fichier paquet"
 
-#: builtin/index-pack.c:1573 builtin/pack-objects.c:3150
+#: builtin/index-pack.c:1578 builtin/pack-objects.c:3158
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "mauvais pack.indexversion=%<PRIu32>"
 
-#: builtin/index-pack.c:1643
+#: builtin/index-pack.c:1648
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "Impossible d'ouvrir le fichier paquet existant '%s'"
 
-#: builtin/index-pack.c:1645
+#: builtin/index-pack.c:1650
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "Impossible d'ouvrir le fichier paquet d'index existant pour '%s'"
 
-#: builtin/index-pack.c:1693
+#: builtin/index-pack.c:1698
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] "pas un delta : %d objet"
 msgstr[1] "pas un delta : %d objets"
 
-#: builtin/index-pack.c:1700
+#: builtin/index-pack.c:1705
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
 msgstr[0] "longueur chaînée = %d : %lu objet"
 msgstr[1] "longueur chaînée = %d : %lu objets"
 
-#: builtin/index-pack.c:1742
+#: builtin/index-pack.c:1748
 msgid "Cannot come back to cwd"
 msgstr "Impossible de revenir au répertoire de travail courant"
 
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1799
-#: builtin/index-pack.c:1819 builtin/index-pack.c:1823
+#: builtin/index-pack.c:1802 builtin/index-pack.c:1805
+#: builtin/index-pack.c:1825 builtin/index-pack.c:1829
 #, c-format
 msgid "bad %s"
 msgstr "mauvais %s"
 
-#: builtin/index-pack.c:1829 builtin/init-db.c:379 builtin/init-db.c:614
+#: builtin/index-pack.c:1835 builtin/init-db.c:379 builtin/init-db.c:614
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "algorithme d'empreinte inconnu '%s'"
 
-#: builtin/index-pack.c:1850
+#: builtin/index-pack.c:1856
 msgid "--stdin requires a git repository"
 msgstr "--stdin requiert un dépôt git"
 
-#: builtin/index-pack.c:1867
+#: builtin/index-pack.c:1873
 msgid "--verify with no packfile name given"
 msgstr "--verify sans nom de fichier paquet donné"
 
-#: builtin/index-pack.c:1933 builtin/unpack-objects.c:584
+#: builtin/index-pack.c:1939 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "erreur de fsck dans les objets paquets"
 
@@ -17390,40 +17867,40 @@ msgstr "--trailer n'a aucune signification avec --only-input"
 msgid "no input file given for in-place editing"
 msgstr "aucun fichier en entrée pour l'éditon sur place"
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<options>] [<plage de révisions>] [[--] <chemin>...]"
 
-#: builtin/log.c:60
+#: builtin/log.c:61
 msgid "git show [<options>] <object>..."
 msgstr "git show [<options>] <objet>..."
 
-#: builtin/log.c:113
+#: builtin/log.c:114
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "option --decorate invalide : %s"
 
-#: builtin/log.c:180
+#: builtin/log.c:181
 msgid "show source"
 msgstr "afficher la source"
 
-#: builtin/log.c:181
+#: builtin/log.c:182
 msgid "use mail map file"
 msgstr "utiliser le fichier de correspondance de mail"
 
-#: builtin/log.c:184
+#: builtin/log.c:185
 msgid "only decorate refs that match <pattern>"
 msgstr "décorer seulement les références correspondant à <motif>"
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "do not decorate refs that match <pattern>"
 msgstr "ne pas décorer les références correspondant à <motif>"
 
-#: builtin/log.c:187
+#: builtin/log.c:188
 msgid "decorate options"
 msgstr "décorer les options"
 
-#: builtin/log.c:190
+#: builtin/log.c:191
 msgid ""
 "trace the evolution of line range <start>,<end> or function :<funcname> in "
 "<file>"
@@ -17431,90 +17908,94 @@ msgstr ""
 "tracer l'évolution d'une plage <début>,<fin> ou d'une fonction <nom-de-"
 "fonction> dans <fichier>"
 
-#: builtin/log.c:213
+#: builtin/log.c:214
 msgid "-L<range>:<file> cannot be used with pathspec"
 msgstr ""
 "-L<plage>:<fichier> ne peut pas être utilisé avec une spécificateur de chemin"
 
-#: builtin/log.c:321
+#: builtin/log.c:322
 #, c-format
 msgid "Final output: %d %s\n"
-msgstr "Sortie finale : %d %s\n"
+msgstr "Sortie finale : %d %s\n"
 
-#: builtin/log.c:586
+#: builtin/log.c:429
+msgid "unable to create temporary object directory"
+msgstr "impossible de créer un répertoire d'objets temporaire"
+
+#: builtin/log.c:599
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s : fichier incorrect"
 
-#: builtin/log.c:601 builtin/log.c:691
+#: builtin/log.c:614 builtin/log.c:706
 #, c-format
 msgid "could not read object %s"
 msgstr "impossible de lire l'objet %s"
 
-#: builtin/log.c:716
+#: builtin/log.c:731
 #, c-format
 msgid "unknown type: %d"
 msgstr "type inconnu : %d"
 
-#: builtin/log.c:861
+#: builtin/log.c:880
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr "%s : couverture invalide pour le mode de description"
 
-#: builtin/log.c:868
+#: builtin/log.c:887
 msgid "format.headers without value"
 msgstr "format.headers sans valeur"
 
-#: builtin/log.c:997
+#: builtin/log.c:1016
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "impossible d'ouvrir le fichier correctif %s"
 
-#: builtin/log.c:1014
+#: builtin/log.c:1033
 msgid "need exactly one range"
 msgstr "exactement une plage nécessaire"
 
-#: builtin/log.c:1024
+#: builtin/log.c:1043
 msgid "not a range"
 msgstr "ceci n'est pas une plage"
 
-#: builtin/log.c:1188
+#: builtin/log.c:1207
 msgid "cover letter needs email format"
 msgstr "la lettre de motivation doit être au format courriel"
 
-#: builtin/log.c:1194
+#: builtin/log.c:1213
 msgid "failed to create cover-letter file"
 msgstr "échec de création du fichier de lettre de motivation"
 
-#: builtin/log.c:1281
+#: builtin/log.c:1300
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "in-reply-to aberrant : %s"
 
-#: builtin/log.c:1308
+#: builtin/log.c:1327
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<options>] [<depuis> | <plage de révisions>]"
 
-#: builtin/log.c:1366
+#: builtin/log.c:1385
 msgid "two output directories?"
 msgstr "deux répertoires de sortie ?"
 
-#: builtin/log.c:1517 builtin/log.c:2344 builtin/log.c:2346 builtin/log.c:2358
+#: builtin/log.c:1536 builtin/log.c:2369 builtin/log.c:2371 builtin/log.c:2383
 #, c-format
 msgid "unknown commit %s"
 msgstr "commit inconnu %s"
 
-#: builtin/log.c:1528 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1547 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "échec à résoudre '%s' comme une référence valide"
 
-#: builtin/log.c:1537
+#: builtin/log.c:1556
 msgid "could not find exact merge base"
 msgstr "impossible de trouver la base de fusion exacte"
 
-#: builtin/log.c:1547
+#: builtin/log.c:1566
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -17527,285 +18008,289 @@ msgstr ""
 "Ou vous pouvez spécifier le commit de base par --base=<id-du-commit-de-base> "
 "manuellement"
 
-#: builtin/log.c:1570
+#: builtin/log.c:1589
 msgid "failed to find exact merge base"
 msgstr "échec à trouver la base de fusion exacte"
 
-#: builtin/log.c:1587
+#: builtin/log.c:1606
 msgid "base commit should be the ancestor of revision list"
 msgstr "le commit de base devrait être l'ancêtre de la liste de révisions"
 
-#: builtin/log.c:1597
+#: builtin/log.c:1616
 msgid "base commit shouldn't be in revision list"
 msgstr "le commit de base ne devrait pas faire partie de la liste de révisions"
 
-#: builtin/log.c:1655
+#: builtin/log.c:1674
 msgid "cannot get patch id"
 msgstr "impossible d'obtenir l'id du patch"
 
-#: builtin/log.c:1718
+#: builtin/log.c:1737
 msgid "failed to infer range-diff origin of current series"
 msgstr ""
 "échec d'inférence de l'origine de différence d'intervalles de la série "
 "actuelle"
 
-#: builtin/log.c:1720
+#: builtin/log.c:1739
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr ""
 "utilisation de '%s' comme une différence d'intervalle pour la série actuelle"
 
-#: builtin/log.c:1764
+#: builtin/log.c:1783
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "utiliser [PATCH n/m] même avec un patch unique"
 
-#: builtin/log.c:1767
+#: builtin/log.c:1786
 msgid "use [PATCH] even with multiple patches"
 msgstr "utiliser [PATCH] même avec des patchs multiples"
 
-#: builtin/log.c:1771
+#: builtin/log.c:1790
 msgid "print patches to standard out"
 msgstr "afficher les patchs sur la sortie standard"
 
-#: builtin/log.c:1773
+#: builtin/log.c:1792
 msgid "generate a cover letter"
 msgstr "générer une lettre de motivation"
 
-#: builtin/log.c:1775
+#: builtin/log.c:1794
 msgid "use simple number sequence for output file names"
 msgstr ""
 "utiliser une séquence simple de nombres pour les nom des fichiers de sortie"
 
-#: builtin/log.c:1776
+#: builtin/log.c:1795
 msgid "sfx"
 msgstr "sfx"
 
-#: builtin/log.c:1777
+#: builtin/log.c:1796
 msgid "use <sfx> instead of '.patch'"
 msgstr "utiliser <sfx> au lieu de '.patch'"
 
-#: builtin/log.c:1779
+#: builtin/log.c:1798
 msgid "start numbering patches at <n> instead of 1"
 msgstr "démarrer la numérotation des patchs à <n> au lieu de 1"
 
-#: builtin/log.c:1780
+#: builtin/log.c:1799
 msgid "reroll-count"
 msgstr "reroll-count"
 
-#: builtin/log.c:1781
+#: builtin/log.c:1800
 msgid "mark the series as Nth re-roll"
 msgstr "marquer la série comme une Nième réédition"
 
-#: builtin/log.c:1783
+#: builtin/log.c:1802
 msgid "max length of output filename"
 msgstr "taille maximum du nom du fichier de sortie"
 
-#: builtin/log.c:1785
+#: builtin/log.c:1804
 msgid "use [RFC PATCH] instead of [PATCH]"
 msgstr "utiliser [RFC PATCH] au lieu de [PATCH]"
 
-#: builtin/log.c:1788
+#: builtin/log.c:1807
 msgid "cover-from-description-mode"
 msgstr "cover-from-description-mode"
 
-#: builtin/log.c:1789
+#: builtin/log.c:1808
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr ""
 "générer des parties de la lettre d'introduction à partir de la description "
 "de la branche"
 
-#: builtin/log.c:1791
+#: builtin/log.c:1810
 msgid "use [<prefix>] instead of [PATCH]"
 msgstr "utiliser [<préfixe>] au lieu de [PATCH]"
 
-#: builtin/log.c:1794
+#: builtin/log.c:1813
 msgid "store resulting files in <dir>"
 msgstr "stocker les fichiers résultats dans <répertoire>"
 
-#: builtin/log.c:1797
+#: builtin/log.c:1816
 msgid "don't strip/add [PATCH]"
 msgstr "ne pas retirer/ajouter [PATCH]"
 
-#: builtin/log.c:1800
+#: builtin/log.c:1819
 msgid "don't output binary diffs"
 msgstr "ne pas imprimer les diffs binaires"
 
-#: builtin/log.c:1802
+#: builtin/log.c:1821
 msgid "output all-zero hash in From header"
 msgstr "écrire une empreinte à zéro dans l'entête From"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1823
 msgid "don't include a patch matching a commit upstream"
 msgstr "ne pas inclure un patch correspondant à un commit amont"
 
-#: builtin/log.c:1806
+#: builtin/log.c:1825
 msgid "show patch format instead of default (patch + stat)"
 msgstr "afficher le format du patch au lieu du défaut (patch + stat)"
 
-#: builtin/log.c:1808
+#: builtin/log.c:1827
 msgid "Messaging"
 msgstr "Communication"
 
-#: builtin/log.c:1809
+#: builtin/log.c:1828
 msgid "header"
 msgstr "en-tête"
 
-#: builtin/log.c:1810
+#: builtin/log.c:1829
 msgid "add email header"
 msgstr "ajouter l'en-tête de courriel"
 
-#: builtin/log.c:1811 builtin/log.c:1812
+#: builtin/log.c:1830 builtin/log.c:1831
 msgid "email"
 msgstr "courriel"
 
-#: builtin/log.c:1811
+#: builtin/log.c:1830
 msgid "add To: header"
 msgstr "ajouter l'en-tête \"To:\""
 
-#: builtin/log.c:1812
+#: builtin/log.c:1831
 msgid "add Cc: header"
 msgstr "ajouter l'en-tête \"Cc:\""
 
-#: builtin/log.c:1813
+#: builtin/log.c:1832
 msgid "ident"
 msgstr "ident"
 
-#: builtin/log.c:1814
+#: builtin/log.c:1833
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 "renseigner l'adresse From à <ident> (ou à l'ident du validateur si absent)"
 
-#: builtin/log.c:1816
+#: builtin/log.c:1835
 msgid "message-id"
 msgstr "id-message"
 
-#: builtin/log.c:1817
+#: builtin/log.c:1836
 msgid "make first mail a reply to <message-id>"
 msgstr "répondre dans le premier message à <id-message>"
 
-#: builtin/log.c:1818 builtin/log.c:1821
+#: builtin/log.c:1837 builtin/log.c:1840
 msgid "boundary"
 msgstr "limite"
 
-#: builtin/log.c:1819
+#: builtin/log.c:1838
 msgid "attach the patch"
 msgstr "attacher le patch"
 
-#: builtin/log.c:1822
+#: builtin/log.c:1841
 msgid "inline the patch"
 msgstr "patch à l'intérieur"
 
-#: builtin/log.c:1826
+#: builtin/log.c:1845
 msgid "enable message threading, styles: shallow, deep"
 msgstr ""
 "activer l'enfilage de message, styles : shallow (superficiel), deep (profond)"
 
-#: builtin/log.c:1828
+#: builtin/log.c:1847
 msgid "signature"
 msgstr "signature"
 
-#: builtin/log.c:1829
+#: builtin/log.c:1848
 msgid "add a signature"
 msgstr "ajouter une signature"
 
-#: builtin/log.c:1830
+#: builtin/log.c:1849
 msgid "base-commit"
 msgstr "commit-de-base"
 
-#: builtin/log.c:1831
+#: builtin/log.c:1850
 msgid "add prerequisite tree info to the patch series"
 msgstr "ajouter un arbre prérequis à la série de patchs"
 
-#: builtin/log.c:1834
+#: builtin/log.c:1853
 msgid "add a signature from a file"
 msgstr "ajouter une signature depuis un fichier"
 
-#: builtin/log.c:1835
+#: builtin/log.c:1854
 msgid "don't print the patch filenames"
 msgstr "ne pas afficher les noms de fichiers des patchs"
 
-#: builtin/log.c:1837
+#: builtin/log.c:1856
 msgid "show progress while generating patches"
 msgstr ""
 "afficher la barre de progression durant la phase de génération des patchs"
 
-#: builtin/log.c:1839
+#: builtin/log.c:1858
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
 "afficher les modifications par rapport à <rév> dans la première page ou une "
 "rustine"
 
-#: builtin/log.c:1842
+#: builtin/log.c:1861
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
 "afficher les modifications par rapport à <refspec> dans la première page ou "
 "une rustine"
 
-#: builtin/log.c:1844 builtin/range-diff.c:28
+#: builtin/log.c:1863 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr "pourcentage par lequel la création est pondérée"
 
-#: builtin/log.c:1931
+#: builtin/log.c:1953
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "ligne d'identification invalide : %s"
 
-#: builtin/log.c:1956
+#: builtin/log.c:1978
 msgid "--name-only does not make sense"
 msgstr "--name-only n'a pas de sens"
 
-#: builtin/log.c:1958
+#: builtin/log.c:1980
 msgid "--name-status does not make sense"
 msgstr "--name-status n'a pas de sens"
 
-#: builtin/log.c:1960
+#: builtin/log.c:1982
 msgid "--check does not make sense"
 msgstr "--check n'a pas de sens"
 
-#: builtin/log.c:2104
+#: builtin/log.c:1984
+msgid "--remerge-diff does not make sense"
+msgstr "--remerge-diff n'a pas de sens"
+
+#: builtin/log.c:2129
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff requiert --cover-letter ou une rustine unique"
 
-#: builtin/log.c:2108
+#: builtin/log.c:2133
 msgid "Interdiff:"
 msgstr "Interdiff :"
 
-#: builtin/log.c:2109
+#: builtin/log.c:2134
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Interdiff contre v%d :"
 
-#: builtin/log.c:2119
+#: builtin/log.c:2144
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff requiert --cover-letter ou une rustine unique"
 
-#: builtin/log.c:2127
+#: builtin/log.c:2152
 msgid "Range-diff:"
 msgstr "Diff-intervalle :"
 
-#: builtin/log.c:2128
+#: builtin/log.c:2153
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "Diff-intervalle contre v%d :"
 
-#: builtin/log.c:2139
+#: builtin/log.c:2164
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "lecture du fichier de signature '%s' impossible"
 
-#: builtin/log.c:2175
+#: builtin/log.c:2200
 msgid "Generating patches"
 msgstr "Génération des patchs"
 
-#: builtin/log.c:2219
+#: builtin/log.c:2244
 msgid "failed to create output files"
 msgstr "échec de création des fichiers en sortie"
 
-#: builtin/log.c:2279
+#: builtin/log.c:2304
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<branche_amont> [<head> [<limite>]]]"
 
-#: builtin/log.c:2333
+#: builtin/log.c:2358
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -17902,10 +18387,6 @@ msgstr "ajouter les exclusions git standard"
 msgid "make the output relative to the project top directory"
 msgstr "afficher en relatif par rapport au répertoire racine du projet"
 
-#: builtin/ls-files.c:667
-msgid "recurse through submodules"
-msgstr "parcourir récursivement les sous-modules"
-
 #: builtin/ls-files.c:669
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr "si un <fichier> n'est pas dans l'index, traiter cela comme une erreur"
@@ -17946,7 +18427,7 @@ msgstr ""
 msgid "do not print remote URL"
 msgstr "ne pas afficher les URL distantes"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1103
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1131
 msgid "exec"
 msgstr "exécutable"
 
@@ -17980,44 +18461,74 @@ msgstr ""
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr "afficher la réf sous-jacente en plus de l'objet pointé par elle"
 
-#: builtin/ls-tree.c:30
+#: builtin/ls-tree.c:36
 msgid "git ls-tree [<options>] <tree-ish> [<path>...]"
 msgstr "git ls-tree [<options>] <arbre ou apparenté> [<chemin>...]"
 
-#: builtin/ls-tree.c:128
+#: builtin/ls-tree.c:54
+#, c-format
+msgid "could not get object info about '%s'"
+msgstr "impossible d'obtenir l'information d'objet pour '%s'"
+
+#: builtin/ls-tree.c:79
+#, c-format
+msgid "bad ls-tree format: element '%s' does not start with '('"
+msgstr "mauvais format ls-tree : l'élément '%s' ne commence pas par '('"
+
+#: builtin/ls-tree.c:83
+#, c-format
+msgid "bad ls-tree format: element '%s' does not end in ')'"
+msgstr "mauvais format ls-tree : l'élément '%s' ne se termine pas ')'"
+
+#: builtin/ls-tree.c:109
+#, c-format
+msgid "bad ls-tree format: %%%.*s"
+msgstr "mauvais format ls-tree : %%%.*s"
+
+#: builtin/ls-tree.c:336
 msgid "only show trees"
 msgstr "afficher seulement les arbres"
 
-#: builtin/ls-tree.c:130
+#: builtin/ls-tree.c:338
 msgid "recurse into subtrees"
 msgstr "parcourir les sous-arbres"
 
-#: builtin/ls-tree.c:132
+#: builtin/ls-tree.c:340
 msgid "show trees when recursing"
 msgstr "afficher les arbres en les parcourant"
 
-#: builtin/ls-tree.c:135
+#: builtin/ls-tree.c:343
 msgid "terminate entries with NUL byte"
 msgstr "terminer les éléments avec un octet NUL"
 
-#: builtin/ls-tree.c:136
+#: builtin/ls-tree.c:344
 msgid "include object size"
 msgstr "inclure la taille d'objet"
 
-#: builtin/ls-tree.c:138 builtin/ls-tree.c:140
+#: builtin/ls-tree.c:346 builtin/ls-tree.c:348
 msgid "list only filenames"
 msgstr "afficher seulement les noms de fichiers"
 
-#: builtin/ls-tree.c:143
+#: builtin/ls-tree.c:350
+msgid "list only objects"
+msgstr "ne lister que les objets"
+
+#: builtin/ls-tree.c:353
 msgid "use full path names"
 msgstr "utiliser les noms de chemins complets"
 
-#: builtin/ls-tree.c:145
+#: builtin/ls-tree.c:355
 msgid "list entire tree; not just current directory (implies --full-name)"
 msgstr ""
 "afficher l'arbre entier ; pas seulement le répertoire courant (implique --"
 "full-name)"
 
+#: builtin/ls-tree.c:391
+msgid "--format can't be combined with other format-altering options"
+msgstr ""
+"--format ne peut pas être combiné avec d'autres options de modification de "
+"format"
+
 #. TRANSLATORS: keep <> in "<" mail ">" info.
 #: builtin/mailinfo.c:14
 msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
@@ -18067,7 +18578,11 @@ msgstr "action lorsqu'un CR cité est trouvé"
 msgid "use headers in message's body"
 msgstr "utiliser l'entête dans le corps de message"
 
-#: builtin/mailsplit.c:239
+#: builtin/mailsplit.c:227
+msgid "reading patches from stdin/tty..."
+msgstr "lecture les mises à jour depuis l'entrée standard/la console..."
+
+#: builtin/mailsplit.c:242
 #, c-format
 msgid "empty mbox: '%s'"
 msgstr "mbox vide : '%s'"
@@ -18092,23 +18607,23 @@ msgstr "git merge-base --is-ancestor <validation> <validation>"
 msgid "git merge-base --fork-point <ref> [<commit>]"
 msgstr "git merge-base --fork-point <référence> [<validation>]"
 
-#: builtin/merge-base.c:143
+#: builtin/merge-base.c:144
 msgid "output all common ancestors"
 msgstr "afficher tous les ancêtres communs"
 
-#: builtin/merge-base.c:145
+#: builtin/merge-base.c:146
 msgid "find ancestors for a single n-way merge"
 msgstr "trouver les ancêtres pour une fusion simple à n points"
 
-#: builtin/merge-base.c:147
+#: builtin/merge-base.c:148
 msgid "list revs not reachable from others"
 msgstr "afficher les révisions inaccessibles depuis les autres"
 
-#: builtin/merge-base.c:149
+#: builtin/merge-base.c:150
 msgid "is the first one ancestor of the other?"
 msgstr "est le premier ancêtre de l'autre ?"
 
-#: builtin/merge-base.c:151
+#: builtin/merge-base.c:152
 msgid "find where <commit> forked from reflog of <ref>"
 msgstr "trouver où <validation> a divergé du reflog de <référence>"
 
@@ -18258,7 +18773,7 @@ msgid "verify that the named commit has a valid GPG signature"
 msgstr "vérifier que le commit nommé a une signature GPG valide"
 
 #: builtin/merge.c:280 builtin/notes.c:785 builtin/pull.c:172
-#: builtin/rebase.c:1117 builtin/revert.c:114
+#: builtin/rebase.c:1145 builtin/revert.c:114
 msgid "strategy"
 msgstr "stratégie"
 
@@ -18395,74 +18910,74 @@ msgstr ""
 "Les lignes commençant par '%c' seront ignorées, et un message vide\n"
 "abandonne la validation.\n"
 
-#: builtin/merge.c:894
+#: builtin/merge.c:900
 msgid "Empty commit message."
 msgstr "Message de validation vide."
 
-#: builtin/merge.c:909
+#: builtin/merge.c:915
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Merveilleux.\n"
 
-#: builtin/merge.c:970
+#: builtin/merge.c:976
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "La fusion automatique a échoué ; réglez les conflits et validez le "
 "résultat.\n"
 
-#: builtin/merge.c:1009
+#: builtin/merge.c:1015
 msgid "No current branch."
 msgstr "Pas de branche courante."
 
-#: builtin/merge.c:1011
+#: builtin/merge.c:1017
 msgid "No remote for the current branch."
 msgstr "Pas de branche distante pour la branche courante."
 
-#: builtin/merge.c:1013
+#: builtin/merge.c:1019
 msgid "No default upstream defined for the current branch."
 msgstr "Pas de branche amont par défaut définie pour la branche courante."
 
-#: builtin/merge.c:1018
+#: builtin/merge.c:1024
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "Pas de branche de suivi pour %s depuis %s"
 
-#: builtin/merge.c:1075
+#: builtin/merge.c:1081
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Mauvaise valeur '%s' dans l'environnement '%s'"
 
-#: builtin/merge.c:1177
+#: builtin/merge.c:1183
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "pas possible de fusionner ceci dans %s : %s"
 
-#: builtin/merge.c:1211
+#: builtin/merge.c:1217
 msgid "not something we can merge"
 msgstr "pas possible de fusionner ceci"
 
-#: builtin/merge.c:1324
+#: builtin/merge.c:1330
 msgid "--abort expects no arguments"
 msgstr "--abort n'accepte pas d'argument"
 
-#: builtin/merge.c:1328
+#: builtin/merge.c:1334
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "Il n'y a pas de fusion à abandonner (MERGE_HEAD manquant)."
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1352
 msgid "--quit expects no arguments"
 msgstr "--quit n'accepte pas d'argument"
 
-#: builtin/merge.c:1359
+#: builtin/merge.c:1365
 msgid "--continue expects no arguments"
 msgstr "--continue ne supporte aucun argument"
 
-#: builtin/merge.c:1363
+#: builtin/merge.c:1369
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "Il n'y a pas de fusion en cours (MERGE_HEAD manquant)."
 
-#: builtin/merge.c:1379
+#: builtin/merge.c:1385
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -18470,7 +18985,7 @@ msgstr ""
 "Vous n'avez pas terminé votre fusion (MERGE_HEAD existe).\n"
 "Veuillez valider vos modifications avant de pouvoir fusionner."
 
-#: builtin/merge.c:1386
+#: builtin/merge.c:1392
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -18478,87 +18993,83 @@ msgstr ""
 "Vous n'avez pas terminé votre picorage (CHERRY_PICK_HEAD existe).\n"
 "Veuillez valider vos modifications avant de pouvoir fusionner."
 
-#: builtin/merge.c:1389
+#: builtin/merge.c:1395
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "Vous n'avez pas terminé votre picorage (CHERRY_PICK_HEAD existe)."
 
-#: builtin/merge.c:1421
+#: builtin/merge.c:1427
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr ""
 "Pas de validation spécifiée et merge.defaultToUpstream n'est pas défini."
 
-#: builtin/merge.c:1438
+#: builtin/merge.c:1444
 msgid "Squash commit into empty head not supported yet"
 msgstr "La validation compressée vers une tête vide n'est pas encore supportée"
 
-#: builtin/merge.c:1440
+#: builtin/merge.c:1446
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr "Une validation sans avance rapide n'a pas de sens dans une tête vide"
 
-#: builtin/merge.c:1445
+#: builtin/merge.c:1451
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - pas possible de fusionner ceci"
 
-#: builtin/merge.c:1447
+#: builtin/merge.c:1453
 msgid "Can merge only exactly one commit into empty head"
 msgstr ""
 "Possible de fusionner exactement une seule validation dans une tête vide"
 
-#: builtin/merge.c:1534
+#: builtin/merge.c:1540
 msgid "refusing to merge unrelated histories"
 msgstr "refus de fusionner des historiques sans relation"
 
-#: builtin/merge.c:1553
+#: builtin/merge.c:1559
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Mise à jour %s..%s\n"
 
-#: builtin/merge.c:1601
+#: builtin/merge.c:1606
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Essai de fusion vraiment triviale dans l'index...\n"
 
-#: builtin/merge.c:1608
+#: builtin/merge.c:1613
 #, c-format
 msgid "Nope.\n"
 msgstr "Non.\n"
 
-#: builtin/merge.c:1667 builtin/merge.c:1733
+#: builtin/merge.c:1671 builtin/merge.c:1737
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Retour de l'arbre à l'original...\n"
 
-#: builtin/merge.c:1671
+#: builtin/merge.c:1675
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Essai de la stratégie de fusion %s...\n"
 
-#: builtin/merge.c:1723
+#: builtin/merge.c:1727
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Aucune stratégie de fusion n'a pris en charge la fusion.\n"
 
-#: builtin/merge.c:1725
+#: builtin/merge.c:1729
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "La fusion avec la stratégie %s a échoué.\n"
 
-#: builtin/merge.c:1735
+#: builtin/merge.c:1739
 #, c-format
 msgid "Using the %s strategy to prepare resolving by hand.\n"
 msgstr "Utilisation de %s pour préparer la résolution à la main.\n"
 
-#: builtin/merge.c:1749
+#: builtin/merge.c:1753
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
 "La fusion automatique a réussi ; stoppée avant la validation comme demandé\n"
 
-#: builtin/mktag.c:10
-msgid "git mktag"
-msgstr "git mktag"
-
 #: builtin/mktag.c:27
 #, c-format
 msgid "warning: tag input does not pass fsck: %s"
@@ -18584,22 +19095,18 @@ msgstr "impossible de lire l'objet étiqueté '%s'"
 msgid "object '%s' tagged as '%s', but is a '%s' type"
 msgstr "l'objet '%s' étiqueté comme '%s', mais est de type '%s'"
 
-#: builtin/mktag.c:98
+#: builtin/mktag.c:97
 msgid "tag on stdin did not pass our strict fsck check"
 msgstr "l'étiquette sur stdin n'a pas passé le test strict fsck"
 
-#: builtin/mktag.c:101
+#: builtin/mktag.c:100
 msgid "tag on stdin did not refer to a valid object"
 msgstr "l'étiquette sur stdin ne pointe pas sur un objet valide"
 
-#: builtin/mktag.c:104 builtin/tag.c:242
+#: builtin/mktag.c:103 builtin/tag.c:243
 msgid "unable to write tag file"
 msgstr "impossible d'écrire le fichier d'étiquettes"
 
-#: builtin/mktree.c:66
-msgid "git mktree [-z] [--missing] [--batch]"
-msgstr "git mktree [-z] [--missing] [--batch]"
-
 #: builtin/mktree.c:154
 msgid "input is NUL terminated"
 msgstr "l'entrée se termine par NUL"
@@ -18759,54 +19266,58 @@ msgstr "%s, source=%s, destination=%s"
 msgid "Renaming %s to %s\n"
 msgstr "Renommage de %s en %s\n"
 
-#: builtin/mv.c:314 builtin/remote.c:790 builtin/repack.c:857
+#: builtin/mv.c:314 builtin/remote.c:812 builtin/repack.c:861
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "le renommage de '%s' a échoué"
 
-#: builtin/name-rev.c:474
+#: builtin/name-rev.c:524
 msgid "git name-rev [<options>] <commit>..."
 msgstr "git name-rev [<options>] <validation>..."
 
-#: builtin/name-rev.c:475
+#: builtin/name-rev.c:525
 msgid "git name-rev [<options>] --all"
 msgstr "git name-rev [<options>] --all"
 
-#: builtin/name-rev.c:476
-msgid "git name-rev [<options>] --stdin"
-msgstr "git name-rev [<options>] --stdin"
+#: builtin/name-rev.c:526
+msgid "git name-rev [<options>] --annotate-stdin"
+msgstr "git name-rev [<options>] --annotate-stdin"
 
-#: builtin/name-rev.c:533
+#: builtin/name-rev.c:583
 msgid "print only ref-based names (no object names)"
 msgstr ""
 "afficher seulement les noms basés sur des références (pas de nom d'objet)"
 
-#: builtin/name-rev.c:534
+#: builtin/name-rev.c:584
 msgid "only use tags to name the commits"
 msgstr "utiliser seulement les étiquettes pour nommer les validations"
 
-#: builtin/name-rev.c:536
+#: builtin/name-rev.c:586
 msgid "only use refs matching <pattern>"
 msgstr "utiliser seulement les références correspondant à <motif>"
 
-#: builtin/name-rev.c:538
+#: builtin/name-rev.c:588
 msgid "ignore refs matching <pattern>"
 msgstr "ignorer les références correspondant à <motif>"
 
-#: builtin/name-rev.c:540
+#: builtin/name-rev.c:590
 msgid "list all commits reachable from all refs"
 msgstr ""
 "afficher toutes les validations accessibles depuis toutes les références"
 
-#: builtin/name-rev.c:541
-msgid "read from stdin"
-msgstr "lire depuis l'entrée standard"
+#: builtin/name-rev.c:591
+msgid "deprecated: use annotate-stdin instead"
+msgstr "obsolète : utilisez annotate-stdin à la place"
+
+#: builtin/name-rev.c:592
+msgid "annotate text from stdin"
+msgstr "annoter le texte depuis l'entrée standard"
 
-#: builtin/name-rev.c:542
+#: builtin/name-rev.c:593
 msgid "allow to print `undefined` names (default)"
 msgstr "autoriser l'affichage des noms `non définis` (par défaut)"
 
-#: builtin/name-rev.c:548
+#: builtin/name-rev.c:599
 msgid "dereference tags in the input (internal use)"
 msgstr "déréférencer les étiquettes en entrée (usage interne)"
 
@@ -18850,14 +19361,6 @@ msgstr ""
 "git notes [--ref <références-notes>] merge [-v | -q] [-s <stratégie> ] "
 "<références-notes>"
 
-#: builtin/notes.c:35
-msgid "git notes merge --commit [-v | -q]"
-msgstr "git notes merge --commit [-v | -q]"
-
-#: builtin/notes.c:36
-msgid "git notes merge --abort [-v | -q]"
-msgstr "git notes merge --abort [-v | -q]"
-
 #: builtin/notes.c:37
 msgid "git notes [--ref <notes-ref>] remove [<object>...]"
 msgstr "git notes [--ref <références-notes>] remove [<objet>...]"
@@ -18918,10 +19421,6 @@ msgstr "git notes remove [<objet>]"
 msgid "git notes prune [<options>]"
 msgstr "git notes prune [<options>]"
 
-#: builtin/notes.c:92
-msgid "git notes get-ref"
-msgstr "git notes get-ref"
-
 #: builtin/notes.c:97
 msgid "Write/edit the notes for the following object:"
 msgstr "Écrire/éditer les notes pour l'objet suivant :"
@@ -18953,7 +19452,7 @@ msgstr "impossible d'écrire l'objet note"
 msgid "the note contents have been left in %s"
 msgstr "le contenu de la note a été laissé dans %s"
 
-#: builtin/notes.c:240 builtin/tag.c:581
+#: builtin/notes.c:240 builtin/tag.c:582
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "impossible d'ouvrir ou lire '%s'"
@@ -18993,13 +19492,6 @@ msgstr "impossible de copier les notes de '%s' vers '%s'"
 msgid "refusing to %s notes in %s (outside of refs/notes/)"
 msgstr "refus de faire %s sur des notes dans %s (hors de refs/notes/)"
 
-#: builtin/notes.c:374 builtin/notes.c:429 builtin/notes.c:507
-#: builtin/notes.c:519 builtin/notes.c:596 builtin/notes.c:663
-#: builtin/notes.c:813 builtin/notes.c:965 builtin/notes.c:987
-#: builtin/prune-packed.c:25 builtin/receive-pack.c:2487 builtin/tag.c:591
-msgid "too many arguments"
-msgstr "trop d'arguments"
-
 #: builtin/notes.c:387 builtin/notes.c:676
 #, c-format
 msgid "no note found for object %s."
@@ -19188,7 +19680,7 @@ msgstr ""
 "validez le résultat avec 'git notes merges --commit', ou abandonnez la "
 "fusion avec 'git notes merge --abort'.\n"
 
-#: builtin/notes.c:899 builtin/tag.c:594
+#: builtin/notes.c:899 builtin/tag.c:595
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "Impossible de résoudre '%s' comme une référence valide."
@@ -19207,7 +19699,7 @@ msgstr ""
 msgid "read object names from the standard input"
 msgstr "lire les noms d'objet depuis l'entrée standard"
 
-#: builtin/notes.c:956 builtin/prune.c:144 builtin/worktree.c:147
+#: builtin/notes.c:956 builtin/prune.c:144 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr "ne pas supprimer, afficher seulement"
 
@@ -19223,7 +19715,7 @@ msgstr "références-notes"
 msgid "use notes from <notes-ref>"
 msgstr "utiliser les notes depuis <références-notes>"
 
-#: builtin/notes.c:1036 builtin/stash.c:1818
+#: builtin/notes.c:1036 builtin/stash.c:1802
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "sous-commande inconnue : %s"
@@ -19242,7 +19734,7 @@ msgstr ""
 "git pack-objects [options...] base-name [< <liste-références> | < <liste-"
 "objets>]"
 
-#: builtin/pack-objects.c:572
+#: builtin/pack-objects.c:570
 #, c-format
 msgid ""
 "write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
@@ -19251,115 +19743,115 @@ msgstr ""
 "write_reuse_object : impossible de localiser %s, attendu à l'offset "
 "%<PRIuMAX> dans le paquet %s"
 
-#: builtin/pack-objects.c:580
+#: builtin/pack-objects.c:578
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr "mauvais CRC d'objet empaqueté pour %s"
 
-#: builtin/pack-objects.c:591
+#: builtin/pack-objects.c:589
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr "objet empaqueté corrompu pour %s"
 
-#: builtin/pack-objects.c:722
+#: builtin/pack-objects.c:720
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr "delta récursif détecté pour l'objet %s"
 
-#: builtin/pack-objects.c:941
+#: builtin/pack-objects.c:939
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr "%u objets commandés, %<PRIu32> attendus"
 
-#: builtin/pack-objects.c:1036
+#: builtin/pack-objects.c:1034
 #, c-format
 msgid "expected object at offset %<PRIuMAX> in pack %s"
 msgstr "objet attendu à l'offset %<PRIuMAX> dans le paquet %s"
 
-#: builtin/pack-objects.c:1160
+#: builtin/pack-objects.c:1158
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr ""
 "désactivation de l'écriture en bitmap, les fichiers paquets sont scindés à "
 "cause de pack.packSizeLimit"
 
-#: builtin/pack-objects.c:1173
+#: builtin/pack-objects.c:1171
 msgid "Writing objects"
 msgstr "Écriture des objets"
 
-#: builtin/pack-objects.c:1235 builtin/update-index.c:90
+#: builtin/pack-objects.c:1243 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "échec du stat de %s"
 
-#: builtin/pack-objects.c:1268
+#: builtin/pack-objects.c:1276
 msgid "failed to write bitmap index"
 msgstr "écrire un index de bitmap"
 
-#: builtin/pack-objects.c:1294
+#: builtin/pack-objects.c:1302
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "%<PRIu32> objets écrits, %<PRIu32> attendus"
 
-#: builtin/pack-objects.c:1536
+#: builtin/pack-objects.c:1544
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr ""
 "désactivation de l'écriture en bitmap car certains objets ne sont pas "
 "compressés"
 
-#: builtin/pack-objects.c:1984
+#: builtin/pack-objects.c:1992
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "dépassement de décalage de base de delta pour %s"
 
-#: builtin/pack-objects.c:1993
+#: builtin/pack-objects.c:2001
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "décalage de base de delta est hors limite pour %s"
 
-#: builtin/pack-objects.c:2274
+#: builtin/pack-objects.c:2282
 msgid "Counting objects"
 msgstr "Décompte des objets"
 
-#: builtin/pack-objects.c:2439
+#: builtin/pack-objects.c:2447
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "impossible d'analyser l'entête d'objet de %s"
 
-#: builtin/pack-objects.c:2509 builtin/pack-objects.c:2525
-#: builtin/pack-objects.c:2535
+#: builtin/pack-objects.c:2517 builtin/pack-objects.c:2533
+#: builtin/pack-objects.c:2543
 #, c-format
 msgid "object %s cannot be read"
 msgstr "l'objet %s ne peut être lu"
 
-#: builtin/pack-objects.c:2512 builtin/pack-objects.c:2539
+#: builtin/pack-objects.c:2520 builtin/pack-objects.c:2547
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr ""
 "objet %s longueur de l'objet inconsistante (%<PRIuMAX> contre %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2549
+#: builtin/pack-objects.c:2557
 msgid "suboptimal pack - out of memory"
 msgstr "paquet sous-optimal - mémoire insuffisante"
 
-#: builtin/pack-objects.c:2864
+#: builtin/pack-objects.c:2872
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Compression par delta en utilisant jusqu'à %d fils d'exécution"
 
-#: builtin/pack-objects.c:3003
+#: builtin/pack-objects.c:3011
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "impossible d'empaqueter les objets joignables depuis l'étiquette %s"
 
-#: builtin/pack-objects.c:3089
+#: builtin/pack-objects.c:3097
 msgid "Compressing objects"
 msgstr "Compression des objets"
 
-#: builtin/pack-objects.c:3095
+#: builtin/pack-objects.c:3103
 msgid "inconsistency with delta count"
 msgstr "inconsistance dans le compte de delta"
 
-#: builtin/pack-objects.c:3174
+#: builtin/pack-objects.c:3182
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
@@ -19368,7 +19860,7 @@ msgstr ""
 "la valeur de uploadpack.blobpackfileuri doit être de la forme '<empreinte-d-"
 "objet> <empreinte-de-pack> <uri>' ('%s' reçu)"
 
-#: builtin/pack-objects.c:3177
+#: builtin/pack-objects.c:3185
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
@@ -19376,18 +19868,18 @@ msgstr ""
 "l'objet est déjà configuré dans un autre uploadpack.blobpackfileuri ('%s' "
 "reçu)"
 
-#: builtin/pack-objects.c:3212
+#: builtin/pack-objects.c:3220
 #, c-format
 msgid "could not get type of object %s in pack %s"
 msgstr "impossible d'obtenir le type de l'objet %s dans le paquet %s"
 
-#: builtin/pack-objects.c:3340 builtin/pack-objects.c:3351
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3348 builtin/pack-objects.c:3359
+#: builtin/pack-objects.c:3373
 #, c-format
 msgid "could not find pack '%s'"
 msgstr "impossible de trouver le paquet '%s'"
 
-#: builtin/pack-objects.c:3408
+#: builtin/pack-objects.c:3416
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -19396,7 +19888,7 @@ msgstr ""
 "ID d'objet de bord attendu, reçu des données illisibles :\n"
 "%s"
 
-#: builtin/pack-objects.c:3414
+#: builtin/pack-objects.c:3422
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -19405,252 +19897,248 @@ msgstr ""
 "ID d'objet attendu, reçu des données illisibles :\n"
 "%s"
 
-#: builtin/pack-objects.c:3507
-msgid "invalid value for --missing"
-msgstr "valeur invalide pour --missing"
-
-#: builtin/pack-objects.c:3532 builtin/pack-objects.c:3619
+#: builtin/pack-objects.c:3540 builtin/pack-objects.c:3627
 msgid "cannot open pack index"
 msgstr "impossible d'ouvrir l'index de paquet"
 
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3549
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "l'objet libre à %s n'a pas pu être examiné"
 
-#: builtin/pack-objects.c:3627
+#: builtin/pack-objects.c:3635
 msgid "unable to force loose object"
 msgstr "impossible de forcer l'objet libre"
 
-#: builtin/pack-objects.c:3757
+#: builtin/pack-objects.c:3763
 #, c-format
 msgid "not a rev '%s'"
 msgstr "'%s' n'est pas une révision"
 
-#: builtin/pack-objects.c:3760 builtin/rev-parse.c:1061
+#: builtin/pack-objects.c:3766 builtin/rev-parse.c:1061
 #, c-format
 msgid "bad revision '%s'"
 msgstr "mauvaise révision '%s'"
 
-#: builtin/pack-objects.c:3788
+#: builtin/pack-objects.c:3794
 msgid "unable to add recent objects"
 msgstr "impossible d'ajouter les objets récents"
 
-#: builtin/pack-objects.c:3841
+#: builtin/pack-objects.c:3847
 #, c-format
 msgid "unsupported index version %s"
 msgstr "version d'index non supportée %s"
 
-#: builtin/pack-objects.c:3845
+#: builtin/pack-objects.c:3851
 #, c-format
 msgid "bad index version '%s'"
 msgstr "mauvaise version d'index '%s'"
 
-#: builtin/pack-objects.c:3884
+#: builtin/pack-objects.c:3907
 msgid "<version>[,<offset>]"
 msgstr "<version>[,<décalage>]"
 
-#: builtin/pack-objects.c:3885
+#: builtin/pack-objects.c:3908
 msgid "write the pack index file in the specified idx format version"
 msgstr ""
 "écrire le fichier d'index du paquet dans le format d'index de version "
 "spécifié"
 
-#: builtin/pack-objects.c:3888
+#: builtin/pack-objects.c:3911
 msgid "maximum size of each output pack file"
 msgstr "taille maximum de chaque fichier paquet en sortie"
 
-#: builtin/pack-objects.c:3890
+#: builtin/pack-objects.c:3913
 msgid "ignore borrowed objects from alternate object store"
 msgstr "ignorer les objets empruntés à un autre magasin d'objets"
 
-#: builtin/pack-objects.c:3892
+#: builtin/pack-objects.c:3915
 msgid "ignore packed objects"
 msgstr "ignorer les objets empaquetés"
 
-#: builtin/pack-objects.c:3894
+#: builtin/pack-objects.c:3917
 msgid "limit pack window by objects"
 msgstr "limiter la fenêtre d'empaquetage par objets"
 
-#: builtin/pack-objects.c:3896
+#: builtin/pack-objects.c:3919
 msgid "limit pack window by memory in addition to object limit"
 msgstr ""
 "limiter la fenêtre d'empaquetage par mémoire en plus de la limite d'objets"
 
-#: builtin/pack-objects.c:3898
+#: builtin/pack-objects.c:3921
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr ""
 "longueur maximum de la chaîne de delta autorisée dans le paquet résultant"
 
-#: builtin/pack-objects.c:3900
+#: builtin/pack-objects.c:3923
 msgid "reuse existing deltas"
 msgstr "réutiliser les deltas existants"
 
-#: builtin/pack-objects.c:3902
+#: builtin/pack-objects.c:3925
 msgid "reuse existing objects"
 msgstr "réutiliser les objets existants"
 
-#: builtin/pack-objects.c:3904
+#: builtin/pack-objects.c:3927
 msgid "use OFS_DELTA objects"
 msgstr "utiliser les objets OFS_DELTA"
 
-#: builtin/pack-objects.c:3906
+#: builtin/pack-objects.c:3929
 msgid "use threads when searching for best delta matches"
 msgstr ""
 "utiliser des fils lors de la recherche pour une meilleure correspondance des "
 "deltas"
 
-#: builtin/pack-objects.c:3908
+#: builtin/pack-objects.c:3931
 msgid "do not create an empty pack output"
 msgstr "ne pas créer un paquet vide"
 
-#: builtin/pack-objects.c:3910
+#: builtin/pack-objects.c:3933
 msgid "read revision arguments from standard input"
 msgstr "lire les paramètres de révision depuis l'entrée standard"
 
-#: builtin/pack-objects.c:3912
+#: builtin/pack-objects.c:3935
 msgid "limit the objects to those that are not yet packed"
 msgstr "limiter les objets à ceux qui ne sont pas encore empaquetés"
 
-#: builtin/pack-objects.c:3915
+#: builtin/pack-objects.c:3938
 msgid "include objects reachable from any reference"
 msgstr "inclure les objets accessibles depuis toute référence"
 
-#: builtin/pack-objects.c:3918
+#: builtin/pack-objects.c:3941
 msgid "include objects referred by reflog entries"
 msgstr "inclure les objets référencés par les éléments de reflog"
 
-#: builtin/pack-objects.c:3921
+#: builtin/pack-objects.c:3944
 msgid "include objects referred to by the index"
 msgstr "inclure les objets référencés par l'index"
 
-#: builtin/pack-objects.c:3924
+#: builtin/pack-objects.c:3947
 msgid "read packs from stdin"
 msgstr "lire les paquets depuis l'entrée standard"
 
-#: builtin/pack-objects.c:3926
+#: builtin/pack-objects.c:3949
 msgid "output pack to stdout"
 msgstr "afficher l'empaquetage sur la sortie standard"
 
-#: builtin/pack-objects.c:3928
+#: builtin/pack-objects.c:3951
 msgid "include tag objects that refer to objects to be packed"
 msgstr "inclure les objets d'étiquettes qui réfèrent à des objets à empaqueter"
 
-#: builtin/pack-objects.c:3930
+#: builtin/pack-objects.c:3953
 msgid "keep unreachable objects"
 msgstr "garder les objets inaccessibles"
 
-#: builtin/pack-objects.c:3932
+#: builtin/pack-objects.c:3955
 msgid "pack loose unreachable objects"
 msgstr "empaqueter les objets inaccessibles détachés"
 
-#: builtin/pack-objects.c:3934
+#: builtin/pack-objects.c:3957
 msgid "unpack unreachable objects newer than <time>"
 msgstr "dépaqueter les objets inaccessibles plus récents que <heure>"
 
-#: builtin/pack-objects.c:3937
+#: builtin/pack-objects.c:3960
 msgid "use the sparse reachability algorithm"
 msgstr "utiliser l'algorithme de joignabilité creuse"
 
-#: builtin/pack-objects.c:3939
+#: builtin/pack-objects.c:3962
 msgid "create thin packs"
 msgstr "créer des paquets légers"
 
-#: builtin/pack-objects.c:3941
+#: builtin/pack-objects.c:3964
 msgid "create packs suitable for shallow fetches"
 msgstr "créer des paquets permettant des récupérations superficielles"
 
-#: builtin/pack-objects.c:3943
+#: builtin/pack-objects.c:3966
 msgid "ignore packs that have companion .keep file"
 msgstr "ignorer les paquets qui ont un fichier .keep"
 
-#: builtin/pack-objects.c:3945
+#: builtin/pack-objects.c:3968
 msgid "ignore this pack"
 msgstr "ignorer ce paquet"
 
-#: builtin/pack-objects.c:3947
+#: builtin/pack-objects.c:3970
 msgid "pack compression level"
 msgstr "niveau de compression du paquet"
 
-#: builtin/pack-objects.c:3949
+#: builtin/pack-objects.c:3972
 msgid "do not hide commits by grafts"
 msgstr "ne pas cacher les validations par greffes"
 
-#: builtin/pack-objects.c:3951
+#: builtin/pack-objects.c:3974
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr ""
 "utiliser un index en bitmap si disponible pour accélerer le décompte des "
 "objets"
 
-#: builtin/pack-objects.c:3953
+#: builtin/pack-objects.c:3976
 msgid "write a bitmap index together with the pack index"
 msgstr "écrire un index en bitmap associé à l'index de paquet"
 
-#: builtin/pack-objects.c:3957
+#: builtin/pack-objects.c:3980
 msgid "write a bitmap index if possible"
 msgstr "écrire un index de bitmap si possible"
 
-#: builtin/pack-objects.c:3961
+#: builtin/pack-objects.c:3984
 msgid "handling for missing objects"
 msgstr "gestion des objets manquants"
 
-#: builtin/pack-objects.c:3964
+#: builtin/pack-objects.c:3987
 msgid "do not pack objects in promisor packfiles"
 msgstr "ne pas empaqueter les objets dans les fichiers paquets prometteurs"
 
-#: builtin/pack-objects.c:3966
+#: builtin/pack-objects.c:3989
 msgid "respect islands during delta compression"
 msgstr "respecter les îlots pendant la compression des deltas"
 
-#: builtin/pack-objects.c:3968
+#: builtin/pack-objects.c:3991
 msgid "protocol"
 msgstr "protocole"
 
-#: builtin/pack-objects.c:3969
+#: builtin/pack-objects.c:3992
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr "exclure tout uploadpack.blobpackfileuri configuré avec ce protocole"
 
-#: builtin/pack-objects.c:4002
+#: builtin/pack-objects.c:4027
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "la profondeur %d de chaîne de delta est trop grande, forcée à %d"
 
-#: builtin/pack-objects.c:4007
+#: builtin/pack-objects.c:4032
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "pack.deltaCacheLimit est trop grand, forcé à %d"
 
-#: builtin/pack-objects.c:4063
+#: builtin/pack-objects.c:4088
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 "--max-pack-size ne peut pas être utilisé pour construire un paquet à "
 "transférer"
 
-#: builtin/pack-objects.c:4065
+#: builtin/pack-objects.c:4090
 msgid "minimum pack size limit is 1 MiB"
 msgstr "la taille limite minimale d'un paquet est 1 MiB"
 
-#: builtin/pack-objects.c:4070
+#: builtin/pack-objects.c:4095
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "--thin ne peut pas être utilisé pour construire un paquet indexable"
 
-#: builtin/pack-objects.c:4079
+#: builtin/pack-objects.c:4104
 msgid "cannot use --filter without --stdout"
 msgstr "impossible d'utiliser --filter sans --stdout"
 
-#: builtin/pack-objects.c:4081
+#: builtin/pack-objects.c:4106
 msgid "cannot use --filter with --stdin-packs"
 msgstr "impossible d'utiliser --filter avec --stdin-packs"
 
-#: builtin/pack-objects.c:4085
+#: builtin/pack-objects.c:4110
 msgid "cannot use internal rev list with --stdin-packs"
 msgstr "impossible d'utiliser un liste interne de révisions avec --stdin-packs"
 
-#: builtin/pack-objects.c:4144
+#: builtin/pack-objects.c:4169
 msgid "Enumerating objects"
 msgstr "Énumération des objets"
 
-#: builtin/pack-objects.c:4180
+#: builtin/pack-objects.c:4210
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -19685,10 +20173,6 @@ msgstr "empaqueter tout"
 msgid "prune loose refs (default)"
 msgstr "éliminer les références perdues (défaut)"
 
-#: builtin/prune-packed.c:6
-msgid "git prune-packed [-n | --dry-run] [-q | --quiet]"
-msgstr "git prune-packed [-n | --dry-run] [-q | --quiet]"
-
 #: builtin/prune.c:14
 msgid "git prune [-n] [-v] [--progress] [--expire <time>] [--] [<head>...]"
 msgstr "git prune [-n] [-v] [--progress] [--expire <heure>] [--] [<head>…]"
@@ -19709,11 +20193,6 @@ msgstr "limiter la traversée aux objets hors des fichiers paquets prometteurs"
 msgid "cannot prune in a precious-objects repo"
 msgstr "impossible de nettoyer dans un dépôt d'objets précieux"
 
-#: builtin/pull.c:45 builtin/pull.c:47
-#, c-format
-msgid "Invalid value for %s: %s"
-msgstr "Valeur invalide pour %s : %s"
-
 #: builtin/pull.c:67
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
 msgstr "git pull [<options>] [<dépôt> [<spécification-de-référence>...]]"
@@ -19738,7 +20217,7 @@ msgstr "autoriser l'avance rapide"
 msgid "control use of pre-merge-commit and commit-msg hooks"
 msgstr "contrôler l'utilisation des crochets pre-merge-commit et commit-msg"
 
-#: builtin/pull.c:171 parse-options.h:340
+#: builtin/pull.c:171 parse-options.h:371
 msgid "automatically stash/stash pop before and after"
 msgstr "remiser et réappliquer automatiquement avant et après"
 
@@ -19754,11 +20233,6 @@ msgstr "forcer l'écrasement de la branche locale"
 msgid "number of submodules pulled in parallel"
 msgstr "nombre de sous-modules tirés en parallèle"
 
-#: builtin/pull.c:321
-#, c-format
-msgid "Invalid value for pull.ff: %s"
-msgstr "Valeur invalide pour pull.ff : %s"
-
 #: builtin/pull.c:449
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
@@ -19794,7 +20268,7 @@ msgstr ""
 "configuration\n"
 "pour la branche actuelle, vous devez spécifier la branche avec la commande."
 
-#: builtin/pull.c:460 builtin/rebase.c:951
+#: builtin/pull.c:460 builtin/rebase.c:978
 msgid "You are not currently on a branch."
 msgstr "Vous n'êtes actuellement sur aucune branche."
 
@@ -19811,16 +20285,16 @@ msgid "See git-pull(1) for details."
 msgstr "Référez-vous à git-pull(1) pour de plus amples détails."
 
 #: builtin/pull.c:467 builtin/pull.c:473 builtin/pull.c:482
-#: builtin/rebase.c:957
+#: builtin/rebase.c:984
 msgid "<remote>"
 msgstr "<distant>"
 
 #: builtin/pull.c:467 builtin/pull.c:482 builtin/pull.c:487
-#: contrib/scalar/scalar.c:375
+#: contrib/scalar/scalar.c:374
 msgid "<branch>"
 msgstr "<branche>"
 
-#: builtin/pull.c:475 builtin/rebase.c:949
+#: builtin/pull.c:475 builtin/rebase.c:976
 msgid "There is no tracking information for the current branch."
 msgstr "Pas d'information de suivi distant pour la branche actuelle."
 
@@ -19879,21 +20353,21 @@ msgstr ""
 "passer --rebase, --no-rebase ou --ff-only sur la ligne de commande pour\n"
 "remplacer à l'invocation la valeur par défaut configurée.\n"
 
-#: builtin/pull.c:1046
+#: builtin/pull.c:1047
 msgid "Updating an unborn branch with changes added to the index."
 msgstr ""
 "Mise à jour d'une branche non encore créée avec les changements ajoutés dans "
 "l'index."
 
-#: builtin/pull.c:1050
+#: builtin/pull.c:1051
 msgid "pull with rebase"
 msgstr "tirer avec un rebasage"
 
-#: builtin/pull.c:1051
+#: builtin/pull.c:1052
 msgid "please commit or stash them."
 msgstr "veuillez les valider ou les remiser."
 
-#: builtin/pull.c:1076
+#: builtin/pull.c:1077
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -19904,7 +20378,7 @@ msgstr ""
 "avance rapide de votre copie de travail\n"
 "depuis le commit %s."
 
-#: builtin/pull.c:1082
+#: builtin/pull.c:1083
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -19921,23 +20395,23 @@ msgstr ""
 "$ git reset --hard\n"
 "pour régénérer."
 
-#: builtin/pull.c:1097
+#: builtin/pull.c:1098
 msgid "Cannot merge multiple branches into empty head."
 msgstr "Impossible de fusionner de multiples branches sur une tête vide."
 
-#: builtin/pull.c:1102
+#: builtin/pull.c:1103
 msgid "Cannot rebase onto multiple branches."
 msgstr "Impossible de rebaser sur de multiples branches."
 
-#: builtin/pull.c:1104
+#: builtin/pull.c:1105
 msgid "Cannot fast-forward to multiple branches."
 msgstr "Impossible d'aller en avance rapide sur de multiples branches."
 
-#: builtin/pull.c:1119
+#: builtin/pull.c:1120
 msgid "Need to specify how to reconcile divergent branches."
 msgstr "Besoin de spécifier comment réconcilier des branches divergentes."
 
-#: builtin/pull.c:1133
+#: builtin/pull.c:1134
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 "impossible de rebaser avec des modifications de sous-modules enregistrées "
@@ -20130,7 +20604,7 @@ msgstr "Poussée vers %s\n"
 msgid "failed to push some refs to '%s'"
 msgstr "impossible de pousser des références vers '%s'"
 
-#: builtin/push.c:544 builtin/submodule--helper.c:3259
+#: builtin/push.c:544 builtin/submodule--helper.c:3377
 msgid "repository"
 msgstr "dépôt"
 
@@ -20375,11 +20849,11 @@ msgstr "déboguer unpack-trees"
 msgid "suppress feedback messages"
 msgstr "supprimer les messages d'information de suivi"
 
-#: builtin/read-tree.c:183
+#: builtin/read-tree.c:190
 msgid "You need to resolve your current index first"
 msgstr "Vous devez d'abord résoudre votre index courant"
 
-#: builtin/rebase.c:35
+#: builtin/rebase.c:36
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
 "[<upstream> [<branch>]]"
@@ -20387,55 +20861,51 @@ msgstr ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <nouvelle-base> | --keep-"
 "base] [<amont> [<branche>]]"
 
-#: builtin/rebase.c:37
+#: builtin/rebase.c:38
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]"
 msgstr ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <nouvelle-base>] --root "
 "[<branche>]"
 
-#: builtin/rebase.c:39
-msgid "git rebase --continue | --abort | --skip | --edit-todo"
-msgstr "git rebase --continue | --abort | --skip | --edit-todo"
-
-#: builtin/rebase.c:230
+#: builtin/rebase.c:231
 #, c-format
 msgid "could not create temporary %s"
 msgstr "impossible de créer un fichier temporaire %s"
 
-#: builtin/rebase.c:236
+#: builtin/rebase.c:237
 msgid "could not mark as interactive"
 msgstr "impossible de marquer comme interactif"
 
-#: builtin/rebase.c:289
+#: builtin/rebase.c:290
 msgid "could not generate todo list"
 msgstr "impossible de générer la liste à-faire"
 
-#: builtin/rebase.c:331
+#: builtin/rebase.c:332
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "un commit de base doit être fourni avec --upstream ou --onto"
 
-#: builtin/rebase.c:390
+#: builtin/rebase.c:391
 #, c-format
 msgid "%s requires the merge backend"
 msgstr "%s requiert un moteur de fusion"
 
-#: builtin/rebase.c:432
+#: builtin/rebase.c:433
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "impossible d'accéder 'onto' : '%s'"
 
-#: builtin/rebase.c:449
+#: builtin/rebase.c:450
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "orig-head invalide : '%s'"
 
-#: builtin/rebase.c:474
+#: builtin/rebase.c:475
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "allow_rerere_autoupdate invalide ignoré : '%s'"
 
-#: builtin/rebase.c:597
+#: builtin/rebase.c:600
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -20449,7 +20919,7 @@ msgstr ""
 "arrêter\n"
 "et revenir à l'état antérieur à la commande, lancez \"git rebase --abort\"."
 
-#: builtin/rebase.c:680
+#: builtin/rebase.c:685
 #, c-format
 msgid ""
 "\n"
@@ -20468,16 +20938,21 @@ msgstr ""
 "\n"
 "Résultat, git ne peut pas les rebaser."
 
-#: builtin/rebase.c:925
+#: builtin/rebase.c:836
+#, c-format
+msgid "could not switch to %s"
+msgstr "impossible de basculer vers %s"
+
+#: builtin/rebase.c:952
 #, c-format
 msgid ""
-"unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
-"\"."
+"unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and "
+"\"ask\"."
 msgstr ""
 "type vide non connu '%s' ; les valeurs valides sont \"drop\" (abandonner), "
 "\"keep\" (garder) et \"ask\" (demander)."
 
-#: builtin/rebase.c:943
+#: builtin/rebase.c:970
 #, c-format
 msgid ""
 "%s\n"
@@ -20494,7 +20969,7 @@ msgstr ""
 "    git rebase '<branche>'\n"
 "\n"
 
-#: builtin/rebase.c:959
+#: builtin/rebase.c:986
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -20508,183 +20983,183 @@ msgstr ""
 "    git branch --set-upstream-to=%s/<branche> %s\n"
 "\n"
 
-#: builtin/rebase.c:989
+#: builtin/rebase.c:1016
 msgid "exec commands cannot contain newlines"
 msgstr "les commandes exec ne peut pas contenir de retour à la ligne"
 
-#: builtin/rebase.c:993
+#: builtin/rebase.c:1020
 msgid "empty exec command"
 msgstr "commande exec vide"
 
-#: builtin/rebase.c:1023
+#: builtin/rebase.c:1051
 msgid "rebase onto given branch instead of upstream"
 msgstr "rebaser sur la branche %s au lieu de la branche amont"
 
-#: builtin/rebase.c:1025
+#: builtin/rebase.c:1053
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr ""
 "utiliser la base de fusion de l'amont et la branche comme base actuelle"
 
-#: builtin/rebase.c:1027
+#: builtin/rebase.c:1055
 msgid "allow pre-rebase hook to run"
 msgstr "permettre le lancement du crochet pre-rebase"
 
-#: builtin/rebase.c:1029
+#: builtin/rebase.c:1057
 msgid "be quiet. implies --no-stat"
 msgstr "être silencieux. implique --no-stat"
 
-#: builtin/rebase.c:1032
+#: builtin/rebase.c:1060
 msgid "display a diffstat of what changed upstream"
 msgstr "afficher un diffstat de ce qui a changé en amont"
 
-#: builtin/rebase.c:1035
+#: builtin/rebase.c:1063
 msgid "do not show diffstat of what changed upstream"
 msgstr "ne pas afficher un diffstat de ce qui a changé en amont"
 
-#: builtin/rebase.c:1038
+#: builtin/rebase.c:1066
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "ajouter une ligne Signed-off-by à chaque message de validation"
 
-#: builtin/rebase.c:1041
+#: builtin/rebase.c:1069
 msgid "make committer date match author date"
 msgstr "mettre la date de validateur à la date auteur"
 
-#: builtin/rebase.c:1043
+#: builtin/rebase.c:1071
 msgid "ignore author date and use current date"
 msgstr "ignorer la date d'auteur et utilise la date actuelle"
 
-#: builtin/rebase.c:1045
+#: builtin/rebase.c:1073
 msgid "synonym of --reset-author-date"
 msgstr "synonyme pour --reset-author-date"
 
-#: builtin/rebase.c:1047 builtin/rebase.c:1051
+#: builtin/rebase.c:1075 builtin/rebase.c:1079
 msgid "passed to 'git apply'"
 msgstr "passé jusqu'à git apply"
 
-#: builtin/rebase.c:1049
+#: builtin/rebase.c:1077
 msgid "ignore changes in whitespace"
 msgstr "ignorer des modifications d'espaces"
 
-#: builtin/rebase.c:1053 builtin/rebase.c:1056
+#: builtin/rebase.c:1081 builtin/rebase.c:1084
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "picorer tous les commits, même sans modifiant"
 
-#: builtin/rebase.c:1058
+#: builtin/rebase.c:1086
 msgid "continue"
 msgstr "continuer"
 
-#: builtin/rebase.c:1061
+#: builtin/rebase.c:1089
 msgid "skip current patch and continue"
 msgstr "sauter le patch courant et continuer"
 
-#: builtin/rebase.c:1063
+#: builtin/rebase.c:1091
 msgid "abort and check out the original branch"
 msgstr "abandonner et extraire la branche d'origine"
 
-#: builtin/rebase.c:1066
+#: builtin/rebase.c:1094
 msgid "abort but keep HEAD where it is"
 msgstr "abandonne mais garde HEAD où il est"
 
-#: builtin/rebase.c:1067
+#: builtin/rebase.c:1095
 msgid "edit the todo list during an interactive rebase"
 msgstr "éditer la liste à faire lors d'un rebasage interactif"
 
-#: builtin/rebase.c:1070
+#: builtin/rebase.c:1098
 msgid "show the patch file being applied or merged"
 msgstr "afficher le patch en cours d'application ou de fusion"
 
-#: builtin/rebase.c:1073
+#: builtin/rebase.c:1101
 msgid "use apply strategies to rebase"
 msgstr "utiliser des stratégies d'application pour rebaser"
 
-#: builtin/rebase.c:1077
+#: builtin/rebase.c:1105
 msgid "use merging strategies to rebase"
 msgstr "utiliser des stratégies de fusion pour rebaser"
 
-#: builtin/rebase.c:1081
+#: builtin/rebase.c:1109
 msgid "let the user edit the list of commits to rebase"
 msgstr "laisser l'utilisateur éditer la liste des commits à rebaser"
 
-#: builtin/rebase.c:1085
+#: builtin/rebase.c:1113
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(DÉCONSEILLÉ) essayer de recréer les fusions au lieu de les ignorer"
 
-#: builtin/rebase.c:1090
+#: builtin/rebase.c:1118
 msgid "how to handle commits that become empty"
 msgstr "comment gérer les commits qui deviennent vides"
 
-#: builtin/rebase.c:1093
+#: builtin/rebase.c:1121
 msgid "keep commits which start empty"
 msgstr "conserver les commits qui commencent vides"
 
-#: builtin/rebase.c:1097
+#: builtin/rebase.c:1125
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "déplace les commits qui commencent par squash!/fixup! sous -i"
 
-#: builtin/rebase.c:1104
+#: builtin/rebase.c:1132
 msgid "add exec lines after each commit of the editable list"
 msgstr "ajouter les lignes exec après chaque commit de la liste éditable"
 
-#: builtin/rebase.c:1108
+#: builtin/rebase.c:1136
 msgid "allow rebasing commits with empty messages"
 msgstr "autoriser les commits de rebasage avec des messages vides"
 
-#: builtin/rebase.c:1112
+#: builtin/rebase.c:1140
 msgid "try to rebase merges instead of skipping them"
 msgstr "essayer de rebaser les fusions au lieu de les garder"
 
-#: builtin/rebase.c:1115
+#: builtin/rebase.c:1143
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "utiliser 'merge-base --fork-point' pour raffiner l'amont"
 
-#: builtin/rebase.c:1117
+#: builtin/rebase.c:1145
 msgid "use the given merge strategy"
 msgstr "utiliser la stratégie de fusion indiquée"
 
-#: builtin/rebase.c:1119 builtin/revert.c:115
+#: builtin/rebase.c:1147 builtin/revert.c:115
 msgid "option"
 msgstr "option"
 
-#: builtin/rebase.c:1120
+#: builtin/rebase.c:1148
 msgid "pass the argument through to the merge strategy"
 msgstr "passer les arguments jusqu'à la stratégie de fusion"
 
-#: builtin/rebase.c:1123
+#: builtin/rebase.c:1151
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "rebaser tous les objets inatteignables depuis les racines"
 
-#: builtin/rebase.c:1126
+#: builtin/rebase.c:1154
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "re-planifier automatiquement tout `exec` qui échoue"
 
-#: builtin/rebase.c:1128
+#: builtin/rebase.c:1156
 msgid "apply all changes, even those already present upstream"
 msgstr ""
 "appliquer toutes les modifications, même celles déjà présentes en amont"
 
-#: builtin/rebase.c:1149
+#: builtin/rebase.c:1177
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "Il semble que 'git am' soit en cours. Impossible de rebaser."
 
-#: builtin/rebase.c:1180
+#: builtin/rebase.c:1208
 msgid "--preserve-merges was replaced by --rebase-merges"
 msgstr "--preserve-merges a été remplacé par --rebase-merges"
 
-#: builtin/rebase.c:1202
+#: builtin/rebase.c:1230
 msgid "No rebase in progress?"
 msgstr "Pas de rebasage en cours ?"
 
-#: builtin/rebase.c:1206
+#: builtin/rebase.c:1234
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr ""
 "L'action --edit-todo peut seulement être utilisée lors d'un rebasage "
 "interactif."
 
-#: builtin/rebase.c:1229 t/helper/test-fast-rebase.c:122
+#: builtin/rebase.c:1257 t/helper/test-fast-rebase.c:122
 msgid "Cannot read HEAD"
 msgstr "Impossible de lire HEAD"
 
-#: builtin/rebase.c:1241
+#: builtin/rebase.c:1269
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -20692,16 +21167,16 @@ msgstr ""
 "Vous devez éditer tous les conflits de fusion et\n"
 "les marquer comme résolus avec git add"
 
-#: builtin/rebase.c:1260
+#: builtin/rebase.c:1287
 msgid "could not discard worktree changes"
 msgstr "impossible de supprimer les changements de l'arbre de travail"
 
-#: builtin/rebase.c:1279
+#: builtin/rebase.c:1308
 #, c-format
 msgid "could not move back to %s"
 msgstr "impossible de revenir à %s"
 
-#: builtin/rebase.c:1325
+#: builtin/rebase.c:1354
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -20723,125 +21198,120 @@ msgstr ""
 "chose\n"
 "d'important ici.\n"
 
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1382
 msgid "switch `C' expects a numerical value"
 msgstr "l'option `C' attend un valeur numérique"
 
-#: builtin/rebase.c:1395
+#: builtin/rebase.c:1424
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Mode inconnu : %s"
 
-#: builtin/rebase.c:1434
+#: builtin/rebase.c:1463
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy requiert --merge ou --interactive"
 
-#: builtin/rebase.c:1463
+#: builtin/rebase.c:1492
 msgid "apply options and merge options cannot be used together"
 msgstr ""
 "Les options d'apply et celles de merge ne peuvent pas être utilisées ensemble"
 
-#: builtin/rebase.c:1476
+#: builtin/rebase.c:1505
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "Backend de rebasage inconnu : %s"
 
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1534
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec requiert --exec ou --interactive"
 
-#: builtin/rebase.c:1536
+#: builtin/rebase.c:1565
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "amont invalide '%s'"
 
-#: builtin/rebase.c:1542
+#: builtin/rebase.c:1571
 msgid "Could not create new root commit"
 msgstr "Impossible de créer un nouveau commit racine"
 
-#: builtin/rebase.c:1568
+#: builtin/rebase.c:1597
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr "'%s': exactement une base de fusion nécessaire avec une branche"
 
-#: builtin/rebase.c:1571
+#: builtin/rebase.c:1600
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "'%s': exactement une base de fusion nécessaire"
 
-#: builtin/rebase.c:1580
+#: builtin/rebase.c:1609
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "Ne pointe pas sur une validation valide : '%s'"
 
-#: builtin/rebase.c:1607
+#: builtin/rebase.c:1636
 #, c-format
 msgid "no such branch/commit '%s'"
 msgstr "pas de branche ou commit '%s'"
 
-#: builtin/rebase.c:1618 builtin/submodule--helper.c:39
-#: builtin/submodule--helper.c:2659
+#: builtin/rebase.c:1647 builtin/submodule--helper.c:43
+#: builtin/submodule--helper.c:2477
 #, c-format
 msgid "No such ref: %s"
 msgstr "Référence inexistante : %s"
 
-#: builtin/rebase.c:1629
+#: builtin/rebase.c:1658
 msgid "Could not resolve HEAD to a revision"
 msgstr "Impossible de résoudre le commit HEAD vers un révision"
 
-#: builtin/rebase.c:1650
+#: builtin/rebase.c:1679
 msgid "Please commit or stash them."
 msgstr "Veuillez les valider ou les remiser."
 
-#: builtin/rebase.c:1686
-#, c-format
-msgid "could not switch to %s"
-msgstr "impossible de basculer vers %s"
-
-#: builtin/rebase.c:1697
+#: builtin/rebase.c:1714
 msgid "HEAD is up to date."
 msgstr "HEAD est à jour."
 
-#: builtin/rebase.c:1699
+#: builtin/rebase.c:1716
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "La branche courante %s est à jour.\n"
 
-#: builtin/rebase.c:1707
+#: builtin/rebase.c:1724
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD est à jour, rebasage forcé."
 
-#: builtin/rebase.c:1709
+#: builtin/rebase.c:1726
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "La branche courante %s est à jour, rebasage forcé.\n"
 
-#: builtin/rebase.c:1717
+#: builtin/rebase.c:1734
 msgid "The pre-rebase hook refused to rebase."
 msgstr "Le crochet pre-rebase a refusé de rebaser."
 
-#: builtin/rebase.c:1724
+#: builtin/rebase.c:1741
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Changements vers %s :\n"
 
-#: builtin/rebase.c:1727
+#: builtin/rebase.c:1744
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Changements de %s sur %s :\n"
 
-#: builtin/rebase.c:1752
+#: builtin/rebase.c:1769
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "Rembobinage préalable de head pour pouvoir rejouer votre travail par-"
 "dessus...\n"
 
-#: builtin/rebase.c:1761
+#: builtin/rebase.c:1781
 msgid "Could not detach HEAD"
 msgstr "Impossible de détacher HEAD"
 
-#: builtin/rebase.c:1770
+#: builtin/rebase.c:1790
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Avance rapide de %s sur %s.\n"
@@ -20850,7 +21320,7 @@ msgstr "Avance rapide de %s sur %s.\n"
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack <répertoire-git>"
 
-#: builtin/receive-pack.c:1275
+#: builtin/receive-pack.c:1263
 msgid ""
 "By default, updating the current branch in a non-bare repository\n"
 "is denied, because it will make the index and work tree inconsistent\n"
@@ -20880,7 +21350,7 @@ msgstr ""
 "Pour éliminer ce message et conserver le comportement par défaut,\n"
 "réglez « receive.denyCurrentBranch » à 'refuse'."
 
-#: builtin/receive-pack.c:1295
+#: builtin/receive-pack.c:1283
 msgid ""
 "By default, deleting the current branch is denied, because the next\n"
 "'git clone' won't result in any file checked out, causing confusion.\n"
@@ -20900,79 +21370,115 @@ msgstr ""
 "\n"
 "Pour éliminer ce message, réglez-le à 'refuse'."
 
-#: builtin/receive-pack.c:2474
+#: builtin/receive-pack.c:2476
 msgid "quiet"
 msgstr "quiet"
 
-#: builtin/receive-pack.c:2489
+#: builtin/receive-pack.c:2491
 msgid "you must specify a directory"
 msgstr "Vous devez spécifier un répertoire"
 
-#: builtin/reflog.c:17
+#: builtin/reflog.c:9
+msgid "git reflog [show] [<log-options>] [<ref>]"
+msgstr "git reflog [show] [<options-de-journal>] [<réf>]"
+
+#: builtin/reflog.c:12
 msgid ""
-"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<refs>..."
+"git reflog expire [--expire=<time>] [--expire-unreachable=<time>]\n"
+"                  [--rewrite] [--updateref] [--stale-fix]\n"
+"                  [--dry-run | -n] [--verbose] [--all [--single-worktree] | "
+"<refs>...]"
 msgstr ""
-"git reflog expire [--expire=<date>] [--expire-unreachable=<date>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<réferences>..."
+"git reflog expire [--expire=<temps>] [--expire-unreachable=<temps>]\n"
+"                  [--rewrite] [--updateref] [--stale-fix]\n"
+"                  [--dry-run | -n] [--verbose] [--all [--single-worktree] | "
+"<réfs>...]"
 
-#: builtin/reflog.c:22
+#: builtin/reflog.c:17
 msgid ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] "
-"<refs>..."
+"git reflog delete [--rewrite] [--updateref]\n"
+"                  [--dry-run | -n] [--verbose] <ref>@{<specifier>}..."
 msgstr ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] "
-"<références>..."
+"git reflog delete [--rewrite] [--updateref]\n"
+"                  [--dry-run | -n] [--verbose] <réf>@{<spécificateur>}..."
 
-#: builtin/reflog.c:25
+#: builtin/reflog.c:21
 msgid "git reflog exists <ref>"
 msgstr "git reflog exists <référence>"
 
-#: builtin/reflog.c:585 builtin/reflog.c:590
+#: builtin/reflog.c:197 builtin/reflog.c:211
 #, c-format
-msgid "'%s' is not a valid timestamp"
-msgstr "'%s' n'est pas un horodatage valide"
+msgid "invalid timestamp '%s' given to '--%s'"
+msgstr "horodatage invalide '%s' fourni à '--%s'"
+
+#: builtin/reflog.c:240 builtin/reflog.c:359
+msgid "do not actually prune any entries"
+msgstr "ne pas réellement élaguer des entrées"
 
-#: builtin/reflog.c:631
+#: builtin/reflog.c:243 builtin/reflog.c:362
+msgid ""
+"rewrite the old SHA1 with the new SHA1 of the entry that now precedes it"
+msgstr ""
+"réécrire l'ancien SHA1 avec le nouveau SHA1 de l'entrée qui la précède "
+"maintenant"
+
+#: builtin/reflog.c:246 builtin/reflog.c:365
+msgid "update the reference to the value of the top reflog entry"
+msgstr ""
+"mettre à jour la référence avec la valeur de l'entrée en tête de reflog"
+
+#: builtin/reflog.c:248 builtin/reflog.c:367
+msgid "print extra information on screen"
+msgstr "Afficher de l'informations supplémentaires"
+
+#: builtin/reflog.c:249 builtin/reflog.c:253
+msgid "timestamp"
+msgstr "horodatage"
+
+#: builtin/reflog.c:250
+msgid "prune entries older than the specified time"
+msgstr "élaguer les entrées plus vieilles que <temps>"
+
+#: builtin/reflog.c:254
+msgid ""
+"prune entries older than <time> that are not reachable from the current tip "
+"of the branch"
+msgstr ""
+"élaguer les entrées plus anciennes que <temps> qui ne sont pas joignables "
+"depuis le sommet actuel de la branche"
+
+#: builtin/reflog.c:258
+msgid "prune any reflog entries that point to broken commits"
+msgstr "élaguer les entrées de reflog qui pointent sur des commits cassés"
+
+#: builtin/reflog.c:259
+msgid "process the reflogs of all references"
+msgstr "traiter les reflogs de toutes les références"
+
+#: builtin/reflog.c:261
+msgid "limits processing to reflogs from the current worktree only"
+msgstr "limite le traitement des reflogs seulement à l'arbre de travail actuel"
+
+#: builtin/reflog.c:294
 #, c-format
 msgid "Marking reachable objects..."
 msgstr "Marquage des objets inaccessibles..."
 
-#: builtin/reflog.c:675
+#: builtin/reflog.c:338
 #, c-format
 msgid "%s points nowhere!"
 msgstr "%s ne pointe nulle part !"
 
-#: builtin/reflog.c:731
+#: builtin/reflog.c:374
 msgid "no reflog specified to delete"
 msgstr "pas de journal de références à supprimer spécifié"
 
-#: builtin/reflog.c:742
-#, c-format
-msgid "not a reflog: %s"
-msgstr "'%s' n'est pas un journal de références"
-
-#: builtin/reflog.c:747
-#, c-format
-msgid "no reflog for '%s'"
-msgstr "pas de journal de références pour '%s'"
-
-#: builtin/reflog.c:794
+#: builtin/reflog.c:396
 #, c-format
 msgid "invalid ref format: %s"
 msgstr "format de référence invalide : %s"
 
-#: builtin/reflog.c:803
-msgid "git reflog [ show | expire | delete | exists ]"
-msgstr "git reflog [ show | expire | delete | exists ]"
-
-#: builtin/remote.c:17
-msgid "git remote [-v | --verbose]"
-msgstr "git remote [-v | --verbose]"
-
-#: builtin/remote.c:18
+#: builtin/remote.c:19
 msgid ""
 "git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--"
 "mirror=<fetch|push>] <name> <url>"
@@ -20980,88 +21486,88 @@ msgstr ""
 "git remote add [-t <branche>] [-m <master>] [-f] [--tags | --no-tags] [--"
 "mirror=<fetch|push>] <nom> <url>"
 
-#: builtin/remote.c:19 builtin/remote.c:39
-msgid "git remote rename <old> <new>"
-msgstr "git remote rename <ancienne> <nouvelle>"
+#: builtin/remote.c:20 builtin/remote.c:40
+msgid "git remote rename [--[no-]progress] <old> <new>"
+msgstr "git remote rename [--[no-]progress] <ancien> <nouveau>"
 
-#: builtin/remote.c:20 builtin/remote.c:44
+#: builtin/remote.c:21 builtin/remote.c:45
 msgid "git remote remove <name>"
 msgstr "git remote remove <nom>"
 
-#: builtin/remote.c:21 builtin/remote.c:49
+#: builtin/remote.c:22 builtin/remote.c:50
 msgid "git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"
 msgstr "git remote set-head <nom> (-a | --auto | -d | --delete | <branche>)"
 
-#: builtin/remote.c:22
+#: builtin/remote.c:23
 msgid "git remote [-v | --verbose] show [-n] <name>"
 msgstr "git remote [-v | --verbose] show [-n] <nom>"
 
-#: builtin/remote.c:23
+#: builtin/remote.c:24
 msgid "git remote prune [-n | --dry-run] <name>"
 msgstr "git remote prune [-n | --dry-run] <nom>"
 
-#: builtin/remote.c:24
+#: builtin/remote.c:25
 msgid ""
 "git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
 msgstr ""
 "git remote [-v | --verbose] update [-p | --prune] [(<groupe> | "
 "<distante>)...]"
 
-#: builtin/remote.c:25
+#: builtin/remote.c:26
 msgid "git remote set-branches [--add] <name> <branch>..."
 msgstr "git remote set-branches [--add] <nom> <branche>..."
 
-#: builtin/remote.c:26 builtin/remote.c:75
+#: builtin/remote.c:27 builtin/remote.c:76
 msgid "git remote get-url [--push] [--all] <name>"
 msgstr "git remote get-url [--push] [--all] <nom>"
 
-#: builtin/remote.c:27 builtin/remote.c:80
+#: builtin/remote.c:28 builtin/remote.c:81
 msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]"
 msgstr "git remote set-url [--push] <nom> <nouvelle-URL> [<ancienne-URL>]"
 
-#: builtin/remote.c:28 builtin/remote.c:81
+#: builtin/remote.c:29 builtin/remote.c:82
 msgid "git remote set-url --add <name> <newurl>"
 msgstr "git remote set-url --add <nom> <nouvelle-URL>"
 
-#: builtin/remote.c:29 builtin/remote.c:82
+#: builtin/remote.c:30 builtin/remote.c:83
 msgid "git remote set-url --delete <name> <url>"
 msgstr "git remote set-url --delete <nom> <url>"
 
-#: builtin/remote.c:34
+#: builtin/remote.c:35
 msgid "git remote add [<options>] <name> <url>"
 msgstr "git remote add [<options>] <nom> <URL>"
 
-#: builtin/remote.c:54
+#: builtin/remote.c:55
 msgid "git remote set-branches <name> <branch>..."
 msgstr "git remote set-branches <nom> <branche>..."
 
-#: builtin/remote.c:55
+#: builtin/remote.c:56
 msgid "git remote set-branches --add <name> <branch>..."
 msgstr "git remote set-branches --add <nom> <branche>..."
 
-#: builtin/remote.c:60
+#: builtin/remote.c:61
 msgid "git remote show [<options>] <name>"
 msgstr "git remote show [<options>] <nom>"
 
-#: builtin/remote.c:65
+#: builtin/remote.c:66
 msgid "git remote prune [<options>] <name>"
 msgstr "git remote prune [<options>] <nom>"
 
-#: builtin/remote.c:70
+#: builtin/remote.c:71
 msgid "git remote update [<options>] [<group> | <remote>]..."
 msgstr "git remote update [<options>] [<groupe> | <distante>]..."
 
-#: builtin/remote.c:99
+#: builtin/remote.c:100
 #, c-format
 msgid "Updating %s"
 msgstr "Mise à jour de %s"
 
-#: builtin/remote.c:101
+#: builtin/remote.c:102
 #, c-format
 msgid "Could not fetch %s"
 msgstr "Impossible de récupérer %s"
 
-#: builtin/remote.c:131
+#: builtin/remote.c:132
 msgid ""
 "--mirror is dangerous and deprecated; please\n"
 "\t use --mirror=fetch or --mirror=push instead"
@@ -21069,83 +21575,83 @@ msgstr ""
 "--mirror est dangereux et obsolète ; merci\n"
 "\t d'utiliser --mirror=fetch ou --mirror=push à la place"
 
-#: builtin/remote.c:148
+#: builtin/remote.c:149
 #, c-format
 msgid "unknown mirror argument: %s"
 msgstr "argument miroir inconnu : %s"
 
-#: builtin/remote.c:164
+#: builtin/remote.c:165
 msgid "fetch the remote branches"
 msgstr "rapatrier les branches distantes"
 
-#: builtin/remote.c:166
+#: builtin/remote.c:167
 msgid "import all tags and associated objects when fetching"
 msgstr ""
 "importer toutes les étiquettes et les objets associés lors du rapatriement"
 
-#: builtin/remote.c:169
+#: builtin/remote.c:170
 msgid "or do not fetch any tag at all (--no-tags)"
 msgstr "ou ne rapatrier aucune étiquette (--no-tags)"
 
-#: builtin/remote.c:171
+#: builtin/remote.c:172
 msgid "branch(es) to track"
 msgstr "branche(s) à suivre"
 
-#: builtin/remote.c:172
+#: builtin/remote.c:173
 msgid "master branch"
 msgstr "branche maîtresse"
 
-#: builtin/remote.c:174
+#: builtin/remote.c:175
 msgid "set up remote as a mirror to push to or fetch from"
 msgstr ""
 "paramétrer la distante comme miroir pour pousser ou pour rapatrier depuis"
 
-#: builtin/remote.c:186
+#: builtin/remote.c:187
 msgid "specifying a master branch makes no sense with --mirror"
 msgstr "spécifier une branche maîtresse n'a pas de sens avec --mirror"
 
-#: builtin/remote.c:188
+#: builtin/remote.c:189
 msgid "specifying branches to track makes sense only with fetch mirrors"
 msgstr ""
 "spécifier les branches à suivre n'a de sens qu'avec des miroirs de "
 "rapatriement"
 
-#: builtin/remote.c:195 builtin/remote.c:705
+#: builtin/remote.c:196 builtin/remote.c:716
 #, c-format
 msgid "remote %s already exists."
 msgstr "la distante %s existe déjà."
 
-#: builtin/remote.c:240
+#: builtin/remote.c:241
 #, c-format
 msgid "Could not setup master '%s'"
 msgstr "Impossible de paramétrer la maîtresse '%s'"
 
-#: builtin/remote.c:322
+#: builtin/remote.c:323
 #, c-format
 msgid "unhandled branch.%s.rebase=%s; assuming 'true'"
 msgstr "branch.%s.rebase=%s non géré ; 'true' supposé"
 
-#: builtin/remote.c:366
+#: builtin/remote.c:367
 #, c-format
 msgid "Could not get fetch map for refspec %s"
 msgstr ""
 "Impossible d'obtenir une correspondance distante pour la spécification de "
 "référence %s"
 
-#: builtin/remote.c:460 builtin/remote.c:468
+#: builtin/remote.c:461 builtin/remote.c:469
 msgid "(matching)"
 msgstr "(correspond)"
 
-#: builtin/remote.c:472
+#: builtin/remote.c:473
 msgid "(delete)"
 msgstr "(supprimer)"
 
-#: builtin/remote.c:660
+#: builtin/remote.c:664
 #, c-format
 msgid "could not set '%s'"
 msgstr "impossible d'assigner '%s'"
 
-#: builtin/remote.c:665
+#: builtin/remote.c:669
 #, c-format
 msgid ""
 "The %s configuration remote.pushDefault in:\n"
@@ -21156,17 +21662,17 @@ msgstr ""
 "\t%s%d\n"
 "nomme à présent le distant inexistant '%s'"
 
-#: builtin/remote.c:696 builtin/remote.c:841 builtin/remote.c:948
+#: builtin/remote.c:707 builtin/remote.c:866 builtin/remote.c:973
 #, c-format
 msgid "No such remote: '%s'"
 msgstr "Pas de serveur remote : '%s'"
 
-#: builtin/remote.c:715
+#: builtin/remote.c:726
 #, c-format
 msgid "Could not rename config section '%s' to '%s'"
 msgstr "Impossible de renommer la section de configuration '%s' en '%s'"
 
-#: builtin/remote.c:735
+#: builtin/remote.c:746
 #, c-format
 msgid ""
 "Not updating non-default fetch refspec\n"
@@ -21177,17 +21683,21 @@ msgstr ""
 "\t%s\n"
 "\tVeuillez mettre à jour la configuration manuellement si nécessaire."
 
-#: builtin/remote.c:775
+#: builtin/remote.c:783
+msgid "Renaming remote references"
+msgstr "Renommage des références distantes"
+
+#: builtin/remote.c:794
 #, c-format
 msgid "deleting '%s' failed"
 msgstr "échec de suppression de '%s'"
 
-#: builtin/remote.c:809
+#: builtin/remote.c:832
 #, c-format
 msgid "creating '%s' failed"
 msgstr "échec de création de '%s'"
 
-#: builtin/remote.c:887
+#: builtin/remote.c:912
 msgid ""
 "Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
 "to delete it, use:"
@@ -21202,118 +21712,118 @@ msgstr[1] ""
 "supprimées ;\n"
 "pour les supprimer, utilisez :"
 
-#: builtin/remote.c:901
+#: builtin/remote.c:926
 #, c-format
 msgid "Could not remove config section '%s'"
 msgstr "Impossible de supprimer la section de configuration '%s'"
 
-#: builtin/remote.c:1009
+#: builtin/remote.c:1034
 #, c-format
 msgid " new (next fetch will store in remotes/%s)"
 msgstr " nouveau (le prochain rapatriement (fetch) stockera dans remotes/%s)"
 
-#: builtin/remote.c:1012
+#: builtin/remote.c:1037
 msgid " tracked"
 msgstr " suivi"
 
-#: builtin/remote.c:1014
+#: builtin/remote.c:1039
 msgid " stale (use 'git remote prune' to remove)"
 msgstr " dépassé (utilisez 'git remote prune' pour supprimer)"
 
-#: builtin/remote.c:1016
+#: builtin/remote.c:1041
 msgid " ???"
 msgstr " ???"
 
-#: builtin/remote.c:1057
+#: builtin/remote.c:1082
 #, c-format
 msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
 msgstr "branch.%s.merge invalide ; ne peut pas rebaser sur plus d'une branche"
 
-#: builtin/remote.c:1066
+#: builtin/remote.c:1091
 #, c-format
 msgid "rebases interactively onto remote %s"
 msgstr "rebase de manière interactive sur la distante %s"
 
-#: builtin/remote.c:1068
+#: builtin/remote.c:1093
 #, c-format
 msgid "rebases interactively (with merges) onto remote %s"
 msgstr "rebase de manière interactive (avec fusions) sur la distante %s"
 
-#: builtin/remote.c:1071
+#: builtin/remote.c:1096
 #, c-format
 msgid "rebases onto remote %s"
 msgstr "rebase sur la distante %s"
 
-#: builtin/remote.c:1075
+#: builtin/remote.c:1100
 #, c-format
 msgid " merges with remote %s"
 msgstr " fusionne avec la distante %s"
 
-#: builtin/remote.c:1078
+#: builtin/remote.c:1103
 #, c-format
 msgid "merges with remote %s"
 msgstr "fusionne avec la distante %s"
 
-#: builtin/remote.c:1081
+#: builtin/remote.c:1106
 #, c-format
 msgid "%-*s    and with remote %s\n"
 msgstr "%-*s    et avec la distante %s\n"
 
-#: builtin/remote.c:1124
+#: builtin/remote.c:1149
 msgid "create"
 msgstr "créer"
 
-#: builtin/remote.c:1127
+#: builtin/remote.c:1152
 msgid "delete"
 msgstr "supprimer"
 
-#: builtin/remote.c:1131
+#: builtin/remote.c:1156
 msgid "up to date"
 msgstr "à jour"
 
-#: builtin/remote.c:1134
+#: builtin/remote.c:1159
 msgid "fast-forwardable"
 msgstr "peut être mis à jour en avance rapide"
 
-#: builtin/remote.c:1137
+#: builtin/remote.c:1162
 msgid "local out of date"
 msgstr "le local n'est pas à jour"
 
-#: builtin/remote.c:1144
+#: builtin/remote.c:1169
 #, c-format
 msgid "    %-*s forces to %-*s (%s)"
 msgstr "    %-*s force vers %-*s (%s)"
 
-#: builtin/remote.c:1147
+#: builtin/remote.c:1172
 #, c-format
 msgid "    %-*s pushes to %-*s (%s)"
 msgstr "    %-*s pousse vers %-*s (%s)"
 
-#: builtin/remote.c:1151
+#: builtin/remote.c:1176
 #, c-format
 msgid "    %-*s forces to %s"
 msgstr "    %-*s force vers %s"
 
-#: builtin/remote.c:1154
+#: builtin/remote.c:1179
 #, c-format
 msgid "    %-*s pushes to %s"
 msgstr "    %-*s pousse vers %s"
 
-#: builtin/remote.c:1222
+#: builtin/remote.c:1247
 msgid "do not query remotes"
 msgstr "ne pas interroger les distantes"
 
-#: builtin/remote.c:1243
+#: builtin/remote.c:1268
 #, c-format
 msgid "* remote %s"
 msgstr "* distant %s"
 
-#: builtin/remote.c:1244
+#: builtin/remote.c:1269
 #, c-format
 msgid "  Fetch URL: %s"
 msgstr "  URL de rapatriement : %s"
 
-#: builtin/remote.c:1245 builtin/remote.c:1261 builtin/remote.c:1398
+#: builtin/remote.c:1270 builtin/remote.c:1286 builtin/remote.c:1423
 msgid "(no URL)"
 msgstr "(pas d'URL)"
 
@@ -21321,25 +21831,25 @@ msgstr "(pas d'URL)"
 #. with the one in " Fetch URL: %s"
 #. translation.
 #.
-#: builtin/remote.c:1259 builtin/remote.c:1261
+#: builtin/remote.c:1284 builtin/remote.c:1286
 #, c-format
 msgid "  Push  URL: %s"
 msgstr "  URL push : %s"
 
-#: builtin/remote.c:1263 builtin/remote.c:1265 builtin/remote.c:1267
+#: builtin/remote.c:1288 builtin/remote.c:1290 builtin/remote.c:1292
 #, c-format
 msgid "  HEAD branch: %s"
 msgstr "  Branche HEAD : %s"
 
-#: builtin/remote.c:1263
+#: builtin/remote.c:1288
 msgid "(not queried)"
 msgstr "(non demandé)"
 
-#: builtin/remote.c:1265
+#: builtin/remote.c:1290
 msgid "(unknown)"
 msgstr "(inconnu)"
 
-#: builtin/remote.c:1269
+#: builtin/remote.c:1294
 #, c-format
 msgid ""
 "  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
@@ -21347,166 +21857,166 @@ msgstr ""
 "  Branche HEAD (la HEAD distante est ambiguë, peut être l'une des "
 "suivantes) :\n"
 
-#: builtin/remote.c:1281
+#: builtin/remote.c:1306
 #, c-format
 msgid "  Remote branch:%s"
 msgid_plural "  Remote branches:%s"
 msgstr[0] "  Branche distante :%s"
 msgstr[1] "  Branches distantes :%s"
 
-#: builtin/remote.c:1284 builtin/remote.c:1310
+#: builtin/remote.c:1309 builtin/remote.c:1335
 msgid " (status not queried)"
 msgstr " (état non demandé)"
 
-#: builtin/remote.c:1293
+#: builtin/remote.c:1318
 msgid "  Local branch configured for 'git pull':"
 msgid_plural "  Local branches configured for 'git pull':"
 msgstr[0] "  Branche locale configurée pour 'git pull' :"
 msgstr[1] "  Branches locales configurées pour 'git pull' :"
 
-#: builtin/remote.c:1301
+#: builtin/remote.c:1326
 msgid "  Local refs will be mirrored by 'git push'"
 msgstr "  Les références locales seront reflétées par 'git push'"
 
-#: builtin/remote.c:1307
+#: builtin/remote.c:1332
 #, c-format
 msgid "  Local ref configured for 'git push'%s:"
 msgid_plural "  Local refs configured for 'git push'%s:"
 msgstr[0] "  Référence locale configurée pour 'git push'%s :"
 msgstr[1] "  Références locales configurées pour 'git push'%s :"
 
-#: builtin/remote.c:1328
+#: builtin/remote.c:1353
 msgid "set refs/remotes/<name>/HEAD according to remote"
 msgstr "définir refs/remotes/<nom>/HEAD selon la distante"
 
-#: builtin/remote.c:1330
+#: builtin/remote.c:1355
 msgid "delete refs/remotes/<name>/HEAD"
 msgstr "supprimer refs/remotes/<nom>/HEAD"
 
-#: builtin/remote.c:1344
+#: builtin/remote.c:1369
 msgid "Cannot determine remote HEAD"
 msgstr "Impossible de déterminer la HEAD distante"
 
-#: builtin/remote.c:1346
+#: builtin/remote.c:1371
 msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
 msgstr ""
 "Il y a de multiples branches HEAD distantes. Veuillez en choisir une "
 "explicitement avec :"
 
-#: builtin/remote.c:1356
+#: builtin/remote.c:1381
 #, c-format
 msgid "Could not delete %s"
 msgstr "Impossible de supprimer %s"
 
-#: builtin/remote.c:1364
+#: builtin/remote.c:1389
 #, c-format
 msgid "Not a valid ref: %s"
 msgstr "Référence non valide : %s"
 
-#: builtin/remote.c:1366
+#: builtin/remote.c:1391
 #, c-format
 msgid "Could not setup %s"
 msgstr "Impossible de paramétrer %s"
 
-#: builtin/remote.c:1384
+#: builtin/remote.c:1409
 #, c-format
 msgid " %s will become dangling!"
 msgstr " %s se retrouvera en suspens !"
 
-#: builtin/remote.c:1385
+#: builtin/remote.c:1410
 #, c-format
 msgid " %s has become dangling!"
 msgstr " %s se retrouve en suspens !"
 
-#: builtin/remote.c:1394
+#: builtin/remote.c:1419
 #, c-format
 msgid "Pruning %s"
 msgstr "Élimination de %s"
 
-#: builtin/remote.c:1395
+#: builtin/remote.c:1420
 #, c-format
 msgid "URL: %s"
 msgstr "URL : %s"
 
-#: builtin/remote.c:1411
+#: builtin/remote.c:1436
 #, c-format
 msgid " * [would prune] %s"
 msgstr " * [serait éliminé] %s"
 
-#: builtin/remote.c:1414
+#: builtin/remote.c:1439
 #, c-format
 msgid " * [pruned] %s"
 msgstr " * [éliminé] %s"
 
-#: builtin/remote.c:1459
+#: builtin/remote.c:1484
 msgid "prune remotes after fetching"
 msgstr "éliminer les distants après le rapatriement"
 
-#: builtin/remote.c:1523 builtin/remote.c:1579 builtin/remote.c:1649
+#: builtin/remote.c:1548 builtin/remote.c:1604 builtin/remote.c:1674
 #, c-format
 msgid "No such remote '%s'"
 msgstr "Pas de serveur remote '%s'"
 
-#: builtin/remote.c:1541
+#: builtin/remote.c:1566
 msgid "add branch"
 msgstr "ajouter une branche"
 
-#: builtin/remote.c:1548
+#: builtin/remote.c:1573
 msgid "no remote specified"
 msgstr "pas de serveur distant spécifié"
 
-#: builtin/remote.c:1565
+#: builtin/remote.c:1590
 msgid "query push URLs rather than fetch URLs"
 msgstr "interroger les URLs de poussée plutôt que les URLs de récupération"
 
-#: builtin/remote.c:1567
+#: builtin/remote.c:1592
 msgid "return all URLs"
 msgstr "retourner toutes les URLs"
 
-#: builtin/remote.c:1597
+#: builtin/remote.c:1622
 #, c-format
 msgid "no URLs configured for remote '%s'"
 msgstr "aucune URL configurée pour le dépôt distant '%s'"
 
-#: builtin/remote.c:1623
+#: builtin/remote.c:1648
 msgid "manipulate push URLs"
 msgstr "manipuler les URLs push"
 
-#: builtin/remote.c:1625
+#: builtin/remote.c:1650
 msgid "add URL"
 msgstr "ajouter une URL"
 
-#: builtin/remote.c:1627
+#: builtin/remote.c:1652
 msgid "delete URLs"
 msgstr "supprimer des URLs"
 
-#: builtin/remote.c:1634
+#: builtin/remote.c:1659
 msgid "--add --delete doesn't make sense"
 msgstr "--add --delete n'a aucun sens"
 
-#: builtin/remote.c:1675
+#: builtin/remote.c:1700
 #, c-format
 msgid "Invalid old URL pattern: %s"
 msgstr "Motif d'URL ancien invalide : %s"
 
-#: builtin/remote.c:1683
+#: builtin/remote.c:1708
 #, c-format
 msgid "No such URL found: %s"
 msgstr "Pas d'URL trouvée : %s"
 
-#: builtin/remote.c:1685
+#: builtin/remote.c:1710
 msgid "Will not delete all non-push URLs"
 msgstr "Pas de suppression de toutes les URLs non-push"
 
-#: builtin/remote.c:1702
+#: builtin/remote.c:1727
 msgid "be verbose; must be placed before a subcommand"
 msgstr "être verbeux : doit être placé avant une sous-commande"
 
-#: builtin/repack.c:28
+#: builtin/repack.c:29
 msgid "git repack [<options>]"
 msgstr "git repack [<options>]"
 
-#: builtin/repack.c:33
+#: builtin/repack.c:34
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -21515,152 +22025,152 @@ msgstr ""
 "Utilisez\n"
 "--no-write-bitmap-index ou désactivez le paramètre pack.writebitmaps."
 
-#: builtin/repack.c:201
+#: builtin/repack.c:206
 msgid "could not start pack-objects to repack promisor objects"
 msgstr ""
 "ne pas démarrer pack-objects pour ré-empaqueter les objects de prometteur"
 
-#: builtin/repack.c:275 builtin/repack.c:820
+#: builtin/repack.c:280 builtin/repack.c:824
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 "repack : attente de lignes d'Id d'objets en hexa complet seulement depuis "
 "les objects de paquet."
 
-#: builtin/repack.c:299
+#: builtin/repack.c:304
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr ""
 "impossible de terminer pack-objects  pour ré-empaqueter les objets de "
 "prometteur"
 
-#: builtin/repack.c:314
+#: builtin/repack.c:319
 #, c-format
 msgid "cannot open index for %s"
 msgstr "impossible d'ouvrir l'index pour %s"
 
-#: builtin/repack.c:373
+#: builtin/repack.c:378
 #, c-format
 msgid "pack %s too large to consider in geometric progression"
 msgstr ""
 "le paquet %s est trop gros pour être pris en compte dans un progression "
 "géométrique"
 
-#: builtin/repack.c:406 builtin/repack.c:413 builtin/repack.c:418
+#: builtin/repack.c:411 builtin/repack.c:418 builtin/repack.c:423
 #, c-format
 msgid "pack %s too large to roll up"
 msgstr "le paquet %s est trop gros à enrouler"
 
-#: builtin/repack.c:498
+#: builtin/repack.c:503
 #, c-format
 msgid "could not open tempfile %s for writing"
 msgstr "impossible d'ouvrir le fichier temporaire %s en écriture"
 
-#: builtin/repack.c:516
+#: builtin/repack.c:521
 msgid "could not close refs snapshot tempfile"
 msgstr "impossible de fermer le fichier temporaire d'instantané des réfs"
 
-#: builtin/repack.c:630
+#: builtin/repack.c:634
 msgid "pack everything in a single pack"
 msgstr "empaqueter tout dans un seul paquet"
 
-#: builtin/repack.c:632
+#: builtin/repack.c:636
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "identique à -a et transformer les objets inaccessibles en suspens"
 
-#: builtin/repack.c:635
+#: builtin/repack.c:639
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "supprimer les paquets redondants et lancer git-prune-packed"
 
-#: builtin/repack.c:637
+#: builtin/repack.c:641
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "passer --no-reuse-delta à git-pack-objects"
 
-#: builtin/repack.c:639
+#: builtin/repack.c:643
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "passer --no-reuse-object à git-pack-objects"
 
-#: builtin/repack.c:641
+#: builtin/repack.c:645
 msgid "do not run git-update-server-info"
 msgstr "ne pas lancer git-update-server-info"
 
-#: builtin/repack.c:644
+#: builtin/repack.c:648
 msgid "pass --local to git-pack-objects"
 msgstr "passer --local à git-pack-objects"
 
-#: builtin/repack.c:646
+#: builtin/repack.c:650
 msgid "write bitmap index"
 msgstr "écrire un index en bitmap"
 
-#: builtin/repack.c:648
+#: builtin/repack.c:652
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "passer --delta-islands à git-pack-objects"
 
-#: builtin/repack.c:649
+#: builtin/repack.c:653
 msgid "approxidate"
 msgstr "date approximative"
 
-#: builtin/repack.c:650
+#: builtin/repack.c:654
 msgid "with -A, do not loosen objects older than this"
 msgstr "avec -A, ne pas suspendre les objets plus vieux que celui-ci"
 
-#: builtin/repack.c:652
+#: builtin/repack.c:656
 msgid "with -a, repack unreachable objects"
 msgstr "avec -a, repaquétiser les objets inaccessibles"
 
-#: builtin/repack.c:654
+#: builtin/repack.c:658
 msgid "size of the window used for delta compression"
 msgstr "taille de la fenêtre utilisée pour la compression des deltas"
 
-#: builtin/repack.c:655 builtin/repack.c:661
+#: builtin/repack.c:659 builtin/repack.c:665
 msgid "bytes"
 msgstr "octets"
 
-#: builtin/repack.c:656
+#: builtin/repack.c:660
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr ""
 "idem ci-dessus, mais limiter la taille mémoire au lieu du nombre d'éléments"
 
-#: builtin/repack.c:658
+#: builtin/repack.c:662
 msgid "limits the maximum delta depth"
 msgstr "limite la profondeur maximale des deltas"
 
-#: builtin/repack.c:660
+#: builtin/repack.c:664
 msgid "limits the maximum number of threads"
 msgstr "limite le nombre maximal de fils"
 
-#: builtin/repack.c:662
+#: builtin/repack.c:666
 msgid "maximum size of each packfile"
 msgstr "taille maximum de chaque fichier paquet"
 
-#: builtin/repack.c:664
+#: builtin/repack.c:668
 msgid "repack objects in packs marked with .keep"
 msgstr "réempaqueter les objets dans des paquets marqués avec .keep"
 
-#: builtin/repack.c:666
+#: builtin/repack.c:670
 msgid "do not repack this pack"
 msgstr "ne pas rempaqueter ce paquet"
 
-#: builtin/repack.c:668
+#: builtin/repack.c:672
 msgid "find a geometric progression with factor <N>"
 msgstr "trouver une progression géométrique avec un facteur <N>"
 
-#: builtin/repack.c:670
+#: builtin/repack.c:674
 msgid "write a multi-pack index of the resulting packs"
 msgstr "écrire un index de multi-paquet des paquets résultants"
 
-#: builtin/repack.c:680
+#: builtin/repack.c:684
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "impossible de supprimer les paquets dans un dépôt d'objets précieux"
 
-#: builtin/repack.c:829
+#: builtin/repack.c:833
 msgid "Nothing new to pack."
 msgstr "Rien de neuf à empaqueter."
 
-#: builtin/repack.c:859
+#: builtin/repack.c:863
 #, c-format
 msgid "missing required file: %s"
 msgstr "fichier nécessaire manquant : %s"
 
-#: builtin/repack.c:861
+#: builtin/repack.c:865
 #, c-format
 msgid "could not unlink: %s"
 msgstr "impossible de délier : '%s'"
@@ -21677,10 +22187,6 @@ msgstr "git replace [-f] --edit <objet>"
 msgid "git replace [-f] --graft <commit> [<parent>...]"
 msgstr "git replace [-f] --graft <commit> [<parent>...]"
 
-#: builtin/replace.c:25
-msgid "git replace [-f] --convert-graft-file"
-msgstr "git replace [-f] --convert-graft-file"
-
 #: builtin/replace.c:26
 msgid "git replace -d <object>..."
 msgstr "git replace -d <objet>..."
@@ -21984,101 +22490,96 @@ msgstr "Impossible de trouver l'arbre pour %s."
 msgid "HEAD is now at %s"
 msgstr "HEAD est maintenant à %s"
 
-#: builtin/reset.c:299
+#: builtin/reset.c:304
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Impossible de faire un \"reset %s\" au milieu d'une fusion."
 
-#: builtin/reset.c:396 builtin/stash.c:606 builtin/stash.c:680
-#: builtin/stash.c:704
+#: builtin/reset.c:402 builtin/stash.c:606 builtin/stash.c:669
+#: builtin/stash.c:693
 msgid "be quiet, only report errors"
 msgstr "être silencieux, afficher seulement les erreurs"
 
-#: builtin/reset.c:398
+#: builtin/reset.c:404
+msgid "skip refreshing the index after reset"
+msgstr "sauter le rafraîchissement de l'index après la réinitialisation"
+
+#: builtin/reset.c:406
 msgid "reset HEAD and index"
 msgstr "réinitialiser HEAD et l'index"
 
-#: builtin/reset.c:399
+#: builtin/reset.c:407
 msgid "reset only HEAD"
 msgstr "réinitialiser seulement HEAD"
 
-#: builtin/reset.c:401 builtin/reset.c:403
+#: builtin/reset.c:409 builtin/reset.c:411
 msgid "reset HEAD, index and working tree"
 msgstr "réinitialiser HEAD, l'index et la copie de travail"
 
-#: builtin/reset.c:405
+#: builtin/reset.c:413
 msgid "reset HEAD but keep local changes"
 msgstr "réinitialiser HEAD mais garder les changements locaux"
 
-#: builtin/reset.c:411
+#: builtin/reset.c:419
 msgid "record only the fact that removed paths will be added later"
 msgstr ""
 "enregistrer seulement le fait que les chemins effacés seront ajoutés plus "
 "tard"
 
-#: builtin/reset.c:445
+#: builtin/reset.c:452
 #, c-format
 msgid "Failed to resolve '%s' as a valid revision."
 msgstr "Échec de résolution de '%s' comme une révision valide."
 
-#: builtin/reset.c:453
+#: builtin/reset.c:460
 #, c-format
 msgid "Failed to resolve '%s' as a valid tree."
 msgstr "Échec de résolution de '%s' comme un arbre valide."
 
-#: builtin/reset.c:472
+#: builtin/reset.c:479
 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
 msgstr ""
 "--mixed avec des chemins est obsolète ; utilisez 'git reset -- <paths>' à la "
 "place."
 
-#: builtin/reset.c:474
+#: builtin/reset.c:481
 #, c-format
 msgid "Cannot do %s reset with paths."
 msgstr "Impossible de faire un \"%s reset\" avec des chemins."
 
-#: builtin/reset.c:489
+#: builtin/reset.c:496
 #, c-format
 msgid "%s reset is not allowed in a bare repository"
 msgstr "Le \"%s reset\" n'est pas permis dans un dépôt nu"
 
-#: builtin/reset.c:520
+#: builtin/reset.c:527
 msgid "Unstaged changes after reset:"
 msgstr "Modifications non indexées après reset :"
 
-#: builtin/reset.c:523
+#: builtin/reset.c:530
 #, c-format
 msgid ""
-"\n"
-"It took %.2f seconds to enumerate unstaged changes after reset.  You can\n"
-"use '--quiet' to avoid this.  Set the config setting reset.quiet to true\n"
-"to make this the default.\n"
+"It took %.2f seconds to refresh the index after reset.  You can use\n"
+"'--no-refresh' to avoid this."
 msgstr ""
-"\n"
-"Les modifications non-indexées ont pris %.2f secondes à énumérer après "
-"reset.\n"
-"Vous pouvez utiliser '--quiet' pour éviter ce message. Réglez le paramètre "
-"de\n"
-"config reset.quiet à true pour avoir ce comportement en permanence.\n"
+"%.2f secondes ont été nécessaires pour rafraîchir l'index après la "
+"réinitialisation.\n"
+"Vous pouvez utiliser '--no-refresh' pour éviter ceci."
 
-#: builtin/reset.c:541
+#: builtin/reset.c:547
 #, c-format
 msgid "Could not reset index file to revision '%s'."
 msgstr "Impossible de réinitialiser le fichier d'index à la révision '%s'."
 
-#: builtin/reset.c:546
+#: builtin/reset.c:552
 msgid "Could not write new index file."
 msgstr "Impossible d'écrire le nouveau fichier d'index."
 
-#: builtin/rev-list.c:602
-msgid "object filtering requires --objects"
-msgstr "le filtrage d'objet exige --objects"
-
-#: builtin/rev-list.c:674
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr "rev-list ne supporte l'affichage des notes"
 
-#: builtin/rev-list.c:679
+#: builtin/rev-list.c:664
 #, c-format
 msgid "marked counting and '%s' cannot be used together"
 msgstr "le comptage marqué et '%s' ne peuvent pas être utilisés ensemble"
@@ -22431,11 +22932,11 @@ msgstr "champ"
 msgid "group by field"
 msgstr "grouper par champ"
 
-#: builtin/shortlog.c:394
+#: builtin/shortlog.c:395
 msgid "too many arguments given outside repository"
 msgstr "trop d'arguments fournis hors d'un dépôt"
 
-#: builtin/show-branch.c:13
+#: builtin/show-branch.c:14
 msgid ""
 "git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
 "                [--current] [--color[=<when>] | --no-color] [--sparse]\n"
@@ -22447,121 +22948,121 @@ msgstr ""
 "                [--more=<n> | --list | --independent | --merge-base]\n"
 "                [--no-name | --sha1-name] [--topics] [(<rév> | <glob>)...]"
 
-#: builtin/show-branch.c:17
+#: builtin/show-branch.c:18
 msgid "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"
 msgstr "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<référence>]"
 
-#: builtin/show-branch.c:395
+#: builtin/show-branch.c:396
 #, c-format
 msgid "ignoring %s; cannot handle more than %d ref"
 msgid_plural "ignoring %s; cannot handle more than %d refs"
 msgstr[0] "%s ignoré; impossible de gérer plus de %d référence"
 msgstr[1] "%s ignoré; impossible de gérer plus de %d références"
 
-#: builtin/show-branch.c:547
+#: builtin/show-branch.c:548
 #, c-format
 msgid "no matching refs with %s"
 msgstr "aucune référence correspond à %s"
 
-#: builtin/show-branch.c:644
+#: builtin/show-branch.c:645
 msgid "show remote-tracking and local branches"
 msgstr "afficher les branches de suivi distantes et les branches locales"
 
-#: builtin/show-branch.c:646
+#: builtin/show-branch.c:647
 msgid "show remote-tracking branches"
 msgstr "afficher les branches de suivi distantes"
 
-#: builtin/show-branch.c:648
+#: builtin/show-branch.c:649
 msgid "color '*!+-' corresponding to the branch"
 msgstr "couleur '*!+-' correspondant à la branche"
 
-#: builtin/show-branch.c:650
+#: builtin/show-branch.c:651
 msgid "show <n> more commits after the common ancestor"
 msgstr "afficher <n> validations de plus après l'ancêtre commun"
 
-#: builtin/show-branch.c:652
+#: builtin/show-branch.c:653
 msgid "synonym to more=-1"
 msgstr "synonyme de more=-1"
 
-#: builtin/show-branch.c:653
+#: builtin/show-branch.c:654
 msgid "suppress naming strings"
 msgstr "supprimer les chaînes de nommage"
 
-#: builtin/show-branch.c:655
+#: builtin/show-branch.c:656
 msgid "include the current branch"
 msgstr "inclure la branche courante"
 
-#: builtin/show-branch.c:657
+#: builtin/show-branch.c:658
 msgid "name commits with their object names"
 msgstr "nommer les validations avec leurs noms d'objet"
 
-#: builtin/show-branch.c:659
+#: builtin/show-branch.c:660
 msgid "show possible merge bases"
 msgstr "afficher les bases possibles de fusion"
 
-#: builtin/show-branch.c:661
+#: builtin/show-branch.c:662
 msgid "show refs unreachable from any other ref"
 msgstr "afficher les références inaccessibles depuis toute autre référence"
 
-#: builtin/show-branch.c:663
+#: builtin/show-branch.c:664
 msgid "show commits in topological order"
 msgstr "afficher les validations dans l'ordre topologique"
 
-#: builtin/show-branch.c:666
+#: builtin/show-branch.c:667
 msgid "show only commits not on the first branch"
 msgstr ""
 "afficher seulement les validations qui ne sont pas sur la première branche"
 
-#: builtin/show-branch.c:668
+#: builtin/show-branch.c:669
 msgid "show merges reachable from only one tip"
 msgstr "afficher les fusions accessibles depuis une seule pointe"
 
-#: builtin/show-branch.c:670
+#: builtin/show-branch.c:671
 msgid "topologically sort, maintaining date order where possible"
 msgstr "tri topologique, maintenant l'ordre par date si possible"
 
-#: builtin/show-branch.c:673
+#: builtin/show-branch.c:674
 msgid "<n>[,<base>]"
 msgstr "<n>[,<base>]"
 
-#: builtin/show-branch.c:674
+#: builtin/show-branch.c:675
 msgid "show <n> most recent ref-log entries starting at base"
 msgstr ""
 "afficher les <n> plus récents éléments de ref-log en commençant à la base"
 
-#: builtin/show-branch.c:734
+#: builtin/show-branch.c:735
 msgid "no branches given, and HEAD is not valid"
 msgstr "aucune branche spécifiée, et HEAD est invalide"
 
-#: builtin/show-branch.c:737
+#: builtin/show-branch.c:738
 msgid "--reflog option needs one branch name"
 msgstr "--reflog requiert un nom de branche"
 
-#: builtin/show-branch.c:740
+#: builtin/show-branch.c:741
 #, c-format
 msgid "only %d entry can be shown at one time."
 msgid_plural "only %d entries can be shown at one time."
 msgstr[0] "%d entrée seulement ne peut être montrée en même temps."
 msgstr[1] "%d entrées seulement ne peuvent être montrée en même temps."
 
-#: builtin/show-branch.c:744
+#: builtin/show-branch.c:745
 #, c-format
 msgid "no such ref %s"
 msgstr "référence inexistante %s"
 
-#: builtin/show-branch.c:830
+#: builtin/show-branch.c:831
 #, c-format
 msgid "cannot handle more than %d rev."
 msgid_plural "cannot handle more than %d revs."
 msgstr[0] "impossible de gérer plus de %d révision."
 msgstr[1] "impossible de gérer plus de %d révisions."
 
-#: builtin/show-branch.c:834
+#: builtin/show-branch.c:835
 #, c-format
 msgid "'%s' is not a valid ref."
 msgstr "'%s' n'est pas une référence valide."
 
-#: builtin/show-branch.c:837
+#: builtin/show-branch.c:838
 #, c-format
 msgid "cannot find commit %s (%s)"
 msgstr "impossible de trouver le commit %s (%s)"
@@ -22623,25 +23124,21 @@ msgstr ""
 "afficher les références de l'entrée standard qui ne sont pas dans le dépôt "
 "local"
 
-#: builtin/sparse-checkout.c:22
+#: builtin/sparse-checkout.c:23
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 
-#: builtin/sparse-checkout.c:46
-msgid "git sparse-checkout list"
-msgstr "git sparse-checkout list"
-
-#: builtin/sparse-checkout.c:60
+#: builtin/sparse-checkout.c:61
 msgid "this worktree is not sparse"
 msgstr "cet arbre de travail n'est pas clairsemé"
 
-#: builtin/sparse-checkout.c:75
+#: builtin/sparse-checkout.c:76
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr ""
 "cet arbre de travail n'est pas clairsemé (le fichier sparse-checkout "
 "pourrait ne pas exister)"
 
-#: builtin/sparse-checkout.c:176
+#: builtin/sparse-checkout.c:177
 #, c-format
 msgid ""
 "directory '%s' contains untracked files, but is not in the sparse-checkout "
@@ -22650,102 +23147,137 @@ msgstr ""
 "le dossier '%s' contient des fichiers non-suivis, mais n'est pas dans le "
 "cone d'extraction clairsemée"
 
-#: builtin/sparse-checkout.c:184
+#: builtin/sparse-checkout.c:185
 #, c-format
 msgid "failed to remove directory '%s'"
 msgstr "échec de suppression du répertoire '%s'"
 
-#: builtin/sparse-checkout.c:324
+#: builtin/sparse-checkout.c:327
 msgid "failed to create directory for sparse-checkout file"
 msgstr ""
 "échec de la création du répertoire pour le fichier d'extraction clairsemée"
 
-#: builtin/sparse-checkout.c:365
-msgid "unable to upgrade repository format to enable worktreeConfig"
-msgstr ""
-"impossible de mettre à jour le format de dépôt pour activer worktreeConfig"
-
-#: builtin/sparse-checkout.c:367
-msgid "failed to set extensions.worktreeConfig setting"
-msgstr "échec de paramétrage extensions.worktreeConfig"
+#: builtin/sparse-checkout.c:366
+msgid "failed to initialize worktree config"
+msgstr "échec lors de l'initialisation de la configuration d'arbre de travail"
 
 #: builtin/sparse-checkout.c:411
 msgid "failed to modify sparse-index config"
 msgstr "impossible de modifier la configuration d'index clairsemé"
 
-#: builtin/sparse-checkout.c:422
-msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
-msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
-
-#: builtin/sparse-checkout.c:441 builtin/sparse-checkout.c:729
-#: builtin/sparse-checkout.c:778
+#: builtin/sparse-checkout.c:441 builtin/sparse-checkout.c:793
+#: builtin/sparse-checkout.c:847
 msgid "initialize the sparse-checkout in cone mode"
 msgstr "initialiser l'extraction clairsemée en mode cone"
 
-#: builtin/sparse-checkout.c:443 builtin/sparse-checkout.c:731
-#: builtin/sparse-checkout.c:780
+#: builtin/sparse-checkout.c:443 builtin/sparse-checkout.c:795
+#: builtin/sparse-checkout.c:849
 msgid "toggle the use of a sparse index"
 msgstr "bascule l'utilisation d'index clairsemé"
 
-#: builtin/sparse-checkout.c:476
+#: builtin/sparse-checkout.c:479
 #, c-format
 msgid "failed to open '%s'"
 msgstr "échec à l'ouverture de '%s'"
 
-#: builtin/sparse-checkout.c:528
+#: builtin/sparse-checkout.c:531
 #, c-format
 msgid "could not normalize path %s"
 msgstr "impossible de normaliser le chemin '%s'"
 
-#: builtin/sparse-checkout.c:557
+#: builtin/sparse-checkout.c:560
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr "impossible de décoter la chaîne en style C '%s'"
 
-#: builtin/sparse-checkout.c:612 builtin/sparse-checkout.c:640
+#: builtin/sparse-checkout.c:615 builtin/sparse-checkout.c:643
 msgid "unable to load existing sparse-checkout patterns"
 msgstr "impossible de charger les motifs de l'extraction clairsemée existants"
 
-#: builtin/sparse-checkout.c:616
+#: builtin/sparse-checkout.c:619
 msgid "existing sparse-checkout patterns do not use cone mode"
 msgstr ""
 "les motifs de l'extraction clairsemée existants n'utilisent pas le mode cone"
 
-#: builtin/sparse-checkout.c:682
-msgid "git sparse-checkout add (--stdin | <patterns>)"
-msgstr "git sparse-checkout add (--stdin | <motifs>)"
+#: builtin/sparse-checkout.c:707
+msgid "please run from the toplevel directory in non-cone mode"
+msgstr ""
+"veuillez lancer depuis le répertoire de niveau supérieur en mode non-cone"
+
+#: builtin/sparse-checkout.c:712
+msgid "specify directories rather than patterns (no leading slash)"
+msgstr ""
+"spécifier les répertoires plutôt que les motifs (sans barre oblique au début)"
+
+#: builtin/sparse-checkout.c:714
+msgid ""
+"specify directories rather than patterns.  If your directory starts with a "
+"'!', pass --skip-checks"
+msgstr ""
+"spécifier les répertoires plutôt que les motifs. Si votre répertoire "
+"commence par un '!', passez --skip-checks"
+
+#: builtin/sparse-checkout.c:716
+msgid ""
+"specify directories rather than patterns.  If your directory really has any "
+"of '*?[]\\' in it, pass --skip-checks"
+msgstr ""
+"spécifier les répertoires plutôt que les motifs. Si votre répertoire "
+"contient au moins caractère '*?[]\\\\', passez --skip-checks"
+
+#: builtin/sparse-checkout.c:732
+#, c-format
+msgid ""
+"'%s' is not a directory; to treat it as a directory anyway, rerun with --"
+"skip-checks"
+msgstr ""
+"'%s' n'est pas un répertoire ; pour le traiter tout de même comme un "
+"répertoire, relancez avec --skip-checks"
+
+#: builtin/sparse-checkout.c:734
+#, c-format
+msgid ""
+"pass a leading slash before paths such as '%s' if you want a single file "
+"(see NON-CONE PROBLEMS in the git-sparse-checkout manual)."
+msgstr ""
+"passez une barre oblique en préfixe de chemins tels que '%s' si vous voulez "
+"un seul fichier (voir PROBLÈMES DE NON-CONE dans la page de manuel de git-"
+"sparse-checkout)."
+
+#: builtin/sparse-checkout.c:739
+msgid "git sparse-checkout add [--skip-checks] (--stdin | <patterns>)"
+msgstr "git sparse-checkout add [--skip-checks] (--stdin | <motifs>)"
+
+#: builtin/sparse-checkout.c:752 builtin/sparse-checkout.c:797
+msgid ""
+"skip some sanity checks on the given paths that might give false positives"
+msgstr ""
+"sauter certaines vérifications sanitaires sur les chemins indiqués qui "
+"pourraient provoquer ds faux positifs"
 
-#: builtin/sparse-checkout.c:694 builtin/sparse-checkout.c:733
+#: builtin/sparse-checkout.c:755 builtin/sparse-checkout.c:800
 msgid "read patterns from standard in"
 msgstr "lire les motifs depuis l'entrée standard"
 
-#: builtin/sparse-checkout.c:699
+#: builtin/sparse-checkout.c:760
 msgid "no sparse-checkout to add to"
 msgstr "aucun sparse-checkout auquel on peut ajouter"
 
-#: builtin/sparse-checkout.c:712
+#: builtin/sparse-checkout.c:775
 msgid ""
-"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] (--stdin | "
-"<patterns>)"
+"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] "
+"(--stdin | <patterns>)"
 msgstr ""
-"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] (--stdin | "
-"<motifs>)"
-
-#: builtin/sparse-checkout.c:765
-msgid "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
-msgstr "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
+"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] "
+"(--stdin | <motifs>)"
 
-#: builtin/sparse-checkout.c:785
+#: builtin/sparse-checkout.c:854
 msgid "must be in a sparse-checkout to reapply sparsity patterns"
 msgstr ""
 "extraction clairsemée nécessaire pour pouvoir réappliquer les motifs de "
 "clairsemage"
 
-#: builtin/sparse-checkout.c:803
-msgid "git sparse-checkout disable"
-msgstr "git sparse-checkout disable"
-
-#: builtin/sparse-checkout.c:845
+#: builtin/sparse-checkout.c:914
 msgid "error while refreshing working directory"
 msgstr "erreur lors du rafraîchissement du répertoire de travail"
 
@@ -22888,170 +23420,154 @@ msgstr "L'index n'a pas été sorti de remise."
 msgid "could not restore untracked files from stash"
 msgstr "impossible de restaurer les fichiers non-suivis depuis le remisage"
 
-#: builtin/stash.c:608 builtin/stash.c:706
+#: builtin/stash.c:608 builtin/stash.c:695
 msgid "attempt to recreate the index"
 msgstr "tentative de recréer l'index"
 
-#: builtin/stash.c:652
+#: builtin/stash.c:641
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "%s supprimé (%s)"
 
-#: builtin/stash.c:655
+#: builtin/stash.c:644
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s : Impossible de supprimer l'élément de stash"
 
-#: builtin/stash.c:668
+#: builtin/stash.c:657
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "'%s' n'est pas une référence de remisage"
 
-#: builtin/stash.c:718
+#: builtin/stash.c:707
 msgid "The stash entry is kept in case you need it again."
 msgstr ""
 "L'entrée de remisage est conservée au cas où vous en auriez encore besoin."
 
-#: builtin/stash.c:741
+#: builtin/stash.c:730
 msgid "No branch name specified"
 msgstr "Aucune branche spécifiée"
 
-#: builtin/stash.c:825
+#: builtin/stash.c:809
 msgid "failed to parse tree"
 msgstr "échec de l'analyse de l'arbre"
 
-#: builtin/stash.c:836
+#: builtin/stash.c:820
 msgid "failed to unpack trees"
 msgstr "échec du dépaquetage des arbres"
 
-#: builtin/stash.c:856
+#: builtin/stash.c:840
 msgid "include untracked files in the stash"
 msgstr "inclure les fichiers non suivis dans le remisage"
 
-#: builtin/stash.c:859
+#: builtin/stash.c:843
 msgid "only show untracked files in the stash"
 msgstr "ne montrer que les fichiers non suivis dans le remisage"
 
-#: builtin/stash.c:946 builtin/stash.c:983
+#: builtin/stash.c:930 builtin/stash.c:967
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "Impossible de mettre à jour %s avec %s"
 
-#: builtin/stash.c:964 builtin/stash.c:1678 builtin/stash.c:1750
+#: builtin/stash.c:948 builtin/stash.c:1667 builtin/stash.c:1739
 msgid "stash message"
 msgstr "message pour le remisage"
 
-#: builtin/stash.c:974
+#: builtin/stash.c:958
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" exige un argument <commit>"
 
-#: builtin/stash.c:1159
+#: builtin/stash.c:1143
 msgid "No staged changes"
 msgstr "Aucune modification indexée"
 
-#: builtin/stash.c:1220
+#: builtin/stash.c:1204
 msgid "No changes selected"
 msgstr "Aucun changement sélectionné"
 
-#: builtin/stash.c:1320
+#: builtin/stash.c:1304
 msgid "You do not have the initial commit yet"
 msgstr "Vous n'avez pas encore la validation initiale"
 
-#: builtin/stash.c:1347
+#: builtin/stash.c:1331
 msgid "Cannot save the current index state"
 msgstr "Impossible de sauver l'état courant de l'index"
 
-#: builtin/stash.c:1356
+#: builtin/stash.c:1340
 msgid "Cannot save the untracked files"
 msgstr "Impossible de sauver les fichiers non-suivis"
 
-#: builtin/stash.c:1367 builtin/stash.c:1386
+#: builtin/stash.c:1351 builtin/stash.c:1370
 msgid "Cannot save the current worktree state"
 msgstr "Impossible de sauver l'état courant de la copie de travail"
 
-#: builtin/stash.c:1377
+#: builtin/stash.c:1361
 msgid "Cannot save the current staged state"
 msgstr "Impossible de sauver l'état actuel de l'index"
 
-#: builtin/stash.c:1414
+#: builtin/stash.c:1398
 msgid "Cannot record working tree state"
 msgstr "Impossible d'enregistrer l'état de la copie de travail"
 
-#: builtin/stash.c:1463
+#: builtin/stash.c:1447
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr ""
 "Impossible d'utiliser --patch et --include-untracked ou --all en même temps"
 
-#: builtin/stash.c:1474
+#: builtin/stash.c:1458
 msgid "Can't use --staged and --include-untracked or --all at the same time"
 msgstr ""
 "Impossible d'utiliser --staged et --include-untracked ou --all en même temps"
 
-#: builtin/stash.c:1492
+#: builtin/stash.c:1476
 msgid "Did you forget to 'git add'?"
 msgstr "Vous avez sûrement oublié 'git add' ?"
 
-#: builtin/stash.c:1507
+#: builtin/stash.c:1491
 msgid "No local changes to save"
 msgstr "Pas de modifications locales à sauver"
 
-#: builtin/stash.c:1514
+#: builtin/stash.c:1498
 msgid "Cannot initialize stash"
 msgstr "Impossible d'initialiser le remisage"
 
-#: builtin/stash.c:1529
+#: builtin/stash.c:1513
 msgid "Cannot save the current status"
 msgstr "Impossible de sauver l'état courant"
 
-#: builtin/stash.c:1534
+#: builtin/stash.c:1518
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Arbre de travail et état de l'index sauvegardés dans %s"
 
-#: builtin/stash.c:1627
+#: builtin/stash.c:1615
 msgid "Cannot remove worktree changes"
 msgstr "Impossible de supprimer les changements de la copie de travail"
 
-#: builtin/stash.c:1667 builtin/stash.c:1739
+#: builtin/stash.c:1656 builtin/stash.c:1728
 msgid "keep index"
 msgstr "conserver l'index"
 
-#: builtin/stash.c:1669 builtin/stash.c:1741
+#: builtin/stash.c:1658 builtin/stash.c:1730
 msgid "stash staged changes only"
 msgstr "remiser seulement les modifications indexées"
 
-#: builtin/stash.c:1671 builtin/stash.c:1743
+#: builtin/stash.c:1660 builtin/stash.c:1732
 msgid "stash in patch mode"
 msgstr "remiser une mode rustine"
 
-#: builtin/stash.c:1672 builtin/stash.c:1744
+#: builtin/stash.c:1661 builtin/stash.c:1733
 msgid "quiet mode"
 msgstr "mode silencieux"
 
-#: builtin/stash.c:1674 builtin/stash.c:1746
+#: builtin/stash.c:1663 builtin/stash.c:1735
 msgid "include untracked files in stash"
 msgstr "inclure les fichiers non suivis dans la remise"
 
-#: builtin/stash.c:1676 builtin/stash.c:1748
+#: builtin/stash.c:1665 builtin/stash.c:1737
 msgid "include ignore files"
 msgstr "inclure les fichiers ignorés"
 
-#: builtin/stash.c:1783
-msgid ""
-"the stash.useBuiltin support has been removed!\n"
-"See its entry in 'git help config' for details."
-msgstr ""
-"la prise en charge de stash.useBuiltin a été supprimée !\n"
-"Voir son entrée dans 'git help config' pour plus de détails."
-
-#: builtin/stripspace.c:18
-msgid "git stripspace [-s | --strip-comments]"
-msgstr "git stripspace [-s | --strip-comments]"
-
-#: builtin/stripspace.c:19
-msgid "git stripspace [-c | --comment-lines]"
-msgstr "git stripspace [-c | --comment-lines]"
-
 #: builtin/stripspace.c:37
 msgid "skip and remove all lines starting with comment character"
 msgstr ""
@@ -23062,21 +23578,17 @@ msgstr ""
 msgid "prepend comment character and space to each line"
 msgstr "ajouter devant chaque ligne le caractère de commentaire et un espace"
 
-#: builtin/submodule--helper.c:46 builtin/submodule--helper.c:2668
+#: builtin/submodule--helper.c:50 builtin/submodule--helper.c:2486
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "Nom de référence complet attendu, %s obtenu"
 
-#: builtin/submodule--helper.c:63
-msgid "submodule--helper print-default-remote takes no arguments"
-msgstr "submodule--helper  print-default-remote n'accepte aucun argument"
-
-#: builtin/submodule--helper.c:101
+#: builtin/submodule--helper.c:103
 #, c-format
 msgid "cannot strip one component off url '%s'"
 msgstr "impossible de supprimer un composant de l'URL '%s'"
 
-#: builtin/submodule--helper.c:211
+#: builtin/submodule--helper.c:213
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
@@ -23085,26 +23597,26 @@ msgstr ""
 "impossible de trouver la configuration '%s'. Ce dépôt est considéré comme "
 "son propre amont d'autorité."
 
-#: builtin/submodule--helper.c:405 builtin/submodule--helper.c:1859
+#: builtin/submodule--helper.c:413 builtin/submodule--helper.c:1873
 msgid "alternative anchor for relative paths"
 msgstr "ancre alternative pour les chemins relatifs"
 
-#: builtin/submodule--helper.c:410
+#: builtin/submodule--helper.c:418
 msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper list [--prefix=<chemin>] [<chemin>...]"
 
-#: builtin/submodule--helper.c:468 builtin/submodule--helper.c:605
-#: builtin/submodule--helper.c:628
+#: builtin/submodule--helper.c:476 builtin/submodule--helper.c:617
+#: builtin/submodule--helper.c:640
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr "URL non trouvée pour le chemin de sous-module '%s' dans .gitmodules"
 
-#: builtin/submodule--helper.c:520
+#: builtin/submodule--helper.c:528
 #, c-format
 msgid "Entering '%s'\n"
 msgstr "Entrée dans '%s'\n"
 
-#: builtin/submodule--helper.c:523
+#: builtin/submodule--helper.c:531
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
@@ -23113,7 +23625,7 @@ msgstr ""
 "run_command a retourné un statut non-nul pour %s\n"
 "."
 
-#: builtin/submodule--helper.c:545
+#: builtin/submodule--helper.c:553
 #, c-format
 msgid ""
 "run_command returned non-zero status while recursing in the nested "
@@ -23124,74 +23636,74 @@ msgstr ""
 "modules inclus de %s\n"
 "."
 
-#: builtin/submodule--helper.c:561
+#: builtin/submodule--helper.c:569
 msgid "suppress output of entering each submodule command"
 msgstr ""
 "supprimer la sortie lors de l'entrée dans chaque commande de sous-module"
 
-#: builtin/submodule--helper.c:563 builtin/submodule--helper.c:864
-#: builtin/submodule--helper.c:1453
+#: builtin/submodule--helper.c:571 builtin/submodule--helper.c:876
+#: builtin/submodule--helper.c:1458
 msgid "recurse into nested submodules"
 msgstr "parcourir récursivement les sous-modules"
 
-#: builtin/submodule--helper.c:568
+#: builtin/submodule--helper.c:576
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr "git submodule--helper foreach [--quiet] [--recursive] [--] <commande>"
 
-#: builtin/submodule--helper.c:642
+#: builtin/submodule--helper.c:654
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr "Échec d'enregistrement de l'URL pour le chemin de sous-module '%s'"
 
-#: builtin/submodule--helper.c:646
+#: builtin/submodule--helper.c:658
 #, c-format
 msgid "Submodule '%s' (%s) registered for path '%s'\n"
 msgstr "Sous-module '%s' (%s) enregistré pour le chemin '%s'\n"
 
-#: builtin/submodule--helper.c:656
+#: builtin/submodule--helper.c:668
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr ""
 "attention : nous vous suggérons de spécifier une commande de mode de mise à "
 "jour pour le sous-module '%s'\n"
 
-#: builtin/submodule--helper.c:663
+#: builtin/submodule--helper.c:675
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr ""
 "Échec d'enregistrement du mode de mise à jour pour le chemin de sous-module "
 "'%s'"
 
-#: builtin/submodule--helper.c:685
+#: builtin/submodule--helper.c:697
 msgid "suppress output for initializing a submodule"
 msgstr "supprimer la sortie lors de l'initialisation d'un sous-module"
 
-#: builtin/submodule--helper.c:690
+#: builtin/submodule--helper.c:702
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr "git submodule--helper init [<options>] [<chemin>]"
 
-#: builtin/submodule--helper.c:763 builtin/submodule--helper.c:898
+#: builtin/submodule--helper.c:775 builtin/submodule--helper.c:910
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr ""
 "pas de mise en correspondance du sous-module trouvé dans .gitmodules pour le "
 "chemin '%s'"
 
-#: builtin/submodule--helper.c:811
+#: builtin/submodule--helper.c:823
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr "impossible de résoudre HEAD dans le sous-module '%s'"
 
-#: builtin/submodule--helper.c:838 builtin/submodule--helper.c:1423
+#: builtin/submodule--helper.c:850 builtin/submodule--helper.c:1428
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "récursion impossible dans le sous-module '%s'"
 
-#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1590
+#: builtin/submodule--helper.c:874 builtin/submodule--helper.c:1595
 msgid "suppress submodule status output"
 msgstr "supprimer la sortie d'état du sous-module"
 
-#: builtin/submodule--helper.c:863
+#: builtin/submodule--helper.c:875
 msgid ""
 "use commit stored in the index instead of the one stored in the submodule "
 "HEAD"
@@ -23199,94 +23711,94 @@ msgstr ""
 "utiliser le commit stocké dans l'index au lieu de celui stocké dans la HEAD "
 "du sous-module"
 
-#: builtin/submodule--helper.c:869
+#: builtin/submodule--helper.c:881
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr "git submodule status [--quiet] [--cached] [--recursive] [<chemin>...]"
 
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:905
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper <nom> <chemin>"
 
-#: builtin/submodule--helper.c:965
+#: builtin/submodule--helper.c:977
 #, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr "* %s %s(blob)->%s(submodule)"
 
-#: builtin/submodule--helper.c:968
+#: builtin/submodule--helper.c:980
 #, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr "* %s %s(submodule)->%s(blob)"
 
-#: builtin/submodule--helper.c:981
+#: builtin/submodule--helper.c:993
 #, c-format
 msgid "%s"
 msgstr "%s"
 
-#: builtin/submodule--helper.c:1031
+#: builtin/submodule--helper.c:1043
 #, c-format
 msgid "couldn't hash object from '%s'"
 msgstr "impossible de calculer l'empreinte de l'objet depuis '%s'"
 
-#: builtin/submodule--helper.c:1035
+#: builtin/submodule--helper.c:1047
 #, c-format
 msgid "unexpected mode %o\n"
 msgstr "mode %o inattendu\n"
 
-#: builtin/submodule--helper.c:1276
+#: builtin/submodule--helper.c:1288
 msgid "use the commit stored in the index instead of the submodule HEAD"
 msgstr ""
 "utiliser le commit stocké dans l'index au lieu de la HEAD du sous-module"
 
-#: builtin/submodule--helper.c:1278
+#: builtin/submodule--helper.c:1290
 msgid "compare the commit in the index with that in the submodule HEAD"
 msgstr "comparer le commit dans l'index avec celui dans la HEAD du sous-module"
 
-#: builtin/submodule--helper.c:1280
+#: builtin/submodule--helper.c:1292
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr "sauter les sous-modules avec la valeur 'ignore_config' à 'all'"
 
-#: builtin/submodule--helper.c:1282
+#: builtin/submodule--helper.c:1294
 msgid "limit the summary size"
 msgstr "limiter la taille du résumé"
 
-#: builtin/submodule--helper.c:1287
+#: builtin/submodule--helper.c:1299
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr "git submodule--helper summary [<options>] [<commit>] [--] [<chemin>]"
 
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1323
 msgid "could not fetch a revision for HEAD"
 msgstr "impossible de récupérer une révision pour HEAD"
 
-#: builtin/submodule--helper.c:1373
+#: builtin/submodule--helper.c:1384
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr "Synchronisation de l'URL sous-module pour '%s'\n"
 
-#: builtin/submodule--helper.c:1379
+#: builtin/submodule--helper.c:1390
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr "échec d'enregistrement de l'URL pour le chemin de sous-module '%s'"
 
-#: builtin/submodule--helper.c:1393
+#: builtin/submodule--helper.c:1399
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr "échec d'obtention du dépôt distant par défaut pour le sous-module '%s'"
 
-#: builtin/submodule--helper.c:1404
+#: builtin/submodule--helper.c:1409
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr "échec de mise à jour du dépôt distant pour le sous-module '%s'"
 
-#: builtin/submodule--helper.c:1451
+#: builtin/submodule--helper.c:1456
 msgid "suppress output of synchronizing submodule url"
 msgstr ""
 "supprimer la sortie lors de la synchronisation de l'URL d'un sous-module"
 
-#: builtin/submodule--helper.c:1458
+#: builtin/submodule--helper.c:1463
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<chemin>]"
 
-#: builtin/submodule--helper.c:1508
+#: builtin/submodule--helper.c:1513
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory. This will be replaced "
@@ -23295,7 +23807,7 @@ msgstr ""
 "L'arbre de travail du sous-module '%s' contient un répertoire .git. Il sera "
 "remplacé par un fichier .git en utilisant absorbgitdirs."
 
-#: builtin/submodule--helper.c:1525
+#: builtin/submodule--helper.c:1530
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
@@ -23304,48 +23816,48 @@ msgstr ""
 "L'arbre de travail du sous-module '%s' contient des modifications locales ; "
 "utilisez '-f' pour les annuler"
 
-#: builtin/submodule--helper.c:1533
+#: builtin/submodule--helper.c:1538
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "Répertoire '%s' nettoyé\n"
 
-#: builtin/submodule--helper.c:1535
+#: builtin/submodule--helper.c:1540
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr "Impossible de supprimer l'arbre de travail du sous-module '%s'\n"
 
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1551
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr "impossible de créer le répertoire vide du sous-module %s"
 
-#: builtin/submodule--helper.c:1562
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr "Sous-module '%s' (%s) non enregistré pour le chemin '%s'\n"
 
-#: builtin/submodule--helper.c:1591
+#: builtin/submodule--helper.c:1596
 msgid "remove submodule working trees even if they contain local changes"
 msgstr ""
 "éliminer les arbres de travail des sous-modules même s'ils contiennent des "
 "modifications locales"
 
-#: builtin/submodule--helper.c:1592
+#: builtin/submodule--helper.c:1597
 msgid "unregister all submodules"
 msgstr "désenregistrer tous les sous-modules"
 
-#: builtin/submodule--helper.c:1597
+#: builtin/submodule--helper.c:1602
 msgid ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
 msgstr ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<chemin>...]]"
 
-#: builtin/submodule--helper.c:1611
+#: builtin/submodule--helper.c:1616
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr ""
 "Utilisez '--all' si vous voulez vraiment réinitialiser tous les sous-modules"
 
-#: builtin/submodule--helper.c:1656
+#: builtin/submodule--helper.c:1665
 msgid ""
 "An alternate computed from a superproject's alternate is invalid.\n"
 "To allow Git to clone without an alternate in such a case, set\n"
@@ -23357,104 +23869,101 @@ msgstr ""
 "submodule.alternateErrorStrategy à 'info', ou de manière équivalente,\n"
 "clonez avec '--reference-if-able' au lieu de '--reference'."
 
-#: builtin/submodule--helper.c:1701 builtin/submodule--helper.c:1704
+#: builtin/submodule--helper.c:1710 builtin/submodule--helper.c:1713
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "le sous-module '%s' ne peut pas ajouter d'alternative : %s"
 
-#: builtin/submodule--helper.c:1740
+#: builtin/submodule--helper.c:1749
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr ""
 "La valeur '%s' pour submodule.alternateErrorStrategy n'est pas reconnue"
 
-#: builtin/submodule--helper.c:1747
+#: builtin/submodule--helper.c:1756
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "La valeur '%s' pour submodule.alternateLocation n'est pas reconnue"
 
-#: builtin/submodule--helper.c:1772
+#: builtin/submodule--helper.c:1781
 #, c-format
 msgid "refusing to create/use '%s' in another submodule's git dir"
 msgstr ""
 "refus de créer/utiliser '%s' dans un répertoire git d'un autre sous-module"
 
-#: builtin/submodule--helper.c:1813
+#: builtin/submodule--helper.c:1826
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
 msgstr "le clonage de '%s' dans le chemin de sous-module '%s' a échoué"
 
-#: builtin/submodule--helper.c:1818
+#: builtin/submodule--helper.c:1831
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr "le répertoire n'est pas vide : '%s'"
 
-#: builtin/submodule--helper.c:1830
+#: builtin/submodule--helper.c:1843
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr "impossible de créer le répertoire de sous-module pour '%s'"
 
-#: builtin/submodule--helper.c:1862
+#: builtin/submodule--helper.c:1876
 msgid "where the new submodule will be cloned to"
 msgstr "emplacement où le sous-module sera cloné"
 
-#: builtin/submodule--helper.c:1865
+#: builtin/submodule--helper.c:1879
 msgid "name of the new submodule"
 msgstr "nom du nouveau sous-module"
 
-#: builtin/submodule--helper.c:1868
+#: builtin/submodule--helper.c:1882
 msgid "url where to clone the submodule from"
 msgstr "url depuis laquelle cloner le sous-module"
 
-#: builtin/submodule--helper.c:1876 builtin/submodule--helper.c:3265
+#: builtin/submodule--helper.c:1890 builtin/submodule--helper.c:3383
 msgid "depth for shallow clones"
 msgstr "profondeur de l'historique des clones superficiels"
 
-#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:2526
-#: builtin/submodule--helper.c:3258
+#: builtin/submodule--helper.c:1893 builtin/submodule--helper.c:2731
+#: builtin/submodule--helper.c:3376
 msgid "force cloning progress"
 msgstr "forcer l'affichage de la progression du clonage"
 
-#: builtin/submodule--helper.c:1881 builtin/submodule--helper.c:2528
+#: builtin/submodule--helper.c:1895 builtin/submodule--helper.c:2733
 msgid "disallow cloning into non-empty directory"
 msgstr "interdire de cloner dans un répertoire non-vide"
 
-#: builtin/submodule--helper.c:1888
+#: builtin/submodule--helper.c:1903
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
-"<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
-"<url> --path <path>"
-msgstr ""
-"git submodule--helper clone [--prefix=<chemin>] [--quiet] [--reference "
-"<dépôt>] [--name <nom>] [--depth <profondeur>] [--single-branch] --url <url> "
-"--path <chemin>"
+"<repository>] [--name <name>] [--depth <depth>] [--single-branch] [--filter "
+"<filter-spec>] --url <url> --path <path>"
+msgstr "git submodule--helper clone [--prefix=<chemin>] [--quiet] [--reference <dépôt>] [--name <nom>] [--depth <profondeur>] [--single-branch] [--filter <spécificateur-de-filtre>]--url <url> --path <chemin>"
 
-#: builtin/submodule--helper.c:1925
+#: builtin/submodule--helper.c:1943
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr "Mode de mise à jour '%s' invalide pour le chemin de sous-module '%s'"
 
-#: builtin/submodule--helper.c:1929
+#: builtin/submodule--helper.c:1947
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr ""
 "Mode de mise à jour '%s'invalide configuré pour le chemin de sous-module '%s'"
 
-#: builtin/submodule--helper.c:2044
+#: builtin/submodule--helper.c:2041
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "Le chemin de sous-module '%s' n'est pas initialisé"
 
-#: builtin/submodule--helper.c:2048
+#: builtin/submodule--helper.c:2045
 msgid "Maybe you want to use 'update --init'?"
 msgstr "Vous voudriez sûrement utiliser 'update --init' ?"
 
-#: builtin/submodule--helper.c:2078
+#: builtin/submodule--helper.c:2075
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "Sous-module non fusionné %s non traité"
 
-#: builtin/submodule--helper.c:2107
+#: builtin/submodule--helper.c:2104
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "Sous-module '%s' non traité"
@@ -23469,54 +23978,54 @@ msgstr "Impossible de cloner '%s'. Réessai prévu"
 msgid "Failed to clone '%s' a second time, aborting"
 msgstr "Impossible de cloner '%s' pour la seconde fois, abandon"
 
-#: builtin/submodule--helper.c:2373
+#: builtin/submodule--helper.c:2371
 #, c-format
 msgid "Unable to checkout '%s' in submodule path '%s'"
 msgstr "Impossible d'extraire '%s' dans le chemin de sous-module '%s'"
 
-#: builtin/submodule--helper.c:2377
+#: builtin/submodule--helper.c:2375
 #, c-format
 msgid "Unable to rebase '%s' in submodule path '%s'"
 msgstr "Impossible de rebaser '%s' dans le chemin de sous-module '%s'"
 
-#: builtin/submodule--helper.c:2381
+#: builtin/submodule--helper.c:2379
 #, c-format
 msgid "Unable to merge '%s' in submodule path '%s'"
 msgstr "Impossible de fusionner '%s' dans le chemin de sous-module '%s'"
 
-#: builtin/submodule--helper.c:2385
+#: builtin/submodule--helper.c:2383
 #, c-format
 msgid "Execution of '%s %s' failed in submodule path '%s'"
 msgstr "L'exécution de '%s %s' a échoué dans le chemin de sous-module '%s'"
 
-#: builtin/submodule--helper.c:2409
+#: builtin/submodule--helper.c:2402
 #, c-format
 msgid "Submodule path '%s': checked out '%s'\n"
 msgstr "Chemin de sous-module '%s' : '%s' extrait\n"
 
-#: builtin/submodule--helper.c:2413
+#: builtin/submodule--helper.c:2406
 #, c-format
 msgid "Submodule path '%s': rebased into '%s'\n"
 msgstr "Chemin de sous-module '%s' : rebasé dans '%s'\n"
 
-#: builtin/submodule--helper.c:2417
+#: builtin/submodule--helper.c:2410
 #, c-format
 msgid "Submodule path '%s': merged in '%s'\n"
 msgstr "Chemin de sous-module '%s' : fusionné dans '%s'\n"
 
-#: builtin/submodule--helper.c:2421
+#: builtin/submodule--helper.c:2414
 #, c-format
 msgid "Submodule path '%s': '%s %s'\n"
 msgstr "Le chemin de sous-module '%s' : '%s %s'\n"
 
-#: builtin/submodule--helper.c:2445
+#: builtin/submodule--helper.c:2438
 #, c-format
 msgid "Unable to fetch in submodule path '%s'; trying to directly fetch %s:"
 msgstr ""
 "Impossible de rapatrier dans le chemin de sous-module '%s' ; essai de "
 "rapatriement direct de %s :"
 
-#: builtin/submodule--helper.c:2454
+#: builtin/submodule--helper.c:2447
 #, c-format
 msgid ""
 "Fetched in submodule path '%s', but it did not contain %s. Direct fetching "
@@ -23525,183 +24034,211 @@ msgstr ""
 "Chemin de sous-module '%s' récupéré, mais il ne contenait pas %s. La "
 "récupération directe de ce commit a échoué."
 
-#: builtin/submodule--helper.c:2505 builtin/submodule--helper.c:2575
-#: builtin/submodule--helper.c:2813
+#: builtin/submodule--helper.c:2481
+#, c-format
+msgid ""
+"Submodule (%s) branch configured to inherit branch from superproject, but "
+"the superproject is not on any branch"
+msgstr ""
+"La branche du sous-module %s est configurée pour hériter de la branche du "
+"superprojet, mais le superprojet n'est sur aucune branche"
+
+#: builtin/submodule--helper.c:2499
+#, c-format
+msgid "could not get a repository handle for submodule '%s'"
+msgstr "impossible de trouver une poignée de dépôt pour le sous-module '%s'"
+
+#: builtin/submodule--helper.c:2588
+#, c-format
+msgid "Unable to find current revision in submodule path '%s'"
+msgstr ""
+"Impossible de trouver la révision actuelle dans le chemin de sous-module '%s'"
+
+#: builtin/submodule--helper.c:2599
+#, c-format
+msgid "Unable to fetch in submodule path '%s'"
+msgstr "Impossible de rapatrier dans le chemin de sous-module '%s'"
+
+#: builtin/submodule--helper.c:2604
+#, c-format
+msgid "Unable to find %s revision in submodule path '%s'"
+msgstr ""
+"Impossible de trouver la révision %s dans le chemin de sous-module '%s'"
+
+#: builtin/submodule--helper.c:2640
+#, c-format
+msgid "Failed to recurse into submodule path '%s'"
+msgstr "Échec de la récursion dans le chemin de sous-module '%s'"
+
+#: builtin/submodule--helper.c:2699
+msgid "force checkout updates"
+msgstr "forcer les mises à jour d'extraction"
+
+#: builtin/submodule--helper.c:2701
+msgid "initialize uninitialized submodules before update"
+msgstr "initialiser les sous-modules non-initialisés avant la mise à jour"
+
+#: builtin/submodule--helper.c:2703
+msgid "use SHA-1 of submodule's remote tracking branch"
+msgstr "utiliser les SHA-1 de la branche de suivi distante du sous-module"
+
+#: builtin/submodule--helper.c:2705
+msgid "traverse submodules recursively"
+msgstr "traverser les sous-modules récursivement"
+
+#: builtin/submodule--helper.c:2707
+msgid "don't fetch new objects from the remote site"
+msgstr "ne pas récupérer les nouveaux objets depuis le site distant"
+
+#: builtin/submodule--helper.c:2710 builtin/submodule--helper.c:2892
 msgid "path into the working tree"
 msgstr "chemin dans la copie de travail"
 
-#: builtin/submodule--helper.c:2508 builtin/submodule--helper.c:2580
+#: builtin/submodule--helper.c:2713
 msgid "path into the working tree, across nested submodule boundaries"
 msgstr ""
 "chemin dans la copie de travail, traversant les frontières de sous-modules"
 
-#: builtin/submodule--helper.c:2512 builtin/submodule--helper.c:2578
+#: builtin/submodule--helper.c:2717
 msgid "rebase, merge, checkout or none"
 msgstr "valeurs possibles : rebase, merge, checkout ou none"
 
-#: builtin/submodule--helper.c:2518
+#: builtin/submodule--helper.c:2723
 msgid "create a shallow clone truncated to the specified number of revisions"
 msgstr "créer un clone superficiel tronqué au nombre de révisions spécifié"
 
-#: builtin/submodule--helper.c:2521
+#: builtin/submodule--helper.c:2726
 msgid "parallel jobs"
 msgstr "jobs parallèles"
 
-#: builtin/submodule--helper.c:2523
+#: builtin/submodule--helper.c:2728
 msgid "whether the initial clone should follow the shallow recommendation"
 msgstr "spécifie si le clonage initial doit être aussi superficiel"
 
-#: builtin/submodule--helper.c:2524
+#: builtin/submodule--helper.c:2729
 msgid "don't print cloning progress"
 msgstr "ne pas afficher la progression du clonage"
 
-#: builtin/submodule--helper.c:2535
-msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
-msgstr "git submodule--helper update-clone [--prefix=<chemin>] [<chemin>...]"
-
-#: builtin/submodule--helper.c:2548
-msgid "bad value for update parameter"
-msgstr "valeur invalide pour la mise à jour du paramètre"
-
-#: builtin/submodule--helper.c:2566
-msgid "suppress output for update by rebase or merge"
-msgstr ""
-"supprimer la sortie lors de la mise à jour par un rebasage ou une fusion"
-
-#: builtin/submodule--helper.c:2567
-msgid "force checkout updates"
-msgstr "forcer les mises à jour d'extraction"
-
-#: builtin/submodule--helper.c:2569
-msgid "don't fetch new objects from the remote site"
-msgstr "ne pas récupérer les nouveaux objets depuis le site distant"
-
-#: builtin/submodule--helper.c:2571
-msgid "overrides update mode in case the repository is a fresh clone"
-msgstr ""
-"passer outre le mode mise à jour dans le cas où le dépôt est un clone nouveau"
-
-#: builtin/submodule--helper.c:2572
-msgid "depth for shallow fetch"
-msgstr "profondeur pour une récupération superficielle"
-
-#: builtin/submodule--helper.c:2582
-msgid "sha1"
-msgstr "sha1"
-
-#: builtin/submodule--helper.c:2583
-msgid "SHA1 expected by superproject"
-msgstr "SHA1 attendu par le super-projet"
-
-#: builtin/submodule--helper.c:2585
-msgid "subsha1"
-msgstr "sous-sha1"
-
-#: builtin/submodule--helper.c:2586
-msgid "SHA1 of submodule's HEAD"
-msgstr "SHA1 de la HEAD du sous-module"
-
-#: builtin/submodule--helper.c:2592
-msgid "git submodule--helper run-update-procedure [<options>] <path>"
-msgstr "git submodule--helper run-update-procedure [<options>] <chemin>"
-
-#: builtin/submodule--helper.c:2663
-#, c-format
+#: builtin/submodule--helper.c:2741
 msgid ""
-"Submodule (%s) branch configured to inherit branch from superproject, but "
-"the superproject is not on any branch"
+"git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] "
+"[-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-"
+"shallow] [--reference <repository>] [--recursive] [--[no-]single-branch] "
+"[--] [<path>...]"
 msgstr ""
-"La branche du sous-module %s est configurée pour hériter de la branche du "
-"superprojet, mais le superprojet n'est sur aucune branche"
+"git submodule [--quiet] update [--init [--filter=<spécificateur-de-filtre>]] "
+"[--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--"
+"[no-]recommend-shallow] [--reference <dépôt>] [--recursive] [--[no-]single-"
+"branch] [--] [<chemin>...]"
 
-#: builtin/submodule--helper.c:2781
-#, c-format
-msgid "could not get a repository handle for submodule '%s'"
-msgstr "impossible de trouver une poignée de dépôt pour le sous-module '%s'"
+#: builtin/submodule--helper.c:2767
+msgid "bad value for update parameter"
+msgstr "valeur invalide pour la mise à jour du paramètre"
 
-#: builtin/submodule--helper.c:2814
+#: builtin/submodule--helper.c:2893
 msgid "recurse into submodules"
 msgstr "parcourir récursivement les sous-modules"
 
-#: builtin/submodule--helper.c:2820
+#: builtin/submodule--helper.c:2899
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr "git submodule--helper absorb-git-dirs [<options>] [<chemin>...]"
 
-#: builtin/submodule--helper.c:2876
+#: builtin/submodule--helper.c:2955
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr "vérifier si écrire dans le fichier .gitmodules est sur"
 
-#: builtin/submodule--helper.c:2879
+#: builtin/submodule--helper.c:2958
 msgid "unset the config in the .gitmodules file"
 msgstr "désactiver la configuration dans le fichier .gitmodules"
 
-#: builtin/submodule--helper.c:2884
+#: builtin/submodule--helper.c:2963
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config name [<valeur>]"
 
-#: builtin/submodule--helper.c:2885
+#: builtin/submodule--helper.c:2964
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset <nom>"
 
-#: builtin/submodule--helper.c:2886
-msgid "git submodule--helper config --check-writeable"
-msgstr "git submodule--helper config --check-writeable"
-
-#: builtin/submodule--helper.c:2905 builtin/submodule--helper.c:3121
-#: builtin/submodule--helper.c:3277
+#: builtin/submodule--helper.c:2984 builtin/submodule--helper.c:3238
+#: builtin/submodule--helper.c:3395
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr ""
 "veuillez vous assurer que le fichier .gitmodules est dans l'arbre de travail"
 
-#: builtin/submodule--helper.c:2921
+#: builtin/submodule--helper.c:3000
 msgid "suppress output for setting url of a submodule"
 msgstr "supprimer la sortie lors du paramétrage de l'url d'un sous-module"
 
-#: builtin/submodule--helper.c:2925
+#: builtin/submodule--helper.c:3004
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr "git submodule--helper sync [--quiet] <chemin> <nouvelle-url>"
 
-#: builtin/submodule--helper.c:2958
+#: builtin/submodule--helper.c:3037
 msgid "set the default tracking branch to master"
 msgstr "régler la branche de suivi par défaut à master"
 
-#: builtin/submodule--helper.c:2960
+#: builtin/submodule--helper.c:3039
 msgid "set the default tracking branch"
 msgstr "régler la branche de suivi par défaut"
 
-#: builtin/submodule--helper.c:2964
+#: builtin/submodule--helper.c:3043
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr "git submodule--helper set-branch [-q|--quiet] (-d|--default) <chemin>"
 
-#: builtin/submodule--helper.c:2965
+#: builtin/submodule--helper.c:3044
 msgid ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 msgstr ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branche> "
 "<chemin>"
 
-#: builtin/submodule--helper.c:2972
+#: builtin/submodule--helper.c:3051
 msgid "--branch or --default required"
 msgstr "--branch ou --default requis"
 
-#: builtin/submodule--helper.c:3038
-#, c-format
-msgid "Adding existing repo at '%s' to the index\n"
-msgstr "Ajout du dépôt existant à '%s' dans l'index\n"
-
-#: builtin/submodule--helper.c:3041
+#: builtin/submodule--helper.c:3072 builtin/submodule--helper.c:3375
+msgid "print only error messages"
+msgstr "afficher seulement les messages d'erreur"
+
+#: builtin/submodule--helper.c:3073
+msgid "force creation"
+msgstr "forcer la création"
+
+#: builtin/submodule--helper.c:3081
+msgid "show whether the branch would be created"
+msgstr "afficher si la branche serait créée"
+
+#: builtin/submodule--helper.c:3085
+msgid ""
+"git submodule--helper create-branch [-f|--force] [--create-reflog] [-q|--"
+"quiet] [-t|--track] [-n|--dry-run] <name> <start-oid> <start-name>"
+msgstr ""
+"git submodule--helper create-branch [-f|--force] [--create-reflog] [-q|--"
+"quiet] [-t|--track] [-n|--dry-run] <nom> <oid-départ> <nom-de-départ>"
+
+#: builtin/submodule--helper.c:3097
+#, c-format
+msgid "creating branch '%s'"
+msgstr "création de la branche '%s'"
+
+#: builtin/submodule--helper.c:3155
+#, c-format
+msgid "Adding existing repo at '%s' to the index\n"
+msgstr "Ajout du dépôt existant à '%s' dans l'index\n"
+
+#: builtin/submodule--helper.c:3158
 #, c-format
 msgid "'%s' already exists and is not a valid git repo"
 msgstr "'%s' existe déjà et n'est pas un dépôt git valide"
 
-#: builtin/submodule--helper.c:3054
+#: builtin/submodule--helper.c:3171
 #, c-format
 msgid "A git directory for '%s' is found locally with remote(s):\n"
 msgstr ""
 "Un répertoire git pour '%s' est trouvé en local avec le(s) serveur(s) "
 "distant(s) :\n"
 
-#: builtin/submodule--helper.c:3061
+#: builtin/submodule--helper.c:3178
 #, c-format
 msgid ""
 "If you want to reuse this local git directory instead of cloning again from\n"
@@ -23718,54 +24255,50 @@ msgstr ""
 "correct\n"
 "ou si ceci n'est pas clair, choisissez un autre nom avec l'option '--name'."
 
-#: builtin/submodule--helper.c:3073
+#: builtin/submodule--helper.c:3190
 #, c-format
 msgid "Reactivating local git directory for submodule '%s'\n"
 msgstr "Réactivation du répertoire git local pour le sous-module '%s'\n"
 
-#: builtin/submodule--helper.c:3110
+#: builtin/submodule--helper.c:3227
 #, c-format
 msgid "unable to checkout submodule '%s'"
 msgstr "Impossible d'extraire le sous-module '%s'"
 
-#: builtin/submodule--helper.c:3149
+#: builtin/submodule--helper.c:3266
 #, c-format
 msgid "Failed to add submodule '%s'"
 msgstr "Échec d'ajout du sous-module '%s'"
 
-#: builtin/submodule--helper.c:3153 builtin/submodule--helper.c:3158
-#: builtin/submodule--helper.c:3166
+#: builtin/submodule--helper.c:3270 builtin/submodule--helper.c:3275
+#: builtin/submodule--helper.c:3283
 #, c-format
 msgid "Failed to register submodule '%s'"
 msgstr "Échec d'enregistrement du sous-module '%s'"
 
-#: builtin/submodule--helper.c:3222
+#: builtin/submodule--helper.c:3339
 #, c-format
 msgid "'%s' already exists in the index"
 msgstr "'%s' existe déjà dans l'index"
 
-#: builtin/submodule--helper.c:3225
+#: builtin/submodule--helper.c:3342
 #, c-format
 msgid "'%s' already exists in the index and is not a submodule"
 msgstr "'%s' existe déjà dans l'index et n'est pas un sous-module"
 
-#: builtin/submodule--helper.c:3254
+#: builtin/submodule--helper.c:3372
 msgid "branch of repository to add as submodule"
 msgstr "la branche du dépôt à ajouter comme sous-module"
 
-#: builtin/submodule--helper.c:3255
+#: builtin/submodule--helper.c:3373
 msgid "allow adding an otherwise ignored submodule path"
 msgstr "permettre l'ajout des chemins de modules ignorés par ailleurs"
 
-#: builtin/submodule--helper.c:3257
-msgid "print only error messages"
-msgstr "afficher seulement les messages d'erreur"
-
-#: builtin/submodule--helper.c:3261
+#: builtin/submodule--helper.c:3379
 msgid "borrow the objects from reference repositories"
 msgstr "emprunter les objets depuis des dépôts de références"
 
-#: builtin/submodule--helper.c:3263
+#: builtin/submodule--helper.c:3381
 msgid ""
 "sets the submodule’s name to the given string instead of defaulting to its "
 "path"
@@ -23773,32 +24306,32 @@ msgstr ""
 "configurer le nom du sous-module avec la chaîne fournie au lieu d'utiliser "
 "par défaut son chemin"
 
-#: builtin/submodule--helper.c:3270
+#: builtin/submodule--helper.c:3388
 msgid "git submodule--helper add [<options>] [--] <repository> [<path>]"
 msgstr "git submodule--helper add [<options>] [--] <dépôt> [<chemin>]"
 
-#: builtin/submodule--helper.c:3298
+#: builtin/submodule--helper.c:3416
 msgid "Relative path can only be used from the toplevel of the working tree"
 msgstr ""
 "Un chemin relatif ne peut être utilisé que depuis la racine de la copie de "
 "travail"
 
-#: builtin/submodule--helper.c:3306
+#: builtin/submodule--helper.c:3425
 #, c-format
 msgid "repo URL: '%s' must be absolute or begin with ./|../"
 msgstr "l'URL de dépôt : '%s' doit être absolu ou commencer par ./|../"
 
-#: builtin/submodule--helper.c:3341
+#: builtin/submodule--helper.c:3460
 #, c-format
 msgid "'%s' is not a valid submodule name"
 msgstr "'%s' n'est pas un nom valide de sous-module"
 
-#: builtin/submodule--helper.c:3405 git.c:452 git.c:726
+#: builtin/submodule--helper.c:3520 git.c:453 git.c:729
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s ne gère pas --super-prefix"
 
-#: builtin/submodule--helper.c:3411
+#: builtin/submodule--helper.c:3526
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "'%s' n'est pas une sous-commande valide de submodule--helper"
@@ -23832,7 +24365,7 @@ msgstr "raison"
 msgid "reason of the update"
 msgstr "raison de la mise à jour"
 
-#: builtin/tag.c:25
+#: builtin/tag.c:26
 msgid ""
 "git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]\n"
 "        <tagname> [<head>]"
@@ -23840,11 +24373,11 @@ msgstr ""
 "git tag [-a | -s | -u <id-clé>] [-f] [-m <msg> | -F <fichier>]\n"
 "        <nom-d-étiquette> [<tête>]"
 
-#: builtin/tag.c:27
+#: builtin/tag.c:28
 msgid "git tag -d <tagname>..."
 msgstr "git tag -d <nom-d-étiquette>..."
 
-#: builtin/tag.c:28
+#: builtin/tag.c:29
 msgid ""
 "git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--"
 "points-at <object>]\n"
@@ -23856,21 +24389,21 @@ msgstr ""
 "        [--format=<format>] [--merged <commit>] [--no-merged <commit>] "
 "[<motif>...]"
 
-#: builtin/tag.c:30
+#: builtin/tag.c:31
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr "git tag -v [--format=<format>] <nom-d-étiquette>..."
 
-#: builtin/tag.c:100
+#: builtin/tag.c:101
 #, c-format
 msgid "tag '%s' not found."
 msgstr "étiquette '%s' non trouvée."
 
-#: builtin/tag.c:135
+#: builtin/tag.c:136
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr "Étiquette '%s' supprimée (elle était sur %s)\n"
 
-#: builtin/tag.c:170
+#: builtin/tag.c:171
 #, c-format
 msgid ""
 "\n"
@@ -23883,7 +24416,7 @@ msgstr ""
 "  %s\n"
 "Les lignes commençant par '%c' seront ignorées.\n"
 
-#: builtin/tag.c:174
+#: builtin/tag.c:175
 #, c-format
 msgid ""
 "\n"
@@ -23898,11 +24431,11 @@ msgstr ""
 "Les lignes commençant par '%c' seront gardées ; vous pouvez les retirer vous-"
 "même si vous le souhaitez.\n"
 
-#: builtin/tag.c:240
+#: builtin/tag.c:241
 msgid "unable to sign the tag"
 msgstr "impossible de signer l'étiquette"
 
-#: builtin/tag.c:258
+#: builtin/tag.c:259
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -23917,115 +24450,119 @@ msgstr ""
 "\n"
 "\tgit tag -f %s %s^{}"
 
-#: builtin/tag.c:274
+#: builtin/tag.c:275
 msgid "bad object type."
 msgstr "mauvais type d'objet."
 
-#: builtin/tag.c:325
+#: builtin/tag.c:326
 msgid "no tag message?"
 msgstr "pas de message pour l'étiquette ?"
 
-#: builtin/tag.c:332
+#: builtin/tag.c:333
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "Le message pour l'étiquette a été laissé dans %s\n"
 
-#: builtin/tag.c:444
+#: builtin/tag.c:445
 msgid "list tag names"
 msgstr "afficher les noms des étiquettes"
 
-#: builtin/tag.c:446
+#: builtin/tag.c:447
 msgid "print <n> lines of each tag message"
 msgstr "affiche <n> lignes de chaque message d'étiquette"
 
-#: builtin/tag.c:448
+#: builtin/tag.c:449
 msgid "delete tags"
 msgstr "supprimer des étiquettes"
 
-#: builtin/tag.c:449
+#: builtin/tag.c:450
 msgid "verify tags"
 msgstr "vérifier des étiquettes"
 
-#: builtin/tag.c:451
+#: builtin/tag.c:452
 msgid "Tag creation options"
 msgstr "Options de création de l'étiquette"
 
-#: builtin/tag.c:453
+#: builtin/tag.c:454
 msgid "annotated tag, needs a message"
 msgstr "étiquette annotée, nécessite un message"
 
-#: builtin/tag.c:455
+#: builtin/tag.c:456
 msgid "tag message"
 msgstr "message pour l'étiquette"
 
-#: builtin/tag.c:457
+#: builtin/tag.c:458
 msgid "force edit of tag message"
 msgstr "forcer l'édition du message d'étiquetage"
 
-#: builtin/tag.c:458
+#: builtin/tag.c:459
 msgid "annotated and GPG-signed tag"
 msgstr "étiquette annotée et signée avec GPG"
 
-#: builtin/tag.c:461
+#: builtin/tag.c:462
 msgid "use another key to sign the tag"
 msgstr "utiliser une autre clé pour signer l'étiquette"
 
-#: builtin/tag.c:462
+#: builtin/tag.c:463
 msgid "replace the tag if exists"
 msgstr "remplacer l'étiquette si elle existe"
 
-#: builtin/tag.c:463 builtin/update-ref.c:511
+#: builtin/tag.c:464 builtin/update-ref.c:511
 msgid "create a reflog"
 msgstr "créer un reflog"
 
-#: builtin/tag.c:465
+#: builtin/tag.c:466
 msgid "Tag listing options"
 msgstr "Options d'affichage des étiquettes"
 
-#: builtin/tag.c:466
+#: builtin/tag.c:467
 msgid "show tag list in columns"
 msgstr "afficher la liste des étiquettes sous forme de colonnes"
 
-#: builtin/tag.c:467 builtin/tag.c:469
+#: builtin/tag.c:468 builtin/tag.c:470
 msgid "print only tags that contain the commit"
 msgstr "afficher seulement les étiquettes qui contiennent la validation"
 
-#: builtin/tag.c:468 builtin/tag.c:470
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that don't contain the commit"
 msgstr "afficher seulement les étiquettes qui ne contiennent pas la validation"
 
-#: builtin/tag.c:471
+#: builtin/tag.c:472
 msgid "print only tags that are merged"
 msgstr "afficher seulement les étiquettes qui sont fusionnées"
 
-#: builtin/tag.c:472
+#: builtin/tag.c:473
 msgid "print only tags that are not merged"
 msgstr "afficher seulement les étiquettes qui ne sont pas fusionnées"
 
-#: builtin/tag.c:476
+#: builtin/tag.c:477
 msgid "print only tags of the object"
 msgstr "afficher seulement les étiquettes de l'objet"
 
-#: builtin/tag.c:558
+#: builtin/tag.c:559
 #, c-format
 msgid "the '%s' option is only allowed in list mode"
 msgstr "l'option '%s' est autorisée seulement en mode de liste"
 
-#: builtin/tag.c:597
+#: builtin/tag.c:598
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "'%s' n'est pas un nom d'étiquette valide."
 
-#: builtin/tag.c:602
+#: builtin/tag.c:603
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "l'étiquette '%s' existe déjà"
 
-#: builtin/tag.c:633
+#: builtin/tag.c:634
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "Étiquette '%s' mise à jour (elle était sur %s)\n"
 
+#: builtin/unpack-objects.c:95
+msgid "pack exceeds maximum allowed size"
+msgstr "le paquet dépasse la taille maximale permise"
+
 #: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
 msgstr "Dépaquetage des objets"
@@ -24091,164 +24628,164 @@ msgstr " OK"
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<options>] [--] [<fichier>...]"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:993
 msgid "continue refresh even when index needs update"
 msgstr "continuer de rafraîchir même si l'index a besoin d'une mise à jour"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:996
 msgid "refresh: ignore submodules"
 msgstr "rafraîchir : ignorer les sous-modules"
 
-#: builtin/update-index.c:980
+#: builtin/update-index.c:999
 msgid "do not ignore new files"
 msgstr "ne pas ignorer les nouveaux fichiers"
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:1001
 msgid "let files replace directories and vice-versa"
 msgstr "laisser les fichiers remplacer des répertoires et vice-versa"
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:1003
 msgid "notice files missing from worktree"
 msgstr "aviser des fichiers manquants dans la copie de travail"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:1005
 msgid "refresh even if index contains unmerged entries"
 msgstr "rafraîchir même si l'index contient des éléments non fusionnés"
 
-#: builtin/update-index.c:989
+#: builtin/update-index.c:1008
 msgid "refresh stat information"
 msgstr "rafraîchir l'information de stat"
 
-#: builtin/update-index.c:993
+#: builtin/update-index.c:1012
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "comme --refresh, mais en ignorant l'option assume-unchanged"
 
-#: builtin/update-index.c:997
+#: builtin/update-index.c:1016
 msgid "<mode>,<object>,<path>"
 msgstr "<mode>, <objet>, <chemin>"
 
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1017
 msgid "add the specified entry to the index"
 msgstr "ajouter l'élément spécifié dans l'index"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1027
 msgid "mark files as \"not changing\""
 msgstr "marquer les fichiers comme \"non changeants\""
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1030
 msgid "clear assumed-unchanged bit"
 msgstr "mettre à zéro le bit supposé-non-modifié"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1033
 msgid "mark files as \"index-only\""
 msgstr "marquer les fichiers comme \"index seulement\""
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1036
 msgid "clear skip-worktree bit"
 msgstr "mettre à zéro le bit sauter-la-copie-de travail"
 
-#: builtin/update-index.c:1020
+#: builtin/update-index.c:1039
 msgid "do not touch index-only entries"
 msgstr "ne pas toucher aux entrées restreintes à l'index"
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1041
 msgid "add to index only; do not add content to object database"
 msgstr ""
 "ajouter seulement à l'index ; ne pas ajouter le contenu dans la base de "
 "données des objets"
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1043
 msgid "remove named paths even if present in worktree"
 msgstr ""
 "supprimer les chemins nommés même s'ils sont présents dans la copie de "
 "travail"
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1045
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "avec --stdin : les lignes en entrée sont terminées par des octets nuls"
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1047
 msgid "read list of paths to be updated from standard input"
 msgstr "lire la liste des chemins à mettre à jour depuis l'entrée standard"
 
-#: builtin/update-index.c:1032
+#: builtin/update-index.c:1051
 msgid "add entries from standard input to the index"
 msgstr "ajouter les éléments depuis l'entrée standard à l'index"
 
-#: builtin/update-index.c:1036
+#: builtin/update-index.c:1055
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "repeupler les étapes n°2 et n°3 pour les chemins listés"
 
-#: builtin/update-index.c:1040
+#: builtin/update-index.c:1059
 msgid "only update entries that differ from HEAD"
 msgstr "mettre à jour seulement les éléments qui diffèrent de HEAD"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1063
 msgid "ignore files missing from worktree"
 msgstr "ignorer les fichiers manquants dans la copie de travail"
 
-#: builtin/update-index.c:1047
+#: builtin/update-index.c:1066
 msgid "report actions to standard output"
 msgstr "afficher les actions sur la sortie standard"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1068
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(pour porcelaines) oublier les conflits sauvés et non résolus"
 
-#: builtin/update-index.c:1053
+#: builtin/update-index.c:1072
 msgid "write index in this format"
 msgstr "écrire l'index dans ce format"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1074
 msgid "enable or disable split index"
-msgstr "activer ou désactiver l'index divisé"
+msgstr "activer ou désactiver l'index scindé"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1076
 msgid "enable/disable untracked cache"
 msgstr "activer ou désactiver le cache de non-suivis"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1078
 msgid "test if the filesystem supports untracked cache"
 msgstr "tester si le système de fichier supporte le cache de non-suivis"
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1080
 msgid "enable untracked cache without testing the filesystem"
 msgstr "activer le cache de non-suivis sans tester le système de fichier"
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1082
 msgid "write out the index even if is not flagged as changed"
 msgstr "écrire l'index même s'il n'est pas marqué comme modifié"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1084
 msgid "enable or disable file system monitor"
 msgstr ""
 "activer ou désactiver la surveillance du système de fichier (fsmonitor)"
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1086
 msgid "mark files as fsmonitor valid"
 msgstr "marquer les fichiers comme valides pour fsmonitor"
 
-#: builtin/update-index.c:1070
+#: builtin/update-index.c:1089
 msgid "clear fsmonitor valid bit"
 msgstr "effacer le bit de validité fsmonitor"
 
-#: builtin/update-index.c:1173
+#: builtin/update-index.c:1195
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
 msgstr ""
 "core.splitIndex est réglé à false ; supprimez-le ou changez-le si vous "
-"souhaitez vraiment activer l'index coupé"
+"souhaitez vraiment activer l'index scindé"
 
-#: builtin/update-index.c:1182
+#: builtin/update-index.c:1204
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
 msgstr ""
 "core.splitIndex est réglé à vrai ; supprimez-le ou changez-le si vous "
-"souhaitez vraiment désactiver l'index coupé"
+"souhaitez vraiment désactiver l'index scindé"
 
-#: builtin/update-index.c:1194
+#: builtin/update-index.c:1216
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -24256,11 +24793,11 @@ msgstr ""
 "core.untrackedCache est réglé à true ; supprimez-le ou changez-le si vous "
 "souhaitez vraiment désactiver le cache des fichiers non-suivis"
 
-#: builtin/update-index.c:1198
+#: builtin/update-index.c:1220
 msgid "Untracked cache disabled"
 msgstr "Le cache non suivi est désactivé"
 
-#: builtin/update-index.c:1206
+#: builtin/update-index.c:1228
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -24268,29 +24805,29 @@ msgstr ""
 "core.untrackedCache est réglé à false ; supprimez-le ou changez-le si vous "
 "souhaitez vraiment activer le cache des fichiers non-suivis"
 
-#: builtin/update-index.c:1210
+#: builtin/update-index.c:1232
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "Le cache non suivi est activé pour '%s'"
 
-#: builtin/update-index.c:1218
+#: builtin/update-index.c:1241
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
 "core.fsmonitor est réglé à false ; changez-le si vous souhaitez vraiment "
 "activer la surveillance du système de fichiers"
 
-#: builtin/update-index.c:1222
+#: builtin/update-index.c:1246
 msgid "fsmonitor enabled"
 msgstr "fsmonitor activé"
 
-#: builtin/update-index.c:1225
+#: builtin/update-index.c:1250
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 "core.fsmonitor est réglé à true ; supprimez-le ou changez-le si vous "
 "souhaitez vraiment désactiver la surveillance du système de fichiers"
 
-#: builtin/update-index.c:1229
+#: builtin/update-index.c:1254
 msgid "fsmonitor disabled"
 msgstr "fsmonitor désactivé"
 
@@ -24324,10 +24861,6 @@ msgstr "l'entrée standard a des arguments qui se terminent par NUL"
 msgid "read updates from stdin"
 msgstr "lire les mises à jour depuis l'entrée standard"
 
-#: builtin/update-server-info.c:7
-msgid "git update-server-info [--force]"
-msgstr "git update-server-info [--force]"
-
 #: builtin/update-server-info.c:15
 msgid "update the info files from scratch"
 msgstr "mettre à jour les fichiers d'information à partir de zéro"
@@ -24410,33 +24943,37 @@ msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<options>] <arbre-de-travail>"
 
 #: builtin/worktree.c:25
+msgid "git worktree repair [<path>...]"
+msgstr "git worktree repair [<chemin>...]"
+
+#: builtin/worktree.c:26
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <chemin>"
 
-#: builtin/worktree.c:75
+#: builtin/worktree.c:76
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr "Suppression de %s/%s : %s"
 
-#: builtin/worktree.c:148
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
 msgstr "afficher les arbres de travail éliminés"
 
-#: builtin/worktree.c:150
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr "faire expirer les arbres de travail plus vieux que <temps>"
 
-#: builtin/worktree.c:220
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr "'%s' existe déjà"
 
-#: builtin/worktree.c:229
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
 msgstr "arbre de travail destination '%s' inutilisable"
 
-#: builtin/worktree.c:234
+#: builtin/worktree.c:235
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -24446,7 +24983,7 @@ msgstr ""
 "utilisez '%s -f -f' pour passer outre, ou 'unlock' et 'prune' ou 'remove' "
 "pour corriger"
 
-#: builtin/worktree.c:236
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -24455,137 +24992,159 @@ msgstr ""
 "'%s' est un arbre de travail manquant mais déjà enregistré ;\n"
 "utilisez '%s -f' pour passer outre, ou 'prune' ou 'remove' pour corriger"
 
-#: builtin/worktree.c:287
+#: builtin/worktree.c:248
+#, c-format
+msgid "failed to copy '%s' to '%s'; sparse-checkout may not work correctly"
+msgstr ""
+"échec de la copie de '%s' vers '%s' ; les extractions clairsemées pourraient "
+"ne pas fonctionner correctement"
+
+#: builtin/worktree.c:268
+#, c-format
+msgid "failed to copy worktree config from '%s' to '%s'"
+msgstr ""
+"impossible de copier la configuration d'arbre de travail de '%s' vers '%s'"
+
+#: builtin/worktree.c:280 builtin/worktree.c:285
+#, c-format
+msgid "failed to unset '%s' in '%s'"
+msgstr "échec de désinitialisation de '%s' dans '%s'"
+
+#: builtin/worktree.c:356
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "impossible de créer le répertoire de '%s'"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:378
 msgid "initializing"
 msgstr "initialisation"
 
-#: builtin/worktree.c:420 builtin/worktree.c:426
+#: builtin/worktree.c:492 builtin/worktree.c:498
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "Préparation de l'arbre de travail (nouvelle branche '%s')"
 
-#: builtin/worktree.c:422
+#: builtin/worktree.c:494
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr ""
 "Préparation de l'arbre de travail (réinitialisation de la branche '%s' ; "
 "précédemment sur %s)"
 
-#: builtin/worktree.c:431
+#: builtin/worktree.c:503
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "Préparation de l'arbre de travail (extraction de '%s')"
 
-#: builtin/worktree.c:437
+#: builtin/worktree.c:509
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Préparation de l'arbre de travail (HEAD détachée %s)"
 
-#: builtin/worktree.c:482
+#: builtin/worktree.c:554
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr ""
 "extraire la <branche> même si elle est déjà extraite dans une autre copie de "
 "travail"
 
-#: builtin/worktree.c:485
+#: builtin/worktree.c:557
 msgid "create a new branch"
 msgstr "créer une nouvelle branche"
 
-#: builtin/worktree.c:487
+#: builtin/worktree.c:559
 msgid "create or reset a branch"
 msgstr "créer ou réinitialiser une branche"
 
-#: builtin/worktree.c:489
+#: builtin/worktree.c:561
 msgid "populate the new working tree"
 msgstr "remplissage de la nouvelle copie de travail"
 
-#: builtin/worktree.c:490
+#: builtin/worktree.c:562
 msgid "keep the new working tree locked"
 msgstr "conserver le verrou sur le nouvel arbre de travail"
 
-#: builtin/worktree.c:492 builtin/worktree.c:729
+#: builtin/worktree.c:564 builtin/worktree.c:809
 msgid "reason for locking"
 msgstr "raison du verrouillage"
 
-#: builtin/worktree.c:495
+#: builtin/worktree.c:567
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "régler le mode de suivi (voir git-branch(1))"
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:570
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "essayer de nommer la nouvelle branche comme la branche amont"
 
-#: builtin/worktree.c:512
+#: builtin/worktree.c:584
 msgid "added with --lock"
 msgstr "ajouté avec --lock"
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:646
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr ""
 "--[no-]track ne peut être utilisé qu'à la création d'une nouvelle branche"
 
-#: builtin/worktree.c:691
+#: builtin/worktree.c:766
 msgid "show extended annotations and reasons, if available"
 msgstr "afficher les annotations étendues et les raisons, si disponible"
 
-#: builtin/worktree.c:693
+#: builtin/worktree.c:768
 msgid "add 'prunable' annotation to worktrees older than <time>"
 msgstr ""
 "ajouter l'annotation 'prunable' aux arbres de travail plus vieux que <temps>"
 
-#: builtin/worktree.c:741 builtin/worktree.c:774 builtin/worktree.c:848
-#: builtin/worktree.c:972
+#: builtin/worktree.c:770
+msgid "terminate records with a NUL character"
+msgstr "terminer les enregistrements par un caractère NUL"
+
+#: builtin/worktree.c:821 builtin/worktree.c:854 builtin/worktree.c:928
+#: builtin/worktree.c:1052
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "'%s' n'est pas une copie de travail"
 
-#: builtin/worktree.c:743 builtin/worktree.c:776
+#: builtin/worktree.c:823 builtin/worktree.c:856
 msgid "The main working tree cannot be locked or unlocked"
 msgstr ""
 "La copie de travail principale ne peut pas être verrouillée ou déverrouillée"
 
-#: builtin/worktree.c:748
+#: builtin/worktree.c:828
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "'%s' est déjà verrouillé, car '%s'"
 
-#: builtin/worktree.c:750
+#: builtin/worktree.c:830
 #, c-format
 msgid "'%s' is already locked"
 msgstr "'%s' est déjà verrouillé"
 
-#: builtin/worktree.c:778
+#: builtin/worktree.c:858
 #, c-format
 msgid "'%s' is not locked"
 msgstr "'%s' n'est pas verrouillé"
 
-#: builtin/worktree.c:819
+#: builtin/worktree.c:899
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr ""
 "les arbres de travail contenant des sous-modules ne peuvent pas être "
 "déplacés ou supprimés"
 
-#: builtin/worktree.c:827
+#: builtin/worktree.c:907
 msgid "force move even if worktree is dirty or locked"
 msgstr ""
 "forcer le déplacement même si l'arbre de travail est sale ou verrouillé"
 
-#: builtin/worktree.c:850 builtin/worktree.c:974
+#: builtin/worktree.c:930 builtin/worktree.c:1054
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "'%s' est un arbre de travail principal"
 
-#: builtin/worktree.c:855
+#: builtin/worktree.c:935
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "impossible de trouver le nom de la destination à partir de '%s'"
 
-#: builtin/worktree.c:868
+#: builtin/worktree.c:948
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -24595,7 +25154,7 @@ msgstr ""
 "verrouillage : %s\n"
 "utilisez 'move -f -f' pour outrepasser ou déverrouiller avant"
 
-#: builtin/worktree.c:870
+#: builtin/worktree.c:950
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -24603,39 +25162,39 @@ msgstr ""
 "impossible de déplacer un arbre de travail verrouillé;\n"
 "utilisez 'move -f -f' pour outrepasser ou déverrouiller avant"
 
-#: builtin/worktree.c:873
+#: builtin/worktree.c:953
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "la validation a échoué, impossible de déplacer l'arbre de travail : %s"
 
-#: builtin/worktree.c:878
+#: builtin/worktree.c:958
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "échec au déplacement de '%s' vers '%s'"
 
-#: builtin/worktree.c:924
+#: builtin/worktree.c:1004
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "échec du lancement de 'git status' sur '%s'"
 
-#: builtin/worktree.c:928
+#: builtin/worktree.c:1008
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
 "'%s' contient des fichiers modifiés ou non-suivis, utilisez --force pour le "
 "supprimer"
 
-#: builtin/worktree.c:933
+#: builtin/worktree.c:1013
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "impossible de lancer 'git status' sur '%s', code %d"
 
-#: builtin/worktree.c:956
+#: builtin/worktree.c:1036
 msgid "force removal even if worktree is dirty or locked"
 msgstr ""
 "forcer la suppression même si l'arbre de travail est sale ou verrouillé"
 
-#: builtin/worktree.c:979
+#: builtin/worktree.c:1059
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -24645,7 +25204,7 @@ msgstr ""
 "verrouillage : %s\n"
 "utilisez 'move -f -f' pour outrepasser ou déverrouiller avant"
 
-#: builtin/worktree.c:981
+#: builtin/worktree.c:1061
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -24653,18 +25212,18 @@ msgstr ""
 "impossible de supprimer un arbre de travail verrouillé;\n"
 "utilisez 'move -f -f' pour outrepasser ou déverrouiller avant"
 
-#: builtin/worktree.c:984
+#: builtin/worktree.c:1064
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr ""
 "la validation a échoué, impossible de supprimer l'arbre de travail : %s"
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:1088
 #, c-format
 msgid "repair: %s: %s"
 msgstr "réparation : %s : '%s'"
 
-#: builtin/worktree.c:1011
+#: builtin/worktree.c:1091
 #, c-format
 msgid "error: %s: %s"
 msgstr "erreur : %s : %s"
@@ -24771,29 +25330,29 @@ msgstr "alias vide pour %s"
 msgid "recursive alias: %s"
 msgstr "alias recursif : %s"
 
-#: git.c:479
+#: git.c:480
 msgid "write failure on standard output"
 msgstr "échec d'écriture sur la sortie standard"
 
-#: git.c:481
+#: git.c:482
 msgid "unknown write failure on standard output"
 msgstr "échec inconnu d'écriture sur la sortie standard"
 
-#: git.c:483
+#: git.c:484
 msgid "close failed on standard output"
 msgstr "échec de fermeture de la sortie standard"
 
-#: git.c:835
+#: git.c:838
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr "boucle d'alias détectée : l'expansion de '%s' ne finit jamais : %s"
 
-#: git.c:885
+#: git.c:888
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "impossible d'utiliser %s comme une fonction intégrée"
 
-#: git.c:898
+#: git.c:901
 #, c-format
 msgid ""
 "usage: %s\n"
@@ -24802,13 +25361,13 @@ msgstr ""
 "usage : %s\n"
 "\n"
 
-#: git.c:918
+#: git.c:921
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr ""
 "l'expansion de l'alias '%s' a échoué : '%s' n'est pas une commande git\n"
 
-#: git.c:930
+#: git.c:933
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "échec au lancement de la commande '%s' : %s\n"
@@ -24969,142 +25528,142 @@ msgstr ""
 "      demandé : %s\n"
 "  redirection : %s"
 
-#: remote-curl.c:183
+#: remote-curl.c:184
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr "citation invalide dans la valeur push-option : '%s'"
 
-#: remote-curl.c:304
+#: remote-curl.c:308
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr "%sinfo/refs n'est pas valide : est-ce bien un dépôt git ?"
 
-#: remote-curl.c:405
+#: remote-curl.c:409
 msgid "invalid server response; expected service, got flush packet"
 msgstr "réponse du serveur invalide ; service attendu, paquet de vidage reçu"
 
-#: remote-curl.c:436
+#: remote-curl.c:440
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr "réponse du serveur invalide ; '%s' reçu"
 
-#: remote-curl.c:496
+#: remote-curl.c:500
 #, c-format
 msgid "repository '%s' not found"
 msgstr "dépôt '%s' non trouvé"
 
-#: remote-curl.c:500
+#: remote-curl.c:504
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr "Échec d'authentification pour '%s'"
 
-#: remote-curl.c:504
+#: remote-curl.c:508
 #, c-format
 msgid "unable to access '%s' with http.pinnedPubkey configuration: %s"
 msgstr ""
 "impossible d'accéder à '%s' avec la configuration http.pinnedPubkey : %s"
 
-#: remote-curl.c:508
+#: remote-curl.c:512
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "impossible d'accéder à '%s' : %s"
 
-#: remote-curl.c:514
+#: remote-curl.c:518
 #, c-format
 msgid "redirecting to %s"
 msgstr "redirection vers %s"
 
-#: remote-curl.c:645
+#: remote-curl.c:649
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr "ne devrait pas recevoir OEF quand on n'est pas gentil sur EOF"
 
-#: remote-curl.c:657
+#: remote-curl.c:661
 msgid "remote server sent unexpected response end packet"
 msgstr "le serveur distant a envoyé un paquet de fin de réponse inattendu"
 
-#: remote-curl.c:726
+#: remote-curl.c:730
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr ""
 "impossible de rembobiner le données post rpc - essayer d'augmenter http."
 "postBuffer"
 
-#: remote-curl.c:755
+#: remote-curl.c:759
 #, c-format
 msgid "remote-curl: bad line length character: %.4s"
 msgstr "remote-curl : mauvais caractère de longueur de ligne : %.4s"
 
-#: remote-curl.c:757
+#: remote-curl.c:761
 msgid "remote-curl: unexpected response end packet"
 msgstr "remote-curl : paquet de fin de réponse inattendu"
 
-#: remote-curl.c:833
+#: remote-curl.c:837
 #, c-format
 msgid "RPC failed; %s"
 msgstr "échec RPC ; %s"
 
-#: remote-curl.c:873
+#: remote-curl.c:877
 msgid "cannot handle pushes this big"
 msgstr "impossible de gérer des poussées aussi grosses"
 
-#: remote-curl.c:986
+#: remote-curl.c:990
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr "impossible de compresser la requête ; erreur de compression zlib %d"
 
-#: remote-curl.c:990
+#: remote-curl.c:994
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr "impossible de compresser la requête ; erreur de fin zlib %d"
 
-#: remote-curl.c:1040
+#: remote-curl.c:1044
 #, c-format
 msgid "%d bytes of length header were received"
 msgstr "%d octets de longueur d'entête ont été reçus"
 
-#: remote-curl.c:1042
+#: remote-curl.c:1046
 #, c-format
 msgid "%d bytes of body are still expected"
 msgstr "%d octets de corps sont encore attendus"
 
-#: remote-curl.c:1131
+#: remote-curl.c:1135
 msgid "dumb http transport does not support shallow capabilities"
 msgstr "le protocole http idiot ne supporte la capacité superficielle"
 
-#: remote-curl.c:1146
+#: remote-curl.c:1150
 msgid "fetch failed."
 msgstr "échec du récupération."
 
-#: remote-curl.c:1192
+#: remote-curl.c:1198
 msgid "cannot fetch by sha1 over smart http"
 msgstr "impossible de récupérer par sha1 sur http intelligent"
 
-#: remote-curl.c:1236 remote-curl.c:1242
+#: remote-curl.c:1242 remote-curl.c:1248
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr "erreur de protocole : sha/ref attendu, '%s' trouvé"
 
-#: remote-curl.c:1254 remote-curl.c:1372
+#: remote-curl.c:1260 remote-curl.c:1378
 #, c-format
 msgid "http transport does not support %s"
 msgstr "le transport http ne supporte pas %s"
 
-#: remote-curl.c:1290
+#: remote-curl.c:1296
 msgid "git-http-push failed"
 msgstr "échec de git-http-push"
 
-#: remote-curl.c:1478
+#: remote-curl.c:1485
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr "remote-curl: usage: git remote-curl <distant> [<url>]"
 
-#: remote-curl.c:1510
+#: remote-curl.c:1517
 msgid "remote-curl: error reading command stream from git"
 msgstr "remote-curl : erreur de lecture du flux de commande depuis git"
 
-#: remote-curl.c:1517
+#: remote-curl.c:1524
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr "remote-curl : récupération tentée sans dépôt local"
 
-#: remote-curl.c:1558
+#: remote-curl.c:1565
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr "remote-curl : commande inconnue '%s' depuis git"
@@ -25117,123 +25676,123 @@ msgstr "répertoire de travail nécessaire"
 msgid "could not find enlistment root"
 msgstr "impossible de trouver la racine d'enrôlement"
 
-#: contrib/scalar/scalar.c:89 contrib/scalar/scalar.c:351
-#: contrib/scalar/scalar.c:436 contrib/scalar/scalar.c:579
+#: contrib/scalar/scalar.c:89 contrib/scalar/scalar.c:350
+#: contrib/scalar/scalar.c:435 contrib/scalar/scalar.c:578
 #, c-format
 msgid "could not switch to '%s'"
 msgstr "impossible de basculer vers '%s'"
 
-#: contrib/scalar/scalar.c:180
+#: contrib/scalar/scalar.c:179
 #, c-format
 msgid "could not configure %s=%s"
 msgstr "impossible de configurer %s=%s"
 
-#: contrib/scalar/scalar.c:198
+#: contrib/scalar/scalar.c:197
 msgid "could not configure log.excludeDecoration"
 msgstr "impossible de configurer log.excludeDecoration"
 
-#: contrib/scalar/scalar.c:219
+#: contrib/scalar/scalar.c:218
 msgid "Scalar enlistments require a worktree"
 msgstr "Les enrôlements scalaires requièrent un arbre de travail"
 
-#: contrib/scalar/scalar.c:311
+#: contrib/scalar/scalar.c:310
 #, c-format
 msgid "remote HEAD is not a branch: '%.*s'"
 msgstr "la HEAD distante n'est pas une branche : '%.*s'"
 
-#: contrib/scalar/scalar.c:317
+#: contrib/scalar/scalar.c:316
 msgid "failed to get default branch name from remote; using local default"
 msgstr ""
 "échec de récupération de la branche par défaut depuis le distant ; "
 "utilisation de la valeur par défaut locale"
 
-#: contrib/scalar/scalar.c:330
+#: contrib/scalar/scalar.c:329
 msgid "failed to get default branch name"
 msgstr "échec de l'obtention du nom de branche par défaut"
 
-#: contrib/scalar/scalar.c:341
+#: contrib/scalar/scalar.c:340
 msgid "failed to unregister repository"
 msgstr "échec du désenregistrement du dépôt"
 
-#: contrib/scalar/scalar.c:356
+#: contrib/scalar/scalar.c:355
 msgid "failed to delete enlistment directory"
 msgstr "échec de la suppression du répertoire d'enrôlement"
 
-#: contrib/scalar/scalar.c:376
+#: contrib/scalar/scalar.c:375
 msgid "branch to checkout after clone"
 msgstr "branche à extraire après le clonage"
 
-#: contrib/scalar/scalar.c:378
+#: contrib/scalar/scalar.c:377
 msgid "when cloning, create full working directory"
 msgstr "lors d'un clonage, créer un répertoire de travail complet"
 
-#: contrib/scalar/scalar.c:380
+#: contrib/scalar/scalar.c:379
 msgid "only download metadata for the branch that will be checked out"
 msgstr "ne télécharger les méta-données que pour la branche qui sera extraite"
 
-#: contrib/scalar/scalar.c:385
+#: contrib/scalar/scalar.c:384
 msgid "scalar clone [<options>] [--] <repo> [<dir>]"
 msgstr "scalar clone [<options>] [--] <dépôt> [<répertoire>]"
 
-#: contrib/scalar/scalar.c:410
+#: contrib/scalar/scalar.c:409
 #, c-format
 msgid "cannot deduce worktree name from '%s'"
 msgstr "impossible de déduire le nom de l'arbre de travail depuis '%s'"
 
-#: contrib/scalar/scalar.c:419
+#: contrib/scalar/scalar.c:418
 #, c-format
 msgid "directory '%s' exists already"
 msgstr "le répertoire '%s' existe déjà"
 
-#: contrib/scalar/scalar.c:446
+#: contrib/scalar/scalar.c:445
 #, c-format
 msgid "failed to get default branch for '%s'"
 msgstr "échec d'obtention de la branche par défaut pour '%s'"
 
-#: contrib/scalar/scalar.c:457
+#: contrib/scalar/scalar.c:456
 #, c-format
 msgid "could not configure remote in '%s'"
 msgstr "impossible de paramétrer le distant dans '%s'"
 
-#: contrib/scalar/scalar.c:466
+#: contrib/scalar/scalar.c:465
 #, c-format
 msgid "could not configure '%s'"
 msgstr "impossible de configurer '%s'"
 
-#: contrib/scalar/scalar.c:469
+#: contrib/scalar/scalar.c:468
 msgid "partial clone failed; attempting full clone"
 msgstr "échec du clonage partiel ; tentative de clonage complet"
 
-#: contrib/scalar/scalar.c:473
+#: contrib/scalar/scalar.c:472
 msgid "could not configure for full clone"
 msgstr "impossible de configurer pour le clonage complet"
 
-#: contrib/scalar/scalar.c:505
+#: contrib/scalar/scalar.c:504
 msgid "`scalar list` does not take arguments"
 msgstr "`scalar list` n'accepte pas d'argument"
 
-#: contrib/scalar/scalar.c:518
+#: contrib/scalar/scalar.c:517
 msgid "scalar register [<enlistment>]"
 msgstr "scalar register [<enrôlement>]"
 
-#: contrib/scalar/scalar.c:545
+#: contrib/scalar/scalar.c:544
 msgid "reconfigure all registered enlistments"
 msgstr "reconfigurer tous les enrôlements enregistrés"
 
-#: contrib/scalar/scalar.c:549
+#: contrib/scalar/scalar.c:548
 msgid "scalar reconfigure [--all | <enlistment>]"
 msgstr "scala reconfigure [--all|<enrôlement>]"
 
-#: contrib/scalar/scalar.c:567
+#: contrib/scalar/scalar.c:566
 msgid "--all or <enlistment>, but not both"
 msgstr "--all ou <enrôlement>, mais pas les deux"
 
-#: contrib/scalar/scalar.c:582
+#: contrib/scalar/scalar.c:581
 #, c-format
 msgid "git repository gone in '%s'"
 msgstr "dépôt git parti dans '%s'"
 
-#: contrib/scalar/scalar.c:622
+#: contrib/scalar/scalar.c:621
 msgid ""
 "scalar run <task> [<enlistment>]\n"
 "Tasks:\n"
@@ -25241,42 +25800,55 @@ msgstr ""
 "scalar run <tâche> [<enrôlement>]\n"
 "Tâches :\n"
 
-#: contrib/scalar/scalar.c:640
+#: contrib/scalar/scalar.c:639
 #, c-format
 msgid "no such task: '%s'"
 msgstr "pas de tâche : '%s'"
 
-#: contrib/scalar/scalar.c:690
+#: contrib/scalar/scalar.c:689
 msgid "scalar unregister [<enlistment>]"
 msgstr "scalar unregister [<enrôlement>]"
 
-#: contrib/scalar/scalar.c:737
+#: contrib/scalar/scalar.c:736
 msgid "scalar delete <enlistment>"
 msgstr "scalar delete <enrôlement>"
 
-#: contrib/scalar/scalar.c:752
+#: contrib/scalar/scalar.c:751
 msgid "refusing to delete current working directory"
 msgstr "refus de la suppression du répertoire de travail actuel"
 
-#: contrib/scalar/scalar.c:767
+#: contrib/scalar/scalar.c:766
 msgid "include Git version"
 msgstr "inclure la version Git"
 
-#: contrib/scalar/scalar.c:769
+#: contrib/scalar/scalar.c:768
 msgid "include Git's build options"
 msgstr "inclure les options de construction de Git"
 
-#: contrib/scalar/scalar.c:773
+#: contrib/scalar/scalar.c:772
 msgid "scalar verbose [-v | --verbose] [--build-options]"
 msgstr "scalar verbose [-v | --verbose] [--build-options]"
 
+#: contrib/scalar/scalar.c:813
+msgid "-C requires a <directory>"
+msgstr "-C requiert un <répertoire>"
+
+#: contrib/scalar/scalar.c:815
+#, c-format
+msgid "could not change to '%s'"
+msgstr "échec de modification en '%s'"
+
 #: contrib/scalar/scalar.c:821
+msgid "-c requires a <key>=<value> argument"
+msgstr "-c exige un argument <clé>=<valeur>"
+
+#: contrib/scalar/scalar.c:839
 msgid ""
-"scalar <command> [<options>]\n"
+"scalar [-C <directory>] [-c <key>=<value>] <command> [<options>]\n"
 "\n"
 "Commands:\n"
 msgstr ""
-"scalar <commande> [<options>]\n"
+"scalar [-C <répertoire>] [-c <clé>=<valeur>] <commande> [<options>]\n"
 "\n"
 "Commandes :\n"
 
@@ -25288,43 +25860,43 @@ msgstr "aucune information de compilateur disponible\n"
 msgid "no libc information available\n"
 msgstr "aucune information de libc disponible\n"
 
-#: list-objects-filter-options.h:94
+#: list-objects-filter-options.h:126
 msgid "args"
 msgstr "args"
 
-#: list-objects-filter-options.h:95
+#: list-objects-filter-options.h:127
 msgid "object filtering"
 msgstr "filtrage d'objet"
 
-#: parse-options.h:183
+#: parse-options.h:188
 msgid "expiry-date"
 msgstr "date-d'expiration"
 
-#: parse-options.h:197
+#: parse-options.h:202
 msgid "no-op (backward compatibility)"
 msgstr "sans action (rétrocompatibilité)"
 
-#: parse-options.h:310
+#: parse-options.h:341
 msgid "be more verbose"
 msgstr "être plus verbeux"
 
-#: parse-options.h:312
+#: parse-options.h:343
 msgid "be more quiet"
 msgstr "être plus silencieux"
 
-#: parse-options.h:318
+#: parse-options.h:349
 msgid "use <n> digits to display object names"
 msgstr "utiliser <n> chiffres pour afficher les noms des objets"
 
-#: parse-options.h:337
+#: parse-options.h:368
 msgid "how to strip spaces and #comments from message"
 msgstr "comment éliminer les espaces et les commentaires # du message"
 
-#: parse-options.h:338
+#: parse-options.h:369
 msgid "read pathspec from file"
 msgstr "lire les spécificateurs de fichier depuis fichier"
 
-#: parse-options.h:339
+#: parse-options.h:370
 msgid ""
 "with --pathspec-from-file, pathspec elements are separated with NUL character"
 msgstr ""
@@ -25589,461 +26161,465 @@ msgid "Display help information about Git"
 msgstr "Afficher l'information d'aide à propos de Git"
 
 #: command-list.h:108
+msgid "Run git hooks"
+msgstr "Lance les crochets git"
+
+#: command-list.h:109
 msgid "Server side implementation of Git over HTTP"
 msgstr "Implantation côté serveur de Git sur HTTP"
 
-#: command-list.h:109
+#: command-list.h:110
 msgid "Download from a remote Git repository via HTTP"
 msgstr "Télécharger depuis un dépôt Git distant via HTTP"
 
-#: command-list.h:110
+#: command-list.h:111
 msgid "Push objects over HTTP/DAV to another repository"
 msgstr "Pousser les objets sur un autre dépôt via HTTP/DAV"
 
-#: command-list.h:111
+#: command-list.h:112
 msgid "Send a collection of patches from stdin to an IMAP folder"
 msgstr "Envoyer un ensemble de rustines depuis stdin vers un répertoire IMAP"
 
-#: command-list.h:112
+#: command-list.h:113
 msgid "Build pack index file for an existing packed archive"
 msgstr ""
 "Construire un fichier d'index pack depuis une archive compactée existante"
 
-#: command-list.h:113
+#: command-list.h:114
 msgid "Create an empty Git repository or reinitialize an existing one"
 msgstr "Créer un dépôt Git vide ou réinitialiser un existant"
 
-#: command-list.h:114
+#: command-list.h:115
 msgid "Instantly browse your working repository in gitweb"
 msgstr "Naviguer instantanément votre dépôt de travail dans gitweb"
 
-#: command-list.h:115
+#: command-list.h:116
 msgid "Add or parse structured information in commit messages"
 msgstr ""
 "Ajouter ou analyser l'information structurée dans les messages de validation"
 
-#: command-list.h:116
+#: command-list.h:117
 msgid "Show commit logs"
 msgstr "Afficher l'historique des validations"
 
-#: command-list.h:117
+#: command-list.h:118
 msgid "Show information about files in the index and the working tree"
 msgstr ""
 "Afficher l'information à propos des fichiers dans l'index ou l'arbre de "
 "travail"
 
-#: command-list.h:118
+#: command-list.h:119
 msgid "List references in a remote repository"
 msgstr "Lister les références dans un dépôt distant"
 
-#: command-list.h:119
+#: command-list.h:120
 msgid "List the contents of a tree object"
 msgstr "Afficher le contenu d'un objet arbre"
 
-#: command-list.h:120
+#: command-list.h:121
 msgid "Extracts patch and authorship from a single e-mail message"
 msgstr ""
 "Extraire le patch et l'information de d'auteur depuis un simple message de "
 "courriel"
 
-#: command-list.h:121
+#: command-list.h:122
 msgid "Simple UNIX mbox splitter program"
 msgstr "Programme simple de découpage de mbox UNIX"
 
-#: command-list.h:122
+#: command-list.h:123
 msgid "Run tasks to optimize Git repository data"
 msgstr "Lancer les tâches pour optimiser les données du depôt Git"
 
-#: command-list.h:123
+#: command-list.h:124
 msgid "Join two or more development histories together"
 msgstr "Fusionner deux ou plusieurs historiques de développement ensemble"
 
-#: command-list.h:124
+#: command-list.h:125
 msgid "Find as good common ancestors as possible for a merge"
 msgstr "Trouver un ancêtre aussi bon que possible pour une fusion"
 
-#: command-list.h:125
+#: command-list.h:126
 msgid "Run a three-way file merge"
 msgstr "Lancer une fusion à 3 points"
 
-#: command-list.h:126
+#: command-list.h:127
 msgid "Run a merge for files needing merging"
 msgstr "Lancer une fusion à 3 points pour les fichiers à fusionner"
 
-#: command-list.h:127
+#: command-list.h:128
 msgid "The standard helper program to use with git-merge-index"
 msgstr "Le programme assistant standard à utiliser avec git-merge-index"
 
-#: command-list.h:128
+#: command-list.h:129
 msgid "Show three-way merge without touching index"
 msgstr "Afficher la fusion à trois points sans modifier l'index"
 
-#: command-list.h:129
+#: command-list.h:130
 msgid "Run merge conflict resolution tools to resolve merge conflicts"
 msgstr ""
 "Lancer les outils de résolution de conflit de fusion pour résoudre les "
 "conflits de fusion"
 
-#: command-list.h:130
+#: command-list.h:131
 msgid "Creates a tag object with extra validation"
 msgstr "Créer un objet étiquette avec validation supplémentaire"
 
-#: command-list.h:131
+#: command-list.h:132
 msgid "Build a tree-object from ls-tree formatted text"
 msgstr "Construire un objet arbre depuis une texte formaté comme ls-tree"
 
-#: command-list.h:132
+#: command-list.h:133
 msgid "Write and verify multi-pack-indexes"
 msgstr "Écrire et vérifier les index multi-paquet"
 
-#: command-list.h:133
+#: command-list.h:134
 msgid "Move or rename a file, a directory, or a symlink"
 msgstr "Déplacer ou renommer un fichier, un répertoire, ou un lien symbolique"
 
-#: command-list.h:134
+#: command-list.h:135
 msgid "Find symbolic names for given revs"
 msgstr "Trouver les noms symboliques pour des révisions données"
 
-#: command-list.h:135
+#: command-list.h:136
 msgid "Add or inspect object notes"
 msgstr "Ajouter ou inspecter les notes d'un objet"
 
-#: command-list.h:136
+#: command-list.h:137
 msgid "Import from and submit to Perforce repositories"
 msgstr "Importer et soumettre à des dépôt Perforce"
 
-#: command-list.h:137
+#: command-list.h:138
 msgid "Create a packed archive of objects"
 msgstr "Créer une archive compactée d'objets"
 
-#: command-list.h:138
+#: command-list.h:139
 msgid "Find redundant pack files"
 msgstr "Trouver les fichiers pack redondants"
 
-#: command-list.h:139
+#: command-list.h:140
 msgid "Pack heads and tags for efficient repository access"
 msgstr "Empaqueter les têtes et les étiquettes pour un accès efficace au dépôt"
 
-#: command-list.h:140
+#: command-list.h:141
 msgid "Compute unique ID for a patch"
 msgstr "Calculer l'ID unique d'un patch"
 
-#: command-list.h:141
+#: command-list.h:142
 msgid "Prune all unreachable objects from the object database"
 msgstr ""
 "Éliminer les objets inatteignables depuis la base de données des objets"
 
-#: command-list.h:142
+#: command-list.h:143
 msgid "Remove extra objects that are already in pack files"
 msgstr "Éliminer les objets qui sont déjà présents dans les fichiers pack"
 
-#: command-list.h:143
+#: command-list.h:144
 msgid "Fetch from and integrate with another repository or a local branch"
 msgstr "Rapatrier et intégrer un autre dépôt ou une branche locale"
 
-#: command-list.h:144
+#: command-list.h:145
 msgid "Update remote refs along with associated objects"
 msgstr "Mettre à jour les références distantes ainsi que les objets associés"
 
-#: command-list.h:145
+#: command-list.h:146
 msgid "Applies a quilt patchset onto the current branch"
 msgstr "Appliquer un patchset quilt sur la branche courante"
 
-#: command-list.h:146
+#: command-list.h:147
 msgid "Compare two commit ranges (e.g. two versions of a branch)"
 msgstr ""
 "Comparer deux plages de commits (par exemple deux versions d'une branche)"
 
-#: command-list.h:147
+#: command-list.h:148
 msgid "Reads tree information into the index"
 msgstr "Lire l'information d'arbre dans l'index"
 
-#: command-list.h:148
+#: command-list.h:149
 msgid "Reapply commits on top of another base tip"
 msgstr "Réapplication des commits sur le sommet de l'autre base"
 
-#: command-list.h:149
+#: command-list.h:150
 msgid "Receive what is pushed into the repository"
 msgstr "Recevoir ce qui est poussé dans le dépôt"
 
-#: command-list.h:150
+#: command-list.h:151
 msgid "Manage reflog information"
 msgstr "Gérer l'information de reflog"
 
-#: command-list.h:151
+#: command-list.h:152
 msgid "Manage set of tracked repositories"
 msgstr "Gérer un ensemble de dépôts suivis"
 
-#: command-list.h:152
+#: command-list.h:153
 msgid "Pack unpacked objects in a repository"
 msgstr "Empaqueter les objets non-empaquetés d'un dépôt"
 
-#: command-list.h:153
+#: command-list.h:154
 msgid "Create, list, delete refs to replace objects"
 msgstr "Créer, lister, supprimer des référence pour remplacer des objets"
 
-#: command-list.h:154
+#: command-list.h:155
 msgid "Generates a summary of pending changes"
 msgstr "Générer une résumé des modifications en attentes"
 
-#: command-list.h:155
+#: command-list.h:156
 msgid "Reuse recorded resolution of conflicted merges"
 msgstr "Réutiliser une résolution enregistrée de fusions conflictuelles"
 
-#: command-list.h:156
+#: command-list.h:157
 msgid "Reset current HEAD to the specified state"
 msgstr "Réinitialiser la HEAD courante à l'état spécifié"
 
-#: command-list.h:157
+#: command-list.h:158
 msgid "Restore working tree files"
 msgstr "Restaurer les fichiers l'arbre de travail"
 
-#: command-list.h:158
+#: command-list.h:159
 msgid "Lists commit objects in reverse chronological order"
 msgstr "Afficher les objets commit dans l'ordre chronologique inverse"
 
-#: command-list.h:159
+#: command-list.h:160
 msgid "Pick out and massage parameters"
 msgstr "Analyser et préparer les paramètres"
 
-#: command-list.h:160
+#: command-list.h:161
 msgid "Revert some existing commits"
 msgstr "Inverser des commits existants"
 
-#: command-list.h:161
+#: command-list.h:162
 msgid "Remove files from the working tree and from the index"
 msgstr "Supprimer des fichiers de la copie de travail et de l'index"
 
-#: command-list.h:162
+#: command-list.h:163
 msgid "Send a collection of patches as emails"
 msgstr "Envoyer un ensemble de patchs comme courriels"
 
-#: command-list.h:163
+#: command-list.h:164
 msgid "Push objects over Git protocol to another repository"
 msgstr "Pousser les objets sur un autre dépôt via le protocole Git"
 
-#: command-list.h:164
+#: command-list.h:165
 msgid "Git's i18n setup code for shell scripts"
 msgstr "Le code d'initialisation i18n pour les scripts shell"
 
-#: command-list.h:165
+#: command-list.h:166
 msgid "Common Git shell script setup code"
 msgstr "Le code d'initialisation commun aux scripts shell Git"
 
-#: command-list.h:166
+#: command-list.h:167
 msgid "Restricted login shell for Git-only SSH access"
 msgstr "Shell de login restreint pour un accès SSH vers Git seulement"
 
-#: command-list.h:167
+#: command-list.h:168
 msgid "Summarize 'git log' output"
 msgstr "Résumer la sortie de 'git log'"
 
-#: command-list.h:168
+#: command-list.h:169
 msgid "Show various types of objects"
 msgstr "Afficher différents types d'objets"
 
-#: command-list.h:169
+#: command-list.h:170
 msgid "Show branches and their commits"
 msgstr "Afficher les branches et leurs commits"
 
-#: command-list.h:170
+#: command-list.h:171
 msgid "Show packed archive index"
 msgstr "Afficher l'index de l'archive empaquetée"
 
-#: command-list.h:171
+#: command-list.h:172
 msgid "List references in a local repository"
 msgstr "Lister les références du dépôt local"
 
-#: command-list.h:172
-msgid "Initialize and modify the sparse-checkout"
-msgstr "Initialiser et modifier l'extraction clairsemée"
-
 #: command-list.h:173
+msgid "Reduce your working tree to a subset of tracked files"
+msgstr "Réduit votre arbre de travail à un sous-ensemble de fichiers suivis"
+
+#: command-list.h:174
 msgid "Add file contents to the staging area"
 msgstr "Ajouter le contenu de fichiers à l'index"
 
-#: command-list.h:174
+#: command-list.h:175
 msgid "Stash the changes in a dirty working directory away"
 msgstr "Remiser les modifications d'un répertoire de travail sale"
 
-#: command-list.h:175
+#: command-list.h:176
 msgid "Show the working tree status"
 msgstr "Afficher l'état de la copie de travail"
 
-#: command-list.h:176
+#: command-list.h:177
 msgid "Remove unnecessary whitespace"
 msgstr "Retirer les espaces inutiles"
 
-#: command-list.h:177
+#: command-list.h:178
 msgid "Initialize, update or inspect submodules"
 msgstr "Initialiser, mettre à jour et inspecter les sous-modules"
 
-#: command-list.h:178
+#: command-list.h:179
 msgid "Bidirectional operation between a Subversion repository and Git"
 msgstr "Opération Bidirectionnelle entre un dépôt Subversion et Git"
 
-#: command-list.h:179
+#: command-list.h:180
 msgid "Switch branches"
 msgstr "Basculer de branche"
 
-#: command-list.h:180
+#: command-list.h:181
 msgid "Read, modify and delete symbolic refs"
 msgstr "Lire, modifier et supprimer les références symboliques"
 
-#: command-list.h:181
+#: command-list.h:182
 msgid "Create, list, delete or verify a tag object signed with GPG"
 msgstr ""
 "Créer, lister, supprimer ou vérifier un objet d'étiquette signé avec GPG"
 
-#: command-list.h:182
+#: command-list.h:183
 msgid "Creates a temporary file with a blob's contents"
 msgstr "Créer un fichier temporaire avec le contenu d'un blob"
 
-#: command-list.h:183
+#: command-list.h:184
 msgid "Unpack objects from a packed archive"
 msgstr "Dépaqueter les objets depuis une archive empaquetée"
 
-#: command-list.h:184
+#: command-list.h:185
 msgid "Register file contents in the working tree to the index"
 msgstr "Enregistrer le contenu d'un fichier de l'arbre de travail dans l'index"
 
-#: command-list.h:185
+#: command-list.h:186
 msgid "Update the object name stored in a ref safely"
 msgstr ""
 "Mettre à jour le nom d'objet stocké dans une référence en toute sécurité"
 
-#: command-list.h:186
+#: command-list.h:187
 msgid "Update auxiliary info file to help dumb servers"
 msgstr ""
 "Mettre à jour le fichier d'informations auxiliaires pour aider les serveurs "
 "idiots"
 
-#: command-list.h:187
+#: command-list.h:188
 msgid "Send archive back to git-archive"
 msgstr "Renvoyer une archive dans git-archive"
 
-#: command-list.h:188
+#: command-list.h:189
 msgid "Send objects packed back to git-fetch-pack"
 msgstr "Renvoyer des objets empaquetés dans git-fetch-pack"
 
-#: command-list.h:189
+#: command-list.h:190
 msgid "Show a Git logical variable"
 msgstr "Afficher un variable logique de Git"
 
-#: command-list.h:190
+#: command-list.h:191
 msgid "Check the GPG signature of commits"
 msgstr "Vérifier la signature GPG de commits"
 
-#: command-list.h:191
+#: command-list.h:192
 msgid "Validate packed Git archive files"
 msgstr "Valider des fichiers d'archive Git empaquetés"
 
-#: command-list.h:192
+#: command-list.h:193
 msgid "Check the GPG signature of tags"
 msgstr "Vérifier la signature GPG d'étiquettes"
 
-#: command-list.h:193
+#: command-list.h:194
 msgid "Show logs with difference each commit introduces"
 msgstr "Afficher les journaux avec la différence que chaque commit introduit"
 
-#: command-list.h:194
+#: command-list.h:195
 msgid "Manage multiple working trees"
 msgstr "Gérer des arbres de travail multiples"
 
-#: command-list.h:195
+#: command-list.h:196
 msgid "Create a tree object from the current index"
 msgstr "Créer un objet arbre depuis l'index courant"
 
-#: command-list.h:196
+#: command-list.h:197
 msgid "Defining attributes per path"
 msgstr "Définition des attributs par chemin"
 
-#: command-list.h:197
+#: command-list.h:198
 msgid "Git command-line interface and conventions"
 msgstr "Interface en ligne de commande et conventions de Git"
 
-#: command-list.h:198
+#: command-list.h:199
 msgid "A Git core tutorial for developers"
 msgstr "Tutoriel du cœur de Git pour les développeurs"
 
-#: command-list.h:199
+#: command-list.h:200
 msgid "Providing usernames and passwords to Git"
 msgstr "Fourniture des noms d'utilisateurs et des mots de passe à Git"
 
-#: command-list.h:200
+#: command-list.h:201
 msgid "Git for CVS users"
 msgstr "Git pour les utilisateurs de CVS"
 
-#: command-list.h:201
+#: command-list.h:202
 msgid "Tweaking diff output"
 msgstr "Bidouillage de la sortie diff"
 
-#: command-list.h:202
+#: command-list.h:203
 msgid "A useful minimum set of commands for Everyday Git"
 msgstr "Un ensemble minimal utile des commandes de Git pour tous les jours"
 
-#: command-list.h:203
+#: command-list.h:204
 msgid "Frequently asked questions about using Git"
 msgstr "Foire aux questions sur l'utilisation de Git"
 
-#: command-list.h:204
+#: command-list.h:205
 msgid "A Git Glossary"
 msgstr "Un glossaire Git"
 
-#: command-list.h:205
+#: command-list.h:206
 msgid "Hooks used by Git"
 msgstr "Crochets utilisés par Git"
 
-#: command-list.h:206
+#: command-list.h:207
 msgid "Specifies intentionally untracked files to ignore"
 msgstr "Spécifie les fichiers non-suivis à ignorer intentionnellement"
 
-#: command-list.h:207
+#: command-list.h:208
 msgid "The Git repository browser"
 msgstr "Le navigateur de dépôt Git"
 
-#: command-list.h:208
+#: command-list.h:209
 msgid "Map author/committer names and/or E-Mail addresses"
 msgstr ""
 "Fait correspondre les noms d'auteur/validateur avec les adresses de courriel"
 
-#: command-list.h:209
+#: command-list.h:210
 msgid "Defining submodule properties"
 msgstr "Définition des propriétés de sous-module"
 
-#: command-list.h:210
+#: command-list.h:211
 msgid "Git namespaces"
 msgstr "Espaces de nom de Git"
 
-#: command-list.h:211
+#: command-list.h:212
 msgid "Helper programs to interact with remote repositories"
 msgstr "Programmes assistants pour interagir avec des dépôts distants"
 
-#: command-list.h:212
+#: command-list.h:213
 msgid "Git Repository Layout"
 msgstr "Disposition d'un dépôt Git"
 
-#: command-list.h:213
+#: command-list.h:214
 msgid "Specifying revisions and ranges for Git"
 msgstr "Spécification des révisions et portées pour Git"
 
-#: command-list.h:214
+#: command-list.h:215
 msgid "Mounting one repository inside another"
 msgstr "Montage d'un dépôt dans un autre dépôt"
 
-#: command-list.h:215
+#: command-list.h:216
 msgid "A tutorial introduction to Git"
 msgstr "Une introduction pratique à Git"
 
-#: command-list.h:216
+#: command-list.h:217
 msgid "A tutorial introduction to Git: part two"
 msgstr "Une introduction pratique à Git : deuxième partie"
 
-#: command-list.h:217
+#: command-list.h:218
 msgid "Git web interface (web frontend to Git repositories)"
 msgstr "Interface web de Git"
 
-#: command-list.h:218
+#: command-list.h:219
 msgid "An overview of recommended workflows with Git"
 msgstr "Un aperçu des flux de travail recommandés avec Git"
 
@@ -26087,76 +26663,50 @@ msgstr "Essai de fusion simple avec $pretty_name"
 msgid "Simple merge did not work, trying automatic merge."
 msgstr "La fusion simple a échoué, essai avec la fusion automatique."
 
-#: git-submodule.sh:401
-#, sh-format
-msgid "Unable to find current revision in submodule path '$displaypath'"
-msgstr ""
-"Impossible de trouver la révision courante dans le chemin de sous-module "
-"'$displaypath'"
-
-#: git-submodule.sh:411
-#, sh-format
-msgid "Unable to fetch in submodule path '$sm_path'"
-msgstr "Impossible de rapatrier dans le chemin de sous-module '$sm_path'"
-
-#: git-submodule.sh:416
-#, sh-format
-msgid ""
-"Unable to find current ${remote_name}/${branch} revision in submodule path "
-"'$sm_path'"
-msgstr ""
-"Impossible de trouver la révision courante ${remote_name}/${branch} dans le "
-"chemin de sous-module '$sm_path'"
-
-#: git-submodule.sh:464
-#, sh-format
-msgid "Failed to recurse into submodule path '$displaypath'"
-msgstr "Échec de parcours dans le chemin du sous-module '$displaypath'"
-
 #: git-sh-setup.sh:89 git-sh-setup.sh:94
 #, sh-format
 msgid "usage: $dashless $USAGE"
 msgstr "usage : $dashless $USAGE"
 
-#: git-sh-setup.sh:183
+#: git-sh-setup.sh:182
 #, sh-format
 msgid "Cannot chdir to $cdup, the toplevel of the working tree"
 msgstr ""
 "Impossible de se placer dans le répertoire $cdup, la racine de la copie de "
 "travail"
 
-#: git-sh-setup.sh:192 git-sh-setup.sh:199
+#: git-sh-setup.sh:191 git-sh-setup.sh:198
 #, sh-format
 msgid "fatal: $program_name cannot be used without a working tree."
 msgstr "fatal : $program_name ne peut pas être utilisé sans copie de travail."
 
-#: git-sh-setup.sh:213
+#: git-sh-setup.sh:212
 msgid "Cannot rewrite branches: You have unstaged changes."
 msgstr ""
 "Impossible de réécrire les branches : vous avez des modifications non "
 "indexées."
 
-#: git-sh-setup.sh:216
+#: git-sh-setup.sh:215
 #, sh-format
 msgid "Cannot $action: You have unstaged changes."
 msgstr "$action est impossible : vous avez des modifications non indexées."
 
-#: git-sh-setup.sh:227
+#: git-sh-setup.sh:226
 #, sh-format
 msgid "Cannot $action: Your index contains uncommitted changes."
 msgstr ""
 "$action est impossible : votre index contient des modifications non validées."
 
-#: git-sh-setup.sh:229
+#: git-sh-setup.sh:228
 msgid "Additionally, your index contains uncommitted changes."
 msgstr "De plus, votre index contient des modifications non validées."
 
-#: git-sh-setup.sh:349
+#: git-sh-setup.sh:348
 msgid "You need to run this command from the toplevel of the working tree."
 msgstr ""
 "Vous devez lancer cette commande depuis la racine de votre copie de travail."
 
-#: git-sh-setup.sh:354
+#: git-sh-setup.sh:353
 msgid "Unable to determine absolute path of git directory"
 msgstr "Impossible de déterminer le chemin absolu du répertoire git"
 
@@ -26846,23 +27396,23 @@ msgstr "impossible d'envoyer un message comme 7bit"
 msgid "invalid transfer encoding"
 msgstr "codage de transfert invalide"
 
-#: git-send-email.perl:2095
+#: git-send-email.perl:2100
 #, perl-format
 msgid ""
-"fatal: %s: rejected by sendemail-validate hook\n"
+"fatal: %s: rejected by %s hook\n"
 "%s\n"
 "warning: no patches were sent\n"
 msgstr ""
-"fatal : %s : rejeté par le crochet sendemail-validate\n"
+"fatal : %s : rejeté par le crochet %s\n"
 "%s\n"
 "attention : aucun patch envoyé\n"
 
-#: git-send-email.perl:2105 git-send-email.perl:2158 git-send-email.perl:2168
+#: git-send-email.perl:2110 git-send-email.perl:2163 git-send-email.perl:2173
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "impossible d'ouvrir %s :%s\n"
 
-#: git-send-email.perl:2108
+#: git-send-email.perl:2113
 #, perl-format
 msgid ""
 "fatal: %s:%d is longer than 998 characters\n"
@@ -26871,17 +27421,291 @@ msgstr ""
 "fatal : %s : %d est plus long que 998 caractères \n"
 "attention : aucun patch envoyé\n"
 
-#: git-send-email.perl:2126
+#: git-send-email.perl:2131
 #, perl-format
 msgid "Skipping %s with backup suffix '%s'.\n"
 msgstr "%s sauté avec un suffix de sauvegarde '%s'.\n"
 
 #. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:2130
+#: git-send-email.perl:2135
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "Souhaitez-vous réellement envoyer %s ?[y|N] : "
 
+#, perl-format
+#~ msgid "fatal: %s: rejected by %s hook\n"
+#~ msgstr "fatal : %s : rejetée par le crocher %s\n"
+
+#~ msgid "git archive --list"
+#~ msgstr "git archive --list"
+
+#, c-format
+#~ msgid "unknown value for --diff-merges: %s"
+#~ msgstr "valeur inconnue pour --diff-merges : %s"
+
+#, c-format
+#~ msgid "invalid value '%s' for lsrefs.unborn"
+#~ msgstr "valeur invalide '%s' pour lsrefs.unborn"
+
+#~ msgid "backend for `git stash -p`"
+#~ msgstr "backend pour `git stash -p`"
+
+#, c-format
+#~ msgid "Invalid value for --empty: %s"
+#~ msgstr "Valeur invalide pour --empty : %s"
+
+#, c-format
+#~ msgid "Invalid value for --patch-format: %s"
+#~ msgstr "Valeur invalide pour --patch-format : %s"
+
+#, c-format
+#~ msgid "Invalid value for --show-current-patch: %s"
+#~ msgstr "Valeur invalide pour --show-current-patch : %s"
+
+#~ msgid ""
+#~ "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad "
+#~ "| --term-new]"
+#~ msgstr ""
+#~ "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad "
+#~ "| --term-new]"
+
+#~ msgid "git bisect--helper --bisect-next"
+#~ msgstr "git bisect--helper --bisect-next"
+
+#~ msgid "git bisect--helper --bisect-visualize"
+#~ msgstr "git bisect--helper --bisect-visualize"
+
+#, c-format
+#~ msgid "invalid color '%s' in color.blame.repeatedLines"
+#~ msgstr "couleur invalide '%s' dans color.blame.repeatedLines"
+
+#~ msgid "invalid value for blame.coloring"
+#~ msgstr "valeur invalide pour blame.coloring"
+
+#~ msgid ""
+#~ "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e "
+#~ "| -p | <type> | --textconv | --filters) [--path=<path>] <object>"
+#~ msgstr ""
+#~ "git cat-file (-t [--allow-unknow-type] | -s [--allow-unknow-type] | -e | -"
+#~ "p | <type> | --textconv | --filters) [--path=<chemin>] <objet>"
+
+#~ msgid "show object type"
+#~ msgstr "afficher le type de l'objet"
+
+#~ msgid "exit with zero when there's no error"
+#~ msgstr "sortir avec un code d'erreur nul quand il n'y a aucune erreur"
+
+#~ msgid "show info and content of objects fed from the standard input"
+#~ msgstr ""
+#~ "afficher l'information et le contenu des objets passés en entrée standard"
+
+#~ msgid "show info about objects fed from the standard input"
+#~ msgstr "afficher l'information des objets passés en entrée standard"
+
+#~ msgid "follow in-tree symlinks (used with --batch or --batch-check)"
+#~ msgstr ""
+#~ "suivre les liens symbolique internes à la copie de travail (utilisé avec "
+#~ "--batch ou --batch-check)"
+
+#~ msgid "show all objects with --batch or --batch-check"
+#~ msgstr "montrer tous les objets avec --batch ou --batch-check"
+
+#~ msgid "do not order --batch-all-objects output"
+#~ msgstr "ne pas ordonner la sortie de --batch-all-objects"
+
+#~ msgid "set up tracking mode (see git-pull(1))"
+#~ msgstr "régler le mode de suivi (voir git-pull(1))"
+
+#~ msgid "Using both --reset-author and --author does not make sense"
+#~ msgstr ""
+#~ "L'utilisation simultanée de --reset-author et --author n'a pas de sens"
+
+#~ msgid "Options --squash and --fixup cannot be used together"
+#~ msgstr ""
+#~ "Les options --squash et --fixup ne peuvent pas être utilisées ensemble"
+
+#~ msgid "Only one of -c/-C/-F/--fixup can be used."
+#~ msgstr "Une seule option parmi -c/-C/-F/--fixup peut être utilisée."
+
+#~ msgid "Option -m cannot be combined with -c/-C/-F."
+#~ msgstr "L'option -m ne peut pas être combinée avec -c/-C/-F."
+
+#~ msgid ""
+#~ "Only one of --include/--only/--all/--interactive/--patch can be used."
+#~ msgstr ""
+#~ "Une seule option parmi --include/--only/--all/--interactive/--patch peut "
+#~ "être utilisée."
+
+#~ msgid "git count-objects [-v] [-H | --human-readable]"
+#~ msgstr "git count-objects [-v] [-H | --human-readable]"
+
+#, c-format
+#~ msgid "configuration fetch.output contains invalid value %s"
+#~ msgstr ""
+#~ "le paramètre de configuration fetch.output contient une valeur invalide %s"
+
+#~ msgid "--cached or --untracked cannot be used with --no-index"
+#~ msgstr ""
+#~ "--cached ou --untracked ne peuvent pas être utilisés avec --no-index"
+
+#~ msgid "--untracked cannot be used with --cached"
+#~ msgstr "--untracked ne peut pas être utilisé avec --cached"
+
+#~ msgid "git hash-object  --stdin-paths"
+#~ msgstr "git hash-object  --stdin-paths"
+
+#~ msgid "git help [-g|--guides]"
+#~ msgstr "git help [-g|--guides]"
+
+#~ msgid "git help [-c|--config]"
+#~ msgstr "git help [-c|--config]"
+
+#~ msgid "git mktag"
+#~ msgstr "git mktag"
+
+#~ msgid "git mktree [-z] [--missing] [--batch]"
+#~ msgstr "git mktree [-z] [--missing] [--batch]"
+
+#~ msgid "read from stdin"
+#~ msgstr "lire depuis l'entrée standard"
+
+#~ msgid "git notes merge --commit [-v | -q]"
+#~ msgstr "git notes merge --commit [-v | -q]"
+
+#~ msgid "git notes merge --abort [-v | -q]"
+#~ msgstr "git notes merge --abort [-v | -q]"
+
+#~ msgid "git notes get-ref"
+#~ msgstr "git notes get-ref"
+
+#~ msgid "invalid value for --missing"
+#~ msgstr "valeur invalide pour --missing"
+
+#~ msgid "git prune-packed [-n | --dry-run] [-q | --quiet]"
+#~ msgstr "git prune-packed [-n | --dry-run] [-q | --quiet]"
+
+#, c-format
+#~ msgid "Invalid value for %s: %s"
+#~ msgstr "Valeur invalide pour %s : %s"
+
+#, c-format
+#~ msgid "Invalid value for pull.ff: %s"
+#~ msgstr "Valeur invalide pour pull.ff : %s"
+
+#~ msgid "git rebase --continue | --abort | --skip | --edit-todo"
+#~ msgstr "git rebase --continue | --abort | --skip | --edit-todo"
+
+#, c-format
+#~ msgid "'%s' is not a valid timestamp"
+#~ msgstr "'%s' n'est pas un horodatage valide"
+
+#~ msgid "git reflog [ show | expire | delete | exists ]"
+#~ msgstr "git reflog [ show | expire | delete | exists ]"
+
+#~ msgid "git remote [-v | --verbose]"
+#~ msgstr "git remote [-v | --verbose]"
+
+#~ msgid "git replace [-f] --convert-graft-file"
+#~ msgstr "git replace [-f] --convert-graft-file"
+
+#, c-format
+#~ msgid ""
+#~ "\n"
+#~ "It took %.2f seconds to enumerate unstaged changes after reset.  You can\n"
+#~ "use '--quiet' to avoid this.  Set the config setting reset.quiet to true\n"
+#~ "to make this the default.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Les modifications non-indexées ont pris %.2f secondes à énumérer après "
+#~ "reset.\n"
+#~ "Vous pouvez utiliser '--quiet' pour éviter ce message. Réglez le "
+#~ "paramètre de\n"
+#~ "config reset.quiet à true pour avoir ce comportement en permanence.\n"
+
+#~ msgid "git sparse-checkout list"
+#~ msgstr "git sparse-checkout list"
+
+#~ msgid "unable to upgrade repository format to enable worktreeConfig"
+#~ msgstr ""
+#~ "impossible de mettre à jour le format de dépôt pour activer worktreeConfig"
+
+#~ msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
+#~ msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
+
+#~ msgid "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
+#~ msgstr "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
+
+#~ msgid "git sparse-checkout disable"
+#~ msgstr "git sparse-checkout disable"
+
+#~ msgid ""
+#~ "the stash.useBuiltin support has been removed!\n"
+#~ "See its entry in 'git help config' for details."
+#~ msgstr ""
+#~ "la prise en charge de stash.useBuiltin a été supprimée !\n"
+#~ "Voir son entrée dans 'git help config' pour plus de détails."
+
+#~ msgid "git stripspace [-s | --strip-comments]"
+#~ msgstr "git stripspace [-s | --strip-comments]"
+
+#~ msgid "git stripspace [-c | --comment-lines]"
+#~ msgstr "git stripspace [-c | --comment-lines]"
+
+#~ msgid "submodule--helper print-default-remote takes no arguments"
+#~ msgstr "submodule--helper  print-default-remote n'accepte aucun argument"
+
+#~ msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
+#~ msgstr ""
+#~ "git submodule--helper update-clone [--prefix=<chemin>] [<chemin>...]"
+
+#~ msgid "suppress output for update by rebase or merge"
+#~ msgstr ""
+#~ "supprimer la sortie lors de la mise à jour par un rebasage ou une fusion"
+
+#~ msgid "overrides update mode in case the repository is a fresh clone"
+#~ msgstr ""
+#~ "passer outre le mode mise à jour dans le cas où le dépôt est un clone "
+#~ "nouveau"
+
+#~ msgid "depth for shallow fetch"
+#~ msgstr "profondeur pour une récupération superficielle"
+
+#~ msgid "sha1"
+#~ msgstr "sha1"
+
+#~ msgid "SHA1 expected by superproject"
+#~ msgstr "SHA1 attendu par le super-projet"
+
+#~ msgid "subsha1"
+#~ msgstr "sous-sha1"
+
+#~ msgid "SHA1 of submodule's HEAD"
+#~ msgstr "SHA1 de la HEAD du sous-module"
+
+#~ msgid "git submodule--helper run-update-procedure [<options>] <path>"
+#~ msgstr "git submodule--helper run-update-procedure [<options>] <chemin>"
+
+#~ msgid "git submodule--helper config --check-writeable"
+#~ msgstr "git submodule--helper config --check-writeable"
+
+#~ msgid "git update-server-info [--force]"
+#~ msgstr "git update-server-info [--force]"
+
+#~ msgid "Initialize and modify the sparse-checkout"
+#~ msgstr "Initialiser et modifier l'extraction clairsemée"
+
+#, sh-format
+#~ msgid ""
+#~ "Unable to find current ${remote_name}/${branch} revision in submodule "
+#~ "path '$sm_path'"
+#~ msgstr ""
+#~ "Impossible de trouver la révision courante ${remote_name}/${branch} dans "
+#~ "le chemin de sous-module '$sm_path'"
+
+#, sh-format
+#~ msgid "Failed to recurse into submodule path '$displaypath'"
+#~ msgstr "Échec de parcours dans le chemin du sous-module '$displaypath'"
+
 #~ msgid "--index outside a repository"
 #~ msgstr "--index hors d'un dépôt"
 
index 196249abd43d1eb07a09fea4b0363ae8d8e4c72f..054cb99c06fdce193cdae20cb7e6811f52c8da17 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2022-01-17 08:31+0800\n"
+"POT-Creation-Date: 2022-04-13 14:52+0800\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,213 +18,212 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
-#: add-interactive.c:380
+#: add-interactive.c:382
 #, c-format
 msgid "Huh (%s)?"
 msgstr ""
 
-#: add-interactive.c:533 add-interactive.c:834 reset.c:65 sequencer.c:3509
-#: sequencer.c:3974 sequencer.c:4136 builtin/rebase.c:1233
-#: builtin/rebase.c:1642
+#: add-interactive.c:535 add-interactive.c:836 reset.c:136 sequencer.c:3505
+#: sequencer.c:3970 sequencer.c:4127 builtin/rebase.c:1261
+#: builtin/rebase.c:1671
 msgid "could not read index"
 msgstr ""
 
-#: add-interactive.c:588 git-add--interactive.perl:269
+#: add-interactive.c:590 git-add--interactive.perl:269
 #: git-add--interactive.perl:294
 msgid "binary"
 msgstr ""
 
-#: add-interactive.c:646 git-add--interactive.perl:278
+#: add-interactive.c:648 git-add--interactive.perl:278
 #: git-add--interactive.perl:332
 msgid "nothing"
 msgstr ""
 
-#: add-interactive.c:647 git-add--interactive.perl:314
+#: add-interactive.c:649 git-add--interactive.perl:314
 #: git-add--interactive.perl:329
 msgid "unchanged"
 msgstr ""
 
-#: add-interactive.c:684 git-add--interactive.perl:641
+#: add-interactive.c:686 git-add--interactive.perl:641
 msgid "Update"
 msgstr ""
 
-#: add-interactive.c:701 add-interactive.c:889
+#: add-interactive.c:703 add-interactive.c:891
 #, c-format
 msgid "could not stage '%s'"
 msgstr ""
 
-#: add-interactive.c:707 add-interactive.c:896 reset.c:89 sequencer.c:3713
+#: add-interactive.c:709 add-interactive.c:898 reset.c:160 sequencer.c:3709
 msgid "could not write index"
 msgstr ""
 
-#: add-interactive.c:710 git-add--interactive.perl:626
+#: add-interactive.c:712 git-add--interactive.perl:626
 #, c-format, perl-format
 msgid "updated %d path\n"
 msgid_plural "updated %d paths\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: add-interactive.c:728 git-add--interactive.perl:676
+#: add-interactive.c:730 git-add--interactive.perl:676
 #, c-format, perl-format
 msgid "note: %s is untracked now.\n"
 msgstr ""
 
-#: add-interactive.c:733 apply.c:4151 builtin/checkout.c:306
+#: add-interactive.c:735 apply.c:4133 builtin/checkout.c:311
 #: builtin/reset.c:167
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr ""
 
-#: add-interactive.c:763 git-add--interactive.perl:653
+#: add-interactive.c:765 git-add--interactive.perl:653
 msgid "Revert"
 msgstr ""
 
-#: add-interactive.c:779
+#: add-interactive.c:781
 msgid "Could not parse HEAD^{tree}"
 msgstr ""
 
-#: add-interactive.c:817 git-add--interactive.perl:629
+#: add-interactive.c:819 git-add--interactive.perl:629
 #, c-format, perl-format
 msgid "reverted %d path\n"
 msgid_plural "reverted %d paths\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: add-interactive.c:868 git-add--interactive.perl:693
+#: add-interactive.c:870 git-add--interactive.perl:693
 #, c-format
 msgid "No untracked files.\n"
 msgstr ""
 
-#: add-interactive.c:872 git-add--interactive.perl:687
+#: add-interactive.c:874 git-add--interactive.perl:687
 msgid "Add untracked"
 msgstr ""
 
-#: add-interactive.c:899 git-add--interactive.perl:623
+#: add-interactive.c:901 git-add--interactive.perl:623
 #, c-format, perl-format
 msgid "added %d path\n"
 msgid_plural "added %d paths\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: add-interactive.c:929
+#: add-interactive.c:931
 #, c-format
 msgid "ignoring unmerged: %s"
 msgstr ""
 
-#: add-interactive.c:941 add-patch.c:1752 git-add--interactive.perl:1371
+#: add-interactive.c:943 add-patch.c:1758 git-add--interactive.perl:1371
 #, c-format
 msgid "Only binary files changed.\n"
 msgstr ""
 
-#: add-interactive.c:943 add-patch.c:1750 git-add--interactive.perl:1373
+#: add-interactive.c:945 add-patch.c:1756 git-add--interactive.perl:1373
 #, c-format
 msgid "No changes.\n"
 msgstr ""
 
-#: add-interactive.c:947 git-add--interactive.perl:1381
+#: add-interactive.c:949 git-add--interactive.perl:1381
 msgid "Patch update"
 msgstr ""
 
-#: add-interactive.c:986 git-add--interactive.perl:1794
+#: add-interactive.c:988 git-add--interactive.perl:1794
 msgid "Review diff"
 msgstr ""
 
-#: add-interactive.c:1014
+#: add-interactive.c:1016
 msgid "show paths with changes"
 msgstr ""
 
-#: add-interactive.c:1016
+#: add-interactive.c:1018
 msgid "add working tree state to the staged set of changes"
 msgstr ""
 
-#: add-interactive.c:1018
+#: add-interactive.c:1020
 msgid "revert staged set of changes back to the HEAD version"
 msgstr ""
 
-#: add-interactive.c:1020
+#: add-interactive.c:1022
 msgid "pick hunks and update selectively"
 msgstr ""
 
-#: add-interactive.c:1022
+#: add-interactive.c:1024
 msgid "view diff between HEAD and index"
 msgstr ""
 
-#: add-interactive.c:1024
+#: add-interactive.c:1026
 msgid "add contents of untracked files to the staged set of changes"
 msgstr ""
 
-#: add-interactive.c:1032 add-interactive.c:1081
+#: add-interactive.c:1034 add-interactive.c:1083
 msgid "Prompt help:"
 msgstr ""
 
-#: add-interactive.c:1034
+#: add-interactive.c:1036
 msgid "select a single item"
 msgstr ""
 
-#: add-interactive.c:1036
+#: add-interactive.c:1038
 msgid "select a range of items"
 msgstr ""
 
-#: add-interactive.c:1038
+#: add-interactive.c:1040
 msgid "select multiple ranges"
 msgstr ""
 
-#: add-interactive.c:1040 add-interactive.c:1085
+#: add-interactive.c:1042 add-interactive.c:1087
 msgid "select item based on unique prefix"
 msgstr ""
 
-#: add-interactive.c:1042
+#: add-interactive.c:1044
 msgid "unselect specified items"
 msgstr ""
 
-#: add-interactive.c:1044
+#: add-interactive.c:1046
 msgid "choose all items"
 msgstr ""
 
-#: add-interactive.c:1046
+#: add-interactive.c:1048
 msgid "(empty) finish selecting"
 msgstr ""
 
-#: add-interactive.c:1083
+#: add-interactive.c:1085
 msgid "select a numbered item"
 msgstr ""
 
-#: add-interactive.c:1087
+#: add-interactive.c:1089
 msgid "(empty) select nothing"
 msgstr ""
 
-#: add-interactive.c:1095 builtin/clean.c:839 git-add--interactive.perl:1898
+#: add-interactive.c:1097 builtin/clean.c:839 git-add--interactive.perl:1898
 msgid "*** Commands ***"
 msgstr ""
 
-#: add-interactive.c:1096 builtin/clean.c:840 git-add--interactive.perl:1895
+#: add-interactive.c:1098 builtin/clean.c:840 git-add--interactive.perl:1895
 msgid "What now"
 msgstr ""
 
-#: add-interactive.c:1148 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "staged"
 msgstr ""
 
-#: add-interactive.c:1148 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "unstaged"
 msgstr ""
 
-#: add-interactive.c:1148 apply.c:5020 apply.c:5023 builtin/am.c:2367
-#: builtin/am.c:2370 builtin/bugreport.c:107 builtin/clone.c:128
-#: builtin/fetch.c:153 builtin/merge.c:287 builtin/pull.c:194
-#: builtin/submodule--helper.c:404 builtin/submodule--helper.c:1858
-#: builtin/submodule--helper.c:1861 builtin/submodule--helper.c:2504
-#: builtin/submodule--helper.c:2507 builtin/submodule--helper.c:2574
-#: builtin/submodule--helper.c:2579 builtin/submodule--helper.c:2812
+#: add-interactive.c:1150 apply.c:5002 apply.c:5005 builtin/am.c:2370
+#: builtin/am.c:2373 builtin/bugreport.c:107 builtin/clone.c:132
+#: builtin/fetch.c:154 builtin/merge.c:287 builtin/pull.c:194
+#: builtin/submodule--helper.c:412 builtin/submodule--helper.c:1872
+#: builtin/submodule--helper.c:1875 builtin/submodule--helper.c:2709
+#: builtin/submodule--helper.c:2712 builtin/submodule--helper.c:2891
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr ""
 
-#: add-interactive.c:1155
+#: add-interactive.c:1157
 msgid "could not refresh index"
 msgstr ""
 
-#: add-interactive.c:1169 builtin/clean.c:804 git-add--interactive.perl:1805
+#: add-interactive.c:1171 builtin/clean.c:804 git-add--interactive.perl:1805
 #, c-format
 msgid "Bye.\n"
 msgstr ""
@@ -485,37 +484,37 @@ msgstr ""
 msgid "could not parse colored hunk header '%.*s'"
 msgstr ""
 
-#: add-patch.c:420
+#: add-patch.c:431
 msgid "could not parse diff"
 msgstr ""
 
-#: add-patch.c:439
+#: add-patch.c:450
 msgid "could not parse colored diff"
 msgstr ""
 
-#: add-patch.c:453
+#: add-patch.c:464
 #, c-format
 msgid "failed to run '%s'"
 msgstr ""
 
-#: add-patch.c:612
+#: add-patch.c:618
 msgid "mismatched output from interactive.diffFilter"
 msgstr ""
 
-#: add-patch.c:613
+#: add-patch.c:619
 msgid ""
 "Your filter must maintain a one-to-one correspondence\n"
 "between its input and output lines."
 msgstr ""
 
-#: add-patch.c:791
+#: add-patch.c:797
 #, c-format
 msgid ""
 "expected context line #%d in\n"
 "%.*s"
 msgstr ""
 
-#: add-patch.c:806
+#: add-patch.c:812
 #, c-format
 msgid ""
 "hunks do not overlap:\n"
@@ -524,11 +523,11 @@ msgid ""
 "%.*s"
 msgstr ""
 
-#: add-patch.c:1082 git-add--interactive.perl:1115
+#: add-patch.c:1088 git-add--interactive.perl:1115
 msgid "Manual hunk edit mode -- see bottom for a quick guide.\n"
 msgstr ""
 
-#: add-patch.c:1086
+#: add-patch.c:1092
 #, c-format
 msgid ""
 "---\n"
@@ -538,18 +537,18 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
-#: add-patch.c:1100 git-add--interactive.perl:1129
+#: add-patch.c:1106 git-add--interactive.perl:1129
 msgid ""
 "If it does not apply cleanly, you will be given an opportunity to\n"
 "edit again.  If all lines of the hunk are removed, then the edit is\n"
 "aborted and the hunk is left unchanged.\n"
 msgstr ""
 
-#: add-patch.c:1133
+#: add-patch.c:1139
 msgid "could not parse hunk header"
 msgstr ""
 
-#: add-patch.c:1178
+#: add-patch.c:1184
 msgid "'git apply --cached' failed"
 msgstr ""
 
@@ -565,24 +564,24 @@ msgstr ""
 #. Consider translating (saying "no" discards!) as
 #. (saying "n" for "no" discards!) if the translation
 #. of the word "no" does not start with n.
-#: add-patch.c:1247 git-add--interactive.perl:1244
+#: add-patch.c:1253 git-add--interactive.perl:1244
 msgid ""
 "Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? "
 msgstr ""
 
-#: add-patch.c:1290
+#: add-patch.c:1296
 msgid "The selected hunks do not apply to the index!"
 msgstr ""
 
-#: add-patch.c:1291 git-add--interactive.perl:1348
+#: add-patch.c:1297 git-add--interactive.perl:1348
 msgid "Apply them to the worktree anyway? "
 msgstr ""
 
-#: add-patch.c:1298 git-add--interactive.perl:1351
+#: add-patch.c:1304 git-add--interactive.perl:1351
 msgid "Nothing was applied.\n"
 msgstr ""
 
-#: add-patch.c:1355
+#: add-patch.c:1361
 msgid ""
 "j - leave this hunk undecided, see next undecided hunk\n"
 "J - leave this hunk undecided, see next hunk\n"
@@ -595,136 +594,136 @@ msgid ""
 "? - print help\n"
 msgstr ""
 
-#: add-patch.c:1517 add-patch.c:1527
+#: add-patch.c:1523 add-patch.c:1533
 msgid "No previous hunk"
 msgstr ""
 
-#: add-patch.c:1522 add-patch.c:1532
+#: add-patch.c:1528 add-patch.c:1538
 msgid "No next hunk"
 msgstr ""
 
-#: add-patch.c:1538
+#: add-patch.c:1544
 msgid "No other hunks to goto"
 msgstr ""
 
-#: add-patch.c:1549 git-add--interactive.perl:1608
+#: add-patch.c:1555 git-add--interactive.perl:1608
 msgid "go to which hunk (<ret> to see more)? "
 msgstr ""
 
-#: add-patch.c:1550 git-add--interactive.perl:1610
+#: add-patch.c:1556 git-add--interactive.perl:1610
 msgid "go to which hunk? "
 msgstr ""
 
-#: add-patch.c:1561
+#: add-patch.c:1567
 #, c-format
 msgid "Invalid number: '%s'"
 msgstr ""
 
-#: add-patch.c:1566
+#: add-patch.c:1572
 #, c-format
 msgid "Sorry, only %d hunk available."
 msgid_plural "Sorry, only %d hunks available."
 msgstr[0] ""
 msgstr[1] ""
 
-#: add-patch.c:1575
+#: add-patch.c:1581
 msgid "No other hunks to search"
 msgstr ""
 
-#: add-patch.c:1581 git-add--interactive.perl:1663
+#: add-patch.c:1587 git-add--interactive.perl:1663
 msgid "search for regex? "
 msgstr ""
 
-#: add-patch.c:1596
+#: add-patch.c:1602
 #, c-format
 msgid "Malformed search regexp %s: %s"
 msgstr ""
 
-#: add-patch.c:1613
+#: add-patch.c:1619
 msgid "No hunk matches the given pattern"
 msgstr ""
 
-#: add-patch.c:1620
+#: add-patch.c:1626
 msgid "Sorry, cannot split this hunk"
 msgstr ""
 
-#: add-patch.c:1624
+#: add-patch.c:1630
 #, c-format
 msgid "Split into %d hunks."
 msgstr ""
 
-#: add-patch.c:1628
+#: add-patch.c:1634
 msgid "Sorry, cannot edit this hunk"
 msgstr ""
 
-#: add-patch.c:1680
+#: add-patch.c:1686
 msgid "'git apply' failed"
 msgstr ""
 
-#: advice.c:78
+#: advice.c:81
 #, c-format
 msgid ""
 "\n"
 "Disable this message with \"git config advice.%s false\""
 msgstr ""
 
-#: advice.c:94
+#: advice.c:97
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr ""
 
-#: advice.c:178
+#: advice.c:181
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr ""
 
-#: advice.c:180
+#: advice.c:183
 msgid "Committing is not possible because you have unmerged files."
 msgstr ""
 
-#: advice.c:182
+#: advice.c:185
 msgid "Merging is not possible because you have unmerged files."
 msgstr ""
 
-#: advice.c:184
+#: advice.c:187
 msgid "Pulling is not possible because you have unmerged files."
 msgstr ""
 
-#: advice.c:186
+#: advice.c:189
 msgid "Reverting is not possible because you have unmerged files."
 msgstr ""
 
-#: advice.c:188
+#: advice.c:191
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr ""
 
-#: advice.c:196
+#: advice.c:199
 msgid ""
 "Fix them up in the work tree, and then use 'git add/rm <file>'\n"
 "as appropriate to mark resolution and make a commit."
 msgstr ""
 
-#: advice.c:204
+#: advice.c:207
 msgid "Exiting because of an unresolved conflict."
 msgstr ""
 
-#: advice.c:209 builtin/merge.c:1382
+#: advice.c:212 builtin/merge.c:1388
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr ""
 
-#: advice.c:211
+#: advice.c:214
 msgid "Please, commit your changes before merging."
 msgstr ""
 
-#: advice.c:212
+#: advice.c:215
 msgid "Exiting because of unfinished merge."
 msgstr ""
 
-#: advice.c:217
+#: advice.c:220
 msgid "Not possible to fast-forward, aborting."
 msgstr ""
 
-#: advice.c:227
+#: advice.c:230
 #, c-format
 msgid ""
 "The following paths and/or pathspecs matched paths that exist\n"
@@ -732,14 +731,14 @@ msgid ""
 "updated in the index:\n"
 msgstr ""
 
-#: advice.c:234
+#: advice.c:237
 msgid ""
 "If you intend to update such entries, try one of the following:\n"
 "* Use the --sparse option.\n"
 "* Disable or modify the sparsity rules."
 msgstr ""
 
-#: advice.c:242
+#: advice.c:245
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -780,80 +779,83 @@ msgstr ""
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr ""
 
-#: apply.c:136 archive.c:584 range-diff.c:559 revision.c:2303 revision.c:2307
-#: revision.c:2316 revision.c:2321 revision.c:2527 revision.c:2870
-#: revision.c:2874 revision.c:2880 revision.c:2883 revision.c:2885
-#: builtin/add.c:510 builtin/add.c:512 builtin/add.c:529 builtin/add.c:541
-#: builtin/branch.c:727 builtin/checkout.c:467 builtin/checkout.c:470
-#: builtin/checkout.c:1644 builtin/checkout.c:1754 builtin/checkout.c:1757
-#: builtin/clone.c:906 builtin/commit.c:358 builtin/commit.c:361
-#: builtin/commit.c:1196 builtin/describe.c:593 builtin/diff-tree.c:155
-#: builtin/difftool.c:733 builtin/fast-export.c:1245 builtin/fetch.c:2038
-#: builtin/fetch.c:2043 builtin/index-pack.c:1852 builtin/init-db.c:560
-#: builtin/log.c:1946 builtin/log.c:1948 builtin/ls-files.c:778
-#: builtin/merge.c:1403 builtin/merge.c:1405 builtin/pack-objects.c:4073
-#: builtin/push.c:592 builtin/push.c:630 builtin/push.c:636 builtin/push.c:641
-#: builtin/rebase.c:1193 builtin/rebase.c:1195 builtin/rebase.c:1199
-#: builtin/repack.c:684 builtin/repack.c:715 builtin/reset.c:426
-#: builtin/reset.c:462 builtin/rev-list.c:541 builtin/show-branch.c:710
-#: builtin/stash.c:1707 builtin/stash.c:1710 builtin/submodule--helper.c:1316
-#: builtin/submodule--helper.c:2975 builtin/tag.c:526 builtin/tag.c:572
-#: builtin/worktree.c:702
+#: apply.c:138 archive.c:584 parse-options.c:1122 range-diff.c:555
+#: revision.c:2314 revision.c:2318 revision.c:2327 revision.c:2332
+#: revision.c:2560 revision.c:2895 revision.c:2899 revision.c:2907
+#: revision.c:2910 revision.c:2912 builtin/add.c:507 builtin/add.c:509
+#: builtin/add.c:515 builtin/add.c:527 builtin/branch.c:755
+#: builtin/checkout.c:472 builtin/checkout.c:475 builtin/checkout.c:1663
+#: builtin/checkout.c:1773 builtin/checkout.c:1776 builtin/clone.c:921
+#: builtin/commit.c:359 builtin/commit.c:362 builtin/commit.c:1200
+#: builtin/commit.c:1256 builtin/commit.c:1273 builtin/describe.c:593
+#: builtin/diff-tree.c:155 builtin/difftool.c:733 builtin/fast-export.c:1245
+#: builtin/fetch.c:2141 builtin/fetch.c:2162 builtin/fetch.c:2167
+#: builtin/help.c:602 builtin/index-pack.c:1858 builtin/init-db.c:560
+#: builtin/log.c:1968 builtin/log.c:1970 builtin/ls-files.c:778
+#: builtin/merge-base.c:163 builtin/merge-base.c:169 builtin/merge.c:1409
+#: builtin/merge.c:1411 builtin/pack-objects.c:4098 builtin/push.c:592
+#: builtin/push.c:630 builtin/push.c:636 builtin/push.c:641
+#: builtin/rebase.c:1221 builtin/rebase.c:1223 builtin/rebase.c:1227
+#: builtin/repack.c:688 builtin/repack.c:719 builtin/reset.c:433
+#: builtin/reset.c:469 builtin/rev-list.c:537 builtin/show-branch.c:711
+#: builtin/stash.c:1696 builtin/stash.c:1699 builtin/submodule--helper.c:1328
+#: builtin/submodule--helper.c:3054 builtin/tag.c:527 builtin/tag.c:573
+#: builtin/worktree.c:779
 #, c-format
 msgid "options '%s' and '%s' cannot be used together"
 msgstr ""
 
-#: apply.c:139 apply.c:150 apply.c:153
+#: apply.c:141 apply.c:152 apply.c:155
 #, c-format
 msgid "'%s' outside a repository"
 msgstr ""
 
-#: apply.c:800
+#: apply.c:807
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr ""
 
-#: apply.c:809
+#: apply.c:816
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr ""
 
-#: apply.c:883
+#: apply.c:890
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr ""
 
-#: apply.c:921
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr ""
 
-#: apply.c:927
+#: apply.c:934
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr ""
 
-#: apply.c:928
+#: apply.c:935
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr ""
 
-#: apply.c:933
+#: apply.c:940
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr ""
 
-#: apply.c:962
+#: apply.c:969
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr ""
 
-#: apply.c:1281
+#: apply.c:1288
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr ""
 
-#: apply.c:1371
+#: apply.c:1378
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -864,538 +866,538 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: apply.c:1384
+#: apply.c:1391
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr ""
 
-#: apply.c:1480
+#: apply.c:1487
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr ""
 
-#: apply.c:1549
+#: apply.c:1556
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr ""
 
-#: apply.c:1752
+#: apply.c:1759
 msgid "new file depends on old contents"
 msgstr ""
 
-#: apply.c:1754
+#: apply.c:1761
 msgid "deleted file still has contents"
 msgstr ""
 
-#: apply.c:1788
+#: apply.c:1795
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr ""
 
-#: apply.c:1825
+#: apply.c:1832
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr ""
 
-#: apply.c:1827
+#: apply.c:1834
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr ""
 
-#: apply.c:1830
+#: apply.c:1837
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr ""
 
-#: apply.c:1978
+#: apply.c:1985
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr ""
 
-#: apply.c:2015
+#: apply.c:2022
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr ""
 
-#: apply.c:2177
+#: apply.c:2184
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr ""
 
-#: apply.c:2263
+#: apply.c:2270
 #, c-format
 msgid "unable to read symlink %s"
 msgstr ""
 
-#: apply.c:2267
+#: apply.c:2274
 #, c-format
 msgid "unable to open or read %s"
 msgstr ""
 
-#: apply.c:2936
+#: apply.c:2943
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr ""
 
-#: apply.c:3057
+#: apply.c:3064
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] ""
 msgstr[1] ""
 
-#: apply.c:3069
+#: apply.c:3076
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr ""
 
-#: apply.c:3075
+#: apply.c:3082
 #, c-format
 msgid ""
 "while searching for:\n"
 "%.*s"
 msgstr ""
 
-#: apply.c:3097
+#: apply.c:3104
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr ""
 
-#: apply.c:3105
+#: apply.c:3112
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr ""
 
-#: apply.c:3152
+#: apply.c:3159
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr ""
 
-#: apply.c:3163
+#: apply.c:3170
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr ""
 
-#: apply.c:3171
+#: apply.c:3178
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr ""
 
-#: apply.c:3189
+#: apply.c:3196
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr ""
 
-#: apply.c:3202
+#: apply.c:3209
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr ""
 
-#: apply.c:3209
+#: apply.c:3216
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 
-#: apply.c:3230
+#: apply.c:3237
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr ""
 
-#: apply.c:3353
+#: apply.c:3360
 #, c-format
 msgid "cannot checkout %s"
 msgstr ""
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:104 pack-revindex.c:214
-#: setup.c:309
+#: apply.c:3412 apply.c:3423 apply.c:3469 midx.c:105 pack-revindex.c:214
+#: setup.c:310
 #, c-format
 msgid "failed to read %s"
 msgstr ""
 
-#: apply.c:3413
+#: apply.c:3420
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr ""
 
-#: apply.c:3442 apply.c:3711
+#: apply.c:3449 apply.c:3721
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr ""
 
-#: apply.c:3549 apply.c:3726
+#: apply.c:3559 apply.c:3736
 #, c-format
 msgid "%s: does not exist in index"
 msgstr ""
 
-#: apply.c:3558 apply.c:3734 apply.c:3978
+#: apply.c:3568 apply.c:3744 apply.c:3960
 #, c-format
 msgid "%s: does not match index"
 msgstr ""
 
-#: apply.c:3595
+#: apply.c:3605
 msgid "repository lacks the necessary blob to perform 3-way merge."
 msgstr ""
 
-#: apply.c:3598
+#: apply.c:3608
 #, c-format
 msgid "Performing three-way merge...\n"
 msgstr ""
 
-#: apply.c:3614 apply.c:3618
+#: apply.c:3624 apply.c:3628
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr ""
 
-#: apply.c:3630
+#: apply.c:3640
 #, c-format
 msgid "Failed to perform three-way merge...\n"
 msgstr ""
 
-#: apply.c:3644
+#: apply.c:3654
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr ""
 
-#: apply.c:3649
+#: apply.c:3659
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr ""
 
-#: apply.c:3666
+#: apply.c:3676
 #, c-format
 msgid "Falling back to direct application...\n"
 msgstr ""
 
-#: apply.c:3678
+#: apply.c:3688
 msgid "removal patch leaves file contents"
 msgstr ""
 
-#: apply.c:3751
+#: apply.c:3761
 #, c-format
 msgid "%s: wrong type"
 msgstr ""
 
-#: apply.c:3753
+#: apply.c:3763
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr ""
 
-#: apply.c:3918 apply.c:3920 read-cache.c:889 read-cache.c:918
-#: read-cache.c:1381
+#: apply.c:3900 apply.c:3902 read-cache.c:903 read-cache.c:932
+#: read-cache.c:1399
 #, c-format
 msgid "invalid path '%s'"
 msgstr ""
 
-#: apply.c:3976
+#: apply.c:3958
 #, c-format
 msgid "%s: already exists in index"
 msgstr ""
 
-#: apply.c:3980
+#: apply.c:3962
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr ""
 
-#: apply.c:4000
+#: apply.c:3982
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr ""
 
-#: apply.c:4005
+#: apply.c:3987
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr ""
 
-#: apply.c:4025
+#: apply.c:4007
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr ""
 
-#: apply.c:4029
+#: apply.c:4011
 #, c-format
 msgid "%s: patch does not apply"
 msgstr ""
 
-#: apply.c:4044
+#: apply.c:4026
 #, c-format
 msgid "Checking patch %s..."
 msgstr ""
 
-#: apply.c:4136
+#: apply.c:4118
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr ""
 
-#: apply.c:4143
+#: apply.c:4125
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr ""
 
-#: apply.c:4146
+#: apply.c:4128
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr ""
 
-#: apply.c:4155
+#: apply.c:4137
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr ""
 
-#: apply.c:4165
+#: apply.c:4147
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr ""
 
-#: apply.c:4303
+#: apply.c:4285
 #, c-format
 msgid "unable to remove %s from index"
 msgstr ""
 
-#: apply.c:4337
+#: apply.c:4319
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr ""
 
-#: apply.c:4343
+#: apply.c:4325
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr ""
 
-#: apply.c:4351
+#: apply.c:4333
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr ""
 
-#: apply.c:4357 apply.c:4502
+#: apply.c:4339 apply.c:4484
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr ""
 
-#: apply.c:4400 builtin/bisect--helper.c:540 builtin/gc.c:2258
+#: apply.c:4382 builtin/bisect--helper.c:540 builtin/gc.c:2258
 #: builtin/gc.c:2293
 #, c-format
 msgid "failed to write to '%s'"
 msgstr ""
 
-#: apply.c:4404
+#: apply.c:4386
 #, c-format
 msgid "closing file '%s'"
 msgstr ""
 
-#: apply.c:4474
+#: apply.c:4456
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr ""
 
-#: apply.c:4572
+#: apply.c:4554
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr ""
 
-#: apply.c:4580
+#: apply.c:4562
 msgid "internal error"
 msgstr ""
 
-#: apply.c:4583
+#: apply.c:4565
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] ""
 msgstr[1] ""
 
-#: apply.c:4594
+#: apply.c:4576
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr ""
 
-#: apply.c:4602
+#: apply.c:4584
 #, c-format
 msgid "cannot open %s"
 msgstr ""
 
-#: apply.c:4616
+#: apply.c:4598
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr ""
 
-#: apply.c:4620
+#: apply.c:4602
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr ""
 
-#: apply.c:4749
+#: apply.c:4731
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr ""
 
-#: apply.c:4758
+#: apply.c:4740
 msgid "No valid patches in input (allow with \"--allow-empty\")"
 msgstr ""
 
-#: apply.c:4779
+#: apply.c:4761
 msgid "unable to read index file"
 msgstr ""
 
-#: apply.c:4936
+#: apply.c:4918
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr ""
 
-#: apply.c:4963
+#: apply.c:4945
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] ""
 msgstr[1] ""
 
-#: apply.c:4969 apply.c:4984
+#: apply.c:4951 apply.c:4966
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] ""
 msgstr[1] ""
 
-#: apply.c:4977
+#: apply.c:4959
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] ""
 msgstr[1] ""
 
-#: apply.c:4993 builtin/add.c:704 builtin/mv.c:338 builtin/rm.c:430
+#: apply.c:4975 builtin/add.c:690 builtin/mv.c:338 builtin/rm.c:430
 msgid "Unable to write new index file"
 msgstr ""
 
-#: apply.c:5021
+#: apply.c:5003
 msgid "don't apply changes matching the given path"
 msgstr ""
 
-#: apply.c:5024
+#: apply.c:5006
 msgid "apply changes matching the given path"
 msgstr ""
 
-#: apply.c:5026 builtin/am.c:2376
+#: apply.c:5008 builtin/am.c:2379
 msgid "num"
 msgstr ""
 
-#: apply.c:5027
+#: apply.c:5009
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr ""
 
-#: apply.c:5030
+#: apply.c:5012
 msgid "ignore additions made by the patch"
 msgstr ""
 
-#: apply.c:5032
+#: apply.c:5014
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr ""
 
-#: apply.c:5036
+#: apply.c:5018
 msgid "show number of added and deleted lines in decimal notation"
 msgstr ""
 
-#: apply.c:5038
+#: apply.c:5020
 msgid "instead of applying the patch, output a summary for the input"
 msgstr ""
 
-#: apply.c:5040
+#: apply.c:5022
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr ""
 
-#: apply.c:5042
+#: apply.c:5024
 msgid "make sure the patch is applicable to the current index"
 msgstr ""
 
-#: apply.c:5044
+#: apply.c:5026
 msgid "mark new files with `git add --intent-to-add`"
 msgstr ""
 
-#: apply.c:5046
+#: apply.c:5028
 msgid "apply a patch without touching the working tree"
 msgstr ""
 
-#: apply.c:5048
+#: apply.c:5030
 msgid "accept a patch that touches outside the working area"
 msgstr ""
 
-#: apply.c:5051
+#: apply.c:5033
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr ""
 
-#: apply.c:5053
+#: apply.c:5035
 msgid "attempt three-way merge, fall back on normal patch if that fails"
 msgstr ""
 
-#: apply.c:5055
+#: apply.c:5037
 msgid "build a temporary index based on embedded index information"
 msgstr ""
 
-#: apply.c:5058 builtin/checkout-index.c:196
+#: apply.c:5040 builtin/checkout-index.c:230
 msgid "paths are separated with NUL character"
 msgstr ""
 
-#: apply.c:5060
+#: apply.c:5042
 msgid "ensure at least <n> lines of context match"
 msgstr ""
 
-#: apply.c:5061 builtin/am.c:2352 builtin/am.c:2355
+#: apply.c:5043 builtin/am.c:2355 builtin/am.c:2358
 #: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
-#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3960
-#: builtin/rebase.c:1051
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3983
+#: builtin/rebase.c:1079
 msgid "action"
 msgstr ""
 
-#: apply.c:5062
+#: apply.c:5044
 msgid "detect new or modified lines that have whitespace errors"
 msgstr ""
 
-#: apply.c:5065 apply.c:5068
+#: apply.c:5047 apply.c:5050
 msgid "ignore changes in whitespace when finding context"
 msgstr ""
 
-#: apply.c:5071
+#: apply.c:5053
 msgid "apply the patch in reverse"
 msgstr ""
 
-#: apply.c:5073
+#: apply.c:5055
 msgid "don't expect at least one line of context"
 msgstr ""
 
-#: apply.c:5075
+#: apply.c:5057
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr ""
 
-#: apply.c:5077
+#: apply.c:5059
 msgid "allow overlapping hunks"
 msgstr ""
 
-#: apply.c:5080
+#: apply.c:5062
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr ""
 
-#: apply.c:5083
+#: apply.c:5065
 msgid "do not trust the line counts in the hunk headers"
 msgstr ""
 
-#: apply.c:5085 builtin/am.c:2364
+#: apply.c:5067 builtin/am.c:2367
 msgid "root"
 msgstr ""
 
-#: apply.c:5086
+#: apply.c:5068
 msgid "prepend <root> to all filenames"
 msgstr ""
 
-#: apply.c:5089
+#: apply.c:5071
 msgid "don't return error for empty patches"
 msgstr ""
 
-#: archive-tar.c:125 archive-zip.c:345
+#: archive-tar.c:125 archive-zip.c:346
 #, c-format
 msgid "cannot stream blob %s"
 msgstr ""
 
-#: archive-tar.c:265 archive-zip.c:358
+#: archive-tar.c:265 archive-zip.c:359
 #, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
 msgstr ""
@@ -1414,22 +1416,22 @@ msgstr ""
 msgid "'%s' filter reported error"
 msgstr ""
 
-#: archive-zip.c:318
+#: archive-zip.c:319
 #, c-format
 msgid "path is not valid UTF-8: %s"
 msgstr ""
 
-#: archive-zip.c:322
+#: archive-zip.c:323
 #, c-format
 msgid "path too long (%d chars, SHA1: %s): %s"
 msgstr ""
 
-#: archive-zip.c:469 builtin/pack-objects.c:365 builtin/pack-objects.c:368
+#: archive-zip.c:470 builtin/pack-objects.c:363 builtin/pack-objects.c:366
 #, c-format
 msgid "deflate error (%d)"
 msgstr ""
 
-#: archive-zip.c:603
+#: archive-zip.c:604
 #, c-format
 msgid "timestamp too large for this system: %<PRIuMAX>"
 msgstr ""
@@ -1438,10 +1440,6 @@ msgstr ""
 msgid "git archive [<options>] <tree-ish> [<path>...]"
 msgstr ""
 
-#: archive.c:15
-msgid "git archive --list"
-msgstr ""
-
 #: archive.c:16
 msgid ""
 "git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"
@@ -1452,12 +1450,12 @@ msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr ""
 
 #: archive.c:188 archive.c:341 builtin/gc.c:497 builtin/notes.c:238
-#: builtin/tag.c:578
+#: builtin/tag.c:579
 #, c-format
 msgid "cannot read '%s'"
 msgstr ""
 
-#: archive.c:426 builtin/add.c:215 builtin/add.c:671 builtin/rm.c:334
+#: archive.c:426 builtin/add.c:214 builtin/add.c:657 builtin/rm.c:334
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr ""
@@ -1499,7 +1497,7 @@ msgstr ""
 msgid "archive format"
 msgstr ""
 
-#: archive.c:552 builtin/log.c:1790
+#: archive.c:552 builtin/log.c:1809
 msgid "prefix"
 msgstr ""
 
@@ -1507,12 +1505,12 @@ msgstr ""
 msgid "prepend prefix to each pathname in the archive"
 msgstr ""
 
-#: archive.c:554 archive.c:557 builtin/blame.c:880 builtin/blame.c:884
-#: builtin/blame.c:885 builtin/commit-tree.c:115 builtin/config.c:135
+#: archive.c:554 archive.c:557 builtin/blame.c:881 builtin/blame.c:885
+#: builtin/blame.c:886 builtin/commit-tree.c:115 builtin/config.c:135
 #: builtin/fast-export.c:1181 builtin/fast-export.c:1183
-#: builtin/fast-export.c:1187 builtin/grep.c:935 builtin/hash-object.c:103
+#: builtin/fast-export.c:1187 builtin/grep.c:936 builtin/hash-object.c:104
 #: builtin/ls-files.c:654 builtin/ls-files.c:657 builtin/notes.c:410
-#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:190
+#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:195
 msgid "file"
 msgstr ""
 
@@ -1540,8 +1538,8 @@ msgstr ""
 msgid "list supported archive formats"
 msgstr ""
 
-#: archive.c:568 builtin/archive.c:89 builtin/clone.c:118 builtin/clone.c:121
-#: builtin/submodule--helper.c:1870 builtin/submodule--helper.c:2513
+#: archive.c:568 builtin/archive.c:89 builtin/clone.c:122 builtin/clone.c:125
+#: builtin/submodule--helper.c:1884 builtin/submodule--helper.c:2718
 msgid "repo"
 msgstr ""
 
@@ -1562,11 +1560,12 @@ msgstr ""
 msgid "Unexpected option --remote"
 msgstr ""
 
-#: archive.c:580 fetch-pack.c:300 revision.c:2887 builtin/add.c:544
-#: builtin/add.c:576 builtin/checkout.c:1763 builtin/commit.c:370
-#: builtin/fast-export.c:1230 builtin/index-pack.c:1848 builtin/log.c:2115
-#: builtin/reset.c:435 builtin/reset.c:493 builtin/rm.c:281
-#: builtin/stash.c:1719 builtin/worktree.c:508 http-fetch.c:144
+#: archive.c:580 fetch-pack.c:300 revision.c:2914 builtin/add.c:530
+#: builtin/add.c:562 builtin/checkout.c:1782 builtin/clone.c:1099
+#: builtin/clone.c:1102 builtin/commit.c:371 builtin/fast-export.c:1230
+#: builtin/index-pack.c:1854 builtin/log.c:2140 builtin/reset.c:442
+#: builtin/reset.c:500 builtin/rm.c:281 builtin/stash.c:1708
+#: builtin/worktree.c:580 builtin/worktree.c:781 http-fetch.c:144
 #: http-fetch.c:153
 #, c-format
 msgid "the option '%s' requires '%s'"
@@ -1586,17 +1585,17 @@ msgstr ""
 msgid "Argument not supported for format '%s': -%d"
 msgstr ""
 
-#: attr.c:203
+#: attr.c:202
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr ""
 
-#: attr.c:364
+#: attr.c:363
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr ""
 
-#: attr.c:404
+#: attr.c:403
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1612,33 +1611,33 @@ msgstr ""
 msgid "We cannot bisect more!\n"
 msgstr ""
 
-#: bisect.c:764
+#: bisect.c:765
 #, c-format
 msgid "Not a valid commit name %s"
 msgstr ""
 
-#: bisect.c:789
+#: bisect.c:790
 #, c-format
 msgid ""
 "The merge base %s is bad.\n"
 "This means the bug has been fixed between %s and [%s].\n"
 msgstr ""
 
-#: bisect.c:794
+#: bisect.c:795
 #, c-format
 msgid ""
 "The merge base %s is new.\n"
 "The property has changed between %s and [%s].\n"
 msgstr ""
 
-#: bisect.c:799
+#: bisect.c:800
 #, c-format
 msgid ""
 "The merge base %s is %s.\n"
 "This means the first '%s' commit is between %s and [%s].\n"
 msgstr ""
 
-#: bisect.c:807
+#: bisect.c:808
 #, c-format
 msgid ""
 "Some %s revs are not ancestors of the %s rev.\n"
@@ -1646,7 +1645,7 @@ msgid ""
 "Maybe you mistook %s and %s revs?\n"
 msgstr ""
 
-#: bisect.c:820
+#: bisect.c:821
 #, c-format
 msgid ""
 "the merge base between %s and [%s] must be skipped.\n"
@@ -1654,43 +1653,43 @@ msgid ""
 "We continue anyway."
 msgstr ""
 
-#: bisect.c:859
+#: bisect.c:860
 #, c-format
 msgid "Bisecting: a merge base must be tested\n"
 msgstr ""
 
-#: bisect.c:909
+#: bisect.c:910
 #, c-format
 msgid "a %s revision is needed"
 msgstr ""
 
-#: bisect.c:939
+#: bisect.c:940
 #, c-format
 msgid "could not create file '%s'"
 msgstr ""
 
-#: bisect.c:985 builtin/merge.c:155
+#: bisect.c:986 builtin/merge.c:155
 #, c-format
 msgid "could not read file '%s'"
 msgstr ""
 
-#: bisect.c:1025
+#: bisect.c:1026
 msgid "reading bisect refs failed"
 msgstr ""
 
-#: bisect.c:1055
+#: bisect.c:1056
 #, c-format
 msgid "%s was both %s and %s\n"
 msgstr ""
 
-#: bisect.c:1064
+#: bisect.c:1065
 #, c-format
 msgid ""
 "No testable commit found.\n"
 "Maybe you started with bad path arguments?\n"
 msgstr ""
 
-#: bisect.c:1093
+#: bisect.c:1094
 #, c-format
 msgid "(roughly %d step)"
 msgid_plural "(roughly %d steps)"
@@ -1700,127 +1699,157 @@ msgstr[1] ""
 #. TRANSLATORS: the last %s will be replaced with "(roughly %d
 #. steps)" translation.
 #.
-#: bisect.c:1099
+#: bisect.c:1100
 #, c-format
 msgid "Bisecting: %d revision left to test after this %s\n"
 msgid_plural "Bisecting: %d revisions left to test after this %s\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: blame.c:2776
+#: blame.c:2773
 msgid "--contents and --reverse do not blend well."
 msgstr ""
 
-#: blame.c:2790
+#: blame.c:2787
 msgid "cannot use --contents with final commit object name"
 msgstr ""
 
-#: blame.c:2811
+#: blame.c:2808
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 
-#: blame.c:2820 bundle.c:224 midx.c:1042 ref-filter.c:2370 remote.c:2158
-#: sequencer.c:2352 sequencer.c:4899 submodule.c:883 builtin/commit.c:1114
-#: builtin/log.c:429 builtin/log.c:1036 builtin/log.c:1644 builtin/log.c:2071
-#: builtin/log.c:2362 builtin/merge.c:431 builtin/pack-objects.c:3373
-#: builtin/pack-objects.c:3775 builtin/pack-objects.c:3790
+#: blame.c:2817 bundle.c:231 midx.c:1058 ref-filter.c:2371 remote.c:2157
+#: sequencer.c:2348 sequencer.c:4872 submodule.c:913 builtin/commit.c:1118
+#: builtin/log.c:437 builtin/log.c:1055 builtin/log.c:1663 builtin/log.c:2096
+#: builtin/log.c:2387 builtin/merge.c:431 builtin/pack-objects.c:3381
+#: builtin/pack-objects.c:3781 builtin/pack-objects.c:3796
 #: builtin/shortlog.c:255
 msgid "revision walk setup failed"
 msgstr ""
 
-#: blame.c:2838
+#: blame.c:2835
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 
-#: blame.c:2849
+#: blame.c:2846
 #, c-format
 msgid "no such path %s in %s"
 msgstr ""
 
-#: blame.c:2860
+#: blame.c:2857
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr ""
 
-#: branch.c:77
+#: branch.c:93
 msgid ""
 "cannot inherit upstream tracking configuration of multiple refs when "
 "rebasing is requested"
 msgstr ""
 
-#: branch.c:88
+#: branch.c:104
 #, c-format
 msgid "not setting branch '%s' as its own upstream"
 msgstr ""
 
-#: branch.c:144
+#: branch.c:160
 #, c-format
 msgid "branch '%s' set up to track '%s' by rebasing."
 msgstr ""
 
-#: branch.c:145
+#: branch.c:161
 #, c-format
 msgid "branch '%s' set up to track '%s'."
 msgstr ""
 
-#: branch.c:148
+#: branch.c:164
 #, c-format
 msgid "branch '%s' set up to track:"
 msgstr ""
 
-#: branch.c:160
+#: branch.c:176
 msgid "unable to write upstream branch configuration"
 msgstr ""
 
-#: branch.c:162
+#: branch.c:178
 msgid ""
 "\n"
 "After fixing the error cause you may try to fix up\n"
 "the remote tracking information by invoking:"
 msgstr ""
 
-#: branch.c:203
+#: branch.c:219
 #, c-format
 msgid "asked to inherit tracking from '%s', but no remote is set"
 msgstr ""
 
-#: branch.c:209
+#: branch.c:225
 #, c-format
 msgid "asked to inherit tracking from '%s', but no merge configuration is set"
 msgstr ""
 
-#: branch.c:252
+#: branch.c:277
+#, c-format
+msgid "not tracking: ambiguous information for ref '%s'"
+msgstr ""
+
+#. TRANSLATORS: This is a line listing a remote with duplicate
+#. refspecs in the advice message below. For RTL languages you'll
+#. probably want to swap the "%s" and leading "  " space around.
+#.
+#. TRANSLATORS: This is line item of ambiguous object output
+#. from describe_ambiguous_object() above. For RTL languages
+#. you'll probably want to swap the "%s" and leading " " space
+#. around.
+#.
+#: branch.c:289 object-name.c:464
+#, c-format
+msgid "  %s\n"
+msgstr ""
+
+#. TRANSLATORS: The second argument is a \n-delimited list of
+#. duplicate refspecs, composed above.
+#.
+#: branch.c:295
 #, c-format
-msgid "not tracking: ambiguous information for ref %s"
+msgid ""
+"There are multiple remotes whose fetch refspecs map to the remote\n"
+"tracking ref '%s':\n"
+"%s\n"
+"This is typically a configuration error.\n"
+"\n"
+"To support setting up tracking branches, ensure that\n"
+"different remotes' fetch refspecs map into different\n"
+"tracking namespaces."
 msgstr ""
 
-#: branch.c:287
+#: branch.c:344
 #, c-format
 msgid "'%s' is not a valid branch name"
 msgstr ""
 
-#: branch.c:307
+#: branch.c:364
 #, c-format
 msgid "a branch named '%s' already exists"
 msgstr ""
 
-#: branch.c:313
+#: branch.c:370
 #, c-format
 msgid "cannot force update the branch '%s' checked out at '%s'"
 msgstr ""
 
-#: branch.c:336
+#: branch.c:393
 #, c-format
 msgid "cannot set up tracking information; starting point '%s' is not a branch"
 msgstr ""
 
-#: branch.c:338
+#: branch.c:395
 #, c-format
 msgid "the requested upstream branch '%s' does not exist"
 msgstr ""
 
-#: branch.c:340
+#: branch.c:397
 msgid ""
 "\n"
 "If you are planning on basing your work on an upstream\n"
@@ -1832,126 +1861,143 @@ msgid ""
 "\"git push -u\" to set the upstream config as you push."
 msgstr ""
 
-#: branch.c:384 builtin/replace.c:321 builtin/replace.c:377
+#: branch.c:445 builtin/replace.c:321 builtin/replace.c:377
 #: builtin/replace.c:423 builtin/replace.c:453
 #, c-format
 msgid "not a valid object name: '%s'"
 msgstr ""
 
-#: branch.c:404
+#: branch.c:465
 #, c-format
 msgid "ambiguous object name: '%s'"
 msgstr ""
 
-#: branch.c:409
+#: branch.c:470
 #, c-format
 msgid "not a valid branch point: '%s'"
 msgstr ""
 
-#: branch.c:469
+#: branch.c:658
+#, c-format
+msgid "submodule '%s': unable to find submodule"
+msgstr ""
+
+#: branch.c:661
+#, c-format
+msgid ""
+"You may try updating the submodules using 'git checkout %s && git submodule "
+"update --init'"
+msgstr ""
+
+#: branch.c:672 branch.c:698
+#, c-format
+msgid "submodule '%s': cannot create branch '%s'"
+msgstr ""
+
+#: branch.c:730
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr ""
 
-#: branch.c:494
+#: branch.c:755
 #, c-format
 msgid "HEAD of working tree %s is not updated"
 msgstr ""
 
-#: bundle.c:44
+#: bundle.c:45
 #, c-format
 msgid "unrecognized bundle hash algorithm: %s"
 msgstr ""
 
-#: bundle.c:48
+#: bundle.c:53
 #, c-format
 msgid "unknown capability '%s'"
 msgstr ""
 
-#: bundle.c:74
+#: bundle.c:79
 #, c-format
 msgid "'%s' does not look like a v2 or v3 bundle file"
 msgstr ""
 
-#: bundle.c:113
+#: bundle.c:118
 #, c-format
 msgid "unrecognized header: %s%s (%d)"
 msgstr ""
 
-#: bundle.c:140 rerere.c:464 rerere.c:674 sequencer.c:2620 sequencer.c:3406
-#: builtin/commit.c:862
+#: bundle.c:145 rerere.c:464 rerere.c:675 sequencer.c:2616 sequencer.c:3402
+#: builtin/commit.c:865
 #, c-format
 msgid "could not open '%s'"
 msgstr ""
 
-#: bundle.c:198
+#: bundle.c:203
 msgid "Repository lacks these prerequisite commits:"
 msgstr ""
 
-#: bundle.c:201
+#: bundle.c:206
 msgid "need a repository to verify a bundle"
 msgstr ""
 
-#: bundle.c:257
+#: bundle.c:264
 #, c-format
 msgid "The bundle contains this ref:"
-msgid_plural "The bundle contains these %d refs:"
+msgid_plural "The bundle contains these %<PRIuMAX> refs:"
 msgstr[0] ""
 msgstr[1] ""
 
-#: bundle.c:264
+#: bundle.c:272
 msgid "The bundle records a complete history."
 msgstr ""
 
-#: bundle.c:266
+#: bundle.c:274
 #, c-format
 msgid "The bundle requires this ref:"
-msgid_plural "The bundle requires these %d refs:"
+msgid_plural "The bundle requires these %<PRIuMAX> refs:"
 msgstr[0] ""
 msgstr[1] ""
 
-#: bundle.c:333
+#: bundle.c:350
 msgid "unable to dup bundle descriptor"
 msgstr ""
 
-#: bundle.c:340
+#: bundle.c:357
 msgid "Could not spawn pack-objects"
 msgstr ""
 
-#: bundle.c:351
+#: bundle.c:368
 msgid "pack-objects died"
 msgstr ""
 
-#: bundle.c:400
+#: bundle.c:417
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr ""
 
-#: bundle.c:504
+#: bundle.c:533 builtin/log.c:211 builtin/log.c:1975 builtin/shortlog.c:400
 #, c-format
-msgid "unsupported bundle version %d"
+msgid "unrecognized argument: %s"
 msgstr ""
 
-#: bundle.c:506
+#: bundle.c:548
 #, c-format
-msgid "cannot write bundle version %d with algorithm %s"
+msgid "unsupported bundle version %d"
 msgstr ""
 
-#: bundle.c:524 builtin/log.c:210 builtin/log.c:1953 builtin/shortlog.c:399
+#: bundle.c:550
 #, c-format
-msgid "unrecognized argument: %s"
+msgid "cannot write bundle version %d with algorithm %s"
 msgstr ""
 
-#: bundle.c:553
+#: bundle.c:600
 msgid "Refusing to create empty bundle."
 msgstr ""
 
-#: bundle.c:563
+#: bundle.c:610
 #, c-format
 msgid "cannot create '%s'"
 msgstr ""
 
-#: bundle.c:588
+#: bundle.c:639
 msgid "index-pack died"
 msgstr ""
 
@@ -1979,7 +2025,7 @@ msgstr ""
 msgid "invalid color value: %.*s"
 msgstr ""
 
-#: commit-graph.c:204 midx.c:51
+#: commit-graph.c:204 midx.c:52
 msgid "invalid hash version"
 msgstr ""
 
@@ -2007,234 +2053,235 @@ msgstr ""
 msgid "commit-graph file is too small to hold %u chunks"
 msgstr ""
 
-#: commit-graph.c:482
+#: commit-graph.c:485
 msgid "commit-graph has no base graphs chunk"
 msgstr ""
 
-#: commit-graph.c:492
+#: commit-graph.c:495
 msgid "commit-graph chain does not match"
 msgstr ""
 
-#: commit-graph.c:540
+#: commit-graph.c:543
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
 msgstr ""
 
-#: commit-graph.c:564
+#: commit-graph.c:567
 msgid "unable to find all commit-graph files"
 msgstr ""
 
-#: commit-graph.c:749 commit-graph.c:786
+#: commit-graph.c:752 commit-graph.c:789
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr ""
 
-#: commit-graph.c:770
+#: commit-graph.c:773
 #, c-format
 msgid "could not find commit %s"
 msgstr ""
 
-#: commit-graph.c:803
+#: commit-graph.c:806
 msgid "commit-graph requires overflow generation data but has none"
 msgstr ""
 
-#: commit-graph.c:1108 builtin/am.c:1369
+#: commit-graph.c:1111 builtin/am.c:1370 builtin/checkout.c:775
+#: builtin/clone.c:705
 #, c-format
 msgid "unable to parse commit %s"
 msgstr ""
 
-#: commit-graph.c:1370 builtin/pack-objects.c:3070
+#: commit-graph.c:1373 builtin/pack-objects.c:3078
 #, c-format
 msgid "unable to get type of object %s"
 msgstr ""
 
-#: commit-graph.c:1401
+#: commit-graph.c:1404
 msgid "Loading known commits in commit graph"
 msgstr ""
 
-#: commit-graph.c:1418
+#: commit-graph.c:1421
 msgid "Expanding reachable commits in commit graph"
 msgstr ""
 
-#: commit-graph.c:1438
+#: commit-graph.c:1441
 msgid "Clearing commit marks in commit graph"
 msgstr ""
 
-#: commit-graph.c:1457
+#: commit-graph.c:1460
 msgid "Computing commit graph topological levels"
 msgstr ""
 
-#: commit-graph.c:1510
+#: commit-graph.c:1513
 msgid "Computing commit graph generation numbers"
 msgstr ""
 
-#: commit-graph.c:1591
+#: commit-graph.c:1598
 msgid "Computing commit changed paths Bloom filters"
 msgstr ""
 
-#: commit-graph.c:1668
+#: commit-graph.c:1675
 msgid "Collecting referenced commits"
 msgstr ""
 
-#: commit-graph.c:1693
+#: commit-graph.c:1701
 #, c-format
-msgid "Finding commits for commit graph in %d pack"
-msgid_plural "Finding commits for commit graph in %d packs"
+msgid "Finding commits for commit graph in %<PRIuMAX> pack"
+msgid_plural "Finding commits for commit graph in %<PRIuMAX> packs"
 msgstr[0] ""
 msgstr[1] ""
 
-#: commit-graph.c:1706
+#: commit-graph.c:1714
 #, c-format
 msgid "error adding pack %s"
 msgstr ""
 
-#: commit-graph.c:1710
+#: commit-graph.c:1718
 #, c-format
 msgid "error opening index for %s"
 msgstr ""
 
-#: commit-graph.c:1747
+#: commit-graph.c:1756
 msgid "Finding commits for commit graph among packed objects"
 msgstr ""
 
-#: commit-graph.c:1765
+#: commit-graph.c:1774
 msgid "Finding extra edges in commit graph"
 msgstr ""
 
-#: commit-graph.c:1814
+#: commit-graph.c:1823
 msgid "failed to write correct number of base graph ids"
 msgstr ""
 
-#: commit-graph.c:1845 midx.c:1149
+#: commit-graph.c:1854 midx.c:1168 builtin/sparse-checkout.c:475
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr ""
 
-#: commit-graph.c:1858
+#: commit-graph.c:1868
 msgid "unable to create temporary graph layer"
 msgstr ""
 
-#: commit-graph.c:1863
+#: commit-graph.c:1873
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr ""
 
-#: commit-graph.c:1920
+#: commit-graph.c:1930
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] ""
 msgstr[1] ""
 
-#: commit-graph.c:1956
+#: commit-graph.c:1967
 msgid "unable to open commit-graph chain file"
 msgstr ""
 
-#: commit-graph.c:1972
+#: commit-graph.c:1983
 msgid "failed to rename base commit-graph file"
 msgstr ""
 
-#: commit-graph.c:1992
+#: commit-graph.c:2004
 msgid "failed to rename temporary commit-graph file"
 msgstr ""
 
-#: commit-graph.c:2125
+#: commit-graph.c:2137
 msgid "Scanning merged commits"
 msgstr ""
 
-#: commit-graph.c:2169
+#: commit-graph.c:2181
 msgid "Merging commit-graph"
 msgstr ""
 
-#: commit-graph.c:2277
+#: commit-graph.c:2289
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr ""
 
-#: commit-graph.c:2384
+#: commit-graph.c:2396
 msgid "too many commits to write graph"
 msgstr ""
 
-#: commit-graph.c:2482
+#: commit-graph.c:2494
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 
-#: commit-graph.c:2492
+#: commit-graph.c:2504
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr ""
 
-#: commit-graph.c:2502 commit-graph.c:2517
+#: commit-graph.c:2514 commit-graph.c:2529
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr ""
 
-#: commit-graph.c:2509
+#: commit-graph.c:2521
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr ""
 
-#: commit-graph.c:2527
+#: commit-graph.c:2539
 msgid "Verifying commits in commit graph"
 msgstr ""
 
-#: commit-graph.c:2542
+#: commit-graph.c:2554
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 
-#: commit-graph.c:2549
+#: commit-graph.c:2561
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
 
-#: commit-graph.c:2559
+#: commit-graph.c:2571
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr ""
 
-#: commit-graph.c:2568
+#: commit-graph.c:2580
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr ""
 
-#: commit-graph.c:2582
+#: commit-graph.c:2594
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr ""
 
-#: commit-graph.c:2587
+#: commit-graph.c:2599
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
 msgstr ""
 
-#: commit-graph.c:2591
+#: commit-graph.c:2603
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
 msgstr ""
 
-#: commit-graph.c:2608
+#: commit-graph.c:2620
 #, c-format
 msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
 msgstr ""
 
-#: commit-graph.c:2614
+#: commit-graph.c:2626
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
 
-#: commit.c:53 sequencer.c:3109 builtin/am.c:399 builtin/am.c:444
-#: builtin/am.c:449 builtin/am.c:1448 builtin/am.c:2123 builtin/replace.c:456
+#: commit.c:54 sequencer.c:3105 builtin/am.c:400 builtin/am.c:445
+#: builtin/am.c:450 builtin/am.c:1449 builtin/am.c:2124 builtin/replace.c:456
 #, c-format
 msgid "could not parse %s"
 msgstr ""
 
-#: commit.c:55
+#: commit.c:56
 #, c-format
 msgid "%s %s is not a commit!"
 msgstr ""
 
-#: commit.c:196
+#: commit.c:197
 msgid ""
 "Support for <GIT_DIR>/info/grafts is deprecated\n"
 "and will be removed in a future Git version.\n"
@@ -2246,27 +2293,27 @@ msgid ""
 "\"git config advice.graftFileDeprecated false\""
 msgstr ""
 
-#: commit.c:1241
+#: commit.c:1252
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr ""
 
-#: commit.c:1245
+#: commit.c:1256
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr ""
 
-#: commit.c:1248
+#: commit.c:1259
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr ""
 
-#: commit.c:1251
+#: commit.c:1262
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr ""
 
-#: commit.c:1505
+#: commit.c:1516
 msgid ""
 "Warning: commit message did not conform to UTF-8.\n"
 "You may want to amend it after fixing the message, or set the config\n"
@@ -2277,7 +2324,15 @@ msgstr ""
 msgid "memory exhausted"
 msgstr ""
 
-#: config.c:125
+#: compat/terminal.c:167
+msgid "cannot resume in the background, please use 'fg' to resume"
+msgstr ""
+
+#: compat/terminal.c:168
+msgid "cannot restore terminal settings"
+msgstr ""
+
+#: config.c:143
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2287,333 +2342,358 @@ msgid ""
 "This might be due to circular includes."
 msgstr ""
 
-#: config.c:141
+#: config.c:159
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr ""
 
-#: config.c:152
+#: config.c:170
 msgid "relative config includes must come from files"
 msgstr ""
 
-#: config.c:201
+#: config.c:219
 msgid "relative config include conditionals must come from files"
 msgstr ""
 
-#: config.c:398
+#: config.c:364
+msgid ""
+"remote URLs cannot be configured in file directly or indirectly included by "
+"includeIf.hasconfig:remote.*.url"
+msgstr ""
+
+#: config.c:508
 #, c-format
 msgid "invalid config format: %s"
 msgstr ""
 
-#: config.c:402
+#: config.c:512
 #, c-format
 msgid "missing environment variable name for configuration '%.*s'"
 msgstr ""
 
-#: config.c:407
+#: config.c:517
 #, c-format
 msgid "missing environment variable '%s' for configuration '%.*s'"
 msgstr ""
 
-#: config.c:443
+#: config.c:553
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr ""
 
-#: config.c:448
+#: config.c:558
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr ""
 
-#: config.c:470 sequencer.c:2806
+#: config.c:580 sequencer.c:2802
 #, c-format
 msgid "invalid key: %s"
 msgstr ""
 
-#: config.c:475
+#: config.c:585
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr ""
 
-#: config.c:495
+#: config.c:605
 msgid "empty config key"
 msgstr ""
 
-#: config.c:513 config.c:525
+#: config.c:623 config.c:635
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr ""
 
-#: config.c:539 config.c:556 config.c:563 config.c:572
+#: config.c:649 config.c:666 config.c:673 config.c:682
 #, c-format
 msgid "bogus format in %s"
 msgstr ""
 
-#: config.c:606
+#: config.c:716
 #, c-format
 msgid "bogus count in %s"
 msgstr ""
 
-#: config.c:610
+#: config.c:720
 #, c-format
 msgid "too many entries in %s"
 msgstr ""
 
-#: config.c:620
+#: config.c:730
 #, c-format
 msgid "missing config key %s"
 msgstr ""
 
-#: config.c:628
+#: config.c:738
 #, c-format
 msgid "missing config value %s"
 msgstr ""
 
-#: config.c:979
+#: config.c:1089
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr ""
 
-#: config.c:983
+#: config.c:1093
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr ""
 
-#: config.c:987
+#: config.c:1097
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr ""
 
-#: config.c:991
+#: config.c:1101
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr ""
 
-#: config.c:995
+#: config.c:1105
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr ""
 
-#: config.c:999
+#: config.c:1109
 #, c-format
 msgid "bad config line %d in %s"
 msgstr ""
 
-#: config.c:1136
+#: config.c:1246
 msgid "out of range"
 msgstr ""
 
-#: config.c:1136
+#: config.c:1246
 msgid "invalid unit"
 msgstr ""
 
-#: config.c:1137
+#: config.c:1247
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr ""
 
-#: config.c:1147
+#: config.c:1257
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr ""
 
-#: config.c:1150
+#: config.c:1260
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr ""
 
-#: config.c:1153
+#: config.c:1263
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr ""
 
-#: config.c:1156
+#: config.c:1266
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr ""
 
-#: config.c:1159
+#: config.c:1269
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr ""
 
-#: config.c:1162
+#: config.c:1272
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr ""
 
-#: config.c:1241
+#: config.c:1368
+#, c-format
+msgid "invalid value for variable %s"
+msgstr ""
+
+#: config.c:1389
+#, c-format
+msgid "ignoring unknown core.fsync component '%s'"
+msgstr ""
+
+#: config.c:1425
 #, c-format
 msgid "bad boolean config value '%s' for '%s'"
 msgstr ""
 
-#: config.c:1259
+#: config.c:1443
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr ""
 
-#: config.c:1268
+#: config.c:1452
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr ""
 
-#: config.c:1361
+#: config.c:1545
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr ""
 
-#: config.c:1375 config.c:1386
+#: config.c:1559 config.c:1570
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr ""
 
-#: config.c:1476
+#: config.c:1660
 msgid "core.commentChar should only be one character"
 msgstr ""
 
-#: config.c:1509
+#: config.c:1692
+#, c-format
+msgid "ignoring unknown core.fsyncMethod value '%s'"
+msgstr ""
+
+#: config.c:1698
+msgid "core.fsyncObjectFiles is deprecated; use core.fsync instead"
+msgstr ""
+
+#: config.c:1714
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr ""
 
-#: config.c:1584
+#: config.c:1800
 #, c-format
 msgid "malformed value for %s"
 msgstr ""
 
-#: config.c:1610
+#: config.c:1826
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr ""
 
-#: config.c:1611
+#: config.c:1827
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr ""
 
-#: config.c:1672 builtin/pack-objects.c:4053
+#: config.c:1888 builtin/pack-objects.c:4078
 #, c-format
 msgid "bad pack compression level %d"
 msgstr ""
 
-#: config.c:1795
+#: config.c:2014
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr ""
 
-#: config.c:1798
+#: config.c:2017
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr ""
 
-#: config.c:1816
+#: config.c:2035
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr ""
 
-#: config.c:1861
+#: config.c:2080
 #, c-format
 msgid "failed to parse %s"
 msgstr ""
 
-#: config.c:1917
+#: config.c:2136
 msgid "unable to parse command-line config"
 msgstr ""
 
-#: config.c:2285
+#: config.c:2512
 msgid "unknown error occurred while reading the configuration files"
 msgstr ""
 
-#: config.c:2459
+#: config.c:2686
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr ""
 
-#: config.c:2504
+#: config.c:2731
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr ""
 
-#: config.c:2550
+#: config.c:2763
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr ""
 
-#: config.c:2552
+#: config.c:2765
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr ""
 
-#: config.c:2637
+#: config.c:2850
 #, c-format
 msgid "invalid section name '%s'"
 msgstr ""
 
-#: config.c:2669
+#: config.c:2882
 #, c-format
 msgid "%s has multiple values"
 msgstr ""
 
-#: config.c:2698
+#: config.c:2911
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr ""
 
-#: config.c:2950 config.c:3277
+#: config.c:3177 config.c:3518
 #, c-format
 msgid "could not lock config file %s"
 msgstr ""
 
-#: config.c:2961
+#: config.c:3188
 #, c-format
 msgid "opening %s"
 msgstr ""
 
-#: config.c:2998 builtin/config.c:361
+#: config.c:3225 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr ""
 
-#: config.c:3023
+#: config.c:3250
 #, c-format
 msgid "invalid config file %s"
 msgstr ""
 
-#: config.c:3036 config.c:3290
+#: config.c:3263 config.c:3531
 #, c-format
 msgid "fstat on %s failed"
 msgstr ""
 
-#: config.c:3047
+#: config.c:3274
 #, c-format
 msgid "unable to mmap '%s'%s"
 msgstr ""
 
-#: config.c:3057 config.c:3295
+#: config.c:3284 config.c:3536
 #, c-format
 msgid "chmod on %s failed"
 msgstr ""
 
-#: config.c:3142 config.c:3392
+#: config.c:3369 config.c:3633
 #, c-format
 msgid "could not write config file %s"
 msgstr ""
 
-#: config.c:3176
+#: config.c:3403
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr ""
 
-#: config.c:3178 builtin/remote.c:662 builtin/remote.c:860 builtin/remote.c:868
+#: config.c:3405 builtin/remote.c:666 builtin/remote.c:885 builtin/remote.c:893
 #, c-format
 msgid "could not unset '%s'"
 msgstr ""
 
-#: config.c:3268
+#: config.c:3509
 #, c-format
 msgid "invalid section name: %s"
 msgstr ""
 
-#: config.c:3435
+#: config.c:3676
 #, c-format
 msgid "missing value for '%s'"
 msgstr ""
@@ -2928,68 +3008,68 @@ msgstr ""
 msgid "refusing to work with credential missing protocol field"
 msgstr ""
 
-#: credential.c:395
+#: credential.c:396
 #, c-format
 msgid "url contains a newline in its %s component: %s"
 msgstr ""
 
-#: credential.c:439
+#: credential.c:440
 #, c-format
 msgid "url has no scheme: %s"
 msgstr ""
 
-#: credential.c:512
+#: credential.c:513
 #, c-format
 msgid "credential url cannot be parsed: %s"
 msgstr ""
 
-#: date.c:138
+#: date.c:139
 msgid "in the future"
 msgstr ""
 
-#: date.c:144
+#: date.c:145
 #, c-format
 msgid "%<PRIuMAX> second ago"
 msgid_plural "%<PRIuMAX> seconds ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: date.c:151
+#: date.c:152
 #, c-format
 msgid "%<PRIuMAX> minute ago"
 msgid_plural "%<PRIuMAX> minutes ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: date.c:158
+#: date.c:159
 #, c-format
 msgid "%<PRIuMAX> hour ago"
 msgid_plural "%<PRIuMAX> hours ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: date.c:165
+#: date.c:166
 #, c-format
 msgid "%<PRIuMAX> day ago"
 msgid_plural "%<PRIuMAX> days ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: date.c:171
+#: date.c:172
 #, c-format
 msgid "%<PRIuMAX> week ago"
 msgid_plural "%<PRIuMAX> weeks ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: date.c:178
+#: date.c:179
 #, c-format
 msgid "%<PRIuMAX> month ago"
 msgid_plural "%<PRIuMAX> months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: date.c:189
+#: date.c:190
 #, c-format
 msgid "%<PRIuMAX> year"
 msgid_plural "%<PRIuMAX> years"
@@ -2997,14 +3077,14 @@ msgstr[0] ""
 msgstr[1] ""
 
 #. TRANSLATORS: "%s" is "<n> years"
-#: date.c:192
+#: date.c:193
 #, c-format
 msgid "%s, %<PRIuMAX> month ago"
 msgid_plural "%s, %<PRIuMAX> months ago"
 msgstr[0] ""
 msgstr[1] ""
 
-#: date.c:197 date.c:202
+#: date.c:198 date.c:203
 #, c-format
 msgid "%<PRIuMAX> year ago"
 msgid_plural "%<PRIuMAX> years ago"
@@ -3035,9 +3115,13 @@ msgstr ""
 msgid "Marked %d islands, done.\n"
 msgstr ""
 
-#: diff-merges.c:70
+#: diff-merges.c:81 gpg-interface.c:719 gpg-interface.c:734 ls-refs.c:37
+#: parallel-checkout.c:42 sequencer.c:2805 setup.c:563 builtin/am.c:203
+#: builtin/am.c:2243 builtin/am.c:2287 builtin/blame.c:724 builtin/blame.c:742
+#: builtin/fetch.c:792 builtin/pack-objects.c:3515 builtin/pull.c:45
+#: builtin/pull.c:47 builtin/pull.c:321
 #, c-format
-msgid "unknown value for --diff-merges: %s"
+msgid "invalid value for '%s': '%s'"
 msgstr ""
 
 #: diff-lib.c:561
@@ -3070,598 +3154,598 @@ msgid ""
 "tree"
 msgstr ""
 
-#: diff.c:158
+#: diff.c:159
 #, c-format
 msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
 msgstr ""
 
-#: diff.c:163
+#: diff.c:164
 #, c-format
 msgid "  Unknown dirstat parameter '%s'\n"
 msgstr ""
 
-#: diff.c:299
+#: diff.c:300
 msgid ""
 "color moved setting must be one of 'no', 'default', 'blocks', 'zebra', "
 "'dimmed-zebra', 'plain'"
 msgstr ""
 
-#: diff.c:327
+#: diff.c:328
 #, c-format
 msgid ""
 "unknown color-moved-ws mode '%s', possible values are 'ignore-space-change', "
 "'ignore-space-at-eol', 'ignore-all-space', 'allow-indentation-change'"
 msgstr ""
 
-#: diff.c:335
+#: diff.c:336
 msgid ""
 "color-moved-ws: allow-indentation-change cannot be combined with other "
 "whitespace modes"
 msgstr ""
 
-#: diff.c:412
+#: diff.c:413
 #, c-format
 msgid "Unknown value for 'diff.submodule' config variable: '%s'"
 msgstr ""
 
-#: diff.c:472
+#: diff.c:473
 #, c-format
 msgid ""
 "Found errors in 'diff.dirstat' config variable:\n"
 "%s"
 msgstr ""
 
-#: diff.c:4237
+#: diff.c:4282
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr ""
 
-#: diff.c:4589
+#: diff.c:4677 parse-options.c:1114
 #, c-format
 msgid "options '%s', '%s', '%s', and '%s' cannot be used together"
 msgstr ""
 
-#: diff.c:4593 builtin/difftool.c:736 builtin/log.c:1982 builtin/worktree.c:506
+#: diff.c:4681 parse-options.c:1118 builtin/worktree.c:578
 #, c-format
 msgid "options '%s', '%s', and '%s' cannot be used together"
 msgstr ""
 
-#: diff.c:4597
+#: diff.c:4685
 #, c-format
 msgid "options '%s' and '%s' cannot be used together, use '%s' with '%s'"
 msgstr ""
 
-#: diff.c:4601
+#: diff.c:4689
 #, c-format
 msgid ""
 "options '%s' and '%s' cannot be used together, use '%s' with '%s' and '%s'"
 msgstr ""
 
-#: diff.c:4681
+#: diff.c:4769
 msgid "--follow requires exactly one pathspec"
 msgstr ""
 
-#: diff.c:4729
+#: diff.c:4823
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr ""
 
-#: diff.c:4734 diff.c:4739 diff.c:4744 diff.c:4749 diff.c:5277
+#: diff.c:4828 diff.c:4833 diff.c:4838 diff.c:4843 diff.c:5319
 #: parse-options.c:217 parse-options.c:221
 #, c-format
 msgid "%s expects a numerical value"
 msgstr ""
 
-#: diff.c:4766
+#: diff.c:4860
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
 "%s"
 msgstr ""
 
-#: diff.c:4851
+#: diff.c:4893
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr ""
 
-#: diff.c:4875
+#: diff.c:4917
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr ""
 
-#: diff.c:4889
+#: diff.c:4931
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr ""
 
-#: diff.c:4939 diff.c:4945
+#: diff.c:4981 diff.c:4987
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr ""
 
-#: diff.c:4957
+#: diff.c:4999
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr ""
 
-#: diff.c:4978
+#: diff.c:5020
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr ""
 
-#: diff.c:4997
+#: diff.c:5039
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr ""
 
-#: diff.c:5037
+#: diff.c:5079
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
 msgstr ""
 
-#: diff.c:5073 diff.c:5093
+#: diff.c:5115 diff.c:5135
 #, c-format
 msgid "invalid argument to %s"
 msgstr ""
 
-#: diff.c:5197
+#: diff.c:5239
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr ""
 
-#: diff.c:5246
+#: diff.c:5288
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr ""
 
-#: diff.c:5302
+#: diff.c:5344
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr ""
 
-#: diff.c:5338
+#: diff.c:5380
 msgid "Diff output format options"
 msgstr ""
 
-#: diff.c:5340 diff.c:5346
+#: diff.c:5382 diff.c:5388
 msgid "generate patch"
 msgstr ""
 
-#: diff.c:5343 builtin/log.c:179
+#: diff.c:5385 builtin/log.c:180
 msgid "suppress diff output"
 msgstr ""
 
-#: diff.c:5348 diff.c:5462 diff.c:5469
+#: diff.c:5390 diff.c:5504 diff.c:5511
 msgid "<n>"
 msgstr ""
 
-#: diff.c:5349 diff.c:5352
+#: diff.c:5391 diff.c:5394
 msgid "generate diffs with <n> lines context"
 msgstr ""
 
-#: diff.c:5354
+#: diff.c:5396
 msgid "generate the diff in raw format"
 msgstr ""
 
-#: diff.c:5357
+#: diff.c:5399
 msgid "synonym for '-p --raw'"
 msgstr ""
 
-#: diff.c:5361
+#: diff.c:5403
 msgid "synonym for '-p --stat'"
 msgstr ""
 
-#: diff.c:5365
+#: diff.c:5407
 msgid "machine friendly --stat"
 msgstr ""
 
-#: diff.c:5368
+#: diff.c:5410
 msgid "output only the last line of --stat"
 msgstr ""
 
-#: diff.c:5370 diff.c:5378
+#: diff.c:5412 diff.c:5420
 msgid "<param1,param2>..."
 msgstr ""
 
-#: diff.c:5371
+#: diff.c:5413
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
 
-#: diff.c:5375
+#: diff.c:5417
 msgid "synonym for --dirstat=cumulative"
 msgstr ""
 
-#: diff.c:5379
+#: diff.c:5421
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr ""
 
-#: diff.c:5383
+#: diff.c:5425
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 
-#: diff.c:5386
+#: diff.c:5428
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr ""
 
-#: diff.c:5389
+#: diff.c:5431
 msgid "show only names of changed files"
 msgstr ""
 
-#: diff.c:5392
+#: diff.c:5434
 msgid "show only names and status of changed files"
 msgstr ""
 
-#: diff.c:5394
+#: diff.c:5436
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr ""
 
-#: diff.c:5395
+#: diff.c:5437
 msgid "generate diffstat"
 msgstr ""
 
-#: diff.c:5397 diff.c:5400 diff.c:5403
+#: diff.c:5439 diff.c:5442 diff.c:5445
 msgid "<width>"
 msgstr ""
 
-#: diff.c:5398
+#: diff.c:5440
 msgid "generate diffstat with a given width"
 msgstr ""
 
-#: diff.c:5401
+#: diff.c:5443
 msgid "generate diffstat with a given name width"
 msgstr ""
 
-#: diff.c:5404
+#: diff.c:5446
 msgid "generate diffstat with a given graph width"
 msgstr ""
 
-#: diff.c:5406
+#: diff.c:5448
 msgid "<count>"
 msgstr ""
 
-#: diff.c:5407
+#: diff.c:5449
 msgid "generate diffstat with limited lines"
 msgstr ""
 
-#: diff.c:5410
+#: diff.c:5452
 msgid "generate compact summary in diffstat"
 msgstr ""
 
-#: diff.c:5413
+#: diff.c:5455
 msgid "output a binary diff that can be applied"
 msgstr ""
 
-#: diff.c:5416
+#: diff.c:5458
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr ""
 
-#: diff.c:5418
+#: diff.c:5460
 msgid "show colored diff"
 msgstr ""
 
-#: diff.c:5419
+#: diff.c:5461
 msgid "<kind>"
 msgstr ""
 
-#: diff.c:5420
+#: diff.c:5462
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
 msgstr ""
 
-#: diff.c:5423
+#: diff.c:5465
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
 msgstr ""
 
-#: diff.c:5426 diff.c:5429 diff.c:5432 diff.c:5541
+#: diff.c:5468 diff.c:5471 diff.c:5474 diff.c:5583
 msgid "<prefix>"
 msgstr ""
 
-#: diff.c:5427
+#: diff.c:5469
 msgid "show the given source prefix instead of \"a/\""
 msgstr ""
 
-#: diff.c:5430
+#: diff.c:5472
 msgid "show the given destination prefix instead of \"b/\""
 msgstr ""
 
-#: diff.c:5433
+#: diff.c:5475
 msgid "prepend an additional prefix to every line of output"
 msgstr ""
 
-#: diff.c:5436
+#: diff.c:5478
 msgid "do not show any source or destination prefix"
 msgstr ""
 
-#: diff.c:5439
+#: diff.c:5481
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr ""
 
-#: diff.c:5443 diff.c:5448 diff.c:5453
+#: diff.c:5485 diff.c:5490 diff.c:5495
 msgid "<char>"
 msgstr ""
 
-#: diff.c:5444
+#: diff.c:5486
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr ""
 
-#: diff.c:5449
+#: diff.c:5491
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr ""
 
-#: diff.c:5454
+#: diff.c:5496
 msgid "specify the character to indicate a context instead of ' '"
 msgstr ""
 
-#: diff.c:5457
+#: diff.c:5499
 msgid "Diff rename options"
 msgstr ""
 
-#: diff.c:5458
+#: diff.c:5500
 msgid "<n>[/<m>]"
 msgstr ""
 
-#: diff.c:5459
+#: diff.c:5501
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr ""
 
-#: diff.c:5463
+#: diff.c:5505
 msgid "detect renames"
 msgstr ""
 
-#: diff.c:5467
+#: diff.c:5509
 msgid "omit the preimage for deletes"
 msgstr ""
 
-#: diff.c:5470
+#: diff.c:5512
 msgid "detect copies"
 msgstr ""
 
-#: diff.c:5474
+#: diff.c:5516
 msgid "use unmodified files as source to find copies"
 msgstr ""
 
-#: diff.c:5476
+#: diff.c:5518
 msgid "disable rename detection"
 msgstr ""
 
-#: diff.c:5479
+#: diff.c:5521
 msgid "use empty blobs as rename source"
 msgstr ""
 
-#: diff.c:5481
+#: diff.c:5523
 msgid "continue listing the history of a file beyond renames"
 msgstr ""
 
-#: diff.c:5484
+#: diff.c:5526
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
 msgstr ""
 
-#: diff.c:5486
+#: diff.c:5528
 msgid "Diff algorithm options"
 msgstr ""
 
-#: diff.c:5488
+#: diff.c:5530
 msgid "produce the smallest possible diff"
 msgstr ""
 
-#: diff.c:5491
+#: diff.c:5533
 msgid "ignore whitespace when comparing lines"
 msgstr ""
 
-#: diff.c:5494
+#: diff.c:5536
 msgid "ignore changes in amount of whitespace"
 msgstr ""
 
-#: diff.c:5497
+#: diff.c:5539
 msgid "ignore changes in whitespace at EOL"
 msgstr ""
 
-#: diff.c:5500
+#: diff.c:5542
 msgid "ignore carrier-return at the end of line"
 msgstr ""
 
-#: diff.c:5503
+#: diff.c:5545
 msgid "ignore changes whose lines are all blank"
 msgstr ""
 
-#: diff.c:5505 diff.c:5527 diff.c:5530 diff.c:5575
+#: diff.c:5547 diff.c:5569 diff.c:5572 diff.c:5617
 msgid "<regex>"
 msgstr ""
 
-#: diff.c:5506
+#: diff.c:5548
 msgid "ignore changes whose all lines match <regex>"
 msgstr ""
 
-#: diff.c:5509
+#: diff.c:5551
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr ""
 
-#: diff.c:5512
+#: diff.c:5554
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr ""
 
-#: diff.c:5516
+#: diff.c:5558
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr ""
 
-#: diff.c:5518
+#: diff.c:5560
 msgid "<algorithm>"
 msgstr ""
 
-#: diff.c:5519
+#: diff.c:5561
 msgid "choose a diff algorithm"
 msgstr ""
 
-#: diff.c:5521
+#: diff.c:5563
 msgid "<text>"
 msgstr ""
 
-#: diff.c:5522
+#: diff.c:5564
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr ""
 
-#: diff.c:5524 diff.c:5533 diff.c:5536
+#: diff.c:5566 diff.c:5575 diff.c:5578
 msgid "<mode>"
 msgstr ""
 
-#: diff.c:5525
+#: diff.c:5567
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr ""
 
-#: diff.c:5528
+#: diff.c:5570
 msgid "use <regex> to decide what a word is"
 msgstr ""
 
-#: diff.c:5531
+#: diff.c:5573
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr ""
 
-#: diff.c:5534
+#: diff.c:5576
 msgid "moved lines of code are colored differently"
 msgstr ""
 
-#: diff.c:5537
+#: diff.c:5579
 msgid "how white spaces are ignored in --color-moved"
 msgstr ""
 
-#: diff.c:5540
+#: diff.c:5582
 msgid "Other diff options"
 msgstr ""
 
-#: diff.c:5542
+#: diff.c:5584
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 
-#: diff.c:5546
+#: diff.c:5588
 msgid "treat all files as text"
 msgstr ""
 
-#: diff.c:5548
+#: diff.c:5590
 msgid "swap two inputs, reverse the diff"
 msgstr ""
 
-#: diff.c:5550
+#: diff.c:5592
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr ""
 
-#: diff.c:5552
+#: diff.c:5594
 msgid "disable all output of the program"
 msgstr ""
 
-#: diff.c:5554
+#: diff.c:5596
 msgid "allow an external diff helper to be executed"
 msgstr ""
 
-#: diff.c:5556
+#: diff.c:5598
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 
-#: diff.c:5558
+#: diff.c:5600
 msgid "<when>"
 msgstr ""
 
-#: diff.c:5559
+#: diff.c:5601
 msgid "ignore changes to submodules in the diff generation"
 msgstr ""
 
-#: diff.c:5562
+#: diff.c:5604
 msgid "<format>"
 msgstr ""
 
-#: diff.c:5563
+#: diff.c:5605
 msgid "specify how differences in submodules are shown"
 msgstr ""
 
-#: diff.c:5567
+#: diff.c:5609
 msgid "hide 'git add -N' entries from the index"
 msgstr ""
 
-#: diff.c:5570
+#: diff.c:5612
 msgid "treat 'git add -N' entries as real in the index"
 msgstr ""
 
-#: diff.c:5572
+#: diff.c:5614
 msgid "<string>"
 msgstr ""
 
-#: diff.c:5573
+#: diff.c:5615
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
 msgstr ""
 
-#: diff.c:5576
+#: diff.c:5618
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
 msgstr ""
 
-#: diff.c:5579
+#: diff.c:5621
 msgid "show all changes in the changeset with -S or -G"
 msgstr ""
 
-#: diff.c:5582
+#: diff.c:5624
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr ""
 
-#: diff.c:5585
+#: diff.c:5627
 msgid "control the order in which files appear in the output"
 msgstr ""
 
-#: diff.c:5586 diff.c:5589
+#: diff.c:5628 diff.c:5631
 msgid "<path>"
 msgstr ""
 
-#: diff.c:5587
+#: diff.c:5629
 msgid "show the change in the specified path first"
 msgstr ""
 
-#: diff.c:5590
+#: diff.c:5632
 msgid "skip the output to the specified path"
 msgstr ""
 
-#: diff.c:5592
+#: diff.c:5634
 msgid "<object-id>"
 msgstr ""
 
-#: diff.c:5593
+#: diff.c:5635
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
 msgstr ""
 
-#: diff.c:5595
+#: diff.c:5637
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr ""
 
-#: diff.c:5596
+#: diff.c:5638
 msgid "select files by diff type"
 msgstr ""
 
-#: diff.c:5598
+#: diff.c:5640
 msgid "<file>"
 msgstr ""
 
-#: diff.c:5599
-msgid "Output to a specific file"
+#: diff.c:5641
+msgid "output to a specific file"
 msgstr ""
 
-#: diff.c:6257
+#: diff.c:6321
 msgid "exhaustive rename detection was skipped due to too many files."
 msgstr ""
 
-#: diff.c:6260
+#: diff.c:6324
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
 
-#: diff.c:6263
+#: diff.c:6327
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -3710,36 +3794,36 @@ msgstr ""
 msgid "cannot use %s as an exclude file"
 msgstr ""
 
-#: dir.c:2418
+#: dir.c:2419
 #, c-format
 msgid "could not open directory '%s'"
 msgstr ""
 
-#: dir.c:2720
+#: dir.c:2721
 msgid "failed to get kernel name and information"
 msgstr ""
 
-#: dir.c:2844
+#: dir.c:2846
 msgid "untracked cache is disabled on this system or location"
 msgstr ""
 
-#: dir.c:3112
+#: dir.c:3119
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
 msgstr ""
 
-#: dir.c:3800
+#: dir.c:3807
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr ""
 
-#: dir.c:3847 dir.c:3852
+#: dir.c:3854 dir.c:3859
 #, c-format
 msgid "could not create directories for %s"
 msgstr ""
 
-#: dir.c:3881
+#: dir.c:3888
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr ""
@@ -3758,7 +3842,7 @@ msgstr ""
 msgid "could not stat file '%s'"
 msgstr ""
 
-#: environment.c:145
+#: environment.c:147
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr ""
@@ -3789,313 +3873,340 @@ msgstr ""
 msgid "unable to write to remote"
 msgstr ""
 
-#: fetch-pack.c:395 fetch-pack.c:1439
+#: fetch-pack.c:397 fetch-pack.c:1460
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr ""
 
-#: fetch-pack.c:401 fetch-pack.c:1445
+#: fetch-pack.c:403 fetch-pack.c:1466
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr ""
 
-#: fetch-pack.c:403 fetch-pack.c:1447
+#: fetch-pack.c:405 fetch-pack.c:1468
 #, c-format
 msgid "object not found: %s"
 msgstr ""
 
-#: fetch-pack.c:406 fetch-pack.c:1450
+#: fetch-pack.c:408 fetch-pack.c:1471
 #, c-format
 msgid "error in object: %s"
 msgstr ""
 
-#: fetch-pack.c:408 fetch-pack.c:1452
+#: fetch-pack.c:410 fetch-pack.c:1473
 #, c-format
 msgid "no shallow found: %s"
 msgstr ""
 
-#: fetch-pack.c:411 fetch-pack.c:1456
+#: fetch-pack.c:413 fetch-pack.c:1477
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr ""
 
-#: fetch-pack.c:451
+#: fetch-pack.c:453
 #, c-format
 msgid "got %s %d %s"
 msgstr ""
 
-#: fetch-pack.c:468
+#: fetch-pack.c:470
 #, c-format
 msgid "invalid commit %s"
 msgstr ""
 
-#: fetch-pack.c:499
+#: fetch-pack.c:501
 msgid "giving up"
 msgstr ""
 
-#: fetch-pack.c:512 progress.c:339
+#: fetch-pack.c:514 progress.h:25
 msgid "done"
 msgstr ""
 
-#: fetch-pack.c:524
+#: fetch-pack.c:526
 #, c-format
 msgid "got %s (%d) %s"
 msgstr ""
 
-#: fetch-pack.c:560
+#: fetch-pack.c:562
 #, c-format
 msgid "Marking %s as complete"
 msgstr ""
 
-#: fetch-pack.c:775
+#: fetch-pack.c:784
 #, c-format
 msgid "already have %s (%s)"
 msgstr ""
 
-#: fetch-pack.c:861
+#: fetch-pack.c:870
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr ""
 
-#: fetch-pack.c:869
+#: fetch-pack.c:878
 msgid "protocol error: bad pack header"
 msgstr ""
 
-#: fetch-pack.c:965
+#: fetch-pack.c:974
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr ""
 
-#: fetch-pack.c:971
+#: fetch-pack.c:980
 msgid "fetch-pack: invalid index-pack output"
 msgstr ""
 
-#: fetch-pack.c:988
+#: fetch-pack.c:997
 #, c-format
 msgid "%s failed"
 msgstr ""
 
-#: fetch-pack.c:990
+#: fetch-pack.c:999
 msgid "error in sideband demultiplexer"
 msgstr ""
 
-#: fetch-pack.c:1035
+#: fetch-pack.c:1048
 #, c-format
 msgid "Server version is %.*s"
 msgstr ""
 
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1052 fetch-pack.c:1058
-#: fetch-pack.c:1062 fetch-pack.c:1066 fetch-pack.c:1070 fetch-pack.c:1074
-#: fetch-pack.c:1078 fetch-pack.c:1082 fetch-pack.c:1086 fetch-pack.c:1090
-#: fetch-pack.c:1096 fetch-pack.c:1102 fetch-pack.c:1107 fetch-pack.c:1112
+#: fetch-pack.c:1056 fetch-pack.c:1062 fetch-pack.c:1065 fetch-pack.c:1071
+#: fetch-pack.c:1075 fetch-pack.c:1079 fetch-pack.c:1083 fetch-pack.c:1087
+#: fetch-pack.c:1091 fetch-pack.c:1095 fetch-pack.c:1099 fetch-pack.c:1103
+#: fetch-pack.c:1109 fetch-pack.c:1115 fetch-pack.c:1120 fetch-pack.c:1125
 #, c-format
 msgid "Server supports %s"
 msgstr ""
 
-#: fetch-pack.c:1045
+#: fetch-pack.c:1058
 msgid "Server does not support shallow clients"
 msgstr ""
 
-#: fetch-pack.c:1105
+#: fetch-pack.c:1118
 msgid "Server does not support --shallow-since"
 msgstr ""
 
-#: fetch-pack.c:1110
+#: fetch-pack.c:1123
 msgid "Server does not support --shallow-exclude"
 msgstr ""
 
-#: fetch-pack.c:1114
+#: fetch-pack.c:1127
 msgid "Server does not support --deepen"
 msgstr ""
 
-#: fetch-pack.c:1116
+#: fetch-pack.c:1129
 msgid "Server does not support this repository's object format"
 msgstr ""
 
-#: fetch-pack.c:1129
+#: fetch-pack.c:1142
 msgid "no common commits"
 msgstr ""
 
-#: fetch-pack.c:1138 fetch-pack.c:1485 builtin/clone.c:1130
+#: fetch-pack.c:1151 fetch-pack.c:1506 builtin/clone.c:1166
 msgid "source repository is shallow, reject to clone."
 msgstr ""
 
-#: fetch-pack.c:1144 fetch-pack.c:1681
+#: fetch-pack.c:1157 fetch-pack.c:1705
 msgid "git fetch-pack: fetch failed."
 msgstr ""
 
-#: fetch-pack.c:1258
+#: fetch-pack.c:1271
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr ""
 
-#: fetch-pack.c:1262
+#: fetch-pack.c:1275
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr ""
 
-#: fetch-pack.c:1295
+#: fetch-pack.c:1308
 msgid "Server does not support shallow requests"
 msgstr ""
 
-#: fetch-pack.c:1302
+#: fetch-pack.c:1315
 msgid "Server supports filter"
 msgstr ""
 
-#: fetch-pack.c:1345 fetch-pack.c:2063
+#: fetch-pack.c:1358 fetch-pack.c:2087
 msgid "unable to write request to remote"
 msgstr ""
 
-#: fetch-pack.c:1363
+#: fetch-pack.c:1376
 #, c-format
 msgid "error reading section header '%s'"
 msgstr ""
 
-#: fetch-pack.c:1369
+#: fetch-pack.c:1382
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr ""
 
-#: fetch-pack.c:1403
+#: fetch-pack.c:1416
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr ""
 
-#: fetch-pack.c:1408
+#: fetch-pack.c:1421
 #, c-format
 msgid "error processing acks: %d"
 msgstr ""
 
-#: fetch-pack.c:1418
-msgid "expected packfile to be sent after 'ready'"
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#.
+#: fetch-pack.c:1435
+#, c-format
+msgid "expected packfile to be sent after '%s'"
 msgstr ""
 
-#: fetch-pack.c:1420
-msgid "expected no other sections to be sent after no 'ready'"
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#.
+#: fetch-pack.c:1441
+#, c-format
+msgid "expected no other sections to be sent after no '%s'"
 msgstr ""
 
-#: fetch-pack.c:1461
+#: fetch-pack.c:1482
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr ""
 
-#: fetch-pack.c:1510
+#: fetch-pack.c:1531
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr ""
 
-#: fetch-pack.c:1515
+#: fetch-pack.c:1536
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr ""
 
-#: fetch-pack.c:1520
+#: fetch-pack.c:1541
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr ""
 
-#: fetch-pack.c:1550
+#: fetch-pack.c:1571
 msgid "git fetch-pack: expected response end packet"
 msgstr ""
 
-#: fetch-pack.c:1959
+#: fetch-pack.c:1983
 msgid "no matching remote head"
 msgstr ""
 
-#: fetch-pack.c:1982 builtin/clone.c:581
+#: fetch-pack.c:2006 builtin/clone.c:587
 msgid "remote did not send all necessary objects"
 msgstr ""
 
-#: fetch-pack.c:2085
+#: fetch-pack.c:2109
 msgid "unexpected 'ready' from remote"
 msgstr ""
 
-#: fetch-pack.c:2108
+#: fetch-pack.c:2132
 #, c-format
 msgid "no such remote ref %s"
 msgstr ""
 
-#: fetch-pack.c:2111
+#: fetch-pack.c:2135
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr ""
 
-#: gpg-interface.c:329 gpg-interface.c:457 gpg-interface.c:974
-#: gpg-interface.c:990
+#: fsmonitor-ipc.c:119
+#, c-format
+msgid "fsmonitor_ipc__send_query: invalid path '%s'"
+msgstr ""
+
+#: fsmonitor-ipc.c:125
+#, c-format
+msgid "fsmonitor_ipc__send_query: unspecified error on '%s'"
+msgstr ""
+
+#: fsmonitor-ipc.c:155
+msgid "fsmonitor--daemon is not running"
+msgstr ""
+
+#: fsmonitor-ipc.c:164
+#, c-format
+msgid "could not send '%s' command to fsmonitor--daemon"
+msgstr ""
+
+#: gpg-interface.c:329 gpg-interface.c:456 gpg-interface.c:995
+#: gpg-interface.c:1011
 msgid "could not create temporary file"
 msgstr ""
 
-#: gpg-interface.c:332 gpg-interface.c:460
+#: gpg-interface.c:332 gpg-interface.c:459
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr ""
 
-#: gpg-interface.c:451
+#: gpg-interface.c:450
 msgid ""
 "gpg.ssh.allowedSignersFile needs to be configured and exist for ssh "
 "signature verification"
 msgstr ""
 
-#: gpg-interface.c:480
+#: gpg-interface.c:479
 msgid ""
 "ssh-keygen -Y find-principals/verify is needed for ssh signature "
 "verification (available in openssh version 8.2p1+)"
 msgstr ""
 
-#: gpg-interface.c:536
+#: gpg-interface.c:550
 #, c-format
 msgid "ssh signing revocation file configured but not found: %s"
 msgstr ""
 
-#: gpg-interface.c:624
+#: gpg-interface.c:638
 #, c-format
 msgid "bad/incompatible signature '%s'"
 msgstr ""
 
-#: gpg-interface.c:801 gpg-interface.c:806
+#: gpg-interface.c:815 gpg-interface.c:820
 #, c-format
 msgid "failed to get the ssh fingerprint for key '%s'"
 msgstr ""
 
-#: gpg-interface.c:829
+#: gpg-interface.c:843
 msgid ""
 "either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured"
 msgstr ""
 
-#: gpg-interface.c:851
+#: gpg-interface.c:865
 #, c-format
 msgid "gpg.ssh.defaultKeyCommand succeeded but returned no keys: %s %s"
 msgstr ""
 
-#: gpg-interface.c:857
+#: gpg-interface.c:871
 #, c-format
 msgid "gpg.ssh.defaultKeyCommand failed: %s %s"
 msgstr ""
 
-#: gpg-interface.c:945
+#: gpg-interface.c:966
 msgid "gpg failed to sign the data"
 msgstr ""
 
-#: gpg-interface.c:967
+#: gpg-interface.c:988
 msgid "user.signingkey needs to be set for ssh signing"
 msgstr ""
 
-#: gpg-interface.c:978
+#: gpg-interface.c:999
 #, c-format
 msgid "failed writing ssh signing key to '%s'"
 msgstr ""
 
-#: gpg-interface.c:996
+#: gpg-interface.c:1017
 #, c-format
 msgid "failed writing ssh signing key buffer to '%s'"
 msgstr ""
 
-#: gpg-interface.c:1014
+#: gpg-interface.c:1035
 msgid ""
 "ssh-keygen -Y sign is needed for ssh signing (available in openssh version "
 "8.2p1+)"
 msgstr ""
 
-#: gpg-interface.c:1026
+#: gpg-interface.c:1047
 #, c-format
 msgid "failed reading ssh signing data buffer from '%s'"
 msgstr ""
@@ -4105,151 +4216,151 @@ msgstr ""
 msgid "ignored invalid color '%.*s' in log.graphColors"
 msgstr ""
 
-#: grep.c:531
+#: grep.c:446
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
 msgstr ""
 
-#: grep.c:1942
+#: grep.c:1859
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr ""
 
-#: grep.c:1959 setup.c:177 builtin/clone.c:302 builtin/diff.c:90
+#: grep.c:1876 setup.c:178 builtin/clone.c:308 builtin/diff.c:90
 #: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr ""
 
-#: grep.c:1970
+#: grep.c:1887
 #, c-format
 msgid "'%s': short read"
 msgstr ""
 
-#: help.c:24
+#: help.c:25
 msgid "start a working area (see also: git help tutorial)"
 msgstr ""
 
-#: help.c:25
+#: help.c:26
 msgid "work on the current change (see also: git help everyday)"
 msgstr ""
 
-#: help.c:26
+#: help.c:27
 msgid "examine the history and state (see also: git help revisions)"
 msgstr ""
 
-#: help.c:27
+#: help.c:28
 msgid "grow, mark and tweak your common history"
 msgstr ""
 
-#: help.c:28
+#: help.c:29
 msgid "collaborate (see also: git help workflows)"
 msgstr ""
 
-#: help.c:32
+#: help.c:33
 msgid "Main Porcelain Commands"
 msgstr ""
 
-#: help.c:33
+#: help.c:34
 msgid "Ancillary Commands / Manipulators"
 msgstr ""
 
-#: help.c:34
+#: help.c:35
 msgid "Ancillary Commands / Interrogators"
 msgstr ""
 
-#: help.c:35
+#: help.c:36
 msgid "Interacting with Others"
 msgstr ""
 
-#: help.c:36
+#: help.c:37
 msgid "Low-level Commands / Manipulators"
 msgstr ""
 
-#: help.c:37
+#: help.c:38
 msgid "Low-level Commands / Interrogators"
 msgstr ""
 
-#: help.c:38
+#: help.c:39
 msgid "Low-level Commands / Syncing Repositories"
 msgstr ""
 
-#: help.c:39
+#: help.c:40
 msgid "Low-level Commands / Internal Helpers"
 msgstr ""
 
-#: help.c:313
+#: help.c:316
 #, c-format
 msgid "available git commands in '%s'"
 msgstr ""
 
-#: help.c:320
+#: help.c:323
 msgid "git commands available from elsewhere on your $PATH"
 msgstr ""
 
-#: help.c:329
+#: help.c:332
 msgid "These are common Git commands used in various situations:"
 msgstr ""
 
-#: help.c:378 git.c:100
+#: help.c:382 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr ""
 
-#: help.c:418
+#: help.c:422
 msgid "The Git concept guides are:"
 msgstr ""
 
-#: help.c:442
-msgid "See 'git help <command>' to read about a specific subcommand"
-msgstr ""
-
-#: help.c:447
+#: help.c:446
 msgid "External commands"
 msgstr ""
 
-#: help.c:462
+#: help.c:468
 msgid "Command aliases"
 msgstr ""
 
-#: help.c:543
+#: help.c:486
+msgid "See 'git help <command>' to read about a specific subcommand"
+msgstr ""
+
+#: help.c:563
 #, c-format
 msgid ""
 "'%s' appears to be a git command, but we were not\n"
 "able to execute it. Maybe git-%s is broken?"
 msgstr ""
 
-#: help.c:565 help.c:662
+#: help.c:585 help.c:682
 #, c-format
 msgid "git: '%s' is not a git command. See 'git --help'."
 msgstr ""
 
-#: help.c:613
+#: help.c:633
 msgid "Uh oh. Your system reports no Git commands at all."
 msgstr ""
 
-#: help.c:635
+#: help.c:655
 #, c-format
 msgid "WARNING: You called a Git command named '%s', which does not exist."
 msgstr ""
 
-#: help.c:640
+#: help.c:660
 #, c-format
 msgid "Continuing under the assumption that you meant '%s'."
 msgstr ""
 
-#: help.c:646
+#: help.c:666
 #, c-format
 msgid "Run '%s' instead [y/N]? "
 msgstr ""
 
-#: help.c:654
+#: help.c:674
 #, c-format
 msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
 msgstr ""
 
-#: help.c:666
+#: help.c:686
 msgid ""
 "\n"
 "The most similar command is"
@@ -4259,16 +4370,16 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: help.c:706
+#: help.c:729
 msgid "git version [<options>]"
 msgstr ""
 
-#: help.c:761
+#: help.c:784
 #, c-format
 msgid "%s: %s - %s"
 msgstr ""
 
-#: help.c:765
+#: help.c:788
 msgid ""
 "\n"
 "Did you mean this?"
@@ -4278,22 +4389,27 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: hook.c:27
+#: hook.c:28
 #, c-format
 msgid ""
 "The '%s' hook was ignored because it's not set as executable.\n"
 "You can disable this warning with `git config advice.ignoredHook false`."
 msgstr ""
 
-#: ident.c:353
+#: hook.c:87
+#, c-format
+msgid "Couldn't start hook '%s'\n"
+msgstr ""
+
+#: ident.c:354
 msgid "Author identity unknown\n"
 msgstr ""
 
-#: ident.c:356
+#: ident.c:357
 msgid "Committer identity unknown\n"
 msgstr ""
 
-#: ident.c:362
+#: ident.c:363
 msgid ""
 "\n"
 "*** Please tell me who you are.\n"
@@ -4308,71 +4424,71 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ident.c:397
+#: ident.c:398
 msgid "no email was given and auto-detection is disabled"
 msgstr ""
 
-#: ident.c:402
+#: ident.c:403
 #, c-format
 msgid "unable to auto-detect email address (got '%s')"
 msgstr ""
 
-#: ident.c:419
+#: ident.c:420
 msgid "no name was given and auto-detection is disabled"
 msgstr ""
 
-#: ident.c:425
+#: ident.c:426
 #, c-format
 msgid "unable to auto-detect name (got '%s')"
 msgstr ""
 
-#: ident.c:433
+#: ident.c:434
 #, c-format
 msgid "empty ident name (for <%s>) not allowed"
 msgstr ""
 
-#: ident.c:439
+#: ident.c:440
 #, c-format
 msgid "name consists only of disallowed characters: %s"
 msgstr ""
 
-#: ident.c:454 builtin/commit.c:648
+#: ident.c:455 builtin/commit.c:649
 #, c-format
 msgid "invalid date format: %s"
 msgstr ""
 
-#: list-objects-filter-options.c:83
+#: list-objects-filter-options.c:68
 msgid "expected 'tree:<depth>'"
 msgstr ""
 
-#: list-objects-filter-options.c:98
+#: list-objects-filter-options.c:83
 msgid "sparse:path filters support has been dropped"
 msgstr ""
 
-#: list-objects-filter-options.c:105
+#: list-objects-filter-options.c:90
 #, c-format
 msgid "'%s' for 'object:type=<type>' is not a valid object type"
 msgstr ""
 
-#: list-objects-filter-options.c:124
+#: list-objects-filter-options.c:109
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr ""
 
-#: list-objects-filter-options.c:140
+#: list-objects-filter-options.c:125
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
 msgstr ""
 
-#: list-objects-filter-options.c:182
+#: list-objects-filter-options.c:167
 msgid "expected something after combine:"
 msgstr ""
 
-#: list-objects-filter-options.c:264
+#: list-objects-filter-options.c:249
 msgid "multiple filter-specs cannot be combined"
 msgstr ""
 
-#: list-objects-filter-options.c:376
+#: list-objects-filter-options.c:365
 msgid "unable to upgrade repository format to support partial clone"
 msgstr ""
 
@@ -4386,17 +4502,17 @@ msgstr ""
 msgid "unable to parse sparse filter data in %s"
 msgstr ""
 
-#: list-objects.c:127
+#: list-objects.c:144
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
 msgstr ""
 
-#: list-objects.c:140
+#: list-objects.c:157
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr ""
 
-#: list-objects.c:398
+#: list-objects.c:415
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr ""
@@ -4418,17 +4534,12 @@ msgstr ""
 msgid "Unable to create '%s.lock': %s"
 msgstr ""
 
-#: ls-refs.c:37
-#, c-format
-msgid "invalid value '%s' for lsrefs.unborn"
-msgstr ""
-
-#: ls-refs.c:174
+#: ls-refs.c:175
 #, c-format
 msgid "unexpected line: '%s'"
 msgstr ""
 
-#: ls-refs.c:178
+#: ls-refs.c:179
 msgid "expected flush after ls-refs arguments"
 msgstr ""
 
@@ -4436,44 +4547,44 @@ msgstr ""
 msgid "quoted CRLF detected"
 msgstr ""
 
-#: mailinfo.c:1254 builtin/am.c:184 builtin/mailinfo.c:46
+#: mailinfo.c:1254 builtin/am.c:185 builtin/mailinfo.c:46
 #, c-format
 msgid "bad action '%s' for '%s'"
 msgstr ""
 
-#: merge-ort.c:1584 merge-recursive.c:1211
+#: merge-ort.c:1630 merge-recursive.c:1214
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr ""
 
-#: merge-ort.c:1593 merge-recursive.c:1218
+#: merge-ort.c:1639 merge-recursive.c:1221
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr ""
 
-#: merge-ort.c:1602 merge-recursive.c:1225
+#: merge-ort.c:1648 merge-recursive.c:1228
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr ""
 
-#: merge-ort.c:1612 merge-ort.c:1620
+#: merge-ort.c:1658 merge-ort.c:1666
 #, c-format
 msgid "Note: Fast-forwarding submodule %s to %s"
 msgstr ""
 
-#: merge-ort.c:1642
+#: merge-ort.c:1688
 #, c-format
 msgid "Failed to merge submodule %s"
 msgstr ""
 
-#: merge-ort.c:1649
+#: merge-ort.c:1695
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but a possible merge resolution exists:\n"
 "%s\n"
 msgstr ""
 
-#: merge-ort.c:1653 merge-recursive.c:1281
+#: merge-ort.c:1699 merge-recursive.c:1284
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -4484,42 +4595,42 @@ msgid ""
 "which will accept this suggestion.\n"
 msgstr ""
 
-#: merge-ort.c:1666
+#: merge-ort.c:1712
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but multiple possible merges exist:\n"
 "%s"
 msgstr ""
 
-#: merge-ort.c:1887 merge-recursive.c:1372
+#: merge-ort.c:1937 merge-recursive.c:1375
 msgid "Failed to execute internal merge"
 msgstr ""
 
-#: merge-ort.c:1892 merge-recursive.c:1377
+#: merge-ort.c:1942 merge-recursive.c:1380
 #, c-format
 msgid "Unable to add %s to database"
 msgstr ""
 
-#: merge-ort.c:1899 merge-recursive.c:1410
+#: merge-ort.c:1949 merge-recursive.c:1413
 #, c-format
 msgid "Auto-merging %s"
 msgstr ""
 
-#: merge-ort.c:2038 merge-recursive.c:2132
+#: merge-ort.c:2088 merge-recursive.c:2135
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
 "implicit directory rename(s) putting the following path(s) there: %s."
 msgstr ""
 
-#: merge-ort.c:2048 merge-recursive.c:2142
+#: merge-ort.c:2098 merge-recursive.c:2145
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
 "implicit directory renames tried to put these paths there: %s"
 msgstr ""
 
-#: merge-ort.c:2106
+#: merge-ort.c:2156
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to rename %s to; it was "
@@ -4527,47 +4638,47 @@ msgid ""
 "majority of the files."
 msgstr ""
 
-#: merge-ort.c:2260 merge-recursive.c:2478
+#: merge-ort.c:2310 merge-recursive.c:2481
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
 "renamed."
 msgstr ""
 
-#: merge-ort.c:2400 merge-recursive.c:3261
+#: merge-ort.c:2450 merge-recursive.c:3264
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
 "moving it to %s."
 msgstr ""
 
-#: merge-ort.c:2407 merge-recursive.c:3268
+#: merge-ort.c:2457 merge-recursive.c:3271
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
 "%s; moving it to %s."
 msgstr ""
 
-#: merge-ort.c:2420 merge-recursive.c:3264
+#: merge-ort.c:2470 merge-recursive.c:3267
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed "
 "in %s, suggesting it should perhaps be moved to %s."
 msgstr ""
 
-#: merge-ort.c:2428 merge-recursive.c:3271
+#: merge-ort.c:2478 merge-recursive.c:3274
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
 "was renamed in %s, suggesting it should perhaps be moved to %s."
 msgstr ""
 
-#: merge-ort.c:2584
+#: merge-ort.c:2634
 #, c-format
 msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
 msgstr ""
 
-#: merge-ort.c:2679
+#: merge-ort.c:2729
 #, c-format
 msgid ""
 "CONFLICT (rename involved in collision): rename of %s -> %s has content "
@@ -4575,67 +4686,67 @@ msgid ""
 "markers."
 msgstr ""
 
-#: merge-ort.c:2698 merge-ort.c:2722
+#: merge-ort.c:2748 merge-ort.c:2772
 #, c-format
 msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
 msgstr ""
 
-#: merge-ort.c:3212 merge-recursive.c:3022
+#: merge-ort.c:3261 merge-recursive.c:3025
 #, c-format
 msgid "cannot read object %s"
 msgstr ""
 
-#: merge-ort.c:3215 merge-recursive.c:3025
+#: merge-ort.c:3264 merge-recursive.c:3028
 #, c-format
 msgid "object %s is not a blob"
 msgstr ""
 
-#: merge-ort.c:3644
+#: merge-ort.c:3693
 #, c-format
 msgid ""
 "CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
 "%s instead."
 msgstr ""
 
-#: merge-ort.c:3721
+#: merge-ort.c:3770
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed both "
 "of them so each can be recorded somewhere."
 msgstr ""
 
-#: merge-ort.c:3728
+#: merge-ort.c:3777
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed one "
 "of them so each can be recorded somewhere."
 msgstr ""
 
-#: merge-ort.c:3819 merge-recursive.c:3101
+#: merge-ort.c:3866 merge-recursive.c:3104
 msgid "content"
 msgstr ""
 
-#: merge-ort.c:3821 merge-recursive.c:3105
+#: merge-ort.c:3868 merge-recursive.c:3108
 msgid "add/add"
 msgstr ""
 
-#: merge-ort.c:3823 merge-recursive.c:3150
+#: merge-ort.c:3870 merge-recursive.c:3153
 msgid "submodule"
 msgstr ""
 
-#: merge-ort.c:3825 merge-recursive.c:3151
+#: merge-ort.c:3872 merge-recursive.c:3154
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr ""
 
-#: merge-ort.c:3869
+#: merge-ort.c:3916
 #, c-format
 msgid ""
 "CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
 "of %s left in tree."
 msgstr ""
 
-#: merge-ort.c:4165
+#: merge-ort.c:4212
 #, c-format
 msgid ""
 "Note: %s not up to date and in way of checking out conflicted version; old "
@@ -4645,19 +4756,19 @@ msgstr ""
 #. TRANSLATORS: The %s arguments are: 1) tree hash of a merge
 #. base, and 2-3) the trees for the two trees we're merging.
 #.
-#: merge-ort.c:4534
+#: merge-ort.c:4586
 #, c-format
 msgid "collecting merge info failed for trees %s, %s, %s"
 msgstr ""
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3716
+#: merge-ort-wrappers.c:13 merge-recursive.c:3723
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
 "  %s"
 msgstr ""
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3482 builtin/merge.c:405
+#: merge-ort-wrappers.c:33 merge-recursive.c:3485 builtin/merge.c:405
 msgid "Already up to date."
 msgstr ""
 
@@ -4694,7 +4805,7 @@ msgstr ""
 msgid "refusing to lose untracked file at '%s'"
 msgstr ""
 
-#: merge-recursive.c:956 builtin/cat-file.c:41
+#: merge-recursive.c:956 builtin/cat-file.c:47
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr ""
@@ -4719,118 +4830,118 @@ msgstr ""
 msgid "do not know what to do with %06o %s '%s'"
 msgstr ""
 
-#: merge-recursive.c:1233 merge-recursive.c:1246
+#: merge-recursive.c:1236 merge-recursive.c:1249
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr ""
 
-#: merge-recursive.c:1236 merge-recursive.c:1249
+#: merge-recursive.c:1239 merge-recursive.c:1252
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr ""
 
-#: merge-recursive.c:1273
+#: merge-recursive.c:1276
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 
-#: merge-recursive.c:1277
+#: merge-recursive.c:1280
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr ""
 
-#: merge-recursive.c:1278
+#: merge-recursive.c:1281
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr ""
 
-#: merge-recursive.c:1290
+#: merge-recursive.c:1293
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr ""
 
-#: merge-recursive.c:1434
+#: merge-recursive.c:1437
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr ""
 
-#: merge-recursive.c:1506
+#: merge-recursive.c:1509
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
 "in tree."
 msgstr ""
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1514
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
 "left in tree."
 msgstr ""
 
-#: merge-recursive.c:1518
+#: merge-recursive.c:1521
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
 "in tree at %s."
 msgstr ""
 
-#: merge-recursive.c:1523
+#: merge-recursive.c:1526
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
 "left in tree at %s."
 msgstr ""
 
-#: merge-recursive.c:1558
+#: merge-recursive.c:1561
 msgid "rename"
 msgstr ""
 
-#: merge-recursive.c:1558
+#: merge-recursive.c:1561
 msgid "renamed"
 msgstr ""
 
-#: merge-recursive.c:1609 merge-recursive.c:2515 merge-recursive.c:3178
+#: merge-recursive.c:1612 merge-recursive.c:2518 merge-recursive.c:3181
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr ""
 
-#: merge-recursive.c:1619
+#: merge-recursive.c:1622
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
 
-#: merge-recursive.c:1677
+#: merge-recursive.c:1680
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 
-#: merge-recursive.c:1708
+#: merge-recursive.c:1711
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr ""
 
-#: merge-recursive.c:1713
+#: merge-recursive.c:1716
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr ""
 
-#: merge-recursive.c:1740
+#: merge-recursive.c:1743
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
 "\"->\"%s\" in \"%s\"%s"
 msgstr ""
 
-#: merge-recursive.c:1745
+#: merge-recursive.c:1748
 msgid " (left unresolved)"
 msgstr ""
 
-#: merge-recursive.c:1837
+#: merge-recursive.c:1840
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 
-#: merge-recursive.c:2100
+#: merge-recursive.c:2103
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -4838,85 +4949,85 @@ msgid ""
 "getting a majority of the files."
 msgstr ""
 
-#: merge-recursive.c:2234
+#: merge-recursive.c:2237
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
 ">%s in %s"
 msgstr ""
 
-#: merge-recursive.c:3089
+#: merge-recursive.c:3092
 msgid "modify"
 msgstr ""
 
-#: merge-recursive.c:3089
+#: merge-recursive.c:3092
 msgid "modified"
 msgstr ""
 
-#: merge-recursive.c:3128
+#: merge-recursive.c:3131
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr ""
 
-#: merge-recursive.c:3181
+#: merge-recursive.c:3184
 #, c-format
 msgid "Adding as %s instead"
 msgstr ""
 
-#: merge-recursive.c:3385
+#: merge-recursive.c:3388
 #, c-format
 msgid "Removing %s"
 msgstr ""
 
-#: merge-recursive.c:3408
+#: merge-recursive.c:3411
 msgid "file/directory"
 msgstr ""
 
-#: merge-recursive.c:3413
+#: merge-recursive.c:3416
 msgid "directory/file"
 msgstr ""
 
-#: merge-recursive.c:3420
+#: merge-recursive.c:3423
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
 
-#: merge-recursive.c:3429
+#: merge-recursive.c:3432
 #, c-format
 msgid "Adding %s"
 msgstr ""
 
-#: merge-recursive.c:3438
+#: merge-recursive.c:3441
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr ""
 
-#: merge-recursive.c:3491
+#: merge-recursive.c:3494
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr ""
 
-#: merge-recursive.c:3585
+#: merge-recursive.c:3588
 msgid "Merging:"
 msgstr ""
 
-#: merge-recursive.c:3598
+#: merge-recursive.c:3601
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] ""
 msgstr[1] ""
 
-#: merge-recursive.c:3648
+#: merge-recursive.c:3651
 msgid "merge returned no commit"
 msgstr ""
 
-#: merge-recursive.c:3816
+#: merge-recursive.c:3823
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr ""
 
-#: merge-recursive.c:3834 builtin/merge.c:720 builtin/merge.c:906
+#: merge-recursive.c:3841 builtin/merge.c:720 builtin/merge.c:912
 #: builtin/stash.c:489
 msgid "Unable to write index."
 msgstr ""
@@ -4925,221 +5036,225 @@ msgstr ""
 msgid "failed to read the cache"
 msgstr ""
 
-#: merge.c:102 rerere.c:704 builtin/am.c:1988 builtin/am.c:2022
-#: builtin/checkout.c:598 builtin/checkout.c:853 builtin/clone.c:706
+#: merge.c:102 rerere.c:705 builtin/am.c:1989 builtin/am.c:2023
+#: builtin/checkout.c:603 builtin/checkout.c:865 builtin/clone.c:714
 #: builtin/stash.c:269
 msgid "unable to write new index file"
 msgstr ""
 
-#: midx.c:78
+#: midx.c:79
 msgid "multi-pack-index OID fanout is of the wrong size"
 msgstr ""
 
-#: midx.c:111
+#: midx.c:112
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr ""
 
-#: midx.c:127
+#: midx.c:128
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr ""
 
-#: midx.c:132
+#: midx.c:133
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr ""
 
-#: midx.c:137
+#: midx.c:138
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr ""
 
-#: midx.c:154
+#: midx.c:155
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr ""
 
-#: midx.c:156
+#: midx.c:157
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr ""
 
-#: midx.c:158
+#: midx.c:159
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr ""
 
-#: midx.c:160
+#: midx.c:161
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr ""
 
-#: midx.c:176
+#: midx.c:180
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr ""
 
-#: midx.c:224
+#: midx.c:228
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr ""
 
-#: midx.c:274
+#: midx.c:278
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr ""
 
-#: midx.c:505
+#: midx.c:509
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr ""
 
-#: midx.c:511
+#: midx.c:515
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr ""
 
-#: midx.c:579
+#: midx.c:583
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr ""
 
-#: midx.c:895
+#: midx.c:911
 msgid "cannot store reverse index file"
 msgstr ""
 
-#: midx.c:993
+#: midx.c:1009
 #, c-format
 msgid "could not parse line: %s"
 msgstr ""
 
-#: midx.c:995
+#: midx.c:1011
 #, c-format
 msgid "malformed line: %s"
 msgstr ""
 
-#: midx.c:1162
+#: midx.c:1181
 msgid "ignoring existing multi-pack-index; checksum mismatch"
 msgstr ""
 
-#: midx.c:1187
+#: midx.c:1206
 msgid "could not load pack"
 msgstr ""
 
-#: midx.c:1193
+#: midx.c:1212
 #, c-format
 msgid "could not open index for %s"
 msgstr ""
 
-#: midx.c:1204
+#: midx.c:1223
 msgid "Adding packfiles to multi-pack-index"
 msgstr ""
 
-#: midx.c:1247
+#: midx.c:1266
 #, c-format
 msgid "unknown preferred pack: '%s'"
 msgstr ""
 
-#: midx.c:1292
+#: midx.c:1311
 #, c-format
 msgid "cannot select preferred pack %s with no objects"
 msgstr ""
 
-#: midx.c:1324
+#: midx.c:1343
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr ""
 
-#: midx.c:1370
+#: midx.c:1389
 #, c-format
 msgid "preferred pack '%s' is expired"
 msgstr ""
 
-#: midx.c:1383
+#: midx.c:1402
 msgid "no pack files to index."
 msgstr ""
 
-#: midx.c:1420
+#: midx.c:1409
+msgid "refusing to write multi-pack .bitmap without any objects"
+msgstr ""
+
+#: midx.c:1451
 msgid "could not write multi-pack bitmap"
 msgstr ""
 
-#: midx.c:1430
+#: midx.c:1461
 msgid "could not write multi-pack-index"
 msgstr ""
 
-#: midx.c:1489 builtin/clean.c:37
+#: midx.c:1520 builtin/clean.c:37
 #, c-format
 msgid "failed to remove %s"
 msgstr ""
 
-#: midx.c:1522
+#: midx.c:1553
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr ""
 
-#: midx.c:1585
+#: midx.c:1616
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr ""
 
-#: midx.c:1593
+#: midx.c:1624
 msgid "incorrect checksum"
 msgstr ""
 
-#: midx.c:1596
+#: midx.c:1627
 msgid "Looking for referenced packfiles"
 msgstr ""
 
-#: midx.c:1611
+#: midx.c:1642
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr ""
 
-#: midx.c:1616
+#: midx.c:1647
 msgid "the midx contains no oid"
 msgstr ""
 
-#: midx.c:1625
+#: midx.c:1656
 msgid "Verifying OID order in multi-pack-index"
 msgstr ""
 
-#: midx.c:1634
+#: midx.c:1665
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr ""
 
-#: midx.c:1654
+#: midx.c:1685
 msgid "Sorting objects by packfile"
 msgstr ""
 
-#: midx.c:1661
+#: midx.c:1692
 msgid "Verifying object offsets"
 msgstr ""
 
-#: midx.c:1677
+#: midx.c:1708
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr ""
 
-#: midx.c:1683
+#: midx.c:1714
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr ""
 
-#: midx.c:1692
+#: midx.c:1723
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr ""
 
-#: midx.c:1719
+#: midx.c:1750
 msgid "Counting referenced objects"
 msgstr ""
 
-#: midx.c:1729
+#: midx.c:1760
 msgid "Finding and deleting unreferenced packfiles"
 msgstr ""
 
-#: midx.c:1921
+#: midx.c:1952
 msgid "could not start pack-objects"
 msgstr ""
 
-#: midx.c:1941
+#: midx.c:1972
 msgid "could not finish pack-objects"
 msgstr ""
 
@@ -5158,7 +5273,7 @@ msgstr ""
 msgid "unable to join lazy_name thread: %s"
 msgstr ""
 
-#: notes-merge.c:277
+#: notes-merge.c:276
 #, c-format
 msgid ""
 "You have not concluded your previous notes merge (%s exists).\n"
@@ -5166,7 +5281,7 @@ msgid ""
 "commit/abort the previous merge before you start a new notes merge."
 msgstr ""
 
-#: notes-merge.c:284
+#: notes-merge.c:283
 #, c-format
 msgid "You have not concluded your notes merge (%s exists)."
 msgstr ""
@@ -5194,271 +5309,340 @@ msgstr ""
 msgid "Bad %s value: '%s'"
 msgstr ""
 
-#: object-file.c:456
+#: object-file.c:457
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr ""
 
-#: object-file.c:514
+#: object-file.c:515
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr ""
 
-#: object-file.c:588
+#: object-file.c:589
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr ""
 
-#: object-file.c:595
+#: object-file.c:596
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr ""
 
-#: object-file.c:638
+#: object-file.c:639
 msgid "unable to fdopen alternates lockfile"
 msgstr ""
 
-#: object-file.c:656
+#: object-file.c:657
 msgid "unable to read alternates file"
 msgstr ""
 
-#: object-file.c:663
+#: object-file.c:664
 msgid "unable to move new alternates file into place"
 msgstr ""
 
-#: object-file.c:741
+#: object-file.c:742
 #, c-format
 msgid "path '%s' does not exist"
 msgstr ""
 
-#: object-file.c:762
+#: object-file.c:763
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr ""
 
-#: object-file.c:768
+#: object-file.c:769
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr ""
 
-#: object-file.c:774
+#: object-file.c:775
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr ""
 
-#: object-file.c:782
+#: object-file.c:783
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr ""
 
-#: object-file.c:813
+#: object-file.c:814
 #, c-format
 msgid "could not find object directory matching %s"
 msgstr ""
 
-#: object-file.c:863
+#: object-file.c:864
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr ""
 
-#: object-file.c:1013
+#: object-file.c:1014
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr ""
 
-#: object-file.c:1048
+#: object-file.c:1049
 #, c-format
 msgid "mmap failed%s"
 msgstr ""
 
-#: object-file.c:1214
+#: object-file.c:1230
 #, c-format
 msgid "object file %s is empty"
 msgstr ""
 
-#: object-file.c:1333 object-file.c:2542
+#: object-file.c:1349 object-file.c:2588
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr ""
 
-#: object-file.c:1335 object-file.c:2546
+#: object-file.c:1351 object-file.c:2592
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr ""
 
-#: object-file.c:1457
+#: object-file.c:1473
 #, c-format
 msgid "unable to parse %s header"
 msgstr ""
 
-#: object-file.c:1459
+#: object-file.c:1475
 msgid "invalid object type"
 msgstr ""
 
-#: object-file.c:1470
+#: object-file.c:1486
 #, c-format
 msgid "unable to unpack %s header"
 msgstr ""
 
-#: object-file.c:1474
+#: object-file.c:1490
 #, c-format
 msgid "header for %s too long, exceeds %d bytes"
 msgstr ""
 
-#: object-file.c:1704
+#: object-file.c:1720
 #, c-format
 msgid "failed to read object %s"
 msgstr ""
 
-#: object-file.c:1708
+#: object-file.c:1724
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr ""
 
-#: object-file.c:1712
+#: object-file.c:1728
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr ""
 
-#: object-file.c:1716
+#: object-file.c:1732
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr ""
 
-#: object-file.c:1821
+#: object-file.c:1855
 #, c-format
 msgid "unable to write file %s"
 msgstr ""
 
-#: object-file.c:1828
+#: object-file.c:1862
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr ""
 
-#: object-file.c:1835
+#: object-file.c:1869
 msgid "file write error"
 msgstr ""
 
-#: object-file.c:1858
+#: object-file.c:1904
 msgid "error when closing loose object file"
 msgstr ""
 
-#: object-file.c:1925
+#: object-file.c:1971
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr ""
 
-#: object-file.c:1927
+#: object-file.c:1973
 msgid "unable to create temporary file"
 msgstr ""
 
-#: object-file.c:1951
+#: object-file.c:1997
 msgid "unable to write loose object file"
 msgstr ""
 
-#: object-file.c:1957
+#: object-file.c:2003
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr ""
 
-#: object-file.c:1961
+#: object-file.c:2007
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr ""
 
-#: object-file.c:1965
+#: object-file.c:2011
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr ""
 
-#: object-file.c:1976 builtin/pack-objects.c:1243
+#: object-file.c:2022 builtin/pack-objects.c:1251
 #, c-format
 msgid "failed utime() on %s"
 msgstr ""
 
-#: object-file.c:2054
+#: object-file.c:2100
 #, c-format
 msgid "cannot read object for %s"
 msgstr ""
 
-#: object-file.c:2105
+#: object-file.c:2151
 msgid "corrupt commit"
 msgstr ""
 
-#: object-file.c:2113
+#: object-file.c:2159
 msgid "corrupt tag"
 msgstr ""
 
-#: object-file.c:2213
+#: object-file.c:2259
 #, c-format
 msgid "read error while indexing %s"
 msgstr ""
 
-#: object-file.c:2216
+#: object-file.c:2262
 #, c-format
 msgid "short read while indexing %s"
 msgstr ""
 
-#: object-file.c:2289 object-file.c:2299
+#: object-file.c:2335 object-file.c:2345
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr ""
 
-#: object-file.c:2305
+#: object-file.c:2351
 #, c-format
 msgid "%s: unsupported file type"
 msgstr ""
 
-#: object-file.c:2329 builtin/fetch.c:1453
+#: object-file.c:2375 builtin/fetch.c:1494
 #, c-format
 msgid "%s is not a valid object"
 msgstr ""
 
-#: object-file.c:2331
+#: object-file.c:2377
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr ""
 
-#: object-file.c:2358
+#: object-file.c:2404
 #, c-format
 msgid "unable to open %s"
 msgstr ""
 
-#: object-file.c:2553
+#: object-file.c:2599
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr ""
 
-#: object-file.c:2576
+#: object-file.c:2622
 #, c-format
 msgid "unable to mmap %s"
 msgstr ""
 
-#: object-file.c:2582
+#: object-file.c:2628
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr ""
 
-#: object-file.c:2587
+#: object-file.c:2633
 #, c-format
 msgid "unable to parse header of %s"
 msgstr ""
 
-#: object-file.c:2598
+#: object-file.c:2644
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr ""
 
-#: object-name.c:480
+#. TRANSLATORS: This is a line of ambiguous object
+#. output shown when we cannot look up or parse the
+#. object in question. E.g. "deadbeef [bad object]".
+#.
+#: object-name.c:382
+#, c-format
+msgid "%s [bad object]"
+msgstr ""
+
+#. TRANSLATORS: This is a line of ambiguous commit
+#. object output. E.g.:
+#. *
+#.    "deadbeef commit 2021-01-01 - Some Commit Message"
+#.
+#: object-name.c:407
+#, c-format
+msgid "%s commit %s - %s"
+msgstr ""
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output. E.g.:
+#. *
+#.    "deadbeef tag 2022-01-01 - Some Tag Message"
+#. *
+#. The second argument is the YYYY-MM-DD found
+#. in the tag.
+#. *
+#. The third argument is the "tag" string
+#. from object.c.
+#.
+#: object-name.c:428
+#, c-format
+msgid "%s tag %s - %s"
+msgstr ""
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output where we couldn't parse
+#. the tag itself. E.g.:
+#. *
+#.    "deadbeef [bad tag, could not parse it]"
+#.
+#: object-name.c:439
+#, c-format
+msgid "%s [bad tag, could not parse it]"
+msgstr ""
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef tree".
+#.
+#: object-name.c:447
+#, c-format
+msgid "%s tree"
+msgstr ""
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef blob".
+#.
+#: object-name.c:453
+#, c-format
+msgid "%s blob"
+msgstr ""
+
+#: object-name.c:569
 #, c-format
 msgid "short object ID %s is ambiguous"
 msgstr ""
 
-#: object-name.c:491
-msgid "The candidates are:"
+#. TRANSLATORS: The argument is the list of ambiguous
+#. objects composed in show_ambiguous_object(). See
+#. its "TRANSLATORS" comments for details.
+#.
+#: object-name.c:591
+#, c-format
+msgid ""
+"The candidates are:\n"
+"%s"
 msgstr ""
 
-#: object-name.c:790
+#: object-name.c:888
 msgid ""
 "Git normally never creates a ref that ends with 40 hex characters\n"
 "because it will be ignored when you just specify 40-hex. These refs\n"
@@ -5471,62 +5655,67 @@ msgid ""
 "running \"git config advice.objectNameWarning false\""
 msgstr ""
 
-#: object-name.c:910
+#: object-name.c:1008
 #, c-format
 msgid "log for '%.*s' only goes back to %s"
 msgstr ""
 
-#: object-name.c:918
+#: object-name.c:1016
 #, c-format
 msgid "log for '%.*s' only has %d entries"
 msgstr ""
 
-#: object-name.c:1696
+#: object-name.c:1794
 #, c-format
 msgid "path '%s' exists on disk, but not in '%.*s'"
 msgstr ""
 
-#: object-name.c:1702
+#: object-name.c:1800
 #, c-format
 msgid ""
 "path '%s' exists, but not '%s'\n"
 "hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
 msgstr ""
 
-#: object-name.c:1711
+#: object-name.c:1809
 #, c-format
 msgid "path '%s' does not exist in '%.*s'"
 msgstr ""
 
-#: object-name.c:1739
+#: object-name.c:1837
 #, c-format
 msgid ""
 "path '%s' is in the index, but not at stage %d\n"
 "hint: Did you mean ':%d:%s'?"
 msgstr ""
 
-#: object-name.c:1755
+#: object-name.c:1853
 #, c-format
 msgid ""
 "path '%s' is in the index, but not '%s'\n"
 "hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
 msgstr ""
 
-#: object-name.c:1763
+#: object-name.c:1861
 #, c-format
 msgid "path '%s' exists on disk, but not in the index"
 msgstr ""
 
-#: object-name.c:1765
+#: object-name.c:1863
 #, c-format
 msgid "path '%s' does not exist (neither on disk nor in the index)"
 msgstr ""
 
-#: object-name.c:1778
+#: object-name.c:1876
 msgid "relative path syntax can't be used outside working tree"
 msgstr ""
 
-#: object-name.c:1916
+#: object-name.c:1901
+#, c-format
+msgid "<object>:<path> required, only <object> '%s' given"
+msgstr ""
+
+#: object-name.c:2014
 #, c-format
 msgid "invalid object name '%.*s'."
 msgstr ""
@@ -5551,7 +5740,7 @@ msgstr ""
 msgid "unable to parse object: %s"
 msgstr ""
 
-#: object.c:283 object.c:295
+#: object.c:283 object.c:294
 #, c-format
 msgid "hash mismatch %s"
 msgstr ""
@@ -5560,21 +5749,21 @@ msgstr ""
 msgid "multi-pack bitmap is missing required reverse index"
 msgstr ""
 
-#: pack-bitmap.c:429
+#: pack-bitmap.c:433
 msgid "load_reverse_index: could not open pack"
 msgstr ""
 
-#: pack-bitmap.c:1069 pack-bitmap.c:1075 builtin/pack-objects.c:2424
+#: pack-bitmap.c:1072 pack-bitmap.c:1078 builtin/pack-objects.c:2432
 #, c-format
 msgid "unable to get size of %s"
 msgstr ""
 
-#: pack-bitmap.c:1935
+#: pack-bitmap.c:1937
 #, c-format
 msgid "could not find %s in pack %s at offset %<PRIuMAX>"
 msgstr ""
 
-#: pack-bitmap.c:1971 builtin/rev-list.c:92
+#: pack-bitmap.c:1973 builtin/rev-list.c:91
 #, c-format
 msgid "unable to get disk usage of %s"
 msgstr ""
@@ -5618,7 +5807,7 @@ msgstr ""
 msgid "failed to make %s readable"
 msgstr ""
 
-#: pack-write.c:520
+#: pack-write.c:521
 #, c-format
 msgid "could not write '%s' promisor file"
 msgstr ""
@@ -5952,234 +6141,238 @@ msgstr ""
 msgid "Removing duplicate objects"
 msgstr ""
 
-#: range-diff.c:67
+#: range-diff.c:68
 msgid "could not start `log`"
 msgstr ""
 
-#: range-diff.c:69
+#: range-diff.c:70
 msgid "could not read `log` output"
 msgstr ""
 
-#: range-diff.c:97 sequencer.c:5602
+#: range-diff.c:98 sequencer.c:5575
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr ""
 
-#: range-diff.c:111
+#: range-diff.c:109
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
 "'%s'"
 msgstr ""
 
-#: range-diff.c:137
+#: range-diff.c:132
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr ""
 
-#: range-diff.c:304
+#: range-diff.c:300
 msgid "failed to generate diff"
 msgstr ""
 
-#: range-diff.c:562 range-diff.c:564
+#: range-diff.c:558 range-diff.c:560
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr ""
 
-#: read-cache.c:723
+#: read-cache.c:737
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr ""
 
-#: read-cache.c:739
+#: read-cache.c:753
 msgid "cannot create an empty blob in the object database"
 msgstr ""
 
-#: read-cache.c:761
+#: read-cache.c:775
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr ""
 
-#: read-cache.c:766 builtin/submodule--helper.c:3242
+#: read-cache.c:780 builtin/submodule--helper.c:3359
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr ""
 
-#: read-cache.c:818
+#: read-cache.c:832
 #, c-format
 msgid "unable to index file '%s'"
 msgstr ""
 
-#: read-cache.c:837
+#: read-cache.c:851
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr ""
 
-#: read-cache.c:848
+#: read-cache.c:862
 #, c-format
 msgid "unable to stat '%s'"
 msgstr ""
 
-#: read-cache.c:1386
+#: read-cache.c:1404
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr ""
 
-#: read-cache.c:1601
+#: read-cache.c:1619
 msgid "Refresh index"
 msgstr ""
 
-#: read-cache.c:1733
+#: read-cache.c:1751
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
 "Using version %i"
 msgstr ""
 
-#: read-cache.c:1743
+#: read-cache.c:1761
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
 "Using version %i"
 msgstr ""
 
-#: read-cache.c:1799
+#: read-cache.c:1817
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr ""
 
-#: read-cache.c:1802
+#: read-cache.c:1820
 #, c-format
 msgid "bad index version %d"
 msgstr ""
 
-#: read-cache.c:1811
+#: read-cache.c:1829
 msgid "bad index file sha1 signature"
 msgstr ""
 
-#: read-cache.c:1845
+#: read-cache.c:1863
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr ""
 
-#: read-cache.c:1847
+#: read-cache.c:1865
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr ""
 
-#: read-cache.c:1884
+#: read-cache.c:1902
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr ""
 
-#: read-cache.c:1900
+#: read-cache.c:1918
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr ""
 
-#: read-cache.c:1957
+#: read-cache.c:1975
 msgid "unordered stage entries in index"
 msgstr ""
 
-#: read-cache.c:1960
+#: read-cache.c:1978
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr ""
 
-#: read-cache.c:1963
+#: read-cache.c:1981
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr ""
 
-#: read-cache.c:2078 read-cache.c:2384 rerere.c:549 rerere.c:583 rerere.c:1095
-#: submodule.c:1662 builtin/add.c:600 builtin/check-ignore.c:183
-#: builtin/checkout.c:527 builtin/checkout.c:719 builtin/clean.c:1013
-#: builtin/commit.c:378 builtin/diff-tree.c:122 builtin/grep.c:519
-#: builtin/mv.c:148 builtin/reset.c:499 builtin/rm.c:293
-#: builtin/submodule--helper.c:327 builtin/submodule--helper.c:3202
+#: read-cache.c:2096 read-cache.c:2402 rerere.c:549 rerere.c:583 rerere.c:1096
+#: submodule.c:1831 builtin/add.c:586 builtin/check-ignore.c:183
+#: builtin/checkout.c:532 builtin/checkout.c:724 builtin/clean.c:1016
+#: builtin/commit.c:379 builtin/diff-tree.c:122 builtin/grep.c:521
+#: builtin/mv.c:148 builtin/reset.c:506 builtin/rm.c:293
+#: builtin/submodule--helper.c:335 builtin/submodule--helper.c:3319
 msgid "index file corrupt"
 msgstr ""
 
-#: read-cache.c:2222
+#: read-cache.c:2240
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr ""
 
-#: read-cache.c:2235
+#: read-cache.c:2253
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr ""
 
-#: read-cache.c:2268
+#: read-cache.c:2286
 #, c-format
 msgid "%s: index file open failed"
 msgstr ""
 
-#: read-cache.c:2272
+#: read-cache.c:2290
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr ""
 
-#: read-cache.c:2276
+#: read-cache.c:2294
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr ""
 
-#: read-cache.c:2280
+#: read-cache.c:2298
 #, c-format
 msgid "%s: unable to map index file%s"
 msgstr ""
 
-#: read-cache.c:2323
+#: read-cache.c:2341
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr ""
 
-#: read-cache.c:2350
+#: read-cache.c:2368
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr ""
 
-#: read-cache.c:2396
+#: read-cache.c:2414
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr ""
 
-#: read-cache.c:2455
+#: read-cache.c:2473
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr ""
 
-#: read-cache.c:3086 strbuf.c:1191 wrapper.c:641 builtin/merge.c:1150
+#: read-cache.c:3032
+msgid "cannot write split index for a sparse index"
+msgstr ""
+
+#: read-cache.c:3114 strbuf.c:1192 wrapper.c:717 builtin/merge.c:1156
 #, c-format
 msgid "could not close '%s'"
 msgstr ""
 
-#: read-cache.c:3129
+#: read-cache.c:3157
 msgid "failed to convert to a sparse-index"
 msgstr ""
 
-#: read-cache.c:3200
+#: read-cache.c:3228
 #, c-format
 msgid "could not stat '%s'"
 msgstr ""
 
-#: read-cache.c:3213
+#: read-cache.c:3241
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr ""
 
-#: read-cache.c:3225
+#: read-cache.c:3253
 #, c-format
 msgid "unable to unlink: %s"
 msgstr ""
 
-#: read-cache.c:3254
+#: read-cache.c:3282
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr ""
 
-#: read-cache.c:3411
+#: read-cache.c:3439
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr ""
@@ -6257,9 +6450,9 @@ msgid ""
 "\n"
 msgstr ""
 
-#: rebase-interactive.c:113 rerere.c:469 rerere.c:676 sequencer.c:3883
-#: sequencer.c:3909 sequencer.c:5708 builtin/fsck.c:328 builtin/gc.c:1791
-#: builtin/rebase.c:190
+#: rebase-interactive.c:113 rerere.c:469 rerere.c:677 sequencer.c:3879
+#: sequencer.c:3905 sequencer.c:5681 builtin/fsck.c:328 builtin/gc.c:1791
+#: builtin/rebase.c:191
 #, c-format
 msgid "could not write '%s'"
 msgstr ""
@@ -6292,7 +6485,7 @@ msgstr ""
 msgid "%s: 'preserve' superseded by 'merges'"
 msgstr ""
 
-#: ref-filter.c:42 wt-status.c:2048
+#: ref-filter.c:42 wt-status.c:2057
 msgid "gone"
 msgstr ""
 
@@ -6458,81 +6651,91 @@ msgstr ""
 msgid "--format=%.*s cannot be used with --python, --shell, --tcl"
 msgstr ""
 
-#: ref-filter.c:1706
+#: ref-filter.c:1707
 #, c-format
 msgid "(no branch, rebasing %s)"
 msgstr ""
 
-#: ref-filter.c:1709
+#: ref-filter.c:1710
 #, c-format
 msgid "(no branch, rebasing detached HEAD %s)"
 msgstr ""
 
-#: ref-filter.c:1712
+#: ref-filter.c:1713
 #, c-format
 msgid "(no branch, bisect started on %s)"
 msgstr ""
 
-#: ref-filter.c:1716
+#: ref-filter.c:1717
 #, c-format
 msgid "(HEAD detached at %s)"
 msgstr ""
 
-#: ref-filter.c:1719
+#: ref-filter.c:1720
 #, c-format
 msgid "(HEAD detached from %s)"
 msgstr ""
 
-#: ref-filter.c:1722
+#: ref-filter.c:1723
 msgid "(no branch)"
 msgstr ""
 
-#: ref-filter.c:1754 ref-filter.c:1972
+#: ref-filter.c:1755 ref-filter.c:1973
 #, c-format
 msgid "missing object %s for %s"
 msgstr ""
 
-#: ref-filter.c:1764
+#: ref-filter.c:1765
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr ""
 
-#: ref-filter.c:2155
+#: ref-filter.c:2156
 #, c-format
 msgid "malformed object at '%s'"
 msgstr ""
 
-#: ref-filter.c:2245
+#: ref-filter.c:2246
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr ""
 
-#: ref-filter.c:2250 refs.c:676
+#: ref-filter.c:2251 refs.c:672
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr ""
 
-#: ref-filter.c:2629
+#: ref-filter.c:2630
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr ""
 
-#: ref-filter.c:2740
+#: ref-filter.c:2741
 #, c-format
 msgid "malformed object name %s"
 msgstr ""
 
-#: ref-filter.c:2745
+#: ref-filter.c:2746
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr ""
 
-#: refs.c:261
+#: reflog.c:407
+#, c-format
+msgid "not a reflog: %s"
+msgstr ""
+
+#: reflog.c:410
+#, c-format
+msgid "no reflog for '%s'"
+msgstr ""
+
+#: refs.c:262
 #, c-format
 msgid "%s does not point to a valid object!"
 msgstr ""
 
-#: refs.c:563
+#: refs.c:561
 #, c-format
 msgid ""
 "Using '%s' as the name for the initial branch. This default branch name\n"
@@ -6547,81 +6750,81 @@ msgid ""
 "\tgit branch -m <name>\n"
 msgstr ""
 
-#: refs.c:585
+#: refs.c:583
 #, c-format
 msgid "could not retrieve `%s`"
 msgstr ""
 
-#: refs.c:595
+#: refs.c:593
 #, c-format
 msgid "invalid branch name: %s = %s"
 msgstr ""
 
-#: refs.c:674
+#: refs.c:670
 #, c-format
 msgid "ignoring dangling symref %s"
 msgstr ""
 
-#: refs.c:925
+#: refs.c:919
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr ""
 
-#: refs.c:932
+#: refs.c:926
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr ""
 
-#: refs.c:997
+#: refs.c:991
 #, c-format
 msgid "log for %s is empty"
 msgstr ""
 
-#: refs.c:1090
+#: refs.c:1086
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr ""
 
-#: refs.c:1168
+#: refs.c:1164
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr ""
 
-#: refs.c:2067
+#: refs.c:2059
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr ""
 
-#: refs.c:2150
+#: refs.c:2145
 msgid "ref updates forbidden inside quarantine environment"
 msgstr ""
 
-#: refs.c:2161
+#: refs.c:2156
 msgid "ref updates aborted by hook"
 msgstr ""
 
-#: refs.c:2269 refs.c:2299
+#: refs.c:2264 refs.c:2294
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr ""
 
-#: refs.c:2275 refs.c:2310
+#: refs.c:2270 refs.c:2305
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr ""
 
-#: refs/files-backend.c:1267
+#: refs/files-backend.c:1295
 #, c-format
 msgid "could not remove reference %s"
 msgstr ""
 
-#: refs/files-backend.c:1281 refs/packed-backend.c:1549
-#: refs/packed-backend.c:1559
+#: refs/files-backend.c:1310 refs/packed-backend.c:1565
+#: refs/packed-backend.c:1575
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr ""
 
-#: refs/files-backend.c:1284 refs/packed-backend.c:1562
+#: refs/files-backend.c:1313 refs/packed-backend.c:1578
 #, c-format
 msgid "could not delete references: %s"
 msgstr ""
@@ -6644,37 +6847,37 @@ msgstr ""
 msgid "more than one uploadpack given, using the first"
 msgstr ""
 
-#: remote.c:699
+#: remote.c:698
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr ""
 
-#: remote.c:703
+#: remote.c:702
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr ""
 
-#: remote.c:707
+#: remote.c:706
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr ""
 
-#: remote.c:775
+#: remote.c:774
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr ""
 
-#: remote.c:785
+#: remote.c:784
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr ""
 
-#: remote.c:1192
+#: remote.c:1191
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr ""
 
-#: remote.c:1197
+#: remote.c:1196
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr ""
@@ -6683,7 +6886,7 @@ msgstr ""
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1212
+#: remote.c:1211
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -6697,7 +6900,7 @@ msgid ""
 "Neither worked, so we gave up. You must fully qualify the ref."
 msgstr ""
 
-#: remote.c:1232
+#: remote.c:1231
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -6705,7 +6908,7 @@ msgid ""
 "'%s:refs/heads/%s'?"
 msgstr ""
 
-#: remote.c:1237
+#: remote.c:1236
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -6713,7 +6916,7 @@ msgid ""
 "'%s:refs/tags/%s'?"
 msgstr ""
 
-#: remote.c:1242
+#: remote.c:1241
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -6721,7 +6924,7 @@ msgid ""
 "'%s:refs/tags/%s'?"
 msgstr ""
 
-#: remote.c:1247
+#: remote.c:1246
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -6729,114 +6932,114 @@ msgid ""
 "'%s:refs/tags/%s'?"
 msgstr ""
 
-#: remote.c:1283
+#: remote.c:1282
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr ""
 
-#: remote.c:1294
+#: remote.c:1293
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr ""
 
-#: remote.c:1306
+#: remote.c:1305
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr ""
 
-#: remote.c:1313
+#: remote.c:1312
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr ""
 
-#: remote.c:1834 remote.c:1941
+#: remote.c:1833 remote.c:1940
 msgid "HEAD does not point to a branch"
 msgstr ""
 
-#: remote.c:1843
+#: remote.c:1842
 #, c-format
 msgid "no such branch: '%s'"
 msgstr ""
 
-#: remote.c:1846
+#: remote.c:1845
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr ""
 
-#: remote.c:1852
+#: remote.c:1851
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr ""
 
-#: remote.c:1867
+#: remote.c:1866
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr ""
 
-#: remote.c:1882
+#: remote.c:1881
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr ""
 
-#: remote.c:1892
+#: remote.c:1891
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr ""
 
-#: remote.c:1905
+#: remote.c:1904
 msgid "push has no destination (push.default is 'nothing')"
 msgstr ""
 
-#: remote.c:1927
+#: remote.c:1926
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr ""
 
-#: remote.c:2060
+#: remote.c:2059
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr ""
 
-#: remote.c:2073
+#: remote.c:2072
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr ""
 
-#: remote.c:2236
+#: remote.c:2235
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr ""
 
-#: remote.c:2240
+#: remote.c:2239
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr ""
 
-#: remote.c:2243
+#: remote.c:2242
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr ""
 
-#: remote.c:2247
+#: remote.c:2246
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr ""
 
-#: remote.c:2250
+#: remote.c:2249
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr ""
 
-#: remote.c:2254
+#: remote.c:2253
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: remote.c:2260
+#: remote.c:2259
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr ""
 
-#: remote.c:2263
+#: remote.c:2262
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -6844,11 +7047,11 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: remote.c:2271
+#: remote.c:2270
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr ""
 
-#: remote.c:2274
+#: remote.c:2273
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -6859,11 +7062,11 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: remote.c:2284
+#: remote.c:2283
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr ""
 
-#: remote.c:2476
+#: remote.c:2475
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr ""
@@ -6901,104 +7104,108 @@ msgstr ""
 msgid "failed to flush '%s'"
 msgstr ""
 
-#: rerere.c:487 rerere.c:1023
+#: rerere.c:487 rerere.c:1024
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
 msgstr ""
 
-#: rerere.c:668
+#: rerere.c:669
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr ""
 
-#: rerere.c:678
+#: rerere.c:679
 #, c-format
 msgid "writing '%s' failed"
 msgstr ""
 
-#: rerere.c:698
+#: rerere.c:699
 #, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr ""
 
-#: rerere.c:737
+#: rerere.c:738
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr ""
 
-#: rerere.c:772
+#: rerere.c:773
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr ""
 
-#: rerere.c:787
+#: rerere.c:788
 #, c-format
 msgid "cannot unlink stray '%s'"
 msgstr ""
 
-#: rerere.c:791
+#: rerere.c:792
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr ""
 
-#: rerere.c:865 submodule.c:2121 builtin/log.c:2017
-#: builtin/submodule--helper.c:1777 builtin/submodule--helper.c:1820
+#: rerere.c:866 submodule.c:2290 builtin/log.c:2042
+#: builtin/submodule--helper.c:1786 builtin/submodule--helper.c:1833
 #, c-format
 msgid "could not create directory '%s'"
 msgstr ""
 
-#: rerere.c:1041
+#: rerere.c:1042
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr ""
 
-#: rerere.c:1052 rerere.c:1059
+#: rerere.c:1053 rerere.c:1060
 #, c-format
 msgid "no remembered resolution for '%s'"
 msgstr ""
 
-#: rerere.c:1061
+#: rerere.c:1062
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr ""
 
-#: rerere.c:1071
+#: rerere.c:1072
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr ""
 
-#: rerere.c:1080
+#: rerere.c:1081
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr ""
 
-#: rerere.c:1191
+#: rerere.c:1192
 msgid "unable to open rr-cache directory"
 msgstr ""
 
-#: reset.c:42
+#: reset.c:112
 msgid "could not determine HEAD revision"
 msgstr ""
 
-#: reset.c:70 reset.c:76 sequencer.c:3700
+#: reset.c:141 reset.c:147 sequencer.c:3696
 #, c-format
 msgid "failed to find tree of %s"
 msgstr ""
 
-#: revision.c:2347
+#: revision.c:2358
 msgid "--unpacked=<packfile> no longer supported"
 msgstr ""
 
-#: revision.c:2686
+#: revision.c:2712
 msgid "your current branch appears to be broken"
 msgstr ""
 
-#: revision.c:2689
+#: revision.c:2715
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr ""
 
-#: revision.c:2891
+#: revision.c:2901
+msgid "object filtering requires --objects"
+msgstr ""
+
+#: revision.c:2918
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr ""
 
@@ -7065,7 +7272,7 @@ msgstr ""
 msgid "could not delete '%s'"
 msgstr ""
 
-#: sequencer.c:345 sequencer.c:4751 builtin/rebase.c:563 builtin/rebase.c:1297
+#: sequencer.c:345 sequencer.c:4724 builtin/rebase.c:564 builtin/rebase.c:1326
 #: builtin/rm.c:409
 #, c-format
 msgid "could not remove '%s'"
@@ -7114,13 +7321,13 @@ msgid ""
 "run \"git revert --abort\"."
 msgstr ""
 
-#: sequencer.c:448 sequencer.c:3292
+#: sequencer.c:448 sequencer.c:3288
 #, c-format
 msgid "could not lock '%s'"
 msgstr ""
 
-#: sequencer.c:450 sequencer.c:3091 sequencer.c:3296 sequencer.c:3310
-#: sequencer.c:3561 sequencer.c:5618 strbuf.c:1188 wrapper.c:639
+#: sequencer.c:450 sequencer.c:3087 sequencer.c:3292 sequencer.c:3306
+#: sequencer.c:3557 sequencer.c:5591 strbuf.c:1189 wrapper.c:715
 #, c-format
 msgid "could not write to '%s'"
 msgstr ""
@@ -7130,14 +7337,14 @@ msgstr ""
 msgid "could not write eol to '%s'"
 msgstr ""
 
-#: sequencer.c:460 sequencer.c:3096 sequencer.c:3298 sequencer.c:3312
-#: sequencer.c:3569
+#: sequencer.c:460 sequencer.c:3092 sequencer.c:3294 sequencer.c:3308
+#: sequencer.c:3565
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr ""
 
-#: sequencer.c:473 sequencer.c:1934 sequencer.c:3116 sequencer.c:3551
-#: sequencer.c:3679 builtin/am.c:289 builtin/commit.c:834 builtin/merge.c:1148
+#: sequencer.c:473 sequencer.c:1930 sequencer.c:3112 sequencer.c:3547
+#: sequencer.c:3675 builtin/am.c:290 builtin/commit.c:837 builtin/merge.c:1154
 #, c-format
 msgid "could not read '%s'"
 msgstr ""
@@ -7156,7 +7363,7 @@ msgstr ""
 msgid "%s: fast-forward"
 msgstr ""
 
-#: sequencer.c:574 builtin/tag.c:614
+#: sequencer.c:574 builtin/tag.c:615
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr ""
@@ -7187,8 +7394,8 @@ msgstr ""
 msgid "unable to dequote value of '%s'"
 msgstr ""
 
-#: sequencer.c:841 wrapper.c:209 wrapper.c:379 builtin/am.c:756
-#: builtin/am.c:848 builtin/rebase.c:694
+#: sequencer.c:841 wrapper.c:219 wrapper.c:389 builtin/am.c:757
+#: builtin/am.c:849 builtin/rebase.c:699
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr ""
@@ -7272,365 +7479,360 @@ msgid ""
 "    git commit --amend --reset-author\n"
 msgstr ""
 
-#: sequencer.c:1288
+#: sequencer.c:1287
 msgid "couldn't look up newly created commit"
 msgstr ""
 
-#: sequencer.c:1290
+#: sequencer.c:1289
 msgid "could not parse newly created commit"
 msgstr ""
 
-#: sequencer.c:1339
+#: sequencer.c:1336
 msgid "unable to resolve HEAD after creating commit"
 msgstr ""
 
-#: sequencer.c:1342
+#: sequencer.c:1338
 msgid "detached HEAD"
 msgstr ""
 
-#: sequencer.c:1346
+#: sequencer.c:1342
 msgid " (root-commit)"
 msgstr ""
 
-#: sequencer.c:1367
+#: sequencer.c:1363
 msgid "could not parse HEAD"
 msgstr ""
 
-#: sequencer.c:1369
+#: sequencer.c:1365
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr ""
 
-#: sequencer.c:1373 sequencer.c:1451 builtin/commit.c:1708
+#: sequencer.c:1369 sequencer.c:1447 builtin/commit.c:1707
 msgid "could not parse HEAD commit"
 msgstr ""
 
-#: sequencer.c:1429 sequencer.c:2314
+#: sequencer.c:1425 sequencer.c:2310
 msgid "unable to parse commit author"
 msgstr ""
 
-#: sequencer.c:1440 builtin/am.c:1643 builtin/merge.c:710
+#: sequencer.c:1436 builtin/am.c:1644 builtin/merge.c:710
 msgid "git write-tree failed to write a tree"
 msgstr ""
 
-#: sequencer.c:1473 sequencer.c:1593
+#: sequencer.c:1469 sequencer.c:1589
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr ""
 
-#: sequencer.c:1504 sequencer.c:1536
+#: sequencer.c:1500 sequencer.c:1532
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr ""
 
-#: sequencer.c:1510
+#: sequencer.c:1506
 msgid "corrupt author: missing date information"
 msgstr ""
 
-#: sequencer.c:1549 builtin/am.c:1670 builtin/commit.c:1822 builtin/merge.c:915
-#: builtin/merge.c:940 t/helper/test-fast-rebase.c:78
+#: sequencer.c:1545 builtin/am.c:1671 builtin/commit.c:1821 builtin/merge.c:921
+#: builtin/merge.c:946 t/helper/test-fast-rebase.c:78
 msgid "failed to write commit object"
 msgstr ""
 
-#: sequencer.c:1576 sequencer.c:4523 t/helper/test-fast-rebase.c:199
+#: sequencer.c:1572 sequencer.c:4496 t/helper/test-fast-rebase.c:199
 #: t/helper/test-fast-rebase.c:217
 #, c-format
 msgid "could not update %s"
 msgstr ""
 
-#: sequencer.c:1625
+#: sequencer.c:1621
 #, c-format
 msgid "could not parse commit %s"
 msgstr ""
 
-#: sequencer.c:1630
+#: sequencer.c:1626
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr ""
 
-#: sequencer.c:1713 sequencer.c:1994
+#: sequencer.c:1709 sequencer.c:1990
 #, c-format
 msgid "unknown command: %d"
 msgstr ""
 
-#: sequencer.c:1755
+#: sequencer.c:1751
 msgid "This is the 1st commit message:"
 msgstr ""
 
-#: sequencer.c:1756
+#: sequencer.c:1752
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr ""
 
-#: sequencer.c:1757
+#: sequencer.c:1753
 msgid "The 1st commit message will be skipped:"
 msgstr ""
 
-#: sequencer.c:1758
+#: sequencer.c:1754
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr ""
 
-#: sequencer.c:1759
+#: sequencer.c:1755
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr ""
 
-#: sequencer.c:1906 sequencer.c:1963
+#: sequencer.c:1902 sequencer.c:1959
 #, c-format
 msgid "cannot write '%s'"
 msgstr ""
 
-#: sequencer.c:1953
+#: sequencer.c:1949
 msgid "need a HEAD to fixup"
 msgstr ""
 
-#: sequencer.c:1955 sequencer.c:3596
+#: sequencer.c:1951 sequencer.c:3592
 msgid "could not read HEAD"
 msgstr ""
 
-#: sequencer.c:1957
+#: sequencer.c:1953
 msgid "could not read HEAD's commit message"
 msgstr ""
 
-#: sequencer.c:1981
+#: sequencer.c:1977
 #, c-format
 msgid "could not read commit message of %s"
 msgstr ""
 
-#: sequencer.c:2091
+#: sequencer.c:2087
 msgid "your index file is unmerged."
 msgstr ""
 
-#: sequencer.c:2098
+#: sequencer.c:2094
 msgid "cannot fixup root commit"
 msgstr ""
 
-#: sequencer.c:2117
+#: sequencer.c:2113
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr ""
 
-#: sequencer.c:2125 sequencer.c:2133
+#: sequencer.c:2121 sequencer.c:2129
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr ""
 
-#: sequencer.c:2139
+#: sequencer.c:2135
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr ""
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:2158
+#: sequencer.c:2154
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr ""
 
-#: sequencer.c:2224
+#: sequencer.c:2220
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr ""
 
-#: sequencer.c:2284
+#: sequencer.c:2280
 #, c-format
 msgid "could not revert %s... %s"
 msgstr ""
 
-#: sequencer.c:2285
+#: sequencer.c:2281
 #, c-format
 msgid "could not apply %s... %s"
 msgstr ""
 
-#: sequencer.c:2306
+#: sequencer.c:2302
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr ""
 
-#: sequencer.c:2364
+#: sequencer.c:2360
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr ""
 
-#: sequencer.c:2372
+#: sequencer.c:2368
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr ""
 
-#: sequencer.c:2452
+#: sequencer.c:2448
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr ""
 
-#: sequencer.c:2461
+#: sequencer.c:2457
 #, c-format
 msgid "missing arguments for %s"
 msgstr ""
 
-#: sequencer.c:2504
+#: sequencer.c:2500
 #, c-format
 msgid "could not parse '%s'"
 msgstr ""
 
-#: sequencer.c:2565
+#: sequencer.c:2561
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr ""
 
-#: sequencer.c:2576
+#: sequencer.c:2572
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr ""
 
-#: sequencer.c:2624 builtin/rebase.c:184
+#: sequencer.c:2620 builtin/rebase.c:185
 #, c-format
 msgid "could not read '%s'."
 msgstr ""
 
-#: sequencer.c:2662
+#: sequencer.c:2658
 msgid "cancelling a cherry picking in progress"
 msgstr ""
 
-#: sequencer.c:2671
+#: sequencer.c:2667
 msgid "cancelling a revert in progress"
 msgstr ""
 
-#: sequencer.c:2711
+#: sequencer.c:2707
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr ""
 
-#: sequencer.c:2713
+#: sequencer.c:2709
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr ""
 
-#: sequencer.c:2718
+#: sequencer.c:2714
 msgid "no commits parsed."
 msgstr ""
 
-#: sequencer.c:2729
+#: sequencer.c:2725
 msgid "cannot cherry-pick during a revert."
 msgstr ""
 
-#: sequencer.c:2731
+#: sequencer.c:2727
 msgid "cannot revert during a cherry-pick."
 msgstr ""
 
-#: sequencer.c:2809
-#, c-format
-msgid "invalid value for %s: %s"
-msgstr ""
-
-#: sequencer.c:2918
+#: sequencer.c:2914
 msgid "unusable squash-onto"
 msgstr ""
 
-#: sequencer.c:2938
+#: sequencer.c:2934
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr ""
 
-#: sequencer.c:3033 sequencer.c:4902
+#: sequencer.c:3029 sequencer.c:4875
 msgid "empty commit set passed"
 msgstr ""
 
-#: sequencer.c:3050
+#: sequencer.c:3046
 msgid "revert is already in progress"
 msgstr ""
 
-#: sequencer.c:3052
+#: sequencer.c:3048
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr ""
 
-#: sequencer.c:3055
+#: sequencer.c:3051
 msgid "cherry-pick is already in progress"
 msgstr ""
 
-#: sequencer.c:3057
+#: sequencer.c:3053
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr ""
 
-#: sequencer.c:3071
+#: sequencer.c:3067
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr ""
 
-#: sequencer.c:3086
+#: sequencer.c:3082
 msgid "could not lock HEAD"
 msgstr ""
 
-#: sequencer.c:3146 sequencer.c:4612
+#: sequencer.c:3142 sequencer.c:4585
 msgid "no cherry-pick or revert in progress"
 msgstr ""
 
-#: sequencer.c:3148 sequencer.c:3159
+#: sequencer.c:3144 sequencer.c:3155
 msgid "cannot resolve HEAD"
 msgstr ""
 
-#: sequencer.c:3150 sequencer.c:3194
+#: sequencer.c:3146 sequencer.c:3190
 msgid "cannot abort from a branch yet to be born"
 msgstr ""
 
-#: sequencer.c:3180 builtin/fetch.c:1004 builtin/fetch.c:1416
-#: builtin/grep.c:772
+#: sequencer.c:3176 builtin/fetch.c:1030 builtin/fetch.c:1457
+#: builtin/grep.c:774
 #, c-format
 msgid "cannot open '%s'"
 msgstr ""
 
-#: sequencer.c:3182
+#: sequencer.c:3178
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr ""
 
-#: sequencer.c:3183
+#: sequencer.c:3179
 msgid "unexpected end of file"
 msgstr ""
 
-#: sequencer.c:3189
+#: sequencer.c:3185
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr ""
 
-#: sequencer.c:3200
+#: sequencer.c:3196
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr ""
 
-#: sequencer.c:3241
+#: sequencer.c:3237
 msgid "no revert in progress"
 msgstr ""
 
-#: sequencer.c:3250
+#: sequencer.c:3246
 msgid "no cherry-pick in progress"
 msgstr ""
 
-#: sequencer.c:3260
+#: sequencer.c:3256
 msgid "failed to skip the commit"
 msgstr ""
 
-#: sequencer.c:3267
+#: sequencer.c:3263
 msgid "there is nothing to skip"
 msgstr ""
 
-#: sequencer.c:3270
+#: sequencer.c:3266
 #, c-format
 msgid ""
 "have you committed already?\n"
 "try \"git %s --continue\""
 msgstr ""
 
-#: sequencer.c:3432 sequencer.c:4503
+#: sequencer.c:3428 sequencer.c:4476
 msgid "cannot read HEAD"
 msgstr ""
 
-#: sequencer.c:3449
+#: sequencer.c:3445
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr ""
 
-#: sequencer.c:3457
+#: sequencer.c:3453
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -7642,27 +7844,27 @@ msgid ""
 "  git rebase --continue\n"
 msgstr ""
 
-#: sequencer.c:3467
+#: sequencer.c:3463
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr ""
 
-#: sequencer.c:3474
+#: sequencer.c:3470
 #, c-format
 msgid "Could not merge %.*s"
 msgstr ""
 
-#: sequencer.c:3488 sequencer.c:3492 builtin/difftool.c:633
+#: sequencer.c:3484 sequencer.c:3488 builtin/difftool.c:633
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr ""
 
-#: sequencer.c:3503
+#: sequencer.c:3499
 #, c-format
 msgid "Executing: %s\n"
 msgstr ""
 
-#: sequencer.c:3514
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -7672,11 +7874,11 @@ msgid ""
 "\n"
 msgstr ""
 
-#: sequencer.c:3520
+#: sequencer.c:3516
 msgid "and made changes to the index and/or the working tree\n"
 msgstr ""
 
-#: sequencer.c:3526
+#: sequencer.c:3522
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -7687,90 +7889,90 @@ msgid ""
 "\n"
 msgstr ""
 
-#: sequencer.c:3586
+#: sequencer.c:3582
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr ""
 
-#: sequencer.c:3659
+#: sequencer.c:3655
 msgid "writing fake root commit"
 msgstr ""
 
-#: sequencer.c:3664
+#: sequencer.c:3660
 msgid "writing squash-onto"
 msgstr ""
 
-#: sequencer.c:3743
+#: sequencer.c:3739
 #, c-format
 msgid "could not resolve '%s'"
 msgstr ""
 
-#: sequencer.c:3775
+#: sequencer.c:3771
 msgid "cannot merge without a current revision"
 msgstr ""
 
-#: sequencer.c:3797
+#: sequencer.c:3793
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr ""
 
-#: sequencer.c:3806
+#: sequencer.c:3802
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr ""
 
-#: sequencer.c:3818
+#: sequencer.c:3814
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr ""
 
-#: sequencer.c:3873
+#: sequencer.c:3869
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr ""
 
-#: sequencer.c:4019
+#: sequencer.c:4013
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr ""
 
-#: sequencer.c:4035
+#: sequencer.c:4029
 msgid "merge: Unable to write new index file"
 msgstr ""
 
-#: sequencer.c:4116
+#: sequencer.c:4110
 msgid "Cannot autostash"
 msgstr ""
 
-#: sequencer.c:4119
+#: sequencer.c:4113
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr ""
 
-#: sequencer.c:4125
+#: sequencer.c:4119
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr ""
 
-#: sequencer.c:4128
+#: sequencer.c:4122
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr ""
 
-#: sequencer.c:4132
+#: sequencer.c:4124
 msgid "could not reset --hard"
 msgstr ""
 
-#: sequencer.c:4157
+#: sequencer.c:4148
 #, c-format
 msgid "Applied autostash.\n"
 msgstr ""
 
-#: sequencer.c:4169
+#: sequencer.c:4160
 #, c-format
 msgid "cannot store %s"
 msgstr ""
 
-#: sequencer.c:4172
+#: sequencer.c:4163
 #, c-format
 msgid ""
 "%s\n"
@@ -7778,29 +7980,29 @@ msgid ""
 "You can run \"git stash pop\" or \"git stash drop\" at any time.\n"
 msgstr ""
 
-#: sequencer.c:4177
+#: sequencer.c:4168
 msgid "Applying autostash resulted in conflicts."
 msgstr ""
 
-#: sequencer.c:4178
+#: sequencer.c:4169
 msgid "Autostash exists; creating a new stash entry."
 msgstr ""
 
-#: sequencer.c:4252
+#: sequencer.c:4225
 msgid "could not detach HEAD"
 msgstr ""
 
-#: sequencer.c:4267
+#: sequencer.c:4240
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr ""
 
-#: sequencer.c:4269
+#: sequencer.c:4242
 #, c-format
 msgid "Stopped at %s\n"
 msgstr ""
 
-#: sequencer.c:4301
+#: sequencer.c:4274
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -7813,133 +8015,133 @@ msgid ""
 "    git rebase --continue\n"
 msgstr ""
 
-#: sequencer.c:4347
+#: sequencer.c:4320
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr ""
 
-#: sequencer.c:4393
+#: sequencer.c:4366
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr ""
 
-#: sequencer.c:4463
+#: sequencer.c:4436
 #, c-format
 msgid "unknown command %d"
 msgstr ""
 
-#: sequencer.c:4511
+#: sequencer.c:4484
 msgid "could not read orig-head"
 msgstr ""
 
-#: sequencer.c:4516
+#: sequencer.c:4489
 msgid "could not read 'onto'"
 msgstr ""
 
-#: sequencer.c:4530
+#: sequencer.c:4503
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr ""
 
-#: sequencer.c:4590
+#: sequencer.c:4563
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr ""
 
-#: sequencer.c:4642
+#: sequencer.c:4615
 msgid "cannot rebase: You have unstaged changes."
 msgstr ""
 
-#: sequencer.c:4651
+#: sequencer.c:4624
 msgid "cannot amend non-existing commit"
 msgstr ""
 
-#: sequencer.c:4653
+#: sequencer.c:4626
 #, c-format
 msgid "invalid file: '%s'"
 msgstr ""
 
-#: sequencer.c:4655
+#: sequencer.c:4628
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr ""
 
-#: sequencer.c:4658
+#: sequencer.c:4631
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
 "first and then run 'git rebase --continue' again."
 msgstr ""
 
-#: sequencer.c:4694 sequencer.c:4733
+#: sequencer.c:4667 sequencer.c:4706
 #, c-format
 msgid "could not write file: '%s'"
 msgstr ""
 
-#: sequencer.c:4749
+#: sequencer.c:4722
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr ""
 
-#: sequencer.c:4759
+#: sequencer.c:4732
 msgid "could not commit staged changes."
 msgstr ""
 
-#: sequencer.c:4879
+#: sequencer.c:4852
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr ""
 
-#: sequencer.c:4883
+#: sequencer.c:4856
 #, c-format
 msgid "%s: bad revision"
 msgstr ""
 
-#: sequencer.c:4918
+#: sequencer.c:4891
 msgid "can't revert as initial commit"
 msgstr ""
 
-#: sequencer.c:5189 sequencer.c:5418
+#: sequencer.c:5162 sequencer.c:5391
 #, c-format
 msgid "skipped previously applied commit %s"
 msgstr ""
 
-#: sequencer.c:5259 sequencer.c:5434
+#: sequencer.c:5232 sequencer.c:5407
 msgid "use --reapply-cherry-picks to include skipped commits"
 msgstr ""
 
-#: sequencer.c:5405
+#: sequencer.c:5378
 msgid "make_script: unhandled options"
 msgstr ""
 
-#: sequencer.c:5408
+#: sequencer.c:5381
 msgid "make_script: error preparing revisions"
 msgstr ""
 
-#: sequencer.c:5666 sequencer.c:5683
+#: sequencer.c:5639 sequencer.c:5656
 msgid "nothing to do"
 msgstr ""
 
-#: sequencer.c:5702
+#: sequencer.c:5675
 msgid "could not skip unnecessary pick commands"
 msgstr ""
 
-#: sequencer.c:5802
+#: sequencer.c:5775
 msgid "the script was already rearranged."
 msgstr ""
 
-#: setup.c:134
+#: setup.c:135
 #, c-format
 msgid "'%s' is outside repository at '%s'"
 msgstr ""
 
-#: setup.c:186
+#: setup.c:187
 #, c-format
 msgid ""
 "%s: no such path in the working tree.\n"
 "Use 'git <command> -- <path>...' to specify paths that do not exist locally."
 msgstr ""
 
-#: setup.c:199
+#: setup.c:200
 #, c-format
 msgid ""
 "ambiguous argument '%s': unknown revision or path not in the working tree.\n"
@@ -7947,12 +8149,12 @@ msgid ""
 "'git <command> [<revision>...] -- [<file>...]'"
 msgstr ""
 
-#: setup.c:265
+#: setup.c:266
 #, c-format
 msgid "option '%s' must come before non-option arguments"
 msgstr ""
 
-#: setup.c:284
+#: setup.c:285
 #, c-format
 msgid ""
 "ambiguous argument '%s': both revision and filename\n"
@@ -7960,164 +8162,177 @@ msgid ""
 "'git <command> [<revision>...] -- [<file>...]'"
 msgstr ""
 
-#: setup.c:420
+#: setup.c:421
 msgid "unable to set up work tree using invalid config"
 msgstr ""
 
-#: setup.c:424 builtin/rev-parse.c:895
+#: setup.c:425 builtin/rev-parse.c:895
 msgid "this operation must be run in a work tree"
 msgstr ""
 
-#: setup.c:722
+#: setup.c:724
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr ""
 
-#: setup.c:730
+#: setup.c:732
 msgid "unknown repository extension found:"
 msgid_plural "unknown repository extensions found:"
 msgstr[0] ""
 msgstr[1] ""
 
-#: setup.c:744
+#: setup.c:746
 msgid "repo version is 0, but v1-only extension found:"
 msgid_plural "repo version is 0, but v1-only extensions found:"
 msgstr[0] ""
 msgstr[1] ""
 
-#: setup.c:765
+#: setup.c:767
 #, c-format
 msgid "error opening '%s'"
 msgstr ""
 
-#: setup.c:767
+#: setup.c:769
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr ""
 
-#: setup.c:769
+#: setup.c:771
 #, c-format
 msgid "error reading %s"
 msgstr ""
 
-#: setup.c:771
+#: setup.c:773
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr ""
 
-#: setup.c:773
+#: setup.c:775
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr ""
 
-#: setup.c:775
+#: setup.c:777
 #, c-format
 msgid "not a git repository: %s"
 msgstr ""
 
-#: setup.c:877
+#: setup.c:879
 #, c-format
 msgid "'$%s' too big"
 msgstr ""
 
-#: setup.c:891
+#: setup.c:893
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr ""
 
-#: setup.c:920 setup.c:922 setup.c:953
+#: setup.c:922 setup.c:924 setup.c:955
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr ""
 
-#: setup.c:925 setup.c:981 setup.c:991 setup.c:1030 setup.c:1038
+#: setup.c:927 setup.c:983 setup.c:993 setup.c:1032 setup.c:1040
 msgid "cannot come back to cwd"
 msgstr ""
 
-#: setup.c:1052
+#: setup.c:1054
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr ""
 
-#: setup.c:1295
+#: setup.c:1338
 msgid "Unable to read current working directory"
 msgstr ""
 
-#: setup.c:1304 setup.c:1310
+#: setup.c:1347 setup.c:1353
 #, c-format
 msgid "cannot change to '%s'"
 msgstr ""
 
-#: setup.c:1315
+#: setup.c:1358
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
 msgstr ""
 
-#: setup.c:1321
+#: setup.c:1364
 #, c-format
 msgid ""
 "not a git repository (or any parent up to mount point %s)\n"
 "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."
 msgstr ""
 
-#: setup.c:1446
+#: setup.c:1374
+#, c-format
+msgid ""
+"unsafe repository ('%s' is owned by someone else)\n"
+"To add an exception for this directory, call:\n"
+"\n"
+"\tgit config --global --add safe.directory %s"
+msgstr ""
+
+#: setup.c:1502
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
 "The owner of files must always have read and write permissions."
 msgstr ""
 
-#: setup.c:1508
+#: setup.c:1564
 msgid "fork failed"
 msgstr ""
 
-#: setup.c:1513
+#: setup.c:1569
 msgid "setsid failed"
 msgstr ""
 
-#: sparse-index.c:289
+#: sparse-index.c:285
 #, c-format
 msgid "index entry is a directory, but not sparse (%08x)"
 msgstr ""
 
+#: split-index.c:9
+msgid "cannot use split index with a sparse index"
+msgstr ""
+
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:850
+#: strbuf.c:851
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:852
+#: strbuf.c:853
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:860
+#: strbuf.c:861
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:862
+#: strbuf.c:863
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:869
+#: strbuf.c:870
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:871
+#: strbuf.c:872
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:877
+#: strbuf.c:878
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -8125,207 +8340,217 @@ msgstr[0] ""
 msgstr[1] ""
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:879
+#: strbuf.c:880
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
 msgstr[0] ""
 msgstr[1] ""
 
-#: strbuf.c:1186 wrapper.c:207 wrapper.c:377 builtin/am.c:765
-#: builtin/rebase.c:650
+#: strbuf.c:1187 wrapper.c:217 wrapper.c:387 builtin/am.c:766
+#: builtin/rebase.c:653
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr ""
 
-#: strbuf.c:1195
+#: strbuf.c:1196
 #, c-format
 msgid "could not edit '%s'"
 msgstr ""
 
-#: submodule-config.c:237
+#: submodule-config.c:238
 #, c-format
 msgid "ignoring suspicious submodule name: %s"
 msgstr ""
 
-#: submodule-config.c:304
+#: submodule-config.c:305
 msgid "negative values not allowed for submodule.fetchjobs"
 msgstr ""
 
-#: submodule-config.c:402
+#: submodule-config.c:403
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr ""
 
-#: submodule-config.c:499
+#: submodule-config.c:500 builtin/push.c:489 builtin/send-pack.c:148
 #, c-format
-msgid "invalid value for %s"
+msgid "invalid value for '%s'"
 msgstr ""
 
-#: submodule-config.c:767
+#: submodule-config.c:828
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr ""
 
-#: submodule.c:114 submodule.c:143
+#: submodule.c:115 submodule.c:144
 msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
 msgstr ""
 
-#: submodule.c:118 submodule.c:147
+#: submodule.c:119 submodule.c:148
 #, c-format
 msgid "Could not find section in .gitmodules where path=%s"
 msgstr ""
 
-#: submodule.c:154
+#: submodule.c:155
 #, c-format
 msgid "Could not remove .gitmodules entry for %s"
 msgstr ""
 
-#: submodule.c:165
+#: submodule.c:166
 msgid "staging updated .gitmodules failed"
 msgstr ""
 
-#: submodule.c:358
+#: submodule.c:346
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr ""
 
-#: submodule.c:389
+#: submodule.c:377
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr ""
 
-#: submodule.c:466
+#: submodule.c:454
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr ""
 
-#: submodule.c:844
+#: submodule.c:866
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
 "same. Skipping it."
 msgstr ""
 
-#: submodule.c:954
+#: submodule.c:987
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr ""
 
-#: submodule.c:1042
+#: submodule.c:1069
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
 "submodule %s"
 msgstr ""
 
-#: submodule.c:1165
+#: submodule.c:1192
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr ""
 
-#: submodule.c:1194 builtin/branch.c:699 builtin/submodule--helper.c:2714
+#: submodule.c:1221 builtin/branch.c:714 builtin/submodule--helper.c:2827
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr ""
 
-#: submodule.c:1205
+#: submodule.c:1232
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr ""
 
-#: submodule.c:1208
+#: submodule.c:1235
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr ""
 
-#: submodule.c:1491
+#: submodule.c:1567
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr ""
 
-#: submodule.c:1525
+#: submodule.c:1589
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr ""
 
-#: submodule.c:1680
+#: submodule.c:1618
+#, c-format
+msgid "Could not access submodule '%s' at commit %s\n"
+msgstr ""
+
+#: submodule.c:1629
+#, c-format
+msgid "Fetching submodule %s%s at commit %s\n"
+msgstr ""
+
+#: submodule.c:1849
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
 "%s"
 msgstr ""
 
-#: submodule.c:1705
+#: submodule.c:1874
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr ""
 
-#: submodule.c:1722
+#: submodule.c:1891
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr ""
 
-#: submodule.c:1763
+#: submodule.c:1932
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr ""
 
-#: submodule.c:1838
+#: submodule.c:2007
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr ""
 
-#: submodule.c:1851
+#: submodule.c:2020
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr ""
 
-#: submodule.c:1868
+#: submodule.c:2037
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr ""
 
-#: submodule.c:1895 submodule.c:2210
+#: submodule.c:2064 submodule.c:2379
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr ""
 
-#: submodule.c:1917
+#: submodule.c:2086
 msgid "could not reset submodule index"
 msgstr ""
 
-#: submodule.c:1959
+#: submodule.c:2128
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr ""
 
-#: submodule.c:2013
+#: submodule.c:2182
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr ""
 
-#: submodule.c:2081
+#: submodule.c:2250
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr ""
 
-#: submodule.c:2102
+#: submodule.c:2271
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
 msgstr ""
 
-#: submodule.c:2114 submodule.c:2174
+#: submodule.c:2283 submodule.c:2343
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr ""
 
-#: submodule.c:2118
+#: submodule.c:2287
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr ""
 
-#: submodule.c:2124
+#: submodule.c:2293
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -8333,11 +8558,11 @@ msgid ""
 "'%s'\n"
 msgstr ""
 
-#: submodule.c:2255
+#: submodule.c:2424
 msgid "could not start ls-files in .."
 msgstr ""
 
-#: submodule.c:2295
+#: submodule.c:2464
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr ""
@@ -8358,8 +8583,8 @@ msgstr ""
 msgid "unknown value '%s' for key '%s'"
 msgstr ""
 
-#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
-#: builtin/remote.c:327
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:300
+#: builtin/remote.c:328
 #, c-format
 msgid "more than one %s"
 msgstr ""
@@ -8374,11 +8599,11 @@ msgstr ""
 msgid "could not read input file '%s'"
 msgstr ""
 
-#: trailer.c:766 builtin/mktag.c:89 imap-send.c:1573
+#: trailer.c:766 builtin/mktag.c:88 imap-send.c:1563
 msgid "could not read from stdin"
 msgstr ""
 
-#: trailer.c:1024 wrapper.c:684
+#: trailer.c:1024 wrapper.c:760
 #, c-format
 msgid "could not stat %s"
 msgstr ""
@@ -8444,7 +8669,7 @@ msgstr ""
 msgid "error while running fast-import"
 msgstr ""
 
-#: transport-helper.c:549 transport-helper.c:1251
+#: transport-helper.c:549 transport-helper.c:1254
 #, c-format
 msgid "could not read ref %s"
 msgstr ""
@@ -8462,7 +8687,7 @@ msgstr ""
 msgid "invalid remote service path"
 msgstr ""
 
-#: transport-helper.c:661 transport.c:1479
+#: transport-helper.c:661 transport.c:1496
 msgid "operation not supported by protocol"
 msgstr ""
 
@@ -8471,124 +8696,124 @@ msgstr ""
 msgid "can't connect to subservice %s"
 msgstr ""
 
-#: transport-helper.c:693 transport.c:404
+#: transport-helper.c:693 transport.c:415
 msgid "--negotiate-only requires protocol v2"
 msgstr ""
 
-#: transport-helper.c:755
+#: transport-helper.c:758
 msgid "'option' without a matching 'ok/error' directive"
 msgstr ""
 
-#: transport-helper.c:798
+#: transport-helper.c:801
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr ""
 
-#: transport-helper.c:859
+#: transport-helper.c:862
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr ""
 
-#: transport-helper.c:942
+#: transport-helper.c:945
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr ""
 
-#: transport-helper.c:945
+#: transport-helper.c:948
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr ""
 
-#: transport-helper.c:948
+#: transport-helper.c:951
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr ""
 
-#: transport-helper.c:953
+#: transport-helper.c:956
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr ""
 
-#: transport-helper.c:957
+#: transport-helper.c:960
 #, c-format
 msgid "helper %s does not support --%s"
 msgstr ""
 
-#: transport-helper.c:964
+#: transport-helper.c:967
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr ""
 
-#: transport-helper.c:1064
+#: transport-helper.c:1067
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr ""
 
-#: transport-helper.c:1069
+#: transport-helper.c:1072
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr ""
 
-#: transport-helper.c:1116
+#: transport-helper.c:1119
 msgid "couldn't run fast-export"
 msgstr ""
 
-#: transport-helper.c:1121
+#: transport-helper.c:1124
 msgid "error while running fast-export"
 msgstr ""
 
-#: transport-helper.c:1146
+#: transport-helper.c:1149
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
 "Perhaps you should specify a branch.\n"
 msgstr ""
 
-#: transport-helper.c:1228
+#: transport-helper.c:1231
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr ""
 
-#: transport-helper.c:1237
+#: transport-helper.c:1240
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr ""
 
-#: transport-helper.c:1389
+#: transport-helper.c:1392
 #, c-format
 msgid "read(%s) failed"
 msgstr ""
 
-#: transport-helper.c:1416
+#: transport-helper.c:1419
 #, c-format
 msgid "write(%s) failed"
 msgstr ""
 
-#: transport-helper.c:1465
+#: transport-helper.c:1468
 #, c-format
 msgid "%s thread failed"
 msgstr ""
 
-#: transport-helper.c:1469
+#: transport-helper.c:1472
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr ""
 
-#: transport-helper.c:1488 transport-helper.c:1492
+#: transport-helper.c:1491 transport-helper.c:1495
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr ""
 
-#: transport-helper.c:1529
+#: transport-helper.c:1532
 #, c-format
 msgid "%s process failed to wait"
 msgstr ""
 
-#: transport-helper.c:1533
+#: transport-helper.c:1536
 #, c-format
 msgid "%s process failed"
 msgstr ""
 
-#: transport-helper.c:1551 transport-helper.c:1560
+#: transport-helper.c:1554 transport-helper.c:1563
 msgid "can't start thread for copying data"
 msgstr ""
 
@@ -8597,58 +8822,58 @@ msgstr ""
 msgid "Would set upstream of '%s' to '%s' of '%s'\n"
 msgstr ""
 
-#: transport.c:145
+#: transport.c:138
 #, c-format
 msgid "could not read bundle '%s'"
 msgstr ""
 
-#: transport.c:227
+#: transport.c:234
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr ""
 
-#: transport.c:279
+#: transport.c:289
 msgid "see protocol.version in 'git help config' for more details"
 msgstr ""
 
-#: transport.c:280
+#: transport.c:290
 msgid "server options require protocol version 2 or later"
 msgstr ""
 
-#: transport.c:407
+#: transport.c:418
 msgid "server does not support wait-for-done"
 msgstr ""
 
-#: transport.c:759
+#: transport.c:770
 msgid "could not parse transport.color.* config"
 msgstr ""
 
-#: transport.c:834
+#: transport.c:845
 msgid "support for protocol v2 not implemented yet"
 msgstr ""
 
-#: transport.c:967
+#: transport.c:978
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr ""
 
-#: transport.c:1033
+#: transport.c:1044
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr ""
 
-#: transport.c:1082
+#: transport.c:1093
 msgid "git-over-rsync is no longer supported"
 msgstr ""
 
-#: transport.c:1185
+#: transport.c:1196
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
 "not be found on any remote:\n"
 msgstr ""
 
-#: transport.c:1189
+#: transport.c:1200
 #, c-format
 msgid ""
 "\n"
@@ -8664,11 +8889,11 @@ msgid ""
 "\n"
 msgstr ""
 
-#: transport.c:1197
+#: transport.c:1208
 msgid "Aborting."
 msgstr ""
 
-#: transport.c:1343
+#: transport.c:1354
 msgid "failed to push all needed submodules"
 msgstr ""
 
@@ -8888,16 +9113,16 @@ msgid ""
 "colliding group is in the working tree:\n"
 msgstr ""
 
-#: unpack-trees.c:1636
+#: unpack-trees.c:1664
 msgid "Updating index flags"
 msgstr ""
 
-#: unpack-trees.c:2803
+#: unpack-trees.c:2925
 #, c-format
 msgid "worktree and untracked commit have duplicate entries: %s"
 msgstr ""
 
-#: upload-pack.c:1565
+#: upload-pack.c:1579
 msgid "expected flush after fetch arguments"
 msgstr ""
 
@@ -8934,123 +9159,137 @@ msgstr ""
 msgid "Fetching objects"
 msgstr ""
 
-#: worktree.c:238 builtin/am.c:2209 builtin/bisect--helper.c:156
+#: worktree.c:237 builtin/am.c:2210 builtin/bisect--helper.c:156
 #, c-format
 msgid "failed to read '%s'"
 msgstr ""
 
-#: worktree.c:305
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr ""
 
-#: worktree.c:316
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr ""
 
-#: worktree.c:328
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr ""
 
-#: worktree.c:334
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr ""
 
-#: worktree.c:343
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr ""
 
-#: worktree.c:604
+#: worktree.c:600
 msgid "not a directory"
 msgstr ""
 
-#: worktree.c:613
+#: worktree.c:609
 msgid ".git is not a file"
 msgstr ""
 
-#: worktree.c:615
+#: worktree.c:611
 msgid ".git file broken"
 msgstr ""
 
-#: worktree.c:617
+#: worktree.c:613
 msgid ".git file incorrect"
 msgstr ""
 
-#: worktree.c:723
+#: worktree.c:719
 msgid "not a valid path"
 msgstr ""
 
-#: worktree.c:729
+#: worktree.c:725
 msgid "unable to locate repository; .git is not a file"
 msgstr ""
 
-#: worktree.c:733
+#: worktree.c:729
 msgid "unable to locate repository; .git file does not reference a repository"
 msgstr ""
 
-#: worktree.c:737
+#: worktree.c:733
 msgid "unable to locate repository; .git file broken"
 msgstr ""
 
-#: worktree.c:743
+#: worktree.c:739
 msgid "gitdir unreadable"
 msgstr ""
 
-#: worktree.c:747
+#: worktree.c:743
 msgid "gitdir incorrect"
 msgstr ""
 
-#: worktree.c:772
+#: worktree.c:768
 msgid "not a valid directory"
 msgstr ""
 
-#: worktree.c:778
+#: worktree.c:774
 msgid "gitdir file does not exist"
 msgstr ""
 
-#: worktree.c:783 worktree.c:792
+#: worktree.c:779 worktree.c:788
 #, c-format
 msgid "unable to read gitdir file (%s)"
 msgstr ""
 
-#: worktree.c:802
+#: worktree.c:798
 #, c-format
 msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
 msgstr ""
 
-#: worktree.c:810
+#: worktree.c:806
 msgid "invalid gitdir file"
 msgstr ""
 
-#: worktree.c:818
+#: worktree.c:814
 msgid "gitdir file points to non-existent location"
 msgstr ""
 
-#: wrapper.c:151
+#: worktree.c:830
+#, c-format
+msgid "unable to set %s in '%s'"
+msgstr ""
+
+#: worktree.c:832
+#, c-format
+msgid "unable to unset %s in '%s'"
+msgstr ""
+
+#: worktree.c:852
+msgid "failed to set extensions.worktreeConfig setting"
+msgstr ""
+
+#: wrapper.c:161
 #, c-format
 msgid "could not setenv '%s'"
 msgstr ""
 
-#: wrapper.c:203
+#: wrapper.c:213
 #, c-format
 msgid "unable to create '%s'"
 msgstr ""
 
-#: wrapper.c:205 wrapper.c:375
+#: wrapper.c:215 wrapper.c:385
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr ""
 
-#: wrapper.c:406 wrapper.c:607
+#: wrapper.c:416 wrapper.c:683
 #, c-format
 msgid "unable to access '%s'"
 msgstr ""
 
-#: wrapper.c:615
+#: wrapper.c:691
 msgid "unable to get current working directory"
 msgstr ""
 
@@ -9083,11 +9322,11 @@ msgstr ""
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr ""
 
-#: wt-status.c:211 wt-status.c:1131
+#: wt-status.c:211 wt-status.c:1140
 msgid "Changes to be committed:"
 msgstr ""
 
-#: wt-status.c:234 wt-status.c:1140
+#: wt-status.c:234 wt-status.c:1149
 msgid "Changes not staged for commit:"
 msgstr ""
 
@@ -9185,28 +9424,28 @@ msgstr ""
 msgid "untracked content, "
 msgstr ""
 
-#: wt-status.c:964
+#: wt-status.c:973
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] ""
 msgstr[1] ""
 
-#: wt-status.c:995
+#: wt-status.c:1004
 msgid "Submodules changed but not updated:"
 msgstr ""
 
-#: wt-status.c:997
+#: wt-status.c:1006
 msgid "Submodule changes to be committed:"
 msgstr ""
 
-#: wt-status.c:1079
+#: wt-status.c:1088
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
 msgstr ""
 
-#: wt-status.c:1171
+#: wt-status.c:1180
 #, c-format
 msgid ""
 "\n"
@@ -9214,264 +9453,264 @@ msgid ""
 "You can use '--no-ahead-behind' to avoid this.\n"
 msgstr ""
 
-#: wt-status.c:1201
+#: wt-status.c:1210
 msgid "You have unmerged paths."
 msgstr ""
 
-#: wt-status.c:1204
+#: wt-status.c:1213
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr ""
 
-#: wt-status.c:1206
+#: wt-status.c:1215
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr ""
 
-#: wt-status.c:1210
+#: wt-status.c:1219
 msgid "All conflicts fixed but you are still merging."
 msgstr ""
 
-#: wt-status.c:1213
+#: wt-status.c:1222
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr ""
 
-#: wt-status.c:1224
+#: wt-status.c:1233
 msgid "You are in the middle of an am session."
 msgstr ""
 
-#: wt-status.c:1227
+#: wt-status.c:1236
 msgid "The current patch is empty."
 msgstr ""
 
-#: wt-status.c:1232
+#: wt-status.c:1241
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr ""
 
-#: wt-status.c:1234
+#: wt-status.c:1243
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr ""
 
-#: wt-status.c:1237
+#: wt-status.c:1246
 msgid ""
 "  (use \"git am --allow-empty\" to record this patch as an empty commit)"
 msgstr ""
 
-#: wt-status.c:1239
+#: wt-status.c:1248
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr ""
 
-#: wt-status.c:1372
+#: wt-status.c:1381
 msgid "git-rebase-todo is missing."
 msgstr ""
 
-#: wt-status.c:1374
+#: wt-status.c:1383
 msgid "No commands done."
 msgstr ""
 
-#: wt-status.c:1377
+#: wt-status.c:1386
 #, c-format
-msgid "Last command done (%d command done):"
-msgid_plural "Last commands done (%d commands done):"
+msgid "Last command done (%<PRIuMAX> command done):"
+msgid_plural "Last commands done (%<PRIuMAX> commands done):"
 msgstr[0] ""
 msgstr[1] ""
 
-#: wt-status.c:1388
+#: wt-status.c:1397
 #, c-format
 msgid "  (see more in file %s)"
 msgstr ""
 
-#: wt-status.c:1393
+#: wt-status.c:1402
 msgid "No commands remaining."
 msgstr ""
 
-#: wt-status.c:1396
+#: wt-status.c:1405
 #, c-format
-msgid "Next command to do (%d remaining command):"
-msgid_plural "Next commands to do (%d remaining commands):"
+msgid "Next command to do (%<PRIuMAX> remaining command):"
+msgid_plural "Next commands to do (%<PRIuMAX> remaining commands):"
 msgstr[0] ""
 msgstr[1] ""
 
-#: wt-status.c:1404
+#: wt-status.c:1413
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr ""
 
-#: wt-status.c:1416
+#: wt-status.c:1425
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr ""
 
-#: wt-status.c:1421
+#: wt-status.c:1430
 msgid "You are currently rebasing."
 msgstr ""
 
-#: wt-status.c:1434
+#: wt-status.c:1443
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr ""
 
-#: wt-status.c:1436
+#: wt-status.c:1445
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr ""
 
-#: wt-status.c:1438
+#: wt-status.c:1447
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr ""
 
-#: wt-status.c:1445
+#: wt-status.c:1454
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr ""
 
-#: wt-status.c:1449
+#: wt-status.c:1458
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
 msgstr ""
 
-#: wt-status.c:1454
+#: wt-status.c:1463
 msgid "You are currently splitting a commit during a rebase."
 msgstr ""
 
-#: wt-status.c:1457
+#: wt-status.c:1466
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr ""
 
-#: wt-status.c:1461
+#: wt-status.c:1470
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr ""
 
-#: wt-status.c:1466
+#: wt-status.c:1475
 msgid "You are currently editing a commit during a rebase."
 msgstr ""
 
-#: wt-status.c:1469
+#: wt-status.c:1478
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr ""
 
-#: wt-status.c:1471
+#: wt-status.c:1480
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr ""
 
-#: wt-status.c:1482
+#: wt-status.c:1491
 msgid "Cherry-pick currently in progress."
 msgstr ""
 
-#: wt-status.c:1485
+#: wt-status.c:1494
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr ""
 
-#: wt-status.c:1492
+#: wt-status.c:1501
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr ""
 
-#: wt-status.c:1495
+#: wt-status.c:1504
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr ""
 
-#: wt-status.c:1498
+#: wt-status.c:1507
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr ""
 
-#: wt-status.c:1500
+#: wt-status.c:1509
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr ""
 
-#: wt-status.c:1502
+#: wt-status.c:1511
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr ""
 
-#: wt-status.c:1512
+#: wt-status.c:1521
 msgid "Revert currently in progress."
 msgstr ""
 
-#: wt-status.c:1515
+#: wt-status.c:1524
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr ""
 
-#: wt-status.c:1521
+#: wt-status.c:1530
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr ""
 
-#: wt-status.c:1524
+#: wt-status.c:1533
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr ""
 
-#: wt-status.c:1527
+#: wt-status.c:1536
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr ""
 
-#: wt-status.c:1529
+#: wt-status.c:1538
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr ""
 
-#: wt-status.c:1531
+#: wt-status.c:1540
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr ""
 
-#: wt-status.c:1541
+#: wt-status.c:1550
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr ""
 
-#: wt-status.c:1545
+#: wt-status.c:1554
 msgid "You are currently bisecting."
 msgstr ""
 
-#: wt-status.c:1548
+#: wt-status.c:1557
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr ""
 
-#: wt-status.c:1559
+#: wt-status.c:1568
 msgid "You are in a sparse checkout."
 msgstr ""
 
-#: wt-status.c:1562
+#: wt-status.c:1571
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
 msgstr ""
 
-#: wt-status.c:1806
+#: wt-status.c:1815
 msgid "On branch "
 msgstr ""
 
-#: wt-status.c:1813
+#: wt-status.c:1822
 msgid "interactive rebase in progress; onto "
 msgstr ""
 
-#: wt-status.c:1815
+#: wt-status.c:1824
 msgid "rebase in progress; onto "
 msgstr ""
 
-#: wt-status.c:1820
+#: wt-status.c:1829
 msgid "HEAD detached at "
 msgstr ""
 
-#: wt-status.c:1822
+#: wt-status.c:1831
 msgid "HEAD detached from "
 msgstr ""
 
-#: wt-status.c:1825
+#: wt-status.c:1834
 msgid "Not currently on any branch."
 msgstr ""
 
-#: wt-status.c:1842
+#: wt-status.c:1851
 msgid "Initial commit"
 msgstr ""
 
-#: wt-status.c:1843
+#: wt-status.c:1852
 msgid "No commits yet"
 msgstr ""
 
-#: wt-status.c:1857
+#: wt-status.c:1866
 msgid "Untracked files"
 msgstr ""
 
-#: wt-status.c:1859
+#: wt-status.c:1868
 msgid "Ignored files"
 msgstr ""
 
-#: wt-status.c:1863
+#: wt-status.c:1872
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -9479,92 +9718,92 @@ msgid ""
 "new files yourself (see 'git help status')."
 msgstr ""
 
-#: wt-status.c:1869
+#: wt-status.c:1878
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr ""
 
-#: wt-status.c:1871
+#: wt-status.c:1880
 msgid " (use -u option to show untracked files)"
 msgstr ""
 
-#: wt-status.c:1877
+#: wt-status.c:1886
 msgid "No changes"
 msgstr ""
 
-#: wt-status.c:1882
+#: wt-status.c:1891
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 
-#: wt-status.c:1886
+#: wt-status.c:1895
 #, c-format
 msgid "no changes added to commit\n"
 msgstr ""
 
-#: wt-status.c:1890
+#: wt-status.c:1899
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
 "track)\n"
 msgstr ""
 
-#: wt-status.c:1894
+#: wt-status.c:1903
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr ""
 
-#: wt-status.c:1898
+#: wt-status.c:1907
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 
-#: wt-status.c:1902 wt-status.c:1908
+#: wt-status.c:1911 wt-status.c:1917
 #, c-format
 msgid "nothing to commit\n"
 msgstr ""
 
-#: wt-status.c:1905
+#: wt-status.c:1914
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr ""
 
-#: wt-status.c:1910
+#: wt-status.c:1919
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr ""
 
-#: wt-status.c:2015
+#: wt-status.c:2024
 msgid "No commits yet on "
 msgstr ""
 
-#: wt-status.c:2019
+#: wt-status.c:2028
 msgid "HEAD (no branch)"
 msgstr ""
 
-#: wt-status.c:2050
+#: wt-status.c:2059
 msgid "different"
 msgstr ""
 
-#: wt-status.c:2052 wt-status.c:2060
+#: wt-status.c:2061 wt-status.c:2069
 msgid "behind "
 msgstr ""
 
-#: wt-status.c:2055 wt-status.c:2058
+#: wt-status.c:2064 wt-status.c:2067
 msgid "ahead "
 msgstr ""
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2596
+#: wt-status.c:2605
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr ""
 
-#: wt-status.c:2602
+#: wt-status.c:2611
 msgid "additionally, your index contains uncommitted changes."
 msgstr ""
 
-#: wt-status.c:2604
+#: wt-status.c:2613
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr ""
@@ -9587,145 +9826,149 @@ msgstr ""
 msgid "could not start worker[0] for '%s'"
 msgstr ""
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:347
+#: compat/precompose_utf8.c:58 builtin/clone.c:353
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr ""
 
+#: compat/fsmonitor/fsm-listen-darwin.c:355
+msgid "Unable to create FSEventStream."
+msgstr ""
+
+#: compat/fsmonitor/fsm-listen-darwin.c:403
+msgid "Failed to start the FSEventStream"
+msgstr ""
+
 #: builtin/add.c:26
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr ""
 
-#: builtin/add.c:64
+#: builtin/add.c:63
 #, c-format
 msgid "cannot chmod %cx '%s'"
 msgstr ""
 
-#: builtin/add.c:106
+#: builtin/add.c:105
 #, c-format
 msgid "unexpected diff status %c"
 msgstr ""
 
-#: builtin/add.c:111 builtin/commit.c:298
+#: builtin/add.c:110 builtin/commit.c:299
 msgid "updating files failed"
 msgstr ""
 
-#: builtin/add.c:121
+#: builtin/add.c:120
 #, c-format
 msgid "remove '%s'\n"
 msgstr ""
 
-#: builtin/add.c:205
+#: builtin/add.c:204
 msgid "Unstaged changes after refreshing the index:"
 msgstr ""
 
-#: builtin/add.c:313 builtin/rev-parse.c:993
+#: builtin/add.c:312 builtin/rev-parse.c:993
 msgid "Could not read the index"
 msgstr ""
 
-#: builtin/add.c:326
+#: builtin/add.c:325
 msgid "Could not write patch"
 msgstr ""
 
-#: builtin/add.c:329
+#: builtin/add.c:328
 msgid "editing patch failed"
 msgstr ""
 
-#: builtin/add.c:332
+#: builtin/add.c:331
 #, c-format
 msgid "Could not stat '%s'"
 msgstr ""
 
-#: builtin/add.c:334
+#: builtin/add.c:333
 msgid "Empty patch. Aborted."
 msgstr ""
 
-#: builtin/add.c:340
+#: builtin/add.c:339
 #, c-format
 msgid "Could not apply '%s'"
 msgstr ""
 
-#: builtin/add.c:348
+#: builtin/add.c:347
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr ""
 
-#: builtin/add.c:368 builtin/clean.c:927 builtin/fetch.c:174 builtin/mv.c:124
+#: builtin/add.c:367 builtin/clean.c:927 builtin/fetch.c:175 builtin/mv.c:124
 #: builtin/prune-packed.c:14 builtin/pull.c:208 builtin/push.c:550
-#: builtin/remote.c:1429 builtin/rm.c:244 builtin/send-pack.c:194
+#: builtin/remote.c:1454 builtin/rm.c:244 builtin/send-pack.c:194
 msgid "dry run"
 msgstr ""
 
-#: builtin/add.c:369 builtin/check-ignore.c:22 builtin/commit.c:1484
-#: builtin/count-objects.c:98 builtin/fsck.c:789 builtin/log.c:2313
+#: builtin/add.c:368 builtin/check-ignore.c:22 builtin/commit.c:1483
+#: builtin/count-objects.c:98 builtin/fsck.c:789 builtin/log.c:2338
 #: builtin/mv.c:123 builtin/read-tree.c:120
 msgid "be verbose"
 msgstr ""
 
-#: builtin/add.c:371
+#: builtin/add.c:370
 msgid "interactive picking"
 msgstr ""
 
-#: builtin/add.c:372 builtin/checkout.c:1581 builtin/reset.c:409
+#: builtin/add.c:371 builtin/checkout.c:1599 builtin/reset.c:417
 msgid "select hunks interactively"
 msgstr ""
 
-#: builtin/add.c:373
+#: builtin/add.c:372
 msgid "edit current diff and apply"
 msgstr ""
 
-#: builtin/add.c:374
+#: builtin/add.c:373
 msgid "allow adding otherwise ignored files"
 msgstr ""
 
-#: builtin/add.c:375
+#: builtin/add.c:374
 msgid "update tracked files"
 msgstr ""
 
-#: builtin/add.c:376
+#: builtin/add.c:375
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr ""
 
-#: builtin/add.c:377
+#: builtin/add.c:376
 msgid "record only the fact that the path will be added later"
 msgstr ""
 
-#: builtin/add.c:378
+#: builtin/add.c:377
 msgid "add changes from all tracked and untracked files"
 msgstr ""
 
-#: builtin/add.c:381
+#: builtin/add.c:380
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr ""
 
-#: builtin/add.c:383
+#: builtin/add.c:382
 msgid "don't add, only refresh the index"
 msgstr ""
 
-#: builtin/add.c:384
+#: builtin/add.c:383
 msgid "just skip files which cannot be added because of errors"
 msgstr ""
 
-#: builtin/add.c:385
+#: builtin/add.c:384
 msgid "check if - even missing - files are ignored in dry run"
 msgstr ""
 
-#: builtin/add.c:386 builtin/mv.c:128 builtin/rm.c:251
+#: builtin/add.c:385 builtin/mv.c:128 builtin/rm.c:251
 msgid "allow updating entries outside of the sparse-checkout cone"
 msgstr ""
 
-#: builtin/add.c:388 builtin/update-index.c:1004
+#: builtin/add.c:387 builtin/update-index.c:1023
 msgid "override the executable bit of the listed files"
 msgstr ""
 
-#: builtin/add.c:390
+#: builtin/add.c:389
 msgid "warn when adding an embedded repository"
 msgstr ""
 
-#: builtin/add.c:392
-msgid "backend for `git stash -p`"
-msgstr ""
-
-#: builtin/add.c:410
+#: builtin/add.c:407
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -9743,173 +9986,168 @@ msgid ""
 "See \"git help submodule\" for more information."
 msgstr ""
 
-#: builtin/add.c:439
+#: builtin/add.c:436
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr ""
 
-#: builtin/add.c:459
+#: builtin/add.c:456
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
 "\"git config advice.addIgnoredFile false\""
 msgstr ""
 
-#: builtin/add.c:474
+#: builtin/add.c:471
 msgid "adding files failed"
 msgstr ""
 
-#: builtin/add.c:548
+#: builtin/add.c:534
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr ""
 
-#: builtin/add.c:569 builtin/checkout.c:1751 builtin/commit.c:364
-#: builtin/reset.c:429 builtin/rm.c:275 builtin/stash.c:1713
+#: builtin/add.c:555 builtin/checkout.c:1770 builtin/commit.c:365
+#: builtin/reset.c:436 builtin/rm.c:275 builtin/stash.c:1702
 #, c-format
 msgid "'%s' and pathspec arguments cannot be used together"
 msgstr ""
 
-#: builtin/add.c:580
+#: builtin/add.c:566
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr ""
 
-#: builtin/add.c:582
+#: builtin/add.c:568
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
 "\"git config advice.addEmptyPathspec false\""
 msgstr ""
 
-#: builtin/am.c:202
-#, c-format
-msgid "Invalid value for --empty: %s"
-msgstr ""
-
-#: builtin/am.c:392
+#: builtin/am.c:393
 msgid "could not parse author script"
 msgstr ""
 
-#: builtin/am.c:482
+#: builtin/am.c:483
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr ""
 
-#: builtin/am.c:524
+#: builtin/am.c:525
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr ""
 
-#: builtin/am.c:562
+#: builtin/am.c:563
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr ""
 
-#: builtin/am.c:588
+#: builtin/am.c:589
 msgid "fseek failed"
 msgstr ""
 
-#: builtin/am.c:776
+#: builtin/am.c:777
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr ""
 
-#: builtin/am.c:841
+#: builtin/am.c:842
 msgid "Only one StGIT patch series can be applied at once"
 msgstr ""
 
-#: builtin/am.c:889
+#: builtin/am.c:890
 msgid "invalid timestamp"
 msgstr ""
 
-#: builtin/am.c:894 builtin/am.c:906
+#: builtin/am.c:895 builtin/am.c:907
 msgid "invalid Date line"
 msgstr ""
 
-#: builtin/am.c:901
+#: builtin/am.c:902
 msgid "invalid timezone offset"
 msgstr ""
 
-#: builtin/am.c:994
+#: builtin/am.c:995
 msgid "Patch format detection failed."
 msgstr ""
 
-#: builtin/am.c:999 builtin/clone.c:300
+#: builtin/am.c:1000 builtin/clone.c:306
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr ""
 
-#: builtin/am.c:1004
+#: builtin/am.c:1005
 msgid "Failed to split patches."
 msgstr ""
 
-#: builtin/am.c:1153
+#: builtin/am.c:1154
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr ""
 
-#: builtin/am.c:1154
+#: builtin/am.c:1155
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr ""
 
-#: builtin/am.c:1159
+#: builtin/am.c:1160
 #, c-format
 msgid "To record the empty patch as an empty commit, run \"%s --allow-empty\"."
 msgstr ""
 
-#: builtin/am.c:1161
+#: builtin/am.c:1162
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr ""
 
-#: builtin/am.c:1256
+#: builtin/am.c:1257
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 
-#: builtin/am.c:1344
+#: builtin/am.c:1345
 #, c-format
 msgid "missing author line in commit %s"
 msgstr ""
 
-#: builtin/am.c:1347
+#: builtin/am.c:1348
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr ""
 
-#: builtin/am.c:1566
+#: builtin/am.c:1567
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 
-#: builtin/am.c:1568
+#: builtin/am.c:1569
 msgid "Using index info to reconstruct a base tree..."
 msgstr ""
 
-#: builtin/am.c:1587
+#: builtin/am.c:1588
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
 msgstr ""
 
-#: builtin/am.c:1593
+#: builtin/am.c:1594
 msgid "Falling back to patching base and 3-way merge..."
 msgstr ""
 
-#: builtin/am.c:1619
+#: builtin/am.c:1620
 msgid "Failed to merge in the changes."
 msgstr ""
 
-#: builtin/am.c:1651
+#: builtin/am.c:1652
 msgid "applying to an empty history"
 msgstr ""
 
-#: builtin/am.c:1703 builtin/am.c:1707
+#: builtin/am.c:1704 builtin/am.c:1708
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr ""
 
-#: builtin/am.c:1725
+#: builtin/am.c:1726
 msgid "Commit Body is:"
 msgstr ""
 
@@ -9917,64 +10155,64 @@ msgstr ""
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1735
+#: builtin/am.c:1736
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr ""
 
-#: builtin/am.c:1781 builtin/commit.c:409
+#: builtin/am.c:1782 builtin/commit.c:410
 msgid "unable to write index file"
 msgstr ""
 
-#: builtin/am.c:1785
+#: builtin/am.c:1786
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr ""
 
-#: builtin/am.c:1827
+#: builtin/am.c:1828
 #, c-format
 msgid "Skipping: %.*s"
 msgstr ""
 
-#: builtin/am.c:1832
+#: builtin/am.c:1833
 #, c-format
 msgid "Creating an empty commit: %.*s"
 msgstr ""
 
-#: builtin/am.c:1836
+#: builtin/am.c:1837
 msgid "Patch is empty."
 msgstr ""
 
-#: builtin/am.c:1847 builtin/am.c:1916
+#: builtin/am.c:1848 builtin/am.c:1917
 #, c-format
 msgid "Applying: %.*s"
 msgstr ""
 
-#: builtin/am.c:1864
+#: builtin/am.c:1865
 msgid "No changes -- Patch already applied."
 msgstr ""
 
-#: builtin/am.c:1870
+#: builtin/am.c:1871
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr ""
 
-#: builtin/am.c:1874
+#: builtin/am.c:1875
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr ""
 
-#: builtin/am.c:1920
+#: builtin/am.c:1921
 msgid "No changes - recorded it as an empty commit."
 msgstr ""
 
-#: builtin/am.c:1922
+#: builtin/am.c:1923
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
 "already introduced the same changes; you might want to skip this patch."
 msgstr ""
 
-#: builtin/am.c:1930
+#: builtin/am.c:1931
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -9982,209 +10220,200 @@ msgid ""
 "You might run `git rm` on a file to accept \"deleted by them\" for it."
 msgstr ""
 
-#: builtin/am.c:2038 builtin/am.c:2042 builtin/am.c:2054 builtin/reset.c:448
-#: builtin/reset.c:456
+#: builtin/am.c:2039 builtin/am.c:2043 builtin/am.c:2055 builtin/reset.c:455
+#: builtin/reset.c:463
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr ""
 
-#: builtin/am.c:2090 builtin/am.c:2166
+#: builtin/am.c:2091 builtin/am.c:2167
 msgid "failed to clean index"
 msgstr ""
 
-#: builtin/am.c:2134
+#: builtin/am.c:2135
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
 msgstr ""
 
-#: builtin/am.c:2242
-#, c-format
-msgid "Invalid value for --patch-format: %s"
-msgstr ""
-
-#: builtin/am.c:2285
-#, c-format
-msgid "Invalid value for --show-current-patch: %s"
-msgstr ""
-
-#: builtin/am.c:2289
+#: builtin/am.c:2292
 #, c-format
 msgid "options '%s=%s' and '%s=%s' cannot be used together"
 msgstr ""
 
-#: builtin/am.c:2320
+#: builtin/am.c:2323
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr ""
 
-#: builtin/am.c:2321
+#: builtin/am.c:2324
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr ""
 
-#: builtin/am.c:2327
+#: builtin/am.c:2330
 msgid "run interactively"
 msgstr ""
 
-#: builtin/am.c:2329
+#: builtin/am.c:2332
 msgid "historical option -- no-op"
 msgstr ""
 
-#: builtin/am.c:2331
+#: builtin/am.c:2334
 msgid "allow fall back on 3way merging if needed"
 msgstr ""
 
-#: builtin/am.c:2332 builtin/init-db.c:547 builtin/prune-packed.c:16
-#: builtin/repack.c:642 builtin/stash.c:962
+#: builtin/am.c:2335 builtin/init-db.c:547 builtin/prune-packed.c:16
+#: builtin/repack.c:646 builtin/stash.c:946
 msgid "be quiet"
 msgstr ""
 
-#: builtin/am.c:2334
+#: builtin/am.c:2337
 msgid "add a Signed-off-by trailer to the commit message"
 msgstr ""
 
-#: builtin/am.c:2337
+#: builtin/am.c:2340
 msgid "recode into utf8 (default)"
 msgstr ""
 
-#: builtin/am.c:2339
+#: builtin/am.c:2342
 msgid "pass -k flag to git-mailinfo"
 msgstr ""
 
-#: builtin/am.c:2341
+#: builtin/am.c:2344
 msgid "pass -b flag to git-mailinfo"
 msgstr ""
 
-#: builtin/am.c:2343
+#: builtin/am.c:2346
 msgid "pass -m flag to git-mailinfo"
 msgstr ""
 
-#: builtin/am.c:2345
+#: builtin/am.c:2348
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr ""
 
-#: builtin/am.c:2348
+#: builtin/am.c:2351
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr ""
 
-#: builtin/am.c:2351
+#: builtin/am.c:2354
 msgid "strip everything before a scissors line"
 msgstr ""
 
-#: builtin/am.c:2353
+#: builtin/am.c:2356
 msgid "pass it through git-mailinfo"
 msgstr ""
 
-#: builtin/am.c:2356 builtin/am.c:2359 builtin/am.c:2362 builtin/am.c:2365
-#: builtin/am.c:2368 builtin/am.c:2371 builtin/am.c:2374 builtin/am.c:2377
-#: builtin/am.c:2383
+#: builtin/am.c:2359 builtin/am.c:2362 builtin/am.c:2365 builtin/am.c:2368
+#: builtin/am.c:2371 builtin/am.c:2374 builtin/am.c:2377 builtin/am.c:2380
+#: builtin/am.c:2386
 msgid "pass it through git-apply"
 msgstr ""
 
-#: builtin/am.c:2373 builtin/commit.c:1515 builtin/fmt-merge-msg.c:18
-#: builtin/fmt-merge-msg.c:21 builtin/grep.c:919 builtin/merge.c:263
+#: builtin/am.c:2376 builtin/commit.c:1514 builtin/fmt-merge-msg.c:18
+#: builtin/fmt-merge-msg.c:21 builtin/grep.c:920 builtin/merge.c:263
 #: builtin/pull.c:142 builtin/pull.c:204 builtin/pull.c:221
-#: builtin/rebase.c:1046 builtin/repack.c:653 builtin/repack.c:657
-#: builtin/repack.c:659 builtin/show-branch.c:649 builtin/show-ref.c:172
-#: builtin/tag.c:445 parse-options.h:154 parse-options.h:175
-#: parse-options.h:317
+#: builtin/rebase.c:1074 builtin/repack.c:657 builtin/repack.c:661
+#: builtin/repack.c:663 builtin/show-branch.c:650 builtin/show-ref.c:172
+#: builtin/tag.c:446 parse-options.h:159 parse-options.h:180
+#: parse-options.h:348
 msgid "n"
 msgstr ""
 
-#: builtin/am.c:2379 builtin/branch.c:680 builtin/bugreport.c:109
-#: builtin/for-each-ref.c:41 builtin/replace.c:555 builtin/tag.c:479
-#: builtin/verify-tag.c:38
+#: builtin/am.c:2382 builtin/branch.c:695 builtin/bugreport.c:109
+#: builtin/cat-file.c:848 builtin/cat-file.c:852 builtin/cat-file.c:856
+#: builtin/for-each-ref.c:41 builtin/ls-tree.c:357 builtin/replace.c:555
+#: builtin/tag.c:480 builtin/verify-tag.c:38
 msgid "format"
 msgstr ""
 
-#: builtin/am.c:2380
+#: builtin/am.c:2383
 msgid "format the patch(es) are in"
 msgstr ""
 
-#: builtin/am.c:2386
+#: builtin/am.c:2389
 msgid "override error message when patch failure occurs"
 msgstr ""
 
-#: builtin/am.c:2388
+#: builtin/am.c:2391
 msgid "continue applying patches after resolving a conflict"
 msgstr ""
 
-#: builtin/am.c:2391
+#: builtin/am.c:2394
 msgid "synonyms for --continue"
 msgstr ""
 
-#: builtin/am.c:2394
+#: builtin/am.c:2397
 msgid "skip the current patch"
 msgstr ""
 
-#: builtin/am.c:2397
+#: builtin/am.c:2400
 msgid "restore the original branch and abort the patching operation"
 msgstr ""
 
-#: builtin/am.c:2400
+#: builtin/am.c:2403
 msgid "abort the patching operation but keep HEAD where it is"
 msgstr ""
 
-#: builtin/am.c:2404
+#: builtin/am.c:2407
 msgid "show the patch being applied"
 msgstr ""
 
-#: builtin/am.c:2408
+#: builtin/am.c:2411
 msgid "record the empty patch as an empty commit"
 msgstr ""
 
-#: builtin/am.c:2412
+#: builtin/am.c:2415
 msgid "lie about committer date"
 msgstr ""
 
-#: builtin/am.c:2414
+#: builtin/am.c:2417
 msgid "use current timestamp for author date"
 msgstr ""
 
-#: builtin/am.c:2416 builtin/commit-tree.c:118 builtin/commit.c:1643
-#: builtin/merge.c:302 builtin/pull.c:179 builtin/rebase.c:1099
-#: builtin/revert.c:117 builtin/tag.c:460
+#: builtin/am.c:2419 builtin/commit-tree.c:118 builtin/commit.c:1642
+#: builtin/merge.c:302 builtin/pull.c:179 builtin/rebase.c:1127
+#: builtin/revert.c:117 builtin/tag.c:461
 msgid "key-id"
 msgstr ""
 
-#: builtin/am.c:2417 builtin/rebase.c:1100
+#: builtin/am.c:2420 builtin/rebase.c:1128
 msgid "GPG-sign commits"
 msgstr ""
 
-#: builtin/am.c:2420
+#: builtin/am.c:2423
 msgid "how to handle empty patches"
 msgstr ""
 
-#: builtin/am.c:2423
+#: builtin/am.c:2426
 msgid "(internal use for git-rebase)"
 msgstr ""
 
-#: builtin/am.c:2441
+#: builtin/am.c:2444
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
 msgstr ""
 
-#: builtin/am.c:2448
+#: builtin/am.c:2451
 msgid "failed to read the index"
 msgstr ""
 
-#: builtin/am.c:2463
+#: builtin/am.c:2466
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr ""
 
-#: builtin/am.c:2487
+#: builtin/am.c:2490
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
 "Use \"git am --abort\" to remove it."
 msgstr ""
 
-#: builtin/am.c:2493
+#: builtin/am.c:2496
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr ""
 
-#: builtin/am.c:2503
+#: builtin/am.c:2506
 msgid "interactive mode requires patches on the command line"
 msgstr ""
 
@@ -10221,12 +10450,6 @@ msgstr ""
 msgid "git bisect--helper --bisect-reset [<commit>]"
 msgstr ""
 
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
-msgstr ""
-
 #: builtin/bisect--helper.c:26
 msgid ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
@@ -10234,10 +10457,6 @@ msgid ""
 "[<paths>...]"
 msgstr ""
 
-#: builtin/bisect--helper.c:28
-msgid "git bisect--helper --bisect-next"
-msgstr ""
-
 #: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr ""
@@ -10254,10 +10473,6 @@ msgstr ""
 msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
 msgstr ""
 
-#: builtin/bisect--helper.c:33
-msgid "git bisect--helper --bisect-visualize"
-msgstr ""
-
 #: builtin/bisect--helper.c:34
 msgid "git bisect--helper --bisect-run <cmd>..."
 msgstr ""
@@ -10468,111 +10683,121 @@ msgstr ""
 msgid "cannot read file '%s' for replaying"
 msgstr ""
 
-#: builtin/bisect--helper.c:1107 builtin/bisect--helper.c:1274
+#: builtin/bisect--helper.c:1120 builtin/bisect--helper.c:1152
+#, c-format
+msgid "running %s\n"
+msgstr ""
+
+#: builtin/bisect--helper.c:1145 builtin/bisect--helper.c:1335
 msgid "bisect run failed: no command provided."
 msgstr ""
 
-#: builtin/bisect--helper.c:1116
+#: builtin/bisect--helper.c:1166
 #, c-format
-msgid "running %s\n"
+msgid "unable to verify '%s' on good revision"
+msgstr ""
+
+#: builtin/bisect--helper.c:1172
+#, c-format
+msgid "bogus exit code %d for good revision"
 msgstr ""
 
-#: builtin/bisect--helper.c:1120
+#: builtin/bisect--helper.c:1180
 #, c-format
 msgid "bisect run failed: exit code %d from '%s' is < 0 or >= 128"
 msgstr ""
 
-#: builtin/bisect--helper.c:1136
+#: builtin/bisect--helper.c:1195
 #, c-format
 msgid "cannot open file '%s' for writing"
 msgstr ""
 
-#: builtin/bisect--helper.c:1152
+#: builtin/bisect--helper.c:1213
 msgid "bisect run cannot continue any more"
 msgstr ""
 
-#: builtin/bisect--helper.c:1154
+#: builtin/bisect--helper.c:1215
 #, c-format
 msgid "bisect run success"
 msgstr ""
 
-#: builtin/bisect--helper.c:1157
+#: builtin/bisect--helper.c:1218
 #, c-format
 msgid "bisect found first bad commit"
 msgstr ""
 
-#: builtin/bisect--helper.c:1160
+#: builtin/bisect--helper.c:1221
 #, c-format
 msgid ""
 "bisect run failed: 'git bisect--helper --bisect-state %s' exited with error "
 "code %d"
 msgstr ""
 
-#: builtin/bisect--helper.c:1192
+#: builtin/bisect--helper.c:1253
 msgid "reset the bisection state"
 msgstr ""
 
-#: builtin/bisect--helper.c:1194
+#: builtin/bisect--helper.c:1255
 msgid "check whether bad or good terms exist"
 msgstr ""
 
-#: builtin/bisect--helper.c:1196
+#: builtin/bisect--helper.c:1257
 msgid "print out the bisect terms"
 msgstr ""
 
-#: builtin/bisect--helper.c:1198
+#: builtin/bisect--helper.c:1259
 msgid "start the bisect session"
 msgstr ""
 
-#: builtin/bisect--helper.c:1200
+#: builtin/bisect--helper.c:1261
 msgid "find the next bisection commit"
 msgstr ""
 
-#: builtin/bisect--helper.c:1202
+#: builtin/bisect--helper.c:1263
 msgid "mark the state of ref (or refs)"
 msgstr ""
 
-#: builtin/bisect--helper.c:1204
+#: builtin/bisect--helper.c:1265
 msgid "list the bisection steps so far"
 msgstr ""
 
-#: builtin/bisect--helper.c:1206
+#: builtin/bisect--helper.c:1267
 msgid "replay the bisection process from the given file"
 msgstr ""
 
-#: builtin/bisect--helper.c:1208
+#: builtin/bisect--helper.c:1269
 msgid "skip some commits for checkout"
 msgstr ""
 
-#: builtin/bisect--helper.c:1210
+#: builtin/bisect--helper.c:1271
 msgid "visualize the bisection"
 msgstr ""
 
-#: builtin/bisect--helper.c:1212
-msgid "use <cmd>... to automatically bisect."
+#: builtin/bisect--helper.c:1273
+msgid "use <cmd>... to automatically bisect"
 msgstr ""
 
-#: builtin/bisect--helper.c:1214
+#: builtin/bisect--helper.c:1275
 msgid "no log for BISECT_WRITE"
 msgstr ""
 
-#: builtin/bisect--helper.c:1229
+#: builtin/bisect--helper.c:1290
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr ""
 
-#: builtin/bisect--helper.c:1234
+#: builtin/bisect--helper.c:1295
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr ""
 
-#: builtin/bisect--helper.c:1243
+#: builtin/bisect--helper.c:1304
 msgid "--bisect-next requires 0 arguments"
 msgstr ""
 
-#: builtin/bisect--helper.c:1254
+#: builtin/bisect--helper.c:1315
 msgid "--bisect-log requires 0 arguments"
 msgstr ""
 
-#: builtin/bisect--helper.c:1259
+#: builtin/bisect--helper.c:1320
 msgid "no logfile given"
 msgstr ""
 
@@ -10593,142 +10818,133 @@ msgstr ""
 msgid "must end with a color"
 msgstr ""
 
-#: builtin/blame.c:724
-#, c-format
-msgid "invalid color '%s' in color.blame.repeatedLines"
-msgstr ""
-
-#: builtin/blame.c:742
-msgid "invalid value for blame.coloring"
-msgstr ""
-
-#: builtin/blame.c:841
+#: builtin/blame.c:842
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr ""
 
-#: builtin/blame.c:863
+#: builtin/blame.c:864
 msgid "show blame entries as we find them, incrementally"
 msgstr ""
 
-#: builtin/blame.c:864
+#: builtin/blame.c:865
 msgid "do not show object names of boundary commits (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:865
+#: builtin/blame.c:866
 msgid "do not treat root commits as boundaries (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:866
+#: builtin/blame.c:867
 msgid "show work cost statistics"
 msgstr ""
 
-#: builtin/blame.c:867 builtin/checkout.c:1536 builtin/clone.c:94
-#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:180
+#: builtin/blame.c:868 builtin/checkout.c:1554 builtin/clone.c:98
+#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:181
 #: builtin/merge.c:301 builtin/multi-pack-index.c:103
 #: builtin/multi-pack-index.c:154 builtin/multi-pack-index.c:180
 #: builtin/multi-pack-index.c:208 builtin/pull.c:120 builtin/push.c:566
-#: builtin/send-pack.c:202
+#: builtin/remote.c:683 builtin/send-pack.c:202
 msgid "force progress reporting"
 msgstr ""
 
-#: builtin/blame.c:868
+#: builtin/blame.c:869
 msgid "show output score for blame entries"
 msgstr ""
 
-#: builtin/blame.c:869
+#: builtin/blame.c:870
 msgid "show original filename (Default: auto)"
 msgstr ""
 
-#: builtin/blame.c:870
+#: builtin/blame.c:871
 msgid "show original linenumber (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:871
+#: builtin/blame.c:872
 msgid "show in a format designed for machine consumption"
 msgstr ""
 
-#: builtin/blame.c:872
+#: builtin/blame.c:873
 msgid "show porcelain format with per-line commit information"
 msgstr ""
 
-#: builtin/blame.c:873
+#: builtin/blame.c:874
 msgid "use the same output mode as git-annotate (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:874
+#: builtin/blame.c:875
 msgid "show raw timestamp (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:875
+#: builtin/blame.c:876
 msgid "show long commit SHA1 (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:876
+#: builtin/blame.c:877
 msgid "suppress author name and timestamp (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:877
+#: builtin/blame.c:878
 msgid "show author email instead of name (Default: off)"
 msgstr ""
 
-#: builtin/blame.c:878
+#: builtin/blame.c:879
 msgid "ignore whitespace differences"
 msgstr ""
 
-#: builtin/blame.c:879 builtin/log.c:1838
+#: builtin/blame.c:880 builtin/log.c:1857
 msgid "rev"
 msgstr ""
 
-#: builtin/blame.c:879
+#: builtin/blame.c:880
 msgid "ignore <rev> when blaming"
 msgstr ""
 
-#: builtin/blame.c:880
+#: builtin/blame.c:881
 msgid "ignore revisions from <file>"
 msgstr ""
 
-#: builtin/blame.c:881
+#: builtin/blame.c:882
 msgid "color redundant metadata from previous line differently"
 msgstr ""
 
-#: builtin/blame.c:882
+#: builtin/blame.c:883
 msgid "color lines by age"
 msgstr ""
 
-#: builtin/blame.c:883
+#: builtin/blame.c:884
 msgid "spend extra cycles to find better match"
 msgstr ""
 
-#: builtin/blame.c:884
+#: builtin/blame.c:885
 msgid "use revisions from <file> instead of calling git-rev-list"
 msgstr ""
 
-#: builtin/blame.c:885
+#: builtin/blame.c:886
 msgid "use <file>'s contents as the final image"
 msgstr ""
 
-#: builtin/blame.c:886 builtin/blame.c:887
+#: builtin/blame.c:887 builtin/blame.c:888
 msgid "score"
 msgstr ""
 
-#: builtin/blame.c:886
+#: builtin/blame.c:887
 msgid "find line copies within and across files"
 msgstr ""
 
-#: builtin/blame.c:887
+#: builtin/blame.c:888
 msgid "find line movements within and across files"
 msgstr ""
 
-#: builtin/blame.c:888
+#: builtin/blame.c:889
 msgid "range"
 msgstr ""
 
-#: builtin/blame.c:889
+#: builtin/blame.c:890
 msgid "process only line range <start>,<end> or function :<funcname>"
 msgstr ""
 
-#: builtin/blame.c:947
+#: builtin/blame.c:949
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr ""
 
@@ -10740,18 +10956,18 @@ msgstr ""
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:998
+#: builtin/blame.c:1000
 msgid "4 years, 11 months ago"
 msgstr ""
 
-#: builtin/blame.c:1114
+#: builtin/blame.c:1116
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/blame.c:1159
+#: builtin/blame.c:1161
 msgid "Blaming lines"
 msgstr ""
 
@@ -10760,160 +10976,166 @@ msgid "git branch [<options>] [-r | -a] [--merged] [--no-merged]"
 msgstr ""
 
 #: builtin/branch.c:30
-msgid "git branch [<options>] [-l] [-f] <branch-name> [<start-point>]"
+msgid ""
+"git branch [<options>] [-f] [--recurse-submodules] <branch-name> [<start-"
+"point>]"
 msgstr ""
 
 #: builtin/branch.c:31
-msgid "git branch [<options>] [-r] (-d | -D) <branch-name>..."
+msgid "git branch [<options>] [-l] [<pattern>...]"
 msgstr ""
 
 #: builtin/branch.c:32
-msgid "git branch [<options>] (-m | -M) [<old-branch>] <new-branch>"
+msgid "git branch [<options>] [-r] (-d | -D) <branch-name>..."
 msgstr ""
 
 #: builtin/branch.c:33
-msgid "git branch [<options>] (-c | -C) [<old-branch>] <new-branch>"
+msgid "git branch [<options>] (-m | -M) [<old-branch>] <new-branch>"
 msgstr ""
 
 #: builtin/branch.c:34
-msgid "git branch [<options>] [-r | -a] [--points-at]"
+msgid "git branch [<options>] (-c | -C) [<old-branch>] <new-branch>"
 msgstr ""
 
 #: builtin/branch.c:35
+msgid "git branch [<options>] [-r | -a] [--points-at]"
+msgstr ""
+
+#: builtin/branch.c:36
 msgid "git branch [<options>] [-r | -a] [--format]"
 msgstr ""
 
-#: builtin/branch.c:153
+#: builtin/branch.c:165
 #, c-format
 msgid ""
 "deleting branch '%s' that has been merged to\n"
 "         '%s', but not yet merged to HEAD."
 msgstr ""
 
-#: builtin/branch.c:157
+#: builtin/branch.c:169
 #, c-format
 msgid ""
 "not deleting branch '%s' that is not yet merged to\n"
 "         '%s', even though it is merged to HEAD."
 msgstr ""
 
-#: builtin/branch.c:171
+#: builtin/branch.c:183
 #, c-format
 msgid "Couldn't look up commit object for '%s'"
 msgstr ""
 
-#: builtin/branch.c:175
+#: builtin/branch.c:187
 #, c-format
 msgid ""
 "The branch '%s' is not fully merged.\n"
 "If you are sure you want to delete it, run 'git branch -D %s'."
 msgstr ""
 
-#: builtin/branch.c:188
+#: builtin/branch.c:200
 msgid "Update of config-file failed"
 msgstr ""
 
-#: builtin/branch.c:223
+#: builtin/branch.c:235
 msgid "cannot use -a with -d"
 msgstr ""
 
-#: builtin/branch.c:230
+#: builtin/branch.c:242
 msgid "Couldn't look up commit object for HEAD"
 msgstr ""
 
-#: builtin/branch.c:247
+#: builtin/branch.c:259
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr ""
 
-#: builtin/branch.c:262
+#: builtin/branch.c:274
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr ""
 
-#: builtin/branch.c:263
+#: builtin/branch.c:275
 #, c-format
 msgid "branch '%s' not found."
 msgstr ""
 
-#: builtin/branch.c:294
+#: builtin/branch.c:306
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr ""
 
-#: builtin/branch.c:295
+#: builtin/branch.c:307
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr ""
 
-#: builtin/branch.c:445 builtin/tag.c:63
+#: builtin/branch.c:457 builtin/tag.c:64
 msgid "unable to parse format string"
 msgstr ""
 
-#: builtin/branch.c:476
+#: builtin/branch.c:488
 msgid "could not resolve HEAD"
 msgstr ""
 
-#: builtin/branch.c:482
+#: builtin/branch.c:494
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr ""
 
-#: builtin/branch.c:497
+#: builtin/branch.c:509
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr ""
 
-#: builtin/branch.c:501
+#: builtin/branch.c:513
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr ""
 
-#: builtin/branch.c:518
+#: builtin/branch.c:530
 msgid "cannot copy the current branch while not on any."
 msgstr ""
 
-#: builtin/branch.c:520
+#: builtin/branch.c:532
 msgid "cannot rename the current branch while not on any."
 msgstr ""
 
-#: builtin/branch.c:531
+#: builtin/branch.c:543
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr ""
 
-#: builtin/branch.c:560
+#: builtin/branch.c:572
 msgid "Branch rename failed"
 msgstr ""
 
-#: builtin/branch.c:562
+#: builtin/branch.c:574
 msgid "Branch copy failed"
 msgstr ""
 
-#: builtin/branch.c:566
+#: builtin/branch.c:578
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr ""
 
-#: builtin/branch.c:569
+#: builtin/branch.c:581
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr ""
 
-#: builtin/branch.c:575
+#: builtin/branch.c:587
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr ""
 
-#: builtin/branch.c:584
+#: builtin/branch.c:596
 msgid "Branch is renamed, but update of config-file failed"
 msgstr ""
 
-#: builtin/branch.c:586
+#: builtin/branch.c:598
 msgid "Branch is copied, but update of config-file failed"
 msgstr ""
 
-#: builtin/branch.c:602
+#: builtin/branch.c:614
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -10921,211 +11143,226 @@ msgid ""
 "Lines starting with '%c' will be stripped.\n"
 msgstr ""
 
-#: builtin/branch.c:637
+#: builtin/branch.c:651
 msgid "Generic options"
 msgstr ""
 
-#: builtin/branch.c:639
+#: builtin/branch.c:653
 msgid "show hash and subject, give twice for upstream branch"
 msgstr ""
 
-#: builtin/branch.c:640
+#: builtin/branch.c:654
 msgid "suppress informational messages"
 msgstr ""
 
-#: builtin/branch.c:642
+#: builtin/branch.c:656 builtin/checkout.c:1571
+#: builtin/submodule--helper.c:3077
 msgid "set branch tracking configuration"
 msgstr ""
 
-#: builtin/branch.c:645
+#: builtin/branch.c:659
 msgid "do not use"
 msgstr ""
 
-#: builtin/branch.c:647
+#: builtin/branch.c:661
 msgid "upstream"
 msgstr ""
 
-#: builtin/branch.c:647
+#: builtin/branch.c:661
 msgid "change the upstream info"
 msgstr ""
 
-#: builtin/branch.c:648
+#: builtin/branch.c:662
 msgid "unset the upstream info"
 msgstr ""
 
-#: builtin/branch.c:649
+#: builtin/branch.c:663
 msgid "use colored output"
 msgstr ""
 
-#: builtin/branch.c:650
+#: builtin/branch.c:664
 msgid "act on remote-tracking branches"
 msgstr ""
 
-#: builtin/branch.c:652 builtin/branch.c:654
+#: builtin/branch.c:666 builtin/branch.c:668
 msgid "print only branches that contain the commit"
 msgstr ""
 
-#: builtin/branch.c:653 builtin/branch.c:655
+#: builtin/branch.c:667 builtin/branch.c:669
 msgid "print only branches that don't contain the commit"
 msgstr ""
 
-#: builtin/branch.c:658
+#: builtin/branch.c:672
 msgid "Specific git-branch actions:"
 msgstr ""
 
-#: builtin/branch.c:659
+#: builtin/branch.c:673
 msgid "list both remote-tracking and local branches"
 msgstr ""
 
-#: builtin/branch.c:661
+#: builtin/branch.c:675
 msgid "delete fully merged branch"
 msgstr ""
 
-#: builtin/branch.c:662
+#: builtin/branch.c:676
 msgid "delete branch (even if not merged)"
 msgstr ""
 
-#: builtin/branch.c:663
+#: builtin/branch.c:677
 msgid "move/rename a branch and its reflog"
 msgstr ""
 
-#: builtin/branch.c:664
+#: builtin/branch.c:678
 msgid "move/rename a branch, even if target exists"
 msgstr ""
 
-#: builtin/branch.c:665
+#: builtin/branch.c:679
 msgid "copy a branch and its reflog"
 msgstr ""
 
-#: builtin/branch.c:666
+#: builtin/branch.c:680
 msgid "copy a branch, even if target exists"
 msgstr ""
 
-#: builtin/branch.c:667
+#: builtin/branch.c:681
 msgid "list branch names"
 msgstr ""
 
-#: builtin/branch.c:668
+#: builtin/branch.c:682
 msgid "show current branch name"
 msgstr ""
 
-#: builtin/branch.c:669
+#: builtin/branch.c:683 builtin/submodule--helper.c:3075
 msgid "create the branch's reflog"
 msgstr ""
 
-#: builtin/branch.c:671
+#: builtin/branch.c:685
 msgid "edit the description for the branch"
 msgstr ""
 
-#: builtin/branch.c:672
+#: builtin/branch.c:686
 msgid "force creation, move/rename, deletion"
 msgstr ""
 
-#: builtin/branch.c:673
+#: builtin/branch.c:687
 msgid "print only branches that are merged"
 msgstr ""
 
-#: builtin/branch.c:674
+#: builtin/branch.c:688
 msgid "print only branches that are not merged"
 msgstr ""
 
-#: builtin/branch.c:675
+#: builtin/branch.c:689
 msgid "list branches in columns"
 msgstr ""
 
-#: builtin/branch.c:677 builtin/for-each-ref.c:45 builtin/notes.c:413
+#: builtin/branch.c:691 builtin/for-each-ref.c:45 builtin/notes.c:413
 #: builtin/notes.c:416 builtin/notes.c:579 builtin/notes.c:582
-#: builtin/tag.c:475
+#: builtin/tag.c:476
 msgid "object"
 msgstr ""
 
-#: builtin/branch.c:678
+#: builtin/branch.c:692
 msgid "print only branches of the object"
 msgstr ""
 
-#: builtin/branch.c:679 builtin/for-each-ref.c:51 builtin/tag.c:482
+#: builtin/branch.c:693 builtin/for-each-ref.c:51 builtin/tag.c:483
 msgid "sorting and filtering are case insensitive"
 msgstr ""
 
-#: builtin/branch.c:680 builtin/for-each-ref.c:41 builtin/tag.c:480
-#: builtin/verify-tag.c:38
+#: builtin/branch.c:694 builtin/ls-files.c:667
+msgid "recurse through submodules"
+msgstr ""
+
+#: builtin/branch.c:695 builtin/for-each-ref.c:41 builtin/ls-tree.c:358
+#: builtin/tag.c:481 builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr ""
 
-#: builtin/branch.c:703 builtin/clone.c:678
+#: builtin/branch.c:718 builtin/clone.c:684
 msgid "HEAD not found below refs/heads!"
 msgstr ""
 
-#: builtin/branch.c:742 builtin/branch.c:798 builtin/branch.c:807
+#: builtin/branch.c:739
+msgid ""
+"branch with --recurse-submodules can only be used if submodule."
+"propagateBranches is enabled"
+msgstr ""
+
+#: builtin/branch.c:741
+msgid "--recurse-submodules can only be used to create branches"
+msgstr ""
+
+#: builtin/branch.c:770 builtin/branch.c:826 builtin/branch.c:835
 msgid "branch name required"
 msgstr ""
 
-#: builtin/branch.c:774
+#: builtin/branch.c:802
 msgid "Cannot give description to detached HEAD"
 msgstr ""
 
-#: builtin/branch.c:779
+#: builtin/branch.c:807
 msgid "cannot edit description of more than one branch"
 msgstr ""
 
-#: builtin/branch.c:786
+#: builtin/branch.c:814
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr ""
 
-#: builtin/branch.c:789
+#: builtin/branch.c:817
 #, c-format
 msgid "No branch named '%s'."
 msgstr ""
 
-#: builtin/branch.c:804
+#: builtin/branch.c:832
 msgid "too many branches for a copy operation"
 msgstr ""
 
-#: builtin/branch.c:813
+#: builtin/branch.c:841
 msgid "too many arguments for a rename operation"
 msgstr ""
 
-#: builtin/branch.c:818
+#: builtin/branch.c:846
 msgid "too many arguments to set new upstream"
 msgstr ""
 
-#: builtin/branch.c:822
+#: builtin/branch.c:850
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
 msgstr ""
 
-#: builtin/branch.c:825 builtin/branch.c:848
+#: builtin/branch.c:853 builtin/branch.c:873
 #, c-format
 msgid "no such branch '%s'"
 msgstr ""
 
-#: builtin/branch.c:829
+#: builtin/branch.c:857
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr ""
 
-#: builtin/branch.c:842
+#: builtin/branch.c:867
 msgid "too many arguments to unset upstream"
 msgstr ""
 
-#: builtin/branch.c:846
+#: builtin/branch.c:871
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr ""
 
-#: builtin/branch.c:852
+#: builtin/branch.c:877
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr ""
 
-#: builtin/branch.c:862
+#: builtin/branch.c:890
 msgid ""
 "The -a, and -r, options to 'git branch' do not take a branch name.\n"
 "Did you mean to use: -a|-r --list <pattern>?"
 msgstr ""
 
-#: builtin/branch.c:866
+#: builtin/branch.c:894
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -11222,19 +11459,19 @@ msgstr ""
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr ""
 
-#: builtin/bundle.c:65 builtin/pack-objects.c:3876
+#: builtin/bundle.c:65 builtin/pack-objects.c:3899
 msgid "do not show progress meter"
 msgstr ""
 
-#: builtin/bundle.c:67 builtin/bundle.c:167 builtin/pack-objects.c:3878
+#: builtin/bundle.c:67 builtin/bundle.c:168 builtin/pack-objects.c:3901
 msgid "show progress meter"
 msgstr ""
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3880
+#: builtin/bundle.c:69 builtin/pack-objects.c:3903
 msgid "show progress meter during object writing phase"
 msgstr ""
 
-#: builtin/bundle.c:72 builtin/pack-objects.c:3883
+#: builtin/bundle.c:72 builtin/pack-objects.c:3906
 msgid "similar to --all-progress when progress meter is shown"
 msgstr ""
 
@@ -11246,106 +11483,216 @@ msgstr ""
 msgid "Need a repository to create a bundle."
 msgstr ""
 
-#: builtin/bundle.c:107
+#: builtin/bundle.c:108
 msgid "do not show bundle details"
 msgstr ""
 
-#: builtin/bundle.c:126
+#: builtin/bundle.c:127
 #, c-format
 msgid "%s is okay\n"
 msgstr ""
 
-#: builtin/bundle.c:182
+#: builtin/bundle.c:183
 msgid "Need a repository to unbundle."
 msgstr ""
 
-#: builtin/bundle.c:185
+#: builtin/bundle.c:186
 msgid "Unbundling objects"
 msgstr ""
 
-#: builtin/bundle.c:219 builtin/remote.c:1733
+#: builtin/bundle.c:220 builtin/remote.c:1758
 #, c-format
 msgid "Unknown subcommand: %s"
 msgstr ""
 
-#: builtin/cat-file.c:622
-msgid ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <type> | --textconv | --filters) [--path=<path>] <object>"
+#: builtin/cat-file.c:568
+msgid "flush is only for --buffer mode"
 msgstr ""
 
-#: builtin/cat-file.c:623
-msgid ""
-"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
-"symlinks] [--textconv | --filters]"
+#: builtin/cat-file.c:612
+msgid "empty command in input"
 msgstr ""
 
-#: builtin/cat-file.c:644
-msgid "only one batch option may be specified"
+#: builtin/cat-file.c:614
+#, c-format
+msgid "whitespace before command: '%s'"
+msgstr ""
+
+#: builtin/cat-file.c:623
+#, c-format
+msgid "%s requires arguments"
 msgstr ""
 
-#: builtin/cat-file.c:662
-msgid "<type> can be one of: blob, tree, commit, tag"
+#: builtin/cat-file.c:628
+#, c-format
+msgid "%s takes no arguments"
 msgstr ""
 
-#: builtin/cat-file.c:663
-msgid "show object type"
+#: builtin/cat-file.c:636
+#, c-format
+msgid "unknown command: '%s'"
 msgstr ""
 
-#: builtin/cat-file.c:664
-msgid "show object size"
+#: builtin/cat-file.c:795
+msgid "only one batch option may be specified"
+msgstr ""
+
+#: builtin/cat-file.c:824
+msgid "git cat-file <type> <object>"
+msgstr ""
+
+#: builtin/cat-file.c:825
+msgid "git cat-file (-e | -p) <object>"
+msgstr ""
+
+#: builtin/cat-file.c:826
+msgid "git cat-file (-t | -s) [--allow-unknown-type] <object>"
+msgstr ""
+
+#: builtin/cat-file.c:827
+msgid ""
+"git cat-file (--batch | --batch-check | --batch-command) [--batch-all-"
+"objects]\n"
+"             [--buffer] [--follow-symlinks] [--unordered]\n"
+"             [--textconv | --filters]"
+msgstr ""
+
+#: builtin/cat-file.c:830
+msgid ""
+"git cat-file (--textconv | --filters)\n"
+"             [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]"
 msgstr ""
 
-#: builtin/cat-file.c:666
-msgid "exit with zero when there's no error"
+#: builtin/cat-file.c:836
+msgid "Check object existence or emit object contents"
 msgstr ""
 
-#: builtin/cat-file.c:667
-msgid "pretty-print object's content"
+#: builtin/cat-file.c:838
+msgid "check if <object> exists"
 msgstr ""
 
-#: builtin/cat-file.c:669
-msgid "for blob objects, run textconv on object's content"
+#: builtin/cat-file.c:839
+msgid "pretty-print <object> content"
 msgstr ""
 
-#: builtin/cat-file.c:671
-msgid "for blob objects, run filters on object's content"
+#: builtin/cat-file.c:841
+msgid "Emit [broken] object attributes"
 msgstr ""
 
-#: builtin/cat-file.c:672
-msgid "blob"
+#: builtin/cat-file.c:842
+msgid "show object type (one of 'blob', 'tree', 'commit', 'tag', ...)"
 msgstr ""
 
-#: builtin/cat-file.c:673
-msgid "use a specific path for --textconv/--filters"
+#: builtin/cat-file.c:843
+msgid "show object size"
 msgstr ""
 
-#: builtin/cat-file.c:675
+#: builtin/cat-file.c:845
 msgid "allow -s and -t to work with broken/corrupt objects"
 msgstr ""
 
-#: builtin/cat-file.c:676
+#: builtin/cat-file.c:847
+msgid "Batch objects requested on stdin (or --batch-all-objects)"
+msgstr ""
+
+#: builtin/cat-file.c:849
+msgid "show full <object> or <rev> contents"
+msgstr ""
+
+#: builtin/cat-file.c:853
+msgid "like --batch, but don't emit <contents>"
+msgstr ""
+
+#: builtin/cat-file.c:857
+msgid "read commands from stdin"
+msgstr ""
+
+#: builtin/cat-file.c:861
+msgid "with --batch[-check]: ignores stdin, batches all known objects"
+msgstr ""
+
+#: builtin/cat-file.c:863
+msgid "Change or optimize batch output"
+msgstr ""
+
+#: builtin/cat-file.c:864
 msgid "buffer --batch output"
 msgstr ""
 
-#: builtin/cat-file.c:678
-msgid "show info and content of objects fed from the standard input"
+#: builtin/cat-file.c:866
+msgid "follow in-tree symlinks"
+msgstr ""
+
+#: builtin/cat-file.c:868
+msgid "do not order objects before emitting them"
+msgstr ""
+
+#: builtin/cat-file.c:870
+msgid ""
+"Emit object (blob or tree) with conversion or filter (stand-alone, or with "
+"batch)"
+msgstr ""
+
+#: builtin/cat-file.c:872
+msgid "run textconv on object's content"
+msgstr ""
+
+#: builtin/cat-file.c:874
+msgid "run filters on object's content"
+msgstr ""
+
+#: builtin/cat-file.c:875
+msgid "blob|tree"
+msgstr ""
+
+#: builtin/cat-file.c:876
+msgid "use a <path> for (--textconv | --filters); Not with 'batch'"
+msgstr ""
+
+#: builtin/cat-file.c:894
+#, c-format
+msgid "'%s=<%s>' needs '%s' or '%s'"
+msgstr ""
+
+#: builtin/cat-file.c:896
+msgid "path|tree-ish"
+msgstr ""
+
+#: builtin/cat-file.c:903 builtin/cat-file.c:906 builtin/cat-file.c:909
+#, c-format
+msgid "'%s' requires a batch mode"
+msgstr ""
+
+#: builtin/cat-file.c:921
+#, c-format
+msgid "'-%c' is incompatible with batch mode"
+msgstr ""
+
+#: builtin/cat-file.c:924
+msgid "batch modes take no arguments"
 msgstr ""
 
-#: builtin/cat-file.c:682
-msgid "show info about objects fed from the standard input"
+#: builtin/cat-file.c:932 builtin/cat-file.c:935
+#, c-format
+msgid "<rev> required with '%s'"
 msgstr ""
 
-#: builtin/cat-file.c:686
-msgid "follow in-tree symlinks (used with --batch or --batch-check)"
+#: builtin/cat-file.c:938
+#, c-format
+msgid "<object> required with '-%c'"
 msgstr ""
 
-#: builtin/cat-file.c:688
-msgid "show all objects with --batch or --batch-check"
+#: builtin/cat-file.c:943 builtin/notes.c:374 builtin/notes.c:429
+#: builtin/notes.c:507 builtin/notes.c:519 builtin/notes.c:596
+#: builtin/notes.c:663 builtin/notes.c:813 builtin/notes.c:965
+#: builtin/notes.c:987 builtin/prune-packed.c:25 builtin/receive-pack.c:2489
+#: builtin/tag.c:592
+msgid "too many arguments"
 msgstr ""
 
-#: builtin/cat-file.c:690
-msgid "do not order --batch-all-objects output"
+#: builtin/cat-file.c:947
+#, c-format
+msgid "only two arguments allowed in <type> <object> mode, not %d"
 msgstr ""
 
 #: builtin/check-attr.c:13
@@ -11364,7 +11711,7 @@ msgstr ""
 msgid "use .gitattributes only from the index"
 msgstr ""
 
-#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:100
+#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:101
 msgid "read file names from stdin"
 msgstr ""
 
@@ -11372,8 +11719,8 @@ msgstr ""
 msgid "terminate input and output records by a NUL character"
 msgstr ""
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1532 builtin/gc.c:550
-#: builtin/worktree.c:493
+#: builtin/check-ignore.c:21 builtin/checkout.c:1550 builtin/gc.c:550
+#: builtin/worktree.c:565
 msgid "suppress progress reporting"
 msgstr ""
 
@@ -11430,211 +11777,215 @@ msgstr ""
 msgid "git checkout--worker [<options>]"
 msgstr ""
 
-#: builtin/checkout--worker.c:118 builtin/checkout-index.c:201
-#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1864
-#: builtin/submodule--helper.c:1867 builtin/submodule--helper.c:1875
-#: builtin/submodule--helper.c:2511 builtin/submodule--helper.c:2577
-#: builtin/worktree.c:491 builtin/worktree.c:728
+#: builtin/checkout--worker.c:118 builtin/checkout-index.c:235
+#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1878
+#: builtin/submodule--helper.c:1881 builtin/submodule--helper.c:1889
+#: builtin/submodule--helper.c:2716 builtin/worktree.c:563
+#: builtin/worktree.c:808
 msgid "string"
 msgstr ""
 
-#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:236
 msgid "when creating files, prepend <string>"
 msgstr ""
 
-#: builtin/checkout-index.c:152
+#: builtin/checkout-index.c:184
 msgid "git checkout-index [<options>] [--] [<file>...]"
 msgstr ""
 
-#: builtin/checkout-index.c:169
+#: builtin/checkout-index.c:201
 msgid "stage should be between 1 and 3 or all"
 msgstr ""
 
-#: builtin/checkout-index.c:187
+#: builtin/checkout-index.c:219
 msgid "check out all files in the index"
 msgstr ""
 
-#: builtin/checkout-index.c:188
+#: builtin/checkout-index.c:221
+msgid "do not skip files with skip-worktree set"
+msgstr ""
+
+#: builtin/checkout-index.c:222
 msgid "force overwrite of existing files"
 msgstr ""
 
-#: builtin/checkout-index.c:190
+#: builtin/checkout-index.c:224
 msgid "no warning for existing files and files not in index"
 msgstr ""
 
-#: builtin/checkout-index.c:192
+#: builtin/checkout-index.c:226
 msgid "don't checkout new files"
 msgstr ""
 
-#: builtin/checkout-index.c:194
+#: builtin/checkout-index.c:228
 msgid "update stat information in the index file"
 msgstr ""
 
-#: builtin/checkout-index.c:198
+#: builtin/checkout-index.c:232
 msgid "read list of paths from the standard input"
 msgstr ""
 
-#: builtin/checkout-index.c:200
+#: builtin/checkout-index.c:234
 msgid "write the content to temporary files"
 msgstr ""
 
-#: builtin/checkout-index.c:204
+#: builtin/checkout-index.c:238
 msgid "copy out the files from named stage"
 msgstr ""
 
-#: builtin/checkout.c:33
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] <branch>"
 msgstr ""
 
-#: builtin/checkout.c:34
+#: builtin/checkout.c:35
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr ""
 
-#: builtin/checkout.c:39
+#: builtin/checkout.c:40
 msgid "git switch [<options>] [<branch>]"
 msgstr ""
 
-#: builtin/checkout.c:44
+#: builtin/checkout.c:45
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr ""
 
-#: builtin/checkout.c:198 builtin/checkout.c:237
+#: builtin/checkout.c:199 builtin/checkout.c:238
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr ""
 
-#: builtin/checkout.c:200 builtin/checkout.c:239
+#: builtin/checkout.c:201 builtin/checkout.c:240
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr ""
 
-#: builtin/checkout.c:216
+#: builtin/checkout.c:217
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr ""
 
-#: builtin/checkout.c:269
+#: builtin/checkout.c:271
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr ""
 
-#: builtin/checkout.c:286
+#: builtin/checkout.c:291
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr ""
 
-#: builtin/checkout.c:302
+#: builtin/checkout.c:307
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr ""
 
-#: builtin/checkout.c:419
+#: builtin/checkout.c:424
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/checkout.c:424
+#: builtin/checkout.c:429
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/checkout.c:431
+#: builtin/checkout.c:436
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/checkout.c:454 builtin/checkout.c:457 builtin/checkout.c:460
-#: builtin/checkout.c:464
+#: builtin/checkout.c:459 builtin/checkout.c:462 builtin/checkout.c:465
+#: builtin/checkout.c:469
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr ""
 
-#: builtin/checkout.c:474
+#: builtin/checkout.c:479
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr ""
 
-#: builtin/checkout.c:478
+#: builtin/checkout.c:483
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr ""
 
-#: builtin/checkout.c:482
+#: builtin/checkout.c:487
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr ""
 
-#: builtin/checkout.c:487 builtin/checkout.c:492
+#: builtin/checkout.c:492 builtin/checkout.c:497
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr ""
 
-#: builtin/checkout.c:566 builtin/checkout.c:573
+#: builtin/checkout.c:571 builtin/checkout.c:578
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr ""
 
-#: builtin/checkout.c:747
+#: builtin/checkout.c:753
 msgid "you need to resolve your current index first"
 msgstr ""
 
-#: builtin/checkout.c:797
+#: builtin/checkout.c:809
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
 "%s"
 msgstr ""
 
-#: builtin/checkout.c:890
+#: builtin/checkout.c:902
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr ""
 
-#: builtin/checkout.c:934
+#: builtin/checkout.c:947
 msgid "HEAD is now at"
 msgstr ""
 
-#: builtin/checkout.c:938 builtin/clone.c:609 t/helper/test-fast-rebase.c:203
+#: builtin/checkout.c:951 builtin/clone.c:615 t/helper/test-fast-rebase.c:203
 msgid "unable to update HEAD"
 msgstr ""
 
-#: builtin/checkout.c:942
+#: builtin/checkout.c:955
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr ""
 
-#: builtin/checkout.c:945
+#: builtin/checkout.c:958
 #, c-format
 msgid "Already on '%s'\n"
 msgstr ""
 
-#: builtin/checkout.c:949
+#: builtin/checkout.c:962
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr ""
 
-#: builtin/checkout.c:951 builtin/checkout.c:1388
+#: builtin/checkout.c:964 builtin/checkout.c:1398
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr ""
 
-#: builtin/checkout.c:953
+#: builtin/checkout.c:966
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr ""
 
-#: builtin/checkout.c:1004
+#: builtin/checkout.c:1017
 #, c-format
 msgid " ... and %d more.\n"
 msgstr ""
 
-#: builtin/checkout.c:1010
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -11649,7 +12000,7 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/checkout.c:1029
+#: builtin/checkout.c:1042
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -11666,26 +12017,26 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/checkout.c:1064
+#: builtin/checkout.c:1077
 msgid "internal error in revision walk"
 msgstr ""
 
-#: builtin/checkout.c:1068
+#: builtin/checkout.c:1081
 msgid "Previous HEAD position was"
 msgstr ""
 
-#: builtin/checkout.c:1114 builtin/checkout.c:1383
+#: builtin/checkout.c:1124 builtin/checkout.c:1393
 msgid "You are on a branch yet to be born"
 msgstr ""
 
-#: builtin/checkout.c:1196
+#: builtin/checkout.c:1206
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
 "Please use -- (and optionally --no-guess) to disambiguate"
 msgstr ""
 
-#: builtin/checkout.c:1203
+#: builtin/checkout.c:1213
 msgid ""
 "If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
 "you can do so by fully qualifying the name with the --track option:\n"
@@ -11697,269 +12048,270 @@ msgid ""
 "checkout.defaultRemote=origin in your config."
 msgstr ""
 
-#: builtin/checkout.c:1213
+#: builtin/checkout.c:1223
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr ""
 
-#: builtin/checkout.c:1279
+#: builtin/checkout.c:1289
 msgid "only one reference expected"
 msgstr ""
 
-#: builtin/checkout.c:1296
+#: builtin/checkout.c:1306
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr ""
 
-#: builtin/checkout.c:1342 builtin/worktree.c:269 builtin/worktree.c:436
+#: builtin/checkout.c:1352 builtin/worktree.c:338 builtin/worktree.c:508
 #, c-format
 msgid "invalid reference: %s"
 msgstr ""
 
-#: builtin/checkout.c:1355 builtin/checkout.c:1725
+#: builtin/checkout.c:1365 builtin/checkout.c:1744
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr ""
 
-#: builtin/checkout.c:1402
+#: builtin/checkout.c:1413
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr ""
 
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1415
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr ""
 
-#: builtin/checkout.c:1405 builtin/checkout.c:1413
+#: builtin/checkout.c:1417 builtin/checkout.c:1426
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr ""
 
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1420
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr ""
 
-#: builtin/checkout.c:1424
+#: builtin/checkout.c:1429
+msgid ""
+"If you want to detach HEAD at the commit, try again with the --detach option."
+msgstr ""
+
+#: builtin/checkout.c:1442
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
 msgstr ""
 
-#: builtin/checkout.c:1428
+#: builtin/checkout.c:1446
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
 msgstr ""
 
-#: builtin/checkout.c:1432
+#: builtin/checkout.c:1450
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
 msgstr ""
 
-#: builtin/checkout.c:1436
+#: builtin/checkout.c:1454
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
 msgstr ""
 
-#: builtin/checkout.c:1440
+#: builtin/checkout.c:1458
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
 msgstr ""
 
-#: builtin/checkout.c:1444
+#: builtin/checkout.c:1462
 msgid "you are switching branch while bisecting"
 msgstr ""
 
-#: builtin/checkout.c:1451
+#: builtin/checkout.c:1469
 msgid "paths cannot be used with switching branches"
 msgstr ""
 
-#: builtin/checkout.c:1454 builtin/checkout.c:1458 builtin/checkout.c:1462
+#: builtin/checkout.c:1472 builtin/checkout.c:1476 builtin/checkout.c:1480
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr ""
 
-#: builtin/checkout.c:1466 builtin/checkout.c:1469 builtin/checkout.c:1472
-#: builtin/checkout.c:1477 builtin/checkout.c:1482
+#: builtin/checkout.c:1484 builtin/checkout.c:1487 builtin/checkout.c:1490
+#: builtin/checkout.c:1495 builtin/checkout.c:1500
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr ""
 
-#: builtin/checkout.c:1479
+#: builtin/checkout.c:1497
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr ""
 
-#: builtin/checkout.c:1487
+#: builtin/checkout.c:1505
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr ""
 
-#: builtin/checkout.c:1494
+#: builtin/checkout.c:1512
 msgid "missing branch or commit argument"
 msgstr ""
 
-#: builtin/checkout.c:1537
+#: builtin/checkout.c:1555
 msgid "perform a 3-way merge with the new branch"
 msgstr ""
 
-#: builtin/checkout.c:1538 builtin/log.c:1825 parse-options.h:323
+#: builtin/checkout.c:1556 builtin/log.c:1844 parse-options.h:354
 msgid "style"
 msgstr ""
 
-#: builtin/checkout.c:1539
+#: builtin/checkout.c:1557
 msgid "conflict style (merge, diff3, or zdiff3)"
 msgstr ""
 
-#: builtin/checkout.c:1551 builtin/worktree.c:488
+#: builtin/checkout.c:1569 builtin/worktree.c:560
 msgid "detach HEAD at named commit"
 msgstr ""
 
-#: builtin/checkout.c:1553
-msgid "set up tracking mode (see git-pull(1))"
-msgstr ""
-
-#: builtin/checkout.c:1556
+#: builtin/checkout.c:1574
 msgid "force checkout (throw away local modifications)"
 msgstr ""
 
-#: builtin/checkout.c:1558
+#: builtin/checkout.c:1576
 msgid "new-branch"
 msgstr ""
 
-#: builtin/checkout.c:1558
+#: builtin/checkout.c:1576
 msgid "new unparented branch"
 msgstr ""
 
-#: builtin/checkout.c:1560 builtin/merge.c:305
+#: builtin/checkout.c:1578 builtin/merge.c:305
 msgid "update ignored files (default)"
 msgstr ""
 
-#: builtin/checkout.c:1563
+#: builtin/checkout.c:1581
 msgid "do not check if another worktree is holding the given ref"
 msgstr ""
 
-#: builtin/checkout.c:1576
+#: builtin/checkout.c:1594
 msgid "checkout our version for unmerged files"
 msgstr ""
 
-#: builtin/checkout.c:1579
+#: builtin/checkout.c:1597
 msgid "checkout their version for unmerged files"
 msgstr ""
 
-#: builtin/checkout.c:1583
+#: builtin/checkout.c:1601
 msgid "do not limit pathspecs to sparse entries only"
 msgstr ""
 
-#: builtin/checkout.c:1640
+#: builtin/checkout.c:1659
 #, c-format
 msgid "options '-%c', '-%c', and '%s' cannot be used together"
 msgstr ""
 
-#: builtin/checkout.c:1681
+#: builtin/checkout.c:1700
 msgid "--track needs a branch name"
 msgstr ""
 
-#: builtin/checkout.c:1686
+#: builtin/checkout.c:1705
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr ""
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1737
 #, c-format
 msgid "could not resolve %s"
 msgstr ""
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1753
 msgid "invalid path specification"
 msgstr ""
 
-#: builtin/checkout.c:1741
+#: builtin/checkout.c:1760
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr ""
 
-#: builtin/checkout.c:1745
+#: builtin/checkout.c:1764
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr ""
 
-#: builtin/checkout.c:1770
+#: builtin/checkout.c:1789
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
 msgstr ""
 
-#: builtin/checkout.c:1775
+#: builtin/checkout.c:1794
 msgid "you must specify path(s) to restore"
 msgstr ""
 
-#: builtin/checkout.c:1800 builtin/checkout.c:1802 builtin/checkout.c:1854
-#: builtin/checkout.c:1856 builtin/clone.c:126 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2959
-#: builtin/submodule--helper.c:3253 builtin/worktree.c:484
-#: builtin/worktree.c:486
+#: builtin/checkout.c:1819 builtin/checkout.c:1821 builtin/checkout.c:1873
+#: builtin/checkout.c:1875 builtin/clone.c:130 builtin/remote.c:171
+#: builtin/remote.c:173 builtin/submodule--helper.c:3038
+#: builtin/submodule--helper.c:3371 builtin/worktree.c:556
+#: builtin/worktree.c:558
 msgid "branch"
 msgstr ""
 
-#: builtin/checkout.c:1801
+#: builtin/checkout.c:1820
 msgid "create and checkout a new branch"
 msgstr ""
 
-#: builtin/checkout.c:1803
+#: builtin/checkout.c:1822
 msgid "create/reset and checkout a branch"
 msgstr ""
 
-#: builtin/checkout.c:1804
+#: builtin/checkout.c:1823
 msgid "create reflog for new branch"
 msgstr ""
 
-#: builtin/checkout.c:1806
+#: builtin/checkout.c:1825
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr ""
 
-#: builtin/checkout.c:1807
+#: builtin/checkout.c:1826
 msgid "use overlay mode (default)"
 msgstr ""
 
-#: builtin/checkout.c:1855
+#: builtin/checkout.c:1874
 msgid "create and switch to a new branch"
 msgstr ""
 
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1876
 msgid "create/reset and switch to a branch"
 msgstr ""
 
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1878
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr ""
 
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1880
 msgid "throw away local modifications"
 msgstr ""
 
-#: builtin/checkout.c:1897
+#: builtin/checkout.c:1916
 msgid "which tree-ish to checkout from"
 msgstr ""
 
-#: builtin/checkout.c:1899
+#: builtin/checkout.c:1918
 msgid "restore the index"
 msgstr ""
 
-#: builtin/checkout.c:1901
+#: builtin/checkout.c:1920
 msgid "restore the working tree (default)"
 msgstr ""
 
-#: builtin/checkout.c:1903
+#: builtin/checkout.c:1922
 msgid "ignore unmerged entries"
 msgstr ""
 
-#: builtin/checkout.c:1904
+#: builtin/checkout.c:1923
 msgid "use overlay mode"
 msgstr ""
 
@@ -12087,8 +12439,8 @@ msgid "remove whole directories"
 msgstr ""
 
 #: builtin/clean.c:932 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:937 builtin/log.c:184 builtin/log.c:186
-#: builtin/ls-files.c:651 builtin/name-rev.c:535 builtin/name-rev.c:537
+#: builtin/grep.c:938 builtin/log.c:185 builtin/log.c:187
+#: builtin/ls-files.c:651 builtin/name-rev.c:585 builtin/name-rev.c:587
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr ""
@@ -12121,352 +12473,360 @@ msgstr ""
 msgid "-x and -X cannot be used together"
 msgstr ""
 
-#: builtin/clone.c:45
+#: builtin/clone.c:47
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr ""
 
-#: builtin/clone.c:96
+#: builtin/clone.c:100
 msgid "don't clone shallow repository"
 msgstr ""
 
-#: builtin/clone.c:98
+#: builtin/clone.c:102
 msgid "don't create a checkout"
 msgstr ""
 
-#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:542
+#: builtin/clone.c:103 builtin/clone.c:105 builtin/init-db.c:542
 msgid "create a bare repository"
 msgstr ""
 
-#: builtin/clone.c:103
+#: builtin/clone.c:107
 msgid "create a mirror repository (implies bare)"
 msgstr ""
 
-#: builtin/clone.c:105
+#: builtin/clone.c:109
 msgid "to clone from a local repository"
 msgstr ""
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "don't use local hardlinks, always copy"
 msgstr ""
 
-#: builtin/clone.c:109
+#: builtin/clone.c:113
 msgid "setup as shared repository"
 msgstr ""
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "pathspec"
 msgstr ""
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "initialize submodules in the clone"
 msgstr ""
 
-#: builtin/clone.c:115
+#: builtin/clone.c:119
 msgid "number of submodules cloned in parallel"
 msgstr ""
 
-#: builtin/clone.c:116 builtin/init-db.c:539
+#: builtin/clone.c:120 builtin/init-db.c:539
 msgid "template-directory"
 msgstr ""
 
-#: builtin/clone.c:117 builtin/init-db.c:540
+#: builtin/clone.c:121 builtin/init-db.c:540
 msgid "directory from which templates will be used"
 msgstr ""
 
-#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1871
-#: builtin/submodule--helper.c:2514 builtin/submodule--helper.c:3260
+#: builtin/clone.c:123 builtin/clone.c:125 builtin/submodule--helper.c:1885
+#: builtin/submodule--helper.c:2719 builtin/submodule--helper.c:3378
 msgid "reference repository"
 msgstr ""
 
-#: builtin/clone.c:123 builtin/submodule--helper.c:1873
-#: builtin/submodule--helper.c:2516
+#: builtin/clone.c:127 builtin/submodule--helper.c:1887
+#: builtin/submodule--helper.c:2721
 msgid "use --reference only while cloning"
 msgstr ""
 
-#: builtin/clone.c:124 builtin/column.c:27 builtin/fmt-merge-msg.c:27
+#: builtin/clone.c:128 builtin/column.c:27 builtin/fmt-merge-msg.c:27
 #: builtin/init-db.c:550 builtin/merge-file.c:48 builtin/merge.c:290
-#: builtin/pack-objects.c:3944 builtin/repack.c:665
-#: builtin/submodule--helper.c:3262 t/helper/test-simple-ipc.c:595
+#: builtin/pack-objects.c:3967 builtin/repack.c:669
+#: builtin/submodule--helper.c:3380 t/helper/test-simple-ipc.c:595
 #: t/helper/test-simple-ipc.c:597
 msgid "name"
 msgstr ""
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr ""
 
-#: builtin/clone.c:127
+#: builtin/clone.c:131
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr ""
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133
 msgid "path to git-upload-pack on the remote"
 msgstr ""
 
-#: builtin/clone.c:130 builtin/fetch.c:181 builtin/grep.c:876
+#: builtin/clone.c:134 builtin/fetch.c:182 builtin/grep.c:877
 #: builtin/pull.c:212
 msgid "depth"
 msgstr ""
 
-#: builtin/clone.c:131
+#: builtin/clone.c:135
 msgid "create a shallow clone of that depth"
 msgstr ""
 
-#: builtin/clone.c:132 builtin/fetch.c:183 builtin/pack-objects.c:3933
+#: builtin/clone.c:136 builtin/fetch.c:184 builtin/pack-objects.c:3956
 #: builtin/pull.c:215
 msgid "time"
 msgstr ""
 
-#: builtin/clone.c:133
+#: builtin/clone.c:137
 msgid "create a shallow clone since a specific time"
 msgstr ""
 
-#: builtin/clone.c:134 builtin/fetch.c:185 builtin/fetch.c:208
-#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1022
+#: builtin/clone.c:138 builtin/fetch.c:186 builtin/fetch.c:212
+#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1050
 msgid "revision"
 msgstr ""
 
-#: builtin/clone.c:135 builtin/fetch.c:186 builtin/pull.c:219
+#: builtin/clone.c:139 builtin/fetch.c:187 builtin/pull.c:219
 msgid "deepen history of shallow clone, excluding rev"
 msgstr ""
 
-#: builtin/clone.c:137 builtin/submodule--helper.c:1883
-#: builtin/submodule--helper.c:2530
+#: builtin/clone.c:141 builtin/submodule--helper.c:1897
+#: builtin/submodule--helper.c:2735
 msgid "clone only one branch, HEAD or --branch"
 msgstr ""
 
-#: builtin/clone.c:139
+#: builtin/clone.c:143
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr ""
 
-#: builtin/clone.c:141
+#: builtin/clone.c:145
 msgid "any cloned submodules will be shallow"
 msgstr ""
 
-#: builtin/clone.c:142 builtin/init-db.c:548
+#: builtin/clone.c:146 builtin/init-db.c:548
 msgid "gitdir"
 msgstr ""
 
-#: builtin/clone.c:143 builtin/init-db.c:549
+#: builtin/clone.c:147 builtin/init-db.c:549
 msgid "separate git dir from working tree"
 msgstr ""
 
-#: builtin/clone.c:144
+#: builtin/clone.c:148
 msgid "key=value"
 msgstr ""
 
-#: builtin/clone.c:145
+#: builtin/clone.c:149
 msgid "set config inside the new repository"
 msgstr ""
 
-#: builtin/clone.c:147 builtin/fetch.c:203 builtin/ls-remote.c:77
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
 #: builtin/pull.c:234 builtin/push.c:575 builtin/send-pack.c:200
 msgid "server-specific"
 msgstr ""
 
-#: builtin/clone.c:147 builtin/fetch.c:203 builtin/ls-remote.c:77
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
 #: builtin/pull.c:235 builtin/push.c:575 builtin/send-pack.c:201
 msgid "option to transmit"
 msgstr ""
 
-#: builtin/clone.c:148 builtin/fetch.c:204 builtin/pull.c:238
+#: builtin/clone.c:152 builtin/fetch.c:208 builtin/pull.c:238
 #: builtin/push.c:576
 msgid "use IPv4 addresses only"
 msgstr ""
 
-#: builtin/clone.c:150 builtin/fetch.c:206 builtin/pull.c:241
+#: builtin/clone.c:154 builtin/fetch.c:210 builtin/pull.c:241
 #: builtin/push.c:578
 msgid "use IPv6 addresses only"
 msgstr ""
 
-#: builtin/clone.c:154
+#: builtin/clone.c:158
+msgid "apply partial clone filters to submodules"
+msgstr ""
+
+#: builtin/clone.c:160
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr ""
 
-#: builtin/clone.c:156
+#: builtin/clone.c:162
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr ""
 
-#: builtin/clone.c:231
+#: builtin/clone.c:237
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr ""
 
-#: builtin/clone.c:304
+#: builtin/clone.c:310
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr ""
 
-#: builtin/clone.c:322
+#: builtin/clone.c:328
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr ""
 
-#: builtin/clone.c:353
+#: builtin/clone.c:359
 #, c-format
 msgid "failed to create link '%s'"
 msgstr ""
 
-#: builtin/clone.c:357
+#: builtin/clone.c:363
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr ""
 
-#: builtin/clone.c:362
+#: builtin/clone.c:368
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr ""
 
-#: builtin/clone.c:389
+#: builtin/clone.c:395
 #, c-format
 msgid "done.\n"
 msgstr ""
 
-#: builtin/clone.c:403
+#: builtin/clone.c:409
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
 "and retry with 'git restore --source=HEAD :/'\n"
 msgstr ""
 
-#: builtin/clone.c:480
+#: builtin/clone.c:486
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr ""
 
-#: builtin/clone.c:597
+#: builtin/clone.c:603
 #, c-format
 msgid "unable to update %s"
 msgstr ""
 
-#: builtin/clone.c:645
+#: builtin/clone.c:651
 msgid "failed to initialize sparse-checkout"
 msgstr ""
 
-#: builtin/clone.c:668
+#: builtin/clone.c:674
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 
-#: builtin/clone.c:701
+#: builtin/clone.c:709
 msgid "unable to checkout working tree"
 msgstr ""
 
-#: builtin/clone.c:779
+#: builtin/clone.c:793
 msgid "unable to write parameters to config file"
 msgstr ""
 
-#: builtin/clone.c:842
+#: builtin/clone.c:856
 msgid "cannot repack to clean up"
 msgstr ""
 
-#: builtin/clone.c:844
+#: builtin/clone.c:858
 msgid "cannot unlink temporary alternates file"
 msgstr ""
 
-#: builtin/clone.c:886
+#: builtin/clone.c:901
 msgid "Too many arguments."
 msgstr ""
 
-#: builtin/clone.c:890 contrib/scalar/scalar.c:414
+#: builtin/clone.c:905 contrib/scalar/scalar.c:413
 msgid "You must specify a repository to clone."
 msgstr ""
 
-#: builtin/clone.c:903
+#: builtin/clone.c:918
 #, c-format
 msgid "options '%s' and '%s %s' cannot be used together"
 msgstr ""
 
-#: builtin/clone.c:920
+#: builtin/clone.c:935
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr ""
 
-#: builtin/clone.c:924 builtin/fetch.c:2052
+#: builtin/clone.c:939 builtin/fetch.c:2176
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr ""
 
-#: builtin/clone.c:934
+#: builtin/clone.c:949
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr ""
 
-#: builtin/clone.c:940
+#: builtin/clone.c:955
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr ""
 
-#: builtin/clone.c:954
+#: builtin/clone.c:969
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr ""
 
-#: builtin/clone.c:969 builtin/clone.c:990 builtin/difftool.c:256
-#: builtin/log.c:2012 builtin/worktree.c:281 builtin/worktree.c:313
+#: builtin/clone.c:984 builtin/clone.c:1005 builtin/difftool.c:256
+#: builtin/log.c:2037 builtin/worktree.c:350 builtin/worktree.c:382
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr ""
 
-#: builtin/clone.c:974
+#: builtin/clone.c:989
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr ""
 
-#: builtin/clone.c:994
+#: builtin/clone.c:1009
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr ""
 
-#: builtin/clone.c:996
+#: builtin/clone.c:1011
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr ""
 
-#: builtin/clone.c:1025
+#: builtin/clone.c:1040
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
 msgstr ""
 
-#: builtin/clone.c:1080 builtin/remote.c:200 builtin/remote.c:710
+#: builtin/clone.c:1116 builtin/remote.c:201 builtin/remote.c:721
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr ""
 
-#: builtin/clone.c:1121
+#: builtin/clone.c:1157
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr ""
 
-#: builtin/clone.c:1123
+#: builtin/clone.c:1159
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr ""
 
-#: builtin/clone.c:1125
+#: builtin/clone.c:1161
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 
-#: builtin/clone.c:1127
+#: builtin/clone.c:1163
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr ""
 
-#: builtin/clone.c:1132
+#: builtin/clone.c:1168
 msgid "source repository is shallow, ignoring --local"
 msgstr ""
 
-#: builtin/clone.c:1137
+#: builtin/clone.c:1173
 msgid "--local is ignored"
 msgstr ""
 
-#: builtin/clone.c:1216 builtin/clone.c:1276
+#: builtin/clone.c:1185
+msgid "cannot clone from filtered bundle"
+msgstr ""
+
+#: builtin/clone.c:1265 builtin/clone.c:1324
 msgid "remote transport reported error"
 msgstr ""
 
-#: builtin/clone.c:1228 builtin/clone.c:1239
+#: builtin/clone.c:1277 builtin/clone.c:1289
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr ""
 
-#: builtin/clone.c:1242
+#: builtin/clone.c:1292
 msgid "You appear to have cloned an empty repository."
 msgstr ""
 
@@ -12514,7 +12874,7 @@ msgid ""
 "paths] [--[no-]max-new-filters <n>] [--[no-]progress] <split options>"
 msgstr ""
 
-#: builtin/commit-graph.c:51 builtin/fetch.c:192 builtin/log.c:1794
+#: builtin/commit-graph.c:51 builtin/fetch.c:196 builtin/log.c:1813
 msgid "dir"
 msgstr ""
 
@@ -12610,7 +12970,7 @@ msgstr ""
 msgid "duplicate parent %s ignored"
 msgstr ""
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:577
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:590
 #, c-format
 msgid "not a valid object name %s"
 msgstr ""
@@ -12633,13 +12993,13 @@ msgstr ""
 msgid "id of a parent commit object"
 msgstr ""
 
-#: builtin/commit-tree.c:112 builtin/commit.c:1627 builtin/merge.c:284
-#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1677
-#: builtin/tag.c:454
+#: builtin/commit-tree.c:112 builtin/commit.c:1626 builtin/merge.c:284
+#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1666
+#: builtin/tag.c:455
 msgid "message"
 msgstr ""
 
-#: builtin/commit-tree.c:113 builtin/commit.c:1627
+#: builtin/commit-tree.c:113 builtin/commit.c:1626
 msgid "commit message"
 msgstr ""
 
@@ -12647,7 +13007,7 @@ msgstr ""
 msgid "read commit log message from file"
 msgstr ""
 
-#: builtin/commit-tree.c:119 builtin/commit.c:1644 builtin/merge.c:303
+#: builtin/commit-tree.c:119 builtin/commit.c:1643 builtin/merge.c:303
 #: builtin/pull.c:180 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr ""
@@ -12660,22 +13020,22 @@ msgstr ""
 msgid "git commit-tree: failed to read"
 msgstr ""
 
-#: builtin/commit.c:42
+#: builtin/commit.c:43
 msgid "git commit [<options>] [--] <pathspec>..."
 msgstr ""
 
-#: builtin/commit.c:47
+#: builtin/commit.c:48
 msgid "git status [<options>] [--] <pathspec>..."
 msgstr ""
 
-#: builtin/commit.c:52
+#: builtin/commit.c:53
 msgid ""
 "You asked to amend the most recent commit, but doing so would make\n"
 "it empty. You can repeat your command with --allow-empty, or you can\n"
 "remove the commit entirely with \"git reset HEAD^\".\n"
 msgstr ""
 
-#: builtin/commit.c:57
+#: builtin/commit.c:58
 msgid ""
 "The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
 "If you wish to commit it anyway, use:\n"
@@ -12684,15 +13044,15 @@ msgid ""
 "\n"
 msgstr ""
 
-#: builtin/commit.c:64
+#: builtin/commit.c:65
 msgid "Otherwise, please use 'git rebase --skip'\n"
 msgstr ""
 
-#: builtin/commit.c:67
+#: builtin/commit.c:68
 msgid "Otherwise, please use 'git cherry-pick --skip'\n"
 msgstr ""
 
-#: builtin/commit.c:70
+#: builtin/commit.c:71
 msgid ""
 "and then use:\n"
 "\n"
@@ -12705,132 +13065,132 @@ msgid ""
 "\n"
 msgstr ""
 
-#: builtin/commit.c:325
+#: builtin/commit.c:326
 msgid "failed to unpack HEAD tree object"
 msgstr ""
 
-#: builtin/commit.c:375
+#: builtin/commit.c:376
 msgid "No paths with --include/--only does not make sense."
 msgstr ""
 
-#: builtin/commit.c:387
+#: builtin/commit.c:388
 msgid "unable to create temporary index"
 msgstr ""
 
-#: builtin/commit.c:396
+#: builtin/commit.c:397
 msgid "interactive add failed"
 msgstr ""
 
-#: builtin/commit.c:411
+#: builtin/commit.c:412
 msgid "unable to update temporary index"
 msgstr ""
 
-#: builtin/commit.c:413
+#: builtin/commit.c:414
 msgid "Failed to update main cache tree"
 msgstr ""
 
-#: builtin/commit.c:438 builtin/commit.c:461 builtin/commit.c:509
+#: builtin/commit.c:439 builtin/commit.c:462 builtin/commit.c:510
 msgid "unable to write new_index file"
 msgstr ""
 
-#: builtin/commit.c:490
+#: builtin/commit.c:491
 msgid "cannot do a partial commit during a merge."
 msgstr ""
 
-#: builtin/commit.c:492
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr ""
 
-#: builtin/commit.c:494
+#: builtin/commit.c:495
 msgid "cannot do a partial commit during a rebase."
 msgstr ""
 
-#: builtin/commit.c:502
+#: builtin/commit.c:503
 msgid "cannot read the index"
 msgstr ""
 
-#: builtin/commit.c:521
+#: builtin/commit.c:522
 msgid "unable to write temporary index file"
 msgstr ""
 
-#: builtin/commit.c:619
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr ""
 
-#: builtin/commit.c:621
+#: builtin/commit.c:622
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr ""
 
-#: builtin/commit.c:640
+#: builtin/commit.c:641
 msgid "malformed --author parameter"
 msgstr ""
 
-#: builtin/commit.c:693
+#: builtin/commit.c:694
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
 msgstr ""
 
-#: builtin/commit.c:747 builtin/commit.c:781 builtin/commit.c:1166
+#: builtin/commit.c:750 builtin/commit.c:784 builtin/commit.c:1170
 #, c-format
 msgid "could not lookup commit %s"
 msgstr ""
 
-#: builtin/commit.c:759 builtin/shortlog.c:416
+#: builtin/commit.c:762 builtin/shortlog.c:417
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr ""
 
-#: builtin/commit.c:761
+#: builtin/commit.c:764
 msgid "could not read log from standard input"
 msgstr ""
 
-#: builtin/commit.c:765
+#: builtin/commit.c:768
 #, c-format
 msgid "could not read log file '%s'"
 msgstr ""
 
-#: builtin/commit.c:802
+#: builtin/commit.c:805
 #, c-format
 msgid "options '%s' and '%s:%s' cannot be used together"
 msgstr ""
 
-#: builtin/commit.c:814 builtin/commit.c:830
+#: builtin/commit.c:817 builtin/commit.c:833
 msgid "could not read SQUASH_MSG"
 msgstr ""
 
-#: builtin/commit.c:821
+#: builtin/commit.c:824
 msgid "could not read MERGE_MSG"
 msgstr ""
 
-#: builtin/commit.c:881
+#: builtin/commit.c:884
 msgid "could not write commit template"
 msgstr ""
 
-#: builtin/commit.c:894
+#: builtin/commit.c:897
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
 "with '%c' will be ignored.\n"
 msgstr ""
 
-#: builtin/commit.c:896
+#: builtin/commit.c:899
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
 "with '%c' will be ignored, and an empty message aborts the commit.\n"
 msgstr ""
 
-#: builtin/commit.c:900
+#: builtin/commit.c:903
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
 "with '%c' will be kept; you may remove them yourself if you want to.\n"
 msgstr ""
 
-#: builtin/commit.c:904
+#: builtin/commit.c:907
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -12838,7 +13198,7 @@ msgid ""
 "An empty message aborts the commit.\n"
 msgstr ""
 
-#: builtin/commit.c:916
+#: builtin/commit.c:919
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -12847,7 +13207,7 @@ msgid ""
 "and try again.\n"
 msgstr ""
 
-#: builtin/commit.c:921
+#: builtin/commit.c:924
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -12856,364 +13216,344 @@ msgid ""
 "and try again.\n"
 msgstr ""
 
-#: builtin/commit.c:948
+#: builtin/commit.c:951
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr ""
 
-#: builtin/commit.c:956
+#: builtin/commit.c:959
 #, c-format
 msgid "%sDate:      %s"
 msgstr ""
 
-#: builtin/commit.c:963
+#: builtin/commit.c:966
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr ""
 
-#: builtin/commit.c:981
+#: builtin/commit.c:984
 msgid "Cannot read index"
 msgstr ""
 
-#: builtin/commit.c:1026
+#: builtin/commit.c:1029
 msgid "unable to pass trailers to --trailers"
 msgstr ""
 
-#: builtin/commit.c:1066
+#: builtin/commit.c:1069
 msgid "Error building trees"
 msgstr ""
 
-#: builtin/commit.c:1080 builtin/tag.c:316
+#: builtin/commit.c:1083 builtin/tag.c:317
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr ""
 
-#: builtin/commit.c:1124
+#: builtin/commit.c:1128
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr ""
 
-#: builtin/commit.c:1138
+#: builtin/commit.c:1142
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr ""
 
-#: builtin/commit.c:1156 builtin/commit.c:1451
+#: builtin/commit.c:1160 builtin/commit.c:1450
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr ""
 
-#: builtin/commit.c:1227
+#: builtin/commit.c:1231
 msgid "You are in the middle of a merge -- cannot reword."
 msgstr ""
 
-#: builtin/commit.c:1229
+#: builtin/commit.c:1233
 msgid "You are in the middle of a cherry-pick -- cannot reword."
 msgstr ""
 
-#: builtin/commit.c:1232
+#: builtin/commit.c:1236
 #, c-format
 msgid "reword option of '%s' and path '%s' cannot be used together"
 msgstr ""
 
-#: builtin/commit.c:1234
+#: builtin/commit.c:1238
 #, c-format
 msgid "reword option of '%s' and '%s' cannot be used together"
 msgstr ""
 
-#: builtin/commit.c:1254
-msgid "Using both --reset-author and --author does not make sense"
-msgstr ""
-
-#: builtin/commit.c:1261
+#: builtin/commit.c:1263
 msgid "You have nothing to amend."
 msgstr ""
 
-#: builtin/commit.c:1264
+#: builtin/commit.c:1266
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr ""
 
-#: builtin/commit.c:1266
+#: builtin/commit.c:1268
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr ""
 
-#: builtin/commit.c:1268
+#: builtin/commit.c:1270
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr ""
 
-#: builtin/commit.c:1271
-msgid "Options --squash and --fixup cannot be used together"
-msgstr ""
-
-#: builtin/commit.c:1281
-msgid "Only one of -c/-C/-F/--fixup can be used."
-msgstr ""
-
-#: builtin/commit.c:1283
-msgid "Option -m cannot be combined with -c/-C/-F."
-msgstr ""
-
-#: builtin/commit.c:1292
+#: builtin/commit.c:1290
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr ""
 
-#: builtin/commit.c:1310
-msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
-msgstr ""
-
-#: builtin/commit.c:1338
+#: builtin/commit.c:1337
 #, c-format
 msgid "unknown option: --fixup=%s:%s"
 msgstr ""
 
-#: builtin/commit.c:1355
+#: builtin/commit.c:1354
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr ""
 
-#: builtin/commit.c:1486 builtin/commit.c:1655
+#: builtin/commit.c:1485 builtin/commit.c:1654
 msgid "show status concisely"
 msgstr ""
 
-#: builtin/commit.c:1488 builtin/commit.c:1657
+#: builtin/commit.c:1487 builtin/commit.c:1656
 msgid "show branch information"
 msgstr ""
 
-#: builtin/commit.c:1490
+#: builtin/commit.c:1489
 msgid "show stash information"
 msgstr ""
 
-#: builtin/commit.c:1492 builtin/commit.c:1659
+#: builtin/commit.c:1491 builtin/commit.c:1658
 msgid "compute full ahead/behind values"
 msgstr ""
 
-#: builtin/commit.c:1494
+#: builtin/commit.c:1493
 msgid "version"
 msgstr ""
 
-#: builtin/commit.c:1494 builtin/commit.c:1661 builtin/push.c:551
-#: builtin/worktree.c:690
+#: builtin/commit.c:1493 builtin/commit.c:1660 builtin/push.c:551
+#: builtin/worktree.c:765
 msgid "machine-readable output"
 msgstr ""
 
-#: builtin/commit.c:1497 builtin/commit.c:1663
+#: builtin/commit.c:1496 builtin/commit.c:1662
 msgid "show status in long format (default)"
 msgstr ""
 
-#: builtin/commit.c:1500 builtin/commit.c:1666
+#: builtin/commit.c:1499 builtin/commit.c:1665
 msgid "terminate entries with NUL"
 msgstr ""
 
-#: builtin/commit.c:1502 builtin/commit.c:1506 builtin/commit.c:1669
+#: builtin/commit.c:1501 builtin/commit.c:1505 builtin/commit.c:1668
 #: builtin/fast-export.c:1172 builtin/fast-export.c:1175
-#: builtin/fast-export.c:1178 builtin/rebase.c:1111 parse-options.h:337
+#: builtin/fast-export.c:1178 builtin/rebase.c:1139 parse-options.h:368
 msgid "mode"
 msgstr ""
 
-#: builtin/commit.c:1503 builtin/commit.c:1669
+#: builtin/commit.c:1502 builtin/commit.c:1668
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr ""
 
-#: builtin/commit.c:1507
+#: builtin/commit.c:1506
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
 msgstr ""
 
-#: builtin/commit.c:1509 parse-options.h:192
+#: builtin/commit.c:1508 parse-options.h:197
 msgid "when"
 msgstr ""
 
-#: builtin/commit.c:1510
+#: builtin/commit.c:1509
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
 msgstr ""
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1511
 msgid "list untracked files in columns"
 msgstr ""
 
-#: builtin/commit.c:1513
+#: builtin/commit.c:1512
 msgid "do not detect renames"
 msgstr ""
 
-#: builtin/commit.c:1515
+#: builtin/commit.c:1514
 msgid "detect renames, optionally set similarity index"
 msgstr ""
 
-#: builtin/commit.c:1538
+#: builtin/commit.c:1537
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr ""
 
-#: builtin/commit.c:1620
+#: builtin/commit.c:1619
 msgid "suppress summary after successful commit"
 msgstr ""
 
-#: builtin/commit.c:1621
+#: builtin/commit.c:1620
 msgid "show diff in commit message template"
 msgstr ""
 
-#: builtin/commit.c:1623
+#: builtin/commit.c:1622
 msgid "Commit message options"
 msgstr ""
 
-#: builtin/commit.c:1624 builtin/merge.c:288 builtin/tag.c:456
+#: builtin/commit.c:1623 builtin/merge.c:288 builtin/tag.c:457
 msgid "read message from file"
 msgstr ""
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1624
 msgid "author"
 msgstr ""
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1624
 msgid "override author for commit"
 msgstr ""
 
-#: builtin/commit.c:1626 builtin/gc.c:551
+#: builtin/commit.c:1625 builtin/gc.c:551
 msgid "date"
 msgstr ""
 
-#: builtin/commit.c:1626
+#: builtin/commit.c:1625
 msgid "override date for commit"
 msgstr ""
 
-#: builtin/commit.c:1628 builtin/commit.c:1629 builtin/commit.c:1635
-#: parse-options.h:329 ref-filter.h:89
+#: builtin/commit.c:1627 builtin/commit.c:1628 builtin/commit.c:1634
+#: parse-options.h:360 ref-filter.h:89
 msgid "commit"
 msgstr ""
 
-#: builtin/commit.c:1628
+#: builtin/commit.c:1627
 msgid "reuse and edit message from specified commit"
 msgstr ""
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1628
 msgid "reuse message from specified commit"
 msgstr ""
 
 #. TRANSLATORS: Leave "[(amend|reword):]" as-is,
 #. and only translate <commit>.
 #.
-#: builtin/commit.c:1634
+#: builtin/commit.c:1633
 msgid "[(amend|reword):]commit"
 msgstr ""
 
-#: builtin/commit.c:1634
+#: builtin/commit.c:1633
 msgid ""
 "use autosquash formatted message to fixup or amend/reword specified commit"
 msgstr ""
 
-#: builtin/commit.c:1635
+#: builtin/commit.c:1634
 msgid "use autosquash formatted message to squash specified commit"
 msgstr ""
 
-#: builtin/commit.c:1636
+#: builtin/commit.c:1635
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr ""
 
-#: builtin/commit.c:1637 builtin/interpret-trailers.c:111
+#: builtin/commit.c:1636 builtin/interpret-trailers.c:111
 msgid "trailer"
 msgstr ""
 
-#: builtin/commit.c:1637
+#: builtin/commit.c:1636
 msgid "add custom trailer(s)"
 msgstr ""
 
-#: builtin/commit.c:1638 builtin/log.c:1769 builtin/merge.c:306
+#: builtin/commit.c:1637 builtin/log.c:1788 builtin/merge.c:306
 #: builtin/pull.c:146 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr ""
 
-#: builtin/commit.c:1639
+#: builtin/commit.c:1638
 msgid "use specified template file"
 msgstr ""
 
-#: builtin/commit.c:1640
+#: builtin/commit.c:1639
 msgid "force edit of commit"
 msgstr ""
 
-#: builtin/commit.c:1642
+#: builtin/commit.c:1641
 msgid "include status in commit message template"
 msgstr ""
 
-#: builtin/commit.c:1647
+#: builtin/commit.c:1646
 msgid "Commit contents options"
 msgstr ""
 
-#: builtin/commit.c:1648
+#: builtin/commit.c:1647
 msgid "commit all changed files"
 msgstr ""
 
-#: builtin/commit.c:1649
+#: builtin/commit.c:1648
 msgid "add specified files to index for commit"
 msgstr ""
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1649
 msgid "interactively add files"
 msgstr ""
 
-#: builtin/commit.c:1651
+#: builtin/commit.c:1650
 msgid "interactively add changes"
 msgstr ""
 
-#: builtin/commit.c:1652
+#: builtin/commit.c:1651
 msgid "commit only specified files"
 msgstr ""
 
-#: builtin/commit.c:1653
+#: builtin/commit.c:1652
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr ""
 
-#: builtin/commit.c:1654
+#: builtin/commit.c:1653
 msgid "show what would be committed"
 msgstr ""
 
-#: builtin/commit.c:1667
+#: builtin/commit.c:1666
 msgid "amend previous commit"
 msgstr ""
 
-#: builtin/commit.c:1668
+#: builtin/commit.c:1667
 msgid "bypass post-rewrite hook"
 msgstr ""
 
-#: builtin/commit.c:1675
+#: builtin/commit.c:1674
 msgid "ok to record an empty change"
 msgstr ""
 
-#: builtin/commit.c:1677
+#: builtin/commit.c:1676
 msgid "ok to record a change with an empty message"
 msgstr ""
 
-#: builtin/commit.c:1753
+#: builtin/commit.c:1752
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr ""
 
-#: builtin/commit.c:1760
+#: builtin/commit.c:1759
 msgid "could not read MERGE_MODE"
 msgstr ""
 
-#: builtin/commit.c:1781
+#: builtin/commit.c:1780
 #, c-format
 msgid "could not read commit message: %s"
 msgstr ""
 
-#: builtin/commit.c:1788
+#: builtin/commit.c:1787
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr ""
 
-#: builtin/commit.c:1793
+#: builtin/commit.c:1792
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr ""
 
-#: builtin/commit.c:1804
+#: builtin/commit.c:1803
 #, c-format
 msgid "Aborting commit due to empty commit message body.\n"
 msgstr ""
 
-#: builtin/commit.c:1840
+#: builtin/commit.c:1839
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -13333,6 +13673,10 @@ msgstr ""
 msgid "Type"
 msgstr ""
 
+#: builtin/config.c:154 builtin/env--helper.c:42 builtin/hash-object.c:97
+msgid "type"
+msgstr ""
+
 #: builtin/config.c:154 builtin/env--helper.c:43
 msgid "value is given this type"
 msgstr ""
@@ -13531,10 +13875,6 @@ msgstr ""
 msgid "no such section: %s"
 msgstr ""
 
-#: builtin/count-objects.c:90
-msgid "git count-objects [-v] [-H | --human-readable]"
-msgstr ""
-
 #: builtin/count-objects.c:100
 msgid "print sizes in human readable format"
 msgstr ""
@@ -13691,7 +14031,7 @@ msgstr ""
 msgid "do not consider tags matching <pattern>"
 msgstr ""
 
-#: builtin/describe.c:570 builtin/name-rev.c:544
+#: builtin/describe.c:570 builtin/name-rev.c:595
 msgid "show abbreviated commit object as fallback"
 msgstr ""
 
@@ -13739,7 +14079,7 @@ msgstr ""
 msgid "Not a git repository"
 msgstr ""
 
-#: builtin/diff.c:537 builtin/grep.c:698
+#: builtin/diff.c:537 builtin/grep.c:700
 #, c-format
 msgid "invalid object '%s' given."
 msgstr ""
@@ -13853,11 +14193,11 @@ msgstr ""
 msgid "difftool requires worktree or --no-index"
 msgstr ""
 
-#: builtin/difftool.c:744
+#: builtin/difftool.c:745
 msgid "no <tool> given for --tool=<tool>"
 msgstr ""
 
-#: builtin/difftool.c:751
+#: builtin/difftool.c:752
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr ""
 
@@ -13865,10 +14205,6 @@ msgstr ""
 msgid "git env--helper --type=[bool|ulong] <options> <env-var>"
 msgstr ""
 
-#: builtin/env--helper.c:42 builtin/hash-object.c:96
-msgid "type"
-msgstr ""
-
 #: builtin/env--helper.c:46
 msgid "default for git_env_*(...) to fall back on"
 msgstr ""
@@ -13890,7 +14226,7 @@ msgid ""
 msgstr ""
 
 #: builtin/fast-export.c:29
-msgid "git fast-export [rev-list-opts]"
+msgid "git fast-export [<rev-list-opts>]"
 msgstr ""
 
 #: builtin/fast-export.c:843
@@ -13945,7 +14281,7 @@ msgstr ""
 msgid "skip output of blob data"
 msgstr ""
 
-#: builtin/fast-export.c:1196 builtin/log.c:1841
+#: builtin/fast-export.c:1196 builtin/log.c:1860
 msgid "refspec"
 msgstr ""
 
@@ -13977,36 +14313,36 @@ msgstr ""
 msgid "label tags with mark ids"
 msgstr ""
 
-#: builtin/fast-import.c:3090
+#: builtin/fast-import.c:3097
 #, c-format
 msgid "Missing from marks for submodule '%s'"
 msgstr ""
 
-#: builtin/fast-import.c:3092
+#: builtin/fast-import.c:3099
 #, c-format
 msgid "Missing to marks for submodule '%s'"
 msgstr ""
 
-#: builtin/fast-import.c:3227
+#: builtin/fast-import.c:3234
 #, c-format
 msgid "Expected 'mark' command, got %s"
 msgstr ""
 
-#: builtin/fast-import.c:3232
+#: builtin/fast-import.c:3239
 #, c-format
 msgid "Expected 'to' command, got %s"
 msgstr ""
 
-#: builtin/fast-import.c:3324
+#: builtin/fast-import.c:3331
 msgid "Expected format name:filename for submodule rewrite option"
 msgstr ""
 
-#: builtin/fast-import.c:3379
+#: builtin/fast-import.c:3386
 #, c-format
 msgid "feature '%s' forbidden in input without --allow-unsafe-features"
 msgstr ""
 
-#: builtin/fetch-pack.c:242
+#: builtin/fetch-pack.c:246
 #, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr ""
@@ -14027,212 +14363,211 @@ msgstr ""
 msgid "git fetch --all [<options>]"
 msgstr ""
 
-#: builtin/fetch.c:123
+#: builtin/fetch.c:124
 msgid "fetch.parallel cannot be negative"
 msgstr ""
 
-#: builtin/fetch.c:146 builtin/pull.c:189
+#: builtin/fetch.c:147 builtin/pull.c:189
 msgid "fetch from all remotes"
 msgstr ""
 
-#: builtin/fetch.c:148 builtin/pull.c:249
+#: builtin/fetch.c:149 builtin/pull.c:249
 msgid "set upstream for git pull/fetch"
 msgstr ""
 
-#: builtin/fetch.c:150 builtin/pull.c:192
+#: builtin/fetch.c:151 builtin/pull.c:192
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr ""
 
-#: builtin/fetch.c:152
+#: builtin/fetch.c:153
 msgid "use atomic transaction to update references"
 msgstr ""
 
-#: builtin/fetch.c:154 builtin/pull.c:195
+#: builtin/fetch.c:155 builtin/pull.c:195
 msgid "path to upload pack on remote end"
 msgstr ""
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:156
 msgid "force overwrite of local reference"
 msgstr ""
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:158
 msgid "fetch from multiple remotes"
 msgstr ""
 
-#: builtin/fetch.c:159 builtin/pull.c:199
+#: builtin/fetch.c:160 builtin/pull.c:199
 msgid "fetch all tags and associated objects"
 msgstr ""
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:162
 msgid "do not fetch all tags (--no-tags)"
 msgstr ""
 
-#: builtin/fetch.c:163
+#: builtin/fetch.c:164
 msgid "number of submodules fetched in parallel"
 msgstr ""
 
-#: builtin/fetch.c:165
+#: builtin/fetch.c:166
 msgid "modify the refspec to place all refs within refs/prefetch/"
 msgstr ""
 
-#: builtin/fetch.c:167 builtin/pull.c:202
+#: builtin/fetch.c:168 builtin/pull.c:202
 msgid "prune remote-tracking branches no longer on remote"
 msgstr ""
 
-#: builtin/fetch.c:169
+#: builtin/fetch.c:170
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 
-#: builtin/fetch.c:170 builtin/fetch.c:195 builtin/pull.c:123
+#: builtin/fetch.c:171 builtin/fetch.c:199 builtin/pull.c:123
 msgid "on-demand"
 msgstr ""
 
-#: builtin/fetch.c:171
+#: builtin/fetch.c:172
 msgid "control recursive fetching of submodules"
 msgstr ""
 
-#: builtin/fetch.c:176
+#: builtin/fetch.c:177
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr ""
 
-#: builtin/fetch.c:177 builtin/pull.c:210
+#: builtin/fetch.c:178 builtin/pull.c:210
 msgid "keep downloaded pack"
 msgstr ""
 
-#: builtin/fetch.c:179
+#: builtin/fetch.c:180
 msgid "allow updating of HEAD ref"
 msgstr ""
 
-#: builtin/fetch.c:182 builtin/fetch.c:188 builtin/pull.c:213
+#: builtin/fetch.c:183 builtin/fetch.c:189 builtin/pull.c:213
 #: builtin/pull.c:222
 msgid "deepen history of shallow clone"
 msgstr ""
 
-#: builtin/fetch.c:184 builtin/pull.c:216
+#: builtin/fetch.c:185 builtin/pull.c:216
 msgid "deepen history of shallow repository based on time"
 msgstr ""
 
-#: builtin/fetch.c:190 builtin/pull.c:225
+#: builtin/fetch.c:191 builtin/pull.c:225
 msgid "convert to a complete repository"
 msgstr ""
 
-#: builtin/fetch.c:193
+#: builtin/fetch.c:194
+msgid "re-fetch without negotiating common commits"
+msgstr ""
+
+#: builtin/fetch.c:197
 msgid "prepend this to submodule path output"
 msgstr ""
 
-#: builtin/fetch.c:196
+#: builtin/fetch.c:200
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
 msgstr ""
 
-#: builtin/fetch.c:200 builtin/pull.c:228
+#: builtin/fetch.c:204 builtin/pull.c:228
 msgid "accept refs that update .git/shallow"
 msgstr ""
 
-#: builtin/fetch.c:201 builtin/pull.c:230
+#: builtin/fetch.c:205 builtin/pull.c:230
 msgid "refmap"
 msgstr ""
 
-#: builtin/fetch.c:202 builtin/pull.c:231
+#: builtin/fetch.c:206 builtin/pull.c:231
 msgid "specify fetch refmap"
 msgstr ""
 
-#: builtin/fetch.c:209 builtin/pull.c:244
+#: builtin/fetch.c:213 builtin/pull.c:244
 msgid "report that we have only objects reachable from this object"
 msgstr ""
 
-#: builtin/fetch.c:211
+#: builtin/fetch.c:215
 msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
 msgstr ""
 
-#: builtin/fetch.c:214 builtin/fetch.c:216
+#: builtin/fetch.c:218 builtin/fetch.c:220
 msgid "run 'maintenance --auto' after fetching"
 msgstr ""
 
-#: builtin/fetch.c:218 builtin/pull.c:247
+#: builtin/fetch.c:222 builtin/pull.c:247
 msgid "check for forced-updates on all updated branches"
 msgstr ""
 
-#: builtin/fetch.c:220
+#: builtin/fetch.c:224
 msgid "write the commit-graph after fetching"
 msgstr ""
 
-#: builtin/fetch.c:222
+#: builtin/fetch.c:226
 msgid "accept refspecs from stdin"
 msgstr ""
 
-#: builtin/fetch.c:592
+#: builtin/fetch.c:618
 msgid "couldn't find remote ref HEAD"
 msgstr ""
 
-#: builtin/fetch.c:766
-#, c-format
-msgid "configuration fetch.output contains invalid value %s"
-msgstr ""
-
-#: builtin/fetch.c:867
+#: builtin/fetch.c:893
 #, c-format
 msgid "object %s not found"
 msgstr ""
 
-#: builtin/fetch.c:871
+#: builtin/fetch.c:897
 msgid "[up to date]"
 msgstr ""
 
-#: builtin/fetch.c:883 builtin/fetch.c:901 builtin/fetch.c:973
+#: builtin/fetch.c:909 builtin/fetch.c:927 builtin/fetch.c:999
 msgid "[rejected]"
 msgstr ""
 
-#: builtin/fetch.c:885
+#: builtin/fetch.c:911
 msgid "can't fetch in current branch"
 msgstr ""
 
-#: builtin/fetch.c:886
+#: builtin/fetch.c:912
 msgid "checked out in another worktree"
 msgstr ""
 
-#: builtin/fetch.c:896
+#: builtin/fetch.c:922
 msgid "[tag update]"
 msgstr ""
 
-#: builtin/fetch.c:897 builtin/fetch.c:934 builtin/fetch.c:956
-#: builtin/fetch.c:968
+#: builtin/fetch.c:923 builtin/fetch.c:960 builtin/fetch.c:982
+#: builtin/fetch.c:994
 msgid "unable to update local ref"
 msgstr ""
 
-#: builtin/fetch.c:901
+#: builtin/fetch.c:927
 msgid "would clobber existing tag"
 msgstr ""
 
-#: builtin/fetch.c:923
+#: builtin/fetch.c:949
 msgid "[new tag]"
 msgstr ""
 
-#: builtin/fetch.c:926
+#: builtin/fetch.c:952
 msgid "[new branch]"
 msgstr ""
 
-#: builtin/fetch.c:929
+#: builtin/fetch.c:955
 msgid "[new ref]"
 msgstr ""
 
-#: builtin/fetch.c:968
+#: builtin/fetch.c:994
 msgid "forced update"
 msgstr ""
 
-#: builtin/fetch.c:973
+#: builtin/fetch.c:999
 msgid "non-fast-forward"
 msgstr ""
 
-#: builtin/fetch.c:1076
+#: builtin/fetch.c:1102
 msgid ""
 "fetch normally indicates which branches had a forced update,\n"
 "but that check has been disabled; to re-enable, use '--show-forced-updates'\n"
 "flag or run 'git config fetch.showForcedUpdates true'"
 msgstr ""
 
-#: builtin/fetch.c:1080
+#: builtin/fetch.c:1106
 #, c-format
 msgid ""
 "it took %.2f seconds to check forced updates; you can use\n"
@@ -14241,168 +14576,168 @@ msgid ""
 "to avoid this check\n"
 msgstr ""
 
-#: builtin/fetch.c:1112
+#: builtin/fetch.c:1136
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr ""
 
-#: builtin/fetch.c:1141
+#: builtin/fetch.c:1156
 #, c-format
 msgid "rejected %s because shallow roots are not allowed to be updated"
 msgstr ""
 
-#: builtin/fetch.c:1231 builtin/fetch.c:1379
+#: builtin/fetch.c:1259 builtin/fetch.c:1418
 #, c-format
 msgid "From %.*s\n"
 msgstr ""
 
-#: builtin/fetch.c:1252
+#: builtin/fetch.c:1269
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
 " 'git remote prune %s' to remove any old, conflicting branches"
 msgstr ""
 
-#: builtin/fetch.c:1349
+#: builtin/fetch.c:1377
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr ""
 
-#: builtin/fetch.c:1350
+#: builtin/fetch.c:1378
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr ""
 
-#: builtin/fetch.c:1382
+#: builtin/fetch.c:1421
 msgid "[deleted]"
 msgstr ""
 
-#: builtin/fetch.c:1383 builtin/remote.c:1128
+#: builtin/fetch.c:1422 builtin/remote.c:1153
 msgid "(none)"
 msgstr ""
 
-#: builtin/fetch.c:1405
+#: builtin/fetch.c:1446
 #, c-format
 msgid "refusing to fetch into branch '%s' checked out at '%s'"
 msgstr ""
 
-#: builtin/fetch.c:1425
+#: builtin/fetch.c:1466
 #, c-format
 msgid "option \"%s\" value \"%s\" is not valid for %s"
 msgstr ""
 
-#: builtin/fetch.c:1428
+#: builtin/fetch.c:1469
 #, c-format
 msgid "option \"%s\" is ignored for %s\n"
 msgstr ""
 
-#: builtin/fetch.c:1455
+#: builtin/fetch.c:1496
 #, c-format
 msgid "the object %s does not exist"
 msgstr ""
 
-#: builtin/fetch.c:1643
+#: builtin/fetch.c:1748
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr ""
 
-#: builtin/fetch.c:1655
+#: builtin/fetch.c:1760
 #, c-format
 msgid ""
 "could not set upstream of HEAD to '%s' from '%s' when it does not point to "
 "any branch."
 msgstr ""
 
-#: builtin/fetch.c:1668
+#: builtin/fetch.c:1773
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr ""
 
-#: builtin/fetch.c:1670
+#: builtin/fetch.c:1775
 msgid "not setting upstream for a remote tag"
 msgstr ""
 
-#: builtin/fetch.c:1672
+#: builtin/fetch.c:1777
 msgid "unknown branch type"
 msgstr ""
 
-#: builtin/fetch.c:1674
+#: builtin/fetch.c:1779
 msgid ""
 "no source branch found;\n"
 "you need to specify exactly one branch with the --set-upstream option"
 msgstr ""
 
-#: builtin/fetch.c:1804 builtin/fetch.c:1867
+#: builtin/fetch.c:1904 builtin/fetch.c:1967
 #, c-format
 msgid "Fetching %s\n"
 msgstr ""
 
-#: builtin/fetch.c:1814 builtin/fetch.c:1869
+#: builtin/fetch.c:1914 builtin/fetch.c:1969
 #, c-format
 msgid "could not fetch %s"
 msgstr ""
 
-#: builtin/fetch.c:1826
+#: builtin/fetch.c:1926
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr ""
 
-#: builtin/fetch.c:1930
+#: builtin/fetch.c:2030
 msgid ""
 "no remote repository specified; please specify either a URL or a\n"
 "remote name from which new revisions should be fetched"
 msgstr ""
 
-#: builtin/fetch.c:1966
+#: builtin/fetch.c:2066
 msgid "you need to specify a tag name"
 msgstr ""
 
-#: builtin/fetch.c:2032
-msgid "--negotiate-only needs one or more --negotiate-tip=*"
+#: builtin/fetch.c:2156
+msgid "--negotiate-only needs one or more --negotiation-tip=*"
 msgstr ""
 
-#: builtin/fetch.c:2036
+#: builtin/fetch.c:2160
 msgid "negative depth in --deepen is not supported"
 msgstr ""
 
-#: builtin/fetch.c:2045
+#: builtin/fetch.c:2169
 msgid "--unshallow on a complete repository does not make sense"
 msgstr ""
 
-#: builtin/fetch.c:2062
+#: builtin/fetch.c:2186
 msgid "fetch --all does not take a repository argument"
 msgstr ""
 
-#: builtin/fetch.c:2064
+#: builtin/fetch.c:2188
 msgid "fetch --all does not make sense with refspecs"
 msgstr ""
 
-#: builtin/fetch.c:2073
+#: builtin/fetch.c:2197
 #, c-format
 msgid "no such remote or remote group: %s"
 msgstr ""
 
-#: builtin/fetch.c:2081
+#: builtin/fetch.c:2205
 msgid "fetching a group and specifying refspecs does not make sense"
 msgstr ""
 
-#: builtin/fetch.c:2097
+#: builtin/fetch.c:2221
 msgid "must supply remote when using --negotiate-only"
 msgstr ""
 
-#: builtin/fetch.c:2102
+#: builtin/fetch.c:2226
 msgid "protocol does not support --negotiate-only, exiting"
 msgstr ""
 
-#: builtin/fetch.c:2121
+#: builtin/fetch.c:2246
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
 msgstr ""
 
-#: builtin/fetch.c:2125
+#: builtin/fetch.c:2250
 msgid "--atomic can only be used when fetching from one remote"
 msgstr ""
 
-#: builtin/fetch.c:2129
+#: builtin/fetch.c:2254
 msgid "--stdin can only be used when fetching from one remote"
 msgstr ""
 
@@ -14471,7 +14806,7 @@ msgstr ""
 msgid "show only <n> matched refs"
 msgstr ""
 
-#: builtin/for-each-ref.c:42 builtin/tag.c:481
+#: builtin/for-each-ref.c:42 builtin/tag.c:482
 msgid "respect format colors"
 msgstr ""
 
@@ -14663,7 +14998,7 @@ msgstr ""
 msgid "Checking %s link"
 msgstr ""
 
-#: builtin/fsck.c:710 builtin/index-pack.c:859
+#: builtin/fsck.c:710 builtin/index-pack.c:862
 #, c-format
 msgid "invalid %s"
 msgstr ""
@@ -14732,7 +15067,7 @@ msgstr ""
 msgid "check only connectivity"
 msgstr ""
 
-#: builtin/fsck.c:798 builtin/mktag.c:76
+#: builtin/fsck.c:798 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr ""
 
@@ -14762,6 +15097,118 @@ msgstr ""
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr ""
 
+#: builtin/fsmonitor--daemon.c:13
+msgid "git fsmonitor--daemon start [<options>]"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:14
+msgid "git fsmonitor--daemon run [<options>]"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:15
+msgid "git fsmonitor--daemon stop"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:16
+msgid "git fsmonitor--daemon status"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:38 builtin/fsmonitor--daemon.c:47
+#, c-format
+msgid "value of '%s' out of range: %d"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:57
+#, c-format
+msgid "value of '%s' not bool or int: %d"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:99
+#, c-format
+msgid "fsmonitor-daemon is watching '%s'\n"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:104
+#, c-format
+msgid "fsmonitor-daemon is not watching '%s'\n"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:170
+#, c-format
+msgid "could not create fsmonitor cookie '%s'"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:753
+#, c-format
+msgid "fsmonitor: cookie_result '%d' != SEEN"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1187
+#, c-format
+msgid "could not start IPC thread pool on '%s'"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1199
+msgid "could not start fsmonitor listener thread"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1297
+msgid "could not initialize listener thread"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1328 builtin/fsmonitor--daemon.c:1383
+#, c-format
+msgid "fsmonitor--daemon is already running '%s'"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1332
+#, c-format
+msgid "running fsmonitor-daemon in '%s'\n"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1387
+#, c-format
+msgid "starting fsmonitor-daemon in '%s'\n"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1413
+msgid "daemon failed to start"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1416
+msgid "daemon not online yet"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1419
+msgid "daemon terminated"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1429
+msgid "detach from console"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1432
+msgid "use <n> ipc worker threads"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1435
+msgid "max seconds to wait for background daemon startup"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1449
+#, c-format
+msgid "invalid 'ipc-threads' value (%d)"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1464
+#, c-format
+msgid "Unhandled subcommand '%s'"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1477
+msgid "fsmonitor--daemon not supported on this platform"
+msgstr ""
+
 #: builtin/gc.c:39
 msgid "git gc [<options>]"
 msgstr ""
@@ -14997,8 +15444,8 @@ msgstr ""
 msgid "failed to run systemctl"
 msgstr ""
 
-#: builtin/gc.c:2210 builtin/gc.c:2215 builtin/worktree.c:62
-#: builtin/worktree.c:944
+#: builtin/gc.c:2210 builtin/gc.c:2215 builtin/worktree.c:63
+#: builtin/worktree.c:1024
 #, c-format
 msgid "failed to delete '%s'"
 msgstr ""
@@ -15046,16 +15493,16 @@ msgstr ""
 msgid "invalid subcommand: %s"
 msgstr ""
 
-#: builtin/grep.c:30
+#: builtin/grep.c:32
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr ""
 
-#: builtin/grep.c:239
+#: builtin/grep.c:241
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr ""
 
-#: builtin/grep.c:293
+#: builtin/grep.c:295
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr ""
@@ -15064,258 +15511,250 @@ msgstr ""
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:301 builtin/index-pack.c:1582 builtin/index-pack.c:1785
-#: builtin/pack-objects.c:3142
+#: builtin/grep.c:303 builtin/index-pack.c:1587 builtin/index-pack.c:1791
+#: builtin/pack-objects.c:3150
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr ""
 
-#: builtin/grep.c:488 builtin/grep.c:617 builtin/grep.c:657
+#: builtin/grep.c:490 builtin/grep.c:619 builtin/grep.c:659
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr ""
 
-#: builtin/grep.c:672
+#: builtin/grep.c:674
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr ""
 
-#: builtin/grep.c:752
+#: builtin/grep.c:754
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr ""
 
-#: builtin/grep.c:851
+#: builtin/grep.c:852
 msgid "search in index instead of in the work tree"
 msgstr ""
 
-#: builtin/grep.c:853
+#: builtin/grep.c:854
 msgid "find in contents not managed by git"
 msgstr ""
 
-#: builtin/grep.c:855
+#: builtin/grep.c:856
 msgid "search in both tracked and untracked files"
 msgstr ""
 
-#: builtin/grep.c:857
+#: builtin/grep.c:858
 msgid "ignore files specified via '.gitignore'"
 msgstr ""
 
-#: builtin/grep.c:859
+#: builtin/grep.c:860
 msgid "recursively search in each submodule"
 msgstr ""
 
-#: builtin/grep.c:862
+#: builtin/grep.c:863
 msgid "show non-matching lines"
 msgstr ""
 
-#: builtin/grep.c:864
+#: builtin/grep.c:865
 msgid "case insensitive matching"
 msgstr ""
 
-#: builtin/grep.c:866
+#: builtin/grep.c:867
 msgid "match patterns only at word boundaries"
 msgstr ""
 
-#: builtin/grep.c:868
+#: builtin/grep.c:869
 msgid "process binary files as text"
 msgstr ""
 
-#: builtin/grep.c:870
+#: builtin/grep.c:871
 msgid "don't match patterns in binary files"
 msgstr ""
 
-#: builtin/grep.c:873
+#: builtin/grep.c:874
 msgid "process binary files with textconv filters"
 msgstr ""
 
-#: builtin/grep.c:875
+#: builtin/grep.c:876
 msgid "search in subdirectories (default)"
 msgstr ""
 
-#: builtin/grep.c:877
+#: builtin/grep.c:878
 msgid "descend at most <depth> levels"
 msgstr ""
 
-#: builtin/grep.c:881
+#: builtin/grep.c:882
 msgid "use extended POSIX regular expressions"
 msgstr ""
 
-#: builtin/grep.c:884
+#: builtin/grep.c:885
 msgid "use basic POSIX regular expressions (default)"
 msgstr ""
 
-#: builtin/grep.c:887
+#: builtin/grep.c:888
 msgid "interpret patterns as fixed strings"
 msgstr ""
 
-#: builtin/grep.c:890
+#: builtin/grep.c:891
 msgid "use Perl-compatible regular expressions"
 msgstr ""
 
-#: builtin/grep.c:893
+#: builtin/grep.c:894
 msgid "show line numbers"
 msgstr ""
 
-#: builtin/grep.c:894
+#: builtin/grep.c:895
 msgid "show column number of first match"
 msgstr ""
 
-#: builtin/grep.c:895
+#: builtin/grep.c:896
 msgid "don't show filenames"
 msgstr ""
 
-#: builtin/grep.c:896
+#: builtin/grep.c:897
 msgid "show filenames"
 msgstr ""
 
-#: builtin/grep.c:898
+#: builtin/grep.c:899
 msgid "show filenames relative to top directory"
 msgstr ""
 
-#: builtin/grep.c:900
+#: builtin/grep.c:901
 msgid "show only filenames instead of matching lines"
 msgstr ""
 
-#: builtin/grep.c:902
+#: builtin/grep.c:903
 msgid "synonym for --files-with-matches"
 msgstr ""
 
-#: builtin/grep.c:905
+#: builtin/grep.c:906
 msgid "show only the names of files without match"
 msgstr ""
 
-#: builtin/grep.c:907
+#: builtin/grep.c:908
 msgid "print NUL after filenames"
 msgstr ""
 
-#: builtin/grep.c:910
+#: builtin/grep.c:911
 msgid "show only matching parts of a line"
 msgstr ""
 
-#: builtin/grep.c:912
+#: builtin/grep.c:913
 msgid "show the number of matches instead of matching lines"
 msgstr ""
 
-#: builtin/grep.c:913
+#: builtin/grep.c:914
 msgid "highlight matches"
 msgstr ""
 
-#: builtin/grep.c:915
+#: builtin/grep.c:916
 msgid "print empty line between matches from different files"
 msgstr ""
 
-#: builtin/grep.c:917
+#: builtin/grep.c:918
 msgid "show filename only once above matches from same file"
 msgstr ""
 
-#: builtin/grep.c:920
+#: builtin/grep.c:921
 msgid "show <n> context lines before and after matches"
 msgstr ""
 
-#: builtin/grep.c:923
+#: builtin/grep.c:924
 msgid "show <n> context lines before matches"
 msgstr ""
 
-#: builtin/grep.c:925
+#: builtin/grep.c:926
 msgid "show <n> context lines after matches"
 msgstr ""
 
-#: builtin/grep.c:927
+#: builtin/grep.c:928
 msgid "use <n> worker threads"
 msgstr ""
 
-#: builtin/grep.c:928
+#: builtin/grep.c:929
 msgid "shortcut for -C NUM"
 msgstr ""
 
-#: builtin/grep.c:931
+#: builtin/grep.c:932
 msgid "show a line with the function name before matches"
 msgstr ""
 
-#: builtin/grep.c:933
+#: builtin/grep.c:934
 msgid "show the surrounding function"
 msgstr ""
 
-#: builtin/grep.c:936
+#: builtin/grep.c:937
 msgid "read patterns from file"
 msgstr ""
 
-#: builtin/grep.c:938
+#: builtin/grep.c:939
 msgid "match <pattern>"
 msgstr ""
 
-#: builtin/grep.c:940
+#: builtin/grep.c:941
 msgid "combine patterns specified with -e"
 msgstr ""
 
-#: builtin/grep.c:952
+#: builtin/grep.c:953
 msgid "indicate hit with exit status without output"
 msgstr ""
 
-#: builtin/grep.c:954
+#: builtin/grep.c:955
 msgid "show only matches from files that match all patterns"
 msgstr ""
 
-#: builtin/grep.c:957
+#: builtin/grep.c:958
 msgid "pager"
 msgstr ""
 
-#: builtin/grep.c:957
+#: builtin/grep.c:958
 msgid "show matching files in the pager"
 msgstr ""
 
-#: builtin/grep.c:961
+#: builtin/grep.c:962
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr ""
 
-#: builtin/grep.c:1027
+#: builtin/grep.c:1028
 msgid "no pattern given"
 msgstr ""
 
-#: builtin/grep.c:1063
+#: builtin/grep.c:1064
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr ""
 
-#: builtin/grep.c:1071
+#: builtin/grep.c:1072
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr ""
 
-#: builtin/grep.c:1101
+#: builtin/grep.c:1102
 msgid "--untracked not supported with --recurse-submodules"
 msgstr ""
 
-#: builtin/grep.c:1105
+#: builtin/grep.c:1106
 msgid "invalid option combination, ignoring --threads"
 msgstr ""
 
-#: builtin/grep.c:1108 builtin/pack-objects.c:4059
+#: builtin/grep.c:1109 builtin/pack-objects.c:4084
 msgid "no threads support, ignoring --threads"
 msgstr ""
 
-#: builtin/grep.c:1111 builtin/index-pack.c:1579 builtin/pack-objects.c:3139
+#: builtin/grep.c:1112 builtin/index-pack.c:1584 builtin/pack-objects.c:3147
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr ""
 
-#: builtin/grep.c:1145
+#: builtin/grep.c:1146
 msgid "--open-files-in-pager only works on the worktree"
 msgstr ""
 
-#: builtin/grep.c:1171
-msgid "--cached or --untracked cannot be used with --no-index"
-msgstr ""
-
-#: builtin/grep.c:1174
-msgid "--untracked cannot be used with --cached"
-msgstr ""
-
-#: builtin/grep.c:1180
+#: builtin/grep.c:1179
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr ""
 
-#: builtin/grep.c:1188
+#: builtin/grep.c:1187
 msgid "both --cached and trees are given"
 msgstr ""
 
@@ -15325,154 +15764,162 @@ msgid ""
 "[--] <file>..."
 msgstr ""
 
-#: builtin/hash-object.c:84
-msgid "git hash-object  --stdin-paths"
-msgstr ""
-
-#: builtin/hash-object.c:96
+#: builtin/hash-object.c:97
 msgid "object type"
 msgstr ""
 
-#: builtin/hash-object.c:97
+#: builtin/hash-object.c:98
 msgid "write the object into the object database"
 msgstr ""
 
-#: builtin/hash-object.c:99
+#: builtin/hash-object.c:100
 msgid "read the object from stdin"
 msgstr ""
 
-#: builtin/hash-object.c:101
+#: builtin/hash-object.c:102
 msgid "store file as is without filters"
 msgstr ""
 
-#: builtin/hash-object.c:102
+#: builtin/hash-object.c:103
 msgid ""
 "just hash any random garbage to create corrupt objects for debugging Git"
 msgstr ""
 
-#: builtin/hash-object.c:103
+#: builtin/hash-object.c:104
 msgid "process file as it were from this path"
 msgstr ""
 
-#: builtin/help.c:55
+#: builtin/help.c:57
 msgid "print all available commands"
 msgstr ""
 
-#: builtin/help.c:57
-msgid "exclude guides"
+#: builtin/help.c:60
+msgid "show external commands in --all"
 msgstr ""
 
-#: builtin/help.c:58
-msgid "show man page"
+#: builtin/help.c:61
+msgid "show aliases in --all"
 msgstr ""
 
-#: builtin/help.c:59
-msgid "show manual in web browser"
+#: builtin/help.c:62
+msgid "exclude guides"
 msgstr ""
 
-#: builtin/help.c:61
-msgid "show info page"
+#: builtin/help.c:63
+msgid "show man page"
 msgstr ""
 
-#: builtin/help.c:63
-msgid "print command description"
+#: builtin/help.c:64
+msgid "show manual in web browser"
 msgstr ""
 
-#: builtin/help.c:65
-msgid "print list of useful guides"
+#: builtin/help.c:66
+msgid "show info page"
 msgstr ""
 
-#: builtin/help.c:67
-msgid "print all configuration variable names"
+#: builtin/help.c:68
+msgid "print command description"
 msgstr ""
 
-#: builtin/help.c:78
-msgid ""
-"git help [-a|--all] [--[no-]verbose]]\n"
-"         [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
+#: builtin/help.c:70
+msgid "print list of useful guides"
 msgstr ""
 
-#: builtin/help.c:80
-msgid "git help [-g|--guides]"
+#: builtin/help.c:72
+msgid "print all configuration variable names"
 msgstr ""
 
-#: builtin/help.c:81
-msgid "git help [-c|--config]"
+#: builtin/help.c:84
+msgid "git help [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
 msgstr ""
 
-#: builtin/help.c:196
+#: builtin/help.c:201
 #, c-format
 msgid "unrecognized help format '%s'"
 msgstr ""
 
-#: builtin/help.c:222
+#: builtin/help.c:227
 msgid "Failed to start emacsclient."
 msgstr ""
 
-#: builtin/help.c:235
+#: builtin/help.c:240
 msgid "Failed to parse emacsclient version."
 msgstr ""
 
-#: builtin/help.c:243
+#: builtin/help.c:248
 #, c-format
 msgid "emacsclient version '%d' too old (< 22)."
 msgstr ""
 
-#: builtin/help.c:261 builtin/help.c:283 builtin/help.c:293 builtin/help.c:301
+#: builtin/help.c:266 builtin/help.c:288 builtin/help.c:298 builtin/help.c:306
 #, c-format
 msgid "failed to exec '%s'"
 msgstr ""
 
-#: builtin/help.c:339
+#: builtin/help.c:344
 #, c-format
 msgid ""
 "'%s': path for unsupported man viewer.\n"
 "Please consider using 'man.<tool>.cmd' instead."
 msgstr ""
 
-#: builtin/help.c:351
+#: builtin/help.c:356
 #, c-format
 msgid ""
 "'%s': cmd for supported man viewer.\n"
 "Please consider using 'man.<tool>.path' instead."
 msgstr ""
 
-#: builtin/help.c:466
+#: builtin/help.c:471
 #, c-format
 msgid "'%s': unknown man viewer."
 msgstr ""
 
-#: builtin/help.c:482
+#: builtin/help.c:487
 msgid "no man viewer handled the request"
 msgstr ""
 
-#: builtin/help.c:489
+#: builtin/help.c:494
 msgid "no info viewer handled the request"
 msgstr ""
 
-#: builtin/help.c:550 builtin/help.c:561 git.c:348
+#: builtin/help.c:555 builtin/help.c:566 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr ""
 
-#: builtin/help.c:564 git.c:380
+#: builtin/help.c:569 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr ""
 
-#: builtin/help.c:580
-msgid "this option doesn't take any other arguments"
+#: builtin/help.c:611
+#, c-format
+msgid "the '%s' option doesn't take any non-option arguments"
+msgstr ""
+
+#: builtin/help.c:631
+msgid ""
+"the '--no-[external-commands|aliases]' options can only be used with '--all'"
 msgstr ""
 
-#: builtin/help.c:601 builtin/help.c:628
+#: builtin/help.c:643 builtin/help.c:671
 #, c-format
 msgid "usage: %s%s"
 msgstr ""
 
-#: builtin/help.c:623
+#: builtin/help.c:666
 msgid "'git help config' for more information"
 msgstr ""
 
+#: builtin/hook.c:10
+msgid "git hook run [--ignore-missing] <hook-name> [-- <hook-args>]"
+msgstr ""
+
+#: builtin/hook.c:30
+msgid "silently ignore missing requested <hook-name>"
+msgstr ""
+
 #: builtin/index-pack.c:221
 #, c-format
 msgid "object type mismatch at %s"
@@ -15507,244 +15954,245 @@ msgstr ""
 msgid "used more bytes than were available"
 msgstr ""
 
-#: builtin/index-pack.c:324 builtin/pack-objects.c:756
+#: builtin/index-pack.c:324 builtin/pack-objects.c:754
 msgid "pack too large for current definition of off_t"
 msgstr ""
 
-#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
-msgid "pack exceeds maximum allowed size"
+#: builtin/index-pack.c:329
+#, c-format
+msgid "pack exceeds maximum allowed size (%s)"
 msgstr ""
 
-#: builtin/index-pack.c:358
+#: builtin/index-pack.c:362
 msgid "pack signature mismatch"
 msgstr ""
 
-#: builtin/index-pack.c:360
+#: builtin/index-pack.c:364
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr ""
 
-#: builtin/index-pack.c:376
+#: builtin/index-pack.c:380
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr ""
 
-#: builtin/index-pack.c:482
+#: builtin/index-pack.c:485
 #, c-format
 msgid "inflate returned %d"
 msgstr ""
 
-#: builtin/index-pack.c:531
+#: builtin/index-pack.c:534
 msgid "offset value overflow for delta base object"
 msgstr ""
 
-#: builtin/index-pack.c:539
+#: builtin/index-pack.c:542
 msgid "delta base offset is out of bound"
 msgstr ""
 
-#: builtin/index-pack.c:547
+#: builtin/index-pack.c:550
 #, c-format
 msgid "unknown object type %d"
 msgstr ""
 
-#: builtin/index-pack.c:578
+#: builtin/index-pack.c:581
 msgid "cannot pread pack file"
 msgstr ""
 
-#: builtin/index-pack.c:580
+#: builtin/index-pack.c:583
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/index-pack.c:606
+#: builtin/index-pack.c:609
 msgid "serious inflate inconsistency"
 msgstr ""
 
-#: builtin/index-pack.c:751 builtin/index-pack.c:757 builtin/index-pack.c:781
-#: builtin/index-pack.c:820 builtin/index-pack.c:829
+#: builtin/index-pack.c:754 builtin/index-pack.c:760 builtin/index-pack.c:784
+#: builtin/index-pack.c:823 builtin/index-pack.c:832
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr ""
 
-#: builtin/index-pack.c:754 builtin/pack-objects.c:292
-#: builtin/pack-objects.c:352 builtin/pack-objects.c:458
+#: builtin/index-pack.c:757 builtin/pack-objects.c:290
+#: builtin/pack-objects.c:350 builtin/pack-objects.c:456
 #, c-format
 msgid "unable to read %s"
 msgstr ""
 
-#: builtin/index-pack.c:818
+#: builtin/index-pack.c:821
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr ""
 
-#: builtin/index-pack.c:826
+#: builtin/index-pack.c:829
 #, c-format
 msgid "cannot read existing object %s"
 msgstr ""
 
-#: builtin/index-pack.c:840
+#: builtin/index-pack.c:843
 #, c-format
 msgid "invalid blob object %s"
 msgstr ""
 
-#: builtin/index-pack.c:843 builtin/index-pack.c:862
+#: builtin/index-pack.c:846 builtin/index-pack.c:865
 msgid "fsck error in packed object"
 msgstr ""
 
-#: builtin/index-pack.c:864
+#: builtin/index-pack.c:867
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr ""
 
-#: builtin/index-pack.c:925 builtin/index-pack.c:972
+#: builtin/index-pack.c:928 builtin/index-pack.c:975
 msgid "failed to apply delta"
 msgstr ""
 
-#: builtin/index-pack.c:1156
+#: builtin/index-pack.c:1161
 msgid "Receiving objects"
 msgstr ""
 
-#: builtin/index-pack.c:1156
+#: builtin/index-pack.c:1161
 msgid "Indexing objects"
 msgstr ""
 
-#: builtin/index-pack.c:1190
+#: builtin/index-pack.c:1195
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr ""
 
-#: builtin/index-pack.c:1195
+#: builtin/index-pack.c:1200
 msgid "cannot fstat packfile"
 msgstr ""
 
-#: builtin/index-pack.c:1198
+#: builtin/index-pack.c:1203
 msgid "pack has junk at the end"
 msgstr ""
 
-#: builtin/index-pack.c:1210
+#: builtin/index-pack.c:1215
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr ""
 
-#: builtin/index-pack.c:1233
+#: builtin/index-pack.c:1238
 msgid "Resolving deltas"
 msgstr ""
 
-#: builtin/index-pack.c:1244 builtin/pack-objects.c:2905
+#: builtin/index-pack.c:1249 builtin/pack-objects.c:2913
 #, c-format
 msgid "unable to create thread: %s"
 msgstr ""
 
-#: builtin/index-pack.c:1277
+#: builtin/index-pack.c:1282
 msgid "confusion beyond insanity"
 msgstr ""
 
-#: builtin/index-pack.c:1283
+#: builtin/index-pack.c:1288
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/index-pack.c:1295
+#: builtin/index-pack.c:1300
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr ""
 
-#: builtin/index-pack.c:1299
+#: builtin/index-pack.c:1304
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/index-pack.c:1323
+#: builtin/index-pack.c:1328
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr ""
 
-#: builtin/index-pack.c:1419
+#: builtin/index-pack.c:1423
 #, c-format
 msgid "local object %s is corrupt"
 msgstr ""
 
-#: builtin/index-pack.c:1440
+#: builtin/index-pack.c:1445
 #, c-format
 msgid "packfile name '%s' does not end with '.%s'"
 msgstr ""
 
-#: builtin/index-pack.c:1464
+#: builtin/index-pack.c:1469
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr ""
 
-#: builtin/index-pack.c:1472
+#: builtin/index-pack.c:1477
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr ""
 
-#: builtin/index-pack.c:1489
+#: builtin/index-pack.c:1494
 #, c-format
 msgid "unable to rename temporary '*.%s' file to '%s'"
 msgstr ""
 
-#: builtin/index-pack.c:1514
+#: builtin/index-pack.c:1519
 msgid "error while closing pack file"
 msgstr ""
 
-#: builtin/index-pack.c:1573 builtin/pack-objects.c:3150
+#: builtin/index-pack.c:1578 builtin/pack-objects.c:3158
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr ""
 
-#: builtin/index-pack.c:1643
+#: builtin/index-pack.c:1648
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr ""
 
-#: builtin/index-pack.c:1645
+#: builtin/index-pack.c:1650
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr ""
 
-#: builtin/index-pack.c:1693
+#: builtin/index-pack.c:1698
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/index-pack.c:1700
+#: builtin/index-pack.c:1705
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/index-pack.c:1742
+#: builtin/index-pack.c:1748
 msgid "Cannot come back to cwd"
 msgstr ""
 
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1799
-#: builtin/index-pack.c:1819 builtin/index-pack.c:1823
+#: builtin/index-pack.c:1802 builtin/index-pack.c:1805
+#: builtin/index-pack.c:1825 builtin/index-pack.c:1829
 #, c-format
 msgid "bad %s"
 msgstr ""
 
-#: builtin/index-pack.c:1829 builtin/init-db.c:379 builtin/init-db.c:614
+#: builtin/index-pack.c:1835 builtin/init-db.c:379 builtin/init-db.c:614
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr ""
 
-#: builtin/index-pack.c:1850
+#: builtin/index-pack.c:1856
 msgid "--stdin requires a git repository"
 msgstr ""
 
-#: builtin/index-pack.c:1867
+#: builtin/index-pack.c:1873
 msgid "--verify with no packfile name given"
 msgstr ""
 
-#: builtin/index-pack.c:1933 builtin/unpack-objects.c:584
+#: builtin/index-pack.c:1939 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr ""
 
@@ -15947,400 +16395,408 @@ msgstr ""
 msgid "no input file given for in-place editing"
 msgstr ""
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr ""
 
-#: builtin/log.c:60
+#: builtin/log.c:61
 msgid "git show [<options>] <object>..."
 msgstr ""
 
-#: builtin/log.c:113
+#: builtin/log.c:114
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr ""
 
-#: builtin/log.c:180
+#: builtin/log.c:181
 msgid "show source"
 msgstr ""
 
-#: builtin/log.c:181
+#: builtin/log.c:182
 msgid "use mail map file"
 msgstr ""
 
-#: builtin/log.c:184
+#: builtin/log.c:185
 msgid "only decorate refs that match <pattern>"
 msgstr ""
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "do not decorate refs that match <pattern>"
 msgstr ""
 
-#: builtin/log.c:187
+#: builtin/log.c:188
 msgid "decorate options"
 msgstr ""
 
-#: builtin/log.c:190
+#: builtin/log.c:191
 msgid ""
 "trace the evolution of line range <start>,<end> or function :<funcname> in "
 "<file>"
 msgstr ""
 
-#: builtin/log.c:213
+#: builtin/log.c:214
 msgid "-L<range>:<file> cannot be used with pathspec"
 msgstr ""
 
-#: builtin/log.c:321
+#: builtin/log.c:322
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr ""
 
-#: builtin/log.c:586
+#: builtin/log.c:429
+msgid "unable to create temporary object directory"
+msgstr ""
+
+#: builtin/log.c:599
 #, c-format
 msgid "git show %s: bad file"
 msgstr ""
 
-#: builtin/log.c:601 builtin/log.c:691
+#: builtin/log.c:614 builtin/log.c:706
 #, c-format
 msgid "could not read object %s"
 msgstr ""
 
-#: builtin/log.c:716
+#: builtin/log.c:731
 #, c-format
 msgid "unknown type: %d"
 msgstr ""
 
-#: builtin/log.c:861
+#: builtin/log.c:880
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr ""
 
-#: builtin/log.c:868
+#: builtin/log.c:887
 msgid "format.headers without value"
 msgstr ""
 
-#: builtin/log.c:997
+#: builtin/log.c:1016
 #, c-format
 msgid "cannot open patch file %s"
 msgstr ""
 
-#: builtin/log.c:1014
+#: builtin/log.c:1033
 msgid "need exactly one range"
 msgstr ""
 
-#: builtin/log.c:1024
+#: builtin/log.c:1043
 msgid "not a range"
 msgstr ""
 
-#: builtin/log.c:1188
+#: builtin/log.c:1207
 msgid "cover letter needs email format"
 msgstr ""
 
-#: builtin/log.c:1194
+#: builtin/log.c:1213
 msgid "failed to create cover-letter file"
 msgstr ""
 
-#: builtin/log.c:1281
+#: builtin/log.c:1300
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr ""
 
-#: builtin/log.c:1308
+#: builtin/log.c:1327
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr ""
 
-#: builtin/log.c:1366
+#: builtin/log.c:1385
 msgid "two output directories?"
 msgstr ""
 
-#: builtin/log.c:1517 builtin/log.c:2344 builtin/log.c:2346 builtin/log.c:2358
+#: builtin/log.c:1536 builtin/log.c:2369 builtin/log.c:2371 builtin/log.c:2383
 #, c-format
 msgid "unknown commit %s"
 msgstr ""
 
-#: builtin/log.c:1528 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1547 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr ""
 
-#: builtin/log.c:1537
+#: builtin/log.c:1556
 msgid "could not find exact merge base"
 msgstr ""
 
-#: builtin/log.c:1547
+#: builtin/log.c:1566
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
 "Or you could specify base commit by --base=<base-commit-id> manually"
 msgstr ""
 
-#: builtin/log.c:1570
+#: builtin/log.c:1589
 msgid "failed to find exact merge base"
 msgstr ""
 
-#: builtin/log.c:1587
+#: builtin/log.c:1606
 msgid "base commit should be the ancestor of revision list"
 msgstr ""
 
-#: builtin/log.c:1597
+#: builtin/log.c:1616
 msgid "base commit shouldn't be in revision list"
 msgstr ""
 
-#: builtin/log.c:1655
+#: builtin/log.c:1674
 msgid "cannot get patch id"
 msgstr ""
 
-#: builtin/log.c:1718
+#: builtin/log.c:1737
 msgid "failed to infer range-diff origin of current series"
 msgstr ""
 
-#: builtin/log.c:1720
+#: builtin/log.c:1739
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr ""
 
-#: builtin/log.c:1764
+#: builtin/log.c:1783
 msgid "use [PATCH n/m] even with a single patch"
 msgstr ""
 
-#: builtin/log.c:1767
+#: builtin/log.c:1786
 msgid "use [PATCH] even with multiple patches"
 msgstr ""
 
-#: builtin/log.c:1771
+#: builtin/log.c:1790
 msgid "print patches to standard out"
 msgstr ""
 
-#: builtin/log.c:1773
+#: builtin/log.c:1792
 msgid "generate a cover letter"
 msgstr ""
 
-#: builtin/log.c:1775
+#: builtin/log.c:1794
 msgid "use simple number sequence for output file names"
 msgstr ""
 
-#: builtin/log.c:1776
+#: builtin/log.c:1795
 msgid "sfx"
 msgstr ""
 
-#: builtin/log.c:1777
+#: builtin/log.c:1796
 msgid "use <sfx> instead of '.patch'"
 msgstr ""
 
-#: builtin/log.c:1779
+#: builtin/log.c:1798
 msgid "start numbering patches at <n> instead of 1"
 msgstr ""
 
-#: builtin/log.c:1780
+#: builtin/log.c:1799
 msgid "reroll-count"
 msgstr ""
 
-#: builtin/log.c:1781
+#: builtin/log.c:1800
 msgid "mark the series as Nth re-roll"
 msgstr ""
 
-#: builtin/log.c:1783
+#: builtin/log.c:1802
 msgid "max length of output filename"
 msgstr ""
 
-#: builtin/log.c:1785
+#: builtin/log.c:1804
 msgid "use [RFC PATCH] instead of [PATCH]"
 msgstr ""
 
-#: builtin/log.c:1788
+#: builtin/log.c:1807
 msgid "cover-from-description-mode"
 msgstr ""
 
-#: builtin/log.c:1789
+#: builtin/log.c:1808
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr ""
 
-#: builtin/log.c:1791
+#: builtin/log.c:1810
 msgid "use [<prefix>] instead of [PATCH]"
 msgstr ""
 
-#: builtin/log.c:1794
+#: builtin/log.c:1813
 msgid "store resulting files in <dir>"
 msgstr ""
 
-#: builtin/log.c:1797
+#: builtin/log.c:1816
 msgid "don't strip/add [PATCH]"
 msgstr ""
 
-#: builtin/log.c:1800
+#: builtin/log.c:1819
 msgid "don't output binary diffs"
 msgstr ""
 
-#: builtin/log.c:1802
+#: builtin/log.c:1821
 msgid "output all-zero hash in From header"
 msgstr ""
 
-#: builtin/log.c:1804
+#: builtin/log.c:1823
 msgid "don't include a patch matching a commit upstream"
 msgstr ""
 
-#: builtin/log.c:1806
+#: builtin/log.c:1825
 msgid "show patch format instead of default (patch + stat)"
 msgstr ""
 
-#: builtin/log.c:1808
+#: builtin/log.c:1827
 msgid "Messaging"
 msgstr ""
 
-#: builtin/log.c:1809
+#: builtin/log.c:1828
 msgid "header"
 msgstr ""
 
-#: builtin/log.c:1810
+#: builtin/log.c:1829
 msgid "add email header"
 msgstr ""
 
-#: builtin/log.c:1811 builtin/log.c:1812
+#: builtin/log.c:1830 builtin/log.c:1831
 msgid "email"
 msgstr ""
 
-#: builtin/log.c:1811
+#: builtin/log.c:1830
 msgid "add To: header"
 msgstr ""
 
-#: builtin/log.c:1812
+#: builtin/log.c:1831
 msgid "add Cc: header"
 msgstr ""
 
-#: builtin/log.c:1813
+#: builtin/log.c:1832
 msgid "ident"
 msgstr ""
 
-#: builtin/log.c:1814
+#: builtin/log.c:1833
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 
-#: builtin/log.c:1816
+#: builtin/log.c:1835
 msgid "message-id"
 msgstr ""
 
-#: builtin/log.c:1817
+#: builtin/log.c:1836
 msgid "make first mail a reply to <message-id>"
 msgstr ""
 
-#: builtin/log.c:1818 builtin/log.c:1821
+#: builtin/log.c:1837 builtin/log.c:1840
 msgid "boundary"
 msgstr ""
 
-#: builtin/log.c:1819
+#: builtin/log.c:1838
 msgid "attach the patch"
 msgstr ""
 
-#: builtin/log.c:1822
+#: builtin/log.c:1841
 msgid "inline the patch"
 msgstr ""
 
-#: builtin/log.c:1826
+#: builtin/log.c:1845
 msgid "enable message threading, styles: shallow, deep"
 msgstr ""
 
-#: builtin/log.c:1828
+#: builtin/log.c:1847
 msgid "signature"
 msgstr ""
 
-#: builtin/log.c:1829
+#: builtin/log.c:1848
 msgid "add a signature"
 msgstr ""
 
-#: builtin/log.c:1830
+#: builtin/log.c:1849
 msgid "base-commit"
 msgstr ""
 
-#: builtin/log.c:1831
+#: builtin/log.c:1850
 msgid "add prerequisite tree info to the patch series"
 msgstr ""
 
-#: builtin/log.c:1834
+#: builtin/log.c:1853
 msgid "add a signature from a file"
 msgstr ""
 
-#: builtin/log.c:1835
+#: builtin/log.c:1854
 msgid "don't print the patch filenames"
 msgstr ""
 
-#: builtin/log.c:1837
+#: builtin/log.c:1856
 msgid "show progress while generating patches"
 msgstr ""
 
-#: builtin/log.c:1839
+#: builtin/log.c:1858
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
 
-#: builtin/log.c:1842
+#: builtin/log.c:1861
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
 
-#: builtin/log.c:1844 builtin/range-diff.c:28
+#: builtin/log.c:1863 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr ""
 
-#: builtin/log.c:1931
+#: builtin/log.c:1953
 #, c-format
 msgid "invalid ident line: %s"
 msgstr ""
 
-#: builtin/log.c:1956
+#: builtin/log.c:1978
 msgid "--name-only does not make sense"
 msgstr ""
 
-#: builtin/log.c:1958
+#: builtin/log.c:1980
 msgid "--name-status does not make sense"
 msgstr ""
 
-#: builtin/log.c:1960
+#: builtin/log.c:1982
 msgid "--check does not make sense"
 msgstr ""
 
-#: builtin/log.c:2104
+#: builtin/log.c:1984
+msgid "--remerge-diff does not make sense"
+msgstr ""
+
+#: builtin/log.c:2129
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr ""
 
-#: builtin/log.c:2108
+#: builtin/log.c:2133
 msgid "Interdiff:"
 msgstr ""
 
-#: builtin/log.c:2109
+#: builtin/log.c:2134
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr ""
 
-#: builtin/log.c:2119
+#: builtin/log.c:2144
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr ""
 
-#: builtin/log.c:2127
+#: builtin/log.c:2152
 msgid "Range-diff:"
 msgstr ""
 
-#: builtin/log.c:2128
+#: builtin/log.c:2153
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr ""
 
-#: builtin/log.c:2139
+#: builtin/log.c:2164
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr ""
 
-#: builtin/log.c:2175
+#: builtin/log.c:2200
 msgid "Generating patches"
 msgstr ""
 
-#: builtin/log.c:2219
+#: builtin/log.c:2244
 msgid "failed to create output files"
 msgstr ""
 
-#: builtin/log.c:2279
+#: builtin/log.c:2304
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr ""
 
-#: builtin/log.c:2333
+#: builtin/log.c:2358
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -16434,10 +16890,6 @@ msgstr ""
 msgid "make the output relative to the project top directory"
 msgstr ""
 
-#: builtin/ls-files.c:667
-msgid "recurse through submodules"
-msgstr ""
-
 #: builtin/ls-files.c:669
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr ""
@@ -16473,7 +16925,7 @@ msgstr ""
 msgid "do not print remote URL"
 msgstr ""
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1103
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1131
 msgid "exec"
 msgstr ""
 
@@ -16505,42 +16957,70 @@ msgstr ""
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr ""
 
-#: builtin/ls-tree.c:30
+#: builtin/ls-tree.c:36
 msgid "git ls-tree [<options>] <tree-ish> [<path>...]"
 msgstr ""
 
-#: builtin/ls-tree.c:128
+#: builtin/ls-tree.c:54
+#, c-format
+msgid "could not get object info about '%s'"
+msgstr ""
+
+#: builtin/ls-tree.c:79
+#, c-format
+msgid "bad ls-tree format: element '%s' does not start with '('"
+msgstr ""
+
+#: builtin/ls-tree.c:83
+#, c-format
+msgid "bad ls-tree format: element '%s' does not end in ')'"
+msgstr ""
+
+#: builtin/ls-tree.c:109
+#, c-format
+msgid "bad ls-tree format: %%%.*s"
+msgstr ""
+
+#: builtin/ls-tree.c:336
 msgid "only show trees"
 msgstr ""
 
-#: builtin/ls-tree.c:130
+#: builtin/ls-tree.c:338
 msgid "recurse into subtrees"
 msgstr ""
 
-#: builtin/ls-tree.c:132
+#: builtin/ls-tree.c:340
 msgid "show trees when recursing"
 msgstr ""
 
-#: builtin/ls-tree.c:135
+#: builtin/ls-tree.c:343
 msgid "terminate entries with NUL byte"
 msgstr ""
 
-#: builtin/ls-tree.c:136
+#: builtin/ls-tree.c:344
 msgid "include object size"
 msgstr ""
 
-#: builtin/ls-tree.c:138 builtin/ls-tree.c:140
+#: builtin/ls-tree.c:346 builtin/ls-tree.c:348
 msgid "list only filenames"
 msgstr ""
 
-#: builtin/ls-tree.c:143
+#: builtin/ls-tree.c:350
+msgid "list only objects"
+msgstr ""
+
+#: builtin/ls-tree.c:353
 msgid "use full path names"
 msgstr ""
 
-#: builtin/ls-tree.c:145
+#: builtin/ls-tree.c:355
 msgid "list entire tree; not just current directory (implies --full-name)"
 msgstr ""
 
+#: builtin/ls-tree.c:391
+msgid "--format can't be combined with other format-altering options"
+msgstr ""
+
 #. TRANSLATORS: keep <> in "<" mail ">" info.
 #: builtin/mailinfo.c:14
 msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
@@ -16590,7 +17070,11 @@ msgstr ""
 msgid "use headers in message's body"
 msgstr ""
 
-#: builtin/mailsplit.c:239
+#: builtin/mailsplit.c:227
+msgid "reading patches from stdin/tty..."
+msgstr ""
+
+#: builtin/mailsplit.c:242
 #, c-format
 msgid "empty mbox: '%s'"
 msgstr ""
@@ -16615,23 +17099,23 @@ msgstr ""
 msgid "git merge-base --fork-point <ref> [<commit>]"
 msgstr ""
 
-#: builtin/merge-base.c:143
+#: builtin/merge-base.c:144
 msgid "output all common ancestors"
 msgstr ""
 
-#: builtin/merge-base.c:145
+#: builtin/merge-base.c:146
 msgid "find ancestors for a single n-way merge"
 msgstr ""
 
-#: builtin/merge-base.c:147
+#: builtin/merge-base.c:148
 msgid "list revs not reachable from others"
 msgstr ""
 
-#: builtin/merge-base.c:149
+#: builtin/merge-base.c:150
 msgid "is the first one ancestor of the other?"
 msgstr ""
 
-#: builtin/merge-base.c:151
+#: builtin/merge-base.c:152
 msgid "find where <commit> forked from reflog of <ref>"
 msgstr ""
 
@@ -16777,7 +17261,7 @@ msgid "verify that the named commit has a valid GPG signature"
 msgstr ""
 
 #: builtin/merge.c:280 builtin/notes.c:785 builtin/pull.c:172
-#: builtin/rebase.c:1117 builtin/revert.c:114
+#: builtin/rebase.c:1145 builtin/revert.c:114
 msgid "strategy"
 msgstr ""
 
@@ -16904,161 +17388,157 @@ msgid ""
 "the commit.\n"
 msgstr ""
 
-#: builtin/merge.c:894
+#: builtin/merge.c:900
 msgid "Empty commit message."
 msgstr ""
 
-#: builtin/merge.c:909
+#: builtin/merge.c:915
 #, c-format
 msgid "Wonderful.\n"
 msgstr ""
 
-#: builtin/merge.c:970
+#: builtin/merge.c:976
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 
-#: builtin/merge.c:1009
+#: builtin/merge.c:1015
 msgid "No current branch."
 msgstr ""
 
-#: builtin/merge.c:1011
+#: builtin/merge.c:1017
 msgid "No remote for the current branch."
 msgstr ""
 
-#: builtin/merge.c:1013
+#: builtin/merge.c:1019
 msgid "No default upstream defined for the current branch."
 msgstr ""
 
-#: builtin/merge.c:1018
+#: builtin/merge.c:1024
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr ""
 
-#: builtin/merge.c:1075
+#: builtin/merge.c:1081
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr ""
 
-#: builtin/merge.c:1177
+#: builtin/merge.c:1183
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr ""
 
-#: builtin/merge.c:1211
+#: builtin/merge.c:1217
 msgid "not something we can merge"
 msgstr ""
 
-#: builtin/merge.c:1324
+#: builtin/merge.c:1330
 msgid "--abort expects no arguments"
 msgstr ""
 
-#: builtin/merge.c:1328
+#: builtin/merge.c:1334
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr ""
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1352
 msgid "--quit expects no arguments"
 msgstr ""
 
-#: builtin/merge.c:1359
+#: builtin/merge.c:1365
 msgid "--continue expects no arguments"
 msgstr ""
 
-#: builtin/merge.c:1363
+#: builtin/merge.c:1369
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr ""
 
-#: builtin/merge.c:1379
+#: builtin/merge.c:1385
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
 msgstr ""
 
-#: builtin/merge.c:1386
+#: builtin/merge.c:1392
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
 msgstr ""
 
-#: builtin/merge.c:1389
+#: builtin/merge.c:1395
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr ""
 
-#: builtin/merge.c:1421
+#: builtin/merge.c:1427
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr ""
 
-#: builtin/merge.c:1438
+#: builtin/merge.c:1444
 msgid "Squash commit into empty head not supported yet"
 msgstr ""
 
-#: builtin/merge.c:1440
+#: builtin/merge.c:1446
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr ""
 
-#: builtin/merge.c:1445
+#: builtin/merge.c:1451
 #, c-format
 msgid "%s - not something we can merge"
 msgstr ""
 
-#: builtin/merge.c:1447
+#: builtin/merge.c:1453
 msgid "Can merge only exactly one commit into empty head"
 msgstr ""
 
-#: builtin/merge.c:1534
+#: builtin/merge.c:1540
 msgid "refusing to merge unrelated histories"
 msgstr ""
 
-#: builtin/merge.c:1553
+#: builtin/merge.c:1559
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr ""
 
-#: builtin/merge.c:1601
+#: builtin/merge.c:1606
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr ""
 
-#: builtin/merge.c:1608
+#: builtin/merge.c:1613
 #, c-format
 msgid "Nope.\n"
 msgstr ""
 
-#: builtin/merge.c:1667 builtin/merge.c:1733
+#: builtin/merge.c:1671 builtin/merge.c:1737
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr ""
 
-#: builtin/merge.c:1671
+#: builtin/merge.c:1675
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr ""
 
-#: builtin/merge.c:1723
+#: builtin/merge.c:1727
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr ""
 
-#: builtin/merge.c:1725
+#: builtin/merge.c:1729
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr ""
 
-#: builtin/merge.c:1735
+#: builtin/merge.c:1739
 #, c-format
 msgid "Using the %s strategy to prepare resolving by hand.\n"
 msgstr ""
 
-#: builtin/merge.c:1749
+#: builtin/merge.c:1753
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
 
-#: builtin/mktag.c:10
-msgid "git mktag"
-msgstr ""
-
 #: builtin/mktag.c:27
 #, c-format
 msgid "warning: tag input does not pass fsck: %s"
@@ -17084,22 +17564,18 @@ msgstr ""
 msgid "object '%s' tagged as '%s', but is a '%s' type"
 msgstr ""
 
-#: builtin/mktag.c:98
+#: builtin/mktag.c:97
 msgid "tag on stdin did not pass our strict fsck check"
 msgstr ""
 
-#: builtin/mktag.c:101
+#: builtin/mktag.c:100
 msgid "tag on stdin did not refer to a valid object"
 msgstr ""
 
-#: builtin/mktag.c:104 builtin/tag.c:242
+#: builtin/mktag.c:103 builtin/tag.c:243
 msgid "unable to write tag file"
 msgstr ""
 
-#: builtin/mktree.c:66
-msgid "git mktree [-z] [--missing] [--batch]"
-msgstr ""
-
 #: builtin/mktree.c:154
 msgid "input is NUL terminated"
 msgstr ""
@@ -17251,52 +17727,56 @@ msgstr ""
 msgid "Renaming %s to %s\n"
 msgstr ""
 
-#: builtin/mv.c:314 builtin/remote.c:790 builtin/repack.c:857
+#: builtin/mv.c:314 builtin/remote.c:812 builtin/repack.c:861
 #, c-format
 msgid "renaming '%s' failed"
 msgstr ""
 
-#: builtin/name-rev.c:474
+#: builtin/name-rev.c:524
 msgid "git name-rev [<options>] <commit>..."
 msgstr ""
 
-#: builtin/name-rev.c:475
+#: builtin/name-rev.c:525
 msgid "git name-rev [<options>] --all"
 msgstr ""
 
-#: builtin/name-rev.c:476
-msgid "git name-rev [<options>] --stdin"
+#: builtin/name-rev.c:526
+msgid "git name-rev [<options>] --annotate-stdin"
 msgstr ""
 
-#: builtin/name-rev.c:533
+#: builtin/name-rev.c:583
 msgid "print only ref-based names (no object names)"
 msgstr ""
 
-#: builtin/name-rev.c:534
+#: builtin/name-rev.c:584
 msgid "only use tags to name the commits"
 msgstr ""
 
-#: builtin/name-rev.c:536
+#: builtin/name-rev.c:586
 msgid "only use refs matching <pattern>"
 msgstr ""
 
-#: builtin/name-rev.c:538
+#: builtin/name-rev.c:588
 msgid "ignore refs matching <pattern>"
 msgstr ""
 
-#: builtin/name-rev.c:540
+#: builtin/name-rev.c:590
 msgid "list all commits reachable from all refs"
 msgstr ""
 
-#: builtin/name-rev.c:541
-msgid "read from stdin"
+#: builtin/name-rev.c:591
+msgid "deprecated: use annotate-stdin instead"
+msgstr ""
+
+#: builtin/name-rev.c:592
+msgid "annotate text from stdin"
 msgstr ""
 
-#: builtin/name-rev.c:542
+#: builtin/name-rev.c:593
 msgid "allow to print `undefined` names (default)"
 msgstr ""
 
-#: builtin/name-rev.c:548
+#: builtin/name-rev.c:599
 msgid "dereference tags in the input (internal use)"
 msgstr ""
 
@@ -17333,14 +17813,6 @@ msgid ""
 "git notes [--ref <notes-ref>] merge [-v | -q] [-s <strategy>] <notes-ref>"
 msgstr ""
 
-#: builtin/notes.c:35
-msgid "git notes merge --commit [-v | -q]"
-msgstr ""
-
-#: builtin/notes.c:36
-msgid "git notes merge --abort [-v | -q]"
-msgstr ""
-
 #: builtin/notes.c:37
 msgid "git notes [--ref <notes-ref>] remove [<object>...]"
 msgstr ""
@@ -17401,10 +17873,6 @@ msgstr ""
 msgid "git notes prune [<options>]"
 msgstr ""
 
-#: builtin/notes.c:92
-msgid "git notes get-ref"
-msgstr ""
-
 #: builtin/notes.c:97
 msgid "Write/edit the notes for the following object:"
 msgstr ""
@@ -17436,7 +17904,7 @@ msgstr ""
 msgid "the note contents have been left in %s"
 msgstr ""
 
-#: builtin/notes.c:240 builtin/tag.c:581
+#: builtin/notes.c:240 builtin/tag.c:582
 #, c-format
 msgid "could not open or read '%s'"
 msgstr ""
@@ -17476,13 +17944,6 @@ msgstr ""
 msgid "refusing to %s notes in %s (outside of refs/notes/)"
 msgstr ""
 
-#: builtin/notes.c:374 builtin/notes.c:429 builtin/notes.c:507
-#: builtin/notes.c:519 builtin/notes.c:596 builtin/notes.c:663
-#: builtin/notes.c:813 builtin/notes.c:965 builtin/notes.c:987
-#: builtin/prune-packed.c:25 builtin/receive-pack.c:2487 builtin/tag.c:591
-msgid "too many arguments"
-msgstr ""
-
 #: builtin/notes.c:387 builtin/notes.c:676
 #, c-format
 msgid "no note found for object %s."
@@ -17658,7 +18119,7 @@ msgid ""
 "abort'.\n"
 msgstr ""
 
-#: builtin/notes.c:899 builtin/tag.c:594
+#: builtin/notes.c:899 builtin/tag.c:595
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr ""
@@ -17676,7 +18137,7 @@ msgstr ""
 msgid "read object names from the standard input"
 msgstr ""
 
-#: builtin/notes.c:956 builtin/prune.c:144 builtin/worktree.c:147
+#: builtin/notes.c:956 builtin/prune.c:144 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr ""
 
@@ -17692,7 +18153,7 @@ msgstr ""
 msgid "use notes from <notes-ref>"
 msgstr ""
 
-#: builtin/notes.c:1036 builtin/stash.c:1818
+#: builtin/notes.c:1036 builtin/stash.c:1802
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr ""
@@ -17707,390 +18168,386 @@ msgid ""
 "git pack-objects [<options>...] <base-name> [< <ref-list> | < <object-list>]"
 msgstr ""
 
-#: builtin/pack-objects.c:572
+#: builtin/pack-objects.c:570
 #, c-format
 msgid ""
 "write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
 "pack %s"
 msgstr ""
 
-#: builtin/pack-objects.c:580
+#: builtin/pack-objects.c:578
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr ""
 
-#: builtin/pack-objects.c:591
+#: builtin/pack-objects.c:589
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr ""
 
-#: builtin/pack-objects.c:722
+#: builtin/pack-objects.c:720
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr ""
 
-#: builtin/pack-objects.c:941
+#: builtin/pack-objects.c:939
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr ""
 
-#: builtin/pack-objects.c:1036
+#: builtin/pack-objects.c:1034
 #, c-format
 msgid "expected object at offset %<PRIuMAX> in pack %s"
 msgstr ""
 
-#: builtin/pack-objects.c:1160
+#: builtin/pack-objects.c:1158
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr ""
 
-#: builtin/pack-objects.c:1173
+#: builtin/pack-objects.c:1171
 msgid "Writing objects"
 msgstr ""
 
-#: builtin/pack-objects.c:1235 builtin/update-index.c:90
+#: builtin/pack-objects.c:1243 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr ""
 
-#: builtin/pack-objects.c:1268
+#: builtin/pack-objects.c:1276
 msgid "failed to write bitmap index"
 msgstr ""
 
-#: builtin/pack-objects.c:1294
+#: builtin/pack-objects.c:1302
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr ""
 
-#: builtin/pack-objects.c:1536
+#: builtin/pack-objects.c:1544
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr ""
 
-#: builtin/pack-objects.c:1984
+#: builtin/pack-objects.c:1992
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr ""
 
-#: builtin/pack-objects.c:1993
+#: builtin/pack-objects.c:2001
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr ""
 
-#: builtin/pack-objects.c:2274
+#: builtin/pack-objects.c:2282
 msgid "Counting objects"
 msgstr ""
 
-#: builtin/pack-objects.c:2439
+#: builtin/pack-objects.c:2447
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr ""
 
-#: builtin/pack-objects.c:2509 builtin/pack-objects.c:2525
-#: builtin/pack-objects.c:2535
+#: builtin/pack-objects.c:2517 builtin/pack-objects.c:2533
+#: builtin/pack-objects.c:2543
 #, c-format
 msgid "object %s cannot be read"
 msgstr ""
 
-#: builtin/pack-objects.c:2512 builtin/pack-objects.c:2539
+#: builtin/pack-objects.c:2520 builtin/pack-objects.c:2547
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr ""
 
-#: builtin/pack-objects.c:2549
+#: builtin/pack-objects.c:2557
 msgid "suboptimal pack - out of memory"
 msgstr ""
 
-#: builtin/pack-objects.c:2864
+#: builtin/pack-objects.c:2872
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr ""
 
-#: builtin/pack-objects.c:3003
+#: builtin/pack-objects.c:3011
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr ""
 
-#: builtin/pack-objects.c:3089
+#: builtin/pack-objects.c:3097
 msgid "Compressing objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3095
+#: builtin/pack-objects.c:3103
 msgid "inconsistency with delta count"
 msgstr ""
 
-#: builtin/pack-objects.c:3174
+#: builtin/pack-objects.c:3182
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
 "hash> <uri>' (got '%s')"
 msgstr ""
 
-#: builtin/pack-objects.c:3177
+#: builtin/pack-objects.c:3185
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
 msgstr ""
 
-#: builtin/pack-objects.c:3212
+#: builtin/pack-objects.c:3220
 #, c-format
 msgid "could not get type of object %s in pack %s"
 msgstr ""
 
-#: builtin/pack-objects.c:3340 builtin/pack-objects.c:3351
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3348 builtin/pack-objects.c:3359
+#: builtin/pack-objects.c:3373
 #, c-format
 msgid "could not find pack '%s'"
 msgstr ""
 
-#: builtin/pack-objects.c:3408
+#: builtin/pack-objects.c:3416
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
 " %s"
 msgstr ""
 
-#: builtin/pack-objects.c:3414
+#: builtin/pack-objects.c:3422
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
 " %s"
 msgstr ""
 
-#: builtin/pack-objects.c:3507
-msgid "invalid value for --missing"
-msgstr ""
-
-#: builtin/pack-objects.c:3532 builtin/pack-objects.c:3619
+#: builtin/pack-objects.c:3540 builtin/pack-objects.c:3627
 msgid "cannot open pack index"
 msgstr ""
 
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3549
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr ""
 
-#: builtin/pack-objects.c:3627
+#: builtin/pack-objects.c:3635
 msgid "unable to force loose object"
 msgstr ""
 
-#: builtin/pack-objects.c:3757
+#: builtin/pack-objects.c:3763
 #, c-format
 msgid "not a rev '%s'"
 msgstr ""
 
-#: builtin/pack-objects.c:3760 builtin/rev-parse.c:1061
+#: builtin/pack-objects.c:3766 builtin/rev-parse.c:1061
 #, c-format
 msgid "bad revision '%s'"
 msgstr ""
 
-#: builtin/pack-objects.c:3788
+#: builtin/pack-objects.c:3794
 msgid "unable to add recent objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3841
+#: builtin/pack-objects.c:3847
 #, c-format
 msgid "unsupported index version %s"
 msgstr ""
 
-#: builtin/pack-objects.c:3845
+#: builtin/pack-objects.c:3851
 #, c-format
 msgid "bad index version '%s'"
 msgstr ""
 
-#: builtin/pack-objects.c:3884
+#: builtin/pack-objects.c:3907
 msgid "<version>[,<offset>]"
 msgstr ""
 
-#: builtin/pack-objects.c:3885
+#: builtin/pack-objects.c:3908
 msgid "write the pack index file in the specified idx format version"
 msgstr ""
 
-#: builtin/pack-objects.c:3888
+#: builtin/pack-objects.c:3911
 msgid "maximum size of each output pack file"
 msgstr ""
 
-#: builtin/pack-objects.c:3890
+#: builtin/pack-objects.c:3913
 msgid "ignore borrowed objects from alternate object store"
 msgstr ""
 
-#: builtin/pack-objects.c:3892
+#: builtin/pack-objects.c:3915
 msgid "ignore packed objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3894
+#: builtin/pack-objects.c:3917
 msgid "limit pack window by objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3896
+#: builtin/pack-objects.c:3919
 msgid "limit pack window by memory in addition to object limit"
 msgstr ""
 
-#: builtin/pack-objects.c:3898
+#: builtin/pack-objects.c:3921
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr ""
 
-#: builtin/pack-objects.c:3900
+#: builtin/pack-objects.c:3923
 msgid "reuse existing deltas"
 msgstr ""
 
-#: builtin/pack-objects.c:3902
+#: builtin/pack-objects.c:3925
 msgid "reuse existing objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3904
+#: builtin/pack-objects.c:3927
 msgid "use OFS_DELTA objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3906
+#: builtin/pack-objects.c:3929
 msgid "use threads when searching for best delta matches"
 msgstr ""
 
-#: builtin/pack-objects.c:3908
+#: builtin/pack-objects.c:3931
 msgid "do not create an empty pack output"
 msgstr ""
 
-#: builtin/pack-objects.c:3910
+#: builtin/pack-objects.c:3933
 msgid "read revision arguments from standard input"
 msgstr ""
 
-#: builtin/pack-objects.c:3912
+#: builtin/pack-objects.c:3935
 msgid "limit the objects to those that are not yet packed"
 msgstr ""
 
-#: builtin/pack-objects.c:3915
+#: builtin/pack-objects.c:3938
 msgid "include objects reachable from any reference"
 msgstr ""
 
-#: builtin/pack-objects.c:3918
+#: builtin/pack-objects.c:3941
 msgid "include objects referred by reflog entries"
 msgstr ""
 
-#: builtin/pack-objects.c:3921
+#: builtin/pack-objects.c:3944
 msgid "include objects referred to by the index"
 msgstr ""
 
-#: builtin/pack-objects.c:3924
+#: builtin/pack-objects.c:3947
 msgid "read packs from stdin"
 msgstr ""
 
-#: builtin/pack-objects.c:3926
+#: builtin/pack-objects.c:3949
 msgid "output pack to stdout"
 msgstr ""
 
-#: builtin/pack-objects.c:3928
+#: builtin/pack-objects.c:3951
 msgid "include tag objects that refer to objects to be packed"
 msgstr ""
 
-#: builtin/pack-objects.c:3930
+#: builtin/pack-objects.c:3953
 msgid "keep unreachable objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3932
+#: builtin/pack-objects.c:3955
 msgid "pack loose unreachable objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3934
+#: builtin/pack-objects.c:3957
 msgid "unpack unreachable objects newer than <time>"
 msgstr ""
 
-#: builtin/pack-objects.c:3937
+#: builtin/pack-objects.c:3960
 msgid "use the sparse reachability algorithm"
 msgstr ""
 
-#: builtin/pack-objects.c:3939
+#: builtin/pack-objects.c:3962
 msgid "create thin packs"
 msgstr ""
 
-#: builtin/pack-objects.c:3941
+#: builtin/pack-objects.c:3964
 msgid "create packs suitable for shallow fetches"
 msgstr ""
 
-#: builtin/pack-objects.c:3943
+#: builtin/pack-objects.c:3966
 msgid "ignore packs that have companion .keep file"
 msgstr ""
 
-#: builtin/pack-objects.c:3945
+#: builtin/pack-objects.c:3968
 msgid "ignore this pack"
 msgstr ""
 
-#: builtin/pack-objects.c:3947
+#: builtin/pack-objects.c:3970
 msgid "pack compression level"
 msgstr ""
 
-#: builtin/pack-objects.c:3949
+#: builtin/pack-objects.c:3972
 msgid "do not hide commits by grafts"
 msgstr ""
 
-#: builtin/pack-objects.c:3951
+#: builtin/pack-objects.c:3974
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3953
+#: builtin/pack-objects.c:3976
 msgid "write a bitmap index together with the pack index"
 msgstr ""
 
-#: builtin/pack-objects.c:3957
+#: builtin/pack-objects.c:3980
 msgid "write a bitmap index if possible"
 msgstr ""
 
-#: builtin/pack-objects.c:3961
+#: builtin/pack-objects.c:3984
 msgid "handling for missing objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3964
+#: builtin/pack-objects.c:3987
 msgid "do not pack objects in promisor packfiles"
 msgstr ""
 
-#: builtin/pack-objects.c:3966
+#: builtin/pack-objects.c:3989
 msgid "respect islands during delta compression"
 msgstr ""
 
-#: builtin/pack-objects.c:3968
+#: builtin/pack-objects.c:3991
 msgid "protocol"
 msgstr ""
 
-#: builtin/pack-objects.c:3969
+#: builtin/pack-objects.c:3992
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr ""
 
-#: builtin/pack-objects.c:4002
+#: builtin/pack-objects.c:4027
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr ""
 
-#: builtin/pack-objects.c:4007
+#: builtin/pack-objects.c:4032
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr ""
 
-#: builtin/pack-objects.c:4063
+#: builtin/pack-objects.c:4088
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 
-#: builtin/pack-objects.c:4065
+#: builtin/pack-objects.c:4090
 msgid "minimum pack size limit is 1 MiB"
 msgstr ""
 
-#: builtin/pack-objects.c:4070
+#: builtin/pack-objects.c:4095
 msgid "--thin cannot be used to build an indexable pack"
 msgstr ""
 
-#: builtin/pack-objects.c:4079
+#: builtin/pack-objects.c:4104
 msgid "cannot use --filter without --stdout"
 msgstr ""
 
-#: builtin/pack-objects.c:4081
+#: builtin/pack-objects.c:4106
 msgid "cannot use --filter with --stdin-packs"
 msgstr ""
 
-#: builtin/pack-objects.c:4085
+#: builtin/pack-objects.c:4110
 msgid "cannot use internal rev list with --stdin-packs"
 msgstr ""
 
-#: builtin/pack-objects.c:4144
+#: builtin/pack-objects.c:4169
 msgid "Enumerating objects"
 msgstr ""
 
-#: builtin/pack-objects.c:4180
+#: builtin/pack-objects.c:4210
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -18118,10 +18575,6 @@ msgstr ""
 msgid "prune loose refs (default)"
 msgstr ""
 
-#: builtin/prune-packed.c:6
-msgid "git prune-packed [-n | --dry-run] [-q | --quiet]"
-msgstr ""
-
 #: builtin/prune.c:14
 msgid "git prune [-n] [-v] [--progress] [--expire <time>] [--] [<head>...]"
 msgstr ""
@@ -18142,11 +18595,6 @@ msgstr ""
 msgid "cannot prune in a precious-objects repo"
 msgstr ""
 
-#: builtin/pull.c:45 builtin/pull.c:47
-#, c-format
-msgid "Invalid value for %s: %s"
-msgstr ""
-
 #: builtin/pull.c:67
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
 msgstr ""
@@ -18171,7 +18619,7 @@ msgstr ""
 msgid "control use of pre-merge-commit and commit-msg hooks"
 msgstr ""
 
-#: builtin/pull.c:171 parse-options.h:340
+#: builtin/pull.c:171 parse-options.h:371
 msgid "automatically stash/stash pop before and after"
 msgstr ""
 
@@ -18187,11 +18635,6 @@ msgstr ""
 msgid "number of submodules pulled in parallel"
 msgstr ""
 
-#: builtin/pull.c:321
-#, c-format
-msgid "Invalid value for pull.ff: %s"
-msgstr ""
-
 #: builtin/pull.c:449
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
@@ -18217,7 +18660,7 @@ msgid ""
 "for your current branch, you must specify a branch on the command line."
 msgstr ""
 
-#: builtin/pull.c:460 builtin/rebase.c:951
+#: builtin/pull.c:460 builtin/rebase.c:978
 msgid "You are not currently on a branch."
 msgstr ""
 
@@ -18234,16 +18677,16 @@ msgid "See git-pull(1) for details."
 msgstr ""
 
 #: builtin/pull.c:467 builtin/pull.c:473 builtin/pull.c:482
-#: builtin/rebase.c:957
+#: builtin/rebase.c:984
 msgid "<remote>"
 msgstr ""
 
 #: builtin/pull.c:467 builtin/pull.c:482 builtin/pull.c:487
-#: contrib/scalar/scalar.c:375
+#: contrib/scalar/scalar.c:374
 msgid "<branch>"
 msgstr ""
 
-#: builtin/pull.c:475 builtin/rebase.c:949
+#: builtin/pull.c:475 builtin/rebase.c:976
 msgid "There is no tracking information for the current branch."
 msgstr ""
 
@@ -18285,19 +18728,19 @@ msgid ""
 "invocation.\n"
 msgstr ""
 
-#: builtin/pull.c:1046
+#: builtin/pull.c:1047
 msgid "Updating an unborn branch with changes added to the index."
 msgstr ""
 
-#: builtin/pull.c:1050
+#: builtin/pull.c:1051
 msgid "pull with rebase"
 msgstr ""
 
-#: builtin/pull.c:1051
+#: builtin/pull.c:1052
 msgid "please commit or stash them."
 msgstr ""
 
-#: builtin/pull.c:1076
+#: builtin/pull.c:1077
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -18305,7 +18748,7 @@ msgid ""
 "commit %s."
 msgstr ""
 
-#: builtin/pull.c:1082
+#: builtin/pull.c:1083
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -18316,23 +18759,23 @@ msgid ""
 "to recover."
 msgstr ""
 
-#: builtin/pull.c:1097
+#: builtin/pull.c:1098
 msgid "Cannot merge multiple branches into empty head."
 msgstr ""
 
-#: builtin/pull.c:1102
+#: builtin/pull.c:1103
 msgid "Cannot rebase onto multiple branches."
 msgstr ""
 
-#: builtin/pull.c:1104
+#: builtin/pull.c:1105
 msgid "Cannot fast-forward to multiple branches."
 msgstr ""
 
-#: builtin/pull.c:1119
+#: builtin/pull.c:1120
 msgid "Need to specify how to reconcile divergent branches."
 msgstr ""
 
-#: builtin/pull.c:1133
+#: builtin/pull.c:1134
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 
@@ -18460,7 +18903,7 @@ msgstr ""
 msgid "failed to push some refs to '%s'"
 msgstr ""
 
-#: builtin/push.c:544 builtin/submodule--helper.c:3259
+#: builtin/push.c:544 builtin/submodule--helper.c:3377
 msgid "repository"
 msgstr ""
 
@@ -18687,63 +19130,59 @@ msgstr ""
 msgid "suppress feedback messages"
 msgstr ""
 
-#: builtin/read-tree.c:183
+#: builtin/read-tree.c:190
 msgid "You need to resolve your current index first"
 msgstr ""
 
-#: builtin/rebase.c:35
+#: builtin/rebase.c:36
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
 "[<upstream> [<branch>]]"
 msgstr ""
 
-#: builtin/rebase.c:37
+#: builtin/rebase.c:38
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]"
 msgstr ""
 
-#: builtin/rebase.c:39
-msgid "git rebase --continue | --abort | --skip | --edit-todo"
-msgstr ""
-
-#: builtin/rebase.c:230
+#: builtin/rebase.c:231
 #, c-format
 msgid "could not create temporary %s"
 msgstr ""
 
-#: builtin/rebase.c:236
+#: builtin/rebase.c:237
 msgid "could not mark as interactive"
 msgstr ""
 
-#: builtin/rebase.c:289
+#: builtin/rebase.c:290
 msgid "could not generate todo list"
 msgstr ""
 
-#: builtin/rebase.c:331
+#: builtin/rebase.c:332
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr ""
 
-#: builtin/rebase.c:390
+#: builtin/rebase.c:391
 #, c-format
 msgid "%s requires the merge backend"
 msgstr ""
 
-#: builtin/rebase.c:432
+#: builtin/rebase.c:433
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr ""
 
-#: builtin/rebase.c:449
+#: builtin/rebase.c:450
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr ""
 
-#: builtin/rebase.c:474
+#: builtin/rebase.c:475
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr ""
 
-#: builtin/rebase.c:597
+#: builtin/rebase.c:600
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -18752,7 +19191,7 @@ msgid ""
 "abort\"."
 msgstr ""
 
-#: builtin/rebase.c:680
+#: builtin/rebase.c:685
 #, c-format
 msgid ""
 "\n"
@@ -18764,14 +19203,19 @@ msgid ""
 "As a result, git cannot rebase them."
 msgstr ""
 
-#: builtin/rebase.c:925
+#: builtin/rebase.c:836
+#, c-format
+msgid "could not switch to %s"
+msgstr ""
+
+#: builtin/rebase.c:952
 #, c-format
 msgid ""
 "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
 "\"."
 msgstr ""
 
-#: builtin/rebase.c:943
+#: builtin/rebase.c:970
 #, c-format
 msgid ""
 "%s\n"
@@ -18782,7 +19226,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: builtin/rebase.c:959
+#: builtin/rebase.c:986
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -18791,194 +19235,194 @@ msgid ""
 "\n"
 msgstr ""
 
-#: builtin/rebase.c:989
+#: builtin/rebase.c:1016
 msgid "exec commands cannot contain newlines"
 msgstr ""
 
-#: builtin/rebase.c:993
+#: builtin/rebase.c:1020
 msgid "empty exec command"
 msgstr ""
 
-#: builtin/rebase.c:1023
+#: builtin/rebase.c:1051
 msgid "rebase onto given branch instead of upstream"
 msgstr ""
 
-#: builtin/rebase.c:1025
+#: builtin/rebase.c:1053
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr ""
 
-#: builtin/rebase.c:1027
+#: builtin/rebase.c:1055
 msgid "allow pre-rebase hook to run"
 msgstr ""
 
-#: builtin/rebase.c:1029
+#: builtin/rebase.c:1057
 msgid "be quiet. implies --no-stat"
 msgstr ""
 
-#: builtin/rebase.c:1032
+#: builtin/rebase.c:1060
 msgid "display a diffstat of what changed upstream"
 msgstr ""
 
-#: builtin/rebase.c:1035
+#: builtin/rebase.c:1063
 msgid "do not show diffstat of what changed upstream"
 msgstr ""
 
-#: builtin/rebase.c:1038
+#: builtin/rebase.c:1066
 msgid "add a Signed-off-by trailer to each commit"
 msgstr ""
 
-#: builtin/rebase.c:1041
+#: builtin/rebase.c:1069
 msgid "make committer date match author date"
 msgstr ""
 
-#: builtin/rebase.c:1043
+#: builtin/rebase.c:1071
 msgid "ignore author date and use current date"
 msgstr ""
 
-#: builtin/rebase.c:1045
+#: builtin/rebase.c:1073
 msgid "synonym of --reset-author-date"
 msgstr ""
 
-#: builtin/rebase.c:1047 builtin/rebase.c:1051
+#: builtin/rebase.c:1075 builtin/rebase.c:1079
 msgid "passed to 'git apply'"
 msgstr ""
 
-#: builtin/rebase.c:1049
+#: builtin/rebase.c:1077
 msgid "ignore changes in whitespace"
 msgstr ""
 
-#: builtin/rebase.c:1053 builtin/rebase.c:1056
+#: builtin/rebase.c:1081 builtin/rebase.c:1084
 msgid "cherry-pick all commits, even if unchanged"
 msgstr ""
 
-#: builtin/rebase.c:1058
+#: builtin/rebase.c:1086
 msgid "continue"
 msgstr ""
 
-#: builtin/rebase.c:1061
+#: builtin/rebase.c:1089
 msgid "skip current patch and continue"
 msgstr ""
 
-#: builtin/rebase.c:1063
+#: builtin/rebase.c:1091
 msgid "abort and check out the original branch"
 msgstr ""
 
-#: builtin/rebase.c:1066
+#: builtin/rebase.c:1094
 msgid "abort but keep HEAD where it is"
 msgstr ""
 
-#: builtin/rebase.c:1067
+#: builtin/rebase.c:1095
 msgid "edit the todo list during an interactive rebase"
 msgstr ""
 
-#: builtin/rebase.c:1070
+#: builtin/rebase.c:1098
 msgid "show the patch file being applied or merged"
 msgstr ""
 
-#: builtin/rebase.c:1073
+#: builtin/rebase.c:1101
 msgid "use apply strategies to rebase"
 msgstr ""
 
-#: builtin/rebase.c:1077
+#: builtin/rebase.c:1105
 msgid "use merging strategies to rebase"
 msgstr ""
 
-#: builtin/rebase.c:1081
+#: builtin/rebase.c:1109
 msgid "let the user edit the list of commits to rebase"
 msgstr ""
 
-#: builtin/rebase.c:1085
+#: builtin/rebase.c:1113
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr ""
 
-#: builtin/rebase.c:1090
+#: builtin/rebase.c:1118
 msgid "how to handle commits that become empty"
 msgstr ""
 
-#: builtin/rebase.c:1093
+#: builtin/rebase.c:1121
 msgid "keep commits which start empty"
 msgstr ""
 
-#: builtin/rebase.c:1097
+#: builtin/rebase.c:1125
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr ""
 
-#: builtin/rebase.c:1104
+#: builtin/rebase.c:1132
 msgid "add exec lines after each commit of the editable list"
 msgstr ""
 
-#: builtin/rebase.c:1108
+#: builtin/rebase.c:1136
 msgid "allow rebasing commits with empty messages"
 msgstr ""
 
-#: builtin/rebase.c:1112
+#: builtin/rebase.c:1140
 msgid "try to rebase merges instead of skipping them"
 msgstr ""
 
-#: builtin/rebase.c:1115
+#: builtin/rebase.c:1143
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr ""
 
-#: builtin/rebase.c:1117
+#: builtin/rebase.c:1145
 msgid "use the given merge strategy"
 msgstr ""
 
-#: builtin/rebase.c:1119 builtin/revert.c:115
+#: builtin/rebase.c:1147 builtin/revert.c:115
 msgid "option"
 msgstr ""
 
-#: builtin/rebase.c:1120
+#: builtin/rebase.c:1148
 msgid "pass the argument through to the merge strategy"
 msgstr ""
 
-#: builtin/rebase.c:1123
+#: builtin/rebase.c:1151
 msgid "rebase all reachable commits up to the root(s)"
 msgstr ""
 
-#: builtin/rebase.c:1126
+#: builtin/rebase.c:1154
 msgid "automatically re-schedule any `exec` that fails"
 msgstr ""
 
-#: builtin/rebase.c:1128
+#: builtin/rebase.c:1156
 msgid "apply all changes, even those already present upstream"
 msgstr ""
 
-#: builtin/rebase.c:1149
+#: builtin/rebase.c:1177
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr ""
 
-#: builtin/rebase.c:1180
+#: builtin/rebase.c:1208
 msgid "--preserve-merges was replaced by --rebase-merges"
 msgstr ""
 
-#: builtin/rebase.c:1202
+#: builtin/rebase.c:1230
 msgid "No rebase in progress?"
 msgstr ""
 
-#: builtin/rebase.c:1206
+#: builtin/rebase.c:1234
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr ""
 
-#: builtin/rebase.c:1229 t/helper/test-fast-rebase.c:122
+#: builtin/rebase.c:1257 t/helper/test-fast-rebase.c:122
 msgid "Cannot read HEAD"
 msgstr ""
 
-#: builtin/rebase.c:1241
+#: builtin/rebase.c:1269
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
 msgstr ""
 
-#: builtin/rebase.c:1260
+#: builtin/rebase.c:1287
 msgid "could not discard worktree changes"
 msgstr ""
 
-#: builtin/rebase.c:1279
+#: builtin/rebase.c:1308
 #, c-format
 msgid "could not move back to %s"
 msgstr ""
 
-#: builtin/rebase.c:1325
+#: builtin/rebase.c:1354
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -18991,122 +19435,117 @@ msgid ""
 "valuable there.\n"
 msgstr ""
 
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1382
 msgid "switch `C' expects a numerical value"
 msgstr ""
 
-#: builtin/rebase.c:1395
+#: builtin/rebase.c:1424
 #, c-format
 msgid "Unknown mode: %s"
 msgstr ""
 
-#: builtin/rebase.c:1434
+#: builtin/rebase.c:1463
 msgid "--strategy requires --merge or --interactive"
 msgstr ""
 
-#: builtin/rebase.c:1463
+#: builtin/rebase.c:1492
 msgid "apply options and merge options cannot be used together"
 msgstr ""
 
-#: builtin/rebase.c:1476
+#: builtin/rebase.c:1505
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr ""
 
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1534
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr ""
 
-#: builtin/rebase.c:1536
+#: builtin/rebase.c:1565
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr ""
 
-#: builtin/rebase.c:1542
+#: builtin/rebase.c:1571
 msgid "Could not create new root commit"
 msgstr ""
 
-#: builtin/rebase.c:1568
+#: builtin/rebase.c:1597
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr ""
 
-#: builtin/rebase.c:1571
+#: builtin/rebase.c:1600
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr ""
 
-#: builtin/rebase.c:1580
+#: builtin/rebase.c:1609
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr ""
 
-#: builtin/rebase.c:1607
+#: builtin/rebase.c:1636
 #, c-format
 msgid "no such branch/commit '%s'"
 msgstr ""
 
-#: builtin/rebase.c:1618 builtin/submodule--helper.c:39
-#: builtin/submodule--helper.c:2659
+#: builtin/rebase.c:1647 builtin/submodule--helper.c:43
+#: builtin/submodule--helper.c:2477
 #, c-format
 msgid "No such ref: %s"
 msgstr ""
 
-#: builtin/rebase.c:1629
+#: builtin/rebase.c:1658
 msgid "Could not resolve HEAD to a revision"
 msgstr ""
 
-#: builtin/rebase.c:1650
+#: builtin/rebase.c:1679
 msgid "Please commit or stash them."
 msgstr ""
 
-#: builtin/rebase.c:1686
-#, c-format
-msgid "could not switch to %s"
-msgstr ""
-
-#: builtin/rebase.c:1697
+#: builtin/rebase.c:1714
 msgid "HEAD is up to date."
 msgstr ""
 
-#: builtin/rebase.c:1699
+#: builtin/rebase.c:1716
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr ""
 
-#: builtin/rebase.c:1707
+#: builtin/rebase.c:1724
 msgid "HEAD is up to date, rebase forced."
 msgstr ""
 
-#: builtin/rebase.c:1709
+#: builtin/rebase.c:1726
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr ""
 
-#: builtin/rebase.c:1717
+#: builtin/rebase.c:1734
 msgid "The pre-rebase hook refused to rebase."
 msgstr ""
 
-#: builtin/rebase.c:1724
+#: builtin/rebase.c:1741
 #, c-format
 msgid "Changes to %s:\n"
 msgstr ""
 
-#: builtin/rebase.c:1727
+#: builtin/rebase.c:1744
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr ""
 
-#: builtin/rebase.c:1752
+#: builtin/rebase.c:1769
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 
-#: builtin/rebase.c:1761
+#: builtin/rebase.c:1781
 msgid "Could not detach HEAD"
 msgstr ""
 
-#: builtin/rebase.c:1770
+#: builtin/rebase.c:1790
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr ""
@@ -19115,7 +19554,7 @@ msgstr ""
 msgid "git receive-pack <git-dir>"
 msgstr ""
 
-#: builtin/receive-pack.c:1275
+#: builtin/receive-pack.c:1263
 msgid ""
 "By default, updating the current branch in a non-bare repository\n"
 "is denied, because it will make the index and work tree inconsistent\n"
@@ -19132,7 +19571,7 @@ msgid ""
 "'receive.denyCurrentBranch' configuration variable to 'refuse'."
 msgstr ""
 
-#: builtin/receive-pack.c:1295
+#: builtin/receive-pack.c:1283
 msgid ""
 "By default, deleting the current branch is denied, because the next\n"
 "'git clone' won't result in any file checked out, causing confusion.\n"
@@ -19144,235 +19583,265 @@ msgid ""
 "To squelch this message, you can set it to 'refuse'."
 msgstr ""
 
-#: builtin/receive-pack.c:2474
+#: builtin/receive-pack.c:2476
 msgid "quiet"
 msgstr ""
 
-#: builtin/receive-pack.c:2489
+#: builtin/receive-pack.c:2491
 msgid "you must specify a directory"
 msgstr ""
 
-#: builtin/reflog.c:17
+#: builtin/reflog.c:9
+msgid "git reflog [show] [<log-options>] [<ref>]"
+msgstr ""
+
+#: builtin/reflog.c:12
 msgid ""
-"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<refs>..."
+"git reflog expire [--expire=<time>] [--expire-unreachable=<time>]\n"
+"                  [--rewrite] [--updateref] [--stale-fix]\n"
+"                  [--dry-run | -n] [--verbose] [--all [--single-worktree] | "
+"<refs>...]"
 msgstr ""
 
-#: builtin/reflog.c:22
+#: builtin/reflog.c:17
 msgid ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] "
-"<refs>..."
+"git reflog delete [--rewrite] [--updateref]\n"
+"                  [--dry-run | -n] [--verbose] <ref>@{<specifier>}..."
 msgstr ""
 
-#: builtin/reflog.c:25
+#: builtin/reflog.c:21
 msgid "git reflog exists <ref>"
 msgstr ""
 
-#: builtin/reflog.c:585 builtin/reflog.c:590
+#: builtin/reflog.c:197 builtin/reflog.c:211
 #, c-format
-msgid "'%s' is not a valid timestamp"
+msgid "invalid timestamp '%s' given to '--%s'"
 msgstr ""
 
-#: builtin/reflog.c:631
-#, c-format
-msgid "Marking reachable objects..."
+#: builtin/reflog.c:240 builtin/reflog.c:359
+msgid "do not actually prune any entries"
 msgstr ""
 
-#: builtin/reflog.c:675
-#, c-format
-msgid "%s points nowhere!"
+#: builtin/reflog.c:243 builtin/reflog.c:362
+msgid ""
+"rewrite the old SHA1 with the new SHA1 of the entry that now precedes it"
 msgstr ""
 
-#: builtin/reflog.c:731
-msgid "no reflog specified to delete"
+#: builtin/reflog.c:246 builtin/reflog.c:365
+msgid "update the reference to the value of the top reflog entry"
 msgstr ""
 
-#: builtin/reflog.c:742
-#, c-format
-msgid "not a reflog: %s"
+#: builtin/reflog.c:248 builtin/reflog.c:367
+msgid "print extra information on screen"
+msgstr ""
+
+#: builtin/reflog.c:249 builtin/reflog.c:253
+msgid "timestamp"
+msgstr ""
+
+#: builtin/reflog.c:250
+msgid "prune entries older than the specified time"
+msgstr ""
+
+#: builtin/reflog.c:254
+msgid ""
+"prune entries older than <time> that are not reachable from the current tip "
+"of the branch"
+msgstr ""
+
+#: builtin/reflog.c:258
+msgid "prune any reflog entries that point to broken commits"
+msgstr ""
+
+#: builtin/reflog.c:259
+msgid "process the reflogs of all references"
+msgstr ""
+
+#: builtin/reflog.c:261
+msgid "limits processing to reflogs from the current worktree only"
 msgstr ""
 
-#: builtin/reflog.c:747
+#: builtin/reflog.c:294
 #, c-format
-msgid "no reflog for '%s'"
+msgid "Marking reachable objects..."
 msgstr ""
 
-#: builtin/reflog.c:794
+#: builtin/reflog.c:338
 #, c-format
-msgid "invalid ref format: %s"
+msgid "%s points nowhere!"
 msgstr ""
 
-#: builtin/reflog.c:803
-msgid "git reflog [ show | expire | delete | exists ]"
+#: builtin/reflog.c:374
+msgid "no reflog specified to delete"
 msgstr ""
 
-#: builtin/remote.c:17
-msgid "git remote [-v | --verbose]"
+#: builtin/reflog.c:396
+#, c-format
+msgid "invalid ref format: %s"
 msgstr ""
 
-#: builtin/remote.c:18
+#: builtin/remote.c:19
 msgid ""
 "git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--"
 "mirror=<fetch|push>] <name> <url>"
 msgstr ""
 
-#: builtin/remote.c:19 builtin/remote.c:39
-msgid "git remote rename <old> <new>"
+#: builtin/remote.c:20 builtin/remote.c:40
+msgid "git remote rename [--[no-]progress] <old> <new>"
 msgstr ""
 
-#: builtin/remote.c:20 builtin/remote.c:44
+#: builtin/remote.c:21 builtin/remote.c:45
 msgid "git remote remove <name>"
 msgstr ""
 
-#: builtin/remote.c:21 builtin/remote.c:49
+#: builtin/remote.c:22 builtin/remote.c:50
 msgid "git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"
 msgstr ""
 
-#: builtin/remote.c:22
+#: builtin/remote.c:23
 msgid "git remote [-v | --verbose] show [-n] <name>"
 msgstr ""
 
-#: builtin/remote.c:23
+#: builtin/remote.c:24
 msgid "git remote prune [-n | --dry-run] <name>"
 msgstr ""
 
-#: builtin/remote.c:24
+#: builtin/remote.c:25
 msgid ""
 "git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
 msgstr ""
 
-#: builtin/remote.c:25
+#: builtin/remote.c:26
 msgid "git remote set-branches [--add] <name> <branch>..."
 msgstr ""
 
-#: builtin/remote.c:26 builtin/remote.c:75
+#: builtin/remote.c:27 builtin/remote.c:76
 msgid "git remote get-url [--push] [--all] <name>"
 msgstr ""
 
-#: builtin/remote.c:27 builtin/remote.c:80
+#: builtin/remote.c:28 builtin/remote.c:81
 msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]"
 msgstr ""
 
-#: builtin/remote.c:28 builtin/remote.c:81
+#: builtin/remote.c:29 builtin/remote.c:82
 msgid "git remote set-url --add <name> <newurl>"
 msgstr ""
 
-#: builtin/remote.c:29 builtin/remote.c:82
+#: builtin/remote.c:30 builtin/remote.c:83
 msgid "git remote set-url --delete <name> <url>"
 msgstr ""
 
-#: builtin/remote.c:34
+#: builtin/remote.c:35
 msgid "git remote add [<options>] <name> <url>"
 msgstr ""
 
-#: builtin/remote.c:54
+#: builtin/remote.c:55
 msgid "git remote set-branches <name> <branch>..."
 msgstr ""
 
-#: builtin/remote.c:55
+#: builtin/remote.c:56
 msgid "git remote set-branches --add <name> <branch>..."
 msgstr ""
 
-#: builtin/remote.c:60
+#: builtin/remote.c:61
 msgid "git remote show [<options>] <name>"
 msgstr ""
 
-#: builtin/remote.c:65
+#: builtin/remote.c:66
 msgid "git remote prune [<options>] <name>"
 msgstr ""
 
-#: builtin/remote.c:70
+#: builtin/remote.c:71
 msgid "git remote update [<options>] [<group> | <remote>]..."
 msgstr ""
 
-#: builtin/remote.c:99
+#: builtin/remote.c:100
 #, c-format
 msgid "Updating %s"
 msgstr ""
 
-#: builtin/remote.c:101
+#: builtin/remote.c:102
 #, c-format
 msgid "Could not fetch %s"
 msgstr ""
 
-#: builtin/remote.c:131
+#: builtin/remote.c:132
 msgid ""
 "--mirror is dangerous and deprecated; please\n"
 "\t use --mirror=fetch or --mirror=push instead"
 msgstr ""
 
-#: builtin/remote.c:148
+#: builtin/remote.c:149
 #, c-format
 msgid "unknown mirror argument: %s"
 msgstr ""
 
-#: builtin/remote.c:164
+#: builtin/remote.c:165
 msgid "fetch the remote branches"
 msgstr ""
 
-#: builtin/remote.c:166
+#: builtin/remote.c:167
 msgid "import all tags and associated objects when fetching"
 msgstr ""
 
-#: builtin/remote.c:169
+#: builtin/remote.c:170
 msgid "or do not fetch any tag at all (--no-tags)"
 msgstr ""
 
-#: builtin/remote.c:171
+#: builtin/remote.c:172
 msgid "branch(es) to track"
 msgstr ""
 
-#: builtin/remote.c:172
+#: builtin/remote.c:173
 msgid "master branch"
 msgstr ""
 
-#: builtin/remote.c:174
+#: builtin/remote.c:175
 msgid "set up remote as a mirror to push to or fetch from"
 msgstr ""
 
-#: builtin/remote.c:186
+#: builtin/remote.c:187
 msgid "specifying a master branch makes no sense with --mirror"
 msgstr ""
 
-#: builtin/remote.c:188
+#: builtin/remote.c:189
 msgid "specifying branches to track makes sense only with fetch mirrors"
 msgstr ""
 
-#: builtin/remote.c:195 builtin/remote.c:705
+#: builtin/remote.c:196 builtin/remote.c:716
 #, c-format
 msgid "remote %s already exists."
 msgstr ""
 
-#: builtin/remote.c:240
+#: builtin/remote.c:241
 #, c-format
 msgid "Could not setup master '%s'"
 msgstr ""
 
-#: builtin/remote.c:322
+#: builtin/remote.c:323
 #, c-format
 msgid "unhandled branch.%s.rebase=%s; assuming 'true'"
 msgstr ""
 
-#: builtin/remote.c:366
+#: builtin/remote.c:367
 #, c-format
 msgid "Could not get fetch map for refspec %s"
 msgstr ""
 
-#: builtin/remote.c:460 builtin/remote.c:468
+#: builtin/remote.c:461 builtin/remote.c:469
 msgid "(matching)"
 msgstr ""
 
-#: builtin/remote.c:472
+#: builtin/remote.c:473
 msgid "(delete)"
 msgstr ""
 
-#: builtin/remote.c:660
+#: builtin/remote.c:664
 #, c-format
 msgid "could not set '%s'"
 msgstr ""
 
-#: builtin/remote.c:665
+#: builtin/remote.c:669
 #, c-format
 msgid ""
 "The %s configuration remote.pushDefault in:\n"
@@ -19380,17 +19849,17 @@ msgid ""
 "now names the non-existent remote '%s'"
 msgstr ""
 
-#: builtin/remote.c:696 builtin/remote.c:841 builtin/remote.c:948
+#: builtin/remote.c:707 builtin/remote.c:866 builtin/remote.c:973
 #, c-format
 msgid "No such remote: '%s'"
 msgstr ""
 
-#: builtin/remote.c:715
+#: builtin/remote.c:726
 #, c-format
 msgid "Could not rename config section '%s' to '%s'"
 msgstr ""
 
-#: builtin/remote.c:735
+#: builtin/remote.c:746
 #, c-format
 msgid ""
 "Not updating non-default fetch refspec\n"
@@ -19398,17 +19867,21 @@ msgid ""
 "\tPlease update the configuration manually if necessary."
 msgstr ""
 
-#: builtin/remote.c:775
+#: builtin/remote.c:783
+msgid "Renaming remote references"
+msgstr ""
+
+#: builtin/remote.c:794
 #, c-format
 msgid "deleting '%s' failed"
 msgstr ""
 
-#: builtin/remote.c:809
+#: builtin/remote.c:832
 #, c-format
 msgid "creating '%s' failed"
 msgstr ""
 
-#: builtin/remote.c:887
+#: builtin/remote.c:912
 msgid ""
 "Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
 "to delete it, use:"
@@ -19418,118 +19891,118 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/remote.c:901
+#: builtin/remote.c:926
 #, c-format
 msgid "Could not remove config section '%s'"
 msgstr ""
 
-#: builtin/remote.c:1009
+#: builtin/remote.c:1034
 #, c-format
 msgid " new (next fetch will store in remotes/%s)"
 msgstr ""
 
-#: builtin/remote.c:1012
+#: builtin/remote.c:1037
 msgid " tracked"
 msgstr ""
 
-#: builtin/remote.c:1014
+#: builtin/remote.c:1039
 msgid " stale (use 'git remote prune' to remove)"
 msgstr ""
 
-#: builtin/remote.c:1016
+#: builtin/remote.c:1041
 msgid " ???"
 msgstr ""
 
-#: builtin/remote.c:1057
+#: builtin/remote.c:1082
 #, c-format
 msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
 msgstr ""
 
-#: builtin/remote.c:1066
+#: builtin/remote.c:1091
 #, c-format
 msgid "rebases interactively onto remote %s"
 msgstr ""
 
-#: builtin/remote.c:1068
+#: builtin/remote.c:1093
 #, c-format
 msgid "rebases interactively (with merges) onto remote %s"
 msgstr ""
 
-#: builtin/remote.c:1071
+#: builtin/remote.c:1096
 #, c-format
 msgid "rebases onto remote %s"
 msgstr ""
 
-#: builtin/remote.c:1075
+#: builtin/remote.c:1100
 #, c-format
 msgid " merges with remote %s"
 msgstr ""
 
-#: builtin/remote.c:1078
+#: builtin/remote.c:1103
 #, c-format
 msgid "merges with remote %s"
 msgstr ""
 
-#: builtin/remote.c:1081
+#: builtin/remote.c:1106
 #, c-format
 msgid "%-*s    and with remote %s\n"
 msgstr ""
 
-#: builtin/remote.c:1124
+#: builtin/remote.c:1149
 msgid "create"
 msgstr ""
 
-#: builtin/remote.c:1127
+#: builtin/remote.c:1152
 msgid "delete"
 msgstr ""
 
-#: builtin/remote.c:1131
+#: builtin/remote.c:1156
 msgid "up to date"
 msgstr ""
 
-#: builtin/remote.c:1134
+#: builtin/remote.c:1159
 msgid "fast-forwardable"
 msgstr ""
 
-#: builtin/remote.c:1137
+#: builtin/remote.c:1162
 msgid "local out of date"
 msgstr ""
 
-#: builtin/remote.c:1144
+#: builtin/remote.c:1169
 #, c-format
 msgid "    %-*s forces to %-*s (%s)"
 msgstr ""
 
-#: builtin/remote.c:1147
+#: builtin/remote.c:1172
 #, c-format
 msgid "    %-*s pushes to %-*s (%s)"
 msgstr ""
 
-#: builtin/remote.c:1151
+#: builtin/remote.c:1176
 #, c-format
 msgid "    %-*s forces to %s"
 msgstr ""
 
-#: builtin/remote.c:1154
+#: builtin/remote.c:1179
 #, c-format
 msgid "    %-*s pushes to %s"
 msgstr ""
 
-#: builtin/remote.c:1222
+#: builtin/remote.c:1247
 msgid "do not query remotes"
 msgstr ""
 
-#: builtin/remote.c:1243
+#: builtin/remote.c:1268
 #, c-format
 msgid "* remote %s"
 msgstr ""
 
-#: builtin/remote.c:1244
+#: builtin/remote.c:1269
 #, c-format
 msgid "  Fetch URL: %s"
 msgstr ""
 
-#: builtin/remote.c:1245 builtin/remote.c:1261 builtin/remote.c:1398
+#: builtin/remote.c:1270 builtin/remote.c:1286 builtin/remote.c:1423
 msgid "(no URL)"
 msgstr ""
 
@@ -19537,331 +20010,331 @@ msgstr ""
 #. with the one in " Fetch URL: %s"
 #. translation.
 #.
-#: builtin/remote.c:1259 builtin/remote.c:1261
+#: builtin/remote.c:1284 builtin/remote.c:1286
 #, c-format
 msgid "  Push  URL: %s"
 msgstr ""
 
-#: builtin/remote.c:1263 builtin/remote.c:1265 builtin/remote.c:1267
+#: builtin/remote.c:1288 builtin/remote.c:1290 builtin/remote.c:1292
 #, c-format
 msgid "  HEAD branch: %s"
 msgstr ""
 
-#: builtin/remote.c:1263
+#: builtin/remote.c:1288
 msgid "(not queried)"
 msgstr ""
 
-#: builtin/remote.c:1265
+#: builtin/remote.c:1290
 msgid "(unknown)"
 msgstr ""
 
-#: builtin/remote.c:1269
+#: builtin/remote.c:1294
 #, c-format
 msgid ""
 "  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
 msgstr ""
 
-#: builtin/remote.c:1281
+#: builtin/remote.c:1306
 #, c-format
 msgid "  Remote branch:%s"
 msgid_plural "  Remote branches:%s"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/remote.c:1284 builtin/remote.c:1310
+#: builtin/remote.c:1309 builtin/remote.c:1335
 msgid " (status not queried)"
 msgstr ""
 
-#: builtin/remote.c:1293
+#: builtin/remote.c:1318
 msgid "  Local branch configured for 'git pull':"
 msgid_plural "  Local branches configured for 'git pull':"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/remote.c:1301
+#: builtin/remote.c:1326
 msgid "  Local refs will be mirrored by 'git push'"
 msgstr ""
 
-#: builtin/remote.c:1307
+#: builtin/remote.c:1332
 #, c-format
 msgid "  Local ref configured for 'git push'%s:"
 msgid_plural "  Local refs configured for 'git push'%s:"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/remote.c:1328
+#: builtin/remote.c:1353
 msgid "set refs/remotes/<name>/HEAD according to remote"
 msgstr ""
 
-#: builtin/remote.c:1330
+#: builtin/remote.c:1355
 msgid "delete refs/remotes/<name>/HEAD"
 msgstr ""
 
-#: builtin/remote.c:1344
+#: builtin/remote.c:1369
 msgid "Cannot determine remote HEAD"
 msgstr ""
 
-#: builtin/remote.c:1346
+#: builtin/remote.c:1371
 msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
 msgstr ""
 
-#: builtin/remote.c:1356
+#: builtin/remote.c:1381
 #, c-format
 msgid "Could not delete %s"
 msgstr ""
 
-#: builtin/remote.c:1364
+#: builtin/remote.c:1389
 #, c-format
 msgid "Not a valid ref: %s"
 msgstr ""
 
-#: builtin/remote.c:1366
+#: builtin/remote.c:1391
 #, c-format
 msgid "Could not setup %s"
 msgstr ""
 
-#: builtin/remote.c:1384
+#: builtin/remote.c:1409
 #, c-format
 msgid " %s will become dangling!"
 msgstr ""
 
-#: builtin/remote.c:1385
+#: builtin/remote.c:1410
 #, c-format
 msgid " %s has become dangling!"
 msgstr ""
 
-#: builtin/remote.c:1394
+#: builtin/remote.c:1419
 #, c-format
 msgid "Pruning %s"
 msgstr ""
 
-#: builtin/remote.c:1395
+#: builtin/remote.c:1420
 #, c-format
 msgid "URL: %s"
 msgstr ""
 
-#: builtin/remote.c:1411
+#: builtin/remote.c:1436
 #, c-format
 msgid " * [would prune] %s"
 msgstr ""
 
-#: builtin/remote.c:1414
+#: builtin/remote.c:1439
 #, c-format
 msgid " * [pruned] %s"
 msgstr ""
 
-#: builtin/remote.c:1459
+#: builtin/remote.c:1484
 msgid "prune remotes after fetching"
 msgstr ""
 
-#: builtin/remote.c:1523 builtin/remote.c:1579 builtin/remote.c:1649
+#: builtin/remote.c:1548 builtin/remote.c:1604 builtin/remote.c:1674
 #, c-format
 msgid "No such remote '%s'"
 msgstr ""
 
-#: builtin/remote.c:1541
+#: builtin/remote.c:1566
 msgid "add branch"
 msgstr ""
 
-#: builtin/remote.c:1548
+#: builtin/remote.c:1573
 msgid "no remote specified"
 msgstr ""
 
-#: builtin/remote.c:1565
+#: builtin/remote.c:1590
 msgid "query push URLs rather than fetch URLs"
 msgstr ""
 
-#: builtin/remote.c:1567
+#: builtin/remote.c:1592
 msgid "return all URLs"
 msgstr ""
 
-#: builtin/remote.c:1597
+#: builtin/remote.c:1622
 #, c-format
 msgid "no URLs configured for remote '%s'"
 msgstr ""
 
-#: builtin/remote.c:1623
+#: builtin/remote.c:1648
 msgid "manipulate push URLs"
 msgstr ""
 
-#: builtin/remote.c:1625
+#: builtin/remote.c:1650
 msgid "add URL"
 msgstr ""
 
-#: builtin/remote.c:1627
+#: builtin/remote.c:1652
 msgid "delete URLs"
 msgstr ""
 
-#: builtin/remote.c:1634
+#: builtin/remote.c:1659
 msgid "--add --delete doesn't make sense"
 msgstr ""
 
-#: builtin/remote.c:1675
+#: builtin/remote.c:1700
 #, c-format
 msgid "Invalid old URL pattern: %s"
 msgstr ""
 
-#: builtin/remote.c:1683
+#: builtin/remote.c:1708
 #, c-format
 msgid "No such URL found: %s"
 msgstr ""
 
-#: builtin/remote.c:1685
+#: builtin/remote.c:1710
 msgid "Will not delete all non-push URLs"
 msgstr ""
 
-#: builtin/remote.c:1702
+#: builtin/remote.c:1727
 msgid "be verbose; must be placed before a subcommand"
 msgstr ""
 
-#: builtin/repack.c:28
+#: builtin/repack.c:29
 msgid "git repack [<options>]"
 msgstr ""
 
-#: builtin/repack.c:33
+#: builtin/repack.c:34
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
 msgstr ""
 
-#: builtin/repack.c:201
+#: builtin/repack.c:206
 msgid "could not start pack-objects to repack promisor objects"
 msgstr ""
 
-#: builtin/repack.c:275 builtin/repack.c:820
+#: builtin/repack.c:280 builtin/repack.c:824
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 
-#: builtin/repack.c:299
+#: builtin/repack.c:304
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr ""
 
-#: builtin/repack.c:314
+#: builtin/repack.c:319
 #, c-format
 msgid "cannot open index for %s"
 msgstr ""
 
-#: builtin/repack.c:373
+#: builtin/repack.c:378
 #, c-format
 msgid "pack %s too large to consider in geometric progression"
 msgstr ""
 
-#: builtin/repack.c:406 builtin/repack.c:413 builtin/repack.c:418
+#: builtin/repack.c:411 builtin/repack.c:418 builtin/repack.c:423
 #, c-format
 msgid "pack %s too large to roll up"
 msgstr ""
 
-#: builtin/repack.c:498
+#: builtin/repack.c:503
 #, c-format
 msgid "could not open tempfile %s for writing"
 msgstr ""
 
-#: builtin/repack.c:516
+#: builtin/repack.c:521
 msgid "could not close refs snapshot tempfile"
 msgstr ""
 
-#: builtin/repack.c:630
+#: builtin/repack.c:634
 msgid "pack everything in a single pack"
 msgstr ""
 
-#: builtin/repack.c:632
+#: builtin/repack.c:636
 msgid "same as -a, and turn unreachable objects loose"
 msgstr ""
 
-#: builtin/repack.c:635
+#: builtin/repack.c:639
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr ""
 
-#: builtin/repack.c:637
+#: builtin/repack.c:641
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr ""
 
-#: builtin/repack.c:639
+#: builtin/repack.c:643
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr ""
 
-#: builtin/repack.c:641
+#: builtin/repack.c:645
 msgid "do not run git-update-server-info"
 msgstr ""
 
-#: builtin/repack.c:644
+#: builtin/repack.c:648
 msgid "pass --local to git-pack-objects"
 msgstr ""
 
-#: builtin/repack.c:646
+#: builtin/repack.c:650
 msgid "write bitmap index"
 msgstr ""
 
-#: builtin/repack.c:648
+#: builtin/repack.c:652
 msgid "pass --delta-islands to git-pack-objects"
 msgstr ""
 
-#: builtin/repack.c:649
+#: builtin/repack.c:653
 msgid "approxidate"
 msgstr ""
 
-#: builtin/repack.c:650
+#: builtin/repack.c:654
 msgid "with -A, do not loosen objects older than this"
 msgstr ""
 
-#: builtin/repack.c:652
+#: builtin/repack.c:656
 msgid "with -a, repack unreachable objects"
 msgstr ""
 
-#: builtin/repack.c:654
+#: builtin/repack.c:658
 msgid "size of the window used for delta compression"
 msgstr ""
 
-#: builtin/repack.c:655 builtin/repack.c:661
+#: builtin/repack.c:659 builtin/repack.c:665
 msgid "bytes"
 msgstr ""
 
-#: builtin/repack.c:656
+#: builtin/repack.c:660
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr ""
 
-#: builtin/repack.c:658
+#: builtin/repack.c:662
 msgid "limits the maximum delta depth"
 msgstr ""
 
-#: builtin/repack.c:660
+#: builtin/repack.c:664
 msgid "limits the maximum number of threads"
 msgstr ""
 
-#: builtin/repack.c:662
+#: builtin/repack.c:666
 msgid "maximum size of each packfile"
 msgstr ""
 
-#: builtin/repack.c:664
+#: builtin/repack.c:668
 msgid "repack objects in packs marked with .keep"
 msgstr ""
 
-#: builtin/repack.c:666
+#: builtin/repack.c:670
 msgid "do not repack this pack"
 msgstr ""
 
-#: builtin/repack.c:668
+#: builtin/repack.c:672
 msgid "find a geometric progression with factor <N>"
 msgstr ""
 
-#: builtin/repack.c:670
+#: builtin/repack.c:674
 msgid "write a multi-pack index of the resulting packs"
 msgstr ""
 
-#: builtin/repack.c:680
+#: builtin/repack.c:684
 msgid "cannot delete packs in a precious-objects repo"
 msgstr ""
 
-#: builtin/repack.c:829
+#: builtin/repack.c:833
 msgid "Nothing new to pack."
 msgstr ""
 
-#: builtin/repack.c:859
+#: builtin/repack.c:863
 #, c-format
 msgid "missing required file: %s"
 msgstr ""
 
-#: builtin/repack.c:861
+#: builtin/repack.c:865
 #, c-format
 msgid "could not unlink: %s"
 msgstr ""
@@ -19878,10 +20351,6 @@ msgstr ""
 msgid "git replace [-f] --graft <commit> [<parent>...]"
 msgstr ""
 
-#: builtin/replace.c:25
-msgid "git replace [-f] --convert-graft-file"
-msgstr ""
-
 #: builtin/replace.c:26
 msgid "git replace -d <object>..."
 msgstr ""
@@ -20172,91 +20641,89 @@ msgstr ""
 msgid "HEAD is now at %s"
 msgstr ""
 
-#: builtin/reset.c:299
+#: builtin/reset.c:304
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr ""
 
-#: builtin/reset.c:396 builtin/stash.c:606 builtin/stash.c:680
-#: builtin/stash.c:704
+#: builtin/reset.c:402 builtin/stash.c:606 builtin/stash.c:669
+#: builtin/stash.c:693
 msgid "be quiet, only report errors"
 msgstr ""
 
-#: builtin/reset.c:398
+#: builtin/reset.c:404
+msgid "skip refreshing the index after reset"
+msgstr ""
+
+#: builtin/reset.c:406
 msgid "reset HEAD and index"
 msgstr ""
 
-#: builtin/reset.c:399
+#: builtin/reset.c:407
 msgid "reset only HEAD"
 msgstr ""
 
-#: builtin/reset.c:401 builtin/reset.c:403
+#: builtin/reset.c:409 builtin/reset.c:411
 msgid "reset HEAD, index and working tree"
 msgstr ""
 
-#: builtin/reset.c:405
+#: builtin/reset.c:413
 msgid "reset HEAD but keep local changes"
 msgstr ""
 
-#: builtin/reset.c:411
+#: builtin/reset.c:419
 msgid "record only the fact that removed paths will be added later"
 msgstr ""
 
-#: builtin/reset.c:445
+#: builtin/reset.c:452
 #, c-format
 msgid "Failed to resolve '%s' as a valid revision."
 msgstr ""
 
-#: builtin/reset.c:453
+#: builtin/reset.c:460
 #, c-format
 msgid "Failed to resolve '%s' as a valid tree."
 msgstr ""
 
-#: builtin/reset.c:472
+#: builtin/reset.c:479
 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
 msgstr ""
 
-#: builtin/reset.c:474
+#: builtin/reset.c:481
 #, c-format
 msgid "Cannot do %s reset with paths."
 msgstr ""
 
-#: builtin/reset.c:489
+#: builtin/reset.c:496
 #, c-format
 msgid "%s reset is not allowed in a bare repository"
 msgstr ""
 
-#: builtin/reset.c:520
+#: builtin/reset.c:527
 msgid "Unstaged changes after reset:"
 msgstr ""
 
-#: builtin/reset.c:523
+#: builtin/reset.c:530
 #, c-format
 msgid ""
-"\n"
-"It took %.2f seconds to enumerate unstaged changes after reset.  You can\n"
-"use '--quiet' to avoid this.  Set the config setting reset.quiet to true\n"
-"to make this the default.\n"
+"It took %.2f seconds to refresh the index after reset.  You can use\n"
+"'--no-refresh' to avoid this."
 msgstr ""
 
-#: builtin/reset.c:541
+#: builtin/reset.c:547
 #, c-format
 msgid "Could not reset index file to revision '%s'."
 msgstr ""
 
-#: builtin/reset.c:546
+#: builtin/reset.c:552
 msgid "Could not write new index file."
 msgstr ""
 
-#: builtin/rev-list.c:602
-msgid "object filtering requires --objects"
-msgstr ""
-
-#: builtin/rev-list.c:674
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr ""
 
-#: builtin/rev-list.c:679
+#: builtin/rev-list.c:664
 #, c-format
 msgid "marked counting and '%s' cannot be used together"
 msgstr ""
@@ -20585,11 +21052,11 @@ msgstr ""
 msgid "group by field"
 msgstr ""
 
-#: builtin/shortlog.c:394
+#: builtin/shortlog.c:395
 msgid "too many arguments given outside repository"
 msgstr ""
 
-#: builtin/show-branch.c:13
+#: builtin/show-branch.c:14
 msgid ""
 "git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
 "                [--current] [--color[=<when>] | --no-color] [--sparse]\n"
@@ -20597,119 +21064,119 @@ msgid ""
 "                [--no-name | --sha1-name] [--topics] [(<rev> | <glob>)...]"
 msgstr ""
 
-#: builtin/show-branch.c:17
+#: builtin/show-branch.c:18
 msgid "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"
 msgstr ""
 
-#: builtin/show-branch.c:395
+#: builtin/show-branch.c:396
 #, c-format
 msgid "ignoring %s; cannot handle more than %d ref"
 msgid_plural "ignoring %s; cannot handle more than %d refs"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/show-branch.c:547
+#: builtin/show-branch.c:548
 #, c-format
 msgid "no matching refs with %s"
 msgstr ""
 
-#: builtin/show-branch.c:644
+#: builtin/show-branch.c:645
 msgid "show remote-tracking and local branches"
 msgstr ""
 
-#: builtin/show-branch.c:646
+#: builtin/show-branch.c:647
 msgid "show remote-tracking branches"
 msgstr ""
 
-#: builtin/show-branch.c:648
+#: builtin/show-branch.c:649
 msgid "color '*!+-' corresponding to the branch"
 msgstr ""
 
-#: builtin/show-branch.c:650
+#: builtin/show-branch.c:651
 msgid "show <n> more commits after the common ancestor"
 msgstr ""
 
-#: builtin/show-branch.c:652
+#: builtin/show-branch.c:653
 msgid "synonym to more=-1"
 msgstr ""
 
-#: builtin/show-branch.c:653
+#: builtin/show-branch.c:654
 msgid "suppress naming strings"
 msgstr ""
 
-#: builtin/show-branch.c:655
+#: builtin/show-branch.c:656
 msgid "include the current branch"
 msgstr ""
 
-#: builtin/show-branch.c:657
+#: builtin/show-branch.c:658
 msgid "name commits with their object names"
 msgstr ""
 
-#: builtin/show-branch.c:659
+#: builtin/show-branch.c:660
 msgid "show possible merge bases"
 msgstr ""
 
-#: builtin/show-branch.c:661
+#: builtin/show-branch.c:662
 msgid "show refs unreachable from any other ref"
 msgstr ""
 
-#: builtin/show-branch.c:663
+#: builtin/show-branch.c:664
 msgid "show commits in topological order"
 msgstr ""
 
-#: builtin/show-branch.c:666
+#: builtin/show-branch.c:667
 msgid "show only commits not on the first branch"
 msgstr ""
 
-#: builtin/show-branch.c:668
+#: builtin/show-branch.c:669
 msgid "show merges reachable from only one tip"
 msgstr ""
 
-#: builtin/show-branch.c:670
+#: builtin/show-branch.c:671
 msgid "topologically sort, maintaining date order where possible"
 msgstr ""
 
-#: builtin/show-branch.c:673
+#: builtin/show-branch.c:674
 msgid "<n>[,<base>]"
 msgstr ""
 
-#: builtin/show-branch.c:674
+#: builtin/show-branch.c:675
 msgid "show <n> most recent ref-log entries starting at base"
 msgstr ""
 
-#: builtin/show-branch.c:734
+#: builtin/show-branch.c:735
 msgid "no branches given, and HEAD is not valid"
 msgstr ""
 
-#: builtin/show-branch.c:737
+#: builtin/show-branch.c:738
 msgid "--reflog option needs one branch name"
 msgstr ""
 
-#: builtin/show-branch.c:740
+#: builtin/show-branch.c:741
 #, c-format
 msgid "only %d entry can be shown at one time."
 msgid_plural "only %d entries can be shown at one time."
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/show-branch.c:744
+#: builtin/show-branch.c:745
 #, c-format
 msgid "no such ref %s"
 msgstr ""
 
-#: builtin/show-branch.c:830
+#: builtin/show-branch.c:831
 #, c-format
 msgid "cannot handle more than %d rev."
 msgid_plural "cannot handle more than %d revs."
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/show-branch.c:834
+#: builtin/show-branch.c:835
 #, c-format
 msgid "'%s' is not a valid ref."
 msgstr ""
 
-#: builtin/show-branch.c:837
+#: builtin/show-branch.c:838
 #, c-format
 msgid "cannot find commit %s (%s)"
 msgstr ""
@@ -20764,118 +21231,137 @@ msgstr ""
 msgid "show refs from stdin that aren't in local repository"
 msgstr ""
 
-#: builtin/sparse-checkout.c:22
+#: builtin/sparse-checkout.c:23
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr ""
 
-#: builtin/sparse-checkout.c:46
-msgid "git sparse-checkout list"
-msgstr ""
-
-#: builtin/sparse-checkout.c:60
+#: builtin/sparse-checkout.c:61
 msgid "this worktree is not sparse"
 msgstr ""
 
-#: builtin/sparse-checkout.c:75
+#: builtin/sparse-checkout.c:76
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr ""
 
-#: builtin/sparse-checkout.c:176
+#: builtin/sparse-checkout.c:177
 #, c-format
 msgid ""
 "directory '%s' contains untracked files, but is not in the sparse-checkout "
 "cone"
 msgstr ""
 
-#: builtin/sparse-checkout.c:184
+#: builtin/sparse-checkout.c:185
 #, c-format
 msgid "failed to remove directory '%s'"
 msgstr ""
 
-#: builtin/sparse-checkout.c:324
+#: builtin/sparse-checkout.c:327
 msgid "failed to create directory for sparse-checkout file"
 msgstr ""
 
-#: builtin/sparse-checkout.c:365
-msgid "unable to upgrade repository format to enable worktreeConfig"
-msgstr ""
-
-#: builtin/sparse-checkout.c:367
-msgid "failed to set extensions.worktreeConfig setting"
+#: builtin/sparse-checkout.c:366
+msgid "failed to initialize worktree config"
 msgstr ""
 
 #: builtin/sparse-checkout.c:411
 msgid "failed to modify sparse-index config"
 msgstr ""
 
-#: builtin/sparse-checkout.c:422
-msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
-msgstr ""
-
-#: builtin/sparse-checkout.c:441 builtin/sparse-checkout.c:729
-#: builtin/sparse-checkout.c:778
+#: builtin/sparse-checkout.c:441 builtin/sparse-checkout.c:793
+#: builtin/sparse-checkout.c:847
 msgid "initialize the sparse-checkout in cone mode"
 msgstr ""
 
-#: builtin/sparse-checkout.c:443 builtin/sparse-checkout.c:731
-#: builtin/sparse-checkout.c:780
+#: builtin/sparse-checkout.c:443 builtin/sparse-checkout.c:795
+#: builtin/sparse-checkout.c:849
 msgid "toggle the use of a sparse index"
 msgstr ""
 
-#: builtin/sparse-checkout.c:476
+#: builtin/sparse-checkout.c:479
 #, c-format
 msgid "failed to open '%s'"
 msgstr ""
 
-#: builtin/sparse-checkout.c:528
+#: builtin/sparse-checkout.c:531
 #, c-format
 msgid "could not normalize path %s"
 msgstr ""
 
-#: builtin/sparse-checkout.c:557
+#: builtin/sparse-checkout.c:560
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr ""
 
-#: builtin/sparse-checkout.c:612 builtin/sparse-checkout.c:640
+#: builtin/sparse-checkout.c:615 builtin/sparse-checkout.c:643
 msgid "unable to load existing sparse-checkout patterns"
 msgstr ""
 
-#: builtin/sparse-checkout.c:616
+#: builtin/sparse-checkout.c:619
 msgid "existing sparse-checkout patterns do not use cone mode"
 msgstr ""
 
-#: builtin/sparse-checkout.c:682
-msgid "git sparse-checkout add (--stdin | <patterns>)"
+#: builtin/sparse-checkout.c:707
+msgid "please run from the toplevel directory in non-cone mode"
 msgstr ""
 
-#: builtin/sparse-checkout.c:694 builtin/sparse-checkout.c:733
-msgid "read patterns from standard in"
+#: builtin/sparse-checkout.c:712
+msgid "specify directories rather than patterns (no leading slash)"
 msgstr ""
 
-#: builtin/sparse-checkout.c:699
-msgid "no sparse-checkout to add to"
+#: builtin/sparse-checkout.c:714
+msgid ""
+"specify directories rather than patterns.  If your directory starts with a "
+"'!', pass --skip-checks"
 msgstr ""
 
-#: builtin/sparse-checkout.c:712
+#: builtin/sparse-checkout.c:716
+msgid ""
+"specify directories rather than patterns.  If your directory really has any "
+"of '*?[]\\' in it, pass --skip-checks"
+msgstr ""
+
+#: builtin/sparse-checkout.c:732
+#, c-format
 msgid ""
-"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] (--stdin | "
-"<patterns>)"
+"'%s' is not a directory; to treat it as a directory anyway, rerun with --"
+"skip-checks"
 msgstr ""
 
-#: builtin/sparse-checkout.c:765
-msgid "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
+#: builtin/sparse-checkout.c:734
+#, c-format
+msgid ""
+"pass a leading slash before paths such as '%s' if you want a single file "
+"(see NON-CONE PROBLEMS in the git-sparse-checkout manual)."
 msgstr ""
 
-#: builtin/sparse-checkout.c:785
-msgid "must be in a sparse-checkout to reapply sparsity patterns"
+#: builtin/sparse-checkout.c:739
+msgid "git sparse-checkout add [--skip-checks] (--stdin | <patterns>)"
 msgstr ""
 
-#: builtin/sparse-checkout.c:803
-msgid "git sparse-checkout disable"
+#: builtin/sparse-checkout.c:752 builtin/sparse-checkout.c:797
+msgid ""
+"skip some sanity checks on the given paths that might give false positives"
+msgstr ""
+
+#: builtin/sparse-checkout.c:755 builtin/sparse-checkout.c:800
+msgid "read patterns from standard in"
+msgstr ""
+
+#: builtin/sparse-checkout.c:760
+msgid "no sparse-checkout to add to"
 msgstr ""
 
-#: builtin/sparse-checkout.c:845
+#: builtin/sparse-checkout.c:775
+msgid ""
+"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] "
+"(--stdin | <patterns>)"
+msgstr ""
+
+#: builtin/sparse-checkout.c:854
+msgid "must be in a sparse-checkout to reapply sparsity patterns"
+msgstr ""
+
+#: builtin/sparse-checkout.c:914
 msgid "error while refreshing working directory"
 msgstr ""
 
@@ -21001,165 +21487,151 @@ msgstr ""
 msgid "could not restore untracked files from stash"
 msgstr ""
 
-#: builtin/stash.c:608 builtin/stash.c:706
+#: builtin/stash.c:608 builtin/stash.c:695
 msgid "attempt to recreate the index"
 msgstr ""
 
-#: builtin/stash.c:652
+#: builtin/stash.c:641
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr ""
 
-#: builtin/stash.c:655
+#: builtin/stash.c:644
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr ""
 
-#: builtin/stash.c:668
+#: builtin/stash.c:657
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr ""
 
-#: builtin/stash.c:718
+#: builtin/stash.c:707
 msgid "The stash entry is kept in case you need it again."
 msgstr ""
 
-#: builtin/stash.c:741
+#: builtin/stash.c:730
 msgid "No branch name specified"
 msgstr ""
 
-#: builtin/stash.c:825
+#: builtin/stash.c:809
 msgid "failed to parse tree"
 msgstr ""
 
-#: builtin/stash.c:836
+#: builtin/stash.c:820
 msgid "failed to unpack trees"
 msgstr ""
 
-#: builtin/stash.c:856
+#: builtin/stash.c:840
 msgid "include untracked files in the stash"
 msgstr ""
 
-#: builtin/stash.c:859
+#: builtin/stash.c:843
 msgid "only show untracked files in the stash"
 msgstr ""
 
-#: builtin/stash.c:946 builtin/stash.c:983
+#: builtin/stash.c:930 builtin/stash.c:967
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr ""
 
-#: builtin/stash.c:964 builtin/stash.c:1678 builtin/stash.c:1750
+#: builtin/stash.c:948 builtin/stash.c:1667 builtin/stash.c:1739
 msgid "stash message"
 msgstr ""
 
-#: builtin/stash.c:974
+#: builtin/stash.c:958
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr ""
 
-#: builtin/stash.c:1159
+#: builtin/stash.c:1143
 msgid "No staged changes"
 msgstr ""
 
-#: builtin/stash.c:1220
+#: builtin/stash.c:1204
 msgid "No changes selected"
 msgstr ""
 
-#: builtin/stash.c:1320
+#: builtin/stash.c:1304
 msgid "You do not have the initial commit yet"
 msgstr ""
 
-#: builtin/stash.c:1347
+#: builtin/stash.c:1331
 msgid "Cannot save the current index state"
 msgstr ""
 
-#: builtin/stash.c:1356
+#: builtin/stash.c:1340
 msgid "Cannot save the untracked files"
 msgstr ""
 
-#: builtin/stash.c:1367 builtin/stash.c:1386
+#: builtin/stash.c:1351 builtin/stash.c:1370
 msgid "Cannot save the current worktree state"
 msgstr ""
 
-#: builtin/stash.c:1377
+#: builtin/stash.c:1361
 msgid "Cannot save the current staged state"
 msgstr ""
 
-#: builtin/stash.c:1414
+#: builtin/stash.c:1398
 msgid "Cannot record working tree state"
 msgstr ""
 
-#: builtin/stash.c:1463
+#: builtin/stash.c:1447
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr ""
 
-#: builtin/stash.c:1474
+#: builtin/stash.c:1458
 msgid "Can't use --staged and --include-untracked or --all at the same time"
 msgstr ""
 
-#: builtin/stash.c:1492
+#: builtin/stash.c:1476
 msgid "Did you forget to 'git add'?"
 msgstr ""
 
-#: builtin/stash.c:1507
+#: builtin/stash.c:1491
 msgid "No local changes to save"
 msgstr ""
 
-#: builtin/stash.c:1514
+#: builtin/stash.c:1498
 msgid "Cannot initialize stash"
 msgstr ""
 
-#: builtin/stash.c:1529
+#: builtin/stash.c:1513
 msgid "Cannot save the current status"
 msgstr ""
 
-#: builtin/stash.c:1534
+#: builtin/stash.c:1518
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr ""
 
-#: builtin/stash.c:1627
+#: builtin/stash.c:1615
 msgid "Cannot remove worktree changes"
 msgstr ""
 
-#: builtin/stash.c:1667 builtin/stash.c:1739
+#: builtin/stash.c:1656 builtin/stash.c:1728
 msgid "keep index"
 msgstr ""
 
-#: builtin/stash.c:1669 builtin/stash.c:1741
+#: builtin/stash.c:1658 builtin/stash.c:1730
 msgid "stash staged changes only"
 msgstr ""
 
-#: builtin/stash.c:1671 builtin/stash.c:1743
+#: builtin/stash.c:1660 builtin/stash.c:1732
 msgid "stash in patch mode"
 msgstr ""
 
-#: builtin/stash.c:1672 builtin/stash.c:1744
+#: builtin/stash.c:1661 builtin/stash.c:1733
 msgid "quiet mode"
 msgstr ""
 
-#: builtin/stash.c:1674 builtin/stash.c:1746
+#: builtin/stash.c:1663 builtin/stash.c:1735
 msgid "include untracked files in stash"
 msgstr ""
 
-#: builtin/stash.c:1676 builtin/stash.c:1748
+#: builtin/stash.c:1665 builtin/stash.c:1737
 msgid "include ignore files"
 msgstr ""
 
-#: builtin/stash.c:1783
-msgid ""
-"the stash.useBuiltin support has been removed!\n"
-"See its entry in 'git help config' for details."
-msgstr ""
-
-#: builtin/stripspace.c:18
-msgid "git stripspace [-s | --strip-comments]"
-msgstr ""
-
-#: builtin/stripspace.c:19
-msgid "git stripspace [-c | --comment-lines]"
-msgstr ""
-
 #: builtin/stripspace.c:37
 msgid "skip and remove all lines starting with comment character"
 msgstr ""
@@ -21168,54 +21640,50 @@ msgstr ""
 msgid "prepend comment character and space to each line"
 msgstr ""
 
-#: builtin/submodule--helper.c:46 builtin/submodule--helper.c:2668
+#: builtin/submodule--helper.c:50 builtin/submodule--helper.c:2486
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr ""
 
-#: builtin/submodule--helper.c:63
-msgid "submodule--helper print-default-remote takes no arguments"
-msgstr ""
-
-#: builtin/submodule--helper.c:101
+#: builtin/submodule--helper.c:103
 #, c-format
 msgid "cannot strip one component off url '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:211
+#: builtin/submodule--helper.c:213
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
 "authoritative upstream."
 msgstr ""
 
-#: builtin/submodule--helper.c:405 builtin/submodule--helper.c:1859
+#: builtin/submodule--helper.c:413 builtin/submodule--helper.c:1873
 msgid "alternative anchor for relative paths"
 msgstr ""
 
-#: builtin/submodule--helper.c:410
+#: builtin/submodule--helper.c:418
 msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
 msgstr ""
 
-#: builtin/submodule--helper.c:468 builtin/submodule--helper.c:605
-#: builtin/submodule--helper.c:628
+#: builtin/submodule--helper.c:476 builtin/submodule--helper.c:617
+#: builtin/submodule--helper.c:640
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr ""
 
-#: builtin/submodule--helper.c:520
+#: builtin/submodule--helper.c:528
 #, c-format
 msgid "Entering '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:523
+#: builtin/submodule--helper.c:531
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
 "."
 msgstr ""
 
-#: builtin/submodule--helper.c:545
+#: builtin/submodule--helper.c:553
 #, c-format
 msgid ""
 "run_command returned non-zero status while recursing in the nested "
@@ -21223,209 +21691,209 @@ msgid ""
 "."
 msgstr ""
 
-#: builtin/submodule--helper.c:561
+#: builtin/submodule--helper.c:569
 msgid "suppress output of entering each submodule command"
 msgstr ""
 
-#: builtin/submodule--helper.c:563 builtin/submodule--helper.c:864
-#: builtin/submodule--helper.c:1453
+#: builtin/submodule--helper.c:571 builtin/submodule--helper.c:876
+#: builtin/submodule--helper.c:1458
 msgid "recurse into nested submodules"
 msgstr ""
 
-#: builtin/submodule--helper.c:568
+#: builtin/submodule--helper.c:576
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr ""
 
-#: builtin/submodule--helper.c:642
+#: builtin/submodule--helper.c:654
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:646
+#: builtin/submodule--helper.c:658
 #, c-format
 msgid "Submodule '%s' (%s) registered for path '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:656
+#: builtin/submodule--helper.c:668
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:663
+#: builtin/submodule--helper.c:675
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:685
+#: builtin/submodule--helper.c:697
 msgid "suppress output for initializing a submodule"
 msgstr ""
 
-#: builtin/submodule--helper.c:690
+#: builtin/submodule--helper.c:702
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr ""
 
-#: builtin/submodule--helper.c:763 builtin/submodule--helper.c:898
+#: builtin/submodule--helper.c:775 builtin/submodule--helper.c:910
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:811
+#: builtin/submodule--helper.c:823
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:838 builtin/submodule--helper.c:1423
+#: builtin/submodule--helper.c:850 builtin/submodule--helper.c:1428
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1590
+#: builtin/submodule--helper.c:874 builtin/submodule--helper.c:1595
 msgid "suppress submodule status output"
 msgstr ""
 
-#: builtin/submodule--helper.c:863
+#: builtin/submodule--helper.c:875
 msgid ""
 "use commit stored in the index instead of the one stored in the submodule "
 "HEAD"
 msgstr ""
 
-#: builtin/submodule--helper.c:869
+#: builtin/submodule--helper.c:881
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr ""
 
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:905
 msgid "git submodule--helper name <path>"
 msgstr ""
 
-#: builtin/submodule--helper.c:965
+#: builtin/submodule--helper.c:977
 #, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr ""
 
-#: builtin/submodule--helper.c:968
+#: builtin/submodule--helper.c:980
 #, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr ""
 
-#: builtin/submodule--helper.c:981
+#: builtin/submodule--helper.c:993
 #, c-format
 msgid "%s"
 msgstr ""
 
-#: builtin/submodule--helper.c:1031
+#: builtin/submodule--helper.c:1043
 #, c-format
 msgid "couldn't hash object from '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1035
+#: builtin/submodule--helper.c:1047
 #, c-format
 msgid "unexpected mode %o\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:1276
+#: builtin/submodule--helper.c:1288
 msgid "use the commit stored in the index instead of the submodule HEAD"
 msgstr ""
 
-#: builtin/submodule--helper.c:1278
+#: builtin/submodule--helper.c:1290
 msgid "compare the commit in the index with that in the submodule HEAD"
 msgstr ""
 
-#: builtin/submodule--helper.c:1280
+#: builtin/submodule--helper.c:1292
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1282
+#: builtin/submodule--helper.c:1294
 msgid "limit the summary size"
 msgstr ""
 
-#: builtin/submodule--helper.c:1287
+#: builtin/submodule--helper.c:1299
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr ""
 
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1323
 msgid "could not fetch a revision for HEAD"
 msgstr ""
 
-#: builtin/submodule--helper.c:1373
+#: builtin/submodule--helper.c:1384
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:1379
+#: builtin/submodule--helper.c:1390
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1393
+#: builtin/submodule--helper.c:1399
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1404
+#: builtin/submodule--helper.c:1409
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1451
+#: builtin/submodule--helper.c:1456
 msgid "suppress output of synchronizing submodule url"
 msgstr ""
 
-#: builtin/submodule--helper.c:1458
+#: builtin/submodule--helper.c:1463
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr ""
 
-#: builtin/submodule--helper.c:1508
+#: builtin/submodule--helper.c:1513
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory. This will be replaced "
 "with a .git file by using absorbgitdirs."
 msgstr ""
 
-#: builtin/submodule--helper.c:1525
+#: builtin/submodule--helper.c:1530
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
 "them"
 msgstr ""
 
-#: builtin/submodule--helper.c:1533
+#: builtin/submodule--helper.c:1538
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:1535
+#: builtin/submodule--helper.c:1540
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1551
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr ""
 
-#: builtin/submodule--helper.c:1562
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:1591
+#: builtin/submodule--helper.c:1596
 msgid "remove submodule working trees even if they contain local changes"
 msgstr ""
 
-#: builtin/submodule--helper.c:1592
+#: builtin/submodule--helper.c:1597
 msgid "unregister all submodules"
 msgstr ""
 
-#: builtin/submodule--helper.c:1597
+#: builtin/submodule--helper.c:1602
 msgid ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
 msgstr ""
 
-#: builtin/submodule--helper.c:1611
+#: builtin/submodule--helper.c:1616
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr ""
 
-#: builtin/submodule--helper.c:1656
+#: builtin/submodule--helper.c:1665
 msgid ""
 "An alternate computed from a superproject's alternate is invalid.\n"
 "To allow Git to clone without an alternate in such a case, set\n"
@@ -21433,98 +21901,98 @@ msgid ""
 "'--reference-if-able' instead of '--reference'."
 msgstr ""
 
-#: builtin/submodule--helper.c:1701 builtin/submodule--helper.c:1704
+#: builtin/submodule--helper.c:1710 builtin/submodule--helper.c:1713
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr ""
 
-#: builtin/submodule--helper.c:1740
+#: builtin/submodule--helper.c:1749
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr ""
 
-#: builtin/submodule--helper.c:1747
+#: builtin/submodule--helper.c:1756
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr ""
 
-#: builtin/submodule--helper.c:1772
+#: builtin/submodule--helper.c:1781
 #, c-format
 msgid "refusing to create/use '%s' in another submodule's git dir"
 msgstr ""
 
-#: builtin/submodule--helper.c:1813
+#: builtin/submodule--helper.c:1826
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
 msgstr ""
 
-#: builtin/submodule--helper.c:1818
+#: builtin/submodule--helper.c:1831
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1830
+#: builtin/submodule--helper.c:1843
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1862
+#: builtin/submodule--helper.c:1876
 msgid "where the new submodule will be cloned to"
 msgstr ""
 
-#: builtin/submodule--helper.c:1865
+#: builtin/submodule--helper.c:1879
 msgid "name of the new submodule"
 msgstr ""
 
-#: builtin/submodule--helper.c:1868
+#: builtin/submodule--helper.c:1882
 msgid "url where to clone the submodule from"
 msgstr ""
 
-#: builtin/submodule--helper.c:1876 builtin/submodule--helper.c:3265
+#: builtin/submodule--helper.c:1890 builtin/submodule--helper.c:3383
 msgid "depth for shallow clones"
 msgstr ""
 
-#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:2526
-#: builtin/submodule--helper.c:3258
+#: builtin/submodule--helper.c:1893 builtin/submodule--helper.c:2731
+#: builtin/submodule--helper.c:3376
 msgid "force cloning progress"
 msgstr ""
 
-#: builtin/submodule--helper.c:1881 builtin/submodule--helper.c:2528
+#: builtin/submodule--helper.c:1895 builtin/submodule--helper.c:2733
 msgid "disallow cloning into non-empty directory"
 msgstr ""
 
-#: builtin/submodule--helper.c:1888
+#: builtin/submodule--helper.c:1903
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
-"<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
-"<url> --path <path>"
+"<repository>] [--name <name>] [--depth <depth>] [--single-branch] [--filter "
+"<filter-spec>] --url <url> --path <path>"
 msgstr ""
 
-#: builtin/submodule--helper.c:1925
+#: builtin/submodule--helper.c:1943
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1929
+#: builtin/submodule--helper.c:1947
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:2044
+#: builtin/submodule--helper.c:2041
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr ""
 
-#: builtin/submodule--helper.c:2048
+#: builtin/submodule--helper.c:2045
 msgid "Maybe you want to use 'update --init'?"
 msgstr ""
 
-#: builtin/submodule--helper.c:2078
+#: builtin/submodule--helper.c:2075
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr ""
 
-#: builtin/submodule--helper.c:2107
+#: builtin/submodule--helper.c:2104
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr ""
@@ -21539,225 +22007,247 @@ msgstr ""
 msgid "Failed to clone '%s' a second time, aborting"
 msgstr ""
 
-#: builtin/submodule--helper.c:2373
+#: builtin/submodule--helper.c:2371
 #, c-format
 msgid "Unable to checkout '%s' in submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:2377
+#: builtin/submodule--helper.c:2375
 #, c-format
 msgid "Unable to rebase '%s' in submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:2381
+#: builtin/submodule--helper.c:2379
 #, c-format
 msgid "Unable to merge '%s' in submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:2385
+#: builtin/submodule--helper.c:2383
 #, c-format
 msgid "Execution of '%s %s' failed in submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:2409
+#: builtin/submodule--helper.c:2402
 #, c-format
 msgid "Submodule path '%s': checked out '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:2413
+#: builtin/submodule--helper.c:2406
 #, c-format
 msgid "Submodule path '%s': rebased into '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:2417
+#: builtin/submodule--helper.c:2410
 #, c-format
 msgid "Submodule path '%s': merged in '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:2421
+#: builtin/submodule--helper.c:2414
 #, c-format
 msgid "Submodule path '%s': '%s %s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:2445
+#: builtin/submodule--helper.c:2438
 #, c-format
 msgid "Unable to fetch in submodule path '%s'; trying to directly fetch %s:"
 msgstr ""
 
-#: builtin/submodule--helper.c:2454
+#: builtin/submodule--helper.c:2447
 #, c-format
 msgid ""
 "Fetched in submodule path '%s', but it did not contain %s. Direct fetching "
 "of that commit failed."
 msgstr ""
 
-#: builtin/submodule--helper.c:2505 builtin/submodule--helper.c:2575
-#: builtin/submodule--helper.c:2813
-msgid "path into the working tree"
-msgstr ""
-
-#: builtin/submodule--helper.c:2508 builtin/submodule--helper.c:2580
-msgid "path into the working tree, across nested submodule boundaries"
+#: builtin/submodule--helper.c:2481
+#, c-format
+msgid ""
+"Submodule (%s) branch configured to inherit branch from superproject, but "
+"the superproject is not on any branch"
 msgstr ""
 
-#: builtin/submodule--helper.c:2512 builtin/submodule--helper.c:2578
-msgid "rebase, merge, checkout or none"
+#: builtin/submodule--helper.c:2499
+#, c-format
+msgid "could not get a repository handle for submodule '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:2518
-msgid "create a shallow clone truncated to the specified number of revisions"
+#: builtin/submodule--helper.c:2588
+#, c-format
+msgid "Unable to find current revision in submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:2521
-msgid "parallel jobs"
+#: builtin/submodule--helper.c:2599
+#, c-format
+msgid "Unable to fetch in submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:2523
-msgid "whether the initial clone should follow the shallow recommendation"
+#: builtin/submodule--helper.c:2604
+#, c-format
+msgid "Unable to find %s revision in submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:2524
-msgid "don't print cloning progress"
+#: builtin/submodule--helper.c:2640
+#, c-format
+msgid "Failed to recurse into submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:2535
-msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
+#: builtin/submodule--helper.c:2699
+msgid "force checkout updates"
 msgstr ""
 
-#: builtin/submodule--helper.c:2548
-msgid "bad value for update parameter"
+#: builtin/submodule--helper.c:2701
+msgid "initialize uninitialized submodules before update"
 msgstr ""
 
-#: builtin/submodule--helper.c:2566
-msgid "suppress output for update by rebase or merge"
+#: builtin/submodule--helper.c:2703
+msgid "use SHA-1 of submodule's remote tracking branch"
 msgstr ""
 
-#: builtin/submodule--helper.c:2567
-msgid "force checkout updates"
+#: builtin/submodule--helper.c:2705
+msgid "traverse submodules recursively"
 msgstr ""
 
-#: builtin/submodule--helper.c:2569
+#: builtin/submodule--helper.c:2707
 msgid "don't fetch new objects from the remote site"
 msgstr ""
 
-#: builtin/submodule--helper.c:2571
-msgid "overrides update mode in case the repository is a fresh clone"
+#: builtin/submodule--helper.c:2710 builtin/submodule--helper.c:2892
+msgid "path into the working tree"
 msgstr ""
 
-#: builtin/submodule--helper.c:2572
-msgid "depth for shallow fetch"
+#: builtin/submodule--helper.c:2713
+msgid "path into the working tree, across nested submodule boundaries"
 msgstr ""
 
-#: builtin/submodule--helper.c:2582
-msgid "sha1"
+#: builtin/submodule--helper.c:2717
+msgid "rebase, merge, checkout or none"
 msgstr ""
 
-#: builtin/submodule--helper.c:2583
-msgid "SHA1 expected by superproject"
+#: builtin/submodule--helper.c:2723
+msgid "create a shallow clone truncated to the specified number of revisions"
 msgstr ""
 
-#: builtin/submodule--helper.c:2585
-msgid "subsha1"
+#: builtin/submodule--helper.c:2726
+msgid "parallel jobs"
 msgstr ""
 
-#: builtin/submodule--helper.c:2586
-msgid "SHA1 of submodule's HEAD"
+#: builtin/submodule--helper.c:2728
+msgid "whether the initial clone should follow the shallow recommendation"
 msgstr ""
 
-#: builtin/submodule--helper.c:2592
-msgid "git submodule--helper run-update-procedure [<options>] <path>"
+#: builtin/submodule--helper.c:2729
+msgid "don't print cloning progress"
 msgstr ""
 
-#: builtin/submodule--helper.c:2663
-#, c-format
+#: builtin/submodule--helper.c:2741
 msgid ""
-"Submodule (%s) branch configured to inherit branch from superproject, but "
-"the superproject is not on any branch"
+"git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] "
+"[-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-"
+"shallow] [--reference <repository>] [--recursive] [--[no-]single-branch] "
+"[--] [<path>...]"
 msgstr ""
 
-#: builtin/submodule--helper.c:2781
-#, c-format
-msgid "could not get a repository handle for submodule '%s'"
+#: builtin/submodule--helper.c:2767
+msgid "bad value for update parameter"
 msgstr ""
 
-#: builtin/submodule--helper.c:2814
+#: builtin/submodule--helper.c:2893
 msgid "recurse into submodules"
 msgstr ""
 
-#: builtin/submodule--helper.c:2820
+#: builtin/submodule--helper.c:2899
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr ""
 
-#: builtin/submodule--helper.c:2876
+#: builtin/submodule--helper.c:2955
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr ""
 
-#: builtin/submodule--helper.c:2879
+#: builtin/submodule--helper.c:2958
 msgid "unset the config in the .gitmodules file"
 msgstr ""
 
-#: builtin/submodule--helper.c:2884
+#: builtin/submodule--helper.c:2963
 msgid "git submodule--helper config <name> [<value>]"
 msgstr ""
 
-#: builtin/submodule--helper.c:2885
+#: builtin/submodule--helper.c:2964
 msgid "git submodule--helper config --unset <name>"
 msgstr ""
 
-#: builtin/submodule--helper.c:2886
-msgid "git submodule--helper config --check-writeable"
-msgstr ""
-
-#: builtin/submodule--helper.c:2905 builtin/submodule--helper.c:3121
-#: builtin/submodule--helper.c:3277
+#: builtin/submodule--helper.c:2984 builtin/submodule--helper.c:3238
+#: builtin/submodule--helper.c:3395
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr ""
 
-#: builtin/submodule--helper.c:2921
+#: builtin/submodule--helper.c:3000
 msgid "suppress output for setting url of a submodule"
 msgstr ""
 
-#: builtin/submodule--helper.c:2925
+#: builtin/submodule--helper.c:3004
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr ""
 
-#: builtin/submodule--helper.c:2958
+#: builtin/submodule--helper.c:3037
 msgid "set the default tracking branch to master"
 msgstr ""
 
-#: builtin/submodule--helper.c:2960
+#: builtin/submodule--helper.c:3039
 msgid "set the default tracking branch"
 msgstr ""
 
-#: builtin/submodule--helper.c:2964
+#: builtin/submodule--helper.c:3043
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr ""
 
-#: builtin/submodule--helper.c:2965
+#: builtin/submodule--helper.c:3044
 msgid ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 msgstr ""
 
-#: builtin/submodule--helper.c:2972
+#: builtin/submodule--helper.c:3051
 msgid "--branch or --default required"
 msgstr ""
 
-#: builtin/submodule--helper.c:3038
+#: builtin/submodule--helper.c:3072 builtin/submodule--helper.c:3375
+msgid "print only error messages"
+msgstr ""
+
+#: builtin/submodule--helper.c:3073
+msgid "force creation"
+msgstr ""
+
+#: builtin/submodule--helper.c:3081
+msgid "show whether the branch would be created"
+msgstr ""
+
+#: builtin/submodule--helper.c:3085
+msgid ""
+"git submodule--helper create-branch [-f|--force] [--create-reflog] [-q|--"
+"quiet] [-t|--track] [-n|--dry-run] <name> <start-oid> <start-name>"
+msgstr ""
+
+#: builtin/submodule--helper.c:3097
+#, c-format
+msgid "creating branch '%s'"
+msgstr ""
+
+#: builtin/submodule--helper.c:3155
 #, c-format
 msgid "Adding existing repo at '%s' to the index\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:3041
+#: builtin/submodule--helper.c:3158
 #, c-format
 msgid "'%s' already exists and is not a valid git repo"
 msgstr ""
 
-#: builtin/submodule--helper.c:3054
+#: builtin/submodule--helper.c:3171
 #, c-format
 msgid "A git directory for '%s' is found locally with remote(s):\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:3061
+#: builtin/submodule--helper.c:3178
 #, c-format
 msgid ""
 "If you want to reuse this local git directory instead of cloning again from\n"
@@ -21768,83 +22258,79 @@ msgid ""
 "option."
 msgstr ""
 
-#: builtin/submodule--helper.c:3073
+#: builtin/submodule--helper.c:3190
 #, c-format
 msgid "Reactivating local git directory for submodule '%s'\n"
 msgstr ""
 
-#: builtin/submodule--helper.c:3110
+#: builtin/submodule--helper.c:3227
 #, c-format
 msgid "unable to checkout submodule '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:3149
+#: builtin/submodule--helper.c:3266
 #, c-format
 msgid "Failed to add submodule '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:3153 builtin/submodule--helper.c:3158
-#: builtin/submodule--helper.c:3166
+#: builtin/submodule--helper.c:3270 builtin/submodule--helper.c:3275
+#: builtin/submodule--helper.c:3283
 #, c-format
 msgid "Failed to register submodule '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:3222
+#: builtin/submodule--helper.c:3339
 #, c-format
 msgid "'%s' already exists in the index"
 msgstr ""
 
-#: builtin/submodule--helper.c:3225
+#: builtin/submodule--helper.c:3342
 #, c-format
 msgid "'%s' already exists in the index and is not a submodule"
 msgstr ""
 
-#: builtin/submodule--helper.c:3254
+#: builtin/submodule--helper.c:3372
 msgid "branch of repository to add as submodule"
 msgstr ""
 
-#: builtin/submodule--helper.c:3255
+#: builtin/submodule--helper.c:3373
 msgid "allow adding an otherwise ignored submodule path"
 msgstr ""
 
-#: builtin/submodule--helper.c:3257
-msgid "print only error messages"
-msgstr ""
-
-#: builtin/submodule--helper.c:3261
+#: builtin/submodule--helper.c:3379
 msgid "borrow the objects from reference repositories"
 msgstr ""
 
-#: builtin/submodule--helper.c:3263
+#: builtin/submodule--helper.c:3381
 msgid ""
 "sets the submodule’s name to the given string instead of defaulting to its "
 "path"
 msgstr ""
 
-#: builtin/submodule--helper.c:3270
+#: builtin/submodule--helper.c:3388
 msgid "git submodule--helper add [<options>] [--] <repository> [<path>]"
 msgstr ""
 
-#: builtin/submodule--helper.c:3298
+#: builtin/submodule--helper.c:3416
 msgid "Relative path can only be used from the toplevel of the working tree"
 msgstr ""
 
-#: builtin/submodule--helper.c:3306
+#: builtin/submodule--helper.c:3425
 #, c-format
 msgid "repo URL: '%s' must be absolute or begin with ./|../"
 msgstr ""
 
-#: builtin/submodule--helper.c:3341
+#: builtin/submodule--helper.c:3460
 #, c-format
 msgid "'%s' is not a valid submodule name"
 msgstr ""
 
-#: builtin/submodule--helper.c:3405 git.c:452 git.c:726
+#: builtin/submodule--helper.c:3520 git.c:453 git.c:729
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr ""
 
-#: builtin/submodule--helper.c:3411
+#: builtin/submodule--helper.c:3526
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr ""
@@ -21877,17 +22363,17 @@ msgstr ""
 msgid "reason of the update"
 msgstr ""
 
-#: builtin/tag.c:25
+#: builtin/tag.c:26
 msgid ""
 "git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]\n"
 "        <tagname> [<head>]"
 msgstr ""
 
-#: builtin/tag.c:27
+#: builtin/tag.c:28
 msgid "git tag -d <tagname>..."
 msgstr ""
 
-#: builtin/tag.c:28
+#: builtin/tag.c:29
 msgid ""
 "git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--"
 "points-at <object>]\n"
@@ -21895,21 +22381,21 @@ msgid ""
 "[<pattern>...]"
 msgstr ""
 
-#: builtin/tag.c:30
+#: builtin/tag.c:31
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr ""
 
-#: builtin/tag.c:100
+#: builtin/tag.c:101
 #, c-format
 msgid "tag '%s' not found."
 msgstr ""
 
-#: builtin/tag.c:135
+#: builtin/tag.c:136
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr ""
 
-#: builtin/tag.c:170
+#: builtin/tag.c:171
 #, c-format
 msgid ""
 "\n"
@@ -21918,7 +22404,7 @@ msgid ""
 "Lines starting with '%c' will be ignored.\n"
 msgstr ""
 
-#: builtin/tag.c:174
+#: builtin/tag.c:175
 #, c-format
 msgid ""
 "\n"
@@ -21928,11 +22414,11 @@ msgid ""
 "want to.\n"
 msgstr ""
 
-#: builtin/tag.c:240
+#: builtin/tag.c:241
 msgid "unable to sign the tag"
 msgstr ""
 
-#: builtin/tag.c:258
+#: builtin/tag.c:259
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -21941,115 +22427,119 @@ msgid ""
 "\tgit tag -f %s %s^{}"
 msgstr ""
 
-#: builtin/tag.c:274
+#: builtin/tag.c:275
 msgid "bad object type."
 msgstr ""
 
-#: builtin/tag.c:325
+#: builtin/tag.c:326
 msgid "no tag message?"
 msgstr ""
 
-#: builtin/tag.c:332
+#: builtin/tag.c:333
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr ""
 
-#: builtin/tag.c:444
+#: builtin/tag.c:445
 msgid "list tag names"
 msgstr ""
 
-#: builtin/tag.c:446
+#: builtin/tag.c:447
 msgid "print <n> lines of each tag message"
 msgstr ""
 
-#: builtin/tag.c:448
+#: builtin/tag.c:449
 msgid "delete tags"
 msgstr ""
 
-#: builtin/tag.c:449
+#: builtin/tag.c:450
 msgid "verify tags"
 msgstr ""
 
-#: builtin/tag.c:451
+#: builtin/tag.c:452
 msgid "Tag creation options"
 msgstr ""
 
-#: builtin/tag.c:453
+#: builtin/tag.c:454
 msgid "annotated tag, needs a message"
 msgstr ""
 
-#: builtin/tag.c:455
+#: builtin/tag.c:456
 msgid "tag message"
 msgstr ""
 
-#: builtin/tag.c:457
+#: builtin/tag.c:458
 msgid "force edit of tag message"
 msgstr ""
 
-#: builtin/tag.c:458
+#: builtin/tag.c:459
 msgid "annotated and GPG-signed tag"
 msgstr ""
 
-#: builtin/tag.c:461
+#: builtin/tag.c:462
 msgid "use another key to sign the tag"
 msgstr ""
 
-#: builtin/tag.c:462
+#: builtin/tag.c:463
 msgid "replace the tag if exists"
 msgstr ""
 
-#: builtin/tag.c:463 builtin/update-ref.c:511
+#: builtin/tag.c:464 builtin/update-ref.c:511
 msgid "create a reflog"
 msgstr ""
 
-#: builtin/tag.c:465
+#: builtin/tag.c:466
 msgid "Tag listing options"
 msgstr ""
 
-#: builtin/tag.c:466
+#: builtin/tag.c:467
 msgid "show tag list in columns"
 msgstr ""
 
-#: builtin/tag.c:467 builtin/tag.c:469
+#: builtin/tag.c:468 builtin/tag.c:470
 msgid "print only tags that contain the commit"
 msgstr ""
 
-#: builtin/tag.c:468 builtin/tag.c:470
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that don't contain the commit"
 msgstr ""
 
-#: builtin/tag.c:471
+#: builtin/tag.c:472
 msgid "print only tags that are merged"
 msgstr ""
 
-#: builtin/tag.c:472
+#: builtin/tag.c:473
 msgid "print only tags that are not merged"
 msgstr ""
 
-#: builtin/tag.c:476
+#: builtin/tag.c:477
 msgid "print only tags of the object"
 msgstr ""
 
-#: builtin/tag.c:558
+#: builtin/tag.c:559
 #, c-format
 msgid "the '%s' option is only allowed in list mode"
 msgstr ""
 
-#: builtin/tag.c:597
+#: builtin/tag.c:598
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr ""
 
-#: builtin/tag.c:602
+#: builtin/tag.c:603
 #, c-format
 msgid "tag '%s' already exists"
 msgstr ""
 
-#: builtin/tag.c:633
+#: builtin/tag.c:634
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr ""
 
+#: builtin/unpack-objects.c:95
+msgid "pack exceeds maximum allowed size"
+msgstr ""
+
 #: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
 msgstr ""
@@ -22106,189 +22596,189 @@ msgstr ""
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr ""
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:993
 msgid "continue refresh even when index needs update"
 msgstr ""
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:996
 msgid "refresh: ignore submodules"
 msgstr ""
 
-#: builtin/update-index.c:980
+#: builtin/update-index.c:999
 msgid "do not ignore new files"
 msgstr ""
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:1001
 msgid "let files replace directories and vice-versa"
 msgstr ""
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:1003
 msgid "notice files missing from worktree"
 msgstr ""
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:1005
 msgid "refresh even if index contains unmerged entries"
 msgstr ""
 
-#: builtin/update-index.c:989
+#: builtin/update-index.c:1008
 msgid "refresh stat information"
 msgstr ""
 
-#: builtin/update-index.c:993
+#: builtin/update-index.c:1012
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr ""
 
-#: builtin/update-index.c:997
+#: builtin/update-index.c:1016
 msgid "<mode>,<object>,<path>"
 msgstr ""
 
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1017
 msgid "add the specified entry to the index"
 msgstr ""
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1027
 msgid "mark files as \"not changing\""
 msgstr ""
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1030
 msgid "clear assumed-unchanged bit"
 msgstr ""
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1033
 msgid "mark files as \"index-only\""
 msgstr ""
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1036
 msgid "clear skip-worktree bit"
 msgstr ""
 
-#: builtin/update-index.c:1020
+#: builtin/update-index.c:1039
 msgid "do not touch index-only entries"
 msgstr ""
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1041
 msgid "add to index only; do not add content to object database"
 msgstr ""
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1043
 msgid "remove named paths even if present in worktree"
 msgstr ""
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1045
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr ""
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1047
 msgid "read list of paths to be updated from standard input"
 msgstr ""
 
-#: builtin/update-index.c:1032
+#: builtin/update-index.c:1051
 msgid "add entries from standard input to the index"
 msgstr ""
 
-#: builtin/update-index.c:1036
+#: builtin/update-index.c:1055
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr ""
 
-#: builtin/update-index.c:1040
+#: builtin/update-index.c:1059
 msgid "only update entries that differ from HEAD"
 msgstr ""
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1063
 msgid "ignore files missing from worktree"
 msgstr ""
 
-#: builtin/update-index.c:1047
+#: builtin/update-index.c:1066
 msgid "report actions to standard output"
 msgstr ""
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1068
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr ""
 
-#: builtin/update-index.c:1053
+#: builtin/update-index.c:1072
 msgid "write index in this format"
 msgstr ""
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1074
 msgid "enable or disable split index"
 msgstr ""
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1076
 msgid "enable/disable untracked cache"
 msgstr ""
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1078
 msgid "test if the filesystem supports untracked cache"
 msgstr ""
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1080
 msgid "enable untracked cache without testing the filesystem"
 msgstr ""
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1082
 msgid "write out the index even if is not flagged as changed"
 msgstr ""
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1084
 msgid "enable or disable file system monitor"
 msgstr ""
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1086
 msgid "mark files as fsmonitor valid"
 msgstr ""
 
-#: builtin/update-index.c:1070
+#: builtin/update-index.c:1089
 msgid "clear fsmonitor valid bit"
 msgstr ""
 
-#: builtin/update-index.c:1173
+#: builtin/update-index.c:1195
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
 msgstr ""
 
-#: builtin/update-index.c:1182
+#: builtin/update-index.c:1204
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
 msgstr ""
 
-#: builtin/update-index.c:1194
+#: builtin/update-index.c:1216
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
 msgstr ""
 
-#: builtin/update-index.c:1198
+#: builtin/update-index.c:1220
 msgid "Untracked cache disabled"
 msgstr ""
 
-#: builtin/update-index.c:1206
+#: builtin/update-index.c:1228
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
 msgstr ""
 
-#: builtin/update-index.c:1210
+#: builtin/update-index.c:1232
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr ""
 
-#: builtin/update-index.c:1218
+#: builtin/update-index.c:1241
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
 
-#: builtin/update-index.c:1222
+#: builtin/update-index.c:1246
 msgid "fsmonitor enabled"
 msgstr ""
 
-#: builtin/update-index.c:1225
+#: builtin/update-index.c:1250
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 
-#: builtin/update-index.c:1229
+#: builtin/update-index.c:1254
 msgid "fsmonitor disabled"
 msgstr ""
 
@@ -22320,10 +22810,6 @@ msgstr ""
 msgid "read updates from stdin"
 msgstr ""
 
-#: builtin/update-server-info.c:7
-msgid "git update-server-info [--force]"
-msgstr ""
-
 #: builtin/update-server-info.c:15
 msgid "update the info files from scratch"
 msgstr ""
@@ -22405,232 +22891,255 @@ msgid "git worktree remove [<options>] <worktree>"
 msgstr ""
 
 #: builtin/worktree.c:25
+msgid "git worktree repair [<path>...]"
+msgstr ""
+
+#: builtin/worktree.c:26
 msgid "git worktree unlock <path>"
 msgstr ""
 
-#: builtin/worktree.c:75
+#: builtin/worktree.c:76
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr ""
 
-#: builtin/worktree.c:148
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
 msgstr ""
 
-#: builtin/worktree.c:150
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr ""
 
-#: builtin/worktree.c:220
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr ""
 
-#: builtin/worktree.c:229
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
 msgstr ""
 
-#: builtin/worktree.c:234
+#: builtin/worktree.c:235
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
 "use '%s -f -f' to override, or 'unlock' and 'prune' or 'remove' to clear"
 msgstr ""
 
-#: builtin/worktree.c:236
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
 "use '%s -f' to override, or 'prune' or 'remove' to clear"
 msgstr ""
 
-#: builtin/worktree.c:287
+#: builtin/worktree.c:248
+#, c-format
+msgid "failed to copy '%s' to '%s'; sparse-checkout may not work correctly"
+msgstr ""
+
+#: builtin/worktree.c:268
+#, c-format
+msgid "failed to copy worktree config from '%s' to '%s'"
+msgstr ""
+
+#: builtin/worktree.c:280 builtin/worktree.c:285
+#, c-format
+msgid "failed to unset '%s' in '%s'"
+msgstr ""
+
+#: builtin/worktree.c:356
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr ""
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:378
 msgid "initializing"
 msgstr ""
 
-#: builtin/worktree.c:420 builtin/worktree.c:426
+#: builtin/worktree.c:492 builtin/worktree.c:498
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr ""
 
-#: builtin/worktree.c:422
+#: builtin/worktree.c:494
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr ""
 
-#: builtin/worktree.c:431
+#: builtin/worktree.c:503
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr ""
 
-#: builtin/worktree.c:437
+#: builtin/worktree.c:509
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr ""
 
-#: builtin/worktree.c:482
+#: builtin/worktree.c:554
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr ""
 
-#: builtin/worktree.c:485
+#: builtin/worktree.c:557
 msgid "create a new branch"
 msgstr ""
 
-#: builtin/worktree.c:487
+#: builtin/worktree.c:559
 msgid "create or reset a branch"
 msgstr ""
 
-#: builtin/worktree.c:489
+#: builtin/worktree.c:561
 msgid "populate the new working tree"
 msgstr ""
 
-#: builtin/worktree.c:490
+#: builtin/worktree.c:562
 msgid "keep the new working tree locked"
 msgstr ""
 
-#: builtin/worktree.c:492 builtin/worktree.c:729
+#: builtin/worktree.c:564 builtin/worktree.c:809
 msgid "reason for locking"
 msgstr ""
 
-#: builtin/worktree.c:495
+#: builtin/worktree.c:567
 msgid "set up tracking mode (see git-branch(1))"
 msgstr ""
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:570
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr ""
 
-#: builtin/worktree.c:512
+#: builtin/worktree.c:584
 msgid "added with --lock"
 msgstr ""
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:646
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr ""
 
-#: builtin/worktree.c:691
+#: builtin/worktree.c:766
 msgid "show extended annotations and reasons, if available"
 msgstr ""
 
-#: builtin/worktree.c:693
+#: builtin/worktree.c:768
 msgid "add 'prunable' annotation to worktrees older than <time>"
 msgstr ""
 
-#: builtin/worktree.c:741 builtin/worktree.c:774 builtin/worktree.c:848
-#: builtin/worktree.c:972
+#: builtin/worktree.c:770
+msgid "terminate records with a NUL character"
+msgstr ""
+
+#: builtin/worktree.c:821 builtin/worktree.c:854 builtin/worktree.c:928
+#: builtin/worktree.c:1052
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr ""
 
-#: builtin/worktree.c:743 builtin/worktree.c:776
+#: builtin/worktree.c:823 builtin/worktree.c:856
 msgid "The main working tree cannot be locked or unlocked"
 msgstr ""
 
-#: builtin/worktree.c:748
+#: builtin/worktree.c:828
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr ""
 
-#: builtin/worktree.c:750
+#: builtin/worktree.c:830
 #, c-format
 msgid "'%s' is already locked"
 msgstr ""
 
-#: builtin/worktree.c:778
+#: builtin/worktree.c:858
 #, c-format
 msgid "'%s' is not locked"
 msgstr ""
 
-#: builtin/worktree.c:819
+#: builtin/worktree.c:899
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr ""
 
-#: builtin/worktree.c:827
+#: builtin/worktree.c:907
 msgid "force move even if worktree is dirty or locked"
 msgstr ""
 
-#: builtin/worktree.c:850 builtin/worktree.c:974
+#: builtin/worktree.c:930 builtin/worktree.c:1054
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr ""
 
-#: builtin/worktree.c:855
+#: builtin/worktree.c:935
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr ""
 
-#: builtin/worktree.c:868
+#: builtin/worktree.c:948
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
 "use 'move -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:870
+#: builtin/worktree.c:950
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:873
+#: builtin/worktree.c:953
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr ""
 
-#: builtin/worktree.c:878
+#: builtin/worktree.c:958
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr ""
 
-#: builtin/worktree.c:924
+#: builtin/worktree.c:1004
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr ""
 
-#: builtin/worktree.c:928
+#: builtin/worktree.c:1008
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
 
-#: builtin/worktree.c:933
+#: builtin/worktree.c:1013
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr ""
 
-#: builtin/worktree.c:956
+#: builtin/worktree.c:1036
 msgid "force removal even if worktree is dirty or locked"
 msgstr ""
 
-#: builtin/worktree.c:979
+#: builtin/worktree.c:1059
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
 "use 'remove -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:981
+#: builtin/worktree.c:1061
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:984
+#: builtin/worktree.c:1064
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr ""
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:1088
 #, c-format
 msgid "repair: %s: %s"
 msgstr ""
 
-#: builtin/worktree.c:1011
+#: builtin/worktree.c:1091
 #, c-format
 msgid "error: %s: %s"
 msgstr ""
@@ -22722,41 +23231,41 @@ msgstr ""
 msgid "recursive alias: %s"
 msgstr ""
 
-#: git.c:479
+#: git.c:480
 msgid "write failure on standard output"
 msgstr ""
 
-#: git.c:481
+#: git.c:482
 msgid "unknown write failure on standard output"
 msgstr ""
 
-#: git.c:483
+#: git.c:484
 msgid "close failed on standard output"
 msgstr ""
 
-#: git.c:835
+#: git.c:838
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr ""
 
-#: git.c:885
+#: git.c:888
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr ""
 
-#: git.c:898
+#: git.c:901
 #, c-format
 msgid ""
 "usage: %s\n"
 "\n"
 msgstr ""
 
-#: git.c:918
+#: git.c:921
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr ""
 
-#: git.c:930
+#: git.c:933
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr ""
@@ -22905,139 +23414,139 @@ msgid ""
 "   redirect: %s"
 msgstr ""
 
-#: remote-curl.c:183
+#: remote-curl.c:184
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr ""
 
-#: remote-curl.c:304
+#: remote-curl.c:308
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr ""
 
-#: remote-curl.c:405
+#: remote-curl.c:409
 msgid "invalid server response; expected service, got flush packet"
 msgstr ""
 
-#: remote-curl.c:436
+#: remote-curl.c:440
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr ""
 
-#: remote-curl.c:496
+#: remote-curl.c:500
 #, c-format
 msgid "repository '%s' not found"
 msgstr ""
 
-#: remote-curl.c:500
+#: remote-curl.c:504
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr ""
 
-#: remote-curl.c:504
+#: remote-curl.c:508
 #, c-format
 msgid "unable to access '%s' with http.pinnedPubkey configuration: %s"
 msgstr ""
 
-#: remote-curl.c:508
+#: remote-curl.c:512
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr ""
 
-#: remote-curl.c:514
+#: remote-curl.c:518
 #, c-format
 msgid "redirecting to %s"
 msgstr ""
 
-#: remote-curl.c:645
+#: remote-curl.c:649
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr ""
 
-#: remote-curl.c:657
+#: remote-curl.c:661
 msgid "remote server sent unexpected response end packet"
 msgstr ""
 
-#: remote-curl.c:726
+#: remote-curl.c:730
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr ""
 
-#: remote-curl.c:755
+#: remote-curl.c:759
 #, c-format
 msgid "remote-curl: bad line length character: %.4s"
 msgstr ""
 
-#: remote-curl.c:757
+#: remote-curl.c:761
 msgid "remote-curl: unexpected response end packet"
 msgstr ""
 
-#: remote-curl.c:833
+#: remote-curl.c:837
 #, c-format
 msgid "RPC failed; %s"
 msgstr ""
 
-#: remote-curl.c:873
+#: remote-curl.c:877
 msgid "cannot handle pushes this big"
 msgstr ""
 
-#: remote-curl.c:986
+#: remote-curl.c:990
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr ""
 
-#: remote-curl.c:990
+#: remote-curl.c:994
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr ""
 
-#: remote-curl.c:1040
+#: remote-curl.c:1044
 #, c-format
 msgid "%d bytes of length header were received"
 msgstr ""
 
-#: remote-curl.c:1042
+#: remote-curl.c:1046
 #, c-format
 msgid "%d bytes of body are still expected"
 msgstr ""
 
-#: remote-curl.c:1131
+#: remote-curl.c:1135
 msgid "dumb http transport does not support shallow capabilities"
 msgstr ""
 
-#: remote-curl.c:1146
+#: remote-curl.c:1150
 msgid "fetch failed."
 msgstr ""
 
-#: remote-curl.c:1192
+#: remote-curl.c:1198
 msgid "cannot fetch by sha1 over smart http"
 msgstr ""
 
-#: remote-curl.c:1236 remote-curl.c:1242
+#: remote-curl.c:1242 remote-curl.c:1248
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr ""
 
-#: remote-curl.c:1254 remote-curl.c:1372
+#: remote-curl.c:1260 remote-curl.c:1378
 #, c-format
 msgid "http transport does not support %s"
 msgstr ""
 
-#: remote-curl.c:1290
+#: remote-curl.c:1296
 msgid "git-http-push failed"
 msgstr ""
 
-#: remote-curl.c:1478
+#: remote-curl.c:1485
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr ""
 
-#: remote-curl.c:1510
+#: remote-curl.c:1517
 msgid "remote-curl: error reading command stream from git"
 msgstr ""
 
-#: remote-curl.c:1517
+#: remote-curl.c:1524
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr ""
 
-#: remote-curl.c:1558
+#: remote-curl.c:1565
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr ""
@@ -23050,158 +23559,171 @@ msgstr ""
 msgid "could not find enlistment root"
 msgstr ""
 
-#: contrib/scalar/scalar.c:89 contrib/scalar/scalar.c:351
-#: contrib/scalar/scalar.c:436 contrib/scalar/scalar.c:579
+#: contrib/scalar/scalar.c:89 contrib/scalar/scalar.c:350
+#: contrib/scalar/scalar.c:435 contrib/scalar/scalar.c:578
 #, c-format
 msgid "could not switch to '%s'"
 msgstr ""
 
-#: contrib/scalar/scalar.c:180
+#: contrib/scalar/scalar.c:179
 #, c-format
 msgid "could not configure %s=%s"
 msgstr ""
 
-#: contrib/scalar/scalar.c:198
+#: contrib/scalar/scalar.c:197
 msgid "could not configure log.excludeDecoration"
 msgstr ""
 
-#: contrib/scalar/scalar.c:219
+#: contrib/scalar/scalar.c:218
 msgid "Scalar enlistments require a worktree"
 msgstr ""
 
-#: contrib/scalar/scalar.c:311
+#: contrib/scalar/scalar.c:310
 #, c-format
 msgid "remote HEAD is not a branch: '%.*s'"
 msgstr ""
 
-#: contrib/scalar/scalar.c:317
+#: contrib/scalar/scalar.c:316
 msgid "failed to get default branch name from remote; using local default"
 msgstr ""
 
-#: contrib/scalar/scalar.c:330
+#: contrib/scalar/scalar.c:329
 msgid "failed to get default branch name"
 msgstr ""
 
-#: contrib/scalar/scalar.c:341
+#: contrib/scalar/scalar.c:340
 msgid "failed to unregister repository"
 msgstr ""
 
-#: contrib/scalar/scalar.c:356
+#: contrib/scalar/scalar.c:355
 msgid "failed to delete enlistment directory"
 msgstr ""
 
-#: contrib/scalar/scalar.c:376
+#: contrib/scalar/scalar.c:375
 msgid "branch to checkout after clone"
 msgstr ""
 
-#: contrib/scalar/scalar.c:378
+#: contrib/scalar/scalar.c:377
 msgid "when cloning, create full working directory"
 msgstr ""
 
-#: contrib/scalar/scalar.c:380
+#: contrib/scalar/scalar.c:379
 msgid "only download metadata for the branch that will be checked out"
 msgstr ""
 
-#: contrib/scalar/scalar.c:385
+#: contrib/scalar/scalar.c:384
 msgid "scalar clone [<options>] [--] <repo> [<dir>]"
 msgstr ""
 
-#: contrib/scalar/scalar.c:410
+#: contrib/scalar/scalar.c:409
 #, c-format
 msgid "cannot deduce worktree name from '%s'"
 msgstr ""
 
-#: contrib/scalar/scalar.c:419
+#: contrib/scalar/scalar.c:418
 #, c-format
 msgid "directory '%s' exists already"
 msgstr ""
 
-#: contrib/scalar/scalar.c:446
+#: contrib/scalar/scalar.c:445
 #, c-format
 msgid "failed to get default branch for '%s'"
 msgstr ""
 
-#: contrib/scalar/scalar.c:457
+#: contrib/scalar/scalar.c:456
 #, c-format
 msgid "could not configure remote in '%s'"
 msgstr ""
 
-#: contrib/scalar/scalar.c:466
+#: contrib/scalar/scalar.c:465
 #, c-format
 msgid "could not configure '%s'"
 msgstr ""
 
-#: contrib/scalar/scalar.c:469
+#: contrib/scalar/scalar.c:468
 msgid "partial clone failed; attempting full clone"
 msgstr ""
 
-#: contrib/scalar/scalar.c:473
+#: contrib/scalar/scalar.c:472
 msgid "could not configure for full clone"
 msgstr ""
 
-#: contrib/scalar/scalar.c:505
+#: contrib/scalar/scalar.c:504
 msgid "`scalar list` does not take arguments"
 msgstr ""
 
-#: contrib/scalar/scalar.c:518
+#: contrib/scalar/scalar.c:517
 msgid "scalar register [<enlistment>]"
 msgstr ""
 
-#: contrib/scalar/scalar.c:545
+#: contrib/scalar/scalar.c:544
 msgid "reconfigure all registered enlistments"
 msgstr ""
 
-#: contrib/scalar/scalar.c:549
+#: contrib/scalar/scalar.c:548
 msgid "scalar reconfigure [--all | <enlistment>]"
 msgstr ""
 
-#: contrib/scalar/scalar.c:567
+#: contrib/scalar/scalar.c:566
 msgid "--all or <enlistment>, but not both"
 msgstr ""
 
-#: contrib/scalar/scalar.c:582
+#: contrib/scalar/scalar.c:581
 #, c-format
 msgid "git repository gone in '%s'"
 msgstr ""
 
-#: contrib/scalar/scalar.c:622
+#: contrib/scalar/scalar.c:621
 msgid ""
 "scalar run <task> [<enlistment>]\n"
 "Tasks:\n"
 msgstr ""
 
-#: contrib/scalar/scalar.c:640
+#: contrib/scalar/scalar.c:639
 #, c-format
 msgid "no such task: '%s'"
 msgstr ""
 
-#: contrib/scalar/scalar.c:690
+#: contrib/scalar/scalar.c:689
 msgid "scalar unregister [<enlistment>]"
 msgstr ""
 
-#: contrib/scalar/scalar.c:737
+#: contrib/scalar/scalar.c:736
 msgid "scalar delete <enlistment>"
 msgstr ""
 
-#: contrib/scalar/scalar.c:752
+#: contrib/scalar/scalar.c:751
 msgid "refusing to delete current working directory"
 msgstr ""
 
-#: contrib/scalar/scalar.c:767
+#: contrib/scalar/scalar.c:766
 msgid "include Git version"
 msgstr ""
 
-#: contrib/scalar/scalar.c:769
+#: contrib/scalar/scalar.c:768
 msgid "include Git's build options"
 msgstr ""
 
-#: contrib/scalar/scalar.c:773
+#: contrib/scalar/scalar.c:772
 msgid "scalar verbose [-v | --verbose] [--build-options]"
 msgstr ""
 
+#: contrib/scalar/scalar.c:813
+msgid "-C requires a <directory>"
+msgstr ""
+
+#: contrib/scalar/scalar.c:815
+#, c-format
+msgid "could not change to '%s'"
+msgstr ""
+
 #: contrib/scalar/scalar.c:821
+msgid "-c requires a <key>=<value> argument"
+msgstr ""
+
+#: contrib/scalar/scalar.c:839
 msgid ""
-"scalar <command> [<options>]\n"
+"scalar [-C <directory>] [-c <key>=<value>] <command> [<options>]\n"
 "\n"
 "Commands:\n"
 msgstr ""
@@ -23214,43 +23736,43 @@ msgstr ""
 msgid "no libc information available\n"
 msgstr ""
 
-#: list-objects-filter-options.h:94
+#: list-objects-filter-options.h:126
 msgid "args"
 msgstr ""
 
-#: list-objects-filter-options.h:95
+#: list-objects-filter-options.h:127
 msgid "object filtering"
 msgstr ""
 
-#: parse-options.h:183
+#: parse-options.h:188
 msgid "expiry-date"
 msgstr ""
 
-#: parse-options.h:197
+#: parse-options.h:202
 msgid "no-op (backward compatibility)"
 msgstr ""
 
-#: parse-options.h:310
+#: parse-options.h:341
 msgid "be more verbose"
 msgstr ""
 
-#: parse-options.h:312
+#: parse-options.h:343
 msgid "be more quiet"
 msgstr ""
 
-#: parse-options.h:318
+#: parse-options.h:349
 msgid "use <n> digits to display object names"
 msgstr ""
 
-#: parse-options.h:337
+#: parse-options.h:368
 msgid "how to strip spaces and #comments from message"
 msgstr ""
 
-#: parse-options.h:338
+#: parse-options.h:369
 msgid "read pathspec from file"
 msgstr ""
 
-#: parse-options.h:339
+#: parse-options.h:370
 msgid ""
 "with --pathspec-from-file, pathspec elements are separated with NUL character"
 msgstr ""
@@ -23500,446 +24022,450 @@ msgid "Display help information about Git"
 msgstr ""
 
 #: command-list.h:108
-msgid "Server side implementation of Git over HTTP"
+msgid "Run git hooks"
 msgstr ""
 
 #: command-list.h:109
-msgid "Download from a remote Git repository via HTTP"
+msgid "Server side implementation of Git over HTTP"
 msgstr ""
 
 #: command-list.h:110
-msgid "Push objects over HTTP/DAV to another repository"
+msgid "Download from a remote Git repository via HTTP"
 msgstr ""
 
 #: command-list.h:111
-msgid "Send a collection of patches from stdin to an IMAP folder"
+msgid "Push objects over HTTP/DAV to another repository"
 msgstr ""
 
 #: command-list.h:112
-msgid "Build pack index file for an existing packed archive"
+msgid "Send a collection of patches from stdin to an IMAP folder"
 msgstr ""
 
 #: command-list.h:113
-msgid "Create an empty Git repository or reinitialize an existing one"
+msgid "Build pack index file for an existing packed archive"
 msgstr ""
 
 #: command-list.h:114
-msgid "Instantly browse your working repository in gitweb"
+msgid "Create an empty Git repository or reinitialize an existing one"
 msgstr ""
 
 #: command-list.h:115
-msgid "Add or parse structured information in commit messages"
+msgid "Instantly browse your working repository in gitweb"
 msgstr ""
 
 #: command-list.h:116
-msgid "Show commit logs"
+msgid "Add or parse structured information in commit messages"
 msgstr ""
 
 #: command-list.h:117
-msgid "Show information about files in the index and the working tree"
+msgid "Show commit logs"
 msgstr ""
 
 #: command-list.h:118
-msgid "List references in a remote repository"
+msgid "Show information about files in the index and the working tree"
 msgstr ""
 
 #: command-list.h:119
-msgid "List the contents of a tree object"
+msgid "List references in a remote repository"
 msgstr ""
 
 #: command-list.h:120
-msgid "Extracts patch and authorship from a single e-mail message"
+msgid "List the contents of a tree object"
 msgstr ""
 
 #: command-list.h:121
-msgid "Simple UNIX mbox splitter program"
+msgid "Extracts patch and authorship from a single e-mail message"
 msgstr ""
 
 #: command-list.h:122
-msgid "Run tasks to optimize Git repository data"
+msgid "Simple UNIX mbox splitter program"
 msgstr ""
 
 #: command-list.h:123
-msgid "Join two or more development histories together"
+msgid "Run tasks to optimize Git repository data"
 msgstr ""
 
 #: command-list.h:124
-msgid "Find as good common ancestors as possible for a merge"
+msgid "Join two or more development histories together"
 msgstr ""
 
 #: command-list.h:125
-msgid "Run a three-way file merge"
+msgid "Find as good common ancestors as possible for a merge"
 msgstr ""
 
 #: command-list.h:126
-msgid "Run a merge for files needing merging"
+msgid "Run a three-way file merge"
 msgstr ""
 
 #: command-list.h:127
-msgid "The standard helper program to use with git-merge-index"
+msgid "Run a merge for files needing merging"
 msgstr ""
 
 #: command-list.h:128
-msgid "Show three-way merge without touching index"
+msgid "The standard helper program to use with git-merge-index"
 msgstr ""
 
 #: command-list.h:129
-msgid "Run merge conflict resolution tools to resolve merge conflicts"
+msgid "Show three-way merge without touching index"
 msgstr ""
 
 #: command-list.h:130
-msgid "Creates a tag object with extra validation"
+msgid "Run merge conflict resolution tools to resolve merge conflicts"
 msgstr ""
 
 #: command-list.h:131
-msgid "Build a tree-object from ls-tree formatted text"
+msgid "Creates a tag object with extra validation"
 msgstr ""
 
 #: command-list.h:132
-msgid "Write and verify multi-pack-indexes"
+msgid "Build a tree-object from ls-tree formatted text"
 msgstr ""
 
 #: command-list.h:133
-msgid "Move or rename a file, a directory, or a symlink"
+msgid "Write and verify multi-pack-indexes"
 msgstr ""
 
 #: command-list.h:134
-msgid "Find symbolic names for given revs"
+msgid "Move or rename a file, a directory, or a symlink"
 msgstr ""
 
 #: command-list.h:135
-msgid "Add or inspect object notes"
+msgid "Find symbolic names for given revs"
 msgstr ""
 
 #: command-list.h:136
-msgid "Import from and submit to Perforce repositories"
+msgid "Add or inspect object notes"
 msgstr ""
 
 #: command-list.h:137
-msgid "Create a packed archive of objects"
+msgid "Import from and submit to Perforce repositories"
 msgstr ""
 
 #: command-list.h:138
-msgid "Find redundant pack files"
+msgid "Create a packed archive of objects"
 msgstr ""
 
 #: command-list.h:139
-msgid "Pack heads and tags for efficient repository access"
+msgid "Find redundant pack files"
 msgstr ""
 
 #: command-list.h:140
-msgid "Compute unique ID for a patch"
+msgid "Pack heads and tags for efficient repository access"
 msgstr ""
 
 #: command-list.h:141
-msgid "Prune all unreachable objects from the object database"
+msgid "Compute unique ID for a patch"
 msgstr ""
 
 #: command-list.h:142
-msgid "Remove extra objects that are already in pack files"
+msgid "Prune all unreachable objects from the object database"
 msgstr ""
 
 #: command-list.h:143
-msgid "Fetch from and integrate with another repository or a local branch"
+msgid "Remove extra objects that are already in pack files"
 msgstr ""
 
 #: command-list.h:144
-msgid "Update remote refs along with associated objects"
+msgid "Fetch from and integrate with another repository or a local branch"
 msgstr ""
 
 #: command-list.h:145
-msgid "Applies a quilt patchset onto the current branch"
+msgid "Update remote refs along with associated objects"
 msgstr ""
 
 #: command-list.h:146
-msgid "Compare two commit ranges (e.g. two versions of a branch)"
+msgid "Applies a quilt patchset onto the current branch"
 msgstr ""
 
 #: command-list.h:147
-msgid "Reads tree information into the index"
+msgid "Compare two commit ranges (e.g. two versions of a branch)"
 msgstr ""
 
 #: command-list.h:148
-msgid "Reapply commits on top of another base tip"
+msgid "Reads tree information into the index"
 msgstr ""
 
 #: command-list.h:149
-msgid "Receive what is pushed into the repository"
+msgid "Reapply commits on top of another base tip"
 msgstr ""
 
 #: command-list.h:150
-msgid "Manage reflog information"
+msgid "Receive what is pushed into the repository"
 msgstr ""
 
 #: command-list.h:151
-msgid "Manage set of tracked repositories"
+msgid "Manage reflog information"
 msgstr ""
 
 #: command-list.h:152
-msgid "Pack unpacked objects in a repository"
+msgid "Manage set of tracked repositories"
 msgstr ""
 
 #: command-list.h:153
-msgid "Create, list, delete refs to replace objects"
+msgid "Pack unpacked objects in a repository"
 msgstr ""
 
 #: command-list.h:154
-msgid "Generates a summary of pending changes"
+msgid "Create, list, delete refs to replace objects"
 msgstr ""
 
 #: command-list.h:155
-msgid "Reuse recorded resolution of conflicted merges"
+msgid "Generates a summary of pending changes"
 msgstr ""
 
 #: command-list.h:156
-msgid "Reset current HEAD to the specified state"
+msgid "Reuse recorded resolution of conflicted merges"
 msgstr ""
 
 #: command-list.h:157
-msgid "Restore working tree files"
+msgid "Reset current HEAD to the specified state"
 msgstr ""
 
 #: command-list.h:158
-msgid "Lists commit objects in reverse chronological order"
+msgid "Restore working tree files"
 msgstr ""
 
 #: command-list.h:159
-msgid "Pick out and massage parameters"
+msgid "Lists commit objects in reverse chronological order"
 msgstr ""
 
 #: command-list.h:160
-msgid "Revert some existing commits"
+msgid "Pick out and massage parameters"
 msgstr ""
 
 #: command-list.h:161
-msgid "Remove files from the working tree and from the index"
+msgid "Revert some existing commits"
 msgstr ""
 
 #: command-list.h:162
-msgid "Send a collection of patches as emails"
+msgid "Remove files from the working tree and from the index"
 msgstr ""
 
 #: command-list.h:163
-msgid "Push objects over Git protocol to another repository"
+msgid "Send a collection of patches as emails"
 msgstr ""
 
 #: command-list.h:164
-msgid "Git's i18n setup code for shell scripts"
+msgid "Push objects over Git protocol to another repository"
 msgstr ""
 
 #: command-list.h:165
-msgid "Common Git shell script setup code"
+msgid "Git's i18n setup code for shell scripts"
 msgstr ""
 
 #: command-list.h:166
-msgid "Restricted login shell for Git-only SSH access"
+msgid "Common Git shell script setup code"
 msgstr ""
 
 #: command-list.h:167
-msgid "Summarize 'git log' output"
+msgid "Restricted login shell for Git-only SSH access"
 msgstr ""
 
 #: command-list.h:168
-msgid "Show various types of objects"
+msgid "Summarize 'git log' output"
 msgstr ""
 
 #: command-list.h:169
-msgid "Show branches and their commits"
+msgid "Show various types of objects"
 msgstr ""
 
 #: command-list.h:170
-msgid "Show packed archive index"
+msgid "Show branches and their commits"
 msgstr ""
 
 #: command-list.h:171
-msgid "List references in a local repository"
+msgid "Show packed archive index"
 msgstr ""
 
 #: command-list.h:172
-msgid "Initialize and modify the sparse-checkout"
+msgid "List references in a local repository"
 msgstr ""
 
 #: command-list.h:173
-msgid "Add file contents to the staging area"
+msgid "Reduce your working tree to a subset of tracked files"
 msgstr ""
 
 #: command-list.h:174
-msgid "Stash the changes in a dirty working directory away"
+msgid "Add file contents to the staging area"
 msgstr ""
 
 #: command-list.h:175
-msgid "Show the working tree status"
+msgid "Stash the changes in a dirty working directory away"
 msgstr ""
 
 #: command-list.h:176
-msgid "Remove unnecessary whitespace"
+msgid "Show the working tree status"
 msgstr ""
 
 #: command-list.h:177
-msgid "Initialize, update or inspect submodules"
+msgid "Remove unnecessary whitespace"
 msgstr ""
 
 #: command-list.h:178
-msgid "Bidirectional operation between a Subversion repository and Git"
+msgid "Initialize, update or inspect submodules"
 msgstr ""
 
 #: command-list.h:179
-msgid "Switch branches"
+msgid "Bidirectional operation between a Subversion repository and Git"
 msgstr ""
 
 #: command-list.h:180
-msgid "Read, modify and delete symbolic refs"
+msgid "Switch branches"
 msgstr ""
 
 #: command-list.h:181
-msgid "Create, list, delete or verify a tag object signed with GPG"
+msgid "Read, modify and delete symbolic refs"
 msgstr ""
 
 #: command-list.h:182
-msgid "Creates a temporary file with a blob's contents"
+msgid "Create, list, delete or verify a tag object signed with GPG"
 msgstr ""
 
 #: command-list.h:183
-msgid "Unpack objects from a packed archive"
+msgid "Creates a temporary file with a blob's contents"
 msgstr ""
 
 #: command-list.h:184
-msgid "Register file contents in the working tree to the index"
+msgid "Unpack objects from a packed archive"
 msgstr ""
 
 #: command-list.h:185
-msgid "Update the object name stored in a ref safely"
+msgid "Register file contents in the working tree to the index"
 msgstr ""
 
 #: command-list.h:186
-msgid "Update auxiliary info file to help dumb servers"
+msgid "Update the object name stored in a ref safely"
 msgstr ""
 
 #: command-list.h:187
-msgid "Send archive back to git-archive"
+msgid "Update auxiliary info file to help dumb servers"
 msgstr ""
 
 #: command-list.h:188
-msgid "Send objects packed back to git-fetch-pack"
+msgid "Send archive back to git-archive"
 msgstr ""
 
 #: command-list.h:189
-msgid "Show a Git logical variable"
+msgid "Send objects packed back to git-fetch-pack"
 msgstr ""
 
 #: command-list.h:190
-msgid "Check the GPG signature of commits"
+msgid "Show a Git logical variable"
 msgstr ""
 
 #: command-list.h:191
-msgid "Validate packed Git archive files"
+msgid "Check the GPG signature of commits"
 msgstr ""
 
 #: command-list.h:192
-msgid "Check the GPG signature of tags"
+msgid "Validate packed Git archive files"
 msgstr ""
 
 #: command-list.h:193
-msgid "Show logs with difference each commit introduces"
+msgid "Check the GPG signature of tags"
 msgstr ""
 
 #: command-list.h:194
-msgid "Manage multiple working trees"
+msgid "Show logs with difference each commit introduces"
 msgstr ""
 
 #: command-list.h:195
-msgid "Create a tree object from the current index"
+msgid "Manage multiple working trees"
 msgstr ""
 
 #: command-list.h:196
-msgid "Defining attributes per path"
+msgid "Create a tree object from the current index"
 msgstr ""
 
 #: command-list.h:197
-msgid "Git command-line interface and conventions"
+msgid "Defining attributes per path"
 msgstr ""
 
 #: command-list.h:198
-msgid "A Git core tutorial for developers"
+msgid "Git command-line interface and conventions"
 msgstr ""
 
 #: command-list.h:199
-msgid "Providing usernames and passwords to Git"
+msgid "A Git core tutorial for developers"
 msgstr ""
 
 #: command-list.h:200
-msgid "Git for CVS users"
+msgid "Providing usernames and passwords to Git"
 msgstr ""
 
 #: command-list.h:201
-msgid "Tweaking diff output"
+msgid "Git for CVS users"
 msgstr ""
 
 #: command-list.h:202
-msgid "A useful minimum set of commands for Everyday Git"
+msgid "Tweaking diff output"
 msgstr ""
 
 #: command-list.h:203
-msgid "Frequently asked questions about using Git"
+msgid "A useful minimum set of commands for Everyday Git"
 msgstr ""
 
 #: command-list.h:204
-msgid "A Git Glossary"
+msgid "Frequently asked questions about using Git"
 msgstr ""
 
 #: command-list.h:205
-msgid "Hooks used by Git"
+msgid "A Git Glossary"
 msgstr ""
 
 #: command-list.h:206
-msgid "Specifies intentionally untracked files to ignore"
+msgid "Hooks used by Git"
 msgstr ""
 
 #: command-list.h:207
-msgid "The Git repository browser"
+msgid "Specifies intentionally untracked files to ignore"
 msgstr ""
 
 #: command-list.h:208
-msgid "Map author/committer names and/or E-Mail addresses"
+msgid "The Git repository browser"
 msgstr ""
 
 #: command-list.h:209
-msgid "Defining submodule properties"
+msgid "Map author/committer names and/or E-Mail addresses"
 msgstr ""
 
 #: command-list.h:210
-msgid "Git namespaces"
+msgid "Defining submodule properties"
 msgstr ""
 
 #: command-list.h:211
-msgid "Helper programs to interact with remote repositories"
+msgid "Git namespaces"
 msgstr ""
 
 #: command-list.h:212
-msgid "Git Repository Layout"
+msgid "Helper programs to interact with remote repositories"
 msgstr ""
 
 #: command-list.h:213
-msgid "Specifying revisions and ranges for Git"
+msgid "Git Repository Layout"
 msgstr ""
 
 #: command-list.h:214
-msgid "Mounting one repository inside another"
+msgid "Specifying revisions and ranges for Git"
 msgstr ""
 
 #: command-list.h:215
-msgid "A tutorial introduction to Git"
+msgid "Mounting one repository inside another"
 msgstr ""
 
 #: command-list.h:216
-msgid "A tutorial introduction to Git: part two"
+msgid "A tutorial introduction to Git"
 msgstr ""
 
 #: command-list.h:217
-msgid "Git web interface (web frontend to Git repositories)"
+msgid "A tutorial introduction to Git: part two"
 msgstr ""
 
 #: command-list.h:218
+msgid "Git web interface (web frontend to Git repositories)"
+msgstr ""
+
+#: command-list.h:219
 msgid "An overview of recommended workflows with Git"
 msgstr ""
 
@@ -23981,66 +24507,44 @@ msgstr ""
 msgid "Simple merge did not work, trying automatic merge."
 msgstr ""
 
-#: git-submodule.sh:401
-#, sh-format
-msgid "Unable to find current revision in submodule path '$displaypath'"
-msgstr ""
-
-#: git-submodule.sh:411
-#, sh-format
-msgid "Unable to fetch in submodule path '$sm_path'"
-msgstr ""
-
-#: git-submodule.sh:416
-#, sh-format
-msgid ""
-"Unable to find current ${remote_name}/${branch} revision in submodule path "
-"'$sm_path'"
-msgstr ""
-
-#: git-submodule.sh:464
-#, sh-format
-msgid "Failed to recurse into submodule path '$displaypath'"
-msgstr ""
-
 #: git-sh-setup.sh:89 git-sh-setup.sh:94
 #, sh-format
 msgid "usage: $dashless $USAGE"
 msgstr ""
 
-#: git-sh-setup.sh:183
+#: git-sh-setup.sh:182
 #, sh-format
 msgid "Cannot chdir to $cdup, the toplevel of the working tree"
 msgstr ""
 
-#: git-sh-setup.sh:192 git-sh-setup.sh:199
+#: git-sh-setup.sh:191 git-sh-setup.sh:198
 #, sh-format
 msgid "fatal: $program_name cannot be used without a working tree."
 msgstr ""
 
-#: git-sh-setup.sh:213
+#: git-sh-setup.sh:212
 msgid "Cannot rewrite branches: You have unstaged changes."
 msgstr ""
 
-#: git-sh-setup.sh:216
+#: git-sh-setup.sh:215
 #, sh-format
 msgid "Cannot $action: You have unstaged changes."
 msgstr ""
 
-#: git-sh-setup.sh:227
+#: git-sh-setup.sh:226
 #, sh-format
 msgid "Cannot $action: Your index contains uncommitted changes."
 msgstr ""
 
-#: git-sh-setup.sh:229
+#: git-sh-setup.sh:228
 msgid "Additionally, your index contains uncommitted changes."
 msgstr ""
 
-#: git-sh-setup.sh:349
+#: git-sh-setup.sh:348
 msgid "You need to run this command from the toplevel of the working tree."
 msgstr ""
 
-#: git-sh-setup.sh:354
+#: git-sh-setup.sh:353
 msgid "Unable to determine absolute path of git directory"
 msgstr ""
 
@@ -24615,33 +25119,33 @@ msgstr ""
 msgid "invalid transfer encoding"
 msgstr ""
 
-#: git-send-email.perl:2095
+#: git-send-email.perl:2100
 #, perl-format
 msgid ""
-"fatal: %s: rejected by sendemail-validate hook\n"
+"fatal: %s: rejected by %s hook\n"
 "%s\n"
 "warning: no patches were sent\n"
 msgstr ""
 
-#: git-send-email.perl:2105 git-send-email.perl:2158 git-send-email.perl:2168
+#: git-send-email.perl:2110 git-send-email.perl:2163 git-send-email.perl:2173
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr ""
 
-#: git-send-email.perl:2108
+#: git-send-email.perl:2113
 #, perl-format
 msgid ""
 "fatal: %s:%d is longer than 998 characters\n"
 "warning: no patches were sent\n"
 msgstr ""
 
-#: git-send-email.perl:2126
+#: git-send-email.perl:2131
 #, perl-format
 msgid "Skipping %s with backup suffix '%s'.\n"
 msgstr ""
 
 #. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:2130
+#: git-send-email.perl:2135
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
 msgstr ""
index aa6f170b8e00f00a0f0b5c183d14048e9befc236..76284fe8e6cedb8d7817b46bca56358e7248385c 100644 (file)
--- a/po/id.po
+++ b/po/id.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2022-01-17 08:34+0800\n"
+"POT-Creation-Date: 2022-04-13 14:52+0800\n"
 "PO-Revision-Date: 2021-08-14 09:35+0700\n"
 "Last-Translator: Bagas Sanjaya <bagasdotme@gmail.com>\n"
 "Language-Team: Indonesian\n"
@@ -17,213 +17,212 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: add-interactive.c:380
+#: add-interactive.c:382
 #, c-format
 msgid "Huh (%s)?"
-msgstr "Huh (%s)"
+msgstr "Huh (%s)?"
 
-#: add-interactive.c:533 add-interactive.c:834 reset.c:65 sequencer.c:3509
-#: sequencer.c:3974 sequencer.c:4136 builtin/rebase.c:1233
-#: builtin/rebase.c:1642
+#: add-interactive.c:535 add-interactive.c:836 reset.c:136 sequencer.c:3505
+#: sequencer.c:3970 sequencer.c:4127 builtin/rebase.c:1261
+#: builtin/rebase.c:1671
 msgid "could not read index"
 msgstr "tidak dapat membaca indeks"
 
-#: add-interactive.c:588 git-add--interactive.perl:269
+#: add-interactive.c:590 git-add--interactive.perl:269
 #: git-add--interactive.perl:294
 msgid "binary"
 msgstr "biner"
 
-#: add-interactive.c:646 git-add--interactive.perl:278
+#: add-interactive.c:648 git-add--interactive.perl:278
 #: git-add--interactive.perl:332
 msgid "nothing"
 msgstr "tidak ada"
 
-#: add-interactive.c:647 git-add--interactive.perl:314
+#: add-interactive.c:649 git-add--interactive.perl:314
 #: git-add--interactive.perl:329
 msgid "unchanged"
 msgstr "tak berubah"
 
-#: add-interactive.c:684 git-add--interactive.perl:641
+#: add-interactive.c:686 git-add--interactive.perl:641
 msgid "Update"
 msgstr "Perbarui"
 
-#: add-interactive.c:701 add-interactive.c:889
+#: add-interactive.c:703 add-interactive.c:891
 #, c-format
 msgid "could not stage '%s'"
 msgstr "tidak dapat menggelar '%s'"
 
-#: add-interactive.c:707 add-interactive.c:896 reset.c:89 sequencer.c:3713
+#: add-interactive.c:709 add-interactive.c:898 reset.c:160 sequencer.c:3709
 msgid "could not write index"
 msgstr "tidak dapat menulis indeks"
 
-#: add-interactive.c:710 git-add--interactive.perl:626
+#: add-interactive.c:712 git-add--interactive.perl:626
 #, c-format, perl-format
 msgid "updated %d path\n"
 msgid_plural "updated %d paths\n"
 msgstr[0] "%d jalur diperbarui\n"
 msgstr[1] "%d jalur diperbarui\n"
 
-#: add-interactive.c:728 git-add--interactive.perl:676
+#: add-interactive.c:730 git-add--interactive.perl:676
 #, c-format, perl-format
 msgid "note: %s is untracked now.\n"
 msgstr "catatan: %s sekarang tak terlacak.\n"
 
-#: add-interactive.c:733 apply.c:4151 builtin/checkout.c:306
+#: add-interactive.c:735 apply.c:4133 builtin/checkout.c:311
 #: builtin/reset.c:167
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "make_cache_entry gagal untuk jalur '%s'"
 
-#: add-interactive.c:763 git-add--interactive.perl:653
+#: add-interactive.c:765 git-add--interactive.perl:653
 msgid "Revert"
 msgstr "Kembalikan"
 
-#: add-interactive.c:779
+#: add-interactive.c:781
 msgid "Could not parse HEAD^{tree}"
 msgstr "Tidak dapat menguraikan HEAD^{tree}"
 
-#: add-interactive.c:817 git-add--interactive.perl:629
+#: add-interactive.c:819 git-add--interactive.perl:629
 #, c-format, perl-format
 msgid "reverted %d path\n"
 msgid_plural "reverted %d paths\n"
 msgstr[0] "%d jalur dikembalikan\n"
 msgstr[1] "%d jalur dikembalikan\n"
 
-#: add-interactive.c:868 git-add--interactive.perl:693
+#: add-interactive.c:870 git-add--interactive.perl:693
 #, c-format
 msgid "No untracked files.\n"
 msgstr "Tidak ada berkas tak terlacak.\n"
 
-#: add-interactive.c:872 git-add--interactive.perl:687
+#: add-interactive.c:874 git-add--interactive.perl:687
 msgid "Add untracked"
 msgstr "Tambahkan tak terlacak"
 
-#: add-interactive.c:899 git-add--interactive.perl:623
+#: add-interactive.c:901 git-add--interactive.perl:623
 #, c-format, perl-format
 msgid "added %d path\n"
 msgid_plural "added %d paths\n"
 msgstr[0] "%d jalur ditambahkan\n"
 msgstr[1] "%d jalur ditambahkan\n"
 
-#: add-interactive.c:929
+#: add-interactive.c:931
 #, c-format
 msgid "ignoring unmerged: %s"
 msgstr "mengabaikan tak tergabung: %s"
 
-#: add-interactive.c:941 add-patch.c:1752 git-add--interactive.perl:1371
+#: add-interactive.c:943 add-patch.c:1758 git-add--interactive.perl:1371
 #, c-format
 msgid "Only binary files changed.\n"
 msgstr "Hanya berkas biner yang berubah.\n"
 
-#: add-interactive.c:943 add-patch.c:1750 git-add--interactive.perl:1373
+#: add-interactive.c:945 add-patch.c:1756 git-add--interactive.perl:1373
 #, c-format
 msgid "No changes.\n"
 msgstr "Tidak ada perubahan.\n"
 
-#: add-interactive.c:947 git-add--interactive.perl:1381
+#: add-interactive.c:949 git-add--interactive.perl:1381
 msgid "Patch update"
 msgstr "Pembaruan tambalan"
 
-#: add-interactive.c:986 git-add--interactive.perl:1794
+#: add-interactive.c:988 git-add--interactive.perl:1794
 msgid "Review diff"
 msgstr "Tinjau diff"
 
-#: add-interactive.c:1014
+#: add-interactive.c:1016
 msgid "show paths with changes"
 msgstr "perlihatkan jalur dengan perubahan"
 
-#: add-interactive.c:1016
+#: add-interactive.c:1018
 msgid "add working tree state to the staged set of changes"
 msgstr "tambahkan keadaan pohon kerja ke set perubahan yang tergelar"
 
-#: add-interactive.c:1018
+#: add-interactive.c:1020
 msgid "revert staged set of changes back to the HEAD version"
 msgstr "kembalikan set perubahan yang tergelar kembali ke versi HEAD"
 
-#: add-interactive.c:1020
+#: add-interactive.c:1022
 msgid "pick hunks and update selectively"
 msgstr "ambil bingkah dan perbarui secara selektif"
 
-#: add-interactive.c:1022
+#: add-interactive.c:1024
 msgid "view diff between HEAD and index"
 msgstr "lihat diff antara HEAD dan indeks"
 
-#: add-interactive.c:1024
+#: add-interactive.c:1026
 msgid "add contents of untracked files to the staged set of changes"
 msgstr "tambahkan isi berkas tak terlacak ke set perubahan yang tergelar"
 
-#: add-interactive.c:1032 add-interactive.c:1081
+#: add-interactive.c:1034 add-interactive.c:1083
 msgid "Prompt help:"
 msgstr "Permintaan bantuan:"
 
-#: add-interactive.c:1034
+#: add-interactive.c:1036
 msgid "select a single item"
 msgstr "pilih satu item"
 
-#: add-interactive.c:1036
+#: add-interactive.c:1038
 msgid "select a range of items"
 msgstr "pilih kisaran item"
 
-#: add-interactive.c:1038
+#: add-interactive.c:1040
 msgid "select multiple ranges"
 msgstr "pilih banyak kisaran"
 
-#: add-interactive.c:1040 add-interactive.c:1085
+#: add-interactive.c:1042 add-interactive.c:1087
 msgid "select item based on unique prefix"
 msgstr "pilih item berdasarkan prefiks unik"
 
-#: add-interactive.c:1042
+#: add-interactive.c:1044
 msgid "unselect specified items"
 msgstr "batal pilih item yang disebutkan"
 
-#: add-interactive.c:1044
+#: add-interactive.c:1046
 msgid "choose all items"
 msgstr "pilih semua item"
 
-#: add-interactive.c:1046
+#: add-interactive.c:1048
 msgid "(empty) finish selecting"
 msgstr "(kosong) sudah memilih"
 
-#: add-interactive.c:1083
+#: add-interactive.c:1085
 msgid "select a numbered item"
 msgstr "pilih item bernomor"
 
-#: add-interactive.c:1087
+#: add-interactive.c:1089
 msgid "(empty) select nothing"
 msgstr "(empty) tidak pilih apapun"
 
-#: add-interactive.c:1095 builtin/clean.c:839 git-add--interactive.perl:1898
+#: add-interactive.c:1097 builtin/clean.c:839 git-add--interactive.perl:1898
 msgid "*** Commands ***"
 msgstr "*** Perintah ***"
 
-#: add-interactive.c:1096 builtin/clean.c:840 git-add--interactive.perl:1895
+#: add-interactive.c:1098 builtin/clean.c:840 git-add--interactive.perl:1895
 msgid "What now"
 msgstr "Apa sekarang"
 
-#: add-interactive.c:1148 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "staged"
 msgstr "tergelar"
 
-#: add-interactive.c:1148 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "unstaged"
 msgstr "tak tergelar"
 
-#: add-interactive.c:1148 apply.c:5020 apply.c:5023 builtin/am.c:2367
-#: builtin/am.c:2370 builtin/bugreport.c:107 builtin/clone.c:128
-#: builtin/fetch.c:153 builtin/merge.c:287 builtin/pull.c:194
-#: builtin/submodule--helper.c:404 builtin/submodule--helper.c:1858
-#: builtin/submodule--helper.c:1861 builtin/submodule--helper.c:2504
-#: builtin/submodule--helper.c:2507 builtin/submodule--helper.c:2574
-#: builtin/submodule--helper.c:2579 builtin/submodule--helper.c:2812
+#: add-interactive.c:1150 apply.c:5002 apply.c:5005 builtin/am.c:2370
+#: builtin/am.c:2373 builtin/bugreport.c:107 builtin/clone.c:132
+#: builtin/fetch.c:154 builtin/merge.c:287 builtin/pull.c:194
+#: builtin/submodule--helper.c:412 builtin/submodule--helper.c:1872
+#: builtin/submodule--helper.c:1875 builtin/submodule--helper.c:2709
+#: builtin/submodule--helper.c:2712 builtin/submodule--helper.c:2891
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "jalur"
 
-#: add-interactive.c:1155
+#: add-interactive.c:1157
 msgid "could not refresh index"
 msgstr "tidak dapat menyegarkan indeks"
 
-#: add-interactive.c:1169 builtin/clean.c:804 git-add--interactive.perl:1805
+#: add-interactive.c:1171 builtin/clean.c:804 git-add--interactive.perl:1805
 #, c-format
 msgid "Bye.\n"
 msgstr "Sampai jumpa.\n"
@@ -534,24 +533,24 @@ msgstr "tidak dapat menguraikan kepala bingkah '%.*s'"
 msgid "could not parse colored hunk header '%.*s'"
 msgstr "tidak dapat menguraikan kepala bingkah berwarna '%.*s'"
 
-#: add-patch.c:420
+#: add-patch.c:431
 msgid "could not parse diff"
 msgstr "tidak dapat menguraikan diff"
 
-#: add-patch.c:439
+#: add-patch.c:450
 msgid "could not parse colored diff"
 msgstr "tidak dapat menguraikan diff berwarna"
 
-#: add-patch.c:453
+#: add-patch.c:464
 #, c-format
 msgid "failed to run '%s'"
 msgstr "gagal menjalankan '%s'"
 
-#: add-patch.c:612
+#: add-patch.c:618
 msgid "mismatched output from interactive.diffFilter"
 msgstr "keluaran tak cocok dari interactive.diffFilter"
 
-#: add-patch.c:613
+#: add-patch.c:619
 msgid ""
 "Your filter must maintain a one-to-one correspondence\n"
 "between its input and output lines."
@@ -559,7 +558,7 @@ msgstr ""
 "Saringan Anda haru menjaga korespondensi satu-satu antara masukannya\n"
 "dan baris keluaran."
 
-#: add-patch.c:791
+#: add-patch.c:797
 #, c-format
 msgid ""
 "expected context line #%d in\n"
@@ -568,7 +567,7 @@ msgstr ""
 "baris konteks #%d diharapkan dalam\n"
 "%.*s"
 
-#: add-patch.c:806
+#: add-patch.c:812
 #, c-format
 msgid ""
 "hunks do not overlap:\n"
@@ -581,11 +580,11 @@ msgstr ""
 "tidak berakhir dengan:\n"
 "%.*s"
 
-#: add-patch.c:1082 git-add--interactive.perl:1115
+#: add-patch.c:1088 git-add--interactive.perl:1115
 msgid "Manual hunk edit mode -- see bottom for a quick guide.\n"
 msgstr "Mode sunting bingkah manual -- lihat dibawah untuk panduan cepat.\n"
 
-#: add-patch.c:1086
+#: add-patch.c:1092
 #, c-format
 msgid ""
 "---\n"
@@ -599,7 +598,7 @@ msgstr ""
 "Baris yang diawali dengan %c akan dihapus.\n"
 
 #. TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
-#: add-patch.c:1100 git-add--interactive.perl:1129
+#: add-patch.c:1106 git-add--interactive.perl:1129
 msgid ""
 "If it does not apply cleanly, you will be given an opportunity to\n"
 "edit again.  If all lines of the hunk are removed, then the edit is\n"
@@ -609,11 +608,11 @@ msgstr ""
 "untuk menyunting lagi. Jika semua baris dalam bingkah dihapus, suntingan\n"
 "dibatalkan dan bingkah tetap tidak berubah.\n"
 
-#: add-patch.c:1133
+#: add-patch.c:1139
 msgid "could not parse hunk header"
 msgstr "tidak dapat menguraikan kepala bingkah"
 
-#: add-patch.c:1178
+#: add-patch.c:1184
 msgid "'git apply --cached' failed"
 msgstr "'git apply --cached' gagal"
 
@@ -629,26 +628,26 @@ msgstr "'git apply --cached' gagal"
 #. Consider translating (saying "no" discards!) as
 #. (saying "n" for "no" discards!) if the translation
 #. of the word "no" does not start with n.
-#: add-patch.c:1247 git-add--interactive.perl:1244
+#: add-patch.c:1253 git-add--interactive.perl:1244
 msgid ""
 "Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? "
 msgstr ""
 "Bingkah Anda tak diterapkan. Sunting lagi (bilang \"n\" untuk \"tidak\" "
 "buang!) [y/n]?"
 
-#: add-patch.c:1290
+#: add-patch.c:1296
 msgid "The selected hunks do not apply to the index!"
 msgstr "Bingkah yang dipilih tidak diterapkan ke indeks!"
 
-#: add-patch.c:1291 git-add--interactive.perl:1348
+#: add-patch.c:1297 git-add--interactive.perl:1348
 msgid "Apply them to the worktree anyway? "
 msgstr "Tetap terapkan itu ke pohon kerja? "
 
-#: add-patch.c:1298 git-add--interactive.perl:1351
+#: add-patch.c:1304 git-add--interactive.perl:1351
 msgid "Nothing was applied.\n"
 msgstr "Tidak ada yang diterapkan.\n"
 
-#: add-patch.c:1355
+#: add-patch.c:1361
 msgid ""
 "j - leave this hunk undecided, see next undecided hunk\n"
 "J - leave this hunk undecided, see next hunk\n"
@@ -670,73 +669,73 @@ msgstr ""
 "e - sunting bingkah saat ini secara manual\n"
 "? - cetak bantuan\n"
 
-#: add-patch.c:1517 add-patch.c:1527
+#: add-patch.c:1523 add-patch.c:1533
 msgid "No previous hunk"
 msgstr "Tidak ada bingkah sebelumnya"
 
-#: add-patch.c:1522 add-patch.c:1532
+#: add-patch.c:1528 add-patch.c:1538
 msgid "No next hunk"
 msgstr "Tidak ada bingkah selanjutnya"
 
-#: add-patch.c:1538
+#: add-patch.c:1544
 msgid "No other hunks to goto"
 msgstr "Tidak ada bingkah lainnya untuk dikunjungi"
 
-#: add-patch.c:1549 git-add--interactive.perl:1608
+#: add-patch.c:1555 git-add--interactive.perl:1608
 msgid "go to which hunk (<ret> to see more)? "
 msgstr "pergi ke bingkah yang mana (<ret> untuk lihat lebih)? "
 
-#: add-patch.c:1550 git-add--interactive.perl:1610
+#: add-patch.c:1556 git-add--interactive.perl:1610
 msgid "go to which hunk? "
 msgstr "pergi ke bingkah yang mana?"
 
-#: add-patch.c:1561
+#: add-patch.c:1567
 #, c-format
 msgid "Invalid number: '%s'"
 msgstr "Angka tidak valid: '%s'"
 
-#: add-patch.c:1566
+#: add-patch.c:1572
 #, c-format
 msgid "Sorry, only %d hunk available."
 msgid_plural "Sorry, only %d hunks available."
 msgstr[0] "Maaf, hanya %d bingkah yang tersedia."
 msgstr[1] "Maaf, hanya %d bingkah yang tersedia."
 
-#: add-patch.c:1575
+#: add-patch.c:1581
 msgid "No other hunks to search"
 msgstr "Tidak ada bingkah lainnya untuk dicari"
 
-#: add-patch.c:1581 git-add--interactive.perl:1663
+#: add-patch.c:1587 git-add--interactive.perl:1663
 msgid "search for regex? "
 msgstr "cari untuk regex? "
 
-#: add-patch.c:1596
+#: add-patch.c:1602
 #, c-format
 msgid "Malformed search regexp %s: %s"
 msgstr "regexp pencarian %s cacat: %s"
 
-#: add-patch.c:1613
+#: add-patch.c:1619
 msgid "No hunk matches the given pattern"
 msgstr "Tidak ada bingkah yang cocok dengan pola yang diberikan"
 
-#: add-patch.c:1620
+#: add-patch.c:1626
 msgid "Sorry, cannot split this hunk"
 msgstr "Maaf, tidak dapat membelah bingkah ini"
 
-#: add-patch.c:1624
+#: add-patch.c:1630
 #, c-format
 msgid "Split into %d hunks."
 msgstr "Terbelah ke dalam %d bingkah."
 
-#: add-patch.c:1628
+#: add-patch.c:1634
 msgid "Sorry, cannot edit this hunk"
 msgstr "Maaf, tidak dapat menyunting bingkah ini"
 
-#: add-patch.c:1680
+#: add-patch.c:1686
 msgid "'git apply' failed"
 msgstr "'git apply' gagal"
 
-#: advice.c:78
+#: advice.c:81
 #, c-format
 msgid ""
 "\n"
@@ -745,37 +744,37 @@ msgstr ""
 "\n"
 "Nonaktifkan pesan ini dengan \"git config advice.%s false\""
 
-#: advice.c:94
+#: advice.c:97
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%shint: %.*s%s\n"
 
-#: advice.c:178
+#: advice.c:181
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr "Pemetikan ceri tidak mungkin sebab Anda punya berkas tak tergabung."
 
-#: advice.c:180
+#: advice.c:183
 msgid "Committing is not possible because you have unmerged files."
 msgstr "Pengkomitan tidak mungkin sebab Anda punya berkas tak tergabung."
 
-#: advice.c:182
+#: advice.c:185
 msgid "Merging is not possible because you have unmerged files."
 msgstr "Penggabungan tidak mungkin sebab Anda punya berkas tak tergabung."
 
-#: advice.c:184
+#: advice.c:187
 msgid "Pulling is not possible because you have unmerged files."
 msgstr "Penarikan tidak mungkin sebab Anda punya berkas tak tergabung."
 
-#: advice.c:186
+#: advice.c:189
 msgid "Reverting is not possible because you have unmerged files."
 msgstr "Pembalikkan tidak mungkin sebab Anda punya berkas tak tergabung."
 
-#: advice.c:188
+#: advice.c:191
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr "Tidak mungkin untuk %s sebab Anda punya berkas tak tergabung."
 
-#: advice.c:196
+#: advice.c:199
 msgid ""
 "Fix them up in the work tree, and then use 'git add/rm <file>'\n"
 "as appropriate to mark resolution and make a commit."
@@ -783,27 +782,27 @@ msgstr ""
 "Perbaiki di dalam pohon kerja, lalu gunakan 'git add/rm <berkas>'\n"
 "sebagaimana mestinya untuk menandai resolusi dan membuat sebuah komit."
 
-#: advice.c:204
+#: advice.c:207
 msgid "Exiting because of an unresolved conflict."
 msgstr "Keluar karena sebuah konflik tak terselesaikan."
 
-#: advice.c:209 builtin/merge.c:1382
+#: advice.c:212 builtin/merge.c:1388
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Anda belum mengakhiri penggabungan Anda (MERGE_HEAD ada)."
 
-#: advice.c:211
+#: advice.c:214
 msgid "Please, commit your changes before merging."
 msgstr "Mohon komit perubahan Anda sebelum menggabungkan."
 
-#: advice.c:212
+#: advice.c:215
 msgid "Exiting because of unfinished merge."
 msgstr "Keluar karena penggabungan belum selesai."
 
-#: advice.c:217
+#: advice.c:220
 msgid "Not possible to fast-forward, aborting."
 msgstr "Tidak mungkin untuk maju cepat, batalkan."
 
-#: advice.c:227
+#: advice.c:230
 #, c-format
 msgid ""
 "The following paths and/or pathspecs matched paths that exist\n"
@@ -814,7 +813,7 @@ msgstr ""
 "di luar definisi checkout tipis Anda, jadi tidak akan diperbarui\n"
 "di dalam indeks:\n"
 
-#: advice.c:234
+#: advice.c:237
 msgid ""
 "If you intend to update such entries, try one of the following:\n"
 "* Use the --sparse option.\n"
@@ -824,7 +823,7 @@ msgstr ""
 "* Gunakan opsi --sparse\n"
 "* Nonaktifkan atau modifikasi aturan kejarangan."
 
-#: advice.c:242
+#: advice.c:245
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -848,12 +847,15 @@ msgid ""
 msgstr ""
 "Catatan: berganti ke '%s'.\n"
 "\n"
-"Anda berada dalam keadaan 'HEAD terpisah'. Anda dapat melihat-lihat, membuat\n"
-"perubahan eksperimental and komit, dan Anda dapat membuang komit apa saja yang\n"
-"Anda buat di dalam keadaan ini tanpa mempengaruhi cabang apapun dengan bergantin"
-"kembali ke sebuah cabang.\n"
+"Anda berada dalam keadaan 'HEAD terpisah'. Anda dapat melihat-lihat, "
+"membuat\n"
+"perubahan eksperimental and komit, dan Anda dapat membuang komit apa saja "
+"yang\n"
+"Anda buat di dalam keadaan ini tanpa mempengaruhi cabang apapun dengan "
+"bergantinkembali ke sebuah cabang.\n"
 "\n"
-"Jika Anda ingin membuat cabang baru untuk menyimpan komit yang Anda buat, Anda\n"
+"Jika Anda ingin membuat cabang baru untuk menyimpan komit yang Anda buat, "
+"Anda\n"
 "dapat melakukannya (sekarang atau nanti) dengan:\n"
 "\n"
 "  git switch -c <nama cabang baru>\n"
@@ -862,8 +864,8 @@ msgstr ""
 "\n"
 "  git switch -\n"
 "\n"
-"Matikan saran ini dengan menyetel variabel konfigurasi advice.detachedHead ke "
-"false\n"
+"Matikan saran ini dengan menyetel variabel konfigurasi advice.detachedHead "
+"ke false\n"
 "\n"
 
 #: alias.c:50
@@ -884,82 +886,85 @@ msgstr "opsi spasi putih tidak dikenal '%s'"
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "opsi abai spasi putih tidak dikenal '%s'"
 
-#: apply.c:136 archive.c:584 range-diff.c:559 revision.c:2303 revision.c:2307
-#: revision.c:2316 revision.c:2321 revision.c:2527 revision.c:2870
-#: revision.c:2874 revision.c:2880 revision.c:2883 revision.c:2885
-#: builtin/add.c:510 builtin/add.c:512 builtin/add.c:529 builtin/add.c:541
-#: builtin/branch.c:727 builtin/checkout.c:467 builtin/checkout.c:470
-#: builtin/checkout.c:1644 builtin/checkout.c:1754 builtin/checkout.c:1757
-#: builtin/clone.c:906 builtin/commit.c:358 builtin/commit.c:361
-#: builtin/commit.c:1196 builtin/describe.c:593 builtin/diff-tree.c:155
-#: builtin/difftool.c:733 builtin/fast-export.c:1245 builtin/fetch.c:2038
-#: builtin/fetch.c:2043 builtin/index-pack.c:1852 builtin/init-db.c:560
-#: builtin/log.c:1946 builtin/log.c:1948 builtin/ls-files.c:778
-#: builtin/merge.c:1403 builtin/merge.c:1405 builtin/pack-objects.c:4073
-#: builtin/push.c:592 builtin/push.c:630 builtin/push.c:636 builtin/push.c:641
-#: builtin/rebase.c:1193 builtin/rebase.c:1195 builtin/rebase.c:1199
-#: builtin/repack.c:684 builtin/repack.c:715 builtin/reset.c:426
-#: builtin/reset.c:462 builtin/rev-list.c:541 builtin/show-branch.c:710
-#: builtin/stash.c:1707 builtin/stash.c:1710 builtin/submodule--helper.c:1316
-#: builtin/submodule--helper.c:2975 builtin/tag.c:526 builtin/tag.c:572
-#: builtin/worktree.c:702
+#: apply.c:138 archive.c:584 parse-options.c:1122 range-diff.c:555
+#: revision.c:2314 revision.c:2318 revision.c:2327 revision.c:2332
+#: revision.c:2560 revision.c:2895 revision.c:2899 revision.c:2907
+#: revision.c:2910 revision.c:2912 builtin/add.c:507 builtin/add.c:509
+#: builtin/add.c:515 builtin/add.c:527 builtin/branch.c:755
+#: builtin/checkout.c:472 builtin/checkout.c:475 builtin/checkout.c:1663
+#: builtin/checkout.c:1773 builtin/checkout.c:1776 builtin/clone.c:921
+#: builtin/commit.c:359 builtin/commit.c:362 builtin/commit.c:1200
+#: builtin/commit.c:1256 builtin/commit.c:1273 builtin/describe.c:593
+#: builtin/diff-tree.c:155 builtin/difftool.c:733 builtin/fast-export.c:1245
+#: builtin/fetch.c:2141 builtin/fetch.c:2162 builtin/fetch.c:2167
+#: builtin/help.c:602 builtin/index-pack.c:1858 builtin/init-db.c:560
+#: builtin/log.c:1968 builtin/log.c:1970 builtin/ls-files.c:778
+#: builtin/merge-base.c:163 builtin/merge-base.c:169 builtin/merge.c:1409
+#: builtin/merge.c:1411 builtin/pack-objects.c:4098 builtin/push.c:592
+#: builtin/push.c:630 builtin/push.c:636 builtin/push.c:641
+#: builtin/rebase.c:1221 builtin/rebase.c:1223 builtin/rebase.c:1227
+#: builtin/repack.c:688 builtin/repack.c:719 builtin/reset.c:433
+#: builtin/reset.c:469 builtin/rev-list.c:537 builtin/show-branch.c:711
+#: builtin/stash.c:1696 builtin/stash.c:1699 builtin/submodule--helper.c:1328
+#: builtin/submodule--helper.c:3054 builtin/tag.c:527 builtin/tag.c:573
+#: builtin/worktree.c:779
 #, c-format
 msgid "options '%s' and '%s' cannot be used together"
 msgstr "Opsi '%s' dan '%s' tidak dapat digunakan bersamaan"
 
-#: apply.c:139 apply.c:150 apply.c:153
+#: apply.c:141 apply.c:152 apply.c:155
 #, c-format
 msgid "'%s' outside a repository"
 msgstr "'%s' di luar repositori"
 
-#: apply.c:800
+#: apply.c:807
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr "Tidak dapat menyiapkan ekspresi reguler stempel waktu %s"
 
-#: apply.c:809
+#: apply.c:816
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr "regexec kembalikan %d untuk input: %s"
 
-#: apply.c:883
+#: apply.c:890
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr "tidak dapat menemukan nama berkas dalam tambalan pada baris %d"
 
-#: apply.c:921
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr "git apply: git-diff jelek - berharap /dev/null, dapat %s pada baris %d"
 
-#: apply.c:927
+#: apply.c:934
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr ""
 "git apply: git-diff jelek - nama berkas baru tidak konsisten pada baris %d"
 
-#: apply.c:928
+#: apply.c:935
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr ""
 "git apply: git-diff jelek - nama berkas lama tidak konsisten pada baris %d"
 
-#: apply.c:933
+#: apply.c:940
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr "git apply: git-diff jelek - berharap /dev/null pada baris %d"
 
-#: apply.c:962
+#: apply.c:969
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "mode tidak valid pada baris %d: %s"
 
-#: apply.c:1281
+#: apply.c:1288
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr "kepala baris %d dan %d tidak konsisten"
 
-#: apply.c:1371
+#: apply.c:1378
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -974,92 +979,92 @@ msgstr[1] ""
 "kepala git diff kekurangan informasi nama berkas ketika menghapus %d "
 "komponen nama jalur terkemuka (baris %d)"
 
-#: apply.c:1384
+#: apply.c:1391
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr "kepala git diff kekurangan informasi nama berkas (baris %d)"
 
-#: apply.c:1480
+#: apply.c:1487
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr "recount: baris tidak diharapkan: %.*s"
 
-#: apply.c:1549
+#: apply.c:1556
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr "pecahan tambalan tanpa kepala pada baris %d: %.*s"
 
-#: apply.c:1752
+#: apply.c:1759
 msgid "new file depends on old contents"
 msgstr "berkas baru bergantung pada konten yang lama"
 
-#: apply.c:1754
+#: apply.c:1761
 msgid "deleted file still has contents"
 msgstr "berkas terhapus masih ada konten"
 
-#: apply.c:1788
+#: apply.c:1795
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "tambalan rusak pada baris %d"
 
-#: apply.c:1825
+#: apply.c:1832
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "berkas baru %s bergantung pada konten yang lama"
 
-#: apply.c:1827
+#: apply.c:1834
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "berkas yang dihapus %s masih ada konten"
 
-#: apply.c:1830
+#: apply.c:1837
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** peringatan: berkas %s menjadi kosong tetapi tidak dihapus"
 
-#: apply.c:1978
+#: apply.c:1985
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "tambalan biner rusak pada baris %d: %.*s"
 
-#: apply.c:2015
+#: apply.c:2022
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "tambalan biner tidak dikenal pada baris %d"
 
-#: apply.c:2177
+#: apply.c:2184
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "tambal dengan hanya sampah pada baris %d"
 
-#: apply.c:2263
+#: apply.c:2270
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "tidak dapat membaca tautan simbolik %s"
 
-#: apply.c:2267
+#: apply.c:2274
 #, c-format
 msgid "unable to open or read %s"
 msgstr "tidak dapat membuka atau membaca %s"
 
-#: apply.c:2936
+#: apply.c:2943
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "awal baris tidak valid: '%c'"
 
-#: apply.c:3057
+#: apply.c:3064
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "Bingkah #%d berhasil pada %d (ganti %d baris)."
 msgstr[1] "Bingkah #%d berhasil pada %d (ganti %d baris)."
 
-#: apply.c:3069
+#: apply.c:3076
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "Konteks dikurangi menjadi (%ld/%ld) untuk terapkan pecahan pada %d"
 
-#: apply.c:3075
+#: apply.c:3082
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1068,453 +1073,453 @@ msgstr ""
 "ketika mencari:\n"
 "%.*s"
 
-#: apply.c:3097
+#: apply.c:3104
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "data tambalan biner hilang untuk '%s'"
 
-#: apply.c:3105
+#: apply.c:3112
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr ""
 "tidak dapat menerapkan balik tambalan biner tanpa membalikkan bingkah ke '%s'"
 
-#: apply.c:3152
+#: apply.c:3159
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr "tidak dapat menerapkan tambalan biner ke '%s' tanpa baris indeks penuh"
 
-#: apply.c:3163
+#: apply.c:3170
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr ""
 "tambalan diterapkan ke '%s' (%s), yang tidak cocok dengan konten saat ini."
 
-#: apply.c:3171
+#: apply.c:3178
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "tambalan diterapkan ke '%s' kosong tapi tidak kosong"
 
-#: apply.c:3189
+#: apply.c:3196
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "pascacitra %s yang diperlukan untuk '%s' tidak dapat dibaca"
 
-#: apply.c:3202
+#: apply.c:3209
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "tambalan biner tidak dapat diterapkan ke '%s'"
 
-#: apply.c:3209
+#: apply.c:3216
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 "tambalan biner ke '%s' membuat hasil yang salah (diharapkan %s, dapat %s)"
 
-#: apply.c:3230
+#: apply.c:3237
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "tambalan gagal: %s:%ld"
 
-#: apply.c:3353
+#: apply.c:3360
 #, c-format
 msgid "cannot checkout %s"
 msgstr "tidak dapat men-checkout %s"
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:104 pack-revindex.c:214
-#: setup.c:309
+#: apply.c:3412 apply.c:3423 apply.c:3469 midx.c:105 pack-revindex.c:214
+#: setup.c:310
 #, c-format
 msgid "failed to read %s"
 msgstr "gagal membaca %s"
 
-#: apply.c:3413
+#: apply.c:3420
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "membaca dari '%s' diluar tautan simbolik"
 
-#: apply.c:3442 apply.c:3711
+#: apply.c:3449 apply.c:3721
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "jalus %s sudah dinamai ulang/dihapus"
 
-#: apply.c:3549 apply.c:3726
+#: apply.c:3559 apply.c:3736
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s: tidak ada di indeks"
 
-#: apply.c:3558 apply.c:3734 apply.c:3978
+#: apply.c:3568 apply.c:3744 apply.c:3960
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s: tidak cocok dengan indeks"
 
-#: apply.c:3595
+#: apply.c:3605
 msgid "repository lacks the necessary blob to perform 3-way merge."
 msgstr ""
 "repositori kekurangan blob yang diperlukan untuk melakukan penggabungan 3 "
 "arah."
 
-#: apply.c:3598
+#: apply.c:3608
 #, c-format
 msgid "Performing three-way merge...\n"
 msgstr "Melakukan penggabungan 3 arah...\n"
 
-#: apply.c:3614 apply.c:3618
+#: apply.c:3624 apply.c:3628
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "tidak dapat membaca konten saat ini dari '%s'"
 
-#: apply.c:3630
+#: apply.c:3640
 #, c-format
 msgid "Failed to perform three-way merge...\n"
 msgstr "Gagal melakukan penggabungan 3 arah...\n"
 
-#: apply.c:3644
+#: apply.c:3654
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Tambalan diterapkan ke '%s' dengan konflik.\n"
 
-#: apply.c:3649
+#: apply.c:3659
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Tambalan diterapkan ke '%s' dengan rapi.\n"
 
-#: apply.c:3666
+#: apply.c:3676
 #, c-format
 msgid "Falling back to direct application...\n"
 msgstr "Mundur ke penerapan langsung...\n"
 
-#: apply.c:3678
+#: apply.c:3688
 msgid "removal patch leaves file contents"
 msgstr "tambalan penghapusan meninggalkan isi berkas"
 
-#: apply.c:3751
+#: apply.c:3761
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s: salah tipe"
 
-#: apply.c:3753
+#: apply.c:3763
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s bertipe %o, diharapkan %o"
 
-#: apply.c:3918 apply.c:3920 read-cache.c:889 read-cache.c:918
-#: read-cache.c:1381
+#: apply.c:3900 apply.c:3902 read-cache.c:903 read-cache.c:932
+#: read-cache.c:1399
 #, c-format
 msgid "invalid path '%s'"
 msgstr "jalur tidak valid '%s'"
 
-#: apply.c:3976
+#: apply.c:3958
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s: sudah ada di indeks"
 
-#: apply.c:3980
+#: apply.c:3962
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s: sudah ada di direktori kerja"
 
-#: apply.c:4000
+#: apply.c:3982
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "mode baru (%o) dari %s tidak cocok dengan mode lama (%o)"
 
-#: apply.c:4005
+#: apply.c:3987
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "mode baru (%o) dari %s tidak cocok dengan mode lama (%o) dari %s"
 
-#: apply.c:4025
+#: apply.c:4007
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "berkas yang terpengaruh '%s' diluar tautan simbolik"
 
-#: apply.c:4029
+#: apply.c:4011
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s: tambalan tak diterapkan"
 
-#: apply.c:4044
+#: apply.c:4026
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Memeriksa tambalan %s..."
 
-#: apply.c:4136
+#: apply.c:4118
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "informasi sha1 kurang atau tidak berguna untuk submodul %s"
 
-#: apply.c:4143
+#: apply.c:4125
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "perubahan mode untuk %s, yang bukan dalam HEAD saat ini"
 
-#: apply.c:4146
+#: apply.c:4128
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "informasi sha1 kurang atau tidak berguna (%s)"
 
-#: apply.c:4155
+#: apply.c:4137
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "tidak dapat menambahkan %s ke indeks sementara"
 
-#: apply.c:4165
+#: apply.c:4147
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "tidak dapat menulis indeks sementara ke %s"
 
-#: apply.c:4303
+#: apply.c:4285
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "tidak dapat menghapus %s dari indeks"
 
-#: apply.c:4337
+#: apply.c:4319
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "tambalan rusak untuk submodul %s"
 
-#: apply.c:4343
+#: apply.c:4325
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "tidak dapat men-stat berkas yang baru dibuat '%s'"
 
-#: apply.c:4351
+#: apply.c:4333
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr ""
 "tidak dapat membuat simpanan pendukung untuk berkas yang baru dibuat %s"
 
-#: apply.c:4357 apply.c:4502
+#: apply.c:4339 apply.c:4484
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "tidak dapat menambahkan entri tembolok untuk %s"
 
-#: apply.c:4400 builtin/bisect--helper.c:540 builtin/gc.c:2258
+#: apply.c:4382 builtin/bisect--helper.c:540 builtin/gc.c:2258
 #: builtin/gc.c:2293
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "gagal menulis ke '%s'"
 
-#: apply.c:4404
+#: apply.c:4386
 #, c-format
 msgid "closing file '%s'"
 msgstr "menutup berkas '%s'"
 
-#: apply.c:4474
+#: apply.c:4456
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "tidak dapat menulis berkas '%s' mode %o"
 
-#: apply.c:4572
+#: apply.c:4554
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Tambalan %s diterapkan dengan rapi."
 
-#: apply.c:4580
+#: apply.c:4562
 msgid "internal error"
 msgstr "kesalahan internal"
 
-#: apply.c:4583
+#: apply.c:4565
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "Menerapkan tambalan %%s dengan %d penolakan..."
 msgstr[1] "Menerapkan tambalan %%s dengan %d penolakan..."
 
-#: apply.c:4594
+#: apply.c:4576
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "memotong nama berkas .rej ke %.*s.rej"
 
-#: apply.c:4602
+#: apply.c:4584
 #, c-format
 msgid "cannot open %s"
 msgstr "tidak dapat membuka %s"
 
-#: apply.c:4616
+#: apply.c:4598
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "Bingkah #%d diterapkan dengan rapi."
 
-#: apply.c:4620
+#: apply.c:4602
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "Bingkah #%d ditolak."
 
-#: apply.c:4749
+#: apply.c:4731
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Tambalan '%s' dilewatkan."
 
-#: apply.c:4758
+#: apply.c:4740
 msgid "No valid patches in input (allow with \"--allow-empty\")"
 msgstr ""
 
-#: apply.c:4779
+#: apply.c:4761
 msgid "unable to read index file"
 msgstr "tidak dapa membaca berkas indeks"
 
-#: apply.c:4936
+#: apply.c:4918
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "tidak dapat membuka tambalan '%s': %s"
 
-#: apply.c:4963
+#: apply.c:4945
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "%d kesalahan spasi putih dipadamkan"
 msgstr[1] "%d kesalahan spasi putih dipadamkan"
 
-#: apply.c:4969 apply.c:4984
+#: apply.c:4951 apply.c:4966
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d baris menambahkan kesalahan spasi putih."
 msgstr[1] "%d baris menambahkan kesalahan spasi putih."
 
-#: apply.c:4977
+#: apply.c:4959
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] "%d baris diterapkan setelah memperbaiki kesalahan spasi putih."
 msgstr[1] "%d baris diterapkan setelah memperbaiki kesalahan spasi putih."
 
-#: apply.c:4993 builtin/add.c:704 builtin/mv.c:338 builtin/rm.c:430
+#: apply.c:4975 builtin/add.c:690 builtin/mv.c:338 builtin/rm.c:430
 msgid "Unable to write new index file"
 msgstr "Tidak dapat menulis berkas indeks baru"
 
-#: apply.c:5021
+#: apply.c:5003
 msgid "don't apply changes matching the given path"
 msgstr "jangan terapkan perubahan yang cocok dengan jalur yang diberikan"
 
-#: apply.c:5024
+#: apply.c:5006
 msgid "apply changes matching the given path"
 msgstr "terapkan perubahan yang cocok dengan jalur yang diberikan"
 
-#: apply.c:5026 builtin/am.c:2376
+#: apply.c:5008 builtin/am.c:2379
 msgid "num"
 msgstr "jumlah"
 
-#: apply.c:5027
+#: apply.c:5009
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "hapus <jumlah> garis miring terkemuka dari jalur diff tradisional"
 
-#: apply.c:5030
+#: apply.c:5012
 msgid "ignore additions made by the patch"
 msgstr "abaikan penambahan yang dibuat oleh tambalan"
 
-#: apply.c:5032
+#: apply.c:5014
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "daripada menerapkan tambalan, keluarkan diffstat untuk masukan"
 
-#: apply.c:5036
+#: apply.c:5018
 msgid "show number of added and deleted lines in decimal notation"
 msgstr ""
 "perlihatkan jumlah baris yang ditambahkan dan dihapuskan dalam notasi desimal"
 
-#: apply.c:5038
+#: apply.c:5020
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "daripada menerapkan tambalan, keluarkan ringkasan untuk masukan"
 
-#: apply.c:5040
+#: apply.c:5022
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "daripada menerapkan tambalan, lihat jika tambalan bisa diterapkan"
 
-#: apply.c:5042
+#: apply.c:5024
 msgid "make sure the patch is applicable to the current index"
 msgstr "pastikan tambalan bisa diterapkan ke indeks saat ini"
 
-#: apply.c:5044
+#: apply.c:5026
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "tandai berkas baru dengan `git add --intent-to-add`"
 
-#: apply.c:5046
+#: apply.c:5028
 msgid "apply a patch without touching the working tree"
 msgstr "terapkan sebuah tambalan tanpa menyentuh pohon kerja"
 
-#: apply.c:5048
+#: apply.c:5030
 msgid "accept a patch that touches outside the working area"
 msgstr "terima sebuah tambalan yang menyentuh di luar area kerja"
 
-#: apply.c:5051
+#: apply.c:5033
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "juga terapkan tambalan (gunakan dengan --stat/--summary/--check)"
 
-#: apply.c:5053
+#: apply.c:5035
 msgid "attempt three-way merge, fall back on normal patch if that fails"
 msgstr "coba penggabungan tiga arah, mundur ke penambalan normal jika gagal"
 
-#: apply.c:5055
+#: apply.c:5037
 msgid "build a temporary index based on embedded index information"
 msgstr "bangun sebuah indeks sementara berdasarkan informasi indeks tertanam"
 
-#: apply.c:5058 builtin/checkout-index.c:196
+#: apply.c:5040 builtin/checkout-index.c:230
 msgid "paths are separated with NUL character"
 msgstr "jalur dipisahkan dengan karakter NUL"
 
-#: apply.c:5060
+#: apply.c:5042
 msgid "ensure at least <n> lines of context match"
 msgstr "pastikan setidaknya <n> baris dari konteks cocokan"
 
-#: apply.c:5061 builtin/am.c:2352 builtin/am.c:2355
+#: apply.c:5043 builtin/am.c:2355 builtin/am.c:2358
 #: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
-#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3960
-#: builtin/rebase.c:1051
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3983
+#: builtin/rebase.c:1079
 msgid "action"
 msgstr "aksi"
 
-#: apply.c:5062
+#: apply.c:5044
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "deteksi baris baru atau yang diubah yang ada kesalahan spasi putih"
 
-#: apply.c:5065 apply.c:5068
+#: apply.c:5047 apply.c:5050
 msgid "ignore changes in whitespace when finding context"
 msgstr "abaikan perubahan spasi putih ketika menemukan konteks"
 
-#: apply.c:5071
+#: apply.c:5053
 msgid "apply the patch in reverse"
 msgstr "terapkan tambalan terbalik"
 
-#: apply.c:5073
+#: apply.c:5055
 msgid "don't expect at least one line of context"
 msgstr "jangan harap setidaknya satu baris konteks"
 
-#: apply.c:5075
+#: apply.c:5057
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "tinggalkan bingkah yang ditolak pada berkas *.rej yang bersesuaian"
 
-#: apply.c:5077
+#: apply.c:5059
 msgid "allow overlapping hunks"
 msgstr "perbolehkan bingkah yang tumpang tindih"
 
-#: apply.c:5080
+#: apply.c:5062
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "tolerir baris baru hilang yang salah dideteksi pada akhir berkas"
 
-#: apply.c:5083
+#: apply.c:5065
 msgid "do not trust the line counts in the hunk headers"
 msgstr "jangan percaya hitungan baris pada kepala bingkah"
 
-#: apply.c:5085 builtin/am.c:2364
+#: apply.c:5067 builtin/am.c:2367
 msgid "root"
 msgstr "akar"
 
-#: apply.c:5086
+#: apply.c:5068
 msgid "prepend <root> to all filenames"
 msgstr "tambahkan <akar> di depan semua nama berkas"
 
-#: apply.c:5089
+#: apply.c:5071
 msgid "don't return error for empty patches"
 msgstr "jangan kembalikan kesalahan untuk tambalan kosong"
 
-#: archive-tar.c:125 archive-zip.c:345
+#: archive-tar.c:125 archive-zip.c:346
 #, c-format
 msgid "cannot stream blob %s"
 msgstr "tidak dapat mengaruskan blob %s"
 
-#: archive-tar.c:265 archive-zip.c:358
+#: archive-tar.c:265 archive-zip.c:359
 #, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
 msgstr "mode berkas tidak didukung: 0%o (SHA1: %s)"
@@ -1533,22 +1538,22 @@ msgstr "tidak dapat mengalihkan pendeskripsi"
 msgid "'%s' filter reported error"
 msgstr "saringan '%s' melaporkan kesalahan"
 
-#: archive-zip.c:318
+#: archive-zip.c:319
 #, c-format
 msgid "path is not valid UTF-8: %s"
 msgstr "jalur bukan UTF-8 valid: %s"
 
-#: archive-zip.c:322
+#: archive-zip.c:323
 #, c-format
 msgid "path too long (%d chars, SHA1: %s): %s"
 msgstr "jalur terlalu panjang (%d karakter, SHA1: %s): %s"
 
-#: archive-zip.c:469 builtin/pack-objects.c:365 builtin/pack-objects.c:368
+#: archive-zip.c:470 builtin/pack-objects.c:363 builtin/pack-objects.c:366
 #, c-format
 msgid "deflate error (%d)"
 msgstr "kesalahan deflasi (%d)"
 
-#: archive-zip.c:603
+#: archive-zip.c:604
 #, c-format
 msgid "timestamp too large for this system: %<PRIuMAX>"
 msgstr "stempel waktu terlalu besar untuk sistem ini: %<PRIuMAX>"
@@ -1557,10 +1562,6 @@ msgstr "stempel waktu terlalu besar untuk sistem ini: %<PRIuMAX>"
 msgid "git archive [<options>] <tree-ish> [<path>...]"
 msgstr "git archive [<opsi>] <mirip pohon> [<jalur>...]"
 
-#: archive.c:15
-msgid "git archive --list"
-msgstr "git archive --list"
-
 #: archive.c:16
 msgid ""
 "git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"
@@ -1573,12 +1574,12 @@ msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote <repo> [--exec <perintah>] --list"
 
 #: archive.c:188 archive.c:341 builtin/gc.c:497 builtin/notes.c:238
-#: builtin/tag.c:578
+#: builtin/tag.c:579
 #, c-format
 msgid "cannot read '%s'"
 msgstr "tidak dapat membaca '%s'"
 
-#: archive.c:426 builtin/add.c:215 builtin/add.c:671 builtin/rm.c:334
+#: archive.c:426 builtin/add.c:214 builtin/add.c:657 builtin/rm.c:334
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "spek jalur '%s' tidak cocok dengan berkas apapun"
@@ -1620,7 +1621,7 @@ msgstr "fmt"
 msgid "archive format"
 msgstr "format arsip"
 
-#: archive.c:552 builtin/log.c:1790
+#: archive.c:552 builtin/log.c:1809
 msgid "prefix"
 msgstr "prefiks"
 
@@ -1628,12 +1629,12 @@ msgstr "prefiks"
 msgid "prepend prefix to each pathname in the archive"
 msgstr "tambahkan prefiks di depan setiap nama jalur dalam arsip"
 
-#: archive.c:554 archive.c:557 builtin/blame.c:880 builtin/blame.c:884
-#: builtin/blame.c:885 builtin/commit-tree.c:115 builtin/config.c:135
+#: archive.c:554 archive.c:557 builtin/blame.c:881 builtin/blame.c:885
+#: builtin/blame.c:886 builtin/commit-tree.c:115 builtin/config.c:135
 #: builtin/fast-export.c:1181 builtin/fast-export.c:1183
-#: builtin/fast-export.c:1187 builtin/grep.c:935 builtin/hash-object.c:103
+#: builtin/fast-export.c:1187 builtin/grep.c:936 builtin/hash-object.c:104
 #: builtin/ls-files.c:654 builtin/ls-files.c:657 builtin/notes.c:410
-#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:190
+#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:195
 msgid "file"
 msgstr "berkas"
 
@@ -1661,8 +1662,8 @@ msgstr "setel level kompresi"
 msgid "list supported archive formats"
 msgstr "daftar format arsip yang didukung"
 
-#: archive.c:568 builtin/archive.c:89 builtin/clone.c:118 builtin/clone.c:121
-#: builtin/submodule--helper.c:1870 builtin/submodule--helper.c:2513
+#: archive.c:568 builtin/archive.c:89 builtin/clone.c:122 builtin/clone.c:125
+#: builtin/submodule--helper.c:1884 builtin/submodule--helper.c:2718
 msgid "repo"
 msgstr "repositori"
 
@@ -1683,11 +1684,12 @@ msgstr "jalur ke perintah git-upload-archive remote"
 msgid "Unexpected option --remote"
 msgstr "Opsi --remote tak diharapkan"
 
-#: archive.c:580 fetch-pack.c:300 revision.c:2887 builtin/add.c:544
-#: builtin/add.c:576 builtin/checkout.c:1763 builtin/commit.c:370
-#: builtin/fast-export.c:1230 builtin/index-pack.c:1848 builtin/log.c:2115
-#: builtin/reset.c:435 builtin/reset.c:493 builtin/rm.c:281
-#: builtin/stash.c:1719 builtin/worktree.c:508 http-fetch.c:144
+#: archive.c:580 fetch-pack.c:300 revision.c:2914 builtin/add.c:530
+#: builtin/add.c:562 builtin/checkout.c:1782 builtin/clone.c:1099
+#: builtin/clone.c:1102 builtin/commit.c:371 builtin/fast-export.c:1230
+#: builtin/index-pack.c:1854 builtin/log.c:2140 builtin/reset.c:442
+#: builtin/reset.c:500 builtin/rm.c:281 builtin/stash.c:1708
+#: builtin/worktree.c:580 builtin/worktree.c:781 http-fetch.c:144
 #: http-fetch.c:153
 #, c-format
 msgid "the option '%s' requires '%s'"
@@ -1707,17 +1709,17 @@ msgstr "Format arsip tidak dikenal '%s'"
 msgid "Argument not supported for format '%s': -%d"
 msgstr "Argumen tidak didukung untuk format '%s': -%d"
 
-#: attr.c:203
+#: attr.c:202
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr ""
 
-#: attr.c:364
+#: attr.c:363
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr ""
 
-#: attr.c:404
+#: attr.c:403
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1733,12 +1735,12 @@ msgstr "Kontent terkutip jelek dalam berkas '%s': %s"
 msgid "We cannot bisect more!\n"
 msgstr "Kami tidak dapat membagi dua lagi!\n"
 
-#: bisect.c:764
+#: bisect.c:765
 #, c-format
 msgid "Not a valid commit name %s"
 msgstr "Bukan sebuah nama komit yang valid %s"
 
-#: bisect.c:789
+#: bisect.c:790
 #, c-format
 msgid ""
 "The merge base %s is bad.\n"
@@ -1747,7 +1749,7 @@ msgstr ""
 "Dasar penggabungan %s jelek.\n"
 "Ini berarti bug telah diperbaiki antara %s dan [%s].\n"
 
-#: bisect.c:794
+#: bisect.c:795
 #, c-format
 msgid ""
 "The merge base %s is new.\n"
@@ -1756,7 +1758,7 @@ msgstr ""
 "Dasar penggabungan %s baru.\n"
 "Properti telah berubah antara %s dan [%s].\n"
 
-#: bisect.c:799
+#: bisect.c:800
 #, c-format
 msgid ""
 "The merge base %s is %s.\n"
@@ -1765,7 +1767,7 @@ msgstr ""
 "Dasar penggabungan %s adalah %s.\n"
 "Ini berarti komit '%s' pertama adalah di antara %s dan [%s].\n"
 
-#: bisect.c:807
+#: bisect.c:808
 #, c-format
 msgid ""
 "Some %s revs are not ancestors of the %s rev.\n"
@@ -1776,7 +1778,7 @@ msgstr ""
 "git bisect tidak dapat bekerja dengan benar pada kasus ini.\n"
 "Mungkin Anda salah mengira revisi %s dan %s?\n"
 
-#: bisect.c:820
+#: bisect.c:821
 #, c-format
 msgid ""
 "the merge base between %s and [%s] must be skipped.\n"
@@ -1787,36 +1789,36 @@ msgstr ""
 "Jadi kami tidak dapat yakin komit %s pertama di antara %s dan %s.\n"
 "Kami tetap lanjutkan."
 
-#: bisect.c:859
+#: bisect.c:860
 #, c-format
 msgid "Bisecting: a merge base must be tested\n"
 msgstr "Membagi dua: dasar penggabungan harus diuji\n"
 
-#: bisect.c:909
+#: bisect.c:910
 #, c-format
 msgid "a %s revision is needed"
 msgstr "sebuah revisi %s diperlukan"
 
-#: bisect.c:939
+#: bisect.c:940
 #, c-format
 msgid "could not create file '%s'"
 msgstr "tidak dapat membuat berkas '%s'"
 
-#: bisect.c:985 builtin/merge.c:155
+#: bisect.c:986 builtin/merge.c:155
 #, c-format
 msgid "could not read file '%s'"
 msgstr "tidak dapat membaca berkas '%s'"
 
-#: bisect.c:1025
+#: bisect.c:1026
 msgid "reading bisect refs failed"
 msgstr "gagal membaca berkas referensi bagi dua"
 
-#: bisect.c:1055
+#: bisect.c:1056
 #, c-format
 msgid "%s was both %s and %s\n"
 msgstr "%s sama-sama %s dan %s\n"
 
-#: bisect.c:1064
+#: bisect.c:1065
 #, c-format
 msgid ""
 "No testable commit found.\n"
@@ -1825,7 +1827,7 @@ msgstr ""
 "Tidak ada komit yang bisa diuji ditemukan.\n"
 "Mungkin Anda mulai dengan argumen jalur jelek?\n"
 
-#: bisect.c:1093
+#: bisect.c:1094
 #, c-format
 msgid "(roughly %d step)"
 msgid_plural "(roughly %d steps)"
@@ -1835,53 +1837,53 @@ msgstr[1] "(kira-kira %d langkah)"
 #. TRANSLATORS: the last %s will be replaced with "(roughly %d
 #. steps)" translation.
 #.
-#: bisect.c:1099
+#: bisect.c:1100
 #, c-format
 msgid "Bisecting: %d revision left to test after this %s\n"
 msgid_plural "Bisecting: %d revisions left to test after this %s\n"
 msgstr[0] "Membagi dua: %d revisi tersisa untuk diuji setelah ini %s\n"
 msgstr[1] "Membagi dua: %d revisi tersisa untuk diuji setelah ini %s\n"
 
-#: blame.c:2776
+#: blame.c:2773
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents dan --reverse tidak dapat dipadu dengan baik."
 
-#: blame.c:2790
+#: blame.c:2787
 msgid "cannot use --contents with final commit object name"
 msgstr "tidak dapat menggunakan --contents dengan nama objek komit final"
 
-#: blame.c:2811
+#: blame.c:2808
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "--reverse dan --first-parent bersama-sama butuh komit terbaru yang disebutkan"
 
-#: blame.c:2820 bundle.c:224 midx.c:1042 ref-filter.c:2370 remote.c:2158
-#: sequencer.c:2352 sequencer.c:4899 submodule.c:883 builtin/commit.c:1114
-#: builtin/log.c:429 builtin/log.c:1036 builtin/log.c:1644 builtin/log.c:2071
-#: builtin/log.c:2362 builtin/merge.c:431 builtin/pack-objects.c:3373
-#: builtin/pack-objects.c:3775 builtin/pack-objects.c:3790
+#: blame.c:2817 bundle.c:231 midx.c:1058 ref-filter.c:2371 remote.c:2157
+#: sequencer.c:2348 sequencer.c:4872 submodule.c:913 builtin/commit.c:1118
+#: builtin/log.c:437 builtin/log.c:1055 builtin/log.c:1663 builtin/log.c:2096
+#: builtin/log.c:2387 builtin/merge.c:431 builtin/pack-objects.c:3381
+#: builtin/pack-objects.c:3781 builtin/pack-objects.c:3796
 #: builtin/shortlog.c:255
 msgid "revision walk setup failed"
 msgstr "persiapan jalan revisi gagal"
 
-#: blame.c:2838
+#: blame.c:2835
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "--reverse --first-parent bersama-sama butuh rentang bersama rantai induk "
 "pertama"
 
-#: blame.c:2849
+#: blame.c:2846
 #, c-format
 msgid "no such path %s in %s"
 msgstr "tidak ada jalur seperti %s di %s"
 
-#: blame.c:2860
+#: blame.c:2857
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "tidak dapat membaca blob %s untuk jalur %s"
 
-#: branch.c:77
+#: branch.c:93
 msgid ""
 "cannot inherit upstream tracking configuration of multiple refs when "
 "rebasing is requested"
@@ -1889,31 +1891,31 @@ msgstr ""
 "tidak dapat mewariskan konfigurasi pelacakan hulu banyak referensi ketika "
 "pendasaran ulang diminta"
 
-#: branch.c:88
+#: branch.c:104
 #, c-format
 msgid "not setting branch '%s' as its own upstream"
 msgstr "tidak menyetel '%s' sebagai hulunya"
 
-#: branch.c:144
+#: branch.c:160
 #, c-format
 msgid "branch '%s' set up to track '%s' by rebasing."
 msgstr "cabang '%s' disiapkan untuk melacak '%s' oleh pendasaran ulang."
 
-#: branch.c:145
+#: branch.c:161
 #, c-format
 msgid "branch '%s' set up to track '%s'."
 msgstr "cabang '%s' disiapkan untuk melacak '%s'."
 
-#: branch.c:148
+#: branch.c:164
 #, c-format
 msgid "branch '%s' set up to track:"
 msgstr "cabang '%s' disiapkan untuk melacak:"
 
-#: branch.c:160
+#: branch.c:176
 msgid "unable to write upstream branch configuration"
 msgstr "tidak dapat menulis konfigurasi cabang hulu"
 
-#: branch.c:162
+#: branch.c:178
 msgid ""
 "\n"
 "After fixing the error cause you may try to fix up\n"
@@ -1923,52 +1925,82 @@ msgstr ""
 "Setelah memperbaiki penyebab kesalahan Anda dapat mencoba memperbaiki\n"
 "informasi pelacakan remote dengan menjalankan:"
 
-#: branch.c:203
+#: branch.c:219
 #, c-format
 msgid "asked to inherit tracking from '%s', but no remote is set"
 msgstr ""
 "diminta mewariskan pelacakan dari '%s', tetapi tidak ada remote yang disetel"
 
-#: branch.c:209
+#: branch.c:225
 #, c-format
 msgid "asked to inherit tracking from '%s', but no merge configuration is set"
 msgstr ""
 "diminta mewariskan pelacakan dari '%s', tetapi tidak ada konfigurasi "
 "penggabungan yang disetel"
 
-#: branch.c:252
+#: branch.c:277
+#, c-format
+msgid "not tracking: ambiguous information for ref '%s'"
+msgstr "tak melacak: informasi ambigu untuk referensi '%s'"
+
+#. TRANSLATORS: This is a line listing a remote with duplicate
+#. refspecs in the advice message below. For RTL languages you'll
+#. probably want to swap the "%s" and leading "  " space around.
+#.
+#. TRANSLATORS: This is line item of ambiguous object output
+#. from describe_ambiguous_object() above. For RTL languages
+#. you'll probably want to swap the "%s" and leading " " space
+#. around.
+#.
+#: branch.c:289 object-name.c:464
+#, c-format
+msgid "  %s\n"
+msgstr ""
+
+#. TRANSLATORS: The second argument is a \n-delimited list of
+#. duplicate refspecs, composed above.
+#.
+#: branch.c:295
 #, c-format
-msgid "not tracking: ambiguous information for ref %s"
-msgstr "tak melacak: informasi ambigu untuk referensi %s"
+msgid ""
+"There are multiple remotes whose fetch refspecs map to the remote\n"
+"tracking ref '%s':\n"
+"%s\n"
+"This is typically a configuration error.\n"
+"\n"
+"To support setting up tracking branches, ensure that\n"
+"different remotes' fetch refspecs map into different\n"
+"tracking namespaces."
+msgstr ""
 
-#: branch.c:287
+#: branch.c:344
 #, c-format
 msgid "'%s' is not a valid branch name"
 msgstr "'%s' bukan nama cabang valid"
 
-#: branch.c:307
+#: branch.c:364
 #, c-format
 msgid "a branch named '%s' already exists"
 msgstr "sebuah cabang bernama '%s' sudah ada"
 
-#: branch.c:313
+#: branch.c:370
 #, c-format
 msgid "cannot force update the branch '%s' checked out at '%s'"
 msgstr "tidak dapat memperbarui paksa cabang '%s' yang ter-check out pada '%s'"
 
-#: branch.c:336
+#: branch.c:393
 #, c-format
 msgid "cannot set up tracking information; starting point '%s' is not a branch"
 msgstr ""
 "tidak dapat menyiapkan informasi pelacakan; titik awal '%s' bukan sebuah "
 "cabang"
 
-#: branch.c:338
+#: branch.c:395
 #, c-format
 msgid "the requested upstream branch '%s' does not exist"
 msgstr "cabang hulu yang diminta '%s' tidak ada"
 
-#: branch.c:340
+#: branch.c:397
 msgid ""
 "\n"
 "If you are planning on basing your work on an upstream\n"
@@ -1980,126 +2012,145 @@ msgid ""
 "\"git push -u\" to set the upstream config as you push."
 msgstr ""
 
-#: branch.c:384 builtin/replace.c:321 builtin/replace.c:377
+#: branch.c:445 builtin/replace.c:321 builtin/replace.c:377
 #: builtin/replace.c:423 builtin/replace.c:453
 #, c-format
 msgid "not a valid object name: '%s'"
 msgstr "bukan nama objek valid: '%s'"
 
-#: branch.c:404
+#: branch.c:465
 #, c-format
 msgid "ambiguous object name: '%s'"
 msgstr "nama objek ambigu: '%s'"
 
-#: branch.c:409
+#: branch.c:470
 #, c-format
 msgid "not a valid branch point: '%s'"
 msgstr "bukan sebuah titik cabang valid: '%s'"
 
-#: branch.c:469
+#: branch.c:658
+#, c-format
+msgid "submodule '%s': unable to find submodule"
+msgstr "submodul '%s': tidak dapat menemukan submodul"
+
+#: branch.c:661
+#, c-format
+msgid ""
+"You may try updating the submodules using 'git checkout %s && git submodule "
+"update --init'"
+msgstr ""
+"Anda dapat mencoba memperbarui submodul dengan 'git checkout %s && git "
+"submodule update --init'"
+
+#: branch.c:672 branch.c:698
+#, c-format
+msgid "submodule '%s': cannot create branch '%s'"
+msgstr "submodul '%s': tidak dapat membuat cabang '%s'"
+
+#: branch.c:730
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr "'%s' sudah di-checkout pada '%s'"
 
-#: branch.c:494
+#: branch.c:755
 #, c-format
 msgid "HEAD of working tree %s is not updated"
 msgstr "HEAD dari pohon kerja %s tidak diperbarui"
 
-#: bundle.c:44
+#: bundle.c:45
 #, c-format
 msgid "unrecognized bundle hash algorithm: %s"
 msgstr "algoritma hash bundel tidak dikenal: %s"
 
-#: bundle.c:48
+#: bundle.c:53
 #, c-format
 msgid "unknown capability '%s'"
 msgstr "kapabilitas '%s' tidak dikenal"
 
-#: bundle.c:74
+#: bundle.c:79
 #, c-format
 msgid "'%s' does not look like a v2 or v3 bundle file"
 msgstr "'%s' tidak terlihat seperti berkas bundel v2 atau v3"
 
-#: bundle.c:113
+#: bundle.c:118
 #, c-format
 msgid "unrecognized header: %s%s (%d)"
 msgstr "kepala tidak dikenal: %s%s (%d)"
 
-#: bundle.c:140 rerere.c:464 rerere.c:674 sequencer.c:2620 sequencer.c:3406
-#: builtin/commit.c:862
+#: bundle.c:145 rerere.c:464 rerere.c:675 sequencer.c:2616 sequencer.c:3402
+#: builtin/commit.c:865
 #, c-format
 msgid "could not open '%s'"
 msgstr "tidak dapat membuka '%s'"
 
-#: bundle.c:198
+#: bundle.c:203
 msgid "Repository lacks these prerequisite commits:"
 msgstr "Repositori kekurangan komit prasyarat berikut:"
 
-#: bundle.c:201
+#: bundle.c:206
 msgid "need a repository to verify a bundle"
 msgstr "perlu sebuah repositori untuk verifikasi bundel"
 
-#: bundle.c:257
+#: bundle.c:264
 #, c-format
 msgid "The bundle contains this ref:"
-msgid_plural "The bundle contains these %d refs:"
+msgid_plural "The bundle contains these %<PRIuMAX> refs:"
 msgstr[0] "Bundel berisi referensi ini:"
-msgstr[1] "Bundel berisi %d referensi berikut:"
+msgstr[1] "Bundel berisi %<PRIuMAX> referensi berikut:"
 
-#: bundle.c:264
+#: bundle.c:272
 msgid "The bundle records a complete history."
 msgstr "Bundel merekam riwayat penuh."
 
-#: bundle.c:266
+#: bundle.c:274
 #, c-format
 msgid "The bundle requires this ref:"
-msgid_plural "The bundle requires these %d refs:"
+msgid_plural "The bundle requires these %<PRIuMAX> refs:"
 msgstr[0] "Bundel membutuhkan referensi ini:"
-msgstr[1] "Bundel membutuhkan %d referensi berikut:"
+msgstr[1] "Bundel membutuhkan %<PRIuMAX> referensi berikut:"
 
-#: bundle.c:333
+#: bundle.c:350
 msgid "unable to dup bundle descriptor"
 msgstr "tidak dapat men-dup pendeskripsi bundel"
 
-#: bundle.c:340
+#: bundle.c:357
 msgid "Could not spawn pack-objects"
 msgstr "Tidak dapat menghidupkan pack-objects"
 
-#: bundle.c:351
+#: bundle.c:368
 msgid "pack-objects died"
 msgstr "pack-objects mati"
 
-#: bundle.c:400
+#: bundle.c:417
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "referensi '%s' dikecualikan oleh opsi rev-list"
 
-#: bundle.c:504
+#: bundle.c:533 builtin/log.c:211 builtin/log.c:1975 builtin/shortlog.c:400
+#, c-format
+msgid "unrecognized argument: %s"
+msgstr "argumen tidak dikenal: %s"
+
+#: bundle.c:548
 #, c-format
 msgid "unsupported bundle version %d"
 msgstr "versi bundle %d tidak didukung"
 
-#: bundle.c:506
+#: bundle.c:550
 #, c-format
 msgid "cannot write bundle version %d with algorithm %s"
 msgstr "tidak dapat menulis versi bundel %d dengan algoritma %s"
 
-#: bundle.c:524 builtin/log.c:210 builtin/log.c:1953 builtin/shortlog.c:399
-#, c-format
-msgid "unrecognized argument: %s"
-msgstr "argumen tidak dikenal: %s"
-
-#: bundle.c:553
+#: bundle.c:600
 msgid "Refusing to create empty bundle."
 msgstr "Menolak memuat bundel kosong."
 
-#: bundle.c:563
+#: bundle.c:610
 #, c-format
 msgid "cannot create '%s'"
 msgstr "tidak dapat membuat '%s'"
 
-#: bundle.c:588
+#: bundle.c:639
 msgid "index-pack died"
 msgstr "index-pack mati"
 
@@ -2127,7 +2178,7 @@ msgstr ""
 msgid "invalid color value: %.*s"
 msgstr ""
 
-#: commit-graph.c:204 midx.c:51
+#: commit-graph.c:204 midx.c:52
 msgid "invalid hash version"
 msgstr ""
 
@@ -2155,234 +2206,235 @@ msgstr ""
 msgid "commit-graph file is too small to hold %u chunks"
 msgstr ""
 
-#: commit-graph.c:482
+#: commit-graph.c:485
 msgid "commit-graph has no base graphs chunk"
 msgstr ""
 
-#: commit-graph.c:492
+#: commit-graph.c:495
 msgid "commit-graph chain does not match"
 msgstr ""
 
-#: commit-graph.c:540
+#: commit-graph.c:543
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
 msgstr ""
 
-#: commit-graph.c:564
+#: commit-graph.c:567
 msgid "unable to find all commit-graph files"
 msgstr ""
 
-#: commit-graph.c:749 commit-graph.c:786
+#: commit-graph.c:752 commit-graph.c:789
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr ""
 
-#: commit-graph.c:770
+#: commit-graph.c:773
 #, c-format
 msgid "could not find commit %s"
 msgstr ""
 
-#: commit-graph.c:803
+#: commit-graph.c:806
 msgid "commit-graph requires overflow generation data but has none"
 msgstr ""
 
-#: commit-graph.c:1108 builtin/am.c:1369
+#: commit-graph.c:1111 builtin/am.c:1370 builtin/checkout.c:775
+#: builtin/clone.c:705
 #, c-format
 msgid "unable to parse commit %s"
 msgstr ""
 
-#: commit-graph.c:1370 builtin/pack-objects.c:3070
+#: commit-graph.c:1373 builtin/pack-objects.c:3078
 #, c-format
 msgid "unable to get type of object %s"
 msgstr ""
 
-#: commit-graph.c:1401
+#: commit-graph.c:1404
 msgid "Loading known commits in commit graph"
 msgstr ""
 
-#: commit-graph.c:1418
+#: commit-graph.c:1421
 msgid "Expanding reachable commits in commit graph"
 msgstr ""
 
-#: commit-graph.c:1438
+#: commit-graph.c:1441
 msgid "Clearing commit marks in commit graph"
 msgstr ""
 
-#: commit-graph.c:1457
+#: commit-graph.c:1460
 msgid "Computing commit graph topological levels"
 msgstr ""
 
-#: commit-graph.c:1510
+#: commit-graph.c:1513
 msgid "Computing commit graph generation numbers"
 msgstr ""
 
-#: commit-graph.c:1591
+#: commit-graph.c:1598
 msgid "Computing commit changed paths Bloom filters"
 msgstr ""
 
-#: commit-graph.c:1668
+#: commit-graph.c:1675
 msgid "Collecting referenced commits"
 msgstr ""
 
-#: commit-graph.c:1693
+#: commit-graph.c:1701
 #, c-format
-msgid "Finding commits for commit graph in %d pack"
-msgid_plural "Finding commits for commit graph in %d packs"
+msgid "Finding commits for commit graph in %<PRIuMAX> pack"
+msgid_plural "Finding commits for commit graph in %<PRIuMAX> packs"
 msgstr[0] ""
 msgstr[1] ""
 
-#: commit-graph.c:1706
+#: commit-graph.c:1714
 #, c-format
 msgid "error adding pack %s"
 msgstr ""
 
-#: commit-graph.c:1710
+#: commit-graph.c:1718
 #, c-format
 msgid "error opening index for %s"
 msgstr ""
 
-#: commit-graph.c:1747
+#: commit-graph.c:1756
 msgid "Finding commits for commit graph among packed objects"
 msgstr ""
 
-#: commit-graph.c:1765
+#: commit-graph.c:1774
 msgid "Finding extra edges in commit graph"
 msgstr ""
 
-#: commit-graph.c:1814
+#: commit-graph.c:1823
 msgid "failed to write correct number of base graph ids"
 msgstr ""
 
-#: commit-graph.c:1845 midx.c:1149
+#: commit-graph.c:1854 midx.c:1168 builtin/sparse-checkout.c:475
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr ""
 
-#: commit-graph.c:1858
+#: commit-graph.c:1868
 msgid "unable to create temporary graph layer"
 msgstr ""
 
-#: commit-graph.c:1863
+#: commit-graph.c:1873
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr ""
 
-#: commit-graph.c:1920
+#: commit-graph.c:1930
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] ""
 msgstr[1] ""
 
-#: commit-graph.c:1956
+#: commit-graph.c:1967
 msgid "unable to open commit-graph chain file"
 msgstr ""
 
-#: commit-graph.c:1972
+#: commit-graph.c:1983
 msgid "failed to rename base commit-graph file"
 msgstr ""
 
-#: commit-graph.c:1992
+#: commit-graph.c:2004
 msgid "failed to rename temporary commit-graph file"
 msgstr ""
 
-#: commit-graph.c:2125
+#: commit-graph.c:2137
 msgid "Scanning merged commits"
 msgstr ""
 
-#: commit-graph.c:2169
+#: commit-graph.c:2181
 msgid "Merging commit-graph"
 msgstr ""
 
-#: commit-graph.c:2277
+#: commit-graph.c:2289
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr ""
 
-#: commit-graph.c:2384
+#: commit-graph.c:2396
 msgid "too many commits to write graph"
 msgstr ""
 
-#: commit-graph.c:2482
+#: commit-graph.c:2494
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 
-#: commit-graph.c:2492
+#: commit-graph.c:2504
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr ""
 
-#: commit-graph.c:2502 commit-graph.c:2517
+#: commit-graph.c:2514 commit-graph.c:2529
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr ""
 
-#: commit-graph.c:2509
+#: commit-graph.c:2521
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr ""
 
-#: commit-graph.c:2527
+#: commit-graph.c:2539
 msgid "Verifying commits in commit graph"
 msgstr ""
 
-#: commit-graph.c:2542
+#: commit-graph.c:2554
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 
-#: commit-graph.c:2549
+#: commit-graph.c:2561
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
 
-#: commit-graph.c:2559
+#: commit-graph.c:2571
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr ""
 
-#: commit-graph.c:2568
+#: commit-graph.c:2580
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr ""
 
-#: commit-graph.c:2582
+#: commit-graph.c:2594
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr ""
 
-#: commit-graph.c:2587
+#: commit-graph.c:2599
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
 msgstr ""
 
-#: commit-graph.c:2591
+#: commit-graph.c:2603
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
 msgstr ""
 
-#: commit-graph.c:2608
+#: commit-graph.c:2620
 #, c-format
 msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
 msgstr ""
 
-#: commit-graph.c:2614
+#: commit-graph.c:2626
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
 
-#: commit.c:53 sequencer.c:3109 builtin/am.c:399 builtin/am.c:444
-#: builtin/am.c:449 builtin/am.c:1448 builtin/am.c:2123 builtin/replace.c:456
+#: commit.c:54 sequencer.c:3105 builtin/am.c:400 builtin/am.c:445
+#: builtin/am.c:450 builtin/am.c:1449 builtin/am.c:2124 builtin/replace.c:456
 #, c-format
 msgid "could not parse %s"
 msgstr ""
 
-#: commit.c:55
+#: commit.c:56
 #, c-format
 msgid "%s %s is not a commit!"
 msgstr ""
 
-#: commit.c:196
+#: commit.c:197
 msgid ""
 "Support for <GIT_DIR>/info/grafts is deprecated\n"
 "and will be removed in a future Git version.\n"
@@ -2394,27 +2446,27 @@ msgid ""
 "\"git config advice.graftFileDeprecated false\""
 msgstr ""
 
-#: commit.c:1241
+#: commit.c:1252
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr ""
 
-#: commit.c:1245
+#: commit.c:1256
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr ""
 
-#: commit.c:1248
+#: commit.c:1259
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr ""
 
-#: commit.c:1251
+#: commit.c:1262
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr ""
 
-#: commit.c:1505
+#: commit.c:1516
 msgid ""
 "Warning: commit message did not conform to UTF-8.\n"
 "You may want to amend it after fixing the message, or set the config\n"
@@ -2425,7 +2477,15 @@ msgstr ""
 msgid "memory exhausted"
 msgstr ""
 
-#: config.c:125
+#: compat/terminal.c:167
+msgid "cannot resume in the background, please use 'fg' to resume"
+msgstr ""
+
+#: compat/terminal.c:168
+msgid "cannot restore terminal settings"
+msgstr ""
+
+#: config.c:143
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2440,343 +2500,370 @@ msgstr ""
 "\t%s\n"
 "Ini mungkin disebabkan oleh include sirkular."
 
-#: config.c:141
+#: config.c:159
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "tidak dapat menjabarkan jalur include '%s'"
 
-#: config.c:152
+#: config.c:170
 msgid "relative config includes must come from files"
 msgstr "include konfigurasi relatif harus dari berkas"
 
-#: config.c:201
+#: config.c:219
 msgid "relative config include conditionals must come from files"
 msgstr "kondisional include konfigurasi relative harus dari berkas"
 
-#: config.c:398
+#: config.c:364
+msgid ""
+"remote URLs cannot be configured in file directly or indirectly included by "
+"includeIf.hasconfig:remote.*.url"
+msgstr ""
+"URL remote tidak dapat dikonfigurasikan langsung di dalam berkas maupun "
+"dimasukkan secara tidak langsung oleh includeIf.hasconfig:remote.*.url"
+
+#: config.c:508
 #, c-format
 msgid "invalid config format: %s"
 msgstr "format konfigurasi tidak valid: %s"
 
-#: config.c:402
+#: config.c:512
 #, c-format
 msgid "missing environment variable name for configuration '%.*s'"
 msgstr "nama variabel lingkungan untuk konfigurasi hilang '%.*s'"
 
-#: config.c:407
+#: config.c:517
 #, c-format
 msgid "missing environment variable '%s' for configuration '%.*s'"
 msgstr "variabel lingkungan '%s' untuk konfigurasi '%.*s'"
 
-#: config.c:443
+#: config.c:553
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "kunci tidak berisi bagian: %s"
 
-#: config.c:448
+#: config.c:558
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr "kunci tidak berisi nama variabel: %s"
 
-#: config.c:470 sequencer.c:2806
+#: config.c:580 sequencer.c:2802
 #, c-format
 msgid "invalid key: %s"
 msgstr "kunci tidak valid: %s"
 
-#: config.c:475
+#: config.c:585
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "kunci tidak valid (barisbaru): %s"
 
-#: config.c:495
+#: config.c:605
 msgid "empty config key"
 msgstr "kunci konfigurasi kosong"
 
-#: config.c:513 config.c:525
+#: config.c:623 config.c:635
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "parameter konfigurasi gadungan: %s"
 
-#: config.c:539 config.c:556 config.c:563 config.c:572
+#: config.c:649 config.c:666 config.c:673 config.c:682
 #, c-format
 msgid "bogus format in %s"
 msgstr "format gadungan dalam %s"
 
-#: config.c:606
+#: config.c:716
 #, c-format
 msgid "bogus count in %s"
 msgstr "hitungan gadungan dalam %s"
 
-#: config.c:610
+#: config.c:720
 #, c-format
 msgid "too many entries in %s"
 msgstr "terlalu banyak entri di %s"
 
-#: config.c:620
+#: config.c:730
 #, c-format
 msgid "missing config key %s"
 msgstr "kunci konfigurasi %s hilang"
 
-#: config.c:628
+#: config.c:738
 #, c-format
 msgid "missing config value %s"
 msgstr "nilai konfigurasi %s hilang"
 
-#: config.c:979
+#: config.c:1089
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "baris konfigurasi %d jelek dalam blob %s"
 
-#: config.c:983
+#: config.c:1093
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "baris konfigurasi %d jelek dalam berkas %s"
 
-#: config.c:987
+#: config.c:1097
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "baris konfigurasi %d jelek pada masukan standar"
 
-#: config.c:991
+#: config.c:1101
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "baris konfigurasi %d jelek dalam blob submodul %s"
 
-#: config.c:995
+#: config.c:1105
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "baris konfigurasi %d jelek pada baris perintah %s"
 
-#: config.c:999
+#: config.c:1109
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "baris konfigurasi %d jelek dalam %s"
 
-#: config.c:1136
+#: config.c:1246
 msgid "out of range"
 msgstr "di luar rentang"
 
-#: config.c:1136
+#: config.c:1246
 msgid "invalid unit"
 msgstr "satuan tidak valid"
 
-#: config.c:1137
+#: config.c:1247
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "nilai konfigurasi numerik '%s' jelek untuk '%s': %s"
 
-#: config.c:1147
+#: config.c:1257
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr "nilai konfigurasi numerik '%s' jelek untuk '%s' dalam blob %s: %s"
 
-#: config.c:1150
+#: config.c:1260
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr "nilai konfigurasi numerik '%s' jelek untuk '%s' dalam berkas %s: %s"
 
-#: config.c:1153
+#: config.c:1263
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr ""
 "nilai konfigurasi numerik '%s' jelek untuk '%s' pada masukan standar: %s"
 
-#: config.c:1156
+#: config.c:1266
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr ""
 "nilai konfigurasi numerik '%s' jelek untuk '%s' dalam blob submodul %s: %s"
 
-#: config.c:1159
+#: config.c:1269
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr ""
 "nilai konfigurasi numerik '%s' jelek untuk '%s' pada baris perintah %s: %s"
 
-#: config.c:1162
+#: config.c:1272
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr "nilai konfigurasi numerik '%s' jelek untuk '%s' dalam %s: %s"
 
-#: config.c:1241
+#: config.c:1368
+#, c-format
+msgid "invalid value for variable %s"
+msgstr "nilai tidak valid untuk variabel %s"
+
+#: config.c:1389
+#, c-format
+msgid "ignoring unknown core.fsync component '%s'"
+msgstr "mengabaikan komponen core.fsync tidak dikenal '%s'"
+
+#: config.c:1425
 #, c-format
 msgid "bad boolean config value '%s' for '%s'"
 msgstr "nilai konfigurasi boolean '%s' jelek untuk '%s'"
 
-#: config.c:1259
+#: config.c:1443
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "gagal menjabarkan direktori pengguna di: '%s'"
 
-#: config.c:1268
+#: config.c:1452
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "'%s' untuk '%s' bukan stempel waktu valid"
 
-#: config.c:1361
+#: config.c:1545
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "panjang singkatan di luar rentang: %d"
 
-#: config.c:1375 config.c:1386
+#: config.c:1559 config.c:1570
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "level kompresi zlib jelek %d"
 
-#: config.c:1476
+#: config.c:1660
 msgid "core.commentChar should only be one character"
 msgstr "core.commentChar harusnya hanya satu karakter"
 
-#: config.c:1509
+#: config.c:1692
+#, c-format
+msgid "ignoring unknown core.fsyncMethod value '%s'"
+msgstr "mengabaikan nilai core.fsyncMethod tidak dikenal '%s'"
+
+#: config.c:1698
+msgid "core.fsyncObjectFiles is deprecated; use core.fsync instead"
+msgstr "core.fsyncObjectFiles usang; gunakan core.fsync sebagai gantinya"
+
+#: config.c:1714
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "mode tidak valid untuk pembuatan objek: %s"
 
-#: config.c:1584
+#: config.c:1800
 #, c-format
 msgid "malformed value for %s"
 msgstr "nilai rusak untuk %s"
 
-#: config.c:1610
+#: config.c:1826
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "nilai rusak untuk %s: %s"
 
-#: config.c:1611
+#: config.c:1827
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr "harus salah satu dari nothing, matching, simple, upstream atau current"
 
-#: config.c:1672 builtin/pack-objects.c:4053
+#: config.c:1888 builtin/pack-objects.c:4078
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "level kompresi pak jelek %d"
 
-#: config.c:1795
+#: config.c:2014
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "tidak dapat memuat objek blob konfigurasi '%s'"
 
-#: config.c:1798
+#: config.c:2017
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "referensi '%s' tidak menunjuk pada sebuah blob"
 
-#: config.c:1816
+#: config.c:2035
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "tidak dapat menguraikan blob konfigurasi '%s'"
 
-#: config.c:1861
+#: config.c:2080
 #, c-format
 msgid "failed to parse %s"
 msgstr "gagal menguraikan %s"
 
-#: config.c:1917
+#: config.c:2136
 msgid "unable to parse command-line config"
 msgstr "gagal menguraikan konfigurasi baris perintah"
 
-#: config.c:2285
+#: config.c:2512
 msgid "unknown error occurred while reading the configuration files"
 msgstr "error tidak diketahui ketika membaca berkas konfigurasi"
 
-#: config.c:2459
+#: config.c:2686
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "%s tidak valid: '%s'"
 
-#: config.c:2504
+#: config.c:2731
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr "nilai splitIndex.maxPercentChange '%d' harusnya diantara 0 dan 100"
 
-#: config.c:2550
+#: config.c:2763
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "tidak dapat menguraikan '%s' dari konfigurasi baris perintah"
 
-#: config.c:2552
+#: config.c:2765
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "variabel konfigurasi '%s' jelek dalam berkas '%s' pada baris %d"
 
-#: config.c:2637
+#: config.c:2850
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "nama bagian '%s' tidak valid"
 
-#: config.c:2669
+#: config.c:2882
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s punya banyak nilai"
 
-#: config.c:2698
+#: config.c:2911
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "gagal menulis berkas konfigurasi baru %s"
 
-#: config.c:2950 config.c:3277
+#: config.c:3177 config.c:3518
 #, c-format
 msgid "could not lock config file %s"
 msgstr "tidak dapat mengunci berkas konfigurasi %s"
 
-#: config.c:2961
+#: config.c:3188
 #, c-format
 msgid "opening %s"
 msgstr "membuka %s"
 
-#: config.c:2998 builtin/config.c:361
+#: config.c:3225 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "pola tidak valid: %s"
 
-#: config.c:3023
+#: config.c:3250
 #, c-format
 msgid "invalid config file %s"
 msgstr "berkas konfigurasi %s tidak valid"
 
-#: config.c:3036 config.c:3290
+#: config.c:3263 config.c:3531
 #, c-format
 msgid "fstat on %s failed"
 msgstr "fstat pada %s gagal"
 
-#: config.c:3047
+#: config.c:3274
 #, c-format
 msgid "unable to mmap '%s'%s"
 msgstr "tidak dapat me-mmap '%s'%s"
 
-#: config.c:3057 config.c:3295
+#: config.c:3284 config.c:3536
 #, c-format
 msgid "chmod on %s failed"
 msgstr "chmod pada %s gagal"
 
-#: config.c:3142 config.c:3392
+#: config.c:3369 config.c:3633
 #, c-format
 msgid "could not write config file %s"
 msgstr "tidak dapat menulis berkas konfigurasi %s"
 
-#: config.c:3176
+#: config.c:3403
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "tidak dapat menyetel '%s' ke '%s'"
 
-#: config.c:3178 builtin/remote.c:662 builtin/remote.c:860 builtin/remote.c:868
+#: config.c:3405 builtin/remote.c:666 builtin/remote.c:885 builtin/remote.c:893
 #, c-format
 msgid "could not unset '%s'"
 msgstr "tidak dapat mem-batal setel '%s'"
 
-#: config.c:3268
+#: config.c:3509
 #, c-format
 msgid "invalid section name: %s"
 msgstr "nama bagian tidak valid: %s"
 
-#: config.c:3435
+#: config.c:3676
 #, c-format
 msgid "missing value for '%s'"
 msgstr "nilai hilang untuk '%s'"
 
 #: connect.c:61
 msgid "the remote end hung up upon initial contact"
-msgstr ""
+msgstr "remote berakhir menggantung saat kontak pertama"
 
 #: connect.c:63
 msgid ""
@@ -2785,84 +2872,87 @@ msgid ""
 "Please make sure you have the correct access rights\n"
 "and the repository exists."
 msgstr ""
+"Tidak dapat membaca dari repositori remote.\n"
+"\n"
+"Mohon pastikan Anda punya hak akses yang benar dan repositori ada."
 
 #: connect.c:81
 #, c-format
 msgid "server doesn't support '%s'"
-msgstr ""
+msgstr "peladen tidak mendukung '%s'"
 
 #: connect.c:118
 #, c-format
 msgid "server doesn't support feature '%s'"
-msgstr ""
+msgstr "peladen tidak mendukung fitur '%s'"
 
 #: connect.c:129
 msgid "expected flush after capabilities"
-msgstr ""
+msgstr "bilasan diharapkan setelah kemampuan"
 
 #: connect.c:265
 #, c-format
 msgid "ignoring capabilities after first line '%s'"
-msgstr ""
+msgstr "mengabaikan kemampuan setelah baris pertama '%s'"
 
 #: connect.c:286
 msgid "protocol error: unexpected capabilities^{}"
-msgstr ""
+msgstr "kesalahan protokol: capabilities^{} tidak diharapkan"
 
 #: connect.c:308
 #, c-format
 msgid "protocol error: expected shallow sha-1, got '%s'"
-msgstr ""
+msgstr "kesalahan protokol: sha-1 dangkal diharapkan, dapat '%s'"
 
 #: connect.c:310
 msgid "repository on the other end cannot be shallow"
-msgstr ""
+msgstr "repositori pada ujung lainnya tidak boleh dangkal"
 
 #: connect.c:349
 msgid "invalid packet"
-msgstr ""
+msgstr "paket tidak valid"
 
 #: connect.c:369
 #, c-format
 msgid "protocol error: unexpected '%s'"
-msgstr ""
+msgstr "kesalahan protokol: '%s' tidak diharapkan"
 
 #: connect.c:499
 #, c-format
 msgid "unknown object format '%s' specified by server"
-msgstr ""
+msgstr "format objek tidak dikenal '%s' disebutkan oleh peladen"
 
 #: connect.c:528
 #, c-format
 msgid "invalid ls-refs response: %s"
-msgstr ""
+msgstr "jawaban ls-refs tidak valid: %s"
 
 #: connect.c:532
 msgid "expected flush after ref listing"
-msgstr ""
+msgstr "bilasan diharapkan setelah penyebutan referensi"
 
 #: connect.c:535
 msgid "expected response end packet after ref listing"
-msgstr ""
+msgstr "jawaban akhir paket diharapkan setelah penyebutan referensi"
 
 #: connect.c:670
 #, c-format
 msgid "protocol '%s' is not supported"
-msgstr ""
+msgstr "protokol '%s' tidak didukung"
 
 #: connect.c:721
 msgid "unable to set SO_KEEPALIVE on socket"
-msgstr ""
+msgstr "tidak dapat menyetel SO_KEEPALIVE pada soket"
 
 #: connect.c:761 connect.c:824
 #, c-format
 msgid "Looking up %s ... "
-msgstr ""
+msgstr "Mencari %s ... "
 
 #: connect.c:765
 #, c-format
 msgid "unable to look up %s (port %s) (%s)"
-msgstr ""
+msgstr "tidak dapat mencari %s (port %s) (%s)"
 
 #. TRANSLATORS: this is the end of "Looking up %s ... "
 #: connect.c:769 connect.c:840
@@ -2871,6 +2961,8 @@ msgid ""
 "done.\n"
 "Connecting to %s (port %s) ... "
 msgstr ""
+"selesai.\n"
+"Menghubungkan ke %s (port %s) ... "
 
 #: connect.c:791 connect.c:868
 #, c-format
@@ -2878,81 +2970,85 @@ msgid ""
 "unable to connect to %s:\n"
 "%s"
 msgstr ""
+"tidak dapat menghubungkan ke %s:\n"
+"%s"
 
 #. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
 #: connect.c:797 connect.c:874
 msgid "done."
-msgstr ""
+msgstr "selesai."
 
 #: connect.c:828
 #, c-format
 msgid "unable to look up %s (%s)"
-msgstr ""
+msgstr "tidak dapat mencari %s (%s)"
 
 #: connect.c:834
 #, c-format
 msgid "unknown port %s"
-msgstr ""
+msgstr "port tidak dikenal %s"
 
 #: connect.c:971 connect.c:1303
 #, c-format
 msgid "strange hostname '%s' blocked"
-msgstr ""
+msgstr "nama host aneh '%s' diblokir"
 
 #: connect.c:973
 #, c-format
 msgid "strange port '%s' blocked"
-msgstr ""
+msgstr "port aneh '%s' diblokir"
 
 #: connect.c:983
 #, c-format
 msgid "cannot start proxy %s"
-msgstr ""
+msgstr "tidak dapat memulai proksi %s"
 
 #: connect.c:1054
 msgid "no path specified; see 'git help pull' for valid url syntax"
 msgstr ""
+"tidak ada jalur yang disebutkan; lihat 'git help pull' untuk sintaks url "
+"yang valid"
 
 #: connect.c:1194
 msgid "newline is forbidden in git:// hosts and repo paths"
-msgstr ""
+msgstr "baris baru dilarang di host git:// dan jalur repositori"
 
 #: connect.c:1251
 msgid "ssh variant 'simple' does not support -4"
-msgstr ""
+msgstr "varian ssh 'simple' tidak mendukung -4"
 
 #: connect.c:1263
 msgid "ssh variant 'simple' does not support -6"
-msgstr ""
+msgstr "varian ssh 'simple' tidak mendukung -6"
 
 #: connect.c:1280
 msgid "ssh variant 'simple' does not support setting port"
-msgstr ""
+msgstr "varian ssh 'simple' tidak mendukung penyetelan port"
 
 #: connect.c:1392
 #, c-format
 msgid "strange pathname '%s' blocked"
-msgstr ""
+msgstr "nama jalur aneh '%s' diblokir"
 
 #: connect.c:1440
 msgid "unable to fork"
-msgstr ""
+msgstr "tidak dapat menggarpu"
 
 #: connected.c:109 builtin/fsck.c:189 builtin/prune.c:57
 msgid "Checking connectivity"
-msgstr ""
+msgstr "Memeriksa konektivitas"
 
 #: connected.c:122
 msgid "Could not run 'git rev-list'"
-msgstr ""
+msgstr "Tidak dapat menjalankan 'git rev-list'"
 
 #: connected.c:146
 msgid "failed write to rev-list"
-msgstr ""
+msgstr "gagal menulis ke rev-list"
 
 #: connected.c:151
 msgid "failed to close rev-list's stdin"
-msgstr ""
+msgstr "gagal menutup masukan standar rev-list"
 
 #: convert.c:183
 #, c-format
@@ -3084,88 +3180,88 @@ msgstr ""
 msgid "refusing to work with credential missing protocol field"
 msgstr ""
 
-#: credential.c:395
+#: credential.c:396
 #, c-format
 msgid "url contains a newline in its %s component: %s"
 msgstr ""
 
-#: credential.c:439
+#: credential.c:440
 #, c-format
 msgid "url has no scheme: %s"
 msgstr ""
 
-#: credential.c:512
+#: credential.c:513
 #, c-format
 msgid "credential url cannot be parsed: %s"
 msgstr ""
 
-#: date.c:138
+#: date.c:139
 msgid "in the future"
-msgstr ""
+msgstr "di masa depan"
 
-#: date.c:144
+#: date.c:145
 #, c-format
 msgid "%<PRIuMAX> second ago"
 msgid_plural "%<PRIuMAX> seconds ago"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%<PRIuMAX> detik yang lalu"
+msgstr[1] "%<PRIuMAX> detik yang lalu"
 
-#: date.c:151
+#: date.c:152
 #, c-format
 msgid "%<PRIuMAX> minute ago"
 msgid_plural "%<PRIuMAX> minutes ago"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%<PRIuMAX> menit yang lalu"
+msgstr[1] "%<PRIuMAX> menit yang lalu"
 
-#: date.c:158
+#: date.c:159
 #, c-format
 msgid "%<PRIuMAX> hour ago"
 msgid_plural "%<PRIuMAX> hours ago"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%<PRIuMAX> jam yang lalu"
+msgstr[1] "%<PRIuMAX> jam yang lalu"
 
-#: date.c:165
+#: date.c:166
 #, c-format
 msgid "%<PRIuMAX> day ago"
 msgid_plural "%<PRIuMAX> days ago"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%<PRIuMAX> hari yang lalu"
+msgstr[1] "%<PRIuMAX> hari yang lalu"
 
-#: date.c:171
+#: date.c:172
 #, c-format
 msgid "%<PRIuMAX> week ago"
 msgid_plural "%<PRIuMAX> weeks ago"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%<PRIuMAX> minggu yang lalu"
+msgstr[1] "%<PRIuMAX> minggu yang lalu"
 
-#: date.c:178
+#: date.c:179
 #, c-format
 msgid "%<PRIuMAX> month ago"
 msgid_plural "%<PRIuMAX> months ago"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%<PRIuMAX> bulan yang lalu"
+msgstr[1] "%<PRIuMAX> bulan yang lalu"
 
-#: date.c:189
+#: date.c:190
 #, c-format
 msgid "%<PRIuMAX> year"
 msgid_plural "%<PRIuMAX> years"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%<PRIuMAX> tahun"
+msgstr[1] "%<PRIuMAX> tahun"
 
 #. TRANSLATORS: "%s" is "<n> years"
-#: date.c:192
+#: date.c:193
 #, c-format
 msgid "%s, %<PRIuMAX> month ago"
 msgid_plural "%s, %<PRIuMAX> months ago"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%s, %<PRIuMAX> bulan yang lalu"
+msgstr[1] "%s, %<PRIuMAX> bulan yang lalu"
 
-#: date.c:197 date.c:202
+#: date.c:198 date.c:203
 #, c-format
 msgid "%<PRIuMAX> year ago"
 msgid_plural "%<PRIuMAX> years ago"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%<PRIuMAX> tahun yang lalu"
+msgstr[1] "%<PRIuMAX> tahun yang lalu"
 
 #: delta-islands.c:272
 msgid "Propagating island marks"
@@ -3191,9 +3287,13 @@ msgstr ""
 msgid "Marked %d islands, done.\n"
 msgstr ""
 
-#: diff-merges.c:70
+#: diff-merges.c:81 gpg-interface.c:719 gpg-interface.c:734 ls-refs.c:37
+#: parallel-checkout.c:42 sequencer.c:2805 setup.c:563 builtin/am.c:203
+#: builtin/am.c:2243 builtin/am.c:2287 builtin/blame.c:724 builtin/blame.c:742
+#: builtin/fetch.c:792 builtin/pack-objects.c:3515 builtin/pull.c:45
+#: builtin/pull.c:47 builtin/pull.c:321
 #, c-format
-msgid "unknown value for --diff-merges: %s"
+msgid "invalid value for '%s': '%s'"
 msgstr ""
 
 #: diff-lib.c:561
@@ -3226,17 +3326,17 @@ msgid ""
 "tree"
 msgstr ""
 
-#: diff.c:158
+#: diff.c:159
 #, c-format
 msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
 msgstr "  Gagal mengurai persentase potongan dirstat '%s'\n"
 
-#: diff.c:163
+#: diff.c:164
 #, c-format
 msgid "  Unknown dirstat parameter '%s'\n"
 msgstr "  Parameter dirstat tidak ditketahui '%s'\n"
 
-#: diff.c:299
+#: diff.c:300
 msgid ""
 "color moved setting must be one of 'no', 'default', 'blocks', 'zebra', "
 "'dimmed-zebra', 'plain'"
@@ -3244,7 +3344,7 @@ msgstr ""
 "Setelan warna berpindah harus salah satu dari 'no', 'default', 'blocks', "
 "'dimmed-zebra', 'plain'"
 
-#: diff.c:327
+#: diff.c:328
 #, c-format
 msgid ""
 "unknown color-moved-ws mode '%s', possible values are 'ignore-space-change', "
@@ -3254,7 +3354,7 @@ msgstr ""
 "space-change', 'ignore-space-at-eol', 'ignore-all-space', 'allow-indentation-"
 "change'"
 
-#: diff.c:335
+#: diff.c:336
 msgid ""
 "color-moved-ws: allow-indentation-change cannot be combined with other "
 "whitespace modes"
@@ -3262,12 +3362,12 @@ msgstr ""
 "color-moved-ws: allow-indentation-change tidak dapat digabungkan dengan mode "
 "spasi yang lainnya"
 
-#: diff.c:412
+#: diff.c:413
 #, c-format
 msgid "Unknown value for 'diff.submodule' config variable: '%s'"
 msgstr "Nilai tidak dikenal untuk variabel konfigurasi 'diff.submodule': '%s'"
 
-#: diff.c:472
+#: diff.c:473
 #, c-format
 msgid ""
 "Found errors in 'diff.dirstat' config variable:\n"
@@ -3276,28 +3376,28 @@ msgstr ""
 "Ditemukan error dalam variable konfigurasi 'diff.dirstat':\n"
 "%s"
 
-#: diff.c:4237
+#: diff.c:4282
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "diff eksternal mati, berhenti pada %s"
 
-#: diff.c:4589
+#: diff.c:4677 parse-options.c:1114
 #, c-format
 msgid "options '%s', '%s', '%s', and '%s' cannot be used together"
 msgstr "Opsi '%s', '%s', '%s', dan '%s' tidak dapat digunakan bersamaan"
 
-#: diff.c:4593 builtin/difftool.c:736 builtin/log.c:1982 builtin/worktree.c:506
+#: diff.c:4681 parse-options.c:1118 builtin/worktree.c:578
 #, c-format
 msgid "options '%s', '%s', and '%s' cannot be used together"
 msgstr "Opsi '%s', '%s', dan '%s' tidak dapat digunakan bersamaan"
 
-#: diff.c:4597
+#: diff.c:4685
 #, c-format
 msgid "options '%s' and '%s' cannot be used together, use '%s' with '%s'"
 msgstr ""
 "opsi '%s' dan '%s' tidak dapat digunakan bersamaan, gunakan '%s' dengan '%s'"
 
-#: diff.c:4601
+#: diff.c:4689
 #, c-format
 msgid ""
 "options '%s' and '%s' cannot be used together, use '%s' with '%s' and '%s'"
@@ -3305,22 +3405,22 @@ msgstr ""
 "opsi '%s' dan '%s' tidak dapat digunakan bersamaan, gunakan '%s' dengan '%s' "
 "dan '%s'"
 
-#: diff.c:4681
+#: diff.c:4769
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow butuh tepatnya satu spek jalur"
 
-#: diff.c:4729
+#: diff.c:4823
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "nilai --stat tidak valid: %s"
 
-#: diff.c:4734 diff.c:4739 diff.c:4744 diff.c:4749 diff.c:5277
+#: diff.c:4828 diff.c:4833 diff.c:4838 diff.c:4843 diff.c:5319
 #: parse-options.c:217 parse-options.c:221
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s harap nilai numerik"
 
-#: diff.c:4766
+#: diff.c:4860
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3329,42 +3429,42 @@ msgstr ""
 "Gagal menguraikan parameter opsi --dirstat/-X:\n"
 "%s"
 
-#: diff.c:4851
+#: diff.c:4893
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "kelas perubahan '%c' tidak dikenal dalam --diff-filter=%s"
 
-#: diff.c:4875
+#: diff.c:4917
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "nilai tidak dikenal setelah ws-error-highlight=%.*s"
 
-#: diff.c:4889
+#: diff.c:4931
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "tidak dapat menguraikan '%s'"
 
-#: diff.c:4939 diff.c:4945
+#: diff.c:4981 diff.c:4987
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s butuh bentuk <n>/<m>"
 
-#: diff.c:4957
+#: diff.c:4999
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s butuh sebuah karakter, dapat '%s'"
 
-#: diff.c:4978
+#: diff.c:5020
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "argumen --color-moved jelek: %s"
 
-#: diff.c:4997
+#: diff.c:5039
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "mode tidak valid '%s' dalam --color-moved-ws"
 
-#: diff.c:5037
+#: diff.c:5079
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
@@ -3372,162 +3472,162 @@ msgstr ""
 "opsi diff-algorithm terima \"myers\", \"minimal\", \"patience\" dan "
 "\"histogram\""
 
-#: diff.c:5073 diff.c:5093
+#: diff.c:5115 diff.c:5135
 #, c-format
 msgid "invalid argument to %s"
 msgstr "argumen tidak valid ke %s"
 
-#: diff.c:5197
+#: diff.c:5239
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr "regex tidak valid diberikan ke -I: '%s'"
 
-#: diff.c:5246
+#: diff.c:5288
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "gagal menguraikan parameter opsi --submodule: '%s'"
 
-#: diff.c:5302
+#: diff.c:5344
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "argumen --word-diff jelek: %s"
 
-#: diff.c:5338
+#: diff.c:5380
 msgid "Diff output format options"
 msgstr "Opsi format keluaran diff"
 
-#: diff.c:5340 diff.c:5346
+#: diff.c:5382 diff.c:5388
 msgid "generate patch"
 msgstr "buat tambalan"
 
-#: diff.c:5343 builtin/log.c:179
+#: diff.c:5385 builtin/log.c:180
 msgid "suppress diff output"
 msgstr "sembunyikan keluaran diff"
 
-#: diff.c:5348 diff.c:5462 diff.c:5469
+#: diff.c:5390 diff.c:5504 diff.c:5511
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5349 diff.c:5352
+#: diff.c:5391 diff.c:5394
 msgid "generate diffs with <n> lines context"
 msgstr "buat diff dengan <n> baris konteks"
 
-#: diff.c:5354
+#: diff.c:5396
 msgid "generate the diff in raw format"
 msgstr "buat diff dalam format mentah"
 
-#: diff.c:5357
+#: diff.c:5399
 msgid "synonym for '-p --raw'"
 msgstr "sinonim untuk '-p --raw'"
 
-#: diff.c:5361
+#: diff.c:5403
 msgid "synonym for '-p --stat'"
 msgstr "sinonim untuk '-p --stat'"
 
-#: diff.c:5365
+#: diff.c:5407
 msgid "machine friendly --stat"
 msgstr "--stat yang ramah mesin"
 
-#: diff.c:5368
+#: diff.c:5410
 msgid "output only the last line of --stat"
 msgstr "keluarkan hanya baris terakhir --stat"
 
-#: diff.c:5370 diff.c:5378
+#: diff.c:5412 diff.c:5420
 msgid "<param1,param2>..."
 msgstr "<parameter 1,parameter 2>..."
 
-#: diff.c:5371
+#: diff.c:5413
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
 "keluarkan distribusi jumlah perubahan relatif untuk setiap subdirektori"
 
-#: diff.c:5375
+#: diff.c:5417
 msgid "synonym for --dirstat=cumulative"
 msgstr "sinonim untuk --dirstat=cumulative"
 
-#: diff.c:5379
+#: diff.c:5421
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "sinonim untuk --dirstat=files,param1,param2..."
 
-#: diff.c:5383
+#: diff.c:5425
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 "peringatkan bila perubahan memasukkan penanda konflik atau kesalahan spasi"
 
-#: diff.c:5386
+#: diff.c:5428
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr ""
 "ringkasan singkat seperti pembuatan, penggantian nama dan perubahan mode"
 
-#: diff.c:5389
+#: diff.c:5431
 msgid "show only names of changed files"
 msgstr "perlihatkan hanya nama berkas yang berubah"
 
-#: diff.c:5392
+#: diff.c:5434
 msgid "show only names and status of changed files"
 msgstr "perlihatkan hanya nama dan status berkas yang berubah"
 
-#: diff.c:5394
+#: diff.c:5436
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<lebar>[,<nama lebar>[,<hitungan>]]"
 
-#: diff.c:5395
+#: diff.c:5437
 msgid "generate diffstat"
 msgstr "buat diffstat"
 
-#: diff.c:5397 diff.c:5400 diff.c:5403
+#: diff.c:5439 diff.c:5442 diff.c:5445
 msgid "<width>"
 msgstr "<lebar>"
 
-#: diff.c:5398
+#: diff.c:5440
 msgid "generate diffstat with a given width"
 msgstr "buat diffstat dengan lebar yang diberikan"
 
-#: diff.c:5401
+#: diff.c:5443
 msgid "generate diffstat with a given name width"
 msgstr "buat diffstat dengan nama lebar yang diberikan"
 
-#: diff.c:5404
+#: diff.c:5446
 msgid "generate diffstat with a given graph width"
 msgstr "buat diffstat dengan lebar grafik yang diberikan"
 
-#: diff.c:5406
+#: diff.c:5448
 msgid "<count>"
 msgstr "<hitungan>"
 
-#: diff.c:5407
+#: diff.c:5449
 msgid "generate diffstat with limited lines"
 msgstr "buat diffstat dengan baris yang terbatas"
 
-#: diff.c:5410
+#: diff.c:5452
 msgid "generate compact summary in diffstat"
 msgstr "buat ringkasan singkat dalam diffstat"
 
-#: diff.c:5413
+#: diff.c:5455
 msgid "output a binary diff that can be applied"
 msgstr "keluarkan diff biner yang dapat diterapkan"
 
-#: diff.c:5416
+#: diff.c:5458
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr "perlihatkan objek pra- dan pasca-citra penuh pada baris \"index\""
 
-#: diff.c:5418
+#: diff.c:5460
 msgid "show colored diff"
 msgstr "perlihatkan diff berwarna"
 
-#: diff.c:5419
+#: diff.c:5461
 msgid "<kind>"
 msgstr "<tipe>"
 
-#: diff.c:5420
+#: diff.c:5462
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
 msgstr ""
 "soroti kesalahan spasi dalam baris 'context', 'old' atau 'new' dalam diff"
 
-#: diff.c:5423
+#: diff.c:5465
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -3535,91 +3635,91 @@ msgstr ""
 "jangan tengkar jalur nama dan gunakan NUL sebagai pembatas bidang keluaran "
 "pada --raw atau --numstat"
 
-#: diff.c:5426 diff.c:5429 diff.c:5432 diff.c:5541
+#: diff.c:5468 diff.c:5471 diff.c:5474 diff.c:5583
 msgid "<prefix>"
 msgstr "<prefiks>"
 
-#: diff.c:5427
+#: diff.c:5469
 msgid "show the given source prefix instead of \"a/\""
 msgstr "perlihatkan prefiks sumber yang diberikan daripada \"a/\""
 
-#: diff.c:5430
+#: diff.c:5472
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "perlihatkan prefiks tujuan daripada \"b/\""
 
-#: diff.c:5433
+#: diff.c:5475
 msgid "prepend an additional prefix to every line of output"
 msgstr "tambah depan prefiks tambahan pada setiap baris keluaran"
 
-#: diff.c:5436
+#: diff.c:5478
 msgid "do not show any source or destination prefix"
 msgstr "jangan perlihatkan prefiks sumber atau tujuan apapun"
 
-#: diff.c:5439
+#: diff.c:5481
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr ""
 "perlihatkan konteks diantara bingkah diff hingga jumlah baris yang disebutkan"
 
-#: diff.c:5443 diff.c:5448 diff.c:5453
+#: diff.c:5485 diff.c:5490 diff.c:5495
 msgid "<char>"
 msgstr "<karakter>"
 
-#: diff.c:5444
+#: diff.c:5486
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "sebutkan karakter yang menandai baris baru daripada '+'"
 
-#: diff.c:5449
+#: diff.c:5491
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "sebutkan karakter yang menandai baris lama daripada '-'"
 
-#: diff.c:5454
+#: diff.c:5496
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "sebutkan karakter yang menandai konteks daripada ' '"
 
-#: diff.c:5457
+#: diff.c:5499
 msgid "Diff rename options"
 msgstr "Opsi penamaan ulang diff"
 
-#: diff.c:5458
+#: diff.c:5500
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5459
+#: diff.c:5501
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr ""
 "pisahkan perubahan penulisan ulang penuh kedalam pasangan penghapusan dan "
 "pembuatan"
 
-#: diff.c:5463
+#: diff.c:5505
 msgid "detect renames"
 msgstr "deteksi penamaan ulang"
 
-#: diff.c:5467
+#: diff.c:5509
 msgid "omit the preimage for deletes"
 msgstr "lewati pracitra untuk penghapusan"
 
-#: diff.c:5470
+#: diff.c:5512
 msgid "detect copies"
 msgstr "deteksi penyalinan"
 
-#: diff.c:5474
+#: diff.c:5516
 msgid "use unmodified files as source to find copies"
 msgstr ""
 "gunakan berkas tak termodifikasi sebagai sumber untuk menemukan salinan"
 
-#: diff.c:5476
+#: diff.c:5518
 msgid "disable rename detection"
 msgstr "nonaktifkan deteksi penamaan ulang"
 
-#: diff.c:5479
+#: diff.c:5521
 msgid "use empty blobs as rename source"
 msgstr "gunakan blob kosong sebagai sumber penamaan ulang"
 
-#: diff.c:5481
+#: diff.c:5523
 msgid "continue listing the history of a file beyond renames"
 msgstr "lanjutkan daftarkan riwayat berkas di luar penamaan ulang"
 
-#: diff.c:5484
+#: diff.c:5526
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
@@ -3627,232 +3727,232 @@ msgstr ""
 "cegah pendeteksian penamaan ulang/penyalinan jika jumlah target penamaan "
 "ulang/penyalinan melebihi batas yang diberikan"
 
-#: diff.c:5486
+#: diff.c:5528
 msgid "Diff algorithm options"
 msgstr "Opsi algoritma diff"
 
-#: diff.c:5488
+#: diff.c:5530
 msgid "produce the smallest possible diff"
 msgstr "hasilkan diff yang paling kecil yang dimungkinkan"
 
-#: diff.c:5491
+#: diff.c:5533
 msgid "ignore whitespace when comparing lines"
 msgstr "abaikan spasi saat membandingkan baris"
 
-#: diff.c:5494
+#: diff.c:5536
 msgid "ignore changes in amount of whitespace"
 msgstr "abaikan perubahan dalam jumlah spasi"
 
-#: diff.c:5497
+#: diff.c:5539
 msgid "ignore changes in whitespace at EOL"
 msgstr "abaikan perubahan spasi pada EOL"
 
-#: diff.c:5500
+#: diff.c:5542
 msgid "ignore carrier-return at the end of line"
 msgstr "abaikan kembalian-kurir pada akhir baris"
 
-#: diff.c:5503
+#: diff.c:5545
 msgid "ignore changes whose lines are all blank"
 msgstr "abaikan perubahan yang semua baris kosong"
 
-#: diff.c:5505 diff.c:5527 diff.c:5530 diff.c:5575
+#: diff.c:5547 diff.c:5569 diff.c:5572 diff.c:5617
 msgid "<regex>"
 msgstr "<regex>"
 
-#: diff.c:5506
+#: diff.c:5548
 msgid "ignore changes whose all lines match <regex>"
 msgstr "abaikan perubahan yang semua baris cocok dengan <regex>"
 
-#: diff.c:5509
+#: diff.c:5551
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr ""
 "heuristik untuk geser perbatasan bingkah diff untuk pembacaan yang mudah"
 
-#: diff.c:5512
+#: diff.c:5554
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "buat diff menggunakan algoritma \"diff sabar\""
 
-#: diff.c:5516
+#: diff.c:5558
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "buat diff menggunakan algoritma \"diff histogram\""
 
-#: diff.c:5518
+#: diff.c:5560
 msgid "<algorithm>"
 msgstr "<algoritma>"
 
-#: diff.c:5519
+#: diff.c:5561
 msgid "choose a diff algorithm"
 msgstr "pilih algoritma diff"
 
-#: diff.c:5521
+#: diff.c:5563
 msgid "<text>"
 msgstr "<teks>"
 
-#: diff.c:5522
+#: diff.c:5564
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "buat diff menggunakan algoritma \"diff terlabuh\""
 
-#: diff.c:5524 diff.c:5533 diff.c:5536
+#: diff.c:5566 diff.c:5575 diff.c:5578
 msgid "<mode>"
 msgstr "<mode>"
 
-#: diff.c:5525
+#: diff.c:5567
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr ""
 "perlihatkan diff kata, menggunakan <mode> untuk batasi kata yang berubah"
 
-#: diff.c:5528
+#: diff.c:5570
 msgid "use <regex> to decide what a word is"
 msgstr "gunakan <regex> untuk menentukan apa itu kata"
 
-#: diff.c:5531
+#: diff.c:5573
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "sama dengan --word-diff=color --word-diff-regex=<regex>"
 
-#: diff.c:5534
+#: diff.c:5576
 msgid "moved lines of code are colored differently"
 msgstr "baris kode yang berpindah diwarnai berbeda"
 
-#: diff.c:5537
+#: diff.c:5579
 msgid "how white spaces are ignored in --color-moved"
 msgstr "bagaimana spasi diabaikan di --color-moved"
 
-#: diff.c:5540
+#: diff.c:5582
 msgid "Other diff options"
 msgstr "Opsi diff yang lainnya"
 
-#: diff.c:5542
+#: diff.c:5584
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "ketika dijalankan dari subdirektori, kecualikan perubahan diluar dan "
 "perlihatkan jalur relatif"
 
-#: diff.c:5546
+#: diff.c:5588
 msgid "treat all files as text"
 msgstr "perlakukan semua berkas sebagai teks"
 
-#: diff.c:5548
+#: diff.c:5590
 msgid "swap two inputs, reverse the diff"
 msgstr "tukar dua masukkan, balikkan diff"
 
-#: diff.c:5550
+#: diff.c:5592
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "keluar dengan 1 jika ada perbedaan, selain itu 0"
 
-#: diff.c:5552
+#: diff.c:5594
 msgid "disable all output of the program"
 msgstr "nonaktifkan semua keluaran program"
 
-#: diff.c:5554
+#: diff.c:5596
 msgid "allow an external diff helper to be executed"
 msgstr "perbolehkan pembantu diff eksternal untuk dieksekusi"
 
-#: diff.c:5556
+#: diff.c:5598
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 "jalankan saringan konversi teks eksternal ketika membandingkan berkas biner"
 
-#: diff.c:5558
+#: diff.c:5600
 msgid "<when>"
 msgstr "<kapan>"
 
-#: diff.c:5559
+#: diff.c:5601
 msgid "ignore changes to submodules in the diff generation"
 msgstr "abaikan perubahan submodul dalam pembuatan diff"
 
-#: diff.c:5562
+#: diff.c:5604
 msgid "<format>"
 msgstr "<format>"
 
-#: diff.c:5563
+#: diff.c:5605
 msgid "specify how differences in submodules are shown"
 msgstr "sebutkan bagaimana perbedaan dalam submodul diperlihatkan"
 
-#: diff.c:5567
+#: diff.c:5609
 msgid "hide 'git add -N' entries from the index"
 msgstr "sembunyikan entri 'git add -N' dari indeks"
 
-#: diff.c:5570
+#: diff.c:5612
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "perlakukan entri 'git add -N' sebagai nyata dalam indeks"
 
-#: diff.c:5572
+#: diff.c:5614
 msgid "<string>"
 msgstr "<untai>"
 
-#: diff.c:5573
+#: diff.c:5615
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
 msgstr "cari perbedaan yang mengubah jumlah kemunculan untai yang disebutkan"
 
-#: diff.c:5576
+#: diff.c:5618
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
 msgstr "cari perbedaan yang mengubah jumlah kemunculan regex yang disebutkan"
 
-#: diff.c:5579
+#: diff.c:5621
 msgid "show all changes in the changeset with -S or -G"
 msgstr "perlihatkan semua perubahan dalam set perubahan dengan -S atau -G"
 
-#: diff.c:5582
+#: diff.c:5624
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr ""
 "perlakukan <string> di -S sebagai ekspresi reguler POSIX yang diperluas"
 
-#: diff.c:5585
+#: diff.c:5627
 msgid "control the order in which files appear in the output"
 msgstr "kontrol urutan berkas yang muncul dalam keluaran"
 
-#: diff.c:5586 diff.c:5589
+#: diff.c:5628 diff.c:5631
 msgid "<path>"
 msgstr "<jalur>"
 
-#: diff.c:5587
+#: diff.c:5629
 msgid "show the change in the specified path first"
 msgstr "perlihatkan perubahan dalam jalur yang disebutkan terlebih dahulu"
 
-#: diff.c:5590
+#: diff.c:5632
 msgid "skip the output to the specified path"
 msgstr "lewati keluaran ke jalur yang disebutkan"
 
-#: diff.c:5592
+#: diff.c:5634
 msgid "<object-id>"
 msgstr "<id objek>"
 
-#: diff.c:5593
+#: diff.c:5635
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
 msgstr "cari perubahan yang mengubah jumlah kemunculan objek yang disebutkan"
 
-#: diff.c:5595
+#: diff.c:5637
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5596
+#: diff.c:5638
 msgid "select files by diff type"
 msgstr "pilih berkas oleh tipe diff"
 
-#: diff.c:5598
+#: diff.c:5640
 msgid "<file>"
 msgstr "<berkas>"
 
-#: diff.c:5599
-msgid "Output to a specific file"
-msgstr "Keluarkan ke berkas yang disebutkan"
+#: diff.c:5641
+msgid "output to a specific file"
+msgstr "keluarkan ke berkas yang disebutkan"
 
-#: diff.c:6257
+#: diff.c:6321
 msgid "exhaustive rename detection was skipped due to too many files."
 msgstr "deteksi penamaan ulang lengkap dilewati karena terlalu banyak berkas."
 
-#: diff.c:6260
+#: diff.c:6324
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
 "hanya ditemukan salinan dari jalur yang berubah karena terlalu banyak berkas."
 
-#: diff.c:6263
+#: diff.c:6327
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -3903,20 +4003,20 @@ msgstr ""
 msgid "cannot use %s as an exclude file"
 msgstr ""
 
-#: dir.c:2418
+#: dir.c:2419
 #, c-format
 msgid "could not open directory '%s'"
 msgstr ""
 
-#: dir.c:2720
+#: dir.c:2721
 msgid "failed to get kernel name and information"
 msgstr ""
 
-#: dir.c:2844
+#: dir.c:2846
 msgid "untracked cache is disabled on this system or location"
 msgstr ""
 
-#: dir.c:3112
+#: dir.c:3119
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -3924,17 +4024,17 @@ msgstr ""
 "Nama direktori tidak dapat ditebak.\n"
 "Mohon sebutkan direktori pada baris perintah"
 
-#: dir.c:3800
+#: dir.c:3807
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr ""
 
-#: dir.c:3847 dir.c:3852
+#: dir.c:3854 dir.c:3859
 #, c-format
 msgid "could not create directories for %s"
 msgstr ""
 
-#: dir.c:3881
+#: dir.c:3888
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr ""
@@ -3953,7 +4053,7 @@ msgstr ""
 msgid "could not stat file '%s'"
 msgstr ""
 
-#: environment.c:145
+#: environment.c:147
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr ""
@@ -3984,248 +4084,275 @@ msgstr "git fetch-pack: ACK/NAK diharapkan, dapat '%s'"
 msgid "unable to write to remote"
 msgstr "tidak dapat menulis ke remote"
 
-#: fetch-pack.c:395 fetch-pack.c:1439
+#: fetch-pack.c:397 fetch-pack.c:1460
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "baris dangkal tidak valid: %s"
 
-#: fetch-pack.c:401 fetch-pack.c:1445
+#: fetch-pack.c:403 fetch-pack.c:1466
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "baris dangkal-balik tidak valid: %s"
 
-#: fetch-pack.c:403 fetch-pack.c:1447
+#: fetch-pack.c:405 fetch-pack.c:1468
 #, c-format
 msgid "object not found: %s"
 msgstr "object tidak ditemukan: %s"
 
-#: fetch-pack.c:406 fetch-pack.c:1450
+#: fetch-pack.c:408 fetch-pack.c:1471
 #, c-format
 msgid "error in object: %s"
 msgstr "kesalahan dalam objek: %s"
 
-#: fetch-pack.c:408 fetch-pack.c:1452
+#: fetch-pack.c:410 fetch-pack.c:1473
 #, c-format
 msgid "no shallow found: %s"
 msgstr "tidak ada dangkal yang ditemukan: %s"
 
-#: fetch-pack.c:411 fetch-pack.c:1456
+#: fetch-pack.c:413 fetch-pack.c:1477
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "dangkal/dangkal-balik diharapkan, dapat %s"
 
-#: fetch-pack.c:451
+#: fetch-pack.c:453
 #, c-format
 msgid "got %s %d %s"
 msgstr "dapat %s %d %s"
 
-#: fetch-pack.c:468
+#: fetch-pack.c:470
 #, c-format
 msgid "invalid commit %s"
 msgstr "komit tidak valid %s"
 
-#: fetch-pack.c:499
+#: fetch-pack.c:501
 msgid "giving up"
 msgstr "menyerah"
 
-#: fetch-pack.c:512 progress.c:339
+#: fetch-pack.c:514 progress.h:25
 msgid "done"
 msgstr "selesai"
 
-#: fetch-pack.c:524
+#: fetch-pack.c:526
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "dapat %s (%d) %s"
 
-#: fetch-pack.c:560
+#: fetch-pack.c:562
 #, c-format
 msgid "Marking %s as complete"
 msgstr "Menandai %s sebagai lengkap"
 
-#: fetch-pack.c:775
+#: fetch-pack.c:784
 #, c-format
 msgid "already have %s (%s)"
 msgstr "sudah punya %s (%s)"
 
-#: fetch-pack.c:861
+#: fetch-pack.c:870
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack: tidak dapat menggarpu pemultipleks-balik pita samping"
 
-#: fetch-pack.c:869
+#: fetch-pack.c:878
 msgid "protocol error: bad pack header"
 msgstr "kesalahan protokol: kepala pak jelek"
 
-#: fetch-pack.c:965
+#: fetch-pack.c:974
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack: tidak dapat menggarpu %s"
 
-#: fetch-pack.c:971
+#: fetch-pack.c:980
 msgid "fetch-pack: invalid index-pack output"
 msgstr "fetch-pack: keluaran index-pack tidak valid"
 
-#: fetch-pack.c:988
+#: fetch-pack.c:997
 #, c-format
 msgid "%s failed"
 msgstr "%s gagal"
 
-#: fetch-pack.c:990
+#: fetch-pack.c:999
 msgid "error in sideband demultiplexer"
 msgstr "kesalahan dalam pemultipleks-balik pita samping"
 
-#: fetch-pack.c:1035
+#: fetch-pack.c:1048
 #, c-format
 msgid "Server version is %.*s"
 msgstr "Versi peladen %.*s"
 
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1052 fetch-pack.c:1058
-#: fetch-pack.c:1062 fetch-pack.c:1066 fetch-pack.c:1070 fetch-pack.c:1074
-#: fetch-pack.c:1078 fetch-pack.c:1082 fetch-pack.c:1086 fetch-pack.c:1090
-#: fetch-pack.c:1096 fetch-pack.c:1102 fetch-pack.c:1107 fetch-pack.c:1112
+#: fetch-pack.c:1056 fetch-pack.c:1062 fetch-pack.c:1065 fetch-pack.c:1071
+#: fetch-pack.c:1075 fetch-pack.c:1079 fetch-pack.c:1083 fetch-pack.c:1087
+#: fetch-pack.c:1091 fetch-pack.c:1095 fetch-pack.c:1099 fetch-pack.c:1103
+#: fetch-pack.c:1109 fetch-pack.c:1115 fetch-pack.c:1120 fetch-pack.c:1125
 #, c-format
 msgid "Server supports %s"
 msgstr "Peladen mendukung %s"
 
-#: fetch-pack.c:1045
+#: fetch-pack.c:1058
 msgid "Server does not support shallow clients"
 msgstr "Peladen tidak mendukung klien dangkal"
 
-#: fetch-pack.c:1105
+#: fetch-pack.c:1118
 msgid "Server does not support --shallow-since"
 msgstr "Peladen tidak mendukung --shallow-since"
 
-#: fetch-pack.c:1110
+#: fetch-pack.c:1123
 msgid "Server does not support --shallow-exclude"
 msgstr "Peladen tidak mendukung --shallow-exclude"
 
-#: fetch-pack.c:1114
+#: fetch-pack.c:1127
 msgid "Server does not support --deepen"
 msgstr "Peladen tidak mendukung --deepen"
 
-#: fetch-pack.c:1116
+#: fetch-pack.c:1129
 msgid "Server does not support this repository's object format"
 msgstr "Peladen tidak mendukung objek format repositori ini"
 
-#: fetch-pack.c:1129
+#: fetch-pack.c:1142
 msgid "no common commits"
 msgstr "tidak ada komit umum"
 
-#: fetch-pack.c:1138 fetch-pack.c:1485 builtin/clone.c:1130
+#: fetch-pack.c:1151 fetch-pack.c:1506 builtin/clone.c:1166
 msgid "source repository is shallow, reject to clone."
 msgstr "repositori sumber dangkal, menolak mengkloning."
 
-#: fetch-pack.c:1144 fetch-pack.c:1681
+#: fetch-pack.c:1157 fetch-pack.c:1705
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: pengambilan gagal."
 
-#: fetch-pack.c:1258
+#: fetch-pack.c:1271
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "algoritma tidak cocok: klien %s; peladen %s"
 
-#: fetch-pack.c:1262
+#: fetch-pack.c:1275
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "peladen tidak mendukung algoritma '%s'"
 
-#: fetch-pack.c:1295
+#: fetch-pack.c:1308
 msgid "Server does not support shallow requests"
 msgstr "Peladen tidak mendukung permintaan dangkal"
 
-#: fetch-pack.c:1302
+#: fetch-pack.c:1315
 msgid "Server supports filter"
 msgstr "Peladen mendukung saringan"
 
-#: fetch-pack.c:1345 fetch-pack.c:2063
+#: fetch-pack.c:1358 fetch-pack.c:2087
 msgid "unable to write request to remote"
 msgstr "tidak dapat menulis permintaan kepada remote"
 
-#: fetch-pack.c:1363
+#: fetch-pack.c:1376
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "kesalahan membaca kepala seksi '%s'"
 
-#: fetch-pack.c:1369
+#: fetch-pack.c:1382
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "diharapkan '%s', diterima '%s'"
 
-#: fetch-pack.c:1403
+#: fetch-pack.c:1416
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "baris pengakuan tidak diharapkan: %s"
 
-#: fetch-pack.c:1408
+#: fetch-pack.c:1421
 #, c-format
 msgid "error processing acks: %d"
 msgstr "kesalahan memproses ack: %d"
 
-#: fetch-pack.c:1418
-msgid "expected packfile to be sent after 'ready'"
-msgstr "berkas pak diharapkan dikirim setelah 'ready'"
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#.
+#: fetch-pack.c:1435
+#, c-format
+msgid "expected packfile to be sent after '%s'"
+msgstr "berkas pak diharapkan dikirim setelah '%s'"
 
-#: fetch-pack.c:1420
-msgid "expected no other sections to be sent after no 'ready'"
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#.
+#: fetch-pack.c:1441
+#, c-format
+msgid "expected no other sections to be sent after no '%s'"
 msgstr ""
-"tidak ada seksi lainnya yang diharapkan dikirim setelah tidak ada 'ready'"
+"tidak ada bagian lainnya yang diharapkan dikirim setelah tidak ada '%s'"
 
-#: fetch-pack.c:1461
+#: fetch-pack.c:1482
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "gagal memproses info dangkal: %d"
 
-#: fetch-pack.c:1510
+#: fetch-pack.c:1531
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "wanted-ref diharapkan, dapat '%s'"
 
-#: fetch-pack.c:1515
+#: fetch-pack.c:1536
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "wanted-ref tidak diharapkan: '%s'"
 
-#: fetch-pack.c:1520
+#: fetch-pack.c:1541
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "kesalahan memproses referensi yang diminta: %d"
 
-#: fetch-pack.c:1550
+#: fetch-pack.c:1571
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack: paket jawaban akhir diharapkan"
 
-#: fetch-pack.c:1959
+#: fetch-pack.c:1983
 msgid "no matching remote head"
 msgstr "tidak ada kepala remote yang cocok"
 
-#: fetch-pack.c:1982 builtin/clone.c:581
+#: fetch-pack.c:2006 builtin/clone.c:587
 msgid "remote did not send all necessary objects"
 msgstr "remote tidak mengirim semua objek yang dibutuhkan"
 
-#: fetch-pack.c:2085
+#: fetch-pack.c:2109
 msgid "unexpected 'ready' from remote"
 msgstr "'ready' tidak diharapkan dari remote"
 
-#: fetch-pack.c:2108
+#: fetch-pack.c:2132
 #, c-format
 msgid "no such remote ref %s"
 msgstr "tidak ada referensi remote seperti %s"
 
-#: fetch-pack.c:2111
+#: fetch-pack.c:2135
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "Peladen tidak memperbolehkan permintaan untuk objek tak diiklankan %s"
 
-#: gpg-interface.c:329 gpg-interface.c:457 gpg-interface.c:974
-#: gpg-interface.c:990
+#: fsmonitor-ipc.c:119
+#, c-format
+msgid "fsmonitor_ipc__send_query: invalid path '%s'"
+msgstr ""
+
+#: fsmonitor-ipc.c:125
+#, c-format
+msgid "fsmonitor_ipc__send_query: unspecified error on '%s'"
+msgstr ""
+
+#: fsmonitor-ipc.c:155
+msgid "fsmonitor--daemon is not running"
+msgstr ""
+
+#: fsmonitor-ipc.c:164
+#, c-format
+msgid "could not send '%s' command to fsmonitor--daemon"
+msgstr ""
+
+#: gpg-interface.c:329 gpg-interface.c:456 gpg-interface.c:995
+#: gpg-interface.c:1011
 msgid "could not create temporary file"
 msgstr "tidak dapat membuat berkas sementara"
 
-#: gpg-interface.c:332 gpg-interface.c:460
+#: gpg-interface.c:332 gpg-interface.c:459
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr "gagal menulis tandatangan terlepas ke '%s'"
 
-#: gpg-interface.c:451
+#: gpg-interface.c:450
 msgid ""
 "gpg.ssh.allowedSignersFile needs to be configured and exist for ssh "
 "signature verification"
@@ -4233,7 +4360,7 @@ msgstr ""
 "gpg.ssh.allowedSignersFile perlu dikonfigurasi dan ada untuk verifikasi "
 "tandatangan ssh"
 
-#: gpg-interface.c:480
+#: gpg-interface.c:479
 msgid ""
 "ssh-keygen -Y find-principals/verify is needed for ssh signature "
 "verification (available in openssh version 8.2p1+)"
@@ -4241,57 +4368,57 @@ msgstr ""
 "ssh-keygen -Y find-principals/verify diperlukan untuk verifikasi tandatangan "
 "ssh (tersedia di openssh versi 8.2p1+)"
 
-#: gpg-interface.c:536
+#: gpg-interface.c:550
 #, c-format
 msgid "ssh signing revocation file configured but not found: %s"
 msgstr ""
 "berkas pencabutan penandatanganan ssh terkonfigurasi tapi tidak ada: %s"
 
-#: gpg-interface.c:624
+#: gpg-interface.c:638
 #, c-format
 msgid "bad/incompatible signature '%s'"
 msgstr "tanda tangan '%s' jelek/tidak kompatibel"
 
-#: gpg-interface.c:801 gpg-interface.c:806
+#: gpg-interface.c:815 gpg-interface.c:820
 #, c-format
 msgid "failed to get the ssh fingerprint for key '%s'"
 msgstr "gagal mendapatkan sidik jari ssh untuk kunci '%s'"
 
-#: gpg-interface.c:829
+#: gpg-interface.c:843
 msgid ""
 "either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured"
 msgstr ""
 "baik user.signingkey atau gpg.ssh.defaultKeyCommand perlu dikonfigurasi"
 
-#: gpg-interface.c:851
+#: gpg-interface.c:865
 #, c-format
 msgid "gpg.ssh.defaultKeyCommand succeeded but returned no keys: %s %s"
 msgstr "gpg.ssh.defaultKeyCommand sukses tapi tidak mengembalikan kunci: %s %s"
 
-#: gpg-interface.c:857
+#: gpg-interface.c:871
 #, c-format
 msgid "gpg.ssh.defaultKeyCommand failed: %s %s"
 msgstr "gpg.ssh.defaultKeyCommand gagal: %s %s"
 
-#: gpg-interface.c:945
+#: gpg-interface.c:966
 msgid "gpg failed to sign the data"
 msgstr "gpg gagal menandatangani data"
 
-#: gpg-interface.c:967
+#: gpg-interface.c:988
 msgid "user.signingkey needs to be set for ssh signing"
 msgstr "user.signingkey perlu disetel untuk penandatanganan ssh"
 
-#: gpg-interface.c:978
+#: gpg-interface.c:999
 #, c-format
 msgid "failed writing ssh signing key to '%s'"
 msgstr "gagal menulis kunci penandatanganan ssh ke '%s'"
 
-#: gpg-interface.c:996
+#: gpg-interface.c:1017
 #, c-format
 msgid "failed writing ssh signing key buffer to '%s'"
 msgstr "gagal menulis penyangga kunci penandatanganan ssh ke '%s'"
 
-#: gpg-interface.c:1014
+#: gpg-interface.c:1035
 msgid ""
 "ssh-keygen -Y sign is needed for ssh signing (available in openssh version "
 "8.2p1+)"
@@ -4299,7 +4426,7 @@ msgstr ""
 "ssh-keygen -Y sign diperlukan untuk penandatanganan ssh (tersedia di "
 "openssh  versi 8.2p1+)"
 
-#: gpg-interface.c:1026
+#: gpg-interface.c:1047
 #, c-format
 msgid "failed reading ssh signing data buffer from '%s'"
 msgstr "gagal membaca penyangga data penandatanganan ssh dari '%s'"
@@ -4309,7 +4436,7 @@ msgstr "gagal membaca penyangga data penandatanganan ssh dari '%s'"
 msgid "ignored invalid color '%.*s' in log.graphColors"
 msgstr "warna tidak valid '%.*s' diabaikan di log.graphColors"
 
-#: grep.c:531
+#: grep.c:446
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
@@ -4317,109 +4444,109 @@ msgstr ""
 "pola yang diberikan berisi bita NULL (via -f <berkas>). Hal ini hanya "
 "didukung dengan -P di bawah PCRE v2"
 
-#: grep.c:1942
+#: grep.c:1859
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "'%s': tidak dapat membaca %s"
 
-#: grep.c:1959 setup.c:177 builtin/clone.c:302 builtin/diff.c:90
+#: grep.c:1876 setup.c:178 builtin/clone.c:308 builtin/diff.c:90
 #: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "gagal men-stat '%s'"
 
-#: grep.c:1970
+#: grep.c:1887
 #, c-format
 msgid "'%s': short read"
 msgstr "'%s': baca pendek"
 
-#: help.c:24
+#: help.c:25
 msgid "start a working area (see also: git help tutorial)"
 msgstr "mulai area kerja (lihat pula: git help tutorial)"
 
-#: help.c:25
+#: help.c:26
 msgid "work on the current change (see also: git help everyday)"
 msgstr "bekerja pada perubahan saat ini (lihat pula: git help everyday)"
 
-#: help.c:26
+#: help.c:27
 msgid "examine the history and state (see also: git help revisions)"
 msgstr "periksa riwayat dan keadaan (lihat pula: git help revisions)"
 
-#: help.c:27
+#: help.c:28
 msgid "grow, mark and tweak your common history"
 msgstr "tumbuhkan, tandai, dan cubit riwayat umum Anda"
 
-#: help.c:28
+#: help.c:29
 msgid "collaborate (see also: git help workflows)"
 msgstr "kolaborasi (lihat pula: git help workflows)"
 
-#: help.c:32
+#: help.c:33
 msgid "Main Porcelain Commands"
 msgstr "Perintah Porselen Utama"
 
-#: help.c:33
+#: help.c:34
 msgid "Ancillary Commands / Manipulators"
 msgstr "Perintah Tambahan / Peubah"
 
-#: help.c:34
+#: help.c:35
 msgid "Ancillary Commands / Interrogators"
 msgstr "Perintah Tambahan / Pemeriksa"
 
-#: help.c:35
+#: help.c:36
 msgid "Interacting with Others"
 msgstr "Berinteraksi dengan yang Lain"
 
-#: help.c:36
+#: help.c:37
 msgid "Low-level Commands / Manipulators"
 msgstr "Perintah Tingkat Rendah / Peubah"
 
-#: help.c:37
+#: help.c:38
 msgid "Low-level Commands / Interrogators"
 msgstr "Perintah Tingkat Rendah / Pemeriksa"
 
-#: help.c:38
+#: help.c:39
 msgid "Low-level Commands / Syncing Repositories"
 msgstr "Perintah Tingkat Rendah / Sinkronisasi Repositori"
 
-#: help.c:39
+#: help.c:40
 msgid "Low-level Commands / Internal Helpers"
 msgstr "Perintah Tingak Rendah / Pembantu Internal"
 
-#: help.c:313
+#: help.c:316
 #, c-format
 msgid "available git commands in '%s'"
 msgstr "perintah git yang tersedia di '%s'"
 
-#: help.c:320
+#: help.c:323
 msgid "git commands available from elsewhere on your $PATH"
 msgstr "perintah git yang tersedia dari tempat lain pada $PATH Anda"
 
-#: help.c:329
+#: help.c:332
 msgid "These are common Git commands used in various situations:"
 msgstr "Berikut ini perintah Git umum yang digunakan dalam beragam situasi:"
 
-#: help.c:378 git.c:100
+#: help.c:382 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "tipe daftar perintah '%s' tidak didukung"
 
-#: help.c:418
+#: help.c:422
 msgid "The Git concept guides are:"
 msgstr "Panduan konsep Git adalah:"
 
-#: help.c:442
-msgid "See 'git help <command>' to read about a specific subcommand"
-msgstr "Lihat 'git help <perintah>' untuk baca tentang subperintah spesifik"
-
-#: help.c:447
+#: help.c:446
 msgid "External commands"
 msgstr "Perintah eksternal"
 
-#: help.c:462
+#: help.c:468
 msgid "Command aliases"
 msgstr "Alias perintah"
 
-#: help.c:543
+#: help.c:486
+msgid "See 'git help <command>' to read about a specific subcommand"
+msgstr "Lihat 'git help <perintah>' untuk baca tentang subperintah spesifik"
+
+#: help.c:563
 #, c-format
 msgid ""
 "'%s' appears to be a git command, but we were not\n"
@@ -4428,36 +4555,36 @@ msgstr ""
 "'%s' sepertinya perintah git, tetapi kami tidak dapat\n"
 "menjalankannya. Mungkin git-%s rusak?"
 
-#: help.c:565 help.c:662
+#: help.c:585 help.c:682
 #, c-format
 msgid "git: '%s' is not a git command. See 'git --help'."
 msgstr "git: '%s' bukan perintah git. Lihat 'git --help'."
 
-#: help.c:613
+#: help.c:633
 msgid "Uh oh. Your system reports no Git commands at all."
 msgstr "Eh oh. Sistem Anda melaporkan tidak ada perintah Git sama sekali."
 
-#: help.c:635
+#: help.c:655
 #, c-format
 msgid "WARNING: You called a Git command named '%s', which does not exist."
 msgstr "PERINGATAN: Anda memanggil perintah Git bernama '%s' yang tidak ada."
 
-#: help.c:640
+#: help.c:660
 #, c-format
 msgid "Continuing under the assumption that you meant '%s'."
 msgstr "Melanjutkan di bawah asumsi bahwa maksud Anda '%s'."
 
-#: help.c:646
+#: help.c:666
 #, c-format
 msgid "Run '%s' instead [y/N]? "
-msgstr ""
+msgstr "Jalankan '%s' sebagai gantinya [y/N]?"
 
-#: help.c:654
+#: help.c:674
 #, c-format
 msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
 msgstr "Melanjutkan dalam %0.1f detik, mengasumsikan bahwa maksud Anda '%s'."
 
-#: help.c:666
+#: help.c:686
 msgid ""
 "\n"
 "The most similar command is"
@@ -4471,16 +4598,16 @@ msgstr[1] ""
 "\n"
 "Perintah paling mirip adalah"
 
-#: help.c:706
+#: help.c:729
 msgid "git version [<options>]"
 msgstr "git version [<opsi>]"
 
-#: help.c:761
+#: help.c:784
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s: %s - %s"
 
-#: help.c:765
+#: help.c:788
 msgid ""
 "\n"
 "Did you mean this?"
@@ -4494,22 +4621,30 @@ msgstr[1] ""
 "\n"
 "Mungkin maksud Anda salah satu dari yang ini?"
 
-#: hook.c:27
+#: hook.c:28
 #, c-format
 msgid ""
 "The '%s' hook was ignored because it's not set as executable.\n"
 "You can disable this warning with `git config advice.ignoredHook false`."
 msgstr ""
+"Kait '%s' diabaikan karena tidak disetel sebagai dapat dieksekusi.\n"
+"Anda dapat menonaktifkan peringatan ini dengan `git config advice."
+"ignoredHook false`."
+
+#: hook.c:87
+#, c-format
+msgid "Couldn't start hook '%s'\n"
+msgstr "Tidak dapat memulai kait '%s'\n"
 
-#: ident.c:353
+#: ident.c:354
 msgid "Author identity unknown\n"
-msgstr ""
+msgstr "Identitas pengarang tidak dikenal\n"
 
-#: ident.c:356
+#: ident.c:357
 msgid "Committer identity unknown\n"
-msgstr ""
+msgstr "Identitas pengkomit tidak dikenal\n"
 
-#: ident.c:362
+#: ident.c:363
 msgid ""
 "\n"
 "*** Please tell me who you are.\n"
@@ -4523,72 +4658,83 @@ msgid ""
 "Omit --global to set the identity only in this repository.\n"
 "\n"
 msgstr ""
+"\n"
+"*** Mohon beri tahu saya siapa Anda.\n"
+"\n"
+"Jalankan\n"
+"\n"
+"  git config --global user.email \"anda@example.com\"\n"
+"  git config --global user.name \"Nama Anda\"\n"
+"\n"
+"untuk menyetel identitas asali akun Anda.\n"
+"Abaikan --global untuk menyetel identitas hanya di dalam repositori ini.\n"
+"\n"
 
-#: ident.c:397
+#: ident.c:398
 msgid "no email was given and auto-detection is disabled"
-msgstr ""
+msgstr "tidak ada email yang diberikan dan deteksi otomatis dimatikan"
 
-#: ident.c:402
+#: ident.c:403
 #, c-format
 msgid "unable to auto-detect email address (got '%s')"
-msgstr ""
+msgstr "tidak dapat mendeteksi otomatis alamat email (dapat '%s')"
 
-#: ident.c:419
+#: ident.c:420
 msgid "no name was given and auto-detection is disabled"
-msgstr ""
+msgstr "tidak ada nama yang diberikan dan deteksi otomatis dimatikan"
 
-#: ident.c:425
+#: ident.c:426
 #, c-format
 msgid "unable to auto-detect name (got '%s')"
-msgstr ""
+msgstr "tidak dapat mendeteksi otomatis nama (dapat '%s')"
 
-#: ident.c:433
+#: ident.c:434
 #, c-format
 msgid "empty ident name (for <%s>) not allowed"
-msgstr ""
+msgstr "nama identitas kosong (untuk <%s>) tidak diperbolehkan"
 
-#: ident.c:439
+#: ident.c:440
 #, c-format
 msgid "name consists only of disallowed characters: %s"
-msgstr ""
+msgstr "nama hanya terdiri dari karakter yang tidak diperbolehkan: %s"
 
-#: ident.c:454 builtin/commit.c:648
+#: ident.c:455 builtin/commit.c:649
 #, c-format
 msgid "invalid date format: %s"
-msgstr ""
+msgstr "format tanggal tidak valid: %s"
 
-#: list-objects-filter-options.c:83
+#: list-objects-filter-options.c:68
 msgid "expected 'tree:<depth>'"
 msgstr ""
 
-#: list-objects-filter-options.c:98
+#: list-objects-filter-options.c:83
 msgid "sparse:path filters support has been dropped"
 msgstr ""
 
-#: list-objects-filter-options.c:105
+#: list-objects-filter-options.c:90
 #, c-format
 msgid "'%s' for 'object:type=<type>' is not a valid object type"
 msgstr ""
 
-#: list-objects-filter-options.c:124
+#: list-objects-filter-options.c:109
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr ""
 
-#: list-objects-filter-options.c:140
+#: list-objects-filter-options.c:125
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
 msgstr ""
 
-#: list-objects-filter-options.c:182
+#: list-objects-filter-options.c:167
 msgid "expected something after combine:"
 msgstr ""
 
-#: list-objects-filter-options.c:264
+#: list-objects-filter-options.c:249
 msgid "multiple filter-specs cannot be combined"
 msgstr ""
 
-#: list-objects-filter-options.c:376
+#: list-objects-filter-options.c:365
 msgid "unable to upgrade repository format to support partial clone"
 msgstr ""
 
@@ -4602,17 +4748,17 @@ msgstr ""
 msgid "unable to parse sparse filter data in %s"
 msgstr ""
 
-#: list-objects.c:127
+#: list-objects.c:144
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
 msgstr ""
 
-#: list-objects.c:140
+#: list-objects.c:157
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr ""
 
-#: list-objects.c:398
+#: list-objects.c:415
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr ""
@@ -4634,17 +4780,12 @@ msgstr ""
 msgid "Unable to create '%s.lock': %s"
 msgstr ""
 
-#: ls-refs.c:37
-#, c-format
-msgid "invalid value '%s' for lsrefs.unborn"
-msgstr ""
-
-#: ls-refs.c:174
+#: ls-refs.c:175
 #, c-format
 msgid "unexpected line: '%s'"
 msgstr ""
 
-#: ls-refs.c:178
+#: ls-refs.c:179
 msgid "expected flush after ls-refs arguments"
 msgstr ""
 
@@ -4652,44 +4793,48 @@ msgstr ""
 msgid "quoted CRLF detected"
 msgstr ""
 
-#: mailinfo.c:1254 builtin/am.c:184 builtin/mailinfo.c:46
+#: mailinfo.c:1254 builtin/am.c:185 builtin/mailinfo.c:46
 #, c-format
 msgid "bad action '%s' for '%s'"
 msgstr ""
 
-#: merge-ort.c:1584 merge-recursive.c:1211
+#: merge-ort.c:1630 merge-recursive.c:1214
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
-msgstr ""
+msgstr "Gagal menggabungkan submodul %s (tidak di-checkout)"
 
-#: merge-ort.c:1593 merge-recursive.c:1218
+#: merge-ort.c:1639 merge-recursive.c:1221
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
-msgstr ""
+msgstr "Gagal menggabungkan submodul %s (komit tidak ada)"
 
-#: merge-ort.c:1602 merge-recursive.c:1225
+#: merge-ort.c:1648 merge-recursive.c:1228
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr ""
+"Gagal menggabungkan submodul %s (komit tidak mengikuti dasar penggabungan)"
 
-#: merge-ort.c:1612 merge-ort.c:1620
+#: merge-ort.c:1658 merge-ort.c:1666
 #, c-format
 msgid "Note: Fast-forwarding submodule %s to %s"
-msgstr ""
+msgstr "Catatan: Memaju-cepat submodul %s ke %s"
 
-#: merge-ort.c:1642
+#: merge-ort.c:1688
 #, c-format
 msgid "Failed to merge submodule %s"
-msgstr ""
+msgstr "Gagal menggabungkan submodul %s"
 
-#: merge-ort.c:1649
+#: merge-ort.c:1695
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but a possible merge resolution exists:\n"
 "%s\n"
 msgstr ""
+"Gagal menggabungkan submodul %s, tetapi sebuah penyelesaian penggabungan "
+"yang mungkin ada:\n"
+"%s\n"
 
-#: merge-ort.c:1653 merge-recursive.c:1281
+#: merge-ort.c:1699 merge-recursive.c:1284
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -4699,610 +4844,689 @@ msgid ""
 "\n"
 "which will accept this suggestion.\n"
 msgstr ""
+"Jika benar, cukup misalkan tambahkan ke indeks dengan menggunakan:\n"
+"\n"
+"  git update-index --cacheinfo 160000 %s \"%s\"\n"
+"\n"
+"yang akan menerima saran ini.\n"
 
-#: merge-ort.c:1666
+#: merge-ort.c:1712
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but multiple possible merges exist:\n"
 "%s"
 msgstr ""
+"Gagal menggabungkan submodul %s, tetapi ada banyak penggabungan yang "
+"mungkin:\n"
+"%s"
 
-#: merge-ort.c:1887 merge-recursive.c:1372
+#: merge-ort.c:1937 merge-recursive.c:1375
 msgid "Failed to execute internal merge"
-msgstr ""
+msgstr "Gagal menjalankan penggabungan internal"
 
-#: merge-ort.c:1892 merge-recursive.c:1377
+#: merge-ort.c:1942 merge-recursive.c:1380
 #, c-format
 msgid "Unable to add %s to database"
-msgstr ""
+msgstr "Tidak dapat menambahkan %s ke basis data"
 
-#: merge-ort.c:1899 merge-recursive.c:1410
+#: merge-ort.c:1949 merge-recursive.c:1413
 #, c-format
 msgid "Auto-merging %s"
-msgstr ""
+msgstr "Menggabungkan otomatis %s"
 
-#: merge-ort.c:2038 merge-recursive.c:2132
+#: merge-ort.c:2088 merge-recursive.c:2135
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
 "implicit directory rename(s) putting the following path(s) there: %s."
 msgstr ""
+"KONFLIK (penamaan ulang direktori implisit): Berkas/direktori yang sudah ada "
+"pada %s saat penamaan ulang direktori menempatkan jalur berikut di sana: %s."
 
-#: merge-ort.c:2048 merge-recursive.c:2142
+#: merge-ort.c:2098 merge-recursive.c:2145
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
 "implicit directory renames tried to put these paths there: %s"
 msgstr ""
+"KONFLIK (penamaan ulang direktori implisit): Tidak dapat memetakan lebih "
+"dari satu jalur ke %s; penamaan ulang direktori implisit mencoba menempatkan "
+"jalur tersebut di sana: %s"
 
-#: merge-ort.c:2106
+#: merge-ort.c:2156
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to rename %s to; it was "
 "renamed to multiple other directories, with no destination getting a "
 "majority of the files."
 msgstr ""
+"KONFLIK (pemecahan penamaan ulang direktori): Tidak jelas kemana menamakan "
+"ulang %s; itu dinamai ulang ke banyak direktori lainnya, dengan tiada tujuan "
+"mendapatkan mayoritas berkas."
 
-#: merge-ort.c:2260 merge-recursive.c:2478
+#: merge-ort.c:2310 merge-recursive.c:2481
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
 "renamed."
 msgstr ""
+"PERINGATAN: Menghindari menerapkan penamaan ulang %s -> %s ke %s, karena %s-"
+"nya sendiri dinamai ulang."
 
-#: merge-ort.c:2400 merge-recursive.c:3261
+#: merge-ort.c:2450 merge-recursive.c:3264
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
 "moving it to %s."
 msgstr ""
+"Jalur diperbarui: %s menambahkan %s di dalam sebuah direktori yang dinamai "
+"ulang di %s; memindahkan ke %s."
 
-#: merge-ort.c:2407 merge-recursive.c:3268
+#: merge-ort.c:2457 merge-recursive.c:3271
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
 "%s; moving it to %s."
 msgstr ""
+"Jalur diperbarui: %s dinamai ulang ke %s di %s, di dalam sebuah direktori "
+"yang dinamai ulang di %s; memindahkan ke %s."
 
-#: merge-ort.c:2420 merge-recursive.c:3264
+#: merge-ort.c:2470 merge-recursive.c:3267
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed "
 "in %s, suggesting it should perhaps be moved to %s."
 msgstr ""
+"KONFLIK (lokasi berkas): %s menambahkan %s di dalam sebuah direktori yang "
+"dinamai ulang di %s, menyarankan mungkin dipindahkan ke %s."
 
-#: merge-ort.c:2428 merge-recursive.c:3271
+#: merge-ort.c:2478 merge-recursive.c:3274
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
 "was renamed in %s, suggesting it should perhaps be moved to %s."
 msgstr ""
+"KONFLIK (lokasi berkas): %s dinamai ulang ke %s di %s, di dalam sebuah "
+"direktori yang dinamai ulang di %s, menyarankan mungkin dipindahkan ke %s. "
 
-#: merge-ort.c:2584
+#: merge-ort.c:2634
 #, c-format
 msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
 msgstr ""
+"KONFLIK (penamaan ulang/penamaan ulang): %s dinamai ulang ke %s di %s dan ke "
+"%s di %s."
 
-#: merge-ort.c:2679
+#: merge-ort.c:2729
 #, c-format
 msgid ""
 "CONFLICT (rename involved in collision): rename of %s -> %s has content "
 "conflicts AND collides with another path; this may result in nested conflict "
 "markers."
 msgstr ""
+"KONFLIK (penamaan ulang terlibat di dalam tabrakan): penamaan ulang %s -> %s "
+"punya konflik konten DAN bertabrakan dengan jalur yang lain; ini mungkin "
+"menghasilkan penanda konflik bersarang."
 
-#: merge-ort.c:2698 merge-ort.c:2722
+#: merge-ort.c:2748 merge-ort.c:2772
 #, c-format
 msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
 msgstr ""
+"KONFLIK (penamaan ulang/penghapusan): %s dinamai ulang ke %s di %s, tetapi "
+"dihapus di %s."
 
-#: merge-ort.c:3212 merge-recursive.c:3022
+#: merge-ort.c:3261 merge-recursive.c:3025
 #, c-format
 msgid "cannot read object %s"
-msgstr ""
+msgstr "tidak dapat membaca objek %s"
 
-#: merge-ort.c:3215 merge-recursive.c:3025
+#: merge-ort.c:3264 merge-recursive.c:3028
 #, c-format
 msgid "object %s is not a blob"
-msgstr ""
+msgstr "objek %s bukanlah sebuah blob"
 
-#: merge-ort.c:3644
+#: merge-ort.c:3693
 #, c-format
 msgid ""
 "CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
 "%s instead."
 msgstr ""
+"KONFLIK (berkas/direktori): direktori di jalan %s dari %s; memindahkan ke %s "
+"sebagai gantinya."
 
-#: merge-ort.c:3721
+#: merge-ort.c:3770
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed both "
 "of them so each can be recorded somewhere."
 msgstr ""
+"KONFLIK (tipe berbeda): %s punya tipe berbeda pada setiap sisi; kedua-duanya "
+"dinamai ulang sehingga masing-masing dapat direkam di suatu tempat."
 
-#: merge-ort.c:3728
+#: merge-ort.c:3777
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed one "
 "of them so each can be recorded somewhere."
 msgstr ""
+"KONFLIK (tipe berbeda): %s punya tipe berbeda pada setiap sisi; salah "
+"satunya dinamai ulang sehingga masing-masing dapat direkam di suatu tempat."
 
-#: merge-ort.c:3819 merge-recursive.c:3101
+#: merge-ort.c:3866 merge-recursive.c:3104
 msgid "content"
-msgstr ""
+msgstr "konten"
 
-#: merge-ort.c:3821 merge-recursive.c:3105
+#: merge-ort.c:3868 merge-recursive.c:3108
 msgid "add/add"
-msgstr ""
+msgstr "penambahan/penambahan"
 
-#: merge-ort.c:3823 merge-recursive.c:3150
+#: merge-ort.c:3870 merge-recursive.c:3153
 msgid "submodule"
-msgstr ""
+msgstr "submodul"
 
-#: merge-ort.c:3825 merge-recursive.c:3151
+#: merge-ort.c:3872 merge-recursive.c:3154
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
-msgstr ""
+msgstr "KONFLIK (%s): Konflik penggabungan di %s"
 
-#: merge-ort.c:3869
+#: merge-ort.c:3916
 #, c-format
 msgid ""
 "CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
 "of %s left in tree."
 msgstr ""
+"KONFLIK (pengubahan/penghapusan): %s dihapus di %s dan diubah di %s. Versi "
+"%s dari %s ditinggalkan di dalam pohon."
 
-#: merge-ort.c:4165
+#: merge-ort.c:4212
 #, c-format
 msgid ""
 "Note: %s not up to date and in way of checking out conflicted version; old "
 "copy renamed to %s"
 msgstr ""
+"Catatan: %s tidak terbaru dan dalam men-checkout versi berkonflik; salinan "
+"lama dinamai ulang ke %s"
 
 #. TRANSLATORS: The %s arguments are: 1) tree hash of a merge
 #. base, and 2-3) the trees for the two trees we're merging.
 #.
-#: merge-ort.c:4534
+#: merge-ort.c:4586
 #, c-format
 msgid "collecting merge info failed for trees %s, %s, %s"
-msgstr ""
+msgstr "pengumpulan info penggabungan gagal untuk pohon %s, %s, dan %s"
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3716
+#: merge-ort-wrappers.c:13 merge-recursive.c:3723
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
 "  %s"
 msgstr ""
+"Perubahan lokal Anda terhadap berkas berikut akan ditimpa oleh "
+"penggabungan:\n"
+"  %s"
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3482 builtin/merge.c:405
+#: merge-ort-wrappers.c:33 merge-recursive.c:3485 builtin/merge.c:405
 msgid "Already up to date."
 msgstr "Sudah terbaru."
 
 #: merge-recursive.c:353
 msgid "(bad commit)\n"
-msgstr ""
+msgstr "(komit jelek)\n"
 
 #: merge-recursive.c:381
 #, c-format
 msgid "add_cacheinfo failed for path '%s'; merge aborting."
-msgstr ""
+msgstr "add_cacheinfo gagal untuk jalur '%s'; penggabungan dibatalkan."
 
 #: merge-recursive.c:390
 #, c-format
 msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
 msgstr ""
+"add_cacheinfo gagal menyegarkan untuk jalur '%s'; penggabungan dibatalkan."
 
 #: merge-recursive.c:881
 #, c-format
 msgid "failed to create path '%s'%s"
-msgstr ""
+msgstr "gagal membuat jalur '%s'%s"
 
 #: merge-recursive.c:892
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
-msgstr ""
+msgstr "Menghapus %s untuk membuat ruang untuk subdirektori\n"
 
 #: merge-recursive.c:906 merge-recursive.c:925
 msgid ": perhaps a D/F conflict?"
-msgstr ""
+msgstr ": mungkin konflik direktori/berkas?"
 
 #: merge-recursive.c:915
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
-msgstr ""
+msgstr "menolak menghilangkan berkas tak terlacak pada '%s'"
 
-#: merge-recursive.c:956 builtin/cat-file.c:41
+#: merge-recursive.c:956 builtin/cat-file.c:47
 #, c-format
 msgid "cannot read object %s '%s'"
-msgstr ""
+msgstr "tidak dapat membaca objek %s '%s'"
 
 #: merge-recursive.c:961
 #, c-format
 msgid "blob expected for %s '%s'"
-msgstr ""
+msgstr "blob diharapkan untuk %s '%s'"
 
 #: merge-recursive.c:986
 #, c-format
 msgid "failed to open '%s': %s"
-msgstr ""
+msgstr "gagal membuka '%s': %s"
 
 #: merge-recursive.c:997
 #, c-format
 msgid "failed to symlink '%s': %s"
-msgstr ""
+msgstr "gagal menautkan simbolik '%s': %s"
 
 #: merge-recursive.c:1002
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
-msgstr ""
+msgstr "tidak tahu apa yang dilakukan dengan %06o %s '%s'"
 
-#: merge-recursive.c:1233 merge-recursive.c:1246
+#: merge-recursive.c:1236 merge-recursive.c:1249
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
-msgstr ""
+msgstr "Memaju-cepat submodul %s ke komit berikut:"
 
-#: merge-recursive.c:1236 merge-recursive.c:1249
+#: merge-recursive.c:1239 merge-recursive.c:1252
 #, c-format
 msgid "Fast-forwarding submodule %s"
-msgstr ""
+msgstr "Memaju-cepat submodul %s"
 
-#: merge-recursive.c:1273
+#: merge-recursive.c:1276
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
+"Gagal menggabungkan submodul %s (penggabungan komit berikutnya tidak "
+"ditemukan)"
 
-#: merge-recursive.c:1277
+#: merge-recursive.c:1280
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
-msgstr ""
+msgstr "Gagal menggabungkan submodul %s (bukan maju-cepat)"
 
-#: merge-recursive.c:1278
+#: merge-recursive.c:1281
 msgid "Found a possible merge resolution for the submodule:\n"
-msgstr ""
+msgstr "Sebuah resolusi penggabungan yang mungkin ditemukan untuk submodul:\n"
 
-#: merge-recursive.c:1290
+#: merge-recursive.c:1293
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
-msgstr ""
+msgstr "Gagal menggabungkan submodul %s (banyak penggabungan ditemukan)"
 
-#: merge-recursive.c:1434
+#: merge-recursive.c:1437
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr ""
+"Kesalahan: Menolak menghilangkan berkas tak terlacak pada %s; menulis ke %s "
+"sebagai gantinya."
 
-#: merge-recursive.c:1506
+#: merge-recursive.c:1509
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
 "in tree."
 msgstr ""
+"KONFLIK (%s/penghapusan): %s dihapus di %s dan %s di %s. Versi %s dari %s "
+"ditinggalkan di dalam pohon."
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1514
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
 "left in tree."
 msgstr ""
+"KONFLIK (%s/penghapusan): %s dihapus di %s dan %s ke %s di %s. Versi %s dari "
+"%s ditinggalkan di dalam pohon."
 
-#: merge-recursive.c:1518
+#: merge-recursive.c:1521
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
 "in tree at %s."
 msgstr ""
+"KONFLIK (%s/penghapusan): %s dihapus di %s dan %s di %s. Versi %s dari %s "
+"ditinggalkan di dalam pohon pada %s."
 
-#: merge-recursive.c:1523
+#: merge-recursive.c:1526
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
 "left in tree at %s."
 msgstr ""
+"KONFLIK (%s/penghapusan): %s dihapus di %s dan %s ke %s di %s. Versi %s dari "
+"%s ditinggalkan di dalam pohon pada %s."
 
-#: merge-recursive.c:1558
+#: merge-recursive.c:1561
 msgid "rename"
-msgstr ""
+msgstr "penamaan ulang"
 
-#: merge-recursive.c:1558
+#: merge-recursive.c:1561
 msgid "renamed"
-msgstr ""
+msgstr "dinamai ulang"
 
-#: merge-recursive.c:1609 merge-recursive.c:2515 merge-recursive.c:3178
+#: merge-recursive.c:1612 merge-recursive.c:2518 merge-recursive.c:3181
 #, c-format
 msgid "Refusing to lose dirty file at %s"
-msgstr ""
+msgstr "Menolak menghilangkan berkas kotor pada %s"
 
-#: merge-recursive.c:1619
+#: merge-recursive.c:1622
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
+"Menolak menghilangkan berkas tak terlacak pada %s, bahkan jika itu berjalan."
 
-#: merge-recursive.c:1677
+#: merge-recursive.c:1680
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
+"KONFLIK (penamaan ulang/penambahan): Penamaan ulang %s-%s di %s. %s "
+"ditambahkan di %s"
 
-#: merge-recursive.c:1708
+#: merge-recursive.c:1711
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr ""
+"%s adalah sebuah direktori dalam %s menambahkan sebagai %s sebagai gantinya"
 
-#: merge-recursive.c:1713
+#: merge-recursive.c:1716
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr ""
+"Menolak menghilangkan berkas tak terlacak pada %s; menambahkan sebagai %s "
+"sebagai gantinya"
 
-#: merge-recursive.c:1740
+#: merge-recursive.c:1743
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
 "\"->\"%s\" in \"%s\"%s"
 msgstr ""
+"KONFLIK (penamaan ulang/penamaan ulang): Penamaan ulang \"%s\"->\"%s\" di "
+"dalam cabang \"%s\" penamaan ulang \"%s\"->\"%s\" di \"%s\"%s"
 
-#: merge-recursive.c:1745
+#: merge-recursive.c:1748
 msgid " (left unresolved)"
-msgstr ""
+msgstr " dibiarkan tak diselesaikan"
 
-#: merge-recursive.c:1837
+#: merge-recursive.c:1840
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
+"KONFLIK (penamaan ulang/penamaan ulang): Penamaan ulang %s->%s di %s. "
+"Penamaan ulang %s->%s di %s"
 
-#: merge-recursive.c:2100
+#: merge-recursive.c:2103
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
 "directory %s was renamed to multiple other directories, with no destination "
 "getting a majority of the files."
 msgstr ""
+"KONFLIK (pemecahan penamaan ulang direktori): Tidak jelas dimana untuk "
+"menempatkan %s karena direktori %s dinamai ulang ke banyak direktori "
+"lainnya, dengan tidak ada tujuan yang mendapatkan mayoritas berkas."
 
-#: merge-recursive.c:2234
+#: merge-recursive.c:2237
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
 ">%s in %s"
 msgstr ""
+"KONFLIK (penamaan ulang/penamaan ulang): Penamaan ulang direktori %s->%s di "
+"%s. Penamaan ulang %s->%s di %s"
 
-#: merge-recursive.c:3089
+#: merge-recursive.c:3092
 msgid "modify"
-msgstr ""
+msgstr "ubah"
 
-#: merge-recursive.c:3089
+#: merge-recursive.c:3092
 msgid "modified"
-msgstr ""
+msgstr "diubah"
 
-#: merge-recursive.c:3128
+#: merge-recursive.c:3131
 #, c-format
 msgid "Skipped %s (merged same as existing)"
-msgstr ""
+msgstr "%s dilewatkan (digabungkan sama seperti yang ada)"
 
-#: merge-recursive.c:3181
+#: merge-recursive.c:3184
 #, c-format
 msgid "Adding as %s instead"
-msgstr ""
+msgstr "Menambahkan sebagai %s sebagai gantinya"
 
-#: merge-recursive.c:3385
+#: merge-recursive.c:3388
 #, c-format
 msgid "Removing %s"
-msgstr ""
+msgstr "Menghapus %s"
 
-#: merge-recursive.c:3408
+#: merge-recursive.c:3411
 msgid "file/directory"
-msgstr ""
+msgstr "berkas/direktori"
 
-#: merge-recursive.c:3413
+#: merge-recursive.c:3416
 msgid "directory/file"
-msgstr ""
+msgstr "direktori/berkas"
 
-#: merge-recursive.c:3420
+#: merge-recursive.c:3423
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
+"KONFLIK (%s): Ada direktori dengan nama %s di %s. Menambahakn %s sebagai %s"
 
-#: merge-recursive.c:3429
+#: merge-recursive.c:3432
 #, c-format
 msgid "Adding %s"
-msgstr ""
+msgstr "Menambahkan %s"
 
-#: merge-recursive.c:3438
+#: merge-recursive.c:3441
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
-msgstr ""
+msgstr "KONFLIK (penambahan/penambahan): Konflik penggabungan di %s"
 
-#: merge-recursive.c:3491
+#: merge-recursive.c:3494
 #, c-format
 msgid "merging of trees %s and %s failed"
-msgstr ""
+msgstr "penggabungan pohon %s dan %s gagal"
 
-#: merge-recursive.c:3585
+#: merge-recursive.c:3588
 msgid "Merging:"
-msgstr ""
+msgstr "Menggabungkan:"
 
-#: merge-recursive.c:3598
+#: merge-recursive.c:3601
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%u leluhur umum ditemukan:"
+msgstr[1] "%u leluhur umum ditemukan:"
 
-#: merge-recursive.c:3648
+#: merge-recursive.c:3651
 msgid "merge returned no commit"
-msgstr ""
+msgstr "penggabungan tidak mengembalikan komit"
 
-#: merge-recursive.c:3816
+#: merge-recursive.c:3823
 #, c-format
 msgid "Could not parse object '%s'"
-msgstr ""
+msgstr "Tidak dapat menguraikan objek '%s'"
 
-#: merge-recursive.c:3834 builtin/merge.c:720 builtin/merge.c:906
+#: merge-recursive.c:3841 builtin/merge.c:720 builtin/merge.c:912
 #: builtin/stash.c:489
 msgid "Unable to write index."
-msgstr ""
+msgstr "Tidak dapat menulis indeks."
 
 #: merge.c:41
 msgid "failed to read the cache"
 msgstr "gagal membaca tembolok"
 
-#: merge.c:102 rerere.c:704 builtin/am.c:1988 builtin/am.c:2022
-#: builtin/checkout.c:598 builtin/checkout.c:853 builtin/clone.c:706
+#: merge.c:102 rerere.c:705 builtin/am.c:1989 builtin/am.c:2023
+#: builtin/checkout.c:603 builtin/checkout.c:865 builtin/clone.c:714
 #: builtin/stash.c:269
 msgid "unable to write new index file"
 msgstr "gagal menulis berkas indeks baru"
 
-#: midx.c:78
+#: midx.c:79
 msgid "multi-pack-index OID fanout is of the wrong size"
 msgstr "OID kipas-keluar indeks multipak salah ukuran"
 
-#: midx.c:111
+#: midx.c:112
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "berkas indeks multipak %s terlalu kecil"
 
-#: midx.c:127
+#: midx.c:128
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr ""
 "tanda tangan indeks multipak 0x%08x tidak cocok dengan tanda tangan 0x%08x"
 
-#: midx.c:132
+#: midx.c:133
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "versi indeks multipak %d tidak dikenal"
 
-#: midx.c:137
+#: midx.c:138
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr "versi hash indeks multipak %u tidak cocok dengan versi %u"
 
-#: midx.c:154
+#: midx.c:155
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "indeks multipak kehilangan bingkah pack-name yang diperlukan"
 
-#: midx.c:156
+#: midx.c:157
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "indeks multipak kehilangan bingkah OID kipas keluar yang diperlukan"
 
-#: midx.c:158
+#: midx.c:159
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "indeks multipak kehilangan bingkah pencarian OID yang diperlukan"
 
-#: midx.c:160
+#: midx.c:161
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "indeks multipak kehilangan bingkah offset objek yang diperlukan"
 
-#: midx.c:176
+#: midx.c:180
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr "nama pak indeks multipak tidak berurutan: '%s' sebelum '%s'"
 
-#: midx.c:224
+#: midx.c:228
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "pack-int-id jelek: %u (total pak %u)"
 
-#: midx.c:274
+#: midx.c:278
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr "indeks multipak simpan offset 64-bit, tapi off_t terlalu kecil"
 
-#: midx.c:505
+#: midx.c:509
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "gagal menambah berkas pak '%s'"
 
-#: midx.c:511
+#: midx.c:515
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "gagal membuka indeks pak '%s'"
 
-#: midx.c:579
+#: midx.c:583
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "gagal melokasi objek %d di dalam berkas pak"
 
-#: midx.c:895
+#: midx.c:911
 msgid "cannot store reverse index file"
 msgstr "tidak dapat menyimpan berkas indeks balik"
 
-#: midx.c:993
+#: midx.c:1009
 #, c-format
 msgid "could not parse line: %s"
 msgstr "tidak dapat menguraikan baris: %s"
 
-#: midx.c:995
+#: midx.c:1011
 #, c-format
 msgid "malformed line: %s"
 msgstr "baris jelek '%s'."
 
-#: midx.c:1162
+#: midx.c:1181
 msgid "ignoring existing multi-pack-index; checksum mismatch"
 msgstr "abaikan indeks multipak yang sudah ada; checksum tidak cocok"
 
-#: midx.c:1187
+#: midx.c:1206
 msgid "could not load pack"
 msgstr "tidak dapat memuat pak"
 
-#: midx.c:1193
+#: midx.c:1212
 #, c-format
 msgid "could not open index for %s"
 msgstr "tidak dapat membuka indeks untuk %s"
 
-#: midx.c:1204
+#: midx.c:1223
 msgid "Adding packfiles to multi-pack-index"
 msgstr "Menambahkan berkas pak ke indeks multipak"
 
-#: midx.c:1247
+#: midx.c:1266
 #, c-format
 msgid "unknown preferred pack: '%s'"
 msgstr "pak yang disukai tidak dikenal: '%s'"
 
-#: midx.c:1292
+#: midx.c:1311
 #, c-format
 msgid "cannot select preferred pack %s with no objects"
 msgstr "tidak dapat memilih pak yang disukai %s tanpa objek"
 
-#: midx.c:1324
+#: midx.c:1343
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "tidak melihat berkas pak %s untuk dijeblokkan"
 
-#: midx.c:1370
+#: midx.c:1389
 #, c-format
 msgid "preferred pack '%s' is expired"
 msgstr "pak yang disukai '%s' kadaluarsa"
 
-#: midx.c:1383
+#: midx.c:1402
 msgid "no pack files to index."
 msgstr "tidak ada berkas pak untuk diindeks."
 
-#: midx.c:1420
+#: midx.c:1409
+msgid "refusing to write multi-pack .bitmap without any objects"
+msgstr "menolak menulis .bitmap multipak tanpa objek apapun"
+
+#: midx.c:1451
 msgid "could not write multi-pack bitmap"
 msgstr "tidak dapat menulis bitmap multipak"
 
-#: midx.c:1430
+#: midx.c:1461
 msgid "could not write multi-pack-index"
 msgstr "gagal menulis indeks multipak"
 
-#: midx.c:1489 builtin/clean.c:37
+#: midx.c:1520 builtin/clean.c:37
 #, c-format
 msgid "failed to remove %s"
 msgstr "gagal menghapus %s"
 
-#: midx.c:1522
+#: midx.c:1553
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "gagal membersihkan indeks multipak pada %s"
 
-#: midx.c:1585
+#: midx.c:1616
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr "berkas indeks multipak ada, tetapi gagal diurai"
 
-#: midx.c:1593
+#: midx.c:1624
 msgid "incorrect checksum"
 msgstr "checksum salah"
 
-#: midx.c:1596
+#: midx.c:1627
 msgid "Looking for referenced packfiles"
 msgstr "Mencari berkas pak yang direferensikan"
 
-#: midx.c:1611
+#: midx.c:1642
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
@@ -5310,55 +5534,55 @@ msgstr ""
 "kipas-keluar oid tidak berurutan: fanout[%d] =%<PRIx32> > %<PRIx32> = "
 "fanout[%d]"
 
-#: midx.c:1616
+#: midx.c:1647
 msgid "the midx contains no oid"
 msgstr "midx tidak berisi oid"
 
-#: midx.c:1625
+#: midx.c:1656
 msgid "Verifying OID order in multi-pack-index"
 msgstr "Memverifikasi urutan OID di dalam indeks multipak"
 
-#: midx.c:1634
+#: midx.c:1665
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "urutan pencarian oid tidak berurutan: oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1654
+#: midx.c:1685
 msgid "Sorting objects by packfile"
 msgstr "Mengurutkan objek oleh berkas pak"
 
-#: midx.c:1661
+#: midx.c:1692
 msgid "Verifying object offsets"
 msgstr "Memverifikasi offset objek"
 
-#: midx.c:1677
+#: midx.c:1708
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "gagal memuat entri pak untuk oid[%d] = %s"
 
-#: midx.c:1683
+#: midx.c:1714
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "gagal memuat indeks pak untuk berkas pak %s"
 
-#: midx.c:1692
+#: midx.c:1723
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "offset objek salah untuk oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 
-#: midx.c:1719
+#: midx.c:1750
 msgid "Counting referenced objects"
 msgstr "Menghitung objek tereferensi"
 
-#: midx.c:1729
+#: midx.c:1760
 msgid "Finding and deleting unreferenced packfiles"
 msgstr "Mencari dan menghapus berkas pak tak tereferensi"
 
-#: midx.c:1921
+#: midx.c:1952
 msgid "could not start pack-objects"
 msgstr "tidak dapat memulai pack-objects"
 
-#: midx.c:1941
+#: midx.c:1972
 msgid "could not finish pack-objects"
 msgstr "tidak dapat menyelesaikan pack-objects"
 
@@ -5377,7 +5601,7 @@ msgstr ""
 msgid "unable to join lazy_name thread: %s"
 msgstr ""
 
-#: notes-merge.c:277
+#: notes-merge.c:276
 #, c-format
 msgid ""
 "You have not concluded your previous notes merge (%s exists).\n"
@@ -5385,7 +5609,7 @@ msgid ""
 "commit/abort the previous merge before you start a new notes merge."
 msgstr ""
 
-#: notes-merge.c:284
+#: notes-merge.c:283
 #, c-format
 msgid "You have not concluded your notes merge (%s exists)."
 msgstr ""
@@ -5413,271 +5637,340 @@ msgstr ""
 msgid "Bad %s value: '%s'"
 msgstr ""
 
-#: object-file.c:456
+#: object-file.c:457
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr ""
 
-#: object-file.c:514
+#: object-file.c:515
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr ""
 
-#: object-file.c:588
+#: object-file.c:589
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr ""
 
-#: object-file.c:595
+#: object-file.c:596
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr ""
 
-#: object-file.c:638
+#: object-file.c:639
 msgid "unable to fdopen alternates lockfile"
 msgstr ""
 
-#: object-file.c:656
+#: object-file.c:657
 msgid "unable to read alternates file"
 msgstr ""
 
-#: object-file.c:663
+#: object-file.c:664
 msgid "unable to move new alternates file into place"
 msgstr ""
 
-#: object-file.c:741
+#: object-file.c:742
 #, c-format
 msgid "path '%s' does not exist"
 msgstr ""
 
-#: object-file.c:762
+#: object-file.c:763
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr ""
 
-#: object-file.c:768
+#: object-file.c:769
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr ""
 
-#: object-file.c:774
+#: object-file.c:775
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr ""
 
-#: object-file.c:782
+#: object-file.c:783
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr ""
 
-#: object-file.c:813
+#: object-file.c:814
 #, c-format
 msgid "could not find object directory matching %s"
 msgstr ""
 
-#: object-file.c:863
+#: object-file.c:864
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr ""
 
-#: object-file.c:1013
+#: object-file.c:1014
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr ""
 
-#: object-file.c:1048
+#: object-file.c:1049
 #, c-format
 msgid "mmap failed%s"
 msgstr ""
 
-#: object-file.c:1214
+#: object-file.c:1230
 #, c-format
 msgid "object file %s is empty"
 msgstr ""
 
-#: object-file.c:1333 object-file.c:2542
+#: object-file.c:1349 object-file.c:2588
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr ""
 
-#: object-file.c:1335 object-file.c:2546
+#: object-file.c:1351 object-file.c:2592
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr ""
 
-#: object-file.c:1457
+#: object-file.c:1473
 #, c-format
 msgid "unable to parse %s header"
 msgstr ""
 
-#: object-file.c:1459
+#: object-file.c:1475
 msgid "invalid object type"
 msgstr ""
 
-#: object-file.c:1470
+#: object-file.c:1486
 #, c-format
 msgid "unable to unpack %s header"
 msgstr ""
 
-#: object-file.c:1474
+#: object-file.c:1490
 #, c-format
 msgid "header for %s too long, exceeds %d bytes"
 msgstr ""
 
-#: object-file.c:1704
+#: object-file.c:1720
 #, c-format
 msgid "failed to read object %s"
 msgstr ""
 
-#: object-file.c:1708
+#: object-file.c:1724
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr ""
 
-#: object-file.c:1712
+#: object-file.c:1728
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr ""
 
-#: object-file.c:1716
+#: object-file.c:1732
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr ""
 
-#: object-file.c:1821
+#: object-file.c:1855
 #, c-format
 msgid "unable to write file %s"
 msgstr ""
 
-#: object-file.c:1828
+#: object-file.c:1862
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr ""
 
-#: object-file.c:1835
+#: object-file.c:1869
 msgid "file write error"
 msgstr ""
 
-#: object-file.c:1858
+#: object-file.c:1904
 msgid "error when closing loose object file"
 msgstr ""
 
-#: object-file.c:1925
+#: object-file.c:1971
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr ""
 
-#: object-file.c:1927
+#: object-file.c:1973
 msgid "unable to create temporary file"
 msgstr ""
 
-#: object-file.c:1951
+#: object-file.c:1997
 msgid "unable to write loose object file"
 msgstr ""
 
-#: object-file.c:1957
+#: object-file.c:2003
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr ""
 
-#: object-file.c:1961
+#: object-file.c:2007
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr ""
 
-#: object-file.c:1965
+#: object-file.c:2011
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr ""
 
-#: object-file.c:1976 builtin/pack-objects.c:1243
+#: object-file.c:2022 builtin/pack-objects.c:1251
 #, c-format
 msgid "failed utime() on %s"
 msgstr ""
 
-#: object-file.c:2054
+#: object-file.c:2100
 #, c-format
 msgid "cannot read object for %s"
 msgstr ""
 
-#: object-file.c:2105
+#: object-file.c:2151
 msgid "corrupt commit"
 msgstr ""
 
-#: object-file.c:2113
+#: object-file.c:2159
 msgid "corrupt tag"
 msgstr ""
 
-#: object-file.c:2213
+#: object-file.c:2259
 #, c-format
 msgid "read error while indexing %s"
 msgstr ""
 
-#: object-file.c:2216
+#: object-file.c:2262
 #, c-format
 msgid "short read while indexing %s"
 msgstr ""
 
-#: object-file.c:2289 object-file.c:2299
+#: object-file.c:2335 object-file.c:2345
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr ""
 
-#: object-file.c:2305
+#: object-file.c:2351
 #, c-format
 msgid "%s: unsupported file type"
 msgstr ""
 
-#: object-file.c:2329 builtin/fetch.c:1453
+#: object-file.c:2375 builtin/fetch.c:1494
 #, c-format
 msgid "%s is not a valid object"
 msgstr ""
 
-#: object-file.c:2331
+#: object-file.c:2377
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr ""
 
-#: object-file.c:2358
+#: object-file.c:2404
 #, c-format
 msgid "unable to open %s"
 msgstr "tidak dapat membuka %s"
 
-#: object-file.c:2553
+#: object-file.c:2599
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr ""
 
-#: object-file.c:2576
+#: object-file.c:2622
 #, c-format
 msgid "unable to mmap %s"
 msgstr ""
 
-#: object-file.c:2582
+#: object-file.c:2628
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr ""
 
-#: object-file.c:2587
+#: object-file.c:2633
 #, c-format
 msgid "unable to parse header of %s"
 msgstr ""
 
-#: object-file.c:2598
+#: object-file.c:2644
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr ""
 
-#: object-name.c:480
+#. TRANSLATORS: This is a line of ambiguous object
+#. output shown when we cannot look up or parse the
+#. object in question. E.g. "deadbeef [bad object]".
+#.
+#: object-name.c:382
+#, c-format
+msgid "%s [bad object]"
+msgstr ""
+
+#. TRANSLATORS: This is a line of ambiguous commit
+#. object output. E.g.:
+#. *
+#.    "deadbeef commit 2021-01-01 - Some Commit Message"
+#.
+#: object-name.c:407
+#, c-format
+msgid "%s commit %s - %s"
+msgstr ""
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output. E.g.:
+#. *
+#.    "deadbeef tag 2022-01-01 - Some Tag Message"
+#. *
+#. The second argument is the YYYY-MM-DD found
+#. in the tag.
+#. *
+#. The third argument is the "tag" string
+#. from object.c.
+#.
+#: object-name.c:428
+#, c-format
+msgid "%s tag %s - %s"
+msgstr ""
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output where we couldn't parse
+#. the tag itself. E.g.:
+#. *
+#.    "deadbeef [bad tag, could not parse it]"
+#.
+#: object-name.c:439
+#, c-format
+msgid "%s [bad tag, could not parse it]"
+msgstr ""
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef tree".
+#.
+#: object-name.c:447
+#, c-format
+msgid "%s tree"
+msgstr ""
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef blob".
+#.
+#: object-name.c:453
+#, c-format
+msgid "%s blob"
+msgstr ""
+
+#: object-name.c:569
 #, c-format
 msgid "short object ID %s is ambiguous"
 msgstr ""
 
-#: object-name.c:491
-msgid "The candidates are:"
+#. TRANSLATORS: The argument is the list of ambiguous
+#. objects composed in show_ambiguous_object(). See
+#. its "TRANSLATORS" comments for details.
+#.
+#: object-name.c:591
+#, c-format
+msgid ""
+"The candidates are:\n"
+"%s"
 msgstr ""
 
-#: object-name.c:790
+#: object-name.c:888
 msgid ""
 "Git normally never creates a ref that ends with 40 hex characters\n"
 "because it will be ignored when you just specify 40-hex. These refs\n"
@@ -5690,62 +5983,67 @@ msgid ""
 "running \"git config advice.objectNameWarning false\""
 msgstr ""
 
-#: object-name.c:910
+#: object-name.c:1008
 #, c-format
 msgid "log for '%.*s' only goes back to %s"
 msgstr ""
 
-#: object-name.c:918
+#: object-name.c:1016
 #, c-format
 msgid "log for '%.*s' only has %d entries"
 msgstr ""
 
-#: object-name.c:1696
+#: object-name.c:1794
 #, c-format
 msgid "path '%s' exists on disk, but not in '%.*s'"
 msgstr ""
 
-#: object-name.c:1702
+#: object-name.c:1800
 #, c-format
 msgid ""
 "path '%s' exists, but not '%s'\n"
 "hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
 msgstr ""
 
-#: object-name.c:1711
+#: object-name.c:1809
 #, c-format
 msgid "path '%s' does not exist in '%.*s'"
 msgstr ""
 
-#: object-name.c:1739
+#: object-name.c:1837
 #, c-format
 msgid ""
 "path '%s' is in the index, but not at stage %d\n"
 "hint: Did you mean ':%d:%s'?"
 msgstr ""
 
-#: object-name.c:1755
+#: object-name.c:1853
 #, c-format
 msgid ""
 "path '%s' is in the index, but not '%s'\n"
 "hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
 msgstr ""
 
-#: object-name.c:1763
+#: object-name.c:1861
 #, c-format
 msgid "path '%s' exists on disk, but not in the index"
 msgstr ""
 
-#: object-name.c:1765
+#: object-name.c:1863
 #, c-format
 msgid "path '%s' does not exist (neither on disk nor in the index)"
 msgstr ""
 
-#: object-name.c:1778
+#: object-name.c:1876
 msgid "relative path syntax can't be used outside working tree"
 msgstr ""
 
-#: object-name.c:1916
+#: object-name.c:1901
+#, c-format
+msgid "<object>:<path> required, only <object> '%s' given"
+msgstr ""
+
+#: object-name.c:2014
 #, c-format
 msgid "invalid object name '%.*s'."
 msgstr ""
@@ -5770,7 +6068,7 @@ msgstr ""
 msgid "unable to parse object: %s"
 msgstr ""
 
-#: object.c:283 object.c:295
+#: object.c:283 object.c:294
 #, c-format
 msgid "hash mismatch %s"
 msgstr ""
@@ -5779,21 +6077,21 @@ msgstr ""
 msgid "multi-pack bitmap is missing required reverse index"
 msgstr ""
 
-#: pack-bitmap.c:429
+#: pack-bitmap.c:433
 msgid "load_reverse_index: could not open pack"
 msgstr ""
 
-#: pack-bitmap.c:1069 pack-bitmap.c:1075 builtin/pack-objects.c:2424
+#: pack-bitmap.c:1072 pack-bitmap.c:1078 builtin/pack-objects.c:2432
 #, c-format
 msgid "unable to get size of %s"
 msgstr ""
 
-#: pack-bitmap.c:1935
+#: pack-bitmap.c:1937
 #, c-format
 msgid "could not find %s in pack %s at offset %<PRIuMAX>"
 msgstr ""
 
-#: pack-bitmap.c:1971 builtin/rev-list.c:92
+#: pack-bitmap.c:1973 builtin/rev-list.c:91
 #, c-format
 msgid "unable to get disk usage of %s"
 msgstr ""
@@ -5837,7 +6135,7 @@ msgstr ""
 msgid "failed to make %s readable"
 msgstr ""
 
-#: pack-write.c:520
+#: pack-write.c:521
 #, c-format
 msgid "could not write '%s' promisor file"
 msgstr ""
@@ -6171,234 +6469,238 @@ msgstr ""
 msgid "Removing duplicate objects"
 msgstr ""
 
-#: range-diff.c:67
+#: range-diff.c:68
 msgid "could not start `log`"
 msgstr ""
 
-#: range-diff.c:69
+#: range-diff.c:70
 msgid "could not read `log` output"
 msgstr ""
 
-#: range-diff.c:97 sequencer.c:5602
+#: range-diff.c:98 sequencer.c:5575
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr ""
 
-#: range-diff.c:111
+#: range-diff.c:109
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
 "'%s'"
 msgstr ""
 
-#: range-diff.c:137
+#: range-diff.c:132
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr ""
 
-#: range-diff.c:304
+#: range-diff.c:300
 msgid "failed to generate diff"
 msgstr ""
 
-#: range-diff.c:562 range-diff.c:564
+#: range-diff.c:558 range-diff.c:560
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr ""
 
-#: read-cache.c:723
+#: read-cache.c:737
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr ""
 
-#: read-cache.c:739
+#: read-cache.c:753
 msgid "cannot create an empty blob in the object database"
 msgstr ""
 
-#: read-cache.c:761
+#: read-cache.c:775
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr ""
 
-#: read-cache.c:766 builtin/submodule--helper.c:3242
+#: read-cache.c:780 builtin/submodule--helper.c:3359
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr ""
 
-#: read-cache.c:818
+#: read-cache.c:832
 #, c-format
 msgid "unable to index file '%s'"
 msgstr ""
 
-#: read-cache.c:837
+#: read-cache.c:851
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr ""
 
-#: read-cache.c:848
+#: read-cache.c:862
 #, c-format
 msgid "unable to stat '%s'"
 msgstr ""
 
-#: read-cache.c:1386
+#: read-cache.c:1404
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr ""
 
-#: read-cache.c:1601
+#: read-cache.c:1619
 msgid "Refresh index"
 msgstr ""
 
-#: read-cache.c:1733
+#: read-cache.c:1751
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
 "Using version %i"
 msgstr ""
 
-#: read-cache.c:1743
+#: read-cache.c:1761
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
 "Using version %i"
 msgstr ""
 
-#: read-cache.c:1799
+#: read-cache.c:1817
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr ""
 
-#: read-cache.c:1802
+#: read-cache.c:1820
 #, c-format
 msgid "bad index version %d"
 msgstr ""
 
-#: read-cache.c:1811
+#: read-cache.c:1829
 msgid "bad index file sha1 signature"
 msgstr ""
 
-#: read-cache.c:1845
+#: read-cache.c:1863
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr ""
 
-#: read-cache.c:1847
+#: read-cache.c:1865
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr ""
 
-#: read-cache.c:1884
+#: read-cache.c:1902
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr ""
 
-#: read-cache.c:1900
+#: read-cache.c:1918
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr ""
 
-#: read-cache.c:1957
+#: read-cache.c:1975
 msgid "unordered stage entries in index"
 msgstr ""
 
-#: read-cache.c:1960
+#: read-cache.c:1978
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr ""
 
-#: read-cache.c:1963
+#: read-cache.c:1981
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr ""
 
-#: read-cache.c:2078 read-cache.c:2384 rerere.c:549 rerere.c:583 rerere.c:1095
-#: submodule.c:1662 builtin/add.c:600 builtin/check-ignore.c:183
-#: builtin/checkout.c:527 builtin/checkout.c:719 builtin/clean.c:1013
-#: builtin/commit.c:378 builtin/diff-tree.c:122 builtin/grep.c:519
-#: builtin/mv.c:148 builtin/reset.c:499 builtin/rm.c:293
-#: builtin/submodule--helper.c:327 builtin/submodule--helper.c:3202
+#: read-cache.c:2096 read-cache.c:2402 rerere.c:549 rerere.c:583 rerere.c:1096
+#: submodule.c:1831 builtin/add.c:586 builtin/check-ignore.c:183
+#: builtin/checkout.c:532 builtin/checkout.c:724 builtin/clean.c:1016
+#: builtin/commit.c:379 builtin/diff-tree.c:122 builtin/grep.c:521
+#: builtin/mv.c:148 builtin/reset.c:506 builtin/rm.c:293
+#: builtin/submodule--helper.c:335 builtin/submodule--helper.c:3319
 msgid "index file corrupt"
 msgstr ""
 
-#: read-cache.c:2222
+#: read-cache.c:2240
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr ""
 
-#: read-cache.c:2235
+#: read-cache.c:2253
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr ""
 
-#: read-cache.c:2268
+#: read-cache.c:2286
 #, c-format
 msgid "%s: index file open failed"
 msgstr ""
 
-#: read-cache.c:2272
+#: read-cache.c:2290
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr ""
 
-#: read-cache.c:2276
+#: read-cache.c:2294
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr ""
 
-#: read-cache.c:2280
+#: read-cache.c:2298
 #, c-format
 msgid "%s: unable to map index file%s"
 msgstr ""
 
-#: read-cache.c:2323
+#: read-cache.c:2341
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr ""
 
-#: read-cache.c:2350
+#: read-cache.c:2368
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr ""
 
-#: read-cache.c:2396
+#: read-cache.c:2414
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr ""
 
-#: read-cache.c:2455
+#: read-cache.c:2473
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr ""
 
-#: read-cache.c:3086 strbuf.c:1191 wrapper.c:641 builtin/merge.c:1150
+#: read-cache.c:3032
+msgid "cannot write split index for a sparse index"
+msgstr ""
+
+#: read-cache.c:3114 strbuf.c:1192 wrapper.c:717 builtin/merge.c:1156
 #, c-format
 msgid "could not close '%s'"
 msgstr ""
 
-#: read-cache.c:3129
+#: read-cache.c:3157
 msgid "failed to convert to a sparse-index"
 msgstr ""
 
-#: read-cache.c:3200
+#: read-cache.c:3228
 #, c-format
 msgid "could not stat '%s'"
 msgstr ""
 
-#: read-cache.c:3213
+#: read-cache.c:3241
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr ""
 
-#: read-cache.c:3225
+#: read-cache.c:3253
 #, c-format
 msgid "unable to unlink: %s"
 msgstr ""
 
-#: read-cache.c:3254
+#: read-cache.c:3282
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr ""
 
-#: read-cache.c:3411
+#: read-cache.c:3439
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr ""
@@ -6518,9 +6820,9 @@ msgstr ""
 "dibatalkan.\n"
 "\n"
 
-#: rebase-interactive.c:113 rerere.c:469 rerere.c:676 sequencer.c:3883
-#: sequencer.c:3909 sequencer.c:5708 builtin/fsck.c:328 builtin/gc.c:1791
-#: builtin/rebase.c:190
+#: rebase-interactive.c:113 rerere.c:469 rerere.c:677 sequencer.c:3879
+#: sequencer.c:3905 sequencer.c:5681 builtin/fsck.c:328 builtin/gc.c:1791
+#: builtin/rebase.c:191
 #, c-format
 msgid "could not write '%s'"
 msgstr "tidak dapat menulis '%s'"
@@ -6561,7 +6863,7 @@ msgstr ""
 msgid "%s: 'preserve' superseded by 'merges'"
 msgstr "%s: 'preserve' digantikan oleh 'merges'"
 
-#: ref-filter.c:42 wt-status.c:2048
+#: ref-filter.c:42 wt-status.c:2057
 msgid "gone"
 msgstr ""
 
@@ -6727,81 +7029,91 @@ msgstr ""
 msgid "--format=%.*s cannot be used with --python, --shell, --tcl"
 msgstr ""
 
-#: ref-filter.c:1706
+#: ref-filter.c:1707
 #, c-format
 msgid "(no branch, rebasing %s)"
 msgstr ""
 
-#: ref-filter.c:1709
+#: ref-filter.c:1710
 #, c-format
 msgid "(no branch, rebasing detached HEAD %s)"
 msgstr ""
 
-#: ref-filter.c:1712
+#: ref-filter.c:1713
 #, c-format
 msgid "(no branch, bisect started on %s)"
 msgstr ""
 
-#: ref-filter.c:1716
+#: ref-filter.c:1717
 #, c-format
 msgid "(HEAD detached at %s)"
 msgstr ""
 
-#: ref-filter.c:1719
+#: ref-filter.c:1720
 #, c-format
 msgid "(HEAD detached from %s)"
 msgstr ""
 
-#: ref-filter.c:1722
+#: ref-filter.c:1723
 msgid "(no branch)"
 msgstr ""
 
-#: ref-filter.c:1754 ref-filter.c:1972
+#: ref-filter.c:1755 ref-filter.c:1973
 #, c-format
 msgid "missing object %s for %s"
 msgstr ""
 
-#: ref-filter.c:1764
+#: ref-filter.c:1765
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr ""
 
-#: ref-filter.c:2155
+#: ref-filter.c:2156
 #, c-format
 msgid "malformed object at '%s'"
 msgstr ""
 
-#: ref-filter.c:2245
+#: ref-filter.c:2246
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr ""
 
-#: ref-filter.c:2250 refs.c:676
+#: ref-filter.c:2251 refs.c:672
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr ""
 
-#: ref-filter.c:2629
+#: ref-filter.c:2630
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr ""
 
-#: ref-filter.c:2740
+#: ref-filter.c:2741
 #, c-format
 msgid "malformed object name %s"
 msgstr ""
 
-#: ref-filter.c:2745
+#: ref-filter.c:2746
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr ""
 
-#: refs.c:261
+#: reflog.c:407
+#, c-format
+msgid "not a reflog: %s"
+msgstr "bukan sebuah log referensi: %s"
+
+#: reflog.c:410
+#, c-format
+msgid "no reflog for '%s'"
+msgstr "tidak ada log referensi untuk '%s'"
+
+#: refs.c:262
 #, c-format
 msgid "%s does not point to a valid object!"
-msgstr ""
+msgstr "%s tidak menunjuk ke sebuah objek valid!"
 
-#: refs.c:563
+#: refs.c:561
 #, c-format
 msgid ""
 "Using '%s' as the name for the initial branch. This default branch name\n"
@@ -6815,90 +7127,102 @@ msgid ""
 "\n"
 "\tgit branch -m <name>\n"
 msgstr ""
+"Menggunakan '%s' sebagai nama cabang awal. Nama cabang asali ini dapat\n"
+"berubah. Untuk menyetel nama cabang awal untuk digunakan pada semua\n"
+"repositori baru Anda, dimana akan mematikan peringatan ini, panggil:\n"
+"\n"
+"\tgit config --global init.defaultBranch <nama>\n"
+"\n"
+"Nama-nama yang umumnya dipilih selain 'master' adalah 'main', 'trunk' dan\n"
+"'development'. Cabang yang baru saja dibuat bisa dinamai ulang lewat "
+"perintah\n"
+"ini:\n"
+"\n"
+"\tgit branch -m <nama>\n"
 
-#: refs.c:585
+#: refs.c:583
 #, c-format
 msgid "could not retrieve `%s`"
-msgstr ""
+msgstr "tidak dapat mengambil `%s`"
 
-#: refs.c:595
+#: refs.c:593
 #, c-format
 msgid "invalid branch name: %s = %s"
-msgstr ""
+msgstr "nama cabang tidak valid: %s = %s"
 
-#: refs.c:674
+#: refs.c:670
 #, c-format
 msgid "ignoring dangling symref %s"
-msgstr ""
+msgstr "abaikan referensi simbolik teruntai %s"
 
-#: refs.c:925
+#: refs.c:919
 #, c-format
 msgid "log for ref %s has gap after %s"
-msgstr ""
+msgstr "log untuk referensi %s ada celah setelah %s"
 
-#: refs.c:932
+#: refs.c:926
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
-msgstr ""
+msgstr "log untuk referensi %s sayangnya berakhir pada %s"
 
-#: refs.c:997
+#: refs.c:991
 #, c-format
 msgid "log for %s is empty"
-msgstr ""
+msgstr "log untuk %s kosong"
 
-#: refs.c:1090
+#: refs.c:1086
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
-msgstr ""
+msgstr "menolak memperbarui referensi dengan nama jelek '%s'"
 
-#: refs.c:1168
+#: refs.c:1164
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
-msgstr ""
+msgstr "update_ref gagal untuk referensi '%s': %s"
 
-#: refs.c:2067
+#: refs.c:2059
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
-msgstr ""
+msgstr "pembaruan berlipat untuk referensi '%s' tidak diperbolehkan"
 
-#: refs.c:2150
+#: refs.c:2145
 msgid "ref updates forbidden inside quarantine environment"
-msgstr ""
+msgstr "pembaruan referensi tidak diperbolehkan di dalam lingkungan karantina"
 
-#: refs.c:2161
+#: refs.c:2156
 msgid "ref updates aborted by hook"
-msgstr ""
+msgstr "pembaruan referensi dihentikan oleh kait"
 
-#: refs.c:2269 refs.c:2299
+#: refs.c:2264 refs.c:2294
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
-msgstr ""
+msgstr "'%s' ada; tidak dapat membuat '%s'"
 
-#: refs.c:2275 refs.c:2310
+#: refs.c:2270 refs.c:2305
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
-msgstr ""
+msgstr "tidak dapat memproses '%s' dan '%s' pada waktu yang bersamaan"
 
-#: refs/files-backend.c:1267
+#: refs/files-backend.c:1295
 #, c-format
 msgid "could not remove reference %s"
-msgstr ""
+msgstr "tidak dapat menghapus referensi %s"
 
-#: refs/files-backend.c:1281 refs/packed-backend.c:1549
-#: refs/packed-backend.c:1559
+#: refs/files-backend.c:1310 refs/packed-backend.c:1565
+#: refs/packed-backend.c:1575
 #, c-format
 msgid "could not delete reference %s: %s"
-msgstr ""
+msgstr "tidak dapat menghapus referensi %s: %s"
 
-#: refs/files-backend.c:1284 refs/packed-backend.c:1562
+#: refs/files-backend.c:1313 refs/packed-backend.c:1578
 #, c-format
 msgid "could not delete references: %s"
-msgstr ""
+msgstr "tidak dapat menghapus referensi: %s"
 
 #: refspec.c:170
 #, c-format
 msgid "invalid refspec '%s'"
-msgstr ""
+msgstr "spek referensi tidak valid '%s'"
 
 #: remote.c:402
 #, c-format
@@ -6913,37 +7237,37 @@ msgstr "lebih dari satu paket terima diberikan, gunakan yang pertama"
 msgid "more than one uploadpack given, using the first"
 msgstr "lebih dari satu paket unggah diberikan, gunakan yang pertama"
 
-#: remote.c:699
+#: remote.c:698
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr "tidak dapat mengambil baik %s dan %s ke %s"
 
-#: remote.c:703
+#: remote.c:702
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr "%s biasanya melacak %s, bukan %s"
 
-#: remote.c:707
+#: remote.c:706
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr "%s melacak baik %s dan %s"
 
-#: remote.c:775
+#: remote.c:774
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr "kunci '%s' dari pola tidak ada '*'"
 
-#: remote.c:785
+#: remote.c:784
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr "nilai '%s' dari pola tidak ada '*'"
 
-#: remote.c:1192
+#: remote.c:1191
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "spek referensi sumber %s tidak cocok dengan apapun"
 
-#: remote.c:1197
+#: remote.c:1196
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr "spek referensi sumber %s cocok dengan lebih dari satu"
@@ -6952,7 +7276,7 @@ msgstr "spek referensi sumber %s cocok dengan lebih dari satu"
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1212
+#: remote.c:1211
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -6976,7 +7300,7 @@ msgstr ""
 "Kedua-duanya tidak bekerja, jadi kami menyerah. Anda harus kualifikasi\n"
 "penuh referensi."
 
-#: remote.c:1232
+#: remote.c:1231
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -6987,7 +7311,7 @@ msgstr ""
 "Apakah maksud Anda buat cabang baru dengan mendorong ke\n"
 "'%s:refs/heads/%s'?"
 
-#: remote.c:1237
+#: remote.c:1236
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -6998,7 +7322,7 @@ msgstr ""
 "Apakah maksud Anda buat tag baru dengan mendorong ke\n"
 "'%s:refs/tags/%s'?"
 
-#: remote.c:1242
+#: remote.c:1241
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -7009,7 +7333,7 @@ msgstr ""
 "Apakah maksud Anda tag pohon dengan mendorong ke\n"
 "'%s:refs/tags/%s'?"
 
-#: remote.c:1247
+#: remote.c:1246
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -7020,114 +7344,114 @@ msgstr ""
 "Apakah maksud Anda tag blob baru dengan mendorong ke\n"
 "'%s:refs/tags/%s'?"
 
-#: remote.c:1283
+#: remote.c:1282
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "%s tidak dapat diselesaikan ke cabang"
 
-#: remote.c:1294
+#: remote.c:1293
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "tidak dapat menghapus '%s': referensi remote tidak ada"
 
-#: remote.c:1306
+#: remote.c:1305
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "spek referensi tujuan %s cocok dengan lebih dari satu"
 
-#: remote.c:1313
+#: remote.c:1312
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "referensi tujuan %s menerima dari lebih dari satu sumber"
 
-#: remote.c:1834 remote.c:1941
+#: remote.c:1833 remote.c:1940
 msgid "HEAD does not point to a branch"
 msgstr "HEAD tidak menunjuk ke cabang"
 
-#: remote.c:1843
+#: remote.c:1842
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "tidak ada cabang seperti: '%s'"
 
-#: remote.c:1846
+#: remote.c:1845
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "tidak ada hulu yang terkonfigurasi untuk cabang '%s'"
 
-#: remote.c:1852
+#: remote.c:1851
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "cabang hulu '%s' tidak disimpan sebagai cabang pelacak remote"
 
-#: remote.c:1867
+#: remote.c:1866
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr "tujuan dorong '%s' pada remote '%s' tidak ada cabang pelacak lokal"
 
-#: remote.c:1882
+#: remote.c:1881
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "cabang '%s' tidak ada remote untuk didorong"
 
-#: remote.c:1892
+#: remote.c:1891
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "spek referensi dorong untuk '%s' tidak termasuk '%s'"
 
-#: remote.c:1905
+#: remote.c:1904
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "dorong tidak ada tujuan (push.default yaitu 'nothing')"
 
-#: remote.c:1927
+#: remote.c:1926
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "tidak dapat menyelesaikan dorongan 'sederhana' ke satu tujuan"
 
-#: remote.c:2060
+#: remote.c:2059
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "tidak dapat menemukan referensi remote %s"
 
-#: remote.c:2073
+#: remote.c:2072
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* Abaikan referensi lucu '%s' secara lokal"
 
-#: remote.c:2236
+#: remote.c:2235
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "Cabang Anda didasarkan pada '%s', tapi hulu sudah tiada.\n"
 
-#: remote.c:2240
+#: remote.c:2239
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (gunakan \"git branch --unset-upstream\" untuk perbaiki)\n"
 
-#: remote.c:2243
+#: remote.c:2242
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Cabang Anda mutakhir dengan '%s'.\n"
 
-#: remote.c:2247
+#: remote.c:2246
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Cabang Anda dan '%s' merujuk pada komit yang berbeda.\n"
 
-#: remote.c:2250
+#: remote.c:2249
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (gunakan \"%s\" untuk selengkapnya)\n"
 
-#: remote.c:2254
+#: remote.c:2253
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: remote.c:2260
+#: remote.c:2259
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (gunakan \"git push\" untuk terbitkan komit lokal Anda)\n"
 
-#: remote.c:2263
+#: remote.c:2262
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -7135,11 +7459,11 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: remote.c:2271
+#: remote.c:2270
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (gunakan \"git pull\" untuk perbarui cabang lokal Anda)\n"
 
-#: remote.c:2274
+#: remote.c:2273
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -7150,11 +7474,11 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: remote.c:2284
+#: remote.c:2283
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (gunakan \"git pull\" untuk gabungkan cabang remote ke milik Anda)\n"
 
-#: remote.c:2476
+#: remote.c:2475
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "tidak dapat mengurai nama object yang diharapkan '%s'"
@@ -7192,106 +7516,110 @@ msgstr "ada kesalahan saat menulis '%s' (%s)"
 msgid "failed to flush '%s'"
 msgstr "gagal membilas '%s'"
 
-#: rerere.c:487 rerere.c:1023
+#: rerere.c:487 rerere.c:1024
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
 msgstr "tidak dapat mengurai bingkah konflik di '%s'"
 
-#: rerere.c:668
+#: rerere.c:669
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr "utime() gagal pada '%s'"
 
-#: rerere.c:678
+#: rerere.c:679
 #, c-format
 msgid "writing '%s' failed"
 msgstr "gagal menulis '%s'"
 
-#: rerere.c:698
+#: rerere.c:699
 #, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr "'%s' digelarkan menggunakan resolusi sebelumnya."
 
-#: rerere.c:737
+#: rerere.c:738
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr "Resolusi direkam untuk '%s'."
 
-#: rerere.c:772
+#: rerere.c:773
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr "'%s' diselesaikan menggunakan resolusi sebelumnya."
 
-#: rerere.c:787
+#: rerere.c:788
 #, c-format
 msgid "cannot unlink stray '%s'"
 msgstr "tidak dapat batal taut simpangan '%s'"
 
-#: rerere.c:791
+#: rerere.c:792
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr "Pracitra direkam untuk '%s'"
 
-#: rerere.c:865 submodule.c:2121 builtin/log.c:2017
-#: builtin/submodule--helper.c:1777 builtin/submodule--helper.c:1820
+#: rerere.c:866 submodule.c:2290 builtin/log.c:2042
+#: builtin/submodule--helper.c:1786 builtin/submodule--helper.c:1833
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "tidak dapat membuat direktori '%s'"
 
-#: rerere.c:1041
+#: rerere.c:1042
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr "gagal memperbarui keadaan konflik di '%s'"
 
-#: rerere.c:1052 rerere.c:1059
+#: rerere.c:1053 rerere.c:1060
 #, c-format
 msgid "no remembered resolution for '%s'"
 msgstr "tidak ada resolusi yang diingat untuk '%s'"
 
-#: rerere.c:1061
+#: rerere.c:1062
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr "tidak dapat batal taut '%s'"
 
-#: rerere.c:1071
+#: rerere.c:1072
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr "Pracitra diperbarui untuk '%s'"
 
-#: rerere.c:1080
+#: rerere.c:1081
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr "Resolusi dilupakan untuk '%s'\n"
 
-#: rerere.c:1191
+#: rerere.c:1192
 msgid "unable to open rr-cache directory"
 msgstr "tidak dapat membuka direktori rr-cache"
 
-#: reset.c:42
+#: reset.c:112
 msgid "could not determine HEAD revision"
 msgstr "tidak dapat menentukan revisi HEAD"
 
-#: reset.c:70 reset.c:76 sequencer.c:3700
+#: reset.c:141 reset.c:147 sequencer.c:3696
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "gagal menemukan pohon %s"
 
-#: revision.c:2347
+#: revision.c:2358
 msgid "--unpacked=<packfile> no longer supported"
-msgstr ""
+msgstr "--unpacked=<berkas pak> tidak didukung lagi"
 
-#: revision.c:2686
+#: revision.c:2712
 msgid "your current branch appears to be broken"
-msgstr ""
+msgstr "sepertinya cabang Anda saat ini rusak"
 
-#: revision.c:2689
+#: revision.c:2715
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
-msgstr ""
+msgstr "cabang Anda saat ini '%s' belum memiliki komit apapun"
+
+#: revision.c:2901
+msgid "object filtering requires --objects"
+msgstr "penyaringan objek memerlukan --objects"
 
-#: revision.c:2891
+#: revision.c:2918
 msgid "-L does not yet support diff formats besides -p and -s"
-msgstr ""
+msgstr "-L belum mendukung format diff selain -p dan -s"
 
 #: run-command.c:1262
 #, c-format
@@ -7358,7 +7686,7 @@ msgstr "mode pembersihan pesan komit tidak valid '%s'"
 msgid "could not delete '%s'"
 msgstr "tidak dapat menghapus '%s'"
 
-#: sequencer.c:345 sequencer.c:4751 builtin/rebase.c:563 builtin/rebase.c:1297
+#: sequencer.c:345 sequencer.c:4724 builtin/rebase.c:564 builtin/rebase.c:1326
 #: builtin/rm.c:409
 #, c-format
 msgid "could not remove '%s'"
@@ -7421,13 +7749,13 @@ msgstr ""
 "Untuk membatalkan dan kembali ke keadaan sebelum \"git revert\",\n"
 "jalankan \"git revert --abort\"."
 
-#: sequencer.c:448 sequencer.c:3292
+#: sequencer.c:448 sequencer.c:3288
 #, c-format
 msgid "could not lock '%s'"
 msgstr "tidak dapat mengunci '%s'"
 
-#: sequencer.c:450 sequencer.c:3091 sequencer.c:3296 sequencer.c:3310
-#: sequencer.c:3561 sequencer.c:5618 strbuf.c:1188 wrapper.c:639
+#: sequencer.c:450 sequencer.c:3087 sequencer.c:3292 sequencer.c:3306
+#: sequencer.c:3557 sequencer.c:5591 strbuf.c:1189 wrapper.c:715
 #, c-format
 msgid "could not write to '%s'"
 msgstr "tidak dapat menulis ke '%s'"
@@ -7437,14 +7765,14 @@ msgstr "tidak dapat menulis ke '%s'"
 msgid "could not write eol to '%s'"
 msgstr "tidak dapat menulis akhir baris ke '%s'"
 
-#: sequencer.c:460 sequencer.c:3096 sequencer.c:3298 sequencer.c:3312
-#: sequencer.c:3569
+#: sequencer.c:460 sequencer.c:3092 sequencer.c:3294 sequencer.c:3308
+#: sequencer.c:3565
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "gagal mengakhiri '%s'"
 
-#: sequencer.c:473 sequencer.c:1934 sequencer.c:3116 sequencer.c:3551
-#: sequencer.c:3679 builtin/am.c:289 builtin/commit.c:834 builtin/merge.c:1148
+#: sequencer.c:473 sequencer.c:1930 sequencer.c:3112 sequencer.c:3547
+#: sequencer.c:3675 builtin/am.c:290 builtin/commit.c:837 builtin/merge.c:1154
 #, c-format
 msgid "could not read '%s'"
 msgstr "tidak dapat membaca '%s'"
@@ -7463,7 +7791,7 @@ msgstr "komit perubahan Anda atau stase untuk melanjutkan."
 msgid "%s: fast-forward"
 msgstr "%s: maju-cepat"
 
-#: sequencer.c:574 builtin/tag.c:614
+#: sequencer.c:574 builtin/tag.c:615
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Mode pembersihan tidak valid %s"
@@ -7494,8 +7822,8 @@ msgstr "tidak ada kunci yang ada di pada '%.*s'"
 msgid "unable to dequote value of '%s'"
 msgstr "tidak dapat membatal-kutip nilai dari '%s'"
 
-#: sequencer.c:841 wrapper.c:209 wrapper.c:379 builtin/am.c:756
-#: builtin/am.c:848 builtin/rebase.c:694
+#: sequencer.c:841 wrapper.c:219 wrapper.c:389 builtin/am.c:757
+#: builtin/am.c:849 builtin/rebase.c:699
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "tidak dapat membuka '%s' untuk dibaca"
@@ -7546,7 +7874,8 @@ msgid ""
 "  git rebase --continue\n"
 msgstr ""
 "Anda punya perubahan tergelar di dalam pohon kerja Anda.\n"
-"Apabila perubahan tersebut dimaksudkan untuk dilumat ke komit sebelumnya, jalankan:\n"
+"Apabila perubahan tersebut dimaksudkan untuk dilumat ke komit sebelumnya, "
+"jalankan:\n"
 "\n"
 "  git commit --amend %s\n"
 "\n"
@@ -7612,349 +7941,346 @@ msgstr ""
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1288
+#: sequencer.c:1287
 msgid "couldn't look up newly created commit"
 msgstr "tidak dapat mencari komit yang baru saja dibuat"
 
-#: sequencer.c:1290
+#: sequencer.c:1289
 msgid "could not parse newly created commit"
 msgstr "tidak dapat menguraikan komit yang baru saja dibuat"
 
-#: sequencer.c:1339
+#: sequencer.c:1336
 msgid "unable to resolve HEAD after creating commit"
 msgstr "tidak dapat menguraikan HEAD setelah membuat komit"
 
-#: sequencer.c:1342
+#: sequencer.c:1338
 msgid "detached HEAD"
 msgstr "HEAD terpisah"
 
-#: sequencer.c:1346
+#: sequencer.c:1342
 msgid " (root-commit)"
 msgstr " (komit-akar)"
 
-#: sequencer.c:1367
+#: sequencer.c:1363
 msgid "could not parse HEAD"
 msgstr "tidak dapat menguraikan HEAD"
 
-#: sequencer.c:1369
+#: sequencer.c:1365
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s bukan sebuah komit!"
 
-#: sequencer.c:1373 sequencer.c:1451 builtin/commit.c:1708
+#: sequencer.c:1369 sequencer.c:1447 builtin/commit.c:1707
 msgid "could not parse HEAD commit"
 msgstr "tidak dapat menguraikan komit HEAD"
 
-#: sequencer.c:1429 sequencer.c:2314
+#: sequencer.c:1425 sequencer.c:2310
 msgid "unable to parse commit author"
 msgstr "tidak dapat menguraikan pengarang komit"
 
-#: sequencer.c:1440 builtin/am.c:1643 builtin/merge.c:710
+#: sequencer.c:1436 builtin/am.c:1644 builtin/merge.c:710
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree gagal menulis sebuah pohon"
 
-#: sequencer.c:1473 sequencer.c:1593
+#: sequencer.c:1469 sequencer.c:1589
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "tidak dapat membaca pesan komit dari '%s'"
 
-#: sequencer.c:1504 sequencer.c:1536
+#: sequencer.c:1500 sequencer.c:1532
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr "identitas pengarang tidak valid '%s'"
 
-#: sequencer.c:1510
+#: sequencer.c:1506
 msgid "corrupt author: missing date information"
 msgstr "pengarang rusak: informasi tanggal hilang"
 
-#: sequencer.c:1549 builtin/am.c:1670 builtin/commit.c:1822 builtin/merge.c:915
-#: builtin/merge.c:940 t/helper/test-fast-rebase.c:78
+#: sequencer.c:1545 builtin/am.c:1671 builtin/commit.c:1821 builtin/merge.c:921
+#: builtin/merge.c:946 t/helper/test-fast-rebase.c:78
 msgid "failed to write commit object"
 msgstr "gagal menulis objek komit"
 
-#: sequencer.c:1576 sequencer.c:4523 t/helper/test-fast-rebase.c:199
+#: sequencer.c:1572 sequencer.c:4496 t/helper/test-fast-rebase.c:199
 #: t/helper/test-fast-rebase.c:217
 #, c-format
 msgid "could not update %s"
 msgstr "tidak dapat memperbarui %s"
 
-#: sequencer.c:1625
+#: sequencer.c:1621
 #, c-format
 msgid "could not parse commit %s"
 msgstr "tidak dapat menguraikan komit %s"
 
-#: sequencer.c:1630
+#: sequencer.c:1626
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "tidak dapat menguraikan komit induk %s"
 
-#: sequencer.c:1713 sequencer.c:1994
+#: sequencer.c:1709 sequencer.c:1990
 #, c-format
 msgid "unknown command: %d"
 msgstr "perintah tidak dikenal: %d"
 
-#: sequencer.c:1755
+#: sequencer.c:1751
 msgid "This is the 1st commit message:"
 msgstr "Ini komit pertama:"
 
-#: sequencer.c:1756
+#: sequencer.c:1752
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Ini komit ke-%d:"
 
-#: sequencer.c:1757
+#: sequencer.c:1753
 msgid "The 1st commit message will be skipped:"
 msgstr "Pesan komit pertama akan dilewati:"
 
-#: sequencer.c:1758
+#: sequencer.c:1754
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "Pesan komit ke-%d akan dilewati"
 
-#: sequencer.c:1759
+#: sequencer.c:1755
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "Ini kombinasi dari %d komit."
 
-#: sequencer.c:1906 sequencer.c:1963
+#: sequencer.c:1902 sequencer.c:1959
 #, c-format
 msgid "cannot write '%s'"
 msgstr "tidak dapat menulis '%s'"
 
-#: sequencer.c:1953
+#: sequencer.c:1949
 msgid "need a HEAD to fixup"
 msgstr "butuh sebuah HEAD untuk memperbaiki"
 
-#: sequencer.c:1955 sequencer.c:3596
+#: sequencer.c:1951 sequencer.c:3592
 msgid "could not read HEAD"
 msgstr "tidak dapat membaca HEAD"
 
-#: sequencer.c:1957
+#: sequencer.c:1953
 msgid "could not read HEAD's commit message"
 msgstr "tidak dapat membaca pesan komit HEAD"
 
-#: sequencer.c:1981
+#: sequencer.c:1977
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "tidak dapat membaca pesan komit %s"
 
-#: sequencer.c:2091
+#: sequencer.c:2087
 msgid "your index file is unmerged."
 msgstr "berkas indeks Anda tak tergabung."
 
-#: sequencer.c:2098
+#: sequencer.c:2094
 msgid "cannot fixup root commit"
 msgstr "tidak dapat memperbaiki komit akar"
 
-#: sequencer.c:2117
+#: sequencer.c:2113
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "komit %s adalah penggabungan tetapi opsi -m tidak diberikan."
 
-#: sequencer.c:2125 sequencer.c:2133
+#: sequencer.c:2121 sequencer.c:2129
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "komit %s tidak punya induk %d"
 
-#: sequencer.c:2139
+#: sequencer.c:2135
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "tidak dapat mendapatkan pesan komit untuk %s"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:2158
+#: sequencer.c:2154
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: tidak dapat menguraikan komit induk %s"
 
-#: sequencer.c:2224
+#: sequencer.c:2220
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "tidak dapat menamai ulang '%s' ke '%s'"
 
-#: sequencer.c:2284
+#: sequencer.c:2280
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "tidak dapat membalikkan %s... %s"
 
-#: sequencer.c:2285
+#: sequencer.c:2281
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "tidak dapat menerapkan %s... %s"
 
-#: sequencer.c:2306
+#: sequencer.c:2302
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr "menjatuhkan %s %s -- isi tambalan sudah di hulu\n"
 
-#: sequencer.c:2364
+#: sequencer.c:2360
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: gagal membaca indeks"
 
-#: sequencer.c:2372
+#: sequencer.c:2368
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: gagal menyegarkan indeks"
 
-#: sequencer.c:2452
+#: sequencer.c:2448
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s tidak menerima argumen: '%s'"
 
-#: sequencer.c:2461
+#: sequencer.c:2457
 #, c-format
 msgid "missing arguments for %s"
 msgstr "argumen hilang untuk %s"
 
-#: sequencer.c:2504
+#: sequencer.c:2500
 #, c-format
 msgid "could not parse '%s'"
 msgstr "tidak dapat menguraikan '%s'"
 
-#: sequencer.c:2565
+#: sequencer.c:2561
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "baris %d tidak valid: %.*s"
 
-#: sequencer.c:2576
+#: sequencer.c:2572
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "tidak dapat '%s' tanpa komit sebelumnya"
 
-#: sequencer.c:2624 builtin/rebase.c:184
+#: sequencer.c:2620 builtin/rebase.c:185
 #, c-format
 msgid "could not read '%s'."
 msgstr "tidak dapat membaca '%s'."
 
-#: sequencer.c:2662
+#: sequencer.c:2658
 msgid "cancelling a cherry picking in progress"
 msgstr "membatalkan pemetikan ceri yang sedang berlangsung"
 
-#: sequencer.c:2671
+#: sequencer.c:2667
 msgid "cancelling a revert in progress"
 msgstr "membatalkan pembalikkan yang sedang berlangsung"
 
-#: sequencer.c:2711
+#: sequencer.c:2707
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "mohon perbaiki menggunakan 'git rebase --edit-todo'."
 
-#: sequencer.c:2713
+#: sequencer.c:2709
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "lembar perintah tidak dapat digunakan: '%s'"
 
-#: sequencer.c:2718
+#: sequencer.c:2714
 msgid "no commits parsed."
 msgstr "tidak ada komit yang diuraikan."
 
-#: sequencer.c:2729
+#: sequencer.c:2725
 msgid "cannot cherry-pick during a revert."
 msgstr "tidak dapat memetik ceri selama pembalikkan."
 
-#: sequencer.c:2731
+#: sequencer.c:2727
 msgid "cannot revert during a cherry-pick."
 msgstr "tidak dapat membalikkan selama petik ceri."
 
-#: sequencer.c:2809
-#, c-format
-msgid "invalid value for %s: %s"
-msgstr "nilai tidak valid untuk %s: %s"
-
-#: sequencer.c:2918
+#: sequencer.c:2914
 msgid "unusable squash-onto"
 msgstr "squash-onto tidak dapat digunakan"
 
-#: sequencer.c:2938
+#: sequencer.c:2934
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "lembar opsi jelek: '%s'"
 
-#: sequencer.c:3033 sequencer.c:4902
+#: sequencer.c:3029 sequencer.c:4875
 msgid "empty commit set passed"
 msgstr "himpunan komit kosong dilewatkan"
 
-#: sequencer.c:3050
+#: sequencer.c:3046
 msgid "revert is already in progress"
 msgstr "pembalikkan sudah berjalan"
 
-#: sequencer.c:3052
+#: sequencer.c:3048
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "coba \"git revert (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:3055
+#: sequencer.c:3051
 msgid "cherry-pick is already in progress"
 msgstr "pemetikan ceri sudah berjalan"
 
-#: sequencer.c:3057
+#: sequencer.c:3053
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "coba \"git cherry-pick (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:3071
+#: sequencer.c:3067
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "tidak dapat membuat direktori pembaris '%s'"
 
-#: sequencer.c:3086
+#: sequencer.c:3082
 msgid "could not lock HEAD"
 msgstr "tidak dapat mengunci HEAD"
 
-#: sequencer.c:3146 sequencer.c:4612
+#: sequencer.c:3142 sequencer.c:4585
 msgid "no cherry-pick or revert in progress"
 msgstr "tidak ada pemetikan ceri atau pembalikkan yang sedang berjalan"
 
-#: sequencer.c:3148 sequencer.c:3159
+#: sequencer.c:3144 sequencer.c:3155
 msgid "cannot resolve HEAD"
 msgstr "tidak dapat menguraikan HEAD"
 
-#: sequencer.c:3150 sequencer.c:3194
+#: sequencer.c:3146 sequencer.c:3190
 msgid "cannot abort from a branch yet to be born"
 msgstr "tidak dapat membatalkan dari cabang yang belum lahir"
 
-#: sequencer.c:3180 builtin/fetch.c:1004 builtin/fetch.c:1416
-#: builtin/grep.c:772
+#: sequencer.c:3176 builtin/fetch.c:1030 builtin/fetch.c:1457
+#: builtin/grep.c:774
 #, c-format
 msgid "cannot open '%s'"
 msgstr "tidak dapat membuka '%s'"
 
-#: sequencer.c:3182
+#: sequencer.c:3178
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "tidak dapat membaca '%s': %s"
 
-#: sequencer.c:3183
+#: sequencer.c:3179
 msgid "unexpected end of file"
 msgstr "akhir berkas tidak diharapkan"
 
-#: sequencer.c:3189
+#: sequencer.c:3185
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "berkas HEAD pra-petik-ceri yang tersimpan '%s' rusak"
 
-#: sequencer.c:3200
+#: sequencer.c:3196
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
-msgstr "Sepertinya Anda sudah memindahkan HEAD. Tidak memutar ulang, periksa HEAD Anda!"
+msgstr ""
+"Sepertinya Anda sudah memindahkan HEAD. Tidak memutar ulang, periksa HEAD "
+"Anda!"
 
-#: sequencer.c:3241
+#: sequencer.c:3237
 msgid "no revert in progress"
 msgstr "tidak ada pembalikkan yang sedang berjalan"
 
-#: sequencer.c:3250
+#: sequencer.c:3246
 msgid "no cherry-pick in progress"
 msgstr "tidak ada pemetikan ceri yang sedang berjalan"
 
-#: sequencer.c:3260
+#: sequencer.c:3256
 msgid "failed to skip the commit"
 msgstr "gagal melewati komit"
 
-#: sequencer.c:3267
+#: sequencer.c:3263
 msgid "there is nothing to skip"
 msgstr "tidak ada yang dilewati"
 
-#: sequencer.c:3270
+#: sequencer.c:3266
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -7963,16 +8289,16 @@ msgstr ""
 "sudahkah Anda komit?\n"
 "coba \"git %s --continue\""
 
-#: sequencer.c:3432 sequencer.c:4503
+#: sequencer.c:3428 sequencer.c:4476
 msgid "cannot read HEAD"
 msgstr "tidak dapat membaca HEAD"
 
-#: sequencer.c:3449
+#: sequencer.c:3445
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "tidak dapat menyalin '%s' ke '%s'"
 
-#: sequencer.c:3457
+#: sequencer.c:3453
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -7991,27 +8317,27 @@ msgstr ""
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:3467
+#: sequencer.c:3463
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "Tidak dapat menerapkan %s... %.*s"
 
-#: sequencer.c:3474
+#: sequencer.c:3470
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "Tidak dapat menggabungkan %.*s"
 
-#: sequencer.c:3488 sequencer.c:3492 builtin/difftool.c:633
+#: sequencer.c:3484 sequencer.c:3488 builtin/difftool.c:633
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "tidak dapat menyalin '%s' ke '%s'"
 
-#: sequencer.c:3503
+#: sequencer.c:3499
 #, c-format
 msgid "Executing: %s\n"
 msgstr "Mengeksekusi: %s\n"
 
-#: sequencer.c:3514
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -8026,11 +8352,11 @@ msgstr ""
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3520
+#: sequencer.c:3516
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "dan buat perubahan ke indeks dan/atau pohon kerja\n"
 
-#: sequencer.c:3526
+#: sequencer.c:3522
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -8047,90 +8373,90 @@ msgstr ""
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3586
+#: sequencer.c:3582
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "nama label ilegal: '%.*s'"
 
-#: sequencer.c:3659
+#: sequencer.c:3655
 msgid "writing fake root commit"
 msgstr "menulis komit akar palsu"
 
-#: sequencer.c:3664
+#: sequencer.c:3660
 msgid "writing squash-onto"
 msgstr "menulis squash-onto"
 
-#: sequencer.c:3743
+#: sequencer.c:3739
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "tidak dapat menguraikan '%s'"
 
-#: sequencer.c:3775
+#: sequencer.c:3771
 msgid "cannot merge without a current revision"
 msgstr "tidak dapat menggabungkan tanpa revisi saat ini"
 
-#: sequencer.c:3797
+#: sequencer.c:3793
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "tidak dapat menguraikan '%.*s'"
 
-#: sequencer.c:3806
+#: sequencer.c:3802
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "tidak ada yang digabungkan: '%.*s'"
 
-#: sequencer.c:3818
+#: sequencer.c:3814
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr "penggabungan gurita tidak dapat dieksekusi di atas sebuah [akar baru]"
 
-#: sequencer.c:3873
+#: sequencer.c:3869
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "tidak dapat mendapatkan pesan komit dari '%s'"
 
-#: sequencer.c:4019
+#: sequencer.c:4013
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "bahkan tidak dapat mencoba menggabungkan '%.*s'"
 
-#: sequencer.c:4035
+#: sequencer.c:4029
 msgid "merge: Unable to write new index file"
 msgstr "merge: Tidak dapat menulis berkas indeks baru"
 
-#: sequencer.c:4116
+#: sequencer.c:4110
 msgid "Cannot autostash"
 msgstr "Tidak dapat menstase otomatis"
 
-#: sequencer.c:4119
+#: sequencer.c:4113
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Respons stase tidak diharapkan: '%s'"
 
-#: sequencer.c:4125
+#: sequencer.c:4119
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "Tidak dapat membuat direktori untuk '%s'"
 
-#: sequencer.c:4128
+#: sequencer.c:4122
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Stase otomatis dibuat: %s\n"
 
-#: sequencer.c:4132
+#: sequencer.c:4124
 msgid "could not reset --hard"
 msgstr "tidak dapat reset --hard"
 
-#: sequencer.c:4157
+#: sequencer.c:4148
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Stase otomatis diterapkan.\n"
 
-#: sequencer.c:4169
+#: sequencer.c:4160
 #, c-format
 msgid "cannot store %s"
 msgstr "tidak dapat menyimpan %s"
 
-#: sequencer.c:4172
+#: sequencer.c:4163
 #, c-format
 msgid ""
 "%s\n"
@@ -8141,29 +8467,29 @@ msgstr ""
 "Perubahan Anda aman di dalam stase.\n"
 "Anda dapat menjalankan \"git stash pop\" atau \"git stash drop\" kapanpun.\n"
 
-#: sequencer.c:4177
+#: sequencer.c:4168
 msgid "Applying autostash resulted in conflicts."
 msgstr "Menerapkan stase otomatis menghasilkan konflik."
 
-#: sequencer.c:4178
+#: sequencer.c:4169
 msgid "Autostash exists; creating a new stash entry."
 msgstr "Stase otomatis sudah ada; membuat entri stase baru."
 
-#: sequencer.c:4252
+#: sequencer.c:4225
 msgid "could not detach HEAD"
 msgstr "tidak dapat melepas HEAD"
 
-#: sequencer.c:4267
+#: sequencer.c:4240
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "Berhenti pada HEAD\n"
 
-#: sequencer.c:4269
+#: sequencer.c:4242
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Berhenti pada %s\n"
 
-#: sequencer.c:4301
+#: sequencer.c:4274
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -8184,58 +8510,58 @@ msgstr ""
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:4347
+#: sequencer.c:4320
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "Mendasarkan ulang (%d/%d)%s"
 
-#: sequencer.c:4393
+#: sequencer.c:4366
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Berhenti pada %s... %.*s\n"
 
-#: sequencer.c:4463
+#: sequencer.c:4436
 #, c-format
 msgid "unknown command %d"
 msgstr "perintah tidak dikenal %d"
 
-#: sequencer.c:4511
+#: sequencer.c:4484
 msgid "could not read orig-head"
 msgstr "tidak dapat membaca orig-head"
 
-#: sequencer.c:4516
+#: sequencer.c:4489
 msgid "could not read 'onto'"
 msgstr "tidak dapat membaca 'onto'"
 
-#: sequencer.c:4530
+#: sequencer.c:4503
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "tidak dapat memperbarui HEAD ke %s"
 
-#: sequencer.c:4590
+#: sequencer.c:4563
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "%s didasarkan ulang dan diperbarui dengan sukses.\n"
 
-#: sequencer.c:4642
+#: sequencer.c:4615
 msgid "cannot rebase: You have unstaged changes."
 msgstr "tidak dapat mendasarkan ulang: Anda punya perubahan tak tergelar."
 
-#: sequencer.c:4651
+#: sequencer.c:4624
 msgid "cannot amend non-existing commit"
 msgstr "tidak dapat mengubah komit yang tidak ada"
 
-#: sequencer.c:4653
+#: sequencer.c:4626
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "berkas tidak valid: '%s'"
 
-#: sequencer.c:4655
+#: sequencer.c:4628
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "konten tidak valid: '%s'"
 
-#: sequencer.c:4658
+#: sequencer.c:4631
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -8245,338 +8571,368 @@ msgstr ""
 "Anda punya perubahan tak tergelar di dalam pohon kerja Anda. Mohon komit\n"
 "terlebih dahulu dan jalankan 'git rebase --continue' lagi."
 
-#: sequencer.c:4694 sequencer.c:4733
+#: sequencer.c:4667 sequencer.c:4706
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "tidak dapat menulis berkas: '%s'"
 
-#: sequencer.c:4749
+#: sequencer.c:4722
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "tidak dapat menghapus CHERRY_PICK_HEAD"
 
-#: sequencer.c:4759
+#: sequencer.c:4732
 msgid "could not commit staged changes."
 msgstr "tidak dapat mengkomit perubahan tergelar."
 
-#: sequencer.c:4879
+#: sequencer.c:4852
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: tidak dapat memetik ceri sebuah %s"
 
-#: sequencer.c:4883
+#: sequencer.c:4856
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: revisi jelek"
 
-#: sequencer.c:4918
+#: sequencer.c:4891
 msgid "can't revert as initial commit"
 msgstr "tidak dapat membalikkan sebagai komit awal"
 
-#: sequencer.c:5189 sequencer.c:5418
+#: sequencer.c:5162 sequencer.c:5391
 #, c-format
 msgid "skipped previously applied commit %s"
 msgstr "melewatkan komit yang sudah diterapkan sebelumnya %s"
 
-#: sequencer.c:5259 sequencer.c:5434
+#: sequencer.c:5232 sequencer.c:5407
 msgid "use --reapply-cherry-picks to include skipped commits"
 msgstr "gunakan --reapply-cherry-picks untuk memasukkan komit yang terlewat"
 
-#: sequencer.c:5405
+#: sequencer.c:5378
 msgid "make_script: unhandled options"
 msgstr "make_script: opsi tak ditangani"
 
-#: sequencer.c:5408
+#: sequencer.c:5381
 msgid "make_script: error preparing revisions"
 msgstr "make_script: kesalahan membuat revisi"
 
-#: sequencer.c:5666 sequencer.c:5683
+#: sequencer.c:5639 sequencer.c:5656
 msgid "nothing to do"
 msgstr "tidak ada yang dilakukan"
 
-#: sequencer.c:5702
+#: sequencer.c:5675
 msgid "could not skip unnecessary pick commands"
 msgstr "tidak dapat melewatkan perintah pick yang tidak perlu"
 
-#: sequencer.c:5802
+#: sequencer.c:5775
 msgid "the script was already rearranged."
 msgstr "skrip sudah ditata ulang."
 
-#: setup.c:134
+#: setup.c:135
 #, c-format
 msgid "'%s' is outside repository at '%s'"
-msgstr ""
+msgstr "'%s' di luar repositori pada '%s'"
 
-#: setup.c:186
+#: setup.c:187
 #, c-format
 msgid ""
 "%s: no such path in the working tree.\n"
 "Use 'git <command> -- <path>...' to specify paths that do not exist locally."
 msgstr ""
+"%s: tidak ada jalur di pohon kerja.\n"
+"Gunakan 'git <perintah> -- <jalur>...' untuk menyebutkan jalur yang tidak ada secara lokal."
 
-#: setup.c:199
+#: setup.c:200
 #, c-format
 msgid ""
 "ambiguous argument '%s': unknown revision or path not in the working tree.\n"
 "Use '--' to separate paths from revisions, like this:\n"
 "'git <command> [<revision>...] -- [<file>...]'"
 msgstr ""
+"argumen ambigu '%s': revisi tidak dikenal atau jalur tidak ada di dalam pohon "
+"kerja.\n"
+"Gunakan '--' untuk memisahkan jalur dari revisi, seperti ini:\n"
+"'git <perintah> [<revisi>...] -- [<berkas>...]'"
 
-#: setup.c:265
+#: setup.c:266
 #, c-format
 msgid "option '%s' must come before non-option arguments"
-msgstr ""
+msgstr "opsi '%s' harus ada sebelum argumen bukan opsi"
 
-#: setup.c:284
+#: setup.c:285
 #, c-format
 msgid ""
 "ambiguous argument '%s': both revision and filename\n"
 "Use '--' to separate paths from revisions, like this:\n"
 "'git <command> [<revision>...] -- [<file>...]'"
 msgstr ""
+"argumen ambigu '%s': kedua-duanya revisi dan nama berkas\n"
+"Gunakan '--' untuk memisahkan jalur dari revisi, seperti ini:\n"
+"'git <perintah> [<revisi>...] -- [<berkas>]'"
 
-#: setup.c:420
+#: setup.c:421
 msgid "unable to set up work tree using invalid config"
-msgstr ""
+msgstr "tidak dapat memasang pohon kerja menggunakan konfigurasi tidak valid"
 
-#: setup.c:424 builtin/rev-parse.c:895
+#: setup.c:425 builtin/rev-parse.c:895
 msgid "this operation must be run in a work tree"
-msgstr ""
+msgstr "operasi ini harus dijalankan di dalam pohon kerja"
 
-#: setup.c:722
+#: setup.c:724
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
-msgstr ""
+msgstr "Versi repositori git diharapkan <= %d, dapat %d"
 
-#: setup.c:730
+#: setup.c:732
 msgid "unknown repository extension found:"
 msgid_plural "unknown repository extensions found:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "ekstensi repositori tidak dikenal ditemukan:"
+msgstr[1] "ekstensi repositori tidak dikenal ditemukan:"
 
-#: setup.c:744
+#: setup.c:746
 msgid "repo version is 0, but v1-only extension found:"
 msgid_plural "repo version is 0, but v1-only extensions found:"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "versi repositori 0, tetapi ekstensi hanya v1 ditemukan:"
+msgstr[1] "versi repositori 0, tetapi ekstensi hanya v1 ditemukan:"
 
-#: setup.c:765
+#: setup.c:767
 #, c-format
 msgid "error opening '%s'"
-msgstr ""
+msgstr "kesalahan membuka '%s'"
 
-#: setup.c:767
+#: setup.c:769
 #, c-format
 msgid "too large to be a .git file: '%s'"
-msgstr ""
+msgstr "terlalu besar untuk jadi berkas .git: '%s'"
 
-#: setup.c:769
+#: setup.c:771
 #, c-format
 msgid "error reading %s"
-msgstr ""
+msgstr "kesalahan membaca %s"
 
-#: setup.c:771
+#: setup.c:773
 #, c-format
 msgid "invalid gitfile format: %s"
-msgstr ""
+msgstr "format gitfile tidak valid: %s"
 
-#: setup.c:773
+#: setup.c:775
 #, c-format
 msgid "no path in gitfile: %s"
-msgstr ""
+msgstr "tidak ada jalur di dalam gitfile: %s"
 
-#: setup.c:775
+#: setup.c:777
 #, c-format
 msgid "not a git repository: %s"
-msgstr ""
+msgstr "bukan sebuah repositori git: %s"
 
-#: setup.c:877
+#: setup.c:879
 #, c-format
 msgid "'$%s' too big"
-msgstr ""
+msgstr "'$%s' terlalu besar"
 
-#: setup.c:891
+#: setup.c:893
 #, c-format
 msgid "not a git repository: '%s'"
-msgstr ""
+msgstr "bukan sebuah repositori git: '%s'"
 
-#: setup.c:920 setup.c:922 setup.c:953
+#: setup.c:922 setup.c:924 setup.c:955
 #, c-format
 msgid "cannot chdir to '%s'"
-msgstr ""
+msgstr "tidak dapat chdir ke '%s'"
 
-#: setup.c:925 setup.c:981 setup.c:991 setup.c:1030 setup.c:1038
+#: setup.c:927 setup.c:983 setup.c:993 setup.c:1032 setup.c:1040
 msgid "cannot come back to cwd"
-msgstr ""
+msgstr "tidak dapat kembali ke cwd"
 
-#: setup.c:1052
+#: setup.c:1054
 #, c-format
 msgid "failed to stat '%*s%s%s'"
-msgstr ""
+msgstr "gagal men-stat '%*s%s%s'"
 
-#: setup.c:1295
+#: setup.c:1338
 msgid "Unable to read current working directory"
-msgstr ""
+msgstr "tidak dapat membaca direktori kerja saat ini"
 
-#: setup.c:1304 setup.c:1310
+#: setup.c:1347 setup.c:1353
 #, c-format
 msgid "cannot change to '%s'"
-msgstr ""
+msgstr "tidak dapat berganti ke '%s'"
 
-#: setup.c:1315
+#: setup.c:1358
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
-msgstr ""
+msgstr "bukan sebuah repositori git (atau direktori induk apapun): %s"
 
-#: setup.c:1321
+#: setup.c:1364
 #, c-format
 msgid ""
 "not a git repository (or any parent up to mount point %s)\n"
 "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."
 msgstr ""
+"bukan sebuah repositori git (atau induk apapun hingga ke titik pasang %s)\n"
+"Berhenti pada perbatasan sistem berkas (GIT_DISCOVERY_ACROSS_FILESYSTEM tidak disetel)."
+
+#: setup.c:1374
+#, c-format
+msgid ""
+"unsafe repository ('%s' is owned by someone else)\n"
+"To add an exception for this directory, call:\n"
+"\n"
+"\tgit config --global --add safe.directory %s"
+msgstr ""
+"repositori tidak aman ('%s' dimiliki oleh orang lain)\n"
+"Untuk menambahkan pengecualian untuk direktori ini, panggil:\n"
+"\n"
+"\tgit config --global --add safe.directory %s"
 
-#: setup.c:1446
+#: setup.c:1502
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
 "The owner of files must always have read and write permissions."
 msgstr ""
+"masalah dengan nilai mode berkas core.sharedRepository (0%.3o).\n"
+"Pemilik berkas harus selalu punya perizinan baca dan tulis."
 
-#: setup.c:1508
+#: setup.c:1564
 msgid "fork failed"
-msgstr ""
+msgstr "penggarpuan gagal"
 
-#: setup.c:1513
+#: setup.c:1569
 msgid "setsid failed"
-msgstr ""
+msgstr "setsid gagal"
 
-#: sparse-index.c:289
+#: sparse-index.c:285
 #, c-format
 msgid "index entry is a directory, but not sparse (%08x)"
 msgstr "entri indeks adalah direktori, tapi bukan tipis (%08x)"
 
+#: split-index.c:9
+msgid "cannot use split index with a sparse index"
+msgstr "tidak dapat menggunakan indeks terpisah dengan indeks tipis"
+
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:850
+#: strbuf.c:851
 #, c-format
 msgid "%u.%2.2u GiB"
-msgstr ""
+msgstr "%u.%2.2u gibibita"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:852
+#: strbuf.c:853
 #, c-format
 msgid "%u.%2.2u GiB/s"
-msgstr ""
+msgstr "%u.%2.2u gibibita/detik"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:860
+#: strbuf.c:861
 #, c-format
 msgid "%u.%2.2u MiB"
-msgstr ""
+msgstr "%u.%2.2u mebibita"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:862
+#: strbuf.c:863
 #, c-format
 msgid "%u.%2.2u MiB/s"
-msgstr ""
+msgstr "%u.%2.2u mebibita/detik"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:869
+#: strbuf.c:870
 #, c-format
 msgid "%u.%2.2u KiB"
-msgstr ""
+msgstr "%u.%2.2u kibibita"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:871
+#: strbuf.c:872
 #, c-format
 msgid "%u.%2.2u KiB/s"
-msgstr ""
+msgstr "%u.%2.2u kibibita/detik"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:877
+#: strbuf.c:878
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%u bita"
+msgstr[1] "%u bita"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:879
+#: strbuf.c:880
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%u bita/detik"
+msgstr[1] "%u bita/detik"
 
-#: strbuf.c:1186 wrapper.c:207 wrapper.c:377 builtin/am.c:765
-#: builtin/rebase.c:650
+#: strbuf.c:1187 wrapper.c:217 wrapper.c:387 builtin/am.c:766
+#: builtin/rebase.c:653
 #, c-format
 msgid "could not open '%s' for writing"
-msgstr ""
+msgstr "tidak dapat membuka '%s' untuk ditulis"
 
-#: strbuf.c:1195
+#: strbuf.c:1196
 #, c-format
 msgid "could not edit '%s'"
-msgstr ""
+msgstr "tidak dapat menyunting '%s'"
 
-#: submodule-config.c:237
+#: submodule-config.c:238
 #, c-format
 msgid "ignoring suspicious submodule name: %s"
 msgstr "abaikan nama submodul dicurigai: %s"
 
-#: submodule-config.c:304
+#: submodule-config.c:305
 msgid "negative values not allowed for submodule.fetchjobs"
 msgstr "nilai negatif tidak diperbolehkan untuk submodule.fetchjobs"
 
-#: submodule-config.c:402
+#: submodule-config.c:403
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr "abaikan '%s' yang mungkin ditafsirkan sebagai opsi baris perintah: %s"
 
-#: submodule-config.c:499
+#: submodule-config.c:500 builtin/push.c:489 builtin/send-pack.c:148
 #, c-format
-msgid "invalid value for %s"
-msgstr "nilai tidak valid untuk %s"
+msgid "invalid value for '%s'"
+msgstr "nilai tidak valid untuk '%s'"
 
-#: submodule-config.c:767
+#: submodule-config.c:828
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr "Tidak dapat memperbarui entri .gitmodules %s"
 
-#: submodule.c:114 submodule.c:143
+#: submodule.c:115 submodule.c:144
 msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
 msgstr ""
 "Tidak dapat mengubah .gitmodules yang tak tergabung, selesaikan konflik "
 "penggabungan terlebih dahulu"
 
-#: submodule.c:118 submodule.c:147
+#: submodule.c:119 submodule.c:148
 #, c-format
 msgid "Could not find section in .gitmodules where path=%s"
 msgstr "Tidak dapat menemukan bagian .gitmodules dimana path=%s"
 
-#: submodule.c:154
+#: submodule.c:155
 #, c-format
 msgid "Could not remove .gitmodules entry for %s"
 msgstr "Tidak dapat menghapus entri .gitmodules untuk %s"
 
-#: submodule.c:165
+#: submodule.c:166
 msgid "staging updated .gitmodules failed"
 msgstr "gagal menggelar .gitmodules terbarui"
 
-#: submodule.c:358
+#: submodule.c:346
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "dalam submodul tak terisi '%s'"
 
-#: submodule.c:389
+#: submodule.c:377
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "Spek jalur '%s' di dalam submodul '%.*s'"
 
-#: submodule.c:466
+#: submodule.c:454
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "argumen --ignore-submodules jelek: %s"
 
-#: submodule.c:844
+#: submodule.c:866
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -8585,12 +8941,12 @@ msgstr ""
 "Submodul dalam komit %s pada jalur '%s' bertabrakan dengan submodul yang "
 "bernama sama. Melewati itu."
 
-#: submodule.c:954
+#: submodule.c:987
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr "entri submodul '%s' (%s) adalah %s, bukan komit"
 
-#: submodule.c:1042
+#: submodule.c:1069
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
@@ -8599,36 +8955,46 @@ msgstr ""
 "Tidak dapat menjalankan perintah 'git rev-list <komit> --not --remotes -n 1' "
 "dalam submodul %s"
 
-#: submodule.c:1165
+#: submodule.c:1192
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "proses untuk submodul '%s' gagal"
 
-#: submodule.c:1194 builtin/branch.c:699 builtin/submodule--helper.c:2714
+#: submodule.c:1221 builtin/branch.c:714 builtin/submodule--helper.c:2827
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "Gagal menguraikan HEAD sebagai referensi valid."
 
-#: submodule.c:1205
+#: submodule.c:1232
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "Mendorong submodul '%s'\n"
 
-#: submodule.c:1208
+#: submodule.c:1235
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "Tidak dapat mendorong submodul '%s'\n"
 
-#: submodule.c:1491
+#: submodule.c:1567
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "Mengambil submodul %s%s\n"
 
-#: submodule.c:1525
+#: submodule.c:1589
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "Tidak dapat mengakses submodul '%s'\n"
 
-#: submodule.c:1680
+#: submodule.c:1618
+#, c-format
+msgid "Could not access submodule '%s' at commit %s\n"
+msgstr "Tidak dapat mengakses submodul '%s' pada komit %s\n"
+
+#: submodule.c:1629
+#, c-format
+msgid "Fetching submodule %s%s at commit %s\n"
+msgstr "Mengambil submodul %s%s pada komit %s\n"
+
+#: submodule.c:1849
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -8637,61 +9003,61 @@ msgstr ""
 "Kesalahan saat pengambilan submodul:\n"
 "%s"
 
-#: submodule.c:1705
+#: submodule.c:1874
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "'%s' tak dikenal sebagai repositori git"
 
-#: submodule.c:1722
+#: submodule.c:1891
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr "Tidak dapat menjalankan 'git status --porcelain=2' dalam submodul %s"
 
-#: submodule.c:1763
+#: submodule.c:1932
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr "'git status --porcelain=2' gagal dalam submodul %s"
 
-#: submodule.c:1838
+#: submodule.c:2007
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "Tidak dalat memulai 'git status' dalam submodul '%s'"
 
-#: submodule.c:1851
+#: submodule.c:2020
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "tidak dapat menjalankan 'git status' dalam submodul '%s'"
 
-#: submodule.c:1868
+#: submodule.c:2037
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr "Tidak dapat batal setel setelan core.worktree dalam submodul '%s'"
 
-#: submodule.c:1895 submodule.c:2210
+#: submodule.c:2064 submodule.c:2379
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr "tidak dapat rekursi ke dalam submodul '%s'"
 
-#: submodule.c:1917
+#: submodule.c:2086
 msgid "could not reset submodule index"
 msgstr "tidak dapat reset indeks submodul"
 
-#: submodule.c:1959
+#: submodule.c:2128
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "submodul '%s' punya indeks kotor"
 
-#: submodule.c:2013
+#: submodule.c:2182
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "Submodul '%s' tidak dapat diperbarui."
 
-#: submodule.c:2081
+#: submodule.c:2250
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr "direktori submodul git '%s' di dalam direktori git '%.*s'"
 
-#: submodule.c:2102
+#: submodule.c:2271
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -8699,17 +9065,17 @@ msgstr ""
 "relocate_gitdir untuk submodul '%s' dengan lebih dari satu pohon kerja tidak "
 "didukung"
 
-#: submodule.c:2114 submodule.c:2174
+#: submodule.c:2283 submodule.c:2343
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "tidak dapat mencari nama untuk submodul '%s'"
 
-#: submodule.c:2118
+#: submodule.c:2287
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr "menolak memindahkan '%s' ke dalam direktori git yang ada"
 
-#: submodule.c:2124
+#: submodule.c:2293
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -8720,11 +9086,11 @@ msgstr ""
 "'%s' ke\n"
 "'%s'\n"
 
-#: submodule.c:2255
+#: submodule.c:2424
 msgid "could not start ls-files in .."
 msgstr "tidak dapat memulai ls-files dalam .."
 
-#: submodule.c:2295
+#: submodule.c:2464
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree kembalikan kode kembali %d yang tak diharapkan"
@@ -8732,62 +9098,62 @@ msgstr "ls-tree kembalikan kode kembali %d yang tak diharapkan"
 #: symlinks.c:244
 #, c-format
 msgid "failed to lstat '%s'"
-msgstr ""
+msgstr "gagal men-lstat '%s'"
 
 #: trailer.c:244
 #, c-format
 msgid "running trailer command '%s' failed"
-msgstr ""
+msgstr "gagal menjalankan perintah trailer '%s'"
 
 #: trailer.c:493 trailer.c:498 trailer.c:503 trailer.c:562 trailer.c:566
 #: trailer.c:570
 #, c-format
 msgid "unknown value '%s' for key '%s'"
-msgstr ""
+msgstr "nilai tidak dikenal '%s' untuk kunci '%s'"
 
-#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
-#: builtin/remote.c:327
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:300
+#: builtin/remote.c:328
 #, c-format
 msgid "more than one %s"
-msgstr ""
+msgstr "lebih dari satu %s"
 
 #: trailer.c:743
 #, c-format
 msgid "empty trailer token in trailer '%.*s'"
-msgstr ""
+msgstr "token trailer kosong dalam trailer '%.*s'"
 
 #: trailer.c:763
 #, c-format
 msgid "could not read input file '%s'"
-msgstr ""
+msgstr "tidak dapat membaca berkas masukan '%s'"
 
-#: trailer.c:766 builtin/mktag.c:89 imap-send.c:1573
+#: trailer.c:766 builtin/mktag.c:88 imap-send.c:1563
 msgid "could not read from stdin"
-msgstr ""
+msgstr "tidak dapat membaca dari masukan standar"
 
-#: trailer.c:1024 wrapper.c:684
+#: trailer.c:1024 wrapper.c:760
 #, c-format
 msgid "could not stat %s"
-msgstr ""
+msgstr "tidak dapat membaca %s"
 
 #: trailer.c:1026
 #, c-format
 msgid "file %s is not a regular file"
-msgstr ""
+msgstr "berkas %s bukan sebuah berkas reguler"
 
 #: trailer.c:1028
 #, c-format
 msgid "file %s is not writable by user"
-msgstr ""
+msgstr "berkas %s tidak dapat ditulis oleh pengguna"
 
 #: trailer.c:1040
 msgid "could not open temporary file"
-msgstr ""
+msgstr "tidak dapat membuka berkas sementara"
 
 #: trailer.c:1080
 #, c-format
 msgid "could not rename temporary file to %s"
-msgstr ""
+msgstr "tidak dapat menamai ulang berkas sementara ke %s"
 
 #: transport-helper.c:62 transport-helper.c:91
 msgid "full write to remote helper failed"
@@ -8831,7 +9197,7 @@ msgstr ""
 msgid "error while running fast-import"
 msgstr ""
 
-#: transport-helper.c:549 transport-helper.c:1251
+#: transport-helper.c:549 transport-helper.c:1254
 #, c-format
 msgid "could not read ref %s"
 msgstr ""
@@ -8849,7 +9215,7 @@ msgstr ""
 msgid "invalid remote service path"
 msgstr ""
 
-#: transport-helper.c:661 transport.c:1479
+#: transport-helper.c:661 transport.c:1496
 msgid "operation not supported by protocol"
 msgstr ""
 
@@ -8858,124 +9224,124 @@ msgstr ""
 msgid "can't connect to subservice %s"
 msgstr ""
 
-#: transport-helper.c:693 transport.c:404
+#: transport-helper.c:693 transport.c:415
 msgid "--negotiate-only requires protocol v2"
 msgstr ""
 
-#: transport-helper.c:755
+#: transport-helper.c:758
 msgid "'option' without a matching 'ok/error' directive"
 msgstr ""
 
-#: transport-helper.c:798
+#: transport-helper.c:801
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr ""
 
-#: transport-helper.c:859
+#: transport-helper.c:862
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr ""
 
-#: transport-helper.c:942
+#: transport-helper.c:945
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr ""
 
-#: transport-helper.c:945
+#: transport-helper.c:948
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr ""
 
-#: transport-helper.c:948
+#: transport-helper.c:951
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr ""
 
-#: transport-helper.c:953
+#: transport-helper.c:956
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr ""
 
-#: transport-helper.c:957
+#: transport-helper.c:960
 #, c-format
 msgid "helper %s does not support --%s"
 msgstr ""
 
-#: transport-helper.c:964
+#: transport-helper.c:967
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr ""
 
-#: transport-helper.c:1064
+#: transport-helper.c:1067
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr ""
 
-#: transport-helper.c:1069
+#: transport-helper.c:1072
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr ""
 
-#: transport-helper.c:1116
+#: transport-helper.c:1119
 msgid "couldn't run fast-export"
 msgstr ""
 
-#: transport-helper.c:1121
+#: transport-helper.c:1124
 msgid "error while running fast-export"
 msgstr ""
 
-#: transport-helper.c:1146
+#: transport-helper.c:1149
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
 "Perhaps you should specify a branch.\n"
 msgstr ""
 
-#: transport-helper.c:1228
+#: transport-helper.c:1231
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr ""
 
-#: transport-helper.c:1237
+#: transport-helper.c:1240
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr ""
 
-#: transport-helper.c:1389
+#: transport-helper.c:1392
 #, c-format
 msgid "read(%s) failed"
 msgstr ""
 
-#: transport-helper.c:1416
+#: transport-helper.c:1419
 #, c-format
 msgid "write(%s) failed"
 msgstr ""
 
-#: transport-helper.c:1465
+#: transport-helper.c:1468
 #, c-format
 msgid "%s thread failed"
 msgstr ""
 
-#: transport-helper.c:1469
+#: transport-helper.c:1472
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr ""
 
-#: transport-helper.c:1488 transport-helper.c:1492
+#: transport-helper.c:1491 transport-helper.c:1495
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr ""
 
-#: transport-helper.c:1529
+#: transport-helper.c:1532
 #, c-format
 msgid "%s process failed to wait"
 msgstr ""
 
-#: transport-helper.c:1533
+#: transport-helper.c:1536
 #, c-format
 msgid "%s process failed"
 msgstr ""
 
-#: transport-helper.c:1551 transport-helper.c:1560
+#: transport-helper.c:1554 transport-helper.c:1563
 msgid "can't start thread for copying data"
 msgstr ""
 
@@ -8984,58 +9350,58 @@ msgstr ""
 msgid "Would set upstream of '%s' to '%s' of '%s'\n"
 msgstr ""
 
-#: transport.c:145
+#: transport.c:138
 #, c-format
 msgid "could not read bundle '%s'"
 msgstr ""
 
-#: transport.c:227
+#: transport.c:234
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr ""
 
-#: transport.c:279
+#: transport.c:289
 msgid "see protocol.version in 'git help config' for more details"
 msgstr ""
 
-#: transport.c:280
+#: transport.c:290
 msgid "server options require protocol version 2 or later"
 msgstr ""
 
-#: transport.c:407
+#: transport.c:418
 msgid "server does not support wait-for-done"
 msgstr ""
 
-#: transport.c:759
+#: transport.c:770
 msgid "could not parse transport.color.* config"
 msgstr ""
 
-#: transport.c:834
+#: transport.c:845
 msgid "support for protocol v2 not implemented yet"
 msgstr ""
 
-#: transport.c:967
+#: transport.c:978
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr ""
 
-#: transport.c:1033
+#: transport.c:1044
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr ""
 
-#: transport.c:1082
+#: transport.c:1093
 msgid "git-over-rsync is no longer supported"
 msgstr ""
 
-#: transport.c:1185
+#: transport.c:1196
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
 "not be found on any remote:\n"
 msgstr ""
 
-#: transport.c:1189
+#: transport.c:1200
 #, c-format
 msgid ""
 "\n"
@@ -9051,11 +9417,11 @@ msgid ""
 "\n"
 msgstr ""
 
-#: transport.c:1197
+#: transport.c:1208
 msgid "Aborting."
 msgstr ""
 
-#: transport.c:1343
+#: transport.c:1354
 msgid "failed to push all needed submodules"
 msgstr ""
 
@@ -9275,16 +9641,16 @@ msgid ""
 "colliding group is in the working tree:\n"
 msgstr ""
 
-#: unpack-trees.c:1636
+#: unpack-trees.c:1664
 msgid "Updating index flags"
 msgstr ""
 
-#: unpack-trees.c:2803
+#: unpack-trees.c:2925
 #, c-format
 msgid "worktree and untracked commit have duplicate entries: %s"
 msgstr ""
 
-#: upload-pack.c:1565
+#: upload-pack.c:1579
 msgid "expected flush after fetch arguments"
 msgstr "bilasan diharapkan setelah argumen pengambilan"
 
@@ -9321,124 +9687,138 @@ msgstr ""
 msgid "Fetching objects"
 msgstr ""
 
-#: worktree.c:238 builtin/am.c:2209 builtin/bisect--helper.c:156
+#: worktree.c:237 builtin/am.c:2210 builtin/bisect--helper.c:156
 #, c-format
 msgid "failed to read '%s'"
 msgstr "gagal membaca '%s'"
 
-#: worktree.c:305
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr "'%s' pada pohon kerja utama bukan direktori repositori"
 
-#: worktree.c:316
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr "berkas '%s' tidak berisi jalur absolut ke lokasi pohon kerja"
 
-#: worktree.c:328
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr "'%s' tidak ada"
 
-#: worktree.c:334
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr "'%s' bukan berkas .git, kode error %d"
 
-#: worktree.c:343
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "'%s' tidak menunjuk kembali ke '%s'"
 
-#: worktree.c:604
+#: worktree.c:600
 msgid "not a directory"
 msgstr "bukan direktori"
 
-#: worktree.c:613
+#: worktree.c:609
 msgid ".git is not a file"
 msgstr ".git bukan berkas"
 
-#: worktree.c:615
+#: worktree.c:611
 msgid ".git file broken"
 msgstr "berkas .git rusak"
 
-#: worktree.c:617
+#: worktree.c:613
 msgid ".git file incorrect"
 msgstr "berkas .git salah"
 
-#: worktree.c:723
+#: worktree.c:719
 msgid "not a valid path"
 msgstr "bukan jalur valid"
 
-#: worktree.c:729
+#: worktree.c:725
 msgid "unable to locate repository; .git is not a file"
 msgstr "tidak dapat menempatkan repositori; .git bukan berkas"
 
-#: worktree.c:733
+#: worktree.c:729
 msgid "unable to locate repository; .git file does not reference a repository"
 msgstr ""
 "tidak dapat menempatkan repositori; berkas .git tidak merujuk repositori"
 
-#: worktree.c:737
+#: worktree.c:733
 msgid "unable to locate repository; .git file broken"
 msgstr "tidak dapat menempatkan repositori; berkas .git rusak"
 
-#: worktree.c:743
+#: worktree.c:739
 msgid "gitdir unreadable"
 msgstr "gitdir tidak dapat dibaca"
 
-#: worktree.c:747
+#: worktree.c:743
 msgid "gitdir incorrect"
 msgstr "gitdir salah"
 
-#: worktree.c:772
+#: worktree.c:768
 msgid "not a valid directory"
 msgstr "bukan direktori valid"
 
-#: worktree.c:778
+#: worktree.c:774
 msgid "gitdir file does not exist"
 msgstr "berkas gitdir tidak ada"
 
-#: worktree.c:783 worktree.c:792
+#: worktree.c:779 worktree.c:788
 #, c-format
 msgid "unable to read gitdir file (%s)"
 msgstr "tidak dapat membaca berkas gitdir (%s)"
 
-#: worktree.c:802
+#: worktree.c:798
 #, c-format
 msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
 msgstr "baca singkat (diharapkan %<PRIuMAX> bita, terbaca %<PRIuMAX>)"
 
-#: worktree.c:810
+#: worktree.c:806
 msgid "invalid gitdir file"
 msgstr "berkas gitdir tidak valid"
 
-#: worktree.c:818
+#: worktree.c:814
 msgid "gitdir file points to non-existent location"
 msgstr "berkas gitdir menunjuk ke lokasi yang tidak ada"
 
-#: wrapper.c:151
+#: worktree.c:830
 #, c-format
-msgid "could not setenv '%s'"
-msgstr ""
+msgid "unable to set %s in '%s'"
+msgstr "tidak dapat menyetel %s di '%s'"
 
-#: wrapper.c:203
+#: worktree.c:832
 #, c-format
-msgid "unable to create '%s'"
+msgid "unable to unset %s in '%s'"
+msgstr "tidak dapat menyetel balik %s di '%s'"
+
+#: worktree.c:852
+msgid "failed to set extensions.worktreeConfig setting"
+msgstr "gagal menyetel setelan extensions.worktreeConfig"
+
+#: wrapper.c:161
+#, c-format
+msgid "could not setenv '%s'"
+msgstr ""
+
+#: wrapper.c:213
+#, c-format
+msgid "unable to create '%s'"
 msgstr "tidak dapat membuat '%s'"
 
-#: wrapper.c:205 wrapper.c:375
+#: wrapper.c:215 wrapper.c:385
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr ""
 
-#: wrapper.c:406 wrapper.c:607
+#: wrapper.c:416 wrapper.c:683
 #, c-format
 msgid "unable to access '%s'"
 msgstr ""
 
-#: wrapper.c:615
+#: wrapper.c:691
 msgid "unable to get current working directory"
 msgstr ""
 
@@ -9475,11 +9855,11 @@ msgstr ""
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr "  (gunakan \"git rm <berkas>\" untuk menandai penyelesaian)"
 
-#: wt-status.c:211 wt-status.c:1131
+#: wt-status.c:211 wt-status.c:1140
 msgid "Changes to be committed:"
 msgstr "Perubahan yang akan dikomit:"
 
-#: wt-status.c:234 wt-status.c:1140
+#: wt-status.c:234 wt-status.c:1149
 msgid "Changes not staged for commit:"
 msgstr "Perubahan yang tidak digelar untuk komit:"
 
@@ -9583,22 +9963,22 @@ msgstr "konten yang dimodifikasi, "
 msgid "untracked content, "
 msgstr "konten yang tak dilacak, "
 
-#: wt-status.c:964
+#: wt-status.c:973
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] "Simpanan Anda saat ini ada %d entri"
 msgstr[1] "Simpanan Anda saat ini ada %d entri"
 
-#: wt-status.c:995
+#: wt-status.c:1004
 msgid "Submodules changed but not updated:"
 msgstr "Submodul berubah tapi tak diperbarui:"
 
-#: wt-status.c:997
+#: wt-status.c:1006
 msgid "Submodule changes to be committed:"
 msgstr "Perubahan submodul yang akan dikomit:"
 
-#: wt-status.c:1079
+#: wt-status.c:1088
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -9606,7 +9986,7 @@ msgstr ""
 "Jangan ubah atau hapus baris diatas.\n"
 "Semua dibawahnya akan diabaikan."
 
-#: wt-status.c:1171
+#: wt-status.c:1180
 #, c-format
 msgid ""
 "\n"
@@ -9617,273 +9997,273 @@ msgstr ""
 "Butuh %.2f detik untuk menghitung cabang di depan/di belakang nilai.\n"
 "Anda bisa gunakan '--no-ahead-behind' untuk menghindari hal tersebut.\n"
 
-#: wt-status.c:1201
+#: wt-status.c:1210
 msgid "You have unmerged paths."
 msgstr "Anda punya jalur yang tak tergabung."
 
-#: wt-status.c:1204
+#: wt-status.c:1213
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (selesaikan konflik dan jalankan \"git commit\")"
 
-#: wt-status.c:1206
+#: wt-status.c:1215
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (gunakan \"git merge --abort\" untuk membatalkan penggabungan)"
 
-#: wt-status.c:1210
+#: wt-status.c:1219
 msgid "All conflicts fixed but you are still merging."
 msgstr "Semua konflik sudah selesai tapi Anda masih menggabungkan."
 
-#: wt-status.c:1213
+#: wt-status.c:1222
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (gunakan \"git commit\" untuk mengakhiri penggabungan)"
 
-#: wt-status.c:1224
+#: wt-status.c:1233
 msgid "You are in the middle of an am session."
 msgstr "Anda berada ditengah-tengah sesi am."
 
-#: wt-status.c:1227
+#: wt-status.c:1236
 msgid "The current patch is empty."
 msgstr "Jalur saat ini kosong"
 
-#: wt-status.c:1232
+#: wt-status.c:1241
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (selesaikan konflik lalu jalankan \"git am --continue\")"
 
-#: wt-status.c:1234
+#: wt-status.c:1243
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (gunakan \"git am --skip\" untuk lewati tambalan ini)"
 
-#: wt-status.c:1237
+#: wt-status.c:1246
 msgid ""
 "  (use \"git am --allow-empty\" to record this patch as an empty commit)"
 msgstr ""
 "  (gunakan \"git am --allow-empty\" untuk merekam tambalan ini sebagai komit "
 "kosong)"
 
-#: wt-status.c:1239
+#: wt-status.c:1248
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr "  (gunakan \"git am --abort\" untuk mengembalikan cabang asal)"
 
-#: wt-status.c:1372
+#: wt-status.c:1381
 msgid "git-rebase-todo is missing."
 msgstr "git-rebase-todo hilang."
 
-#: wt-status.c:1374
+#: wt-status.c:1383
 msgid "No commands done."
 msgstr "Tidak ada perintah selesai."
 
-#: wt-status.c:1377
+#: wt-status.c:1386
 #, c-format
-msgid "Last command done (%d command done):"
-msgid_plural "Last commands done (%d commands done):"
-msgstr[0] "Perintah yang selesai (%d perintah):"
-msgstr[1] "Perintah yang selesai (%d perintah):"
+msgid "Last command done (%<PRIuMAX> command done):"
+msgid_plural "Last commands done (%<PRIuMAX> commands done):"
+msgstr[0] "Perintah yang selesai (%<PRIuMAX> perintah):"
+msgstr[1] "Perintah yang selesai (%<PRIuMAX> perintah):"
 
-#: wt-status.c:1388
+#: wt-status.c:1397
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (lihat lebih lanjut di berkas %s)"
 
-#: wt-status.c:1393
+#: wt-status.c:1402
 msgid "No commands remaining."
 msgstr "Tidak ada perintah yang tersisa."
 
-#: wt-status.c:1396
+#: wt-status.c:1405
 #, c-format
-msgid "Next command to do (%d remaining command):"
-msgid_plural "Next commands to do (%d remaining commands):"
-msgstr[0] "Perintah berikutnya (%d perintah tersisa):"
-msgstr[1] "Perintah berikutnya (%d perintah tersisa):"
+msgid "Next command to do (%<PRIuMAX> remaining command):"
+msgid_plural "Next commands to do (%<PRIuMAX> remaining commands):"
+msgstr[0] "Perintah berikutnya (%<PRIuMAX> perintah tersisa):"
+msgstr[1] "Perintah berikutnya (%<PRIuMAX> perintah tersisa):"
 
-#: wt-status.c:1404
+#: wt-status.c:1413
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr "  (gunakan \"git rebase --edit-todo\" untuk lihat dan sunting)"
 
-#: wt-status.c:1416
+#: wt-status.c:1425
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "Anda sedang mendasarkan ulang cabang '%s' pada '%s'."
 
-#: wt-status.c:1421
+#: wt-status.c:1430
 msgid "You are currently rebasing."
 msgstr "Anda sedang mendasarkan ulang."
 
-#: wt-status.c:1434
+#: wt-status.c:1443
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr "  (selesaikan konflik lalu jalankan \"git rebase --continue\")"
 
-#: wt-status.c:1436
+#: wt-status.c:1445
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (gunakan \"git rebase --skip\" untuk lewati tambalan ini)"
 
-#: wt-status.c:1438
+#: wt-status.c:1447
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr "  (gunakan \"git rebase --abort\" untuk check out cabang asal)"
 
-#: wt-status.c:1445
+#: wt-status.c:1454
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr "  (semua konflik sudah selesai: jalankan \"git rebase --continue\")"
 
-#: wt-status.c:1449
+#: wt-status.c:1458
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
 msgstr ""
 "Anda sedang membelah komit saat mendasarkan ulang cabang '%s' pada '%s'."
 
-#: wt-status.c:1454
+#: wt-status.c:1463
 msgid "You are currently splitting a commit during a rebase."
 msgstr "Anda sedang membelah komit saat mendasarkan ulang."
 
-#: wt-status.c:1457
+#: wt-status.c:1466
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr ""
 "  (Setelah direktori kerja Anda bersih, jalankan \"git rebase --continue\")"
 
-#: wt-status.c:1461
+#: wt-status.c:1470
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr ""
 "Anda sedang menyunting komit saat mendasarkan ulang cabang '%s' pada '%s'."
 
-#: wt-status.c:1466
+#: wt-status.c:1475
 msgid "You are currently editing a commit during a rebase."
 msgstr "Anda sedang menyunting komit saat mendasarkan ulang."
 
-#: wt-status.c:1469
+#: wt-status.c:1478
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr "  (gunakan \"git commit --amend\" untuk mengubah komit saat ini)"
 
-#: wt-status.c:1471
+#: wt-status.c:1480
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr ""
 "  (gunakan \"git rebase --continue\" begitu Anda puas dengan perubahan Anda)"
 
-#: wt-status.c:1482
+#: wt-status.c:1491
 msgid "Cherry-pick currently in progress."
 msgstr "Petik ceri sedang berjalan."
 
-#: wt-status.c:1485
+#: wt-status.c:1494
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "Anda sedang memetik ceri komit %s."
 
-#: wt-status.c:1492
+#: wt-status.c:1501
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr "  (selesaikan konflik dan jalankan \"git cherry-pick --continue\")"
 
-#: wt-status.c:1495
+#: wt-status.c:1504
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (jalankan \"git cherry-pick --continue\" untuk melanjutkan)"
 
-#: wt-status.c:1498
+#: wt-status.c:1507
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr ""
 "  (semua konflik sudah selesai: jalankan \"git cherry-pick --continue\")"
 
-#: wt-status.c:1500
+#: wt-status.c:1509
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr "  (gunakan \"git cherry-pick --skip\" untuk lewati tambalan ini)"
 
-#: wt-status.c:1502
+#: wt-status.c:1511
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr ""
 "  (gunakan \"git cherry-pick --abort\" untuk membatalkan operasi petik ceri)"
 
-#: wt-status.c:1512
+#: wt-status.c:1521
 msgid "Revert currently in progress."
 msgstr "Pengembalian sedang berjalang."
 
-#: wt-status.c:1515
+#: wt-status.c:1524
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Anda sedang mengembalikan komit %s."
 
-#: wt-status.c:1521
+#: wt-status.c:1530
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (selesaikan konflik dan jalankan \"git revert --continue\")"
 
-#: wt-status.c:1524
+#: wt-status.c:1533
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (jalankan \"git revert --continue\" untuk melanjutkan)"
 
-#: wt-status.c:1527
+#: wt-status.c:1536
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (semua konflik sudah selesai: jalankan \"git revert --continue\")"
 
-#: wt-status.c:1529
+#: wt-status.c:1538
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr "  (gunakan \"git revert --skip\" untuk lewati tambalan ini)"
 
-#: wt-status.c:1531
+#: wt-status.c:1540
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr ""
 "  (gunakan \"git revert --abort\" untuk membatalkan operasi pengembalian)"
 
-#: wt-status.c:1541
+#: wt-status.c:1550
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "Anda sedang membagi dua, dimulai dari cabang '%s'."
 
-#: wt-status.c:1545
+#: wt-status.c:1554
 msgid "You are currently bisecting."
 msgstr "Anda sedang membagi dua."
 
-#: wt-status.c:1548
+#: wt-status.c:1557
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (gunakan \"git bisect reset\" untuk kembali ke cabang asal)"
 
-#: wt-status.c:1559
+#: wt-status.c:1568
 msgid "You are in a sparse checkout."
 msgstr "Anda berada dalam checkout tipis."
 
-#: wt-status.c:1562
+#: wt-status.c:1571
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
 msgstr "Anda berada dalam checkout tipis dengan %d%% berkas terlacak ada."
 
-#: wt-status.c:1806
+#: wt-status.c:1815
 msgid "On branch "
 msgstr "Pada cabang "
 
-#: wt-status.c:1813
+#: wt-status.c:1822
 msgid "interactive rebase in progress; onto "
 msgstr "sedang mendasarkan ulang interaktif; ke "
 
-#: wt-status.c:1815
+#: wt-status.c:1824
 msgid "rebase in progress; onto "
 msgstr "sedang mendasarkan ulang; ke "
 
-#: wt-status.c:1820
+#: wt-status.c:1829
 msgid "HEAD detached at "
 msgstr ""
 
-#: wt-status.c:1822
+#: wt-status.c:1831
 msgid "HEAD detached from "
 msgstr ""
 
-#: wt-status.c:1825
+#: wt-status.c:1834
 msgid "Not currently on any branch."
 msgstr "Tidak sedang berada pada cabang apapun."
 
-#: wt-status.c:1842
+#: wt-status.c:1851
 msgid "Initial commit"
 msgstr "Komit awal"
 
-#: wt-status.c:1843
+#: wt-status.c:1852
 msgid "No commits yet"
 msgstr "Tidak ada komit"
 
-#: wt-status.c:1857
+#: wt-status.c:1866
 msgid "Untracked files"
 msgstr "Berkas tak terlacak"
 
-#: wt-status.c:1859
+#: wt-status.c:1868
 msgid "Ignored files"
 msgstr "Berkas yang diabaikan"
 
-#: wt-status.c:1863
+#: wt-status.c:1872
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -9894,32 +10274,32 @@ msgstr ""
 "mungkin bisa mempercepat, tapi Anda harus berhati-hati jangan sampai lupa\n"
 "untuk tambahkan berkas baru sendiri (lihat 'git help status')."
 
-#: wt-status.c:1869
+#: wt-status.c:1878
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Berkas tak terlacak yang tak disebutkan%s"
 
-#: wt-status.c:1871
+#: wt-status.c:1880
 msgid " (use -u option to show untracked files)"
 msgstr " (gunakan opsi -u untuk melihat berkas yang tak terlacak)"
 
-#: wt-status.c:1877
+#: wt-status.c:1886
 msgid "No changes"
 msgstr "Tidak ada perubahan"
 
-#: wt-status.c:1882
+#: wt-status.c:1891
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 "tidak ada perubahan untuk dikomit (gunakan \"git add\" dan/atau \"git commit "
 "-a\")\n"
 
-#: wt-status.c:1886
+#: wt-status.c:1895
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "tidak ada perubahan untuk dikomit\n"
 
-#: wt-status.c:1890
+#: wt-status.c:1899
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -9928,64 +10308,64 @@ msgstr ""
 "tidak ada perubahan untuk dikomit tapi berkas yang tak terlacak ada(gunakan "
 "\"git add\" untuk lacak)\n"
 
-#: wt-status.c:1894
+#: wt-status.c:1903
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr "tidak ada perubahan untuk dikomit tapi berkas yang tak terlacak ada\n"
 
-#: wt-status.c:1898
+#: wt-status.c:1907
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 "tidak ada yang dikomit (buat/salin berkas dan gunakan \"git add\" untuk "
 "lacak)\n"
 
-#: wt-status.c:1902 wt-status.c:1908
+#: wt-status.c:1911 wt-status.c:1917
 #, c-format
 msgid "nothing to commit\n"
 msgstr "tidak ada yang dikomit\n"
 
-#: wt-status.c:1905
+#: wt-status.c:1914
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr "tidak ada yang dikomit (gunakan -u untuk lihat berkas tak terlacak)\n"
 
-#: wt-status.c:1910
+#: wt-status.c:1919
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "tidak ada yang dikomit, pohon kerja bersih\n"
 
-#: wt-status.c:2015
+#: wt-status.c:2024
 msgid "No commits yet on "
 msgstr "Tidak ada komit apapun pada "
 
-#: wt-status.c:2019
+#: wt-status.c:2028
 msgid "HEAD (no branch)"
 msgstr "HEAD (tanpa cabang)"
 
-#: wt-status.c:2050
+#: wt-status.c:2059
 msgid "different"
 msgstr "berbeda"
 
-#: wt-status.c:2052 wt-status.c:2060
+#: wt-status.c:2061 wt-status.c:2069
 msgid "behind "
 msgstr "di belakang "
 
-#: wt-status.c:2055 wt-status.c:2058
+#: wt-status.c:2064 wt-status.c:2067
 msgid "ahead "
 msgstr "di depan "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2596
+#: wt-status.c:2605
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "tidak dapat %s: Anda punya perubahan yang tidak digelar."
 
-#: wt-status.c:2602
+#: wt-status.c:2611
 msgid "additionally, your index contains uncommitted changes."
 msgstr "juga indeks Anda berisi perubahan yang belum dikomit."
 
-#: wt-status.c:2604
+#: wt-status.c:2613
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "tidak dapat %s: indeks Anda berisi perubahan yang belum dikomit."
@@ -10008,145 +10388,149 @@ msgstr ""
 msgid "could not start worker[0] for '%s'"
 msgstr ""
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:347
+#: compat/precompose_utf8.c:58 builtin/clone.c:353
 #, c-format
 msgid "failed to unlink '%s'"
+msgstr "gagal menghapus tautan '%s'"
+
+#: compat/fsmonitor/fsm-listen-darwin.c:355
+msgid "Unable to create FSEventStream."
+msgstr ""
+
+#: compat/fsmonitor/fsm-listen-darwin.c:403
+msgid "Failed to start the FSEventStream"
 msgstr ""
 
 #: builtin/add.c:26
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<opsi>] [--] <pathspec>..."
 
-#: builtin/add.c:64
+#: builtin/add.c:63
 #, c-format
 msgid "cannot chmod %cx '%s'"
 msgstr "tidak dapat chmod %cx '%s'"
 
-#: builtin/add.c:106
+#: builtin/add.c:105
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "status diff tak diharapkan %c"
 
-#: builtin/add.c:111 builtin/commit.c:298
+#: builtin/add.c:110 builtin/commit.c:299
 msgid "updating files failed"
 msgstr "gagal memperbarui berkas"
 
-#: builtin/add.c:121
+#: builtin/add.c:120
 #, c-format
 msgid "remove '%s'\n"
 msgstr "hapus '%s'\n"
 
-#: builtin/add.c:205
+#: builtin/add.c:204
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Perubahan tak tergelar setelah menyegarkan indeks:"
 
-#: builtin/add.c:313 builtin/rev-parse.c:993
+#: builtin/add.c:312 builtin/rev-parse.c:993
 msgid "Could not read the index"
 msgstr "Tidak dapat membaca indeks"
 
-#: builtin/add.c:326
+#: builtin/add.c:325
 msgid "Could not write patch"
 msgstr "Tidak dapat menulis tambalan"
 
-#: builtin/add.c:329
+#: builtin/add.c:328
 msgid "editing patch failed"
 msgstr "Gagal menyunting tambalan"
 
-#: builtin/add.c:332
+#: builtin/add.c:331
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "Tidak dapat men-stat '%s'"
 
-#: builtin/add.c:334
+#: builtin/add.c:333
 msgid "Empty patch. Aborted."
 msgstr "Tambalan kosong. Dibatalkan."
 
-#: builtin/add.c:340
+#: builtin/add.c:339
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "Tidak dapat terapkan '%s'"
 
-#: builtin/add.c:348
+#: builtin/add.c:347
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr "Jalur berikut diabaikan oleh salah satu dari berkas .gitignore Anda:\n"
 
-#: builtin/add.c:368 builtin/clean.c:927 builtin/fetch.c:174 builtin/mv.c:124
+#: builtin/add.c:367 builtin/clean.c:927 builtin/fetch.c:175 builtin/mv.c:124
 #: builtin/prune-packed.c:14 builtin/pull.c:208 builtin/push.c:550
-#: builtin/remote.c:1429 builtin/rm.c:244 builtin/send-pack.c:194
+#: builtin/remote.c:1454 builtin/rm.c:244 builtin/send-pack.c:194
 msgid "dry run"
 msgstr "latihan"
 
-#: builtin/add.c:369 builtin/check-ignore.c:22 builtin/commit.c:1484
-#: builtin/count-objects.c:98 builtin/fsck.c:789 builtin/log.c:2313
+#: builtin/add.c:368 builtin/check-ignore.c:22 builtin/commit.c:1483
+#: builtin/count-objects.c:98 builtin/fsck.c:789 builtin/log.c:2338
 #: builtin/mv.c:123 builtin/read-tree.c:120
 msgid "be verbose"
 msgstr "jadi berkata-kata"
 
-#: builtin/add.c:371
+#: builtin/add.c:370
 msgid "interactive picking"
 msgstr "pengambilan interaktif"
 
-#: builtin/add.c:372 builtin/checkout.c:1581 builtin/reset.c:409
+#: builtin/add.c:371 builtin/checkout.c:1599 builtin/reset.c:417
 msgid "select hunks interactively"
 msgstr "pilih bingkah secara interaktif"
 
-#: builtin/add.c:373
+#: builtin/add.c:372
 msgid "edit current diff and apply"
 msgstr "sunting diff saat ini dan terapkan"
 
-#: builtin/add.c:374
+#: builtin/add.c:373
 msgid "allow adding otherwise ignored files"
 msgstr "perbolehkan tambah berkas yang diabaikan"
 
-#: builtin/add.c:375
+#: builtin/add.c:374
 msgid "update tracked files"
 msgstr "perbarui berkas terlacak"
 
-#: builtin/add.c:376
+#: builtin/add.c:375
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr "normalisasi ulang EOL berkas terlacak (menyiratkan -u)"
 
-#: builtin/add.c:377
+#: builtin/add.c:376
 msgid "record only the fact that the path will be added later"
 msgstr "rekam hanya fakta bahwa jalur akan ditambahkan nanti"
 
-#: builtin/add.c:378
+#: builtin/add.c:377
 msgid "add changes from all tracked and untracked files"
 msgstr "tambahkan perubahan dari semua berkas terlacak dan tak terlacak"
 
-#: builtin/add.c:381
+#: builtin/add.c:380
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr "abaikan jalur yang terhapus dari pohon kerja (sama dengan --no-all)"
 
-#: builtin/add.c:383
+#: builtin/add.c:382
 msgid "don't add, only refresh the index"
 msgstr "jangan tambahkan, hanya segarkan indeks"
 
-#: builtin/add.c:384
+#: builtin/add.c:383
 msgid "just skip files which cannot be added because of errors"
 msgstr "hanya lewatkan berkas yang tidak dapat ditambah karena error"
 
-#: builtin/add.c:385
+#: builtin/add.c:384
 msgid "check if - even missing - files are ignored in dry run"
 msgstr "periksa bahwa berkas yang - bahkan hilang - diabaikan dalam latihan"
 
-#: builtin/add.c:386 builtin/mv.c:128 builtin/rm.c:251
+#: builtin/add.c:385 builtin/mv.c:128 builtin/rm.c:251
 msgid "allow updating entries outside of the sparse-checkout cone"
 msgstr "perbolehkan perbarui entri di luar kerucut checkout tipis"
 
-#: builtin/add.c:388 builtin/update-index.c:1004
+#: builtin/add.c:387 builtin/update-index.c:1023
 msgid "override the executable bit of the listed files"
 msgstr "timpa bit yang dapat dieksekusi dari berkas terdaftar"
 
-#: builtin/add.c:390
+#: builtin/add.c:389
 msgid "warn when adding an embedded repository"
 msgstr "peringatkan ketika menambahkan repositori tertanam"
 
-#: builtin/add.c:392
-msgid "backend for `git stash -p`"
-msgstr "tulang belakang untuk `git stash -p`"
-
-#: builtin/add.c:410
+#: builtin/add.c:407
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -10177,12 +10561,12 @@ msgstr ""
 "\n"
 "Lihat \"git help submodule\" untuk selengkapnya."
 
-#: builtin/add.c:439
+#: builtin/add.c:436
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "menambahkan repositori git tertanam: %s"
 
-#: builtin/add.c:459
+#: builtin/add.c:456
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
@@ -10192,27 +10576,27 @@ msgstr ""
 "Matikan pesan ini dengan menjalankan\n"
 "\"git config advice.addIgnoredFile false\""
 
-#: builtin/add.c:474
+#: builtin/add.c:471
 msgid "adding files failed"
 msgstr "gagal menambahkan berkas"
 
-#: builtin/add.c:548
+#: builtin/add.c:534
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "--chmod param '%s' harus berupa -x atau +x"
 
-#: builtin/add.c:569 builtin/checkout.c:1751 builtin/commit.c:364
-#: builtin/reset.c:429 builtin/rm.c:275 builtin/stash.c:1713
+#: builtin/add.c:555 builtin/checkout.c:1770 builtin/commit.c:365
+#: builtin/reset.c:436 builtin/rm.c:275 builtin/stash.c:1702
 #, c-format
 msgid "'%s' and pathspec arguments cannot be used together"
 msgstr "'%s' dan argumen spek jalur tidak dapat digunakan bersamaan"
 
-#: builtin/add.c:580
+#: builtin/add.c:566
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "Tidak ada yang disebutkan, tidak ada yang ditambahkan.\n"
 
-#: builtin/add.c:582
+#: builtin/add.c:568
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
@@ -10222,121 +10606,116 @@ msgstr ""
 "Matikan pesan ini dengan menjalankan\n"
 "\"git config advice.addEmptyPathspec false\""
 
-#: builtin/am.c:202
-#, c-format
-msgid "Invalid value for --empty: %s"
-msgstr "Nilai tidak valid untuk --empty: %s"
-
-#: builtin/am.c:392
+#: builtin/am.c:393
 msgid "could not parse author script"
 msgstr "tidak dapat mengurai skrip pengarang"
 
-#: builtin/am.c:482
+#: builtin/am.c:483
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "'%s' dihapus oleh kail applypatch-msg"
 
-#: builtin/am.c:524
+#: builtin/am.c:525
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Baris masukan salah format: '%s'."
 
-#: builtin/am.c:562
+#: builtin/am.c:563
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Gagal menyalin catatan dari '%s' ke '%s'"
 
-#: builtin/am.c:588
+#: builtin/am.c:589
 msgid "fseek failed"
 msgstr "fseek gagal"
 
-#: builtin/am.c:776
+#: builtin/am.c:777
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "tidak dapat mengurai tambalan '%s'"
 
-#: builtin/am.c:841
+#: builtin/am.c:842
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Hanya satu rangkaian tambalan StGIT yang bisa diterapkan sekaligus"
 
-#: builtin/am.c:889
+#: builtin/am.c:890
 msgid "invalid timestamp"
 msgstr "stempel waktu tidak valid"
 
-#: builtin/am.c:894 builtin/am.c:906
+#: builtin/am.c:895 builtin/am.c:907
 msgid "invalid Date line"
 msgstr "baris Date tidak valid"
 
-#: builtin/am.c:901
+#: builtin/am.c:902
 msgid "invalid timezone offset"
 msgstr "offset zona waktu tidak valid"
 
-#: builtin/am.c:994
+#: builtin/am.c:995
 msgid "Patch format detection failed."
 msgstr "Pendeteksian format tambalan gagal."
 
-#: builtin/am.c:999 builtin/clone.c:300
+#: builtin/am.c:1000 builtin/clone.c:306
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "gagal membuat direktori '%s'"
 
-#: builtin/am.c:1004
+#: builtin/am.c:1005
 msgid "Failed to split patches."
 msgstr "Gagal memecah tambalan."
 
-#: builtin/am.c:1153
+#: builtin/am.c:1154
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "Saat Anda sudah menyelesaikan masalah ini, jalankan \"%s --continue\"."
 
-#: builtin/am.c:1154
+#: builtin/am.c:1155
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr ""
 "Jika Anda lebih suka melewati tambalan ini, jalankan \"%s --skip\" sebagai "
 "gantinya."
 
-#: builtin/am.c:1159
+#: builtin/am.c:1160
 #, c-format
 msgid "To record the empty patch as an empty commit, run \"%s --allow-empty\"."
 msgstr ""
 "Untuk merekam tambalan kosong sebagai komit kosong, jalankan \"%s --allow-"
 "empty\"."
 
-#: builtin/am.c:1161
+#: builtin/am.c:1162
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr ""
 "Untuk mengembalikan cabang yang asli dan berhenti menambal, jalankan \"%s --"
 "abort\""
 
-#: builtin/am.c:1256
+#: builtin/am.c:1257
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 "Tambalan dikirimkan dengan format=flowed; spasi pada akhir baris mungkin "
 "hilang."
 
-#: builtin/am.c:1344
+#: builtin/am.c:1345
 #, c-format
 msgid "missing author line in commit %s"
 msgstr "baris pengarang hilang dalam komit %s"
 
-#: builtin/am.c:1347
+#: builtin/am.c:1348
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "baris identitas tidak valid: %.*s"
 
-#: builtin/am.c:1566
+#: builtin/am.c:1567
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 "Repositori kekurangan blob yang diperlukan untuk mundur ke penggabungan 3 "
 "arah."
 
-#: builtin/am.c:1568
+#: builtin/am.c:1569
 msgid "Using index info to reconstruct a base tree..."
 msgstr "Menggunakan info indeks untuk membangun ulang sebuah pohon dasar..."
 
-#: builtin/am.c:1587
+#: builtin/am.c:1588
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -10344,24 +10723,24 @@ msgstr ""
 "Apakah Anda menyunting tambalan Anda?\n"
 "Itu tidak diterapkan ke blob yang direkam dalam indeksnya."
 
-#: builtin/am.c:1593
+#: builtin/am.c:1594
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "Mundur ke penambalan dasar dan penggabungan 3 arah..."
 
-#: builtin/am.c:1619
+#: builtin/am.c:1620
 msgid "Failed to merge in the changes."
 msgstr "Gagal menggabungkan perubahan."
 
-#: builtin/am.c:1651
+#: builtin/am.c:1652
 msgid "applying to an empty history"
 msgstr "menerapkan ke sebuah riwayat kosong"
 
-#: builtin/am.c:1703 builtin/am.c:1707
+#: builtin/am.c:1704 builtin/am.c:1708
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "tidak dapat melanjutkan: %s tidak ada."
 
-#: builtin/am.c:1725
+#: builtin/am.c:1726
 msgid "Commit Body is:"
 msgstr "Badan komit adalah:"
 
@@ -10369,59 +10748,59 @@ msgstr "Badan komit adalah:"
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1735
+#: builtin/am.c:1736
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr ""
 "Terapkan? [y]a/[n] tidak/[e] sunting/[v] lihat tambalan/terim[a] semua: "
 
-#: builtin/am.c:1781 builtin/commit.c:409
+#: builtin/am.c:1782 builtin/commit.c:410
 msgid "unable to write index file"
 msgstr "tidak dapat menulis berkas indeks"
 
-#: builtin/am.c:1785
+#: builtin/am.c:1786
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Indeks kotor: tidak dapat menerapkan tambalan (kotor: %s)"
 
-#: builtin/am.c:1827
+#: builtin/am.c:1828
 #, c-format
 msgid "Skipping: %.*s"
 msgstr "Melewatkan: %.*s"
 
-#: builtin/am.c:1832
+#: builtin/am.c:1833
 #, c-format
 msgid "Creating an empty commit: %.*s"
 msgstr "Membuat sebuah komit kosong: %.*s"
 
-#: builtin/am.c:1836
+#: builtin/am.c:1837
 msgid "Patch is empty."
 msgstr "Tambalan kosong."
 
-#: builtin/am.c:1847 builtin/am.c:1916
+#: builtin/am.c:1848 builtin/am.c:1917
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Menerapkan: %.*s"
 
-#: builtin/am.c:1864
+#: builtin/am.c:1865
 msgid "No changes -- Patch already applied."
 msgstr "Tidak ada perubahan -- tambalan sudah diterapkan"
 
-#: builtin/am.c:1870
+#: builtin/am.c:1871
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "Penambalan gagal pada %s %.*s"
 
-#: builtin/am.c:1874
+#: builtin/am.c:1875
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr ""
 "Gunakan 'git am --show-current-patch=diff' untuk melihat tambalan yang gagal"
 
-#: builtin/am.c:1920
+#: builtin/am.c:1921
 msgid "No changes - recorded it as an empty commit."
 msgstr "Tidak ada perubahan - direkam sebagai komit kosong."
 
-#: builtin/am.c:1922
+#: builtin/am.c:1923
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -10431,7 +10810,7 @@ msgstr ""
 "Jika tidak ada lagi yang diterapkan, sepertinya sesuatu yang lain sudah \n"
 "memasukkan perubahan yang sama; mungkin Anda ingin melewatkan tambalan ini."
 
-#: builtin/am.c:1930
+#: builtin/am.c:1931
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -10444,17 +10823,17 @@ msgstr ""
 "Anda mungkin jalankan `git rm` pada berkas untuk menerima \"penghapusan oleh "
 "mereka\" untuk itu."
 
-#: builtin/am.c:2038 builtin/am.c:2042 builtin/am.c:2054 builtin/reset.c:448
-#: builtin/reset.c:456
+#: builtin/am.c:2039 builtin/am.c:2043 builtin/am.c:2055 builtin/reset.c:455
+#: builtin/reset.c:463
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "Tidak dapat mengurai objek '%s'."
 
-#: builtin/am.c:2090 builtin/am.c:2166
+#: builtin/am.c:2091 builtin/am.c:2167
 msgid "failed to clean index"
 msgstr "gagal membersihkan indeks"
 
-#: builtin/am.c:2134
+#: builtin/am.c:2135
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -10462,168 +10841,159 @@ msgstr ""
 "Sepertinya Anda telah memindahkan HEAD sejak kegagalan 'am' terakhir.\n"
 "Tidak memutar ulang ke ORIG_HEAD"
 
-#: builtin/am.c:2242
-#, c-format
-msgid "Invalid value for --patch-format: %s"
-msgstr "Nilai tidak valid untuk --patch-format: %s"
-
-#: builtin/am.c:2285
-#, c-format
-msgid "Invalid value for --show-current-patch: %s"
-msgstr "Nilai tidak valid untuk --show-current-patch: %s"
-
-#: builtin/am.c:2289
+#: builtin/am.c:2292
 #, c-format
 msgid "options '%s=%s' and '%s=%s' cannot be used together"
 msgstr "Opsi '%s=%s' dan '%s=%s' tidak dapat digunakan bersamaan"
 
-#: builtin/am.c:2320
+#: builtin/am.c:2323
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<opsi>] [(<mbox> | <Maildir>)...]"
 
-#: builtin/am.c:2321
+#: builtin/am.c:2324
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<opsi>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2327
+#: builtin/am.c:2330
 msgid "run interactively"
 msgstr "jalankan secara interaktif"
 
-#: builtin/am.c:2329
+#: builtin/am.c:2332
 msgid "historical option -- no-op"
 msgstr "opsi bersejarah -- no-op"
 
-#: builtin/am.c:2331
+#: builtin/am.c:2334
 msgid "allow fall back on 3way merging if needed"
 msgstr "perbolehkan mundur ke penggabungan 3 arah jika diperlukan"
 
-#: builtin/am.c:2332 builtin/init-db.c:547 builtin/prune-packed.c:16
-#: builtin/repack.c:642 builtin/stash.c:962
+#: builtin/am.c:2335 builtin/init-db.c:547 builtin/prune-packed.c:16
+#: builtin/repack.c:646 builtin/stash.c:946
 msgid "be quiet"
 msgstr "jadi senyap"
 
-#: builtin/am.c:2334
+#: builtin/am.c:2337
 msgid "add a Signed-off-by trailer to the commit message"
 msgstr "tambahkan trailer Signed-off-by kepada pesan komit"
 
-#: builtin/am.c:2337
+#: builtin/am.c:2340
 msgid "recode into utf8 (default)"
 msgstr "koding ulang ke dalam utf8 (asali)"
 
-#: builtin/am.c:2339
+#: builtin/am.c:2342
 msgid "pass -k flag to git-mailinfo"
 msgstr "lewatkan opsi -k ke git-mailinfo"
 
-#: builtin/am.c:2341
+#: builtin/am.c:2344
 msgid "pass -b flag to git-mailinfo"
 msgstr "lewatkan opsi -b ke git-mailinfo"
 
-#: builtin/am.c:2343
+#: builtin/am.c:2346
 msgid "pass -m flag to git-mailinfo"
 msgstr "lewatkan opsi -m ke git-mailinfo"
 
-#: builtin/am.c:2345
+#: builtin/am.c:2348
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "lewatkan opsi --keep-cr ke git-mailsplit untuk format mbox"
 
-#: builtin/am.c:2348
+#: builtin/am.c:2351
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr ""
 "jangan lewatkan opsi --keep-cr ke git-mailsplit tak bergantung pada am.keepcr"
 
-#: builtin/am.c:2351
+#: builtin/am.c:2354
 msgid "strip everything before a scissors line"
 msgstr "copot semuanya sebelum garis gunting"
 
-#: builtin/am.c:2353
+#: builtin/am.c:2356
 msgid "pass it through git-mailinfo"
 msgstr "lewatkannya melalui git-mailinfo"
 
-#: builtin/am.c:2356 builtin/am.c:2359 builtin/am.c:2362 builtin/am.c:2365
-#: builtin/am.c:2368 builtin/am.c:2371 builtin/am.c:2374 builtin/am.c:2377
-#: builtin/am.c:2383
+#: builtin/am.c:2359 builtin/am.c:2362 builtin/am.c:2365 builtin/am.c:2368
+#: builtin/am.c:2371 builtin/am.c:2374 builtin/am.c:2377 builtin/am.c:2380
+#: builtin/am.c:2386
 msgid "pass it through git-apply"
 msgstr "lewatkannya melalui git-apply"
 
-#: builtin/am.c:2373 builtin/commit.c:1515 builtin/fmt-merge-msg.c:18
-#: builtin/fmt-merge-msg.c:21 builtin/grep.c:919 builtin/merge.c:263
+#: builtin/am.c:2376 builtin/commit.c:1514 builtin/fmt-merge-msg.c:18
+#: builtin/fmt-merge-msg.c:21 builtin/grep.c:920 builtin/merge.c:263
 #: builtin/pull.c:142 builtin/pull.c:204 builtin/pull.c:221
-#: builtin/rebase.c:1046 builtin/repack.c:653 builtin/repack.c:657
-#: builtin/repack.c:659 builtin/show-branch.c:649 builtin/show-ref.c:172
-#: builtin/tag.c:445 parse-options.h:154 parse-options.h:175
-#: parse-options.h:317
+#: builtin/rebase.c:1074 builtin/repack.c:657 builtin/repack.c:661
+#: builtin/repack.c:663 builtin/show-branch.c:650 builtin/show-ref.c:172
+#: builtin/tag.c:446 parse-options.h:159 parse-options.h:180
+#: parse-options.h:348
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2379 builtin/branch.c:680 builtin/bugreport.c:109
-#: builtin/for-each-ref.c:41 builtin/replace.c:555 builtin/tag.c:479
-#: builtin/verify-tag.c:38
+#: builtin/am.c:2382 builtin/branch.c:695 builtin/bugreport.c:109
+#: builtin/cat-file.c:848 builtin/cat-file.c:852 builtin/cat-file.c:856
+#: builtin/for-each-ref.c:41 builtin/ls-tree.c:357 builtin/replace.c:555
+#: builtin/tag.c:480 builtin/verify-tag.c:38
 msgid "format"
 msgstr "format"
 
-#: builtin/am.c:2380
+#: builtin/am.c:2383
 msgid "format the patch(es) are in"
 msgstr "format tambalan yang ada di"
 
-#: builtin/am.c:2386
+#: builtin/am.c:2389
 msgid "override error message when patch failure occurs"
 msgstr "timpa pesan error ketika kegagalan penambalan terjadi"
 
-#: builtin/am.c:2388
+#: builtin/am.c:2391
 msgid "continue applying patches after resolving a conflict"
 msgstr "lanjutkan penerapan tambalan setelah menyelesaikan konflik"
 
-#: builtin/am.c:2391
+#: builtin/am.c:2394
 msgid "synonyms for --continue"
 msgstr "sinonim untuk --continue"
 
-#: builtin/am.c:2394
+#: builtin/am.c:2397
 msgid "skip the current patch"
 msgstr "lewati tambalan saat ini"
 
-#: builtin/am.c:2397
+#: builtin/am.c:2400
 msgid "restore the original branch and abort the patching operation"
 msgstr "kembalikan cabang asli dan batalkan operasi penambalan"
 
-#: builtin/am.c:2400
+#: builtin/am.c:2403
 msgid "abort the patching operation but keep HEAD where it is"
 msgstr "batalkan operasi penambalan tetapi simpan HEAD dimanapun itu"
 
-#: builtin/am.c:2404
+#: builtin/am.c:2407
 msgid "show the patch being applied"
 msgstr "perlihatkan tambalan yang diterapkan"
 
-#: builtin/am.c:2408
+#: builtin/am.c:2411
 msgid "record the empty patch as an empty commit"
 msgstr "rekam tambalan kosong sebagai komit kosong"
 
-#: builtin/am.c:2412
+#: builtin/am.c:2415
 msgid "lie about committer date"
 msgstr "berbohong soal tanggal pengkomit"
 
-#: builtin/am.c:2414
+#: builtin/am.c:2417
 msgid "use current timestamp for author date"
 msgstr "gunakan stempel waktu saat ini untuk tanggal pengarang"
 
-#: builtin/am.c:2416 builtin/commit-tree.c:118 builtin/commit.c:1643
-#: builtin/merge.c:302 builtin/pull.c:179 builtin/rebase.c:1099
-#: builtin/revert.c:117 builtin/tag.c:460
+#: builtin/am.c:2419 builtin/commit-tree.c:118 builtin/commit.c:1642
+#: builtin/merge.c:302 builtin/pull.c:179 builtin/rebase.c:1127
+#: builtin/revert.c:117 builtin/tag.c:461
 msgid "key-id"
 msgstr "key-id"
 
-#: builtin/am.c:2417 builtin/rebase.c:1100
+#: builtin/am.c:2420 builtin/rebase.c:1128
 msgid "GPG-sign commits"
 msgstr "tandatangani komit dengan GPG"
 
-#: builtin/am.c:2420
+#: builtin/am.c:2423
 msgid "how to handle empty patches"
 msgstr "bagaimana cara menangani tambalan kosong"
 
-#: builtin/am.c:2423
+#: builtin/am.c:2426
 msgid "(internal use for git-rebase)"
 msgstr "(penggunaan internal untuk git-rebase)"
 
-#: builtin/am.c:2441
+#: builtin/am.c:2444
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
@@ -10631,17 +11001,17 @@ msgstr ""
 "Opsi -b/--binary telah menjadi no-op untuk waktu yang lama, dan\n"
 "itu akan dihapus. Mohon jangan gunakan itu lagi."
 
-#: builtin/am.c:2448
+#: builtin/am.c:2451
 msgid "failed to read the index"
 msgstr "gagal membaca indeks"
 
-#: builtin/am.c:2463
+#: builtin/am.c:2466
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr ""
 "direktori pendasaran ulang sebelumnya %s masih ada tapi mbox diberikan."
 
-#: builtin/am.c:2487
+#: builtin/am.c:2490
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -10650,11 +11020,11 @@ msgstr ""
 "Direktori menyimpang %s ditemukan.\n"
 "Gunakan \"git am --abort\" untuk menghapusnya."
 
-#: builtin/am.c:2493
+#: builtin/am.c:2496
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "Operasi penguraian tidak berjalan, kami tidak melanjutkan."
 
-#: builtin/am.c:2503
+#: builtin/am.c:2506
 msgid "interactive mode requires patches on the command line"
 msgstr "mode interaktif butuh tambalan pada baris perintah"
 
@@ -10691,14 +11061,6 @@ msgstr "git archive: sebuah bilasan diharapkan"
 msgid "git bisect--helper --bisect-reset [<commit>]"
 msgstr "git bisect--helper --bisect-reset [<komit>]"
 
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
-msgstr ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
-
 #: builtin/bisect--helper.c:26
 msgid ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
@@ -10709,10 +11071,6 @@ msgstr ""
 "good}=<istilah>] [--no-checkout] [--first-parent] [<jelek> [<bagus>...]] "
 "[--] [<jalur>...]"
 
-#: builtin/bisect--helper.c:28
-msgid "git bisect--helper --bisect-next"
-msgstr "git bisect--helper --bisect-next"
-
 #: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr "git bisect--helper --bisect-state (bad|new) [<revisi>]"
@@ -10729,10 +11087,6 @@ msgstr "git bisect--helper --bisect-replay <nama berkas>"
 msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
 msgstr "git bisect--helper --bisect-skip [(<revisi>|<rentang>)...]"
 
-#: builtin/bisect--helper.c:33
-msgid "git bisect--helper --bisect-visualize"
-msgstr "git bisect--helper --bisect-visualize"
-
 #: builtin/bisect--helper.c:34
 msgid "git bisect--helper --bisect-run <cmd>..."
 msgstr "git bisect--helper --bisect-run <perintah>..."
@@ -10953,40 +11307,50 @@ msgstr "'%s'?? Anda bilang tentang apa?"
 msgid "cannot read file '%s' for replaying"
 msgstr "tidak dapat membuka berkas '%s' untuk memainkan ulang"
 
-#: builtin/bisect--helper.c:1107 builtin/bisect--helper.c:1274
+#: builtin/bisect--helper.c:1120 builtin/bisect--helper.c:1152
+#, c-format
+msgid "running %s\n"
+msgstr "menjalankan %s\n"
+
+#: builtin/bisect--helper.c:1145 builtin/bisect--helper.c:1335
 msgid "bisect run failed: no command provided."
 msgstr "bisect run gagal: tidak ada perintah yang diberikan"
 
-#: builtin/bisect--helper.c:1116
+#: builtin/bisect--helper.c:1166
 #, c-format
-msgid "running %s\n"
-msgstr "menjalankan %s\n"
+msgid "unable to verify '%s' on good revision"
+msgstr "tidak dapat memverifikasi '%s' pada revisi bagus"
+
+#: builtin/bisect--helper.c:1172
+#, c-format
+msgid "bogus exit code %d for good revision"
+msgstr "kode keluar gadungan %d untuk revisi bagu"
 
-#: builtin/bisect--helper.c:1120
+#: builtin/bisect--helper.c:1180
 #, c-format
 msgid "bisect run failed: exit code %d from '%s' is < 0 or >= 128"
 msgstr "bisect run gagal: kode keluar %d dari '%s' < 0 atau >= 128"
 
-#: builtin/bisect--helper.c:1136
+#: builtin/bisect--helper.c:1195
 #, c-format
 msgid "cannot open file '%s' for writing"
 msgstr "tidak dapat membuka berkas '%s' untuk ditulis"
 
-#: builtin/bisect--helper.c:1152
+#: builtin/bisect--helper.c:1213
 msgid "bisect run cannot continue any more"
 msgstr "bisect run tidak dapat dilanjutkan lagi"
 
-#: builtin/bisect--helper.c:1154
+#: builtin/bisect--helper.c:1215
 #, c-format
 msgid "bisect run success"
 msgstr "bisect run sukses"
 
-#: builtin/bisect--helper.c:1157
+#: builtin/bisect--helper.c:1218
 #, c-format
 msgid "bisect found first bad commit"
 msgstr "pembagian dua menemukan komit jelek pertama"
 
-#: builtin/bisect--helper.c:1160
+#: builtin/bisect--helper.c:1221
 #, c-format
 msgid ""
 "bisect run failed: 'git bisect--helper --bisect-state %s' exited with error "
@@ -10995,71 +11359,71 @@ msgstr ""
 "bisect run gagal: 'git bisect--helper --bisect-state %s' keluar dengan kode "
 "keluar %d"
 
-#: builtin/bisect--helper.c:1192
+#: builtin/bisect--helper.c:1253
 msgid "reset the bisection state"
 msgstr "setel ulang keadaan pembagian dua"
 
-#: builtin/bisect--helper.c:1194
+#: builtin/bisect--helper.c:1255
 msgid "check whether bad or good terms exist"
 msgstr "periksa apakah ada istilah jelek atau bagus"
 
-#: builtin/bisect--helper.c:1196
+#: builtin/bisect--helper.c:1257
 msgid "print out the bisect terms"
 msgstr "cetak istilah pembagian dua"
 
-#: builtin/bisect--helper.c:1198
+#: builtin/bisect--helper.c:1259
 msgid "start the bisect session"
 msgstr "mulai sesi pembagian dua"
 
-#: builtin/bisect--helper.c:1200
+#: builtin/bisect--helper.c:1261
 msgid "find the next bisection commit"
 msgstr "temukan komit pembagian dua berikutnya"
 
-#: builtin/bisect--helper.c:1202
+#: builtin/bisect--helper.c:1263
 msgid "mark the state of ref (or refs)"
 msgstr "tandai keadaan referensi"
 
-#: builtin/bisect--helper.c:1204
+#: builtin/bisect--helper.c:1265
 msgid "list the bisection steps so far"
 msgstr "daftar langkah pembagian dua sejauh ini"
 
-#: builtin/bisect--helper.c:1206
+#: builtin/bisect--helper.c:1267
 msgid "replay the bisection process from the given file"
 msgstr "mainkan ulang proses pembagian dua dari berkas yang diberikan"
 
-#: builtin/bisect--helper.c:1208
+#: builtin/bisect--helper.c:1269
 msgid "skip some commits for checkout"
 msgstr "lewati beberapa komit untuk checkout"
 
-#: builtin/bisect--helper.c:1210
+#: builtin/bisect--helper.c:1271
 msgid "visualize the bisection"
 msgstr "visualisasikan pembagian dua"
 
-#: builtin/bisect--helper.c:1212
-msgid "use <cmd>... to automatically bisect."
+#: builtin/bisect--helper.c:1273
+msgid "use <cmd>... to automatically bisect"
 msgstr "gunakan <cmd>... untuk bagi dua otomatis."
 
-#: builtin/bisect--helper.c:1214
+#: builtin/bisect--helper.c:1275
 msgid "no log for BISECT_WRITE"
 msgstr "tidak ada log untuk BISECT_WRITE"
 
-#: builtin/bisect--helper.c:1229
+#: builtin/bisect--helper.c:1290
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr "--bisect-reset butuh baik tanpa argumen atau sebuah komit"
 
-#: builtin/bisect--helper.c:1234
+#: builtin/bisect--helper.c:1295
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms butuh 0 atau 1 argumen"
 
-#: builtin/bisect--helper.c:1243
+#: builtin/bisect--helper.c:1304
 msgid "--bisect-next requires 0 arguments"
 msgstr "--bisect-next butuh 0 argumen"
 
-#: builtin/bisect--helper.c:1254
+#: builtin/bisect--helper.c:1315
 msgid "--bisect-log requires 0 arguments"
 msgstr "--bisect-log butuh 0 argumen"
 
-#: builtin/bisect--helper.c:1259
+#: builtin/bisect--helper.c:1320
 msgid "no logfile given"
 msgstr "tidak ada berkas log yang diberikan"
 
@@ -11080,142 +11444,133 @@ msgstr "mengharapkan warna: %s"
 msgid "must end with a color"
 msgstr "harus berakhir dengan warna"
 
-#: builtin/blame.c:724
-#, c-format
-msgid "invalid color '%s' in color.blame.repeatedLines"
-msgstr "warna tidak valid '%s' pada color.blame.repeatedLines"
-
-#: builtin/blame.c:742
-msgid "invalid value for blame.coloring"
-msgstr "nilai tidak valid untuk blame.coloring"
-
-#: builtin/blame.c:841
+#: builtin/blame.c:842
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "tidak dapat menemukan revisi %s untuk diabaikan"
 
-#: builtin/blame.c:863
+#: builtin/blame.c:864
 msgid "show blame entries as we find them, incrementally"
 msgstr "perlihatkan entri penyalahan seperti yang kami temukan secara bertahap"
 
-#: builtin/blame.c:864
+#: builtin/blame.c:865
 msgid "do not show object names of boundary commits (Default: off)"
 msgstr "jangan perlihatkan nama objek dari komit perbatasan (asali: off)"
 
-#: builtin/blame.c:865
+#: builtin/blame.c:866
 msgid "do not treat root commits as boundaries (Default: off)"
 msgstr "jangan perlakukan komit akar sebagai perbatasan (asali: off)"
 
-#: builtin/blame.c:866
+#: builtin/blame.c:867
 msgid "show work cost statistics"
 msgstr "perlihatkan statistik biaya usaha"
 
-#: builtin/blame.c:867 builtin/checkout.c:1536 builtin/clone.c:94
-#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:180
+#: builtin/blame.c:868 builtin/checkout.c:1554 builtin/clone.c:98
+#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:181
 #: builtin/merge.c:301 builtin/multi-pack-index.c:103
 #: builtin/multi-pack-index.c:154 builtin/multi-pack-index.c:180
 #: builtin/multi-pack-index.c:208 builtin/pull.c:120 builtin/push.c:566
-#: builtin/send-pack.c:202
+#: builtin/remote.c:683 builtin/send-pack.c:202
 msgid "force progress reporting"
 msgstr "paksa laporkan perkembangan"
 
-#: builtin/blame.c:868
+#: builtin/blame.c:869
 msgid "show output score for blame entries"
 msgstr "perlihatkan nilai keluaran untuk entri penyalahan"
 
-#: builtin/blame.c:869
+#: builtin/blame.c:870
 msgid "show original filename (Default: auto)"
 msgstr "perlihatkan nama berkas asli (asali: auto)"
 
-#: builtin/blame.c:870
+#: builtin/blame.c:871
 msgid "show original linenumber (Default: off)"
 msgstr "perlihatkan nomor baris asli (asali: off)"
 
-#: builtin/blame.c:871
+#: builtin/blame.c:872
 msgid "show in a format designed for machine consumption"
 msgstr "perlihatkan dalam format yang didesain untuk konsumsi mesin"
 
-#: builtin/blame.c:872
+#: builtin/blame.c:873
 msgid "show porcelain format with per-line commit information"
 msgstr "perlihatkan format porselen dengan informasi komit per baris"
 
-#: builtin/blame.c:873
+#: builtin/blame.c:874
 msgid "use the same output mode as git-annotate (Default: off)"
 msgstr "gunakan mode keluaran yang sama dengan git-annotate (asali: off)"
 
-#: builtin/blame.c:874
+#: builtin/blame.c:875
 msgid "show raw timestamp (Default: off)"
 msgstr "perlihatkan stempel waktu mentah (asali: off)"
 
-#: builtin/blame.c:875
+#: builtin/blame.c:876
 msgid "show long commit SHA1 (Default: off)"
 msgstr "perlihatkan SHA1 komit panjang (asali: off)"
 
-#: builtin/blame.c:876
+#: builtin/blame.c:877
 msgid "suppress author name and timestamp (Default: off)"
 msgstr "sembunyikan nama pengarang dan stempel waktu (asali: off)"
 
-#: builtin/blame.c:877
+#: builtin/blame.c:878
 msgid "show author email instead of name (Default: off)"
 msgstr "perlihatkan email pengarang daripada nama (asali: off)"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:879
 msgid "ignore whitespace differences"
 msgstr "abaikan perbedaan spasi putih"
 
-#: builtin/blame.c:879 builtin/log.c:1838
+#: builtin/blame.c:880 builtin/log.c:1857
 msgid "rev"
 msgstr "revisi"
 
-#: builtin/blame.c:879
+#: builtin/blame.c:880
 msgid "ignore <rev> when blaming"
 msgstr "abaikan <revisi> ketika menyalahkan"
 
-#: builtin/blame.c:880
+#: builtin/blame.c:881
 msgid "ignore revisions from <file>"
 msgstr "abaikan revisi dari <berkas>"
 
-#: builtin/blame.c:881
+#: builtin/blame.c:882
 msgid "color redundant metadata from previous line differently"
 msgstr "metadata warna berlebihan dari baris sebelumnya secara berbeda"
 
-#: builtin/blame.c:882
+#: builtin/blame.c:883
 msgid "color lines by age"
 msgstr "warnai baris oleh umur"
 
-#: builtin/blame.c:883
+#: builtin/blame.c:884
 msgid "spend extra cycles to find better match"
 msgstr "perlihatkan siklus ekstra untuk menemukan cocokan yang lebih baik"
 
-#: builtin/blame.c:884
+#: builtin/blame.c:885
 msgid "use revisions from <file> instead of calling git-rev-list"
 msgstr "gunakan revisi dari <berkas> daripada memanggil git-rev-list"
 
-#: builtin/blame.c:885
+#: builtin/blame.c:886
 msgid "use <file>'s contents as the final image"
 msgstr "gunakan konten <berkas> sebagai citra final"
 
-#: builtin/blame.c:886 builtin/blame.c:887
+#: builtin/blame.c:887 builtin/blame.c:888
 msgid "score"
 msgstr "nilai"
 
-#: builtin/blame.c:886
+#: builtin/blame.c:887
 msgid "find line copies within and across files"
 msgstr "temukan salinan baris di dalam dan di seluruh berkas"
 
-#: builtin/blame.c:887
+#: builtin/blame.c:888
 msgid "find line movements within and across files"
 msgstr "temukan gerakan baris di dalam dan di seluruh baris"
 
-#: builtin/blame.c:888
+#: builtin/blame.c:889
 msgid "range"
 msgstr "rentang"
 
-#: builtin/blame.c:889
+#: builtin/blame.c:890
 msgid "process only line range <start>,<end> or function :<funcname>"
 msgstr "hanya proses rentang baris <awal>,<akhir> atau fungsi :<nama fungsi>"
 
-#: builtin/blame.c:947
+#: builtin/blame.c:949
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr ""
 "--progress tidak dapat digunakan dengan --incremental atau format porselen"
@@ -11228,18 +11583,18 @@ msgstr ""
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:998
+#: builtin/blame.c:1000
 msgid "4 years, 11 months ago"
 msgstr "4 tahun, 11 bulan yang lalu"
 
-#: builtin/blame.c:1114
+#: builtin/blame.c:1116
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] "berkas %s hanya punya %lu baris"
 msgstr[1] "berkas %s hanya punya %lu baris"
 
-#: builtin/blame.c:1159
+#: builtin/blame.c:1161
 msgid "Blaming lines"
 msgstr "Menyalahkan baris"
 
@@ -11248,30 +11603,37 @@ msgid "git branch [<options>] [-r | -a] [--merged] [--no-merged]"
 msgstr "git branch [<opsi>] [-r | -a] [--merged] [--no-merged]"
 
 #: builtin/branch.c:30
-msgid "git branch [<options>] [-l] [-f] <branch-name> [<start-point>]"
-msgstr "git branch [<opsi>] [-l] [-f] <nama-cabang> [<titik-awal>]"
+msgid ""
+"git branch [<options>] [-f] [--recurse-submodules] <branch-name> [<start-"
+"point>]"
+msgstr ""
+"git branch [<opsi>] [-f] [--recurse-submodules] <nama-cabang> [<titik-awal>]"
 
 #: builtin/branch.c:31
+msgid "git branch [<options>] [-l] [<pattern>...]"
+msgstr "git branch [<opsi>] [-l] [<pola>...]"
+
+#: builtin/branch.c:32
 msgid "git branch [<options>] [-r] (-d | -D) <branch-name>..."
 msgstr "git branch [<opsi> [-r] (-d | -D) <nama-cabang>...]"
 
-#: builtin/branch.c:32
+#: builtin/branch.c:33
 msgid "git branch [<options>] (-m | -M) [<old-branch>] <new-branch>"
 msgstr "git branch [<opsi>] (-m | -M) [<cabang-lama>] <cabang-baru>"
 
-#: builtin/branch.c:33
+#: builtin/branch.c:34
 msgid "git branch [<options>] (-c | -C) [<old-branch>] <new-branch>"
 msgstr "git branch [<opsi>] (-c | -C) [<cabang-lama>] <cabang-baru>"
 
-#: builtin/branch.c:34
+#: builtin/branch.c:35
 msgid "git branch [<options>] [-r | -a] [--points-at]"
 msgstr "git branch [<opsi>] [-r | -a] [--points-at]"
 
-#: builtin/branch.c:35
+#: builtin/branch.c:36
 msgid "git branch [<options>] [-r | -a] [--format]"
 msgstr "git branch [<opsi>] [-r | -a] [--format]"
 
-#: builtin/branch.c:153
+#: builtin/branch.c:165
 #, c-format
 msgid ""
 "deleting branch '%s' that has been merged to\n"
@@ -11280,7 +11642,7 @@ msgstr ""
 "menghapus cabang '%s' yang sudah digabungkan ke\n"
 "         '%s', tapi belum digabungkan ke HEAD."
 
-#: builtin/branch.c:157
+#: builtin/branch.c:169
 #, c-format
 msgid ""
 "not deleting branch '%s' that is not yet merged to\n"
@@ -11289,12 +11651,12 @@ msgstr ""
 "tidak menghapus cabang '%s' yang belum digabungkan ke\n"
 "         '%s', walaupun tergabung ke HEAD."
 
-#: builtin/branch.c:171
+#: builtin/branch.c:183
 #, c-format
 msgid "Couldn't look up commit object for '%s'"
 msgstr "Tidak dapat mencari objek komit untuk '%s'"
 
-#: builtin/branch.c:175
+#: builtin/branch.c:187
 #, c-format
 msgid ""
 "The branch '%s' is not fully merged.\n"
@@ -11303,111 +11665,111 @@ msgstr ""
 "Cabang '%s' belum sepenuhnya tergabung.\n"
 "Kalau Anda yakin ingin menghapus itu, jalankan 'git branch -D %s'."
 
-#: builtin/branch.c:188
+#: builtin/branch.c:200
 msgid "Update of config-file failed"
 msgstr "Pembaruan berkas konfigurasi gagal"
 
-#: builtin/branch.c:223
+#: builtin/branch.c:235
 msgid "cannot use -a with -d"
 msgstr "tidak dapat gunakan -a dengan -d"
 
-#: builtin/branch.c:230
+#: builtin/branch.c:242
 msgid "Couldn't look up commit object for HEAD"
 msgstr "Tidak dapat mencari objek komit untuk HEAD"
 
-#: builtin/branch.c:247
+#: builtin/branch.c:259
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr "Tidak dapat menghapus cabang '%s' yang ter-checkout pada '%s'"
 
-#: builtin/branch.c:262
+#: builtin/branch.c:274
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "cabang pelacak remote '%s' tidak ditemukan."
 
-#: builtin/branch.c:263
+#: builtin/branch.c:275
 #, c-format
 msgid "branch '%s' not found."
 msgstr "cabang '%s' tidak ditemukan."
 
-#: builtin/branch.c:294
+#: builtin/branch.c:306
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "Cabang pelacak remote %s (yaitu %s) dihapus.\n"
 
-#: builtin/branch.c:295
+#: builtin/branch.c:307
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "Cabang %s (yaitu %s) dihapus.\n"
 
-#: builtin/branch.c:445 builtin/tag.c:63
+#: builtin/branch.c:457 builtin/tag.c:64
 msgid "unable to parse format string"
 msgstr "tidak dapat menguraikan untai format"
 
-#: builtin/branch.c:476
+#: builtin/branch.c:488
 msgid "could not resolve HEAD"
 msgstr "tidak dapat menguraikan HEAD"
 
-#: builtin/branch.c:482
+#: builtin/branch.c:494
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "HEAD (%s) merujuk diluar refs/heads/"
 
-#: builtin/branch.c:497
+#: builtin/branch.c:509
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "Cabang %s sedang didasarkan ulang pada %s"
 
-#: builtin/branch.c:501
+#: builtin/branch.c:513
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "Cabang %s sedang dibagi dua pada %s"
 
-#: builtin/branch.c:518
+#: builtin/branch.c:530
 msgid "cannot copy the current branch while not on any."
 msgstr "tidak dapat menyalin cabang saat ini ketika tidak ada."
 
-#: builtin/branch.c:520
+#: builtin/branch.c:532
 msgid "cannot rename the current branch while not on any."
 msgstr "tidak dapat mengganti nama cabang saat ini ketika tidak ada."
 
-#: builtin/branch.c:531
+#: builtin/branch.c:543
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Nama cabang tidak valid: '%s'"
 
-#: builtin/branch.c:560
+#: builtin/branch.c:572
 msgid "Branch rename failed"
 msgstr "Penggantian nama cabang gagal"
 
-#: builtin/branch.c:562
+#: builtin/branch.c:574
 msgid "Branch copy failed"
 msgstr "Penyalinan cabang gagal"
 
-#: builtin/branch.c:566
+#: builtin/branch.c:578
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "Salinan cabang salah nama '%s' dibuat"
 
-#: builtin/branch.c:569
+#: builtin/branch.c:581
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "Cabang salah nama '%s' berganti nama"
 
-#: builtin/branch.c:575
+#: builtin/branch.c:587
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "Cabang berganti nama ke %s, tapi HEAD tidak diperbarui!"
 
-#: builtin/branch.c:584
+#: builtin/branch.c:596
 msgid "Branch is renamed, but update of config-file failed"
 msgstr "Cabang berganti nama, tapi pembaruan berkas konfigurasi gagal"
 
-#: builtin/branch.c:586
+#: builtin/branch.c:598
 msgid "Branch is copied, but update of config-file failed"
 msgstr "Cabang disalin, tapi pembaruan berkas konfigurasi gagal"
 
-#: builtin/branch.c:602
+#: builtin/branch.c:614
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -11418,176 +11780,193 @@ msgstr ""
 "  %s\n"
 "Baris yang diawali dengan '%c' akan dicopot.\n"
 
-#: builtin/branch.c:637
+#: builtin/branch.c:651
 msgid "Generic options"
 msgstr "Opsi generik"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:653
 msgid "show hash and subject, give twice for upstream branch"
 msgstr "perlihatkan hash dan subjek, berikan dua kali untuk cabang hulu"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:654
 msgid "suppress informational messages"
 msgstr "sembunyikan pesan informasi"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:656 builtin/checkout.c:1571
+#: builtin/submodule--helper.c:3077
 msgid "set branch tracking configuration"
 msgstr "setel konfigurasi pelacakan cabang"
 
-#: builtin/branch.c:645
+#: builtin/branch.c:659
 msgid "do not use"
 msgstr "jangan gunakan"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:661
 msgid "upstream"
 msgstr "hulu"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:661
 msgid "change the upstream info"
 msgstr "ubah info hulu"
 
-#: builtin/branch.c:648
+#: builtin/branch.c:662
 msgid "unset the upstream info"
 msgstr "batal-setel info hulu"
 
-#: builtin/branch.c:649
+#: builtin/branch.c:663
 msgid "use colored output"
 msgstr "gunakan keluaran berwarna"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:664
 msgid "act on remote-tracking branches"
 msgstr "lakukan pada cabang pelacak remote"
 
-#: builtin/branch.c:652 builtin/branch.c:654
+#: builtin/branch.c:666 builtin/branch.c:668
 msgid "print only branches that contain the commit"
 msgstr "cetak hanya cabang yang berisi komit"
 
-#: builtin/branch.c:653 builtin/branch.c:655
+#: builtin/branch.c:667 builtin/branch.c:669
 msgid "print only branches that don't contain the commit"
 msgstr "cetak hanya cabang yang tak berisi komit"
 
-#: builtin/branch.c:658
+#: builtin/branch.c:672
 msgid "Specific git-branch actions:"
 msgstr "Aksi git-branch spesifik:"
 
-#: builtin/branch.c:659
+#: builtin/branch.c:673
 msgid "list both remote-tracking and local branches"
 msgstr "sebut baik cabang pelacak remote dan cabang lokal"
 
-#: builtin/branch.c:661
+#: builtin/branch.c:675
 msgid "delete fully merged branch"
 msgstr "hapus cabang yang tergabung sepenuhnya"
 
-#: builtin/branch.c:662
+#: builtin/branch.c:676
 msgid "delete branch (even if not merged)"
 msgstr "hapus cabang (walaupun tak tergabung)"
 
-#: builtin/branch.c:663
+#: builtin/branch.c:677
 msgid "move/rename a branch and its reflog"
 msgstr "pindah/ganti nama cabang dan reflog-nya"
 
-#: builtin/branch.c:664
+#: builtin/branch.c:678
 msgid "move/rename a branch, even if target exists"
 msgstr "pindah/ganti nama cabang, walaupun target ada"
 
-#: builtin/branch.c:665
+#: builtin/branch.c:679
 msgid "copy a branch and its reflog"
 msgstr "salin cabang dan reflog-nya"
 
-#: builtin/branch.c:666
+#: builtin/branch.c:680
 msgid "copy a branch, even if target exists"
 msgstr "salin cabang, walapun target ada"
 
-#: builtin/branch.c:667
+#: builtin/branch.c:681
 msgid "list branch names"
 msgstr "sebut nama cabang"
 
-#: builtin/branch.c:668
+#: builtin/branch.c:682
 msgid "show current branch name"
 msgstr "perlihatkan nama cabang saat ini"
 
-#: builtin/branch.c:669
+#: builtin/branch.c:683 builtin/submodule--helper.c:3075
 msgid "create the branch's reflog"
 msgstr "buat reflog cabang"
 
-#: builtin/branch.c:671
+#: builtin/branch.c:685
 msgid "edit the description for the branch"
 msgstr "sunting deskripsi cabang"
 
-#: builtin/branch.c:672
+#: builtin/branch.c:686
 msgid "force creation, move/rename, deletion"
 msgstr "paksa buat, pindah/ganti nama, hapus"
 
-#: builtin/branch.c:673
+#: builtin/branch.c:687
 msgid "print only branches that are merged"
 msgstr "cetak hanya cabang yang tergabung"
 
-#: builtin/branch.c:674
+#: builtin/branch.c:688
 msgid "print only branches that are not merged"
 msgstr "cetak hanya cabang yang tak tergabung"
 
-#: builtin/branch.c:675
+#: builtin/branch.c:689
 msgid "list branches in columns"
 msgstr "sebut cabang dalam kolom"
 
-#: builtin/branch.c:677 builtin/for-each-ref.c:45 builtin/notes.c:413
+#: builtin/branch.c:691 builtin/for-each-ref.c:45 builtin/notes.c:413
 #: builtin/notes.c:416 builtin/notes.c:579 builtin/notes.c:582
-#: builtin/tag.c:475
+#: builtin/tag.c:476
 msgid "object"
 msgstr "objek"
 
-#: builtin/branch.c:678
+#: builtin/branch.c:692
 msgid "print only branches of the object"
 msgstr "cetak hanya cabang objek"
 
-#: builtin/branch.c:679 builtin/for-each-ref.c:51 builtin/tag.c:482
+#: builtin/branch.c:693 builtin/for-each-ref.c:51 builtin/tag.c:483
 msgid "sorting and filtering are case insensitive"
 msgstr "pengurutan dan penyaringan tak peka kapital"
 
-#: builtin/branch.c:680 builtin/for-each-ref.c:41 builtin/tag.c:480
-#: builtin/verify-tag.c:38
+#: builtin/branch.c:694 builtin/ls-files.c:667
+msgid "recurse through submodules"
+msgstr "rekursi melalui submodul"
+
+#: builtin/branch.c:695 builtin/for-each-ref.c:41 builtin/ls-tree.c:358
+#: builtin/tag.c:481 builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "format yang digunakan untuk keluaran"
 
-#: builtin/branch.c:703 builtin/clone.c:678
+#: builtin/branch.c:718 builtin/clone.c:684
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD tidak ditemukan di bawah refs/heads!"
 
-#: builtin/branch.c:742 builtin/branch.c:798 builtin/branch.c:807
+#: builtin/branch.c:739
+msgid ""
+"branch with --recurse-submodules can only be used if submodule."
+"propagateBranches is enabled"
+msgstr ""
+"cabang dengan --recurse-submodules hanya dapat digunakan jika submodule."
+"propagateBranches diaktifkan"
+
+#: builtin/branch.c:741
+msgid "--recurse-submodules can only be used to create branches"
+msgstr "--recurse-submodules hanya dapat digunakan untuk membuat cabang"
+
+#: builtin/branch.c:770 builtin/branch.c:826 builtin/branch.c:835
 msgid "branch name required"
 msgstr "nama cabang diperlukan"
 
-#: builtin/branch.c:774
+#: builtin/branch.c:802
 msgid "Cannot give description to detached HEAD"
 msgstr "Tidak dapat memberikan deskripsi ke HEAD terpisah"
 
-#: builtin/branch.c:779
+#: builtin/branch.c:807
 msgid "cannot edit description of more than one branch"
 msgstr "tidak dapat menyunting deskripsi lebih dari satu cabang"
 
-#: builtin/branch.c:786
+#: builtin/branch.c:814
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "Belum ada komit pada cabang '%s'."
 
-#: builtin/branch.c:789
+#: builtin/branch.c:817
 #, c-format
 msgid "No branch named '%s'."
 msgstr "Tidak ada cabang bernama '%s'."
 
-#: builtin/branch.c:804
+#: builtin/branch.c:832
 msgid "too many branches for a copy operation"
 msgstr "terlalu banyak cabang untuk operasi penyalinan"
 
-#: builtin/branch.c:813
+#: builtin/branch.c:841
 msgid "too many arguments for a rename operation"
 msgstr "terlalu banyak argumen untuk operasi penggantian nama"
 
-#: builtin/branch.c:818
+#: builtin/branch.c:846
 msgid "too many arguments to set new upstream"
 msgstr "terlalu banyak argumen untuk menyetel hulu baru"
 
-#: builtin/branch.c:822
+#: builtin/branch.c:850
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
@@ -11595,32 +11974,32 @@ msgstr ""
 "tidak dapat menyetel hulu HEAD ke %s ketika itu tak menunjuk pada cabang "
 "apapun."
 
-#: builtin/branch.c:825 builtin/branch.c:848
+#: builtin/branch.c:853 builtin/branch.c:873
 #, c-format
 msgid "no such branch '%s'"
 msgstr "tidak ada cabang '%s'"
 
-#: builtin/branch.c:829
+#: builtin/branch.c:857
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "cabang '%s' tidak ada"
 
-#: builtin/branch.c:842
+#: builtin/branch.c:867
 msgid "too many arguments to unset upstream"
 msgstr "terlalu banyak argumen untuk batal-setel hulu"
 
-#: builtin/branch.c:846
+#: builtin/branch.c:871
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr ""
 "tidak dapat membatal-setel hulu HEAD ketika itu tak menunjuk pada cabang "
 "apapun."
 
-#: builtin/branch.c:852
+#: builtin/branch.c:877
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "Cabang '%s' tidak ada informasi hulu"
 
-#: builtin/branch.c:862
+#: builtin/branch.c:890
 msgid ""
 "The -a, and -r, options to 'git branch' do not take a branch name.\n"
 "Did you mean to use: -a|-r --list <pattern>?"
@@ -11628,7 +12007,7 @@ msgstr ""
 "Opsi -a dan -r tidak mengambil nama cabang.\n"
 "Mungkin maksud Anda gunakan: -a|-r --list <pola>?"
 
-#: builtin/branch.c:866
+#: builtin/branch.c:894
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -11727,19 +12106,19 @@ msgstr "git bundle list-heads <berkas> [<nama referensi>...]"
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr "git bundle unbundle <berkas> [<nama referensi>...]"
 
-#: builtin/bundle.c:65 builtin/pack-objects.c:3876
+#: builtin/bundle.c:65 builtin/pack-objects.c:3899
 msgid "do not show progress meter"
 msgstr "jangan perlihatkan meteran perkembangan"
 
-#: builtin/bundle.c:67 builtin/bundle.c:167 builtin/pack-objects.c:3878
+#: builtin/bundle.c:67 builtin/bundle.c:168 builtin/pack-objects.c:3901
 msgid "show progress meter"
 msgstr "perlihatkan meteran perkembangan"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3880
+#: builtin/bundle.c:69 builtin/pack-objects.c:3903
 msgid "show progress meter during object writing phase"
 msgstr "perlihatkan meteran perkembangan saat fase penulisan objek"
 
-#: builtin/bundle.c:72 builtin/pack-objects.c:3883
+#: builtin/bundle.c:72 builtin/pack-objects.c:3906
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "sama seperti --all-progress ketika meteran perkembangan diperlihatkan"
 
@@ -11751,113 +12130,229 @@ msgstr "sebutkan versi format bundel"
 msgid "Need a repository to create a bundle."
 msgstr "Perlu sebuah repositori untuk membuat bundel."
 
-#: builtin/bundle.c:107
+#: builtin/bundle.c:108
 msgid "do not show bundle details"
 msgstr "jangan perlihatkan detail bundel"
 
-#: builtin/bundle.c:126
+#: builtin/bundle.c:127
 #, c-format
 msgid "%s is okay\n"
 msgstr "%s oke \n"
 
-#: builtin/bundle.c:182
+#: builtin/bundle.c:183
 msgid "Need a repository to unbundle."
 msgstr "Perlu sebuah repositori untuk membongkar bundel."
 
-#: builtin/bundle.c:185
+#: builtin/bundle.c:186
 msgid "Unbundling objects"
 msgstr "Membongkar bundel objek"
 
-#: builtin/bundle.c:219 builtin/remote.c:1733
+#: builtin/bundle.c:220 builtin/remote.c:1758
 #, c-format
 msgid "Unknown subcommand: %s"
 msgstr "Subperintah tidak dikenal: %s"
 
-#: builtin/cat-file.c:622
+#: builtin/cat-file.c:568
+msgid "flush is only for --buffer mode"
+msgstr "bilas hanya untuk mode --buffer"
+
+#: builtin/cat-file.c:612
+msgid "empty command in input"
+msgstr "perintah kosong pada masukan"
+
+#: builtin/cat-file.c:614
+#, c-format
+msgid "whitespace before command: '%s'"
+msgstr "spasi sebelum perintah: '%s'"
+
+#: builtin/cat-file.c:623
+#, c-format
+msgid "%s requires arguments"
+msgstr "%s butuh sebuah argumen"
+
+#: builtin/cat-file.c:628
+#, c-format
+msgid "%s takes no arguments"
+msgstr "%s tidak mengambil argumen"
+
+#: builtin/cat-file.c:636
+#, c-format
+msgid "unknown command: '%s'"
+msgstr "perintah tidak dikenal: '%s'"
+
+#: builtin/cat-file.c:795
+msgid "only one batch option may be specified"
+msgstr "hanya satu opsi setumpuk yang mungkin disebutkan"
+
+#: builtin/cat-file.c:824
+msgid "git cat-file <type> <object>"
+msgstr "git cat-file <tipe> <objek>"
+
+#: builtin/cat-file.c:825
+msgid "git cat-file (-e | -p) <object>"
+msgstr "git cat-file (-e | -p) <objek>"
+
+#: builtin/cat-file.c:826
+msgid "git cat-file (-t | -s) [--allow-unknown-type] <object>"
+msgstr "git cat-file (-t | -s) [--allow-unknown-type] <objek>"
+
+#: builtin/cat-file.c:827
 msgid ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <type> | --textconv | --filters) [--path=<path>] <object>"
+"git cat-file (--batch | --batch-check | --batch-command) [--batch-all-"
+"objects]\n"
+"             [--buffer] [--follow-symlinks] [--unordered]\n"
+"             [--textconv | --filters]"
 msgstr ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <tipe> | --textconv | --filters) [--path=<jalur>] <objek>"
+"git cat-file (--batch | --batch-check | --batch-command) [--batch-all-"
+"objects]\n"
+"             [--buffer] [--follow-symlinks] [--unordered]\n"
+"             [--textconv | --filters]"
 
-#: builtin/cat-file.c:623
+#: builtin/cat-file.c:830
 msgid ""
-"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
-"symlinks] [--textconv | --filters]"
+"git cat-file (--textconv | --filters)\n"
+"             [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]"
 msgstr ""
-"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
-"symlinks] [--textconv | --filters]"
+"git cat-file (--textconv | --filters)\n"
+"             [<revisi>:<jalur|mirip-pohon> | --path=<jalur|mirip-pohon>] "
+"<revisi>"
 
-#: builtin/cat-file.c:644
-msgid "only one batch option may be specified"
-msgstr "hanya satu opsi setumpuk yang mungkin disebutkan"
+#: builtin/cat-file.c:836
+msgid "Check object existence or emit object contents"
+msgstr "Periksa keberadaan objek atau keluarkan isi objek"
 
-#: builtin/cat-file.c:662
-msgid "<type> can be one of: blob, tree, commit, tag"
-msgstr "<tipe> bisa salah satu dari: blob, tree, commit, tag"
+#: builtin/cat-file.c:838
+msgid "check if <object> exists"
+msgstr "periksa jika <objek> ada"
 
-#: builtin/cat-file.c:663
-msgid "show object type"
-msgstr "perlihatkan tipe objek"
+#: builtin/cat-file.c:839
+msgid "pretty-print <object> content"
+msgstr "cetak-cantik isi <objek>"
 
-#: builtin/cat-file.c:664
+#: builtin/cat-file.c:841
+msgid "Emit [broken] object attributes"
+msgstr "Keluarkan atribut objek [rusak]"
+
+#: builtin/cat-file.c:842
+msgid "show object type (one of 'blob', 'tree', 'commit', 'tag', ...)"
+msgstr "perlihatkan tipe objek (salah satu dari 'blob', 'commit', 'tag', ...)"
+
+#: builtin/cat-file.c:843
 msgid "show object size"
 msgstr "perlihatkan ukuran objek"
 
-#: builtin/cat-file.c:666
-msgid "exit with zero when there's no error"
-msgstr "keluar dengan nol ketika tidak ada kesalahan"
+#: builtin/cat-file.c:845
+msgid "allow -s and -t to work with broken/corrupt objects"
+msgstr "perbolehkan -s dan -t bekerja dengan objek rusak"
 
-#: builtin/cat-file.c:667
-msgid "pretty-print object's content"
-msgstr "cetak-cantik isi objek"
+#: builtin/cat-file.c:847
+msgid "Batch objects requested on stdin (or --batch-all-objects)"
+msgstr "Objek batch diminta pada masukan standar (atau --batch-all-objects)"
 
-#: builtin/cat-file.c:669
-msgid "for blob objects, run textconv on object's content"
-msgstr "untuk objek blob, jalankan textconv pada isi objek"
+#: builtin/cat-file.c:849
+msgid "show full <object> or <rev> contents"
+msgstr "perlihatkan isi <objek> atau <revisi> penuh"
 
-#: builtin/cat-file.c:671
-msgid "for blob objects, run filters on object's content"
-msgstr "untuk objek blob, jalankan penyaring pada isi objek"
+#: builtin/cat-file.c:853
+msgid "like --batch, but don't emit <contents>"
+msgstr "seperti --batch, tapi jangan keluarkan <isi>"
 
-#: builtin/cat-file.c:672
-msgid "blob"
-msgstr "blob"
+#: builtin/cat-file.c:857
+msgid "read commands from stdin"
+msgstr "baca perintah dari masukan standar"
 
-#: builtin/cat-file.c:673
-msgid "use a specific path for --textconv/--filters"
-msgstr "gunakan jalur spesifik untuk --textconv/--filters"
+#: builtin/cat-file.c:861
+msgid "with --batch[-check]: ignores stdin, batches all known objects"
+msgstr ""
+"dengan --batch[-check]: abaikan masukan standar, batch semua objek yang "
+"dikenal"
 
-#: builtin/cat-file.c:675
-msgid "allow -s and -t to work with broken/corrupt objects"
-msgstr "perbolehkan -s dan -t bekerja dengan objek rusak"
+#: builtin/cat-file.c:863
+msgid "Change or optimize batch output"
+msgstr "Ubah atau optimalkan keluaran batch"
 
-#: builtin/cat-file.c:676
+#: builtin/cat-file.c:864
 msgid "buffer --batch output"
 msgstr "sannga keluaran --batch"
 
-#: builtin/cat-file.c:678
-msgid "show info and content of objects fed from the standard input"
-msgstr "perlihatkan info dan isi objek yang disuap dari masukan standar"
+#: builtin/cat-file.c:866
+msgid "follow in-tree symlinks"
+msgstr "ikuti tautan simbolik dalam pohon"
 
-#: builtin/cat-file.c:682
-msgid "show info about objects fed from the standard input"
-msgstr "perlihatkan info tentang objek yang disuap dari masukan standar"
+#: builtin/cat-file.c:868
+msgid "do not order objects before emitting them"
+msgstr "jangan urutkan objek sebelum dikeluarkan"
 
-#: builtin/cat-file.c:686
-msgid "follow in-tree symlinks (used with --batch or --batch-check)"
+#: builtin/cat-file.c:870
+msgid ""
+"Emit object (blob or tree) with conversion or filter (stand-alone, or with "
+"batch)"
 msgstr ""
-"ikuti tautan simbolik dalam pohon (digunakan dengan --batch atau --batch-"
-"check)"
+"Keluarkan objek (blob atau pohon) dengan konversi atau saringan (berdiri "
+"sendiri atau dengan batch)"
+
+#: builtin/cat-file.c:872
+msgid "run textconv on object's content"
+msgstr "jalankan textconv pada isi objek"
+
+#: builtin/cat-file.c:874
+msgid "run filters on object's content"
+msgstr "jalankan penyaring pada isi objek"
+
+#: builtin/cat-file.c:875
+msgid "blob|tree"
+msgstr "blob|tree"
+
+#: builtin/cat-file.c:876
+msgid "use a <path> for (--textconv | --filters); Not with 'batch'"
+msgstr "gunakan <jalur> untuk (--textconv | --filters); tidak dengan 'batch'"
+
+#: builtin/cat-file.c:894
+#, c-format
+msgid "'%s=<%s>' needs '%s' or '%s'"
+msgstr "'%s=<%s>' butuh '%s' atau '%s'"
+
+#: builtin/cat-file.c:896
+msgid "path|tree-ish"
+msgstr "jalur|mirip-pohon"
+
+#: builtin/cat-file.c:903 builtin/cat-file.c:906 builtin/cat-file.c:909
+#, c-format
+msgid "'%s' requires a batch mode"
+msgstr "opsi '%s' butuh sebuah mode batch"
+
+#: builtin/cat-file.c:921
+#, c-format
+msgid "'-%c' is incompatible with batch mode"
+msgstr "'-%c' tidak kompatibel dengan mode batch"
+
+#: builtin/cat-file.c:924
+msgid "batch modes take no arguments"
+msgstr "mode batch tidak mengambil argumen"
 
-#: builtin/cat-file.c:688
-msgid "show all objects with --batch or --batch-check"
-msgstr "perlihatkan semua objek dengan --batch atau --batch-check"
+#: builtin/cat-file.c:932 builtin/cat-file.c:935
+#, c-format
+msgid "<rev> required with '%s'"
+msgstr "<revisi> diperlukan dengan '%s'"
+
+#: builtin/cat-file.c:938
+#, c-format
+msgid "<object> required with '-%c'"
+msgstr "<objek> diperlukan dengan '-%c'"
+
+#: builtin/cat-file.c:943 builtin/notes.c:374 builtin/notes.c:429
+#: builtin/notes.c:507 builtin/notes.c:519 builtin/notes.c:596
+#: builtin/notes.c:663 builtin/notes.c:813 builtin/notes.c:965
+#: builtin/notes.c:987 builtin/prune-packed.c:25 builtin/receive-pack.c:2489
+#: builtin/tag.c:592
+msgid "too many arguments"
+msgstr "terlalu banyak argumen"
 
-#: builtin/cat-file.c:690
-msgid "do not order --batch-all-objects output"
-msgstr "jangan urutkan keluaran --batch-all-objects"
+#: builtin/cat-file.c:947
+#, c-format
+msgid "only two arguments allowed in <type> <object> mode, not %d"
+msgstr ""
+"hanya dua argumen yang diperbolehkan di dalam mode <tipe> <objek>, bukan %d"
 
 #: builtin/check-attr.c:13
 msgid "git check-attr [-a | --all | <attr>...] [--] <pathname>..."
@@ -11875,7 +12370,7 @@ msgstr ""
 msgid "use .gitattributes only from the index"
 msgstr ""
 
-#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:100
+#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:101
 msgid "read file names from stdin"
 msgstr ""
 
@@ -11883,8 +12378,8 @@ msgstr ""
 msgid "terminate input and output records by a NUL character"
 msgstr ""
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1532 builtin/gc.c:550
-#: builtin/worktree.c:493
+#: builtin/check-ignore.c:21 builtin/checkout.c:1550 builtin/gc.c:550
+#: builtin/worktree.c:565
 msgid "suppress progress reporting"
 msgstr ""
 
@@ -11941,163 +12436,167 @@ msgstr ""
 msgid "git checkout--worker [<options>]"
 msgstr ""
 
-#: builtin/checkout--worker.c:118 builtin/checkout-index.c:201
-#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1864
-#: builtin/submodule--helper.c:1867 builtin/submodule--helper.c:1875
-#: builtin/submodule--helper.c:2511 builtin/submodule--helper.c:2577
-#: builtin/worktree.c:491 builtin/worktree.c:728
+#: builtin/checkout--worker.c:118 builtin/checkout-index.c:235
+#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1878
+#: builtin/submodule--helper.c:1881 builtin/submodule--helper.c:1889
+#: builtin/submodule--helper.c:2716 builtin/worktree.c:563
+#: builtin/worktree.c:808
 msgid "string"
 msgstr ""
 
-#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:236
 msgid "when creating files, prepend <string>"
 msgstr ""
 
-#: builtin/checkout-index.c:152
+#: builtin/checkout-index.c:184
 msgid "git checkout-index [<options>] [--] [<file>...]"
 msgstr ""
 
-#: builtin/checkout-index.c:169
+#: builtin/checkout-index.c:201
 msgid "stage should be between 1 and 3 or all"
 msgstr ""
 
-#: builtin/checkout-index.c:187
+#: builtin/checkout-index.c:219
 msgid "check out all files in the index"
 msgstr ""
 
-#: builtin/checkout-index.c:188
+#: builtin/checkout-index.c:221
+msgid "do not skip files with skip-worktree set"
+msgstr ""
+
+#: builtin/checkout-index.c:222
 msgid "force overwrite of existing files"
 msgstr ""
 
-#: builtin/checkout-index.c:190
+#: builtin/checkout-index.c:224
 msgid "no warning for existing files and files not in index"
 msgstr ""
 
-#: builtin/checkout-index.c:192
+#: builtin/checkout-index.c:226
 msgid "don't checkout new files"
 msgstr ""
 
-#: builtin/checkout-index.c:194
+#: builtin/checkout-index.c:228
 msgid "update stat information in the index file"
 msgstr ""
 
-#: builtin/checkout-index.c:198
+#: builtin/checkout-index.c:232
 msgid "read list of paths from the standard input"
 msgstr ""
 
-#: builtin/checkout-index.c:200
+#: builtin/checkout-index.c:234
 msgid "write the content to temporary files"
 msgstr ""
 
-#: builtin/checkout-index.c:204
+#: builtin/checkout-index.c:238
 msgid "copy out the files from named stage"
 msgstr ""
 
-#: builtin/checkout.c:33
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [<opsi>] <cabang>"
 
-#: builtin/checkout.c:34
+#: builtin/checkout.c:35
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [<opsi>] [<cabang>] -- <berkas>..."
 
-#: builtin/checkout.c:39
+#: builtin/checkout.c:40
 msgid "git switch [<options>] [<branch>]"
 msgstr "git switch [<opsi>] [<cabang>]"
 
-#: builtin/checkout.c:44
+#: builtin/checkout.c:45
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<opsi>] [--source=<cabang>] <berkas>..."
 
-#: builtin/checkout.c:198 builtin/checkout.c:237
+#: builtin/checkout.c:199 builtin/checkout.c:238
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "jalur '%s' tidak punya versi kami"
 
-#: builtin/checkout.c:200 builtin/checkout.c:239
+#: builtin/checkout.c:201 builtin/checkout.c:240
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "jalur '%s' tidak punya versi mereka"
 
-#: builtin/checkout.c:216
+#: builtin/checkout.c:217
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "jalur '%s' tidak punya semua versi yang diperlukan"
 
-#: builtin/checkout.c:269
+#: builtin/checkout.c:271
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "jalur '%s' tidak punya versi yang diperlukan"
 
-#: builtin/checkout.c:286
+#: builtin/checkout.c:291
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "jalur '%s': tidak dapat gabung"
 
-#: builtin/checkout.c:302
+#: builtin/checkout.c:307
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "Tidak dapat menambahkan hasil penggabungan untuk '%s'"
 
-#: builtin/checkout.c:419
+#: builtin/checkout.c:424
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "Konflik penggabungan %d dibuat ulang"
 msgstr[1] "Konflik penggabungan %d dibuat ulang"
 
-#: builtin/checkout.c:424
+#: builtin/checkout.c:429
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "%d jalur diperbarui dari %s"
 msgstr[1] "%d jalur diperbarui dari %s"
 
-#: builtin/checkout.c:431
+#: builtin/checkout.c:436
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "%d jalur diperbarui dari indeks"
 msgstr[1] "%d jalur diperbarui dari indeks"
 
-#: builtin/checkout.c:454 builtin/checkout.c:457 builtin/checkout.c:460
-#: builtin/checkout.c:464
+#: builtin/checkout.c:459 builtin/checkout.c:462 builtin/checkout.c:465
+#: builtin/checkout.c:469
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "'%s' tidak dapat digunakan untuk memperbarui jalur"
 
-#: builtin/checkout.c:474
+#: builtin/checkout.c:479
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr ""
 "Tidak dapat memperbarui jalur dan mengganti ke cabang '%s' dalam waktu yang "
 "bersamaan."
 
-#: builtin/checkout.c:478
+#: builtin/checkout.c:483
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "baik '%s' atau '%s' tidak disebutkan"
 
-#: builtin/checkout.c:482
+#: builtin/checkout.c:487
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "'%s' harus disebutkan ketika '%s' tidak disebutkan"
 
-#: builtin/checkout.c:487 builtin/checkout.c:492
+#: builtin/checkout.c:492 builtin/checkout.c:497
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "'%s' atau '%s' tidak dapat digunakan untuk %s"
 
-#: builtin/checkout.c:566 builtin/checkout.c:573
+#: builtin/checkout.c:571 builtin/checkout.c:578
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "jalur '%s' tak tergabung"
 
-#: builtin/checkout.c:747
+#: builtin/checkout.c:753
 msgid "you need to resolve your current index first"
 msgstr "Anda perlu selesaikan dulu indeks Anda saat ini"
 
-#: builtin/checkout.c:797
+#: builtin/checkout.c:809
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -12107,50 +12606,50 @@ msgstr ""
 "berikut:\n"
 "%s"
 
-#: builtin/checkout.c:890
+#: builtin/checkout.c:902
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "Tidak dapat melakukan reflog untuk '%s': %s\n"
 
-#: builtin/checkout.c:934
+#: builtin/checkout.c:947
 msgid "HEAD is now at"
 msgstr "HEAD sekarang berada di"
 
-#: builtin/checkout.c:938 builtin/clone.c:609 t/helper/test-fast-rebase.c:203
+#: builtin/checkout.c:951 builtin/clone.c:615 t/helper/test-fast-rebase.c:203
 msgid "unable to update HEAD"
 msgstr "tidak dapat memperbarui HEAD"
 
-#: builtin/checkout.c:942
+#: builtin/checkout.c:955
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "Ganti ulang cabang '%s'\n"
 
-#: builtin/checkout.c:945
+#: builtin/checkout.c:958
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Sudah berada pada '%s'\n"
 
-#: builtin/checkout.c:949
+#: builtin/checkout.c:962
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "Ganti ke dan ganti cabang '%s'\n"
 
-#: builtin/checkout.c:951 builtin/checkout.c:1388
+#: builtin/checkout.c:964 builtin/checkout.c:1398
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "Ganti ke cabang baru '%s'\n"
 
-#: builtin/checkout.c:953
+#: builtin/checkout.c:966
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "Ganti ke cabang '%s'\n"
 
-#: builtin/checkout.c:1004
+#: builtin/checkout.c:1017
 #, c-format
 msgid " ... and %d more.\n"
 msgstr "... dan %d lainnya.\n"
 
-#: builtin/checkout.c:1010
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -12173,7 +12672,7 @@ msgstr[1] ""
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1029
+#: builtin/checkout.c:1042
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -12196,19 +12695,19 @@ msgstr[1] ""
 "saat yang tepat untuk dilakukan dengan:\n"
 "git branch <nama-cabang-baru> %s\n"
 
-#: builtin/checkout.c:1064
+#: builtin/checkout.c:1077
 msgid "internal error in revision walk"
 msgstr "kesalahan internal dalam jalan revisi"
 
-#: builtin/checkout.c:1068
+#: builtin/checkout.c:1081
 msgid "Previous HEAD position was"
 msgstr "Posisi HEAD sebelumnya adalah"
 
-#: builtin/checkout.c:1114 builtin/checkout.c:1383
+#: builtin/checkout.c:1124 builtin/checkout.c:1393
 msgid "You are on a branch yet to be born"
 msgstr "Anda berada pada cabang yang belum lahir"
 
-#: builtin/checkout.c:1196
+#: builtin/checkout.c:1206
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -12217,7 +12716,7 @@ msgstr ""
 "'%s' bisa jadi berkas lokal dan cabang pelacak.\n"
 "Mohon gunakan -- (dan secara opsional --no-guess) untuk disambiguasi"
 
-#: builtin/checkout.c:1203
+#: builtin/checkout.c:1213
 msgid ""
 "If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
 "you can do so by fully qualifying the name with the --track option:\n"
@@ -12237,51 +12736,56 @@ msgstr ""
 "seperti remote 'origin', pertimbangkan untuk menyetel\n"
 "checkout.defaultRemote=origin di konfigurasi Anda"
 
-#: builtin/checkout.c:1213
+#: builtin/checkout.c:1223
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "'%s' cocok dengan banyak (%d) cabang pelacak remote"
 
-#: builtin/checkout.c:1279
+#: builtin/checkout.c:1289
 msgid "only one reference expected"
 msgstr "hanya satu referensi yang diharapkan"
 
-#: builtin/checkout.c:1296
+#: builtin/checkout.c:1306
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "hanya satu referensi yang diharapkan, %d diberikan"
 
-#: builtin/checkout.c:1342 builtin/worktree.c:269 builtin/worktree.c:436
+#: builtin/checkout.c:1352 builtin/worktree.c:338 builtin/worktree.c:508
 #, c-format
 msgid "invalid reference: %s"
 msgstr "referensi tidak valid: %s"
 
-#: builtin/checkout.c:1355 builtin/checkout.c:1725
+#: builtin/checkout.c:1365 builtin/checkout.c:1744
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "referensi bukan pohon: %s"
 
-#: builtin/checkout.c:1402
+#: builtin/checkout.c:1413
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "sebuah cabang diharapkan, dapat tag '%s'"
 
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1415
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "sebuah cabang diharapkan, dapat cabang remote '%s'"
 
-#: builtin/checkout.c:1405 builtin/checkout.c:1413
+#: builtin/checkout.c:1417 builtin/checkout.c:1426
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "sebuah cabang diharapkan, dapat '%s'"
 
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1420
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "sebuah cabang diharapkan, dapat komit '%s'"
 
-#: builtin/checkout.c:1424
+#: builtin/checkout.c:1429
+msgid ""
+"If you want to detach HEAD at the commit, try again with the --detach option."
+msgstr "Jika Anda ingin lepas HEAD pada komit, coba lagi dengan opsi --detach."
+
+#: builtin/checkout.c:1442
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
@@ -12290,7 +12794,7 @@ msgstr ""
 "Pertimbangkan untuk menggunakan \"git merge --quit\" atau \"git worktree add"
 "\"."
 
-#: builtin/checkout.c:1428
+#: builtin/checkout.c:1446
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
@@ -12298,7 +12802,7 @@ msgstr ""
 "tidak dapat mengganti cabang di tengah sesi am\n"
 "Pertimbangkan untuk menggunakan \"git am --quit\" atau \"git worktree add\"."
 
-#: builtin/checkout.c:1432
+#: builtin/checkout.c:1450
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -12307,7 +12811,7 @@ msgstr ""
 "Pertimbangkan untuk menggunakan \"git rebase --quit\" atau \"git worktree add"
 "\"."
 
-#: builtin/checkout.c:1436
+#: builtin/checkout.c:1454
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -12316,7 +12820,7 @@ msgstr ""
 "Pertimbangkan untuk menggunakan \"git cherry-pick --quit\" atau \"git "
 "worktree add\"."
 
-#: builtin/checkout.c:1440
+#: builtin/checkout.c:1458
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -12325,126 +12829,122 @@ msgstr ""
 "Pertimbangkan untuk menggunakan \"git revert --quit\" atau \"git worktree add"
 "\"."
 
-#: builtin/checkout.c:1444
+#: builtin/checkout.c:1462
 msgid "you are switching branch while bisecting"
 msgstr "Anda mengganti cabang saat pembagian dua"
 
-#: builtin/checkout.c:1451
+#: builtin/checkout.c:1469
 msgid "paths cannot be used with switching branches"
 msgstr "jalur tidak dapat digunakan dengan mengganti cabang"
 
-#: builtin/checkout.c:1454 builtin/checkout.c:1458 builtin/checkout.c:1462
+#: builtin/checkout.c:1472 builtin/checkout.c:1476 builtin/checkout.c:1480
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "'%s' tidak dapat digunakan dengan mengganti cabang"
 
-#: builtin/checkout.c:1466 builtin/checkout.c:1469 builtin/checkout.c:1472
-#: builtin/checkout.c:1477 builtin/checkout.c:1482
+#: builtin/checkout.c:1484 builtin/checkout.c:1487 builtin/checkout.c:1490
+#: builtin/checkout.c:1495 builtin/checkout.c:1500
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "'%s' tidak dapat digunakan dengan '%s'"
 
-#: builtin/checkout.c:1479
+#: builtin/checkout.c:1497
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "'%s' tidak bisa mengambil <titik-awal>"
 
-#: builtin/checkout.c:1487
+#: builtin/checkout.c:1505
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "Tidak dapat mengganti cabang ke bukan komit '%s'"
 
-#: builtin/checkout.c:1494
+#: builtin/checkout.c:1512
 msgid "missing branch or commit argument"
 msgstr "kehilangan argumen cabang atau komit"
 
-#: builtin/checkout.c:1537
+#: builtin/checkout.c:1555
 msgid "perform a 3-way merge with the new branch"
 msgstr "lakukan penggabungan 3 arah dengan cabang baru"
 
-#: builtin/checkout.c:1538 builtin/log.c:1825 parse-options.h:323
+#: builtin/checkout.c:1556 builtin/log.c:1844 parse-options.h:354
 msgid "style"
 msgstr "gaya"
 
-#: builtin/checkout.c:1539
+#: builtin/checkout.c:1557
 msgid "conflict style (merge, diff3, or zdiff3)"
 msgstr "gaya konflik (merge, diff3, atau zdiff3)"
 
-#: builtin/checkout.c:1551 builtin/worktree.c:488
+#: builtin/checkout.c:1569 builtin/worktree.c:560
 msgid "detach HEAD at named commit"
 msgstr "lepas HEAD pada komit bernama"
 
-#: builtin/checkout.c:1553
-msgid "set up tracking mode (see git-pull(1))"
-msgstr "pasang mode pelacakan (lihat git-pull(1))"
-
-#: builtin/checkout.c:1556
+#: builtin/checkout.c:1574
 msgid "force checkout (throw away local modifications)"
 msgstr "paksa checkout (buang modifikasi lokal)"
 
-#: builtin/checkout.c:1558
+#: builtin/checkout.c:1576
 msgid "new-branch"
 msgstr "cabang baru"
 
-#: builtin/checkout.c:1558
+#: builtin/checkout.c:1576
 msgid "new unparented branch"
 msgstr "cabang baru tanpa induk"
 
-#: builtin/checkout.c:1560 builtin/merge.c:305
+#: builtin/checkout.c:1578 builtin/merge.c:305
 msgid "update ignored files (default)"
 msgstr "perbarui berkas yang diabaikan (default)"
 
-#: builtin/checkout.c:1563
+#: builtin/checkout.c:1581
 msgid "do not check if another worktree is holding the given ref"
 msgstr ""
 "jangan periksa jika pohon kerja yang lain mempunyai referensi yang diberikan"
 
-#: builtin/checkout.c:1576
+#: builtin/checkout.c:1594
 msgid "checkout our version for unmerged files"
 msgstr "checkout versi kami untuk berkas yang tak tergabung"
 
-#: builtin/checkout.c:1579
+#: builtin/checkout.c:1597
 msgid "checkout their version for unmerged files"
 msgstr "checkout versi mereka untuk berkas yang tak tergabung"
 
-#: builtin/checkout.c:1583
+#: builtin/checkout.c:1601
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "jangan batasi jalur spek hanya ke entri tipis"
 
-#: builtin/checkout.c:1640
+#: builtin/checkout.c:1659
 #, c-format
 msgid "options '-%c', '-%c', and '%s' cannot be used together"
 msgstr "opsi '-%c', '-%c', dan '%s' tidak dapat digunakan bersamaan"
 
-#: builtin/checkout.c:1681
+#: builtin/checkout.c:1700
 msgid "--track needs a branch name"
 msgstr "--track butuh nama cabang"
 
-#: builtin/checkout.c:1686
+#: builtin/checkout.c:1705
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "kehilangan nama cabang; coba -%c"
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1737
 #, c-format
 msgid "could not resolve %s"
 msgstr "tidak dapat menyelesaikan %s"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1753
 msgid "invalid path specification"
 msgstr "spesifikasi jalur tidak valid"
 
-#: builtin/checkout.c:1741
+#: builtin/checkout.c:1760
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr "'%s' bukanlah commit dan cabang '%s' tidak dapat dibuat dari itu"
 
-#: builtin/checkout.c:1745
+#: builtin/checkout.c:1764
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout: --detach tidak mengambil argumen jalur '%s'"
 
-#: builtin/checkout.c:1770
+#: builtin/checkout.c:1789
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -12452,71 +12952,71 @@ msgstr ""
 "git checkout: --ours/--theirs, --force dan --merge tidak kompatibel saat\n"
 "men-checkout index"
 
-#: builtin/checkout.c:1775
+#: builtin/checkout.c:1794
 msgid "you must specify path(s) to restore"
 msgstr "Anda harus sebutkan jalur untuk dipulihkan"
 
-#: builtin/checkout.c:1800 builtin/checkout.c:1802 builtin/checkout.c:1854
-#: builtin/checkout.c:1856 builtin/clone.c:126 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2959
-#: builtin/submodule--helper.c:3253 builtin/worktree.c:484
-#: builtin/worktree.c:486
+#: builtin/checkout.c:1819 builtin/checkout.c:1821 builtin/checkout.c:1873
+#: builtin/checkout.c:1875 builtin/clone.c:130 builtin/remote.c:171
+#: builtin/remote.c:173 builtin/submodule--helper.c:3038
+#: builtin/submodule--helper.c:3371 builtin/worktree.c:556
+#: builtin/worktree.c:558
 msgid "branch"
 msgstr "cabang"
 
-#: builtin/checkout.c:1801
+#: builtin/checkout.c:1820
 msgid "create and checkout a new branch"
 msgstr "buat dan checkout cabang baru"
 
-#: builtin/checkout.c:1803
+#: builtin/checkout.c:1822
 msgid "create/reset and checkout a branch"
 msgstr "buat/setel ulang dan checkout cabang"
 
-#: builtin/checkout.c:1804
+#: builtin/checkout.c:1823
 msgid "create reflog for new branch"
 msgstr "buat reflog untuk cabang baru"
 
-#: builtin/checkout.c:1806
+#: builtin/checkout.c:1825
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr "tebakan kedua 'git checkout <tidak-ada-cabang-seperti-itu>' (default)"
 
-#: builtin/checkout.c:1807
+#: builtin/checkout.c:1826
 msgid "use overlay mode (default)"
 msgstr "gunakan mode hamparan (default)"
 
-#: builtin/checkout.c:1855
+#: builtin/checkout.c:1874
 msgid "create and switch to a new branch"
 msgstr "buat dan ganti ke cabang baru"
 
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1876
 msgid "create/reset and switch to a branch"
 msgstr "buat/setel ulang dan ganti ke cabang"
 
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1878
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "tebakan kedua 'git switch <tidak-ada-cabang-seperti-itu>'"
 
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1880
 msgid "throw away local modifications"
 msgstr "buang modifikasi lokal"
 
-#: builtin/checkout.c:1897
+#: builtin/checkout.c:1916
 msgid "which tree-ish to checkout from"
 msgstr "mana mirip-cabang untuk di-checkout"
 
-#: builtin/checkout.c:1899
+#: builtin/checkout.c:1918
 msgid "restore the index"
 msgstr "pulihkan indeks"
 
-#: builtin/checkout.c:1901
+#: builtin/checkout.c:1920
 msgid "restore the working tree (default)"
 msgstr "pulihkan pohon kerja (default)"
 
-#: builtin/checkout.c:1903
+#: builtin/checkout.c:1922
 msgid "ignore unmerged entries"
 msgstr "abaikan entri yang tak tergabung"
 
-#: builtin/checkout.c:1904
+#: builtin/checkout.c:1923
 msgid "use overlay mode"
 msgstr "gunakan mode hamparan"
 
@@ -12664,8 +13164,8 @@ msgid "remove whole directories"
 msgstr "hapus keseluruhan direktori"
 
 #: builtin/clean.c:932 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:937 builtin/log.c:184 builtin/log.c:186
-#: builtin/ls-files.c:651 builtin/name-rev.c:535 builtin/name-rev.c:537
+#: builtin/grep.c:938 builtin/log.c:185 builtin/log.c:187
+#: builtin/ls-files.c:651 builtin/name-rev.c:585 builtin/name-rev.c:587
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "pola"
@@ -12702,209 +13202,213 @@ msgstr ""
 msgid "-x and -X cannot be used together"
 msgstr "-x dan -X tidak dapat digunakan bersamaan"
 
-#: builtin/clone.c:45
+#: builtin/clone.c:47
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<opsi>] [--] <repo> [<direktori>]"
 
-#: builtin/clone.c:96
+#: builtin/clone.c:100
 msgid "don't clone shallow repository"
 msgstr "jangan kloning repositori dangkal"
 
-#: builtin/clone.c:98
+#: builtin/clone.c:102
 msgid "don't create a checkout"
 msgstr "jangan buat checkout"
 
-#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:542
+#: builtin/clone.c:103 builtin/clone.c:105 builtin/init-db.c:542
 msgid "create a bare repository"
 msgstr "buat repositori bare"
 
-#: builtin/clone.c:103
+#: builtin/clone.c:107
 msgid "create a mirror repository (implies bare)"
 msgstr "buat repositori cermin (implikasikan bare)"
 
-#: builtin/clone.c:105
+#: builtin/clone.c:109
 msgid "to clone from a local repository"
 msgstr "kloning dari repositori lokal"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "don't use local hardlinks, always copy"
 msgstr "jangan gunakan tautan keras lokal, selalu salin"
 
-#: builtin/clone.c:109
+#: builtin/clone.c:113
 msgid "setup as shared repository"
 msgstr "siapkan sebagai repositori berbagi"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "pathspec"
 msgstr "spek jalur"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "initialize submodules in the clone"
 msgstr "inisialisasi submodul dalam klon"
 
-#: builtin/clone.c:115
+#: builtin/clone.c:119
 msgid "number of submodules cloned in parallel"
 msgstr "jumlah submodul yang diklon secara paralel"
 
-#: builtin/clone.c:116 builtin/init-db.c:539
+#: builtin/clone.c:120 builtin/init-db.c:539
 msgid "template-directory"
 msgstr "direktori templat"
 
-#: builtin/clone.c:117 builtin/init-db.c:540
+#: builtin/clone.c:121 builtin/init-db.c:540
 msgid "directory from which templates will be used"
 msgstr "direktori dimana templat akan digunakan"
 
-#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1871
-#: builtin/submodule--helper.c:2514 builtin/submodule--helper.c:3260
+#: builtin/clone.c:123 builtin/clone.c:125 builtin/submodule--helper.c:1885
+#: builtin/submodule--helper.c:2719 builtin/submodule--helper.c:3378
 msgid "reference repository"
 msgstr "repositori rujukan"
 
-#: builtin/clone.c:123 builtin/submodule--helper.c:1873
-#: builtin/submodule--helper.c:2516
+#: builtin/clone.c:127 builtin/submodule--helper.c:1887
+#: builtin/submodule--helper.c:2721
 msgid "use --reference only while cloning"
 msgstr "gunakan --reference hanya pada saat kloning"
 
-#: builtin/clone.c:124 builtin/column.c:27 builtin/fmt-merge-msg.c:27
+#: builtin/clone.c:128 builtin/column.c:27 builtin/fmt-merge-msg.c:27
 #: builtin/init-db.c:550 builtin/merge-file.c:48 builtin/merge.c:290
-#: builtin/pack-objects.c:3944 builtin/repack.c:665
-#: builtin/submodule--helper.c:3262 t/helper/test-simple-ipc.c:595
+#: builtin/pack-objects.c:3967 builtin/repack.c:669
+#: builtin/submodule--helper.c:3380 t/helper/test-simple-ipc.c:595
 #: t/helper/test-simple-ipc.c:597
 msgid "name"
 msgstr "nama"
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "gunakan <nama> daripada 'origin' untuk lacak hulu"
 
-#: builtin/clone.c:127
+#: builtin/clone.c:131
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "checkout <cabang> daripada HEAD remote"
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133
 msgid "path to git-upload-pack on the remote"
 msgstr "jalur ke git-upload-pack pada remote"
 
-#: builtin/clone.c:130 builtin/fetch.c:181 builtin/grep.c:876
+#: builtin/clone.c:134 builtin/fetch.c:182 builtin/grep.c:877
 #: builtin/pull.c:212
 msgid "depth"
 msgstr "kedalaman"
 
-#: builtin/clone.c:131
+#: builtin/clone.c:135
 msgid "create a shallow clone of that depth"
 msgstr "buat klon dangkal sedalam kedalaman tersebut"
 
-#: builtin/clone.c:132 builtin/fetch.c:183 builtin/pack-objects.c:3933
+#: builtin/clone.c:136 builtin/fetch.c:184 builtin/pack-objects.c:3956
 #: builtin/pull.c:215
 msgid "time"
 msgstr "waktu"
 
-#: builtin/clone.c:133
+#: builtin/clone.c:137
 msgid "create a shallow clone since a specific time"
 msgstr "buat klon dangkal sejak waktu yang disebutkan"
 
-#: builtin/clone.c:134 builtin/fetch.c:185 builtin/fetch.c:208
-#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1022
+#: builtin/clone.c:138 builtin/fetch.c:186 builtin/fetch.c:212
+#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1050
 msgid "revision"
 msgstr "revisi"
 
-#: builtin/clone.c:135 builtin/fetch.c:186 builtin/pull.c:219
+#: builtin/clone.c:139 builtin/fetch.c:187 builtin/pull.c:219
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "perdalam riwayat klon dangkal, tidak termasuk rev"
 
-#: builtin/clone.c:137 builtin/submodule--helper.c:1883
-#: builtin/submodule--helper.c:2530
+#: builtin/clone.c:141 builtin/submodule--helper.c:1897
+#: builtin/submodule--helper.c:2735
 msgid "clone only one branch, HEAD or --branch"
 msgstr "klon hanya satu cabang, HEAD atau --branch"
 
-#: builtin/clone.c:139
+#: builtin/clone.c:143
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr "jangan klon tag apapun, dan buat pengambilan nanti tidak mengikutinya"
 
-#: builtin/clone.c:141
+#: builtin/clone.c:145
 msgid "any cloned submodules will be shallow"
 msgstr "submodul yang diklon akan dangkal"
 
-#: builtin/clone.c:142 builtin/init-db.c:548
+#: builtin/clone.c:146 builtin/init-db.c:548
 msgid "gitdir"
 msgstr "direktori git"
 
-#: builtin/clone.c:143 builtin/init-db.c:549
+#: builtin/clone.c:147 builtin/init-db.c:549
 msgid "separate git dir from working tree"
 msgstr "pisahkan direktori git dari pohon kerja"
 
-#: builtin/clone.c:144
+#: builtin/clone.c:148
 msgid "key=value"
 msgstr "kunci=nilai"
 
-#: builtin/clone.c:145
+#: builtin/clone.c:149
 msgid "set config inside the new repository"
 msgstr "setel konfigurasi di dalam repositori baru"
 
-#: builtin/clone.c:147 builtin/fetch.c:203 builtin/ls-remote.c:77
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
 #: builtin/pull.c:234 builtin/push.c:575 builtin/send-pack.c:200
 msgid "server-specific"
 msgstr "spesifik ke server"
 
-#: builtin/clone.c:147 builtin/fetch.c:203 builtin/ls-remote.c:77
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
 #: builtin/pull.c:235 builtin/push.c:575 builtin/send-pack.c:201
 msgid "option to transmit"
 msgstr "opsi untuk transmisi"
 
-#: builtin/clone.c:148 builtin/fetch.c:204 builtin/pull.c:238
+#: builtin/clone.c:152 builtin/fetch.c:208 builtin/pull.c:238
 #: builtin/push.c:576
 msgid "use IPv4 addresses only"
 msgstr "gunakan hanya alamat IPv4"
 
-#: builtin/clone.c:150 builtin/fetch.c:206 builtin/pull.c:241
+#: builtin/clone.c:154 builtin/fetch.c:210 builtin/pull.c:241
 #: builtin/push.c:578
 msgid "use IPv6 addresses only"
 msgstr "gunakan hanya alamat IPv6"
 
-#: builtin/clone.c:154
+#: builtin/clone.c:158
+msgid "apply partial clone filters to submodules"
+msgstr "terapkan saringan kloning parsial ke submodul"
+
+#: builtin/clone.c:160
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "submodul yang diklon akan menggunakan cabang yang melacak remotenya"
 
-#: builtin/clone.c:156
+#: builtin/clone.c:162
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr ""
 "inisialisasi berkas checkout tipis agar memasukkan hanya berkas pada akar"
 
-#: builtin/clone.c:231
+#: builtin/clone.c:237
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info: Tidak dapat menambahkan alternatif untuk '%s': %s\n"
 
-#: builtin/clone.c:304
+#: builtin/clone.c:310
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s ada dan bukan direktori"
 
-#: builtin/clone.c:322
+#: builtin/clone.c:328
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "gagal memulai iterator pada '%s'"
 
-#: builtin/clone.c:353
+#: builtin/clone.c:359
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "gagal membuat tautan '%s'"
 
-#: builtin/clone.c:357
+#: builtin/clone.c:363
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "gagal menyalin berkas ke '%s'"
 
-#: builtin/clone.c:362
+#: builtin/clone.c:368
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "gagal iterasi pada '%s'"
 
-#: builtin/clone.c:389
+#: builtin/clone.c:395
 #, c-format
 msgid "done.\n"
 msgstr "selesai.\n"
 
-#: builtin/clone.c:403
+#: builtin/clone.c:409
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -12914,101 +13418,101 @@ msgstr ""
 "Anda dapat periksa apa yang dicheckout dengan 'git status'\n"
 "dan coba lagi dengan 'git restore --source=HEAD :/'\n"
 
-#: builtin/clone.c:480
+#: builtin/clone.c:486
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "Tidak dapat menemukan cabang remote %s untuk diklon."
 
-#: builtin/clone.c:597
+#: builtin/clone.c:603
 #, c-format
 msgid "unable to update %s"
 msgstr "tidak dapat memperbarui %s"
 
-#: builtin/clone.c:645
+#: builtin/clone.c:651
 msgid "failed to initialize sparse-checkout"
 msgstr "gagal menginisalisasi checkout tipis"
 
-#: builtin/clone.c:668
+#: builtin/clone.c:674
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 "HEAD remote merujuk pada ref yang tidak ada, tidak dapat men-checkout.\n"
 
-#: builtin/clone.c:701
+#: builtin/clone.c:709
 msgid "unable to checkout working tree"
 msgstr "tidak dapat men-checkout pohon kerja"
 
-#: builtin/clone.c:779
+#: builtin/clone.c:793
 msgid "unable to write parameters to config file"
 msgstr "tidak dapat menulis parameter ke berkas konfigurasi"
 
-#: builtin/clone.c:842
+#: builtin/clone.c:856
 msgid "cannot repack to clean up"
 msgstr "tidak dapat memaket ulang untuk pembersihan"
 
-#: builtin/clone.c:844
+#: builtin/clone.c:858
 msgid "cannot unlink temporary alternates file"
 msgstr "tidak dapat batal-taut berkas alternatif sementara"
 
-#: builtin/clone.c:886
+#: builtin/clone.c:901
 msgid "Too many arguments."
 msgstr "Terlalu banyak argumen."
 
-#: builtin/clone.c:890 contrib/scalar/scalar.c:414
+#: builtin/clone.c:905 contrib/scalar/scalar.c:413
 msgid "You must specify a repository to clone."
 msgstr "Anda harus sebutkan repositori untuk diklon."
 
-#: builtin/clone.c:903
+#: builtin/clone.c:918
 #, c-format
 msgid "options '%s' and '%s %s' cannot be used together"
 msgstr "opsi '%s' dan '%s %s' tidak dapat digunakan bersamaan"
 
-#: builtin/clone.c:920
+#: builtin/clone.c:935
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "repositori '%s' tidak ada"
 
-#: builtin/clone.c:924 builtin/fetch.c:2052
+#: builtin/clone.c:939 builtin/fetch.c:2176
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "kedalaman %s bukan bilangan positif"
 
-#: builtin/clone.c:934
+#: builtin/clone.c:949
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "jalur tujuan '%s' sudah ada dan bukan direktori kosong"
 
-#: builtin/clone.c:940
+#: builtin/clone.c:955
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr "jalur repositori '%s' sudah ada dan bukan direktori kosong"
 
-#: builtin/clone.c:954
+#: builtin/clone.c:969
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "pohon kerja '%s' sudah ada."
 
-#: builtin/clone.c:969 builtin/clone.c:990 builtin/difftool.c:256
-#: builtin/log.c:2012 builtin/worktree.c:281 builtin/worktree.c:313
+#: builtin/clone.c:984 builtin/clone.c:1005 builtin/difftool.c:256
+#: builtin/log.c:2037 builtin/worktree.c:350 builtin/worktree.c:382
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "tidak dapat membuat direktori pendahulu '%s'"
 
-#: builtin/clone.c:974
+#: builtin/clone.c:989
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "tidak dapat membuat direktori pohon kerja '%s'"
 
-#: builtin/clone.c:994
+#: builtin/clone.c:1009
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Kloning ke repositori bare '%s'...\n"
 
-#: builtin/clone.c:996
+#: builtin/clone.c:1011
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Kloning ke '%s'...\n"
 
-#: builtin/clone.c:1025
+#: builtin/clone.c:1040
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
@@ -13016,47 +13520,51 @@ msgstr ""
 "clone --recursive tidak kompatibel dengan baik --reference dan --reference-"
 "if-able"
 
-#: builtin/clone.c:1080 builtin/remote.c:200 builtin/remote.c:710
+#: builtin/clone.c:1116 builtin/remote.c:201 builtin/remote.c:721
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "'%s' bukan nama remote yang valid"
 
-#: builtin/clone.c:1121
+#: builtin/clone.c:1157
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "--depth diabaikan di klon lokal; gunakan file:// sebagai gantinya."
 
-#: builtin/clone.c:1123
+#: builtin/clone.c:1159
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-since diabaikan di klon lokal; gunakan file:// sebagai gantinya."
 
-#: builtin/clone.c:1125
+#: builtin/clone.c:1161
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-exclude diabaikan di klon lokal; gunakan file:// sebagai gantinya."
 
-#: builtin/clone.c:1127
+#: builtin/clone.c:1163
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr "--filter diabaikan di klon lokal; gunakan file:// sebagai gantinya."
 
-#: builtin/clone.c:1132
+#: builtin/clone.c:1168
 msgid "source repository is shallow, ignoring --local"
 msgstr "repositori sumber dangkal, abaikan --local"
 
-#: builtin/clone.c:1137
+#: builtin/clone.c:1173
 msgid "--local is ignored"
 msgstr "--local diabaikan"
 
-#: builtin/clone.c:1216 builtin/clone.c:1276
+#: builtin/clone.c:1185
+msgid "cannot clone from filtered bundle"
+msgstr "tidak dapat mengkloning dari bundel tersaring"
+
+#: builtin/clone.c:1265 builtin/clone.c:1324
 msgid "remote transport reported error"
 msgstr "transportasi remote melaporkan kesalahan"
 
-#: builtin/clone.c:1228 builtin/clone.c:1239
+#: builtin/clone.c:1277 builtin/clone.c:1289
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "Cabang remote %s tidak ditemukan di hulu %s"
 
-#: builtin/clone.c:1242
+#: builtin/clone.c:1292
 msgid "You appear to have cloned an empty repository."
 msgstr "Anda tampaknya mengklon repositori kosong."
 
@@ -13104,7 +13612,7 @@ msgid ""
 "paths] [--[no-]max-new-filters <n>] [--[no-]progress] <split options>"
 msgstr ""
 
-#: builtin/commit-graph.c:51 builtin/fetch.c:192 builtin/log.c:1794
+#: builtin/commit-graph.c:51 builtin/fetch.c:196 builtin/log.c:1813
 msgid "dir"
 msgstr ""
 
@@ -13202,7 +13710,7 @@ msgstr ""
 msgid "duplicate parent %s ignored"
 msgstr "induk duplikat %s diabaikan"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:577
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:590
 #, c-format
 msgid "not a valid object name %s"
 msgstr "bukan nama objek valid %s"
@@ -13225,13 +13733,13 @@ msgstr "induk"
 msgid "id of a parent commit object"
 msgstr "id objek komit induk"
 
-#: builtin/commit-tree.c:112 builtin/commit.c:1627 builtin/merge.c:284
-#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1677
-#: builtin/tag.c:454
+#: builtin/commit-tree.c:112 builtin/commit.c:1626 builtin/merge.c:284
+#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1666
+#: builtin/tag.c:455
 msgid "message"
 msgstr "pesan"
 
-#: builtin/commit-tree.c:113 builtin/commit.c:1627
+#: builtin/commit-tree.c:113 builtin/commit.c:1626
 msgid "commit message"
 msgstr "pesan komit"
 
@@ -13239,7 +13747,7 @@ msgstr "pesan komit"
 msgid "read commit log message from file"
 msgstr "baca pesan log komit dari berkas"
 
-#: builtin/commit-tree.c:119 builtin/commit.c:1644 builtin/merge.c:303
+#: builtin/commit-tree.c:119 builtin/commit.c:1643 builtin/merge.c:303
 #: builtin/pull.c:180 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "Tandatangani komit dengan GPG"
@@ -13252,15 +13760,15 @@ msgstr "harus berikan tepat satu pohon"
 msgid "git commit-tree: failed to read"
 msgstr "git commit-tree: gagal membaca"
 
-#: builtin/commit.c:42
+#: builtin/commit.c:43
 msgid "git commit [<options>] [--] <pathspec>..."
 msgstr "git commit [<opsi>] [--] <spek jalur>..."
 
-#: builtin/commit.c:47
+#: builtin/commit.c:48
 msgid "git status [<options>] [--] <pathspec>..."
 msgstr "git status [<opsi>] [--] <spek jalur>..."
 
-#: builtin/commit.c:52
+#: builtin/commit.c:53
 msgid ""
 "You asked to amend the most recent commit, but doing so would make\n"
 "it empty. You can repeat your command with --allow-empty, or you can\n"
@@ -13271,7 +13779,7 @@ msgstr ""
 "dengan --allow-empty, atau Anda dapat menghapus keseluruhan komit\n"
 "dengan \"git reset HEAD^\".\n"
 
-#: builtin/commit.c:57
+#: builtin/commit.c:58
 msgid ""
 "The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
 "If you wish to commit it anyway, use:\n"
@@ -13285,15 +13793,15 @@ msgstr ""
 "    git commit --allow-empty\n"
 "\n"
 
-#: builtin/commit.c:64
+#: builtin/commit.c:65
 msgid "Otherwise, please use 'git rebase --skip'\n"
 msgstr "Selain itu, gunakan 'git rebase --skip'\n"
 
-#: builtin/commit.c:67
+#: builtin/commit.c:68
 msgid "Otherwise, please use 'git cherry-pick --skip'\n"
 msgstr "Selain itu, gunakan 'git cherry-pick --skip'\n"
 
-#: builtin/commit.c:70
+#: builtin/commit.c:71
 msgid ""
 "and then use:\n"
 "\n"
@@ -13314,69 +13822,69 @@ msgstr ""
 "    git cherry-pick --skip\n"
 "\n"
 
-#: builtin/commit.c:325
+#: builtin/commit.c:326
 msgid "failed to unpack HEAD tree object"
 msgstr "gagal membuka objek pohon HEAD"
 
-#: builtin/commit.c:375
+#: builtin/commit.c:376
 msgid "No paths with --include/--only does not make sense."
 msgstr "Tanpa jalur dengan --include/--only tidak masuk akal."
 
-#: builtin/commit.c:387
+#: builtin/commit.c:388
 msgid "unable to create temporary index"
 msgstr "tidak dapat membuat indeks sementara"
 
-#: builtin/commit.c:396
+#: builtin/commit.c:397
 msgid "interactive add failed"
 msgstr "penambahan interaktif gagal"
 
-#: builtin/commit.c:411
+#: builtin/commit.c:412
 msgid "unable to update temporary index"
 msgstr "tidak dapat memperbarui indeks sementara"
 
-#: builtin/commit.c:413
+#: builtin/commit.c:414
 msgid "Failed to update main cache tree"
 msgstr "gagal memperbarui tembolok pohon utama"
 
-#: builtin/commit.c:438 builtin/commit.c:461 builtin/commit.c:509
+#: builtin/commit.c:439 builtin/commit.c:462 builtin/commit.c:510
 msgid "unable to write new_index file"
 msgstr "tidak dapat menulis berkas new_index"
 
-#: builtin/commit.c:490
+#: builtin/commit.c:491
 msgid "cannot do a partial commit during a merge."
 msgstr "tidak dapat melakukan komit sebagian selama penggabungan."
 
-#: builtin/commit.c:492
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr "tidak dapat melakukan komit sebagian selama pemetikan ceri."
 
-#: builtin/commit.c:494
+#: builtin/commit.c:495
 msgid "cannot do a partial commit during a rebase."
 msgstr "tidak dapat melakukan komit sebagian selama pendasaran ulang."
 
-#: builtin/commit.c:502
+#: builtin/commit.c:503
 msgid "cannot read the index"
 msgstr "tidak dapat membaca indeks"
 
-#: builtin/commit.c:521
+#: builtin/commit.c:522
 msgid "unable to write temporary index file"
 msgstr "tidak dapat menulis berkas indeks sementara"
 
-#: builtin/commit.c:619
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "komit '%s' kurang kepala pengarang"
 
-#: builtin/commit.c:621
+#: builtin/commit.c:622
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "komit '%s' ada baris pengarang cacat"
 
-#: builtin/commit.c:640
+#: builtin/commit.c:641
 msgid "malformed --author parameter"
 msgstr "parameter --author cacat"
 
-#: builtin/commit.c:693
+#: builtin/commit.c:694
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
@@ -13384,43 +13892,43 @@ msgstr ""
 "tidak dapat memilih karakter komentar yang tidak terpakai\n"
 "dalam pesan komit saat ini"
 
-#: builtin/commit.c:747 builtin/commit.c:781 builtin/commit.c:1166
+#: builtin/commit.c:750 builtin/commit.c:784 builtin/commit.c:1170
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "tidak dapat mencari komit %s"
 
-#: builtin/commit.c:759 builtin/shortlog.c:416
+#: builtin/commit.c:762 builtin/shortlog.c:417
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(baca pesan log dari standar masukan)\n"
 
-#: builtin/commit.c:761
+#: builtin/commit.c:764
 msgid "could not read log from standard input"
 msgstr "tidak dapat membaca log dari standar masukan"
 
-#: builtin/commit.c:765
+#: builtin/commit.c:768
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "tidak dapat membaca berkas log '%s'"
 
-#: builtin/commit.c:802
+#: builtin/commit.c:805
 #, c-format
 msgid "options '%s' and '%s:%s' cannot be used together"
 msgstr "opsi '%s' dan '%s:%s' tidak dapat digunakan bersamaan"
 
-#: builtin/commit.c:814 builtin/commit.c:830
+#: builtin/commit.c:817 builtin/commit.c:833
 msgid "could not read SQUASH_MSG"
 msgstr "tidak dapat membaca SQUASH_MSG"
 
-#: builtin/commit.c:821
+#: builtin/commit.c:824
 msgid "could not read MERGE_MSG"
 msgstr "tidak dapat membaca MERGE_MSG"
 
-#: builtin/commit.c:881
+#: builtin/commit.c:884
 msgid "could not write commit template"
 msgstr "tidak dapat menulis templat komit"
 
-#: builtin/commit.c:894
+#: builtin/commit.c:897
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13429,7 +13937,7 @@ msgstr ""
 "Mohon masukkan pesan komit untuk perubahan Anda. Baris yang diawali\n"
 "dengan '%c' akan diabaikan.\n"
 
-#: builtin/commit.c:896
+#: builtin/commit.c:899
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13438,7 +13946,7 @@ msgstr ""
 "Mohon masukkan pesan komit untuk perubahan Anda. Baris yang diawali\n"
 "dengan '%c' akan diabaikan, dan pesan kosong batalkan komit.\n"
 
-#: builtin/commit.c:900
+#: builtin/commit.c:903
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13447,7 +13955,7 @@ msgstr ""
 "Mohon masukkan pesan komit untuk perubahan Anda. Baris yang diawali\n"
 "dengan '%c' akan tetap; Anda dapat menghapus itu jika Anda mau.\n"
 
-#: builtin/commit.c:904
+#: builtin/commit.c:907
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13458,7 +13966,7 @@ msgstr ""
 "dengan '%c' akan tetap; Anda dapat menghapus itu jika Anda mau.\n"
 "Pesan kosong batalkan komit.\n"
 
-#: builtin/commit.c:916
+#: builtin/commit.c:919
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -13472,7 +13980,7 @@ msgstr ""
 "\tgit update-ref -d MERGE_HEAD\n"
 "dan coba lagi.\n"
 
-#: builtin/commit.c:921
+#: builtin/commit.c:924
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -13486,169 +13994,147 @@ msgstr ""
 "\tgit update-ref -d CHERRY_PICK_HEAD\n"
 "dan coba lagi.\n"
 
-#: builtin/commit.c:948
+#: builtin/commit.c:951
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%sPengarang:    %.*s <%.*s>"
 
-#: builtin/commit.c:956
+#: builtin/commit.c:959
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%sTanggal:       %s"
 
-#: builtin/commit.c:963
+#: builtin/commit.c:966
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%sPengkomit: %.*s <%.*s>"
 
-#: builtin/commit.c:981
+#: builtin/commit.c:984
 msgid "Cannot read index"
 msgstr "Tidak dapat membaca indeks"
 
-#: builtin/commit.c:1026
+#: builtin/commit.c:1029
 msgid "unable to pass trailers to --trailers"
 msgstr "tidak dapat melewatkan trailer ke --trailers"
 
-#: builtin/commit.c:1066
+#: builtin/commit.c:1069
 msgid "Error building trees"
 msgstr "Kesalahan membangun pohon"
 
-#: builtin/commit.c:1080 builtin/tag.c:316
+#: builtin/commit.c:1083 builtin/tag.c:317
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "Mohon berikan pesan baik dengan opsi -m atau -F.\n"
 
-#: builtin/commit.c:1124
+#: builtin/commit.c:1128
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr ""
 "--author '%s' bukan 'Nama <email>' dan tidak cocok dengan pengarang yang ada"
 
-#: builtin/commit.c:1138
+#: builtin/commit.c:1142
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "Mode terabaikan '%s' tidak valid"
 
-#: builtin/commit.c:1156 builtin/commit.c:1451
+#: builtin/commit.c:1160 builtin/commit.c:1450
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "Mode berkas tak terlacak '%s' tidak valid"
 
-#: builtin/commit.c:1227
+#: builtin/commit.c:1231
 msgid "You are in the middle of a merge -- cannot reword."
 msgstr "Anda berada di tengah penggabungan -- tidak dapat menulis ulang."
 
-#: builtin/commit.c:1229
+#: builtin/commit.c:1233
 msgid "You are in the middle of a cherry-pick -- cannot reword."
 msgstr "Anda berada di tengah pemetikan ceri -- tidak dapat menulis ulang."
 
-#: builtin/commit.c:1232
+#: builtin/commit.c:1236
 #, c-format
 msgid "reword option of '%s' and path '%s' cannot be used together"
 msgstr "opsi reword '%s' dan jalur '%s' tidak dapat digunakan bersamaan"
 
-#: builtin/commit.c:1234
+#: builtin/commit.c:1238
 #, c-format
 msgid "reword option of '%s' and '%s' cannot be used together"
 msgstr "opsi reword '%s' dan '%s' tidak dapat digunakan bersamaan"
 
-#: builtin/commit.c:1254
-msgid "Using both --reset-author and --author does not make sense"
-msgstr "Menggunakan baik --reset-author dan --author tidak masuk akal"
-
-#: builtin/commit.c:1261
+#: builtin/commit.c:1263
 msgid "You have nothing to amend."
 msgstr "Anda tidak punya apapun untuk diubah."
 
-#: builtin/commit.c:1264
+#: builtin/commit.c:1266
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "Anda berada di tengah penggabungan -- tidak dapat mengubah."
 
-#: builtin/commit.c:1266
+#: builtin/commit.c:1268
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr "Anda berada di tengah pemetikan ceri -- tidak dapat mengubah."
 
-#: builtin/commit.c:1268
+#: builtin/commit.c:1270
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr "Anda berada di tengah pendasaran ulang -- tidak dapat mengubah."
 
-#: builtin/commit.c:1271
-msgid "Options --squash and --fixup cannot be used together"
-msgstr "Opsi --squash dan --fixup tidak dapat digunakan bersamaan"
-
-#: builtin/commit.c:1281
-msgid "Only one of -c/-C/-F/--fixup can be used."
-msgstr "Hanya salah satu dari -c/-C/-F/--fixup yang dapat digunakan."
-
-#: builtin/commit.c:1283
-msgid "Option -m cannot be combined with -c/-C/-F."
-msgstr "Opsi -m tidak dapat digabung dengan -c/-C/-F."
-
-#: builtin/commit.c:1292
+#: builtin/commit.c:1290
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr "--reset-author hanya dapat digunakan dengan -C, -c atau --amend."
 
-#: builtin/commit.c:1310
-msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
-msgstr ""
-"Hanya salah satu dari --include/--only/--all/--interactive/--patch yang "
-"dapat digunakan."
-
-#: builtin/commit.c:1338
+#: builtin/commit.c:1337
 #, c-format
 msgid "unknown option: --fixup=%s:%s"
-msgstr ""
+msgstr "opsi tidak dikenal: --fixup=%s:%s"
 
-#: builtin/commit.c:1355
+#: builtin/commit.c:1354
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "jalur '%s ...' dengan -a tidak masuk akal"
 
-#: builtin/commit.c:1486 builtin/commit.c:1655
+#: builtin/commit.c:1485 builtin/commit.c:1654
 msgid "show status concisely"
 msgstr "perlihatkan status dengan ringkas"
 
-#: builtin/commit.c:1488 builtin/commit.c:1657
+#: builtin/commit.c:1487 builtin/commit.c:1656
 msgid "show branch information"
 msgstr "perlihatkan informasi cabang"
 
-#: builtin/commit.c:1490
+#: builtin/commit.c:1489
 msgid "show stash information"
 msgstr "perlihatkan informasi stase"
 
-#: builtin/commit.c:1492 builtin/commit.c:1659
+#: builtin/commit.c:1491 builtin/commit.c:1658
 msgid "compute full ahead/behind values"
 msgstr "hitung nilai didepan/dibelakang penuh"
 
-#: builtin/commit.c:1494
+#: builtin/commit.c:1493
 msgid "version"
 msgstr "versi"
 
-#: builtin/commit.c:1494 builtin/commit.c:1661 builtin/push.c:551
-#: builtin/worktree.c:690
+#: builtin/commit.c:1493 builtin/commit.c:1660 builtin/push.c:551
+#: builtin/worktree.c:765
 msgid "machine-readable output"
 msgstr "keluaran yang dapat dibaca mesin"
 
-#: builtin/commit.c:1497 builtin/commit.c:1663
+#: builtin/commit.c:1496 builtin/commit.c:1662
 msgid "show status in long format (default)"
 msgstr "perlihatkan status dalam format panjang (asali)"
 
-#: builtin/commit.c:1500 builtin/commit.c:1666
+#: builtin/commit.c:1499 builtin/commit.c:1665
 msgid "terminate entries with NUL"
 msgstr "akhiri entri dengan NUL"
 
-#: builtin/commit.c:1502 builtin/commit.c:1506 builtin/commit.c:1669
+#: builtin/commit.c:1501 builtin/commit.c:1505 builtin/commit.c:1668
 #: builtin/fast-export.c:1172 builtin/fast-export.c:1175
-#: builtin/fast-export.c:1178 builtin/rebase.c:1111 parse-options.h:337
+#: builtin/fast-export.c:1178 builtin/rebase.c:1139 parse-options.h:368
 msgid "mode"
 msgstr "mode"
 
-#: builtin/commit.c:1503 builtin/commit.c:1669
+#: builtin/commit.c:1502 builtin/commit.c:1668
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr ""
 "perlihatkan berkas tak terlacak, mode opsional: all, normal, no. (Asali: all)"
 
-#: builtin/commit.c:1507
+#: builtin/commit.c:1506
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
@@ -13656,11 +14142,11 @@ msgstr ""
 "perlihatkan berkas terabaikan, mode opsional: traditional, matching, no. "
 "(Asali: traditional)"
 
-#: builtin/commit.c:1509 parse-options.h:192
+#: builtin/commit.c:1508 parse-options.h:197
 msgid "when"
 msgstr "bila"
 
-#: builtin/commit.c:1510
+#: builtin/commit.c:1509
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
@@ -13668,192 +14154,192 @@ msgstr ""
 "abaikan perubahan submodul, bila opsional: all, dirty, untracked. (Asali: "
 "all)"
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1511
 msgid "list untracked files in columns"
 msgstr "sebut berkas tak terlacak dalam kolom"
 
-#: builtin/commit.c:1513
+#: builtin/commit.c:1512
 msgid "do not detect renames"
 msgstr "jangan deteksi penggantian nama"
 
-#: builtin/commit.c:1515
+#: builtin/commit.c:1514
 msgid "detect renames, optionally set similarity index"
 msgstr "deteksi penggantian nama, setel indeks kemiripan secara opsional"
 
-#: builtin/commit.c:1538
+#: builtin/commit.c:1537
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr "Kombinasi argumen berkas terabaikan dan tak terlacak tidak didukung"
 
-#: builtin/commit.c:1620
+#: builtin/commit.c:1619
 msgid "suppress summary after successful commit"
 msgstr "sembunyikan rangkuman setelah komit berhasil"
 
-#: builtin/commit.c:1621
+#: builtin/commit.c:1620
 msgid "show diff in commit message template"
 msgstr "perlihatkan diff dalam templat pesan komit"
 
-#: builtin/commit.c:1623
+#: builtin/commit.c:1622
 msgid "Commit message options"
 msgstr "Opsi pesan komit"
 
-#: builtin/commit.c:1624 builtin/merge.c:288 builtin/tag.c:456
+#: builtin/commit.c:1623 builtin/merge.c:288 builtin/tag.c:457
 msgid "read message from file"
 msgstr "Baca pesan dari berkas"
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1624
 msgid "author"
 msgstr "pengarang"
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1624
 msgid "override author for commit"
 msgstr "timpa pengarang komit"
 
-#: builtin/commit.c:1626 builtin/gc.c:551
+#: builtin/commit.c:1625 builtin/gc.c:551
 msgid "date"
 msgstr "tangal"
 
-#: builtin/commit.c:1626
+#: builtin/commit.c:1625
 msgid "override date for commit"
 msgstr "timpa tanggal komit"
 
-#: builtin/commit.c:1628 builtin/commit.c:1629 builtin/commit.c:1635
-#: parse-options.h:329 ref-filter.h:89
+#: builtin/commit.c:1627 builtin/commit.c:1628 builtin/commit.c:1634
+#: parse-options.h:360 ref-filter.h:89
 msgid "commit"
 msgstr "komit"
 
-#: builtin/commit.c:1628
+#: builtin/commit.c:1627
 msgid "reuse and edit message from specified commit"
 msgstr "gunakan kembali dan sunting pesan dari komit tersebut"
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1628
 msgid "reuse message from specified commit"
 msgstr "gunakan kembali pesan dari komit tersebut"
 
 #. TRANSLATORS: Leave "[(amend|reword):]" as-is,
 #. and only translate <commit>.
 #.
-#: builtin/commit.c:1634
+#: builtin/commit.c:1633
 msgid "[(amend|reword):]commit"
 msgstr "[(amend|reword):]komit"
 
-#: builtin/commit.c:1634
+#: builtin/commit.c:1633
 msgid ""
 "use autosquash formatted message to fixup or amend/reword specified commit"
 msgstr ""
 "gunakan pesan terformat autosquash untuk perbaiki atau ubah/tulis ulang "
 "komit yang disebutkan"
 
-#: builtin/commit.c:1635
+#: builtin/commit.c:1634
 msgid "use autosquash formatted message to squash specified commit"
 msgstr "gunakan pesan terformat autosquash untuk lumat komit tersebut"
 
-#: builtin/commit.c:1636
+#: builtin/commit.c:1635
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "komit sekarang dikarang olehku (gunakan dengan -C/-c/--amend)"
 
-#: builtin/commit.c:1637 builtin/interpret-trailers.c:111
+#: builtin/commit.c:1636 builtin/interpret-trailers.c:111
 msgid "trailer"
-msgstr ""
+msgstr "trailer"
 
-#: builtin/commit.c:1637
+#: builtin/commit.c:1636
 msgid "add custom trailer(s)"
-msgstr ""
+msgstr "tambahkan trailer kustom"
 
-#: builtin/commit.c:1638 builtin/log.c:1769 builtin/merge.c:306
+#: builtin/commit.c:1637 builtin/log.c:1788 builtin/merge.c:306
 #: builtin/pull.c:146 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr "tambahkan trailer Signed-off-by"
 
-#: builtin/commit.c:1639
+#: builtin/commit.c:1638
 msgid "use specified template file"
 msgstr "gunakan templat berkas tersebut"
 
-#: builtin/commit.c:1640
+#: builtin/commit.c:1639
 msgid "force edit of commit"
 msgstr "paksa sunting komit"
 
-#: builtin/commit.c:1642
+#: builtin/commit.c:1641
 msgid "include status in commit message template"
 msgstr "masukkan status dalam templat pesaan komit"
 
-#: builtin/commit.c:1647
+#: builtin/commit.c:1646
 msgid "Commit contents options"
 msgstr "Opsi isi komit"
 
-#: builtin/commit.c:1648
+#: builtin/commit.c:1647
 msgid "commit all changed files"
 msgstr "komit semua berkas terubah"
 
-#: builtin/commit.c:1649
+#: builtin/commit.c:1648
 msgid "add specified files to index for commit"
 msgstr "tambahakn berkas tersebut ke indeks untuk dikomit"
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1649
 msgid "interactively add files"
 msgstr "tambah berkas secara interaktif"
 
-#: builtin/commit.c:1651
+#: builtin/commit.c:1650
 msgid "interactively add changes"
 msgstr "tambah perubahan secara interaktif"
 
-#: builtin/commit.c:1652
+#: builtin/commit.c:1651
 msgid "commit only specified files"
 msgstr "hanya komit berkas tersebut"
 
-#: builtin/commit.c:1653
+#: builtin/commit.c:1652
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr "lewati kail pre-commit dan commit-msg"
 
-#: builtin/commit.c:1654
+#: builtin/commit.c:1653
 msgid "show what would be committed"
 msgstr "perlihatkan apa yang akan dikomit"
 
-#: builtin/commit.c:1667
+#: builtin/commit.c:1666
 msgid "amend previous commit"
 msgstr "ubah komit sebelumnya"
 
-#: builtin/commit.c:1668
+#: builtin/commit.c:1667
 msgid "bypass post-rewrite hook"
 msgstr "lewati kail post-rewrite"
 
-#: builtin/commit.c:1675
+#: builtin/commit.c:1674
 msgid "ok to record an empty change"
 msgstr "ok merekam perubahan kosong"
 
-#: builtin/commit.c:1677
+#: builtin/commit.c:1676
 msgid "ok to record a change with an empty message"
 msgstr "ok merekam perubahan dengan pesan kosong"
 
-#: builtin/commit.c:1753
+#: builtin/commit.c:1752
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Berkas MERGE_HEAD (%s) rusak"
 
-#: builtin/commit.c:1760
+#: builtin/commit.c:1759
 msgid "could not read MERGE_MODE"
 msgstr "tidak dapat membaca MERGE_MODE"
 
-#: builtin/commit.c:1781
+#: builtin/commit.c:1780
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "tidak dapat membaca pesan komit: %s"
 
-#: builtin/commit.c:1788
+#: builtin/commit.c:1787
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "Batalkan komit karena pesan komit kosong.\n"
 
-#: builtin/commit.c:1793
+#: builtin/commit.c:1792
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "Batalkan komit; Anda tidak menyunting pesan.\n"
 
-#: builtin/commit.c:1804
+#: builtin/commit.c:1803
 #, c-format
 msgid "Aborting commit due to empty commit message body.\n"
 msgstr "Batalkan komit karena badan pesan komit kosong.\n"
 
-#: builtin/commit.c:1840
+#: builtin/commit.c:1839
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -13976,6 +14462,10 @@ msgstr "temukan setelan warna: slot [stdout-is-tty]"
 msgid "Type"
 msgstr "Tipe"
 
+#: builtin/config.c:154 builtin/env--helper.c:42 builtin/hash-object.c:97
+msgid "type"
+msgstr "tipe"
+
 #: builtin/config.c:154 builtin/env--helper.c:43
 msgid "value is given this type"
 msgstr "Nilai diberikan tipe ini"
@@ -14189,10 +14679,6 @@ msgstr ""
 msgid "no such section: %s"
 msgstr "tidak ada bagian seperti: %s"
 
-#: builtin/count-objects.c:90
-msgid "git count-objects [-v] [-H | --human-readable]"
-msgstr "git count-objects [-v] [-H | --human-readable]"
-
 #: builtin/count-objects.c:100
 msgid "print sizes in human readable format"
 msgstr "cetak ukuran dalam format yang bisa dibaca manusia"
@@ -14357,7 +14843,7 @@ msgstr "hanya pertimbangkan tag yang cocok dengan <pola>"
 msgid "do not consider tags matching <pattern>"
 msgstr "jangan pertimbangkan tag yang cocok dengan <pola>"
 
-#: builtin/describe.c:570 builtin/name-rev.c:544
+#: builtin/describe.c:570 builtin/name-rev.c:595
 msgid "show abbreviated commit object as fallback"
 msgstr "perlihatkan objek komit singkat sebagai langkah terakhir"
 
@@ -14405,7 +14891,7 @@ msgstr "%s...%s: tidak ada dasar penggabungan"
 msgid "Not a git repository"
 msgstr "bukan repositori git"
 
-#: builtin/diff.c:537 builtin/grep.c:698
+#: builtin/diff.c:537 builtin/grep.c:700
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "objek yang diberikan '%s' tidak valid"
@@ -14523,11 +15009,11 @@ msgstr "dilewatkan ke `diff`"
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool butuh pohon kerja atau --no-index"
 
-#: builtin/difftool.c:744
+#: builtin/difftool.c:745
 msgid "no <tool> given for --tool=<tool>"
 msgstr "tidak ada <alat> yang diberikan untuk --tool=<alat>"
 
-#: builtin/difftool.c:751
+#: builtin/difftool.c:752
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "tidak ada <perintah> yang diberikan untuk --extcmd=<perintah>"
 
@@ -14535,10 +15021,6 @@ msgstr "tidak ada <perintah> yang diberikan untuk --extcmd=<perintah>"
 msgid "git env--helper --type=[bool|ulong] <options> <env-var>"
 msgstr ""
 
-#: builtin/env--helper.c:42 builtin/hash-object.c:96
-msgid "type"
-msgstr ""
-
 #: builtin/env--helper.c:46
 msgid "default for git_env_*(...) to fall back on"
 msgstr ""
@@ -14560,8 +15042,8 @@ msgid ""
 msgstr ""
 
 #: builtin/fast-export.c:29
-msgid "git fast-export [rev-list-opts]"
-msgstr "git fast-export [opsi rev-list]"
+msgid "git fast-export [<rev-list-opts>]"
+msgstr "git fast-export [<opsi rev-list>]"
 
 #: builtin/fast-export.c:843
 msgid "Error: Cannot export nested tags unless --mark-tags is specified."
@@ -14617,7 +15099,7 @@ msgstr "gunakan fitur selesai untuk mengakhiri arus"
 msgid "skip output of blob data"
 msgstr "lewati keluaran data blob"
 
-#: builtin/fast-export.c:1196 builtin/log.c:1841
+#: builtin/fast-export.c:1196 builtin/log.c:1860
 msgid "refspec"
 msgstr "spek referensi"
 
@@ -14649,37 +15131,37 @@ msgstr "perlihatkan id objek asli dari blob/komit"
 msgid "label tags with mark ids"
 msgstr "label tag dengan id tanda"
 
-#: builtin/fast-import.c:3090
+#: builtin/fast-import.c:3097
 #, c-format
 msgid "Missing from marks for submodule '%s'"
 msgstr "Kehilangan tanda dari untuk submodul '%s'"
 
-#: builtin/fast-import.c:3092
+#: builtin/fast-import.c:3099
 #, c-format
 msgid "Missing to marks for submodule '%s'"
 msgstr "Kehilangan tanda ke untuk submodul '%s'"
 
-#: builtin/fast-import.c:3227
+#: builtin/fast-import.c:3234
 #, c-format
 msgid "Expected 'mark' command, got %s"
 msgstr "Perintah 'mark' diharapkan, dapat %s"
 
-#: builtin/fast-import.c:3232
+#: builtin/fast-import.c:3239
 #, c-format
 msgid "Expected 'to' command, got %s"
 msgstr "Perintah 'to' diharapkan, dapat %s"
 
-#: builtin/fast-import.c:3324
+#: builtin/fast-import.c:3331
 msgid "Expected format name:filename for submodule rewrite option"
 msgstr ""
 "Format nama:nama berkas diharapkan untuk operasi penulisan ulang submodul"
 
-#: builtin/fast-import.c:3379
+#: builtin/fast-import.c:3386
 #, c-format
 msgid "feature '%s' forbidden in input without --allow-unsafe-features"
 msgstr "fitur '%s' dilarang dalam input tanpa --allow-unsafe-features"
 
-#: builtin/fetch-pack.c:242
+#: builtin/fetch-pack.c:246
 #, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr "Berkas kunci dibuat tetapi tidak dilaporkan: %s"
@@ -14700,102 +15182,106 @@ msgstr "git fetch --multiple [<opsi>] [(<repositori> | <grup>)]"
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<opsi>]"
 
-#: builtin/fetch.c:123
+#: builtin/fetch.c:124
 msgid "fetch.parallel cannot be negative"
 msgstr "fetch.parallel tidak dapat bernilai negatif"
 
-#: builtin/fetch.c:146 builtin/pull.c:189
+#: builtin/fetch.c:147 builtin/pull.c:189
 msgid "fetch from all remotes"
 msgstr "ambil dari semua remote"
 
-#: builtin/fetch.c:148 builtin/pull.c:249
+#: builtin/fetch.c:149 builtin/pull.c:249
 msgid "set upstream for git pull/fetch"
 msgstr "setel hulu untuk git pull/fetch"
 
-#: builtin/fetch.c:150 builtin/pull.c:192
+#: builtin/fetch.c:151 builtin/pull.c:192
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "tambah ke .git/FETCH_HEAD daripada timpa"
 
-#: builtin/fetch.c:152
+#: builtin/fetch.c:153
 msgid "use atomic transaction to update references"
 msgstr ""
 
-#: builtin/fetch.c:154 builtin/pull.c:195
+#: builtin/fetch.c:155 builtin/pull.c:195
 msgid "path to upload pack on remote end"
 msgstr "jalur ke paket unggah pada sisi remote"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:156
 msgid "force overwrite of local reference"
 msgstr "paksa timpa referensi lokal"
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:158
 msgid "fetch from multiple remotes"
 msgstr "ambil dari banyak remote"
 
-#: builtin/fetch.c:159 builtin/pull.c:199
+#: builtin/fetch.c:160 builtin/pull.c:199
 msgid "fetch all tags and associated objects"
 msgstr "ambil semua tag dan objek yang bersesuaian"
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:162
 msgid "do not fetch all tags (--no-tags)"
 msgstr "jangan ambil semua tag (--no-tags)"
 
-#: builtin/fetch.c:163
+#: builtin/fetch.c:164
 msgid "number of submodules fetched in parallel"
 msgstr "jumlah submodul yang diambil secara bersamaan"
 
-#: builtin/fetch.c:165
+#: builtin/fetch.c:166
 msgid "modify the refspec to place all refs within refs/prefetch/"
 msgstr ""
 "modifikasi spek referensi untuk tempatkan semua referensi di dalam refs/"
 "prefetch/"
 
-#: builtin/fetch.c:167 builtin/pull.c:202
+#: builtin/fetch.c:168 builtin/pull.c:202
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "buang cabang pelacak remote yang tidak ada pada remote"
 
-#: builtin/fetch.c:169
+#: builtin/fetch.c:170
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr "buang tag lokal yang tidak ada pada remote dan klob tag yang berubah"
 
-#: builtin/fetch.c:170 builtin/fetch.c:195 builtin/pull.c:123
+#: builtin/fetch.c:171 builtin/fetch.c:199 builtin/pull.c:123
 msgid "on-demand"
 msgstr "sesuai permintaan"
 
-#: builtin/fetch.c:171
+#: builtin/fetch.c:172
 msgid "control recursive fetching of submodules"
 msgstr "kontrol pengambilan submodul rekursif"
 
-#: builtin/fetch.c:176
+#: builtin/fetch.c:177
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr "tulis referensi yang diambil ke berkas FETCH_HEAD"
 
-#: builtin/fetch.c:177 builtin/pull.c:210
+#: builtin/fetch.c:178 builtin/pull.c:210
 msgid "keep downloaded pack"
 msgstr "simpan paket yang diunduh"
 
-#: builtin/fetch.c:179
+#: builtin/fetch.c:180
 msgid "allow updating of HEAD ref"
 msgstr "bolehkan perbarui referensi HEAD"
 
-#: builtin/fetch.c:182 builtin/fetch.c:188 builtin/pull.c:213
+#: builtin/fetch.c:183 builtin/fetch.c:189 builtin/pull.c:213
 #: builtin/pull.c:222
 msgid "deepen history of shallow clone"
 msgstr "perdalam riwayat klon dangkal"
 
-#: builtin/fetch.c:184 builtin/pull.c:216
+#: builtin/fetch.c:185 builtin/pull.c:216
 msgid "deepen history of shallow repository based on time"
 msgstr "perdalam riwayat repositori dangkal berdasarkan waktu"
 
-#: builtin/fetch.c:190 builtin/pull.c:225
+#: builtin/fetch.c:191 builtin/pull.c:225
 msgid "convert to a complete repository"
 msgstr "ubah ke repositori penuh"
 
-#: builtin/fetch.c:193
+#: builtin/fetch.c:194
+msgid "re-fetch without negotiating common commits"
+msgstr ""
+
+#: builtin/fetch.c:197
 msgid "prepend this to submodule path output"
 msgstr "tambahkan ini ke jalur keluaran submodul"
 
-#: builtin/fetch.c:196
+#: builtin/fetch.c:200
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
@@ -14803,108 +15289,103 @@ msgstr ""
 "default untuk ambil submodul secara rekursif (prioritas lebih rendah "
 "dariberkas konfigurasi)"
 
-#: builtin/fetch.c:200 builtin/pull.c:228
+#: builtin/fetch.c:204 builtin/pull.c:228
 msgid "accept refs that update .git/shallow"
 msgstr "terima referensi yang memperbarui .git/shallow"
 
-#: builtin/fetch.c:201 builtin/pull.c:230
+#: builtin/fetch.c:205 builtin/pull.c:230
 msgid "refmap"
 msgstr "peta referensi"
 
-#: builtin/fetch.c:202 builtin/pull.c:231
+#: builtin/fetch.c:206 builtin/pull.c:231
 msgid "specify fetch refmap"
 msgstr "sebutkan ambil peta referensi"
 
-#: builtin/fetch.c:209 builtin/pull.c:244
+#: builtin/fetch.c:213 builtin/pull.c:244
 msgid "report that we have only objects reachable from this object"
 msgstr ""
 "laporkan bahwa kami hanya punya object yang bisa dicapai dari objek ini"
 
-#: builtin/fetch.c:211
+#: builtin/fetch.c:215
 msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
 msgstr ""
 "jangan ambil berkas pak; sebagai gantinya cetak leluhur dari ujung negosiasi"
 
-#: builtin/fetch.c:214 builtin/fetch.c:216
+#: builtin/fetch.c:218 builtin/fetch.c:220
 msgid "run 'maintenance --auto' after fetching"
 msgstr "lakukan 'maintenance --auto' setelah pengambilan"
 
-#: builtin/fetch.c:218 builtin/pull.c:247
+#: builtin/fetch.c:222 builtin/pull.c:247
 msgid "check for forced-updates on all updated branches"
 msgstr "periksa pembaruan terpaksa pada semua cabang"
 
-#: builtin/fetch.c:220
+#: builtin/fetch.c:224
 msgid "write the commit-graph after fetching"
 msgstr "tulis grafik komit setelah pengambilan"
 
-#: builtin/fetch.c:222
+#: builtin/fetch.c:226
 msgid "accept refspecs from stdin"
 msgstr "terima spek referensi dari masukan standar"
 
-#: builtin/fetch.c:592
+#: builtin/fetch.c:618
 msgid "couldn't find remote ref HEAD"
 msgstr "tidak dapat menemukan referensi remote HEAD"
 
-#: builtin/fetch.c:766
-#, c-format
-msgid "configuration fetch.output contains invalid value %s"
-msgstr "konfigurasi fetch.output berisi nilai tidak valid %s"
-
-#: builtin/fetch.c:867
+#: builtin/fetch.c:893
 #, c-format
 msgid "object %s not found"
 msgstr "objek %s tidak ditemukan"
 
-#: builtin/fetch.c:871
+#: builtin/fetch.c:897
 msgid "[up to date]"
 msgstr "[terkini]"
 
-#: builtin/fetch.c:883 builtin/fetch.c:901 builtin/fetch.c:973
+#: builtin/fetch.c:909 builtin/fetch.c:927 builtin/fetch.c:999
 msgid "[rejected]"
 msgstr "[tertolak]"
 
-#: builtin/fetch.c:885
+#: builtin/fetch.c:911
 msgid "can't fetch in current branch"
 msgstr "tidak dapat mengambil di cabang saat ini"
 
-#: builtin/fetch.c:886
+#: builtin/fetch.c:912
 msgid "checked out in another worktree"
 msgstr "ter-check out di dalam pohon kerja lainnya"
 
-#: builtin/fetch.c:896
+#: builtin/fetch.c:922
 msgid "[tag update]"
 msgstr "[pembaruan tag]"
 
-#: builtin/fetch.c:897 builtin/fetch.c:934 builtin/fetch.c:956
-#: builtin/fetch.c:968
+#: builtin/fetch.c:923 builtin/fetch.c:960 builtin/fetch.c:982
+#: builtin/fetch.c:994
 msgid "unable to update local ref"
 msgstr "tidak dapat memperbarui referensi lokal"
 
-#: builtin/fetch.c:901
+#: builtin/fetch.c:927
 msgid "would clobber existing tag"
 msgstr "akan klob tag yang ada"
 
-#: builtin/fetch.c:923
+#: builtin/fetch.c:949
 msgid "[new tag]"
 msgstr "[tag baru]"
 
-#: builtin/fetch.c:926
+#: builtin/fetch.c:952
 msgid "[new branch]"
 msgstr "[cabang baru]"
 
-#: builtin/fetch.c:929
+#: builtin/fetch.c:955
 msgid "[new ref]"
 msgstr "[referensi baru]"
 
-#: builtin/fetch.c:968
+#: builtin/fetch.c:994
 msgid "forced update"
 msgstr "pembaruan terpaksa"
 
-#: builtin/fetch.c:973
+#: builtin/fetch.c:999
 msgid "non-fast-forward"
 msgstr "bukan-maju-cepat"
 
-#: builtin/fetch.c:1076
+#: builtin/fetch.c:1102
 msgid ""
 "fetch normally indicates which branches had a forced update,\n"
 "but that check has been disabled; to re-enable, use '--show-forced-updates'\n"
@@ -14916,7 +15397,7 @@ msgstr ""
 "bendera '--show-forced-updates' atau jalankan 'git config fetch."
 "showForcedUpdates true'."
 
-#: builtin/fetch.c:1080
+#: builtin/fetch.c:1106
 #, c-format
 msgid ""
 "it took %.2f seconds to check forced updates; you can use\n"
@@ -14929,22 +15410,22 @@ msgstr ""
 "'git config fetch.showForcedUpdates false'\n"
 "untuk menghindari pemeriksaan ini.\n"
 
-#: builtin/fetch.c:1112
+#: builtin/fetch.c:1136
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s tidak mengirim semua objek yang diperlukan\n"
 
-#: builtin/fetch.c:1141
+#: builtin/fetch.c:1156
 #, c-format
 msgid "rejected %s because shallow roots are not allowed to be updated"
 msgstr "tolak %s karena akar dangkal tidak diperkenankan untuk diperbarui"
 
-#: builtin/fetch.c:1231 builtin/fetch.c:1379
+#: builtin/fetch.c:1259 builtin/fetch.c:1418
 #, c-format
 msgid "From %.*s\n"
 msgstr "Dari %.*s\n"
 
-#: builtin/fetch.c:1252
+#: builtin/fetch.c:1269
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -14953,49 +15434,49 @@ msgstr ""
 "beberapa referensi lokal tidak dapat diperbarui; coba jalankan\n"
 " 'git remote prune %s' untuk hapus cabang yang lama dan berkonflik"
 
-#: builtin/fetch.c:1349
+#: builtin/fetch.c:1377
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s akan menjadi terjuntai)"
 
-#: builtin/fetch.c:1350
+#: builtin/fetch.c:1378
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s telah menjadi terjuntai)"
 
-#: builtin/fetch.c:1382
+#: builtin/fetch.c:1421
 msgid "[deleted]"
 msgstr "[dihapus]"
 
-#: builtin/fetch.c:1383 builtin/remote.c:1128
+#: builtin/fetch.c:1422 builtin/remote.c:1153
 msgid "(none)"
 msgstr "(tidak ada)"
 
-#: builtin/fetch.c:1405
+#: builtin/fetch.c:1446
 #, c-format
 msgid "refusing to fetch into branch '%s' checked out at '%s'"
 msgstr "menolak mengambil ke dalam cabang '%s' yang ter-checkout pada '%s'"
 
-#: builtin/fetch.c:1425
+#: builtin/fetch.c:1466
 #, c-format
 msgid "option \"%s\" value \"%s\" is not valid for %s"
 msgstr "opsi \"%s\" nilai \"%s\" tidak valid untuk %s"
 
-#: builtin/fetch.c:1428
+#: builtin/fetch.c:1469
 #, c-format
 msgid "option \"%s\" is ignored for %s\n"
 msgstr "opsi \"%s\" diabaikan untuk %s\n"
 
-#: builtin/fetch.c:1455
+#: builtin/fetch.c:1496
 #, c-format
 msgid "the object %s does not exist"
 msgstr "objek '%s' tidak ada"
 
-#: builtin/fetch.c:1643
+#: builtin/fetch.c:1748
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr "banyak cabang terdeteksi, tidak kompatibel dengan --set-upstream"
 
-#: builtin/fetch.c:1655
+#: builtin/fetch.c:1760
 #, c-format
 msgid ""
 "could not set upstream of HEAD to '%s' from '%s' when it does not point to "
@@ -15004,19 +15485,19 @@ msgstr ""
 "tidak dapat menyetel hulu HEAD ke %s dari '%s' ketika itu tak menunjuk pada "
 "cabang apapun."
 
-#: builtin/fetch.c:1668
+#: builtin/fetch.c:1773
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr "tidak setel hulu untuk cabang remote pelacak remote"
 
-#: builtin/fetch.c:1670
+#: builtin/fetch.c:1775
 msgid "not setting upstream for a remote tag"
 msgstr "tidak setel hulu untuk tag remote"
 
-#: builtin/fetch.c:1672
+#: builtin/fetch.c:1777
 msgid "unknown branch type"
 msgstr "tipe cabang tidak diketahui"
 
-#: builtin/fetch.c:1674
+#: builtin/fetch.c:1779
 msgid ""
 "no source branch found;\n"
 "you need to specify exactly one branch with the --set-upstream option"
@@ -15024,22 +15505,22 @@ msgstr ""
 "cabang sumber tidak ditemukan;\n"
 "Anda harus sebutkan tepat satu cabang dengan opsi --set-upstream."
 
-#: builtin/fetch.c:1804 builtin/fetch.c:1867
+#: builtin/fetch.c:1904 builtin/fetch.c:1967
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Mengambil %s\n"
 
-#: builtin/fetch.c:1814 builtin/fetch.c:1869
+#: builtin/fetch.c:1914 builtin/fetch.c:1969
 #, c-format
 msgid "could not fetch %s"
 msgstr "tidak dapat mengambil %s"
 
-#: builtin/fetch.c:1826
+#: builtin/fetch.c:1926
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr "tidak dapat mengambil '%s' (kode keluar: %d)\n"
 
-#: builtin/fetch.c:1930
+#: builtin/fetch.c:2030
 msgid ""
 "no remote repository specified; please specify either a URL or a\n"
 "remote name from which new revisions should be fetched"
@@ -15047,48 +15528,48 @@ msgstr ""
 "repositori remote tidak disebutkan; mohon sebutkan baik URL atau nama\n"
 "remote yang mana revisi baru sebaiknya diambil"
 
-#: builtin/fetch.c:1966
+#: builtin/fetch.c:2066
 msgid "you need to specify a tag name"
 msgstr "Anda perlu sebutkan sebuah nama tag"
 
-#: builtin/fetch.c:2032
-msgid "--negotiate-only needs one or more --negotiate-tip=*"
-msgstr "--negotiate-only perlu satu atau lebih --negotiate-tip=*"
+#: builtin/fetch.c:2156
+msgid "--negotiate-only needs one or more --negotiation-tip=*"
+msgstr "--negotiate-only perlu satu atau lebih --negotiation-tip=*"
 
-#: builtin/fetch.c:2036
+#: builtin/fetch.c:2160
 msgid "negative depth in --deepen is not supported"
 msgstr "kedalaman negatif pada --deepen tidak didukung"
 
-#: builtin/fetch.c:2045
+#: builtin/fetch.c:2169
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "--unshallow pada repositori penuh tidak masuk akal"
 
-#: builtin/fetch.c:2062
+#: builtin/fetch.c:2186
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all tidak mengambil argumen repositori"
 
-#: builtin/fetch.c:2064
+#: builtin/fetch.c:2188
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all tidak masuk akal dengan spek referensi"
 
-#: builtin/fetch.c:2073
+#: builtin/fetch.c:2197
 #, c-format
 msgid "no such remote or remote group: %s"
 msgstr "tidak ada remote atau grup remote seperti: %s"
 
-#: builtin/fetch.c:2081
+#: builtin/fetch.c:2205
 msgid "fetching a group and specifying refspecs does not make sense"
 msgstr "mengambil sebuah grup dan menyebutkan spek referensi tidak masuk akal"
 
-#: builtin/fetch.c:2097
+#: builtin/fetch.c:2221
 msgid "must supply remote when using --negotiate-only"
 msgstr "harus suplai remote ketika menggunakan --negotiate-only"
 
-#: builtin/fetch.c:2102
+#: builtin/fetch.c:2226
 msgid "protocol does not support --negotiate-only, exiting"
 msgstr "protokol tidak mendukung --negotiate-only, keluar."
 
-#: builtin/fetch.c:2121
+#: builtin/fetch.c:2246
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -15096,11 +15577,11 @@ msgstr ""
 "--filter hanya dapat digunakan dengan remote yang terkonfigurasi di "
 "extensions.partialclone"
 
-#: builtin/fetch.c:2125
+#: builtin/fetch.c:2250
 msgid "--atomic can only be used when fetching from one remote"
 msgstr "--atomic hanya dapat digunakan saat mengambil dari satu remote"
 
-#: builtin/fetch.c:2129
+#: builtin/fetch.c:2254
 msgid "--stdin can only be used when fetching from one remote"
 msgstr "--stdin hanya dapat digunakan saat mengambil dari satu remote"
 
@@ -15169,7 +15650,7 @@ msgstr ""
 msgid "show only <n> matched refs"
 msgstr ""
 
-#: builtin/for-each-ref.c:42 builtin/tag.c:481
+#: builtin/for-each-ref.c:42 builtin/tag.c:482
 msgid "respect format colors"
 msgstr ""
 
@@ -15363,7 +15844,7 @@ msgstr "Memeriksa direktori objek"
 msgid "Checking %s link"
 msgstr "Memeriksa tautan %s"
 
-#: builtin/fsck.c:710 builtin/index-pack.c:859
+#: builtin/fsck.c:710 builtin/index-pack.c:862
 #, c-format
 msgid "invalid %s"
 msgstr "%s tidak valid"
@@ -15432,7 +15913,7 @@ msgstr "juga pertimbangkan pak dan objek alternatif"
 msgid "check only connectivity"
 msgstr "hanya periksa konektivitas"
 
-#: builtin/fsck.c:798 builtin/mktag.c:76
+#: builtin/fsck.c:798 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr "aktifkan pemeriksaan lebih ketat"
 
@@ -15462,6 +15943,118 @@ msgstr "%s: objek hilang"
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "parameter tidak valid: sha1 diharapkan, dapat '%s'"
 
+#: builtin/fsmonitor--daemon.c:13
+msgid "git fsmonitor--daemon start [<options>]"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:14
+msgid "git fsmonitor--daemon run [<options>]"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:15
+msgid "git fsmonitor--daemon stop"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:16
+msgid "git fsmonitor--daemon status"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:38 builtin/fsmonitor--daemon.c:47
+#, c-format
+msgid "value of '%s' out of range: %d"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:57
+#, c-format
+msgid "value of '%s' not bool or int: %d"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:99
+#, c-format
+msgid "fsmonitor-daemon is watching '%s'\n"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:104
+#, c-format
+msgid "fsmonitor-daemon is not watching '%s'\n"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:170
+#, c-format
+msgid "could not create fsmonitor cookie '%s'"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:753
+#, c-format
+msgid "fsmonitor: cookie_result '%d' != SEEN"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1187
+#, c-format
+msgid "could not start IPC thread pool on '%s'"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1199
+msgid "could not start fsmonitor listener thread"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1297
+msgid "could not initialize listener thread"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1328 builtin/fsmonitor--daemon.c:1383
+#, c-format
+msgid "fsmonitor--daemon is already running '%s'"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1332
+#, c-format
+msgid "running fsmonitor-daemon in '%s'\n"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1387
+#, c-format
+msgid "starting fsmonitor-daemon in '%s'\n"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1413
+msgid "daemon failed to start"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1416
+msgid "daemon not online yet"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1419
+msgid "daemon terminated"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1429
+msgid "detach from console"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1432
+msgid "use <n> ipc worker threads"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1435
+msgid "max seconds to wait for background daemon startup"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1449
+#, c-format
+msgid "invalid 'ipc-threads' value (%d)"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1464
+#, c-format
+msgid "Unhandled subcommand '%s'"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1477
+msgid "fsmonitor--daemon not supported on this platform"
+msgstr ""
+
 #: builtin/gc.c:39
 msgid "git gc [<options>]"
 msgstr "git gc [<opsi>]"
@@ -15710,8 +16303,8 @@ msgstr "gagal memulai systemctl"
 msgid "failed to run systemctl"
 msgstr "gagal menjalankan systemctl"
 
-#: builtin/gc.c:2210 builtin/gc.c:2215 builtin/worktree.c:62
-#: builtin/worktree.c:944
+#: builtin/gc.c:2210 builtin/gc.c:2215 builtin/worktree.c:63
+#: builtin/worktree.c:1024
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "gagal menghapus '%s'"
@@ -15759,16 +16352,16 @@ msgstr "git maintenance <subperintah> [<opsi>]"
 msgid "invalid subcommand: %s"
 msgstr "subperintah tidak valid: %s"
 
-#: builtin/grep.c:30
+#: builtin/grep.c:32
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<opsi>] [-e] <pola> [<revisi>...] [[--] <pola>...]"
 
-#: builtin/grep.c:239
+#: builtin/grep.c:241
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep: gagal membuat utas: %s"
 
-#: builtin/grep.c:293
+#: builtin/grep.c:295
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "jumlah utas yang diberikan (%d) tidak valid untuk %s"
@@ -15777,259 +16370,251 @@ msgstr "jumlah utas yang diberikan (%d) tidak valid untuk %s"
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:301 builtin/index-pack.c:1582 builtin/index-pack.c:1785
-#: builtin/pack-objects.c:3142
+#: builtin/grep.c:303 builtin/index-pack.c:1587 builtin/index-pack.c:1791
+#: builtin/pack-objects.c:3150
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "tidak ada dukungan utas, abaikan %s"
 
-#: builtin/grep.c:488 builtin/grep.c:617 builtin/grep.c:657
+#: builtin/grep.c:490 builtin/grep.c:619 builtin/grep.c:659
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "tidak dapat membaca pohon (%s)"
 
-#: builtin/grep.c:672
+#: builtin/grep.c:674
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "tidak dapan men-grep dari objek dengan tipe %s"
 
-#: builtin/grep.c:752
+#: builtin/grep.c:754
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "saklar '%c' mengharapkan nilai numerik"
 
-#: builtin/grep.c:851
+#: builtin/grep.c:852
 msgid "search in index instead of in the work tree"
 msgstr "cari dalam index daripada dalam pohon kerja"
 
-#: builtin/grep.c:853
+#: builtin/grep.c:854
 msgid "find in contents not managed by git"
 msgstr "temukan dalam konten yang tak dikelola oleh git"
 
-#: builtin/grep.c:855
+#: builtin/grep.c:856
 msgid "search in both tracked and untracked files"
 msgstr "cari dalam berkas terlacak dan tak terlacak"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:858
 msgid "ignore files specified via '.gitignore'"
 msgstr "abaikan berkas yang disebutkan via '.gitignore'"
 
-#: builtin/grep.c:859
+#: builtin/grep.c:860
 msgid "recursively search in each submodule"
 msgstr "cari secara rekursif dalam setiap submodul"
 
-#: builtin/grep.c:862
+#: builtin/grep.c:863
 msgid "show non-matching lines"
 msgstr "perlihatkan baris nir-cocok"
 
-#: builtin/grep.c:864
+#: builtin/grep.c:865
 msgid "case insensitive matching"
 msgstr "pencocokan tak peka kapital"
 
-#: builtin/grep.c:866
+#: builtin/grep.c:867
 msgid "match patterns only at word boundaries"
 msgstr "cocokkan pola hanya pada batas kata"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:869
 msgid "process binary files as text"
 msgstr "proses berkas biner sebagai teks"
 
-#: builtin/grep.c:870
+#: builtin/grep.c:871
 msgid "don't match patterns in binary files"
 msgstr "jangan cocokkan pola pada berkas biner"
 
-#: builtin/grep.c:873
+#: builtin/grep.c:874
 msgid "process binary files with textconv filters"
 msgstr "proses berkas biner dengan saringan textconv"
 
-#: builtin/grep.c:875
+#: builtin/grep.c:876
 msgid "search in subdirectories (default)"
 msgstr "cari dalam subdirektori (asali)"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:878
 msgid "descend at most <depth> levels"
 msgstr "turun paling banyak <kedalaman> tingkat"
 
-#: builtin/grep.c:881
+#: builtin/grep.c:882
 msgid "use extended POSIX regular expressions"
 msgstr "gunakan ekspresi reguler POSIX diperpanjang"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:885
 msgid "use basic POSIX regular expressions (default)"
 msgstr "gunakan ekspresi reguler POSIX dasar (asali)"
 
-#: builtin/grep.c:887
+#: builtin/grep.c:888
 msgid "interpret patterns as fixed strings"
 msgstr "tafsirkan pola sebagai untai tetap"
 
-#: builtin/grep.c:890
+#: builtin/grep.c:891
 msgid "use Perl-compatible regular expressions"
 msgstr "gunakan ekspresi reguler kompatibel dengan Perl"
 
-#: builtin/grep.c:893
+#: builtin/grep.c:894
 msgid "show line numbers"
 msgstr "perlihatkan nomor baris"
 
-#: builtin/grep.c:894
+#: builtin/grep.c:895
 msgid "show column number of first match"
 msgstr "perlihatkan nomor kolom cocokan pertama"
 
-#: builtin/grep.c:895
+#: builtin/grep.c:896
 msgid "don't show filenames"
 msgstr "jangan perlihatkan nama berkas"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:897
 msgid "show filenames"
 msgstr "perlihatkan nama berkas"
 
-#: builtin/grep.c:898
+#: builtin/grep.c:899
 msgid "show filenames relative to top directory"
 msgstr "perlihatkan nama berkas relatif terhadap direktori puncak"
 
-#: builtin/grep.c:900
+#: builtin/grep.c:901
 msgid "show only filenames instead of matching lines"
 msgstr "hanya perlihatkan nama berkas daripada baris yang cocok"
 
-#: builtin/grep.c:902
+#: builtin/grep.c:903
 msgid "synonym for --files-with-matches"
 msgstr "sinonim untuk --files-with-matches"
 
-#: builtin/grep.c:905
+#: builtin/grep.c:906
 msgid "show only the names of files without match"
 msgstr "hanya perlihatkan nama berkas tanpa cocok"
 
-#: builtin/grep.c:907
+#: builtin/grep.c:908
 msgid "print NUL after filenames"
 msgstr "cetak NUL setelah nama berkas"
 
-#: builtin/grep.c:910
+#: builtin/grep.c:911
 msgid "show only matching parts of a line"
 msgstr "hanya perlihatkan bagian cocokan baris"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:913
 msgid "show the number of matches instead of matching lines"
 msgstr "perlihatkan jumlah cocokan daripada baris yang cocok"
 
-#: builtin/grep.c:913
+#: builtin/grep.c:914
 msgid "highlight matches"
 msgstr "sorot cocokan"
 
-#: builtin/grep.c:915
+#: builtin/grep.c:916
 msgid "print empty line between matches from different files"
 msgstr "cetak baris kosong di antara cocokan dari berkas yang berbeda"
 
-#: builtin/grep.c:917
+#: builtin/grep.c:918
 msgid "show filename only once above matches from same file"
 msgstr ""
 "perlihatkan nama berkas hanya sekali di atas cocokan dari berkas yang sama"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:921
 msgid "show <n> context lines before and after matches"
 msgstr "perlihatkan <n> baris konteks sebelum dan sesudah cocokan"
 
-#: builtin/grep.c:923
+#: builtin/grep.c:924
 msgid "show <n> context lines before matches"
 msgstr "perlihatkan <n> baris konteks sebelum cocokan"
 
-#: builtin/grep.c:925
+#: builtin/grep.c:926
 msgid "show <n> context lines after matches"
 msgstr "perlihatkan <n> baris konteks setelah cocokan"
 
-#: builtin/grep.c:927
+#: builtin/grep.c:928
 msgid "use <n> worker threads"
 msgstr "gunakan <n> utas pekerja"
 
-#: builtin/grep.c:928
+#: builtin/grep.c:929
 msgid "shortcut for -C NUM"
 msgstr "pintasan untuk -C NUM"
 
-#: builtin/grep.c:931
+#: builtin/grep.c:932
 msgid "show a line with the function name before matches"
 msgstr "perlihatkan sebuah baris dengan nama fungsi sebelum cocokan"
 
-#: builtin/grep.c:933
+#: builtin/grep.c:934
 msgid "show the surrounding function"
 msgstr "perlihatkan fungsi di sekitar"
 
-#: builtin/grep.c:936
+#: builtin/grep.c:937
 msgid "read patterns from file"
 msgstr "baca pola dari berkas"
 
-#: builtin/grep.c:938
+#: builtin/grep.c:939
 msgid "match <pattern>"
 msgstr "cocokkan <pola>"
 
-#: builtin/grep.c:940
+#: builtin/grep.c:941
 msgid "combine patterns specified with -e"
 msgstr "kombinasikan pola yang disebutkan dengan -e"
 
-#: builtin/grep.c:952
+#: builtin/grep.c:953
 msgid "indicate hit with exit status without output"
 msgstr "tunjukkan kena dengan status keluar tanpa keluaran"
 
-#: builtin/grep.c:954
+#: builtin/grep.c:955
 msgid "show only matches from files that match all patterns"
 msgstr "hanya perlihatkan cocokan dari berkas yang cocok dengan semua pola"
 
-#: builtin/grep.c:957
+#: builtin/grep.c:958
 msgid "pager"
 msgstr "penghalaman"
 
-#: builtin/grep.c:957
+#: builtin/grep.c:958
 msgid "show matching files in the pager"
 msgstr "perlihatkan berkas yang cocok dalam penghalaman"
 
-#: builtin/grep.c:961
+#: builtin/grep.c:962
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "perbolehkan pemanggilan grep(1) (diabaikan oleh bangunan ini)"
 
-#: builtin/grep.c:1027
+#: builtin/grep.c:1028
 msgid "no pattern given"
 msgstr "tidak ada pola yang diberikan"
 
-#: builtin/grep.c:1063
+#: builtin/grep.c:1064
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr "--no-index atau --untracked tidak dapat digunakan dengan revisi"
 
-#: builtin/grep.c:1071
+#: builtin/grep.c:1072
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "tidak dapat menguraikan revisi: %s"
 
-#: builtin/grep.c:1101
+#: builtin/grep.c:1102
 msgid "--untracked not supported with --recurse-submodules"
 msgstr "--untracked tidak didukung dengan --recurse-submodules"
 
-#: builtin/grep.c:1105
+#: builtin/grep.c:1106
 msgid "invalid option combination, ignoring --threads"
 msgstr "kombinasi opsi tidak valid, abaikan --threads"
 
-#: builtin/grep.c:1108 builtin/pack-objects.c:4059
+#: builtin/grep.c:1109 builtin/pack-objects.c:4084
 msgid "no threads support, ignoring --threads"
 msgstr "tidak ada dukungan utas, abaikan --threads"
 
-#: builtin/grep.c:1111 builtin/index-pack.c:1579 builtin/pack-objects.c:3139
+#: builtin/grep.c:1112 builtin/index-pack.c:1584 builtin/pack-objects.c:3147
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "jumlah utas tersebut (%d) tidak valid"
 
-#: builtin/grep.c:1145
+#: builtin/grep.c:1146
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager hanya bekerja pada pohon kerja"
 
-#: builtin/grep.c:1171
-msgid "--cached or --untracked cannot be used with --no-index"
-msgstr "--cached atau --untracked tidak dapat digunakan dengan --no-index"
-
-#: builtin/grep.c:1174
-msgid "--untracked cannot be used with --cached"
-msgstr "--untracked tidak dapat digunakan dengan --cached"
-
-#: builtin/grep.c:1180
+#: builtin/grep.c:1179
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr "--[no-]exclude-standard tidak dapat digunakan untuk konten terlacak"
 
-#: builtin/grep.c:1188
+#: builtin/grep.c:1187
 msgid "both --cached and trees are given"
 msgstr "baik --cached dan pohon diberikan"
 
@@ -16041,108 +16626,100 @@ msgstr ""
 "git hash-object [-t <tipe>] [-w] [--path=<berkas> | --no-filters] [--stdin] "
 "[--] <berkas>..."
 
-#: builtin/hash-object.c:84
-msgid "git hash-object  --stdin-paths"
-msgstr "git hash-object  --stdin-paths"
-
-#: builtin/hash-object.c:96
+#: builtin/hash-object.c:97
 msgid "object type"
 msgstr "tipe objek"
 
-#: builtin/hash-object.c:97
+#: builtin/hash-object.c:98
 msgid "write the object into the object database"
 msgstr "tulis objek ke dalam basis data objek"
 
-#: builtin/hash-object.c:99
+#: builtin/hash-object.c:100
 msgid "read the object from stdin"
 msgstr "baca objek dari masukan standar"
 
-#: builtin/hash-object.c:101
+#: builtin/hash-object.c:102
 msgid "store file as is without filters"
 msgstr "simpan berkas apa adanya tanpa penyaring"
 
-#: builtin/hash-object.c:102
+#: builtin/hash-object.c:103
 msgid ""
 "just hash any random garbage to create corrupt objects for debugging Git"
 msgstr ""
 "hanya hash sampah acak apapun untuk membuat objek rusak demi menirkutukan Git"
 
-#: builtin/hash-object.c:103
+#: builtin/hash-object.c:104
 msgid "process file as it were from this path"
 msgstr "proses berkas seperti dari jalur ini"
 
-#: builtin/help.c:55
+#: builtin/help.c:57
 msgid "print all available commands"
 msgstr "cetak semua perintah yang tersedia"
 
-#: builtin/help.c:57
+#: builtin/help.c:60
+msgid "show external commands in --all"
+msgstr "perlihatkan perintah eksternal dalam --all"
+
+#: builtin/help.c:61
+msgid "show aliases in --all"
+msgstr "perlihatkan alias pada --all"
+
+#: builtin/help.c:62
 msgid "exclude guides"
 msgstr "kecualikan panduan"
 
-#: builtin/help.c:58
+#: builtin/help.c:63
 msgid "show man page"
 msgstr "perlihatkan halaman man"
 
-#: builtin/help.c:59
+#: builtin/help.c:64
 msgid "show manual in web browser"
 msgstr "perlihatkan manual dalam penjelajah web"
 
-#: builtin/help.c:61
+#: builtin/help.c:66
 msgid "show info page"
 msgstr "perlihatkan halaman info"
 
-#: builtin/help.c:63
+#: builtin/help.c:68
 msgid "print command description"
 msgstr "perlihatkan deskripsi perintah"
 
-#: builtin/help.c:65
+#: builtin/help.c:70
 msgid "print list of useful guides"
 msgstr "cetak daftar panduan berguna"
 
-#: builtin/help.c:67
+#: builtin/help.c:72
 msgid "print all configuration variable names"
 msgstr "cetak semua nama variabel konfigurasi"
 
-#: builtin/help.c:78
-msgid ""
-"git help [-a|--all] [--[no-]verbose]]\n"
-"         [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
-msgstr ""
-"git help [-a|--all] [--[no-]verbose]]\n"
-"         [[-i|--info] [-m|--man] [-w|--web]] [<perintah>]"
-
-#: builtin/help.c:80
-msgid "git help [-g|--guides]"
-msgstr ""
-
-#: builtin/help.c:81
-msgid "git help [-c|--config]"
-msgstr ""
+#: builtin/help.c:84
+msgid "git help [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
+msgstr "git help [[-i|--info] [-m|--man] [-w|--web]] [<perintah>]"
 
-#: builtin/help.c:196
+#: builtin/help.c:201
 #, c-format
 msgid "unrecognized help format '%s'"
 msgstr "format bantuan tidak dikenal '%s'"
 
-#: builtin/help.c:222
+#: builtin/help.c:227
 msgid "Failed to start emacsclient."
 msgstr "gagal menjalankan emacsclient."
 
-#: builtin/help.c:235
+#: builtin/help.c:240
 msgid "Failed to parse emacsclient version."
 msgstr "gagal menguraikan versi emacsclient."
 
-#: builtin/help.c:243
+#: builtin/help.c:248
 #, c-format
 msgid "emacsclient version '%d' too old (< 22)."
 msgstr "versi emacsclient '%d' terlalu usang (< 22)."
 
-#: builtin/help.c:261 builtin/help.c:283 builtin/help.c:293 builtin/help.c:301
+#: builtin/help.c:266 builtin/help.c:288 builtin/help.c:298 builtin/help.c:306
 #, c-format
 msgid "failed to exec '%s'"
 msgstr "gagal menjalankan '%s'"
 
-#: builtin/help.c:339
+#: builtin/help.c:344
 #, c-format
 msgid ""
 "'%s': path for unsupported man viewer.\n"
@@ -16151,7 +16728,7 @@ msgstr ""
 "'%s': jalur untuk pembaca man yang tidak didukung.\n"
 "Mohon gunakan 'man.<tool>.cmd' sebagai gantinya."
 
-#: builtin/help.c:351
+#: builtin/help.c:356
 #, c-format
 msgid ""
 "'%s': cmd for supported man viewer.\n"
@@ -16160,42 +16737,56 @@ msgstr ""
 "'%s': cmd untuk pembaca man yang didukung.\n"
 "Mohon gunakan 'man.<tool>.path' sebagai gantinya."
 
-#: builtin/help.c:466
+#: builtin/help.c:471
 #, c-format
 msgid "'%s': unknown man viewer."
 msgstr "'%s': pembaca man tidak dikenal"
 
-#: builtin/help.c:482
+#: builtin/help.c:487
 msgid "no man viewer handled the request"
 msgstr "tidak ada pembaca man yang menangani permintaan"
 
-#: builtin/help.c:489
+#: builtin/help.c:494
 msgid "no info viewer handled the request"
 msgstr "tidak ada pembaca info yang menangani permintaan"
 
-#: builtin/help.c:550 builtin/help.c:561 git.c:348
+#: builtin/help.c:555 builtin/help.c:566 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "'%s' dialiaskan ke '%s'"
 
-#: builtin/help.c:564 git.c:380
+#: builtin/help.c:569 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr "untai alias.%s jelek: %s"
 
-#: builtin/help.c:580
-msgid "this option doesn't take any other arguments"
-msgstr "opsi ini tidak mengambil argumen lainnya"
+#: builtin/help.c:611
+#, c-format
+msgid "the '%s' option doesn't take any non-option arguments"
+msgstr "opsi '%s' tidak mengambil argumen bukan opsi"
+
+#: builtin/help.c:631
+msgid ""
+"the '--no-[external-commands|aliases]' options can only be used with '--all'"
+msgstr ""
 
-#: builtin/help.c:601 builtin/help.c:628
+#: builtin/help.c:643 builtin/help.c:671
 #, c-format
 msgid "usage: %s%s"
 msgstr "penggunaan: %s%s"
 
-#: builtin/help.c:623
+#: builtin/help.c:666
 msgid "'git help config' for more information"
 msgstr "'git help config' untuk informasi lebih lanjut"
 
+#: builtin/hook.c:10
+msgid "git hook run [--ignore-missing] <hook-name> [-- <hook-args>]"
+msgstr ""
+
+#: builtin/hook.c:30
+msgid "silently ignore missing requested <hook-name>"
+msgstr ""
+
 #: builtin/index-pack.c:221
 #, c-format
 msgid "object type mismatch at %s"
@@ -16230,244 +16821,245 @@ msgstr "kesalahan baca pada masukan"
 msgid "used more bytes than were available"
 msgstr "gunakan lebih banyak pita dari pada yang tersedia"
 
-#: builtin/index-pack.c:324 builtin/pack-objects.c:756
+#: builtin/index-pack.c:324 builtin/pack-objects.c:754
 msgid "pack too large for current definition of off_t"
 msgstr "paket terlalu besar untuk definisi off_t saat ini"
 
-#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
-msgid "pack exceeds maximum allowed size"
-msgstr "paket melebihi ukuran maksimum yang diperbolehkan"
+#: builtin/index-pack.c:329
+#, c-format
+msgid "pack exceeds maximum allowed size (%s)"
+msgstr "paket melebihi ukuran maksimum yang diperbolehkan (%s)"
 
-#: builtin/index-pack.c:358
+#: builtin/index-pack.c:362
 msgid "pack signature mismatch"
 msgstr "tanda tangan paket tidak cocok"
 
-#: builtin/index-pack.c:360
+#: builtin/index-pack.c:364
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "versi paket %<PRIu32> tidak didukung"
 
-#: builtin/index-pack.c:376
+#: builtin/index-pack.c:380
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "paket ada objek jelek pada offset %<PRIuMAX>: %s"
 
-#: builtin/index-pack.c:482
+#: builtin/index-pack.c:485
 #, c-format
 msgid "inflate returned %d"
 msgstr "inflate mengembalikan %d"
 
-#: builtin/index-pack.c:531
+#: builtin/index-pack.c:534
 msgid "offset value overflow for delta base object"
 msgstr "nilai offset meluap untuk objek basis delta"
 
-#: builtin/index-pack.c:539
+#: builtin/index-pack.c:542
 msgid "delta base offset is out of bound"
 msgstr "offset basis delta di luar jangkauan"
 
-#: builtin/index-pack.c:547
+#: builtin/index-pack.c:550
 #, c-format
 msgid "unknown object type %d"
 msgstr "tipe objek tidak diketahui %d"
 
-#: builtin/index-pack.c:578
+#: builtin/index-pack.c:581
 msgid "cannot pread pack file"
 msgstr "tidak dapat pread berkas paket"
 
-#: builtin/index-pack.c:580
+#: builtin/index-pack.c:583
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/index-pack.c:606
+#: builtin/index-pack.c:609
 msgid "serious inflate inconsistency"
 msgstr "inkonsistensi inflate serius"
 
-#: builtin/index-pack.c:751 builtin/index-pack.c:757 builtin/index-pack.c:781
-#: builtin/index-pack.c:820 builtin/index-pack.c:829
+#: builtin/index-pack.c:754 builtin/index-pack.c:760 builtin/index-pack.c:784
+#: builtin/index-pack.c:823 builtin/index-pack.c:832
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "TUMBUKAN SHA1 DITEMUKAN DENGAN %s !"
 
-#: builtin/index-pack.c:754 builtin/pack-objects.c:292
-#: builtin/pack-objects.c:352 builtin/pack-objects.c:458
+#: builtin/index-pack.c:757 builtin/pack-objects.c:290
+#: builtin/pack-objects.c:350 builtin/pack-objects.c:456
 #, c-format
 msgid "unable to read %s"
 msgstr "tidak dapat membaca %s"
 
-#: builtin/index-pack.c:818
+#: builtin/index-pack.c:821
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "tidak dapat membaca info objek yang ada %s"
 
-#: builtin/index-pack.c:826
+#: builtin/index-pack.c:829
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "tidak dapat membaca objek yang ada %s"
 
-#: builtin/index-pack.c:840
+#: builtin/index-pack.c:843
 #, c-format
 msgid "invalid blob object %s"
 msgstr "objek blob tidak valid %s"
 
-#: builtin/index-pack.c:843 builtin/index-pack.c:862
+#: builtin/index-pack.c:846 builtin/index-pack.c:865
 msgid "fsck error in packed object"
 msgstr "kesalahan fsck dalam objek terpaket"
 
-#: builtin/index-pack.c:864
+#: builtin/index-pack.c:867
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr "Tidak semua objek anak dari %s bisa dicapai"
 
-#: builtin/index-pack.c:925 builtin/index-pack.c:972
+#: builtin/index-pack.c:928 builtin/index-pack.c:975
 msgid "failed to apply delta"
 msgstr "gagal menerapkan delta"
 
-#: builtin/index-pack.c:1156
+#: builtin/index-pack.c:1161
 msgid "Receiving objects"
 msgstr "Menerima objek"
 
-#: builtin/index-pack.c:1156
+#: builtin/index-pack.c:1161
 msgid "Indexing objects"
 msgstr "Mengindeks objek"
 
-#: builtin/index-pack.c:1190
+#: builtin/index-pack.c:1195
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "paket rusak (SHA1 tidak cocok)"
 
-#: builtin/index-pack.c:1195
+#: builtin/index-pack.c:1200
 msgid "cannot fstat packfile"
 msgstr "tidak dapat fstat berkas paket"
 
-#: builtin/index-pack.c:1198
+#: builtin/index-pack.c:1203
 msgid "pack has junk at the end"
 msgstr "paket memiliki sampah pada ujung"
 
-#: builtin/index-pack.c:1210
+#: builtin/index-pack.c:1215
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr "bingung di luar kegilaan di parse_pack_objects()"
 
-#: builtin/index-pack.c:1233
+#: builtin/index-pack.c:1238
 msgid "Resolving deltas"
 msgstr "Menguraikan delta"
 
-#: builtin/index-pack.c:1244 builtin/pack-objects.c:2905
+#: builtin/index-pack.c:1249 builtin/pack-objects.c:2913
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "tidak dapat membuat utas: %s"
 
-#: builtin/index-pack.c:1277
+#: builtin/index-pack.c:1282
 msgid "confusion beyond insanity"
 msgstr "bingung di luar kegilaan"
 
-#: builtin/index-pack.c:1283
+#: builtin/index-pack.c:1288
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/index-pack.c:1295
+#: builtin/index-pack.c:1300
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr "Checksum ekor tidak diharapkan untuk %s (kerusakan disk?)"
 
-#: builtin/index-pack.c:1299
+#: builtin/index-pack.c:1304
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/index-pack.c:1323
+#: builtin/index-pack.c:1328
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "tidak dapat menggemboskan objek tertambah (%d)"
 
-#: builtin/index-pack.c:1419
+#: builtin/index-pack.c:1423
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "objek lokal %s rusak"
 
-#: builtin/index-pack.c:1440
+#: builtin/index-pack.c:1445
 #, c-format
 msgid "packfile name '%s' does not end with '.%s'"
 msgstr "nama berkas paket '%s' tidak diakhiri dengan '.%s'"
 
-#: builtin/index-pack.c:1464
+#: builtin/index-pack.c:1469
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "tidak dapat menulis %s berkas '%s'"
 
-#: builtin/index-pack.c:1472
+#: builtin/index-pack.c:1477
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr "tidak dapat menutup %s berkas tertulis '%s'"
 
-#: builtin/index-pack.c:1489
+#: builtin/index-pack.c:1494
 #, c-format
 msgid "unable to rename temporary '*.%s' file to '%s'"
 msgstr "tidak dapat menamai ulang berkas sementara '*.%s' ke '%s'"
 
-#: builtin/index-pack.c:1514
+#: builtin/index-pack.c:1519
 msgid "error while closing pack file"
 msgstr "kesalahan menutup berkas paket"
 
-#: builtin/index-pack.c:1573 builtin/pack-objects.c:3150
+#: builtin/index-pack.c:1578 builtin/pack-objects.c:3158
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "pack.indexversion=%<PRIu32> jelek"
 
-#: builtin/index-pack.c:1643
+#: builtin/index-pack.c:1648
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "tidak dapat membuka berkas paket yang ada '%s'"
 
-#: builtin/index-pack.c:1645
+#: builtin/index-pack.c:1650
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "tidak dapat membuka berkas indeks paket untuk '%s'"
 
-#: builtin/index-pack.c:1693
+#: builtin/index-pack.c:1698
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/index-pack.c:1700
+#: builtin/index-pack.c:1705
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/index-pack.c:1742
+#: builtin/index-pack.c:1748
 msgid "Cannot come back to cwd"
 msgstr "tidak dapat kembali ke direktori kerja saat ini"
 
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1799
-#: builtin/index-pack.c:1819 builtin/index-pack.c:1823
+#: builtin/index-pack.c:1802 builtin/index-pack.c:1805
+#: builtin/index-pack.c:1825 builtin/index-pack.c:1829
 #, c-format
 msgid "bad %s"
 msgstr "%s jelek"
 
-#: builtin/index-pack.c:1829 builtin/init-db.c:379 builtin/init-db.c:614
+#: builtin/index-pack.c:1835 builtin/init-db.c:379 builtin/init-db.c:614
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "algoritma hash tak dikenal '%s'"
 
-#: builtin/index-pack.c:1850
+#: builtin/index-pack.c:1856
 msgid "--stdin requires a git repository"
 msgstr "--stdin memerlukan repositori git"
 
-#: builtin/index-pack.c:1867
+#: builtin/index-pack.c:1873
 msgid "--verify with no packfile name given"
 msgstr "--verify tanpa nama berkas paket diberikan"
 
-#: builtin/index-pack.c:1933 builtin/unpack-objects.c:584
+#: builtin/index-pack.c:1939 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "kesalahan fsck dalam objek paket"
 
@@ -16675,40 +17267,40 @@ msgstr ""
 msgid "no input file given for in-place editing"
 msgstr ""
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<opsi>] [<rentang revisi>] [[--] <jalur>...]"
 
-#: builtin/log.c:60
+#: builtin/log.c:61
 msgid "git show [<options>] <object>..."
 msgstr "git show [<opsi>] <objek>..."
 
-#: builtin/log.c:113
+#: builtin/log.c:114
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "opsi --decorate tidak valid: %s"
 
-#: builtin/log.c:180
+#: builtin/log.c:181
 msgid "show source"
 msgstr "perlihatkan sumber"
 
-#: builtin/log.c:181
+#: builtin/log.c:182
 msgid "use mail map file"
 msgstr "gunakan berkas peta surat"
 
-#: builtin/log.c:184
+#: builtin/log.c:185
 msgid "only decorate refs that match <pattern>"
 msgstr "hanya dekorasi referensi yang cocok dengan <pola>"
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "do not decorate refs that match <pattern>"
 msgstr "jangan dekorasi referensi yang cocok dengan <pola>"
 
-#: builtin/log.c:187
+#: builtin/log.c:188
 msgid "decorate options"
 msgstr "opsi dekorasi"
 
-#: builtin/log.c:190
+#: builtin/log.c:191
 msgid ""
 "trace the evolution of line range <start>,<end> or function :<funcname> in "
 "<file>"
@@ -16716,89 +17308,93 @@ msgstr ""
 "lacak evolusi rentang baris <awal>,<akhir> atau fungsi :<nama fungsi> dalam "
 "<berkas>"
 
-#: builtin/log.c:213
+#: builtin/log.c:214
 msgid "-L<range>:<file> cannot be used with pathspec"
 msgstr "-L<rentang>:<berkas> tidak dapat digunakan dengan spek jalur"
 
-#: builtin/log.c:321
+#: builtin/log.c:322
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "Keluaran terakhir: %d %s\n"
 
-#: builtin/log.c:586
+#: builtin/log.c:429
+msgid "unable to create temporary object directory"
+msgstr "tidak dapat membuat direktori objek sementara"
+
+#: builtin/log.c:599
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: berkas jelek"
 
-#: builtin/log.c:601 builtin/log.c:691
+#: builtin/log.c:614 builtin/log.c:706
 #, c-format
 msgid "could not read object %s"
 msgstr "tidak dapat membaca objek %s"
 
-#: builtin/log.c:716
+#: builtin/log.c:731
 #, c-format
 msgid "unknown type: %d"
 msgstr "tipe tidak dikenal: %d"
 
-#: builtin/log.c:861
+#: builtin/log.c:880
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr "%s: sampul tidak valid dari mode deskripsi"
 
-#: builtin/log.c:868
+#: builtin/log.c:887
 msgid "format.headers without value"
 msgstr "format.headers tanpa nilai"
 
-#: builtin/log.c:997
+#: builtin/log.c:1016
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "tidak dapat membuka berkas tambalan %s"
 
-#: builtin/log.c:1014
+#: builtin/log.c:1033
 msgid "need exactly one range"
 msgstr "butuh tepatnya satu rentang"
 
-#: builtin/log.c:1024
+#: builtin/log.c:1043
 msgid "not a range"
 msgstr "bukan sebuah rentang"
 
-#: builtin/log.c:1188
+#: builtin/log.c:1207
 msgid "cover letter needs email format"
 msgstr "sampul surat butuh format email"
 
-#: builtin/log.c:1194
+#: builtin/log.c:1213
 msgid "failed to create cover-letter file"
 msgstr "gagal membuat berkas sampul surat"
 
-#: builtin/log.c:1281
+#: builtin/log.c:1300
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "in-reply-to gila: %s"
 
-#: builtin/log.c:1308
+#: builtin/log.c:1327
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<opsi>] [<sejak> | <rentang revisi>]"
 
-#: builtin/log.c:1366
+#: builtin/log.c:1385
 msgid "two output directories?"
 msgstr "dua direktori keluaran?"
 
-#: builtin/log.c:1517 builtin/log.c:2344 builtin/log.c:2346 builtin/log.c:2358
+#: builtin/log.c:1536 builtin/log.c:2369 builtin/log.c:2371 builtin/log.c:2383
 #, c-format
 msgid "unknown commit %s"
 msgstr "komit tidak dikenal %s"
 
-#: builtin/log.c:1528 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1547 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "gagal menguraikan '%s' sebagai referensi valid"
 
-#: builtin/log.c:1537
+#: builtin/log.c:1556
 msgid "could not find exact merge base"
 msgstr "tidak dapat menemukan dasar penggabungan eksak"
 
-#: builtin/log.c:1547
+#: builtin/log.c:1566
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -16810,276 +17406,280 @@ msgstr ""
 "Atau Anda dapat menyebutkan dasar komit secara manual dengan --base=<id "
 "dasar komit>"
 
-#: builtin/log.c:1570
+#: builtin/log.c:1589
 msgid "failed to find exact merge base"
 msgstr "tidak dapat menemukan dasar penggabungan eksak"
 
-#: builtin/log.c:1587
+#: builtin/log.c:1606
 msgid "base commit should be the ancestor of revision list"
 msgstr "dasar komit seharusnya menjadi leluhur daftar revisi"
 
-#: builtin/log.c:1597
+#: builtin/log.c:1616
 msgid "base commit shouldn't be in revision list"
 msgstr "dasar komit tidak seharusnya dalam daftar revisi"
 
-#: builtin/log.c:1655
+#: builtin/log.c:1674
 msgid "cannot get patch id"
 msgstr "tidak dapat mendapatkan id tambalan"
 
-#: builtin/log.c:1718
+#: builtin/log.c:1737
 msgid "failed to infer range-diff origin of current series"
 msgstr "gagal menduga asal range-diff dari seri saat ini"
 
-#: builtin/log.c:1720
+#: builtin/log.c:1739
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr "menggunakan '%s' sebagai asal range-diff dari seri saat ini"
 
-#: builtin/log.c:1764
+#: builtin/log.c:1783
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "gunakan [PATCH n/m] bahkan dengan satu tambalan"
 
-#: builtin/log.c:1767
+#: builtin/log.c:1786
 msgid "use [PATCH] even with multiple patches"
 msgstr "gunakan [PATCH] bahkan dengan banyak tambalan"
 
-#: builtin/log.c:1771
+#: builtin/log.c:1790
 msgid "print patches to standard out"
 msgstr "cetak tambalan ke keluaran standar"
 
-#: builtin/log.c:1773
+#: builtin/log.c:1792
 msgid "generate a cover letter"
 msgstr "buat sampul surat"
 
-#: builtin/log.c:1775
+#: builtin/log.c:1794
 msgid "use simple number sequence for output file names"
 msgstr "gunakan urutan bilangan sederhana untuk keluarkan nama berkas"
 
-#: builtin/log.c:1776
+#: builtin/log.c:1795
 msgid "sfx"
 msgstr "sfx"
 
-#: builtin/log.c:1777
+#: builtin/log.c:1796
 msgid "use <sfx> instead of '.patch'"
 msgstr "gunakan <akhiran> daripada '.patch'"
 
-#: builtin/log.c:1779
+#: builtin/log.c:1798
 msgid "start numbering patches at <n> instead of 1"
 msgstr "mulai menomorkan tambalan pada <n> daripada 1"
 
-#: builtin/log.c:1780
+#: builtin/log.c:1799
 msgid "reroll-count"
 msgstr ""
 
-#: builtin/log.c:1781
+#: builtin/log.c:1800
 msgid "mark the series as Nth re-roll"
 msgstr "tandai seri sebagai gulung ulang ke-N"
 
-#: builtin/log.c:1783
+#: builtin/log.c:1802
 msgid "max length of output filename"
 msgstr "panjang nama berkas keluaran maksimum"
 
-#: builtin/log.c:1785
+#: builtin/log.c:1804
 msgid "use [RFC PATCH] instead of [PATCH]"
 msgstr "gunakan [RFC PATCH] daripada [PATCH]"
 
-#: builtin/log.c:1788
+#: builtin/log.c:1807
 msgid "cover-from-description-mode"
 msgstr "cover-from-description-mode"
 
-#: builtin/log.c:1789
+#: builtin/log.c:1808
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr "buat bagian dari sampul surat berdasarkan deskripsi cabang"
 
-#: builtin/log.c:1791
+#: builtin/log.c:1810
 msgid "use [<prefix>] instead of [PATCH]"
 msgstr "gunakan [<prefix>] daripada [PATCH]"
 
-#: builtin/log.c:1794
+#: builtin/log.c:1813
 msgid "store resulting files in <dir>"
 msgstr "simpan hasil berkas di <direktori>"
 
-#: builtin/log.c:1797
+#: builtin/log.c:1816
 msgid "don't strip/add [PATCH]"
 msgstr "jangan copot/tambah [PATCH]"
 
-#: builtin/log.c:1800
+#: builtin/log.c:1819
 msgid "don't output binary diffs"
 msgstr "jangan keluarkan diff biner"
 
-#: builtin/log.c:1802
+#: builtin/log.c:1821
 msgid "output all-zero hash in From header"
 msgstr "keluarkan hash semua-nol di kepala From"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1823
 msgid "don't include a patch matching a commit upstream"
 msgstr "jangan termasuk tambalan yang cocok dengan komit hulu"
 
-#: builtin/log.c:1806
+#: builtin/log.c:1825
 msgid "show patch format instead of default (patch + stat)"
 msgstr "perlihatkan format tambalan daripada asali (tambalan + stat)"
 
-#: builtin/log.c:1808
+#: builtin/log.c:1827
 msgid "Messaging"
 msgstr "Perpesanan"
 
-#: builtin/log.c:1809
+#: builtin/log.c:1828
 msgid "header"
 msgstr "kepala"
 
-#: builtin/log.c:1810
+#: builtin/log.c:1829
 msgid "add email header"
 msgstr "tambahkan kepala email"
 
-#: builtin/log.c:1811 builtin/log.c:1812
+#: builtin/log.c:1830 builtin/log.c:1831
 msgid "email"
 msgstr "email"
 
-#: builtin/log.c:1811
+#: builtin/log.c:1830
 msgid "add To: header"
 msgstr "tambahkan kepala To:"
 
-#: builtin/log.c:1812
+#: builtin/log.c:1831
 msgid "add Cc: header"
 msgstr "tambahkan kepala Cc:"
 
-#: builtin/log.c:1813
+#: builtin/log.c:1832
 msgid "ident"
 msgstr "ident"
 
-#: builtin/log.c:1814
+#: builtin/log.c:1833
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 "setel alamat From ke <identitas> (atau identitas pengkomit jika tidak ada)"
 
-#: builtin/log.c:1816
+#: builtin/log.c:1835
 msgid "message-id"
 msgstr "message-id"
 
-#: builtin/log.c:1817
+#: builtin/log.c:1836
 msgid "make first mail a reply to <message-id>"
 msgstr "buat surat pertama balasan ke <id pesan>"
 
-#: builtin/log.c:1818 builtin/log.c:1821
+#: builtin/log.c:1837 builtin/log.c:1840
 msgid "boundary"
 msgstr "perbatasan"
 
-#: builtin/log.c:1819
+#: builtin/log.c:1838
 msgid "attach the patch"
 msgstr "lampirkan tambalan"
 
-#: builtin/log.c:1822
+#: builtin/log.c:1841
 msgid "inline the patch"
 msgstr "bariskan tambalan"
 
-#: builtin/log.c:1826
+#: builtin/log.c:1845
 msgid "enable message threading, styles: shallow, deep"
 msgstr "aktifkan utasan pesan, gaya: shallow, deep"
 
-#: builtin/log.c:1828
+#: builtin/log.c:1847
 msgid "signature"
 msgstr "tanda tangan"
 
-#: builtin/log.c:1829
+#: builtin/log.c:1848
 msgid "add a signature"
 msgstr "tambah tanda tangan"
 
-#: builtin/log.c:1830
+#: builtin/log.c:1849
 msgid "base-commit"
 msgstr "dasar komit"
 
-#: builtin/log.c:1831
+#: builtin/log.c:1850
 msgid "add prerequisite tree info to the patch series"
 msgstr "tambahkan info pohon prasyarat ke seri tambalan"
 
-#: builtin/log.c:1834
+#: builtin/log.c:1853
 msgid "add a signature from a file"
 msgstr "tambahkan tandatangan dari berkas"
 
-#: builtin/log.c:1835
+#: builtin/log.c:1854
 msgid "don't print the patch filenames"
 msgstr "jangan cetak nama berkas tambalan"
 
-#: builtin/log.c:1837
+#: builtin/log.c:1856
 msgid "show progress while generating patches"
 msgstr "perlihatkan perkembangan ketika membuat tambalan"
 
-#: builtin/log.c:1839
+#: builtin/log.c:1858
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
 "perlihatkan perubahan terhadap <revisi> di sampul surat atau satu tambalan"
 
-#: builtin/log.c:1842
+#: builtin/log.c:1861
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
 "perlihatkan perubahan terhadap <spek referensi> di sampul surat atau satu "
 "tambalan"
 
-#: builtin/log.c:1844 builtin/range-diff.c:28
+#: builtin/log.c:1863 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr "persentase dimana pembuatan tertimbang"
 
-#: builtin/log.c:1931
+#: builtin/log.c:1953
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "baris identitas tidak valid: %s"
 
-#: builtin/log.c:1956
+#: builtin/log.c:1978
 msgid "--name-only does not make sense"
 msgstr "--name-only tidak masuk akal"
 
-#: builtin/log.c:1958
+#: builtin/log.c:1980
 msgid "--name-status does not make sense"
 msgstr "--name-status tidak masuk akal"
 
-#: builtin/log.c:1960
+#: builtin/log.c:1982
 msgid "--check does not make sense"
 msgstr "--check tidak masuk akal"
 
-#: builtin/log.c:2104
+#: builtin/log.c:1984
+msgid "--remerge-diff does not make sense"
+msgstr "--remerge-diff tidak masuk akal"
+
+#: builtin/log.c:2129
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff butuh --cover-letter atau satu tambalan"
 
-#: builtin/log.c:2108
+#: builtin/log.c:2133
 msgid "Interdiff:"
 msgstr "Interdiff:"
 
-#: builtin/log.c:2109
+#: builtin/log.c:2134
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Interdiff terhadap v%d:"
 
-#: builtin/log.c:2119
+#: builtin/log.c:2144
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff butuh --cover-letter atau satu tambalan"
 
-#: builtin/log.c:2127
+#: builtin/log.c:2152
 msgid "Range-diff:"
 msgstr "Range-diff:"
 
-#: builtin/log.c:2128
+#: builtin/log.c:2153
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "Range-diff terhadap v%d:"
 
-#: builtin/log.c:2139
+#: builtin/log.c:2164
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "tidak dapat membaca berkas tanda tangan '%s'"
 
-#: builtin/log.c:2175
+#: builtin/log.c:2200
 msgid "Generating patches"
 msgstr "Membuat tambalan"
 
-#: builtin/log.c:2219
+#: builtin/log.c:2244
 msgid "failed to create output files"
 msgstr "tidak dapat membuat berkas keluaran"
 
-#: builtin/log.c:2279
+#: builtin/log.c:2304
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<hulu> [<kepala> [<batas>]]]"
 
-#: builtin/log.c:2333
+#: builtin/log.c:2358
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -17175,10 +17775,6 @@ msgstr "tambahkan pengecualian git standar"
 msgid "make the output relative to the project top directory"
 msgstr "buat keluaran relatif terhadap direktori puncak proyek"
 
-#: builtin/ls-files.c:667
-msgid "recurse through submodules"
-msgstr "rekursi melalui submodul"
-
 #: builtin/ls-files.c:669
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr ""
@@ -17218,7 +17814,7 @@ msgstr ""
 msgid "do not print remote URL"
 msgstr "jangan cetak URL remote"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1103
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1131
 msgid "exec"
 msgstr "exec"
 
@@ -17251,44 +17847,72 @@ msgstr ""
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr "perlihatkan referensi pokok selain objek yang ditunjuk olehnya"
 
-#: builtin/ls-tree.c:30
+#: builtin/ls-tree.c:36
 msgid "git ls-tree [<options>] <tree-ish> [<path>...]"
 msgstr "git ls-tree [<opsi>] <mirip-pohon> [<jalur>...]"
 
-#: builtin/ls-tree.c:128
+#: builtin/ls-tree.c:54
+#, c-format
+msgid "could not get object info about '%s'"
+msgstr "tidak dapat mendapatkan info objek tentang '%s'"
+
+#: builtin/ls-tree.c:79
+#, c-format
+msgid "bad ls-tree format: element '%s' does not start with '('"
+msgstr "format ls-tree jelek: elemen '%s' tidak dimulai dengan '('"
+
+#: builtin/ls-tree.c:83
+#, c-format
+msgid "bad ls-tree format: element '%s' does not end in ')'"
+msgstr "format ls-tree jelek: elemen '%s' tidak diakhiri dengan ')'"
+
+#: builtin/ls-tree.c:109
+#, c-format
+msgid "bad ls-tree format: %%%.*s"
+msgstr "format ls-tree jelek: %%%.*s"
+
+#: builtin/ls-tree.c:336
 msgid "only show trees"
 msgstr "hanya perlihatkan pohon"
 
-#: builtin/ls-tree.c:130
+#: builtin/ls-tree.c:338
 msgid "recurse into subtrees"
 msgstr "rekursi ke dalam subpohon"
 
-#: builtin/ls-tree.c:132
+#: builtin/ls-tree.c:340
 msgid "show trees when recursing"
 msgstr "perlihatkan pohon ketika rekursi"
 
-#: builtin/ls-tree.c:135
+#: builtin/ls-tree.c:343
 msgid "terminate entries with NUL byte"
 msgstr "akhiri entri dengan bita NUL"
 
-#: builtin/ls-tree.c:136
+#: builtin/ls-tree.c:344
 msgid "include object size"
 msgstr "masukkan ukuran objek"
 
-#: builtin/ls-tree.c:138 builtin/ls-tree.c:140
+#: builtin/ls-tree.c:346 builtin/ls-tree.c:348
 msgid "list only filenames"
 msgstr "hanya daftar nama berkas"
 
-#: builtin/ls-tree.c:143
+#: builtin/ls-tree.c:350
+msgid "list only objects"
+msgstr "hanya daftar objek"
+
+#: builtin/ls-tree.c:353
 msgid "use full path names"
 msgstr "gunakan nama berkas lengkap"
 
-#: builtin/ls-tree.c:145
+#: builtin/ls-tree.c:355
 msgid "list entire tree; not just current directory (implies --full-name)"
 msgstr ""
 "daftar pohon keseluruhan; bukan hanya direktori saat ini (menyiratkan --full-"
 "name)"
 
+#: builtin/ls-tree.c:391
+msgid "--format can't be combined with other format-altering options"
+msgstr "--format tidak dapat digabungkan opsi pengubah format lainnya"
+
 #. TRANSLATORS: keep <> in "<" mail ">" info.
 #: builtin/mailinfo.c:14
 msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
@@ -17338,50 +17962,54 @@ msgstr ""
 msgid "use headers in message's body"
 msgstr ""
 
-#: builtin/mailsplit.c:239
+#: builtin/mailsplit.c:227
+msgid "reading patches from stdin/tty..."
+msgstr ""
+
+#: builtin/mailsplit.c:242
 #, c-format
 msgid "empty mbox: '%s'"
 msgstr ""
 
 #: builtin/merge-base.c:32
 msgid "git merge-base [-a | --all] <commit> <commit>..."
-msgstr ""
+msgstr "git merge-base [-a | --all] <komit> <komit>..."
 
 #: builtin/merge-base.c:33
 msgid "git merge-base [-a | --all] --octopus <commit>..."
-msgstr ""
+msgstr "git merge-base [-a | --all] --octopus <komit>..."
 
 #: builtin/merge-base.c:34
 msgid "git merge-base --independent <commit>..."
-msgstr ""
+msgstr "git merge-base --independent <komit>..."
 
 #: builtin/merge-base.c:35
 msgid "git merge-base --is-ancestor <commit> <commit>"
-msgstr ""
+msgstr "git merge-base --is-ancestor <komit> <komit>"
 
 #: builtin/merge-base.c:36
 msgid "git merge-base --fork-point <ref> [<commit>]"
-msgstr ""
+msgstr "git merge-base --fork-point <referensi> [<komit>]"
 
-#: builtin/merge-base.c:143
+#: builtin/merge-base.c:144
 msgid "output all common ancestors"
-msgstr ""
+msgstr "keluarkan semua leluhur umum"
 
-#: builtin/merge-base.c:145
+#: builtin/merge-base.c:146
 msgid "find ancestors for a single n-way merge"
-msgstr ""
+msgstr "temukan leluhur untuk sebuah penggabungan n-arah"
 
-#: builtin/merge-base.c:147
+#: builtin/merge-base.c:148
 msgid "list revs not reachable from others"
-msgstr ""
+msgstr "daftarkan revisi yang tak terjangkau dari yang lainnya"
 
-#: builtin/merge-base.c:149
+#: builtin/merge-base.c:150
 msgid "is the first one ancestor of the other?"
-msgstr ""
+msgstr "apakah yang pertama leluhur yang lain?"
 
-#: builtin/merge-base.c:151
+#: builtin/merge-base.c:152
 msgid "find where <commit> forked from reflog of <ref>"
-msgstr ""
+msgstr "temukan dimana <komit> digarpu dari log referensi <referensi>"
 
 #: builtin/merge-file.c:9
 msgid ""
@@ -17526,7 +18154,7 @@ msgid "verify that the named commit has a valid GPG signature"
 msgstr "periksa bahwa komit bernama punya tandatangan GPG yang valid"
 
 #: builtin/merge.c:280 builtin/notes.c:785 builtin/pull.c:172
-#: builtin/rebase.c:1117 builtin/revert.c:114
+#: builtin/rebase.c:1145 builtin/revert.c:114
 msgid "strategy"
 msgstr "strategi"
 
@@ -17660,72 +18288,72 @@ msgstr ""
 "Baris yang diawali dengan '%c' akan diabaikan, dan pesan kosong batalkan\n"
 "komit.\n"
 
-#: builtin/merge.c:894
+#: builtin/merge.c:900
 msgid "Empty commit message."
 msgstr "Pesan komit kosong"
 
-#: builtin/merge.c:909
+#: builtin/merge.c:915
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Luar biasa.\n"
 
-#: builtin/merge.c:970
+#: builtin/merge.c:976
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr "Penggabungan otomatis gagal; selesaikan konflik lalu komit hasilnya.\n"
 
-#: builtin/merge.c:1009
+#: builtin/merge.c:1015
 msgid "No current branch."
 msgstr "Tidak ada cabang saat ini."
 
-#: builtin/merge.c:1011
+#: builtin/merge.c:1017
 msgid "No remote for the current branch."
 msgstr "Tidak ada remote untuk cabang saat ini."
 
-#: builtin/merge.c:1013
+#: builtin/merge.c:1019
 msgid "No default upstream defined for the current branch."
 msgstr "Tidak ada hulu asali yang ditentukan untuk cabang saat ini."
 
-#: builtin/merge.c:1018
+#: builtin/merge.c:1024
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "Tidak ada cabang pelacak remote untuk %s dari %s"
 
-#: builtin/merge.c:1075
+#: builtin/merge.c:1081
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Nilai jelek '%s' dalam lingkungan '%s'"
 
-#: builtin/merge.c:1177
+#: builtin/merge.c:1183
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "bukan sesuatu yang kami bisa gabungkan di %s: %s"
 
-#: builtin/merge.c:1211
+#: builtin/merge.c:1217
 msgid "not something we can merge"
 msgstr "bukan sesuatu yang kami bisa gabungkan"
 
-#: builtin/merge.c:1324
+#: builtin/merge.c:1330
 msgid "--abort expects no arguments"
 msgstr "--abort harap tanpa argumen"
 
-#: builtin/merge.c:1328
+#: builtin/merge.c:1334
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "Tidak ada penggabungan yang bisa dibatalkan (MERGE_HEAD hilang)."
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1352
 msgid "--quit expects no arguments"
 msgstr "--quit harap tanpa argumen"
 
-#: builtin/merge.c:1359
+#: builtin/merge.c:1365
 msgid "--continue expects no arguments"
 msgstr "--continue harap tanpa argumen"
 
-#: builtin/merge.c:1363
+#: builtin/merge.c:1369
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "Tidak ada penggabungan yang sedang berlangsung (MERGE_HEAD hilang)."
 
-#: builtin/merge.c:1379
+#: builtin/merge.c:1385
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17733,7 +18361,7 @@ msgstr ""
 "Anda belum mengakhiri penggabungan Anda (MERGE_HEAD ada).\n"
 "Mohon komit perubahan Anda sebelum Anda gabungkan."
 
-#: builtin/merge.c:1386
+#: builtin/merge.c:1392
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17741,87 +18369,83 @@ msgstr ""
 "Anda belum mengakhiri pemetikan ceri Anda (CHERRY_PICK_HEAD ada).\n"
 "Mohon komit perubahan Anda sebelum Anda gabungkan."
 
-#: builtin/merge.c:1389
+#: builtin/merge.c:1395
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "Anda belum mengakhiri pemetikan ceri Anda (CHERRY_PICK_HEAD ada)."
 
-#: builtin/merge.c:1421
+#: builtin/merge.c:1427
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr ""
 "Tidak ada komit yang disebutkan dan merge.defaultToUpstream tidak disetel."
 
-#: builtin/merge.c:1438
+#: builtin/merge.c:1444
 msgid "Squash commit into empty head not supported yet"
 msgstr "Lumat komit ke kepala kosong belum didukung"
 
-#: builtin/merge.c:1440
+#: builtin/merge.c:1446
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr "Komit nir maju cepat tidak masuk akal ke kepala kosong"
 
-#: builtin/merge.c:1445
+#: builtin/merge.c:1451
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - bukan sesuatu yang kami bisa gabungkan"
 
-#: builtin/merge.c:1447
+#: builtin/merge.c:1453
 msgid "Can merge only exactly one commit into empty head"
 msgstr "Hanya bisa menggabungkan tepantnya satu komit ke kepala kosong"
 
-#: builtin/merge.c:1534
+#: builtin/merge.c:1540
 msgid "refusing to merge unrelated histories"
 msgstr "menolak menggabungkan riwayat tak terkait"
 
-#: builtin/merge.c:1553
+#: builtin/merge.c:1559
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Memperbarui %s..%s\n"
 
-#: builtin/merge.c:1601
+#: builtin/merge.c:1606
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Mencoba penggabungan dalam indeks yang sangat sepele\n"
 
-#: builtin/merge.c:1608
+#: builtin/merge.c:1613
 #, c-format
 msgid "Nope.\n"
 msgstr "Tidak.\n"
 
-#: builtin/merge.c:1667 builtin/merge.c:1733
+#: builtin/merge.c:1671 builtin/merge.c:1737
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Memutar ulang pohon ke asli...\n"
 
-#: builtin/merge.c:1671
+#: builtin/merge.c:1675
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Mencoba strategi penggabungan %s...\n"
 
-#: builtin/merge.c:1723
+#: builtin/merge.c:1727
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Tidak ada strategi yang menangani penggabungan.\n"
 
-#: builtin/merge.c:1725
+#: builtin/merge.c:1729
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "Penggabungan dengan strategi %s gagal.\n"
 
-#: builtin/merge.c:1735
+#: builtin/merge.c:1739
 #, c-format
 msgid "Using the %s strategy to prepare resolving by hand.\n"
 msgstr "Menggunakan strategi %s untuk menyiapkan penyelesaian dengan tangan.\n"
 
-#: builtin/merge.c:1749
+#: builtin/merge.c:1753
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
 "Penggabungan otomatis berjalan baik; berhenti sebelum mengkomit seperti yang "
 "diminta\n"
 
-#: builtin/mktag.c:10
-msgid "git mktag"
-msgstr ""
-
 #: builtin/mktag.c:27
 #, c-format
 msgid "warning: tag input does not pass fsck: %s"
@@ -17847,22 +18471,18 @@ msgstr ""
 msgid "object '%s' tagged as '%s', but is a '%s' type"
 msgstr ""
 
-#: builtin/mktag.c:98
+#: builtin/mktag.c:97
 msgid "tag on stdin did not pass our strict fsck check"
 msgstr ""
 
-#: builtin/mktag.c:101
+#: builtin/mktag.c:100
 msgid "tag on stdin did not refer to a valid object"
 msgstr ""
 
-#: builtin/mktag.c:104 builtin/tag.c:242
+#: builtin/mktag.c:103 builtin/tag.c:243
 msgid "unable to write tag file"
 msgstr ""
 
-#: builtin/mktree.c:66
-msgid "git mktree [-z] [--missing] [--batch]"
-msgstr ""
-
 #: builtin/mktree.c:154
 msgid "input is NUL terminated"
 msgstr ""
@@ -17880,48 +18500,52 @@ msgid ""
 "git multi-pack-index [<options>] write [--preferred-pack=<pack>][--refs-"
 "snapshot=<path>]"
 msgstr ""
+"git multi-pack-index [<opsi>] write [--preferred-pack=<pak>] [--refs-"
+"snapshot=<jalur>]"
 
 #: builtin/multi-pack-index.c:14
 msgid "git multi-pack-index [<options>] verify"
-msgstr ""
+msgstr "git multi-pack-index [<opsi>] verify"
 
 #: builtin/multi-pack-index.c:17
 msgid "git multi-pack-index [<options>] expire"
-msgstr ""
+msgstr "git multi-pack-index [<opsi>] expire"
 
 #: builtin/multi-pack-index.c:20
 msgid "git multi-pack-index [<options>] repack [--batch-size=<size>]"
-msgstr ""
+msgstr "git multi-pack-index [<opsi>] repack [--batch-size=<ukuran>]"
 
 #: builtin/multi-pack-index.c:57
 msgid "object directory containing set of packfile and pack-index pairs"
-msgstr ""
+msgstr "direktori objek berisi set berkas pak dan pasangan pak-indeks"
 
 #: builtin/multi-pack-index.c:98
 msgid "preferred-pack"
-msgstr ""
+msgstr "pak pilihan"
 
 #: builtin/multi-pack-index.c:99
 msgid "pack for reuse when computing a multi-pack bitmap"
-msgstr ""
+msgstr "pak untuk digunakan ulang saat menghitung bitmap multipak"
 
 #: builtin/multi-pack-index.c:100
 msgid "write multi-pack bitmap"
-msgstr ""
+msgstr "tulis bitmap multipak"
 
 #: builtin/multi-pack-index.c:105
 msgid "write multi-pack index containing only given indexes"
-msgstr ""
+msgstr "tulis indeks multipak yang hanya berisi indeks yang diberikan"
 
 #: builtin/multi-pack-index.c:107
 msgid "refs snapshot for selecting bitmap commits"
-msgstr ""
+msgstr "potret referensi untuk memilih komit bitmap"
 
 #: builtin/multi-pack-index.c:206
 msgid ""
 "during repack, collect pack-files of smaller size into a batch that is "
 "larger than this size"
 msgstr ""
+"selama pengepakan ulang, kumpulkan berkas pak berukuran lebih kecil ke dalam "
+"sebuah batch yang lebih besar dari ukuran ini"
 
 #: builtin/mv.c:18
 msgid "git mv [<options>] <source>... <destination>"
@@ -18015,52 +18639,56 @@ msgstr "%s, source=%s, destination=%s"
 msgid "Renaming %s to %s\n"
 msgstr "Mengganti nama %s ke %s\n"
 
-#: builtin/mv.c:314 builtin/remote.c:790 builtin/repack.c:857
+#: builtin/mv.c:314 builtin/remote.c:812 builtin/repack.c:861
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "gagal mengganti nama '%s'"
 
-#: builtin/name-rev.c:474
+#: builtin/name-rev.c:524
 msgid "git name-rev [<options>] <commit>..."
 msgstr ""
 
-#: builtin/name-rev.c:475
+#: builtin/name-rev.c:525
 msgid "git name-rev [<options>] --all"
 msgstr ""
 
-#: builtin/name-rev.c:476
-msgid "git name-rev [<options>] --stdin"
+#: builtin/name-rev.c:526
+msgid "git name-rev [<options>] --annotate-stdin"
 msgstr ""
 
-#: builtin/name-rev.c:533
+#: builtin/name-rev.c:583
 msgid "print only ref-based names (no object names)"
 msgstr ""
 
-#: builtin/name-rev.c:534
+#: builtin/name-rev.c:584
 msgid "only use tags to name the commits"
 msgstr ""
 
-#: builtin/name-rev.c:536
+#: builtin/name-rev.c:586
 msgid "only use refs matching <pattern>"
 msgstr ""
 
-#: builtin/name-rev.c:538
+#: builtin/name-rev.c:588
 msgid "ignore refs matching <pattern>"
 msgstr ""
 
-#: builtin/name-rev.c:540
+#: builtin/name-rev.c:590
 msgid "list all commits reachable from all refs"
 msgstr ""
 
-#: builtin/name-rev.c:541
-msgid "read from stdin"
+#: builtin/name-rev.c:591
+msgid "deprecated: use annotate-stdin instead"
 msgstr ""
 
-#: builtin/name-rev.c:542
+#: builtin/name-rev.c:592
+msgid "annotate text from stdin"
+msgstr ""
+
+#: builtin/name-rev.c:593
 msgid "allow to print `undefined` names (default)"
 msgstr ""
 
-#: builtin/name-rev.c:548
+#: builtin/name-rev.c:599
 msgid "dereference tags in the input (internal use)"
 msgstr ""
 
@@ -18073,164 +18701,159 @@ msgid ""
 "git notes [--ref <notes-ref>] add [-f] [--allow-empty] [-m <msg> | -F <file> "
 "| (-c | -C) <object>] [<object>]"
 msgstr ""
+"git notes [--ref <referensi catatan>] add [-f] [--allow-empty] [-m <pesan | -"
+"F <berkas> | (-c | -C) <objek>] [<objek>]"
 
 #: builtin/notes.c:30
 msgid "git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>"
 msgstr ""
+"git notes [--ref <referensi catatan>] copy [-f] <objek asal> <objek tujuan>"
 
 #: builtin/notes.c:31
 msgid ""
 "git notes [--ref <notes-ref>] append [--allow-empty] [-m <msg> | -F <file> | "
 "(-c | -C) <object>] [<object>]"
 msgstr ""
+"git notes [--ref <referensi catatan>] append [--alow-empty] [-m <pesan> | -F "
+"<berkas> | (-c | -C) <objek>] [<objek>]"
 
 #: builtin/notes.c:32
 msgid "git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]"
-msgstr ""
+msgstr "git notes [--ref <referensi catatan>] edit [--allow-empty] [<objek>]"
 
 #: builtin/notes.c:33
 msgid "git notes [--ref <notes-ref>] show [<object>]"
-msgstr ""
+msgstr "git notes [--ref <referensi catatan>] show [<objek>]"
 
 #: builtin/notes.c:34
 msgid ""
 "git notes [--ref <notes-ref>] merge [-v | -q] [-s <strategy>] <notes-ref>"
 msgstr ""
-
-#: builtin/notes.c:35
-msgid "git notes merge --commit [-v | -q]"
-msgstr ""
-
-#: builtin/notes.c:36
-msgid "git notes merge --abort [-v | -q]"
-msgstr ""
+"git notes [--ref <referensi catatan>] merge [-v | -q] [-s <strategi>] "
+"<referensi catatan> "
 
 #: builtin/notes.c:37
 msgid "git notes [--ref <notes-ref>] remove [<object>...]"
-msgstr ""
+msgstr "git notes [--ref <referensi catatan>] remove [<objek>...]"
 
 #: builtin/notes.c:38
 msgid "git notes [--ref <notes-ref>] prune [-n] [-v]"
-msgstr ""
+msgstr "git notes [--ref <referensi catatan>] prune [-n] [-v]"
 
 #: builtin/notes.c:39
 msgid "git notes [--ref <notes-ref>] get-ref"
-msgstr ""
+msgstr "git notes [--ref <referensi catatan>] get-ref"
 
 #: builtin/notes.c:44
 msgid "git notes [list [<object>]]"
-msgstr ""
+msgstr "git notes [list [<objek>]]"
 
 #: builtin/notes.c:49
 msgid "git notes add [<options>] [<object>]"
-msgstr ""
+msgstr "git notes add [<opsi>] [<objek>]"
 
 #: builtin/notes.c:54
 msgid "git notes copy [<options>] <from-object> <to-object>"
-msgstr ""
+msgstr "git notes copy [<opsi>] <objek asal> <objek tujuan>"
 
 #: builtin/notes.c:55
 msgid "git notes copy --stdin [<from-object> <to-object>]..."
-msgstr ""
+msgstr "git notes copy --stdin [<objek asal> <objek tujuan>]..."
 
 #: builtin/notes.c:60
 msgid "git notes append [<options>] [<object>]"
-msgstr ""
+msgstr "git notes append [<opsi>] [<objek>]"
 
 #: builtin/notes.c:65
 msgid "git notes edit [<object>]"
-msgstr ""
+msgstr "git notes edit [<objek>]"
 
 #: builtin/notes.c:70
 msgid "git notes show [<object>]"
-msgstr ""
+msgstr "git notes show [<objek>]"
 
 #: builtin/notes.c:75
 msgid "git notes merge [<options>] <notes-ref>"
-msgstr ""
+msgstr "git notes merge [<opsi>] <referensi catatan>"
 
 #: builtin/notes.c:76
 msgid "git notes merge --commit [<options>]"
-msgstr ""
+msgstr "git notes merge --commit [<opsi>]"
 
 #: builtin/notes.c:77
 msgid "git notes merge --abort [<options>]"
-msgstr ""
+msgstr "git notes merge --abort [<opsi>]"
 
 #: builtin/notes.c:82
 msgid "git notes remove [<object>]"
-msgstr ""
+msgstr "git notes remove [<objek>]"
 
 #: builtin/notes.c:87
 msgid "git notes prune [<options>]"
-msgstr ""
-
-#: builtin/notes.c:92
-msgid "git notes get-ref"
-msgstr ""
+msgstr "git notes prune [<opsi>]"
 
 #: builtin/notes.c:97
 msgid "Write/edit the notes for the following object:"
-msgstr ""
+msgstr "Tulis/sunting catatan untuk objek berikut:"
 
 #: builtin/notes.c:149
 #, c-format
 msgid "unable to start 'show' for object '%s'"
-msgstr ""
+msgstr "tidak dapat memulai 'show' untuk objek '%s'"
 
 #: builtin/notes.c:153
 msgid "could not read 'show' output"
-msgstr ""
+msgstr "tidak dapat membaca keluaran 'show'"
 
 #: builtin/notes.c:161
 #, c-format
 msgid "failed to finish 'show' for object '%s'"
-msgstr ""
+msgstr "gagal menyelesaikan 'show' untuk objek '%s'"
 
 #: builtin/notes.c:194
 msgid "please supply the note contents using either -m or -F option"
-msgstr ""
+msgstr "mohon berikan isi catatan baik menggunakan opsi -m ataupun -F"
 
 #: builtin/notes.c:203
 msgid "unable to write note object"
-msgstr ""
+msgstr "tidak dapat menulis objek catatan"
 
 #: builtin/notes.c:206
 #, c-format
 msgid "the note contents have been left in %s"
-msgstr ""
+msgstr "isi catatan telah ditinggalkan di %s"
 
-#: builtin/notes.c:240 builtin/tag.c:581
+#: builtin/notes.c:240 builtin/tag.c:582
 #, c-format
 msgid "could not open or read '%s'"
-msgstr ""
+msgstr "tidak dapat membuka atau membaca '%s'"
 
 #: builtin/notes.c:261 builtin/notes.c:311 builtin/notes.c:313
 #: builtin/notes.c:381 builtin/notes.c:436 builtin/notes.c:524
 #: builtin/notes.c:529 builtin/notes.c:608 builtin/notes.c:670
 #, c-format
 msgid "failed to resolve '%s' as a valid ref."
-msgstr ""
+msgstr "gagal menguraikan '%s' sebagai sebuah referensi valid."
 
 #: builtin/notes.c:263
 #, c-format
 msgid "failed to read object '%s'."
-msgstr ""
+msgstr "gagal membaca objek '%s'."
 
 #: builtin/notes.c:266
 #, c-format
 msgid "cannot read note data from non-blob object '%s'."
-msgstr ""
+msgstr "gagal membaca data catatan dari objek bukan blob '%s'."
 
 #: builtin/notes.c:307
 #, c-format
 msgid "malformed input line: '%s'."
-msgstr ""
+msgstr "baris masukan jelek: '%s'."
 
 #: builtin/notes.c:322
 #, c-format
 msgid "failed to copy notes from '%s' to '%s'"
-msgstr ""
+msgstr "gagal menyalin catatan dari '%s' ke '%s'"
 
 #. TRANSLATORS: the first %s will be replaced by a git
 #. notes command: 'add', 'merge', 'remove', etc.
@@ -18238,43 +18861,36 @@ msgstr ""
 #: builtin/notes.c:354
 #, c-format
 msgid "refusing to %s notes in %s (outside of refs/notes/)"
-msgstr ""
-
-#: builtin/notes.c:374 builtin/notes.c:429 builtin/notes.c:507
-#: builtin/notes.c:519 builtin/notes.c:596 builtin/notes.c:663
-#: builtin/notes.c:813 builtin/notes.c:965 builtin/notes.c:987
-#: builtin/prune-packed.c:25 builtin/receive-pack.c:2487 builtin/tag.c:591
-msgid "too many arguments"
-msgstr ""
+msgstr "gagal men-%s catatan di %s (di luar refs/notes/)"
 
 #: builtin/notes.c:387 builtin/notes.c:676
 #, c-format
 msgid "no note found for object %s."
-msgstr ""
+msgstr "tidak ada catatan yang ditemukan untuk objek %s."
 
 #: builtin/notes.c:408 builtin/notes.c:574
 msgid "note contents as a string"
-msgstr ""
+msgstr "isi catatan sebagai sebuah untai"
 
 #: builtin/notes.c:411 builtin/notes.c:577
 msgid "note contents in a file"
-msgstr ""
+msgstr "isi catatan di dalam berkas"
 
 #: builtin/notes.c:414 builtin/notes.c:580
 msgid "reuse and edit specified note object"
-msgstr ""
+msgstr "gunakan ulang dan sunting objek catatan yang disebutkan"
 
 #: builtin/notes.c:417 builtin/notes.c:583
 msgid "reuse specified note object"
-msgstr ""
+msgstr "gunakan ulang objek catatan yang disebutkan"
 
 #: builtin/notes.c:420 builtin/notes.c:586
 msgid "allow storing empty note"
-msgstr ""
+msgstr "perbolehkan menyimpan catatan kosong"
 
 #: builtin/notes.c:421 builtin/notes.c:494
 msgid "replace existing notes"
-msgstr ""
+msgstr "timpa catatan yang sudah ada"
 
 #: builtin/notes.c:446
 #, c-format
@@ -18282,28 +18898,31 @@ msgid ""
 "Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite "
 "existing notes"
 msgstr ""
+"Tidak dapat menambahkan catatan. Catatan yang sudah ada ditemukan untuk "
+"objek %s. Gunakan '-f' untuk menimpa catatan yang sudah ada"
 
 #: builtin/notes.c:461 builtin/notes.c:542
 #, c-format
 msgid "Overwriting existing notes for object %s\n"
-msgstr ""
+msgstr "Menimpa catatan yang sudah ada untuk objek %s\n"
 
 #: builtin/notes.c:473 builtin/notes.c:635 builtin/notes.c:904
 #, c-format
 msgid "Removing note for object %s\n"
-msgstr ""
+msgstr "Menghapus catatan untuk objek %s\n"
 
 #: builtin/notes.c:495
 msgid "read objects from stdin"
-msgstr ""
+msgstr "baca objek dari masukan standar"
 
 #: builtin/notes.c:497
 msgid "load rewriting config for <command> (implies --stdin)"
 msgstr ""
+"muat konfigurasi penulisan ulang untuk <perintah> (menyiratkan --stdin)"
 
 #: builtin/notes.c:515
 msgid "too few arguments"
-msgstr ""
+msgstr "argumen terlalu sedikit"
 
 #: builtin/notes.c:536
 #, c-format
@@ -18311,11 +18930,13 @@ msgid ""
 "Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite "
 "existing notes"
 msgstr ""
+"Tidak dapat menyalin catatan. Catatan yang sudah ada ditemukan untuk %s. "
+"Gunakan '-f' untuk menimpa catatan yang sudah ada"
 
 #: builtin/notes.c:548
 #, c-format
 msgid "missing notes on source object %s. Cannot copy."
-msgstr ""
+msgstr "catatan hilang pada objek sumber %s. Tidak dapat menyalin."
 
 #: builtin/notes.c:601
 #, c-format
@@ -18323,96 +18944,101 @@ msgid ""
 "The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n"
 "Please use 'git notes add -f -m/-F/-c/-C' instead.\n"
 msgstr ""
+"Opsi -m/-F/-c/-C sudah usang untuk subperintah 'edit.\n"
+"'Mohon gunakan 'git notes add -f -m/-F/-c/-C' sebagai gantinya.\n"
 
 #: builtin/notes.c:696
 msgid "failed to delete ref NOTES_MERGE_PARTIAL"
-msgstr ""
+msgstr "gagal menghapus referensi NOTES_MERGE_PARTIAL"
 
 #: builtin/notes.c:698
 msgid "failed to delete ref NOTES_MERGE_REF"
-msgstr ""
+msgstr "gagal menghapus referensi NOTES_MERGE_REF"
 
 #: builtin/notes.c:700
 msgid "failed to remove 'git notes merge' worktree"
-msgstr ""
+msgstr "gagal menghapus pohon kerja 'git notes merge'"
 
 #: builtin/notes.c:720
 msgid "failed to read ref NOTES_MERGE_PARTIAL"
-msgstr ""
+msgstr "gagal membaca referensi NOTES_MERGE_PARTIAL"
 
 #: builtin/notes.c:722
 msgid "could not find commit from NOTES_MERGE_PARTIAL."
-msgstr ""
+msgstr "gagal menemukan komit dari NOTES_MERGE_PARTIAL."
 
 #: builtin/notes.c:724
 msgid "could not parse commit from NOTES_MERGE_PARTIAL."
-msgstr ""
+msgstr "gagal menguraikan komit dari NOTES_MERGE_PARTIAL."
 
 #: builtin/notes.c:737
 msgid "failed to resolve NOTES_MERGE_REF"
-msgstr ""
+msgstr "gagal menguraikan NOTES_MERGE_REF"
 
 #: builtin/notes.c:740
 msgid "failed to finalize notes merge"
-msgstr ""
+msgstr "gagal menyelesaikan penggabungan catatan"
 
 #: builtin/notes.c:766
 #, c-format
 msgid "unknown notes merge strategy %s"
-msgstr ""
+msgstr "strategi penggabungan catatan %s tidak dikenal"
 
 #: builtin/notes.c:782
 msgid "General options"
-msgstr ""
+msgstr "Opsi umum"
 
 #: builtin/notes.c:784
 msgid "Merge options"
-msgstr ""
+msgstr "Opsi penggabungan"
 
 #: builtin/notes.c:786
 msgid ""
 "resolve notes conflicts using the given strategy (manual/ours/theirs/union/"
 "cat_sort_uniq)"
 msgstr ""
+"selesaikan konflik catatan menggunakan strategi yang diberikan (manual/ours/"
+"theirs/union/cat_sort_uniq)"
 
 #: builtin/notes.c:788
 msgid "Committing unmerged notes"
-msgstr ""
+msgstr "Mengkomitkan catatan tak tergabung"
 
 #: builtin/notes.c:790
 msgid "finalize notes merge by committing unmerged notes"
 msgstr ""
+"selesaikan penggabungan catatan dengan mengkomitkan catatan tak tergabung"
 
 #: builtin/notes.c:792
 msgid "Aborting notes merge resolution"
-msgstr ""
+msgstr "Membatalkan resolusi penggabungan catatan"
 
 #: builtin/notes.c:794
 msgid "abort notes merge"
-msgstr ""
+msgstr "batalkan penggabungan catatan"
 
 #: builtin/notes.c:805
 msgid "cannot mix --commit, --abort or -s/--strategy"
-msgstr ""
+msgstr "tidak dapat mencampurkan --commit, --abort atau -s/--strategy"
 
 #: builtin/notes.c:810
 msgid "must specify a notes ref to merge"
-msgstr ""
+msgstr "harus menyebutkan sebuah referensi catatan untuk digabungkan"
 
 #: builtin/notes.c:834
 #, c-format
 msgid "unknown -s/--strategy: %s"
-msgstr ""
+msgstr "-s/--strategy tidak dikenal: %s"
 
 #: builtin/notes.c:874
 #, c-format
 msgid "a notes merge into %s is already in-progress at %s"
-msgstr ""
+msgstr "sebuah penggabungan catatan ke %s sudah berjalan pada %s"
 
 #: builtin/notes.c:878
 #, c-format
 msgid "failed to store link to current notes ref (%s)"
-msgstr ""
+msgstr "gagal menyimpan tautan ke referensi catatan saat ini (%s)"
 
 #: builtin/notes.c:880
 #, c-format
@@ -18421,45 +19047,48 @@ msgid ""
 "'git notes merge --commit', or abort the merge with 'git notes merge --"
 "abort'.\n"
 msgstr ""
+"Penggabungan catatan otomatis gagal. Selesaikan konflik dalam %s dan komit "
+"hasilnya dengan 'git notes merge --commit', atau batalkan penggabungan "
+"dengan 'git notes merge --abort'.\n"
 
-#: builtin/notes.c:899 builtin/tag.c:594
+#: builtin/notes.c:899 builtin/tag.c:595
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
-msgstr ""
+msgstr "Gagal menguraikan '%s' sebagai referensi valid."
 
 #: builtin/notes.c:902
 #, c-format
 msgid "Object %s has no note\n"
-msgstr ""
+msgstr "Objek %s tidak punya catatan\n"
 
 #: builtin/notes.c:914
 msgid "attempt to remove non-existent note is not an error"
-msgstr ""
+msgstr "mencoba menghapus catatan yang tidak ada bukanlah sebuah kesalahan"
 
 #: builtin/notes.c:917
 msgid "read object names from the standard input"
-msgstr ""
+msgstr "baca nama objek dari masukan standar"
 
-#: builtin/notes.c:956 builtin/prune.c:144 builtin/worktree.c:147
+#: builtin/notes.c:956 builtin/prune.c:144 builtin/worktree.c:148
 msgid "do not remove, show only"
-msgstr ""
+msgstr "jangan hapus, hanya perlihatkan"
 
 #: builtin/notes.c:957
 msgid "report pruned notes"
-msgstr ""
+msgstr "laporkan catatan terpangkas"
 
 #: builtin/notes.c:1000
 msgid "notes-ref"
-msgstr ""
+msgstr "referensi catatan"
 
 #: builtin/notes.c:1001
 msgid "use notes from <notes-ref>"
-msgstr ""
+msgstr "gunakan catatan dari <referensi catatan>"
 
-#: builtin/notes.c:1036 builtin/stash.c:1818
+#: builtin/notes.c:1036 builtin/stash.c:1802
 #, c-format
 msgid "unknown subcommand: %s"
-msgstr ""
+msgstr "subperintah tidak dikenal: %s"
 
 #: builtin/pack-objects.c:182
 msgid ""
@@ -18471,390 +19100,386 @@ msgid ""
 "git pack-objects [<options>...] <base-name> [< <ref-list> | < <object-list>]"
 msgstr ""
 
-#: builtin/pack-objects.c:572
+#: builtin/pack-objects.c:570
 #, c-format
 msgid ""
 "write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
 "pack %s"
 msgstr ""
 
-#: builtin/pack-objects.c:580
+#: builtin/pack-objects.c:578
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr ""
 
-#: builtin/pack-objects.c:591
+#: builtin/pack-objects.c:589
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr ""
 
-#: builtin/pack-objects.c:722
+#: builtin/pack-objects.c:720
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr ""
 
-#: builtin/pack-objects.c:941
+#: builtin/pack-objects.c:939
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr ""
 
-#: builtin/pack-objects.c:1036
+#: builtin/pack-objects.c:1034
 #, c-format
 msgid "expected object at offset %<PRIuMAX> in pack %s"
 msgstr ""
 
-#: builtin/pack-objects.c:1160
+#: builtin/pack-objects.c:1158
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr ""
 
-#: builtin/pack-objects.c:1173
+#: builtin/pack-objects.c:1171
 msgid "Writing objects"
 msgstr ""
 
-#: builtin/pack-objects.c:1235 builtin/update-index.c:90
+#: builtin/pack-objects.c:1243 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr ""
 
-#: builtin/pack-objects.c:1268
+#: builtin/pack-objects.c:1276
 msgid "failed to write bitmap index"
 msgstr ""
 
-#: builtin/pack-objects.c:1294
+#: builtin/pack-objects.c:1302
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr ""
 
-#: builtin/pack-objects.c:1536
+#: builtin/pack-objects.c:1544
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr ""
 
-#: builtin/pack-objects.c:1984
+#: builtin/pack-objects.c:1992
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr ""
 
-#: builtin/pack-objects.c:1993
+#: builtin/pack-objects.c:2001
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr ""
 
-#: builtin/pack-objects.c:2274
+#: builtin/pack-objects.c:2282
 msgid "Counting objects"
 msgstr ""
 
-#: builtin/pack-objects.c:2439
+#: builtin/pack-objects.c:2447
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr ""
 
-#: builtin/pack-objects.c:2509 builtin/pack-objects.c:2525
-#: builtin/pack-objects.c:2535
+#: builtin/pack-objects.c:2517 builtin/pack-objects.c:2533
+#: builtin/pack-objects.c:2543
 #, c-format
 msgid "object %s cannot be read"
 msgstr ""
 
-#: builtin/pack-objects.c:2512 builtin/pack-objects.c:2539
+#: builtin/pack-objects.c:2520 builtin/pack-objects.c:2547
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr ""
 
-#: builtin/pack-objects.c:2549
+#: builtin/pack-objects.c:2557
 msgid "suboptimal pack - out of memory"
 msgstr ""
 
-#: builtin/pack-objects.c:2864
+#: builtin/pack-objects.c:2872
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr ""
 
-#: builtin/pack-objects.c:3003
+#: builtin/pack-objects.c:3011
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr ""
 
-#: builtin/pack-objects.c:3089
+#: builtin/pack-objects.c:3097
 msgid "Compressing objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3095
+#: builtin/pack-objects.c:3103
 msgid "inconsistency with delta count"
 msgstr ""
 
-#: builtin/pack-objects.c:3174
+#: builtin/pack-objects.c:3182
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
 "hash> <uri>' (got '%s')"
 msgstr ""
 
-#: builtin/pack-objects.c:3177
+#: builtin/pack-objects.c:3185
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
 msgstr ""
 
-#: builtin/pack-objects.c:3212
+#: builtin/pack-objects.c:3220
 #, c-format
 msgid "could not get type of object %s in pack %s"
 msgstr ""
 
-#: builtin/pack-objects.c:3340 builtin/pack-objects.c:3351
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3348 builtin/pack-objects.c:3359
+#: builtin/pack-objects.c:3373
 #, c-format
 msgid "could not find pack '%s'"
 msgstr ""
 
-#: builtin/pack-objects.c:3408
+#: builtin/pack-objects.c:3416
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
 " %s"
 msgstr ""
 
-#: builtin/pack-objects.c:3414
+#: builtin/pack-objects.c:3422
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
 " %s"
 msgstr ""
 
-#: builtin/pack-objects.c:3507
-msgid "invalid value for --missing"
-msgstr ""
-
-#: builtin/pack-objects.c:3532 builtin/pack-objects.c:3619
+#: builtin/pack-objects.c:3540 builtin/pack-objects.c:3627
 msgid "cannot open pack index"
 msgstr ""
 
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3549
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr ""
 
-#: builtin/pack-objects.c:3627
+#: builtin/pack-objects.c:3635
 msgid "unable to force loose object"
 msgstr ""
 
-#: builtin/pack-objects.c:3757
+#: builtin/pack-objects.c:3763
 #, c-format
 msgid "not a rev '%s'"
 msgstr ""
 
-#: builtin/pack-objects.c:3760 builtin/rev-parse.c:1061
+#: builtin/pack-objects.c:3766 builtin/rev-parse.c:1061
 #, c-format
 msgid "bad revision '%s'"
 msgstr ""
 
-#: builtin/pack-objects.c:3788
+#: builtin/pack-objects.c:3794
 msgid "unable to add recent objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3841
+#: builtin/pack-objects.c:3847
 #, c-format
 msgid "unsupported index version %s"
 msgstr ""
 
-#: builtin/pack-objects.c:3845
+#: builtin/pack-objects.c:3851
 #, c-format
 msgid "bad index version '%s'"
 msgstr ""
 
-#: builtin/pack-objects.c:3884
+#: builtin/pack-objects.c:3907
 msgid "<version>[,<offset>]"
 msgstr ""
 
-#: builtin/pack-objects.c:3885
+#: builtin/pack-objects.c:3908
 msgid "write the pack index file in the specified idx format version"
 msgstr ""
 
-#: builtin/pack-objects.c:3888
+#: builtin/pack-objects.c:3911
 msgid "maximum size of each output pack file"
 msgstr ""
 
-#: builtin/pack-objects.c:3890
+#: builtin/pack-objects.c:3913
 msgid "ignore borrowed objects from alternate object store"
 msgstr ""
 
-#: builtin/pack-objects.c:3892
+#: builtin/pack-objects.c:3915
 msgid "ignore packed objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3894
+#: builtin/pack-objects.c:3917
 msgid "limit pack window by objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3896
+#: builtin/pack-objects.c:3919
 msgid "limit pack window by memory in addition to object limit"
 msgstr ""
 
-#: builtin/pack-objects.c:3898
+#: builtin/pack-objects.c:3921
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr ""
 
-#: builtin/pack-objects.c:3900
+#: builtin/pack-objects.c:3923
 msgid "reuse existing deltas"
 msgstr ""
 
-#: builtin/pack-objects.c:3902
+#: builtin/pack-objects.c:3925
 msgid "reuse existing objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3904
+#: builtin/pack-objects.c:3927
 msgid "use OFS_DELTA objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3906
+#: builtin/pack-objects.c:3929
 msgid "use threads when searching for best delta matches"
 msgstr ""
 
-#: builtin/pack-objects.c:3908
+#: builtin/pack-objects.c:3931
 msgid "do not create an empty pack output"
 msgstr ""
 
-#: builtin/pack-objects.c:3910
+#: builtin/pack-objects.c:3933
 msgid "read revision arguments from standard input"
 msgstr ""
 
-#: builtin/pack-objects.c:3912
+#: builtin/pack-objects.c:3935
 msgid "limit the objects to those that are not yet packed"
 msgstr ""
 
-#: builtin/pack-objects.c:3915
+#: builtin/pack-objects.c:3938
 msgid "include objects reachable from any reference"
 msgstr ""
 
-#: builtin/pack-objects.c:3918
+#: builtin/pack-objects.c:3941
 msgid "include objects referred by reflog entries"
 msgstr ""
 
-#: builtin/pack-objects.c:3921
+#: builtin/pack-objects.c:3944
 msgid "include objects referred to by the index"
 msgstr ""
 
-#: builtin/pack-objects.c:3924
+#: builtin/pack-objects.c:3947
 msgid "read packs from stdin"
 msgstr ""
 
-#: builtin/pack-objects.c:3926
+#: builtin/pack-objects.c:3949
 msgid "output pack to stdout"
 msgstr ""
 
-#: builtin/pack-objects.c:3928
+#: builtin/pack-objects.c:3951
 msgid "include tag objects that refer to objects to be packed"
 msgstr ""
 
-#: builtin/pack-objects.c:3930
+#: builtin/pack-objects.c:3953
 msgid "keep unreachable objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3932
+#: builtin/pack-objects.c:3955
 msgid "pack loose unreachable objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3934
+#: builtin/pack-objects.c:3957
 msgid "unpack unreachable objects newer than <time>"
 msgstr ""
 
-#: builtin/pack-objects.c:3937
+#: builtin/pack-objects.c:3960
 msgid "use the sparse reachability algorithm"
 msgstr ""
 
-#: builtin/pack-objects.c:3939
+#: builtin/pack-objects.c:3962
 msgid "create thin packs"
 msgstr ""
 
-#: builtin/pack-objects.c:3941
+#: builtin/pack-objects.c:3964
 msgid "create packs suitable for shallow fetches"
 msgstr ""
 
-#: builtin/pack-objects.c:3943
+#: builtin/pack-objects.c:3966
 msgid "ignore packs that have companion .keep file"
 msgstr ""
 
-#: builtin/pack-objects.c:3945
+#: builtin/pack-objects.c:3968
 msgid "ignore this pack"
 msgstr ""
 
-#: builtin/pack-objects.c:3947
+#: builtin/pack-objects.c:3970
 msgid "pack compression level"
 msgstr ""
 
-#: builtin/pack-objects.c:3949
+#: builtin/pack-objects.c:3972
 msgid "do not hide commits by grafts"
 msgstr ""
 
-#: builtin/pack-objects.c:3951
+#: builtin/pack-objects.c:3974
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3953
+#: builtin/pack-objects.c:3976
 msgid "write a bitmap index together with the pack index"
 msgstr ""
 
-#: builtin/pack-objects.c:3957
+#: builtin/pack-objects.c:3980
 msgid "write a bitmap index if possible"
 msgstr ""
 
-#: builtin/pack-objects.c:3961
+#: builtin/pack-objects.c:3984
 msgid "handling for missing objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3964
+#: builtin/pack-objects.c:3987
 msgid "do not pack objects in promisor packfiles"
 msgstr ""
 
-#: builtin/pack-objects.c:3966
+#: builtin/pack-objects.c:3989
 msgid "respect islands during delta compression"
 msgstr ""
 
-#: builtin/pack-objects.c:3968
+#: builtin/pack-objects.c:3991
 msgid "protocol"
 msgstr ""
 
-#: builtin/pack-objects.c:3969
+#: builtin/pack-objects.c:3992
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr ""
 
-#: builtin/pack-objects.c:4002
+#: builtin/pack-objects.c:4027
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr ""
 
-#: builtin/pack-objects.c:4007
+#: builtin/pack-objects.c:4032
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr ""
 
-#: builtin/pack-objects.c:4063
+#: builtin/pack-objects.c:4088
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 
-#: builtin/pack-objects.c:4065
+#: builtin/pack-objects.c:4090
 msgid "minimum pack size limit is 1 MiB"
 msgstr ""
 
-#: builtin/pack-objects.c:4070
+#: builtin/pack-objects.c:4095
 msgid "--thin cannot be used to build an indexable pack"
 msgstr ""
 
-#: builtin/pack-objects.c:4079
+#: builtin/pack-objects.c:4104
 msgid "cannot use --filter without --stdout"
 msgstr ""
 
-#: builtin/pack-objects.c:4081
+#: builtin/pack-objects.c:4106
 msgid "cannot use --filter with --stdin-packs"
 msgstr ""
 
-#: builtin/pack-objects.c:4085
+#: builtin/pack-objects.c:4110
 msgid "cannot use internal rev list with --stdin-packs"
 msgstr ""
 
-#: builtin/pack-objects.c:4144
+#: builtin/pack-objects.c:4169
 msgid "Enumerating objects"
 msgstr ""
 
-#: builtin/pack-objects.c:4180
+#: builtin/pack-objects.c:4210
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -18882,10 +19507,6 @@ msgstr ""
 msgid "prune loose refs (default)"
 msgstr ""
 
-#: builtin/prune-packed.c:6
-msgid "git prune-packed [-n | --dry-run] [-q | --quiet]"
-msgstr ""
-
 #: builtin/prune.c:14
 msgid "git prune [-n] [-v] [--progress] [--expire <time>] [--] [<head>...]"
 msgstr ""
@@ -18906,11 +19527,6 @@ msgstr ""
 msgid "cannot prune in a precious-objects repo"
 msgstr ""
 
-#: builtin/pull.c:45 builtin/pull.c:47
-#, c-format
-msgid "Invalid value for %s: %s"
-msgstr "Nilai tidak valid untuk %s: %s"
-
 #: builtin/pull.c:67
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
 msgstr "git pull [<opsi>] [<repositori> [<spek referensi>]]"
@@ -18935,7 +19551,7 @@ msgstr "perbolehkan maju cepat"
 msgid "control use of pre-merge-commit and commit-msg hooks"
 msgstr "kontrol penggunaan kail pre-merge-commit dan commit-msg"
 
-#: builtin/pull.c:171 parse-options.h:340
+#: builtin/pull.c:171 parse-options.h:371
 msgid "automatically stash/stash pop before and after"
 msgstr "stash/stash pop otomatis sebelum dan sesudah"
 
@@ -18951,11 +19567,6 @@ msgstr "paksa timpa cabang lokal"
 msgid "number of submodules pulled in parallel"
 msgstr "nomor submodul ditarik dalam paralel"
 
-#: builtin/pull.c:321
-#, c-format
-msgid "Invalid value for pull.ff: %s"
-msgstr "Nilai tidak valid untuk pull.ff: %s"
-
 #: builtin/pull.c:449
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
@@ -18990,7 +19601,7 @@ msgstr ""
 "satu cabang. Oleh karena ini bukan remote terkonfigurasi asali untuk\n"
 "cabang Anda saat ini, Anda harus sebutkan satu cabang pada baris perintah."
 
-#: builtin/pull.c:460 builtin/rebase.c:951
+#: builtin/pull.c:460 builtin/rebase.c:978
 msgid "You are not currently on a branch."
 msgstr "Anda tidak berada pada sebuah cabang."
 
@@ -19007,16 +19618,16 @@ msgid "See git-pull(1) for details."
 msgstr "Lihat git-pull(1) untuk selengkapnya."
 
 #: builtin/pull.c:467 builtin/pull.c:473 builtin/pull.c:482
-#: builtin/rebase.c:957
+#: builtin/rebase.c:984
 msgid "<remote>"
 msgstr "<remote>"
 
 #: builtin/pull.c:467 builtin/pull.c:482 builtin/pull.c:487
-#: contrib/scalar/scalar.c:375
+#: contrib/scalar/scalar.c:374
 msgid "<branch>"
 msgstr "<cabang>"
 
-#: builtin/pull.c:475 builtin/rebase.c:949
+#: builtin/pull.c:475 builtin/rebase.c:976
 msgid "There is no tracking information for the current branch."
 msgstr "Tidak ada informasi pelacakan untuk cabang saat ini."
 
@@ -19076,21 +19687,21 @@ msgstr ""
 "--rebase, --no-rebase, atau --ff-only pada baris perintah untuk menimpa\n"
 "asali terkonfigurasi untuk setiap invokasi.\n"
 
-#: builtin/pull.c:1046
+#: builtin/pull.c:1047
 msgid "Updating an unborn branch with changes added to the index."
 msgstr ""
 "Memperbarui cabang yang belum lahir dengan perubahan yang ditambahkan ke "
 "indeks."
 
-#: builtin/pull.c:1050
+#: builtin/pull.c:1051
 msgid "pull with rebase"
 msgstr "tarik dengan pendasaran ulang"
 
-#: builtin/pull.c:1051
+#: builtin/pull.c:1052
 msgid "please commit or stash them."
 msgstr "mohon komit atau stase itu."
 
-#: builtin/pull.c:1076
+#: builtin/pull.c:1077
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -19100,7 +19711,7 @@ msgstr ""
 "fetch memperbarui kepala cabang saat ini.\n"
 "memajukan-cepat pohon kerja Anda dari komit %s."
 
-#: builtin/pull.c:1082
+#: builtin/pull.c:1083
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -19117,23 +19728,23 @@ msgstr ""
 "$ git reset --hard\n"
 "untuk memulihkan."
 
-#: builtin/pull.c:1097
+#: builtin/pull.c:1098
 msgid "Cannot merge multiple branches into empty head."
 msgstr "Tidak dapat menggabungkan banyak cabang ke kepala kosong."
 
-#: builtin/pull.c:1102
+#: builtin/pull.c:1103
 msgid "Cannot rebase onto multiple branches."
 msgstr "Tidak dapat mendasarkan ulang pada banyak cabang."
 
-#: builtin/pull.c:1104
+#: builtin/pull.c:1105
 msgid "Cannot fast-forward to multiple branches."
 msgstr "Tidak dapat maju cepat ke banyak cabang."
 
-#: builtin/pull.c:1119
+#: builtin/pull.c:1120
 msgid "Need to specify how to reconcile divergent branches."
 msgstr "Perlu sebutkan cara merujukkan cabang yang berlainan."
 
-#: builtin/pull.c:1133
+#: builtin/pull.c:1134
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 "tidak dapat mendasarkan ulang dengan modifikasi submodul yang terekam lokal."
@@ -19309,7 +19920,7 @@ msgstr "Mendorong ke %s\n"
 msgid "failed to push some refs to '%s'"
 msgstr "gagal dorong beberapa referensi ke '%s'"
 
-#: builtin/push.c:544 builtin/submodule--helper.c:3259
+#: builtin/push.c:544 builtin/submodule--helper.c:3377
 msgid "repository"
 msgstr "repositori"
 
@@ -19550,11 +20161,11 @@ msgstr "nirkutukan unpack-trees"
 msgid "suppress feedback messages"
 msgstr "matikan pesan umpan balik"
 
-#: builtin/read-tree.c:183
+#: builtin/read-tree.c:190
 msgid "You need to resolve your current index first"
 msgstr "Anda perlu menguraikan indeks Anda saat ini dulu"
 
-#: builtin/rebase.c:35
+#: builtin/rebase.c:36
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
 "[<upstream> [<branch>]]"
@@ -19562,55 +20173,51 @@ msgstr ""
 "git rebase [-i] [opsi] [--exec <perintah>] [--onto <basis baru> | --keep-"
 "base][<hulu> [<cabang>]]"
 
-#: builtin/rebase.c:37
+#: builtin/rebase.c:38
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]"
 msgstr ""
 "git rebase [-i] [opsi] [--exec <perintah>] [--onto <basis baru>] --root "
 "[<cabang>]"
 
-#: builtin/rebase.c:39
-msgid "git rebase --continue | --abort | --skip | --edit-todo"
-msgstr "git rebase --continue | --abort | --skip | --edit-todo"
-
-#: builtin/rebase.c:230
+#: builtin/rebase.c:231
 #, c-format
 msgid "could not create temporary %s"
 msgstr "tidak dapat membuat %s sementara"
 
-#: builtin/rebase.c:236
+#: builtin/rebase.c:237
 msgid "could not mark as interactive"
 msgstr "tidak dapat menandai sebagai interaktif"
 
-#: builtin/rebase.c:289
+#: builtin/rebase.c:290
 msgid "could not generate todo list"
 msgstr "tidak dapat membuat daftar todo"
 
-#: builtin/rebase.c:331
+#: builtin/rebase.c:332
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "basis komit harus diberikan dengan --upstream atau --onto"
 
-#: builtin/rebase.c:390
+#: builtin/rebase.c:391
 #, c-format
 msgid "%s requires the merge backend"
 msgstr "%s butuh tulang belakang penggabungan"
 
-#: builtin/rebase.c:432
+#: builtin/rebase.c:433
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "tidak dapat mendapatkan 'ke': '%s'"
 
-#: builtin/rebase.c:449
+#: builtin/rebase.c:450
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "orig-head tidak valid: '%s'"
 
-#: builtin/rebase.c:474
+#: builtin/rebase.c:475
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "abaikan allow_rerere_autoupdate yang tak valid: '%s'"
 
-#: builtin/rebase.c:597
+#: builtin/rebase.c:600
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -19625,7 +20232,7 @@ msgstr ""
 "Untuk membatalkan dan kembali ke kondisi sebelum \"git rebase\",jalankan "
 "\"git rebase --abort\"."
 
-#: builtin/rebase.c:680
+#: builtin/rebase.c:685
 #, c-format
 msgid ""
 "\n"
@@ -19644,7 +20251,12 @@ msgstr ""
 "\n"
 "Hasilnya git tidak dapat mendasarkan ulang itu."
 
-#: builtin/rebase.c:925
+#: builtin/rebase.c:836
+#, c-format
+msgid "could not switch to %s"
+msgstr "tidak dapat mengganti ke %s"
+
+#: builtin/rebase.c:952
 #, c-format
 msgid ""
 "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
@@ -19653,7 +20265,7 @@ msgstr ""
 "tipe kosong tak dikenali '%s'; nilai yang valid adalah \"drop\", \"keep\", "
 "dan \"ask\"."
 
-#: builtin/rebase.c:943
+#: builtin/rebase.c:970
 #, c-format
 msgid ""
 "%s\n"
@@ -19670,7 +20282,7 @@ msgstr ""
 "    git rebase '<cabang>'.\n"
 "\n"
 
-#: builtin/rebase.c:959
+#: builtin/rebase.c:986
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -19683,181 +20295,181 @@ msgstr ""
 "    git branch --set-upstream-to=%s/<cabang> %s\n"
 "\n"
 
-#: builtin/rebase.c:989
+#: builtin/rebase.c:1016
 msgid "exec commands cannot contain newlines"
 msgstr "perintah exec tidak dapat berisi baris baru"
 
-#: builtin/rebase.c:993
+#: builtin/rebase.c:1020
 msgid "empty exec command"
 msgstr "perintah exec kosong"
 
-#: builtin/rebase.c:1023
+#: builtin/rebase.c:1051
 msgid "rebase onto given branch instead of upstream"
 msgstr "dasarkan ulang kepada cabang yang diberikan daripada hulu"
 
-#: builtin/rebase.c:1025
+#: builtin/rebase.c:1053
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr "gunakan merge-base hulu dan cabang sebagai dasar saat ini"
 
-#: builtin/rebase.c:1027
+#: builtin/rebase.c:1055
 msgid "allow pre-rebase hook to run"
 msgstr "perbolehkan kail pre-rebase untuk dijalankan"
 
-#: builtin/rebase.c:1029
+#: builtin/rebase.c:1057
 msgid "be quiet. implies --no-stat"
 msgstr "diam. menyiratkan --no-stat"
 
-#: builtin/rebase.c:1032
+#: builtin/rebase.c:1060
 msgid "display a diffstat of what changed upstream"
 msgstr "perlihatkan diffstat apa yang berubah di hulu"
 
-#: builtin/rebase.c:1035
+#: builtin/rebase.c:1063
 msgid "do not show diffstat of what changed upstream"
 msgstr "jangan perlihatkan diffstat apa yang berubah di hulu"
 
-#: builtin/rebase.c:1038
+#: builtin/rebase.c:1066
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "tambahkan trailer Signed-off-by ke setiap komit"
 
-#: builtin/rebase.c:1041
+#: builtin/rebase.c:1069
 msgid "make committer date match author date"
 msgstr "jadikan tanggal pengkomit sama dengan tanggal pengarang"
 
-#: builtin/rebase.c:1043
+#: builtin/rebase.c:1071
 msgid "ignore author date and use current date"
 msgstr "abaikan tanggal pengarang dan gunakan tanggal saat ini"
 
-#: builtin/rebase.c:1045
+#: builtin/rebase.c:1073
 msgid "synonym of --reset-author-date"
 msgstr "sinonim dari --reset-author-date"
 
-#: builtin/rebase.c:1047 builtin/rebase.c:1051
+#: builtin/rebase.c:1075 builtin/rebase.c:1079
 msgid "passed to 'git apply'"
 msgstr "lewatkan ke 'git apply'"
 
-#: builtin/rebase.c:1049
+#: builtin/rebase.c:1077
 msgid "ignore changes in whitespace"
 msgstr "abaikan perubahan spasi"
 
-#: builtin/rebase.c:1053 builtin/rebase.c:1056
+#: builtin/rebase.c:1081 builtin/rebase.c:1084
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "petik ceri semua komit, bahkan jika tak berubah"
 
-#: builtin/rebase.c:1058
+#: builtin/rebase.c:1086
 msgid "continue"
 msgstr "lanjutkan"
 
-#: builtin/rebase.c:1061
+#: builtin/rebase.c:1089
 msgid "skip current patch and continue"
 msgstr "lewatkan tambalan saat ini dan lanjutkan"
 
-#: builtin/rebase.c:1063
+#: builtin/rebase.c:1091
 msgid "abort and check out the original branch"
 msgstr "hentikan dan check out cabang asli"
 
-#: builtin/rebase.c:1066
+#: builtin/rebase.c:1094
 msgid "abort but keep HEAD where it is"
 msgstr "hentikan tapi simpan HEAD dimana itu berada"
 
-#: builtin/rebase.c:1067
+#: builtin/rebase.c:1095
 msgid "edit the todo list during an interactive rebase"
 msgstr "sunting daftar todo selama pendasaran ulang interaktif"
 
-#: builtin/rebase.c:1070
+#: builtin/rebase.c:1098
 msgid "show the patch file being applied or merged"
 msgstr "perlihatkan berkas tambalan yang sedang diterapkan atau digabungkan"
 
-#: builtin/rebase.c:1073
+#: builtin/rebase.c:1101
 msgid "use apply strategies to rebase"
 msgstr "gunakan strategi penerapan ke pendasaran ulang"
 
-#: builtin/rebase.c:1077
+#: builtin/rebase.c:1105
 msgid "use merging strategies to rebase"
 msgstr "gunakan strategi penggabungan ke pendasaran ulang"
 
-#: builtin/rebase.c:1081
+#: builtin/rebase.c:1109
 msgid "let the user edit the list of commits to rebase"
 msgstr "biarkan pengguna menyunting daftar komit untuk didasarkan ulang"
 
-#: builtin/rebase.c:1085
+#: builtin/rebase.c:1113
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(USANG) coba buat ulang penggabungan daripada abaikan itu"
 
-#: builtin/rebase.c:1090
+#: builtin/rebase.c:1118
 msgid "how to handle commits that become empty"
 msgstr "bagaimana cara menangani komit yang menjadi kosong"
 
-#: builtin/rebase.c:1093
+#: builtin/rebase.c:1121
 msgid "keep commits which start empty"
 msgstr "simpan komit yang dimulai kosong"
 
-#: builtin/rebase.c:1097
+#: builtin/rebase.c:1125
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "pindahakan komit yang diawali dengan squash!/fixup! di bawah -i"
 
-#: builtin/rebase.c:1104
+#: builtin/rebase.c:1132
 msgid "add exec lines after each commit of the editable list"
 msgstr ""
 "tambahkan baris exec setelah setiap komit dari daftar yang bisa disunting"
 
-#: builtin/rebase.c:1108
+#: builtin/rebase.c:1136
 msgid "allow rebasing commits with empty messages"
 msgstr "perbolehkan mendasarkan ulang komit dengan pesan kosong"
 
-#: builtin/rebase.c:1112
+#: builtin/rebase.c:1140
 msgid "try to rebase merges instead of skipping them"
 msgstr "coba mendasarkan ulang penggabungan daripada melewatkan itu"
 
-#: builtin/rebase.c:1115
+#: builtin/rebase.c:1143
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "gunakan 'merge-base --fork-point' untuk menyaring hulu"
 
-#: builtin/rebase.c:1117
+#: builtin/rebase.c:1145
 msgid "use the given merge strategy"
 msgstr "gunakan strategi penggabungan yang diberikan"
 
-#: builtin/rebase.c:1119 builtin/revert.c:115
+#: builtin/rebase.c:1147 builtin/revert.c:115
 msgid "option"
 msgstr "opsi"
 
-#: builtin/rebase.c:1120
+#: builtin/rebase.c:1148
 msgid "pass the argument through to the merge strategy"
 msgstr "lewatkan argumen ke strategi penggabungan"
 
-#: builtin/rebase.c:1123
+#: builtin/rebase.c:1151
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "dasarkan ulang semua komit yang bisa dicapai hingga ke akar"
 
-#: builtin/rebase.c:1126
+#: builtin/rebase.c:1154
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "jadwal ulang otomatis `exec` apa saja yang gagal"
 
-#: builtin/rebase.c:1128
+#: builtin/rebase.c:1156
 msgid "apply all changes, even those already present upstream"
 msgstr "terapkan semua perubahan, bahkan yang sudah ada di hulu"
 
-#: builtin/rebase.c:1149
+#: builtin/rebase.c:1177
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "Sepertinya 'git am' sedang berjalan. Tidak dapat mendasarkan ulang"
 
-#: builtin/rebase.c:1180
+#: builtin/rebase.c:1208
 msgid "--preserve-merges was replaced by --rebase-merges"
 msgstr "--preserve-merges digantikan oleh --rebase-merges"
 
-#: builtin/rebase.c:1202
+#: builtin/rebase.c:1230
 msgid "No rebase in progress?"
 msgstr "Tidak ada pendasaran ulang yang sedang berjalan?"
 
-#: builtin/rebase.c:1206
+#: builtin/rebase.c:1234
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr ""
 "Aksi --edit-todo hanya dapat digunakan selama pendasaran ulang interaktif."
 
-#: builtin/rebase.c:1229 t/helper/test-fast-rebase.c:122
+#: builtin/rebase.c:1257 t/helper/test-fast-rebase.c:122
 msgid "Cannot read HEAD"
 msgstr "Tidak dapat membaca HEAD"
 
-#: builtin/rebase.c:1241
+#: builtin/rebase.c:1269
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -19865,16 +20477,16 @@ msgstr ""
 "Anda harus menyunting semua konflik penggabungan lalu\n"
 "tandai itu sebagai terselesaikan menggunakan git add"
 
-#: builtin/rebase.c:1260
+#: builtin/rebase.c:1287
 msgid "could not discard worktree changes"
 msgstr "tidak dapat menyingkirkan perubahan pohon kerja"
 
-#: builtin/rebase.c:1279
+#: builtin/rebase.c:1308
 #, c-format
 msgid "could not move back to %s"
 msgstr "tidak dapt memindahkan kembali ke %s"
 
-#: builtin/rebase.c:1325
+#: builtin/rebase.c:1354
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -19895,124 +20507,119 @@ msgstr ""
 "dan jalankan saya lagi. Saya berhenti seandainya Anda masih punya\n"
 "sesuatu yang berharga di sana.\n"
 
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1382
 msgid "switch `C' expects a numerical value"
 msgstr "tombol `C' harap nilai numerik"
 
-#: builtin/rebase.c:1395
+#: builtin/rebase.c:1424
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Mode tidak dikenal: %s"
 
-#: builtin/rebase.c:1434
+#: builtin/rebase.c:1463
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy butuh --merge atau --interactive"
 
-#: builtin/rebase.c:1463
+#: builtin/rebase.c:1492
 msgid "apply options and merge options cannot be used together"
 msgstr "opsi apply dan opsi merge tidak dapat digunakan bersamaan"
 
-#: builtin/rebase.c:1476
+#: builtin/rebase.c:1505
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "Tulang belakang pendasaran ulang tidak dikenal: %s"
 
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1534
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec butuh --exec atau --interactive"
 
-#: builtin/rebase.c:1536
+#: builtin/rebase.c:1565
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "hulu tidak valid '%s'"
 
-#: builtin/rebase.c:1542
+#: builtin/rebase.c:1571
 msgid "Could not create new root commit"
 msgstr "tidak dapat membuat komit akar baru"
 
-#: builtin/rebase.c:1568
+#: builtin/rebase.c:1597
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr "'%s': butuh tepatnya satu dasar penggabungan dengan cabang"
 
-#: builtin/rebase.c:1571
+#: builtin/rebase.c:1600
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "'%s': butuh tepatnya satu dasar penggabungan"
 
-#: builtin/rebase.c:1580
+#: builtin/rebase.c:1609
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "Tidak menunjuk pada komit yang valid '%s'"
 
-#: builtin/rebase.c:1607
+#: builtin/rebase.c:1636
 #, c-format
 msgid "no such branch/commit '%s'"
 msgstr "tidak ada cabang/komit seperti '%s'"
 
-#: builtin/rebase.c:1618 builtin/submodule--helper.c:39
-#: builtin/submodule--helper.c:2659
+#: builtin/rebase.c:1647 builtin/submodule--helper.c:43
+#: builtin/submodule--helper.c:2477
 #, c-format
 msgid "No such ref: %s"
 msgstr "Tidak ada referensi seperti: %s"
 
-#: builtin/rebase.c:1629
+#: builtin/rebase.c:1658
 msgid "Could not resolve HEAD to a revision"
 msgstr "Tidak dapat menguraikan HEAD ke sebuah revisi"
 
-#: builtin/rebase.c:1650
+#: builtin/rebase.c:1679
 msgid "Please commit or stash them."
 msgstr "Mohon komit atau stase itu."
 
-#: builtin/rebase.c:1686
-#, c-format
-msgid "could not switch to %s"
-msgstr "tidak dapat mengganti ke %s"
-
-#: builtin/rebase.c:1697
+#: builtin/rebase.c:1714
 msgid "HEAD is up to date."
 msgstr "HEAD terbaru."
 
-#: builtin/rebase.c:1699
+#: builtin/rebase.c:1716
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "Cabang saat ini %s terbaru.\n"
 
-#: builtin/rebase.c:1707
+#: builtin/rebase.c:1724
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD terbaru, pendasaran ulang dipaksa."
 
-#: builtin/rebase.c:1709
+#: builtin/rebase.c:1726
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "Cabang saat ini %s terbaru, pendasaran ulang dipaksa.\n"
 
-#: builtin/rebase.c:1717
+#: builtin/rebase.c:1734
 msgid "The pre-rebase hook refused to rebase."
 msgstr "Kail pre-rebase menolak mendasarkan ulang."
 
-#: builtin/rebase.c:1724
+#: builtin/rebase.c:1741
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Perubahan unuk %s:\n"
 
-#: builtin/rebase.c:1727
+#: builtin/rebase.c:1744
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Perubahan dari %s ke %s:\n"
 
-#: builtin/rebase.c:1752
+#: builtin/rebase.c:1769
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "Pertama, memutar ulang kepala untuk memainkan ulang karya Anda diatas "
 "itu...\n"
 
-#: builtin/rebase.c:1761
+#: builtin/rebase.c:1781
 msgid "Could not detach HEAD"
 msgstr "Tidak dapat melepas HEAD"
 
-#: builtin/rebase.c:1770
+#: builtin/rebase.c:1790
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Maju-cepat %s ke %s.\n"
@@ -20021,7 +20628,7 @@ msgstr "Maju-cepat %s ke %s.\n"
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack <direktori git>"
 
-#: builtin/receive-pack.c:1275
+#: builtin/receive-pack.c:1263
 msgid ""
 "By default, updating the current branch in a non-bare repository\n"
 "is denied, because it will make the index and work tree inconsistent\n"
@@ -20050,7 +20657,7 @@ msgstr ""
 "Untuk mematikan pesan ini dan tetap menjaga kebiasaan asali, setel\n"
 "variabel konfigurasi 'receive.denyCurrentBranch' ke 'refuse'."
 
-#: builtin/receive-pack.c:1295
+#: builtin/receive-pack.c:1283
 msgid ""
 "By default, deleting the current branch is denied, because the next\n"
 "'git clone' won't result in any file checked out, causing confusion.\n"
@@ -20070,79 +20677,112 @@ msgstr ""
 "\n"
 "Untuk mematikan pesan ini, Anda dapat menyetelnya ke 'refuse'."
 
-#: builtin/receive-pack.c:2474
+#: builtin/receive-pack.c:2476
 msgid "quiet"
 msgstr "diam"
 
-#: builtin/receive-pack.c:2489
+#: builtin/receive-pack.c:2491
 msgid "you must specify a directory"
 msgstr "Anda harus menyebutkan sebuah direktori"
 
-#: builtin/reflog.c:17
+#: builtin/reflog.c:9
+msgid "git reflog [show] [<log-options>] [<ref>]"
+msgstr "git remote [show] [<opsi log>] [<referensi>]"
+
+#: builtin/reflog.c:12
 msgid ""
-"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<refs>..."
+"git reflog expire [--expire=<time>] [--expire-unreachable=<time>]\n"
+"                  [--rewrite] [--updateref] [--stale-fix]\n"
+"                  [--dry-run | -n] [--verbose] [--all [--single-worktree] | "
+"<refs>...]"
 msgstr ""
-"git reflog expire [--expire=<waktu>] [--expire-unreachable=<waktu>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<referensi>..."
+"git reflog expire [--expire=<waktu>] [--expire-unreachable=<waktu>]\n"
+"                  [--rewrite] [--updateref] [--stale-fix]\n"
+"                  [--dry-run | -n] [--verbose] [--all [--single-worktree] | "
+"<referensi>...]"
 
-#: builtin/reflog.c:22
+#: builtin/reflog.c:17
 msgid ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] "
-"<refs>..."
+"git reflog delete [--rewrite] [--updateref]\n"
+"                  [--dry-run | -n] [--verbose] <ref>@{<specifier>}..."
 msgstr ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] "
-"<referensi>..."
+"git reflog delete [--rewrite] [--updateref]\n"
+"                  [--dry-run | -n] [--verbose] <referensi>@{<penyebut>}..."
 
-#: builtin/reflog.c:25
+#: builtin/reflog.c:21
 msgid "git reflog exists <ref>"
 msgstr "git reflog exists <referensi>"
 
-#: builtin/reflog.c:585 builtin/reflog.c:590
+#: builtin/reflog.c:197 builtin/reflog.c:211
 #, c-format
-msgid "'%s' is not a valid timestamp"
-msgstr "'%s' bukan stempel waktu valid"
+msgid "invalid timestamp '%s' given to '--%s'"
+msgstr "stempel waktu tidak valid '%s' diberikan ke '--%s'"
+
+#: builtin/reflog.c:240 builtin/reflog.c:359
+msgid "do not actually prune any entries"
+msgstr "jangan benar-benar pangkas entri apapun"
 
-#: builtin/reflog.c:631
+#: builtin/reflog.c:243 builtin/reflog.c:362
+msgid ""
+"rewrite the old SHA1 with the new SHA1 of the entry that now precedes it"
+msgstr "tulis ulang SHA1 lama dengan SHA1 baru dari entri yang mendahuluinya"
+
+#: builtin/reflog.c:246 builtin/reflog.c:365
+msgid "update the reference to the value of the top reflog entry"
+msgstr "perbarui referensi ke nilai dari entri log referensi atas"
+
+#: builtin/reflog.c:248 builtin/reflog.c:367
+msgid "print extra information on screen"
+msgstr "cetak informasi tambahan pada layar"
+
+#: builtin/reflog.c:249 builtin/reflog.c:253
+msgid "timestamp"
+msgstr "stempel"
+
+#: builtin/reflog.c:250
+msgid "prune entries older than the specified time"
+msgstr "pangkas entri yang lebih tua dari waktu yang disebutkan"
+
+#: builtin/reflog.c:254
+msgid ""
+"prune entries older than <time> that are not reachable from the current tip "
+"of the branch"
+msgstr ""
+"pangkas entri yang lebih tua dari <waktu> yang tak terjangkau dari ujung "
+"cabang saat ini"
+
+#: builtin/reflog.c:258
+msgid "prune any reflog entries that point to broken commits"
+msgstr "pangkas entri reflog apapun yang menunjuk ke komit yang rusak"
+
+#: builtin/reflog.c:259
+msgid "process the reflogs of all references"
+msgstr "proses reflog semua referensi"
+
+#: builtin/reflog.c:261
+msgid "limits processing to reflogs from the current worktree only"
+msgstr "batasi pemrosesan ke hanya log referensi dari pohon kerja saat ini"
+
+#: builtin/reflog.c:294
 #, c-format
 msgid "Marking reachable objects..."
 msgstr "Menandai objek yang bisa dicapai..."
 
-#: builtin/reflog.c:675
+#: builtin/reflog.c:338
 #, c-format
 msgid "%s points nowhere!"
 msgstr "%s tidak menunjuk ke apapun!"
 
-#: builtin/reflog.c:731
+#: builtin/reflog.c:374
 msgid "no reflog specified to delete"
 msgstr "tidak ada log referensi yang disebutkan untuk dihapus"
 
-#: builtin/reflog.c:742
-#, c-format
-msgid "not a reflog: %s"
-msgstr "bukan sebuah log referensi: %s"
-
-#: builtin/reflog.c:747
-#, c-format
-msgid "no reflog for '%s'"
-msgstr "tidak ada log referensi untuk '%s'"
-
-#: builtin/reflog.c:794
+#: builtin/reflog.c:396
 #, c-format
 msgid "invalid ref format: %s"
 msgstr "format referensi tidak valid: %s"
 
-#: builtin/reflog.c:803
-msgid "git reflog [ show | expire | delete | exists ]"
-msgstr "git reflog [ show | expire | delete | exists ]"
-
-#: builtin/remote.c:17
-msgid "git remote [-v | --verbose]"
-msgstr "git remote [-v | --verbose]"
-
-#: builtin/remote.c:18
+#: builtin/remote.c:19
 msgid ""
 "git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--"
 "mirror=<fetch|push>] <name> <url>"
@@ -20150,87 +20790,87 @@ msgstr ""
 "git remote add [-t <cabang>] [-m <master>] [-f] [--tags | --no-tags] [--"
 "mirror=<fetch|push>] <nama> <url>"
 
-#: builtin/remote.c:19 builtin/remote.c:39
-msgid "git remote rename <old> <new>"
-msgstr "git remote rename <lama> <baru>"
+#: builtin/remote.c:20 builtin/remote.c:40
+msgid "git remote rename [--[no-]progress] <old> <new>"
+msgstr "git remote rename [--[no-]progress] <lama> <baru>"
 
-#: builtin/remote.c:20 builtin/remote.c:44
+#: builtin/remote.c:21 builtin/remote.c:45
 msgid "git remote remove <name>"
 msgstr "git remote remove <nama>"
 
-#: builtin/remote.c:21 builtin/remote.c:49
+#: builtin/remote.c:22 builtin/remote.c:50
 msgid "git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"
 msgstr "git remote set-head <nama> (-a | --auto | -d | --delete | <cabang>)"
 
-#: builtin/remote.c:22
+#: builtin/remote.c:23
 msgid "git remote [-v | --verbose] show [-n] <name>"
 msgstr "git remote [-v | --verbose] show [-n] <nama>"
 
-#: builtin/remote.c:23
+#: builtin/remote.c:24
 msgid "git remote prune [-n | --dry-run] <name>"
 msgstr "git remote prune [-n | --dry-run] <nama>"
 
-#: builtin/remote.c:24
+#: builtin/remote.c:25
 msgid ""
 "git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
 msgstr ""
 "git remote [-v | --verbose] update [-p | --prune] [(<grup> | <remote>)...]"
 
-#: builtin/remote.c:25
+#: builtin/remote.c:26
 msgid "git remote set-branches [--add] <name> <branch>..."
 msgstr "git remote set-branches [--add] <nama> <cabang>..."
 
-#: builtin/remote.c:26 builtin/remote.c:75
+#: builtin/remote.c:27 builtin/remote.c:76
 msgid "git remote get-url [--push] [--all] <name>"
 msgstr "git remote get-url [--push] [--all] <nama>"
 
-#: builtin/remote.c:27 builtin/remote.c:80
+#: builtin/remote.c:28 builtin/remote.c:81
 msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]"
 msgstr "git remote set-url [--push] <nama> <url baru> [<url lama>]"
 
-#: builtin/remote.c:28 builtin/remote.c:81
+#: builtin/remote.c:29 builtin/remote.c:82
 msgid "git remote set-url --add <name> <newurl>"
 msgstr "git remote set-url --add <nama> <url baru>"
 
-#: builtin/remote.c:29 builtin/remote.c:82
+#: builtin/remote.c:30 builtin/remote.c:83
 msgid "git remote set-url --delete <name> <url>"
 msgstr "git remote set-url --delete <nama> <url>"
 
-#: builtin/remote.c:34
+#: builtin/remote.c:35
 msgid "git remote add [<options>] <name> <url>"
 msgstr "git remote add [<opsi>] <nama> <url>"
 
-#: builtin/remote.c:54
+#: builtin/remote.c:55
 msgid "git remote set-branches <name> <branch>..."
 msgstr "git remote set-branches <nama> <cabang>"
 
-#: builtin/remote.c:55
+#: builtin/remote.c:56
 msgid "git remote set-branches --add <name> <branch>..."
 msgstr "git remote set-branches --add <nama> <cabang>"
 
-#: builtin/remote.c:60
+#: builtin/remote.c:61
 msgid "git remote show [<options>] <name>"
 msgstr "git remote show [<opsi>] <nama>"
 
-#: builtin/remote.c:65
+#: builtin/remote.c:66
 msgid "git remote prune [<options>] <name>"
 msgstr "git remote prune [<opsi>] <nama>"
 
-#: builtin/remote.c:70
+#: builtin/remote.c:71
 msgid "git remote update [<options>] [<group> | <remote>]..."
 msgstr "git remote update [<opsi>] [<group> | <remote>]..."
 
-#: builtin/remote.c:99
+#: builtin/remote.c:100
 #, c-format
 msgid "Updating %s"
 msgstr "Memperbarui %s"
 
-#: builtin/remote.c:101
+#: builtin/remote.c:102
 #, c-format
 msgid "Could not fetch %s"
 msgstr "Tidak dapat mengambil %s"
 
-#: builtin/remote.c:131
+#: builtin/remote.c:132
 msgid ""
 "--mirror is dangerous and deprecated; please\n"
 "\t use --mirror=fetch or --mirror=push instead"
@@ -20238,77 +20878,77 @@ msgstr ""
 "--mirror berbahaya dan usang; mohon gunakan --mirror=fetch\n"
 "\t atau --mirror=push sebagai gantinya"
 
-#: builtin/remote.c:148
+#: builtin/remote.c:149
 #, c-format
 msgid "unknown mirror argument: %s"
 msgstr "argumen mirror tidak dikenal: %s"
 
-#: builtin/remote.c:164
+#: builtin/remote.c:165
 msgid "fetch the remote branches"
 msgstr "ambil cabang remote"
 
-#: builtin/remote.c:166
+#: builtin/remote.c:167
 msgid "import all tags and associated objects when fetching"
 msgstr "impor semua tag dan objek yang terkait ketika mengambil"
 
-#: builtin/remote.c:169
+#: builtin/remote.c:170
 msgid "or do not fetch any tag at all (--no-tags)"
 msgstr "atau jangan mengambil tag apapun (--no-tags)"
 
-#: builtin/remote.c:171
+#: builtin/remote.c:172
 msgid "branch(es) to track"
 msgstr "cabang untuk dilacak"
 
-#: builtin/remote.c:172
+#: builtin/remote.c:173
 msgid "master branch"
 msgstr "cabang master"
 
-#: builtin/remote.c:174
+#: builtin/remote.c:175
 msgid "set up remote as a mirror to push to or fetch from"
 msgstr "atur remote sebagai cermin untuk didorong atau diambil"
 
-#: builtin/remote.c:186
+#: builtin/remote.c:187
 msgid "specifying a master branch makes no sense with --mirror"
 msgstr "menyebutkan cabang master tidak masuk akal dengan --mirror"
 
-#: builtin/remote.c:188
+#: builtin/remote.c:189
 msgid "specifying branches to track makes sense only with fetch mirrors"
 msgstr "menyebutkan cabang untuk dilacak hanya masuk akal dengan cermin ambil"
 
-#: builtin/remote.c:195 builtin/remote.c:705
+#: builtin/remote.c:196 builtin/remote.c:716
 #, c-format
 msgid "remote %s already exists."
 msgstr "remote %s sudah ada"
 
-#: builtin/remote.c:240
+#: builtin/remote.c:241
 #, c-format
 msgid "Could not setup master '%s'"
 msgstr "Tidak dapat mengatur master '%s'"
 
-#: builtin/remote.c:322
+#: builtin/remote.c:323
 #, c-format
 msgid "unhandled branch.%s.rebase=%s; assuming 'true'"
-msgstr ""
+msgstr "branch.%s.rebase=%s tak tertangani; diasumsikan 'true'"
 
-#: builtin/remote.c:366
+#: builtin/remote.c:367
 #, c-format
 msgid "Could not get fetch map for refspec %s"
 msgstr "Tidak dapat mendapatkan peta pengambilan untuk spek referensi %s"
 
-#: builtin/remote.c:460 builtin/remote.c:468
+#: builtin/remote.c:461 builtin/remote.c:469
 msgid "(matching)"
 msgstr "(sepadan)"
 
-#: builtin/remote.c:472
+#: builtin/remote.c:473
 msgid "(delete)"
 msgstr "(hapus)"
 
-#: builtin/remote.c:660
+#: builtin/remote.c:664
 #, c-format
 msgid "could not set '%s'"
 msgstr "tidak dapat menyetel '%s'"
 
-#: builtin/remote.c:665
+#: builtin/remote.c:669
 #, c-format
 msgid ""
 "The %s configuration remote.pushDefault in:\n"
@@ -20319,17 +20959,17 @@ msgstr ""
 "\t%s:%d\n"
 "sekarang menamai remote yang tiada '%s'"
 
-#: builtin/remote.c:696 builtin/remote.c:841 builtin/remote.c:948
+#: builtin/remote.c:707 builtin/remote.c:866 builtin/remote.c:973
 #, c-format
 msgid "No such remote: '%s'"
 msgstr "Tidak ada remote seperti: '%s'"
 
-#: builtin/remote.c:715
+#: builtin/remote.c:726
 #, c-format
 msgid "Could not rename config section '%s' to '%s'"
 msgstr "Tidak dapat menamai ulang bagian konfigurasi '%s' ke '%s'"
 
-#: builtin/remote.c:735
+#: builtin/remote.c:746
 #, c-format
 msgid ""
 "Not updating non-default fetch refspec\n"
@@ -20340,17 +20980,21 @@ msgstr ""
 "\t%s\n"
 "\tMohon perbarui konfigurasi secara manual bila diperlukan."
 
-#: builtin/remote.c:775
+#: builtin/remote.c:783
+msgid "Renaming remote references"
+msgstr "Menamai ulang referensi remote"
+
+#: builtin/remote.c:794
 #, c-format
 msgid "deleting '%s' failed"
 msgstr "menghapus '%s' gagal"
 
-#: builtin/remote.c:809
+#: builtin/remote.c:832
 #, c-format
 msgid "creating '%s' failed"
 msgstr "membuat '%s' gagal"
 
-#: builtin/remote.c:887
+#: builtin/remote.c:912
 msgid ""
 "Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
 "to delete it, use:"
@@ -20364,120 +21008,120 @@ msgstr[1] ""
 "Catatan: Beberapa cabang diluar hierarki refs/remotes tidak dihapus;\n"
 "untuk menghapus itu, gunakan:"
 
-#: builtin/remote.c:901
+#: builtin/remote.c:926
 #, c-format
 msgid "Could not remove config section '%s'"
 msgstr "Tidak dapat menghapus bagian konfigurasi '%s'"
 
-#: builtin/remote.c:1009
+#: builtin/remote.c:1034
 #, c-format
 msgid " new (next fetch will store in remotes/%s)"
 msgstr " baru (pengambilan berikutnya akan simpan di remotes/%s)"
 
-#: builtin/remote.c:1012
+#: builtin/remote.c:1037
 msgid " tracked"
 msgstr " dilacak"
 
-#: builtin/remote.c:1014
+#: builtin/remote.c:1039
 msgid " stale (use 'git remote prune' to remove)"
 msgstr " basi (gunakan 'git remote prune' untuk hapus)"
 
-#: builtin/remote.c:1016
+#: builtin/remote.c:1041
 msgid " ???"
 msgstr " ???"
 
-#: builtin/remote.c:1057
+#: builtin/remote.c:1082
 #, c-format
 msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
 msgstr ""
 "branch.%s.merge tidak valid; tidak dapat mendasarkan ulang ke lebih dari "
 "satu cabang"
 
-#: builtin/remote.c:1066
+#: builtin/remote.c:1091
 #, c-format
 msgid "rebases interactively onto remote %s"
 msgstr "dasarkan ulang secara interaktif ke remote %s"
 
-#: builtin/remote.c:1068
+#: builtin/remote.c:1093
 #, c-format
 msgid "rebases interactively (with merges) onto remote %s"
 msgstr "dasarkan ulang secara interaktif (dengan penggabungan) ke remote %s"
 
-#: builtin/remote.c:1071
+#: builtin/remote.c:1096
 #, c-format
 msgid "rebases onto remote %s"
 msgstr "dasarkan ulang ke remote %s"
 
-#: builtin/remote.c:1075
+#: builtin/remote.c:1100
 #, c-format
 msgid " merges with remote %s"
 msgstr " gabungkan dengan remote %s"
 
-#: builtin/remote.c:1078
+#: builtin/remote.c:1103
 #, c-format
 msgid "merges with remote %s"
 msgstr "gabungkan dengan remote %s"
 
-#: builtin/remote.c:1081
+#: builtin/remote.c:1106
 #, c-format
 msgid "%-*s    and with remote %s\n"
 msgstr "%-*s    dan dengan remote %s\n"
 
-#: builtin/remote.c:1124
+#: builtin/remote.c:1149
 msgid "create"
 msgstr "buat"
 
-#: builtin/remote.c:1127
+#: builtin/remote.c:1152
 msgid "delete"
 msgstr "hapus"
 
-#: builtin/remote.c:1131
+#: builtin/remote.c:1156
 msgid "up to date"
 msgstr "terbaru"
 
-#: builtin/remote.c:1134
+#: builtin/remote.c:1159
 msgid "fast-forwardable"
 msgstr "bisa dimaju cepat"
 
-#: builtin/remote.c:1137
+#: builtin/remote.c:1162
 msgid "local out of date"
 msgstr "lokal kuno"
 
-#: builtin/remote.c:1144
+#: builtin/remote.c:1169
 #, c-format
 msgid "    %-*s forces to %-*s (%s)"
 msgstr "    %-*s memaksa untuk %-*s (%s)"
 
-#: builtin/remote.c:1147
+#: builtin/remote.c:1172
 #, c-format
 msgid "    %-*s pushes to %-*s (%s)"
 msgstr "    %-*s mendorong ke %-*s (%s)"
 
-#: builtin/remote.c:1151
+#: builtin/remote.c:1176
 #, c-format
 msgid "    %-*s forces to %s"
 msgstr "    %-*s memaksa untuk %s"
 
-#: builtin/remote.c:1154
+#: builtin/remote.c:1179
 #, c-format
 msgid "    %-*s pushes to %s"
 msgstr "    %-*s mendorong ke %s"
 
-#: builtin/remote.c:1222
+#: builtin/remote.c:1247
 msgid "do not query remotes"
 msgstr "jangan tanyakan remote"
 
-#: builtin/remote.c:1243
+#: builtin/remote.c:1268
 #, c-format
 msgid "* remote %s"
 msgstr "* remote %s"
 
-#: builtin/remote.c:1244
+#: builtin/remote.c:1269
 #, c-format
 msgid "  Fetch URL: %s"
 msgstr "  URL pengambilan: %s"
 
-#: builtin/remote.c:1245 builtin/remote.c:1261 builtin/remote.c:1398
+#: builtin/remote.c:1270 builtin/remote.c:1286 builtin/remote.c:1423
 msgid "(no URL)"
 msgstr "(tidak ada URL)"
 
@@ -20485,189 +21129,189 @@ msgstr "(tidak ada URL)"
 #. with the one in " Fetch URL: %s"
 #. translation.
 #.
-#: builtin/remote.c:1259 builtin/remote.c:1261
+#: builtin/remote.c:1284 builtin/remote.c:1286
 #, c-format
 msgid "  Push  URL: %s"
 msgstr "  URL pendorongan: %s"
 
-#: builtin/remote.c:1263 builtin/remote.c:1265 builtin/remote.c:1267
+#: builtin/remote.c:1288 builtin/remote.c:1290 builtin/remote.c:1292
 #, c-format
 msgid "  HEAD branch: %s"
 msgstr "  Cabang HEAD: %s"
 
-#: builtin/remote.c:1263
+#: builtin/remote.c:1288
 msgid "(not queried)"
 msgstr "(tidak ditanyakan)"
 
-#: builtin/remote.c:1265
+#: builtin/remote.c:1290
 msgid "(unknown)"
 msgstr "(tidak diketahui)"
 
-#: builtin/remote.c:1269
+#: builtin/remote.c:1294
 #, c-format
 msgid ""
 "  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
 msgstr ""
 "  Cabang HEAD (HEAD remote ambigu, bisa jadi salah satu dari yang berikut):\n"
 
-#: builtin/remote.c:1281
+#: builtin/remote.c:1306
 #, c-format
 msgid "  Remote branch:%s"
 msgid_plural "  Remote branches:%s"
 msgstr[0] "  Cabang remote:%s"
 msgstr[1] "  Cabang remote:%s"
 
-#: builtin/remote.c:1284 builtin/remote.c:1310
+#: builtin/remote.c:1309 builtin/remote.c:1335
 msgid " (status not queried)"
 msgstr " (status tidak ditanyakan)"
 
-#: builtin/remote.c:1293
+#: builtin/remote.c:1318
 msgid "  Local branch configured for 'git pull':"
 msgid_plural "  Local branches configured for 'git pull':"
 msgstr[0] "  Cabang lokal dikonfigurasi untuk 'git pull':"
 msgstr[1] "  Cabang lokal dikonfigurasi untuk 'git pull':"
 
-#: builtin/remote.c:1301
+#: builtin/remote.c:1326
 msgid "  Local refs will be mirrored by 'git push'"
 msgstr "  Referensi lokal yang akan dicerminkan oleh 'git push'"
 
-#: builtin/remote.c:1307
+#: builtin/remote.c:1332
 #, c-format
 msgid "  Local ref configured for 'git push'%s:"
 msgid_plural "  Local refs configured for 'git push'%s:"
 msgstr[0] "  Referensi lokal dikonfigurasi untuk 'git push'%s:"
 msgstr[1] "  Referensi lokal dikonfigurasi untuk 'git push'%s:"
 
-#: builtin/remote.c:1328
+#: builtin/remote.c:1353
 msgid "set refs/remotes/<name>/HEAD according to remote"
 msgstr "setel refs/remotes/<nama>/HEAD tergantung remote"
 
-#: builtin/remote.c:1330
+#: builtin/remote.c:1355
 msgid "delete refs/remotes/<name>/HEAD"
 msgstr "hapus refs/remotes/<nama>/HEAD"
 
-#: builtin/remote.c:1344
+#: builtin/remote.c:1369
 msgid "Cannot determine remote HEAD"
 msgstr "Tidak dapat menentukan HEAD remote"
 
-#: builtin/remote.c:1346
+#: builtin/remote.c:1371
 msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
 msgstr "Banyak cabang HEAD remote. Mohon pilih satu secara eksplisit dengan:"
 
-#: builtin/remote.c:1356
+#: builtin/remote.c:1381
 #, c-format
 msgid "Could not delete %s"
 msgstr "Tidak dapat menghapus %s"
 
-#: builtin/remote.c:1364
+#: builtin/remote.c:1389
 #, c-format
 msgid "Not a valid ref: %s"
 msgstr "Bukan referensi valid: %s"
 
-#: builtin/remote.c:1366
+#: builtin/remote.c:1391
 #, c-format
 msgid "Could not setup %s"
 msgstr "Tidak dapat mengatur %s"
 
-#: builtin/remote.c:1384
+#: builtin/remote.c:1409
 #, c-format
 msgid " %s will become dangling!"
 msgstr " %s akan menjadi teruntai!"
 
-#: builtin/remote.c:1385
+#: builtin/remote.c:1410
 #, c-format
 msgid " %s has become dangling!"
 msgstr " %s telah menjadi teruntai!"
 
-#: builtin/remote.c:1394
+#: builtin/remote.c:1419
 #, c-format
 msgid "Pruning %s"
 msgstr "Memangkas %s"
 
-#: builtin/remote.c:1395
+#: builtin/remote.c:1420
 #, c-format
 msgid "URL: %s"
 msgstr "URL: %s"
 
-#: builtin/remote.c:1411
+#: builtin/remote.c:1436
 #, c-format
 msgid " * [would prune] %s"
 msgstr " * [akan pangkas] %s"
 
-#: builtin/remote.c:1414
+#: builtin/remote.c:1439
 #, c-format
 msgid " * [pruned] %s"
 msgstr " * [dipangkas] %s"
 
-#: builtin/remote.c:1459
+#: builtin/remote.c:1484
 msgid "prune remotes after fetching"
 msgstr "pangkas remote setelah pengambilan"
 
-#: builtin/remote.c:1523 builtin/remote.c:1579 builtin/remote.c:1649
+#: builtin/remote.c:1548 builtin/remote.c:1604 builtin/remote.c:1674
 #, c-format
 msgid "No such remote '%s'"
 msgstr "Tidak ada remote seperti '%s'"
 
-#: builtin/remote.c:1541
+#: builtin/remote.c:1566
 msgid "add branch"
 msgstr "tambah cabang"
 
-#: builtin/remote.c:1548
+#: builtin/remote.c:1573
 msgid "no remote specified"
 msgstr "tidak ada remote yang disebutkan"
 
-#: builtin/remote.c:1565
+#: builtin/remote.c:1590
 msgid "query push URLs rather than fetch URLs"
 msgstr "tanyakan URL pendorongan daripada URL pengambilan"
 
-#: builtin/remote.c:1567
+#: builtin/remote.c:1592
 msgid "return all URLs"
 msgstr "kembalikan semua URL"
 
-#: builtin/remote.c:1597
+#: builtin/remote.c:1622
 #, c-format
 msgid "no URLs configured for remote '%s'"
 msgstr "tidak ada URL yang dikonfigurasi untuk remote '%s'"
 
-#: builtin/remote.c:1623
+#: builtin/remote.c:1648
 msgid "manipulate push URLs"
 msgstr "manipulasi URL pendorongan"
 
-#: builtin/remote.c:1625
+#: builtin/remote.c:1650
 msgid "add URL"
 msgstr "tambah URL"
 
-#: builtin/remote.c:1627
+#: builtin/remote.c:1652
 msgid "delete URLs"
 msgstr "hapus URL"
 
-#: builtin/remote.c:1634
+#: builtin/remote.c:1659
 msgid "--add --delete doesn't make sense"
 msgstr "--add --delete tidak masuk akal"
 
-#: builtin/remote.c:1675
+#: builtin/remote.c:1700
 #, c-format
 msgid "Invalid old URL pattern: %s"
 msgstr "pola URL lama tidak valid: %s"
 
-#: builtin/remote.c:1683
+#: builtin/remote.c:1708
 #, c-format
 msgid "No such URL found: %s"
 msgstr "Tidak ada URL yang ditemukan seperti: %s"
 
-#: builtin/remote.c:1685
+#: builtin/remote.c:1710
 msgid "Will not delete all non-push URLs"
 msgstr "Tidak akan hapus semua URL non-dorong"
 
-#: builtin/remote.c:1702
+#: builtin/remote.c:1727
 msgid "be verbose; must be placed before a subcommand"
 msgstr "jadi lebih bertele-tele; harus ditempatkan sebelum subperintah"
 
-#: builtin/repack.c:28
+#: builtin/repack.c:29
 msgid "git repack [<options>]"
 msgstr "git repack [<opsi>]"
 
-#: builtin/repack.c:33
+#: builtin/repack.c:34
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -20675,147 +21319,147 @@ msgstr ""
 "Pengepakan ulang tambahan tidak kompatibel dengan indeks bitmap. Gunakan\n"
 " --no-write-bitmap-index atau nonaktifkan konfigurasi pack.writebitmaps."
 
-#: builtin/repack.c:201
+#: builtin/repack.c:206
 msgid "could not start pack-objects to repack promisor objects"
 msgstr "tidak dapat memulai pack-objects untuk mengepak ulang objek pejanji"
 
-#: builtin/repack.c:275 builtin/repack.c:820
+#: builtin/repack.c:280 builtin/repack.c:824
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr "repack: Mengharapkan baris ID objek hex penuh hanya dari pack-objects."
 
-#: builtin/repack.c:299
+#: builtin/repack.c:304
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr ""
 "tidak dapat menyelesaikan pack-objects untuk mengepak ulang objek pejanji"
 
-#: builtin/repack.c:314
+#: builtin/repack.c:319
 #, c-format
 msgid "cannot open index for %s"
 msgstr "tidak dapat membuka indeks untuk %s"
 
-#: builtin/repack.c:373
+#: builtin/repack.c:378
 #, c-format
 msgid "pack %s too large to consider in geometric progression"
 msgstr "pak %s terlalu besar untuk dipertimbangkan dalam deret geometri"
 
-#: builtin/repack.c:406 builtin/repack.c:413 builtin/repack.c:418
+#: builtin/repack.c:411 builtin/repack.c:418 builtin/repack.c:423
 #, c-format
 msgid "pack %s too large to roll up"
 msgstr "pak %s terlalu besar untuk digulung"
 
-#: builtin/repack.c:498
+#: builtin/repack.c:503
 #, c-format
 msgid "could not open tempfile %s for writing"
 msgstr "tidak dapat membuka berkas sementara '%s' untuk ditulis"
 
-#: builtin/repack.c:516
+#: builtin/repack.c:521
 msgid "could not close refs snapshot tempfile"
 msgstr "tidak dapat menutup berkas sementara jepretan referensi"
 
-#: builtin/repack.c:630
+#: builtin/repack.c:634
 msgid "pack everything in a single pack"
 msgstr "pak semuanya dalam satu pak"
 
-#: builtin/repack.c:632
+#: builtin/repack.c:636
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "sama seperti -a, dan jadikan objek yang tak dapat dicapai longgar"
 
-#: builtin/repack.c:635
+#: builtin/repack.c:639
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "hapus pak berlebihan, dan jalankan git-prune-packed"
 
-#: builtin/repack.c:637
+#: builtin/repack.c:641
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "lewatkan --no-reuse-delta ke git-pack-objects"
 
-#: builtin/repack.c:639
+#: builtin/repack.c:643
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "lewatkan --no-reuse-object ke git-pack-objects"
 
-#: builtin/repack.c:641
+#: builtin/repack.c:645
 msgid "do not run git-update-server-info"
 msgstr "jangan jalankan git-update-server-info"
 
-#: builtin/repack.c:644
+#: builtin/repack.c:648
 msgid "pass --local to git-pack-objects"
 msgstr "lewatkan --local ke git-pack-objects"
 
-#: builtin/repack.c:646
+#: builtin/repack.c:650
 msgid "write bitmap index"
 msgstr "tulis indeks bitmap"
 
-#: builtin/repack.c:648
+#: builtin/repack.c:652
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "lewatkan --delta-islands ke git-pack-objects"
 
-#: builtin/repack.c:649
+#: builtin/repack.c:653
 msgid "approxidate"
 msgstr "tanggal aproksimasi"
 
-#: builtin/repack.c:650
+#: builtin/repack.c:654
 msgid "with -A, do not loosen objects older than this"
 msgstr "dengan -A, jangan longgarkan objek lebih lama dari ini"
 
-#: builtin/repack.c:652
+#: builtin/repack.c:656
 msgid "with -a, repack unreachable objects"
 msgstr "dengan -a, pak ulang objek yang tak dapat dicapai"
 
-#: builtin/repack.c:654
+#: builtin/repack.c:658
 msgid "size of the window used for delta compression"
 msgstr "ukuran jendela yang digunakan untuk kompresi delta"
 
-#: builtin/repack.c:655 builtin/repack.c:661
+#: builtin/repack.c:659 builtin/repack.c:665
 msgid "bytes"
 msgstr "bita"
 
-#: builtin/repack.c:656
+#: builtin/repack.c:660
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr ""
 "sama seperti yang diatas, tetapi batasi penggunaan memori daripada hitungan "
 "entri"
 
-#: builtin/repack.c:658
+#: builtin/repack.c:662
 msgid "limits the maximum delta depth"
 msgstr "batasi kedalaman delta maksimum"
 
-#: builtin/repack.c:660
+#: builtin/repack.c:664
 msgid "limits the maximum number of threads"
 msgstr "batasi jumlah utas maksimum"
 
-#: builtin/repack.c:662
+#: builtin/repack.c:666
 msgid "maximum size of each packfile"
 msgstr "ukuran maksimum setiap berkas pak"
 
-#: builtin/repack.c:664
+#: builtin/repack.c:668
 msgid "repack objects in packs marked with .keep"
 msgstr "pak ulang objek dalam pak yang ditandai dengan .keep"
 
-#: builtin/repack.c:666
+#: builtin/repack.c:670
 msgid "do not repack this pack"
 msgstr "jangan pak ulang pak ini"
 
-#: builtin/repack.c:668
+#: builtin/repack.c:672
 msgid "find a geometric progression with factor <N>"
 msgstr "temukan deret geometri dengan faktor <N>"
 
-#: builtin/repack.c:670
+#: builtin/repack.c:674
 msgid "write a multi-pack index of the resulting packs"
 msgstr "tulis indeks multipak dari pak yang dihasilkan"
 
-#: builtin/repack.c:680
+#: builtin/repack.c:684
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "tidak dapat menghapus pak dalam repositori objek berharga"
 
-#: builtin/repack.c:829
+#: builtin/repack.c:833
 msgid "Nothing new to pack."
 msgstr "Tidak ada yang baru untuk dipak."
 
-#: builtin/repack.c:859
+#: builtin/repack.c:863
 #, c-format
 msgid "missing required file: %s"
 msgstr "berkas yang diperlukan hilang: %s"
 
-#: builtin/repack.c:861
+#: builtin/repack.c:865
 #, c-format
 msgid "could not unlink: %s"
 msgstr "tidak dapat membatal taut: %s"
@@ -20832,10 +21476,6 @@ msgstr ""
 msgid "git replace [-f] --graft <commit> [<parent>...]"
 msgstr ""
 
-#: builtin/replace.c:25
-msgid "git replace [-f] --convert-graft-file"
-msgstr ""
-
 #: builtin/replace.c:26
 msgid "git replace -d <object>..."
 msgstr ""
@@ -21128,96 +21768,92 @@ msgstr "Gagal menemukan pohon dari %s."
 msgid "HEAD is now at %s"
 msgstr "HEAD sekarang pada %s"
 
-#: builtin/reset.c:299
+#: builtin/reset.c:304
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Tidak dapat lakukan reset %s di tengah-tengah penggabungan."
 
-#: builtin/reset.c:396 builtin/stash.c:606 builtin/stash.c:680
-#: builtin/stash.c:704
+#: builtin/reset.c:402 builtin/stash.c:606 builtin/stash.c:669
+#: builtin/stash.c:693
 msgid "be quiet, only report errors"
 msgstr "diam, hanya laporkan kesalahan"
 
-#: builtin/reset.c:398
+#: builtin/reset.c:404
+msgid "skip refreshing the index after reset"
+msgstr ""
+
+#: builtin/reset.c:406
 msgid "reset HEAD and index"
 msgstr "setel ulang HEAD dan indeks"
 
-#: builtin/reset.c:399
+#: builtin/reset.c:407
 msgid "reset only HEAD"
 msgstr "hanya setel ulang HEAD"
 
-#: builtin/reset.c:401 builtin/reset.c:403
+#: builtin/reset.c:409 builtin/reset.c:411
 msgid "reset HEAD, index and working tree"
 msgstr "setel ulang HEAD, indeks dan pohon kerja"
 
-#: builtin/reset.c:405
+#: builtin/reset.c:413
 msgid "reset HEAD but keep local changes"
 msgstr "setel ulang HEAD tapi simpan perubahan lokal"
 
-#: builtin/reset.c:411
+#: builtin/reset.c:419
 msgid "record only the fact that removed paths will be added later"
 msgstr "hanya rekam fakta bahwa jalur yang terhapus akan ditambahkan nanti"
 
-#: builtin/reset.c:445
+#: builtin/reset.c:452
 #, c-format
 msgid "Failed to resolve '%s' as a valid revision."
 msgstr "Gagal menguraikan '%s' sebagai revisi yang valid."
 
-#: builtin/reset.c:453
+#: builtin/reset.c:460
 #, c-format
 msgid "Failed to resolve '%s' as a valid tree."
 msgstr "Gagal menguraikan '%s' sebagaikan pohon yang valid."
 
-#: builtin/reset.c:472
+#: builtin/reset.c:479
 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
 msgstr ""
 "--mixed dengan jalur usang; sebagai gantinya gunakan 'git reset --<jalur>'."
 
-#: builtin/reset.c:474
+#: builtin/reset.c:481
 #, c-format
 msgid "Cannot do %s reset with paths."
 msgstr "Tidak dapat lakukan reset %s dengan jalur."
 
-#: builtin/reset.c:489
+#: builtin/reset.c:496
 #, c-format
 msgid "%s reset is not allowed in a bare repository"
 msgstr "Reset %s tidak diperbolehkan dalam repositori bare"
 
-#: builtin/reset.c:520
+#: builtin/reset.c:527
 msgid "Unstaged changes after reset:"
 msgstr "Perubahan tak tergelar setelah setel ulang:"
 
-#: builtin/reset.c:523
+#: builtin/reset.c:530
 #, c-format
 msgid ""
-"\n"
-"It took %.2f seconds to enumerate unstaged changes after reset.  You can\n"
-"use '--quiet' to avoid this.  Set the config setting reset.quiet to true\n"
-"to make this the default.\n"
+"It took %.2f seconds to refresh the index after reset.  You can use\n"
+"'--no-refresh' to avoid this."
 msgstr ""
-"\n"
-"Butuh %.2f detik untuk daftar perubahan tak tergelar setelah setel ulang.\n"
-"Anda dapat menggunakan '--quiet' untuk hindari hal ini. Setel konfigurasi\n"
-"reset.quiet ke true untuk membuat hal tersebut asali.\n"
+"Butuh %.2f detik untuk menyegarkan indeks setelah penyetelan ulang.\n"
+"Anda bisa gunakan '--no-refresh' untuk menghindari hal tersebut."
 
-#: builtin/reset.c:541
+#: builtin/reset.c:547
 #, c-format
 msgid "Could not reset index file to revision '%s'."
 msgstr "Tidak dapat menyetel ulang berkas indeks ke revisi '%s'."
 
-#: builtin/reset.c:546
+#: builtin/reset.c:552
 msgid "Could not write new index file."
 msgstr "Tidak dapat menulis berkas indeks baru."
 
-#: builtin/rev-list.c:602
-msgid "object filtering requires --objects"
-msgstr "penyaringan objek memerlukan --objects"
-
-#: builtin/rev-list.c:674
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr "rev-list tidak mendukung penampilan catatan"
 
-#: builtin/rev-list.c:679
+#: builtin/rev-list.c:664
 #, c-format
 msgid "marked counting and '%s' cannot be used together"
 msgstr "hitungan tertanda dan '%s' tidak dapat digunakan bersamaan."
@@ -21565,11 +22201,11 @@ msgstr "bidang"
 msgid "group by field"
 msgstr "kelompokkan oleh bidang"
 
-#: builtin/shortlog.c:394
+#: builtin/shortlog.c:395
 msgid "too many arguments given outside repository"
 msgstr "terlalu banyak argumen diberikan di luar repositori"
 
-#: builtin/show-branch.c:13
+#: builtin/show-branch.c:14
 msgid ""
 "git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
 "                [--current] [--color[=<when>] | --no-color] [--sparse]\n"
@@ -21581,120 +22217,120 @@ msgstr ""
 "                [--more=<n> | --list | --independent | --merge-base]\n"
 "                [--no-name | --sha1-name] [--topics] [(<revisi> | <glob>)...]"
 
-#: builtin/show-branch.c:17
+#: builtin/show-branch.c:18
 msgid "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"
 msgstr "git show-branch (-g | --reflog)[=<n>[,<dasar>]] [--list] [<referensi>]"
 
-#: builtin/show-branch.c:395
+#: builtin/show-branch.c:396
 #, c-format
 msgid "ignoring %s; cannot handle more than %d ref"
 msgid_plural "ignoring %s; cannot handle more than %d refs"
 msgstr[0] "mengabaikan %s; tidak dapat menangani lebih dari %d referensi"
 msgstr[1] "mengabaikan %s; tidak dapat menangani lebih dari %d referensi"
 
-#: builtin/show-branch.c:547
+#: builtin/show-branch.c:548
 #, c-format
 msgid "no matching refs with %s"
 msgstr "tidak ada referensi yang cocok dengan %s"
 
-#: builtin/show-branch.c:644
+#: builtin/show-branch.c:645
 msgid "show remote-tracking and local branches"
 msgstr "perlihatkan cabang pelacak remote dan lokal"
 
-#: builtin/show-branch.c:646
+#: builtin/show-branch.c:647
 msgid "show remote-tracking branches"
 msgstr "perlihatkan cabang pelacak remote"
 
-#: builtin/show-branch.c:648
+#: builtin/show-branch.c:649
 msgid "color '*!+-' corresponding to the branch"
 msgstr "warna '*!+-' bersesuaian pada cabang"
 
-#: builtin/show-branch.c:650
+#: builtin/show-branch.c:651
 msgid "show <n> more commits after the common ancestor"
 msgstr "perlihatkan <n> komit lagi setelah nenek moyang yang sama"
 
-#: builtin/show-branch.c:652
+#: builtin/show-branch.c:653
 msgid "synonym to more=-1"
 msgstr "sinonim untuk more=-1"
 
-#: builtin/show-branch.c:653
+#: builtin/show-branch.c:654
 msgid "suppress naming strings"
 msgstr "sembunyikan untai penamaan"
 
-#: builtin/show-branch.c:655
+#: builtin/show-branch.c:656
 msgid "include the current branch"
 msgstr "masukkan cabang saat ini"
 
-#: builtin/show-branch.c:657
+#: builtin/show-branch.c:658
 msgid "name commits with their object names"
 msgstr "namai komit dengan nama objeknya"
 
-#: builtin/show-branch.c:659
+#: builtin/show-branch.c:660
 msgid "show possible merge bases"
 msgstr "perlihatkan dasar penggabungan yang mungkin"
 
-#: builtin/show-branch.c:661
+#: builtin/show-branch.c:662
 msgid "show refs unreachable from any other ref"
 msgstr ""
 "perlihatkan referensi yang tidak dapat dicapai dari referensi yang lainnya"
 
-#: builtin/show-branch.c:663
+#: builtin/show-branch.c:664
 msgid "show commits in topological order"
 msgstr "perlihatkan komit dalam urutan topologis"
 
-#: builtin/show-branch.c:666
+#: builtin/show-branch.c:667
 msgid "show only commits not on the first branch"
 msgstr "hanya perlihatkan komit yang bukan pada cabang pertama"
 
-#: builtin/show-branch.c:668
+#: builtin/show-branch.c:669
 msgid "show merges reachable from only one tip"
 msgstr "perlihatkan penggabungan yang bisa dicapai hanya dari satu ujung"
 
-#: builtin/show-branch.c:670
+#: builtin/show-branch.c:671
 msgid "topologically sort, maintaining date order where possible"
 msgstr "urutkan secara topologis, pelihara urutan tanggal bila memungkinkan"
 
-#: builtin/show-branch.c:673
+#: builtin/show-branch.c:674
 msgid "<n>[,<base>]"
 msgstr "<n>[,<dasar>]"
 
-#: builtin/show-branch.c:674
+#: builtin/show-branch.c:675
 msgid "show <n> most recent ref-log entries starting at base"
 msgstr "perlihatkan <n> entri ref-log terkini dimulai dari dasar"
 
-#: builtin/show-branch.c:734
+#: builtin/show-branch.c:735
 msgid "no branches given, and HEAD is not valid"
 msgstr "tidak ada cabang yang diberikan, dan HEAD tidak valid"
 
-#: builtin/show-branch.c:737
+#: builtin/show-branch.c:738
 msgid "--reflog option needs one branch name"
 msgstr "opsi --reflog butuh satu nama cabang"
 
-#: builtin/show-branch.c:740
+#: builtin/show-branch.c:741
 #, c-format
 msgid "only %d entry can be shown at one time."
 msgid_plural "only %d entries can be shown at one time."
 msgstr[0] "hanya %d entri yang bisa diperlihatkan pada satu waktu."
 msgstr[1] "hanya %d entri yang bisa diperlihatkan pada satu waktu."
 
-#: builtin/show-branch.c:744
+#: builtin/show-branch.c:745
 #, c-format
 msgid "no such ref %s"
 msgstr "tidak ada referensi seperti %s"
 
-#: builtin/show-branch.c:830
+#: builtin/show-branch.c:831
 #, c-format
 msgid "cannot handle more than %d rev."
 msgid_plural "cannot handle more than %d revs."
 msgstr[0] "tidak dapat menangani lebih dari %d revisi."
 msgstr[1] "tidak dapat menangani lebih dari %d revisi."
 
-#: builtin/show-branch.c:834
+#: builtin/show-branch.c:835
 #, c-format
 msgid "'%s' is not a valid ref."
 msgstr "'%s' bukan sebuah referensi yang valid."
 
-#: builtin/show-branch.c:837
+#: builtin/show-branch.c:838
 #, c-format
 msgid "cannot find commit %s (%s)"
 msgstr "tidak dapat menemukan komit %s (%s)"
@@ -21753,122 +22389,153 @@ msgstr ""
 "perlihatkan referensi dari masukan standar yang tidak ada dalam repositori "
 "lokal"
 
-#: builtin/sparse-checkout.c:22
+#: builtin/sparse-checkout.c:23
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr "git sparse-checkout (init|list|set|add|reapply|disable) <opsi>"
 
-#: builtin/sparse-checkout.c:46
-msgid "git sparse-checkout list"
-msgstr "git sparse-checkout list"
-
-#: builtin/sparse-checkout.c:60
+#: builtin/sparse-checkout.c:61
 msgid "this worktree is not sparse"
 msgstr "pohon kerja ini bukan tipis"
 
-#: builtin/sparse-checkout.c:75
+#: builtin/sparse-checkout.c:76
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr "pohon kerja ini bukan tipis (berkas sparse-checkout mungkin tidak ada)"
 
-#: builtin/sparse-checkout.c:176
+#: builtin/sparse-checkout.c:177
 #, c-format
 msgid ""
 "directory '%s' contains untracked files, but is not in the sparse-checkout "
 "cone"
 msgstr ""
-"directori '%s' berisi berkas tak teracak, tapi tidak di dalam kerucut "
-"sparse-checkout"
+"directori '%s' berisi berkas tak teracak, tapi tidak di dalam kerucut sparse-"
+"checkout"
 
-#: builtin/sparse-checkout.c:184
+#: builtin/sparse-checkout.c:185
 #, c-format
 msgid "failed to remove directory '%s'"
 msgstr "gagal menghapus direktori '%s'"
 
-#: builtin/sparse-checkout.c:324
+#: builtin/sparse-checkout.c:327
 msgid "failed to create directory for sparse-checkout file"
 msgstr "gagal membuat direktori untuk berkas sparse-checkout"
 
-#: builtin/sparse-checkout.c:365
-msgid "unable to upgrade repository format to enable worktreeConfig"
-msgstr "gagal mengupgrade format repositori untuk mengaktifkan worktreeConfig"
-
-#: builtin/sparse-checkout.c:367
-msgid "failed to set extensions.worktreeConfig setting"
-msgstr "gagal menyetel setelan extensions.worktreeConfig"
+#: builtin/sparse-checkout.c:366
+msgid "failed to initialize worktree config"
+msgstr "gagal menginisialisasi konfigurasi pohon kerja"
 
 #: builtin/sparse-checkout.c:411
 msgid "failed to modify sparse-index config"
 msgstr "gagal memodifikasi konfigurasi sparse-index"
 
-#: builtin/sparse-checkout.c:422
-msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
-msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
-
-#: builtin/sparse-checkout.c:441 builtin/sparse-checkout.c:729
-#: builtin/sparse-checkout.c:778
+#: builtin/sparse-checkout.c:441 builtin/sparse-checkout.c:793
+#: builtin/sparse-checkout.c:847
 msgid "initialize the sparse-checkout in cone mode"
 msgstr "inisialisasi checkout tipis dalam mode kerucut"
 
-#: builtin/sparse-checkout.c:443 builtin/sparse-checkout.c:731
-#: builtin/sparse-checkout.c:780
+#: builtin/sparse-checkout.c:443 builtin/sparse-checkout.c:795
+#: builtin/sparse-checkout.c:849
 msgid "toggle the use of a sparse index"
 msgstr "gunakan indeks tipis"
 
-#: builtin/sparse-checkout.c:476
+#: builtin/sparse-checkout.c:479
 #, c-format
 msgid "failed to open '%s'"
 msgstr "gagal membuka '%s'"
 
-#: builtin/sparse-checkout.c:528
+#: builtin/sparse-checkout.c:531
 #, c-format
 msgid "could not normalize path %s"
 msgstr "tidak dapat menormalkan jalur %s"
 
-#: builtin/sparse-checkout.c:557
+#: builtin/sparse-checkout.c:560
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr "tidak dapat membatal-kutip untai gaya C '%s'"
 
-#: builtin/sparse-checkout.c:612 builtin/sparse-checkout.c:640
+#: builtin/sparse-checkout.c:615 builtin/sparse-checkout.c:643
 msgid "unable to load existing sparse-checkout patterns"
 msgstr "tidak dapat memuat pola checkout tipis yang sudah ada"
 
-#: builtin/sparse-checkout.c:616
+#: builtin/sparse-checkout.c:619
 msgid "existing sparse-checkout patterns do not use cone mode"
 msgstr "pola checkout tipis yang sudah ada tidak menggunakan mode kerucut"
 
-#: builtin/sparse-checkout.c:682
-msgid "git sparse-checkout add (--stdin | <patterns>)"
-msgstr "git sparse-checkout add (--stdin | <pola>)"
+#: builtin/sparse-checkout.c:707
+msgid "please run from the toplevel directory in non-cone mode"
+msgstr "mohon jalankan dari direktori tingkat atas pada mode bukan kerucut"
+
+#: builtin/sparse-checkout.c:712
+msgid "specify directories rather than patterns (no leading slash)"
+msgstr "sebutkan direktori daripada pola (tanpa garis miring terdepan)"
+
+#: builtin/sparse-checkout.c:714
+msgid ""
+"specify directories rather than patterns.  If your directory starts with a "
+"'!', pass --skip-checks"
+msgstr ""
+"sebutkan direktori daripada pola. Jika direktori Anda dimulai dengan '!', "
+"lewatkan --skip-checks"
+
+#: builtin/sparse-checkout.c:716
+msgid ""
+"specify directories rather than patterns.  If your directory really has any "
+"of '*?[]\\' in it, pass --skip-checks"
+msgstr ""
+"sebutkan direktori daripada pola. Jika direktori Anda benar-benar berisi "
+"salah satu dari '*?[]\\', lewatkan --skip-checks"
+
+#: builtin/sparse-checkout.c:732
+#, c-format
+msgid ""
+"'%s' is not a directory; to treat it as a directory anyway, rerun with --"
+"skip-checks"
+msgstr ""
+"'%s' bukan sebuah direktori; untuk perlakukan juga sebagai direktori, "
+"jalankan ulang dengan --skip-checks"
+
+#: builtin/sparse-checkout.c:734
+#, c-format
+msgid ""
+"pass a leading slash before paths such as '%s' if you want a single file "
+"(see NON-CONE PROBLEMS in the git-sparse-checkout manual)."
+msgstr ""
+"lewatkan sebuah garis miring terdepan sebelum jalur seperti '%s' jika Anda "
+"ingin sebuah berkas (lihat NON-CONE PROBLEMS dalam manual git-sparse-"
+"checkout)."
+
+#: builtin/sparse-checkout.c:739
+msgid "git sparse-checkout add [--skip-checks] (--stdin | <patterns>)"
+msgstr "git sparse-checkout add [--skip-checks] (--stdin | <pola>)"
+
+#: builtin/sparse-checkout.c:752 builtin/sparse-checkout.c:797
+msgid ""
+"skip some sanity checks on the given paths that might give false positives"
+msgstr ""
+"lewati beberapa pemeriksaan kewarasan pada jalur yang diberikan yang mana "
+"dapat memberikan positif palsu"
 
-#: builtin/sparse-checkout.c:694 builtin/sparse-checkout.c:733
+#: builtin/sparse-checkout.c:755 builtin/sparse-checkout.c:800
 msgid "read patterns from standard in"
 msgstr "baca pola dari masukan standar"
 
-#: builtin/sparse-checkout.c:699
+#: builtin/sparse-checkout.c:760
 msgid "no sparse-checkout to add to"
 msgstr "tidak ada checkout tipis untuk ditambahkan"
 
-#: builtin/sparse-checkout.c:712
+#: builtin/sparse-checkout.c:775
 msgid ""
-"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] (--stdin | "
-"<patterns>)"
+"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] "
+"(--stdin | <patterns>)"
 msgstr ""
-"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] (--stdin | "
-"<pola>)"
-
-#: builtin/sparse-checkout.c:765
-msgid "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
-msgstr "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
+"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] "
+"(--stdin | <pola>)"
 
-#: builtin/sparse-checkout.c:785
+#: builtin/sparse-checkout.c:854
 msgid "must be in a sparse-checkout to reapply sparsity patterns"
-msgstr "harus berada di dalam checkout tipis untuk menerapkan ulang pola kejarangan"
-
-#: builtin/sparse-checkout.c:803
-msgid "git sparse-checkout disable"
-msgstr "git sparse-checkout disable"
+msgstr ""
+"harus berada di dalam checkout tipis untuk menerapkan ulang pola kejarangan"
 
-#: builtin/sparse-checkout.c:845
+#: builtin/sparse-checkout.c:914
 msgid "error while refreshing working directory"
 msgstr "kesalahan saat menyegarkan direktori kerja"
 
@@ -22009,171 +22676,155 @@ msgstr "Indeks tak dibatal-stasekan."
 msgid "could not restore untracked files from stash"
 msgstr "tidak dapat mengembalikan berkas tak terlacak dari stase"
 
-#: builtin/stash.c:608 builtin/stash.c:706
+#: builtin/stash.c:608 builtin/stash.c:695
 msgid "attempt to recreate the index"
 msgstr "coba membuat ulang indeks"
 
-#: builtin/stash.c:652
+#: builtin/stash.c:641
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "%s (%s) dijatuhkan"
 
-#: builtin/stash.c:655
+#: builtin/stash.c:644
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s: Tidak dapat menjatuhkan entri stase"
 
-#: builtin/stash.c:668
+#: builtin/stash.c:657
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "'%s' bukan referensi stase"
 
-#: builtin/stash.c:718
+#: builtin/stash.c:707
 msgid "The stash entry is kept in case you need it again."
 msgstr "Entri stase disimpan jika Anda butuh itu lagi."
 
-#: builtin/stash.c:741
+#: builtin/stash.c:730
 msgid "No branch name specified"
 msgstr "Tidak ada nama cabang yang disebutkan"
 
-#: builtin/stash.c:825
+#: builtin/stash.c:809
 msgid "failed to parse tree"
 msgstr "gagal menguraikan pohon"
 
-#: builtin/stash.c:836
+#: builtin/stash.c:820
 msgid "failed to unpack trees"
 msgstr "gagal membongkar pohon"
 
-#: builtin/stash.c:856
+#: builtin/stash.c:840
 msgid "include untracked files in the stash"
 msgstr "masukkan berkas tak terlacak ke dalam stase"
 
-#: builtin/stash.c:859
+#: builtin/stash.c:843
 msgid "only show untracked files in the stash"
 msgstr "hanya perlihatkan berkas tak terlacak dalam stase"
 
-#: builtin/stash.c:946 builtin/stash.c:983
+#: builtin/stash.c:930 builtin/stash.c:967
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "Tidak dapat memperbarui %s dengan %s"
 
-#: builtin/stash.c:964 builtin/stash.c:1678 builtin/stash.c:1750
+#: builtin/stash.c:948 builtin/stash.c:1667 builtin/stash.c:1739
 msgid "stash message"
 msgstr "pesan stase"
 
-#: builtin/stash.c:974
+#: builtin/stash.c:958
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" butuh satu argumen <komit>"
 
-#: builtin/stash.c:1159
+#: builtin/stash.c:1143
 msgid "No staged changes"
 msgstr "Tidak ada perubahan yang tergelar"
 
-#: builtin/stash.c:1220
+#: builtin/stash.c:1204
 msgid "No changes selected"
 msgstr "Tidak ada perubahan yang dipilih"
 
-#: builtin/stash.c:1320
+#: builtin/stash.c:1304
 msgid "You do not have the initial commit yet"
 msgstr "Anda belum punya komit awal"
 
-#: builtin/stash.c:1347
+#: builtin/stash.c:1331
 msgid "Cannot save the current index state"
 msgstr "Tidak dapat menyimpan keadaan indeks saat ini"
 
-#: builtin/stash.c:1356
+#: builtin/stash.c:1340
 msgid "Cannot save the untracked files"
 msgstr "Tidak dapat menyimpan berkas tak terlacak"
 
-#: builtin/stash.c:1367 builtin/stash.c:1386
+#: builtin/stash.c:1351 builtin/stash.c:1370
 msgid "Cannot save the current worktree state"
 msgstr "Tidak dapat menyimpang keadaan pohon kerja saat ini"
 
-#: builtin/stash.c:1377
+#: builtin/stash.c:1361
 msgid "Cannot save the current staged state"
 msgstr "Tidak dapat menyimpan keadaan tergelar saat ini"
 
-#: builtin/stash.c:1414
+#: builtin/stash.c:1398
 msgid "Cannot record working tree state"
 msgstr "Tidak dapat merekam keadaan pohon kerja"
 
-#: builtin/stash.c:1463
+#: builtin/stash.c:1447
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr ""
 "Tidak dapat menggunakan --patch dan --include-untracked atau --all pada "
 "waktu yang bersamaan"
 
-#: builtin/stash.c:1474
+#: builtin/stash.c:1458
 msgid "Can't use --staged and --include-untracked or --all at the same time"
 msgstr ""
 "Tidak dapat menggunakan --staged dan --include-untracked atau --all pada "
 "waktu yang bersamaan"
 
-#: builtin/stash.c:1492
+#: builtin/stash.c:1476
 msgid "Did you forget to 'git add'?"
 msgstr "Anda lupa untuk 'git add'?"
 
-#: builtin/stash.c:1507
+#: builtin/stash.c:1491
 msgid "No local changes to save"
 msgstr "Tidak ada perubahan lokal untuk disimpan"
 
-#: builtin/stash.c:1514
+#: builtin/stash.c:1498
 msgid "Cannot initialize stash"
 msgstr "Tidak dapat menginisialisasi stase"
 
-#: builtin/stash.c:1529
+#: builtin/stash.c:1513
 msgid "Cannot save the current status"
 msgstr "Tidak dapat menyimpan status saat ini"
 
-#: builtin/stash.c:1534
+#: builtin/stash.c:1518
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Direktori kerja dan keadaan indeks %s disimpan"
 
-#: builtin/stash.c:1627
+#: builtin/stash.c:1615
 msgid "Cannot remove worktree changes"
 msgstr "Tidak dapat menghapus perubahaan pohon kerja"
 
-#: builtin/stash.c:1667 builtin/stash.c:1739
+#: builtin/stash.c:1656 builtin/stash.c:1728
 msgid "keep index"
 msgstr "jaga indeks"
 
-#: builtin/stash.c:1669 builtin/stash.c:1741
+#: builtin/stash.c:1658 builtin/stash.c:1730
 msgid "stash staged changes only"
 msgstr "hanya stase perubahan tergelar"
 
-#: builtin/stash.c:1671 builtin/stash.c:1743
+#: builtin/stash.c:1660 builtin/stash.c:1732
 msgid "stash in patch mode"
 msgstr "stase dalam mode tambalan"
 
-#: builtin/stash.c:1672 builtin/stash.c:1744
+#: builtin/stash.c:1661 builtin/stash.c:1733
 msgid "quiet mode"
 msgstr "mode hening"
 
-#: builtin/stash.c:1674 builtin/stash.c:1746
+#: builtin/stash.c:1663 builtin/stash.c:1735
 msgid "include untracked files in stash"
 msgstr "masukkan berkas tak terlacak ke dalam stase"
 
-#: builtin/stash.c:1676 builtin/stash.c:1748
+#: builtin/stash.c:1665 builtin/stash.c:1737
 msgid "include ignore files"
 msgstr "masukkan berkas ignore"
 
-#: builtin/stash.c:1783
-msgid ""
-"the stash.useBuiltin support has been removed!\n"
-"See its entry in 'git help config' for details."
-msgstr ""
-"Dukungan untuk stash.useBuiltin sudah dihapus!\n"
-"Lihat entri itu di 'git help config' untuk selengkapnya."
-
-#: builtin/stripspace.c:18
-msgid "git stripspace [-s | --strip-comments]"
-msgstr ""
-
-#: builtin/stripspace.c:19
-msgid "git stripspace [-c | --comment-lines]"
-msgstr ""
-
 #: builtin/stripspace.c:37
 msgid "skip and remove all lines starting with comment character"
 msgstr ""
@@ -22182,21 +22833,17 @@ msgstr ""
 msgid "prepend comment character and space to each line"
 msgstr ""
 
-#: builtin/submodule--helper.c:46 builtin/submodule--helper.c:2668
+#: builtin/submodule--helper.c:50 builtin/submodule--helper.c:2486
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "Mengharapkan nama referensi penuh, dapat %s"
 
-#: builtin/submodule--helper.c:63
-msgid "submodule--helper print-default-remote takes no arguments"
-msgstr "submodule--helper print-default-remote tidak membutuhkan argumen"
-
-#: builtin/submodule--helper.c:101
+#: builtin/submodule--helper.c:103
 #, c-format
 msgid "cannot strip one component off url '%s'"
 msgstr "tidak dapat mencopot satu komponen dari url '%s'"
 
-#: builtin/submodule--helper.c:211
+#: builtin/submodule--helper.c:213
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
@@ -22205,26 +22852,26 @@ msgstr ""
 "tidak dapat mencari konfigurasi '%s'. Asumsi bahwa repositori ini adalah "
 "hulu otoritatif tersendiri."
 
-#: builtin/submodule--helper.c:405 builtin/submodule--helper.c:1859
+#: builtin/submodule--helper.c:413 builtin/submodule--helper.c:1873
 msgid "alternative anchor for relative paths"
 msgstr "jangkar alternatif untuk jalur relatif"
 
-#: builtin/submodule--helper.c:410
+#: builtin/submodule--helper.c:418
 msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper list [--prefix=<jalur>] [<jalur>...]"
 
-#: builtin/submodule--helper.c:468 builtin/submodule--helper.c:605
-#: builtin/submodule--helper.c:628
+#: builtin/submodule--helper.c:476 builtin/submodule--helper.c:617
+#: builtin/submodule--helper.c:640
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr "Tidak ada url yang ditemukan untuk jalur submodul '%s' di .gitmodules"
 
-#: builtin/submodule--helper.c:520
+#: builtin/submodule--helper.c:528
 #, c-format
 msgid "Entering '%s'\n"
 msgstr "Memasuki '%s'\n"
 
-#: builtin/submodule--helper.c:523
+#: builtin/submodule--helper.c:531
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
@@ -22233,7 +22880,7 @@ msgstr ""
 "run_command mengembalikan status bukan nol untuk %s\n"
 "."
 
-#: builtin/submodule--helper.c:545
+#: builtin/submodule--helper.c:553
 #, c-format
 msgid ""
 "run_command returned non-zero status while recursing in the nested "
@@ -22244,68 +22891,68 @@ msgstr ""
 "bersarang %s\n"
 "."
 
-#: builtin/submodule--helper.c:561
+#: builtin/submodule--helper.c:569
 msgid "suppress output of entering each submodule command"
 msgstr "sembunyikan keluaran memasuki setiap perintah submodul"
 
-#: builtin/submodule--helper.c:563 builtin/submodule--helper.c:864
-#: builtin/submodule--helper.c:1453
+#: builtin/submodule--helper.c:571 builtin/submodule--helper.c:876
+#: builtin/submodule--helper.c:1458
 msgid "recurse into nested submodules"
 msgstr "rekursi ke dalam submodul bersarang"
 
-#: builtin/submodule--helper.c:568
+#: builtin/submodule--helper.c:576
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr ""
 "git submodule--helper foreach [--quiet] [--recursive] [--] [<perintah>]"
 
-#: builtin/submodule--helper.c:642
+#: builtin/submodule--helper.c:654
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr "Gagal mendaftarkan url untuk jalur submodul '%s'"
 
-#: builtin/submodule--helper.c:646
+#: builtin/submodule--helper.c:658
 #, c-format
 msgid "Submodule '%s' (%s) registered for path '%s'\n"
 msgstr "Submodul '%s' (%s) didaftarkan untuk jalur '%s'\n"
 
-#: builtin/submodule--helper.c:656
+#: builtin/submodule--helper.c:668
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr "peringatan: perintah mode pembaruan disarankan untuk submodul '%s'\n"
 
-#: builtin/submodule--helper.c:663
+#: builtin/submodule--helper.c:675
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr "Gagal mendaftarkan mode pembaruan untuk jalur submodul '%s'"
 
-#: builtin/submodule--helper.c:685
+#: builtin/submodule--helper.c:697
 msgid "suppress output for initializing a submodule"
 msgstr "sembunyikan keluaran menginisialisasi submodul"
 
-#: builtin/submodule--helper.c:690
+#: builtin/submodule--helper.c:702
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr "git submodule--helper init [<opsi>] [<jalur>]"
 
-#: builtin/submodule--helper.c:763 builtin/submodule--helper.c:898
+#: builtin/submodule--helper.c:775 builtin/submodule--helper.c:910
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr "tidak ada pemetaan submodul ditemukan di .gitmodules untuk jalur '%s'"
 
-#: builtin/submodule--helper.c:811
+#: builtin/submodule--helper.c:823
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr "tidak dapat menguraikan referensi HEAD di dalam submodul '%s'"
 
-#: builtin/submodule--helper.c:838 builtin/submodule--helper.c:1423
+#: builtin/submodule--helper.c:850 builtin/submodule--helper.c:1428
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "gagal merekursi ke dalam submodul '%s'"
 
-#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1590
+#: builtin/submodule--helper.c:874 builtin/submodule--helper.c:1595
 msgid "suppress submodule status output"
 msgstr "sembunyikan keluaran status submodul"
 
-#: builtin/submodule--helper.c:863
+#: builtin/submodule--helper.c:875
 msgid ""
 "use commit stored in the index instead of the one stored in the submodule "
 "HEAD"
@@ -22313,92 +22960,92 @@ msgstr ""
 "gunakan komit yang disimpan di dalam indeks daripada yang disimpan di dalam "
 "HEAD"
 
-#: builtin/submodule--helper.c:869
+#: builtin/submodule--helper.c:881
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr "git submodule status [--quiet] [--cached] [--recursive] [<jalur>...]"
 
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:905
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper name <jalur>"
 
-#: builtin/submodule--helper.c:965
+#: builtin/submodule--helper.c:977
 #, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr "* %s %s(blob)->%s(submodul)"
 
-#: builtin/submodule--helper.c:968
+#: builtin/submodule--helper.c:980
 #, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr "* %s %s(submodul)->%s(blob)"
 
-#: builtin/submodule--helper.c:981
+#: builtin/submodule--helper.c:993
 #, c-format
 msgid "%s"
 msgstr "%s"
 
-#: builtin/submodule--helper.c:1031
+#: builtin/submodule--helper.c:1043
 #, c-format
 msgid "couldn't hash object from '%s'"
 msgstr "tidak dapat hash objek dari '%s'"
 
-#: builtin/submodule--helper.c:1035
+#: builtin/submodule--helper.c:1047
 #, c-format
 msgid "unexpected mode %o\n"
 msgstr "mode tidak diharapkan %o\n"
 
-#: builtin/submodule--helper.c:1276
+#: builtin/submodule--helper.c:1288
 msgid "use the commit stored in the index instead of the submodule HEAD"
 msgstr "gunakan komit yang disimpan di dalam indeks daripada HEAD submodul"
 
-#: builtin/submodule--helper.c:1278
+#: builtin/submodule--helper.c:1290
 msgid "compare the commit in the index with that in the submodule HEAD"
 msgstr "bandingkan komit di dalam indeks dengan yang di dalam HEAD submodul"
 
-#: builtin/submodule--helper.c:1280
+#: builtin/submodule--helper.c:1292
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr "lewatkan submodul dengan nilai 'ignore_config' disetel ke 'all'"
 
-#: builtin/submodule--helper.c:1282
+#: builtin/submodule--helper.c:1294
 msgid "limit the summary size"
 msgstr "batasi ukuran ringkasan"
 
-#: builtin/submodule--helper.c:1287
+#: builtin/submodule--helper.c:1299
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr "git submodule--helper summary [<opsi>] [<commit>] -- [<jalur>]"
 
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1323
 msgid "could not fetch a revision for HEAD"
 msgstr "tidak dapat mengambil revisi untuk HEAD"
 
-#: builtin/submodule--helper.c:1373
+#: builtin/submodule--helper.c:1384
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr "Mensinkronisasi url submodul untuk '%s'\n"
 
-#: builtin/submodule--helper.c:1379
+#: builtin/submodule--helper.c:1390
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr "gagal mendaftarkan url untuk jalur submodul '%s'"
 
-#: builtin/submodule--helper.c:1393
+#: builtin/submodule--helper.c:1399
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr "gagal mendapatkan remote asali untuk submodul '%s'"
 
-#: builtin/submodule--helper.c:1404
+#: builtin/submodule--helper.c:1409
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr "gagal memperbarui remote untuk submodul '%s'"
 
-#: builtin/submodule--helper.c:1451
+#: builtin/submodule--helper.c:1456
 msgid "suppress output of synchronizing submodule url"
 msgstr "sembunyikan keluaran mensinkronisasi url submodul"
 
-#: builtin/submodule--helper.c:1458
+#: builtin/submodule--helper.c:1463
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<jalur>]"
 
-#: builtin/submodule--helper.c:1508
+#: builtin/submodule--helper.c:1513
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory. This will be replaced "
@@ -22407,7 +23054,7 @@ msgstr ""
 "Pohon kerja submodul '%s' berisi direktori .git. Ini akan diganti dengan  "
 "berkas .git oleh dengan menggunakan absorbgitdirs."
 
-#: builtin/submodule--helper.c:1525
+#: builtin/submodule--helper.c:1530
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
@@ -22416,46 +23063,46 @@ msgstr ""
 "Pohon kerja submodul '%s' berisi modifikasi lokal; gunakan '-f' untuk "
 "menyingkirkan itu"
 
-#: builtin/submodule--helper.c:1533
+#: builtin/submodule--helper.c:1538
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "Direktori '%s' dibersihkan\n"
 
-#: builtin/submodule--helper.c:1535
+#: builtin/submodule--helper.c:1540
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr "Tidak dapat menghapus pohon kerja submodul '%s'\n"
 
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1551
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr "tidak dapat membuat direktori submodul kosong %s"
 
-#: builtin/submodule--helper.c:1562
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr "Submodul '%s' (%s) tak terdaftar untuk jalur '%s'\n"
 
-#: builtin/submodule--helper.c:1591
+#: builtin/submodule--helper.c:1596
 msgid "remove submodule working trees even if they contain local changes"
 msgstr "hapus pohon kerja submodul bahkan jika itu berisi perubahan lokal"
 
-#: builtin/submodule--helper.c:1592
+#: builtin/submodule--helper.c:1597
 msgid "unregister all submodules"
 msgstr "batal daftar semua submodul"
 
-#: builtin/submodule--helper.c:1597
+#: builtin/submodule--helper.c:1602
 msgid ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
 msgstr ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<jalur>...]]"
 
-#: builtin/submodule--helper.c:1611
+#: builtin/submodule--helper.c:1616
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr ""
 "Gunakan '--all' jika Anda benar-benar ingin deinisialisasi semua submodul"
 
-#: builtin/submodule--helper.c:1656
+#: builtin/submodule--helper.c:1665
 msgid ""
 "An alternate computed from a superproject's alternate is invalid.\n"
 "To allow Git to clone without an alternate in such a case, set\n"
@@ -22467,102 +23114,102 @@ msgstr ""
 " itu, setel submodule.alternateErrorStrategy ke 'info' atau yang sama,\n"
 "kloning degan '--reference-if-able' daripada '--reference'."
 
-#: builtin/submodule--helper.c:1701 builtin/submodule--helper.c:1704
+#: builtin/submodule--helper.c:1710 builtin/submodule--helper.c:1713
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "submodul '%s' tidak dapat menambahkan pengganti: %s"
 
-#: builtin/submodule--helper.c:1740
+#: builtin/submodule--helper.c:1749
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr "Nilai '%s' untuk submodule.alternateErrorStrategy tidak dikenal"
 
-#: builtin/submodule--helper.c:1747
+#: builtin/submodule--helper.c:1756
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "Nilai '%s' untuk submodule.alternateLocation tidak dikenal"
 
-#: builtin/submodule--helper.c:1772
+#: builtin/submodule--helper.c:1781
 #, c-format
 msgid "refusing to create/use '%s' in another submodule's git dir"
 msgstr ""
 "menolak membuat/menggunakan '%s' di dalam direktori git submodul yang lain"
 
-#: builtin/submodule--helper.c:1813
+#: builtin/submodule--helper.c:1826
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
 msgstr "gagal mengkloning '%s' ke dalam jalur submodul '%s'"
 
-#: builtin/submodule--helper.c:1818
+#: builtin/submodule--helper.c:1831
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr "direktori tidak kosong: '%s'"
 
-#: builtin/submodule--helper.c:1830
+#: builtin/submodule--helper.c:1843
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr "tidak dapat mendapatkan direktori submodul untuk '%s'"
 
-#: builtin/submodule--helper.c:1862
+#: builtin/submodule--helper.c:1876
 msgid "where the new submodule will be cloned to"
 msgstr "di mana submodul baru akan dikloning"
 
-#: builtin/submodule--helper.c:1865
+#: builtin/submodule--helper.c:1879
 msgid "name of the new submodule"
 msgstr "nama submodul baru"
 
-#: builtin/submodule--helper.c:1868
+#: builtin/submodule--helper.c:1882
 msgid "url where to clone the submodule from"
 msgstr "url di mana submodul dikloning"
 
-#: builtin/submodule--helper.c:1876 builtin/submodule--helper.c:3265
+#: builtin/submodule--helper.c:1890 builtin/submodule--helper.c:3383
 msgid "depth for shallow clones"
 msgstr "kedalaman untuk kloning dangkal"
 
-#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:2526
-#: builtin/submodule--helper.c:3258
+#: builtin/submodule--helper.c:1893 builtin/submodule--helper.c:2731
+#: builtin/submodule--helper.c:3376
 msgid "force cloning progress"
 msgstr "paksa perkembangan kloning"
 
-#: builtin/submodule--helper.c:1881 builtin/submodule--helper.c:2528
+#: builtin/submodule--helper.c:1895 builtin/submodule--helper.c:2733
 msgid "disallow cloning into non-empty directory"
 msgstr "tak perbolehkan kloning ke dalam direktori bukan kosong"
 
-#: builtin/submodule--helper.c:1888
+#: builtin/submodule--helper.c:1903
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
-"<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
-"<url> --path <path>"
+"<repository>] [--name <name>] [--depth <depth>] [--single-branch] [--filter "
+"<filter-spec>] --url <url> --path <path>"
 msgstr ""
 "git submodule--helper clone [--prefix=<jalur>] [--quiet] [--reference "
-"<repositori>] [--name <nama>] [--depth <kedalaman>] [--single-branch] --url "
-"<url> --path <jalur>"
+"<repositori>] [--name <nama>] [--depth <kedalaman>] [--single-branch] [--"
+"filter <spek filter>] --url <url> --path <jalur>"
 
-#: builtin/submodule--helper.c:1925
+#: builtin/submodule--helper.c:1943
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr "Mode pembaruan '%s' tidak valid untuk jalur submodul '%s'"
 
-#: builtin/submodule--helper.c:1929
+#: builtin/submodule--helper.c:1947
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr "Mode pembaruan '%s' tidak valid untuk jalur submodul '%s'"
 
-#: builtin/submodule--helper.c:2044
+#: builtin/submodule--helper.c:2041
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "Jalur submodul '%s' tidak diinisialisasi"
 
-#: builtin/submodule--helper.c:2048
+#: builtin/submodule--helper.c:2045
 msgid "Maybe you want to use 'update --init'?"
 msgstr "Mungkin Anda ingin menggunakan 'update --init'?"
 
-#: builtin/submodule--helper.c:2078
+#: builtin/submodule--helper.c:2075
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "Melewati submodul tak tergabung %s"
 
-#: builtin/submodule--helper.c:2107
+#: builtin/submodule--helper.c:2104
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "Melewati submodul '%s'"
@@ -22577,54 +23224,54 @@ msgstr "Gagal mengkloning '%s'. Percobaan ulang dijadwalkan"
 msgid "Failed to clone '%s' a second time, aborting"
 msgstr "Gagal mengkloning '%s' untuk kedua kalinya, batalkan"
 
-#: builtin/submodule--helper.c:2373
+#: builtin/submodule--helper.c:2371
 #, c-format
 msgid "Unable to checkout '%s' in submodule path '%s'"
 msgstr "Tidak dapat men-checkout '%s' pada jalur submodul '%s'"
 
-#: builtin/submodule--helper.c:2377
+#: builtin/submodule--helper.c:2375
 #, c-format
 msgid "Unable to rebase '%s' in submodule path '%s'"
 msgstr "Gagal mendasarkan ulang '%s' pada jalur submodul '%s'"
 
-#: builtin/submodule--helper.c:2381
+#: builtin/submodule--helper.c:2379
 #, c-format
 msgid "Unable to merge '%s' in submodule path '%s'"
 msgstr "Tidak dapat menggabungkan '%s' pada jalur submodul '%s'"
 
-#: builtin/submodule--helper.c:2385
+#: builtin/submodule--helper.c:2383
 #, c-format
 msgid "Execution of '%s %s' failed in submodule path '%s'"
 msgstr "Eksekusi '%s %s' gagal di jalur submodul '%s'"
 
-#: builtin/submodule--helper.c:2409
+#: builtin/submodule--helper.c:2402
 #, c-format
 msgid "Submodule path '%s': checked out '%s'\n"
 msgstr "Jalur submodul '%s': ter-checkout '%s'\n"
 
-#: builtin/submodule--helper.c:2413
+#: builtin/submodule--helper.c:2406
 #, c-format
 msgid "Submodule path '%s': rebased into '%s'\n"
 msgstr "Jalur submodul '%s: terdasarkan ulang ke '%s''\n"
 
-#: builtin/submodule--helper.c:2417
+#: builtin/submodule--helper.c:2410
 #, c-format
 msgid "Submodule path '%s': merged in '%s'\n"
 msgstr "Jalur submodul '%s': tergabung dalam '%s'\n"
 
-#: builtin/submodule--helper.c:2421
+#: builtin/submodule--helper.c:2414
 #, c-format
 msgid "Submodule path '%s': '%s %s'\n"
 msgstr "Jalur submodul '%s': '%s %s'\n"
 
-#: builtin/submodule--helper.c:2445
+#: builtin/submodule--helper.c:2438
 #, c-format
 msgid "Unable to fetch in submodule path '%s'; trying to directly fetch %s:"
 msgstr ""
 "Tidak dapat mengambil di dalam jalur submodul '%s'; mencoba mengambil "
 "langsung %s:"
 
-#: builtin/submodule--helper.c:2454
+#: builtin/submodule--helper.c:2447
 #, c-format
 msgid ""
 "Fetched in submodule path '%s', but it did not contain %s. Direct fetching "
@@ -22633,177 +23280,200 @@ msgstr ""
 "Terambil di dalam jalur submodul '%s', tetapi itu tidak berisi %s. "
 "Pengambilan langsung komit tersebut gagal."
 
-#: builtin/submodule--helper.c:2505 builtin/submodule--helper.c:2575
-#: builtin/submodule--helper.c:2813
-msgid "path into the working tree"
-msgstr "jalur ke dalam pohon kerja"
+#: builtin/submodule--helper.c:2481
+#, c-format
+msgid ""
+"Submodule (%s) branch configured to inherit branch from superproject, but "
+"the superproject is not on any branch"
+msgstr ""
+"Cabang submodul (%s) dikonfigurasikan untuk mewarisi cabang dari proyek "
+"super, tapi proyek super tidak pada cabang apapun"
 
-#: builtin/submodule--helper.c:2508 builtin/submodule--helper.c:2580
-msgid "path into the working tree, across nested submodule boundaries"
-msgstr "jalur ke dalam pohon kerja, melintasi perbatasan submodul bersarang"
+#: builtin/submodule--helper.c:2499
+#, c-format
+msgid "could not get a repository handle for submodule '%s'"
+msgstr "tidak dapat mendapat pegangan repositori untuk submodul '%s'"
 
-#: builtin/submodule--helper.c:2512 builtin/submodule--helper.c:2578
-msgid "rebase, merge, checkout or none"
-msgstr "dasarkan ulang, gabungkan, checkout atau tidak sama sekali"
+#: builtin/submodule--helper.c:2588
+#, c-format
+msgid "Unable to find current revision in submodule path '%s'"
+msgstr "Tidak dapat menemukan revisi saat ini pada jalur submodul '%s'"
 
-#: builtin/submodule--helper.c:2518
-msgid "create a shallow clone truncated to the specified number of revisions"
-msgstr "buat klon dangkal terpotong hingga sejumlah revisi yang disebutkan"
+#: builtin/submodule--helper.c:2599
+#, c-format
+msgid "Unable to fetch in submodule path '%s'"
+msgstr "Tidak dapat mengambil pada jalur submodul '%s'"
 
-#: builtin/submodule--helper.c:2521
-msgid "parallel jobs"
-msgstr "pekerjaan paralel"
+#: builtin/submodule--helper.c:2604
+#, c-format
+msgid "Unable to find %s revision in submodule path '%s'"
+msgstr "Tidak dapat menemukan revisi %s pada jalur submodul '%s'"
 
-#: builtin/submodule--helper.c:2523
-msgid "whether the initial clone should follow the shallow recommendation"
-msgstr "apakah klon awal seharusnya mengikuti rekomendasi dangkal"
+#: builtin/submodule--helper.c:2640
+#, c-format
+msgid "Failed to recurse into submodule path '%s'"
+msgstr "Gagal merekursi ke dalam submodul '%s'"
 
-#: builtin/submodule--helper.c:2524
-msgid "don't print cloning progress"
-msgstr "jangan cetak perkembangan pengkloningan"
+#: builtin/submodule--helper.c:2699
+msgid "force checkout updates"
+msgstr "paksa pembaruan checkout"
 
-#: builtin/submodule--helper.c:2535
-msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
-msgstr "git submodule--helper update-clone [--prefix=<jalur>] [<jalur>...]"
+#: builtin/submodule--helper.c:2701
+msgid "initialize uninitialized submodules before update"
+msgstr "inisialisasi submodul yang belum diinisialisasi sebelum pembaruan"
 
-#: builtin/submodule--helper.c:2548
-msgid "bad value for update parameter"
-msgstr "nilai jelek untuk parameter pembaruan"
+#: builtin/submodule--helper.c:2703
+msgid "use SHA-1 of submodule's remote tracking branch"
+msgstr "gunakan SHA-1 dari cabang pelacak remote submodul"
 
-#: builtin/submodule--helper.c:2566
-msgid "suppress output for update by rebase or merge"
+#: builtin/submodule--helper.c:2705
+msgid "traverse submodules recursively"
 msgstr ""
-"sembunyikan keluaran untuk pembaruan oleh pendasaran ulang atau penggabungan"
 
-#: builtin/submodule--helper.c:2567
-msgid "force checkout updates"
-msgstr "paksa pembaruan checkout"
-
-#: builtin/submodule--helper.c:2569
+#: builtin/submodule--helper.c:2707
 msgid "don't fetch new objects from the remote site"
 msgstr "jangan ambil objek baru dari situs remote"
 
-#: builtin/submodule--helper.c:2571
-msgid "overrides update mode in case the repository is a fresh clone"
-msgstr "timpa mode pembaruan jika repositori adalah kloning segar"
+#: builtin/submodule--helper.c:2710 builtin/submodule--helper.c:2892
+msgid "path into the working tree"
+msgstr "jalur ke dalam pohon kerja"
 
-#: builtin/submodule--helper.c:2572
-msgid "depth for shallow fetch"
-msgstr "kedalaman untuk pengambilan dangkal"
+#: builtin/submodule--helper.c:2713
+msgid "path into the working tree, across nested submodule boundaries"
+msgstr "jalur ke dalam pohon kerja, melintasi perbatasan submodul bersarang"
 
-#: builtin/submodule--helper.c:2582
-msgid "sha1"
-msgstr "sha1"
+#: builtin/submodule--helper.c:2717
+msgid "rebase, merge, checkout or none"
+msgstr "dasarkan ulang, gabungkan, checkout atau tidak sama sekali"
 
-#: builtin/submodule--helper.c:2583
-msgid "SHA1 expected by superproject"
-msgstr "SHA1 diharapkan oleh proyek super"
+#: builtin/submodule--helper.c:2723
+msgid "create a shallow clone truncated to the specified number of revisions"
+msgstr "buat klon dangkal terpotong hingga sejumlah revisi yang disebutkan"
 
-#: builtin/submodule--helper.c:2585
-msgid "subsha1"
-msgstr "subsha1"
+#: builtin/submodule--helper.c:2726
+msgid "parallel jobs"
+msgstr "pekerjaan paralel"
 
-#: builtin/submodule--helper.c:2586
-msgid "SHA1 of submodule's HEAD"
-msgstr "SHA1 dari HEAD submodul"
+#: builtin/submodule--helper.c:2728
+msgid "whether the initial clone should follow the shallow recommendation"
+msgstr "apakah klon awal seharusnya mengikuti rekomendasi dangkal"
 
-#: builtin/submodule--helper.c:2592
-msgid "git submodule--helper run-update-procedure [<options>] <path>"
-msgstr "git submodule--helper run-update-procedure [<opsi>] <jalur>"
+#: builtin/submodule--helper.c:2729
+msgid "don't print cloning progress"
+msgstr "jangan cetak perkembangan pengkloningan"
 
-#: builtin/submodule--helper.c:2663
-#, c-format
+#: builtin/submodule--helper.c:2741
 msgid ""
-"Submodule (%s) branch configured to inherit branch from superproject, but "
-"the superproject is not on any branch"
+"git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] "
+"[-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-"
+"shallow] [--reference <repository>] [--recursive] [--[no-]single-branch] "
+"[--] [<path>...]"
 msgstr ""
-"Cabang submodul (%s) dikonfigurasikan untuk mewarisi cabang dari proyek "
-"super, tapi proyek super tidak pada cabang apapun"
 
-#: builtin/submodule--helper.c:2781
-#, c-format
-msgid "could not get a repository handle for submodule '%s'"
-msgstr "tidak dapat mendapat pegangan repositori untuk submodul '%s'"
+#: builtin/submodule--helper.c:2767
+msgid "bad value for update parameter"
+msgstr "nilai jelek untuk parameter pembaruan"
 
-#: builtin/submodule--helper.c:2814
+#: builtin/submodule--helper.c:2893
 msgid "recurse into submodules"
 msgstr "rekursi ke dalam submodul"
 
-#: builtin/submodule--helper.c:2820
+#: builtin/submodule--helper.c:2899
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr "git submodule--helper absorb-git-dirs [<opsi>] [<jalur>...]"
 
-#: builtin/submodule--helper.c:2876
+#: builtin/submodule--helper.c:2955
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr "periksa apakah itu aman untuk menulis ke berkas .gitmodules"
 
-#: builtin/submodule--helper.c:2879
+#: builtin/submodule--helper.c:2958
 msgid "unset the config in the .gitmodules file"
 msgstr "batal setel konfigurasi dalam berkas .gitmodules"
 
-#: builtin/submodule--helper.c:2884
+#: builtin/submodule--helper.c:2963
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config <nama> [<nilai>]"
 
-#: builtin/submodule--helper.c:2885
+#: builtin/submodule--helper.c:2964
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset <nama>"
 
-#: builtin/submodule--helper.c:2886
-msgid "git submodule--helper config --check-writeable"
-msgstr "git submodule--helper config --check-writeable"
-
-#: builtin/submodule--helper.c:2905 builtin/submodule--helper.c:3121
-#: builtin/submodule--helper.c:3277
+#: builtin/submodule--helper.c:2984 builtin/submodule--helper.c:3238
+#: builtin/submodule--helper.c:3395
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr "mohom pastikan berkas .gitmodules di dalam pohon kerja"
 
-#: builtin/submodule--helper.c:2921
+#: builtin/submodule--helper.c:3000
 msgid "suppress output for setting url of a submodule"
 msgstr "sembunyikan keluaran penyetelan url submodule"
 
-#: builtin/submodule--helper.c:2925
+#: builtin/submodule--helper.c:3004
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr "git submodule--helper set-url [--quiet] <jalur> <url baru>"
 
-#: builtin/submodule--helper.c:2958
+#: builtin/submodule--helper.c:3037
 msgid "set the default tracking branch to master"
 msgstr "setel cabang pelacak asali ke master"
 
-#: builtin/submodule--helper.c:2960
+#: builtin/submodule--helper.c:3039
 msgid "set the default tracking branch"
 msgstr "setel cabang pelacak asali"
 
-#: builtin/submodule--helper.c:2964
+#: builtin/submodule--helper.c:3043
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr "git submodule--helper set-branch [-q|--quiet] (-d|--default) <jalur>"
 
-#: builtin/submodule--helper.c:2965
+#: builtin/submodule--helper.c:3044
 msgid ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 msgstr ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <cabang> <jalur>"
 
-#: builtin/submodule--helper.c:2972
+#: builtin/submodule--helper.c:3051
 msgid "--branch or --default required"
 msgstr "--branch atau --default dibutuhkan"
 
-#: builtin/submodule--helper.c:3038
+#: builtin/submodule--helper.c:3072 builtin/submodule--helper.c:3375
+msgid "print only error messages"
+msgstr "hanya cetak pesan kesalahan"
+
+#: builtin/submodule--helper.c:3073
+msgid "force creation"
+msgstr "paksa pembuatan"
+
+#: builtin/submodule--helper.c:3081
+msgid "show whether the branch would be created"
+msgstr "perlihatkan apabila cabang akan dibuat"
+
+#: builtin/submodule--helper.c:3085
+msgid ""
+"git submodule--helper create-branch [-f|--force] [--create-reflog] [-q|--"
+"quiet] [-t|--track] [-n|--dry-run] <name> <start-oid> <start-name>"
+msgstr ""
+"git submodule--helper create-branch [-f|--force] [--create-reflog] [-q|--"
+"quiet] [-t|--track] [-n|--dry-run] <nama> <oid awal> <nama awal>"
+
+#: builtin/submodule--helper.c:3097
+#, c-format
+msgid "creating branch '%s'"
+msgstr "membuat cabang '%s'"
+
+#: builtin/submodule--helper.c:3155
 #, c-format
 msgid "Adding existing repo at '%s' to the index\n"
 msgstr "Menambahkan repo yang sudah ada pada '%s' ke indeks\n"
 
-#: builtin/submodule--helper.c:3041
+#: builtin/submodule--helper.c:3158
 #, c-format
 msgid "'%s' already exists and is not a valid git repo"
 msgstr "'%s' sudah ada dan bukan repo git valid"
 
-#: builtin/submodule--helper.c:3054
+#: builtin/submodule--helper.c:3171
 #, c-format
 msgid "A git directory for '%s' is found locally with remote(s):\n"
 msgstr "Sebuah direktori git untuk '%s' ditemukan lokal dengan remote:\n"
 
-#: builtin/submodule--helper.c:3061
+#: builtin/submodule--helper.c:3178
 #, c-format
 msgid ""
 "If you want to reuse this local git directory instead of cloning again from\n"
@@ -22820,84 +23490,80 @@ msgstr ""
 "atau Anda tidak yakin apa maksudnya, pilih nama yang lain dengan opsi '--"
 "name'."
 
-#: builtin/submodule--helper.c:3073
+#: builtin/submodule--helper.c:3190
 #, c-format
 msgid "Reactivating local git directory for submodule '%s'\n"
 msgstr "Mengaktifkan ulang direktori git lokal untuk submodul '%s'\n"
 
-#: builtin/submodule--helper.c:3110
+#: builtin/submodule--helper.c:3227
 #, c-format
 msgid "unable to checkout submodule '%s'"
 msgstr "Tidak dapat men-checkout submodul '%s'"
 
-#: builtin/submodule--helper.c:3149
+#: builtin/submodule--helper.c:3266
 #, c-format
 msgid "Failed to add submodule '%s'"
 msgstr "Tidak dapat menambahkan submodul '%s'"
 
-#: builtin/submodule--helper.c:3153 builtin/submodule--helper.c:3158
-#: builtin/submodule--helper.c:3166
+#: builtin/submodule--helper.c:3270 builtin/submodule--helper.c:3275
+#: builtin/submodule--helper.c:3283
 #, c-format
 msgid "Failed to register submodule '%s'"
 msgstr "Gagal mendaftarkan jalur submodul '%s'"
 
-#: builtin/submodule--helper.c:3222
+#: builtin/submodule--helper.c:3339
 #, c-format
 msgid "'%s' already exists in the index"
 msgstr "'%s' sudah ada di dalam indeks"
 
-#: builtin/submodule--helper.c:3225
+#: builtin/submodule--helper.c:3342
 #, c-format
 msgid "'%s' already exists in the index and is not a submodule"
 msgstr "'%s' sudah ada di dalam indeks dan bukan submodul"
 
-#: builtin/submodule--helper.c:3254
+#: builtin/submodule--helper.c:3372
 msgid "branch of repository to add as submodule"
 msgstr "cabang repositori untuk ditambahkan sebagai submodul"
 
-#: builtin/submodule--helper.c:3255
+#: builtin/submodule--helper.c:3373
 msgid "allow adding an otherwise ignored submodule path"
 msgstr "perbolehkan menambah jalur submodul yang diabaikan"
 
-#: builtin/submodule--helper.c:3257
-msgid "print only error messages"
-msgstr "hanya cetak pesan kesalahan"
-
-#: builtin/submodule--helper.c:3261
+#: builtin/submodule--helper.c:3379
 msgid "borrow the objects from reference repositories"
 msgstr "pinjam objek dari repositori referensi"
 
-#: builtin/submodule--helper.c:3263
+#: builtin/submodule--helper.c:3381
 msgid ""
 "sets the submodule’s name to the given string instead of defaulting to its "
 "path"
 msgstr ""
 "setel nama submodul ke untai yang diberikan daripada diasalkan ke jalurnya"
 
-#: builtin/submodule--helper.c:3270
+#: builtin/submodule--helper.c:3388
 msgid "git submodule--helper add [<options>] [--] <repository> [<path>]"
 msgstr "git submodule--helper add [<opsi>] [--] <repositori> [<jalur>]"
 
-#: builtin/submodule--helper.c:3298
+#: builtin/submodule--helper.c:3416
 msgid "Relative path can only be used from the toplevel of the working tree"
 msgstr "Jalur relatif hanya dapat digunakan dari level atas dari pohon kerja"
 
-#: builtin/submodule--helper.c:3306
+#: builtin/submodule--helper.c:3425
 #, c-format
 msgid "repo URL: '%s' must be absolute or begin with ./|../"
 msgstr "URL repo: '%s' harus absolut atau diawali dengan ./|../"
 
-#: builtin/submodule--helper.c:3341
+#: builtin/submodule--helper.c:3460
 #, c-format
 msgid "'%s' is not a valid submodule name"
 msgstr "'%s' bukan nama submodul yang valid"
 
-#: builtin/submodule--helper.c:3405 git.c:452 git.c:726
+#: builtin/submodule--helper.c:3520 git.c:453 git.c:729
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s tidak mendukung --super-prefix"
 
-#: builtin/submodule--helper.c:3411
+#: builtin/submodule--helper.c:3526
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "'%s' bukan subperintah submodule--helper valid"
@@ -22930,7 +23596,7 @@ msgstr "alasan"
 msgid "reason of the update"
 msgstr "alasan pembaruan"
 
-#: builtin/tag.c:25
+#: builtin/tag.c:26
 msgid ""
 "git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]\n"
 "        <tagname> [<head>]"
@@ -22938,11 +23604,11 @@ msgstr ""
 "git tag [-a | -s | -u <id kunci>] [-f] [-m <pesan | -F <berkas>]\n"
 "        <nama tag> [<kepala>]"
 
-#: builtin/tag.c:27
+#: builtin/tag.c:28
 msgid "git tag -d <tagname>..."
 msgstr "git tag -d <nama tag>..."
 
-#: builtin/tag.c:28
+#: builtin/tag.c:29
 msgid ""
 "git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--"
 "points-at <object>]\n"
@@ -22954,21 +23620,21 @@ msgstr ""
 "        [--format=<format>] [--merged <komit>] [--no-merged <komit>] "
 "[<pola>...]"
 
-#: builtin/tag.c:30
+#: builtin/tag.c:31
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr "git tag -v [--format]<format>] <nama tag>..."
 
-#: builtin/tag.c:100
+#: builtin/tag.c:101
 #, c-format
 msgid "tag '%s' not found."
 msgstr "tag '%s' tidak ditemukan."
 
-#: builtin/tag.c:135
+#: builtin/tag.c:136
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr "Tag '%s' (yaitu %s) dihapus\n"
 
-#: builtin/tag.c:170
+#: builtin/tag.c:171
 #, c-format
 msgid ""
 "\n"
@@ -22981,7 +23647,7 @@ msgstr ""
 "  %s\n"
 "Baris yang diawali dengan '%c' akan diabaikan.\n"
 
-#: builtin/tag.c:174
+#: builtin/tag.c:175
 #, c-format
 msgid ""
 "\n"
@@ -22996,11 +23662,11 @@ msgstr ""
 "Baris yang diawali dengan '%c' akan disimpan; Anda dapat menghapus itu bila "
 "Anda mau.\n"
 
-#: builtin/tag.c:240
+#: builtin/tag.c:241
 msgid "unable to sign the tag"
 msgstr "tidak dapat menandatangani tag"
 
-#: builtin/tag.c:258
+#: builtin/tag.c:259
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -23014,118 +23680,122 @@ msgstr ""
 "\n"
 "\tgit tag -f %s %s^{}"
 
-#: builtin/tag.c:274
+#: builtin/tag.c:275
 msgid "bad object type."
 msgstr "tipe objek jelek."
 
-#: builtin/tag.c:325
+#: builtin/tag.c:326
 msgid "no tag message?"
 msgstr "tidak ada pesan tag?"
 
-#: builtin/tag.c:332
+#: builtin/tag.c:333
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "Pesan tag dibiarkan di %s\n"
 
-#: builtin/tag.c:444
+#: builtin/tag.c:445
 msgid "list tag names"
 msgstr "daftarkan nama tag"
 
-#: builtin/tag.c:446
+#: builtin/tag.c:447
 msgid "print <n> lines of each tag message"
 msgstr "cetak <n> baris dari setiap pesan tag"
 
-#: builtin/tag.c:448
+#: builtin/tag.c:449
 msgid "delete tags"
 msgstr "hapus tag"
 
-#: builtin/tag.c:449
+#: builtin/tag.c:450
 msgid "verify tags"
 msgstr "verifikasi tag"
 
-#: builtin/tag.c:451
+#: builtin/tag.c:452
 msgid "Tag creation options"
 msgstr "Opsi pembuatan tag"
 
-#: builtin/tag.c:453
+#: builtin/tag.c:454
 msgid "annotated tag, needs a message"
 msgstr "tag bercatat, butuh sebuah pesan"
 
-#: builtin/tag.c:455
+#: builtin/tag.c:456
 msgid "tag message"
 msgstr "pesan tag"
 
-#: builtin/tag.c:457
+#: builtin/tag.c:458
 msgid "force edit of tag message"
 msgstr "paksa sunting pesan tag"
 
-#: builtin/tag.c:458
+#: builtin/tag.c:459
 msgid "annotated and GPG-signed tag"
 msgstr "tag bercatat dan bertandatangan GPG"
 
-#: builtin/tag.c:461
+#: builtin/tag.c:462
 msgid "use another key to sign the tag"
 msgstr "gunakan kunci yang lain untuk menandatangani tag"
 
-#: builtin/tag.c:462
+#: builtin/tag.c:463
 msgid "replace the tag if exists"
 msgstr "ganti tag jika ada"
 
-#: builtin/tag.c:463 builtin/update-ref.c:511
+#: builtin/tag.c:464 builtin/update-ref.c:511
 msgid "create a reflog"
 msgstr "buat log referensi"
 
-#: builtin/tag.c:465
+#: builtin/tag.c:466
 msgid "Tag listing options"
 msgstr "Opsi daftar tag"
 
-#: builtin/tag.c:466
+#: builtin/tag.c:467
 msgid "show tag list in columns"
 msgstr "perlihatkan daftar tag dalam kolom"
 
-#: builtin/tag.c:467 builtin/tag.c:469
+#: builtin/tag.c:468 builtin/tag.c:470
 msgid "print only tags that contain the commit"
 msgstr "hanya cetak tag yang berisi komit"
 
-#: builtin/tag.c:468 builtin/tag.c:470
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that don't contain the commit"
 msgstr "hanya cetak tag yang tidak berisi komit"
 
-#: builtin/tag.c:471
+#: builtin/tag.c:472
 msgid "print only tags that are merged"
 msgstr "hanya cetak tag yang tergabung"
 
-#: builtin/tag.c:472
+#: builtin/tag.c:473
 msgid "print only tags that are not merged"
 msgstr "hanya cetak tag yang tak tergabung"
 
-#: builtin/tag.c:476
+#: builtin/tag.c:477
 msgid "print only tags of the object"
 msgstr "hanya cetak tag dari objek"
 
-#: builtin/tag.c:558
+#: builtin/tag.c:559
 #, c-format
 msgid "the '%s' option is only allowed in list mode"
 msgstr "opsi '%s' hanya diperbolehkan dalam mode daftar"
 
-#: builtin/tag.c:597
+#: builtin/tag.c:598
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "'%s' bukan nama tag yang valid."
 
-#: builtin/tag.c:602
+#: builtin/tag.c:603
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "tag '%s' sudah ada"
 
-#: builtin/tag.c:633
+#: builtin/tag.c:634
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "Tag '%s' diperbarui (yaitu %s)\n"
 
+#: builtin/unpack-objects.c:95
+msgid "pack exceeds maximum allowed size"
+msgstr "paket melebihi ukuran maksimum yang diperbolehkan"
+
 #: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
-msgstr ""
+msgstr "Membongkar objek"
 
 #: builtin/update-index.c:84
 #, c-format
@@ -23180,143 +23850,143 @@ msgstr " OK"
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<opsi>] [--] [<berkas>...]"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:993
 msgid "continue refresh even when index needs update"
 msgstr "lanjutkan penyegaran bahkan ketika indeks perlu diperbarui"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:996
 msgid "refresh: ignore submodules"
 msgstr "refresh: abaikan submodul"
 
-#: builtin/update-index.c:980
+#: builtin/update-index.c:999
 msgid "do not ignore new files"
 msgstr "jangan abaikan berkas baru"
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:1001
 msgid "let files replace directories and vice-versa"
 msgstr "biarkan berkas menggantikan direktori dan sebaliknya"
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:1003
 msgid "notice files missing from worktree"
 msgstr "catat berkas hilang dari pohon kerja"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:1005
 msgid "refresh even if index contains unmerged entries"
 msgstr "segarkan bahkan jika indeks berisi entri tak tergabung"
 
-#: builtin/update-index.c:989
+#: builtin/update-index.c:1008
 msgid "refresh stat information"
 msgstr "segarkan informasi stat"
 
-#: builtin/update-index.c:993
+#: builtin/update-index.c:1012
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "seperti --refresh, tapi abaikan setelan assume-unchanged"
 
-#: builtin/update-index.c:997
+#: builtin/update-index.c:1016
 msgid "<mode>,<object>,<path>"
 msgstr "<mode>,<objek>,<jalur>"
 
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1017
 msgid "add the specified entry to the index"
 msgstr "tambahkan entri yang disebutkan ke indeks"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1027
 msgid "mark files as \"not changing\""
 msgstr "tandai berkas sebagai \"not changing\""
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1030
 msgid "clear assumed-unchanged bit"
 msgstr "bersihkan bita assumed-unchanged"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1033
 msgid "mark files as \"index-only\""
 msgstr "tandai berkas sebagai \"index-only\""
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1036
 msgid "clear skip-worktree bit"
 msgstr "bersihkan bita skip-worktree"
 
-#: builtin/update-index.c:1020
+#: builtin/update-index.c:1039
 msgid "do not touch index-only entries"
 msgstr "jangan sentuh entri index-only"
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1041
 msgid "add to index only; do not add content to object database"
 msgstr "hanya tambahkan ke indeks; jangan tambahkan konten ke basis data objek"
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1043
 msgid "remove named paths even if present in worktree"
 msgstr "hapus jalur bernama bahkan jika ada dalam pohon kerja"
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1045
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "dengan --stdin: baris masukan diakhiri dengan bita null"
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1047
 msgid "read list of paths to be updated from standard input"
 msgstr "baca daftar jalur yang akan diperbarui dari masukan standar"
 
-#: builtin/update-index.c:1032
+#: builtin/update-index.c:1051
 msgid "add entries from standard input to the index"
 msgstr "tambahkan entri dari masukan standar ke indeks"
 
-#: builtin/update-index.c:1036
+#: builtin/update-index.c:1055
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "populasi ulang tahapan #2 dan #3 untuk jalur yang terdaftar"
 
-#: builtin/update-index.c:1040
+#: builtin/update-index.c:1059
 msgid "only update entries that differ from HEAD"
 msgstr "hanya perbarui entri yang berbeda dari HEAD"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1063
 msgid "ignore files missing from worktree"
 msgstr "abaikan berkas yang hilang dari pohon kerja"
 
-#: builtin/update-index.c:1047
+#: builtin/update-index.c:1066
 msgid "report actions to standard output"
 msgstr "laporkan aksi ke keluaran standar"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1068
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(untuk porselen) lupakan konflik tak terselesaikan yang disimpan"
 
-#: builtin/update-index.c:1053
+#: builtin/update-index.c:1072
 msgid "write index in this format"
 msgstr "tulis indeks dalam format ini"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1074
 msgid "enable or disable split index"
 msgstr "aktifkan atau nonaktifkan indeks terpisah"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1076
 msgid "enable/disable untracked cache"
 msgstr "aktifkan/nonaktifkan tembolok tak terlacak"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1078
 msgid "test if the filesystem supports untracked cache"
 msgstr "uji jika sistem berkas mendukung tembolok tak terlacak"
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1080
 msgid "enable untracked cache without testing the filesystem"
 msgstr "aktifkan tembolok tak terlacak tanpa menguji sistem berkas"
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1082
 msgid "write out the index even if is not flagged as changed"
 msgstr "tulis indeks bahkan jika tidak dianggap berubah"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1084
 msgid "enable or disable file system monitor"
 msgstr "aktifkan atau nonaktifkan monitor sistem berkas"
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1086
 msgid "mark files as fsmonitor valid"
 msgstr "tandai berkas sebagai fsmonitor valid"
 
-#: builtin/update-index.c:1070
+#: builtin/update-index.c:1089
 msgid "clear fsmonitor valid bit"
 msgstr "bersihkan bita fsmonitor valid"
 
-#: builtin/update-index.c:1173
+#: builtin/update-index.c:1195
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
@@ -23324,7 +23994,7 @@ msgstr ""
 "core.splitIndex disetel ke false; hapus atau ubah, jika Anda benar-benar "
 "ingin mengaktifkan indeks terpisah"
 
-#: builtin/update-index.c:1182
+#: builtin/update-index.c:1204
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
@@ -23332,7 +24002,7 @@ msgstr ""
 "core.splitIndex disetel ke true; hapus atau ubah, jika Anda benar-benar  "
 "ingin menonaktifkan indeks terpisah"
 
-#: builtin/update-index.c:1194
+#: builtin/update-index.c:1216
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -23340,11 +24010,11 @@ msgstr ""
 "core.untrackedCache disetel ke true; hapus atau ubah, jika Anda benar-benar "
 "ingin menonaktifkan tembolok tak terlacak"
 
-#: builtin/update-index.c:1198
+#: builtin/update-index.c:1220
 msgid "Untracked cache disabled"
 msgstr "Tembolok tak terlacak dinonaktifkan"
 
-#: builtin/update-index.c:1206
+#: builtin/update-index.c:1228
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -23352,29 +24022,29 @@ msgstr ""
 "core.untrackedCache disetel ke false; hapus atau ubah, jika Anda benar-benar "
 "ingin mengaktifkan tembolok tak terlacak"
 
-#: builtin/update-index.c:1210
+#: builtin/update-index.c:1232
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "Tembolok tak terlacak diaktifkan untuk '%s'"
 
-#: builtin/update-index.c:1218
+#: builtin/update-index.c:1241
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
 "core.fsmonitor tak disetel; setel jika Anda benar-benar ingin mengaktifkan "
 "fsmonitor"
 
-#: builtin/update-index.c:1222
+#: builtin/update-index.c:1246
 msgid "fsmonitor enabled"
 msgstr "fsmonitor diaktifkan"
 
-#: builtin/update-index.c:1225
+#: builtin/update-index.c:1250
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 "core.fsmonitor disetel; hapus jika Anda benar-benar ingin menonaktifkan "
 "fsmonitor"
 
-#: builtin/update-index.c:1229
+#: builtin/update-index.c:1254
 msgid "fsmonitor disabled"
 msgstr "fsmonitor dinonaktifkan"
 
@@ -23407,10 +24077,6 @@ msgstr "stdin punya argumen yang diakhiri dengan NUL"
 msgid "read updates from stdin"
 msgstr "baca pembaruan dari masukan standar"
 
-#: builtin/update-server-info.c:7
-msgid "git update-server-info [--force]"
-msgstr ""
-
 #: builtin/update-server-info.c:15
 msgid "update the info files from scratch"
 msgstr ""
@@ -23469,258 +24135,300 @@ msgstr "cetak isi tag"
 
 #: builtin/worktree.c:19
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
-msgstr ""
+msgstr "git worktree add [<opsi>] <jalur> [<mirip komit>]"
 
 #: builtin/worktree.c:20
 msgid "git worktree list [<options>]"
-msgstr ""
+msgstr "git worktree list [<opsi>]"
 
 #: builtin/worktree.c:21
 msgid "git worktree lock [<options>] <path>"
-msgstr ""
+msgstr "git worktree lock [<opsi>] <jalur>"
 
 #: builtin/worktree.c:22
 msgid "git worktree move <worktree> <new-path>"
-msgstr ""
+msgstr "git worktree move <pohon kerja> <jalur baru>"
 
 #: builtin/worktree.c:23
 msgid "git worktree prune [<options>]"
-msgstr ""
+msgstr "git worktree prune [<opsi>]"
 
 #: builtin/worktree.c:24
 msgid "git worktree remove [<options>] <worktree>"
-msgstr ""
+msgstr "git worktree remove [<opsi>] <pohon kerja>"
 
 #: builtin/worktree.c:25
+msgid "git worktree repair [<path>...]"
+msgstr "git worktree repair [<jalur>...]"
+
+#: builtin/worktree.c:26
 msgid "git worktree unlock <path>"
-msgstr ""
+msgstr "git worktree unlock <jalur>"
 
-#: builtin/worktree.c:75
+#: builtin/worktree.c:76
 #, c-format
 msgid "Removing %s/%s: %s"
-msgstr ""
+msgstr "Menghapus %s/%s: %s"
 
-#: builtin/worktree.c:148
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
-msgstr ""
+msgstr "laporkan pohon kerja terpangkas"
 
-#: builtin/worktree.c:150
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
-msgstr ""
+msgstr "kadaluarsakan pohon kerja yang lebih tua dari <waktu>"
 
-#: builtin/worktree.c:220
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
-msgstr ""
+msgstr "'%s' sudah ada"
 
-#: builtin/worktree.c:229
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
-msgstr ""
+msgstr "tujuan pohon kerja '%s' tidak dapat diguanakan"
 
-#: builtin/worktree.c:234
+#: builtin/worktree.c:235
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
 "use '%s -f -f' to override, or 'unlock' and 'prune' or 'remove' to clear"
 msgstr ""
+"'%s' adalah pohon kerja hilang tapi terkunci;\n"
+"gunakan '%s -f -f' untuk menimpa, atau 'unlock' dan 'prune' atau 'remove' "
+"untuk membersihkan"
 
-#: builtin/worktree.c:236
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
 "use '%s -f' to override, or 'prune' or 'remove' to clear"
 msgstr ""
+"'%s' adalah pohon kerja hilang tapi telah didaftarkan;\n"
+"gunakan '%s -f' untuk menimpa, atau 'prune' atau 'remove' untuk membersihkan"
 
-#: builtin/worktree.c:287
+#: builtin/worktree.c:248
 #, c-format
-msgid "could not create directory of '%s'"
+msgid "failed to copy '%s' to '%s'; sparse-checkout may not work correctly"
 msgstr ""
+"gagal menyalin '%s' ke '%s'; checkout tipis mungkin tidak bekerja dengan baik"
+
+#: builtin/worktree.c:268
+#, c-format
+msgid "failed to copy worktree config from '%s' to '%s'"
+msgstr "Gagal menyalin konfigurasi pohon kerja dari '%s' ke '%s'"
+
+#: builtin/worktree.c:280 builtin/worktree.c:285
+#, c-format
+msgid "failed to unset '%s' in '%s'"
+msgstr "gagal menyetel balik '%s' di '%s'"
+
+#: builtin/worktree.c:356
+#, c-format
+msgid "could not create directory of '%s'"
+msgstr "tidak dapat membuat direktori '%s'"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:378
 msgid "initializing"
-msgstr ""
+msgstr "menginisialisasi"
 
-#: builtin/worktree.c:420 builtin/worktree.c:426
+#: builtin/worktree.c:492 builtin/worktree.c:498
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
-msgstr ""
+msgstr "Menyiapkan pohon kerja (cabang baru '%s')"
 
-#: builtin/worktree.c:422
+#: builtin/worktree.c:494
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr ""
+"Menyiapkan pohon kerja (menyetel ulang cabang '%s'; sebelumnya pada %s)"
 
-#: builtin/worktree.c:431
+#: builtin/worktree.c:503
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
-msgstr ""
+msgstr "Menyiapkan pohon kerja (men-checkout '%s')"
 
-#: builtin/worktree.c:437
+#: builtin/worktree.c:509
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
-msgstr ""
+msgstr "Menyiapkan pohon kerja (HEAD terpisah %s)"
 
-#: builtin/worktree.c:482
+#: builtin/worktree.c:554
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr ""
+"checkout <cabang> bahkan jika sudah di-checkout pada pohon kerja lainnya"
 
-#: builtin/worktree.c:485
+#: builtin/worktree.c:557
 msgid "create a new branch"
-msgstr ""
+msgstr "buat sebuah cabang baru"
 
-#: builtin/worktree.c:487
+#: builtin/worktree.c:559
 msgid "create or reset a branch"
-msgstr ""
+msgstr "buat atau setel ulang sebuah cabang"
 
-#: builtin/worktree.c:489
+#: builtin/worktree.c:561
 msgid "populate the new working tree"
-msgstr ""
+msgstr "isikan pohon kerja baru"
 
-#: builtin/worktree.c:490
+#: builtin/worktree.c:562
 msgid "keep the new working tree locked"
-msgstr ""
+msgstr "tetap pohon kerja baru terkunci"
 
-#: builtin/worktree.c:492 builtin/worktree.c:729
+#: builtin/worktree.c:564 builtin/worktree.c:809
 msgid "reason for locking"
-msgstr ""
+msgstr "alasan penguncian"
 
-#: builtin/worktree.c:495
+#: builtin/worktree.c:567
 msgid "set up tracking mode (see git-branch(1))"
-msgstr ""
+msgstr "pasang mode pelacakan (lihat git-branch(1))"
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:570
 msgid "try to match the new branch name with a remote-tracking branch"
-msgstr ""
+msgstr "coba cocokkan nama cabang baru dengan sebuah cabang pelacakan remote"
 
-#: builtin/worktree.c:512
+#: builtin/worktree.c:584
 msgid "added with --lock"
-msgstr ""
+msgstr "tambahkan dengan --lock"
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:646
 msgid "--[no-]track can only be used if a new branch is created"
-msgstr ""
+msgstr "--[no-]track hanya dapat digunakan jika cabang baru dibuat"
 
-#: builtin/worktree.c:691
+#: builtin/worktree.c:766
 msgid "show extended annotations and reasons, if available"
 msgstr ""
 
-#: builtin/worktree.c:693
+#: builtin/worktree.c:768
 msgid "add 'prunable' annotation to worktrees older than <time>"
 msgstr ""
+"tambahkan anotasi 'dapat dipangkas' ke pohon kerja lebih tua dari <time>"
 
-#: builtin/worktree.c:741 builtin/worktree.c:774 builtin/worktree.c:848
-#: builtin/worktree.c:972
+#: builtin/worktree.c:770
+msgid "terminate records with a NUL character"
+msgstr "akhiri rekaman dengan karakter NUL"
+
+#: builtin/worktree.c:821 builtin/worktree.c:854 builtin/worktree.c:928
+#: builtin/worktree.c:1052
 #, c-format
 msgid "'%s' is not a working tree"
-msgstr ""
+msgstr "'%s' bukan sebuah pohon kerja"
 
-#: builtin/worktree.c:743 builtin/worktree.c:776
+#: builtin/worktree.c:823 builtin/worktree.c:856
 msgid "The main working tree cannot be locked or unlocked"
-msgstr ""
+msgstr "Pohon kerja utama tidak dapat dikunci atau dibuka kunci"
 
-#: builtin/worktree.c:748
+#: builtin/worktree.c:828
 #, c-format
 msgid "'%s' is already locked, reason: %s"
-msgstr ""
+msgstr "'%s' sudah terkunci, alasan: %s"
 
-#: builtin/worktree.c:750
+#: builtin/worktree.c:830
 #, c-format
 msgid "'%s' is already locked"
-msgstr ""
+msgstr "'%s' sudah terkunci"
 
-#: builtin/worktree.c:778
+#: builtin/worktree.c:858
 #, c-format
 msgid "'%s' is not locked"
-msgstr ""
+msgstr "'%s' tidak terkunci"
 
-#: builtin/worktree.c:819
+#: builtin/worktree.c:899
 msgid "working trees containing submodules cannot be moved or removed"
-msgstr ""
+msgstr "pohon kerja yang berisi submodul tidak dapat dipindahkan atau dihapus"
 
-#: builtin/worktree.c:827
+#: builtin/worktree.c:907
 msgid "force move even if worktree is dirty or locked"
-msgstr ""
+msgstr "paksa pindah bahkan jika pohon kerja kotor atau terkunci"
 
-#: builtin/worktree.c:850 builtin/worktree.c:974
+#: builtin/worktree.c:930 builtin/worktree.c:1054
 #, c-format
 msgid "'%s' is a main working tree"
-msgstr ""
+msgstr "'%s' adalah pohon kerja utama"
 
-#: builtin/worktree.c:855
+#: builtin/worktree.c:935
 #, c-format
 msgid "could not figure out destination name from '%s'"
-msgstr ""
+msgstr "tidak dapat menebak nama tujuan dari '%s'"
 
-#: builtin/worktree.c:868
+#: builtin/worktree.c:948
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
 "use 'move -f -f' to override or unlock first"
 msgstr ""
+"tidak dapat memindahkan pohon kerja terkunci, alasan penguncian: %s\n"
+"gunakan 'move -f -f' untuk memaksakan atau membuka kunci terlebih dahulu"
 
-#: builtin/worktree.c:870
+#: builtin/worktree.c:950
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
 msgstr ""
+"tidak dapat memindahkan pohon kerja terkunci;\n"
+"gunakan 'move -f -f' untuk memaksakan atau membuka kunci terlebih dahulu"
 
-#: builtin/worktree.c:873
+#: builtin/worktree.c:953
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
-msgstr ""
+msgstr "validasi gagal, tidak dapat memindahkan pohon kerja: %s"
 
-#: builtin/worktree.c:878
+#: builtin/worktree.c:958
 #, c-format
 msgid "failed to move '%s' to '%s'"
-msgstr ""
+msgstr "gagal memindahkan '%s' ke '%s'"
 
-#: builtin/worktree.c:924
+#: builtin/worktree.c:1004
 #, c-format
 msgid "failed to run 'git status' on '%s'"
-msgstr ""
+msgstr "tidak dapat menjalankan 'git status' pada '%s'"
 
-#: builtin/worktree.c:928
+#: builtin/worktree.c:1008
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
+"'%s' berisi berkas termodifikasi atau tak terlacak, gunakan --force untuk "
+"menghapus"
 
-#: builtin/worktree.c:933
+#: builtin/worktree.c:1013
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
-msgstr ""
+msgstr "gagal menjalankan 'git status' pada '%s', kode %d"
 
-#: builtin/worktree.c:956
+#: builtin/worktree.c:1036
 msgid "force removal even if worktree is dirty or locked"
-msgstr ""
+msgstr "paksa penghapusan bahkan jika pohon kerja kotor atau terkunci"
 
-#: builtin/worktree.c:979
+#: builtin/worktree.c:1059
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
 "use 'remove -f -f' to override or unlock first"
 msgstr ""
+"tidak dapat menghapus pohon kerja terkunci, alasan penguncian: %s\n"
+"gunakan 'remove -f -f' untuk memaksakan atau buka kunci terlebih dahulu"
 
-#: builtin/worktree.c:981
+#: builtin/worktree.c:1061
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
 msgstr ""
+"tidak dapat menghapus pohon kerja terkunci;\n"
+"gunakan 'remove -f -f' untuk memaksakan atau buka kunci terlebih dahulu"
 
-#: builtin/worktree.c:984
+#: builtin/worktree.c:1064
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
-msgstr ""
+msgstr "validasi gagal, tidak dapat menghapus pohon kerja: %s"
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:1088
 #, c-format
 msgid "repair: %s: %s"
-msgstr ""
+msgstr "perbaikan: %s: %s"
 
-#: builtin/worktree.c:1011
+#: builtin/worktree.c:1091
 #, c-format
 msgid "error: %s: %s"
-msgstr ""
+msgstr "kesalahan: %s: %s"
 
 #: builtin/write-tree.c:15
 msgid "git write-tree [--missing-ok] [--prefix=<prefix>/]"
@@ -23823,29 +24531,29 @@ msgstr "alias kosong untuk %s"
 msgid "recursive alias: %s"
 msgstr "alias rekursif: %s"
 
-#: git.c:479
+#: git.c:480
 msgid "write failure on standard output"
 msgstr "kegagalan menulis pada keluaran standar"
 
-#: git.c:481
+#: git.c:482
 msgid "unknown write failure on standard output"
 msgstr "kegagal menulis tidak diketahui pada keluaran standar"
 
-#: git.c:483
+#: git.c:484
 msgid "close failed on standard output"
 msgstr "penutupan gagal pada keluaran standar"
 
-#: git.c:835
+#: git.c:838
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr "putaran alias terdeteksi: perluasan '%s' tidak berhenti:%s"
 
-#: git.c:885
+#: git.c:888
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "tidak dapat menangani %s sebagai bawaan"
 
-#: git.c:898
+#: git.c:901
 #, c-format
 msgid ""
 "usage: %s\n"
@@ -23854,12 +24562,12 @@ msgstr ""
 "penggunaan: %s\n"
 "\n"
 
-#: git.c:918
+#: git.c:921
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr "perluasan alias '%s' gagal; '%s' bukan sebuah perintah git\n"
 
-#: git.c:930
+#: git.c:933
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "gagal menjalankan perintah '%s': %s\n"
@@ -24008,139 +24716,139 @@ msgid ""
 "   redirect: %s"
 msgstr ""
 
-#: remote-curl.c:183
+#: remote-curl.c:184
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr ""
 
-#: remote-curl.c:304
+#: remote-curl.c:308
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr ""
 
-#: remote-curl.c:405
+#: remote-curl.c:409
 msgid "invalid server response; expected service, got flush packet"
 msgstr ""
 
-#: remote-curl.c:436
+#: remote-curl.c:440
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr ""
 
-#: remote-curl.c:496
+#: remote-curl.c:500
 #, c-format
 msgid "repository '%s' not found"
 msgstr ""
 
-#: remote-curl.c:500
+#: remote-curl.c:504
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr ""
 
-#: remote-curl.c:504
+#: remote-curl.c:508
 #, c-format
 msgid "unable to access '%s' with http.pinnedPubkey configuration: %s"
 msgstr ""
 
-#: remote-curl.c:508
+#: remote-curl.c:512
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr ""
 
-#: remote-curl.c:514
+#: remote-curl.c:518
 #, c-format
 msgid "redirecting to %s"
 msgstr ""
 
-#: remote-curl.c:645
+#: remote-curl.c:649
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr ""
 
-#: remote-curl.c:657
+#: remote-curl.c:661
 msgid "remote server sent unexpected response end packet"
 msgstr ""
 
-#: remote-curl.c:726
+#: remote-curl.c:730
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr ""
 
-#: remote-curl.c:755
+#: remote-curl.c:759
 #, c-format
 msgid "remote-curl: bad line length character: %.4s"
 msgstr ""
 
-#: remote-curl.c:757
+#: remote-curl.c:761
 msgid "remote-curl: unexpected response end packet"
 msgstr ""
 
-#: remote-curl.c:833
+#: remote-curl.c:837
 #, c-format
 msgid "RPC failed; %s"
 msgstr ""
 
-#: remote-curl.c:873
+#: remote-curl.c:877
 msgid "cannot handle pushes this big"
 msgstr ""
 
-#: remote-curl.c:986
+#: remote-curl.c:990
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr ""
 
-#: remote-curl.c:990
+#: remote-curl.c:994
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr ""
 
-#: remote-curl.c:1040
+#: remote-curl.c:1044
 #, c-format
 msgid "%d bytes of length header were received"
 msgstr ""
 
-#: remote-curl.c:1042
+#: remote-curl.c:1046
 #, c-format
 msgid "%d bytes of body are still expected"
 msgstr ""
 
-#: remote-curl.c:1131
+#: remote-curl.c:1135
 msgid "dumb http transport does not support shallow capabilities"
 msgstr ""
 
-#: remote-curl.c:1146
+#: remote-curl.c:1150
 msgid "fetch failed."
 msgstr ""
 
-#: remote-curl.c:1192
+#: remote-curl.c:1198
 msgid "cannot fetch by sha1 over smart http"
 msgstr ""
 
-#: remote-curl.c:1236 remote-curl.c:1242
+#: remote-curl.c:1242 remote-curl.c:1248
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr ""
 
-#: remote-curl.c:1254 remote-curl.c:1372
+#: remote-curl.c:1260 remote-curl.c:1378
 #, c-format
 msgid "http transport does not support %s"
 msgstr ""
 
-#: remote-curl.c:1290
+#: remote-curl.c:1296
 msgid "git-http-push failed"
 msgstr ""
 
-#: remote-curl.c:1478
+#: remote-curl.c:1485
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr ""
 
-#: remote-curl.c:1510
+#: remote-curl.c:1517
 msgid "remote-curl: error reading command stream from git"
 msgstr ""
 
-#: remote-curl.c:1517
+#: remote-curl.c:1524
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr ""
 
-#: remote-curl.c:1558
+#: remote-curl.c:1565
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr ""
@@ -24153,158 +24861,171 @@ msgstr ""
 msgid "could not find enlistment root"
 msgstr ""
 
-#: contrib/scalar/scalar.c:89 contrib/scalar/scalar.c:351
-#: contrib/scalar/scalar.c:436 contrib/scalar/scalar.c:579
+#: contrib/scalar/scalar.c:89 contrib/scalar/scalar.c:350
+#: contrib/scalar/scalar.c:435 contrib/scalar/scalar.c:578
 #, c-format
 msgid "could not switch to '%s'"
 msgstr ""
 
-#: contrib/scalar/scalar.c:180
+#: contrib/scalar/scalar.c:179
 #, c-format
 msgid "could not configure %s=%s"
 msgstr ""
 
-#: contrib/scalar/scalar.c:198
+#: contrib/scalar/scalar.c:197
 msgid "could not configure log.excludeDecoration"
 msgstr ""
 
-#: contrib/scalar/scalar.c:219
+#: contrib/scalar/scalar.c:218
 msgid "Scalar enlistments require a worktree"
 msgstr ""
 
-#: contrib/scalar/scalar.c:311
+#: contrib/scalar/scalar.c:310
 #, c-format
 msgid "remote HEAD is not a branch: '%.*s'"
 msgstr ""
 
-#: contrib/scalar/scalar.c:317
+#: contrib/scalar/scalar.c:316
 msgid "failed to get default branch name from remote; using local default"
 msgstr ""
 
-#: contrib/scalar/scalar.c:330
+#: contrib/scalar/scalar.c:329
 msgid "failed to get default branch name"
 msgstr ""
 
-#: contrib/scalar/scalar.c:341
+#: contrib/scalar/scalar.c:340
 msgid "failed to unregister repository"
 msgstr ""
 
-#: contrib/scalar/scalar.c:356
+#: contrib/scalar/scalar.c:355
 msgid "failed to delete enlistment directory"
 msgstr ""
 
-#: contrib/scalar/scalar.c:376
+#: contrib/scalar/scalar.c:375
 msgid "branch to checkout after clone"
 msgstr ""
 
-#: contrib/scalar/scalar.c:378
+#: contrib/scalar/scalar.c:377
 msgid "when cloning, create full working directory"
 msgstr ""
 
-#: contrib/scalar/scalar.c:380
+#: contrib/scalar/scalar.c:379
 msgid "only download metadata for the branch that will be checked out"
 msgstr ""
 
-#: contrib/scalar/scalar.c:385
+#: contrib/scalar/scalar.c:384
 msgid "scalar clone [<options>] [--] <repo> [<dir>]"
 msgstr ""
 
-#: contrib/scalar/scalar.c:410
+#: contrib/scalar/scalar.c:409
 #, c-format
 msgid "cannot deduce worktree name from '%s'"
 msgstr ""
 
-#: contrib/scalar/scalar.c:419
+#: contrib/scalar/scalar.c:418
 #, c-format
 msgid "directory '%s' exists already"
 msgstr ""
 
-#: contrib/scalar/scalar.c:446
+#: contrib/scalar/scalar.c:445
 #, c-format
 msgid "failed to get default branch for '%s'"
 msgstr ""
 
-#: contrib/scalar/scalar.c:457
+#: contrib/scalar/scalar.c:456
 #, c-format
 msgid "could not configure remote in '%s'"
 msgstr ""
 
-#: contrib/scalar/scalar.c:466
+#: contrib/scalar/scalar.c:465
 #, c-format
 msgid "could not configure '%s'"
 msgstr ""
 
-#: contrib/scalar/scalar.c:469
+#: contrib/scalar/scalar.c:468
 msgid "partial clone failed; attempting full clone"
 msgstr ""
 
-#: contrib/scalar/scalar.c:473
+#: contrib/scalar/scalar.c:472
 msgid "could not configure for full clone"
 msgstr ""
 
-#: contrib/scalar/scalar.c:505
+#: contrib/scalar/scalar.c:504
 msgid "`scalar list` does not take arguments"
 msgstr ""
 
-#: contrib/scalar/scalar.c:518
+#: contrib/scalar/scalar.c:517
 msgid "scalar register [<enlistment>]"
 msgstr ""
 
-#: contrib/scalar/scalar.c:545
+#: contrib/scalar/scalar.c:544
 msgid "reconfigure all registered enlistments"
 msgstr ""
 
-#: contrib/scalar/scalar.c:549
+#: contrib/scalar/scalar.c:548
 msgid "scalar reconfigure [--all | <enlistment>]"
 msgstr ""
 
-#: contrib/scalar/scalar.c:567
+#: contrib/scalar/scalar.c:566
 msgid "--all or <enlistment>, but not both"
 msgstr ""
 
-#: contrib/scalar/scalar.c:582
+#: contrib/scalar/scalar.c:581
 #, c-format
 msgid "git repository gone in '%s'"
 msgstr ""
 
-#: contrib/scalar/scalar.c:622
+#: contrib/scalar/scalar.c:621
 msgid ""
 "scalar run <task> [<enlistment>]\n"
 "Tasks:\n"
 msgstr ""
 
-#: contrib/scalar/scalar.c:640
+#: contrib/scalar/scalar.c:639
 #, c-format
 msgid "no such task: '%s'"
 msgstr ""
 
-#: contrib/scalar/scalar.c:690
+#: contrib/scalar/scalar.c:689
 msgid "scalar unregister [<enlistment>]"
 msgstr ""
 
-#: contrib/scalar/scalar.c:737
+#: contrib/scalar/scalar.c:736
 msgid "scalar delete <enlistment>"
 msgstr ""
 
-#: contrib/scalar/scalar.c:752
+#: contrib/scalar/scalar.c:751
 msgid "refusing to delete current working directory"
 msgstr ""
 
-#: contrib/scalar/scalar.c:767
+#: contrib/scalar/scalar.c:766
 msgid "include Git version"
 msgstr ""
 
-#: contrib/scalar/scalar.c:769
+#: contrib/scalar/scalar.c:768
 msgid "include Git's build options"
 msgstr ""
 
-#: contrib/scalar/scalar.c:773
+#: contrib/scalar/scalar.c:772
 msgid "scalar verbose [-v | --verbose] [--build-options]"
 msgstr ""
 
+#: contrib/scalar/scalar.c:813
+msgid "-C requires a <directory>"
+msgstr ""
+
+#: contrib/scalar/scalar.c:815
+#, c-format
+msgid "could not change to '%s'"
+msgstr ""
+
 #: contrib/scalar/scalar.c:821
+msgid "-c requires a <key>=<value> argument"
+msgstr ""
+
+#: contrib/scalar/scalar.c:839
 msgid ""
-"scalar <command> [<options>]\n"
+"scalar [-C <directory>] [-c <key>=<value>] <command> [<options>]\n"
 "\n"
 "Commands:\n"
 msgstr ""
@@ -24317,43 +25038,43 @@ msgstr ""
 msgid "no libc information available\n"
 msgstr ""
 
-#: list-objects-filter-options.h:94
+#: list-objects-filter-options.h:126
 msgid "args"
 msgstr ""
 
-#: list-objects-filter-options.h:95
+#: list-objects-filter-options.h:127
 msgid "object filtering"
 msgstr ""
 
-#: parse-options.h:183
+#: parse-options.h:188
 msgid "expiry-date"
 msgstr ""
 
-#: parse-options.h:197
+#: parse-options.h:202
 msgid "no-op (backward compatibility)"
 msgstr ""
 
-#: parse-options.h:310
+#: parse-options.h:341
 msgid "be more verbose"
 msgstr ""
 
-#: parse-options.h:312
+#: parse-options.h:343
 msgid "be more quiet"
 msgstr ""
 
-#: parse-options.h:318
+#: parse-options.h:349
 msgid "use <n> digits to display object names"
 msgstr ""
 
-#: parse-options.h:337
+#: parse-options.h:368
 msgid "how to strip spaces and #comments from message"
 msgstr ""
 
-#: parse-options.h:338
+#: parse-options.h:369
 msgid "read pathspec from file"
 msgstr ""
 
-#: parse-options.h:339
+#: parse-options.h:370
 msgid ""
 "with --pathspec-from-file, pathspec elements are separated with NUL character"
 msgstr ""
@@ -24603,446 +25324,450 @@ msgid "Display help information about Git"
 msgstr ""
 
 #: command-list.h:108
-msgid "Server side implementation of Git over HTTP"
+msgid "Run git hooks"
 msgstr ""
 
 #: command-list.h:109
-msgid "Download from a remote Git repository via HTTP"
+msgid "Server side implementation of Git over HTTP"
 msgstr ""
 
 #: command-list.h:110
-msgid "Push objects over HTTP/DAV to another repository"
+msgid "Download from a remote Git repository via HTTP"
 msgstr ""
 
 #: command-list.h:111
-msgid "Send a collection of patches from stdin to an IMAP folder"
+msgid "Push objects over HTTP/DAV to another repository"
 msgstr ""
 
 #: command-list.h:112
-msgid "Build pack index file for an existing packed archive"
+msgid "Send a collection of patches from stdin to an IMAP folder"
 msgstr ""
 
 #: command-list.h:113
-msgid "Create an empty Git repository or reinitialize an existing one"
+msgid "Build pack index file for an existing packed archive"
 msgstr ""
 
 #: command-list.h:114
-msgid "Instantly browse your working repository in gitweb"
+msgid "Create an empty Git repository or reinitialize an existing one"
 msgstr ""
 
 #: command-list.h:115
-msgid "Add or parse structured information in commit messages"
+msgid "Instantly browse your working repository in gitweb"
 msgstr ""
 
 #: command-list.h:116
-msgid "Show commit logs"
+msgid "Add or parse structured information in commit messages"
 msgstr ""
 
 #: command-list.h:117
-msgid "Show information about files in the index and the working tree"
+msgid "Show commit logs"
 msgstr ""
 
 #: command-list.h:118
-msgid "List references in a remote repository"
+msgid "Show information about files in the index and the working tree"
 msgstr ""
 
 #: command-list.h:119
-msgid "List the contents of a tree object"
+msgid "List references in a remote repository"
 msgstr ""
 
 #: command-list.h:120
-msgid "Extracts patch and authorship from a single e-mail message"
+msgid "List the contents of a tree object"
 msgstr ""
 
 #: command-list.h:121
-msgid "Simple UNIX mbox splitter program"
+msgid "Extracts patch and authorship from a single e-mail message"
 msgstr ""
 
 #: command-list.h:122
-msgid "Run tasks to optimize Git repository data"
+msgid "Simple UNIX mbox splitter program"
 msgstr ""
 
 #: command-list.h:123
-msgid "Join two or more development histories together"
+msgid "Run tasks to optimize Git repository data"
 msgstr ""
 
 #: command-list.h:124
-msgid "Find as good common ancestors as possible for a merge"
+msgid "Join two or more development histories together"
 msgstr ""
 
 #: command-list.h:125
-msgid "Run a three-way file merge"
+msgid "Find as good common ancestors as possible for a merge"
 msgstr ""
 
 #: command-list.h:126
-msgid "Run a merge for files needing merging"
+msgid "Run a three-way file merge"
 msgstr ""
 
 #: command-list.h:127
-msgid "The standard helper program to use with git-merge-index"
+msgid "Run a merge for files needing merging"
 msgstr ""
 
 #: command-list.h:128
-msgid "Show three-way merge without touching index"
+msgid "The standard helper program to use with git-merge-index"
 msgstr ""
 
 #: command-list.h:129
-msgid "Run merge conflict resolution tools to resolve merge conflicts"
+msgid "Show three-way merge without touching index"
 msgstr ""
 
 #: command-list.h:130
-msgid "Creates a tag object with extra validation"
+msgid "Run merge conflict resolution tools to resolve merge conflicts"
 msgstr ""
 
 #: command-list.h:131
-msgid "Build a tree-object from ls-tree formatted text"
+msgid "Creates a tag object with extra validation"
 msgstr ""
 
 #: command-list.h:132
-msgid "Write and verify multi-pack-indexes"
+msgid "Build a tree-object from ls-tree formatted text"
 msgstr ""
 
 #: command-list.h:133
-msgid "Move or rename a file, a directory, or a symlink"
+msgid "Write and verify multi-pack-indexes"
 msgstr ""
 
 #: command-list.h:134
-msgid "Find symbolic names for given revs"
+msgid "Move or rename a file, a directory, or a symlink"
 msgstr ""
 
 #: command-list.h:135
-msgid "Add or inspect object notes"
+msgid "Find symbolic names for given revs"
 msgstr ""
 
 #: command-list.h:136
-msgid "Import from and submit to Perforce repositories"
+msgid "Add or inspect object notes"
 msgstr ""
 
 #: command-list.h:137
-msgid "Create a packed archive of objects"
+msgid "Import from and submit to Perforce repositories"
 msgstr ""
 
 #: command-list.h:138
-msgid "Find redundant pack files"
+msgid "Create a packed archive of objects"
 msgstr ""
 
 #: command-list.h:139
-msgid "Pack heads and tags for efficient repository access"
+msgid "Find redundant pack files"
 msgstr ""
 
 #: command-list.h:140
-msgid "Compute unique ID for a patch"
+msgid "Pack heads and tags for efficient repository access"
 msgstr ""
 
 #: command-list.h:141
-msgid "Prune all unreachable objects from the object database"
+msgid "Compute unique ID for a patch"
 msgstr ""
 
 #: command-list.h:142
-msgid "Remove extra objects that are already in pack files"
+msgid "Prune all unreachable objects from the object database"
 msgstr ""
 
 #: command-list.h:143
-msgid "Fetch from and integrate with another repository or a local branch"
+msgid "Remove extra objects that are already in pack files"
 msgstr ""
 
 #: command-list.h:144
-msgid "Update remote refs along with associated objects"
+msgid "Fetch from and integrate with another repository or a local branch"
 msgstr ""
 
 #: command-list.h:145
-msgid "Applies a quilt patchset onto the current branch"
+msgid "Update remote refs along with associated objects"
 msgstr ""
 
 #: command-list.h:146
-msgid "Compare two commit ranges (e.g. two versions of a branch)"
+msgid "Applies a quilt patchset onto the current branch"
 msgstr ""
 
 #: command-list.h:147
-msgid "Reads tree information into the index"
+msgid "Compare two commit ranges (e.g. two versions of a branch)"
 msgstr ""
 
 #: command-list.h:148
-msgid "Reapply commits on top of another base tip"
+msgid "Reads tree information into the index"
 msgstr ""
 
 #: command-list.h:149
-msgid "Receive what is pushed into the repository"
+msgid "Reapply commits on top of another base tip"
 msgstr ""
 
 #: command-list.h:150
-msgid "Manage reflog information"
+msgid "Receive what is pushed into the repository"
 msgstr ""
 
 #: command-list.h:151
-msgid "Manage set of tracked repositories"
+msgid "Manage reflog information"
 msgstr ""
 
 #: command-list.h:152
-msgid "Pack unpacked objects in a repository"
+msgid "Manage set of tracked repositories"
 msgstr ""
 
 #: command-list.h:153
-msgid "Create, list, delete refs to replace objects"
+msgid "Pack unpacked objects in a repository"
 msgstr ""
 
 #: command-list.h:154
-msgid "Generates a summary of pending changes"
+msgid "Create, list, delete refs to replace objects"
 msgstr ""
 
 #: command-list.h:155
-msgid "Reuse recorded resolution of conflicted merges"
+msgid "Generates a summary of pending changes"
 msgstr ""
 
 #: command-list.h:156
-msgid "Reset current HEAD to the specified state"
+msgid "Reuse recorded resolution of conflicted merges"
 msgstr ""
 
 #: command-list.h:157
-msgid "Restore working tree files"
+msgid "Reset current HEAD to the specified state"
 msgstr ""
 
 #: command-list.h:158
-msgid "Lists commit objects in reverse chronological order"
+msgid "Restore working tree files"
 msgstr ""
 
 #: command-list.h:159
-msgid "Pick out and massage parameters"
+msgid "Lists commit objects in reverse chronological order"
 msgstr ""
 
 #: command-list.h:160
-msgid "Revert some existing commits"
+msgid "Pick out and massage parameters"
 msgstr ""
 
 #: command-list.h:161
-msgid "Remove files from the working tree and from the index"
+msgid "Revert some existing commits"
 msgstr ""
 
 #: command-list.h:162
-msgid "Send a collection of patches as emails"
+msgid "Remove files from the working tree and from the index"
 msgstr ""
 
 #: command-list.h:163
-msgid "Push objects over Git protocol to another repository"
+msgid "Send a collection of patches as emails"
 msgstr ""
 
 #: command-list.h:164
-msgid "Git's i18n setup code for shell scripts"
+msgid "Push objects over Git protocol to another repository"
 msgstr ""
 
 #: command-list.h:165
-msgid "Common Git shell script setup code"
+msgid "Git's i18n setup code for shell scripts"
 msgstr ""
 
 #: command-list.h:166
-msgid "Restricted login shell for Git-only SSH access"
+msgid "Common Git shell script setup code"
 msgstr ""
 
 #: command-list.h:167
-msgid "Summarize 'git log' output"
+msgid "Restricted login shell for Git-only SSH access"
 msgstr ""
 
 #: command-list.h:168
-msgid "Show various types of objects"
+msgid "Summarize 'git log' output"
 msgstr ""
 
 #: command-list.h:169
-msgid "Show branches and their commits"
+msgid "Show various types of objects"
 msgstr ""
 
 #: command-list.h:170
-msgid "Show packed archive index"
+msgid "Show branches and their commits"
 msgstr ""
 
 #: command-list.h:171
-msgid "List references in a local repository"
+msgid "Show packed archive index"
 msgstr ""
 
 #: command-list.h:172
-msgid "Initialize and modify the sparse-checkout"
+msgid "List references in a local repository"
 msgstr ""
 
 #: command-list.h:173
-msgid "Add file contents to the staging area"
+msgid "Reduce your working tree to a subset of tracked files"
 msgstr ""
 
 #: command-list.h:174
-msgid "Stash the changes in a dirty working directory away"
+msgid "Add file contents to the staging area"
 msgstr ""
 
 #: command-list.h:175
-msgid "Show the working tree status"
+msgid "Stash the changes in a dirty working directory away"
 msgstr ""
 
 #: command-list.h:176
-msgid "Remove unnecessary whitespace"
+msgid "Show the working tree status"
 msgstr ""
 
 #: command-list.h:177
-msgid "Initialize, update or inspect submodules"
+msgid "Remove unnecessary whitespace"
 msgstr ""
 
 #: command-list.h:178
-msgid "Bidirectional operation between a Subversion repository and Git"
+msgid "Initialize, update or inspect submodules"
 msgstr ""
 
 #: command-list.h:179
-msgid "Switch branches"
+msgid "Bidirectional operation between a Subversion repository and Git"
 msgstr ""
 
 #: command-list.h:180
-msgid "Read, modify and delete symbolic refs"
+msgid "Switch branches"
 msgstr ""
 
 #: command-list.h:181
-msgid "Create, list, delete or verify a tag object signed with GPG"
+msgid "Read, modify and delete symbolic refs"
 msgstr ""
 
 #: command-list.h:182
-msgid "Creates a temporary file with a blob's contents"
+msgid "Create, list, delete or verify a tag object signed with GPG"
 msgstr ""
 
 #: command-list.h:183
-msgid "Unpack objects from a packed archive"
+msgid "Creates a temporary file with a blob's contents"
 msgstr ""
 
 #: command-list.h:184
-msgid "Register file contents in the working tree to the index"
+msgid "Unpack objects from a packed archive"
 msgstr ""
 
 #: command-list.h:185
-msgid "Update the object name stored in a ref safely"
+msgid "Register file contents in the working tree to the index"
 msgstr ""
 
 #: command-list.h:186
-msgid "Update auxiliary info file to help dumb servers"
+msgid "Update the object name stored in a ref safely"
 msgstr ""
 
 #: command-list.h:187
-msgid "Send archive back to git-archive"
+msgid "Update auxiliary info file to help dumb servers"
 msgstr ""
 
 #: command-list.h:188
-msgid "Send objects packed back to git-fetch-pack"
+msgid "Send archive back to git-archive"
 msgstr ""
 
 #: command-list.h:189
-msgid "Show a Git logical variable"
+msgid "Send objects packed back to git-fetch-pack"
 msgstr ""
 
 #: command-list.h:190
-msgid "Check the GPG signature of commits"
+msgid "Show a Git logical variable"
 msgstr ""
 
 #: command-list.h:191
-msgid "Validate packed Git archive files"
+msgid "Check the GPG signature of commits"
 msgstr ""
 
 #: command-list.h:192
-msgid "Check the GPG signature of tags"
+msgid "Validate packed Git archive files"
 msgstr ""
 
 #: command-list.h:193
-msgid "Show logs with difference each commit introduces"
+msgid "Check the GPG signature of tags"
 msgstr ""
 
 #: command-list.h:194
-msgid "Manage multiple working trees"
+msgid "Show logs with difference each commit introduces"
 msgstr ""
 
 #: command-list.h:195
-msgid "Create a tree object from the current index"
+msgid "Manage multiple working trees"
 msgstr ""
 
 #: command-list.h:196
-msgid "Defining attributes per path"
+msgid "Create a tree object from the current index"
 msgstr ""
 
 #: command-list.h:197
-msgid "Git command-line interface and conventions"
+msgid "Defining attributes per path"
 msgstr ""
 
 #: command-list.h:198
-msgid "A Git core tutorial for developers"
+msgid "Git command-line interface and conventions"
 msgstr ""
 
 #: command-list.h:199
-msgid "Providing usernames and passwords to Git"
+msgid "A Git core tutorial for developers"
 msgstr ""
 
 #: command-list.h:200
-msgid "Git for CVS users"
+msgid "Providing usernames and passwords to Git"
 msgstr ""
 
 #: command-list.h:201
-msgid "Tweaking diff output"
+msgid "Git for CVS users"
 msgstr ""
 
 #: command-list.h:202
-msgid "A useful minimum set of commands for Everyday Git"
+msgid "Tweaking diff output"
 msgstr ""
 
 #: command-list.h:203
-msgid "Frequently asked questions about using Git"
+msgid "A useful minimum set of commands for Everyday Git"
 msgstr ""
 
 #: command-list.h:204
-msgid "A Git Glossary"
+msgid "Frequently asked questions about using Git"
 msgstr ""
 
 #: command-list.h:205
-msgid "Hooks used by Git"
+msgid "A Git Glossary"
 msgstr ""
 
 #: command-list.h:206
-msgid "Specifies intentionally untracked files to ignore"
+msgid "Hooks used by Git"
 msgstr ""
 
 #: command-list.h:207
-msgid "The Git repository browser"
+msgid "Specifies intentionally untracked files to ignore"
 msgstr ""
 
 #: command-list.h:208
-msgid "Map author/committer names and/or E-Mail addresses"
+msgid "The Git repository browser"
 msgstr ""
 
 #: command-list.h:209
-msgid "Defining submodule properties"
+msgid "Map author/committer names and/or E-Mail addresses"
 msgstr ""
 
 #: command-list.h:210
-msgid "Git namespaces"
+msgid "Defining submodule properties"
 msgstr ""
 
 #: command-list.h:211
-msgid "Helper programs to interact with remote repositories"
+msgid "Git namespaces"
 msgstr ""
 
 #: command-list.h:212
-msgid "Git Repository Layout"
+msgid "Helper programs to interact with remote repositories"
 msgstr ""
 
 #: command-list.h:213
-msgid "Specifying revisions and ranges for Git"
+msgid "Git Repository Layout"
 msgstr ""
 
 #: command-list.h:214
-msgid "Mounting one repository inside another"
+msgid "Specifying revisions and ranges for Git"
 msgstr ""
 
 #: command-list.h:215
-msgid "A tutorial introduction to Git"
+msgid "Mounting one repository inside another"
 msgstr ""
 
 #: command-list.h:216
-msgid "A tutorial introduction to Git: part two"
+msgid "A tutorial introduction to Git"
 msgstr ""
 
 #: command-list.h:217
-msgid "Git web interface (web frontend to Git repositories)"
+msgid "A tutorial introduction to Git: part two"
 msgstr ""
 
 #: command-list.h:218
+msgid "Git web interface (web frontend to Git repositories)"
+msgstr ""
+
+#: command-list.h:219
 msgid "An overview of recommended workflows with Git"
 msgstr ""
 
@@ -25084,66 +25809,44 @@ msgstr ""
 msgid "Simple merge did not work, trying automatic merge."
 msgstr ""
 
-#: git-submodule.sh:401
-#, sh-format
-msgid "Unable to find current revision in submodule path '$displaypath'"
-msgstr ""
-
-#: git-submodule.sh:411
-#, sh-format
-msgid "Unable to fetch in submodule path '$sm_path'"
-msgstr ""
-
-#: git-submodule.sh:416
-#, sh-format
-msgid ""
-"Unable to find current ${remote_name}/${branch} revision in submodule path "
-"'$sm_path'"
-msgstr ""
-
-#: git-submodule.sh:464
-#, sh-format
-msgid "Failed to recurse into submodule path '$displaypath'"
-msgstr ""
-
 #: git-sh-setup.sh:89 git-sh-setup.sh:94
 #, sh-format
 msgid "usage: $dashless $USAGE"
 msgstr ""
 
-#: git-sh-setup.sh:183
+#: git-sh-setup.sh:182
 #, sh-format
 msgid "Cannot chdir to $cdup, the toplevel of the working tree"
 msgstr ""
 
-#: git-sh-setup.sh:192 git-sh-setup.sh:199
+#: git-sh-setup.sh:191 git-sh-setup.sh:198
 #, sh-format
 msgid "fatal: $program_name cannot be used without a working tree."
 msgstr ""
 
-#: git-sh-setup.sh:213
+#: git-sh-setup.sh:212
 msgid "Cannot rewrite branches: You have unstaged changes."
 msgstr ""
 
-#: git-sh-setup.sh:216
+#: git-sh-setup.sh:215
 #, sh-format
 msgid "Cannot $action: You have unstaged changes."
 msgstr ""
 
-#: git-sh-setup.sh:227
+#: git-sh-setup.sh:226
 #, sh-format
 msgid "Cannot $action: Your index contains uncommitted changes."
 msgstr ""
 
-#: git-sh-setup.sh:229
+#: git-sh-setup.sh:228
 msgid "Additionally, your index contains uncommitted changes."
 msgstr ""
 
-#: git-sh-setup.sh:349
+#: git-sh-setup.sh:348
 msgid "You need to run this command from the toplevel of the working tree."
 msgstr ""
 
-#: git-sh-setup.sh:354
+#: git-sh-setup.sh:353
 msgid "Unable to determine absolute path of git directory"
 msgstr ""
 
@@ -25755,23 +26458,23 @@ msgstr "tidak dapat mengirim pesan sebagai 7bit"
 msgid "invalid transfer encoding"
 msgstr "pengkodean transfer tidak valid"
 
-#: git-send-email.perl:2095
+#: git-send-email.perl:2100
 #, perl-format
 msgid ""
-"fatal: %s: rejected by sendemail-validate hook\n"
+"fatal: %s: rejected by %s hook\n"
 "%s\n"
 "warning: no patches were sent\n"
 msgstr ""
-"fatal: %s: ditolak oleh kail sendemail-validate\n"
+"fatal: %s: ditolak oleh kail %s\n"
 "%s\n"
 "peringatan: tidak ada tambalan yang dikirimkan\n"
 
-#: git-send-email.perl:2105 git-send-email.perl:2158 git-send-email.perl:2168
+#: git-send-email.perl:2110 git-send-email.perl:2163 git-send-email.perl:2173
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "tidak dapat membuka %s: %s\n"
 
-#: git-send-email.perl:2108
+#: git-send-email.perl:2113
 #, perl-format
 msgid ""
 "fatal: %s:%d is longer than 998 characters\n"
@@ -25780,13 +26483,13 @@ msgstr ""
 "fatal: %s:%d lebih panjang dari 998 karakter\n"
 "peringatan: tidak ada tambalan yang dikirimkan\n"
 
-#: git-send-email.perl:2126
+#: git-send-email.perl:2131
 #, perl-format
 msgid "Skipping %s with backup suffix '%s'.\n"
 msgstr "Melewati %s dengan akhiran cadangan '%s'.\n"
 
 #. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:2130
+#: git-send-email.perl:2135
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "Anda benar-benar ingin mengirim %s? [y|N]: "
index 70e5c6d9c160f8398406f148f4280d4d058eef97..32142531bbda0fc671d1f4897333dd0aa0bc2880 100644 (file)
@@ -1,11 +1,14 @@
 # Portugal's Portuguese translations for Git package.
-# Copyright (C) 2021 Daniel Santos <daniel@brilhante.top>
+# Copyright (C) 2020-2022 Daniel Santos <dacs.git@brilhante.top>
+# Copyright (C) 2016-2017 Vasco Almeida <vascomalmeida@sapo.pt>
+# Copyright (C) 2012 Marco Sousa <marcomsousa AT gmail.com>
 # This file is distributed under the same license as the Git package.
 # Contributors:
-#   - Daniel Santos <daniel@brilhante.top>
+#   - Daniel Santos <dacs.git@brilhante.top>
+#
 # Past Contributors:
 #   - Marco Sousa <marcomsousa AT gmail.com>
-#   - Vasco Almeida <vascomalmeida@sapo.pt>, 2016, 2017.
+#   - Vasco Almeida <vascomalmeida@sapo.pt>
 #
 #  Git glossary for Portuguese translators
 #
 #   ---------------------------------+--------------------------------------
 #   3-way merge                      |  tri-junção
 #   abbreviate                       |  abreviar
-#   alternate object database        |  base dados de objetos alternativa
+#   alternate object database        |  base dados de objetos alternativos
 #   amend                            |  emendar
-#   ancestor                         |  antepassado
+#   ancestor                         |  antecessor
 #   annotated tag                    |  etiqueta anotada
 #   archive                          |  arquivo
 #   backing store                    |  armazenamento-backup
 #   backward compatibility           |  retrocompatibilidade
-#   bare repository                  |  repositório nú
-#   bisect                           |  bisetar
-#   blame                            |  blame
+#   bare repository                  |  repositório nu
+#   bisect                           |  bisseção
+#   blame                            |  culpar
 #   blob object                      |  objeto-blob
-#   branch                           |  ramo 
+#   branch                           |  ramo
 #   bug                              |  bug
-#   bundle                           |  conjunto
-#   bypass                           |  desviar
+#   bundle                           |  arquivo-pacote
+#   bypass                           |  contornar
 #   cache                            |  cenário
-#   chain                            |  corrente
+#   chain                            |  série
 #   changeset                        |  memória
 #   checkout                         |  observar
 #   checksum                         |  checksum
 #   clean                            |  limpa
 #   clone                            |  clone
 #   commit                           |  memorizar
+#   commit-graph                     |  grafo-memória
 #   commit message                   |  mensagem de memória
 #   commit object                    |  objeto de memória
-#   commit-ish (also committish)     |  mnemónica
+#   commit-ish                       |  mnemónica
 #   committer                        |  memorizador
 #   conflict                         |  conflito
-#   core Git                         |  núcleo-Git
 #   cover letter                     |  carta de apresentação
 #   DAG                              |  DAG
-#   dangling object                  |  objeto perdido
+#   dangling object                  |  objeto suspenso
 #   detached HEAD                    |  HEAD desanexada
 #   directory                        |  pasta
 #   dirty                            |  suja
 #   fanout                           |  fanout
 #   fast-forward                     |  avanço
 #   fetch                            |  buscar
-#   file system                      |  sistema de ficheiro
+#   file system                      |  sistema de ficheiros
 #   fixup                            |  consertar
-#   fork                             |  fork
+#   fork                             |  forqueadura
 #   Git archive                      |  repositório
+#   gitdir                           |  pasta-git
 #   gitfile                          |  ficheiro-git
 #   grafts                           |  enxertos
 #   hash                             |  hash
 #   loose refs                       |  refs soltas
 #   mark                             |  marca
 #   master                           |  master
-#   merge                            |  junção 
+#   merge                            |  junção
 #   mergetag                         |  etiqueta-junção
+#   mirror repository                |  repositório-espelho
+#   multi-pack                       |  multi-pacote
 #   object                           |  objeto
 #   object database                  |  base dados de objeto
 #   object name                      |  nome de objeto
 #   remote-tracking branch           |  ramo remoto de monitorização
 #   replace object                   |  objeto-substituto
 #   replace ref                      |  ref-substituto
-#   replay                           |  replay
+#   replay                           |  refazer
 #   repo                             |  repo
 #   repository                       |  repositório
 #   reset                            |  restabelecer
 #   resolve                          |  resolver
+#   restore                          |  restaurar
 #   revert                           |  reverter
 #   revision                         |  revisão
 #   rewind                           |  rebobinar
 #   root commit                      |  memória-raiz
+#   scheduler                        |  agendador
 #   SCM                              |  SCM
 #   SHA-1                            |  SHA-1
 #   shallow repository               |  repositório superficial
 #   tree                             |  árvore
 #   tree object                      |  objeto-árvore
 #   tree-ish (also treeish)          |  arvoredo
+#   unbundle                         |  desarquivar
 #   unmerged                         |  por juntar
 #   unpack                           |  desempacotar
 #   unreachable object               |  objeto inalcançável
 #
 #   English                          |  Portuguese
 #   ---------------------------------+--------------------------------------
-#   apply                            |  submeter
+#   apply                            |  aplicar
 #   ahead                            |  à frente
+#   bad                              |  inválido
+#   batch                            |  (em) lote
 #   bind                             |  vincular
 #   broken                           |  quebrado
 #   call                             |  chamar
-#   chain                            |  série
 #   change                           |  alteração
 #   clobber                          |  encobrir
 #   config file                      |  ficheiro config
 #   debug                            |  depurar
 #   default                          |  predefinido
 #   deflate                          |  esvaziar
-#   delete                           |  apagar
+#   delete                           |  eliminar
 #   deprecated                       |  obsoleto
-#   dry-run                          |  dry-run
+#   dry-run                          |  simulação
 #   edit                             |  modificação
 #   embedded                         |  embutido
 #   feature                          |  feição
 #   fix                              |  corrigir
 #   given                            |  fornecido
-#   handle                           |  pega
+#   handle                           |  lidar
 #   in progress                      |  em curso
 #   inflate                          |  insuflar
 #   named                            |  denominado
 #   not supported                    |  insustentado
 #   mainline                         |  principal
 #   mismatch                         |  sem correspondência
+#   offset                           |  deslocamento
 #   overflow                         |  transbordo
+#   overwrite                        |  sobrescrever
 #   parse                            |  processar
 #   path                             |  caminho
+#   print                            |  mostrar
+#   recurse                          |  recursar
 #   register                         |  registar
 #   regular expression               |  expressão comum
 #   repack                           |  reempacotar
 #   template                         |  modelo
 #   timestamp                        |  carimbo cronológico
 #   token                            |  token
-#   unset                            |  desdefinir
+#   unset                            |  indefinir
 #   untrack                          |  desmonitorizar
-#   
+#   usage:                           |  uso:
+#   whitespace                       |  espaço-em-branco
+#
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: Git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2021-08-14 07:56+0800\n"
+"POT-Creation-Date: 2022-04-13 14:52+0800\n"
 "PO-Revision-Date: 2020-10-14 11:43+0100\n"
-"Last-Translator: Daniel Santos <hello@brighterdan.com>\n"
-"Language-Team: Git L10N Português <https://github.com/git-l10n-pt-PT/>\n"
+"Last-Translator: Daniel Santos <dacs.git@brilhante.top>\n"
+"Language-Team: Git L10N Português <https://codeberg.org/git-pt/Git-PO-pt_PT/"
+">\n"
 "Language: pt-PT\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: add-interactive.c:376
+#: add-interactive.c:382
 #, c-format
 msgid "Huh (%s)?"
 msgstr "O quê (%s)?"
 
-#: add-interactive.c:529 add-interactive.c:830 reset.c:64 sequencer.c:3493
-#: sequencer.c:3964 sequencer.c:4119 builtin/rebase.c:1528
-#: builtin/rebase.c:1953
+#: add-interactive.c:535 add-interactive.c:836 reset.c:136 sequencer.c:3505
+#: sequencer.c:3970 sequencer.c:4127 builtin/rebase.c:1261
+#: builtin/rebase.c:1671
 msgid "could not read index"
-msgstr "incapaz de ler index"
+msgstr "incapaz de ler cenário"
 
-#: add-interactive.c:584 git-add--interactive.perl:269
+#: add-interactive.c:590 git-add--interactive.perl:269
 #: git-add--interactive.perl:294
 msgid "binary"
 msgstr "binário"
 
-#: add-interactive.c:642 git-add--interactive.perl:278
+#: add-interactive.c:648 git-add--interactive.perl:278
 #: git-add--interactive.perl:332
 msgid "nothing"
 msgstr "nada"
 
-#: add-interactive.c:643 git-add--interactive.perl:314
+#: add-interactive.c:649 git-add--interactive.perl:314
 #: git-add--interactive.perl:329
 msgid "unchanged"
 msgstr "inalterado"
 
-#: add-interactive.c:680 git-add--interactive.perl:641
+#: add-interactive.c:686 git-add--interactive.perl:641
 msgid "Update"
 msgstr "Atualizar"
 
-#: add-interactive.c:697 add-interactive.c:885
+#: add-interactive.c:703 add-interactive.c:891
 #, c-format
 msgid "could not stage '%s'"
-msgstr "incapaz de stage '%s'"
+msgstr "incapaz de encenar '%s'"
 
-#: add-interactive.c:703 add-interactive.c:892 reset.c:88 sequencer.c:3707
+#: add-interactive.c:709 add-interactive.c:898 reset.c:160 sequencer.c:3709
 msgid "could not write index"
-msgstr "incapaz de escrever index"
+msgstr "incapaz de escrever cenário"
 
-#: add-interactive.c:706 git-add--interactive.perl:626
+#: add-interactive.c:712 git-add--interactive.perl:626
 #, c-format, perl-format
 msgid "updated %d path\n"
 msgid_plural "updated %d paths\n"
 msgstr[0] "actualizou %d path\n"
 msgstr[1] "actualizou %d paths\n"
 
-#: add-interactive.c:724 git-add--interactive.perl:676
+#: add-interactive.c:730 git-add--interactive.perl:676
 #, c-format, perl-format
 msgid "note: %s is untracked now.\n"
-msgstr "nota: %s agora está por seguir.\n"
+msgstr "nota: %s ficou desmonitorizado.\n"
 
-#: add-interactive.c:729 apply.c:4127 builtin/checkout.c:298
-#: builtin/reset.c:145
+#: add-interactive.c:735 apply.c:4133 builtin/checkout.c:311
+#: builtin/reset.c:167
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
-msgstr "make_cache_entry falhou para path '%s'"
+msgstr "make_cache_entry falhou para caminho '%s'"
 
-#: add-interactive.c:759 git-add--interactive.perl:653
+#: add-interactive.c:765 git-add--interactive.perl:653
 msgid "Revert"
 msgstr "Reverter"
 
-#: add-interactive.c:775
+#: add-interactive.c:781
 msgid "Could not parse HEAD^{tree}"
 msgstr "Incapaz de parse HEAD^{tree}"
 
-#: add-interactive.c:813 git-add--interactive.perl:629
+#: add-interactive.c:819 git-add--interactive.perl:629
 #, c-format, perl-format
 msgid "reverted %d path\n"
 msgid_plural "reverted %d paths\n"
 msgstr[0] "reverti %d path\n"
 msgstr[1] "reverti %d paths\n"
 
-#: add-interactive.c:864 git-add--interactive.perl:693
+#: add-interactive.c:870 git-add--interactive.perl:693
 #, c-format
 msgid "No untracked files.\n"
-msgstr "Nenhuns ficheiros untracked.\n"
+msgstr "Nenhuns ficheiros desmonitorizados.\n"
 
-#: add-interactive.c:868 git-add--interactive.perl:687
+#: add-interactive.c:874 git-add--interactive.perl:687
 msgid "Add untracked"
-msgstr "Adiciona untracked"
+msgstr "Adicionar desmonitorizados"
 
-#: add-interactive.c:895 git-add--interactive.perl:623
+#: add-interactive.c:901 git-add--interactive.perl:623
 #, c-format, perl-format
 msgid "added %d path\n"
 msgid_plural "added %d paths\n"
 msgstr[0] "adicionei %d path\n"
 msgstr[1] "adicionei %d paths\n"
 
-#: add-interactive.c:925
+#: add-interactive.c:931
 #, c-format
 msgid "ignoring unmerged: %s"
 msgstr "ignorando unmerged: %s"
 
-#: add-interactive.c:937 add-patch.c:1752 git-add--interactive.perl:1369
+#: add-interactive.c:943 add-patch.c:1758 git-add--interactive.perl:1371
 #, c-format
 msgid "Only binary files changed.\n"
-msgstr "Apenas ficheiros binários mudaram.\n"
+msgstr "Apenas alterados ficheiros binários.\n"
 
-#: add-interactive.c:939 add-patch.c:1750 git-add--interactive.perl:1371
+#: add-interactive.c:945 add-patch.c:1756 git-add--interactive.perl:1373
 #, c-format
 msgid "No changes.\n"
-msgstr "Sem modificação.\n"
+msgstr "Sem alterações.\n"
 
-#: add-interactive.c:943 git-add--interactive.perl:1379
+#: add-interactive.c:949 git-add--interactive.perl:1381
 msgid "Patch update"
 msgstr "Atualizar patch"
 
-#: add-interactive.c:982 git-add--interactive.perl:1792
+#: add-interactive.c:988 git-add--interactive.perl:1794
 msgid "Review diff"
 msgstr "Rever diff"
 
-#: add-interactive.c:1010
+#: add-interactive.c:1016
 msgid "show paths with changes"
-msgstr "mostrar paths modificados"
+msgstr "mostrar caminhos modificados"
 
-#: add-interactive.c:1012
+#: add-interactive.c:1018
 msgid "add working tree state to the staged set of changes"
-msgstr "adicionar estado de working tree para conjunto das modificações staged"
+msgstr ""
+"adicionar estado de árvore-trabalho para conjunto de modificações encenadas"
 
-#: add-interactive.c:1014
+#: add-interactive.c:1020
 msgid "revert staged set of changes back to the HEAD version"
-msgstr "reverter conjunto das modificações staged de volta para a versão HEAD"
+msgstr ""
+"reverter conjunto de modificações encenadas de volta para a versão HEAD"
 
-#: add-interactive.c:1016
+#: add-interactive.c:1022
 msgid "pick hunks and update selectively"
 msgstr "apanha os pedaços e atualiza seletivamente"
 
-#: add-interactive.c:1018
+#: add-interactive.c:1024
 msgid "view diff between HEAD and index"
-msgstr "ver diff entre HEAD e índex"
+msgstr "ver diff entre HEAD e cenário"
 
-#: add-interactive.c:1020
+#: add-interactive.c:1026
 msgid "add contents of untracked files to the staged set of changes"
 msgstr ""
-"adiciona conteúdo de ficheiros untracked para conjunto das modificações "
-"staged"
+"adicionar conteúdo de ficheiros desmonitorizados para conjunto de "
+"modificações encenadas"
 
-#: add-interactive.c:1028 add-interactive.c:1077
+#: add-interactive.c:1034 add-interactive.c:1083
 msgid "Prompt help:"
 msgstr "Prompt ajuda:"
 
-#: add-interactive.c:1030
+#: add-interactive.c:1036
 msgid "select a single item"
 msgstr "seleciona um único item"
 
-#: add-interactive.c:1032
+#: add-interactive.c:1038
 msgid "select a range of items"
 msgstr "seleciona um conjunto de items"
 
-#: add-interactive.c:1034
+#: add-interactive.c:1040
 msgid "select multiple ranges"
 msgstr "seleciona múltiplos conjuntos"
 
-#: add-interactive.c:1036 add-interactive.c:1081
+#: add-interactive.c:1042 add-interactive.c:1087
 msgid "select item based on unique prefix"
 msgstr "seleciona item tendo base o prefixo único"
 
-#: add-interactive.c:1038
+#: add-interactive.c:1044
 msgid "unselect specified items"
 msgstr "tira a seleção de items especificados"
 
-#: add-interactive.c:1040
+#: add-interactive.c:1046
 msgid "choose all items"
 msgstr "escolhe todos items"
 
-#: add-interactive.c:1042
+#: add-interactive.c:1048
 msgid "(empty) finish selecting"
 msgstr "(vazio) acaba de selecionar"
 
-#: add-interactive.c:1079
+#: add-interactive.c:1085
 msgid "select a numbered item"
 msgstr "seleciona item numerado"
 
-#: add-interactive.c:1083
+#: add-interactive.c:1089
 msgid "(empty) select nothing"
 msgstr "(vazio) seleciona nada"
 
-#: add-interactive.c:1091 builtin/clean.c:813 git-add--interactive.perl:1896
+#: add-interactive.c:1097 builtin/clean.c:839 git-add--interactive.perl:1898
 msgid "*** Commands ***"
 msgstr "*** Comandos ***"
 
-#: add-interactive.c:1092 builtin/clean.c:814 git-add--interactive.perl:1893
+#: add-interactive.c:1098 builtin/clean.c:840 git-add--interactive.perl:1895
 msgid "What now"
 msgstr "E agora"
 
-#: add-interactive.c:1144 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "staged"
-msgstr "staged"
+msgstr "encenado"
 
-#: add-interactive.c:1144 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "unstaged"
-msgstr "unstaged"
-
-#: add-interactive.c:1144 apply.c:4994 apply.c:4997 builtin/am.c:2309
-#: builtin/am.c:2312 builtin/bugreport.c:135 builtin/clone.c:128
-#: builtin/fetch.c:152 builtin/merge.c:285 builtin/pull.c:190
-#: builtin/submodule--helper.c:410 builtin/submodule--helper.c:1886
-#: builtin/submodule--helper.c:1889 builtin/submodule--helper.c:2343
-#: builtin/submodule--helper.c:2346 builtin/submodule--helper.c:2589
-#: builtin/submodule--helper.c:2890 builtin/submodule--helper.c:2893
+msgstr "desencenado"
+
+#: add-interactive.c:1150 apply.c:5002 apply.c:5005 builtin/am.c:2370
+#: builtin/am.c:2373 builtin/bugreport.c:107 builtin/clone.c:132
+#: builtin/fetch.c:154 builtin/merge.c:287 builtin/pull.c:194
+#: builtin/submodule--helper.c:412 builtin/submodule--helper.c:1872
+#: builtin/submodule--helper.c:1875 builtin/submodule--helper.c:2709
+#: builtin/submodule--helper.c:2712 builtin/submodule--helper.c:2891
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "caminho"
 
-#: add-interactive.c:1151
+#: add-interactive.c:1157
 msgid "could not refresh index"
-msgstr "incapaz de reactualizar o index"
+msgstr "incapaz de refrescar cenário"
 
-#: add-interactive.c:1165 builtin/clean.c:778 git-add--interactive.perl:1803
+#: add-interactive.c:1171 builtin/clean.c:804 git-add--interactive.perl:1805
 #, c-format
 msgid "Bye.\n"
 msgstr "Adeus.\n"
 
-#: add-patch.c:34 git-add--interactive.perl:1431
+#: add-patch.c:34 git-add--interactive.perl:1433
 #, c-format, perl-format
 msgid "Stage mode change [y,n,q,a,d%s,?]? "
-msgstr "Stage modo de modificação [y,n,q,a,d%s,?]? "
+msgstr "Modifica modo à encenação [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:35 git-add--interactive.perl:1432
+#: add-patch.c:35 git-add--interactive.perl:1434
 #, c-format, perl-format
 msgid "Stage deletion [y,n,q,a,d%s,?]? "
-msgstr "Eliminação stage [y,n,q,a,d%s,?]? "
+msgstr "Elimina à encenação [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:36 git-add--interactive.perl:1433
+#: add-patch.c:36 git-add--interactive.perl:1435
 #, c-format, perl-format
 msgid "Stage addition [y,n,q,a,d%s,?]? "
-msgstr "Adição stage [y,n,q,a,d%s,?]? "
+msgstr "Adiciona à encenação [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:37 git-add--interactive.perl:1434
+#: add-patch.c:37 git-add--interactive.perl:1436
 #, c-format, perl-format
 msgid "Stage this hunk [y,n,q,a,d%s,?]? "
-msgstr "Stage este pedaço [y,n,q,a,d%s,?]? "
+msgstr "Encena este pedaço [y,n,q,a,d%s,?]? "
 
 #: add-patch.c:39
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be marked for "
 "staging."
 msgstr ""
-"Se o patch submete-se corretamente, o pedaço editado será marcado para stage "
-"imediatamente."
+"Se o remendo aplica-se corretamente, o pedaço editado será marcado para "
+"encenação imediatamente."
 
 #: add-patch.c:42
 msgid ""
@@ -476,28 +494,29 @@ msgid ""
 "a - stage this hunk and all later hunks in the file\n"
 "d - do not stage this hunk or any of the later hunks in the file\n"
 msgstr ""
-"y - stage este pedaço\n"
-"n - o stage deste pedaço será retirado\n"
-"q - sair; retirar de stage este pedaço e qualquer um dos que permaneçam\n"
-"a - stage este pedaço e qualquer próximo pedaço neste ficheiro\n"
-"d - retirar o stage deste pedaço e qualquer próximo pedaço neste ficheiro\n"
+"y - encenar este pedaço\n"
+"n - deixar por encenar este pedaço\n"
+"q - sair; deixar por encenar este pedaço ou qualquer um dos que permaneçam\n"
+"a - encenar este pedaço e qualquer próximo pedaço neste ficheiro\n"
+"d - deixar por encenar este pedaço ou qualquer próximo pedaço neste "
+"ficheiro\n"
 
-#: add-patch.c:56 git-add--interactive.perl:1437
+#: add-patch.c:56 git-add--interactive.perl:1439
 #, c-format, perl-format
 msgid "Stash mode change [y,n,q,a,d%s,?]? "
 msgstr "Esconder modo de modificação [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:57 git-add--interactive.perl:1438
+#: add-patch.c:57 git-add--interactive.perl:1440
 #, c-format, perl-format
 msgid "Stash deletion [y,n,q,a,d%s,?]? "
-msgstr "Eliminação da arrumação [y,n,q,a,d%s,?]? "
+msgstr "Eliminação de esconderijo [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:58 git-add--interactive.perl:1439
+#: add-patch.c:58 git-add--interactive.perl:1441
 #, c-format, perl-format
 msgid "Stash addition [y,n,q,a,d%s,?]? "
-msgstr "Adição da arrumação [y,n,q,a,d%s,?]? "
+msgstr "Adição da esconderijo [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:59 git-add--interactive.perl:1440
+#: add-patch.c:59 git-add--interactive.perl:1442
 #, c-format, perl-format
 msgid "Stash this hunk [y,n,q,a,d%s,?]? "
 msgstr "Esconde este pedaço [y,n,q,a,d%s,?]? "
@@ -507,8 +526,8 @@ msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be marked for "
 "stashing."
 msgstr ""
-"Se o patch submete-se corretamente, o pedaço editado será marcado para "
-"arrumação imediatamente."
+"Se o remendo aplica-se corretamente, o pedaço editado será marcado para "
+"esconder-se imediatamente."
 
 #: add-patch.c:64
 msgid ""
@@ -518,39 +537,40 @@ msgid ""
 "a - stash this hunk and all later hunks in the file\n"
 "d - do not stash this hunk or any of the later hunks in the file\n"
 msgstr ""
-"y - arrumar este pedaço\n"
-"n - mostrar este pedaço\n"
-"q - sair; mostrar este pedaço e qualquer outro restante\n"
-"a - arrumar este pedaço e qualquer próximo deste ficheiro\n"
-"d - mostrar este pedaço e qualquer próximo deste ficheiro\n"
+"y - esconder este pedaço\n"
+"n - deixar por esconder este pedaço\n"
+"q - sair; deixar por esconder este pedaço ou qualquer um dos que permaneçama "
+"- esconder este pedaço e todos próximos pedaços deste ficheiro\n"
+"d - deixar por esconder este pedaço ou qualquer próximo pedaço deste "
+"ficheiro\n"
 
-#: add-patch.c:80 git-add--interactive.perl:1443
+#: add-patch.c:80 git-add--interactive.perl:1445
 #, c-format, perl-format
 msgid "Unstage mode change [y,n,q,a,d%s,?]? "
-msgstr "Unstage modo de modificação [y,n,q,a,d%s,?]? "
+msgstr "Modifica modo à desencenação [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:81 git-add--interactive.perl:1444
+#: add-patch.c:81 git-add--interactive.perl:1446
 #, c-format, perl-format
 msgid "Unstage deletion [y,n,q,a,d%s,?]? "
-msgstr "Eliminação do unstage [y,n,q,a,d%s,?]? "
+msgstr "Elimina à deencenação [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:82 git-add--interactive.perl:1445
+#: add-patch.c:82 git-add--interactive.perl:1447
 #, c-format, perl-format
 msgid "Unstage addition [y,n,q,a,d%s,?]? "
-msgstr "Adição do unstage [y,n,q,a,d%s,?]? "
+msgstr "Adiciona à desencenação [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:83 git-add--interactive.perl:1446
+#: add-patch.c:83 git-add--interactive.perl:1448
 #, c-format, perl-format
 msgid "Unstage this hunk [y,n,q,a,d%s,?]? "
-msgstr "Unstage este pedaço [y,n,q,a,d%s,?]? "
+msgstr "Desencena este pedaço [y,n,q,a,d%s,?]? "
 
 #: add-patch.c:85
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be marked for "
 "unstaging."
 msgstr ""
-"Se patch submete-se corretamente, o pedaço editado será imediatamente "
-"marcado para unstage."
+"Se remendo aplica-se corretamente, o pedaço editado será imediatamente "
+"marcado para desencenação."
 
 #: add-patch.c:88
 msgid ""
@@ -560,39 +580,40 @@ msgid ""
 "a - unstage this hunk and all later hunks in the file\n"
 "d - do not unstage this hunk or any of the later hunks in the file\n"
 msgstr ""
-"y - unstage este pedaço\n"
-"n - o unstage deste pedaço será retirado\n"
-"q - sair; retirar de unstage este pedaço e qualquer outro restante\n"
-"a - unstage este pedaço e todos próximos pedaços deste ficheiro\n"
-"d - retirar este pedaço da arrumação e qualquer próximo pedaço deste "
+"y - desencena este pedaço\n"
+"n - deixar de desencenar este pedaço\n"
+"q - sair; deixar de desencenar este pedaço ou qualquer um dos que "
+"permaneçam\n"
+"a - desencena este pedaço e todos próximos pedaços deste ficheiro\n"
+"d - deixar de desencenar este pedaço ou qualquer próximo pedaço deste "
 "ficheiro\n"
 
-#: add-patch.c:103 git-add--interactive.perl:1449
+#: add-patch.c:103 git-add--interactive.perl:1451
 #, c-format, perl-format
 msgid "Apply mode change to index [y,n,q,a,d%s,?]? "
-msgstr "Submeter modo de modificação para index [y,n,q,a,d%s,?]? "
+msgstr "Submeter modificação de modo para cenário [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:104 git-add--interactive.perl:1450
+#: add-patch.c:104 git-add--interactive.perl:1452
 #, c-format, perl-format
 msgid "Apply deletion to index [y,n,q,a,d%s,?]? "
-msgstr "Submeter eliminação para index [y,n,q,a,d%s,?]? "
+msgstr "Submeter eliminação para cenário [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:105 git-add--interactive.perl:1451
+#: add-patch.c:105 git-add--interactive.perl:1453
 #, c-format, perl-format
 msgid "Apply addition to index [y,n,q,a,d%s,?]? "
-msgstr "Submeter adição para index [y,n,q,a,d%s,?]? "
+msgstr "Submeter adição para cenário [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:106 git-add--interactive.perl:1452
+#: add-patch.c:106 git-add--interactive.perl:1454
 #, c-format, perl-format
 msgid "Apply this hunk to index [y,n,q,a,d%s,?]? "
-msgstr "Submeter este pedaço para index [y,n,q,a,d%s,?]? "
+msgstr "Submeter este pedaço para cenário [y,n,q,a,d%s,?]? "
 
 #: add-patch.c:108 add-patch.c:176 add-patch.c:221
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be marked for "
 "applying."
 msgstr ""
-"Se o patch aplica-se corretamente, o pedaço editado será marcado para a "
+"Se o remendo aplica-se corretamente, o pedaço editado será marcado para a "
 "submissão imediatamente."
 
 #: add-patch.c:111
@@ -603,42 +624,43 @@ msgid ""
 "a - apply this hunk and all later hunks in the file\n"
 "d - do not apply this hunk or any of the later hunks in the file\n"
 msgstr ""
-"y - submeter este pedaço para index\n"
-"n - declinar este pedaço para index\n"
-"q - sair; declinar este pedaço e qualquer outro restante\n"
-"a - submeter este pedaço e qualquer próximo deste ficheiro\n"
-"d - declinar este pedaço e qualquer próximo deste ficheiro\n"
+"y - submeter este pedaço para cenário\n"
+"n - deixar por submeter este pedaço para cenário\n"
+"q - sair; deixar por submeter este pedaço ou qualquer um dos que permaneçam\n"
+"a - submeter este pedaço e qualquer próximo pedaço neste ficheiro\n"
+"d - deixar por submeter este pedaço ou qualquer próximo pedaço neste "
+"ficheiro\n"
 
-#: add-patch.c:126 git-add--interactive.perl:1455
-#: git-add--interactive.perl:1473
+#: add-patch.c:126 git-add--interactive.perl:1457
+#: git-add--interactive.perl:1475
 #, c-format, perl-format
 msgid "Discard mode change from worktree [y,n,q,a,d%s,?]? "
-msgstr "Descartar modo de modificação da worktree [y,n,q,a,d%s,?]? "
+msgstr "Descartar modo de modificação de árvore-trabalho [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:127 git-add--interactive.perl:1456
-#: git-add--interactive.perl:1474
+#: add-patch.c:127 git-add--interactive.perl:1458
+#: git-add--interactive.perl:1476
 #, c-format, perl-format
 msgid "Discard deletion from worktree [y,n,q,a,d%s,?]? "
-msgstr "Descartar eliminação da worktree [y,n,q,a,d%s,?]? "
+msgstr "Descartar eliminação de árvore-trabalho [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:128 git-add--interactive.perl:1457
-#: git-add--interactive.perl:1475
+#: add-patch.c:128 git-add--interactive.perl:1459
+#: git-add--interactive.perl:1477
 #, c-format, perl-format
 msgid "Discard addition from worktree [y,n,q,a,d%s,?]? "
-msgstr "Descartar adição da worktree [y,n,q,a,d%s,?]? "
+msgstr "Descartar adição de árvore-trabalho [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:129 git-add--interactive.perl:1458
-#: git-add--interactive.perl:1476
+#: add-patch.c:129 git-add--interactive.perl:1460
+#: git-add--interactive.perl:1478
 #, c-format, perl-format
 msgid "Discard this hunk from worktree [y,n,q,a,d%s,?]? "
-msgstr "Descartar este pedaço da worktree [y,n,q,a,d%s,?]? "
+msgstr "Descartar este pedaço de árvore-trabalho [y,n,q,a,d%s,?]? "
 
 #: add-patch.c:131 add-patch.c:154 add-patch.c:199
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be marked for "
 "discarding."
 msgstr ""
-"Se o patch aplica-se corretamente, o pedaço editado será marcado para ser "
+"Se o remendo aplica-se corretamente, o pedaço editado será marcado para ser "
 "descartado imediatamente."
 
 #: add-patch.c:134 add-patch.c:202
@@ -649,31 +671,34 @@ msgid ""
 "a - discard this hunk and all later hunks in the file\n"
 "d - do not discard this hunk or any of the later hunks in the file\n"
 msgstr ""
-"y - descartar este pedaço de worktree\n"
-"n - aceitar este pedaço de worktree\n"
-"q - sair; aceitar este pedaço e qualquer outro restante\n"
-"a - descartar este pedaço e qualquer próximo deste ficheiro\n"
-"d - aceitar este pedaço e qualquer próximo deste ficheiro\n"
+"y - descartar este pedaço de árvore-trabalho\n"
+"n - deixar por descartar este pedaço de árvore-trabalho\n"
+"q - sair; deixar por descartar este pedaço ou qualquer um dos que "
+"permaneçam\n"
+"a - descartar este pedaço e qualquer próximo pedaço neste ficheiro\n"
+"d - deixar por descartar este pedaço e qualquer próximo pedaço neste "
+"ficheiro\n"
 
-#: add-patch.c:149 add-patch.c:194 git-add--interactive.perl:1461
+#: add-patch.c:149 add-patch.c:194 git-add--interactive.perl:1463
 #, c-format, perl-format
 msgid "Discard mode change from index and worktree [y,n,q,a,d%s,?]? "
-msgstr "Descartar modo de modificação de index e worktree [y,n,q,a,d%s,?]?"
+msgstr ""
+"Descartar modificação de modo de cenário e árvore-trabalho [y,n,q,a,d%s,?]?"
 
-#: add-patch.c:150 add-patch.c:195 git-add--interactive.perl:1462
+#: add-patch.c:150 add-patch.c:195 git-add--interactive.perl:1464
 #, c-format, perl-format
 msgid "Discard deletion from index and worktree [y,n,q,a,d%s,?]? "
-msgstr "Descartar eliminação de index e worktree [y,n,q,a,d%s,?]? "
+msgstr "Descartar eliminação de cenário e árvore-trabalho [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:151 add-patch.c:196 git-add--interactive.perl:1463
+#: add-patch.c:151 add-patch.c:196 git-add--interactive.perl:1465
 #, c-format, perl-format
 msgid "Discard addition from index and worktree [y,n,q,a,d%s,?]? "
-msgstr "Descartar adição de index e worktree [y,n,q,a,d%s,?]? "
+msgstr "Descartar adição de cenário e árvore-trabalho [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:152 add-patch.c:197 git-add--interactive.perl:1464
+#: add-patch.c:152 add-patch.c:197 git-add--interactive.perl:1466
 #, c-format, perl-format
 msgid "Discard this hunk from index and worktree [y,n,q,a,d%s,?]? "
-msgstr "Descartar este pedaço de index e worktree [y,n,q,a,d%s,?]? "
+msgstr "Descartar este pedaço de cenário e árvore-trabalho [y,n,q,a,d%s,?]? "
 
 #: add-patch.c:157
 msgid ""
@@ -683,31 +708,34 @@ msgid ""
 "a - discard this hunk and all later hunks in the file\n"
 "d - do not discard this hunk or any of the later hunks in the file\n"
 msgstr ""
-"y - descartar este pedaço de index e worktree\n"
-"n - aceitar este pedaço de index e worktree\n"
-"q - sair; aceitar este pedaço e qualquer outro restante\n"
-"a - descartar este pedaço e qualquer próximo deste ficheiro\n"
-"d - aceitar este pedaço e qualquer próximo deste ficheiro\n"
+"y - descartar este pedaço de cenário e árvore-trabalho\n"
+"n - deixar por descartar este pedaço de cenário e árvore-trabalho\n"
+"q - sair; deixar por descartar este pedaço ou qualquer um dos que "
+"permaneçam\n"
+"a - descartar este pedaço e qualquer próximo neste ficheiro\n"
+"d - deixar por descartar este pedaço ou qualquer próximo pedaço neste "
+"ficheiro\n"
 
-#: add-patch.c:171 add-patch.c:216 git-add--interactive.perl:1467
+#: add-patch.c:171 add-patch.c:216 git-add--interactive.perl:1469
 #, c-format, perl-format
 msgid "Apply mode change to index and worktree [y,n,q,a,d%s,?]? "
-msgstr "Submeter modo de modificação para index e worktree [y,n,q,a,d%s,?]? "
+msgstr ""
+"Submeter modificação de modo para cenário e árvore-trabalho [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:172 add-patch.c:217 git-add--interactive.perl:1468
+#: add-patch.c:172 add-patch.c:217 git-add--interactive.perl:1470
 #, c-format, perl-format
 msgid "Apply deletion to index and worktree [y,n,q,a,d%s,?]? "
-msgstr "Submeter eliminação para index e worktree [y,n,q,a,d%s,?]? "
+msgstr "Submeter eliminação para cenário e árvore-trabalho [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:173 add-patch.c:218 git-add--interactive.perl:1469
+#: add-patch.c:173 add-patch.c:218 git-add--interactive.perl:1471
 #, c-format, perl-format
 msgid "Apply addition to index and worktree [y,n,q,a,d%s,?]? "
-msgstr "Submeter adição para index e worktree [y,n,q,a,d%s,?]? "
+msgstr "Submeter adição para cenário e árvore-trabalho [y,n,q,a,d%s,?]? "
 
-#: add-patch.c:174 add-patch.c:219 git-add--interactive.perl:1470
+#: add-patch.c:174 add-patch.c:219 git-add--interactive.perl:1472
 #, c-format, perl-format
 msgid "Apply this hunk to index and worktree [y,n,q,a,d%s,?]? "
-msgstr "Submeter este pedaço para index e worktree [y,n,q,a,d%s,?]? "
+msgstr "Submeter este pedaço para cenário e árvore-trabalho [y,n,q,a,d%s,?]? "
 
 #: add-patch.c:179
 msgid ""
@@ -717,11 +745,12 @@ msgid ""
 "a - apply this hunk and all later hunks in the file\n"
 "d - do not apply this hunk or any of the later hunks in the file\n"
 msgstr ""
-"y - submeter este pedaço para index e worktree\n"
-"n - declinar este pedaço para index e worktree\n"
-"q - sair; declinar este pedaço e qualquer outro restante\n"
-"a - submeter este pedaço e qualquer próximo deste ficheiro\n"
-"d - declinar este pedaço e qualquer próximo deste ficheiro\n"
+"y - submeter este pedaço para cenário e árvore-trabalho\n"
+"n - deixar por submeter este pedaço para cenário e árvore-trabalho\n"
+"q - sair; deixar por submeter este pedaço ou qualquer um dos que permaneçam\n"
+"a - submeter este pedaço e qualquer próximo pedaço neste ficheiro\n"
+"d - deixar por submeter este pedaço ou qualquer próximo pedaço neste "
+"ficheiro\n"
 
 #: add-patch.c:224
 msgid ""
@@ -731,11 +760,12 @@ msgid ""
 "a - apply this hunk and all later hunks in the file\n"
 "d - do not apply this hunk or any of the later hunks in the file\n"
 msgstr ""
-"y - submeter este pedaço para worktree\n"
-"n - declinar este pedaço para worktree\n"
-"q - sair; declinar este pedaço e qualquer outro restantes\n"
-"a - submeter este pedaço e qualquer próximo deste ficheiro\n"
-"d - declinar este pedaço e qualquer próximo deste ficheiro\n"
+"y - submeter este pedaço para árvore-trabalho\n"
+"n - deixar por submeter este pedaço para árvore-trabalho\n"
+"q - sair; deixar por submeter este pedaço ou qualquer um dos que permaneçam\n"
+"a - submeter este pedaço e qualquer próximo pedaço neste ficheiro\n"
+"d - deixar por submeter este pedaço ou qualquer próximo pedaço neste "
+"ficheiro\n"
 
 #: add-patch.c:343
 #, c-format
@@ -747,32 +777,32 @@ msgstr "incapaz de processar início de pedaço '%.*s'"
 msgid "could not parse colored hunk header '%.*s'"
 msgstr "incapaz de analisar início de pedaço colorido '%.*s'"
 
-#: add-patch.c:420
+#: add-patch.c:431
 msgid "could not parse diff"
 msgstr "incapaz de analisar diff"
 
-#: add-patch.c:439
+#: add-patch.c:450
 msgid "could not parse colored diff"
 msgstr "incapaz de analisar diff colorido"
 
-#: add-patch.c:453
+#: add-patch.c:464
 #, c-format
 msgid "failed to run '%s'"
 msgstr "falhou executar '%s'"
 
-#: add-patch.c:612
+#: add-patch.c:618
 msgid "mismatched output from interactive.diffFilter"
 msgstr "sem match de output de interactive.diffFilter"
 
-#: add-patch.c:613
+#: add-patch.c:619
 msgid ""
 "Your filter must maintain a one-to-one correspondence\n"
 "between its input and output lines."
 msgstr ""
 "O teu filtro tem de manter uma correspondência exata\n"
-"entre seu input e linhas output."
+"entre sua entrada e linhas de saída."
 
-#: add-patch.c:791
+#: add-patch.c:797
 #, c-format
 msgid ""
 "expected context line #%d in\n"
@@ -781,7 +811,7 @@ msgstr ""
 "linha de contexto esperada #%d em\n"
 "%.*s"
 
-#: add-patch.c:806
+#: add-patch.c:812
 #, c-format
 msgid ""
 "hunks do not overlap:\n"
@@ -794,11 +824,11 @@ msgstr ""
 "\ttermina sem:\n"
 "%.*s"
 
-#: add-patch.c:1082 git-add--interactive.perl:1115
+#: add-patch.c:1088 git-add--interactive.perl:1115
 msgid "Manual hunk edit mode -- see bottom for a quick guide.\n"
 msgstr "Modo de edição manual de pedaço -- ver final para guia rápido.\n"
 
-#: add-patch.c:1086
+#: add-patch.c:1092
 #, c-format
 msgid ""
 "---\n"
@@ -812,21 +842,21 @@ msgstr ""
 "Linhas começadas com %c serão removidas.\n"
 
 #. TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
-#: add-patch.c:1100 git-add--interactive.perl:1129
+#: add-patch.c:1106 git-add--interactive.perl:1129
 msgid ""
 "If it does not apply cleanly, you will be given an opportunity to\n"
 "edit again.  If all lines of the hunk are removed, then the edit is\n"
 "aborted and the hunk is left unchanged.\n"
 msgstr ""
-"Se falha na submissão correta, ser-lhe-á dada nova oportunidade para\n"
+"Se falha na aplicação correta, ser-lhe-á dada nova oportunidade para\n"
 "editar. Se todas as linhas deste pedaço forem removidas, então a edição\n"
 "é abortada e este pedaço é deixado inalterado.\n"
 
-#: add-patch.c:1133
+#: add-patch.c:1139
 msgid "could not parse hunk header"
 msgstr "incapaz interpretar início de pedaço"
 
-#: add-patch.c:1178
+#: add-patch.c:1184
 msgid "'git apply --cached' failed"
 msgstr "'git apply --cached' falhou"
 
@@ -842,26 +872,26 @@ msgstr "'git apply --cached' falhou"
 #. Consider translating (saying "no" discards!) as
 #. (saying "n" for "no" discards!) if the translation
 #. of the word "no" does not start with n.
-#: add-patch.c:1247 git-add--interactive.perl:1242
+#: add-patch.c:1253 git-add--interactive.perl:1244
 msgid ""
 "Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? "
 msgstr ""
 "Problema na submissão de pedaço editado. Editar de novo (responder \"n\" "
 "para \"não\" descarta!) [y/n]? "
 
-#: add-patch.c:1290
+#: add-patch.c:1296
 msgid "The selected hunks do not apply to the index!"
-msgstr "Submissão incorreta de pedaços selecionados para index!"
+msgstr "Os pedaços selecionados submetem-se para o cenário de maneira nenhuma!"
 
-#: add-patch.c:1291 git-add--interactive.perl:1346
+#: add-patch.c:1297 git-add--interactive.perl:1348
 msgid "Apply them to the worktree anyway? "
-msgstr "Submetê-los para worktree mesmo assim? "
+msgstr "Submetê-los para árvore-trabalho mesmo assim? "
 
-#: add-patch.c:1298 git-add--interactive.perl:1349
+#: add-patch.c:1304 git-add--interactive.perl:1351
 msgid "Nothing was applied.\n"
 msgstr "Nada foi submetido.\n"
 
-#: add-patch.c:1355
+#: add-patch.c:1361
 msgid ""
 "j - leave this hunk undecided, see next undecided hunk\n"
 "J - leave this hunk undecided, see next hunk\n"
@@ -883,73 +913,73 @@ msgstr ""
 "e - editar manualmente o pedaço atual\n"
 "? - mostrar ajuda\n"
 
-#: add-patch.c:1517 add-patch.c:1527
+#: add-patch.c:1523 add-patch.c:1533
 msgid "No previous hunk"
 msgstr "Sem pedaço anterior"
 
-#: add-patch.c:1522 add-patch.c:1532
+#: add-patch.c:1528 add-patch.c:1538
 msgid "No next hunk"
 msgstr "Sem próximo pedaço"
 
-#: add-patch.c:1538
+#: add-patch.c:1544
 msgid "No other hunks to goto"
 msgstr "Sem qualquer outro pedaço"
 
-#: add-patch.c:1549 git-add--interactive.perl:1606
+#: add-patch.c:1555 git-add--interactive.perl:1608
 msgid "go to which hunk (<ret> to see more)? "
 msgstr "ir para qual pedaço (<ret> para ver mais)? "
 
-#: add-patch.c:1550 git-add--interactive.perl:1608
+#: add-patch.c:1556 git-add--interactive.perl:1610
 msgid "go to which hunk? "
 msgstr "ir para qual pedaço? "
 
-#: add-patch.c:1561
+#: add-patch.c:1567
 #, c-format
 msgid "Invalid number: '%s'"
 msgstr "Número inválido: '%s'"
 
-#: add-patch.c:1566
+#: add-patch.c:1572
 #, c-format
 msgid "Sorry, only %d hunk available."
 msgid_plural "Sorry, only %d hunks available."
 msgstr[0] "Lamento, apenas %d pedaço disponível."
 msgstr[1] "Lamento, apenas %d pedaços disponíveis."
 
-#: add-patch.c:1575
+#: add-patch.c:1581
 msgid "No other hunks to search"
 msgstr "Sem outro pedaço a procurar"
 
-#: add-patch.c:1581 git-add--interactive.perl:1661
+#: add-patch.c:1587 git-add--interactive.perl:1663
 msgid "search for regex? "
 msgstr "procurar por regex? "
 
-#: add-patch.c:1596
+#: add-patch.c:1602
 #, c-format
 msgid "Malformed search regexp %s: %s"
 msgstr "Pesquisa regexp deformada %s: %s"
 
-#: add-patch.c:1613
+#: add-patch.c:1619
 msgid "No hunk matches the given pattern"
 msgstr "Sem pedaço correspondente ao padrão fornecido"
 
-#: add-patch.c:1620
+#: add-patch.c:1626
 msgid "Sorry, cannot split this hunk"
 msgstr "Lamento, incapaz de dividir este pedaço"
 
-#: add-patch.c:1624
+#: add-patch.c:1630
 #, c-format
 msgid "Split into %d hunks."
 msgstr "Dividir em %d pedaços."
 
-#: add-patch.c:1628
+#: add-patch.c:1634
 msgid "Sorry, cannot edit this hunk"
 msgstr "Lamento, incapaz de editar este pedaço"
 
-#: add-patch.c:1680
+#: add-patch.c:1686
 msgid "'git apply' failed"
 msgstr "'git apply' falhou"
 
-#: advice.c:145
+#: advice.c:81
 #, c-format
 msgid ""
 "\n"
@@ -958,74 +988,80 @@ msgstr ""
 "\n"
 "Desative este mensagem com \"git config advice.%s false\""
 
-#: advice.c:161
+#: advice.c:97
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%sdica: %.*s%s\n"
 
-#: advice.c:252
+#: advice.c:181
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr "Cherry-picking é impossível porque tem ficheiros em separado."
 
-#: advice.c:254
+#: advice.c:183
 msgid "Committing is not possible because you have unmerged files."
 msgstr "Cometer é impossível porque tem ficheiros em separado."
 
-#: advice.c:256
+#: advice.c:185
 msgid "Merging is not possible because you have unmerged files."
 msgstr "Juntar é impossível porque tem ficheiros em separado."
 
-#: advice.c:258
+#: advice.c:187
 msgid "Pulling is not possible because you have unmerged files."
 msgstr "Puxar é impossível porque tem ficheiros em separado."
 
-#: advice.c:260
+#: advice.c:189
 msgid "Reverting is not possible because you have unmerged files."
 msgstr "Reverter é impossível porque tem ficheiros em separado."
 
-#: advice.c:262
+#: advice.c:191
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr "É impossível fazer %s porque tem ficheiros em separado."
 
-#: advice.c:270
+#: advice.c:199
 msgid ""
 "Fix them up in the work tree, and then use 'git add/rm <file>'\n"
 "as appropriate to mark resolution and make a commit."
 msgstr ""
-"Corrija-os em worktree, e use 'git add/rm <ficheiro>' apropriadamente\n"
-"para marcar resolução e fazer uma memória."
+"Conserte-os na árvore-trabalho, e usa 'git add/rm <ficheiro>'\n"
+"apropriadamente para marcar resolução e fazer uma memória."
 
-#: advice.c:278
+#: advice.c:207
 msgid "Exiting because of an unresolved conflict."
 msgstr "Saindo devido a conflito por resolver."
 
-#: advice.c:283 builtin/merge.c:1375
+#: advice.c:212 builtin/merge.c:1388
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "O teu juntar ficou por concluir (MERGE_HEAD presente)."
 
-#: advice.c:285
+#: advice.c:214
 msgid "Please, commit your changes before merging."
 msgstr "Por favor, memoriza as tuas modificações antes de juntar."
 
-#: advice.c:286
+#: advice.c:215
 msgid "Exiting because of unfinished merge."
 msgstr "Saindo devido a juntar inacabado."
 
-#: advice.c:296
+#: advice.c:220
+msgid "Not possible to fast-forward, aborting."
+msgstr "Impossível fazer avanço, abortando."
+
+#: advice.c:230
 #, c-format
 msgid ""
-"The following pathspecs didn't match any eligible path, but they do match "
-"index\n"
-"entries outside the current sparse checkout:\n"
+"The following paths and/or pathspecs matched paths that exist\n"
+"outside of your sparse-checkout definition, so will not be\n"
+"updated in the index:\n"
 msgstr ""
 
-#: advice.c:303
+#: advice.c:237
 msgid ""
-"Disable or modify the sparsity rules if you intend to update such entries."
+"If you intend to update such entries, try one of the following:\n"
+"* Use the --sparse option.\n"
+"* Disable or modify the sparsity rules."
 msgstr ""
 
-#: advice.c:310
+#: advice.c:245
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -1049,14 +1085,14 @@ msgid ""
 msgstr ""
 "Nota: trocando para '%s'.\n"
 "\n"
-"Está em 'HEAD solta'. Podes olhar, fazer mudanças experimentais e\n"
+"Estás em 'HEAD desanexada'. Podes olhar, fazer mudanças experimentais e\n"
 "memorizá-las, e, neste estado, podes descartar qualquer memória que faças\n"
-"sem interferir em qualquer ramo fazendo um switch de ramos.\n"
+"sem impactar qualquer ramo fazendo uma troca de volta para um ramo.\n"
 "\n"
 "Se queres criar um novo ramo para reter as memórias que criaste, podes\n"
-"fazer (agora ou mais tarde) usando -c com o comando switch. Exemplo:\n"
+"fazê-lo (agora ou mais tarde) usando -c com o comando switch. Exemplo:\n"
 "\n"
-"  git switch -c <novo-nome-de-branch>\n"
+"  git switch -c <novo-nome-de-ramo>\n"
 "\n"
 "Ou desfazer esta operação com:\n"
 "\n"
@@ -1084,72 +1120,88 @@ msgstr "opção de whitespace desconhecida '%s'"
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "opção de ignorar whitespace desconhecida '%s'"
 
-#: apply.c:136
-msgid "--reject and --3way cannot be used together."
-msgstr "--reject e --3way só podem ser usados separadamente."
-
-#: apply.c:139
-msgid "--3way outside a repository"
-msgstr "--3way fora de um repositório"
-
-#: apply.c:150
-msgid "--index outside a repository"
-msgstr "--index fora de um repositório"
-
-#: apply.c:153
-msgid "--cached outside a repository"
-msgstr "--cached fora de repositório"
-
-#: apply.c:800
+#: apply.c:138 archive.c:584 parse-options.c:1122 range-diff.c:555
+#: revision.c:2314 revision.c:2318 revision.c:2327 revision.c:2332
+#: revision.c:2560 revision.c:2895 revision.c:2899 revision.c:2907
+#: revision.c:2910 revision.c:2912 builtin/add.c:507 builtin/add.c:509
+#: builtin/add.c:515 builtin/add.c:527 builtin/branch.c:755
+#: builtin/checkout.c:472 builtin/checkout.c:475 builtin/checkout.c:1663
+#: builtin/checkout.c:1773 builtin/checkout.c:1776 builtin/clone.c:921
+#: builtin/commit.c:359 builtin/commit.c:362 builtin/commit.c:1200
+#: builtin/commit.c:1256 builtin/commit.c:1273 builtin/describe.c:593
+#: builtin/diff-tree.c:155 builtin/difftool.c:733 builtin/fast-export.c:1245
+#: builtin/fetch.c:2141 builtin/fetch.c:2162 builtin/fetch.c:2167
+#: builtin/help.c:602 builtin/index-pack.c:1858 builtin/init-db.c:560
+#: builtin/log.c:1968 builtin/log.c:1970 builtin/ls-files.c:778
+#: builtin/merge-base.c:163 builtin/merge-base.c:169 builtin/merge.c:1409
+#: builtin/merge.c:1411 builtin/pack-objects.c:4098 builtin/push.c:592
+#: builtin/push.c:630 builtin/push.c:636 builtin/push.c:641
+#: builtin/rebase.c:1221 builtin/rebase.c:1223 builtin/rebase.c:1227
+#: builtin/repack.c:688 builtin/repack.c:719 builtin/reset.c:433
+#: builtin/reset.c:469 builtin/rev-list.c:537 builtin/show-branch.c:711
+#: builtin/stash.c:1696 builtin/stash.c:1699 builtin/submodule--helper.c:1328
+#: builtin/submodule--helper.c:3054 builtin/tag.c:527 builtin/tag.c:573
+#: builtin/worktree.c:779
+#, c-format
+msgid "options '%s' and '%s' cannot be used together"
+msgstr "opções '%s' e '%s' incapaz serem usadas juntas"
+
+#: apply.c:141 apply.c:152 apply.c:155
+#, c-format
+msgid "'%s' outside a repository"
+msgstr "'%s' fora de um repositório"
+
+#: apply.c:807
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr "Incapaz preparar timestamp de regexp %s"
 
-#: apply.c:809
+#: apply.c:816
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr "regexec devolveu %d para input: %s"
 
-#: apply.c:883
+#: apply.c:890
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr "incapaz de encontrar o nome do ficheiro no patch da linha %d"
 
-#: apply.c:921
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
-msgstr "git apply: git-diff incorreto - esperava /dev/null, tive %s na linha %d"
+msgstr ""
+"git apply: git-diff incorreto - esperava /dev/null, tive %s na linha %d"
 
-#: apply.c:927
+#: apply.c:934
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr ""
 "git apply: git-diff incorreto - novo nome de ficheiro inconsistente na linha "
 "%d"
 
-#: apply.c:928
+#: apply.c:935
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr ""
 "git apply: git-diff incorreto - antigo nome de ficheiro inconsistente na "
 "linha %d"
 
-#: apply.c:933
+#: apply.c:940
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr "git apply: git-diff incorreto - esperava /dev/null na linha %d"
 
-#: apply.c:962
+#: apply.c:969
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "modo inválido na linha %d: %s"
 
-#: apply.c:1281
+#: apply.c:1288
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr "linhas de cabeçalho %d e %d inconsistentes"
 
-#: apply.c:1371
+#: apply.c:1378
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -1164,92 +1216,92 @@ msgstr[1] ""
 "cabeçalho do git diff falta informação de nome de ficheiro quando removendo "
 "%d componentes do pathname (linha %d)"
 
-#: apply.c:1384
+#: apply.c:1391
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr "cabeçalho do git diff falta informação de nome de ficheiro (linha %d)"
 
-#: apply.c:1480
+#: apply.c:1487
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr "recontagem: linha inesperada: %.*s"
 
-#: apply.c:1549
+#: apply.c:1556
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr "fragmento de patch sem cabeçalho na linha %d: %.*s"
 
-#: apply.c:1752
+#: apply.c:1759
 msgid "new file depends on old contents"
 msgstr "novo ficheiro depende de conteúdos antigos"
 
-#: apply.c:1754
+#: apply.c:1761
 msgid "deleted file still has contents"
 msgstr "ficheiro eliminado ainda tem conteúdos"
 
-#: apply.c:1788
+#: apply.c:1795
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "patch roto na linha %d"
 
-#: apply.c:1825
+#: apply.c:1832
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "novo ficheiro %s depende de conteúdos antigos"
 
-#: apply.c:1827
+#: apply.c:1834
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "ficheiro apagado %s ainda tem conteúdos"
 
-#: apply.c:1830
+#: apply.c:1837
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** aviso: ficheiro %s fica vazio e mantêm-se"
 
-#: apply.c:1977
+#: apply.c:1985
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "patch binário roto na linha %d: %.*s"
 
-#: apply.c:2014
+#: apply.c:2022
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "patch binário irreconhecível na linha %d"
 
-#: apply.c:2176
+#: apply.c:2184
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "patch com apenas lixo na linha %d"
 
-#: apply.c:2262
+#: apply.c:2270
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "incapaz de ler ligação simbólica %s"
 
-#: apply.c:2266
+#: apply.c:2274
 #, c-format
 msgid "unable to open or read %s"
 msgstr "incapaz de abrir ou ler %s"
 
-#: apply.c:2935
+#: apply.c:2943
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "início de linha inválido: '%c'"
 
-#: apply.c:3056
+#: apply.c:3064
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "Pedaço #%d apareceu em %d (%d offset de linha)."
 msgstr[1] "Pedaço #%d apareceu em %d (%d offset de linhas)."
 
-#: apply.c:3068
+#: apply.c:3076
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "Contexto reduzido a (%ld/%ld) para submeter fragmento em %d"
 
-#: apply.c:3074
+#: apply.c:3082
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1258,498 +1310,494 @@ msgstr ""
 "procurando por:\n"
 "%.*s"
 
-#: apply.c:3096
+#: apply.c:3104
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "faltando patch binário para '%s'"
 
-#: apply.c:3104
+#: apply.c:3112
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr "incapaz submeter-inversamente patch binário sem pedaço inverso a '%s'"
 
-#: apply.c:3151
+#: apply.c:3159
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
-msgstr "incapaz submeter patch binário a '%s' sem a linha completa de index"
+msgstr ""
+"incapaz submeter remendo binário a '%s' sem a linha completa para cenário"
 
-#: apply.c:3162
+#: apply.c:3170
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr ""
 "o patch submete-se a '%s' (%s), que corresponde a conteúdo actual nenhum."
 
-#: apply.c:3170
+#: apply.c:3178
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "o patch submete-se a um '%s' vazio mas tem conteúdo"
 
-#: apply.c:3188
+#: apply.c:3196
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "incapaz ler a postimage necessária %s para '%s'"
 
-#: apply.c:3201
+#: apply.c:3209
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "path binário submete-se a '%s' de maneira nenhuma"
 
-#: apply.c:3208
+#: apply.c:3216
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 "patch binário para '%s' cria resultado incorreto (esperei %s, recebi %s)"
 
-#: apply.c:3229
+#: apply.c:3237
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "patch falhou: %s:%ld"
 
-#: apply.c:3352
+#: apply.c:3360
 #, c-format
 msgid "cannot checkout %s"
-msgstr "incapaz de checkout %s"
+msgstr "incapaz de observar %s"
 
-#: apply.c:3404 apply.c:3415 apply.c:3461 midx.c:98 pack-revindex.c:214
-#: setup.c:308
+#: apply.c:3412 apply.c:3423 apply.c:3469 midx.c:105 pack-revindex.c:214
+#: setup.c:310
 #, c-format
 msgid "failed to read %s"
 msgstr "falha a ler %s"
 
-#: apply.c:3412
+#: apply.c:3420
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "lendo '%s' além de uma ligação simbólica"
 
-#: apply.c:3441 apply.c:3687
+#: apply.c:3449 apply.c:3721
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "path %s mudou de nome ou foi eliminado"
 
-#: apply.c:3527 apply.c:3702
+#: apply.c:3559 apply.c:3736
 #, c-format
 msgid "%s: does not exist in index"
-msgstr "%s: tem inexistência no index"
+msgstr "%s: tem inexistência no cenário"
 
-#: apply.c:3536 apply.c:3710 apply.c:3954
+#: apply.c:3568 apply.c:3744 apply.c:3960
 #, c-format
 msgid "%s: does not match index"
-msgstr "%s: no index há correspondência nenhuma"
+msgstr "%s: no cenário há correspondência nenhuma"
 
-#: apply.c:3571
+#: apply.c:3605
 msgid "repository lacks the necessary blob to perform 3-way merge."
 msgstr "repositório falta o blob necessário para recorrer à tri-junção."
 
-#: apply.c:3574
+#: apply.c:3608
 #, c-format
 msgid "Performing three-way merge...\n"
 msgstr "Realizando tri-junção...\n"
 
-#: apply.c:3590 apply.c:3594
+#: apply.c:3624 apply.c:3628
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "incapaz ler conteúdo atual de '%s'"
 
-#: apply.c:3606
+#: apply.c:3640
 #, c-format
 msgid "Failed to perform three-way merge...\n"
-msgstr "Falha a recorrer a integração com 3 pontos...\n"
+msgstr "Falha a fazer tri-junção...\n"
 
-#: apply.c:3620
+#: apply.c:3654
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
-msgstr "Patch aplicado a '%s' com conflitos.\n"
+msgstr "Remendo aplicado a '%s' com conflitos.\n"
 
-#: apply.c:3625
+#: apply.c:3659
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
-msgstr "Patch aplicado a '%s' com sucesso.\n"
+msgstr "Remendo aplicado corretamente a '%s'.\n"
 
-#: apply.c:3642
+#: apply.c:3676
 #, c-format
 msgid "Falling back to direct application...\n"
 msgstr "Recorrendo a aplicação direta...\n"
 
-#: apply.c:3654
+#: apply.c:3688
 msgid "removal patch leaves file contents"
 msgstr "patch de remoção deixa conteúdos no ficheiro"
 
-#: apply.c:3727
+#: apply.c:3761
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s: tipo errado"
 
-#: apply.c:3729
+#: apply.c:3763
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s é do tipo %o, esperado %o"
 
-#: apply.c:3894 apply.c:3896 read-cache.c:863 read-cache.c:892
-#: read-cache.c:1353
+#: apply.c:3900 apply.c:3902 read-cache.c:903 read-cache.c:932
+#: read-cache.c:1399
 #, c-format
 msgid "invalid path '%s'"
 msgstr "caminho inválido '%s'"
 
-#: apply.c:3952
+#: apply.c:3958
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s: já existe no cenário"
 
-#: apply.c:3956
+#: apply.c:3962
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s: já existe na pasta-trabalho"
 
-#: apply.c:3976
+#: apply.c:3982
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "novo modo (%o) de %s é incorrespondente ao modo antigo (%o)"
 
-#: apply.c:3981
+#: apply.c:3987
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "novo modo (%o) de %s é incorrespondente ao modo antigo (%o) de %s"
 
-#: apply.c:4001
+#: apply.c:4007
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "o ficheiro afetado '%s' é indicado por uma ligação simbólica"
 
-#: apply.c:4005
+#: apply.c:4011
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s: patch submete-se de maneira nenhuma"
 
-#: apply.c:4020
+#: apply.c:4026
 #, c-format
 msgid "Checking patch %s..."
 msgstr ""
 
-#: apply.c:4112
+#: apply.c:4118
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "sha1 tem falta informação ou é inútil para o submódulo %s"
 
-#: apply.c:4119
+#: apply.c:4125
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "alteração de modo para %s, que está fora da HEAD atual"
 
-#: apply.c:4122
+#: apply.c:4128
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "informação de sha1 está faltando ou é inútil (%s)."
 
-#: apply.c:4131
+#: apply.c:4137
 #, c-format
 msgid "could not add %s to temporary index"
-msgstr "incapaz adicionar %s ao índex temporário"
+msgstr "incapaz adicionar %s ao cenário temporário"
 
-#: apply.c:4141
+#: apply.c:4147
 #, c-format
 msgid "could not write temporary index to %s"
-msgstr "incapaz escrever index temporário para %s"
+msgstr "incapaz escrever o cenário temporário para %s"
 
-#: apply.c:4279
+#: apply.c:4285
 #, c-format
 msgid "unable to remove %s from index"
-msgstr "impossível remover %s de index"
+msgstr "incapaz remover %s de cenário"
 
-#: apply.c:4313
+#: apply.c:4319
 #, c-format
 msgid "corrupt patch for submodule %s"
-msgstr "patch corrompido no submódulo %s"
+msgstr "remendo corrompido no submódulo %s"
 
-#: apply.c:4319
+#: apply.c:4325
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "incapaz obter estatutário de ficheiro recém-criado '%s'"
 
-#: apply.c:4327
+#: apply.c:4333
 #, c-format
 msgid "unable to create backing store for newly created file %s"
-msgstr "incapaz criar armazenamento de backup para ficheiro recém-criado %s"
+msgstr "incapaz criar armazenamento-backup para ficheiro recém-criado %s"
 
-#: apply.c:4333 apply.c:4478
+#: apply.c:4339 apply.c:4484
 #, c-format
 msgid "unable to add cache entry for %s"
-msgstr "incapaz adicionar entrada de cache para %s"
+msgstr "incapaz adicionar entrada de cenário para %s"
 
-#: apply.c:4376 builtin/bisect--helper.c:525
+#: apply.c:4382 builtin/bisect--helper.c:540 builtin/gc.c:2258
+#: builtin/gc.c:2293
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "falha a escrever para '%s'"
 
-#: apply.c:4380
+#: apply.c:4386
 #, c-format
 msgid "closing file '%s'"
 msgstr "fechando ficheiro '%s'"
 
-#: apply.c:4450
+#: apply.c:4456
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "incapaz escrever ficheiro '%s' com modo %o"
 
-#: apply.c:4548
+#: apply.c:4554
 #, c-format
 msgid "Applied patch %s cleanly."
-msgstr "Patch %s aplicado com sucesso."
+msgstr "Remendo %s aplicado corretamente."
 
-#: apply.c:4556
+#: apply.c:4562
 msgid "internal error"
 msgstr "erro interno"
 
-#: apply.c:4559
+#: apply.c:4565
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "A aplicar patch %%s com %d rejeição..."
 msgstr[1] "A aplicar patch %%s com %d rejeições..."
 
-#: apply.c:4570
+#: apply.c:4576
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "a truncar o nome do ficheiro .rej em %.*s.rej"
 
-#: apply.c:4578 builtin/fetch.c:993 builtin/fetch.c:1394
+#: apply.c:4584
 #, c-format
 msgid "cannot open %s"
 msgstr "incapaz abrir %s"
 
-#: apply.c:4592
+#: apply.c:4598
 #, c-format
 msgid "Hunk #%d applied cleanly."
-msgstr "Excerto nº%d aplicado com sucesso."
+msgstr "Excerto #%d aplicado corretamente."
 
-#: apply.c:4596
+#: apply.c:4602
 #, c-format
 msgid "Rejected hunk #%d."
-msgstr "Excerto %d rejeitado."
+msgstr "Excerto #%d rejeitado."
 
-#: apply.c:4725
+#: apply.c:4731
 #, c-format
 msgid "Skipped patch '%s'."
-msgstr "Patch '%s' ignorado."
+msgstr "Remendo '%s' ignorado."
 
-#: apply.c:4733
-msgid "unrecognized input"
-msgstr "input desconhecido"
+#: apply.c:4740
+msgid "No valid patches in input (allow with \"--allow-empty\")"
+msgstr ""
 
-#: apply.c:4753
+#: apply.c:4761
 msgid "unable to read index file"
-msgstr "incapaz ler ficheiro index"
+msgstr "incapaz ler ficheiro de cenário"
 
-#: apply.c:4910
+#: apply.c:4918
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "incapaz abrir patch '%s': %s"
 
-#: apply.c:4937
+#: apply.c:4945
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "%d erro de espaço em branco reprimido"
 msgstr[1] "%d erros de espaço em branco reprimidos"
 
-#: apply.c:4943 apply.c:4958
+#: apply.c:4951 apply.c:4966
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d linha adiciona erros de espaço em branco."
 msgstr[1] "%d linhas adicionam erros de espaço em branco."
 
-#: apply.c:4951
+#: apply.c:4959
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] "%d linha aplicada depois de corrigir erros de espaço em branco."
 msgstr[1] "%d linhas aplicadas depois de corrigir erros de espaço em branco."
 
-#: apply.c:4967 builtin/add.c:678 builtin/mv.c:304 builtin/rm.c:423
+#: apply.c:4975 builtin/add.c:690 builtin/mv.c:338 builtin/rm.c:430
 msgid "Unable to write new index file"
-msgstr "Incapaz de escrever novo ficheiro index"
+msgstr "Incapaz de escrever novo ficheiro de cenário"
 
-#: apply.c:4995
+#: apply.c:5003
 msgid "don't apply changes matching the given path"
 msgstr ""
 "submeter de maneira nenhuma alterações correspondentes a path fornecido"
 
-#: apply.c:4998
+#: apply.c:5006
 msgid "apply changes matching the given path"
 msgstr "submeter alterações correspondentes a path fornecido"
 
-#: apply.c:5000 builtin/am.c:2318
+#: apply.c:5008 builtin/am.c:2379
 msgid "num"
 msgstr "num"
 
-#: apply.c:5001
+#: apply.c:5009
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "remover <num> barras à esquerda dos caminhos de diff tradicional"
 
-#: apply.c:5004
+#: apply.c:5012
 msgid "ignore additions made by the patch"
 msgstr "ignorar adições feitas pelo patch"
 
-#: apply.c:5006
+#: apply.c:5014
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "invés aplicada patch, output diffstat para "
 
-#: apply.c:5010
+#: apply.c:5018
 msgid "show number of added and deleted lines in decimal notation"
 msgstr "mostrar número de linhas adicionadas e removidas em notação decimal"
 
-#: apply.c:5012
+#: apply.c:5020
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "em vez de aplicar o patch, mostrar um resumo da entrada"
 
-#: apply.c:5014
+#: apply.c:5022
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "em vez de aplicar o patch, verificar se o patch pode ser aplicado"
 
-#: apply.c:5016
+#: apply.c:5024
 msgid "make sure the patch is applicable to the current index"
-msgstr "garantir que o patch pode ser aplicado ao índice atual"
+msgstr "garante que o remendo é aplicável em cenário atual"
 
-#: apply.c:5018
+#: apply.c:5026
 msgid "mark new files with `git add --intent-to-add`"
 msgstr ""
 
-#: apply.c:5020
+#: apply.c:5028
 msgid "apply a patch without touching the working tree"
-msgstr "aplicar um patch sem tocar na árvore de trabalho"
+msgstr "aplicar um remendo sem tocar na árvore-trabalho"
 
-#: apply.c:5022
+#: apply.c:5030
 msgid "accept a patch that touches outside the working area"
-msgstr "aceitar patches que alteram ficheiros fora da área de trabalho"
+msgstr "aceitar remendo que alteram ficheiros fora da área-trabalho"
 
-#: apply.c:5025
+#: apply.c:5033
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "submeter o remendo também (usa com --stat/--summary/--check)"
 
-#: apply.c:5027
+#: apply.c:5035
 msgid "attempt three-way merge, fall back on normal patch if that fails"
 msgstr "tentar tri-junção se um patch submete-se de maneira nenhuma"
 
-#: apply.c:5029
+#: apply.c:5037
 msgid "build a temporary index based on embedded index information"
 msgstr ""
-"construir um índice temporário baseado na informação incorporada do índice"
+"construir um cenário temporário baseado na informação incorporada de cenário"
 
-#: apply.c:5032 builtin/checkout-index.c:196 builtin/ls-files.c:617
+#: apply.c:5040 builtin/checkout-index.c:230
 msgid "paths are separated with NUL character"
 msgstr "caminhos estão separados por caractere NUL"
 
-#: apply.c:5034
+#: apply.c:5042
 msgid "ensure at least <n> lines of context match"
 msgstr "garantir que pelo menos <n> linhas de contexto correspondam"
 
-#: apply.c:5035 builtin/am.c:2294 builtin/am.c:2297
+#: apply.c:5043 builtin/am.c:2355 builtin/am.c:2358
 #: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
-#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3991
-#: builtin/rebase.c:1347
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3983
+#: builtin/rebase.c:1079
 msgid "action"
 msgstr "ação"
 
-#: apply.c:5036
+#: apply.c:5044
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "detetar linhas novas ou modificadas que tenham espaços em branco"
 
-#: apply.c:5039 apply.c:5042
+#: apply.c:5047 apply.c:5050
 msgid "ignore changes in whitespace when finding context"
 msgstr "ignorar alterações de espaço em branco ao procurar contexto"
 
-#: apply.c:5045
+#: apply.c:5053
 msgid "apply the patch in reverse"
 msgstr "aplicar o patch em reverso"
 
-#: apply.c:5047
+#: apply.c:5055
 msgid "don't expect at least one line of context"
 msgstr "conta com linha de contexto nenhuma"
 
-#: apply.c:5049
+#: apply.c:5057
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "deixar os pedaços rejeitados nos respetivos ficheiros *.rej"
 
-#: apply.c:5051
+#: apply.c:5059
 msgid "allow overlapping hunks"
 msgstr "permitir a sobreposição de pedaços"
 
-#: apply.c:5052 builtin/add.c:364 builtin/check-ignore.c:22
-#: builtin/commit.c:1481 builtin/count-objects.c:98 builtin/fsck.c:756
-#: builtin/log.c:2297 builtin/mv.c:123 builtin/read-tree.c:128
-msgid "be verbose"
-msgstr "ser verboso"
-
-#: apply.c:5054
+#: apply.c:5062
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr ""
-"tolerar deteções incorretas de falta de nova linha no final do ficheiro"
+"tolerar detecções incorretas de falta de nova linha no final do ficheiro"
 
-#: apply.c:5057
+#: apply.c:5065
 msgid "do not trust the line counts in the hunk headers"
 msgstr "desconfia da contagem de linhas nos headers de pedaços"
 
-#: apply.c:5059 builtin/am.c:2306
+#: apply.c:5067 builtin/am.c:2367
 msgid "root"
 msgstr "raiz"
 
-#: apply.c:5060
+#: apply.c:5068
 msgid "prepend <root> to all filenames"
 msgstr "preceder <root> a todos os nomes de ficheiro"
 
-#: archive-tar.c:125 archive-zip.c:345
+#: apply.c:5071
+msgid "don't return error for empty patches"
+msgstr ""
+
+#: archive-tar.c:125 archive-zip.c:346
 #, c-format
 msgid "cannot stream blob %s"
 msgstr "incapaz streamar blob %s"
 
-#: archive-tar.c:265 archive-zip.c:358
+#: archive-tar.c:265 archive-zip.c:359
 #, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
 msgstr "modo de ficheiro fora de suporte: 0%o (SHA1: %s)"
 
-#: archive-tar.c:450
+#: archive-tar.c:447
 #, c-format
 msgid "unable to start '%s' filter"
 msgstr "incapaz iniciar filtro '%s'"
 
-#: archive-tar.c:453
+#: archive-tar.c:450
 msgid "unable to redirect descriptor"
 msgstr "incapaz redirecionar descritor"
 
-#: archive-tar.c:460
+#: archive-tar.c:457
 #, c-format
 msgid "'%s' filter reported error"
 msgstr ""
 
-#: archive-zip.c:318
+#: archive-zip.c:319
 #, c-format
 msgid "path is not valid UTF-8: %s"
 msgstr ""
 
-#: archive-zip.c:322
+#: archive-zip.c:323
 #, c-format
 msgid "path too long (%d chars, SHA1: %s): %s"
 msgstr ""
 
-#: archive-zip.c:469 builtin/pack-objects.c:365 builtin/pack-objects.c:368
+#: archive-zip.c:470 builtin/pack-objects.c:363 builtin/pack-objects.c:366
 #, c-format
 msgid "deflate error (%d)"
 msgstr "erro ao compactar (%d)"
 
-#: archive-zip.c:603
+#: archive-zip.c:604
 #, c-format
 msgid "timestamp too large for this system: %<PRIuMAX>"
-msgstr ""
+msgstr "carimbo cronológico demasiado grande para este sistema: %<PRIuMAX>"
 
 #: archive.c:14
 msgid "git archive [<options>] <tree-ish> [<path>...]"
 msgstr "git archive [<opções>] <arvoredo> [<caminho>...]"
 
-#: archive.c:15
-msgid "git archive --list"
-msgstr "git archive --list"
-
 #: archive.c:16
 msgid ""
 "git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"
@@ -1761,142 +1809,138 @@ msgstr ""
 msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote <repo> [--exec <cmd>] --list"
 
-#: archive.c:188
-#, c-format
-msgid "cannot read %s"
-msgstr "incapaz ler %s"
-
-#: archive.c:342 sequencer.c:460 sequencer.c:1915 sequencer.c:3095
-#: sequencer.c:3537 sequencer.c:3665 builtin/am.c:262 builtin/commit.c:833
-#: builtin/merge.c:1144
+#: archive.c:188 archive.c:341 builtin/gc.c:497 builtin/notes.c:238
+#: builtin/tag.c:579
 #, c-format
-msgid "could not read '%s'"
+msgid "cannot read '%s'"
 msgstr "incapaz ler '%s'"
 
-#: archive.c:427 builtin/add.c:205 builtin/add.c:645 builtin/rm.c:328
+#: archive.c:426 builtin/add.c:214 builtin/add.c:657 builtin/rm.c:334
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "especificador de path '%s' correspondeu a ficheiro nenhum"
 
-#: archive.c:451
+#: archive.c:450
 #, c-format
 msgid "no such ref: %.*s"
 msgstr "ref inexistente: %.*s"
 
-#: archive.c:457
+#: archive.c:456
 #, c-format
 msgid "not a valid object name: %s"
 msgstr "nome de objeto inválido: %s"
 
-#: archive.c:470
+#: archive.c:469
 #, c-format
 msgid "not a tree object: %s"
 msgstr "é objeto árvore nenhum: %s"
 
-#: archive.c:482
+#: archive.c:481
 msgid "current working directory is untracked"
-msgstr "pasta de trabalho atual está por seguir"
+msgstr "pasta-trabalho atual está desmonitorizada"
 
-#: archive.c:523
+#: archive.c:522
 #, c-format
 msgid "File not found: %s"
 msgstr "ficheiro por encontrar: %s"
 
-#: archive.c:525
+#: archive.c:524
 #, c-format
 msgid "Not a regular file: %s"
 msgstr "É ficheiro normal nenhum: %s"
 
-#: archive.c:552
+#: archive.c:551
 msgid "fmt"
 msgstr "fmt"
 
-#: archive.c:552
+#: archive.c:551
 msgid "archive format"
 msgstr "formato do arquivo"
 
-#: archive.c:553 builtin/log.c:1775
+#: archive.c:552 builtin/log.c:1809
 msgid "prefix"
 msgstr "prefixo"
 
-#: archive.c:554
+#: archive.c:553
 msgid "prepend prefix to each pathname in the archive"
 msgstr "preceder o prefixo a cada nome de caminho dentro do arquivo"
 
-#: archive.c:555 archive.c:558 builtin/blame.c:884 builtin/blame.c:888
-#: builtin/blame.c:889 builtin/commit-tree.c:117 builtin/config.c:135
-#: builtin/fast-export.c:1207 builtin/fast-export.c:1209
-#: builtin/fast-export.c:1213 builtin/grep.c:921 builtin/hash-object.c:105
-#: builtin/ls-files.c:653 builtin/ls-files.c:656 builtin/notes.c:412
-#: builtin/notes.c:578 builtin/read-tree.c:123 parse-options.h:191
+#: archive.c:554 archive.c:557 builtin/blame.c:881 builtin/blame.c:885
+#: builtin/blame.c:886 builtin/commit-tree.c:115 builtin/config.c:135
+#: builtin/fast-export.c:1181 builtin/fast-export.c:1183
+#: builtin/fast-export.c:1187 builtin/grep.c:936 builtin/hash-object.c:104
+#: builtin/ls-files.c:654 builtin/ls-files.c:657 builtin/notes.c:410
+#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:195
 msgid "file"
 msgstr "ficheiro"
 
-#: archive.c:556
+#: archive.c:555
 msgid "add untracked file to archive"
-msgstr "adiciona ficheiro por seguir a arquivo"
+msgstr "adiciona ficheiro desmonitorizado a arquivo"
 
-#: archive.c:559 builtin/archive.c:90
+#: archive.c:558 builtin/archive.c:88
 msgid "write the archive to this file"
 msgstr "escreve arquivo para este ficheiro"
 
-#: archive.c:561
+#: archive.c:560
 msgid "read .gitattributes in working directory"
 msgstr "ler .gitattributes da pasta-trabalho"
 
-#: archive.c:562
+#: archive.c:561
 msgid "report archived files on stderr"
 msgstr "reportar, na saída de erro padrão, ficheiro arquivados"
 
-#: archive.c:564
+#: archive.c:563
 msgid "set compression level"
 msgstr "definir nível de compressão"
 
-#: archive.c:567
+#: archive.c:566
 msgid "list supported archive formats"
 msgstr "listar formatos de arquivo suportados"
 
-#: archive.c:569 builtin/archive.c:91 builtin/clone.c:118 builtin/clone.c:121
-#: builtin/submodule--helper.c:1898 builtin/submodule--helper.c:2352
-#: builtin/submodule--helper.c:2902
+#: archive.c:568 builtin/archive.c:89 builtin/clone.c:122 builtin/clone.c:125
+#: builtin/submodule--helper.c:1884 builtin/submodule--helper.c:2718
 msgid "repo"
 msgstr "repo"
 
-#: archive.c:570 builtin/archive.c:92
+#: archive.c:569 builtin/archive.c:90
 msgid "retrieve the archive from remote repository <repo>"
-msgstr "obter o arquivo a partir do repositório remoto <repo>"
+msgstr "obter o arquivo de repositório remoto <repo>"
 
-#: archive.c:571 builtin/archive.c:93 builtin/difftool.c:717
-#: builtin/notes.c:498
+#: archive.c:570 builtin/archive.c:91 builtin/difftool.c:708
+#: builtin/notes.c:496
 msgid "command"
 msgstr "comando"
 
-#: archive.c:572 builtin/archive.c:94
+#: archive.c:571 builtin/archive.c:92
 msgid "path to the remote git-upload-archive command"
 msgstr "caminho para o comando git-upload-archive no remoto"
 
-#: archive.c:579
+#: archive.c:578
 msgid "Unexpected option --remote"
 msgstr "Opção inesperada --remote"
 
-#: archive.c:581
-msgid "Option --exec can only be used together with --remote"
-msgstr "Opção --exec apenas pode ser usada com --remote"
+#: archive.c:580 fetch-pack.c:300 revision.c:2914 builtin/add.c:530
+#: builtin/add.c:562 builtin/checkout.c:1782 builtin/clone.c:1099
+#: builtin/clone.c:1102 builtin/commit.c:371 builtin/fast-export.c:1230
+#: builtin/index-pack.c:1854 builtin/log.c:2140 builtin/reset.c:442
+#: builtin/reset.c:500 builtin/rm.c:281 builtin/stash.c:1708
+#: builtin/worktree.c:580 builtin/worktree.c:781 http-fetch.c:144
+#: http-fetch.c:153
+#, c-format
+msgid "the option '%s' requires '%s'"
+msgstr "opção '%s' exige '%s'"
 
-#: archive.c:583
+#: archive.c:582
 msgid "Unexpected option --output"
 msgstr "Opção inesperada --output"
 
-#: archive.c:585
-msgid "Options --add-file and --remote cannot be used together"
-msgstr "Opções --add-file e --remote podem nada ser usadas juntas"
-
-#: archive.c:607
+#: archive.c:606
 #, c-format
 msgid "Unknown archive format '%s'"
-msgstr "Formato de arquivo desconhecido '%s'"
+msgstr "Formato de arquivo '%s' desconhecido"
 
-#: archive.c:616
+#: archive.c:615
 #, c-format
 msgid "Argument not supported for format '%s': -%d"
 msgstr "Argumento por ser suportado para formato '%s': -%d"
@@ -1919,60 +1963,60 @@ msgstr ""
 "Os padrões negativos são ignorados nos atributos do git\n"
 "Use '\\!' para uma exclamação literal à esquerda."
 
-#: bisect.c:489
+#: bisect.c:488
 #, c-format
 msgid "Badly quoted content in file '%s': %s"
 msgstr "Conteúdo incorretamente citado no ficheiro '%s': %s"
 
-#: bisect.c:699
+#: bisect.c:698
 #, c-format
 msgid "We cannot bisect more!\n"
-msgstr "Conseguimos bisectar mais nenhum!\n"
+msgstr "Conseguimos bissetar mais nada!\n"
 
-#: bisect.c:766
+#: bisect.c:765
 #, c-format
 msgid "Not a valid commit name %s"
-msgstr "Nome de commit inválido %s"
+msgstr "Nome de memória inválido %s"
 
-#: bisect.c:791
+#: bisect.c:790
 #, c-format
 msgid ""
 "The merge base %s is bad.\n"
 "This means the bug has been fixed between %s and [%s].\n"
 msgstr ""
-"A base de integração %s é má (bad).\n"
-"Significa que o bug foi corrigido entre %s e [%s].\n"
+"A base de junção %s é má.\n"
+"Isto significa que o bug foi corrigido entre %s e [%s].\n"
 
-#: bisect.c:796
+#: bisect.c:795
 #, c-format
 msgid ""
 "The merge base %s is new.\n"
 "The property has changed between %s and [%s].\n"
 msgstr ""
-"A base de integração %s é nova (new).\n"
-"A propriedade foi mudada entre %s e [%s].\n"
+"A base de junção %s é nova.\n"
+"A propriedade foi alterada entre %s e [%s].\n"
 
-#: bisect.c:801
+#: bisect.c:800
 #, c-format
 msgid ""
 "The merge base %s is %s.\n"
 "This means the first '%s' commit is between %s and [%s].\n"
 msgstr ""
-"A base de integração %s é %s.\n"
-"Significa que o primeiro commit '%s' está entre %s e [%s].\n"
+"A base de junção %s é %s.\n"
+"Significa que o primeira memória '%s' está entre %s e [%s].\n"
 
-#: bisect.c:809
+#: bisect.c:808
 #, c-format
 msgid ""
 "Some %s revs are not ancestors of the %s rev.\n"
 "git bisect cannot work properly in this case.\n"
 "Maybe you mistook %s and %s revs?\n"
 msgstr ""
-"Algumas revisões %s são sucessores da revisão %s.\n"
-"git bisect pode funcionar incorretamente nesta situação.\n"
-"Talvez tenhas confundido revisões %s e %s?\n"
+"Algumas revs %s são antecessores de nenhuma rev %s.\n"
+"git bisect funciona incorretamente nesta situação.\n"
+"Talvez tenhas confundido as revs %s e %s?\n"
 
-#: bisect.c:822
+#: bisect.c:821
 #, c-format
 msgid ""
 "the merge base between %s and [%s] must be skipped.\n"
@@ -1980,48 +2024,48 @@ msgid ""
 "We continue anyway."
 msgstr ""
 "a base de junção entre %s e [%s] tem de ser saltada.\n"
-"Portanto temos incerteza quanto a o primeiro commit %s estar entre %s e %s.\n"
-"Continuemos de qualquer maneira."
+"Portanto temos incerteza quanto à primeira memória  %s estar entre %s e %s.\n"
+"Continuemos de qualquer das maneiras."
 
-#: bisect.c:861
+#: bisect.c:860
 #, c-format
 msgid "Bisecting: a merge base must be tested\n"
-msgstr "A bissetar: uma base de integração tem de ser testada\n"
+msgstr "Bissetando: uma base de junção tem de ser testada\n"
 
-#: bisect.c:911
+#: bisect.c:910
 #, c-format
 msgid "a %s revision is needed"
 msgstr "precisa-se de uma revisão %s"
 
-#: bisect.c:941 builtin/notes.c:177 builtin/tag.c:298
+#: bisect.c:940
 #, c-format
 msgid "could not create file '%s'"
 msgstr "incapaz criar ficheiro '%s'"
 
-#: bisect.c:987 builtin/merge.c:153
+#: bisect.c:986 builtin/merge.c:155
 #, c-format
 msgid "could not read file '%s'"
 msgstr "incapaz ler ficheiro '%s'"
 
-#: bisect.c:1027
+#: bisect.c:1026
 msgid "reading bisect refs failed"
 msgstr "falhou ler refs de bisseção"
 
-#: bisect.c:1057
+#: bisect.c:1056
 #, c-format
 msgid "%s was both %s and %s\n"
 msgstr "%s era %s e %s em simultâneo\n"
 
-#: bisect.c:1066
+#: bisect.c:1065
 #, c-format
 msgid ""
 "No testable commit found.\n"
 "Maybe you started with bad path arguments?\n"
 msgstr ""
-"Nenhum commit testável encontrado.\n"
-"Talvez tenha começado com parâmetros de caminho incorretos?\n"
+"Nenhuma memória testável encontrada.\n"
+"Talvez tenha começado com argumentos de caminho incorretos?\n"
 
-#: bisect.c:1095
+#: bisect.c:1094
 #, c-format
 msgid "(roughly %d step)"
 msgid_plural "(roughly %d steps)"
@@ -2031,143 +2075,178 @@ msgstr[1] "(aproximadamente %d passos)"
 #. TRANSLATORS: the last %s will be replaced with "(roughly %d
 #. steps)" translation.
 #.
-#: bisect.c:1101
+#: bisect.c:1100
 #, c-format
 msgid "Bisecting: %d revision left to test after this %s\n"
 msgid_plural "Bisecting: %d revisions left to test after this %s\n"
-msgstr[0] "A bissetar: falta %d revisão para testar depois desta %s\n"
-msgstr[1] "A bissetar: faltam %d revisões para testar depois desta %s\n"
+msgstr[0] "Bissetando: falta %d revisão para testar depois desta %s\n"
+msgstr[1] "Bissetando: faltam %d revisões para testar depois desta %s\n"
 
-#: blame.c:2776
+#: blame.c:2773
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents e --reverse são imiscíveis."
 
-#: blame.c:2790
+#: blame.c:2787
 msgid "cannot use --contents with final commit object name"
-msgstr "usar --contents com nome de objeto commit final é impossível"
+msgstr "incapaz usar --contents com nome de objeto de memória final"
 
-#: blame.c:2811
+#: blame.c:2808
 msgid "--reverse and --first-parent together require specified latest commit"
-msgstr "--reverse e --first-parent juntos exige que se especifique a última memória"
+msgstr ""
+"--reverse e --first-parent juntos exige que se especifique a última memória"
 
-#: blame.c:2820 bundle.c:224 ref-filter.c:2278 remote.c:2041 sequencer.c:2333
-#: sequencer.c:4865 submodule.c:844 builtin/commit.c:1113 builtin/log.c:414
-#: builtin/log.c:1021 builtin/log.c:1629 builtin/log.c:2056 builtin/log.c:2346
-#: builtin/merge.c:428 builtin/pack-objects.c:3343 builtin/pack-objects.c:3806
-#: builtin/pack-objects.c:3821 builtin/shortlog.c:255
+#: blame.c:2817 bundle.c:231 midx.c:1058 ref-filter.c:2371 remote.c:2157
+#: sequencer.c:2348 sequencer.c:4872 submodule.c:913 builtin/commit.c:1118
+#: builtin/log.c:437 builtin/log.c:1055 builtin/log.c:1663 builtin/log.c:2096
+#: builtin/log.c:2387 builtin/merge.c:431 builtin/pack-objects.c:3381
+#: builtin/pack-objects.c:3781 builtin/pack-objects.c:3796
+#: builtin/shortlog.c:255
 msgid "revision walk setup failed"
 msgstr "falha ao configurar percurso de revisões"
 
-#: blame.c:2838
+#: blame.c:2835
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
-"--reverse --first-parent juntos requer intervalo ao longo do primeiro-pai"
+"--reverse --first-parent juntos requer intervalo ao longo da série primeiro-"
+"parente"
 
-#: blame.c:2849
+#: blame.c:2846
 #, c-format
 msgid "no such path %s in %s"
 msgstr "path %s inexistente em %s"
 
-#: blame.c:2860
+#: blame.c:2857
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "incapaz ler blob %s para path %s"
 
-#: branch.c:53
-#, c-format
+#: branch.c:93
 msgid ""
-"\n"
-"After fixing the error cause you may try to fix up\n"
-"the remote tracking information by invoking\n"
-"\"git branch --set-upstream-to=%s%s%s\"."
+"cannot inherit upstream tracking configuration of multiple refs when "
+"rebasing is requested"
 msgstr ""
-"\n"
-"Após resolver a causa do erro, pode tentar corrigir\n"
-"o ramo remoto que deve ser seguido, invocando\n"
-"\"git branch --set-upstream-to=%s%s%s\"."
+"incapaz de herdar configuração de monitorização de upstream de múltiplas "
+"refs quando é pedido um rebase"
 
-#: branch.c:67
+#: branch.c:104
 #, c-format
-msgid "Not setting branch %s as its own upstream."
-msgstr "Indefinindo ramo %s como seu próprio upstream."
+msgid "not setting branch '%s' as its own upstream"
+msgstr "deixando por definir ramo '%s' como o seu próprio upstream"
 
-#: branch.c:93
+#: branch.c:160
 #, c-format
-msgid "Branch '%s' set up to track remote branch '%s' from '%s' by rebasing."
-msgstr "Ramo %s configurado para seguir o ramo remoto %s de %s por rebase."
+msgid "branch '%s' set up to track '%s' by rebasing."
+msgstr "ramo '%s' configurado para monitorizar '%s' por rebaseamento."
 
-#: branch.c:94
+#: branch.c:161
 #, c-format
-msgid "Branch '%s' set up to track remote branch '%s' from '%s'."
-msgstr "Ramo '%s' definido para monitorizar ramo remoto '%s' de '%s'."
+msgid "branch '%s' set up to track '%s'."
+msgstr "ramo '%s' configurado para monitorizar '%s'."
 
-#: branch.c:98
+#: branch.c:164
 #, c-format
-msgid "Branch '%s' set up to track local branch '%s' by rebasing."
-msgstr "Ramo %s configurado para seguir o ramo local %s por rebase."
+msgid "branch '%s' set up to track:"
+msgstr "ramo '%s' configurado para monitorizar:"
 
-#: branch.c:99
-#, c-format
-msgid "Branch '%s' set up to track local branch '%s'."
-msgstr "Ramo %s configurado para seguir o ramo local %s."
+#: branch.c:176
+msgid "unable to write upstream branch configuration"
+msgstr "incapaz de escrever configuração de ramo upstream"
 
-#: branch.c:104
-#, c-format
-msgid "Branch '%s' set up to track remote ref '%s' by rebasing."
-msgstr "Ramo %s configurado para seguir a referência remota %s por rebase."
+#: branch.c:178
+msgid ""
+"\n"
+"After fixing the error cause you may try to fix up\n"
+"the remote tracking information by invoking:"
+msgstr ""
+"\n"
+"Após consertar a causa do erro, podes tentar consertar\n"
+"a informação de monitorização de remoto, invocando:"
 
-#: branch.c:105
+#: branch.c:219
 #, c-format
-msgid "Branch '%s' set up to track remote ref '%s'."
-msgstr "Ramo %s configurado para seguir a referência remota %s."
+msgid "asked to inherit tracking from '%s', but no remote is set"
+msgstr ""
+"foi pedido para herdar a monitorização de '%s', mas o remoto está por definir"
 
-#: branch.c:109
+#: branch.c:225
 #, c-format
-msgid "Branch '%s' set up to track local ref '%s' by rebasing."
-msgstr "Ramo %s configurado para seguir a referência local %s por rebase."
+msgid "asked to inherit tracking from '%s', but no merge configuration is set"
+msgstr ""
+"foi pedido para herdar a monitorização de '%s', mas a configuração de junção "
+"está por definir"
 
-#: branch.c:110
+#: branch.c:277
 #, c-format
-msgid "Branch '%s' set up to track local ref '%s'."
-msgstr "Ramo %s configurado para seguir a referência local %s."
+msgid "not tracking: ambiguous information for ref '%s'"
+msgstr "por monitorizar: informação ambígua para ref '%s'"
 
-#: branch.c:119
-msgid "Unable to write upstream branch configuration"
-msgstr "Incapaz de escrever configuração de ramo upstream"
+#. TRANSLATORS: This is a line listing a remote with duplicate
+#. refspecs in the advice message below. For RTL languages you'll
+#. probably want to swap the "%s" and leading "  " space around.
+#.
+#. TRANSLATORS: This is line item of ambiguous object output
+#. from describe_ambiguous_object() above. For RTL languages
+#. you'll probably want to swap the "%s" and leading " " space
+#. around.
+#.
+#: branch.c:289 object-name.c:464
+#, c-format
+msgid "  %s\n"
+msgstr "  %s\n"
 
-#: branch.c:156
+#. TRANSLATORS: The second argument is a \n-delimited list of
+#. duplicate refspecs, composed above.
+#.
+#: branch.c:295
 #, c-format
-msgid "Not tracking: ambiguous information for ref %s"
-msgstr "Incapaz de seguir: informação ambígua para ref %s"
+msgid ""
+"There are multiple remotes whose fetch refspecs map to the remote\n"
+"tracking ref '%s':\n"
+"%s\n"
+"This is typically a configuration error.\n"
+"\n"
+"To support setting up tracking branches, ensure that\n"
+"different remotes' fetch refspecs map into different\n"
+"tracking namespaces."
+msgstr ""
+"Há múltiplos remotos que os espetro-refs de busca corresponde à\n"
+"ref remota de monitorização '%s':\n"
+"%s\n"
+"Isto tipicamente é um erro de configuração.\n"
+"\n"
+"Para sustentar definir ramos de monitorização, assegura\n"
+"que diferentes espetro-refs remotos de busca,\n"
+"correspondam a diferentes namespaces de monitorização."
 
-#: branch.c:189
+#: branch.c:344
 #, c-format
-msgid "'%s' is not a valid branch name."
-msgstr "'%s' é um nome inválido para ramo."
+msgid "'%s' is not a valid branch name"
+msgstr "'%s' é um nome inválido para ramo"
 
-#: branch.c:208
+#: branch.c:364
 #, c-format
-msgid "A branch named '%s' already exists."
-msgstr "Já existe um ramo designado '%s'."
+msgid "a branch named '%s' already exists"
+msgstr "já existe um ramo designado '%s'"
 
-#: branch.c:213
-msgid "Cannot force update the current branch."
-msgstr "Incapaz de forçar a atualização do ramo atual."
+#: branch.c:370
+#, c-format
+msgid "cannot force update the branch '%s' checked out at '%s'"
+msgstr "incapaz forçar atualização de ramo '%s' observado em '%s'"
 
-#: branch.c:233
+#: branch.c:393
 #, c-format
-msgid "Cannot setup tracking information; starting point '%s' is not a branch."
+msgid "cannot set up tracking information; starting point '%s' is not a branch"
 msgstr ""
-"Impossível configurar informação sobre seguir; o ponto inicial '%s' é ramo "
-"nenhum."
+"incapaz configurar informação de monitorização; o ponto inicial '%s' é ramo "
+"nenhum"
 
-#: branch.c:235
+#: branch.c:395
 #, c-format
 msgid "the requested upstream branch '%s' does not exist"
 msgstr "o ramo upstream solicitado '%s' é inexistente"
 
-#: branch.c:237
+#: branch.c:397
 msgid ""
 "\n"
 "If you are planning on basing your work on an upstream\n"
@@ -2179,416 +2258,437 @@ msgid ""
 "\"git push -u\" to set the upstream config as you push."
 msgstr ""
 "\n"
-"Se pretende efetuar rebase do seu trabalho sobre um ramo\n"
-"a montante que já existe no remoto, pode ser necessário\n"
-"executar \"git fetch\" para obtê-lo.\n"
+"Se pretendes basear teu trabalho sobre um ramo upstream\n"
+"existente no remoto, poderás ter de executar \"git fetch\"\n"
+"para obtê-lo.\n"
 "\n"
-"Se pretende atirar um novo ramo local que irá seguir\n"
-"o seu homólogo remoto, pode usar \"git push -u\" para configurar\n"
-"o respetivo ramo a montante, ao mesmo tempo que publica."
+"Se pretendes atirar um novo ramo local que monitorizará\n"
+"seu homólogo remoto, poderás usar \"git push -u\" para\n"
+"definir a config upstream, enquanto atiras."
+
+#: branch.c:445 builtin/replace.c:321 builtin/replace.c:377
+#: builtin/replace.c:423 builtin/replace.c:453
+#, c-format
+msgid "not a valid object name: '%s'"
+msgstr "nome de objeto inválido: '%s'"
+
+#: branch.c:465
+#, c-format
+msgid "ambiguous object name: '%s'"
+msgstr "nome de objeto ambíguo: '%s'"
+
+#: branch.c:470
+#, c-format
+msgid "not a valid branch point: '%s'"
+msgstr "ponto de ramo inválido: '%s'"
 
-#: branch.c:281
+#: branch.c:658
 #, c-format
-msgid "Not a valid object name: '%s'."
-msgstr "Nome de objeto inválido: '%s'."
+msgid "submodule '%s': unable to find submodule"
+msgstr "submódulo '%s': incapaz encontrar submódulo"
 
-#: branch.c:301
+#: branch.c:661
 #, c-format
-msgid "Ambiguous object name: '%s'."
-msgstr "Nome de objeto ambíguo: '%s'."
+msgid ""
+"You may try updating the submodules using 'git checkout %s && git submodule "
+"update --init'"
+msgstr ""
 
-#: branch.c:306
+#: branch.c:672 branch.c:698
 #, c-format
-msgid "Not a valid branch point: '%s'."
-msgstr "Ponto no ramo inválido: '%s'."
+msgid "submodule '%s': cannot create branch '%s'"
+msgstr "submódulo '%s': incapaz criar ramo '%s'"
 
-#: branch.c:366
+#: branch.c:730
 #, c-format
 msgid "'%s' is already checked out at '%s'"
-msgstr "'%s' foi já extraído em '%s'"
+msgstr "'%s' já está observado em '%s'"
 
-#: branch.c:389
+#: branch.c:755
 #, c-format
 msgid "HEAD of working tree %s is not updated"
-msgstr "HEAD da working tree %s está desatualizada"
+msgstr "HEAD da árvore-trabalho %s está desatualizada"
 
-#: bundle.c:44
+#: bundle.c:45
 #, c-format
 msgid "unrecognized bundle hash algorithm: %s"
-msgstr "algoritmo hash de bundle irreconhecível: %s"
+msgstr "algoritmo hash de arquivo-pacote irreconhecível: %s"
 
-#: bundle.c:48
+#: bundle.c:53
 #, c-format
 msgid "unknown capability '%s'"
 msgstr "capacidade desconhecida '%s'"
 
-#: bundle.c:74
+#: bundle.c:79
 #, c-format
 msgid "'%s' does not look like a v2 or v3 bundle file"
-msgstr "'%s' parece-se com ficheiro bundle v2 ou v3 nenhum"
+msgstr "'%s' parece-se com ficheiro arquivo-pacote v2 ou v3 nenhum"
 
-#: bundle.c:113
+#: bundle.c:118
 #, c-format
 msgid "unrecognized header: %s%s (%d)"
 msgstr "cabeçalho irreconhecível: %s%s (%d)"
 
-#: bundle.c:140 rerere.c:464 rerere.c:674 sequencer.c:2593 sequencer.c:3385
-#: builtin/commit.c:861
+#: bundle.c:145 rerere.c:464 rerere.c:675 sequencer.c:2616 sequencer.c:3402
+#: builtin/commit.c:865
 #, c-format
 msgid "could not open '%s'"
 msgstr "incapaz abrir '%s'"
 
-#: bundle.c:198
+#: bundle.c:203
 msgid "Repository lacks these prerequisite commits:"
-msgstr "Falta ao repositório estes pré-requisitos de commits:"
+msgstr "Falta ao repositório estas memórias de pré-requisito:"
 
-#: bundle.c:201
+#: bundle.c:206
 msgid "need a repository to verify a bundle"
-msgstr "é preciso repositório para verificar um bundle."
+msgstr "é preciso repositório para verificar um arquivo-pacote"
 
-#: bundle.c:257
+#: bundle.c:264
 #, c-format
 msgid "The bundle contains this ref:"
-msgid_plural "The bundle contains these %d refs:"
-msgstr[0] "O bundle contém esta referência:"
-msgstr[1] "O bundle contém estas %d referências:"
+msgid_plural "The bundle contains these %<PRIuMAX> refs:"
+msgstr[0] "O arquivo-pacote contém esta ref:"
+msgstr[1] "O arquivo-pacote contém estas %<PRIuMAX> refs:"
 
-#: bundle.c:264
+#: bundle.c:272
 msgid "The bundle records a complete history."
-msgstr "O pacote regista um histórico completo."
+msgstr "O arquivo-pacote regista um histórico completo."
 
-#: bundle.c:266
+#: bundle.c:274
 #, c-format
 msgid "The bundle requires this ref:"
-msgid_plural "The bundle requires these %d refs:"
-msgstr[0] "O bundle requer esta referência:"
-msgstr[1] "O bundle requer estas %d referências:"
+msgid_plural "The bundle requires these %<PRIuMAX> refs:"
+msgstr[0] "O arquivo-pacote exige esta ref:"
+msgstr[1] "O arquivo-pacote exige estas %<PRIuMAX> refs:"
 
-#: bundle.c:333
+#: bundle.c:350
 msgid "unable to dup bundle descriptor"
-msgstr "incapaz de dup descritor de bundle"
+msgstr "incapaz de dup descritor de arquivo-pacote"
 
-#: bundle.c:340
+#: bundle.c:357
 msgid "Could not spawn pack-objects"
-msgstr "Impossível gerar pack-objects"
+msgstr "Incapaz spawn objetos-pacote"
 
-#: bundle.c:351
+#: bundle.c:368
 msgid "pack-objects died"
-msgstr "pack-objects terminaram inesperadamente"
+msgstr "objetos-pacote terminaram inesperadamente"
 
-#: bundle.c:400
+#: bundle.c:417
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
-msgstr "a referência '%s' é excluída pelas opções de rev-list"
+msgstr "ref '%s' é excluída pelas opções de rev-list"
 
-#: bundle.c:504
+#: bundle.c:533 builtin/log.c:211 builtin/log.c:1975 builtin/shortlog.c:400
 #, c-format
-msgid "unsupported bundle version %d"
-msgstr "fora de suporte versão bundle %d"
+msgid "unrecognized argument: %s"
+msgstr "argumento irreconhecível: %s"
 
-#: bundle.c:506
+#: bundle.c:548
 #, c-format
-msgid "cannot write bundle version %d with algorithm %s"
-msgstr ""
+msgid "unsupported bundle version %d"
+msgstr "versão arquivo-pacote %d insustentada"
 
-#: bundle.c:524 builtin/log.c:210 builtin/log.c:1938 builtin/shortlog.c:396
+#: bundle.c:550
 #, c-format
-msgid "unrecognized argument: %s"
-msgstr "argumento irreconhecível: %s"
+msgid "cannot write bundle version %d with algorithm %s"
+msgstr "incapaz escrever versão arquivo-pacote %d com algoritmo %s"
 
-#: bundle.c:553
+#: bundle.c:600
 msgid "Refusing to create empty bundle."
-msgstr "Criação de bundle vazio recusada."
+msgstr "Criação de arquivo-pacote vazio recusada."
 
-#: bundle.c:563
+#: bundle.c:610
 #, c-format
 msgid "cannot create '%s'"
 msgstr "incapaz criar '%s'"
 
-#: bundle.c:588
+#: bundle.c:639
 msgid "index-pack died"
 msgstr "index-pack terminou inesperadamente"
 
 #: chunk-format.c:117
 msgid "terminating chunk id appears earlier than expected"
-msgstr ""
+msgstr "fim de id de fragmento aparace mais cedo do que esperado"
 
 #: chunk-format.c:126
 #, c-format
 msgid "improper chunk offset(s) %<PRIx64> and %<PRIx64>"
-msgstr ""
+msgstr "deslocamento(s) de fragmento %<PRIx64> e %<PRIx64> inapropriados"
 
 #: chunk-format.c:133
 #, c-format
 msgid "duplicate chunk ID %<PRIx32> found"
-msgstr ""
+msgstr "encontrei ID de fragmento %<PRIx32> duplicado"
 
 #: chunk-format.c:147
 #, c-format
 msgid "final chunk has non-zero id %<PRIx32>"
-msgstr ""
+msgstr "fragmento final tem id %<PRIx32> diferente de zero"
 
-#: color.c:329
+#: color.c:354
 #, c-format
 msgid "invalid color value: %.*s"
 msgstr "valor de cor inválido: %.*s"
 
-#: commit-graph.c:204 midx.c:47
+#: commit-graph.c:204 midx.c:52
 msgid "invalid hash version"
 msgstr "versão de hash inválida"
 
 #: commit-graph.c:262
 msgid "commit-graph file is too small"
-msgstr ""
+msgstr "ficheiro grafo-memória é demasiado pequeno"
 
 #: commit-graph.c:355
 #, c-format
 msgid "commit-graph signature %X does not match signature %X"
-msgstr "assinatura commit-graph %X corresponde a assinatura %X nenhuma"
+msgstr "assinatura de grafo-memória %X corresponde a assinatura %X nenhuma"
 
 #: commit-graph.c:362
 #, c-format
 msgid "commit-graph version %X does not match version %X"
-msgstr "commit-graph versão %X corresponde a versão %X nenhuma"
+msgstr "grafo-memória versão %X corresponde a versão %X nenhuma"
 
 #: commit-graph.c:369
 #, c-format
 msgid "commit-graph hash version %X does not match version %X"
-msgstr ""
+msgstr "versão de hash de grafo-memória %X corresponde a nenhuma versão %X"
 
 #: commit-graph.c:386
 #, c-format
 msgid "commit-graph file is too small to hold %u chunks"
-msgstr ""
+msgstr "ficheiro grafo-memória é demasiado pequeno para ter %u fragmentos"
 
-#: commit-graph.c:482
+#: commit-graph.c:485
 msgid "commit-graph has no base graphs chunk"
-msgstr ""
+msgstr "grafo-memória tem nenhuns fragmentos de base de grafos"
 
-#: commit-graph.c:492
+#: commit-graph.c:495
 msgid "commit-graph chain does not match"
-msgstr ""
+msgstr "série grafo-memória tem correspondência nenhuma"
 
-#: commit-graph.c:540
+#: commit-graph.c:543
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
-msgstr ""
+msgstr "série grafo-memória inválida: linha '%s' é hash nenhum"
 
-#: commit-graph.c:564
+#: commit-graph.c:567
 msgid "unable to find all commit-graph files"
-msgstr "incapaz de encontrar todos ficheiros commit-graph"
+msgstr "incapaz de encontrar todos ficheiros grafo-memória"
 
-#: commit-graph.c:745 commit-graph.c:782
+#: commit-graph.c:752 commit-graph.c:789
 msgid "invalid commit position. commit-graph is likely corrupt"
-msgstr ""
+msgstr "posição de memória inválida. provavelmente grafo-memória está rompido"
 
-#: commit-graph.c:766
+#: commit-graph.c:773
 #, c-format
 msgid "could not find commit %s"
 msgstr "incapaz encontrar memória %s"
 
-#: commit-graph.c:799
+#: commit-graph.c:806
 msgid "commit-graph requires overflow generation data but has none"
-msgstr ""
+msgstr "grafo-memória exige informação de geração de overflow mas tem nenhuma"
 
-#: commit-graph.c:1075 builtin/am.c:1341
+#: commit-graph.c:1111 builtin/am.c:1370 builtin/checkout.c:775
+#: builtin/clone.c:705
 #, c-format
 msgid "unable to parse commit %s"
-msgstr "incapaz analisar commit %s"
+msgstr "incapaz processar memória %s"
 
-#: commit-graph.c:1337 builtin/pack-objects.c:3057
+#: commit-graph.c:1373 builtin/pack-objects.c:3078
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "incapaz obter tipo de objeto %s"
 
-#: commit-graph.c:1368
+#: commit-graph.c:1404
 msgid "Loading known commits in commit graph"
-msgstr ""
+msgstr "Carregando memórias conhecidas em grafo de memória"
 
-#: commit-graph.c:1385
+#: commit-graph.c:1421
 msgid "Expanding reachable commits in commit graph"
-msgstr ""
+msgstr "Expandindo memórias alcançáveis em grafo de memória"
 
-#: commit-graph.c:1405
+#: commit-graph.c:1441
 msgid "Clearing commit marks in commit graph"
-msgstr ""
+msgstr "Limpando marcas de memórias em grafo de memória"
 
-#: commit-graph.c:1424
+#: commit-graph.c:1460
 msgid "Computing commit graph topological levels"
-msgstr ""
+msgstr "Processando níveis topológicos de grafo de memória"
 
-#: commit-graph.c:1477
+#: commit-graph.c:1513
 msgid "Computing commit graph generation numbers"
-msgstr ""
+msgstr "Processando geração de números de grafo de memória"
 
-#: commit-graph.c:1558
+#: commit-graph.c:1598
 msgid "Computing commit changed paths Bloom filters"
-msgstr ""
+msgstr "Processando mudança de caminhos de memória de filtros de Bloom"
 
-#: commit-graph.c:1635
+#: commit-graph.c:1675
 msgid "Collecting referenced commits"
-msgstr "Recolhendo commits referênciados"
+msgstr "Recolhendo memórias referenciadas"
 
-#: commit-graph.c:1660
+#: commit-graph.c:1701
 #, c-format
-msgid "Finding commits for commit graph in %d pack"
-msgid_plural "Finding commits for commit graph in %d packs"
-msgstr[0] ""
-msgstr[1] ""
+msgid "Finding commits for commit graph in %<PRIuMAX> pack"
+msgid_plural "Finding commits for commit graph in %<PRIuMAX> packs"
+msgstr[0] "Encontrando memórias para grafo de memória em %<PRIuMAX> pacote"
+msgstr[1] "Encontrando memórias para grafo de memória em %<PRIuMAX> pacotes"
 
-#: commit-graph.c:1673
+#: commit-graph.c:1714
 #, c-format
 msgid "error adding pack %s"
 msgstr "error adicionando pacote %s"
 
-#: commit-graph.c:1677
+#: commit-graph.c:1718
 #, c-format
 msgid "error opening index for %s"
-msgstr ""
+msgstr "erro ao abrir cenário para %s"
 
-#: commit-graph.c:1714
+#: commit-graph.c:1756
 msgid "Finding commits for commit graph among packed objects"
-msgstr ""
+msgstr "Encontrando, entre objetos de pacote, memórias para grafo de memória"
 
-#: commit-graph.c:1732
+#: commit-graph.c:1774
 msgid "Finding extra edges in commit graph"
-msgstr ""
+msgstr "Encontrando pontas extra em grafo de memória"
 
-#: commit-graph.c:1781
+#: commit-graph.c:1823
 msgid "failed to write correct number of base graph ids"
-msgstr ""
+msgstr "falhou ao escrever números corretos em ids de base grafo"
 
-#: commit-graph.c:1812 midx.c:911
+#: commit-graph.c:1854 midx.c:1168 builtin/sparse-checkout.c:475
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "incapaz criar as pastas superiores a %s"
 
-#: commit-graph.c:1825
+#: commit-graph.c:1868
 msgid "unable to create temporary graph layer"
 msgstr "incapaz criar camada de grafo temporária"
 
-#: commit-graph.c:1830
+#: commit-graph.c:1873
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr "incapaz de ajustar permissão partilhada para '%s'"
 
-#: commit-graph.c:1887
+#: commit-graph.c:1930
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Escrevendo grafo de memória em %d passagem"
+msgstr[1] "Escrevendo grafo de memória em %d passagens"
 
-#: commit-graph.c:1923
+#: commit-graph.c:1967
 msgid "unable to open commit-graph chain file"
-msgstr "incapaz abrir ficheiro commit-graph chain"
+msgstr "incapaz abrir ficheiro de série de grafo-memória"
 
-#: commit-graph.c:1939
+#: commit-graph.c:1983
 msgid "failed to rename base commit-graph file"
-msgstr ""
+msgstr "falhou renomear ficheiro grafo-memória base"
 
-#: commit-graph.c:1959
+#: commit-graph.c:2004
 msgid "failed to rename temporary commit-graph file"
-msgstr "falha a renomear ficheiro commit-graph temporário"
+msgstr "falha a renomear ficheiro grafo-memória temporário"
 
-#: commit-graph.c:2092
+#: commit-graph.c:2137
 msgid "Scanning merged commits"
-msgstr "A adicionar %s integrado"
+msgstr "Procurando memórias de junção"
 
-#: commit-graph.c:2136
+#: commit-graph.c:2181
 msgid "Merging commit-graph"
-msgstr ""
+msgstr "Juntando grafo-memória"
 
-#: commit-graph.c:2244
+#: commit-graph.c:2289
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr ""
+"tentando escrever um grafo-memória, mas 'core.commitGraph' está desativado"
 
-#: commit-graph.c:2351
+#: commit-graph.c:2396
 msgid "too many commits to write graph"
-msgstr "demasiados commits para escrever grafo"
+msgstr "demasiadas memórias para escrever grafo"
 
-#: commit-graph.c:2449
+#: commit-graph.c:2494
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
+"ficheiro grafo-memória tem checksum incorreto e provavelmente está rompido"
 
-#: commit-graph.c:2459
+#: commit-graph.c:2504
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
-msgstr ""
+msgstr "grafo-memória tem ordem de OID incorreta: %s e depois %s"
 
-#: commit-graph.c:2469 commit-graph.c:2484
+#: commit-graph.c:2514 commit-graph.c:2529
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
-msgstr ""
+msgstr "grafo-memória tem valor de fanout incorreto: fanout[%d] = %u != %u"
 
-#: commit-graph.c:2476
+#: commit-graph.c:2521
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
-msgstr "incapaz analisar commit %s de commit-graph"
+msgstr "incapaz processar memória %s de grafo-memória"
 
-#: commit-graph.c:2494
+#: commit-graph.c:2539
 msgid "Verifying commits in commit graph"
-msgstr ""
+msgstr "Verificando memórias em grafo de memória"
 
-#: commit-graph.c:2509
+#: commit-graph.c:2554
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 
-#: commit-graph.c:2516
+#: commit-graph.c:2561
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
 
-#: commit-graph.c:2526
+#: commit-graph.c:2571
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr ""
 
-#: commit-graph.c:2535
+#: commit-graph.c:2580
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr ""
 
-#: commit-graph.c:2549
+#: commit-graph.c:2594
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr ""
 
-#: commit-graph.c:2554
+#: commit-graph.c:2599
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
 msgstr ""
 
-#: commit-graph.c:2558
+#: commit-graph.c:2603
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
 msgstr ""
 
-#: commit-graph.c:2575
+#: commit-graph.c:2620
 #, c-format
 msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
 msgstr ""
 
-#: commit-graph.c:2581
+#: commit-graph.c:2626
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
 
-#: commit.c:52 sequencer.c:3088 builtin/am.c:372 builtin/am.c:417
-#: builtin/am.c:422 builtin/am.c:1420 builtin/am.c:2067 builtin/replace.c:457
+#: commit.c:54 sequencer.c:3105 builtin/am.c:400 builtin/am.c:445
+#: builtin/am.c:450 builtin/am.c:1449 builtin/am.c:2124 builtin/replace.c:456
 #, c-format
 msgid "could not parse %s"
 msgstr "incapaz analisar %s"
 
-#: commit.c:54
+#: commit.c:56
 #, c-format
 msgid "%s %s is not a commit!"
-msgstr "%s %s é commit nenhum!"
+msgstr "%s %s é memória nenhuma!"
 
-#: commit.c:194
+#: commit.c:197
 msgid ""
 "Support for <GIT_DIR>/info/grafts is deprecated\n"
 "and will be removed in a future Git version.\n"
@@ -2599,43 +2699,59 @@ msgid ""
 "Turn this message off by running\n"
 "\"git config advice.graftFileDeprecated false\""
 msgstr ""
+"Sustento a <GIT_DIR>/info/grafts está obsoleto\n"
+"e será removido em versões futuras de Git.\n"
+"\n"
+"Por favor, usa \"git replace --convert-graft-file\"\n"
+"para converter excertos em refs de substituição.\n"
+"\n"
+"Desliga esta mensagem executando\n"
+"\"git config advice.graftFileDeprecated false\""
 
-#: commit.c:1237
+#: commit.c:1252
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr "Commit %s tem assinatura GPG desconfiada, alegadamente por %s."
 
-#: commit.c:1241
+#: commit.c:1256
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "Commit %s tem assinatura GPG incorreta, alegadamente por %s."
 
-#: commit.c:1244
+#: commit.c:1259
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "Commit %s tem assinatura GPG nenhuma."
 
-#: commit.c:1247
+#: commit.c:1262
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "Commit %s tem assinatura correta, por %s\n"
 
-#: commit.c:1501
+#: commit.c:1516
 msgid ""
 "Warning: commit message did not conform to UTF-8.\n"
 "You may want to amend it after fixing the message, or set the config\n"
 "variable i18n.commitencoding to the encoding your project uses.\n"
 msgstr ""
-"aviso: a mensagem de commit é inconforme com UTF-8.\n"
-"Podes querer emendá-lo depois de corrigir a mensagem, ou definir a\n"
-"variável de config i18n.commitencoding com a codificação que o teu\n"
+"Aviso: mensagem de memória é incompatível com UTF-8.\n"
+"Podes querer emendá-lo depois de corrigires a mensagem, ou definir a\n"
+"variável de config i18n.commitencoding para a codificação que o teu\n"
 "projeto usa.\n"
 
 #: compat/obstack.c:406 compat/obstack.c:408
 msgid "memory exhausted"
 msgstr "memória esgotada"
 
-#: config.c:126
+#: compat/terminal.c:167
+msgid "cannot resume in the background, please use 'fg' to resume"
+msgstr ""
+
+#: compat/terminal.c:168
+msgid "cannot restore terminal settings"
+msgstr "incapaz restaurar definições de terminal"
+
+#: config.c:143
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2645,340 +2761,365 @@ msgid ""
 "This might be due to circular includes."
 msgstr ""
 
-#: config.c:142
+#: config.c:159
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "incapaz de expandir include path '%s'"
 
-#: config.c:153
+#: config.c:170
 msgid "relative config includes must come from files"
 msgstr ""
 "configuração relativa com inclusão condicional deve provir de ficheiros"
 
-#: config.c:199
+#: config.c:219
 msgid "relative config include conditionals must come from files"
 msgstr ""
 "configuração relativa com inclusão condicional deve provir de ficheiros"
 
-#: config.c:396
+#: config.c:364
+msgid ""
+"remote URLs cannot be configured in file directly or indirectly included by "
+"includeIf.hasconfig:remote.*.url"
+msgstr ""
+
+#: config.c:508
 #, c-format
 msgid "invalid config format: %s"
 msgstr "formato de config inválido: %s"
 
-#: config.c:400
+#: config.c:512
 #, c-format
 msgid "missing environment variable name for configuration '%.*s'"
 msgstr ""
 
-#: config.c:405
+#: config.c:517
 #, c-format
 msgid "missing environment variable '%s' for configuration '%.*s'"
 msgstr ""
 
-#: config.c:442
+#: config.c:553
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "chave contém secção nenhuma: %s"
 
-#: config.c:448
+#: config.c:558
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr ""
 
-#: config.c:472 sequencer.c:2785
+#: config.c:580 sequencer.c:2802
 #, c-format
 msgid "invalid key: %s"
 msgstr "chave inválida: %s"
 
-#: config.c:478
+#: config.c:585
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr ""
 
-#: config.c:511
+#: config.c:605
 msgid "empty config key"
 msgstr ""
 
-#: config.c:529 config.c:541
+#: config.c:623 config.c:635
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "parâmetro config falso: %s"
 
-#: config.c:555 config.c:572 config.c:579 config.c:588
+#: config.c:649 config.c:666 config.c:673 config.c:682
 #, c-format
 msgid "bogus format in %s"
 msgstr "formato falso em %s"
 
-#: config.c:622
+#: config.c:716
 #, c-format
 msgid "bogus count in %s"
 msgstr "contagem falsa em %s"
 
-#: config.c:626
+#: config.c:720
 #, c-format
 msgid "too many entries in %s"
 msgstr "demasiadas entradas em %s"
 
-#: config.c:636
+#: config.c:730
 #, c-format
 msgid "missing config key %s"
 msgstr "faltando chave config %s"
 
-#: config.c:644
+#: config.c:738
 #, c-format
 msgid "missing config value %s"
 msgstr "faltando valor config %s"
 
-#: config.c:995
+#: config.c:1089
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "linha de configuração %d incorreta no blob %s"
 
-#: config.c:999
+#: config.c:1093
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "linha de configuração %d incorreta no ficheiro %s"
 
-#: config.c:1003
+#: config.c:1097
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "linha de configuração %d incorreta na entrada padrão"
 
-#: config.c:1007
+#: config.c:1101
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "linha de configuração %d incorreta no submódulo-blob %s"
 
-#: config.c:1011
+#: config.c:1105
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "linha de configuração %d incorreta na linha de comandos %s"
 
-#: config.c:1015
+#: config.c:1109
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "linha de configuração %d incorreta em %s"
 
-#: config.c:1152
+#: config.c:1246
 msgid "out of range"
 msgstr "fora de intervalo"
 
-#: config.c:1152
+#: config.c:1246
 msgid "invalid unit"
 msgstr "unidade inválida"
 
-#: config.c:1153
+#: config.c:1247
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "valor numérico de config '%s' inválido para '%s': %s"
 
-#: config.c:1163
+#: config.c:1257
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr "valor numérico '%s' da configuração '%s' incorreto no blob %s: %s"
 
-#: config.c:1166
+#: config.c:1260
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr "valor numérico '%s' da configuração '%s' incorreto no ficheiro %s: %s"
 
-#: config.c:1169
+#: config.c:1263
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr ""
 "valor numérico '%s' da configuração '%s' incorreto na entrada padrão: %s"
 
-#: config.c:1172
+#: config.c:1266
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr ""
 "valor numérico '%s' da configuração '%s' incorreto no submódulo-blob %s: %s"
 
-#: config.c:1175
+#: config.c:1269
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr ""
 "valor numérico '%s' da configuração '%s' incorreto na linha de comandos %s: "
 "%s"
 
-#: config.c:1178
+#: config.c:1272
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr "valor numérico '%s' da configuração '%s' incorreto em %s: %s"
 
-#: config.c:1257
+#: config.c:1368
+#, c-format
+msgid "invalid value for variable %s"
+msgstr "valor inválido para variável %s"
+
+#: config.c:1389
+#, c-format
+msgid "ignoring unknown core.fsync component '%s'"
+msgstr ""
+
+#: config.c:1425
 #, c-format
 msgid "bad boolean config value '%s' for '%s'"
 msgstr "valor booleano de config '%s' inválido para '%s'"
 
-#: config.c:1275
+#: config.c:1443
 #, c-format
 msgid "failed to expand user dir in: '%s'"
-msgstr "falha ao expandir diretório de utilizador em: '%s'"
+msgstr "falhou ao expandir pasta de utilizador em: '%s'"
 
-#: config.c:1284
+#: config.c:1452
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "'%s' em '%s' é carimbo de data/hora inválido"
 
-#: config.c:1377
+#: config.c:1545
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr ""
 
-#: config.c:1391 config.c:1402
+#: config.c:1559 config.c:1570
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "nível de compressão zlib %d incorreto"
 
-#: config.c:1494
+#: config.c:1660
 msgid "core.commentChar should only be one character"
 msgstr ""
 
-#: config.c:1527
+#: config.c:1692
+#, c-format
+msgid "ignoring unknown core.fsyncMethod value '%s'"
+msgstr ""
+
+#: config.c:1698
+msgid "core.fsyncObjectFiles is deprecated; use core.fsync instead"
+msgstr ""
+
+#: config.c:1714
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "modo inválido para criação de objeto: %s"
 
-#: config.c:1599
+#: config.c:1800
 #, c-format
 msgid "malformed value for %s"
 msgstr "valor malformado para %s"
 
-#: config.c:1625
+#: config.c:1826
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "valor malformado para %s: %s"
 
-#: config.c:1626
+#: config.c:1827
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr ""
 
-#: config.c:1687 builtin/pack-objects.c:4084
+#: config.c:1888 builtin/pack-objects.c:4078
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "nível de compactação do pacote %d incorreto"
 
-#: config.c:1809
+#: config.c:2014
 #, c-format
 msgid "unable to load config blob object '%s'"
-msgstr "incapaz carregar objeto blob config '%s'"
+msgstr "incapaz carregar config de objeto-blob '%s'"
 
-#: config.c:1812
+#: config.c:2017
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "referência '%s' aponta para blob nenhum"
 
-#: config.c:1829
+#: config.c:2035
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "incapaz resolver blog config '%s'"
 
-#: config.c:1874
+#: config.c:2080
 #, c-format
 msgid "failed to parse %s"
 msgstr "falhou processar %s"
 
-#: config.c:1930
+#: config.c:2136
 msgid "unable to parse command-line config"
 msgstr "incapaz analisar config de linha de comandos"
 
-#: config.c:2294
+#: config.c:2512
 msgid "unknown error occurred while reading the configuration files"
 msgstr ""
 "ocorreu um erro desconhecido durante a leitura dos ficheiros de configuração"
 
-#: config.c:2468
+#: config.c:2686
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "Inválido %s: '%s'"
 
-#: config.c:2513
+#: config.c:2731
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr "o valor '%d' de splitIndex.maxPercentChange deve estar entre 0 e 100"
 
-#: config.c:2559
+#: config.c:2763
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "incapaz analisar '%s' da configuração de linha de comandos"
 
-#: config.c:2561
+#: config.c:2765
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "variável de configuração '%s' incorreta no ficheiro '%s' na linha %d"
 
-#: config.c:2645
+#: config.c:2850
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "nome de seção '%s' inválido"
 
-#: config.c:2677
+#: config.c:2882
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s tem múltiplos valores"
 
-#: config.c:2706
+#: config.c:2911
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "falha a escrever novo ficheiro configuração %s"
 
-#: config.c:2958 config.c:3285
+#: config.c:3177 config.c:3518
 #, c-format
 msgid "could not lock config file %s"
 msgstr "incapaz trancar ficheiro config %s"
 
-#: config.c:2969
+#: config.c:3188
 #, c-format
 msgid "opening %s"
 msgstr "abrindo %s"
 
-#: config.c:3006 builtin/config.c:361
+#: config.c:3225 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "padrão inválido: %s"
 
-#: config.c:3031
+#: config.c:3250
 #, c-format
 msgid "invalid config file %s"
 msgstr "ficheiro config inválido %s"
 
-#: config.c:3044 config.c:3298
+#: config.c:3263 config.c:3531
 #, c-format
 msgid "fstat on %s failed"
 msgstr "fstat em %s falhou"
 
-#: config.c:3055
+#: config.c:3274
 #, c-format
 msgid "unable to mmap '%s'%s"
 msgstr "incapaz mmap '%s'%s"
 
-#: config.c:3065 config.c:3303
+#: config.c:3284 config.c:3536
 #, c-format
 msgid "chmod on %s failed"
 msgstr "chmod em %s falhou"
 
-#: config.c:3150 config.c:3400
+#: config.c:3369 config.c:3633
 #, c-format
 msgid "could not write config file %s"
 msgstr "incapaz escrever ficheiro config %s"
 
-#: config.c:3184
+#: config.c:3403
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "incapaz definir '%s' como '%s'"
 
-#: config.c:3186 builtin/remote.c:657 builtin/remote.c:855 builtin/remote.c:863
+#: config.c:3405 builtin/remote.c:666 builtin/remote.c:885 builtin/remote.c:893
 #, c-format
 msgid "could not unset '%s'"
-msgstr "incapaz desdefinir '%s'"
+msgstr "incapaz indefinir '%s'"
 
-#: config.c:3276
+#: config.c:3509
 #, c-format
 msgid "invalid section name: %s"
 msgstr ""
 
-#: config.c:3443
+#: config.c:3676
 #, c-format
 msgid "missing value for '%s'"
 msgstr ""
@@ -3013,79 +3154,79 @@ msgstr "servidor tem fora suporte a característica '%s'"
 msgid "expected flush after capabilities"
 msgstr ""
 
-#: connect.c:263
+#: connect.c:265
 #, c-format
 msgid "ignoring capabilities after first line '%s'"
 msgstr ""
 
-#: connect.c:284
+#: connect.c:286
 msgid "protocol error: unexpected capabilities^{}"
 msgstr ""
 
-#: connect.c:306
+#: connect.c:308
 #, c-format
 msgid "protocol error: expected shallow sha-1, got '%s'"
 msgstr ""
 
-#: connect.c:308
+#: connect.c:310
 msgid "repository on the other end cannot be shallow"
 msgstr ""
 
-#: connect.c:347
+#: connect.c:349
 msgid "invalid packet"
 msgstr ""
 
-#: connect.c:367
+#: connect.c:369
 #, c-format
 msgid "protocol error: unexpected '%s'"
 msgstr ""
 
-#: connect.c:497
+#: connect.c:499
 #, c-format
 msgid "unknown object format '%s' specified by server"
 msgstr "objeto desconhecido '%s' pelo formato em servidor."
 
-#: connect.c:526
+#: connect.c:528
 #, c-format
 msgid "invalid ls-refs response: %s"
 msgstr ""
 
-#: connect.c:530
+#: connect.c:532
 msgid "expected flush after ref listing"
 msgstr ""
 
-#: connect.c:533
+#: connect.c:535
 msgid "expected response end packet after ref listing"
 msgstr ""
 
-#: connect.c:666
+#: connect.c:670
 #, c-format
 msgid "protocol '%s' is not supported"
 msgstr "protocolo '%s' é insustentado"
 
-#: connect.c:717
+#: connect.c:721
 msgid "unable to set SO_KEEPALIVE on socket"
 msgstr ""
 
-#: connect.c:757 connect.c:820
+#: connect.c:761 connect.c:824
 #, c-format
 msgid "Looking up %s ... "
 msgstr ""
 
-#: connect.c:761
+#: connect.c:765
 #, c-format
 msgid "unable to look up %s (port %s) (%s)"
 msgstr "incapaz procurar %s (porta %s) (%s)"
 
 #. TRANSLATORS: this is the end of "Looking up %s ... "
-#: connect.c:765 connect.c:836
+#: connect.c:769 connect.c:840
 #, c-format
 msgid ""
 "done.\n"
 "Connecting to %s (port %s) ... "
 msgstr ""
 
-#: connect.c:787 connect.c:864
+#: connect.c:791 connect.c:868
 #, c-format
 msgid ""
 "unable to connect to %s:\n"
@@ -3095,77 +3236,78 @@ msgstr ""
 "%s"
 
 #. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:793 connect.c:870
+#: connect.c:797 connect.c:874
 msgid "done."
 msgstr "concluído."
 
-#: connect.c:824
+#: connect.c:828
 #, c-format
 msgid "unable to look up %s (%s)"
 msgstr "incapaz procurar %s (%s)"
 
-#: connect.c:830
+#: connect.c:834
 #, c-format
 msgid "unknown port %s"
 msgstr ""
 
-#: connect.c:967 connect.c:1299
+#: connect.c:971 connect.c:1303
 #, c-format
 msgid "strange hostname '%s' blocked"
 msgstr ""
 
-#: connect.c:969
+#: connect.c:973
 #, c-format
 msgid "strange port '%s' blocked"
 msgstr ""
 
-#: connect.c:979
+#: connect.c:983
 #, c-format
 msgid "cannot start proxy %s"
 msgstr "incapaz começar proxy %s"
 
-#: connect.c:1050
+#: connect.c:1054
 msgid "no path specified; see 'git help pull' for valid url syntax"
-msgstr "caminho nenhum especificado; vê 'git help pull' para sintaxe de url válida"
+msgstr ""
+"caminho nenhum especificado; vê 'git help pull' para sintaxe de url válida"
 
-#: connect.c:1190
+#: connect.c:1194
 msgid "newline is forbidden in git:// hosts and repo paths"
 msgstr "parágrafo é proibido em hosts git:// e caminhos repo"
 
-#: connect.c:1247
+#: connect.c:1251
 msgid "ssh variant 'simple' does not support -4"
 msgstr ""
 
-#: connect.c:1259
+#: connect.c:1263
 msgid "ssh variant 'simple' does not support -6"
 msgstr ""
 
-#: connect.c:1276
+#: connect.c:1280
 msgid "ssh variant 'simple' does not support setting port"
 msgstr "ssh variant 'simple' insustenta definir porta"
 
-#: connect.c:1388
+#: connect.c:1392
 #, c-format
 msgid "strange pathname '%s' blocked"
 msgstr ""
 
-#: connect.c:1436
+#: connect.c:1440
 msgid "unable to fork"
-msgstr "incapaz de aforquilhar"
+msgstr "incapaz de forquear"
 
-#: connected.c:108 builtin/fsck.c:189 builtin/prune.c:45
+#: connected.c:109 builtin/fsck.c:189 builtin/prune.c:57
 msgid "Checking connectivity"
 msgstr "A verificar conectividade"
 
-#: connected.c:120
+#: connected.c:122
 msgid "Could not run 'git rev-list'"
 msgstr "Impossível executar 'git rev-list'"
 
-#: connected.c:144
+#: connected.c:146
 msgid "failed write to rev-list"
 msgstr "falhou escrever para rev-list"
 
-#: connected.c:149
+#: connected.c:151
 msgid "failed to close rev-list's stdin"
 msgstr "falha ao fechar entrada padrão de rev-list"
 
@@ -3186,7 +3328,7 @@ msgid ""
 "The file will have its original line endings in your working directory"
 msgstr ""
 "CRLF será substituído por LF em %s.\n"
-"O final de linha original será mantido no ficheiro da sua árvore de trabalho."
+"O ficheiro da tua árvore-trabalho terá o final de linha original mantido"
 
 #: convert.c:206
 #, c-format
@@ -3200,7 +3342,7 @@ msgid ""
 "The file will have its original line endings in your working directory"
 msgstr ""
 "LF será substituído por CRLF em %s.\n"
-"O final de linha original será mantido no ficheiro da sua árvore de trabalho."
+"O ficheiro da tua árvore-trabalho terá o final de linha original mantido"
 
 #: convert.c:273
 #, c-format
@@ -3239,7 +3381,7 @@ msgstr ""
 #: convert.c:654
 #, c-format
 msgid "cannot fork to run external filter '%s'"
-msgstr "incapaz aforquilhar para correr filtro externo '%s'"
+msgstr "incapaz forquear para correr filtro externo '%s'"
 
 #: convert.c:674
 #, c-format
@@ -3283,12 +3425,12 @@ msgstr ""
 #: convert.c:1416 convert.c:1449
 #, c-format
 msgid "%s: clean filter '%s' failed"
-msgstr ""
+msgstr "%s: filtro de limpeza '%s' falhou"
 
 #: convert.c:1492
 #, c-format
 msgid "%s: smudge filter %s failed"
-msgstr "%s: filtro mancha %s falhou"
+msgstr "%s: filtro de mancha %s falhou"
 
 #: credential.c:96
 #, c-format
@@ -3303,68 +3445,68 @@ msgstr ""
 msgid "refusing to work with credential missing protocol field"
 msgstr ""
 
-#: credential.c:394
+#: credential.c:396
 #, c-format
 msgid "url contains a newline in its %s component: %s"
 msgstr ""
 
-#: credential.c:438
+#: credential.c:440
 #, c-format
 msgid "url has no scheme: %s"
 msgstr "Remoto inexistente: %s"
 
-#: credential.c:511
+#: credential.c:513
 #, c-format
 msgid "credential url cannot be parsed: %s"
 msgstr "incapaz analisar url credencial: %s"
 
-#: date.c:138
+#: date.c:139
 msgid "in the future"
 msgstr "no futuro"
 
-#: date.c:144
+#: date.c:145
 #, c-format
 msgid "%<PRIuMAX> second ago"
 msgid_plural "%<PRIuMAX> seconds ago"
 msgstr[0] "à %<PRIuMAX> segundo"
 msgstr[1] "à %<PRIuMAX> segundos"
 
-#: date.c:151
+#: date.c:152
 #, c-format
 msgid "%<PRIuMAX> minute ago"
 msgid_plural "%<PRIuMAX> minutes ago"
 msgstr[0] "à %<PRIuMAX> minuto"
 msgstr[1] "à %<PRIuMAX> minutos"
 
-#: date.c:158
+#: date.c:159
 #, c-format
 msgid "%<PRIuMAX> hour ago"
 msgid_plural "%<PRIuMAX> hours ago"
 msgstr[0] "à %<PRIuMAX> hora"
 msgstr[1] "à %<PRIuMAX> horas"
 
-#: date.c:165
+#: date.c:166
 #, c-format
 msgid "%<PRIuMAX> day ago"
 msgid_plural "%<PRIuMAX> days ago"
 msgstr[0] "à %<PRIuMAX> dia"
 msgstr[1] "à %<PRIuMAX> dias"
 
-#: date.c:171
+#: date.c:172
 #, c-format
 msgid "%<PRIuMAX> week ago"
 msgid_plural "%<PRIuMAX> weeks ago"
 msgstr[0] "à %<PRIuMAX> semana"
 msgstr[1] "à %<PRIuMAX> semanas"
 
-#: date.c:178
+#: date.c:179
 #, c-format
 msgid "%<PRIuMAX> month ago"
 msgid_plural "%<PRIuMAX> months ago"
 msgstr[0] "à %<PRIuMAX> mês"
 msgstr[1] "à %<PRIuMAX> meses"
 
-#: date.c:189
+#: date.c:190
 #, c-format
 msgid "%<PRIuMAX> year"
 msgid_plural "%<PRIuMAX> years"
@@ -3372,14 +3514,14 @@ msgstr[0] "%<PRIuMAX> ano"
 msgstr[1] "%<PRIuMAX> anos"
 
 #. TRANSLATORS: "%s" is "<n> years"
-#: date.c:192
+#: date.c:193
 #, c-format
 msgid "%s, %<PRIuMAX> month ago"
 msgid_plural "%s, %<PRIuMAX> months ago"
 msgstr[0] "à %s, %<PRIuMAX> mês"
 msgstr[1] "à %s, %<PRIuMAX> meses"
 
-#: date.c:197 date.c:202
+#: date.c:198 date.c:203
 #, c-format
 msgid "%<PRIuMAX> year ago"
 msgid_plural "%<PRIuMAX> years ago"
@@ -3410,28 +3552,32 @@ msgstr ""
 msgid "Marked %d islands, done.\n"
 msgstr ""
 
-#: diff-merges.c:70
+#: diff-merges.c:81 gpg-interface.c:719 gpg-interface.c:734 ls-refs.c:37
+#: parallel-checkout.c:42 sequencer.c:2805 setup.c:563 builtin/am.c:203
+#: builtin/am.c:2243 builtin/am.c:2287 builtin/blame.c:724 builtin/blame.c:742
+#: builtin/fetch.c:792 builtin/pack-objects.c:3515 builtin/pull.c:45
+#: builtin/pull.c:47 builtin/pull.c:321
 #, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr "valor desconhecido para --diff-merges: %s"
+msgid "invalid value for '%s': '%s'"
+msgstr "valor inválido para '%s': '%s'"
 
-#: diff-lib.c:557
+#: diff-lib.c:561
 msgid "--merge-base does not work with ranges"
 msgstr "--merge-base é incompatível com intervalos"
 
-#: diff-lib.c:559
+#: diff-lib.c:563
 msgid "--merge-base only works with commits"
-msgstr "--merge-base apenas trabalho com memórias"
+msgstr "--merge-base apenas funciona com memórias"
 
-#: diff-lib.c:576
+#: diff-lib.c:580
 msgid "unable to get HEAD"
 msgstr "incapaz obter HEAD"
 
-#: diff-lib.c:583
+#: diff-lib.c:587
 msgid "no merge base found"
 msgstr ""
 
-#: diff-lib.c:585
+#: diff-lib.c:589
 msgid "multiple merge bases found"
 msgstr ""
 
@@ -3445,41 +3591,41 @@ msgid ""
 "tree"
 msgstr ""
 
-#: diff.c:156
+#: diff.c:159
 #, c-format
 msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
 msgstr "  Falha ao analisar percentagem limite de dirstat '%s'\n"
 
-#: diff.c:161
+#: diff.c:164
 #, c-format
 msgid "  Unknown dirstat parameter '%s'\n"
 msgstr "  Parâmetro de dirstat desconhecido '%s'\n"
 
-#: diff.c:297
+#: diff.c:300
 msgid ""
 "color moved setting must be one of 'no', 'default', 'blocks', 'zebra', "
 "'dimmed-zebra', 'plain'"
 msgstr ""
 
-#: diff.c:325
+#: diff.c:328
 #, c-format
 msgid ""
 "unknown color-moved-ws mode '%s', possible values are 'ignore-space-change', "
 "'ignore-space-at-eol', 'ignore-all-space', 'allow-indentation-change'"
 msgstr ""
 
-#: diff.c:333
+#: diff.c:336
 msgid ""
 "color-moved-ws: allow-indentation-change cannot be combined with other "
 "whitespace modes"
 msgstr ""
 
-#: diff.c:410
+#: diff.c:413
 #, c-format
 msgid "Unknown value for 'diff.submodule' config variable: '%s'"
 msgstr "Valor desconhecido na variável de configuração 'diff.submodule': '%s'"
 
-#: diff.c:470
+#: diff.c:473
 #, c-format
 msgid ""
 "Found errors in 'diff.dirstat' config variable:\n"
@@ -3493,558 +3639,564 @@ msgstr ""
 msgid "external diff died, stopping at %s"
 msgstr "o diff externo terminou inesperadamente, interrompido em %s"
 
-#: diff.c:4634
-msgid "--name-only, --name-status, --check and -s are mutually exclusive"
-msgstr "--name-only, --name-status, --check e -s são mutuamente exclusivos"
+#: diff.c:4677 parse-options.c:1114
+#, c-format
+msgid "options '%s', '%s', '%s', and '%s' cannot be used together"
+msgstr "opções '%s', '%s', '%s' e '%s' incapaz serem usadas juntas"
 
-#: diff.c:4637
-msgid "-G, -S and --find-object are mutually exclusive"
-msgstr "-G, -S e --find-object são mutuamente exclusivos"
+#: diff.c:4681 parse-options.c:1118 builtin/worktree.c:578
+#, c-format
+msgid "options '%s', '%s', and '%s' cannot be used together"
+msgstr "opções '%s', '%s' e '%s' incapaz serem usadas juntas"
 
-#: diff.c:4640
-msgid ""
-"-G and --pickaxe-regex are mutually exclusive, use --pickaxe-regex with -S"
-msgstr ""
+#: diff.c:4685
+#, c-format
+msgid "options '%s' and '%s' cannot be used together, use '%s' with '%s'"
+msgstr "opções '%s' e '%s' incapaz serem usadas juntas, usa '%s' com '%s'"
 
-#: diff.c:4643
+#: diff.c:4689
+#, c-format
 msgid ""
-"--pickaxe-all and --find-object are mutually exclusive, use --pickaxe-all "
-"with -G and -S"
+"options '%s' and '%s' cannot be used together, use '%s' with '%s' and '%s'"
 msgstr ""
+"opções '%s' e '%s' incapaz serem usadas juntas, usa '%s' com '%s' e '%s'"
 
-#: diff.c:4722
+#: diff.c:4769
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow exige exatamente um espetro-caminho"
 
-#: diff.c:4770
+#: diff.c:4823
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "valor --stat inválido: %s"
 
-#: diff.c:4775 diff.c:4780 diff.c:4785 diff.c:4790 diff.c:5318
-#: parse-options.c:197 parse-options.c:201 builtin/commit-graph.c:180
+#: diff.c:4828 diff.c:4833 diff.c:4838 diff.c:4843 diff.c:5319
+#: parse-options.c:217 parse-options.c:221
 #, c-format
 msgid "%s expects a numerical value"
 msgstr ""
 
-#: diff.c:4807
+#: diff.c:4860
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
 "%s"
 msgstr ""
-"Falha ao analisar parâmetro da opção --dirstat/-X:\n"
+"Falha ao processar parâmetro de opção --dirstat/-X:\n"
 "%s"
 
-#: diff.c:4892
+#: diff.c:4893
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "classe de mudança '%c' desconhecida em --diff-filter=%s"
 
-#: diff.c:4916
+#: diff.c:4917
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr ""
 
-#: diff.c:4930
+#: diff.c:4931
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "incapaz resolver '%s'"
 
-#: diff.c:4980 diff.c:4986
+#: diff.c:4981 diff.c:4987
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr ""
 
-#: diff.c:4998
+#: diff.c:4999
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr ""
 
-#: diff.c:5019
+#: diff.c:5020
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "argumento incorreto --color-moved: %s"
 
-#: diff.c:5038
+#: diff.c:5039
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "modo inválido '%s' em --color-moved-ws"
 
-#: diff.c:5078
+#: diff.c:5079
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
 msgstr ""
 
-#: diff.c:5114 diff.c:5134
+#: diff.c:5115 diff.c:5135
 #, c-format
 msgid "invalid argument to %s"
 msgstr ""
 
-#: diff.c:5238
+#: diff.c:5239
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr ""
 
-#: diff.c:5287
+#: diff.c:5288
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "Falha a processar parâmetro da opção --submodule: '%s'"
 
-#: diff.c:5343
+#: diff.c:5344
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "argumento --word-diff incorrecto: %s"
 
-#: diff.c:5379
+#: diff.c:5380
 msgid "Diff output format options"
 msgstr ""
 
-#: diff.c:5381 diff.c:5387
+#: diff.c:5382 diff.c:5388
 msgid "generate patch"
 msgstr "gerar remendo"
 
-#: diff.c:5384 builtin/log.c:179
+#: diff.c:5385 builtin/log.c:180
 msgid "suppress diff output"
 msgstr "suprimir saída de diff"
 
-#: diff.c:5389 diff.c:5503 diff.c:5510
+#: diff.c:5390 diff.c:5504 diff.c:5511
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5390 diff.c:5393
+#: diff.c:5391 diff.c:5394
 msgid "generate diffs with <n> lines context"
 msgstr "gerar diffs com <n> linhas de contexto"
 
-#: diff.c:5395
+#: diff.c:5396
 msgid "generate the diff in raw format"
 msgstr ""
 
-#: diff.c:5398
+#: diff.c:5399
 msgid "synonym for '-p --raw'"
 msgstr "sinónimo de '-p --raw'"
 
-#: diff.c:5402
+#: diff.c:5403
 msgid "synonym for '-p --stat'"
 msgstr "sinónimo de '-p --stat'"
 
-#: diff.c:5406
+#: diff.c:5407
 msgid "machine friendly --stat"
 msgstr "--stat amigável à máquina"
 
-#: diff.c:5409
+#: diff.c:5410
 msgid "output only the last line of --stat"
 msgstr ""
 
-#: diff.c:5411 diff.c:5419
+#: diff.c:5412 diff.c:5420
 msgid "<param1,param2>..."
 msgstr ""
 
-#: diff.c:5412
+#: diff.c:5413
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
+"mostrar a distribuição relativa da quantidade de alterações para cada "
+"subpasta"
 
-#: diff.c:5416
+#: diff.c:5417
 msgid "synonym for --dirstat=cumulative"
 msgstr "sinónimo de --dirstat=cumulative"
 
-#: diff.c:5420
+#: diff.c:5421
 msgid "synonym for --dirstat=files,param1,param2..."
-msgstr ""
+msgstr "sinónimo de --dirstat=files,param1,param2..."
 
-#: diff.c:5424
+#: diff.c:5425
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
+"avisar se alterações introduzem marcas de conflito ou erros de espaços-em-"
+"branco"
 
-#: diff.c:5427
+#: diff.c:5428
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr ""
 
-#: diff.c:5430
+#: diff.c:5431
 msgid "show only names of changed files"
 msgstr ""
 
-#: diff.c:5433
+#: diff.c:5434
 msgid "show only names and status of changed files"
 msgstr ""
 
-#: diff.c:5435
+#: diff.c:5436
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr ""
 
-#: diff.c:5436
+#: diff.c:5437
 msgid "generate diffstat"
 msgstr "gerar diffstat"
 
-#: diff.c:5438 diff.c:5441 diff.c:5444
+#: diff.c:5439 diff.c:5442 diff.c:5445
 msgid "<width>"
 msgstr ""
 
-#: diff.c:5439
+#: diff.c:5440
 msgid "generate diffstat with a given width"
 msgstr ""
 
-#: diff.c:5442
+#: diff.c:5443
 msgid "generate diffstat with a given name width"
 msgstr ""
 
-#: diff.c:5445
+#: diff.c:5446
 msgid "generate diffstat with a given graph width"
 msgstr ""
 
-#: diff.c:5447
+#: diff.c:5448
 msgid "<count>"
 msgstr ""
 
-#: diff.c:5448
+#: diff.c:5449
 msgid "generate diffstat with limited lines"
 msgstr ""
 
-#: diff.c:5451
+#: diff.c:5452
 msgid "generate compact summary in diffstat"
 msgstr ""
 
-#: diff.c:5454
+#: diff.c:5455
 msgid "output a binary diff that can be applied"
 msgstr ""
 
-#: diff.c:5457
+#: diff.c:5458
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr ""
 
-#: diff.c:5459
+#: diff.c:5460
 msgid "show colored diff"
 msgstr "mostrar diff colorida"
 
-#: diff.c:5460
+#: diff.c:5461
 msgid "<kind>"
 msgstr ""
 
-#: diff.c:5461
+#: diff.c:5462
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
 msgstr ""
 
-#: diff.c:5464
+#: diff.c:5465
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
 msgstr ""
 
-#: diff.c:5467 diff.c:5470 diff.c:5473 diff.c:5582
+#: diff.c:5468 diff.c:5471 diff.c:5474 diff.c:5583
 msgid "<prefix>"
 msgstr "<prefixo>"
 
-#: diff.c:5468
+#: diff.c:5469
 msgid "show the given source prefix instead of \"a/\""
 msgstr ""
 
-#: diff.c:5471
+#: diff.c:5472
 msgid "show the given destination prefix instead of \"b/\""
 msgstr ""
 
-#: diff.c:5474
+#: diff.c:5475
 msgid "prepend an additional prefix to every line of output"
-msgstr "preceder o nomebase do projeto pai na saída"
+msgstr "preceder com um prefixo adicional em todas as linhas da saída"
 
-#: diff.c:5477
+#: diff.c:5478
 msgid "do not show any source or destination prefix"
 msgstr ""
 
-#: diff.c:5480
+#: diff.c:5481
 msgid "show context between diff hunks up to the specified number of lines"
-msgstr "mostrar contexto entre diff de pedaços até ao número de linhas especificado"
+msgstr ""
+"mostrar contexto entre diff de pedaços até ao número de linhas especificado"
 
-#: diff.c:5484 diff.c:5489 diff.c:5494
+#: diff.c:5485 diff.c:5490 diff.c:5495
 msgid "<char>"
 msgstr "<caractere>"
 
-#: diff.c:5485
+#: diff.c:5486
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr ""
 
-#: diff.c:5490
+#: diff.c:5491
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr ""
 
-#: diff.c:5495
+#: diff.c:5496
 msgid "specify the character to indicate a context instead of ' '"
 msgstr ""
 
-#: diff.c:5498
+#: diff.c:5499
 msgid "Diff rename options"
 msgstr ""
 
-#: diff.c:5499
+#: diff.c:5500
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5500
+#: diff.c:5501
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr ""
 
-#: diff.c:5504
+#: diff.c:5505
 msgid "detect renames"
 msgstr "detetar renomeações"
 
-#: diff.c:5508
+#: diff.c:5509
 msgid "omit the preimage for deletes"
 msgstr ""
 
-#: diff.c:5511
+#: diff.c:5512
 msgid "detect copies"
 msgstr ""
 
-#: diff.c:5515
+#: diff.c:5516
 msgid "use unmodified files as source to find copies"
 msgstr ""
 
-#: diff.c:5517
+#: diff.c:5518
 msgid "disable rename detection"
 msgstr "desativar detecção de renomeação"
 
-#: diff.c:5520
+#: diff.c:5521
 msgid "use empty blobs as rename source"
 msgstr ""
 
-#: diff.c:5522
+#: diff.c:5523
 msgid "continue listing the history of a file beyond renames"
 msgstr ""
 
-#: diff.c:5525
+#: diff.c:5526
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
 msgstr ""
 
-#: diff.c:5527
+#: diff.c:5528
 msgid "Diff algorithm options"
 msgstr ""
 
-#: diff.c:5529
+#: diff.c:5530
 msgid "produce the smallest possible diff"
 msgstr ""
 
-#: diff.c:5532
+#: diff.c:5533
 msgid "ignore whitespace when comparing lines"
 msgstr ""
 
-#: diff.c:5535
+#: diff.c:5536
 msgid "ignore changes in amount of whitespace"
 msgstr ""
 
-#: diff.c:5538
+#: diff.c:5539
 msgid "ignore changes in whitespace at EOL"
 msgstr ""
 
-#: diff.c:5541
+#: diff.c:5542
 msgid "ignore carrier-return at the end of line"
 msgstr ""
 
-#: diff.c:5544
+#: diff.c:5545
 msgid "ignore changes whose lines are all blank"
 msgstr ""
 
-#: diff.c:5546 diff.c:5568 diff.c:5571 diff.c:5616
+#: diff.c:5547 diff.c:5569 diff.c:5572 diff.c:5617
 msgid "<regex>"
 msgstr ""
 
-#: diff.c:5547
+#: diff.c:5548
 msgid "ignore changes whose all lines match <regex>"
 msgstr ""
 
-#: diff.c:5550
+#: diff.c:5551
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr ""
 
-#: diff.c:5553
+#: diff.c:5554
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr ""
 
-#: diff.c:5557
+#: diff.c:5558
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr ""
 
-#: diff.c:5559
+#: diff.c:5560
 msgid "<algorithm>"
 msgstr ""
 
-#: diff.c:5560
+#: diff.c:5561
 msgid "choose a diff algorithm"
 msgstr ""
 
-#: diff.c:5562
+#: diff.c:5563
 msgid "<text>"
 msgstr "<texto>"
 
-#: diff.c:5563
+#: diff.c:5564
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr ""
 
-#: diff.c:5565 diff.c:5574 diff.c:5577
+#: diff.c:5566 diff.c:5575 diff.c:5578
 msgid "<mode>"
 msgstr "<modo>"
 
-#: diff.c:5566
+#: diff.c:5567
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr ""
 
-#: diff.c:5569
+#: diff.c:5570
 msgid "use <regex> to decide what a word is"
 msgstr ""
 
-#: diff.c:5572
+#: diff.c:5573
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr ""
 
-#: diff.c:5575
+#: diff.c:5576
 msgid "moved lines of code are colored differently"
 msgstr ""
 
-#: diff.c:5578
+#: diff.c:5579
 msgid "how white spaces are ignored in --color-moved"
 msgstr ""
 
-#: diff.c:5581
+#: diff.c:5582
 msgid "Other diff options"
 msgstr ""
 
-#: diff.c:5583
+#: diff.c:5584
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 
-#: diff.c:5587
+#: diff.c:5588
 msgid "treat all files as text"
 msgstr "tratar todos ficheiros como texto"
 
-#: diff.c:5589
+#: diff.c:5590
 msgid "swap two inputs, reverse the diff"
 msgstr ""
 
-#: diff.c:5591
+#: diff.c:5592
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr ""
 
-#: diff.c:5593
+#: diff.c:5594
 msgid "disable all output of the program"
 msgstr ""
 
-#: diff.c:5595
+#: diff.c:5596
 msgid "allow an external diff helper to be executed"
 msgstr ""
 
-#: diff.c:5597
+#: diff.c:5598
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 
-#: diff.c:5599
+#: diff.c:5600
 msgid "<when>"
 msgstr "<quando>"
 
-#: diff.c:5600
+#: diff.c:5601
 msgid "ignore changes to submodules in the diff generation"
-msgstr ""
-"ignorar alterações em submódulos, quando é opcional: all, dirty, untracked. "
-"(Predefinição: all)"
+msgstr "ignorar alterações em submódulo na geração de diff"
 
-#: diff.c:5603
+#: diff.c:5604
 msgid "<format>"
 msgstr "<formato>"
 
-#: diff.c:5604
+#: diff.c:5605
 msgid "specify how differences in submodules are shown"
 msgstr ""
 
-#: diff.c:5608
+#: diff.c:5609
 msgid "hide 'git add -N' entries from the index"
 msgstr ""
 
-#: diff.c:5611
+#: diff.c:5612
 msgid "treat 'git add -N' entries as real in the index"
 msgstr ""
 
-#: diff.c:5613
+#: diff.c:5614
 msgid "<string>"
 msgstr "<string>"
 
-#: diff.c:5614
+#: diff.c:5615
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
 msgstr ""
 
-#: diff.c:5617
+#: diff.c:5618
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
 msgstr ""
 
-#: diff.c:5620
+#: diff.c:5621
 msgid "show all changes in the changeset with -S or -G"
-msgstr "mostrar todos as alterações em memória com -S ou -G"
+msgstr "mostrar todas as alterações em memória com -S ou -G"
 
-#: diff.c:5623
+#: diff.c:5624
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "tratar <string> em -S como expressão comum estendida de POSIX"
 
-#: diff.c:5626
+#: diff.c:5627
 msgid "control the order in which files appear in the output"
 msgstr "controlar a ordem em que os ficheiro aparecem na saída"
 
-#: diff.c:5627 diff.c:5630
+#: diff.c:5628 diff.c:5631
 msgid "<path>"
 msgstr "<caminho>"
 
-#: diff.c:5628
+#: diff.c:5629
 msgid "show the change in the specified path first"
 msgstr ""
 "escrever o ficheiro de índice do pacote na versão de formato especificada"
 
-#: diff.c:5631
+#: diff.c:5632
 msgid "skip the output to the specified path"
 msgstr "ignorar saída para caminho especificado"
 
-#: diff.c:5633
+#: diff.c:5634
 msgid "<object-id>"
 msgstr "<id-objeto>"
 
-#: diff.c:5634
+#: diff.c:5635
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
 msgstr ""
 
-#: diff.c:5636
+#: diff.c:5637
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr ""
 
-#: diff.c:5637
+#: diff.c:5638
 msgid "select files by diff type"
 msgstr ""
 
-#: diff.c:5639
+#: diff.c:5640
 msgid "<file>"
 msgstr "<ficheiro>"
 
-#: diff.c:5640
-msgid "Output to a specific file"
-msgstr "Sair para ficheiro específico"
+#: diff.c:5641
+msgid "output to a specific file"
+msgstr "saída para um ficheiro específico"
 
-#: diff.c:6298
+#: diff.c:6321
 msgid "exhaustive rename detection was skipped due to too many files."
 msgstr ""
 "detecção de renomeação exaustiva foi ignorada devido a demasiados ficheiros."
 
-#: diff.c:6301
+#: diff.c:6324
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
 "só foram encontradas cópias de caminhos modificados devido a demasiados "
 "ficheiros."
 
-#: diff.c:6304
+#: diff.c:6327
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -4056,7 +4208,7 @@ msgstr ""
 msgid "failed to read orderfile '%s'"
 msgstr "falha ao ler ficheiro de comando '%s'"
 
-#: diffcore-rename.c:1514
+#: diffcore-rename.c:1564
 msgid "Performing inexact rename detection"
 msgstr "Realizando detecção de renomeação inexata"
 
@@ -4068,7 +4220,8 @@ msgstr "path %s inexistente em diff"
 #: dir.c:593
 #, c-format
 msgid "pathspec '%s' did not match any file(s) known to git"
-msgstr "espetro-caminho '%s' correspondeu a ficheiro(s) nenhum(s) conhecido pelo git"
+msgstr ""
+"espetro-caminho '%s' correspondeu a ficheiro(s) nenhum(s) conhecido pelo git"
 
 #: dir.c:733 dir.c:762 dir.c:775
 #, c-format
@@ -4085,39 +4238,47 @@ msgstr "por reconhecer padrão negativo: '%s'"
 msgid "your sparse-checkout file may have issues: pattern '%s' is repeated"
 msgstr ""
 
-#: dir.c:830
+#: dir.c:828
 msgid "disabling cone pattern matching"
 msgstr "desativando correspondência de padrão em cone"
 
-#: dir.c:1214
+#: dir.c:1212
 #, c-format
 msgid "cannot use %s as an exclude file"
 msgstr "incapaz usar %s como ficheiro de exclusão"
 
-#: dir.c:2351
+#: dir.c:2419
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "incapaz abrir pasta '%s'"
 
-#: dir.c:2653
+#: dir.c:2721
 msgid "failed to get kernel name and information"
 msgstr "falha ao obter nome e informação do kernel"
 
-#: dir.c:2777
+#: dir.c:2846
 msgid "untracked cache is disabled on this system or location"
-msgstr "cache untracked está desativada neste sistema ou localização."
+msgstr "cenário desmonitorizado está desativado neste sistema ou localização"
+
+#: dir.c:3119
+msgid ""
+"No directory name could be guessed.\n"
+"Please specify a directory on the command line"
+msgstr ""
+"Incapaz adivinhar nome de pasta.\n"
+"Por favor especifique uma pasta na linha de comandos"
 
-#: dir.c:3610
+#: dir.c:3807
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr ""
 
-#: dir.c:3657 dir.c:3662
+#: dir.c:3854 dir.c:3859
 #, c-format
 msgid "could not create directories for %s"
 msgstr "incapaz criar pasta para %s"
 
-#: dir.c:3691
+#: dir.c:3888
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "incapaz migrar pasta git de '%s' para '%s'"
@@ -4127,412 +4288,498 @@ msgstr "incapaz migrar pasta git de '%s' para '%s'"
 msgid "hint: Waiting for your editor to close the file...%c"
 msgstr ""
 
-#: entry.c:176
+#: entry.c:179
 msgid "Filtering content"
 msgstr "Filtrando conteúdo"
 
-#: entry.c:497
+#: entry.c:500
 #, c-format
 msgid "could not stat file '%s'"
 msgstr "incapaz de stat o ficheiro '%s'"
 
-#: environment.c:152
+#: environment.c:147
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr ""
 
-#: environment.c:334
-#, c-format
-msgid "could not set GIT_DIR to '%s'"
-msgstr "incapaz definir GIT_DIR para '%s'"
-
 #: exec-cmd.c:363
 #, c-format
 msgid "too many args to run %s"
 msgstr ""
 
-#: fetch-pack.c:182
+#: fetch-pack.c:194
 msgid "git fetch-pack: expected shallow list"
 msgstr "git fetch-pack: esperado lista superficial"
 
-#: fetch-pack.c:185
+#: fetch-pack.c:197
 msgid "git fetch-pack: expected a flush packet after shallow list"
 msgstr "git fetch-pack: esperado pacote flush após lista superficial"
 
-#: fetch-pack.c:196
+#: fetch-pack.c:208
 msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
 msgstr "git fetch-pack: esperado ACK/NAK, obtive um pacote flush"
 
-#: fetch-pack.c:216
+#: fetch-pack.c:228
 #, c-format
 msgid "git fetch-pack: expected ACK/NAK, got '%s'"
 msgstr "git fetch-pack: esperado ACK/NAK, obtive '%s'"
 
-#: fetch-pack.c:227
+#: fetch-pack.c:239
 msgid "unable to write to remote"
 msgstr "incapaz escrever para remoto"
 
-#: fetch-pack.c:288
-msgid "--stateless-rpc requires multi_ack_detailed"
-msgstr "--stateless-rpc requer multi_ack_detailed"
-
-#: fetch-pack.c:383 fetch-pack.c:1423
+#: fetch-pack.c:397 fetch-pack.c:1460
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "linha superficial inválida: %s"
 
-#: fetch-pack.c:389 fetch-pack.c:1429
+#: fetch-pack.c:403 fetch-pack.c:1466
 #, c-format
 msgid "invalid unshallow line: %s"
-msgstr "linha por aprofundar inválida: %s"
+msgstr "linha não-aprofunda inválida: %s"
 
-#: fetch-pack.c:391 fetch-pack.c:1431
+#: fetch-pack.c:405 fetch-pack.c:1468
 #, c-format
 msgid "object not found: %s"
-msgstr "objeto perdido: %s"
+msgstr "objeto por encontrar: %s"
 
-#: fetch-pack.c:394 fetch-pack.c:1434
+#: fetch-pack.c:408 fetch-pack.c:1471
 #, c-format
 msgid "error in object: %s"
 msgstr "erro no objeto: %s"
 
-#: fetch-pack.c:396 fetch-pack.c:1436
+#: fetch-pack.c:410 fetch-pack.c:1473
 #, c-format
 msgid "no shallow found: %s"
-msgstr "shallow por encontrar: %s"
+msgstr "nenhum superficial encontrado: %s"
 
-#: fetch-pack.c:399 fetch-pack.c:1440
+#: fetch-pack.c:413 fetch-pack.c:1477
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "esperado shallow/unshallow, recebi %s"
 
-#: fetch-pack.c:439
+#: fetch-pack.c:453
 #, c-format
 msgid "got %s %d %s"
-msgstr "obteve-se %s %d %s"
+msgstr "obtive %s %d %s"
 
-#: fetch-pack.c:456
+#: fetch-pack.c:470
 #, c-format
 msgid "invalid commit %s"
 msgstr "memória inválida %s"
 
-#: fetch-pack.c:487
+#: fetch-pack.c:501
 msgid "giving up"
-msgstr "a desistir"
+msgstr "desistindo"
 
-#: fetch-pack.c:500 progress.c:339
+#: fetch-pack.c:514 progress.h:25
 msgid "done"
 msgstr "concluído"
 
-#: fetch-pack.c:512
+#: fetch-pack.c:526
 #, c-format
 msgid "got %s (%d) %s"
-msgstr "obteve-se %s (%d) %s"
+msgstr "obtive %s (%d) %s"
 
-#: fetch-pack.c:548
+#: fetch-pack.c:562
 #, c-format
 msgid "Marking %s as complete"
-msgstr "Marcado %s como completo"
+msgstr "Marcando %s como completo"
 
-#: fetch-pack.c:763
+#: fetch-pack.c:784
 #, c-format
 msgid "already have %s (%s)"
-msgstr "já se tem %s (%s)"
+msgstr "já tenho %s (%s)"
 
-#: fetch-pack.c:849
+#: fetch-pack.c:870
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
-msgstr "fetch-pack: incapaz de aforquilhar demultiplexer sideband"
+msgstr "fetch-pack: incapaz de forquear demultiplexer sideband"
 
-#: fetch-pack.c:857
+#: fetch-pack.c:878
 msgid "protocol error: bad pack header"
-msgstr ""
+msgstr "erro de protocolo: cabeçalho de pacote inválido"
 
-#: fetch-pack.c:951
+#: fetch-pack.c:974
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
-msgstr "fetch-pack: incapaz de fazer fork a %s"
+msgstr "fetch-pack: incapaz de forquear %s"
 
-#: fetch-pack.c:957
+#: fetch-pack.c:980
 msgid "fetch-pack: invalid index-pack output"
-msgstr ""
+msgstr "fetch-pack: saída de cenário-pacote inválido"
 
-#: fetch-pack.c:974
+#: fetch-pack.c:997
 #, c-format
 msgid "%s failed"
 msgstr "%s falhou"
 
-#: fetch-pack.c:976
+#: fetch-pack.c:999
 msgid "error in sideband demultiplexer"
 msgstr "erro em demultiplexer sideband"
 
-#: fetch-pack.c:1019
+#: fetch-pack.c:1048
 #, c-format
 msgid "Server version is %.*s"
-msgstr "A versão do servidor é %.*s"
+msgstr "Versão de servidor é %.*s"
 
-#: fetch-pack.c:1027 fetch-pack.c:1033 fetch-pack.c:1036 fetch-pack.c:1042
-#: fetch-pack.c:1046 fetch-pack.c:1050 fetch-pack.c:1054 fetch-pack.c:1058
-#: fetch-pack.c:1062 fetch-pack.c:1066 fetch-pack.c:1070 fetch-pack.c:1074
-#: fetch-pack.c:1080 fetch-pack.c:1086 fetch-pack.c:1091 fetch-pack.c:1096
+#: fetch-pack.c:1056 fetch-pack.c:1062 fetch-pack.c:1065 fetch-pack.c:1071
+#: fetch-pack.c:1075 fetch-pack.c:1079 fetch-pack.c:1083 fetch-pack.c:1087
+#: fetch-pack.c:1091 fetch-pack.c:1095 fetch-pack.c:1099 fetch-pack.c:1103
+#: fetch-pack.c:1109 fetch-pack.c:1115 fetch-pack.c:1120 fetch-pack.c:1125
 #, c-format
 msgid "Server supports %s"
 msgstr "Servidor sustenta %s"
 
-#: fetch-pack.c:1029
+#: fetch-pack.c:1058
 msgid "Server does not support shallow clients"
-msgstr "Servidor insustenta clientes shallow"
+msgstr "Servidor insustenta clientes superficiais"
 
-#: fetch-pack.c:1089
+#: fetch-pack.c:1118
 msgid "Server does not support --shallow-since"
 msgstr "Servidor insustenta --shallow-since"
 
-#: fetch-pack.c:1094
+#: fetch-pack.c:1123
 msgid "Server does not support --shallow-exclude"
 msgstr "Servidor insustenta --shallow-exclude"
 
-#: fetch-pack.c:1098
+#: fetch-pack.c:1127
 msgid "Server does not support --deepen"
 msgstr "Servidor insustenta --deepen"
 
-#: fetch-pack.c:1100
+#: fetch-pack.c:1129
 msgid "Server does not support this repository's object format"
 msgstr "Servidor insustenta formato de objeto deste repositório"
 
-#: fetch-pack.c:1113
+#: fetch-pack.c:1142
 msgid "no common commits"
-msgstr "commits comuns nenhuns"
+msgstr "memórias comuns nenhumas"
 
-#: fetch-pack.c:1122 fetch-pack.c:1469 builtin/clone.c:1238
+#: fetch-pack.c:1151 fetch-pack.c:1506 builtin/clone.c:1166
 msgid "source repository is shallow, reject to clone."
-msgstr "repositório de origem é raso, rejeita para clonar."
+msgstr "repositório de origem é superficial, rejeito clonar."
 
-#: fetch-pack.c:1128 fetch-pack.c:1660
+#: fetch-pack.c:1157 fetch-pack.c:1705
 msgid "git fetch-pack: fetch failed."
-msgstr "git fetch-pack: buscar falhou."
+msgstr "git fetch-pack: busca falhou."
 
-#: fetch-pack.c:1242
+#: fetch-pack.c:1271
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
-msgstr ""
+msgstr "algoritmos sem correspondência: cliente %s; servidor %s"
 
-#: fetch-pack.c:1246
+#: fetch-pack.c:1275
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "o servidor insustenta algoritmo '%s'"
 
-#: fetch-pack.c:1279
+#: fetch-pack.c:1308
 msgid "Server does not support shallow requests"
 msgstr "Servidor insustenta pedidos shallow"
 
-#: fetch-pack.c:1286
+#: fetch-pack.c:1315
 msgid "Server supports filter"
 msgstr "Servidor sustenta filtro"
 
-#: fetch-pack.c:1329 fetch-pack.c:2043
+#: fetch-pack.c:1358 fetch-pack.c:2087
 msgid "unable to write request to remote"
 msgstr "incapaz escrever pedidos para remoto"
 
-#: fetch-pack.c:1347
+#: fetch-pack.c:1376
 #, c-format
 msgid "error reading section header '%s'"
-msgstr ""
+msgstr "erro lendo cabeçalho de secção '%s'"
 
-#: fetch-pack.c:1353
+#: fetch-pack.c:1382
 #, c-format
 msgid "expected '%s', received '%s'"
-msgstr ""
+msgstr "esperado '%s', recebi '%s'"
 
-#: fetch-pack.c:1387
+#: fetch-pack.c:1416
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
-msgstr ""
+msgstr "linha de confirmação inesperada: '%s'"
 
-#: fetch-pack.c:1392
+#: fetch-pack.c:1421
 #, c-format
 msgid "error processing acks: %d"
-msgstr ""
+msgstr "erro processando acks: %d"
 
-#: fetch-pack.c:1402
-msgid "expected packfile to be sent after 'ready'"
-msgstr ""
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#.
+#: fetch-pack.c:1435
+#, c-format
+msgid "expected packfile to be sent after '%s'"
+msgstr "esperado que ficheiro-pacote seja enviado depois de '%s'"
 
-#: fetch-pack.c:1404
-msgid "expected no other sections to be sent after no 'ready'"
-msgstr ""
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#.
+#: fetch-pack.c:1441
+#, c-format
+msgid "expected no other sections to be sent after no '%s'"
+msgstr "esperar enviar outras secções apenas depois de '%s'"
 
-#: fetch-pack.c:1445
+#: fetch-pack.c:1482
 #, c-format
 msgid "error processing shallow info: %d"
-msgstr ""
+msgstr "erro processando info superficial: %d"
 
-#: fetch-pack.c:1494
+#: fetch-pack.c:1531
 #, c-format
 msgid "expected wanted-ref, got '%s'"
-msgstr ""
+msgstr "esperado wanted-ref, recebi '%s'"
 
-#: fetch-pack.c:1499
+#: fetch-pack.c:1536
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
-msgstr ""
+msgstr "wanted-ref inesperada: '%s'"
 
-#: fetch-pack.c:1504
+#: fetch-pack.c:1541
 #, c-format
 msgid "error processing wanted refs: %d"
-msgstr ""
+msgstr "erro processando wanted-refs: %d"
 
-#: fetch-pack.c:1534
+#: fetch-pack.c:1571
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack: esperado pacote fim de resposta"
 
-#: fetch-pack.c:1939
+#: fetch-pack.c:1983
 msgid "no matching remote head"
 msgstr "corresponde a remote head nenhuma"
 
-#: fetch-pack.c:1962 builtin/clone.c:697
+#: fetch-pack.c:2006 builtin/clone.c:587
 msgid "remote did not send all necessary objects"
 msgstr "remoto faltou enviar todos objetos necessários"
 
-#: fetch-pack.c:2065
+#: fetch-pack.c:2109
 msgid "unexpected 'ready' from remote"
-msgstr ""
+msgstr "'ready' inesperado de remoto"
 
-#: fetch-pack.c:2088
+#: fetch-pack.c:2132
 #, c-format
 msgid "no such remote ref %s"
 msgstr "referência remota %s inexistente"
 
-#: fetch-pack.c:2091
+#: fetch-pack.c:2135
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "Servidor proíbe pedido de objeto por anunciar %s"
 
-#: gpg-interface.c:273
+#: fsmonitor-ipc.c:119
+#, c-format
+msgid "fsmonitor_ipc__send_query: invalid path '%s'"
+msgstr ""
+
+#: fsmonitor-ipc.c:125
+#, c-format
+msgid "fsmonitor_ipc__send_query: unspecified error on '%s'"
+msgstr ""
+
+#: fsmonitor-ipc.c:155
+msgid "fsmonitor--daemon is not running"
+msgstr ""
+
+#: fsmonitor-ipc.c:164
+#, c-format
+msgid "could not send '%s' command to fsmonitor--daemon"
+msgstr "incapaz enviar comando '%s' para fsmonitor--daemon"
+
+#: gpg-interface.c:329 gpg-interface.c:456 gpg-interface.c:995
+#: gpg-interface.c:1011
 msgid "could not create temporary file"
 msgstr "incapaz criar ficheiro temporário"
 
-#: gpg-interface.c:276
+#: gpg-interface.c:332 gpg-interface.c:459
 #, c-format
 msgid "failed writing detached signature to '%s'"
-msgstr "falha ao escrever assinatura destacada em '%s'"
+msgstr "falhou ao escrever assinatura destacada em '%s'"
+
+#: gpg-interface.c:450
+msgid ""
+"gpg.ssh.allowedSignersFile needs to be configured and exist for ssh "
+"signature verification"
+msgstr ""
+
+#: gpg-interface.c:479
+msgid ""
+"ssh-keygen -Y find-principals/verify is needed for ssh signature "
+"verification (available in openssh version 8.2p1+)"
+msgstr ""
+
+#: gpg-interface.c:550
+#, c-format
+msgid "ssh signing revocation file configured but not found: %s"
+msgstr ""
+
+#: gpg-interface.c:638
+#, c-format
+msgid "bad/incompatible signature '%s'"
+msgstr "assinatura '%s' incorreta/incompatível"
+
+#: gpg-interface.c:815 gpg-interface.c:820
+#, c-format
+msgid "failed to get the ssh fingerprint for key '%s'"
+msgstr "obtenção de fingerprint ssh para chave '%s' falhou"
+
+#: gpg-interface.c:843
+msgid ""
+"either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured"
+msgstr ""
+
+#: gpg-interface.c:865
+#, c-format
+msgid "gpg.ssh.defaultKeyCommand succeeded but returned no keys: %s %s"
+msgstr ""
+
+#: gpg-interface.c:871
+#, c-format
+msgid "gpg.ssh.defaultKeyCommand failed: %s %s"
+msgstr ""
 
-#: gpg-interface.c:470
+#: gpg-interface.c:966
 msgid "gpg failed to sign the data"
 msgstr "gpg falhou assinar os dados"
 
+#: gpg-interface.c:988
+msgid "user.signingkey needs to be set for ssh signing"
+msgstr ""
+
+#: gpg-interface.c:999
+#, c-format
+msgid "failed writing ssh signing key to '%s'"
+msgstr "falhou escrita de chave de assinatura ssh para '%s'"
+
+#: gpg-interface.c:1017
+#, c-format
+msgid "failed writing ssh signing key buffer to '%s'"
+msgstr "falhou escrita de buffer de chave de assinatura ssh para '%s'"
+
+#: gpg-interface.c:1035
+msgid ""
+"ssh-keygen -Y sign is needed for ssh signing (available in openssh version "
+"8.2p1+)"
+msgstr ""
+
+#: gpg-interface.c:1047
+#, c-format
+msgid "failed reading ssh signing data buffer from '%s'"
+msgstr "falhou leitura de buffer de data de assinatura ssh de '%s'"
+
 #: graph.c:98
 #, c-format
 msgid "ignored invalid color '%.*s' in log.graphColors"
 msgstr "ignorar cor inválida '%.*s' em log.graphColors"
 
-#: grep.c:531
+#: grep.c:446
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
 msgstr ""
 
-#: grep.c:1895
+#: grep.c:1859
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "'%s': incapaz ler %s"
 
-#: grep.c:1912 setup.c:176 builtin/clone.c:416 builtin/diff.c:90
+#: grep.c:1876 setup.c:178 builtin/clone.c:308 builtin/diff.c:90
 #: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr ""
 
-#: grep.c:1923
+#: grep.c:1887
 #, c-format
 msgid "'%s': short read"
 msgstr "'%s': leitura truncada"
 
-#: help.c:23
+#: help.c:25
 msgid "start a working area (see also: git help tutorial)"
-msgstr "iniciar uma área de trabalho (vê também: git help tutorial)"
+msgstr "iniciar uma área-trabalho (vê também: git help tutorial)"
 
-#: help.c:24
+#: help.c:26
 msgid "work on the current change (see also: git help everyday)"
 msgstr "trabalhar na alteração atual (vê também: git help everyday)"
 
-#: help.c:25
+#: help.c:27
 msgid "examine the history and state (see also: git help revisions)"
 msgstr "examinar o histórico e estado (vê também: git help revisions)"
 
-#: help.c:26
+#: help.c:28
 msgid "grow, mark and tweak your common history"
-msgstr "aumentar, marcar e ajustar o seu histórico comum"
+msgstr "aumentar, marcar e ajustar teu histórico comum"
 
-#: help.c:27
+#: help.c:29
 msgid "collaborate (see also: git help workflows)"
 msgstr "colaborar (vê também: git help workflows)"
 
-#: help.c:31
+#: help.c:33
 msgid "Main Porcelain Commands"
 msgstr ""
 
-#: help.c:32
+#: help.c:34
 msgid "Ancillary Commands / Manipulators"
 msgstr ""
 
-#: help.c:33
+#: help.c:35
 msgid "Ancillary Commands / Interrogators"
 msgstr ""
 
-#: help.c:34
+#: help.c:36
 msgid "Interacting with Others"
 msgstr ""
 
-#: help.c:35
+#: help.c:37
 msgid "Low-level Commands / Manipulators"
 msgstr ""
 
-#: help.c:36
+#: help.c:38
 msgid "Low-level Commands / Interrogators"
 msgstr ""
 
-#: help.c:37
+#: help.c:39
 msgid "Low-level Commands / Syncing Repositories"
 msgstr ""
 
-#: help.c:38
+#: help.c:40
 msgid "Low-level Commands / Internal Helpers"
 msgstr ""
 
-#: help.c:300
+#: help.c:316
 #, c-format
 msgid "available git commands in '%s'"
 msgstr "comandos de git disponíveis em '%s'"
 
-#: help.c:307
+#: help.c:323
 msgid "git commands available from elsewhere on your $PATH"
 msgstr "comandos do git disponíveis noutras localizações em $PATH"
 
-#: help.c:316
+#: help.c:332
 msgid "These are common Git commands used in various situations:"
 msgstr "Estes são comandos do Git comuns usados em diversas situações:"
 
-#: help.c:365 git.c:100
+#: help.c:382 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
-msgstr "insustento para listagem tipo comandos '%s'"
+msgstr "insustentado para listagem tipo comandos '%s'"
 
-#: help.c:405
+#: help.c:422
 msgid "The Git concept guides are:"
 msgstr "Os guias comuns do Git:"
 
-#: help.c:429
-msgid "See 'git help <command>' to read about a specific subcommand"
-msgstr ""
-
-#: help.c:434
+#: help.c:446
 msgid "External commands"
 msgstr "Comandos externos"
 
-#: help.c:449
+#: help.c:468
 msgid "Command aliases"
 msgstr "Aliases de comando"
 
-#: help.c:527
+#: help.c:486
+msgid "See 'git help <command>' to read about a specific subcommand"
+msgstr ""
+
+#: help.c:563
 #, c-format
 msgid ""
 "'%s' appears to be a git command, but we were not\n"
@@ -4541,31 +4788,36 @@ msgstr ""
 "'%s' parece ser comando git, mas incapaz executá-lo.\n"
 "Talvez git-%s esteja danificado?"
 
-#: help.c:543 help.c:631
+#: help.c:585 help.c:682
 #, c-format
 msgid "git: '%s' is not a git command. See 'git --help'."
 msgstr "git: '%s' é comando git nenhum. Vê 'git --help'."
 
-#: help.c:591
+#: help.c:633
 msgid "Uh oh. Your system reports no Git commands at all."
 msgstr "Carago. Teu sistema reporta comandos Git nenhuns."
 
-#: help.c:613
+#: help.c:655
 #, c-format
 msgid "WARNING: You called a Git command named '%s', which does not exist."
 msgstr "AVISO: Chamou comando Git designado '%s', que é inexistente."
 
-#: help.c:618
+#: help.c:660
 #, c-format
 msgid "Continuing under the assumption that you meant '%s'."
 msgstr ""
 
-#: help.c:623
+#: help.c:666
+#, c-format
+msgid "Run '%s' instead [y/N]? "
+msgstr ""
+
+#: help.c:674
 #, c-format
 msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
 msgstr ""
 
-#: help.c:635
+#: help.c:686
 msgid ""
 "\n"
 "The most similar command is"
@@ -4575,16 +4827,16 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: help.c:675
+#: help.c:729
 msgid "git version [<options>]"
 msgstr "git version [<opções>]"
 
-#: help.c:730
+#: help.c:784
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s: %s - %s"
 
-#: help.c:734
+#: help.c:788
 msgid ""
 "\n"
 "Did you mean this?"
@@ -4598,15 +4850,27 @@ msgstr[1] ""
 "\n"
 "Queria dizer deste?"
 
-#: ident.c:353
+#: hook.c:28
+#, c-format
+msgid ""
+"The '%s' hook was ignored because it's not set as executable.\n"
+"You can disable this warning with `git config advice.ignoredHook false`."
+msgstr ""
+
+#: hook.c:87
+#, c-format
+msgid "Couldn't start hook '%s'\n"
+msgstr "Incapaz iniciar gancho '%s'\n"
+
+#: ident.c:354
 msgid "Author identity unknown\n"
 msgstr ""
 
-#: ident.c:356
+#: ident.c:357
 msgid "Committer identity unknown\n"
 msgstr ""
 
-#: ident.c:362
+#: ident.c:363
 msgid ""
 "\n"
 "*** Please tell me who you are.\n"
@@ -4621,82 +4885,82 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"*** Por favor diga que é.\n"
+"*** Por favor, diz-me quem és.\n"
 "\n"
-"Execute\n"
+"Executa\n"
 "\n"
 "  git config --global user.email \"eu@exemplo.com\"\n"
 "  git config --global user.name \"Meu Nome\"\n"
 "\n"
-"para definir a identidade predefinida da sua conta.\n"
-"Omita --global para definir a identidade apenas neste repositório.\n"
+"para definir a identidade predefinida da tua conta.\n"
+"Omite --global para definir a identidade apenas neste repositório.\n"
 "\n"
 
-#: ident.c:397
+#: ident.c:398
 msgid "no email was given and auto-detection is disabled"
 msgstr "foi dado email nenhum e deteção automática está desativada"
 
-#: ident.c:402
+#: ident.c:403
 #, c-format
 msgid "unable to auto-detect email address (got '%s')"
 msgstr "incapaz auto-detetar endereço de e-mail (recebi '%s')"
 
-#: ident.c:419
+#: ident.c:420
 msgid "no name was given and auto-detection is disabled"
 msgstr "foi dado nome nenhum e deteção automática está desativada"
 
-#: ident.c:425
+#: ident.c:426
 #, c-format
 msgid "unable to auto-detect name (got '%s')"
 msgstr "incapaz auto-detetar nome (recebi '%s')"
 
-#: ident.c:433
+#: ident.c:434
 #, c-format
 msgid "empty ident name (for <%s>) not allowed"
 msgstr "nome de identação vazio (para <%s>) proíbido"
 
-#: ident.c:439
+#: ident.c:440
 #, c-format
 msgid "name consists only of disallowed characters: %s"
 msgstr "nome consiste apenas de caracteres proíbidos: %s"
 
-#: ident.c:454 builtin/commit.c:647
+#: ident.c:455 builtin/commit.c:649
 #, c-format
 msgid "invalid date format: %s"
 msgstr "formato de data inválido: %s"
 
-#: list-objects-filter-options.c:83
+#: list-objects-filter-options.c:68
 msgid "expected 'tree:<depth>'"
 msgstr ""
 
-#: list-objects-filter-options.c:98
+#: list-objects-filter-options.c:83
 msgid "sparse:path filters support has been dropped"
 msgstr ""
 
-#: list-objects-filter-options.c:105
+#: list-objects-filter-options.c:90
 #, c-format
 msgid "'%s' for 'object:type=<type>' is not a valid object type"
 msgstr "'%s' para 'object:type=<type>' é um tipo de objecto inválido"
 
-#: list-objects-filter-options.c:124
+#: list-objects-filter-options.c:109
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr ""
 
-#: list-objects-filter-options.c:140
+#: list-objects-filter-options.c:125
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
 msgstr ""
 
-#: list-objects-filter-options.c:182
+#: list-objects-filter-options.c:167
 msgid "expected something after combine:"
 msgstr ""
 
-#: list-objects-filter-options.c:264
+#: list-objects-filter-options.c:249
 msgid "multiple filter-specs cannot be combined"
 msgstr ""
 
-#: list-objects-filter-options.c:376
+#: list-objects-filter-options.c:365
 msgid "unable to upgrade repository format to support partial clone"
 msgstr ""
 
@@ -4710,20 +4974,20 @@ msgstr "incapaz acessar blob sparse em '%s'"
 msgid "unable to parse sparse filter data in %s"
 msgstr "incapaz analisar dados de filtro sparse em %s"
 
-#: list-objects.c:127
+#: list-objects.c:144
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
 msgstr ""
 
-#: list-objects.c:140
+#: list-objects.c:157
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr ""
 
-#: list-objects.c:398
+#: list-objects.c:415
 #, c-format
 msgid "unable to load root tree for commit %s"
-msgstr "incapaz carregar raiz de árvore para commit %s"
+msgstr "incapaz carregar raiz de árvore para memória %s"
 
 #: lockfile.c:152
 #, c-format
@@ -4749,12 +5013,12 @@ msgstr ""
 msgid "Unable to create '%s.lock': %s"
 msgstr "Incapaz de criar '%s.lock': %s"
 
-#: ls-refs.c:37
+#: ls-refs.c:175
 #, c-format
-msgid "invalid value '%s' for lsrefs.unborn"
-msgstr ""
+msgid "unexpected line: '%s'"
+msgstr "linha inesperada: '%s'"
 
-#: ls-refs.c:167
+#: ls-refs.c:179
 msgid "expected flush after ls-refs arguments"
 msgstr ""
 
@@ -4762,44 +5026,44 @@ msgstr ""
 msgid "quoted CRLF detected"
 msgstr ""
 
-#: mailinfo.c:1254 builtin/am.c:176 builtin/mailinfo.c:46
+#: mailinfo.c:1254 builtin/am.c:185 builtin/mailinfo.c:46
 #, c-format
 msgid "bad action '%s' for '%s'"
 msgstr "ação inválida '%s' para '%s'"
 
-#: merge-ort.c:1569 merge-recursive.c:1201
+#: merge-ort.c:1630 merge-recursive.c:1214
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr ""
 
-#: merge-ort.c:1578 merge-recursive.c:1208
+#: merge-ort.c:1639 merge-recursive.c:1221
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr ""
 
-#: merge-ort.c:1587 merge-recursive.c:1215
+#: merge-ort.c:1648 merge-recursive.c:1228
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr ""
 
-#: merge-ort.c:1597 merge-ort.c:1604
+#: merge-ort.c:1658 merge-ort.c:1666
 #, c-format
 msgid "Note: Fast-forwarding submodule %s to %s"
-msgstr ""
+msgstr "Nota: Avançando submódulo %s para %s"
 
-#: merge-ort.c:1625
+#: merge-ort.c:1688
 #, c-format
 msgid "Failed to merge submodule %s"
 msgstr "Juntar submódulo %s falhou"
 
-#: merge-ort.c:1632
+#: merge-ort.c:1695
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but a possible merge resolution exists:\n"
 "%s\n"
 msgstr ""
 
-#: merge-ort.c:1636 merge-recursive.c:1269
+#: merge-ort.c:1699 merge-recursive.c:1284
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -4810,42 +5074,42 @@ msgid ""
 "which will accept this suggestion.\n"
 msgstr ""
 
-#: merge-ort.c:1649
+#: merge-ort.c:1712
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but multiple possible merges exist:\n"
 "%s"
 msgstr ""
 
-#: merge-ort.c:1868 merge-recursive.c:1358
+#: merge-ort.c:1937 merge-recursive.c:1375
 msgid "Failed to execute internal merge"
-msgstr "Falha ao executar integração interna"
+msgstr "Falha ao executar junção interna"
 
-#: merge-ort.c:1873 merge-recursive.c:1363
+#: merge-ort.c:1942 merge-recursive.c:1380
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "Incapaz de adicionar %s à base de dados"
 
-#: merge-ort.c:1880 merge-recursive.c:1396
+#: merge-ort.c:1949 merge-recursive.c:1413
 #, c-format
 msgid "Auto-merging %s"
-msgstr "A integrar automaticamente %s"
+msgstr "Juntando automaticamente %s"
 
-#: merge-ort.c:2019 merge-recursive.c:2118
+#: merge-ort.c:2088 merge-recursive.c:2135
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
 "implicit directory rename(s) putting the following path(s) there: %s."
 msgstr ""
 
-#: merge-ort.c:2029 merge-recursive.c:2128
+#: merge-ort.c:2098 merge-recursive.c:2145
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
 "implicit directory renames tried to put these paths there: %s"
 msgstr ""
 
-#: merge-ort.c:2087
+#: merge-ort.c:2156
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to rename %s to; it was "
@@ -4853,47 +5117,48 @@ msgid ""
 "majority of the files."
 msgstr ""
 
-#: merge-ort.c:2241 merge-recursive.c:2464
+#: merge-ort.c:2310 merge-recursive.c:2481
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
 "renamed."
 msgstr ""
 
-#: merge-ort.c:2385 merge-recursive.c:3247
+#: merge-ort.c:2450 merge-recursive.c:3264
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
 "moving it to %s."
 msgstr ""
 
-#: merge-ort.c:2392 merge-recursive.c:3254
+#: merge-ort.c:2457 merge-recursive.c:3271
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
 "%s; moving it to %s."
 msgstr ""
 
-#: merge-ort.c:2405 merge-recursive.c:3250
+#: merge-ort.c:2470 merge-recursive.c:3267
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed "
 "in %s, suggesting it should perhaps be moved to %s."
 msgstr ""
 
-#: merge-ort.c:2413 merge-recursive.c:3257
+#: merge-ort.c:2478 merge-recursive.c:3274
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
 "was renamed in %s, suggesting it should perhaps be moved to %s."
 msgstr ""
 
-#: merge-ort.c:2569
+#: merge-ort.c:2634
 #, c-format
 msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
-msgstr "CONFLITO (renomear/renomear): %s renomeado para %s em %s e para %s em %s."
+msgstr ""
+"CONFLITO (renomear/renomear): %s renomeado para %s em %s e para %s em %s."
 
-#: merge-ort.c:2664
+#: merge-ort.c:2729
 #, c-format
 msgid ""
 "CONFLICT (rename involved in collision): rename of %s -> %s has content "
@@ -4901,69 +5166,70 @@ msgid ""
 "markers."
 msgstr ""
 
-#: merge-ort.c:2683 merge-ort.c:2707
+#: merge-ort.c:2748 merge-ort.c:2772
 #, c-format
 msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
-msgstr "CONFLITO (renomear/apagar): %s renomeado para %s em %s, mas apagado em %s."
+msgstr ""
+"CONFLITO (renomear/apagar): %s renomeado para %s em %s, mas apagado em %s."
 
-#: merge-ort.c:3182 merge-recursive.c:3008
+#: merge-ort.c:3261 merge-recursive.c:3025
 #, c-format
 msgid "cannot read object %s"
 msgstr "incapaz ler objeto %s"
 
-#: merge-ort.c:3185 merge-recursive.c:3011
+#: merge-ort.c:3264 merge-recursive.c:3028
 #, c-format
 msgid "object %s is not a blob"
 msgstr "objeto %s é blob nenhum"
 
-#: merge-ort.c:3613
+#: merge-ort.c:3693
 #, c-format
 msgid ""
 "CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
 "%s instead."
 msgstr ""
 
-#: merge-ort.c:3689
+#: merge-ort.c:3770
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed both "
 "of them so each can be recorded somewhere."
 msgstr ""
 
-#: merge-ort.c:3696
+#: merge-ort.c:3777
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed one "
 "of them so each can be recorded somewhere."
 msgstr ""
 
-#: merge-ort.c:3796 merge-recursive.c:3087
+#: merge-ort.c:3866 merge-recursive.c:3104
 msgid "content"
 msgstr "conteúdo"
 
-#: merge-ort.c:3798 merge-recursive.c:3091
+#: merge-ort.c:3868 merge-recursive.c:3108
 msgid "add/add"
 msgstr "adicionar/adicionar"
 
-#: merge-ort.c:3800 merge-recursive.c:3136
+#: merge-ort.c:3870 merge-recursive.c:3153
 msgid "submodule"
 msgstr "submódulo"
 
-#: merge-ort.c:3802 merge-recursive.c:3137
+#: merge-ort.c:3872 merge-recursive.c:3154
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "CONFLITO (%s): Conflito de junção em %s"
 
-#: merge-ort.c:3833
+#: merge-ort.c:3916
 #, c-format
 msgid ""
 "CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
 "of %s left in tree."
 msgstr ""
-"CONFLITO (modificar/apagar): %s apagado em %s e modificado em %s. Versão %s de %s "
-"deixada na árvore."
+"CONFLITO (modificar/apagar): %s apagado em %s e modificado em %s. Versão %s "
+"de %s deixada na árvore."
 
-#: merge-ort.c:4120
+#: merge-ort.c:4212
 #, c-format
 msgid ""
 "Note: %s not up to date and in way of checking out conflicted version; old "
@@ -4973,12 +5239,12 @@ msgstr ""
 #. TRANSLATORS: The %s arguments are: 1) tree hash of a merge
 #. base, and 2-3) the trees for the two trees we're merging.
 #.
-#: merge-ort.c:4487
+#: merge-ort.c:4586
 #, c-format
 msgid "collecting merge info failed for trees %s, %s, %s"
 msgstr ""
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3702
+#: merge-ort-wrappers.c:13 merge-recursive.c:3723
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -4988,104 +5254,105 @@ msgstr ""
 "juntar:\n"
 "  %s"
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3468 builtin/merge.c:402
+#: merge-ort-wrappers.c:33 merge-recursive.c:3485 builtin/merge.c:405
 msgid "Already up to date."
 msgstr "Já está atualizado."
 
-#: merge-recursive.c:352
+#: merge-recursive.c:353
 msgid "(bad commit)\n"
-msgstr "(commit incorreto)\n"
+msgstr "(memória incorreta)\n"
 
-#: merge-recursive.c:375
+#: merge-recursive.c:381
 #, c-format
 msgid "add_cacheinfo failed for path '%s'; merge aborting."
 msgstr "add_cacheinfo falhou para caminho '%s'; abortando junção."
 
-#: merge-recursive.c:384
+#: merge-recursive.c:390
 #, c-format
 msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
-msgstr "add_cacheinfo falhou no refrescar para o caminho '%s'; abortando junção."
+msgstr "add_cacheinfo falhou a refrescar para caminho '%s'; abortando junção."
 
-#: merge-recursive.c:872
+#: merge-recursive.c:881
 #, c-format
 msgid "failed to create path '%s'%s"
 msgstr "falhou criar caminho '%s'%s"
 
-#: merge-recursive.c:883
+#: merge-recursive.c:892
 #, c-format
 msgid "Removing %s to make room for subdirectory\n"
-msgstr "A remover %s para criar espaço para o subdiretório\n"
+msgstr "Removendo %s para criar espaço para subpasta\n"
 
-#: merge-recursive.c:897 merge-recursive.c:916
+#: merge-recursive.c:906 merge-recursive.c:925
 msgid ": perhaps a D/F conflict?"
 msgstr ": talvez um conflito D/F?"
 
-#: merge-recursive.c:906
+#: merge-recursive.c:915
 #, c-format
 msgid "refusing to lose untracked file at '%s'"
-msgstr "recusando perder ficheiro untracked em '%s'"
+msgstr "recusando perder ficheiro desmonitorizado em '%s'"
 
-#: merge-recursive.c:947 builtin/cat-file.c:41
+#: merge-recursive.c:956 builtin/cat-file.c:47
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "incapaz ler objeto %s '%s'"
 
-#: merge-recursive.c:952
+#: merge-recursive.c:961
 #, c-format
 msgid "blob expected for %s '%s'"
 msgstr ""
 
-#: merge-recursive.c:977
+#: merge-recursive.c:986
 #, c-format
 msgid "failed to open '%s': %s"
 msgstr "falhou ao abrir '%s': %s"
 
-#: merge-recursive.c:988
+#: merge-recursive.c:997
 #, c-format
 msgid "failed to symlink '%s': %s"
 msgstr "falha ao criar a ligação simbólica '%s': %s"
 
-#: merge-recursive.c:993
+#: merge-recursive.c:1002
 #, c-format
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "desconheço que fazer com %06o %s '%s'"
 
-#: merge-recursive.c:1223 merge-recursive.c:1235
+#: merge-recursive.c:1236 merge-recursive.c:1249
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
-msgstr ""
+msgstr "Avançando submódulo %s para a seguinte memória:"
 
-#: merge-recursive.c:1226 merge-recursive.c:1238
+#: merge-recursive.c:1239 merge-recursive.c:1252
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "Avançando submódulo %s"
 
-#: merge-recursive.c:1261
+#: merge-recursive.c:1276
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 
-#: merge-recursive.c:1265
+#: merge-recursive.c:1280
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
-msgstr ""
+msgstr "Falhou ao juntar submódulo %s (diferente de avanço)"
 
-#: merge-recursive.c:1266
+#: merge-recursive.c:1281
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr ""
 
-#: merge-recursive.c:1278
+#: merge-recursive.c:1293
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr ""
 
-#: merge-recursive.c:1420
+#: merge-recursive.c:1437
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr ""
-"Erro: Recusando perder ficheiro untracked de '%s'; escrevendo invés para %s"
+"Erro: Recusando perder ficheiro desmonitorizado em '%s'; invés escrevendo "
+"para %s"
 
-#: merge-recursive.c:1492
+#: merge-recursive.c:1509
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5094,7 +5361,7 @@ msgstr ""
 "CONFLITO (%s/eliminar): %s eliminado em %s e %s em %s. Versão de %s de %s "
 "deixada na árvore."
 
-#: merge-recursive.c:1497
+#: merge-recursive.c:1514
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5103,7 +5370,7 @@ msgstr ""
 "CONFLITO (%s/eliminar): %s eliminado em %s e %s para %s em %s. Versão de %s "
 "de %s deixada na árvore."
 
-#: merge-recursive.c:1504
+#: merge-recursive.c:1521
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5112,7 +5379,7 @@ msgstr ""
 "CONFLITO (%s/eliminar): %s eliminado em %s e %s em %s. Versão de %s de %s "
 "deixada na árvore em %s."
 
-#: merge-recursive.c:1509
+#: merge-recursive.c:1526
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5121,43 +5388,44 @@ msgstr ""
 "CONFLITO (%s/eliminar): %s eliminado em %s e %s para %s em %s. Versão de %s "
 "de %s deixada na árvore em %s."
 
-#: merge-recursive.c:1544
+#: merge-recursive.c:1561
 msgid "rename"
 msgstr "renomear"
 
-#: merge-recursive.c:1544
+#: merge-recursive.c:1561
 msgid "renamed"
 msgstr "nome mudado"
 
-#: merge-recursive.c:1595 merge-recursive.c:2501 merge-recursive.c:3164
+#: merge-recursive.c:1612 merge-recursive.c:2518 merge-recursive.c:3181
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "Recusando perder ficheiro sujo de %s"
 
-#: merge-recursive.c:1605
+#: merge-recursive.c:1622
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
-"Recusando perder ficheiro untracked de %s, apesar de este estar no caminho."
+"Recusando perder ficheiro desmonitorizado em %s, apesar de estar no caminho."
 
-#: merge-recursive.c:1663
+#: merge-recursive.c:1680
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "CONFLITO (mudar nome/adicionar): Mudar o nome %s->%s em %s. %s adicionado em "
 "%s"
 
-#: merge-recursive.c:1694
+#: merge-recursive.c:1711
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
-msgstr "%s é um diretório em %s adicionando %s no seu lugar"
+msgstr "%s é um pasta em %s adicionando como %s invés"
 
-#: merge-recursive.c:1699
+#: merge-recursive.c:1716
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
-msgstr "Recusando perder ficheiro untracked de %s; adicionado-o como %s invés"
+msgstr ""
+"Recusando perder ficheiro desmonitorizado em %s; invés adicionando  como %s"
 
-#: merge-recursive.c:1726
+#: merge-recursive.c:1743
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -5166,18 +5434,18 @@ msgstr ""
 "CONFLITO (mudar nome/mudar nome): Mudar o nome \"%s\"->\"%s\" no ramo \"%s\" "
 "mudar o nome \"%s\"->\"%s\" em \"%s\"%s"
 
-#: merge-recursive.c:1731
+#: merge-recursive.c:1748
 msgid " (left unresolved)"
 msgstr " (por resolver)"
 
-#: merge-recursive.c:1823
+#: merge-recursive.c:1840
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "CONFLITO (mudar nome/mudar nome): Mudar de nome %s->%s em %s. Mudar o nome "
 "%s->%s em %s"
 
-#: merge-recursive.c:2086
+#: merge-recursive.c:2103
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -5185,7 +5453,7 @@ msgid ""
 "getting a majority of the files."
 msgstr ""
 
-#: merge-recursive.c:2220
+#: merge-recursive.c:2237
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -5194,277 +5462,312 @@ msgstr ""
 "CONFLITO (mudar nome/mudar nome): Mudar de nome %s->%s em %s. Mudar o nome "
 "%s->%s em %s"
 
-#: merge-recursive.c:3075
+#: merge-recursive.c:3092
 msgid "modify"
 msgstr "modificar"
 
-#: merge-recursive.c:3075
+#: merge-recursive.c:3092
 msgid "modified"
 msgstr "modificado"
 
-#: merge-recursive.c:3114
+#: merge-recursive.c:3131
 #, c-format
 msgid "Skipped %s (merged same as existing)"
-msgstr "%s ignorado (integrado é igual ao existente)"
+msgstr "%s saltado (junto é igual ao existente)"
 
-#: merge-recursive.c:3167
+#: merge-recursive.c:3184
 #, c-format
 msgid "Adding as %s instead"
 msgstr "A adicionar como %s, em alternativa."
 
-#: merge-recursive.c:3371
+#: merge-recursive.c:3388
 #, c-format
 msgid "Removing %s"
 msgstr "Removendo %s"
 
-#: merge-recursive.c:3394
+#: merge-recursive.c:3411
 msgid "file/directory"
-msgstr "ficheiro/diretório"
+msgstr "ficheiro/pasta"
 
-#: merge-recursive.c:3399
+#: merge-recursive.c:3416
 msgid "directory/file"
-msgstr "diretório/ficheiro"
+msgstr "pasta/ficheiro"
 
-#: merge-recursive.c:3406
+#: merge-recursive.c:3423
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
-msgstr ""
-"CONFLITO (%s): Há um diretório designado %s em %s. A adicionar %s como %s"
+msgstr "CONFLITO (%s): Há uma pasta designada %s em %s. Adicionando %s como %s"
 
-#: merge-recursive.c:3415
+#: merge-recursive.c:3432
 #, c-format
 msgid "Adding %s"
 msgstr "A adicionar %s"
 
-#: merge-recursive.c:3424
+#: merge-recursive.c:3441
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "CONFLITO (add/add): Conflito de junção em %s"
 
-#: merge-recursive.c:3477
+#: merge-recursive.c:3494
 #, c-format
 msgid "merging of trees %s and %s failed"
-msgstr "falha ao integrar as árvores %s e %s"
+msgstr "falha ao juntar árvores %s e %s"
 
-#: merge-recursive.c:3571
+#: merge-recursive.c:3588
 msgid "Merging:"
-msgstr "A integrar:"
+msgstr "Juntando:"
 
-#: merge-recursive.c:3584
+#: merge-recursive.c:3601
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "%u antecessor comum encontrado:"
 msgstr[1] "%u antecessores comuns encontrados:"
 
-#: merge-recursive.c:3634
+#: merge-recursive.c:3651
 msgid "merge returned no commit"
-msgstr "junção retornou commit nenhum"
+msgstr "junção retornou memória nenhuma"
 
-#: merge-recursive.c:3799
+#: merge-recursive.c:3823
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "Incapaz de analisar objeto '%s'"
 
-#: merge-recursive.c:3817 builtin/merge.c:717 builtin/merge.c:901
-#: builtin/stash.c:473
+#: merge-recursive.c:3841 builtin/merge.c:720 builtin/merge.c:912
+#: builtin/stash.c:489
 msgid "Unable to write index."
-msgstr "Incapaz de escrever no index."
+msgstr "Incapaz de escrever cenário."
 
 #: merge.c:41
 msgid "failed to read the cache"
-msgstr "falha ao ler a cache"
+msgstr "falhou ao ler o cenário"
 
-#: merge.c:108 rerere.c:704 builtin/am.c:1932 builtin/am.c:1966
-#: builtin/checkout.c:590 builtin/checkout.c:844 builtin/clone.c:821
-#: builtin/stash.c:267
+#: merge.c:102 rerere.c:705 builtin/am.c:1989 builtin/am.c:2023
+#: builtin/checkout.c:603 builtin/checkout.c:865 builtin/clone.c:714
+#: builtin/stash.c:269
 msgid "unable to write new index file"
-msgstr "incapaz escrever novo ficheiro index"
+msgstr "incapaz escrever ficheiro de cenário novo"
 
-#: midx.c:74
+#: midx.c:79
 msgid "multi-pack-index OID fanout is of the wrong size"
 msgstr ""
 
-#: midx.c:105
+#: midx.c:112
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr ""
 
-#: midx.c:121
+#: midx.c:128
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr ""
 
-#: midx.c:126
+#: midx.c:133
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "versão %d de multi-pack-index irreconhecível"
 
-#: midx.c:131
+#: midx.c:138
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr ""
 
-#: midx.c:148
+#: midx.c:155
 msgid "multi-pack-index missing required pack-name chunk"
-msgstr ""
+msgstr "multi-pack-index em falta exigia fragmento nome-pacote"
 
-#: midx.c:150
+#: midx.c:157
 msgid "multi-pack-index missing required OID fanout chunk"
-msgstr ""
+msgstr "multi-pack-index em falta exigia OID de fanout de fragmento"
 
-#: midx.c:152
+#: midx.c:159
 msgid "multi-pack-index missing required OID lookup chunk"
-msgstr ""
+msgstr "multi-pack-index em falta exigia OID de procura de fragmento"
 
-#: midx.c:154
+#: midx.c:161
 msgid "multi-pack-index missing required object offsets chunk"
-msgstr ""
+msgstr "multi-pack-index em falta exigia fragmento de deslocamentos de objeto"
 
-#: midx.c:170
+#: midx.c:180
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr ""
 
-#: midx.c:214
+#: midx.c:228
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr ""
 
-#: midx.c:264
+#: midx.c:278
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr ""
 
-#: midx.c:490
+#: midx.c:509
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr ""
 
-#: midx.c:496
+#: midx.c:515
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr ""
 
-#: midx.c:564
+#: midx.c:583
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr ""
 
-#: midx.c:880 builtin/index-pack.c:1533
+#: midx.c:911
 msgid "cannot store reverse index file"
 msgstr "incapaz guardar ficheiro de cenário reverso"
 
-#: midx.c:920
+#: midx.c:1009
+#, c-format
+msgid "could not parse line: %s"
+msgstr "incapaz processar linha: %s"
+
+#: midx.c:1011
+#, c-format
+msgid "malformed line: %s"
+msgstr "linha malformada: %s"
+
+#: midx.c:1181
 msgid "ignoring existing multi-pack-index; checksum mismatch"
 msgstr "ignorando multi-pack-index existente; checksum diferente"
 
-#: midx.c:943
+#: midx.c:1206
+msgid "could not load pack"
+msgstr "incapaz carregar pacote"
+
+#: midx.c:1212
+#, c-format
+msgid "could not open index for %s"
+msgstr "incapaz abrir cenário para %s"
+
+#: midx.c:1223
 msgid "Adding packfiles to multi-pack-index"
 msgstr ""
 
-#: midx.c:989
+#: midx.c:1266
 #, c-format
-msgid "did not see pack-file %s to drop"
+msgid "unknown preferred pack: '%s'"
 msgstr ""
 
-#: midx.c:1034
+#: midx.c:1311
 #, c-format
-msgid "unknown preferred pack: '%s'"
+msgid "cannot select preferred pack %s with no objects"
+msgstr "incapaz selecionar pacote preferido %s sem objetos"
+
+#: midx.c:1343
+#, c-format
+msgid "did not see pack-file %s to drop"
 msgstr ""
 
-#: midx.c:1039
+#: midx.c:1389
 #, c-format
 msgid "preferred pack '%s' is expired"
 msgstr "pacote preferencial '%s' expirou"
 
-#: midx.c:1055
+#: midx.c:1402
 msgid "no pack files to index."
-msgstr "pack files nenhuns para index."
+msgstr "pack files nenhuns para cenário."
+
+#: midx.c:1409
+msgid "refusing to write multi-pack .bitmap without any objects"
+msgstr "apenas posso escrever multi-pacote .bitmap com objetos"
+
+#: midx.c:1451
+msgid "could not write multi-pack bitmap"
+msgstr "incapaz escrever multi-pacote bitmap"
+
+#: midx.c:1461
+msgid "could not write multi-pack-index"
+msgstr "incapaz escrever multi-pacote-index"
 
-#: midx.c:1135 builtin/clean.c:37
+#: midx.c:1520 builtin/clean.c:37
 #, c-format
 msgid "failed to remove %s"
 msgstr "falha ao remover %s"
 
-#: midx.c:1166
+#: midx.c:1553
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr ""
 
-#: midx.c:1225
+#: midx.c:1616
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr ""
 
-#: midx.c:1233
+#: midx.c:1624
 msgid "incorrect checksum"
 msgstr "checksum incorreto"
 
-#: midx.c:1236
+#: midx.c:1627
 msgid "Looking for referenced packfiles"
 msgstr ""
 
-#: midx.c:1251
+#: midx.c:1642
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr ""
 
-#: midx.c:1256
+#: midx.c:1647
 msgid "the midx contains no oid"
 msgstr ""
 
-#: midx.c:1265
+#: midx.c:1656
 msgid "Verifying OID order in multi-pack-index"
 msgstr ""
 
-#: midx.c:1274
+#: midx.c:1665
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr ""
 
-#: midx.c:1294
+#: midx.c:1685
 msgid "Sorting objects by packfile"
 msgstr ""
 
-#: midx.c:1301
+#: midx.c:1692
 msgid "Verifying object offsets"
 msgstr ""
 
-#: midx.c:1317
+#: midx.c:1708
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "falhou carregar entrada pack para oid[%d] = %s"
 
-#: midx.c:1323
+#: midx.c:1714
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr ""
 
-#: midx.c:1332
+#: midx.c:1723
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr ""
 
-#: midx.c:1357
+#: midx.c:1750
 msgid "Counting referenced objects"
 msgstr "Contando objetos referenciados"
 
-#: midx.c:1367
+#: midx.c:1760
 msgid "Finding and deleting unreferenced packfiles"
 msgstr ""
 
-#: midx.c:1558
+#: midx.c:1952
 msgid "could not start pack-objects"
 msgstr "incapaz de começar pack-objects"
 
-#: midx.c:1578
+#: midx.c:1972
 msgid "could not finish pack-objects"
 msgstr "incapaz de terminar pack-objects"
 
 #: name-hash.c:542
 #, c-format
 msgid "unable to create lazy_dir thread: %s"
-msgstr "incapaz criar thread lazy_dir: %s"
+msgstr "incapaz criar fio lazy_dir: %s"
 
 #: name-hash.c:564
 #, c-format
@@ -5476,19 +5779,19 @@ msgstr "incapaz criar thread lazy_name: %s"
 msgid "unable to join lazy_name thread: %s"
 msgstr "incapaz juntar a thread lazy_name: %s"
 
-#: notes-merge.c:277
+#: notes-merge.c:276
 #, c-format
 msgid ""
 "You have not concluded your previous notes merge (%s exists).\n"
 "Please, use 'git notes merge --commit' or 'git notes merge --abort' to "
 "commit/abort the previous merge before you start a new notes merge."
 msgstr ""
-"Ficou por concluír a anterior junção de notas (%s existe).\n"
+"Ficou por concluir a anterior junção de notas (%s existe).\n"
 "Por favor, usa 'git notes merge --commit' ou 'git notes merge --abort' para "
-"commitar/abortar a junção anterior antes de começares uma nova junção de "
+"memorizar/abortar a junção anterior antes de começares uma nova junção de "
 "notas."
 
-#: notes-merge.c:284
+#: notes-merge.c:283
 #, c-format
 msgid "You have not concluded your notes merge (%s exists)."
 msgstr "Ficou por concluír a tua junção de notas (%s existe)."
@@ -5496,7 +5799,7 @@ msgstr "Ficou por concluír a tua junção de notas (%s existe)."
 #: notes-utils.c:46
 msgid "Cannot commit uninitialized/unreferenced notes tree"
 msgstr ""
-"Impossível commit notas de árvore que estejam por iniciar/por referênciar"
+"incapaz memorizar notas de árvore que estejam por iniciar/por referenciar"
 
 #: notes-utils.c:105
 #, c-format
@@ -5517,272 +5820,343 @@ msgstr "Reescrita de notas em %s (fora de refs/notes/) recusada"
 msgid "Bad %s value: '%s'"
 msgstr "Valor incorreto de %s: '%s'"
 
-#: object-file.c:526
+#: object-file.c:457
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr ""
 
-#: object-file.c:584
+#: object-file.c:515
 #, c-format
 msgid "unable to normalize alternate object path: %s"
-msgstr "incapaz normalizar path de objeto alternativo: %s"
+msgstr "incapaz normalizar caminho de objeto alternativo: %s"
 
-#: object-file.c:658
+#: object-file.c:589
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr ""
 
-#: object-file.c:665
+#: object-file.c:596
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr "incapaz normalizar pasta de objeto: %s"
 
-#: object-file.c:708
+#: object-file.c:639
 msgid "unable to fdopen alternates lockfile"
 msgstr "incapaz de fdopen lockfile alternativo"
 
-#: object-file.c:726
+#: object-file.c:657
 msgid "unable to read alternates file"
 msgstr "incapaz ler ficheiro alternativo"
 
-#: object-file.c:733
+#: object-file.c:664
 msgid "unable to move new alternates file into place"
 msgstr "incapaz mover novo ficheiro alternativo para o sítio"
 
-#: object-file.c:768
+#: object-file.c:742
 #, c-format
 msgid "path '%s' does not exist"
 msgstr "caminho '%s' é inexistente"
 
-#: object-file.c:789
+#: object-file.c:763
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr ""
-"repositório referência '%s' como uma checkout ligada ainda é insustentado."
+"repositório referência '%s' como uma observação ligada ainda é insustentado."
 
-#: object-file.c:795
+#: object-file.c:769
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "repositório referência '%s' é repositório local nenhum."
 
-#: object-file.c:801
+#: object-file.c:775
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr "o repositório de referência '%s' é raso"
 
-#: object-file.c:809
+#: object-file.c:783
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr "repositório de referência '%s' está enxertado"
 
-#: object-file.c:869
+#: object-file.c:814
+#, c-format
+msgid "could not find object directory matching %s"
+msgstr "incapaz encontrar pasta objeto correspondendo %s"
+
+#: object-file.c:864
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr ""
 
-#: object-file.c:1019
+#: object-file.c:1014
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr ""
 
-#: object-file.c:1054
+#: object-file.c:1049
 #, c-format
 msgid "mmap failed%s"
 msgstr "mmap falhou%s"
 
-#: object-file.c:1218
+#: object-file.c:1230
 #, c-format
 msgid "object file %s is empty"
 msgstr ""
 
-#: object-file.c:1353 object-file.c:2548
+#: object-file.c:1349 object-file.c:2588
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr "objeto solto '%s' corrupto"
 
-#: object-file.c:1355 object-file.c:2552
+#: object-file.c:1351 object-file.c:2592
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr "lixo no fim de objeto solto '%s'"
 
-#: object-file.c:1397
+#: object-file.c:1473
+#, c-format
+msgid "unable to parse %s header"
+msgstr "incapaz processar cabeçalho %s"
+
+#: object-file.c:1475
 msgid "invalid object type"
 msgstr "tipo de objeto inválido"
 
-#: object-file.c:1481
-#, c-format
-msgid "unable to unpack %s header with --allow-unknown-type"
-msgstr ""
-
-#: object-file.c:1484
+#: object-file.c:1486
 #, c-format
 msgid "unable to unpack %s header"
 msgstr "incapaz desempacotar cabeçalho %s"
 
 #: object-file.c:1490
 #, c-format
-msgid "unable to parse %s header with --allow-unknown-type"
+msgid "header for %s too long, exceeds %d bytes"
 msgstr ""
 
-#: object-file.c:1493
-#, c-format
-msgid "unable to parse %s header"
-msgstr "incapaz processar cabeçalho %s"
-
-#: object-file.c:1717
+#: object-file.c:1720
 #, c-format
 msgid "failed to read object %s"
 msgstr "falhou ler objeto %s"
 
-#: object-file.c:1721
+#: object-file.c:1724
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr "%s substituto, por encontrar para %s"
 
-#: object-file.c:1725
+#: object-file.c:1728
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr ""
 
-#: object-file.c:1729
+#: object-file.c:1732
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr ""
 
-#: object-file.c:1834
+#: object-file.c:1855
 #, c-format
 msgid "unable to write file %s"
 msgstr "incapaz escrever ficheiro %s"
 
-#: object-file.c:1841
+#: object-file.c:1862
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr "incapaz definir permissão para '%s'"
 
-#: object-file.c:1848
+#: object-file.c:1869
 msgid "file write error"
 msgstr ""
 
-#: object-file.c:1868
+#: object-file.c:1904
 msgid "error when closing loose object file"
 msgstr ""
 
-#: object-file.c:1933
+#: object-file.c:1971
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr ""
 
-#: object-file.c:1935
+#: object-file.c:1973
 msgid "unable to create temporary file"
 msgstr "incapaz criar ficheiro temporário"
 
-#: object-file.c:1959
+#: object-file.c:1997
 msgid "unable to write loose object file"
 msgstr "incapaz escrever ficheiro objeto solto"
 
-#: object-file.c:1965
+#: object-file.c:2003
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr "incapaz esvaziar objeto novo %s (%d)"
 
-#: object-file.c:1969
+#: object-file.c:2007
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr "deflateEnd em objeto %s falhou (%d)"
 
-#: object-file.c:1973
+#: object-file.c:2011
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr ""
 
-#: object-file.c:1983 builtin/pack-objects.c:1237
+#: object-file.c:2022 builtin/pack-objects.c:1251
 #, c-format
 msgid "failed utime() on %s"
 msgstr ""
 
-#: object-file.c:2060
+#: object-file.c:2100
 #, c-format
 msgid "cannot read object for %s"
 msgstr "incapaz ler objeto para %s"
 
-#: object-file.c:2111
+#: object-file.c:2151
 msgid "corrupt commit"
 msgstr "memória de Git rota"
 
-#: object-file.c:2119
+#: object-file.c:2159
 msgid "corrupt tag"
 msgstr "etiqueta rota"
 
-#: object-file.c:2219
+#: object-file.c:2259
 #, c-format
 msgid "read error while indexing %s"
 msgstr ""
 
-#: object-file.c:2222
+#: object-file.c:2262
 #, c-format
 msgid "short read while indexing %s"
 msgstr "leitura curta enquanto indexando %s"
 
-#: object-file.c:2295 object-file.c:2305
+#: object-file.c:2335 object-file.c:2345
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr "%s: falhou inserir na base de dados"
 
-#: object-file.c:2311
+#: object-file.c:2351
 #, c-format
 msgid "%s: unsupported file type"
 msgstr "%s: tipo ficheiro insustentado"
 
-#: object-file.c:2335
+#: object-file.c:2375 builtin/fetch.c:1494
 #, c-format
 msgid "%s is not a valid object"
 msgstr "%s é objeto inválido"
 
-#: object-file.c:2337
+#: object-file.c:2377
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "%s é um objeto inválido '%s'"
 
-#: object-file.c:2364 builtin/index-pack.c:192
+#: object-file.c:2404
 #, c-format
 msgid "unable to open %s"
 msgstr "incapaz abrir %s"
 
-#: object-file.c:2559 object-file.c:2612
+#: object-file.c:2599
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr ""
 
-#: object-file.c:2583
+#: object-file.c:2622
 #, c-format
 msgid "unable to mmap %s"
 msgstr "incapaz mmap %s"
 
-#: object-file.c:2588
+#: object-file.c:2628
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr "incapaz desempacotar cabeçalho de %s"
 
-#: object-file.c:2594
+#: object-file.c:2633
 #, c-format
 msgid "unable to parse header of %s"
 msgstr "incapaz processar cabeçalho de %s"
 
-#: object-file.c:2605
+#: object-file.c:2644
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr "incapaz desempacotar conteúdo de %s"
 
-#: object-name.c:480
+#. TRANSLATORS: This is a line of ambiguous object
+#. output shown when we cannot look up or parse the
+#. object in question. E.g. "deadbeef [bad object]".
+#.
+#: object-name.c:382
+#, c-format
+msgid "%s [bad object]"
+msgstr "%s [objeto inválido]"
+
+#. TRANSLATORS: This is a line of ambiguous commit
+#. object output. E.g.:
+#. *
+#.    "deadbeef commit 2021-01-01 - Some Commit Message"
+#.
+#: object-name.c:407
+#, c-format
+msgid "%s commit %s - %s"
+msgstr "memória %s %s - %s"
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output. E.g.:
+#. *
+#.    "deadbeef tag 2022-01-01 - Some Tag Message"
+#. *
+#. The second argument is the YYYY-MM-DD found
+#. in the tag.
+#. *
+#. The third argument is the "tag" string
+#. from object.c.
+#.
+#: object-name.c:428
+#, c-format
+msgid "%s tag %s - %s"
+msgstr "etiqueta %s %s - %s"
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output where we couldn't parse
+#. the tag itself. E.g.:
+#. *
+#.    "deadbeef [bad tag, could not parse it]"
+#.
+#: object-name.c:439
+#, c-format
+msgid "%s [bad tag, could not parse it]"
+msgstr "%s [tag inválida, incapaz de processá-la]"
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef tree".
+#.
+#: object-name.c:447
+#, c-format
+msgid "%s tree"
+msgstr "árvore %s"
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef blob".
+#.
+#: object-name.c:453
+#, c-format
+msgid "%s blob"
+msgstr "blob %s"
+
+#: object-name.c:569
 #, c-format
 msgid "short object ID %s is ambiguous"
-msgstr "SHA1 curto %s é ambíguo"
+msgstr "ID curto de objeto %s é ambíguo"
 
-#: object-name.c:491
-msgid "The candidates are:"
-msgstr "Os candidatos são:"
+#. TRANSLATORS: The argument is the list of ambiguous
+#. objects composed in show_ambiguous_object(). See
+#. its "TRANSLATORS" comments for details.
+#.
+#: object-name.c:591
+#, c-format
+msgid ""
+"The candidates are:\n"
+"%s"
+msgstr ""
+"Os candidatos são:\n"
+"%s"
 
-#: object-name.c:790
+#: object-name.c:888
 msgid ""
 "Git normally never creates a ref that ends with 40 hex characters\n"
 "because it will be ignored when you just specify 40-hex. These refs\n"
@@ -5804,64 +6178,67 @@ msgstr ""
 "examine estas refs e talvez apague-as. Desative esta mensagem\n"
 "executando \"git config advice.objectNameWarning false\""
 
-#: object-name.c:910
+#: object-name.c:1008
 #, c-format
 msgid "log for '%.*s' only goes back to %s"
 msgstr ""
 
-#: object-name.c:918
+#: object-name.c:1016
 #, c-format
 msgid "log for '%.*s' only has %d entries"
 msgstr ""
 
-#: object-name.c:1696
+#: object-name.c:1794
 #, c-format
 msgid "path '%s' exists on disk, but not in '%.*s'"
 msgstr "caminho '%s' existe em disco, mas é inexistente em '%.*s'"
 
-#: object-name.c:1702
+#: object-name.c:1800
 #, c-format
 msgid ""
 "path '%s' exists, but not '%s'\n"
 "hint: Did you mean '%.*s:%s' aka '%.*s:./%s'?"
 msgstr ""
 
-#: object-name.c:1711
+#: object-name.c:1809
 #, c-format
 msgid "path '%s' does not exist in '%.*s'"
 msgstr "caminho '%s' é inexistente em '%.*s'"
 
-#: object-name.c:1739
+#: object-name.c:1837
 #, c-format
 msgid ""
 "path '%s' is in the index, but not at stage %d\n"
 "hint: Did you mean ':%d:%s'?"
 msgstr ""
 
-#: object-name.c:1755
+#: object-name.c:1853
 #, c-format
 msgid ""
 "path '%s' is in the index, but not '%s'\n"
 "hint: Did you mean ':%d:%s' aka ':%d:./%s'?"
 msgstr ""
 
-#: object-name.c:1763
+#: object-name.c:1861
 #, c-format
 msgid "path '%s' exists on disk, but not in the index"
 msgstr ""
 
-#: object-name.c:1765
+#: object-name.c:1863
 #, c-format
 msgid "path '%s' does not exist (neither on disk nor in the index)"
-msgstr "caminho '%s' é inexistente (quer no disco quer no index)"
+msgstr "caminho '%s' é inexistente (quer no disco quer no cenário)"
 
-#: object-name.c:1778
+#: object-name.c:1876
 msgid "relative path syntax can't be used outside working tree"
+msgstr "caminhos relativos proibidos serem usados fora da árvore-trabalho"
+
+#: object-name.c:1901
+#, c-format
+msgid "<object>:<path> required, only <object> '%s' given"
 msgstr ""
-"Os caminhos relativos só podem ser usados a partir do topo da árvore de "
-"trabalho"
 
-#: object-name.c:1916
+#: object-name.c:2014
 #, c-format
 msgid "invalid object name '%.*s'."
 msgstr "nome de objeto inválido: '%.*s'."
@@ -5886,17 +6263,30 @@ msgstr ""
 msgid "unable to parse object: %s"
 msgstr "incapaz analisar objeto: %s"
 
-#: object.c:283 object.c:295
+#: object.c:283 object.c:294
 #, c-format
 msgid "hash mismatch %s"
 msgstr ""
 
-#: pack-bitmap.c:868 pack-bitmap.c:874 builtin/pack-objects.c:2411
+#: pack-bitmap.c:353
+msgid "multi-pack bitmap is missing required reverse index"
+msgstr ""
+
+#: pack-bitmap.c:433
+msgid "load_reverse_index: could not open pack"
+msgstr ""
+
+#: pack-bitmap.c:1072 pack-bitmap.c:1078 builtin/pack-objects.c:2432
 #, c-format
 msgid "unable to get size of %s"
 msgstr "incapaz obter tamanho de %s"
 
-#: pack-bitmap.c:1571 builtin/rev-list.c:92
+#: pack-bitmap.c:1937
+#, c-format
+msgid "could not find %s in pack %s at offset %<PRIuMAX>"
+msgstr "incapaz encontrar %s em pacote %s no deslocamento %<PRIuMAX>"
+
+#: pack-bitmap.c:1973 builtin/rev-list.c:91
 #, c-format
 msgid "unable to get disk usage of %s"
 msgstr "incapaz obter utilização em disco de %s"
@@ -5926,179 +6316,208 @@ msgstr ""
 msgid "reverse-index file %s has unsupported hash id %<PRIu32>"
 msgstr ""
 
-#: pack-write.c:250
+#: pack-write.c:251
 msgid "cannot both write and verify reverse index"
 msgstr "incapaz escrever e também verificar cenário reverso"
 
-#: pack-write.c:271
+#: pack-write.c:270
 #, c-format
 msgid "could not stat: %s"
 msgstr "incapaz stat: %s"
 
-#: pack-write.c:283
+#: pack-write.c:282
 #, c-format
 msgid "failed to make %s readable"
 msgstr "falhou fazer %s legível"
 
-#: pack-write.c:522
+#: pack-write.c:521
 #, c-format
 msgid "could not write '%s' promisor file"
 msgstr "incapaz escrever ficheiro promissor '%s'"
 
-#: packfile.c:625
+#: packfile.c:627
 msgid "offset before end of packfile (broken .idx?)"
 msgstr "offset antes do fim do ficheiro de pacote (.idx danificado?)"
 
-#: packfile.c:655
+#: packfile.c:657
 #, c-format
 msgid "packfile %s cannot be mapped%s"
 msgstr "ficheiro-pacote %s incapaz ser mapeado%s"
 
-#: packfile.c:1934
+#: packfile.c:1924
 #, c-format
 msgid "offset before start of pack index for %s (corrupt index?)"
 msgstr "offset antes do início do índice do pacote %s (índice corrompido?)"
 
-#: packfile.c:1938
+#: packfile.c:1928
 #, c-format
 msgid "offset beyond end of pack index for %s (truncated index?)"
 msgstr "offset depois do fim do índice do pacote %s (índice truncado?)"
 
-#: parse-options-cb.c:20 parse-options-cb.c:24
+#: parse-options-cb.c:21 parse-options-cb.c:25 builtin/commit-graph.c:175
 #, c-format
 msgid "option `%s' expects a numerical value"
 msgstr ""
 
-#: parse-options-cb.c:41
+#: parse-options-cb.c:42
 #, c-format
 msgid "malformed expiration date '%s'"
 msgstr "data de prazo de validade malformada '%s'"
 
-#: parse-options-cb.c:54
+#: parse-options-cb.c:55
 #, c-format
 msgid "option `%s' expects \"always\", \"auto\", or \"never\""
 msgstr ""
 
-#: parse-options-cb.c:132 parse-options-cb.c:149
+#: parse-options-cb.c:133 parse-options-cb.c:150
 #, c-format
 msgid "malformed object name '%s'"
 msgstr "nome do objeto malformado '%s'"
 
-#: parse-options.c:38
+#: parse-options-cb.c:307
+#, c-format
+msgid "option `%s' expects \"%s\" or \"%s\""
+msgstr ""
+
+#: parse-options.c:58
 #, c-format
 msgid "%s requires a value"
 msgstr "%s exige um valor"
 
-#: parse-options.c:73
+#: parse-options.c:93
 #, c-format
 msgid "%s is incompatible with %s"
 msgstr "%s é incompatível com %s"
 
-#: parse-options.c:78
+#: parse-options.c:98
 #, c-format
 msgid "%s : incompatible with something else"
 msgstr ""
 
-#: parse-options.c:92 parse-options.c:96 parse-options.c:317
+#: parse-options.c:112 parse-options.c:116
 #, c-format
 msgid "%s takes no value"
 msgstr "%s leva valor nenhum"
 
-#: parse-options.c:94
+#: parse-options.c:114
 #, c-format
 msgid "%s isn't available"
 msgstr "%s está indisponível"
 
-#: parse-options.c:217
+#: parse-options.c:237
 #, c-format
 msgid "%s expects a non-negative integer value with an optional k/m/g suffix"
 msgstr ""
 
-#: parse-options.c:386
+#: parse-options.c:393
 #, c-format
 msgid "ambiguous option: %s (could be --%s%s or --%s%s)"
 msgstr ""
 
-#: parse-options.c:420 parse-options.c:428
+#: parse-options.c:428 parse-options.c:436
 #, c-format
 msgid "did you mean `--%s` (with two dashes)?"
 msgstr ""
 
-#: parse-options.c:668 parse-options.c:988
+#: parse-options.c:678 parse-options.c:1054
 #, c-format
 msgid "alias of --%s"
 msgstr ""
 
-#: parse-options.c:879
+#: parse-options.c:892
 #, c-format
 msgid "unknown option `%s'"
 msgstr ""
 
-#: parse-options.c:881
+#: parse-options.c:894
 #, c-format
 msgid "unknown switch `%c'"
 msgstr ""
 
-#: parse-options.c:883
+#: parse-options.c:896
 #, c-format
 msgid "unknown non-ascii option in string: `%s'"
 msgstr "opção não-ascii desconhecida em string: `%s'"
 
-#: parse-options.c:907
+#: parse-options.c:920
 msgid "..."
 msgstr "..."
 
-#: parse-options.c:926
+#: parse-options.c:934
 #, c-format
 msgid "usage: %s"
-msgstr "utilização: %s"
+msgstr "uso: %s"
 
 #. TRANSLATORS: the colon here should align with the
 #. one in "usage: %s" translation.
 #.
-#: parse-options.c:932
+#: parse-options.c:949
 #, c-format
 msgid "   or: %s"
 msgstr "        ou: %s"
 
-#: parse-options.c:935
+#. TRANSLATORS: You should only need to translate this format
+#. string if your language is a RTL language (e.g. Arabic,
+#. Hebrew etc.), not if it's a LTR language (e.g. German,
+#. Russian, Chinese etc.).
+#. *
+#. When a translated usage string has an embedded "\n" it's
+#. because options have wrapped to the next line. The line
+#. after the "\n" will then be padded to align with the
+#. command name, such as N_("git cmd [opt]\n<8
+#. spaces>[opt2]"), where the 8 spaces are the same length as
+#. "git cmd ".
+#. *
+#. This format string prints out that already-translated
+#. line. The "%*s" is whitespace padding to account for the
+#. padding at the start of the line that we add in this
+#. function. The "%s" is a line in the (hopefully already
+#. translated) N_() usage string, which contained embedded
+#. newlines before we split it up.
+#.
+#: parse-options.c:970
+#, c-format
+msgid "%*s%s"
+msgstr ""
+
+#: parse-options.c:993
 #, c-format
 msgid "    %s"
 msgstr "         %s"
 
-#: parse-options.c:974
+#: parse-options.c:1040
 msgid "-NUM"
 msgstr "-NUM"
 
-#: path.c:915
+#: path.c:922
 #, c-format
 msgid "Could not make %s writable by group"
 msgstr "Incapaz de fazer %s escrevível ao grupo"
 
-#: pathspec.c:151
+#: pathspec.c:150
 msgid "Escape character '\\' not allowed as last character in attr value"
 msgstr "Carácter de escape '\\' é proíbido como último carácter no valor attr"
 
-#: pathspec.c:169
+#: pathspec.c:168
 msgid "Only one 'attr:' specification is allowed."
 msgstr "Só se pode especificar um 'attr:'."
 
-#: pathspec.c:172
+#: pathspec.c:171
 msgid "attr spec must not be empty"
 msgstr "attr spec tem de ter algum conteúdo"
 
-#: pathspec.c:215
+#: pathspec.c:214
 #, c-format
 msgid "invalid attribute name %s"
 msgstr "nome de atributo inválido %s"
 
-#: pathspec.c:280
+#: pathspec.c:279
 msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
 msgstr ""
 "as definições globais 'glob' e 'noglob' de especificador de caminho "
 "(pathspec) são incompatíveis"
 
-#: pathspec.c:287
+#: pathspec.c:286
 msgid ""
 "global 'literal' pathspec setting is incompatible with all other global "
 "pathspec settings"
@@ -6106,51 +6525,51 @@ msgstr ""
 "a definição global de especificador de caminho 'literal' é incompatível com "
 "todas as outras definições globais de especificador de caminho (pathspec)"
 
-#: pathspec.c:327
+#: pathspec.c:326
 msgid "invalid parameter for pathspec magic 'prefix'"
 msgstr "parâmetro inválido para magia de espetro-caminho 'prefix'"
 
-#: pathspec.c:348
+#: pathspec.c:347
 #, c-format
 msgid "Invalid pathspec magic '%.*s' in '%s'"
 msgstr "Mágica do especificador de caminho '%.*s' inválida em '%s'"
 
-#: pathspec.c:353
+#: pathspec.c:352
 #, c-format
 msgid "Missing ')' at the end of pathspec magic in '%s'"
 msgstr "Falta um ')' no final da mágica do especificador de caminho em '%s'"
 
-#: pathspec.c:391
+#: pathspec.c:390
 #, c-format
 msgid "Unimplemented pathspec magic '%c' in '%s'"
 msgstr "Por implementar, magic pathspec '%c' em '%s'"
 
-#: pathspec.c:450
+#: pathspec.c:449
 #, c-format
 msgid "%s: 'literal' and 'glob' are incompatible"
 msgstr "%s: 'literal' e 'glob' são incompatíveis"
 
-#: pathspec.c:466
+#: pathspec.c:465
 #, c-format
 msgid "%s: '%s' is outside repository at '%s'"
-msgstr "%s: '%s' está fora do repositório em '%s'"
+msgstr "%s: '%s' está fora do repositório de '%s'"
 
-#: pathspec.c:542
+#: pathspec.c:541
 #, c-format
 msgid "'%s' (mnemonic: '%c')"
 msgstr "'%s' (mnemónica: '%c')"
 
-#: pathspec.c:552
+#: pathspec.c:551
 #, c-format
 msgid "%s: pathspec magic not supported by this command: %s"
 msgstr "%s: magic pathspec insustentado por este comando: %s"
 
-#: pathspec.c:619
+#: pathspec.c:618
 #, c-format
 msgid "pathspec '%s' is beyond a symbolic link"
 msgstr "o especificador de caminho '%s' é indicado por uma ligação simbólica"
 
-#: pathspec.c:664
+#: pathspec.c:663
 #, c-format
 msgid "line is badly quoted: %s"
 msgstr ""
@@ -6171,7 +6590,7 @@ msgstr "incapaz escrever pacote fim de resposta"
 msgid "flush packet write failed"
 msgstr "escrita de pacote flush falhou"
 
-#: pkt-line.c:153 pkt-line.c:265
+#: pkt-line.c:153
 msgid "protocol error: impossibly long line"
 msgstr ""
 
@@ -6179,7 +6598,7 @@ msgstr ""
 msgid "packet write with format failed"
 msgstr "escrita de pacote com formato falhou"
 
-#: pkt-line.c:204
+#: pkt-line.c:204 pkt-line.c:252
 msgid "packet write failed - data exceeds max packet size"
 msgstr ""
 
@@ -6188,53 +6607,54 @@ msgstr ""
 msgid "packet write failed: %s"
 msgstr "escrita de pacote falhou: %s"
 
-#: pkt-line.c:328 pkt-line.c:329
+#: pkt-line.c:349 pkt-line.c:350
 msgid "read error"
 msgstr "erro de leitura"
 
-#: pkt-line.c:339 pkt-line.c:340
+#: pkt-line.c:360 pkt-line.c:361
 msgid "the remote end hung up unexpectedly"
 msgstr "o lado remoto desligou inesperadamente"
 
-#: pkt-line.c:369 pkt-line.c:371
+#: pkt-line.c:417 pkt-line.c:419
 #, c-format
 msgid "protocol error: bad line length character: %.4s"
 msgstr ""
 
-#: pkt-line.c:386 pkt-line.c:388 pkt-line.c:394 pkt-line.c:396
+#: pkt-line.c:434 pkt-line.c:436 pkt-line.c:442 pkt-line.c:444
 #, c-format
 msgid "protocol error: bad line length %d"
 msgstr ""
 
-#: pkt-line.c:413 sideband.c:165
+#: pkt-line.c:472 sideband.c:165
 #, c-format
 msgid "remote error: %s"
 msgstr "erro remoto: %s"
 
 #: preload-index.c:125
 msgid "Refreshing index"
-msgstr "Refrescando index"
+msgstr "Refrescando cenário"
 
 #: preload-index.c:144
 #, c-format
 msgid "unable to create threaded lstat: %s"
 msgstr "incapaz criar thread de lstat: %s"
 
-#: pretty.c:988
+#: pretty.c:1051
 msgid "unable to parse --pretty format"
 msgstr "incapaz processar formato de --pretty"
 
 #: promisor-remote.c:31
 msgid "promisor-remote: unable to fork off fetch subprocess"
-msgstr ""
+msgstr "promisor-remote: incapaz de forquear subprocesso buscar"
 
 #: promisor-remote.c:38 promisor-remote.c:40
 msgid "promisor-remote: could not write to fetch subprocess"
-msgstr ""
+msgstr "promisor-remote: incapaz de escrever para subprocesso buscar"
 
 #: promisor-remote.c:44
 msgid "promisor-remote: could not close stdin to fetch subprocess"
 msgstr ""
+"promisor-remote: incapaz de fechar entrada padrão para subprocesso buscar"
 
 #: promisor-remote.c:54
 #, c-format
@@ -6249,245 +6669,245 @@ msgstr ""
 msgid "Removing duplicate objects"
 msgstr "A remover objetos duplicados"
 
-#: range-diff.c:78
+#: range-diff.c:68
 msgid "could not start `log`"
 msgstr "incapaz começar `log`"
 
-#: range-diff.c:80
+#: range-diff.c:70
 msgid "could not read `log` output"
 msgstr "incapaz ler output de `log`"
 
-#: range-diff.c:101 sequencer.c:5550
+#: range-diff.c:98 sequencer.c:5575
 #, c-format
 msgid "could not parse commit '%s'"
-msgstr "incapaz analisar commit '%s'"
+msgstr "incapaz processar memória '%s'"
 
-#: range-diff.c:115
+#: range-diff.c:109
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
 "'%s'"
 msgstr ""
 
-#: range-diff.c:140
+#: range-diff.c:132
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "incapaz processar cabeçalho git '%.*s'"
 
-#: range-diff.c:307
+#: range-diff.c:300
 msgid "failed to generate diff"
 msgstr ""
 
-#: range-diff.c:559
-msgid "--left-only and --right-only are mutually exclusive"
-msgstr ""
-
-#: range-diff.c:562 range-diff.c:564
+#: range-diff.c:558 range-diff.c:560
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "incapaz processar registo para '%s'"
 
-#: read-cache.c:710
+#: read-cache.c:737
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
-msgstr "Adicionarei nenhuma alias de ficheiro '%s' ('%s' já existe em cenário)"
+msgstr "adicionarei nenhuma alias de ficheiro '%s' ('%s' já existe em cenário)"
 
-#: read-cache.c:726
+#: read-cache.c:753
 msgid "cannot create an empty blob in the object database"
 msgstr ""
 
-#: read-cache.c:748
+#: read-cache.c:775
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr ""
 
-#: read-cache.c:753
+#: read-cache.c:780 builtin/submodule--helper.c:3359
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr "'%s' tem memória nenhuma em observação"
 
-#: read-cache.c:805
+#: read-cache.c:832
 #, c-format
 msgid "unable to index file '%s'"
-msgstr "incapaz indexar ficheiro '%s'"
+msgstr "incapaz encenar ficheiro '%s'"
 
-#: read-cache.c:824
+#: read-cache.c:851
 #, c-format
 msgid "unable to add '%s' to index"
-msgstr "incapaz adicionar %s a index"
+msgstr "incapaz adicionar '%s' a cenário"
 
-#: read-cache.c:835
+#: read-cache.c:862
 #, c-format
 msgid "unable to stat '%s'"
-msgstr "incapaz obter estatutário de '%s'"
+msgstr "incapaz de stat '%s'"
 
-#: read-cache.c:1358
+#: read-cache.c:1404
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
-msgstr "'%s' aparece ambo como ficheiro e como pasta"
+msgstr "'%s' aparece quer como ficheiro quer como pasta"
 
-#: read-cache.c:1573
+#: read-cache.c:1619
 msgid "Refresh index"
-msgstr "Refresca index"
+msgstr "Refresca cenário"
 
-#: read-cache.c:1705
+#: read-cache.c:1751
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
 "Using version %i"
 msgstr ""
 "index.version definido, mas com valor inválido.\n"
-"A usar a versão %i"
+"Usando versão %i"
 
-#: read-cache.c:1715
+#: read-cache.c:1761
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
 "Using version %i"
 msgstr ""
 "GIT_INDEX_VERSION definido, mas com valor inválido.\n"
-"A usar a versão %i"
+"Usando versão %i"
 
-#: read-cache.c:1771
+#: read-cache.c:1817
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr ""
 
-#: read-cache.c:1774
+#: read-cache.c:1820
 #, c-format
 msgid "bad index version %d"
 msgstr "versão de cenário %d inválida"
 
-#: read-cache.c:1783
+#: read-cache.c:1829
 msgid "bad index file sha1 signature"
 msgstr ""
 
-#: read-cache.c:1817
+#: read-cache.c:1863
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr ""
 
-#: read-cache.c:1819
+#: read-cache.c:1865
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "ignorando extensão %.4s"
 
-#: read-cache.c:1856
+#: read-cache.c:1902
 #, c-format
 msgid "unknown index entry format 0x%08x"
-msgstr "formato de entrada de cenário desconhecido 0x%08x"
+msgstr "formato de entrada do cenário 0x%08x desconhecido"
 
-#: read-cache.c:1872
+#: read-cache.c:1918
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr ""
 
-#: read-cache.c:1929
+#: read-cache.c:1975
 msgid "unordered stage entries in index"
 msgstr ""
 
-#: read-cache.c:1932
+#: read-cache.c:1978
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
-msgstr "multíplas entradas de estágio para ficheiro juntado '%s'"
+msgstr "múltiplas entradas de cenário para ficheiro juntado '%s'"
 
-#: read-cache.c:1935
+#: read-cache.c:1981
 #, c-format
 msgid "unordered stage entries for '%s'"
-msgstr "entradas de estágio desordenadas para '%s'"
-
-#: read-cache.c:2041 read-cache.c:2339 rerere.c:549 rerere.c:583 rerere.c:1095
-#: submodule.c:1622 builtin/add.c:575 builtin/check-ignore.c:183
-#: builtin/checkout.c:519 builtin/checkout.c:706 builtin/clean.c:987
-#: builtin/commit.c:377 builtin/diff-tree.c:122 builtin/grep.c:505
-#: builtin/mv.c:146 builtin/reset.c:247 builtin/rm.c:291
-#: builtin/submodule--helper.c:333
+msgstr "entradas de cenário desordenadas para '%s'"
+
+#: read-cache.c:2096 read-cache.c:2402 rerere.c:549 rerere.c:583 rerere.c:1096
+#: submodule.c:1831 builtin/add.c:586 builtin/check-ignore.c:183
+#: builtin/checkout.c:532 builtin/checkout.c:724 builtin/clean.c:1016
+#: builtin/commit.c:379 builtin/diff-tree.c:122 builtin/grep.c:521
+#: builtin/mv.c:148 builtin/reset.c:506 builtin/rm.c:293
+#: builtin/submodule--helper.c:335 builtin/submodule--helper.c:3319
 msgid "index file corrupt"
-msgstr ""
+msgstr "ficheiro de cenário rompido"
 
-#: read-cache.c:2185
+#: read-cache.c:2240
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
-msgstr "incapaz criar thread load_cache_entries: %s"
+msgstr "incapaz criar fio load_cache_entries: %s"
 
-#: read-cache.c:2198
+#: read-cache.c:2253
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
-msgstr "incapaz juntar a thread load_cache_entries: %s"
+msgstr "incapaz juntar a fio load_cache_entries: %s"
 
-#: read-cache.c:2231
+#: read-cache.c:2286
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: abertura de ficheiro de cenário falhou"
 
-#: read-cache.c:2235
+#: read-cache.c:2290
 #, c-format
 msgid "%s: cannot stat the open index"
-msgstr "%s: incapaz obter estatutário de index aberto"
+msgstr "%s: incapaz de stat o cenário aberto"
 
-#: read-cache.c:2239
+#: read-cache.c:2294
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr ""
 
-#: read-cache.c:2243
+#: read-cache.c:2298
 #, c-format
 msgid "%s: unable to map index file%s"
-msgstr "%s: incapaz mapear ficheiro index%s"
+msgstr "%s: incapaz mapear ficheiro de cenário%s"
 
-#: read-cache.c:2286
+#: read-cache.c:2341
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
-msgstr "incapaz criar thread load_index_extensions: %s"
+msgstr "incapaz criar fio load_index_extensions: %s"
 
-#: read-cache.c:2313
+#: read-cache.c:2368
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
-msgstr "incapaz juntar a thread load_index_extensions: %s"
+msgstr "incapaz juntar a fio load_index_extensions: %s"
 
-#: read-cache.c:2351
+#: read-cache.c:2414
 #, c-format
 msgid "could not freshen shared index '%s'"
-msgstr "incapaz refrescar index partilhado '%s'"
+msgstr "incapaz refrescar cenário partilhado '%s'"
 
-#: read-cache.c:2398
+#: read-cache.c:2473
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr ""
 
-#: read-cache.c:3032 strbuf.c:1173 wrapper.c:633 builtin/merge.c:1146
+#: read-cache.c:3032
+msgid "cannot write split index for a sparse index"
+msgstr "incapaz escrever cenário dividido de um cenário disperso"
+
+#: read-cache.c:3114 strbuf.c:1192 wrapper.c:717 builtin/merge.c:1156
 #, c-format
 msgid "could not close '%s'"
 msgstr "incapaz fechar '%s'"
 
-#: read-cache.c:3075
+#: read-cache.c:3157
 msgid "failed to convert to a sparse-index"
 msgstr ""
 
-#: read-cache.c:3146 sequencer.c:2684 sequencer.c:4440
+#: read-cache.c:3228
 #, c-format
 msgid "could not stat '%s'"
-msgstr "incapaz obter estatutário '%s'"
+msgstr "incapaz de stat '%s'"
 
-#: read-cache.c:3159
+#: read-cache.c:3241
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "incapaz abrir pasta git: %s"
 
-#: read-cache.c:3171
+#: read-cache.c:3253
 #, c-format
 msgid "unable to unlink: %s"
-msgstr "incapaz deslinkar: %s"
+msgstr "incapaz de unlink: %s"
 
-#: read-cache.c:3200
+#: read-cache.c:3282
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "incapaz arranjar bits de permissão em '%s'"
 
-#: read-cache.c:3349
+#: read-cache.c:3439
 #, c-format
 msgid "%s: cannot drop to stage #0"
-msgstr "%s: incapaz baixar para estágio #0"
+msgstr "%s: incapaz cair para cenário #0"
 
 #: rebase-interactive.c:11
 msgid ""
@@ -6536,18 +6956,19 @@ msgstr ""
 "r, reword <memória> = usar memória, mas editar a mensagem de memória\n"
 "e, edit <memória> = usar memória, mas parar para emendar\n"
 "s, squash <memória> = usar memória, mas fundir com a memória anterior\n"
-"f, fixup [-C | -c] <memória> = como \"squash\", mas mantém apenas the\n"
-"                   mensagem anterior de registo da memória, a menos que\n"
-"                   -C seja usada, em que neste caso mantém apenas a mensagem\n"
-"                   desta memória; -c é o mesmo que -C mas abre o editor\n"
+"f, fixup [-C | -c] <memória> = como \"squash\", mas mantém apenas a\n"
+"                   mensagem de registo da memória anterior, a menos que\n"
+"                   -C seja usada, e neste caso mantém apenas esta mensagem\n"
+"                   de memória; -c é o mesmo que -C mas abre o editor\n"
 "x, exec <comando> = executar o comando (o resto da linha) usando a shell\n"
-"b, break = para aqui (continuar rebase mais tarde com 'git rebase --continue')"
+"b, break = parar aqui (continuar rebase mais tarde com 'git rebase --"
+"continue')\n"
 "d, drop <memória> = remover memória\n"
-"l, label <etiqueta> = etiquetar HEAD atual com um nome\n"
-"t, reset <etiqueta> = restabelecer HEAD a uma etiqueta\n"
-"n, merge [-C <memória> | -c <memória>] <etiqueta> [# <oneline>]\n"
+"l, label <rótulo> = rotular HEAD atual com um nome\n"
+"t, reset <rótulo> = restabelecer HEAD a um rótulo\n"
+"n, merge [-C <memória> | -c <memória>] <rótulo> [# <oneline>]\n"
 ".       criar uma memória de junção usando a mensagem de memória\n"
-".       original (ou oneline, se nenhuma memória de junção foi\n"
+".       original (ou oneline, se nenhuma memória de junção for\n"
 ".       especificada); usa -c <memória> para refrasear a mensagem\n"
 ".       de memória\n"
 "\n"
@@ -6560,15 +6981,15 @@ msgid_plural "Rebase %s onto %s (%d commands)"
 msgstr[0] "Rebasear %s sobre %s (%d comando)"
 msgstr[1] "Rebasear %s sobre %s (%d comandos)"
 
-#: rebase-interactive.c:75 git-rebase--preserve-merges.sh:218
+#: rebase-interactive.c:75
 msgid ""
 "\n"
 "Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
 msgstr ""
 "\n"
-"Remove linha nenhuma. Usa explicitamente 'drop' para remover um commit.\n"
+"Remove linha nenhuma. Usa explicitamente 'drop' para remover uma memória.\n"
 
-#: rebase-interactive.c:78 git-rebase--preserve-merges.sh:222
+#: rebase-interactive.c:78
 msgid ""
 "\n"
 "If you remove a line here THAT COMMIT WILL BE LOST.\n"
@@ -6576,7 +6997,7 @@ msgstr ""
 "\n"
 "Se remover uma linha daqui AQUELE COMMIT SERÁ PERDIDO.\n"
 
-#: rebase-interactive.c:84 git-rebase--preserve-merges.sh:861
+#: rebase-interactive.c:84
 msgid ""
 "\n"
 "You are editing the todo file of an ongoing interactive rebase.\n"
@@ -6590,7 +7011,7 @@ msgstr ""
 "    git rebase --continue\n"
 "\n"
 
-#: rebase-interactive.c:89 git-rebase--preserve-merges.sh:938
+#: rebase-interactive.c:89
 msgid ""
 "\n"
 "However, if you remove everything, the rebase will be aborted.\n"
@@ -6600,14 +7021,14 @@ msgstr ""
 "No entanto, se remover tudo, o rebase será abortado.\n"
 "\n"
 
-#: rebase-interactive.c:113 rerere.c:469 rerere.c:676 sequencer.c:3836
-#: sequencer.c:3862 sequencer.c:5656 builtin/fsck.c:328 builtin/rebase.c:271
+#: rebase-interactive.c:113 rerere.c:469 rerere.c:677 sequencer.c:3879
+#: sequencer.c:3905 sequencer.c:5681 builtin/fsck.c:328 builtin/gc.c:1791
+#: builtin/rebase.c:191
 #, c-format
 msgid "could not write '%s'"
 msgstr "incapaz escrever '%s'"
 
-#: rebase-interactive.c:119 builtin/rebase.c:203 builtin/rebase.c:229
-#: builtin/rebase.c:253
+#: rebase-interactive.c:119
 #, c-format
 msgid "could not write '%s'."
 msgstr "incapaz escrever '%s'."
@@ -6618,8 +7039,8 @@ msgid ""
 "Warning: some commits may have been dropped accidentally.\n"
 "Dropped commits (newer to older):\n"
 msgstr ""
-"Aviso: alguns commits podem ter sido descartados acidentalmente.\n"
-"Commits descartados (mais novo para o mais velho):\n"
+"Aviso: algumas memórias podem ter sido descartadas acidentalmente.\n"
+"Memórias descartadas (de nova para mais velha):\n"
 
 #: rebase-interactive.c:203
 #, c-format
@@ -6631,21 +7052,19 @@ msgid ""
 "The possible behaviours are: ignore, warn, error.\n"
 "\n"
 msgstr ""
-"Para evitar esta mensagem, use \"drop\" para remover um commit "
+"Para evitar esta mensagem, usa \"drop\" para remover uma memória "
 "explicitamente.\n"
 "\n"
-"Use 'git config rebase.missingCommitsCheck' para mudar o nível de avisos.\n"
-"O comportamentos possíveis são: ignore, warn, error.\n"
+"Usa 'git config rebase.missingCommitsCheck' para mudar o nível de avisos.\n"
+"Comportamentos possíveis são: ignore, warn, error.\n"
 "\n"
 
-#: rebase-interactive.c:236 rebase-interactive.c:241 sequencer.c:2597
-#: builtin/rebase.c:189 builtin/rebase.c:214 builtin/rebase.c:240
-#: builtin/rebase.c:265
+#: rebase.c:29
 #, c-format
-msgid "could not read '%s'."
-msgstr "incapaz ler '%s'."
+msgid "%s: 'preserve' superseded by 'merges'"
+msgstr ""
 
-#: ref-filter.c:42 wt-status.c:2036
+#: ref-filter.c:42 wt-status.c:2057
 msgid "gone"
 msgstr "desapareceu"
 
@@ -6664,257 +7083,238 @@ msgstr "atrás %d"
 msgid "ahead %d, behind %d"
 msgstr "à frente %d, atrás %d"
 
-#: ref-filter.c:230
+#: ref-filter.c:235
 #, c-format
 msgid "expected format: %%(color:<color>)"
 msgstr "formato esperado: %%(color:<cor>)"
 
-#: ref-filter.c:232
+#: ref-filter.c:237
 #, c-format
 msgid "unrecognized color: %%(color:%s)"
 msgstr "cor desconhecida: %%(color:%s)"
 
-#: ref-filter.c:254
+#: ref-filter.c:259
 #, c-format
 msgid "Integer value expected refname:lstrip=%s"
 msgstr "valor inteiro esperado refname:lstrip=%s"
 
-#: ref-filter.c:258
+#: ref-filter.c:263
 #, c-format
 msgid "Integer value expected refname:rstrip=%s"
 msgstr "Valor inteiro esperado refname:rstrip=%s"
 
-#: ref-filter.c:260
+#: ref-filter.c:265 ref-filter.c:344 ref-filter.c:377 ref-filter.c:431
+#: ref-filter.c:443 ref-filter.c:462 ref-filter.c:534 ref-filter.c:560
 #, c-format
 msgid "unrecognized %%(%s) argument: %s"
 msgstr "argumento %%(%s) desconhecido: %s"
 
-#: ref-filter.c:315
+#: ref-filter.c:320
 #, c-format
 msgid "%%(objecttype) does not take arguments"
 msgstr "%%(objecttype) leva argumentos nenhuns"
 
-#: ref-filter.c:339
-#, c-format
-msgid "unrecognized %%(objectsize) argument: %s"
-msgstr "argumento %%(objectsize) desconhecido: %s"
-
-#: ref-filter.c:347
+#: ref-filter.c:352
 #, c-format
 msgid "%%(deltabase) does not take arguments"
 msgstr "%%(deltabase) leva argumentos nenhuns"
 
-#: ref-filter.c:359
+#: ref-filter.c:364
 #, c-format
 msgid "%%(body) does not take arguments"
 msgstr "%%(body) leva argumentos nenhuns"
 
-#: ref-filter.c:372
-#, c-format
-msgid "unrecognized %%(subject) argument: %s"
-msgstr "argumento %%(subject) desconhecido: %s"
-
-#: ref-filter.c:391
+#: ref-filter.c:396
 #, c-format
 msgid "expected %%(trailers:key=<value>)"
 msgstr ""
 
-#: ref-filter.c:393
+#: ref-filter.c:398
 #, c-format
 msgid "unknown %%(trailers) argument: %s"
 msgstr "argumento %%(trailers) desconhecido: %s"
 
-#: ref-filter.c:424
+#: ref-filter.c:429
 #, c-format
 msgid "positive value expected contents:lines=%s"
 msgstr "valor positivo esperado contents:lines=%s"
 
-#: ref-filter.c:426
-#, c-format
-msgid "unrecognized %%(contents) argument: %s"
-msgstr "argumento %%(contents) desconhecido: %s"
-
-#: ref-filter.c:441
+#: ref-filter.c:458
 #, c-format
 msgid "positive value expected '%s' in %%(%s)"
 msgstr "valor positivo esperado '%s' em %%(%s)"
 
-#: ref-filter.c:445
-#, c-format
-msgid "unrecognized argument '%s' in %%(%s)"
-msgstr "argumento '%s' desconhecido em %%(%s)"
-
-#: ref-filter.c:459
+#: ref-filter.c:476
 #, c-format
 msgid "unrecognized email option: %s"
 msgstr "opção de email desconhecida: %s"
 
-#: ref-filter.c:489
+#: ref-filter.c:506
 #, c-format
 msgid "expected format: %%(align:<width>,<position>)"
 msgstr "formato esperado: %%(align:<largura>,<posição>)"
 
-#: ref-filter.c:501
+#: ref-filter.c:518
 #, c-format
 msgid "unrecognized position:%s"
 msgstr "posição desconhecida: %s"
 
-#: ref-filter.c:508
+#: ref-filter.c:525
 #, c-format
 msgid "unrecognized width:%s"
 msgstr "largura desconhecida: %s"
 
-#: ref-filter.c:517
-#, c-format
-msgid "unrecognized %%(align) argument: %s"
-msgstr "argumento %%(align) desconhecido: %s"
-
-#: ref-filter.c:525
+#: ref-filter.c:542
 #, c-format
 msgid "positive width expected with the %%(align) atom"
 msgstr "largura positiva esperada com o átomo %%(align)"
 
-#: ref-filter.c:543
+#: ref-filter.c:568
 #, c-format
-msgid "unrecognized %%(if) argument: %s"
-msgstr "argumento %%(if) desconhecido: %s"
+msgid "%%(rest) does not take arguments"
+msgstr "%%(rest) leva argumentos nenhuns"
 
-#: ref-filter.c:645
+#: ref-filter.c:680
 #, c-format
 msgid "malformed field name: %.*s"
 msgstr "nome em campo malformado: %.*s"
 
-#: ref-filter.c:672
+#: ref-filter.c:707
 #, c-format
 msgid "unknown field name: %.*s"
 msgstr "nome do campo desconhecido: %.*s"
 
-#: ref-filter.c:676
+#: ref-filter.c:711
 #, c-format
 msgid ""
 "not a git repository, but the field '%.*s' requires access to object data"
 msgstr ""
 
-#: ref-filter.c:801
-#, c-format
-msgid "format: %%(if) atom used without a %%(then) atom"
-msgstr "formato: átomo %%(if) utilizado sem átomo %%(then) correspondente"
-
-#: ref-filter.c:865
+#: ref-filter.c:844 ref-filter.c:910 ref-filter.c:946 ref-filter.c:948
 #, c-format
-msgid "format: %%(then) atom used without an %%(if) atom"
-msgstr "formato: átomo %%(then) utilizado sem átomo %%(if) correspondente"
+msgid "format: %%(%s) atom used without a %%(%s) atom"
+msgstr "formatar: átomo %%(%s) usado sem átomo %%(%s)"
 
-#: ref-filter.c:867
+#: ref-filter.c:912
 #, c-format
 msgid "format: %%(then) atom used more than once"
 msgstr "formato: átomo %%(then) utilizado mais que uma vez"
 
-#: ref-filter.c:869
+#: ref-filter.c:914
 #, c-format
 msgid "format: %%(then) atom used after %%(else)"
 msgstr "formato: átomo %%(then) utilizado depois de %%(else)"
 
-#: ref-filter.c:897
-#, c-format
-msgid "format: %%(else) atom used without an %%(if) atom"
-msgstr "formato: átomo %%(else) utilizado sem átomo %%(if) correspondente"
-
-#: ref-filter.c:899
-#, c-format
-msgid "format: %%(else) atom used without a %%(then) atom"
-msgstr "formato: átomo %%(else) utilizado sem átomo %%(then) correspondente"
-
-#: ref-filter.c:901
+#: ref-filter.c:950
 #, c-format
 msgid "format: %%(else) atom used more than once"
 msgstr "formato: átomo %%(else) utilizado mais que uma vez"
 
-#: ref-filter.c:916
+#: ref-filter.c:965
 #, c-format
 msgid "format: %%(end) atom used without corresponding atom"
 msgstr "formato: átomo %%(end) utilizado sem átomo correspondente"
 
-#: ref-filter.c:973
+#: ref-filter.c:1027
 #, c-format
 msgid "malformed format string %s"
 msgstr "formato de string %s malformado"
 
-#: ref-filter.c:1621
+#: ref-filter.c:1033
+#, c-format
+msgid "this command reject atom %%(%.*s)"
+msgstr ""
+
+#: ref-filter.c:1040
+#, c-format
+msgid "--format=%.*s cannot be used with --python, --shell, --tcl"
+msgstr "--format=%.*s incapaz ser usado com --python, --shell, --tcl"
+
+#: ref-filter.c:1707
 #, c-format
 msgid "(no branch, rebasing %s)"
 msgstr "(ramo nenhum, rebaseando %s)"
 
-#: ref-filter.c:1624
+#: ref-filter.c:1710
 #, c-format
 msgid "(no branch, rebasing detached HEAD %s)"
-msgstr "(ramo nenhum, rebaseando HEAD solta %s)"
+msgstr "(ramo nenhum, rebaseando HEAD desanexada %s)"
 
-#: ref-filter.c:1627
+#: ref-filter.c:1713
 #, c-format
 msgid "(no branch, bisect started on %s)"
 msgstr "(ramo nenhum, bisseção iniciada em %s)"
 
-#: ref-filter.c:1631
+#: ref-filter.c:1717
 #, c-format
 msgid "(HEAD detached at %s)"
-msgstr "(HEAD destacada em %s)"
+msgstr "(HEAD desanexada em %s)"
 
-#: ref-filter.c:1634
+#: ref-filter.c:1720
 #, c-format
 msgid "(HEAD detached from %s)"
-msgstr "(HEAD destacada de %s)"
+msgstr "(HEAD desanexada de %s)"
 
-#: ref-filter.c:1637
+#: ref-filter.c:1723
 msgid "(no branch)"
 msgstr "(ramo nenhum)"
 
-#: ref-filter.c:1669 ref-filter.c:1880
+#: ref-filter.c:1755 ref-filter.c:1973
 #, c-format
 msgid "missing object %s for %s"
 msgstr ""
 
-#: ref-filter.c:1679
+#: ref-filter.c:1765
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "falha ao invocar parse_object_buffer sobre %s de %s"
 
-#: ref-filter.c:2064
+#: ref-filter.c:2156
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "objeto malformado em '%s'"
 
-#: ref-filter.c:2153
+#: ref-filter.c:2246
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "ignorando ref com nome quebrado %s"
 
-#: ref-filter.c:2158 refs.c:676
+#: ref-filter.c:2251 refs.c:672
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "ref quebrada %s está a ser ignorada"
 
-#: ref-filter.c:2502
+#: ref-filter.c:2630
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "formato: falta átomo %%(end)"
 
-#: ref-filter.c:2596
+#: ref-filter.c:2741
 #, c-format
 msgid "malformed object name %s"
 msgstr "nome de objeto malformado %s"
 
-#: ref-filter.c:2601
+#: ref-filter.c:2746
 #, c-format
 msgid "option `%s' must point to a commit"
-msgstr "opção '%s' tem apontar para um commit"
+msgstr "opção `%s' tem de apontar para uma memória"
+
+#: reflog.c:407
+#, c-format
+msgid "not a reflog: %s"
+msgstr "reflog inválido: %s"
 
-#: refs.c:264
+#: reflog.c:410
+#, c-format
+msgid "no reflog for '%s'"
+msgstr "reflog nenhum para '%s'"
+
+#: refs.c:262
 #, c-format
 msgid "%s does not point to a valid object!"
 msgstr "%s aponta para objeto inválido!"
 
-#: refs.c:566
+#: refs.c:561
 #, c-format
 msgid ""
 "Using '%s' as the name for the initial branch. This default branch name\n"
@@ -6929,32 +7329,32 @@ msgid ""
 "\tgit branch -m <name>\n"
 msgstr ""
 
-#: refs.c:588
+#: refs.c:583
 #, c-format
 msgid "could not retrieve `%s`"
 msgstr "incapaz resgatar `%s`"
 
-#: refs.c:598
+#: refs.c:593
 #, c-format
 msgid "invalid branch name: %s = %s"
 msgstr "Nome de ramo inválido: %s = %s"
 
-#: refs.c:674
+#: refs.c:670
 #, c-format
 msgid "ignoring dangling symref %s"
-msgstr "ref-simbólica perdida %s está a ser ignorada"
+msgstr "ignorando ref-simbólica suspensa %s"
 
-#: refs.c:922
+#: refs.c:919
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr ""
 
-#: refs.c:929
+#: refs.c:926
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr ""
 
-#: refs.c:994
+#: refs.c:991
 #, c-format
 msgid "log for %s is empty"
 msgstr ""
@@ -6964,46 +7364,46 @@ msgstr ""
 msgid "refusing to update ref with bad name '%s'"
 msgstr "recusando atualizar ref com nome inválido '%s'"
 
-#: refs.c:1157
+#: refs.c:1164
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr ""
 
-#: refs.c:2051
+#: refs.c:2059
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "atualizações múltiplas para ref '%s' proíbidas"
 
-#: refs.c:2131
+#: refs.c:2145
 msgid "ref updates forbidden inside quarantine environment"
 msgstr ""
 
-#: refs.c:2142
+#: refs.c:2156
 msgid "ref updates aborted by hook"
 msgstr ""
 
-#: refs.c:2242 refs.c:2272
+#: refs.c:2264 refs.c:2294
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "'%s' existe; incapaz criar '%s'"
 
-#: refs.c:2248 refs.c:2283
+#: refs.c:2270 refs.c:2305
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "incapaz processar '%s' e '%s' ao mesmo tempo"
 
-#: refs/files-backend.c:1228
+#: refs/files-backend.c:1295
 #, c-format
 msgid "could not remove reference %s"
 msgstr "incapaz remover referência %s"
 
-#: refs/files-backend.c:1242 refs/packed-backend.c:1542
-#: refs/packed-backend.c:1552
+#: refs/files-backend.c:1310 refs/packed-backend.c:1565
+#: refs/packed-backend.c:1575
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr "incapaz apagar referência %s: %s"
 
-#: refs/files-backend.c:1245 refs/packed-backend.c:1555
+#: refs/files-backend.c:1313 refs/packed-backend.c:1578
 #, c-format
 msgid "could not delete references: %s"
 msgstr "incapaz apagar referências: %s"
@@ -7013,50 +7413,50 @@ msgstr "incapaz apagar referências: %s"
 msgid "invalid refspec '%s'"
 msgstr ""
 
-#: remote.c:351
+#: remote.c:402
 #, c-format
 msgid "config remote shorthand cannot begin with '/': %s"
 msgstr ""
 
-#: remote.c:399
+#: remote.c:450
 msgid "more than one receivepack given, using the first"
 msgstr ""
 
-#: remote.c:407
+#: remote.c:458
 msgid "more than one uploadpack given, using the first"
 msgstr ""
 
-#: remote.c:590
+#: remote.c:698
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr "Incapaz buscar ambos %s e %s para %s"
 
-#: remote.c:594
+#: remote.c:702
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr "%s geralmente segue %s, invés de %s"
 
-#: remote.c:598
+#: remote.c:706
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr "%s segue %s e %s em simultâneo"
 
-#: remote.c:666
+#: remote.c:774
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr ""
 
-#: remote.c:676
+#: remote.c:784
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr ""
 
-#: remote.c:1083
+#: remote.c:1191
 #, c-format
 msgid "src refspec %s does not match any"
-msgstr "src refspec %s corresponde a nenhum"
+msgstr "espetro-ref src %s com nenhuma correspondência"
 
-#: remote.c:1088
+#: remote.c:1196
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr ""
@@ -7065,7 +7465,7 @@ msgstr ""
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1103
+#: remote.c:1211
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -7079,7 +7479,7 @@ msgid ""
 "Neither worked, so we gave up. You must fully qualify the ref."
 msgstr ""
 
-#: remote.c:1123
+#: remote.c:1231
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -7087,7 +7487,7 @@ msgid ""
 "'%s:refs/heads/%s'?"
 msgstr ""
 
-#: remote.c:1128
+#: remote.c:1236
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -7095,7 +7495,7 @@ msgid ""
 "'%s:refs/tags/%s'?"
 msgstr ""
 
-#: remote.c:1133
+#: remote.c:1241
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -7103,7 +7503,7 @@ msgid ""
 "'%s:refs/tags/%s'?"
 msgstr ""
 
-#: remote.c:1138
+#: remote.c:1246
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -7111,131 +7511,127 @@ msgid ""
 "'%s:refs/tags/%s'?"
 msgstr ""
 
-#: remote.c:1174
+#: remote.c:1282
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "%s incapaz ser resolvido para ramo"
 
-#: remote.c:1185
+#: remote.c:1293
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "incapaz apagar '%s': ref remoto é inexistente"
 
-#: remote.c:1197
+#: remote.c:1305
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr ""
 
-#: remote.c:1204
+#: remote.c:1312
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr ""
 
-#: remote.c:1724 remote.c:1825
+#: remote.c:1833 remote.c:1940
 msgid "HEAD does not point to a branch"
 msgstr "HEAD aponta para ramo nenhum"
 
-#: remote.c:1733
+#: remote.c:1842
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "ramo inexistente: '%s'"
 
-#: remote.c:1736
+#: remote.c:1845
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "configurado upstream nenhum para ramo '%s'"
 
-#: remote.c:1742
+#: remote.c:1851
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
-msgstr "incapaz gravar ramo upstream '%s' como ramo remote-tracking"
+msgstr "incapaz gravar ramo upstream '%s' como ramo remoto de monitorização"
 
-#: remote.c:1757
+#: remote.c:1866
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr ""
-"destino de atirar '%s' em remoto '%s' tem ramo de tracking local nenhum"
+"destino de atirar '%s' em remoto '%s' tem nenhum ramo de monitorização local"
 
-#: remote.c:1769
+#: remote.c:1881
 #, c-format
 msgid "branch '%s' has no remote for pushing"
-msgstr "ramo '%s' tem remoto para atirar nenhum"
+msgstr "ramo '%s' tem nenhum remoto para atirar"
 
-#: remote.c:1779
+#: remote.c:1891
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
-msgstr "refspecs de atirar para '%s'incluí '%s' nenhum"
+msgstr "espetro-ref de atirar para '%s' incluí '%s' nenhum"
 
-#: remote.c:1792
+#: remote.c:1904
 msgid "push has no destination (push.default is 'nothing')"
-msgstr "publicação sem destino (push.default é 'nothing')"
+msgstr "atirar sem destino (push.default é 'nothing')"
 
-#: remote.c:1814
+#: remote.c:1926
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "incapaz resolver atiro 'simple' para destino único"
 
-#: remote.c:1943
+#: remote.c:2059
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "incapaz encontrar ref remoto %s"
 
-#: remote.c:1956
+#: remote.c:2072
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr ""
 
-#: remote.c:2119
+#: remote.c:2235
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
-msgstr "A base do seu ramo é '%s', mas o ramo a montante desapareceu.\n"
+msgstr "Teu ramo é baseado em '%s', mas o upstream desapareceu.\n"
 
-#: remote.c:2123
+#: remote.c:2239
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
-msgstr "  (usa \"git branch --unset-upstream\" para corrigir)\n"
+msgstr "  (usa \"git branch --unset-upstream\" para consertar)\n"
 
-#: remote.c:2126
+#: remote.c:2242
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Teu ramo está atualizado com '%s'.\n"
 
-#: remote.c:2130
+#: remote.c:2246
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Teu ramo e '%s' referem-se a memórias diferentes.\n"
 
-#: remote.c:2133
+#: remote.c:2249
 #, c-format
 msgid "  (use \"%s\" for details)\n"
-msgstr ""
+msgstr " (para detalhes usa \"%s\")\n"
 
-#: remote.c:2137
+#: remote.c:2253
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
-msgstr[0] "O seu ramo está à frente de '%s' por %d commit.\n"
-msgstr[1] "O seu ramo está à frente de '%s' por %d commits.\n"
+msgstr[0] "Teu ramo está à frente de '%s' por %d memória.\n"
+msgstr[1] "Teu ramo está à frente de '%s' por %d memórias.\n"
 
-#: remote.c:2143
+#: remote.c:2259
 msgid "  (use \"git push\" to publish your local commits)\n"
-msgstr "  (usa \"git push\" para publicar os commits locais)\n"
+msgstr "  (usa \"git push\" para publicar tuas memórias locais)\n"
 
-#: remote.c:2146
+#: remote.c:2262
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
 "Your branch is behind '%s' by %d commits, and can be fast-forwarded.\n"
-msgstr[0] ""
-"O seu ramo está atrás de '%s' por %d commit, podendo ser atualizado com "
-"avanço rápido.\n"
-msgstr[1] ""
-"O seu ramo está atrás de '%s' por %d commits, podendo ser atualizado com "
-"avanço rápido.\n"
+msgstr[0] "Teu ramo está atrás de '%s' por %d memória, e pode ser avançado.\n"
+msgstr[1] "Teu ramo está atrás de '%s' por %d memórias, e pode ser avançado.\n"
 
-#: remote.c:2154
+#: remote.c:2270
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (usa \"git pull\" para atualizar teu ramo local)\n"
 
-#: remote.c:2157
+#: remote.c:2273
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -7244,20 +7640,20 @@ msgid_plural ""
 "Your branch and '%s' have diverged,\n"
 "and have %d and %d different commits each, respectively.\n"
 msgstr[0] ""
-"O seu ramo e '%s' divergiram,\n"
-"tendo cada um %d e %d commit diferente, respetivamente.\n"
+"Teu ramo e '%s' divergiram,\n"
+"tendo cada um %d e %d memória diferente, respetivamente.\n"
 msgstr[1] ""
-"O seu ramo e '%s' divergiram,\n"
-"tendo cada um %d e %d commits diferentes, respetivamente.\n"
+"Teu ramo e '%s' divergiram,\n"
+"tendo cada um %d e %d memórias diferentes, respetivamente.\n"
 
-#: remote.c:2167
+#: remote.c:2283
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
-msgstr "  (usa \"git pull\" para juntar o ramo remoto no teu ramo)\n"
+msgstr "  (usa \"git pull\" para juntar o ramo remoto no teu)\n"
 
-#: remote.c:2359
+#: remote.c:2475
 #, c-format
 msgid "cannot parse expected object name '%s'"
-msgstr "incapaz analisar nome de objeto esperado '%s'"
+msgstr "incapaz processar nome de objeto esperado '%s'"
 
 #: replace-object.c:21
 #, c-format
@@ -7276,7 +7672,7 @@ msgstr "substituir profundidade demasiado funda para objeto %s"
 
 #: rerere.c:201 rerere.c:210 rerere.c:213
 msgid "corrupt MERGE_RR"
-msgstr ""
+msgstr "MERGE_RR rompido"
 
 #: rerere.c:248 rerere.c:253
 msgid "unable to write rerere record"
@@ -7285,138 +7681,131 @@ msgstr "incapaz escrever registro rerere"
 #: rerere.c:479
 #, c-format
 msgid "there were errors while writing '%s' (%s)"
-msgstr ""
+msgstr "houve erros enquanto escrevia '%s' (%s)"
 
-#: rerere.c:482
+#: rerere.c:482 builtin/gc.c:2263 builtin/gc.c:2298
 #, c-format
 msgid "failed to flush '%s'"
 msgstr ""
 
-#: rerere.c:487 rerere.c:1023
+#: rerere.c:487 rerere.c:1024
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
-msgstr "incapaz analisar pedaços conflituosos em '%s'"
+msgstr "incapaz processar pedaços de conflito em '%s'"
 
-#: rerere.c:668
+#: rerere.c:669
 #, c-format
 msgid "failed utime() on '%s'"
-msgstr ""
+msgstr "falhou utime() em '%s'"
 
-#: rerere.c:678
+#: rerere.c:679
 #, c-format
 msgid "writing '%s' failed"
-msgstr ""
+msgstr "escrita de '%s' falhou"
 
-#: rerere.c:698
+#: rerere.c:699
 #, c-format
 msgid "Staged '%s' using previous resolution."
-msgstr ""
+msgstr "Encenei '%s' usando resolução anterior."
 
-#: rerere.c:737
+#: rerere.c:738
 #, c-format
 msgid "Recorded resolution for '%s'."
-msgstr ""
+msgstr "Guardei resolução para '%s'."
 
-#: rerere.c:772
+#: rerere.c:773
 #, c-format
 msgid "Resolved '%s' using previous resolution."
-msgstr ""
+msgstr "Resolvi '%s' usando resolução anterior."
 
-#: rerere.c:787
+#: rerere.c:788
 #, c-format
 msgid "cannot unlink stray '%s'"
-msgstr "incapaz deslinkar o perdido '%s'"
+msgstr "incapaz unlink o perdido '%s'"
 
-#: rerere.c:791
+#: rerere.c:792
 #, c-format
 msgid "Recorded preimage for '%s'"
-msgstr ""
+msgstr "Guardei pré-imagem para '%s'"
 
-#: rerere.c:865 submodule.c:2076 builtin/log.c:2002
-#: builtin/submodule--helper.c:1805 builtin/submodule--helper.c:1848
+#: rerere.c:866 submodule.c:2290 builtin/log.c:2042
+#: builtin/submodule--helper.c:1786 builtin/submodule--helper.c:1833
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "incapaz criar pasta '%s'"
 
-#: rerere.c:1041
+#: rerere.c:1042
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr "falhou atualizar estado conflituoso em '%s'"
 
-#: rerere.c:1052 rerere.c:1059
+#: rerere.c:1053 rerere.c:1060
 #, c-format
 msgid "no remembered resolution for '%s'"
-msgstr "a faltar a lembrança da solução para '%s'"
+msgstr "a faltar a lembrança da resolução para '%s'"
 
-#: rerere.c:1061
+#: rerere.c:1062
 #, c-format
 msgid "cannot unlink '%s'"
-msgstr "incapaz de deslinkar '%s'"
+msgstr "incapaz de unlink '%s'"
 
-#: rerere.c:1071
+#: rerere.c:1072
 #, c-format
 msgid "Updated preimage for '%s'"
-msgstr ""
+msgstr "Actualizei pré-imagem para '%s'"
 
-#: rerere.c:1080
+#: rerere.c:1081
 #, c-format
 msgid "Forgot resolution for '%s'\n"
-msgstr "Está esquecida resolução para '%s'\n"
+msgstr "Esqueci resolução para '%s'\n"
 
-#: rerere.c:1191
+#: rerere.c:1192
 msgid "unable to open rr-cache directory"
 msgstr "incapaz abrir pasta rr-cache"
 
-#: reset.c:42
+#: reset.c:112
 msgid "could not determine HEAD revision"
 msgstr "incapaz determinar revisão de HEAD"
 
-#: reset.c:69 reset.c:75 sequencer.c:3689
+#: reset.c:141 reset.c:147 sequencer.c:3696
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "falhou encontrar árvore de %s"
 
-#: revision.c:2344
+#: revision.c:2358
 msgid "--unpacked=<packfile> no longer supported"
-msgstr ""
+msgstr "--unpacked=<ficheiro-pacote> insustentado"
 
-#: revision.c:2684
+#: revision.c:2712
 msgid "your current branch appears to be broken"
-msgstr "o ramo atual parece estar danificado"
+msgstr "teu ramo atual parece estar danificado"
 
-#: revision.c:2687
+#: revision.c:2715
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
-msgstr "teu ramo atual '%s' ainda contém commits nenhuns"
+msgstr "teu ramo atual '%s' tem memórias nenhumas, por enquanto"
 
-#: revision.c:2893
-msgid "-L does not yet support diff formats besides -p and -s"
+#: revision.c:2901
+msgid "object filtering requires --objects"
 msgstr ""
 
-#: run-command.c:766
-msgid "open /dev/null failed"
-msgstr "abrir /dev/null falhou"
+#: revision.c:2918
+msgid "-L does not yet support diff formats besides -p and -s"
+msgstr "-L apenas sustenta formatos diff com -p ou -s"
 
-#: run-command.c:1274
+#: run-command.c:1262
 #, c-format
 msgid "cannot create async thread: %s"
-msgstr "incapaz criar thread assíncrona: %s"
-
-#: run-command.c:1344
-#, c-format
-msgid ""
-"The '%s' hook was ignored because it's not set as executable.\n"
-"You can disable this warning with `git config advice.ignoredHook false`."
-msgstr ""
+msgstr "incapaz criar fio assíncrono: %s"
 
 #: send-pack.c:150
 msgid "unexpected flush packet while reading remote unpack status"
-msgstr "flush de pacotes inesperado enquanto lendo unpack status remoto"
+msgstr "pacote flush inesperado enquanto lendo status dê descompactação remoto"
 
 #: send-pack.c:152
 #, c-format
 msgid "unable to parse remote unpack status: %s"
-msgstr "incapaz analisar unpack status remota: %s"
+msgstr "incapaz processar status de descompactação remota: %s"
 
 #: send-pack.c:154
 #, c-format
@@ -7425,193 +7814,222 @@ msgstr "descompactação remota falhou: %s"
 
 #: send-pack.c:378
 msgid "failed to sign the push certificate"
-msgstr "falha ao assinar o certificado de publicação"
+msgstr "falha ao assinar o certificado de atiro"
 
-#: send-pack.c:433
+#: send-pack.c:435
 msgid "send-pack: unable to fork off fetch subprocess"
-msgstr "send-pack: incapaz de fazer fork a subprocesso buscar"
+msgstr "send-pack: incapaz de forquear subprocesso buscar"
 
-#: send-pack.c:455
+#: send-pack.c:457
 msgid "push negotiation failed; proceeding anyway with push"
-msgstr ""
+msgstr "falhou negociação de atiro; mesmo assim continuando com atiro"
 
-#: send-pack.c:526
+#: send-pack.c:528
 msgid "the receiving end does not support this repository's hash algorithm"
-msgstr "o recetor insustenta algoritmo hash deste repositório"
+msgstr "o lado receptor insustenta algoritmo hash deste repositório"
 
-#: send-pack.c:535
+#: send-pack.c:537
 msgid "the receiving end does not support --signed push"
 msgstr "o lado receptor insustenta atiro com --signed"
 
-#: send-pack.c:537
+#: send-pack.c:539
 msgid ""
 "not sending a push certificate since the receiving end does not support --"
 "signed push"
 msgstr ""
-"certificado de atiro por enviar uma vez que o recetor insustenta atirocom --"
-"signed"
+"certificado de atiro por enviar uma vez que o lado receptor insustenta atiro "
+"com --signed"
 
-#: send-pack.c:544
+#: send-pack.c:546
 msgid "the receiving end does not support --atomic push"
 msgstr "o lado receptor insustenta atiro com --atomic"
 
-#: send-pack.c:549
+#: send-pack.c:551
 msgid "the receiving end does not support push options"
-msgstr "o recetor insustenta opções de atiro"
+msgstr "o lado receptor insustenta opções de atiro"
 
-#: sequencer.c:196
+#: sequencer.c:197
 #, c-format
 msgid "invalid commit message cleanup mode '%s'"
-msgstr "mensagem de memória de modo de limpeza inválida '%s'"
+msgstr "mensagem de memória de modo de limpeza '%s' inválida"
 
-#: sequencer.c:324
+#: sequencer.c:325
 #, c-format
 msgid "could not delete '%s'"
 msgstr "incapaz de apagar '%s'"
 
-#: sequencer.c:344 builtin/rebase.c:757 builtin/rebase.c:1592 builtin/rm.c:402
+#: sequencer.c:345 sequencer.c:4724 builtin/rebase.c:564 builtin/rebase.c:1326
+#: builtin/rm.c:409
 #, c-format
 msgid "could not remove '%s'"
 msgstr "incapaz remover '%s'"
 
-#: sequencer.c:354
+#: sequencer.c:355
 msgid "revert"
 msgstr "reverter"
 
-#: sequencer.c:356
+#: sequencer.c:357
 msgid "cherry-pick"
-msgstr "cherry-pick"
+msgstr "apanha"
 
-#: sequencer.c:358
+#: sequencer.c:359
 msgid "rebase"
-msgstr "rebase -i"
+msgstr "rebase"
 
-#: sequencer.c:360
+#: sequencer.c:361
 #, c-format
 msgid "unknown action: %d"
-msgstr "Ação desconhecida: %d"
+msgstr "ação desconhecida: %d"
 
-#: sequencer.c:419
+#: sequencer.c:420
 msgid ""
 "after resolving the conflicts, mark the corrected paths\n"
 "with 'git add <paths>' or 'git rm <paths>'"
 msgstr ""
-"depois de resolver os conflitos, marque os caminhos corrigidos\n"
+"depois de resolver os conflitos, marca os caminhos corrigidos\n"
 "com 'git add <caminhos>' ou 'git rm <caminhos>'"
 
-#: sequencer.c:422
+#: sequencer.c:423
 msgid ""
-"after resolving the conflicts, mark the corrected paths\n"
-"with 'git add <paths>' or 'git rm <paths>'\n"
-"and commit the result with 'git commit'"
+"After resolving the conflicts, mark them with\n"
+"\"git add/rm <pathspec>\", then run\n"
+"\"git cherry-pick --continue\".\n"
+"You can instead skip this commit with \"git cherry-pick --skip\".\n"
+"To abort and get back to the state before \"git cherry-pick\",\n"
+"run \"git cherry-pick --abort\"."
+msgstr ""
+"Depois de resolver os conflitos, marca-os com\n"
+"\"git add/rm <espetro-caminho>\", depois executa\n"
+"\"git cherry-pick --continue\".\n"
+"Podes invés saltar esta memória com \"git cherry-pick --skip\".\n"
+"Para abortar e voltar ao estado anterior a \"git cherry-pick\",\n"
+"executa \"git cherry-pick --abort\"."
+
+#: sequencer.c:430
+msgid ""
+"After resolving the conflicts, mark them with\n"
+"\"git add/rm <pathspec>\", then run\n"
+"\"git revert --continue\".\n"
+"You can instead skip this commit with \"git revert --skip\".\n"
+"To abort and get back to the state before \"git revert\",\n"
+"run \"git revert --abort\"."
 msgstr ""
-"depois de resolver os conflitos, marque os caminhos corrigidos\n"
-"com 'git add <caminhos>' ou 'git rm <caminhos>'\n"
-"e submeta o resultado com 'git commit'"
+"Depois de resolver os conflitos, marca-os com\n"
+"\"git add/rm <espetro-caminho>\", depois executa\n"
+"\"git revert --continue\".\n"
+"Podes invés saltar esta memória com \"git revert --skip\".\n"
+"Para abortar e voltar ao estado anterior a \"git revert\",\n"
+"executa \"git revert --abort\"."
 
-#: sequencer.c:435 sequencer.c:3271
+#: sequencer.c:448 sequencer.c:3288
 #, c-format
 msgid "could not lock '%s'"
-msgstr "incapaz bloquear '%s'"
+msgstr "incapaz trancar '%s'"
 
-#: sequencer.c:437 sequencer.c:3070 sequencer.c:3275 sequencer.c:3289
-#: sequencer.c:3547 sequencer.c:5566 strbuf.c:1170 wrapper.c:631
+#: sequencer.c:450 sequencer.c:3087 sequencer.c:3292 sequencer.c:3306
+#: sequencer.c:3557 sequencer.c:5591 strbuf.c:1189 wrapper.c:715
 #, c-format
 msgid "could not write to '%s'"
 msgstr "incapaz escrever em '%s'"
 
-#: sequencer.c:442
+#: sequencer.c:455
 #, c-format
 msgid "could not write eol to '%s'"
-msgstr "incapaz escrever fim de linha em '%s'"
+msgstr "incapaz escrever eol em '%s'"
 
-#: sequencer.c:447 sequencer.c:3075 sequencer.c:3277 sequencer.c:3291
-#: sequencer.c:3555
+#: sequencer.c:460 sequencer.c:3092 sequencer.c:3294 sequencer.c:3308
+#: sequencer.c:3565
 #, c-format
 msgid "failed to finalize '%s'"
-msgstr "falha ao finalizar '%s'."
+msgstr "falhou finalizar '%s'"
+
+#: sequencer.c:473 sequencer.c:1930 sequencer.c:3112 sequencer.c:3547
+#: sequencer.c:3675 builtin/am.c:290 builtin/commit.c:837 builtin/merge.c:1154
+#, c-format
+msgid "could not read '%s'"
+msgstr "incapaz ler '%s'"
 
-#: sequencer.c:486
+#: sequencer.c:499
 #, c-format
 msgid "your local changes would be overwritten by %s."
-msgstr "as suas alterações locais serão substituídas ao %s."
+msgstr "tuas alterações locais serão sobrescritas ao %s."
 
-#: sequencer.c:490
+#: sequencer.c:503
 msgid "commit your changes or stash them to proceed."
-msgstr "submeta ou esconda as suas alterações para continuar."
+msgstr "memoriza tuas alterações ou esconde-as para continuar."
 
-#: sequencer.c:522
+#: sequencer.c:535
 #, c-format
 msgid "%s: fast-forward"
-msgstr "%s: avanço rápido"
+msgstr "%s: avanço"
 
-#: sequencer.c:561 builtin/tag.c:609
+#: sequencer.c:574 builtin/tag.c:615
 #, c-format
 msgid "Invalid cleanup mode %s"
-msgstr "Modo de limpeza inválido %s"
+msgstr "Modo de limpeza %s inválido"
 
 #. TRANSLATORS: %s will be "revert", "cherry-pick" or
 #. "rebase".
 #.
-#: sequencer.c:671
+#: sequencer.c:685
 #, c-format
 msgid "%s: Unable to write new index file"
-msgstr "%s: Incapaz de escrever novo ficheiro index"
+msgstr "%s: Incapaz de escrever novo ficheiro de cenário"
 
-#: sequencer.c:685
+#: sequencer.c:699
 msgid "unable to update cache tree"
 msgstr "incapaz atualizar árvore de cenário"
 
-#: sequencer.c:699
+#: sequencer.c:713
 msgid "could not resolve HEAD commit"
 msgstr "incapaz resolver memória HEAD"
 
-#: sequencer.c:779
+#: sequencer.c:793
 #, c-format
 msgid "no key present in '%.*s'"
-msgstr ""
+msgstr "nenhuma chave presente em '%.*s'"
 
-#: sequencer.c:790
+#: sequencer.c:804
 #, c-format
 msgid "unable to dequote value of '%s'"
-msgstr "incapaz retirar valor, da citação '%s'"
+msgstr "incapaz retirar citação de valor de '%s'"
 
-#: sequencer.c:827 wrapper.c:201 wrapper.c:371 builtin/am.c:729
-#: builtin/am.c:821 builtin/merge.c:1141 builtin/rebase.c:910
+#: sequencer.c:841 wrapper.c:219 wrapper.c:389 builtin/am.c:757
+#: builtin/am.c:849 builtin/rebase.c:699
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "incapaz abrir '%s' para leitura"
 
-#: sequencer.c:837
+#: sequencer.c:851
 msgid "'GIT_AUTHOR_NAME' already given"
-msgstr ""
+msgstr "'GIT_AUTHOR_NAME' já foi dado"
 
-#: sequencer.c:842
+#: sequencer.c:856
 msgid "'GIT_AUTHOR_EMAIL' already given"
-msgstr ""
+msgstr "'GIT_AUTHOR_EMAIL' já foi dado"
 
-#: sequencer.c:847
+#: sequencer.c:861
 msgid "'GIT_AUTHOR_DATE' already given"
-msgstr ""
+msgstr "'GIT_AUTHOR_DATE' já foi dado"
 
-#: sequencer.c:851
+#: sequencer.c:865
 #, c-format
 msgid "unknown variable '%s'"
-msgstr ""
+msgstr "variável '%s' desconhecida"
 
-#: sequencer.c:856
+#: sequencer.c:870
 msgid "missing 'GIT_AUTHOR_NAME'"
-msgstr ""
+msgstr "faltando 'GIT_AUTHOR_NAME'"
 
-#: sequencer.c:858
+#: sequencer.c:872
 msgid "missing 'GIT_AUTHOR_EMAIL'"
-msgstr ""
+msgstr "faltando 'GIT_AUTHOR_EMAIL'"
 
-#: sequencer.c:860
+#: sequencer.c:874
 msgid "missing 'GIT_AUTHOR_DATE'"
-msgstr ""
+msgstr "faltando 'GIT_AUTHOR_DATE'"
 
-#: sequencer.c:925
+#: sequencer.c:939
 #, c-format
 msgid ""
 "you have staged changes in your working tree\n"
@@ -7627,24 +8045,24 @@ msgid ""
 "\n"
 "  git rebase --continue\n"
 msgstr ""
-"tem alterações preparadas na árvore de trabalho\n"
-"Se tenciona esmagar estas alterações no commit anterior, execute:\n"
+"tens alterações encenadas na tua árvore-trabalho\n"
+"Se tencionas esmagar estas alterações para a memória anterior, executa:\n"
 "\n"
 "  git commit --amend %s\n"
 "\n"
-"Se tenciona pô-las num novo commit, execute:\n"
+"Se tencionas pô-las numa nova memória, executa:\n"
 "\n"
 "  git commit %s\n"
 "\n"
-"Em ambos os casos, quando estiver pronto, continue com:\n"
+"Em ambos os casos, quando estiver pronto, continua com:\n"
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:1212
+#: sequencer.c:1225
 msgid "'prepare-commit-msg' hook failed"
-msgstr ""
+msgstr "gancho 'prepare-commit-msg' falhou"
 
-#: sequencer.c:1218
+#: sequencer.c:1231
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -7658,19 +8076,20 @@ msgid ""
 "\n"
 "    git commit --amend --reset-author\n"
 msgstr ""
-"O seu nome e endereço de e-mail foram configurados automaticamente com base\n"
-"no seu nome de utilizador e nome de máquina. Verifique se estão corretos.\n"
-"Pode suprimir esta mensagem configurando-os explicitamente. Execute\n"
-"o seguinte comando e siga as instruções no editor para editar\n"
+"Teu nome e endereço de email foram configurados automaticamente com base\n"
+"no teu nome de utilizador e nome de máquina. Por favor, verifica se estão\n"
+"corretos.\n"
+"Podes suprimir esta mensagem configurando-os explicitamente. Executa\n"
+"o comando seguinte e segue as instruções no editor para editar\n"
 "o ficheiro de configuração:\n"
 "\n"
 "    git config --global --edit\n"
 "\n"
-"Após fazer isto, pode corrigir a identidade usada neste commit com:\n"
+"Após fazer isto, podes corrigir a identidade usada nesta memória com:\n"
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1231
+#: sequencer.c:1244
 msgid ""
 "Your name and email address were configured automatically based\n"
 "on your username and hostname. Please check that they are accurate.\n"
@@ -7683,370 +8102,374 @@ msgid ""
 "\n"
 "    git commit --amend --reset-author\n"
 msgstr ""
-"O seu nome e endereço de e-mail foram configurados automaticamente com base\n"
-"no seu nome de utilizador e nome de máquina. Verifique se estão corretos.\n"
-"Pode suprimir esta mensagem configurando-os explicitamente:\n"
+"Teu nome e endereço de email foram configurados automaticamente com base\n"
+"no teu nome de utilizador e nome de máquina. Por favor, verifica se estão\n"
+"corretos.\n"
+"Podes suprimir esta mensagem configurando-os explicitamente:\n"
 "\n"
-"    git config --global user.name \"O Seu Nome\"\n"
-"    git config --global user.email utilizador@exemplo.com\n"
+"    git config --global user.name \"Meu Nome\"\n"
+"    git config --global user.email eu@exemplo.com\n"
 "\n"
-"Após fazer isto, pode corrigir a identidade usada neste commit com:\n"
+"Após fazer isto, podes corrigir a identidade usada nesta memória com:\n"
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1273
+#: sequencer.c:1287
 msgid "couldn't look up newly created commit"
 msgstr "incapaz consultar memória recém-criada"
 
-#: sequencer.c:1275
+#: sequencer.c:1289
 msgid "could not parse newly created commit"
-msgstr "incapaz analisar memória recém-criada"
+msgstr "incapaz processar memória recém-criada"
 
-#: sequencer.c:1321
+#: sequencer.c:1336
 msgid "unable to resolve HEAD after creating commit"
 msgstr "incapaz resolver HEAD após criar memória"
 
-#: sequencer.c:1323
+#: sequencer.c:1338
 msgid "detached HEAD"
-msgstr "HEAD destacada"
+msgstr "HEAD desanexada"
 
-#: sequencer.c:1327
+#: sequencer.c:1342
 msgid " (root-commit)"
-msgstr " (commit-raiz)"
+msgstr " (memória-raiz)"
 
-#: sequencer.c:1348
+#: sequencer.c:1363
 msgid "could not parse HEAD"
 msgstr "incapaz processar HEAD"
 
-#: sequencer.c:1350
+#: sequencer.c:1365
 #, c-format
 msgid "HEAD %s is not a commit!"
-msgstr "HEAD %s é commit nenhum!"
+msgstr "HEAD %s é memória nenhuma!"
 
-#: sequencer.c:1354 sequencer.c:1432 builtin/commit.c:1705
+#: sequencer.c:1369 sequencer.c:1447 builtin/commit.c:1707
 msgid "could not parse HEAD commit"
-msgstr "incapaz analisar commit HEAD"
+msgstr "incapaz processar memória HEAD"
 
-#: sequencer.c:1410 sequencer.c:2295
+#: sequencer.c:1425 sequencer.c:2310
 msgid "unable to parse commit author"
-msgstr "incapaz processar autor de commit"
+msgstr "incapaz processar autor de memória"
 
-#: sequencer.c:1421 builtin/am.c:1615 builtin/merge.c:707
+#: sequencer.c:1436 builtin/am.c:1644 builtin/merge.c:710
 msgid "git write-tree failed to write a tree"
-msgstr ""
+msgstr "git write-tree falhou a escrever uma árvore"
 
-#: sequencer.c:1454 sequencer.c:1574
+#: sequencer.c:1469 sequencer.c:1589
 #, c-format
 msgid "unable to read commit message from '%s'"
-msgstr "incapaz ler mensagem de commit de '%s'"
+msgstr "incapaz ler mensagem de memória de '%s'"
 
-#: sequencer.c:1485 sequencer.c:1517
+#: sequencer.c:1500 sequencer.c:1532
 #, c-format
 msgid "invalid author identity '%s'"
-msgstr ""
+msgstr "identidade de autor '%s' inválida"
 
-#: sequencer.c:1491
+#: sequencer.c:1506
 msgid "corrupt author: missing date information"
-msgstr ""
+msgstr "author rompido: faltando informação de data"
 
-#: sequencer.c:1530 builtin/am.c:1642 builtin/commit.c:1819 builtin/merge.c:910
-#: builtin/merge.c:935 t/helper/test-fast-rebase.c:78
+#: sequencer.c:1545 builtin/am.c:1671 builtin/commit.c:1821 builtin/merge.c:921
+#: builtin/merge.c:946 t/helper/test-fast-rebase.c:78
 msgid "failed to write commit object"
-msgstr ""
+msgstr "falhou escrever objeto de memória"
 
-#: sequencer.c:1557 sequencer.c:4492 t/helper/test-fast-rebase.c:199
+#: sequencer.c:1572 sequencer.c:4496 t/helper/test-fast-rebase.c:199
 #: t/helper/test-fast-rebase.c:217
 #, c-format
 msgid "could not update %s"
 msgstr "incapaz atualizar %s"
 
-#: sequencer.c:1606
+#: sequencer.c:1621
 #, c-format
 msgid "could not parse commit %s"
-msgstr "incapaz processar commit %s"
+msgstr "incapaz processar memória %s"
 
-#: sequencer.c:1611
+#: sequencer.c:1626
 #, c-format
 msgid "could not parse parent commit %s"
-msgstr "incapaz processar commit parente %s"
+msgstr "incapaz processar memória parente %s"
 
-#: sequencer.c:1694 sequencer.c:1975
+#: sequencer.c:1709 sequencer.c:1990
 #, c-format
 msgid "unknown command: %d"
 msgstr "comando desconhecido: %d"
 
-#: sequencer.c:1736 git-rebase--preserve-merges.sh:486
+#: sequencer.c:1751
 msgid "This is the 1st commit message:"
-msgstr "Esta é a 1ª mensagem de commit:"
+msgstr "Esta é a 1ª mensagem de memória:"
 
-#: sequencer.c:1737
+#: sequencer.c:1752
 #, c-format
 msgid "This is the commit message #%d:"
-msgstr "Esta é a mensagem de commit nº%d:"
+msgstr "Esta é a mensagem de memória #%d:"
 
-#: sequencer.c:1738
+#: sequencer.c:1753
 msgid "The 1st commit message will be skipped:"
-msgstr "A 1ª mensagem de commit será ignorada:"
+msgstr "A 1ª mensagem de memória será saltada:"
 
-#: sequencer.c:1739
+#: sequencer.c:1754
 #, c-format
 msgid "The commit message #%d will be skipped:"
-msgstr "A mensagem de commit #%d será ignorada:"
+msgstr "A mensagem de memória #%d será saltada:"
 
-#: sequencer.c:1740
+#: sequencer.c:1755
 #, c-format
 msgid "This is a combination of %d commits."
-msgstr "Isto é a combinação de %d commits."
+msgstr "Isto é a combinação de %d memórias."
 
-#: sequencer.c:1887 sequencer.c:1944
+#: sequencer.c:1902 sequencer.c:1959
 #, c-format
 msgid "cannot write '%s'"
 msgstr "incapaz escrever '%s'"
 
-#: sequencer.c:1934
+#: sequencer.c:1949
 msgid "need a HEAD to fixup"
-msgstr "necessária uma HEAD para fixup"
+msgstr "necessário uma HEAD para consertar"
 
-#: sequencer.c:1936 sequencer.c:3582
+#: sequencer.c:1951 sequencer.c:3592
 msgid "could not read HEAD"
 msgstr "incapaz ler HEAD"
 
-#: sequencer.c:1938
+#: sequencer.c:1953
 msgid "could not read HEAD's commit message"
-msgstr "incapaz ler mensagem de commit de HEAD"
+msgstr "incapaz ler mensagem de memória de HEAD"
 
-#: sequencer.c:1962
+#: sequencer.c:1977
 #, c-format
 msgid "could not read commit message of %s"
-msgstr "incapaz ler mensagem de commit de %s"
+msgstr "incapaz ler mensagem de memória de %s"
 
-#: sequencer.c:2072
+#: sequencer.c:2087
 msgid "your index file is unmerged."
-msgstr "teu ficheiro índex está por juntar."
+msgstr "teu ficheiro de cenário está por juntar."
 
-#: sequencer.c:2079
+#: sequencer.c:2094
 msgid "cannot fixup root commit"
-msgstr "incapaz consertar commit raíz"
+msgstr "incapaz consertar memória-raiz"
 
-#: sequencer.c:2098
+#: sequencer.c:2113
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
-msgstr "commit %s é uma junção mas foi fornecido opção -m nenhuma."
+msgstr "memória %s é uma junção mas foi fornecida opção -m nenhuma."
 
-#: sequencer.c:2106 sequencer.c:2114
+#: sequencer.c:2121 sequencer.c:2129
 #, c-format
 msgid "commit %s does not have parent %d"
-msgstr "commit %s tem parente %d nenhum"
+msgstr "memória %s tem parente %d nenhum"
 
-#: sequencer.c:2120
+#: sequencer.c:2135
 #, c-format
 msgid "cannot get commit message for %s"
-msgstr "incapaz obter mensagem de commit para %s"
+msgstr "incapaz obter mensagem de memória para %s"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:2139
+#: sequencer.c:2154
 #, c-format
 msgid "%s: cannot parse parent commit %s"
-msgstr "%s: incapaz processar commit parente %s"
+msgstr "%s: incapaz processar memória parente %s"
 
-#: sequencer.c:2205
+#: sequencer.c:2220
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "incapaz renomear '%s' para '%s'"
 
-#: sequencer.c:2265
+#: sequencer.c:2280
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "incapaz reverter %s... %s"
 
-#: sequencer.c:2266
+#: sequencer.c:2281
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "incapaz aplicar %s... %s"
 
-#: sequencer.c:2287
+#: sequencer.c:2302
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
-msgstr ""
+msgstr "largando %s %s -- conteúdo de remendo já em upstream\n"
 
-#: sequencer.c:2345
+#: sequencer.c:2360
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: ler cenário falhou"
 
-#: sequencer.c:2352
+#: sequencer.c:2368
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: falha ao atualizar o cenário"
 
-#: sequencer.c:2425
+#: sequencer.c:2448
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s rejeita argumentos: '%s'"
 
-#: sequencer.c:2434
+#: sequencer.c:2457
 #, c-format
 msgid "missing arguments for %s"
-msgstr ""
+msgstr "faltando argumentos para %s"
 
-#: sequencer.c:2477
+#: sequencer.c:2500
 #, c-format
 msgid "could not parse '%s'"
 msgstr "incapaz processar '%s'"
 
-#: sequencer.c:2538
+#: sequencer.c:2561
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "linha %d inválida: %.*s"
 
-#: sequencer.c:2549
+#: sequencer.c:2572
 #, c-format
 msgid "cannot '%s' without a previous commit"
-msgstr "incapaz '%s' sem um commit anterior"
+msgstr "incapaz '%s' sem uma memória anterior"
+
+#: sequencer.c:2620 builtin/rebase.c:185
+#, c-format
+msgid "could not read '%s'."
+msgstr "incapaz ler '%s'."
 
-#: sequencer.c:2635
+#: sequencer.c:2658
 msgid "cancelling a cherry picking in progress"
-msgstr "cancelando um cherry picking em curso"
+msgstr "cancelando uma apanha em curso"
 
-#: sequencer.c:2644
+#: sequencer.c:2667
 msgid "cancelling a revert in progress"
 msgstr "cancelando uma reversão em curso"
 
-#: sequencer.c:2690
+#: sequencer.c:2707
 msgid "please fix this using 'git rebase --edit-todo'."
-msgstr "corrija-o usando 'git rebase --edit-todo'."
+msgstr "por favor, conserta-o usando 'git rebase --edit-todo'."
 
-#: sequencer.c:2692
+#: sequencer.c:2709
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "folha de instruções inutilizável: '%s'"
 
-#: sequencer.c:2697
+#: sequencer.c:2714
 msgid "no commits parsed."
-msgstr "commits nenhuns analisados."
+msgstr "memórias nenhumas processadas."
 
-#: sequencer.c:2708
+#: sequencer.c:2725
 msgid "cannot cherry-pick during a revert."
 msgstr "incapaz apanhar durante uma reversão."
 
-#: sequencer.c:2710
+#: sequencer.c:2727
 msgid "cannot revert during a cherry-pick."
 msgstr "incapaz reverter durante uma apanha."
 
-#: sequencer.c:2788
-#, c-format
-msgid "invalid value for %s: %s"
-msgstr "valor inválido para %s: %s"
-
-#: sequencer.c:2897
+#: sequencer.c:2914
 msgid "unusable squash-onto"
-msgstr ""
+msgstr "esmagar-sobre inutilizável"
 
-#: sequencer.c:2917
+#: sequencer.c:2934
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "folha de opções malformada: '%s'"
 
-#: sequencer.c:3012 sequencer.c:4868
+#: sequencer.c:3029 sequencer.c:4875
 msgid "empty commit set passed"
-msgstr "o conjunto de commits especificado está vazio"
+msgstr "passou conjunto de memórias vazias"
 
-#: sequencer.c:3029
+#: sequencer.c:3046
 msgid "revert is already in progress"
 msgstr "reversão já está em curso"
 
-#: sequencer.c:3031
+#: sequencer.c:3048
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "tenta \"git revert (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:3034
+#: sequencer.c:3051
 msgid "cherry-pick is already in progress"
-msgstr "a apanha já está em curso"
+msgstr "apanha já está em curso"
 
-#: sequencer.c:3036
+#: sequencer.c:3053
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "tenta \"git cherry-pick (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:3050
+#: sequencer.c:3067
 #, c-format
 msgid "could not create sequencer directory '%s'"
-msgstr "incapaz criar pasta do sequenciador '%s'"
+msgstr "incapaz criar pasta de sequenciador '%s'"
 
-#: sequencer.c:3065
+#: sequencer.c:3082
 msgid "could not lock HEAD"
-msgstr "incapaz bloquear HEAD"
+msgstr "incapaz trancar HEAD"
 
-#: sequencer.c:3125 sequencer.c:4581
+#: sequencer.c:3142 sequencer.c:4585
 msgid "no cherry-pick or revert in progress"
-msgstr "sem cherry-pick ou revert em curso"
+msgstr "em curso nenhuma apanha e nenhuma reversão"
 
-#: sequencer.c:3127 sequencer.c:3138
+#: sequencer.c:3144 sequencer.c:3155
 msgid "cannot resolve HEAD"
 msgstr "incapaz resolver HEAD"
 
-#: sequencer.c:3129 sequencer.c:3173
+#: sequencer.c:3146 sequencer.c:3190
 msgid "cannot abort from a branch yet to be born"
 msgstr "incapaz abortar de um ramo ainda por nascer"
 
-#: sequencer.c:3159 builtin/grep.c:758
+#: sequencer.c:3176 builtin/fetch.c:1030 builtin/fetch.c:1457
+#: builtin/grep.c:774
 #, c-format
 msgid "cannot open '%s'"
 msgstr "incapaz abrir '%s'"
 
-#: sequencer.c:3161
+#: sequencer.c:3178
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "incapaz ler '%s': %s"
 
-#: sequencer.c:3162
+#: sequencer.c:3179
 msgid "unexpected end of file"
-msgstr ""
+msgstr "fim de ficheiro inesperado"
 
-#: sequencer.c:3168
+#: sequencer.c:3185
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
-msgstr "o ficheiro HEAD de pre-cherry-pick '%s' está corrompido"
+msgstr "ficheiro HEAD guardado de pre-cherry-pick '%s' está rompido"
 
-#: sequencer.c:3179
+#: sequencer.c:3196
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
-msgstr "Parece que moveste a HEAD. Recusando rebobinar, verifique a tua HEAD!"
+msgstr "Parece que moveste a HEAD. Recusando rebobinar, verifica a tua HEAD!"
 
-#: sequencer.c:3220
+#: sequencer.c:3237
 msgid "no revert in progress"
 msgstr "em curso reversão nenhuma"
 
-#: sequencer.c:3229
+#: sequencer.c:3246
 msgid "no cherry-pick in progress"
-msgstr "cherry-pick nenhum em curso"
+msgstr "em curso apanha nenhuma"
 
-#: sequencer.c:3239
+#: sequencer.c:3256
 msgid "failed to skip the commit"
-msgstr ""
+msgstr "falhou saltar memória"
 
-#: sequencer.c:3246
+#: sequencer.c:3263
 msgid "there is nothing to skip"
-msgstr ""
+msgstr "há nada a saltar"
 
-#: sequencer.c:3249
+#: sequencer.c:3266
 #, c-format
 msgid ""
 "have you committed already?\n"
 "try \"git %s --continue\""
 msgstr ""
+"já memorizaste?\n"
+"tenta \"git %s --continue\""
 
-#: sequencer.c:3411 sequencer.c:4472
+#: sequencer.c:3428 sequencer.c:4476
 msgid "cannot read HEAD"
 msgstr "incapaz ler HEAD"
 
-#: sequencer.c:3428
+#: sequencer.c:3445
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "incapaz copiar '%s' para '%s'"
 
-#: sequencer.c:3436
+#: sequencer.c:3453
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -8057,35 +8480,35 @@ msgid ""
 "\n"
 "  git rebase --continue\n"
 msgstr ""
-"Pode emendar o commit agora, com\n"
+"Podes emendar a memória agora, com\n"
 "\n"
 "  git commit --amend %s\n"
 "\n"
-"Assim que estiver satisfeito com as alterações, execute\n"
+"Assim que estiveres satisfeito com as tuas alterações, executa\n"
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:3446
+#: sequencer.c:3463
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "Incapaz aplicar %s... %.*s"
 
-#: sequencer.c:3453
+#: sequencer.c:3470
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "Incapaz juntar %.*s"
 
-#: sequencer.c:3467 sequencer.c:3471 builtin/difftool.c:644
+#: sequencer.c:3484 sequencer.c:3488 builtin/difftool.c:633
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "incapaz copiar '%s' para '%s'"
 
-#: sequencer.c:3483
+#: sequencer.c:3499
 #, c-format
 msgid "Executing: %s\n"
-msgstr "A executar: %s\n"
+msgstr "Executando: %s\n"
 
-#: sequencer.c:3498
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -8095,16 +8518,16 @@ msgid ""
 "\n"
 msgstr ""
 "a execução falhou: %s\n"
-"%sPode corrigir o problema e executar\n"
+"%sPode corrigir o problema, e depois executar\n"
 "\n"
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3504
+#: sequencer.c:3516
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "e fiz alterações ao cenário e/ou à árvore-trabalho\n"
 
-#: sequencer.c:3510
+#: sequencer.c:3522
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -8114,97 +8537,97 @@ msgid ""
 "  git rebase --continue\n"
 "\n"
 msgstr ""
-"Executado com sucesso: %s\n"
-"mas deixou alterações no índice e/ou na árvore de trabalho\n"
-"Submeta ou esconda as alterações e execute\n"
+"executado com sucesso: %s\n"
+"mas ficaram alterações no cenário e/ou na árvore-trabalho\n"
+"Memoriza ou esconde tuas alterações, e depois executa\n"
 "\n"
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3572
+#: sequencer.c:3582
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "nome de rótulo ilegal: '%.*s'"
 
-#: sequencer.c:3645
+#: sequencer.c:3655
 msgid "writing fake root commit"
-msgstr "escrevendo commit de raíz falso"
+msgstr "escrevendo memória de raiz falsa"
 
-#: sequencer.c:3650
+#: sequencer.c:3660
 msgid "writing squash-onto"
-msgstr ""
+msgstr "escrevendo esmagar-sobre"
 
-#: sequencer.c:3734
+#: sequencer.c:3739
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "incapaz resolver '%s'"
 
-#: sequencer.c:3767
+#: sequencer.c:3771
 msgid "cannot merge without a current revision"
-msgstr "incapaz juntar sem uma revisão currente"
+msgstr "apenas pode juntar com uma revisão atual"
 
-#: sequencer.c:3789
+#: sequencer.c:3793
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "incapaz processar '%.*s'"
 
-#: sequencer.c:3798
+#: sequencer.c:3802
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "nada a juntar: '%.*s'"
 
-#: sequencer.c:3810
+#: sequencer.c:3814
 msgid "octopus merge cannot be executed on top of a [new root]"
-msgstr ""
+msgstr "incapaz de executar junção polvinho em cima de [nova raiz]"
 
-#: sequencer.c:3826
+#: sequencer.c:3869
 #, c-format
 msgid "could not get commit message of '%s'"
-msgstr "incapaz obter mensagem de commit de '%s'"
+msgstr "incapaz obter mensagem de memória de '%s'"
 
-#: sequencer.c:4009
+#: sequencer.c:4013
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
-msgstr "incapaz de tentar juntar '%.*s'"
+msgstr "também fui incapaz de juntar '%.*s'"
 
-#: sequencer.c:4025
+#: sequencer.c:4029
 msgid "merge: Unable to write new index file"
-msgstr "merge: Incapaz de escrever novo ficheiro index"
+msgstr "merge: Incapaz de escrever novo ficheiro de cenário"
 
-#: sequencer.c:4099
+#: sequencer.c:4110
 msgid "Cannot autostash"
-msgstr "Incapaz de arrumar automaticamente (autostash)"
+msgstr "Incapaz de esconder automaticamente (autostash)"
 
-#: sequencer.c:4102
+#: sequencer.c:4113
 #, c-format
 msgid "Unexpected stash response: '%s'"
-msgstr "Resposta de squash inexperada: '%s'"
+msgstr "Resposta de esconder inesperada: '%s'"
 
-#: sequencer.c:4108
+#: sequencer.c:4119
 #, c-format
 msgid "Could not create directory for '%s'"
-msgstr "Incapaz de criar pasta para '%s'"
+msgstr "Incapaz de criar pasta para '%s'"
 
-#: sequencer.c:4111
+#: sequencer.c:4122
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Criado autostash: %s\n"
 
-#: sequencer.c:4115
+#: sequencer.c:4124
 msgid "could not reset --hard"
 msgstr "incapaz restabelecer com --hard"
 
-#: sequencer.c:4140
+#: sequencer.c:4148
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Autostash aplicado.\n"
 
-#: sequencer.c:4152
+#: sequencer.c:4160
 #, c-format
 msgid "cannot store %s"
 msgstr "incapaz guardar %s"
 
-#: sequencer.c:4155
+#: sequencer.c:4163
 #, c-format
 msgid ""
 "%s\n"
@@ -8212,32 +8635,32 @@ msgid ""
 "You can run \"git stash pop\" or \"git stash drop\" at any time.\n"
 msgstr ""
 "%s\n"
-"As suas alterações estão guardadas na pilha.\n"
-"Pode executar \"git stash pop\" ou \"git stash drop\" oportunamente.\n"
+"Tuas alterações estão seguras no esconderijo.\n"
+"Podes executar \"git stash pop\" ou \"git stash drop\" quando quiseres.\n"
 
-#: sequencer.c:4160
+#: sequencer.c:4168
 msgid "Applying autostash resulted in conflicts."
-msgstr "Patch aplicado a '%s' com conflitos."
+msgstr "Aplicando autostash resultou em conflitos."
 
-#: sequencer.c:4161
+#: sequencer.c:4169
 msgid "Autostash exists; creating a new stash entry."
-msgstr ""
+msgstr "Existe autostash; criando uma nova entrada de esconderijo."
 
-#: sequencer.c:4233 git-rebase--preserve-merges.sh:769
+#: sequencer.c:4225
 msgid "could not detach HEAD"
 msgstr "incapaz desanexar HEAD"
 
-#: sequencer.c:4248
+#: sequencer.c:4240
 #, c-format
 msgid "Stopped at HEAD\n"
-msgstr "Parou no HEAD\n"
+msgstr "Parou em HEAD\n"
 
-#: sequencer.c:4250
+#: sequencer.c:4242
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Parou em %s\n"
 
-#: sequencer.c:4258
+#: sequencer.c:4274
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -8250,146 +8673,157 @@ msgid ""
 "    git rebase --continue\n"
 msgstr ""
 
-#: sequencer.c:4304
+#: sequencer.c:4320
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr ""
 
-#: sequencer.c:4350
+#: sequencer.c:4366
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Parou no %s...  %.*s\n"
 
-#: sequencer.c:4421
+#: sequencer.c:4436
 #, c-format
 msgid "unknown command %d"
 msgstr "comando desconhecido %d"
 
-#: sequencer.c:4480
+#: sequencer.c:4484
 msgid "could not read orig-head"
 msgstr "incapaz ler orig-head"
 
-#: sequencer.c:4485
+#: sequencer.c:4489
 msgid "could not read 'onto'"
 msgstr "incapaz ler 'onto'"
 
-#: sequencer.c:4499
+#: sequencer.c:4503
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "incapaz atualizar HEAD para %s"
 
-#: sequencer.c:4559
+#: sequencer.c:4563
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "O %s foi rebaseado e atualizado com sucesso.\n"
 
-#: sequencer.c:4611
+#: sequencer.c:4615
 msgid "cannot rebase: You have unstaged changes."
-msgstr "incapaz rebasear: tem alterações despreparadas."
+msgstr "incapaz rebasear: tem alterações desencenadas."
 
-#: sequencer.c:4620
+#: sequencer.c:4624
 msgid "cannot amend non-existing commit"
-msgstr "incapaz emendar commit inexistente"
+msgstr "incapaz emendar memória inexistente"
 
-#: sequencer.c:4622
+#: sequencer.c:4626
 #, c-format
 msgid "invalid file: '%s'"
 msgstr ""
 
-#: sequencer.c:4624
+#: sequencer.c:4628
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "conteúdo inválido: '%s'"
 
-#: sequencer.c:4627
+#: sequencer.c:4631
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
 "first and then run 'git rebase --continue' again."
 msgstr ""
 "\n"
-"Tem alterações por submeter na árvore de trabalho. Submeta-as primeiro\n"
-"e execute 'git rebase --continue' de novo."
+"Tens alterações por memorizar na tua árvore-trabalho. Por favor, memoriza-"
+"as\n"
+"primeiro e executa 'git rebase --continue' de novo."
 
-#: sequencer.c:4663 sequencer.c:4702
+#: sequencer.c:4667 sequencer.c:4706
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "incapaz escrever ficheiro: '%s'"
 
-#: sequencer.c:4718
+#: sequencer.c:4722
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "incapaz remover CHERRY_PICK_HEAD"
 
-#: sequencer.c:4725
+#: sequencer.c:4732
 msgid "could not commit staged changes."
-msgstr "incapaz commit alterações preparadas."
+msgstr "incapaz memorizar alterações encenadas."
 
-#: sequencer.c:4845
+#: sequencer.c:4852
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: incapaz apanhar um %s"
 
-#: sequencer.c:4849
+#: sequencer.c:4856
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: revisão incorreta"
 
-#: sequencer.c:4884
+#: sequencer.c:4891
 msgid "can't revert as initial commit"
-msgstr "incapaz reverter como commit inicial"
+msgstr "incapaz reverter como memória inicial"
+
+#: sequencer.c:5162 sequencer.c:5391
+#, c-format
+msgid "skipped previously applied commit %s"
+msgstr "saltei memória previamente aplicada %s"
+
+#: sequencer.c:5232 sequencer.c:5407
+msgid "use --reapply-cherry-picks to include skipped commits"
+msgstr ""
 
-#: sequencer.c:5361
+#: sequencer.c:5378
 msgid "make_script: unhandled options"
 msgstr ""
 
-#: sequencer.c:5364
+#: sequencer.c:5381
 msgid "make_script: error preparing revisions"
 msgstr ""
 
-#: sequencer.c:5614 sequencer.c:5631
+#: sequencer.c:5639 sequencer.c:5656
 msgid "nothing to do"
 msgstr "nada a fazer"
 
-#: sequencer.c:5650
+#: sequencer.c:5675
 msgid "could not skip unnecessary pick commands"
 msgstr "incapaz de saltar comandos pick desnecessários"
 
-#: sequencer.c:5750
+#: sequencer.c:5775
 msgid "the script was already rearranged."
 msgstr ""
 
-#: setup.c:133
+#: setup.c:135
 #, c-format
 msgid "'%s' is outside repository at '%s'"
 msgstr "%s está fora do repositório em '%s'"
 
-#: setup.c:185
+#: setup.c:187
 #, c-format
 msgid ""
 "%s: no such path in the working tree.\n"
 "Use 'git <command> -- <path>...' to specify paths that do not exist locally."
 msgstr ""
-"%s: sem tal path na working tree.\n"
-"Use 'git <comando> -- <path>...' para especificar caminhos inexistentes "
+"%s: sem tal caminho na working tree.\n"
+"Usa 'git <comando> -- <path>...' para especificar caminhos inexistentes "
 "localmente."
 
-#: setup.c:198
+#: setup.c:200
 #, c-format
 msgid ""
 "ambiguous argument '%s': unknown revision or path not in the working tree.\n"
 "Use '--' to separate paths from revisions, like this:\n"
 "'git <command> [<revision>...] -- [<file>...]'"
 msgstr ""
-"argumento ambíguo '%s': revisão desconhecida ou path fora da working tree.\n"
-"Usa '--' para separar paths de revisões, assim:\n"
+"argumento ambíguo '%s': revisão desconhecida ou caminho fora de árvore-"
+"trabalho.\n"
+"Usa '--' para separar caminhos das revisões, assim:\n"
 "'git <comando> [<revisão>...] -- [<ficheiro>...]'"
 
-#: setup.c:264
+#: setup.c:266
 #, c-format
 msgid "option '%s' must come before non-option arguments"
 msgstr "opção '%s' tem de vir antes argumentos diferentes de opção"
 
-#: setup.c:283
+#: setup.c:285
 #, c-format
 msgid ""
 "ambiguous argument '%s': both revision and filename\n"
@@ -8397,113 +8831,122 @@ msgid ""
 "'git <command> [<revision>...] -- [<file>...]'"
 msgstr ""
 "argumento ambíguo '%s': revisão e nome de ficheiro\n"
-"Use '--' para separar caminhos de revisões, assim:\n"
+"Usa '--' para separar caminhos de revisões, assim:\n"
 "'git <comando> [<revisão>...] -- [<ficheiro>...]'"
 
-#: setup.c:419
+#: setup.c:421
 msgid "unable to set up work tree using invalid config"
-msgstr "incapaz preparar work tree usando config inválido"
+msgstr "incapaz preparar árvore-trabalho usando config inválida"
 
-#: setup.c:423 builtin/rev-parse.c:895
+#: setup.c:425 builtin/rev-parse.c:895
 msgid "this operation must be run in a work tree"
 msgstr ""
 
-#: setup.c:658
+#: setup.c:724
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr "Esperava versão do repositório git <= %d, encontrei %d"
 
-#: setup.c:666
+#: setup.c:732
 msgid "unknown repository extension found:"
 msgid_plural "unknown repository extensions found:"
 msgstr[0] "extensão de repositório desconhecida encontrada:"
 msgstr[1] "extensões de repositório desconhecidas encontradas:"
 
-#: setup.c:680
+#: setup.c:746
 msgid "repo version is 0, but v1-only extension found:"
 msgid_plural "repo version is 0, but v1-only extensions found:"
 msgstr[0] "versão de repo é 0, mas encontrou-se extensão vi-only:"
 msgstr[1] "versão de repo é 0, mas encontrou-se extensões vi-only:"
 
-#: setup.c:701
+#: setup.c:767
 #, c-format
 msgid "error opening '%s'"
 msgstr ""
 
-#: setup.c:703
+#: setup.c:769
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr "demasiado grande para ser um ficheiro .git: '%s'"
 
-#: setup.c:705
+#: setup.c:771
 #, c-format
 msgid "error reading %s"
 msgstr "erro lendo %s"
 
-#: setup.c:707
+#: setup.c:773
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr "formato de ficheiro-git inválido: %s"
 
-#: setup.c:709
+#: setup.c:775
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr "ficheiro-git sem caminho: %s"
 
-#: setup.c:711
+#: setup.c:777
 #, c-format
 msgid "not a git repository: %s"
 msgstr "é repositório git nenhum: %s"
 
-#: setup.c:813
+#: setup.c:879
 #, c-format
 msgid "'$%s' too big"
 msgstr ""
 
-#: setup.c:827
+#: setup.c:893
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr "é repositório git nenhum: '%s'"
 
-#: setup.c:856 setup.c:858 setup.c:889
+#: setup.c:922 setup.c:924 setup.c:955
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr "incapaz chdir para '%s'"
 
-#: setup.c:861 setup.c:917 setup.c:927 setup.c:966 setup.c:974
+#: setup.c:927 setup.c:983 setup.c:993 setup.c:1032 setup.c:1040
 msgid "cannot come back to cwd"
 msgstr "incapaz de voltar para cwd"
 
-#: setup.c:988
+#: setup.c:1054
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr ""
 
-#: setup.c:1231
+#: setup.c:1338
 msgid "Unable to read current working directory"
-msgstr "Incapaz de ler pasta atual de trabalho"
+msgstr "Incapaz de ler pasta-trabalho atual"
 
-#: setup.c:1240 setup.c:1246
+#: setup.c:1347 setup.c:1353
 #, c-format
 msgid "cannot change to '%s'"
 msgstr "incapaz mudar para '%s'"
 
-#: setup.c:1251
+#: setup.c:1358
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
-msgstr "é repositório git nenhum (ou qualquer pastas parente): %s"
+msgstr "é repositório git nenhum (ou qualquer pasta parente): %s"
 
-#: setup.c:1257
+#: setup.c:1364
 #, c-format
 msgid ""
 "not a git repository (or any parent up to mount point %s)\n"
 "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."
 msgstr ""
-"é repositório git nenhum (ou em pai nenhum até ao ponto de montagem %s)\n"
+"é repositório git nenhum (ou em nenhum parente até ao ponto de montagem %s)\n"
 "Parando na fronteira do sistema de ficheiros "
 "(GIT_DISCOVERY_ACROSS_FILESYSTEM indefinido)."
 
-#: setup.c:1381
+#: setup.c:1374
+#, c-format
+msgid ""
+"unsafe repository ('%s' is owned by someone else)\n"
+"To add an exception for this directory, call:\n"
+"\n"
+"\tgit config --global --add safe.directory %s"
+msgstr ""
+
+#: setup.c:1502
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -8512,69 +8955,61 @@ msgstr ""
 "Problema com o valor core.sharedRepository modo de ficheiro (0%.3o).\n"
 "O dono dos ficheiros tem de ter sempre permissões de leitura e escrita."
 
-#: setup.c:1430
-msgid "open /dev/null or dup failed"
-msgstr "abrir /dev/null ou dup falhou"
-
-#: setup.c:1445
+#: setup.c:1564
 msgid "fork failed"
-msgstr "falha ao invocar fseek"
+msgstr "falhou forqueadura"
 
-#: setup.c:1450 t/helper/test-simple-ipc.c:285
+#: setup.c:1569
 msgid "setsid failed"
 msgstr ""
 
-#: sparse-index.c:162
-msgid "attempting to use sparse-index without cone mode"
-msgstr ""
-
-#: sparse-index.c:176
-msgid "unable to update cache-tree, staying full"
-msgstr "incapaz atualizar árvore-cenário, mantendo-a cheia"
-
-#: sparse-index.c:263
+#: sparse-index.c:285
 #, c-format
 msgid "index entry is a directory, but not sparse (%08x)"
 msgstr ""
 
+#: split-index.c:9
+msgid "cannot use split index with a sparse index"
+msgstr "incapaz usar cenário dividido com um cenário disperso"
+
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:850
+#: strbuf.c:851
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:852
+#: strbuf.c:853
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:860
+#: strbuf.c:861
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:862
+#: strbuf.c:863
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:869
+#: strbuf.c:870
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:871
+#: strbuf.c:872
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr ""
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:877
+#: strbuf.c:878
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -8582,133 +9017,144 @@ msgstr[0] "%u byte"
 msgstr[1] "%u bytes"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:879
+#: strbuf.c:880
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
 msgstr[0] "%u byte/s"
 msgstr[1] "%u bytes/s"
 
-#: strbuf.c:1168 wrapper.c:199 wrapper.c:369 builtin/am.c:738
-#: builtin/rebase.c:866
+#: strbuf.c:1187 wrapper.c:217 wrapper.c:387 builtin/am.c:766
+#: builtin/rebase.c:653
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "incapaz abrir '%s' para escrita"
 
-#: strbuf.c:1177
+#: strbuf.c:1196
 #, c-format
 msgid "could not edit '%s'"
 msgstr "incapaz editar '%s'"
 
-#: submodule-config.c:237
+#: submodule-config.c:238
 #, c-format
 msgid "ignoring suspicious submodule name: %s"
 msgstr "ignorando nome suspeito de submódulo: %s"
 
-#: submodule-config.c:304
+#: submodule-config.c:305
 msgid "negative values not allowed for submodule.fetchjobs"
 msgstr "é proíbido valores negativos para submodule.fetchjobs"
 
-#: submodule-config.c:402
+#: submodule-config.c:403
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr ""
 
-#: submodule-config.c:499
+#: submodule-config.c:500 builtin/push.c:489 builtin/send-pack.c:148
 #, c-format
-msgid "invalid value for %s"
-msgstr ""
+msgid "invalid value for '%s'"
+msgstr "valor inválido para '%s'"
 
-#: submodule-config.c:766
+#: submodule-config.c:828
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr "Incapaz de atualizar entrada %s de .gitmodules"
 
-#: submodule.c:114 submodule.c:143
+#: submodule.c:115 submodule.c:144
 msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
 msgstr ""
-"Incapaz de alterar .gitmodules por juntar, resolve primeiro os conflitos de junção"
+"Incapaz de alterar .gitmodules por juntar, resolve primeiro os conflitos de "
+"junção"
 
-#: submodule.c:118 submodule.c:147
+#: submodule.c:119 submodule.c:148
 #, c-format
 msgid "Could not find section in .gitmodules where path=%s"
 msgstr "Secção de .gitmodules cujo path=%s por encontrar"
 
-#: submodule.c:154
+#: submodule.c:155
 #, c-format
 msgid "Could not remove .gitmodules entry for %s"
 msgstr "Incapaz de remover a entrada %s de .gitmodules"
 
-#: submodule.c:165
+#: submodule.c:166
 msgid "staging updated .gitmodules failed"
 msgstr "encenação atualizada .gitmodules falhou"
 
-#: submodule.c:328
+#: submodule.c:346
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "em submódulo despopulado '%s'"
 
-#: submodule.c:359
+#: submodule.c:377
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "Espetro-caminho '%s' está no submódulo '%.*s'"
 
-#: submodule.c:436
+#: submodule.c:454
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr ""
 
-#: submodule.c:805
+#: submodule.c:866
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
 "same. Skipping it."
 msgstr ""
 
-#: submodule.c:908
+#: submodule.c:987
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
-msgstr "entrada submódulo '%s' (%s) é um(a) %s, não um commit"
+msgstr "entrada submódulo '%s' (%s) é um(a) %s, não uma memória"
 
-#: submodule.c:993
+#: submodule.c:1069
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
 "submodule %s"
 msgstr ""
-"Incapaz executar comando 'git rev-list <commits> --not --remotes -n 1' "
-"emsubmódulo %s"
+"Incapaz executar comando 'git rev-list <memórias> --not --remotes -n 1' em "
+"submódulo %s"
 
-#: submodule.c:1116
+#: submodule.c:1192
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "processo para submódulo '%s' falhou"
 
-#: submodule.c:1145 builtin/branch.c:691 builtin/submodule--helper.c:2486
+#: submodule.c:1221 builtin/branch.c:714 builtin/submodule--helper.c:2827
 msgid "Failed to resolve HEAD as a valid ref."
-msgstr "Falha ao resolver HEAD numa referência válida."
+msgstr "Falhou ao resolver HEAD como uma ref válida."
 
-#: submodule.c:1156
+#: submodule.c:1232
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "Atirando submódulo '%s'\n"
 
-#: submodule.c:1159
+#: submodule.c:1235
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "Impossível enviar submódulo '%s'\n"
 
-#: submodule.c:1451
+#: submodule.c:1567
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "Buscando submódulo %s%s\n"
 
-#: submodule.c:1485
+#: submodule.c:1589
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "Submódulo '%s' inacessível\n"
 
-#: submodule.c:1640
+#: submodule.c:1618
+#, c-format
+msgid "Could not access submodule '%s' at commit %s\n"
+msgstr "Incapaz de aceder submódulo '%s' em memória %s\n"
+
+#: submodule.c:1629
+#, c-format
+msgid "Fetching submodule %s%s at commit %s\n"
+msgstr "Buscando submódulo %s%s em memória %s\n"
+
+#: submodule.c:1849
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -8717,93 +9163,94 @@ msgstr ""
 "Erros na busca do submódulo:\n"
 "%s"
 
-#: submodule.c:1665
+#: submodule.c:1874
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "'%s' é irreconhecível como um repositório git"
 
-#: submodule.c:1682
+#: submodule.c:1891
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr "Incapaz executar 'git status --porcelain=2' no submódulo %s"
 
-#: submodule.c:1723
+#: submodule.c:1932
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr "'git status --porcelain=2' falhou no submódulo %s"
 
-#: submodule.c:1798
+#: submodule.c:2007
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "incapaz iniciar 'git status' no submódulo '%s'"
 
-#: submodule.c:1811
+#: submodule.c:2020
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "incapaz executar 'git status' no submódulo '%s'"
 
-#: submodule.c:1826
+#: submodule.c:2037
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
-msgstr "Incapaz de remover a definição core.worktree em submódulo '%s'"
+msgstr "Incapaz de indefinir core.worktree em submódulo '%s'"
 
-#: submodule.c:1853 submodule.c:2163
+#: submodule.c:2064 submodule.c:2379
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr "incapaz percorrer recursivamente o submódulo '%s'"
 
-#: submodule.c:1874
+#: submodule.c:2086
 msgid "could not reset submodule index"
-msgstr "incapaz repor index de submódulo"
+msgstr "incapaz de restabelecer cenário de submódulo"
 
-#: submodule.c:1916
+#: submodule.c:2128
 #, c-format
 msgid "submodule '%s' has dirty index"
-msgstr "o submódulo '%s' tem índice sujo"
+msgstr "submódulo '%s' tem cenário sujo"
 
-#: submodule.c:1968
+#: submodule.c:2182
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "Submódulo '%s' incapaz de ser atualizado."
 
-#: submodule.c:2036
+#: submodule.c:2250
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr ""
 
-#: submodule.c:2057
+#: submodule.c:2271
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
 msgstr ""
-"relocate_gitdir para submodúlo '%s' com mais que uma worktree é insustentado"
+"relocate_gitdir para submódulo '%s' com mais que uma árvore-trabalho é "
+"insustentado"
 
-#: submodule.c:2069 submodule.c:2128
+#: submodule.c:2283 submodule.c:2343
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "incapaz procurar nome para submódulo '%s'"
 
-#: submodule.c:2073
+#: submodule.c:2287
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr ""
 
-#: submodule.c:2080
+#: submodule.c:2293
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
 "'%s' to\n"
 "'%s'\n"
 msgstr ""
-"A migrar diretório git de '%s%s' de\n"
+"Migrando pasta git de '%s%s' de\n"
 "'%s' para\n"
 "'%s'\n"
 
-#: submodule.c:2208
+#: submodule.c:2424
 msgid "could not start ls-files in .."
 msgstr "incapaz iniciar ls-files em .."
 
-#: submodule.c:2248
+#: submodule.c:2464
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree retornou código de retorno inesperado %d"
@@ -8824,8 +9271,8 @@ msgstr "falha ao executar o comando trailer '%s'"
 msgid "unknown value '%s' for key '%s'"
 msgstr "valor desconhecido '%s' para chave '%s'"
 
-#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
-#: builtin/remote.c:324
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:300
+#: builtin/remote.c:328
 #, c-format
 msgid "more than one %s"
 msgstr "mais do que um %s"
@@ -8840,11 +9287,11 @@ msgstr "token terminador vazio no terminador '%.*s'"
 msgid "could not read input file '%s'"
 msgstr "incapaz ler ficheiro de entrada '%s'"
 
-#: trailer.c:766 builtin/mktag.c:88 imap-send.c:1577
+#: trailer.c:766 builtin/mktag.c:88 imap-send.c:1563
 msgid "could not read from stdin"
 msgstr "incapaz ler da entrada padrão"
 
-#: trailer.c:1024 wrapper.c:676
+#: trailer.c:1024 wrapper.c:760
 #, c-format
 msgid "could not stat %s"
 msgstr "incapaz stat %s"
@@ -8910,7 +9357,7 @@ msgstr "incapaz executar fast-import"
 msgid "error while running fast-import"
 msgstr ""
 
-#: transport-helper.c:549 transport-helper.c:1247
+#: transport-helper.c:549 transport-helper.c:1254
 #, c-format
 msgid "could not read ref %s"
 msgstr "incapaz de ler ref %s"
@@ -8928,7 +9375,7 @@ msgstr ""
 msgid "invalid remote service path"
 msgstr ""
 
-#: transport-helper.c:661 transport.c:1477
+#: transport-helper.c:661 transport.c:1496
 msgid "operation not supported by protocol"
 msgstr "opção insustentado pelo protocolo"
 
@@ -8937,186 +9384,188 @@ msgstr "opção insustentado pelo protocolo"
 msgid "can't connect to subservice %s"
 msgstr ""
 
-#: transport-helper.c:693 transport.c:400
+#: transport-helper.c:693 transport.c:415
 msgid "--negotiate-only requires protocol v2"
 msgstr ""
 
-#: transport-helper.c:755
+#: transport-helper.c:758
 msgid "'option' without a matching 'ok/error' directive"
 msgstr ""
 
-#: transport-helper.c:798
+#: transport-helper.c:801
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr ""
 
-#: transport-helper.c:855
+#: transport-helper.c:862
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "helper reportou código de status inesperado de %s"
 
-#: transport-helper.c:938
+#: transport-helper.c:945
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "helper %s insustenta dry-run"
 
-#: transport-helper.c:941
+#: transport-helper.c:948
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "helper %s insustenta --signed"
 
-#: transport-helper.c:944
+#: transport-helper.c:951
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "helper %s insustenta --signed=if-asked"
 
-#: transport-helper.c:949
+#: transport-helper.c:956
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr "helper %s insustenta --atomic"
 
-#: transport-helper.c:953
+#: transport-helper.c:960
 #, c-format
 msgid "helper %s does not support --%s"
 msgstr "helper %s insustenta --%s"
 
-#: transport-helper.c:960
+#: transport-helper.c:967
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "helper %s insustenta 'push-option'"
 
-#: transport-helper.c:1060
+#: transport-helper.c:1067
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr ""
 
-#: transport-helper.c:1065
+#: transport-helper.c:1072
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "helper %s insustenta 'force'"
 
-#: transport-helper.c:1112
+#: transport-helper.c:1119
 msgid "couldn't run fast-export"
 msgstr "incapaz executar fast-export"
 
-#: transport-helper.c:1117
+#: transport-helper.c:1124
 msgid "error while running fast-export"
 msgstr ""
 
-#: transport-helper.c:1142
+#: transport-helper.c:1149
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
 "Perhaps you should specify a branch.\n"
 msgstr ""
+"Sem refs em comum e nenhuma especificada; fazendo nada.\n"
+"Talvez devas especificar um ramo.\n"
 
-#: transport-helper.c:1224
+#: transport-helper.c:1231
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr "formato de objeto '%s' insustentado"
 
-#: transport-helper.c:1233
+#: transport-helper.c:1240
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "resposta em lista de ref malformada: %s"
 
-#: transport-helper.c:1385
+#: transport-helper.c:1392
 #, c-format
 msgid "read(%s) failed"
 msgstr ""
 
-#: transport-helper.c:1412
+#: transport-helper.c:1419
 #, c-format
 msgid "write(%s) failed"
 msgstr ""
 
-#: transport-helper.c:1461
+#: transport-helper.c:1468
 #, c-format
 msgid "%s thread failed"
 msgstr ""
 
-#: transport-helper.c:1465
+#: transport-helper.c:1472
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr ""
 
-#: transport-helper.c:1484 transport-helper.c:1488
+#: transport-helper.c:1491 transport-helper.c:1495
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr ""
 
-#: transport-helper.c:1525
+#: transport-helper.c:1532
 #, c-format
 msgid "%s process failed to wait"
 msgstr ""
 
-#: transport-helper.c:1529
+#: transport-helper.c:1536
 #, c-format
 msgid "%s process failed"
 msgstr ""
 
-#: transport-helper.c:1547 transport-helper.c:1556
+#: transport-helper.c:1554 transport-helper.c:1563
 msgid "can't start thread for copying data"
 msgstr ""
 
 #: transport.c:116
 #, c-format
 msgid "Would set upstream of '%s' to '%s' of '%s'\n"
-msgstr "Iria definir o ramo a montante de '%s' como '%s' de '%s'\n"
+msgstr "Iria definir upstream de '%s' para '%s' de '%s'\n"
 
-#: transport.c:145
+#: transport.c:138
 #, c-format
 msgid "could not read bundle '%s'"
-msgstr "incapaz ler conjunto '%s'"
+msgstr "incapaz ler arquivo-pacote '%s'"
 
-#: transport.c:223
+#: transport.c:234
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr "transporte: opção de profundidade '%s' inválida"
 
-#: transport.c:275
+#: transport.c:289
 msgid "see protocol.version in 'git help config' for more details"
 msgstr ""
 
-#: transport.c:276
+#: transport.c:290
 msgid "server options require protocol version 2 or later"
 msgstr ""
 
-#: transport.c:403
+#: transport.c:418
 msgid "server does not support wait-for-done"
 msgstr "Servidor insustenta wait-for-done"
 
-#: transport.c:755
+#: transport.c:770
 msgid "could not parse transport.color.* config"
 msgstr "incapaz processar config transport.color.*"
 
-#: transport.c:830
+#: transport.c:845
 msgid "support for protocol v2 not implemented yet"
 msgstr ""
 
-#: transport.c:965
+#: transport.c:978
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "valor para config '%s' desconhecido: %s"
 
-#: transport.c:1031
+#: transport.c:1044
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "transport '%s' proibido"
 
-#: transport.c:1084
+#: transport.c:1093
 msgid "git-over-rsync is no longer supported"
 msgstr ""
 
-#: transport.c:1187
+#: transport.c:1196
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
 "not be found on any remote:\n"
 msgstr ""
-"Os seguintes paths de submódulo contêm alterações que\n"
+"Os seguintes caminhos de submódulo contêm alterações que\n"
 "puderam ser encontradas em remoto nenhum:\n"
 
-#: transport.c:1191
+#: transport.c:1200
 #, c-format
 msgid ""
 "\n"
@@ -9132,22 +9581,22 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Por favor tente\n"
+"Por favor tenta\n"
 "\n"
 "\tgit push --recurse-submodules=on-demand\n"
 "\n"
-"ou cd para o caminho e use\n"
+"ou cd para o caminho e usa\n"
 "\n"
 "\tgit push\n"
 "\n"
-"para publicá-las no remoto.\n"
+"para atirá-los para um remoto.\n"
 "\n"
 
-#: transport.c:1199
+#: transport.c:1208
 msgid "Aborting."
 msgstr "Abortado."
 
-#: transport.c:1346
+#: transport.c:1354
 msgid "failed to push all needed submodules"
 msgstr "falhou ao atirar todos os submódulos necessários"
 
@@ -9167,197 +9616,215 @@ msgstr "nome de ficheiro vazio na entrada de árvore"
 msgid "too-short tree file"
 msgstr "ficheiro de árvore demasiado curto"
 
-#: unpack-trees.c:115
+#: unpack-trees.c:118
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
 "%%sPlease commit your changes or stash them before you switch branches."
 msgstr ""
-"As suas alterações locais nos seguintes ficheiros seriam substituídas ao "
-"extrair:\n"
-"%%sSubmeta as suas alterações ou esconda-as antes de trocar de ramo."
+"Tuas alterações locais nos seguintes ficheiros seriam sobrescritas ao fazer "
+"observação:\n"
+"%%sPor favor, memoriza as tuas alterações ou esconda-as antes de fazer troca "
+"de ramos."
 
-#: unpack-trees.c:117
+#: unpack-trees.c:120
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by checkout:\n"
 "%%s"
 msgstr ""
-"As suas alterações locais nos seguintes ficheiros seriam substituídas ao "
-"extrair:\n"
+"Tuas alterações locais nos seguintes ficheiros seriam sobrescritas ao fazer "
+"observação:\n"
 "%%s"
 
-#: unpack-trees.c:120
+#: unpack-trees.c:123
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
 "%%sPlease commit your changes or stash them before you merge."
 msgstr ""
-"As suas alterações locais nos seguintes ficheiros seriam substituídas ao "
-"integrar:\n"
-"%%sSubmeta as suas alterações ou esconda-as antes de integrar."
+"Tuas alterações locais nos seguintes ficheiros seriam sobrescritas ao fazer "
+"junção:\n"
+"%%sPor favor, memoriza as tuas alterações ou esconda-as antes de fazer "
+"junção."
 
-#: unpack-trees.c:122
+#: unpack-trees.c:125
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
 "%%s"
 msgstr ""
-"As suas alterações locais nos seguintes ficheiros seriam substituídas ao "
-"integrar:\n"
+"Tuas alterações locais nos seguintes ficheiros seriam sobrescritas ao fazer "
+"junção:\n"
 "%%s"
 
-#: unpack-trees.c:125
+#: unpack-trees.c:128
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
 "%%sPlease commit your changes or stash them before you %s."
 msgstr ""
-"As tuas alterações locais aos seguintes ficheiros seriam substituídas por "
+"Tuas alterações locais nos seguintes ficheiros seriam sobrescritas ao fazer "
 "%s:\n"
-"%%sPor favor, faz commit ou stash às alterações antes de fazer %s."
+"%%sPor favor, memoriza as tuas alterações ou esconde-as antes de fazer %s."
 
-#: unpack-trees.c:127
+#: unpack-trees.c:130
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by %s:\n"
 "%%s"
 msgstr ""
-"As suas alterações locais nos seguintes ficheiros seriam substituídas por "
+"Tuas alterações locais nos seguintes ficheiros seriam sobrescritas ao fazer "
 "%s:\n"
 "%%s"
 
-#: unpack-trees.c:132
+#: unpack-trees.c:135
 #, c-format
 msgid ""
 "Updating the following directories would lose untracked files in them:\n"
 "%s"
 msgstr ""
-"Atualizar as seguintes pastas fará perder os seus ficheiros por seguir:\n"
+"Atualizando as seguintes pastas fará perder seus ficheiros "
+"desmonitorizados:\n"
+"%s"
+
+#: unpack-trees.c:138
+#, c-format
+msgid ""
+"Refusing to remove the current working directory:\n"
+"%s"
+msgstr ""
+"Recusando remover a pasta-trabalho actual:\n"
 "%s"
 
-#: unpack-trees.c:136
+#: unpack-trees.c:142
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
 "%%sPlease move or remove them before you switch branches."
 msgstr ""
-"Os seguintes ficheiros por seguir da worktree seriam removidos no checkout:\n"
-"%%sPor favor, move ou remove-os antes de trocar de ramos."
+"Os seguintes ficheiros desmonitorizados da árvore-trabalho seriam removidos "
+"ao fazer observação:\n"
+"%%sPor favor, move ou remove-os antes de fazer troca de ramos."
 
-#: unpack-trees.c:138
+#: unpack-trees.c:144
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by checkout:\n"
 "%%s"
 msgstr ""
-"Os seguintes ficheiros por seguir da worktree seriam removidos no checkout:\n"
+"Os seguintes ficheiros desmonitorizados da árvore-trabalho seriam removidos "
+"ao fazer observação:\n"
 "%%s"
 
-#: unpack-trees.c:141
+#: unpack-trees.c:147
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
 "%%sPlease move or remove them before you merge."
 msgstr ""
-"Os seguintes ficheiros por seguir da worktree seriam removidos por uma "
-"junção:\n"
-"%%sPor favor, move ou remove-os antes da junção."
+"Os seguintes ficheiros desmonitorizados da árvore-trabalho seriam removidos "
+"ao fazer junção:\n"
+"%%sPor favor, move ou remove-os antes de fazer junção."
 
-#: unpack-trees.c:143
+#: unpack-trees.c:149
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by merge:\n"
 "%%s"
 msgstr ""
-"Os seguintes ficheiros por seguir da worktree seriam removidos pela junção:\n"
+"Os seguintes ficheiros desmonitorizados da árvore-trabalho seriam removidos "
+"ao fazer junção:\n"
 "%%s"
 
-#: unpack-trees.c:146
+#: unpack-trees.c:152
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
 "%%sPlease move or remove them before you %s."
 msgstr ""
-"Os seguintes ficheiros por seguir da worktree seriam removidos por %s:\n"
+"Os seguintes ficheiros desmonitorizados da árvore-trabalho seriam removidos "
+"ao fazer %s:\n"
 "%%sPor favor, move ou remove-os antes de fazer %s."
 
-#: unpack-trees.c:148
+#: unpack-trees.c:154
 #, c-format
 msgid ""
 "The following untracked working tree files would be removed by %s:\n"
 "%%s"
 msgstr ""
-"Os seguintes ficheiros por seguir da árvore de trabalho seriam removidos por "
-"%s:\n"
+"Os seguintes ficheiros desmonitorizados da árvore-trabalho seriam removidos "
+"ao fazer %s:\n"
 "%%s"
 
-#: unpack-trees.c:154
+#: unpack-trees.c:160
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
 "checkout:\n"
 "%%sPlease move or remove them before you switch branches."
 msgstr ""
-"Os seguintes ficheiros por seguir da árvore de trabalho seriam substituídos "
-"por um checkout:\n"
-"%%sPor favor, move ou remove-os antes de trocar de ramos."
+"Os seguintes ficheiros desmonitorizados da árvore-trabalho seriam "
+"sobrescritos ao observar:\n"
+"%%sPor favor, move ou remove-os antes de fazer troca de ramos."
 
-#: unpack-trees.c:156
+#: unpack-trees.c:162
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by "
 "checkout:\n"
 "%%s"
 msgstr ""
-"Os seguintes ficheiros por seguir da worktree seriam sobrescritos por "
-"checkout:\n"
+"Os seguintes ficheiros desmonitorizados da árvore-trabalho seriam "
+"sobrescritos ao fazer observação:\n"
 "%%s"
 
-#: unpack-trees.c:159
+#: unpack-trees.c:165
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
 "%%sPlease move or remove them before you merge."
 msgstr ""
-"Os seguintes ficheiros por seguir da worktree seriam sobrescritos por "
-"junção:\n"
-"%%sPor favor, move ou remove-os antes de juntares."
+"Os seguintes ficheiros desmonitorizados da árvore-trabalho seriam "
+"sobrescritos ao fazer junção:\n"
+"%%sPor favor, move ou remove-os antes de fazer junção."
 
-#: unpack-trees.c:161
+#: unpack-trees.c:167
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by merge:\n"
 "%%s"
 msgstr ""
-"Os seguintes ficheiros por seguir da worktree seriam sobrescritos por "
-"junção:\n"
+"Os seguintes ficheiros desmonitorizados da árvore-trabalho seriam "
+"sobrescritos ao fazer junção:\n"
 "%%s"
 
-#: unpack-trees.c:164
+#: unpack-trees.c:170
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
 "%%sPlease move or remove them before you %s."
 msgstr ""
-"Os seguintes ficheiros por seguir da worktree seriam sobrescritos por %s:\n"
+"Os seguintes ficheiros desmonitorizados da árvore-trabalho seriam "
+"sobrescritos ao fazer %s:\n"
 "%%sPor favor, move ou remove-os antes de fazer %s."
 
-#: unpack-trees.c:166
+#: unpack-trees.c:172
 #, c-format
 msgid ""
 "The following untracked working tree files would be overwritten by %s:\n"
 "%%s"
 msgstr ""
-"Os seguintes ficheiros por seguir da worktree seriam sobrescritos por %s:\n"
+"Os seguintes ficheiros desmonitorizados da árvore-trabalho seriam "
+"sobrescritos ao fazer %s:\n"
 "%%s"
 
-#: unpack-trees.c:174
+#: unpack-trees.c:180
 #, c-format
 msgid "Entry '%s' overlaps with '%s'.  Cannot bind."
 msgstr "Entrada '%s' sobrepõe-se a '%s'. Impossível vincular."
 
-#: unpack-trees.c:177
+#: unpack-trees.c:183
 #, c-format
 msgid ""
 "Cannot update submodule:\n"
@@ -9366,7 +9833,7 @@ msgstr ""
 "Impossível atualizar submódulo:\n"
 "%s"
 
-#: unpack-trees.c:180
+#: unpack-trees.c:186
 #, c-format
 msgid ""
 "The following paths are not up to date and were left despite sparse "
@@ -9374,7 +9841,7 @@ msgid ""
 "%s"
 msgstr ""
 
-#: unpack-trees.c:182
+#: unpack-trees.c:188
 #, c-format
 msgid ""
 "The following paths are unmerged and were left despite sparse patterns:\n"
@@ -9384,7 +9851,7 @@ msgstr ""
 "patterns:\n"
 "%s"
 
-#: unpack-trees.c:184
+#: unpack-trees.c:190
 #, c-format
 msgid ""
 "The following paths were already present and thus not updated despite sparse "
@@ -9392,41 +9859,41 @@ msgid ""
 "%s"
 msgstr ""
 
-#: unpack-trees.c:264
+#: unpack-trees.c:270
 #, c-format
 msgid "Aborting\n"
 msgstr "A abortar\n"
 
-#: unpack-trees.c:291
+#: unpack-trees.c:297
 #, c-format
 msgid ""
 "After fixing the above paths, you may want to run `git sparse-checkout "
 "reapply`.\n"
 msgstr ""
 
-#: unpack-trees.c:352
+#: unpack-trees.c:358
 msgid "Updating files"
 msgstr "Atualizando ficheiros"
 
-#: unpack-trees.c:384
+#: unpack-trees.c:390
 msgid ""
 "the following paths have collided (e.g. case-sensitive paths\n"
 "on a case-insensitive filesystem) and only one from the same\n"
 "colliding group is in the working tree:\n"
 msgstr ""
 
-#: unpack-trees.c:1618
+#: unpack-trees.c:1664
 msgid "Updating index flags"
 msgstr "Atualizando flags de cenário"
 
-#: unpack-trees.c:2718
+#: unpack-trees.c:2925
 #, c-format
 msgid "worktree and untracked commit have duplicate entries: %s"
 msgstr ""
 
-#: upload-pack.c:1548
+#: upload-pack.c:1579
 msgid "expected flush after fetch arguments"
-msgstr ""
+msgstr "esperado flush após argumentos de busca"
 
 #: urlmatch.c:163
 msgid "invalid URL scheme name or missing '://' suffix"
@@ -9461,119 +9928,144 @@ msgstr "segmento de caminho '..' inválido"
 msgid "Fetching objects"
 msgstr "Buscando objetos"
 
-#: worktree.c:236 builtin/am.c:2152
+#: worktree.c:237 builtin/am.c:2210 builtin/bisect--helper.c:156
 #, c-format
 msgid "failed to read '%s'"
 msgstr "falha ao ler '%s'"
 
-#: worktree.c:303
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr ""
 
-#: worktree.c:314
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr ""
 
-#: worktree.c:326
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr "'%s' é inexistente"
 
-#: worktree.c:332
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr "'%s' é ficheiro .git nenhum, código de erro %d"
 
-#: worktree.c:341
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "'%s' aponta para algo diferente de '%s'"
 
-#: worktree.c:603
+#: worktree.c:600
 msgid "not a directory"
 msgstr "é pasta nenhuma"
 
-#: worktree.c:612
+#: worktree.c:609
 msgid ".git is not a file"
 msgstr ".git é ficheiro nenhum"
 
-#: worktree.c:614
+#: worktree.c:611
 msgid ".git file broken"
 msgstr ""
 
-#: worktree.c:616
+#: worktree.c:613
 msgid ".git file incorrect"
 msgstr ""
 
-#: worktree.c:722
+#: worktree.c:719
 msgid "not a valid path"
 msgstr ""
 
-#: worktree.c:728
+#: worktree.c:725
 msgid "unable to locate repository; .git is not a file"
 msgstr "incapaz localizar repositório; .git é ficheiro nenhum"
 
-#: worktree.c:732
+#: worktree.c:729
 msgid "unable to locate repository; .git file does not reference a repository"
-msgstr "incapaz localizar repositório; ficheiro .git referência repositório nenhum"
+msgstr ""
+"incapaz localizar repositório; ficheiro .git referência repositório nenhum"
 
-#: worktree.c:736
+#: worktree.c:733
 msgid "unable to locate repository; .git file broken"
 msgstr "incapaz localizar repositório; ficheiro .git está quebrado"
 
-#: worktree.c:742
+#: worktree.c:739
 msgid "gitdir unreadable"
-msgstr ""
+msgstr "incapaz ler pasta-git"
 
-#: worktree.c:746
+#: worktree.c:743
 msgid "gitdir incorrect"
-msgstr ""
+msgstr "past-git incorreta"
 
-#: worktree.c:771
+#: worktree.c:768
 msgid "not a valid directory"
-msgstr ""
+msgstr "pasta inválida"
 
-#: worktree.c:777
+#: worktree.c:774
 msgid "gitdir file does not exist"
-msgstr "ficheiro gitdir é inexistente"
+msgstr "ficheiro de pasta-git é inexistente"
 
-#: worktree.c:782 worktree.c:791
+#: worktree.c:779 worktree.c:788
 #, c-format
 msgid "unable to read gitdir file (%s)"
-msgstr "incapaz ler ficheiro gitdir (%s)"
+msgstr "incapaz ler ficheiro de pasta-git (%s)"
 
-#: worktree.c:801
+#: worktree.c:798
 #, c-format
 msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
 msgstr ""
 
-#: worktree.c:809
+#: worktree.c:806
 msgid "invalid gitdir file"
-msgstr "ficheiro gitdir inválido"
+msgstr "ficheiro de pasta-git inválido"
 
-#: worktree.c:817
+#: worktree.c:814
 msgid "gitdir file points to non-existent location"
-msgstr "ficheiro gitdir aponta para localização inexistente"
+msgstr "ficheiro de pasta-git aponta para localização inexistente"
+
+#: worktree.c:830
+#, c-format
+msgid "unable to set %s in '%s'"
+msgstr "incapaz definir %s em '%s'"
+
+#: worktree.c:832
+#, c-format
+msgid "unable to unset %s in '%s'"
+msgstr "incapaz de indefinir %s em '%s'"
+
+#: worktree.c:852
+msgid "failed to set extensions.worktreeConfig setting"
+msgstr ""
+
+#: wrapper.c:161
+#, c-format
+msgid "could not setenv '%s'"
+msgstr "incapaz setenv '%s'"
+
+#: wrapper.c:213
+#, c-format
+msgid "unable to create '%s'"
+msgstr "incapaz criar '%s'"
 
-#: wrapper.c:197 wrapper.c:367
+#: wrapper.c:215 wrapper.c:385
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr "incapaz abrir '%s' para leitura e escrita"
 
-#: wrapper.c:398 wrapper.c:599
+#: wrapper.c:416 wrapper.c:683
 #, c-format
 msgid "unable to access '%s'"
 msgstr "incapaz aceder '%s'"
 
-#: wrapper.c:607
+#: wrapper.c:691
 msgid "unable to get current working directory"
-msgstr "incapaz obter pasta atual de trabalho"
+msgstr "incapaz obter pasta-trabalho atual"
 
 #: wt-status.c:158
 msgid "Unmerged paths:"
-msgstr "Paths por juntar:"
+msgstr "Caminhos por juntar:"
 
 #: wt-status.c:187 wt-status.c:219
 msgid "  (use \"git restore --staged <file>...\" to unstage)"
@@ -9582,7 +10074,8 @@ msgstr "  (usa \"git restore --staged <ficheiro>...\" para desencenar)"
 #: wt-status.c:190 wt-status.c:222
 #, c-format
 msgid "  (use \"git restore --source=%s --staged <file>...\" to unstage)"
-msgstr "  (usa \"git restore --source=%s --staged <ficheiro>...\" para desencenar)"
+msgstr ""
+"  (usa \"git restore --source=%s --staged <ficheiro>...\" para desencenar)"
 
 #: wt-status.c:193 wt-status.c:225
 msgid "  (use \"git rm --cached <file>...\" to unstage)"
@@ -9602,13 +10095,13 @@ msgstr ""
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr "  (usa \"git rm <ficheiro>...\" para marcar como resolvido)"
 
-#: wt-status.c:211 wt-status.c:1125
+#: wt-status.c:211 wt-status.c:1140
 msgid "Changes to be committed:"
-msgstr "Alterações para serem submetidas:"
+msgstr "Alterações para serem memorizadas:"
 
-#: wt-status.c:234 wt-status.c:1134
+#: wt-status.c:234 wt-status.c:1149
 msgid "Changes not staged for commit:"
-msgstr "Alterações por preparar para commit:"
+msgstr "Alterações por encenar para memória:"
 
 #: wt-status.c:238
 msgid "  (use \"git add <file>...\" to update what will be committed)"
@@ -9616,18 +10109,21 @@ msgstr "  (usa \"git add <ficheiro>...\" para atualizar o que será memorizado)"
 
 #: wt-status.c:240
 msgid "  (use \"git add/rm <file>...\" to update what will be committed)"
-msgstr "  (usa \"git add/rm <ficheiro>...\" para atualizar o que será memorizado)"
+msgstr ""
+"  (usa \"git add/rm <ficheiro>...\" para atualizar o que será memorizado)"
 
 #: wt-status.c:241
 msgid ""
 "  (use \"git restore <file>...\" to discard changes in working directory)"
 msgstr ""
-"  (usa \"git restore <ficheiro>...\" para descartar alterações da pasta-trabalho)"
+"  (usa \"git restore <ficheiro>...\" para descartar alterações da pasta-"
+"trabalho)"
 
 #: wt-status.c:243
 msgid "  (commit or discard the untracked or modified content in submodules)"
 msgstr ""
-"  (memoriza ou descarta os desmonitorizados ou o conteúdo modificado de submódulos)"
+"  (memoriza ou descarta os desmonitorizados ou o conteúdo modificado de "
+"submódulos)"
 
 #: wt-status.c:254
 #, c-format
@@ -9680,7 +10176,7 @@ msgstr "modificado:"
 
 #: wt-status.c:296
 msgid "renamed:"
-msgstr "nome mudado:"
+msgstr "renomeado:"
 
 #: wt-status.c:298
 msgid "typechange:"
@@ -9696,7 +10192,7 @@ msgstr "por juntar:"
 
 #: wt-status.c:382
 msgid "new commits, "
-msgstr "novos commits, "
+msgstr "novas memórias, "
 
 #: wt-status.c:384
 msgid "modified content, "
@@ -9704,24 +10200,24 @@ msgstr "conteúdo modificado, "
 
 #: wt-status.c:386
 msgid "untracked content, "
-msgstr "conteúdo por seguir, "
+msgstr "conteúdo desmonitorizado, "
 
-#: wt-status.c:958
+#: wt-status.c:973
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] "Teu esconderijo neste momento tem %d entrada"
 msgstr[1] "Teu esconderijo neste momento tem %d entradas"
 
-#: wt-status.c:989
+#: wt-status.c:1004
 msgid "Submodules changed but not updated:"
 msgstr "Submódulos alterados mas desatualizados:"
 
-#: wt-status.c:991
+#: wt-status.c:1006
 msgid "Submodule changes to be committed:"
-msgstr "Alterações em submódulos para serem submetidas:"
+msgstr "Alterações em submódulos para serem memorizadas:"
 
-#: wt-status.c:1073
+#: wt-status.c:1088
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -9729,533 +10225,549 @@ msgstr ""
 "Deixe estar a linha acima.\n"
 "Tudo abaixo será ignorado."
 
-#: wt-status.c:1165
+#: wt-status.c:1180
 #, c-format
 msgid ""
 "\n"
 "It took %.2f seconds to compute the branch ahead/behind values.\n"
 "You can use '--no-ahead-behind' to avoid this.\n"
 msgstr ""
+"\n"
+"Demorou %.2f segundos para processar os valores à frente e atrás do ramo.\n"
+"Para evitar isto, podes usar '--no-ahead-behind'.\n"
 
-#: wt-status.c:1195
+#: wt-status.c:1210
 msgid "You have unmerged paths."
-msgstr "Tens paths por juntar."
+msgstr "Tens caminhos por juntar."
 
-#: wt-status.c:1198
+#: wt-status.c:1213
 msgid "  (fix conflicts and run \"git commit\")"
-msgstr "  (corrija os conflitos e execute \"git commit\")"
+msgstr "  (corrige conflitos e executa \"git commit\")"
 
-#: wt-status.c:1200
+#: wt-status.c:1215
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (usa \"git merge --abort\" para abortar a junção)"
 
-#: wt-status.c:1204
+#: wt-status.c:1219
 msgid "All conflicts fixed but you are still merging."
-msgstr "Todos os conflitos foram corrigidos mas ainda está a integrar."
+msgstr "Todos os conflitos foram corrigidos mas ainda estás juntando."
 
-#: wt-status.c:1207
+#: wt-status.c:1222
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (usa \"git commit\" para concluir a junção)"
 
-#: wt-status.c:1216
+#: wt-status.c:1233
 msgid "You are in the middle of an am session."
-msgstr "Sessão am em curso."
+msgstr "Estás no meio de uma sessão am."
 
-#: wt-status.c:1219
+#: wt-status.c:1236
 msgid "The current patch is empty."
 msgstr "O remendo atual está vazio."
 
-#: wt-status.c:1223
+#: wt-status.c:1241
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (corrige os conflitos e executa \"git am --continue\")"
 
-#: wt-status.c:1225
+#: wt-status.c:1243
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (usa \"git am --skip\" para ignorar este remendo)"
 
-#: wt-status.c:1227
+#: wt-status.c:1246
+msgid ""
+"  (use \"git am --allow-empty\" to record this patch as an empty commit)"
+msgstr ""
+"  (usa \"git am --allow-empty\" para gravar este remendo como uma memória "
+"vazia)"
+
+#: wt-status.c:1248
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr "  (usa \"git am --abort\" para restaurar o ramo original)"
 
-#: wt-status.c:1360
+#: wt-status.c:1381
 msgid "git-rebase-todo is missing."
 msgstr "git-rebase-todo está faltando."
 
-#: wt-status.c:1362
+#: wt-status.c:1383
 msgid "No commands done."
 msgstr "Comando nenhum concluído."
 
-#: wt-status.c:1365
+#: wt-status.c:1386
 #, c-format
-msgid "Last command done (%d command done):"
-msgid_plural "Last commands done (%d commands done):"
-msgstr[0] "Último comando concluído (%d comando concluído):"
-msgstr[1] "Últimos comandos concluídos (%d comandos concluídos):"
+msgid "Last command done (%<PRIuMAX> command done):"
+msgid_plural "Last commands done (%<PRIuMAX> commands done):"
+msgstr[0] "Último comando concluído (%<PRIuMAX> comando concluído):"
+msgstr[1] "Últimos comandos concluídos (%<PRIuMAX> comandos concluídos):"
 
-#: wt-status.c:1376
+#: wt-status.c:1397
 #, c-format
 msgid "  (see more in file %s)"
-msgstr "  (veja mais no ficheiro %s)"
+msgstr "  (vê mais no ficheiro %s)"
 
-#: wt-status.c:1381
+#: wt-status.c:1402
 msgid "No commands remaining."
-msgstr "Nenhum comando por concluir."
+msgstr "Faltando comando nenhum."
 
-#: wt-status.c:1384
+#: wt-status.c:1405
 #, c-format
-msgid "Next command to do (%d remaining command):"
-msgid_plural "Next commands to do (%d remaining commands):"
-msgstr[0] "Próximo comando a executar (%d comando restante):"
-msgstr[1] "Próximos comandos a executar (%d comandos restantes):"
+msgid "Next command to do (%<PRIuMAX> remaining command):"
+msgid_plural "Next commands to do (%<PRIuMAX> remaining commands):"
+msgstr[0] "Próximo comando a executar (%<PRIuMAX> comando restante):"
+msgstr[1] "Próximos comandos a executar (%<PRIuMAX> comandos restantes):"
 
-#: wt-status.c:1392
+#: wt-status.c:1413
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr "  (usa \"git rebase --edit-todo\" para visualizar e editar)"
 
-#: wt-status.c:1404
+#: wt-status.c:1425
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
-msgstr "Está a realizar rebase do ramo '%s' sobre '%s'."
+msgstr "Estás rebaseando ramo '%s' sobre '%s'."
 
-#: wt-status.c:1409
+#: wt-status.c:1430
 msgid "You are currently rebasing."
-msgstr "Está a rebasear neste momento."
+msgstr "Estás rebaseando neste momento."
 
-#: wt-status.c:1422
+#: wt-status.c:1443
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr "  (corrige os conflitos e executa \"git rebase --continue\")"
 
-#: wt-status.c:1424
+#: wt-status.c:1445
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (usa \"git rebase --skip\" para ignorar este remendo)"
 
-#: wt-status.c:1426
+#: wt-status.c:1447
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr "  (usa \"git rebase --abort\" para observar o ramo original)"
 
-#: wt-status.c:1433
+#: wt-status.c:1454
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
-msgstr "  (todos os conflitos corrigidos: executa \"git rebase --continue\")"
+msgstr "  (todos conflitos corrigidos: executa \"git rebase --continue\")"
 
-#: wt-status.c:1437
+#: wt-status.c:1458
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
-msgstr ""
-"Está a dividir um commit ao mesmo tempo que se efetua rebase do ramo '%s' "
-"sobre '%s'."
+msgstr "Estás dividindo uma memória enquanto rebaseas ramo '%s' sobre '%s'."
 
-#: wt-status.c:1442
+#: wt-status.c:1463
 msgid "You are currently splitting a commit during a rebase."
-msgstr "Está a dividir um commit durante um rebase."
+msgstr "Está dividindo uma memória durante um rebaseamento."
 
-#: wt-status.c:1445
+#: wt-status.c:1466
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr ""
-"  (Assim que a pasta-trabalho estiver limpa, executa \"git rebase --continue\")"
+"  (Assim que a pasta-trabalho estiver limpa, executa \"git rebase --continue"
+"\")"
 
-#: wt-status.c:1449
+#: wt-status.c:1470
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
-msgstr ""
-"Está a editar um commit ao mesmo tempo que efetua rebase do ramo '%s' sobre "
-"'%s'."
+msgstr "Estás a editar uma memória enquanto rebaseas o ramo '%s' sobre '%s'."
 
-#: wt-status.c:1454
+#: wt-status.c:1475
 msgid "You are currently editing a commit during a rebase."
-msgstr "Está a editar um commit durante um rebase."
+msgstr "Está a editar uma memória durante um rebaseamento."
 
-#: wt-status.c:1457
+#: wt-status.c:1478
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr "  (usa \"git commit --amend\" para emendar a memória atual)"
 
-#: wt-status.c:1459
+#: wt-status.c:1480
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr ""
-"  (use \"git rebase --continue\" assim que estiver satisfeito com as "
+"  (usa \"git rebase --continue\" assim que estiveres satisfeito com as tuas "
 "alterações)"
 
-#: wt-status.c:1470
+#: wt-status.c:1491
 msgid "Cherry-pick currently in progress."
 msgstr "Cherry-pick atualmente em curso"
 
-#: wt-status.c:1473
+#: wt-status.c:1494
 #, c-format
 msgid "You are currently cherry-picking commit %s."
-msgstr "Está a realizar cherry-pick do commit %s."
+msgstr "Estás apanhando memória %s."
 
-#: wt-status.c:1480
+#: wt-status.c:1501
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr "  (corrige conflitos e executa \"git cherry-pick --continue\")"
 
-#: wt-status.c:1483
+#: wt-status.c:1504
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (executa \"git cherry-pick --continue\" para continuar)"
 
-#: wt-status.c:1486
+#: wt-status.c:1507
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
-msgstr ""
-"  (todos conflitos corrigidos: executa \"git cherry-pick --continue\")"
+msgstr "  (todos conflitos corrigidos: executa \"git cherry-pick --continue\")"
 
-#: wt-status.c:1488
+#: wt-status.c:1509
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
-msgstr "  (usa \"git cherry-pick --skip\" para ignorar este remendo)"
+msgstr "  (usa \"git cherry-pick --skip\" para saltar este remendo)"
 
-#: wt-status.c:1490
+#: wt-status.c:1511
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
-msgstr ""
-"  (usa \"git cherry-pick --abort\" para cancelar a operação cherry-pick)"
+msgstr "  (usa \"git cherry-pick --abort\" para cancelar a operação apanhar)"
 
-#: wt-status.c:1500
+#: wt-status.c:1521
 msgid "Revert currently in progress."
 msgstr "Reversão atualmente em curso."
 
-#: wt-status.c:1503
+#: wt-status.c:1524
 #, c-format
 msgid "You are currently reverting commit %s."
-msgstr "Está a reverter o commit %s neste comento."
+msgstr "Estás atualmente revertendo memória %s."
 
-#: wt-status.c:1509
+#: wt-status.c:1530
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (corrige os conflitos e executa \"git revert --continue\")"
 
-#: wt-status.c:1512
+#: wt-status.c:1533
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (executa \"git revert --continue\" para continuar)"
 
-#: wt-status.c:1515
+#: wt-status.c:1536
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (todos conflitos corrigidos: executa \"git revert --continue\")"
 
-#: wt-status.c:1517
+#: wt-status.c:1538
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr "  (usa \"git revert --skip\" para ignorar este remendo)"
 
-#: wt-status.c:1519
+#: wt-status.c:1540
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (usa \"git revert --abort\" para cancelar a operação de reversão)"
 
-#: wt-status.c:1529
+#: wt-status.c:1550
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
-msgstr "Está a bissetar, iniciado a partir do ramo '%s'."
+msgstr "Estás bissetando, iniciado no ramo '%s'."
 
-#: wt-status.c:1533
+#: wt-status.c:1554
 msgid "You are currently bisecting."
-msgstr "Estás a bissetar neste momento."
+msgstr "Estás bissetando neste momento."
 
-#: wt-status.c:1536
+#: wt-status.c:1557
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (usa \"git bisect reset\" para voltar ao ramo original)"
 
-#: wt-status.c:1547
+#: wt-status.c:1568
 msgid "You are in a sparse checkout."
 msgstr "Estás numa observação dispersa."
 
-#: wt-status.c:1550
+#: wt-status.c:1571
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
 msgstr ""
 
-#: wt-status.c:1794
+#: wt-status.c:1815
 msgid "On branch "
 msgstr "Em ramo "
 
-#: wt-status.c:1801
+#: wt-status.c:1822
 msgid "interactive rebase in progress; onto "
 msgstr "rebase interativo em curso; sobre "
 
-#: wt-status.c:1803
+#: wt-status.c:1824
 msgid "rebase in progress; onto "
 msgstr "rebase em curso; sobre "
 
-#: wt-status.c:1808
+#: wt-status.c:1829
 msgid "HEAD detached at "
-msgstr "HEAD destacada em "
+msgstr "HEAD desanexada em "
 
-#: wt-status.c:1810
+#: wt-status.c:1831
 msgid "HEAD detached from "
-msgstr "HEAD destacada de "
+msgstr "HEAD desanexada de "
 
-#: wt-status.c:1813
+#: wt-status.c:1834
 msgid "Not currently on any branch."
 msgstr "Atualmente em ramo nenhum."
 
-#: wt-status.c:1830
+#: wt-status.c:1851
 msgid "Initial commit"
 msgstr "Memória inicial"
 
-#: wt-status.c:1831
+#: wt-status.c:1852
 msgid "No commits yet"
-msgstr "Ainda commits nenhuns"
+msgstr "Ainda sem memórias"
 
-#: wt-status.c:1845
+#: wt-status.c:1866
 msgid "Untracked files"
-msgstr "Ficheiros por seguir"
+msgstr "Ficheiros desmonitorizados"
 
-#: wt-status.c:1847
+#: wt-status.c:1868
 msgid "Ignored files"
 msgstr "Ficheiros ignorados"
 
-#: wt-status.c:1851
+#: wt-status.c:1872
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
 "may speed it up, but you have to be careful not to forget to add\n"
 "new files yourself (see 'git help status')."
 msgstr ""
-"A enumeração dos ficheiros por controlar  demorou %.2f segundos.\n"
-"'status -uno' pode-o acelerar, mas tens de te lembrar de adicionares\n"
+"A enumeração dos ficheiros desmonitorizados demorou %.2f segundos.\n"
+"'status -uno' pode acelerá-lo, mas tens de te lembrar de adicionar\n"
 "os novos ficheiros (vê 'git help status')."
 
-#: wt-status.c:1857
+#: wt-status.c:1878
 #, c-format
 msgid "Untracked files not listed%s"
-msgstr "Ficheiros por seguir fora da listagem%s"
+msgstr "Ficheiros desmonitorizados fora da listagem%s"
 
-#: wt-status.c:1859
+#: wt-status.c:1880
 msgid " (use -u option to show untracked files)"
-msgstr " (usa opção -u para mostrar ficheiros por seguir)"
+msgstr " (usa opção -u para mostrar ficheiros desmonitorizados)"
 
-#: wt-status.c:1865
+#: wt-status.c:1886
 msgid "No changes"
 msgstr "Sem alterações"
 
-#: wt-status.c:1870
+#: wt-status.c:1891
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
-"foi adicionado a memória alteração nenhuma (usa \"git add\" e/ou \"git commit "
-"-a\")\n"
+"foi adicionado a memória alteração nenhuma (usa \"git add\" e/ou \"git "
+"commit -a\")\n"
 
-#: wt-status.c:1874
+#: wt-status.c:1895
 #, c-format
 msgid "no changes added to commit\n"
-msgstr "foi adicionado a commit alteração nenhuma\n"
+msgstr "foi adicionado a memória alteração nenhuma\n"
 
-#: wt-status.c:1878
+#: wt-status.c:1899
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
 "track)\n"
 msgstr ""
-"nada adicionado para commit mas há ficheiros por seguir presentes (usa(\"git "
-"add\" para seguir)\n"
+"nada adicionado a memória mas há ficheiros desmonitorizados presentes (usa "
+"\"git add\" para monitorizar)\n"
 
-#: wt-status.c:1882
+#: wt-status.c:1903
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
-msgstr "nada adicionado para commit mas ficheiros por seguir presentes\n"
+msgstr ""
+"nada adicionado a memória mas há ficheiros desmonitorizados presentes\n"
 
-#: wt-status.c:1886
+#: wt-status.c:1907
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
-msgstr "nada a commit (cria/copia ficheiros e usa \"git add\" para seguir)\n"
+msgstr ""
+"nada a memorizar (cria/copia ficheiros e usa \"git add\" para monitorizar)\n"
 
-#: wt-status.c:1890 wt-status.c:1896
+#: wt-status.c:1911 wt-status.c:1917
 #, c-format
 msgid "nothing to commit\n"
-msgstr "nada a commit\n"
+msgstr "nada a memorizar\n"
 
-#: wt-status.c:1893
+#: wt-status.c:1914
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
-msgstr "nada a commit (use -u para mostrar ficheiros por seguir)\n"
+msgstr "nada a memorizar (usa -u para mostrar ficheiros desmonitorizados)\n"
 
-#: wt-status.c:1898
+#: wt-status.c:1919
 #, c-format
 msgid "nothing to commit, working tree clean\n"
-msgstr "nada a commitar, worktree limpa\n"
+msgstr "nada a memorizar, árvore-trabalho limpa\n"
 
-#: wt-status.c:2003
+#: wt-status.c:2024
 msgid "No commits yet on "
 msgstr "Memórias nenhumas em "
 
-#: wt-status.c:2007
+#: wt-status.c:2028
 msgid "HEAD (no branch)"
 msgstr "HEAD (ramo nenhum)"
 
-#: wt-status.c:2038
+#: wt-status.c:2059
 msgid "different"
 msgstr "diferente"
 
-#: wt-status.c:2040 wt-status.c:2048
+#: wt-status.c:2061 wt-status.c:2069
 msgid "behind "
 msgstr "atrás "
 
-#: wt-status.c:2043 wt-status.c:2046
+#: wt-status.c:2064 wt-status.c:2067
 msgid "ahead "
 msgstr "à frente "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2569
+#: wt-status.c:2605
 #, c-format
 msgid "cannot %s: You have unstaged changes."
-msgstr "incapaz efetuar %s: Tens alterações despreparadas."
+msgstr "incapaz efetuar %s: Tens alterações desencenadas."
 
-#: wt-status.c:2575
+#: wt-status.c:2611
 msgid "additionally, your index contains uncommitted changes."
-msgstr "além disso, teu index contém alterações por memorizar."
+msgstr "além disso, teu cenário contém alterações por memorizar."
 
-#: wt-status.c:2577
+#: wt-status.c:2613
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
-msgstr "incapaz efetuar %s: teu index contém alterações por memorizar."
+msgstr "incapaz efetuar %s: Teu cenário contém alterações por memorizar."
 
-#: compat/simple-ipc/ipc-unix-socket.c:182
+#: compat/simple-ipc/ipc-unix-socket.c:205
 msgid "could not send IPC command"
 msgstr "incapaz enviar comando IPC"
 
-#: compat/simple-ipc/ipc-unix-socket.c:189
+#: compat/simple-ipc/ipc-unix-socket.c:212
 msgid "could not read IPC response"
 msgstr "incapaz de ler resposta IPC"
 
-#: compat/simple-ipc/ipc-unix-socket.c:866
+#: compat/simple-ipc/ipc-unix-socket.c:892
 #, c-format
 msgid "could not start accept_thread '%s'"
 msgstr ""
 
-#: compat/simple-ipc/ipc-unix-socket.c:878
+#: compat/simple-ipc/ipc-unix-socket.c:904
 #, c-format
 msgid "could not start worker[0] for '%s'"
 msgstr "incapaz começar worker[0] para '%s'"
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:461
+#: compat/precompose_utf8.c:58 builtin/clone.c:353
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "falha ao unlink '%s'"
 
+#: compat/fsmonitor/fsm-listen-darwin.c:355
+msgid "Unable to create FSEventStream."
+msgstr "Incapaz criar FSEventStream."
+
+#: compat/fsmonitor/fsm-listen-darwin.c:403
+msgid "Failed to start the FSEventStream"
+msgstr "Falhou ao iniciar o FSEventStream"
+
 #: builtin/add.c:26
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<opções>] [--] <espetro-caminho>..."
 
-#: builtin/add.c:61
+#: builtin/add.c:63
 #, c-format
 msgid "cannot chmod %cx '%s'"
 msgstr "incapaz chmod %cx '%s'"
 
-#: builtin/add.c:99
+#: builtin/add.c:105
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "diff status inesperado %c"
 
-#: builtin/add.c:104 builtin/commit.c:297
+#: builtin/add.c:110 builtin/commit.c:299
 msgid "updating files failed"
 msgstr "falhou ao atualizar ficheiros"
 
-#: builtin/add.c:114
+#: builtin/add.c:120
 #, c-format
 msgid "remove '%s'\n"
 msgstr "remove '%s'\n"
 
-#: builtin/add.c:198
+#: builtin/add.c:204
 msgid "Unstaged changes after refreshing the index:"
-msgstr "Alterações despreparadas após refrescar index:"
+msgstr "Alterações desencenadas após refrescar cenário:"
 
-#: builtin/add.c:307 builtin/rev-parse.c:993
+#: builtin/add.c:312 builtin/rev-parse.c:993
 msgid "Could not read the index"
-msgstr "Incapaz ler o index"
-
-#: builtin/add.c:318
-#, c-format
-msgid "Could not open '%s' for writing."
-msgstr "Incapaz de abrir '%s' para escrita."
+msgstr "Incapaz ler o cenário"
 
-#: builtin/add.c:322
+#: builtin/add.c:325
 msgid "Could not write patch"
 msgstr "Incapaz de escrever patch"
 
-#: builtin/add.c:325
+#: builtin/add.c:328
 msgid "editing patch failed"
 msgstr "edição de patch falhou"
 
-#: builtin/add.c:328
+#: builtin/add.c:331
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "Impossível fazer stat de '%s'"
 
-#: builtin/add.c:330
+#: builtin/add.c:333
 msgid "Empty patch. Aborted."
 msgstr "Patch vazio. Abortado."
 
-#: builtin/add.c:335
+#: builtin/add.c:339
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "Impossível submeter '%s'"
 
-#: builtin/add.c:343
+#: builtin/add.c:347
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr "Os seguintes caminhos estão ignorados por algum ficheiro .gitignore:\n"
 
-#: builtin/add.c:363 builtin/clean.c:901 builtin/fetch.c:173 builtin/mv.c:124
-#: builtin/prune-packed.c:14 builtin/pull.c:204 builtin/push.c:550
-#: builtin/remote.c:1427 builtin/rm.c:243 builtin/send-pack.c:190
+#: builtin/add.c:367 builtin/clean.c:927 builtin/fetch.c:175 builtin/mv.c:124
+#: builtin/prune-packed.c:14 builtin/pull.c:208 builtin/push.c:550
+#: builtin/remote.c:1454 builtin/rm.c:244 builtin/send-pack.c:194
 msgid "dry run"
 msgstr "simular ação"
 
-#: builtin/add.c:366
+#: builtin/add.c:368 builtin/check-ignore.c:22 builtin/commit.c:1483
+#: builtin/count-objects.c:98 builtin/fsck.c:789 builtin/log.c:2338
+#: builtin/mv.c:123 builtin/read-tree.c:120
+msgid "be verbose"
+msgstr "ser verboso"
+
+#: builtin/add.c:370
 msgid "interactive picking"
 msgstr "seleção interativa"
 
-#: builtin/add.c:367 builtin/checkout.c:1562 builtin/reset.c:308
+#: builtin/add.c:371 builtin/checkout.c:1599 builtin/reset.c:417
 msgid "select hunks interactively"
 msgstr "selecionar blocos interativamente"
 
-#: builtin/add.c:368
+#: builtin/add.c:372
 msgid "edit current diff and apply"
 msgstr "editar o diff atual e aplicá-lo"
 
-#: builtin/add.c:369
+#: builtin/add.c:373
 msgid "allow adding otherwise ignored files"
 msgstr "permitir adicionar ficheiros ignorados"
 
-#: builtin/add.c:370
+#: builtin/add.c:374
 msgid "update tracked files"
 msgstr "atualizar ficheiros controlados"
 
-#: builtin/add.c:371
+#: builtin/add.c:375
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr ""
 
-#: builtin/add.c:372
+#: builtin/add.c:376
 msgid "record only the fact that the path will be added later"
 msgstr "registar apenas o facto de que o caminho será adicionado mais tarde"
 
-#: builtin/add.c:373
+#: builtin/add.c:377
 msgid "add changes from all tracked and untracked files"
 msgstr ""
-"adicionar alterações de todos ficheiros seguidos e ficheiros por seguir"
+"adiciona alterações de todos ficheiros monitorizados e desmonitorizados"
 
-#: builtin/add.c:376
+#: builtin/add.c:380
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr "ignorar paths removidos na árvore-trabalho (o mesmo que --no-all)"
 
-#: builtin/add.c:378
+#: builtin/add.c:382
 msgid "don't add, only refresh the index"
-msgstr "deixa de adicionar, apenas atualiza o index"
+msgstr "deixa por adicionar, apenas atualiza o cenário"
 
-#: builtin/add.c:379
+#: builtin/add.c:383
 msgid "just skip files which cannot be added because of errors"
 msgstr "apenas ignora ficheiros que, por causa de erros, ficam por adicionar"
 
-#: builtin/add.c:380
+#: builtin/add.c:384
 msgid "check if - even missing - files are ignored in dry run"
 msgstr "verificar quais os ficheiros ignorados na simulação"
 
-#: builtin/add.c:382 builtin/update-index.c:1006
+#: builtin/add.c:385 builtin/mv.c:128 builtin/rm.c:251
+msgid "allow updating entries outside of the sparse-checkout cone"
+msgstr ""
+
+#: builtin/add.c:387 builtin/update-index.c:1023
 msgid "override the executable bit of the listed files"
 msgstr "sobrepor o bit executável dos ficheiros listados"
 
-#: builtin/add.c:384
+#: builtin/add.c:389
 msgid "warn when adding an embedded repository"
 msgstr ""
 
-#: builtin/add.c:386
-msgid "backend for `git stash -p`"
-msgstr ""
-
-#: builtin/add.c:404
+#: builtin/add.c:407
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -10273,247 +10785,240 @@ msgid ""
 "See \"git help submodule\" for more information."
 msgstr ""
 
-#: builtin/add.c:432
+#: builtin/add.c:436
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr ""
 
-#: builtin/add.c:451
+#: builtin/add.c:456
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
 "\"git config advice.addIgnoredFile false\""
 msgstr ""
 
-#: builtin/add.c:460
+#: builtin/add.c:471
 msgid "adding files failed"
 msgstr "falhou adicionar ficheiros"
 
-#: builtin/add.c:488
-msgid "--dry-run is incompatible with --interactive/--patch"
-msgstr ""
-
-#: builtin/add.c:490 builtin/commit.c:357
-msgid "--pathspec-from-file is incompatible with --interactive/--patch"
-msgstr ""
-
-#: builtin/add.c:507
-msgid "--pathspec-from-file is incompatible with --edit"
-msgstr ""
-
-#: builtin/add.c:519
-msgid "-A and -u are mutually incompatible"
-msgstr "-A e -u são mutuamente incompatíveis"
-
-#: builtin/add.c:522
-msgid "Option --ignore-missing can only be used together with --dry-run"
-msgstr "Opção --ignore-missing só pode ser usada em conjunto com --dry-run"
-
-#: builtin/add.c:526
+#: builtin/add.c:534
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "parâmetro '%s' de --chmod tem de ser -x ou +x"
 
-#: builtin/add.c:544 builtin/checkout.c:1733 builtin/commit.c:363
-#: builtin/reset.c:328 builtin/rm.c:273 builtin/stash.c:1633
-msgid "--pathspec-from-file is incompatible with pathspec arguments"
-msgstr ""
-
-#: builtin/add.c:551 builtin/checkout.c:1745 builtin/commit.c:369
-#: builtin/reset.c:334 builtin/rm.c:279 builtin/stash.c:1639
-msgid "--pathspec-file-nul requires --pathspec-from-file"
-msgstr ""
+#: builtin/add.c:555 builtin/checkout.c:1770 builtin/commit.c:365
+#: builtin/reset.c:436 builtin/rm.c:275 builtin/stash.c:1702
+#, c-format
+msgid "'%s' and pathspec arguments cannot be used together"
+msgstr "argumentos de espetro-caminho e '%s' incapaz de serem usados juntos"
 
-#: builtin/add.c:555
+#: builtin/add.c:566
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr ".\n"
 
-#: builtin/add.c:557
+#: builtin/add.c:568
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
 "\"git config advice.addEmptyPathspec false\""
 msgstr ""
 
-#: builtin/am.c:365
+#: builtin/am.c:393
 msgid "could not parse author script"
 msgstr "incapaz processar script de autor"
 
-#: builtin/am.c:455
+#: builtin/am.c:483
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "'%s' foi eliminado pelo hook applypatch-msg"
 
-#: builtin/am.c:497
+#: builtin/am.c:525
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Linha de entrada malformada: '%s'."
 
-#: builtin/am.c:535
+#: builtin/am.c:563
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Falha ao copiar notas de '%s' para '%s'"
 
-#: builtin/am.c:561
+#: builtin/am.c:589
 msgid "fseek failed"
 msgstr "falha de fseek"
 
-#: builtin/am.c:749
+#: builtin/am.c:777
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "incapaz processar patch '%s'"
 
-#: builtin/am.c:814
+#: builtin/am.c:842
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Só pode ser aplicada uma série de patches StGIT duma só vez"
 
-#: builtin/am.c:862
+#: builtin/am.c:890
 msgid "invalid timestamp"
 msgstr "carimbo de data/hora inválido"
 
-#: builtin/am.c:867 builtin/am.c:879
+#: builtin/am.c:895 builtin/am.c:907
 msgid "invalid Date line"
 msgstr "linha de Data inválida"
 
-#: builtin/am.c:874
+#: builtin/am.c:902
 msgid "invalid timezone offset"
 msgstr "mudança de fuso horário inválida"
 
-#: builtin/am.c:967
+#: builtin/am.c:995
 msgid "Patch format detection failed."
 msgstr "Falha ao detetar o formato do patch."
 
-#: builtin/am.c:972 builtin/clone.c:414
+#: builtin/am.c:1000 builtin/clone.c:306
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "falhou criar pasta '%s'"
 
-#: builtin/am.c:977
+#: builtin/am.c:1005
 msgid "Failed to split patches."
-msgstr "Falha ao dividir patches."
+msgstr "Falhou ao dividir remendos."
 
-#: builtin/am.c:1126
+#: builtin/am.c:1154
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "Após resolver este problema, executa \"%s --continue\"."
 
-#: builtin/am.c:1127
+#: builtin/am.c:1155
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "Se preferes ignorar este remendo, executa \"%s --skip\" invés."
 
-#: builtin/am.c:1128
+#: builtin/am.c:1160
+#, c-format
+msgid "To record the empty patch as an empty commit, run \"%s --allow-empty\"."
+msgstr ""
+"Para gravar o remendo vazio como memória vazia, executa \"%s --allow-empty\"."
+
+#: builtin/am.c:1162
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr ""
-"Para restaurar o ramo original e interromper a aplicação de remendos, "
-"executa \"%s --abort\"."
+"Para restaurar o ramo original e parar de remendar, executa \"%s --abort\"."
 
-#: builtin/am.c:1223
+#: builtin/am.c:1257
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 
-#: builtin/am.c:1251
-msgid "Patch is empty."
-msgstr "Remendo está vazio."
-
-#: builtin/am.c:1316
+#: builtin/am.c:1345
 #, c-format
 msgid "missing author line in commit %s"
-msgstr "Autor em falta: %s"
+msgstr "faltando linha de autor em memória %s"
 
-#: builtin/am.c:1319
+#: builtin/am.c:1348
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "linha de indentação inválida: %.*s"
 
-#: builtin/am.c:1538
+#: builtin/am.c:1567
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr "Repositório falta blobs necessários para recorrer à tri-junção."
 
-#: builtin/am.c:1540
+#: builtin/am.c:1569
 msgid "Using index info to reconstruct a base tree..."
-msgstr "A usar informação do índice para reconstruir uma árvore de base..."
+msgstr "A usar informação do cenário para reconstruir uma árvore de base..."
 
-#: builtin/am.c:1559
+#: builtin/am.c:1588
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
 msgstr ""
-"Editaste o patch manualmente?\n"
-"No registo de index, aplica-se a blobs nenhuns."
+"Editaste o remendo manualmente?\n"
+"Excepcionando blobs guardados no seu cenário"
 
-#: builtin/am.c:1565
+#: builtin/am.c:1594
 msgid "Falling back to patching base and 3-way merge..."
-msgstr ""
-"A recorrer a uma de base para aplicação de patches e integração com 3 "
-"pontos..."
+msgstr "Recorrendo a remendar base e tri-junção..."
 
-#: builtin/am.c:1591
+#: builtin/am.c:1620
 msgid "Failed to merge in the changes."
-msgstr "Falha ao integrar as alterações."
+msgstr "Falha ao juntar as alterações."
 
-#: builtin/am.c:1623
+#: builtin/am.c:1652
 msgid "applying to an empty history"
 msgstr "submetendo para um histórico vazio"
 
-#: builtin/am.c:1675 builtin/am.c:1679
+#: builtin/am.c:1704 builtin/am.c:1708
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "incapaz continuar: %s é inexistente."
 
-#: builtin/am.c:1697
+#: builtin/am.c:1726
 msgid "Commit Body is:"
-msgstr "Corpo do commit:"
+msgstr "Corpo da Memória é:"
 
 #. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a]
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1707
+#: builtin/am.c:1736
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
-msgstr "Aplicar? [y]sim/[n]ão/[e]ditar/[v]er patch/[a]ceitar todos: "
+msgstr "Aplicar? [y]sim/[n]ão/[e]ditar/[v]er remendo/[a]ceitar todos: "
 
-#: builtin/am.c:1753 builtin/commit.c:408
+#: builtin/am.c:1782 builtin/commit.c:410
 msgid "unable to write index file"
-msgstr "incapaz escrever ficheiro de index"
+msgstr "incapaz escrever ficheiro de cenário"
 
-#: builtin/am.c:1757
+#: builtin/am.c:1786
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
-msgstr "Index sujo: incapaz aplicar patches (sujo: %s)"
+msgstr "Cenário sujo: incapaz aplicar remendos (sujo: %s)"
+
+#: builtin/am.c:1828
+#, c-format
+msgid "Skipping: %.*s"
+msgstr "Saltando: %.*s"
+
+#: builtin/am.c:1833
+#, c-format
+msgid "Creating an empty commit: %.*s"
+msgstr "Criando memória vazia: %.*s"
+
+#: builtin/am.c:1837
+msgid "Patch is empty."
+msgstr "Remendo está vazio."
 
-#: builtin/am.c:1797 builtin/am.c:1865
+#: builtin/am.c:1848 builtin/am.c:1917
 #, c-format
 msgid "Applying: %.*s"
 msgstr "A aplicar: %.*s"
 
-#: builtin/am.c:1814
+#: builtin/am.c:1865
 msgid "No changes -- Patch already applied."
 msgstr "Nenhuma alteração -- Remendo já foi aplicado."
 
-#: builtin/am.c:1820
+#: builtin/am.c:1871
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "Falha ao aplicar o patch em %s %.*s"
 
-#: builtin/am.c:1824
+#: builtin/am.c:1875
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr ""
 
-#: builtin/am.c:1868
+#: builtin/am.c:1921
+msgid "No changes - recorded it as an empty commit."
+msgstr "Sem alterações - gravado como uma memória vazia."
+
+#: builtin/am.c:1923
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
 "already introduced the same changes; you might want to skip this patch."
 msgstr ""
 "Sem alterações - esqueceste-te de usar 'git add'?\n"
-"Se há mais nada por preparar, provavelmente essas mesmas alterações\n"
-"já foram introduzidas; poderás querer saltar este patch."
+"Se há mais nada por encenar, provavelmente essas mesmas alterações\n"
+"já foram introduzidas; poderás querer saltar este remendo."
 
-#: builtin/am.c:1875
+#: builtin/am.c:1931
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -10521,17 +11026,17 @@ msgid ""
 "You might run `git rm` on a file to accept \"deleted by them\" for it."
 msgstr ""
 
-#: builtin/am.c:1982 builtin/am.c:1986 builtin/am.c:1998 builtin/reset.c:347
-#: builtin/reset.c:355
+#: builtin/am.c:2039 builtin/am.c:2043 builtin/am.c:2055 builtin/reset.c:455
+#: builtin/reset.c:463
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "Incapaz analisar objeto '%s'."
 
-#: builtin/am.c:2034
+#: builtin/am.c:2091 builtin/am.c:2167
 msgid "failed to clean index"
-msgstr ""
+msgstr "falhou ao limpar cenário"
 
-#: builtin/am.c:2078
+#: builtin/am.c:2135
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -10539,160 +11044,159 @@ msgstr ""
 "Parece que moveste HEAD desde a última falha de 'am'.\n"
 "Recusando rebobinar até ORIG_HEAD"
 
-#: builtin/am.c:2185
+#: builtin/am.c:2292
 #, c-format
-msgid "Invalid value for --patch-format: %s"
-msgstr "Valor inválido para --patch-format: %s"
+msgid "options '%s=%s' and '%s=%s' cannot be used together"
+msgstr "opções '%s=%s' e '%s=%s' incapaz serem usadas juntas"
 
-#: builtin/am.c:2227
-#, c-format
-msgid "Invalid value for --show-current-patch: %s"
-msgstr "Valor inválido para --show-current-patch: %s"
-
-#: builtin/am.c:2231
-#, c-format
-msgid "--show-current-patch=%s is incompatible with --show-current-patch=%s"
-msgstr ""
-
-#: builtin/am.c:2262
+#: builtin/am.c:2323
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<opções>] [(<mbox> | <Maildir>)...]"
 
-#: builtin/am.c:2263
+#: builtin/am.c:2324
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<opções>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2269
+#: builtin/am.c:2330
 msgid "run interactively"
 msgstr "executar interativamente"
 
-#: builtin/am.c:2271
+#: builtin/am.c:2332
 msgid "historical option -- no-op"
 msgstr "opção histórica -- sem-ação"
 
-#: builtin/am.c:2273
+#: builtin/am.c:2334
 msgid "allow fall back on 3way merging if needed"
-msgstr "permitir recorrer a integração com 3 pontos se necessário"
+msgstr "permitir recorrer a tri-junção se necessário"
 
-#: builtin/am.c:2274 builtin/init-db.c:547 builtin/prune-packed.c:16
-#: builtin/repack.c:472 builtin/stash.c:945
+#: builtin/am.c:2335 builtin/init-db.c:547 builtin/prune-packed.c:16
+#: builtin/repack.c:646 builtin/stash.c:946
 msgid "be quiet"
 msgstr "ficar silencioso"
 
-#: builtin/am.c:2276
+#: builtin/am.c:2337
 msgid "add a Signed-off-by trailer to the commit message"
-msgstr "adicionar atribuição  Signed-off-by para a mensagem de memória"
+msgstr "adicionar atribuição Signed-off-by para a mensagem de memória"
 
-#: builtin/am.c:2279
+#: builtin/am.c:2340
 msgid "recode into utf8 (default)"
 msgstr "recodificar em utf8 (predefinição)"
 
-#: builtin/am.c:2281
+#: builtin/am.c:2342
 msgid "pass -k flag to git-mailinfo"
 msgstr "passar a opção -k ao git-mailinfo"
 
-#: builtin/am.c:2283
+#: builtin/am.c:2344
 msgid "pass -b flag to git-mailinfo"
 msgstr "passar a opção -b ao git-mailinfo"
 
-#: builtin/am.c:2285
+#: builtin/am.c:2346
 msgid "pass -m flag to git-mailinfo"
 msgstr "passar a opção -m ao git-mailinfo"
 
-#: builtin/am.c:2287
+#: builtin/am.c:2348
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "passar a opção --keep-cr a git-mailsplit para formato mbox"
 
-#: builtin/am.c:2290
+#: builtin/am.c:2351
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr ""
 "proibido passares --keep-cr a git-mailsplit independentemente de am.keepcr"
 
-#: builtin/am.c:2293
+#: builtin/am.c:2354
 msgid "strip everything before a scissors line"
 msgstr "retirar todo o conteúdo antes da linha de tesoura"
 
-#: builtin/am.c:2295
+#: builtin/am.c:2356
 msgid "pass it through git-mailinfo"
 msgstr "passa-o pelo git-mailinfo"
 
-#: builtin/am.c:2298 builtin/am.c:2301 builtin/am.c:2304 builtin/am.c:2307
-#: builtin/am.c:2310 builtin/am.c:2313 builtin/am.c:2316 builtin/am.c:2319
-#: builtin/am.c:2325
+#: builtin/am.c:2359 builtin/am.c:2362 builtin/am.c:2365 builtin/am.c:2368
+#: builtin/am.c:2371 builtin/am.c:2374 builtin/am.c:2377 builtin/am.c:2380
+#: builtin/am.c:2386
 msgid "pass it through git-apply"
 msgstr "passa-o pelo git-apply"
 
-#: builtin/am.c:2315 builtin/commit.c:1512 builtin/fmt-merge-msg.c:17
-#: builtin/fmt-merge-msg.c:20 builtin/grep.c:905 builtin/merge.c:261
-#: builtin/pull.c:141 builtin/pull.c:200 builtin/pull.c:217
-#: builtin/rebase.c:1342 builtin/repack.c:483 builtin/repack.c:487
-#: builtin/repack.c:489 builtin/show-branch.c:650 builtin/show-ref.c:172
-#: builtin/tag.c:447 parse-options.h:155 parse-options.h:176
-#: parse-options.h:317
+#: builtin/am.c:2376 builtin/commit.c:1514 builtin/fmt-merge-msg.c:18
+#: builtin/fmt-merge-msg.c:21 builtin/grep.c:920 builtin/merge.c:263
+#: builtin/pull.c:142 builtin/pull.c:204 builtin/pull.c:221
+#: builtin/rebase.c:1074 builtin/repack.c:657 builtin/repack.c:661
+#: builtin/repack.c:663 builtin/show-branch.c:650 builtin/show-ref.c:172
+#: builtin/tag.c:446 parse-options.h:159 parse-options.h:180
+#: parse-options.h:348
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2321 builtin/branch.c:672 builtin/bugreport.c:137
-#: builtin/for-each-ref.c:40 builtin/replace.c:556 builtin/tag.c:481
-#: builtin/verify-tag.c:38
+#: builtin/am.c:2382 builtin/branch.c:695 builtin/bugreport.c:109
+#: builtin/cat-file.c:848 builtin/cat-file.c:852 builtin/cat-file.c:856
+#: builtin/for-each-ref.c:41 builtin/ls-tree.c:357 builtin/replace.c:555
+#: builtin/tag.c:480 builtin/verify-tag.c:38
 msgid "format"
 msgstr "formato"
 
-#: builtin/am.c:2322
+#: builtin/am.c:2383
 msgid "format the patch(es) are in"
 msgstr "formato em que o(s) remendo(s) estão"
 
-#: builtin/am.c:2328
+#: builtin/am.c:2389
 msgid "override error message when patch failure occurs"
 msgstr "sobrepor mensagem de erro quando falha na aplicação de remendo ocorrer"
 
-#: builtin/am.c:2330
+#: builtin/am.c:2391
 msgid "continue applying patches after resolving a conflict"
-msgstr "continuar submetendo remendos depois de resolver um conflito"
+msgstr "continuar aplicando remendos depois de resolver um conflito"
 
-#: builtin/am.c:2333
+#: builtin/am.c:2394
 msgid "synonyms for --continue"
 msgstr "sinónimo de --continue"
 
-#: builtin/am.c:2336
+#: builtin/am.c:2397
 msgid "skip the current patch"
 msgstr "ignorar remendo atual"
 
-#: builtin/am.c:2339
+#: builtin/am.c:2400
 msgid "restore the original branch and abort the patching operation"
 msgstr "restaurar o ramo original e abortar a operação de remendar"
 
-#: builtin/am.c:2342
+#: builtin/am.c:2403
 msgid "abort the patching operation but keep HEAD where it is"
 msgstr ""
 
-#: builtin/am.c:2346
+#: builtin/am.c:2407
 msgid "show the patch being applied"
 msgstr "mostrar linhas sendo submetidas"
 
-#: builtin/am.c:2351
+#: builtin/am.c:2411
+msgid "record the empty patch as an empty commit"
+msgstr ""
+
+#: builtin/am.c:2415
 msgid "lie about committer date"
-msgstr "mentir sobre a data de commit"
+msgstr "mentir sobre a data de memorizador"
 
-#: builtin/am.c:2353
+#: builtin/am.c:2417
 msgid "use current timestamp for author date"
 msgstr "usar a data e hora atual como data de autor"
 
-#: builtin/am.c:2355 builtin/commit-tree.c:120 builtin/commit.c:1640
-#: builtin/merge.c:298 builtin/pull.c:175 builtin/rebase.c:537
-#: builtin/rebase.c:1395 builtin/revert.c:117 builtin/tag.c:462
+#: builtin/am.c:2419 builtin/commit-tree.c:118 builtin/commit.c:1642
+#: builtin/merge.c:302 builtin/pull.c:179 builtin/rebase.c:1127
+#: builtin/revert.c:117 builtin/tag.c:461
 msgid "key-id"
 msgstr "id-chave"
 
-#: builtin/am.c:2356 builtin/rebase.c:538 builtin/rebase.c:1396
+#: builtin/am.c:2420 builtin/rebase.c:1128
 msgid "GPG-sign commits"
 msgstr "assinar memórias com GPG"
 
-#: builtin/am.c:2359
+#: builtin/am.c:2423
+msgid "how to handle empty patches"
+msgstr "como lidar com remendos vazios"
+
+#: builtin/am.c:2426
 msgid "(internal use for git-rebase)"
 msgstr "(uso interno para git-rebase)"
 
-#: builtin/am.c:2377
+#: builtin/am.c:2444
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
@@ -10700,30 +11204,30 @@ msgstr ""
 "A opção -b/--binary há muito que é ignorada e será removida.\n"
 "Por favor deixa de usá-la."
 
-#: builtin/am.c:2384
+#: builtin/am.c:2451
 msgid "failed to read the index"
 msgstr "falhou ler cenário"
 
-#: builtin/am.c:2399
+#: builtin/am.c:2466
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr ""
-"o diretório de rebesa anterior %s ainda existe, mas foi fornecida uma mbox."
+"o pasta de rebesa anterior %s ainda existe, mas foi fornecida uma mbox."
 
-#: builtin/am.c:2423
+#: builtin/am.c:2490
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
 "Use \"git am --abort\" to remove it."
 msgstr ""
-"Diretório abandonado %s encontrado.\n"
-"Use \"git am --abort\" para o remover."
+"Pasta perdida %s encontrada.\n"
+"Usa \"git am --abort\" para a remover."
 
-#: builtin/am.c:2429
+#: builtin/am.c:2496
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "A operação de resolução está parada, continuará parada."
 
-#: builtin/am.c:2439
+#: builtin/am.c:2506
 msgid "interactive mode requires patches on the command line"
 msgstr ""
 
@@ -10731,51 +11235,34 @@ msgstr ""
 msgid "git apply [<options>] [<patch>...]"
 msgstr "git apply [<opções>] [<remendo>...]"
 
-#: builtin/archive.c:17
-#, c-format
-msgid "could not create archive file '%s'"
-msgstr "incapaz criar ficheiro de arquivo '%s'"
-
-#: builtin/archive.c:20
+#: builtin/archive.c:18
 msgid "could not redirect output"
 msgstr "incapaz redirecionar a saída"
 
-#: builtin/archive.c:37
+#: builtin/archive.c:35
 msgid "git archive: Remote with no URL"
 msgstr "git archive: Remoto sem URL"
 
-#: builtin/archive.c:61
+#: builtin/archive.c:59
 msgid "git archive: expected ACK/NAK, got a flush packet"
 msgstr "git archive: esperado ACK/NAK, recebi pacote flush"
 
-#: builtin/archive.c:64
+#: builtin/archive.c:62
 #, c-format
 msgid "git archive: NACK %s"
 msgstr "git archive: NACK %s"
 
-#: builtin/archive.c:65
+#: builtin/archive.c:63
 msgid "git archive: protocol error"
 msgstr "git archive: erro de protocolo"
 
-#: builtin/archive.c:69
+#: builtin/archive.c:67
 msgid "git archive: expected a flush"
 msgstr "git archive: esperado um flush"
 
-#: builtin/bisect--helper.c:23
-msgid "git bisect--helper --bisect-reset [<commit>]"
-msgstr ""
-
 #: builtin/bisect--helper.c:24
-msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
-msgstr ""
-
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
-msgstr ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
+msgid "git bisect--helper --bisect-reset [<commit>]"
+msgstr "git bisect--helper --bisect-reset [<memória>]"
 
 #: builtin/bisect--helper.c:26
 msgid ""
@@ -10783,103 +11270,111 @@ msgid ""
 "=<term>] [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] "
 "[<paths>...]"
 msgstr ""
-
-#: builtin/bisect--helper.c:28
-msgid "git bisect--helper --bisect-next"
-msgstr ""
+"git bisect--helper --bisect-start [--term-{new,bad}=<termo> --term-{old,good}"
+"=<termo>] [--no-checkout] [--first-parent] [<mau> [<bom>...]] [--] "
+"[<caminhos>...]"
 
 #: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
-msgstr ""
+msgstr "git bisect--helper --bisect-state (bad|new) [<rev>]"
 
 #: builtin/bisect--helper.c:30
 msgid "git bisect--helper --bisect-state (good|old) [<rev>...]"
-msgstr ""
+msgstr "git bisect--helper --bisect-state (good|old) [<rev>...]"
 
 #: builtin/bisect--helper.c:31
 msgid "git bisect--helper --bisect-replay <filename>"
-msgstr ""
+msgstr "git bisect--helper --bisect-replay <ficheiro>"
 
 #: builtin/bisect--helper.c:32
 msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
-msgstr ""
+msgstr "git bisect--helper --bisect-skip [(<rev>|<intervalo>)...]"
 
-#: builtin/bisect--helper.c:107
+#: builtin/bisect--helper.c:34
+msgid "git bisect--helper --bisect-run <cmd>..."
+msgstr "git bisect--helper --bisect-run <cmd>..."
+
+#: builtin/bisect--helper.c:109
 #, c-format
 msgid "cannot open file '%s' in mode '%s'"
 msgstr "incapaz abrir ficheiro '%s' em modo '%s'"
 
-#: builtin/bisect--helper.c:114
+#: builtin/bisect--helper.c:116
 #, c-format
 msgid "could not write to file '%s'"
 msgstr "incapaz escrever para ficheiro '%s'"
 
-#: builtin/bisect--helper.c:155
+#: builtin/bisect--helper.c:154
+#, c-format
+msgid "cannot open file '%s' for reading"
+msgstr "incapaz abrir ficheiro '%s' para leitura"
+
+#: builtin/bisect--helper.c:170
 #, c-format
 msgid "'%s' is not a valid term"
 msgstr "'%s' é um termo inválido."
 
-#: builtin/bisect--helper.c:159
+#: builtin/bisect--helper.c:174
 #, c-format
 msgid "can't use the builtin command '%s' as a term"
 msgstr "incapaz usar comando embutido '%s' como um termo"
 
-#: builtin/bisect--helper.c:169
+#: builtin/bisect--helper.c:184
 #, c-format
 msgid "can't change the meaning of the term '%s'"
 msgstr "incapaz alterar o significado do termo '%s'"
 
-#: builtin/bisect--helper.c:179
+#: builtin/bisect--helper.c:194
 msgid "please use two different terms"
 msgstr "por favor, usa dois termos diferentes"
 
-#: builtin/bisect--helper.c:195
+#: builtin/bisect--helper.c:210
 #, c-format
 msgid "We are not bisecting.\n"
 msgstr "Estamos bissetando nada.\n"
 
-#: builtin/bisect--helper.c:203
+#: builtin/bisect--helper.c:218
 #, c-format
 msgid "'%s' is not a valid commit"
-msgstr "'%s' é um commit inválido"
+msgstr "'%s' é uma memória inválida"
 
-#: builtin/bisect--helper.c:212
+#: builtin/bisect--helper.c:227
 #, c-format
 msgid ""
 "could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
 msgstr ""
-"pude check out HEAD original '%s' nenhuma. Tenta 'git bisect reset <commit>'."
+"incapaz observar HEAD original '%s'. Tenta 'git bisect reset <memória>'."
 
-#: builtin/bisect--helper.c:256
+#: builtin/bisect--helper.c:271
 #, c-format
 msgid "Bad bisect_write argument: %s"
 msgstr "Argumento bisect_write incorreto: %s"
 
-#: builtin/bisect--helper.c:261
+#: builtin/bisect--helper.c:276
 #, c-format
 msgid "couldn't get the oid of the rev '%s'"
 msgstr "incapaz obter oid da rev '%s'"
 
-#: builtin/bisect--helper.c:273
+#: builtin/bisect--helper.c:288
 #, c-format
 msgid "couldn't open the file '%s'"
 msgstr "incapaz abrir o ficheiro '%s'"
 
-#: builtin/bisect--helper.c:299
+#: builtin/bisect--helper.c:314
 #, c-format
 msgid "Invalid command: you're currently in a %s/%s bisect"
-msgstr "Comando inválido: estás atualmente a bissetar %s/%s"
+msgstr "Comando inválido: estás bissetando %s/%s"
 
-#: builtin/bisect--helper.c:326
+#: builtin/bisect--helper.c:341
 #, c-format
 msgid ""
 "You need to give me at least one %s and %s revision.\n"
 "You can use \"git bisect %s\" and \"git bisect %s\" for that."
 msgstr ""
-"Precisas de dar pelo menos uma revisão %s e %s.\n"
-"Podes usar \"git bisect %s\" e \"git bisect %s\" para esse fim."
+"Precisas de dar-me pelo menos uma revisão %s e %s.\n"
+"Para isso, podes usar \"git bisect %s\" e \"git bisect %s\"."
 
-#: builtin/bisect--helper.c:330
+#: builtin/bisect--helper.c:345
 #, c-format
 msgid ""
 "You need to start by \"git bisect start\".\n"
@@ -10888,9 +11383,9 @@ msgid ""
 msgstr ""
 "Precisas de começar com \"git bisect start\".\n"
 "Depois precisas de dar-me pelo menos uma revisão %s e %s.\n"
-"Podes usar \"git bisect %s\" e \"git bisect %s\" para esse fim."
+"Para isso, podes usar \"git bisect %s\" e \"git bisect %s\"."
 
-#: builtin/bisect--helper.c:350
+#: builtin/bisect--helper.c:365
 #, c-format
 msgid "bisecting only with a %s commit"
 msgstr "bissetando apenas com uma memória %s"
@@ -10899,22 +11394,24 @@ msgstr "bissetando apenas com uma memória %s"
 #. translation. The program will only accept English input
 #. at this point.
 #.
-#: builtin/bisect--helper.c:358
+#: builtin/bisect--helper.c:373
 msgid "Are you sure [Y/n]? "
-msgstr "Tem a certeza [Y/n]? "
+msgstr "Tens a certeza [Y/n]? "
 
-#: builtin/bisect--helper.c:419
+#: builtin/bisect--helper.c:434
 msgid "no terms defined"
 msgstr "termo nenhum definido"
 
-#: builtin/bisect--helper.c:422
+#: builtin/bisect--helper.c:437
 #, c-format
 msgid ""
 "Your current terms are %s for the old state\n"
 "and %s for the new state.\n"
 msgstr ""
+"Teus termos actuais são %s para o estado\n"
+"antigo e %s para o estado novo.\n"
 
-#: builtin/bisect--helper.c:432
+#: builtin/bisect--helper.c:447
 #, c-format
 msgid ""
 "invalid argument %s for 'git bisect terms'.\n"
@@ -10923,52 +11420,52 @@ msgstr ""
 "argumento inválido %s para 'git bisect terms'.\n"
 "Opções sustentadas: --term-good|--term-old e --term-bad|--term-new."
 
-#: builtin/bisect--helper.c:499 builtin/bisect--helper.c:1023
+#: builtin/bisect--helper.c:514 builtin/bisect--helper.c:1038
 msgid "revision walk setup failed\n"
-msgstr "falhou configuração de percurso de revisões\n"
+msgstr "falhou configuração de percurso de revisões\n"
 
-#: builtin/bisect--helper.c:521
+#: builtin/bisect--helper.c:536
 #, c-format
 msgid "could not open '%s' for appending"
 msgstr "incapaz abrir '%s' para acrescentar"
 
-#: builtin/bisect--helper.c:640 builtin/bisect--helper.c:653
+#: builtin/bisect--helper.c:655 builtin/bisect--helper.c:668
 msgid "'' is not a valid term"
 msgstr "'' é um termo inválido"
 
-#: builtin/bisect--helper.c:663
+#: builtin/bisect--helper.c:678
 #, c-format
 msgid "unrecognized option: '%s'"
 msgstr "opção desconhecida: '%s'"
 
-#: builtin/bisect--helper.c:667
+#: builtin/bisect--helper.c:682
 #, c-format
 msgid "'%s' does not appear to be a valid revision"
 msgstr "'%s' parece ser uma revisão inválida"
 
-#: builtin/bisect--helper.c:698
+#: builtin/bisect--helper.c:713
 msgid "bad HEAD - I need a HEAD"
 msgstr "HEAD incorreta - é necessário uma HEAD"
 
-#: builtin/bisect--helper.c:713
+#: builtin/bisect--helper.c:728
 #, c-format
 msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
 msgstr "falhou observar '%s'. Tenta 'git bisect start <ramo-válido>'."
 
-#: builtin/bisect--helper.c:734
+#: builtin/bisect--helper.c:749
 msgid "won't bisect on cg-seek'ed tree"
 msgstr "incapaz bissetar numa árvore \"cg-seek'ada\""
 
-#: builtin/bisect--helper.c:737
+#: builtin/bisect--helper.c:752
 msgid "bad HEAD - strange symbolic ref"
-msgstr "HEAD incorreta - referência simbólica desconhecida"
+msgstr "HEAD incorreta - referência simbólica estranha"
 
-#: builtin/bisect--helper.c:757
+#: builtin/bisect--helper.c:772
 #, c-format
 msgid "invalid ref: '%s'"
-msgstr ""
+msgstr "ref inválida: '%s'"
 
-#: builtin/bisect--helper.c:815
+#: builtin/bisect--helper.c:830
 msgid "You need to start by \"git bisect start\"\n"
 msgstr "Deves começar com \"git bisect start\"\n"
 
@@ -10976,104 +11473,160 @@ msgstr "Deves começar com \"git bisect start\"\n"
 #. translation. The program will only accept English input
 #. at this point.
 #.
-#: builtin/bisect--helper.c:826
+#: builtin/bisect--helper.c:841
 msgid "Do you want me to do it for you [Y/n]? "
-msgstr "Quer que seja eu a fazer isso [Y/n]? "
+msgstr "Quer que eu faça isso por ti [Y/n]? "
 
-#: builtin/bisect--helper.c:844
+#: builtin/bisect--helper.c:859
 msgid "Please call `--bisect-state` with at least one argument"
 msgstr "Por favor, chama `--bisect-state` com pelo menos um argumento"
 
-#: builtin/bisect--helper.c:857
+#: builtin/bisect--helper.c:872
 #, c-format
 msgid "'git bisect %s' can take only one argument."
 msgstr "'git bisect %s' só leva um argumento."
 
-#: builtin/bisect--helper.c:869 builtin/bisect--helper.c:882
+#: builtin/bisect--helper.c:884 builtin/bisect--helper.c:897
 #, c-format
 msgid "Bad rev input: %s"
 msgstr "Entrada de rev inválida: %s"
 
-#: builtin/bisect--helper.c:889
+#: builtin/bisect--helper.c:904
 #, c-format
 msgid "Bad rev input (not a commit): %s"
 msgstr "Entrada de rev inválida (é memória nenhuma): %s"
 
-#: builtin/bisect--helper.c:921
+#: builtin/bisect--helper.c:936
 msgid "We are not bisecting."
 msgstr "Estamos bissetando nada."
 
-#: builtin/bisect--helper.c:971
+#: builtin/bisect--helper.c:986
 #, c-format
 msgid "'%s'?? what are you talking about?"
 msgstr "'%s'?? estás a falar de quê?"
 
-#: builtin/bisect--helper.c:983
+#: builtin/bisect--helper.c:998
 #, c-format
 msgid "cannot read file '%s' for replaying"
 msgstr "incapaz ler ficheiro '%s' para reprodução"
 
-#: builtin/bisect--helper.c:1056
-msgid "reset the bisection state"
-msgstr ""
+#: builtin/bisect--helper.c:1120 builtin/bisect--helper.c:1152
+#, c-format
+msgid "running %s\n"
+msgstr "executando %s\n"
 
-#: builtin/bisect--helper.c:1058
-msgid "check whether bad or good terms exist"
-msgstr ""
+#: builtin/bisect--helper.c:1145 builtin/bisect--helper.c:1335
+msgid "bisect run failed: no command provided."
+msgstr "execução bisseção falhou: providenciado comando nenhum."
 
-#: builtin/bisect--helper.c:1060
-msgid "print out the bisect terms"
-msgstr "imprimir termos de bifurcação"
+#: builtin/bisect--helper.c:1166
+#, c-format
+msgid "unable to verify '%s' on good revision"
+msgstr "incapaz de verificar '%s' em revisão boa"
 
-#: builtin/bisect--helper.c:1062
-msgid "start the bisect session"
+#: builtin/bisect--helper.c:1172
+#, c-format
+msgid "bogus exit code %d for good revision"
+msgstr ""
+
+#: builtin/bisect--helper.c:1180
+#, c-format
+msgid "bisect run failed: exit code %d from '%s' is < 0 or >= 128"
+msgstr "execução bisseção falhou: código de saída %d de '%s' é < 0 ou >= 128"
+
+#: builtin/bisect--helper.c:1195
+#, c-format
+msgid "cannot open file '%s' for writing"
+msgstr "incapaz abrir ficheiro '%s' para escrita"
+
+#: builtin/bisect--helper.c:1213
+msgid "bisect run cannot continue any more"
+msgstr "execução bisseção incapaz de continuar"
+
+#: builtin/bisect--helper.c:1215
+#, c-format
+msgid "bisect run success"
+msgstr "sucesso na execução bisseção"
+
+#: builtin/bisect--helper.c:1218
+#, c-format
+msgid "bisect found first bad commit"
+msgstr "bisseção encontrou primeira memória má"
+
+#: builtin/bisect--helper.c:1221
+#, c-format
+msgid ""
+"bisect run failed: 'git bisect--helper --bisect-state %s' exited with error "
+"code %d"
 msgstr ""
+"execução bisseção falhou: 'git bisect--helper --bisect-state %s' retornou "
+"com código de erro %d"
+
+#: builtin/bisect--helper.c:1253
+msgid "reset the bisection state"
+msgstr "restabelecer o estado de bisseção"
+
+#: builtin/bisect--helper.c:1255
+msgid "check whether bad or good terms exist"
+msgstr "verificar se existem termos bons ou maus"
+
+#: builtin/bisect--helper.c:1257
+msgid "print out the bisect terms"
+msgstr "mostrar termos de bisseção"
+
+#: builtin/bisect--helper.c:1259
+msgid "start the bisect session"
+msgstr "começar a sessão de bisseção"
 
-#: builtin/bisect--helper.c:1064
+#: builtin/bisect--helper.c:1261
 msgid "find the next bisection commit"
-msgstr "encontra próximo commit de bisecção"
+msgstr "encontrar próxima memória de bissecção"
 
-#: builtin/bisect--helper.c:1066
+#: builtin/bisect--helper.c:1263
 msgid "mark the state of ref (or refs)"
-msgstr ""
+msgstr "marcar estado de ref (ou refs)"
 
-#: builtin/bisect--helper.c:1068
+#: builtin/bisect--helper.c:1265
 msgid "list the bisection steps so far"
-msgstr ""
+msgstr "listar todos os passos de bisseção até então"
 
-#: builtin/bisect--helper.c:1070
+#: builtin/bisect--helper.c:1267
 msgid "replay the bisection process from the given file"
-msgstr ""
+msgstr "refazer o processo de bisseção a partir de o ficheiro dado"
 
-#: builtin/bisect--helper.c:1072
+#: builtin/bisect--helper.c:1269
 msgid "skip some commits for checkout"
-msgstr "ignorar algumas memórias para observação"
+msgstr "saltar algumas memórias para uma observação"
 
-#: builtin/bisect--helper.c:1074
+#: builtin/bisect--helper.c:1271
+msgid "visualize the bisection"
+msgstr "visualiza a bissecção"
+
+#: builtin/bisect--helper.c:1273
+msgid "use <cmd>... to automatically bisect"
+msgstr "usa <cmd>... para bissetar automaticamente."
+
+#: builtin/bisect--helper.c:1275
 msgid "no log for BISECT_WRITE"
 msgstr "nenhum registo para BISECT_WRITE"
 
-#: builtin/bisect--helper.c:1089
+#: builtin/bisect--helper.c:1290
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr "--bisect-reset exige quer argumento nenhum ou uma memória"
 
-#: builtin/bisect--helper.c:1094
-msgid "--bisect-next-check requires 2 or 3 arguments"
-msgstr "--bisect-next-check exige 2 ou 3 argumentos"
-
-#: builtin/bisect--helper.c:1100
+#: builtin/bisect--helper.c:1295
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms exige 0 ou 1 argumento"
 
-#: builtin/bisect--helper.c:1109
+#: builtin/bisect--helper.c:1304
 msgid "--bisect-next requires 0 arguments"
 msgstr "--bisect-next exige 0 argumentos"
 
-#: builtin/bisect--helper.c:1120
+#: builtin/bisect--helper.c:1315
 msgid "--bisect-log requires 0 arguments"
 msgstr "--bisect-log exige 0 argumentos"
 
-#: builtin/bisect--helper.c:1125
+#: builtin/bisect--helper.c:1320
 msgid "no logfile given"
 msgstr "nenhum ficheiro-registo fornecido"
 
@@ -11085,151 +11638,148 @@ msgstr "git blame [<opções>] [<rev-opts>] [<rev>] [--] <ficheiro>"
 msgid "<rev-opts> are documented in git-rev-list(1)"
 msgstr "<rev-opts> estão documentadas em git-rev-list(1)"
 
-#: builtin/blame.c:410
+#: builtin/blame.c:406
 #, c-format
 msgid "expecting a color: %s"
 msgstr "esperando cor: %s"
 
-#: builtin/blame.c:417
+#: builtin/blame.c:413
 msgid "must end with a color"
 msgstr ""
 
-#: builtin/blame.c:728
-#, c-format
-msgid "invalid color '%s' in color.blame.repeatedLines"
-msgstr "cor inválida '%s' em color.blame.repeatedLines"
-
-#: builtin/blame.c:746
-msgid "invalid value for blame.coloring"
-msgstr ""
-
-#: builtin/blame.c:845
+#: builtin/blame.c:842
 #, c-format
 msgid "cannot find revision %s to ignore"
-msgstr ""
+msgstr "incapaz encontrar revisão %s para ignorar"
 
-#: builtin/blame.c:867
+#: builtin/blame.c:864
 msgid "show blame entries as we find them, incrementally"
 msgstr ""
-"Mostrar entradas de culpa à medida que forem encontradas, incrementalmente"
+"mostrar entradas de culpa à medida que forem encontradas, incrementalmente"
 
-#: builtin/blame.c:868
+#: builtin/blame.c:865
 msgid "do not show object names of boundary commits (Default: off)"
-msgstr "Mostar SHA-1 dos commits limite em branco (Predefinição: desativado)"
+msgstr ""
+"mostrar nenhuns nomes de objeto de memórias fronteira (Predefinição: "
+"desativado)"
 
-#: builtin/blame.c:869
+#: builtin/blame.c:866
 msgid "do not treat root commits as boundaries (Default: off)"
-msgstr "Tratar commits raiz como limite nenhum (Predefinição: desativado)"
+msgstr ""
+"tratar nenhumas memórias raiz como fronteira (Predefinição: desativado)"
 
-#: builtin/blame.c:870
+#: builtin/blame.c:867
 msgid "show work cost statistics"
-msgstr "Mostrar estatísticas de custo de atividade"
-
-#: builtin/blame.c:871 builtin/checkout.c:1519 builtin/clone.c:94
-#: builtin/commit-graph.c:84 builtin/commit-graph.c:222 builtin/fetch.c:179
-#: builtin/merge.c:297 builtin/multi-pack-index.c:55 builtin/pull.c:119
-#: builtin/push.c:566 builtin/send-pack.c:198
+msgstr "mostrar estatísticas de custo de trabalho"
+
+#: builtin/blame.c:868 builtin/checkout.c:1554 builtin/clone.c:98
+#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:181
+#: builtin/merge.c:301 builtin/multi-pack-index.c:103
+#: builtin/multi-pack-index.c:154 builtin/multi-pack-index.c:180
+#: builtin/multi-pack-index.c:208 builtin/pull.c:120 builtin/push.c:566
+#: builtin/remote.c:683 builtin/send-pack.c:202
 msgid "force progress reporting"
 msgstr "forçar informação de progresso"
 
-#: builtin/blame.c:872
+#: builtin/blame.c:869
 msgid "show output score for blame entries"
-msgstr "Mostrar a pontuação das entradas de culpa"
+msgstr "mostrar a pontuação das entradas de culpa"
 
-#: builtin/blame.c:873
+#: builtin/blame.c:870
 msgid "show original filename (Default: auto)"
-msgstr "Mostrar o nome do ficheiro original (Predefinição: auto)"
+msgstr "mostrar nome do ficheiro original (Predefinição: auto)"
 
-#: builtin/blame.c:874
+#: builtin/blame.c:871
 msgid "show original linenumber (Default: off)"
-msgstr "mostrar números de linha originais (Predefinição: desligado)"
+msgstr "mostrar números de linha originais (Predefinição: desativado)"
 
-#: builtin/blame.c:875
+#: builtin/blame.c:872
 msgid "show in a format designed for machine consumption"
 msgstr "mostrar em formato próprio para consumo por máquina"
 
-#: builtin/blame.c:876
+#: builtin/blame.c:873
 msgid "show porcelain format with per-line commit information"
 msgstr "mostrar em formato de porcelana com informações de memória por linha"
 
-#: builtin/blame.c:877
+#: builtin/blame.c:874
 msgid "use the same output mode as git-annotate (Default: off)"
 msgstr "usar o mesmo modo de saída que git-annotate (Predefinição: desativado)"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:875
 msgid "show raw timestamp (Default: off)"
-msgstr "Mostrar carimbo de data/hora em bruto (Predefinição: desativado)"
+msgstr "mostrar carimbo cronológico em bruto (Predefinição: desativado)"
 
-#: builtin/blame.c:879
+#: builtin/blame.c:876
 msgid "show long commit SHA1 (Default: off)"
-msgstr "Mostrar SHA1 longo de commit (Predefinição: desativado)"
+msgstr "mostrar SHA1 longo de memória (Predefinição: desativado)"
 
-#: builtin/blame.c:880
+#: builtin/blame.c:877
 msgid "suppress author name and timestamp (Default: off)"
 msgstr ""
-"Suprimir nome de autor e carimbo de data/hora (Predefinição: desativado)"
+"suprimir nome de autor e carimbo cronológico (Predefinição: desativado)"
 
-#: builtin/blame.c:881
+#: builtin/blame.c:878
 msgid "show author email instead of name (Default: off)"
-msgstr "Mostrar o email do autor em vez do nome (Predefinição: desativado)"
+msgstr "mostrar email de autor em vez do nome (Predefinição: desativado)"
 
-#: builtin/blame.c:882
+#: builtin/blame.c:879
 msgid "ignore whitespace differences"
 msgstr "Ignorar as diferenças de espaço em branco"
 
-#: builtin/blame.c:883 builtin/log.c:1823
+#: builtin/blame.c:880 builtin/log.c:1857
 msgid "rev"
 msgstr "rev"
 
-#: builtin/blame.c:883
+#: builtin/blame.c:880
 msgid "ignore <rev> when blaming"
-msgstr "ignorar <rev> ao blaming"
+msgstr "ignorar <rev> ao culpar"
 
-#: builtin/blame.c:884
+#: builtin/blame.c:881
 msgid "ignore revisions from <file>"
-msgstr ""
+msgstr "ignorar revisões de <ficheiro>"
 
-#: builtin/blame.c:885
+#: builtin/blame.c:882
 msgid "color redundant metadata from previous line differently"
 msgstr ""
 
-#: builtin/blame.c:886
+#: builtin/blame.c:883
 msgid "color lines by age"
-msgstr ""
+msgstr "cor de linhas por idade"
 
-#: builtin/blame.c:887
+#: builtin/blame.c:884
 msgid "spend extra cycles to find better match"
-msgstr "Despender ciclos extra para encontrar uma melhor correspondência"
+msgstr "gastar ciclos extra para encontrar uma melhor correspondência"
 
-#: builtin/blame.c:888
+#: builtin/blame.c:885
 msgid "use revisions from <file> instead of calling git-rev-list"
-msgstr "usar revisões do <ficheiro> em vez de invocar git-rev-list"
+msgstr "usar revisões de <ficheiro> em vez de invocar git-rev-list"
 
-#: builtin/blame.c:889
+#: builtin/blame.c:886
 msgid "use <file>'s contents as the final image"
-msgstr "Usar o conteúdo do <ficheiro> como imagem final"
+msgstr "usar o conteúdo de <ficheiro> como imagem final"
 
-#: builtin/blame.c:890 builtin/blame.c:891
+#: builtin/blame.c:887 builtin/blame.c:888
 msgid "score"
 msgstr "pontuação"
 
-#: builtin/blame.c:890
+#: builtin/blame.c:887
 msgid "find line copies within and across files"
-msgstr "Localizar linhas copiadas dentro e entre ficheiros"
+msgstr "encontrar linhas copiadas dentro e entre ficheiros"
 
-#: builtin/blame.c:891
+#: builtin/blame.c:888
 msgid "find line movements within and across files"
-msgstr "Localizar linhas movidas dentro e entre ficheiros"
+msgstr "encontrar linhas movidas dentro e entre ficheiros"
 
-#: builtin/blame.c:892
+#: builtin/blame.c:889
 msgid "range"
 msgstr "intervalo"
 
-#: builtin/blame.c:893
+#: builtin/blame.c:890
 msgid "process only line range <start>,<end> or function :<funcname>"
-msgstr "processar apenas intervalo de linhas <início>,<fim> ou função :<nome-função>"
+msgstr ""
+"processar apenas intervalo de linhas <início>,<fim> ou função :<nome-função>"
 
-#: builtin/blame.c:945
+#: builtin/blame.c:949
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr "proibido usar --progress com --incremental ou formatos porcelana"
 
@@ -11241,18 +11791,18 @@ msgstr "proibido usar --progress com --incremental ou formatos porcelana"
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:996
+#: builtin/blame.c:1000
 msgid "4 years, 11 months ago"
 msgstr "há 4 anos e 11 meses atrás"
 
-#: builtin/blame.c:1112
+#: builtin/blame.c:1116
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
-msgstr[0] "ficheiro %s só tem %lu linha"
-msgstr[1] "ficheiro %s só tem %lu linhas"
+msgstr[0] "ficheiro %s só tem %lu linha"
+msgstr[1] "ficheiro %s só tem %lu linhas"
 
-#: builtin/blame.c:1157
+#: builtin/blame.c:1161
 msgid "Blaming lines"
 msgstr "Linhas de culpa"
 
@@ -11261,30 +11811,38 @@ msgid "git branch [<options>] [-r | -a] [--merged] [--no-merged]"
 msgstr "git branch [<opções>] [-r | -a] [--merged] [--no-merged]"
 
 #: builtin/branch.c:30
-msgid "git branch [<options>] [-l] [-f] <branch-name> [<start-point>]"
-msgstr "git branch [<opções>] [-l] [-f] <nome-ramo> [<ponto-de-partida>]"
+msgid ""
+"git branch [<options>] [-f] [--recurse-submodules] <branch-name> [<start-"
+"point>]"
+msgstr ""
+"git branch [<opções>] [-f] [--recurse-submodules] <nome-ramo> [<ponto-de-"
+"partida>]"
 
 #: builtin/branch.c:31
+msgid "git branch [<options>] [-l] [<pattern>...]"
+msgstr "git branch [<opções>] [-l] [<padrão>...]"
+
+#: builtin/branch.c:32
 msgid "git branch [<options>] [-r] (-d | -D) <branch-name>..."
 msgstr "git branch [<opções>] [-r] (-d | -D) <nome-ramo>..."
 
-#: builtin/branch.c:32
+#: builtin/branch.c:33
 msgid "git branch [<options>] (-m | -M) [<old-branch>] <new-branch>"
 msgstr "git branch [<opções>] (-m | -M) [<ramo-antigo>] <novo-ramo>"
 
-#: builtin/branch.c:33
+#: builtin/branch.c:34
 msgid "git branch [<options>] (-c | -C) [<old-branch>] <new-branch>"
 msgstr "git branch [<opções>] (-c | -C) [<ramo-antigo>] <novo-ramo>"
 
-#: builtin/branch.c:34
+#: builtin/branch.c:35
 msgid "git branch [<options>] [-r | -a] [--points-at]"
 msgstr "git branch [<opções>] [-r | -a] [--points-at]"
 
-#: builtin/branch.c:35
+#: builtin/branch.c:36
 msgid "git branch [<options>] [-r | -a] [--format]"
 msgstr "git branch [<opções>] [-r | -a] [--format]"
 
-#: builtin/branch.c:154
+#: builtin/branch.c:165
 #, c-format
 msgid ""
 "deleting branch '%s' that has been merged to\n"
@@ -11293,7 +11851,7 @@ msgstr ""
 "eliminando ramo '%s' que foi juntado a\n"
 "         '%s', mas ainda está por juntar a HEAD."
 
-#: builtin/branch.c:158
+#: builtin/branch.c:169
 #, c-format
 msgid ""
 "not deleting branch '%s' that is not yet merged to\n"
@@ -11302,311 +11860,321 @@ msgstr ""
 "mantendo ramo '%s' que ainda está por juntar a\n"
 "         '%s', apesar de já estar junto a HEAD."
 
-#: builtin/branch.c:172
+#: builtin/branch.c:183
 #, c-format
 msgid "Couldn't look up commit object for '%s'"
-msgstr "Incapaz pesquisar objeto commit para '%s'"
+msgstr "Incapaz encontrar objeto memória para '%s'"
 
-#: builtin/branch.c:176
+#: builtin/branch.c:187
 #, c-format
 msgid ""
 "The branch '%s' is not fully merged.\n"
 "If you are sure you want to delete it, run 'git branch -D %s'."
 msgstr ""
-"O ramo '%s' está por juntar na totalidade.\n"
+"O ramo '%s' está por ser totalmente juntado.\n"
 "Se tens a certeza que queres eliminá-lo, executa 'git branch -D %s'."
 
-#: builtin/branch.c:189
+#: builtin/branch.c:200
 msgid "Update of config-file failed"
 msgstr "Falha ao atualizar o ficheiro de configuração"
 
-#: builtin/branch.c:223
+#: builtin/branch.c:235
 msgid "cannot use -a with -d"
 msgstr "incapaz usar -a com -d"
 
-#: builtin/branch.c:230
+#: builtin/branch.c:242
 msgid "Couldn't look up commit object for HEAD"
-msgstr "Incapaz de pesquisar objeto commit para HEAD"
+msgstr "Incapaz de encontrar objeto memória para HEAD"
 
-#: builtin/branch.c:244
+#: builtin/branch.c:259
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
-msgstr "Impossível apagar ramo '%s' checked out em '%s'"
+msgstr "Incapaz eliminar ramo '%s' observado em '%s'"
 
-#: builtin/branch.c:259
+#: builtin/branch.c:274
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "ramo de monitorização remoto '%s' por encontrar."
 
-#: builtin/branch.c:260
+#: builtin/branch.c:275
 #, c-format
 msgid "branch '%s' not found."
 msgstr "ramo '%s' por encontrar."
 
-#: builtin/branch.c:291
+#: builtin/branch.c:306
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "Ramo de monitorização remoto %s eliminado (era %s).\n"
 
-#: builtin/branch.c:292
+#: builtin/branch.c:307
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "Ramo %s eliminado (era %s).\n"
 
-#: builtin/branch.c:440 builtin/tag.c:63
+#: builtin/branch.c:457 builtin/tag.c:64
 msgid "unable to parse format string"
 msgstr "incapaz processar o formato string"
 
-#: builtin/branch.c:471
+#: builtin/branch.c:488
 msgid "could not resolve HEAD"
 msgstr "incapaz resolver HEAD"
 
-#: builtin/branch.c:477
+#: builtin/branch.c:494
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "HEAD (%s) aponta para fora de refs/heads/"
 
-#: builtin/branch.c:492
+#: builtin/branch.c:509
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "O ramo %s está a ser rebaseado em %s"
 
-#: builtin/branch.c:496
+#: builtin/branch.c:513
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "Ramo %s está sendo bissetado em %s"
 
-#: builtin/branch.c:513
+#: builtin/branch.c:530
 msgid "cannot copy the current branch while not on any."
 msgstr "apenas podes copiar o ramo corrente enquanto estás num."
 
-#: builtin/branch.c:515
+#: builtin/branch.c:532
 msgid "cannot rename the current branch while not on any."
 msgstr "apenas podes renomear o ramo corrente enquanto estás num."
 
-#: builtin/branch.c:526
+#: builtin/branch.c:543
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Nome de ramo inválido: '%s'"
 
-#: builtin/branch.c:555
+#: builtin/branch.c:572
 msgid "Branch rename failed"
 msgstr "Renomear ramo falhou"
 
-#: builtin/branch.c:557
+#: builtin/branch.c:574
 msgid "Branch copy failed"
 msgstr "Copiar ramo falhou"
 
-#: builtin/branch.c:561
+#: builtin/branch.c:578
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "Criei uma cópia de ramo incorretamente denominado '%s'"
 
-#: builtin/branch.c:564
+#: builtin/branch.c:581
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "Renomeei o ramo incorretamente denominado '%s'"
 
-#: builtin/branch.c:570
+#: builtin/branch.c:587
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "Ramo renomeado para %s, mas HEAD está desatualizada!"
 
-#: builtin/branch.c:579
+#: builtin/branch.c:596
 msgid "Branch is renamed, but update of config-file failed"
 msgstr ""
-"O ramo mudou de nome, mas a atualização do ficheiro de configuração falhou"
+"Ramo mudou de nome, mas a atualização do ficheiro de configuração falhou"
 
-#: builtin/branch.c:581
+#: builtin/branch.c:598
 msgid "Branch is copied, but update of config-file failed"
-msgstr ""
-"O ramo mudou de nome, mas a atualização do ficheiro de configuração falhou"
+msgstr "Ramo foi copiado, mas a atualização do ficheiro de configuração falhou"
 
-#: builtin/branch.c:597
+#: builtin/branch.c:614
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
 "  %s\n"
 "Lines starting with '%c' will be stripped.\n"
 msgstr ""
-"Edite a descrição do ramo:\n"
+"Por favor, edita a descrição do ramo\n"
 "  %s\n"
-"Linha começadas com '%c' serão ignoradas.\n"
+"Linha começadas com '%c' serão removidas.\n"
 
-#: builtin/branch.c:631
+#: builtin/branch.c:651
 msgid "Generic options"
 msgstr "Opções genéricas"
 
-#: builtin/branch.c:633
+#: builtin/branch.c:653
 msgid "show hash and subject, give twice for upstream branch"
-msgstr "apresentar hash e assunto, duplique para ramos a montante"
+msgstr "mostrar hash e assunto, duplica para ramo upstream"
 
-#: builtin/branch.c:634
+#: builtin/branch.c:654
 msgid "suppress informational messages"
 msgstr "suprimir mensagens informativas"
 
-#: builtin/branch.c:635
-msgid "set up tracking mode (see git-pull(1))"
-msgstr "configurar modo de monitorização (vê git-pull(1))"
+#: builtin/branch.c:656 builtin/checkout.c:1571
+#: builtin/submodule--helper.c:3077
+msgid "set branch tracking configuration"
+msgstr "mostrar configuração de monitorização de ramo"
 
-#: builtin/branch.c:637
+#: builtin/branch.c:659
 msgid "do not use"
 msgstr "deixar de usar"
 
-#: builtin/branch.c:639 builtin/rebase.c:533
+#: builtin/branch.c:661
 msgid "upstream"
-msgstr "a montante"
+msgstr "upstream"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:661
 msgid "change the upstream info"
-msgstr "alterar a informação do ramo a montante"
+msgstr "alterar info de upstream"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:662
 msgid "unset the upstream info"
-msgstr "desdefinir info de upstream"
+msgstr "indefinir info de upstream"
 
-#: builtin/branch.c:641
+#: builtin/branch.c:663
 msgid "use colored output"
 msgstr "usar saída colorida"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:664
 msgid "act on remote-tracking branches"
-msgstr "atuar sobre ramos remoto de monitorização"
+msgstr "atuar sobre ramos remotos de monitorização"
 
-#: builtin/branch.c:644 builtin/branch.c:646
+#: builtin/branch.c:666 builtin/branch.c:668
 msgid "print only branches that contain the commit"
-msgstr "imprimir apenas ramos que contenham a memória"
+msgstr "mostrar apenas ramos que contenham a memória"
 
-#: builtin/branch.c:645 builtin/branch.c:647
+#: builtin/branch.c:667 builtin/branch.c:669
 msgid "print only branches that don't contain the commit"
-msgstr "imprimir apenas ramos que contenham outro commit"
+msgstr "mostrar apenas ramos a que falte a memória"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:672
 msgid "Specific git-branch actions:"
 msgstr "Ações específicas de git-branch:"
 
-#: builtin/branch.c:651
+#: builtin/branch.c:673
 msgid "list both remote-tracking and local branches"
-msgstr "listar ramos de monitorização remotos e ramos locais"
+msgstr "listar quer ramos de monitorização remotos quer ramos locais"
 
-#: builtin/branch.c:653
+#: builtin/branch.c:675
 msgid "delete fully merged branch"
-msgstr "eliminar um ramo totalmente integrado"
+msgstr "eliminar ramo que está totalmente junto"
 
-#: builtin/branch.c:654
+#: builtin/branch.c:676
 msgid "delete branch (even if not merged)"
 msgstr "elimina ramo (mesmo que esteja por juntar)"
 
-#: builtin/branch.c:655
+#: builtin/branch.c:677
 msgid "move/rename a branch and its reflog"
-msgstr "mover/renomear ramo e seu reflog"
+msgstr "mover/renomear ramo e seu registo-ref"
 
-#: builtin/branch.c:656
+#: builtin/branch.c:678
 msgid "move/rename a branch, even if target exists"
-msgstr "mover/renomear um ramo, mesmo se alvo exista"
+msgstr "mover/renomear um ramo, mesmo se existe alvo"
 
-#: builtin/branch.c:657
+#: builtin/branch.c:679
 msgid "copy a branch and its reflog"
-msgstr "copiar ramo e seu reflog"
+msgstr "copiar ramo e seu registo-ref"
 
-#: builtin/branch.c:658
+#: builtin/branch.c:680
 msgid "copy a branch, even if target exists"
-msgstr "copiar um ramo, mesmo se alvo exista"
+msgstr "copiar um ramo, mesmo se existe alvo"
 
-#: builtin/branch.c:659
+#: builtin/branch.c:681
 msgid "list branch names"
-msgstr "listar os nomes dos ramos"
+msgstr "listar nomes de ramos"
 
-#: builtin/branch.c:660
+#: builtin/branch.c:682
 msgid "show current branch name"
 msgstr "mostrar nome de ramo atual"
 
-#: builtin/branch.c:661
+#: builtin/branch.c:683 builtin/submodule--helper.c:3075
 msgid "create the branch's reflog"
-msgstr "criar reflog do ramo"
+msgstr "criar registo-ref de ramo"
 
-#: builtin/branch.c:663
+#: builtin/branch.c:685
 msgid "edit the description for the branch"
-msgstr "editar a descrição do ramo"
+msgstr "editar a descrição de ramo"
 
-#: builtin/branch.c:664
+#: builtin/branch.c:686
 msgid "force creation, move/rename, deletion"
-msgstr "forçar criação, mover/mudar o nome ou exclusão"
+msgstr "forçar criação, mover/renomear, eliminação"
 
-#: builtin/branch.c:665
+#: builtin/branch.c:687
 msgid "print only branches that are merged"
-msgstr "imprimir apenas os ramos que foram integrados"
+msgstr "mostrar apenas ramos que estão juntos"
 
-#: builtin/branch.c:666
+#: builtin/branch.c:688
 msgid "print only branches that are not merged"
-msgstr "imprimir apenas ramos que estão por juntar"
+msgstr "mostrar apenas ramos que estão por juntar"
 
-#: builtin/branch.c:667
+#: builtin/branch.c:689
 msgid "list branches in columns"
 msgstr "listar ramos em colunas"
 
-#: builtin/branch.c:669 builtin/for-each-ref.c:44 builtin/notes.c:415
-#: builtin/notes.c:418 builtin/notes.c:581 builtin/notes.c:584
-#: builtin/tag.c:477
+#: builtin/branch.c:691 builtin/for-each-ref.c:45 builtin/notes.c:413
+#: builtin/notes.c:416 builtin/notes.c:579 builtin/notes.c:582
+#: builtin/tag.c:476
 msgid "object"
 msgstr "objeto"
 
-#: builtin/branch.c:670
+#: builtin/branch.c:692
 msgid "print only branches of the object"
-msgstr "imprimir apenas ramos de objeto"
+msgstr "mostrar apenas ramos de objeto"
 
-#: builtin/branch.c:671 builtin/for-each-ref.c:50 builtin/tag.c:484
+#: builtin/branch.c:693 builtin/for-each-ref.c:51 builtin/tag.c:483
 msgid "sorting and filtering are case insensitive"
 msgstr "ordenar e filtrar são insensíveis a maiúsculas"
 
-#: builtin/branch.c:672 builtin/for-each-ref.c:40 builtin/tag.c:482
-#: builtin/verify-tag.c:38
+#: builtin/branch.c:694 builtin/ls-files.c:667
+msgid "recurse through submodules"
+msgstr "percorrer recursivamente pelos submódulos"
+
+#: builtin/branch.c:695 builtin/for-each-ref.c:41 builtin/ls-tree.c:358
+#: builtin/tag.c:481 builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "formato a usar na saída"
 
-#: builtin/branch.c:695 builtin/clone.c:794
+#: builtin/branch.c:718 builtin/clone.c:684
 msgid "HEAD not found below refs/heads!"
-msgstr "HEAD por encontrar em refs/heads!"
+msgstr "HEAD ficou por encontrar em refs/heads!"
 
-#: builtin/branch.c:719
-msgid "--column and --verbose are incompatible"
-msgstr "--column e --verbose são incompatíveis"
+#: builtin/branch.c:739
+msgid ""
+"branch with --recurse-submodules can only be used if submodule."
+"propagateBranches is enabled"
+msgstr ""
+
+#: builtin/branch.c:741
+msgid "--recurse-submodules can only be used to create branches"
+msgstr ""
 
-#: builtin/branch.c:734 builtin/branch.c:790 builtin/branch.c:799
+#: builtin/branch.c:770 builtin/branch.c:826 builtin/branch.c:835
 msgid "branch name required"
 msgstr "nome do ramo é obrigatório"
 
-#: builtin/branch.c:766
+#: builtin/branch.c:802
 msgid "Cannot give description to detached HEAD"
-msgstr "Impossível dar descrição a HEAD solta"
+msgstr "Incapaz de dar descrição a HEAD desanexada"
 
-#: builtin/branch.c:771
+#: builtin/branch.c:807
 msgid "cannot edit description of more than one branch"
 msgstr "incapaz editar descrição de mais do que um ramo"
 
-#: builtin/branch.c:778
+#: builtin/branch.c:814
 #, c-format
 msgid "No commit on branch '%s' yet."
-msgstr "Ramo '%s' ainda tem commit nenhum."
+msgstr "Ainda sem memórias em ramo '%s'."
 
-#: builtin/branch.c:781
+#: builtin/branch.c:817
 #, c-format
 msgid "No branch named '%s'."
 msgstr "Ramo nenhum denominado '%s'."
 
-#: builtin/branch.c:796
+#: builtin/branch.c:832
 msgid "too many branches for a copy operation"
-msgstr "demasiados ramos para operação de cópia"
+msgstr "demasiados ramos para uma operação de cópia"
 
-#: builtin/branch.c:805
+#: builtin/branch.c:841
 msgid "too many arguments for a rename operation"
-msgstr "demasiados ramos para operação de renomeação"
+msgstr "demasiados argumentos para uma operação de renomeação"
 
-#: builtin/branch.c:810
+#: builtin/branch.c:846
 msgid "too many arguments to set new upstream"
-msgstr "demasiados ramos para definir novo ramo a montante"
+msgstr "demasiados argumentos para definir novo upstream"
 
-#: builtin/branch.c:814
+#: builtin/branch.c:850
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
@@ -11614,72 +12182,73 @@ msgstr ""
 "apenas pode definir upstream de HEAD para %s quando aponta para qualquer "
 "ramo."
 
-#: builtin/branch.c:817 builtin/branch.c:840
+#: builtin/branch.c:853 builtin/branch.c:873
 #, c-format
 msgid "no such branch '%s'"
-msgstr "esse ramo '%s' é inexistente"
+msgstr "ramo '%s' inexistente"
 
-#: builtin/branch.c:821
+#: builtin/branch.c:857
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "ramo '%s' é inexistente"
 
-#: builtin/branch.c:834
+#: builtin/branch.c:867
 msgid "too many arguments to unset upstream"
-msgstr "demasiados argumentos para desdefinir upstream"
+msgstr "demasiados argumentos para indefinir upstream"
 
-#: builtin/branch.c:838
+#: builtin/branch.c:871
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr ""
-"apenas posso desdefinir upstream de HEAD quando aponta para qualquer ramo."
+"apenas posso indefinir upstream de HEAD quando aponta para qualquer ramo."
 
-#: builtin/branch.c:844
+#: builtin/branch.c:877
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "Ramo '%s' tem informação de upstream nenhuma"
 
-#: builtin/branch.c:854
+#: builtin/branch.c:890
 msgid ""
 "The -a, and -r, options to 'git branch' do not take a branch name.\n"
 "Did you mean to use: -a|-r --list <pattern>?"
 msgstr ""
 "As opções -a, e -r, em 'git branch' levam nome de branch nenhum.\n"
-"Quiseste utilizar: -a|-r --list <pattern>? "
+"Quiseste utilizar: -a|-r --list <padrão>? "
 
-#: builtin/branch.c:858
+#: builtin/branch.c:894
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
 msgstr ""
-"opção --set-upstream está obsoleta. Por favor, usa '--track' ou '--set-"
-"upstream-to' invés."
+"opção --set-upstream está obsoleta. Por favor, usa '--track' ou '--set-"
+"upstream-to invés."
 
-#: builtin/bugreport.c:15
+#: builtin/bugreport.c:16
 msgid "git version:\n"
 msgstr "versão git:\n"
 
-#: builtin/bugreport.c:21
+#: builtin/bugreport.c:22
 #, c-format
 msgid "uname() failed with error '%s' (%d)\n"
-msgstr ""
+msgstr "uname() falhou com erro '%s' (%d)\n"
 
-#: builtin/bugreport.c:31
+#: builtin/bugreport.c:32
 msgid "compiler info: "
-msgstr ""
+msgstr "info de compilador: "
 
-#: builtin/bugreport.c:34
+#: builtin/bugreport.c:35
 msgid "libc info: "
-msgstr ""
+msgstr "info de libc: "
 
-#: builtin/bugreport.c:80
+#: builtin/bugreport.c:49
 msgid "not run from a git repository - no hooks to show\n"
-msgstr ""
+msgstr "executado fora de repositório git - com ganchos nenhuns para mostrar\n"
 
-#: builtin/bugreport.c:90
+#: builtin/bugreport.c:62
 msgid "git bugreport [-o|--output-directory <file>] [-s|--suffix <format>]"
 msgstr ""
+"git bugreport [-o|--output-directory <ficheiro>] [-s|--suffix <formato>]"
 
-#: builtin/bugreport.c:97
+#: builtin/bugreport.c:69
 msgid ""
 "Thank you for filling out a Git bug report!\n"
 "Please answer the following questions to help us understand your issue.\n"
@@ -11698,41 +12267,36 @@ msgid ""
 "You can delete any lines you don't wish to share.\n"
 msgstr ""
 
-#: builtin/bugreport.c:136
+#: builtin/bugreport.c:108
 msgid "specify a destination for the bugreport file"
-msgstr ""
+msgstr "especifica um destino para o ficheiro de reporte de bug"
 
-#: builtin/bugreport.c:138
+#: builtin/bugreport.c:110
 msgid "specify a strftime format suffix for the filename"
-msgstr ""
+msgstr "especifica um sufixo strftime para o ficheiro"
 
-#: builtin/bugreport.c:160
+#: builtin/bugreport.c:132
 #, c-format
 msgid "could not create leading directories for '%s'"
 msgstr "incapaz criar pastas superiores para '%s'"
 
-#: builtin/bugreport.c:167
+#: builtin/bugreport.c:139
 msgid "System Info"
-msgstr ""
+msgstr "Info de sistema"
 
-#: builtin/bugreport.c:170
+#: builtin/bugreport.c:142
 msgid "Enabled Hooks"
-msgstr "Hooks Ativados"
-
-#: builtin/bugreport.c:177
-#, c-format
-msgid "couldn't create a new file at '%s'"
-msgstr "incapaz criar novo ficheiro em '%s'"
+msgstr "Ganchos Ativados"
 
-#: builtin/bugreport.c:180
+#: builtin/bugreport.c:149
 #, c-format
 msgid "unable to write to %s"
 msgstr "incapaz escrever para %s"
 
-#: builtin/bugreport.c:190
+#: builtin/bugreport.c:159
 #, c-format
 msgid "Created new report at '%s'.\n"
-msgstr ""
+msgstr "Criado novo reporte em '%s'.\n"
 
 #: builtin/bundle.c:15 builtin/bundle.c:23
 msgid "git bundle create [<options>] <file> <git-rev-list args>"
@@ -11744,141 +12308,251 @@ msgstr "git bundle verify [<opções>] <ficheiro>"
 
 #: builtin/bundle.c:17 builtin/bundle.c:33
 msgid "git bundle list-heads <file> [<refname>...]"
-msgstr ""
+msgstr "git bundle list-heads <ficheiro> [<nome-ref>...]"
 
 #: builtin/bundle.c:18 builtin/bundle.c:38
 msgid "git bundle unbundle <file> [<refname>...]"
-msgstr ""
+msgstr "git bundle unbundle <ficheiro> [<nome-ref>...]"
 
-#: builtin/bundle.c:67 builtin/pack-objects.c:3907
+#: builtin/bundle.c:65 builtin/pack-objects.c:3899
 msgid "do not show progress meter"
 msgstr "mostrar medidor de progresso nenhum"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3909
+#: builtin/bundle.c:67 builtin/bundle.c:168 builtin/pack-objects.c:3901
 msgid "show progress meter"
 msgstr "mostrar medidor de progresso"
 
-#: builtin/bundle.c:71 builtin/pack-objects.c:3911
+#: builtin/bundle.c:69 builtin/pack-objects.c:3903
 msgid "show progress meter during object writing phase"
 msgstr "mostrar medidor de progresso durante fase de escrita de objetos"
 
-#: builtin/bundle.c:74 builtin/pack-objects.c:3914
+#: builtin/bundle.c:72 builtin/pack-objects.c:3906
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "semelhante a --all-progress quando o medidor de progresso é mostrado"
 
-#: builtin/bundle.c:76
+#: builtin/bundle.c:74
 msgid "specify bundle format version"
-msgstr ""
+msgstr "especifica formato de versão de arquivo-pacote"
 
-#: builtin/bundle.c:96
+#: builtin/bundle.c:94
 msgid "Need a repository to create a bundle."
-msgstr "É necessário um repositório para criar um bundle."
+msgstr "É necessário um repositório para criar um arquivo-pacote."
 
-#: builtin/bundle.c:109
+#: builtin/bundle.c:108
 msgid "do not show bundle details"
-msgstr "mostrar nenhuns detalhes de conjunto"
+msgstr "mostrar nenhuns detalhes de arquivo-pacote"
 
-#: builtin/bundle.c:128
+#: builtin/bundle.c:127
 #, c-format
 msgid "%s is okay\n"
 msgstr "%s está ok\n"
 
-#: builtin/bundle.c:179
+#: builtin/bundle.c:183
 msgid "Need a repository to unbundle."
-msgstr "É preciso um repositório para desempacotar."
+msgstr "É preciso um repositório para desarquivar."
 
-#: builtin/bundle.c:191 builtin/remote.c:1700
-msgid "be verbose; must be placed before a subcommand"
-msgstr "ser verboso; deve ser colocado antes de um subcomando"
+#: builtin/bundle.c:186
+msgid "Unbundling objects"
+msgstr "Desarquivando objetos"
 
-#: builtin/bundle.c:213 builtin/remote.c:1731
+#: builtin/bundle.c:220 builtin/remote.c:1758
 #, c-format
 msgid "Unknown subcommand: %s"
 msgstr "Subcomando desconhecido: %s"
 
-#: builtin/cat-file.c:596
+#: builtin/cat-file.c:568
+msgid "flush is only for --buffer mode"
+msgstr ""
+
+#: builtin/cat-file.c:612
+msgid "empty command in input"
+msgstr "comando vazio na entrada"
+
+#: builtin/cat-file.c:614
+#, c-format
+msgid "whitespace before command: '%s'"
+msgstr "espaço-em-branco antes de comando: '%s'"
+
+#: builtin/cat-file.c:623
+#, c-format
+msgid "%s requires arguments"
+msgstr "%s exige argumentos"
+
+#: builtin/cat-file.c:628
+#, c-format
+msgid "%s takes no arguments"
+msgstr "%s leva argumentos nenhuns"
+
+#: builtin/cat-file.c:636
+#, c-format
+msgid "unknown command: '%s'"
+msgstr "comando desconhecido: '%s'"
+
+#: builtin/cat-file.c:795
+msgid "only one batch option may be specified"
+msgstr "apenas uma opção batch pode ser especificada"
+
+#: builtin/cat-file.c:824
+msgid "git cat-file <type> <object>"
+msgstr "git cat-file <type> <objeto>"
+
+#: builtin/cat-file.c:825
+msgid "git cat-file (-e | -p) <object>"
+msgstr "git cat-file (-e | -p) <objeto>"
+
+#: builtin/cat-file.c:826
+msgid "git cat-file (-t | -s) [--allow-unknown-type] <object>"
+msgstr ""
+
+#: builtin/cat-file.c:827
 msgid ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <type> | --textconv | --filters) [--path=<path>] <object>"
+"git cat-file (--batch | --batch-check | --batch-command) [--batch-all-"
+"objects]\n"
+"             [--buffer] [--follow-symlinks] [--unordered]\n"
+"             [--textconv | --filters]"
 msgstr ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <tipo> | --textconv | --filters) [--path=<caminho>] <objeto>"
+"git cat-file (--batch | --batch-check | --batch-command) [--batch-all-"
+"objects]\n"
+"             [--buffer] [--follow-symlinks] [--unordered]\n"
+"             [--textconv | --filters]"
 
-#: builtin/cat-file.c:597
+#: builtin/cat-file.c:830
 msgid ""
-"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
-"symlinks] [--textconv | --filters]"
+"git cat-file (--textconv | --filters)\n"
+"             [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]"
 msgstr ""
-"git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
-"filters]"
 
-#: builtin/cat-file.c:618
-msgid "only one batch option may be specified"
-msgstr "apenas uma opção batch pode ser especificada"
+#: builtin/cat-file.c:836
+msgid "Check object existence or emit object contents"
+msgstr "Verifica existência de objeto ou emite conteúdo de objeto"
 
-#: builtin/cat-file.c:636
-msgid "<type> can be one of: blob, tree, commit, tag"
-msgstr "<tipo> pode ser um de: blob, tree, commit, tag"
+#: builtin/cat-file.c:838
+msgid "check if <object> exists"
+msgstr "verificando se <objeto> existe"
+
+#: builtin/cat-file.c:839
+msgid "pretty-print <object> content"
+msgstr "mostrar bonitinho o conteúdo de <objeto>"
 
-#: builtin/cat-file.c:637
-msgid "show object type"
-msgstr "mostrar tipo de objeto"
+#: builtin/cat-file.c:841
+msgid "Emit [broken] object attributes"
+msgstr ""
+
+#: builtin/cat-file.c:842
+msgid "show object type (one of 'blob', 'tree', 'commit', 'tag', ...)"
+msgstr ""
+"mostrar tipo de objeto (um de 'blob', 'árvore', 'memória', 'etiqueta', ...)"
 
-#: builtin/cat-file.c:638
+#: builtin/cat-file.c:843
 msgid "show object size"
 msgstr "mostrar tamanho do objeto"
 
-#: builtin/cat-file.c:640
-msgid "exit with zero when there's no error"
-msgstr "sair com retorno zero quando há erro nenhum"
+#: builtin/cat-file.c:845
+msgid "allow -s and -t to work with broken/corrupt objects"
+msgstr "permitir que -s e -t funcionem com objetos danificados/corrompidos"
 
-#: builtin/cat-file.c:641
-msgid "pretty-print object's content"
-msgstr "mostrar conteúdo do objeto com impressão bonita"
+#: builtin/cat-file.c:847
+msgid "Batch objects requested on stdin (or --batch-all-objects)"
+msgstr ""
 
-#: builtin/cat-file.c:643
-msgid "for blob objects, run textconv on object's content"
-msgstr "executar textconv no conteúdo de objetos blob"
+#: builtin/cat-file.c:849
+msgid "show full <object> or <rev> contents"
+msgstr ""
 
-#: builtin/cat-file.c:645
-msgid "for blob objects, run filters on object's content"
-msgstr "para objetos blob, correr filtros sobre o conteúdo do objeto"
+#: builtin/cat-file.c:853
+msgid "like --batch, but don't emit <contents>"
+msgstr ""
 
-#: builtin/cat-file.c:646
-msgid "blob"
-msgstr "blob"
+#: builtin/cat-file.c:857
+msgid "read commands from stdin"
+msgstr "ler comandos de entrada padrão"
 
-#: builtin/cat-file.c:647
-msgid "use a specific path for --textconv/--filters"
-msgstr "usar um caminho específico para --textconv/--filters"
+#: builtin/cat-file.c:861
+msgid "with --batch[-check]: ignores stdin, batches all known objects"
+msgstr ""
 
-#: builtin/cat-file.c:649
-msgid "allow -s and -t to work with broken/corrupt objects"
-msgstr "permitir que -s e -t funcionem com objetos danificados/corrompidos"
+#: builtin/cat-file.c:863
+msgid "Change or optimize batch output"
+msgstr ""
 
-#: builtin/cat-file.c:650
+#: builtin/cat-file.c:864
 msgid "buffer --batch output"
 msgstr "carregar a saída de --batch"
 
-#: builtin/cat-file.c:652
-msgid "show info and content of objects fed from the standard input"
-msgstr "mostrar informação e conteúdo dos objetos fornecidos na entrada padrão"
+#: builtin/cat-file.c:866
+msgid "follow in-tree symlinks"
+msgstr "seguir ligação simbólica de dentro da árvore"
+
+#: builtin/cat-file.c:868
+msgid "do not order objects before emitting them"
+msgstr "proibido ordenar objetos antes de emiti-los"
+
+#: builtin/cat-file.c:870
+msgid ""
+"Emit object (blob or tree) with conversion or filter (stand-alone, or with "
+"batch)"
+msgstr ""
+
+#: builtin/cat-file.c:872
+msgid "run textconv on object's content"
+msgstr "executar textconv sobre o conteúdo de objeto"
+
+#: builtin/cat-file.c:874
+msgid "run filters on object's content"
+msgstr "executar filtros sobre o conteúdo de objeto"
+
+#: builtin/cat-file.c:875
+msgid "blob|tree"
+msgstr "blob|árvore"
+
+#: builtin/cat-file.c:876
+msgid "use a <path> for (--textconv | --filters); Not with 'batch'"
+msgstr "usar um <caminho> para (--textconv | --filters); sem 'batch'"
+
+#: builtin/cat-file.c:894
+#, c-format
+msgid "'%s=<%s>' needs '%s' or '%s'"
+msgstr ""
+
+#: builtin/cat-file.c:896
+msgid "path|tree-ish"
+msgstr "caminho|arvoredo"
 
-#: builtin/cat-file.c:656
-msgid "show info about objects fed from the standard input"
-msgstr "mostrar informação sobre os objetos fornecidos na entrada padrão"
+#: builtin/cat-file.c:903 builtin/cat-file.c:906 builtin/cat-file.c:909
+#, c-format
+msgid "'%s' requires a batch mode"
+msgstr "'%s' exige um modo em lote"
+
+#: builtin/cat-file.c:921
+#, c-format
+msgid "'-%c' is incompatible with batch mode"
+msgstr "'-%c' é incompatível com modo em lote"
+
+#: builtin/cat-file.c:924
+msgid "batch modes take no arguments"
+msgstr "modos lote levam nenhuns argumentos"
 
-#: builtin/cat-file.c:660
-msgid "follow in-tree symlinks (used with --batch or --batch-check)"
+#: builtin/cat-file.c:932 builtin/cat-file.c:935
+#, c-format
+msgid "<rev> required with '%s'"
+msgstr ""
+
+#: builtin/cat-file.c:938
+#, c-format
+msgid "<object> required with '-%c'"
 msgstr ""
-"seguir ligações simbólica de dentro da árvore (usado com --batch ou --batch-check)"
 
-#: builtin/cat-file.c:662
-msgid "show all objects with --batch or --batch-check"
-msgstr "mostrar todos os objetos com --batch ou --batch-check"
+#: builtin/cat-file.c:943 builtin/notes.c:374 builtin/notes.c:429
+#: builtin/notes.c:507 builtin/notes.c:519 builtin/notes.c:596
+#: builtin/notes.c:663 builtin/notes.c:813 builtin/notes.c:965
+#: builtin/notes.c:987 builtin/prune-packed.c:25 builtin/receive-pack.c:2489
+#: builtin/tag.c:592
+msgid "too many arguments"
+msgstr ""
 
-#: builtin/cat-file.c:664
-msgid "do not order --batch-all-objects output"
+#: builtin/cat-file.c:947
+#, c-format
+msgid "only two arguments allowed in <type> <object> mode, not %d"
 msgstr ""
 
 #: builtin/check-attr.c:13
@@ -11891,22 +12565,22 @@ msgstr "git check-attr --stdin [-z] [-a | --all | <atributo>...]"
 
 #: builtin/check-attr.c:21
 msgid "report all attributes set on file"
-msgstr "apresentar todos os atributos definidos no ficheiro"
+msgstr "reportar todos os atributos definidos no ficheiro"
 
 #: builtin/check-attr.c:22
 msgid "use .gitattributes only from the index"
-msgstr "usar .gitattributes apenas de cenário"
+msgstr "usar apenas .gitattributes de cenário"
 
-#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:102
+#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:101
 msgid "read file names from stdin"
-msgstr "ler os nomes dos ficheiros da entrada padrão"
+msgstr "ler nomes de ficheiros da entrada padrão"
 
 #: builtin/check-attr.c:25 builtin/check-ignore.c:27
 msgid "terminate input and output records by a NUL character"
 msgstr "terminar registos da entrada e da saída com um carácter NUL"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1515 builtin/gc.c:549
-#: builtin/worktree.c:493
+#: builtin/check-ignore.c:21 builtin/checkout.c:1550 builtin/gc.c:550
+#: builtin/worktree.c:565
 msgid "suppress progress reporting"
 msgstr "suprimir informação de progresso"
 
@@ -11928,7 +12602,7 @@ msgstr "-z só faz sentido com --stdin"
 
 #: builtin/check-ignore.c:170
 msgid "no path specified"
-msgstr "path nenhum especificado"
+msgstr "caminho nenhum especificado"
 
 #: builtin/check-ignore.c:174
 msgid "--quiet is only valid with a single pathname"
@@ -11963,218 +12637,215 @@ msgstr "contato nenhum especificado"
 msgid "git checkout--worker [<options>]"
 msgstr "git checkout--worker [<opções>]"
 
-#: builtin/checkout--worker.c:118 builtin/checkout-index.c:201
-#: builtin/column.c:31 builtin/submodule--helper.c:1892
-#: builtin/submodule--helper.c:1895 builtin/submodule--helper.c:1903
-#: builtin/submodule--helper.c:2350 builtin/submodule--helper.c:2896
-#: builtin/submodule--helper.c:2899 builtin/worktree.c:491
-#: builtin/worktree.c:728
+#: builtin/checkout--worker.c:118 builtin/checkout-index.c:235
+#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1878
+#: builtin/submodule--helper.c:1881 builtin/submodule--helper.c:1889
+#: builtin/submodule--helper.c:2716 builtin/worktree.c:563
+#: builtin/worktree.c:808
 msgid "string"
 msgstr "string"
 
-#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:236
 msgid "when creating files, prepend <string>"
 msgstr "ao criar ficheiros, preceder com <string>"
 
-#: builtin/checkout-index.c:152
+#: builtin/checkout-index.c:184
 msgid "git checkout-index [<options>] [--] [<file>...]"
 msgstr "git checkout-index [<opções>] [--] [<ficheiro>...]"
 
-#: builtin/checkout-index.c:169
+#: builtin/checkout-index.c:201
 msgid "stage should be between 1 and 3 or all"
-msgstr "stage deve ser um número entre 1 e 3 ou o parâmetro all"
+msgstr "cenário tem de ser entre 1 e 3 ou all"
 
-#: builtin/checkout-index.c:187
+#: builtin/checkout-index.c:219
 msgid "check out all files in the index"
-msgstr "extrair todos os ficheiros presentes no índice"
+msgstr "observar todos os ficheiros de cenário"
 
-#: builtin/checkout-index.c:188
+#: builtin/checkout-index.c:221
+msgid "do not skip files with skip-worktree set"
+msgstr ""
+
+#: builtin/checkout-index.c:222
 msgid "force overwrite of existing files"
 msgstr "forçar o sobrescrever de ficheiros existentes"
 
-#: builtin/checkout-index.c:190
+#: builtin/checkout-index.c:224
 msgid "no warning for existing files and files not in index"
-msgstr ""
-"mostrar aviso nenhum para ficheiros existentes e ficheiros fora do index"
+msgstr "aviso nenhum para ficheiros existentes e ficheiros fora de cenário"
 
-#: builtin/checkout-index.c:192
+#: builtin/checkout-index.c:226
 msgid "don't checkout new files"
-msgstr "extrair ficheiros novos nenhuns"
+msgstr "observar ficheiros novos nenhuns"
 
-#: builtin/checkout-index.c:194
+#: builtin/checkout-index.c:228
 msgid "update stat information in the index file"
-msgstr "atualizar informação de stat de ficheiro de cenário"
+msgstr "atualizar informação de stat no ficheiro de cenário"
 
-#: builtin/checkout-index.c:198
+#: builtin/checkout-index.c:232
 msgid "read list of paths from the standard input"
 msgstr "ler lista de caminhos da entrada padrão"
 
-#: builtin/checkout-index.c:200
+#: builtin/checkout-index.c:234
 msgid "write the content to temporary files"
 msgstr "escrever o conteúdo em ficheiros temporários"
 
-#: builtin/checkout-index.c:204
+#: builtin/checkout-index.c:238
 msgid "copy out the files from named stage"
-msgstr "copiar os ficheiros do estágio indicado"
+msgstr "copiar os ficheiros do cenário indicado"
 
-#: builtin/checkout.c:33
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [<opções>] <ramo>"
 
-#: builtin/checkout.c:34
+#: builtin/checkout.c:35
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [<opções>] [<ramo>] -- <ficheiro>..."
 
-#: builtin/checkout.c:39
+#: builtin/checkout.c:40
 msgid "git switch [<options>] [<branch>]"
 msgstr "git switch [<opções>] [<ramo>]"
 
-#: builtin/checkout.c:44
+#: builtin/checkout.c:45
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<opções>] [--source=<ramo>] <ficheiro>..."
 
-#: builtin/checkout.c:190 builtin/checkout.c:229
+#: builtin/checkout.c:199 builtin/checkout.c:238
 #, c-format
 msgid "path '%s' does not have our version"
-msgstr "path '%s' é diferente da nossa versão"
+msgstr "caminho '%s' é diferente da nossa versão"
 
-#: builtin/checkout.c:192 builtin/checkout.c:231
+#: builtin/checkout.c:201 builtin/checkout.c:240
 #, c-format
 msgid "path '%s' does not have their version"
-msgstr "path '%s' é diferente da versão deles"
+msgstr "caminho '%s' é diferente da versão deles"
 
-#: builtin/checkout.c:208
+#: builtin/checkout.c:217
 #, c-format
 msgid "path '%s' does not have all necessary versions"
-msgstr "path '%s' falta todas as versões necessárias"
+msgstr "caminho '%s' falta todas as versões necessárias"
 
-#: builtin/checkout.c:261
+#: builtin/checkout.c:271
 #, c-format
 msgid "path '%s' does not have necessary versions"
-msgstr "path '%s' falta as versões necessárias"
+msgstr "caminho '%s' falta as versões necessárias"
 
-#: builtin/checkout.c:278
+#: builtin/checkout.c:291
 #, c-format
 msgid "path '%s': cannot merge"
-msgstr "path '%s': incapaz juntar"
+msgstr "caminho '%s': incapaz juntar"
 
-#: builtin/checkout.c:294
+#: builtin/checkout.c:307
 #, c-format
 msgid "Unable to add merge result for '%s'"
-msgstr "Impossível adicionar o resultado da junção para '%s'"
+msgstr "Incapaz adicionar o resultado da junção para '%s'"
 
-#: builtin/checkout.c:411
+#: builtin/checkout.c:424
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Recriar %d conflito de junção"
+msgstr[1] "Recriar %d conflitos de junção"
 
-#: builtin/checkout.c:416
+#: builtin/checkout.c:429
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "Atualizado %d caminho de %s"
 msgstr[1] "Atualizados %d caminhos de %s"
 
-#: builtin/checkout.c:423
+#: builtin/checkout.c:436
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] ""
 msgstr[1] ""
 
-#: builtin/checkout.c:446 builtin/checkout.c:449 builtin/checkout.c:452
-#: builtin/checkout.c:456
+#: builtin/checkout.c:459 builtin/checkout.c:462 builtin/checkout.c:465
+#: builtin/checkout.c:469
 #, c-format
 msgid "'%s' cannot be used with updating paths"
-msgstr "'%s' incapaz ser usado com paths em atualização"
-
-#: builtin/checkout.c:459 builtin/checkout.c:462
-#, c-format
-msgid "'%s' cannot be used with %s"
-msgstr "'%s' incapaz ser usado com %s"
+msgstr "'%s' incapaz ser usado com caminhos em atualização"
 
-#: builtin/checkout.c:466
+#: builtin/checkout.c:479
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
-msgstr "Incapaz atualizar paths e mudar para ramo '%s' ao mesmo tempo."
+msgstr "Incapaz atualizar caminhos e, ao mesmo tempo, mudar para ramo '%s'."
 
-#: builtin/checkout.c:470
+#: builtin/checkout.c:483
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr ""
 
-#: builtin/checkout.c:474
+#: builtin/checkout.c:487
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "'%s' tem de ser usado quando '%s' está por ser especificado"
 
-#: builtin/checkout.c:479 builtin/checkout.c:484
+#: builtin/checkout.c:492 builtin/checkout.c:497
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
-msgstr "'%s' ou '%s'  impossível ser usado com %s"
+msgstr "'%s' ou '%s'  incapaz ser usado com %s"
 
-#: builtin/checkout.c:558 builtin/checkout.c:565
+#: builtin/checkout.c:571 builtin/checkout.c:578
 #, c-format
 msgid "path '%s' is unmerged"
-msgstr "path '%s' está por juntar"
+msgstr "caminho '%s' está por juntar"
 
-#: builtin/checkout.c:734
+#: builtin/checkout.c:753
 msgid "you need to resolve your current index first"
 msgstr "primeiro precisas resolver teu cenário atual"
 
-#: builtin/checkout.c:788
+#: builtin/checkout.c:809
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
 "%s"
 msgstr ""
 
-#: builtin/checkout.c:881
+#: builtin/checkout.c:902
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "Incapaz fazer reflog para '%s': %s\n"
 
-#: builtin/checkout.c:923
+#: builtin/checkout.c:947
 msgid "HEAD is now at"
 msgstr "HEAD está agora em"
 
-#: builtin/checkout.c:927 builtin/clone.c:725 t/helper/test-fast-rebase.c:203
+#: builtin/checkout.c:951 builtin/clone.c:615 t/helper/test-fast-rebase.c:203
 msgid "unable to update HEAD"
 msgstr "incapaz atualizar HEAD"
 
-#: builtin/checkout.c:931
+#: builtin/checkout.c:955
 #, c-format
 msgid "Reset branch '%s'\n"
-msgstr "Repor ramo '%s'\n"
+msgstr "Restabelecer ramo '%s'\n"
 
-#: builtin/checkout.c:934
+#: builtin/checkout.c:958
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Já em '%s'\n"
 
-#: builtin/checkout.c:938
+#: builtin/checkout.c:962
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
-msgstr "Mudou para e repôs o ramo '%s'\n"
+msgstr "Trocou para e restabeleceu o ramo '%s'\n"
 
-#: builtin/checkout.c:940 builtin/checkout.c:1371
+#: builtin/checkout.c:964 builtin/checkout.c:1398
 #, c-format
 msgid "Switched to a new branch '%s'\n"
-msgstr "Mudou para o novo ramo '%s'\n"
+msgstr "Trocou para um novo ramo '%s'\n"
 
-#: builtin/checkout.c:942
+#: builtin/checkout.c:966
 #, c-format
 msgid "Switched to branch '%s'\n"
-msgstr "Mudou para o ramo '%s'\n"
+msgstr "Trocou para o ramo '%s'\n"
 
-#: builtin/checkout.c:993
+#: builtin/checkout.c:1017
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " ... e mais %d.\n"
 
-#: builtin/checkout.c:999
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -12187,17 +12858,17 @@ msgid_plural ""
 "\n"
 "%s\n"
 msgstr[0] ""
-"Aviso: estás deixando %d commit para trás, desconetado a qualquer dos teus "
-"ramos:\n"
+"Aviso: estás deixando %d memória para trás, desconectada de qualquer dos "
+"teus ramos:\n"
 "\n"
 "%s\n"
 msgstr[1] ""
-"Aviso: estás deixando %d commits para trás, desconetado a qualquer dos teus "
-"ramos:\n"
+"Aviso: estás deixando %d memórias para trás, desconectadas de qualquer dos "
+"teus ramos:\n"
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1018
+#: builtin/checkout.c:1042
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -12212,38 +12883,38 @@ msgid_plural ""
 " git branch <new-branch-name> %s\n"
 "\n"
 msgstr[0] ""
-"Se deseja mantê-lo, criando um novo ramo, agora seria uma boa altura\n"
+"Se desejas mantê-lo, criando um novo ramo, agora é uma boa altura\n"
 "para fazê-lo com:\n"
 "\n"
 " git branch <nome-do-novo-ramo> %s\n"
 "\n"
 msgstr[1] ""
-"Se deseja mantê-los, criando um novo ramo, agora seria uma boa altura\n"
+"Se desejas mantê-los, criando um novo ramo, agora é uma boa altura\n"
 "para fazê-lo com:\n"
 "\n"
 " git branch <nome-do-novo-ramo> %s\n"
 "\n"
 
-#: builtin/checkout.c:1053
+#: builtin/checkout.c:1077
 msgid "internal error in revision walk"
 msgstr "erro interno durante o curso de revisões"
 
-#: builtin/checkout.c:1057
+#: builtin/checkout.c:1081
 msgid "Previous HEAD position was"
 msgstr "A posição anterior de HEAD era"
 
-#: builtin/checkout.c:1097 builtin/checkout.c:1366
+#: builtin/checkout.c:1124 builtin/checkout.c:1393
 msgid "You are on a branch yet to be born"
-msgstr "Está num ramo ainda por nascer"
+msgstr "Estás num ramo ainda por nascer"
 
-#: builtin/checkout.c:1179
+#: builtin/checkout.c:1206
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
 "Please use -- (and optionally --no-guess) to disambiguate"
 msgstr ""
 
-#: builtin/checkout.c:1186
+#: builtin/checkout.c:1213
 msgid ""
 "If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
 "you can do so by fully qualifying the name with the --track option:\n"
@@ -12255,283 +12926,272 @@ msgid ""
 "checkout.defaultRemote=origin in your config."
 msgstr ""
 
-#: builtin/checkout.c:1196
+#: builtin/checkout.c:1223
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
-msgstr "'%s' correspondeu a múltiplos (%d) ramos remoto de monitorização"
+msgstr "'%s' correspondeu a múltiplos (%d) ramos remotos de monitorização"
 
-#: builtin/checkout.c:1262
+#: builtin/checkout.c:1289
 msgid "only one reference expected"
 msgstr "apenas uma referência esperada"
 
-#: builtin/checkout.c:1279
+#: builtin/checkout.c:1306
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "esperava apenas uma referência, %d fornecidas."
 
-#: builtin/checkout.c:1325 builtin/worktree.c:268 builtin/worktree.c:436
+#: builtin/checkout.c:1352 builtin/worktree.c:338 builtin/worktree.c:508
 #, c-format
 msgid "invalid reference: %s"
 msgstr "referência inválida: %s"
 
-#: builtin/checkout.c:1338 builtin/checkout.c:1707
+#: builtin/checkout.c:1365 builtin/checkout.c:1744
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "referência é árvore nenhuma: %s"
 
-#: builtin/checkout.c:1385
+#: builtin/checkout.c:1413
 #, c-format
 msgid "a branch is expected, got tag '%s'"
-msgstr "esperado um ramo, recebi tag '%s'"
+msgstr "esperado um ramo, recebi etiqueta '%s'"
 
-#: builtin/checkout.c:1387
+#: builtin/checkout.c:1415
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
-msgstr "um ramo é esperado, recebi ramo remoto '%s'"
+msgstr "esperado um ramo, recebi ramo remoto '%s'"
 
-#: builtin/checkout.c:1388 builtin/checkout.c:1396
+#: builtin/checkout.c:1417 builtin/checkout.c:1426
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "esperado um ramo, recebi '%s'"
 
-#: builtin/checkout.c:1391
+#: builtin/checkout.c:1420
 #, c-format
 msgid "a branch is expected, got commit '%s'"
-msgstr "é suposto um branch, recebi um commit '%s'"
+msgstr "esperado um ramo, recebi memória '%s'"
+
+#: builtin/checkout.c:1429
+msgid ""
+"If you want to detach HEAD at the commit, try again with the --detach option."
+msgstr ""
 
-#: builtin/checkout.c:1407
+#: builtin/checkout.c:1442
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
 msgstr ""
 
-#: builtin/checkout.c:1411
+#: builtin/checkout.c:1446
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
 msgstr ""
 
-#: builtin/checkout.c:1415
+#: builtin/checkout.c:1450
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
 msgstr ""
 
-#: builtin/checkout.c:1419
+#: builtin/checkout.c:1454
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
 msgstr ""
 
-#: builtin/checkout.c:1423
+#: builtin/checkout.c:1458
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
 msgstr ""
 
-#: builtin/checkout.c:1427
+#: builtin/checkout.c:1462
 msgid "you are switching branch while bisecting"
-msgstr "estás a trocar de ramo enquanto bissetas"
+msgstr "estás trocando de ramo enquanto bissetas"
 
-#: builtin/checkout.c:1434
+#: builtin/checkout.c:1469
 msgid "paths cannot be used with switching branches"
-msgstr "incapaz mudar ramo com o uso de paths"
+msgstr "incapaz usar caminhos com a troca de ramos"
 
-#: builtin/checkout.c:1437 builtin/checkout.c:1441 builtin/checkout.c:1445
+#: builtin/checkout.c:1472 builtin/checkout.c:1476 builtin/checkout.c:1480
 #, c-format
 msgid "'%s' cannot be used with switching branches"
-msgstr "incapaz de mudar ramo com o uso de '%s'"
+msgstr "incapaz usar '%s' com a troca de ramos"
 
-#: builtin/checkout.c:1449 builtin/checkout.c:1452 builtin/checkout.c:1455
-#: builtin/checkout.c:1460 builtin/checkout.c:1465
+#: builtin/checkout.c:1484 builtin/checkout.c:1487 builtin/checkout.c:1490
+#: builtin/checkout.c:1495 builtin/checkout.c:1500
 #, c-format
 msgid "'%s' cannot be used with '%s'"
-msgstr "'%s' é incapaz de ser usado com '%s'"
+msgstr "incapaz usar '%s' com '%s'"
 
-#: builtin/checkout.c:1462
+#: builtin/checkout.c:1497
 #, c-format
 msgid "'%s' cannot take <start-point>"
-msgstr "'%s' incapaz receber <start-point>"
+msgstr "'%s' incapaz de receber <ponto-inicial>"
 
-#: builtin/checkout.c:1470
+#: builtin/checkout.c:1505
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
-msgstr "Incapaz mudar ramo para '%s', pois está fora de ser um commit"
+msgstr "Apenas posso trocar ramo para uma memória, não para '%s'"
 
-#: builtin/checkout.c:1477
+#: builtin/checkout.c:1512
 msgid "missing branch or commit argument"
 msgstr "faltando argumento de ramo ou memória"
 
-#: builtin/checkout.c:1520
+#: builtin/checkout.c:1555
 msgid "perform a 3-way merge with the new branch"
-msgstr "realizar uma integração com 3 pontos com o novo ramo"
+msgstr "realizar uma tri-junção com o novo ramo"
 
-#: builtin/checkout.c:1521 builtin/log.c:1810 parse-options.h:323
+#: builtin/checkout.c:1556 builtin/log.c:1844 parse-options.h:354
 msgid "style"
 msgstr "estilo"
 
-#: builtin/checkout.c:1522
-msgid "conflict style (merge or diff3)"
-msgstr "estilo de conflito (merge ou diff3)"
+#: builtin/checkout.c:1557
+msgid "conflict style (merge, diff3, or zdiff3)"
+msgstr "estilo de conflito (merge, diff3 ou zdiff3)"
 
-#: builtin/checkout.c:1534 builtin/worktree.c:488
+#: builtin/checkout.c:1569 builtin/worktree.c:560
 msgid "detach HEAD at named commit"
-msgstr "destacar HEAD no commit indicado"
-
-#: builtin/checkout.c:1535
-msgid "set upstream info for new branch"
-msgstr "definir a informação do ramo a montante do novo ramo"
+msgstr "desanexar HEAD na memória indicada"
 
-#: builtin/checkout.c:1537
+#: builtin/checkout.c:1574
 msgid "force checkout (throw away local modifications)"
 msgstr "forçar observação (descartar modificações locais)"
 
-#: builtin/checkout.c:1539
+#: builtin/checkout.c:1576
 msgid "new-branch"
 msgstr "novo-ramo"
 
-#: builtin/checkout.c:1539
+#: builtin/checkout.c:1576
 msgid "new unparented branch"
-msgstr "novo ramo sem pai"
+msgstr "novo ramo sem parente"
 
-#: builtin/checkout.c:1541 builtin/merge.c:301
+#: builtin/checkout.c:1578 builtin/merge.c:305
 msgid "update ignored files (default)"
 msgstr "atualizar ficheiros ignorados (predefinição)"
 
-#: builtin/checkout.c:1544
+#: builtin/checkout.c:1581
 msgid "do not check if another worktree is holding the given ref"
-msgstr "incapaz verificar se outra worktree contém referência dada"
+msgstr "deixar por verificar se outra árvore-trabalho contém a ref dada"
 
-#: builtin/checkout.c:1557
+#: builtin/checkout.c:1594
 msgid "checkout our version for unmerged files"
-msgstr "checkout a nossa versão dos ficheiros por juntar"
+msgstr "observa a nossa versão dos ficheiros por juntar"
 
-#: builtin/checkout.c:1560
+#: builtin/checkout.c:1597
 msgid "checkout their version for unmerged files"
-msgstr "checkout a versão deles dos ficheiros por juntar"
+msgstr "observa a versão deles dos ficheiros por juntar"
 
-#: builtin/checkout.c:1564
+#: builtin/checkout.c:1601
 msgid "do not limit pathspecs to sparse entries only"
-msgstr "abrange especificadores de path além de entradas dispersas"
+msgstr "abranger espetro-caminhos além de entradas dispersas"
 
-#: builtin/checkout.c:1622
+#: builtin/checkout.c:1659
 #, c-format
-msgid "-%c, -%c and --orphan are mutually exclusive"
-msgstr ""
+msgid "options '-%c', '-%c', and '%s' cannot be used together"
+msgstr "opções '-%c', '-%c' e '%s' incapaz serem usadas juntas"
 
-#: builtin/checkout.c:1626
-msgid "-p and --overlay are mutually exclusive"
-msgstr ""
-
-#: builtin/checkout.c:1663
+#: builtin/checkout.c:1700
 msgid "--track needs a branch name"
-msgstr "--track precisa de nome dum ramo"
+msgstr "--track precisa de um nome de ramo"
 
-#: builtin/checkout.c:1668
+#: builtin/checkout.c:1705
 #, c-format
 msgid "missing branch name; try -%c"
-msgstr "faltando nome de ramo; tente -%c"
+msgstr "faltando nome de ramo; tenta -%c"
 
-#: builtin/checkout.c:1700
+#: builtin/checkout.c:1737
 #, c-format
 msgid "could not resolve %s"
 msgstr "incapaz resolver %s"
 
-#: builtin/checkout.c:1716
+#: builtin/checkout.c:1753
 msgid "invalid path specification"
 msgstr "especificação de caminho inválida"
 
-#: builtin/checkout.c:1723
+#: builtin/checkout.c:1760
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr ""
 
-#: builtin/checkout.c:1727
+#: builtin/checkout.c:1764
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
-msgstr "git checkout: --detach recusa path '%s' como argumento"
-
-#: builtin/checkout.c:1736
-msgid "--pathspec-from-file is incompatible with --detach"
-msgstr ""
-
-#: builtin/checkout.c:1739 builtin/reset.c:325 builtin/stash.c:1630
-msgid "--pathspec-from-file is incompatible with --patch"
-msgstr ""
+msgstr "git checkout: --detach recusa caminho '%s' como argumento"
 
-#: builtin/checkout.c:1752
+#: builtin/checkout.c:1789
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
 msgstr ""
 "git checkout: --ours/--theirs, --force e --merge são incompatíveis\n"
-"durante a extração do índice."
+"durante a observação do cenário."
 
-#: builtin/checkout.c:1757
+#: builtin/checkout.c:1794
 msgid "you must specify path(s) to restore"
-msgstr "deves especificar caminho(s) a restaurar"
+msgstr "tens de especificar caminho(s) a restaurar"
 
-#: builtin/checkout.c:1783 builtin/checkout.c:1785 builtin/checkout.c:1834
-#: builtin/checkout.c:1836 builtin/clone.c:126 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2736
-#: builtin/submodule--helper.c:2887 builtin/worktree.c:484
-#: builtin/worktree.c:486
+#: builtin/checkout.c:1819 builtin/checkout.c:1821 builtin/checkout.c:1873
+#: builtin/checkout.c:1875 builtin/clone.c:130 builtin/remote.c:171
+#: builtin/remote.c:173 builtin/submodule--helper.c:3038
+#: builtin/submodule--helper.c:3371 builtin/worktree.c:556
+#: builtin/worktree.c:558
 msgid "branch"
 msgstr "ramo"
 
-#: builtin/checkout.c:1784
+#: builtin/checkout.c:1820
 msgid "create and checkout a new branch"
-msgstr "criar e extrair um novo ramo"
+msgstr "criar e observar um novo ramo"
 
-#: builtin/checkout.c:1786
+#: builtin/checkout.c:1822
 msgid "create/reset and checkout a branch"
 msgstr "criar/restabelecer e observar um ramo"
 
-#: builtin/checkout.c:1787
+#: builtin/checkout.c:1823
 msgid "create reflog for new branch"
-msgstr "criar reflog do novo ramo"
+msgstr "criar registo-ref para novo ramo"
 
-#: builtin/checkout.c:1789
+#: builtin/checkout.c:1825
 msgid "second guess 'git checkout <no-such-branch>' (default)"
-msgstr "tentar adivinhar 'git checkout <ramo-inexistente>' (predefinido)"
+msgstr "tentando adivinhar 'git checkout <ramo-inexistente>' (predefinido)"
 
-#: builtin/checkout.c:1790
+#: builtin/checkout.c:1826
 msgid "use overlay mode (default)"
 msgstr "usar modo overlay (predefinido)"
 
-#: builtin/checkout.c:1835
+#: builtin/checkout.c:1874
 msgid "create and switch to a new branch"
 msgstr "criar e trocar para um novo ramo"
 
-#: builtin/checkout.c:1837
+#: builtin/checkout.c:1876
 msgid "create/reset and switch to a branch"
 msgstr "criar/restabelecer e trocar para um ramo"
 
-#: builtin/checkout.c:1839
+#: builtin/checkout.c:1878
 msgid "second guess 'git switch <no-such-branch>'"
-msgstr "tentar adivinhar 'git switch <ramo-inexistente>'"
+msgstr "tentando adivinhar 'git switch <ramo-inexistente>'"
 
-#: builtin/checkout.c:1841
+#: builtin/checkout.c:1880
 msgid "throw away local modifications"
 msgstr "descartar modificações locais"
 
-#: builtin/checkout.c:1875
+#: builtin/checkout.c:1916
 msgid "which tree-ish to checkout from"
 msgstr ""
 
-#: builtin/checkout.c:1877
+#: builtin/checkout.c:1918
 msgid "restore the index"
 msgstr "restaurar o cenário"
 
-#: builtin/checkout.c:1879
+#: builtin/checkout.c:1920
 msgid "restore the working tree (default)"
 msgstr "restaurar a árvore-trabalho (predefinido)"
 
-#: builtin/checkout.c:1881
+#: builtin/checkout.c:1922
 msgid "ignore unmerged entries"
 msgstr "ignora entradas por juntar"
 
-#: builtin/checkout.c:1882
+#: builtin/checkout.c:1923
 msgid "use overlay mode"
 msgstr "usar modo overlay"
 
@@ -12544,7 +13204,7 @@ msgstr ""
 #: builtin/clean.c:33
 #, c-format
 msgid "Removing %s\n"
-msgstr "A remover %s\n"
+msgstr "Removendo %s\n"
 
 #: builtin/clean.c:34
 #, c-format
@@ -12554,19 +13214,27 @@ msgstr "Removeria %s\n"
 #: builtin/clean.c:35
 #, c-format
 msgid "Skipping repository %s\n"
-msgstr "A ignorar o repositório %s\n"
+msgstr "Saltando o repositório %s\n"
 
 #: builtin/clean.c:36
 #, c-format
 msgid "Would skip repository %s\n"
-msgstr "Ignoraria o repositório %s\n"
+msgstr "Saltaria o repositório %s\n"
 
 #: builtin/clean.c:38
 #, c-format
 msgid "could not lstat %s\n"
 msgstr "incapaz lstat %s\n"
 
-#: builtin/clean.c:300 git-add--interactive.perl:593
+#: builtin/clean.c:39
+msgid "Refusing to remove current working directory\n"
+msgstr "Recusando remover pasta-trabalho atual\n"
+
+#: builtin/clean.c:40
+msgid "Would refuse to remove current working directory\n"
+msgstr "Recusaria remover pasta-trabalho atual\n"
+
+#: builtin/clean.c:326 git-add--interactive.perl:593
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -12579,7 +13247,7 @@ msgstr ""
 "foo        - selecionar item baseado no prefixo único\n"
 "           - (vazio) seleciona nada\n"
 
-#: builtin/clean.c:304 git-add--interactive.perl:602
+#: builtin/clean.c:330 git-add--interactive.perl:602
 #, c-format
 msgid ""
 "Prompt help:\n"
@@ -12600,33 +13268,33 @@ msgstr ""
 "*          - escolher todos os itens\n"
 "           - (vazio) concluir seleção\n"
 
-#: builtin/clean.c:519 git-add--interactive.perl:568
+#: builtin/clean.c:545 git-add--interactive.perl:568
 #: git-add--interactive.perl:573
 #, c-format, perl-format
 msgid "Huh (%s)?\n"
 msgstr "O quê (%s)?\n"
 
-#: builtin/clean.c:659
+#: builtin/clean.c:685
 #, c-format
 msgid "Input ignore patterns>> "
-msgstr "Introduza padrões a ignorar>> "
+msgstr "Introduz padrões a ignorar>> "
 
-#: builtin/clean.c:693
+#: builtin/clean.c:719
 #, c-format
 msgid "WARNING: Cannot find items matched by: %s"
-msgstr "AVISO: incapaz encontrar items correspondentes a: %s"
+msgstr "AVISO: Incapaz encontrar items correspondentes a: %s"
 
-#: builtin/clean.c:714
+#: builtin/clean.c:740
 msgid "Select items to delete"
-msgstr "Selecione itens para eliminar"
+msgstr "Seleciona itens para eliminar"
 
 #. TRANSLATORS: Make sure to keep [y/N] as is
-#: builtin/clean.c:755
+#: builtin/clean.c:781
 #, c-format
 msgid "Remove %s [y/N]? "
 msgstr "Remover %s [y/N]? "
 
-#: builtin/clean.c:786
+#: builtin/clean.c:812
 msgid ""
 "clean               - start cleaning\n"
 "filter by pattern   - exclude items from deletion\n"
@@ -12642,54 +13310,54 @@ msgstr ""
 "ask each            - confirmar cada eliminação (como \"rm -i\")\n"
 "quit                - parar limpeza\n"
 "help                - esta ajuda\n"
-"?                   - ajuda para seleção em linha de comandos"
+"?                   - ajuda para seleção em linha de comandos"
 
-#: builtin/clean.c:822
+#: builtin/clean.c:848
 msgid "Would remove the following item:"
 msgid_plural "Would remove the following items:"
 msgstr[0] "Removeria o seguinte item:"
 msgstr[1] "Removeria os seguintes itens:"
 
-#: builtin/clean.c:838
+#: builtin/clean.c:864
 msgid "No more files to clean, exiting."
-msgstr "Mais ficheiro por limpar nenhum, saindo."
+msgstr "Mais nenhum ficheiro por limpar, saindo."
 
-#: builtin/clean.c:900
+#: builtin/clean.c:926
 msgid "do not print names of files removed"
-msgstr "incapaz imprimir nomes de ficheiros removidos"
+msgstr "deixar de mostrar nomes de ficheiros removidos"
 
-#: builtin/clean.c:902
+#: builtin/clean.c:928
 msgid "force"
 msgstr "forçar"
 
-#: builtin/clean.c:903
+#: builtin/clean.c:929
 msgid "interactive cleaning"
 msgstr "limpeza interativa"
 
-#: builtin/clean.c:905
+#: builtin/clean.c:931
 msgid "remove whole directories"
-msgstr "remover diretórios inteiros"
+msgstr "remover pastas inteiras"
 
-#: builtin/clean.c:906 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:923 builtin/log.c:184 builtin/log.c:186
-#: builtin/ls-files.c:650 builtin/name-rev.c:526 builtin/name-rev.c:528
+#: builtin/clean.c:932 builtin/describe.c:565 builtin/describe.c:567
+#: builtin/grep.c:938 builtin/log.c:185 builtin/log.c:187
+#: builtin/ls-files.c:651 builtin/name-rev.c:585 builtin/name-rev.c:587
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "padrão"
 
-#: builtin/clean.c:907
+#: builtin/clean.c:933
 msgid "add <pattern> to ignore rules"
 msgstr "adicionar <padrão> às regras ignoradas"
 
-#: builtin/clean.c:908
+#: builtin/clean.c:934
 msgid "remove ignored files, too"
 msgstr "também remover ficheiros ignorados"
 
-#: builtin/clean.c:910
+#: builtin/clean.c:936
 msgid "remove only ignored files"
 msgstr "remover apenas ficheiros ignorados"
 
-#: builtin/clean.c:925
+#: builtin/clean.c:951
 msgid ""
 "clean.requireForce set to true and neither -i, -n, nor -f given; refusing to "
 "clean"
@@ -12697,7 +13365,7 @@ msgstr ""
 "clean.requireForce definido como true e nenhum -i, -n, ou -f fornecido; "
 "recusando limpar"
 
-#: builtin/clean.c:928
+#: builtin/clean.c:954
 msgid ""
 "clean.requireForce defaults to true and neither -i, -n, nor -f given; "
 "refusing to clean"
@@ -12705,218 +13373,217 @@ msgstr ""
 "clean.requireForce predefinido como true e nenhum -i, -n, ou -f fornecido; "
 "recusando limpar"
 
-#: builtin/clean.c:940
+#: builtin/clean.c:966
 msgid "-x and -X cannot be used together"
-msgstr "-x e -X incapazes de ser usados juntos"
+msgstr "-x e -X incapazes de serem usados juntos"
 
-#: builtin/clone.c:45
+#: builtin/clone.c:47
 msgid "git clone [<options>] [--] <repo> [<dir>]"
-msgstr "git clone [<opções>] [--] <repo> [<dir>]"
+msgstr "git clone [<opções>] [--] <repo> [<pasta>]"
 
-#: builtin/clone.c:96
+#: builtin/clone.c:100
 msgid "don't clone shallow repository"
 msgstr "clonar nenhum repositório superficial"
 
-#: builtin/clone.c:98
+#: builtin/clone.c:102
 msgid "don't create a checkout"
-msgstr "cria checkout nenhum"
+msgstr "deixar por criar a observação"
 
-#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:542
+#: builtin/clone.c:103 builtin/clone.c:105 builtin/init-db.c:542
 msgid "create a bare repository"
 msgstr "criar um repositório nu"
 
-#: builtin/clone.c:103
+#: builtin/clone.c:107
 msgid "create a mirror repository (implies bare)"
-msgstr "criar um repositório espelhado (implica repositório nu)"
+msgstr "criar um repositório-espelho (implica repositório nu)"
 
-#: builtin/clone.c:105
+#: builtin/clone.c:109
 msgid "to clone from a local repository"
 msgstr "para clonar de um repositório local"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "don't use local hardlinks, always copy"
 msgstr "usa hardlinks nenhuns, copia sempre"
 
-#: builtin/clone.c:109
+#: builtin/clone.c:113
 msgid "setup as shared repository"
 msgstr "configurar como repositório partilhado"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "pathspec"
-msgstr "pathspec"
+msgstr "espetro-caminho"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "initialize submodules in the clone"
 msgstr "inicializar submódulos no clone"
 
-#: builtin/clone.c:115
+#: builtin/clone.c:119
 msgid "number of submodules cloned in parallel"
 msgstr "número de submódulos clonados em paralelo"
 
-#: builtin/clone.c:116 builtin/init-db.c:539
+#: builtin/clone.c:120 builtin/init-db.c:539
 msgid "template-directory"
-msgstr "diretório-modelo"
+msgstr "pasta-modelo"
 
-#: builtin/clone.c:117 builtin/init-db.c:540
+#: builtin/clone.c:121 builtin/init-db.c:540
 msgid "directory from which templates will be used"
-msgstr "diretório que contém os modelos usados"
+msgstr "pasta que contém os modelos a usar"
 
-#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1899
-#: builtin/submodule--helper.c:2353 builtin/submodule--helper.c:2903
+#: builtin/clone.c:123 builtin/clone.c:125 builtin/submodule--helper.c:1885
+#: builtin/submodule--helper.c:2719 builtin/submodule--helper.c:3378
 msgid "reference repository"
 msgstr "repositório de referência"
 
-#: builtin/clone.c:123 builtin/submodule--helper.c:1901
-#: builtin/submodule--helper.c:2355 builtin/submodule--helper.c:2905
+#: builtin/clone.c:127 builtin/submodule--helper.c:1887
+#: builtin/submodule--helper.c:2721
 msgid "use --reference only while cloning"
 msgstr "usar --reference apenas enquanto clonando"
 
-#: builtin/clone.c:124 builtin/column.c:27 builtin/init-db.c:550
-#: builtin/merge-file.c:46 builtin/pack-objects.c:3975 builtin/repack.c:495
-#: t/helper/test-simple-ipc.c:696 t/helper/test-simple-ipc.c:698
+#: builtin/clone.c:128 builtin/column.c:27 builtin/fmt-merge-msg.c:27
+#: builtin/init-db.c:550 builtin/merge-file.c:48 builtin/merge.c:290
+#: builtin/pack-objects.c:3967 builtin/repack.c:669
+#: builtin/submodule--helper.c:3380 t/helper/test-simple-ipc.c:595
+#: t/helper/test-simple-ipc.c:597
 msgid "name"
 msgstr "nome"
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "use <name> instead of 'origin' to track upstream"
-msgstr "usar <nome> em vez de 'origin' para seguir o ramo a montante"
+msgstr "usar <nome> em vez de 'origin' monitorizar upstream"
 
-#: builtin/clone.c:127
+#: builtin/clone.c:131
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "observar <ramo> em vez de HEAD de remoto"
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133
 msgid "path to git-upload-pack on the remote"
 msgstr "caminho para git-upload-pack no remoto"
 
-#: builtin/clone.c:130 builtin/fetch.c:180 builtin/grep.c:862
-#: builtin/pull.c:208
+#: builtin/clone.c:134 builtin/fetch.c:182 builtin/grep.c:877
+#: builtin/pull.c:212
 msgid "depth"
 msgstr "profundidade"
 
-#: builtin/clone.c:131
+#: builtin/clone.c:135
 msgid "create a shallow clone of that depth"
-msgstr "criar um clone raso com essa profundidade"
+msgstr "criar um clone superficial com essa profundidade"
 
-#: builtin/clone.c:132 builtin/fetch.c:182 builtin/pack-objects.c:3964
-#: builtin/pull.c:211
+#: builtin/clone.c:136 builtin/fetch.c:184 builtin/pack-objects.c:3956
+#: builtin/pull.c:215
 msgid "time"
 msgstr "hora"
 
-#: builtin/clone.c:133
+#: builtin/clone.c:137
 msgid "create a shallow clone since a specific time"
-msgstr "criar um clone raso desde uma data específica"
+msgstr "criar um clone superficial desde uma data específica"
 
-#: builtin/clone.c:134 builtin/fetch.c:184 builtin/fetch.c:207
-#: builtin/pull.c:214 builtin/pull.c:239 builtin/rebase.c:1318
+#: builtin/clone.c:138 builtin/fetch.c:186 builtin/fetch.c:212
+#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1050
 msgid "revision"
 msgstr "revisão"
 
-#: builtin/clone.c:135 builtin/fetch.c:185 builtin/pull.c:215
+#: builtin/clone.c:139 builtin/fetch.c:187 builtin/pull.c:219
 msgid "deepen history of shallow clone, excluding rev"
-msgstr "aprofundar o histórico de um clone raso, excluindo a revisão"
+msgstr "aprofundar o histórico de clone superficial, excluindo a revisão"
 
-#: builtin/clone.c:137 builtin/submodule--helper.c:1911
-#: builtin/submodule--helper.c:2369
+#: builtin/clone.c:141 builtin/submodule--helper.c:1897
+#: builtin/submodule--helper.c:2735
 msgid "clone only one branch, HEAD or --branch"
 msgstr "clonar apenas um ramo, HEAD ou --branch"
 
-#: builtin/clone.c:139
+#: builtin/clone.c:143
 msgid "don't clone any tags, and make later fetches not to follow them"
-msgstr ""
+msgstr "clonar nenhuma etiqueta, e fazer buscas seguintes seguir nenhuma"
 
-#: builtin/clone.c:141
+#: builtin/clone.c:145
 msgid "any cloned submodules will be shallow"
 msgstr "qualquer submódulo clonado será superficial"
 
-#: builtin/clone.c:142 builtin/init-db.c:548
+#: builtin/clone.c:146 builtin/init-db.c:548
 msgid "gitdir"
-msgstr "gitdir"
+msgstr "pasta-git"
 
-#: builtin/clone.c:143 builtin/init-db.c:549
+#: builtin/clone.c:147 builtin/init-db.c:549
 msgid "separate git dir from working tree"
 msgstr "separar pasta git de árvore-trabalho"
 
-#: builtin/clone.c:144
+#: builtin/clone.c:148
 msgid "key=value"
 msgstr "chave=valor"
 
-#: builtin/clone.c:145
+#: builtin/clone.c:149
 msgid "set config inside the new repository"
 msgstr "definir configuração dentro do novo repositório"
 
-#: builtin/clone.c:147 builtin/fetch.c:202 builtin/ls-remote.c:77
-#: builtin/pull.c:230 builtin/push.c:575 builtin/send-pack.c:196
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
+#: builtin/pull.c:234 builtin/push.c:575 builtin/send-pack.c:200
 msgid "server-specific"
 msgstr "específico do servidor"
 
-#: builtin/clone.c:147 builtin/fetch.c:202 builtin/ls-remote.c:77
-#: builtin/pull.c:231 builtin/push.c:575 builtin/send-pack.c:197
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
+#: builtin/pull.c:235 builtin/push.c:575 builtin/send-pack.c:201
 msgid "option to transmit"
-msgstr "opção para transmitir"
+msgstr "opção a transmitir"
 
-#: builtin/clone.c:148 builtin/fetch.c:203 builtin/pull.c:234
+#: builtin/clone.c:152 builtin/fetch.c:208 builtin/pull.c:238
 #: builtin/push.c:576
 msgid "use IPv4 addresses only"
 msgstr "usar apenas endereços IPv4"
 
-#: builtin/clone.c:150 builtin/fetch.c:205 builtin/pull.c:237
+#: builtin/clone.c:154 builtin/fetch.c:210 builtin/pull.c:241
 #: builtin/push.c:578
 msgid "use IPv6 addresses only"
 msgstr "usar apenas endereços IPv6"
 
-#: builtin/clone.c:154
+#: builtin/clone.c:158
+msgid "apply partial clone filters to submodules"
+msgstr ""
+
+#: builtin/clone.c:160
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "qualquer submódulo clonado usará seu ramo remoto de monitorização"
 
-#: builtin/clone.c:156
+#: builtin/clone.c:162
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr ""
+"iniciar ficheiro de observação-dispersa para incluir apenas ficheiros em raiz"
 
-#: builtin/clone.c:292
-msgid ""
-"No directory name could be guessed.\n"
-"Please specify a directory on the command line"
-msgstr ""
-"Incapaz adivinhar nome de pasta.\n"
-"Por favor especifique uma pasta na linha de comandos"
-
-#: builtin/clone.c:345
+#: builtin/clone.c:237
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info: Incapaz adicionar sobressalente para '%s': %s\n"
 
-#: builtin/clone.c:418
+#: builtin/clone.c:310
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s existe e é pasta nenhuma"
 
-#: builtin/clone.c:436
+#: builtin/clone.c:328
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "falhou começar iterador em '%s'"
 
-#: builtin/clone.c:467
+#: builtin/clone.c:359
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "falhou criar a ligação '%s'"
 
-#: builtin/clone.c:471
+#: builtin/clone.c:363
 #, c-format
 msgid "failed to copy file to '%s'"
-msgstr "falha ao copiar o ficheiro para '%s'"
+msgstr "falhou copiar o ficheiro para '%s'"
 
-#: builtin/clone.c:476
+#: builtin/clone.c:368
 #, c-format
 msgid "failed to iterate over '%s'"
-msgstr "falha ao remover '%s'"
+msgstr "falhou iterar sobre '%s'"
 
-#: builtin/clone.c:503
+#: builtin/clone.c:395
 #, c-format
 msgid "done.\n"
 msgstr "concluído.\n"
 
-#: builtin/clone.c:517
+#: builtin/clone.c:409
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -12926,152 +13593,151 @@ msgstr ""
 "Podes inspecionar o que foi observado com 'git status'\n"
 "e repetir com 'git restore --source=HEAD :/'\n"
 
-#: builtin/clone.c:594
+#: builtin/clone.c:486
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "Incapaz encontrar ramo remoto %s para clonar."
 
-#: builtin/clone.c:713
+#: builtin/clone.c:603
 #, c-format
 msgid "unable to update %s"
 msgstr "incapaz atualizar %s"
 
-#: builtin/clone.c:761
+#: builtin/clone.c:651
 msgid "failed to initialize sparse-checkout"
-msgstr "falhou inicializar sparse-checkout"
+msgstr "falhou iniciar observação-dispersa"
 
-#: builtin/clone.c:784
+#: builtin/clone.c:674
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
-msgstr ""
-"remote HEAD refere-se a referência inexistente, impossível fazer checkout.\n"
+msgstr "HEAD remota refere-se a referência inexistente, incapaz de observar.\n"
 
-#: builtin/clone.c:816
+#: builtin/clone.c:709
 msgid "unable to checkout working tree"
-msgstr "incapaz de checkout working tree"
+msgstr "incapaz de observar árvore-trabalho"
 
-#: builtin/clone.c:894
+#: builtin/clone.c:793
 msgid "unable to write parameters to config file"
 msgstr "incapaz escrever parâmetros para ficheiro config"
 
-#: builtin/clone.c:957
+#: builtin/clone.c:856
 msgid "cannot repack to clean up"
 msgstr "incapaz reempacotar para limpar"
 
-#: builtin/clone.c:959
+#: builtin/clone.c:858
 msgid "cannot unlink temporary alternates file"
 msgstr "incapaz unlink ficheiro sobressalente temporário"
 
-#: builtin/clone.c:1001 builtin/receive-pack.c:2490
+#: builtin/clone.c:901
 msgid "Too many arguments."
-msgstr ""
+msgstr "Demasiados argumentos."
 
-#: builtin/clone.c:1005
+#: builtin/clone.c:905 contrib/scalar/scalar.c:413
 msgid "You must specify a repository to clone."
-msgstr "Deve especificar um repositório para clonar."
+msgstr "Tens de especificar um repositório para clonar."
 
-#: builtin/clone.c:1018
+#: builtin/clone.c:918
 #, c-format
-msgid "--bare and --origin %s options are incompatible."
-msgstr "opções --bare e --origin %s são incompatíveis."
-
-#: builtin/clone.c:1021
-msgid "--bare and --separate-git-dir are incompatible."
-msgstr "--bare e --separate-git-dir são incompatíveis."
+msgid "options '%s' and '%s %s' cannot be used together"
+msgstr "opções '%s' e '%s %s' incapaz serem usadas juntas"
 
-#: builtin/clone.c:1035
+#: builtin/clone.c:935
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "repositório '%s' é inexistente"
 
-#: builtin/clone.c:1039 builtin/fetch.c:2014
+#: builtin/clone.c:939 builtin/fetch.c:2176
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "profundidade %s é número positivo nenhum"
 
-#: builtin/clone.c:1049
+#: builtin/clone.c:949
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
-msgstr "path de destino '%s' já existe e é pasta vazia nenhum."
+msgstr "caminho de destino '%s' já existe e é pasta vazia nenhuma."
 
-#: builtin/clone.c:1055
+#: builtin/clone.c:955
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
-msgstr "path de repositório '%s' já existe e é diretório vazio nenhum."
+msgstr "caminho de repositório '%s' já existe e é pasta vazia nenhuma."
 
-#: builtin/clone.c:1069
+#: builtin/clone.c:969
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "árvore-trabalho '%s' já existe."
 
-#: builtin/clone.c:1084 builtin/clone.c:1105 builtin/difftool.c:272
-#: builtin/log.c:1997 builtin/worktree.c:280 builtin/worktree.c:312
+#: builtin/clone.c:984 builtin/clone.c:1005 builtin/difftool.c:256
+#: builtin/log.c:2037 builtin/worktree.c:350 builtin/worktree.c:382
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "incapaz criar as pastas superiores de '%s'"
 
-#: builtin/clone.c:1089
+#: builtin/clone.c:989
 #, c-format
 msgid "could not create work tree dir '%s'"
-msgstr "incapaz criar pasta de work tree '%s'"
+msgstr "incapaz criar pasta de árvore-trabalho '%s'"
 
-#: builtin/clone.c:1109
+#: builtin/clone.c:1009
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
-msgstr "Clonando em repositório nú '%s'...\n"
+msgstr "Clonando para repositório nu '%s'...\n"
 
-#: builtin/clone.c:1111
+#: builtin/clone.c:1011
 #, c-format
 msgid "Cloning into '%s'...\n"
-msgstr "Clonando em '%s'...\n"
+msgstr "Clonando para '%s'...\n"
 
-#: builtin/clone.c:1135
+#: builtin/clone.c:1040
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
 msgstr ""
 "clone --recursive é incompatível com ambos --reference e --reference-if-able"
 
-#: builtin/clone.c:1188 builtin/remote.c:200 builtin/remote.c:705
+#: builtin/clone.c:1116 builtin/remote.c:201 builtin/remote.c:721
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "'%s' é nome de remoto inválido"
 
-#: builtin/clone.c:1229
+#: builtin/clone.c:1157
 msgid "--depth is ignored in local clones; use file:// instead."
-msgstr "--depth é ignorado em clones locais; usa invés file:// ."
+msgstr "--depth é ignorado em clones locais; usa file:// invés."
 
-#: builtin/clone.c:1231
+#: builtin/clone.c:1159
 msgid "--shallow-since is ignored in local clones; use file:// instead."
-msgstr "--shallow-since é ignorado em clones locais; usa invés file:// ."
+msgstr "--shallow-since é ignorado em clones locais; usa file:// invés."
 
-#: builtin/clone.c:1233
+#: builtin/clone.c:1161
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
-msgstr "--shallow-exclude é ignorado em clones locais; usa invés file:// ."
+msgstr "--shallow-exclude é ignorado em clones locais; usa file:// invés."
 
-#: builtin/clone.c:1235
+#: builtin/clone.c:1163
 msgid "--filter is ignored in local clones; use file:// instead."
-msgstr "--filter é ignorado em clones locais; usa invés file:// ."
+msgstr "--filter é ignorado em clones locais; usa file:// invés."
 
-#: builtin/clone.c:1240
+#: builtin/clone.c:1168
 msgid "source repository is shallow, ignoring --local"
 msgstr "repositório da fonte é superficial, ignorando --local"
 
-#: builtin/clone.c:1245
+#: builtin/clone.c:1173
 msgid "--local is ignored"
 msgstr "--local ignorado"
 
-#: builtin/clone.c:1324 builtin/clone.c:1383
+#: builtin/clone.c:1185
+msgid "cannot clone from filtered bundle"
+msgstr ""
+
+#: builtin/clone.c:1265 builtin/clone.c:1324
 msgid "remote transport reported error"
 msgstr "transporte remoto reportou erro"
 
-#: builtin/clone.c:1336 builtin/clone.c:1344
+#: builtin/clone.c:1277 builtin/clone.c:1289
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "Ramo remoto %s por encontrar em upstream %s"
 
-#: builtin/clone.c:1347
+#: builtin/clone.c:1292
 msgid "You appear to have cloned an empty repository."
-msgstr "Parece foi clonado um repositório vazio."
+msgstr "Pareces ter clonado um repositório vazio."
 
 #: builtin/column.c:10
 msgid "git column [<options>]"
@@ -13079,7 +13745,7 @@ msgstr "git column [<opções>]"
 
 #: builtin/column.c:27
 msgid "lookup config vars"
-msgstr "pesquisar vars de config"
+msgstr "encontrar vars de config"
 
 #: builtin/column.c:28 builtin/column.c:29
 msgid "layout to use"
@@ -13087,123 +13753,126 @@ msgstr "esquema a usar"
 
 #: builtin/column.c:30
 msgid "maximum width"
-msgstr "Largura máxima"
+msgstr "largura máxima"
 
 #: builtin/column.c:31
 msgid "padding space on left border"
-msgstr "Espaço de preenchimento na borda esquerda"
+msgstr "espaço de preenchimento na borda esquerda"
 
 #: builtin/column.c:32
 msgid "padding space on right border"
-msgstr "Espaço de preenchimento na borda direita"
+msgstr "espaço de preenchimento na borda direita"
 
 #: builtin/column.c:33
 msgid "padding space between columns"
-msgstr "Espaço de preenchimento entre colunas"
+msgstr "espaço de preenchimento entre colunas"
 
 #: builtin/column.c:51
 msgid "--command must be the first argument"
 msgstr "--command deve ser o primeiro argumento"
 
-#: builtin/commit-graph.c:13 builtin/commit-graph.c:22
+#: builtin/commit-graph.c:13
 msgid ""
 "git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"
 msgstr ""
+"git commit-graph verify [--object-dir <pasta-de-obj>] [--shallow] [--"
+"[no-]progress]"
 
-#: builtin/commit-graph.c:14 builtin/commit-graph.c:27
+#: builtin/commit-graph.c:16
 msgid ""
 "git commit-graph write [--object-dir <objdir>] [--append] [--"
 "split[=<strategy>]] [--reachable|--stdin-packs|--stdin-commits] [--changed-"
 "paths] [--[no-]max-new-filters <n>] [--[no-]progress] <split options>"
 msgstr ""
+"git commit-graph write [--object-dir <pasta-de-obj>] [--append] [--"
+"split[=<estratégia>]] [--reachable|--stdin-packs|--stdin-commits] [--changed-"
+"paths] [--[no-]max-new-filters <n>] [--[no-]progress] <opções de divisão>"
 
-#: builtin/commit-graph.c:64
-#, c-format
-msgid "could not find object directory matching %s"
-msgstr "incapaz encontrar pasta objeto correspondendo %s"
-
-#: builtin/commit-graph.c:80 builtin/commit-graph.c:210
-#: builtin/commit-graph.c:316 builtin/fetch.c:191 builtin/log.c:1779
+#: builtin/commit-graph.c:51 builtin/fetch.c:196 builtin/log.c:1813
 msgid "dir"
-msgstr "dir"
+msgstr "pasta"
 
-#: builtin/commit-graph.c:81 builtin/commit-graph.c:211
-#: builtin/commit-graph.c:317
+#: builtin/commit-graph.c:52
 msgid "the object directory to store the graph"
 msgstr ""
 
-#: builtin/commit-graph.c:83
+#: builtin/commit-graph.c:73
 msgid "if the commit-graph is split, only verify the tip file"
 msgstr ""
 
-#: builtin/commit-graph.c:106
+#: builtin/commit-graph.c:100
 #, c-format
 msgid "Could not open commit-graph '%s'"
-msgstr "Incapaz abrir commit-graph '%s'"
+msgstr "Incapaz abrir grafo-memória '%s'"
 
-#: builtin/commit-graph.c:142
+#: builtin/commit-graph.c:137
 #, c-format
 msgid "unrecognized --split argument, %s"
 msgstr "argumento --split desconhecido, %s"
 
-#: builtin/commit-graph.c:155
+#: builtin/commit-graph.c:150
 #, c-format
 msgid "unexpected non-hex object ID: %s"
 msgstr "ID não-hex de objeto inesperado: %s"
 
-#: builtin/commit-graph.c:160
+#: builtin/commit-graph.c:155
 #, c-format
 msgid "invalid object: %s"
 msgstr ""
 
-#: builtin/commit-graph.c:213
+#: builtin/commit-graph.c:205
 msgid "start walk at all refs"
 msgstr ""
 
-#: builtin/commit-graph.c:215
+#: builtin/commit-graph.c:207
 msgid "scan pack-indexes listed by stdin for commits"
 msgstr ""
 
-#: builtin/commit-graph.c:217
+#: builtin/commit-graph.c:209
 msgid "start walk at commits listed by stdin"
 msgstr ""
 
-#: builtin/commit-graph.c:219
+#: builtin/commit-graph.c:211
 msgid "include all commits already in the commit-graph file"
 msgstr ""
 
-#: builtin/commit-graph.c:221
+#: builtin/commit-graph.c:213
 msgid "enable computation for changed paths"
 msgstr ""
 
-#: builtin/commit-graph.c:224
+#: builtin/commit-graph.c:215
 msgid "allow writing an incremental commit-graph file"
 msgstr ""
 
-#: builtin/commit-graph.c:228
+#: builtin/commit-graph.c:219
 msgid "maximum number of commits in a non-base split commit-graph"
 msgstr ""
 
-#: builtin/commit-graph.c:230
+#: builtin/commit-graph.c:221
 msgid "maximum ratio between two levels of a split commit-graph"
 msgstr ""
 
-#: builtin/commit-graph.c:232
+#: builtin/commit-graph.c:223
 msgid "only expire files older than a given date-time"
-msgstr "apenas expirar ficheiros mais velhos que data-tempo fornecido"
+msgstr "apenas expirar ficheiros fornecidos mais velhos que data"
 
-#: builtin/commit-graph.c:234
+#: builtin/commit-graph.c:225
 msgid "maximum number of changed-path Bloom filters to compute"
 msgstr ""
 
-#: builtin/commit-graph.c:255
+#: builtin/commit-graph.c:251
 msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs"
 msgstr ""
 
-#: builtin/commit-graph.c:287
+#: builtin/commit-graph.c:282
 msgid "Collecting commits from input"
 msgstr ""
 
+#: builtin/commit-graph.c:328 builtin/multi-pack-index.c:259
+#, c-format
+msgid "unrecognized subcommand: %s"
+msgstr "subcomando desconhecido: %s"
+
 #: builtin/commit-tree.c:18
 msgid ""
 "git commit-tree [(-p <parent>)...] [-S[<keyid>]] [(-m <message>)...] [(-F "
@@ -13215,80 +13884,75 @@ msgstr ""
 msgid "duplicate parent %s ignored"
 msgstr ""
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:136 builtin/log.c:562
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:590
 #, c-format
 msgid "not a valid object name %s"
 msgstr "nome de objeto inválido %s"
 
-#: builtin/commit-tree.c:93
-#, c-format
-msgid "git commit-tree: failed to open '%s'"
-msgstr ""
-
-#: builtin/commit-tree.c:96
+#: builtin/commit-tree.c:94
 #, c-format
 msgid "git commit-tree: failed to read '%s'"
 msgstr ""
 
-#: builtin/commit-tree.c:98
+#: builtin/commit-tree.c:96
 #, c-format
 msgid "git commit-tree: failed to close '%s'"
 msgstr ""
 
-#: builtin/commit-tree.c:111
+#: builtin/commit-tree.c:109
 msgid "parent"
 msgstr "parente"
 
-#: builtin/commit-tree.c:112
+#: builtin/commit-tree.c:110
 msgid "id of a parent commit object"
 msgstr ""
 
-#: builtin/commit-tree.c:114 builtin/commit.c:1624 builtin/merge.c:282
-#: builtin/notes.c:409 builtin/notes.c:575 builtin/stash.c:1601
-#: builtin/tag.c:456
+#: builtin/commit-tree.c:112 builtin/commit.c:1626 builtin/merge.c:284
+#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1666
+#: builtin/tag.c:455
 msgid "message"
 msgstr "mensagem"
 
-#: builtin/commit-tree.c:115 builtin/commit.c:1624
+#: builtin/commit-tree.c:113 builtin/commit.c:1626
 msgid "commit message"
-msgstr "mensagem de commit"
+msgstr "mensagem de memória"
 
-#: builtin/commit-tree.c:118
+#: builtin/commit-tree.c:116
 msgid "read commit log message from file"
 msgstr ""
 
-#: builtin/commit-tree.c:121 builtin/commit.c:1641 builtin/merge.c:299
-#: builtin/pull.c:176 builtin/revert.c:118
+#: builtin/commit-tree.c:119 builtin/commit.c:1643 builtin/merge.c:303
+#: builtin/pull.c:180 builtin/revert.c:118
 msgid "GPG sign commit"
-msgstr "assinar o commit com GPG"
+msgstr "assinar memória com GPG"
 
-#: builtin/commit-tree.c:133
+#: builtin/commit-tree.c:131
 msgid "must give exactly one tree"
 msgstr ""
 
-#: builtin/commit-tree.c:140
+#: builtin/commit-tree.c:138
 msgid "git commit-tree: failed to read"
 msgstr ""
 
-#: builtin/commit.c:41
+#: builtin/commit.c:43
 msgid "git commit [<options>] [--] <pathspec>..."
 msgstr "git commit [<opções>] [--] <espetro-caminho>..."
 
-#: builtin/commit.c:46
+#: builtin/commit.c:48
 msgid "git status [<options>] [--] <pathspec>..."
 msgstr "git status [<opções>] [--] <espetro-caminho>..."
 
-#: builtin/commit.c:51
+#: builtin/commit.c:53
 msgid ""
 "You asked to amend the most recent commit, but doing so would make\n"
 "it empty. You can repeat your command with --allow-empty, or you can\n"
 "remove the commit entirely with \"git reset HEAD^\".\n"
 msgstr ""
-"Pediu para emendar o commit mais recente, mas ao fazê-lo torná-lo-ia\n"
-"vazio. Pode repetir o comando com --allow-empty, ou pode remover o\n"
-"commit completamente com \"git reset HEAD^\".\n"
+"Pediste para emendar a memória mais recente, mas ao fazê-lo torná-la-ia\n"
+"vazia. Podes repetir o teu comando com --allow-empty, ou podes remover a\n"
+"memória completamente com \"git reset HEAD^\".\n"
 
-#: builtin/commit.c:56
+#: builtin/commit.c:58
 msgid ""
 "The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
 "If you wish to commit it anyway, use:\n"
@@ -13296,22 +13960,21 @@ msgid ""
 "    git commit --allow-empty\n"
 "\n"
 msgstr ""
-"O cherry-pick anterior está vazio, possivelmente devido a resolução de "
-"conflito.\n"
-"Se ainda desejas commit, usa:\n"
+"A apanha anterior está vazia, possivelmente devido à resolução de conflito.\n"
+"Se, mesmo assim, desejas memorizá-la, usa:\n"
 "\n"
 "    git commit --allow-empty\n"
 "\n"
 
-#: builtin/commit.c:63
+#: builtin/commit.c:65
 msgid "Otherwise, please use 'git rebase --skip'\n"
 msgstr "Caso contrário, por favor usa 'git rebase --skip'\n"
 
-#: builtin/commit.c:66
+#: builtin/commit.c:68
 msgid "Otherwise, please use 'git cherry-pick --skip'\n"
 msgstr "Caso contrário, por favor usa 'git cherry-pick --skip'\n"
 
-#: builtin/commit.c:69
+#: builtin/commit.c:71
 msgid ""
 "and then use:\n"
 "\n"
@@ -13324,158 +13987,152 @@ msgid ""
 "\n"
 msgstr ""
 
-#: builtin/commit.c:324
+#: builtin/commit.c:326
 msgid "failed to unpack HEAD tree object"
 msgstr "falhou desempacotar o objeto árvore HEAD"
 
-#: builtin/commit.c:360
-msgid "--pathspec-from-file with -a does not make sense"
-msgstr "--pathspec-from-file com -a faz sentido nenhum"
-
-#: builtin/commit.c:374
+#: builtin/commit.c:376
 msgid "No paths with --include/--only does not make sense."
 msgstr "--include/--only só fazem sentido, indicando caminhos."
 
-#: builtin/commit.c:386
+#: builtin/commit.c:388
 msgid "unable to create temporary index"
-msgstr "incapaz criar index temporário"
+msgstr "incapaz criar cenário temporário"
 
-#: builtin/commit.c:395
+#: builtin/commit.c:397
 msgid "interactive add failed"
 msgstr "falha ao adicionar interativamente"
 
-#: builtin/commit.c:410
+#: builtin/commit.c:412
 msgid "unable to update temporary index"
-msgstr "incapaz atualizar index temporário"
+msgstr "incapaz atualizar cenário temporário"
 
-#: builtin/commit.c:412
+#: builtin/commit.c:414
 msgid "Failed to update main cache tree"
 msgstr "Falhou atualizar a árvore de cenário principal"
 
-#: builtin/commit.c:437 builtin/commit.c:460 builtin/commit.c:508
+#: builtin/commit.c:439 builtin/commit.c:462 builtin/commit.c:510
 msgid "unable to write new_index file"
 msgstr "incapaz escrever ficheiro new_index"
 
-#: builtin/commit.c:489
+#: builtin/commit.c:491
 msgid "cannot do a partial commit during a merge."
-msgstr "incapaz fazer commit parcial durante uma junção."
+msgstr "incapaz fazer memória parcial durante uma junção."
 
-#: builtin/commit.c:491
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a cherry-pick."
-msgstr "incapaz fazer commit parcial durante um cherry-pick."
+msgstr "incapaz fazer memória parcial durante uma apanha."
 
-#: builtin/commit.c:493
+#: builtin/commit.c:495
 msgid "cannot do a partial commit during a rebase."
-msgstr "incapaz fazer commit parcial durante um rebase."
+msgstr "incapaz fazer memória parcial durante um rebaseamento."
 
-#: builtin/commit.c:501
+#: builtin/commit.c:503
 msgid "cannot read the index"
 msgstr "incapaz ler cenário"
 
-#: builtin/commit.c:520
+#: builtin/commit.c:522
 msgid "unable to write temporary index file"
-msgstr "incapaz escrever ficheiro de index temporário"
+msgstr "incapaz escrever ficheiro de cenário temporário"
 
-#: builtin/commit.c:618
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' lacks author header"
-msgstr "commit '%s' falta cabeçalho de autor"
+msgstr "memória '%s' falta cabeçalho de autor"
 
-#: builtin/commit.c:620
+#: builtin/commit.c:622
 #, c-format
 msgid "commit '%s' has malformed author line"
-msgstr "o commit '%s' tem a linha de autor malformada"
+msgstr "memória '%s' tem a linha de autor malformada"
 
-#: builtin/commit.c:639
+#: builtin/commit.c:641
 msgid "malformed --author parameter"
 msgstr "parâmetro --author malformado"
 
-#: builtin/commit.c:692
+#: builtin/commit.c:694
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
 msgstr ""
-"incapaz selecionar um carácter de comentário fica por usar\n"
-"na mensagem de commit atual"
+"apenas sou capaz de selecionar carácter de comentário usado\n"
+"na mensagem de memória atual"
 
-#: builtin/commit.c:746 builtin/commit.c:780 builtin/commit.c:1165
+#: builtin/commit.c:750 builtin/commit.c:784 builtin/commit.c:1170
 #, c-format
 msgid "could not lookup commit %s"
-msgstr "incapaz consultar commit %s"
+msgstr "incapaz procurar memória %s"
 
-#: builtin/commit.c:758 builtin/shortlog.c:413
+#: builtin/commit.c:762 builtin/shortlog.c:417
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(a ler mensagem de log da entrada padrão)\n"
 
-#: builtin/commit.c:760
+#: builtin/commit.c:764
 msgid "could not read log from standard input"
 msgstr "incapaz ler log da entrada padrão"
 
-#: builtin/commit.c:764
+#: builtin/commit.c:768
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "incapaz ler ficheiro de log '%s'"
 
-#: builtin/commit.c:801
+#: builtin/commit.c:805
 #, c-format
-msgid "cannot combine -m with --fixup:%s"
-msgstr "incapaz de combinar -m com --fixup:%s"
+msgid "options '%s' and '%s:%s' cannot be used together"
+msgstr "opções '%s' e '%s:%s' incapaz serem usadas juntas"
 
-#: builtin/commit.c:813 builtin/commit.c:829
+#: builtin/commit.c:817 builtin/commit.c:833
 msgid "could not read SQUASH_MSG"
 msgstr "incapaz ler SQUASH_MSG"
 
-#: builtin/commit.c:820
+#: builtin/commit.c:824
 msgid "could not read MERGE_MSG"
 msgstr "incapaz ler MERGE_MSG"
 
-#: builtin/commit.c:880
+#: builtin/commit.c:884
 msgid "could not write commit template"
-msgstr "incapaz escrever o modelo de commit"
+msgstr "incapaz escrever modelo de memória"
 
-#: builtin/commit.c:893
+#: builtin/commit.c:897
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
 "with '%c' will be ignored.\n"
 msgstr ""
-"Introduza a mensagem de commit das suas alterações.\n"
-"Linhas começadas com '%c' serão ignoradas, e uma mensagem vazia\n"
-"aborta o commit.\n"
+"Por favor, introduz a mensagem de memória das tuas alterações.\n"
+"Linhas começadas com '%c' serão ignoradas.\n"
 
-#: builtin/commit.c:895
+#: builtin/commit.c:899
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
 "with '%c' will be ignored, and an empty message aborts the commit.\n"
 msgstr ""
-"Introduza a mensagem de commit das suas alterações.\n"
+"Por favor, introduz a mensagem de memória das tuas alterações.\n"
 "Linhas começadas com '%c' serão ignoradas, e uma mensagem vazia\n"
-"aborta o commit.\n"
+"aborta a memorização.\n"
 
-#: builtin/commit.c:899
+#: builtin/commit.c:903
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
 "with '%c' will be kept; you may remove them yourself if you want to.\n"
 msgstr ""
-"Introduzia a mensagem de commit das suas alterações.\n"
-"Linhas começadas com '%c' serão mantidas; pode removê-las se o desejar.\n"
-"Uma mensagem vazia aborta o commit.\n"
+"Por favor, introduz a mensagem de memória das tuas alterações.\n"
+"Linhas começadas com '%c' serão mantidas; podes removê-las se quiseres.\n"
 
-#: builtin/commit.c:903
+#: builtin/commit.c:907
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
 "with '%c' will be kept; you may remove them yourself if you want to.\n"
 "An empty message aborts the commit.\n"
 msgstr ""
-"Introduzia a mensagem de commit das suas alterações.\n"
-"Linhas começadas com '%c' serão mantidas; pode removê-las se o desejar.\n"
-"Uma mensagem vazia aborta o commit.\n"
+"Por favor, introduz a mensagem de memória das tuas alterações.\n"
+"Linhas começadas com '%c' serão mantidas; podes removê-las se quiseres.\n"
+"Uma mensagem vazia aborta a memorização.\n"
 
-#: builtin/commit.c:915
+#: builtin/commit.c:919
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -13484,12 +14141,12 @@ msgid ""
 "and try again.\n"
 msgstr ""
 "\n"
-"Parece que estás a fazer commit a uma junção.\n"
-"Se isto é incorreto, remove o ficheiro\n"
+"Parece que estás a memorizar uma junção.\n"
+"Se isto é incorreto, por favor executa\n"
 "\tgit update-ref -d MERGE_HEAD\n"
 "e tenta de novo.\n"
 
-#: builtin/commit.c:920
+#: builtin/commit.c:924
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -13498,178 +14155,154 @@ msgid ""
 "and try again.\n"
 msgstr ""
 "\n"
-"Parece que está a fazer commit a um cherry-pick.\n"
-"Se é incorreto, remove o ficheiro\n"
+"Parece que estás memorizando uma apanha.\n"
+"Se isto é incorreto, por favor executa\n"
 "\tgit update-ref -d CHERRY_PICK_HEAD\n"
 "e tenta de novo.\n"
 
-#: builtin/commit.c:947
+#: builtin/commit.c:951
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%sAutor:    %.*s <%.*s>"
 
-#: builtin/commit.c:955
+#: builtin/commit.c:959
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%sData:      %s"
 
-#: builtin/commit.c:962
+#: builtin/commit.c:966
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
-msgstr "%sCommitter: %.*s <%.*s>"
+msgstr "%sMemorizador: %.*s <%.*s>"
 
-#: builtin/commit.c:980
+#: builtin/commit.c:984
 msgid "Cannot read index"
-msgstr "Incapaz ler index"
+msgstr "Incapaz ler cenário"
 
-#: builtin/commit.c:1025
+#: builtin/commit.c:1029
 msgid "unable to pass trailers to --trailers"
 msgstr "incapaz passar atribuições para --trailers"
 
-#: builtin/commit.c:1065
+#: builtin/commit.c:1069
 msgid "Error building trees"
 msgstr "Erro ao construir árvores"
 
-#: builtin/commit.c:1079 builtin/tag.c:319
+#: builtin/commit.c:1083 builtin/tag.c:317
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "Indique a mensagem usando apenas as opções -m ou -F.\n"
 
-#: builtin/commit.c:1123
+#: builtin/commit.c:1128
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
-msgstr "--author '%s' é diferente de 'Nome <email>' e corresponde a autor inexistente"
+msgstr ""
+"--author '%s' é diferente de 'Nome <email>' e corresponde a autor inexistente"
 
-#: builtin/commit.c:1137
+#: builtin/commit.c:1142
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "Modo de ignorar inválido '%s'"
 
-#: builtin/commit.c:1155 builtin/commit.c:1448
+#: builtin/commit.c:1160 builtin/commit.c:1450
 #, c-format
 msgid "Invalid untracked files mode '%s'"
-msgstr "Modo inválido de ficheiros por seguir '%s'"
+msgstr "Modo '%s' inválido de ficheiros desmonitorizados"
 
-#: builtin/commit.c:1195
-msgid "--long and -z are incompatible"
-msgstr "--long e -z são incompatíveis"
-
-#: builtin/commit.c:1226
+#: builtin/commit.c:1231
 msgid "You are in the middle of a merge -- cannot reword."
-msgstr "Estás no meio de junção -- incapaz refrasear."
+msgstr "Estás no meio de uma junção -- incapaz refrasear."
 
-#: builtin/commit.c:1228
+#: builtin/commit.c:1233
 msgid "You are in the middle of a cherry-pick -- cannot reword."
-msgstr "Estás no meio de apanha -- incapaz refrasear."
+msgstr "Estás no meio de uma apanha -- incapaz refrasear."
 
-#: builtin/commit.c:1231
+#: builtin/commit.c:1236
 #, c-format
-msgid "cannot combine reword option of --fixup with path '%s'"
-msgstr ""
-
-#: builtin/commit.c:1233
-msgid ""
-"reword option of --fixup is mutually exclusive with --patch/--interactive/--"
-"all/--include/--only"
+msgid "reword option of '%s' and path '%s' cannot be used together"
 msgstr ""
+"opção de renomeamento de '%s' e caminho '%s' incapaz serem usadas juntas"
 
-#: builtin/commit.c:1252
-msgid "Using both --reset-author and --author does not make sense"
-msgstr "Usar ambos --reset-author e --author faz sentido nenhum"
+#: builtin/commit.c:1238
+#, c-format
+msgid "reword option of '%s' and '%s' cannot be used together"
+msgstr "opção de renomeamento de '%s' e '%s' incapaz serem usadas juntas"
 
-#: builtin/commit.c:1261
+#: builtin/commit.c:1263
 msgid "You have nothing to amend."
 msgstr "Tens nada para emendar."
 
-#: builtin/commit.c:1264
+#: builtin/commit.c:1266
 msgid "You are in the middle of a merge -- cannot amend."
-msgstr "Estás no meio de junção -- incapaz emendar."
+msgstr "Estás no meio de uma junção -- incapaz emendar."
 
-#: builtin/commit.c:1266
+#: builtin/commit.c:1268
 msgid "You are in the middle of a cherry-pick -- cannot amend."
-msgstr "Estás no meio de apanha -- incapaz emendar."
+msgstr "Estás no meio de uma apanha -- incapaz emendar."
 
-#: builtin/commit.c:1268
+#: builtin/commit.c:1270
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr "Estás no meio de rebase -- incapaz emendar."
 
-#: builtin/commit.c:1271
-msgid "Options --squash and --fixup cannot be used together"
-msgstr "Opções --squash e --fixup incapaz serem usadas juntas"
-
-#: builtin/commit.c:1281
-msgid "Only one of -c/-C/-F/--fixup can be used."
-msgstr "Apenas um entre -c/-C/-F/--fixup pode ser usado."
-
-#: builtin/commit.c:1283
-msgid "Option -m cannot be combined with -c/-C/-F."
-msgstr "Opção -m incapaz ser combinada com -c/C/-F."
-
-#: builtin/commit.c:1292
+#: builtin/commit.c:1290
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr "--reset-author só pode ser usado com -C, -c ou --amend."
 
-#: builtin/commit.c:1310
-msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
-msgstr ""
-"Apenas um entre --include/--only/--all/--interactive/--patch pode ser usado."
-
-#: builtin/commit.c:1338
+#: builtin/commit.c:1337
 #, c-format
 msgid "unknown option: --fixup=%s:%s"
 msgstr "opção desconhecida: --fixup=%s:%s"
 
-#: builtin/commit.c:1352
+#: builtin/commit.c:1354
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "paths '%s ...' com -a faz sentido nenhum"
 
-#: builtin/commit.c:1483 builtin/commit.c:1652
+#: builtin/commit.c:1485 builtin/commit.c:1654
 msgid "show status concisely"
 msgstr "mostrar status de forma concisa"
 
-#: builtin/commit.c:1485 builtin/commit.c:1654
+#: builtin/commit.c:1487 builtin/commit.c:1656
 msgid "show branch information"
 msgstr "mostrar informação de ramo"
 
-#: builtin/commit.c:1487
+#: builtin/commit.c:1489
 msgid "show stash information"
 msgstr "mostrar informação de esconderijo"
 
-#: builtin/commit.c:1489 builtin/commit.c:1656
+#: builtin/commit.c:1491 builtin/commit.c:1658
 msgid "compute full ahead/behind values"
 msgstr ""
 
-#: builtin/commit.c:1491
+#: builtin/commit.c:1493
 msgid "version"
 msgstr "versão"
 
-#: builtin/commit.c:1491 builtin/commit.c:1658 builtin/push.c:551
-#: builtin/worktree.c:690
+#: builtin/commit.c:1493 builtin/commit.c:1660 builtin/push.c:551
+#: builtin/worktree.c:765
 msgid "machine-readable output"
 msgstr "saída inteligível a máquina"
 
-#: builtin/commit.c:1494 builtin/commit.c:1660
+#: builtin/commit.c:1496 builtin/commit.c:1662
 msgid "show status in long format (default)"
 msgstr "apresentar status em formato longo (predefinição)"
 
-#: builtin/commit.c:1497 builtin/commit.c:1663
+#: builtin/commit.c:1499 builtin/commit.c:1665
 msgid "terminate entries with NUL"
 msgstr "terminar entradas com NUL"
 
-#: builtin/commit.c:1499 builtin/commit.c:1503 builtin/commit.c:1666
-#: builtin/fast-export.c:1198 builtin/fast-export.c:1201
-#: builtin/fast-export.c:1204 builtin/rebase.c:1407 parse-options.h:337
+#: builtin/commit.c:1501 builtin/commit.c:1505 builtin/commit.c:1668
+#: builtin/fast-export.c:1172 builtin/fast-export.c:1175
+#: builtin/fast-export.c:1178 builtin/rebase.c:1139 parse-options.h:368
 msgid "mode"
 msgstr "modo"
 
-#: builtin/commit.c:1500 builtin/commit.c:1666
+#: builtin/commit.c:1502 builtin/commit.c:1668
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr ""
-"mostrar ficheiros por seguir, modo opcional: all, normal, no. (Predefinição: "
-"all)"
+"mostrar ficheiros desmonitorizados, modos opcionais: all, normal, no. "
+"Predefinição: all)"
 
-#: builtin/commit.c:1504
+#: builtin/commit.c:1506
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
@@ -13677,210 +14310,210 @@ msgstr ""
 "mostrar ficheiros ignorados, modo opcional: traditional, matching, no. "
 "(Predefinição: tradicional)"
 
-#: builtin/commit.c:1506 parse-options.h:193
+#: builtin/commit.c:1508 parse-options.h:197
 msgid "when"
 msgstr "quando"
 
-#: builtin/commit.c:1507
+#: builtin/commit.c:1509
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
 msgstr ""
-"ignorar alterações em submódulos, quando é opcional: all, dirty, untracked. "
+"ignorar alterações em submódulos, opcional quando: all, dirty, untracked. "
 "(Predefinição: all)"
 
-#: builtin/commit.c:1509
+#: builtin/commit.c:1511
 msgid "list untracked files in columns"
-msgstr "listar ficheiros por seguir em colunas"
+msgstr "listar ficheiros desmonitorizados em colunas"
 
-#: builtin/commit.c:1510
+#: builtin/commit.c:1512
 msgid "do not detect renames"
 msgstr "detecção renomeação nenhuma"
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1514
 msgid "detect renames, optionally set similarity index"
 msgstr ""
 
-#: builtin/commit.c:1535
+#: builtin/commit.c:1537
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr ""
 
-#: builtin/commit.c:1617
+#: builtin/commit.c:1619
 msgid "suppress summary after successful commit"
-msgstr "suprimir o resumo depois de submeter com sucesso"
+msgstr "suprimir resumo depois de memorizar com sucesso"
 
-#: builtin/commit.c:1618
+#: builtin/commit.c:1620
 msgid "show diff in commit message template"
-msgstr "mostrar diff no modelo da mensagem de commit"
+msgstr "mostrar diff no modelo da mensagem de memória"
 
-#: builtin/commit.c:1620
+#: builtin/commit.c:1622
 msgid "Commit message options"
-msgstr "Opções de mensagem de commit"
+msgstr "Opções de mensagem de memória"
 
-#: builtin/commit.c:1621 builtin/merge.c:286 builtin/tag.c:458
+#: builtin/commit.c:1623 builtin/merge.c:288 builtin/tag.c:457
 msgid "read message from file"
 msgstr "ler mensagem de ficheiro"
 
-#: builtin/commit.c:1622
+#: builtin/commit.c:1624
 msgid "author"
 msgstr "autor"
 
-#: builtin/commit.c:1622
+#: builtin/commit.c:1624
 msgid "override author for commit"
 msgstr "sobrepor autor de memória"
 
-#: builtin/commit.c:1623 builtin/gc.c:550
+#: builtin/commit.c:1625 builtin/gc.c:551
 msgid "date"
 msgstr "data"
 
-#: builtin/commit.c:1623
+#: builtin/commit.c:1625
 msgid "override date for commit"
-msgstr "substituir data do commit"
+msgstr "sobrepor data de memória"
 
-#: builtin/commit.c:1625 builtin/commit.c:1626 builtin/commit.c:1632
-#: parse-options.h:329 ref-filter.h:90
+#: builtin/commit.c:1627 builtin/commit.c:1628 builtin/commit.c:1634
+#: parse-options.h:360 ref-filter.h:89
 msgid "commit"
 msgstr "memória"
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1627
 msgid "reuse and edit message from specified commit"
-msgstr "reutilizar e editar a mensagem de um commit especificado"
+msgstr "reutilizar e editar mensagem de memória especificada"
 
-#: builtin/commit.c:1626
+#: builtin/commit.c:1628
 msgid "reuse message from specified commit"
-msgstr "reutilizar a mensagem de um commit especificado"
+msgstr "reutilizar mensagem de memória especificada"
 
 #. TRANSLATORS: Leave "[(amend|reword):]" as-is,
 #. and only translate <commit>.
 #.
-#: builtin/commit.c:1631
+#: builtin/commit.c:1633
 msgid "[(amend|reword):]commit"
 msgstr "[(amend|reword):]memória"
 
-#: builtin/commit.c:1631
+#: builtin/commit.c:1633
 msgid ""
 "use autosquash formatted message to fixup or amend/reword specified commit"
 msgstr ""
-"usar mensagem com formato autosquash para corrigir o commit especificado"
+"usar mensagem com formato autosquash para consertar ou emendar/refrasear "
+"memória especificada"
 
-#: builtin/commit.c:1632
+#: builtin/commit.c:1634
 msgid "use autosquash formatted message to squash specified commit"
-msgstr ""
-"usar mensagem com formato autosquash para esmagar o commit especificado"
+msgstr "usar mensagem com formato autosquash para esmagar memória especificada"
 
-#: builtin/commit.c:1633
+#: builtin/commit.c:1635
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
-msgstr "agora sou eu o autor da memória (usado com -C/-c/--amend)"
+msgstr "o autor da memória agora sou eu (usado com -C/-c/--amend)"
 
-#: builtin/commit.c:1634 builtin/interpret-trailers.c:111
+#: builtin/commit.c:1636 builtin/interpret-trailers.c:111
 msgid "trailer"
 msgstr "atribuição"
 
-#: builtin/commit.c:1634
+#: builtin/commit.c:1636
 msgid "add custom trailer(s)"
-msgstr ""
+msgstr "adicionar atribuição(ões) customizada(s)"
 
-#: builtin/commit.c:1635 builtin/log.c:1754 builtin/merge.c:302
-#: builtin/pull.c:145 builtin/revert.c:110
+#: builtin/commit.c:1637 builtin/log.c:1788 builtin/merge.c:306
+#: builtin/pull.c:146 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr "adicionar atribuição Signed-off-by"
 
-#: builtin/commit.c:1636
+#: builtin/commit.c:1638
 msgid "use specified template file"
 msgstr "usar ficheiro de modelo especificado"
 
-#: builtin/commit.c:1637
+#: builtin/commit.c:1639
 msgid "force edit of commit"
 msgstr "forçar edição de memória"
 
-#: builtin/commit.c:1639
+#: builtin/commit.c:1641
 msgid "include status in commit message template"
-msgstr "incluir status no modelo da mensagem de commit"
+msgstr "incluir status no modelo da mensagem de memória"
 
-#: builtin/commit.c:1644
+#: builtin/commit.c:1646
 msgid "Commit contents options"
-msgstr "Opções de conteúdo do commit"
+msgstr "Opções de conteúdo de memória"
 
-#: builtin/commit.c:1645
+#: builtin/commit.c:1647
 msgid "commit all changed files"
-msgstr "submeter todos os ficheiros alterados"
+msgstr "memorizar todos os ficheiros alterados"
 
-#: builtin/commit.c:1646
+#: builtin/commit.c:1648
 msgid "add specified files to index for commit"
-msgstr "adicionar ficheiros especificados ao índice para submeter"
+msgstr "adicionar ficheiros especificados ao cenário para a memória"
 
-#: builtin/commit.c:1647
+#: builtin/commit.c:1649
 msgid "interactively add files"
 msgstr "adicionar ficheiros interativamente"
 
-#: builtin/commit.c:1648
+#: builtin/commit.c:1650
 msgid "interactively add changes"
 msgstr "adicionar alterações interativamente"
 
-#: builtin/commit.c:1649
+#: builtin/commit.c:1651
 msgid "commit only specified files"
 msgstr "memorizar somente ficheiros especificados"
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1652
 msgid "bypass pre-commit and commit-msg hooks"
-msgstr "ignorar pre-commit e ganchos commit-msg"
+msgstr "contornar ganchos pre-commit e commit-msg"
 
-#: builtin/commit.c:1651
+#: builtin/commit.c:1653
 msgid "show what would be committed"
-msgstr "mostrar o que seria submetido"
+msgstr "mostrar o que seria memorizado"
 
-#: builtin/commit.c:1664
+#: builtin/commit.c:1666
 msgid "amend previous commit"
 msgstr "emendar memória anterior"
 
-#: builtin/commit.c:1665
+#: builtin/commit.c:1667
 msgid "bypass post-rewrite hook"
-msgstr "ignorar post-rewrite hook"
+msgstr "contornar gancho post-rewrite"
 
-#: builtin/commit.c:1672
+#: builtin/commit.c:1674
 msgid "ok to record an empty change"
-msgstr "aceitar o registo duma alteração vazia"
+msgstr "ok a gravar uma alteração vazia"
 
-#: builtin/commit.c:1674
+#: builtin/commit.c:1676
 msgid "ok to record a change with an empty message"
-msgstr "aceitar o registo duma alteração com uma mensagem vazia"
+msgstr "ok a gravar uma alteração com uma mensagem vazia"
 
-#: builtin/commit.c:1750
+#: builtin/commit.c:1752
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Ficheiro MERGE_HEAD roto (%s)"
 
-#: builtin/commit.c:1757
+#: builtin/commit.c:1759
 msgid "could not read MERGE_MODE"
 msgstr "incapaz ler MERGE_MODE"
 
-#: builtin/commit.c:1778
+#: builtin/commit.c:1780
 #, c-format
 msgid "could not read commit message: %s"
-msgstr "incapaz ler mensagem de commit: %s"
+msgstr "incapaz ler mensagem de memória: %s"
 
-#: builtin/commit.c:1785
+#: builtin/commit.c:1787
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "Abortando a memorização devido a mensagem de memória vazia.\n"
 
-#: builtin/commit.c:1790
+#: builtin/commit.c:1792
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "Abortando memorização; mensagem ficou por editar.\n"
 
-#: builtin/commit.c:1801
+#: builtin/commit.c:1803
 #, c-format
 msgid "Aborting commit due to empty commit message body.\n"
 msgstr "Abortando memorização devido a corpo de mensagem de memória vazia.\n"
 
-#: builtin/commit.c:1837
+#: builtin/commit.c:1839
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
 "not exceeded, and then \"git restore --staged :/\" to recover."
 msgstr ""
-"Repositório foi atualizado, mas incapaz escrever ficheiro new_index.\n"
+"repositório foi atualizado, mas incapaz escrever ficheiro new_index.\n"
 "Verifica se tens espaço em disco e que a quota está por preencher,\n"
 "e executa \"git restore --staged :/\" para recuperar."
 
@@ -13927,7 +14560,7 @@ msgstr "id-blob"
 
 #: builtin/config.c:136
 msgid "read config from given blob object"
-msgstr "ler configuração a partir do objeto blob fornecido"
+msgstr "ler configuração a partir de objeto-blob fornecido"
 
 #: builtin/config.c:137
 msgid "Action"
@@ -13998,6 +14631,10 @@ msgstr "encontrar a definição de cor: slot [stdout-é-tty]"
 msgid "Type"
 msgstr "Tipo"
 
+#: builtin/config.c:154 builtin/env--helper.c:42 builtin/hash-object.c:97
+msgid "type"
+msgstr "tipo"
+
 #: builtin/config.c:154 builtin/env--helper.c:43
 msgid "value is given this type"
 msgstr ""
@@ -14020,7 +14657,7 @@ msgstr "valor é --bool ou string"
 
 #: builtin/config.c:159
 msgid "value is a path (file or directory name)"
-msgstr "o valor é um caminho (nome dum ficheiro ou diretório)"
+msgstr "valor é um caminho (nome dum ficheiro ou pasta)"
 
 #: builtin/config.c:160
 msgid "value is an expiry date"
@@ -14205,10 +14842,6 @@ msgstr ""
 msgid "no such section: %s"
 msgstr "secção inexistente: %s"
 
-#: builtin/count-objects.c:90
-msgid "git count-objects [-v] [-H | --human-readable]"
-msgstr "git count-objects [-v] [-H | --human-readable]"
-
 #: builtin/count-objects.c:100
 msgid "print sizes in human readable format"
 msgstr "imprimir dimensões em formato inteligível por humanos"
@@ -14221,21 +14854,21 @@ msgid ""
 "\n"
 "\tchmod 0700 %s"
 msgstr ""
-"As permissões do diretório do socket são demasiado fracas; outros\n"
-"utilizadores poderão conseguir as suas credenciais em cache. Considere "
+"As permissões da pasta de socket são demasiado fracas; outros\n"
+"utilizadores poderão conseguir ler as tuas credenciais em cache. Considera "
 "executar:\n"
 "\n"
 "\tchmod 0700 %s"
 
 #: builtin/credential-cache--daemon.c:276
 msgid "print debugging messages to stderr"
-msgstr "imprimir mensagens de depuração no stderr"
+msgstr "mostrar mensagens de depuração no stderr"
 
 #: builtin/credential-cache--daemon.c:316
 msgid "credential-cache--daemon unavailable; no unix socket support"
 msgstr ""
 
-#: builtin/credential-cache.c:154
+#: builtin/credential-cache.c:180
 msgid "credential-cache unavailable; no unix socket support"
 msgstr ""
 
@@ -14267,17 +14900,17 @@ msgstr "anotado"
 #: builtin/describe.c:277
 #, c-format
 msgid "annotated tag %s not available"
-msgstr "tag anotada %s está indisponível"
+msgstr "etiqueta anotada %s está indisponível"
 
 #: builtin/describe.c:281
 #, c-format
 msgid "tag '%s' is externally known as '%s'"
-msgstr "a tag '%s' está de facto em '%s'"
+msgstr "etiqueta '%s' é conhecida como '%s'"
 
 #: builtin/describe.c:328
 #, c-format
 msgid "no tag exactly matches '%s'"
-msgstr "tag nenhuma corresponde exatamente a '%s'"
+msgstr "etiqueta nenhuma corresponde exatamente a '%s'"
 
 #: builtin/describe.c:330
 #, c-format
@@ -14295,8 +14928,8 @@ msgid ""
 "No annotated tags can describe '%s'.\n"
 "However, there were unannotated tags: try --tags."
 msgstr ""
-"'%s' pode ser descrição de tag anotada nenhuma.\n"
-"No entanto, houve fora das tags anotadas: tenta --tags."
+"'%s' pode ser descrição de etiqueta anotada nenhuma.\n"
+"No entanto, existem etiquetas desanotadas: tenta --tags."
 
 #: builtin/describe.c:428
 #, c-format
@@ -14304,13 +14937,13 @@ msgid ""
 "No tags can describe '%s'.\n"
 "Try --always, or create some tags."
 msgstr ""
-"'%s' pode ser descrição de tag nenhuma.\n"
-"Tenta --always, ou cria algumas tags."
+"'%s' pode ser descrição de etiqueta nenhuma.\n"
+"Tenta --always, ou cria algumas etiquetas."
 
 #: builtin/describe.c:458
 #, c-format
 msgid "traversed %lu commits\n"
-msgstr "%lu commits percorridos\n"
+msgstr "%lu memórias percorridas\n"
 
 #: builtin/describe.c:461
 #, c-format
@@ -14318,7 +14951,7 @@ msgid ""
 "more than %i tags found; listed %i most recent\n"
 "gave up search at %s\n"
 msgstr ""
-"mais de %i tags encontradas; foram listadas as %i mais recentes\n"
+"mais de %i etiquetas encontradas; foram listadas as %i mais recentes\n"
 "pesquisa interrompida em %s\n"
 
 #: builtin/describe.c:529
@@ -14334,23 +14967,23 @@ msgstr "%s é nome de objeto inválido"
 #: builtin/describe.c:540
 #, c-format
 msgid "%s is neither a commit nor blob"
-msgstr "'%s' é nem commit nem blob"
+msgstr "'%s' é nem memória nem blob"
 
 #: builtin/describe.c:554
 msgid "find the tag that comes after the commit"
-msgstr "localizar a tag que vem após o commit"
+msgstr "encontrar a etiqueta que vem após a memória"
 
 #: builtin/describe.c:555
 msgid "debug search strategy on stderr"
-msgstr "depurar a estratégia de procura para stderr"
+msgstr "depurar a estratégia de procura em stderr"
 
 #: builtin/describe.c:556
 msgid "use any ref"
-msgstr "usar uma referência qualquer"
+msgstr "usa qualquer ref"
 
 #: builtin/describe.c:557
 msgid "use any tag, even unannotated"
-msgstr "usa qualquer tag, mesmo uma por anotar"
+msgstr "usa qualquer etiqueta, mesmo uma desanotada"
 
 #: builtin/describe.c:558
 msgid "always use long format"
@@ -14358,7 +14991,7 @@ msgstr "usar sempre formato longo"
 
 #: builtin/describe.c:559
 msgid "only follow first parent"
-msgstr "seguir só o primeiro pai"
+msgstr "seguir só o primeiro parente"
 
 #: builtin/describe.c:562
 msgid "only output exact matches"
@@ -14366,19 +14999,19 @@ msgstr "sair apenas correspondências exatas"
 
 #: builtin/describe.c:564
 msgid "consider <n> most recent tags (default: 10)"
-msgstr "considerar as <n> tags mais recentes (predefinição: 10)"
+msgstr "considerar as <n> etiquetas mais recentes (predefinição: 10)"
 
 #: builtin/describe.c:566
 msgid "only consider tags matching <pattern>"
-msgstr "apenas considerar tags que correspondam ao <padrão>"
+msgstr "apenas considerar etiquetas correspondentes a <padrão>"
 
 #: builtin/describe.c:568
 msgid "do not consider tags matching <pattern>"
-msgstr "descarta tags que correspondam ao <padrão>"
+msgstr "descarta etiquetas correspondentes a <padrão>"
 
-#: builtin/describe.c:570 builtin/name-rev.c:535
+#: builtin/describe.c:570 builtin/name-rev.c:595
 msgid "show abbreviated commit object as fallback"
-msgstr "mostrar objetos de commit abreviados em recurso"
+msgstr "mostrar objeto de memória abreviado como recurso"
 
 #: builtin/describe.c:571 builtin/describe.c:574
 msgid "mark"
@@ -14386,35 +15019,21 @@ msgstr "marca"
 
 #: builtin/describe.c:572
 msgid "append <mark> on dirty working tree (default: \"-dirty\")"
-msgstr ""
-"acrescentar <marca> se a árvore de trabalho contiver alterações "
-"(predefinição: \"-dirty\")"
+msgstr "acrescentar <marca> em árvore-trabalho suja (predefinição: \"-dirty\")"
 
 #: builtin/describe.c:575
 msgid "append <mark> on broken working tree (default: \"-broken\")"
 msgstr ""
-"acrescentar <marca> no caso de árvore de trabalho quebrada (predefinição: \"-"
-"broken\")"
-
-#: builtin/describe.c:593
-msgid "--long is incompatible with --abbrev=0"
-msgstr "--long é incompatível com --abbrev=0"
+"acrescentar <marca> em árvore-trabalho quebrada (predefinição: \"-broken\")"
 
 #: builtin/describe.c:622
 msgid "No names found, cannot describe anything."
 msgstr "Nenhum nome encontrado, incapaz descrever qualquer coisa."
 
-#: builtin/describe.c:673
-msgid "--dirty is incompatible with commit-ishes"
-msgstr "--dirty é incompatível com mnemónicas"
-
-#: builtin/describe.c:675
-msgid "--broken is incompatible with commit-ishes"
-msgstr "--broken é incompatível com mnemónicas"
-
-#: builtin/diff-tree.c:155
-msgid "--stdin and --merge-base are mutually exclusive"
-msgstr ""
+#: builtin/describe.c:673 builtin/describe.c:675
+#, c-format
+msgid "option '%s' and commit-ishes cannot be used together"
+msgstr "opção '%s' e mnemónicas incapaz serem usadas juntas"
 
 #: builtin/diff-tree.c:157
 msgid "--merge-base only works with two commits"
@@ -14435,26 +15054,26 @@ msgstr ""
 msgid "%s...%s: no merge base"
 msgstr ""
 
-#: builtin/diff.c:486
+#: builtin/diff.c:491
 msgid "Not a git repository"
 msgstr "É repositório git nenhum"
 
-#: builtin/diff.c:532 builtin/grep.c:684
+#: builtin/diff.c:537 builtin/grep.c:700
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "objeto inválido '%s' fornecido."
 
-#: builtin/diff.c:543
+#: builtin/diff.c:548
 #, c-format
 msgid "more than two blobs given: '%s'"
 msgstr "mais do que dois blobs fornecidos: '%s'"
 
-#: builtin/diff.c:548
+#: builtin/diff.c:553
 #, c-format
 msgid "unhandled object '%s' given."
 msgstr "objeto sem tratamento '%s' fornecido."
 
-#: builtin/diff.c:582
+#: builtin/diff.c:587
 #, c-format
 msgid "%s...%s: multiple merge bases, using %s"
 msgstr ""
@@ -14463,114 +15082,106 @@ msgstr ""
 msgid "git difftool [<options>] [<commit> [<commit>]] [--] [<path>...]"
 msgstr "git difftool [<opções>] [<memória> [<memória>]] [--] [<caminho>...]"
 
-#: builtin/difftool.c:261
-#, c-format
-msgid "failed: %d"
-msgstr "falhou: %d"
-
-#: builtin/difftool.c:303
+#: builtin/difftool.c:287
 #, c-format
 msgid "could not read symlink %s"
 msgstr "incapaz ler ligação simbólica %s"
 
-#: builtin/difftool.c:305
+#: builtin/difftool.c:289
 #, c-format
 msgid "could not read symlink file %s"
 msgstr "incapaz ler ficheiro de ligação simbólica %s"
 
-#: builtin/difftool.c:313
+#: builtin/difftool.c:297
 #, c-format
 msgid "could not read object %s for symlink %s"
 msgstr "incapaz ler o objeto %s para ligação simbólica %s"
 
-#: builtin/difftool.c:413
+#: builtin/difftool.c:421
 msgid ""
-"combined diff formats('-c' and '--cc') are not supported in\n"
-"directory diff mode('-d' and '--dir-diff')."
+"combined diff formats ('-c' and '--cc') are not supported in\n"
+"directory diff mode ('-d' and '--dir-diff')."
 msgstr ""
-"formatos diff combinado('-c' e '--cc') são insustentados em\n"
-"modo diff pasta('-d' e '--dir-diff')."
+"formatos diff combinado('-c' e '--cc') são insustentados em\n"
+"modo diff de pasta ('-d' e '--dir-diff')."
 
-#: builtin/difftool.c:637
+#: builtin/difftool.c:626
 #, c-format
 msgid "both files modified: '%s' and '%s'."
 msgstr "ambos os ficheiros modificados: '%s' e '%s'."
 
-#: builtin/difftool.c:639
+#: builtin/difftool.c:628
 msgid "working tree file has been left."
-msgstr "ficheiro de árvore de trabalho foi deixado."
+msgstr "ficheiro de árvore-trabalho foi deixado."
 
-#: builtin/difftool.c:650
+#: builtin/difftool.c:639
 #, c-format
 msgid "temporary files exist in '%s'."
 msgstr "existem ficheiros temporários em '%s'."
 
-#: builtin/difftool.c:651
+#: builtin/difftool.c:640
 msgid "you may want to cleanup or recover these."
 msgstr "pode querer limpar ou recuperá-los."
 
-#: builtin/difftool.c:699
+#: builtin/difftool.c:645
+#, c-format
+msgid "failed: %d"
+msgstr "falhou: %d"
+
+#: builtin/difftool.c:690
 msgid "use `diff.guitool` instead of `diff.tool`"
 msgstr "use 'diff.guitool' em vez de 'diff.tool'"
 
-#: builtin/difftool.c:701
+#: builtin/difftool.c:692
 msgid "perform a full-directory diff"
-msgstr "efetuar diff diretório completo"
+msgstr "efetuar diff de pasta completa"
 
-#: builtin/difftool.c:703
+#: builtin/difftool.c:694
 msgid "do not prompt before launching a diff tool"
 msgstr "deixar de perguntar antes de lançar ferramenta diff"
 
-#: builtin/difftool.c:708
+#: builtin/difftool.c:699
 msgid "use symlinks in dir-diff mode"
-msgstr "usar symlinks no modi dir-diff"
+msgstr "usar symlinks no modo diff-de-pasta"
 
-#: builtin/difftool.c:709
+#: builtin/difftool.c:700
 msgid "tool"
 msgstr "ferramenta"
 
-#: builtin/difftool.c:710
+#: builtin/difftool.c:701
 msgid "use the specified diff tool"
 msgstr "usar a ferramenta diff especificada"
 
-#: builtin/difftool.c:712
+#: builtin/difftool.c:703
 msgid "print a list of diff tools that may be used with `--tool`"
 msgstr ""
 "imprimir uma lista de ferramentas diff que podem ser usadas com `--tool`"
 
-#: builtin/difftool.c:715
+#: builtin/difftool.c:706
 msgid ""
-"make 'git-difftool' exit when an invoked diff tool returns a non - zero exit "
+"make 'git-difftool' exit when an invoked diff tool returns a non-zero exit "
 "code"
 msgstr ""
 "fazer com que 'git-difftool' termine quando uma ferramenta diff invocada "
 "retorna um código de saída diferente de zero"
 
-#: builtin/difftool.c:718
+#: builtin/difftool.c:709
 msgid "specify a custom command for viewing diffs"
 msgstr "especificar um comando personalizado para ver diffs"
 
-#: builtin/difftool.c:719
+#: builtin/difftool.c:710
 msgid "passed to `diff`"
 msgstr ""
 
-#: builtin/difftool.c:734
+#: builtin/difftool.c:726
 msgid "difftool requires worktree or --no-index"
 msgstr ""
 
-#: builtin/difftool.c:741
-msgid "--dir-diff is incompatible with --no-index"
-msgstr "--dir-diff é incompatível com --no-index"
-
-#: builtin/difftool.c:744
-msgid "--gui, --tool and --extcmd are mutually exclusive"
-msgstr ""
-
-#: builtin/difftool.c:752
+#: builtin/difftool.c:745
 msgid "no <tool> given for --tool=<tool>"
 msgstr "<ferramenta> nenhuma dada a --tool=<ferramenta>"
 
-#: builtin/difftool.c:759
+#: builtin/difftool.c:752
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "<cmd> nenhum dado a --extcmd=<cmd>"
 
@@ -14578,10 +15189,6 @@ msgstr "<cmd> nenhum dado a --extcmd=<cmd>"
 msgid "git env--helper --type=[bool|ulong] <options> <env-var>"
 msgstr ""
 
-#: builtin/env--helper.c:42 builtin/hash-object.c:98
-msgid "type"
-msgstr "tipo"
-
 #: builtin/env--helper.c:46
 msgid "default for git_env_*(...) to fall back on"
 msgstr ""
@@ -14603,525 +15210,543 @@ msgid ""
 msgstr ""
 
 #: builtin/fast-export.c:29
-msgid "git fast-export [rev-list-opts]"
-msgstr "git fast-export [opts-lista-rev]"
+msgid "git fast-export [<rev-list-opts>]"
+msgstr "git fast-export [<opções-lista-rev>]"
 
-#: builtin/fast-export.c:868
+#: builtin/fast-export.c:843
 msgid "Error: Cannot export nested tags unless --mark-tags is specified."
 msgstr ""
 
-#: builtin/fast-export.c:1177
+#: builtin/fast-export.c:1152
 msgid "--anonymize-map token cannot be empty"
 msgstr ""
 
-#: builtin/fast-export.c:1197
+#: builtin/fast-export.c:1171
 msgid "show progress after <n> objects"
 msgstr "mostrar progresso depois de <n> objetos"
 
-#: builtin/fast-export.c:1199
+#: builtin/fast-export.c:1173
 msgid "select handling of signed tags"
 msgstr "selecionar como lidar as etiquetas assinadas"
 
-#: builtin/fast-export.c:1202
+#: builtin/fast-export.c:1176
 msgid "select handling of tags that tag filtered objects"
 msgstr "selecionar como lidar as etiquetas que marcam objetos filtrados"
 
-#: builtin/fast-export.c:1205
+#: builtin/fast-export.c:1179
 msgid "select handling of commit messages in an alternate encoding"
-msgstr "selecionar como lidar as mensagens de memória com codificação alternativa"
+msgstr ""
+"selecionar como lidar as mensagens de memória com codificação alternativa"
 
-#: builtin/fast-export.c:1208
+#: builtin/fast-export.c:1182
 msgid "dump marks to this file"
 msgstr "Capturar marcas neste ficheiro"
 
-#: builtin/fast-export.c:1210
+#: builtin/fast-export.c:1184
 msgid "import marks from this file"
 msgstr "importar marcas deste ficheiro"
 
-#: builtin/fast-export.c:1214
+#: builtin/fast-export.c:1188
 msgid "import marks from this file if it exists"
 msgstr "importar marcas deste ficheiro se existir"
 
-#: builtin/fast-export.c:1216
+#: builtin/fast-export.c:1190
 msgid "fake a tagger when tags lack one"
-msgstr "Falsear um \"tageador\" para quando falte um às tags"
+msgstr "Falsear um etiquetador quando faltar um para etiquetas"
 
-#: builtin/fast-export.c:1218
+#: builtin/fast-export.c:1192
 msgid "output full tree for each commit"
-msgstr "Mostrar a árvore completa para cada commit"
+msgstr "mostrar árvore completa para cada memória"
 
-#: builtin/fast-export.c:1220
+#: builtin/fast-export.c:1194
 msgid "use the done feature to terminate the stream"
 msgstr "Usar a funcionalidade done para terminar o fluxo"
 
-#: builtin/fast-export.c:1221
+#: builtin/fast-export.c:1195
 msgid "skip output of blob data"
 msgstr "Ignorar a exibição de dados de blob"
 
-#: builtin/fast-export.c:1222 builtin/log.c:1826
+#: builtin/fast-export.c:1196 builtin/log.c:1860
 msgid "refspec"
 msgstr "especificador de referência"
 
-#: builtin/fast-export.c:1223
+#: builtin/fast-export.c:1197
 msgid "apply refspec to exported refs"
 msgstr "Aplicar o especificador de referência a referências exportadas"
 
-#: builtin/fast-export.c:1224
+#: builtin/fast-export.c:1198
 msgid "anonymize output"
 msgstr "anonimizar saída"
 
-#: builtin/fast-export.c:1225
+#: builtin/fast-export.c:1199
 msgid "from:to"
 msgstr ""
 
-#: builtin/fast-export.c:1226
+#: builtin/fast-export.c:1200
 msgid "convert <from> to <to> in anonymized output"
 msgstr ""
 
-#: builtin/fast-export.c:1229
+#: builtin/fast-export.c:1203
 msgid "reference parents which are not in fast-export stream by object id"
 msgstr ""
 
-#: builtin/fast-export.c:1231
+#: builtin/fast-export.c:1205
 msgid "show original object ids of blobs/commits"
 msgstr ""
 
-#: builtin/fast-export.c:1233
+#: builtin/fast-export.c:1207
 msgid "label tags with mark ids"
-msgstr ""
-
-#: builtin/fast-export.c:1256
-msgid "--anonymize-map without --anonymize does not make sense"
-msgstr "--anonymize-map sem --anonymize faz sentido nenhum"
-
-#: builtin/fast-export.c:1271
-msgid "Cannot pass both --import-marks and --import-marks-if-exists"
-msgstr ""
+msgstr "rotular etiquetas com marcas de id"
 
-#: builtin/fast-import.c:3088
+#: builtin/fast-import.c:3097
 #, c-format
 msgid "Missing from marks for submodule '%s'"
 msgstr ""
 
-#: builtin/fast-import.c:3090
+#: builtin/fast-import.c:3099
 #, c-format
 msgid "Missing to marks for submodule '%s'"
 msgstr ""
 
-#: builtin/fast-import.c:3225
+#: builtin/fast-import.c:3234
 #, c-format
 msgid "Expected 'mark' command, got %s"
 msgstr ""
 
-#: builtin/fast-import.c:3230
+#: builtin/fast-import.c:3239
 #, c-format
 msgid "Expected 'to' command, got %s"
 msgstr ""
 
-#: builtin/fast-import.c:3322
+#: builtin/fast-import.c:3331
 msgid "Expected format name:filename for submodule rewrite option"
 msgstr ""
 
-#: builtin/fast-import.c:3377
+#: builtin/fast-import.c:3386
 #, c-format
 msgid "feature '%s' forbidden in input without --allow-unsafe-features"
 msgstr ""
 
-#: builtin/fetch-pack.c:242
+#: builtin/fetch-pack.c:246
 #, c-format
 msgid "Lockfile created but not reported: %s"
-msgstr "Ficheiro de bloqueio criado mas por reportar: %s"
+msgstr "Ficheiro de trancar criado mas por reportar: %s"
 
-#: builtin/fetch.c:35
+#: builtin/fetch.c:36
 msgid "git fetch [<options>] [<repository> [<refspec>...]]"
 msgstr "git fetch [<opções>] [<repositório> [<espetro-ref>...]]"
 
-#: builtin/fetch.c:36
+#: builtin/fetch.c:37
 msgid "git fetch [<options>] <group>"
 msgstr "git fetch [<opções>] <grupo>"
 
-#: builtin/fetch.c:37
+#: builtin/fetch.c:38
 msgid "git fetch --multiple [<options>] [(<repository> | <group>)...]"
 msgstr "git fetch --multiple [<opções>] [(<repositório> | <grupo>)...]"
 
-#: builtin/fetch.c:38
+#: builtin/fetch.c:39
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<opções>]"
 
-#: builtin/fetch.c:122
+#: builtin/fetch.c:124
 msgid "fetch.parallel cannot be negative"
-msgstr ""
+msgstr "fetch.parallel incapaz de ser negativo"
 
-#: builtin/fetch.c:145 builtin/pull.c:185
+#: builtin/fetch.c:147 builtin/pull.c:189
 msgid "fetch from all remotes"
 msgstr "obter de todos os remotos"
 
-#: builtin/fetch.c:147 builtin/pull.c:245
+#: builtin/fetch.c:149 builtin/pull.c:249
 msgid "set upstream for git pull/fetch"
 msgstr "definir upstream para git pull/fetch"
 
-#: builtin/fetch.c:149 builtin/pull.c:188
+#: builtin/fetch.c:151 builtin/pull.c:192
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "acrescentar a .git/FETCH_HEAD em vez de sobrescrever"
 
-#: builtin/fetch.c:151
+#: builtin/fetch.c:153
 msgid "use atomic transaction to update references"
 msgstr "usar transação atómica para atualizar referências"
 
-#: builtin/fetch.c:153 builtin/pull.c:191
+#: builtin/fetch.c:155 builtin/pull.c:195
 msgid "path to upload pack on remote end"
-msgstr "caminho para o comando upload pack no remoto"
+msgstr "caminho para pacote upload no lado remoto"
 
-#: builtin/fetch.c:154
+#: builtin/fetch.c:156
 msgid "force overwrite of local reference"
 msgstr "forçar sobrescrever referências locais"
 
-#: builtin/fetch.c:156
+#: builtin/fetch.c:158
 msgid "fetch from multiple remotes"
 msgstr "obter de múltiplos remotos"
 
-#: builtin/fetch.c:158 builtin/pull.c:195
+#: builtin/fetch.c:160 builtin/pull.c:199
 msgid "fetch all tags and associated objects"
-msgstr "obter todas as tags e objetos associados"
+msgstr "buscar todas as etiquetas e objetos associados"
 
-#: builtin/fetch.c:160
+#: builtin/fetch.c:162
 msgid "do not fetch all tags (--no-tags)"
 msgstr "buscar nada todas as etiquetas (--no-tags)"
 
-#: builtin/fetch.c:162
+#: builtin/fetch.c:164
 msgid "number of submodules fetched in parallel"
 msgstr "número de submódulos obtidos em paralelo"
 
-#: builtin/fetch.c:164
+#: builtin/fetch.c:166
 msgid "modify the refspec to place all refs within refs/prefetch/"
-msgstr ""
+msgstr "modificar o espetro-ref para colocar todas as refs em refs/prefetch/"
 
-#: builtin/fetch.c:166 builtin/pull.c:198
+#: builtin/fetch.c:168 builtin/pull.c:202
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "podar ramos de monitorização remotos que deixaram de estar no remoto"
 
-#: builtin/fetch.c:168
+#: builtin/fetch.c:170
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
+"podar etiquetas locais que que deixaram de estar no remoto e trocar etiquetas"
 
-#: builtin/fetch.c:169 builtin/fetch.c:194 builtin/pull.c:122
+#: builtin/fetch.c:171 builtin/fetch.c:199 builtin/pull.c:123
 msgid "on-demand"
 msgstr "on-demand"
 
-#: builtin/fetch.c:170
+#: builtin/fetch.c:172
 msgid "control recursive fetching of submodules"
-msgstr "controlar buscar recursivo de submódulos"
+msgstr "controlar busca recursiva de submódulos"
 
-#: builtin/fetch.c:175
+#: builtin/fetch.c:177
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr "escrever referências buscadas para ficheiro FETCH_HEAD"
 
-#: builtin/fetch.c:176 builtin/pull.c:206
+#: builtin/fetch.c:178 builtin/pull.c:210
 msgid "keep downloaded pack"
 msgstr "manter o pacote transferido"
 
-#: builtin/fetch.c:178
+#: builtin/fetch.c:180
 msgid "allow updating of HEAD ref"
-msgstr "permitir a atualização da referência HEAD"
+msgstr "permitir a atualização da ref HEAD"
 
-#: builtin/fetch.c:181 builtin/fetch.c:187 builtin/pull.c:209
-#: builtin/pull.c:218
+#: builtin/fetch.c:183 builtin/fetch.c:189 builtin/pull.c:213
+#: builtin/pull.c:222
 msgid "deepen history of shallow clone"
-msgstr "aprofundar o histórico de um clone raso"
+msgstr "aprofundar o histórico de clone superficial"
 
-#: builtin/fetch.c:183 builtin/pull.c:212
+#: builtin/fetch.c:185 builtin/pull.c:216
 msgid "deepen history of shallow repository based on time"
-msgstr "aprofundar o histórico de repositório raso com base na data"
+msgstr "aprofundar o histórico de repositório superficial com base na data"
 
-#: builtin/fetch.c:189 builtin/pull.c:221
+#: builtin/fetch.c:191 builtin/pull.c:225
 msgid "convert to a complete repository"
 msgstr "converter num repositório completo"
 
-#: builtin/fetch.c:192
+#: builtin/fetch.c:194
+msgid "re-fetch without negotiating common commits"
+msgstr "voltar a buscar com negociação nenhuma de memórias comuns"
+
+#: builtin/fetch.c:197
 msgid "prepend this to submodule path output"
 msgstr "preceder isto à saída de caminho de submódulo"
 
-#: builtin/fetch.c:195
+#: builtin/fetch.c:200
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
 msgstr ""
+"predefinido para busca recursiva de submódulos (menor prioridade que "
+"ficheiros config)"
 
-#: builtin/fetch.c:199 builtin/pull.c:224
+#: builtin/fetch.c:204 builtin/pull.c:228
 msgid "accept refs that update .git/shallow"
 msgstr "aceitar refs que atualizem .git/shallow"
 
-#: builtin/fetch.c:200 builtin/pull.c:226
+#: builtin/fetch.c:205 builtin/pull.c:230
 msgid "refmap"
 msgstr "mapa-ref"
 
-#: builtin/fetch.c:201 builtin/pull.c:227
+#: builtin/fetch.c:206 builtin/pull.c:231
 msgid "specify fetch refmap"
 msgstr "especificar buscar mapa-ref"
 
-#: builtin/fetch.c:208 builtin/pull.c:240
+#: builtin/fetch.c:213 builtin/pull.c:244
 msgid "report that we have only objects reachable from this object"
-msgstr ""
+msgstr "reportar que apenas temos objetos alcançáveis a partir deste objeto"
 
-#: builtin/fetch.c:210
+#: builtin/fetch.c:215
 msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
 msgstr ""
+"mostrar antecessores da ponta de negociação; em vez de buscar ficheiro-pacote"
 
-#: builtin/fetch.c:213 builtin/fetch.c:215
+#: builtin/fetch.c:218 builtin/fetch.c:220
 msgid "run 'maintenance --auto' after fetching"
 msgstr "executar 'maintenance --auto' após buscar"
 
-#: builtin/fetch.c:217 builtin/pull.c:243
+#: builtin/fetch.c:222 builtin/pull.c:247
 msgid "check for forced-updates on all updated branches"
-msgstr ""
+msgstr "verificar em todos os ramos atualizados por atualizações forçadas"
 
-#: builtin/fetch.c:219
+#: builtin/fetch.c:224
 msgid "write the commit-graph after fetching"
-msgstr "escrever commit-graph após buscar"
+msgstr "escrever grafo-memória após buscar"
 
-#: builtin/fetch.c:221
+#: builtin/fetch.c:226
 msgid "accept refspecs from stdin"
-msgstr "aceitar espetro-ref de entrada padrão"
+msgstr "aceitar espetro-refs de entrada padrão"
 
-#: builtin/fetch.c:586
-msgid "Couldn't find remote ref HEAD"
-msgstr "Incapaz de encontrar ref remota HEAD"
+#: builtin/fetch.c:618
+msgid "couldn't find remote ref HEAD"
+msgstr "incapaz encontrar HEAD de ref remota"
 
-#: builtin/fetch.c:757
-#, c-format
-msgid "configuration fetch.output contains invalid value %s"
-msgstr "configuração fetch.output contém valor inválido %s"
-
-#: builtin/fetch.c:856
+#: builtin/fetch.c:893
 #, c-format
 msgid "object %s not found"
 msgstr "objeto %s por encontrar"
 
-#: builtin/fetch.c:860
+#: builtin/fetch.c:897
 msgid "[up to date]"
 msgstr "[atualizado]"
 
-#: builtin/fetch.c:873 builtin/fetch.c:889 builtin/fetch.c:961
+#: builtin/fetch.c:909 builtin/fetch.c:927 builtin/fetch.c:999
 msgid "[rejected]"
 msgstr "[rejeitado]"
 
-#: builtin/fetch.c:874
+#: builtin/fetch.c:911
 msgid "can't fetch in current branch"
-msgstr "incapaz buscar no ramo atual"
+msgstr "incapaz buscar em ramo atual"
+
+#: builtin/fetch.c:912
+msgid "checked out in another worktree"
+msgstr "em observação em outra árvore-trabalho"
 
-#: builtin/fetch.c:884
+#: builtin/fetch.c:922
 msgid "[tag update]"
-msgstr "[tag atualizada]"
+msgstr "[atualização de etiqueta]"
 
-#: builtin/fetch.c:885 builtin/fetch.c:922 builtin/fetch.c:944
-#: builtin/fetch.c:956
+#: builtin/fetch.c:923 builtin/fetch.c:960 builtin/fetch.c:982
+#: builtin/fetch.c:994
 msgid "unable to update local ref"
 msgstr "incapaz atualizar ref local"
 
-#: builtin/fetch.c:889
+#: builtin/fetch.c:927
 msgid "would clobber existing tag"
-msgstr ""
+msgstr "encobriria etiqueta existente"
 
-#: builtin/fetch.c:911
+#: builtin/fetch.c:949
 msgid "[new tag]"
-msgstr "[nova tag]"
+msgstr "[nova etiqueta]"
 
-#: builtin/fetch.c:914
+#: builtin/fetch.c:952
 msgid "[new branch]"
 msgstr "[novo ramo]"
 
-#: builtin/fetch.c:917
+#: builtin/fetch.c:955
 msgid "[new ref]"
-msgstr "[nova referência]"
+msgstr "[nova ref]"
 
-#: builtin/fetch.c:956
+#: builtin/fetch.c:994
 msgid "forced update"
 msgstr "atualização forçada"
 
-#: builtin/fetch.c:961
+#: builtin/fetch.c:999
 msgid "non-fast-forward"
-msgstr "sem avanço-rápido"
+msgstr "sem avanço"
 
-#: builtin/fetch.c:1065
+#: builtin/fetch.c:1102
 msgid ""
-"Fetch normally indicates which branches had a forced update,\n"
-"but that check has been disabled. To re-enable, use '--show-forced-updates'\n"
-"flag or run 'git config fetch.showForcedUpdates true'."
+"fetch normally indicates which branches had a forced update,\n"
+"but that check has been disabled; to re-enable, use '--show-forced-updates'\n"
+"flag or run 'git config fetch.showForcedUpdates true'"
 msgstr ""
+"buscar normalmente indica qual ramo teve uma atualização forçada,\n"
+"mas essa verificação está desativada; to reactivar, usa a flag\n"
+"'--show-forced-updates' ou executa 'git config fetch.showForcedUpdates true'"
 
-#: builtin/fetch.c:1069
+#: builtin/fetch.c:1106
 #, c-format
 msgid ""
-"It took %.2f seconds to check forced updates. You can use\n"
+"it took %.2f seconds to check forced updates; you can use\n"
 "'--no-show-forced-updates' or run 'git config fetch.showForcedUpdates "
 "false'\n"
-" to avoid this check.\n"
+"to avoid this check\n"
 msgstr ""
+"demorou %.2f segundos a verificar por atualizações forçadas: podes usar\n"
+"'--no-show-forced-updates' ou executar 'git config fetch.showForcedUpdates "
+"true'\n"
+"para evitar esta verificação\n"
 
-#: builtin/fetch.c:1101
+#: builtin/fetch.c:1136
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s ficou por enviar todos objetos necessários\n"
 
-#: builtin/fetch.c:1129
+#: builtin/fetch.c:1156
 #, c-format
 msgid "rejected %s because shallow roots are not allowed to be updated"
-msgstr "%s rejeitada, porque raízes rasas são proibidas de ser atualizadas"
+msgstr ""
+"%s rejeitada, porque raízes superficiais são proibidas de serem atualizadas"
 
-#: builtin/fetch.c:1206 builtin/fetch.c:1357
+#: builtin/fetch.c:1259 builtin/fetch.c:1418
 #, c-format
 msgid "From %.*s\n"
 msgstr "De %.*s\n"
 
-#: builtin/fetch.c:1228
+#: builtin/fetch.c:1269
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
 " 'git remote prune %s' to remove any old, conflicting branches"
 msgstr ""
-"algumas refs locais ficaram desatualizadas; tenta executar\n"
-" 'git remote prune %s' para remover algum ramo antigo e conflituoso"
+"algumas refs locais ficaram por atualizar; tenta executar\n"
+" 'git remote prune %s' para remover algum ramo conflituoso e antigo"
 
-#: builtin/fetch.c:1327
+#: builtin/fetch.c:1377
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s ficará suspenso)"
 
-#: builtin/fetch.c:1328
+#: builtin/fetch.c:1378
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s ficou suspenso)"
 
-#: builtin/fetch.c:1360
+#: builtin/fetch.c:1421
 msgid "[deleted]"
 msgstr "[eliminado]"
 
-#: builtin/fetch.c:1361 builtin/remote.c:1118
+#: builtin/fetch.c:1422 builtin/remote.c:1153
 msgid "(none)"
 msgstr "(nenhum)"
 
-#: builtin/fetch.c:1384
+#: builtin/fetch.c:1446
+#, c-format
+msgid "refusing to fetch into branch '%s' checked out at '%s'"
+msgstr "recusando buscar para o ramo '%s' observado em '%s'"
+
+#: builtin/fetch.c:1466
 #, c-format
-msgid "Refusing to fetch into current branch %s of non-bare repository"
-msgstr "Recusando buscar para o ramo atual %s de repositório diferente de nu"
+msgid "option \"%s\" value \"%s\" is not valid for %s"
+msgstr "opção \"%s\" com valor \"%s\" é inválido para %s"
 
-#: builtin/fetch.c:1403
+#: builtin/fetch.c:1469
 #, c-format
-msgid "Option \"%s\" value \"%s\" is not valid for %s"
-msgstr "Opção \"%s\" com valor \"%s\" é inválido para %s"
+msgid "option \"%s\" is ignored for %s\n"
+msgstr "opção \"%s\" ignorada em %s\n"
 
-#: builtin/fetch.c:1406
+#: builtin/fetch.c:1496
 #, c-format
-msgid "Option \"%s\" is ignored for %s\n"
-msgstr "Opção \"%s\" ignorada em %s\n"
+msgid "the object %s does not exist"
+msgstr "o objeto %s é inexistente"
 
-#: builtin/fetch.c:1618
+#: builtin/fetch.c:1748
 msgid "multiple branches detected, incompatible with --set-upstream"
+msgstr "múltiplos\tramos detetados, incompatível com --set-upstream"
+
+#: builtin/fetch.c:1760
+#, c-format
+msgid ""
+"could not set upstream of HEAD to '%s' from '%s' when it does not point to "
+"any branch."
 msgstr ""
+"apenas pode definir upstream de HEAD para '%s' a partir de '%s' quando "
+"aponta para qualquer ramo."
 
-#: builtin/fetch.c:1633
+#: builtin/fetch.c:1773
 msgid "not setting upstream for a remote remote-tracking branch"
-msgstr "desdefinindo upstream para remoto de ramo de monitorização remoto"
+msgstr "indefinindo upstream para remoto de ramo de monitorização remoto"
 
-#: builtin/fetch.c:1635
+#: builtin/fetch.c:1775
 msgid "not setting upstream for a remote tag"
-msgstr ""
+msgstr "indefinindo upstream para etiqueta remota"
 
-#: builtin/fetch.c:1637
+#: builtin/fetch.c:1777
 msgid "unknown branch type"
 msgstr "tipo de ramo desconhecido"
 
-#: builtin/fetch.c:1639
+#: builtin/fetch.c:1779
 msgid ""
-"no source branch found.\n"
-"you need to specify exactly one branch with the --set-upstream option."
+"no source branch found;\n"
+"you need to specify exactly one branch with the --set-upstream option"
 msgstr ""
+"nenhum ramo de origem encontrado;\n"
+"precisas de especificar exatamente um ramo, com a opção --set-upstream"
 
-#: builtin/fetch.c:1768 builtin/fetch.c:1831
+#: builtin/fetch.c:1904 builtin/fetch.c:1967
 #, c-format
 msgid "Fetching %s\n"
-msgstr "A obter de %s\n"
+msgstr "Buscando %s\n"
 
-#: builtin/fetch.c:1778 builtin/fetch.c:1833 builtin/remote.c:101
+#: builtin/fetch.c:1914 builtin/fetch.c:1969
 #, c-format
-msgid "Could not fetch %s"
-msgstr "Incapaz buscar %s"
+msgid "could not fetch %s"
+msgstr "incapaz buscar %s"
 
-#: builtin/fetch.c:1790
+#: builtin/fetch.c:1926
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
-msgstr "fetch '%s' impossível (exit code: %d)\n"
+msgstr "incapaz buscar '%s' (exit code: %d)\n"
 
-#: builtin/fetch.c:1894
+#: builtin/fetch.c:2030
 msgid ""
-"No remote repository specified.  Please, specify either a URL or a\n"
-"remote name from which new revisions should be fetched."
+"no remote repository specified; please specify either a URL or a\n"
+"remote name from which new revisions should be fetched"
 msgstr ""
-"Nenhum repositório remoto especificado. Especifique um URL ou\n"
-"o nome remoto a partir do qual as novas revisões devem ser obtidas."
-
-#: builtin/fetch.c:1930
-msgid "You need to specify a tag name."
-msgstr "Deve especificar um nome para a tag."
+"nenhum repositório remoto especificado; por favor especifica um URL ou\n"
+"um nome remoto a partir de onde as novas revisões devem ser buscadas."
 
-#: builtin/fetch.c:1994
-msgid "--negotiate-only needs one or more --negotiate-tip=*"
-msgstr "--negotiate-only precisa de um ou mais --negotiate-tip=*"
+#: builtin/fetch.c:2066
+msgid "you need to specify a tag name"
+msgstr "precisas especificar um nome de etiqueta"
 
-#: builtin/fetch.c:1998
-msgid "Negative depth in --deepen is not supported"
-msgstr "Profundidade negativa em --deepen é insustentado"
+#: builtin/fetch.c:2156
+msgid "--negotiate-only needs one or more --negotiation-tip=*"
+msgstr "--negotiate-only precisa de um ou mais --negotiation-tip=*"
 
-#: builtin/fetch.c:2000
-msgid "--deepen and --depth are mutually exclusive"
-msgstr "--deepen e --depth são mutuamente exclusivos"
+#: builtin/fetch.c:2160
+msgid "negative depth in --deepen is not supported"
+msgstr "profundidade negativa em --deepen é insustentado"
 
-#: builtin/fetch.c:2005
-msgid "--depth and --unshallow cannot be used together"
-msgstr "--depth e --unshallow incapazes serem usados juntos"
-
-#: builtin/fetch.c:2007
+#: builtin/fetch.c:2169
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "--unshallow num repositório completo faz sentido nenhum"
 
-#: builtin/fetch.c:2024
+#: builtin/fetch.c:2186
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all leva como argumento repositório nenhum"
 
-#: builtin/fetch.c:2026
+#: builtin/fetch.c:2188
 msgid "fetch --all does not make sense with refspecs"
-msgstr "fetch --all com espetros-ref, faz sentido nenhum"
+msgstr "fetch --all com espetro-refs, faz sentido nenhum"
 
-#: builtin/fetch.c:2035
+#: builtin/fetch.c:2197
 #, c-format
-msgid "No such remote or remote group: %s"
-msgstr "Remoto ou grupo remoto inexistente: %s"
+msgid "no such remote or remote group: %s"
+msgstr "remoto ou grupo remoto inexistente: %s"
 
-#: builtin/fetch.c:2042
-msgid "Fetching a group and specifying refspecs does not make sense"
-msgstr "Buscar um grupo e especificar refspecs faz sentido nenhum"
+#: builtin/fetch.c:2205
+msgid "fetching a group and specifying refspecs does not make sense"
+msgstr "buscar um grupo e especificar espetro-refs faz sentido nenhum"
 
-#: builtin/fetch.c:2058
+#: builtin/fetch.c:2221
 msgid "must supply remote when using --negotiate-only"
-msgstr ""
+msgstr "tens de indicar remoto quando usas --negotiate-only"
 
-#: builtin/fetch.c:2063
-msgid "Protocol does not support --negotiate-only, exiting."
-msgstr ""
+#: builtin/fetch.c:2226
+msgid "protocol does not support --negotiate-only, exiting"
+msgstr "protocolo insustenta --negotiate-only, saindo"
 
-#: builtin/fetch.c:2082
+#: builtin/fetch.c:2246
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
 msgstr ""
+"--filter apenas pode ser usado com o remoto configurado em extensions."
+"partialclone"
 
-#: builtin/fetch.c:2086
+#: builtin/fetch.c:2250
 msgid "--atomic can only be used when fetching from one remote"
-msgstr ""
+msgstr "--atomic apenas pode ser usado quando buscando de um remoto"
 
-#: builtin/fetch.c:2090
+#: builtin/fetch.c:2254
 msgid "--stdin can only be used when fetching from one remote"
-msgstr ""
+msgstr "--stdin apenas pode ser usado quando buscando de um remoto"
 
 #: builtin/fmt-merge-msg.c:7
 msgid ""
@@ -15130,23 +15755,27 @@ msgstr ""
 "git fmt-merge-msg [-m <mensagem>] [--log[=<n>] | --no-log] [--file "
 "<ficheiro>]"
 
-#: builtin/fmt-merge-msg.c:18
+#: builtin/fmt-merge-msg.c:19
 msgid "populate log with at most <n> entries from shortlog"
 msgstr "povoar o registo com, no máximo, <n> entradas do shortlog"
 
-#: builtin/fmt-merge-msg.c:21
+#: builtin/fmt-merge-msg.c:22
 msgid "alias for --log (deprecated)"
 msgstr "alias de --log (obsoleto)"
 
-#: builtin/fmt-merge-msg.c:24
+#: builtin/fmt-merge-msg.c:25
 msgid "text"
 msgstr "texto"
 
-#: builtin/fmt-merge-msg.c:25
+#: builtin/fmt-merge-msg.c:26
 msgid "use <text> as start of message"
 msgstr "usar <texto> no início da mensagem"
 
-#: builtin/fmt-merge-msg.c:26
+#: builtin/fmt-merge-msg.c:28
+msgid "use <name> instead of the real target branch"
+msgstr "usar <nome> em vez de ramo alvo real"
+
+#: builtin/fmt-merge-msg.c:29
 msgid "file to read from"
 msgstr "ficheiro a ler"
 
@@ -15166,52 +15795,52 @@ msgstr "git for-each-ref [--merged [<memória>]] [--no-merged [<memória>]]"
 msgid "git for-each-ref [--contains [<commit>]] [--no-contains [<commit>]]"
 msgstr "git for-each-ref [--contains [<memória>]] [--no-contains [<memória>]]"
 
-#: builtin/for-each-ref.c:30
+#: builtin/for-each-ref.c:31
 msgid "quote placeholders suitably for shells"
 msgstr ""
 "envolver os marcadores de posição em aspas de forma adequada para "
 "interpretadores de comandos"
 
-#: builtin/for-each-ref.c:32
+#: builtin/for-each-ref.c:33
 msgid "quote placeholders suitably for perl"
 msgstr "envolver os marcadores de posição em aspas de forma adequada para perl"
 
-#: builtin/for-each-ref.c:34
+#: builtin/for-each-ref.c:35
 msgid "quote placeholders suitably for python"
 msgstr ""
 "envolver os marcadores de posição em aspas de forma adequada para python"
 
-#: builtin/for-each-ref.c:36
+#: builtin/for-each-ref.c:37
 msgid "quote placeholders suitably for Tcl"
 msgstr "envolver os marcadores de posição em aspas de forma adequada para Tcl"
 
-#: builtin/for-each-ref.c:39
+#: builtin/for-each-ref.c:40
 msgid "show only <n> matched refs"
 msgstr "mostrar apenas <n> referências correspondidas"
 
-#: builtin/for-each-ref.c:41 builtin/tag.c:483
+#: builtin/for-each-ref.c:42 builtin/tag.c:482
 msgid "respect format colors"
 msgstr "respeitar cores de formatação"
 
-#: builtin/for-each-ref.c:44
+#: builtin/for-each-ref.c:45
 msgid "print only refs which points at the given object"
 msgstr "imprimir apenas referências que apontem para o objeto fornecido"
 
-#: builtin/for-each-ref.c:46
+#: builtin/for-each-ref.c:47
 msgid "print only refs that are merged"
-msgstr "imprimir apenas referenciadas integradas"
+msgstr "mostrar apenas refs que estão juntas"
 
-#: builtin/for-each-ref.c:47
+#: builtin/for-each-ref.c:48
 msgid "print only refs that are not merged"
 msgstr "imprimir apenas refs que estão por juntar"
 
-#: builtin/for-each-ref.c:48
+#: builtin/for-each-ref.c:49
 msgid "print only refs which contain the commit"
-msgstr "imprimir apenas refs que contenham o commit"
+msgstr "imprimir apenas refs que contenham a memória"
 
-#: builtin/for-each-ref.c:49
+#: builtin/for-each-ref.c:50
 msgid "print only refs which don't contain the commit"
-msgstr "imprimir apenas refs que contenham outros commits"
+msgstr "imprimir apenas refs que contenham outras memórias"
 
 #: builtin/for-each-repo.c:9
 msgid "git for-each-repo --config=<config> <command-args>"
@@ -15274,7 +15903,7 @@ msgstr "inacessível %s %s"
 #: builtin/fsck.c:311
 #, c-format
 msgid "dangling %s %s"
-msgstr "balanceando %s %s"
+msgstr "suspendendo %s %s"
 
 #: builtin/fsck.c:321
 msgid "could not create lost-found"
@@ -15337,259 +15966,376 @@ msgstr "%s: ponteiro sha1 inválido %s"
 #: builtin/fsck.c:537
 #, c-format
 msgid "%s: not a commit"
-msgstr "%s: é commit nenhum"
+msgstr "%s: é memória nenhuma"
 
 #: builtin/fsck.c:591
 msgid "notice: No default references"
 msgstr "notificação: Referências padrão nenhumas"
 
-#: builtin/fsck.c:606
+#: builtin/fsck.c:621
+#, c-format
+msgid "%s: hash-path mismatch, found at: %s"
+msgstr ""
+
+#: builtin/fsck.c:624
 #, c-format
 msgid "%s: object corrupt or missing: %s"
 msgstr "%s: objeto roto ou em falta: %s"
 
-#: builtin/fsck.c:619
+#: builtin/fsck.c:628
+#, c-format
+msgid "%s: object is of unknown type '%s': %s"
+msgstr "%s: objeto é de tipo desconhecido '%s': %s"
+
+#: builtin/fsck.c:645
 #, c-format
 msgid "%s: object could not be parsed: %s"
 msgstr "%s: objeto incapaz de ser processado: %s"
 
-#: builtin/fsck.c:639
+#: builtin/fsck.c:665
 #, c-format
 msgid "bad sha1 file: %s"
 msgstr "mau ficheiro sha1: %s"
 
-#: builtin/fsck.c:654
+#: builtin/fsck.c:686
 msgid "Checking object directory"
 msgstr "Verificando pasta objeto"
 
-#: builtin/fsck.c:657
+#: builtin/fsck.c:689
 msgid "Checking object directories"
 msgstr "Verificando pastas objeto"
 
-#: builtin/fsck.c:672
+#: builtin/fsck.c:705
 #, c-format
 msgid "Checking %s link"
 msgstr "Verfificando ligação %s"
 
-#: builtin/fsck.c:677 builtin/index-pack.c:864
+#: builtin/fsck.c:710 builtin/index-pack.c:862
 #, c-format
 msgid "invalid %s"
 msgstr "%s inválido"
 
-#: builtin/fsck.c:684
+#: builtin/fsck.c:717
 #, c-format
 msgid "%s points to something strange (%s)"
 msgstr "%s aponta para algo estranho (%s)"
 
-#: builtin/fsck.c:690
+#: builtin/fsck.c:723
 #, c-format
 msgid "%s: detached HEAD points at nothing"
-msgstr ""
+msgstr "%s: HEAD desanexada aponta para nada"
 
-#: builtin/fsck.c:694
+#: builtin/fsck.c:727
 #, c-format
 msgid "notice: %s points to an unborn branch (%s)"
-msgstr ""
+msgstr "aviso: %s aponta para um ramo por nascer (%s)"
 
-#: builtin/fsck.c:706
+#: builtin/fsck.c:739
 msgid "Checking cache tree"
 msgstr "Verificando árvore-cenário"
 
-#: builtin/fsck.c:711
+#: builtin/fsck.c:744
 #, c-format
 msgid "%s: invalid sha1 pointer in cache-tree"
 msgstr "%s: ponteiro sha1 inválido em árvore-cenário"
 
-#: builtin/fsck.c:720
+#: builtin/fsck.c:753
 msgid "non-tree in cache-tree"
-msgstr ""
+msgstr "não-árvore em árvore-cenário"
 
-#: builtin/fsck.c:751
+#: builtin/fsck.c:784
 msgid "git fsck [<options>] [<object>...]"
 msgstr "git fsck [<opções>] [<objeto>...]"
 
-#: builtin/fsck.c:757
+#: builtin/fsck.c:790
 msgid "show unreachable objects"
 msgstr "mostrar objetos inalcançáveis"
 
-#: builtin/fsck.c:758
+#: builtin/fsck.c:791
 msgid "show dangling objects"
 msgstr "mostrar objetos suspensos"
 
-#: builtin/fsck.c:759
+#: builtin/fsck.c:792
 msgid "report tags"
-msgstr "mostrar tags"
+msgstr "mostrar etiquetas"
 
-#: builtin/fsck.c:760
+#: builtin/fsck.c:793
 msgid "report root nodes"
 msgstr "mostrar nós raiz"
 
-#: builtin/fsck.c:761
+#: builtin/fsck.c:794
 msgid "make index objects head nodes"
-msgstr "considerar objetos do índice como nós cabeça"
+msgstr "fazer de objetos de cenário, nós de cabeça"
 
-#: builtin/fsck.c:762
+#: builtin/fsck.c:795
 msgid "make reflogs head nodes (default)"
 msgstr "considerar os reflogs como nós cabeça (predefinição)"
 
-#: builtin/fsck.c:763
+#: builtin/fsck.c:796
 msgid "also consider packs and alternate objects"
-msgstr "considerar também pacotes e objetos sobressalente"
+msgstr "também considerar pacotes e objetos alternativos"
 
-#: builtin/fsck.c:764
+#: builtin/fsck.c:797
 msgid "check only connectivity"
 msgstr "verificar só a conetividade"
 
-#: builtin/fsck.c:765 builtin/mktag.c:75
+#: builtin/fsck.c:798 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr "ativar verificação mais rigorosa"
 
-#: builtin/fsck.c:767
+#: builtin/fsck.c:800
 msgid "write dangling objects in .git/lost-found"
-msgstr "escrever objetos perdidos em .git/lost-found"
+msgstr "escrever objetos suspensos em .git/lost-found"
 
-#: builtin/fsck.c:768 builtin/prune.c:134
+#: builtin/fsck.c:801 builtin/prune.c:146
 msgid "show progress"
 msgstr "mostrar progresso"
 
-#: builtin/fsck.c:769
+#: builtin/fsck.c:802
 msgid "show verbose names for reachable objects"
 msgstr "mostrar nomes verbosos de objetos inalcançáveis"
 
-#: builtin/fsck.c:828 builtin/index-pack.c:262
+#: builtin/fsck.c:862 builtin/index-pack.c:261
 msgid "Checking objects"
 msgstr "Verificando objetos"
 
-#: builtin/fsck.c:856
+#: builtin/fsck.c:890
 #, c-format
 msgid "%s: object missing"
 msgstr "%s: faltando objeto"
 
-#: builtin/fsck.c:867
+#: builtin/fsck.c:901
 #, c-format
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "parâmetro inválido: esperado sha1, recebi '%s'"
 
-#: builtin/gc.c:39
-msgid "git gc [<options>]"
-msgstr "git gc [<opções>]"
+#: builtin/fsmonitor--daemon.c:13
+msgid "git fsmonitor--daemon start [<options>]"
+msgstr "git fsmonitor--daemon start [<opções>]"
 
-#: builtin/gc.c:93
+#: builtin/fsmonitor--daemon.c:14
+msgid "git fsmonitor--daemon run [<options>]"
+msgstr "git fsmonitor--daemon run [<opções>]"
+
+#: builtin/fsmonitor--daemon.c:15
+msgid "git fsmonitor--daemon stop"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:16
+msgid "git fsmonitor--daemon status"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:38 builtin/fsmonitor--daemon.c:47
 #, c-format
-msgid "Failed to fstat %s: %s"
-msgstr "falha ao invocar fstat sobre %s: %s"
+msgid "value of '%s' out of range: %d"
+msgstr ""
 
-#: builtin/gc.c:129
+#: builtin/fsmonitor--daemon.c:57
 #, c-format
-msgid "failed to parse '%s' value '%s'"
+msgid "value of '%s' not bool or int: %d"
+msgstr "valor de '%s' é bool nenhum ou int: %d"
+
+#: builtin/fsmonitor--daemon.c:99
+#, c-format
+msgid "fsmonitor-daemon is watching '%s'\n"
 msgstr ""
 
-#: builtin/gc.c:487 builtin/init-db.c:57
+#: builtin/fsmonitor--daemon.c:104
 #, c-format
-msgid "cannot stat '%s'"
-msgstr "incapaz estatutar '%s'"
+msgid "fsmonitor-daemon is not watching '%s'\n"
+msgstr ""
 
-#: builtin/gc.c:496 builtin/notes.c:240 builtin/tag.c:573
+#: builtin/fsmonitor--daemon.c:170
 #, c-format
-msgid "cannot read '%s'"
-msgstr "incapaz ler '%s'"
+msgid "could not create fsmonitor cookie '%s'"
+msgstr "incapaz criar cookie fsmonitor '%s'"
 
-#: builtin/gc.c:503
+#: builtin/fsmonitor--daemon.c:753
 #, c-format
-msgid ""
-"The last gc run reported the following. Please correct the root cause\n"
-"and remove %s.\n"
-"Automatic cleanup will not be performed until the file is removed.\n"
-"\n"
-"%s"
+msgid "fsmonitor: cookie_result '%d' != SEEN"
 msgstr ""
-"A última execução do gc reportou o seguinte.\n"
-"Corrije a origem do problema e remove %s.\n"
-"A limpeza automática apenas será realizada quando o ficheiro for removido.\n"
-"\n"
-"%s"
 
-#: builtin/gc.c:551
-msgid "prune unreferenced objects"
-msgstr "podar objetos por referênciar"
+#: builtin/fsmonitor--daemon.c:1187
+#, c-format
+msgid "could not start IPC thread pool on '%s'"
+msgstr "incapaz começar piscina de fio IPC em '%s'"
 
-#: builtin/gc.c:553
+#: builtin/fsmonitor--daemon.c:1199
+msgid "could not start fsmonitor listener thread"
+msgstr "incapaz começar fio de ouvinte de fsmonitor"
+
+#: builtin/fsmonitor--daemon.c:1297
+msgid "could not initialize listener thread"
+msgstr "incapaz iniciar fio de ouvinte"
+
+#: builtin/fsmonitor--daemon.c:1328 builtin/fsmonitor--daemon.c:1383
+#, c-format
+msgid "fsmonitor--daemon is already running '%s'"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1332
+#, c-format
+msgid "running fsmonitor-daemon in '%s'\n"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1387
+#, c-format
+msgid "starting fsmonitor-daemon in '%s'\n"
+msgstr "começando fsmonitor-daemon em '%s'\n"
+
+#: builtin/fsmonitor--daemon.c:1413
+msgid "daemon failed to start"
+msgstr "iniciação de daemon falhou"
+
+#: builtin/fsmonitor--daemon.c:1416
+msgid "daemon not online yet"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1419
+msgid "daemon terminated"
+msgstr "daemon terminado"
+
+#: builtin/fsmonitor--daemon.c:1429
+msgid "detach from console"
+msgstr "desanexado de consola"
+
+#: builtin/fsmonitor--daemon.c:1432
+msgid "use <n> ipc worker threads"
+msgstr "usar <n> fios de trabalho ipc"
+
+#: builtin/fsmonitor--daemon.c:1435
+msgid "max seconds to wait for background daemon startup"
+msgstr ""
+
+#: builtin/fsmonitor--daemon.c:1449
+#, c-format
+msgid "invalid 'ipc-threads' value (%d)"
+msgstr "valor 'ipc-threads' inválido (%d)"
+
+#: builtin/fsmonitor--daemon.c:1464
+#, c-format
+msgid "Unhandled subcommand '%s'"
+msgstr "Subcomando '%s' por lidar"
+
+#: builtin/fsmonitor--daemon.c:1477
+msgid "fsmonitor--daemon not supported on this platform"
+msgstr ""
+
+#: builtin/gc.c:39
+msgid "git gc [<options>]"
+msgstr "git gc [<opções>]"
+
+#: builtin/gc.c:93
+#, c-format
+msgid "Failed to fstat %s: %s"
+msgstr "falha ao invocar fstat sobre %s: %s"
+
+#: builtin/gc.c:129
+#, c-format
+msgid "failed to parse '%s' value '%s'"
+msgstr ""
+
+#: builtin/gc.c:488 builtin/init-db.c:57
+#, c-format
+msgid "cannot stat '%s'"
+msgstr "incapaz estatutar '%s'"
+
+#: builtin/gc.c:504
+#, c-format
+msgid ""
+"The last gc run reported the following. Please correct the root cause\n"
+"and remove %s\n"
+"Automatic cleanup will not be performed until the file is removed.\n"
+"\n"
+"%s"
+msgstr ""
+"A última execução do gc reportou o seguinte. Por favor, corrige a causa\n"
+"de origem e remove %s\n"
+"Limpeza automática apenas será realizada quando o ficheiro for removido.\n"
+"\n"
+"%s"
+
+#: builtin/gc.c:552
+msgid "prune unreferenced objects"
+msgstr "podar objetos por referênciar"
+
+#: builtin/gc.c:554
 msgid "be more thorough (increased runtime)"
 msgstr "ser mais minucioso (aumenta o tempo de execução)"
 
-#: builtin/gc.c:554
+#: builtin/gc.c:555
 msgid "enable auto-gc mode"
 msgstr "ativar modo auto-gc"
 
-#: builtin/gc.c:557
+#: builtin/gc.c:558
 msgid "force running gc even if there may be another gc running"
 msgstr "forçar a execução do gc mesmo que haja outro gc a executar"
 
-#: builtin/gc.c:560
+#: builtin/gc.c:561
 msgid "repack all other packs except the largest pack"
 msgstr ""
 
-#: builtin/gc.c:576
+#: builtin/gc.c:577
 #, c-format
 msgid "failed to parse gc.logexpiry value %s"
 msgstr "falhou processar o valor %s de gc.logexpiry"
 
-#: builtin/gc.c:587
+#: builtin/gc.c:588
 #, c-format
 msgid "failed to parse prune expiry value %s"
 msgstr "falhou processar o valor de expiração de poda %s"
 
-#: builtin/gc.c:607
+#: builtin/gc.c:608
 #, c-format
 msgid "Auto packing the repository in background for optimum performance.\n"
 msgstr ""
 "Auto-empacotando repositório, em segundo plano, para desempenho otimizado.\n"
 
-#: builtin/gc.c:609
+#: builtin/gc.c:610
 #, c-format
 msgid "Auto packing the repository for optimum performance.\n"
 msgstr "Auto-empacotando repositório para desempenho otimizado.\n"
 
-#: builtin/gc.c:610
+#: builtin/gc.c:611
 #, c-format
 msgid "See \"git help gc\" for manual housekeeping.\n"
 msgstr "Vê \"git help gc\" para manual de manutenção.\n"
 
-#: builtin/gc.c:650
+#: builtin/gc.c:652
 #, c-format
 msgid ""
 "gc is already running on machine '%s' pid %<PRIuMAX> (use --force if not)"
 msgstr ""
 "gc já a executar na máquina '%s' pid %<PRIuMAX> (usa --force caso contrário)"
 
-#: builtin/gc.c:705
+#: builtin/gc.c:707
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
 msgstr ""
 "Existem demasiados objeto soltos inalcançáveis; execute 'git prune' para os "
 "remover."
 
-#: builtin/gc.c:715
+#: builtin/gc.c:717
 msgid ""
 "git maintenance run [--auto] [--[no-]quiet] [--task=<task>] [--schedule]"
 msgstr ""
 
-#: builtin/gc.c:745
+#: builtin/gc.c:747
 msgid "--no-schedule is not allowed"
 msgstr ""
 
-#: builtin/gc.c:750
+#: builtin/gc.c:752
 #, c-format
 msgid "unrecognized --schedule argument '%s'"
 msgstr "argumento --schedule desconhecido: '%s'"
 
-#: builtin/gc.c:869
+#: builtin/gc.c:870
 msgid "failed to write commit-graph"
 msgstr ""
 
-#: builtin/gc.c:905
+#: builtin/gc.c:906
 msgid "failed to prefetch remotes"
-msgstr ""
+msgstr "pré-buscar remotos falhou"
 
 #: builtin/gc.c:1022
 msgid "failed to start 'git pack-objects' process"
@@ -15599,145 +16345,185 @@ msgstr "começar processo 'git pack-objects' falhou"
 msgid "failed to finish 'git pack-objects' process"
 msgstr "terminar processo 'git pack-objects' falhou"
 
-#: builtin/gc.c:1091
+#: builtin/gc.c:1090
 msgid "failed to write multi-pack-index"
 msgstr ""
 
-#: builtin/gc.c:1109
+#: builtin/gc.c:1106
 msgid "'git multi-pack-index expire' failed"
 msgstr ""
 
-#: builtin/gc.c:1170
+#: builtin/gc.c:1165
 msgid "'git multi-pack-index repack' failed"
 msgstr ""
 
-#: builtin/gc.c:1179
+#: builtin/gc.c:1174
 msgid ""
 "skipping incremental-repack task because core.multiPackIndex is disabled"
 msgstr ""
 
-#: builtin/gc.c:1283
+#: builtin/gc.c:1278
 #, c-format
 msgid "lock file '%s' exists, skipping maintenance"
 msgstr ""
 
-#: builtin/gc.c:1313
+#: builtin/gc.c:1308
 #, c-format
 msgid "task '%s' failed"
 msgstr "tarefa '%s' falhou"
 
-#: builtin/gc.c:1395
+#: builtin/gc.c:1390
 #, c-format
 msgid "'%s' is not a valid task"
 msgstr "'%s' é uma tarefa inválida"
 
-#: builtin/gc.c:1400
+#: builtin/gc.c:1395
 #, c-format
 msgid "task '%s' cannot be selected multiple times"
 msgstr "tarefa '%s' apenas pode ser selecionada uma vez"
 
-#: builtin/gc.c:1415
+#: builtin/gc.c:1410
 msgid "run tasks based on the state of the repository"
 msgstr ""
 
-#: builtin/gc.c:1416
+#: builtin/gc.c:1411
 msgid "frequency"
 msgstr ""
 
-#: builtin/gc.c:1417
+#: builtin/gc.c:1412
 msgid "run tasks based on frequency"
 msgstr ""
 
-#: builtin/gc.c:1420
+#: builtin/gc.c:1415
 msgid "do not report progress or other information over stderr"
 msgstr ""
 
-#: builtin/gc.c:1421
+#: builtin/gc.c:1416
 msgid "task"
 msgstr ""
 
-#: builtin/gc.c:1422
+#: builtin/gc.c:1417
 msgid "run a specific task"
 msgstr "corre uma tarefa específica"
 
-#: builtin/gc.c:1439
+#: builtin/gc.c:1434
 msgid "use at most one of --auto and --schedule=<frequency>"
 msgstr ""
 
-#: builtin/gc.c:1482
+#: builtin/gc.c:1477
 msgid "failed to run 'git config'"
 msgstr "falhou executar 'git config'"
 
-#: builtin/gc.c:1547
+#: builtin/gc.c:1629
 #, c-format
 msgid "failed to expand path '%s'"
 msgstr "falhou expandir caminho '%s'"
 
-#: builtin/gc.c:1576
+#: builtin/gc.c:1656 builtin/gc.c:1694
 msgid "failed to start launchctl"
 msgstr "iniciar launchctl falhou"
 
-#: builtin/gc.c:1613
+#: builtin/gc.c:1769 builtin/gc.c:2237
 #, c-format
 msgid "failed to create directories for '%s'"
 msgstr "falhou criar pastas para '%s'"
 
-#: builtin/gc.c:1674
+#: builtin/gc.c:1796
 #, c-format
 msgid "failed to bootstrap service %s"
 msgstr "bootstrap serviços %s falhou"
 
-#: builtin/gc.c:1745
+#: builtin/gc.c:1889
 msgid "failed to create temp xml file"
 msgstr ""
 
-#: builtin/gc.c:1835
+#: builtin/gc.c:1979
 msgid "failed to start schtasks"
 msgstr ""
 
-#: builtin/gc.c:1879
+#: builtin/gc.c:2063
 msgid "failed to run 'crontab -l'; your system might not support 'cron'"
-msgstr ""
+msgstr "falhou a executar 'crontab -l': teu sistema pode insustentar 'cron'"
 
-#: builtin/gc.c:1896
+#: builtin/gc.c:2080
 msgid "failed to run 'crontab'; your system might not support 'cron'"
-msgstr ""
+msgstr "falhou a executar 'crontab': teu sistema pode insustentar 'cron'"
 
-#: builtin/gc.c:1900
+#: builtin/gc.c:2084
 msgid "failed to open stdin of 'crontab'"
-msgstr ""
+msgstr "falhou abrir stdin de 'crontab'"
 
-#: builtin/gc.c:1942
+#: builtin/gc.c:2126
 msgid "'crontab' died"
-msgstr ""
+msgstr "'crontab' terminou inesperadamente"
+
+#: builtin/gc.c:2191
+msgid "failed to start systemctl"
+msgstr "falhou início de systemctl"
+
+#: builtin/gc.c:2201
+msgid "failed to run systemctl"
+msgstr "falhou executar systemctl"
+
+#: builtin/gc.c:2210 builtin/gc.c:2215 builtin/worktree.c:63
+#: builtin/worktree.c:1024
+#, c-format
+msgid "failed to delete '%s'"
+msgstr "falhou apagar '%s'"
 
-#: builtin/gc.c:1976
+#: builtin/gc.c:2395
+#, c-format
+msgid "unrecognized --scheduler argument '%s'"
+msgstr "argumento --scheduler desconhecido '%s'"
+
+#: builtin/gc.c:2420
+msgid "neither systemd timers nor crontab are available"
+msgstr "sem temporizadores systemd ou crontab disponíveis"
+
+#: builtin/gc.c:2435
+#, c-format
+msgid "%s scheduler is not available"
+msgstr "%s agendador está indisponível"
+
+#: builtin/gc.c:2449
 msgid "another process is scheduling background maintenance"
 msgstr ""
 
-#: builtin/gc.c:2000
+#: builtin/gc.c:2471
+msgid "git maintenance start [--scheduler=<scheduler>]"
+msgstr "git maintenance start [--scheduler=<agendador>]"
+
+#: builtin/gc.c:2480
+msgid "scheduler"
+msgstr "agendador"
+
+#: builtin/gc.c:2481
+msgid "scheduler to trigger git maintenance run"
+msgstr "agendador a ativar execução de manutenção git"
+
+#: builtin/gc.c:2495
 msgid "failed to add repo to global config"
 msgstr ""
 
-#: builtin/gc.c:2010
+#: builtin/gc.c:2504
 msgid "git maintenance <subcommand> [<options>]"
 msgstr "git maintenance <subcomando> [<opções>]"
 
-#: builtin/gc.c:2029
+#: builtin/gc.c:2523
 #, c-format
 msgid "invalid subcommand: %s"
 msgstr "subcomando inválido: %s"
 
-#: builtin/grep.c:30
+#: builtin/grep.c:32
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<opções>] [-e] <padrão> [<rev>...] [[--] <caminho>...]"
 
-#: builtin/grep.c:223
+#: builtin/grep.c:241
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep: falha ao criar thread: %s"
 
-#: builtin/grep.c:277
+#: builtin/grep.c:295
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "o número de threads especificado em %2$s é inválido (%1$d)"
@@ -15746,267 +16532,259 @@ msgstr "o número de threads especificado em %2$s é inválido (%1$d)"
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:285 builtin/index-pack.c:1588 builtin/index-pack.c:1791
-#: builtin/pack-objects.c:3129
+#: builtin/grep.c:303 builtin/index-pack.c:1587 builtin/index-pack.c:1791
+#: builtin/pack-objects.c:3150
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "fios insustentado, ignorando %s"
 
-#: builtin/grep.c:473 builtin/grep.c:603 builtin/grep.c:643
+#: builtin/grep.c:490 builtin/grep.c:619 builtin/grep.c:659
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "incapaz ler árvore (%s)"
 
-#: builtin/grep.c:658
+#: builtin/grep.c:674
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "incapaz efetuar grep a objetos do tipo %s"
 
-#: builtin/grep.c:738
+#: builtin/grep.c:754
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr ""
 
-#: builtin/grep.c:837
+#: builtin/grep.c:852
 msgid "search in index instead of in the work tree"
-msgstr "procurar no índice em vez de procurar na árvore de trabalho"
+msgstr "procurar no cenário em vez de procurar na árvore-trabalho"
 
-#: builtin/grep.c:839
+#: builtin/grep.c:854
 msgid "find in contents not managed by git"
 msgstr "procurar em conteúdos fora da gestão de git"
 
-#: builtin/grep.c:841
+#: builtin/grep.c:856
 msgid "search in both tracked and untracked files"
-msgstr "procurar em ficheiros monitorizados e por monitorizar"
+msgstr "procurar em ambos os ficheiros monitorizados e desmonitorizados"
 
-#: builtin/grep.c:843
+#: builtin/grep.c:858
 msgid "ignore files specified via '.gitignore'"
 msgstr "ignorar ficheiros especificados via '.gitignore'"
 
-#: builtin/grep.c:845
+#: builtin/grep.c:860
 msgid "recursively search in each submodule"
 msgstr "procurar recursivamente em cada submódulo"
 
-#: builtin/grep.c:848
+#: builtin/grep.c:863
 msgid "show non-matching lines"
 msgstr "mostrar linhas por corresponder"
 
-#: builtin/grep.c:850
+#: builtin/grep.c:865
 msgid "case insensitive matching"
 msgstr "correspondência insensível a maiúsculas e minúsculas"
 
-#: builtin/grep.c:852
+#: builtin/grep.c:867
 msgid "match patterns only at word boundaries"
 msgstr "corresponder padrões apenas a palavras"
 
-#: builtin/grep.c:854
+#: builtin/grep.c:869
 msgid "process binary files as text"
 msgstr "processar ficheiros binários como texto"
 
-#: builtin/grep.c:856
+#: builtin/grep.c:871
 msgid "don't match patterns in binary files"
 msgstr "ignorar ficheiros binários"
 
-#: builtin/grep.c:859
+#: builtin/grep.c:874
 msgid "process binary files with textconv filters"
 msgstr "processar ficheiros binários com filtros textconv"
 
-#: builtin/grep.c:861
+#: builtin/grep.c:876
 msgid "search in subdirectories (default)"
-msgstr ""
+msgstr "procurar em subpastas (predefinição)"
 
-#: builtin/grep.c:863
+#: builtin/grep.c:878
 msgid "descend at most <depth> levels"
 msgstr "descer no máximo até <profundidade>"
 
-#: builtin/grep.c:867
+#: builtin/grep.c:882
 msgid "use extended POSIX regular expressions"
 msgstr "usar expressões comum estendidas de POSIX"
 
-#: builtin/grep.c:870
+#: builtin/grep.c:885
 msgid "use basic POSIX regular expressions (default)"
 msgstr "usar expressões regulares básicas do POSIX (predefinição)"
 
-#: builtin/grep.c:873
+#: builtin/grep.c:888
 msgid "interpret patterns as fixed strings"
 msgstr "interpretar padrões como cadeias de caracteres fixas"
 
-#: builtin/grep.c:876
+#: builtin/grep.c:891
 msgid "use Perl-compatible regular expressions"
 msgstr "usar expressões regulares compatíveis com Perl"
 
-#: builtin/grep.c:879
+#: builtin/grep.c:894
 msgid "show line numbers"
 msgstr "mostrar números de linha"
 
-#: builtin/grep.c:880
+#: builtin/grep.c:895
 msgid "show column number of first match"
 msgstr "mostrar número de coluna da primeira correspondência"
 
-#: builtin/grep.c:881
+#: builtin/grep.c:896
 msgid "don't show filenames"
 msgstr "esconder nomes de ficheiro"
 
-#: builtin/grep.c:882
+#: builtin/grep.c:897
 msgid "show filenames"
 msgstr "mostrar nomes de ficheiro"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:899
 msgid "show filenames relative to top directory"
-msgstr "mostrar nomes de ficheiro relativamente ao diretório superior"
+msgstr "mostrar nomes de ficheiro relativamente à pasta superior"
 
-#: builtin/grep.c:886
+#: builtin/grep.c:901
 msgid "show only filenames instead of matching lines"
 msgstr "mostrar apenas nomes de ficheiro em vez de linhas correspondidas"
 
-#: builtin/grep.c:888
+#: builtin/grep.c:903
 msgid "synonym for --files-with-matches"
 msgstr "sinónimo de --files-with-matches"
 
-#: builtin/grep.c:891
+#: builtin/grep.c:906
 msgid "show only the names of files without match"
 msgstr "mostrar apenas nomes de ficheiro sem correspondência"
 
-#: builtin/grep.c:893
+#: builtin/grep.c:908
 msgid "print NUL after filenames"
 msgstr "imprimir NUL depois dos nomes de ficheiro"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:911
 msgid "show only matching parts of a line"
 msgstr "mostrar apenas partes da linha correspondentes"
 
-#: builtin/grep.c:898
+#: builtin/grep.c:913
 msgid "show the number of matches instead of matching lines"
 msgstr "mostrar o número de correspondências em vez das linha correspondidas"
 
-#: builtin/grep.c:899
+#: builtin/grep.c:914
 msgid "highlight matches"
 msgstr "realçar correspondências"
 
-#: builtin/grep.c:901
+#: builtin/grep.c:916
 msgid "print empty line between matches from different files"
 msgstr ""
 "imprimir uma linha em branco entre correspondências de diferentes ficheiros"
 
-#: builtin/grep.c:903
+#: builtin/grep.c:918
 msgid "show filename only once above matches from same file"
 msgstr ""
 "mostrar só uma vez o nome do ficheiro acima das correspondências dentro do "
 "mesmo ficheiro"
 
-#: builtin/grep.c:906
+#: builtin/grep.c:921
 msgid "show <n> context lines before and after matches"
 msgstr "mostrar <n> linhas de contexto antes e depois das correspondências"
 
-#: builtin/grep.c:909
+#: builtin/grep.c:924
 msgid "show <n> context lines before matches"
 msgstr "mostrar <n> linhas de contexto antes das correspondências"
 
-#: builtin/grep.c:911
+#: builtin/grep.c:926
 msgid "show <n> context lines after matches"
 msgstr "mostrar <n> linhas de contexto depois das correspondências"
 
-#: builtin/grep.c:913
+#: builtin/grep.c:928
 msgid "use <n> worker threads"
-msgstr "usar <n> threads de trabalho"
+msgstr "usar <n> fios de trabalho"
 
-#: builtin/grep.c:914
+#: builtin/grep.c:929
 msgid "shortcut for -C NUM"
 msgstr "atalho para -C NUM"
 
-#: builtin/grep.c:917
+#: builtin/grep.c:932
 msgid "show a line with the function name before matches"
 msgstr "mostrar uma linha com o nome da função antes das correspondências"
 
-#: builtin/grep.c:919
+#: builtin/grep.c:934
 msgid "show the surrounding function"
 msgstr "mostrar a função circundante"
 
-#: builtin/grep.c:922
+#: builtin/grep.c:937
 msgid "read patterns from file"
 msgstr "ler padrões de ficheiro"
 
-#: builtin/grep.c:924
+#: builtin/grep.c:939
 msgid "match <pattern>"
 msgstr "procurar <padrão>"
 
-#: builtin/grep.c:926
+#: builtin/grep.c:941
 msgid "combine patterns specified with -e"
 msgstr "combinar padrões especificados com -e"
 
-#: builtin/grep.c:938
+#: builtin/grep.c:953
 msgid "indicate hit with exit status without output"
 msgstr "indicar correspondência, sem output, com status de saída"
 
-#: builtin/grep.c:940
+#: builtin/grep.c:955
 msgid "show only matches from files that match all patterns"
 msgstr ""
 "mostrar apenas correspondências de ficheiro que tenham todos os padrões"
 
-#: builtin/grep.c:943
+#: builtin/grep.c:958
 msgid "pager"
 msgstr "paginador"
 
-#: builtin/grep.c:943
+#: builtin/grep.c:958
 msgid "show matching files in the pager"
 msgstr "mostrar ficheiros correspondentes no paginador"
 
-#: builtin/grep.c:947
+#: builtin/grep.c:962
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "permitir invocar grep(1) (ignorado nesta compilação)"
 
-#: builtin/grep.c:1013
+#: builtin/grep.c:1028
 msgid "no pattern given"
 msgstr "fornecido pattern nenhum"
 
-#: builtin/grep.c:1049
+#: builtin/grep.c:1064
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr "--no-index ou --untracked incapazes serem usados em revs"
 
-#: builtin/grep.c:1057
+#: builtin/grep.c:1072
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "incapaz resolver revisão: %s"
 
-#: builtin/grep.c:1087
+#: builtin/grep.c:1102
 msgid "--untracked not supported with --recurse-submodules"
 msgstr "--untracked insustentada com --recurse-submodules"
 
-#: builtin/grep.c:1091
+#: builtin/grep.c:1106
 msgid "invalid option combination, ignoring --threads"
 msgstr ""
 
-#: builtin/grep.c:1094 builtin/pack-objects.c:4090
+#: builtin/grep.c:1109 builtin/pack-objects.c:4084
 msgid "no threads support, ignoring --threads"
 msgstr "fios insustentado, ignorando --threads"
 
-#: builtin/grep.c:1097 builtin/index-pack.c:1585 builtin/pack-objects.c:3126
+#: builtin/grep.c:1112 builtin/index-pack.c:1584 builtin/pack-objects.c:3147
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "número de threads especificado inválido (%d)"
 
-#: builtin/grep.c:1131
+#: builtin/grep.c:1146
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager só funciona na árvore-trabalho"
 
-#: builtin/grep.c:1157
-msgid "--cached or --untracked cannot be used with --no-index"
-msgstr "--cached ou --untracked proibidos serem usados com --no-index"
-
-#: builtin/grep.c:1160
-msgid "--untracked cannot be used with --cached"
-msgstr "--untracked proibido ser usado com --cached"
-
-#: builtin/grep.c:1166
+#: builtin/grep.c:1179
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr ""
 "--[no-]exclude-standard proibidos serem usados para conteúdos monitorizados"
 
-#: builtin/grep.c:1174
+#: builtin/grep.c:1187
 msgid "both --cached and trees are given"
-msgstr "--cached e árvores foram ambos fornecidos"
+msgstr "são dados ambos --cached e árvores"
 
-#: builtin/hash-object.c:85
+#: builtin/hash-object.c:83
 msgid ""
 "git hash-object [-t <type>] [-w] [--path=<file> | --no-filters] [--stdin] "
 "[--] <file>..."
@@ -16014,97 +16792,101 @@ msgstr ""
 "git hash-object [-t <tipo>] [-w] [--path=<ficheiro> | --no-filters] [--"
 "stdin] [--] <ficheiro>..."
 
-#: builtin/hash-object.c:86
-msgid "git hash-object  --stdin-paths"
-msgstr "git hash-object  --stdin-paths"
-
-#: builtin/hash-object.c:98
+#: builtin/hash-object.c:97
 msgid "object type"
 msgstr "tipo de objeto"
 
-#: builtin/hash-object.c:99
+#: builtin/hash-object.c:98
 msgid "write the object into the object database"
 msgstr ""
 
-#: builtin/hash-object.c:101
+#: builtin/hash-object.c:100
 msgid "read the object from stdin"
 msgstr "ler o objeto da entrada padrão"
 
-#: builtin/hash-object.c:103
+#: builtin/hash-object.c:102
 msgid "store file as is without filters"
 msgstr "guardar o ficheiro tal como está, sem filtros"
 
-#: builtin/hash-object.c:104
+#: builtin/hash-object.c:103
 msgid ""
 "just hash any random garbage to create corrupt objects for debugging Git"
 msgstr ""
-"obter hash de lixo aleatório para criar objetos corrompidos para depurar o "
-"Git"
+"apenas faz hash de qualquer lixo aleatório para criar objetos corrompidos "
+"para depurar o Git"
 
-#: builtin/hash-object.c:105
+#: builtin/hash-object.c:104
 msgid "process file as it were from this path"
 msgstr "processar o ficheiro como se este fosse do caminho indicado"
 
-#: builtin/help.c:47
+#: builtin/help.c:57
 msgid "print all available commands"
 msgstr "imprimir todos os comandos disponíveis"
 
-#: builtin/help.c:48
-msgid "exclude guides"
-msgstr "excluir guias"
+#: builtin/help.c:60
+msgid "show external commands in --all"
+msgstr "mostrar comandos externos em --all"
 
-#: builtin/help.c:49
-msgid "print list of useful guides"
-msgstr "imprimir lista de guias úteis"
+#: builtin/help.c:61
+msgid "show aliases in --all"
+msgstr "mostrar aliases em --all"
 
-#: builtin/help.c:50
-msgid "print all configuration variable names"
-msgstr "imprimir todas nomes variáveis de configuração"
+#: builtin/help.c:62
+msgid "exclude guides"
+msgstr "excluir guias"
 
-#: builtin/help.c:52
+#: builtin/help.c:63
 msgid "show man page"
 msgstr "mostrar página man"
 
-#: builtin/help.c:53
+#: builtin/help.c:64
 msgid "show manual in web browser"
 msgstr "mostrar manual no navegador web"
 
-#: builtin/help.c:55
+#: builtin/help.c:66
 msgid "show info page"
 msgstr "mostrar página info"
 
-#: builtin/help.c:57
+#: builtin/help.c:68
 msgid "print command description"
 msgstr "imprimir descrição de comando"
 
-#: builtin/help.c:62
-msgid "git help [--all] [--guides] [--man | --web | --info] [<command>]"
-msgstr "git help [--all] [--guides] [--man | --web | --info] [<comando>]"
+#: builtin/help.c:70
+msgid "print list of useful guides"
+msgstr "imprimir lista de guias úteis"
+
+#: builtin/help.c:72
+msgid "print all configuration variable names"
+msgstr "imprimir todas nomes variáveis de configuração"
+
+#: builtin/help.c:84
+msgid "git help [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
+msgstr "git help [[-i|--info] [-m|--man] [-w|--web]] [<comando>]"
 
-#: builtin/help.c:163
+#: builtin/help.c:201
 #, c-format
 msgid "unrecognized help format '%s'"
 msgstr "formato de ajuda '%s' desconhecido"
 
-#: builtin/help.c:190
+#: builtin/help.c:227
 msgid "Failed to start emacsclient."
 msgstr "Iniciar emacsclient falhou."
 
-#: builtin/help.c:203
+#: builtin/help.c:240
 msgid "Failed to parse emacsclient version."
 msgstr "Falha ao analisar a versão do emacsclient."
 
-#: builtin/help.c:211
+#: builtin/help.c:248
 #, c-format
 msgid "emacsclient version '%d' too old (< 22)."
 msgstr "a versão do emacsclient '%d' é demasiado antiga (< 22)."
 
-#: builtin/help.c:229 builtin/help.c:251 builtin/help.c:261 builtin/help.c:269
+#: builtin/help.c:266 builtin/help.c:288 builtin/help.c:298 builtin/help.c:306
 #, c-format
 msgid "failed to exec '%s'"
 msgstr "falhou exec a '%s'"
 
-#: builtin/help.c:307
+#: builtin/help.c:344
 #, c-format
 msgid ""
 "'%s': path for unsupported man viewer.\n"
@@ -16113,7 +16895,7 @@ msgstr ""
 "'%s': path para visualizador man insustentado.\n"
 "Por favor, considera usar 'man.<ferramenta>.cmd' invés."
 
-#: builtin/help.c:319
+#: builtin/help.c:356
 #, c-format
 msgid ""
 "'%s': cmd for supported man viewer.\n"
@@ -16122,331 +16904,329 @@ msgstr ""
 "'%s': comando para visualizador de man.\n"
 "Considera usar 'man.<ferramenta>.path' invés."
 
-#: builtin/help.c:436
+#: builtin/help.c:471
 #, c-format
 msgid "'%s': unknown man viewer."
 msgstr "'%s': visualizador de manual desconhecido."
 
-#: builtin/help.c:452
+#: builtin/help.c:487
 msgid "no man viewer handled the request"
 msgstr "atendeu ao pedido visualizador de man nenhum"
 
-#: builtin/help.c:459
+#: builtin/help.c:494
 msgid "no info viewer handled the request"
 msgstr "atendeu ao pedido visualizador de info nenhum"
 
-#: builtin/help.c:517 builtin/help.c:528 git.c:348
+#: builtin/help.c:555 builtin/help.c:566 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "'git %s' é um alias de '%s'"
 
-#: builtin/help.c:531 git.c:380
+#: builtin/help.c:569 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr ""
 
-#: builtin/help.c:561 builtin/help.c:591
+#: builtin/help.c:611
+#, c-format
+msgid "the '%s' option doesn't take any non-option arguments"
+msgstr "opção '%s' apenas leva argumentos de opção"
+
+#: builtin/help.c:631
+msgid ""
+"the '--no-[external-commands|aliases]' options can only be used with '--all'"
+msgstr ""
+
+#: builtin/help.c:643 builtin/help.c:671
 #, c-format
 msgid "usage: %s%s"
-msgstr "utilização: %s%s"
+msgstr "uso: %s%s"
 
-#: builtin/help.c:575
+#: builtin/help.c:666
 msgid "'git help config' for more information"
 msgstr ""
 
-#: builtin/index-pack.c:222
+#: builtin/hook.c:10
+msgid "git hook run [--ignore-missing] <hook-name> [-- <hook-args>]"
+msgstr ""
+
+#: builtin/hook.c:30
+msgid "silently ignore missing requested <hook-name>"
+msgstr ""
+
+#: builtin/index-pack.c:221
 #, c-format
 msgid "object type mismatch at %s"
 msgstr "incompatibilidade de tipo de objeto em %s"
 
-#: builtin/index-pack.c:242
+#: builtin/index-pack.c:241
 #, c-format
 msgid "did not receive expected object %s"
 msgstr "objeto esperado %s ficou por ser recebido"
 
-#: builtin/index-pack.c:245
+#: builtin/index-pack.c:244
 #, c-format
 msgid "object %s: expected type %s, found %s"
 msgstr "objeto %s: tipo esperado %s, obtido %s"
 
-#: builtin/index-pack.c:295
+#: builtin/index-pack.c:294
 #, c-format
 msgid "cannot fill %d byte"
 msgid_plural "cannot fill %d bytes"
 msgstr[0] "incapaz preencher %d byte"
 msgstr[1] "incapaz preencher %d bytes"
 
-#: builtin/index-pack.c:305
+#: builtin/index-pack.c:304
 msgid "early EOF"
 msgstr "EOF prematuro"
 
-#: builtin/index-pack.c:306
+#: builtin/index-pack.c:305
 msgid "read error on input"
 msgstr "erro de leitura da entrada"
 
-#: builtin/index-pack.c:318
+#: builtin/index-pack.c:317
 msgid "used more bytes than were available"
 msgstr "foram usados mais bytes dos que estavam disponíveis"
 
-#: builtin/index-pack.c:325 builtin/pack-objects.c:756
+#: builtin/index-pack.c:324 builtin/pack-objects.c:754
 msgid "pack too large for current definition of off_t"
 msgstr "pacote demasiado grande para a definição atual de off_t"
 
-#: builtin/index-pack.c:328 builtin/unpack-objects.c:95
-msgid "pack exceeds maximum allowed size"
-msgstr "o pacote excede o tamanho máximo permitido"
-
-#: builtin/index-pack.c:343
+#: builtin/index-pack.c:329
 #, c-format
-msgid "unable to create '%s'"
-msgstr "incapaz criar '%s'"
-
-#: builtin/index-pack.c:349
-#, c-format
-msgid "cannot open packfile '%s'"
-msgstr "incapaz abrir ficheiro de pacote '%s'"
+msgid "pack exceeds maximum allowed size (%s)"
+msgstr "o pacote excede o tamanho máximo permitido (%s)"
 
-#: builtin/index-pack.c:363
+#: builtin/index-pack.c:362
 msgid "pack signature mismatch"
 msgstr "assinatura de pacote faz correspondência nenhuma"
 
-#: builtin/index-pack.c:365
+#: builtin/index-pack.c:364
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "versão de pacote %<PRIu32> insustentada"
 
-#: builtin/index-pack.c:381
+#: builtin/index-pack.c:380
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "pacote tem objeto inválido em offset %<PRIuMAX>: %s"
 
-#: builtin/index-pack.c:487
+#: builtin/index-pack.c:485
 #, c-format
 msgid "inflate returned %d"
 msgstr "a descompactação retornou %d"
 
-#: builtin/index-pack.c:536
+#: builtin/index-pack.c:534
 msgid "offset value overflow for delta base object"
 msgstr "delta de objeto base com capacidade excedida no valor de offset"
 
-#: builtin/index-pack.c:544
+#: builtin/index-pack.c:542
 msgid "delta base offset is out of bound"
 msgstr "offset de base delta está fora de limite"
 
-#: builtin/index-pack.c:552
+#: builtin/index-pack.c:550
 #, c-format
 msgid "unknown object type %d"
 msgstr "tipo de objeto %d desconhecido"
 
-#: builtin/index-pack.c:583
+#: builtin/index-pack.c:581
 msgid "cannot pread pack file"
 msgstr "incapaz invocar pread sobre ficheiro de pacote"
 
-#: builtin/index-pack.c:585
+#: builtin/index-pack.c:583
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
 msgstr[0] "fim prematuro de ficheiro de pacote, falta %<PRIuMAX> byte"
 msgstr[1] "fim prematuro de ficheiro de pacote, faltam %<PRIuMAX> bytes"
 
-#: builtin/index-pack.c:611
+#: builtin/index-pack.c:609
 msgid "serious inflate inconsistency"
 msgstr "inconsistência de descompactação grave"
 
-#: builtin/index-pack.c:756 builtin/index-pack.c:762 builtin/index-pack.c:786
-#: builtin/index-pack.c:825 builtin/index-pack.c:834
+#: builtin/index-pack.c:754 builtin/index-pack.c:760 builtin/index-pack.c:784
+#: builtin/index-pack.c:823 builtin/index-pack.c:832
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "COLISÃO DE SHA1 COM %s ENCONTRADA!"
 
-#: builtin/index-pack.c:759 builtin/pack-objects.c:292
-#: builtin/pack-objects.c:352 builtin/pack-objects.c:458
+#: builtin/index-pack.c:757 builtin/pack-objects.c:290
+#: builtin/pack-objects.c:350 builtin/pack-objects.c:456
 #, c-format
 msgid "unable to read %s"
 msgstr "incapaz ler %s"
 
-#: builtin/index-pack.c:823
+#: builtin/index-pack.c:821
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "incapaz ler informação existente de objeto %s"
 
-#: builtin/index-pack.c:831
+#: builtin/index-pack.c:829
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "incapaz ler objeto existente %s"
 
-#: builtin/index-pack.c:845
+#: builtin/index-pack.c:843
 #, c-format
 msgid "invalid blob object %s"
-msgstr "objeto blob inválido %s"
+msgstr "objeto-blob inválido %s"
 
-#: builtin/index-pack.c:848 builtin/index-pack.c:867
+#: builtin/index-pack.c:846 builtin/index-pack.c:865
 msgid "fsck error in packed object"
 msgstr ""
 
-#: builtin/index-pack.c:869
+#: builtin/index-pack.c:867
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr "Nem todos os objetos filhos de %s são alcançáveis"
 
-#: builtin/index-pack.c:930 builtin/index-pack.c:977
+#: builtin/index-pack.c:928 builtin/index-pack.c:975
 msgid "failed to apply delta"
 msgstr "falha ao aplicar delta"
 
-#: builtin/index-pack.c:1160
+#: builtin/index-pack.c:1161
 msgid "Receiving objects"
 msgstr "A receber objetos"
 
-#: builtin/index-pack.c:1160
+#: builtin/index-pack.c:1161
 msgid "Indexing objects"
-msgstr "A indexar objetos"
+msgstr "Encenando objetos"
 
-#: builtin/index-pack.c:1194
+#: builtin/index-pack.c:1195
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "pacote roto (SHA1 sem correspondência)"
 
-#: builtin/index-pack.c:1199
+#: builtin/index-pack.c:1200
 msgid "cannot fstat packfile"
 msgstr "incapaz fstat ficheiro de pacote"
 
-#: builtin/index-pack.c:1202
+#: builtin/index-pack.c:1203
 msgid "pack has junk at the end"
 msgstr "pacote com lixo no final"
 
-#: builtin/index-pack.c:1214
+#: builtin/index-pack.c:1215
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr "extrema confusão em parse_pack_objects()"
 
-#: builtin/index-pack.c:1237
+#: builtin/index-pack.c:1238
 msgid "Resolving deltas"
 msgstr "A resolver deltas"
 
-#: builtin/index-pack.c:1248 builtin/pack-objects.c:2892
+#: builtin/index-pack.c:1249 builtin/pack-objects.c:2913
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "incapaz criar fio: %s"
 
-#: builtin/index-pack.c:1281
+#: builtin/index-pack.c:1282
 msgid "confusion beyond insanity"
 msgstr "extrema confusão"
 
-#: builtin/index-pack.c:1287
+#: builtin/index-pack.c:1288
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
 msgstr[0] "concluído com %d objeto local"
 msgstr[1] "concluído com %d objetos locais"
 
-#: builtin/index-pack.c:1299
+#: builtin/index-pack.c:1300
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
-msgstr "Soma de verificação inesperada no final de %s (corrupção no disco?)"
+msgstr "Checksum de cauda inesperado %s (disco corrompido?)"
 
-#: builtin/index-pack.c:1303
+#: builtin/index-pack.c:1304
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] "pacote tem %d delta por resolver"
 msgstr[1] "pacote tem %d deltas por resolver"
 
-#: builtin/index-pack.c:1327
+#: builtin/index-pack.c:1328
 #, c-format
 msgid "unable to deflate appended object (%d)"
-msgstr "incapaz descompactar objeto acrescentado (%d)"
+msgstr "incapaz esvaziar objeto acrescentado (%d)"
 
 #: builtin/index-pack.c:1423
 #, c-format
 msgid "local object %s is corrupt"
-msgstr ""
+msgstr "objeto local %s está roto"
 
-#: builtin/index-pack.c:1444
+#: builtin/index-pack.c:1445
 #, c-format
 msgid "packfile name '%s' does not end with '.%s'"
 msgstr "fim de nome de ficheiro-pacote '%s' é diferente de '.%s'"
 
-#: builtin/index-pack.c:1468
+#: builtin/index-pack.c:1469
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "incapaz escrever ficheiro %s '%s'"
 
-#: builtin/index-pack.c:1476
+#: builtin/index-pack.c:1477
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr "incapaz fechar ficheiro %s gravado '%s'"
 
-#: builtin/index-pack.c:1502
+#: builtin/index-pack.c:1494
+#, c-format
+msgid "unable to rename temporary '*.%s' file to '%s'"
+msgstr "incapaz renomear ficheiro '*.%s' temporário para '%s'"
+
+#: builtin/index-pack.c:1519
 msgid "error while closing pack file"
 msgstr ""
 
-#: builtin/index-pack.c:1516
-msgid "cannot store pack file"
-msgstr "incapaz guardar ficheiro de pacote"
-
-#: builtin/index-pack.c:1524
-msgid "cannot store index file"
-msgstr "incapaz guardar ficheiro de cenário"
-
-#: builtin/index-pack.c:1579 builtin/pack-objects.c:3137
+#: builtin/index-pack.c:1578 builtin/pack-objects.c:3158
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "pack.indexversion=%<PRIu32> incorreto"
 
-#: builtin/index-pack.c:1649
+#: builtin/index-pack.c:1648
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "Incapaz abrir ficheiro pack existente '%s'"
 
-#: builtin/index-pack.c:1651
+#: builtin/index-pack.c:1650
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "Incapaz abrir ficheiro idx existente para '%s'"
 
-#: builtin/index-pack.c:1699
+#: builtin/index-pack.c:1698
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] "não-delta: %d objeto"
 msgstr[1] "não-delta: %d objetos"
 
-#: builtin/index-pack.c:1706
+#: builtin/index-pack.c:1705
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
-msgstr[0] "comprimento de cadeia = %d: %lu objeto"
-msgstr[1] "comprimento de cadeia = %d: %lu objetos"
+msgstr[0] "comprimento de série = %d: %lu objeto"
+msgstr[1] "comprimento de série = %d: %lu objetos"
 
 #: builtin/index-pack.c:1748
 msgid "Cannot come back to cwd"
 msgstr "Incapaz voltar a cwd"
 
 #: builtin/index-pack.c:1802 builtin/index-pack.c:1805
-#: builtin/index-pack.c:1821 builtin/index-pack.c:1825
+#: builtin/index-pack.c:1825 builtin/index-pack.c:1829
 #, c-format
 msgid "bad %s"
 msgstr "%s incorreto"
 
-#: builtin/index-pack.c:1831 builtin/init-db.c:379 builtin/init-db.c:614
+#: builtin/index-pack.c:1835 builtin/init-db.c:379 builtin/init-db.c:614
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr ""
 
-#: builtin/index-pack.c:1850
-msgid "--fix-thin cannot be used without --stdin"
-msgstr "--fix-thin exige ser usado com --stdin"
-
-#: builtin/index-pack.c:1852
+#: builtin/index-pack.c:1856
 msgid "--stdin requires a git repository"
 msgstr "--stdin exige um repositório git"
 
-#: builtin/index-pack.c:1854
-msgid "--object-format cannot be used with --stdin"
-msgstr "--object-format incapaz ser usado com --stdin"
-
-#: builtin/index-pack.c:1869
+#: builtin/index-pack.c:1873
 msgid "--verify with no packfile name given"
 msgstr "--verify sem nome do ficheiro de pacote indicado"
 
-#: builtin/index-pack.c:1935 builtin/unpack-objects.c:584
+#: builtin/index-pack.c:1939 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "erro fsck em objetos pacote"
 
@@ -16517,7 +17297,7 @@ msgstr "%s já existe"
 #: builtin/init-db.c:432
 #, c-format
 msgid "re-init: ignored --initial-branch=%s"
-msgstr ""
+msgstr "reiniciar: ignorei --initial-branch=%s"
 
 #: builtin/init-db.c:463
 #, c-format
@@ -16544,8 +17324,8 @@ msgid ""
 "git init [-q | --quiet] [--bare] [--template=<template-directory>] [--"
 "shared[=<permissions>]] [<directory>]"
 msgstr ""
-"git init [-q | --quiet] [--bare] [--template=<diretório-modelo>] [--"
-"shared[=<permissões>]] [<diretório>]"
+"git init [-q | --quiet] [--bare] [--template=<pasta-modelo>] [--"
+"shared[=<permissões>]] [<pasta>]"
 
 #: builtin/init-db.c:544
 msgid "permissions"
@@ -16566,11 +17346,7 @@ msgstr ""
 
 #: builtin/init-db.c:553 builtin/show-index.c:22 builtin/verify-pack.c:75
 msgid "specify the hash algorithm to use"
-msgstr ""
-
-#: builtin/init-db.c:560
-msgid "--separate-git-dir and --bare are mutually exclusive"
-msgstr ""
+msgstr "especifica o algoritmo hash a ser usado"
 
 #: builtin/init-db.c:591 builtin/init-db.c:596
 #, c-format
@@ -16588,17 +17364,17 @@ msgid ""
 "%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-"
 "dir=<directory>)"
 msgstr ""
-"%s (ou --work-tree=<diretório>) só é permitido se especificar %s (ou --git-"
-"dir=<diretório>)"
+"%s (ou --work-tree=<pasta>) só é permitido se especificar %s (ou --git-"
+"dir=<pasta>)"
 
 #: builtin/init-db.c:679
 #, c-format
 msgid "Cannot access work tree '%s'"
-msgstr "Incapaz aceder work tree '%s'"
+msgstr "Incapaz aceder árvore-trabalho '%s'"
 
 #: builtin/init-db.c:684
 msgid "--separate-git-dir incompatible with bare repository"
-msgstr "--separate-git-dir incompatível com repositório nú"
+msgstr "--separate-git-dir incompatível com repositório nu"
 
 #: builtin/interpret-trailers.c:16
 msgid ""
@@ -16660,557 +17436,557 @@ msgstr "--trailer com --only-input faz sentido nenhum"
 msgid "no input file given for in-place editing"
 msgstr "fornecido para edição in-place, ficheiro de entrada nenhum"
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<opções>] [<intervalo-de-revisões>] [[--] <caminho>...]"
 
-#: builtin/log.c:60
+#: builtin/log.c:61
 msgid "git show [<options>] <object>..."
 msgstr "git show [<opções>] <objeto>..."
 
-#: builtin/log.c:113
+#: builtin/log.c:114
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "opção --decorate inválida: %s"
 
-#: builtin/log.c:180
+#: builtin/log.c:181
 msgid "show source"
 msgstr "mostrar origem"
 
-#: builtin/log.c:181
+#: builtin/log.c:182
 msgid "use mail map file"
 msgstr "usar ficheiro de mapeamento de correio"
 
-#: builtin/log.c:184
+#: builtin/log.c:185
 msgid "only decorate refs that match <pattern>"
 msgstr "apenas decorar refs que correspondam ao <padrão>"
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "do not decorate refs that match <pattern>"
 msgstr "deixar por decorar refs correspondentes a <padrão>"
 
-#: builtin/log.c:187
+#: builtin/log.c:188
 msgid "decorate options"
 msgstr "opções de decoração"
 
-#: builtin/log.c:190
+#: builtin/log.c:191
 msgid ""
 "trace the evolution of line range <start>,<end> or function :<funcname> in "
 "<file>"
-msgstr "localizar a evolução de intervalo de linhas <início>,<fim> ou "
-"função :<nome-função> em <ficheiro>"
+msgstr ""
+"localizar a evolução de intervalo de linhas <início>,<fim> ou função :<nome-"
+"função> em <ficheiro>"
 
-#: builtin/log.c:213
+#: builtin/log.c:214
 msgid "-L<range>:<file> cannot be used with pathspec"
-msgstr "-L<alcance>:<ficheiro>incapaz ser usado com especificador de path"
+msgstr "-L<intervalo>:<ficheiro>incapaz ser usado com especificador de path"
 
-#: builtin/log.c:306
+#: builtin/log.c:322
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "Output final: %d %s\n"
 
-#: builtin/log.c:571
+#: builtin/log.c:429
+msgid "unable to create temporary object directory"
+msgstr "incapaz criar pasta de objeto temporário"
+
+#: builtin/log.c:599
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: ficheiro incorreto"
 
-#: builtin/log.c:586 builtin/log.c:676
+#: builtin/log.c:614 builtin/log.c:706
 #, c-format
 msgid "could not read object %s"
 msgstr "incapaz ler objeto %s"
 
-#: builtin/log.c:701
+#: builtin/log.c:731
 #, c-format
 msgid "unknown type: %d"
 msgstr "tipo desconhecido: %d"
 
-#: builtin/log.c:846
+#: builtin/log.c:880
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr ""
 
-#: builtin/log.c:853
+#: builtin/log.c:887
 msgid "format.headers without value"
 msgstr "format.headers sem valor"
 
-#: builtin/log.c:982
+#: builtin/log.c:1016
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "incapaz abrir ficheiro patch %s"
 
-#: builtin/log.c:999
+#: builtin/log.c:1033
 msgid "need exactly one range"
 msgstr ""
 
-#: builtin/log.c:1009
+#: builtin/log.c:1043
 msgid "not a range"
 msgstr "é intervalo nenhum"
 
-#: builtin/log.c:1173
+#: builtin/log.c:1207
 msgid "cover letter needs email format"
-msgstr "A carta de apresentação precisa de um formato de e-mail"
+msgstr "carta de apresentação precisa de formato de e-mail"
 
-#: builtin/log.c:1179
+#: builtin/log.c:1213
 msgid "failed to create cover-letter file"
 msgstr ""
 
-#: builtin/log.c:1266
+#: builtin/log.c:1300
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "in-reply-to incorreto: %s"
 
-#: builtin/log.c:1293
+#: builtin/log.c:1327
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<opções>] [<desde> | <intervalo-de-revisões>]"
 
-#: builtin/log.c:1351
+#: builtin/log.c:1385
 msgid "two output directories?"
-msgstr "Dois diretórios de saída?"
+msgstr "duas pastas de saída?"
 
-#: builtin/log.c:1502 builtin/log.c:2328 builtin/log.c:2330 builtin/log.c:2342
+#: builtin/log.c:1536 builtin/log.c:2369 builtin/log.c:2371 builtin/log.c:2383
 #, c-format
 msgid "unknown commit %s"
-msgstr "Commit desconhecido %s"
+msgstr "memória %s desconhecida"
 
-#: builtin/log.c:1513 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1547 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "falhou resolver '%s' como uma ref válida"
 
-#: builtin/log.c:1522
+#: builtin/log.c:1556
 msgid "could not find exact merge base"
 msgstr "incapaz encontrar a exata base de junção."
 
-#: builtin/log.c:1532
+#: builtin/log.c:1566
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
 "Or you could specify base commit by --base=<base-commit-id> manually"
 msgstr ""
-"Falha ao obter ramo a montante, se quer gravar o commit base "
-"automaticamente,\n"
-"use branch --set-upstream-to para seguir um ramo remoto.\n"
-"Ou pode especificar o commit base com --base=<base-commit-id> manualmente."
+"falhou obter upstream, se queres gravar a memória base automaticamente,\n"
+"por favor, usa git branch --set-upstream-to para monitorizar um ramo "
+"remoto.\n"
+"Ou podes especificar a memória base manualmente com --base=<id-memória-base>"
 
-#: builtin/log.c:1555
+#: builtin/log.c:1589
 msgid "failed to find exact merge base"
-msgstr "Falha ao procurar base exata de integração"
+msgstr "Falha ao encontrar base de junção exata"
 
-#: builtin/log.c:1572
+#: builtin/log.c:1606
 msgid "base commit should be the ancestor of revision list"
-msgstr "o commit base deve ser o antecessor da lista de revisões"
+msgstr "memória base tem de ser o antecessor da lista de revisões"
 
-#: builtin/log.c:1582
+#: builtin/log.c:1616
 msgid "base commit shouldn't be in revision list"
-msgstr "commit base devia estar fora da lista de revisões"
+msgstr "memória base tem de estar fora da lista de revisões"
 
-#: builtin/log.c:1640
+#: builtin/log.c:1674
 msgid "cannot get patch id"
 msgstr "incapaz obter id de patch"
 
-#: builtin/log.c:1703
+#: builtin/log.c:1737
 msgid "failed to infer range-diff origin of current series"
 msgstr "falhou ao inferir origem intervalo-diff da série atual"
 
-#: builtin/log.c:1705
+#: builtin/log.c:1739
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr ""
 
-#: builtin/log.c:1749
+#: builtin/log.c:1783
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "usar [PATCH n/m] mesmo com um único patch"
 
-#: builtin/log.c:1752
+#: builtin/log.c:1786
 msgid "use [PATCH] even with multiple patches"
 msgstr "usar [PATCH] mesmo com múltiplos patches"
 
-#: builtin/log.c:1756
+#: builtin/log.c:1790
 msgid "print patches to standard out"
 msgstr "imprimir patches para a saída padrão"
 
-#: builtin/log.c:1758
+#: builtin/log.c:1792
 msgid "generate a cover letter"
 msgstr "gerar uma carta de apresentação"
 
-#: builtin/log.c:1760
+#: builtin/log.c:1794
 msgid "use simple number sequence for output file names"
 msgstr ""
 "usar uma sequência de números simples para denominar os ficheiros gerados"
 
-#: builtin/log.c:1761
+#: builtin/log.c:1795
 msgid "sfx"
 msgstr "sfx"
 
-#: builtin/log.c:1762
+#: builtin/log.c:1796
 msgid "use <sfx> instead of '.patch'"
 msgstr "usar <sfx> em vez de '.patch'"
 
-#: builtin/log.c:1764
+#: builtin/log.c:1798
 msgid "start numbering patches at <n> instead of 1"
 msgstr "começar a numerar os patches em <n> em vez de 1"
 
-#: builtin/log.c:1765
+#: builtin/log.c:1799
 msgid "reroll-count"
 msgstr ""
 
-#: builtin/log.c:1766
+#: builtin/log.c:1800
 msgid "mark the series as Nth re-roll"
 msgstr "marcar a série como a n-ésima reiteração"
 
-#: builtin/log.c:1768
+#: builtin/log.c:1802
 msgid "max length of output filename"
 msgstr "comprimento máximo de saída de nome de ficheiro"
 
-#: builtin/log.c:1770
+#: builtin/log.c:1804
 msgid "use [RFC PATCH] instead of [PATCH]"
 msgstr "Usar [RFC PATCH] em vez de [PATCH]"
 
-#: builtin/log.c:1773
+#: builtin/log.c:1807
 msgid "cover-from-description-mode"
 msgstr ""
 
-#: builtin/log.c:1774
+#: builtin/log.c:1808
 msgid "generate parts of a cover letter based on a branch's description"
-msgstr ""
+msgstr "gerar partes de carta de apresentação baseado na descrição do ramo"
 
-#: builtin/log.c:1776
+#: builtin/log.c:1810
 msgid "use [<prefix>] instead of [PATCH]"
 msgstr "usar [<prefixo>] em vez de [PATCH]"
 
-#: builtin/log.c:1779
+#: builtin/log.c:1813
 msgid "store resulting files in <dir>"
-msgstr "guardar os ficheiros resultantes em <dir>"
+msgstr "guardar os ficheiros resultantes em <pasta>"
 
-#: builtin/log.c:1782
+#: builtin/log.c:1816
 msgid "don't strip/add [PATCH]"
 msgstr "deixar de despir/adicionar [PATCH]"
 
-#: builtin/log.c:1785
+#: builtin/log.c:1819
 msgid "don't output binary diffs"
 msgstr "deixar de gerar diffs binários"
 
-#: builtin/log.c:1787
+#: builtin/log.c:1821
 msgid "output all-zero hash in From header"
 msgstr "preencher o cabeçalho From com hash de zeros"
 
-#: builtin/log.c:1789
+#: builtin/log.c:1823
 msgid "don't include a patch matching a commit upstream"
-msgstr "incluir nenhum patch correspondente commit upstream"
+msgstr "incluir nenhum remendo correspondente a memória upstream"
 
-#: builtin/log.c:1791
+#: builtin/log.c:1825
 msgid "show patch format instead of default (patch + stat)"
 msgstr ""
 "mostrar no formato de patch em vez de no formato por omissão (patch + stat)"
 
-#: builtin/log.c:1793
+#: builtin/log.c:1827
 msgid "Messaging"
 msgstr "Mensagem"
 
-#: builtin/log.c:1794
+#: builtin/log.c:1828
 msgid "header"
 msgstr "cabeçalho"
 
-#: builtin/log.c:1795
+#: builtin/log.c:1829
 msgid "add email header"
 msgstr "adicionar cabeçalho de e-mail"
 
-#: builtin/log.c:1796 builtin/log.c:1797
+#: builtin/log.c:1830 builtin/log.c:1831
 msgid "email"
 msgstr "e-mail"
 
-#: builtin/log.c:1796
+#: builtin/log.c:1830
 msgid "add To: header"
 msgstr "adicionar cabeçalho To:"
 
-#: builtin/log.c:1797
+#: builtin/log.c:1831
 msgid "add Cc: header"
 msgstr "adicionar cabeçalho Cc:"
 
-#: builtin/log.c:1798
+#: builtin/log.c:1832
 msgid "ident"
 msgstr "identidade"
 
-#: builtin/log.c:1799
+#: builtin/log.c:1833
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
-"definir endereço From para <identidade> (ou, identidade do committer, caso "
-"contrário)"
+"definir endereço From para <identidade> (ou identidade de memorizador caso "
+"ausente)"
 
-#: builtin/log.c:1801
+#: builtin/log.c:1835
 msgid "message-id"
 msgstr "id-mensagem"
 
-#: builtin/log.c:1802
+#: builtin/log.c:1836
 msgid "make first mail a reply to <message-id>"
 msgstr "usar o primeiro email para responder a <id-mensagem>"
 
-#: builtin/log.c:1803 builtin/log.c:1806
+#: builtin/log.c:1837 builtin/log.c:1840
 msgid "boundary"
 msgstr "limite"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1838
 msgid "attach the patch"
 msgstr "anexar remendo"
 
-#: builtin/log.c:1807
+#: builtin/log.c:1841
 msgid "inline the patch"
 msgstr "incorporar remendo"
 
-#: builtin/log.c:1811
+#: builtin/log.c:1845
 msgid "enable message threading, styles: shallow, deep"
-msgstr "ativar mensagens por tópicos, estilos: shallow (superficial), deep (profundo)"
+msgstr ""
+"ativar mensagens por tópicos, estilos: shallow (superficial), deep (profundo)"
 
-#: builtin/log.c:1813
+#: builtin/log.c:1847
 msgid "signature"
 msgstr "assinatura"
 
-#: builtin/log.c:1814
+#: builtin/log.c:1848
 msgid "add a signature"
 msgstr "adicionar uma assinatura"
 
-#: builtin/log.c:1815
+#: builtin/log.c:1849
 msgid "base-commit"
 msgstr "memória-base"
 
-#: builtin/log.c:1816
+#: builtin/log.c:1850
 msgid "add prerequisite tree info to the patch series"
 msgstr "adicionar informação pré-requisito da árvore à série de patches"
 
-#: builtin/log.c:1819
+#: builtin/log.c:1853
 msgid "add a signature from a file"
 msgstr "adicionar uma assinatura de um ficheiro"
 
-#: builtin/log.c:1820
+#: builtin/log.c:1854
 msgid "don't print the patch filenames"
 msgstr "imprimir nomes de ficheiros de patch nenhuns"
 
-#: builtin/log.c:1822
+#: builtin/log.c:1856
 msgid "show progress while generating patches"
 msgstr "mostrar progresso enquanto se gera remendos"
 
-#: builtin/log.c:1824
+#: builtin/log.c:1858
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
+"mostrar alterações contra <rev> em carta de apresentação ou em remendo único"
 
-#: builtin/log.c:1827
+#: builtin/log.c:1861
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
+"mostrar alterações contra <espetro-ref> em carta de apresentação ou em "
+"remendo único"
 
-#: builtin/log.c:1829 builtin/range-diff.c:28
+#: builtin/log.c:1863 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr ""
 
-#: builtin/log.c:1916
+#: builtin/log.c:1953
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "linha de indentação inválida: %s"
 
-#: builtin/log.c:1931
-msgid "-n and -k are mutually exclusive"
-msgstr "-n e -k são mutuamente exclusivos."
-
-#: builtin/log.c:1933
-msgid "--subject-prefix/--rfc and -k are mutually exclusive"
-msgstr "--subject-prefix/--rfc e -k são mutuamente exclusivos."
-
-#: builtin/log.c:1941
+#: builtin/log.c:1978
 msgid "--name-only does not make sense"
 msgstr "--name-only faz sentido nenhum"
 
-#: builtin/log.c:1943
+#: builtin/log.c:1980
 msgid "--name-status does not make sense"
 msgstr "--name-status faz sentido nenhum"
 
-#: builtin/log.c:1945
+#: builtin/log.c:1982
 msgid "--check does not make sense"
 msgstr "--check faz sentido nenhum"
 
-#: builtin/log.c:1967
-msgid "--stdout, --output, and --output-directory are mutually exclusive"
-msgstr ""
+#: builtin/log.c:1984
+msgid "--remerge-diff does not make sense"
+msgstr "--remerge-diff faz sentido nenhum"
 
-#: builtin/log.c:2089
+#: builtin/log.c:2129
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr ""
 
-#: builtin/log.c:2093
+#: builtin/log.c:2133
 msgid "Interdiff:"
 msgstr ""
 
-#: builtin/log.c:2094
+#: builtin/log.c:2134
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr ""
 
-#: builtin/log.c:2100
-msgid "--creation-factor requires --range-diff"
-msgstr ""
-
-#: builtin/log.c:2104
+#: builtin/log.c:2144
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr ""
 
-#: builtin/log.c:2112
+#: builtin/log.c:2152
 msgid "Range-diff:"
 msgstr ""
 
-#: builtin/log.c:2113
+#: builtin/log.c:2153
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr ""
 
-#: builtin/log.c:2124
+#: builtin/log.c:2164
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "incapaz ler ficheiro de assinatura '%s'"
 
-#: builtin/log.c:2160
+#: builtin/log.c:2200
 msgid "Generating patches"
 msgstr "falha ao editar patch"
 
-#: builtin/log.c:2204
+#: builtin/log.c:2244
 msgid "failed to create output files"
 msgstr ""
 
-#: builtin/log.c:2263
+#: builtin/log.c:2304
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<upstream> [<head> [<limite>]]]"
 
-#: builtin/log.c:2317
+#: builtin/log.c:2358
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
 msgstr ""
-"Incapaz encontrar ramo monitorizado remoto, por favor especifica <upstream> "
+"Incapaz encontrar ramo remoto monitorizado, por favor especifica <upstream> "
 "manualmente.\n"
 
-#: builtin/ls-files.c:563
+#: builtin/ls-files.c:564
 msgid "git ls-files [<options>] [<file>...]"
 msgstr "git ls-files [<opções>] [<ficheiro>...]"
 
-#: builtin/ls-files.c:619
+#: builtin/ls-files.c:618
+msgid "separate paths with the NUL character"
+msgstr "separa caminhos com o caractere NUL"
+
+#: builtin/ls-files.c:620
 msgid "identify the file status with tags"
-msgstr "identificar o estado do ficheiro com tags"
+msgstr "identificar o estado do ficheiro com as etiquetas"
 
-#: builtin/ls-files.c:621
+#: builtin/ls-files.c:622
 msgid "use lowercase letters for 'assume unchanged' files"
 msgstr "usar letras minúsculas para ficheiros 'assume unchanged'"
 
-#: builtin/ls-files.c:623
+#: builtin/ls-files.c:624
 msgid "use lowercase letters for 'fsmonitor clean' files"
 msgstr "usar letras minúsculas para ficheiros 'fsmonitor clean'"
 
-#: builtin/ls-files.c:625
+#: builtin/ls-files.c:626
 msgid "show cached files in the output (default)"
-msgstr "mostrar ficheiros em cache na saída (predefinição)"
+msgstr "mostrar ficheiros de cenário na saída (predefinição)"
 
-#: builtin/ls-files.c:627
+#: builtin/ls-files.c:628
 msgid "show deleted files in the output"
 msgstr "mostrar ficheiros eliminados na saída"
 
-#: builtin/ls-files.c:629
+#: builtin/ls-files.c:630
 msgid "show modified files in the output"
 msgstr "mostrar ficheiros modificados na saída"
 
-#: builtin/ls-files.c:631
+#: builtin/ls-files.c:632
 msgid "show other files in the output"
 msgstr "mostrar outros ficheiros na saída"
 
-#: builtin/ls-files.c:633
+#: builtin/ls-files.c:634
 msgid "show ignored files in the output"
 msgstr "mostrar ficheiros ignorados na saída"
 
-#: builtin/ls-files.c:636
+#: builtin/ls-files.c:637
 msgid "show staged contents' object name in the output"
-msgstr "mostrar nome de objetos com conteúdo preparado, na saída"
+msgstr "mostrar nome de objetos de conteúdo encenado, na saída"
 
-#: builtin/ls-files.c:638
+#: builtin/ls-files.c:639
 msgid "show files on the filesystem that need to be removed"
 msgstr ""
 "mostrar ficheiros no sistema de ficheiros que precisam de ser removidos"
 
-#: builtin/ls-files.c:640
+#: builtin/ls-files.c:641
 msgid "show 'other' directories' names only"
-msgstr "mostrar nomes de diretórios 'other' (outro)"
+msgstr "mostrar apenas nomes das pastas 'other' (outro)"
 
-#: builtin/ls-files.c:642
+#: builtin/ls-files.c:643
 msgid "show line endings of files"
 msgstr "mostrar finais de linha dos ficheiros"
 
-#: builtin/ls-files.c:644
+#: builtin/ls-files.c:645
 msgid "don't show empty directories"
 msgstr "mostrar pastas vazias nenhumas"
 
-#: builtin/ls-files.c:647
+#: builtin/ls-files.c:648
 msgid "show unmerged files in the output"
 msgstr "mostrar ficheiros por juntar no output"
 
-#: builtin/ls-files.c:649
+#: builtin/ls-files.c:650
 msgid "show resolve-undo information"
 msgstr "mostrar informação de resolver-desfazer"
 
-#: builtin/ls-files.c:651
+#: builtin/ls-files.c:652
 msgid "skip files matching pattern"
 msgstr "ignorar ficheiros que correspondam ao padrão"
 
-#: builtin/ls-files.c:654
-msgid "exclude patterns are read from <file>"
-msgstr "ler padrões de exclusão do <ficheiro>"
+#: builtin/ls-files.c:655
+msgid "read exclude patterns from <file>"
+msgstr "ler padrões de exclusão de <ficheiro>"
 
-#: builtin/ls-files.c:657
+#: builtin/ls-files.c:658
 msgid "read additional per-directory exclude patterns in <file>"
-msgstr "ler padrões de exclusão por diretório do <ficheiro>"
+msgstr "ler padrões de exclusão por pasta adicionais em <ficheiro>"
 
-#: builtin/ls-files.c:659
+#: builtin/ls-files.c:660
 msgid "add the standard git exclusions"
 msgstr "incluir as exclusões standard de git"
 
-#: builtin/ls-files.c:663
+#: builtin/ls-files.c:664
 msgid "make the output relative to the project top directory"
 msgstr "fazer a saída relativa à pasta de topo de projeto"
 
-#: builtin/ls-files.c:666
-msgid "recurse through submodules"
-msgstr "percorrer recursivamente pelos submódulos"
-
-#: builtin/ls-files.c:668
+#: builtin/ls-files.c:669
 msgid "if any <file> is not in the index, treat this as an error"
-msgstr "se estiver no index <ficheiro> nenhum, tratar como erro"
+msgstr "se qualquer <ficheiro> estiver fora de cenário, tratar como erro"
 
-#: builtin/ls-files.c:669
+#: builtin/ls-files.c:670
 msgid "tree-ish"
-msgstr "árvore-etc"
+msgstr "arvoredo"
 
-#: builtin/ls-files.c:670
+#: builtin/ls-files.c:671
 msgid "pretend that paths removed since <tree-ish> are still present"
-msgstr ""
-"fingir que os caminhos removidos desde <árvore-etc> ainda estão presentes"
+msgstr "fingir que caminhos removidos desde <arvoredo> ainda estão presentes"
 
-#: builtin/ls-files.c:672
+#: builtin/ls-files.c:673
 msgid "show debugging data"
 msgstr "mostrar dados de depuração"
 
-#: builtin/ls-files.c:674
+#: builtin/ls-files.c:675
 msgid "suppress duplicate entries"
 msgstr "suprimir entradas duplicadas"
 
+#: builtin/ls-files.c:677
+msgid "show sparse directories in the presence of a sparse index"
+msgstr ""
+
 #: builtin/ls-remote.c:9
 msgid ""
 "git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
-"                     [-q | --quiet] [--exit-code] [--get-url]\n"
-"                     [--symref] [<repository> [<refs>...]]"
+"              [-q | --quiet] [--exit-code] [--get-url]\n"
+"              [--symref] [<repository> [<refs>...]]"
 msgstr ""
 "git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
-"                     [-q | --quiet] [--exit-code] [--get-url]\n"
-"                     [--symref] [<repositório> [<referências>...]]"
+"              [-q | --quiet] [--exit-code] [--get-url]\n"
+"              [--symref] [<repositório> [<refs>...]]"
 
 #: builtin/ls-remote.c:60
 msgid "do not print remote URL"
 msgstr "imprimir URL remoto nenhum"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1399
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1131
 msgid "exec"
 msgstr "exec"
 
@@ -17242,42 +18018,69 @@ msgstr "terminar com código de saída 2 se forem encontradas refs nenhumas"
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr "mostrar a referência subjacente em adição ao objeto por ela apontado"
 
-#: builtin/ls-tree.c:30
+#: builtin/ls-tree.c:36
 msgid "git ls-tree [<options>] <tree-ish> [<path>...]"
 msgstr "git ls-tree [<opções>] <arvoredo> [<caminho>...]"
 
-#: builtin/ls-tree.c:128
+#: builtin/ls-tree.c:54
+#, c-format
+msgid "could not get object info about '%s'"
+msgstr "incapaz obter info de objeto acerca de '%s'"
+
+#: builtin/ls-tree.c:79
+#, c-format
+msgid "bad ls-tree format: element '%s' does not start with '('"
+msgstr "formato ls-tree inválido: elemento '%s' começa diferente de '('"
+
+#: builtin/ls-tree.c:83
+#, c-format
+msgid "bad ls-tree format: element '%s' does not end in ')'"
+msgstr "formate ls-tree inválido: elemento '%s' termina diferente de ')'"
+
+#: builtin/ls-tree.c:109
+#, c-format
+msgid "bad ls-tree format: %%%.*s"
+msgstr "formato ls-tree inválido: %%%.*s"
+
+#: builtin/ls-tree.c:336
 msgid "only show trees"
 msgstr "mostrar apenas árvores"
 
-#: builtin/ls-tree.c:130
+#: builtin/ls-tree.c:338
 msgid "recurse into subtrees"
 msgstr "percorrer as subárvores recursivamente"
 
-#: builtin/ls-tree.c:132
+#: builtin/ls-tree.c:340
 msgid "show trees when recursing"
 msgstr "mostrar árvores ao percorrer"
 
-#: builtin/ls-tree.c:135
+#: builtin/ls-tree.c:343
 msgid "terminate entries with NUL byte"
 msgstr "terminar entradas com o byte NUL"
 
-#: builtin/ls-tree.c:136
+#: builtin/ls-tree.c:344
 msgid "include object size"
 msgstr "incluir dimensão dos objetos"
 
-#: builtin/ls-tree.c:138 builtin/ls-tree.c:140
+#: builtin/ls-tree.c:346 builtin/ls-tree.c:348
 msgid "list only filenames"
 msgstr "listar apenas os nomes de ficheiro"
 
-#: builtin/ls-tree.c:143
+#: builtin/ls-tree.c:350
+msgid "list only objects"
+msgstr "listar apenas objetos"
+
+#: builtin/ls-tree.c:353
 msgid "use full path names"
 msgstr "usar nomes de caminho completos"
 
-#: builtin/ls-tree.c:145
+#: builtin/ls-tree.c:355
 msgid "list entire tree; not just current directory (implies --full-name)"
-msgstr ""
-"listar toda árvore; para além do diretório atual (implica --full-name)"
+msgstr "listar toda árvore; para além da pasta atual (implica --full-name)"
+
+#: builtin/ls-tree.c:391
+msgid "--format can't be combined with other format-altering options"
+msgstr "incapaz combinar --format com outras opções alteradoras de formato"
 
 #. TRANSLATORS: keep <> in "<" mail ">" info.
 #: builtin/mailinfo.c:14
@@ -17294,7 +18097,7 @@ msgstr ""
 
 #: builtin/mailinfo.c:62
 msgid "copy Message-ID to the end of commit message"
-msgstr "Esta é a 2ª mensagem de commit:"
+msgstr "copia Message-ID para o fim da mensagem de memória"
 
 #: builtin/mailinfo.c:64
 msgid "re-code metadata to i18n.commitEncoding"
@@ -17328,7 +18131,11 @@ msgstr ""
 msgid "use headers in message's body"
 msgstr ""
 
-#: builtin/mailsplit.c:241
+#: builtin/mailsplit.c:227
+msgid "reading patches from stdin/tty..."
+msgstr "lendo remendos de entrada padrão/tty..."
+
+#: builtin/mailsplit.c:242
 #, c-format
 msgid "empty mbox: '%s'"
 msgstr ""
@@ -17353,26 +18160,25 @@ msgstr "git merge-base --is-ancestor <memória> <memória>"
 msgid "git merge-base --fork-point <ref> [<commit>]"
 msgstr "git merge-base --fork-point <ref> [<memória>]"
 
-#: builtin/merge-base.c:143
+#: builtin/merge-base.c:144
 msgid "output all common ancestors"
 msgstr "mostrar todos os antecessores"
 
-#: builtin/merge-base.c:145
+#: builtin/merge-base.c:146
 msgid "find ancestors for a single n-way merge"
-msgstr "encontrar antecessores para uma única junção de n pontos"
+msgstr "encontrar antecessores para uma única n-junção (e.g. tri-junção)"
 
-#: builtin/merge-base.c:147
+#: builtin/merge-base.c:148
 msgid "list revs not reachable from others"
 msgstr "listar revs apenas alcançáveis pelos nossos"
 
-#: builtin/merge-base.c:149
+#: builtin/merge-base.c:150
 msgid "is the first one ancestor of the other?"
-msgstr "é o primeiro antecessor do outro?"
+msgstr "é o primeiro, antecessor do outro?"
 
-#: builtin/merge-base.c:151
+#: builtin/merge-base.c:152
 msgid "find where <commit> forked from reflog of <ref>"
-msgstr ""
-"descobrir onde foi que o <commit> divergiu usando o reflog da <referência>"
+msgstr "descobrir onde <memória> forqueou a partir de registo-ref da <ref>"
 
 #: builtin/merge-file.c:9
 msgid ""
@@ -17388,31 +18194,35 @@ msgstr "enviar resultados para a saída padrão"
 
 #: builtin/merge-file.c:36
 msgid "use a diff3 based merge"
-msgstr "usar integração baseada em diff3"
+msgstr "usar junção com diff3"
 
 #: builtin/merge-file.c:37
+msgid "use a zealous diff3 based merge"
+msgstr "usar uma zelosa junção com diff3"
+
+#: builtin/merge-file.c:39
 msgid "for conflicts, use our version"
 msgstr "usar a nossa versão em caso de conflito"
 
-#: builtin/merge-file.c:39
+#: builtin/merge-file.c:41
 msgid "for conflicts, use their version"
 msgstr "usar a versão deles em caso de conflito"
 
-#: builtin/merge-file.c:41
+#: builtin/merge-file.c:43
 msgid "for conflicts, use a union version"
 msgstr "usar a união das versões em caso de conflito"
 
-#: builtin/merge-file.c:44
+#: builtin/merge-file.c:46
 msgid "for conflicts, use this marker size"
-msgstr "usar este comprimento de marcador para os conflitos"
+msgstr "usar este tamanho de marcador para os conflitos"
 
-#: builtin/merge-file.c:45
+#: builtin/merge-file.c:47
 msgid "do not warn about conflicts"
 msgstr "deixar de alertar sobre conflitos"
 
-#: builtin/merge-file.c:47
+#: builtin/merge-file.c:49
 msgid "set labels for file1/orig-file/file2"
-msgstr "definir identificares para ficheiro1/ficheiro-orig/ficheiro2"
+msgstr "definir rótulos para ficheiro1/ficheiro-orig/ficheiro2"
 
 #: builtin/merge-recursive.c:47
 #, c-format
@@ -17445,383 +18255,373 @@ msgstr "incapaz resolver ref '%s'"
 msgid "Merging %s with %s\n"
 msgstr "Juntando %s com %s\n"
 
-#: builtin/merge.c:58
+#: builtin/merge.c:59
 msgid "git merge [<options>] [<commit>...]"
 msgstr "git merge [<opções>] [<memória>...]"
 
-#: builtin/merge.c:123
+#: builtin/merge.c:125
 msgid "switch `m' requires a value"
 msgstr "a opção 'm' requer um valor"
 
-#: builtin/merge.c:146
+#: builtin/merge.c:148
 #, c-format
 msgid "option `%s' requires a value"
 msgstr "opção `%s' exige um valor"
 
-#: builtin/merge.c:199
+#: builtin/merge.c:201
 #, c-format
 msgid "Could not find merge strategy '%s'.\n"
 msgstr "Incapaz encontrar estratégia de junção '%s'.\n"
 
-#: builtin/merge.c:200
+#: builtin/merge.c:202
 #, c-format
 msgid "Available strategies are:"
 msgstr "Estratégias disponíveis:"
 
-#: builtin/merge.c:205
+#: builtin/merge.c:207
 #, c-format
 msgid "Available custom strategies are:"
 msgstr "Estratégias personalizadas disponíveis:"
 
-#: builtin/merge.c:256 builtin/pull.c:133
+#: builtin/merge.c:258 builtin/pull.c:134
 msgid "do not show a diffstat at the end of the merge"
 msgstr "mostrar diffstat nenhuma ao fim da junção"
 
-#: builtin/merge.c:259 builtin/pull.c:136
+#: builtin/merge.c:261 builtin/pull.c:137
 msgid "show a diffstat at the end of the merge"
 msgstr "mostrar um diffstat ao fim da junção"
 
-#: builtin/merge.c:260 builtin/pull.c:139
+#: builtin/merge.c:262 builtin/pull.c:140
 msgid "(synonym to --stat)"
 msgstr "(sinónimo de --stat)"
 
-#: builtin/merge.c:262 builtin/pull.c:142
+#: builtin/merge.c:264 builtin/pull.c:143
 msgid "add (at most <n>) entries from shortlog to merge commit message"
 msgstr ""
-"adicionar (no máximo <n>) entradas do shortlog à mensagem de commit da "
-"integração"
+"adicionar (no máximo <n>) entradas de shortlog à mensagem de memória da "
+"junção"
 
-#: builtin/merge.c:265 builtin/pull.c:148
+#: builtin/merge.c:267 builtin/pull.c:149
 msgid "create a single commit instead of doing a merge"
-msgstr "criar um único commit em vez de realizar uma integração"
+msgstr "criar uma única memória em vez de realizar uma junção"
 
-#: builtin/merge.c:267 builtin/pull.c:151
+#: builtin/merge.c:269 builtin/pull.c:152
 msgid "perform a commit if the merge succeeds (default)"
-msgstr "realizar um commit se a integração for bem sucedida (predefinição)"
+msgstr "realizar uma memorização se a junção suceder (predefinição)"
 
-#: builtin/merge.c:269 builtin/pull.c:154
+#: builtin/merge.c:271 builtin/pull.c:155
 msgid "edit message before committing"
-msgstr "editar a mensagem antes de submeter"
+msgstr "editar a mensagem antes de memorizar"
 
-#: builtin/merge.c:271
+#: builtin/merge.c:273
 msgid "allow fast-forward (default)"
-msgstr "permitir avanço rápido (predefinição)"
+msgstr "permitir avanço (predefinição)"
 
-#: builtin/merge.c:273 builtin/pull.c:161
+#: builtin/merge.c:275 builtin/pull.c:162
 msgid "abort if fast-forward is not possible"
-msgstr "abortar se fast-forward é impossível"
+msgstr "abortar se avanço é impossível"
 
-#: builtin/merge.c:277 builtin/pull.c:164
+#: builtin/merge.c:279 builtin/pull.c:168
 msgid "verify that the named commit has a valid GPG signature"
-msgstr "verificar se o commit tem uma assinatura GPG válida"
+msgstr "verificar que a memória em questão tem uma assinatura GPG válida"
 
-#: builtin/merge.c:278 builtin/notes.c:787 builtin/pull.c:168
-#: builtin/rebase.c:540 builtin/rebase.c:1413 builtin/revert.c:114
+#: builtin/merge.c:280 builtin/notes.c:785 builtin/pull.c:172
+#: builtin/rebase.c:1145 builtin/revert.c:114
 msgid "strategy"
 msgstr "estratégia"
 
-#: builtin/merge.c:279 builtin/pull.c:169
+#: builtin/merge.c:281 builtin/pull.c:173
 msgid "merge strategy to use"
 msgstr "estratégia de junção a usar"
 
-#: builtin/merge.c:280 builtin/pull.c:172
+#: builtin/merge.c:282 builtin/pull.c:176
 msgid "option=value"
 msgstr "opção=valor"
 
-#: builtin/merge.c:281 builtin/pull.c:173
+#: builtin/merge.c:283 builtin/pull.c:177
 msgid "option for selected merge strategy"
 msgstr "opção para estratégia de junção selecionada"
 
-#: builtin/merge.c:283
+#: builtin/merge.c:285
 msgid "merge commit message (for a non-fast-forward merge)"
-msgstr "mensagem de commit de junção (para junções non-fast-forward)"
+msgstr "mensagem de memória de junção (para junções diferentes de avanço)"
+
+#: builtin/merge.c:291
+msgid "use <name> instead of the real target"
+msgstr "usar <nome> em vez do alvo real"
 
-#: builtin/merge.c:290
+#: builtin/merge.c:294
 msgid "abort the current in-progress merge"
 msgstr "abortar a junção atualmente em curso"
 
-#: builtin/merge.c:292
+#: builtin/merge.c:296
 msgid "--abort but leave index and working tree alone"
 msgstr "--abort mas deixar o cenário e a árvore-trabalho quietas"
 
-#: builtin/merge.c:294
+#: builtin/merge.c:298
 msgid "continue the current in-progress merge"
-msgstr "continuar a integração em curso"
+msgstr "continuar a junção em curso"
 
-#: builtin/merge.c:296 builtin/pull.c:180
+#: builtin/merge.c:300 builtin/pull.c:184
 msgid "allow merging unrelated histories"
 msgstr "permitir junção de históricos diferentes"
 
-#: builtin/merge.c:303
+#: builtin/merge.c:307
 msgid "bypass pre-merge-commit and commit-msg hooks"
-msgstr "ignorar pre-merge-commit e ganchos commit-msg"
+msgstr "contornar ganchos pre-merge-commit e commit-msg"
 
-#: builtin/merge.c:320
+#: builtin/merge.c:323
 msgid "could not run stash."
-msgstr "incapaz executar stash."
+msgstr "incapaz executar o esconder."
 
-#: builtin/merge.c:325
+#: builtin/merge.c:328
 msgid "stash failed"
-msgstr ""
+msgstr "esconder falhou"
 
-#: builtin/merge.c:330
+#: builtin/merge.c:333
 #, c-format
 msgid "not a valid object: %s"
-msgstr ""
+msgstr "objeto inválido: %s"
 
-#: builtin/merge.c:352 builtin/merge.c:369
+#: builtin/merge.c:355 builtin/merge.c:372
 msgid "read-tree failed"
-msgstr "falha ao executar o comando read-tree"
+msgstr "read-tree falhou"
 
-#: builtin/merge.c:400
+#: builtin/merge.c:403
 msgid "Already up to date. (nothing to squash)"
-msgstr " (nada para esmagar)"
+msgstr "Já está atualizado. (nada para esmagar)"
 
-#: builtin/merge.c:414
+#: builtin/merge.c:417
 #, c-format
 msgid "Squash commit -- not updating HEAD\n"
-msgstr "Squash commit -- deixando HEAD por atualizar\n"
+msgstr "Esmagar memória -- deixando HEAD por atualizar\n"
 
-#: builtin/merge.c:464
+#: builtin/merge.c:467
 #, c-format
 msgid "No merge message -- not updating HEAD\n"
 msgstr "Mensagem de junção nenhuma -- deixando HEAD por atualizar\n"
 
-#: builtin/merge.c:515
+#: builtin/merge.c:517
 #, c-format
 msgid "'%s' does not point to a commit"
-msgstr "'%s' aponta para commit nenhum"
+msgstr "'%s' aponta para memória nenhuma"
 
-#: builtin/merge.c:603
+#: builtin/merge.c:605
 #, c-format
 msgid "Bad branch.%s.mergeoptions string: %s"
-msgstr "Valor de branch.%s.mergeoptions incorreto: %s"
+msgstr "String de branch.%s.mergeoptions incorreta: %s"
 
-#: builtin/merge.c:729
+#: builtin/merge.c:732
 msgid "Not handling anything other than two heads merge."
 msgstr "Lidando nada além da junção de duas heads."
 
-#: builtin/merge.c:742
+#: builtin/merge.c:745
 #, c-format
-msgid "Unknown option for merge-recursive: -X%s"
-msgstr "Opção desconhecida de merge-recursive: -X%s"
+msgid "unknown strategy option: -X%s"
+msgstr "opção de estratégia desconhecida: -X%s"
 
-#: builtin/merge.c:761 t/helper/test-fast-rebase.c:223
+#: builtin/merge.c:764 t/helper/test-fast-rebase.c:223
 #, c-format
 msgid "unable to write %s"
 msgstr "incapaz escrever %s"
 
-#: builtin/merge.c:813
+#: builtin/merge.c:816
 #, c-format
 msgid "Could not read from '%s'"
 msgstr "Incapaz ler de '%s'"
 
-#: builtin/merge.c:822
+#: builtin/merge.c:825
 #, c-format
 msgid "Not committing merge; use 'git commit' to complete the merge.\n"
-msgstr "Memorizando junção nenhuma; usa 'git commit' para completar a junção.\n"
+msgstr ""
+"Memorizando junção nenhuma; usa 'git commit' para completar a junção.\n"
 
-#: builtin/merge.c:828
+#: builtin/merge.c:831
 msgid ""
 "Please enter a commit message to explain why this merge is necessary,\n"
 "especially if it merges an updated upstream into a topic branch.\n"
 "\n"
 msgstr ""
-"Introduza uma mensagem de commit, explicando o porquê desta integração\n"
-"ser necessária, especialmente se é merge de updated stream para topic "
-"branch.\n"
+"Por favor, introduz uma mensagem de memória, explicando porque esta junção\n"
+"é necessária, especialmente se junta um upstream atualizado num ramo-"
+"tópico.\n"
 "\n"
 
-#: builtin/merge.c:833
+#: builtin/merge.c:836
 msgid "An empty message aborts the commit.\n"
-msgstr "Uma mensagem vazia aborta o commit.\n"
+msgstr "Uma mensagem vazia aborta a memorização.\n"
 
-#: builtin/merge.c:836
+#: builtin/merge.c:839
 #, c-format
 msgid ""
 "Lines starting with '%c' will be ignored, and an empty message aborts\n"
 "the commit.\n"
 msgstr ""
-"Linhas começadas com '%c' são ignoradas, e uma messagem vazia aborta\n"
-"o commit.\n"
+"Linhas começadas com '%c' são ignoradas, e uma mensagem vazia aborta\n"
+"a memorização.\n"
 
-#: builtin/merge.c:889
+#: builtin/merge.c:900
 msgid "Empty commit message."
-msgstr "Mensagem commit vazia."
+msgstr "Mensagem de memória vazia."
 
-#: builtin/merge.c:904
+#: builtin/merge.c:915
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Maravilhoso.\n"
 
-#: builtin/merge.c:965
+#: builtin/merge.c:976
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
-"Merge automático falhou; resolve os conflitos e depois podes commitar o "
-"resultado.\n"
+"Junção automática falhou; conserta os conflitos e depois podes memorizar\n"
+"resultado.\n"
 
-#: builtin/merge.c:1004
+#: builtin/merge.c:1015
 msgid "No current branch."
 msgstr "Nenhum ramo atual."
 
-#: builtin/merge.c:1006
+#: builtin/merge.c:1017
 msgid "No remote for the current branch."
-msgstr "Ŕamo atual de remoto nenhum."
+msgstr "Remoto nenhum para ramo atual."
 
-#: builtin/merge.c:1008
+#: builtin/merge.c:1019
 msgid "No default upstream defined for the current branch."
-msgstr "Ramo atual sem upstream default definido."
+msgstr "Ramo atual sem predefinição de upstream definida."
 
-#: builtin/merge.c:1013
+#: builtin/merge.c:1024
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
-msgstr "Nenhum ramo de monitorização remoto seguido por %s de %s"
+msgstr "Nenhum ramo de monitorização remoto para %s de %s"
 
-#: builtin/merge.c:1070
+#: builtin/merge.c:1081
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Valor '%s' incorreto no ambiente '%s'"
 
-#: builtin/merge.c:1173
+#: builtin/merge.c:1183
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "podemos juntar em %s nenhum(a): %s"
 
-#: builtin/merge.c:1207
+#: builtin/merge.c:1217
 msgid "not something we can merge"
 msgstr "podemos juntar nada"
 
-#: builtin/merge.c:1317
+#: builtin/merge.c:1330
 msgid "--abort expects no arguments"
 msgstr "--abort espera argumento nenhum"
 
-#: builtin/merge.c:1321
+#: builtin/merge.c:1334
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "Há junção nenhuma para abortar (MERGE_HEAD faltando)."
 
-#: builtin/merge.c:1339
+#: builtin/merge.c:1352
 msgid "--quit expects no arguments"
 msgstr "--quit espera argumento nenhum"
 
-#: builtin/merge.c:1352
+#: builtin/merge.c:1365
 msgid "--continue expects no arguments"
 msgstr "--continue espera argumento nenhum"
 
-#: builtin/merge.c:1356
+#: builtin/merge.c:1369
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "Há junção nenhuma em curso (MERGE_HEAD faltando)."
 
-#: builtin/merge.c:1372
+#: builtin/merge.c:1385
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
 msgstr ""
 "Junção está por concluir (MERGE_HEAD existe).\n"
-"Por favor, faz commit das tuas alterações antes de juntar."
+"Por favor, memoriza tuas alterações antes de juntar."
 
-#: builtin/merge.c:1379
+#: builtin/merge.c:1392
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
 msgstr ""
-"Cherry-pick por concluir (existe CHERRY_PICK_HEAD).\n"
-"Por favor, memorize suas alterações antes de juntar."
+"Apanha por concluir (existe CHERRY_PICK_HEAD).\n"
+"Por favor, memoriza tuas alterações antes de juntares."
 
-#: builtin/merge.c:1382
+#: builtin/merge.c:1395
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
-msgstr "Cherry-pick por concluir (existe CHERRY_PICK_HEAD)."
-
-#: builtin/merge.c:1396
-msgid "You cannot combine --squash with --no-ff."
-msgstr "Impossível combinar --squash com --no-ff."
+msgstr "Apanha por concluir (existe CHERRY_PICK_HEAD)."
 
-#: builtin/merge.c:1398
-msgid "You cannot combine --squash with --commit."
-msgstr "Impossível combinar --squash com --commit."
-
-#: builtin/merge.c:1414
+#: builtin/merge.c:1427
 msgid "No commit specified and merge.defaultToUpstream not set."
-msgstr "Especificado commit nenhum e merge.defaultToUpstream indefinido."
+msgstr "Especificada memória nenhuma e merge.defaultToUpstream indefinido."
 
-#: builtin/merge.c:1431
+#: builtin/merge.c:1444
 msgid "Squash commit into empty head not supported yet"
-msgstr "Esmagar commit para uma cabeça vazia por enquanto tem suporte nenhum"
+msgstr "Esmagar memória para uma cabeça vazia por enquanto é insustentado"
 
-#: builtin/merge.c:1433
+#: builtin/merge.c:1446
 msgid "Non-fast-forward commit does not make sense into an empty head"
-msgstr "Non-fast-forward commit para uma cabeça vazia faz sentido nenhum"
+msgstr ""
+"Memorização diferente de avanço para uma cabeça vazia faz sentido nenhum"
 
-#: builtin/merge.c:1438
+#: builtin/merge.c:1451
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - nada que se pode juntar"
 
-#: builtin/merge.c:1440
+#: builtin/merge.c:1453
 msgid "Can merge only exactly one commit into empty head"
-msgstr "Só se pode integrar exatamente um commit numa cabeça vazia"
+msgstr "Podendo apenas juntar exatamente uma memória para uma cabeça vazia"
 
-#: builtin/merge.c:1521
+#: builtin/merge.c:1540
 msgid "refusing to merge unrelated histories"
 msgstr "recusando juntar históricos diferentes"
 
-#: builtin/merge.c:1540
+#: builtin/merge.c:1559
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Atualizando %s..%s\n"
 
-#: builtin/merge.c:1587
+#: builtin/merge.c:1606
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
-msgstr "A tentar integração mesmo trivial no interior do índice...\n"
+msgstr "Tentando junção mesmo trivial no interior de cenário...\n"
 
-#: builtin/merge.c:1594
+#: builtin/merge.c:1613
 #, c-format
 msgid "Nope.\n"
-msgstr "Nada.\n"
+msgstr "Népia.\n"
 
-#: builtin/merge.c:1625
-msgid "Not possible to fast-forward, aborting."
-msgstr "Impossível fazer fast-forward, abortando."
-
-#: builtin/merge.c:1653 builtin/merge.c:1719
+#: builtin/merge.c:1671 builtin/merge.c:1737
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Recuando a árvore para estado pristino...\n"
 
-#: builtin/merge.c:1657
+#: builtin/merge.c:1675
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Tentando estratégia merge %s...\n"
 
-#: builtin/merge.c:1709
+#: builtin/merge.c:1727
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "A junção lidou com estratégia de junção nenhuma.\n"
 
-#: builtin/merge.c:1711
+#: builtin/merge.c:1729
 #, c-format
 msgid "Merge with strategy %s failed.\n"
-msgstr "Falha ao integrar com a estratégia %s.\n"
+msgstr "Falhou junção com estratégia %s.\n"
 
-#: builtin/merge.c:1721
+#: builtin/merge.c:1739
 #, c-format
 msgid "Using the %s strategy to prepare resolving by hand.\n"
 msgstr "Usando estratégia %s para preparar resolução manual.\n"
 
-#: builtin/merge.c:1735
+#: builtin/merge.c:1753
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
-msgstr "Merge automática correu bem; parei antes de commitar como pedido\n"
-
-#: builtin/mktag.c:10
-msgid "git mktag"
-msgstr ""
+msgstr "Junção automática correu bem; parei antes de memorizar, como pedido\n"
 
 #: builtin/mktag.c:27
 #, c-format
 msgid "warning: tag input does not pass fsck: %s"
-msgstr "aviso: input de etiqueta falha na verificação fsck: %s"
+msgstr "aviso: entrada de etiqueta falha na verificação fsck: %s"
 
 #: builtin/mktag.c:38
 #, c-format
@@ -17853,11 +18653,7 @@ msgstr "etiqueta em entrada padrão referiu-se a objeto inválido"
 
 #: builtin/mktag.c:103 builtin/tag.c:243
 msgid "unable to write tag file"
-msgstr "incapaz escrever ficheiro de tag"
-
-#: builtin/mktree.c:66
-msgid "git mktree [-z] [--missing] [--batch]"
-msgstr "git mktree [-z] [--missing] [--batch]"
+msgstr "incapaz escrever ficheiro de etiqueta"
 
 #: builtin/mktree.c:154
 msgid "input is NUL terminated"
@@ -17872,44 +18668,55 @@ msgid "allow creation of more than one tree"
 msgstr "permitir a criação de mais do que uma árvore"
 
 #: builtin/multi-pack-index.c:10
-msgid "git multi-pack-index [<options>] write [--preferred-pack=<pack>]"
-msgstr "git multi-pack-index [<opções>] write [--preferred-pack=<pacote>]"
+msgid ""
+"git multi-pack-index [<options>] write [--preferred-pack=<pack>][--refs-"
+"snapshot=<path>]"
+msgstr ""
+"git multi-pack-index [<opções>] write [--preferred-pack=<pacote>][--refs-"
+"snapshot=<caminho>]"
 
-#: builtin/multi-pack-index.c:13
+#: builtin/multi-pack-index.c:14
 msgid "git multi-pack-index [<options>] verify"
 msgstr "git multi-pack-index [<opções>] verify"
 
-#: builtin/multi-pack-index.c:16
+#: builtin/multi-pack-index.c:17
 msgid "git multi-pack-index [<options>] expire"
 msgstr "git multi-pack-index [<opções>] expire"
 
-#: builtin/multi-pack-index.c:19
+#: builtin/multi-pack-index.c:20
 msgid "git multi-pack-index [<options>] repack [--batch-size=<size>]"
 msgstr "git multi-pack-index [<opções>] repack [--batch-size=<tamanho>]"
 
-#: builtin/multi-pack-index.c:54
+#: builtin/multi-pack-index.c:57
 msgid "object directory containing set of packfile and pack-index pairs"
 msgstr ""
 
-#: builtin/multi-pack-index.c:69
+#: builtin/multi-pack-index.c:98
 msgid "preferred-pack"
 msgstr ""
 
-#: builtin/multi-pack-index.c:70
+#: builtin/multi-pack-index.c:99
 msgid "pack for reuse when computing a multi-pack bitmap"
 msgstr ""
 
-#: builtin/multi-pack-index.c:128
+#: builtin/multi-pack-index.c:100
+msgid "write multi-pack bitmap"
+msgstr ""
+
+#: builtin/multi-pack-index.c:105
+msgid "write multi-pack index containing only given indexes"
+msgstr "escrita multi-pack em cenário contendo apenas cenários dados"
+
+#: builtin/multi-pack-index.c:107
+msgid "refs snapshot for selecting bitmap commits"
+msgstr ""
+
+#: builtin/multi-pack-index.c:206
 msgid ""
 "during repack, collect pack-files of smaller size into a batch that is "
 "larger than this size"
 msgstr ""
 
-#: builtin/multi-pack-index.c:179
-#, c-format
-msgid "unrecognized subcommand: %s"
-msgstr "subcomando desconhecido: %s"
-
 #: builtin/mv.c:18
 msgid "git mv [<options>] <source>... <destination>"
 msgstr "git mv [<opções>] <origem>... <destino>"
@@ -17917,7 +18724,7 @@ msgstr "git mv [<opções>] <origem>... <destino>"
 #: builtin/mv.c:83
 #, c-format
 msgid "Directory %s is in index and no submodule?"
-msgstr "A pasta %s está no index porém submódulo nenhum?"
+msgstr "A pasta %s está em cenário porém submódulo nenhum?"
 
 #: builtin/mv.c:85
 msgid "Please stage your changes to .gitmodules or stash them to proceed"
@@ -17937,119 +18744,123 @@ msgstr "forçar mover/renomear mesmo se destino existir"
 msgid "skip move/rename errors"
 msgstr "ignorar erros de mover/renomear"
 
-#: builtin/mv.c:170
+#: builtin/mv.c:172
 #, c-format
 msgid "destination '%s' is not a directory"
 msgstr "destino '%s' é pasta nenhuma"
 
-#: builtin/mv.c:181
+#: builtin/mv.c:184
 #, c-format
 msgid "Checking rename of '%s' to '%s'\n"
 msgstr "Verificando renomeação de '%s' para '%s'\n"
 
-#: builtin/mv.c:185
+#: builtin/mv.c:190
 msgid "bad source"
 msgstr "origem incorreta"
 
-#: builtin/mv.c:188
+#: builtin/mv.c:193
 msgid "can not move directory into itself"
 msgstr "incapaz mover pasta para si mesma"
 
-#: builtin/mv.c:191
+#: builtin/mv.c:196
 msgid "cannot move directory over file"
 msgstr "incapaz mover pasta para um ficheiro"
 
-#: builtin/mv.c:200
+#: builtin/mv.c:205
 msgid "source directory is empty"
 msgstr "pasta de origem está vazia"
 
-#: builtin/mv.c:225
+#: builtin/mv.c:231
 msgid "not under version control"
 msgstr ""
 
-#: builtin/mv.c:227
+#: builtin/mv.c:233
 msgid "conflicted"
-msgstr ""
+msgstr "conflituoso"
 
-#: builtin/mv.c:230
+#: builtin/mv.c:236
 msgid "destination exists"
 msgstr "o destino já existe"
 
-#: builtin/mv.c:238
+#: builtin/mv.c:244
 #, c-format
 msgid "overwriting '%s'"
 msgstr "a substituir '%s'"
 
-#: builtin/mv.c:241
+#: builtin/mv.c:247
 msgid "Cannot overwrite"
 msgstr "Incapaz subscrever"
 
-#: builtin/mv.c:244
+#: builtin/mv.c:250
 msgid "multiple sources for the same target"
 msgstr "múltiplas origens para o mesmo destino"
 
-#: builtin/mv.c:246
+#: builtin/mv.c:252
 msgid "destination directory does not exist"
 msgstr "pasta de destino é inexistente"
 
-#: builtin/mv.c:253
+#: builtin/mv.c:280
 #, c-format
 msgid "%s, source=%s, destination=%s"
 msgstr "%s, origem=%s, destino=%s"
 
-#: builtin/mv.c:274
+#: builtin/mv.c:308
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "A mudar de nome de %s para %s\n"
 
-#: builtin/mv.c:280 builtin/remote.c:785 builtin/repack.c:667
+#: builtin/mv.c:314 builtin/remote.c:812 builtin/repack.c:861
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "renomear '%s' falhou"
 
-#: builtin/name-rev.c:465
+#: builtin/name-rev.c:524
 msgid "git name-rev [<options>] <commit>..."
 msgstr "git name-rev [<opções>] <commit>..."
 
-#: builtin/name-rev.c:466
+#: builtin/name-rev.c:525
 msgid "git name-rev [<options>] --all"
 msgstr "git name-rev [<opções>] --all"
 
-#: builtin/name-rev.c:467
-msgid "git name-rev [<options>] --stdin"
-msgstr "git name-rev [<opções>] --stdin"
+#: builtin/name-rev.c:526
+msgid "git name-rev [<options>] --annotate-stdin"
+msgstr "git name-rev [<opções>] --annotate-stdin"
 
-#: builtin/name-rev.c:524
+#: builtin/name-rev.c:583
 msgid "print only ref-based names (no object names)"
 msgstr "imprimir apenas nomes baseados em ref (nomes de objeto nenhum)"
 
-#: builtin/name-rev.c:525
+#: builtin/name-rev.c:584
 msgid "only use tags to name the commits"
-msgstr "usar apenas tags para designar commits"
+msgstr "usar apenas etiquetas para designar memórias"
 
-#: builtin/name-rev.c:527
+#: builtin/name-rev.c:586
 msgid "only use refs matching <pattern>"
 msgstr "usar apenas refs que correspondam ao <padrão>"
 
-#: builtin/name-rev.c:529
+#: builtin/name-rev.c:588
 msgid "ignore refs matching <pattern>"
 msgstr "ignorar refs que correspondam ao <padrão>"
 
-#: builtin/name-rev.c:531
+#: builtin/name-rev.c:590
 msgid "list all commits reachable from all refs"
-msgstr "listar todos os commits alcançáveis a partir de todas as referências"
+msgstr "listar todas as memórias alcançáveis de todas as refs"
+
+#: builtin/name-rev.c:591
+msgid "deprecated: use annotate-stdin instead"
+msgstr ""
 
-#: builtin/name-rev.c:532
-msgid "read from stdin"
-msgstr "ler da entrada padrão"
+#: builtin/name-rev.c:592
+msgid "annotate text from stdin"
+msgstr "anotar texto de entrada padrão"
 
-#: builtin/name-rev.c:533
+#: builtin/name-rev.c:593
 msgid "allow to print `undefined` names (default)"
 msgstr "permitir imprimir nomes 'indefinidos' (predefinição)"
 
-#: builtin/name-rev.c:539
+#: builtin/name-rev.c:599
 msgid "dereference tags in the input (internal use)"
-msgstr "desreferenciar tags na entrada (uso interno)"
+msgstr "desreferenciar etiquetas na entrada (uso interno)"
 
 #: builtin/notes.c:28
 msgid "git notes [--ref <notes-ref>] [list [<object>]]"
@@ -18089,14 +18900,6 @@ msgid ""
 msgstr ""
 "git notes [--ref <notas-ref>] merge [-v | -q] [-s <estratégia>] <notas-ref>"
 
-#: builtin/notes.c:35
-msgid "git notes merge --commit [-v | -q]"
-msgstr "git notes merge --commit [-v | -q]"
-
-#: builtin/notes.c:36
-msgid "git notes merge --abort [-v | -q]"
-msgstr "git notes merge --abort [-v | -q]"
-
 #: builtin/notes.c:37
 msgid "git notes [--ref <notes-ref>] remove [<object>...]"
 msgstr "git notes [--ref <notas-ref>] remove [<objeto>...]"
@@ -18157,69 +18960,65 @@ msgstr "git notes remove [<objeto>]"
 msgid "git notes prune [<options>]"
 msgstr "git notes prune [<opções>]"
 
-#: builtin/notes.c:92
-msgid "git notes get-ref"
-msgstr "git notes get-ref"
-
 #: builtin/notes.c:97
 msgid "Write/edit the notes for the following object:"
 msgstr "Escreva/edite as notas do seguinte objeto:"
 
-#: builtin/notes.c:150
+#: builtin/notes.c:149
 #, c-format
 msgid "unable to start 'show' for object '%s'"
 msgstr "incapaz iniciar 'show' para objeto '%s'"
 
-#: builtin/notes.c:154
+#: builtin/notes.c:153
 msgid "could not read 'show' output"
 msgstr "incapaz ler output de 'show'"
 
-#: builtin/notes.c:162
+#: builtin/notes.c:161
 #, c-format
 msgid "failed to finish 'show' for object '%s'"
 msgstr "falha ao concluir o comando 'show' sobre o objeto '%s'"
 
-#: builtin/notes.c:197
+#: builtin/notes.c:194
 msgid "please supply the note contents using either -m or -F option"
 msgstr "forneça o conteúdo da nota usando a opção -m ou -F"
 
-#: builtin/notes.c:206
+#: builtin/notes.c:203
 msgid "unable to write note object"
 msgstr "incapaz escrever para objeto de nota"
 
-#: builtin/notes.c:208
+#: builtin/notes.c:206
 #, c-format
 msgid "the note contents have been left in %s"
 msgstr "o conteúdo da nota foi colocado em %s"
 
-#: builtin/notes.c:242 builtin/tag.c:576
+#: builtin/notes.c:240 builtin/tag.c:582
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "incapaz abrir ou ler '%s'"
 
-#: builtin/notes.c:263 builtin/notes.c:313 builtin/notes.c:315
-#: builtin/notes.c:383 builtin/notes.c:438 builtin/notes.c:526
-#: builtin/notes.c:531 builtin/notes.c:610 builtin/notes.c:672
+#: builtin/notes.c:261 builtin/notes.c:311 builtin/notes.c:313
+#: builtin/notes.c:381 builtin/notes.c:436 builtin/notes.c:524
+#: builtin/notes.c:529 builtin/notes.c:608 builtin/notes.c:670
 #, c-format
 msgid "failed to resolve '%s' as a valid ref."
 msgstr "falhou resolver '%s' como uma ref válida."
 
-#: builtin/notes.c:265
+#: builtin/notes.c:263
 #, c-format
 msgid "failed to read object '%s'."
 msgstr "falhou ler objeto '%s'."
 
-#: builtin/notes.c:268
+#: builtin/notes.c:266
 #, c-format
 msgid "cannot read note data from non-blob object '%s'."
-msgstr "incapaz ler dados de nota, de objeto não-blob '%s'."
+msgstr "incapaz ler dados de nota, de não-objeto-blob '%s'."
 
-#: builtin/notes.c:309
+#: builtin/notes.c:307
 #, c-format
 msgid "malformed input line: '%s'."
 msgstr "linha de entrada malformada: '%s'."
 
-#: builtin/notes.c:324
+#: builtin/notes.c:322
 #, c-format
 msgid "failed to copy notes from '%s' to '%s'"
 msgstr "falhou copiar notas de '%s' para '%s'"
@@ -18227,48 +19026,41 @@ msgstr "falhou copiar notas de '%s' para '%s'"
 #. TRANSLATORS: the first %s will be replaced by a git
 #. notes command: 'add', 'merge', 'remove', etc.
 #.
-#: builtin/notes.c:356
+#: builtin/notes.c:354
 #, c-format
 msgid "refusing to %s notes in %s (outside of refs/notes/)"
 msgstr "foi recusado efetuar %s de notas em %s (fora de refs/notes/)"
 
-#: builtin/notes.c:376 builtin/notes.c:431 builtin/notes.c:509
-#: builtin/notes.c:521 builtin/notes.c:598 builtin/notes.c:665
-#: builtin/notes.c:815 builtin/notes.c:963 builtin/notes.c:985
-#: builtin/prune-packed.c:25 builtin/tag.c:586
-msgid "too many arguments"
-msgstr ""
-
-#: builtin/notes.c:389 builtin/notes.c:678
+#: builtin/notes.c:387 builtin/notes.c:676
 #, c-format
 msgid "no note found for object %s."
 msgstr "Encontrada nota nenhuma para objeto %s."
 
-#: builtin/notes.c:410 builtin/notes.c:576
+#: builtin/notes.c:408 builtin/notes.c:574
 msgid "note contents as a string"
 msgstr "conteúdo da nota sob a forma de cadeia de caracteres"
 
-#: builtin/notes.c:413 builtin/notes.c:579
+#: builtin/notes.c:411 builtin/notes.c:577
 msgid "note contents in a file"
 msgstr "conteúdo da nota de um ficheiro"
 
-#: builtin/notes.c:416 builtin/notes.c:582
+#: builtin/notes.c:414 builtin/notes.c:580
 msgid "reuse and edit specified note object"
 msgstr "reutilizar e editar o objeto de nota especificado"
 
-#: builtin/notes.c:419 builtin/notes.c:585
+#: builtin/notes.c:417 builtin/notes.c:583
 msgid "reuse specified note object"
 msgstr "reutilizar objeto de nota especificado"
 
-#: builtin/notes.c:422 builtin/notes.c:588
+#: builtin/notes.c:420 builtin/notes.c:586
 msgid "allow storing empty note"
 msgstr "permitir guardar uma nota vazia"
 
-#: builtin/notes.c:423 builtin/notes.c:496
+#: builtin/notes.c:421 builtin/notes.c:494
 msgid "replace existing notes"
 msgstr "substituir notas existentes"
 
-#: builtin/notes.c:448
+#: builtin/notes.c:446
 #, c-format
 msgid ""
 "Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite "
@@ -18277,29 +19069,29 @@ msgstr ""
 "Incapaz adicionar notas. Encontrei notas existentes para objeto %s. Usa '-f' "
 "para subscrever notas existentes"
 
-#: builtin/notes.c:463 builtin/notes.c:544
+#: builtin/notes.c:461 builtin/notes.c:542
 #, c-format
 msgid "Overwriting existing notes for object %s\n"
 msgstr "Gravando por cima, notas existentes para objeto %s\n"
 
-#: builtin/notes.c:475 builtin/notes.c:637 builtin/notes.c:902
+#: builtin/notes.c:473 builtin/notes.c:635 builtin/notes.c:904
 #, c-format
 msgid "Removing note for object %s\n"
 msgstr "Removendo nota para objeto %s\n"
 
-#: builtin/notes.c:497
+#: builtin/notes.c:495
 msgid "read objects from stdin"
 msgstr "ler objetos de stdin"
 
-#: builtin/notes.c:499
+#: builtin/notes.c:497
 msgid "load rewriting config for <command> (implies --stdin)"
 msgstr "carregar configuração de reescrita do <comando> (implica --stdin)"
 
-#: builtin/notes.c:517
+#: builtin/notes.c:515
 msgid "too few arguments"
 msgstr ""
 
-#: builtin/notes.c:538
+#: builtin/notes.c:536
 #, c-format
 msgid ""
 "Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite "
@@ -18308,66 +19100,66 @@ msgstr ""
 "Incapaz copiar notas. Encontrei Notas existentes para objeto %s. Usa '-f' "
 "para subscrever notas existentes"
 
-#: builtin/notes.c:550
+#: builtin/notes.c:548
 #, c-format
 msgid "missing notes on source object %s. Cannot copy."
 msgstr "faltando notas para objeto fonte %s. Incapaz copiar."
 
-#: builtin/notes.c:603
+#: builtin/notes.c:601
 #, c-format
 msgid ""
 "The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n"
 "Please use 'git notes add -f -m/-F/-c/-C' instead.\n"
 msgstr ""
 "As opções -m/-F/-c/-C são obsoletas no subcomando 'edit'.\n"
-"Use 'git notes add -f -m/-F/-c/-C' em seu lugar.\n"
+"Use 'git notes add -f -m/-F/-c/-C' invés.\n"
 
-#: builtin/notes.c:698
+#: builtin/notes.c:696
 msgid "failed to delete ref NOTES_MERGE_PARTIAL"
 msgstr "falha ao eliminar a referência NOTES_MERGE_PARTIAL"
 
-#: builtin/notes.c:700
+#: builtin/notes.c:698
 msgid "failed to delete ref NOTES_MERGE_REF"
 msgstr "falha ao eliminar a referência NOTES_MERGE_REF"
 
-#: builtin/notes.c:702
+#: builtin/notes.c:700
 msgid "failed to remove 'git notes merge' worktree"
-msgstr "falha ao remover árvore-trabalho de 'git notes merge'"
+msgstr "falha ao remover árvore-trabalho de 'git notes merge'"
 
-#: builtin/notes.c:722
+#: builtin/notes.c:720
 msgid "failed to read ref NOTES_MERGE_PARTIAL"
 msgstr "falha ao ler ref NOTES_MERGE_PARTIAL"
 
-#: builtin/notes.c:724
+#: builtin/notes.c:722
 msgid "could not find commit from NOTES_MERGE_PARTIAL."
 msgstr "incapaz encontrar memória a partir de NOTES_MERGE_PARTIAL."
 
-#: builtin/notes.c:726
+#: builtin/notes.c:724
 msgid "could not parse commit from NOTES_MERGE_PARTIAL."
 msgstr "incapaz processar memória a partir de NOTES_MERGE_PARTIAL."
 
-#: builtin/notes.c:739
+#: builtin/notes.c:737
 msgid "failed to resolve NOTES_MERGE_REF"
 msgstr "falha ao resolver NOTES_MERGE_REF"
 
-#: builtin/notes.c:742
+#: builtin/notes.c:740
 msgid "failed to finalize notes merge"
 msgstr "falhou finalizar junção de notas"
 
-#: builtin/notes.c:768
+#: builtin/notes.c:766
 #, c-format
 msgid "unknown notes merge strategy %s"
-msgstr "estratégia de integração de notas %s desconhecida"
+msgstr "estratégia de junção de notas %s desconhecida"
 
-#: builtin/notes.c:784
+#: builtin/notes.c:782
 msgid "General options"
 msgstr "Opções gerais"
 
-#: builtin/notes.c:786
+#: builtin/notes.c:784
 msgid "Merge options"
 msgstr "Opções de junção"
 
-#: builtin/notes.c:788
+#: builtin/notes.c:786
 msgid ""
 "resolve notes conflicts using the given strategy (manual/ours/theirs/union/"
 "cat_sort_uniq)"
@@ -18375,91 +19167,91 @@ msgstr ""
 "resolver conflitos nas notas usando a estratégia indicada (manual/ours/"
 "theirs/union/cat_sort_uniq)"
 
-#: builtin/notes.c:790
+#: builtin/notes.c:788
 msgid "Committing unmerged notes"
 msgstr "Memorizando notas por juntar"
 
-#: builtin/notes.c:792
+#: builtin/notes.c:790
 msgid "finalize notes merge by committing unmerged notes"
-msgstr "concluir junção de notas, memorizando notas por juntar"
+msgstr "finaliza junção de notas, memorizando notas por juntar"
 
-#: builtin/notes.c:794
+#: builtin/notes.c:792
 msgid "Aborting notes merge resolution"
-msgstr "A abortar resolução de integração das notas"
+msgstr "Abortando resolução de junção das notas"
 
-#: builtin/notes.c:796
+#: builtin/notes.c:794
 msgid "abort notes merge"
-msgstr "abortar integração das notas"
+msgstr "abortar junção das notas"
 
-#: builtin/notes.c:807
+#: builtin/notes.c:805
 msgid "cannot mix --commit, --abort or -s/--strategy"
 msgstr "incapaz misturar --commit, --abort ou -s/--strategy"
 
-#: builtin/notes.c:812
+#: builtin/notes.c:810
 msgid "must specify a notes ref to merge"
-msgstr "tem de especificar uma referência de notas para integrar"
+msgstr "tens de especificar uma ref de notas para juntar"
 
-#: builtin/notes.c:836
+#: builtin/notes.c:834
 #, c-format
 msgid "unknown -s/--strategy: %s"
 msgstr "-s/--strategy desconhecida: %s"
 
-#: builtin/notes.c:873
+#: builtin/notes.c:874
 #, c-format
 msgid "a notes merge into %s is already in-progress at %s"
-msgstr "uma integração das notas em %s já está em curso em %s"
+msgstr "uma junção das notas para %s já está em curso em %s"
 
-#: builtin/notes.c:876
+#: builtin/notes.c:878
 #, c-format
 msgid "failed to store link to current notes ref (%s)"
 msgstr "falhou ao guardar ligação à ref de notas atual (%s)"
 
-#: builtin/notes.c:878
+#: builtin/notes.c:880
 #, c-format
 msgid ""
 "Automatic notes merge failed. Fix conflicts in %s and commit the result with "
 "'git notes merge --commit', or abort the merge with 'git notes merge --"
 "abort'.\n"
 msgstr ""
-"A integração automática de notas falhou. Corrija os conflitos em %s e "
-"submeta o resultado com 'git notes merge --commit' ou aborte a integração "
-"com 'git notes merge --abort'.\n"
+"Junção automática de notas falhou. Conserta os conflitos em %s e memoriza o "
+"resultado com 'git notes merge --commit', ou aborta a junção com 'git notes "
+"merge --abort'.\n"
 
-#: builtin/notes.c:897 builtin/tag.c:589
+#: builtin/notes.c:899 builtin/tag.c:595
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "Falha ao resolver '%s' numa referência válida."
 
-#: builtin/notes.c:900
+#: builtin/notes.c:902
 #, c-format
 msgid "Object %s has no note\n"
 msgstr "O objeto %s tem nota nenhuma\n"
 
-#: builtin/notes.c:912
+#: builtin/notes.c:914
 msgid "attempt to remove non-existent note is not an error"
 msgstr "apenas é erro se remover nota existente"
 
-#: builtin/notes.c:915
+#: builtin/notes.c:917
 msgid "read object names from the standard input"
 msgstr "ler nome dos objetos da entrada padrão"
 
-#: builtin/notes.c:954 builtin/prune.c:132 builtin/worktree.c:146
+#: builtin/notes.c:956 builtin/prune.c:144 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr "remover nada, apenas mostrar"
 
-#: builtin/notes.c:955
+#: builtin/notes.c:957
 msgid "report pruned notes"
 msgstr "reportar notas podadas"
 
-#: builtin/notes.c:998
+#: builtin/notes.c:1000
 msgid "notes-ref"
 msgstr "notes-ref"
 
-#: builtin/notes.c:999
+#: builtin/notes.c:1001
 msgid "use notes from <notes-ref>"
 msgstr "usar notas de <notes-ref>"
 
-#: builtin/notes.c:1034 builtin/stash.c:1735
+#: builtin/notes.c:1036 builtin/stash.c:1802
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "subcomando desconhecido: %s"
@@ -18478,397 +19270,393 @@ msgstr ""
 "git pack-objects [<opções>...] <nome-base> [< <lista-referências> | < <lista-"
 "objetos>]"
 
-#: builtin/pack-objects.c:572
+#: builtin/pack-objects.c:570
 #, c-format
 msgid ""
 "write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
 "pack %s"
 msgstr ""
 
-#: builtin/pack-objects.c:580
+#: builtin/pack-objects.c:578
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr ""
 
-#: builtin/pack-objects.c:591
+#: builtin/pack-objects.c:589
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr ""
 
-#: builtin/pack-objects.c:722
+#: builtin/pack-objects.c:720
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr "delta recursivo detetado para objeto %s"
 
-#: builtin/pack-objects.c:941
+#: builtin/pack-objects.c:939
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr ""
 
-#: builtin/pack-objects.c:1036
+#: builtin/pack-objects.c:1034
 #, c-format
 msgid "expected object at offset %<PRIuMAX> in pack %s"
 msgstr "esperado objeto no offset %<PRIuMAX> em pacote %s"
 
-#: builtin/pack-objects.c:1155
+#: builtin/pack-objects.c:1158
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr ""
 "a desativar escrita de mapa de bits, os pacotes são divididos devido a pack."
 "packSizeLimit"
 
-#: builtin/pack-objects.c:1168
+#: builtin/pack-objects.c:1171
 msgid "Writing objects"
 msgstr ""
 
-#: builtin/pack-objects.c:1229 builtin/update-index.c:90
+#: builtin/pack-objects.c:1243 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "falhou stat a %s"
 
-#: builtin/pack-objects.c:1281
+#: builtin/pack-objects.c:1276
+msgid "failed to write bitmap index"
+msgstr "falhou escrever índice de bitmap"
+
+#: builtin/pack-objects.c:1302
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr ""
 
-#: builtin/pack-objects.c:1523
+#: builtin/pack-objects.c:1544
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr ""
 "desativando escrita bitmap, visto a incapacidade de alguns objetos serem "
 "compactados"
 
-#: builtin/pack-objects.c:1971
+#: builtin/pack-objects.c:1992
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr ""
 
-#: builtin/pack-objects.c:1980
+#: builtin/pack-objects.c:2001
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "offset de base delta está fora do limite para %s"
 
-#: builtin/pack-objects.c:2261
+#: builtin/pack-objects.c:2282
 msgid "Counting objects"
 msgstr "A contar objetos"
 
-#: builtin/pack-objects.c:2426
+#: builtin/pack-objects.c:2447
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "incapaz processar cabeçalho de objeto de %s"
 
-#: builtin/pack-objects.c:2496 builtin/pack-objects.c:2512
-#: builtin/pack-objects.c:2522
+#: builtin/pack-objects.c:2517 builtin/pack-objects.c:2533
+#: builtin/pack-objects.c:2543
 #, c-format
 msgid "object %s cannot be read"
 msgstr "objeto %s incapaz ser lido"
 
-#: builtin/pack-objects.c:2499 builtin/pack-objects.c:2526
+#: builtin/pack-objects.c:2520 builtin/pack-objects.c:2547
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr ""
 
-#: builtin/pack-objects.c:2536
+#: builtin/pack-objects.c:2557
 msgid "suboptimal pack - out of memory"
 msgstr ""
 
-#: builtin/pack-objects.c:2851
+#: builtin/pack-objects.c:2872
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr ""
 
-#: builtin/pack-objects.c:2990
+#: builtin/pack-objects.c:3011
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "incapaz de empacotar objetos alcançáveis a partir de etiqueta %s"
 
-#: builtin/pack-objects.c:3076
+#: builtin/pack-objects.c:3097
 msgid "Compressing objects"
 msgstr "Comprimindo objetos"
 
-#: builtin/pack-objects.c:3082
+#: builtin/pack-objects.c:3103
 msgid "inconsistency with delta count"
 msgstr ""
 
-#: builtin/pack-objects.c:3161
+#: builtin/pack-objects.c:3182
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
 "hash> <uri>' (got '%s')"
 msgstr ""
 
-#: builtin/pack-objects.c:3164
+#: builtin/pack-objects.c:3185
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
 msgstr ""
 
-#: builtin/pack-objects.c:3199
+#: builtin/pack-objects.c:3220
 #, c-format
 msgid "could not get type of object %s in pack %s"
 msgstr "incapaz obter tipo de objeto %s em pacote %s"
 
-#: builtin/pack-objects.c:3321 builtin/pack-objects.c:3335
+#: builtin/pack-objects.c:3348 builtin/pack-objects.c:3359
+#: builtin/pack-objects.c:3373
 #, c-format
 msgid "could not find pack '%s'"
 msgstr "incapaz encontrar pacote '%s'"
 
-#: builtin/pack-objects.c:3378
+#: builtin/pack-objects.c:3416
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
 " %s"
 msgstr ""
 
-#: builtin/pack-objects.c:3384
+#: builtin/pack-objects.c:3422
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
 " %s"
 msgstr ""
 
-#: builtin/pack-objects.c:3482
-msgid "invalid value for --missing"
-msgstr ""
-
-#: builtin/pack-objects.c:3541 builtin/pack-objects.c:3650
+#: builtin/pack-objects.c:3540 builtin/pack-objects.c:3627
 msgid "cannot open pack index"
-msgstr "incapaz abrir index pack"
+msgstr "incapaz abrir índice de pacote"
 
-#: builtin/pack-objects.c:3572
+#: builtin/pack-objects.c:3549
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr ""
 
-#: builtin/pack-objects.c:3658
+#: builtin/pack-objects.c:3635
 msgid "unable to force loose object"
 msgstr "incapaz forçar objeto solto"
 
-#: builtin/pack-objects.c:3788
+#: builtin/pack-objects.c:3763
 #, c-format
 msgid "not a rev '%s'"
 msgstr "rev '%s' nenhum"
 
-#: builtin/pack-objects.c:3791 builtin/rev-parse.c:1061
+#: builtin/pack-objects.c:3766 builtin/rev-parse.c:1061
 #, c-format
 msgid "bad revision '%s'"
 msgstr "revisão '%s' incorreto"
 
-#: builtin/pack-objects.c:3819
+#: builtin/pack-objects.c:3794
 msgid "unable to add recent objects"
 msgstr "incapaz adicionar objetos recentes"
 
-#: builtin/pack-objects.c:3872
+#: builtin/pack-objects.c:3847
 #, c-format
 msgid "unsupported index version %s"
-msgstr "versão de index %s insustentada"
+msgstr "versão de cenário %s insustentada"
 
-#: builtin/pack-objects.c:3876
+#: builtin/pack-objects.c:3851
 #, c-format
 msgid "bad index version '%s'"
 msgstr "versão de cenário '%s' inválida"
 
-#: builtin/pack-objects.c:3915
+#: builtin/pack-objects.c:3907
 msgid "<version>[,<offset>]"
 msgstr "versão[,offset]"
 
-#: builtin/pack-objects.c:3916
+#: builtin/pack-objects.c:3908
 msgid "write the pack index file in the specified idx format version"
 msgstr ""
 "escrever o ficheiro de índice do pacote na versão de formato especificada"
 
-#: builtin/pack-objects.c:3919
+#: builtin/pack-objects.c:3911
 msgid "maximum size of each output pack file"
 msgstr "tamanho máximo de cada saída de ficheiro-pacote"
 
-#: builtin/pack-objects.c:3921
+#: builtin/pack-objects.c:3913
 msgid "ignore borrowed objects from alternate object store"
-msgstr "ignorar objetos emprestados do arquivo de objetos sobressalentes"
+msgstr "ignorar objetos emprestados do arquivo de objetos alternativos"
 
-#: builtin/pack-objects.c:3923
+#: builtin/pack-objects.c:3915
 msgid "ignore packed objects"
 msgstr ""
 
-#: builtin/pack-objects.c:3925
+#: builtin/pack-objects.c:3917
 msgid "limit pack window by objects"
 msgstr "limitar a janela de compactação por objetos"
 
-#: builtin/pack-objects.c:3927
+#: builtin/pack-objects.c:3919
 msgid "limit pack window by memory in addition to object limit"
 msgstr ""
 "limitar a janela de compactação por memória em adição ao limite por objetos"
 
-#: builtin/pack-objects.c:3929
+#: builtin/pack-objects.c:3921
 msgid "maximum length of delta chain allowed in the resulting pack"
-msgstr "tamanho máximo de cadeias delta permitidas no pacote resultante"
+msgstr "tamanho máximo de série delta permitido no pacote resultante"
 
-#: builtin/pack-objects.c:3931
+#: builtin/pack-objects.c:3923
 msgid "reuse existing deltas"
 msgstr "reutilizar deltas existentes"
 
-#: builtin/pack-objects.c:3933
+#: builtin/pack-objects.c:3925
 msgid "reuse existing objects"
 msgstr "reutilizar objetos existentes"
 
-#: builtin/pack-objects.c:3935
+#: builtin/pack-objects.c:3927
 msgid "use OFS_DELTA objects"
 msgstr "usar objetos OFS_DELTA"
 
-#: builtin/pack-objects.c:3937
+#: builtin/pack-objects.c:3929
 msgid "use threads when searching for best delta matches"
 msgstr "usar threads ao procurar pela melhor correspondência delta"
 
-#: builtin/pack-objects.c:3939
+#: builtin/pack-objects.c:3931
 msgid "do not create an empty pack output"
 msgstr "criar output de pack vazio nenhum"
 
-#: builtin/pack-objects.c:3941
+#: builtin/pack-objects.c:3933
 msgid "read revision arguments from standard input"
 msgstr "ler argumentos de revisão da entrada padrão"
 
-#: builtin/pack-objects.c:3943
+#: builtin/pack-objects.c:3935
 msgid "limit the objects to those that are not yet packed"
 msgstr "restringir-se aos objetos que ainda estão por compactar"
 
-#: builtin/pack-objects.c:3946
+#: builtin/pack-objects.c:3938
 msgid "include objects reachable from any reference"
 msgstr "incluir objetos alcançáveis a partir de qualquer referência"
 
-#: builtin/pack-objects.c:3949
+#: builtin/pack-objects.c:3941
 msgid "include objects referred by reflog entries"
 msgstr "incluir objetos referenciados por entradas do reflog"
 
-#: builtin/pack-objects.c:3952
+#: builtin/pack-objects.c:3944
 msgid "include objects referred to by the index"
-msgstr "incluir objetos referenciados pelo índice"
+msgstr "incluir objetos referenciados pelo cenário"
 
-#: builtin/pack-objects.c:3955
+#: builtin/pack-objects.c:3947
 msgid "read packs from stdin"
 msgstr ""
 
-#: builtin/pack-objects.c:3957
+#: builtin/pack-objects.c:3949
 msgid "output pack to stdout"
 msgstr "gerar pacote para a saída padrão"
 
-#: builtin/pack-objects.c:3959
+#: builtin/pack-objects.c:3951
 msgid "include tag objects that refer to objects to be packed"
-msgstr "incluir objetos tag que refiram objetos a compactar"
+msgstr "incluir objetos-etiqueta que refiram objetos a empacotar"
 
-#: builtin/pack-objects.c:3961
+#: builtin/pack-objects.c:3953
 msgid "keep unreachable objects"
 msgstr "manter objetos inalcançáveis"
 
-#: builtin/pack-objects.c:3963
+#: builtin/pack-objects.c:3955
 msgid "pack loose unreachable objects"
 msgstr "empacotar objetos soltos inalcançáveis"
 
-#: builtin/pack-objects.c:3965
+#: builtin/pack-objects.c:3957
 msgid "unpack unreachable objects newer than <time>"
 msgstr "descompactar objetos inalcançáveis mais recentes que <tempo>"
 
-#: builtin/pack-objects.c:3968
+#: builtin/pack-objects.c:3960
 msgid "use the sparse reachability algorithm"
 msgstr ""
 
-#: builtin/pack-objects.c:3970
+#: builtin/pack-objects.c:3962
 msgid "create thin packs"
 msgstr "criar pacotes finos"
 
-#: builtin/pack-objects.c:3972
+#: builtin/pack-objects.c:3964
 msgid "create packs suitable for shallow fetches"
-msgstr "criar pacotes adequados para obter em repositórios pouco profundos"
+msgstr "criar pacotes adequados para buscas superficiais"
 
-#: builtin/pack-objects.c:3974
+#: builtin/pack-objects.c:3966
 msgid "ignore packs that have companion .keep file"
 msgstr "ignorar pacotes que tenham um ficheiro .keep"
 
-#: builtin/pack-objects.c:3976
+#: builtin/pack-objects.c:3968
 msgid "ignore this pack"
 msgstr "ignorar este pacote"
 
-#: builtin/pack-objects.c:3978
+#: builtin/pack-objects.c:3970
 msgid "pack compression level"
 msgstr "nível de compressão de pacote"
 
-#: builtin/pack-objects.c:3980
+#: builtin/pack-objects.c:3972
 msgid "do not hide commits by grafts"
-msgstr "esconder commits por enxertos nenhuns"
+msgstr "esconder nenhumas memórias por enxertos"
 
-#: builtin/pack-objects.c:3982
+#: builtin/pack-objects.c:3974
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr ""
-"usar um índice de mapa de bits se disponível, para acelerar a contagem de "
-"objetos"
+"usar um índice de bitmap se disponível, para acelerar a contagem de objetos"
 
-#: builtin/pack-objects.c:3984
+#: builtin/pack-objects.c:3976
 msgid "write a bitmap index together with the pack index"
-msgstr "escrever um índice de mapa de bits juntamente com o índice do pacote"
+msgstr "escrever um índice de bitmap juntamente com o índice do pacote"
 
-#: builtin/pack-objects.c:3988
+#: builtin/pack-objects.c:3980
 msgid "write a bitmap index if possible"
-msgstr "escrever um index de bitmap se possível"
+msgstr "escrever um índice de bitmap se possível"
 
-#: builtin/pack-objects.c:3992
+#: builtin/pack-objects.c:3984
 msgid "handling for missing objects"
 msgstr "lidando para objetos que faltem"
 
-#: builtin/pack-objects.c:3995
+#: builtin/pack-objects.c:3987
 msgid "do not pack objects in promisor packfiles"
 msgstr ""
 
-#: builtin/pack-objects.c:3997
+#: builtin/pack-objects.c:3989
 msgid "respect islands during delta compression"
 msgstr "respeitar ilhas durante compressão de delta"
 
-#: builtin/pack-objects.c:3999
+#: builtin/pack-objects.c:3991
 msgid "protocol"
 msgstr ""
 
-#: builtin/pack-objects.c:4000
+#: builtin/pack-objects.c:3992
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr ""
 
-#: builtin/pack-objects.c:4033
+#: builtin/pack-objects.c:4027
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
-msgstr ""
+msgstr "profundidade de série delta %d é demasiado profunda, forçando %d"
 
-#: builtin/pack-objects.c:4038
+#: builtin/pack-objects.c:4032
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr ""
 
-#: builtin/pack-objects.c:4094
+#: builtin/pack-objects.c:4088
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 
-#: builtin/pack-objects.c:4096
+#: builtin/pack-objects.c:4090
 msgid "minimum pack size limit is 1 MiB"
 msgstr ""
 
-#: builtin/pack-objects.c:4101
+#: builtin/pack-objects.c:4095
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "incapaz usar --thin para construir pacote indexável"
 
 #: builtin/pack-objects.c:4104
-msgid "--keep-unreachable and --unpack-unreachable are incompatible"
-msgstr "--keep-unreachable e --unpack-unreachable são incompatíveis"
-
-#: builtin/pack-objects.c:4110
 msgid "cannot use --filter without --stdout"
 msgstr "apenas podes usar --filter com --stdout"
 
-#: builtin/pack-objects.c:4112
+#: builtin/pack-objects.c:4106
 msgid "cannot use --filter with --stdin-packs"
 msgstr "incapaz usar --filter com --stdin-packs"
 
-#: builtin/pack-objects.c:4116
+#: builtin/pack-objects.c:4110
 msgid "cannot use internal rev list with --stdin-packs"
 msgstr ""
 
-#: builtin/pack-objects.c:4175
+#: builtin/pack-objects.c:4169
 msgid "Enumerating objects"
 msgstr ""
 
-#: builtin/pack-objects.c:4212
+#: builtin/pack-objects.c:4210
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -18896,88 +19684,78 @@ msgstr "compactar tudo"
 msgid "prune loose refs (default)"
 msgstr "podar refs soltas (predefinição)"
 
-#: builtin/prune-packed.c:6
-msgid "git prune-packed [-n | --dry-run] [-q | --quiet]"
-msgstr "git prune-packed [-n | --dry-run] [-q | --quiet]"
-
 #: builtin/prune.c:14
 msgid "git prune [-n] [-v] [--progress] [--expire <time>] [--] [<head>...]"
 msgstr "git prune [-n] [-v] [--progress] [--expire <tempo>] [--] [<cabeça>...]"
 
-#: builtin/prune.c:133
+#: builtin/prune.c:145
 msgid "report pruned objects"
 msgstr "apresentar objetos eliminados"
 
-#: builtin/prune.c:136
+#: builtin/prune.c:148
 msgid "expire objects older than <time>"
 msgstr "expirar objetos mais velhos que <tempo>"
 
-#: builtin/prune.c:138
+#: builtin/prune.c:150
 msgid "limit traversal to objects outside promisor packfiles"
 msgstr ""
 
-#: builtin/prune.c:152
+#: builtin/prune.c:163
 msgid "cannot prune in a precious-objects repo"
 msgstr "incapaz podar num repo de precious-objects"
 
-#: builtin/pull.c:45 builtin/pull.c:47
-#, c-format
-msgid "Invalid value for %s: %s"
-msgstr "Valor inválido de %s: %s"
-
 #: builtin/pull.c:67
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
 msgstr "git pull [<opções>] [<repositório> [<espetro-ref>...]]"
 
-#: builtin/pull.c:123
+#: builtin/pull.c:124
 msgid "control for recursive fetching of submodules"
 msgstr "controlo para buscar recursivo de submódulos"
 
-#: builtin/pull.c:127
+#: builtin/pull.c:128
 msgid "Options related to merging"
-msgstr "Opções relativas a integração"
+msgstr "Opções relativas a fazer junção"
 
-#: builtin/pull.c:130
+#: builtin/pull.c:131
 msgid "incorporate changes by rebasing rather than merging"
-msgstr "incorporar alterações por rebase em vez de integrar"
+msgstr "incorporar alterações fazendo rebase em vez de junção"
 
-#: builtin/pull.c:158 builtin/rebase.c:491 builtin/revert.c:126
+#: builtin/pull.c:159 builtin/revert.c:126
 msgid "allow fast-forward"
-msgstr "permitir avanço rápido"
+msgstr "permitir avanço"
 
-#: builtin/pull.c:167 parse-options.h:340
+#: builtin/pull.c:165
+msgid "control use of pre-merge-commit and commit-msg hooks"
+msgstr "uso controlado de ganchos pre-merge-commit e commit-msg"
+
+#: builtin/pull.c:171 parse-options.h:371
 msgid "automatically stash/stash pop before and after"
-msgstr "empilhar/desempilhar automaticamente antes de depois de rebase"
+msgstr "fazer stash/stash pop automaticamente antes e depois de"
 
-#: builtin/pull.c:183
+#: builtin/pull.c:187
 msgid "Options related to fetching"
-msgstr "Opções relacionadas com obtenção de objetos"
+msgstr "Opções relacionadas com buscas"
 
-#: builtin/pull.c:193
+#: builtin/pull.c:197
 msgid "force overwrite of local branch"
 msgstr "forçar sobrescrever ramo local"
 
-#: builtin/pull.c:201
+#: builtin/pull.c:205
 msgid "number of submodules pulled in parallel"
 msgstr "número de submódulos com pull em paralelo"
 
-#: builtin/pull.c:317
-#, c-format
-msgid "Invalid value for pull.ff: %s"
-msgstr "Valor inválido de pull.ff: %s"
-
-#: builtin/pull.c:445
+#: builtin/pull.c:449
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
 "fetched."
 msgstr "As refs que obteste tem candidato nenhum para onde rebasear."
 
-#: builtin/pull.c:447
+#: builtin/pull.c:451
 msgid ""
 "There are no candidates for merging among the refs that you just fetched."
 msgstr "As refs que obteste tem candidato nenhum para junção."
 
-#: builtin/pull.c:448
+#: builtin/pull.c:452
 msgid ""
 "Generally this means that you provided a wildcard refspec which had no\n"
 "matches on the remote end."
@@ -18985,7 +19763,7 @@ msgstr ""
 "Normalmente isto significa que forneceste um wildcard especificador de ref\n"
 "que tem correspondência nenhuma no lado do remoto."
 
-#: builtin/pull.c:451
+#: builtin/pull.c:455
 #, c-format
 msgid ""
 "You asked to pull from the remote '%s', but did not specify\n"
@@ -18994,69 +19772,70 @@ msgid ""
 msgstr ""
 "Pediste para agarrar remoto '%s', mas falta especificar um ramo.\n"
 "Visto que o remoto configurado como predefinido para o ramo atual é\n"
-"outro, deves de especificar um ramo na linha de comandos."
+"outro, tens de especificar um ramo na linha de comandos."
 
-#: builtin/pull.c:456 builtin/rebase.c:1248
+#: builtin/pull.c:460 builtin/rebase.c:978
 msgid "You are not currently on a branch."
 msgstr "Atualmente estás em ramo nenhum."
 
-#: builtin/pull.c:458 builtin/pull.c:473
+#: builtin/pull.c:462 builtin/pull.c:477
 msgid "Please specify which branch you want to rebase against."
 msgstr "Especifique o ramo sobre o qual pretende realizar rebase."
 
-#: builtin/pull.c:460 builtin/pull.c:475
+#: builtin/pull.c:464 builtin/pull.c:479
 msgid "Please specify which branch you want to merge with."
-msgstr "Especifique o ramo com o qual pretende integrar."
+msgstr "Por favor especifica para qual ramo queres juntar."
 
-#: builtin/pull.c:461 builtin/pull.c:476
+#: builtin/pull.c:465 builtin/pull.c:480
 msgid "See git-pull(1) for details."
 msgstr "Vê git-pull(1) para detalhes."
 
-#: builtin/pull.c:463 builtin/pull.c:469 builtin/pull.c:478
-#: builtin/rebase.c:1254
+#: builtin/pull.c:467 builtin/pull.c:473 builtin/pull.c:482
+#: builtin/rebase.c:984
 msgid "<remote>"
 msgstr "<remoto>"
 
-#: builtin/pull.c:463 builtin/pull.c:478 builtin/pull.c:483
+#: builtin/pull.c:467 builtin/pull.c:482 builtin/pull.c:487
+#: contrib/scalar/scalar.c:374
 msgid "<branch>"
 msgstr "<ramo>"
 
-#: builtin/pull.c:471 builtin/rebase.c:1246
+#: builtin/pull.c:475 builtin/rebase.c:976
 msgid "There is no tracking information for the current branch."
-msgstr "O ramo atual tem informação de tracking nenhuma."
+msgstr "O ramo atual tem informação de monitorização nenhuma."
 
-#: builtin/pull.c:480
+#: builtin/pull.c:484
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:"
 msgstr ""
-"Se deseja definir o ramo que deve ser seguido por este ramo, pode fazê-lo "
+"Se queres definir informação de monitorização para este ramo, pode fazê-lo "
 "com:"
 
-#: builtin/pull.c:485
+#: builtin/pull.c:489
 #, c-format
 msgid ""
 "Your configuration specifies to merge with the ref '%s'\n"
 "from the remote, but no such ref was fetched."
 msgstr ""
-"Tua configuração indica para juntar com ref '%s'\n"
-"a partir do remoto, mas essa ref está por buscar."
+"Tua configuração indica para, a partir do remoto, juntar\n"
+"com ref '%s', mas apenas outras refs foram buscadas."
 
-#: builtin/pull.c:596
+#: builtin/pull.c:600
 #, c-format
 msgid "unable to access commit %s"
-msgstr "incapaz acessar commit %s"
+msgstr "incapaz acessar memória %s"
 
-#: builtin/pull.c:902
+#: builtin/pull.c:908
 msgid "ignoring --verify-signatures for rebase"
 msgstr "ignorando --verify-signatures para rebase"
 
-#: builtin/pull.c:930
+#: builtin/pull.c:969
 msgid ""
-"Pulling without specifying how to reconcile divergent branches is\n"
-"discouraged. You can squelch this message by running one of the following\n"
-"commands sometime before your next pull:\n"
+"You have divergent branches and need to specify how to reconcile them.\n"
+"You can do so by running one of the following commands sometime before\n"
+"your next pull:\n"
 "\n"
-"  git config pull.rebase false  # merge (the default strategy)\n"
+"  git config pull.rebase false  # merge\n"
 "  git config pull.rebase true   # rebase\n"
 "  git config pull.ff only       # fast-forward only\n"
 "\n"
@@ -19067,30 +19846,31 @@ msgid ""
 "invocation.\n"
 msgstr ""
 
-#: builtin/pull.c:990
+#: builtin/pull.c:1047
 msgid "Updating an unborn branch with changes added to the index."
-msgstr "Atualizando um ramo por nascer com alterações adicionadas ao índex."
+msgstr ""
+"Atualizando um ramo por nascer com as alterações adicionadas ao cenário."
 
-#: builtin/pull.c:994
+#: builtin/pull.c:1051
 msgid "pull with rebase"
 msgstr "pull com rebase"
 
-#: builtin/pull.c:995
+#: builtin/pull.c:1052
 msgid "please commit or stash them."
-msgstr "submeta ou esconda-as."
+msgstr "por favor, memoriza ou esconde-as."
 
-#: builtin/pull.c:1020
+#: builtin/pull.c:1077
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
 "fast-forwarding your working tree from\n"
 "commit %s."
 msgstr ""
-"o fetch atualizou a cabeça do ramo atual.\n"
-"a avançar a árvore de trabalho a partir do\n"
-"commit %s."
+"a busca atualizou a cabeça de ramo atual.\n"
+"avançando tua árvore-trabalho da memória\n"
+"%s."
 
-#: builtin/pull.c:1026
+#: builtin/pull.c:1083
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -19100,24 +19880,32 @@ msgid ""
 "$ git reset --hard\n"
 "to recover."
 msgstr ""
-"Incapaz de fast-forward a tua working tree.\n"
-"Após confirmares que guardaste algo precioso do resultado de\n"
+"Incapaz de avançar tua árvore-trabalho.\n"
+"Após confirmares que guardaste algo precioso da saída de\n"
 "$ git diff %s\n"
-"execute\n"
+"executa\n"
 "$ git reset --hard\n"
 "para recuperar."
 
-#: builtin/pull.c:1041
+#: builtin/pull.c:1098
 msgid "Cannot merge multiple branches into empty head."
-msgstr "Incapaz de juntar ramos múltiplos para head vazia."
+msgstr "Incapaz de juntar ramos múltiplos para cabeça vazia."
 
-#: builtin/pull.c:1045
+#: builtin/pull.c:1103
 msgid "Cannot rebase onto multiple branches."
 msgstr "Incapaz de rebasear sobre ramos múltiplos."
 
-#: builtin/pull.c:1065
+#: builtin/pull.c:1105
+msgid "Cannot fast-forward to multiple branches."
+msgstr "Incapaz de avançar para ramos múltiplos."
+
+#: builtin/pull.c:1120
+msgid "Need to specify how to reconcile divergent branches."
+msgstr "Precisas de especificar como reconciliar ramos divergentes."
+
+#: builtin/pull.c:1134
 msgid "cannot rebase with locally recorded submodule modifications"
-msgstr ""
+msgstr "incapaz rebasear com modificações locais guardadas no submódulo"
 
 #: builtin/push.c:19
 msgid "git push [<options>] [<repository> [<refspec>...]]"
@@ -19154,8 +19942,8 @@ msgid ""
 "    git push %s HEAD\n"
 "%s"
 msgstr ""
-"Ramo upstream do ramo atual corresponde com nome ramo atual nenhum.\n"
-"Para atirar para ramo upstream do remoto, usa\n"
+"Ramo upstream de ramo atual corresponde com nenhum nome de ramo atual.\n"
+"Para atirar para o ramo upstream no remoto, usa\n"
 "\n"
 "    git push %s HEAD:%s\n"
 "\n"
@@ -19174,7 +19962,7 @@ msgid ""
 "    git push %s HEAD:<name-of-remote-branch>\n"
 msgstr ""
 "Atualmente estás em ramo nenhum.\n"
-"Para atirar a história que leva ao estado atual (HEAD solta), usa\n"
+"Para atirar a história que leva ao estado atual (HEAD desanexada), usa\n"
 "\n"
 "    git push %s HEAD:<nome-de-ramo-remoto>\n"
 
@@ -19194,7 +19982,7 @@ msgstr ""
 #: builtin/push.c:199
 #, c-format
 msgid "The current branch %s has multiple upstream branches, refusing to push."
-msgstr "O ramo atual %s tem múltiplos ramos a montante, publicação recusada."
+msgstr "O ramo atual %s tem múltiplos ramos upstream, recusando atirar."
 
 #: builtin/push.c:217
 msgid ""
@@ -19210,7 +19998,7 @@ msgid ""
 msgstr ""
 "Estás atirando para remoto '%s', que é nenhum upstream do teu\n"
 "ramo atual '%s', sem dizer-me o que atirar para atualizar\n"
-"um qualquer ramo remoto."
+"qual ramo remoto."
 
 #: builtin/push.c:258
 msgid ""
@@ -19219,10 +20007,10 @@ msgid ""
 "'git pull ...') before pushing again.\n"
 "See the 'Note about fast-forwards' in 'git push --help' for details."
 msgstr ""
-"As atualizações foram rejeitadas porque a ponta do ramo atual está atrasada\n"
-"em relação ao homólogo remoto. Integre as alterações remotas (e.g.\n"
-"'git pull ...') antes de publicar de novo.\n"
-"Consulte 'Note about fast-forwards' em 'git push --help' para obter detalhes."
+"Atualizações foram rejeitadas porque a ponta do ramo atual está atrasada\n"
+"em relação ao homólogo remoto. Integra as alterações remotas (e.g.\n"
+"'git pull ...') antes de atirares novamente.\n"
+"Para detalhes, vê a 'Note about fast-forwards' em 'git push --help'."
 
 #: builtin/push.c:264
 msgid ""
@@ -19231,10 +20019,10 @@ msgid ""
 "(e.g. 'git pull ...') before pushing again.\n"
 "See the 'Note about fast-forwards' in 'git push --help' for details."
 msgstr ""
-"As atualizações foram rejeitadas porque a ponta do ramo atual está atrasada\n"
-"em relação ao homólogo remoto. Extraia o ramo e integre\n"
-"as alterações remotas (e.g. 'git pull ...') antes de publicar de novo.\n"
-"Consulte 'Note about fast-forwards' em 'git push --help' para obter detalhes."
+"Atualizações foram rejeitadas porque a ponta de atirar do ramo está\n"
+"atrasada em relação ao homólogo remoto. Observa este ramo e integra as\n"
+"alterações remotas (e.g. 'git pull ...') antes de atirares novamente.\n"
+"Para detalhes, vê a 'Note about fast-forwards' em 'git push --help'."
 
 #: builtin/push.c:270
 msgid ""
@@ -19245,14 +20033,16 @@ msgid ""
 "See the 'Note about fast-forwards' in 'git push --help' for details."
 msgstr ""
 "Atualizações foram rejeitadas porque o remoto contém trabalho diferente\n"
-"do teu trabalho local. A causa, normalmente, é um push para a mesma ref.\n"
-"Podes tentar integrar as diferenças remotas (p.e., 'git pull ...') antes\n"
-"de fazeres novo push.\n"
-"Vê a 'Note about fast-forwards' do 'git push --help' para detalhes."
+"do teu trabalho local. A causa, normalmente, é um atirar para a mesma ref.\n"
+"Podes tentar, primeiro, integrar as diferenças remotas (e.g., 'git "
+"pull ...')\n"
+"antes de atirares novamente.\n"
+"Para detalhes, vê a 'Note about fast-forwards' em 'git push --help'."
 
 #: builtin/push.c:277
 msgid "Updates were rejected because the tag already exists in the remote."
-msgstr "As atualizações foram rejeitadas porque a tag já existe no remoto."
+msgstr ""
+"As atualizações foram rejeitadas porque a etiqueta já existe no remoto."
 
 #: builtin/push.c:280
 msgid ""
@@ -19260,9 +20050,9 @@ msgid ""
 "or update a remote ref to make it point at a non-commit object,\n"
 "without using the '--force' option.\n"
 msgstr ""
-"És impedido de atualizar uma ref remota que aponte para um objecto\n"
-"fora de commit, ou atualizar uma ref remota fazendo-a apontar para um\n"
-"objeto fora de commit, sem usar a opção '--force'.\n"
+"Apenas podes atualizar uma ref remota que aponte para um objecto\n"
+"fora de memória, ou atualizar uma ref remota fazendo-a apontar para um\n"
+"objeto fora de memória, usando a opção '--force'.\n"
 
 #: builtin/push.c:285
 msgid ""
@@ -19272,7 +20062,7 @@ msgid ""
 "before forcing an update.\n"
 msgstr ""
 "Atualizações foram rejeitadas porque a ponta do ramo remoto de\n"
-"monitorização foi atualizado desde a última observação. Poderás querer\n"
+"monitorização foi atualizada desde a última observação. Poderás querer\n"
 "integrar essas alterações localmente (e.g., 'git pull ...') antes de\n"
 "forçar uma atualização.\n"
 
@@ -19286,17 +20076,17 @@ msgstr "Atirando para %s\n"
 msgid "failed to push some refs to '%s'"
 msgstr "falha ao atirar algumas refs para '%s'"
 
-#: builtin/push.c:544
+#: builtin/push.c:544 builtin/submodule--helper.c:3377
 msgid "repository"
 msgstr "repositório"
 
-#: builtin/push.c:545 builtin/send-pack.c:189
+#: builtin/push.c:545 builtin/send-pack.c:193
 msgid "push all refs"
 msgstr "atirar todas as refs"
 
-#: builtin/push.c:546 builtin/send-pack.c:191
+#: builtin/push.c:546 builtin/send-pack.c:195
 msgid "mirror all refs"
-msgstr "replicar todas as refs"
+msgstr "espelha todas as refs"
 
 #: builtin/push.c:548
 msgid "delete refs"
@@ -19306,19 +20096,19 @@ msgstr "apagar refs"
 msgid "push tags (can't be used with --all or --mirror)"
 msgstr "atirar etiquetas (incapaz ser usado com --all ou --mirror)"
 
-#: builtin/push.c:552 builtin/send-pack.c:192
+#: builtin/push.c:552 builtin/send-pack.c:196
 msgid "force updates"
 msgstr "forçar atualização"
 
-#: builtin/push.c:553 builtin/send-pack.c:204
+#: builtin/push.c:553 builtin/send-pack.c:208
 msgid "<refname>:<expect>"
 msgstr "<nome-ref>:<esperado>"
 
-#: builtin/push.c:554 builtin/send-pack.c:205
+#: builtin/push.c:554 builtin/send-pack.c:209
 msgid "require old value of ref to be at this value"
 msgstr "exigir que o antigo valor da ref tenha este valor"
 
-#: builtin/push.c:557 builtin/send-pack.c:208
+#: builtin/push.c:557 builtin/send-pack.c:212
 msgid "require remote updates to be integrated locally"
 msgstr ""
 
@@ -19326,12 +20116,12 @@ msgstr ""
 msgid "control recursive pushing of submodules"
 msgstr "controlar a publicação recursiva de submódulos"
 
-#: builtin/push.c:561 builtin/send-pack.c:199
+#: builtin/push.c:561 builtin/send-pack.c:203
 msgid "use thin pack"
 msgstr "usar pacote fino"
 
-#: builtin/push.c:562 builtin/push.c:563 builtin/send-pack.c:186
-#: builtin/send-pack.c:187
+#: builtin/push.c:562 builtin/push.c:563 builtin/send-pack.c:190
+#: builtin/send-pack.c:191
 msgid "receive pack program"
 msgstr "programa receive pack"
 
@@ -19345,24 +20135,20 @@ msgstr "eliminar referências removidas localmente"
 
 #: builtin/push.c:569
 msgid "bypass pre-push hook"
-msgstr "ignorar pre-push hook"
+msgstr "contornar gancho pre-push"
 
 #: builtin/push.c:570
 msgid "push missing but relevant tags"
-msgstr "publicar tags perdidas mas relevantes"
+msgstr "atirar etiquetas ausentes mas relevantes"
 
-#: builtin/push.c:572 builtin/send-pack.c:193
+#: builtin/push.c:572 builtin/send-pack.c:197
 msgid "GPG sign the push"
 msgstr "assinar publicação com GPG"
 
-#: builtin/push.c:574 builtin/send-pack.c:200
+#: builtin/push.c:574 builtin/send-pack.c:204
 msgid "request atomic transaction on remote side"
 msgstr "solicitar transação atómica do lado remoto"
 
-#: builtin/push.c:592
-msgid "--delete is incompatible with --all, --mirror and --tags"
-msgstr "--delete é incompatível com --all, --mirror e --tags"
-
 #: builtin/push.c:594
 msgid "--delete doesn't make sense without any refs"
 msgstr "--delete apenas faz sentido com uma ref"
@@ -19385,34 +20171,22 @@ msgid ""
 "    git push <name>\n"
 msgstr ""
 "Destino de atirar indefinido.\n"
-"Indica um URL da linha de comandos ou configure um repositório remoto "
+"Indica um URL da linha de comandos ou configura um repositório remoto "
 "usando\n"
 "\n"
 "    git remote add <nome> <url>\n"
 "\n"
-"e depois atire usando o nome remoto\n"
+"e depois atira usando o nome remoto\n"
 "\n"
 "    git push <nome>\n"
 
-#: builtin/push.c:630
-msgid "--all and --tags are incompatible"
-msgstr "--all e --tags são incompatíveis"
-
 #: builtin/push.c:632
 msgid "--all can't be combined with refspecs"
 msgstr "incapaz combinar --all com espetros-ref"
 
-#: builtin/push.c:636
-msgid "--mirror and --tags are incompatible"
-msgstr "--mirror e --tags são incompatíveis"
-
 #: builtin/push.c:638
 msgid "--mirror can't be combined with refspecs"
-msgstr "incapaz combinar --mirror com espetros-ref"
-
-#: builtin/push.c:641
-msgid "--all and --mirror are incompatible"
-msgstr "--all e --mirror são incompatíveis"
+msgstr "incapaz combinar --mirror com espetro-refs"
 
 #: builtin/push.c:648
 msgid "push options must not have new line characters"
@@ -19466,288 +20240,137 @@ msgstr "preciso dois intervalos de memórias"
 #: builtin/read-tree.c:41
 msgid ""
 "git read-tree [(-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>) "
-"[-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--"
-"index-output=<file>] (--empty | <tree-ish1> [<tree-ish2> [<tree-ish3>]])"
+"[-u | -i]] [--no-sparse-checkout] [--index-output=<file>] (--empty | <tree-"
+"ish1> [<tree-ish2> [<tree-ish3>]])"
 msgstr ""
 "git read-tree [(-m [--trivial] [--aggressive] | --reset | --"
-"prefix=<prefixo>) [-u [--exclude-per-directory=<gitignore>] | -i]] [--no-"
-"sparse-checkout] [--index-output=<ficheiro>] (--empty | <árvore-etc1> "
-"[<árvore-etc2> [<árvore-etc3>]])"
+"prefix=<prefixo>) [-u | -i]] [--no-sparse-checkout] [--index-"
+"output=<ficheiro>] (--empty | <arvoredo1> [<arvoredo2> [<arvoredo3>]])"
 
-#: builtin/read-tree.c:124
+#: builtin/read-tree.c:116
 msgid "write resulting index to <file>"
-msgstr "escrever o índice resultante no <ficheiro>"
+msgstr "escrever cenário resultante para <ficheiro>"
 
-#: builtin/read-tree.c:127
+#: builtin/read-tree.c:119
 msgid "only empty the index"
-msgstr "apenas esvaziar o índice"
+msgstr "apenas esvaziar o cenário"
 
-#: builtin/read-tree.c:129
+#: builtin/read-tree.c:121
 msgid "Merging"
-msgstr "A integrar"
+msgstr "Juntando"
 
-#: builtin/read-tree.c:131
+#: builtin/read-tree.c:123
 msgid "perform a merge in addition to a read"
-msgstr "realizar uma integração em adição a uma leitura"
+msgstr "realizar uma junção para além de uma leitura"
 
-#: builtin/read-tree.c:133
+#: builtin/read-tree.c:125
 msgid "3-way merge if no file level merging required"
 msgstr "tri-junção se dispensar junção ao nível de ficheiros"
 
-#: builtin/read-tree.c:135
+#: builtin/read-tree.c:127
 msgid "3-way merge in presence of adds and removes"
 msgstr "tri-junção na presença de adições e remoções"
 
-#: builtin/read-tree.c:137
+#: builtin/read-tree.c:129
 msgid "same as -m, but discard unmerged entries"
 msgstr "o mesmo que -m, mas descartar entradas por juntar"
 
-#: builtin/read-tree.c:138
+#: builtin/read-tree.c:130
 msgid "<subdirectory>/"
-msgstr "<subdiretório>/"
+msgstr "<subpasta>/"
 
-#: builtin/read-tree.c:139
+#: builtin/read-tree.c:131
 msgid "read the tree into the index under <subdirectory>/"
-msgstr "ler a árvore em <subdiretório>/ para o índice"
+msgstr "ler a árvore em <subpasta>/ para o cenário"
 
-#: builtin/read-tree.c:142
+#: builtin/read-tree.c:134
 msgid "update working tree with merge result"
-msgstr "atualizar a árvore de trabalho com os resultados da integração"
+msgstr "atualizar a árvore-trabalho com os resultados de junção"
 
-#: builtin/read-tree.c:144
+#: builtin/read-tree.c:136
 msgid "gitignore"
 msgstr "gitignore"
 
-#: builtin/read-tree.c:145
+#: builtin/read-tree.c:137
 msgid "allow explicitly ignored files to be overwritten"
 msgstr "permitir que os ficheiros explicitamente ignorados sejam substituídos"
 
-#: builtin/read-tree.c:148
+#: builtin/read-tree.c:140
 msgid "don't check the working tree after merging"
-msgstr "verifica nenhuma worktree após junção"
+msgstr "verifica árvore-trabalho nenhuma após junção"
 
-#: builtin/read-tree.c:149
+#: builtin/read-tree.c:141
 msgid "don't update the index or the work tree"
-msgstr "atualizar index nenhum e worktree nenhuma"
+msgstr "atualizar cenário nenhum e árvore-trabalho nenhuma"
 
-#: builtin/read-tree.c:151
+#: builtin/read-tree.c:143
 msgid "skip applying sparse checkout filter"
-msgstr "ignorar aplicar filtro de observação disperso"
+msgstr "saltar aplicação de filtro de observação disperso"
 
-#: builtin/read-tree.c:153
+#: builtin/read-tree.c:145
 msgid "debug unpack-trees"
 msgstr "depurar unpack-trees"
 
-#: builtin/read-tree.c:157
+#: builtin/read-tree.c:149
 msgid "suppress feedback messages"
 msgstr "suprimir mensagens de feedback"
 
-#: builtin/read-tree.c:188
+#: builtin/read-tree.c:190
 msgid "You need to resolve your current index first"
 msgstr "Primeiro precisas resolver teu cenário atual"
 
-#: builtin/rebase.c:35
+#: builtin/rebase.c:36
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
 "[<upstream> [<branch>]]"
 msgstr ""
+"git rebase [-i] [options] [--exec <cmd>] [--onto <nova-base> | --keep-base] "
+"[<upstream> [<ramo>]]"
 
-#: builtin/rebase.c:37
+#: builtin/rebase.c:38
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]"
 msgstr ""
+"git rebase [-i] [options] [--exec <cmd>] [--onto <nova-base>] --root [<ramo>]"
 
-#: builtin/rebase.c:39
-msgid "git rebase --continue | --abort | --skip | --edit-todo"
-msgstr "git rebase --continue | --abort | --skip | --edit-todo"
-
-#: builtin/rebase.c:194 builtin/rebase.c:218 builtin/rebase.c:245
-#, c-format
-msgid "unusable todo list: '%s'"
-msgstr "lista de tarefas inutilizável: '%s'"
-
-#: builtin/rebase.c:311
+#: builtin/rebase.c:231
 #, c-format
 msgid "could not create temporary %s"
 msgstr "incapaz criar %s temporário"
 
-#: builtin/rebase.c:317
+#: builtin/rebase.c:237
 msgid "could not mark as interactive"
 msgstr "incapaz marcar como interativo"
 
-#: builtin/rebase.c:370
+#: builtin/rebase.c:290
 msgid "could not generate todo list"
 msgstr "incapaz gerar lista de tarefas"
 
-#: builtin/rebase.c:412
+#: builtin/rebase.c:332
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr ""
 
-#: builtin/rebase.c:481
-msgid "git rebase--interactive [<options>]"
-msgstr "git rebase--interactive [<opções>]"
-
-#: builtin/rebase.c:494 builtin/rebase.c:1389
-msgid "keep commits which start empty"
-msgstr ""
-
-#: builtin/rebase.c:498 builtin/revert.c:128
-msgid "allow commits with empty messages"
-msgstr "permitir memórias com mensagens vazias"
-
-#: builtin/rebase.c:500
-msgid "rebase merge commits"
-msgstr "rebasear memórias de junção"
-
-#: builtin/rebase.c:502
-msgid "keep original branch points of cousins"
-msgstr ""
-
-#: builtin/rebase.c:504
-msgid "move commits that begin with squash!/fixup!"
-msgstr ""
-
-#: builtin/rebase.c:505
-msgid "sign commits"
-msgstr "assinar memórias"
-
-#: builtin/rebase.c:507 builtin/rebase.c:1328
-msgid "display a diffstat of what changed upstream"
-msgstr ""
-
-#: builtin/rebase.c:509
-msgid "continue rebase"
-msgstr "continuar rebase"
-
-#: builtin/rebase.c:511
-msgid "skip commit"
-msgstr "ignorar memória"
-
-#: builtin/rebase.c:512
-msgid "edit the todo list"
-msgstr ""
-
-#: builtin/rebase.c:514
-msgid "show the current patch"
-msgstr "mostrar remendo atual"
-
-#: builtin/rebase.c:517
-msgid "shorten commit ids in the todo list"
-msgstr ""
-
-#: builtin/rebase.c:519
-msgid "expand commit ids in the todo list"
-msgstr ""
-
-#: builtin/rebase.c:521
-msgid "check the todo list"
-msgstr ""
-
-#: builtin/rebase.c:523
-msgid "rearrange fixup/squash lines"
-msgstr ""
-
-#: builtin/rebase.c:525
-msgid "insert exec commands in todo list"
-msgstr ""
-
-#: builtin/rebase.c:526
-msgid "onto"
-msgstr ""
-
-#: builtin/rebase.c:529
-msgid "restrict-revision"
-msgstr "revisão-restrita"
-
-#: builtin/rebase.c:529
-msgid "restrict revision"
-msgstr "revisão restrita"
-
-#: builtin/rebase.c:531
-msgid "squash-onto"
-msgstr ""
-
-#: builtin/rebase.c:532
-msgid "squash onto"
-msgstr ""
-
-#: builtin/rebase.c:534
-msgid "the upstream commit"
-msgstr "a memória de upstream"
-
-#: builtin/rebase.c:536
-msgid "head-name"
-msgstr "nome-cabeça"
-
-#: builtin/rebase.c:536
-msgid "head name"
-msgstr "nome de cabeça"
-
-#: builtin/rebase.c:541
-msgid "rebase strategy"
-msgstr "estratégia de rebaseamento"
-
-#: builtin/rebase.c:542
-msgid "strategy-opts"
-msgstr "opções-estratégia"
-
-#: builtin/rebase.c:543
-msgid "strategy options"
-msgstr "opções de estratégia"
-
-#: builtin/rebase.c:544
-msgid "switch-to"
-msgstr ""
-
-#: builtin/rebase.c:545
-msgid "the branch or commit to checkout"
-msgstr ""
-
-#: builtin/rebase.c:546
-msgid "onto-name"
-msgstr "para-nome"
-
-#: builtin/rebase.c:546
-msgid "onto name"
-msgstr "para nome"
-
-#: builtin/rebase.c:547
-msgid "cmd"
-msgstr "cmd"
-
-#: builtin/rebase.c:547
-msgid "the command to run"
-msgstr ""
-
-#: builtin/rebase.c:550 builtin/rebase.c:1422
-msgid "automatically re-schedule any `exec` that fails"
-msgstr ""
-
-#: builtin/rebase.c:566
-msgid "--[no-]rebase-cousins has no effect without --rebase-merges"
-msgstr ""
-
-#: builtin/rebase.c:582
+#: builtin/rebase.c:391
 #, c-format
 msgid "%s requires the merge backend"
 msgstr ""
 
-#: builtin/rebase.c:625
+#: builtin/rebase.c:433
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "incapaz obter 'onto': '%s'"
 
-#: builtin/rebase.c:642
+#: builtin/rebase.c:450
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "orig-head inválida: '%s'"
 
-#: builtin/rebase.c:667
+#: builtin/rebase.c:475
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr ""
 
-#: builtin/rebase.c:813 git-rebase--preserve-merges.sh:81
+#: builtin/rebase.c:600
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -19755,12 +20378,14 @@ msgid ""
 "To abort and get back to the state before \"git rebase\", run \"git rebase --"
 "abort\"."
 msgstr ""
-"Depois de resolver este problema, execute \"git rebase --continue\".\n"
-"Se prefere ignorar este patch, execute \"git rebase --skip\".\n"
-"Para extrair o ramo original e interromper o rebase, execute \"git rebase --"
-"abort\"."
+"Resolve todos conflitos manualmente, marca-os como resolvidos com\n"
+"\"git add/rm <ficheiros conflitosos>\", depois executa \"git rebase --"
+"continue\".\n"
+"Alternativamente podes saltar esta memória: executa \"git rebase --skip\".\n"
+"Para abortar e voltar ao estado anterior a \"git rebase\", executa\n"
+"\"git rebase --abort\"."
 
-#: builtin/rebase.c:896
+#: builtin/rebase.c:685
 #, c-format
 msgid ""
 "\n"
@@ -19771,15 +20396,27 @@ msgid ""
 "\n"
 "As a result, git cannot rebase them."
 msgstr ""
+"\n"
+"git encontrou erro enquanto preparava as correções para refazer\n"
+"estas revisões:\n"
+"\n"
+"    %s\n"
+"\n"
+"Como resultado, git é incapaz de rebaseá-las."
+
+#: builtin/rebase.c:836
+#, c-format
+msgid "could not switch to %s"
+msgstr "incapaz alternar para %s"
 
-#: builtin/rebase.c:1222
+#: builtin/rebase.c:952
 #, c-format
 msgid ""
 "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
 "\"."
 msgstr ""
 
-#: builtin/rebase.c:1240
+#: builtin/rebase.c:970
 #, c-format
 msgid ""
 "%s\n"
@@ -19790,13 +20427,13 @@ msgid ""
 "\n"
 msgstr ""
 "%s\n"
-"Por favor, diz o branch sobre o qual queres rebasear.\n"
+"Por favor, diz o ramo sobre o qual queres rebasear.\n"
 "Vê git-rebase(1) para detalhes.\n"
 "\n"
-"    git rebase '<branch>'\n"
+"    git rebase '<ramo>'\n"
 "\n"
 
-#: builtin/rebase.c:1256
+#: builtin/rebase.c:986
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -19804,202 +20441,202 @@ msgid ""
 "    git branch --set-upstream-to=%s/<branch> %s\n"
 "\n"
 msgstr ""
-"Se desejas por tracking information neste branch, podes fazer com:\n"
+"Se queres definir informação de monitorização deste branch, podes fazer "
+"com:\n"
 "\n"
-"    git branch --set-upstream-to=%s/<branch> %s\n"
+"    git branch --set-upstream-to=%s/<ramo> %s\n"
 "\n"
 
-#: builtin/rebase.c:1286
+#: builtin/rebase.c:1016
 msgid "exec commands cannot contain newlines"
-msgstr ""
+msgstr "incapaz de conter novas-linhas em comandos exec"
 
-#: builtin/rebase.c:1290
+#: builtin/rebase.c:1020
 msgid "empty exec command"
-msgstr ""
+msgstr "comando exec vazio"
 
-#: builtin/rebase.c:1319
+#: builtin/rebase.c:1051
 msgid "rebase onto given branch instead of upstream"
 msgstr "rebasear sobre ramo dado invés de upstream"
 
-#: builtin/rebase.c:1321
+#: builtin/rebase.c:1053
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr "usar a base de junção de upstream e ramo como base atual"
 
-#: builtin/rebase.c:1323
+#: builtin/rebase.c:1055
 msgid "allow pre-rebase hook to run"
-msgstr "permitir gancho pré-rebase correr"
+msgstr "permitir execução de gancho pre-rebase"
 
-#: builtin/rebase.c:1325
+#: builtin/rebase.c:1057
 msgid "be quiet. implies --no-stat"
-msgstr ""
+msgstr "fica silencioso. implica --no-stat"
+
+#: builtin/rebase.c:1060
+msgid "display a diffstat of what changed upstream"
+msgstr "mostrar uma diffstat das alterações em upstream"
 
-#: builtin/rebase.c:1331
+#: builtin/rebase.c:1063
 msgid "do not show diffstat of what changed upstream"
-msgstr "esconder diffstat de o que alterou upstream"
+msgstr "esconder diffstat das alterações upstream"
 
-#: builtin/rebase.c:1334
+#: builtin/rebase.c:1066
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "adicionar a atribuição Signed-off-by para cada memória"
 
-#: builtin/rebase.c:1337
+#: builtin/rebase.c:1069
 msgid "make committer date match author date"
 msgstr "fazer data de memorizador corresponder à data de autor"
 
-#: builtin/rebase.c:1339
+#: builtin/rebase.c:1071
 msgid "ignore author date and use current date"
 msgstr "ignorar data de autor e usar data atual"
 
-#: builtin/rebase.c:1341
+#: builtin/rebase.c:1073
 msgid "synonym of --reset-author-date"
 msgstr "sinónimo de --reset-author-date"
 
-#: builtin/rebase.c:1343 builtin/rebase.c:1347
+#: builtin/rebase.c:1075 builtin/rebase.c:1079
 msgid "passed to 'git apply'"
 msgstr "passado para 'git apply'"
 
-#: builtin/rebase.c:1345
+#: builtin/rebase.c:1077
 msgid "ignore changes in whitespace"
-msgstr ""
+msgstr "ignorar alterações de espaços-em-branco"
 
-#: builtin/rebase.c:1349 builtin/rebase.c:1352
+#: builtin/rebase.c:1081 builtin/rebase.c:1084
 msgid "cherry-pick all commits, even if unchanged"
-msgstr ""
+msgstr "apanhar todas as memórias, mesmo se inalteradas"
 
-#: builtin/rebase.c:1354
+#: builtin/rebase.c:1086
 msgid "continue"
 msgstr "continuar"
 
-#: builtin/rebase.c:1357
+#: builtin/rebase.c:1089
 msgid "skip current patch and continue"
 msgstr "ignorar remendo atual e continuar"
 
-#: builtin/rebase.c:1359
+#: builtin/rebase.c:1091
 msgid "abort and check out the original branch"
-msgstr ""
+msgstr "abortar e observar o ramo original"
 
-#: builtin/rebase.c:1362
+#: builtin/rebase.c:1094
 msgid "abort but keep HEAD where it is"
-msgstr ""
+msgstr "abortar mas manter HEAD on está"
 
-#: builtin/rebase.c:1363
+#: builtin/rebase.c:1095
 msgid "edit the todo list during an interactive rebase"
 msgstr "editar a lista de afazeres durante rebase interativa"
 
-#: builtin/rebase.c:1366
+#: builtin/rebase.c:1098
 msgid "show the patch file being applied or merged"
-msgstr ""
+msgstr "mostrar remendo aplicado or juntado"
 
-#: builtin/rebase.c:1369
+#: builtin/rebase.c:1101
 msgid "use apply strategies to rebase"
-msgstr ""
+msgstr "usar estratégias de apply para rebasear"
 
-#: builtin/rebase.c:1373
+#: builtin/rebase.c:1105
 msgid "use merging strategies to rebase"
 msgstr "usar estratégias de junção para rebasear"
 
-#: builtin/rebase.c:1377
+#: builtin/rebase.c:1109
 msgid "let the user edit the list of commits to rebase"
-msgstr ""
+msgstr "deixar o utilizador editar a lista de memórias a rebasear"
 
-#: builtin/rebase.c:1381
+#: builtin/rebase.c:1113
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
-msgstr ""
+msgstr "(OBSOLETO) tenta recriar junções em vez de ignorá-las"
 
-#: builtin/rebase.c:1386
+#: builtin/rebase.c:1118
 msgid "how to handle commits that become empty"
-msgstr ""
+msgstr "como lidar com memórias que ficam vazias"
+
+#: builtin/rebase.c:1121
+msgid "keep commits which start empty"
+msgstr "manter memórias que começaram como vazias"
 
-#: builtin/rebase.c:1393
+#: builtin/rebase.c:1125
 msgid "move commits that begin with squash!/fixup! under -i"
-msgstr ""
+msgstr "mover para -i as memórias que começam com squash!/fixup!"
 
-#: builtin/rebase.c:1400
+#: builtin/rebase.c:1132
 msgid "add exec lines after each commit of the editable list"
-msgstr ""
+msgstr "adicionar linhas exec após cada memória da lista editável"
 
-#: builtin/rebase.c:1404
+#: builtin/rebase.c:1136
 msgid "allow rebasing commits with empty messages"
 msgstr "permitir rebasear memórias com mensagens vazias"
 
-#: builtin/rebase.c:1408
+#: builtin/rebase.c:1140
 msgid "try to rebase merges instead of skipping them"
-msgstr ""
+msgstr "tentar rebasear junções em vez de saltá-las"
 
-#: builtin/rebase.c:1411
+#: builtin/rebase.c:1143
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "usa 'merge-base --fork-point' para refinar upstream"
 
-#: builtin/rebase.c:1413
+#: builtin/rebase.c:1145
 msgid "use the given merge strategy"
 msgstr "usar a estratégia de junção dada"
 
-#: builtin/rebase.c:1415 builtin/revert.c:115
+#: builtin/rebase.c:1147 builtin/revert.c:115
 msgid "option"
 msgstr "opção"
 
-#: builtin/rebase.c:1416
+#: builtin/rebase.c:1148
 msgid "pass the argument through to the merge strategy"
 msgstr ""
 
-#: builtin/rebase.c:1419
+#: builtin/rebase.c:1151
 msgid "rebase all reachable commits up to the root(s)"
 msgstr ""
 
-#: builtin/rebase.c:1424
+#: builtin/rebase.c:1154
+msgid "automatically re-schedule any `exec` that fails"
+msgstr ""
+
+#: builtin/rebase.c:1156
 msgid "apply all changes, even those already present upstream"
 msgstr ""
 
-#: builtin/rebase.c:1442
+#: builtin/rebase.c:1177
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "Parece que 'git am' está em curso. Incapaz de rebasear."
 
-#: builtin/rebase.c:1483
-msgid ""
-"git rebase --preserve-merges is deprecated. Use --rebase-merges instead."
+#: builtin/rebase.c:1208
+msgid "--preserve-merges was replaced by --rebase-merges"
 msgstr ""
 
-#: builtin/rebase.c:1488
-msgid "cannot combine '--keep-base' with '--onto'"
-msgstr "incapaz de combinar '--keep-base' com '--onto'"
-
-#: builtin/rebase.c:1490
-msgid "cannot combine '--keep-base' with '--root'"
-msgstr "incapaz de combinar '--keep-base' com '--root'"
-
-#: builtin/rebase.c:1494
-msgid "cannot combine '--root' with '--fork-point'"
-msgstr "incapaz de combinar '--root' com '--fork-point'"
-
-#: builtin/rebase.c:1497
+#: builtin/rebase.c:1230
 msgid "No rebase in progress?"
 msgstr "Algum rebase em curso?"
 
-#: builtin/rebase.c:1501
+#: builtin/rebase.c:1234
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr "A ação --edit-todo só pode ser usada durante uma rebase interativa."
 
-#: builtin/rebase.c:1524 t/helper/test-fast-rebase.c:122
+#: builtin/rebase.c:1257 t/helper/test-fast-rebase.c:122
 msgid "Cannot read HEAD"
 msgstr "Incapaz ler HEAD"
 
-#: builtin/rebase.c:1536
+#: builtin/rebase.c:1269
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
 msgstr ""
-"Deve editar todos os conflitos da integração\n"
+"Tens de editar todos os conflitos da junção\n"
 "e marcá-los como resolvidos usando git add"
 
-#: builtin/rebase.c:1555
+#: builtin/rebase.c:1287
 msgid "could not discard worktree changes"
-msgstr "incapaz de descartar alterações de worktree"
+msgstr "incapaz de descartar alterações de árvore-trabalho"
 
-#: builtin/rebase.c:1574
+#: builtin/rebase.c:1308
 #, c-format
 msgid "could not move back to %s"
 msgstr "incapaz de retroceder a %s"
 
-#: builtin/rebase.c:1620
+#: builtin/rebase.c:1354
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -20012,148 +20649,135 @@ msgid ""
 "valuable there.\n"
 msgstr ""
 "Parece que já existe uma pasta %s, e\n"
-"pregunto-me se estás a meio de outro rebase. Se for o caso,\n"
+"pergunto-me se estás a meio de outro rebase. Se for o caso,\n"
 "por favor tenta\n"
 "\t%s\n"
-"Caso eu esteja errado, faz por favor\n"
+"Caso eu esteja errado, por favor\n"
 "\t%s\n"
 "e execute-me novamente. Estou parando caso ainda tenhas algo\n"
 "de valor aí.\n"
 
-#: builtin/rebase.c:1648
+#: builtin/rebase.c:1382
 msgid "switch `C' expects a numerical value"
 msgstr ""
 
-#: builtin/rebase.c:1690
+#: builtin/rebase.c:1424
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Modo desconhecido: %s"
 
-#: builtin/rebase.c:1729
+#: builtin/rebase.c:1463
 msgid "--strategy requires --merge or --interactive"
 msgstr ""
 
-#: builtin/rebase.c:1759
-msgid "cannot combine apply options with merge options"
-msgstr ""
+#: builtin/rebase.c:1492
+msgid "apply options and merge options cannot be used together"
+msgstr "opções de submeter e de juntar incapaz de serem usadas juntas"
 
-#: builtin/rebase.c:1772
+#: builtin/rebase.c:1505
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr ""
 
-#: builtin/rebase.c:1802
+#: builtin/rebase.c:1534
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr ""
 
-#: builtin/rebase.c:1822
-msgid "cannot combine '--preserve-merges' with '--rebase-merges'"
-msgstr ""
-
-#: builtin/rebase.c:1826
-msgid ""
-"error: cannot combine '--preserve-merges' with '--reschedule-failed-exec'"
-msgstr ""
-
-#: builtin/rebase.c:1850
+#: builtin/rebase.c:1565
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr ""
 
-#: builtin/rebase.c:1856
+#: builtin/rebase.c:1571
 msgid "Could not create new root commit"
-msgstr "incapaz criar novo commit raiz"
+msgstr "Incapaz criar nova memória raiz"
 
-#: builtin/rebase.c:1882
+#: builtin/rebase.c:1597
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
-msgstr ""
+msgstr "'%s': preciso exatamente de uma base de junção para ramo"
 
-#: builtin/rebase.c:1885
+#: builtin/rebase.c:1600
 #, c-format
 msgid "'%s': need exactly one merge base"
-msgstr ""
+msgstr "'%s': preciso exatamente de uma base de junção"
 
-#: builtin/rebase.c:1893
+#: builtin/rebase.c:1609
 #, c-format
 msgid "Does not point to a valid commit '%s'"
-msgstr "Aponta nada para commit válido '%s'"
+msgstr "Aponta para fora de memória válida '%s'"
 
-#: builtin/rebase.c:1921
+#: builtin/rebase.c:1636
 #, c-format
-msgid "fatal: no such branch/commit '%s'"
-msgstr "fatal: nenhum ramo/commit '%s'"
+msgid "no such branch/commit '%s'"
+msgstr "nenhum ramo/memória '%s'"
 
-#: builtin/rebase.c:1929 builtin/submodule--helper.c:39
-#: builtin/submodule--helper.c:2431
+#: builtin/rebase.c:1647 builtin/submodule--helper.c:43
+#: builtin/submodule--helper.c:2477
 #, c-format
 msgid "No such ref: %s"
 msgstr "Referência inexistente: %s"
 
-#: builtin/rebase.c:1940
+#: builtin/rebase.c:1658
 msgid "Could not resolve HEAD to a revision"
 msgstr "Foi impossível resolver HEAD para uma revisão"
 
-#: builtin/rebase.c:1961
+#: builtin/rebase.c:1679
 msgid "Please commit or stash them."
-msgstr "Submeta ou esconda-as."
-
-#: builtin/rebase.c:1997
-#, c-format
-msgid "could not switch to %s"
-msgstr "incapaz alternar para %s"
+msgstr "Por favor, memoriza ou esconde-as."
 
-#: builtin/rebase.c:2008
+#: builtin/rebase.c:1714
 msgid "HEAD is up to date."
 msgstr "HEAD está atualizada."
 
-#: builtin/rebase.c:2010
+#: builtin/rebase.c:1716
 #, c-format
 msgid "Current branch %s is up to date.\n"
-msgstr "Branch atual %s está atualizado.\n"
+msgstr "Ramo atual %s está atualizado.\n"
 
-#: builtin/rebase.c:2018
+#: builtin/rebase.c:1724
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD está atualizada, rebase forçado."
 
-#: builtin/rebase.c:2020
+#: builtin/rebase.c:1726
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
-msgstr "Branch actual %s está atualizado, rebase forçado.\n"
+msgstr "Ramo actual %s está atualizado, rebase forçado.\n"
 
-#: builtin/rebase.c:2028
+#: builtin/rebase.c:1734
 msgid "The pre-rebase hook refused to rebase."
-msgstr "Gancho pré-rebase recusou rebasear."
+msgstr "Gancho pre-rebase recusou rebasear."
 
-#: builtin/rebase.c:2035
+#: builtin/rebase.c:1741
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Modificações para %s:\n"
 
-#: builtin/rebase.c:2038
+#: builtin/rebase.c:1744
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Modificações de %s para %s:\n"
 
-#: builtin/rebase.c:2063
+#: builtin/rebase.c:1769
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
-msgstr "Primeiro, recuando head para refazer o teu trabalho em cima dela...\n"
+msgstr ""
+"Primeiro, rebobinar cabeça para refazer o teu trabalho em cima dela...\n"
 
-#: builtin/rebase.c:2072
+#: builtin/rebase.c:1781
 msgid "Could not detach HEAD"
 msgstr "Incapaz desanexar HEAD"
 
-#: builtin/rebase.c:2081
+#: builtin/rebase.c:1790
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
-msgstr "Avançei-rápido %s para %s.\n"
+msgstr "Avancei %s para %s.\n"
 
-#: builtin/receive-pack.c:34
+#: builtin/receive-pack.c:35
 msgid "git receive-pack <git-dir>"
-msgstr "git receive-pack <git-dir>"
+msgstr "git receive-pack <pasta-git>"
 
-#: builtin/receive-pack.c:1275
+#: builtin/receive-pack.c:1263
 msgid ""
 "By default, updating the current branch in a non-bare repository\n"
 "is denied, because it will make the index and work tree inconsistent\n"
@@ -20169,21 +20793,21 @@ msgid ""
 "To squelch this message and still keep the default behaviour, set\n"
 "'receive.denyCurrentBranch' configuration variable to 'refuse'."
 msgstr ""
-"Por predefinição, atualizar o ramo atual num repositório não-nu\n"
-"é proibido, porque tornará o index e a worktree inconsistentes\n"
-"com o que atiraste, e requererá 'git reset --hard' para igualar a\n"
-"worktree com HEAD.\n"
+"Por predefinição, atualizar o ramo atual num repositório diferente\n"
+"de nu é proibido, porque tornará o cenário e a árvore-trabalho\n"
+"inconsistentes com o que atiraste, e requererá 'git reset --hard'\n"
+"para igualar a árvore-trabalho com HEAD.\n"
 "\n"
-"Podes definir variável configuração 'receive.denyCurrentBranch'\n"
+"Podes definir variável de configuração 'receive.denyCurrentBranch'\n"
 "como 'ignore' ou 'warn' no repositório remoto para permitir atirar\n"
 "para o ramo atual deste; no entanto, é recomendando nada disto a\n"
-"menos que consigas outra forma de atualizar a worktree dele para\n"
-"refletir o que atiraste.\n"
+"menos que consigas outra forma de atualizar a árvore-trabalho dele\n"
+"para refletir o que atiraste.\n"
 "\n"
-"Para suprimir esta mensagem e manter o comportamento predefinido, define\n"
+"Para silenciar esta mensagem e manter o comportamento predefinido, define\n"
 "a variável de configuração 'receive.denyCurrentBranch' como 'refuse'."
 
-#: builtin/receive-pack.c:1295
+#: builtin/receive-pack.c:1283
 msgid ""
 "By default, deleting the current branch is denied, because the next\n"
 "'git clone' won't result in any file checked out, causing confusion.\n"
@@ -20194,83 +20818,115 @@ msgid ""
 "\n"
 "To squelch this message, you can set it to 'refuse'."
 msgstr ""
-"Por predefinição, apagar o ramo atual é proibido, porque o próximo\n"
-"'git clone' resultará em ficheiro nenhum checked out, causando confusão.\n"
+"Por predefinição, eliminar o ramo atual é proibido, porque o próximo\n"
+"'git clone' resultará em nenhum ficheiro observado, causando confusão.\n"
 "\n"
 "Podes definir a variável de configuração 'receive.denyDeleteCurrent' como\n"
 "'warn' ou 'ignore' no repositório remoto para permitir eliminar o\n"
-"ramo atual, com ou sem a mensagem de aviso.\n"
+"ramo atual, com ou sem uma mensagem de aviso.\n"
 "\n"
-"Para suprimir esta mensagem, podes definí-la como 'refuse'."
+"Para silenciar esta mensagem, podes defini-la como 'refuse'."
 
-#: builtin/receive-pack.c:2478
+#: builtin/receive-pack.c:2476
 msgid "quiet"
 msgstr "silencioso"
 
-#: builtin/receive-pack.c:2492
-msgid "You must specify a directory."
-msgstr "Deves especificar uma pasta."
+#: builtin/receive-pack.c:2491
+msgid "you must specify a directory"
+msgstr "tens de especificar uma pasta"
 
-#: builtin/reflog.c:17
+#: builtin/reflog.c:9
+msgid "git reflog [show] [<log-options>] [<ref>]"
+msgstr "git reflog [show] [<opções-de-registo>] [<ref>]"
+
+#: builtin/reflog.c:12
 msgid ""
-"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<refs>..."
+"git reflog expire [--expire=<time>] [--expire-unreachable=<time>]\n"
+"                  [--rewrite] [--updateref] [--stale-fix]\n"
+"                  [--dry-run | -n] [--verbose] [--all [--single-worktree] | "
+"<refs>...]"
 msgstr ""
 
-#: builtin/reflog.c:22
+#: builtin/reflog.c:17
 msgid ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] "
-"<refs>..."
+"git reflog delete [--rewrite] [--updateref]\n"
+"                  [--dry-run | -n] [--verbose] <ref>@{<specifier>}..."
 msgstr ""
 
-#: builtin/reflog.c:25
+#: builtin/reflog.c:21
 msgid "git reflog exists <ref>"
 msgstr ""
 
-#: builtin/reflog.c:568 builtin/reflog.c:573
+#: builtin/reflog.c:197 builtin/reflog.c:211
 #, c-format
-msgid "'%s' is not a valid timestamp"
-msgstr "'%s' é um carimbo de data/hora inválido"
+msgid "invalid timestamp '%s' given to '--%s'"
+msgstr "carimbo cronológico inválido '%s' fornecido a '--%s'"
+
+#: builtin/reflog.c:240 builtin/reflog.c:359
+msgid "do not actually prune any entries"
+msgstr ""
+
+#: builtin/reflog.c:243 builtin/reflog.c:362
+msgid ""
+"rewrite the old SHA1 with the new SHA1 of the entry that now precedes it"
+msgstr ""
+
+#: builtin/reflog.c:246 builtin/reflog.c:365
+msgid "update the reference to the value of the top reflog entry"
+msgstr ""
+
+#: builtin/reflog.c:248 builtin/reflog.c:367
+msgid "print extra information on screen"
+msgstr ""
+
+#: builtin/reflog.c:249 builtin/reflog.c:253
+msgid "timestamp"
+msgstr "carimbo cronológico"
+
+#: builtin/reflog.c:250
+msgid "prune entries older than the specified time"
+msgstr "podar entradas mais velhas que tempo especifico"
+
+#: builtin/reflog.c:254
+msgid ""
+"prune entries older than <time> that are not reachable from the current tip "
+"of the branch"
+msgstr ""
 
-#: builtin/reflog.c:609
+#: builtin/reflog.c:258
+msgid "prune any reflog entries that point to broken commits"
+msgstr ""
+"podar qualquer entrada de registo-ref que aponte para memórias quebradas"
+
+#: builtin/reflog.c:259
+msgid "process the reflogs of all references"
+msgstr "processar os registos-ref de todas as referências"
+
+#: builtin/reflog.c:261
+msgid "limits processing to reflogs from the current worktree only"
+msgstr ""
+"limitando processamento para apenas registros-ref da árvore-trabalho atual"
+
+#: builtin/reflog.c:294
 #, c-format
 msgid "Marking reachable objects..."
 msgstr ""
 
-#: builtin/reflog.c:647
+#: builtin/reflog.c:338
 #, c-format
 msgid "%s points nowhere!"
 msgstr ""
 
-#: builtin/reflog.c:699
+#: builtin/reflog.c:374
 msgid "no reflog specified to delete"
 msgstr "especificado reflog nenhum para apagar"
 
-#: builtin/reflog.c:708
-#, c-format
-msgid "not a reflog: %s"
-msgstr "reflog inválido: %s"
-
-#: builtin/reflog.c:713
-#, c-format
-msgid "no reflog for '%s'"
-msgstr "reflog nenhum para '%s'"
-
-#: builtin/reflog.c:759
+#: builtin/reflog.c:396
 #, c-format
 msgid "invalid ref format: %s"
 msgstr "formato de ref inválido: %s"
 
-#: builtin/reflog.c:768
-msgid "git reflog [ show | expire | delete | exists ]"
-msgstr ""
-
-#: builtin/remote.c:17
-msgid "git remote [-v | --verbose]"
-msgstr "git remote [-v | --verbose]"
-
-#: builtin/remote.c:18
+#: builtin/remote.c:19
 msgid ""
 "git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--"
 "mirror=<fetch|push>] <name> <url>"
@@ -20278,82 +20934,87 @@ msgstr ""
 "git remote add [-t <ramo>] [-m <mestre>] [-f] [--tags | --no-tags] [--"
 "mirror=<fetch|push>] <nome> <url>"
 
-#: builtin/remote.c:19 builtin/remote.c:39
-msgid "git remote rename <old> <new>"
-msgstr "git remote rename <antigo> <novo>"
+#: builtin/remote.c:20 builtin/remote.c:40
+msgid "git remote rename [--[no-]progress] <old> <new>"
+msgstr "git remote rename [--[no-]progress] <antigo> <novo>"
 
-#: builtin/remote.c:20 builtin/remote.c:44
+#: builtin/remote.c:21 builtin/remote.c:45
 msgid "git remote remove <name>"
 msgstr "git remote remove <nome>"
 
-#: builtin/remote.c:21 builtin/remote.c:49
+#: builtin/remote.c:22 builtin/remote.c:50
 msgid "git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"
 msgstr "git remote set-head <nome> (-a | --auto | -d | --delete | <ramo>)"
 
-#: builtin/remote.c:22
+#: builtin/remote.c:23
 msgid "git remote [-v | --verbose] show [-n] <name>"
 msgstr "git remote [-v | --verbose] show [-n] <nome>"
 
-#: builtin/remote.c:23
+#: builtin/remote.c:24
 msgid "git remote prune [-n | --dry-run] <name>"
 msgstr "git remote prune [-n | --dry-run] <nome>"
 
-#: builtin/remote.c:24
+#: builtin/remote.c:25
 msgid ""
 "git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
 msgstr ""
 "git remote [-v | --verbose] update [-p | --prune] [(<grupo> | <remoto>)...]"
 
-#: builtin/remote.c:25
+#: builtin/remote.c:26
 msgid "git remote set-branches [--add] <name> <branch>..."
 msgstr "git remote set-branches [--add] <nome> <ramo>..."
 
-#: builtin/remote.c:26 builtin/remote.c:75
+#: builtin/remote.c:27 builtin/remote.c:76
 msgid "git remote get-url [--push] [--all] <name>"
 msgstr "git remote get-url [--push] [--all] <nome>"
 
-#: builtin/remote.c:27 builtin/remote.c:80
+#: builtin/remote.c:28 builtin/remote.c:81
 msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]"
 msgstr "git remote set-url [--push] <nome> <novo-url> [<url-antigo>]"
 
-#: builtin/remote.c:28 builtin/remote.c:81
+#: builtin/remote.c:29 builtin/remote.c:82
 msgid "git remote set-url --add <name> <newurl>"
 msgstr "git remote set-url --add <nome> <novo-url>"
 
-#: builtin/remote.c:29 builtin/remote.c:82
+#: builtin/remote.c:30 builtin/remote.c:83
 msgid "git remote set-url --delete <name> <url>"
 msgstr "git remote set-url --delete <nome> <url>"
 
-#: builtin/remote.c:34
+#: builtin/remote.c:35
 msgid "git remote add [<options>] <name> <url>"
 msgstr "git remote add [<opções>] <nome> <url>"
 
-#: builtin/remote.c:54
+#: builtin/remote.c:55
 msgid "git remote set-branches <name> <branch>..."
 msgstr "git remote set-branches <nome> <ramo>..."
 
-#: builtin/remote.c:55
+#: builtin/remote.c:56
 msgid "git remote set-branches --add <name> <branch>..."
 msgstr "git remote set-branches --add <nome> <ramo>..."
 
-#: builtin/remote.c:60
+#: builtin/remote.c:61
 msgid "git remote show [<options>] <name>"
 msgstr "git remote show [<opções>] <nome>"
 
-#: builtin/remote.c:65
+#: builtin/remote.c:66
 msgid "git remote prune [<options>] <name>"
 msgstr "git remote prune [<opções>] <nome>"
 
-#: builtin/remote.c:70
+#: builtin/remote.c:71
 msgid "git remote update [<options>] [<group> | <remote>]..."
 msgstr "git remote update [<opções>] [<grupo> | <remoto>]..."
 
-#: builtin/remote.c:99
+#: builtin/remote.c:100
 #, c-format
 msgid "Updating %s"
 msgstr "Atualizando %s"
 
-#: builtin/remote.c:131
+#: builtin/remote.c:102
+#, c-format
+msgid "Could not fetch %s"
+msgstr "Incapaz buscar %s"
+
+#: builtin/remote.c:132
 msgid ""
 "--mirror is dangerous and deprecated; please\n"
 "\t use --mirror=fetch or --mirror=push instead"
@@ -20361,72 +21022,78 @@ msgstr ""
 "--mirror é perigoso e obsoleto; por favor\n"
 "\t usa --mirror=fetch ou --mirror=push invés"
 
-#: builtin/remote.c:148
+#: builtin/remote.c:149
 #, c-format
 msgid "unknown mirror argument: %s"
 msgstr "argumento de mirror desconhecido: %s"
 
-#: builtin/remote.c:164
+#: builtin/remote.c:165
 msgid "fetch the remote branches"
-msgstr "obter os ramos remotos"
+msgstr "buscar os ramos remotos"
 
-#: builtin/remote.c:166
+#: builtin/remote.c:167
 msgid "import all tags and associated objects when fetching"
-msgstr "importar todas as tags e objetos associados ao obter"
+msgstr "importar todas as etiquetas e objetos associados ao buscar"
 
-#: builtin/remote.c:169
+#: builtin/remote.c:170
 msgid "or do not fetch any tag at all (--no-tags)"
 msgstr "ou buscar etiqueta nenhuma (--no-tags)"
 
-#: builtin/remote.c:171
+#: builtin/remote.c:172
 msgid "branch(es) to track"
-msgstr "ramos a seguir"
+msgstr "ramo(s) a monitorizar"
 
-#: builtin/remote.c:172
+#: builtin/remote.c:173
 msgid "master branch"
 msgstr "ramo mestre"
 
-#: builtin/remote.c:174
+#: builtin/remote.c:175
 msgid "set up remote as a mirror to push to or fetch from"
-msgstr "configurar o remoto como um espelho para publicar ou obter"
+msgstr "definir remoto como um espelho para 'buscar de' ou 'atirar para'"
 
-#: builtin/remote.c:186
+#: builtin/remote.c:187
 msgid "specifying a master branch makes no sense with --mirror"
 msgstr "especificar um ramo master com --mirror faz sentido nenhum"
 
-#: builtin/remote.c:188
+#: builtin/remote.c:189
 msgid "specifying branches to track makes sense only with fetch mirrors"
-msgstr "especificar ramos para seguir só faz sentido com fetch mirrors"
+msgstr ""
+"especificar ramos para monitorizar só faz sentido com espelhos de busca"
 
-#: builtin/remote.c:195 builtin/remote.c:700
+#: builtin/remote.c:196 builtin/remote.c:716
 #, c-format
 msgid "remote %s already exists."
 msgstr "o remoto %s já existe."
 
-#: builtin/remote.c:240
+#: builtin/remote.c:241
 #, c-format
 msgid "Could not setup master '%s'"
 msgstr "Incapaz configurar master '%s'"
 
-#: builtin/remote.c:355
+#: builtin/remote.c:323
+#, c-format
+msgid "unhandled branch.%s.rebase=%s; assuming 'true'"
+msgstr "branch.%s.rebase=%s por lidar; assumindo 'true'"
+
+#: builtin/remote.c:367
 #, c-format
 msgid "Could not get fetch map for refspec %s"
-msgstr "Incapaz de obter mapa de busca para refspec %s"
+msgstr "Incapaz de obter mapa de busca para espetro-ref %s"
 
-#: builtin/remote.c:454 builtin/remote.c:462
+#: builtin/remote.c:461 builtin/remote.c:469
 msgid "(matching)"
 msgstr "(correspondente)"
 
-#: builtin/remote.c:466
+#: builtin/remote.c:473
 msgid "(delete)"
-msgstr "(apagar)"
+msgstr "(eliminar)"
 
-#: builtin/remote.c:655
+#: builtin/remote.c:664
 #, c-format
 msgid "could not set '%s'"
 msgstr "incapaz definir '%s'"
 
-#: builtin/remote.c:660
+#: builtin/remote.c:669
 #, c-format
 msgid ""
 "The %s configuration remote.pushDefault in:\n"
@@ -20434,37 +21101,42 @@ msgid ""
 "now names the non-existent remote '%s'"
 msgstr ""
 
-#: builtin/remote.c:691 builtin/remote.c:836 builtin/remote.c:943
+#: builtin/remote.c:707 builtin/remote.c:866 builtin/remote.c:973
 #, c-format
 msgid "No such remote: '%s'"
 msgstr "Remoto inexistente: '%s'"
 
-#: builtin/remote.c:710
+#: builtin/remote.c:726
 #, c-format
 msgid "Could not rename config section '%s' to '%s'"
 msgstr "Incapaz de mudar o nome a secção de configuração '%s' para '%s'"
 
-#: builtin/remote.c:730
+#: builtin/remote.c:746
 #, c-format
 msgid ""
 "Not updating non-default fetch refspec\n"
 "\t%s\n"
 "\tPlease update the configuration manually if necessary."
 msgstr ""
-"Deixando por atualizar refspec que é diferente de pré-definido\t%s\n"
+"Deixando por atualizar espetro-ref que é diferente de pré-definido\n"
+"\t%s\n"
 "\tPor favor, atualiza a configuração manualmente se necessário."
 
-#: builtin/remote.c:770
+#: builtin/remote.c:783
+msgid "Renaming remote references"
+msgstr "Renomeando referências remotas"
+
+#: builtin/remote.c:794
 #, c-format
 msgid "deleting '%s' failed"
 msgstr "falha ao apagar '%s'"
 
-#: builtin/remote.c:804
+#: builtin/remote.c:832
 #, c-format
 msgid "creating '%s' failed"
 msgstr "falhou criar '%s'"
 
-#: builtin/remote.c:882
+#: builtin/remote.c:912
 msgid ""
 "Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
 "to delete it, use:"
@@ -20473,124 +21145,124 @@ msgid_plural ""
 "to delete them, use:"
 msgstr[0] ""
 "Nota: Um ramo fora da hierarquia refs/remotes/ está por remover;\n"
-"para apagá-lo, usa:"
+"para eliminá-lo, usa:"
 msgstr[1] ""
-"Nota: Alguns ramos fora da hierarquia refs/remotes/ estão por serem "
+"Nota: Alguns ramos fora da hierarquia refs/remotes/ estão por ser "
 "removidos;\n"
-"para os apagá-los, usa:"
+"para eliminá-los, usa:"
 
-#: builtin/remote.c:896
+#: builtin/remote.c:926
 #, c-format
 msgid "Could not remove config section '%s'"
 msgstr "Incapaz remover secção de configuração '%s'"
 
-#: builtin/remote.c:999
+#: builtin/remote.c:1034
 #, c-format
 msgid " new (next fetch will store in remotes/%s)"
-msgstr " novo (os próxima objetos obtidos serão guardados em remotes/%s)"
+msgstr " novo (próxima busca irá guardar em remotes/%s)"
 
-#: builtin/remote.c:1002
+#: builtin/remote.c:1037
 msgid " tracked"
-msgstr " seguido"
+msgstr " monitorizado"
 
-#: builtin/remote.c:1004
+#: builtin/remote.c:1039
 msgid " stale (use 'git remote prune' to remove)"
 msgstr " obsoleto (use 'git remote prune' para remover)"
 
-#: builtin/remote.c:1006
+#: builtin/remote.c:1041
 msgid " ???"
 msgstr " ???"
 
-#: builtin/remote.c:1047
+#: builtin/remote.c:1082
 #, c-format
 msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
 msgstr "branch.%s.merge inválido; incapaz rebasear sobre > 1 ramo"
 
-#: builtin/remote.c:1056
+#: builtin/remote.c:1091
 #, c-format
 msgid "rebases interactively onto remote %s"
 msgstr "rebaseia interativamente sobre remoto %s"
 
-#: builtin/remote.c:1058
+#: builtin/remote.c:1093
 #, c-format
 msgid "rebases interactively (with merges) onto remote %s"
 msgstr "rebaseia interativamente (com junções) sobre remoto %s"
 
-#: builtin/remote.c:1061
+#: builtin/remote.c:1096
 #, c-format
 msgid "rebases onto remote %s"
-msgstr "rebaseia sobre %s do remoto"
+msgstr "rebaseia sobre remoto %s"
 
-#: builtin/remote.c:1065
+#: builtin/remote.c:1100
 #, c-format
 msgid " merges with remote %s"
-msgstr " integra com %s do remoto"
+msgstr " junta com remoto %s"
 
-#: builtin/remote.c:1068
+#: builtin/remote.c:1103
 #, c-format
 msgid "merges with remote %s"
-msgstr "integra com %s do remoto"
+msgstr "junta com remoto %s"
 
-#: builtin/remote.c:1071
+#: builtin/remote.c:1106
 #, c-format
 msgid "%-*s    and with remote %s\n"
 msgstr "%-*s    e com o %s remote\n"
 
-#: builtin/remote.c:1114
+#: builtin/remote.c:1149
 msgid "create"
 msgstr "criado"
 
-#: builtin/remote.c:1117
+#: builtin/remote.c:1152
 msgid "delete"
 msgstr "eliminado"
 
-#: builtin/remote.c:1121
+#: builtin/remote.c:1156
 msgid "up to date"
 msgstr "atualizado"
 
-#: builtin/remote.c:1124
+#: builtin/remote.c:1159
 msgid "fast-forwardable"
-msgstr "pode ser avançado rapidamente"
+msgstr "pode ser avançado"
 
-#: builtin/remote.c:1127
+#: builtin/remote.c:1162
 msgid "local out of date"
 msgstr "local desatualizado"
 
-#: builtin/remote.c:1134
+#: builtin/remote.c:1169
 #, c-format
 msgid "    %-*s forces to %-*s (%s)"
 msgstr "    %-*s força em %-*s (%s)"
 
-#: builtin/remote.c:1137
+#: builtin/remote.c:1172
 #, c-format
 msgid "    %-*s pushes to %-*s (%s)"
 msgstr "    %-*s publica em %-*s (%s)"
 
-#: builtin/remote.c:1141
+#: builtin/remote.c:1176
 #, c-format
 msgid "    %-*s forces to %s"
 msgstr "    %-*s força em %s"
 
-#: builtin/remote.c:1144
+#: builtin/remote.c:1179
 #, c-format
 msgid "    %-*s pushes to %s"
 msgstr "    %-*s publica em %s"
 
-#: builtin/remote.c:1212
+#: builtin/remote.c:1247
 msgid "do not query remotes"
 msgstr "faz consulta a remotos nenhuns"
 
-#: builtin/remote.c:1239
+#: builtin/remote.c:1268
 #, c-format
 msgid "* remote %s"
 msgstr "* remoto %s"
 
-#: builtin/remote.c:1240
+#: builtin/remote.c:1269
 #, c-format
 msgid "  Fetch URL: %s"
 msgstr "  Buscar URL: %s"
 
-#: builtin/remote.c:1241 builtin/remote.c:1257 builtin/remote.c:1396
+#: builtin/remote.c:1270 builtin/remote.c:1286 builtin/remote.c:1423
 msgid "(no URL)"
 msgstr "(URL nenhum)"
 
@@ -20598,326 +21270,336 @@ msgstr "(URL nenhum)"
 #. with the one in " Fetch URL: %s"
 #. translation.
 #.
-#: builtin/remote.c:1255 builtin/remote.c:1257
+#: builtin/remote.c:1284 builtin/remote.c:1286
 #, c-format
 msgid "  Push  URL: %s"
 msgstr "  Atirar URL: %s"
 
-#: builtin/remote.c:1259 builtin/remote.c:1261 builtin/remote.c:1263
+#: builtin/remote.c:1288 builtin/remote.c:1290 builtin/remote.c:1292
 #, c-format
 msgid "  HEAD branch: %s"
 msgstr "  Ramo HEAD: %s"
 
-#: builtin/remote.c:1259
+#: builtin/remote.c:1288
 msgid "(not queried)"
 msgstr "(nada consultado)"
 
-#: builtin/remote.c:1261
+#: builtin/remote.c:1290
 msgid "(unknown)"
 msgstr "(desconhecido)"
 
-#: builtin/remote.c:1265
+#: builtin/remote.c:1294
 #, c-format
 msgid ""
 "  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
-msgstr "  HEAD branch (HEAD remote é ambíguo, pode ser um dos seguintes):\n"
+msgstr "  Ramo HEAD (HEAD remota é ambígua, pode ser uma das seguintes):\n"
 
-#: builtin/remote.c:1277
+#: builtin/remote.c:1306
 #, c-format
 msgid "  Remote branch:%s"
 msgid_plural "  Remote branches:%s"
 msgstr[0] "  Ramo remoto:%s"
 msgstr[1] "  Ramos remotos:%s"
 
-#: builtin/remote.c:1280 builtin/remote.c:1306
+#: builtin/remote.c:1309 builtin/remote.c:1335
 msgid " (status not queried)"
-msgstr " (estado é nada consultado)"
+msgstr " (estado por consultar)"
 
-#: builtin/remote.c:1289
+#: builtin/remote.c:1318
 msgid "  Local branch configured for 'git pull':"
 msgid_plural "  Local branches configured for 'git pull':"
 msgstr[0] "  Ramo local configurado para 'git pull':"
 msgstr[1] "  Ramos locais configurados para 'git pull':"
 
-#: builtin/remote.c:1297
+#: builtin/remote.c:1326
 msgid "  Local refs will be mirrored by 'git push'"
-msgstr "  Referências locais serão replicadas (mirror) por 'git push'"
+msgstr "  Refs locais serão espelhadas por 'git push'"
 
-#: builtin/remote.c:1303
+#: builtin/remote.c:1332
 #, c-format
 msgid "  Local ref configured for 'git push'%s:"
 msgid_plural "  Local refs configured for 'git push'%s:"
-msgstr[0] "  Referência local configurada para 'git push'%s:"
-msgstr[1] "  Referências locais configuradas para 'git push'%s:"
+msgstr[0] "  Ref local configurada para 'git push'%s:"
+msgstr[1] "  Refs locais configuradas para 'git push'%s:"
 
-#: builtin/remote.c:1324
+#: builtin/remote.c:1353
 msgid "set refs/remotes/<name>/HEAD according to remote"
 msgstr "definir refs/remotes/<nome>/HEAD de acordo com o remoto"
 
-#: builtin/remote.c:1326
+#: builtin/remote.c:1355
 msgid "delete refs/remotes/<name>/HEAD"
 msgstr "eliminar refs/remotes/<nome>/HEAD"
 
-#: builtin/remote.c:1341
+#: builtin/remote.c:1369
 msgid "Cannot determine remote HEAD"
 msgstr "Incapaz de determinar o HEAD remoto"
 
-#: builtin/remote.c:1343
+#: builtin/remote.c:1371
 msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
-msgstr "Múltiplos ramos HEAD remotos. Escolha um explicitamente com:"
+msgstr ""
+"Múltiplos ramos HEAD remotos. Por favor, escolhe um explicitamente com:"
 
-#: builtin/remote.c:1353
+#: builtin/remote.c:1381
 #, c-format
 msgid "Could not delete %s"
 msgstr "Incapaz eliminar %s"
 
-#: builtin/remote.c:1361
+#: builtin/remote.c:1389
 #, c-format
 msgid "Not a valid ref: %s"
-msgstr "Referência inválida: %s"
+msgstr "Ref inválida: %s"
 
-#: builtin/remote.c:1363
+#: builtin/remote.c:1391
 #, c-format
 msgid "Could not setup %s"
 msgstr "Incapaz configurar %s"
 
-#: builtin/remote.c:1381
+#: builtin/remote.c:1409
 #, c-format
 msgid " %s will become dangling!"
 msgstr " %s ficará suspenso!"
 
-#: builtin/remote.c:1382
+#: builtin/remote.c:1410
 #, c-format
 msgid " %s has become dangling!"
 msgstr " %s ficou suspenso!"
 
-#: builtin/remote.c:1392
+#: builtin/remote.c:1419
 #, c-format
 msgid "Pruning %s"
-msgstr "A eliminar %s"
+msgstr "Podando %s"
 
-#: builtin/remote.c:1393
+#: builtin/remote.c:1420
 #, c-format
 msgid "URL: %s"
 msgstr "URL: %s"
 
-#: builtin/remote.c:1409
+#: builtin/remote.c:1436
 #, c-format
 msgid " * [would prune] %s"
-msgstr " * [eliminaria] %s"
+msgstr " * [iria podar] %s"
 
-#: builtin/remote.c:1412
+#: builtin/remote.c:1439
 #, c-format
 msgid " * [pruned] %s"
-msgstr " * [eliminado] %s"
+msgstr " * [podado] %s"
 
-#: builtin/remote.c:1457
+#: builtin/remote.c:1484
 msgid "prune remotes after fetching"
 msgstr "podar remotos após buscar"
 
-#: builtin/remote.c:1521 builtin/remote.c:1577 builtin/remote.c:1647
+#: builtin/remote.c:1548 builtin/remote.c:1604 builtin/remote.c:1674
 #, c-format
 msgid "No such remote '%s'"
-msgstr "Remoto inexistente '%s'"
+msgstr "Remoto '%s' inexistente"
 
-#: builtin/remote.c:1539
+#: builtin/remote.c:1566
 msgid "add branch"
 msgstr "adicionar ramo"
 
-#: builtin/remote.c:1546
+#: builtin/remote.c:1573
 msgid "no remote specified"
 msgstr "especificado remoto nenhum"
 
-#: builtin/remote.c:1563
+#: builtin/remote.c:1590
 msgid "query push URLs rather than fetch URLs"
-msgstr "consultar URLs de publicação em vez de URLs utilizados para obter"
+msgstr "consultar URLs de atiro em vez de URLs de busca"
 
-#: builtin/remote.c:1565
+#: builtin/remote.c:1592
 msgid "return all URLs"
 msgstr "retornar todos os URLs"
 
-#: builtin/remote.c:1595
+#: builtin/remote.c:1622
 #, c-format
 msgid "no URLs configured for remote '%s'"
 msgstr "o remoto '%s' tem configurado URL nenhum"
 
-#: builtin/remote.c:1621
+#: builtin/remote.c:1648
 msgid "manipulate push URLs"
-msgstr "manipular URLs de publicação"
+msgstr "manipular URLs de atiro"
 
-#: builtin/remote.c:1623
+#: builtin/remote.c:1650
 msgid "add URL"
 msgstr "adicionar URL"
 
-#: builtin/remote.c:1625
+#: builtin/remote.c:1652
 msgid "delete URLs"
 msgstr "eliminar URLs"
 
-#: builtin/remote.c:1632
+#: builtin/remote.c:1659
 msgid "--add --delete doesn't make sense"
 msgstr "--add --delete faz sentido nenhum"
 
-#: builtin/remote.c:1673
+#: builtin/remote.c:1700
 #, c-format
 msgid "Invalid old URL pattern: %s"
 msgstr "Padrão de URL antigo inválido: %s"
 
-#: builtin/remote.c:1681
+#: builtin/remote.c:1708
 #, c-format
 msgid "No such URL found: %s"
 msgstr "URL por encontrar: %s"
 
-#: builtin/remote.c:1683
+#: builtin/remote.c:1710
 msgid "Will not delete all non-push URLs"
-msgstr "Apagarei apenas alguns URLs de não-atirar"
+msgstr "Deixarei por eliminar todos os URLs de não-atirar"
 
-#: builtin/repack.c:26
+#: builtin/remote.c:1727
+msgid "be verbose; must be placed before a subcommand"
+msgstr "ser verboso; deve ser colocado antes de um subcomando"
+
+#: builtin/repack.c:29
 msgid "git repack [<options>]"
 msgstr "git repack [<opções>]"
 
-#: builtin/repack.c:31
+#: builtin/repack.c:34
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
 msgstr ""
-"Repacks incrementais são incompatíveis com indexes bitmap. Usa\n"
+"Repacks incrementais são incompatíveis com índices de bitmap. Usa\n"
 "--no-write-bitmap-index ou desativa a configuração pack.writebitmaps ."
 
-#: builtin/repack.c:198
+#: builtin/repack.c:206
 msgid "could not start pack-objects to repack promisor objects"
 msgstr ""
 
-#: builtin/repack.c:270 builtin/repack.c:630
+#: builtin/repack.c:280 builtin/repack.c:824
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 
-#: builtin/repack.c:294
+#: builtin/repack.c:304
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr ""
 
-#: builtin/repack.c:309
+#: builtin/repack.c:319
 #, c-format
 msgid "cannot open index for %s"
 msgstr "incapaz abrir cenário para %s"
 
-#: builtin/repack.c:368
+#: builtin/repack.c:378
 #, c-format
 msgid "pack %s too large to consider in geometric progression"
 msgstr ""
 
-#: builtin/repack.c:401 builtin/repack.c:408 builtin/repack.c:413
+#: builtin/repack.c:411 builtin/repack.c:418 builtin/repack.c:423
 #, c-format
 msgid "pack %s too large to roll up"
 msgstr ""
 
-#: builtin/repack.c:460
+#: builtin/repack.c:503
+#, c-format
+msgid "could not open tempfile %s for writing"
+msgstr "incapaz abrir ficheiro-temp %s para escrita"
+
+#: builtin/repack.c:521
+msgid "could not close refs snapshot tempfile"
+msgstr "incapaz fechar snapshot ficheiro-temp de refs"
+
+#: builtin/repack.c:634
 msgid "pack everything in a single pack"
 msgstr "compactar tudo num único pacote"
 
-#: builtin/repack.c:462
+#: builtin/repack.c:636
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "o mesmo que -a, e soltar objetos inalcançáveis"
 
-#: builtin/repack.c:465
+#: builtin/repack.c:639
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "remover pacotes redundantes e executar git-prune-packed"
 
-#: builtin/repack.c:467
+#: builtin/repack.c:641
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "passar --no-reuse-delta para git-pack-objects"
 
-#: builtin/repack.c:469
+#: builtin/repack.c:643
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "passar --no-reuse-object para git-pack-objects"
 
-#: builtin/repack.c:471
+#: builtin/repack.c:645
 msgid "do not run git-update-server-info"
 msgstr "executar git-update-server-info nenhum"
 
-#: builtin/repack.c:474
+#: builtin/repack.c:648
 msgid "pass --local to git-pack-objects"
 msgstr "passar --local para git-pack-objects"
 
-#: builtin/repack.c:476
+#: builtin/repack.c:650
 msgid "write bitmap index"
-msgstr "escrever index de bitmap"
+msgstr "escrever índice de bitmap"
 
-#: builtin/repack.c:478
+#: builtin/repack.c:652
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "passar --delta-islands para git-pack-objects"
 
-#: builtin/repack.c:479
+#: builtin/repack.c:653
 msgid "approxidate"
 msgstr "aproximar"
 
-#: builtin/repack.c:480
+#: builtin/repack.c:654
 msgid "with -A, do not loosen objects older than this"
 msgstr "com -A, deixar de soltar objetos mais velhos que isto"
 
-#: builtin/repack.c:482
+#: builtin/repack.c:656
 msgid "with -a, repack unreachable objects"
 msgstr "com -a, reempacotar objetos inalcançáveis"
 
-#: builtin/repack.c:484
+#: builtin/repack.c:658
 msgid "size of the window used for delta compression"
 msgstr "dimensão da janela usada para compressão de delta"
 
-#: builtin/repack.c:485 builtin/repack.c:491
+#: builtin/repack.c:659 builtin/repack.c:665
 msgid "bytes"
 msgstr "bytes"
 
-#: builtin/repack.c:486
+#: builtin/repack.c:660
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr ""
 "o mesmo que o anterior, mas limitar a memória usada em vez do número de "
 "entradas"
 
-#: builtin/repack.c:488
+#: builtin/repack.c:662
 msgid "limits the maximum delta depth"
 msgstr "limitar a profundidade máxima de delta"
 
-#: builtin/repack.c:490
+#: builtin/repack.c:664
 msgid "limits the maximum number of threads"
 msgstr "limitar máximo número de fios"
 
-#: builtin/repack.c:492
+#: builtin/repack.c:666
 msgid "maximum size of each packfile"
 msgstr "tamanho máximo de cada ficheiro de pacote"
 
-#: builtin/repack.c:494
+#: builtin/repack.c:668
 msgid "repack objects in packs marked with .keep"
 msgstr "reempacotar objetos em pacotes marcados com .keep"
 
-#: builtin/repack.c:496
+#: builtin/repack.c:670
 msgid "do not repack this pack"
 msgstr "reempacotar nada deste pacote"
 
-#: builtin/repack.c:498
+#: builtin/repack.c:672
 msgid "find a geometric progression with factor <N>"
 msgstr ""
 
-#: builtin/repack.c:508
+#: builtin/repack.c:674
+msgid "write a multi-pack index of the resulting packs"
+msgstr ""
+
+#: builtin/repack.c:684
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "incapaz apagar pacotes num repo de precious-objects"
 
-#: builtin/repack.c:512
-msgid "--keep-unreachable and -A are incompatible"
-msgstr "--keep-unreachable e -A são incompatíveis"
-
-#: builtin/repack.c:527
-msgid "--geometric is incompatible with -A, -a"
-msgstr "--geometric é incompatível com -A, -a"
-
-#: builtin/repack.c:639
+#: builtin/repack.c:833
 msgid "Nothing new to pack."
 msgstr ""
 
-#: builtin/repack.c:669
+#: builtin/repack.c:863
 #, c-format
 msgid "missing required file: %s"
 msgstr ""
 
-#: builtin/repack.c:671
+#: builtin/repack.c:865
 #, c-format
 msgid "could not unlink: %s"
 msgstr "incapaz unlink: %s"
@@ -20934,10 +21616,6 @@ msgstr "git replace [-f] --edit <objeto>"
 msgid "git replace [-f] --graft <commit> [<parent>...]"
 msgstr "git replace [-f] --graft <memória> [<parente>...]"
 
-#: builtin/replace.c:25
-msgid "git replace [-f] --convert-graft-file"
-msgstr "git replace [-f] --convert-graft-file"
-
 #: builtin/replace.c:26
 msgid "git replace -d <object>..."
 msgstr "git replace -d <objeto>..."
@@ -20995,183 +21673,178 @@ msgstr ""
 msgid "unable to open %s for reading"
 msgstr "incapaz abrir %s para ler"
 
-#: builtin/replace.c:272
+#: builtin/replace.c:271
 msgid "unable to spawn mktree"
 msgstr "incapaz lançar mktree"
 
-#: builtin/replace.c:276
+#: builtin/replace.c:275
 msgid "unable to read from mktree"
 msgstr "incapaz ler de mktree"
 
-#: builtin/replace.c:285
+#: builtin/replace.c:284
 msgid "mktree reported failure"
 msgstr "mktree reportou falha"
 
-#: builtin/replace.c:289
+#: builtin/replace.c:288
 msgid "mktree did not return an object name"
 msgstr "mktree retornou nome de objeto nenhum"
 
-#: builtin/replace.c:298
+#: builtin/replace.c:297
 #, c-format
 msgid "unable to fstat %s"
 msgstr "incapaz fstat %s"
 
-#: builtin/replace.c:303
+#: builtin/replace.c:302
 msgid "unable to write object to database"
 msgstr "incapaz escrever objeto para base de dados"
 
-#: builtin/replace.c:322 builtin/replace.c:378 builtin/replace.c:424
-#: builtin/replace.c:454
-#, c-format
-msgid "not a valid object name: '%s'"
-msgstr "nome de objeto inválido: '%s'"
-
-#: builtin/replace.c:326
+#: builtin/replace.c:325
 #, c-format
 msgid "unable to get object type for %s"
 msgstr "incapaz obter tipo de objetos para %s"
 
-#: builtin/replace.c:342
+#: builtin/replace.c:341
 msgid "editing object file failed"
 msgstr "falhou editar ficheiro-objeto"
 
-#: builtin/replace.c:351
+#: builtin/replace.c:350
 #, c-format
 msgid "new object is the same as the old one: '%s'"
 msgstr ""
 
-#: builtin/replace.c:384
+#: builtin/replace.c:383
 #, c-format
 msgid "could not parse %s as a commit"
-msgstr "incapaz processar %s como commit"
+msgstr "incapaz processar %s como memória"
 
-#: builtin/replace.c:416
+#: builtin/replace.c:415
 #, c-format
 msgid "bad mergetag in commit '%s'"
-msgstr "mergetag inválida em memória '%s'"
+msgstr "mergetag inválida na memória '%s'"
 
-#: builtin/replace.c:418
+#: builtin/replace.c:417
 #, c-format
 msgid "malformed mergetag in commit '%s'"
-msgstr "mergetag malformada no commit '%s'"
+msgstr "mergetag malformada na memória '%s'"
 
-#: builtin/replace.c:430
+#: builtin/replace.c:429
 #, c-format
 msgid ""
 "original commit '%s' contains mergetag '%s' that is discarded; use --edit "
 "instead of --graft"
 msgstr ""
-"o commit original '%s' contém a mergetag '%s' que foi excluída; use --edit "
+"memória original '%s' contém a etiqueta-junção '%s' que foi descartada; usa --edit "
 "em vez de --graft"
 
-#: builtin/replace.c:469
+#: builtin/replace.c:468
 #, c-format
 msgid "the original commit '%s' has a gpg signature"
-msgstr "o commit original '%s' tem uma assinatura gpg."
+msgstr "a memória original '%s' tem uma assinatura gpg."
 
-#: builtin/replace.c:470
+#: builtin/replace.c:469
 msgid "the signature will be removed in the replacement commit!"
-msgstr "a assinatura será removida do commit suplente!"
+msgstr "a assinatura será removida na memória substituta!"
 
-#: builtin/replace.c:480
+#: builtin/replace.c:479
 #, c-format
 msgid "could not write replacement commit for: '%s'"
-msgstr "incapaz escrever o commit substituto para: '%s'"
+msgstr "incapaz escrever a memória substituta para: '%s'"
 
-#: builtin/replace.c:488
+#: builtin/replace.c:487
 #, c-format
 msgid "graft for '%s' unnecessary"
-msgstr ""
+msgstr "desnecessário enxerto para '%s'"
 
-#: builtin/replace.c:492
+#: builtin/replace.c:491
 #, c-format
 msgid "new commit is the same as the old one: '%s'"
 msgstr ""
 
-#: builtin/replace.c:527
+#: builtin/replace.c:526
 #, c-format
 msgid ""
 "could not convert the following graft(s):\n"
 "%s"
 msgstr ""
-"Impossível converter os seguinte(s) graft(s):\n"
+"incapaz converter os seguinte(s) enxerto(s):\n"
 "%s"
 
-#: builtin/replace.c:548
+#: builtin/replace.c:547
 msgid "list replace refs"
-msgstr "listar referências substituídas"
+msgstr "listar refs de substituição"
 
-#: builtin/replace.c:549
+#: builtin/replace.c:548
 msgid "delete replace refs"
 msgstr "eliminar refs de substituição"
 
-#: builtin/replace.c:550
+#: builtin/replace.c:549
 msgid "edit existing object"
 msgstr "editar objeto existente"
 
-#: builtin/replace.c:551
+#: builtin/replace.c:550
 msgid "change a commit's parents"
-msgstr "mudar os pais de um commit"
+msgstr "alterar parentes da memória"
 
-#: builtin/replace.c:552
+#: builtin/replace.c:551
 msgid "convert existing graft file"
-msgstr "converter ficheiro excerto existente"
+msgstr "converter ficheiro enxerto existente"
 
-#: builtin/replace.c:553
+#: builtin/replace.c:552
 msgid "replace the ref if it exists"
 msgstr "substituir a referência se esta existir"
 
-#: builtin/replace.c:555
+#: builtin/replace.c:554
 msgid "do not pretty-print contents for --edit"
 msgstr "incapaz pretty-print conteúdo para --edit"
 
-#: builtin/replace.c:556
+#: builtin/replace.c:555
 msgid "use this format"
 msgstr "usar este formato"
 
-#: builtin/replace.c:569
+#: builtin/replace.c:568
 msgid "--format cannot be used when not listing"
 msgstr "--format apenas pode ser usado quando fazes listagem"
 
-#: builtin/replace.c:577
+#: builtin/replace.c:576
 msgid "-f only makes sense when writing a replacement"
 msgstr "-f apenas faz sentido quando escreves um substituto"
 
-#: builtin/replace.c:581
+#: builtin/replace.c:580
 msgid "--raw only makes sense with --edit"
 msgstr "--raw apenas faz sentido com --edit"
 
-#: builtin/replace.c:587
+#: builtin/replace.c:586
 msgid "-d needs at least one argument"
 msgstr "-d precisa pelo menos um argumento"
 
-#: builtin/replace.c:593
+#: builtin/replace.c:592
 msgid "bad number of arguments"
 msgstr ""
 
-#: builtin/replace.c:599
+#: builtin/replace.c:598
 msgid "-e needs exactly one argument"
 msgstr ""
 
-#: builtin/replace.c:605
+#: builtin/replace.c:604
 msgid "-g needs at least one argument"
 msgstr ""
 
-#: builtin/replace.c:611
+#: builtin/replace.c:610
 msgid "--convert-graft-file takes no argument"
 msgstr "--convert-graft-file leva argumento nenhum"
 
-#: builtin/replace.c:617
+#: builtin/replace.c:616
 msgid "only one pattern can be given with -l"
 msgstr "com -l apenas pode ser dado um padrão"
 
 #: builtin/rerere.c:13
 msgid "git rerere [clear | forget <path>... | status | remaining | diff | gc]"
-msgstr "git rerere [clear | forget <caminho>... | status | remaining | diff | gc]"
+msgstr ""
+"git rerere [clear | forget <caminho>... | status | remaining | diff | gc]"
 
 #: builtin/rerere.c:58
 msgid "register clean resolutions in index"
-msgstr "registar resoluções limpas no índice"
+msgstr "registar resoluções corretas em cenário"
 
 #: builtin/rerere.c:77
 msgid "'git rerere forget' without paths is deprecated"
@@ -21182,162 +21855,154 @@ msgstr "'git rerere forget' sem caminho é obsoleto"
 msgid "unable to generate diff for '%s'"
 msgstr "incapaz gerar diff para '%s'"
 
-#: builtin/reset.c:32
+#: builtin/reset.c:33
 msgid ""
 "git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]"
 msgstr ""
-"git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]"
+"git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<memória>]"
 
-#: builtin/reset.c:33
+#: builtin/reset.c:34
 msgid "git reset [-q] [<tree-ish>] [--] <pathspec>..."
 msgstr "git reset [-q] [<arvoredo>] [--] <espetro-caminho>..."
 
-#: builtin/reset.c:34
+#: builtin/reset.c:35
 msgid ""
 "git reset [-q] [--pathspec-from-file [--pathspec-file-nul]] [<tree-ish>]"
 msgstr ""
+"git reset [-q] [--pathspec-from-file [--pathspec-file-nul]] [<arvoredo>]"
 
-#: builtin/reset.c:35
+#: builtin/reset.c:36
 msgid "git reset --patch [<tree-ish>] [--] [<pathspec>...]"
 msgstr "git reset --patch [<arvoredo>] [--] [<espetro-caminho>...]"
 
-#: builtin/reset.c:41
+#: builtin/reset.c:42
 msgid "mixed"
 msgstr "misturado"
 
-#: builtin/reset.c:41
+#: builtin/reset.c:42
 msgid "soft"
 msgstr "suave"
 
-#: builtin/reset.c:41
+#: builtin/reset.c:42
 msgid "hard"
 msgstr "forte"
 
-#: builtin/reset.c:41
+#: builtin/reset.c:42
 msgid "merge"
-msgstr "merge"
+msgstr "junção"
 
-#: builtin/reset.c:41
+#: builtin/reset.c:42
 msgid "keep"
 msgstr "conservador"
 
-#: builtin/reset.c:83
+#: builtin/reset.c:90
 msgid "You do not have a valid HEAD."
-msgstr "HEAD inválida."
+msgstr "Tens HEAD inválida."
 
-#: builtin/reset.c:85
+#: builtin/reset.c:92
 msgid "Failed to find tree of HEAD."
-msgstr "Falha ao procurar árvore de HEAD."
+msgstr "Falhou encontrar árvore de HEAD."
 
-#: builtin/reset.c:91
+#: builtin/reset.c:98
 #, c-format
 msgid "Failed to find tree of %s."
 msgstr "Falhou encontrar árvore de %s."
 
-#: builtin/reset.c:116
+#: builtin/reset.c:123
 #, c-format
 msgid "HEAD is now at %s"
 msgstr "HEAD está agora em %s"
 
-#: builtin/reset.c:195
+#: builtin/reset.c:304
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Incapaz de fazer uma reposição %s durante uma junção."
 
-#: builtin/reset.c:295 builtin/stash.c:589 builtin/stash.c:663
-#: builtin/stash.c:687
+#: builtin/reset.c:402 builtin/stash.c:606 builtin/stash.c:669
+#: builtin/stash.c:693
 msgid "be quiet, only report errors"
 msgstr "ficar silencioso, só reportar erros"
 
-#: builtin/reset.c:297
+#: builtin/reset.c:404
+msgid "skip refreshing the index after reset"
+msgstr ""
+
+#: builtin/reset.c:406
 msgid "reset HEAD and index"
-msgstr "repor HEAD e índice"
+msgstr "restabelecer HEAD e cenário"
 
-#: builtin/reset.c:298
+#: builtin/reset.c:407
 msgid "reset only HEAD"
-msgstr "repor HEAD apenas"
+msgstr "restabelecer apenas HEAD"
 
-#: builtin/reset.c:300 builtin/reset.c:302
+#: builtin/reset.c:409 builtin/reset.c:411
 msgid "reset HEAD, index and working tree"
 msgstr "restabelecer HEAD, cenário e árvore-trabalho"
 
-#: builtin/reset.c:304
+#: builtin/reset.c:413
 msgid "reset HEAD but keep local changes"
-msgstr "repor HEAD mas conservar alterações locais"
+msgstr "restabelecer HEAD mas conservar alterações locais"
 
-#: builtin/reset.c:310
+#: builtin/reset.c:419
 msgid "record only the fact that removed paths will be added later"
-msgstr "registar apenas o facto de que os caminhos removidos serão adicionados"
+msgstr ""
+"registar apenas o facto de que os caminhos removidos serão adicionados mais "
+"tarde"
 
-#: builtin/reset.c:344
+#: builtin/reset.c:452
 #, c-format
 msgid "Failed to resolve '%s' as a valid revision."
-msgstr "Falha ao resolver '%s' como referência válida."
+msgstr "Falhou resolver '%s' como referência válida."
 
-#: builtin/reset.c:352
+#: builtin/reset.c:460
 #, c-format
 msgid "Failed to resolve '%s' as a valid tree."
-msgstr "Falha ao resolver '%s' como árvore válida."
+msgstr "Falhou resolver '%s' como árvore válida."
 
-#: builtin/reset.c:361
-msgid "--patch is incompatible with --{hard,mixed,soft}"
-msgstr "--patch é incompatível com --{hard,mixed,soft}"
-
-#: builtin/reset.c:371
+#: builtin/reset.c:479
 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
 msgstr "--mixed com caminhos é obsoleto; usa 'git reset -- <caminhos>' invés."
 
-#: builtin/reset.c:373
+#: builtin/reset.c:481
 #, c-format
 msgid "Cannot do %s reset with paths."
-msgstr "Incapaz de fazer uma reposição %s com paths."
+msgstr "Incapaz de fazer uma reposição %s com caminhos."
 
-#: builtin/reset.c:388
+#: builtin/reset.c:496
 #, c-format
 msgid "%s reset is not allowed in a bare repository"
-msgstr "%s reset é proíbido num repositório nú"
-
-#: builtin/reset.c:392
-msgid "-N can only be used with --mixed"
-msgstr "-N só pode ser usado com --mixed"
+msgstr "%s restabelecer é proibido num repositório nu"
 
-#: builtin/reset.c:413
+#: builtin/reset.c:527
 msgid "Unstaged changes after reset:"
-msgstr "Alterações despreparadas depois de reposição:"
+msgstr "Alterações desencenadas depois do restabelecimento:"
 
-#: builtin/reset.c:416
+#: builtin/reset.c:530
 #, c-format
 msgid ""
-"\n"
-"It took %.2f seconds to enumerate unstaged changes after reset.  You can\n"
-"use '--quiet' to avoid this.  Set the config setting reset.quiet to true\n"
-"to make this the default.\n"
+"It took %.2f seconds to refresh the index after reset.  You can use\n"
+"'--no-refresh' to avoid this."
 msgstr ""
+"Demorou %.2f segundos para refrescar o cenário após restabelecimento.\n"
+"Para evitar isto, podes usar '--no-refresh'."
 
-#: builtin/reset.c:434
+#: builtin/reset.c:547
 #, c-format
 msgid "Could not reset index file to revision '%s'."
-msgstr "Incapaz repor ficheiro index para a revisão '%s'."
+msgstr "Incapaz restabelecer ficheiro de cenário para a revisão '%s'."
 
-#: builtin/reset.c:439
+#: builtin/reset.c:552
 msgid "Could not write new index file."
-msgstr "Incapaz escrever novo ficheiro index."
-
-#: builtin/rev-list.c:541
-msgid "cannot combine --exclude-promisor-objects and --missing"
-msgstr ""
+msgstr "Incapaz escrever ficheiro de cenário novo."
 
-#: builtin/rev-list.c:602
-msgid "object filtering requires --objects"
-msgstr ""
-
-#: builtin/rev-list.c:674
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr "rev-list insustenta mostrar notas"
 
-#: builtin/rev-list.c:679
-msgid "marked counting is incompatible with --objects"
-msgstr ""
+#: builtin/rev-list.c:664
+#, c-format
+msgid "marked counting and '%s' cannot be used together"
+msgstr "contagem marcada e '%s' só podem ser usadas separadamente"
 
 #: builtin/rev-parse.c:409
 msgid "git rev-parse --parseopt [<options>] -- [<args>...]"
@@ -21389,7 +22054,7 @@ msgstr "--resolve-git-dir exige argumento"
 #: builtin/rev-parse.c:715
 #, c-format
 msgid "not a gitdir '%s'"
-msgstr "gitdir '%s' nenhuma"
+msgstr "nenhuma pasta-git '%s'"
 
 #: builtin/rev-parse.c:739
 msgid "--git-path requires an argument"
@@ -21454,15 +22119,15 @@ msgstr "%s: %s incapaz ser usado com %s"
 
 #: builtin/revert.c:102
 msgid "end revert or cherry-pick sequence"
-msgstr "terminar reversão ou cherry-pick"
+msgstr "terminar sequência de reversão ou apanha"
 
 #: builtin/revert.c:103
 msgid "resume revert or cherry-pick sequence"
-msgstr "retomar a reversão ou cherry-pick"
+msgstr "retomar sequência de reversão ou apanha"
 
 #: builtin/revert.c:104
 msgid "cancel revert or cherry-pick sequence"
-msgstr "cancelar reversão ou cherry-pick"
+msgstr "cancelar sequência de reversão ou apanha"
 
 #: builtin/revert.c:105
 msgid "skip current commit and continue"
@@ -21470,7 +22135,7 @@ msgstr ""
 
 #: builtin/revert.c:107
 msgid "don't automatically commit"
-msgstr "memorizar automaticamente nada"
+msgstr "memorizar nada automaticamente"
 
 #: builtin/revert.c:108
 msgid "edit the commit message"
@@ -21482,7 +22147,7 @@ msgstr "número-parente"
 
 #: builtin/revert.c:112
 msgid "select mainline parent"
-msgstr "selecionar pai principal"
+msgstr "selecionar parente principal"
 
 #: builtin/revert.c:114
 msgid "merge strategy"
@@ -21494,23 +22159,27 @@ msgstr "opção para estratégia de junção"
 
 #: builtin/revert.c:125
 msgid "append commit name"
-msgstr "acrescentar nome do commit"
+msgstr "acrescentar nome de memória"
 
 #: builtin/revert.c:127
 msgid "preserve initially empty commits"
-msgstr "preservar commits inicialmente vazios"
+msgstr "preservar memórias inicialmente vazias"
+
+#: builtin/revert.c:128
+msgid "allow commits with empty messages"
+msgstr "permitir memórias com mensagens vazias"
 
 #: builtin/revert.c:129
 msgid "keep redundant, empty commits"
-msgstr "manter commits redundantes e vazios"
+msgstr "manter memórias redundantes e vazias"
 
-#: builtin/revert.c:237
+#: builtin/revert.c:241
 msgid "revert failed"
 msgstr "falha ao reverter"
 
-#: builtin/revert.c:250
+#: builtin/revert.c:254
 msgid "cherry-pick failed"
-msgstr "falha ao efetuar cherry-pick"
+msgstr "falhou a apanha"
 
 #: builtin/rm.c:20
 msgid "git rm [<options>] [--] <file>..."
@@ -21524,10 +22193,10 @@ msgid_plural ""
 "the following files have staged content different from both the\n"
 "file and the HEAD:"
 msgstr[0] ""
-"o seguinte ficheiro tem staged content diferente quer no ficheiro\n"
+"o ficheiro seguinte tem conteúdo encenado diferente quer no ficheiro\n"
 "quer em HEAD:"
 msgstr[1] ""
-"os seguintes ficheiros têm staged content diferente quer no ficheiro\n"
+"os ficheiros seguintes têm conteúdo encenado diferente quer no ficheiro\n"
 "quer em HEAD:"
 
 #: builtin/rm.c:213
@@ -21541,8 +22210,8 @@ msgstr ""
 #: builtin/rm.c:217
 msgid "the following file has changes staged in the index:"
 msgid_plural "the following files have changes staged in the index:"
-msgstr[0] "o seguinte ficheiro contém alterações preparadas no índice:"
-msgstr[1] "os seguintes ficheiros contêm alterações preparadas no índice:"
+msgstr[0] "o ficheiro seguinte tem alterações encenadas no cenário:"
+msgstr[1] "os ficheiros seguintes tem alterações encenadas no cenário:"
 
 #: builtin/rm.c:221 builtin/rm.c:230
 msgid ""
@@ -21558,70 +22227,70 @@ msgid_plural "the following files have local modifications:"
 msgstr[0] "o seguinte ficheiro contém alterações locais:"
 msgstr[1] "os seguintes ficheiros contêm alterações locais:"
 
-#: builtin/rm.c:244
+#: builtin/rm.c:245
 msgid "do not list removed files"
 msgstr "listar ficheiros removidos nenhuns"
 
-#: builtin/rm.c:245
+#: builtin/rm.c:246
 msgid "only remove from the index"
-msgstr "remover apenas do índice"
+msgstr "remover apenas de cenário"
 
-#: builtin/rm.c:246
+#: builtin/rm.c:247
 msgid "override the up-to-date check"
-msgstr "ignorar verificação de atualização"
+msgstr "sobrepor a verificação de atualização"
 
-#: builtin/rm.c:247
+#: builtin/rm.c:248
 msgid "allow recursive removal"
 msgstr "permitir remoção recursiva"
 
-#: builtin/rm.c:249
+#: builtin/rm.c:250
 msgid "exit with a zero status even if nothing matched"
 msgstr "sair com valor zero mesmo se nada corresponder"
 
-#: builtin/rm.c:283
+#: builtin/rm.c:285
 msgid "No pathspec was given. Which files should I remove?"
 msgstr ""
 
-#: builtin/rm.c:310
+#: builtin/rm.c:315
 msgid "please stage your changes to .gitmodules or stash them to proceed"
 msgstr ""
 "por favor encena tuas alterações em .gitmodules ou esconde-as para prosseguir"
 
-#: builtin/rm.c:331
+#: builtin/rm.c:337
 #, c-format
 msgid "not removing '%s' recursively without -r"
 msgstr "removendo '%s' recursivamente apenas com -r"
 
-#: builtin/rm.c:379
+#: builtin/rm.c:385
 #, c-format
 msgid "git rm: unable to remove %s"
 msgstr "git rm: incapaz remover %s"
 
 #: builtin/send-pack.c:20
 msgid ""
-"git send-pack [--all | --mirror] [--dry-run] [--force] [--receive-pack=<git-"
-"receive-pack>] [--verbose] [--thin] [--atomic] [<host>:]<directory> "
-"[<ref>...]\n"
-"  --all and explicit <ref> specification are mutually exclusive."
+"git send-pack [--mirror] [--dry-run] [--force]\n"
+"              [--receive-pack=<git-receive-pack>]\n"
+"              [--verbose] [--thin] [--atomic]\n"
+"              [<host>:]<directory> (--all | <ref>...)"
 msgstr ""
-"git send-pack [--all | --mirror] [--dry-run] [--force] [--receive-pack=<git-"
-"receive-pack>] [--verbose] [--thin] [--atomic] [<host>:]<diretório> "
-"[<ref>...]\n"
-"  --all e <ref> explícito são mutuamente exclusivos."
+"git send-pack [--mirror] [--dry-run] [--force]\n"
+"              [--receive-pack=<git-receive-pack>]\n"
+"              [--verbose] [--thin] [--atomic]\n"
+"              [<host>:]<pasta> (--all | <ref>...)"
 
-#: builtin/send-pack.c:188
+#: builtin/send-pack.c:192
 msgid "remote name"
 msgstr "nome de remoto"
 
-#: builtin/send-pack.c:201
+#: builtin/send-pack.c:205
 msgid "use stateless RPC protocol"
 msgstr "use protocolo RPC sem estado"
 
-#: builtin/send-pack.c:202
+#: builtin/send-pack.c:206
 msgid "read refs from stdin"
 msgstr "ler refs de entrada padrão"
 
-#: builtin/send-pack.c:203
+#: builtin/send-pack.c:207
 msgid "print status from remote helper"
 msgstr "imprimir status de ajudante remoto"
 
@@ -21652,11 +22321,11 @@ msgstr "agrupar por memorizador em vez de autor"
 
 #: builtin/shortlog.c:354
 msgid "sort output according to the number of commits per author"
-msgstr "ordenar saída de acordo com o número de commits por autor"
+msgstr "ordenar saída de acordo com o número de memórias por autor"
 
 #: builtin/shortlog.c:356
 msgid "suppress commit descriptions, only provides commit count"
-msgstr "suprimir a descrição dos commits, fornecer apenas o número de commits"
+msgstr "suprimir a descrição de memórias, fornecer apenas o número de memórias"
 
 #: builtin/shortlog.c:358
 msgid "show the email address of each author"
@@ -21678,27 +22347,28 @@ msgstr ""
 msgid "group by field"
 msgstr ""
 
-#: builtin/shortlog.c:391
+#: builtin/shortlog.c:395
 msgid "too many arguments given outside repository"
 msgstr ""
 
-#: builtin/show-branch.c:13
+#: builtin/show-branch.c:14
 msgid ""
 "git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
-"\t\t[--current] [--color[=<when>] | --no-color] [--sparse]\n"
-"\t\t[--more=<n> | --list | --independent | --merge-base]\n"
-"\t\t[--no-name | --sha1-name] [--topics] [(<rev> | <glob>)...]"
+"                [--current] [--color[=<when>] | --no-color] [--sparse]\n"
+"                [--more=<n> | --list | --independent | --merge-base]\n"
+"                [--no-name | --sha1-name] [--topics] [(<rev> | <glob>)...]"
 msgstr ""
 "git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
-"\t\t[--current] [--color[=<when>] | --no-color] [--sparse]\n"
-"\t\t[--more=<n> | --list | --independent | --merge-base]\n"
-"\t\t[--no-name | --sha1-name] [--topics] [(<revisão> | <glob>)...]"
+"                [--current] [--color[=<quando>] | --no-color] [--sparse]\n"
+"                [--more=<n> | --list | --independent | --merge-base]\n"
+"                [--no-name | --sha1-name] [--topics] [(<revisão> | "
+"<glob>)...]"
 
-#: builtin/show-branch.c:17
+#: builtin/show-branch.c:18
 msgid "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"
 msgstr "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"
 
-#: builtin/show-branch.c:395
+#: builtin/show-branch.c:396
 #, c-format
 msgid "ignoring %s; cannot handle more than %d ref"
 msgid_plural "ignoring %s; cannot handle more than %d refs"
@@ -21708,7 +22378,7 @@ msgstr[1] "ignorando %s; incapaz lidar mais que %d refs"
 #: builtin/show-branch.c:548
 #, c-format
 msgid "no matching refs with %s"
-msgstr "correspondência de refs com %s nenhuma"
+msgstr "nenhuma correspondência de refs com %s"
 
 #: builtin/show-branch.c:645
 msgid "show remote-tracking and local branches"
@@ -21716,7 +22386,7 @@ msgstr "mostrar os ramos de monitorização remotos e os ramos locais"
 
 #: builtin/show-branch.c:647
 msgid "show remote-tracking branches"
-msgstr ""
+msgstr "mostrar ramos remotos de monitorização"
 
 #: builtin/show-branch.c:649
 msgid "color '*!+-' corresponding to the branch"
@@ -21724,7 +22394,7 @@ msgstr "colorir '*!+-' correspondendo ao ramo"
 
 #: builtin/show-branch.c:651
 msgid "show <n> more commits after the common ancestor"
-msgstr "mostrar mais <n> commits depois do antecessor comum"
+msgstr "mostrar mais <n> memórias após a antecessora comum"
 
 #: builtin/show-branch.c:653
 msgid "synonym to more=-1"
@@ -21740,15 +22410,15 @@ msgstr "incluir o ramo atual"
 
 #: builtin/show-branch.c:658
 msgid "name commits with their object names"
-msgstr "designar commits pelos seus nomes de objeto"
+msgstr "designar memórias pelos seus nomes de objeto"
 
 #: builtin/show-branch.c:660
 msgid "show possible merge bases"
-msgstr "mostrar possíveis bases de integração"
+msgstr "mostrar possíveis bases de junção"
 
 #: builtin/show-branch.c:662
 msgid "show refs unreachable from any other ref"
-msgstr "mostrar referências inalcançáveis a partir de outras referências"
+msgstr "mostrar refs inalcançáveis a partir de outras refs"
 
 #: builtin/show-branch.c:664
 msgid "show commits in topological order"
@@ -21760,7 +22430,7 @@ msgstr "mostrar apenas memórias fora do primeiro ramo"
 
 #: builtin/show-branch.c:669
 msgid "show merges reachable from only one tip"
-msgstr "mostrar integrações alcançáveis a partir duma única ponta"
+msgstr "mostrar junções alcançáveis a partir duma única ponta"
 
 #: builtin/show-branch.c:671
 msgid "topologically sort, maintaining date order where possible"
@@ -21773,13 +22443,7 @@ msgstr "<n>[,<base>]"
 
 #: builtin/show-branch.c:675
 msgid "show <n> most recent ref-log entries starting at base"
-msgstr "mostrar as <n> entradas de ref-log mais recente a partir da base"
-
-#: builtin/show-branch.c:711
-msgid ""
-"--reflog is incompatible with --all, --remotes, --independent or --merge-base"
-msgstr ""
-"--reflog é incompatível com --all, --remotes, --independent or --merge-base"
+msgstr "mostrar as <n> entradas de ref-log mais recente começando na base"
 
 #: builtin/show-branch.c:735
 msgid "no branches given, and HEAD is not valid"
@@ -21793,8 +22457,8 @@ msgstr "opção --reflog precisa de nome de ramo"
 #, c-format
 msgid "only %d entry can be shown at one time."
 msgid_plural "only %d entries can be shown at one time."
-msgstr[0] "apenas %d entrada podem ser mostradas neste momento."
-msgstr[1] "apenas %d entradas podem ser mostradas neste momento."
+msgstr[0] "apenas %d entrada podem ser mostradas de uma só vez."
+msgstr[1] "apenas %d entradas podem ser mostradas de uma só vez."
 
 #: builtin/show-branch.c:745
 #, c-format
@@ -21816,7 +22480,7 @@ msgstr "'%s' é uma ref inválida."
 #: builtin/show-branch.c:838
 #, c-format
 msgid "cannot find commit %s (%s)"
-msgstr "incapaz encontrar commit %s (%s)"
+msgstr "incapaz encontrar memória %s (%s)"
 
 #: builtin/show-index.c:21
 msgid "hash-algorithm"
@@ -21840,17 +22504,15 @@ msgstr "git show-ref --exclude-existing[=<padrão>]"
 
 #: builtin/show-ref.c:162
 msgid "only show tags (can be combined with heads)"
-msgstr "mostrar apenas tags (pode ser combinado com heads)"
+msgstr "mostrar apenas etiquetas (pode ser combinado com cabeças)"
 
 #: builtin/show-ref.c:163
 msgid "only show heads (can be combined with tags)"
-msgstr "mostrar apenas cabeças (pode ser combinado com tags)"
+msgstr "mostrar apenas cabeças (pode ser combinado com etiquetas)"
 
 #: builtin/show-ref.c:164
 msgid "stricter reference checking, requires exact ref path"
-msgstr ""
-"verificação de referências mais rigorosa, requer o caminho exato da "
-"referência"
+msgstr "verificação de referências mais rigorosa, exige caminho exato da ref"
 
 #: builtin/show-ref.c:167 builtin/show-ref.c:169
 msgid "show the HEAD reference, even if it would be filtered out"
@@ -21858,7 +22520,7 @@ msgstr "mostrar a referência HEAD, mesmo que fosse filtrada"
 
 #: builtin/show-ref.c:171
 msgid "dereference tags into object IDs"
-msgstr "desreferenciar tags em IDs de objeto"
+msgstr "desreferenciar etiquetas em IDs de objeto"
 
 #: builtin/show-ref.c:173
 msgid "only show SHA1 hash using <n> digits"
@@ -21872,84 +22534,141 @@ msgstr "imprimir resultados nenhuns para stdout (útil com --verify)"
 msgid "show refs from stdin that aren't in local repository"
 msgstr "mostrar refs de stdin que estão fora do repositório local"
 
-#: builtin/sparse-checkout.c:22
+#: builtin/sparse-checkout.c:23
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
-msgstr ""
+msgstr "git sparse-checkout (init|list|set|add|reapply|disable) <opções>"
 
-#: builtin/sparse-checkout.c:46
-msgid "git sparse-checkout list"
-msgstr "git sparse-checkout list"
+#: builtin/sparse-checkout.c:61
+msgid "this worktree is not sparse"
+msgstr "esta árvore-trabalho é nada dispersa"
 
-#: builtin/sparse-checkout.c:72
+#: builtin/sparse-checkout.c:76
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr ""
 
-#: builtin/sparse-checkout.c:227
+#: builtin/sparse-checkout.c:177
+#, c-format
+msgid ""
+"directory '%s' contains untracked files, but is not in the sparse-checkout "
+"cone"
+msgstr ""
+
+#: builtin/sparse-checkout.c:185
+#, c-format
+msgid "failed to remove directory '%s'"
+msgstr "falhou remover pasta '%s'"
+
+#: builtin/sparse-checkout.c:327
 msgid "failed to create directory for sparse-checkout file"
 msgstr "falhou criar a pasta para ficheiro sparse-checkout"
 
-#: builtin/sparse-checkout.c:268
-msgid "unable to upgrade repository format to enable worktreeConfig"
-msgstr ""
-
-#: builtin/sparse-checkout.c:270
-msgid "failed to set extensions.worktreeConfig setting"
-msgstr ""
+#: builtin/sparse-checkout.c:366
+msgid "failed to initialize worktree config"
+msgstr "falhou iniciar config da árvore-trabalho"
 
-#: builtin/sparse-checkout.c:290
-msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
+#: builtin/sparse-checkout.c:411
+msgid "failed to modify sparse-index config"
 msgstr ""
 
-#: builtin/sparse-checkout.c:310
+#: builtin/sparse-checkout.c:441 builtin/sparse-checkout.c:793
+#: builtin/sparse-checkout.c:847
 msgid "initialize the sparse-checkout in cone mode"
 msgstr ""
 
-#: builtin/sparse-checkout.c:312
+#: builtin/sparse-checkout.c:443 builtin/sparse-checkout.c:795
+#: builtin/sparse-checkout.c:849
 msgid "toggle the use of a sparse index"
 msgstr ""
 
-#: builtin/sparse-checkout.c:340
-msgid "failed to modify sparse-index config"
-msgstr ""
-
-#: builtin/sparse-checkout.c:361
+#: builtin/sparse-checkout.c:479
 #, c-format
 msgid "failed to open '%s'"
 msgstr "falhou abrir '%s'"
 
-#: builtin/sparse-checkout.c:413
+#: builtin/sparse-checkout.c:531
 #, c-format
 msgid "could not normalize path %s"
 msgstr "incapaz normalizar patch %s"
 
-#: builtin/sparse-checkout.c:425
-msgid "git sparse-checkout (set|add) (--stdin | <patterns>)"
-msgstr ""
-
-#: builtin/sparse-checkout.c:450
+#: builtin/sparse-checkout.c:560
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr "incapaz de unquote string de C-style '%s'"
 
-#: builtin/sparse-checkout.c:504 builtin/sparse-checkout.c:528
+#: builtin/sparse-checkout.c:615 builtin/sparse-checkout.c:643
 msgid "unable to load existing sparse-checkout patterns"
 msgstr ""
 
-#: builtin/sparse-checkout.c:573
+#: builtin/sparse-checkout.c:619
+msgid "existing sparse-checkout patterns do not use cone mode"
+msgstr ""
+
+#: builtin/sparse-checkout.c:707
+msgid "please run from the toplevel directory in non-cone mode"
+msgstr ""
+
+#: builtin/sparse-checkout.c:712
+msgid "specify directories rather than patterns (no leading slash)"
+msgstr ""
+
+#: builtin/sparse-checkout.c:714
+msgid ""
+"specify directories rather than patterns.  If your directory starts with a "
+"'!', pass --skip-checks"
+msgstr ""
+
+#: builtin/sparse-checkout.c:716
+msgid ""
+"specify directories rather than patterns.  If your directory really has any "
+"of '*?[]\\' in it, pass --skip-checks"
+msgstr ""
+
+#: builtin/sparse-checkout.c:732
+#, c-format
+msgid ""
+"'%s' is not a directory; to treat it as a directory anyway, rerun with --"
+"skip-checks"
+msgstr ""
+
+#: builtin/sparse-checkout.c:734
+#, c-format
+msgid ""
+"pass a leading slash before paths such as '%s' if you want a single file "
+"(see NON-CONE PROBLEMS in the git-sparse-checkout manual)."
+msgstr ""
+
+#: builtin/sparse-checkout.c:739
+msgid "git sparse-checkout add [--skip-checks] (--stdin | <patterns>)"
+msgstr "git sparse-checkout add [--skip-checks] (--stdin | <padrão>)"
+
+#: builtin/sparse-checkout.c:752 builtin/sparse-checkout.c:797
+msgid ""
+"skip some sanity checks on the given paths that might give false positives"
+msgstr ""
+
+#: builtin/sparse-checkout.c:755 builtin/sparse-checkout.c:800
 msgid "read patterns from standard in"
 msgstr ""
 
-#: builtin/sparse-checkout.c:588
-msgid "git sparse-checkout reapply"
-msgstr "git sparse-checkout reapply"
+#: builtin/sparse-checkout.c:760
+msgid "no sparse-checkout to add to"
+msgstr "nenhum sparse-checkout a que adicionar"
 
-#: builtin/sparse-checkout.c:607
-msgid "git sparse-checkout disable"
-msgstr "git sparse-checkout disable"
+#: builtin/sparse-checkout.c:775
+msgid ""
+"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] "
+"(--stdin | <patterns>)"
+msgstr ""
+"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] "
+"(--stdin | <padrões>)"
+
+#: builtin/sparse-checkout.c:854
+msgid "must be in a sparse-checkout to reapply sparsity patterns"
+msgstr ""
 
-#: builtin/sparse-checkout.c:638
+#: builtin/sparse-checkout.c:914
 msgid "error while refreshing working directory"
-msgstr "erro enquanto refrescava pasta de trabalho"
+msgstr "erro ao refrescar pasta-trabalho"
 
 #: builtin/stash.c:24 builtin/stash.c:40
 msgid "git stash list [<options>]"
@@ -21961,11 +22680,11 @@ msgstr "git stash show [<opções>] [<esconderijo>]"
 
 #: builtin/stash.c:26 builtin/stash.c:50
 msgid "git stash drop [-q|--quiet] [<stash>]"
-msgstr ""
+msgstr "git stash drop [-q|--quiet] [<esconderijo>]"
 
 #: builtin/stash.c:27
 msgid "git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]"
-msgstr ""
+msgstr "git stash ( pop | apply ) [--index] [-q|--quiet] [<esconderijo>]"
 
 #: builtin/stash.c:28 builtin/stash.c:65
 msgid "git stash branch <branchname> [<stash>]"
@@ -21973,29 +22692,39 @@ msgstr "git stash branch <nome-de-ramo> [<esconderijo>]"
 
 #: builtin/stash.c:30
 msgid ""
-"git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
+"git stash [push [-p|--patch] [-S|--staged] [-k|--[no-]keep-index] [-q|--"
+"quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
 "          [--pathspec-from-file=<file> [--pathspec-file-nul]]\n"
 "          [--] [<pathspec>...]]"
 msgstr ""
+"git stash [push [-p|--patch] [-S|--staged] [-k|--[no-]keep-index] [-q|--"
+"quiet]\n"
+"          [-u|--include-untracked] [-a|--all] [-m|--message <mensagem>]\n"
+"          [--pathspec-from-file=<ficheiro> [--pathspec-file-nul]]\n"
+"          [--] [<espetro-caminho>...]]"
 
-#: builtin/stash.c:34 builtin/stash.c:87
+#: builtin/stash.c:34
 msgid ""
-"git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
+"git stash save [-p|--patch] [-S|--staged] [-k|--[no-]keep-index] [-q|--"
+"quiet]\n"
 "          [-u|--include-untracked] [-a|--all] [<message>]"
 msgstr ""
+"git stash save [-p|--patch] [-S|--staged] [-k|--[no-]keep-index] [-q|--"
+"quiet]\n"
+"          [-u|--include-untracked] [-a|--all] [<mensagem>]"
 
 #: builtin/stash.c:55
 msgid "git stash pop [--index] [-q|--quiet] [<stash>]"
-msgstr ""
+msgstr "git stash pop [--index] [-q|--quiet] [<esconderijo>]"
 
 #: builtin/stash.c:60
 msgid "git stash apply [--index] [-q|--quiet] [<stash>]"
-msgstr ""
+msgstr "git stash apply [--index] [-q|--quiet] [<esconderijo>]"
 
 #: builtin/stash.c:75
 msgid "git stash store [-m|--message <message>] [-q|--quiet] <commit>"
-msgstr ""
+msgstr "git stash store [-m|--message <mensagem>] [-q|--quiet] <memória>"
 
 #: builtin/stash.c:80
 msgid ""
@@ -22003,11 +22732,22 @@ msgid ""
 "          [-u|--include-untracked] [-a|--all] [-m|--message <message>]\n"
 "          [--] [<pathspec>...]]"
 msgstr ""
+"git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
+"          [-u|--include-untracked] [-a|--all] [-m|--message <mensagem>]\n"
+"          [--] [<espetro-caminho>...]]"
+
+#: builtin/stash.c:87
+msgid ""
+"git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
+"               [-u|--include-untracked] [-a|--all] [<message>]"
+msgstr ""
+"git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]\n"
+"               [-u|--include-untracked] [-a|--all] [<mensagem>]"
 
 #: builtin/stash.c:130
 #, c-format
 msgid "'%s' is not a stash-like commit"
-msgstr "'%s' é commit tipo-arrumos nenhum"
+msgstr "'%s' é memória tipo esconderijo nenhuma"
 
 #: builtin/stash.c:150
 #, c-format
@@ -22016,7 +22756,7 @@ msgstr "Demasiadas revisões especificadas:%s"
 
 #: builtin/stash.c:164
 msgid "No stash entries found."
-msgstr "Nenhuma pilha encontrada."
+msgstr "Encontrado entrada de esconderijo nenhuma."
 
 #: builtin/stash.c:178
 #, c-format
@@ -22027,7 +22767,7 @@ msgstr "%s é referência inválida"
 msgid "git stash clear with arguments is unimplemented"
 msgstr "git stash clear com argumentos está por implementar"
 
-#: builtin/stash.c:431
+#: builtin/stash.c:447
 #, c-format
 msgid ""
 "WARNING: Untracked file in way of tracked file!  Renaming\n"
@@ -22035,179 +22775,181 @@ msgid ""
 "         to make room.\n"
 msgstr ""
 
-#: builtin/stash.c:492
+#: builtin/stash.c:508
 msgid "cannot apply a stash in the middle of a merge"
-msgstr "incapaz aplicar arrumação durante uma junção"
+msgstr "incapaz de esconder durante uma junção"
 
-#: builtin/stash.c:503
+#: builtin/stash.c:519
 #, c-format
 msgid "could not generate diff %s^!."
 msgstr "incapaz gerar diff %s^!."
 
-#: builtin/stash.c:510
+#: builtin/stash.c:526
 msgid "conflicts in index. Try without --index."
 msgstr "conflitos no cenário. Tenta sem --index."
 
-#: builtin/stash.c:516
+#: builtin/stash.c:532
 msgid "could not save index tree"
-msgstr "incapaz guardar árvore index"
-
-#: builtin/stash.c:525
-msgid "could not restore untracked files from stash"
-msgstr "incapaz restaurar ficheiros por seguir de arrumos"
+msgstr "incapaz guardar árvore de cenário"
 
-#: builtin/stash.c:539
+#: builtin/stash.c:552
 #, c-format
 msgid "Merging %s with %s"
 msgstr "Juntando %s com %s"
 
-#: builtin/stash.c:549
+#: builtin/stash.c:562
 msgid "Index was not unstashed."
-msgstr "Index está por despreparar."
+msgstr "Cenário ficou por sair do esconderijo."
+
+#: builtin/stash.c:576
+msgid "could not restore untracked files from stash"
+msgstr "incapaz restaurar ficheiros desmonitorizados de esconderijo"
 
-#: builtin/stash.c:591 builtin/stash.c:689
+#: builtin/stash.c:608 builtin/stash.c:695
 msgid "attempt to recreate the index"
-msgstr ""
+msgstr "tentativa de recriar o cenário"
 
-#: builtin/stash.c:635
+#: builtin/stash.c:641
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "Descartei %s (%s)"
 
-#: builtin/stash.c:638
+#: builtin/stash.c:644
 #, c-format
 msgid "%s: Could not drop stash entry"
-msgstr "%s: Incapaz descartar entrada de arrumos"
+msgstr "%s: Incapaz descartar entrada de esconderijo"
 
-#: builtin/stash.c:651
+#: builtin/stash.c:657
 #, c-format
 msgid "'%s' is not a stash reference"
-msgstr "'%s' é referência de arrumos nenhuma"
+msgstr "'%s' é referência de esconderijo nenhuma"
 
-#: builtin/stash.c:701
+#: builtin/stash.c:707
 msgid "The stash entry is kept in case you need it again."
-msgstr "A pilha é guarda no caso de precisar dela de novo."
+msgstr "A entrada de esconderijo está guardada caso voltes a precisar."
 
-#: builtin/stash.c:724
+#: builtin/stash.c:730
 msgid "No branch name specified"
 msgstr "Nenhum nome de ramo especificado"
 
-#: builtin/stash.c:808
+#: builtin/stash.c:809
 msgid "failed to parse tree"
 msgstr "falhou processar árvore"
 
-#: builtin/stash.c:819
+#: builtin/stash.c:820
 msgid "failed to unpack trees"
 msgstr "falhou desempacotar árvores"
 
-#: builtin/stash.c:839
+#: builtin/stash.c:840
 msgid "include untracked files in the stash"
 msgstr "incluir ficheiros desmonitorizados em esconderijo"
 
-#: builtin/stash.c:842
+#: builtin/stash.c:843
 msgid "only show untracked files in the stash"
-msgstr "mostrar apenas ficheiros desmonitorizados de esconderijo"
+msgstr "apenas mostrar ficheiros desmonitorizados de esconderijo"
 
-#: builtin/stash.c:929 builtin/stash.c:966
+#: builtin/stash.c:930 builtin/stash.c:967
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "Incapaz atualizar %s com %s"
 
-#: builtin/stash.c:947 builtin/stash.c:1602 builtin/stash.c:1667
+#: builtin/stash.c:948 builtin/stash.c:1667 builtin/stash.c:1739
 msgid "stash message"
 msgstr "mensagem de esconderijo"
 
-#: builtin/stash.c:957
+#: builtin/stash.c:958
 msgid "\"git stash store\" requires one <commit> argument"
-msgstr ""
+msgstr "\"git stash store\" exige um argumento <memória>"
+
+#: builtin/stash.c:1143
+msgid "No staged changes"
+msgstr "Alterações encenadas nenhumas"
 
-#: builtin/stash.c:1171
+#: builtin/stash.c:1204
 msgid "No changes selected"
 msgstr "Nenhuma alteração selecionada"
 
-#: builtin/stash.c:1271
+#: builtin/stash.c:1304
 msgid "You do not have the initial commit yet"
-msgstr "Commit inicial ainda é inexistente"
+msgstr "Memória inicial ainda é inexistente"
 
-#: builtin/stash.c:1298
+#: builtin/stash.c:1331
 msgid "Cannot save the current index state"
 msgstr "Incapaz guardar estado atual de index"
 
-#: builtin/stash.c:1307
+#: builtin/stash.c:1340
 msgid "Cannot save the untracked files"
-msgstr "Incapaz de guardar ficheiros por seguir"
+msgstr "Incapaz de guardar ficheiros desmonitorizados"
 
-#: builtin/stash.c:1318 builtin/stash.c:1327
+#: builtin/stash.c:1351 builtin/stash.c:1370
 msgid "Cannot save the current worktree state"
-msgstr "Incapaz guardar o estado atual de worktree"
+msgstr "Incapaz guardar estado atual de árvore-trabalho"
 
-#: builtin/stash.c:1355
+#: builtin/stash.c:1361
+msgid "Cannot save the current staged state"
+msgstr "Incapaz guardar estado atual de cenário"
+
+#: builtin/stash.c:1398
 msgid "Cannot record working tree state"
-msgstr "Incapaz gravar o estado de worktree"
+msgstr "Incapaz gravar estado de árvore-trabalho"
 
-#: builtin/stash.c:1404
+#: builtin/stash.c:1447
 msgid "Can't use --patch and --include-untracked or --all at the same time"
-msgstr "Impossível usar --patch e --include-untracked ou --all ao mesmo tempo"
+msgstr "Incapaz usar --patch e --include-untracked ou --all ao mesmo tempo"
+
+#: builtin/stash.c:1458
+msgid "Can't use --staged and --include-untracked or --all at the same time"
+msgstr "Incapaz usar --staged e --include-untracked ou --all ao mesmo tempo"
 
-#: builtin/stash.c:1422
+#: builtin/stash.c:1476
 msgid "Did you forget to 'git add'?"
-msgstr "Será que falta 'git add'?"
+msgstr "Será que esqueceste-te de 'git add'?"
 
-#: builtin/stash.c:1437
+#: builtin/stash.c:1491
 msgid "No local changes to save"
 msgstr "Com alterações locais para guardar nenhumas"
 
-#: builtin/stash.c:1444
+#: builtin/stash.c:1498
 msgid "Cannot initialize stash"
-msgstr "Incapaz inicializar arrumos"
+msgstr "Incapaz inicializar esconderijo"
 
-#: builtin/stash.c:1459
+#: builtin/stash.c:1513
 msgid "Cannot save the current status"
 msgstr "Incapaz guardar o estado atual"
 
-#: builtin/stash.c:1464
+#: builtin/stash.c:1518
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Pasta-trabalho e estado de cenário %s guardados"
 
-#: builtin/stash.c:1554
+#: builtin/stash.c:1615
 msgid "Cannot remove worktree changes"
 msgstr "Incapaz remover alterações de árvore-trabalho"
 
-#: builtin/stash.c:1593 builtin/stash.c:1658
+#: builtin/stash.c:1656 builtin/stash.c:1728
 msgid "keep index"
-msgstr ""
+msgstr "manter cenário"
+
+#: builtin/stash.c:1658 builtin/stash.c:1730
+msgid "stash staged changes only"
+msgstr "esconder apenas alterações encenadas"
 
-#: builtin/stash.c:1595 builtin/stash.c:1660
+#: builtin/stash.c:1660 builtin/stash.c:1732
 msgid "stash in patch mode"
-msgstr ""
+msgstr "esconder em modo remendos"
 
-#: builtin/stash.c:1596 builtin/stash.c:1661
+#: builtin/stash.c:1661 builtin/stash.c:1733
 msgid "quiet mode"
 msgstr "modo silencioso"
 
-#: builtin/stash.c:1598 builtin/stash.c:1663
+#: builtin/stash.c:1663 builtin/stash.c:1735
 msgid "include untracked files in stash"
 msgstr "incluir ficheiros desmonitorizados em esconderijo"
 
-#: builtin/stash.c:1600 builtin/stash.c:1665
+#: builtin/stash.c:1665 builtin/stash.c:1737
 msgid "include ignore files"
 msgstr "incluir ficheiros ignorados"
 
-#: builtin/stash.c:1700
-msgid ""
-"the stash.useBuiltin support has been removed!\n"
-"See its entry in 'git help config' for details."
-msgstr ""
-
-#: builtin/stripspace.c:18
-msgid "git stripspace [-s | --strip-comments]"
-msgstr "git stripspace [-s | --strip-comments]"
-
-#: builtin/stripspace.c:19
-msgid "git stripspace [-c | --comment-lines]"
-msgstr "git stripspace [-c | --comment-lines]"
-
 #: builtin/stripspace.c:37
 msgid "skip and remove all lines starting with comment character"
 msgstr ""
@@ -22217,48 +22959,52 @@ msgstr ""
 msgid "prepend comment character and space to each line"
 msgstr "preceder cada linha com um carácter de comentário e um espaço"
 
-#: builtin/submodule--helper.c:46 builtin/submodule--helper.c:2440
+#: builtin/submodule--helper.c:50 builtin/submodule--helper.c:2486
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "Esperava-se um nome completo de uma referência, obteve-se %s"
 
-#: builtin/submodule--helper.c:63
-msgid "submodule--helper print-default-remote takes no arguments"
-msgstr ""
-
-#: builtin/submodule--helper.c:101
+#: builtin/submodule--helper.c:103
 #, c-format
 msgid "cannot strip one component off url '%s'"
 msgstr "incapaz despir um componente a partir do url '%s'"
 
-#: builtin/submodule--helper.c:411 builtin/submodule--helper.c:1887
-#: builtin/submodule--helper.c:2891
+#: builtin/submodule--helper.c:213
+#, c-format
+msgid ""
+"could not look up configuration '%s'. Assuming this repository is its own "
+"authoritative upstream."
+msgstr ""
+"incapaz encontrar configuração '%s'. Assumindo que este repositório é o "
+"próprio repositório upstream autoritário."
+
+#: builtin/submodule--helper.c:413 builtin/submodule--helper.c:1873
 msgid "alternative anchor for relative paths"
 msgstr "âncora alternativa para caminhos relativos"
 
-#: builtin/submodule--helper.c:416
+#: builtin/submodule--helper.c:418
 msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper list [--prefix=<caminho>] [<caminho>...]"
 
-#: builtin/submodule--helper.c:474 builtin/submodule--helper.c:631
-#: builtin/submodule--helper.c:654
+#: builtin/submodule--helper.c:476 builtin/submodule--helper.c:617
+#: builtin/submodule--helper.c:640
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr "Nenhum URL encontrado para o caminho de submódulo '%s' em .gitmodules"
 
-#: builtin/submodule--helper.c:526
+#: builtin/submodule--helper.c:528
 #, c-format
 msgid "Entering '%s'\n"
 msgstr "Entrando em '%s'\n"
 
-#: builtin/submodule--helper.c:529
+#: builtin/submodule--helper.c:531
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
 "."
 msgstr ""
 
-#: builtin/submodule--helper.c:551
+#: builtin/submodule--helper.c:553
 #, c-format
 msgid ""
 "run_command returned non-zero status while recursing in the nested "
@@ -22266,227 +23012,214 @@ msgid ""
 "."
 msgstr ""
 
-#: builtin/submodule--helper.c:567
+#: builtin/submodule--helper.c:569
 msgid "suppress output of entering each submodule command"
 msgstr ""
 
-#: builtin/submodule--helper.c:569 builtin/submodule--helper.c:890
-#: builtin/submodule--helper.c:1489
+#: builtin/submodule--helper.c:571 builtin/submodule--helper.c:876
+#: builtin/submodule--helper.c:1458
 msgid "recurse into nested submodules"
 msgstr "percorrer recursivamente submódulos aninhados"
 
-#: builtin/submodule--helper.c:574
+#: builtin/submodule--helper.c:576
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr ""
 
-#: builtin/submodule--helper.c:601
-#, c-format
-msgid ""
-"could not look up configuration '%s'. Assuming this repository is its own "
-"authoritative upstream."
-msgstr ""
-"incapaz encontrar configuração '%s'. Assumindo que este repositório é o "
-"próprio repositório upstream autoritário."
-
-#: builtin/submodule--helper.c:668
+#: builtin/submodule--helper.c:654
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr "Falhou registar url para caminho de submódulo '%s'"
 
-#: builtin/submodule--helper.c:672
+#: builtin/submodule--helper.c:658
 #, c-format
 msgid "Submodule '%s' (%s) registered for path '%s'\n"
 msgstr "Submódulo '%s' (%s) registado para path '%s'\n"
 
-#: builtin/submodule--helper.c:682
+#: builtin/submodule--helper.c:668
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr "aviso: modo command update sugerido para submódulo '%s'\n"
 
-#: builtin/submodule--helper.c:689
+#: builtin/submodule--helper.c:675
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:711
+#: builtin/submodule--helper.c:697
 msgid "suppress output for initializing a submodule"
 msgstr ""
 
-#: builtin/submodule--helper.c:716
+#: builtin/submodule--helper.c:702
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr ""
 
-#: builtin/submodule--helper.c:789 builtin/submodule--helper.c:924
+#: builtin/submodule--helper.c:775 builtin/submodule--helper.c:910
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr ""
 "para path '%s' encontrei em .gitmodules, mapeamento de submódulo nenhum"
 
-#: builtin/submodule--helper.c:837
+#: builtin/submodule--helper.c:823
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr "incapaz resolver ref HEAD dentro de submódulo '%s'"
 
-#: builtin/submodule--helper.c:864 builtin/submodule--helper.c:1459
+#: builtin/submodule--helper.c:850 builtin/submodule--helper.c:1428
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "falhou percorrer recursivamente o submódulo '%s'"
 
-#: builtin/submodule--helper.c:888 builtin/submodule--helper.c:1625
+#: builtin/submodule--helper.c:874 builtin/submodule--helper.c:1595
 msgid "suppress submodule status output"
 msgstr "suprimir saída de status de submódulo"
 
-#: builtin/submodule--helper.c:889
+#: builtin/submodule--helper.c:875
 msgid ""
 "use commit stored in the index instead of the one stored in the submodule "
 "HEAD"
 msgstr ""
 
-#: builtin/submodule--helper.c:895
+#: builtin/submodule--helper.c:881
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr "git submodule status [--quiet] [--cached] [--recursive] [<caminho>...]"
 
-#: builtin/submodule--helper.c:919
+#: builtin/submodule--helper.c:905
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper name <caminho>"
 
-#: builtin/submodule--helper.c:991
+#: builtin/submodule--helper.c:977
 #, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr ""
 
-#: builtin/submodule--helper.c:994
+#: builtin/submodule--helper.c:980
 #, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr ""
 
-#: builtin/submodule--helper.c:1007
+#: builtin/submodule--helper.c:993
 #, c-format
 msgid "%s"
 msgstr "[%s]"
 
-#: builtin/submodule--helper.c:1057
+#: builtin/submodule--helper.c:1043
 #, c-format
 msgid "couldn't hash object from '%s'"
 msgstr "incapaz fazer hash a objeto a partir de '%s'"
 
-#: builtin/submodule--helper.c:1061
+#: builtin/submodule--helper.c:1047
 #, c-format
 msgid "unexpected mode %o\n"
 msgstr "modo inesperado %o\n"
 
-#: builtin/submodule--helper.c:1302
+#: builtin/submodule--helper.c:1288
 msgid "use the commit stored in the index instead of the submodule HEAD"
 msgstr ""
 
-#: builtin/submodule--helper.c:1304
+#: builtin/submodule--helper.c:1290
 msgid "compare the commit in the index with that in the submodule HEAD"
-msgstr "compara a memória no arquivador com aquela no submódulo HEAD"
+msgstr "compara a memória do cenário com aquela do submódulo HEAD"
 
-#: builtin/submodule--helper.c:1306
+#: builtin/submodule--helper.c:1292
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1308
+#: builtin/submodule--helper.c:1294
 msgid "limit the summary size"
 msgstr "limitar tamanho de sumário"
 
-#: builtin/submodule--helper.c:1313
+#: builtin/submodule--helper.c:1299
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr ""
 
-#: builtin/submodule--helper.c:1337
+#: builtin/submodule--helper.c:1323
 msgid "could not fetch a revision for HEAD"
 msgstr "incapaz buscar uma revisão para HEAD"
 
-#: builtin/submodule--helper.c:1342
-msgid "--cached and --files are mutually exclusive"
-msgstr ""
-
-#: builtin/submodule--helper.c:1409
+#: builtin/submodule--helper.c:1384
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr "Sincronizando url de submódulo para '%s'\n"
 
-#: builtin/submodule--helper.c:1415
+#: builtin/submodule--helper.c:1390
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr "falhou registar url para caminho de submódulo '%s'"
 
-#: builtin/submodule--helper.c:1429
+#: builtin/submodule--helper.c:1399
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1440
+#: builtin/submodule--helper.c:1409
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1487
+#: builtin/submodule--helper.c:1456
 msgid "suppress output of synchronizing submodule url"
 msgstr ""
 
-#: builtin/submodule--helper.c:1494
+#: builtin/submodule--helper.c:1463
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr ""
 
-#: builtin/submodule--helper.c:1548
+#: builtin/submodule--helper.c:1513
 #, c-format
 msgid ""
-"Submodule work tree '%s' contains a .git directory (use 'rm -rf' if you "
-"really want to remove it including all of its history)"
+"Submodule work tree '%s' contains a .git directory. This will be replaced "
+"with a .git file by using absorbgitdirs."
 msgstr ""
-"Submodule work tree '%s' tem uma pasta .git (usa 'rm -rf' se queres mesmo "
-"removê-la e remover toda a história)"
+"Árvore-trabalho de submódulo '%s' contém uma pasta .git. Esta será "
+"substituída por um ficheiro .git usando o absorbgitdirs."
 
-#: builtin/submodule--helper.c:1560
+#: builtin/submodule--helper.c:1530
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
 "them"
 msgstr ""
-"Árvore-trabalho de submódulo '%s' contém alterações locais; "
-"usa '-f' para as descartar"
+"Árvore-trabalho de submódulo '%s' contém alterações locais; usa '-f' para as "
+"descartar"
 
-#: builtin/submodule--helper.c:1568
+#: builtin/submodule--helper.c:1538
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "Pasta '%s' limpa\n"
 
-#: builtin/submodule--helper.c:1570
+#: builtin/submodule--helper.c:1540
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
-msgstr "Impossível remover submodule work tree '%s'\n"
+msgstr "Incapaz remover árvore-trabalho de submódulo '%s'\n"
 
-#: builtin/submodule--helper.c:1581
+#: builtin/submodule--helper.c:1551
 #, c-format
 msgid "could not create empty submodule directory %s"
-msgstr "incapaz criar pasta vazio de submódulo %s"
+msgstr "incapaz criar pasta vazia de submódulo %s"
 
-#: builtin/submodule--helper.c:1597
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr "Submódulo '%s' (%s) unregistred para caminho '%s'\n"
 
-#: builtin/submodule--helper.c:1626
+#: builtin/submodule--helper.c:1596
 msgid "remove submodule working trees even if they contain local changes"
 msgstr ""
 
-#: builtin/submodule--helper.c:1627
+#: builtin/submodule--helper.c:1597
 msgid "unregister all submodules"
 msgstr ""
 
-#: builtin/submodule--helper.c:1632
+#: builtin/submodule--helper.c:1602
 msgid ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
 msgstr ""
 
-#: builtin/submodule--helper.c:1646
+#: builtin/submodule--helper.c:1616
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr "Usa '--all' se queres mesmo anular a inicialização de todos submódulos"
 
-#: builtin/submodule--helper.c:1690
+#: builtin/submodule--helper.c:1665
 msgid ""
 "An alternate computed from a superproject's alternate is invalid.\n"
 "To allow Git to clone without an alternate in such a case, set\n"
@@ -22494,296 +23227,461 @@ msgid ""
 "'--reference-if-able' instead of '--reference'."
 msgstr ""
 
-#: builtin/submodule--helper.c:1729 builtin/submodule--helper.c:1732
+#: builtin/submodule--helper.c:1710 builtin/submodule--helper.c:1713
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "submódulo '%s' incapaz adicionar alternativo: %s"
 
-#: builtin/submodule--helper.c:1768
+#: builtin/submodule--helper.c:1749
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr "Valor '%s' de submodule.alternateErrorStrategy é irreconhecível"
 
-#: builtin/submodule--helper.c:1775
+#: builtin/submodule--helper.c:1756
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "Valor '%s' de submodule.alternateLocation é irreconhecível"
 
-#: builtin/submodule--helper.c:1800
+#: builtin/submodule--helper.c:1781
 #, c-format
 msgid "refusing to create/use '%s' in another submodule's git dir"
 msgstr "recusando criar/usar '%s' em outra pasta de submódulo git"
 
-#: builtin/submodule--helper.c:1841
+#: builtin/submodule--helper.c:1826
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
 msgstr "clonar '%s' no caminho de submódulo '%s' falhou"
 
-#: builtin/submodule--helper.c:1846
+#: builtin/submodule--helper.c:1831
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr "pasta com conteúdo: '%s'"
 
-#: builtin/submodule--helper.c:1858
+#: builtin/submodule--helper.c:1843
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr "incapaz obter pasta de submódulo para '%s'"
 
-#: builtin/submodule--helper.c:1890 builtin/submodule--helper.c:2894
+#: builtin/submodule--helper.c:1876
 msgid "where the new submodule will be cloned to"
-msgstr "sítio para aonde o novo submódulo será clonado"
+msgstr "para onde o novo submódulo será clonado"
 
-#: builtin/submodule--helper.c:1893 builtin/submodule--helper.c:2897
+#: builtin/submodule--helper.c:1879
 msgid "name of the new submodule"
 msgstr "nome do novo submódulo"
 
-#: builtin/submodule--helper.c:1896 builtin/submodule--helper.c:2900
+#: builtin/submodule--helper.c:1882
 msgid "url where to clone the submodule from"
-msgstr "url donde clonar o submódulos"
+msgstr "url donde clonar o submódulo"
 
-#: builtin/submodule--helper.c:1904 builtin/submodule--helper.c:2907
+#: builtin/submodule--helper.c:1890 builtin/submodule--helper.c:3383
 msgid "depth for shallow clones"
-msgstr "profundidade de clones rasos"
+msgstr "profundidade de clones superficiais"
 
-#: builtin/submodule--helper.c:1907 builtin/submodule--helper.c:2365
-#: builtin/submodule--helper.c:2909
+#: builtin/submodule--helper.c:1893 builtin/submodule--helper.c:2731
+#: builtin/submodule--helper.c:3376
 msgid "force cloning progress"
 msgstr "forçar progresso da clonagem"
 
-#: builtin/submodule--helper.c:1909 builtin/submodule--helper.c:2367
+#: builtin/submodule--helper.c:1895 builtin/submodule--helper.c:2733
 msgid "disallow cloning into non-empty directory"
 msgstr "proibindo clonar para uma pasta com conteúdo"
 
-#: builtin/submodule--helper.c:1916
+#: builtin/submodule--helper.c:1903
+#, fuzzy
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
-"<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
-"<url> --path <path>"
+"<repository>] [--name <name>] [--depth <depth>] [--single-branch] [--filter "
+"<filter-spec>] --url <url> --path <path>"
 msgstr ""
 "git submodule--helper clone [--prefix=<caminho>] [--quiet] [--reference "
-"<repositório>] [--name <nome>] [--depth <depth>] --url <url> --path <caminho>"
+"<repositório>] [--name <nome>] [--depth <profundidade>] [--single-branch] [--"
+"filter <espetro-filtro>] --url <url> --path <caminho>"
 
-#: builtin/submodule--helper.c:1953
+#: builtin/submodule--helper.c:1943
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:1957
+#: builtin/submodule--helper.c:1947
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr ""
 
-#: builtin/submodule--helper.c:2058
+#: builtin/submodule--helper.c:2041
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "Path de submódulo '%s' por inicializar"
 
-#: builtin/submodule--helper.c:2062
+#: builtin/submodule--helper.c:2045
 msgid "Maybe you want to use 'update --init'?"
 msgstr "Pretendias usar 'update --init'?"
 
-#: builtin/submodule--helper.c:2092
+#: builtin/submodule--helper.c:2075
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "Passando à frente submódulo por juntar %s"
 
-#: builtin/submodule--helper.c:2121
+#: builtin/submodule--helper.c:2104
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "Passando à frente submódulo '%s'"
 
-#: builtin/submodule--helper.c:2271
+#: builtin/submodule--helper.c:2257
 #, c-format
 msgid "Failed to clone '%s'. Retry scheduled"
 msgstr "Falha ao clonar '%s'. Nova tentativa agendada"
 
-#: builtin/submodule--helper.c:2282
+#: builtin/submodule--helper.c:2268
 #, c-format
 msgid "Failed to clone '%s' a second time, aborting"
 msgstr "Falha ao clonar '%s' pela segunda vez, abortado"
 
-#: builtin/submodule--helper.c:2344 builtin/submodule--helper.c:2590
-msgid "path into the working tree"
-msgstr "caminho para árvore de trabalho"
+#: builtin/submodule--helper.c:2371
+#, c-format
+msgid "Unable to checkout '%s' in submodule path '%s'"
+msgstr "Incapaz de observar '%s' em caminho de submódulo '%s'"
 
-#: builtin/submodule--helper.c:2347
+#: builtin/submodule--helper.c:2375
+#, c-format
+msgid "Unable to rebase '%s' in submodule path '%s'"
+msgstr "Incapaz de rebasear '%s' em caminho de submódulo '%s'"
+
+#: builtin/submodule--helper.c:2379
+#, c-format
+msgid "Unable to merge '%s' in submodule path '%s'"
+msgstr "Incapaz juntar '%s' em caminho de submódulo '%s'"
+
+#: builtin/submodule--helper.c:2383
+#, c-format
+msgid "Execution of '%s %s' failed in submodule path '%s'"
+msgstr "Execução de '%s %s' falhou em caminho de submódulo '%s'"
+
+#: builtin/submodule--helper.c:2402
+#, c-format
+msgid "Submodule path '%s': checked out '%s'\n"
+msgstr "Caminho de submódulo '%s': '%s' observado\n"
+
+#: builtin/submodule--helper.c:2406
+#, c-format
+msgid "Submodule path '%s': rebased into '%s'\n"
+msgstr "Caminho de submódulo '%s': rebaseado para '%s'\n"
+
+#: builtin/submodule--helper.c:2410
+#, c-format
+msgid "Submodule path '%s': merged in '%s'\n"
+msgstr "Caminho de submódulo '%s': juntado em '%s'\n"
+
+#: builtin/submodule--helper.c:2414
+#, c-format
+msgid "Submodule path '%s': '%s %s'\n"
+msgstr "Caminho de submódulo '%s': '%s %s'\n"
+
+#: builtin/submodule--helper.c:2438
+#, c-format
+msgid "Unable to fetch in submodule path '%s'; trying to directly fetch %s:"
+msgstr ""
+"Incapaz de buscar em caminho de submódulo '%s'; tentando buscar %s "
+"directamente:"
+
+#: builtin/submodule--helper.c:2447
+#, c-format
+msgid ""
+"Fetched in submodule path '%s', but it did not contain %s. Direct fetching "
+"of that commit failed."
+msgstr ""
+"Buscado no caminho de submódulo '%s', mas continha nenhum %s. Falhou ao "
+"buscar essa memória diretamente."
+
+#: builtin/submodule--helper.c:2481
+#, c-format
+msgid ""
+"Submodule (%s) branch configured to inherit branch from superproject, but "
+"the superproject is not on any branch"
+msgstr ""
+"Ramo de submódulo (%s) foi configurado para herdar ramo de superprojeto, mas "
+"o superprojeto está em ramo nenhum"
+
+#: builtin/submodule--helper.c:2499
+#, c-format
+msgid "could not get a repository handle for submodule '%s'"
+msgstr "incapaz obter pega de repositório para submódulo '%s'"
+
+#: builtin/submodule--helper.c:2588
+#, c-format
+msgid "Unable to find current revision in submodule path '%s'"
+msgstr "Incapaz encontrar revisão atual em caminho de submódulo '%s'"
+
+#: builtin/submodule--helper.c:2599
+#, c-format
+msgid "Unable to fetch in submodule path '%s'"
+msgstr "Incapaz de buscar em caminho de submódulo '%s'"
+
+#: builtin/submodule--helper.c:2604
+#, c-format
+msgid "Unable to find %s revision in submodule path '%s'"
+msgstr "Incapaz encontrar revisão %s em caminho de submódulo '%s'"
+
+#: builtin/submodule--helper.c:2640
+#, c-format
+msgid "Failed to recurse into submodule path '%s'"
+msgstr "Falhou percorrer recursivamente o caminho de submódulo '%s'"
+
+#: builtin/submodule--helper.c:2699
+msgid "force checkout updates"
+msgstr "forçar atualizações de observação"
+
+#: builtin/submodule--helper.c:2701
+msgid "initialize uninitialized submodules before update"
+msgstr "iniciar submódulos por iniciar antes de atualização"
+
+#: builtin/submodule--helper.c:2703
+msgid "use SHA-1 of submodule's remote tracking branch"
+msgstr "usa o SHA-1 de ramo remoto de monitorização de submódulo"
+
+#: builtin/submodule--helper.c:2705
+msgid "traverse submodules recursively"
+msgstr ""
+
+#: builtin/submodule--helper.c:2707
+msgid "don't fetch new objects from the remote site"
+msgstr "buscar nenhuns objetos novos de sítio remoto"
+
+#: builtin/submodule--helper.c:2710 builtin/submodule--helper.c:2892
+msgid "path into the working tree"
+msgstr "caminho para a árvore-trabalho"
+
+#: builtin/submodule--helper.c:2713
 msgid "path into the working tree, across nested submodule boundaries"
 msgstr ""
-"caminho para a árvore de trabalho, atravessando limites de submódulos "
-"aninhados"
+"caminho para a árvore-trabalho, atravessando fronteiras de submódulos "
+"encaixados"
 
-#: builtin/submodule--helper.c:2351
+#: builtin/submodule--helper.c:2717
 msgid "rebase, merge, checkout or none"
 msgstr "rebase, merge, checkout ou none"
 
-#: builtin/submodule--helper.c:2357
+#: builtin/submodule--helper.c:2723
 msgid "create a shallow clone truncated to the specified number of revisions"
-msgstr "criar um clone superficial, truncado ao número especificado de revisões"
+msgstr ""
+"criar um clone superficial, truncado ao número especificado de revisões"
 
-#: builtin/submodule--helper.c:2360
+#: builtin/submodule--helper.c:2726
 msgid "parallel jobs"
 msgstr "trabalhos em paralelo"
 
-#: builtin/submodule--helper.c:2362
+#: builtin/submodule--helper.c:2728
 msgid "whether the initial clone should follow the shallow recommendation"
-msgstr "se o clone inicial deve seguir a recomendação rasa"
+msgstr "se o clone inicial deve seguir a recomendação da superfície"
 
-#: builtin/submodule--helper.c:2363
+#: builtin/submodule--helper.c:2729
 msgid "don't print cloning progress"
-msgstr "imprimir progresso da clonagem nenhum"
-
-#: builtin/submodule--helper.c:2374
-msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
-msgstr "git submodule--helper update-clone [--prefix=<caminho>] [<caminho>...]"
-
-#: builtin/submodule--helper.c:2387
-msgid "bad value for update parameter"
-msgstr "valor incorreto no parâmetro update"
+msgstr "mostrar nenhum progresso da clonagem"
 
-#: builtin/submodule--helper.c:2435
-#, c-format
+#: builtin/submodule--helper.c:2741
 msgid ""
-"Submodule (%s) branch configured to inherit branch from superproject, but "
-"the superproject is not on any branch"
+"git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] "
+"[-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-"
+"shallow] [--reference <repository>] [--recursive] [--[no-]single-branch] "
+"[--] [<path>...]"
 msgstr ""
-"Ramo de submódulo (%s) foi configurado para herdar o ramo do superprojeto, "
-"mas o superprojeto está em ramo nenhum"
+"git submodule [--quiet] update [--init [--filter=<espetro-filtro>]] [--"
+"remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--"
+"[no-]recommend-shallow] [--reference <repositório>] [--recursive] [--"
+"[no-]single-branch] [--] [<caminho>...]"
 
-#: builtin/submodule--helper.c:2558
-#, c-format
-msgid "could not get a repository handle for submodule '%s'"
-msgstr "incapaz obter pega de repositório para submódulo '%s'"
+#: builtin/submodule--helper.c:2767
+msgid "bad value for update parameter"
+msgstr "valor incorreto no parâmetro update"
 
-#: builtin/submodule--helper.c:2591
+#: builtin/submodule--helper.c:2893
 msgid "recurse into submodules"
 msgstr "entrar recursivamente nos submódulos"
 
-#: builtin/submodule--helper.c:2597
+#: builtin/submodule--helper.c:2899
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr "git submodule--helper absorb-git-dirs [<opções>] [<caminho>...]"
 
-#: builtin/submodule--helper.c:2653
+#: builtin/submodule--helper.c:2955
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr ""
 
-#: builtin/submodule--helper.c:2656
+#: builtin/submodule--helper.c:2958
 msgid "unset the config in the .gitmodules file"
-msgstr "desdefinir a config no ficheiro .gitmodules"
+msgstr "indefinir a config no ficheiro .gitmodules"
 
-#: builtin/submodule--helper.c:2661
+#: builtin/submodule--helper.c:2963
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config <nome> [<valor>]"
 
-#: builtin/submodule--helper.c:2662
+#: builtin/submodule--helper.c:2964
 msgid "git submodule--helper config --unset <name>"
 msgstr ""
 
-#: builtin/submodule--helper.c:2663
-msgid "git submodule--helper config --check-writeable"
-msgstr ""
-
-#: builtin/submodule--helper.c:2682 git-submodule.sh:150
-#, sh-format
+#: builtin/submodule--helper.c:2984 builtin/submodule--helper.c:3238
+#: builtin/submodule--helper.c:3395
 msgid "please make sure that the .gitmodules file is in the working tree"
-msgstr "por favor certifica-te que ficheiro .gitmodules está na árvore-trabalho"
+msgstr ""
+"por favor certifica-te que ficheiro .gitmodules está na árvore-trabalho"
 
-#: builtin/submodule--helper.c:2698
+#: builtin/submodule--helper.c:3000
 msgid "suppress output for setting url of a submodule"
 msgstr ""
 
-#: builtin/submodule--helper.c:2702
+#: builtin/submodule--helper.c:3004
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr ""
 
-#: builtin/submodule--helper.c:2735
+#: builtin/submodule--helper.c:3037
 msgid "set the default tracking branch to master"
-msgstr ""
+msgstr "definir o ramo de monitorização predefinido como master"
 
-#: builtin/submodule--helper.c:2737
+#: builtin/submodule--helper.c:3039
 msgid "set the default tracking branch"
-msgstr ""
+msgstr "definir o ramo de monitorização predefinido"
 
-#: builtin/submodule--helper.c:2741
+#: builtin/submodule--helper.c:3043
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr "git submodule--helper set-branch [-q|--quiet] (-d|--default) <caminho>"
 
-#: builtin/submodule--helper.c:2742
+#: builtin/submodule--helper.c:3044
 msgid ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 msgstr ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <ramo> <caminho>"
 
-#: builtin/submodule--helper.c:2749
+#: builtin/submodule--helper.c:3051
 msgid "--branch or --default required"
 msgstr "--branch ou --default exigido"
 
-#: builtin/submodule--helper.c:2752
-msgid "--branch and --default are mutually exclusive"
+#: builtin/submodule--helper.c:3072 builtin/submodule--helper.c:3375
+msgid "print only error messages"
+msgstr "imprimir apenas mensagens de erro"
+
+#: builtin/submodule--helper.c:3073
+msgid "force creation"
+msgstr ""
+
+#: builtin/submodule--helper.c:3081
+msgid "show whether the branch would be created"
+msgstr "mostrar se ramo seria criado"
+
+#: builtin/submodule--helper.c:3085
+msgid ""
+"git submodule--helper create-branch [-f|--force] [--create-reflog] [-q|--"
+"quiet] [-t|--track] [-n|--dry-run] <name> <start-oid> <start-name>"
 msgstr ""
 
-#: builtin/submodule--helper.c:2815
+#: builtin/submodule--helper.c:3097
+#, c-format
+msgid "creating branch '%s'"
+msgstr "criando ramo '%s'"
+
+#: builtin/submodule--helper.c:3155
 #, c-format
 msgid "Adding existing repo at '%s' to the index\n"
 msgstr "Adicionando repo existente em '%s' ao cenário\n"
 
-#: builtin/submodule--helper.c:2818
+#: builtin/submodule--helper.c:3158
 #, c-format
 msgid "'%s' already exists and is not a valid git repo"
 msgstr "'%s' já existe e é repositório git inválido"
 
-#: builtin/submodule--helper.c:2828
+#: builtin/submodule--helper.c:3171
 #, c-format
-msgid "A git directory for '%s' is found locally with remote(s):"
-msgstr "Uma pasta git para '%s' foi encontrado localmente com remoto(s):"
+msgid "A git directory for '%s' is found locally with remote(s):\n"
+msgstr "Uma pasta git para '%s' foi encontrado localmente com remoto(s):\n"
 
-#: builtin/submodule--helper.c:2833
+#: builtin/submodule--helper.c:3178
 #, c-format
 msgid ""
 "If you want to reuse this local git directory instead of cloning again from\n"
 "  %s\n"
 "use the '--force' option. If the local git directory is not the correct "
 "repo\n"
-"or if you are unsure what this means, choose another name with the '--name' "
-"option.\n"
+"or you are unsure what this means choose another name with the '--name' "
+"option."
 msgstr ""
 "Se queres reutilizar esta pasta git local, em vez de voltares a clonar de\n"
 "  %s\n"
-"usa a opção '--force'. Se a pasta git local é o repo incorreto ou\n"
-"se tens pouca certeza sobre o que isto significa, podes mudar o nome com a "
-"opção '--name'.\n"
+"usa a opção '--force'. Se a pasta git local é um repo incorreto\n"
+"ou se tens pouca certeza o que isto significa, muda o nome com a opção '--"
+"name'."
 
-#: builtin/submodule--helper.c:2842
+#: builtin/submodule--helper.c:3190
 #, c-format
 msgid "Reactivating local git directory for submodule '%s'\n"
 msgstr "Reactivando pasta git local para submódulo '%s'\n"
 
-#: builtin/submodule--helper.c:2875
+#: builtin/submodule--helper.c:3227
 #, c-format
 msgid "unable to checkout submodule '%s'"
 msgstr "incapaz de observar submódulo '%s'"
 
-#: builtin/submodule--helper.c:2888
-msgid "branch of repository to checkout on cloning"
-msgstr "ramo de repositório para observar na clonagem"
+#: builtin/submodule--helper.c:3266
+#, c-format
+msgid "Failed to add submodule '%s'"
+msgstr "Falhou ao adicionar submódulo '%s'"
+
+#: builtin/submodule--helper.c:3270 builtin/submodule--helper.c:3275
+#: builtin/submodule--helper.c:3283
+#, c-format
+msgid "Failed to register submodule '%s'"
+msgstr "Falha ao registar submódulo '%s'"
+
+#: builtin/submodule--helper.c:3339
+#, c-format
+msgid "'%s' already exists in the index"
+msgstr "'%s' já existe no cenário"
+
+#: builtin/submodule--helper.c:3342
+#, c-format
+msgid "'%s' already exists in the index and is not a submodule"
+msgstr "'%s' já existe no cenário e é submódulo nenhum"
+
+#: builtin/submodule--helper.c:3372
+msgid "branch of repository to add as submodule"
+msgstr "ramo de repositório a adicionar como submódulo"
 
-#: builtin/submodule--helper.c:2910
+#: builtin/submodule--helper.c:3373
 msgid "allow adding an otherwise ignored submodule path"
 msgstr "permitir adicionar os caminhos de submódulo ignorados"
 
-#: builtin/submodule--helper.c:2917
+#: builtin/submodule--helper.c:3379
+msgid "borrow the objects from reference repositories"
+msgstr "emprestar os objetos de repositórios referenciados"
+
+#: builtin/submodule--helper.c:3381
 msgid ""
-"git submodule--helper add-clone [<options>...] --url <url> --path <path> --"
-"name <name>"
+"sets the submodule’s name to the given string instead of defaulting to its "
+"path"
+msgstr ""
+
+#: builtin/submodule--helper.c:3388
+msgid "git submodule--helper add [<options>] [--] <repository> [<path>]"
+msgstr "git submodule--helper add [<opções>] [--] <repositório> [<caminho>]"
+
+#: builtin/submodule--helper.c:3416
+msgid "Relative path can only be used from the toplevel of the working tree"
 msgstr ""
-"git submodule--helper add-clone [<opções>...] --url <url> --path <caminho> "
-"--name <nome>"
+"Caminhos relativos só podem ser usados a partir do topo da árvore-trabalho"
+
+#: builtin/submodule--helper.c:3425
+#, c-format
+msgid "repo URL: '%s' must be absolute or begin with ./|../"
+msgstr "URL de repo: '%s' tem de ser absoluto ou começar com ./|../"
 
-#: builtin/submodule--helper.c:2985 git.c:449 git.c:724
+#: builtin/submodule--helper.c:3460
+#, c-format
+msgid "'%s' is not a valid submodule name"
+msgstr "'%s' é nome de submódulo inválido"
+
+#: builtin/submodule--helper.c:3520 git.c:453 git.c:729
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s insustenta --super-prefix"
 
-#: builtin/submodule--helper.c:2991
+#: builtin/submodule--helper.c:3526
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "'%s' é subcomando de submodule--helper inválido"
@@ -22798,7 +23696,7 @@ msgstr "git symbolic-ref -d [-q] <nome>"
 
 #: builtin/symbolic-ref.c:42
 msgid "suppress error message for non-symbolic (detached) refs"
-msgstr "suprimir mensagens de erro sobre refs não-simbólicas (destacadas)"
+msgstr "suprimir mensagens de erro sobre refs não-simbólicas (desanexadas)"
 
 #: builtin/symbolic-ref.c:43
 msgid "delete symbolic ref"
@@ -22808,53 +23706,53 @@ msgstr "apagar ref simbólica"
 msgid "shorten ref output"
 msgstr "encurtar output de ref"
 
-#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:505
 msgid "reason"
 msgstr "razão"
 
-#: builtin/symbolic-ref.c:45 builtin/update-ref.c:499
+#: builtin/symbolic-ref.c:45 builtin/update-ref.c:505
 msgid "reason of the update"
 msgstr "razão da atualização"
 
-#: builtin/tag.c:25
+#: builtin/tag.c:26
 msgid ""
 "git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]\n"
-"\t\t<tagname> [<head>]"
+"        <tagname> [<head>]"
 msgstr ""
-"git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <ficheiro>]\n"
-"\t\t<tagname> [<head>]"
+"git tag [-a | -s | -u <id-chave>] [-f] [-m <msg> | -F <ficheiro>]\n"
+"        <nome-tag> [<cabeça>]"
 
-#: builtin/tag.c:27
+#: builtin/tag.c:28
 msgid "git tag -d <tagname>..."
 msgstr "git tag -d <nome-etiqueta>..."
 
-#: builtin/tag.c:28
+#: builtin/tag.c:29
 msgid ""
 "git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--"
 "points-at <object>]\n"
-"\t\t[--format=<format>] [--merged <commit>] [--no-merged <commit>] "
+"        [--format=<format>] [--merged <commit>] [--no-merged <commit>] "
 "[<pattern>...]"
 msgstr ""
-"git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--"
+"git tag -l [-n[<num>]] [--contains <memória>] [--no-contains <memória>] [--"
 "points-at <objeto>]\n"
-"\t\t[--format=<formato>] [--merged [<commit>] [--no-merged <commit>] "
-"[<pattern>...]"
+"        [--format=<formato>] [--merged [<memória>] [--no-merged <memória>] "
+"[<padrão>...]"
 
-#: builtin/tag.c:30
+#: builtin/tag.c:31
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr "git tag -v [--format=<formato>] <nome-etiqueta>..."
 
-#: builtin/tag.c:100
+#: builtin/tag.c:101
 #, c-format
 msgid "tag '%s' not found."
-msgstr "tag '%s' por encontrar."
+msgstr "etiqueta '%s' por encontrar."
 
-#: builtin/tag.c:135
+#: builtin/tag.c:136
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
-msgstr "Apaguei tag '%s' (era %s)\n"
+msgstr "Apaguei etiqueta '%s' (era %s)\n"
 
-#: builtin/tag.c:170
+#: builtin/tag.c:171
 #, c-format
 msgid ""
 "\n"
@@ -22863,11 +23761,11 @@ msgid ""
 "Lines starting with '%c' will be ignored.\n"
 msgstr ""
 "\n"
-"Escreve mensagem para tag:\n"
+"Escreve mensagem para etiqueta:\n"
 "  %s\n"
 "Linha começadas com '%c' serão ignoradas.\n"
 
-#: builtin/tag.c:174
+#: builtin/tag.c:175
 #, c-format
 msgid ""
 "\n"
@@ -22877,13 +23775,13 @@ msgid ""
 "want to.\n"
 msgstr ""
 "\n"
-"Escreve mensagem para tag:\n"
+"Escreve mensagem para etiqueta:\n"
 "  %s\n"
 "Linhas começadas com '%c' serão mantidas; se queres, podes apagá-las.\n"
 
 #: builtin/tag.c:241
 msgid "unable to sign the tag"
-msgstr "incapaz assinar a tag"
+msgstr "incapaz assinar a etiqueta"
 
 #: builtin/tag.c:259
 #, c-format
@@ -22898,134 +23796,115 @@ msgstr ""
 msgid "bad object type."
 msgstr "tipo de objeto inválido."
 
-#: builtin/tag.c:328
+#: builtin/tag.c:326
 msgid "no tag message?"
-msgstr "sem mensagem de tag?"
+msgstr "sem mensagem de etiqueta?"
 
-#: builtin/tag.c:335
+#: builtin/tag.c:333
 #, c-format
 msgid "The tag message has been left in %s\n"
-msgstr "Deixei a mensagem da tag em %s\n"
+msgstr "Deixei a mensagem da etiqueta em %s\n"
 
-#: builtin/tag.c:446
+#: builtin/tag.c:445
 msgid "list tag names"
-msgstr "listar os nomes das tag"
+msgstr "listar os nomes das etiquetas"
 
-#: builtin/tag.c:448
+#: builtin/tag.c:447
 msgid "print <n> lines of each tag message"
-msgstr "imprimir <n> linhas de cada mensagem de tag"
+msgstr "mostrar <n> linhas de cada mensagem de etiqueta"
 
-#: builtin/tag.c:450
+#: builtin/tag.c:449
 msgid "delete tags"
-msgstr "eliminar tags"
+msgstr "eliminar etiquetas"
 
-#: builtin/tag.c:451
+#: builtin/tag.c:450
 msgid "verify tags"
-msgstr "verificar tags"
+msgstr "verificar etiquetas"
 
-#: builtin/tag.c:453
+#: builtin/tag.c:452
 msgid "Tag creation options"
-msgstr "Opções de criação de tags"
+msgstr "Opções de criação de etiqueta"
 
-#: builtin/tag.c:455
+#: builtin/tag.c:454
 msgid "annotated tag, needs a message"
-msgstr "tag anotada, é necessário uma mensagem"
+msgstr "etiqueta anotada, precisa uma mensagem"
 
-#: builtin/tag.c:457
+#: builtin/tag.c:456
 msgid "tag message"
 msgstr "mensagem de etiqueta"
 
-#: builtin/tag.c:459
+#: builtin/tag.c:458
 msgid "force edit of tag message"
 msgstr "forçar edição de mensagem de etiqueta"
 
-#: builtin/tag.c:460
+#: builtin/tag.c:459
 msgid "annotated and GPG-signed tag"
-msgstr "tag anotada e assinada com GPG"
+msgstr "etiqueta anotada e assinada com GPG"
 
-#: builtin/tag.c:463
+#: builtin/tag.c:462
 msgid "use another key to sign the tag"
-msgstr "usar outra chave para assinar a tag"
+msgstr "usar outra chave para assinar a etiqueta"
 
-#: builtin/tag.c:464
+#: builtin/tag.c:463
 msgid "replace the tag if exists"
-msgstr "substituir a tag se existir"
+msgstr "substituir a etiqueta se existe"
 
-#: builtin/tag.c:465 builtin/update-ref.c:505
+#: builtin/tag.c:464 builtin/update-ref.c:511
 msgid "create a reflog"
 msgstr "criar um reflog"
 
-#: builtin/tag.c:467
+#: builtin/tag.c:466
 msgid "Tag listing options"
-msgstr "Opções de listagem de tags"
+msgstr "Opções de listagem de etiquetas"
 
-#: builtin/tag.c:468
+#: builtin/tag.c:467
 msgid "show tag list in columns"
-msgstr "mostrar a lista de tags em colunas"
+msgstr "mostrar a lista de etiquetas em colunas"
 
-#: builtin/tag.c:469 builtin/tag.c:471
+#: builtin/tag.c:468 builtin/tag.c:470
 msgid "print only tags that contain the commit"
-msgstr "imprimir apenas tags que contenham o commit"
+msgstr "mostrar apenas etiquetas que contenham a memória"
 
-#: builtin/tag.c:470 builtin/tag.c:472
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that don't contain the commit"
-msgstr "imprimir apenas tags a que falte o commit"
+msgstr "mostrar apenas etiquetas a que falte a memória"
 
-#: builtin/tag.c:473
+#: builtin/tag.c:472
 msgid "print only tags that are merged"
-msgstr "imprimir apenas as tags que foram integradas"
+msgstr "mostrar apenas as etiquetas juntas"
 
-#: builtin/tag.c:474
+#: builtin/tag.c:473
 msgid "print only tags that are not merged"
-msgstr "imprimir apenas as tags que estão por juntar"
+msgstr "mostrar apenas as etiquetas que estão por juntar"
 
-#: builtin/tag.c:478
+#: builtin/tag.c:477
 msgid "print only tags of the object"
 msgstr "imprimir apenas etiquetas do objeto"
 
-#: builtin/tag.c:526
-msgid "--column and -n are incompatible"
-msgstr "--column e -n são incompatíveis"
-
-#: builtin/tag.c:548
-msgid "-n option is only allowed in list mode"
-msgstr "a opção -n só é permitida no modo listagem"
-
-#: builtin/tag.c:550
-msgid "--contains option is only allowed in list mode"
-msgstr "opção --contains só é permitida no modo listagem"
-
-#: builtin/tag.c:552
-msgid "--no-contains option is only allowed in list mode"
-msgstr "opção --no-contains só é permitida no modo listagem"
-
-#: builtin/tag.c:554
-msgid "--points-at option is only allowed in list mode"
-msgstr "opção --points-at só é permitida no modo listagem"
-
-#: builtin/tag.c:556
-msgid "--merged and --no-merged options are only allowed in list mode"
-msgstr "opções --merged e --no-merged só são permitidas no modo listagem"
-
-#: builtin/tag.c:567
-msgid "only one -F or -m option is allowed."
-msgstr "só é permitido um opção -F ou -m."
+#: builtin/tag.c:559
+#, c-format
+msgid "the '%s' option is only allowed in list mode"
+msgstr "a opção '%s' só é permitida no modo listagem"
 
-#: builtin/tag.c:592
+#: builtin/tag.c:598
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "'%s' é nome de etiqueta inválido."
 
-#: builtin/tag.c:597
+#: builtin/tag.c:603
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "a etiqueta '%s' já existe"
 
-#: builtin/tag.c:628
+#: builtin/tag.c:634
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "Atualizei etiqueta '%s' (era %s)\n"
 
+#: builtin/unpack-objects.c:95
+msgid "pack exceeds maximum allowed size"
+msgstr "o pacote excede o tamanho máximo permitido"
+
 #: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
 msgstr "Desempacotando objetos"
@@ -23035,254 +23914,249 @@ msgstr "Desempacotando objetos"
 msgid "failed to create directory %s"
 msgstr "falhou criar pasta %s"
 
-#: builtin/update-index.c:100
-#, c-format
-msgid "failed to create file %s"
-msgstr "falhou criar ficheiro %s"
-
-#: builtin/update-index.c:108
+#: builtin/update-index.c:106
 #, c-format
 msgid "failed to delete file %s"
 msgstr "falha ao eliminar o ficheiro %s"
 
-#: builtin/update-index.c:115 builtin/update-index.c:221
+#: builtin/update-index.c:113 builtin/update-index.c:219
 #, c-format
 msgid "failed to delete directory %s"
-msgstr "falha ao eliminar o diretório %s"
+msgstr "falhou ao eliminar a pasta %s"
 
-#: builtin/update-index.c:140
+#: builtin/update-index.c:138
 #, c-format
 msgid "Testing mtime in '%s' "
 msgstr "Testando mtime em '%s' "
 
-#: builtin/update-index.c:154
+#: builtin/update-index.c:152
 msgid "directory stat info does not change after adding a new file"
 msgstr ""
 "info de stat da pasta mantêm-se inalterada após adicionar novo ficheiro"
 
-#: builtin/update-index.c:167
+#: builtin/update-index.c:165
 msgid "directory stat info does not change after adding a new directory"
 msgstr "info de stat da pasta mantêm-se inalterada após adicionar nova pasta"
 
-#: builtin/update-index.c:180
+#: builtin/update-index.c:178
 msgid "directory stat info changes after updating a file"
 msgstr "info de stat muda após atualizar ficheiro"
 
-#: builtin/update-index.c:191
+#: builtin/update-index.c:189
 msgid "directory stat info changes after adding a file inside subdirectory"
 msgstr "info de stat da pasta muda após adicionar ficheiro dentro de subpasta"
 
-#: builtin/update-index.c:202
+#: builtin/update-index.c:200
 msgid "directory stat info does not change after deleting a file"
 msgstr "info de stat da pasta mantêm-se inalterada após apagar ficheiro"
 
-#: builtin/update-index.c:215
+#: builtin/update-index.c:213
 msgid "directory stat info does not change after deleting a directory"
 msgstr "info de stat da pasta mantêm-se inalterada após apagar pasta"
 
-#: builtin/update-index.c:222
+#: builtin/update-index.c:220
 msgid " OK"
 msgstr " OK"
 
-#: builtin/update-index.c:591
+#: builtin/update-index.c:589
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<opções>] [--] [<ficheiro>...]"
 
-#: builtin/update-index.c:976
+#: builtin/update-index.c:993
 msgid "continue refresh even when index needs update"
-msgstr "continuar a refrescar mesmo quando o índice precise de ser atualizado"
+msgstr "continuar a refrescar mesmo quando cenário precisa de atualização"
 
-#: builtin/update-index.c:979
+#: builtin/update-index.c:996
 msgid "refresh: ignore submodules"
 msgstr "refrescar: ignorar submódulos"
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:999
 msgid "do not ignore new files"
 msgstr "considera novos ficheiros"
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:1001
 msgid "let files replace directories and vice-versa"
-msgstr "deixar que os ficheiros substituam os diretórios e vice-versa"
+msgstr "deixar que os ficheiros substituam pastas e vice-versa"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:1003
 msgid "notice files missing from worktree"
-msgstr "avisar sobre ficheiros que faltem na árvore de trabalho"
+msgstr "avisar sobre ficheiros que faltem na árvore-trabalho"
 
-#: builtin/update-index.c:988
+#: builtin/update-index.c:1005
 msgid "refresh even if index contains unmerged entries"
-msgstr "refrescar mesmo se índex contenha entradas por juntar"
+msgstr "refrescar mesmo se cenário tenha entradas por juntar"
 
-#: builtin/update-index.c:991
+#: builtin/update-index.c:1008
 msgid "refresh stat information"
 msgstr "refrescar informação de stat"
 
-#: builtin/update-index.c:995
+#: builtin/update-index.c:1012
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "como --refresh, mas ignorar a definição assume-unchanged"
 
-#: builtin/update-index.c:999
+#: builtin/update-index.c:1016
 msgid "<mode>,<object>,<path>"
 msgstr "<modo>,<objeto>,<caminho>"
 
-#: builtin/update-index.c:1000
+#: builtin/update-index.c:1017
 msgid "add the specified entry to the index"
 msgstr "adicionar entrada especificada ao cenário"
 
-#: builtin/update-index.c:1010
+#: builtin/update-index.c:1027
 msgid "mark files as \"not changing\""
 msgstr "marcar ficheiros como \"não alterar\""
 
-#: builtin/update-index.c:1013
+#: builtin/update-index.c:1030
 msgid "clear assumed-unchanged bit"
-msgstr "limpar bit assumed-unchanged"
+msgstr "limpar bit assumed-unchanged"
 
-#: builtin/update-index.c:1016
+#: builtin/update-index.c:1033
 msgid "mark files as \"index-only\""
-msgstr "marcar ficheiros como \"únicos do índice\""
+msgstr "marcar ficheiros como \"index-only\""
 
-#: builtin/update-index.c:1019
+#: builtin/update-index.c:1036
 msgid "clear skip-worktree bit"
-msgstr "limpar o bit ignorar-árvore-de-trabalho"
+msgstr "limpar o bit saltar-árvore-trabalho"
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1039
 msgid "do not touch index-only entries"
 msgstr ""
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1041
 msgid "add to index only; do not add content to object database"
 msgstr ""
-"adicionar apenas a index; não adicionar conteúdo à base de dados de objetos"
+"adicionar apenas a cenário; adicionar conteúdo nenhum à base de dados de "
+"objetos"
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1043
 msgid "remove named paths even if present in worktree"
-msgstr ""
-"remover os caminhos mencionado mesmo se estiverem presentes na árvore de "
-"trabalho"
+msgstr "remover os caminhos mencionado mesmo se presentes na árvore-trabalho"
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1045
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "com --stdin: linhas da entrada são terminadas com bytes nulos"
 
-#: builtin/update-index.c:1030
+#: builtin/update-index.c:1047
 msgid "read list of paths to be updated from standard input"
 msgstr "ler lista de caminho a atualizar da entrada padrão"
 
-#: builtin/update-index.c:1034
+#: builtin/update-index.c:1051
 msgid "add entries from standard input to the index"
-msgstr "adicionar elementos da entrada padrão ao índice"
+msgstr "adicionar elementos da entrada padrão ao cenário"
 
-#: builtin/update-index.c:1038
+#: builtin/update-index.c:1055
 msgid "repopulate stages #2 and #3 for the listed paths"
-msgstr "repovoar as fases nº2 e nº3 dos caminhos listados"
+msgstr "repovoar os cenários #2 e #3 dos caminhos listados"
 
-#: builtin/update-index.c:1042
+#: builtin/update-index.c:1059
 msgid "only update entries that differ from HEAD"
 msgstr "atualizar apenas elementos que difiram de HEAD"
 
-#: builtin/update-index.c:1046
+#: builtin/update-index.c:1063
 msgid "ignore files missing from worktree"
-msgstr "ignorar ficheiros ausentes da worktree"
+msgstr "ignorar ficheiros ausentes da árvore-trabalho"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1066
 msgid "report actions to standard output"
-msgstr "reportar ações na saída padrão"
+msgstr "reportar ações para saída padrão"
 
-#: builtin/update-index.c:1051
+#: builtin/update-index.c:1068
 msgid "(for porcelains) forget saved unresolved conflicts"
-msgstr "(para porcelains) esquecer conflitos guardados que estão por resolver"
+msgstr "(para porcelanas) esquecer conflitos guardados que estão por resolver"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1072
 msgid "write index in this format"
-msgstr "escrever o índice neste formato"
+msgstr "escrever o cenário neste formato"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1074
 msgid "enable or disable split index"
 msgstr "ativar ou desativar a divisão de cenário"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1076
 msgid "enable/disable untracked cache"
-msgstr "ativar/desativar cache por monitorizar"
+msgstr "ativar/desativar cenário desmonitorizado"
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1078
 msgid "test if the filesystem supports untracked cache"
-msgstr "testar se sistema de ficheiros sustenta cache por monitorizar"
+msgstr "testar se sistema de ficheiros sustenta cenário desmonitorizado"
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1080
 msgid "enable untracked cache without testing the filesystem"
-msgstr "ativar cache por monitorizar sem testar o sistema de ficheiros"
+msgstr "ativar cenário desmonitorizado sem testar o sistema de ficheiros"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1082
 msgid "write out the index even if is not flagged as changed"
 msgstr ""
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1084
 msgid "enable or disable file system monitor"
 msgstr "ativar ou desativar monitorizador de sistema de ficheiros"
 
-#: builtin/update-index.c:1069
+#: builtin/update-index.c:1086
 msgid "mark files as fsmonitor valid"
 msgstr "marcar ficheiros válidos para fsmonitor"
 
-#: builtin/update-index.c:1072
+#: builtin/update-index.c:1089
 msgid "clear fsmonitor valid bit"
 msgstr "limpar bit válido de fsmonitor"
 
-#: builtin/update-index.c:1175
+#: builtin/update-index.c:1195
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
 msgstr ""
-"core.splitIndex está definida como false; remova ou altere-a se pretende "
-"mesmo ativar índice separado"
+"core.splitIndex está definida como false; remove ou altera-a se queres mesmo "
+"ativar cenário separado"
 
-#: builtin/update-index.c:1184
+#: builtin/update-index.c:1204
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
 msgstr ""
-"core.splitIndex está definida como true; remova ou altere-a se pretende "
-"mesmo desativar índice separado"
+"core.splitIndex está definida como true; remove ou altera-a se queres mesmo "
+"desativar cenário separado"
 
-#: builtin/update-index.c:1196
+#: builtin/update-index.c:1216
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
 msgstr ""
 "core.untrackedCache está definida como true; remove ou altera-a, se queres "
-"mesmo desativar a cache por monitorizar"
+"mesmo desativar o cenário desmonitorizado"
 
-#: builtin/update-index.c:1200
+#: builtin/update-index.c:1220
 msgid "Untracked cache disabled"
-msgstr "Cache por monitorizar está desativada"
+msgstr "Cenário desmonitorizado está desativado"
 
-#: builtin/update-index.c:1208
+#: builtin/update-index.c:1228
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
 msgstr ""
 "core.untrackedCache está definida como false; remove ou altera-a, se queres "
-"mesmo ativar a cache por monitorizar"
+"mesmo ativar o cenário desmonitorizado"
 
-#: builtin/update-index.c:1212
+#: builtin/update-index.c:1232
 #, c-format
 msgid "Untracked cache enabled for '%s'"
-msgstr "Cache por monitorizar ativada para '%s'"
+msgstr "Cenário desmonitorizado ativado para '%s'"
 
-#: builtin/update-index.c:1220
+#: builtin/update-index.c:1241
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
-msgstr "core.fsmonitor está desdefinida; define-a se queres mesmo ativar fsmonitor"
+msgstr ""
+"core.fsmonitor está indefinida; define-a se queres mesmo ativar fsmonitor"
 
-#: builtin/update-index.c:1224
+#: builtin/update-index.c:1246
 msgid "fsmonitor enabled"
 msgstr "fsmonitor ativado"
 
-#: builtin/update-index.c:1227
+#: builtin/update-index.c:1250
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 "core.fsmonitor está definida; remove-a se queres mesmo desativar fsmonitor"
 
-#: builtin/update-index.c:1231
+#: builtin/update-index.c:1254
 msgid "fsmonitor disabled"
 msgstr "fsmonitor desativado"
 
@@ -23292,33 +24166,28 @@ msgstr "git update-ref [<opções>] -d <nome-ref> [<valor-antigo>]"
 
 #: builtin/update-ref.c:11
 msgid "git update-ref [<options>]    <refname> <new-val> [<old-val>]"
-msgstr ""
-"git update-ref [<opções>]    <nome-ref> <novo-valor> [<valor-antigo>]"
+msgstr "git update-ref [<opções>]    <nome-ref> <novo-valor> [<valor-antigo>]"
 
 #: builtin/update-ref.c:12
 msgid "git update-ref [<options>] --stdin [-z]"
 msgstr "git update-ref [<opções>] --stdin [-z]"
 
-#: builtin/update-ref.c:500
+#: builtin/update-ref.c:506
 msgid "delete the reference"
 msgstr "apagar a referência"
 
-#: builtin/update-ref.c:502
+#: builtin/update-ref.c:508
 msgid "update <refname> not the one it points to"
 msgstr "atualizar <nome-ref>, não à qual esta aponta"
 
-#: builtin/update-ref.c:503
+#: builtin/update-ref.c:509
 msgid "stdin has NUL-terminated arguments"
 msgstr "a entrada padrão tem argumentos NUL-terminados"
 
-#: builtin/update-ref.c:504
+#: builtin/update-ref.c:510
 msgid "read updates from stdin"
 msgstr "ler atualizações de entrada padrão"
 
-#: builtin/update-server-info.c:7
-msgid "git update-server-info [--force]"
-msgstr "git update-server-info [--force]"
-
 #: builtin/update-server-info.c:15
 msgid "update the info files from scratch"
 msgstr "atualizar os ficheiros de info do zero"
@@ -23327,19 +24196,19 @@ msgstr "atualizar os ficheiros de info do zero"
 msgid "git upload-pack [<options>] <dir>"
 msgstr "git upload-pack [<opções>] <pasta>"
 
-#: builtin/upload-pack.c:23 t/helper/test-serve-v2.c:17
+#: builtin/upload-pack.c:24 t/helper/test-serve-v2.c:17
 msgid "quit after a single request/response exchange"
 msgstr "terminar depois de uma única troca de pedido/resposta"
 
-#: builtin/upload-pack.c:25
-msgid "exit immediately after initial ref advertisement"
-msgstr "sair imediatamente depois de anúncio inicial de ref"
+#: builtin/upload-pack.c:26
+msgid "serve up the info/refs for git-http-backend"
+msgstr ""
 
-#: builtin/upload-pack.c:27
+#: builtin/upload-pack.c:29
 msgid "do not try <directory>/.git/ if <directory> is no Git directory"
 msgstr "tentar <pasta>/.git/ apenas se <pasta> for pasta Git"
 
-#: builtin/upload-pack.c:29
+#: builtin/upload-pack.c:31
 msgid "interrupt transfer after <n> seconds of inactivity"
 msgstr "interromper transferência depois de <n> segundos de inatividade"
 
@@ -23349,7 +24218,7 @@ msgstr "git verify-commit [-v | --verbose] <memória>..."
 
 #: builtin/verify-commit.c:68
 msgid "print commit contents"
-msgstr "imprimir conteúdo do memória"
+msgstr "imprimir conteúdo de memória"
 
 #: builtin/verify-commit.c:69 builtin/verify-tag.c:37
 msgid "print raw gpg status output"
@@ -23375,275 +24244,281 @@ msgstr "git verify-tag [-v | --verbose] [--format=<formato>] <etiqueta>..."
 msgid "print tag contents"
 msgstr "imprimir conteúdo da etiqueta"
 
-#: builtin/worktree.c:18
+#: builtin/worktree.c:19
 msgid "git worktree add [<options>] <path> [<commit-ish>]"
 msgstr "git worktree add [<opções>] <caminho> [<mnemónica>]"
 
-#: builtin/worktree.c:19
+#: builtin/worktree.c:20
 msgid "git worktree list [<options>]"
 msgstr "git worktree list [<opções>]"
 
-#: builtin/worktree.c:20
+#: builtin/worktree.c:21
 msgid "git worktree lock [<options>] <path>"
 msgstr "git worktree lock [<opções>] <caminho>"
 
-#: builtin/worktree.c:21
+#: builtin/worktree.c:22
 msgid "git worktree move <worktree> <new-path>"
 msgstr "git worktree move <árvore-trabalho> <novo-caminho>"
 
-#: builtin/worktree.c:22
+#: builtin/worktree.c:23
 msgid "git worktree prune [<options>]"
 msgstr "git worktree prune [<opções>]"
 
-#: builtin/worktree.c:23
+#: builtin/worktree.c:24
 msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<opções>] <árvore-trabalho>"
 
-#: builtin/worktree.c:24
+#: builtin/worktree.c:25
+msgid "git worktree repair [<path>...]"
+msgstr "git worktree repair [<caminho>...]"
+
+#: builtin/worktree.c:26
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <caminho>"
 
-#: builtin/worktree.c:61 builtin/worktree.c:944
-#, c-format
-msgid "failed to delete '%s'"
-msgstr "falhou apagar '%s'"
-
-#: builtin/worktree.c:74
+#: builtin/worktree.c:76
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr "Removendo %s/%s: %s"
 
-#: builtin/worktree.c:147
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
-msgstr "reportar árvores de trabalho podadas"
+msgstr "reportar árvores-trabalho podadas"
 
-#: builtin/worktree.c:149
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr "expirar árvores-trabalho mais velhas que <tempo>"
 
-#: builtin/worktree.c:219
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr "'%s' já existe"
 
-#: builtin/worktree.c:228
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
-msgstr "destino '%s' de worktree inutilizável"
+msgstr "destino '%s' de árvore-trabalho inutilizável"
 
-#: builtin/worktree.c:233
+#: builtin/worktree.c:235
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
 "use '%s -f -f' to override, or 'unlock' and 'prune' or 'remove' to clear"
 msgstr ""
 
-#: builtin/worktree.c:235
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
 "use '%s -f' to override, or 'prune' or 'remove' to clear"
 msgstr ""
 
-#: builtin/worktree.c:286
+#: builtin/worktree.c:248
+#, c-format
+msgid "failed to copy '%s' to '%s'; sparse-checkout may not work correctly"
+msgstr ""
+
+#: builtin/worktree.c:268
+#, c-format
+msgid "failed to copy worktree config from '%s' to '%s'"
+msgstr "falhou copiar config de árvore-trabalho de '%s' para '%s'"
+
+#: builtin/worktree.c:280 builtin/worktree.c:285
+#, c-format
+msgid "failed to unset '%s' in '%s'"
+msgstr "falhou ao indefinir '%s' em '%s'"
+
+#: builtin/worktree.c:356
 #, c-format
 msgid "could not create directory of '%s'"
-msgstr "incapaz criar diretório de '%s'"
+msgstr "incapaz criar pasta de '%s'"
 
-#: builtin/worktree.c:308
+#: builtin/worktree.c:378
 msgid "initializing"
 msgstr "iniciando"
 
-#: builtin/worktree.c:420 builtin/worktree.c:426
+#: builtin/worktree.c:492 builtin/worktree.c:498
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
-msgstr "Erro a eliminar ramo '%s'"
+msgstr "Preparando árvore-trabalho (novo ramo '%s')"
 
-#: builtin/worktree.c:422
+#: builtin/worktree.c:494
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
-msgstr ""
+msgstr "Preparando árvore-trabalho (restabelecendo ramo '%s'; estava em %s)"
 
-#: builtin/worktree.c:431
+#: builtin/worktree.c:503
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
-msgstr ""
+msgstr "Preparando árvore-trabalho (observando '%s')"
 
-#: builtin/worktree.c:437
+#: builtin/worktree.c:509
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Preparando árvore-trabalho (HEAD desanexada %s)"
 
-#: builtin/worktree.c:482
+#: builtin/worktree.c:554
 msgid "checkout <branch> even if already checked out in other worktree"
-msgstr ""
-"extrair o <ramo> mesmo se já tenha sido extraído noutra árvore de trabalho"
+msgstr "observar <ramo> mesmo se já em observação em outra árvore-trabalho"
 
-#: builtin/worktree.c:485
+#: builtin/worktree.c:557
 msgid "create a new branch"
 msgstr "criar um novo ramo"
 
-#: builtin/worktree.c:487
+#: builtin/worktree.c:559
 msgid "create or reset a branch"
-msgstr "criar ou repor um ramo"
+msgstr "criar ou restabelecer um ramo"
 
-#: builtin/worktree.c:489
+#: builtin/worktree.c:561
 msgid "populate the new working tree"
 msgstr "povoar nova árvore-trabalho"
 
-#: builtin/worktree.c:490
+#: builtin/worktree.c:562
 msgid "keep the new working tree locked"
 msgstr "manter nova árvore-trabalho trancada"
 
-#: builtin/worktree.c:492 builtin/worktree.c:729
+#: builtin/worktree.c:564 builtin/worktree.c:809
 msgid "reason for locking"
 msgstr "razão para trancar"
 
-#: builtin/worktree.c:495
+#: builtin/worktree.c:567
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "configurar modo de monitorização (vê git-branch(1))"
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:570
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "tenta corresponder nome de novo ramo com ramo de monitorização remoto"
 
-#: builtin/worktree.c:506
-msgid "-b, -B, and --detach are mutually exclusive"
-msgstr ""
-
-#: builtin/worktree.c:508
-msgid "--reason requires --lock"
-msgstr "--reason exige --lock"
-
-#: builtin/worktree.c:512
+#: builtin/worktree.c:584
 msgid "added with --lock"
 msgstr "adicionado com --lock"
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:646
 msgid "--[no-]track can only be used if a new branch is created"
-msgstr ""
+msgstr "--[no-]track apenas pode ser usado se for criado um novo ramo"
 
-#: builtin/worktree.c:691
+#: builtin/worktree.c:766
 msgid "show extended annotations and reasons, if available"
 msgstr ""
 
-#: builtin/worktree.c:693
+#: builtin/worktree.c:768
 msgid "add 'prunable' annotation to worktrees older than <time>"
-msgstr "adicionar a anotação 'a podar' para árvores-trabalho mais velhas que <tempo>"
-
-#: builtin/worktree.c:702
-msgid "--verbose and --porcelain are mutually exclusive"
 msgstr ""
+"adicionar anotação 'prunable' em árvores-trabalho mais velhas que <tempo>"
 
-#: builtin/worktree.c:741 builtin/worktree.c:774 builtin/worktree.c:848
-#: builtin/worktree.c:972
+#: builtin/worktree.c:770
+msgid "terminate records with a NUL character"
+msgstr "terminar registos com um carácter NUL"
+
+#: builtin/worktree.c:821 builtin/worktree.c:854 builtin/worktree.c:928
+#: builtin/worktree.c:1052
 #, c-format
 msgid "'%s' is not a working tree"
-msgstr "'%s' é working tree nenhuma"
+msgstr "'%s' é árvore-trabalho nenhuma"
 
-#: builtin/worktree.c:743 builtin/worktree.c:776
+#: builtin/worktree.c:823 builtin/worktree.c:856
 msgid "The main working tree cannot be locked or unlocked"
-msgstr "Working tree principal incapaz de ser trancada ou destrancada"
+msgstr "Árvore-trabalho principal incapaz de ser trancada ou destrancada"
 
-#: builtin/worktree.c:748
+#: builtin/worktree.c:828
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "'%s' já está trancada, razão: %s"
 
-#: builtin/worktree.c:750
+#: builtin/worktree.c:830
 #, c-format
 msgid "'%s' is already locked"
 msgstr "'%s' já está trancada"
 
-#: builtin/worktree.c:778
+#: builtin/worktree.c:858
 #, c-format
 msgid "'%s' is not locked"
 msgstr "'%s' está destrancada"
 
-#: builtin/worktree.c:819
+#: builtin/worktree.c:899
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr ""
 
-#: builtin/worktree.c:827
+#: builtin/worktree.c:907
 msgid "force move even if worktree is dirty or locked"
 msgstr "forçar mover mesmo que a árvore-trabalho esteja suja ou trancada"
 
-#: builtin/worktree.c:850 builtin/worktree.c:974
+#: builtin/worktree.c:930 builtin/worktree.c:1054
 #, c-format
 msgid "'%s' is a main working tree"
-msgstr "'%s' é uma working tree principal"
+msgstr "'%s' é uma árvore-trabalho principal"
 
-#: builtin/worktree.c:855
+#: builtin/worktree.c:935
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "incapaz descobrir nome de destino a partir de '%s'"
 
-#: builtin/worktree.c:868
+#: builtin/worktree.c:948
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
 "use 'move -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:870
+#: builtin/worktree.c:950
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:873
+#: builtin/worktree.c:953
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr ""
 
-#: builtin/worktree.c:878
+#: builtin/worktree.c:958
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr ""
 
-#: builtin/worktree.c:924
+#: builtin/worktree.c:1004
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "falhou executar 'git status' em '%s'"
 
-#: builtin/worktree.c:928
+#: builtin/worktree.c:1008
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
 
-#: builtin/worktree.c:933
+#: builtin/worktree.c:1013
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "falhou executar 'git status' em '%s', código %d"
 
-#: builtin/worktree.c:956
+#: builtin/worktree.c:1036
 msgid "force removal even if worktree is dirty or locked"
-msgstr ""
+msgstr "forçar remoção mesmo que árvore-trabalho esteja suja ou trancada"
 
-#: builtin/worktree.c:979
+#: builtin/worktree.c:1059
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
 "use 'remove -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:981
+#: builtin/worktree.c:1061
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
 msgstr ""
 
-#: builtin/worktree.c:984
+#: builtin/worktree.c:1064
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr ""
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:1088
 #, c-format
 msgid "repair: %s: %s"
 msgstr "reparar: %s: %s"
 
-#: builtin/worktree.c:1011
+#: builtin/worktree.c:1091
 #, c-format
 msgid "error: %s: %s"
 msgstr "erro: %s: %s"
@@ -23658,7 +24533,7 @@ msgstr "<prefixo>/"
 
 #: builtin/write-tree.c:29
 msgid "write tree object for a subdirectory <prefix>"
-msgstr "escrever objeto árvore do subdiretório <prefixo>"
+msgstr "escrever objeto árvore para <prefixo> de subpasta"
 
 #: builtin/write-tree.c:31
 msgid "only useful for debugging"
@@ -23685,23 +24560,18 @@ msgstr ""
 "'git help -a' e 'git help -g' listam subcomandos disponíveis e alguns\n"
 "guias de conceitos. Consulta 'git help <comando>' ou 'git help <conceito>'\n"
 "para ler sobre um subcomando específico ou conceito específico.\n"
-"Vê 'git help git' para visão geral do sistema."
+"Para uma visão geral do sistema, vê 'git help git'."
 
-#: git.c:188
+#: git.c:188 git.c:216 git.c:300
 #, c-format
-msgid "no directory given for --git-dir\n"
-msgstr ""
+msgid "no directory given for '%s' option\n"
+msgstr "dada pasta nenhuma para opção '%s'\n"
 
 #: git.c:202
 #, c-format
 msgid "no namespace given for --namespace\n"
 msgstr ""
 
-#: git.c:216
-#, c-format
-msgid "no directory given for --work-tree\n"
-msgstr ""
-
 #: git.c:230
 #, c-format
 msgid "no prefix given for --super-prefix\n"
@@ -23717,11 +24587,6 @@ msgstr ""
 msgid "no config key given for --config-env\n"
 msgstr ""
 
-#: git.c:300
-#, c-format
-msgid "no directory given for -C\n"
-msgstr ""
-
 #: git.c:326
 #, c-format
 msgid "unknown option: %s\n"
@@ -23749,64 +24614,56 @@ msgstr ""
 msgid "recursive alias: %s"
 msgstr ""
 
-#: git.c:476
+#: git.c:480
 msgid "write failure on standard output"
 msgstr ""
 
-#: git.c:478
+#: git.c:482
 msgid "unknown write failure on standard output"
 msgstr ""
 
-#: git.c:480
+#: git.c:484
 msgid "close failed on standard output"
 msgstr "fechar a saída padrão falhou"
 
-#: git.c:833
+#: git.c:838
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr ""
 
-#: git.c:883
+#: git.c:888
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "incapaz lidar %s como um builtin"
 
-#: git.c:896
+#: git.c:901
 #, c-format
 msgid ""
 "usage: %s\n"
 "\n"
 msgstr ""
-"utilização: %s\n"
+"uso: %s\n"
 "\n"
 
-#: git.c:916
+#: git.c:921
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr ""
 
-#: git.c:928
+#: git.c:933
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "incapaz de executar comando '%s': %s\n"
 
-#: http-fetch.c:118
+#: http-fetch.c:128
 #, c-format
 msgid "argument to --packfile must be a valid hash (got '%s')"
-msgstr ""
+msgstr "argumento de --packfile tem de ser um hash válido (recebi '%s')"
 
-#: http-fetch.c:128
+#: http-fetch.c:138
 msgid "not a git repository"
 msgstr "é repositório git nenhum"
 
-#: http-fetch.c:134
-msgid "--packfile requires --index-pack-args"
-msgstr ""
-
-#: http-fetch.c:143
-msgid "--index-pack-args can only be used with --packfile"
-msgstr ""
-
 #: t/helper/test-fast-rebase.c:141
 msgid "unhandled options"
 msgstr "opções largadas"
@@ -23818,7 +24675,7 @@ msgstr "erro preparando revisões"
 #: t/helper/test-reach.c:154
 #, c-format
 msgid "commit %s is not marked reachable"
-msgstr "commit %s está a ser tratado como inalcançável"
+msgstr "memória %s está marcada como inalcançável"
 
 #: t/helper/test-reach.c:164
 msgid "too many commits marked reachable"
@@ -23832,147 +24689,109 @@ msgstr "test-tool serve-v2 [<opções>]"
 msgid "exit immediately after advertising capabilities"
 msgstr "sair imediatamente depois de anunciar capacidades"
 
-#: t/helper/test-simple-ipc.c:262
-#, c-format
-msgid "socket/pipe already in use: '%s'"
-msgstr ""
-
-#: t/helper/test-simple-ipc.c:264
-#, c-format
-msgid "could not start server on: '%s'"
-msgstr ""
-
-#: t/helper/test-simple-ipc.c:295 t/helper/test-simple-ipc.c:331
-msgid "could not spawn daemon in the background"
-msgstr ""
-
-#: t/helper/test-simple-ipc.c:356
-msgid "waitpid failed"
-msgstr ""
-
-#: t/helper/test-simple-ipc.c:376
-msgid "daemon not online yet"
-msgstr ""
-
-#: t/helper/test-simple-ipc.c:406
-msgid "daemon failed to start"
-msgstr ""
-
-#: t/helper/test-simple-ipc.c:410
-msgid "waitpid is confused"
-msgstr ""
-
-#: t/helper/test-simple-ipc.c:541
-msgid "daemon has not shutdown yet"
-msgstr ""
-
-#: t/helper/test-simple-ipc.c:682
+#: t/helper/test-simple-ipc.c:581
 msgid "test-helper simple-ipc is-active    [<name>] [<options>]"
 msgstr ""
 
-#: t/helper/test-simple-ipc.c:683
+#: t/helper/test-simple-ipc.c:582
 msgid "test-helper simple-ipc run-daemon   [<name>] [<threads>]"
 msgstr ""
 
-#: t/helper/test-simple-ipc.c:684
+#: t/helper/test-simple-ipc.c:583
 msgid "test-helper simple-ipc start-daemon [<name>] [<threads>] [<max-wait>]"
 msgstr ""
 
-#: t/helper/test-simple-ipc.c:685
+#: t/helper/test-simple-ipc.c:584
 msgid "test-helper simple-ipc stop-daemon  [<name>] [<max-wait>]"
 msgstr ""
 
-#: t/helper/test-simple-ipc.c:686
+#: t/helper/test-simple-ipc.c:585
 msgid "test-helper simple-ipc send         [<name>] [<token>]"
 msgstr ""
 
-#: t/helper/test-simple-ipc.c:687
+#: t/helper/test-simple-ipc.c:586
 msgid "test-helper simple-ipc sendbytes    [<name>] [<bytecount>] [<byte>]"
 msgstr ""
 
-#: t/helper/test-simple-ipc.c:688
+#: t/helper/test-simple-ipc.c:587
 msgid ""
 "test-helper simple-ipc multiple     [<name>] [<threads>] [<bytecount>] "
 "[<batchsize>]"
 msgstr ""
 
-#: t/helper/test-simple-ipc.c:696
+#: t/helper/test-simple-ipc.c:595
 msgid "name or pathname of unix domain socket"
 msgstr ""
 
-#: t/helper/test-simple-ipc.c:698
+#: t/helper/test-simple-ipc.c:597
 msgid "named-pipe name"
 msgstr ""
 
-#: t/helper/test-simple-ipc.c:700
+#: t/helper/test-simple-ipc.c:599
 msgid "number of threads in server thread pool"
 msgstr ""
 
-#: t/helper/test-simple-ipc.c:701
+#: t/helper/test-simple-ipc.c:600
 msgid "seconds to wait for daemon to start or stop"
 msgstr ""
 
-#: t/helper/test-simple-ipc.c:703
+#: t/helper/test-simple-ipc.c:602
 msgid "number of bytes"
 msgstr ""
 
-#: t/helper/test-simple-ipc.c:704
+#: t/helper/test-simple-ipc.c:603
 msgid "number of requests per thread"
 msgstr "número de pedidos por fio"
 
-#: t/helper/test-simple-ipc.c:706
+#: t/helper/test-simple-ipc.c:605
 msgid "byte"
 msgstr "byte"
 
-#: t/helper/test-simple-ipc.c:706
+#: t/helper/test-simple-ipc.c:605
 msgid "ballast character"
 msgstr ""
 
-#: t/helper/test-simple-ipc.c:707
+#: t/helper/test-simple-ipc.c:606
 msgid "token"
 msgstr "token"
 
-#: t/helper/test-simple-ipc.c:707
+#: t/helper/test-simple-ipc.c:606
 msgid "command token to send to the server"
 msgstr ""
 
-#: http.c:399
+#: http.c:350
 #, c-format
 msgid "negative value for http.postbuffer; defaulting to %d"
 msgstr ""
 
-#: http.c:420
+#: http.c:371
 msgid "Delegation control is not supported with cURL < 7.22.0"
-msgstr "Delegação de controlo tem suporte nenhum com cURL < 7.22.0"
+msgstr "Delegação de controlo é insustentado com cURL < 7.22.0"
 
-#: http.c:429
-msgid "Public key pinning not supported with cURL < 7.44.0"
-msgstr "Afixar chaves públicas tem suporte nenhum com cURL < 7.44.0"
+#: http.c:380
+msgid "Public key pinning not supported with cURL < 7.39.0"
+msgstr "Afixar chaves públicas é insustentado com cURL < 7.39.0"
 
-#: http.c:910
+#: http.c:812
 msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0"
-msgstr "CURLSSLOPT_NO_REVOKE tem suporte nenhum com cURL < 7.44.0"
+msgstr "CURLSSLOPT_NO_REVOKE é insustentado com cURL < 7.44.0"
 
-#: http.c:989
-msgid "Protocol restrictions not supported with cURL < 7.19.4"
-msgstr "Restrição protocolar tem suporte nenhum com cURL < 7.44.0"
-
-#: http.c:1132
+#: http.c:1016
 #, c-format
 msgid "Unsupported SSL backend '%s'. Supported SSL backends:"
 msgstr ""
 
-#: http.c:1139
+#: http.c:1023
 #, c-format
 msgid "Could not set SSL backend to '%s': cURL was built without SSL backends"
 msgstr ""
 
-#: http.c:1143
+#: http.c:1027
 #, c-format
 msgid "Could not set SSL backend to '%s': already set"
 msgstr "Incapaz de definir backend SSL para '%s': já definido"
 
-#: http.c:2034
+#: http.c:1876
 #, c-format
 msgid ""
 "unable to update url base from redirection:\n"
@@ -23983,201 +24802,387 @@ msgstr ""
 "  pedi: %s\n"
 "   redireção: %s"
 
-#: remote-curl.c:183
+#: remote-curl.c:184
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr ""
 
-#: remote-curl.c:307
+#: remote-curl.c:308
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr "%sinfo/refs é inválido; isto é um repositório git?"
 
-#: remote-curl.c:408
+#: remote-curl.c:409
 msgid "invalid server response; expected service, got flush packet"
 msgstr ""
 
-#: remote-curl.c:439
+#: remote-curl.c:440
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr ""
 
-#: remote-curl.c:499
+#: remote-curl.c:500
 #, c-format
 msgid "repository '%s' not found"
 msgstr "repositório '%s' inexistente"
 
-#: remote-curl.c:503
+#: remote-curl.c:504
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr "Autenticação falhou para '%s'"
 
-#: remote-curl.c:507
+#: remote-curl.c:508
+#, c-format
+msgid "unable to access '%s' with http.pinnedPubkey configuration: %s"
+msgstr ""
+
+#: remote-curl.c:512
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "incapaz aceder '%s': %s"
 
-#: remote-curl.c:513
+#: remote-curl.c:518
 #, c-format
 msgid "redirecting to %s"
 msgstr "redirecionando para %s"
 
-#: remote-curl.c:644
+#: remote-curl.c:649
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr ""
 
-#: remote-curl.c:656
+#: remote-curl.c:661
 msgid "remote server sent unexpected response end packet"
 msgstr "servidor remoto enviou pacote fim de resposta inesperado"
 
-#: remote-curl.c:726
+#: remote-curl.c:730
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr ""
 
-#: remote-curl.c:756
+#: remote-curl.c:759
 #, c-format
 msgid "remote-curl: bad line length character: %.4s"
 msgstr ""
 
-#: remote-curl.c:758
+#: remote-curl.c:761
 msgid "remote-curl: unexpected response end packet"
 msgstr ""
 
-#: remote-curl.c:834
+#: remote-curl.c:837
 #, c-format
 msgid "RPC failed; %s"
 msgstr "RPC falhou: %s"
 
-#: remote-curl.c:874
+#: remote-curl.c:877
 msgid "cannot handle pushes this big"
 msgstr "incapaz atirar algo tão grande"
 
-#: remote-curl.c:989
+#: remote-curl.c:990
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr ""
 
-#: remote-curl.c:993
+#: remote-curl.c:994
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr ""
 
-#: remote-curl.c:1043
+#: remote-curl.c:1044
 #, c-format
 msgid "%d bytes of length header were received"
 msgstr ""
 
-#: remote-curl.c:1045
+#: remote-curl.c:1046
 #, c-format
 msgid "%d bytes of body are still expected"
 msgstr ""
 
-#: remote-curl.c:1134
+#: remote-curl.c:1135
 msgid "dumb http transport does not support shallow capabilities"
-msgstr "transporte http estúpido insustenta capacidades shallow"
+msgstr "transporte http burro insustenta capacidades de superfície"
 
-#: remote-curl.c:1149
+#: remote-curl.c:1150
 msgid "fetch failed."
-msgstr ""
+msgstr "busca falhou."
 
-#: remote-curl.c:1195
+#: remote-curl.c:1198
 msgid "cannot fetch by sha1 over smart http"
-msgstr ""
+msgstr "incapaz buscar por sha1 através de http esperto"
 
-#: remote-curl.c:1239 remote-curl.c:1245
+#: remote-curl.c:1242 remote-curl.c:1248
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr ""
 
-#: remote-curl.c:1257 remote-curl.c:1375
+#: remote-curl.c:1260 remote-curl.c:1378
 #, c-format
 msgid "http transport does not support %s"
 msgstr "transporte http insustenta %s"
 
-#: remote-curl.c:1293
+#: remote-curl.c:1296
 msgid "git-http-push failed"
 msgstr ""
 
-#: remote-curl.c:1481
+#: remote-curl.c:1485
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr ""
 
-#: remote-curl.c:1513
+#: remote-curl.c:1517
 msgid "remote-curl: error reading command stream from git"
 msgstr ""
 
-#: remote-curl.c:1520
+#: remote-curl.c:1524
 msgid "remote-curl: fetch attempted without a local repo"
-msgstr ""
+msgstr "remote-curl: busca tentada sem repo local"
 
-#: remote-curl.c:1561
+#: remote-curl.c:1565
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr ""
 
-#: compat/compiler.h:26
-msgid "no compiler information available\n"
+#: contrib/scalar/scalar.c:49
+msgid "need a working directory"
+msgstr "precisando de pasta-trabalho"
+
+#: contrib/scalar/scalar.c:86
+msgid "could not find enlistment root"
+msgstr "incapaz encontrar raiz de alistamento"
+
+#: contrib/scalar/scalar.c:89 contrib/scalar/scalar.c:350
+#: contrib/scalar/scalar.c:435 contrib/scalar/scalar.c:578
+#, c-format
+msgid "could not switch to '%s'"
+msgstr "incapaz trocar para '%s'"
+
+#: contrib/scalar/scalar.c:179
+#, c-format
+msgid "could not configure %s=%s"
+msgstr "incapaz configurar %s=%s"
+
+#: contrib/scalar/scalar.c:197
+msgid "could not configure log.excludeDecoration"
 msgstr ""
 
-#: compat/compiler.h:38
-msgid "no libc information available\n"
-msgstr "informação libc indisponível\n"
+#: contrib/scalar/scalar.c:218
+msgid "Scalar enlistments require a worktree"
+msgstr ""
 
-#: list-objects-filter-options.h:94
-msgid "args"
+#: contrib/scalar/scalar.c:310
+#, c-format
+msgid "remote HEAD is not a branch: '%.*s'"
+msgstr "HEAD remota é ramo nenhum: '%.*s'"
+
+#: contrib/scalar/scalar.c:316
+msgid "failed to get default branch name from remote; using local default"
 msgstr ""
+"falhou obter de remoto nome de ramo pré-definido; usando pré-definição local"
 
-#: list-objects-filter-options.h:95
-msgid "object filtering"
-msgstr "filtração de objeto"
+#: contrib/scalar/scalar.c:329
+msgid "failed to get default branch name"
+msgstr "falhou ao obter nome de ramo pré-definido"
 
-#: parse-options.h:184
-msgid "expiry-date"
-msgstr "data-de-validade"
+#: contrib/scalar/scalar.c:340
+msgid "failed to unregister repository"
+msgstr "falhou ao anular registo de repositório"
 
-#: parse-options.h:198
-msgid "no-op (backward compatibility)"
-msgstr "sem-ação (retrocompatibilidade)"
+#: contrib/scalar/scalar.c:355
+msgid "failed to delete enlistment directory"
+msgstr "falhou ao eliminar pasta de alistamento"
 
-#: parse-options.h:310
+#: contrib/scalar/scalar.c:375
+msgid "branch to checkout after clone"
+msgstr "ramo a observar após clonagem"
+
+#: contrib/scalar/scalar.c:377
+msgid "when cloning, create full working directory"
+msgstr "quando clonando, cria pasta-trabalho completa"
+
+#: contrib/scalar/scalar.c:379
+msgid "only download metadata for the branch that will be checked out"
+msgstr "apenas transferir metadata para o ramo que será observado"
+
+#: contrib/scalar/scalar.c:384
+msgid "scalar clone [<options>] [--] <repo> [<dir>]"
+msgstr "scalar clone [<opções>] [--] <repo> [<pasta>]"
+
+#: contrib/scalar/scalar.c:409
+#, c-format
+msgid "cannot deduce worktree name from '%s'"
+msgstr "incapaz deduzir nome de árvore-trabalho a partir de '%s'"
+
+#: contrib/scalar/scalar.c:418
+#, c-format
+msgid "directory '%s' exists already"
+msgstr "pasta '%s' já existe"
+
+#: contrib/scalar/scalar.c:445
+#, c-format
+msgid "failed to get default branch for '%s'"
+msgstr "falhou obter ramo pré-definido para '%s'"
+
+#: contrib/scalar/scalar.c:456
+#, c-format
+msgid "could not configure remote in '%s'"
+msgstr "incapaz configurar remoto em '%s'"
+
+#: contrib/scalar/scalar.c:465
+#, c-format
+msgid "could not configure '%s'"
+msgstr "incapaz configurar '%s'"
+
+#: contrib/scalar/scalar.c:468
+msgid "partial clone failed; attempting full clone"
+msgstr "clonagem parcial falhou; tentando clonagem completa"
+
+#: contrib/scalar/scalar.c:472
+msgid "could not configure for full clone"
+msgstr "incapaz configurar para clone completo"
+
+#: contrib/scalar/scalar.c:504
+msgid "`scalar list` does not take arguments"
+msgstr "`scalar list` leva argumentos nenhuns"
+
+#: contrib/scalar/scalar.c:517
+msgid "scalar register [<enlistment>]"
+msgstr ""
+
+#: contrib/scalar/scalar.c:544
+msgid "reconfigure all registered enlistments"
+msgstr ""
+
+#: contrib/scalar/scalar.c:548
+msgid "scalar reconfigure [--all | <enlistment>]"
+msgstr ""
+
+#: contrib/scalar/scalar.c:566
+msgid "--all or <enlistment>, but not both"
+msgstr ""
+
+#: contrib/scalar/scalar.c:581
+#, c-format
+msgid "git repository gone in '%s'"
+msgstr "foi-se repositório git em '%s'"
+
+#: contrib/scalar/scalar.c:621
+msgid ""
+"scalar run <task> [<enlistment>]\n"
+"Tasks:\n"
+msgstr ""
+
+#: contrib/scalar/scalar.c:639
+#, c-format
+msgid "no such task: '%s'"
+msgstr "tarefa inexistente: '%s'"
+
+#: contrib/scalar/scalar.c:689
+msgid "scalar unregister [<enlistment>]"
+msgstr ""
+
+#: contrib/scalar/scalar.c:736
+msgid "scalar delete <enlistment>"
+msgstr ""
+
+#: contrib/scalar/scalar.c:751
+msgid "refusing to delete current working directory"
+msgstr "recusando apagar pasta-trabalho atual"
+
+#: contrib/scalar/scalar.c:766
+msgid "include Git version"
+msgstr "incluir versão Git"
+
+#: contrib/scalar/scalar.c:768
+msgid "include Git's build options"
+msgstr ""
+
+#: contrib/scalar/scalar.c:772
+msgid "scalar verbose [-v | --verbose] [--build-options]"
+msgstr ""
+
+#: contrib/scalar/scalar.c:813
+msgid "-C requires a <directory>"
+msgstr "-C exige uma <pasta>"
+
+#: contrib/scalar/scalar.c:815
+#, c-format
+msgid "could not change to '%s'"
+msgstr "incapaz mudar para '%s'"
+
+#: contrib/scalar/scalar.c:821
+msgid "-c requires a <key>=<value> argument"
+msgstr "-c exige um argumento <chave>=<valor>"
+
+#: contrib/scalar/scalar.c:839
+msgid ""
+"scalar [-C <directory>] [-c <key>=<value>] <command> [<options>]\n"
+"\n"
+"Commands:\n"
+msgstr ""
+"scalar [-C <pasta>] [-c <chave>=<valor>] <comando> [<opções>]\n"
+"\n"
+"Comandos:\n"
+
+#: compat/compiler.h:26
+msgid "no compiler information available\n"
+msgstr ""
+
+#: compat/compiler.h:38
+msgid "no libc information available\n"
+msgstr "informação libc indisponível\n"
+
+#: list-objects-filter-options.h:126
+msgid "args"
+msgstr ""
+
+#: list-objects-filter-options.h:127
+msgid "object filtering"
+msgstr "filtração de objeto"
+
+#: parse-options.h:188
+msgid "expiry-date"
+msgstr "data-de-validade"
+
+#: parse-options.h:202
+msgid "no-op (backward compatibility)"
+msgstr "sem-ação (retrocompatibilidade)"
+
+#: parse-options.h:341
 msgid "be more verbose"
 msgstr "ser mais verboso"
 
-#: parse-options.h:312
+#: parse-options.h:343
 msgid "be more quiet"
 msgstr "ser mais silencioso"
 
-#: parse-options.h:318
+#: parse-options.h:349
 msgid "use <n> digits to display object names"
 msgstr "usar <n> dígitos para mostrar nomes de objetos"
 
-#: parse-options.h:337
+#: parse-options.h:368
 msgid "how to strip spaces and #comments from message"
 msgstr "como retirar espaços e #comentários da mensagem"
 
-#: parse-options.h:338
+#: parse-options.h:369
 msgid "read pathspec from file"
 msgstr "ler espetro-caminho de ficheiro"
 
-#: parse-options.h:339
+#: parse-options.h:370
 msgid ""
 "with --pathspec-from-file, pathspec elements are separated with NUL character"
 msgstr ""
-"com --pathspec-from-file, os elementos de espetro-caminho estão separados por "
-"caractere NUL"
+"com --pathspec-from-file, os elementos de espetro-caminho estão separados "
+"por caractere NUL"
 
-#: ref-filter.h:99
+#: ref-filter.h:98
 msgid "key"
 msgstr "chave"
 
-#: ref-filter.h:99
+#: ref-filter.h:98
 msgid "field name to sort on"
 msgstr "nome do campo pelo qual ordernar"
 
 #: rerere.h:44
 msgid "update the index with reused conflict resolution if possible"
 msgstr ""
-"atualizar o índice com resoluções de conflitos reutilizadas se possível"
+"se possível, atualizar o cenário com resoluções de conflitos já utilizadas"
 
 #: command-list.h:50
 msgid "Add file contents to the index"
@@ -24205,7 +25210,7 @@ msgstr "Criar arquivo de ficheiros a partir de árvore nomeada"
 
 #: command-list.h:56
 msgid "Use binary search to find the commit that introduced a bug"
-msgstr "Use procura binário para encontrar o commit que introduziu um bug"
+msgstr "Usar procura binário para encontrar a memória que introduziu um bug"
 
 #: command-list.h:57
 msgid "Show what revision and author last modified each line of a file"
@@ -24217,7 +25222,7 @@ msgstr "Listar, criar ou eliminar ramos"
 
 #: command-list.h:59
 msgid "Collect information for user to file a bug report"
-msgstr ""
+msgstr "Recolher informação para o utilizador reportar um bug"
 
 #: command-list.h:60
 msgid "Move objects and refs by archive"
@@ -24233,22 +25238,22 @@ msgstr ""
 
 #: command-list.h:63
 msgid "Debug gitignore / exclude files"
-msgstr ""
+msgstr "Depurar gitignore / ficheiros excluídos"
 
 #: command-list.h:64
 msgid "Show canonical names and email addresses of contacts"
 msgstr "Mostrar nomes canónicos e endereços de e-mail de contatos"
 
 #: command-list.h:65
-msgid "Switch branches or restore working tree files"
-msgstr "Trocar ramos ou restaurar ficheiros de árvore-trabalho"
+msgid "Ensures that a reference name is well formed"
+msgstr ""
 
 #: command-list.h:66
-msgid "Copy files from the index to the working tree"
-msgstr ""
+msgid "Switch branches or restore working tree files"
+msgstr "Trocar ramos ou restaurar ficheiros de árvore-trabalho"
 
 #: command-list.h:67
-msgid "Ensures that a reference name is well formed"
+msgid "Copy files from the index to the working tree"
 msgstr ""
 
 #: command-list.h:68
@@ -24269,7 +25274,7 @@ msgstr ""
 
 #: command-list.h:72
 msgid "Clone a repository into a new directory"
-msgstr "Clonar um repositório num novo diretório"
+msgstr "Clonar um repositório numa nova pasta"
 
 #: command-list.h:73
 msgid "Display data in columns"
@@ -24285,7 +25290,7 @@ msgstr ""
 
 #: command-list.h:76
 msgid "Create a new commit object"
-msgstr ""
+msgstr "Criar um novo objeto de memória"
 
 #: command-list.h:77
 msgid "Get and set repository or global options"
@@ -24329,8 +25334,7 @@ msgstr ""
 
 #: command-list.h:87
 msgid "Show changes between commits, commit and working tree, etc"
-msgstr ""
-"Mostrar alterações entre commits, entre commit e árvore de trabalho, etc"
+msgstr "Mostrar alterações entre memórias, memória e árvore-trabalho, etc"
 
 #: command-list.h:88
 msgid "Compares files in the working tree and the index"
@@ -24366,11 +25370,11 @@ msgstr ""
 
 #: command-list.h:96
 msgid "Rewrite branches"
-msgstr "  Ramo remoto:%s"
+msgstr "Reescrever ramos"
 
 #: command-list.h:97
 msgid "Produce a merge commit message"
-msgstr ""
+msgstr "Produzir uma mensagem de memória de junção"
 
 #: command-list.h:98
 msgid "Output information on each ref"
@@ -24413,48 +25417,48 @@ msgid "Display help information about Git"
 msgstr ""
 
 #: command-list.h:108
-msgid "Server side implementation of Git over HTTP"
+msgid "Run git hooks"
 msgstr ""
 
 #: command-list.h:109
-msgid "Download from a remote Git repository via HTTP"
+msgid "Server side implementation of Git over HTTP"
 msgstr ""
 
 #: command-list.h:110
-msgid "Push objects over HTTP/DAV to another repository"
+msgid "Download from a remote Git repository via HTTP"
 msgstr ""
 
 #: command-list.h:111
-msgid "Send a collection of patches from stdin to an IMAP folder"
+msgid "Push objects over HTTP/DAV to another repository"
 msgstr ""
 
 #: command-list.h:112
-msgid "Build pack index file for an existing packed archive"
+msgid "Send a collection of patches from stdin to an IMAP folder"
 msgstr ""
 
 #: command-list.h:113
-msgid "Create an empty Git repository or reinitialize an existing one"
-msgstr "Criar um repositório Git vazio ou reinicializar um já existente"
+msgid "Build pack index file for an existing packed archive"
+msgstr ""
 
 #: command-list.h:114
-msgid "Instantly browse your working repository in gitweb"
-msgstr ""
+msgid "Create an empty Git repository or reinitialize an existing one"
+msgstr "Criar um repositório Git vazio ou reinicializar um existente"
 
 #: command-list.h:115
-msgid "Add or parse structured information in commit messages"
-msgstr ""
+msgid "Instantly browse your working repository in gitweb"
+msgstr "Navegar instantaneamente pelo teu repositório-trabalho em gitweb"
 
 #: command-list.h:116
-msgid "The Git repository browser"
-msgstr "O browser de repositórios Git"
+msgid "Add or parse structured information in commit messages"
+msgstr "Adiciona ou processa informação estruturada em mensagem de memória"
 
 #: command-list.h:117
 msgid "Show commit logs"
-msgstr "Mostrar histórico de commits"
+msgstr "Mostrar registro de memórias"
 
 #: command-list.h:118
 msgid "Show information about files in the index and the working tree"
-msgstr "Mostrar informação acerca de ficheiros no cenário e árvore-trabalho"
+msgstr "Mostrar informação acerca de ficheiros no cenário e na árvore-trabalho"
 
 #: command-list.h:119
 msgid "List references in a remote repository"
@@ -24482,7 +25486,7 @@ msgstr "Juntar duas ou mais histórias de desenvolvimento numa só"
 
 #: command-list.h:125
 msgid "Find as good common ancestors as possible for a merge"
-msgstr "Encontrar tantos quantos antecessores comuns bons para uma junção"
+msgstr "Encontrar tantos quantos antecessores comuns, bons para uma junção"
 
 #: command-list.h:126
 msgid "Run a three-way file merge"
@@ -24497,28 +25501,30 @@ msgid "The standard helper program to use with git-merge-index"
 msgstr ""
 
 #: command-list.h:129
-msgid "Run merge conflict resolution tools to resolve merge conflicts"
+msgid "Show three-way merge without touching index"
 msgstr ""
 
 #: command-list.h:130
-msgid "Show three-way merge without touching index"
+msgid "Run merge conflict resolution tools to resolve merge conflicts"
 msgstr ""
+"Executa ferramentas de resolução de conflito de junção para resolver "
+"conflitos de junção"
 
 #: command-list.h:131
-msgid "Write and verify multi-pack-indexes"
-msgstr ""
+msgid "Creates a tag object with extra validation"
+msgstr "Cria um objeto-etiqueta com validação extra"
 
 #: command-list.h:132
-msgid "Creates a tag object with extra validation"
-msgstr "outro objeto tag"
+msgid "Build a tree-object from ls-tree formatted text"
+msgstr ""
 
 #: command-list.h:133
-msgid "Build a tree-object from ls-tree formatted text"
+msgid "Write and verify multi-pack-indexes"
 msgstr ""
 
 #: command-list.h:134
 msgid "Move or rename a file, a directory, or a symlink"
-msgstr "Mover ou mudar o nome de um ficheiro, diretório ou ligação simbólica"
+msgstr "Mover ou renomear um ficheiro, pasta ou ligação simbólica"
 
 #: command-list.h:135
 msgid "Find symbolic names for given revs"
@@ -24558,7 +25564,7 @@ msgstr ""
 
 #: command-list.h:144
 msgid "Fetch from and integrate with another repository or a local branch"
-msgstr "Obter e integrar com outro repositório ou outro ramo local"
+msgstr "Buscar de e integrar com outro repositório ou um ramo local"
 
 #: command-list.h:145
 msgid "Update remote refs along with associated objects"
@@ -24566,11 +25572,11 @@ msgstr "Atualizar referências remotas juntamente com objetos associados"
 
 #: command-list.h:146
 msgid "Applies a quilt patchset onto the current branch"
-msgstr "Submete a mistura de patchset para o ramo atual."
+msgstr "Aplica-se uma mistura de patchset para o ramo atual."
 
 #: command-list.h:147
 msgid "Compare two commit ranges (e.g. two versions of a branch)"
-msgstr ""
+msgstr "Comparar os dois intervalos de memórias (e.g. duas versões de ramo)"
 
 #: command-list.h:148
 msgid "Reads tree information into the index"
@@ -24578,7 +25584,7 @@ msgstr ""
 
 #: command-list.h:149
 msgid "Reapply commits on top of another base tip"
-msgstr "Reaplicar commits no topo de outra base"
+msgstr "Reaplicar memórias no topo de outra ponta"
 
 #: command-list.h:150
 msgid "Receive what is pushed into the repository"
@@ -24606,7 +25612,7 @@ msgstr ""
 
 #: command-list.h:156
 msgid "Reuse recorded resolution of conflicted merges"
-msgstr ""
+msgstr "Reutilizar resolução guardada de junções conflituosas"
 
 #: command-list.h:157
 msgid "Reset current HEAD to the specified state"
@@ -24617,17 +25623,17 @@ msgid "Restore working tree files"
 msgstr "Restaurar ficheiros de árvore-trabalho"
 
 #: command-list.h:159
-msgid "Revert some existing commits"
-msgstr "Reverter algumas memórias existentes"
-
-#: command-list.h:160
 msgid "Lists commit objects in reverse chronological order"
-msgstr ""
+msgstr "Listar objetos de memória em ordem cronológica inversa"
 
-#: command-list.h:161
+#: command-list.h:160
 msgid "Pick out and massage parameters"
 msgstr "demasiados parâmetros"
 
+#: command-list.h:161
+msgid "Revert some existing commits"
+msgstr "Reverter algumas memórias existentes"
+
 #: command-list.h:162
 msgid "Remove files from the working tree and from the index"
 msgstr ""
@@ -24641,49 +25647,50 @@ msgid "Push objects over Git protocol to another repository"
 msgstr ""
 
 #: command-list.h:165
-msgid "Restricted login shell for Git-only SSH access"
+msgid "Git's i18n setup code for shell scripts"
 msgstr ""
 
 #: command-list.h:166
-msgid "Summarize 'git log' output"
+msgid "Common Git shell script setup code"
 msgstr ""
 
 #: command-list.h:167
-msgid "Show various types of objects"
-msgstr "Mostrar vários tipos objetos"
+msgid "Restricted login shell for Git-only SSH access"
+msgstr ""
 
 #: command-list.h:168
-msgid "Show branches and their commits"
-msgstr "Mostrar ramos e as suas memórias"
+msgid "Summarize 'git log' output"
+msgstr ""
 
 #: command-list.h:169
-msgid "Show packed archive index"
-msgstr ""
+msgid "Show various types of objects"
+msgstr "Mostrar vários tipos objetos"
 
 #: command-list.h:170
-msgid "List references in a local repository"
-msgstr "Lista referências num repositório local"
+msgid "Show branches and their commits"
+msgstr "Mostrar ramos e suas memórias"
 
 #: command-list.h:171
-msgid "Git's i18n setup code for shell scripts"
+msgid "Show packed archive index"
 msgstr ""
 
 #: command-list.h:172
-msgid "Common Git shell script setup code"
-msgstr ""
+msgid "List references in a local repository"
+msgstr "Lista referências num repositório local"
 
 #: command-list.h:173
-msgid "Initialize and modify the sparse-checkout"
+msgid "Reduce your working tree to a subset of tracked files"
 msgstr ""
+"Reduzir tua árvore-trabalho para um subgrupo de ficheiros monitorizados"
 
 #: command-list.h:174
-msgid "Stash the changes in a dirty working directory away"
-msgstr "Esconde as alterações de pasta-trabalho suja"
-
-#: command-list.h:175
 msgid "Add file contents to the staging area"
 msgstr "Adicionar conteúdos de ficheiro ao cenário"
 
+#: command-list.h:175
+msgid "Stash the changes in a dirty working directory away"
+msgstr "Esconde as alterações duma pasta-trabalho suja"
+
 #: command-list.h:176
 msgid "Show the working tree status"
 msgstr "Mostrar status de árvore-trabalho"
@@ -24702,11 +25709,11 @@ msgstr ""
 
 #: command-list.h:180
 msgid "Switch branches"
-msgstr "Troca branches"
+msgstr "Trocar ramos"
 
 #: command-list.h:181
 msgid "Read, modify and delete symbolic refs"
-msgstr "eliminar referências simbólicas"
+msgstr "Ler, modificar e eliminar refs simbólicas"
 
 #: command-list.h:182
 msgid "Create, list, delete or verify a tag object signed with GPG"
@@ -24731,6 +25738,7 @@ msgstr ""
 #: command-list.h:187
 msgid "Update auxiliary info file to help dumb servers"
 msgstr ""
+"Atualizar ficheiro auxiliar de informação para ajudar servidores burros"
 
 #: command-list.h:188
 msgid "Send archive back to git-archive"
@@ -24738,7 +25746,7 @@ msgstr ""
 
 #: command-list.h:189
 msgid "Send objects packed back to git-fetch-pack"
-msgstr ""
+msgstr "Enviar objetos empacotados de volta a git-fetch-pack"
 
 #: command-list.h:190
 msgid "Show a Git logical variable"
@@ -24750,76 +25758,76 @@ msgstr "Verifica assinatura GPG de memórias"
 
 #: command-list.h:192
 msgid "Validate packed Git archive files"
-msgstr "Validar ficheiros pacote de arquivo Git"
+msgstr "Validar ficheiros pacote de repositório"
 
 #: command-list.h:193
 msgid "Check the GPG signature of tags"
-msgstr "Verifica assinatura GPG de tags"
+msgstr "Verifica assinatura GPG de etiquetas"
 
 #: command-list.h:194
-msgid "Git web interface (web frontend to Git repositories)"
-msgstr "Interface web de Git (frontend web para repositórios Git)"
-
-#: command-list.h:195
 msgid "Show logs with difference each commit introduces"
-msgstr "Mostrar logs com diferenças que cada memória introduz"
+msgstr "Mostrar registro com as diferenças que cada memória introduz"
 
-#: command-list.h:196
+#: command-list.h:195
 msgid "Manage multiple working trees"
-msgstr "Gerir múltiplas working trees"
+msgstr "Gerir múltiplas árvores-trabalho"
 
-#: command-list.h:197
+#: command-list.h:196
 msgid "Create a tree object from the current index"
-msgstr "Criar um objeto tree a partir de index atual"
+msgstr "Criar um objeto-árvore a partir de cenário atual"
 
-#: command-list.h:198
+#: command-list.h:197
 msgid "Defining attributes per path"
 msgstr "Definir atributos por path"
 
-#: command-list.h:199
+#: command-list.h:198
 msgid "Git command-line interface and conventions"
 msgstr ""
 
-#: command-list.h:200
+#: command-list.h:199
 msgid "A Git core tutorial for developers"
-msgstr ""
+msgstr "Um tutorial para programadores sobre o núcleo de Git"
 
-#: command-list.h:201
+#: command-list.h:200
 msgid "Providing usernames and passwords to Git"
 msgstr ""
 
-#: command-list.h:202
+#: command-list.h:201
 msgid "Git for CVS users"
 msgstr ""
 
-#: command-list.h:203
+#: command-list.h:202
 msgid "Tweaking diff output"
 msgstr "Mexendo com saída de diff"
 
-#: command-list.h:204
+#: command-list.h:203
 msgid "A useful minimum set of commands for Everyday Git"
 msgstr ""
 
-#: command-list.h:205
+#: command-list.h:204
 msgid "Frequently asked questions about using Git"
 msgstr ""
 
-#: command-list.h:206
+#: command-list.h:205
 msgid "A Git Glossary"
 msgstr "Um Glossário de Git"
 
-#: command-list.h:207
+#: command-list.h:206
 msgid "Hooks used by Git"
 msgstr ""
 
-#: command-list.h:208
+#: command-list.h:207
 msgid "Specifies intentionally untracked files to ignore"
 msgstr ""
 "Especificar ficheiros por monitorizar intencionalmente, para serem ignorados"
 
+#: command-list.h:208
+msgid "The Git repository browser"
+msgstr "O browser de repositórios Git"
+
 #: command-list.h:209
 msgid "Map author/committer names and/or E-Mail addresses"
-msgstr ""
+msgstr "Mapear nomes de autor/memorizador e/ou endereços de E-Mail"
 
 #: command-list.h:210
 msgid "Defining submodule properties"
@@ -24846,59 +25854,28 @@ msgid "Mounting one repository inside another"
 msgstr ""
 
 #: command-list.h:216
-msgid "A tutorial introduction to Git: part two"
-msgstr "Um tutorial de introdução a Git: parte dois"
-
-#: command-list.h:217
 msgid "A tutorial introduction to Git"
 msgstr "Um tutorial de introdução a Git"
 
+#: command-list.h:217
+msgid "A tutorial introduction to Git: part two"
+msgstr "Um tutorial de introdução a Git: parte dois"
+
 #: command-list.h:218
+msgid "Git web interface (web frontend to Git repositories)"
+msgstr "Interface web de Git (frontend web para repositórios Git)"
+
+#: command-list.h:219
 msgid "An overview of recommended workflows with Git"
 msgstr "Uma descrição geral dos fluxos de trabalho recomendados para o Git"
 
-#: git-bisect.sh:68
-msgid "bisect run failed: no command provided."
-msgstr ""
-
-#: git-bisect.sh:73
-#, sh-format
-msgid "running $command"
-msgstr "executando $command"
-
-#: git-bisect.sh:80
-#, sh-format
-msgid ""
-"bisect run failed:\n"
-"exit code $res from '$command' is < 0 or >= 128"
-msgstr ""
-"bissetar impossível:\n"
-"exit code $res de '$command' é < 0 ou >= 128"
-
-#: git-bisect.sh:105
-msgid "bisect run cannot continue any more"
-msgstr "bisseção incapaz de continuar"
-
-#: git-bisect.sh:111
-#, sh-format
-msgid ""
-"bisect run failed:\n"
-"'bisect-state $state' exited with error code $res"
-msgstr ""
-"bisseção impossível:\n"
-"'bisect-state $state' retornou código de erro $res"
-
-#: git-bisect.sh:118
-msgid "bisect run success"
-msgstr "bissecção concluída com sucesso"
-
 #: git-merge-octopus.sh:46
 msgid ""
 "Error: Your local changes to the following files would be overwritten by "
 "merge"
 msgstr ""
-"Erro: As suas alterações locais nos seguintes ficheiros seriam substituídas "
-"ao integrar"
+"Erro: Tuas alterações locais nos seguintes ficheiros seriam sobrescritas ao "
+"juntar"
 
 #: git-merge-octopus.sh:61
 msgid "Automated merge did not work."
@@ -24911,7 +25888,7 @@ msgstr "Deverias estar a fazer polvo nenhum."
 #: git-merge-octopus.sh:73
 #, sh-format
 msgid "Unable to find common commit with $pretty_name"
-msgstr "Incapaz de encontrar commit comum com $pretty_name"
+msgstr "Incapaz de encontrar memória comum com $pretty_name"
 
 #: git-merge-octopus.sh:77
 #, sh-format
@@ -24921,514 +25898,55 @@ msgstr "Já está atualizado com $pretty_name"
 #: git-merge-octopus.sh:89
 #, sh-format
 msgid "Fast-forwarding to: $pretty_name"
-msgstr "A avançar rapidamente para: $pretty_name"
+msgstr "Avançando para: $pretty_name"
 
 #: git-merge-octopus.sh:97
 #, sh-format
 msgid "Trying simple merge with $pretty_name"
-msgstr "A tentar integração simples com $pretty_name"
+msgstr "Tentando junção simples com $pretty_name"
 
 #: git-merge-octopus.sh:102
 msgid "Simple merge did not work, trying automatic merge."
 msgstr "Junção simples falhou, tentando junção automática."
 
-#: git-submodule.sh:179
-msgid "Relative path can only be used from the toplevel of the working tree"
-msgstr ""
-"Os caminhos relativos só podem ser usados a partir do topo da árvore de "
-"trabalho"
-
-#: git-submodule.sh:189
-#, sh-format
-msgid "repo URL: '$repo' must be absolute or begin with ./|../"
-msgstr "URL do repositório: '$repo' deve ser absoluto ou começar com ./|../"
-
-#: git-submodule.sh:208
-#, sh-format
-msgid "'$sm_path' already exists in the index"
-msgstr "'$sm_path' já existe no índice"
-
-#: git-submodule.sh:211
-#, sh-format
-msgid "'$sm_path' already exists in the index and is not a submodule"
-msgstr "'$sm_path' já existe no index e é submódulo nenhum"
-
-#: git-submodule.sh:218
-#, sh-format
-msgid "'$sm_path' does not have a commit checked out"
-msgstr "'$sm_path' tem memória nenhuma checked out"
-
-#: git-submodule.sh:248
-#, sh-format
-msgid "Failed to add submodule '$sm_path'"
-msgstr "Falhou ao adicionar submódulo '$sm_path'"
-
-#: git-submodule.sh:257
-#, sh-format
-msgid "Failed to register submodule '$sm_path'"
-msgstr "Falha ao registar submódulo '$sm_path'"
-
-#: git-submodule.sh:532
-#, sh-format
-msgid "Unable to find current revision in submodule path '$displaypath'"
-msgstr "Incapaz encontrar revisão atual em path de submódulo '$displaypath'"
-
-#: git-submodule.sh:542
-#, sh-format
-msgid "Unable to fetch in submodule path '$sm_path'"
-msgstr "Incapaz de buscar em path de submódulo '$sm_path'"
-
-#: git-submodule.sh:547
-#, sh-format
-msgid ""
-"Unable to find current ${remote_name}/${branch} revision in submodule path "
-"'$sm_path'"
-msgstr ""
-"Incapaz de encontrar revisão atual ${remote_name}/${branch} em path de "
-"submódulo '$sm_path'"
-
-#: git-submodule.sh:565
-#, sh-format
-msgid ""
-"Unable to fetch in submodule path '$displaypath'; trying to directly fetch "
-"$sha1:"
-msgstr ""
-"Incapaz de buscar em path de submódulo '$displaypath'; tentando buscar $sha1 "
-"directamente:"
-
-#: git-submodule.sh:571
-#, sh-format
-msgid ""
-"Fetched in submodule path '$displaypath', but it did not contain $sha1. "
-"Direct fetching of that commit failed."
-msgstr ""
-"Buscado na path de submódulo '$displaypath', mas continha nenhum $sha1. "
-"Falha ao buscar aquela memória diretamente."
-
-#: git-submodule.sh:578
-#, sh-format
-msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
-msgstr "Incapaz de checkout '$sha1' no path de submódulo '$displaypath'"
-
-#: git-submodule.sh:579
-#, sh-format
-msgid "Submodule path '$displaypath': checked out '$sha1'"
-msgstr "Path de submódulo '$displaypath': '$sha1' checked out"
-
-#: git-submodule.sh:583
-#, sh-format
-msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
-msgstr "Incapaz de rebasear '$sha1' em path de submódulo '$displaypath'"
-
-#: git-submodule.sh:584
-#, sh-format
-msgid "Submodule path '$displaypath': rebased into '$sha1'"
-msgstr "Path de submódulo '$displaypath': rebaseado em '$sha1'"
-
-#: git-submodule.sh:589
-#, sh-format
-msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
-msgstr "Incapaz juntar '$sha1' em path de submódulo '$displaypath'"
-
-#: git-submodule.sh:590
-#, sh-format
-msgid "Submodule path '$displaypath': merged in '$sha1'"
-msgstr "Caminho de submódulo '$displaypath': integrado em '$sha1'"
-
-#: git-submodule.sh:595
-#, sh-format
-msgid "Execution of '$command $sha1' failed in submodule path '$displaypath'"
-msgstr ""
-"Falha ao executar '$command $sha1' no caminho de submódulo '$displaypath'"
-
-#: git-submodule.sh:596
-#, sh-format
-msgid "Submodule path '$displaypath': '$command $sha1'"
-msgstr "Caminho de submódulo '$displaypath': '$command $sha1'"
-
-#: git-submodule.sh:627
-#, sh-format
-msgid "Failed to recurse into submodule path '$displaypath'"
-msgstr "Falha ao percorrer o caminho de submódulo '$displaypath'"
-
-#: git-rebase--preserve-merges.sh:109
-msgid "Applied autostash."
-msgstr "Pilha automática (autostash) aplicada."
-
-#: git-rebase--preserve-merges.sh:112
-#, sh-format
-msgid "Cannot store $stash_sha1"
-msgstr "Incapaz guardar $stash_sha1"
-
-#: git-rebase--preserve-merges.sh:113
-msgid ""
-"Applying autostash resulted in conflicts.\n"
-"Your changes are safe in the stash.\n"
-"You can run \"git stash pop\" or \"git stash drop\" at any time.\n"
-msgstr ""
-"Realizando autostash existem sobreposições.\n"
-"As tuas mudanças estão salvas na stash.\n"
-"Podes executar \"git stash pop\" ou \"git stash drop\" oportunamente.\n"
-
-#: git-rebase--preserve-merges.sh:191
-#, sh-format
-msgid "Rebasing ($new_count/$total)"
-msgstr "A rebasear ($new_count/$total)"
-
-#: git-rebase--preserve-merges.sh:197
-msgid ""
-"\n"
-"Commands:\n"
-"p, pick <commit> = use commit\n"
-"r, reword <commit> = use commit, but edit the commit message\n"
-"e, edit <commit> = use commit, but stop for amending\n"
-"s, squash <commit> = use commit, but meld into previous commit\n"
-"f, fixup <commit> = like \"squash\", but discard this commit's log message\n"
-"x, exec <commit> = run command (the rest of the line) using shell\n"
-"d, drop <commit> = remove commit\n"
-"l, label <label> = label current HEAD with a name\n"
-"t, reset <label> = reset HEAD to a label\n"
-"m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]\n"
-".       create a merge commit using the original merge commit's\n"
-".       message (or the oneline, if no original merge commit was\n"
-".       specified). Use -c <commit> to reword the commit message.\n"
-"\n"
-"These lines can be re-ordered; they are executed from top to bottom.\n"
-msgstr ""
-"\n"
-"Comandos:\n"
-"p, pick <commit> = usa commit\n"
-"r, reword <commit> = usa commit, editando a mensagem commit\n"
-"e, edit <commit> = usa commit, mas pára para emendar\n"
-"s, squash <commit> = usa commit, fundindo no commit anterior\n"
-"f, fixup <commit> = como \"squash\", mas descarta mensagem deste commit\n"
-"x, exec <commit> = executa comando (do resto da linha) usando a shell\n"
-"d, drop <commit> = larga commit\n"
-"l, label <label> = dá um label a HEAD atual\n"
-"t, reset <label> = reinicia a HEAD em label\n"
-"m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]\n"
-".       cria merge commit usando a commit message original (a única\n"
-".       linha também poderá ser utlilizada). Usa -c <commit> para \n"
-".       modificar a commit message.\n"
-"\n"
-"Estas linhas podem ser reordenadas; são executadas de cima para baixo.\n"
-
-#: git-rebase--preserve-merges.sh:260
-#, sh-format
-msgid ""
-"You can amend the commit now, with\n"
-"\n"
-"\tgit commit --amend $gpg_sign_opt_quoted\n"
-"\n"
-"Once you are satisfied with your changes, run\n"
-"\n"
-"\tgit rebase --continue"
-msgstr ""
-"Podes emendar o commit agora, com\n"
-"\n"
-"\tgit commit --amend $gpg_sign_opt_quoted\n"
-"\n"
-"Quando modificações estão correctas, executa\n"
-"\n"
-"\tgit rebase --continue"
-
-#: git-rebase--preserve-merges.sh:285
-#, sh-format
-msgid "$sha1: not a commit that can be picked"
-msgstr "$sha1: é memória nenhuma que possa ser escolhida"
-
-#: git-rebase--preserve-merges.sh:324
-#, sh-format
-msgid "Invalid commit name: $sha1"
-msgstr "Nome de commit inválido: $sha1"
-
-#: git-rebase--preserve-merges.sh:354
-msgid "Cannot write current commit's replacement sha1"
-msgstr "Incapaz escrever sha1 substituto atual de commit"
-
-#: git-rebase--preserve-merges.sh:405
-#, sh-format
-msgid "Fast-forward to $sha1"
-msgstr "Avanço para $sha1"
-
-#: git-rebase--preserve-merges.sh:407
-#, sh-format
-msgid "Cannot fast-forward to $sha1"
-msgstr "Incapaz fast-forward até $sha1"
-
-#: git-rebase--preserve-merges.sh:416
-#, sh-format
-msgid "Cannot move HEAD to $first_parent"
-msgstr "Incapaz mover HEAD até $first_parent"
-
-#: git-rebase--preserve-merges.sh:421
-#, sh-format
-msgid "Refusing to squash a merge: $sha1"
-msgstr "Recusa-se a esmagar uma integração: $sha1"
-
-#: git-rebase--preserve-merges.sh:439
-#, sh-format
-msgid "Error redoing merge $sha1"
-msgstr "Erro ao refazer integração $sha1"
-
-#: git-rebase--preserve-merges.sh:448
-#, sh-format
-msgid "Could not pick $sha1"
-msgstr "Incapaz apanhar $sha1"
-
-#: git-rebase--preserve-merges.sh:457
-#, sh-format
-msgid "This is the commit message #${n}:"
-msgstr "Esta é a mensagem de memória #${n}:"
-
-#: git-rebase--preserve-merges.sh:462
-#, sh-format
-msgid "The commit message #${n} will be skipped:"
-msgstr "Mensagem de memória #${n} será ignorada:"
-
-#: git-rebase--preserve-merges.sh:473
-#, sh-format
-msgid "This is a combination of $count commit."
-msgid_plural "This is a combination of $count commits."
-msgstr[0] "Isto é a combinação de $count commit."
-msgstr[1] "Isto é a combinação de $count commits."
-
-#: git-rebase--preserve-merges.sh:482
-#, sh-format
-msgid "Cannot write $fixup_msg"
-msgstr "Incapaz escrever $fixup_msg"
-
-#: git-rebase--preserve-merges.sh:485
-msgid "This is a combination of 2 commits."
-msgstr "Isto é a combinação de 2 commits."
-
-#: git-rebase--preserve-merges.sh:526 git-rebase--preserve-merges.sh:569
-#: git-rebase--preserve-merges.sh:572
-#, sh-format
-msgid "Could not apply $sha1... $rest"
-msgstr "Incapaz submeter $sha1... $rest"
-
-#: git-rebase--preserve-merges.sh:601
-#, sh-format
-msgid ""
-"Could not amend commit after successfully picking $sha1... $rest\n"
-"This is most likely due to an empty commit message, or the pre-commit hook\n"
-"failed. If the pre-commit hook failed, you may need to resolve the issue "
-"before\n"
-"you are able to reword the commit."
-msgstr ""
-"Impossível emendar commit pós um sucesso do picking $sha1... $rest\n"
-" devido a um commit message vazio, ou o pre-commit hook falhou. Se o \n"
-"pre-commit hook falhou, pode ser preciso resolver o issue antes de \n"
-"tentares modificar a mensagem commit."
-
-#: git-rebase--preserve-merges.sh:616
-#, sh-format
-msgid "Stopped at $sha1_abbrev... $rest"
-msgstr "Parou em $sha1_abbrev... $rest"
-
-#: git-rebase--preserve-merges.sh:631
-#, sh-format
-msgid "Cannot '$squash_style' without a previous commit"
-msgstr "Incapaz '$squash_style' sem um commit anterior"
-
-#: git-rebase--preserve-merges.sh:673
-#, sh-format
-msgid "Executing: $rest"
-msgstr "A executar: $rest"
-
-#: git-rebase--preserve-merges.sh:681
-#, sh-format
-msgid "Execution failed: $rest"
-msgstr "Execução falhou: $rest"
-
-#: git-rebase--preserve-merges.sh:683
-msgid "and made changes to the index and/or the working tree"
-msgstr "e fiz alterações ao cenário e/ou à árvore-trabalho"
-
-#: git-rebase--preserve-merges.sh:685
-msgid ""
-"You can fix the problem, and then run\n"
-"\n"
-"\tgit rebase --continue"
-msgstr ""
-"Podes resolver o problema, e executar\n"
-"\n"
-"\tgit rebase --continue"
-
-#. TRANSLATORS: after these lines is a command to be issued by the user
-#: git-rebase--preserve-merges.sh:698
-#, sh-format
-msgid ""
-"Execution succeeded: $rest\n"
-"but left changes to the index and/or the working tree\n"
-"Commit or stash your changes, and then run\n"
-"\n"
-"\tgit rebase --continue"
-msgstr ""
-"Executado com sucesso: $rest\n"
-"e tens alterações em índice e/ou em working tree\n"
-"Põe no commit ou stash, e corre\n"
-"\n"
-"\tgit rebase --continue"
-
-#: git-rebase--preserve-merges.sh:709
-#, sh-format
-msgid "Unknown command: $command $sha1 $rest"
-msgstr "Comando desconhecido: $command $sha1 $rest"
-
-#: git-rebase--preserve-merges.sh:710
-msgid "Please fix this using 'git rebase --edit-todo'."
-msgstr "Por favor corrige isto usando 'git rebase --edit-todo'."
-
-#: git-rebase--preserve-merges.sh:745
-#, sh-format
-msgid "Successfully rebased and updated $head_name."
-msgstr "$head_name rebaseado e atualizado com sucesso."
-
-#: git-rebase--preserve-merges.sh:802
-msgid "Could not remove CHERRY_PICK_HEAD"
-msgstr "Incapaz remover CHERRY_PICK_HEAD"
-
-#: git-rebase--preserve-merges.sh:807
-#, sh-format
-msgid ""
-"You have staged changes in your working tree.\n"
-"If these changes are meant to be\n"
-"squashed into the previous commit, run:\n"
-"\n"
-"  git commit --amend $gpg_sign_opt_quoted\n"
-"\n"
-"If they are meant to go into a new commit, run:\n"
-"\n"
-"  git commit $gpg_sign_opt_quoted\n"
-"\n"
-"In both cases, once you're done, continue with:\n"
-"\n"
-"  git rebase --continue\n"
-msgstr ""
-"Tens modificações staged na working tree.\n"
-"Se tenciona squash as modificações no último\n"
-"commit, execute:\n"
-"\n"
-"  git commit --amend $gpg_sign_opt_quoted\n"
-"\n"
-"Se tenciona pô-las em novo commit, execute:\n"
-"\n"
-"  git commit $gpg_sign_opt_quoted\n"
-"\n"
-"Em ambos os casos, quando feito, continue com:\n"
-"\n"
-"  git rebase --continue\n"
-
-#: git-rebase--preserve-merges.sh:824
-msgid "Error trying to find the author identity to amend commit"
-msgstr "Erro ao tentar encontrar a identidade do autor para emendar o commit"
-
-#: git-rebase--preserve-merges.sh:829
-msgid ""
-"You have uncommitted changes in your working tree. Please commit them\n"
-"first and then run 'git rebase --continue' again."
-msgstr ""
-"Tem alterações por submeter na árvore de trabalho. Submeta-as primeiro\n"
-"e execute 'git rebase --continue' de novo."
-
-#: git-rebase--preserve-merges.sh:834 git-rebase--preserve-merges.sh:838
-msgid "Could not commit staged changes."
-msgstr "Incapaz de commit alterações preparadas."
-
-#: git-rebase--preserve-merges.sh:869 git-rebase--preserve-merges.sh:955
-msgid "Could not execute editor"
-msgstr "Incapaz executar editor"
-
-#: git-rebase--preserve-merges.sh:890
-#, sh-format
-msgid "Could not checkout $switch_to"
-msgstr "Incapaz checkout $switch_to"
-
-#: git-rebase--preserve-merges.sh:897
-msgid "No HEAD?"
-msgstr "HEAD nenhuma?"
-
-#: git-rebase--preserve-merges.sh:898
-#, sh-format
-msgid "Could not create temporary $state_dir"
-msgstr "Incapaz criar $state_dir temporário"
-
-#: git-rebase--preserve-merges.sh:901
-msgid "Could not mark as interactive"
-msgstr "Incapaz marcar como interativo"
-
-#: git-rebase--preserve-merges.sh:933
-#, sh-format
-msgid "Rebase $shortrevisions onto $shortonto ($todocount command)"
-msgid_plural "Rebase $shortrevisions onto $shortonto ($todocount commands)"
-msgstr[0] "Rebasear $shortrevisions sobre $shortonto ($todocount comando)"
-msgstr[1] "Rebasear $shortrevisions sobre $shortonto ($todocount comandos)"
-
-#: git-rebase--preserve-merges.sh:945
-msgid "Note that empty commits are commented out"
-msgstr "Note que memórias vazias são comentadas"
-
-#: git-rebase--preserve-merges.sh:987 git-rebase--preserve-merges.sh:992
-msgid "Could not init rewritten commits"
-msgstr "Incapaz inicializar memórias reescritas"
-
 #: git-sh-setup.sh:89 git-sh-setup.sh:94
 #, sh-format
 msgid "usage: $dashless $USAGE"
-msgstr "utilização: $dashless $USAGE"
+msgstr "uso: $dashless $USAGE"
 
-#: git-sh-setup.sh:191
+#: git-sh-setup.sh:182
 #, sh-format
 msgid "Cannot chdir to $cdup, the toplevel of the working tree"
-msgstr "Incapaz chdir para $cdup, o topo da árvore de trabalho"
+msgstr "Incapaz chdir para $cdup, o topo da árvore-trabalho"
 
-#: git-sh-setup.sh:200 git-sh-setup.sh:207
+#: git-sh-setup.sh:191 git-sh-setup.sh:198
 #, sh-format
 msgid "fatal: $program_name cannot be used without a working tree."
-msgstr "fatal: $program_name apenas pode ser usado com uma árvore de trabalho."
-
-#: git-sh-setup.sh:221
-msgid "Cannot rebase: You have unstaged changes."
-msgstr "Incapaz rebasear: Tens alterações despreparadas."
+msgstr "fatal: $program_name apenas pode ser usado com uma árvore-trabalho."
 
-#: git-sh-setup.sh:224
+#: git-sh-setup.sh:212
 msgid "Cannot rewrite branches: You have unstaged changes."
-msgstr "Incapaz reescrever ramos: Tens alterações despreparadas."
+msgstr "Incapaz reescrever ramos: Tens alterações desencenadas."
 
-#: git-sh-setup.sh:227
-msgid "Cannot pull with rebase: You have unstaged changes."
-msgstr "Incapaz agarrar com rebase: Tens alterações despreparadas."
-
-#: git-sh-setup.sh:230
+#: git-sh-setup.sh:215
 #, sh-format
 msgid "Cannot $action: You have unstaged changes."
-msgstr "Incapaz $action: Tens alterações despreparadas."
-
-#: git-sh-setup.sh:243
-msgid "Cannot rebase: Your index contains uncommitted changes."
-msgstr "Incapaz rebasear: Teu index contém alterações por memorizar."
+msgstr "Incapaz $action: Tens alterações desencenadas."
 
-#: git-sh-setup.sh:246
-msgid "Cannot pull with rebase: Your index contains uncommitted changes."
-msgstr "Incapaz agarrar com rebase: Teu index contém alterações por memorizar."
-
-#: git-sh-setup.sh:249
+#: git-sh-setup.sh:226
 #, sh-format
 msgid "Cannot $action: Your index contains uncommitted changes."
-msgstr "Incapaz $action: Teu index contém alterações por memorizar."
+msgstr "Incapaz $action: Teu cenário contém alterações por memorizar."
 
-#: git-sh-setup.sh:253
+#: git-sh-setup.sh:228
 msgid "Additionally, your index contains uncommitted changes."
-msgstr "Além disso, teu index contém alterações por memorizar."
+msgstr "Além disso, teu cenário contém alterações por memorizar."
 
-#: git-sh-setup.sh:373
+#: git-sh-setup.sh:348
 msgid "You need to run this command from the toplevel of the working tree."
-msgstr ""
-"Precisa de executar este comando a partir do topo da árvore de trabalho."
+msgstr "Precisas executar este comando a partir do topo da árvore-trabalho."
 
-#: git-sh-setup.sh:378
+#: git-sh-setup.sh:353
 msgid "Unable to determine absolute path of git directory"
 msgstr "Incapaz determinar caminho absoluto de pasta git"
 
@@ -25450,24 +25968,24 @@ msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for staging."
 msgstr ""
-"Se patch aplica-se correctamente, a edição do hunk será marcada\n"
-"imediatamente como preparado."
+"Se remendo aplica-se correctamente, a edição do hunk será imediatamente\n"
+"marcada para encenar."
 
 #: git-add--interactive.perl:1059
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for stashing."
 msgstr ""
-"Se patch aplica-se corretamente, a edição do hunk será marcada\n"
-"imediatamente como stashed."
+"Se remendo aplica-se corretamente, a edição do hunk será imediatamente\n"
+"marcada para esconder."
 
 #: git-add--interactive.perl:1062
 msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for unstaging."
 msgstr ""
-"Se patch aplica-se corretamente, a edição do hunk será marcada\n"
-"imediatamente como despreparada."
+"Se remendo aplica-se corretamente, a edição do hunk será imediatamente\n"
+"marcada para desencenar."
 
 #: git-add--interactive.perl:1065 git-add--interactive.perl:1074
 #: git-add--interactive.perl:1080
@@ -25475,8 +25993,8 @@ msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for applying."
 msgstr ""
-"Se patch aplica-se corretamente, a edição do hunk será marcada\n"
-"imediatamente como aplicada."
+"Se remendo aplica-se corretamente, a edição do hunk será imediatamente\n"
+"marcada para aplicação."
 
 #: git-add--interactive.perl:1068 git-add--interactive.perl:1071
 #: git-add--interactive.perl:1077
@@ -25484,8 +26002,8 @@ msgid ""
 "If the patch applies cleanly, the edited hunk will immediately be\n"
 "marked for discarding."
 msgstr ""
-"Se patch aplica-se corretamente, o pedaço editado será marcado\n"
-"imediatamente como descartado."
+"Se remendo aplica-se corretamente, o pedaço editado será imediatamente\n"
+"marcada para descartar."
 
 #: git-add--interactive.perl:1114
 #, perl-format
@@ -25510,7 +26028,7 @@ msgstr ""
 msgid "failed to open hunk edit file for reading: %s"
 msgstr "falha a abrir ficheiro de edição do pedaço para leitura: %s"
 
-#: git-add--interactive.perl:1251
+#: git-add--interactive.perl:1253
 msgid ""
 "y - stage this hunk\n"
 "n - do not stage this hunk\n"
@@ -25518,13 +26036,13 @@ msgid ""
 "a - stage this hunk and all later hunks in the file\n"
 "d - do not stage this hunk or any of the later hunks in the file"
 msgstr ""
-"y - preparar este pedaço\n"
-"n - despreparar este pedaço\n"
-"q - sair; despreparar este pedaço e os restantes\n"
-"a - preparar este pedaço e os próximos deste ficheiro\n"
-"d - despreparar este pedaço e os próximos deste ficheiro"
+"y - encenar este pedaço\n"
+"n - deixar por encenar este pedaço\n"
+"q - sair; deixar por encenar este pedaço ou qualquer um dos que permaneçam\n"
+"a - encenar este pedaço e todos os próximos pedaços deste ficheiro\n"
+"d - deixar por encenar este pedaço ou qualquer próximo pedaço deste ficheiro"
 
-#: git-add--interactive.perl:1257
+#: git-add--interactive.perl:1259
 msgid ""
 "y - stash this hunk\n"
 "n - do not stash this hunk\n"
@@ -25532,13 +26050,13 @@ msgid ""
 "a - stash this hunk and all later hunks in the file\n"
 "d - do not stash this hunk or any of the later hunks in the file"
 msgstr ""
-"y - arrumar este pedaço\n"
-"n - deixar este pedaço fora dos arrumos\n"
-"q - sair; deixar este pedaço e os restantes fora dos arrumos\n"
-"a - arrumar este pedaço e os próximos deste ficheiro\n"
-"d - deixar este pedaço e os próximos deste ficheiro fora dos arrumos"
+"y - esconder este pedaço\n"
+"n - deixar por esconder este pedaço\n"
+"q - sair; deixar por esconder este pedaço ou qualquer um dos que permaneçam\n"
+"a - esconder este pedaço e todos os próximos pedaços neste ficheiro\n"
+"d - deixar por esconder este pedaço ou qualquer próximo pedaço neste ficheiro"
 
-#: git-add--interactive.perl:1263
+#: git-add--interactive.perl:1265
 msgid ""
 "y - unstage this hunk\n"
 "n - do not unstage this hunk\n"
@@ -25546,13 +26064,14 @@ msgid ""
 "a - unstage this hunk and all later hunks in the file\n"
 "d - do not unstage this hunk or any of the later hunks in the file"
 msgstr ""
-"y - despreparar este pedaço\n"
-"n - preparar este pedaço\n"
-"q - sair; preparar este pedaço e os restantes\n"
-"a - despreparar este pedaço e os próximos deste ficheiro\n"
-"d - preparar este pedaço e os próximos deste ficheiro"
+"y - desencenar este pedaço\n"
+"n - deixar por desencenar este pedaço\n"
+"q - sair; deixar por encenar este pedaço ou qualquer um dos que permaneçam\n"
+"a - desencenar este pedaço e todos os próximos pedaços neste ficheiro\n"
+"d - deixar por desencenar este pedaço ou qualquer próximo pedaço neste "
+"ficheiro"
 
-#: git-add--interactive.perl:1269
+#: git-add--interactive.perl:1271
 msgid ""
 "y - apply this hunk to index\n"
 "n - do not apply this hunk to index\n"
@@ -25560,13 +26079,13 @@ msgid ""
 "a - apply this hunk and all later hunks in the file\n"
 "d - do not apply this hunk or any of the later hunks in the file"
 msgstr ""
-"y - submeter este pedaço ao index\n"
-"n - deixar este pedaço de fora do index\n"
-"q - sair; deixar de fora este pedaço e os restantes\n"
-"a - submeter este pedaço e os próximos deste ficheiro\n"
-"d - deixar de fora este pedaço e os próximos deste ficheiro"
+"y - submeter este pedaço no cenário\n"
+"n - deixar por submeter este pedaço no cenário\n"
+"q - sair; deixar por submeter este pedaço ou qualquer um dos que permaneçam\n"
+"a - submeter este pedaço e todos os próximos pedaços neste ficheiro\n"
+"d - deixar por submeter este pedaço ou qualquer próximo pedaço neste ficheiro"
 
-#: git-add--interactive.perl:1275 git-add--interactive.perl:1293
+#: git-add--interactive.perl:1277 git-add--interactive.perl:1295
 msgid ""
 "y - discard this hunk from worktree\n"
 "n - do not discard this hunk from worktree\n"
@@ -25574,13 +26093,15 @@ msgid ""
 "a - discard this hunk and all later hunks in the file\n"
 "d - do not discard this hunk or any of the later hunks in the file"
 msgstr ""
-"y - descartar este pedaço da árvore de trabalho\n"
-"n - manter este pedaço na árvore de trabalho\n"
-"q - sair; considerar este pedaço e os restantes\n"
-"a - descartar este pedaço e os os próximos deste ficheiro\n"
-"d - manter este pedaço e os próximos deste ficheiro"
+"y - descartar este pedaço da árvore-trabalho\n"
+"n - deixar por descartar este pedaço da árvore-trabalho\n"
+"q - sair; deixar por descartar este pedaço ou qualquer um dos que "
+"permaneçam\n"
+"a - descartar este pedaço e qualquer próximos pedaço neste ficheiro\n"
+"d - deixar por descartar este pedaço ou qualquer próximo pedaço neste "
+"ficheiro"
 
-#: git-add--interactive.perl:1281
+#: git-add--interactive.perl:1283
 msgid ""
 "y - discard this hunk from index and worktree\n"
 "n - do not discard this hunk from index and worktree\n"
@@ -25588,13 +26109,15 @@ msgid ""
 "a - discard this hunk and all later hunks in the file\n"
 "d - do not discard this hunk or any of the later hunks in the file"
 msgstr ""
-"y - descartar este pedaço de index e árvore de trabalho\n"
-"n - manter este pedaço no index e árvore de trabalho\n"
-"q - sair; manter este pedaço e os restante\n"
-"a - descartar este pedaço e os próximos deste ficheiro\n"
-"d - manter este pedaço e os próximos deste ficheiro"
+"y - descartar este pedaço do cenário e árvore-trabalho\n"
+"n - deixar por descartar este pedaço do cenário e árvore-trabalho\n"
+"q - sair; deixar por descartar este pedaço ou qualquer um dos que "
+"permaneçam\n"
+"a - descartar este pedaço e qualquer próximos pedaço neste ficheiro\n"
+"d - deixar por descartar este pedaço ou qualquer próximo pedaço neste "
+"ficheiro"
 
-#: git-add--interactive.perl:1287
+#: git-add--interactive.perl:1289
 msgid ""
 "y - apply this hunk to index and worktree\n"
 "n - do not apply this hunk to index and worktree\n"
@@ -25602,13 +26125,13 @@ msgid ""
 "a - apply this hunk and all later hunks in the file\n"
 "d - do not apply this hunk or any of the later hunks in the file"
 msgstr ""
-"y - submeter este pedaço ao index e à árvore de trabalho\n"
-"n - deixar este pedaço fora de índice e à árvore de trabalho\n"
-"q - sair; deixar de fora este pedaço e restantes\n"
-"a - submeter este pedaço e os próximos deste ficheiro\n"
-"d - deixar de fora este pedaço e os próximos deste ficheiro"
+"y - submeter este pedaço ao cenário e à árvore-trabalho\n"
+"n - deixar por submeter este pedaço ao cenário e à árvore-trabalho\n"
+"q - sair; deixar por submeter este pedaço ou qualquer um dos que permaneçam\n"
+"a - submeter este pedaço e qualquer próximos pedaço neste ficheiro\n"
+"d - deixar por submeter este pedaço ou qualquer próximo pedaço neste ficheiro"
 
-#: git-add--interactive.perl:1299
+#: git-add--interactive.perl:1301
 msgid ""
 "y - apply this hunk to worktree\n"
 "n - do not apply this hunk to worktree\n"
@@ -25616,13 +26139,13 @@ msgid ""
 "a - apply this hunk and all later hunks in the file\n"
 "d - do not apply this hunk or any of the later hunks in the file"
 msgstr ""
-"y - submeter este pedaço à árvore de trabalho\n"
-"n - deixar este pedaço de fora da árvore de trabalho\n"
-"q - sair; deixar de fora este pedaço e restantes\n"
-"a - submeter este pedaço e os próximos deste ficheiro\n"
-"d - deixar de fora este pedaço e os próximos deste ficheiro"
+"y - submeter este pedaço à árvore-trabalho\n"
+"n - deixar por submeter este pedaço à árvore-trabalho\n"
+"q - sair; deixar por submeter este pedaço ou qualquer um dos que permaneçam\n"
+"a - submeter este pedaço e qualquer próximos pedaço neste ficheiro\n"
+"d - deixar por submeter este pedaço ou qualquer próximo pedaço neste ficheiro"
 
-#: git-add--interactive.perl:1314
+#: git-add--interactive.perl:1316
 msgid ""
 "g - select a hunk to go to\n"
 "/ - search for a hunk matching the given regex\n"
@@ -25644,95 +26167,90 @@ msgstr ""
 "e - editar manualmente o pedaço atual\n"
 "? - imprimir ajuda\n"
 
-#: git-add--interactive.perl:1345
+#: git-add--interactive.perl:1347
 msgid "The selected hunks do not apply to the index!\n"
-msgstr "Os pedaços selecionados ficam de fora de index!\n"
+msgstr "Os pedaços selecionados ficam de fora de cenário!\n"
 
-#: git-add--interactive.perl:1360
+#: git-add--interactive.perl:1362
 #, perl-format
 msgid "ignoring unmerged: %s\n"
 msgstr "ignorando por juntar: %s\n"
 
-#: git-add--interactive.perl:1479
+#: git-add--interactive.perl:1481
 #, perl-format
 msgid "Apply mode change to worktree [y,n,q,a,d%s,?]? "
-msgstr ""
-"Aplicar alteração de modo ao índice e à árvore de trabalho [y,n,q,a,d,/"
-"%s,?]? "
+msgstr "Submeter alteração de modo à árvore-trabalho [y,n,q,a,d%s,?]? "
 
-#: git-add--interactive.perl:1480
+#: git-add--interactive.perl:1482
 #, perl-format
 msgid "Apply deletion to worktree [y,n,q,a,d%s,?]? "
-msgstr ""
-"Aplicar eliminação ao índice e à árvore de trabalho [y,n,q,a,d,/%s,?]? "
+msgstr "Submeter eliminação à árvore-trabalho [y,n,q,a,d%s,?]? "
 
-#: git-add--interactive.perl:1481
+#: git-add--interactive.perl:1483
 #, perl-format
 msgid "Apply addition to worktree [y,n,q,a,d%s,?]? "
-msgstr ""
-"Aplicar eliminação ao índice e à árvore de trabalho [y,n,q,a,d,/%s,?]? "
+msgstr "Submeter adição à árvore-trabalho [y,n,q,a,d%s,?]? "
 
-#: git-add--interactive.perl:1482
+#: git-add--interactive.perl:1484
 #, perl-format
 msgid "Apply this hunk to worktree [y,n,q,a,d%s,?]? "
-msgstr ""
-"Aplicar este pedaço ao índice e à árvore de trabalho [y,n,q,a,d,/%s,?]? "
+msgstr "Aplicar este pedaço à árvore-trabalho [y,n,q,a,d%s,?]? "
 
-#: git-add--interactive.perl:1599
+#: git-add--interactive.perl:1601
 msgid "No other hunks to goto\n"
 msgstr ""
 
-#: git-add--interactive.perl:1617
+#: git-add--interactive.perl:1619
 #, perl-format
 msgid "Invalid number: '%s'\n"
 msgstr "Número inválido: '%s'\n"
 
-#: git-add--interactive.perl:1622
+#: git-add--interactive.perl:1624
 #, perl-format
 msgid "Sorry, only %d hunk available.\n"
 msgid_plural "Sorry, only %d hunks available.\n"
 msgstr[0] "Lamento, apenas %d pedaço disponível.\n"
 msgstr[1] "Lamento, apenas %d pedaços disponíveis.\n"
 
-#: git-add--interactive.perl:1657
+#: git-add--interactive.perl:1659
 msgid "No other hunks to search\n"
 msgstr ""
 
-#: git-add--interactive.perl:1674
+#: git-add--interactive.perl:1676
 #, perl-format
 msgid "Malformed search regexp %s: %s\n"
 msgstr "Regexp de pesquisa malformada %s: %s\n"
 
-#: git-add--interactive.perl:1684
+#: git-add--interactive.perl:1686
 msgid "No hunk matches the given pattern\n"
 msgstr "Nenhum pedaço corresponde ao padrão fornecido\n"
 
-#: git-add--interactive.perl:1696 git-add--interactive.perl:1718
+#: git-add--interactive.perl:1698 git-add--interactive.perl:1720
 msgid "No previous hunk\n"
 msgstr "Nenhum pedaço anterior\n"
 
-#: git-add--interactive.perl:1705 git-add--interactive.perl:1724
+#: git-add--interactive.perl:1707 git-add--interactive.perl:1726
 msgid "No next hunk\n"
 msgstr "Nenhum pedaço seguinte\n"
 
-#: git-add--interactive.perl:1730
+#: git-add--interactive.perl:1732
 msgid "Sorry, cannot split this hunk\n"
 msgstr ""
 
-#: git-add--interactive.perl:1736
+#: git-add--interactive.perl:1738
 #, perl-format
 msgid "Split into %d hunk.\n"
 msgid_plural "Split into %d hunks.\n"
 msgstr[0] "Dividir em %d pedaço.\n"
 msgstr[1] "Dividir em %d pedaços.\n"
 
-#: git-add--interactive.perl:1746
+#: git-add--interactive.perl:1748
 msgid "Sorry, cannot edit this hunk\n"
 msgstr ""
 
 #. TRANSLATORS: please do not translate the command names
 #. 'status', 'update', 'revert', etc.
-#: git-add--interactive.perl:1811
+#: git-add--interactive.perl:1813
 msgid ""
 "status        - show paths with changes\n"
 "update        - add working tree state to the staged set of changes\n"
@@ -25742,113 +26260,113 @@ msgid ""
 "add untracked - add contents of untracked files to the staged set of "
 "changes\n"
 msgstr ""
-"status        - mostrar paths com alterações\n"
-"update        - adicionar o estado da árvore de trabalho ao conjunto de "
-"alterações preparadas\n"
-"revert        - reverter conjunto de alterações preparadas de volta à versão "
+"status        - mostrar caminhos com alterações\n"
+"update        - adicionar estado de árvore-trabalho ao conjunto de "
+"alterações encenadas\n"
+"revert        - reverter conjunto de alterações encenadas de volta à versão "
 "HEAD\n"
 "patch         - escolher pedaços e atualizar seletivamente\n"
-"diff          - ver diff entre HEAD e index\n"
-"add untracked - adicionar conteúdos de ficheiros por monitorizar ao conjunto "
-"de alterações preparadas\n"
-
-#: git-add--interactive.perl:1828 git-add--interactive.perl:1840
-#: git-add--interactive.perl:1843 git-add--interactive.perl:1850
-#: git-add--interactive.perl:1853 git-add--interactive.perl:1860
-#: git-add--interactive.perl:1864 git-add--interactive.perl:1870
+"diff          - ver diff entre HEAD e cenário\n"
+"add untracked - adicionar conteúdos de ficheiros desmonitorizados ao "
+"conjunto de alterações encenadas\n"
+
+#: git-add--interactive.perl:1830 git-add--interactive.perl:1842
+#: git-add--interactive.perl:1845 git-add--interactive.perl:1852
+#: git-add--interactive.perl:1855 git-add--interactive.perl:1862
+#: git-add--interactive.perl:1866 git-add--interactive.perl:1872
 msgid "missing --"
 msgstr "falta --"
 
-#: git-add--interactive.perl:1866
+#: git-add--interactive.perl:1868
 #, perl-format
 msgid "unknown --patch mode: %s"
 msgstr "modo --patch desconhecido: %s"
 
-#: git-add--interactive.perl:1872 git-add--interactive.perl:1878
+#: git-add--interactive.perl:1874 git-add--interactive.perl:1880
 #, perl-format
 msgid "invalid argument %s, expecting --"
 msgstr "argumento inválido %s, esperando --"
 
-#: git-send-email.perl:129
+#: git-send-email.perl:159
 msgid "local zone differs from GMT by a non-minute interval\n"
 msgstr "zona local difere de GMT por um intervalo diferente de minuto\n"
 
-#: git-send-email.perl:136 git-send-email.perl:142
+#: git-send-email.perl:166 git-send-email.perl:172
 msgid "local time offset greater than or equal to 24 hours\n"
 msgstr "a diferença de tempo local é maior ou igual a 24 horas\n"
 
-#: git-send-email.perl:214
+#: git-send-email.perl:244
 #, perl-format
 msgid "fatal: command '%s' died with exit code %d"
 msgstr ""
 
-#: git-send-email.perl:227
+#: git-send-email.perl:257
 msgid "the editor exited uncleanly, aborting everything"
-msgstr "o editor saiu com erros, abortar tudo"
+msgstr "o editor saiu incorretamente, abortar tudo"
 
-#: git-send-email.perl:316
+#: git-send-email.perl:346
 #, perl-format
 msgid ""
 "'%s' contains an intermediate version of the email you were composing.\n"
-msgstr "'%s' contém uma versão intermédia do e-mail que esteve a compor.\n"
+msgstr "'%s' contém uma versão intermédia do email que estavas a compor.\n"
 
-#: git-send-email.perl:321
+#: git-send-email.perl:351
 #, perl-format
 msgid "'%s.final' contains the composed email.\n"
 msgstr "'%s.final' contém o e-mail composto.\n"
 
-#: git-send-email.perl:450
+#: git-send-email.perl:484
 msgid "--dump-aliases incompatible with other options\n"
 msgstr "--dump-aliases incompatível com outras opções\n"
 
-#: git-send-email.perl:525
+#: git-send-email.perl:561
 msgid ""
 "fatal: found configuration options for 'sendmail'\n"
 "git-send-email is configured with the sendemail.* options - note the 'e'.\n"
 "Set sendemail.forbidSendmailVariables to false to disable this check.\n"
 msgstr ""
 
-#: git-send-email.perl:530 git-send-email.perl:746
+#: git-send-email.perl:566 git-send-email.perl:782
 msgid "Cannot run git format-patch from outside a repository\n"
 msgstr "Incapaz executar git format-patch fora de um repositório\n"
 
-#: git-send-email.perl:533
+#: git-send-email.perl:569
 msgid ""
 "`batch-size` and `relogin` must be specified together (via command-line or "
 "configuration option)\n"
 msgstr ""
 
-#: git-send-email.perl:546
+#: git-send-email.perl:582
 #, perl-format
 msgid "Unknown --suppress-cc field: '%s'\n"
 msgstr "Campo de --suppress-cc desconhecido: '%s'\n"
 
-#: git-send-email.perl:577
+#: git-send-email.perl:613
 #, perl-format
 msgid "Unknown --confirm setting: '%s'\n"
 msgstr "Definidição --confirm desconhecida: '%s'\n"
 
-#: git-send-email.perl:617
+#: git-send-email.perl:653
 #, perl-format
 msgid "warning: sendmail alias with quotes is not supported: %s\n"
 msgstr "aviso: alias sendmail com aspas é insustentado: %s\n"
 
-#: git-send-email.perl:619
+#: git-send-email.perl:655
 #, perl-format
 msgid "warning: `:include:` not supported: %s\n"
 msgstr "aviso: `:include:` insustentado: %s\n"
 
-#: git-send-email.perl:621
+#: git-send-email.perl:657
 #, perl-format
 msgid "warning: `/file` or `|pipe` redirection not supported: %s\n"
 msgstr "aviso: `/file` ou redireção `|pipe` é insustentado: %s\n"
 
-#: git-send-email.perl:626
+#: git-send-email.perl:662
 #, perl-format
 msgid "warning: sendmail line is not recognized: %s\n"
 msgstr "aviso: linha sendmail está por reconhecer: %s\n"
 
-#: git-send-email.perl:711
+#: git-send-email.perl:747
 #, perl-format
 msgid ""
 "File '%s' exists but it could also be the range of commits\n"
@@ -25857,18 +26375,18 @@ msgid ""
 "    * Saying \"./%s\" if you mean a file; or\n"
 "    * Giving --format-patch option if you mean a range.\n"
 msgstr ""
-"O ficheiro '%s' existe mas também pode ser um intervalo de commits\n"
-"para os quais produzir patches.  Por favor desambigue...\n"
+"Ficheiro '%s' existe mas também pode ser o intervalo de memórias\n"
+"para as quais produzir remendos.  Por favor desambigue...\n"
 "\n"
-"    * Dizendo \"./%s\" se pretende um ficheiro; ou\n"
-"    * Passando a opção --format-patch se pretende um intervalo de commits.\n"
+"    * Dizendo \"./%s\" se pretendes um ficheiro; ou\n"
+"    * Passando a opção --format-patch se pretendes um intervalo.\n"
 
-#: git-send-email.perl:732
+#: git-send-email.perl:768
 #, perl-format
 msgid "Failed to opendir %s: %s"
-msgstr "Falha ao abrir diretório %s: %s"
+msgstr "Falhou ao opendir %s: %s"
 
-#: git-send-email.perl:767
+#: git-send-email.perl:803
 msgid ""
 "\n"
 "No patch files specified!\n"
@@ -25878,17 +26396,17 @@ msgstr ""
 "Nenhum ficheiro patch especificado!\n"
 "\n"
 
-#: git-send-email.perl:780
+#: git-send-email.perl:816
 #, perl-format
 msgid "No subject line in %s?"
 msgstr "Nenhum linha de assunto em %s?"
 
-#: git-send-email.perl:791
+#: git-send-email.perl:827
 #, perl-format
 msgid "Failed to open for writing %s: %s"
 msgstr "Falha ao abrir %s para escrita: %s"
 
-#: git-send-email.perl:802
+#: git-send-email.perl:838
 msgid ""
 "Lines beginning in \"GIT:\" will be removed.\n"
 "Consider including an overall diffstat or table of contents\n"
@@ -25902,27 +26420,27 @@ msgstr ""
 "\n"
 "Apague o conteúdo do corpo se deseja enviar um sumário nenhum.\n"
 
-#: git-send-email.perl:826
+#: git-send-email.perl:862
 #, perl-format
 msgid "Failed to open %s: %s"
 msgstr "Falha ao abrir %s: %s"
 
-#: git-send-email.perl:843
+#: git-send-email.perl:879
 #, perl-format
 msgid "Failed to open %s.final: %s"
 msgstr "Falha ao abrir %s.final: %s"
 
-#: git-send-email.perl:886
+#: git-send-email.perl:922
 msgid "Summary email is empty, skipping it\n"
-msgstr "O e-mail de sumário está vazio, saltá-lo à frente\n"
+msgstr "O email de sumário está vazio, saltá-lo à frente\n"
 
 #. TRANSLATORS: please keep [y/N] as is.
-#: git-send-email.perl:935
+#: git-send-email.perl:971
 #, perl-format
 msgid "Are you sure you want to use <%s> [y/N]? "
-msgstr "Tem a certeza que quer usar <%s> [y/N]? "
+msgstr "Tens a certeza que queres usar <%s> [y/N]? "
 
-#: git-send-email.perl:990
+#: git-send-email.perl:1026
 msgid ""
 "The following files are 8bit, but do not declare a Content-Transfer-"
 "Encoding.\n"
@@ -25930,11 +26448,11 @@ msgstr ""
 "Os seguintes ficheiros são 8bit, mas declaram Content-Transfer-Encoding "
 "nenhum.\n"
 
-#: git-send-email.perl:995
+#: git-send-email.perl:1031
 msgid "Which 8bit encoding should I declare [UTF-8]? "
-msgstr "Que codificação 8bit se deve declarar [UTF-8]? "
+msgstr "Que codificação 8bit queres que eu declare [UTF-8]? "
 
-#: git-send-email.perl:1003
+#: git-send-email.perl:1039
 #, perl-format
 msgid ""
 "Refusing to send because the patch\n"
@@ -25947,22 +26465,22 @@ msgstr ""
 "tem o assunto modelo '*** SUBJECT HERE ***'. Passe --force se pretende mesmo "
 "enviar.\n"
 
-#: git-send-email.perl:1022
+#: git-send-email.perl:1058
 msgid "To whom should the emails be sent (if anyone)?"
-msgstr "Para quem devem ser enviados os e-mails (se alguém)?"
+msgstr "Para quem devem ser enviados os emails (se alguém)?"
 
-#: git-send-email.perl:1040
+#: git-send-email.perl:1076
 #, perl-format
 msgid "fatal: alias '%s' expands to itself\n"
 msgstr "fatal: alias '%s' expande para si próprio\n"
 
-#: git-send-email.perl:1052
+#: git-send-email.perl:1088
 msgid "Message-ID to be used as In-Reply-To for the first email (if any)? "
 msgstr ""
 "Message-ID para ser usado como In-Reply-To para o primeiro e-mail (se "
 "algum)? "
 
-#: git-send-email.perl:1114 git-send-email.perl:1122
+#: git-send-email.perl:1150 git-send-email.perl:1158
 #, perl-format
 msgid "error: unable to extract a valid address from: %s\n"
 msgstr "erro: incapaz extrair endereço válido de: %s\n"
@@ -25970,16 +26488,16 @@ msgstr "erro: incapaz extrair endereço válido de: %s\n"
 #. TRANSLATORS: Make sure to include [q] [d] [e] in your
 #. translation. The program will only accept English input
 #. at this point.
-#: git-send-email.perl:1126
+#: git-send-email.perl:1162
 msgid "What to do with this address? ([q]uit|[d]rop|[e]dit): "
 msgstr "O que fazer com este endereço? ([q]uit|[d]rop|[e]dit): "
 
-#: git-send-email.perl:1446
+#: git-send-email.perl:1482
 #, perl-format
 msgid "CA path \"%s\" does not exist"
 msgstr "Path CA \"%s\" é inexistente"
 
-#: git-send-email.perl:1529
+#: git-send-email.perl:1565
 msgid ""
 "    The Cc list above has been expanded by additional\n"
 "    addresses found in the patch commit message. By default\n"
@@ -25993,140 +26511,141 @@ msgid ""
 "\n"
 msgstr ""
 "    A lista de Cc acima foi expandida com endereços\n"
-"    adicionais encontrados na mensagem de commit do patch.\n"
+"    adicionais encontrados na mensagem de memória do remendo.\n"
 "    Por omissão send-email pergunta antes de enviar quando\n"
 "    isto ocorre. Este comportamento é controlado pela definição\n"
-"    de configuração sendemail.confirm.\n"
+"    de configuração sendemail.confirm .\n"
 "\n"
-"    Para informação adicional, execute 'git send-email --help'.\n"
+"    Para informação adicional, executa 'git send-email --help'.\n"
 "    Para reter o comportamento atual, mas suprimir esta mensagem,\n"
-"    execute 'git config --global sendemail.confirm auto'.\n"
+"    executa 'git config --global sendemail.confirm auto'.\n"
 "\n"
 
 #. TRANSLATORS: Make sure to include [y] [n] [e] [q] [a] in your
 #. translation. The program will only accept English input
 #. at this point.
-#: git-send-email.perl:1544
+#: git-send-email.perl:1580
 msgid "Send this email? ([y]es|[n]o|[e]dit|[q]uit|[a]ll): "
 msgstr "Enviar este e-mail? ([y]es|[n]o|[q]uit|[a]ll): "
 
-#: git-send-email.perl:1547
+#: git-send-email.perl:1583
 msgid "Send this email reply required"
-msgstr "É necessária resposta se deseja enviar este e-mail"
+msgstr "É exigido enviar esta resposta a email"
 
-#: git-send-email.perl:1581
+#: git-send-email.perl:1617
 msgid "The required SMTP server is not properly defined."
 msgstr "O servidor SMTP necessário está definido incorretamente."
 
-#: git-send-email.perl:1628
+#: git-send-email.perl:1664
 #, perl-format
 msgid "Server does not support STARTTLS! %s"
 msgstr "O servidor insustenta STARTTLS! %s"
 
-#: git-send-email.perl:1633 git-send-email.perl:1637
+#: git-send-email.perl:1669 git-send-email.perl:1673
 #, perl-format
 msgid "STARTTLS failed! %s"
 msgstr "Falhou STARTTLS! %s"
 
-#: git-send-email.perl:1646
+#: git-send-email.perl:1682
 msgid "Unable to initialize SMTP properly. Check config and use --smtp-debug."
-msgstr "Incapaz inicializar SMTP devidamente. Verifica config e usa --smtp-debug."
+msgstr ""
+"Incapaz inicializar SMTP devidamente. Verifica config e usa --smtp-debug."
 
-#: git-send-email.perl:1664
+#: git-send-email.perl:1700
 #, perl-format
 msgid "Failed to send %s\n"
 msgstr "Falha ao enviar %s\n"
 
-#: git-send-email.perl:1667
+#: git-send-email.perl:1703
 #, perl-format
 msgid "Dry-Sent %s\n"
 msgstr "Simulado-Enviado %s\n"
 
-#: git-send-email.perl:1667
+#: git-send-email.perl:1703
 #, perl-format
 msgid "Sent %s\n"
 msgstr "Enviado %s\n"
 
-#: git-send-email.perl:1669
+#: git-send-email.perl:1705
 msgid "Dry-OK. Log says:\n"
 msgstr "Simulado-OK. O registo diz:\n"
 
-#: git-send-email.perl:1669
+#: git-send-email.perl:1705
 msgid "OK. Log says:\n"
 msgstr "OK. O registo diz:\n"
 
-#: git-send-email.perl:1688
+#: git-send-email.perl:1724
 msgid "Result: "
 msgstr "Resultado: "
 
-#: git-send-email.perl:1691
+#: git-send-email.perl:1727
 msgid "Result: OK\n"
 msgstr "Resultado: OK\n"
 
-#: git-send-email.perl:1709
+#: git-send-email.perl:1744
 #, perl-format
 msgid "can't open file %s"
 msgstr "incapaz abrir ficheiro %s"
 
-#: git-send-email.perl:1756 git-send-email.perl:1776
+#: git-send-email.perl:1792 git-send-email.perl:1812
 #, perl-format
 msgid "(mbox) Adding cc: %s from line '%s'\n"
 msgstr "(mbox) Adicionar cc: %s da linha '%s'\n"
 
-#: git-send-email.perl:1762
+#: git-send-email.perl:1798
 #, perl-format
 msgid "(mbox) Adding to: %s from line '%s'\n"
 msgstr "(mbox) Adicionar para: %s da linha '%s'\n"
 
-#: git-send-email.perl:1819
+#: git-send-email.perl:1855
 #, perl-format
 msgid "(non-mbox) Adding cc: %s from line '%s'\n"
 msgstr "(non-mbox) Adicionar cc: %s da linha '%s'\n"
 
-#: git-send-email.perl:1854
+#: git-send-email.perl:1890
 #, perl-format
 msgid "(body) Adding cc: %s from line '%s'\n"
 msgstr "(body) Adicionar cc: %s da linha '%s'\n"
 
-#: git-send-email.perl:1965
+#: git-send-email.perl:2009
 #, perl-format
 msgid "(%s) Could not execute '%s'"
 msgstr "(%s) Incapaz executar '%s'"
 
-#: git-send-email.perl:1972
+#: git-send-email.perl:2016
 #, perl-format
 msgid "(%s) Adding %s: %s from: '%s'\n"
 msgstr "(%s) Adicionar %s: %s de: '%s'\n"
 
-#: git-send-email.perl:1976
+#: git-send-email.perl:2020
 #, perl-format
 msgid "(%s) failed to close pipe to '%s'"
 msgstr "(%s) falha ao fechar pipe para '%s'"
 
-#: git-send-email.perl:2006
+#: git-send-email.perl:2050
 msgid "cannot send message as 7bit"
 msgstr "incapaz enviar mensagem como 7bit"
 
-#: git-send-email.perl:2014
+#: git-send-email.perl:2058
 msgid "invalid transfer encoding"
 msgstr "codificação de transferência inválida"
 
-#: git-send-email.perl:2051
-#, perl-format
+#: git-send-email.perl:2100
+#, fuzzy, perl-format
 msgid ""
-"fatal: %s: rejected by sendemail-validate hook\n"
+"fatal: %s: rejected by %s hook\n"
 "%s\n"
 "warning: no patches were sent\n"
 msgstr ""
-"fatal: %s: %s\n"
-"aviso: enviado patch nenhum\n"
+"fatal: %s:%d é mais longo que 998 caracteres\n"
+"aviso: enviado remendo nenhum\n"
 
-#: git-send-email.perl:2061 git-send-email.perl:2114 git-send-email.perl:2124
+#: git-send-email.perl:2110 git-send-email.perl:2163 git-send-email.perl:2173
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "incapaz abrir %s: %s\n"
 
-#: git-send-email.perl:2064
+#: git-send-email.perl:2113
 #, perl-format
 msgid ""
 "fatal: %s:%d is longer than 998 characters\n"
@@ -26135,13 +26654,13 @@ msgstr ""
 "fatal: %s:%d é mais longo que 998 caracteres\n"
 "aviso: enviado remendo nenhum\n"
 
-#: git-send-email.perl:2082
+#: git-send-email.perl:2131
 #, perl-format
 msgid "Skipping %s with backup suffix '%s'.\n"
-msgstr "Saltar %s com sufixo de backup '%s'.\n"
+msgstr "Saltando %s com sufixo de backup '%s'.\n"
 
 #. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:2086
+#: git-send-email.perl:2135
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
-msgstr "Deseja mesmo enviar %s? [y|N]: "
+msgstr "Queres mesmo enviar %s? [y|N]: "
index fd32edee892af43501d08fb7bd6cf4e61345c77e..14176ac6fb4b56719d1ad0f4fd46b4864d99c65a 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -5,10 +5,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: git 2.34.0\n"
+"Project-Id-Version: git 2.36.0\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2022-01-17 08:34+0800\n"
-"PO-Revision-Date: 2022-01-11 16:34+0100\n"
+"POT-Creation-Date: 2022-04-13 14:52+0800\n"
+"PO-Revision-Date: 2022-04-17 18:08+0100\n"
 "Last-Translator: Peter Krefting <peter@softwolves.pp.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
 "Language: sv\n"
@@ -16,215 +16,213 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Gtranslator 3.38.0\n"
 
-#: add-interactive.c:380
+#: add-interactive.c:382
 #, c-format
 msgid "Huh (%s)?"
 msgstr "Vadå (%s)?"
 
-#: add-interactive.c:533 add-interactive.c:834 reset.c:65 sequencer.c:3509
-#: sequencer.c:3974 sequencer.c:4136 builtin/rebase.c:1233
-#: builtin/rebase.c:1642
+#: add-interactive.c:535 add-interactive.c:836 reset.c:136 sequencer.c:3505
+#: sequencer.c:3970 sequencer.c:4127 builtin/rebase.c:1261
+#: builtin/rebase.c:1671
 msgid "could not read index"
 msgstr "kunde inte läsa indexet"
 
-#: add-interactive.c:588 git-add--interactive.perl:269
+#: add-interactive.c:590 git-add--interactive.perl:269
 #: git-add--interactive.perl:294
 msgid "binary"
 msgstr "binär"
 
-#: add-interactive.c:646 git-add--interactive.perl:278
+#: add-interactive.c:648 git-add--interactive.perl:278
 #: git-add--interactive.perl:332
 msgid "nothing"
 msgstr "ingenting"
 
-#: add-interactive.c:647 git-add--interactive.perl:314
+#: add-interactive.c:649 git-add--interactive.perl:314
 #: git-add--interactive.perl:329
 msgid "unchanged"
 msgstr "oändrad"
 
-#: add-interactive.c:684 git-add--interactive.perl:641
+#: add-interactive.c:686 git-add--interactive.perl:641
 msgid "Update"
 msgstr "Uppdatera"
 
-#: add-interactive.c:701 add-interactive.c:889
+#: add-interactive.c:703 add-interactive.c:891
 #, c-format
 msgid "could not stage '%s'"
 msgstr "kunde inte köa \"%s\""
 
-#: add-interactive.c:707 add-interactive.c:896 reset.c:89 sequencer.c:3713
+#: add-interactive.c:709 add-interactive.c:898 reset.c:160 sequencer.c:3709
 msgid "could not write index"
 msgstr "kunde inte skriva indexet"
 
-#: add-interactive.c:710 git-add--interactive.perl:626
+#: add-interactive.c:712 git-add--interactive.perl:626
 #, c-format, perl-format
 msgid "updated %d path\n"
 msgid_plural "updated %d paths\n"
 msgstr[0] "uppdaterade %d sökväg\n"
 msgstr[1] "uppdaterade %d sökvägar\n"
 
-#: add-interactive.c:728 git-add--interactive.perl:676
+#: add-interactive.c:730 git-add--interactive.perl:676
 #, c-format, perl-format
 msgid "note: %s is untracked now.\n"
 msgstr "observera: %s spåras inte längre.\n"
 
-#: add-interactive.c:733 apply.c:4151 builtin/checkout.c:306
+#: add-interactive.c:735 apply.c:4133 builtin/checkout.c:311
 #: builtin/reset.c:167
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "make_cache_entry misslyckades för sökvägen \"%s\""
 
-#: add-interactive.c:763 git-add--interactive.perl:653
+#: add-interactive.c:765 git-add--interactive.perl:653
 msgid "Revert"
 msgstr "Återställ"
 
-#: add-interactive.c:779
+#: add-interactive.c:781
 msgid "Could not parse HEAD^{tree}"
 msgstr "kunde inte tolka HEAD^{tree}"
 
-#: add-interactive.c:817 git-add--interactive.perl:629
+#: add-interactive.c:819 git-add--interactive.perl:629
 #, c-format, perl-format
 msgid "reverted %d path\n"
 msgid_plural "reverted %d paths\n"
 msgstr[0] "återställde %d sökväg\n"
 msgstr[1] "återställde %d sökvägar\n"
 
-#: add-interactive.c:868 git-add--interactive.perl:693
+#: add-interactive.c:870 git-add--interactive.perl:693
 #, c-format
 msgid "No untracked files.\n"
 msgstr "Inga ospårade filer.\n"
 
-#: add-interactive.c:872 git-add--interactive.perl:687
+#: add-interactive.c:874 git-add--interactive.perl:687
 msgid "Add untracked"
 msgstr "Lägg till ospårad"
 
-#: add-interactive.c:899 git-add--interactive.perl:623
+#: add-interactive.c:901 git-add--interactive.perl:623
 #, c-format, perl-format
 msgid "added %d path\n"
 msgid_plural "added %d paths\n"
 msgstr[0] "lade till %d sökväg\n"
 msgstr[1] "lade till %d sökvägar\n"
 
-#: add-interactive.c:929
+#: add-interactive.c:931
 #, c-format
 msgid "ignoring unmerged: %s"
 msgstr "ignorerar ej sammanslagen: %s"
 
-#: add-interactive.c:941 add-patch.c:1752 git-add--interactive.perl:1371
+#: add-interactive.c:943 add-patch.c:1758 git-add--interactive.perl:1371
 #, c-format
 msgid "Only binary files changed.\n"
 msgstr "Endast binära filer ändrade.\n"
 
-#: add-interactive.c:943 add-patch.c:1750 git-add--interactive.perl:1373
+#: add-interactive.c:945 add-patch.c:1756 git-add--interactive.perl:1373
 #, c-format
 msgid "No changes.\n"
 msgstr "Inga ändringar.\n"
 
-#: add-interactive.c:947 git-add--interactive.perl:1381
+#: add-interactive.c:949 git-add--interactive.perl:1381
 msgid "Patch update"
 msgstr "Uppdatera patch"
 
-#: add-interactive.c:986 git-add--interactive.perl:1794
+#: add-interactive.c:988 git-add--interactive.perl:1794
 msgid "Review diff"
 msgstr "Granska diff"
 
-#: add-interactive.c:1014
+#: add-interactive.c:1016
 msgid "show paths with changes"
 msgstr "visa sökvägar med ändringar"
 
-#: add-interactive.c:1016
+#: add-interactive.c:1018
 msgid "add working tree state to the staged set of changes"
 msgstr "lägg arbetskatalogens tillstånd till köade ändringar"
 
-#: add-interactive.c:1018
+#: add-interactive.c:1020
 msgid "revert staged set of changes back to the HEAD version"
 msgstr "återställ köade ändringar tillbaka till HEAD-versionen"
 
-#: add-interactive.c:1020
+#: add-interactive.c:1022
 msgid "pick hunks and update selectively"
 msgstr "välj stycken och uppdatera selektivt"
 
-#: add-interactive.c:1022
+#: add-interactive.c:1024
 msgid "view diff between HEAD and index"
 msgstr "visa skillnad mellan HEAD och index"
 
-#: add-interactive.c:1024
+#: add-interactive.c:1026
 msgid "add contents of untracked files to the staged set of changes"
 msgstr "lägg innehåll i ospårade filer till köade ändringar"
 
-#: add-interactive.c:1032 add-interactive.c:1081
+#: add-interactive.c:1034 add-interactive.c:1083
 msgid "Prompt help:"
 msgstr "Kommandoradshjälp:"
 
-#: add-interactive.c:1034
+#: add-interactive.c:1036
 msgid "select a single item"
 msgstr "markera en post"
 
-#: add-interactive.c:1036
+#: add-interactive.c:1038
 msgid "select a range of items"
 msgstr "markera intervall av poster"
 
-#: add-interactive.c:1038
+#: add-interactive.c:1040
 msgid "select multiple ranges"
 msgstr "markera flera intervall"
 
-#: add-interactive.c:1040 add-interactive.c:1085
+#: add-interactive.c:1042 add-interactive.c:1087
 msgid "select item based on unique prefix"
 msgstr "markera post baserad på unikt prefix"
 
-#: add-interactive.c:1042
+#: add-interactive.c:1044
 msgid "unselect specified items"
 msgstr "avmarkera angivna poster"
 
-#: add-interactive.c:1044
+#: add-interactive.c:1046
 msgid "choose all items"
 msgstr "välj alla poster"
 
-#: add-interactive.c:1046
+#: add-interactive.c:1048
 msgid "(empty) finish selecting"
 msgstr "(tomt) avsluta markering"
 
-#: add-interactive.c:1083
+#: add-interactive.c:1085
 msgid "select a numbered item"
 msgstr "markera en numrerad post"
 
-#: add-interactive.c:1087
+#: add-interactive.c:1089
 msgid "(empty) select nothing"
 msgstr "(tomt) markera ingenting"
 
-#: add-interactive.c:1095 builtin/clean.c:839 git-add--interactive.perl:1898
+#: add-interactive.c:1097 builtin/clean.c:839 git-add--interactive.perl:1898
 msgid "*** Commands ***"
 msgstr "*** Kommandon ***"
 
-#: add-interactive.c:1096 builtin/clean.c:840 git-add--interactive.perl:1895
+#: add-interactive.c:1098 builtin/clean.c:840 git-add--interactive.perl:1895
 msgid "What now"
 msgstr "Vad nu"
 
-#: add-interactive.c:1148 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "staged"
 msgstr "köad"
 
-#: add-interactive.c:1148 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "unstaged"
 msgstr "ej köad"
 
-#: add-interactive.c:1148 apply.c:5020 apply.c:5023 builtin/am.c:2367
-#: builtin/am.c:2370 builtin/bugreport.c:107 builtin/clone.c:128
-#: builtin/fetch.c:153 builtin/merge.c:287 builtin/pull.c:194
-#: builtin/submodule--helper.c:404 builtin/submodule--helper.c:1858
-#: builtin/submodule--helper.c:1861 builtin/submodule--helper.c:2504
-#: builtin/submodule--helper.c:2507 builtin/submodule--helper.c:2574
-#: builtin/submodule--helper.c:2579 builtin/submodule--helper.c:2812
+#: add-interactive.c:1150 apply.c:5002 apply.c:5005 builtin/am.c:2370
+#: builtin/am.c:2373 builtin/bugreport.c:107 builtin/clone.c:132
+#: builtin/fetch.c:154 builtin/merge.c:287 builtin/pull.c:194
+#: builtin/submodule--helper.c:412 builtin/submodule--helper.c:1872
+#: builtin/submodule--helper.c:1875 builtin/submodule--helper.c:2709
+#: builtin/submodule--helper.c:2712 builtin/submodule--helper.c:2891
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "sökväg"
 
-#: add-interactive.c:1155
+#: add-interactive.c:1157
 msgid "could not refresh index"
 msgstr "kunde inte uppdatera indexet"
 
-#: add-interactive.c:1169 builtin/clean.c:804 git-add--interactive.perl:1805
+#: add-interactive.c:1171 builtin/clean.c:804 git-add--interactive.perl:1805
 #, c-format
 msgid "Bye.\n"
 msgstr "Hej då.\n"
@@ -535,24 +533,24 @@ msgstr "kunde inte tolka styckehuvudet \"%.*s\""
 msgid "could not parse colored hunk header '%.*s'"
 msgstr "kunde inte tolka färgat styckehuvud \"%.*s\""
 
-#: add-patch.c:420
+#: add-patch.c:431
 msgid "could not parse diff"
 msgstr "kunde inte tolka diff"
 
-#: add-patch.c:439
+#: add-patch.c:450
 msgid "could not parse colored diff"
 msgstr "kunde inte tolka färgad diff"
 
-#: add-patch.c:453
+#: add-patch.c:464
 #, c-format
 msgid "failed to run '%s'"
 msgstr "misslyckades att köra \"%s\""
 
-#: add-patch.c:612
+#: add-patch.c:618
 msgid "mismatched output from interactive.diffFilter"
 msgstr "omaka utdata från interactive.diffFilter"
 
-#: add-patch.c:613
+#: add-patch.c:619
 msgid ""
 "Your filter must maintain a one-to-one correspondence\n"
 "between its input and output lines."
@@ -560,7 +558,7 @@ msgstr ""
 "Alla rader i indata måste ha en motsvarande rad i utdata från\n"
 "ditt filter."
 
-#: add-patch.c:791
+#: add-patch.c:797
 #, c-format
 msgid ""
 "expected context line #%d in\n"
@@ -569,7 +567,7 @@ msgstr ""
 "förväntade sammanhangsrad %d i\n"
 "%.*s"
 
-#: add-patch.c:806
+#: add-patch.c:812
 #, c-format
 msgid ""
 "hunks do not overlap:\n"
@@ -582,11 +580,11 @@ msgstr ""
 "\tavslutas inte med:\n"
 "%.*s"
 
-#: add-patch.c:1082 git-add--interactive.perl:1115
+#: add-patch.c:1088 git-add--interactive.perl:1115
 msgid "Manual hunk edit mode -- see bottom for a quick guide.\n"
 msgstr "Manuellt styckeredigeringsläge -- se nederst för snabbguide.\n"
 
-#: add-patch.c:1086
+#: add-patch.c:1092
 #, c-format
 msgid ""
 "---\n"
@@ -600,7 +598,7 @@ msgstr ""
 "Rader som börjar med %c kommer att tas bort.\n"
 
 #. TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
-#: add-patch.c:1100 git-add--interactive.perl:1129
+#: add-patch.c:1106 git-add--interactive.perl:1129
 msgid ""
 "If it does not apply cleanly, you will be given an opportunity to\n"
 "edit again.  If all lines of the hunk are removed, then the edit is\n"
@@ -610,11 +608,11 @@ msgstr ""
 "redigera den igen. Om alla rader i ett stycke tas bort avbryts\n"
 "redigeringen och stycket lämnas oförändrat.\n"
 
-#: add-patch.c:1133
+#: add-patch.c:1139
 msgid "could not parse hunk header"
 msgstr "kunde inte tolka styckehuvud"
 
-#: add-patch.c:1178
+#: add-patch.c:1184
 msgid "'git apply --cached' failed"
 msgstr "\"git apply --cached\" misslyckades"
 
@@ -630,26 +628,26 @@ msgstr "\"git apply --cached\" misslyckades"
 #. Consider translating (saying "no" discards!) as
 #. (saying "n" for "no" discards!) if the translation
 #. of the word "no" does not start with n.
-#: add-patch.c:1247 git-add--interactive.perl:1244
+#: add-patch.c:1253 git-add--interactive.perl:1244
 msgid ""
 "Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? "
 msgstr ""
 "Ditt redigerade stycke kan inte appliceras. Redigera igen (\"nej\" kastar!) "
 "[y/n]? "
 
-#: add-patch.c:1290
+#: add-patch.c:1296
 msgid "The selected hunks do not apply to the index!"
 msgstr "Markerade stycken kan inte appliceras på indexet!"
 
-#: add-patch.c:1291 git-add--interactive.perl:1348
+#: add-patch.c:1297 git-add--interactive.perl:1348
 msgid "Apply them to the worktree anyway? "
 msgstr "Applicera dem på arbetskatalogen trots det? "
 
-#: add-patch.c:1298 git-add--interactive.perl:1351
+#: add-patch.c:1304 git-add--interactive.perl:1351
 msgid "Nothing was applied.\n"
 msgstr "Ingenting applicerades.\n"
 
-#: add-patch.c:1355
+#: add-patch.c:1361
 msgid ""
 "j - leave this hunk undecided, see next undecided hunk\n"
 "J - leave this hunk undecided, see next hunk\n"
@@ -671,73 +669,73 @@ msgstr ""
 "e - redigera aktuellt stycke manuellt\n"
 "? - visa hjälp\n"
 
-#: add-patch.c:1517 add-patch.c:1527
+#: add-patch.c:1523 add-patch.c:1533
 msgid "No previous hunk"
 msgstr "Inget föregående stycke"
 
-#: add-patch.c:1522 add-patch.c:1532
+#: add-patch.c:1528 add-patch.c:1538
 msgid "No next hunk"
 msgstr "Inget följande stycke"
 
-#: add-patch.c:1538
+#: add-patch.c:1544
 msgid "No other hunks to goto"
 msgstr "Inga andra stycken att gå till"
 
-#: add-patch.c:1549 git-add--interactive.perl:1608
+#: add-patch.c:1555 git-add--interactive.perl:1608
 msgid "go to which hunk (<ret> to see more)? "
 msgstr "gå till vilket stycke (<ret> för att se fler)? "
 
-#: add-patch.c:1550 git-add--interactive.perl:1610
+#: add-patch.c:1556 git-add--interactive.perl:1610
 msgid "go to which hunk? "
 msgstr "gå till vilket stycke? "
 
-#: add-patch.c:1561
+#: add-patch.c:1567
 #, c-format
 msgid "Invalid number: '%s'"
 msgstr "Ogiltigt siffervärde: \"%s\""
 
-#: add-patch.c:1566
+#: add-patch.c:1572
 #, c-format
 msgid "Sorry, only %d hunk available."
 msgid_plural "Sorry, only %d hunks available."
 msgstr[0] "Beklagar, det finns bara %d stycke."
 msgstr[1] "Beklagar, det finns bara %d stycken."
 
-#: add-patch.c:1575
+#: add-patch.c:1581
 msgid "No other hunks to search"
 msgstr "Inga andra stycken att söka efter"
 
-#: add-patch.c:1581 git-add--interactive.perl:1663
+#: add-patch.c:1587 git-add--interactive.perl:1663
 msgid "search for regex? "
 msgstr "sök efter reguljärt uttryck? "
 
-#: add-patch.c:1596
+#: add-patch.c:1602
 #, c-format
 msgid "Malformed search regexp %s: %s"
 msgstr "Felaktigt format på reguljärt sökuttryck %s: %s"
 
-#: add-patch.c:1613
+#: add-patch.c:1619
 msgid "No hunk matches the given pattern"
 msgstr "Inga stycken motsvarar givet mönster"
 
-#: add-patch.c:1620
+#: add-patch.c:1626
 msgid "Sorry, cannot split this hunk"
 msgstr "Beklagar, kan inte dela stycket"
 
-#: add-patch.c:1624
+#: add-patch.c:1630
 #, c-format
 msgid "Split into %d hunks."
 msgstr "Dela i %d stycken."
 
-#: add-patch.c:1628
+#: add-patch.c:1634
 msgid "Sorry, cannot edit this hunk"
 msgstr "Beklagar, kan inte redigera stycket"
 
-#: add-patch.c:1680
+#: add-patch.c:1686
 msgid "'git apply' failed"
 msgstr "\"git apply\" misslyckades"
 
-#: advice.c:78
+#: advice.c:81
 #, c-format
 msgid ""
 "\n"
@@ -746,47 +744,47 @@ msgstr ""
 "\n"
 "Slå av meddelandet med \"git config advice.%s false\""
 
-#: advice.c:94
+#: advice.c:97
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%stips: %.*s%s\n"
 
-#: advice.c:178
+#: advice.c:181
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr ""
 "Du kan inte utföra en cherry-pick eftersom du har filer som inte slagits "
 "samman."
 
-#: advice.c:180
+#: advice.c:183
 msgid "Committing is not possible because you have unmerged files."
 msgstr ""
 "Du kan inte utföra en incheckning eftersom du har filer som inte slagits "
 "samman."
 
-#: advice.c:182
+#: advice.c:185
 msgid "Merging is not possible because you have unmerged files."
 msgstr ""
 "Du kan inte utföra en sammanslagning eftersom du har filer som inte slagits "
 "samman."
 
-#: advice.c:184
+#: advice.c:187
 msgid "Pulling is not possible because you have unmerged files."
 msgstr ""
 "Du kan inte utföra en \"pull\" eftersom du har filer som inte slagits samman."
 
-#: advice.c:186
+#: advice.c:189
 msgid "Reverting is not possible because you have unmerged files."
 msgstr ""
 "Du kan inte utföra en \"revert\" eftersom du har filer som inte slagits "
 "samman."
 
-#: advice.c:188
+#: advice.c:191
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr ""
 "Du kan inte utföra en \"%s\" eftersom du har filer som inte slagits samman."
 
-#: advice.c:196
+#: advice.c:199
 msgid ""
 "Fix them up in the work tree, and then use 'git add/rm <file>'\n"
 "as appropriate to mark resolution and make a commit."
@@ -794,27 +792,27 @@ msgstr ""
 "Rätta dem i din arbetskatalog och använd sedan \"git add/rm <fil>\"\n"
 "som lämpligt för att ange lösning och checka in."
 
-#: advice.c:204
+#: advice.c:207
 msgid "Exiting because of an unresolved conflict."
 msgstr "Avslutar på grund av olöst konflikgt."
 
-#: advice.c:209 builtin/merge.c:1382
+#: advice.c:212 builtin/merge.c:1388
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Du har inte avslutat sammanslagningen (MERGE_HEAD finns)."
 
-#: advice.c:211
+#: advice.c:214
 msgid "Please, commit your changes before merging."
 msgstr "Checka in dina ändringar innan du utför sammanslagningen."
 
-#: advice.c:212
+#: advice.c:215
 msgid "Exiting because of unfinished merge."
 msgstr "Avslutar på grund av ofullbordad sammanslagning."
 
-#: advice.c:217
+#: advice.c:220
 msgid "Not possible to fast-forward, aborting."
 msgstr "Kan inte snabbspola, avbryter."
 
-#: advice.c:227
+#: advice.c:230
 #, c-format
 msgid ""
 "The following paths and/or pathspecs matched paths that exist\n"
@@ -825,7 +823,7 @@ msgstr ""
 "utanför din \"sparse-checkout\"-definition, så de kommer inte\n"
 "uppdateras i indexet:\n"
 
-#: advice.c:234
+#: advice.c:237
 msgid ""
 "If you intend to update such entries, try one of the following:\n"
 "* Use the --sparse option.\n"
@@ -835,7 +833,7 @@ msgstr ""
 "* Använd flaggan --sparse.\n"
 "* Inaktivera eller ändra reglerna för gles utcheckning."
 
-#: advice.c:242
+#: advice.c:245
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -896,80 +894,83 @@ msgstr "okänt alternativ för whitespace: \"%s\""
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "okänt alternativ för ignore-whitespace: \"%s\""
 
-#: apply.c:136 archive.c:584 range-diff.c:559 revision.c:2303 revision.c:2307
-#: revision.c:2316 revision.c:2321 revision.c:2527 revision.c:2870
-#: revision.c:2874 revision.c:2880 revision.c:2883 revision.c:2885
-#: builtin/add.c:510 builtin/add.c:512 builtin/add.c:529 builtin/add.c:541
-#: builtin/branch.c:727 builtin/checkout.c:467 builtin/checkout.c:470
-#: builtin/checkout.c:1644 builtin/checkout.c:1754 builtin/checkout.c:1757
-#: builtin/clone.c:906 builtin/commit.c:358 builtin/commit.c:361
-#: builtin/commit.c:1196 builtin/describe.c:593 builtin/diff-tree.c:155
-#: builtin/difftool.c:733 builtin/fast-export.c:1245 builtin/fetch.c:2038
-#: builtin/fetch.c:2043 builtin/index-pack.c:1852 builtin/init-db.c:560
-#: builtin/log.c:1946 builtin/log.c:1948 builtin/ls-files.c:778
-#: builtin/merge.c:1403 builtin/merge.c:1405 builtin/pack-objects.c:4073
-#: builtin/push.c:592 builtin/push.c:630 builtin/push.c:636 builtin/push.c:641
-#: builtin/rebase.c:1193 builtin/rebase.c:1195 builtin/rebase.c:1199
-#: builtin/repack.c:684 builtin/repack.c:715 builtin/reset.c:426
-#: builtin/reset.c:462 builtin/rev-list.c:541 builtin/show-branch.c:710
-#: builtin/stash.c:1707 builtin/stash.c:1710 builtin/submodule--helper.c:1316
-#: builtin/submodule--helper.c:2975 builtin/tag.c:526 builtin/tag.c:572
-#: builtin/worktree.c:702
+#: apply.c:138 archive.c:584 parse-options.c:1122 range-diff.c:555
+#: revision.c:2314 revision.c:2318 revision.c:2327 revision.c:2332
+#: revision.c:2560 revision.c:2895 revision.c:2899 revision.c:2907
+#: revision.c:2910 revision.c:2912 builtin/add.c:507 builtin/add.c:509
+#: builtin/add.c:515 builtin/add.c:527 builtin/branch.c:755
+#: builtin/checkout.c:472 builtin/checkout.c:475 builtin/checkout.c:1663
+#: builtin/checkout.c:1773 builtin/checkout.c:1776 builtin/clone.c:921
+#: builtin/commit.c:359 builtin/commit.c:362 builtin/commit.c:1200
+#: builtin/commit.c:1256 builtin/commit.c:1273 builtin/describe.c:593
+#: builtin/diff-tree.c:155 builtin/difftool.c:733 builtin/fast-export.c:1245
+#: builtin/fetch.c:2141 builtin/fetch.c:2162 builtin/fetch.c:2167
+#: builtin/help.c:602 builtin/index-pack.c:1858 builtin/init-db.c:560
+#: builtin/log.c:1968 builtin/log.c:1970 builtin/ls-files.c:778
+#: builtin/merge-base.c:163 builtin/merge-base.c:169 builtin/merge.c:1409
+#: builtin/merge.c:1411 builtin/pack-objects.c:4098 builtin/push.c:592
+#: builtin/push.c:630 builtin/push.c:636 builtin/push.c:641
+#: builtin/rebase.c:1221 builtin/rebase.c:1223 builtin/rebase.c:1227
+#: builtin/repack.c:688 builtin/repack.c:719 builtin/reset.c:433
+#: builtin/reset.c:469 builtin/rev-list.c:537 builtin/show-branch.c:711
+#: builtin/stash.c:1696 builtin/stash.c:1699 builtin/submodule--helper.c:1328
+#: builtin/submodule--helper.c:3054 builtin/tag.c:527 builtin/tag.c:573
+#: builtin/worktree.c:779
 #, c-format
 msgid "options '%s' and '%s' cannot be used together"
 msgstr "flaggorna \"%s\" och \"%s\" kan inte användas samtidigt"
 
-#: apply.c:139 apply.c:150 apply.c:153
+#: apply.c:141 apply.c:152 apply.c:155
 #, c-format
 msgid "'%s' outside a repository"
 msgstr "\"%s\" utanför arkiv"
 
-#: apply.c:800
+#: apply.c:807
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr "Kan inte förbereda reguljärt uttryck för tidsstämpeln %s"
 
-#: apply.c:809
+#: apply.c:816
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr "regexec returnerade %d för indata: %s"
 
-#: apply.c:883
+#: apply.c:890
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr "kan inte hitta filnamn i patchen på rad %d"
 
-#: apply.c:921
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr "git apply: dålig git-diff - förväntade /dev/null, fick %s på rad %d"
 
-#: apply.c:927
+#: apply.c:934
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr "git apply: dålig git-diff - motsägande nytt filnamn på rad %d"
 
-#: apply.c:928
+#: apply.c:935
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr "git apply: dålig git-diff - motsägande gammalt filnamn på rad %d"
 
-#: apply.c:933
+#: apply.c:940
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr "git apply: dålig git-diff - förväntade /dev/null på rad %d"
 
-#: apply.c:962
+#: apply.c:969
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "ogiltigt läge på rad %d: %s"
 
-#: apply.c:1281
+#: apply.c:1288
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr "huvudet är inkonsekvent mellan rad %d och %d"
 
-#: apply.c:1371
+#: apply.c:1378
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -985,92 +986,92 @@ msgstr[1] ""
 "sökvägskomponenter\n"
 "tas bort (rad %d)"
 
-#: apply.c:1384
+#: apply.c:1391
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr "git-diff-huvudet saknar filnamnsinformation (rad %d)"
 
-#: apply.c:1480
+#: apply.c:1487
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr "recount: oväntad rad: %.*s"
 
-#: apply.c:1549
+#: apply.c:1556
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr "patch-fragment utan huvud på rad %d: %.*s"
 
-#: apply.c:1752
+#: apply.c:1759
 msgid "new file depends on old contents"
 msgstr "ny fil beror på gammalt innehåll"
 
-#: apply.c:1754
+#: apply.c:1761
 msgid "deleted file still has contents"
 msgstr "borttagen fil har fortfarande innehåll"
 
-#: apply.c:1788
+#: apply.c:1795
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "trasig patch på rad %d"
 
-#: apply.c:1825
+#: apply.c:1832
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "nya filen %s beror på gammalt innehåll"
 
-#: apply.c:1827
+#: apply.c:1834
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "borttagna filen %s har fortfarande innehåll"
 
-#: apply.c:1830
+#: apply.c:1837
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** varning: filen %s blir tom men har inte tagits bort"
 
-#: apply.c:1978
+#: apply.c:1985
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "trasig binärpatch på rad %d: %.*s"
 
-#: apply.c:2015
+#: apply.c:2022
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "binärpatchen på rad %d känns inte igen"
 
-#: apply.c:2177
+#: apply.c:2184
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "patch med bara skräp på rad %d"
 
-#: apply.c:2263
+#: apply.c:2270
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "kunde inte läsa symboliska länken %s"
 
-#: apply.c:2267
+#: apply.c:2274
 #, c-format
 msgid "unable to open or read %s"
 msgstr "kunde inte öppna eller läsa %s"
 
-#: apply.c:2936
+#: apply.c:2943
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "felaktig inledning på rad: \"%c\""
 
-#: apply.c:3057
+#: apply.c:3064
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "Stycke %d lyckades på %d (offset %d rad)."
 msgstr[1] "Stycke %d lyckades på %d (offset %d rader)."
 
-#: apply.c:3069
+#: apply.c:3076
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "Sammanhang reducerat till (%ld/%ld) för att tillämpa fragment vid %d"
 
-#: apply.c:3075
+#: apply.c:3082
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1079,25 +1080,25 @@ msgstr ""
 "vid sökning efter:\n"
 "%.*s"
 
-#: apply.c:3097
+#: apply.c:3104
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "saknar binära patchdata för \"%s\""
 
-#: apply.c:3105
+#: apply.c:3112
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr ""
 "kan inte applicera en binärpatch baklänges utan den omvända patchen för \"%s"
 "\""
 
-#: apply.c:3152
+#: apply.c:3159
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr ""
 "kan inte applicera binärpatch på \"%s\" utan den fullständiga indexraden"
 
-#: apply.c:3163
+#: apply.c:3170
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
@@ -1105,427 +1106,427 @@ msgstr ""
 "patchen appliceras på \"%s\" (%s), som inte motsvarar det nuvarande "
 "innehållet."
 
-#: apply.c:3171
+#: apply.c:3178
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "patchen appliceras på en tom \"%s\", men den är inte tom"
 
-#: apply.c:3189
+#: apply.c:3196
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "nödvändig efterbild %s för \"%s\" kan inte läsas"
 
-#: apply.c:3202
+#: apply.c:3209
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "binärpatchen kan inte tillämpas på \"%s\""
 
-#: apply.c:3209
+#: apply.c:3216
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr "binärpatchen på \"%s\" ger felaktigt resultat (förväntade %s, fick %s)"
 
-#: apply.c:3230
+#: apply.c:3237
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "patch misslyckades: %s:%ld"
 
-#: apply.c:3353
+#: apply.c:3360
 #, c-format
 msgid "cannot checkout %s"
 msgstr "kan inte checka ut %s"
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:104 pack-revindex.c:214
-#: setup.c:309
+#: apply.c:3412 apply.c:3423 apply.c:3469 midx.c:105 pack-revindex.c:214
+#: setup.c:310
 #, c-format
 msgid "failed to read %s"
 msgstr "misslyckades läsa %s"
 
-#: apply.c:3413
+#: apply.c:3420
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "läser från \"%s\" som är på andra sidan av en symbolisk länk"
 
-#: apply.c:3442 apply.c:3711
+#: apply.c:3449 apply.c:3721
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "sökvägen %s har ändrat namn/tagits bort"
 
-#: apply.c:3549 apply.c:3726
+#: apply.c:3559 apply.c:3736
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s: finns inte i indexet"
 
-#: apply.c:3558 apply.c:3734 apply.c:3978
+#: apply.c:3568 apply.c:3744 apply.c:3960
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s: motsvarar inte indexet"
 
-#: apply.c:3595
+#: apply.c:3605
 msgid "repository lacks the necessary blob to perform 3-way merge."
 msgstr "arkivet saknar objekt som behövs för att utföra 3-vägssammanslagning."
 
-#: apply.c:3598
+#: apply.c:3608
 #, c-format
 msgid "Performing three-way merge...\n"
 msgstr "Utför trevägssammanslagning...\n"
 
-#: apply.c:3614 apply.c:3618
+#: apply.c:3624 apply.c:3628
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "kunde inte läsa aktuellt innehåll i \"%s\""
 
-#: apply.c:3630
+#: apply.c:3640
 #, c-format
 msgid "Failed to perform three-way merge...\n"
 msgstr "Misslyckades utföra trevägssammanslagning...\n"
 
-#: apply.c:3644
+#: apply.c:3654
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Applicerade patchen på \"%s\" med konflikter.\n"
 
-#: apply.c:3649
+#: apply.c:3659
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Tillämpade patchen på  \"%s\" rent.\n"
 
-#: apply.c:3666
+#: apply.c:3676
 #, c-format
 msgid "Falling back to direct application...\n"
 msgstr "Faller tillbaka på direkt tillämpning...\n"
 
-#: apply.c:3678
+#: apply.c:3688
 msgid "removal patch leaves file contents"
 msgstr "patch för borttagning lämnar kvar filinnehåll"
 
-#: apply.c:3751
+#: apply.c:3761
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s: fel typ"
 
-#: apply.c:3753
+#: apply.c:3763
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s har typen %o, förväntade %o"
 
-#: apply.c:3918 apply.c:3920 read-cache.c:889 read-cache.c:918
-#: read-cache.c:1381
+#: apply.c:3900 apply.c:3902 read-cache.c:903 read-cache.c:932
+#: read-cache.c:1399
 #, c-format
 msgid "invalid path '%s'"
 msgstr "ogiltig sökväg \"%s\""
 
-#: apply.c:3976
+#: apply.c:3958
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s: finns redan i indexet"
 
-#: apply.c:3980
+#: apply.c:3962
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s: finns redan i arbetskatalogen"
 
-#: apply.c:4000
+#: apply.c:3982
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "nytt läge (%o) för %s motsvarar inte gammalt läge (%o)"
 
-#: apply.c:4005
+#: apply.c:3987
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "nytt läge (%o) för %s motsvarar inte gammalt läge (%o) för %s"
 
-#: apply.c:4025
+#: apply.c:4007
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "den berörda filen \"%s\" är på andra sidan av en symbolisk länk"
 
-#: apply.c:4029
+#: apply.c:4011
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s: patchen kan inte tillämpas"
 
-#: apply.c:4044
+#: apply.c:4026
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Kontrollerar patchen %s..."
 
-#: apply.c:4136
+#: apply.c:4118
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "sha1-informationen saknas eller är oanvändbar för undermodulen %s"
 
-#: apply.c:4143
+#: apply.c:4125
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "nytt läge för %s, som inte finns i nuvarande HEAD"
 
-#: apply.c:4146
+#: apply.c:4128
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "sha1-informationen saknas eller är oanvändbar (%s)."
 
-#: apply.c:4155
+#: apply.c:4137
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "kunde inte lägga till %s till temporärt index"
 
-#: apply.c:4165
+#: apply.c:4147
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "kunde inte skriva temporärt index till %s"
 
-#: apply.c:4303
+#: apply.c:4285
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "kan inte ta bort %s från indexet"
 
-#: apply.c:4337
+#: apply.c:4319
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "trasig patch för undermodulen %s"
 
-#: apply.c:4343
+#: apply.c:4325
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "kan inte ta status på nyligen skapade filen \"%s\""
 
-#: apply.c:4351
+#: apply.c:4333
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr "kan inte skapa säkerhetsminne för nyligen skapade filen %s"
 
-#: apply.c:4357 apply.c:4502
+#: apply.c:4339 apply.c:4484
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "kan inte lägga till cachepost för %s"
 
-#: apply.c:4400 builtin/bisect--helper.c:540 builtin/gc.c:2258
+#: apply.c:4382 builtin/bisect--helper.c:540 builtin/gc.c:2258
 #: builtin/gc.c:2293
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "misslyckades skriva till \"%s\""
 
-#: apply.c:4404
+#: apply.c:4386
 #, c-format
 msgid "closing file '%s'"
 msgstr "stänger filen \"%s\""
 
-#: apply.c:4474
+#: apply.c:4456
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "kan inte skriva filen \"%s\" läge %o"
 
-#: apply.c:4572
+#: apply.c:4554
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Tillämpade patchen %s rent."
 
-#: apply.c:4580
+#: apply.c:4562
 msgid "internal error"
 msgstr "internt fel"
 
-#: apply.c:4583
+#: apply.c:4565
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "Tillämpade patchen %%s med %d refuserad..."
 msgstr[1] "Tillämpade patchen %%s med %d refuserade..."
 
-#: apply.c:4594
+#: apply.c:4576
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "trunkerar .rej-filnamnet till %.*s.rej"
 
-#: apply.c:4602
+#: apply.c:4584
 #, c-format
 msgid "cannot open %s"
 msgstr "kan inte öppna %s"
 
-#: apply.c:4616
+#: apply.c:4598
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "Stycke %d tillämpades rent."
 
-#: apply.c:4620
+#: apply.c:4602
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "Refuserar stycke %d."
 
-#: apply.c:4749
+#: apply.c:4731
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Ignorerar patch \"%s\"."
 
-#: apply.c:4758
+#: apply.c:4740
 msgid "No valid patches in input (allow with \"--allow-empty\")"
 msgstr "Inga giltiga patchar i indata (tillåt med \"--allow-empty\")"
 
-#: apply.c:4779
+#: apply.c:4761
 msgid "unable to read index file"
 msgstr "kan inte läsa indexfilen"
 
-#: apply.c:4936
+#: apply.c:4918
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "kan inte öppna patchen \"%s\": %s"
 
-#: apply.c:4963
+#: apply.c:4945
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "undertryckte %d fel i blanksteg"
 msgstr[1] "undertryckte %d fel i blanksteg"
 
-#: apply.c:4969 apply.c:4984
+#: apply.c:4951 apply.c:4966
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d rad lägger till fel i blanksteg."
 msgstr[1] "%d rader lägger till fel i blanksteg."
 
-#: apply.c:4977
+#: apply.c:4959
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] "%d rad applicerade efter att ha rättat fel i blanksteg."
 msgstr[1] "%d rader applicerade efter att ha rättat fel i blanksteg."
 
-#: apply.c:4993 builtin/add.c:704 builtin/mv.c:338 builtin/rm.c:430
+#: apply.c:4975 builtin/add.c:690 builtin/mv.c:338 builtin/rm.c:430
 msgid "Unable to write new index file"
 msgstr "Kunde inte skriva ny indexfil"
 
-#: apply.c:5021
+#: apply.c:5003
 msgid "don't apply changes matching the given path"
 msgstr "tillämpa inte ändringar som motsvarar given sökväg"
 
-#: apply.c:5024
+#: apply.c:5006
 msgid "apply changes matching the given path"
 msgstr "tillämpa ändringar som motsvarar given sökväg"
 
-#: apply.c:5026 builtin/am.c:2376
+#: apply.c:5008 builtin/am.c:2379
 msgid "num"
 msgstr "antal"
 
-#: apply.c:5027
+#: apply.c:5009
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "ta bort <antal> inledande snedstreck från traditionella diff-sökvägar"
 
-#: apply.c:5030
+#: apply.c:5012
 msgid "ignore additions made by the patch"
 msgstr "ignorera tillägg gjorda av patchen"
 
-#: apply.c:5032
+#: apply.c:5014
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "istället för att tillämpa patchen, skriv ut diffstat för indata"
 
-#: apply.c:5036
+#: apply.c:5018
 msgid "show number of added and deleted lines in decimal notation"
 msgstr "visa antal tillagda och borttagna rader decimalt"
 
-#: apply.c:5038
+#: apply.c:5020
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "istället för att tillämpa patchen, skriv ut en summering av indata"
 
-#: apply.c:5040
+#: apply.c:5022
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "istället för att tillämpa patchen, se om patchen kan tillämpas"
 
-#: apply.c:5042
+#: apply.c:5024
 msgid "make sure the patch is applicable to the current index"
 msgstr "se till att patchen kan tillämpas på aktuellt index"
 
-#: apply.c:5044
+#: apply.c:5026
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "markera nya filer med \"git add --intent-to-add\""
 
-#: apply.c:5046
+#: apply.c:5028
 msgid "apply a patch without touching the working tree"
 msgstr "tillämpa en patch utan att röra arbetskatalogen"
 
-#: apply.c:5048
+#: apply.c:5030
 msgid "accept a patch that touches outside the working area"
 msgstr "godta en patch som rör filer utanför arbetskatalogen"
 
-#: apply.c:5051
+#: apply.c:5033
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "tillämpa också patchen (använd med --stat/--summary/--check)"
 
-#: apply.c:5053
+#: apply.c:5035
 msgid "attempt three-way merge, fall back on normal patch if that fails"
 msgstr ""
 "försök en trevägssammanslagning, fall tillbaka på normal patch om det "
 "misslyckas"
 
-#: apply.c:5055
+#: apply.c:5037
 msgid "build a temporary index based on embedded index information"
 msgstr "bygg ett temporärt index baserat på inbyggd indexinformation"
 
-#: apply.c:5058 builtin/checkout-index.c:196
+#: apply.c:5040 builtin/checkout-index.c:230
 msgid "paths are separated with NUL character"
 msgstr "sökvägar avdelas med NUL-tecken"
 
-#: apply.c:5060
+#: apply.c:5042
 msgid "ensure at least <n> lines of context match"
 msgstr "se till att åtminstone <n> rader sammanhang är lika"
 
-#: apply.c:5061 builtin/am.c:2352 builtin/am.c:2355
+#: apply.c:5043 builtin/am.c:2355 builtin/am.c:2358
 #: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
-#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3960
-#: builtin/rebase.c:1051
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3983
+#: builtin/rebase.c:1079
 msgid "action"
 msgstr "åtgärd"
 
-#: apply.c:5062
+#: apply.c:5044
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "detektera nya eller ändrade rader som har fel i blanktecken"
 
-#: apply.c:5065 apply.c:5068
+#: apply.c:5047 apply.c:5050
 msgid "ignore changes in whitespace when finding context"
 msgstr "ignorera ändringar i blanktecken för sammanhang"
 
-#: apply.c:5071
+#: apply.c:5053
 msgid "apply the patch in reverse"
 msgstr "tillämpa patchen baklänges"
 
-#: apply.c:5073
+#: apply.c:5055
 msgid "don't expect at least one line of context"
 msgstr "förvänta inte minst en rad sammanhang"
 
-#: apply.c:5075
+#: apply.c:5057
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "lämna refuserade stycken i motsvarande *.rej-filer"
 
-#: apply.c:5077
+#: apply.c:5059
 msgid "allow overlapping hunks"
 msgstr "tillåt överlappande stycken"
 
-#: apply.c:5080
+#: apply.c:5062
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "tolerera felaktigt detekterade saknade nyradstecken vid filslut"
 
-#: apply.c:5083
+#: apply.c:5065
 msgid "do not trust the line counts in the hunk headers"
 msgstr "lite inte på antalet linjer i styckehuvuden"
 
-#: apply.c:5085 builtin/am.c:2364
+#: apply.c:5067 builtin/am.c:2367
 msgid "root"
 msgstr "rot"
 
-#: apply.c:5086
+#: apply.c:5068
 msgid "prepend <root> to all filenames"
 msgstr "lägg till <rot> i alla filnamn"
 
-#: apply.c:5089
+#: apply.c:5071
 msgid "don't return error for empty patches"
 msgstr "ge inte någon felkod för tomma patchar"
 
-#: archive-tar.c:125 archive-zip.c:345
+#: archive-tar.c:125 archive-zip.c:346
 #, c-format
 msgid "cannot stream blob %s"
 msgstr "kan inte strömma blob:en %s"
 
-#: archive-tar.c:265 archive-zip.c:358
+#: archive-tar.c:265 archive-zip.c:359
 #, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
 msgstr "filens läge stöds ej: 0%o (SHA1: %s)"
@@ -1544,22 +1545,22 @@ msgstr "kan inte omdirigera handtag"
 msgid "'%s' filter reported error"
 msgstr "filtret \"%s\" rapporterade fel"
 
-#: archive-zip.c:318
+#: archive-zip.c:319
 #, c-format
 msgid "path is not valid UTF-8: %s"
 msgstr "sökvägen är inte giltig UTF-8: %s"
 
-#: archive-zip.c:322
+#: archive-zip.c:323
 #, c-format
 msgid "path too long (%d chars, SHA1: %s): %s"
 msgstr "sökvägen för lång (%d tecken, SHA1: %s): %s"
 
-#: archive-zip.c:469 builtin/pack-objects.c:365 builtin/pack-objects.c:368
+#: archive-zip.c:470 builtin/pack-objects.c:363 builtin/pack-objects.c:366
 #, c-format
 msgid "deflate error (%d)"
 msgstr "fel i deflate (%d)"
 
-#: archive-zip.c:603
+#: archive-zip.c:604
 #, c-format
 msgid "timestamp too large for this system: %<PRIuMAX>"
 msgstr "tidsstämpeln för stor för detta system: %<PRIuMAX>"
@@ -1568,10 +1569,6 @@ msgstr "tidsstämpeln för stor för detta system: %<PRIuMAX>"
 msgid "git archive [<options>] <tree-ish> [<path>...]"
 msgstr "git archive [<flaggor>] <träd-igt> [<sökväg>...]"
 
-#: archive.c:15
-msgid "git archive --list"
-msgstr "git archive --list"
-
 #: archive.c:16
 msgid ""
 "git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"
@@ -1584,12 +1581,12 @@ msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote <arkiv> [--exec <kmd>] --list"
 
 #: archive.c:188 archive.c:341 builtin/gc.c:497 builtin/notes.c:238
-#: builtin/tag.c:578
+#: builtin/tag.c:579
 #, c-format
 msgid "cannot read '%s'"
 msgstr "kunde inte läsa \"%s\""
 
-#: archive.c:426 builtin/add.c:215 builtin/add.c:671 builtin/rm.c:334
+#: archive.c:426 builtin/add.c:214 builtin/add.c:657 builtin/rm.c:334
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "sökvägsangivelsen \"%s\" motsvarade inte några filer"
@@ -1631,7 +1628,7 @@ msgstr "fmt"
 msgid "archive format"
 msgstr "arkivformat"
 
-#: archive.c:552 builtin/log.c:1790
+#: archive.c:552 builtin/log.c:1809
 msgid "prefix"
 msgstr "prefix"
 
@@ -1639,12 +1636,12 @@ msgstr "prefix"
 msgid "prepend prefix to each pathname in the archive"
 msgstr "lägg till prefix till varje sökväg i arkivet"
 
-#: archive.c:554 archive.c:557 builtin/blame.c:880 builtin/blame.c:884
-#: builtin/blame.c:885 builtin/commit-tree.c:115 builtin/config.c:135
+#: archive.c:554 archive.c:557 builtin/blame.c:881 builtin/blame.c:885
+#: builtin/blame.c:886 builtin/commit-tree.c:115 builtin/config.c:135
 #: builtin/fast-export.c:1181 builtin/fast-export.c:1183
-#: builtin/fast-export.c:1187 builtin/grep.c:935 builtin/hash-object.c:103
+#: builtin/fast-export.c:1187 builtin/grep.c:936 builtin/hash-object.c:104
 #: builtin/ls-files.c:654 builtin/ls-files.c:657 builtin/notes.c:410
-#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:190
+#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:195
 msgid "file"
 msgstr "fil"
 
@@ -1672,8 +1669,8 @@ msgstr "välj komprimeringsgrad"
 msgid "list supported archive formats"
 msgstr "visa understödda arkivformat"
 
-#: archive.c:568 builtin/archive.c:89 builtin/clone.c:118 builtin/clone.c:121
-#: builtin/submodule--helper.c:1870 builtin/submodule--helper.c:2513
+#: archive.c:568 builtin/archive.c:89 builtin/clone.c:122 builtin/clone.c:125
+#: builtin/submodule--helper.c:1884 builtin/submodule--helper.c:2718
 msgid "repo"
 msgstr "arkiv"
 
@@ -1694,11 +1691,12 @@ msgstr "sökväg till kommandot git-upload-archive på fjärren"
 msgid "Unexpected option --remote"
 msgstr "Oväntad flagga --remote"
 
-#: archive.c:580 fetch-pack.c:300 revision.c:2887 builtin/add.c:544
-#: builtin/add.c:576 builtin/checkout.c:1763 builtin/commit.c:370
-#: builtin/fast-export.c:1230 builtin/index-pack.c:1848 builtin/log.c:2115
-#: builtin/reset.c:435 builtin/reset.c:493 builtin/rm.c:281
-#: builtin/stash.c:1719 builtin/worktree.c:508 http-fetch.c:144
+#: archive.c:580 fetch-pack.c:300 revision.c:2914 builtin/add.c:530
+#: builtin/add.c:562 builtin/checkout.c:1782 builtin/clone.c:1099
+#: builtin/clone.c:1102 builtin/commit.c:371 builtin/fast-export.c:1230
+#: builtin/index-pack.c:1854 builtin/log.c:2140 builtin/reset.c:442
+#: builtin/reset.c:500 builtin/rm.c:281 builtin/stash.c:1708
+#: builtin/worktree.c:580 builtin/worktree.c:781 http-fetch.c:144
 #: http-fetch.c:153
 #, c-format
 msgid "the option '%s' requires '%s'"
@@ -1718,17 +1716,17 @@ msgstr "Okänt arkivformat \"%s\""
 msgid "Argument not supported for format '%s': -%d"
 msgstr "Argumentet stöd inte för formatet \"%s\": -%d"
 
-#: attr.c:203
+#: attr.c:202
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr "%-*s är inte ett giltigt namn på attribut"
 
-#: attr.c:364
+#: attr.c:363
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s inte tillåtet: %s:%d"
 
-#: attr.c:404
+#: attr.c:403
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1746,12 +1744,12 @@ msgstr "Felaktigt citerat innehåll i filen \"%s\": %s"
 msgid "We cannot bisect more!\n"
 msgstr "Det finns inte mer att göra \"bisect\" på!\n"
 
-#: bisect.c:764
+#: bisect.c:765
 #, c-format
 msgid "Not a valid commit name %s"
 msgstr "Namnet på incheckningen är inte giltigt: %s"
 
-#: bisect.c:789
+#: bisect.c:790
 #, c-format
 msgid ""
 "The merge base %s is bad.\n"
@@ -1760,7 +1758,7 @@ msgstr ""
 "Sammanslagningsbasen %s är trasig.\n"
 "Det betyder att felet har rättats mellan %s och [%s].\n"
 
-#: bisect.c:794
+#: bisect.c:795
 #, c-format
 msgid ""
 "The merge base %s is new.\n"
@@ -1769,7 +1767,7 @@ msgstr ""
 "Sammanslagningsbasen %s är ny.\n"
 "Egenskapen har ändrats mellan %s och [%s].\n"
 
-#: bisect.c:799
+#: bisect.c:800
 #, c-format
 msgid ""
 "The merge base %s is %s.\n"
@@ -1778,7 +1776,7 @@ msgstr ""
 "Sammanslagningsbasen %s är %s.\n"
 "Det betyder att den första \"%s\" incheckningen är mellan %s och [%s].\n"
 
-#: bisect.c:807
+#: bisect.c:808
 #, c-format
 msgid ""
 "Some %s revs are not ancestors of the %s rev.\n"
@@ -1789,7 +1787,7 @@ msgstr ""
 "git bisect kan inte fungera korrekt i detta fall.\n"
 "Kanske du skrev fel %s- och %s-revisioner?\n"
 
-#: bisect.c:820
+#: bisect.c:821
 #, c-format
 msgid ""
 "the merge base between %s and [%s] must be skipped.\n"
@@ -1801,36 +1799,36 @@ msgstr ""
 "%s.\n"
 "Vi fortsätter ändå."
 
-#: bisect.c:859
+#: bisect.c:860
 #, c-format
 msgid "Bisecting: a merge base must be tested\n"
 msgstr "Bisect: en sammanslagningsbas måste testas\n"
 
-#: bisect.c:909
+#: bisect.c:910
 #, c-format
 msgid "a %s revision is needed"
 msgstr "en %s-revision behövs"
 
-#: bisect.c:939
+#: bisect.c:940
 #, c-format
 msgid "could not create file '%s'"
 msgstr "kunde inte skapa filen \"%s\""
 
-#: bisect.c:985 builtin/merge.c:155
+#: bisect.c:986 builtin/merge.c:155
 #, c-format
 msgid "could not read file '%s'"
 msgstr "kunde inte läsa filen \"%s\""
 
-#: bisect.c:1025
+#: bisect.c:1026
 msgid "reading bisect refs failed"
 msgstr "misslyckades läsa bisect-referenser"
 
-#: bisect.c:1055
+#: bisect.c:1056
 #, c-format
 msgid "%s was both %s and %s\n"
 msgstr "%s var både %s och %s\n"
 
-#: bisect.c:1064
+#: bisect.c:1065
 #, c-format
 msgid ""
 "No testable commit found.\n"
@@ -1839,7 +1837,7 @@ msgstr ""
 "Ingen testbar incheckning hittades.\n"
 "Kanske du startade med felaktiga sökvägsargument?\n"
 
-#: bisect.c:1093
+#: bisect.c:1094
 #, c-format
 msgid "(roughly %d step)"
 msgid_plural "(roughly %d steps)"
@@ -1849,54 +1847,54 @@ msgstr[1] "(ungefär %d steg)"
 #. TRANSLATORS: the last %s will be replaced with "(roughly %d
 #. steps)" translation.
 #.
-#: bisect.c:1099
+#: bisect.c:1100
 #, c-format
 msgid "Bisecting: %d revision left to test after this %s\n"
 msgid_plural "Bisecting: %d revisions left to test after this %s\n"
 msgstr[0] "Bisect: %d revision kvar att testa efter denna %s\n"
 msgstr[1] "Bisect: %d revisioner kvar att testa efter denna %s\n"
 
-#: blame.c:2776
+#: blame.c:2773
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents och --reverse fungerar inte så bra tillsammans."
 
-#: blame.c:2790
+#: blame.c:2787
 msgid "cannot use --contents with final commit object name"
 msgstr "kan inte använda --contents med namn på slutgiltigt incheckningsobjekt"
 
-#: blame.c:2811
+#: blame.c:2808
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "--reverse och --first-parent tillsammans kräver att du anger senaste "
 "incheckningen"
 
-#: blame.c:2820 bundle.c:224 midx.c:1042 ref-filter.c:2370 remote.c:2158
-#: sequencer.c:2352 sequencer.c:4899 submodule.c:883 builtin/commit.c:1114
-#: builtin/log.c:429 builtin/log.c:1036 builtin/log.c:1644 builtin/log.c:2071
-#: builtin/log.c:2362 builtin/merge.c:431 builtin/pack-objects.c:3373
-#: builtin/pack-objects.c:3775 builtin/pack-objects.c:3790
+#: blame.c:2817 bundle.c:231 midx.c:1058 ref-filter.c:2371 remote.c:2157
+#: sequencer.c:2348 sequencer.c:4872 submodule.c:913 builtin/commit.c:1118
+#: builtin/log.c:437 builtin/log.c:1055 builtin/log.c:1663 builtin/log.c:2096
+#: builtin/log.c:2387 builtin/merge.c:431 builtin/pack-objects.c:3381
+#: builtin/pack-objects.c:3781 builtin/pack-objects.c:3796
 #: builtin/shortlog.c:255
 msgid "revision walk setup failed"
 msgstr "misslyckades skapa revisionstraversering"
 
-#: blame.c:2838
+#: blame.c:2835
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "--reverse --first-parent tillsammans kräver ett intervall på första-förälder-"
 "kedjan"
 
-#: blame.c:2849
+#: blame.c:2846
 #, c-format
 msgid "no such path %s in %s"
 msgstr "sökvägen %s i %s finns inte"
 
-#: blame.c:2860
+#: blame.c:2857
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "kan inte läsa objektet %s för sökvägen %s"
 
-#: branch.c:77
+#: branch.c:93
 msgid ""
 "cannot inherit upstream tracking configuration of multiple refs when "
 "rebasing is requested"
@@ -1904,31 +1902,31 @@ msgstr ""
 "kan inte ärva uppströmsspårningsinformation från flera referenser när "
 "ombasering är vald"
 
-#: branch.c:88
+#: branch.c:104
 #, c-format
 msgid "not setting branch '%s' as its own upstream"
 msgstr "ställer inte in grenen %s som sin egen uppströmsgren"
 
-#: branch.c:144
+#: branch.c:160
 #, c-format
 msgid "branch '%s' set up to track '%s' by rebasing."
 msgstr "grenen \"%s\" inställd på att spåra \"%s\" genom ombasering."
 
-#: branch.c:145
+#: branch.c:161
 #, c-format
 msgid "branch '%s' set up to track '%s'."
 msgstr "grenen \"%s\" inställd på att spåra \"%s\"."
 
-#: branch.c:148
+#: branch.c:164
 #, c-format
 msgid "branch '%s' set up to track:"
 msgstr "grenen \"%s\" inställd på att spåra:"
 
-#: branch.c:160
+#: branch.c:176
 msgid "unable to write upstream branch configuration"
 msgstr "kan inte skriva inställningar för uppströmsgren"
 
-#: branch.c:162
+#: branch.c:178
 msgid ""
 "\n"
 "After fixing the error cause you may try to fix up\n"
@@ -1938,51 +1936,89 @@ msgstr ""
 "När du har rättat felorsaken kan du försöka rätta\n"
 "fjärrspårningsinformationen genom att utföra:"
 
-#: branch.c:203
+#: branch.c:219
 #, c-format
 msgid "asked to inherit tracking from '%s', but no remote is set"
 msgstr "bad om att ärva spårning från \"%s\", men ingen fjärr är vald"
 
-#: branch.c:209
+#: branch.c:225
 #, c-format
 msgid "asked to inherit tracking from '%s', but no merge configuration is set"
 msgstr ""
 "bad om att ärva spårning från \"%s\", men ingen sammanslagningsinställning "
 "är vald"
 
-#: branch.c:252
+#: branch.c:277
+#, c-format
+msgid "not tracking: ambiguous information for ref '%s'"
+msgstr "spårar inte: tvetydig information för referensen \"%s\""
+
+#. TRANSLATORS: This is a line listing a remote with duplicate
+#. refspecs in the advice message below. For RTL languages you'll
+#. probably want to swap the "%s" and leading "  " space around.
+#.
+#. TRANSLATORS: This is line item of ambiguous object output
+#. from describe_ambiguous_object() above. For RTL languages
+#. you'll probably want to swap the "%s" and leading " " space
+#. around.
+#.
+#: branch.c:289 object-name.c:464
+#, c-format
+msgid "  %s\n"
+msgstr "  %s\n"
+
+#. TRANSLATORS: The second argument is a \n-delimited list of
+#. duplicate refspecs, composed above.
+#.
+#: branch.c:295
 #, c-format
-msgid "not tracking: ambiguous information for ref %s"
-msgstr "spårar inte: tvetydig information för referensen %s"
+msgid ""
+"There are multiple remotes whose fetch refspecs map to the remote\n"
+"tracking ref '%s':\n"
+"%s\n"
+"This is typically a configuration error.\n"
+"\n"
+"To support setting up tracking branches, ensure that\n"
+"different remotes' fetch refspecs map into different\n"
+"tracking namespaces."
+msgstr ""
+"Flera fjärrars hämtnings-referensspecifikationer motsvarar fjärr-\n"
+"spårningsreferensen \"%s\":\n"
+"%s\n"
+"Detta är vanligtvis ett fel i konfigurationen.\n"
+"\n"
+"För att möjliggöra konfiguration av spårande grenar, se till att\n"
+"olika fjärrars hämtnings-referensspecifikationer kopplas till\n"
+"olika spårningsnamnrymder."
 
-#: branch.c:287
+#: branch.c:344
 #, c-format
 msgid "'%s' is not a valid branch name"
 msgstr "\"%s\" är inte ett giltigt grennamn"
 
-#: branch.c:307
+#: branch.c:364
 #, c-format
 msgid "a branch named '%s' already exists"
 msgstr "det finns redan en gren som heter \"%s\""
 
-#: branch.c:313
+#: branch.c:370
 #, c-format
 msgid "cannot force update the branch '%s' checked out at '%s'"
 msgstr ""
 "kan inte tvinga uppdatering av grenen \"%s\" som är utcheckad på \"%s\""
 
-#: branch.c:336
+#: branch.c:393
 #, c-format
 msgid "cannot set up tracking information; starting point '%s' is not a branch"
 msgstr ""
 "kan inte ställa in spårningsinformation; startpunkten \"%s\" är inte en gren"
 
-#: branch.c:338
+#: branch.c:395
 #, c-format
 msgid "the requested upstream branch '%s' does not exist"
 msgstr "den efterfrågade uppströmsgrenen \"%s\" finns inte"
 
-#: branch.c:340
+#: branch.c:397
 msgid ""
 "\n"
 "If you are planning on basing your work on an upstream\n"
@@ -2002,126 +2038,145 @@ msgstr ""
 "spåra dess fjärrmotsvarighet kan du använda \"git push -u\"\n"
 "för att ställa in uppströmskonfigurationen när du sänder in."
 
-#: branch.c:384 builtin/replace.c:321 builtin/replace.c:377
+#: branch.c:445 builtin/replace.c:321 builtin/replace.c:377
 #: builtin/replace.c:423 builtin/replace.c:453
 #, c-format
 msgid "not a valid object name: '%s'"
 msgstr "objektnamnet är inte giltigt: \"%s\""
 
-#: branch.c:404
+#: branch.c:465
 #, c-format
 msgid "ambiguous object name: '%s'"
 msgstr "objektnamnet är tvetydigt: \"%s\""
 
-#: branch.c:409
+#: branch.c:470
 #, c-format
 msgid "not a valid branch point: '%s'"
 msgstr "avgreningspunkten är inte giltig: \"%s\""
 
-#: branch.c:469
+#: branch.c:658
+#, c-format
+msgid "submodule '%s': unable to find submodule"
+msgstr "undermodulen \"%s\": kan inte hitta undermodulen"
+
+#: branch.c:661
+#, c-format
+msgid ""
+"You may try updating the submodules using 'git checkout %s && git submodule "
+"update --init'"
+msgstr ""
+"Du kan försöka uppdatera undermodulerna med \"git checkout %s && git "
+"submodule update --init\""
+
+#: branch.c:672 branch.c:698
+#, c-format
+msgid "submodule '%s': cannot create branch '%s'"
+msgstr "undermodulen \"%s\": kan inte skapa grenen \"%s\""
+
+#: branch.c:730
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr "\"%s\" är redan utcheckad på \"%s\""
 
-#: branch.c:494
+#: branch.c:755
 #, c-format
 msgid "HEAD of working tree %s is not updated"
 msgstr "HEAD i arbetskatalogen %s har inte uppdaterats"
 
-#: bundle.c:44
+#: bundle.c:45
 #, c-format
 msgid "unrecognized bundle hash algorithm: %s"
 msgstr "okänd hashningsalgoritm för bunt: \"%s\""
 
-#: bundle.c:48
+#: bundle.c:53
 #, c-format
 msgid "unknown capability '%s'"
 msgstr "okänd kapabilitet \"%s\""
 
-#: bundle.c:74
+#: bundle.c:79
 #, c-format
 msgid "'%s' does not look like a v2 or v3 bundle file"
 msgstr "'%s' ser inte ut som en v2- eller v3-bunt-fil"
 
-#: bundle.c:113
+#: bundle.c:118
 #, c-format
 msgid "unrecognized header: %s%s (%d)"
 msgstr "okänt huvud: %s%s (%d)"
 
-#: bundle.c:140 rerere.c:464 rerere.c:674 sequencer.c:2620 sequencer.c:3406
-#: builtin/commit.c:862
+#: bundle.c:145 rerere.c:464 rerere.c:675 sequencer.c:2616 sequencer.c:3402
+#: builtin/commit.c:865
 #, c-format
 msgid "could not open '%s'"
 msgstr "kunde inte öppna \"%s\""
 
-#: bundle.c:198
+#: bundle.c:203
 msgid "Repository lacks these prerequisite commits:"
 msgstr "Arkivet saknar dessa nödvändiga incheckningar:"
 
-#: bundle.c:201
+#: bundle.c:206
 msgid "need a repository to verify a bundle"
 msgstr "behöver ett arkiv för att bekräfta en bunt."
 
-#: bundle.c:257
+#: bundle.c:264
 #, c-format
 msgid "The bundle contains this ref:"
-msgid_plural "The bundle contains these %d refs:"
+msgid_plural "The bundle contains these %<PRIuMAX> refs:"
 msgstr[0] "Bunten innehåller denna referens:"
-msgstr[1] "Bunten innehåller dessa %d referenser:"
+msgstr[1] "Bunten innehåller dessa %<PRIuMAX> referenser:"
 
-#: bundle.c:264
+#: bundle.c:272
 msgid "The bundle records a complete history."
 msgstr "Bunten beskriver en komplett historik."
 
-#: bundle.c:266
+#: bundle.c:274
 #, c-format
 msgid "The bundle requires this ref:"
-msgid_plural "The bundle requires these %d refs:"
+msgid_plural "The bundle requires these %<PRIuMAX> refs:"
 msgstr[0] "Bunten kräver denna referens:"
-msgstr[1] "Bunten kräver dessa %d referenser:"
+msgstr[1] "Bunten kräver dessa %<PRIuMAX> referenser:"
 
-#: bundle.c:333
+#: bundle.c:350
 msgid "unable to dup bundle descriptor"
 msgstr "kan inte duplicera bunthandtag"
 
-#: bundle.c:340
+#: bundle.c:357
 msgid "Could not spawn pack-objects"
 msgstr "Kunde inte starta pack-objects"
 
-#: bundle.c:351
+#: bundle.c:368
 msgid "pack-objects died"
 msgstr "pack-objects misslyckades"
 
-#: bundle.c:400
+#: bundle.c:417
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "referensen \"%s\" exkluderas av argumenten till rev-list"
 
-#: bundle.c:504
+#: bundle.c:533 builtin/log.c:211 builtin/log.c:1975 builtin/shortlog.c:400
+#, c-format
+msgid "unrecognized argument: %s"
+msgstr "okänt argument: %s"
+
+#: bundle.c:548
 #, c-format
 msgid "unsupported bundle version %d"
 msgstr "version %d för bunt stöds ej"
 
-#: bundle.c:506
+#: bundle.c:550
 #, c-format
 msgid "cannot write bundle version %d with algorithm %s"
 msgstr "kan inte skriva bunt med version %d med algoritmen %s"
 
-#: bundle.c:524 builtin/log.c:210 builtin/log.c:1953 builtin/shortlog.c:399
-#, c-format
-msgid "unrecognized argument: %s"
-msgstr "okänt argument: %s"
-
-#: bundle.c:553
+#: bundle.c:600
 msgid "Refusing to create empty bundle."
 msgstr "Vägrar skapa en tom bunt."
 
-#: bundle.c:563
+#: bundle.c:610
 #, c-format
 msgid "cannot create '%s'"
 msgstr "kan inte skapa \"%s\""
 
-#: bundle.c:588
+#: bundle.c:639
 msgid "index-pack died"
 msgstr "index-pack dog"
 
@@ -2149,7 +2204,7 @@ msgstr "avslutande stycke har id %<PRIx32> som inte är noll"
 msgid "invalid color value: %.*s"
 msgstr "felaktigt färgvärde: %.*s"
 
-#: commit-graph.c:204 midx.c:51
+#: commit-graph.c:204 midx.c:52
 msgid "invalid hash version"
 msgstr "felaktig hashnings-version"
 
@@ -2177,207 +2232,208 @@ msgstr "incheckningsgrafens hashversion %X stämmer inte med versionen %X"
 msgid "commit-graph file is too small to hold %u chunks"
 msgstr "incheckningsgraffilen är för liten för att innehålla %u stycken"
 
-#: commit-graph.c:482
+#: commit-graph.c:485
 msgid "commit-graph has no base graphs chunk"
 msgstr "incheckningsgrafen har inga bas-graf-stycken"
 
-#: commit-graph.c:492
+#: commit-graph.c:495
 msgid "commit-graph chain does not match"
 msgstr "incheckningsgrafens kedja stämmer inte"
 
-#: commit-graph.c:540
+#: commit-graph.c:543
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
 msgstr "ogiltig incheckingsgrafkedja: rad \"%s\" är inte ett hash-värde"
 
-#: commit-graph.c:564
+#: commit-graph.c:567
 msgid "unable to find all commit-graph files"
 msgstr "kan inte hitta alla incheckingsgraffiler"
 
-#: commit-graph.c:749 commit-graph.c:786
+#: commit-graph.c:752 commit-graph.c:789
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr "ogiltig incheckningsposition. incheckningsgrafen är troligtvis trasig"
 
-#: commit-graph.c:770
+#: commit-graph.c:773
 #, c-format
 msgid "could not find commit %s"
 msgstr "kunde inte hitta incheckningen %s"
 
-#: commit-graph.c:803
+#: commit-graph.c:806
 msgid "commit-graph requires overflow generation data but has none"
 msgstr "incheckningsgraf kräver spillgenerationsdata, men har ingen"
 
-#: commit-graph.c:1108 builtin/am.c:1369
+#: commit-graph.c:1111 builtin/am.c:1370 builtin/checkout.c:775
+#: builtin/clone.c:705
 #, c-format
 msgid "unable to parse commit %s"
 msgstr "kunde inte tolka incheckningen %s"
 
-#: commit-graph.c:1370 builtin/pack-objects.c:3070
+#: commit-graph.c:1373 builtin/pack-objects.c:3078
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "kunde inte hämta typ för objektet %s"
 
-#: commit-graph.c:1401
+#: commit-graph.c:1404
 msgid "Loading known commits in commit graph"
 msgstr "Läser in kända incheckningar i incheckningsgraf"
 
-#: commit-graph.c:1418
+#: commit-graph.c:1421
 msgid "Expanding reachable commits in commit graph"
 msgstr "Expanderar nåbara incheckningar i incheckningsgraf"
 
-#: commit-graph.c:1438
+#: commit-graph.c:1441
 msgid "Clearing commit marks in commit graph"
 msgstr "Rensar incheckningsmärken i incheckningsgraf"
 
-#: commit-graph.c:1457
+#: commit-graph.c:1460
 msgid "Computing commit graph topological levels"
 msgstr "Beräknar topografiska nivåer för incheckningsgraf"
 
-#: commit-graph.c:1510
+#: commit-graph.c:1513
 msgid "Computing commit graph generation numbers"
 msgstr "Beräknar generationsvärden för incheckningsgraf"
 
-#: commit-graph.c:1591
+#: commit-graph.c:1598
 msgid "Computing commit changed paths Bloom filters"
 msgstr "Beräknar Bloom-filter för sökvägar ändrade av incheckningen"
 
-#: commit-graph.c:1668
+#: commit-graph.c:1675
 msgid "Collecting referenced commits"
 msgstr "Samlar refererade incheckningar"
 
-#: commit-graph.c:1693
+#: commit-graph.c:1701
 #, c-format
-msgid "Finding commits for commit graph in %d pack"
-msgid_plural "Finding commits for commit graph in %d packs"
-msgstr[0] "Söker incheckningar för incheckingsgraf i %d paket"
-msgstr[1] "Söker incheckningar för incheckingsgraf i %d paket"
+msgid "Finding commits for commit graph in %<PRIuMAX> pack"
+msgid_plural "Finding commits for commit graph in %<PRIuMAX> packs"
+msgstr[0] "Söker incheckningar för incheckingsgraf i %<PRIuMAX> paket"
+msgstr[1] "Söker incheckningar för incheckingsgraf i %<PRIuMAX> paket"
 
-#: commit-graph.c:1706
+#: commit-graph.c:1714
 #, c-format
 msgid "error adding pack %s"
 msgstr "fel vid tillägg av paketet %s"
 
-#: commit-graph.c:1710
+#: commit-graph.c:1718
 #, c-format
 msgid "error opening index for %s"
 msgstr "fel vid öppning av indexet för %s"
 
-#: commit-graph.c:1747
+#: commit-graph.c:1756
 msgid "Finding commits for commit graph among packed objects"
 msgstr "Söker incheckningar för incheckingsgraf i packade objekt"
 
-#: commit-graph.c:1765
+#: commit-graph.c:1774
 msgid "Finding extra edges in commit graph"
 msgstr "Söker ytterligare kanter i incheckingsgraf"
 
-#: commit-graph.c:1814
+#: commit-graph.c:1823
 msgid "failed to write correct number of base graph ids"
 msgstr "kunde inte skriva korrekt antal bas-graf-id:n"
 
-#: commit-graph.c:1845 midx.c:1149
+#: commit-graph.c:1854 midx.c:1168 builtin/sparse-checkout.c:475
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "kunde inte skapa inledande kataloger för %s"
 
-#: commit-graph.c:1858
+#: commit-graph.c:1868
 msgid "unable to create temporary graph layer"
 msgstr "kan inte skapa temporärt graflager"
 
-#: commit-graph.c:1863
+#: commit-graph.c:1873
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr "kan inte justera delade behörigheter för \"%s\""
 
-#: commit-graph.c:1920
+#: commit-graph.c:1930
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "Skriver ut incheckningsgraf i %d pass"
 msgstr[1] "Skriver ut incheckningsgraf i %d pass"
 
-#: commit-graph.c:1956
+#: commit-graph.c:1967
 msgid "unable to open commit-graph chain file"
 msgstr "Kunde inte öppna incheckningsgrafkedjefilen"
 
-#: commit-graph.c:1972
+#: commit-graph.c:1983
 msgid "failed to rename base commit-graph file"
 msgstr "kunde inte byta namn på bas-incheckingsgraffilen"
 
-#: commit-graph.c:1992
+#: commit-graph.c:2004
 msgid "failed to rename temporary commit-graph file"
 msgstr "kunde inte byta namn på temporär incheckningsgraffil"
 
-#: commit-graph.c:2125
+#: commit-graph.c:2137
 msgid "Scanning merged commits"
 msgstr "Söker sammanslagna incheckningar"
 
-#: commit-graph.c:2169
+#: commit-graph.c:2181
 msgid "Merging commit-graph"
 msgstr "Slår ihop incheckningsgraf"
 
-#: commit-graph.c:2277
+#: commit-graph.c:2289
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr ""
 "försöker skriva en incheckningsgraf, men \"core.commitGraph\" är inaktiverad"
 
-#: commit-graph.c:2384
+#: commit-graph.c:2396
 msgid "too many commits to write graph"
 msgstr "för många incheckningar för att skriva graf"
 
-#: commit-graph.c:2482
+#: commit-graph.c:2494
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 "filen med incheckningsgraf har felaktig kontrollsumma och är troligtvis "
 "trasig"
 
-#: commit-graph.c:2492
+#: commit-graph.c:2504
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "incheckningsgrafen har felaktig OID-ordning: %s så %s"
 
-#: commit-graph.c:2502 commit-graph.c:2517
+#: commit-graph.c:2514 commit-graph.c:2529
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr ""
 "incheckningsgrafen har felaktig utbredningsvärde: fanout[%d] = %u != %u"
 
-#: commit-graph.c:2509
+#: commit-graph.c:2521
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "kunde inte tolka incheckning %s från incheckningsgraf"
 
-#: commit-graph.c:2527
+#: commit-graph.c:2539
 msgid "Verifying commits in commit graph"
 msgstr "Bekräftar incheckningar i incheckningsgrafen"
 
-#: commit-graph.c:2542
+#: commit-graph.c:2554
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "misslyckades tolka incheckning %s från objektdatabasen för incheckningsgraf"
 
-#: commit-graph.c:2549
+#: commit-graph.c:2561
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr "rot-trädets OID för incheckningen %s i incheckningsgrafen är %s != %s"
 
-#: commit-graph.c:2559
+#: commit-graph.c:2571
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr "incheckningsgrafens föräldralista för incheckningen %s är för lång"
 
-#: commit-graph.c:2568
+#: commit-graph.c:2580
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "incheckningsgrafens förälder för %s är %s != %s"
 
-#: commit-graph.c:2582
+#: commit-graph.c:2594
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr ""
 "incheckningsgrafens föräldralista för incheckningen %s avslutas för tidigt"
 
-#: commit-graph.c:2587
+#: commit-graph.c:2599
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
@@ -2385,7 +2441,7 @@ msgstr ""
 "incheckningsgrafen har generationsnummer noll för incheckningen %s, men icke-"
 "noll på annan plats"
 
-#: commit-graph.c:2591
+#: commit-graph.c:2603
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
@@ -2393,32 +2449,32 @@ msgstr ""
 "incheckningsgrafen har generationsnummer skilt från noll för incheckningen "
 "%s, men noll på annan plats"
 
-#: commit-graph.c:2608
+#: commit-graph.c:2620
 #, c-format
 msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
 msgstr ""
 "incheckningsgrafens generation för incheckningen %s är %<PRIuMAX> < "
 "%<PRIuMAX>"
 
-#: commit-graph.c:2614
+#: commit-graph.c:2626
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
 "incheckningsdatumet för incheckningen %s i incheckningsgrafen är %<PRIuMAX> !"
 "= %<PRIuMAX>"
 
-#: commit.c:53 sequencer.c:3109 builtin/am.c:399 builtin/am.c:444
-#: builtin/am.c:449 builtin/am.c:1448 builtin/am.c:2123 builtin/replace.c:456
+#: commit.c:54 sequencer.c:3105 builtin/am.c:400 builtin/am.c:445
+#: builtin/am.c:450 builtin/am.c:1449 builtin/am.c:2124 builtin/replace.c:456
 #, c-format
 msgid "could not parse %s"
 msgstr "kunde inte tolka %s"
 
-#: commit.c:55
+#: commit.c:56
 #, c-format
 msgid "%s %s is not a commit!"
 msgstr "%s %s är inte en incheckning!"
 
-#: commit.c:196
+#: commit.c:197
 msgid ""
 "Support for <GIT_DIR>/info/grafts is deprecated\n"
 "and will be removed in a future Git version.\n"
@@ -2438,29 +2494,29 @@ msgstr ""
 "Slå av detta meddelande genom att skriva\n"
 "\"git config advice.graftFileDeprecated false\""
 
-#: commit.c:1241
+#: commit.c:1252
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr ""
 "Incheckningen %s har en obetrodd GPG-signatur som påstås vara gjord av %s."
 
-#: commit.c:1245
+#: commit.c:1256
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr ""
 "Incheckningen %s har en felaktig GPG-signatur som påstås vara gjord av %s."
 
-#: commit.c:1248
+#: commit.c:1259
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "Incheckning %s har inte någon GPG-signatur."
 
-#: commit.c:1251
+#: commit.c:1262
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "Incheckningen %s har en korrekt GPG-signatur av %s\n"
 
-#: commit.c:1505
+#: commit.c:1516
 msgid ""
 "Warning: commit message did not conform to UTF-8.\n"
 "You may want to amend it after fixing the message, or set the config\n"
@@ -2474,7 +2530,15 @@ msgstr ""
 msgid "memory exhausted"
 msgstr "minnet slut"
 
-#: config.c:125
+#: compat/terminal.c:167
+msgid "cannot resume in the background, please use 'fg' to resume"
+msgstr "kan inte fortsätta i bakgrunden, använd \"fg\" för att återuppta"
+
+#: compat/terminal.c:168
+msgid "cannot restore terminal settings"
+msgstr "kan inte återställa terminalinställningar"
+
+#: config.c:143
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2489,341 +2553,368 @@ msgstr ""
 "\t%s\n"
 "Det kan bero på cirkulära inkluderingar."
 
-#: config.c:141
+#: config.c:159
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "kunde inte expandera inkluderingssökväg \"%s\""
 
-#: config.c:152
+#: config.c:170
 msgid "relative config includes must come from files"
 msgstr "relativa konfigureringsinkluderingar måste komma från filer"
 
-#: config.c:201
+#: config.c:219
 msgid "relative config include conditionals must come from files"
 msgstr "relativa konfigureringsinkluderingsvillkor måste komma från filer"
 
-#: config.c:398
+#: config.c:364
+msgid ""
+"remote URLs cannot be configured in file directly or indirectly included by "
+"includeIf.hasconfig:remote.*.url"
+msgstr ""
+"fjärr-URL:er kan inte konfigureras direkt eller indirekt i en fil inkluderad "
+"med includeIf.hasconfig:remote.*.url"
+
+#: config.c:508
 #, c-format
 msgid "invalid config format: %s"
 msgstr "felaktigt konfigurationsformat: %s"
 
-#: config.c:402
+#: config.c:512
 #, c-format
 msgid "missing environment variable name for configuration '%.*s'"
 msgstr "miljövariabelnamn saknas för konfigurationen \"%.*s\""
 
-#: config.c:407
+#: config.c:517
 #, c-format
 msgid "missing environment variable '%s' for configuration '%.*s'"
 msgstr "miljövariabeln \"%s\" saknas för konfigurationen \"%.*s\""
 
-#: config.c:443
+#: config.c:553
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "nyckeln innehåller inte ett stycke: %s"
 
-#: config.c:448
+#: config.c:558
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr "nyckeln innehåller inte variabelnamn: %s"
 
-#: config.c:470 sequencer.c:2806
+#: config.c:580 sequencer.c:2802
 #, c-format
 msgid "invalid key: %s"
 msgstr "felaktig nyckel: %s"
 
-#: config.c:475
+#: config.c:585
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "ogiltig nyckel (nyradstecken): %s"
 
-#: config.c:495
+#: config.c:605
 msgid "empty config key"
 msgstr "tom konfigurationsnyckel"
 
-#: config.c:513 config.c:525
+#: config.c:623 config.c:635
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "falsk konfigureringsparameter: %s"
 
-#: config.c:539 config.c:556 config.c:563 config.c:572
+#: config.c:649 config.c:666 config.c:673 config.c:682
 #, c-format
 msgid "bogus format in %s"
 msgstr "felaktigt format i %s"
 
-#: config.c:606
+#: config.c:716
 #, c-format
 msgid "bogus count in %s"
 msgstr "felaktigt antal i %s"
 
-#: config.c:610
+#: config.c:720
 #, c-format
 msgid "too many entries in %s"
 msgstr "för många poster i %s"
 
-#: config.c:620
+#: config.c:730
 #, c-format
 msgid "missing config key %s"
 msgstr "konfigurationsnyckel saknas för %s"
 
-#: config.c:628
+#: config.c:738
 #, c-format
 msgid "missing config value %s"
 msgstr "konfigurationsvärde saknas för %s"
 
-#: config.c:979
+#: config.c:1089
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "felaktig konfigurationsfil rad %d i blob:en %s"
 
-#: config.c:983
+#: config.c:1093
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "felaktig konfigurationsfil rad %d i filen %s"
 
-#: config.c:987
+#: config.c:1097
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "felaktig konfigurationsfil rad %d i standard in"
 
-#: config.c:991
+#: config.c:1101
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "felaktig konfigurationsfil rad %d i undermoduls-blob:en %s"
 
-#: config.c:995
+#: config.c:1105
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "felaktig konfigurationsfil rad %d i kommandoraden %s"
 
-#: config.c:999
+#: config.c:1109
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "felaktig konfigurationsfil rad %d i %s"
 
-#: config.c:1136
+#: config.c:1246
 msgid "out of range"
 msgstr "utanför intervallet"
 
-#: config.c:1136
+#: config.c:1246
 msgid "invalid unit"
 msgstr "ogiltig enhet"
 
-#: config.c:1137
+#: config.c:1247
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\": %s"
 
-#: config.c:1147
+#: config.c:1257
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr ""
 "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\" i blob:en %s: %s"
 
-#: config.c:1150
+#: config.c:1260
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr ""
 "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\" i filen %s: %s"
 
-#: config.c:1153
+#: config.c:1263
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr ""
 "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\" i standard in: %s"
 
-#: config.c:1156
+#: config.c:1266
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr ""
 "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\" i undermodul-blob:"
 "en %s: %s"
 
-#: config.c:1159
+#: config.c:1269
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr ""
 "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\" i kommandoraden "
 "%s: %s"
 
-#: config.c:1162
+#: config.c:1272
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr "felaktigt numeriskt konfigurationsvärde \"%s\" för \"%s\" i %s: %s"
 
-#: config.c:1241
+#: config.c:1368
+#, c-format
+msgid "invalid value for variable %s"
+msgstr "ogiltigt värde för variabeln %s"
+
+#: config.c:1389
+#, c-format
+msgid "ignoring unknown core.fsync component '%s'"
+msgstr "ignorerar okänd core.fsync-komponent \"%s\""
+
+#: config.c:1425
 #, c-format
 msgid "bad boolean config value '%s' for '%s'"
 msgstr "felaktigt booleskt konfigurationsvärde \"%s\" för \"%s\""
 
-#: config.c:1259
+#: config.c:1443
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "misslyckades expandera användarkatalog i: \"%s\""
 
-#: config.c:1268
+#: config.c:1452
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "\"%s\" för \"%s\" är inte en giltig tidsstämpel"
 
-#: config.c:1361
+#: config.c:1545
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "förkortningslängd utanför intervallet: %d"
 
-#: config.c:1375 config.c:1386
+#: config.c:1559 config.c:1570
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "felaktigt zlib-komprimeringsgrad %d"
 
-#: config.c:1476
+#: config.c:1660
 msgid "core.commentChar should only be one character"
 msgstr "core.commentChar kan bara vara ett tecken"
 
-#: config.c:1509
+#: config.c:1692
+#, c-format
+msgid "ignoring unknown core.fsyncMethod value '%s'"
+msgstr "ignorerar okänt core.fsyncMethod-värde \"%s\""
+
+#: config.c:1698
+msgid "core.fsyncObjectFiles is deprecated; use core.fsync instead"
+msgstr "core.fsyncObjectFiles avråds från; använd core.fsync istället"
+
+#: config.c:1714
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "felaktigt läge för skapande av objekt: %s"
 
-#: config.c:1584
+#: config.c:1800
 #, c-format
 msgid "malformed value for %s"
 msgstr "felformat värde för %s"
 
-#: config.c:1610
+#: config.c:1826
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "felformat värde för %s: %s"
 
-#: config.c:1611
+#: config.c:1827
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr "måste vara en av nothing, matching, simple, upstream eller current"
 
-#: config.c:1672 builtin/pack-objects.c:4053
+#: config.c:1888 builtin/pack-objects.c:4078
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "felaktig paketkomprimeringsgrad %d"
 
-#: config.c:1795
+#: config.c:2014
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "kunde inte läsa konfigurerings-blobobjektet \"%s\""
 
-#: config.c:1798
+#: config.c:2017
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "referensen \"%s\" pekar inte på en blob"
 
-#: config.c:1816
+#: config.c:2035
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "kan inte slå upp konfigurerings-bloben \"%s\""
 
-#: config.c:1861
+#: config.c:2080
 #, c-format
 msgid "failed to parse %s"
 msgstr "kunde inte tolka %s"
 
-#: config.c:1917
+#: config.c:2136
 msgid "unable to parse command-line config"
 msgstr "kan inte tolka kommandoradskonfiguration"
 
-#: config.c:2285
+#: config.c:2512
 msgid "unknown error occurred while reading the configuration files"
 msgstr "okänt fel uppstod vid läsning av konfigurationsfilerna"
 
-#: config.c:2459
+#: config.c:2686
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "Felaktigt %s: \"%s\""
 
-#: config.c:2504
+#: config.c:2731
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr ""
 "värdet \"%d\" för splitIndex.maxPercentChange borde vara mellan 0 och 100"
 
-#: config.c:2550
+#: config.c:2763
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "kunde inte tolka värdet \"%s\" från kommandoradskonfiguration"
 
-#: config.c:2552
+#: config.c:2765
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "felaktig konfigurationsvariabel \"%s\" i filen \"%s\" på rad %d"
 
-#: config.c:2637
+#: config.c:2850
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "felaktigt sektionsnamn \"%s\""
 
-#: config.c:2669
+#: config.c:2882
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s har flera värden"
 
-#: config.c:2698
+#: config.c:2911
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "kan inte skriva nya konfigurationsfilen \"%s\""
 
-#: config.c:2950 config.c:3277
+#: config.c:3177 config.c:3518
 #, c-format
 msgid "could not lock config file %s"
 msgstr "kunde inte låsa konfigurationsfilen %s"
 
-#: config.c:2961
+#: config.c:3188
 #, c-format
 msgid "opening %s"
 msgstr "öppnar %s"
 
-#: config.c:2998 builtin/config.c:361
+#: config.c:3225 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "ogiltigt mönster: %s"
 
-#: config.c:3023
+#: config.c:3250
 #, c-format
 msgid "invalid config file %s"
 msgstr "ogiltig konfigurationsfil: \"%s\""
 
-#: config.c:3036 config.c:3290
+#: config.c:3263 config.c:3531
 #, c-format
 msgid "fstat on %s failed"
 msgstr "fstat misslyckades på %s"
 
-#: config.c:3047
+#: config.c:3274
 #, c-format
 msgid "unable to mmap '%s'%s"
 msgstr "kunde inte utföra mmap på \"%s\"%s"
 
-#: config.c:3057 config.c:3295
+#: config.c:3284 config.c:3536
 #, c-format
 msgid "chmod on %s failed"
 msgstr "chmod misslyckades på %s"
 
-#: config.c:3142 config.c:3392
+#: config.c:3369 config.c:3633
 #, c-format
 msgid "could not write config file %s"
 msgstr "kunde inte skriva konfigurationsfilen %s"
 
-#: config.c:3176
+#: config.c:3403
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "kunde inte ställa in \"%s\" till \"%s\""
 
-#: config.c:3178 builtin/remote.c:662 builtin/remote.c:860 builtin/remote.c:868
+#: config.c:3405 builtin/remote.c:666 builtin/remote.c:885 builtin/remote.c:893
 #, c-format
 msgid "could not unset '%s'"
 msgstr "kunde inte ta bort inställning för \"%s\""
 
-#: config.c:3268
+#: config.c:3509
 #, c-format
 msgid "invalid section name: %s"
 msgstr "felaktigt namn på stycke: %s"
 
-#: config.c:3435
+#: config.c:3676
 #, c-format
 msgid "missing value for '%s'"
 msgstr "värde saknas för \"%s\""
@@ -3159,68 +3250,68 @@ msgstr "vägrar arbeta med inloggningsuppgifter utan värdfält"
 msgid "refusing to work with credential missing protocol field"
 msgstr "vägrar arbeta med inloggningsuppgifter utan protokollfält"
 
-#: credential.c:395
+#: credential.c:396
 #, c-format
 msgid "url contains a newline in its %s component: %s"
 msgstr "url innehåller radbrytning i komponenten %s: %s"
 
-#: credential.c:439
+#: credential.c:440
 #, c-format
 msgid "url has no scheme: %s"
 msgstr "url saknar protokoll: %s"
 
-#: credential.c:512
+#: credential.c:513
 #, c-format
 msgid "credential url cannot be parsed: %s"
 msgstr "kan inte tolka url för inloggingsuppgifter: %s"
 
-#: date.c:138
+#: date.c:139
 msgid "in the future"
 msgstr "i framtiden"
 
-#: date.c:144
+#: date.c:145
 #, c-format
 msgid "%<PRIuMAX> second ago"
 msgid_plural "%<PRIuMAX> seconds ago"
 msgstr[0] "%<PRIuMAX> sekund sedan"
 msgstr[1] "%<PRIuMAX> sekunder sedan"
 
-#: date.c:151
+#: date.c:152
 #, c-format
 msgid "%<PRIuMAX> minute ago"
 msgid_plural "%<PRIuMAX> minutes ago"
 msgstr[0] "%<PRIuMAX> minut sedan"
 msgstr[1] "%<PRIuMAX> minuter sedan"
 
-#: date.c:158
+#: date.c:159
 #, c-format
 msgid "%<PRIuMAX> hour ago"
 msgid_plural "%<PRIuMAX> hours ago"
 msgstr[0] "%<PRIuMAX> timme sedan"
 msgstr[1] "%<PRIuMAX> timmar sedan"
 
-#: date.c:165
+#: date.c:166
 #, c-format
 msgid "%<PRIuMAX> day ago"
 msgid_plural "%<PRIuMAX> days ago"
 msgstr[0] "%<PRIuMAX> dag sedan"
 msgstr[1] "%<PRIuMAX> dagar sedan"
 
-#: date.c:171
+#: date.c:172
 #, c-format
 msgid "%<PRIuMAX> week ago"
 msgid_plural "%<PRIuMAX> weeks ago"
 msgstr[0] "%<PRIuMAX> vecka sedan"
 msgstr[1] "%<PRIuMAX> veckor sedan"
 
-#: date.c:178
+#: date.c:179
 #, c-format
 msgid "%<PRIuMAX> month ago"
 msgid_plural "%<PRIuMAX> months ago"
 msgstr[0] "%<PRIuMAX> månad sedan"
 msgstr[1] "%<PRIuMAX> månader sedan"
 
-#: date.c:189
+#: date.c:190
 #, c-format
 msgid "%<PRIuMAX> year"
 msgid_plural "%<PRIuMAX> years"
@@ -3228,14 +3319,14 @@ msgstr[0] "%<PRIuMAX> år"
 msgstr[1] "%<PRIuMAX> år"
 
 #. TRANSLATORS: "%s" is "<n> years"
-#: date.c:192
+#: date.c:193
 #, c-format
 msgid "%s, %<PRIuMAX> month ago"
 msgid_plural "%s, %<PRIuMAX> months ago"
 msgstr[0] "%s, %<PRIuMAX> månad sedan"
 msgstr[1] "%s, %<PRIuMAX> månader sedan"
 
-#: date.c:197 date.c:202
+#: date.c:198 date.c:203
 #, c-format
 msgid "%<PRIuMAX> year ago"
 msgid_plural "%<PRIuMAX> years ago"
@@ -3266,10 +3357,14 @@ msgstr "ö-regex från konfiguration har för många fångstgrupper (max=%d)"
 msgid "Marked %d islands, done.\n"
 msgstr "Markerade %d öar, klar.\n"
 
-#: diff-merges.c:70
+#: diff-merges.c:81 gpg-interface.c:719 gpg-interface.c:734 ls-refs.c:37
+#: parallel-checkout.c:42 sequencer.c:2805 setup.c:563 builtin/am.c:203
+#: builtin/am.c:2243 builtin/am.c:2287 builtin/blame.c:724 builtin/blame.c:742
+#: builtin/fetch.c:792 builtin/pack-objects.c:3515 builtin/pull.c:45
+#: builtin/pull.c:47 builtin/pull.c:321
 #, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr "okänt värde för --diff-merges: %s"
+msgid "invalid value for '%s': '%s'"
+msgstr "felaktigt värde för \"%s\": \"%s\""
 
 #: diff-lib.c:561
 msgid "--merge-base does not work with ranges"
@@ -3303,17 +3398,17 @@ msgstr ""
 "Inte ett git-arkiv. Använd --no-index för att jämföra två sökvägar utanför "
 "en arbetskatalog."
 
-#: diff.c:158
+#: diff.c:159
 #, c-format
 msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
 msgstr "  Misslyckades tolka dirstat-avskärningsprocentandel \"%s\"\n"
 
-#: diff.c:163
+#: diff.c:164
 #, c-format
 msgid "  Unknown dirstat parameter '%s'\n"
 msgstr "  Okänd dirstat-parameter \"%s\"\n"
 
-#: diff.c:299
+#: diff.c:300
 msgid ""
 "color moved setting must be one of 'no', 'default', 'blocks', 'zebra', "
 "'dimmed-zebra', 'plain'"
@@ -3321,7 +3416,7 @@ msgstr ""
 "färginställningen för flyttade block måste vara en av \"no\", \"default\", "
 "\"blocks\", \"zebra\", \"dimmed-zebra\", \"plain\""
 
-#: diff.c:327
+#: diff.c:328
 #, c-format
 msgid ""
 "unknown color-moved-ws mode '%s', possible values are 'ignore-space-change', "
@@ -3331,7 +3426,7 @@ msgstr ""
 "\", \"ignore-space-at-eol\", \"ignore-all-space\", \"allow-indentation-change"
 "\""
 
-#: diff.c:335
+#: diff.c:336
 msgid ""
 "color-moved-ws: allow-indentation-change cannot be combined with other "
 "whitespace modes"
@@ -3339,12 +3434,12 @@ msgstr ""
 "color-moved-ws: allow-indentation-change kan inte kombineras med andra "
 "blankstegslägen"
 
-#: diff.c:412
+#: diff.c:413
 #, c-format
 msgid "Unknown value for 'diff.submodule' config variable: '%s'"
 msgstr "Okänt värde för konfigurationsvariabeln \"diff.submodule\": \"%s\""
 
-#: diff.c:472
+#: diff.c:473
 #, c-format
 msgid ""
 "Found errors in 'diff.dirstat' config variable:\n"
@@ -3353,30 +3448,30 @@ msgstr ""
 "Hittade fel i konfigurationsvariabeln \"diff.dirstat\":\n"
 "%s"
 
-#: diff.c:4237
+#: diff.c:4282
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "extern diff dog, stannar vid %s"
 
-#: diff.c:4589
+#: diff.c:4677 parse-options.c:1114
 #, c-format
 msgid "options '%s', '%s', '%s', and '%s' cannot be used together"
 msgstr ""
 "flaggorna \"%s\", \"%s\", \"%s\" och \"%s\" kan inte användas samtidigt"
 
-#: diff.c:4593 builtin/difftool.c:736 builtin/log.c:1982 builtin/worktree.c:506
+#: diff.c:4681 parse-options.c:1118 builtin/worktree.c:578
 #, c-format
 msgid "options '%s', '%s', and '%s' cannot be used together"
 msgstr "flaggorna \"%s\", \"%s\" och \"%s\" kan inte användas samtidigt"
 
-#: diff.c:4597
+#: diff.c:4685
 #, c-format
 msgid "options '%s' and '%s' cannot be used together, use '%s' with '%s'"
 msgstr ""
 "flaggorna \"%s\" och \"%s\" kan inte användas samtidigt, använd \"%s\" med "
 "\"%s\""
 
-#: diff.c:4601
+#: diff.c:4689
 #, c-format
 msgid ""
 "options '%s' and '%s' cannot be used together, use '%s' with '%s' and '%s'"
@@ -3384,22 +3479,22 @@ msgstr ""
 "flaggorna \"%s\" och  \"%s\" kan inte användas samtidigt, använd \"%s\" med "
 "\"%s\" och \"%s\""
 
-#: diff.c:4681
+#: diff.c:4769
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow kräver exakt en sökvägsangivelse"
 
-#: diff.c:4729
+#: diff.c:4823
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "ogiltigt värde för --stat: %s"
 
-#: diff.c:4734 diff.c:4739 diff.c:4744 diff.c:4749 diff.c:5277
+#: diff.c:4828 diff.c:4833 diff.c:4838 diff.c:4843 diff.c:5319
 #: parse-options.c:217 parse-options.c:221
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s förväntar ett numeriskt värde"
 
-#: diff.c:4766
+#: diff.c:4860
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3408,42 +3503,42 @@ msgstr ""
 "Misslyckades tolka argument till flaggan --dirstat/-X;\n"
 "%s"
 
-#: diff.c:4851
+#: diff.c:4893
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "okänd ändringsklass \"%c\" i --diff-filter=%s"
 
-#: diff.c:4875
+#: diff.c:4917
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "okänt värde efter ws-error-highlight=%.*s"
 
-#: diff.c:4889
+#: diff.c:4931
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "kunde inte slå upp \"%s\""
 
-#: diff.c:4939 diff.c:4945
+#: diff.c:4981 diff.c:4987
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s förväntar formen <n>/<m>"
 
-#: diff.c:4957
+#: diff.c:4999
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s förväntar ett tecken, fick \"%s\""
 
-#: diff.c:4978
+#: diff.c:5020
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "felaktigt argument till --color-moved: %s"
 
-#: diff.c:4997
+#: diff.c:5039
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "ogiltigt läge %s\" i --color-moved-ws"
 
-#: diff.c:5037
+#: diff.c:5079
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
@@ -3451,154 +3546,154 @@ msgstr ""
 "flaggan diff-algorithm godtar\"myers\", \"minimal\", \"patience\" och "
 "\"histogram\""
 
-#: diff.c:5073 diff.c:5093
+#: diff.c:5115 diff.c:5135
 #, c-format
 msgid "invalid argument to %s"
 msgstr "ogiltigt argument för %s"
 
-#: diff.c:5197
+#: diff.c:5239
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr "ogiltigt reguljärt uttryck angavs för -I: \"%s\""
 
-#: diff.c:5246
+#: diff.c:5288
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "misslyckades tolka argument till flaggan --submodule: \"%s\""
 
-#: diff.c:5302
+#: diff.c:5344
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "felaktigt argument --word-diff: %s"
 
-#: diff.c:5338
+#: diff.c:5380
 msgid "Diff output format options"
 msgstr "Formatflaggor för diff-utdata"
 
-#: diff.c:5340 diff.c:5346
+#: diff.c:5382 diff.c:5388
 msgid "generate patch"
 msgstr "skapar patch"
 
-#: diff.c:5343 builtin/log.c:179
+#: diff.c:5385 builtin/log.c:180
 msgid "suppress diff output"
 msgstr "undertryck diff-utdata"
 
-#: diff.c:5348 diff.c:5462 diff.c:5469
+#: diff.c:5390 diff.c:5504 diff.c:5511
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5349 diff.c:5352
+#: diff.c:5391 diff.c:5394
 msgid "generate diffs with <n> lines context"
 msgstr "skapa diffar med <n> rader sammanhang"
 
-#: diff.c:5354
+#: diff.c:5396
 msgid "generate the diff in raw format"
 msgstr "generera diff i råformat"
 
-#: diff.c:5357
+#: diff.c:5399
 msgid "synonym for '-p --raw'"
 msgstr "synonym till \"-p --raw\""
 
-#: diff.c:5361
+#: diff.c:5403
 msgid "synonym for '-p --stat'"
 msgstr "synonym till \"-p --stat\""
 
-#: diff.c:5365
+#: diff.c:5407
 msgid "machine friendly --stat"
 msgstr "maskinläsbar --stat"
 
-#: diff.c:5368
+#: diff.c:5410
 msgid "output only the last line of --stat"
 msgstr "skriv bara ut den sista raden för --stat"
 
-#: diff.c:5370 diff.c:5378
+#: diff.c:5412 diff.c:5420
 msgid "<param1,param2>..."
 msgstr "<param1,param2>..."
 
-#: diff.c:5371
+#: diff.c:5413
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
 "skriv ut distributionen av relativa mängder ändringar för varje underkatalog"
 
-#: diff.c:5375
+#: diff.c:5417
 msgid "synonym for --dirstat=cumulative"
 msgstr "synonym för --dirstat=cumulative"
 
-#: diff.c:5379
+#: diff.c:5421
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "synonym för --dirstat=filer,param1,param2..."
 
-#: diff.c:5383
+#: diff.c:5425
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr "varna om ändringar introducerar konfliktmarkörer eller blankstegsfel"
 
-#: diff.c:5386
+#: diff.c:5428
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr "kortfattad summering såsom skapade, namnbyten och ändrade lägen"
 
-#: diff.c:5389
+#: diff.c:5431
 msgid "show only names of changed files"
 msgstr "visa endast namnen på ändrade filer"
 
-#: diff.c:5392
+#: diff.c:5434
 msgid "show only names and status of changed files"
 msgstr "visa endast namn och status för ändrade filer"
 
-#: diff.c:5394
+#: diff.c:5436
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<bredd>[,<namn-bredd>[,<antal>]]"
 
-#: diff.c:5395
+#: diff.c:5437
 msgid "generate diffstat"
 msgstr "skapa diffstat"
 
-#: diff.c:5397 diff.c:5400 diff.c:5403
+#: diff.c:5439 diff.c:5442 diff.c:5445
 msgid "<width>"
 msgstr "<bredd>"
 
-#: diff.c:5398
+#: diff.c:5440
 msgid "generate diffstat with a given width"
 msgstr "generera en diffstat med given bredd"
 
-#: diff.c:5401
+#: diff.c:5443
 msgid "generate diffstat with a given name width"
 msgstr "generera en diffstat med given namnbredd"
 
-#: diff.c:5404
+#: diff.c:5446
 msgid "generate diffstat with a given graph width"
 msgstr "generera en diffstat med given grafbredd"
 
-#: diff.c:5406
+#: diff.c:5448
 msgid "<count>"
 msgstr "<antal>"
 
-#: diff.c:5407
+#: diff.c:5449
 msgid "generate diffstat with limited lines"
 msgstr "generera diffstat med begränsade rader"
 
-#: diff.c:5410
+#: diff.c:5452
 msgid "generate compact summary in diffstat"
 msgstr "skapa kompakt översikt i diffstat"
 
-#: diff.c:5413
+#: diff.c:5455
 msgid "output a binary diff that can be applied"
 msgstr "skapa en binärdiff som kan appliceras"
 
-#: diff.c:5416
+#: diff.c:5458
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr ""
 "visa fullständiga objektnamn i \"index\"-rader för läget både före och efter"
 
-#: diff.c:5418
+#: diff.c:5460
 msgid "show colored diff"
 msgstr "visa färgad diff"
 
-#: diff.c:5419
+#: diff.c:5461
 msgid "<kind>"
 msgstr "<typ>"
 
-#: diff.c:5420
+#: diff.c:5462
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
@@ -3606,7 +3701,7 @@ msgstr ""
 "ljusmarkera blankstegsfel i \"context\" (sammanhang), \"old\" (gamla) eller "
 "\"new\" (nya) rader i diffen"
 
-#: diff.c:5423
+#: diff.c:5465
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -3614,87 +3709,87 @@ msgstr ""
 "skriv inte om sökvägsnamn och använd NUL-tecken som fältseparerare i --raw "
 "eller --numstat"
 
-#: diff.c:5426 diff.c:5429 diff.c:5432 diff.c:5541
+#: diff.c:5468 diff.c:5471 diff.c:5474 diff.c:5583
 msgid "<prefix>"
 msgstr "<prefix>"
 
-#: diff.c:5427
+#: diff.c:5469
 msgid "show the given source prefix instead of \"a/\""
 msgstr "visa givet källprefix istället för \"a/\""
 
-#: diff.c:5430
+#: diff.c:5472
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "visa givet målprefix istället för \"b/\""
 
-#: diff.c:5433
+#: diff.c:5475
 msgid "prepend an additional prefix to every line of output"
 msgstr "lägg till ytterligare prefix på alla rader i utdata"
 
-#: diff.c:5436
+#: diff.c:5478
 msgid "do not show any source or destination prefix"
 msgstr "visa inte käll- eller målprefix"
 
-#: diff.c:5439
+#: diff.c:5481
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr "visa sammnhang mellan diff-stycken upp till angivet antal rader"
 
-#: diff.c:5443 diff.c:5448 diff.c:5453
+#: diff.c:5485 diff.c:5490 diff.c:5495
 msgid "<char>"
 msgstr "<tecken>"
 
-#: diff.c:5444
+#: diff.c:5486
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "ange tecken för att ange ny rad istället för \"+\""
 
-#: diff.c:5449
+#: diff.c:5491
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "ange tecken för att ange gammal rad istället för \"-\""
 
-#: diff.c:5454
+#: diff.c:5496
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "ange tecken för att ange sammanhang istället för \" \""
 
-#: diff.c:5457
+#: diff.c:5499
 msgid "Diff rename options"
 msgstr "Diff-namnbytesflaggor"
 
-#: diff.c:5458
+#: diff.c:5500
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5459
+#: diff.c:5501
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr "dela upp kompletta omskrivningar till ta bort och skapa-par"
 
-#: diff.c:5463
+#: diff.c:5505
 msgid "detect renames"
 msgstr "detektera namnändringar"
 
-#: diff.c:5467
+#: diff.c:5509
 msgid "omit the preimage for deletes"
 msgstr "ta bort för-version för borttagningar"
 
-#: diff.c:5470
+#: diff.c:5512
 msgid "detect copies"
 msgstr "detektera kopior"
 
-#: diff.c:5474
+#: diff.c:5516
 msgid "use unmodified files as source to find copies"
 msgstr "använd oförändrade som källa för att hitta kopior"
 
-#: diff.c:5476
+#: diff.c:5518
 msgid "disable rename detection"
 msgstr "inaktivera detektering av namnbyten"
 
-#: diff.c:5479
+#: diff.c:5521
 msgid "use empty blobs as rename source"
 msgstr "använd tomma blob:ar som namnändringskälla"
 
-#: diff.c:5481
+#: diff.c:5523
 msgid "continue listing the history of a file beyond renames"
 msgstr "fortsätt lista historiken för en fil bortom namnändringar"
 
-#: diff.c:5484
+#: diff.c:5526
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
@@ -3702,163 +3797,163 @@ msgstr ""
 "förhindra namnbyte/kopie-detektering om antalet namnbyten/kopior överskriver "
 "given gräns"
 
-#: diff.c:5486
+#: diff.c:5528
 msgid "Diff algorithm options"
 msgstr "Alternativ för diff-algoritm"
 
-#: diff.c:5488
+#: diff.c:5530
 msgid "produce the smallest possible diff"
 msgstr "skapa minsta möjliga diff"
 
-#: diff.c:5491
+#: diff.c:5533
 msgid "ignore whitespace when comparing lines"
 msgstr "ignorera blanktecken vid radjämförelse"
 
-#: diff.c:5494
+#: diff.c:5536
 msgid "ignore changes in amount of whitespace"
 msgstr "ignorera ändringar i antal blanktecken vid radjämförelse"
 
-#: diff.c:5497
+#: diff.c:5539
 msgid "ignore changes in whitespace at EOL"
 msgstr "ignorera blanktecken vid radslut"
 
-#: diff.c:5500
+#: diff.c:5542
 msgid "ignore carrier-return at the end of line"
 msgstr "ignorera CR-tecken vid radslut"
 
-#: diff.c:5503
+#: diff.c:5545
 msgid "ignore changes whose lines are all blank"
 msgstr "ignorera ändringar i rader som är helt blanka"
 
-#: diff.c:5505 diff.c:5527 diff.c:5530 diff.c:5575
+#: diff.c:5547 diff.c:5569 diff.c:5572 diff.c:5617
 msgid "<regex>"
 msgstr "<reguttr>"
 
-#: diff.c:5506
+#: diff.c:5548
 msgid "ignore changes whose all lines match <regex>"
 msgstr "ignorera ändringar där samtliga rader motsvarar <reguttr>"
 
-#: diff.c:5509
+#: diff.c:5551
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr "heuristik för att flytta diff-gränser för lättare läsning"
 
-#: diff.c:5512
+#: diff.c:5554
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "skapa diffar med algoritmen \"patience diff\""
 
-#: diff.c:5516
+#: diff.c:5558
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "skapa diffar med algoritmen \"histogram diff\""
 
-#: diff.c:5518
+#: diff.c:5560
 msgid "<algorithm>"
 msgstr "<algoritm>"
 
-#: diff.c:5519
+#: diff.c:5561
 msgid "choose a diff algorithm"
 msgstr "välj en diff-algoritm"
 
-#: diff.c:5521
+#: diff.c:5563
 msgid "<text>"
 msgstr "<text>"
 
-#: diff.c:5522
+#: diff.c:5564
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "skapa diffar med algoritmen \"anchored diff\""
 
-#: diff.c:5524 diff.c:5533 diff.c:5536
+#: diff.c:5566 diff.c:5575 diff.c:5578
 msgid "<mode>"
 msgstr "<läge>"
 
-#: diff.c:5525
+#: diff.c:5567
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr "visa orddiff, där <läge> avgränsar ändrade ord"
 
-#: diff.c:5528
+#: diff.c:5570
 msgid "use <regex> to decide what a word is"
 msgstr "använd <reguttr> för att bestämma vad som är ett ord"
 
-#: diff.c:5531
+#: diff.c:5573
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "motsvarar --word-diff=color --word-diff-regex=<reguttr>"
 
-#: diff.c:5534
+#: diff.c:5576
 msgid "moved lines of code are colored differently"
 msgstr "flyttade kodrader färgas på annat sätt"
 
-#: diff.c:5537
+#: diff.c:5579
 msgid "how white spaces are ignored in --color-moved"
 msgstr "hur blanktecken ignoreras i --color-moved"
 
-#: diff.c:5540
+#: diff.c:5582
 msgid "Other diff options"
 msgstr "Andra diff-flaggor"
 
-#: diff.c:5542
+#: diff.c:5584
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "vid start från underkatalog, uteslut ändringar utanför och visa relativa "
 "sökvägar"
 
-#: diff.c:5546
+#: diff.c:5588
 msgid "treat all files as text"
 msgstr "hantera alla filer som text"
 
-#: diff.c:5548
+#: diff.c:5590
 msgid "swap two inputs, reverse the diff"
 msgstr "växla två indatafiler, vänd diffen"
 
-#: diff.c:5550
+#: diff.c:5592
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "avsluta med 1 vid ändringar, annars 0"
 
-#: diff.c:5552
+#: diff.c:5594
 msgid "disable all output of the program"
 msgstr "slå av alla utdata från programmet"
 
-#: diff.c:5554
+#: diff.c:5596
 msgid "allow an external diff helper to be executed"
 msgstr "tillåt köra en extern diff-hjälpare"
 
-#: diff.c:5556
+#: diff.c:5598
 msgid "run external text conversion filters when comparing binary files"
 msgstr "kör externt textkonverteringsfiler när binärfiler jämförs"
 
-#: diff.c:5558
+#: diff.c:5600
 msgid "<when>"
 msgstr "<när>"
 
-#: diff.c:5559
+#: diff.c:5601
 msgid "ignore changes to submodules in the diff generation"
 msgstr "ignorera ändringar i undermoduler när diffen skapas"
 
-#: diff.c:5562
+#: diff.c:5604
 msgid "<format>"
 msgstr "<format>"
 
-#: diff.c:5563
+#: diff.c:5605
 msgid "specify how differences in submodules are shown"
 msgstr "ange hur ändringar i undermoduler visas"
 
-#: diff.c:5567
+#: diff.c:5609
 msgid "hide 'git add -N' entries from the index"
 msgstr "dölj \"git add -N\"-poster från indexet"
 
-#: diff.c:5570
+#: diff.c:5612
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "tolka \"git add -N\"-poster som äkta i indexet"
 
-#: diff.c:5572
+#: diff.c:5614
 msgid "<string>"
 msgstr "<sträng>"
 
-#: diff.c:5573
+#: diff.c:5615
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
 msgstr "se efter ändringar som ändrar antalet förekomster av angiven sträng"
 
-#: diff.c:5576
+#: diff.c:5618
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
@@ -3866,66 +3961,66 @@ msgstr ""
 "se efter ändringar som ändrar antalet förekomster av angivet reguljärt "
 "uttryck"
 
-#: diff.c:5579
+#: diff.c:5621
 msgid "show all changes in the changeset with -S or -G"
 msgstr "visa alla ändringar i ändringsuppsättningen med -S eller -G"
 
-#: diff.c:5582
+#: diff.c:5624
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "tolka <sträng> i -S som utökade POSIX-reguljära uttryck"
 
-#: diff.c:5585
+#: diff.c:5627
 msgid "control the order in which files appear in the output"
 msgstr "styr ordningen i vilken filer visas i utdata"
 
-#: diff.c:5586 diff.c:5589
+#: diff.c:5628 diff.c:5631
 msgid "<path>"
 msgstr "<sökväg>"
 
-#: diff.c:5587
+#: diff.c:5629
 msgid "show the change in the specified path first"
 msgstr "visa ändringen i angiven sökväg först"
 
-#: diff.c:5590
+#: diff.c:5632
 msgid "skip the output to the specified path"
 msgstr "hoppa över utdata fram till angiven sökväg"
 
-#: diff.c:5592
+#: diff.c:5634
 msgid "<object-id>"
 msgstr "<objekt-id>"
 
-#: diff.c:5593
+#: diff.c:5635
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
 msgstr "se efter ändringar som ändrar antalet förekomster av angivet objekt"
 
-#: diff.c:5595
+#: diff.c:5637
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5596
+#: diff.c:5638
 msgid "select files by diff type"
 msgstr "välj filter efter diff-typ"
 
-#: diff.c:5598
+#: diff.c:5640
 msgid "<file>"
 msgstr "<fil>"
 
-#: diff.c:5599
-msgid "Output to a specific file"
-msgstr "Skriv utdata till en specifik fil"
+#: diff.c:5641
+msgid "output to a specific file"
+msgstr "skriv utdata till en specifik fil"
 
-#: diff.c:6257
+#: diff.c:6321
 msgid "exhaustive rename detection was skipped due to too many files."
 msgstr ""
 "uttömmande namnbytesdetektering hoppades över på grund av för många filer."
 
-#: diff.c:6260
+#: diff.c:6324
 msgid "only found copies from modified paths due to too many files."
 msgstr "hittade bara kopior från ändrade sökvägar på grund av för många filer."
 
-#: diff.c:6263
+#: diff.c:6327
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -3977,20 +4072,20 @@ msgstr "inaktiverar konmönstermatchning"
 msgid "cannot use %s as an exclude file"
 msgstr "kan inte använda %s som exkluderingsfil"
 
-#: dir.c:2418
+#: dir.c:2419
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "kunde inte öppna katalogen \"%s\""
 
-#: dir.c:2720
+#: dir.c:2721
 msgid "failed to get kernel name and information"
 msgstr "misslyckades hämta kärnans namn och information"
 
-#: dir.c:2844
+#: dir.c:2846
 msgid "untracked cache is disabled on this system or location"
 msgstr "ospårad cache är inaktiverad på systemet eller platsen"
 
-#: dir.c:3112
+#: dir.c:3119
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -3998,17 +4093,17 @@ msgstr ""
 "Kunde inte gissa katalognamn.\n"
 "Ange en katalog på kommandoraden"
 
-#: dir.c:3800
+#: dir.c:3807
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "indexfilen trasig i arkivet %s"
 
-#: dir.c:3847 dir.c:3852
+#: dir.c:3854 dir.c:3859
 #, c-format
 msgid "could not create directories for %s"
 msgstr "kunde inte skapa kataloger för %s"
 
-#: dir.c:3881
+#: dir.c:3888
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "kunde inte migrera git-katalog från \"%s\" till \"%s\""
@@ -4027,7 +4122,7 @@ msgstr "Filtrerar innehåll"
 msgid "could not stat file '%s'"
 msgstr "kunde inte ta status på filen \"%s\""
 
-#: environment.c:145
+#: environment.c:147
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "felaktig git-namnrymdssökväg \"%s\""
@@ -4058,248 +4153,275 @@ msgstr "git fetch-pack: förväntade ACK/NAK, fick \"%s\""
 msgid "unable to write to remote"
 msgstr "kunde inte skriva till fjärren"
 
-#: fetch-pack.c:395 fetch-pack.c:1439
+#: fetch-pack.c:397 fetch-pack.c:1460
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "ogiltig \"shallow\"-rad: %s"
 
-#: fetch-pack.c:401 fetch-pack.c:1445
+#: fetch-pack.c:403 fetch-pack.c:1466
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "ogiltig \"unshallow\"-rad: %s"
 
-#: fetch-pack.c:403 fetch-pack.c:1447
+#: fetch-pack.c:405 fetch-pack.c:1468
 #, c-format
 msgid "object not found: %s"
 msgstr "objektet hittades inte: %s"
 
-#: fetch-pack.c:406 fetch-pack.c:1450
+#: fetch-pack.c:408 fetch-pack.c:1471
 #, c-format
 msgid "error in object: %s"
 msgstr "fel i objekt: %s"
 
-#: fetch-pack.c:408 fetch-pack.c:1452
+#: fetch-pack.c:410 fetch-pack.c:1473
 #, c-format
 msgid "no shallow found: %s"
 msgstr "ingen \"shallow\" hittades: %s"
 
-#: fetch-pack.c:411 fetch-pack.c:1456
+#: fetch-pack.c:413 fetch-pack.c:1477
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "förväntade shallow/unshallow, fick %s"
 
-#: fetch-pack.c:451
+#: fetch-pack.c:453
 #, c-format
 msgid "got %s %d %s"
 msgstr "fick %s %d %s"
 
-#: fetch-pack.c:468
+#: fetch-pack.c:470
 #, c-format
 msgid "invalid commit %s"
 msgstr "ogiltig incheckning %s"
 
-#: fetch-pack.c:499
+#: fetch-pack.c:501
 msgid "giving up"
 msgstr "ger upp"
 
-#: fetch-pack.c:512 progress.c:339
+#: fetch-pack.c:514 progress.h:25
 msgid "done"
 msgstr "klart"
 
-#: fetch-pack.c:524
+#: fetch-pack.c:526
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "fick %s (%d) %s"
 
-#: fetch-pack.c:560
+#: fetch-pack.c:562
 #, c-format
 msgid "Marking %s as complete"
 msgstr "Markerar %s som komplett"
 
-#: fetch-pack.c:775
+#: fetch-pack.c:784
 #, c-format
 msgid "already have %s (%s)"
 msgstr "har redan %s (%s)"
 
-#: fetch-pack.c:861
+#: fetch-pack.c:870
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-patch: kunde inte grena av sidbandsmultiplexare"
 
-#: fetch-pack.c:869
+#: fetch-pack.c:878
 msgid "protocol error: bad pack header"
 msgstr "protokollfel: felaktigt packhuvud"
 
-#: fetch-pack.c:965
+#: fetch-pack.c:974
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-patch: kunde inte grena av %s"
 
-#: fetch-pack.c:971
+#: fetch-pack.c:980
 msgid "fetch-pack: invalid index-pack output"
 msgstr "fetch-patch: ogiltig utdata från index-pack"
 
-#: fetch-pack.c:988
+#: fetch-pack.c:997
 #, c-format
 msgid "%s failed"
 msgstr "%s misslyckades"
 
-#: fetch-pack.c:990
+#: fetch-pack.c:999
 msgid "error in sideband demultiplexer"
 msgstr "fel i sidbands-avmultiplexare"
 
-#: fetch-pack.c:1035
+#: fetch-pack.c:1048
 #, c-format
 msgid "Server version is %.*s"
 msgstr "Serverversionen är %.*s"
 
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1052 fetch-pack.c:1058
-#: fetch-pack.c:1062 fetch-pack.c:1066 fetch-pack.c:1070 fetch-pack.c:1074
-#: fetch-pack.c:1078 fetch-pack.c:1082 fetch-pack.c:1086 fetch-pack.c:1090
-#: fetch-pack.c:1096 fetch-pack.c:1102 fetch-pack.c:1107 fetch-pack.c:1112
+#: fetch-pack.c:1056 fetch-pack.c:1062 fetch-pack.c:1065 fetch-pack.c:1071
+#: fetch-pack.c:1075 fetch-pack.c:1079 fetch-pack.c:1083 fetch-pack.c:1087
+#: fetch-pack.c:1091 fetch-pack.c:1095 fetch-pack.c:1099 fetch-pack.c:1103
+#: fetch-pack.c:1109 fetch-pack.c:1115 fetch-pack.c:1120 fetch-pack.c:1125
 #, c-format
 msgid "Server supports %s"
 msgstr "Servern stöder %s"
 
-#: fetch-pack.c:1045
+#: fetch-pack.c:1058
 msgid "Server does not support shallow clients"
 msgstr "Servern stöder inte klienter med grunda arkiv"
 
-#: fetch-pack.c:1105
+#: fetch-pack.c:1118
 msgid "Server does not support --shallow-since"
 msgstr "Servern stöder inte --shallow-since"
 
-#: fetch-pack.c:1110
+#: fetch-pack.c:1123
 msgid "Server does not support --shallow-exclude"
 msgstr "Servern stöder inte --shallow-exclude"
 
-#: fetch-pack.c:1114
+#: fetch-pack.c:1127
 msgid "Server does not support --deepen"
 msgstr "Servern stöder inte --deepen"
 
-#: fetch-pack.c:1116
+#: fetch-pack.c:1129
 msgid "Server does not support this repository's object format"
 msgstr "Servern stöder inte det här arkivets objektformat"
 
-#: fetch-pack.c:1129
+#: fetch-pack.c:1142
 msgid "no common commits"
 msgstr "inga gemensamma incheckningar"
 
-#: fetch-pack.c:1138 fetch-pack.c:1485 builtin/clone.c:1130
+#: fetch-pack.c:1151 fetch-pack.c:1506 builtin/clone.c:1166
 msgid "source repository is shallow, reject to clone."
 msgstr "källarkivet är grunt, tillåter inte kloning."
 
-#: fetch-pack.c:1144 fetch-pack.c:1681
+#: fetch-pack.c:1157 fetch-pack.c:1705
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: hämtning misslyckades."
 
-#: fetch-pack.c:1258
+#: fetch-pack.c:1271
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "omaka algoritmer: klient %s; server %s"
 
-#: fetch-pack.c:1262
+#: fetch-pack.c:1275
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "servern stöder inte algoritmen \"%s\""
 
-#: fetch-pack.c:1295
+#: fetch-pack.c:1308
 msgid "Server does not support shallow requests"
 msgstr "Servern stöder inte grunda förfrågningar"
 
-#: fetch-pack.c:1302
+#: fetch-pack.c:1315
 msgid "Server supports filter"
 msgstr "Servern stöder filter"
 
-#: fetch-pack.c:1345 fetch-pack.c:2063
+#: fetch-pack.c:1358 fetch-pack.c:2087
 msgid "unable to write request to remote"
 msgstr "kunde inte skriva anrop till fjärren"
 
-#: fetch-pack.c:1363
+#: fetch-pack.c:1376
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "fel vid läsning av styckehuvudet \"%s\""
 
-#: fetch-pack.c:1369
+#: fetch-pack.c:1382
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "förväntade \"%s\", tog emot \"%s\""
 
-#: fetch-pack.c:1403
+#: fetch-pack.c:1416
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "oväntad bekräftelserad: \"%s\""
 
-#: fetch-pack.c:1408
+#: fetch-pack.c:1421
 #, c-format
 msgid "error processing acks: %d"
 msgstr "fel vid hantering av bekräftelser: %d"
 
-#: fetch-pack.c:1418
-msgid "expected packfile to be sent after 'ready'"
-msgstr "väntade att paketfil skulle sändas efter \"ready\""
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#.
+#: fetch-pack.c:1435
+#, c-format
+msgid "expected packfile to be sent after '%s'"
+msgstr "väntade att paketfil skulle sändas efter \"%s\""
 
-#: fetch-pack.c:1420
-msgid "expected no other sections to be sent after no 'ready'"
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#.
+#: fetch-pack.c:1441
+#, c-format
+msgid "expected no other sections to be sent after no '%s'"
 msgstr ""
-"väntade inte att några ytterligare sektioner skulle sändas efter \"ready\""
+"väntade inte att några ytterligare sektioner skulle sändas efter \"%s\""
 
-#: fetch-pack.c:1461
+#: fetch-pack.c:1482
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "fel vid hantering av grund (\"shallow\") info: %d"
 
-#: fetch-pack.c:1510
+#: fetch-pack.c:1531
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "förväntade wanted-ref, fick %s"
 
-#: fetch-pack.c:1515
+#: fetch-pack.c:1536
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "oväntad wanted-ref: \"%s\""
 
-#: fetch-pack.c:1520
+#: fetch-pack.c:1541
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "fel vid hantering av önskade referenser: %d"
 
-#: fetch-pack.c:1550
+#: fetch-pack.c:1571
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack: förväntade svarsavslutningspaket"
 
-#: fetch-pack.c:1959
+#: fetch-pack.c:1983
 msgid "no matching remote head"
 msgstr "inget motsvarande fjärrhuvud"
 
-#: fetch-pack.c:1982 builtin/clone.c:581
+#: fetch-pack.c:2006 builtin/clone.c:587
 msgid "remote did not send all necessary objects"
 msgstr "fjärren sände inte alla nödvändiga objekt"
 
-#: fetch-pack.c:2085
+#: fetch-pack.c:2109
 msgid "unexpected 'ready' from remote"
 msgstr "oväntat \"ready\" från fjärr"
 
-#: fetch-pack.c:2108
+#: fetch-pack.c:2132
 #, c-format
 msgid "no such remote ref %s"
 msgstr "ingen sådan fjärreferens: %s"
 
-#: fetch-pack.c:2111
+#: fetch-pack.c:2135
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "Servern tillåter inte förfrågan om ej tillkännagivet objekt %s"
 
-#: gpg-interface.c:329 gpg-interface.c:457 gpg-interface.c:974
-#: gpg-interface.c:990
+#: fsmonitor-ipc.c:119
+#, c-format
+msgid "fsmonitor_ipc__send_query: invalid path '%s'"
+msgstr "fsmonitor_ipc__send_query: ogilitg sökväg \"%s\""
+
+#: fsmonitor-ipc.c:125
+#, c-format
+msgid "fsmonitor_ipc__send_query: unspecified error on '%s'"
+msgstr "fsmonitor_ipc__send_query: ospecificerat fel på \"%s\""
+
+#: fsmonitor-ipc.c:155
+msgid "fsmonitor--daemon is not running"
+msgstr "fsmonitor--daemon kör inte"
+
+#: fsmonitor-ipc.c:164
+#, c-format
+msgid "could not send '%s' command to fsmonitor--daemon"
+msgstr "kunde inte sända kommandot \"%s\" till fsmonitor--daemon"
+
+#: gpg-interface.c:329 gpg-interface.c:456 gpg-interface.c:995
+#: gpg-interface.c:1011
 msgid "could not create temporary file"
 msgstr "kunde inte skapa temporära fil"
 
-#: gpg-interface.c:332 gpg-interface.c:460
+#: gpg-interface.c:332 gpg-interface.c:459
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr "misslyckades skriva fristående signatur till \"%s\""
 
-#: gpg-interface.c:451
+#: gpg-interface.c:450
 msgid ""
 "gpg.ssh.allowedSignersFile needs to be configured and exist for ssh "
 "signature verification"
@@ -4307,7 +4429,7 @@ msgstr ""
 "gpg.ssh.allowedSignersFile måste ställas in och finnas för att bekräfta ssh-"
 "signaturer"
 
-#: gpg-interface.c:480
+#: gpg-interface.c:479
 msgid ""
 "ssh-keygen -Y find-principals/verify is needed for ssh signature "
 "verification (available in openssh version 8.2p1+)"
@@ -4315,56 +4437,56 @@ msgstr ""
 "\"ssh-keygen -Y find-principals/verify\" behövs för att bekräfta ssh-"
 "signaturer (tillgängligt i openssh version 8.2p1+)"
 
-#: gpg-interface.c:536
+#: gpg-interface.c:550
 #, c-format
 msgid "ssh signing revocation file configured but not found: %s"
 msgstr "återkallningsfilen för ssh-signering inställd men saknas: %s"
 
-#: gpg-interface.c:624
+#: gpg-interface.c:638
 #, c-format
 msgid "bad/incompatible signature '%s'"
 msgstr "felaktig/inkompatibel signatur \"%s\""
 
-#: gpg-interface.c:801 gpg-interface.c:806
+#: gpg-interface.c:815 gpg-interface.c:820
 #, c-format
 msgid "failed to get the ssh fingerprint for key '%s'"
 msgstr "misslyckades hämta ssh-fingeravtrycket för nyckeln \"%s\""
 
-#: gpg-interface.c:829
+#: gpg-interface.c:843
 msgid ""
 "either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured"
 msgstr ""
 "måste konfigurera antingen user.signingkey eller gpg.ssh.defaultKeyCommand"
 
-#: gpg-interface.c:851
+#: gpg-interface.c:865
 #, c-format
 msgid "gpg.ssh.defaultKeyCommand succeeded but returned no keys: %s %s"
 msgstr "gpg.ssh.defaultKeyCommand lyckades men gav inga nycklar: %s %s"
 
-#: gpg-interface.c:857
+#: gpg-interface.c:871
 #, c-format
 msgid "gpg.ssh.defaultKeyCommand failed: %s %s"
 msgstr "gpg.ssh.defaultKeyCommand misslyckades: %s %s"
 
-#: gpg-interface.c:945
+#: gpg-interface.c:966
 msgid "gpg failed to sign the data"
 msgstr "gpg misslyckades signera data"
 
-#: gpg-interface.c:967
+#: gpg-interface.c:988
 msgid "user.signingkey needs to be set for ssh signing"
 msgstr "user.signingkey måste anges för ssh-signering"
 
-#: gpg-interface.c:978
+#: gpg-interface.c:999
 #, c-format
 msgid "failed writing ssh signing key to '%s'"
 msgstr "misslyckades skriva ssh-signeringsnyckel till \"%s\""
 
-#: gpg-interface.c:996
+#: gpg-interface.c:1017
 #, c-format
 msgid "failed writing ssh signing key buffer to '%s'"
 msgstr "misslyckades skriva ssh-signeringsnyckelbuffert till \"%s\""
 
-#: gpg-interface.c:1014
+#: gpg-interface.c:1035
 msgid ""
 "ssh-keygen -Y sign is needed for ssh signing (available in openssh version "
 "8.2p1+)"
@@ -4372,7 +4494,7 @@ msgstr ""
 "\"ssh-keygen -Y sign\" behövs för ssh-signering (tillgängligt i openssh "
 "version 8.2p1+)"
 
-#: gpg-interface.c:1026
+#: gpg-interface.c:1047
 #, c-format
 msgid "failed reading ssh signing data buffer from '%s'"
 msgstr "misslyckades läsa ssh-signeringsdatabuffert från \"%s\""
@@ -4382,7 +4504,7 @@ msgstr "misslyckades läsa ssh-signeringsdatabuffert från \"%s\""
 msgid "ignored invalid color '%.*s' in log.graphColors"
 msgstr "ignorerade felaktig färg \"%.*s\" i log.graphColors"
 
-#: grep.c:531
+#: grep.c:446
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
@@ -4390,109 +4512,109 @@ msgstr ""
 "angivet mönster innehåller NULL-byte (via -f <fil>). Detta stöds endast med -"
 "P under PCRE v2"
 
-#: grep.c:1942
+#: grep.c:1859
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "\"%s\" kunde inte läsa %s"
 
-#: grep.c:1959 setup.c:177 builtin/clone.c:302 builtin/diff.c:90
+#: grep.c:1876 setup.c:178 builtin/clone.c:308 builtin/diff.c:90
 #: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "misslyckades ta status på \"%s\""
 
-#: grep.c:1970
+#: grep.c:1887
 #, c-format
 msgid "'%s': short read"
 msgstr "\"%s\": kort läsning"
 
-#: help.c:24
+#: help.c:25
 msgid "start a working area (see also: git help tutorial)"
 msgstr "starta arbetskatalog (se också: git help tutorial)"
 
-#: help.c:25
+#: help.c:26
 msgid "work on the current change (see also: git help everyday)"
 msgstr "jobba med aktuell förändring (se också: git help everyday)"
 
-#: help.c:26
+#: help.c:27
 msgid "examine the history and state (see also: git help revisions)"
 msgstr "utforska historiken och tillståndet (se också: git help revisions)"
 
-#: help.c:27
+#: help.c:28
 msgid "grow, mark and tweak your common history"
 msgstr "utöka, markera och justera din gemensamma historik"
 
-#: help.c:28
+#: help.c:29
 msgid "collaborate (see also: git help workflows)"
 msgstr "samarbeta (se också: git help workflows)"
 
-#: help.c:32
+#: help.c:33
 msgid "Main Porcelain Commands"
 msgstr "Huvudsakliga porslinskommandon"
 
-#: help.c:33
+#: help.c:34
 msgid "Ancillary Commands / Manipulators"
 msgstr "Tilläggskommandon / manipulerare"
 
-#: help.c:34
+#: help.c:35
 msgid "Ancillary Commands / Interrogators"
 msgstr "Tilläggskommandon / frågare"
 
-#: help.c:35
+#: help.c:36
 msgid "Interacting with Others"
 msgstr "Interaktion med andra"
 
-#: help.c:36
+#: help.c:37
 msgid "Low-level Commands / Manipulators"
 msgstr "Lågnivåkommandon / maniupulerare"
 
-#: help.c:37
+#: help.c:38
 msgid "Low-level Commands / Interrogators"
 msgstr "Lågnivåkommandon / frågare"
 
-#: help.c:38
+#: help.c:39
 msgid "Low-level Commands / Syncing Repositories"
 msgstr "Lågnivåkommandon / synka arkiv"
 
-#: help.c:39
+#: help.c:40
 msgid "Low-level Commands / Internal Helpers"
 msgstr "Lågnivåkommandon / interna hjälpare"
 
-#: help.c:313
+#: help.c:316
 #, c-format
 msgid "available git commands in '%s'"
 msgstr "git-kommandon tillgängliga i \"%s\""
 
-#: help.c:320
+#: help.c:323
 msgid "git commands available from elsewhere on your $PATH"
 msgstr "git-kommandon från andra platser i din $PATH"
 
-#: help.c:329
+#: help.c:332
 msgid "These are common Git commands used in various situations:"
 msgstr "Dessa vanliga Git-kommandon används i olika situationer:"
 
-#: help.c:378 git.c:100
+#: help.c:382 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "okänd kommandolisttyp \"%s\""
 
-#: help.c:418
+#: help.c:422
 msgid "The Git concept guides are:"
 msgstr "Vägledningar för Git-koncept:"
 
-#: help.c:442
-msgid "See 'git help <command>' to read about a specific subcommand"
-msgstr "Se \"git help <kommando>\" för att läsa om ett specifikt underkommando"
-
-#: help.c:447
+#: help.c:446
 msgid "External commands"
 msgstr "Externa kommandon"
 
-#: help.c:462
+#: help.c:468
 msgid "Command aliases"
 msgstr "Kommadoalias"
 
-#: help.c:543
+#: help.c:486
+msgid "See 'git help <command>' to read about a specific subcommand"
+msgstr "Se \"git help <kommando>\" för att läsa om ett specifikt underkommando"
+
+#: help.c:563
 #, c-format
 msgid ""
 "'%s' appears to be a git command, but we were not\n"
@@ -4501,37 +4623,37 @@ msgstr ""
 "\"%s\" verkar vara ett git-kommando, men vi kan inte\n"
 "köra det. Kanske git-%s är trasigt?"
 
-#: help.c:565 help.c:662
+#: help.c:585 help.c:682
 #, c-format
 msgid "git: '%s' is not a git command. See 'git --help'."
 msgstr "git: \"%s\" är inte ett git-kommando. Se \"git --help\"."
 
-#: help.c:613
+#: help.c:633
 msgid "Uh oh. Your system reports no Git commands at all."
 msgstr "Oj då. Ditt system rapporterar inga Git-kommandon alls."
 
-#: help.c:635
+#: help.c:655
 #, c-format
 msgid "WARNING: You called a Git command named '%s', which does not exist."
 msgstr "VARNING: Du anropade ett Git-kommando vid namn \"%s\", som inte finns."
 
-#: help.c:640
+#: help.c:660
 #, c-format
 msgid "Continuing under the assumption that you meant '%s'."
 msgstr "Fortsätter under förutsättningen att du menade \"%s\"."
 
-#: help.c:646
+#: help.c:666
 #, c-format
 msgid "Run '%s' instead [y/N]? "
 msgstr "Köra \"%s\" istället (j/N)?"
 
-#: help.c:654
+#: help.c:674
 #, c-format
 msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
 msgstr ""
 "Fortsätter om %0.1f sekunder, under förutsättningen att du menade \"%s\"."
 
-#: help.c:666
+#: help.c:686
 msgid ""
 "\n"
 "The most similar command is"
@@ -4545,16 +4667,16 @@ msgstr[1] ""
 "\n"
 "Mest lika kommandon är"
 
-#: help.c:706
+#: help.c:729
 msgid "git version [<options>]"
 msgstr "git version [<flaggor>]"
 
-#: help.c:761
+#: help.c:784
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s: %s - %s"
 
-#: help.c:765
+#: help.c:788
 msgid ""
 "\n"
 "Did you mean this?"
@@ -4568,7 +4690,7 @@ msgstr[1] ""
 "\n"
 "Menade du ett av dessa?"
 
-#: hook.c:27
+#: hook.c:28
 #, c-format
 msgid ""
 "The '%s' hook was ignored because it's not set as executable.\n"
@@ -4577,15 +4699,20 @@ msgstr ""
 "Kroken \"%s\" ignorerades eftersom den inte är markerad som körbar.\n"
 "Du kan inaktivera varningen med \"git config advice.ignoredHook false\"."
 
-#: ident.c:353
+#: hook.c:87
+#, c-format
+msgid "Couldn't start hook '%s'\n"
+msgstr "Kunde inte starta kroken \"%s\"\n"
+
+#: ident.c:354
 msgid "Author identity unknown\n"
 msgstr "Författar-identitet okänd\n"
 
-#: ident.c:356
+#: ident.c:357
 msgid "Committer identity unknown\n"
 msgstr "Incheckar-identitet okänd\n"
 
-#: ident.c:362
+#: ident.c:363
 msgid ""
 "\n"
 "*** Please tell me who you are.\n"
@@ -4611,71 +4738,71 @@ msgstr ""
 "Kör utan --global för att endast ändra i aktuellt arkiv.\n"
 "\n"
 
-#: ident.c:397
+#: ident.c:398
 msgid "no email was given and auto-detection is disabled"
 msgstr "ingen e-post angavs och autodetektering är inaktiverad"
 
-#: ident.c:402
+#: ident.c:403
 #, c-format
 msgid "unable to auto-detect email address (got '%s')"
 msgstr "kunde inte autodetektera e-postadress (fick \"%s\")"
 
-#: ident.c:419
+#: ident.c:420
 msgid "no name was given and auto-detection is disabled"
 msgstr "inget namn angavs och autodetektering är inaktiverad"
 
-#: ident.c:425
+#: ident.c:426
 #, c-format
 msgid "unable to auto-detect name (got '%s')"
 msgstr "kunde inte autodetektera namn (fick \"%s\")"
 
-#: ident.c:433
+#: ident.c:434
 #, c-format
 msgid "empty ident name (for <%s>) not allowed"
 msgstr "tomt ident-namn (för <%s>) ej tillåtet"
 
-#: ident.c:439
+#: ident.c:440
 #, c-format
 msgid "name consists only of disallowed characters: %s"
 msgstr "namnet består enbart av ej tillåtna tecken: %s"
 
-#: ident.c:454 builtin/commit.c:648
+#: ident.c:455 builtin/commit.c:649
 #, c-format
 msgid "invalid date format: %s"
 msgstr "felaktigt datumformat: %s"
 
-#: list-objects-filter-options.c:83
+#: list-objects-filter-options.c:68
 msgid "expected 'tree:<depth>'"
 msgstr "förväntade \"tree:<djup>\""
 
-#: list-objects-filter-options.c:98
+#: list-objects-filter-options.c:83
 msgid "sparse:path filters support has been dropped"
 msgstr "sparse:sökväg-filter stöds inte längre"
 
-#: list-objects-filter-options.c:105
+#: list-objects-filter-options.c:90
 #, c-format
 msgid "'%s' for 'object:type=<type>' is not a valid object type"
 msgstr "\"%s\" för \"object:type=<typ>\" är inte en giltig objekttyp"
 
-#: list-objects-filter-options.c:124
+#: list-objects-filter-options.c:109
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "felaktig filterspecifikation: \"%s\""
 
-#: list-objects-filter-options.c:140
+#: list-objects-filter-options.c:125
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
 msgstr "måste använda specialsekvens i delfilter-spec: \"%c\""
 
-#: list-objects-filter-options.c:182
+#: list-objects-filter-options.c:167
 msgid "expected something after combine:"
 msgstr "förväntade någonting efter combine:"
 
-#: list-objects-filter-options.c:264
+#: list-objects-filter-options.c:249
 msgid "multiple filter-specs cannot be combined"
 msgstr "flera filterspecifikationer kan inte kombineras"
 
-#: list-objects-filter-options.c:376
+#: list-objects-filter-options.c:365
 msgid "unable to upgrade repository format to support partial clone"
 msgstr "kunde inte uppgradera arkivformat till att stöda delvis klon"
 
@@ -4689,17 +4816,17 @@ msgstr "kunde inte nå gles blob på \"%s\""
 msgid "unable to parse sparse filter data in %s"
 msgstr "kunde inte tolka gles filterdata i %s"
 
-#: list-objects.c:127
+#: list-objects.c:144
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
 msgstr "posten \"%s\" i trädet %s har träd-läge, men är inte ett träd"
 
-#: list-objects.c:140
+#: list-objects.c:157
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr "posten \"%s\" i trädet %s har blob-läge, men är inte en blob"
 
-#: list-objects.c:398
+#: list-objects.c:415
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "kunde inte läsa in rot-trädet för incheckningen %s"
@@ -4729,17 +4856,12 @@ msgstr ""
 msgid "Unable to create '%s.lock': %s"
 msgstr "Kunde inte skapa \"%s.lock\": %s"
 
-#: ls-refs.c:37
-#, c-format
-msgid "invalid value '%s' for lsrefs.unborn"
-msgstr "ogiltigt värde \"%s\" för lsrefs.unborn"
-
-#: ls-refs.c:174
+#: ls-refs.c:175
 #, c-format
 msgid "unexpected line: '%s'"
 msgstr "oväntad rad: \"%s\""
 
-#: ls-refs.c:178
+#: ls-refs.c:179
 msgid "expected flush after ls-refs arguments"
 msgstr "förväntade \"flush\" efter ls-refs-argument"
 
@@ -4747,39 +4869,39 @@ msgstr "förväntade \"flush\" efter ls-refs-argument"
 msgid "quoted CRLF detected"
 msgstr "citerad CRLF upptäcktes"
 
-#: mailinfo.c:1254 builtin/am.c:184 builtin/mailinfo.c:46
+#: mailinfo.c:1254 builtin/am.c:185 builtin/mailinfo.c:46
 #, c-format
 msgid "bad action '%s' for '%s'"
 msgstr "felaktig funktion \"%s\" för \"%s\""
 
-#: merge-ort.c:1584 merge-recursive.c:1211
+#: merge-ort.c:1630 merge-recursive.c:1214
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "Misslyckades slå ihop undermodulen %s (ej utcheckad)"
 
-#: merge-ort.c:1593 merge-recursive.c:1218
+#: merge-ort.c:1639 merge-recursive.c:1221
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "Misslyckades slå ihop undermodulen %s (incheckningar saknas)"
 
-#: merge-ort.c:1602 merge-recursive.c:1225
+#: merge-ort.c:1648 merge-recursive.c:1228
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr ""
 "Misslyckades slå ihop undermodulen %s (incheckningar följer inte "
 "sammanslagningsbasen)"
 
-#: merge-ort.c:1612 merge-ort.c:1620
+#: merge-ort.c:1658 merge-ort.c:1666
 #, c-format
 msgid "Note: Fast-forwarding submodule %s to %s"
 msgstr "Obs: Snabbspolar undermodulen %s till %s"
 
-#: merge-ort.c:1642
+#: merge-ort.c:1688
 #, c-format
 msgid "Failed to merge submodule %s"
 msgstr "Misslyckades slå ihop undermodulen %s"
 
-#: merge-ort.c:1649
+#: merge-ort.c:1695
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but a possible merge resolution exists:\n"
@@ -4788,7 +4910,7 @@ msgstr ""
 "Misslyckades slå ihop undermodulen %s, men en möjlig lösning finns:\n"
 "%s\n"
 
-#: merge-ort.c:1653 merge-recursive.c:1281
+#: merge-ort.c:1699 merge-recursive.c:1284
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -4805,7 +4927,7 @@ msgstr ""
 "\n"
 "vilket godtar lösningen.\n"
 
-#: merge-ort.c:1666
+#: merge-ort.c:1712
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but multiple possible merges exist:\n"
@@ -4815,21 +4937,21 @@ msgstr ""
 "finns:\n"
 "%s"
 
-#: merge-ort.c:1887 merge-recursive.c:1372
+#: merge-ort.c:1937 merge-recursive.c:1375
 msgid "Failed to execute internal merge"
 msgstr "Misslyckades exekvera intern sammanslagning"
 
-#: merge-ort.c:1892 merge-recursive.c:1377
+#: merge-ort.c:1942 merge-recursive.c:1380
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "Kunde inte lägga till %s till databasen"
 
-#: merge-ort.c:1899 merge-recursive.c:1410
+#: merge-ort.c:1949 merge-recursive.c:1413
 #, c-format
 msgid "Auto-merging %s"
 msgstr "Slår ihop %s automatiskt"
 
-#: merge-ort.c:2038 merge-recursive.c:2132
+#: merge-ort.c:2088 merge-recursive.c:2135
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -4838,7 +4960,7 @@ msgstr ""
 "KONFLIKT (implicit nämnändrad kat): Befintlig fil/kat vid %s är i vägen för "
 "implicit namnändrad(e) katalog(er) som lägger dit följande sökväg(ar): %s."
 
-#: merge-ort.c:2048 merge-recursive.c:2142
+#: merge-ort.c:2098 merge-recursive.c:2145
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -4847,7 +4969,7 @@ msgstr ""
 "KONFLIKT (implicit namnändrad kat): Kan inte koppla mer än en sökväg till "
 "%s; implicita katalognamnändringar försökte lägga följande sökvägar där: %s"
 
-#: merge-ort.c:2106
+#: merge-ort.c:2156
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to rename %s to; it was "
@@ -4858,7 +4980,7 @@ msgstr ""
 "den har namnbytts till flera andra kataloger, utan att någon destination "
 "fick en majoritet av filerna."
 
-#: merge-ort.c:2260 merge-recursive.c:2478
+#: merge-ort.c:2310 merge-recursive.c:2481
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
@@ -4867,7 +4989,7 @@ msgstr ""
 "VARNING: Undviker att applicera namnändring %s -> %s på %s, då %s själv har "
 "bytt namn."
 
-#: merge-ort.c:2400 merge-recursive.c:3261
+#: merge-ort.c:2450 merge-recursive.c:3264
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
@@ -4876,7 +4998,7 @@ msgstr ""
 "Uppdaterad sökväg: %s lade till %s inuti en katalog som bytte namn i %s; "
 "flyttar den till %s."
 
-#: merge-ort.c:2407 merge-recursive.c:3268
+#: merge-ort.c:2457 merge-recursive.c:3271
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
@@ -4885,7 +5007,7 @@ msgstr ""
 "Uppdaterad sökväg: %s bytte namn till %s i %s, inuti en katalog som bytte "
 "namn i %s; flyttar den till %s."
 
-#: merge-ort.c:2420 merge-recursive.c:3264
+#: merge-ort.c:2470 merge-recursive.c:3267
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed "
@@ -4894,7 +5016,7 @@ msgstr ""
 "KONFLIKT (filplacering): %s lade till %s inuti en katalog som bytte namn i "
 "%s, föreslår att den bör flyttas till%s."
 
-#: merge-ort.c:2428 merge-recursive.c:3271
+#: merge-ort.c:2478 merge-recursive.c:3274
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
@@ -4903,13 +5025,13 @@ msgstr ""
 "KONFLIKT (filplacering): %s bytte namn till %s i %s, inuti en katalog som "
 "bytte namn i %s; flyttar den till %s."
 
-#: merge-ort.c:2584
+#: merge-ort.c:2634
 #, c-format
 msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
 msgstr ""
 "KONFLIKT (namnbyte/namnbyte): %s namnbytt till %s i %s och till %s i %s."
 
-#: merge-ort.c:2679
+#: merge-ort.c:2729
 #, c-format
 msgid ""
 "CONFLICT (rename involved in collision): rename of %s -> %s has content "
@@ -4920,23 +5042,23 @@ msgstr ""
 "innehållskonflikter OCH krockar med en annan sökväg; detta kan leda till "
 "nästlade konfliktmarkörer."
 
-#: merge-ort.c:2698 merge-ort.c:2722
+#: merge-ort.c:2748 merge-ort.c:2772
 #, c-format
 msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
 msgstr ""
 "KONFLIKT (namnbyte/radera): %s namnbytt till %s i %s, men borttagen i %s."
 
-#: merge-ort.c:3212 merge-recursive.c:3022
+#: merge-ort.c:3261 merge-recursive.c:3025
 #, c-format
 msgid "cannot read object %s"
 msgstr "kan inte läsa objektet %s"
 
-#: merge-ort.c:3215 merge-recursive.c:3025
+#: merge-ort.c:3264 merge-recursive.c:3028
 #, c-format
 msgid "object %s is not a blob"
 msgstr "objektet %s är inte en blob"
 
-#: merge-ort.c:3644
+#: merge-ort.c:3693
 #, c-format
 msgid ""
 "CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
@@ -4945,7 +5067,7 @@ msgstr ""
 "KONFLIKT (fil/katalog): katalogen är i vägen för %s från %s; flyttar den "
 "till %s istället."
 
-#: merge-ort.c:3721
+#: merge-ort.c:3770
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed both "
@@ -4954,7 +5076,7 @@ msgstr ""
 "KONFLIKT (olika typer): %s hade olika typer på varje sida; namnbytte bägge "
 "så att de kan protokollföras någonstans."
 
-#: merge-ort.c:3728
+#: merge-ort.c:3777
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed one "
@@ -4963,24 +5085,24 @@ msgstr ""
 "KONFLIKT (olika typer): %s hade olika typer på varje sida; namnbytte den ena "
 "så att de kan protokollföras någonstans."
 
-#: merge-ort.c:3819 merge-recursive.c:3101
+#: merge-ort.c:3866 merge-recursive.c:3104
 msgid "content"
 msgstr "innehåll"
 
-#: merge-ort.c:3821 merge-recursive.c:3105
+#: merge-ort.c:3868 merge-recursive.c:3108
 msgid "add/add"
 msgstr "tillägg/tillägg"
 
-#: merge-ort.c:3823 merge-recursive.c:3150
+#: merge-ort.c:3870 merge-recursive.c:3153
 msgid "submodule"
 msgstr "undermodul"
 
-#: merge-ort.c:3825 merge-recursive.c:3151
+#: merge-ort.c:3872 merge-recursive.c:3154
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "KONFLIKT (%s): Sammanslagningskonflikt i %s"
 
-#: merge-ort.c:3869
+#: merge-ort.c:3916
 #, c-format
 msgid ""
 "CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
@@ -4989,7 +5111,7 @@ msgstr ""
 "KONFLIKT (ändra/radera): %s raderad i %s och ändrad i %s. Versionen %s av %s "
 "lämnad i trädet."
 
-#: merge-ort.c:4165
+#: merge-ort.c:4212
 #, c-format
 msgid ""
 "Note: %s not up to date and in way of checking out conflicted version; old "
@@ -5001,12 +5123,12 @@ msgstr ""
 #. TRANSLATORS: The %s arguments are: 1) tree hash of a merge
 #. base, and 2-3) the trees for the two trees we're merging.
 #.
-#: merge-ort.c:4534
+#: merge-ort.c:4586
 #, c-format
 msgid "collecting merge info failed for trees %s, %s, %s"
 msgstr "samling av sammanslagningsinfo misslyckades för träden %s, %s, %s"
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3716
+#: merge-ort-wrappers.c:13 merge-recursive.c:3723
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -5016,7 +5138,7 @@ msgstr ""
 "sammanslagning:\n"
 "  %s"
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3482 builtin/merge.c:405
+#: merge-ort-wrappers.c:33 merge-recursive.c:3485 builtin/merge.c:405
 msgid "Already up to date."
 msgstr "Redan à jour."
 
@@ -5056,7 +5178,7 @@ msgstr ": kanske en K/F-konflikt?"
 msgid "refusing to lose untracked file at '%s'"
 msgstr "vägrar förlora ospårad fil vid \"%s\""
 
-#: merge-recursive.c:956 builtin/cat-file.c:41
+#: merge-recursive.c:956 builtin/cat-file.c:47
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "kan inte läsa objektet %s: \"%s\""
@@ -5081,44 +5203,44 @@ msgstr "misslyckades skapa symboliska länken \"%s\": %s"
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "vet inte hur %06o %s \"%s\" ska hanteras"
 
-#: merge-recursive.c:1233 merge-recursive.c:1246
+#: merge-recursive.c:1236 merge-recursive.c:1249
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "Snabbspolar undermodulen %s till följande incheckning:"
 
-#: merge-recursive.c:1236 merge-recursive.c:1249
+#: merge-recursive.c:1239 merge-recursive.c:1252
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "Snabbspolar undermodulen %s"
 
-#: merge-recursive.c:1273
+#: merge-recursive.c:1276
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 "Misslyckades slå ihop undermodulen %s (sammanslagning efter incheckningar "
 "hittades inte)"
 
-#: merge-recursive.c:1277
+#: merge-recursive.c:1280
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "Misslyckades slå ihop undermodulen %s (ej snabbspolning)"
 
-#: merge-recursive.c:1278
+#: merge-recursive.c:1281
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "Hittade en möjlig lösning av sammanslagning för undermodulen:\n"
 
-#: merge-recursive.c:1290
+#: merge-recursive.c:1293
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr ""
 "Misslyckades slå ihop undermodulen %s (flera sammanslagningar hittades)"
 
-#: merge-recursive.c:1434
+#: merge-recursive.c:1437
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr "Fel: Vägrar förlora ospårad fil vid %s; skriver till %s istället."
 
-#: merge-recursive.c:1506
+#: merge-recursive.c:1509
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5127,7 +5249,7 @@ msgstr ""
 "KONFLIKT (%s/radera): %s raderad i %s och %s i %s. Versionen %s av %s lämnad "
 "i trädet."
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1514
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5136,7 +5258,7 @@ msgstr ""
 "KONFLIKT (%s/radera): %s raderad i %s och %s till %s i %s. Versionen %s av "
 "%s lämnad i trädet."
 
-#: merge-recursive.c:1518
+#: merge-recursive.c:1521
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5145,7 +5267,7 @@ msgstr ""
 "KONFLIKT (%s/radera): %s raderad i %s och %s i %s. Versionen %s av %s lämnad "
 "i trädet vid %s."
 
-#: merge-recursive.c:1523
+#: merge-recursive.c:1526
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5154,40 +5276,40 @@ msgstr ""
 "KONFLIKT (%s/radera): %s raderad i %s och %s till %s i %s. Versionen %s av "
 "%s lämnad i trädet vid %s."
 
-#: merge-recursive.c:1558
+#: merge-recursive.c:1561
 msgid "rename"
 msgstr "namnbyte"
 
-#: merge-recursive.c:1558
+#: merge-recursive.c:1561
 msgid "renamed"
 msgstr "namnbytt"
 
-#: merge-recursive.c:1609 merge-recursive.c:2515 merge-recursive.c:3178
+#: merge-recursive.c:1612 merge-recursive.c:2518 merge-recursive.c:3181
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "Vägrar förlora lortig fil vid \"%s\""
 
-#: merge-recursive.c:1619
+#: merge-recursive.c:1622
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr "Vägrar förlora ospårad fil vid %s, trots att den är i vägen."
 
-#: merge-recursive.c:1677
+#: merge-recursive.c:1680
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr "KONFLIKT (namnbyte/tillägg): Namnbyte %s->%s i %s. Lade till %s i %s"
 
-#: merge-recursive.c:1708
+#: merge-recursive.c:1711
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s är en katalog i %s lägger till som %s istället"
 
-#: merge-recursive.c:1713
+#: merge-recursive.c:1716
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr "Vägrar förlora ospårad fil vid %s; lägger till som %s istället"
 
-#: merge-recursive.c:1740
+#: merge-recursive.c:1743
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -5196,17 +5318,17 @@ msgstr ""
 "KONFLIKT (namnbyte/namnbyte): Namnbyte \"%s\"->\"%s\" på grenen \"%s\" "
 "namnbyte \"%s\"->\"%s\" i \"%s\"%s"
 
-#: merge-recursive.c:1745
+#: merge-recursive.c:1748
 msgid " (left unresolved)"
 msgstr " (lämnad olöst)"
 
-#: merge-recursive.c:1837
+#: merge-recursive.c:1840
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "KONFLIKT (namnbyte/namnbyte): Namnbyte %s->%s i %s. Namnbyte %s->%s i %s"
 
-#: merge-recursive.c:2100
+#: merge-recursive.c:2103
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -5217,7 +5339,7 @@ msgstr ""
 "katalogen %s bytte namn till flera andra kataloger, utan att någon "
 "destination fick en majoritet av filerna."
 
-#: merge-recursive.c:2234
+#: merge-recursive.c:2237
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -5226,79 +5348,79 @@ msgstr ""
 "KONFLIKT (namnbyte/namnbyte): Namnbytt katalog %s->%s i %s. Namnbytt katalog "
 "%s->%s i %s"
 
-#: merge-recursive.c:3089
+#: merge-recursive.c:3092
 msgid "modify"
 msgstr "ändra"
 
-#: merge-recursive.c:3089
+#: merge-recursive.c:3092
 msgid "modified"
 msgstr "ändrad"
 
-#: merge-recursive.c:3128
+#: merge-recursive.c:3131
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "Hoppade över %s (sammanslagen samma som befintlig)"
 
-#: merge-recursive.c:3181
+#: merge-recursive.c:3184
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Lägger till som %s istället"
 
-#: merge-recursive.c:3385
+#: merge-recursive.c:3388
 #, c-format
 msgid "Removing %s"
 msgstr "Tar bort %s"
 
-#: merge-recursive.c:3408
+#: merge-recursive.c:3411
 msgid "file/directory"
 msgstr "fil/katalog"
 
-#: merge-recursive.c:3413
+#: merge-recursive.c:3416
 msgid "directory/file"
 msgstr "katalog/fil"
 
-#: merge-recursive.c:3420
+#: merge-recursive.c:3423
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
 "KONFLIKT (%s): Det finns en katalog med namnet %s i %s. Lägger till %s som %s"
 
-#: merge-recursive.c:3429
+#: merge-recursive.c:3432
 #, c-format
 msgid "Adding %s"
 msgstr "Lägger till %s"
 
-#: merge-recursive.c:3438
+#: merge-recursive.c:3441
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "KONFLIKT (tillägg/tillägg): Sammanslagningskonflikt i %s"
 
-#: merge-recursive.c:3491
+#: merge-recursive.c:3494
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "sammanslagning av träden %s och %s misslyckades"
 
-#: merge-recursive.c:3585
+#: merge-recursive.c:3588
 msgid "Merging:"
 msgstr "Slår ihop:"
 
-#: merge-recursive.c:3598
+#: merge-recursive.c:3601
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "hittade %u gemensam förfader:"
 msgstr[1] "hittade %u gemensamma förfäder:"
 
-#: merge-recursive.c:3648
+#: merge-recursive.c:3651
 msgid "merge returned no commit"
 msgstr "sammanslagningen returnerade ingen incheckning"
 
-#: merge-recursive.c:3816
+#: merge-recursive.c:3823
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "Kunde inte tolka objektet \"%s\""
 
-#: merge-recursive.c:3834 builtin/merge.c:720 builtin/merge.c:906
+#: merge-recursive.c:3841 builtin/merge.c:720 builtin/merge.c:912
 #: builtin/stash.c:489
 msgid "Unable to write index."
 msgstr "Kunde inte skriva indexet."
@@ -5307,222 +5429,226 @@ msgstr "Kunde inte skriva indexet."
 msgid "failed to read the cache"
 msgstr "misslyckades läsa cachen"
 
-#: merge.c:102 rerere.c:704 builtin/am.c:1988 builtin/am.c:2022
-#: builtin/checkout.c:598 builtin/checkout.c:853 builtin/clone.c:706
+#: merge.c:102 rerere.c:705 builtin/am.c:1989 builtin/am.c:2023
+#: builtin/checkout.c:603 builtin/checkout.c:865 builtin/clone.c:714
 #: builtin/stash.c:269
 msgid "unable to write new index file"
 msgstr "kunde inte skriva ny indexfil"
 
-#: midx.c:78
+#: midx.c:79
 msgid "multi-pack-index OID fanout is of the wrong size"
 msgstr "multi-pack-indexets OID-utbredning har fel storlek"
 
-#: midx.c:111
+#: midx.c:112
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "multi-pack-indexfilen %s är för liten"
 
-#: midx.c:127
+#: midx.c:128
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr "multi-pack-indexsignaturen 0x%08x stämmer inte med signaturen 0x%08x"
 
-#: midx.c:132
+#: midx.c:133
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "multi-pack-indexversionen %d stöds inte"
 
-#: midx.c:137
+#: midx.c:138
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr "multi-pack-index-hashversionen %u stämmer inte med versionen %u"
 
-#: midx.c:154
+#: midx.c:155
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "multi-pack-index saknar krävd paketnamn-stycke"
 
-#: midx.c:156
+#: midx.c:157
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "multi-pack-index saknar krävt OID-utbredningsstycke"
 
-#: midx.c:158
+#: midx.c:159
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "multi-pack-index saknar krävt OID-uppslagnignsstycke"
 
-#: midx.c:160
+#: midx.c:161
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "multi-pack-index saknar krävt objekt-offsetstycke"
 
-#: midx.c:176
+#: midx.c:180
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr "multi-pack-index-paketnamn i fel ordning: \"%s\" före \"%s\""
 
-#: midx.c:224
+#: midx.c:228
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "bad pack-int-id: %u (%u paket totalt)"
 
-#: midx.c:274
+#: midx.c:278
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr "multi-pack-index skriver 64-bitars offset, men off_t är för liten"
 
-#: midx.c:505
+#: midx.c:509
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "misslyckades läsa paketfilen \"%s\""
 
-#: midx.c:511
+#: midx.c:515
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "misslyckades öppna paketindexet \"%s\""
 
-#: midx.c:579
+#: midx.c:583
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "misslyckades hitta objekt %d i paketfilen"
 
-#: midx.c:895
+#: midx.c:911
 msgid "cannot store reverse index file"
 msgstr "kan inte spara reverse-index-fil"
 
-#: midx.c:993
+#: midx.c:1009
 #, c-format
 msgid "could not parse line: %s"
 msgstr "kunde inte tolka rad: %s"
 
-#: midx.c:995
+#: midx.c:1011
 #, c-format
 msgid "malformed line: %s"
 msgstr "felaktig rad: %s"
 
-#: midx.c:1162
+#: midx.c:1181
 msgid "ignoring existing multi-pack-index; checksum mismatch"
 msgstr "ignorerar befintlig multi-pack-index; felaktig kontrollsumma"
 
-#: midx.c:1187
+#: midx.c:1206
 msgid "could not load pack"
 msgstr "kunde inte läsa paket{"
 
-#: midx.c:1193
+#: midx.c:1212
 #, c-format
 msgid "could not open index for %s"
 msgstr "kunde inte öppna indexet för %s"
 
-#: midx.c:1204
+#: midx.c:1223
 msgid "Adding packfiles to multi-pack-index"
 msgstr "Lägger till paketfiler till multi-pack-index"
 
-#: midx.c:1247
+#: midx.c:1266
 #, c-format
 msgid "unknown preferred pack: '%s'"
 msgstr "okänt föredraget paket: %s"
 
-#: midx.c:1292
+#: midx.c:1311
 #, c-format
 msgid "cannot select preferred pack %s with no objects"
 msgstr "kan inte välja föredraget paket %s som inte har några objekt"
 
-#: midx.c:1324
+#: midx.c:1343
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "såg inte paketfilen %s som skulle kastas"
 
-#: midx.c:1370
+#: midx.c:1389
 #, c-format
 msgid "preferred pack '%s' is expired"
 msgstr "föredraget paket \"%s\" har löpt ut"
 
-#: midx.c:1383
+#: midx.c:1402
 msgid "no pack files to index."
 msgstr "inga paketfiler att indexera."
 
-#: midx.c:1420
+#: midx.c:1409
+msgid "refusing to write multi-pack .bitmap without any objects"
+msgstr "kunde inte skriva fler-paketsbitkarta utan några objekt"
+
+#: midx.c:1451
 msgid "could not write multi-pack bitmap"
 msgstr "kunde inte skriva fler-paketsbitkarta"
 
-#: midx.c:1430
+#: midx.c:1461
 msgid "could not write multi-pack-index"
 msgstr "kunde inte skriva flerpakets-index"
 
-#: midx.c:1489 builtin/clean.c:37
+#: midx.c:1520 builtin/clean.c:37
 #, c-format
 msgid "failed to remove %s"
 msgstr "misslyckades ta bort %s"
 
-#: midx.c:1522
+#: midx.c:1553
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "misslyckades städa multi-pack-index på %s"
 
-#: midx.c:1585
+#: midx.c:1616
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr "multi-pack-indexfilen finns, men kunde inte tolkas"
 
-#: midx.c:1593
+#: midx.c:1624
 msgid "incorrect checksum"
 msgstr "felaktig kontrollsumma"
 
-#: midx.c:1596
+#: midx.c:1627
 msgid "Looking for referenced packfiles"
 msgstr "Ser efter refererade packfiler"
 
-#: midx.c:1611
+#: midx.c:1642
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr ""
 "oid-utbredning i fel ordning: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 
-#: midx.c:1616
+#: midx.c:1647
 msgid "the midx contains no oid"
 msgstr "midx saknar oid"
 
-#: midx.c:1625
+#: midx.c:1656
 msgid "Verifying OID order in multi-pack-index"
 msgstr "Bekräftar OID-ordning i multi-pack-index"
 
-#: midx.c:1634
+#: midx.c:1665
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "oid-uppslagning i fel ordning: oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1654
+#: midx.c:1685
 msgid "Sorting objects by packfile"
 msgstr "Sorterar objekt efter packfil"
 
-#: midx.c:1661
+#: midx.c:1692
 msgid "Verifying object offsets"
 msgstr "Bekräftar offset för objekt"
 
-#: midx.c:1677
+#: midx.c:1708
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "misslyckades läsa paketpost för oid[%d] = %s"
 
-#: midx.c:1683
+#: midx.c:1714
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "misslyckades läsa paketindex för paketfil %s"
 
-#: midx.c:1692
+#: midx.c:1723
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "felaktigt objekt-offset för oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 
-#: midx.c:1719
+#: midx.c:1750
 msgid "Counting referenced objects"
 msgstr "Räknar refererade objekt"
 
-#: midx.c:1729
+#: midx.c:1760
 msgid "Finding and deleting unreferenced packfiles"
 msgstr "Ser efter och tar bort orefererade packfiler"
 
-#: midx.c:1921
+#: midx.c:1952
 msgid "could not start pack-objects"
 msgstr "kunde inte starta pack-objects"
 
-#: midx.c:1941
+#: midx.c:1972
 msgid "could not finish pack-objects"
 msgstr "kunde inte avsluta pack-objects"
 
@@ -5541,7 +5667,7 @@ msgstr "misslyckades skapa lazy_name-tråd: %s"
 msgid "unable to join lazy_name thread: %s"
 msgstr "misslyckades utföra join på lazy_name-tråd: %s"
 
-#: notes-merge.c:277
+#: notes-merge.c:276
 #, c-format
 msgid ""
 "You have not concluded your previous notes merge (%s exists).\n"
@@ -5553,7 +5679,7 @@ msgstr ""
 "att checka in eller avbryta föregående sammanslagning innan du påbörjar en "
 "ny antecknings-sammanslagning."
 
-#: notes-merge.c:284
+#: notes-merge.c:283
 #, c-format
 msgid "You have not concluded your notes merge (%s exists)."
 msgstr "Du har inte avslutat antecknings-sammanslagningen (%s finns)."
@@ -5581,272 +5707,343 @@ msgstr "Vägrar skriva över anteckningar i %s (utanför refs/notes/)"
 msgid "Bad %s value: '%s'"
 msgstr "Felaktigt värde på %s: \"%s\""
 
-#: object-file.c:456
+#: object-file.c:457
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr "objektkatalogen %s finns inte; se .git/objects/info/alternates"
 
-#: object-file.c:514
+#: object-file.c:515
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr "kunde inte normalisera supplerande objektsökväg: %s"
 
-#: object-file.c:588
+#: object-file.c:589
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr "%s: ignorerar supplerande objektlager, för djup nästling"
 
-#: object-file.c:595
+#: object-file.c:596
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr "kan inte normalisera objektkatalogen: %s"
 
-#: object-file.c:638
+#: object-file.c:639
 msgid "unable to fdopen alternates lockfile"
 msgstr "kan inte utföra \"fdopen\" på suppleantlåsfil"
 
-#: object-file.c:656
+#: object-file.c:657
 msgid "unable to read alternates file"
 msgstr "kan inte läsa \"alternates\"-filen"
 
-#: object-file.c:663
+#: object-file.c:664
 msgid "unable to move new alternates file into place"
 msgstr "kan inte flytta ny \"alternates\"-fil på plats"
 
-#: object-file.c:741
+#: object-file.c:742
 #, c-format
 msgid "path '%s' does not exist"
 msgstr "sökvägen \"%s\" finns inte"
 
-#: object-file.c:762
+#: object-file.c:763
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr "referensarkivet \"%s\" som en länkad utcheckning stöds inte ännu."
 
-#: object-file.c:768
+#: object-file.c:769
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "referensarkivet \"%s\" är inte ett lokalt arkiv."
 
-#: object-file.c:774
+#: object-file.c:775
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr "referensarkivet \"%s\" är grunt"
 
-#: object-file.c:782
+#: object-file.c:783
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr "referensarkivet \"%s\" är ympat"
 
-#: object-file.c:813
+#: object-file.c:814
 #, c-format
 msgid "could not find object directory matching %s"
 msgstr "kunde inte hitta objektkatalog för %s"
 
-#: object-file.c:863
+#: object-file.c:864
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr "felaktig rad vid tolkning av supplerande referenser: %s"
 
-#: object-file.c:1013
+#: object-file.c:1014
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr "försök att utföra \"mmap\" på %<PRIuMAX> över gränsen %<PRIuMAX>"
 
-#: object-file.c:1048
+#: object-file.c:1049
 #, c-format
 msgid "mmap failed%s"
 msgstr "mmap misslyckades%s"
 
-#: object-file.c:1214
+#: object-file.c:1230
 #, c-format
 msgid "object file %s is empty"
 msgstr "objektfilen %s är tom"
 
-#: object-file.c:1333 object-file.c:2542
+#: object-file.c:1349 object-file.c:2588
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr "trasigt löst objekt \"%s\""
 
-#: object-file.c:1335 object-file.c:2546
+#: object-file.c:1351 object-file.c:2592
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr "skräp i slutet av löst objekt \"%s\""
 
-#: object-file.c:1457
+#: object-file.c:1473
 #, c-format
 msgid "unable to parse %s header"
 msgstr "kan inte tolka %s-huvud"
 
-#: object-file.c:1459
+#: object-file.c:1475
 msgid "invalid object type"
 msgstr "felaktig objekttyp"
 
-#: object-file.c:1470
+#: object-file.c:1486
 #, c-format
 msgid "unable to unpack %s header"
 msgstr "kan inte packa upp %s-huvudet"
 
-#: object-file.c:1474
+#: object-file.c:1490
 #, c-format
 msgid "header for %s too long, exceeds %d bytes"
 msgstr "huvudet för %s är för långt, mer än %d byte"
 
-#: object-file.c:1704
+#: object-file.c:1720
 #, c-format
 msgid "failed to read object %s"
 msgstr "misslyckades läsa objektet %s"
 
-#: object-file.c:1708
+#: object-file.c:1724
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr "ersättningen %s hittades inte för %s"
 
-#: object-file.c:1712
+#: object-file.c:1728
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr "löst objekt %s (lagrat i %s) är trasigt"
 
-#: object-file.c:1716
+#: object-file.c:1732
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr "packat objekt %s (lagrat i %s) är trasigt"
 
-#: object-file.c:1821
+#: object-file.c:1855
 #, c-format
 msgid "unable to write file %s"
 msgstr "kunde inte skriva filen %s"
 
-#: object-file.c:1828
+#: object-file.c:1862
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr "kan inte sätta behörigheten till \"%s\""
 
-#: object-file.c:1835
+#: object-file.c:1869
 msgid "file write error"
 msgstr "fel vid skrivning av fil"
 
-#: object-file.c:1858
+#: object-file.c:1904
 msgid "error when closing loose object file"
 msgstr "fel vid stängning av fil för löst objekt"
 
-#: object-file.c:1925
+#: object-file.c:1971
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr ""
 "otillräcklig behörighet för att lägga till objekt till arkivdatabasen %s"
 
-#: object-file.c:1927
+#: object-file.c:1973
 msgid "unable to create temporary file"
 msgstr "kan inte skapa temporär fil"
 
-#: object-file.c:1951
+#: object-file.c:1997
 msgid "unable to write loose object file"
 msgstr "kunde inte skriva fil för löst objekt"
 
-#: object-file.c:1957
+#: object-file.c:2003
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr "kan inte utföra \"deflate\" på nytt objekt %s (%d)"
 
-#: object-file.c:1961
+#: object-file.c:2007
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr "\"deflateend\" på objektet %s misslyckades (%d)"
 
-#: object-file.c:1965
+#: object-file.c:2011
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr "förvirrad av instabil objektkälldata för %s"
 
-#: object-file.c:1976 builtin/pack-objects.c:1243
+#: object-file.c:2022 builtin/pack-objects.c:1251
 #, c-format
 msgid "failed utime() on %s"
 msgstr "\"utime()\" misslyckades på %s"
 
-#: object-file.c:2054
+#: object-file.c:2100
 #, c-format
 msgid "cannot read object for %s"
 msgstr "kan inte läsa objekt för %s"
 
-#: object-file.c:2105
+#: object-file.c:2151
 msgid "corrupt commit"
 msgstr "trasik incheckning"
 
-#: object-file.c:2113
+#: object-file.c:2159
 msgid "corrupt tag"
 msgstr "trasig tagg"
 
-#: object-file.c:2213
+#: object-file.c:2259
 #, c-format
 msgid "read error while indexing %s"
 msgstr "läsfel vid indexering av %s"
 
-#: object-file.c:2216
+#: object-file.c:2262
 #, c-format
 msgid "short read while indexing %s"
 msgstr "för lite lästes vid indexering av %s"
 
-#: object-file.c:2289 object-file.c:2299
+#: object-file.c:2335 object-file.c:2345
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr "%s: misslyckades lägga in i databasen"
 
-#: object-file.c:2305
+#: object-file.c:2351
 #, c-format
 msgid "%s: unsupported file type"
 msgstr "%s: filtypen stöds ej"
 
-#: object-file.c:2329 builtin/fetch.c:1453
+#: object-file.c:2375 builtin/fetch.c:1494
 #, c-format
 msgid "%s is not a valid object"
 msgstr "%s är inte ett giltigt objekt"
 
-#: object-file.c:2331
+#: object-file.c:2377
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "%s är inte ett giltigt \"%s\"-objekt"
 
-#: object-file.c:2358
+#: object-file.c:2404
 #, c-format
 msgid "unable to open %s"
 msgstr "kan inte öppna %s"
 
-#: object-file.c:2553
+#: object-file.c:2599
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr "hash stämmer inte för %s (förväntade %s)"
 
-#: object-file.c:2576
+#: object-file.c:2622
 #, c-format
 msgid "unable to mmap %s"
 msgstr "kan inte utföra \"mmap\" för %s"
 
-#: object-file.c:2582
+#: object-file.c:2628
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr "kan inte packa upp huvud för %s"
 
-#: object-file.c:2587
+#: object-file.c:2633
 #, c-format
 msgid "unable to parse header of %s"
 msgstr "kan inte tolka huvud för %s"
 
-#: object-file.c:2598
+#: object-file.c:2644
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr "kan inte tolka innehåll i %s"
 
-#: object-name.c:480
+#. TRANSLATORS: This is a line of ambiguous object
+#. output shown when we cannot look up or parse the
+#. object in question. E.g. "deadbeef [bad object]".
+#.
+#: object-name.c:382
+#, c-format
+msgid "%s [bad object]"
+msgstr "%s [felaktig objekt]."
+
+#. TRANSLATORS: This is a line of ambiguous commit
+#. object output. E.g.:
+#. *
+#.    "deadbeef commit 2021-01-01 - Some Commit Message"
+#.
+#: object-name.c:407
+#, c-format
+msgid "%s commit %s - %s"
+msgstr "%s incheckning %s - %s"
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output. E.g.:
+#. *
+#.    "deadbeef tag 2022-01-01 - Some Tag Message"
+#. *
+#. The second argument is the YYYY-MM-DD found
+#. in the tag.
+#. *
+#. The third argument is the "tag" string
+#. from object.c.
+#.
+#: object-name.c:428
+#, c-format
+msgid "%s tag %s - %s"
+msgstr "%s tagg %s - %s"
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output where we couldn't parse
+#. the tag itself. E.g.:
+#. *
+#.    "deadbeef [bad tag, could not parse it]"
+#.
+#: object-name.c:439
+#, c-format
+msgid "%s [bad tag, could not parse it]"
+msgstr "%s [felaktig tagg, kunde inte tolka]"
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef tree".
+#.
+#: object-name.c:447
+#, c-format
+msgid "%s tree"
+msgstr "%s-träd"
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef blob".
+#.
+#: object-name.c:453
+#, c-format
+msgid "%s blob"
+msgstr "%s blob"
+
+#: object-name.c:569
 #, c-format
 msgid "short object ID %s is ambiguous"
 msgstr "kort objekt-ID %s är tvetydigt"
 
-#: object-name.c:491
-msgid "The candidates are:"
-msgstr "Kandidaterna är:"
+#. TRANSLATORS: The argument is the list of ambiguous
+#. objects composed in show_ambiguous_object(). See
+#. its "TRANSLATORS" comments for details.
+#.
+#: object-name.c:591
+#, c-format
+msgid ""
+"The candidates are:\n"
+"%s"
+msgstr ""
+"Kandidaterna är:\n"
+"%s"
 
-#: object-name.c:790
+#: object-name.c:888
 msgid ""
 "Git normally never creates a ref that ends with 40 hex characters\n"
 "because it will be ignored when you just specify 40-hex. These refs\n"
@@ -5868,22 +6065,22 @@ msgstr ""
 "Undersök referenserna och ta kanske bort dem. Stäng av meddelandet\n"
 "genom att köra \"git config advice.objectNameWarning false\""
 
-#: object-name.c:910
+#: object-name.c:1008
 #, c-format
 msgid "log for '%.*s' only goes back to %s"
 msgstr "loggen för \"%.*s\" räcker bara tillbaka till %s"
 
-#: object-name.c:918
+#: object-name.c:1016
 #, c-format
 msgid "log for '%.*s' only has %d entries"
 msgstr "loggen för \"%.*s\" har bara %d poster"
 
-#: object-name.c:1696
+#: object-name.c:1794
 #, c-format
 msgid "path '%s' exists on disk, but not in '%.*s'"
 msgstr "Sökvägen \"%s\" finns på disken, men inte i \"%.*s\""
 
-#: object-name.c:1702
+#: object-name.c:1800
 #, c-format
 msgid ""
 "path '%s' exists, but not '%s'\n"
@@ -5892,12 +6089,12 @@ msgstr ""
 "sökvägen \"%s\" finns, men inte i \"%s\"\n"
 "tips: Menade du \"%.*s:%s\", även känd som \"%.*s:./%s\"?"
 
-#: object-name.c:1711
+#: object-name.c:1809
 #, c-format
 msgid "path '%s' does not exist in '%.*s'"
 msgstr "sökvägen \"%s\" finns inte i \"%.*s\""
 
-#: object-name.c:1739
+#: object-name.c:1837
 #, c-format
 msgid ""
 "path '%s' is in the index, but not at stage %d\n"
@@ -5906,7 +6103,7 @@ msgstr ""
 "sökvägen \"%s\" finns i indexet men inte i etapp %d\n"
 "tips: Menade du \":%d:%s\"?"
 
-#: object-name.c:1755
+#: object-name.c:1853
 #, c-format
 msgid ""
 "path '%s' is in the index, but not '%s'\n"
@@ -5915,21 +6112,26 @@ msgstr ""
 "sökvägen \"%s\" finns i indexet, men inte i \"%s\"\n"
 "tips: Menade du \":%d:%s\", även känd som \":%d:./%s\"?"
 
-#: object-name.c:1763
+#: object-name.c:1861
 #, c-format
 msgid "path '%s' exists on disk, but not in the index"
 msgstr "sökvägen \"%s\" finns på disk, men inte i indexet"
 
-#: object-name.c:1765
+#: object-name.c:1863
 #, c-format
 msgid "path '%s' does not exist (neither on disk nor in the index)"
 msgstr "sökvägen \"%s\" finns inte (varken i disken eller i indexet)"
 
-#: object-name.c:1778
+#: object-name.c:1876
 msgid "relative path syntax can't be used outside working tree"
 msgstr "relativ sökväg kan inte användas utanför arbetskatalogen"
 
-#: object-name.c:1916
+#: object-name.c:1901
+#, c-format
+msgid "<object>:<path> required, only <object> '%s' given"
+msgstr "<objekt>:<sökväg> krävs, endast <objekt> \"%s\" har angivits"
+
+#: object-name.c:2014
 #, c-format
 msgid "invalid object name '%.*s'."
 msgstr "felaktigt objektnamn \"%.*s\"."
@@ -5954,7 +6156,7 @@ msgstr "objektet %s har okänd typ-id %d"
 msgid "unable to parse object: %s"
 msgstr "kunde inte tolka objektet: %s"
 
-#: object.c:283 object.c:295
+#: object.c:283 object.c:294
 #, c-format
 msgid "hash mismatch %s"
 msgstr "hashvärde stämmer inte överens %s"
@@ -5963,21 +6165,21 @@ msgstr "hashvärde stämmer inte överens %s"
 msgid "multi-pack bitmap is missing required reverse index"
 msgstr "flerpaketsbitkarta saknar nödvändigt omvänt index"
 
-#: pack-bitmap.c:429
+#: pack-bitmap.c:433
 msgid "load_reverse_index: could not open pack"
 msgstr "load_reverse_index: kunde inte öppna paket"
 
-#: pack-bitmap.c:1069 pack-bitmap.c:1075 builtin/pack-objects.c:2424
+#: pack-bitmap.c:1072 pack-bitmap.c:1078 builtin/pack-objects.c:2432
 #, c-format
 msgid "unable to get size of %s"
 msgstr "kan inte hämta storlek på %s"
 
-#: pack-bitmap.c:1935
+#: pack-bitmap.c:1937
 #, c-format
 msgid "could not find %s in pack %s at offset %<PRIuMAX>"
 msgstr "kunde inte hitta %s i paketet %s på offset %<PRIuMAX>"
 
-#: pack-bitmap.c:1971 builtin/rev-list.c:92
+#: pack-bitmap.c:1973 builtin/rev-list.c:91
 #, c-format
 msgid "unable to get disk usage of %s"
 msgstr "kan inte hämta diskanvändning för %s"
@@ -6021,7 +6223,7 @@ msgstr "kunde inte ta status: %s"
 msgid "failed to make %s readable"
 msgstr "kunde inte göra %s läsbar"
 
-#: pack-write.c:520
+#: pack-write.c:521
 #, c-format
 msgid "could not write '%s' promisor file"
 msgstr "kunde inte skriva kontraktsfilen \"%s\""
@@ -6360,20 +6562,20 @@ msgstr "object-info: förväntade \"flush\" efter argument"
 msgid "Removing duplicate objects"
 msgstr "Tar bort duplicerade objekt"
 
-#: range-diff.c:67
+#: range-diff.c:68
 msgid "could not start `log`"
 msgstr "kunde inte starta \"log\""
 
-#: range-diff.c:69
+#: range-diff.c:70
 msgid "could not read `log` output"
 msgstr "kunde inte läsa utdata från \"log\""
 
-#: range-diff.c:97 sequencer.c:5602
+#: range-diff.c:98 sequencer.c:5575
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "kunde inte tolka incheckningen \"%s\""
 
-#: range-diff.c:111
+#: range-diff.c:109
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
@@ -6382,65 +6584,65 @@ msgstr ""
 "kunde inte tolka första raden i \"log\"-updata: börjar inte med \"commit \": "
 "\"%s\""
 
-#: range-diff.c:137
+#: range-diff.c:132
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "kunde inte tolka git-huvudet \"%.*s\""
 
-#: range-diff.c:304
+#: range-diff.c:300
 msgid "failed to generate diff"
 msgstr "misslyckades skapa diff"
 
-#: range-diff.c:562 range-diff.c:564
+#: range-diff.c:558 range-diff.c:560
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "kunde inte tolka loggen för \"%s\""
 
-#: read-cache.c:723
+#: read-cache.c:737
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr "lägger inte till filalias \"%s\" (\"%s\" finns redan i indexet)"
 
-#: read-cache.c:739
+#: read-cache.c:753
 msgid "cannot create an empty blob in the object database"
 msgstr "kan inte skapa tom blob i objektdatabasen"
 
-#: read-cache.c:761
+#: read-cache.c:775
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr ""
 "%s: kan bara lägga till vanliga filer, symboliska länkar och git-kataloger"
 
-#: read-cache.c:766 builtin/submodule--helper.c:3242
+#: read-cache.c:780 builtin/submodule--helper.c:3359
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr "\"%s\" har inte någon utcheckad incheckning"
 
-#: read-cache.c:818
+#: read-cache.c:832
 #, c-format
 msgid "unable to index file '%s'"
 msgstr "kan inte indexera filen \"%s\""
 
-#: read-cache.c:837
+#: read-cache.c:851
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr "kan inte lägga till \"%s\" till indexet"
 
-#: read-cache.c:848
+#: read-cache.c:862
 #, c-format
 msgid "unable to stat '%s'"
 msgstr "kan inte ta status på \"%s\""
 
-#: read-cache.c:1386
+#: read-cache.c:1404
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr "\"%s\" finns både som en fil och en katalog"
 
-#: read-cache.c:1601
+#: read-cache.c:1619
 msgid "Refresh index"
 msgstr "Uppdatera indexet"
 
-#: read-cache.c:1733
+#: read-cache.c:1751
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -6449,7 +6651,7 @@ msgstr ""
 "index.version satt, men värdet är ogiltigt.\n"
 "Använder version %i"
 
-#: read-cache.c:1743
+#: read-cache.c:1761
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -6458,143 +6660,147 @@ msgstr ""
 "GIT_INDEX_VERSION satt, men värdet är ogiltigt.\n"
 "Använder version %i"
 
-#: read-cache.c:1799
+#: read-cache.c:1817
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "felaktig signatur 0x%08x"
 
-#: read-cache.c:1802
+#: read-cache.c:1820
 #, c-format
 msgid "bad index version %d"
 msgstr "felaktig indexversion %d"
 
-#: read-cache.c:1811
+#: read-cache.c:1829
 msgid "bad index file sha1 signature"
 msgstr "felaktig sha1-signatur för indexfil"
 
-#: read-cache.c:1845
+#: read-cache.c:1863
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "index använder filtillägget %.4s, vilket vi inte förstår"
 
-#: read-cache.c:1847
+#: read-cache.c:1865
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "ignorerar filtillägget %.4s"
 
-#: read-cache.c:1884
+#: read-cache.c:1902
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "okänt format 0x%08x på indexpost"
 
-#: read-cache.c:1900
+#: read-cache.c:1918
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "felformat namnfält i indexet, nära sökvägen \"%s\""
 
-#: read-cache.c:1957
+#: read-cache.c:1975
 msgid "unordered stage entries in index"
 msgstr "osorterade köposter i index"
 
-#: read-cache.c:1960
+#: read-cache.c:1978
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "flera köposter för den sammanslagna filen \"%s\""
 
-#: read-cache.c:1963
+#: read-cache.c:1981
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "osorterade köposter för \"%s\""
 
-#: read-cache.c:2078 read-cache.c:2384 rerere.c:549 rerere.c:583 rerere.c:1095
-#: submodule.c:1662 builtin/add.c:600 builtin/check-ignore.c:183
-#: builtin/checkout.c:527 builtin/checkout.c:719 builtin/clean.c:1013
-#: builtin/commit.c:378 builtin/diff-tree.c:122 builtin/grep.c:519
-#: builtin/mv.c:148 builtin/reset.c:499 builtin/rm.c:293
-#: builtin/submodule--helper.c:327 builtin/submodule--helper.c:3202
+#: read-cache.c:2096 read-cache.c:2402 rerere.c:549 rerere.c:583 rerere.c:1096
+#: submodule.c:1831 builtin/add.c:586 builtin/check-ignore.c:183
+#: builtin/checkout.c:532 builtin/checkout.c:724 builtin/clean.c:1016
+#: builtin/commit.c:379 builtin/diff-tree.c:122 builtin/grep.c:521
+#: builtin/mv.c:148 builtin/reset.c:506 builtin/rm.c:293
+#: builtin/submodule--helper.c:335 builtin/submodule--helper.c:3319
 msgid "index file corrupt"
 msgstr "indexfilen trasig"
 
-#: read-cache.c:2222
+#: read-cache.c:2240
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "kunde inte skapa tråd för load_cache_entries: %s"
 
-#: read-cache.c:2235
+#: read-cache.c:2253
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "kunde inte ansluta till tråden för load_cache_entries: %s"
 
-#: read-cache.c:2268
+#: read-cache.c:2286
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: öppning av indexfilen misslyckades"
 
-#: read-cache.c:2272
+#: read-cache.c:2290
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s: kan inte ta startus på det öppna indexet"
 
-#: read-cache.c:2276
+#: read-cache.c:2294
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s: indexfilen mindre än förväntat"
 
-#: read-cache.c:2280
+#: read-cache.c:2298
 #, c-format
 msgid "%s: unable to map index file%s"
 msgstr "%s: kan inte koppla indexfilen%s"
 
-#: read-cache.c:2323
+#: read-cache.c:2341
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "kunde inte skapa load_index_extensions-tråden: %s"
 
-#: read-cache.c:2350
+#: read-cache.c:2368
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "kunde inte utföra join på load_index_extensions-tråden: %s"
 
-#: read-cache.c:2396
+#: read-cache.c:2414
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "kunde inte uppdatera delat index \"%s\""
 
-#: read-cache.c:2455
+#: read-cache.c:2473
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "trasigt index, förväntade %s i %s, fick %s"
 
-#: read-cache.c:3086 strbuf.c:1191 wrapper.c:641 builtin/merge.c:1150
+#: read-cache.c:3032
+msgid "cannot write split index for a sparse index"
+msgstr "kan inte skriva delat index för ett glest index"
+
+#: read-cache.c:3114 strbuf.c:1192 wrapper.c:717 builtin/merge.c:1156
 #, c-format
 msgid "could not close '%s'"
 msgstr "kunde inte stänga \"%s\""
 
-#: read-cache.c:3129
+#: read-cache.c:3157
 msgid "failed to convert to a sparse-index"
 msgstr "misslyckades omvandla till glest index"
 
-#: read-cache.c:3200
+#: read-cache.c:3228
 #, c-format
 msgid "could not stat '%s'"
 msgstr "kunde inte ta status på \"%s\""
 
-#: read-cache.c:3213
+#: read-cache.c:3241
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "kunde inte öppna git-katalog: %s"
 
-#: read-cache.c:3225
+#: read-cache.c:3253
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "misslyckades ta bort länken: %s"
 
-#: read-cache.c:3254
+#: read-cache.c:3282
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "kan inte rätta behörighetsbitar på \"%s\""
 
-#: read-cache.c:3411
+#: read-cache.c:3439
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s: kan inte återgå till kö 0"
@@ -6718,9 +6924,9 @@ msgstr ""
 "Ombaseringen kommer dock att avbrytas om du tar bort allting.\n"
 "\n"
 
-#: rebase-interactive.c:113 rerere.c:469 rerere.c:676 sequencer.c:3883
-#: sequencer.c:3909 sequencer.c:5708 builtin/fsck.c:328 builtin/gc.c:1791
-#: builtin/rebase.c:190
+#: rebase-interactive.c:113 rerere.c:469 rerere.c:677 sequencer.c:3879
+#: sequencer.c:3905 sequencer.c:5681 builtin/fsck.c:328 builtin/gc.c:1791
+#: builtin/rebase.c:191
 #, c-format
 msgid "could not write '%s'"
 msgstr "kunde inte skriva \"%s\""
@@ -6764,7 +6970,7 @@ msgstr ""
 msgid "%s: 'preserve' superseded by 'merges'"
 msgstr "%s: \"preserve\" har ersatts av \"merges\""
 
-#: ref-filter.c:42 wt-status.c:2048
+#: ref-filter.c:42 wt-status.c:2057
 msgid "gone"
 msgstr "försvunnen"
 
@@ -6931,81 +7137,91 @@ msgstr "kommandot förkastar atom %%(%.*s)"
 msgid "--format=%.*s cannot be used with --python, --shell, --tcl"
 msgstr "--format=%.*s kan inte användas med --python, --shell, --tcl"
 
-#: ref-filter.c:1706
+#: ref-filter.c:1707
 #, c-format
 msgid "(no branch, rebasing %s)"
 msgstr "(ingen gren, ombaserar %s)"
 
-#: ref-filter.c:1709
+#: ref-filter.c:1710
 #, c-format
 msgid "(no branch, rebasing detached HEAD %s)"
 msgstr "(ingen gren, ombaserar frånkopplat HEAD %s)"
 
-#: ref-filter.c:1712
+#: ref-filter.c:1713
 #, c-format
 msgid "(no branch, bisect started on %s)"
 msgstr "(ingen gren, \"bisect\" startad på %s)"
 
-#: ref-filter.c:1716
+#: ref-filter.c:1717
 #, c-format
 msgid "(HEAD detached at %s)"
 msgstr "(HEAD frånkopplat vid %s)"
 
-#: ref-filter.c:1719
+#: ref-filter.c:1720
 #, c-format
 msgid "(HEAD detached from %s)"
 msgstr "(HEAD frånkopplat från %s)"
 
-#: ref-filter.c:1722
+#: ref-filter.c:1723
 msgid "(no branch)"
 msgstr "(ingen gren)"
 
-#: ref-filter.c:1754 ref-filter.c:1972
+#: ref-filter.c:1755 ref-filter.c:1973
 #, c-format
 msgid "missing object %s for %s"
 msgstr "objektet %s saknas för %s"
 
-#: ref-filter.c:1764
+#: ref-filter.c:1765
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer misslyckades på %s för %s"
 
-#: ref-filter.c:2155
+#: ref-filter.c:2156
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "felformat objekt vid \"%s\""
 
-#: ref-filter.c:2245
+#: ref-filter.c:2246
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "ignorerar referens med trasigt namn %s"
 
-#: ref-filter.c:2250 refs.c:676
+#: ref-filter.c:2251 refs.c:672
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "ignorerar trasig referens %s"
 
-#: ref-filter.c:2629
+#: ref-filter.c:2630
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "format: atomen %%(end) saknas"
 
-#: ref-filter.c:2740
+#: ref-filter.c:2741
 #, c-format
 msgid "malformed object name %s"
 msgstr "felformat objektnamn %s"
 
-#: ref-filter.c:2745
+#: ref-filter.c:2746
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "flaggan \"%s\" måste peka på en incheckning"
 
-#: refs.c:261
+#: reflog.c:407
+#, c-format
+msgid "not a reflog: %s"
+msgstr "inte en referenslogg: %s"
+
+#: reflog.c:410
+#, c-format
+msgid "no reflog for '%s'"
+msgstr "ingen referenslogg för \"%s\""
+
+#: refs.c:262
 #, c-format
 msgid "%s does not point to a valid object!"
 msgstr "\"%s\" pekar inte på ett giltigt objekt!"
 
-#: refs.c:563
+#: refs.c:561
 #, c-format
 msgid ""
 "Using '%s' as the name for the initial branch. This default branch name\n"
@@ -7030,81 +7246,81 @@ msgstr ""
 "\n"
 "\tgit branch -m <namn>\n"
 
-#: refs.c:585
+#: refs.c:583
 #, c-format
 msgid "could not retrieve `%s`"
 msgstr "kunde inte hämta \"%s\""
 
-#: refs.c:595
+#: refs.c:593
 #, c-format
 msgid "invalid branch name: %s = %s"
 msgstr "felaktigt namn på gren: %s = %s"
 
-#: refs.c:674
+#: refs.c:670
 #, c-format
 msgid "ignoring dangling symref %s"
 msgstr "ignorerar dinglande symbolisk referens %s"
 
-#: refs.c:925
+#: refs.c:919
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "loggen för referensen %s har lucka efter %s"
 
-#: refs.c:932
+#: refs.c:926
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr "loggen för referensen %s slutade oväntat på %s"
 
-#: refs.c:997
+#: refs.c:991
 #, c-format
 msgid "log for %s is empty"
 msgstr "loggen för %s är tom"
 
-#: refs.c:1090
+#: refs.c:1086
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "vägrar uppdatera referens med trasigt namn \"%s\""
 
-#: refs.c:1168
+#: refs.c:1164
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "update_ref misslyckades för referensen \"%s\": %s"
 
-#: refs.c:2067
+#: refs.c:2059
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "flera uppdateringar för referensen \"%s\" tillåts inte"
 
-#: refs.c:2150
+#: refs.c:2145
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "referensuppdateringar förbjudna i karantänmiljö"
 
-#: refs.c:2161
+#: refs.c:2156
 msgid "ref updates aborted by hook"
 msgstr "referensuppdateringar avbrutna av krok"
 
-#: refs.c:2269 refs.c:2299
+#: refs.c:2264 refs.c:2294
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "\"%s\" finns; kan inte skapa \"%s\""
 
-#: refs.c:2275 refs.c:2310
+#: refs.c:2270 refs.c:2305
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "kan inte hantera \"%s\" och \"%s\" samtidigt"
 
-#: refs/files-backend.c:1267
+#: refs/files-backend.c:1295
 #, c-format
 msgid "could not remove reference %s"
 msgstr "kunde inte ta bort referensen %s"
 
-#: refs/files-backend.c:1281 refs/packed-backend.c:1549
-#: refs/packed-backend.c:1559
+#: refs/files-backend.c:1310 refs/packed-backend.c:1565
+#: refs/packed-backend.c:1575
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr "kunde inte ta bort referensen %s: %s"
 
-#: refs/files-backend.c:1284 refs/packed-backend.c:1562
+#: refs/files-backend.c:1313 refs/packed-backend.c:1578
 #, c-format
 msgid "could not delete references: %s"
 msgstr "kunde inte ta bort referenser: %s"
@@ -7127,37 +7343,37 @@ msgstr "mer än en receivepack angavs, använder den första"
 msgid "more than one uploadpack given, using the first"
 msgstr "mer än en uploadpack angavs, använder den första"
 
-#: remote.c:699
+#: remote.c:698
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr "Kan inte hämta både %s och %s till %s"
 
-#: remote.c:703
+#: remote.c:702
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr "%s spårar vanligtvis %s, inte %s"
 
-#: remote.c:707
+#: remote.c:706
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr "%s spårar både %s och %s"
 
-#: remote.c:775
+#: remote.c:774
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr "nyckeln \"%s\" i mönstret innehåller ingen \"*\""
 
-#: remote.c:785
+#: remote.c:784
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr "värdet \"%s\" i mönstret innehåller ingen \"*\""
 
-#: remote.c:1192
+#: remote.c:1191
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "käll-referensspecifikationen %s motsvarar ingen"
 
-#: remote.c:1197
+#: remote.c:1196
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr "käll-referensspecifikationen %s motsvarar mer än en"
@@ -7166,7 +7382,7 @@ msgstr "käll-referensspecifikationen %s motsvarar mer än en"
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1212
+#: remote.c:1211
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -7189,7 +7405,7 @@ msgstr ""
 "\n"
 "Inget av dem fungerade, så vi gav upp. Ange fullständig referens."
 
-#: remote.c:1232
+#: remote.c:1231
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -7200,7 +7416,7 @@ msgstr ""
 "Var det meningen att skapa en ny gren genom att sända\n"
 "till \"%s:refs/heads/%s\"?"
 
-#: remote.c:1237
+#: remote.c:1236
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -7211,7 +7427,7 @@ msgstr ""
 "Var det meningen att skapa en ny tagg genom att sända\n"
 "till \"%s:refs/tags/%s\"?"
 
-#: remote.c:1242
+#: remote.c:1241
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -7222,7 +7438,7 @@ msgstr ""
 "Var det meningen att tagga ett nytt träd genom att sända\n"
 "till \"%s:refs/tags/%s\"?"
 
-#: remote.c:1247
+#: remote.c:1246
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -7233,114 +7449,114 @@ msgstr ""
 "Var det meningen att tagga en ny blob genom att sända\n"
 "till \"%s:refs/tags/%s\"?"
 
-#: remote.c:1283
+#: remote.c:1282
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "%s kan inte slås upp till en gren"
 
-#: remote.c:1294
+#: remote.c:1293
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "kan inte ta bort \"%s\": fjärreferensen finns inte"
 
-#: remote.c:1306
+#: remote.c:1305
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "fjärr-referensspecifikationen \"%s\" motsvarar mer än en"
 
-#: remote.c:1313
+#: remote.c:1312
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "fjärr-referensen \"%s\" hämtar från mer än en källa"
 
-#: remote.c:1834 remote.c:1941
+#: remote.c:1833 remote.c:1940
 msgid "HEAD does not point to a branch"
 msgstr "HEAD pekar inte på en gren"
 
-#: remote.c:1843
+#: remote.c:1842
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "okänd gren: \"%s\""
 
-#: remote.c:1846
+#: remote.c:1845
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "ingen standarduppström angiven för grenen \"%s\""
 
-#: remote.c:1852
+#: remote.c:1851
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "uppströmsgrenen \"%s\" är inte lagrad som en fjärrspårande gren"
 
-#: remote.c:1867
+#: remote.c:1866
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr "push-målet \"%s\" på fjärren \"%s\" har ingen lokalt spårande gren"
 
-#: remote.c:1882
+#: remote.c:1881
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "grenen \"%s\" har ingen fjärr för \"push\""
 
-#: remote.c:1892
+#: remote.c:1891
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "\"push\"-referensspecifikation för \"%s\" innehåller inte \"%s\""
 
-#: remote.c:1905
+#: remote.c:1904
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "\"push\" har inget mål (push.default är \"ingenting\")"
 
-#: remote.c:1927
+#: remote.c:1926
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "\"enkel push\" motsvarar flera olika mål"
 
-#: remote.c:2060
+#: remote.c:2059
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "Kunde inte hitta fjärr-referensen %s"
 
-#: remote.c:2073
+#: remote.c:2072
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* Ignorerar märklig referens \"%s\" lokalt"
 
-#: remote.c:2236
+#: remote.c:2235
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "Din gren är baserad på \"%s\", men den har försvunnit uppströms.\n"
 
-#: remote.c:2240
+#: remote.c:2239
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (använd \"git branch --unset-upstream\" för att rätta)\n"
 
-#: remote.c:2243
+#: remote.c:2242
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Din gren är à jour med \"%s\".\n"
 
-#: remote.c:2247
+#: remote.c:2246
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Din gren och \"%s\" pekar på olika incheckningar.\n"
 
-#: remote.c:2250
+#: remote.c:2249
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (använd \"%s\" för detaljer)\n"
 
-#: remote.c:2254
+#: remote.c:2253
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "Din gren ligger före \"%s\" med %d incheckning.\n"
 msgstr[1] "Din gren ligger före \"%s\" med %d incheckningar.\n"
 
-#: remote.c:2260
+#: remote.c:2259
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (använd \"git push\" för att publicera dina lokala incheckningar)\n"
 
-#: remote.c:2263
+#: remote.c:2262
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -7350,11 +7566,11 @@ msgstr[0] ""
 msgstr[1] ""
 "Din gren ligger efter \"%s\" med %d incheckningar, och kan snabbspolas.\n"
 
-#: remote.c:2271
+#: remote.c:2270
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (använd \"git pull\" för att uppdatera din lokala gren)\n"
 
-#: remote.c:2274
+#: remote.c:2273
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -7369,11 +7585,11 @@ msgstr[1] ""
 "Din gren och \"%s\" har divergerat,\n"
 "och har %d respektive %d olika incheckningar.\n"
 
-#: remote.c:2284
+#: remote.c:2283
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (använd \"git pull\" för att slå ihop fjärrgrenen med din egen)\n"
 
-#: remote.c:2476
+#: remote.c:2475
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "kan inte tolka förväntat objektnamn \"%s\""
@@ -7411,104 +7627,108 @@ msgstr "fel vid skrivning av \"%s\" (%s)"
 msgid "failed to flush '%s'"
 msgstr "misslyckades spola \"%s\""
 
-#: rerere.c:487 rerere.c:1023
+#: rerere.c:487 rerere.c:1024
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
 msgstr "kunde inte tolka konflikt-stycket i \"%s\""
 
-#: rerere.c:668
+#: rerere.c:669
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr "\"utime()\" misslyckades på \"%s\""
 
-#: rerere.c:678
+#: rerere.c:679
 #, c-format
 msgid "writing '%s' failed"
 msgstr "misslyckades skriva \"%s\""
 
-#: rerere.c:698
+#: rerere.c:699
 #, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr "Köade \"%s\" med sparad lösning."
 
-#: rerere.c:737
+#: rerere.c:738
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr "Sparade lösning för \"%s\"."
 
-#: rerere.c:772
+#: rerere.c:773
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr "Löste \"%s\" med tidigare lösning."
 
-#: rerere.c:787
+#: rerere.c:788
 #, c-format
 msgid "cannot unlink stray '%s'"
 msgstr "kan inte ta bort lös länk \"%s\""
 
-#: rerere.c:791
+#: rerere.c:792
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr "Sparade förhandsbild för \"%s\""
 
-#: rerere.c:865 submodule.c:2121 builtin/log.c:2017
-#: builtin/submodule--helper.c:1777 builtin/submodule--helper.c:1820
+#: rerere.c:866 submodule.c:2290 builtin/log.c:2042
+#: builtin/submodule--helper.c:1786 builtin/submodule--helper.c:1833
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "kunde inte skapa katalogen \"%s\""
 
-#: rerere.c:1041
+#: rerere.c:1042
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr "misslyckades uppdatera tillstånd för sammanslagningsproblem i \"%s\""
 
-#: rerere.c:1052 rerere.c:1059
+#: rerere.c:1053 rerere.c:1060
 #, c-format
 msgid "no remembered resolution for '%s'"
 msgstr "inget sparat sammanslagningsresultat för \"%s\""
 
-#: rerere.c:1061
+#: rerere.c:1062
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr "kan inte ta bort länken \"%s\""
 
-#: rerere.c:1071
+#: rerere.c:1072
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr "Uppdaterade förhandsbild för \"%s\""
 
-#: rerere.c:1080
+#: rerere.c:1081
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr "Glömde lösning för \"%s\"\n"
 
-#: rerere.c:1191
+#: rerere.c:1192
 msgid "unable to open rr-cache directory"
 msgstr "kan inte uppdatera katalogen rr-cache"
 
-#: reset.c:42
+#: reset.c:112
 msgid "could not determine HEAD revision"
 msgstr "kunde inte bestämma HEAD-revision"
 
-#: reset.c:70 reset.c:76 sequencer.c:3700
+#: reset.c:141 reset.c:147 sequencer.c:3696
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "kunde inte hitta trädet för %s."
 
-#: revision.c:2347
+#: revision.c:2358
 msgid "--unpacked=<packfile> no longer supported"
 msgstr "--unpacked=<paketfil> stöds inte längre"
 
-#: revision.c:2686
+#: revision.c:2712
 msgid "your current branch appears to be broken"
 msgstr "din nuvarande gren verkar vara trasig"
 
-#: revision.c:2689
+#: revision.c:2715
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "din nuvarande gren \"%s\" innehåller ännu inte några incheckningar"
 
-#: revision.c:2891
+#: revision.c:2901
+msgid "object filtering requires --objects"
+msgstr "objektfiltrering kräver --objects"
+
+#: revision.c:2918
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L stöder ännu inte andra diff-format än -p och -s"
 
@@ -7577,7 +7797,7 @@ msgstr "felaktigt incheckningsmeddelandestädningsläge \"%s\""
 msgid "could not delete '%s'"
 msgstr "kunde inte ta bort \"%s\""
 
-#: sequencer.c:345 sequencer.c:4751 builtin/rebase.c:563 builtin/rebase.c:1297
+#: sequencer.c:345 sequencer.c:4724 builtin/rebase.c:564 builtin/rebase.c:1326
 #: builtin/rm.c:409
 #, c-format
 msgid "could not remove '%s'"
@@ -7640,13 +7860,13 @@ msgstr ""
 "För att avbryta och återgå till där du var före \"git revert\",\n"
 "kör \"git revert --abort\"."
 
-#: sequencer.c:448 sequencer.c:3292
+#: sequencer.c:448 sequencer.c:3288
 #, c-format
 msgid "could not lock '%s'"
 msgstr "kunde inte låsa \"%s\""
 
-#: sequencer.c:450 sequencer.c:3091 sequencer.c:3296 sequencer.c:3310
-#: sequencer.c:3561 sequencer.c:5618 strbuf.c:1188 wrapper.c:639
+#: sequencer.c:450 sequencer.c:3087 sequencer.c:3292 sequencer.c:3306
+#: sequencer.c:3557 sequencer.c:5591 strbuf.c:1189 wrapper.c:715
 #, c-format
 msgid "could not write to '%s'"
 msgstr "kunde inte skriva till \"%s\""
@@ -7656,14 +7876,14 @@ msgstr "kunde inte skriva till \"%s\""
 msgid "could not write eol to '%s'"
 msgstr "kunde inte skriva radslut till \"%s\""
 
-#: sequencer.c:460 sequencer.c:3096 sequencer.c:3298 sequencer.c:3312
-#: sequencer.c:3569
+#: sequencer.c:460 sequencer.c:3092 sequencer.c:3294 sequencer.c:3308
+#: sequencer.c:3565
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "misslyckades färdigställa \"%s\""
 
-#: sequencer.c:473 sequencer.c:1934 sequencer.c:3116 sequencer.c:3551
-#: sequencer.c:3679 builtin/am.c:289 builtin/commit.c:834 builtin/merge.c:1148
+#: sequencer.c:473 sequencer.c:1930 sequencer.c:3112 sequencer.c:3547
+#: sequencer.c:3675 builtin/am.c:290 builtin/commit.c:837 builtin/merge.c:1154
 #, c-format
 msgid "could not read '%s'"
 msgstr "kunde inte läsa \"%s\""
@@ -7682,7 +7902,7 @@ msgstr "checka in dina ändringar eller använd \"stash\" för att fortsätta."
 msgid "%s: fast-forward"
 msgstr "%s: snabbspola"
 
-#: sequencer.c:574 builtin/tag.c:614
+#: sequencer.c:574 builtin/tag.c:615
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Felaktigt städningsläge %s"
@@ -7713,8 +7933,8 @@ msgstr "ingen nyckel i  \"%.*s\""
 msgid "unable to dequote value of '%s'"
 msgstr "kan inte ta bort citering av värdet \"%s\""
 
-#: sequencer.c:841 wrapper.c:209 wrapper.c:379 builtin/am.c:756
-#: builtin/am.c:848 builtin/rebase.c:694
+#: sequencer.c:841 wrapper.c:219 wrapper.c:389 builtin/am.c:757
+#: builtin/am.c:849 builtin/rebase.c:699
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "kunde inte öppna \"%s\" för läsning"
@@ -7833,351 +8053,346 @@ msgstr ""
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1288
+#: sequencer.c:1287
 msgid "couldn't look up newly created commit"
 msgstr "kunde inte slå upp en precis skapad incheckning"
 
-#: sequencer.c:1290
+#: sequencer.c:1289
 msgid "could not parse newly created commit"
 msgstr "kunde inte tolka en precis skapad incheckning"
 
-#: sequencer.c:1339
+#: sequencer.c:1336
 msgid "unable to resolve HEAD after creating commit"
 msgstr "kunde inte bestämma HEAD efter att ha skapat incheckning"
 
-#: sequencer.c:1342
+#: sequencer.c:1338
 msgid "detached HEAD"
 msgstr "frånkopplad HEAD"
 
-#: sequencer.c:1346
+#: sequencer.c:1342
 msgid " (root-commit)"
 msgstr " (rotincheckning)"
 
-#: sequencer.c:1367
+#: sequencer.c:1363
 msgid "could not parse HEAD"
 msgstr "kunde inte tolka HEAD"
 
-#: sequencer.c:1369
+#: sequencer.c:1365
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s är inte en incheckning!"
 
-#: sequencer.c:1373 sequencer.c:1451 builtin/commit.c:1708
+#: sequencer.c:1369 sequencer.c:1447 builtin/commit.c:1707
 msgid "could not parse HEAD commit"
 msgstr "kunde inte tolka HEAD:s incheckning"
 
-#: sequencer.c:1429 sequencer.c:2314
+#: sequencer.c:1425 sequencer.c:2310
 msgid "unable to parse commit author"
 msgstr "kunde inte tolka incheckningens författare"
 
-#: sequencer.c:1440 builtin/am.c:1643 builtin/merge.c:710
+#: sequencer.c:1436 builtin/am.c:1644 builtin/merge.c:710
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree misslyckades skriva ett träd"
 
-#: sequencer.c:1473 sequencer.c:1593
+#: sequencer.c:1469 sequencer.c:1589
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "kunde inte läsa incheckningsmeddelande från \"%s\""
 
-#: sequencer.c:1504 sequencer.c:1536
+#: sequencer.c:1500 sequencer.c:1532
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr "ogiltig författar-identitet \"%s\""
 
-#: sequencer.c:1510
+#: sequencer.c:1506
 msgid "corrupt author: missing date information"
 msgstr "trasig författare: saknar datuminformation"
 
-#: sequencer.c:1549 builtin/am.c:1670 builtin/commit.c:1822 builtin/merge.c:915
-#: builtin/merge.c:940 t/helper/test-fast-rebase.c:78
+#: sequencer.c:1545 builtin/am.c:1671 builtin/commit.c:1821 builtin/merge.c:921
+#: builtin/merge.c:946 t/helper/test-fast-rebase.c:78
 msgid "failed to write commit object"
 msgstr "kunde inte skriva incheckningsobjekt"
 
-#: sequencer.c:1576 sequencer.c:4523 t/helper/test-fast-rebase.c:199
+#: sequencer.c:1572 sequencer.c:4496 t/helper/test-fast-rebase.c:199
 #: t/helper/test-fast-rebase.c:217
 #, c-format
 msgid "could not update %s"
 msgstr "kunde inte uppdatera %s"
 
-#: sequencer.c:1625
+#: sequencer.c:1621
 #, c-format
 msgid "could not parse commit %s"
 msgstr "kunde inte tolka incheckningen %s"
 
-#: sequencer.c:1630
+#: sequencer.c:1626
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "kunde inte tolka föräldraincheckningen %s"
 
-#: sequencer.c:1713 sequencer.c:1994
+#: sequencer.c:1709 sequencer.c:1990
 #, c-format
 msgid "unknown command: %d"
 msgstr "okänt kommando: %d"
 
-#: sequencer.c:1755
+#: sequencer.c:1751
 msgid "This is the 1st commit message:"
 msgstr "Det här är 1:a incheckningsmeddelandet:"
 
-#: sequencer.c:1756
+#: sequencer.c:1752
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Det här är incheckningsmeddelande %d:"
 
-#: sequencer.c:1757
+#: sequencer.c:1753
 msgid "The 1st commit message will be skipped:"
 msgstr "1:a incheckningsmeddelandet kommer hoppas över:"
 
-#: sequencer.c:1758
+#: sequencer.c:1754
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "Incheckningsmeddelande %d kommer hoppas över:"
 
-#: sequencer.c:1759
+#: sequencer.c:1755
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "Det här är en kombination av %d incheckningar."
 
-#: sequencer.c:1906 sequencer.c:1963
+#: sequencer.c:1902 sequencer.c:1959
 #, c-format
 msgid "cannot write '%s'"
 msgstr "kan inte skriva \"%s\""
 
-#: sequencer.c:1953
+#: sequencer.c:1949
 msgid "need a HEAD to fixup"
 msgstr "behöver en HEAD-incheckning att rätta"
 
-#: sequencer.c:1955 sequencer.c:3596
+#: sequencer.c:1951 sequencer.c:3592
 msgid "could not read HEAD"
 msgstr "kunde inte läsa HEAD"
 
-#: sequencer.c:1957
+#: sequencer.c:1953
 msgid "could not read HEAD's commit message"
 msgstr "kunde inte läsa HEAD:s incheckningsmeddelande"
 
-#: sequencer.c:1981
+#: sequencer.c:1977
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "kunde inte läsa incheckningsmeddelande för %s"
 
-#: sequencer.c:2091
+#: sequencer.c:2087
 msgid "your index file is unmerged."
 msgstr "din indexfil har inte slagits ihop."
 
-#: sequencer.c:2098
+#: sequencer.c:2094
 msgid "cannot fixup root commit"
 msgstr "kan inte göra \"fixup\" på rotincheckning"
 
-#: sequencer.c:2117
+#: sequencer.c:2113
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "incheckning %s är en sammanslagning, men flaggan -m angavs inte."
 
-#: sequencer.c:2125 sequencer.c:2133
+#: sequencer.c:2121 sequencer.c:2129
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "incheckning %s har inte förälder %d"
 
-#: sequencer.c:2139
+#: sequencer.c:2135
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "kan inte hämta incheckningsmeddelande för %s"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:2158
+#: sequencer.c:2154
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: kan inte tolka föräldraincheckningen %s"
 
-#: sequencer.c:2224
+#: sequencer.c:2220
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "kunde inte byta namn på \"%s\" till \"%s\""
 
-#: sequencer.c:2284
+#: sequencer.c:2280
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "kunde inte ångra %s... %s"
 
-#: sequencer.c:2285
+#: sequencer.c:2281
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "kunde inte tillämpa %s... %s"
 
-#: sequencer.c:2306
+#: sequencer.c:2302
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr "utelämnar %s %s -- patchinnehållet finns redan uppströms\n"
 
-#: sequencer.c:2364
+#: sequencer.c:2360
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: misslyckades läsa indexet"
 
-#: sequencer.c:2372
+#: sequencer.c:2368
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: misslyckades uppdatera indexet"
 
-#: sequencer.c:2452
+#: sequencer.c:2448
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s tar inte argument: \"%s\""
 
-#: sequencer.c:2461
+#: sequencer.c:2457
 #, c-format
 msgid "missing arguments for %s"
 msgstr "argument saknas för %s"
 
-#: sequencer.c:2504
+#: sequencer.c:2500
 #, c-format
 msgid "could not parse '%s'"
 msgstr "kunde inte tolka \"%s\""
 
-#: sequencer.c:2565
+#: sequencer.c:2561
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "ogiltig rad %d: %.*s"
 
-#: sequencer.c:2576
+#: sequencer.c:2572
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "kan inte utföra \"%s\" utan en föregående incheckning"
 
-#: sequencer.c:2624 builtin/rebase.c:184
+#: sequencer.c:2620 builtin/rebase.c:185
 #, c-format
 msgid "could not read '%s'."
 msgstr "kunde inte läsa \"%s\"."
 
-#: sequencer.c:2662
+#: sequencer.c:2658
 msgid "cancelling a cherry picking in progress"
 msgstr "avbryter pågående \"cherry-pick\""
 
-#: sequencer.c:2671
+#: sequencer.c:2667
 msgid "cancelling a revert in progress"
 msgstr "avbryter pågående \"revert\""
 
-#: sequencer.c:2711
+#: sequencer.c:2707
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "rätta det med \"git rebase --edit-todo\"."
 
-#: sequencer.c:2713
+#: sequencer.c:2709
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "oanvändbart manus: \"%s\""
 
-#: sequencer.c:2718
+#: sequencer.c:2714
 msgid "no commits parsed."
 msgstr "inga incheckningar lästes."
 
-#: sequencer.c:2729
+#: sequencer.c:2725
 msgid "cannot cherry-pick during a revert."
 msgstr "kan inte utföra \"cherry-pick\" under en \"revert\"."
 
-#: sequencer.c:2731
+#: sequencer.c:2727
 msgid "cannot revert during a cherry-pick."
 msgstr "kan inte utföra \"revert\" under en \"cherry-pick\"."
 
-#: sequencer.c:2809
-#, c-format
-msgid "invalid value for %s: %s"
-msgstr "felaktigt värde för %s: %s"
-
-#: sequencer.c:2918
+#: sequencer.c:2914
 msgid "unusable squash-onto"
 msgstr "oanvändbar squash-onto"
 
-#: sequencer.c:2938
+#: sequencer.c:2934
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "trasigt manus: \"%s\""
 
-#: sequencer.c:3033 sequencer.c:4902
+#: sequencer.c:3029 sequencer.c:4875
 msgid "empty commit set passed"
 msgstr "den angivna uppsättningen incheckningar är tom"
 
-#: sequencer.c:3050
+#: sequencer.c:3046
 msgid "revert is already in progress"
 msgstr "en \"revert\" pågår redan"
 
-#: sequencer.c:3052
+#: sequencer.c:3048
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "testa \"git revert (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:3055
+#: sequencer.c:3051
 msgid "cherry-pick is already in progress"
 msgstr "en \"cherry-pick\" pågår redan"
 
-#: sequencer.c:3057
+#: sequencer.c:3053
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "testa \"git cherry-pick (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:3071
+#: sequencer.c:3067
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "kunde inte skapa \"sequencer\"-katalogen \"%s\""
 
-#: sequencer.c:3086
+#: sequencer.c:3082
 msgid "could not lock HEAD"
 msgstr "kunde inte låsa HEAD"
 
-#: sequencer.c:3146 sequencer.c:4612
+#: sequencer.c:3142 sequencer.c:4585
 msgid "no cherry-pick or revert in progress"
 msgstr "ingen \"cherry-pick\" eller \"revert\" pågår"
 
-#: sequencer.c:3148 sequencer.c:3159
+#: sequencer.c:3144 sequencer.c:3155
 msgid "cannot resolve HEAD"
 msgstr "kan inte bestämma HEAD"
 
-#: sequencer.c:3150 sequencer.c:3194
+#: sequencer.c:3146 sequencer.c:3190
 msgid "cannot abort from a branch yet to be born"
 msgstr "kan inte avbryta från en gren som ännu inte är född"
 
-#: sequencer.c:3180 builtin/fetch.c:1004 builtin/fetch.c:1416
-#: builtin/grep.c:772
+#: sequencer.c:3176 builtin/fetch.c:1030 builtin/fetch.c:1457
+#: builtin/grep.c:774
 #, c-format
 msgid "cannot open '%s'"
 msgstr "kan inte öppna \"%s\""
 
-#: sequencer.c:3182
+#: sequencer.c:3178
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "kan inte läsa \"%s\": %s"
 
-#: sequencer.c:3183
+#: sequencer.c:3179
 msgid "unexpected end of file"
 msgstr "oväntat filslut"
 
-#: sequencer.c:3189
+#: sequencer.c:3185
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "sparad HEAD-fil från före \"cherry-pick\", \"%s\", är trasig"
 
-#: sequencer.c:3200
+#: sequencer.c:3196
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr ""
 "Du verkar ha flyttat HEAD.\n"
 "Spolar inte tillbaka, kontrollera HEAD!"
 
-#: sequencer.c:3241
+#: sequencer.c:3237
 msgid "no revert in progress"
 msgstr "ingen \"revers\" pågår"
 
-#: sequencer.c:3250
+#: sequencer.c:3246
 msgid "no cherry-pick in progress"
 msgstr "ingen \"cherry-pick\" pågår"
 
-#: sequencer.c:3260
+#: sequencer.c:3256
 msgid "failed to skip the commit"
 msgstr "kunde inte hoppa över incheckningen"
 
-#: sequencer.c:3267
+#: sequencer.c:3263
 msgid "there is nothing to skip"
 msgstr "ingenting att hoppa över"
 
-#: sequencer.c:3270
+#: sequencer.c:3266
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -8186,16 +8401,16 @@ msgstr ""
 "har du redan checkat in?\n"
 "testa \"git %s --continue\""
 
-#: sequencer.c:3432 sequencer.c:4503
+#: sequencer.c:3428 sequencer.c:4476
 msgid "cannot read HEAD"
 msgstr "kan inte läsa HEAD"
 
-#: sequencer.c:3449
+#: sequencer.c:3445
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "kan inte kopiera in \"%s\" till \"%s\""
 
-#: sequencer.c:3457
+#: sequencer.c:3453
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -8214,27 +8429,27 @@ msgstr ""
 "\n"
 "\tgit rebase --continue\n"
 
-#: sequencer.c:3467
+#: sequencer.c:3463
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "Kunde inte tillämpa %s... %.*s"
 
-#: sequencer.c:3474
+#: sequencer.c:3470
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "Kunde inte slå ihop %.*s"
 
-#: sequencer.c:3488 sequencer.c:3492 builtin/difftool.c:633
+#: sequencer.c:3484 sequencer.c:3488 builtin/difftool.c:633
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "kunde inte kopiera in \"%s\" till \"%s\""
 
-#: sequencer.c:3503
+#: sequencer.c:3499
 #, c-format
 msgid "Executing: %s\n"
 msgstr "Kör: %s\n"
 
-#: sequencer.c:3514
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -8249,11 +8464,11 @@ msgstr ""
 "\tgit rebase --continue\n"
 "\n"
 
-#: sequencer.c:3520
+#: sequencer.c:3516
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "och gjorde ändringar till indexet och/eller arbetskatalogen\n"
 
-#: sequencer.c:3526
+#: sequencer.c:3522
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -8270,90 +8485,90 @@ msgstr ""
 "\tgit rebase --continue\n"
 "\n"
 
-#: sequencer.c:3586
+#: sequencer.c:3582
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "ogiltigt etikettnamn: \"%.*s\""
 
-#: sequencer.c:3659
+#: sequencer.c:3655
 msgid "writing fake root commit"
 msgstr "skriver fejkad rotincheckning"
 
-#: sequencer.c:3664
+#: sequencer.c:3660
 msgid "writing squash-onto"
 msgstr "skriver squash-onto"
 
-#: sequencer.c:3743
+#: sequencer.c:3739
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "kunde inte upplösa \"%s\""
 
-#: sequencer.c:3775
+#: sequencer.c:3771
 msgid "cannot merge without a current revision"
 msgstr "kan inte slå ihop utan en aktuell incheckning"
 
-#: sequencer.c:3797
+#: sequencer.c:3793
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "kan inte tolka \"%.*s\""
 
-#: sequencer.c:3806
+#: sequencer.c:3802
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "inget att slå samman: \"%.*s\""
 
-#: sequencer.c:3818
+#: sequencer.c:3814
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr "\"octopus\"-sammanslagning kan inte köras ovanpå en [ny rot]"
 
-#: sequencer.c:3873
+#: sequencer.c:3869
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "kunde inte läsa incheckningsmeddelande för \"%s\""
 
-#: sequencer.c:4019
+#: sequencer.c:4013
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "kunde inte ens försöka slå ihop \"%.*s\""
 
-#: sequencer.c:4035
+#: sequencer.c:4029
 msgid "merge: Unable to write new index file"
 msgstr "sammanslagning: Kunde inte skriva ny indexfil"
 
-#: sequencer.c:4116
+#: sequencer.c:4110
 msgid "Cannot autostash"
 msgstr "Kan inte utföra \"autostash\""
 
-#: sequencer.c:4119
+#: sequencer.c:4113
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Oväntat svar från stash: \"%s\""
 
-#: sequencer.c:4125
+#: sequencer.c:4119
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "Kunde inte skapa katalog för \"%s\""
 
-#: sequencer.c:4128
+#: sequencer.c:4122
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Skapade autostash: %s\n"
 
-#: sequencer.c:4132
+#: sequencer.c:4124
 msgid "could not reset --hard"
 msgstr "kunde inte utföra \"reset --hard\""
 
-#: sequencer.c:4157
+#: sequencer.c:4148
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Tillämpade autostash.\n"
 
-#: sequencer.c:4169
+#: sequencer.c:4160
 #, c-format
 msgid "cannot store %s"
 msgstr "kan inte spara %s"
 
-#: sequencer.c:4172
+#: sequencer.c:4163
 #, c-format
 msgid ""
 "%s\n"
@@ -8364,29 +8579,29 @@ msgstr ""
 "Dina ändringar är säkra i stashen.\n"
 "Du kan när som helst använda \"git stash pop\" eller \"git stash drop\".\n"
 
-#: sequencer.c:4177
+#: sequencer.c:4168
 msgid "Applying autostash resulted in conflicts."
 msgstr "Tillämpning av autostash gav konflikter."
 
-#: sequencer.c:4178
+#: sequencer.c:4169
 msgid "Autostash exists; creating a new stash entry."
 msgstr "Autostash finns; skapar ny stash-post."
 
-#: sequencer.c:4252
+#: sequencer.c:4225
 msgid "could not detach HEAD"
 msgstr "kunde inte koppla från HEAD"
 
-#: sequencer.c:4267
+#: sequencer.c:4240
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "Stoppade på HEAD\n"
 
-#: sequencer.c:4269
+#: sequencer.c:4242
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Stoppade på %s\n"
 
-#: sequencer.c:4301
+#: sequencer.c:4274
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -8407,58 +8622,58 @@ msgstr ""
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:4347
+#: sequencer.c:4320
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "Ombaserar (%d/%d)%s"
 
-#: sequencer.c:4393
+#: sequencer.c:4366
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Stoppade på %s... %.*s\n"
 
-#: sequencer.c:4463
+#: sequencer.c:4436
 #, c-format
 msgid "unknown command %d"
 msgstr "okänt kommando %d"
 
-#: sequencer.c:4511
+#: sequencer.c:4484
 msgid "could not read orig-head"
 msgstr "kunde inte läsa orig-head"
 
-#: sequencer.c:4516
+#: sequencer.c:4489
 msgid "could not read 'onto'"
 msgstr "kunde inte läsa \"onto\""
 
-#: sequencer.c:4530
+#: sequencer.c:4503
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "kunde inte uppdatera HEAD till %s"
 
-#: sequencer.c:4590
+#: sequencer.c:4563
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "Lyckades ombasera och uppdatera %s.\n"
 
-#: sequencer.c:4642
+#: sequencer.c:4615
 msgid "cannot rebase: You have unstaged changes."
 msgstr "kan inte ombasera: Du har oköade ändringar."
 
-#: sequencer.c:4651
+#: sequencer.c:4624
 msgid "cannot amend non-existing commit"
 msgstr "kan inte lägga till incheckning som inte finns"
 
-#: sequencer.c:4653
+#: sequencer.c:4626
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "ogiltig fil: \"%s\""
 
-#: sequencer.c:4655
+#: sequencer.c:4628
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "ogiltigt innehåll: \"%s\""
 
-#: sequencer.c:4658
+#: sequencer.c:4631
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -8468,68 +8683,68 @@ msgstr ""
 "Du har ändringar i arbetskatalogen som inte checkats in. Checka in dem\n"
 "först och kör sedan \"git rebase --continue\" igen."
 
-#: sequencer.c:4694 sequencer.c:4733
+#: sequencer.c:4667 sequencer.c:4706
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "kunde inte skriva fil: \"%s\""
 
-#: sequencer.c:4749
+#: sequencer.c:4722
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "kunde inte ta bort CHERRY_PICK_HEAD"
 
-#: sequencer.c:4759
+#: sequencer.c:4732
 msgid "could not commit staged changes."
 msgstr "kunde inte checka in köade ändringar."
 
-#: sequencer.c:4879
+#: sequencer.c:4852
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: kan inte göra \"cherry-pick\" på typen \"%s\""
 
-#: sequencer.c:4883
+#: sequencer.c:4856
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: felaktig revision"
 
-#: sequencer.c:4918
+#: sequencer.c:4891
 msgid "can't revert as initial commit"
 msgstr "kan inte ångra som första incheckning"
 
-#: sequencer.c:5189 sequencer.c:5418
+#: sequencer.c:5162 sequencer.c:5391
 #, c-format
 msgid "skipped previously applied commit %s"
 msgstr "hoppade över tidigare applicerad incheckning %s"
 
-#: sequencer.c:5259 sequencer.c:5434
+#: sequencer.c:5232 sequencer.c:5407
 msgid "use --reapply-cherry-picks to include skipped commits"
 msgstr "använd --reapply-cherry-picks för att ta med överhoppade incheckningar"
 
-#: sequencer.c:5405
+#: sequencer.c:5378
 msgid "make_script: unhandled options"
 msgstr "make_script: flaggor som inte stöds"
 
-#: sequencer.c:5408
+#: sequencer.c:5381
 msgid "make_script: error preparing revisions"
 msgstr "make_script: fel när revisioner skulle förberedas"
 
-#: sequencer.c:5666 sequencer.c:5683
+#: sequencer.c:5639 sequencer.c:5656
 msgid "nothing to do"
 msgstr "inget att göra"
 
-#: sequencer.c:5702
+#: sequencer.c:5675
 msgid "could not skip unnecessary pick commands"
 msgstr "kunde inte hoppa över onödiga \"pick\"-kommandon"
 
-#: sequencer.c:5802
+#: sequencer.c:5775
 msgid "the script was already rearranged."
 msgstr "skriptet har redan omordnats."
 
-#: setup.c:134
+#: setup.c:135
 #, c-format
 msgid "'%s' is outside repository at '%s'"
 msgstr "\"%s\" är utanför arkivet på \"%s\""
 
-#: setup.c:186
+#: setup.c:187
 #, c-format
 msgid ""
 "%s: no such path in the working tree.\n"
@@ -8539,7 +8754,7 @@ msgstr ""
 "Använd \"git <kommando> -- <sökväg>..\" för att ange sökvägar som inte finns "
 "lokalt."
 
-#: setup.c:199
+#: setup.c:200
 #, c-format
 msgid ""
 "ambiguous argument '%s': unknown revision or path not in the working tree.\n"
@@ -8551,12 +8766,12 @@ msgstr ""
 "Använd \"--\" för att skilja sökvägar från revisioner, så här:\n"
 "\"git <kommando> [<revision>...] -- [<fil>...]\""
 
-#: setup.c:265
+#: setup.c:266
 #, c-format
 msgid "option '%s' must come before non-option arguments"
 msgstr "flaggan \"%s\" måste anges före argument som inte är flaggor"
 
-#: setup.c:284
+#: setup.c:285
 #, c-format
 msgid ""
 "ambiguous argument '%s': both revision and filename\n"
@@ -8567,100 +8782,100 @@ msgstr ""
 "Använd \"--\" för att skilja sökvägar från revisioner, så här:\n"
 "\"git <kommando> [<revision>...] -- [<fil>...]\""
 
-#: setup.c:420
+#: setup.c:421
 msgid "unable to set up work tree using invalid config"
 msgstr "kan inte skapa arbetskatalog med felaktig konfiguration"
 
-#: setup.c:424 builtin/rev-parse.c:895
+#: setup.c:425 builtin/rev-parse.c:895
 msgid "this operation must be run in a work tree"
 msgstr "funktionen måste köras i en arbetskatalog"
 
-#: setup.c:722
+#: setup.c:724
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr "Förväntade git-arkivversion <= %d, hittade %d"
 
-#: setup.c:730
+#: setup.c:732
 msgid "unknown repository extension found:"
 msgid_plural "unknown repository extensions found:"
 msgstr[0] "okänd arkivutökning hittades:"
 msgstr[1] "okända arkivutökningar hittades:"
 
-#: setup.c:744
+#: setup.c:746
 msgid "repo version is 0, but v1-only extension found:"
 msgid_plural "repo version is 0, but v1-only extensions found:"
 msgstr[0] "arkivversionen är 0, men utökning som bara finns i v1 upptäcktes:"
 msgstr[1] "arkivversionen är 0, men utökningar som bara finns i v1 upptäcktes:"
 
-#: setup.c:765
+#: setup.c:767
 #, c-format
 msgid "error opening '%s'"
 msgstr "fel vid öppning av \"%s\""
 
-#: setup.c:767
+#: setup.c:769
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr "för stor för att vara en .git-fil: \"%s\""
 
-#: setup.c:769
+#: setup.c:771
 #, c-format
 msgid "error reading %s"
 msgstr "fel vid läsning av %s"
 
-#: setup.c:771
+#: setup.c:773
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr "ogiltigt gitfilformat: %s"
 
-#: setup.c:773
+#: setup.c:775
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr "ingen sökväg i gitfil: %s"
 
-#: setup.c:775
+#: setup.c:777
 #, c-format
 msgid "not a git repository: %s"
 msgstr "inte ett git-arkiv: %s"
 
-#: setup.c:877
+#: setup.c:879
 #, c-format
 msgid "'$%s' too big"
 msgstr "\"$%s\" för stor"
 
-#: setup.c:891
+#: setup.c:893
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr "inte ett git-arkiv: \"%s\""
 
-#: setup.c:920 setup.c:922 setup.c:953
+#: setup.c:922 setup.c:924 setup.c:955
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr "kan inte byta katalog (chdir) till \"%s\""
 
-#: setup.c:925 setup.c:981 setup.c:991 setup.c:1030 setup.c:1038
+#: setup.c:927 setup.c:983 setup.c:993 setup.c:1032 setup.c:1040
 msgid "cannot come back to cwd"
 msgstr "kan inte gå tillbaka till arbetskatalogen (cwd)"
 
-#: setup.c:1052
+#: setup.c:1054
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr "misslyckades ta status på \"%*ss%s%s\""
 
-#: setup.c:1295
+#: setup.c:1338
 msgid "Unable to read current working directory"
 msgstr "Kan inte läsa aktuell arbetskatalog"
 
-#: setup.c:1304 setup.c:1310
+#: setup.c:1347 setup.c:1353
 #, c-format
 msgid "cannot change to '%s'"
 msgstr "kan inte byta till \"%s\""
 
-#: setup.c:1315
+#: setup.c:1358
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
 msgstr "inte ett git-arkiv (eller någon av föräldrakatalogerna): %s"
 
-#: setup.c:1321
+#: setup.c:1364
 #, c-format
 msgid ""
 "not a git repository (or any parent up to mount point %s)\n"
@@ -8670,7 +8885,20 @@ msgstr ""
 "monteringspunkten %s)\n"
 "Stoppar vid filsystemsgräns (GIT_DISCOVERY_ACROSS_FILESYSTEM är inte satt)."
 
-#: setup.c:1446
+#: setup.c:1374
+#, c-format
+msgid ""
+"unsafe repository ('%s' is owned by someone else)\n"
+"To add an exception for this directory, call:\n"
+"\n"
+"\tgit config --global --add safe.directory %s"
+msgstr ""
+"osäkert arkiv (\"%s\" ägs av någon annan)\n"
+"För att lägga till ett undantag för denna katalog, kör:\n"
+"\n"
+"\tgit config --global --add safe.directory %s"
+
+#: setup.c:1502
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -8679,57 +8907,61 @@ msgstr ""
 "problem med filläges-värdet i core.sharedRepository (0%.3o).\n"
 "Ägaren av filerna måste alltid ha läs- och skrivbehörighet."
 
-#: setup.c:1508
+#: setup.c:1564
 msgid "fork failed"
 msgstr "\"fork\" misslyckades"
 
-#: setup.c:1513
+#: setup.c:1569
 msgid "setsid failed"
 msgstr "\"setsid\" misslyckades"
 
-#: sparse-index.c:289
+#: sparse-index.c:285
 #, c-format
 msgid "index entry is a directory, but not sparse (%08x)"
 msgstr "indexposten är en katalog, men inte gles (%08x)"
 
+#: split-index.c:9
+msgid "cannot use split index with a sparse index"
+msgstr "kan inte dela indexet med ett glest index"
+
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:850
+#: strbuf.c:851
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u,%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:852
+#: strbuf.c:853
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u,%2.2u GiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:860
+#: strbuf.c:861
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u,%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:862
+#: strbuf.c:863
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u,%2.2u MiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:869
+#: strbuf.c:870
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u,%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:871
+#: strbuf.c:872
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u,%2.2u KiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:877
+#: strbuf.c:878
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -8737,84 +8969,84 @@ msgstr[0] "%u byte"
 msgstr[1] "%u bytes"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:879
+#: strbuf.c:880
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
 msgstr[0] "%u byte/s"
 msgstr[1] "%u bytes/s"
 
-#: strbuf.c:1186 wrapper.c:207 wrapper.c:377 builtin/am.c:765
-#: builtin/rebase.c:650
+#: strbuf.c:1187 wrapper.c:217 wrapper.c:387 builtin/am.c:766
+#: builtin/rebase.c:653
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "kunde inte öppna \"%s\" för skrivning"
 
-#: strbuf.c:1195
+#: strbuf.c:1196
 #, c-format
 msgid "could not edit '%s'"
 msgstr "kunde inte redigera \"%s\""
 
-#: submodule-config.c:237
+#: submodule-config.c:238
 #, c-format
 msgid "ignoring suspicious submodule name: %s"
 msgstr "ignorerar misstänkt undermodulnamn: %s"
 
-#: submodule-config.c:304
+#: submodule-config.c:305
 msgid "negative values not allowed for submodule.fetchjobs"
 msgstr "negativa värden är inte tillåtna för submodule.fetchjobs"
 
-#: submodule-config.c:402
+#: submodule-config.c:403
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr "ignorerar \"%s\" som kan tolkas som en kommandoradsflagga: %s"
 
-#: submodule-config.c:499
+#: submodule-config.c:500 builtin/push.c:489 builtin/send-pack.c:148
 #, c-format
-msgid "invalid value for %s"
-msgstr "ogiltigt värde för %s"
+msgid "invalid value for '%s'"
+msgstr "ogiltigt värde för \"%s\""
 
-#: submodule-config.c:767
+#: submodule-config.c:828
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr "Kunde inte uppdatera .gitmodules-posten %s"
 
-#: submodule.c:114 submodule.c:143
+#: submodule.c:115 submodule.c:144
 msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
 msgstr ""
 "Kan inte ändra .gitmodules-fil som inte slagits ihop, lös "
 "sammanslagningskonflikter först"
 
-#: submodule.c:118 submodule.c:147
+#: submodule.c:119 submodule.c:148
 #, c-format
 msgid "Could not find section in .gitmodules where path=%s"
 msgstr "Hittade inte någon sektion i .gitmodules där sökväg=%s"
 
-#: submodule.c:154
+#: submodule.c:155
 #, c-format
 msgid "Could not remove .gitmodules entry for %s"
 msgstr "Kunde inte ta bort .gitmodules-posten för %s"
 
-#: submodule.c:165
+#: submodule.c:166
 msgid "staging updated .gitmodules failed"
 msgstr "misslyckades köa uppdaterad .gitmodules"
 
-#: submodule.c:358
+#: submodule.c:346
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "i ej utcheckad undermodul \"%s\""
 
-#: submodule.c:389
+#: submodule.c:377
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "Sökvägsangivelsen \"%s\" är i undermodulen \"%.*s\""
 
-#: submodule.c:466
+#: submodule.c:454
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "felaktigt argument till --ignore-submodules: %s"
 
-#: submodule.c:844
+#: submodule.c:866
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -8823,12 +9055,12 @@ msgstr ""
 "Undermodulen i incheckning %s på sökvägen: \"%s\" krockar med en undermodul "
 "med samma namn. Hoppar över den."
 
-#: submodule.c:954
+#: submodule.c:987
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr "undermodulposten \"%s\" (%s) är en %s, inte en incheckning"
 
-#: submodule.c:1042
+#: submodule.c:1069
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
@@ -8837,36 +9069,46 @@ msgstr ""
 "kunde inte köra \"git rev-list <incheckningar> --not --remotes -n 1\" i "
 "undermodulen \"%s\""
 
-#: submodule.c:1165
+#: submodule.c:1192
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "process för undermodulen \"%s\" misslyckades"
 
-#: submodule.c:1194 builtin/branch.c:699 builtin/submodule--helper.c:2714
+#: submodule.c:1221 builtin/branch.c:714 builtin/submodule--helper.c:2827
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "Misslyckades slå upp HEAD som giltig referens."
 
-#: submodule.c:1205
+#: submodule.c:1232
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "Sänder undermodulen \"%s\"\n"
 
-#: submodule.c:1208
+#: submodule.c:1235
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "Kunde inte sända undermodulen \"%s\"\n"
 
-#: submodule.c:1491
+#: submodule.c:1567
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "Hämtar undermodulen %s%s\n"
 
-#: submodule.c:1525
+#: submodule.c:1589
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "Kunde inte komma åt undermodulen \"%s\"\n"
 
-#: submodule.c:1680
+#: submodule.c:1618
+#, c-format
+msgid "Could not access submodule '%s' at commit %s\n"
+msgstr "Kunde inte komma åt undermodulen \"%s\" vid incheckningen %s\n"
+
+#: submodule.c:1629
+#, c-format
+msgid "Fetching submodule %s%s at commit %s\n"
+msgstr "Hämtar undermodulen %s%s vvid incheckningen %s\n"
+
+#: submodule.c:1849
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -8875,61 +9117,61 @@ msgstr ""
 "Fel vid hämtning av undermodul:\n"
 "%s"
 
-#: submodule.c:1705
+#: submodule.c:1874
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "\"%s\" känns inte igen som ett git-arkiv"
 
-#: submodule.c:1722
+#: submodule.c:1891
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr "Kunde inte köra \"git status --porcelain=2\" i undermodulen \"%s\""
 
-#: submodule.c:1763
+#: submodule.c:1932
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr "\"git status --porcelain=2\" misslyckades i undermodulen \"%s\""
 
-#: submodule.c:1838
+#: submodule.c:2007
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "kunde inte starta \"git status\" i undermodulen \"%s\""
 
-#: submodule.c:1851
+#: submodule.c:2020
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "kunde inte köra \"git status\" i undermodulen \"%s\""
 
-#: submodule.c:1868
+#: submodule.c:2037
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr "Kunde inte ta bort inställningen core.worktree i undermodulen \"%s\""
 
-#: submodule.c:1895 submodule.c:2210
+#: submodule.c:2064 submodule.c:2379
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr "kunde inte rekursera in i undermodulen \"%s\""
 
-#: submodule.c:1917
+#: submodule.c:2086
 msgid "could not reset submodule index"
 msgstr "kunde inte återställa indexet i undermodul"
 
-#: submodule.c:1959
+#: submodule.c:2128
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "undermodulen \"%s\" har ett smutsigt index"
 
-#: submodule.c:2013
+#: submodule.c:2182
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "Undermoduler \"%s\" kunde inte uppdateras."
 
-#: submodule.c:2081
+#: submodule.c:2250
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr "undermodul-gitkatalogen \"%s\" är inuti gitkatalogen \"%.*s\""
 
-#: submodule.c:2102
+#: submodule.c:2271
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -8937,17 +9179,17 @@ msgstr ""
 "relocate_gitdir för undermodulen \"%s\", som har mer än en arbetskatalog, "
 "stöds ej"
 
-#: submodule.c:2114 submodule.c:2174
+#: submodule.c:2283 submodule.c:2343
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "kunde inte slå upp namnet för undermodulen \"%s\""
 
-#: submodule.c:2118
+#: submodule.c:2287
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr "vägrar flytta \"%s\" till en befintlig gitkatalog"
 
-#: submodule.c:2124
+#: submodule.c:2293
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -8958,11 +9200,11 @@ msgstr ""
 "\"%s\" till\n"
 "\"%s\"\n"
 
-#: submodule.c:2255
+#: submodule.c:2424
 msgid "could not start ls-files in .."
 msgstr "kunde inte starta ls-files i .."
 
-#: submodule.c:2295
+#: submodule.c:2464
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree returnerade en oväntad returkod %d"
@@ -8983,8 +9225,8 @@ msgstr "misslyckades utföra släpradskommandot \"%s\""
 msgid "unknown value '%s' for key '%s'"
 msgstr "okänt värde \"%s\" för nyckeln \"%s\""
 
-#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
-#: builtin/remote.c:327
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:300
+#: builtin/remote.c:328
 #, c-format
 msgid "more than one %s"
 msgstr "mer än en %s"
@@ -8999,11 +9241,11 @@ msgstr "tom släpradssymbol i släpraden \"%.*s\""
 msgid "could not read input file '%s'"
 msgstr "kunde inte läsa indatafilen \"%s\""
 
-#: trailer.c:766 builtin/mktag.c:89 imap-send.c:1573
+#: trailer.c:766 builtin/mktag.c:88 imap-send.c:1563
 msgid "could not read from stdin"
 msgstr "kunde inte läsa från standard in"
 
-#: trailer.c:1024 wrapper.c:684
+#: trailer.c:1024 wrapper.c:760
 #, c-format
 msgid "could not stat %s"
 msgstr "kunde inte ta status på %s"
@@ -9073,7 +9315,7 @@ msgstr "kunde inte köra fast-import"
 msgid "error while running fast-import"
 msgstr "fel när fast-import kördes"
 
-#: transport-helper.c:549 transport-helper.c:1251
+#: transport-helper.c:549 transport-helper.c:1254
 #, c-format
 msgid "could not read ref %s"
 msgstr "kunde inte läsa referensen %s"
@@ -9091,7 +9333,7 @@ msgstr "protkollet stöder inte att sätta sökväg till fjärrtjänst"
 msgid "invalid remote service path"
 msgstr "felaktig sökväg till fjärrtjänst"
 
-#: transport-helper.c:661 transport.c:1479
+#: transport-helper.c:661 transport.c:1496
 msgid "operation not supported by protocol"
 msgstr "funktionen stöds inte av protokollet"
 
@@ -9100,72 +9342,72 @@ msgstr "funktionen stöds inte av protokollet"
 msgid "can't connect to subservice %s"
 msgstr "kan inte ansluta till undertjänsten %s"
 
-#: transport-helper.c:693 transport.c:404
+#: transport-helper.c:693 transport.c:415
 msgid "--negotiate-only requires protocol v2"
 msgstr "--negotiate-only kräver protokoll v2"
 
-#: transport-helper.c:755
+#: transport-helper.c:758
 msgid "'option' without a matching 'ok/error' directive"
 msgstr "\"option\" utan mostsvarande \"ok/error\"-direktiv"
 
-#: transport-helper.c:798
+#: transport-helper.c:801
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "förväntade ok/error, hjälpprogrammet svarade \"%s\""
 
-#: transport-helper.c:859
+#: transport-helper.c:862
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "hjälparen returnerade oväntad status %s"
 
-#: transport-helper.c:942
+#: transport-helper.c:945
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "hjälparen %s stöder inte dry-run"
 
-#: transport-helper.c:945
+#: transport-helper.c:948
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "hjälparen %s stöder inte --signed"
 
-#: transport-helper.c:948
+#: transport-helper.c:951
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "hjälparen %s stöder inte --signed=if-asked"
 
-#: transport-helper.c:953
+#: transport-helper.c:956
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr "hjälparen %s stöder inte --atomic"
 
-#: transport-helper.c:957
+#: transport-helper.c:960
 #, c-format
 msgid "helper %s does not support --%s"
 msgstr "hjälparen %s stöder inte --%s"
 
-#: transport-helper.c:964
+#: transport-helper.c:967
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "hjälparen %s stöder inte \"push-option\""
 
-#: transport-helper.c:1064
+#: transport-helper.c:1067
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr "fjärrhjälparen stöder inte push; referensspecifikation krävs"
 
-#: transport-helper.c:1069
+#: transport-helper.c:1072
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "hjälparen %s stöder inte \"force\""
 
-#: transport-helper.c:1116
+#: transport-helper.c:1119
 msgid "couldn't run fast-export"
 msgstr "kunde inte köra fast-export"
 
-#: transport-helper.c:1121
+#: transport-helper.c:1124
 msgid "error while running fast-export"
 msgstr "fel vid körning av fast-export"
 
-#: transport-helper.c:1146
+#: transport-helper.c:1149
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -9174,52 +9416,52 @@ msgstr ""
 "Inga gemensamma referenser och inga angavs; gör inget.\n"
 "Du kanske borde ange en gren.\n"
 
-#: transport-helper.c:1228
+#: transport-helper.c:1231
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr "objektformatet \"%s\" stöds ej"
 
-#: transport-helper.c:1237
+#: transport-helper.c:1240
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "felformat svar i referenslistan: %s"
 
-#: transport-helper.c:1389
+#: transport-helper.c:1392
 #, c-format
 msgid "read(%s) failed"
 msgstr "läs(%s) misslyckades"
 
-#: transport-helper.c:1416
+#: transport-helper.c:1419
 #, c-format
 msgid "write(%s) failed"
 msgstr "skriv(%s) misslyckades"
 
-#: transport-helper.c:1465
+#: transport-helper.c:1468
 #, c-format
 msgid "%s thread failed"
 msgstr "%s-tråden misslyckades"
 
-#: transport-helper.c:1469
+#: transport-helper.c:1472
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "%s-tråden misslyckades ansluta: %s"
 
-#: transport-helper.c:1488 transport-helper.c:1492
+#: transport-helper.c:1491 transport-helper.c:1495
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "kan inte starta tråd för kopiering av data: %s"
 
-#: transport-helper.c:1529
+#: transport-helper.c:1532
 #, c-format
 msgid "%s process failed to wait"
 msgstr "processen %s misslyckades vänta"
 
-#: transport-helper.c:1533
+#: transport-helper.c:1536
 #, c-format
 msgid "%s process failed"
 msgstr "processen %s misslyckades"
 
-#: transport-helper.c:1551 transport-helper.c:1560
+#: transport-helper.c:1554 transport-helper.c:1563
 msgid "can't start thread for copying data"
 msgstr "kan inte skapa tråd för kopiering av data"
 
@@ -9228,51 +9470,51 @@ msgstr "kan inte skapa tråd för kopiering av data"
 msgid "Would set upstream of '%s' to '%s' of '%s'\n"
 msgstr "Skulle sätta uppströms för \"%s\" till \"%s\" från \"%s\"\n"
 
-#: transport.c:145
+#: transport.c:138
 #, c-format
 msgid "could not read bundle '%s'"
 msgstr "kunde inte läsa bunten \"%s\""
 
-#: transport.c:227
+#: transport.c:234
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr "transport: ogiltig flagga för depth: \"%s\""
 
-#: transport.c:279
+#: transport.c:289
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "se protocol.version i \"git help config\" för mer information"
 
-#: transport.c:280
+#: transport.c:290
 msgid "server options require protocol version 2 or later"
 msgstr "serverflaggor kräver protokollversion 2 eller senare"
 
-#: transport.c:407
+#: transport.c:418
 msgid "server does not support wait-for-done"
 msgstr "servern stöder inte wait-for-done"
 
-#: transport.c:759
+#: transport.c:770
 msgid "could not parse transport.color.* config"
 msgstr "kunde inte tolka inställningen för transport.color.*"
 
-#: transport.c:834
+#: transport.c:845
 msgid "support for protocol v2 not implemented yet"
 msgstr "stöd för protokoll v2 ännu ej implementerat"
 
-#: transport.c:967
+#: transport.c:978
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "okänt värde för inställningen \"%s\": %s"
 
-#: transport.c:1033
+#: transport.c:1044
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "transporten \"%s\" tillåts inte"
 
-#: transport.c:1082
+#: transport.c:1093
 msgid "git-over-rsync is no longer supported"
 msgstr "git-over-rsync stöds inte längre"
 
-#: transport.c:1185
+#: transport.c:1196
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -9281,7 +9523,7 @@ msgstr ""
 "Följande undermodulsökvägar innehåller ändringar som\n"
 "inte kan hittas av fjärrarna:\n"
 
-#: transport.c:1189
+#: transport.c:1200
 #, c-format
 msgid ""
 "\n"
@@ -9308,11 +9550,11 @@ msgstr ""
 "för att sända dem till fjärren.\n"
 "\n"
 
-#: transport.c:1197
+#: transport.c:1208
 msgid "Aborting."
 msgstr "Avbryter."
 
-#: transport.c:1343
+#: transport.c:1354
 msgid "failed to push all needed submodules"
 msgstr "kunde inte sända alla nödvändiga undermoduler"
 
@@ -9596,16 +9838,16 @@ msgstr ""
 "sökvägar på ett okänsligt filsystem) och endast en från samma\n"
 "kollisionsgrupp finns i arbetskatalogen:\n"
 
-#: unpack-trees.c:1636
+#: unpack-trees.c:1664
 msgid "Updating index flags"
 msgstr "Uppdaterar indexflaggor"
 
-#: unpack-trees.c:2803
+#: unpack-trees.c:2925
 #, c-format
 msgid "worktree and untracked commit have duplicate entries: %s"
 msgstr "arbetskatalog och ospårad incheckning har dublettposter: %s"
 
-#: upload-pack.c:1565
+#: upload-pack.c:1579
 msgid "expected flush after fetch arguments"
 msgstr "förväntade \"flush\" efter \"fetch\"-argument"
 
@@ -9642,123 +9884,137 @@ msgstr "felaktigt \"..\"-sökvägssegment"
 msgid "Fetching objects"
 msgstr "Hämtar objekt"
 
-#: worktree.c:238 builtin/am.c:2209 builtin/bisect--helper.c:156
+#: worktree.c:237 builtin/am.c:2210 builtin/bisect--helper.c:156
 #, c-format
 msgid "failed to read '%s'"
 msgstr "misslyckades läsa \"%s\""
 
-#: worktree.c:305
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr "\"%s\" i huvudarbetskatalogen är inte arkivkatalogen"
 
-#: worktree.c:316
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr "filen \"%s\" innehåller inte absolut sökväg till arbetskatalogen"
 
-#: worktree.c:328
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr "\"%s\" finns inte"
 
-#: worktree.c:334
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr "\"%s\" är inte en .git-fil, felkod %d"
 
-#: worktree.c:343
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "\"%s\" pekar inte tillbaka till \"%s\""
 
-#: worktree.c:604
+#: worktree.c:600
 msgid "not a directory"
 msgstr "inte en katalog"
 
-#: worktree.c:613
+#: worktree.c:609
 msgid ".git is not a file"
 msgstr ".git är inte en fil"
 
-#: worktree.c:615
+#: worktree.c:611
 msgid ".git file broken"
 msgstr ".git-filen är trasig"
 
-#: worktree.c:617
+#: worktree.c:613
 msgid ".git file incorrect"
 msgstr ".git-filen är felaktig"
 
-#: worktree.c:723
+#: worktree.c:719
 msgid "not a valid path"
 msgstr "inte en giltig sökväg"
 
-#: worktree.c:729
+#: worktree.c:725
 msgid "unable to locate repository; .git is not a file"
 msgstr "hittar inte arkivet; .git är inte en fil"
 
-#: worktree.c:733
+#: worktree.c:729
 msgid "unable to locate repository; .git file does not reference a repository"
 msgstr "hittar inte arkivet; .git-filen hänvisar inte till ett arkiv"
 
-#: worktree.c:737
+#: worktree.c:733
 msgid "unable to locate repository; .git file broken"
 msgstr "hittar inte arkivet; .git-filen är trasig"
 
-#: worktree.c:743
+#: worktree.c:739
 msgid "gitdir unreadable"
 msgstr "gitdir är oläsbar"
 
-#: worktree.c:747
+#: worktree.c:743
 msgid "gitdir incorrect"
 msgstr "gitdir är felaktig"
 
-#: worktree.c:772
+#: worktree.c:768
 msgid "not a valid directory"
 msgstr "inte i en giltig katalog"
 
-#: worktree.c:778
+#: worktree.c:774
 msgid "gitdir file does not exist"
 msgstr "gitdir-filen existerar inte"
 
-#: worktree.c:783 worktree.c:792
+#: worktree.c:779 worktree.c:788
 #, c-format
 msgid "unable to read gitdir file (%s)"
 msgstr "kunde inte läsa gitdir-filen (%s)"
 
-#: worktree.c:802
+#: worktree.c:798
 #, c-format
 msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
 msgstr "kort läsning (förväntade %<PRIuMAX> byte, läste %<PRIuMAX>)"
 
-#: worktree.c:810
+#: worktree.c:806
 msgid "invalid gitdir file"
 msgstr "ogiltig gitdir-fil"
 
-#: worktree.c:818
+#: worktree.c:814
 msgid "gitdir file points to non-existent location"
 msgstr "gitdir-filen pekar på en ickeexisterande plats"
 
-#: wrapper.c:151
+#: worktree.c:830
+#, c-format
+msgid "unable to set %s in '%s'"
+msgstr "kan inte sätta %s i \"%s\""
+
+#: worktree.c:832
+#, c-format
+msgid "unable to unset %s in '%s'"
+msgstr "kan inte slå av %s i \"%s\""
+
+#: worktree.c:852
+msgid "failed to set extensions.worktreeConfig setting"
+msgstr "misslyckades ändra inställningen extensions.worktreeConfig"
+
+#: wrapper.c:161
 #, c-format
 msgid "could not setenv '%s'"
 msgstr "kunde inte lagra miljövariabeln \"%s\""
 
-#: wrapper.c:203
+#: wrapper.c:213
 #, c-format
 msgid "unable to create '%s'"
 msgstr "kunde inte skapa \"%s\""
 
-#: wrapper.c:205 wrapper.c:375
+#: wrapper.c:215 wrapper.c:385
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr "kunde inte öppna \"%s\" för läsning och skrivning"
 
-#: wrapper.c:406 wrapper.c:607
+#: wrapper.c:416 wrapper.c:683
 #, c-format
 msgid "unable to access '%s'"
 msgstr "kan inte komma åt \"%s\""
 
-#: wrapper.c:615
+#: wrapper.c:691
 msgid "unable to get current working directory"
 msgstr "kan inte hämta aktuell arbetskatalog"
 
@@ -9793,11 +10049,11 @@ msgstr "  (använd \"git add/rm <fil>...\" som lämpligt för att ange lösning)
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr "  (använd \"git rm <fil>...\" för att ange lösning)"
 
-#: wt-status.c:211 wt-status.c:1131
+#: wt-status.c:211 wt-status.c:1140
 msgid "Changes to be committed:"
 msgstr "Ändringar att checka in:"
 
-#: wt-status.c:234 wt-status.c:1140
+#: wt-status.c:234 wt-status.c:1149
 msgid "Changes not staged for commit:"
 msgstr "Ändringar ej i incheckningskön:"
 
@@ -9900,22 +10156,22 @@ msgstr "ändrat innehåll, "
 msgid "untracked content, "
 msgstr "ospårat innehåll, "
 
-#: wt-status.c:964
+#: wt-status.c:973
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] "Stashen innehåller just nu %d post"
 msgstr[1] "Stashen innehåller just nu %d poster"
 
-#: wt-status.c:995
+#: wt-status.c:1004
 msgid "Submodules changed but not updated:"
 msgstr "Undermoduler ändrade men inte uppdaterade:"
 
-#: wt-status.c:997
+#: wt-status.c:1006
 msgid "Submodule changes to be committed:"
 msgstr "Undermodulers ändringar att checka in:"
 
-#: wt-status.c:1079
+#: wt-status.c:1088
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -9923,7 +10179,7 @@ msgstr ""
 "Raden ovan får inte ändras eller tas bort.\n"
 "Allt under den kommer tas bort."
 
-#: wt-status.c:1171
+#: wt-status.c:1180
 #, c-format
 msgid ""
 "\n"
@@ -9934,114 +10190,114 @@ msgstr ""
 "Det tog %.2f sekunder att räkna före/bakom-värden.\n"
 "Du kan använda \"--no-ahead-behind\" för undvika detta.\n"
 
-#: wt-status.c:1201
+#: wt-status.c:1210
 msgid "You have unmerged paths."
 msgstr "Du har ej sammanslagna sökvägar."
 
-#: wt-status.c:1204
+#: wt-status.c:1213
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (rätta konflikter och kör \"git commit\")"
 
-#: wt-status.c:1206
+#: wt-status.c:1215
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (använd \"git merge --abort\" för att avbryta sammanslagningen)"
 
-#: wt-status.c:1210
+#: wt-status.c:1219
 msgid "All conflicts fixed but you are still merging."
 msgstr "Alla konflikter har rättats men du är fortfarande i en sammanslagning."
 
-#: wt-status.c:1213
+#: wt-status.c:1222
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (använd \"git commit\" för att slutföra sammanslagningen)"
 
-#: wt-status.c:1224
+#: wt-status.c:1233
 msgid "You are in the middle of an am session."
 msgstr "Du är i mitten av en körning av \"git am\"."
 
-#: wt-status.c:1227
+#: wt-status.c:1236
 msgid "The current patch is empty."
 msgstr "Aktuell patch är tom."
 
-#: wt-status.c:1232
+#: wt-status.c:1241
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (rätta konflikter och kör sedan \"git am --continue\")"
 
-#: wt-status.c:1234
+#: wt-status.c:1243
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (använd \"git am --skip\" för att hoppa över patchen)"
 
-#: wt-status.c:1237
+#: wt-status.c:1246
 msgid ""
 "  (use \"git am --allow-empty\" to record this patch as an empty commit)"
 msgstr ""
 "  (använd \"git am --allow-empty\" för att registrera patchen som en tom "
 "incheckning)"
 
-#: wt-status.c:1239
+#: wt-status.c:1248
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr "  (använd \"git am --abort\" för att återställa ursprungsgrenen)"
 
-#: wt-status.c:1372
+#: wt-status.c:1381
 msgid "git-rebase-todo is missing."
 msgstr "git-rebase-todo saknas."
 
-#: wt-status.c:1374
+#: wt-status.c:1383
 msgid "No commands done."
 msgstr "Inga kommandon utförda."
 
-#: wt-status.c:1377
+#: wt-status.c:1386
 #, c-format
-msgid "Last command done (%d command done):"
-msgid_plural "Last commands done (%d commands done):"
-msgstr[0] "Sista kommandot utfört (%d kommando utfört):"
-msgstr[1] "Sista kommandot utfört (%d kommandon utfört):"
+msgid "Last command done (%<PRIuMAX> command done):"
+msgid_plural "Last commands done (%<PRIuMAX> commands done):"
+msgstr[0] "Sista kommandot utfört (%<PRIuMAX> kommando utfört):"
+msgstr[1] "Sista kommandot utfört (%<PRIuMAX> kommandon utfört):"
 
-#: wt-status.c:1388
+#: wt-status.c:1397
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (se fler i filen %s)"
 
-#: wt-status.c:1393
+#: wt-status.c:1402
 msgid "No commands remaining."
 msgstr "Inga kommandon återstår."
 
-#: wt-status.c:1396
+#: wt-status.c:1405
 #, c-format
-msgid "Next command to do (%d remaining command):"
-msgid_plural "Next commands to do (%d remaining commands):"
-msgstr[0] "Nästa kommando att utföra (%d kommando återstår):"
-msgstr[1] "Följande kommandon att utföra (%d kommandon återstår):"
+msgid "Next command to do (%<PRIuMAX> remaining command):"
+msgid_plural "Next commands to do (%<PRIuMAX> remaining commands):"
+msgstr[0] "Nästa kommando att utföra (%<PRIuMAX> kommando återstår):"
+msgstr[1] "Följande kommandon att utföra (%<PRIuMAX> kommandon återstår):"
 
-#: wt-status.c:1404
+#: wt-status.c:1413
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr "  (använd \"git rebase --edit-todo\" för att visa och redigera)"
 
-#: wt-status.c:1416
+#: wt-status.c:1425
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "Du håller på att ombasera grenen \"%s\" ovanpå \"%s\"."
 
-#: wt-status.c:1421
+#: wt-status.c:1430
 msgid "You are currently rebasing."
 msgstr "Du håller på med en ombasering."
 
-#: wt-status.c:1434
+#: wt-status.c:1443
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr "  (rätta konflikter och kör sedan \"git rebase --continue\")"
 
-#: wt-status.c:1436
+#: wt-status.c:1445
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (använd \"git rebase --skip\" för att hoppa över patchen)"
 
-#: wt-status.c:1438
+#: wt-status.c:1447
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr "  (använd \"git rebase --abort\" för att checka ut ursprungsgrenen)"
 
-#: wt-status.c:1445
+#: wt-status.c:1454
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr "  (alla konflikter rättade: kör \"git rebase --continue\")"
 
-#: wt-status.c:1449
+#: wt-status.c:1458
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
@@ -10049,159 +10305,159 @@ msgstr ""
 "Du håller på att dela upp en incheckning medan du ombaserar grenen \"%s\" "
 "ovanpå \"%s\"."
 
-#: wt-status.c:1454
+#: wt-status.c:1463
 msgid "You are currently splitting a commit during a rebase."
 msgstr "Du håller på att dela upp en incheckning i en ombasering."
 
-#: wt-status.c:1457
+#: wt-status.c:1466
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr "  (Så fort din arbetskatalog är ren, kör \"git rebase --continue\")"
 
-#: wt-status.c:1461
+#: wt-status.c:1470
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr ""
 "Du håller på att redigera en incheckning medan du ombaserar grenen \"%s\" "
 "ovanpå \"%s\"."
 
-#: wt-status.c:1466
+#: wt-status.c:1475
 msgid "You are currently editing a commit during a rebase."
 msgstr "Du håller på att redigera en incheckning under en ombasering."
 
-#: wt-status.c:1469
+#: wt-status.c:1478
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr ""
 "  (använd \"git commit --amend\" för att lägga till på aktuell incheckning)"
 
-#: wt-status.c:1471
+#: wt-status.c:1480
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr "  (använd \"git rebase --continue\" när du är nöjd med dina ändringar)"
 
-#: wt-status.c:1482
+#: wt-status.c:1491
 msgid "Cherry-pick currently in progress."
 msgstr "Cherry-pick pågår."
 
-#: wt-status.c:1485
+#: wt-status.c:1494
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "Du håller på med en \"cherry-pick\" av incheckningen %s."
 
-#: wt-status.c:1492
+#: wt-status.c:1501
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr "  (rätta konflikter och kör sedan \"git cherry-pick --continue\")"
 
-#: wt-status.c:1495
+#: wt-status.c:1504
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (kör \"git cherry-pick --continue\" för att fortsätta)"
 
-#: wt-status.c:1498
+#: wt-status.c:1507
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr "  (alla konflikter rättade: kör \"git cherry-pick --continue\")"
 
-#: wt-status.c:1500
+#: wt-status.c:1509
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr "  (använd \"git cherry-pick --skip\" för att hoppa över patchen)"
 
-#: wt-status.c:1502
+#: wt-status.c:1511
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr ""
 "  (använd \"git cherry-pick --abort\" för att avbryta \"cherry-pick\"-"
 "operationen)"
 
-#: wt-status.c:1512
+#: wt-status.c:1521
 msgid "Revert currently in progress."
 msgstr "Ångring pågår."
 
-#: wt-status.c:1515
+#: wt-status.c:1524
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Du håller på med att ångra incheckningen %s."
 
-#: wt-status.c:1521
+#: wt-status.c:1530
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (rätta konflikter och kör sedan \"git revert --continue\")"
 
-#: wt-status.c:1524
+#: wt-status.c:1533
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (kör \"git revert --continue\" för att fortsätta)"
 
-#: wt-status.c:1527
+#: wt-status.c:1536
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (alla konflikter rättade: kör \"git revert --continue\")"
 
-#: wt-status.c:1529
+#: wt-status.c:1538
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr "  (använd \"git revert --skip\" för att hoppa över patchen)"
 
-#: wt-status.c:1531
+#: wt-status.c:1540
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (använd \"git revert --abort\" för att avbryta ångrandet)"
 
-#: wt-status.c:1541
+#: wt-status.c:1550
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "Du håller på med en \"bisect\", startad från grenen \"%s\"."
 
-#: wt-status.c:1545
+#: wt-status.c:1554
 msgid "You are currently bisecting."
 msgstr "Du håller på med en \"bisect\"."
 
-#: wt-status.c:1548
+#: wt-status.c:1557
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr ""
 "  (använd \"git bisect reset\" för att komma tillbaka till ursprungsgrenen)"
 
-#: wt-status.c:1559
+#: wt-status.c:1568
 msgid "You are in a sparse checkout."
 msgstr "Du är i en gles utcheckning."
 
-#: wt-status.c:1562
+#: wt-status.c:1571
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
 msgstr "Du är i en gles utcheckning med %d%% spårade filer på plats."
 
-#: wt-status.c:1806
+#: wt-status.c:1815
 msgid "On branch "
 msgstr "På grenen "
 
-#: wt-status.c:1813
+#: wt-status.c:1822
 msgid "interactive rebase in progress; onto "
 msgstr "interaktiv ombasering pågår; ovanpå "
 
-#: wt-status.c:1815
+#: wt-status.c:1824
 msgid "rebase in progress; onto "
 msgstr "ombasering pågår; ovanpå "
 
-#: wt-status.c:1820
+#: wt-status.c:1829
 msgid "HEAD detached at "
 msgstr "HEAD frånkopplad vid "
 
-#: wt-status.c:1822
+#: wt-status.c:1831
 msgid "HEAD detached from "
 msgstr "HEAD frånkopplad från "
 
-#: wt-status.c:1825
+#: wt-status.c:1834
 msgid "Not currently on any branch."
 msgstr "Inte på någon gren för närvarande."
 
-#: wt-status.c:1842
+#: wt-status.c:1851
 msgid "Initial commit"
 msgstr "Första incheckning"
 
-#: wt-status.c:1843
+#: wt-status.c:1852
 msgid "No commits yet"
 msgstr "Inga incheckningar ännu"
 
-#: wt-status.c:1857
+#: wt-status.c:1866
 msgid "Untracked files"
 msgstr "Ospårade filer"
 
-#: wt-status.c:1859
+#: wt-status.c:1868
 msgid "Ignored files"
 msgstr "Ignorerade filer"
 
-#: wt-status.c:1863
+#: wt-status.c:1872
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -10213,32 +10469,32 @@ msgstr ""
 "lägga till nya filer själv (se \"git help status\")."
 
 # %s är nästa sträng eller tom.
-#: wt-status.c:1869
+#: wt-status.c:1878
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Ospårade filer visas ej%s"
 
-#: wt-status.c:1871
+#: wt-status.c:1880
 msgid " (use -u option to show untracked files)"
 msgstr " (använd flaggan -u för att visa ospårade filer)"
 
-#: wt-status.c:1877
+#: wt-status.c:1886
 msgid "No changes"
 msgstr "Inga ändringar"
 
-#: wt-status.c:1882
+#: wt-status.c:1891
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 "inga ändringar att checka in (använd \"git add\" och/eller \"git commit -a"
 "\")\n"
 
-#: wt-status.c:1886
+#: wt-status.c:1895
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "inga ändringar att checka in\n"
 
-#: wt-status.c:1890
+#: wt-status.c:1899
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -10247,62 +10503,62 @@ msgstr ""
 "inget köat för incheckning, men ospårade filer finns (spåra med \"git add"
 "\")\n"
 
-#: wt-status.c:1894
+#: wt-status.c:1903
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr "inget köat för incheckning, men ospårade filer finns\n"
 
-#: wt-status.c:1898
+#: wt-status.c:1907
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr "inget att checka in (skapa/kopiera filer och spåra med \"git add\")\n"
 
-#: wt-status.c:1902 wt-status.c:1908
+#: wt-status.c:1911 wt-status.c:1917
 #, c-format
 msgid "nothing to commit\n"
 msgstr "inget att checka in\n"
 
-#: wt-status.c:1905
+#: wt-status.c:1914
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr "inget att checka in (använd -u för att visa ospårade filer)\n"
 
-#: wt-status.c:1910
+#: wt-status.c:1919
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "inget att checka in, arbetskatalogen ren\n"
 
-#: wt-status.c:2015
+#: wt-status.c:2024
 msgid "No commits yet on "
 msgstr "Inga incheckningar ännu på "
 
-#: wt-status.c:2019
+#: wt-status.c:2028
 msgid "HEAD (no branch)"
 msgstr "HEAD (ingen gren)"
 
-#: wt-status.c:2050
+#: wt-status.c:2059
 msgid "different"
 msgstr "olika"
 
-#: wt-status.c:2052 wt-status.c:2060
+#: wt-status.c:2061 wt-status.c:2069
 msgid "behind "
 msgstr "efter "
 
-#: wt-status.c:2055 wt-status.c:2058
+#: wt-status.c:2064 wt-status.c:2067
 msgid "ahead "
 msgstr "före "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2596
+#: wt-status.c:2605
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "kan inte %s: Du har oköade ändringar."
 
-#: wt-status.c:2602
+#: wt-status.c:2611
 msgid "additionally, your index contains uncommitted changes."
 msgstr "dessutom innehåller dit index ändringar som inte har checkats in."
 
-#: wt-status.c:2604
+#: wt-status.c:2613
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "kan inte %s: Ditt index innehåller ändringar som inte checkats in."
@@ -10325,145 +10581,149 @@ msgstr "kunde inte ta status \"accept_thread\" \"%s\""
 msgid "could not start worker[0] for '%s'"
 msgstr "kunde inte starta \"worker[0]\" för \"%s\""
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:347
+#: compat/precompose_utf8.c:58 builtin/clone.c:353
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "misslyckades ta bort länken \"%s\""
 
+#: compat/fsmonitor/fsm-listen-darwin.c:355
+msgid "Unable to create FSEventStream."
+msgstr "kunde inte skapa FSEventStream."
+
+#: compat/fsmonitor/fsm-listen-darwin.c:403
+msgid "Failed to start the FSEventStream"
+msgstr "Misslyckades starta FSEventStream:en"
+
 #: builtin/add.c:26
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<flaggor>] [--] <sökväg>..."
 
-#: builtin/add.c:64
+#: builtin/add.c:63
 #, c-format
 msgid "cannot chmod %cx '%s'"
 msgstr "kan inte utföra chmod %cx \"%s\""
 
-#: builtin/add.c:106
+#: builtin/add.c:105
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "diff-status %c förväntades inte"
 
-#: builtin/add.c:111 builtin/commit.c:298
+#: builtin/add.c:110 builtin/commit.c:299
 msgid "updating files failed"
 msgstr "misslyckades uppdatera filer"
 
-#: builtin/add.c:121
+#: builtin/add.c:120
 #, c-format
 msgid "remove '%s'\n"
 msgstr "ta bort \"%s\"\n"
 
-#: builtin/add.c:205
+#: builtin/add.c:204
 msgid "Unstaged changes after refreshing the index:"
 msgstr "Oköade ändringar efter att ha uppdaterat indexet:"
 
-#: builtin/add.c:313 builtin/rev-parse.c:993
+#: builtin/add.c:312 builtin/rev-parse.c:993
 msgid "Could not read the index"
 msgstr "Kunde inte läsa indexet"
 
-#: builtin/add.c:326
+#: builtin/add.c:325
 msgid "Could not write patch"
 msgstr "Kunde inte skriva patch"
 
-#: builtin/add.c:329
+#: builtin/add.c:328
 msgid "editing patch failed"
 msgstr "redigering av patch misslyckades"
 
-#: builtin/add.c:332
+#: builtin/add.c:331
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "Kunde inte ta status på \"%s\""
 
-#: builtin/add.c:334
+#: builtin/add.c:333
 msgid "Empty patch. Aborted."
 msgstr "Tom patch. Avbryter."
 
-#: builtin/add.c:340
+#: builtin/add.c:339
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "Kunde inte tillämpa \"%s\""
 
-#: builtin/add.c:348
+#: builtin/add.c:347
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr "Följande sökvägar ignoreras av en av dina .gitignore-filer:\n"
 
-#: builtin/add.c:368 builtin/clean.c:927 builtin/fetch.c:174 builtin/mv.c:124
+#: builtin/add.c:367 builtin/clean.c:927 builtin/fetch.c:175 builtin/mv.c:124
 #: builtin/prune-packed.c:14 builtin/pull.c:208 builtin/push.c:550
-#: builtin/remote.c:1429 builtin/rm.c:244 builtin/send-pack.c:194
+#: builtin/remote.c:1454 builtin/rm.c:244 builtin/send-pack.c:194
 msgid "dry run"
 msgstr "testkörning"
 
-#: builtin/add.c:369 builtin/check-ignore.c:22 builtin/commit.c:1484
-#: builtin/count-objects.c:98 builtin/fsck.c:789 builtin/log.c:2313
+#: builtin/add.c:368 builtin/check-ignore.c:22 builtin/commit.c:1483
+#: builtin/count-objects.c:98 builtin/fsck.c:789 builtin/log.c:2338
 #: builtin/mv.c:123 builtin/read-tree.c:120
 msgid "be verbose"
 msgstr "var pratsam"
 
-#: builtin/add.c:371
+#: builtin/add.c:370
 msgid "interactive picking"
 msgstr "plocka interaktivt"
 
-#: builtin/add.c:372 builtin/checkout.c:1581 builtin/reset.c:409
+#: builtin/add.c:371 builtin/checkout.c:1599 builtin/reset.c:417
 msgid "select hunks interactively"
 msgstr "välj stycken interaktivt"
 
-#: builtin/add.c:373
+#: builtin/add.c:372
 msgid "edit current diff and apply"
 msgstr "redigera aktuell diff och applicera"
 
-#: builtin/add.c:374
+#: builtin/add.c:373
 msgid "allow adding otherwise ignored files"
 msgstr "tillåt lägga till annars ignorerade filer"
 
-#: builtin/add.c:375
+#: builtin/add.c:374
 msgid "update tracked files"
 msgstr "uppdatera spårade filer"
 
-#: builtin/add.c:376
+#: builtin/add.c:375
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr "åternormalisera radslut i spårade filer (implicerar -u)"
 
-#: builtin/add.c:377
+#: builtin/add.c:376
 msgid "record only the fact that the path will be added later"
 msgstr "registrera endast att sökvägen kommer läggas till senare"
 
-#: builtin/add.c:378
+#: builtin/add.c:377
 msgid "add changes from all tracked and untracked files"
 msgstr "lägg till ändringar från alla spårade och ospårade filer"
 
-#: builtin/add.c:381
+#: builtin/add.c:380
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr "ignorera sökvägar borttagna i arbetskatalogen (samma som --no-all)"
 
-#: builtin/add.c:383
+#: builtin/add.c:382
 msgid "don't add, only refresh the index"
 msgstr "lägg inte till, uppdatera endast indexet"
 
-#: builtin/add.c:384
+#: builtin/add.c:383
 msgid "just skip files which cannot be added because of errors"
 msgstr "hoppa bara över filer som inte kan läggas till på grund av fel"
 
-#: builtin/add.c:385
+#: builtin/add.c:384
 msgid "check if - even missing - files are ignored in dry run"
 msgstr "se om - även saknade - filer ignoreras i testkörning"
 
-#: builtin/add.c:386 builtin/mv.c:128 builtin/rm.c:251
+#: builtin/add.c:385 builtin/mv.c:128 builtin/rm.c:251
 msgid "allow updating entries outside of the sparse-checkout cone"
 msgstr "tillåt uppdatera poster utanför området angivet i \"sparse-checkout\""
 
-#: builtin/add.c:388 builtin/update-index.c:1004
+#: builtin/add.c:387 builtin/update-index.c:1023
 msgid "override the executable bit of the listed files"
 msgstr "överstyr exekveringsbiten för angivna filer"
 
-#: builtin/add.c:390
+#: builtin/add.c:389
 msgid "warn when adding an embedded repository"
 msgstr "varna när ett inbyggt arkiv läggs till"
 
-#: builtin/add.c:392
-msgid "backend for `git stash -p`"
-msgstr "bakända för \"git stash -p\""
-
-#: builtin/add.c:410
+#: builtin/add.c:407
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -10494,12 +10754,12 @@ msgstr ""
 "\n"
 "Se \"git help submodule\" för ytterligare information."
 
-#: builtin/add.c:439
+#: builtin/add.c:436
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "lägger till inbäddat git-arkiv: %s"
 
-#: builtin/add.c:459
+#: builtin/add.c:456
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
@@ -10509,27 +10769,27 @@ msgstr ""
 "Slå av detta meddelande med\n"
 "\"git config advice.addIgnoredFile false\""
 
-#: builtin/add.c:474
+#: builtin/add.c:471
 msgid "adding files failed"
 msgstr "misslyckades lägga till filer"
 
-#: builtin/add.c:548
+#: builtin/add.c:534
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "\"--chmod\"-parametern \"%s\" måste antingen vara -x eller +x"
 
-#: builtin/add.c:569 builtin/checkout.c:1751 builtin/commit.c:364
-#: builtin/reset.c:429 builtin/rm.c:275 builtin/stash.c:1713
+#: builtin/add.c:555 builtin/checkout.c:1770 builtin/commit.c:365
+#: builtin/reset.c:436 builtin/rm.c:275 builtin/stash.c:1702
 #, c-format
 msgid "'%s' and pathspec arguments cannot be used together"
 msgstr "\"%s\" kan inte användas tillsammans med sökvägsangivelser"
 
-#: builtin/add.c:580
+#: builtin/add.c:566
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "Inget angivet, inget tillagt.\n"
 
-#: builtin/add.c:582
+#: builtin/add.c:568
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
@@ -10539,117 +10799,112 @@ msgstr ""
 "Slå av detta meddelande genom att köra\n"
 "\"git config advice.addEmptyPathspec false\""
 
-#: builtin/am.c:202
-#, c-format
-msgid "Invalid value for --empty: %s"
-msgstr "Felaktigt värde för --empty: %s"
-
-#: builtin/am.c:392
+#: builtin/am.c:393
 msgid "could not parse author script"
 msgstr "kunde inte tolka författarskript"
 
-#: builtin/am.c:482
+#: builtin/am.c:483
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "\"%s\" togs bort av kroken applypatch-msg"
 
-#: builtin/am.c:524
+#: builtin/am.c:525
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Felaktig indatarad: \"%s\"."
 
-#: builtin/am.c:562
+#: builtin/am.c:563
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Misslyckades kopiera anteckningar från \"%s\" till \"%s\""
 
-#: builtin/am.c:588
+#: builtin/am.c:589
 msgid "fseek failed"
 msgstr "\"fseek\" misslyckades"
 
-#: builtin/am.c:776
+#: builtin/am.c:777
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "kunde inte tolka patchen \"%s\""
 
-#: builtin/am.c:841
+#: builtin/am.c:842
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Endast en StGIT-patchserie kan tillämpas åt gången"
 
-#: builtin/am.c:889
+#: builtin/am.c:890
 msgid "invalid timestamp"
 msgstr "ogiltig tidsstämpel"
 
-#: builtin/am.c:894 builtin/am.c:906
+#: builtin/am.c:895 builtin/am.c:907
 msgid "invalid Date line"
 msgstr "ogiltig \"Date\"-rad"
 
-#: builtin/am.c:901
+#: builtin/am.c:902
 msgid "invalid timezone offset"
 msgstr "ogiltig tidszons-offset"
 
-#: builtin/am.c:994
+#: builtin/am.c:995
 msgid "Patch format detection failed."
 msgstr "Misslyckades detektera patchformat."
 
-#: builtin/am.c:999 builtin/clone.c:300
+#: builtin/am.c:1000 builtin/clone.c:306
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "misslyckades skapa katalogen \"%s\""
 
-#: builtin/am.c:1004
+#: builtin/am.c:1005
 msgid "Failed to split patches."
 msgstr "Misslyckades dela patchar."
 
-#: builtin/am.c:1153
+#: builtin/am.c:1154
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "När du har löst problemet, kör \"%s --continue\"."
 
-#: builtin/am.c:1154
+#: builtin/am.c:1155
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "Om du hellre vill hoppa över patchen, kör \"%s --skip\" i stället."
 
-#: builtin/am.c:1159
+#: builtin/am.c:1160
 #, c-format
 msgid "To record the empty patch as an empty commit, run \"%s --allow-empty\"."
 msgstr ""
 "För att registrera den tomma patchen som en tom incheckning, kör \"%s --"
 "allow-empty\"."
 
-#: builtin/am.c:1161
+#: builtin/am.c:1162
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr ""
 "För att återgå till ursprunglig gren och sluta patcha, kör \"%s --abort\"."
 
-#: builtin/am.c:1256
+#: builtin/am.c:1257
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 "Patch sänd med format=flowed; blanksteg på slut av rader kan ha tappats."
 
-#: builtin/am.c:1344
+#: builtin/am.c:1345
 #, c-format
 msgid "missing author line in commit %s"
 msgstr "saknad \"author\"-rad i incheckningen %s"
 
-#: builtin/am.c:1347
+#: builtin/am.c:1348
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "ogiltig ident-rad: %.*s"
 
-#: builtin/am.c:1566
+#: builtin/am.c:1567
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 "Arkivet saknar objekt som behövs för att falla tillbaka på 3-"
 "vägssammanslagning."
 
-#: builtin/am.c:1568
+#: builtin/am.c:1569
 msgid "Using index info to reconstruct a base tree..."
 msgstr "Använder indexinfo för att återskapa ett basträd..."
 
-#: builtin/am.c:1587
+#: builtin/am.c:1588
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -10657,25 +10912,25 @@ msgstr ""
 "Har du handredigerat din patch?\n"
 "Den kan inte tillämpas på blobbar som antecknats i dess index."
 
-#: builtin/am.c:1593
+#: builtin/am.c:1594
 msgid "Falling back to patching base and 3-way merge..."
 msgstr ""
 "Faller tillbaka på att patcha grundversionen och trevägssammanslagning..."
 
-#: builtin/am.c:1619
+#: builtin/am.c:1620
 msgid "Failed to merge in the changes."
 msgstr "Misslyckades slå ihop ändringarna."
 
-#: builtin/am.c:1651
+#: builtin/am.c:1652
 msgid "applying to an empty history"
 msgstr "tillämpar på en tom historik"
 
-#: builtin/am.c:1703 builtin/am.c:1707
+#: builtin/am.c:1704 builtin/am.c:1708
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "kan inte återuppta: %s finns inte."
 
-#: builtin/am.c:1725
+#: builtin/am.c:1726
 msgid "Commit Body is:"
 msgstr "Incheckningskroppen är:"
 
@@ -10683,59 +10938,59 @@ msgstr "Incheckningskroppen är:"
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1735
+#: builtin/am.c:1736
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr "Tillämpa? Y=ja/N=nej/E=redigera/V=visa patch/A=godta alla: "
 
-#: builtin/am.c:1781 builtin/commit.c:409
+#: builtin/am.c:1782 builtin/commit.c:410
 msgid "unable to write index file"
 msgstr "kan inte skriva indexfil"
 
-#: builtin/am.c:1785
+#: builtin/am.c:1786
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Smutsigt index: kan inte tillämpa patchar (smutsiga: %s)"
 
-#: builtin/am.c:1827
+#: builtin/am.c:1828
 #, c-format
 msgid "Skipping: %.*s"
 msgstr "Hoppar över: %.*s"
 
-#: builtin/am.c:1832
+#: builtin/am.c:1833
 #, c-format
 msgid "Creating an empty commit: %.*s"
 msgstr "Skapar en tom incheckningar: %.*s"
 
-#: builtin/am.c:1836
+#: builtin/am.c:1837
 msgid "Patch is empty."
 msgstr "Patchen är tom."
 
-#: builtin/am.c:1847 builtin/am.c:1916
+#: builtin/am.c:1848 builtin/am.c:1917
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Tillämpar: %.*s"
 
-#: builtin/am.c:1864
+#: builtin/am.c:1865
 msgid "No changes -- Patch already applied."
 msgstr "Inga ändringar -- Patchen har redan tillämpats."
 
-#: builtin/am.c:1870
+#: builtin/am.c:1871
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "Patch misslyckades på %s %.*s"
 
-#: builtin/am.c:1874
+#: builtin/am.c:1875
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr ""
 "Använd \"git am --show-current-patch=diff\" för att se patchen som "
 "misslyckades"
 
-#: builtin/am.c:1920
+#: builtin/am.c:1921
 msgid "No changes - recorded it as an empty commit."
 msgstr "Inga ändringar - sparat som en tom incheckning."
 
-#: builtin/am.c:1922
+#: builtin/am.c:1923
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -10745,7 +11000,7 @@ msgstr ""
 "Om det inte är något kvar att köa kan det hända att något annat redan\n"
 "introducerat samma ändringar; kanske du bör hoppa över patchen."
 
-#: builtin/am.c:1930
+#: builtin/am.c:1931
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -10757,17 +11012,17 @@ msgstr ""
 "lösta.\n"
 "Du kan köra \"git rm\" för att godta \"borttagen av dem\" för den."
 
-#: builtin/am.c:2038 builtin/am.c:2042 builtin/am.c:2054 builtin/reset.c:448
-#: builtin/reset.c:456
+#: builtin/am.c:2039 builtin/am.c:2043 builtin/am.c:2055 builtin/reset.c:455
+#: builtin/reset.c:463
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "Kan inte tolka objektet \"%s\"."
 
-#: builtin/am.c:2090 builtin/am.c:2166
+#: builtin/am.c:2091 builtin/am.c:2167
 msgid "failed to clean index"
 msgstr "misslyckades städa upp indexet"
 
-#: builtin/am.c:2134
+#: builtin/am.c:2135
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -10775,167 +11030,158 @@ msgstr ""
 "Du verkar ha flyttat HEAD sedan \"am\" sist misslyckades.\n"
 "Återställer inte till ORIG_HEAD"
 
-#: builtin/am.c:2242
-#, c-format
-msgid "Invalid value for --patch-format: %s"
-msgstr "Felaktigt värde för --patch-format: %s"
-
-#: builtin/am.c:2285
-#, c-format
-msgid "Invalid value for --show-current-patch: %s"
-msgstr "Felaktigt värde för --show-current-patch: %s"
-
-#: builtin/am.c:2289
+#: builtin/am.c:2292
 #, c-format
 msgid "options '%s=%s' and '%s=%s' cannot be used together"
 msgstr "flaggorna \"%s=%s\" och \"%s=%s\" kan inte användas samtidigt"
 
-#: builtin/am.c:2320
+#: builtin/am.c:2323
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<flaggor>] [(<mbox> | <Maildir>)...]"
 
-#: builtin/am.c:2321
+#: builtin/am.c:2324
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<flaggor>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2327
+#: builtin/am.c:2330
 msgid "run interactively"
 msgstr "kör interaktivt"
 
-#: builtin/am.c:2329
+#: builtin/am.c:2332
 msgid "historical option -- no-op"
 msgstr "historisk flagga -- no-op"
 
-#: builtin/am.c:2331
+#: builtin/am.c:2334
 msgid "allow fall back on 3way merging if needed"
 msgstr "tillåt falla tillbaka på trevägssammanslagning om nödvändigt"
 
-#: builtin/am.c:2332 builtin/init-db.c:547 builtin/prune-packed.c:16
-#: builtin/repack.c:642 builtin/stash.c:962
+#: builtin/am.c:2335 builtin/init-db.c:547 builtin/prune-packed.c:16
+#: builtin/repack.c:646 builtin/stash.c:946
 msgid "be quiet"
 msgstr "var tyst"
 
-#: builtin/am.c:2334
+#: builtin/am.c:2337
 msgid "add a Signed-off-by trailer to the commit message"
 msgstr "lägg till \"Signed-off-by\"-släprad i incheckningsmeddelandet"
 
-#: builtin/am.c:2337
+#: builtin/am.c:2340
 msgid "recode into utf8 (default)"
 msgstr "koda om till utf8 (standard)"
 
-#: builtin/am.c:2339
+#: builtin/am.c:2342
 msgid "pass -k flag to git-mailinfo"
 msgstr "sänd flaggan -k till git-mailinfo"
 
-#: builtin/am.c:2341
+#: builtin/am.c:2344
 msgid "pass -b flag to git-mailinfo"
 msgstr "sänd flaggan -b till git-mailinfo"
 
-#: builtin/am.c:2343
+#: builtin/am.c:2346
 msgid "pass -m flag to git-mailinfo"
 msgstr "sänd flaggan -m till git-mailinfo"
 
-#: builtin/am.c:2345
+#: builtin/am.c:2348
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "sänd flaggan --keep-cr till git-mailsplit för mbox-formatet"
 
-#: builtin/am.c:2348
+#: builtin/am.c:2351
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr "sänd inte flaggan --keep-cr till git-mailsplit oberoende av am.keepcr"
 
-#: builtin/am.c:2351
+#: builtin/am.c:2354
 msgid "strip everything before a scissors line"
 msgstr "ta bort allting före en saxlinje"
 
-#: builtin/am.c:2353
+#: builtin/am.c:2356
 msgid "pass it through git-mailinfo"
 msgstr "sänd det genom git-mailinfo"
 
-#: builtin/am.c:2356 builtin/am.c:2359 builtin/am.c:2362 builtin/am.c:2365
-#: builtin/am.c:2368 builtin/am.c:2371 builtin/am.c:2374 builtin/am.c:2377
-#: builtin/am.c:2383
+#: builtin/am.c:2359 builtin/am.c:2362 builtin/am.c:2365 builtin/am.c:2368
+#: builtin/am.c:2371 builtin/am.c:2374 builtin/am.c:2377 builtin/am.c:2380
+#: builtin/am.c:2386
 msgid "pass it through git-apply"
 msgstr "sänd det genom git-apply"
 
-#: builtin/am.c:2373 builtin/commit.c:1515 builtin/fmt-merge-msg.c:18
-#: builtin/fmt-merge-msg.c:21 builtin/grep.c:919 builtin/merge.c:263
+#: builtin/am.c:2376 builtin/commit.c:1514 builtin/fmt-merge-msg.c:18
+#: builtin/fmt-merge-msg.c:21 builtin/grep.c:920 builtin/merge.c:263
 #: builtin/pull.c:142 builtin/pull.c:204 builtin/pull.c:221
-#: builtin/rebase.c:1046 builtin/repack.c:653 builtin/repack.c:657
-#: builtin/repack.c:659 builtin/show-branch.c:649 builtin/show-ref.c:172
-#: builtin/tag.c:445 parse-options.h:154 parse-options.h:175
-#: parse-options.h:317
+#: builtin/rebase.c:1074 builtin/repack.c:657 builtin/repack.c:661
+#: builtin/repack.c:663 builtin/show-branch.c:650 builtin/show-ref.c:172
+#: builtin/tag.c:446 parse-options.h:159 parse-options.h:180
+#: parse-options.h:348
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2379 builtin/branch.c:680 builtin/bugreport.c:109
-#: builtin/for-each-ref.c:41 builtin/replace.c:555 builtin/tag.c:479
-#: builtin/verify-tag.c:38
+#: builtin/am.c:2382 builtin/branch.c:695 builtin/bugreport.c:109
+#: builtin/cat-file.c:848 builtin/cat-file.c:852 builtin/cat-file.c:856
+#: builtin/for-each-ref.c:41 builtin/ls-tree.c:357 builtin/replace.c:555
+#: builtin/tag.c:480 builtin/verify-tag.c:38
 msgid "format"
 msgstr "format"
 
-#: builtin/am.c:2380
+#: builtin/am.c:2383
 msgid "format the patch(es) are in"
 msgstr "format för patch(ar)"
 
-#: builtin/am.c:2386
+#: builtin/am.c:2389
 msgid "override error message when patch failure occurs"
 msgstr "överstyr felmeddelanden när patchfel uppstår"
 
-#: builtin/am.c:2388
+#: builtin/am.c:2391
 msgid "continue applying patches after resolving a conflict"
 msgstr "fortsätt applicera patchar efter att ha löst en konflikt"
 
-#: builtin/am.c:2391
+#: builtin/am.c:2394
 msgid "synonyms for --continue"
 msgstr "synonymer till --continue"
 
-#: builtin/am.c:2394
+#: builtin/am.c:2397
 msgid "skip the current patch"
 msgstr "hoppa över den aktuella grenen"
 
-#: builtin/am.c:2397
+#: builtin/am.c:2400
 msgid "restore the original branch and abort the patching operation"
 msgstr "återställ originalgrenen och avbryt patchningen"
 
-#: builtin/am.c:2400
+#: builtin/am.c:2403
 msgid "abort the patching operation but keep HEAD where it is"
 msgstr "avbryt patchningen men behåll HEAD där det är"
 
-#: builtin/am.c:2404
+#: builtin/am.c:2407
 msgid "show the patch being applied"
 msgstr "visa patchen som tillämpas"
 
-#: builtin/am.c:2408
+#: builtin/am.c:2411
 msgid "record the empty patch as an empty commit"
 msgstr "lagra den tomma patchen som en tom incheckning"
 
-#: builtin/am.c:2412
+#: builtin/am.c:2415
 msgid "lie about committer date"
 msgstr "ljug om incheckningsdatum"
 
-#: builtin/am.c:2414
+#: builtin/am.c:2417
 msgid "use current timestamp for author date"
 msgstr "använd nuvarande tidsstämpel för författardatum"
 
-#: builtin/am.c:2416 builtin/commit-tree.c:118 builtin/commit.c:1643
-#: builtin/merge.c:302 builtin/pull.c:179 builtin/rebase.c:1099
-#: builtin/revert.c:117 builtin/tag.c:460
+#: builtin/am.c:2419 builtin/commit-tree.c:118 builtin/commit.c:1642
+#: builtin/merge.c:302 builtin/pull.c:179 builtin/rebase.c:1127
+#: builtin/revert.c:117 builtin/tag.c:461
 msgid "key-id"
 msgstr "nyckel-id"
 
-#: builtin/am.c:2417 builtin/rebase.c:1100
+#: builtin/am.c:2420 builtin/rebase.c:1128
 msgid "GPG-sign commits"
 msgstr "GPG-signera incheckningar"
 
-#: builtin/am.c:2420
+#: builtin/am.c:2423
 msgid "how to handle empty patches"
 msgstr "hantering av tomma patchar"
 
-#: builtin/am.c:2423
+#: builtin/am.c:2426
 msgid "(internal use for git-rebase)"
 msgstr "(används internt av git-rebase)"
 
-#: builtin/am.c:2441
+#: builtin/am.c:2444
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
@@ -10943,16 +11189,16 @@ msgstr ""
 "Flaggan -b/--binary har varit utan funktion länge, och\n"
 "kommer tas bort. Vi ber dig att inte använda den längre."
 
-#: builtin/am.c:2448
+#: builtin/am.c:2451
 msgid "failed to read the index"
 msgstr "misslyckades läsa indexet"
 
-#: builtin/am.c:2463
+#: builtin/am.c:2466
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr "tidigare rebase-katalog %s finns fortfarande, men mbox angavs."
 
-#: builtin/am.c:2487
+#: builtin/am.c:2490
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -10961,11 +11207,11 @@ msgstr ""
 "Kvarbliven katalog %s hittades.\n"
 "Använd \"git am --abort\" för att ta bort den."
 
-#: builtin/am.c:2493
+#: builtin/am.c:2496
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "Lösningsoperation pågår inte, vi återupptar inte."
 
-#: builtin/am.c:2503
+#: builtin/am.c:2506
 msgid "interactive mode requires patches on the command line"
 msgstr "interaktivt läge kräver patchar på kommandoraden"
 
@@ -11002,14 +11248,6 @@ msgstr "git archive: förväntade en tömning (flush)"
 msgid "git bisect--helper --bisect-reset [<commit>]"
 msgstr "git bisect--helper --bisect-reset [<incheckning>]"
 
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
-msgstr ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
-
 #: builtin/bisect--helper.c:26
 msgid ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
@@ -11020,10 +11258,6 @@ msgstr ""
 "=<term>] [--no-checkout] [--first-parent] [<dålig> [<bra>...]] [--] "
 "[<sökvägar>...]"
 
-#: builtin/bisect--helper.c:28
-msgid "git bisect--helper --bisect-next"
-msgstr "git bisect--helper --bisect-next"
-
 #: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr "git bisect--helper --bisect-state (bad|new) [<incheckning>]"
@@ -11040,10 +11274,6 @@ msgstr "git bisect--helper --bisect-replay <filnamn>"
 msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
 msgstr "git bisect--helper --bisect-skip [(<incheckning>|<intervall>)...]"
 
-#: builtin/bisect--helper.c:33
-msgid "git bisect--helper --bisect-visualize"
-msgstr "git bisect--helper --bisect-visualize"
-
 #: builtin/bisect--helper.c:34
 msgid "git bisect--helper --bisect-run <cmd>..."
 msgstr "git bisect--helper --bisect-run <kommando>..."
@@ -11267,41 +11497,51 @@ msgstr "\"%s\"?? vad menar du?"
 msgid "cannot read file '%s' for replaying"
 msgstr "kan inte läsa filen \"%s\" för återuppspelning"
 
-#: builtin/bisect--helper.c:1107 builtin/bisect--helper.c:1274
+#: builtin/bisect--helper.c:1120 builtin/bisect--helper.c:1152
+#, c-format
+msgid "running %s\n"
+msgstr "kör %s\n"
+
+#: builtin/bisect--helper.c:1145 builtin/bisect--helper.c:1335
 msgid "bisect run failed: no command provided."
 msgstr "bisect-körning misslyckades: inget kommando gavs."
 
-#: builtin/bisect--helper.c:1116
+#: builtin/bisect--helper.c:1166
 #, c-format
-msgid "running %s\n"
-msgstr "kör %s\n"
+msgid "unable to verify '%s' on good revision"
+msgstr "kan inte bekräfta \"%s\" på bra revision"
+
+#: builtin/bisect--helper.c:1172
+#, c-format
+msgid "bogus exit code %d for good revision"
+msgstr "falsk slutkod %d för bra revision"
 
-#: builtin/bisect--helper.c:1120
+#: builtin/bisect--helper.c:1180
 #, c-format
 msgid "bisect run failed: exit code %d from '%s' is < 0 or >= 128"
 msgstr ""
 "\"bisect\"-körningen misslyckades: felkod %d från \"%s\" är < 0 eller >= 128"
 
-#: builtin/bisect--helper.c:1136
+#: builtin/bisect--helper.c:1195
 #, c-format
 msgid "cannot open file '%s' for writing"
 msgstr "kan inte öppna \"%s\" för skrivning"
 
-#: builtin/bisect--helper.c:1152
+#: builtin/bisect--helper.c:1213
 msgid "bisect run cannot continue any more"
 msgstr "\"bisect\"-körningen kan inte fortsätta längre"
 
-#: builtin/bisect--helper.c:1154
+#: builtin/bisect--helper.c:1215
 #, c-format
 msgid "bisect run success"
 msgstr "\"bisect\"-körningen lyckades"
 
-#: builtin/bisect--helper.c:1157
+#: builtin/bisect--helper.c:1218
 #, c-format
 msgid "bisect found first bad commit"
 msgstr "bisect hittade första trasiga incheckning"
 
-#: builtin/bisect--helper.c:1160
+#: builtin/bisect--helper.c:1221
 #, c-format
 msgid ""
 "bisect run failed: 'git bisect--helper --bisect-state %s' exited with error "
@@ -11310,71 +11550,71 @@ msgstr ""
 "\"bisect\"-körningen misslyckades: \"git bisect--helper --bisect-state %s\" "
 "avslutades med felkoden %d"
 
-#: builtin/bisect--helper.c:1192
+#: builtin/bisect--helper.c:1253
 msgid "reset the bisection state"
 msgstr "återställ bisect-tillstånd"
 
-#: builtin/bisect--helper.c:1194
+#: builtin/bisect--helper.c:1255
 msgid "check whether bad or good terms exist"
 msgstr "se efter om termer för rätt och fel finns"
 
-#: builtin/bisect--helper.c:1196
+#: builtin/bisect--helper.c:1257
 msgid "print out the bisect terms"
 msgstr "skriv ut termer för bisect"
 
-#: builtin/bisect--helper.c:1198
+#: builtin/bisect--helper.c:1259
 msgid "start the bisect session"
 msgstr "påbörja bisect-körningen"
 
-#: builtin/bisect--helper.c:1200
+#: builtin/bisect--helper.c:1261
 msgid "find the next bisection commit"
 msgstr "hitta nästa incheckning i bisect"
 
-#: builtin/bisect--helper.c:1202
+#: builtin/bisect--helper.c:1263
 msgid "mark the state of ref (or refs)"
 msgstr "markera tillståndet för en eller flera referenser"
 
-#: builtin/bisect--helper.c:1204
+#: builtin/bisect--helper.c:1265
 msgid "list the bisection steps so far"
 msgstr "lista \"bisect\"-stegen som utförts så långt"
 
-#: builtin/bisect--helper.c:1206
+#: builtin/bisect--helper.c:1267
 msgid "replay the bisection process from the given file"
 msgstr "spela upp \"bisect\"-processen från angiven fil"
 
-#: builtin/bisect--helper.c:1208
+#: builtin/bisect--helper.c:1269
 msgid "skip some commits for checkout"
 msgstr "hoppa över ett par incheckningar"
 
-#: builtin/bisect--helper.c:1210
+#: builtin/bisect--helper.c:1271
 msgid "visualize the bisection"
 msgstr "visualisera \"bisect\"-körningen"
 
-#: builtin/bisect--helper.c:1212
-msgid "use <cmd>... to automatically bisect."
-msgstr "använd <kommando>... för att utföra \"bisect\" automatiskt."
+#: builtin/bisect--helper.c:1273
+msgid "use <cmd>... to automatically bisect"
+msgstr "använd <kommando>... för att utföra \"bisect\" automatiskt"
 
-#: builtin/bisect--helper.c:1214
+#: builtin/bisect--helper.c:1275
 msgid "no log for BISECT_WRITE"
 msgstr "ingen logg för BISECT_WRITE"
 
-#: builtin/bisect--helper.c:1229
+#: builtin/bisect--helper.c:1290
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr "--bisect-reset kräver antingen inget argument eller en incheckning"
 
-#: builtin/bisect--helper.c:1234
+#: builtin/bisect--helper.c:1295
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms kräver noll eller ett argument"
 
-#: builtin/bisect--helper.c:1243
+#: builtin/bisect--helper.c:1304
 msgid "--bisect-next requires 0 arguments"
 msgstr "--bisect-next kräver 0 argument"
 
-#: builtin/bisect--helper.c:1254
+#: builtin/bisect--helper.c:1315
 msgid "--bisect-log requires 0 arguments"
 msgstr "--bisect-log kräver 0 argument"
 
-#: builtin/bisect--helper.c:1259
+#: builtin/bisect--helper.c:1320
 msgid "no logfile given"
 msgstr "ingen loggfil angiven"
 
@@ -11395,143 +11635,134 @@ msgstr "förväntade en färg: %s"
 msgid "must end with a color"
 msgstr "måste sluta med en färg"
 
-#: builtin/blame.c:724
-#, c-format
-msgid "invalid color '%s' in color.blame.repeatedLines"
-msgstr "felaktig färg \"%s\" i color.blame.repeatedLines"
-
-#: builtin/blame.c:742
-msgid "invalid value for blame.coloring"
-msgstr "ogiltigt värde för blame.coloring"
-
-#: builtin/blame.c:841
+#: builtin/blame.c:842
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "kan inte hitta revision %s att ignorera"
 
-#: builtin/blame.c:863
+#: builtin/blame.c:864
 msgid "show blame entries as we find them, incrementally"
 msgstr "visa klandringsposter när vi hittar dem, interaktivt"
 
-#: builtin/blame.c:864
+#: builtin/blame.c:865
 msgid "do not show object names of boundary commits (Default: off)"
 msgstr "visa inte objektnamn för gränsincheckningar (Standard: av)"
 
-#: builtin/blame.c:865
+#: builtin/blame.c:866
 msgid "do not treat root commits as boundaries (Default: off)"
 msgstr "vehandla inte rotincheckningar som gränser (Standard: av)"
 
-#: builtin/blame.c:866
+#: builtin/blame.c:867
 msgid "show work cost statistics"
 msgstr "visa statistik över arbetskostnad"
 
-#: builtin/blame.c:867 builtin/checkout.c:1536 builtin/clone.c:94
-#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:180
+#: builtin/blame.c:868 builtin/checkout.c:1554 builtin/clone.c:98
+#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:181
 #: builtin/merge.c:301 builtin/multi-pack-index.c:103
 #: builtin/multi-pack-index.c:154 builtin/multi-pack-index.c:180
 #: builtin/multi-pack-index.c:208 builtin/pull.c:120 builtin/push.c:566
-#: builtin/send-pack.c:202
+#: builtin/remote.c:683 builtin/send-pack.c:202
 msgid "force progress reporting"
 msgstr "tvinga förloppsrapportering"
 
-#: builtin/blame.c:868
+#: builtin/blame.c:869
 msgid "show output score for blame entries"
 msgstr "visa utdatapoäng för klandringsposter"
 
-#: builtin/blame.c:869
+#: builtin/blame.c:870
 msgid "show original filename (Default: auto)"
 msgstr "visa originalfilnamn (Standard: auto)"
 
-#: builtin/blame.c:870
+#: builtin/blame.c:871
 msgid "show original linenumber (Default: off)"
 msgstr "visa ursprungligt radnummer (Standard: av)"
 
-#: builtin/blame.c:871
+#: builtin/blame.c:872
 msgid "show in a format designed for machine consumption"
 msgstr "visa i ett format avsett för maskinkonsumtion"
 
-#: builtin/blame.c:872
+#: builtin/blame.c:873
 msgid "show porcelain format with per-line commit information"
 msgstr "visa porslinsformat med per-rad-incheckningsinformation"
 
-#: builtin/blame.c:873
+#: builtin/blame.c:874
 msgid "use the same output mode as git-annotate (Default: off)"
 msgstr "använd samma utdataläge som git-annotate (Standard: av)"
 
-#: builtin/blame.c:874
+#: builtin/blame.c:875
 msgid "show raw timestamp (Default: off)"
 msgstr "visa rå tidsstämpel (Standard: av)"
 
-#: builtin/blame.c:875
+#: builtin/blame.c:876
 msgid "show long commit SHA1 (Default: off)"
 msgstr "visa lång inchecknings-SHA1 (Standard: av)"
 
-#: builtin/blame.c:876
+#: builtin/blame.c:877
 msgid "suppress author name and timestamp (Default: off)"
 msgstr "undertryck författarnamn och tidsstämpel (Standard: av)"
 
-#: builtin/blame.c:877
+#: builtin/blame.c:878
 msgid "show author email instead of name (Default: off)"
 msgstr "visa författarens e-post istället för namn (Standard: av)"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:879
 msgid "ignore whitespace differences"
 msgstr "ignorera ändringar i blanksteg"
 
-#: builtin/blame.c:879 builtin/log.c:1838
+#: builtin/blame.c:880 builtin/log.c:1857
 msgid "rev"
 msgstr "incheckning"
 
-#: builtin/blame.c:879
+#: builtin/blame.c:880
 msgid "ignore <rev> when blaming"
 msgstr "ignorera <incheckning> vid klandringen"
 
-#: builtin/blame.c:880
+#: builtin/blame.c:881
 msgid "ignore revisions from <file>"
 msgstr "ignorera incheckningar från <fil>"
 
-#: builtin/blame.c:881
+#: builtin/blame.c:882
 msgid "color redundant metadata from previous line differently"
 msgstr "färglägg redundant metadata från tidigare rader annorlunda"
 
-#: builtin/blame.c:882
+#: builtin/blame.c:883
 msgid "color lines by age"
 msgstr "färglägg rader efter ålder"
 
-#: builtin/blame.c:883
+#: builtin/blame.c:884
 msgid "spend extra cycles to find better match"
 msgstr "slösa extra cykler med att hitta bättre träff"
 
-#: builtin/blame.c:884
+#: builtin/blame.c:885
 msgid "use revisions from <file> instead of calling git-rev-list"
 msgstr "använd revisioner från <fil> istället för att anropa git-rev-list"
 
-#: builtin/blame.c:885
+#: builtin/blame.c:886
 msgid "use <file>'s contents as the final image"
 msgstr "använd <fil>s innehåll som slutgiltig bild"
 
-#: builtin/blame.c:886 builtin/blame.c:887
+#: builtin/blame.c:887 builtin/blame.c:888
 msgid "score"
 msgstr "poäng"
 
-#: builtin/blame.c:886
+#: builtin/blame.c:887
 msgid "find line copies within and across files"
 msgstr "hitta kopierade rader inuti och mellan filer"
 
-#: builtin/blame.c:887
+#: builtin/blame.c:888
 msgid "find line movements within and across files"
 msgstr "hitta flyttade rader inuti och mellan filer"
 
-#: builtin/blame.c:888
+#: builtin/blame.c:889
 msgid "range"
 msgstr "intervall"
 
-#: builtin/blame.c:889
+#: builtin/blame.c:890
 msgid "process only line range <start>,<end> or function :<funcname>"
 msgstr ""
 "behandla endast intervallet <start>,<slut> eller funktionen :<funknamn>"
 
-#: builtin/blame.c:947
+#: builtin/blame.c:949
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr "--progress kan inte användas med --incremental eller porslinsformat"
 
@@ -11543,18 +11774,18 @@ msgstr "--progress kan inte användas med --incremental eller porslinsformat"
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:998
+#: builtin/blame.c:1000
 msgid "4 years, 11 months ago"
 msgstr "4 år, 11 månader sedan"
 
-#: builtin/blame.c:1114
+#: builtin/blame.c:1116
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] "filen %s har bara %lu rad"
 msgstr[1] "filen %s har bara %lu rader"
 
-#: builtin/blame.c:1159
+#: builtin/blame.c:1161
 msgid "Blaming lines"
 msgstr "Klandra rader"
 
@@ -11563,30 +11794,37 @@ msgid "git branch [<options>] [-r | -a] [--merged] [--no-merged]"
 msgstr "git branch [<flaggor>] [-r | -a] [--merged] [--no-merged]"
 
 #: builtin/branch.c:30
-msgid "git branch [<options>] [-l] [-f] <branch-name> [<start-point>]"
-msgstr "git branch [<flaggor>] [-l] [-f] <grennamn> [<startpunkt>]"
+msgid ""
+"git branch [<options>] [-f] [--recurse-submodules] <branch-name> [<start-"
+"point>]"
+msgstr ""
+"git branch [<flaggor>] [-f] [--recurse-submodules] <grennamn> [<startpunkt>]"
 
 #: builtin/branch.c:31
+msgid "git branch [<options>] [-l] [<pattern>...]"
+msgstr "git branch [<flaggor>] [-l] [<mönster>...]"
+
+#: builtin/branch.c:32
 msgid "git branch [<options>] [-r] (-d | -D) <branch-name>..."
 msgstr "git branch [<flaggor>] [-r] (-d | -D) <grennamn>..."
 
-#: builtin/branch.c:32
+#: builtin/branch.c:33
 msgid "git branch [<options>] (-m | -M) [<old-branch>] <new-branch>"
 msgstr "git branch [<flaggor>] (-m | -M) [<gammal_gren>] <ny_gren>"
 
-#: builtin/branch.c:33
+#: builtin/branch.c:34
 msgid "git branch [<options>] (-c | -C) [<old-branch>] <new-branch>"
 msgstr "git branch [<flaggor>] (-c | -C) [<gammal_gren>] <ny_gren>"
 
-#: builtin/branch.c:34
+#: builtin/branch.c:35
 msgid "git branch [<options>] [-r | -a] [--points-at]"
 msgstr "git branch [<flaggor>] [-r | -a] [--points-at]"
 
-#: builtin/branch.c:35
+#: builtin/branch.c:36
 msgid "git branch [<options>] [-r | -a] [--format]"
 msgstr "git branch [<flaggor>] [-r | -a] [--format]"
 
-#: builtin/branch.c:153
+#: builtin/branch.c:165
 #, c-format
 msgid ""
 "deleting branch '%s' that has been merged to\n"
@@ -11595,7 +11833,7 @@ msgstr ""
 "tar bort grenen \"%s\" som har slagits ihop med\n"
 "         \"%s\", men ännu inte slagits ihop med HEAD."
 
-#: builtin/branch.c:157
+#: builtin/branch.c:169
 #, c-format
 msgid ""
 "not deleting branch '%s' that is not yet merged to\n"
@@ -11604,12 +11842,12 @@ msgstr ""
 "tar inte bort grenen \"%s\" som inte har slagits ihop med\n"
 "         \"%s\", trots att den har slagits ihop med HEAD."
 
-#: builtin/branch.c:171
+#: builtin/branch.c:183
 #, c-format
 msgid "Couldn't look up commit object for '%s'"
 msgstr "Kunde inte slå upp incheckningsobjekt för \"%s\""
 
-#: builtin/branch.c:175
+#: builtin/branch.c:187
 #, c-format
 msgid ""
 "The branch '%s' is not fully merged.\n"
@@ -11618,112 +11856,112 @@ msgstr ""
 "Grenen \"%s\" har inte slagits samman i sin helhet.\n"
 "Om du är säker på att du vill ta bort den, kör \"git branch -D %s\"."
 
-#: builtin/branch.c:188
+#: builtin/branch.c:200
 msgid "Update of config-file failed"
 msgstr "Misslyckades uppdatera konfigurationsfil"
 
-#: builtin/branch.c:223
+#: builtin/branch.c:235
 msgid "cannot use -a with -d"
 msgstr "kan inte ange -a med -d"
 
-#: builtin/branch.c:230
+#: builtin/branch.c:242
 msgid "Couldn't look up commit object for HEAD"
 msgstr "Kunde inte slå upp incheckningsobjekt för HEAD"
 
-#: builtin/branch.c:247
+#: builtin/branch.c:259
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr "Kan inte ta bort grenen \"%s\" som är utcheckad på \"%s\""
 
-#: builtin/branch.c:262
+#: builtin/branch.c:274
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "fjärrspårande grenen \"%s\" hittades inte."
 
-#: builtin/branch.c:263
+#: builtin/branch.c:275
 #, c-format
 msgid "branch '%s' not found."
 msgstr "grenen \"%s\" hittades inte."
 
-#: builtin/branch.c:294
+#: builtin/branch.c:306
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "Tog bort fjärrspårande grenen %s (var %s).\n"
 
-#: builtin/branch.c:295
+#: builtin/branch.c:307
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "Tog bort grenen %s (var %s).\n"
 
-#: builtin/branch.c:445 builtin/tag.c:63
+#: builtin/branch.c:457 builtin/tag.c:64
 msgid "unable to parse format string"
 msgstr "kan inte tolka formatsträng"
 
-#: builtin/branch.c:476
+#: builtin/branch.c:488
 msgid "could not resolve HEAD"
 msgstr "kunde inte slå upp HEAD"
 
-#: builtin/branch.c:482
+#: builtin/branch.c:494
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "HEAD (%s) pekar utenför refs/heads/"
 
-#: builtin/branch.c:497
+#: builtin/branch.c:509
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "Grenen %s ombaseras på %s"
 
-#: builtin/branch.c:501
+#: builtin/branch.c:513
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "Grenen %s är i en \"bisect\" på %s"
 
-#: builtin/branch.c:518
+#: builtin/branch.c:530
 msgid "cannot copy the current branch while not on any."
 msgstr "kunde inte kopiera aktuell gren när du inte befinner dig på någon."
 
-#: builtin/branch.c:520
+#: builtin/branch.c:532
 msgid "cannot rename the current branch while not on any."
 msgstr ""
 "kunde inte byta namn på aktuell gren när du inte befinner dig på någon."
 
-#: builtin/branch.c:531
+#: builtin/branch.c:543
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Felaktigt namn på gren: \"%s\""
 
-#: builtin/branch.c:560
+#: builtin/branch.c:572
 msgid "Branch rename failed"
 msgstr "Misslyckades byta namn på gren"
 
-#: builtin/branch.c:562
+#: builtin/branch.c:574
 msgid "Branch copy failed"
 msgstr "Misslyckades kopiera gren"
 
-#: builtin/branch.c:566
+#: builtin/branch.c:578
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "Skapade kopia av felaktigt namngiven gren \"%s\""
 
-#: builtin/branch.c:569
+#: builtin/branch.c:581
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "Bytte bort namn på en felaktigt namngiven gren \"%s\""
 
-#: builtin/branch.c:575
+#: builtin/branch.c:587
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "Grenen namnbytt till %s, men HEAD har inte uppdaterats!"
 
-#: builtin/branch.c:584
+#: builtin/branch.c:596
 msgid "Branch is renamed, but update of config-file failed"
 msgstr "Grenen namnbytt, men misslyckades uppdatera konfigurationsfilen"
 
-#: builtin/branch.c:586
+#: builtin/branch.c:598
 msgid "Branch is copied, but update of config-file failed"
 msgstr "Grenen kopierades, men misslyckades uppdatera konfigurationsfilen"
 
-#: builtin/branch.c:602
+#: builtin/branch.c:614
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -11734,207 +11972,224 @@ msgstr ""
 "  %s\n"
 "Rader som inleds med \"%c\" ignoreras.\n"
 
-#: builtin/branch.c:637
+#: builtin/branch.c:651
 msgid "Generic options"
 msgstr "Allmänna flaggor"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:653
 msgid "show hash and subject, give twice for upstream branch"
 msgstr "visa hash och ärenderad, ange två gånger för uppströmsgren"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:654
 msgid "suppress informational messages"
 msgstr "undertryck informationsmeddelanden"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:656 builtin/checkout.c:1571
+#: builtin/submodule--helper.c:3077
 msgid "set branch tracking configuration"
 msgstr "ställ in inställningar för spårad gren"
 
-#: builtin/branch.c:645
+#: builtin/branch.c:659
 msgid "do not use"
 msgstr "använd ej"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:661
 msgid "upstream"
 msgstr "uppströms"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:661
 msgid "change the upstream info"
 msgstr "ändra uppströmsinformationen"
 
-#: builtin/branch.c:648
+#: builtin/branch.c:662
 msgid "unset the upstream info"
 msgstr "ta bort uppströmsinformationen"
 
-#: builtin/branch.c:649
+#: builtin/branch.c:663
 msgid "use colored output"
 msgstr "använd färgad utdata"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:664
 msgid "act on remote-tracking branches"
 msgstr "arbeta på fjärrspårande grenar"
 
-#: builtin/branch.c:652 builtin/branch.c:654
+#: builtin/branch.c:666 builtin/branch.c:668
 msgid "print only branches that contain the commit"
 msgstr "visa endast grenar som innehåller incheckningen"
 
-#: builtin/branch.c:653 builtin/branch.c:655
+#: builtin/branch.c:667 builtin/branch.c:669
 msgid "print only branches that don't contain the commit"
 msgstr "visa endast grenar som inte innehåller incheckningen"
 
-#: builtin/branch.c:658
+#: builtin/branch.c:672
 msgid "Specific git-branch actions:"
 msgstr "Specifika git-branch-åtgärder:"
 
-#: builtin/branch.c:659
+#: builtin/branch.c:673
 msgid "list both remote-tracking and local branches"
 msgstr "visa både fjärrspårande och lokala grenar"
 
-#: builtin/branch.c:661
+#: builtin/branch.c:675
 msgid "delete fully merged branch"
 msgstr "ta bort helt sammanslagen gren"
 
-#: builtin/branch.c:662
+#: builtin/branch.c:676
 msgid "delete branch (even if not merged)"
 msgstr "ta bort gren (även om inte helt sammanslagen)"
 
-#: builtin/branch.c:663
+#: builtin/branch.c:677
 msgid "move/rename a branch and its reflog"
 msgstr "flytta/ta bort en gren och dess reflogg"
 
-#: builtin/branch.c:664
+#: builtin/branch.c:678
 msgid "move/rename a branch, even if target exists"
 msgstr "flytta/ta bort en gren, även om målet finns"
 
-#: builtin/branch.c:665
+#: builtin/branch.c:679
 msgid "copy a branch and its reflog"
 msgstr "kopiera en gren och dess reflogg"
 
-#: builtin/branch.c:666
+#: builtin/branch.c:680
 msgid "copy a branch, even if target exists"
 msgstr "kopiera en gren, även om målet finns"
 
-#: builtin/branch.c:667
+#: builtin/branch.c:681
 msgid "list branch names"
 msgstr "lista namn på grenar"
 
-#: builtin/branch.c:668
+#: builtin/branch.c:682
 msgid "show current branch name"
 msgstr "visa namn på aktuell gren"
 
-#: builtin/branch.c:669
+#: builtin/branch.c:683 builtin/submodule--helper.c:3075
 msgid "create the branch's reflog"
 msgstr "skapa grenens reflogg"
 
-#: builtin/branch.c:671
+#: builtin/branch.c:685
 msgid "edit the description for the branch"
 msgstr "redigera beskrivning för grenen"
 
-#: builtin/branch.c:672
+#: builtin/branch.c:686
 msgid "force creation, move/rename, deletion"
 msgstr "tvinga skapande, flytt/namnändring, borttagande"
 
-#: builtin/branch.c:673
+#: builtin/branch.c:687
 msgid "print only branches that are merged"
 msgstr "visa endast sammanslagna grenar"
 
-#: builtin/branch.c:674
+#: builtin/branch.c:688
 msgid "print only branches that are not merged"
 msgstr "visa endast ej sammanslagna grenar"
 
-#: builtin/branch.c:675
+#: builtin/branch.c:689
 msgid "list branches in columns"
 msgstr "visa grenar i spalter"
 
-#: builtin/branch.c:677 builtin/for-each-ref.c:45 builtin/notes.c:413
+#: builtin/branch.c:691 builtin/for-each-ref.c:45 builtin/notes.c:413
 #: builtin/notes.c:416 builtin/notes.c:579 builtin/notes.c:582
-#: builtin/tag.c:475
+#: builtin/tag.c:476
 msgid "object"
 msgstr "objekt"
 
-#: builtin/branch.c:678
+#: builtin/branch.c:692
 msgid "print only branches of the object"
 msgstr "visa endast grenar för objektet"
 
-#: builtin/branch.c:679 builtin/for-each-ref.c:51 builtin/tag.c:482
+#: builtin/branch.c:693 builtin/for-each-ref.c:51 builtin/tag.c:483
 msgid "sorting and filtering are case insensitive"
 msgstr "sortering och filtrering skiljer gemener och VERSALER"
 
-#: builtin/branch.c:680 builtin/for-each-ref.c:41 builtin/tag.c:480
-#: builtin/verify-tag.c:38
+#: builtin/branch.c:694 builtin/ls-files.c:667
+msgid "recurse through submodules"
+msgstr "rekursera ner i undermoduler"
+
+#: builtin/branch.c:695 builtin/for-each-ref.c:41 builtin/ls-tree.c:358
+#: builtin/tag.c:481 builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "format att använda för utdata"
 
-#: builtin/branch.c:703 builtin/clone.c:678
+#: builtin/branch.c:718 builtin/clone.c:684
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD hittades inte under refs/heads!"
 
-#: builtin/branch.c:742 builtin/branch.c:798 builtin/branch.c:807
+#: builtin/branch.c:739
+msgid ""
+"branch with --recurse-submodules can only be used if submodule."
+"propagateBranches is enabled"
+msgstr ""
+"gren med --recurse-submodules kan endast användas om submodule."
+"propagateBranches har aktiverats"
+
+#: builtin/branch.c:741
+msgid "--recurse-submodules can only be used to create branches"
+msgstr "--recurse-submodules jan endast användas för att skapa grenar"
+
+#: builtin/branch.c:770 builtin/branch.c:826 builtin/branch.c:835
 msgid "branch name required"
 msgstr "grennamn krävs"
 
-#: builtin/branch.c:774
+#: builtin/branch.c:802
 msgid "Cannot give description to detached HEAD"
 msgstr "Kan inte beskriva frånkopplad HEAD"
 
-#: builtin/branch.c:779
+#: builtin/branch.c:807
 msgid "cannot edit description of more than one branch"
 msgstr "kan inte redigera beskrivning för mer än en gren"
 
-#: builtin/branch.c:786
+#: builtin/branch.c:814
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "Inga incheckningar på grenen \"%s\" ännu."
 
-#: builtin/branch.c:789
+#: builtin/branch.c:817
 #, c-format
 msgid "No branch named '%s'."
 msgstr "Ingen gren vid namnet \"%s\"."
 
-#: builtin/branch.c:804
+#: builtin/branch.c:832
 msgid "too many branches for a copy operation"
 msgstr "för många grenar för kopiering"
 
-#: builtin/branch.c:813
+#: builtin/branch.c:841
 msgid "too many arguments for a rename operation"
 msgstr "för många flaggor för namnbyte"
 
-#: builtin/branch.c:818
+#: builtin/branch.c:846
 msgid "too many arguments to set new upstream"
 msgstr "för många flaggor för att byta uppström"
 
-#: builtin/branch.c:822
+#: builtin/branch.c:850
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
 msgstr ""
 "kunde inte sätta uppström för HEAD till %s när det inte pekar mot någon gren."
 
-#: builtin/branch.c:825 builtin/branch.c:848
+#: builtin/branch.c:853 builtin/branch.c:873
 #, c-format
 msgid "no such branch '%s'"
 msgstr "okänd gren \"%s\""
 
-#: builtin/branch.c:829
+#: builtin/branch.c:857
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "grenen \"%s\" finns inte"
 
-#: builtin/branch.c:842
+#: builtin/branch.c:867
 msgid "too many arguments to unset upstream"
 msgstr "för många flaggor för att ta bort uppström"
 
-#: builtin/branch.c:846
+#: builtin/branch.c:871
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr ""
 "kunde inte ta bort uppström för HEAD när det inte pekar mot någon gren."
 
-#: builtin/branch.c:852
+#: builtin/branch.c:877
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "Grenen \"%s\" har ingen uppströmsinformation"
 
-#: builtin/branch.c:862
+#: builtin/branch.c:890
 msgid ""
 "The -a, and -r, options to 'git branch' do not take a branch name.\n"
 "Did you mean to use: -a|-r --list <pattern>?"
@@ -11942,7 +12197,7 @@ msgstr ""
 "Flaggorna -a och -r på \"git branch\" tar inte ett namn på gren.\n"
 "Menade du att använda: -a|-r --list <mönster>?"
 
-#: builtin/branch.c:866
+#: builtin/branch.c:894
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -12058,19 +12313,19 @@ msgstr "git bundle list-heads <fil> [<refnamn>...]"
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr "git bundle unbundle <fil> [<refnamn>...]"
 
-#: builtin/bundle.c:65 builtin/pack-objects.c:3876
+#: builtin/bundle.c:65 builtin/pack-objects.c:3899
 msgid "do not show progress meter"
 msgstr "visa inte förloppsindikator"
 
-#: builtin/bundle.c:67 builtin/bundle.c:167 builtin/pack-objects.c:3878
+#: builtin/bundle.c:67 builtin/bundle.c:168 builtin/pack-objects.c:3901
 msgid "show progress meter"
 msgstr "visa förloppsindikator"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3880
+#: builtin/bundle.c:69 builtin/pack-objects.c:3903
 msgid "show progress meter during object writing phase"
 msgstr "visa förloppsindikator under objektskrivningsfasen"
 
-#: builtin/bundle.c:72 builtin/pack-objects.c:3883
+#: builtin/bundle.c:72 builtin/pack-objects.c:3906
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "som --all-progress när förloppsindikatorn visas"
 
@@ -12082,130 +12337,244 @@ msgstr "ange formatversion för bunten."
 msgid "Need a repository to create a bundle."
 msgstr "Behöver ett arkiv för att skapa en bunt."
 
-#: builtin/bundle.c:107
+#: builtin/bundle.c:108
 msgid "do not show bundle details"
 msgstr "visa inte buntdetaljer"
 
-#: builtin/bundle.c:126
+#: builtin/bundle.c:127
 #, c-format
 msgid "%s is okay\n"
 msgstr "%s är okej\n"
 
-#: builtin/bundle.c:182
+#: builtin/bundle.c:183
 msgid "Need a repository to unbundle."
 msgstr "Behöver ett arkiv för att packa upp en bunt."
 
-#: builtin/bundle.c:185
+#: builtin/bundle.c:186
 msgid "Unbundling objects"
 msgstr "Packar upp objektbunt"
 
-#: builtin/bundle.c:219 builtin/remote.c:1733
+#: builtin/bundle.c:220 builtin/remote.c:1758
 #, c-format
 msgid "Unknown subcommand: %s"
 msgstr "Okänt underkommando: %s"
 
-#: builtin/cat-file.c:622
+#: builtin/cat-file.c:568
+msgid "flush is only for --buffer mode"
+msgstr "flush är endast till för --buffer-läge"
+
+#: builtin/cat-file.c:612
+msgid "empty command in input"
+msgstr "tomt kommando i indata"
+
+#: builtin/cat-file.c:614
+#, c-format
+msgid "whitespace before command: '%s'"
+msgstr "blanksteg före kommando: \"%s\""
+
+#: builtin/cat-file.c:623
+#, c-format
+msgid "%s requires arguments"
+msgstr "%s kräver ett argument"
+
+#: builtin/cat-file.c:628
+#, c-format
+msgid "%s takes no arguments"
+msgstr "%s tar inget argument"
+
+#: builtin/cat-file.c:636
+#, c-format
+msgid "unknown command: '%s'"
+msgstr "okänt kommando: \"%s\""
+
+#: builtin/cat-file.c:795
+msgid "only one batch option may be specified"
+msgstr "endast en buntflagga kan anges"
+
+#: builtin/cat-file.c:824
+msgid "git cat-file <type> <object>"
+msgstr "git cat-file <typ> <objekt>"
+
+#: builtin/cat-file.c:825
+msgid "git cat-file (-e | -p) <object>"
+msgstr "git cat-file (-e | -p) <objekt>"
+
+#: builtin/cat-file.c:826
+msgid "git cat-file (-t | -s) [--allow-unknown-type] <object>"
+msgstr "git cat-file (-t | -s) [--allow-unknown-type] <objekt>"
+
+#: builtin/cat-file.c:827
 msgid ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <type> | --textconv | --filters) [--path=<path>] <object>"
+"git cat-file (--batch | --batch-check | --batch-command) [--batch-all-"
+"objects]\n"
+"             [--buffer] [--follow-symlinks] [--unordered]\n"
+"             [--textconv | --filters]"
 msgstr ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <typ> | --textconv | --filters) [--path=<sökväg>] <objekt>"
+"git cat-file (--batch | --batch-check | --batch-command) [--batch-all-"
+"objects]\n"
+"             [--buffer] [--follow-symlinks] [--unordered]\n"
+"             [--textconv | --filters]"
 
-#: builtin/cat-file.c:623
+#: builtin/cat-file.c:830
 msgid ""
-"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
-"symlinks] [--textconv | --filters]"
+"git cat-file (--textconv | --filters)\n"
+"             [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]"
 msgstr ""
-"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
-"symlinks] [--textconv | --filters]"
+"git cat-file (--textconv | --filters)\n"
+"             [<revision>:<sökväg|träd-igt> | --path=<sökväg|träd-igt> "
+"<revision>]"
 
-#: builtin/cat-file.c:644
-msgid "only one batch option may be specified"
-msgstr "endast en buntflagga kan anges"
+#: builtin/cat-file.c:836
+msgid "Check object existence or emit object contents"
+msgstr "Kontrollera om objektet finns eller mata ut objektets innehåll"
+
+#: builtin/cat-file.c:838
+msgid "check if <object> exists"
+msgstr "kontrollera om <objekt> finns"
 
-#: builtin/cat-file.c:662
-msgid "<type> can be one of: blob, tree, commit, tag"
-msgstr "<typ> kan vara en av: blob, tree, commit, tag"
+#: builtin/cat-file.c:839
+msgid "pretty-print <object> content"
+msgstr "visa <objekt>-innehåll snyggt"
 
-#: builtin/cat-file.c:663
-msgid "show object type"
-msgstr "visa objekttyp"
+#: builtin/cat-file.c:841
+msgid "Emit [broken] object attributes"
+msgstr "Skriv ut [trasiga] objektattribut"
 
-#: builtin/cat-file.c:664
+#: builtin/cat-file.c:842
+msgid "show object type (one of 'blob', 'tree', 'commit', 'tag', ...)"
+msgstr "visa objekttyp (en av: \"blob\", \"tree\", \"commit\", \"tag\", ...)"
+
+#: builtin/cat-file.c:843
 msgid "show object size"
 msgstr "visa objektstorlek"
 
-#: builtin/cat-file.c:666
-msgid "exit with zero when there's no error"
-msgstr "avsluta med noll när det inte uppstått något fel"
+#: builtin/cat-file.c:845
+msgid "allow -s and -t to work with broken/corrupt objects"
+msgstr "låter -s och -t att fungera med trasiga/sönderskrivna objekt"
 
-#: builtin/cat-file.c:667
-msgid "pretty-print object's content"
-msgstr "visa objektets innehåll snyggt"
+#: builtin/cat-file.c:847
+msgid "Batch objects requested on stdin (or --batch-all-objects)"
+msgstr "Buntobjekt ombeds på standard in (eller --batch-all-objects)"
 
-#: builtin/cat-file.c:669
-msgid "for blob objects, run textconv on object's content"
-msgstr "för blob-objekt, kör filter på objektets innehåll"
+#: builtin/cat-file.c:849
+msgid "show full <object> or <rev> contents"
+msgstr "visa komplett innehåll för <objekt> eller <rev>"
 
-#: builtin/cat-file.c:671
-msgid "for blob objects, run filters on object's content"
-msgstr "för blob-objekt, kör filger på objektets innehåll"
+#: builtin/cat-file.c:853
+msgid "like --batch, but don't emit <contents>"
+msgstr "som --batch, men mata inte ut <innehåll>"
 
-#: builtin/cat-file.c:672
-msgid "blob"
-msgstr "blob"
+#: builtin/cat-file.c:857
+msgid "read commands from stdin"
+msgstr "läs kommandon från standard in"
 
-#: builtin/cat-file.c:673
-msgid "use a specific path for --textconv/--filters"
-msgstr "använd specifik sökväg för --textconv/--filters"
+#: builtin/cat-file.c:861
+msgid "with --batch[-check]: ignores stdin, batches all known objects"
+msgstr "med --batch[-check]: ignorear standard in, buntar alla kända objekt"
 
-#: builtin/cat-file.c:675
-msgid "allow -s and -t to work with broken/corrupt objects"
-msgstr "låter -s och -t att fungera med trasiga/sönderskrivna objekt"
+#: builtin/cat-file.c:863
+msgid "Change or optimize batch output"
+msgstr "Ändra eller optimera buntutdata"
 
-#: builtin/cat-file.c:676
+#: builtin/cat-file.c:864
 msgid "buffer --batch output"
 msgstr "buffra utdata från --batch"
 
-#: builtin/cat-file.c:678
-msgid "show info and content of objects fed from the standard input"
-msgstr "visa information och innehåll för objekt som listas på standard in"
+#: builtin/cat-file.c:866
+msgid "follow in-tree symlinks"
+msgstr "följ symboliska länkar inom trädet"
 
-#: builtin/cat-file.c:682
-msgid "show info about objects fed from the standard input"
-msgstr "visa information för objekt som listas på standard in"
+#: builtin/cat-file.c:868
+msgid "do not order objects before emitting them"
+msgstr "sortera inte objekt innan de matas ut"
 
-#: builtin/cat-file.c:686
-msgid "follow in-tree symlinks (used with --batch or --batch-check)"
+#: builtin/cat-file.c:870
+msgid ""
+"Emit object (blob or tree) with conversion or filter (stand-alone, or with "
+"batch)"
 msgstr ""
-"följ symboliska länkar i trädet (använd med --batch eller --batch-check)"
+"Mata ut objekt (blob eller träd) med konvertering eller filter (fristående "
+"eller med bunt)"
 
-#: builtin/cat-file.c:688
-msgid "show all objects with --batch or --batch-check"
-msgstr "visa alla objekt med --batch eller --batch-check"
+#: builtin/cat-file.c:872
+msgid "run textconv on object's content"
+msgstr "kör textconv på objektets innehåll"
 
-#: builtin/cat-file.c:690
-msgid "do not order --batch-all-objects output"
-msgstr "ordna inte --batch-all-objects output"
+#: builtin/cat-file.c:874
+msgid "run filters on object's content"
+msgstr "kör filter på objektets innehåll"
 
-#: builtin/check-attr.c:13
-msgid "git check-attr [-a | --all | <attr>...] [--] <pathname>..."
-msgstr "git check-attr [-a | --all | <attr>...] [--] <sökväg>..."
+#: builtin/cat-file.c:875
+msgid "blob|tree"
+msgstr "blob|träd"
 
-#: builtin/check-attr.c:14
-msgid "git check-attr --stdin [-z] [-a | --all | <attr>...]"
-msgstr "git check-attr --stdin [-z] [-a | --all | <attr>...]"
+#: builtin/cat-file.c:876
+msgid "use a <path> for (--textconv | --filters); Not with 'batch'"
+msgstr "använd en <sökväg> för (--textconv | --filters): Inte med 'batch'"
 
-#: builtin/check-attr.c:21
-msgid "report all attributes set on file"
-msgstr "visa alla attribut som satts på filen"
+#: builtin/cat-file.c:894
+#, c-format
+msgid "'%s=<%s>' needs '%s' or '%s'"
+msgstr "'%s=<%s>' behöver '%s' eller '%s'"
 
-#: builtin/check-attr.c:22
-msgid "use .gitattributes only from the index"
+#: builtin/cat-file.c:896
+msgid "path|tree-ish"
+msgstr "sökväg|träd-igt"
+
+#: builtin/cat-file.c:903 builtin/cat-file.c:906 builtin/cat-file.c:909
+#, c-format
+msgid "'%s' requires a batch mode"
+msgstr "\"%s\" behöver ett buntläge"
+
+#: builtin/cat-file.c:921
+#, c-format
+msgid "'-%c' is incompatible with batch mode"
+msgstr "\"-%c\" är inkompatibel med buntläge"
+
+#: builtin/cat-file.c:924
+msgid "batch modes take no arguments"
+msgstr "buntlägen inte några argument"
+
+#: builtin/cat-file.c:932 builtin/cat-file.c:935
+#, c-format
+msgid "<rev> required with '%s'"
+msgstr "<rev> krävs med \"%s\""
+
+#: builtin/cat-file.c:938
+#, c-format
+msgid "<object> required with '-%c'"
+msgstr "<objekt> krävs med \"-%c\""
+
+#: builtin/cat-file.c:943 builtin/notes.c:374 builtin/notes.c:429
+#: builtin/notes.c:507 builtin/notes.c:519 builtin/notes.c:596
+#: builtin/notes.c:663 builtin/notes.c:813 builtin/notes.c:965
+#: builtin/notes.c:987 builtin/prune-packed.c:25 builtin/receive-pack.c:2489
+#: builtin/tag.c:592
+msgid "too many arguments"
+msgstr "för många argument"
+
+#: builtin/cat-file.c:947
+#, c-format
+msgid "only two arguments allowed in <type> <object> mode, not %d"
+msgstr "endast två argument krävs i <typ> <objekt>-läge, inte %d"
+
+#: builtin/check-attr.c:13
+msgid "git check-attr [-a | --all | <attr>...] [--] <pathname>..."
+msgstr "git check-attr [-a | --all | <attr>...] [--] <sökväg>..."
+
+#: builtin/check-attr.c:14
+msgid "git check-attr --stdin [-z] [-a | --all | <attr>...]"
+msgstr "git check-attr --stdin [-z] [-a | --all | <attr>...]"
+
+#: builtin/check-attr.c:21
+msgid "report all attributes set on file"
+msgstr "visa alla attribut som satts på filen"
+
+#: builtin/check-attr.c:22
+msgid "use .gitattributes only from the index"
 msgstr "använd .gitattributes endast från indexet"
 
-#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:100
+#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:101
 msgid "read file names from stdin"
 msgstr "läs filnamn från standard in"
 
@@ -12213,8 +12582,8 @@ msgstr "läs filnamn från standard in"
 msgid "terminate input and output records by a NUL character"
 msgstr "avsluta in- och utdataposter med NUL-tecken"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1532 builtin/gc.c:550
-#: builtin/worktree.c:493
+#: builtin/check-ignore.c:21 builtin/checkout.c:1550 builtin/gc.c:550
+#: builtin/worktree.c:565
 msgid "suppress progress reporting"
 msgstr "undertryck förloppsrapportering"
 
@@ -12271,161 +12640,165 @@ msgstr "inga kontakter angavs"
 msgid "git checkout--worker [<options>]"
 msgstr "git checkout--worker [<flaggor>]"
 
-#: builtin/checkout--worker.c:118 builtin/checkout-index.c:201
-#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1864
-#: builtin/submodule--helper.c:1867 builtin/submodule--helper.c:1875
-#: builtin/submodule--helper.c:2511 builtin/submodule--helper.c:2577
-#: builtin/worktree.c:491 builtin/worktree.c:728
+#: builtin/checkout--worker.c:118 builtin/checkout-index.c:235
+#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1878
+#: builtin/submodule--helper.c:1881 builtin/submodule--helper.c:1889
+#: builtin/submodule--helper.c:2716 builtin/worktree.c:563
+#: builtin/worktree.c:808
 msgid "string"
 msgstr "sträng"
 
-#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:236
 msgid "when creating files, prepend <string>"
 msgstr "när filer skapas, lägg till <sträng> först"
 
-#: builtin/checkout-index.c:152
+#: builtin/checkout-index.c:184
 msgid "git checkout-index [<options>] [--] [<file>...]"
 msgstr "git checkout-index [<flaggor>] [--] [<fil>...]"
 
-#: builtin/checkout-index.c:169
+#: builtin/checkout-index.c:201
 msgid "stage should be between 1 and 3 or all"
 msgstr "etapp måste vara mellan 1 och 3 eller \"all\""
 
-#: builtin/checkout-index.c:187
+#: builtin/checkout-index.c:219
 msgid "check out all files in the index"
 msgstr "checka ut alla filer i indexet"
 
-#: builtin/checkout-index.c:188
+#: builtin/checkout-index.c:221
+msgid "do not skip files with skip-worktree set"
+msgstr "hoppa inte över filer med skip-worktree satt"
+
+#: builtin/checkout-index.c:222
 msgid "force overwrite of existing files"
 msgstr "tvinga överskrivning av befintliga filer"
 
-#: builtin/checkout-index.c:190
+#: builtin/checkout-index.c:224
 msgid "no warning for existing files and files not in index"
 msgstr "ingen varning för existerande filer och filer ej i indexet"
 
-#: builtin/checkout-index.c:192
+#: builtin/checkout-index.c:226
 msgid "don't checkout new files"
 msgstr "checka inte ut nya filer"
 
-#: builtin/checkout-index.c:194
+#: builtin/checkout-index.c:228
 msgid "update stat information in the index file"
 msgstr "uppdatera stat-information i indexfilen"
 
-#: builtin/checkout-index.c:198
+#: builtin/checkout-index.c:232
 msgid "read list of paths from the standard input"
 msgstr "läs listan över sökvägar från standard in"
 
-#: builtin/checkout-index.c:200
+#: builtin/checkout-index.c:234
 msgid "write the content to temporary files"
 msgstr "skriv innehåll till temporära filer"
 
-#: builtin/checkout-index.c:204
+#: builtin/checkout-index.c:238
 msgid "copy out the files from named stage"
 msgstr "kopiera ut filer från namngiven etapp"
 
-#: builtin/checkout.c:33
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [<flaggor>] <gren>"
 
-#: builtin/checkout.c:34
+#: builtin/checkout.c:35
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [<flaggor>] [<gren>] -- <fil>..."
 
-#: builtin/checkout.c:39
+#: builtin/checkout.c:40
 msgid "git switch [<options>] [<branch>]"
 msgstr "git switch [<flaggor>] [<gren>]"
 
-#: builtin/checkout.c:44
+#: builtin/checkout.c:45
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<flaggor>] [--source=<gren>] <fil>..."
 
-#: builtin/checkout.c:198 builtin/checkout.c:237
+#: builtin/checkout.c:199 builtin/checkout.c:238
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "sökvägen \"%s\" har inte vår version"
 
-#: builtin/checkout.c:200 builtin/checkout.c:239
+#: builtin/checkout.c:201 builtin/checkout.c:240
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "sökvägen \"%s\" har inte deras version"
 
-#: builtin/checkout.c:216
+#: builtin/checkout.c:217
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "sökvägen \"%s\" innehåller inte alla nödvändiga versioner"
 
-#: builtin/checkout.c:269
+#: builtin/checkout.c:271
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "sökvägen \"%s\" innehåller inte nödvändiga versioner"
 
-#: builtin/checkout.c:286
+#: builtin/checkout.c:291
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "sökväg \"%s\": kan inte slå ihop"
 
-#: builtin/checkout.c:302
+#: builtin/checkout.c:307
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "Kunde inte lägga till sammanslagningsresultat för \"%s\""
 
-#: builtin/checkout.c:419
+#: builtin/checkout.c:424
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "Återskapade %d sammanslagningskonflikt"
 msgstr[1] "Återskapade %d sammanslagningskonflikter"
 
-#: builtin/checkout.c:424
+#: builtin/checkout.c:429
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "Uppdaterade %d sökväg från %s"
 msgstr[1] "Uppdaterade %d sökvägar från %s"
 
-#: builtin/checkout.c:431
+#: builtin/checkout.c:436
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "Uppdaterade %d sökväg från indexet"
 msgstr[1] "Uppdaterade %d sökvägar från indexet"
 
-#: builtin/checkout.c:454 builtin/checkout.c:457 builtin/checkout.c:460
-#: builtin/checkout.c:464
+#: builtin/checkout.c:459 builtin/checkout.c:462 builtin/checkout.c:465
+#: builtin/checkout.c:469
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "\"%s\" kan inte användas vid uppdatering av sökvägar"
 
-#: builtin/checkout.c:474
+#: builtin/checkout.c:479
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr "Kan inte uppdatera sökvägar och växla till grenen \"%s\" samtidigt."
 
-#: builtin/checkout.c:478
+#: builtin/checkout.c:483
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "varken \"%s\" eller \"%s\" har angivits"
 
-#: builtin/checkout.c:482
+#: builtin/checkout.c:487
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "\"%s\" måste användas när \"%s\" inte anges"
 
-#: builtin/checkout.c:487 builtin/checkout.c:492
+#: builtin/checkout.c:492 builtin/checkout.c:497
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "\"%s\" eller \"%s\" kan inte användas med %s"
 
-#: builtin/checkout.c:566 builtin/checkout.c:573
+#: builtin/checkout.c:571 builtin/checkout.c:578
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "sökvägen \"%s\" har inte slagits ihop"
 
-#: builtin/checkout.c:747
+#: builtin/checkout.c:753
 msgid "you need to resolve your current index first"
 msgstr "du måste lösa ditt befintliga index först"
 
-#: builtin/checkout.c:797
+#: builtin/checkout.c:809
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -12434,50 +12807,50 @@ msgstr ""
 "kan inte fortsätta med köade ändringar i följande filer:\n"
 "%s"
 
-#: builtin/checkout.c:890
+#: builtin/checkout.c:902
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "Kan inte skapa referenslogg för \"%s\": %s\n"
 
-#: builtin/checkout.c:934
+#: builtin/checkout.c:947
 msgid "HEAD is now at"
 msgstr "HEAD är nu på"
 
-#: builtin/checkout.c:938 builtin/clone.c:609 t/helper/test-fast-rebase.c:203
+#: builtin/checkout.c:951 builtin/clone.c:615 t/helper/test-fast-rebase.c:203
 msgid "unable to update HEAD"
 msgstr "kan inte uppdatera HEAD"
 
-#: builtin/checkout.c:942
+#: builtin/checkout.c:955
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "Återställ gren \"%s\"\n"
 
-#: builtin/checkout.c:945
+#: builtin/checkout.c:958
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Redan på \"%s\"\n"
 
-#: builtin/checkout.c:949
+#: builtin/checkout.c:962
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "Växlade till och nollställde grenen \"%s\"\n"
 
-#: builtin/checkout.c:951 builtin/checkout.c:1388
+#: builtin/checkout.c:964 builtin/checkout.c:1398
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "Växlade till en ny gren \"%s\"\n"
 
-#: builtin/checkout.c:953
+#: builtin/checkout.c:966
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "Växlade till grenen \"%s\"\n"
 
-#: builtin/checkout.c:1004
+#: builtin/checkout.c:1017
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " ... och %d till.\n"
 
-#: builtin/checkout.c:1010
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -12500,7 +12873,7 @@ msgstr[1] ""
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1029
+#: builtin/checkout.c:1042
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -12527,19 +12900,19 @@ msgstr[1] ""
 " git branch <nytt_grennamn> %s\n"
 "\n"
 
-#: builtin/checkout.c:1064
+#: builtin/checkout.c:1077
 msgid "internal error in revision walk"
 msgstr "internt fel vid genomgång av revisioner (revision walk)"
 
-#: builtin/checkout.c:1068
+#: builtin/checkout.c:1081
 msgid "Previous HEAD position was"
 msgstr "Tidigare position för HEAD var"
 
-#: builtin/checkout.c:1114 builtin/checkout.c:1383
+#: builtin/checkout.c:1124 builtin/checkout.c:1393
 msgid "You are on a branch yet to be born"
 msgstr "Du är på en gren som ännu inte är född"
 
-#: builtin/checkout.c:1196
+#: builtin/checkout.c:1206
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -12548,7 +12921,7 @@ msgstr ""
 "\"%s\" kan vara både en lokal fil och en spårande gren.\n"
 "Använd -- (och möjligen --no-guess) för att göra otvetydig"
 
-#: builtin/checkout.c:1203
+#: builtin/checkout.c:1213
 msgid ""
 "If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
 "you can do so by fully qualifying the name with the --track option:\n"
@@ -12568,51 +12941,58 @@ msgstr ""
 "föredra en fjärr, t.ex fjärren \"origin\" kan du ställa in\n"
 "checkout.defaultRemote=origin i din konfiguration."
 
-#: builtin/checkout.c:1213
+#: builtin/checkout.c:1223
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "\"%s\" motsvarar flera (%d) spårade fjärrgrenar"
 
-#: builtin/checkout.c:1279
+#: builtin/checkout.c:1289
 msgid "only one reference expected"
 msgstr "endast en referens förväntades"
 
-#: builtin/checkout.c:1296
+#: builtin/checkout.c:1306
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "endast en referens förväntades, %d gavs."
 
-#: builtin/checkout.c:1342 builtin/worktree.c:269 builtin/worktree.c:436
+#: builtin/checkout.c:1352 builtin/worktree.c:338 builtin/worktree.c:508
 #, c-format
 msgid "invalid reference: %s"
 msgstr "felaktig referens: %s"
 
-#: builtin/checkout.c:1355 builtin/checkout.c:1725
+#: builtin/checkout.c:1365 builtin/checkout.c:1744
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "referensen är inte ett träd: %s"
 
-#: builtin/checkout.c:1402
+#: builtin/checkout.c:1413
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "förväntade gren, fick taggen \"%s\""
 
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1415
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "förväntade gren, fick fjärrgrenen \"%s\""
 
-#: builtin/checkout.c:1405 builtin/checkout.c:1413
+#: builtin/checkout.c:1417 builtin/checkout.c:1426
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "förväntade gren, fick \"%s\""
 
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1420
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "förväntade gren, fick incheckningen \"%s\""
 
-#: builtin/checkout.c:1424
+#: builtin/checkout.c:1429
+msgid ""
+"If you want to detach HEAD at the commit, try again with the --detach option."
+msgstr ""
+"Om du vill koppla från HEAD vid incheckningen, försök igen med flaggan --"
+"detach."
+
+#: builtin/checkout.c:1442
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
@@ -12620,7 +13000,7 @@ msgstr ""
 "kan inte växla gren vid sammanslagning\n"
 "Överväg \"git merge --quit\" eller \"git worktree add\"."
 
-#: builtin/checkout.c:1428
+#: builtin/checkout.c:1446
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
@@ -12628,7 +13008,7 @@ msgstr ""
 "kan inte växla gren mitt i en \"am\"-körning\n"
 "Överväg \"git am --quit\" eller \"git worktree add\"."
 
-#: builtin/checkout.c:1432
+#: builtin/checkout.c:1450
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -12636,7 +13016,7 @@ msgstr ""
 "kan inte växla gren vid ombasering\n"
 "Överväg \"git rebase --quit\" eller \"git worktree add\"."
 
-#: builtin/checkout.c:1436
+#: builtin/checkout.c:1454
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -12644,7 +13024,7 @@ msgstr ""
 "kan inte växla gren i en \"cherry-pick\"\n"
 "Överväg \"git cherry-pick --quit\" eller \"git worktree add\"."
 
-#: builtin/checkout.c:1440
+#: builtin/checkout.c:1458
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -12652,127 +13032,123 @@ msgstr ""
 "kan inte växla gren i en \"revert\"\n"
 "Överväg \"git revert --quit\" eller \"git worktree add\"."
 
-#: builtin/checkout.c:1444
+#: builtin/checkout.c:1462
 msgid "you are switching branch while bisecting"
 msgstr "då växlar grenar medan du gör en \"bisect\""
 
-#: builtin/checkout.c:1451
+#: builtin/checkout.c:1469
 msgid "paths cannot be used with switching branches"
 msgstr "sökvägar kan inte användas vid byte av gren"
 
-#: builtin/checkout.c:1454 builtin/checkout.c:1458 builtin/checkout.c:1462
+#: builtin/checkout.c:1472 builtin/checkout.c:1476 builtin/checkout.c:1480
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "\"%s\" kan inte användas vid byte av gren"
 
-#: builtin/checkout.c:1466 builtin/checkout.c:1469 builtin/checkout.c:1472
-#: builtin/checkout.c:1477 builtin/checkout.c:1482
+#: builtin/checkout.c:1484 builtin/checkout.c:1487 builtin/checkout.c:1490
+#: builtin/checkout.c:1495 builtin/checkout.c:1500
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "\"%s\" kan inte användas med \"%s\""
 
-#: builtin/checkout.c:1479
+#: builtin/checkout.c:1497
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "\"%s\" kan inte ta <startpunkt>"
 
-#: builtin/checkout.c:1487
+#: builtin/checkout.c:1505
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "Kan inte växla gren till icke-incheckningen \"%s\""
 
-#: builtin/checkout.c:1494
+#: builtin/checkout.c:1512
 msgid "missing branch or commit argument"
 msgstr "saknar gren- eller incheckingsargument"
 
-#: builtin/checkout.c:1537
+#: builtin/checkout.c:1555
 msgid "perform a 3-way merge with the new branch"
 msgstr "utför en 3-vägssammanslagning för den nya grenen"
 
-#: builtin/checkout.c:1538 builtin/log.c:1825 parse-options.h:323
+#: builtin/checkout.c:1556 builtin/log.c:1844 parse-options.h:354
 msgid "style"
 msgstr "stil"
 
-#: builtin/checkout.c:1539
+#: builtin/checkout.c:1557
 msgid "conflict style (merge, diff3, or zdiff3)"
 msgstr "konfliktstil (merge, diff3 eller zdiff3)"
 
-#: builtin/checkout.c:1551 builtin/worktree.c:488
+#: builtin/checkout.c:1569 builtin/worktree.c:560
 msgid "detach HEAD at named commit"
 msgstr "koppla från HEAD vid namngiven incheckning"
 
-#: builtin/checkout.c:1553
-msgid "set up tracking mode (see git-pull(1))"
-msgstr "ställ in spårningsläge (se git-pull(1))"
-
-#: builtin/checkout.c:1556
+#: builtin/checkout.c:1574
 msgid "force checkout (throw away local modifications)"
 msgstr "tvinga utcheckning (kasta bort lokala ändringar)"
 
-#: builtin/checkout.c:1558
+#: builtin/checkout.c:1576
 msgid "new-branch"
 msgstr "ny-gren"
 
-#: builtin/checkout.c:1558
+#: builtin/checkout.c:1576
 msgid "new unparented branch"
 msgstr "ny gren utan förälder"
 
-#: builtin/checkout.c:1560 builtin/merge.c:305
+#: builtin/checkout.c:1578 builtin/merge.c:305
 msgid "update ignored files (default)"
 msgstr "uppdatera ignorerade filer (standard)"
 
-#: builtin/checkout.c:1563
+#: builtin/checkout.c:1581
 msgid "do not check if another worktree is holding the given ref"
 msgstr ""
 "kontrollera inte om en annan arbetskatalog håller den angivna referensen"
 
-#: builtin/checkout.c:1576
+#: builtin/checkout.c:1594
 msgid "checkout our version for unmerged files"
 msgstr "checka ut vår version för ej sammanslagna filer"
 
-#: builtin/checkout.c:1579
+#: builtin/checkout.c:1597
 msgid "checkout their version for unmerged files"
 msgstr "checka ut deras version för ej sammanslagna filer"
 
-#: builtin/checkout.c:1583
+#: builtin/checkout.c:1601
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "begränsa inte sökvägar till endast glesa poster"
 
-#: builtin/checkout.c:1640
+#: builtin/checkout.c:1659
 #, c-format
 msgid "options '-%c', '-%c', and '%s' cannot be used together"
 msgstr "flaggorna \"%-c\", \"-%c\" och \"%s\" kan inte användas samtidigt"
 
-#: builtin/checkout.c:1681
+#: builtin/checkout.c:1700
 msgid "--track needs a branch name"
 msgstr "--track behöver ett namn på en gren"
 
-#: builtin/checkout.c:1686
+#: builtin/checkout.c:1705
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "grennamn saknas; försök med -%c"
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1737
 #, c-format
 msgid "could not resolve %s"
 msgstr "kunde inte upplösa %s"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1753
 msgid "invalid path specification"
 msgstr "felaktig sökvägsangivelse"
 
-#: builtin/checkout.c:1741
+#: builtin/checkout.c:1760
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr ""
 "\"%s\" är inte en incheckning och grenen \"%s\" kan inte skapas från den"
 
-#: builtin/checkout.c:1745
+#: builtin/checkout.c:1764
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout: --detach tar inte en sökväg som argument \"%s\""
 
-#: builtin/checkout.c:1770
+#: builtin/checkout.c:1789
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -12780,71 +13156,71 @@ msgstr ""
 "git checkout: --ours/--theirs, --force och --merge är inkompatibla när\n"
 "du checkar ut från indexet."
 
-#: builtin/checkout.c:1775
+#: builtin/checkout.c:1794
 msgid "you must specify path(s) to restore"
 msgstr "du måste ange katalog(er) att återställa"
 
-#: builtin/checkout.c:1800 builtin/checkout.c:1802 builtin/checkout.c:1854
-#: builtin/checkout.c:1856 builtin/clone.c:126 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2959
-#: builtin/submodule--helper.c:3253 builtin/worktree.c:484
-#: builtin/worktree.c:486
+#: builtin/checkout.c:1819 builtin/checkout.c:1821 builtin/checkout.c:1873
+#: builtin/checkout.c:1875 builtin/clone.c:130 builtin/remote.c:171
+#: builtin/remote.c:173 builtin/submodule--helper.c:3038
+#: builtin/submodule--helper.c:3371 builtin/worktree.c:556
+#: builtin/worktree.c:558
 msgid "branch"
 msgstr "gren"
 
-#: builtin/checkout.c:1801
+#: builtin/checkout.c:1820
 msgid "create and checkout a new branch"
 msgstr "skapa och checka ut en ny gren"
 
-#: builtin/checkout.c:1803
+#: builtin/checkout.c:1822
 msgid "create/reset and checkout a branch"
 msgstr "skapa/nollställ och checka ut en gren"
 
-#: builtin/checkout.c:1804
+#: builtin/checkout.c:1823
 msgid "create reflog for new branch"
 msgstr "skapa reflogg för ny gren"
 
-#: builtin/checkout.c:1806
+#: builtin/checkout.c:1825
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr "förutspå \"git checkout <gren-saknas>\" (förval)"
 
-#: builtin/checkout.c:1807
+#: builtin/checkout.c:1826
 msgid "use overlay mode (default)"
 msgstr "använd överläggsläge (standard)"
 
-#: builtin/checkout.c:1855
+#: builtin/checkout.c:1874
 msgid "create and switch to a new branch"
 msgstr "skapa och växla till en ny gren"
 
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1876
 msgid "create/reset and switch to a branch"
 msgstr "skapa/nollställ och växla till en gren"
 
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1878
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "förutspå \"git checkout <gren-saknas>\""
 
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1880
 msgid "throw away local modifications"
 msgstr "kasta bort lokala ändringar"
 
-#: builtin/checkout.c:1897
+#: builtin/checkout.c:1916
 msgid "which tree-ish to checkout from"
 msgstr "vilken träd-igt att checka ut från"
 
-#: builtin/checkout.c:1899
+#: builtin/checkout.c:1918
 msgid "restore the index"
 msgstr "återställ indexet"
 
-#: builtin/checkout.c:1901
+#: builtin/checkout.c:1920
 msgid "restore the working tree (default)"
 msgstr "återställ arbetskatalogen (förval)"
 
-#: builtin/checkout.c:1903
+#: builtin/checkout.c:1922
 msgid "ignore unmerged entries"
 msgstr "ignorera ej sammanslagna poster"
 
-#: builtin/checkout.c:1904
+#: builtin/checkout.c:1923
 msgid "use overlay mode"
 msgstr "använd överläggsläge"
 
@@ -12993,8 +13369,8 @@ msgid "remove whole directories"
 msgstr "ta bort hela kataloger"
 
 #: builtin/clean.c:932 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:937 builtin/log.c:184 builtin/log.c:186
-#: builtin/ls-files.c:651 builtin/name-rev.c:535 builtin/name-rev.c:537
+#: builtin/grep.c:938 builtin/log.c:185 builtin/log.c:187
+#: builtin/ls-files.c:651 builtin/name-rev.c:585 builtin/name-rev.c:587
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "mönster"
@@ -13031,208 +13407,212 @@ msgstr ""
 msgid "-x and -X cannot be used together"
 msgstr "-x och -X kan inte användas samtidigt"
 
-#: builtin/clone.c:45
+#: builtin/clone.c:47
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<flaggor>] [--] <arkiv> [<kat>]"
 
-#: builtin/clone.c:96
+#: builtin/clone.c:100
 msgid "don't clone shallow repository"
 msgstr "klona inte grunt arkiv"
 
-#: builtin/clone.c:98
+#: builtin/clone.c:102
 msgid "don't create a checkout"
 msgstr "skapa inte någon utcheckning"
 
-#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:542
+#: builtin/clone.c:103 builtin/clone.c:105 builtin/init-db.c:542
 msgid "create a bare repository"
 msgstr "skapa ett naket (\"bare\") arkiv"
 
-#: builtin/clone.c:103
+#: builtin/clone.c:107
 msgid "create a mirror repository (implies bare)"
 msgstr "skapa ett spegelarkiv (implicerar \"bare\")"
 
-#: builtin/clone.c:105
+#: builtin/clone.c:109
 msgid "to clone from a local repository"
 msgstr "för att klona från ett lokalt arkiv"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "don't use local hardlinks, always copy"
 msgstr "skapa inte lokala hårda länkar, kopiera alltid"
 
-#: builtin/clone.c:109
+#: builtin/clone.c:113
 msgid "setup as shared repository"
 msgstr "skapa som ett delat arkiv"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "pathspec"
 msgstr "sökvägsangivelse"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "initialize submodules in the clone"
 msgstr "initiera undermoduler i klonen"
 
-#: builtin/clone.c:115
+#: builtin/clone.c:119
 msgid "number of submodules cloned in parallel"
 msgstr "antal undermoduler som klonas parallellt"
 
-#: builtin/clone.c:116 builtin/init-db.c:539
+#: builtin/clone.c:120 builtin/init-db.c:539
 msgid "template-directory"
 msgstr "mallkatalog"
 
-#: builtin/clone.c:117 builtin/init-db.c:540
+#: builtin/clone.c:121 builtin/init-db.c:540
 msgid "directory from which templates will be used"
 msgstr "katalog att använda mallar från"
 
-#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1871
-#: builtin/submodule--helper.c:2514 builtin/submodule--helper.c:3260
+#: builtin/clone.c:123 builtin/clone.c:125 builtin/submodule--helper.c:1885
+#: builtin/submodule--helper.c:2719 builtin/submodule--helper.c:3378
 msgid "reference repository"
 msgstr "referensarkiv"
 
-#: builtin/clone.c:123 builtin/submodule--helper.c:1873
-#: builtin/submodule--helper.c:2516
+#: builtin/clone.c:127 builtin/submodule--helper.c:1887
+#: builtin/submodule--helper.c:2721
 msgid "use --reference only while cloning"
 msgstr "använd --reference endast under kloningen"
 
-#: builtin/clone.c:124 builtin/column.c:27 builtin/fmt-merge-msg.c:27
+#: builtin/clone.c:128 builtin/column.c:27 builtin/fmt-merge-msg.c:27
 #: builtin/init-db.c:550 builtin/merge-file.c:48 builtin/merge.c:290
-#: builtin/pack-objects.c:3944 builtin/repack.c:665
-#: builtin/submodule--helper.c:3262 t/helper/test-simple-ipc.c:595
+#: builtin/pack-objects.c:3967 builtin/repack.c:669
+#: builtin/submodule--helper.c:3380 t/helper/test-simple-ipc.c:595
 #: t/helper/test-simple-ipc.c:597
 msgid "name"
 msgstr "namn"
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "använd <namn> istället för \"origin\" för att spåra uppströms"
 
-#: builtin/clone.c:127
+#: builtin/clone.c:131
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "checka ut <gren> istället för fjärrens HEAD"
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133
 msgid "path to git-upload-pack on the remote"
 msgstr "sökväg till git-upload-pack på fjärren"
 
-#: builtin/clone.c:130 builtin/fetch.c:181 builtin/grep.c:876
+#: builtin/clone.c:134 builtin/fetch.c:182 builtin/grep.c:877
 #: builtin/pull.c:212
 msgid "depth"
 msgstr "djup"
 
-#: builtin/clone.c:131
+#: builtin/clone.c:135
 msgid "create a shallow clone of that depth"
 msgstr "skapa en grund klon på detta djup"
 
-#: builtin/clone.c:132 builtin/fetch.c:183 builtin/pack-objects.c:3933
+#: builtin/clone.c:136 builtin/fetch.c:184 builtin/pack-objects.c:3956
 #: builtin/pull.c:215
 msgid "time"
 msgstr "tid"
 
-#: builtin/clone.c:133
+#: builtin/clone.c:137
 msgid "create a shallow clone since a specific time"
 msgstr "skapa en grund klon från en angiven tidpunkt"
 
-#: builtin/clone.c:134 builtin/fetch.c:185 builtin/fetch.c:208
-#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1022
+#: builtin/clone.c:138 builtin/fetch.c:186 builtin/fetch.c:212
+#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1050
 msgid "revision"
 msgstr "revision"
 
-#: builtin/clone.c:135 builtin/fetch.c:186 builtin/pull.c:219
+#: builtin/clone.c:139 builtin/fetch.c:187 builtin/pull.c:219
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "fördjupa historik för grund klon, exkludera revisionen"
 
-#: builtin/clone.c:137 builtin/submodule--helper.c:1883
-#: builtin/submodule--helper.c:2530
+#: builtin/clone.c:141 builtin/submodule--helper.c:1897
+#: builtin/submodule--helper.c:2735
 msgid "clone only one branch, HEAD or --branch"
 msgstr "klona endast en gren, HEAD eller --branch"
 
-#: builtin/clone.c:139
+#: builtin/clone.c:143
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr "klona inga taggar och gör att senare hämtningar inte följer dem"
 
-#: builtin/clone.c:141
+#: builtin/clone.c:145
 msgid "any cloned submodules will be shallow"
 msgstr "klonade undermoduler kommer vara grunda"
 
-#: builtin/clone.c:142 builtin/init-db.c:548
+#: builtin/clone.c:146 builtin/init-db.c:548
 msgid "gitdir"
 msgstr "gitkat"
 
-#: builtin/clone.c:143 builtin/init-db.c:549
+#: builtin/clone.c:147 builtin/init-db.c:549
 msgid "separate git dir from working tree"
 msgstr "separera gitkatalogen från arbetskatalogen"
 
-#: builtin/clone.c:144
+#: builtin/clone.c:148
 msgid "key=value"
 msgstr "nyckel=värde"
 
-#: builtin/clone.c:145
+#: builtin/clone.c:149
 msgid "set config inside the new repository"
 msgstr "ställ in konfiguration i det nya arkivet"
 
-#: builtin/clone.c:147 builtin/fetch.c:203 builtin/ls-remote.c:77
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
 #: builtin/pull.c:234 builtin/push.c:575 builtin/send-pack.c:200
 msgid "server-specific"
 msgstr "serverspecifik"
 
-#: builtin/clone.c:147 builtin/fetch.c:203 builtin/ls-remote.c:77
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
 #: builtin/pull.c:235 builtin/push.c:575 builtin/send-pack.c:201
 msgid "option to transmit"
 msgstr "flagga att sända"
 
-#: builtin/clone.c:148 builtin/fetch.c:204 builtin/pull.c:238
+#: builtin/clone.c:152 builtin/fetch.c:208 builtin/pull.c:238
 #: builtin/push.c:576
 msgid "use IPv4 addresses only"
 msgstr "använd endast IPv4-adresser"
 
-#: builtin/clone.c:150 builtin/fetch.c:206 builtin/pull.c:241
+#: builtin/clone.c:154 builtin/fetch.c:210 builtin/pull.c:241
 #: builtin/push.c:578
 msgid "use IPv6 addresses only"
 msgstr "använd endast IPv6-adresser"
 
-#: builtin/clone.c:154
+#: builtin/clone.c:158
+msgid "apply partial clone filters to submodules"
+msgstr "tillämpa delvisa klonfilter på undermoduler"
+
+#: builtin/clone.c:160
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "klonade undermoduler kommer använda sin fjärrspårningsgren"
 
-#: builtin/clone.c:156
+#: builtin/clone.c:162
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr "initiera sparse-checkout-filen till att bara ta med filer i roten"
 
-#: builtin/clone.c:231
+#: builtin/clone.c:237
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info: Kan inte skapa suppleant för \"%s\": %s\n"
 
-#: builtin/clone.c:304
+#: builtin/clone.c:310
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s finns och är ingen katalog"
 
-#: builtin/clone.c:322
+#: builtin/clone.c:328
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "misslyckades starta iterator över \"%s\""
 
-#: builtin/clone.c:353
+#: builtin/clone.c:359
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "misslyckades skapa länken \"%s\""
 
-#: builtin/clone.c:357
+#: builtin/clone.c:363
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "misslyckades kopiera filen till \"%s\""
 
-#: builtin/clone.c:362
+#: builtin/clone.c:368
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "misslyckades iterera över \"%s\""
 
-#: builtin/clone.c:389
+#: builtin/clone.c:395
 #, c-format
 msgid "done.\n"
 msgstr "klart.\n"
 
-#: builtin/clone.c:403
+#: builtin/clone.c:409
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -13242,147 +13622,151 @@ msgstr ""
 "Du kan inspektera det som checkades ut med \"git status\"\n"
 "och försöka med \"git restore --source=HEAD :/\"\n"
 
-#: builtin/clone.c:480
+#: builtin/clone.c:486
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "Kunde inte hitta fjärrgrenen %s för att klona."
 
-#: builtin/clone.c:597
+#: builtin/clone.c:603
 #, c-format
 msgid "unable to update %s"
 msgstr "kan inte uppdatera %s"
 
-#: builtin/clone.c:645
+#: builtin/clone.c:651
 msgid "failed to initialize sparse-checkout"
 msgstr "misslyckades initiera sparse-checkout"
 
-#: builtin/clone.c:668
+#: builtin/clone.c:674
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 "HEAD hos fjärren pekar på en obefintlig referens, kan inte checka ut.\n"
 
-#: builtin/clone.c:701
+#: builtin/clone.c:709
 msgid "unable to checkout working tree"
 msgstr "kunde inte checka ut arbetskatalogen"
 
-#: builtin/clone.c:779
+#: builtin/clone.c:793
 msgid "unable to write parameters to config file"
 msgstr "kunde inte skriva parametrar till konfigurationsfilen"
 
-#: builtin/clone.c:842
+#: builtin/clone.c:856
 msgid "cannot repack to clean up"
 msgstr "kan inte packa om för att städa upp"
 
-#: builtin/clone.c:844
+#: builtin/clone.c:858
 msgid "cannot unlink temporary alternates file"
 msgstr "kunde inte ta bort temporär \"alternates\"-fil"
 
-#: builtin/clone.c:886
+#: builtin/clone.c:901
 msgid "Too many arguments."
 msgstr "För många argument."
 
-#: builtin/clone.c:890 contrib/scalar/scalar.c:414
+#: builtin/clone.c:905 contrib/scalar/scalar.c:413
 msgid "You must specify a repository to clone."
 msgstr "Du måste ange ett arkiv att klona."
 
-#: builtin/clone.c:903
+#: builtin/clone.c:918
 #, c-format
 msgid "options '%s' and '%s %s' cannot be used together"
 msgstr "flaggorna \"%s\" och \"%s %s\" kan inte användas samtidigt"
 
-#: builtin/clone.c:920
+#: builtin/clone.c:935
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "arkivet \"%s\" finns inte"
 
-#: builtin/clone.c:924 builtin/fetch.c:2052
+#: builtin/clone.c:939 builtin/fetch.c:2176
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "djupet %s är inte ett positivt tal"
 
-#: builtin/clone.c:934
+#: builtin/clone.c:949
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "destinationssökvägen \"%s\" finns redan och är inte en tom katalog."
 
-#: builtin/clone.c:940
+#: builtin/clone.c:955
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr "arkivsökvägen \"%s\" finns redan och är inte en tom katalog."
 
-#: builtin/clone.c:954
+#: builtin/clone.c:969
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "arbetsträdet \"%s\" finns redan."
 
-#: builtin/clone.c:969 builtin/clone.c:990 builtin/difftool.c:256
-#: builtin/log.c:2012 builtin/worktree.c:281 builtin/worktree.c:313
+#: builtin/clone.c:984 builtin/clone.c:1005 builtin/difftool.c:256
+#: builtin/log.c:2037 builtin/worktree.c:350 builtin/worktree.c:382
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "kunde inte skapa inledande kataloger för \"%s\""
 
-#: builtin/clone.c:974
+#: builtin/clone.c:989
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "kunde inte skapa arbetskatalogen \"%s\""
 
-#: builtin/clone.c:994
+#: builtin/clone.c:1009
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Klonar till ett naket arkiv \"%s\"...\n"
 
-#: builtin/clone.c:996
+#: builtin/clone.c:1011
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Klonar till \"%s\"...\n"
 
-#: builtin/clone.c:1025
+#: builtin/clone.c:1040
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
 msgstr ""
 "clone --recursive är inte kompatibel med --reference och --reference-if-able"
 
-#: builtin/clone.c:1080 builtin/remote.c:200 builtin/remote.c:710
+#: builtin/clone.c:1116 builtin/remote.c:201 builtin/remote.c:721
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "\"%s\" är inte ett giltigt namn på fjärrarkiv"
 
-#: builtin/clone.c:1121
+#: builtin/clone.c:1157
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "--depth ignoreras i lokala kloningar; använd file:// istället."
 
-#: builtin/clone.c:1123
+#: builtin/clone.c:1159
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr "--shallow-since ignoreras i lokala kloningar; använd file:// istället."
 
-#: builtin/clone.c:1125
+#: builtin/clone.c:1161
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-exclude ignoreras i lokala kloningar; använd file:// istället."
 
-#: builtin/clone.c:1127
+#: builtin/clone.c:1163
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr "--filter ignoreras i lokala kloningar; använd file:// istället."
 
-#: builtin/clone.c:1132
+#: builtin/clone.c:1168
 msgid "source repository is shallow, ignoring --local"
 msgstr "källarkivet är grunt, ignorerar --local"
 
-#: builtin/clone.c:1137
+#: builtin/clone.c:1173
 msgid "--local is ignored"
 msgstr "--local ignoreras"
 
-#: builtin/clone.c:1216 builtin/clone.c:1276
+#: builtin/clone.c:1185
+msgid "cannot clone from filtered bundle"
+msgstr "kan inte klona från filtrerad bunt"
+
+#: builtin/clone.c:1265 builtin/clone.c:1324
 msgid "remote transport reported error"
 msgstr "fjärrtransport rapporterade fel"
 
-#: builtin/clone.c:1228 builtin/clone.c:1239
+#: builtin/clone.c:1277 builtin/clone.c:1289
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "Fjärrgrenen %s hittades inte i uppströmsarkivet %s"
 
-#: builtin/clone.c:1242
+#: builtin/clone.c:1292
 msgid "You appear to have cloned an empty repository."
 msgstr "Du verkar ha klonat ett tomt arkiv."
 
@@ -13434,7 +13818,7 @@ msgstr ""
 "split[=<strategi>]] [--reachable|--stdin-packs|--stdin-commits] [--changed-"
 "paths] [--[no-]max-new-filters <n>] [--[no-]progress] <delnings-flaggor>"
 
-#: builtin/commit-graph.c:51 builtin/fetch.c:192 builtin/log.c:1794
+#: builtin/commit-graph.c:51 builtin/fetch.c:196 builtin/log.c:1813
 msgid "dir"
 msgstr "kat"
 
@@ -13533,7 +13917,7 @@ msgstr ""
 msgid "duplicate parent %s ignored"
 msgstr "duplicerad förälder %s ignorerades"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:577
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:590
 #, c-format
 msgid "not a valid object name %s"
 msgstr "objektnamnet är inte giltigt: %s"
@@ -13556,13 +13940,13 @@ msgstr "förälder"
 msgid "id of a parent commit object"
 msgstr "id på ett förälderincheckningsobjekt"
 
-#: builtin/commit-tree.c:112 builtin/commit.c:1627 builtin/merge.c:284
-#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1677
-#: builtin/tag.c:454
+#: builtin/commit-tree.c:112 builtin/commit.c:1626 builtin/merge.c:284
+#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1666
+#: builtin/tag.c:455
 msgid "message"
 msgstr "meddelande"
 
-#: builtin/commit-tree.c:113 builtin/commit.c:1627
+#: builtin/commit-tree.c:113 builtin/commit.c:1626
 msgid "commit message"
 msgstr "incheckningsmeddelande"
 
@@ -13570,7 +13954,7 @@ msgstr "incheckningsmeddelande"
 msgid "read commit log message from file"
 msgstr "läs incheckningsloggmeddelande från fil"
 
-#: builtin/commit-tree.c:119 builtin/commit.c:1644 builtin/merge.c:303
+#: builtin/commit-tree.c:119 builtin/commit.c:1643 builtin/merge.c:303
 #: builtin/pull.c:180 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "GPG-signera incheckning"
@@ -13583,15 +13967,15 @@ msgstr "måste ange exakt ett träd"
 msgid "git commit-tree: failed to read"
 msgstr "git commit-tree: misslyckades läsa"
 
-#: builtin/commit.c:42
+#: builtin/commit.c:43
 msgid "git commit [<options>] [--] <pathspec>..."
 msgstr "git commit [<flaggor>] [--] <sökväg>..."
 
-#: builtin/commit.c:47
+#: builtin/commit.c:48
 msgid "git status [<options>] [--] <pathspec>..."
 msgstr "git status [<flaggor>] [--] <sökväg>..."
 
-#: builtin/commit.c:52
+#: builtin/commit.c:53
 msgid ""
 "You asked to amend the most recent commit, but doing so would make\n"
 "it empty. You can repeat your command with --allow-empty, or you can\n"
@@ -13601,7 +13985,7 @@ msgstr ""
 "blir den tom. Du kan köra kommandot på nytt med --allow-empty, eller\n"
 "så kan du ta bort incheckningen helt med \"git reset HEAD^\".\n"
 
-#: builtin/commit.c:57
+#: builtin/commit.c:58
 msgid ""
 "The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
 "If you wish to commit it anyway, use:\n"
@@ -13615,15 +13999,15 @@ msgstr ""
 "    git commit --allow-empty\n"
 "\n"
 
-#: builtin/commit.c:64
+#: builtin/commit.c:65
 msgid "Otherwise, please use 'git rebase --skip'\n"
 msgstr "Använd annars \"git rebase --skip\"\n"
 
-#: builtin/commit.c:67
+#: builtin/commit.c:68
 msgid "Otherwise, please use 'git cherry-pick --skip'\n"
 msgstr "Använd annars \"git cherry-pick --skip\"\n"
 
-#: builtin/commit.c:70
+#: builtin/commit.c:71
 msgid ""
 "and then use:\n"
 "\n"
@@ -13645,69 +14029,69 @@ msgstr ""
 "    git cherry-pick --skip\n"
 "\n"
 
-#: builtin/commit.c:325
+#: builtin/commit.c:326
 msgid "failed to unpack HEAD tree object"
 msgstr "misslyckades packa upp HEAD:s trädobjekt"
 
-#: builtin/commit.c:375
+#: builtin/commit.c:376
 msgid "No paths with --include/--only does not make sense."
 msgstr "Du måste ange sökvägar tillsammans med --include/--only."
 
-#: builtin/commit.c:387
+#: builtin/commit.c:388
 msgid "unable to create temporary index"
 msgstr "kunde inte skapa temporär indexfil"
 
-#: builtin/commit.c:396
+#: builtin/commit.c:397
 msgid "interactive add failed"
 msgstr "interaktiv tilläggning misslyckades"
 
-#: builtin/commit.c:411
+#: builtin/commit.c:412
 msgid "unable to update temporary index"
 msgstr "kan inte uppdatera temporärt index"
 
-#: builtin/commit.c:413
+#: builtin/commit.c:414
 msgid "Failed to update main cache tree"
 msgstr "Misslyckades uppdatera huvud-cacheträdet"
 
-#: builtin/commit.c:438 builtin/commit.c:461 builtin/commit.c:509
+#: builtin/commit.c:439 builtin/commit.c:462 builtin/commit.c:510
 msgid "unable to write new_index file"
 msgstr "kunde inte skriva filen new_index"
 
-#: builtin/commit.c:490
+#: builtin/commit.c:491
 msgid "cannot do a partial commit during a merge."
 msgstr "kan inte utföra en delvis incheckning under en sammanslagning."
 
-#: builtin/commit.c:492
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr "kan inte utföra en delvis incheckning under en cherry-pick."
 
-#: builtin/commit.c:494
+#: builtin/commit.c:495
 msgid "cannot do a partial commit during a rebase."
 msgstr "kan inte utföra en delvis incheckning under en ombasering."
 
-#: builtin/commit.c:502
+#: builtin/commit.c:503
 msgid "cannot read the index"
 msgstr "kan inte läsa indexet"
 
-#: builtin/commit.c:521
+#: builtin/commit.c:522
 msgid "unable to write temporary index file"
 msgstr "kunde inte skriva temporär indexfil"
 
-#: builtin/commit.c:619
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "incheckningen \"%s\" saknar författarhuvud"
 
-#: builtin/commit.c:621
+#: builtin/commit.c:622
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "incheckningen \"%s\" har felformaterat författarhuvud"
 
-#: builtin/commit.c:640
+#: builtin/commit.c:641
 msgid "malformed --author parameter"
 msgstr "felformad \"--author\"-flagga"
 
-#: builtin/commit.c:693
+#: builtin/commit.c:694
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
@@ -13715,43 +14099,43 @@ msgstr ""
 "kunde inte välja ett kommentarstecken som inte använts\n"
 "i det befintliga incheckningsmeddelandet"
 
-#: builtin/commit.c:747 builtin/commit.c:781 builtin/commit.c:1166
+#: builtin/commit.c:750 builtin/commit.c:784 builtin/commit.c:1170
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "kunde inte slå upp incheckningen %s"
 
-#: builtin/commit.c:759 builtin/shortlog.c:416
+#: builtin/commit.c:762 builtin/shortlog.c:417
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(läser loggmeddelande från standard in)\n"
 
-#: builtin/commit.c:761
+#: builtin/commit.c:764
 msgid "could not read log from standard input"
 msgstr "kunde inte läsa logg från standard in"
 
-#: builtin/commit.c:765
+#: builtin/commit.c:768
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "kunde inte läsa loggfilen \"%s\""
 
-#: builtin/commit.c:802
+#: builtin/commit.c:805
 #, c-format
 msgid "options '%s' and '%s:%s' cannot be used together"
 msgstr "flaggorna \"%s\" och \"%s:%s\" kan inte användas samtidigt"
 
-#: builtin/commit.c:814 builtin/commit.c:830
+#: builtin/commit.c:817 builtin/commit.c:833
 msgid "could not read SQUASH_MSG"
 msgstr "kunde inte läsa SQUASH_MSG"
 
-#: builtin/commit.c:821
+#: builtin/commit.c:824
 msgid "could not read MERGE_MSG"
 msgstr "kunde inte läsa MERGE_MSG"
 
-#: builtin/commit.c:881
+#: builtin/commit.c:884
 msgid "could not write commit template"
 msgstr "kunde inte skriva incheckningsmall"
 
-#: builtin/commit.c:894
+#: builtin/commit.c:897
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13760,7 +14144,7 @@ msgstr ""
 "Ange incheckningsmeddelandet för dina ändringar. Rader som inleds\n"
 "med \"%c\" kommer ignoreras.\n"
 
-#: builtin/commit.c:896
+#: builtin/commit.c:899
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13770,7 +14154,7 @@ msgstr ""
 "med \"%c\" kommer ignoreras, och ett tomt meddelande avbryter "
 "incheckningen.\n"
 
-#: builtin/commit.c:900
+#: builtin/commit.c:903
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13779,7 +14163,7 @@ msgstr ""
 "Ange incheckningsmeddelandet för dina ändringar. Rader som inleds\n"
 "med \"%c\" kommer behållas; du kan själv ta bort dem om du vill.\n"
 
-#: builtin/commit.c:904
+#: builtin/commit.c:907
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13790,7 +14174,7 @@ msgstr ""
 "med \"%c\" kommer behållas; du kan själv ta bort dem om du vill.\n"
 "Ett tomt meddelande avbryter incheckningen.\n"
 
-#: builtin/commit.c:916
+#: builtin/commit.c:919
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -13804,7 +14188,7 @@ msgstr ""
 "\tgit update-ref -d MERGE_HEAD\n"
 "och försöker igen.\n"
 
-#: builtin/commit.c:921
+#: builtin/commit.c:924
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -13818,168 +14202,147 @@ msgstr ""
 "\tgit update-ref -d CHERRY_PICK_HEAD\n"
 "och försöker igen.\n"
 
-#: builtin/commit.c:948
+#: builtin/commit.c:951
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%sFörfattare: %.*s <%.*s>"
 
-#: builtin/commit.c:956
+#: builtin/commit.c:959
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%sDatum:      %s"
 
-#: builtin/commit.c:963
+#: builtin/commit.c:966
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%sIncheckare: %.*s <%.*s>"
 
-#: builtin/commit.c:981
+#: builtin/commit.c:984
 msgid "Cannot read index"
 msgstr "Kan inte läsa indexet"
 
-#: builtin/commit.c:1026
+#: builtin/commit.c:1029
 msgid "unable to pass trailers to --trailers"
 msgstr "kan inte sända släprader till --trailers"
 
-#: builtin/commit.c:1066
+#: builtin/commit.c:1069
 msgid "Error building trees"
 msgstr "Fel vid byggande av träd"
 
-#: builtin/commit.c:1080 builtin/tag.c:316
+#: builtin/commit.c:1083 builtin/tag.c:317
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "Ange meddelandet en av flaggorna -m eller -F.\n"
 
-#: builtin/commit.c:1124
+#: builtin/commit.c:1128
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr ""
 "--author '%s' är inte 'Namn <epost>' och motsvarar ingen befintlig författare"
 
-#: builtin/commit.c:1138
+#: builtin/commit.c:1142
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "Ogiltigt ignorerat läge \"%s\""
 
-#: builtin/commit.c:1156 builtin/commit.c:1451
+#: builtin/commit.c:1160 builtin/commit.c:1450
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "Ogiltigt läge för ospårade filer: \"%s\""
 
-#: builtin/commit.c:1227
+#: builtin/commit.c:1231
 msgid "You are in the middle of a merge -- cannot reword."
 msgstr "Du är i mitten av en sammanslagning -- kan inte omformulera."
 
-#: builtin/commit.c:1229
+#: builtin/commit.c:1233
 msgid "You are in the middle of a cherry-pick -- cannot reword."
 msgstr "Du är i mitten av en cherry-pick -- kan inte omformulera."
 
-#: builtin/commit.c:1232
+#: builtin/commit.c:1236
 #, c-format
 msgid "reword option of '%s' and path '%s' cannot be used together"
 msgstr ""
 "reword-flaggan till \"%s\" och sökvägen \"%s\" kan inte användas tillsammans"
 
-#: builtin/commit.c:1234
+#: builtin/commit.c:1238
 #, c-format
 msgid "reword option of '%s' and '%s' cannot be used together"
 msgstr "reword-flaggan till \"%s\" och \"%s\" kan inte användas tillsammans"
 
-#: builtin/commit.c:1254
-msgid "Using both --reset-author and --author does not make sense"
-msgstr "Kan inte använda både --reset-author och --author"
-
-#: builtin/commit.c:1261
+#: builtin/commit.c:1263
 msgid "You have nothing to amend."
 msgstr "Du har inget att utöka."
 
-#: builtin/commit.c:1264
+#: builtin/commit.c:1266
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "Du är i mitten av en sammanslagning -- kan inte utöka."
 
-#: builtin/commit.c:1266
+#: builtin/commit.c:1268
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr "Du är i mitten av en cherry-pick -- kan inte utöka."
 
-#: builtin/commit.c:1268
+#: builtin/commit.c:1270
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr "Du är i mitten av en ombasering -- kan inte utöka."
 
-#: builtin/commit.c:1271
-msgid "Options --squash and --fixup cannot be used together"
-msgstr "Flaggorna --squash och --fixup kan inte användas samtidigt"
-
-#: builtin/commit.c:1281
-msgid "Only one of -c/-C/-F/--fixup can be used."
-msgstr "Endast en av -c/-C/-F/--fixup kan användas."
-
-#: builtin/commit.c:1283
-msgid "Option -m cannot be combined with -c/-C/-F."
-msgstr "Flaggan -m kan inte kombineras med -c/-C/-F."
-
-#: builtin/commit.c:1292
+#: builtin/commit.c:1290
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr "--reset-author kan endast användas med -C, -c eller --amend."
 
-#: builtin/commit.c:1310
-msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
-msgstr ""
-"Endast en av --include/--only/--all/--interactive/--patch kan användas."
-
-#: builtin/commit.c:1338
+#: builtin/commit.c:1337
 #, c-format
 msgid "unknown option: --fixup=%s:%s"
 msgstr "okänd flagga: --fixup=%s:%s"
 
-#: builtin/commit.c:1355
+#: builtin/commit.c:1354
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "sökvägarna \"%s ...\" med -a ger ingen mening"
 
-#: builtin/commit.c:1486 builtin/commit.c:1655
+#: builtin/commit.c:1485 builtin/commit.c:1654
 msgid "show status concisely"
 msgstr "visa koncis status"
 
-#: builtin/commit.c:1488 builtin/commit.c:1657
+#: builtin/commit.c:1487 builtin/commit.c:1656
 msgid "show branch information"
 msgstr "visa information om gren"
 
-#: builtin/commit.c:1490
+#: builtin/commit.c:1489
 msgid "show stash information"
 msgstr "visa information om stash"
 
-#: builtin/commit.c:1492 builtin/commit.c:1659
+#: builtin/commit.c:1491 builtin/commit.c:1658
 msgid "compute full ahead/behind values"
 msgstr "beräkna fullständiga före-/efter-värden"
 
-#: builtin/commit.c:1494
+#: builtin/commit.c:1493
 msgid "version"
 msgstr "version"
 
-#: builtin/commit.c:1494 builtin/commit.c:1661 builtin/push.c:551
-#: builtin/worktree.c:690
+#: builtin/commit.c:1493 builtin/commit.c:1660 builtin/push.c:551
+#: builtin/worktree.c:765
 msgid "machine-readable output"
 msgstr "maskinläsbar utdata"
 
-#: builtin/commit.c:1497 builtin/commit.c:1663
+#: builtin/commit.c:1496 builtin/commit.c:1662
 msgid "show status in long format (default)"
 msgstr "visa status i långt format (standard)"
 
-#: builtin/commit.c:1500 builtin/commit.c:1666
+#: builtin/commit.c:1499 builtin/commit.c:1665
 msgid "terminate entries with NUL"
 msgstr "terminera poster med NUL"
 
-#: builtin/commit.c:1502 builtin/commit.c:1506 builtin/commit.c:1669
+#: builtin/commit.c:1501 builtin/commit.c:1505 builtin/commit.c:1668
 #: builtin/fast-export.c:1172 builtin/fast-export.c:1175
-#: builtin/fast-export.c:1178 builtin/rebase.c:1111 parse-options.h:337
+#: builtin/fast-export.c:1178 builtin/rebase.c:1139 parse-options.h:368
 msgid "mode"
 msgstr "läge"
 
-#: builtin/commit.c:1503 builtin/commit.c:1669
+#: builtin/commit.c:1502 builtin/commit.c:1668
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr "visa ospårade filer, valfria lägen: all, normal, no. (Standard: all)"
 
-#: builtin/commit.c:1507
+#: builtin/commit.c:1506
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
@@ -13987,11 +14350,11 @@ msgstr ""
 "visa ignorerade filer, valfria lägen: traditional, matching, no (Standard: "
 "traditional)"
 
-#: builtin/commit.c:1509 parse-options.h:192
+#: builtin/commit.c:1508 parse-options.h:197
 msgid "when"
 msgstr "när"
 
-#: builtin/commit.c:1510
+#: builtin/commit.c:1509
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
@@ -13999,194 +14362,194 @@ msgstr ""
 "ignorera ändringar i undermoduler, valfritt när: all, dirty, untracked. "
 "(Default: all)"
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1511
 msgid "list untracked files in columns"
 msgstr "visa ospårade filer i spalter"
 
-#: builtin/commit.c:1513
+#: builtin/commit.c:1512
 msgid "do not detect renames"
 msgstr "detektera inte namnändringar"
 
-#: builtin/commit.c:1515
+#: builtin/commit.c:1514
 msgid "detect renames, optionally set similarity index"
 msgstr "detektera namnändringar, möjligen sätt likhetsindex"
 
-#: builtin/commit.c:1538
+#: builtin/commit.c:1537
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr "Kombinationen av argument för ignorerade och ospårade filer stöds ej"
 
-#: builtin/commit.c:1620
+#: builtin/commit.c:1619
 msgid "suppress summary after successful commit"
 msgstr "undertryck sammanfattning efter framgångsrik incheckning"
 
-#: builtin/commit.c:1621
+#: builtin/commit.c:1620
 msgid "show diff in commit message template"
 msgstr "visa diff i mallen för incheckningsmeddelandet"
 
-#: builtin/commit.c:1623
+#: builtin/commit.c:1622
 msgid "Commit message options"
 msgstr "Alternativ för incheckningsmeddelande"
 
-#: builtin/commit.c:1624 builtin/merge.c:288 builtin/tag.c:456
+#: builtin/commit.c:1623 builtin/merge.c:288 builtin/tag.c:457
 msgid "read message from file"
 msgstr "läs meddelande från fil"
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1624
 msgid "author"
 msgstr "författare"
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1624
 msgid "override author for commit"
 msgstr "överstyr författare för incheckningen"
 
-#: builtin/commit.c:1626 builtin/gc.c:551
+#: builtin/commit.c:1625 builtin/gc.c:551
 msgid "date"
 msgstr "datum"
 
-#: builtin/commit.c:1626
+#: builtin/commit.c:1625
 msgid "override date for commit"
 msgstr "överstyr datum för incheckningen"
 
-#: builtin/commit.c:1628 builtin/commit.c:1629 builtin/commit.c:1635
-#: parse-options.h:329 ref-filter.h:89
+#: builtin/commit.c:1627 builtin/commit.c:1628 builtin/commit.c:1634
+#: parse-options.h:360 ref-filter.h:89
 msgid "commit"
 msgstr "incheckning"
 
-#: builtin/commit.c:1628
+#: builtin/commit.c:1627
 msgid "reuse and edit message from specified commit"
 msgstr "återanvänd och redigera meddelande från angiven incheckning"
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1628
 msgid "reuse message from specified commit"
 msgstr "återanvänd meddelande från angiven incheckning"
 
 #. TRANSLATORS: Leave "[(amend|reword):]" as-is,
 #. and only translate <commit>.
 #.
-#: builtin/commit.c:1634
+#: builtin/commit.c:1633
 msgid "[(amend|reword):]commit"
 msgstr "[(amend|reword):]incheckning"
 
-#: builtin/commit.c:1634
+#: builtin/commit.c:1633
 msgid ""
 "use autosquash formatted message to fixup or amend/reword specified commit"
 msgstr ""
 "använd autosquash-formaterat meddelande för att fixa/omformulera angiven "
 "incheckning"
 
-#: builtin/commit.c:1635
+#: builtin/commit.c:1634
 msgid "use autosquash formatted message to squash specified commit"
 msgstr ""
 "använd autosquash-formaterat meddelande för att slå ihop med angiven "
 "incheckning"
 
-#: builtin/commit.c:1636
+#: builtin/commit.c:1635
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "jag är nu författare av incheckningen (används med -C/-c/--amend)"
 
-#: builtin/commit.c:1637 builtin/interpret-trailers.c:111
+#: builtin/commit.c:1636 builtin/interpret-trailers.c:111
 msgid "trailer"
 msgstr "släprad"
 
-#: builtin/commit.c:1637
+#: builtin/commit.c:1636
 msgid "add custom trailer(s)"
 msgstr "använd skräddarsydd(a) släprad(er)"
 
-#: builtin/commit.c:1638 builtin/log.c:1769 builtin/merge.c:306
+#: builtin/commit.c:1637 builtin/log.c:1788 builtin/merge.c:306
 #: builtin/pull.c:146 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr "lägg till Signed-off-by-släprad"
 
-#: builtin/commit.c:1639
+#: builtin/commit.c:1638
 msgid "use specified template file"
 msgstr "använd angiven mallfil"
 
-#: builtin/commit.c:1640
+#: builtin/commit.c:1639
 msgid "force edit of commit"
 msgstr "tvinga redigering av incheckning"
 
-#: builtin/commit.c:1642
+#: builtin/commit.c:1641
 msgid "include status in commit message template"
 msgstr "ta med status i mallen för incheckningsmeddelandet"
 
-#: builtin/commit.c:1647
+#: builtin/commit.c:1646
 msgid "Commit contents options"
 msgstr "Alternativ för incheckningens innehåll"
 
-#: builtin/commit.c:1648
+#: builtin/commit.c:1647
 msgid "commit all changed files"
 msgstr "checka in alla ändrade filer"
 
-#: builtin/commit.c:1649
+#: builtin/commit.c:1648
 msgid "add specified files to index for commit"
 msgstr "lägg till angivna filer till indexet för incheckning"
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1649
 msgid "interactively add files"
 msgstr "lägg till filer interaktivt"
 
-#: builtin/commit.c:1651
+#: builtin/commit.c:1650
 msgid "interactively add changes"
 msgstr "lägg till ändringar interaktivt"
 
-#: builtin/commit.c:1652
+#: builtin/commit.c:1651
 msgid "commit only specified files"
 msgstr "checka endast in angivna filer"
 
-#: builtin/commit.c:1653
+#: builtin/commit.c:1652
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr "förbigå pre-commit- och commit-msg-krokar"
 
-#: builtin/commit.c:1654
+#: builtin/commit.c:1653
 msgid "show what would be committed"
 msgstr "visa vad som skulle checkas in"
 
-#: builtin/commit.c:1667
+#: builtin/commit.c:1666
 msgid "amend previous commit"
 msgstr "lägg till föregående incheckning"
 
-#: builtin/commit.c:1668
+#: builtin/commit.c:1667
 msgid "bypass post-rewrite hook"
 msgstr "förbigå post-rewrite-krok"
 
-#: builtin/commit.c:1675
+#: builtin/commit.c:1674
 msgid "ok to record an empty change"
 msgstr "ok att registrera en tom ändring"
 
-#: builtin/commit.c:1677
+#: builtin/commit.c:1676
 msgid "ok to record a change with an empty message"
 msgstr "ok att registrera en ändring med tomt meddelande"
 
-#: builtin/commit.c:1753
+#: builtin/commit.c:1752
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Trasig MERGE_HEAD-fil (%s)"
 
-#: builtin/commit.c:1760
+#: builtin/commit.c:1759
 msgid "could not read MERGE_MODE"
 msgstr "kunde inte läsa MERGE_MODE"
 
-#: builtin/commit.c:1781
+#: builtin/commit.c:1780
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "kunde inte läsa incheckningsmeddelande: %s"
 
-#: builtin/commit.c:1788
+#: builtin/commit.c:1787
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "Avbryter på grund av tomt incheckningsmeddelande.\n"
 
-#: builtin/commit.c:1793
+#: builtin/commit.c:1792
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "Avbryter incheckning; meddelandet inte redigerat.\n"
 
-#: builtin/commit.c:1804
+#: builtin/commit.c:1803
 #, c-format
 msgid "Aborting commit due to empty commit message body.\n"
 msgstr "Avbryter på grund av tom incheckningsmeddelandekropp.\n"
 
-#: builtin/commit.c:1840
+#: builtin/commit.c:1839
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -14310,6 +14673,10 @@ msgstr "hitta färginställningen: slot [stdout-is-tty]"
 msgid "Type"
 msgstr "Typ"
 
+#: builtin/config.c:154 builtin/env--helper.c:42 builtin/hash-object.c:97
+msgid "type"
+msgstr "typ"
+
 #: builtin/config.c:154 builtin/env--helper.c:43
 msgid "value is given this type"
 msgstr "värdet har givits denna typ"
@@ -14521,10 +14888,6 @@ msgstr ""
 msgid "no such section: %s"
 msgstr "ingen sådan sektion: %s"
 
-#: builtin/count-objects.c:90
-msgid "git count-objects [-v] [-H | --human-readable]"
-msgstr "git count-objects [-v] [-H | --human-readable]"
-
 #: builtin/count-objects.c:100
 msgid "print sizes in human readable format"
 msgstr "skriv storlekar i människoläsbart format"
@@ -14693,7 +15056,7 @@ msgstr "överväg endast taggar som motsvarar <mönster>"
 msgid "do not consider tags matching <pattern>"
 msgstr "överväg inte taggar som motsvarar <mönster>"
 
-#: builtin/describe.c:570 builtin/name-rev.c:544
+#: builtin/describe.c:570 builtin/name-rev.c:595
 msgid "show abbreviated commit object as fallback"
 msgstr "visa förkortade incheckningsobjekt som standard"
 
@@ -14741,7 +15104,7 @@ msgstr "%s...%s: ingen sammanslagningsbas"
 msgid "Not a git repository"
 msgstr "Inte ett git-arkiv"
 
-#: builtin/diff.c:537 builtin/grep.c:698
+#: builtin/diff.c:537 builtin/grep.c:700
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "objektet \"%s\" som angavs är felaktigt."
@@ -14860,11 +15223,11 @@ msgstr "sändes till \"diff\""
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool kräver en arbetskatalog eller --no-index"
 
-#: builtin/difftool.c:744
+#: builtin/difftool.c:745
 msgid "no <tool> given for --tool=<tool>"
 msgstr "inget <verktyg> angavs för --tool=<verktyg>"
 
-#: builtin/difftool.c:751
+#: builtin/difftool.c:752
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "inget <kommando> angavs för --extcmd=<kommando>"
 
@@ -14872,10 +15235,6 @@ msgstr "inget <kommando> angavs för --extcmd=<kommando>"
 msgid "git env--helper --type=[bool|ulong] <options> <env-var>"
 msgstr "git env--helper --type=[bool|ulong] <flaggor> <miljövariabel>"
 
-#: builtin/env--helper.c:42 builtin/hash-object.c:96
-msgid "type"
-msgstr "typ"
-
 #: builtin/env--helper.c:46
 msgid "default for git_env_*(...) to fall back on"
 msgstr "standard för git_env_*(...) att falla tillbaka på"
@@ -14901,8 +15260,8 @@ msgstr ""
 "\", inte \"%s\""
 
 #: builtin/fast-export.c:29
-msgid "git fast-export [rev-list-opts]"
-msgstr "git fast-export [rev-list-flaggor]"
+msgid "git fast-export [<rev-list-opts>]"
+msgstr "git fast-export [<rev-list-flaggor>]"
 
 #: builtin/fast-export.c:843
 msgid "Error: Cannot export nested tags unless --mark-tags is specified."
@@ -14956,7 +15315,7 @@ msgstr "använd done-funktionen för att avsluta strömmen"
 msgid "skip output of blob data"
 msgstr "hoppa över skrivning av blob-data"
 
-#: builtin/fast-export.c:1196 builtin/log.c:1841
+#: builtin/fast-export.c:1196 builtin/log.c:1860
 msgid "refspec"
 msgstr "referensspecifikation"
 
@@ -14988,36 +15347,36 @@ msgstr "visa ursprungliga objekt-id för blobbar/incheckningar"
 msgid "label tags with mark ids"
 msgstr "märk taggar med märke-id"
 
-#: builtin/fast-import.c:3090
+#: builtin/fast-import.c:3097
 #, c-format
 msgid "Missing from marks for submodule '%s'"
 msgstr "Saknar från-märken för undermodulen \"%s\""
 
-#: builtin/fast-import.c:3092
+#: builtin/fast-import.c:3099
 #, c-format
 msgid "Missing to marks for submodule '%s'"
 msgstr "Saknar till-märken för undermodulen \"%s\""
 
-#: builtin/fast-import.c:3227
+#: builtin/fast-import.c:3234
 #, c-format
 msgid "Expected 'mark' command, got %s"
 msgstr "Förväntade \"mark\"-kommando, fick %s"
 
-#: builtin/fast-import.c:3232
+#: builtin/fast-import.c:3239
 #, c-format
 msgid "Expected 'to' command, got %s"
 msgstr "Förväntade \"to\"-kommando, fick %s"
 
-#: builtin/fast-import.c:3324
+#: builtin/fast-import.c:3331
 msgid "Expected format name:filename for submodule rewrite option"
 msgstr "Förvändae formatet namn:filnamn för undermodul-omskrivningsflaggan"
 
-#: builtin/fast-import.c:3379
+#: builtin/fast-import.c:3386
 #, c-format
 msgid "feature '%s' forbidden in input without --allow-unsafe-features"
 msgstr "funktionen \"%s\" förbjuden i indata utan --allow-unsafe-features"
 
-#: builtin/fetch-pack.c:242
+#: builtin/fetch-pack.c:246
 #, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr "Låsfil skapad men inte rapporterad: %s"
@@ -15038,103 +15397,107 @@ msgstr "git fetch --multiple [<flaggor>] [(<arkiv> | <grupp>)...]"
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<flaggor>]"
 
-#: builtin/fetch.c:123
+#: builtin/fetch.c:124
 msgid "fetch.parallel cannot be negative"
 msgstr "fetch.parallel kan inte vara negativt"
 
-#: builtin/fetch.c:146 builtin/pull.c:189
+#: builtin/fetch.c:147 builtin/pull.c:189
 msgid "fetch from all remotes"
 msgstr "hämta från alla fjärrar"
 
-#: builtin/fetch.c:148 builtin/pull.c:249
+#: builtin/fetch.c:149 builtin/pull.c:249
 msgid "set upstream for git pull/fetch"
 msgstr "ställ in uppström för git pull/fetch"
 
-#: builtin/fetch.c:150 builtin/pull.c:192
+#: builtin/fetch.c:151 builtin/pull.c:192
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "lägg till i .git/FETCH_HEAD istället för att skriva över"
 
-#: builtin/fetch.c:152
+#: builtin/fetch.c:153
 msgid "use atomic transaction to update references"
 msgstr "använd atomiska transaktioner för att uppdatera referenser"
 
-#: builtin/fetch.c:154 builtin/pull.c:195
+#: builtin/fetch.c:155 builtin/pull.c:195
 msgid "path to upload pack on remote end"
 msgstr "sökväg till upload pack på fjärren"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:156
 msgid "force overwrite of local reference"
 msgstr "tvinga överskrivning av lokal referens"
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:158
 msgid "fetch from multiple remotes"
 msgstr "hämta från flera fjärrar"
 
-#: builtin/fetch.c:159 builtin/pull.c:199
+#: builtin/fetch.c:160 builtin/pull.c:199
 msgid "fetch all tags and associated objects"
 msgstr "hämta alla taggar och associerade objekt"
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:162
 msgid "do not fetch all tags (--no-tags)"
 msgstr "hämta inte alla taggar (--no-tags)"
 
-#: builtin/fetch.c:163
+#: builtin/fetch.c:164
 msgid "number of submodules fetched in parallel"
 msgstr "antal undermoduler som hämtas parallellt"
 
-#: builtin/fetch.c:165
+#: builtin/fetch.c:166
 msgid "modify the refspec to place all refs within refs/prefetch/"
 msgstr ""
 "modifiera referensspecifikationen så att alla referenser hamnar i refs/"
 "prefetch/"
 
-#: builtin/fetch.c:167 builtin/pull.c:202
+#: builtin/fetch.c:168 builtin/pull.c:202
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "rensa fjärrspårande grenar ej längre på fjärren"
 
-#: builtin/fetch.c:169
+#: builtin/fetch.c:170
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 "rensa lokala taggar inte längre på fjärren och skriv över ändrade taggar"
 
-#: builtin/fetch.c:170 builtin/fetch.c:195 builtin/pull.c:123
+#: builtin/fetch.c:171 builtin/fetch.c:199 builtin/pull.c:123
 msgid "on-demand"
 msgstr "on-demand"
 
-#: builtin/fetch.c:171
+#: builtin/fetch.c:172
 msgid "control recursive fetching of submodules"
 msgstr "styr rekursiv hämtning av undermoduler"
 
-#: builtin/fetch.c:176
+#: builtin/fetch.c:177
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr "skriv hämtade referenser till FETCH_HEAD-filen"
 
-#: builtin/fetch.c:177 builtin/pull.c:210
+#: builtin/fetch.c:178 builtin/pull.c:210
 msgid "keep downloaded pack"
 msgstr "behåll hämtade paket"
 
-#: builtin/fetch.c:179
+#: builtin/fetch.c:180
 msgid "allow updating of HEAD ref"
 msgstr "tillåt uppdatering av HEAD-referens"
 
-#: builtin/fetch.c:182 builtin/fetch.c:188 builtin/pull.c:213
+#: builtin/fetch.c:183 builtin/fetch.c:189 builtin/pull.c:213
 #: builtin/pull.c:222
 msgid "deepen history of shallow clone"
 msgstr "fördjupa historik för grund klon"
 
-#: builtin/fetch.c:184 builtin/pull.c:216
+#: builtin/fetch.c:185 builtin/pull.c:216
 msgid "deepen history of shallow repository based on time"
 msgstr "fördjupa historik för grund klon baserad på tid"
 
-#: builtin/fetch.c:190 builtin/pull.c:225
+#: builtin/fetch.c:191 builtin/pull.c:225
 msgid "convert to a complete repository"
 msgstr "konvertera till komplett arkiv"
 
-#: builtin/fetch.c:193
+#: builtin/fetch.c:194
+msgid "re-fetch without negotiating common commits"
+msgstr "hämta om utan att förhandla om gemensamma incheckningar"
+
+#: builtin/fetch.c:197
 msgid "prepend this to submodule path output"
 msgstr "lägg till i början av undermodulens sökvägsutdata"
 
-#: builtin/fetch.c:196
+#: builtin/fetch.c:200
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
@@ -15142,106 +15505,101 @@ msgstr ""
 "standard för rekursiv hämtning av undermoduler (lägre prioritet än "
 "konfigurationsfiler)"
 
-#: builtin/fetch.c:200 builtin/pull.c:228
+#: builtin/fetch.c:204 builtin/pull.c:228
 msgid "accept refs that update .git/shallow"
 msgstr "tar emot referenser som uppdaterar .git/shallow"
 
-#: builtin/fetch.c:201 builtin/pull.c:230
+#: builtin/fetch.c:205 builtin/pull.c:230
 msgid "refmap"
 msgstr "referenskarta"
 
-#: builtin/fetch.c:202 builtin/pull.c:231
+#: builtin/fetch.c:206 builtin/pull.c:231
 msgid "specify fetch refmap"
 msgstr "ange referenskarta för \"fetch\""
 
-#: builtin/fetch.c:209 builtin/pull.c:244
+#: builtin/fetch.c:213 builtin/pull.c:244
 msgid "report that we have only objects reachable from this object"
 msgstr "rapportera att vi bara har objekt nåbara från detta objektet"
 
-#: builtin/fetch.c:211
+#: builtin/fetch.c:215
 msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
 msgstr "hämta inte paketfil; skriv istället förfäder till förhandlingstips"
 
-#: builtin/fetch.c:214 builtin/fetch.c:216
+#: builtin/fetch.c:218 builtin/fetch.c:220
 msgid "run 'maintenance --auto' after fetching"
 msgstr "kör \"maintenance --auto\" efter hämtning"
 
-#: builtin/fetch.c:218 builtin/pull.c:247
+#: builtin/fetch.c:222 builtin/pull.c:247
 msgid "check for forced-updates on all updated branches"
 msgstr "se efter tvingade uppdateringar i alla uppdaterade grenar"
 
-#: builtin/fetch.c:220
+#: builtin/fetch.c:224
 msgid "write the commit-graph after fetching"
 msgstr "skriv incheckingsgrafen efter hämtning"
 
-#: builtin/fetch.c:222
+#: builtin/fetch.c:226
 msgid "accept refspecs from stdin"
 msgstr "ta emot referenser från standard in"
 
-#: builtin/fetch.c:592
+#: builtin/fetch.c:618
 msgid "couldn't find remote ref HEAD"
 msgstr "kunde inte hitta fjärr-referensen HEAD"
 
-#: builtin/fetch.c:766
-#, c-format
-msgid "configuration fetch.output contains invalid value %s"
-msgstr "konfigurationen för fetch.output innehåller ogiltigt värde %s"
-
-#: builtin/fetch.c:867
+#: builtin/fetch.c:893
 #, c-format
 msgid "object %s not found"
 msgstr "objektet %s hittades inte"
 
-#: builtin/fetch.c:871
+#: builtin/fetch.c:897
 msgid "[up to date]"
 msgstr "[àjour]"
 
-#: builtin/fetch.c:883 builtin/fetch.c:901 builtin/fetch.c:973
+#: builtin/fetch.c:909 builtin/fetch.c:927 builtin/fetch.c:999
 msgid "[rejected]"
 msgstr "[refuserad]"
 
-#: builtin/fetch.c:885
+#: builtin/fetch.c:911
 msgid "can't fetch in current branch"
 msgstr "kan inte hämta i aktuell gren"
 
-#: builtin/fetch.c:886
+#: builtin/fetch.c:912
 msgid "checked out in another worktree"
 msgstr "utcheckat i en annan arbetskatalog"
 
-#: builtin/fetch.c:896
+#: builtin/fetch.c:922
 msgid "[tag update]"
 msgstr "[uppdaterad tagg]"
 
-#: builtin/fetch.c:897 builtin/fetch.c:934 builtin/fetch.c:956
-#: builtin/fetch.c:968
+#: builtin/fetch.c:923 builtin/fetch.c:960 builtin/fetch.c:982
+#: builtin/fetch.c:994
 msgid "unable to update local ref"
 msgstr "kunde inte uppdatera lokal ref"
 
-#: builtin/fetch.c:901
+#: builtin/fetch.c:927
 msgid "would clobber existing tag"
 msgstr "skulle skriva över befintlig tagg"
 
-#: builtin/fetch.c:923
+#: builtin/fetch.c:949
 msgid "[new tag]"
 msgstr "[ny tagg]"
 
-#: builtin/fetch.c:926
+#: builtin/fetch.c:952
 msgid "[new branch]"
 msgstr "[ny gren]"
 
-#: builtin/fetch.c:929
+#: builtin/fetch.c:955
 msgid "[new ref]"
 msgstr "[ny ref]"
 
-#: builtin/fetch.c:968
+#: builtin/fetch.c:994
 msgid "forced update"
 msgstr "tvingad uppdatering"
 
-#: builtin/fetch.c:973
+#: builtin/fetch.c:999
 msgid "non-fast-forward"
 msgstr "ej snabbspolad"
 
-#: builtin/fetch.c:1076
+#: builtin/fetch.c:1102
 msgid ""
 "fetch normally indicates which branches had a forced update,\n"
 "but that check has been disabled; to re-enable, use '--show-forced-updates'\n"
@@ -15252,7 +15610,7 @@ msgstr ""
 "av; för att slå på igen, använd flaggan \"--show-forced-updates\" eller kör\n"
 "\"git config fetch.showForcedUpdates true\""
 
-#: builtin/fetch.c:1080
+#: builtin/fetch.c:1106
 #, c-format
 msgid ""
 "it took %.2f seconds to check forced updates; you can use\n"
@@ -15265,22 +15623,22 @@ msgstr ""
 "showForcedUpdates\n"
 "false\" för att undvika testet\n"
 
-#: builtin/fetch.c:1112
+#: builtin/fetch.c:1136
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s sände inte alla nödvändiga objekt\n"
 
-#: builtin/fetch.c:1141
+#: builtin/fetch.c:1156
 #, c-format
 msgid "rejected %s because shallow roots are not allowed to be updated"
 msgstr "avvisade %s då grunda rötter inte tillåts uppdateras"
 
-#: builtin/fetch.c:1231 builtin/fetch.c:1379
+#: builtin/fetch.c:1259 builtin/fetch.c:1418
 #, c-format
 msgid "From %.*s\n"
 msgstr "Från %.*s\n"
 
-#: builtin/fetch.c:1252
+#: builtin/fetch.c:1269
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -15289,49 +15647,49 @@ msgstr ""
 "vissa lokala referenser kunde inte uppdateras; testa att köra\n"
 " \"git remote prune %s\" för att ta bort gamla grenar som står i konflikt"
 
-#: builtin/fetch.c:1349
+#: builtin/fetch.c:1377
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s kommer bli dinglande)"
 
-#: builtin/fetch.c:1350
+#: builtin/fetch.c:1378
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s har blivit dinglande)"
 
-#: builtin/fetch.c:1382
+#: builtin/fetch.c:1421
 msgid "[deleted]"
 msgstr "[borttagen]"
 
-#: builtin/fetch.c:1383 builtin/remote.c:1128
+#: builtin/fetch.c:1422 builtin/remote.c:1153
 msgid "(none)"
 msgstr "(ingen)"
 
-#: builtin/fetch.c:1405
+#: builtin/fetch.c:1446
 #, c-format
 msgid "refusing to fetch into branch '%s' checked out at '%s'"
 msgstr "vägrar hämta till grenen \"%s\" som är utcheckad på \"%s\""
 
-#: builtin/fetch.c:1425
+#: builtin/fetch.c:1466
 #, c-format
 msgid "option \"%s\" value \"%s\" is not valid for %s"
 msgstr "flaggan \"%s\" med värdet \"%s\" är inte giltigt för %s"
 
-#: builtin/fetch.c:1428
+#: builtin/fetch.c:1469
 #, c-format
 msgid "option \"%s\" is ignored for %s\n"
 msgstr "flaggan \"%s\" ignoreras för %s\n"
 
-#: builtin/fetch.c:1455
+#: builtin/fetch.c:1496
 #, c-format
 msgid "the object %s does not exist"
 msgstr "objektet %s finns inte"
 
-#: builtin/fetch.c:1643
+#: builtin/fetch.c:1748
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr "flera grenar upptäcktes, inkompatibelt med --set-upstream"
 
-#: builtin/fetch.c:1655
+#: builtin/fetch.c:1760
 #, c-format
 msgid ""
 "could not set upstream of HEAD to '%s' from '%s' when it does not point to "
@@ -15340,19 +15698,19 @@ msgstr ""
 "kunde inte sätta uppström för HEAD till \"%s\" från \"%s\" när det inte "
 "pekar mot någon gren."
 
-#: builtin/fetch.c:1668
+#: builtin/fetch.c:1773
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr "ställer inte in uppströmsgren för en fjärrspårande gren på fjärren"
 
-#: builtin/fetch.c:1670
+#: builtin/fetch.c:1775
 msgid "not setting upstream for a remote tag"
 msgstr "ställer inte in uppström för en fjärrtag"
 
-#: builtin/fetch.c:1672
+#: builtin/fetch.c:1777
 msgid "unknown branch type"
 msgstr "okänd grentyp"
 
-#: builtin/fetch.c:1674
+#: builtin/fetch.c:1779
 msgid ""
 "no source branch found;\n"
 "you need to specify exactly one branch with the --set-upstream option"
@@ -15360,22 +15718,22 @@ msgstr ""
 "hittade ingen källgren;\n"
 "du måste ange exakt en gren med flaggan --set-upstream"
 
-#: builtin/fetch.c:1804 builtin/fetch.c:1867
+#: builtin/fetch.c:1904 builtin/fetch.c:1967
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Hämtar %s\n"
 
-#: builtin/fetch.c:1814 builtin/fetch.c:1869
+#: builtin/fetch.c:1914 builtin/fetch.c:1969
 #, c-format
 msgid "could not fetch %s"
 msgstr "kunde inte hämta %s"
 
-#: builtin/fetch.c:1826
+#: builtin/fetch.c:1926
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr "kunde inte hämta \"%s\" (felkod: %d)\n"
 
-#: builtin/fetch.c:1930
+#: builtin/fetch.c:2030
 msgid ""
 "no remote repository specified; please specify either a URL or a\n"
 "remote name from which new revisions should be fetched"
@@ -15383,48 +15741,48 @@ msgstr ""
 "inget fjärrarkiv angavs; ange antingen en URL eller namnet på ett\n"
 "fjärrarkiv som nya incheckningar ska hämtas från"
 
-#: builtin/fetch.c:1966
+#: builtin/fetch.c:2066
 msgid "you need to specify a tag name"
 msgstr "du måste ange namnet på en tagg"
 
-#: builtin/fetch.c:2032
-msgid "--negotiate-only needs one or more --negotiate-tip=*"
-msgstr "--negotiate-only behöver en eller flera --negotiate-tip=*"
+#: builtin/fetch.c:2156
+msgid "--negotiate-only needs one or more --negotiation-tip=*"
+msgstr "--negotiate-only behöver en eller flera --negotiation-tip=*"
 
-#: builtin/fetch.c:2036
+#: builtin/fetch.c:2160
 msgid "negative depth in --deepen is not supported"
 msgstr "negativa djup stöds inte i --deepen"
 
-#: builtin/fetch.c:2045
+#: builtin/fetch.c:2169
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "--unshallow kan inte användas på ett komplett arkiv"
 
-#: builtin/fetch.c:2062
+#: builtin/fetch.c:2186
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all tar inte namnet på ett arkiv som argument"
 
-#: builtin/fetch.c:2064
+#: builtin/fetch.c:2188
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all kan inte anges med referensspecifikationer"
 
-#: builtin/fetch.c:2073
+#: builtin/fetch.c:2197
 #, c-format
 msgid "no such remote or remote group: %s"
 msgstr "fjärren eller fjärrgruppen finns inte: %s"
 
-#: builtin/fetch.c:2081
+#: builtin/fetch.c:2205
 msgid "fetching a group and specifying refspecs does not make sense"
 msgstr "kan inte hämta från grupp och ange referensspecifikationer"
 
-#: builtin/fetch.c:2097
+#: builtin/fetch.c:2221
 msgid "must supply remote when using --negotiate-only"
 msgstr "måste ange fjärr när --negotiate-only anges"
 
-#: builtin/fetch.c:2102
+#: builtin/fetch.c:2226
 msgid "protocol does not support --negotiate-only, exiting"
 msgstr "protokollet stöder inte --negotiate-only, avslutar"
 
-#: builtin/fetch.c:2121
+#: builtin/fetch.c:2246
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -15432,11 +15790,11 @@ msgstr ""
 "--filter kan endast användas med fjärren konfigurerad i extensions."
 "partialclone"
 
-#: builtin/fetch.c:2125
+#: builtin/fetch.c:2250
 msgid "--atomic can only be used when fetching from one remote"
 msgstr "--atomic kan bara användas vid hämtning från en fjärr"
 
-#: builtin/fetch.c:2129
+#: builtin/fetch.c:2254
 msgid "--stdin can only be used when fetching from one remote"
 msgstr "--stdin kan bara användas vid hämtning fårn en fjärr"
 
@@ -15508,7 +15866,7 @@ msgstr "citera platshållare passande för Tcl"
 msgid "show only <n> matched refs"
 msgstr "visa endast <n> träffade refs"
 
-#: builtin/for-each-ref.c:42 builtin/tag.c:481
+#: builtin/for-each-ref.c:42 builtin/tag.c:482
 msgid "respect format colors"
 msgstr "använd formatfärger"
 
@@ -15704,7 +16062,7 @@ msgstr "Kontrollerar objektkataloger"
 msgid "Checking %s link"
 msgstr "Kontrollerar %s-länk"
 
-#: builtin/fsck.c:710 builtin/index-pack.c:859
+#: builtin/fsck.c:710 builtin/index-pack.c:862
 #, c-format
 msgid "invalid %s"
 msgstr "ogiltigt %s"
@@ -15775,7 +16133,7 @@ msgstr "ta även hänsyn till paket och supplerande objekt"
 msgid "check only connectivity"
 msgstr "kontrollera endast konnektivitet"
 
-#: builtin/fsck.c:798 builtin/mktag.c:76
+#: builtin/fsck.c:798 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr "aktivera striktare kontroll"
 
@@ -15805,6 +16163,118 @@ msgstr "%s: objekt saknas"
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "ogiltig parameter: förväntade sha1, fick \"%s\""
 
+#: builtin/fsmonitor--daemon.c:13
+msgid "git fsmonitor--daemon start [<options>]"
+msgstr "git fsmonitor--daemon start [<flaggor>]"
+
+#: builtin/fsmonitor--daemon.c:14
+msgid "git fsmonitor--daemon run [<options>]"
+msgstr "git fsmonitor--daemon run [<flaggor>]"
+
+#: builtin/fsmonitor--daemon.c:15
+msgid "git fsmonitor--daemon stop"
+msgstr "git fsmonitor--daemon stop"
+
+#: builtin/fsmonitor--daemon.c:16
+msgid "git fsmonitor--daemon status"
+msgstr "git fsmonitor--daemon status"
+
+#: builtin/fsmonitor--daemon.c:38 builtin/fsmonitor--daemon.c:47
+#, c-format
+msgid "value of '%s' out of range: %d"
+msgstr "värdet för \"%s\" utanför intervallet: %d"
+
+#: builtin/fsmonitor--daemon.c:57
+#, c-format
+msgid "value of '%s' not bool or int: %d"
+msgstr "värdet för \"%s\" är inte bool eller int: %d"
+
+#: builtin/fsmonitor--daemon.c:99
+#, c-format
+msgid "fsmonitor-daemon is watching '%s'\n"
+msgstr "fsmonitor-daemon bevakar \"%s\"\n"
+
+#: builtin/fsmonitor--daemon.c:104
+#, c-format
+msgid "fsmonitor-daemon is not watching '%s'\n"
+msgstr "fsmonitor-daemon bevakar inte \"%s\"\n"
+
+#: builtin/fsmonitor--daemon.c:170
+#, c-format
+msgid "could not create fsmonitor cookie '%s'"
+msgstr "kunde inte skapa fsmonitor-kaka \"%s\""
+
+#: builtin/fsmonitor--daemon.c:753
+#, c-format
+msgid "fsmonitor: cookie_result '%d' != SEEN"
+msgstr "fsmonitor: cookie_result '%d' != SEEN"
+
+#: builtin/fsmonitor--daemon.c:1187
+#, c-format
+msgid "could not start IPC thread pool on '%s'"
+msgstr "kunde inte starta IPC-trådpol på \"%s\""
+
+#: builtin/fsmonitor--daemon.c:1199
+msgid "could not start fsmonitor listener thread"
+msgstr "kunde inte starta fsmonitor-lyssnartråd"
+
+#: builtin/fsmonitor--daemon.c:1297
+msgid "could not initialize listener thread"
+msgstr "kunde inte initiera lyssnartråd"
+
+#: builtin/fsmonitor--daemon.c:1328 builtin/fsmonitor--daemon.c:1383
+#, c-format
+msgid "fsmonitor--daemon is already running '%s'"
+msgstr "fsmonitor--daemon körs redan på \"%s\""
+
+#: builtin/fsmonitor--daemon.c:1332
+#, c-format
+msgid "running fsmonitor-daemon in '%s'\n"
+msgstr "kör fsmonitor-daemon i \"%s\"\n"
+
+#: builtin/fsmonitor--daemon.c:1387
+#, c-format
+msgid "starting fsmonitor-daemon in '%s'\n"
+msgstr "startar fsmonitor-daemon i \"%s\"\n"
+
+#: builtin/fsmonitor--daemon.c:1413
+msgid "daemon failed to start"
+msgstr "serverprocessen kunde inte startas"
+
+#: builtin/fsmonitor--daemon.c:1416
+msgid "daemon not online yet"
+msgstr "serverprocessen ännu inte operativ"
+
+#: builtin/fsmonitor--daemon.c:1419
+msgid "daemon terminated"
+msgstr "serverprocessen avslutades"
+
+#: builtin/fsmonitor--daemon.c:1429
+msgid "detach from console"
+msgstr "koppla från konsolen"
+
+#: builtin/fsmonitor--daemon.c:1432
+msgid "use <n> ipc worker threads"
+msgstr "använd <n> ipc-jobbtrådar"
+
+#: builtin/fsmonitor--daemon.c:1435
+msgid "max seconds to wait for background daemon startup"
+msgstr "max sekunder att vänta på att serverprocessen startar"
+
+#: builtin/fsmonitor--daemon.c:1449
+#, c-format
+msgid "invalid 'ipc-threads' value (%d)"
+msgstr "ogiltigt värde för \"ipc-threads\" (%d)"
+
+#: builtin/fsmonitor--daemon.c:1464
+#, c-format
+msgid "Unhandled subcommand '%s'"
+msgstr "Ej hanterat underkommando \"%s\""
+
+#: builtin/fsmonitor--daemon.c:1477
+msgid "fsmonitor--daemon not supported on this platform"
+msgstr "fsmonitor--daemon stöds inte på denna plattform"
+
 #: builtin/gc.c:39
 msgid "git gc [<options>]"
 msgstr "git gc [<flaggor>]"
@@ -16053,8 +16523,8 @@ msgstr "misslyckades starta systemctl"
 msgid "failed to run systemctl"
 msgstr "misslyckades att köra systemctl"
 
-#: builtin/gc.c:2210 builtin/gc.c:2215 builtin/worktree.c:62
-#: builtin/worktree.c:944
+#: builtin/gc.c:2210 builtin/gc.c:2215 builtin/worktree.c:63
+#: builtin/worktree.c:1024
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "misslyckades ta bort \"%s\""
@@ -16102,16 +16572,16 @@ msgstr "git maintenance <underkommando> [<flaggor>]"
 msgid "invalid subcommand: %s"
 msgstr "felaktigt underkommando: %s"
 
-#: builtin/grep.c:30
+#: builtin/grep.c:32
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<flaggor>] [-e] <mönster> [<rev>...] [[--] <sökväg>...]"
 
-#: builtin/grep.c:239
+#: builtin/grep.c:241
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep: misslyckades skapa tråd. %s"
 
-#: builtin/grep.c:293
+#: builtin/grep.c:295
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "felaktigt antal trådar angivet (%d) för %s"
@@ -16120,258 +16590,250 @@ msgstr "felaktigt antal trådar angivet (%d) för %s"
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:301 builtin/index-pack.c:1582 builtin/index-pack.c:1785
-#: builtin/pack-objects.c:3142
+#: builtin/grep.c:303 builtin/index-pack.c:1587 builtin/index-pack.c:1791
+#: builtin/pack-objects.c:3150
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "trådstöd saknas, ignorerar %s"
 
-#: builtin/grep.c:488 builtin/grep.c:617 builtin/grep.c:657
+#: builtin/grep.c:490 builtin/grep.c:619 builtin/grep.c:659
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "kunde inte läsa träd (%s)"
 
-#: builtin/grep.c:672
+#: builtin/grep.c:674
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "kunde inte \"grep\" från objekt av typen %s"
 
-#: builtin/grep.c:752
+#: builtin/grep.c:754
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "flaggan \"%c\" antar ett numeriskt värde"
 
-#: builtin/grep.c:851
+#: builtin/grep.c:852
 msgid "search in index instead of in the work tree"
 msgstr "sök i indexet istället för i arbetskatalogen"
 
-#: builtin/grep.c:853
+#: builtin/grep.c:854
 msgid "find in contents not managed by git"
 msgstr "sök i innehåll som inte hanteras av git"
 
-#: builtin/grep.c:855
+#: builtin/grep.c:856
 msgid "search in both tracked and untracked files"
 msgstr "sök i både spårade och ospårade filer"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:858
 msgid "ignore files specified via '.gitignore'"
 msgstr "ignorera filer angivna i \".gitignore\""
 
-#: builtin/grep.c:859
+#: builtin/grep.c:860
 msgid "recursively search in each submodule"
 msgstr "sök varje undermodul rekursivt"
 
-#: builtin/grep.c:862
+#: builtin/grep.c:863
 msgid "show non-matching lines"
 msgstr "visa rader som inte träffas"
 
-#: builtin/grep.c:864
+#: builtin/grep.c:865
 msgid "case insensitive matching"
 msgstr "skiftlägesokänslig sökning"
 
-#: builtin/grep.c:866
+#: builtin/grep.c:867
 msgid "match patterns only at word boundaries"
 msgstr "träffa endast mönster vid ordgränser"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:869
 msgid "process binary files as text"
 msgstr "hantera binärfiler som text"
 
-#: builtin/grep.c:870
+#: builtin/grep.c:871
 msgid "don't match patterns in binary files"
 msgstr "träffa inte mönster i binärfiler"
 
-#: builtin/grep.c:873
+#: builtin/grep.c:874
 msgid "process binary files with textconv filters"
 msgstr "hantera binärfiler med textconv-filter"
 
-#: builtin/grep.c:875
+#: builtin/grep.c:876
 msgid "search in subdirectories (default)"
 msgstr "sök i underkataloger (standard)"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:878
 msgid "descend at most <depth> levels"
 msgstr "gå som mest ned <djup> nivåer"
 
-#: builtin/grep.c:881
+#: builtin/grep.c:882
 msgid "use extended POSIX regular expressions"
 msgstr "använd utökade POSIX-reguljära uttryck"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:885
 msgid "use basic POSIX regular expressions (default)"
 msgstr "använd grundläggande POSIX-reguljära uttryck (standard)"
 
-#: builtin/grep.c:887
+#: builtin/grep.c:888
 msgid "interpret patterns as fixed strings"
 msgstr "tolka mönster som fixerade strängar"
 
-#: builtin/grep.c:890
+#: builtin/grep.c:891
 msgid "use Perl-compatible regular expressions"
 msgstr "använd Perlkompatibla reguljära uttryck"
 
-#: builtin/grep.c:893
+#: builtin/grep.c:894
 msgid "show line numbers"
 msgstr "visa radnummer"
 
-#: builtin/grep.c:894
+#: builtin/grep.c:895
 msgid "show column number of first match"
 msgstr "visa kolumnnummer för första träff"
 
-#: builtin/grep.c:895
+#: builtin/grep.c:896
 msgid "don't show filenames"
 msgstr "visa inte filnamn"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:897
 msgid "show filenames"
 msgstr "visa filnamn"
 
-#: builtin/grep.c:898
+#: builtin/grep.c:899
 msgid "show filenames relative to top directory"
 msgstr "visa filnamn relativa till toppkatalogen"
 
-#: builtin/grep.c:900
+#: builtin/grep.c:901
 msgid "show only filenames instead of matching lines"
 msgstr "visa endast filnamn istället för träffade rader"
 
-#: builtin/grep.c:902
+#: builtin/grep.c:903
 msgid "synonym for --files-with-matches"
 msgstr "synonym för --files-with-matches"
 
-#: builtin/grep.c:905
+#: builtin/grep.c:906
 msgid "show only the names of files without match"
 msgstr "visa endast namn på filer utan träffar"
 
-#: builtin/grep.c:907
+#: builtin/grep.c:908
 msgid "print NUL after filenames"
 msgstr "skriv NUL efter filnamn"
 
-#: builtin/grep.c:910
+#: builtin/grep.c:911
 msgid "show only matching parts of a line"
 msgstr "visa endast träffade delar av rader"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:913
 msgid "show the number of matches instead of matching lines"
 msgstr "visa antal träffar istället för träffade rader"
 
-#: builtin/grep.c:913
+#: builtin/grep.c:914
 msgid "highlight matches"
 msgstr "ljusmarkera träffar"
 
-#: builtin/grep.c:915
+#: builtin/grep.c:916
 msgid "print empty line between matches from different files"
 msgstr "skriv tomma rader mellan träffar från olika filer"
 
-#: builtin/grep.c:917
+#: builtin/grep.c:918
 msgid "show filename only once above matches from same file"
 msgstr "visa filnamn endast en gång ovanför träffar från samma fil"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:921
 msgid "show <n> context lines before and after matches"
 msgstr "visa <n> rader sammanhang före och efter träffar"
 
-#: builtin/grep.c:923
+#: builtin/grep.c:924
 msgid "show <n> context lines before matches"
 msgstr "visa <n> rader sammanhang före träffar"
 
-#: builtin/grep.c:925
+#: builtin/grep.c:926
 msgid "show <n> context lines after matches"
 msgstr "visa <n> rader sammanhang efter träffar"
 
-#: builtin/grep.c:927
+#: builtin/grep.c:928
 msgid "use <n> worker threads"
 msgstr "använd <n> jobbtrådar"
 
-#: builtin/grep.c:928
+#: builtin/grep.c:929
 msgid "shortcut for -C NUM"
 msgstr "genväg för -C NUM"
 
-#: builtin/grep.c:931
+#: builtin/grep.c:932
 msgid "show a line with the function name before matches"
 msgstr "visa en rad med funktionsnamnet före träffen"
 
-#: builtin/grep.c:933
+#: builtin/grep.c:934
 msgid "show the surrounding function"
 msgstr "visa den omkringliggande funktionen"
 
-#: builtin/grep.c:936
+#: builtin/grep.c:937
 msgid "read patterns from file"
 msgstr "läs mönster från fil"
 
-#: builtin/grep.c:938
+#: builtin/grep.c:939
 msgid "match <pattern>"
 msgstr "träffa <mönster>"
 
-#: builtin/grep.c:940
+#: builtin/grep.c:941
 msgid "combine patterns specified with -e"
 msgstr "kombinera mönster som anges med -e"
 
-#: builtin/grep.c:952
+#: builtin/grep.c:953
 msgid "indicate hit with exit status without output"
 msgstr "ange träff med slutstatuskod utan utdata"
 
-#: builtin/grep.c:954
+#: builtin/grep.c:955
 msgid "show only matches from files that match all patterns"
 msgstr "visa endast träffar från filer som träffar alla mönster"
 
-#: builtin/grep.c:957
+#: builtin/grep.c:958
 msgid "pager"
 msgstr "bläddrare"
 
-#: builtin/grep.c:957
+#: builtin/grep.c:958
 msgid "show matching files in the pager"
 msgstr "visa träffade filer i filbläddraren"
 
-#: builtin/grep.c:961
+#: builtin/grep.c:962
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "tillåt anropa grep(1) (ignoreras av detta bygge)"
 
-#: builtin/grep.c:1027
+#: builtin/grep.c:1028
 msgid "no pattern given"
 msgstr "inget mönster angavs"
 
-#: builtin/grep.c:1063
+#: builtin/grep.c:1064
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr "--no-index och --untracked kan inte användas med revisioner"
 
-#: builtin/grep.c:1071
+#: builtin/grep.c:1072
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "kan inte slå upp revision: %s"
 
-#: builtin/grep.c:1101
+#: builtin/grep.c:1102
 msgid "--untracked not supported with --recurse-submodules"
 msgstr "--untracked stöds inte med --recurse-submodules"
 
-#: builtin/grep.c:1105
+#: builtin/grep.c:1106
 msgid "invalid option combination, ignoring --threads"
 msgstr "ogiltig kombination av flaggor, ignorerar --threads"
 
-#: builtin/grep.c:1108 builtin/pack-objects.c:4059
+#: builtin/grep.c:1109 builtin/pack-objects.c:4084
 msgid "no threads support, ignoring --threads"
 msgstr "trådstöd saknas, ignorerar --threads"
 
-#: builtin/grep.c:1111 builtin/index-pack.c:1579 builtin/pack-objects.c:3139
+#: builtin/grep.c:1112 builtin/index-pack.c:1584 builtin/pack-objects.c:3147
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "felaktigt antal trådar angivet (%d)"
 
-#: builtin/grep.c:1145
+#: builtin/grep.c:1146
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager fungerar endast i arbetskatalogen"
 
-#: builtin/grep.c:1171
-msgid "--cached or --untracked cannot be used with --no-index"
-msgstr "--cached och --untracked kan inte användas med --no-index"
-
-#: builtin/grep.c:1174
-msgid "--untracked cannot be used with --cached"
-msgstr "--untracked kan inte användas med --cached"
-
-#: builtin/grep.c:1180
+#: builtin/grep.c:1179
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr "--[no-]exclude-standard kan inte användas för spårat innehåll"
 
-#: builtin/grep.c:1188
+#: builtin/grep.c:1187
 msgid "both --cached and trees are given"
 msgstr "både --cached och träd angavs"
 
@@ -16383,108 +16845,100 @@ msgstr ""
 "git hash-object [-t <typ>] [-w] [--path=<fil> | --no-filters] [--stdin] [--] "
 "<fil>..."
 
-#: builtin/hash-object.c:84
-msgid "git hash-object  --stdin-paths"
-msgstr "git hash-object  --stdin-paths"
-
-#: builtin/hash-object.c:96
+#: builtin/hash-object.c:97
 msgid "object type"
 msgstr "objekttyp"
 
-#: builtin/hash-object.c:97
+#: builtin/hash-object.c:98
 msgid "write the object into the object database"
 msgstr "skriv objektet till objektdatabasen"
 
-#: builtin/hash-object.c:99
+#: builtin/hash-object.c:100
 msgid "read the object from stdin"
 msgstr "läs objektet från standard in"
 
-#: builtin/hash-object.c:101
+#: builtin/hash-object.c:102
 msgid "store file as is without filters"
 msgstr "spara filen som den är utan filer"
 
-#: builtin/hash-object.c:102
+#: builtin/hash-object.c:103
 msgid ""
 "just hash any random garbage to create corrupt objects for debugging Git"
 msgstr ""
 "hasha slumpmässigt skräp för att skapa korrupta objekt för felsökning av Git"
 
-#: builtin/hash-object.c:103
+#: builtin/hash-object.c:104
 msgid "process file as it were from this path"
 msgstr "hantera filen som om den kom från sökvägen"
 
-#: builtin/help.c:55
+#: builtin/help.c:57
 msgid "print all available commands"
 msgstr "visa alla tillgängliga kommandon"
 
-#: builtin/help.c:57
+#: builtin/help.c:60
+msgid "show external commands in --all"
+msgstr "visa externa kommandon i --all"
+
+#: builtin/help.c:61
+msgid "show aliases in --all"
+msgstr "visa alias i --all"
+
+#: builtin/help.c:62
 msgid "exclude guides"
 msgstr "uteslut vägledningar"
 
-#: builtin/help.c:58
+#: builtin/help.c:63
 msgid "show man page"
 msgstr "visa manualsida"
 
-#: builtin/help.c:59
+#: builtin/help.c:64
 msgid "show manual in web browser"
 msgstr "visa manual i webbläsare"
 
-#: builtin/help.c:61
+#: builtin/help.c:66
 msgid "show info page"
 msgstr "visa info-sida"
 
-#: builtin/help.c:63
+#: builtin/help.c:68
 msgid "print command description"
 msgstr "visa kommandobeskrivning"
 
-#: builtin/help.c:65
+#: builtin/help.c:70
 msgid "print list of useful guides"
 msgstr "lista användbara vägledningar"
 
-#: builtin/help.c:67
+#: builtin/help.c:72
 msgid "print all configuration variable names"
 msgstr "visa namn på alla konfigurationsvariabler"
 
-#: builtin/help.c:78
-msgid ""
-"git help [-a|--all] [--[no-]verbose]]\n"
-"         [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
-msgstr ""
-"git help [-a|--all] [--[no-]verbose]]\n"
-"         [[-i|--info] [-m|--man] [-w|--web]] [<kommando>]"
-
-#: builtin/help.c:80
-msgid "git help [-g|--guides]"
-msgstr "git help [-g|--guides]"
+#: builtin/help.c:84
+msgid "git help [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
+msgstr "git help [[-i|--info] [-m|--man] [-w|--web]] [<kommando>]"
 
-#: builtin/help.c:81
-msgid "git help [-c|--config]"
-msgstr "git help [-c|--config]"
-
-#: builtin/help.c:196
+#: builtin/help.c:201
 #, c-format
 msgid "unrecognized help format '%s'"
 msgstr "okänt hjälpformat: \"%s\""
 
-#: builtin/help.c:222
+#: builtin/help.c:227
 msgid "Failed to start emacsclient."
 msgstr "Misslyckades starta emacsclient."
 
-#: builtin/help.c:235
+#: builtin/help.c:240
 msgid "Failed to parse emacsclient version."
 msgstr "Kunde inte tolka emacsclient-version."
 
-#: builtin/help.c:243
+#: builtin/help.c:248
 #, c-format
 msgid "emacsclient version '%d' too old (< 22)."
 msgstr "emacsclient version \"%d\" för gammal (< 22)."
 
-#: builtin/help.c:261 builtin/help.c:283 builtin/help.c:293 builtin/help.c:301
+#: builtin/help.c:266 builtin/help.c:288 builtin/help.c:298 builtin/help.c:306
 #, c-format
 msgid "failed to exec '%s'"
 msgstr "exec misslyckades för \"%s\""
 
-#: builtin/help.c:339
+#: builtin/help.c:344
 #, c-format
 msgid ""
 "'%s': path for unsupported man viewer.\n"
@@ -16493,7 +16947,7 @@ msgstr ""
 "\"%s\": sökväg för man-visare som ej stöds.\n"
 "Använd \"man.<verktyg>.cmd\" istället."
 
-#: builtin/help.c:351
+#: builtin/help.c:356
 #, c-format
 msgid ""
 "'%s': cmd for supported man viewer.\n"
@@ -16502,42 +16956,58 @@ msgstr ""
 "\"%s\": kommando för man-visare som stöds.\n"
 "Använd \"man.<verktyg>.path\" istället."
 
-#: builtin/help.c:466
+#: builtin/help.c:471
 #, c-format
 msgid "'%s': unknown man viewer."
 msgstr "\"%s\": okänd man-visare."
 
-#: builtin/help.c:482
+#: builtin/help.c:487
 msgid "no man viewer handled the request"
 msgstr "ingen man-visare hanterade förfrågan"
 
-#: builtin/help.c:489
+#: builtin/help.c:494
 msgid "no info viewer handled the request"
 msgstr "ingen info-visare hanterade förfrågan"
 
-#: builtin/help.c:550 builtin/help.c:561 git.c:348
+#: builtin/help.c:555 builtin/help.c:566 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "\"%s\" är ett alias för \"%s\""
 
-#: builtin/help.c:564 git.c:380
+#: builtin/help.c:569 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr "felaktig alias.%s-sträng: %s"
 
-#: builtin/help.c:580
-msgid "this option doesn't take any other arguments"
-msgstr "flaggan tar inte några andra argument"
+#: builtin/help.c:611
+#, c-format
+msgid "the '%s' option doesn't take any non-option arguments"
+msgstr "flaggan \"%s\" tar inte några argument som inte är flaggor"
+
+#: builtin/help.c:631
+msgid ""
+"the '--no-[external-commands|aliases]' options can only be used with '--all'"
+msgstr ""
+"flaggorna '--no-[external-commands|aliases]' kan endast användas med \"--all"
+"\""
 
-#: builtin/help.c:601 builtin/help.c:628
+#: builtin/help.c:643 builtin/help.c:671
 #, c-format
 msgid "usage: %s%s"
 msgstr "användning: %s%s"
 
-#: builtin/help.c:623
+#: builtin/help.c:666
 msgid "'git help config' for more information"
 msgstr "\"git help config\" för mer information"
 
+#: builtin/hook.c:10
+msgid "git hook run [--ignore-missing] <hook-name> [-- <hook-args>]"
+msgstr "git hook run [--ignore-missing] <krok-namn> [-- <krok-argument>]"
+
+#: builtin/hook.c:30
+msgid "silently ignore missing requested <hook-name>"
+msgstr "ignorera tyst om önskat <krok-namn> saknas"
+
 #: builtin/index-pack.c:221
 #, c-format
 msgid "object type mismatch at %s"
@@ -16572,244 +17042,245 @@ msgstr "indataläsfel"
 msgid "used more bytes than were available"
 msgstr "använde fler byte än tillgängligt"
 
-#: builtin/index-pack.c:324 builtin/pack-objects.c:756
+#: builtin/index-pack.c:324 builtin/pack-objects.c:754
 msgid "pack too large for current definition of off_t"
 msgstr "paket för stort för nuvarande definition av off_t"
 
-#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
-msgid "pack exceeds maximum allowed size"
-msgstr "paket är större än tillåten maximal storlek"
+#: builtin/index-pack.c:329
+#, c-format
+msgid "pack exceeds maximum allowed size (%s)"
+msgstr "paket är större än tillåten maximal storlek (%s)"
 
-#: builtin/index-pack.c:358
+#: builtin/index-pack.c:362
 msgid "pack signature mismatch"
 msgstr "paketsignatur stämmer inte överens"
 
-#: builtin/index-pack.c:360
+#: builtin/index-pack.c:364
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "paketversion %<PRIu32> stöds ej"
 
-#: builtin/index-pack.c:376
+#: builtin/index-pack.c:380
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "paketet har felaktigt objekt vid index %<PRIuMAX>: %s"
 
-#: builtin/index-pack.c:482
+#: builtin/index-pack.c:485
 #, c-format
 msgid "inflate returned %d"
 msgstr "inflate returnerade %d"
 
-#: builtin/index-pack.c:531
+#: builtin/index-pack.c:534
 msgid "offset value overflow for delta base object"
 msgstr "indexvärdespill för deltabasobjekt"
 
-#: builtin/index-pack.c:539
+#: builtin/index-pack.c:542
 msgid "delta base offset is out of bound"
 msgstr "deltabasindex utanför gränsen"
 
-#: builtin/index-pack.c:547
+#: builtin/index-pack.c:550
 #, c-format
 msgid "unknown object type %d"
 msgstr "okänd objekttyp %d"
 
-#: builtin/index-pack.c:578
+#: builtin/index-pack.c:581
 msgid "cannot pread pack file"
 msgstr "kan inte utföra \"pread\" på paketfil"
 
-#: builtin/index-pack.c:580
+#: builtin/index-pack.c:583
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
 msgstr[0] "för tidigt slut på paketfilen, %<PRIuMAX> byte saknas"
 msgstr[1] "för tidigt slut på paketfilen, %<PRIuMAX> byte saknas"
 
-#: builtin/index-pack.c:606
+#: builtin/index-pack.c:609
 msgid "serious inflate inconsistency"
 msgstr "allvarlig inflate-inkonsekvens"
 
-#: builtin/index-pack.c:751 builtin/index-pack.c:757 builtin/index-pack.c:781
-#: builtin/index-pack.c:820 builtin/index-pack.c:829
+#: builtin/index-pack.c:754 builtin/index-pack.c:760 builtin/index-pack.c:784
+#: builtin/index-pack.c:823 builtin/index-pack.c:832
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "SHA1-KOLLISION UPPTÄCKT VID %s !"
 
-#: builtin/index-pack.c:754 builtin/pack-objects.c:292
-#: builtin/pack-objects.c:352 builtin/pack-objects.c:458
+#: builtin/index-pack.c:757 builtin/pack-objects.c:290
+#: builtin/pack-objects.c:350 builtin/pack-objects.c:456
 #, c-format
 msgid "unable to read %s"
 msgstr "kunde inte läsa %s"
 
-#: builtin/index-pack.c:818
+#: builtin/index-pack.c:821
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "kan inte läsa information om befintligt objekt %s"
 
-#: builtin/index-pack.c:826
+#: builtin/index-pack.c:829
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "kan inte läsa befintligt objekt %s"
 
-#: builtin/index-pack.c:840
+#: builtin/index-pack.c:843
 #, c-format
 msgid "invalid blob object %s"
 msgstr "ogiltigt blob-objekt %s"
 
-#: builtin/index-pack.c:843 builtin/index-pack.c:862
+#: builtin/index-pack.c:846 builtin/index-pack.c:865
 msgid "fsck error in packed object"
 msgstr "fsck-fel i packat objekt"
 
-#: builtin/index-pack.c:864
+#: builtin/index-pack.c:867
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr "Inte alla barnobjekt för %s kan nås"
 
-#: builtin/index-pack.c:925 builtin/index-pack.c:972
+#: builtin/index-pack.c:928 builtin/index-pack.c:975
 msgid "failed to apply delta"
 msgstr "misslyckades tillämpa delta"
 
-#: builtin/index-pack.c:1156
+#: builtin/index-pack.c:1161
 msgid "Receiving objects"
 msgstr "Tar emot objekt"
 
-#: builtin/index-pack.c:1156
+#: builtin/index-pack.c:1161
 msgid "Indexing objects"
 msgstr "Skapar index för objekt"
 
-#: builtin/index-pack.c:1190
+#: builtin/index-pack.c:1195
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "paketet är trasigt (SHA1 stämmer inte)"
 
-#: builtin/index-pack.c:1195
+#: builtin/index-pack.c:1200
 msgid "cannot fstat packfile"
 msgstr "kan inte utföra \"fstat\" på paketfil"
 
-#: builtin/index-pack.c:1198
+#: builtin/index-pack.c:1203
 msgid "pack has junk at the end"
 msgstr "paket har skräp i slutet"
 
-#: builtin/index-pack.c:1210
+#: builtin/index-pack.c:1215
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr "förvirrad bortom vanvett i parse_pack_objects()"
 
-#: builtin/index-pack.c:1233
+#: builtin/index-pack.c:1238
 msgid "Resolving deltas"
 msgstr "Analyserar delta"
 
-#: builtin/index-pack.c:1244 builtin/pack-objects.c:2905
+#: builtin/index-pack.c:1249 builtin/pack-objects.c:2913
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "kunde inte skapa tråd: %s"
 
-#: builtin/index-pack.c:1277
+#: builtin/index-pack.c:1282
 msgid "confusion beyond insanity"
 msgstr "förvirrad bortom vanvett"
 
-#: builtin/index-pack.c:1283
+#: builtin/index-pack.c:1288
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
 msgstr[0] "slutfördes med %d lokalt objekt"
 msgstr[1] "slutfördes med %d lokala objekt"
 
-#: builtin/index-pack.c:1295
+#: builtin/index-pack.c:1300
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr "Oväntad svanskontrollsumma för %s (trasig disk?)"
 
-#: builtin/index-pack.c:1299
+#: builtin/index-pack.c:1304
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] "paketet har %d oanalyserat delta"
 msgstr[1] "paketet har %d oanalyserade delta"
 
-#: builtin/index-pack.c:1323
+#: builtin/index-pack.c:1328
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "kunde inte utföra \"deflate\" på tillagt objekt (%d)"
 
-#: builtin/index-pack.c:1419
+#: builtin/index-pack.c:1423
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "lokalt objekt %s är trasigt"
 
-#: builtin/index-pack.c:1440
+#: builtin/index-pack.c:1445
 #, c-format
 msgid "packfile name '%s' does not end with '.%s'"
 msgstr "paketfilnamnet \"%s\" slutar inte med \".%s\""
 
-#: builtin/index-pack.c:1464
+#: builtin/index-pack.c:1469
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "kan inte ta skriva %s-fil \"%s\""
 
-#: builtin/index-pack.c:1472
+#: builtin/index-pack.c:1477
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr "kan inte stänga skriven %s-fil \"%s\""
 
-#: builtin/index-pack.c:1489
+#: builtin/index-pack.c:1494
 #, c-format
 msgid "unable to rename temporary '*.%s' file to '%s'"
 msgstr "kunde inte byta namn på temporär \"*.%s\"-fil till \"%s\""
 
-#: builtin/index-pack.c:1514
+#: builtin/index-pack.c:1519
 msgid "error while closing pack file"
 msgstr "fel vid stängning av paketfil"
 
-#: builtin/index-pack.c:1573 builtin/pack-objects.c:3150
+#: builtin/index-pack.c:1578 builtin/pack-objects.c:3158
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "felaktig pack.indexversion=%<PRIu32>"
 
-#: builtin/index-pack.c:1643
+#: builtin/index-pack.c:1648
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "Kan inte öppna befintlig paketfil \"%s\""
 
-#: builtin/index-pack.c:1645
+#: builtin/index-pack.c:1650
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "Kan inte öppna befintlig paket-idx-fil för \"%s\""
 
-#: builtin/index-pack.c:1693
+#: builtin/index-pack.c:1698
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] "icke-delta: %d objekt"
 msgstr[1] "icke-delta: %d objekt"
 
-#: builtin/index-pack.c:1700
+#: builtin/index-pack.c:1705
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
 msgstr[0] "kedjelängd = %d: %lu objekt"
 msgstr[1] "kedjelängd = %d: %lu objekt"
 
-#: builtin/index-pack.c:1742
+#: builtin/index-pack.c:1748
 msgid "Cannot come back to cwd"
 msgstr "Kan inte gå tillbaka till arbetskatalogen (cwd)"
 
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1799
-#: builtin/index-pack.c:1819 builtin/index-pack.c:1823
+#: builtin/index-pack.c:1802 builtin/index-pack.c:1805
+#: builtin/index-pack.c:1825 builtin/index-pack.c:1829
 #, c-format
 msgid "bad %s"
 msgstr "felaktig %s"
 
-#: builtin/index-pack.c:1829 builtin/init-db.c:379 builtin/init-db.c:614
+#: builtin/index-pack.c:1835 builtin/init-db.c:379 builtin/init-db.c:614
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "okänd hashningsalgoritm \"%s\""
 
-#: builtin/index-pack.c:1850
+#: builtin/index-pack.c:1856
 msgid "--stdin requires a git repository"
 msgstr "--stdin kräver ett git-arkiv"
 
-#: builtin/index-pack.c:1867
+#: builtin/index-pack.c:1873
 msgid "--verify with no packfile name given"
 msgstr "--verify angavs utan paketfilnamn"
 
-#: builtin/index-pack.c:1933 builtin/unpack-objects.c:584
+#: builtin/index-pack.c:1939 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "fsck-fel i packat objekt"
 
@@ -17018,40 +17489,40 @@ msgstr "--trailer med --only-input ger ingen mening"
 msgid "no input file given for in-place editing"
 msgstr "ingen indatafil angiven för redigering på plats"
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<flaggor>] [<versionsintervall>] [[--] <sökväg>...]"
 
-#: builtin/log.c:60
+#: builtin/log.c:61
 msgid "git show [<options>] <object>..."
 msgstr "git show [<flaggor>] <objekt>..."
 
-#: builtin/log.c:113
+#: builtin/log.c:114
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "ogiltig flagga för --decorate: %s"
 
-#: builtin/log.c:180
+#: builtin/log.c:181
 msgid "show source"
 msgstr "visa källkod"
 
-#: builtin/log.c:181
+#: builtin/log.c:182
 msgid "use mail map file"
 msgstr "använd e-postmappningsfil"
 
-#: builtin/log.c:184
+#: builtin/log.c:185
 msgid "only decorate refs that match <pattern>"
 msgstr "dekorera endast referenser som motsvarar <mönster>"
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "do not decorate refs that match <pattern>"
 msgstr "dekorera inte referenser som motsvarar <mönster>"
 
-#: builtin/log.c:187
+#: builtin/log.c:188
 msgid "decorate options"
 msgstr "dekoreringsflaggor"
 
-#: builtin/log.c:190
+#: builtin/log.c:191
 msgid ""
 "trace the evolution of line range <start>,<end> or function :<funcname> in "
 "<file>"
@@ -17059,89 +17530,93 @@ msgstr ""
 "spåra utvecklingen av radintervallet <start>,<slut> eller funktionen :"
 "<funknamn> i <fil>"
 
-#: builtin/log.c:213
+#: builtin/log.c:214
 msgid "-L<range>:<file> cannot be used with pathspec"
 msgstr "-L<intervall>:<fil> kan inte användas med sökvägsspecifikation"
 
-#: builtin/log.c:321
+#: builtin/log.c:322
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "Slututdata: %d %s\n"
 
-#: builtin/log.c:586
+#: builtin/log.c:429
+msgid "unable to create temporary object directory"
+msgstr "kunde inte skapa temporär objektkatalog"
+
+#: builtin/log.c:599
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: felaktig fil"
 
-#: builtin/log.c:601 builtin/log.c:691
+#: builtin/log.c:614 builtin/log.c:706
 #, c-format
 msgid "could not read object %s"
 msgstr "kunde inte läsa objektet %s"
 
-#: builtin/log.c:716
+#: builtin/log.c:731
 #, c-format
 msgid "unknown type: %d"
 msgstr "okänd typ: %d"
 
-#: builtin/log.c:861
+#: builtin/log.c:880
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr "%s: ogiltigt omslag från beskrivningsläge"
 
-#: builtin/log.c:868
+#: builtin/log.c:887
 msgid "format.headers without value"
 msgstr "format.headers utan värde"
 
-#: builtin/log.c:997
+#: builtin/log.c:1016
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "kan inte öppna patchfilen %s"
 
-#: builtin/log.c:1014
+#: builtin/log.c:1033
 msgid "need exactly one range"
 msgstr "behöver precis ett intervall"
 
-#: builtin/log.c:1024
+#: builtin/log.c:1043
 msgid "not a range"
 msgstr "inte ett intervall"
 
-#: builtin/log.c:1188
+#: builtin/log.c:1207
 msgid "cover letter needs email format"
 msgstr "omslagsbrevet behöver e-postformat"
 
-#: builtin/log.c:1194
+#: builtin/log.c:1213
 msgid "failed to create cover-letter file"
 msgstr "misslyckades skapa fil för omslagsbrev"
 
-#: builtin/log.c:1281
+#: builtin/log.c:1300
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "tokigt in-reply-to: %s"
 
-#: builtin/log.c:1308
+#: builtin/log.c:1327
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<flaggor>] [<sedan> | <revisionsintervall>]"
 
-#: builtin/log.c:1366
+#: builtin/log.c:1385
 msgid "two output directories?"
 msgstr "två utdatakataloger?"
 
-#: builtin/log.c:1517 builtin/log.c:2344 builtin/log.c:2346 builtin/log.c:2358
+#: builtin/log.c:1536 builtin/log.c:2369 builtin/log.c:2371 builtin/log.c:2383
 #, c-format
 msgid "unknown commit %s"
 msgstr "okänd incheckning %s"
 
-#: builtin/log.c:1528 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1547 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "misslyckades slå upp \"%s\" som en giltig referens"
 
-#: builtin/log.c:1537
+#: builtin/log.c:1556
 msgid "could not find exact merge base"
 msgstr "kunde inte hitta exakt sammanslagningsbas"
 
-#: builtin/log.c:1547
+#: builtin/log.c:1566
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -17151,272 +17626,276 @@ msgstr ""
 "använd git branch --set-upstream-to för att spåra en fjärrgren.\n"
 "Eller så kan du ange basincheckning med --base=<bas-inchecknings-id> manuellt"
 
-#: builtin/log.c:1570
+#: builtin/log.c:1589
 msgid "failed to find exact merge base"
 msgstr "kunde inte hitta exakt sammanslagningsbas"
 
-#: builtin/log.c:1587
+#: builtin/log.c:1606
 msgid "base commit should be the ancestor of revision list"
 msgstr "basincheckningen bör vara förfader till revisionslistan"
 
-#: builtin/log.c:1597
+#: builtin/log.c:1616
 msgid "base commit shouldn't be in revision list"
 msgstr "basincheckningen bör inte vara i revisionslistan"
 
-#: builtin/log.c:1655
+#: builtin/log.c:1674
 msgid "cannot get patch id"
 msgstr "kan inte hämta patch-id"
 
-#: builtin/log.c:1718
+#: builtin/log.c:1737
 msgid "failed to infer range-diff origin of current series"
 msgstr "misslyckades räkna ut intervalldiff-ursprung för aktuell serie"
 
-#: builtin/log.c:1720
+#: builtin/log.c:1739
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr "använd \"%s\" som intervalldiff-ursprung för aktuell serie"
 
-#: builtin/log.c:1764
+#: builtin/log.c:1783
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "använd [PATCH n/m] även för en ensam patch"
 
-#: builtin/log.c:1767
+#: builtin/log.c:1786
 msgid "use [PATCH] even with multiple patches"
 msgstr "använd [PATCH] även för flera patchar"
 
-#: builtin/log.c:1771
+#: builtin/log.c:1790
 msgid "print patches to standard out"
 msgstr "skriv patcharna på standard ut"
 
-#: builtin/log.c:1773
+#: builtin/log.c:1792
 msgid "generate a cover letter"
 msgstr "generera ett följebrev"
 
-#: builtin/log.c:1775
+#: builtin/log.c:1794
 msgid "use simple number sequence for output file names"
 msgstr "använd enkel nummersekvens för utdatafilnamn"
 
-#: builtin/log.c:1776
+#: builtin/log.c:1795
 msgid "sfx"
 msgstr "sfx"
 
-#: builtin/log.c:1777
+#: builtin/log.c:1796
 msgid "use <sfx> instead of '.patch'"
 msgstr "använd <sfx> istället för \".patch\""
 
-#: builtin/log.c:1779
+#: builtin/log.c:1798
 msgid "start numbering patches at <n> instead of 1"
 msgstr "börja numrera patchar på <n> istället för 1"
 
-#: builtin/log.c:1780
+#: builtin/log.c:1799
 msgid "reroll-count"
 msgstr "antal iterationer"
 
-#: builtin/log.c:1781
+#: builtin/log.c:1800
 msgid "mark the series as Nth re-roll"
 msgstr "markera serien som N:te försök"
 
-#: builtin/log.c:1783
+#: builtin/log.c:1802
 msgid "max length of output filename"
 msgstr "maximal längd för utdatafilnamn"
 
-#: builtin/log.c:1785
+#: builtin/log.c:1804
 msgid "use [RFC PATCH] instead of [PATCH]"
 msgstr "använd [RFC PATCH] istället för [PATCH]"
 
-#: builtin/log.c:1788
+#: builtin/log.c:1807
 msgid "cover-from-description-mode"
 msgstr "cover-from-description-läge"
 
-#: builtin/log.c:1789
+#: builtin/log.c:1808
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr "skapa delar av omslagsbrevet baserat på grenbeskrivelsen"
 
-#: builtin/log.c:1791
+#: builtin/log.c:1810
 msgid "use [<prefix>] instead of [PATCH]"
 msgstr "använd [<prefix>] istället för [PATCH]"
 
-#: builtin/log.c:1794
+#: builtin/log.c:1813
 msgid "store resulting files in <dir>"
 msgstr "spara filerna i <katalog>"
 
-#: builtin/log.c:1797
+#: builtin/log.c:1816
 msgid "don't strip/add [PATCH]"
 msgstr "ta inte bort eller lägg till [PATCH]"
 
-#: builtin/log.c:1800
+#: builtin/log.c:1819
 msgid "don't output binary diffs"
 msgstr "skriv inte binära diffar"
 
-#: builtin/log.c:1802
+#: builtin/log.c:1821
 msgid "output all-zero hash in From header"
 msgstr "använd hashvärde med nollor i From-huvud"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1823
 msgid "don't include a patch matching a commit upstream"
 msgstr "ta inte med patchar som motsvarar en uppströmsincheckning"
 
-#: builtin/log.c:1806
+#: builtin/log.c:1825
 msgid "show patch format instead of default (patch + stat)"
 msgstr "visa patchformat istället för standard (patch + stat)"
 
-#: builtin/log.c:1808
+#: builtin/log.c:1827
 msgid "Messaging"
 msgstr "E-post"
 
-#: builtin/log.c:1809
+#: builtin/log.c:1828
 msgid "header"
 msgstr "huvud"
 
-#: builtin/log.c:1810
+#: builtin/log.c:1829
 msgid "add email header"
 msgstr "lägg till e-posthuvud"
 
-#: builtin/log.c:1811 builtin/log.c:1812
+#: builtin/log.c:1830 builtin/log.c:1831
 msgid "email"
 msgstr "epost"
 
-#: builtin/log.c:1811
+#: builtin/log.c:1830
 msgid "add To: header"
 msgstr "lägg till mottagarhuvud (\"To:\")"
 
-#: builtin/log.c:1812
+#: builtin/log.c:1831
 msgid "add Cc: header"
 msgstr "lägg till kopiehuvud (\"Cc:\")"
 
-#: builtin/log.c:1813
+#: builtin/log.c:1832
 msgid "ident"
 msgstr "ident"
 
-#: builtin/log.c:1814
+#: builtin/log.c:1833
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr "sätt Från-adress till <ident> (eller incheckare om ident saknas)"
 
-#: builtin/log.c:1816
+#: builtin/log.c:1835
 msgid "message-id"
 msgstr "meddelande-id"
 
-#: builtin/log.c:1817
+#: builtin/log.c:1836
 msgid "make first mail a reply to <message-id>"
 msgstr "gör det första brevet ett svar till <meddelande-id>"
 
-#: builtin/log.c:1818 builtin/log.c:1821
+#: builtin/log.c:1837 builtin/log.c:1840
 msgid "boundary"
 msgstr "gräns"
 
-#: builtin/log.c:1819
+#: builtin/log.c:1838
 msgid "attach the patch"
 msgstr "bifoga patchen"
 
-#: builtin/log.c:1822
+#: builtin/log.c:1841
 msgid "inline the patch"
 msgstr "gör patchen ett inline-objekt"
 
-#: builtin/log.c:1826
+#: builtin/log.c:1845
 msgid "enable message threading, styles: shallow, deep"
 msgstr "aktivera brevtrådning, typer: shallow, deep"
 
-#: builtin/log.c:1828
+#: builtin/log.c:1847
 msgid "signature"
 msgstr "signatur"
 
-#: builtin/log.c:1829
+#: builtin/log.c:1848
 msgid "add a signature"
 msgstr "lägg till signatur"
 
-#: builtin/log.c:1830
+#: builtin/log.c:1849
 msgid "base-commit"
 msgstr "basincheckning"
 
-#: builtin/log.c:1831
+#: builtin/log.c:1850
 msgid "add prerequisite tree info to the patch series"
 msgstr "lägg till förhandskrävd trädinfo i patchserien"
 
-#: builtin/log.c:1834
+#: builtin/log.c:1853
 msgid "add a signature from a file"
 msgstr "lägg till signatur från fil"
 
-#: builtin/log.c:1835
+#: builtin/log.c:1854
 msgid "don't print the patch filenames"
 msgstr "visa inte filnamn för patchar"
 
-#: builtin/log.c:1837
+#: builtin/log.c:1856
 msgid "show progress while generating patches"
 msgstr "visa förloppsindikator medan patchar skapas"
 
-#: builtin/log.c:1839
+#: builtin/log.c:1858
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr "visa ändringar mot <rev> i omslagsbrev eller ensam patch"
 
-#: builtin/log.c:1842
+#: builtin/log.c:1861
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr "visa ändringar mot <refspec> i omslagsbrev eller ensam patch"
 
-#: builtin/log.c:1844 builtin/range-diff.c:28
+#: builtin/log.c:1863 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr "procent som skapelse vägs med"
 
-#: builtin/log.c:1931
+#: builtin/log.c:1953
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "ogiltig ident-rad: %s"
 
-#: builtin/log.c:1956
+#: builtin/log.c:1978
 msgid "--name-only does not make sense"
 msgstr "kan inte använda --name-only"
 
-#: builtin/log.c:1958
+#: builtin/log.c:1980
 msgid "--name-status does not make sense"
 msgstr "kan inte använda --name-status"
 
-#: builtin/log.c:1960
+#: builtin/log.c:1982
 msgid "--check does not make sense"
 msgstr "kan inte använda --check"
 
-#: builtin/log.c:2104
+#: builtin/log.c:1984
+msgid "--remerge-diff does not make sense"
+msgstr "kan inte använda --remerge-diff"
+
+#: builtin/log.c:2129
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff kräver --cover-letter eller ensam patch"
 
-#: builtin/log.c:2108
+#: builtin/log.c:2133
 msgid "Interdiff:"
 msgstr "Interdiff:"
 
-#: builtin/log.c:2109
+#: builtin/log.c:2134
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Interdiff mot v%d:"
 
-#: builtin/log.c:2119
+#: builtin/log.c:2144
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff kräver --cover-letter eller ensam patch"
 
-#: builtin/log.c:2127
+#: builtin/log.c:2152
 msgid "Range-diff:"
 msgstr "Intervall-diff:"
 
-#: builtin/log.c:2128
+#: builtin/log.c:2153
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "Intervall-diff mot v%d:"
 
-#: builtin/log.c:2139
+#: builtin/log.c:2164
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "kunde inte läsa signaturfil \"%s\""
 
-#: builtin/log.c:2175
+#: builtin/log.c:2200
 msgid "Generating patches"
 msgstr "Skapar patchar"
 
-#: builtin/log.c:2219
+#: builtin/log.c:2244
 msgid "failed to create output files"
 msgstr "misslyckades skapa utdatafiler"
 
-#: builtin/log.c:2279
+#: builtin/log.c:2304
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<uppström> [<huvud> [<gräns>]]]"
 
-#: builtin/log.c:2333
+#: builtin/log.c:2358
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -17510,10 +17989,6 @@ msgstr "lägg till git:s standardexkluderingar"
 msgid "make the output relative to the project top directory"
 msgstr "gör utdata relativ till projektets toppkatalog"
 
-#: builtin/ls-files.c:667
-msgid "recurse through submodules"
-msgstr "rekursera ner i undermoduler"
-
 #: builtin/ls-files.c:669
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr "om en <fil> inte är indexet, betrakta det som ett fel"
@@ -17552,7 +18027,7 @@ msgstr ""
 msgid "do not print remote URL"
 msgstr "visa inte fjärr-URL"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1103
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1131
 msgid "exec"
 msgstr "exec"
 
@@ -17584,42 +18059,70 @@ msgstr "avsluta med felkod 2 om motsvarande referenser inte hittas"
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr "visa underliggande referens och objektet det pekar på"
 
-#: builtin/ls-tree.c:30
+#: builtin/ls-tree.c:36
 msgid "git ls-tree [<options>] <tree-ish> [<path>...]"
 msgstr "git ls-tree [<flaggor>] <träd-igt> [<sökväg>...]"
 
-#: builtin/ls-tree.c:128
+#: builtin/ls-tree.c:54
+#, c-format
+msgid "could not get object info about '%s'"
+msgstr "kunde inte hämta objektinfo om \"%s\""
+
+#: builtin/ls-tree.c:79
+#, c-format
+msgid "bad ls-tree format: element '%s' does not start with '('"
+msgstr "felaktigt ls-tree-format: elementet \"%s\" börjar inte med \"(\""
+
+#: builtin/ls-tree.c:83
+#, c-format
+msgid "bad ls-tree format: element '%s' does not end in ')'"
+msgstr "felaktigt ls-tree-format: elementet \"%s\" slutar inte med \")\""
+
+#: builtin/ls-tree.c:109
+#, c-format
+msgid "bad ls-tree format: %%%.*s"
+msgstr "felaktigt ls-tree-format: %%%.*s"
+
+#: builtin/ls-tree.c:336
 msgid "only show trees"
 msgstr "visa endast träd"
 
-#: builtin/ls-tree.c:130
+#: builtin/ls-tree.c:338
 msgid "recurse into subtrees"
 msgstr "rekursera ner i underträd"
 
-#: builtin/ls-tree.c:132
+#: builtin/ls-tree.c:340
 msgid "show trees when recursing"
 msgstr "visa träd medan rekursering"
 
-#: builtin/ls-tree.c:135
+#: builtin/ls-tree.c:343
 msgid "terminate entries with NUL byte"
 msgstr "terminera poster med NUL-byte"
 
-#: builtin/ls-tree.c:136
+#: builtin/ls-tree.c:344
 msgid "include object size"
 msgstr "ta med objektstorlek"
 
-#: builtin/ls-tree.c:138 builtin/ls-tree.c:140
+#: builtin/ls-tree.c:346 builtin/ls-tree.c:348
 msgid "list only filenames"
 msgstr "visa endast filnamn"
 
-#: builtin/ls-tree.c:143
+#: builtin/ls-tree.c:350
+msgid "list only objects"
+msgstr "lista endast objekt"
+
+#: builtin/ls-tree.c:353
 msgid "use full path names"
 msgstr "använd fullständiga sökvägsnamn"
 
-#: builtin/ls-tree.c:145
+#: builtin/ls-tree.c:355
 msgid "list entire tree; not just current directory (implies --full-name)"
 msgstr "visa hela trädet; inte bara aktuell katalog (implicerar --full-name)"
 
+#: builtin/ls-tree.c:391
+msgid "--format can't be combined with other format-altering options"
+msgstr "--format kan inte kombineras med andra formatändrande flaggor"
+
 #. TRANSLATORS: keep <> in "<" mail ">" info.
 #: builtin/mailinfo.c:14
 msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
@@ -17669,7 +18172,11 @@ msgstr "åtgärd när citerad vagnretur hittas"
 msgid "use headers in message's body"
 msgstr "använd huvuden i brevkroppen"
 
-#: builtin/mailsplit.c:239
+#: builtin/mailsplit.c:227
+msgid "reading patches from stdin/tty..."
+msgstr "läser patchar från standard in/tty..."
+
+#: builtin/mailsplit.c:242
 #, c-format
 msgid "empty mbox: '%s'"
 msgstr "tom mbox: \"%s\""
@@ -17694,23 +18201,23 @@ msgstr "git merge-base --is-ancestor <incheckning> <incheckning>"
 msgid "git merge-base --fork-point <ref> [<commit>]"
 msgstr "git merge-base --fork-point <ref> [<incheckning>]"
 
-#: builtin/merge-base.c:143
+#: builtin/merge-base.c:144
 msgid "output all common ancestors"
 msgstr "skriv ut alla gemensamma anfäder"
 
-#: builtin/merge-base.c:145
+#: builtin/merge-base.c:146
 msgid "find ancestors for a single n-way merge"
 msgstr "hitta anfader för enkel n-vägssammanslagning"
 
-#: builtin/merge-base.c:147
+#: builtin/merge-base.c:148
 msgid "list revs not reachable from others"
 msgstr "visa revisioner som inte kan nås från andra"
 
-#: builtin/merge-base.c:149
+#: builtin/merge-base.c:150
 msgid "is the first one ancestor of the other?"
 msgstr "är den första anfader till den andra?"
 
-#: builtin/merge-base.c:151
+#: builtin/merge-base.c:152
 msgid "find where <commit> forked from reflog of <ref>"
 msgstr "se var <incheckning> grenades av från referensloggen från <ref>"
 
@@ -17859,7 +18366,7 @@ msgid "verify that the named commit has a valid GPG signature"
 msgstr "bekräfta att den namngivna incheckningen har en giltig GPG-signatur"
 
 #: builtin/merge.c:280 builtin/notes.c:785 builtin/pull.c:172
-#: builtin/rebase.c:1117 builtin/revert.c:114
+#: builtin/rebase.c:1145 builtin/revert.c:114
 msgid "strategy"
 msgstr "strategi"
 
@@ -17994,73 +18501,73 @@ msgstr ""
 "Rader som inleds med \"%c\" kommer ignoreras, och ett tomt meddelande\n"
 "avbryter incheckningen.\n"
 
-#: builtin/merge.c:894
+#: builtin/merge.c:900
 msgid "Empty commit message."
 msgstr "Tomt incheckningsmeddelande."
 
-#: builtin/merge.c:909
+#: builtin/merge.c:915
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Underbart.\n"
 
-#: builtin/merge.c:970
+#: builtin/merge.c:976
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "Kunde inte slå ihop automatiskt; fixa konflikter och checka in resultatet.\n"
 
-#: builtin/merge.c:1009
+#: builtin/merge.c:1015
 msgid "No current branch."
 msgstr "Inte på någon gren."
 
-#: builtin/merge.c:1011
+#: builtin/merge.c:1017
 msgid "No remote for the current branch."
 msgstr "Ingen fjärr för aktuell gren."
 
-#: builtin/merge.c:1013
+#: builtin/merge.c:1019
 msgid "No default upstream defined for the current branch."
 msgstr "Ingen standarduppström angiven för aktuell gren."
 
-#: builtin/merge.c:1018
+#: builtin/merge.c:1024
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "Ingen fjärrspårande gren för %s från %s"
 
-#: builtin/merge.c:1075
+#: builtin/merge.c:1081
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Felaktigt värde \"%s\" i miljövariabeln \"%s\""
 
-#: builtin/merge.c:1177
+#: builtin/merge.c:1183
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "inte något vi kan slå ihop med %s: %s"
 
-#: builtin/merge.c:1211
+#: builtin/merge.c:1217
 msgid "not something we can merge"
 msgstr "inte något vi kan slå ihop"
 
-#: builtin/merge.c:1324
+#: builtin/merge.c:1330
 msgid "--abort expects no arguments"
 msgstr "--abort tar inga argument"
 
-#: builtin/merge.c:1328
+#: builtin/merge.c:1334
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "Ingen sammanslagning att avbryta (MERGE_HEAD saknas)."
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1352
 msgid "--quit expects no arguments"
 msgstr "--quit tar inga argument"
 
-#: builtin/merge.c:1359
+#: builtin/merge.c:1365
 msgid "--continue expects no arguments"
 msgstr "--continue tar inga argument"
 
-#: builtin/merge.c:1363
+#: builtin/merge.c:1369
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "Ingen sammanslagning pågår (MERGE_HEAD saknas)."
 
-#: builtin/merge.c:1379
+#: builtin/merge.c:1385
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -18068,7 +18575,7 @@ msgstr ""
 "Du har inte avslutat sammanslagningen (MERGE_HEAD finns).\n"
 "Checka in dina ändringar innan du slår ihop."
 
-#: builtin/merge.c:1386
+#: builtin/merge.c:1392
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -18076,85 +18583,81 @@ msgstr ""
 "Du har inte avslutat din \"cherry-pick\" (CHERRY_PICK_HEAD finns).\n"
 "Checka in dina ändringar innan du slår ihop."
 
-#: builtin/merge.c:1389
+#: builtin/merge.c:1395
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "Du har inte avslutat din \"cherry-pick\" (CHERRY_PICK_HEAD finns)."
 
-#: builtin/merge.c:1421
+#: builtin/merge.c:1427
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr "Ingen incheckning angiven och merge.defaultToUpstream är ej satt."
 
-#: builtin/merge.c:1438
+#: builtin/merge.c:1444
 msgid "Squash commit into empty head not supported yet"
 msgstr "Stöder inte en tillplattningsincheckning på ett tomt huvud ännu"
 
-#: builtin/merge.c:1440
+#: builtin/merge.c:1446
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr "Icke-snabbspolad incheckning kan inte användas med ett tomt huvud"
 
-#: builtin/merge.c:1445
+#: builtin/merge.c:1451
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - inte något vi kan slå ihop"
 
-#: builtin/merge.c:1447
+#: builtin/merge.c:1453
 msgid "Can merge only exactly one commit into empty head"
 msgstr "Kan endast slå ihop en enda incheckning i ett tomt huvud"
 
-#: builtin/merge.c:1534
+#: builtin/merge.c:1540
 msgid "refusing to merge unrelated histories"
 msgstr "vägrar slå samman orelaterad historik"
 
-#: builtin/merge.c:1553
+#: builtin/merge.c:1559
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Uppdaterar %s..%s\n"
 
-#: builtin/merge.c:1601
+#: builtin/merge.c:1606
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Försöker riktigt enkel sammanslagning i indexet...\n"
 
-#: builtin/merge.c:1608
+#: builtin/merge.c:1613
 #, c-format
 msgid "Nope.\n"
 msgstr "Nej.\n"
 
-#: builtin/merge.c:1667 builtin/merge.c:1733
+#: builtin/merge.c:1671 builtin/merge.c:1737
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Återspolar trädet till orört...\n"
 
-#: builtin/merge.c:1671
+#: builtin/merge.c:1675
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Försöker sammanslagningsstrategin %s...\n"
 
-#: builtin/merge.c:1723
+#: builtin/merge.c:1727
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Ingen sammanslagningsstrategi hanterade sammanslagningen.\n"
 
-#: builtin/merge.c:1725
+#: builtin/merge.c:1729
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "Sammanslagning med strategin %s misslyckades.\n"
 
-#: builtin/merge.c:1735
+#: builtin/merge.c:1739
 #, c-format
 msgid "Using the %s strategy to prepare resolving by hand.\n"
 msgstr "Använder strategin %s för att förbereda lösning för hand.\n"
 
-#: builtin/merge.c:1749
+#: builtin/merge.c:1753
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
 "Automatisk sammanslagning lyckades; stoppar före incheckning som önskat\n"
 
-#: builtin/mktag.c:10
-msgid "git mktag"
-msgstr "git mktag"
-
 #: builtin/mktag.c:27
 #, c-format
 msgid "warning: tag input does not pass fsck: %s"
@@ -18180,22 +18683,18 @@ msgstr "kunde inte läsa det taggade objektet \"%s\""
 msgid "object '%s' tagged as '%s', but is a '%s' type"
 msgstr "objektet \"%s\" taggat som \"%s\", men är av typen \"%s\""
 
-#: builtin/mktag.c:98
+#: builtin/mktag.c:97
 msgid "tag on stdin did not pass our strict fsck check"
 msgstr "tagg på stdin godkänns inte av vår strikta fsck-kontroll"
 
-#: builtin/mktag.c:101
+#: builtin/mktag.c:100
 msgid "tag on stdin did not refer to a valid object"
 msgstr "taggen på stdin pekar inte på ett giltigt objekt"
 
-#: builtin/mktag.c:104 builtin/tag.c:242
+#: builtin/mktag.c:103 builtin/tag.c:243
 msgid "unable to write tag file"
 msgstr "kunde inte skriva tagg-filen"
 
-#: builtin/mktree.c:66
-msgid "git mktree [-z] [--missing] [--batch]"
-msgstr "git mktree [-z] [--missing] [--batch]"
-
 #: builtin/mktree.c:154
 msgid "input is NUL terminated"
 msgstr "indata är NUL-terminerad"
@@ -18352,52 +18851,56 @@ msgstr "%s, källa=%s, mål=%s"
 msgid "Renaming %s to %s\n"
 msgstr "Byter namn på %s till %s\n"
 
-#: builtin/mv.c:314 builtin/remote.c:790 builtin/repack.c:857
+#: builtin/mv.c:314 builtin/remote.c:812 builtin/repack.c:861
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "misslyckades byta namn på \"%s\""
 
-#: builtin/name-rev.c:474
+#: builtin/name-rev.c:524
 msgid "git name-rev [<options>] <commit>..."
 msgstr "git name-rev [<flaggor>] <incheckning>..."
 
-#: builtin/name-rev.c:475
+#: builtin/name-rev.c:525
 msgid "git name-rev [<options>] --all"
 msgstr "git name-rev [<flaggor>] --all"
 
-#: builtin/name-rev.c:476
-msgid "git name-rev [<options>] --stdin"
-msgstr "git name-rev [<flaggor>] --stdin"
+#: builtin/name-rev.c:526
+msgid "git name-rev [<options>] --annotate-stdin"
+msgstr "git name-rev [<flaggor>] --annotate-stdin"
 
-#: builtin/name-rev.c:533
+#: builtin/name-rev.c:583
 msgid "print only ref-based names (no object names)"
 msgstr "skriv endast referensbaserade namn (inga objektnamn)"
 
-#: builtin/name-rev.c:534
+#: builtin/name-rev.c:584
 msgid "only use tags to name the commits"
 msgstr "använd endast taggar för att namnge incheckningar"
 
-#: builtin/name-rev.c:536
+#: builtin/name-rev.c:586
 msgid "only use refs matching <pattern>"
 msgstr "använd endast referenser som motsvarar <mönster>"
 
-#: builtin/name-rev.c:538
+#: builtin/name-rev.c:588
 msgid "ignore refs matching <pattern>"
 msgstr "ignorera referenser som motsvarar <mönster>"
 
-#: builtin/name-rev.c:540
+#: builtin/name-rev.c:590
 msgid "list all commits reachable from all refs"
 msgstr "lista alla incheckningar som kan nås alla referenser"
 
-#: builtin/name-rev.c:541
-msgid "read from stdin"
-msgstr "läs från standard in"
+#: builtin/name-rev.c:591
+msgid "deprecated: use annotate-stdin instead"
+msgstr "avråds: använd annotate-stdin istället"
+
+#: builtin/name-rev.c:592
+msgid "annotate text from stdin"
+msgstr "annotera text från standard in"
 
-#: builtin/name-rev.c:542
+#: builtin/name-rev.c:593
 msgid "allow to print `undefined` names (default)"
 msgstr "tillåt att skriva \"odefinierade\" namn (standard)"
 
-#: builtin/name-rev.c:548
+#: builtin/name-rev.c:599
 msgid "dereference tags in the input (internal use)"
 msgstr "avreferera taggar i indata (används internt)"
 
@@ -18441,14 +18944,6 @@ msgstr ""
 "git notes [--ref <anteckningsref>] merge [-v | -q] [-s <strategi>] "
 "<anteckningsref>"
 
-#: builtin/notes.c:35
-msgid "git notes merge --commit [-v | -q]"
-msgstr "git notes merge --commit [-v | -q]"
-
-#: builtin/notes.c:36
-msgid "git notes merge --abort [-v | -q]"
-msgstr "git notes merge --abort [-v | -q]"
-
 #: builtin/notes.c:37
 msgid "git notes [--ref <notes-ref>] remove [<object>...]"
 msgstr "git notes [--ref <anteckningsref>] remove [<objekt>...]"
@@ -18509,10 +19004,6 @@ msgstr "git notes remove [<objekt>]"
 msgid "git notes prune [<options>]"
 msgstr "git notes prune [<flaggor>]"
 
-#: builtin/notes.c:92
-msgid "git notes get-ref"
-msgstr "git notes get-ref"
-
 #: builtin/notes.c:97
 msgid "Write/edit the notes for the following object:"
 msgstr "Skriv/redigera anteckningar för följande objekt:"
@@ -18544,7 +19035,7 @@ msgstr "kunde inte skriva anteckningsobjekt"
 msgid "the note contents have been left in %s"
 msgstr "anteckningens innehåll har lämnats kvar i %s"
 
-#: builtin/notes.c:240 builtin/tag.c:581
+#: builtin/notes.c:240 builtin/tag.c:582
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "kunde inte öppna eller läsa \"%s\""
@@ -18584,13 +19075,6 @@ msgstr "misslyckades kopiera anteckningar från \"%s\" till \"%s\""
 msgid "refusing to %s notes in %s (outside of refs/notes/)"
 msgstr "vägrar utföra \"%s\" på anteckningar i %s (utanför refs/notes/)"
 
-#: builtin/notes.c:374 builtin/notes.c:429 builtin/notes.c:507
-#: builtin/notes.c:519 builtin/notes.c:596 builtin/notes.c:663
-#: builtin/notes.c:813 builtin/notes.c:965 builtin/notes.c:987
-#: builtin/prune-packed.c:25 builtin/receive-pack.c:2487 builtin/tag.c:591
-msgid "too many arguments"
-msgstr "för många argument"
-
 #: builtin/notes.c:387 builtin/notes.c:676
 #, c-format
 msgid "no note found for object %s."
@@ -18779,7 +19263,7 @@ msgstr ""
 "%s och checka in resultatet med \"git notes merge --commit\", eller avbryt "
 "sammanslagningen med \"git notes merge --abort\".\n"
 
-#: builtin/notes.c:899 builtin/tag.c:594
+#: builtin/notes.c:899 builtin/tag.c:595
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "Kunde inte slå upp \"%s\" som en giltig referens."
@@ -18797,7 +19281,7 @@ msgstr "försök att ta bort icke-existerande anteckningar är inte ett fel"
 msgid "read object names from the standard input"
 msgstr "läs objektnamn från standard in"
 
-#: builtin/notes.c:956 builtin/prune.c:144 builtin/worktree.c:147
+#: builtin/notes.c:956 builtin/prune.c:144 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr "ta inte bort, bara visa"
 
@@ -18813,7 +19297,7 @@ msgstr "anteckningar-ref"
 msgid "use notes from <notes-ref>"
 msgstr "använd anteckningar från <anteckningsref>"
 
-#: builtin/notes.c:1036 builtin/stash.c:1818
+#: builtin/notes.c:1036 builtin/stash.c:1802
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "okänt underkommando: %s"
@@ -18830,7 +19314,7 @@ msgid ""
 msgstr ""
 "git pack-objects [<flaggor>...] <basnamn> [< <reflista> | < <objektlista>]"
 
-#: builtin/pack-objects.c:572
+#: builtin/pack-objects.c:570
 #, c-format
 msgid ""
 "write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
@@ -18839,111 +19323,111 @@ msgstr ""
 "write_reuse_object: kunde inte hitta %s, förväntat på position %<PRIuMAX> i "
 "paketet %s"
 
-#: builtin/pack-objects.c:580
+#: builtin/pack-objects.c:578
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr "felaktig CRC för packat objekt %s"
 
-#: builtin/pack-objects.c:591
+#: builtin/pack-objects.c:589
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr "trasigt packat objekt för %s"
 
-#: builtin/pack-objects.c:722
+#: builtin/pack-objects.c:720
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr "rekursivt delta upptäcktes för objektet %s"
 
-#: builtin/pack-objects.c:941
+#: builtin/pack-objects.c:939
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr "ordnade %u objekt, förväntade %<PRIu32>"
 
-#: builtin/pack-objects.c:1036
+#: builtin/pack-objects.c:1034
 #, c-format
 msgid "expected object at offset %<PRIuMAX> in pack %s"
 msgstr "förväntade objekt på position %<PRIuMAX> i paketet %s"
 
-#: builtin/pack-objects.c:1160
+#: builtin/pack-objects.c:1158
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr ""
 "inaktiverar skrivning av bitkarta, paket delas på grund av pack.packSizeLimit"
 
-#: builtin/pack-objects.c:1173
+#: builtin/pack-objects.c:1171
 msgid "Writing objects"
 msgstr "Skriver objekt"
 
-#: builtin/pack-objects.c:1235 builtin/update-index.c:90
+#: builtin/pack-objects.c:1243 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "misslyckades ta status på %s"
 
-#: builtin/pack-objects.c:1268
+#: builtin/pack-objects.c:1276
 msgid "failed to write bitmap index"
 msgstr "misslyckade skriva bitkarteindex"
 
-#: builtin/pack-objects.c:1294
+#: builtin/pack-objects.c:1302
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "skrev %<PRIu32> objekt medan %<PRIu32> förväntades"
 
-#: builtin/pack-objects.c:1536
+#: builtin/pack-objects.c:1544
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr "inaktiverar skrivning av bitkarta då några objekt inte packas"
 
-#: builtin/pack-objects.c:1984
+#: builtin/pack-objects.c:1992
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "deltabasoffset utanför gränsen i pack för %s"
 
-#: builtin/pack-objects.c:1993
+#: builtin/pack-objects.c:2001
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "deltabasoffset utanför gränsvärden för %s"
 
-#: builtin/pack-objects.c:2274
+#: builtin/pack-objects.c:2282
 msgid "Counting objects"
 msgstr "Räknar objekt"
 
-#: builtin/pack-objects.c:2439
+#: builtin/pack-objects.c:2447
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "kunde inte tolka objekthuvud för %s"
 
-#: builtin/pack-objects.c:2509 builtin/pack-objects.c:2525
-#: builtin/pack-objects.c:2535
+#: builtin/pack-objects.c:2517 builtin/pack-objects.c:2533
+#: builtin/pack-objects.c:2543
 #, c-format
 msgid "object %s cannot be read"
 msgstr "objektet %s kunde inte läsas"
 
-#: builtin/pack-objects.c:2512 builtin/pack-objects.c:2539
+#: builtin/pack-objects.c:2520 builtin/pack-objects.c:2547
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr "objektet %s har inkonsistent objektlängd (%<PRIuMAX> mot %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2549
+#: builtin/pack-objects.c:2557
 msgid "suboptimal pack - out of memory"
 msgstr "icke-optimalt pack - minnet slut"
 
-#: builtin/pack-objects.c:2864
+#: builtin/pack-objects.c:2872
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Deltakomprimering använder upp till %d trådar"
 
-#: builtin/pack-objects.c:3003
+#: builtin/pack-objects.c:3011
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "kan inte packa objekt nåbara från taggen %s"
 
-#: builtin/pack-objects.c:3089
+#: builtin/pack-objects.c:3097
 msgid "Compressing objects"
 msgstr "Komprimerar objekt"
 
-#: builtin/pack-objects.c:3095
+#: builtin/pack-objects.c:3103
 msgid "inconsistency with delta count"
 msgstr "deltaräknaren är inkonsekvent"
 
-#: builtin/pack-objects.c:3174
+#: builtin/pack-objects.c:3182
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
@@ -18952,25 +19436,25 @@ msgstr ""
 "värdet på uploadpack.blobpackfileuri måste vara på formen '<objekt-hash> "
 "<paket-hash> <uri>' (fick '%s')"
 
-#: builtin/pack-objects.c:3177
+#: builtin/pack-objects.c:3185
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
 msgstr ""
 "objektet redan konfigurerat i et annat uploadpack.blobpackfileuri (fick '%s)"
 
-#: builtin/pack-objects.c:3212
+#: builtin/pack-objects.c:3220
 #, c-format
 msgid "could not get type of object %s in pack %s"
 msgstr "kunde inte hämta typ för objektet %s i paketet %s"
 
-#: builtin/pack-objects.c:3340 builtin/pack-objects.c:3351
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3348 builtin/pack-objects.c:3359
+#: builtin/pack-objects.c:3373
 #, c-format
 msgid "could not find pack '%s'"
 msgstr "kunde inte hitta paketet \"%s\""
 
-#: builtin/pack-objects.c:3408
+#: builtin/pack-objects.c:3416
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -18979,7 +19463,7 @@ msgstr ""
 "förväntade kant-objekt-id, fick skräp:\n"
 " %s"
 
-#: builtin/pack-objects.c:3414
+#: builtin/pack-objects.c:3422
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -18988,244 +19472,240 @@ msgstr ""
 "förväntade objekt-id, fick skräp:\n"
 " %s"
 
-#: builtin/pack-objects.c:3507
-msgid "invalid value for --missing"
-msgstr "ogiltigt värde för --missing"
-
-#: builtin/pack-objects.c:3532 builtin/pack-objects.c:3619
+#: builtin/pack-objects.c:3540 builtin/pack-objects.c:3627
 msgid "cannot open pack index"
 msgstr "kan inte öppna paketfilen"
 
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3549
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "lösa objekt på %s kunde inte underökas"
 
-#: builtin/pack-objects.c:3627
+#: builtin/pack-objects.c:3635
 msgid "unable to force loose object"
 msgstr "kan inte tvinga lösa objekt"
 
-#: builtin/pack-objects.c:3757
+#: builtin/pack-objects.c:3763
 #, c-format
 msgid "not a rev '%s'"
 msgstr "inte en referens \"%s\""
 
-#: builtin/pack-objects.c:3760 builtin/rev-parse.c:1061
+#: builtin/pack-objects.c:3766 builtin/rev-parse.c:1061
 #, c-format
 msgid "bad revision '%s'"
 msgstr "felaktig revision \"%s\""
 
-#: builtin/pack-objects.c:3788
+#: builtin/pack-objects.c:3794
 msgid "unable to add recent objects"
 msgstr "kan inte lägga till nya objekt"
 
-#: builtin/pack-objects.c:3841
+#: builtin/pack-objects.c:3847
 #, c-format
 msgid "unsupported index version %s"
 msgstr "indexversionen %s stöds ej"
 
-#: builtin/pack-objects.c:3845
+#: builtin/pack-objects.c:3851
 #, c-format
 msgid "bad index version '%s'"
 msgstr "felaktig indexversion \"%s\""
 
-#: builtin/pack-objects.c:3884
+#: builtin/pack-objects.c:3907
 msgid "<version>[,<offset>]"
 msgstr "<version>[,<offset>]"
 
-#: builtin/pack-objects.c:3885
+#: builtin/pack-objects.c:3908
 msgid "write the pack index file in the specified idx format version"
 msgstr "skriv paketindexfilen i angiven indexformatversion"
 
-#: builtin/pack-objects.c:3888
+#: builtin/pack-objects.c:3911
 msgid "maximum size of each output pack file"
 msgstr "maximal storlek på varje utdatapaketfil"
 
-#: builtin/pack-objects.c:3890
+#: builtin/pack-objects.c:3913
 msgid "ignore borrowed objects from alternate object store"
 msgstr "ignorera lånade objekt från supplerande objektlager"
 
-#: builtin/pack-objects.c:3892
+#: builtin/pack-objects.c:3915
 msgid "ignore packed objects"
 msgstr "ignorera packade objekt"
 
-#: builtin/pack-objects.c:3894
+#: builtin/pack-objects.c:3917
 msgid "limit pack window by objects"
 msgstr "begränsa paketfönster efter objekt"
 
-#: builtin/pack-objects.c:3896
+#: builtin/pack-objects.c:3919
 msgid "limit pack window by memory in addition to object limit"
 msgstr "begränsa paketfönster efter minne förutom objektgräns"
 
-#: builtin/pack-objects.c:3898
+#: builtin/pack-objects.c:3921
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr "maximal längd på deltakedja tillåten i slutligt paket"
 
-#: builtin/pack-objects.c:3900
+#: builtin/pack-objects.c:3923
 msgid "reuse existing deltas"
 msgstr "återanvänd befintliga delta"
 
-#: builtin/pack-objects.c:3902
+#: builtin/pack-objects.c:3925
 msgid "reuse existing objects"
 msgstr "återanvänd befintliga objekt"
 
-#: builtin/pack-objects.c:3904
+#: builtin/pack-objects.c:3927
 msgid "use OFS_DELTA objects"
 msgstr "använd OFS_DELTA-objekt"
 
-#: builtin/pack-objects.c:3906
+#: builtin/pack-objects.c:3929
 msgid "use threads when searching for best delta matches"
 msgstr "använd trådar vid sökning efter bästa deltaträffar"
 
-#: builtin/pack-objects.c:3908
+#: builtin/pack-objects.c:3931
 msgid "do not create an empty pack output"
 msgstr "försök inte skapa tom paketutdata"
 
-#: builtin/pack-objects.c:3910
+#: builtin/pack-objects.c:3933
 msgid "read revision arguments from standard input"
 msgstr "läs revisionsargument från standard in"
 
-#: builtin/pack-objects.c:3912
+#: builtin/pack-objects.c:3935
 msgid "limit the objects to those that are not yet packed"
 msgstr "begränsa objekt till dem som ännu inte packats"
 
-#: builtin/pack-objects.c:3915
+#: builtin/pack-objects.c:3938
 msgid "include objects reachable from any reference"
 msgstr "ta med objekt som kan nås från någon referens"
 
-#: builtin/pack-objects.c:3918
+#: builtin/pack-objects.c:3941
 msgid "include objects referred by reflog entries"
 msgstr "ta med objekt som refereras från referensloggposter"
 
-#: builtin/pack-objects.c:3921
+#: builtin/pack-objects.c:3944
 msgid "include objects referred to by the index"
 msgstr "ta med objekt som refereras från indexet"
 
-#: builtin/pack-objects.c:3924
+#: builtin/pack-objects.c:3947
 msgid "read packs from stdin"
 msgstr "läs paket från standard in"
 
-#: builtin/pack-objects.c:3926
+#: builtin/pack-objects.c:3949
 msgid "output pack to stdout"
 msgstr "skriv paket på standard ut"
 
-#: builtin/pack-objects.c:3928
+#: builtin/pack-objects.c:3951
 msgid "include tag objects that refer to objects to be packed"
 msgstr "ta med taggobjekt som refererar objekt som ska packas"
 
-#: builtin/pack-objects.c:3930
+#: builtin/pack-objects.c:3953
 msgid "keep unreachable objects"
 msgstr "behåll onåbara objekt"
 
-#: builtin/pack-objects.c:3932
+#: builtin/pack-objects.c:3955
 msgid "pack loose unreachable objects"
 msgstr "packa lösa onåbara objekt"
 
-#: builtin/pack-objects.c:3934
+#: builtin/pack-objects.c:3957
 msgid "unpack unreachable objects newer than <time>"
 msgstr "packa upp onåbara objekt nyare än <tid>"
 
-#: builtin/pack-objects.c:3937
+#: builtin/pack-objects.c:3960
 msgid "use the sparse reachability algorithm"
 msgstr "använd gles-nåbarhetsalgoritmen"
 
-#: builtin/pack-objects.c:3939
+#: builtin/pack-objects.c:3962
 msgid "create thin packs"
 msgstr "skapa tunna paket"
 
-#: builtin/pack-objects.c:3941
+#: builtin/pack-objects.c:3964
 msgid "create packs suitable for shallow fetches"
 msgstr "skapa packfiler lämpade för grunda hämtningar"
 
-#: builtin/pack-objects.c:3943
+#: builtin/pack-objects.c:3966
 msgid "ignore packs that have companion .keep file"
 msgstr "ignorera paket som har tillhörande .keep-fil"
 
-#: builtin/pack-objects.c:3945
+#: builtin/pack-objects.c:3968
 msgid "ignore this pack"
 msgstr "ignorera detta paket"
 
-#: builtin/pack-objects.c:3947
+#: builtin/pack-objects.c:3970
 msgid "pack compression level"
 msgstr "komprimeringsgrad för paket"
 
-#: builtin/pack-objects.c:3949
+#: builtin/pack-objects.c:3972
 msgid "do not hide commits by grafts"
 msgstr "göm inte incheckningar med ympningar (\"grafts\")"
 
-#: builtin/pack-objects.c:3951
+#: builtin/pack-objects.c:3974
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr "använd bitkartindex om tillgängligt för att räkna objekt snabbare"
 
-#: builtin/pack-objects.c:3953
+#: builtin/pack-objects.c:3976
 msgid "write a bitmap index together with the pack index"
 msgstr "använd bitkartindex tillsammans med packindexet"
 
-#: builtin/pack-objects.c:3957
+#: builtin/pack-objects.c:3980
 msgid "write a bitmap index if possible"
 msgstr "skriv bitkartindex om möjligt"
 
-#: builtin/pack-objects.c:3961
+#: builtin/pack-objects.c:3984
 msgid "handling for missing objects"
 msgstr "hantering av saknade objekt"
 
-#: builtin/pack-objects.c:3964
+#: builtin/pack-objects.c:3987
 msgid "do not pack objects in promisor packfiles"
 msgstr "packa inte objekt i kontraktspackfiler"
 
-#: builtin/pack-objects.c:3966
+#: builtin/pack-objects.c:3989
 msgid "respect islands during delta compression"
 msgstr "respektera öar under deltakomprimering"
 
-#: builtin/pack-objects.c:3968
+#: builtin/pack-objects.c:3991
 msgid "protocol"
 msgstr "protokoll"
 
-#: builtin/pack-objects.c:3969
+#: builtin/pack-objects.c:3992
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr ""
 "uteslut redan konfigurerade uploadpack.blobpackfileuri med detta protokoll"
 
-#: builtin/pack-objects.c:4002
+#: builtin/pack-objects.c:4027
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "deltakedjedjupet %d är för djupt, påtvingar %d"
 
-#: builtin/pack-objects.c:4007
+#: builtin/pack-objects.c:4032
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "pack.deltaCacheLimit är för högt, påtvingar %d"
 
-#: builtin/pack-objects.c:4063
+#: builtin/pack-objects.c:4088
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 "--max-pack-size kan inte användas för att bygga ett paket som ska överföras"
 
-#: builtin/pack-objects.c:4065
+#: builtin/pack-objects.c:4090
 msgid "minimum pack size limit is 1 MiB"
 msgstr "minsta packstorlek är 1 MiB"
 
-#: builtin/pack-objects.c:4070
+#: builtin/pack-objects.c:4095
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "--thin kan inte användas för att bygga ett indexerbart paket"
 
-#: builtin/pack-objects.c:4079
+#: builtin/pack-objects.c:4104
 msgid "cannot use --filter without --stdout"
 msgstr "kan inte använda --filter utan --stdout"
 
-#: builtin/pack-objects.c:4081
+#: builtin/pack-objects.c:4106
 msgid "cannot use --filter with --stdin-packs"
 msgstr "kan inte använda --filter med --stdin-packs"
 
-#: builtin/pack-objects.c:4085
+#: builtin/pack-objects.c:4110
 msgid "cannot use internal rev list with --stdin-packs"
 msgstr "kan inte använda intern revisionslista med --stdin-packs"
 
-#: builtin/pack-objects.c:4144
+#: builtin/pack-objects.c:4169
 msgid "Enumerating objects"
 msgstr "Räknar upp objekt"
 
-#: builtin/pack-objects.c:4180
+#: builtin/pack-objects.c:4210
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -19260,10 +19740,6 @@ msgstr "packa allt"
 msgid "prune loose refs (default)"
 msgstr "ta bort lösa referenser (standard)"
 
-#: builtin/prune-packed.c:6
-msgid "git prune-packed [-n | --dry-run] [-q | --quiet]"
-msgstr "git prune-packed [-n | --dry-run] [-q | --quiet]"
-
 #: builtin/prune.c:14
 msgid "git prune [-n] [-v] [--progress] [--expire <time>] [--] [<head>...]"
 msgstr "git prune [-n] [-v] [--progress] [--expire <tid>] [--] [<huvud>...]"
@@ -19284,11 +19760,6 @@ msgstr "begränsa vandring av objekt utanför kontraktspackfiler."
 msgid "cannot prune in a precious-objects repo"
 msgstr "kan inte rensa i ett \"precious-objekt\"-arkiv"
 
-#: builtin/pull.c:45 builtin/pull.c:47
-#, c-format
-msgid "Invalid value for %s: %s"
-msgstr "Felaktigt värde för %s: %s"
-
 #: builtin/pull.c:67
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
 msgstr "git pull [<flaggor>] [<arkiv> [<refspec>...]]"
@@ -19313,7 +19784,7 @@ msgstr "tillåt snabbspolning"
 msgid "control use of pre-merge-commit and commit-msg hooks"
 msgstr "styr användning av pre-merge-commit- och commit-msg-krokar"
 
-#: builtin/pull.c:171 parse-options.h:340
+#: builtin/pull.c:171 parse-options.h:371
 msgid "automatically stash/stash pop before and after"
 msgstr "utför automatiskt stash/stash pop före och efter"
 
@@ -19329,11 +19800,6 @@ msgstr "tvinga överskrivning av lokal gren"
 msgid "number of submodules pulled in parallel"
 msgstr "antal undermoduler som hämtas parallellt"
 
-#: builtin/pull.c:321
-#, c-format
-msgid "Invalid value for pull.ff: %s"
-msgstr "Felaktigt värde för pull.ff: %s"
-
 #: builtin/pull.c:449
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
@@ -19368,7 +19834,7 @@ msgstr ""
 "gren. Eftersom det inte är den fjärr som är konfigurerad som\n"
 "standard för aktuell gren måste du ange en gren på kommandoraden."
 
-#: builtin/pull.c:460 builtin/rebase.c:951
+#: builtin/pull.c:460 builtin/rebase.c:978
 msgid "You are not currently on a branch."
 msgstr "Du är inte på någon gren för närvarande."
 
@@ -19385,16 +19851,16 @@ msgid "See git-pull(1) for details."
 msgstr "Se git-pull(1) för detaljer."
 
 #: builtin/pull.c:467 builtin/pull.c:473 builtin/pull.c:482
-#: builtin/rebase.c:957
+#: builtin/rebase.c:984
 msgid "<remote>"
 msgstr "<fjärr>"
 
 #: builtin/pull.c:467 builtin/pull.c:482 builtin/pull.c:487
-#: contrib/scalar/scalar.c:375
+#: contrib/scalar/scalar.c:374
 msgid "<branch>"
 msgstr "<gren>"
 
-#: builtin/pull.c:475 builtin/rebase.c:949
+#: builtin/pull.c:475 builtin/rebase.c:976
 msgid "There is no tracking information for the current branch."
 msgstr "Det finns ingen spårningsinformation för aktuell gren."
 
@@ -19450,19 +19916,19 @@ msgstr ""
 "eller --ff-only på kommandoraden för att överstyra det konfigurerade\n"
 "förvalet vid körning.\n"
 
-#: builtin/pull.c:1046
+#: builtin/pull.c:1047
 msgid "Updating an unborn branch with changes added to the index."
 msgstr "Uppdaterar en ofödd gren med ändringar som lagts till i indexet."
 
-#: builtin/pull.c:1050
+#: builtin/pull.c:1051
 msgid "pull with rebase"
 msgstr "pull med ombasering"
 
-#: builtin/pull.c:1051
+#: builtin/pull.c:1052
 msgid "please commit or stash them."
 msgstr "checka in eller använd \"stash\" på dem."
 
-#: builtin/pull.c:1076
+#: builtin/pull.c:1077
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -19473,7 +19939,7 @@ msgstr ""
 "snabbspolar din arbetskatalog från\n"
 "incheckningen %s."
 
-#: builtin/pull.c:1082
+#: builtin/pull.c:1083
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -19490,23 +19956,23 @@ msgstr ""
 "$ git reset --hard\n"
 "för att återgå."
 
-#: builtin/pull.c:1097
+#: builtin/pull.c:1098
 msgid "Cannot merge multiple branches into empty head."
 msgstr "Kan inte slå ihop flera grenar i ett tomt huvud."
 
-#: builtin/pull.c:1102
+#: builtin/pull.c:1103
 msgid "Cannot rebase onto multiple branches."
 msgstr "Kan inte ombasera ovanpå flera grenar."
 
-#: builtin/pull.c:1104
+#: builtin/pull.c:1105
 msgid "Cannot fast-forward to multiple branches."
 msgstr "Kan inte snabbspola till flera grenar."
 
-#: builtin/pull.c:1119
+#: builtin/pull.c:1120
 msgid "Need to specify how to reconcile divergent branches."
 msgstr "Måste ange hur avvikande grenar skall förlikas."
 
-#: builtin/pull.c:1133
+#: builtin/pull.c:1134
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr "kan inte ombasera med lokalt lagrade ändringar i undermoful"
 
@@ -19682,7 +20148,7 @@ msgstr "Sänder till %s\n"
 msgid "failed to push some refs to '%s'"
 msgstr "misslyckades sända vissa referenser till \"%s\""
 
-#: builtin/push.c:544 builtin/submodule--helper.c:3259
+#: builtin/push.c:544 builtin/submodule--helper.c:3377
 msgid "repository"
 msgstr "arkiv"
 
@@ -19921,11 +20387,11 @@ msgstr "felsök unpack-trees"
 msgid "suppress feedback messages"
 msgstr "undertryck återkopplingsmeddelanden"
 
-#: builtin/read-tree.c:183
+#: builtin/read-tree.c:190
 msgid "You need to resolve your current index first"
 msgstr "Du måste lösa ditt befintliga index först"
 
-#: builtin/rebase.c:35
+#: builtin/rebase.c:36
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
 "[<upstream> [<branch>]]"
@@ -19933,54 +20399,50 @@ msgstr ""
 "git rebase [-i] [flaggor] [--exec <kmd>] [--onto <nybas> | --keep-base] "
 "[<uppström> [<gren>]]"
 
-#: builtin/rebase.c:37
+#: builtin/rebase.c:38
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]"
 msgstr ""
 "git rebase [-i] [flaggor] [--exec <kmd>] [--onto <nybas>] --root [<gren>]"
 
-#: builtin/rebase.c:39
-msgid "git rebase --continue | --abort | --skip | --edit-todo"
-msgstr "git rebase --continue | --abort | --skip | --edit-todo"
-
-#: builtin/rebase.c:230
+#: builtin/rebase.c:231
 #, c-format
 msgid "could not create temporary %s"
 msgstr "kunde inte skapa temporär %s"
 
-#: builtin/rebase.c:236
+#: builtin/rebase.c:237
 msgid "could not mark as interactive"
 msgstr "kunde inte markera som interaktiv"
 
-#: builtin/rebase.c:289
+#: builtin/rebase.c:290
 msgid "could not generate todo list"
 msgstr "Kunde inte skapa attgöra-lista"
 
-#: builtin/rebase.c:331
+#: builtin/rebase.c:332
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "en basincheckning måste anges med --upstream eller --onto"
 
-#: builtin/rebase.c:390
+#: builtin/rebase.c:391
 #, c-format
 msgid "%s requires the merge backend"
 msgstr "%s kräver \"merge\"-bakändan"
 
-#: builtin/rebase.c:432
+#: builtin/rebase.c:433
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "kunde inte hämta \"onto\": \"%s\""
 
-#: builtin/rebase.c:449
+#: builtin/rebase.c:450
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "ogiltigt orig-head: \"%s\""
 
-#: builtin/rebase.c:474
+#: builtin/rebase.c:475
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "ignorera ogiltigt allow_rerere_autoupdate: \"%s\""
 
-#: builtin/rebase.c:597
+#: builtin/rebase.c:600
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -19994,7 +20456,7 @@ msgstr ""
 "För att avbryta och återgå till där du var före ombaseringen, kör \"git "
 "rebase --abort\"."
 
-#: builtin/rebase.c:680
+#: builtin/rebase.c:685
 #, c-format
 msgid ""
 "\n"
@@ -20013,7 +20475,12 @@ msgstr ""
 "\n"
 "Därför kan inte git ombasera dessa."
 
-#: builtin/rebase.c:925
+#: builtin/rebase.c:836
+#, c-format
+msgid "could not switch to %s"
+msgstr "kunde inte växla till %s"
+
+#: builtin/rebase.c:952
 #, c-format
 msgid ""
 "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
@@ -20021,7 +20488,7 @@ msgid ""
 msgstr ""
 "okänd tom-typ \"%s\"; giltiga värden är \"drop\", \"keep\" och \"ask\"."
 
-#: builtin/rebase.c:943
+#: builtin/rebase.c:970
 #, c-format
 msgid ""
 "%s\n"
@@ -20038,7 +20505,7 @@ msgstr ""
 "    git rebase '<gren>'\n"
 "\n"
 
-#: builtin/rebase.c:959
+#: builtin/rebase.c:986
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -20051,180 +20518,180 @@ msgstr ""
 "    git branch --set-upstream-to=%s/<gren> %s\n"
 "\n"
 
-#: builtin/rebase.c:989
+#: builtin/rebase.c:1016
 msgid "exec commands cannot contain newlines"
 msgstr "exec-kommandon kan inte innehålla nyradstecken"
 
-#: builtin/rebase.c:993
+#: builtin/rebase.c:1020
 msgid "empty exec command"
 msgstr "tomt exec-kommando"
 
-#: builtin/rebase.c:1023
+#: builtin/rebase.c:1051
 msgid "rebase onto given branch instead of upstream"
 msgstr "ombasera mot given grenen istället för uppström"
 
-#: builtin/rebase.c:1025
+#: builtin/rebase.c:1053
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr "använd sammanslagningsbasen mellan uppströms och gren som aktuell bas"
 
-#: builtin/rebase.c:1027
+#: builtin/rebase.c:1055
 msgid "allow pre-rebase hook to run"
 msgstr "tillåt pre-rebase-krok att köra"
 
-#: builtin/rebase.c:1029
+#: builtin/rebase.c:1057
 msgid "be quiet. implies --no-stat"
 msgstr "var tyst. implicerar --no-stat"
 
-#: builtin/rebase.c:1032
+#: builtin/rebase.c:1060
 msgid "display a diffstat of what changed upstream"
 msgstr "vis diffstat för vad som ändrats uppströms"
 
-#: builtin/rebase.c:1035
+#: builtin/rebase.c:1063
 msgid "do not show diffstat of what changed upstream"
 msgstr "visa inte en diffstat för vad som ändrats uppströms"
 
-#: builtin/rebase.c:1038
+#: builtin/rebase.c:1066
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "lägg \"Signed-off-by:\"-släprad till varje incheckning"
 
-#: builtin/rebase.c:1041
+#: builtin/rebase.c:1069
 msgid "make committer date match author date"
 msgstr "sätt incheckningsdatum till författardatum"
 
-#: builtin/rebase.c:1043
+#: builtin/rebase.c:1071
 msgid "ignore author date and use current date"
 msgstr "ignorera författardatum och använd nuvarande"
 
-#: builtin/rebase.c:1045
+#: builtin/rebase.c:1073
 msgid "synonym of --reset-author-date"
 msgstr "synonym för --reset-author-date"
 
-#: builtin/rebase.c:1047 builtin/rebase.c:1051
+#: builtin/rebase.c:1075 builtin/rebase.c:1079
 msgid "passed to 'git apply'"
 msgstr "sänds till \"git apply\""
 
-#: builtin/rebase.c:1049
+#: builtin/rebase.c:1077
 msgid "ignore changes in whitespace"
 msgstr "ignorera ändringar i blanksteg"
 
-#: builtin/rebase.c:1053 builtin/rebase.c:1056
+#: builtin/rebase.c:1081 builtin/rebase.c:1084
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "utför cherry-pick på alla incheckningar, även om oändrad"
 
-#: builtin/rebase.c:1058
+#: builtin/rebase.c:1086
 msgid "continue"
 msgstr "fortsätt"
 
-#: builtin/rebase.c:1061
+#: builtin/rebase.c:1089
 msgid "skip current patch and continue"
 msgstr "hoppa över nuvarande patch och fortsätt"
 
-#: builtin/rebase.c:1063
+#: builtin/rebase.c:1091
 msgid "abort and check out the original branch"
 msgstr "avbryt och checka ut ursprungsgrenen"
 
-#: builtin/rebase.c:1066
+#: builtin/rebase.c:1094
 msgid "abort but keep HEAD where it is"
 msgstr "avbryt men behåll HEAD där det är"
 
-#: builtin/rebase.c:1067
+#: builtin/rebase.c:1095
 msgid "edit the todo list during an interactive rebase"
 msgstr "redigera attgöra-listan under interaktiv ombasering."
 
-#: builtin/rebase.c:1070
+#: builtin/rebase.c:1098
 msgid "show the patch file being applied or merged"
 msgstr "visa patchen som tillämpas eller slås samman"
 
-#: builtin/rebase.c:1073
+#: builtin/rebase.c:1101
 msgid "use apply strategies to rebase"
 msgstr "använd appliceringstrategier för ombasering"
 
-#: builtin/rebase.c:1077
+#: builtin/rebase.c:1105
 msgid "use merging strategies to rebase"
 msgstr "använd sammanslagningsstrategier för ombasering"
 
-#: builtin/rebase.c:1081
+#: builtin/rebase.c:1109
 msgid "let the user edit the list of commits to rebase"
 msgstr "låt användaren redigera listan över incheckningar att ombasera"
 
-#: builtin/rebase.c:1085
+#: builtin/rebase.c:1113
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr ""
 "(AVRÅDS) försök återskapa sammanslagningar istället för att ignorera dem"
 
-#: builtin/rebase.c:1090
+#: builtin/rebase.c:1118
 msgid "how to handle commits that become empty"
 msgstr "hur incheckningar som blir tomma ska hanteras"
 
-#: builtin/rebase.c:1093
+#: builtin/rebase.c:1121
 msgid "keep commits which start empty"
 msgstr "behåller incheckningar som är tomma från början"
 
-#: builtin/rebase.c:1097
+#: builtin/rebase.c:1125
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "flytta incheckningar som börjar med squash!/fixup! under -i"
 
-#: builtin/rebase.c:1104
+#: builtin/rebase.c:1132
 msgid "add exec lines after each commit of the editable list"
 msgstr "lägg till exec-rader efter varje incheckning i den redigerbara listan"
 
-#: builtin/rebase.c:1108
+#: builtin/rebase.c:1136
 msgid "allow rebasing commits with empty messages"
 msgstr "tillåt ombasering av incheckningar med tomt meddelande"
 
-#: builtin/rebase.c:1112
+#: builtin/rebase.c:1140
 msgid "try to rebase merges instead of skipping them"
 msgstr "försök ombasera sammanslagningar istället för att ignorera dem"
 
-#: builtin/rebase.c:1115
+#: builtin/rebase.c:1143
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "använd \"merge-base --fork-point\" för att förfina uppström"
 
-#: builtin/rebase.c:1117
+#: builtin/rebase.c:1145
 msgid "use the given merge strategy"
 msgstr "använd angiven sammanslagningsstrategi"
 
-#: builtin/rebase.c:1119 builtin/revert.c:115
+#: builtin/rebase.c:1147 builtin/revert.c:115
 msgid "option"
 msgstr "alternativ"
 
-#: builtin/rebase.c:1120
+#: builtin/rebase.c:1148
 msgid "pass the argument through to the merge strategy"
 msgstr "sänd flaggan till sammanslagningsstrategin"
 
-#: builtin/rebase.c:1123
+#: builtin/rebase.c:1151
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "ombasera alla nåbara incheckningar upp till roten/rötterna"
 
-#: builtin/rebase.c:1126
+#: builtin/rebase.c:1154
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "kör automatiskt alla \"exec\" som misslyckas på nytt"
 
-#: builtin/rebase.c:1128
+#: builtin/rebase.c:1156
 msgid "apply all changes, even those already present upstream"
 msgstr "applicera alla ändringar, även de som redan finns uppströms"
 
-#: builtin/rebase.c:1149
+#: builtin/rebase.c:1177
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "Det verkar som en \"git am\" körs. Kan inte ombasera."
 
-#: builtin/rebase.c:1180
+#: builtin/rebase.c:1208
 msgid "--preserve-merges was replaced by --rebase-merges"
 msgstr "--preserve-merges har ersatts av --rebase-merges"
 
-#: builtin/rebase.c:1202
+#: builtin/rebase.c:1230
 msgid "No rebase in progress?"
 msgstr "Ingen ombasering pågår?"
 
-#: builtin/rebase.c:1206
+#: builtin/rebase.c:1234
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr "Åtgärden --edit-todo kan endast användas under interaktiv ombasering."
 
-#: builtin/rebase.c:1229 t/helper/test-fast-rebase.c:122
+#: builtin/rebase.c:1257 t/helper/test-fast-rebase.c:122
 msgid "Cannot read HEAD"
 msgstr "Kan inte läsa HEAD"
 
-#: builtin/rebase.c:1241
+#: builtin/rebase.c:1269
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -20232,16 +20699,16 @@ msgstr ""
 "Du måste redigera alla sammanslagningskonflikter och\n"
 "därefter markera dem som lösta med git add"
 
-#: builtin/rebase.c:1260
+#: builtin/rebase.c:1287
 msgid "could not discard worktree changes"
 msgstr "kunde inte kasta ändringar i arbetskatalogen"
 
-#: builtin/rebase.c:1279
+#: builtin/rebase.c:1308
 #, c-format
 msgid "could not move back to %s"
 msgstr "kunde inte flytta tillbaka till %s"
 
-#: builtin/rebase.c:1325
+#: builtin/rebase.c:1354
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -20262,124 +20729,119 @@ msgstr ""
 "och kör programmet igen. Jag avslutar ifall du fortfarande har\n"
 "något av värde där.\n"
 
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1382
 msgid "switch `C' expects a numerical value"
 msgstr "flaggan \"C\" förväntar ett numeriskt värde"
 
-#: builtin/rebase.c:1395
+#: builtin/rebase.c:1424
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Okänt läge: %s"
 
-#: builtin/rebase.c:1434
+#: builtin/rebase.c:1463
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy kräver --merge eller --interactive"
 
-#: builtin/rebase.c:1463
+#: builtin/rebase.c:1492
 msgid "apply options and merge options cannot be used together"
 msgstr ""
 "appliceringsflaggor och sammanslagningsflaggor kan inte användas tillsammans"
 
-#: builtin/rebase.c:1476
+#: builtin/rebase.c:1505
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "Okänd rebase-bakända: %s"
 
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1534
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec kräver --exec eller --interactive"
 
-#: builtin/rebase.c:1536
+#: builtin/rebase.c:1565
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "felaktig uppström \"%s\""
 
-#: builtin/rebase.c:1542
+#: builtin/rebase.c:1571
 msgid "Could not create new root commit"
 msgstr "kunde inte skapa ny rotincheckning"
 
-#: builtin/rebase.c:1568
+#: builtin/rebase.c:1597
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr "\"%s\": behöver precis en sammanslagningsbas med gren"
 
-#: builtin/rebase.c:1571
+#: builtin/rebase.c:1600
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "\"%s\": behöver precis en sammanslagningsbas"
 
-#: builtin/rebase.c:1580
+#: builtin/rebase.c:1609
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "Pekar inte på en giltig incheckning: \"%s\""
 
-#: builtin/rebase.c:1607
+#: builtin/rebase.c:1636
 #, c-format
 msgid "no such branch/commit '%s'"
 msgstr "ingen sådan gren/incheckning: \"%s\""
 
-#: builtin/rebase.c:1618 builtin/submodule--helper.c:39
-#: builtin/submodule--helper.c:2659
+#: builtin/rebase.c:1647 builtin/submodule--helper.c:43
+#: builtin/submodule--helper.c:2477
 #, c-format
 msgid "No such ref: %s"
 msgstr "Ingen sådan referens: %s"
 
-#: builtin/rebase.c:1629
+#: builtin/rebase.c:1658
 msgid "Could not resolve HEAD to a revision"
 msgstr "Kunde inte bestämma HEAD:s incheckning"
 
-#: builtin/rebase.c:1650
+#: builtin/rebase.c:1679
 msgid "Please commit or stash them."
 msgstr "Checka in eller använd \"stash\" på dem."
 
-#: builtin/rebase.c:1686
-#, c-format
-msgid "could not switch to %s"
-msgstr "kunde inte växla till %s"
-
-#: builtin/rebase.c:1697
+#: builtin/rebase.c:1714
 msgid "HEAD is up to date."
 msgstr "HEAD är à jour."
 
-#: builtin/rebase.c:1699
+#: builtin/rebase.c:1716
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "Aktuell gren %s är à jour.\n"
 
-#: builtin/rebase.c:1707
+#: builtin/rebase.c:1724
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD är à jour, ombasering framtvingad."
 
-#: builtin/rebase.c:1709
+#: builtin/rebase.c:1726
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "Aktuell gren %s är à jour, ombasering framtvingad.\n"
 
-#: builtin/rebase.c:1717
+#: builtin/rebase.c:1734
 msgid "The pre-rebase hook refused to rebase."
 msgstr "Kroken pre-rebase vägrade ombaseringen."
 
-#: builtin/rebase.c:1724
+#: builtin/rebase.c:1741
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Ändringar till %s:\n"
 
-#: builtin/rebase.c:1727
+#: builtin/rebase.c:1744
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Ändringar från %s till %s:\n"
 
-#: builtin/rebase.c:1752
+#: builtin/rebase.c:1769
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "Först, spolar tillbaka huvudet för att spela av ditt arbete ovanpå det...\n"
 
-#: builtin/rebase.c:1761
+#: builtin/rebase.c:1781
 msgid "Could not detach HEAD"
 msgstr "Kunde inte koppla från HEAD"
 
-#: builtin/rebase.c:1770
+#: builtin/rebase.c:1790
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Snabbspolade %s till %s.\n"
@@ -20388,7 +20850,7 @@ msgstr "Snabbspolade %s till %s.\n"
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack <git-katalog>"
 
-#: builtin/receive-pack.c:1275
+#: builtin/receive-pack.c:1263
 msgid ""
 "By default, updating the current branch in a non-bare repository\n"
 "is denied, because it will make the index and work tree inconsistent\n"
@@ -20418,7 +20880,7 @@ msgstr ""
 "För att undvika detta meddelande och fortfarande behålla det\n"
 "normala beteendet, sätt \"receive.denyCurrentBranch\" till \"refuse\"."
 
-#: builtin/receive-pack.c:1295
+#: builtin/receive-pack.c:1283
 msgid ""
 "By default, deleting the current branch is denied, because the next\n"
 "'git clone' won't result in any file checked out, causing confusion.\n"
@@ -20439,79 +20901,111 @@ msgstr ""
 "\n"
 "För att undvika detta meddelande kan du sätta det till \"refuse\"."
 
-#: builtin/receive-pack.c:2474
+#: builtin/receive-pack.c:2476
 msgid "quiet"
 msgstr "tyst"
 
-#: builtin/receive-pack.c:2489
+#: builtin/receive-pack.c:2491
 msgid "you must specify a directory"
 msgstr "du måste ange en katalog"
 
-#: builtin/reflog.c:17
+#: builtin/reflog.c:9
+msgid "git reflog [show] [<log-options>] [<ref>]"
+msgstr "git reflog [show] [<log-flaggor>] [<ref>]"
+
+#: builtin/reflog.c:12
 msgid ""
-"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<refs>..."
+"git reflog expire [--expire=<time>] [--expire-unreachable=<time>]\n"
+"                  [--rewrite] [--updateref] [--stale-fix]\n"
+"                  [--dry-run | -n] [--verbose] [--all [--single-worktree] | "
+"<refs>...]"
 msgstr ""
-"git reflog expire [--expire=<tid>] [--expire-unreachable=<tid>] [--rewrite] "
-"[--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<referenser>..."
+"git reflog expire [--expire=<time>] [--expire-unreachable=<time>]\n"
+"                  [--rewrite] [--updateref] [--stale-fix]\n"
+"                  [--dry-run | -n] [--verbose] [--all [--single-worktree] | "
+"<referenser>...]"
 
-#: builtin/reflog.c:22
+#: builtin/reflog.c:17
 msgid ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] "
-"<refs>..."
+"git reflog delete [--rewrite] [--updateref]\n"
+"                  [--dry-run | -n] [--verbose] <ref>@{<specifier>}..."
 msgstr ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] "
-"<referenser>..."
+"git reflog delete [--rewrite] [--updateref]\n"
+"                  [--dry-run | -n] [--verbose] <ref>@{<specificering>}..."
 
-#: builtin/reflog.c:25
+#: builtin/reflog.c:21
 msgid "git reflog exists <ref>"
 msgstr "git reflog exists <referens>"
 
-#: builtin/reflog.c:585 builtin/reflog.c:590
+#: builtin/reflog.c:197 builtin/reflog.c:211
 #, c-format
-msgid "'%s' is not a valid timestamp"
-msgstr "\"%s\" är inte en giltig tidsstämpel"
+msgid "invalid timestamp '%s' given to '--%s'"
+msgstr "ogiltig tidsstämpel \"%s\" given i \"--%s\""
+
+#: builtin/reflog.c:240 builtin/reflog.c:359
+msgid "do not actually prune any entries"
+msgstr "rensa faktiskt inte några poster"
+
+#: builtin/reflog.c:243 builtin/reflog.c:362
+msgid ""
+"rewrite the old SHA1 with the new SHA1 of the entry that now precedes it"
+msgstr "skriv om gammal SHA1 med ny SHA1 i posten som nu föregår den"
+
+#: builtin/reflog.c:246 builtin/reflog.c:365
+msgid "update the reference to the value of the top reflog entry"
+msgstr "uppdatera referensen till värdet i översta referensloggposten"
+
+#: builtin/reflog.c:248 builtin/reflog.c:367
+msgid "print extra information on screen"
+msgstr "visa extra information på skärm"
+
+#: builtin/reflog.c:249 builtin/reflog.c:253
+msgid "timestamp"
+msgstr "tidsstämpel"
+
+#: builtin/reflog.c:250
+msgid "prune entries older than the specified time"
+msgstr "rensa poster äldre än angiven tid"
+
+#: builtin/reflog.c:254
+msgid ""
+"prune entries older than <time> that are not reachable from the current tip "
+"of the branch"
+msgstr ""
+"rensa poster äldre än <tid> som inte kan nås från nuvarande ände av grenen"
+
+#: builtin/reflog.c:258
+msgid "prune any reflog entries that point to broken commits"
+msgstr "rensa alla referensloggposter som pekar på trasiga incheckningar"
+
+#: builtin/reflog.c:259
+msgid "process the reflogs of all references"
+msgstr "hantera referensloggar för alla referenser"
 
-#: builtin/reflog.c:631
+#: builtin/reflog.c:261
+msgid "limits processing to reflogs from the current worktree only"
+msgstr "begränsar hantering av referensloggar till endst aktuell arbetskatalog"
+
+#: builtin/reflog.c:294
 #, c-format
 msgid "Marking reachable objects..."
 msgstr "Markerar nåbara objekt..."
 
-#: builtin/reflog.c:675
+#: builtin/reflog.c:338
 #, c-format
 msgid "%s points nowhere!"
 msgstr "%s pekar ingenstans!"
 
-#: builtin/reflog.c:731
+#: builtin/reflog.c:374
 msgid "no reflog specified to delete"
 msgstr "ingen referenslogg att ta bort angavs"
 
-#: builtin/reflog.c:742
-#, c-format
-msgid "not a reflog: %s"
-msgstr "inte en referenslogg: %s"
-
-#: builtin/reflog.c:747
-#, c-format
-msgid "no reflog for '%s'"
-msgstr "ingen referenslogg för \"%s\""
-
-#: builtin/reflog.c:794
+#: builtin/reflog.c:396
 #, c-format
 msgid "invalid ref format: %s"
 msgstr "felaktigt referensformat: %s"
 
-#: builtin/reflog.c:803
-msgid "git reflog [ show | expire | delete | exists ]"
-msgstr "git reflog [ show | expire | delete | exists ]"
-
-#: builtin/remote.c:17
-msgid "git remote [-v | --verbose]"
-msgstr "git remote [-v | --verbose]"
-
-#: builtin/remote.c:18
+#: builtin/remote.c:19
 msgid ""
 "git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--"
 "mirror=<fetch|push>] <name> <url>"
@@ -20519,87 +21013,87 @@ msgstr ""
 "git remote add [-t <gren>] [-m <master>] [-f] [--tags | --no-tags] [--"
 "mirror=<fetch|push>] <namn> <url>"
 
-#: builtin/remote.c:19 builtin/remote.c:39
-msgid "git remote rename <old> <new>"
-msgstr "git remote rename <gammal> <ny>"
+#: builtin/remote.c:20 builtin/remote.c:40
+msgid "git remote rename [--[no-]progress] <old> <new>"
+msgstr "git remote rename [--[no-]progress] <gammal> <ny>"
 
-#: builtin/remote.c:20 builtin/remote.c:44
+#: builtin/remote.c:21 builtin/remote.c:45
 msgid "git remote remove <name>"
 msgstr "git remote remove <namn>"
 
-#: builtin/remote.c:21 builtin/remote.c:49
+#: builtin/remote.c:22 builtin/remote.c:50
 msgid "git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"
 msgstr "git remote set-head <namn> (-a | --auto | -d | --delete | <gren>)"
 
-#: builtin/remote.c:22
+#: builtin/remote.c:23
 msgid "git remote [-v | --verbose] show [-n] <name>"
 msgstr "git remote [-v | --verbose] show [-n] <namn>"
 
-#: builtin/remote.c:23
+#: builtin/remote.c:24
 msgid "git remote prune [-n | --dry-run] <name>"
 msgstr "git remote prune [-n | --dry-run] <namn>"
 
-#: builtin/remote.c:24
+#: builtin/remote.c:25
 msgid ""
 "git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
 msgstr ""
 "git remote [-v | --verbose] update [-p | --prune] [(<grupp> | <fjärr>)...]"
 
-#: builtin/remote.c:25
+#: builtin/remote.c:26
 msgid "git remote set-branches [--add] <name> <branch>..."
 msgstr "git remote set-branches [--add] <namn> <gren>..."
 
-#: builtin/remote.c:26 builtin/remote.c:75
+#: builtin/remote.c:27 builtin/remote.c:76
 msgid "git remote get-url [--push] [--all] <name>"
 msgstr "git remote get-url [--push] [--all] <namn>"
 
-#: builtin/remote.c:27 builtin/remote.c:80
+#: builtin/remote.c:28 builtin/remote.c:81
 msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]"
 msgstr "git remote set-url [--push] <namn> <nyurl> [<gammalurl>]"
 
-#: builtin/remote.c:28 builtin/remote.c:81
+#: builtin/remote.c:29 builtin/remote.c:82
 msgid "git remote set-url --add <name> <newurl>"
 msgstr "git remote set-url --add <namn> <nyurl>"
 
-#: builtin/remote.c:29 builtin/remote.c:82
+#: builtin/remote.c:30 builtin/remote.c:83
 msgid "git remote set-url --delete <name> <url>"
 msgstr "git remote set-url --delete <namn> <url>"
 
-#: builtin/remote.c:34
+#: builtin/remote.c:35
 msgid "git remote add [<options>] <name> <url>"
 msgstr "git remote add [<flaggor>] <namn> <url>"
 
-#: builtin/remote.c:54
+#: builtin/remote.c:55
 msgid "git remote set-branches <name> <branch>..."
 msgstr "git remote set-branches <namn> <gren>..."
 
-#: builtin/remote.c:55
+#: builtin/remote.c:56
 msgid "git remote set-branches --add <name> <branch>..."
 msgstr "git remote set-branches --add <namn> <gren>..."
 
-#: builtin/remote.c:60
+#: builtin/remote.c:61
 msgid "git remote show [<options>] <name>"
 msgstr "git remote show [<flaggor>] <namn>"
 
-#: builtin/remote.c:65
+#: builtin/remote.c:66
 msgid "git remote prune [<options>] <name>"
 msgstr "git remote prune [<flaggor>] <namn>"
 
-#: builtin/remote.c:70
+#: builtin/remote.c:71
 msgid "git remote update [<options>] [<group> | <remote>]..."
 msgstr "git remote update [<flaggor>] [<grupp> | <fjärr>]..."
 
-#: builtin/remote.c:99
+#: builtin/remote.c:100
 #, c-format
 msgid "Updating %s"
 msgstr "Uppdaterar %s"
 
-#: builtin/remote.c:101
+#: builtin/remote.c:102
 #, c-format
 msgid "Could not fetch %s"
 msgstr "Kunde inte hämta %s"
 
-#: builtin/remote.c:131
+#: builtin/remote.c:132
 msgid ""
 "--mirror is dangerous and deprecated; please\n"
 "\t use --mirror=fetch or --mirror=push instead"
@@ -20607,77 +21101,77 @@ msgstr ""
 "--mirror är farlig och föråldrad; använd\n"
 "\t --mirror=fetch eller --mirror=push istället"
 
-#: builtin/remote.c:148
+#: builtin/remote.c:149
 #, c-format
 msgid "unknown mirror argument: %s"
 msgstr "okänt argument till mirror: %s"
 
-#: builtin/remote.c:164
+#: builtin/remote.c:165
 msgid "fetch the remote branches"
 msgstr "hämta fjärrgrenarna"
 
-#: builtin/remote.c:166
+#: builtin/remote.c:167
 msgid "import all tags and associated objects when fetching"
 msgstr "importera alla taggar och associerade objekt vid hämtning"
 
-#: builtin/remote.c:169
+#: builtin/remote.c:170
 msgid "or do not fetch any tag at all (--no-tags)"
 msgstr "eller hämta inte några taggar alls (--no-tags)"
 
-#: builtin/remote.c:171
+#: builtin/remote.c:172
 msgid "branch(es) to track"
 msgstr "gren(ar) att spåra"
 
-#: builtin/remote.c:172
+#: builtin/remote.c:173
 msgid "master branch"
 msgstr "huvudgren"
 
-#: builtin/remote.c:174
+#: builtin/remote.c:175
 msgid "set up remote as a mirror to push to or fetch from"
 msgstr "ställ in arkiv som spegel att sända eller ta emot från"
 
-#: builtin/remote.c:186
+#: builtin/remote.c:187
 msgid "specifying a master branch makes no sense with --mirror"
 msgstr "att ange en master-gren ger ingen mening med --mirror"
 
-#: builtin/remote.c:188
+#: builtin/remote.c:189
 msgid "specifying branches to track makes sense only with fetch mirrors"
 msgstr "att ange grenar att spåra ger mening bara med hämtningsspeglar"
 
-#: builtin/remote.c:195 builtin/remote.c:705
+#: builtin/remote.c:196 builtin/remote.c:716
 #, c-format
 msgid "remote %s already exists."
 msgstr "fjärrarkivet %s finns redan."
 
-#: builtin/remote.c:240
+#: builtin/remote.c:241
 #, c-format
 msgid "Could not setup master '%s'"
 msgstr "Kunde inte skapa master \"%s\""
 
-#: builtin/remote.c:322
+#: builtin/remote.c:323
 #, c-format
 msgid "unhandled branch.%s.rebase=%s; assuming 'true'"
 msgstr "ohanterad branch.%s.rebase=%s; antar \"true\""
 
-#: builtin/remote.c:366
+#: builtin/remote.c:367
 #, c-format
 msgid "Could not get fetch map for refspec %s"
 msgstr "Kunde inte hämta mappning för referensspecifikation %s"
 
-#: builtin/remote.c:460 builtin/remote.c:468
+#: builtin/remote.c:461 builtin/remote.c:469
 msgid "(matching)"
 msgstr "(träffande)"
 
-#: builtin/remote.c:472
+#: builtin/remote.c:473
 msgid "(delete)"
 msgstr "(ta bort)"
 
-#: builtin/remote.c:660
+#: builtin/remote.c:664
 #, c-format
 msgid "could not set '%s'"
 msgstr "kunde inte ställa in \"%s\""
 
-#: builtin/remote.c:665
+#: builtin/remote.c:669
 #, c-format
 msgid ""
 "The %s configuration remote.pushDefault in:\n"
@@ -20688,17 +21182,17 @@ msgstr ""
 "\t%s:%d\n"
 "anger nu den icke-existerande fjärren \"%s\""
 
-#: builtin/remote.c:696 builtin/remote.c:841 builtin/remote.c:948
+#: builtin/remote.c:707 builtin/remote.c:866 builtin/remote.c:973
 #, c-format
 msgid "No such remote: '%s'"
 msgstr "Ingen sådan fjärr: \"%s\""
 
-#: builtin/remote.c:715
+#: builtin/remote.c:726
 #, c-format
 msgid "Could not rename config section '%s' to '%s'"
 msgstr "Kunde inte byta namn på konfigurationssektionen \"%s\" till \"%s\""
 
-#: builtin/remote.c:735
+#: builtin/remote.c:746
 #, c-format
 msgid ""
 "Not updating non-default fetch refspec\n"
@@ -20709,17 +21203,21 @@ msgstr ""
 "\t%s\n"
 "\tUppdatera konfigurationen manuellt om nödvändigt."
 
-#: builtin/remote.c:775
+#: builtin/remote.c:783
+msgid "Renaming remote references"
+msgstr "Byter namn på fjärreferenser"
+
+#: builtin/remote.c:794
 #, c-format
 msgid "deleting '%s' failed"
 msgstr "misslyckades ta bort \"%s\""
 
-#: builtin/remote.c:809
+#: builtin/remote.c:832
 #, c-format
 msgid "creating '%s' failed"
 msgstr "misslyckades skapa \"%s\""
 
-#: builtin/remote.c:887
+#: builtin/remote.c:912
 msgid ""
 "Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
 "to delete it, use:"
@@ -20733,118 +21231,118 @@ msgstr[1] ""
 "Observera: Några grenar utanför hierarkin refs/remotes/ togs inte bort;\n"
 "för att ta bort dem, använd:"
 
-#: builtin/remote.c:901
+#: builtin/remote.c:926
 #, c-format
 msgid "Could not remove config section '%s'"
 msgstr "Kunde inte ta bort konfigurationssektionen \"%s\""
 
-#: builtin/remote.c:1009
+#: builtin/remote.c:1034
 #, c-format
 msgid " new (next fetch will store in remotes/%s)"
 msgstr " ny (nästa hämtning sparar i remotes/%s)"
 
-#: builtin/remote.c:1012
+#: builtin/remote.c:1037
 msgid " tracked"
 msgstr " spårad"
 
-#: builtin/remote.c:1014
+#: builtin/remote.c:1039
 msgid " stale (use 'git remote prune' to remove)"
 msgstr " förlegad (använd \"git remote prune\" för att ta bort)"
 
-#: builtin/remote.c:1016
+#: builtin/remote.c:1041
 msgid " ???"
 msgstr " ???"
 
-#: builtin/remote.c:1057
+#: builtin/remote.c:1082
 #, c-format
 msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
 msgstr "ogiltig branch.%s.merge; kan inte ombasera över > 1 gren"
 
-#: builtin/remote.c:1066
+#: builtin/remote.c:1091
 #, c-format
 msgid "rebases interactively onto remote %s"
 msgstr "ombaseras interaktivt på fjärren %s"
 
-#: builtin/remote.c:1068
+#: builtin/remote.c:1093
 #, c-format
 msgid "rebases interactively (with merges) onto remote %s"
 msgstr "ombaseras interaktivt (med sammanslagningar) på fjärren %s"
 
-#: builtin/remote.c:1071
+#: builtin/remote.c:1096
 #, c-format
 msgid "rebases onto remote %s"
 msgstr "ombaseras på fjärren %s"
 
-#: builtin/remote.c:1075
+#: builtin/remote.c:1100
 #, c-format
 msgid " merges with remote %s"
 msgstr " sammanslås med fjärren %s"
 
-#: builtin/remote.c:1078
+#: builtin/remote.c:1103
 #, c-format
 msgid "merges with remote %s"
 msgstr "sammanslås med fjärren %s"
 
-#: builtin/remote.c:1081
+#: builtin/remote.c:1106
 #, c-format
 msgid "%-*s    and with remote %s\n"
 msgstr "%-*s    och med fjärren %s\n"
 
-#: builtin/remote.c:1124
+#: builtin/remote.c:1149
 msgid "create"
 msgstr "skapa"
 
-#: builtin/remote.c:1127
+#: builtin/remote.c:1152
 msgid "delete"
 msgstr "ta bort"
 
-#: builtin/remote.c:1131
+#: builtin/remote.c:1156
 msgid "up to date"
 msgstr "àjour"
 
-#: builtin/remote.c:1134
+#: builtin/remote.c:1159
 msgid "fast-forwardable"
 msgstr "kan snabbspolas"
 
-#: builtin/remote.c:1137
+#: builtin/remote.c:1162
 msgid "local out of date"
 msgstr "lokal föråldrad"
 
-#: builtin/remote.c:1144
+#: builtin/remote.c:1169
 #, c-format
 msgid "    %-*s forces to %-*s (%s)"
 msgstr "    %-*s tvingar till %-*s (%s)"
 
-#: builtin/remote.c:1147
+#: builtin/remote.c:1172
 #, c-format
 msgid "    %-*s pushes to %-*s (%s)"
 msgstr "    %-*s sänder till %-*s (%s)"
 
-#: builtin/remote.c:1151
+#: builtin/remote.c:1176
 #, c-format
 msgid "    %-*s forces to %s"
 msgstr "    %-*s tvingar till %s"
 
-#: builtin/remote.c:1154
+#: builtin/remote.c:1179
 #, c-format
 msgid "    %-*s pushes to %s"
 msgstr "    %-*s sänder till %s"
 
-#: builtin/remote.c:1222
+#: builtin/remote.c:1247
 msgid "do not query remotes"
 msgstr "fråga inte fjärrar"
 
-#: builtin/remote.c:1243
+#: builtin/remote.c:1268
 #, c-format
 msgid "* remote %s"
 msgstr "* fjärr %s"
 
-#: builtin/remote.c:1244
+#: builtin/remote.c:1269
 #, c-format
 msgid "  Fetch URL: %s"
 msgstr "  Hämt-URL: %s"
 
-#: builtin/remote.c:1245 builtin/remote.c:1261 builtin/remote.c:1398
+#: builtin/remote.c:1270 builtin/remote.c:1286 builtin/remote.c:1423
 msgid "(no URL)"
 msgstr "(ingen URL)"
 
@@ -20852,188 +21350,188 @@ msgstr "(ingen URL)"
 #. with the one in " Fetch URL: %s"
 #. translation.
 #.
-#: builtin/remote.c:1259 builtin/remote.c:1261
+#: builtin/remote.c:1284 builtin/remote.c:1286
 #, c-format
 msgid "  Push  URL: %s"
 msgstr "  Sänd-URL: %s"
 
-#: builtin/remote.c:1263 builtin/remote.c:1265 builtin/remote.c:1267
+#: builtin/remote.c:1288 builtin/remote.c:1290 builtin/remote.c:1292
 #, c-format
 msgid "  HEAD branch: %s"
 msgstr "  HEAD-gren: %s"
 
-#: builtin/remote.c:1263
+#: builtin/remote.c:1288
 msgid "(not queried)"
 msgstr "(inte förfrågad)"
 
-#: builtin/remote.c:1265
+#: builtin/remote.c:1290
 msgid "(unknown)"
 msgstr "(okänd)"
 
-#: builtin/remote.c:1269
+#: builtin/remote.c:1294
 #, c-format
 msgid ""
 "  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
 msgstr "  HEAD-gren (HEAD på fjärr är tvetydig, kan vara en av följande):\n"
 
-#: builtin/remote.c:1281
+#: builtin/remote.c:1306
 #, c-format
 msgid "  Remote branch:%s"
 msgid_plural "  Remote branches:%s"
 msgstr[0] "  Fjärrgren:%s"
 msgstr[1] "  Fjärrgrenar:%s"
 
-#: builtin/remote.c:1284 builtin/remote.c:1310
+#: builtin/remote.c:1309 builtin/remote.c:1335
 msgid " (status not queried)"
 msgstr " (status inte förfrågad)"
 
-#: builtin/remote.c:1293
+#: builtin/remote.c:1318
 msgid "  Local branch configured for 'git pull':"
 msgid_plural "  Local branches configured for 'git pull':"
 msgstr[0] "  Lokal gren konfigurerad för \"git pull\":"
 msgstr[1] "  Lokala grenar konfigurerade för \"git pull\":"
 
-#: builtin/remote.c:1301
+#: builtin/remote.c:1326
 msgid "  Local refs will be mirrored by 'git push'"
 msgstr "  Lokala referenser speglas av \"git push\""
 
-#: builtin/remote.c:1307
+#: builtin/remote.c:1332
 #, c-format
 msgid "  Local ref configured for 'git push'%s:"
 msgid_plural "  Local refs configured for 'git push'%s:"
 msgstr[0] "  Lokal referens konfigurerad för \"git push\"%s:"
 msgstr[1] "  Lokala referenser konfigurerade för \"git push\"%s:"
 
-#: builtin/remote.c:1328
+#: builtin/remote.c:1353
 msgid "set refs/remotes/<name>/HEAD according to remote"
 msgstr "sätt refs/remotes/<namn>/HEAD enligt fjärren"
 
-#: builtin/remote.c:1330
+#: builtin/remote.c:1355
 msgid "delete refs/remotes/<name>/HEAD"
 msgstr "ta bort refs/remotes/<namn>/HEAD"
 
-#: builtin/remote.c:1344
+#: builtin/remote.c:1369
 msgid "Cannot determine remote HEAD"
 msgstr "Kan inte bestämma HEAD på fjärren"
 
-#: builtin/remote.c:1346
+#: builtin/remote.c:1371
 msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
 msgstr "Flera HEAD-grenar på fjärren. Välj en explicit med:"
 
-#: builtin/remote.c:1356
+#: builtin/remote.c:1381
 #, c-format
 msgid "Could not delete %s"
 msgstr "Kunde inte ta bort %s"
 
-#: builtin/remote.c:1364
+#: builtin/remote.c:1389
 #, c-format
 msgid "Not a valid ref: %s"
 msgstr "Inte en giltig referens: %s"
 
-#: builtin/remote.c:1366
+#: builtin/remote.c:1391
 #, c-format
 msgid "Could not setup %s"
 msgstr "Kunde inte ställa in %s"
 
-#: builtin/remote.c:1384
+#: builtin/remote.c:1409
 #, c-format
 msgid " %s will become dangling!"
 msgstr " %s kommer bli dinglande!"
 
-#: builtin/remote.c:1385
+#: builtin/remote.c:1410
 #, c-format
 msgid " %s has become dangling!"
 msgstr " %s har blivit dinglande!"
 
-#: builtin/remote.c:1394
+#: builtin/remote.c:1419
 #, c-format
 msgid "Pruning %s"
 msgstr "Rensar %s"
 
-#: builtin/remote.c:1395
+#: builtin/remote.c:1420
 #, c-format
 msgid "URL: %s"
 msgstr "URL: %s"
 
-#: builtin/remote.c:1411
+#: builtin/remote.c:1436
 #, c-format
 msgid " * [would prune] %s"
 msgstr " * [skulle rensa] %s"
 
-#: builtin/remote.c:1414
+#: builtin/remote.c:1439
 #, c-format
 msgid " * [pruned] %s"
 msgstr " * [rensad] %s"
 
-#: builtin/remote.c:1459
+#: builtin/remote.c:1484
 msgid "prune remotes after fetching"
 msgstr "rensa fjärrar efter hämtning"
 
-#: builtin/remote.c:1523 builtin/remote.c:1579 builtin/remote.c:1649
+#: builtin/remote.c:1548 builtin/remote.c:1604 builtin/remote.c:1674
 #, c-format
 msgid "No such remote '%s'"
 msgstr "Ingen sådan fjärr \"%s\""
 
-#: builtin/remote.c:1541
+#: builtin/remote.c:1566
 msgid "add branch"
 msgstr "lägg till gren"
 
-#: builtin/remote.c:1548
+#: builtin/remote.c:1573
 msgid "no remote specified"
 msgstr "ingen fjärr angavs"
 
-#: builtin/remote.c:1565
+#: builtin/remote.c:1590
 msgid "query push URLs rather than fetch URLs"
 msgstr "fråga sänd-URL:er istället för hämta-URL:er"
 
-#: builtin/remote.c:1567
+#: builtin/remote.c:1592
 msgid "return all URLs"
 msgstr "returnera alla URL:er"
 
-#: builtin/remote.c:1597
+#: builtin/remote.c:1622
 #, c-format
 msgid "no URLs configured for remote '%s'"
 msgstr "ingen URL:er angivna för fjärren \"%s\""
 
-#: builtin/remote.c:1623
+#: builtin/remote.c:1648
 msgid "manipulate push URLs"
 msgstr "manipulera URL:ar för sändning"
 
-#: builtin/remote.c:1625
+#: builtin/remote.c:1650
 msgid "add URL"
 msgstr "lägg till URL"
 
-#: builtin/remote.c:1627
+#: builtin/remote.c:1652
 msgid "delete URLs"
 msgstr "ta bort URL:ar"
 
-#: builtin/remote.c:1634
+#: builtin/remote.c:1659
 msgid "--add --delete doesn't make sense"
 msgstr "--add --delete ger ingen mening"
 
-#: builtin/remote.c:1675
+#: builtin/remote.c:1700
 #, c-format
 msgid "Invalid old URL pattern: %s"
 msgstr "Felaktig gammalt URL-mönster: %s"
 
-#: builtin/remote.c:1683
+#: builtin/remote.c:1708
 #, c-format
 msgid "No such URL found: %s"
 msgstr "Ingen sådan URL hittades: %s"
 
-#: builtin/remote.c:1685
+#: builtin/remote.c:1710
 msgid "Will not delete all non-push URLs"
 msgstr "Kommer inte ta bort alla icke-sänd-URL:er"
 
-#: builtin/remote.c:1702
+#: builtin/remote.c:1727
 msgid "be verbose; must be placed before a subcommand"
 msgstr "var pratsam; måste skrivas före ett underkommando"
 
-#: builtin/repack.c:28
+#: builtin/repack.c:29
 msgid "git repack [<options>]"
 msgstr "git repack [<flaggor>]"
 
-#: builtin/repack.c:33
+#: builtin/repack.c:34
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -21042,145 +21540,145 @@ msgstr ""
 "Använd --no-write-bitmap-index eller inaktivera inställningen\n"
 "pack.writebitmaps"
 
-#: builtin/repack.c:201
+#: builtin/repack.c:206
 msgid "could not start pack-objects to repack promisor objects"
 msgstr "kunde inte starta pack-objects för att packa om kontraktsobjekt"
 
-#: builtin/repack.c:275 builtin/repack.c:820
+#: builtin/repack.c:280 builtin/repack.c:824
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 "repack: Förväntar kompletta hex-objekt-id-rader endast från pack-objects."
 
-#: builtin/repack.c:299
+#: builtin/repack.c:304
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr "kunde inte avsluta pack-objects för att packa om kontraktsobjekt"
 
-#: builtin/repack.c:314
+#: builtin/repack.c:319
 #, c-format
 msgid "cannot open index for %s"
 msgstr "kunde inte öppna indexet för %s"
 
-#: builtin/repack.c:373
+#: builtin/repack.c:378
 #, c-format
 msgid "pack %s too large to consider in geometric progression"
 msgstr "paketet %s för stort för att tas med i geometriskt förlopp"
 
-#: builtin/repack.c:406 builtin/repack.c:413 builtin/repack.c:418
+#: builtin/repack.c:411 builtin/repack.c:418 builtin/repack.c:423
 #, c-format
 msgid "pack %s too large to roll up"
 msgstr "paketet %s för stort att rulla upp"
 
-#: builtin/repack.c:498
+#: builtin/repack.c:503
 #, c-format
 msgid "could not open tempfile %s for writing"
 msgstr "kunde inte öppna temporär fil %s för skrivning"
 
-#: builtin/repack.c:516
+#: builtin/repack.c:521
 msgid "could not close refs snapshot tempfile"
 msgstr "kunde inte stänga temporär fil för refs-ögonblicksbild"
 
-#: builtin/repack.c:630
+#: builtin/repack.c:634
 msgid "pack everything in a single pack"
 msgstr "packa allt i ett enda paket"
 
-#: builtin/repack.c:632
+#: builtin/repack.c:636
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "samma som -a, och gör onåbara objekt lösa"
 
-#: builtin/repack.c:635
+#: builtin/repack.c:639
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "ta bort överflödiga paket, och kör git-prune-packed"
 
-#: builtin/repack.c:637
+#: builtin/repack.c:641
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "sänd --no-reuse-delta till git-pack-objects"
 
-#: builtin/repack.c:639
+#: builtin/repack.c:643
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "sänd --no-reuse-object till git-pack-objects"
 
-#: builtin/repack.c:641
+#: builtin/repack.c:645
 msgid "do not run git-update-server-info"
 msgstr "kör inte git-update-server-info"
 
-#: builtin/repack.c:644
+#: builtin/repack.c:648
 msgid "pass --local to git-pack-objects"
 msgstr "sänd --local till git-pack-objects"
 
-#: builtin/repack.c:646
+#: builtin/repack.c:650
 msgid "write bitmap index"
 msgstr "skriv bitkartindex"
 
-#: builtin/repack.c:648
+#: builtin/repack.c:652
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "sänd --delta-islands till git-pack-objects"
 
-#: builtin/repack.c:649
+#: builtin/repack.c:653
 msgid "approxidate"
 msgstr "cirkadatum"
 
-#: builtin/repack.c:650
+#: builtin/repack.c:654
 msgid "with -A, do not loosen objects older than this"
 msgstr "med -A, lös inte upp objekt äldre än detta"
 
-#: builtin/repack.c:652
+#: builtin/repack.c:656
 msgid "with -a, repack unreachable objects"
 msgstr "med -a, packa om onåbara objekt"
 
-#: builtin/repack.c:654
+#: builtin/repack.c:658
 msgid "size of the window used for delta compression"
 msgstr "storlek på fönster använt för deltakomprimering"
 
-#: builtin/repack.c:655 builtin/repack.c:661
+#: builtin/repack.c:659 builtin/repack.c:665
 msgid "bytes"
 msgstr "byte"
 
-#: builtin/repack.c:656
+#: builtin/repack.c:660
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr "samma som ovan, men begränsa minnesstorleken istället för postantal"
 
-#: builtin/repack.c:658
+#: builtin/repack.c:662
 msgid "limits the maximum delta depth"
 msgstr "begränsa maximalt deltadjup"
 
-#: builtin/repack.c:660
+#: builtin/repack.c:664
 msgid "limits the maximum number of threads"
 msgstr "begränsar maximalt antal trådar"
 
-#: builtin/repack.c:662
+#: builtin/repack.c:666
 msgid "maximum size of each packfile"
 msgstr "maximal storlek på varje paketfil"
 
-#: builtin/repack.c:664
+#: builtin/repack.c:668
 msgid "repack objects in packs marked with .keep"
 msgstr "packa om objekt i paket märkta med .keep"
 
-#: builtin/repack.c:666
+#: builtin/repack.c:670
 msgid "do not repack this pack"
 msgstr "packa inte om detta paket"
 
-#: builtin/repack.c:668
+#: builtin/repack.c:672
 msgid "find a geometric progression with factor <N>"
 msgstr "hitta ett geometrisk förlopp med faktor <N>"
 
-#: builtin/repack.c:670
+#: builtin/repack.c:674
 msgid "write a multi-pack index of the resulting packs"
 msgstr "skriv ett flerpaketsindex för de skapade paketen"
 
-#: builtin/repack.c:680
+#: builtin/repack.c:684
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "kan inte ta bort paket i ett \"precious-objects\"-arkiv"
 
-#: builtin/repack.c:829
+#: builtin/repack.c:833
 msgid "Nothing new to pack."
 msgstr "Inget nytt att packa."
 
-#: builtin/repack.c:859
+#: builtin/repack.c:863
 #, c-format
 msgid "missing required file: %s"
 msgstr "nödvändig fil saknas: %s"
 
-#: builtin/repack.c:861
+#: builtin/repack.c:865
 #, c-format
 msgid "could not unlink: %s"
 msgstr "kunde inte ta bort: \"%s\""
@@ -21197,10 +21695,6 @@ msgstr "git replace [-f] --edit <objekt>"
 msgid "git replace [-f] --graft <commit> [<parent>...]"
 msgstr "git replace [-f] --graft <incheckning> [<förälder>...]"
 
-#: builtin/replace.c:25
-msgid "git replace [-f] --convert-graft-file"
-msgstr "git replace [-f] --convert-graft-file"
-
 #: builtin/replace.c:26
 msgid "git replace -d <object>..."
 msgstr "git replace -d <objekt>..."
@@ -21502,97 +21996,92 @@ msgstr "Kunde inte hitta trädet för %s."
 msgid "HEAD is now at %s"
 msgstr "HEAD är nu på %s"
 
-#: builtin/reset.c:299
+#: builtin/reset.c:304
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Kan inte utföra en %s återställning mitt i en sammanslagning."
 
-#: builtin/reset.c:396 builtin/stash.c:606 builtin/stash.c:680
-#: builtin/stash.c:704
+#: builtin/reset.c:402 builtin/stash.c:606 builtin/stash.c:669
+#: builtin/stash.c:693
 msgid "be quiet, only report errors"
 msgstr "var tyst, rapportera endast fel"
 
-#: builtin/reset.c:398
+#: builtin/reset.c:404
+msgid "skip refreshing the index after reset"
+msgstr "hoppa över uppdatering av indexet efter nollställning"
+
+#: builtin/reset.c:406
 msgid "reset HEAD and index"
 msgstr "återställ HEAD och index"
 
-#: builtin/reset.c:399
+#: builtin/reset.c:407
 msgid "reset only HEAD"
 msgstr "återställ endast HEAD"
 
-#: builtin/reset.c:401 builtin/reset.c:403
+#: builtin/reset.c:409 builtin/reset.c:411
 msgid "reset HEAD, index and working tree"
 msgstr "återställ HEAD, index och arbetskatalog"
 
-#: builtin/reset.c:405
+#: builtin/reset.c:413
 msgid "reset HEAD but keep local changes"
 msgstr "återställ HEAD men behåll lokala ändringar"
 
-#: builtin/reset.c:411
+#: builtin/reset.c:419
 msgid "record only the fact that removed paths will be added later"
 msgstr "registrera endast att borttagna sökvägar kommer läggas till senare"
 
-#: builtin/reset.c:445
+#: builtin/reset.c:452
 #, c-format
 msgid "Failed to resolve '%s' as a valid revision."
 msgstr "Kunde inte slå upp \"%s\" som en giltig revision."
 
-#: builtin/reset.c:453
+#: builtin/reset.c:460
 #, c-format
 msgid "Failed to resolve '%s' as a valid tree."
 msgstr "Kunde inte slå upp \"%s\" som ett giltigt träd."
 
-#: builtin/reset.c:472
+#: builtin/reset.c:479
 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
 msgstr ""
 "--mixed rekommenderas inte med sökvägar; använd \"git reset -- <sökvägar>\"."
 
-#: builtin/reset.c:474
+#: builtin/reset.c:481
 #, c-format
 msgid "Cannot do %s reset with paths."
 msgstr "Kan inte göra %s återställning med sökvägar."
 
-#: builtin/reset.c:489
+#: builtin/reset.c:496
 #, c-format
 msgid "%s reset is not allowed in a bare repository"
 msgstr "%s återställning tillåts inte i ett naket arkiv"
 
-#: builtin/reset.c:520
+#: builtin/reset.c:527
 msgid "Unstaged changes after reset:"
 msgstr "Oköade ändringar efter återställning:"
 
-#: builtin/reset.c:523
+#: builtin/reset.c:530
 #, c-format
 msgid ""
-"\n"
-"It took %.2f seconds to enumerate unstaged changes after reset.  You can\n"
-"use '--quiet' to avoid this.  Set the config setting reset.quiet to true\n"
-"to make this the default.\n"
+"It took %.2f seconds to refresh the index after reset.  You can use\n"
+"'--no-refresh' to avoid this."
 msgstr ""
-"\n"
-"Det tog %.2f sekunder att räkna upp oköade ändringar efter återställning.\n"
-"Du kan använda \"--quiet\" för att förhindra detta. Ställ "
-"konfigurationsvariabeln\n"
-"reset.quiet till true för att göra detta till förval.\n"
+"Det tog %.2f sekunder att uppdatera indexet efter återställning.\n"
+"Du kan använda \"--no-refresh\" för undvika detta."
 
-#: builtin/reset.c:541
+#: builtin/reset.c:547
 #, c-format
 msgid "Could not reset index file to revision '%s'."
 msgstr "Kunde inte återställa indexfilen till versionen \"%s\"."
 
-#: builtin/reset.c:546
+#: builtin/reset.c:552
 msgid "Could not write new index file."
 msgstr "Kunde inte skriva ny indexfil."
 
-#: builtin/rev-list.c:602
-msgid "object filtering requires --objects"
-msgstr "objektfiltrering kräver --objects"
-
-#: builtin/rev-list.c:674
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr "rev-list stöder inte visning av anteckningar"
 
-#: builtin/rev-list.c:679
+#: builtin/rev-list.c:664
 #, c-format
 msgid "marked counting and '%s' cannot be used together"
 msgstr "markerad räkning och \"%s\" kan inte användas samtidigt."
@@ -21938,11 +22427,11 @@ msgstr "föt"
 msgid "group by field"
 msgstr "gruppera efter fält"
 
-#: builtin/shortlog.c:394
+#: builtin/shortlog.c:395
 msgid "too many arguments given outside repository"
 msgstr "för många flaggor givna utanför arkivet"
 
-#: builtin/show-branch.c:13
+#: builtin/show-branch.c:14
 msgid ""
 "git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
 "                [--current] [--color[=<when>] | --no-color] [--sparse]\n"
@@ -21954,119 +22443,119 @@ msgstr ""
 "                [--more=<n> | --list | --independent | --merge-base]\n"
 "                [--no-name | --sha1-name] [--topics] [(<rev> | <mönster>)...]"
 
-#: builtin/show-branch.c:17
+#: builtin/show-branch.c:18
 msgid "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"
 msgstr "git show-branch (-g | --reflog)[=<n>[,<bas>]] [--list] [<ref>]"
 
-#: builtin/show-branch.c:395
+#: builtin/show-branch.c:396
 #, c-format
 msgid "ignoring %s; cannot handle more than %d ref"
 msgid_plural "ignoring %s; cannot handle more than %d refs"
 msgstr[0] "ignorerar %s; kan inte hantera mer än %d referens"
 msgstr[1] "ignorerar %s; kan inte hantera mer än %d referenser"
 
-#: builtin/show-branch.c:547
+#: builtin/show-branch.c:548
 #, c-format
 msgid "no matching refs with %s"
 msgstr "inga motsvarande referenser med %s"
 
-#: builtin/show-branch.c:644
+#: builtin/show-branch.c:645
 msgid "show remote-tracking and local branches"
 msgstr "visa fjärrspårande och lokala grenar"
 
-#: builtin/show-branch.c:646
+#: builtin/show-branch.c:647
 msgid "show remote-tracking branches"
 msgstr "visa fjärrspårande grenar"
 
-#: builtin/show-branch.c:648
+#: builtin/show-branch.c:649
 msgid "color '*!+-' corresponding to the branch"
 msgstr "färga \"*!+-\" enligt grenen"
 
-#: builtin/show-branch.c:650
+#: builtin/show-branch.c:651
 msgid "show <n> more commits after the common ancestor"
 msgstr "visa <n> ytterligare incheckningar efter gemensam anfader"
 
-#: builtin/show-branch.c:652
+#: builtin/show-branch.c:653
 msgid "synonym to more=-1"
 msgstr "synonym till more=-1"
 
-#: builtin/show-branch.c:653
+#: builtin/show-branch.c:654
 msgid "suppress naming strings"
 msgstr "undertyck namnsträngar"
 
-#: builtin/show-branch.c:655
+#: builtin/show-branch.c:656
 msgid "include the current branch"
 msgstr "ta med aktuell gren"
 
-#: builtin/show-branch.c:657
+#: builtin/show-branch.c:658
 msgid "name commits with their object names"
 msgstr "namnge incheckningar med deras objektnamn"
 
-#: builtin/show-branch.c:659
+#: builtin/show-branch.c:660
 msgid "show possible merge bases"
 msgstr "visa möjliga sammanslagningsbaser"
 
-#: builtin/show-branch.c:661
+#: builtin/show-branch.c:662
 msgid "show refs unreachable from any other ref"
 msgstr "visa referenser som inte kan nås från någon annan referens"
 
-#: builtin/show-branch.c:663
+#: builtin/show-branch.c:664
 msgid "show commits in topological order"
 msgstr "visa incheckningar i topologisk ordning"
 
-#: builtin/show-branch.c:666
+#: builtin/show-branch.c:667
 msgid "show only commits not on the first branch"
 msgstr "visa endast incheckningar inte på den första grenen"
 
-#: builtin/show-branch.c:668
+#: builtin/show-branch.c:669
 msgid "show merges reachable from only one tip"
 msgstr "visa sammanslagningar som endast kan nås från en spets"
 
-#: builtin/show-branch.c:670
+#: builtin/show-branch.c:671
 msgid "topologically sort, maintaining date order where possible"
 msgstr "sortera topologiskt, behåll datumordning när möjligt"
 
-#: builtin/show-branch.c:673
+#: builtin/show-branch.c:674
 msgid "<n>[,<base>]"
 msgstr "<n>[,<bas>]"
 
-#: builtin/show-branch.c:674
+#: builtin/show-branch.c:675
 msgid "show <n> most recent ref-log entries starting at base"
 msgstr "visa <n> nyaste refloggposter med början på bas"
 
-#: builtin/show-branch.c:734
+#: builtin/show-branch.c:735
 msgid "no branches given, and HEAD is not valid"
 msgstr "inga grenar angavs, och HEAD är inte giltigt"
 
-#: builtin/show-branch.c:737
+#: builtin/show-branch.c:738
 msgid "--reflog option needs one branch name"
 msgstr "--reflog behöver ett namn på en gren"
 
-#: builtin/show-branch.c:740
+#: builtin/show-branch.c:741
 #, c-format
 msgid "only %d entry can be shown at one time."
 msgid_plural "only %d entries can be shown at one time."
 msgstr[0] "maximalt %d poster kan visas samtidigt."
 msgstr[1] "maximalt %d poster kan visas samtidigt."
 
-#: builtin/show-branch.c:744
+#: builtin/show-branch.c:745
 #, c-format
 msgid "no such ref %s"
 msgstr "ingen sådan referens %s"
 
-#: builtin/show-branch.c:830
+#: builtin/show-branch.c:831
 #, c-format
 msgid "cannot handle more than %d rev."
 msgid_plural "cannot handle more than %d revs."
 msgstr[0] "kan inte hantera mer än %d revision."
 msgstr[1] "kan inte hantera mer än %d revisioner."
 
-#: builtin/show-branch.c:834
+#: builtin/show-branch.c:835
 #, c-format
 msgid "'%s' is not a valid ref."
 msgstr "\"%s\" är inte en giltig referens."
 
-#: builtin/show-branch.c:837
+#: builtin/show-branch.c:838
 #, c-format
 msgid "cannot find commit %s (%s)"
 msgstr "hittar inte incheckning %s (%s)"
@@ -22123,24 +22612,20 @@ msgstr "visa inte resultat på standard ut (användbart med --verify)"
 msgid "show refs from stdin that aren't in local repository"
 msgstr "visa referenser från standard in som inte finns i lokalt arkiv"
 
-#: builtin/sparse-checkout.c:22
+#: builtin/sparse-checkout.c:23
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr "git sparse-checkout (init|list|set|add|reapply|disable) <flaggor>"
 
-#: builtin/sparse-checkout.c:46
-msgid "git sparse-checkout list"
-msgstr "git sparse-checkout list"
-
-#: builtin/sparse-checkout.c:60
+#: builtin/sparse-checkout.c:61
 msgid "this worktree is not sparse"
 msgstr "arbetskatalogen är inte gren"
 
-#: builtin/sparse-checkout.c:75
+#: builtin/sparse-checkout.c:76
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr ""
 "arbetskatalogen är inte glest (sparse-checkout-filen kanske inte finns)"
 
-#: builtin/sparse-checkout.c:176
+#: builtin/sparse-checkout.c:177
 #, c-format
 msgid ""
 "directory '%s' contains untracked files, but is not in the sparse-checkout "
@@ -22149,98 +22634,131 @@ msgstr ""
 "katalogen \"%s\" innehåller ospårade filer, men är inte i området som ages i "
 "\"sparse-checkout\""
 
-#: builtin/sparse-checkout.c:184
+#: builtin/sparse-checkout.c:185
 #, c-format
 msgid "failed to remove directory '%s'"
 msgstr "misslyckades ta bort katalogen \"%s\""
 
-#: builtin/sparse-checkout.c:324
+#: builtin/sparse-checkout.c:327
 msgid "failed to create directory for sparse-checkout file"
 msgstr "misslyckades skapa katalog för \"sparse-checkout\"-filen"
 
-#: builtin/sparse-checkout.c:365
-msgid "unable to upgrade repository format to enable worktreeConfig"
-msgstr "kunde inte uppgradera arkivformat för att aktivera worktreeConfig"
-
-#: builtin/sparse-checkout.c:367
-msgid "failed to set extensions.worktreeConfig setting"
-msgstr "misslyckades ändra inställningen extensions.worktreeConfig"
+#: builtin/sparse-checkout.c:366
+msgid "failed to initialize worktree config"
+msgstr "misslyckades initiera arbetskataloginställning"
 
 #: builtin/sparse-checkout.c:411
 msgid "failed to modify sparse-index config"
 msgstr "misslyckades ändra inställning för sparse-index"
 
-#: builtin/sparse-checkout.c:422
-msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
-msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
-
-#: builtin/sparse-checkout.c:441 builtin/sparse-checkout.c:729
-#: builtin/sparse-checkout.c:778
+#: builtin/sparse-checkout.c:441 builtin/sparse-checkout.c:793
+#: builtin/sparse-checkout.c:847
 msgid "initialize the sparse-checkout in cone mode"
 msgstr "initiera sparse-checkout i konläge"
 
-#: builtin/sparse-checkout.c:443 builtin/sparse-checkout.c:731
-#: builtin/sparse-checkout.c:780
+#: builtin/sparse-checkout.c:443 builtin/sparse-checkout.c:795
+#: builtin/sparse-checkout.c:849
 msgid "toggle the use of a sparse index"
 msgstr "slå på/av använding av glest index"
 
-#: builtin/sparse-checkout.c:476
+#: builtin/sparse-checkout.c:479
 #, c-format
 msgid "failed to open '%s'"
 msgstr "misslyckades öppna \"%s\""
 
-#: builtin/sparse-checkout.c:528
+#: builtin/sparse-checkout.c:531
 #, c-format
 msgid "could not normalize path %s"
 msgstr "kunde inte normalisera sökvägen \"%s\""
 
-#: builtin/sparse-checkout.c:557
+#: builtin/sparse-checkout.c:560
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr "kan inte ta bort citering av C-sträng \"%s\""
 
-#: builtin/sparse-checkout.c:612 builtin/sparse-checkout.c:640
+#: builtin/sparse-checkout.c:615 builtin/sparse-checkout.c:643
 msgid "unable to load existing sparse-checkout patterns"
 msgstr "kunde inte läsa in existerande mönster för gles utcheckning"
 
-#: builtin/sparse-checkout.c:616
+#: builtin/sparse-checkout.c:619
 msgid "existing sparse-checkout patterns do not use cone mode"
 msgstr "befintliga filter för gles utcheckning använder inte konläge"
 
-#: builtin/sparse-checkout.c:682
-msgid "git sparse-checkout add (--stdin | <patterns>)"
-msgstr "git sparse-checkout add (--stdin | <mönster>)"
+#: builtin/sparse-checkout.c:707
+msgid "please run from the toplevel directory in non-cone mode"
+msgstr "vänligen kör från toppnivåkatalogen i icke-konläge"
+
+#: builtin/sparse-checkout.c:712
+msgid "specify directories rather than patterns (no leading slash)"
+msgstr "ange kataloger istället för mönster (utan inledande snedstreck)"
+
+#: builtin/sparse-checkout.c:714
+msgid ""
+"specify directories rather than patterns.  If your directory starts with a "
+"'!', pass --skip-checks"
+msgstr ""
+"ange kataloger istället för mönster. Om din katalog börjar med ett \"!\", "
+"sänd med --skip-checks"
+
+#: builtin/sparse-checkout.c:716
+msgid ""
+"specify directories rather than patterns.  If your directory really has any "
+"of '*?[]\\' in it, pass --skip-checks"
+msgstr ""
+"ange kataloger istället för mönster. Om din katalog faktiskt har tecknen '*?"
+"[]\\' i namnet, sänd med --skip-checks"
+
+#: builtin/sparse-checkout.c:732
+#, c-format
+msgid ""
+"'%s' is not a directory; to treat it as a directory anyway, rerun with --"
+"skip-checks"
+msgstr ""
+"\"%s\" är inte en katalog: för att ändå behandla det som en katalog, kör på "
+"nytt med --skip-checks"
+
+#: builtin/sparse-checkout.c:734
+#, c-format
+msgid ""
+"pass a leading slash before paths such as '%s' if you want a single file "
+"(see NON-CONE PROBLEMS in the git-sparse-checkout manual)."
+msgstr ""
+"sänd med ett inledande snedstreck före sökvägar som \"%s\" om du vill ha en "
+"enstaka file (se NON-CONE PROBLEMS i manualen git-sparse-checkout)."
+
+#: builtin/sparse-checkout.c:739
+msgid "git sparse-checkout add [--skip-checks] (--stdin | <patterns>)"
+msgstr "git sparse-checkout add [--skip-checks] (--stdin | <mönster>)"
 
-#: builtin/sparse-checkout.c:694 builtin/sparse-checkout.c:733
+#: builtin/sparse-checkout.c:752 builtin/sparse-checkout.c:797
+msgid ""
+"skip some sanity checks on the given paths that might give false positives"
+msgstr ""
+"hoppa över några kontroller på de angivna sökvägarna som kan ge falska "
+"positiva"
+
+#: builtin/sparse-checkout.c:755 builtin/sparse-checkout.c:800
 msgid "read patterns from standard in"
 msgstr "läs mönster från standard in"
 
-#: builtin/sparse-checkout.c:699
+#: builtin/sparse-checkout.c:760
 msgid "no sparse-checkout to add to"
 msgstr "ingen sparse-checkout att utöka"
 
-#: builtin/sparse-checkout.c:712
+#: builtin/sparse-checkout.c:775
 msgid ""
-"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] (--stdin | "
-"<patterns>)"
+"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] "
+"(--stdin | <patterns>)"
 msgstr ""
-"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] (--stdin | "
-"<mönster>)"
+"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] "
+"(--stdin | <mönster>)"
 
-#: builtin/sparse-checkout.c:765
-msgid "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
-msgstr "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
-
-#: builtin/sparse-checkout.c:785
+#: builtin/sparse-checkout.c:854
 msgid "must be in a sparse-checkout to reapply sparsity patterns"
 msgstr ""
 "måste vara i en gles utcheckning för att tillämpa gleshetsmönster på nytt"
 
-#: builtin/sparse-checkout.c:803
-msgid "git sparse-checkout disable"
-msgstr "git sparse-checkout disable"
-
-#: builtin/sparse-checkout.c:845
+#: builtin/sparse-checkout.c:914
 msgid "error while refreshing working directory"
 msgstr "fel vid uppdatering av arbetskatalog"
 
@@ -22382,168 +22900,152 @@ msgstr "Indexet har inte tagits upp ur \"stash\":en"
 msgid "could not restore untracked files from stash"
 msgstr "kunde inte återställa ospårade filer från stash-post"
 
-#: builtin/stash.c:608 builtin/stash.c:706
+#: builtin/stash.c:608 builtin/stash.c:695
 msgid "attempt to recreate the index"
 msgstr "försök återskapa indexet"
 
-#: builtin/stash.c:652
+#: builtin/stash.c:641
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "Kastade %s (%s)"
 
-#: builtin/stash.c:655
+#: builtin/stash.c:644
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s: Kunde inte kasta \"stash\"-post"
 
-#: builtin/stash.c:668
+#: builtin/stash.c:657
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "\"%s\" är inte en \"stash\"-referens"
 
-#: builtin/stash.c:718
+#: builtin/stash.c:707
 msgid "The stash entry is kept in case you need it again."
 msgstr "Stash-posten behålls ifall du behöver den igen."
 
-#: builtin/stash.c:741
+#: builtin/stash.c:730
 msgid "No branch name specified"
 msgstr "Inget grennamn angavs"
 
-#: builtin/stash.c:825
+#: builtin/stash.c:809
 msgid "failed to parse tree"
 msgstr "misslyckades tolka träd"
 
-#: builtin/stash.c:836
+#: builtin/stash.c:820
 msgid "failed to unpack trees"
 msgstr "misslyckades packa upp träd"
 
-#: builtin/stash.c:856
+#: builtin/stash.c:840
 msgid "include untracked files in the stash"
 msgstr "ta med ospårade filer i \"stash\""
 
-#: builtin/stash.c:859
+#: builtin/stash.c:843
 msgid "only show untracked files in the stash"
 msgstr "visa bara ospårade filer i \"stash\""
 
-#: builtin/stash.c:946 builtin/stash.c:983
+#: builtin/stash.c:930 builtin/stash.c:967
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "Kan inte uppdatera %s med %s"
 
-#: builtin/stash.c:964 builtin/stash.c:1678 builtin/stash.c:1750
+#: builtin/stash.c:948 builtin/stash.c:1667 builtin/stash.c:1739
 msgid "stash message"
 msgstr "\"stash\"-meddelande"
 
-#: builtin/stash.c:974
+#: builtin/stash.c:958
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" kräver ett <incheckning>-argument"
 
-#: builtin/stash.c:1159
+#: builtin/stash.c:1143
 msgid "No staged changes"
 msgstr "Inga köade ändringar"
 
-#: builtin/stash.c:1220
+#: builtin/stash.c:1204
 msgid "No changes selected"
 msgstr "Inga ändringar valda"
 
-#: builtin/stash.c:1320
+#: builtin/stash.c:1304
 msgid "You do not have the initial commit yet"
 msgstr "Du har inte den första incheckningen ännu"
 
-#: builtin/stash.c:1347
+#: builtin/stash.c:1331
 msgid "Cannot save the current index state"
 msgstr "Kan inte spara aktuellt tillstånd för indexet"
 
-#: builtin/stash.c:1356
+#: builtin/stash.c:1340
 msgid "Cannot save the untracked files"
 msgstr "Kan inte spara ospårade filer"
 
-#: builtin/stash.c:1367 builtin/stash.c:1386
+#: builtin/stash.c:1351 builtin/stash.c:1370
 msgid "Cannot save the current worktree state"
 msgstr "Kan inte spara aktuellt tillstånd för arbetskatalogen"
 
-#: builtin/stash.c:1377
+#: builtin/stash.c:1361
 msgid "Cannot save the current staged state"
 msgstr "Kan inte spara aktuellt tillstånd kö"
 
-#: builtin/stash.c:1414
+#: builtin/stash.c:1398
 msgid "Cannot record working tree state"
 msgstr "Kan inte registrera tillstånd för arbetskatalog"
 
-#: builtin/stash.c:1463
+#: builtin/stash.c:1447
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr "Kan inte använda --patch och --include-untracked eller --all samtidigt"
 
-#: builtin/stash.c:1474
+#: builtin/stash.c:1458
 msgid "Can't use --staged and --include-untracked or --all at the same time"
 msgstr ""
 "Kan inte använda --staged och --include-untracked eller --all samtidigt"
 
-#: builtin/stash.c:1492
+#: builtin/stash.c:1476
 msgid "Did you forget to 'git add'?"
 msgstr "Glömde du använda \"git add\"?"
 
-#: builtin/stash.c:1507
+#: builtin/stash.c:1491
 msgid "No local changes to save"
 msgstr "Inga lokala ändringar att spara"
 
-#: builtin/stash.c:1514
+#: builtin/stash.c:1498
 msgid "Cannot initialize stash"
 msgstr "Kan inte initiera \"stash\""
 
-#: builtin/stash.c:1529
+#: builtin/stash.c:1513
 msgid "Cannot save the current status"
 msgstr "Kan inte spara aktuell status"
 
-#: builtin/stash.c:1534
+#: builtin/stash.c:1518
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Sparade arbetskatalogen och indexstatus %s"
 
-#: builtin/stash.c:1627
+#: builtin/stash.c:1615
 msgid "Cannot remove worktree changes"
 msgstr "Kan inte ta bort ändringar i arbetskatalogen"
 
-#: builtin/stash.c:1667 builtin/stash.c:1739
+#: builtin/stash.c:1656 builtin/stash.c:1728
 msgid "keep index"
 msgstr "behåll indexet"
 
-#: builtin/stash.c:1669 builtin/stash.c:1741
+#: builtin/stash.c:1658 builtin/stash.c:1730
 msgid "stash staged changes only"
 msgstr "stash:a endast köade ändringar"
 
-#: builtin/stash.c:1671 builtin/stash.c:1743
+#: builtin/stash.c:1660 builtin/stash.c:1732
 msgid "stash in patch mode"
 msgstr "\"stash\" i \"patch\"-läge"
 
-#: builtin/stash.c:1672 builtin/stash.c:1744
+#: builtin/stash.c:1661 builtin/stash.c:1733
 msgid "quiet mode"
 msgstr "tyst läge"
 
-#: builtin/stash.c:1674 builtin/stash.c:1746
+#: builtin/stash.c:1663 builtin/stash.c:1735
 msgid "include untracked files in stash"
 msgstr "ta med ospårade filer i \"stash\""
 
-#: builtin/stash.c:1676 builtin/stash.c:1748
+#: builtin/stash.c:1665 builtin/stash.c:1737
 msgid "include ignore files"
 msgstr "ta med ignorerade filer"
 
-#: builtin/stash.c:1783
-msgid ""
-"the stash.useBuiltin support has been removed!\n"
-"See its entry in 'git help config' for details."
-msgstr ""
-"stödet för stash.useBuiltin har tagits bort!\n"
-"Se posten för det i \"git help config\" för detaljer."
-
-#: builtin/stripspace.c:18
-msgid "git stripspace [-s | --strip-comments]"
-msgstr "git stripspace [-s | --strip-comments]"
-
-#: builtin/stripspace.c:19
-msgid "git stripspace [-c | --comment-lines]"
-msgstr "git stripspace [-c | --comment-lines]"
-
 #: builtin/stripspace.c:37
 msgid "skip and remove all lines starting with comment character"
 msgstr "hoppa över och ta bort alla rader som inleds med kommentarstecken"
@@ -22552,21 +23054,17 @@ msgstr "hoppa över och ta bort alla rader som inleds med kommentarstecken"
 msgid "prepend comment character and space to each line"
 msgstr "lägg in kommentarstecken och blanksteg först på varje rad"
 
-#: builtin/submodule--helper.c:46 builtin/submodule--helper.c:2668
+#: builtin/submodule--helper.c:50 builtin/submodule--helper.c:2486
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "Förväntade fullt referensnamn, fick %s"
 
-#: builtin/submodule--helper.c:63
-msgid "submodule--helper print-default-remote takes no arguments"
-msgstr "submodule--helper print-default-remote tar inga argument"
-
-#: builtin/submodule--helper.c:101
+#: builtin/submodule--helper.c:103
 #, c-format
 msgid "cannot strip one component off url '%s'"
 msgstr "kan inte ta bort en komponent från url:en \"%s\""
 
-#: builtin/submodule--helper.c:211
+#: builtin/submodule--helper.c:213
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
@@ -22575,26 +23073,26 @@ msgstr ""
 "kunde inte slå upp konfigurationen \"%s\". Antar att arkivet är sin eget "
 "officiella uppström."
 
-#: builtin/submodule--helper.c:405 builtin/submodule--helper.c:1859
+#: builtin/submodule--helper.c:413 builtin/submodule--helper.c:1873
 msgid "alternative anchor for relative paths"
 msgstr "alternativa ankare för relativa sökvägar"
 
-#: builtin/submodule--helper.c:410
+#: builtin/submodule--helper.c:418
 msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper list [--prefix=<sökväg>] [<sökväg>...]"
 
-#: builtin/submodule--helper.c:468 builtin/submodule--helper.c:605
-#: builtin/submodule--helper.c:628
+#: builtin/submodule--helper.c:476 builtin/submodule--helper.c:617
+#: builtin/submodule--helper.c:640
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr "Hittade ingen url för undermodulsökvägen \"%s\" i .gitmodules"
 
-#: builtin/submodule--helper.c:520
+#: builtin/submodule--helper.c:528
 #, c-format
 msgid "Entering '%s'\n"
 msgstr "Går in i \"%s\"\n"
 
-#: builtin/submodule--helper.c:523
+#: builtin/submodule--helper.c:531
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
@@ -22603,7 +23101,7 @@ msgstr ""
 "run_command returnerade icke-nollstatus för %s\n"
 "."
 
-#: builtin/submodule--helper.c:545
+#: builtin/submodule--helper.c:553
 #, c-format
 msgid ""
 "run_command returned non-zero status while recursing in the nested "
@@ -22614,67 +23112,67 @@ msgstr ""
 "undermoduler för %s\n"
 "."
 
-#: builtin/submodule--helper.c:561
+#: builtin/submodule--helper.c:569
 msgid "suppress output of entering each submodule command"
 msgstr "dölj utdata från för varje undermodulskommando som startas"
 
-#: builtin/submodule--helper.c:563 builtin/submodule--helper.c:864
-#: builtin/submodule--helper.c:1453
+#: builtin/submodule--helper.c:571 builtin/submodule--helper.c:876
+#: builtin/submodule--helper.c:1458
 msgid "recurse into nested submodules"
 msgstr "rekursera in i nästlade undermoduler"
 
-#: builtin/submodule--helper.c:568
+#: builtin/submodule--helper.c:576
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [--] [<kommando>]"
 
-#: builtin/submodule--helper.c:642
+#: builtin/submodule--helper.c:654
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr "Misslyckades registrera url för undermodulsökväg \"%s\""
 
-#: builtin/submodule--helper.c:646
+#: builtin/submodule--helper.c:658
 #, c-format
 msgid "Submodule '%s' (%s) registered for path '%s'\n"
 msgstr "Undermodulen \"%s\" (%s) registrerad för sökvägen \"%s\"\n"
 
-#: builtin/submodule--helper.c:656
+#: builtin/submodule--helper.c:668
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr "varning: kommandouppdateringsläge föreslogs för undermodulen \"%s\"\n"
 
-#: builtin/submodule--helper.c:663
+#: builtin/submodule--helper.c:675
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr "Misslyckades registrera uppdateringsläge för undermodulsökväg \"%s\""
 
-#: builtin/submodule--helper.c:685
+#: builtin/submodule--helper.c:697
 msgid "suppress output for initializing a submodule"
 msgstr "dölj utdata från initiering av undermodul"
 
-#: builtin/submodule--helper.c:690
+#: builtin/submodule--helper.c:702
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr "git submodule--helper init [<flaggor>] [<sökväg>]"
 
-#: builtin/submodule--helper.c:763 builtin/submodule--helper.c:898
+#: builtin/submodule--helper.c:775 builtin/submodule--helper.c:910
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr "hittade ingen undermodulmappning i .gitmodules för sökvägen \"%s\""
 
-#: builtin/submodule--helper.c:811
+#: builtin/submodule--helper.c:823
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr "kunde inte bestämma HEAD:s incheckning i undermodulen \"%s\""
 
-#: builtin/submodule--helper.c:838 builtin/submodule--helper.c:1423
+#: builtin/submodule--helper.c:850 builtin/submodule--helper.c:1428
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "misslyckades rekursera in i undermodulen \"%s\""
 
-#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1590
+#: builtin/submodule--helper.c:874 builtin/submodule--helper.c:1595
 msgid "suppress submodule status output"
 msgstr "hindra statusutskrift för undermodul"
 
-#: builtin/submodule--helper.c:863
+#: builtin/submodule--helper.c:875
 msgid ""
 "use commit stored in the index instead of the one stored in the submodule "
 "HEAD"
@@ -22682,94 +23180,94 @@ msgstr ""
 "visa incheckning från indexet istället för den som lagrats i undermodulens "
 "HEAD"
 
-#: builtin/submodule--helper.c:869
+#: builtin/submodule--helper.c:881
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr "git submodule status [--quitet] [--cached] [--recursive] [<sökväg>...]"
 
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:905
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper name <sökväg>"
 
-#: builtin/submodule--helper.c:965
+#: builtin/submodule--helper.c:977
 #, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr "* %s %s(blob)->%s(submodule)"
 
-#: builtin/submodule--helper.c:968
+#: builtin/submodule--helper.c:980
 #, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr "* %s %s(submodule)->%s(blob)"
 
-#: builtin/submodule--helper.c:981
+#: builtin/submodule--helper.c:993
 #, c-format
 msgid "%s"
 msgstr "%s"
 
-#: builtin/submodule--helper.c:1031
+#: builtin/submodule--helper.c:1043
 #, c-format
 msgid "couldn't hash object from '%s'"
 msgstr "kunde inte hasha objekt från \"%s\""
 
-#: builtin/submodule--helper.c:1035
+#: builtin/submodule--helper.c:1047
 #, c-format
 msgid "unexpected mode %o\n"
 msgstr "okänt läge %o\n"
 
-#: builtin/submodule--helper.c:1276
+#: builtin/submodule--helper.c:1288
 msgid "use the commit stored in the index instead of the submodule HEAD"
 msgstr "använd incechkning lagrad i indexet istället för undermodulens HEAD"
 
-#: builtin/submodule--helper.c:1278
+#: builtin/submodule--helper.c:1290
 msgid "compare the commit in the index with that in the submodule HEAD"
 msgstr "jämför incheckningen i indexet med den i undermodulens HEAD"
 
-#: builtin/submodule--helper.c:1280
+#: builtin/submodule--helper.c:1292
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr ""
 "hoppa över undermoduler där värdet för \"ignore_config\" är satt till \"all\""
 
-#: builtin/submodule--helper.c:1282
+#: builtin/submodule--helper.c:1294
 msgid "limit the summary size"
 msgstr "begränsa översiktsstorleken"
 
-#: builtin/submodule--helper.c:1287
+#: builtin/submodule--helper.c:1299
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr ""
 "git submodule--helper summary [<flaggor>] [<incheckning>] [--] [<sökväg>]"
 
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1323
 msgid "could not fetch a revision for HEAD"
 msgstr "kunde inte hämta en version för HEAD"
 
-#: builtin/submodule--helper.c:1373
+#: builtin/submodule--helper.c:1384
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr "Synkroniserar undermodul-url för \"%s\"\n"
 
-#: builtin/submodule--helper.c:1379
+#: builtin/submodule--helper.c:1390
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr "misslyckades registrera url för undermodulsökväg \"%s\""
 
-#: builtin/submodule--helper.c:1393
+#: builtin/submodule--helper.c:1399
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr "misslyckades hämta standardfjärr för undermodulsökväg \"%s\""
 
-#: builtin/submodule--helper.c:1404
+#: builtin/submodule--helper.c:1409
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr "misslyckades uppdatera fjärr för undermodulsökväg \"%s\""
 
-#: builtin/submodule--helper.c:1451
+#: builtin/submodule--helper.c:1456
 msgid "suppress output of synchronizing submodule url"
 msgstr "dölj utdata från synkronisering av undermodul-url"
 
-#: builtin/submodule--helper.c:1458
+#: builtin/submodule--helper.c:1463
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<sökväg>]"
 
-#: builtin/submodule--helper.c:1508
+#: builtin/submodule--helper.c:1513
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory. This will be replaced "
@@ -22778,7 +23276,7 @@ msgstr ""
 "Undermodulsarbetskatalogen \"%s\" innehåller en .git-katalog. Denna kommer "
 "ersättas med en .git-fil med absorbgitdirs."
 
-#: builtin/submodule--helper.c:1525
+#: builtin/submodule--helper.c:1530
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
@@ -22787,46 +23285,46 @@ msgstr ""
 "Undermodulens arbetskatalog \"%s\" har lokala ändringar; \"-f\" kastar bort "
 "dem"
 
-#: builtin/submodule--helper.c:1533
+#: builtin/submodule--helper.c:1538
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "Rensade katalogen \"%s\"\n"
 
-#: builtin/submodule--helper.c:1535
+#: builtin/submodule--helper.c:1540
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr "Kunde inte ta bort undermodulens arbetskatalog \"%s\"\n"
 
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1551
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr "kunde inte skapa tom undermodulskatalog %s"
 
-#: builtin/submodule--helper.c:1562
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr "Undermodulen \"%s\" (%s) registrerad för sökvägen \"%s\"\n"
 
-#: builtin/submodule--helper.c:1591
+#: builtin/submodule--helper.c:1596
 msgid "remove submodule working trees even if they contain local changes"
 msgstr ""
 "ta bort undermodulers arbetskataloger även om de innehåller lokala ändringar"
 
-#: builtin/submodule--helper.c:1592
+#: builtin/submodule--helper.c:1597
 msgid "unregister all submodules"
 msgstr "avregistrera alla undermoduler"
 
-#: builtin/submodule--helper.c:1597
+#: builtin/submodule--helper.c:1602
 msgid ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
 msgstr ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<sökväg>...]]"
 
-#: builtin/submodule--helper.c:1611
+#: builtin/submodule--helper.c:1616
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr "Använd \"--all\" om du verkligen vill avinitiera alla undermoduler"
 
-#: builtin/submodule--helper.c:1656
+#: builtin/submodule--helper.c:1665
 msgid ""
 "An alternate computed from a superproject's alternate is invalid.\n"
 "To allow Git to clone without an alternate in such a case, set\n"
@@ -22838,102 +23336,102 @@ msgstr ""
 "submodule.alternateErrorStrategy till \"info\" eller, likvärdigt, klona\n"
 "med \"--reference-if-able\" istället för \"--reference\"."
 
-#: builtin/submodule--helper.c:1701 builtin/submodule--helper.c:1704
+#: builtin/submodule--helper.c:1710 builtin/submodule--helper.c:1713
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "undermodulen \"%s\" kan inte lägga till suppleant: %s"
 
-#: builtin/submodule--helper.c:1740
+#: builtin/submodule--helper.c:1749
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr "Värdet \"%s\" i submodule.alternateErrorStrategy förstås inte"
 
-#: builtin/submodule--helper.c:1747
+#: builtin/submodule--helper.c:1756
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "Värdet \"%s\" i submodule.alternateLocation förstås inte"
 
-#: builtin/submodule--helper.c:1772
+#: builtin/submodule--helper.c:1781
 #, c-format
 msgid "refusing to create/use '%s' in another submodule's git dir"
 msgstr "vägrar skapa/använda \"%s\" i en annan undermoduls gitkatalog"
 
-#: builtin/submodule--helper.c:1813
+#: builtin/submodule--helper.c:1826
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
 msgstr "misslyckades klona \"%s\" till undermodulsökvägen \"%s\""
 
-#: builtin/submodule--helper.c:1818
+#: builtin/submodule--helper.c:1831
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr "katalogen inte tom: \"%s\""
 
-#: builtin/submodule--helper.c:1830
+#: builtin/submodule--helper.c:1843
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr "kunde inte få tag i undermodulkatalog för \"%s\""
 
-#: builtin/submodule--helper.c:1862
+#: builtin/submodule--helper.c:1876
 msgid "where the new submodule will be cloned to"
 msgstr "var den nya undermodulen ska klonas till"
 
-#: builtin/submodule--helper.c:1865
+#: builtin/submodule--helper.c:1879
 msgid "name of the new submodule"
 msgstr "namn på den nya undermodulen"
 
-#: builtin/submodule--helper.c:1868
+#: builtin/submodule--helper.c:1882
 msgid "url where to clone the submodule from"
 msgstr "URL att klona undermodulen från"
 
-#: builtin/submodule--helper.c:1876 builtin/submodule--helper.c:3265
+#: builtin/submodule--helper.c:1890 builtin/submodule--helper.c:3383
 msgid "depth for shallow clones"
 msgstr "djup för grunda kloner"
 
-#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:2526
-#: builtin/submodule--helper.c:3258
+#: builtin/submodule--helper.c:1893 builtin/submodule--helper.c:2731
+#: builtin/submodule--helper.c:3376
 msgid "force cloning progress"
 msgstr "tvinga kloningsförlopp"
 
-#: builtin/submodule--helper.c:1881 builtin/submodule--helper.c:2528
+#: builtin/submodule--helper.c:1895 builtin/submodule--helper.c:2733
 msgid "disallow cloning into non-empty directory"
 msgstr "förhindra kloning till icke-tom katalog"
 
-#: builtin/submodule--helper.c:1888
+#: builtin/submodule--helper.c:1903
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
-"<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
-"<url> --path <path>"
+"<repository>] [--name <name>] [--depth <depth>] [--single-branch] [--filter "
+"<filter-spec>] --url <url> --path <path>"
 msgstr ""
 "git submodule--helper clone [--prefix=<sökväg>] [--quiet] [--reference "
-"<arkiv>] [--name <namn>] [--depth <djup>] [--single-branch] --url <url> --"
-"path <sökväg>"
+"<arkiv>] [--name <namn>] [--depth <djup>] [--single-branch] [--filter "
+"<filterangivelse>] --url <url> --path <sökväg>"
 
-#: builtin/submodule--helper.c:1925
+#: builtin/submodule--helper.c:1943
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr "Ogiltigt uppdateringsläge \"%s\" för undermodulsökväg \"%s\""
 
-#: builtin/submodule--helper.c:1929
+#: builtin/submodule--helper.c:1947
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr ""
 "Ogiltigt uppdateringsläge \"%s\" konfigurerat för undermodulsökväg \"%s\""
 
-#: builtin/submodule--helper.c:2044
+#: builtin/submodule--helper.c:2041
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "Undermodulsökvägen \"%s\" har inte initierats"
 
-#: builtin/submodule--helper.c:2048
+#: builtin/submodule--helper.c:2045
 msgid "Maybe you want to use 'update --init'?"
 msgstr "Kanske menade du att använda \"update --init\"?"
 
-#: builtin/submodule--helper.c:2078
+#: builtin/submodule--helper.c:2075
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "Hoppar över ej sammanslagen undermodul %s"
 
-#: builtin/submodule--helper.c:2107
+#: builtin/submodule--helper.c:2104
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "Hoppar över undermodulen \"%s\""
@@ -22948,52 +23446,52 @@ msgstr "Misslyckades klona \"%s\". Nytt försök planlagt"
 msgid "Failed to clone '%s' a second time, aborting"
 msgstr "Misslyckades klona \"%s\" för andra gången, avbryter"
 
-#: builtin/submodule--helper.c:2373
+#: builtin/submodule--helper.c:2371
 #, c-format
 msgid "Unable to checkout '%s' in submodule path '%s'"
 msgstr "Kan inte checka ut \"%s\" i undermodulsökvägen \"%s\""
 
-#: builtin/submodule--helper.c:2377
+#: builtin/submodule--helper.c:2375
 #, c-format
 msgid "Unable to rebase '%s' in submodule path '%s'"
 msgstr "Kan inte ombasera \"%s\" i undermodulsökvägen \"%s\""
 
-#: builtin/submodule--helper.c:2381
+#: builtin/submodule--helper.c:2379
 #, c-format
 msgid "Unable to merge '%s' in submodule path '%s'"
 msgstr "Kan inte slå ihop \"%s\" i undermodulsökvägen \"%s\""
 
-#: builtin/submodule--helper.c:2385
+#: builtin/submodule--helper.c:2383
 #, c-format
 msgid "Execution of '%s %s' failed in submodule path '%s'"
 msgstr "Misslyckades köra \"%s %s\" i undermodulsökvägen \"%s\""
 
-#: builtin/submodule--helper.c:2409
+#: builtin/submodule--helper.c:2402
 #, c-format
 msgid "Submodule path '%s': checked out '%s'\n"
 msgstr "Undermodulsökvägen \"%s\": checkade ut \"%s\"\n"
 
-#: builtin/submodule--helper.c:2413
+#: builtin/submodule--helper.c:2406
 #, c-format
 msgid "Submodule path '%s': rebased into '%s'\n"
 msgstr "Undermodulsökvägen \"%s\": ombaserade in i \"%s\"\n"
 
-#: builtin/submodule--helper.c:2417
+#: builtin/submodule--helper.c:2410
 #, c-format
 msgid "Submodule path '%s': merged in '%s'\n"
 msgstr "Undermodulsökvägen \"%s\": sammanslagen i \"%s\"\n"
 
-#: builtin/submodule--helper.c:2421
+#: builtin/submodule--helper.c:2414
 #, c-format
 msgid "Submodule path '%s': '%s %s'\n"
 msgstr "Undermodulsökvägen \"%s\": \"%s %s\"\n"
 
-#: builtin/submodule--helper.c:2445
+#: builtin/submodule--helper.c:2438
 #, c-format
 msgid "Unable to fetch in submodule path '%s'; trying to directly fetch %s:"
 msgstr "Kan inte hämta i undermodulsökväg \"%s\"; försökte hämta %s direkt:"
 
-#: builtin/submodule--helper.c:2454
+#: builtin/submodule--helper.c:2447
 #, c-format
 msgid ""
 "Fetched in submodule path '%s', but it did not contain %s. Direct fetching "
@@ -23002,176 +23500,204 @@ msgstr ""
 "Hämtade i undermodulssökvägen \"%s\", men den innehöll inte %s. Direkt "
 "hämtning av incheckningen misslyckades."
 
-#: builtin/submodule--helper.c:2505 builtin/submodule--helper.c:2575
-#: builtin/submodule--helper.c:2813
+#: builtin/submodule--helper.c:2481
+#, c-format
+msgid ""
+"Submodule (%s) branch configured to inherit branch from superproject, but "
+"the superproject is not on any branch"
+msgstr ""
+"Undermodulens (%s) gren inställd på att ärva gren från huvudprojektet, men "
+"huvudprojektet är inte på någon gren"
+
+#: builtin/submodule--helper.c:2499
+#, c-format
+msgid "could not get a repository handle for submodule '%s'"
+msgstr "kunde inte få tag i arkivhandtag för undermodulen \"%s\""
+
+#: builtin/submodule--helper.c:2588
+#, c-format
+msgid "Unable to find current revision in submodule path '%s'"
+msgstr "Kan inte hitta aktuell revision i undermodulsökvägen \"%s\""
+
+#: builtin/submodule--helper.c:2599
+#, c-format
+msgid "Unable to fetch in submodule path '%s'"
+msgstr "Kan inte hämta i undermodulsökväg \"%s\""
+
+#: builtin/submodule--helper.c:2604
+#, c-format
+msgid "Unable to find %s revision in submodule path '%s'"
+msgstr "Kan inte hitta %s revision i undermodulsökvägen \"%s\""
+
+#: builtin/submodule--helper.c:2640
+#, c-format
+msgid "Failed to recurse into submodule path '%s'"
+msgstr "Misslyckades rekursera in i undermodulsökväg \"%s\""
+
+#: builtin/submodule--helper.c:2699
+msgid "force checkout updates"
+msgstr "tvinga utcheckningsuppdateringar"
+
+#: builtin/submodule--helper.c:2701
+msgid "initialize uninitialized submodules before update"
+msgstr "initiera oinitierade undermoduler före uppdateringen"
+
+#: builtin/submodule--helper.c:2703
+msgid "use SHA-1 of submodule's remote tracking branch"
+msgstr "använd SHA-1 från undermodulers fjärrspårningsgren"
+
+#: builtin/submodule--helper.c:2705
+msgid "traverse submodules recursively"
+msgstr "traversera undermoduler rekursivt"
+
+#: builtin/submodule--helper.c:2707
+msgid "don't fetch new objects from the remote site"
+msgstr "hämta inte nya objekt från fjärrplatsen"
+
+#: builtin/submodule--helper.c:2710 builtin/submodule--helper.c:2892
 msgid "path into the working tree"
 msgstr "sökväg inuti arbetskatalogen"
 
-#: builtin/submodule--helper.c:2508 builtin/submodule--helper.c:2580
+#: builtin/submodule--helper.c:2713
 msgid "path into the working tree, across nested submodule boundaries"
 msgstr "sökväg inuti arbetskatalogen, genom nästlade undermodulgränser"
 
-#: builtin/submodule--helper.c:2512 builtin/submodule--helper.c:2578
+#: builtin/submodule--helper.c:2717
 msgid "rebase, merge, checkout or none"
 msgstr "rebase, merge, checkout eller none"
 
-#: builtin/submodule--helper.c:2518
+#: builtin/submodule--helper.c:2723
 msgid "create a shallow clone truncated to the specified number of revisions"
 msgstr "skapa en grund klon trunkerad till angivet antal revisioner"
 
-#: builtin/submodule--helper.c:2521
+#: builtin/submodule--helper.c:2726
 msgid "parallel jobs"
 msgstr "parallella jobb"
 
-#: builtin/submodule--helper.c:2523
+#: builtin/submodule--helper.c:2728
 msgid "whether the initial clone should follow the shallow recommendation"
 msgstr "om den första klonen ska följa rekommendation för grund kloning"
 
-#: builtin/submodule--helper.c:2524
+#: builtin/submodule--helper.c:2729
 msgid "don't print cloning progress"
 msgstr "skriv inte klonförlopp"
 
-#: builtin/submodule--helper.c:2535
-msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
-msgstr "git submodule--helper update-clone [--prefix=<sökväg>] [<sökväg>...]"
-
-#: builtin/submodule--helper.c:2548
-msgid "bad value for update parameter"
-msgstr "felaktigt värde för parametern update"
-
-#: builtin/submodule--helper.c:2566
-msgid "suppress output for update by rebase or merge"
-msgstr "dölj utdata för uppdatering via ombasering eller sammanslagning{"
-
-#: builtin/submodule--helper.c:2567
-msgid "force checkout updates"
-msgstr "tvinga utcheckningsuppdateringar"
-
-#: builtin/submodule--helper.c:2569
-msgid "don't fetch new objects from the remote site"
-msgstr "hämta inte nya objekt från fjärrplatsen"
-
-#: builtin/submodule--helper.c:2571
-msgid "overrides update mode in case the repository is a fresh clone"
-msgstr "överstyr uppdateringsläge om arkviet är en färsk klon"
-
-#: builtin/submodule--helper.c:2572
-msgid "depth for shallow fetch"
-msgstr "djup för grund hämtning"
-
-#: builtin/submodule--helper.c:2582
-msgid "sha1"
-msgstr "sha1"
-
-#: builtin/submodule--helper.c:2583
-msgid "SHA1 expected by superproject"
-msgstr "SHA1 förväntades av överprojekt{"
-
-#: builtin/submodule--helper.c:2585
-msgid "subsha1"
-msgstr "subsha1"
-
-#: builtin/submodule--helper.c:2586
-msgid "SHA1 of submodule's HEAD"
-msgstr "SHA1 för undermodulens \"HEAD\""
-
-#: builtin/submodule--helper.c:2592
-msgid "git submodule--helper run-update-procedure [<options>] <path>"
-msgstr "git submodule--helper run-update-procedure [<flaggor>] <sökväg>"
-
-#: builtin/submodule--helper.c:2663
-#, c-format
+#: builtin/submodule--helper.c:2741
 msgid ""
-"Submodule (%s) branch configured to inherit branch from superproject, but "
-"the superproject is not on any branch"
+"git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] "
+"[-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-"
+"shallow] [--reference <repository>] [--recursive] [--[no-]single-branch] "
+"[--] [<path>...]"
 msgstr ""
-"Undermodulens (%s) gren inställd på att ärva gren från huvudprojektet, men "
-"huvudprojektet är inte på någon gren"
+"git submodule [--quiet] update [--init [--filter=<filterspecifikationer>]] "
+"[--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--"
+"[no-]recommend-shallow] [--reference <arkiv>] [--recursive] [--[no-]single-"
+"branch] [--] [<sökväg>...]"
 
-#: builtin/submodule--helper.c:2781
-#, c-format
-msgid "could not get a repository handle for submodule '%s'"
-msgstr "kunde inte få tag i arkivhandtag för undermodulen \"%s\""
+#: builtin/submodule--helper.c:2767
+msgid "bad value for update parameter"
+msgstr "felaktigt värde för parametern update"
 
-#: builtin/submodule--helper.c:2814
+#: builtin/submodule--helper.c:2893
 msgid "recurse into submodules"
 msgstr "rekursera ner i undermoduler"
 
-#: builtin/submodule--helper.c:2820
+#: builtin/submodule--helper.c:2899
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr "git submodule--helper absorb-git-dirs [<flaggor>] [<sökväg>...]"
 
-#: builtin/submodule--helper.c:2876
+#: builtin/submodule--helper.c:2955
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr "se om det är säkert att skriva till .gitmodules-filen"
 
-#: builtin/submodule--helper.c:2879
+#: builtin/submodule--helper.c:2958
 msgid "unset the config in the .gitmodules file"
 msgstr "ta bort konfigurationen från .gitmodules-filen"
 
-#: builtin/submodule--helper.c:2884
+#: builtin/submodule--helper.c:2963
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config <namn> [<värde>]"
 
-#: builtin/submodule--helper.c:2885
+#: builtin/submodule--helper.c:2964
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset <namn>"
 
-#: builtin/submodule--helper.c:2886
-msgid "git submodule--helper config --check-writeable"
-msgstr "git submodule--helper config --check-writeable"
-
-#: builtin/submodule--helper.c:2905 builtin/submodule--helper.c:3121
-#: builtin/submodule--helper.c:3277
+#: builtin/submodule--helper.c:2984 builtin/submodule--helper.c:3238
+#: builtin/submodule--helper.c:3395
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr "se till att .gitmodules finns i arbetskatalogen"
 
-#: builtin/submodule--helper.c:2921
+#: builtin/submodule--helper.c:3000
 msgid "suppress output for setting url of a submodule"
 msgstr "dölj utdata från inställning av url för undermodul"
 
-#: builtin/submodule--helper.c:2925
+#: builtin/submodule--helper.c:3004
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr "git submodule--helper set-url [--quiet] <sökväg> <nyurl>"
 
-#: builtin/submodule--helper.c:2958
+#: builtin/submodule--helper.c:3037
 msgid "set the default tracking branch to master"
 msgstr "välj master som förvald spårad gren"
 
-#: builtin/submodule--helper.c:2960
+#: builtin/submodule--helper.c:3039
 msgid "set the default tracking branch"
 msgstr "välj förvald spårad gren"
 
-#: builtin/submodule--helper.c:2964
+#: builtin/submodule--helper.c:3043
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr "git submodule--helper set-branch [-q|--quiet] (-d|--default) <sökväg>"
 
-#: builtin/submodule--helper.c:2965
+#: builtin/submodule--helper.c:3044
 msgid ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 msgstr ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <gren> <sökväg>"
 
-#: builtin/submodule--helper.c:2972
+#: builtin/submodule--helper.c:3051
 msgid "--branch or --default required"
 msgstr "--branch eller --default krävs"
 
-#: builtin/submodule--helper.c:3038
+#: builtin/submodule--helper.c:3072 builtin/submodule--helper.c:3375
+msgid "print only error messages"
+msgstr "visa endast felmeddelanden"
+
+#: builtin/submodule--helper.c:3073
+msgid "force creation"
+msgstr "tvinga skapande"
+
+#: builtin/submodule--helper.c:3081
+msgid "show whether the branch would be created"
+msgstr "visa om grenen skulle skapas"
+
+#: builtin/submodule--helper.c:3085
+msgid ""
+"git submodule--helper create-branch [-f|--force] [--create-reflog] [-q|--"
+"quiet] [-t|--track] [-n|--dry-run] <name> <start-oid> <start-name>"
+msgstr ""
+"git submodule--helper create-branch [-f|--force] [--create-reflog] [-q|--"
+"quiet] [-t|--track] [-n|--dry-run] <namn> <start-oid> <start-namn>"
+
+#: builtin/submodule--helper.c:3097
+#, c-format
+msgid "creating branch '%s'"
+msgstr "skapar grenen \"%s\""
+
+#: builtin/submodule--helper.c:3155
 #, c-format
 msgid "Adding existing repo at '%s' to the index\n"
 msgstr "Lägger till befintligt arkiv i \"%s\" i indexet\n"
 
-#: builtin/submodule--helper.c:3041
+#: builtin/submodule--helper.c:3158
 #, c-format
 msgid "'%s' already exists and is not a valid git repo"
 msgstr "\"%s\" finns redan och är inte ett giltigt git-arkiv"
 
-#: builtin/submodule--helper.c:3054
+#: builtin/submodule--helper.c:3171
 #, c-format
 msgid "A git directory for '%s' is found locally with remote(s):\n"
 msgstr "En git-katalog för \"%s\" hittades lokalt med fjärr(ar):\n"
 
-#: builtin/submodule--helper.c:3061
+#: builtin/submodule--helper.c:3178
 #, c-format
 msgid ""
 "If you want to reuse this local git directory instead of cloning again from\n"
@@ -23189,54 +23715,50 @@ msgstr ""
 "arkiv eller om du är osäker på vad det här betyder, välj ett annat namn med\n"
 "flaggan \"--name\"."
 
-#: builtin/submodule--helper.c:3073
+#: builtin/submodule--helper.c:3190
 #, c-format
 msgid "Reactivating local git directory for submodule '%s'\n"
 msgstr "Aktiverar lokal git-katalog för undermodulen \"%s\" på nytt.\n"
 
-#: builtin/submodule--helper.c:3110
+#: builtin/submodule--helper.c:3227
 #, c-format
 msgid "unable to checkout submodule '%s'"
 msgstr "Kan inte checka ut undermodulen \"%s\""
 
-#: builtin/submodule--helper.c:3149
+#: builtin/submodule--helper.c:3266
 #, c-format
 msgid "Failed to add submodule '%s'"
 msgstr "Misslyckades lägga till undermodulen \"%s\""
 
-#: builtin/submodule--helper.c:3153 builtin/submodule--helper.c:3158
-#: builtin/submodule--helper.c:3166
+#: builtin/submodule--helper.c:3270 builtin/submodule--helper.c:3275
+#: builtin/submodule--helper.c:3283
 #, c-format
 msgid "Failed to register submodule '%s'"
 msgstr "Misslyckades registrera undermodulen \"%s\""
 
-#: builtin/submodule--helper.c:3222
+#: builtin/submodule--helper.c:3339
 #, c-format
 msgid "'%s' already exists in the index"
 msgstr "\"%s\" finns redan i indexet"
 
-#: builtin/submodule--helper.c:3225
+#: builtin/submodule--helper.c:3342
 #, c-format
 msgid "'%s' already exists in the index and is not a submodule"
 msgstr "\"%s\" finns redan i indexet och är inte en undermodul"
 
-#: builtin/submodule--helper.c:3254
+#: builtin/submodule--helper.c:3372
 msgid "branch of repository to add as submodule"
 msgstr "gren från arkivet att lägga till som undermodul"
 
-#: builtin/submodule--helper.c:3255
+#: builtin/submodule--helper.c:3373
 msgid "allow adding an otherwise ignored submodule path"
 msgstr "tillåt lägga till en annars ignorerad undermodulsökväg"
 
-#: builtin/submodule--helper.c:3257
-msgid "print only error messages"
-msgstr "visa endast felmeddelanden"
-
-#: builtin/submodule--helper.c:3261
+#: builtin/submodule--helper.c:3379
 msgid "borrow the objects from reference repositories"
 msgstr "låna objekt från referensarkiv"
 
-#: builtin/submodule--helper.c:3263
+#: builtin/submodule--helper.c:3381
 msgid ""
 "sets the submodule’s name to the given string instead of defaulting to its "
 "path"
@@ -23244,30 +23766,30 @@ msgstr ""
 "sätter undermodulens namn till den angivna strängen istället för att använda "
 "sökvägen"
 
-#: builtin/submodule--helper.c:3270
+#: builtin/submodule--helper.c:3388
 msgid "git submodule--helper add [<options>] [--] <repository> [<path>]"
 msgstr "git submodule--helper add [<flaggor>] [--] <arkiv> [<sökväg>]"
 
-#: builtin/submodule--helper.c:3298
+#: builtin/submodule--helper.c:3416
 msgid "Relative path can only be used from the toplevel of the working tree"
 msgstr "Relativ sökväg kan endast användas från arbetskatalogens toppnivå"
 
-#: builtin/submodule--helper.c:3306
+#: builtin/submodule--helper.c:3425
 #, c-format
 msgid "repo URL: '%s' must be absolute or begin with ./|../"
 msgstr "arkiv-URL: \"%s\" måste vara absolut eller börja med ./|../"
 
-#: builtin/submodule--helper.c:3341
+#: builtin/submodule--helper.c:3460
 #, c-format
 msgid "'%s' is not a valid submodule name"
 msgstr "\"%s\" är inte ett giltigt namn på undermodul"
 
-#: builtin/submodule--helper.c:3405 git.c:452 git.c:726
+#: builtin/submodule--helper.c:3520 git.c:453 git.c:729
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s stöder inte --super-prefix"
 
-#: builtin/submodule--helper.c:3411
+#: builtin/submodule--helper.c:3526
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "\"%s\" är inte ett giltigt underkommando till submodule--helper"
@@ -23301,7 +23823,7 @@ msgstr "skäl"
 msgid "reason of the update"
 msgstr "skäl till uppdateringen"
 
-#: builtin/tag.c:25
+#: builtin/tag.c:26
 msgid ""
 "git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]\n"
 "        <tagname> [<head>]"
@@ -23309,11 +23831,11 @@ msgstr ""
 "git tag [-a | -s | -u <nyckel-id>] [-f] [-m <medd> | -F <fil>]\n"
 "        <taggnamn> [<huvud>]"
 
-#: builtin/tag.c:27
+#: builtin/tag.c:28
 msgid "git tag -d <tagname>..."
 msgstr "git tag -d <taggnamn>..."
 
-#: builtin/tag.c:28
+#: builtin/tag.c:29
 msgid ""
 "git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--"
 "points-at <object>]\n"
@@ -23325,21 +23847,21 @@ msgstr ""
 "        [--format=<format>] [--merged <incheckning>] [--no-merged "
 "<incheckning>] [<mönster>...]"
 
-#: builtin/tag.c:30
+#: builtin/tag.c:31
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr "git tag -v [--format=<format>] <taggnamn>..."
 
-#: builtin/tag.c:100
+#: builtin/tag.c:101
 #, c-format
 msgid "tag '%s' not found."
 msgstr "taggen \"%s\" hittades inte."
 
-#: builtin/tag.c:135
+#: builtin/tag.c:136
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr "Tog bort tagg \"%s\" (var %s)\n"
 
-#: builtin/tag.c:170
+#: builtin/tag.c:171
 #, c-format
 msgid ""
 "\n"
@@ -23352,7 +23874,7 @@ msgstr ""
 "  %s\n"
 "Rader som inleds med \"%c\" ignoreras.\n"
 
-#: builtin/tag.c:174
+#: builtin/tag.c:175
 #, c-format
 msgid ""
 "\n"
@@ -23367,11 +23889,11 @@ msgstr ""
 "Rader som inleds med \"%c\" kommer behållas; du kan själv ta bort dem om\n"
 "du vill.\n"
 
-#: builtin/tag.c:240
+#: builtin/tag.c:241
 msgid "unable to sign the tag"
 msgstr "kunde inte signera taggen"
 
-#: builtin/tag.c:258
+#: builtin/tag.c:259
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -23384,115 +23906,119 @@ msgstr ""
 "\n"
 "\tgit tag -f %s %s^{}"
 
-#: builtin/tag.c:274
+#: builtin/tag.c:275
 msgid "bad object type."
 msgstr "felaktig objekttyp."
 
-#: builtin/tag.c:325
+#: builtin/tag.c:326
 msgid "no tag message?"
 msgstr "inget taggmeddelande?"
 
-#: builtin/tag.c:332
+#: builtin/tag.c:333
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "Taggmeddelandet har lämnats i %s\n"
 
-#: builtin/tag.c:444
+#: builtin/tag.c:445
 msgid "list tag names"
 msgstr "lista taggnamn"
 
-#: builtin/tag.c:446
+#: builtin/tag.c:447
 msgid "print <n> lines of each tag message"
 msgstr "visa <n> rader från varje taggmeddelande"
 
-#: builtin/tag.c:448
+#: builtin/tag.c:449
 msgid "delete tags"
 msgstr "ta bort taggar"
 
-#: builtin/tag.c:449
+#: builtin/tag.c:450
 msgid "verify tags"
 msgstr "verifiera taggar"
 
-#: builtin/tag.c:451
+#: builtin/tag.c:452
 msgid "Tag creation options"
 msgstr "Alternativ för att skapa taggar"
 
-#: builtin/tag.c:453
+#: builtin/tag.c:454
 msgid "annotated tag, needs a message"
 msgstr "annoterad tagg, behöver meddelande"
 
-#: builtin/tag.c:455
+#: builtin/tag.c:456
 msgid "tag message"
 msgstr "taggmeddelande"
 
-#: builtin/tag.c:457
+#: builtin/tag.c:458
 msgid "force edit of tag message"
 msgstr "tvinga redigering av incheckningsmeddelande"
 
-#: builtin/tag.c:458
+#: builtin/tag.c:459
 msgid "annotated and GPG-signed tag"
 msgstr "annoterad och GPG-signerad tagg"
 
-#: builtin/tag.c:461
+#: builtin/tag.c:462
 msgid "use another key to sign the tag"
 msgstr "använd annan nyckel för att signera taggen"
 
-#: builtin/tag.c:462
+#: builtin/tag.c:463
 msgid "replace the tag if exists"
 msgstr "ersätt taggen om den finns"
 
-#: builtin/tag.c:463 builtin/update-ref.c:511
+#: builtin/tag.c:464 builtin/update-ref.c:511
 msgid "create a reflog"
 msgstr "skapa en reflog"
 
-#: builtin/tag.c:465
+#: builtin/tag.c:466
 msgid "Tag listing options"
 msgstr "Alternativ för listning av taggar"
 
-#: builtin/tag.c:466
+#: builtin/tag.c:467
 msgid "show tag list in columns"
 msgstr "lista taggar i spalter"
 
-#: builtin/tag.c:467 builtin/tag.c:469
+#: builtin/tag.c:468 builtin/tag.c:470
 msgid "print only tags that contain the commit"
 msgstr "visa endast taggar som innehåller incheckningen"
 
-#: builtin/tag.c:468 builtin/tag.c:470
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that don't contain the commit"
 msgstr "visa endast taggar som inte innehåller incheckningen"
 
-#: builtin/tag.c:471
+#: builtin/tag.c:472
 msgid "print only tags that are merged"
 msgstr "visa endast taggar som slagits samman"
 
-#: builtin/tag.c:472
+#: builtin/tag.c:473
 msgid "print only tags that are not merged"
 msgstr "visa endast taggar som ej slagits samman"
 
-#: builtin/tag.c:476
+#: builtin/tag.c:477
 msgid "print only tags of the object"
 msgstr "visa endast taggar för objektet"
 
-#: builtin/tag.c:558
+#: builtin/tag.c:559
 #, c-format
 msgid "the '%s' option is only allowed in list mode"
 msgstr "flaggan \"%s\" är endast tillåten i listläge"
 
-#: builtin/tag.c:597
+#: builtin/tag.c:598
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "\"%s\" är inte ett giltigt taggnamn."
 
-#: builtin/tag.c:602
+#: builtin/tag.c:603
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "taggen \"%s\" finns redan"
 
-#: builtin/tag.c:633
+#: builtin/tag.c:634
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "Uppdaterad tagg \"%s\" (var %s)\n"
 
+#: builtin/unpack-objects.c:95
+msgid "pack exceeds maximum allowed size"
+msgstr "paket är större än tillåten maximal storlek"
+
 #: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
 msgstr "Packar upp objekt"
@@ -23552,143 +24078,143 @@ msgstr " OK"
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<flaggor>] [--] [<fil>...]"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:993
 msgid "continue refresh even when index needs update"
 msgstr "fortsätt uppdatera även när index inte är àjour"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:996
 msgid "refresh: ignore submodules"
 msgstr "refresh: ignorera undermoduler"
 
-#: builtin/update-index.c:980
+#: builtin/update-index.c:999
 msgid "do not ignore new files"
 msgstr "ignorera inte nya filer"
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:1001
 msgid "let files replace directories and vice-versa"
 msgstr "låt filer ersätta kataloger och omvänt"
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:1003
 msgid "notice files missing from worktree"
 msgstr "lägg märke till filer som saknas i arbetskatalogen"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:1005
 msgid "refresh even if index contains unmerged entries"
 msgstr "uppdatera även om indexet innehåller ej sammanslagna poster"
 
-#: builtin/update-index.c:989
+#: builtin/update-index.c:1008
 msgid "refresh stat information"
 msgstr "uppdatera statusinformation"
 
-#: builtin/update-index.c:993
+#: builtin/update-index.c:1012
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "som --refresh, men ignorera assume-unchanged-inställning"
 
-#: builtin/update-index.c:997
+#: builtin/update-index.c:1016
 msgid "<mode>,<object>,<path>"
 msgstr "<läge>,<objekt>,<sökväg>"
 
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1017
 msgid "add the specified entry to the index"
 msgstr "lägg till angiven post i indexet"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1027
 msgid "mark files as \"not changing\""
 msgstr "markera filer som \"ändras inte\""
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1030
 msgid "clear assumed-unchanged bit"
 msgstr "rensa \"assume-unchanged\"-biten"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1033
 msgid "mark files as \"index-only\""
 msgstr "markera filer som \"endast index\""
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1036
 msgid "clear skip-worktree bit"
 msgstr "töm \"skip-worktree\"-biten"
 
-#: builtin/update-index.c:1020
+#: builtin/update-index.c:1039
 msgid "do not touch index-only entries"
 msgstr "rör inte \"endast index\"-poster"
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1041
 msgid "add to index only; do not add content to object database"
 msgstr "lägg endast till indexet; lägg inte till innehållet i objektdatabasen"
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1043
 msgid "remove named paths even if present in worktree"
 msgstr "ta bort namngivna sökvägar även om de finns i arbetskatalogen"
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1045
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "med --stdin: indatarader termineras med null-byte"
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1047
 msgid "read list of paths to be updated from standard input"
 msgstr "läs lista över sökvägar att uppdatera från standard in"
 
-#: builtin/update-index.c:1032
+#: builtin/update-index.c:1051
 msgid "add entries from standard input to the index"
 msgstr "lägg poster från standard in till indexet"
 
-#: builtin/update-index.c:1036
+#: builtin/update-index.c:1055
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "återfyll etapp 2 och 3 från angivna sökvägar"
 
-#: builtin/update-index.c:1040
+#: builtin/update-index.c:1059
 msgid "only update entries that differ from HEAD"
 msgstr "uppdatera endast poster som skiljer sig från HEAD"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1063
 msgid "ignore files missing from worktree"
 msgstr "ignorera filer som saknas i arbetskatalogen"
 
-#: builtin/update-index.c:1047
+#: builtin/update-index.c:1066
 msgid "report actions to standard output"
 msgstr "rapportera åtgärder på standard ut"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1068
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(för porslin) glöm sparade olösta konflikter"
 
-#: builtin/update-index.c:1053
+#: builtin/update-index.c:1072
 msgid "write index in this format"
 msgstr "skriv index i detta format"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1074
 msgid "enable or disable split index"
 msgstr "aktivera eller inaktivera delat index"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1076
 msgid "enable/disable untracked cache"
 msgstr "aktivera/inaktivera ospårad cache"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1078
 msgid "test if the filesystem supports untracked cache"
 msgstr "testa om filsystemet stöder ospårad cache"
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1080
 msgid "enable untracked cache without testing the filesystem"
 msgstr "aktivera ospårad cache utan att testa filsystemet"
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1082
 msgid "write out the index even if is not flagged as changed"
 msgstr "skriv ut indexet även om det inte angivits som ändrat"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1084
 msgid "enable or disable file system monitor"
 msgstr "aktivera eller inaktivera filsystemsövervakning"
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1086
 msgid "mark files as fsmonitor valid"
 msgstr "markera filer som \"fsmonitor valid\""
 
-#: builtin/update-index.c:1070
+#: builtin/update-index.c:1089
 msgid "clear fsmonitor valid bit"
 msgstr "töm \"fsmonitor valid\"-bit"
 
-#: builtin/update-index.c:1173
+#: builtin/update-index.c:1195
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
@@ -23696,7 +24222,7 @@ msgstr ""
 "core.splitIndex är satt till false; ta bort eller ändra det om du verkligen "
 "vill aktivera delat index"
 
-#: builtin/update-index.c:1182
+#: builtin/update-index.c:1204
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
@@ -23704,7 +24230,7 @@ msgstr ""
 "core.splitIndex är satt till true; ta bort eller ändra det om du verkligen "
 "vill inaktivera delat index"
 
-#: builtin/update-index.c:1194
+#: builtin/update-index.c:1216
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -23712,11 +24238,11 @@ msgstr ""
 "core.untrackedCache är satt till true; ta bort eller ändra det om du "
 "verkligen vill inaktivera den ospårade cachen"
 
-#: builtin/update-index.c:1198
+#: builtin/update-index.c:1220
 msgid "Untracked cache disabled"
 msgstr "Ospårad cache är inaktiverad"
 
-#: builtin/update-index.c:1206
+#: builtin/update-index.c:1228
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -23724,26 +24250,26 @@ msgstr ""
 "core.untrackedCache är satt till false; ta bort eller ändra det om du "
 "verkligen vill aktivera den ospårade cachen"
 
-#: builtin/update-index.c:1210
+#: builtin/update-index.c:1232
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "Ospårad cache är aktiverad för \"%s\""
 
-#: builtin/update-index.c:1218
+#: builtin/update-index.c:1241
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr "core.fsmonitor inte satt; sätt om du verkligen vill aktivera fsmonitor"
 
-#: builtin/update-index.c:1222
+#: builtin/update-index.c:1246
 msgid "fsmonitor enabled"
 msgstr "fsmonitor aktiverat"
 
-#: builtin/update-index.c:1225
+#: builtin/update-index.c:1250
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 "core.fsmonitor är satt; ta bort om du verkligen vill inaktivera fsmonitor"
 
-#: builtin/update-index.c:1229
+#: builtin/update-index.c:1254
 msgid "fsmonitor disabled"
 msgstr "fsmonitor inaktiverat"
 
@@ -23775,10 +24301,6 @@ msgstr "standard in har NUL-terminerade argument"
 msgid "read updates from stdin"
 msgstr "läs uppdateringar från standard in"
 
-#: builtin/update-server-info.c:7
-msgid "git update-server-info [--force]"
-msgstr "git update-server-info [--force]"
-
 #: builtin/update-server-info.c:15
 msgid "update the info files from scratch"
 msgstr "uppdatera informationsfilerna från grunden"
@@ -23860,33 +24382,37 @@ msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<flaggor>] <arbetskatalog>"
 
 #: builtin/worktree.c:25
+msgid "git worktree repair [<path>...]"
+msgstr "git worktree repair [<sökväg>...]"
+
+#: builtin/worktree.c:26
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <sökväg>"
 
-#: builtin/worktree.c:75
+#: builtin/worktree.c:76
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr "Tar bort %s/%s: %s"
 
-#: builtin/worktree.c:148
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
 msgstr "rapportera borttagna arbetskataloger"
 
-#: builtin/worktree.c:150
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr "låt tid gå ut för arbetskataloger äldre än <tid>"
 
-#: builtin/worktree.c:220
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr "\"%s\" finns redan"
 
-#: builtin/worktree.c:229
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
 msgstr "oanvändbar mål för arbetskatalog \"%s\""
 
-#: builtin/worktree.c:234
+#: builtin/worktree.c:235
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -23896,7 +24422,7 @@ msgstr ""
 "använd \"%s -f -f\" för att överstyra, eller \"unlock\" och \"prune\" eller "
 "\"remove\" för att rensa"
 
-#: builtin/worktree.c:236
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -23906,129 +24432,151 @@ msgstr ""
 "använd \"%s -f\" för att överstyra, eller \"prune\" eller \"remove\" för att "
 "rensa"
 
-#: builtin/worktree.c:287
+#: builtin/worktree.c:248
+#, c-format
+msgid "failed to copy '%s' to '%s'; sparse-checkout may not work correctly"
+msgstr ""
+"misslyckades kopiera \"%s\" till \"%s\"; sparse-checkout kanske inte kommer "
+"att fungera korrekt"
+
+#: builtin/worktree.c:268
+#, c-format
+msgid "failed to copy worktree config from '%s' to '%s'"
+msgstr ""
+"misslyckades kopiera arbetskatalogkonfiguration från \"%s\" till \"%s\""
+
+#: builtin/worktree.c:280 builtin/worktree.c:285
+#, c-format
+msgid "failed to unset '%s' in '%s'"
+msgstr "misslyckades slå av \"%s\" i \"%s\""
+
+#: builtin/worktree.c:356
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "kunde inte skapa katalogen \"%s\""
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:378
 msgid "initializing"
 msgstr "initierar"
 
-#: builtin/worktree.c:420 builtin/worktree.c:426
+#: builtin/worktree.c:492 builtin/worktree.c:498
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "Förbereder arbetskatalog (ny gren \"%s\")"
 
-#: builtin/worktree.c:422
+#: builtin/worktree.c:494
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr "Förbereder arbetskatalog (återställer gren \"%s\"; var på %s)"
 
-#: builtin/worktree.c:431
+#: builtin/worktree.c:503
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "Förbereder arbetskatalog (checkar ut \"%s\")"
 
-#: builtin/worktree.c:437
+#: builtin/worktree.c:509
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Förbereder arbetskatalog (frånkopplat HEAD %s)"
 
-#: builtin/worktree.c:482
+#: builtin/worktree.c:554
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr ""
 "checka ut <gren> även om den redan är utcheckad i en annan arbetskatalog"
 
-#: builtin/worktree.c:485
+#: builtin/worktree.c:557
 msgid "create a new branch"
 msgstr "skapa en ny gren"
 
-#: builtin/worktree.c:487
+#: builtin/worktree.c:559
 msgid "create or reset a branch"
 msgstr "skapa eller återställ en gren"
 
-#: builtin/worktree.c:489
+#: builtin/worktree.c:561
 msgid "populate the new working tree"
 msgstr "befolka den nya arbetskatalogen"
 
-#: builtin/worktree.c:490
+#: builtin/worktree.c:562
 msgid "keep the new working tree locked"
 msgstr "låt arbetskatalogen förbli låst"
 
-#: builtin/worktree.c:492 builtin/worktree.c:729
+#: builtin/worktree.c:564 builtin/worktree.c:809
 msgid "reason for locking"
 msgstr "orsak till lås"
 
-#: builtin/worktree.c:495
+#: builtin/worktree.c:567
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "ställ in spårningsläge (se git-branch(1))"
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:570
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "försök träffa namn på ny gren mot en fjärrspårande gren"
 
-#: builtin/worktree.c:512
+#: builtin/worktree.c:584
 msgid "added with --lock"
 msgstr "lagt till med --lock"
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:646
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "--[no-]track kan endast användas när ny gran skapas"
 
-#: builtin/worktree.c:691
+#: builtin/worktree.c:766
 msgid "show extended annotations and reasons, if available"
 msgstr "visa utökade annoteringar och grunder, om tillgängliga"
 
-#: builtin/worktree.c:693
+#: builtin/worktree.c:768
 msgid "add 'prunable' annotation to worktrees older than <time>"
 msgstr ""
 "lägg till \"prunable\"-annoteringar till arbetskataloger äldre än <tid>"
 
-#: builtin/worktree.c:741 builtin/worktree.c:774 builtin/worktree.c:848
-#: builtin/worktree.c:972
+#: builtin/worktree.c:770
+msgid "terminate records with a NUL character"
+msgstr "avsluta poster med NUL-tecken"
+
+#: builtin/worktree.c:821 builtin/worktree.c:854 builtin/worktree.c:928
+#: builtin/worktree.c:1052
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "\"%s\" är inte en arbetskatalog"
 
-#: builtin/worktree.c:743 builtin/worktree.c:776
+#: builtin/worktree.c:823 builtin/worktree.c:856
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "Huvudarbetskatalogen kan inte låsas eller låsas upp"
 
-#: builtin/worktree.c:748
+#: builtin/worktree.c:828
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "\"%s\" är redan låst, orsak: %s"
 
-#: builtin/worktree.c:750
+#: builtin/worktree.c:830
 #, c-format
 msgid "'%s' is already locked"
 msgstr "\"%s\" är redan låst"
 
-#: builtin/worktree.c:778
+#: builtin/worktree.c:858
 #, c-format
 msgid "'%s' is not locked"
 msgstr "\"%s\" är inte låst"
 
-#: builtin/worktree.c:819
+#: builtin/worktree.c:899
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr "arbetskataloger med undermoduler kan inte flyttas eller tas bort"
 
-#: builtin/worktree.c:827
+#: builtin/worktree.c:907
 msgid "force move even if worktree is dirty or locked"
 msgstr "tvinga flyttning även om arbetskatalogen är smutsig eller låst"
 
-#: builtin/worktree.c:850 builtin/worktree.c:974
+#: builtin/worktree.c:930 builtin/worktree.c:1054
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "\"%s\" är inte en huvudarbetskatalog"
 
-#: builtin/worktree.c:855
+#: builtin/worktree.c:935
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "kunde inte lista ut målnamn från \"%s\""
 
-#: builtin/worktree.c:868
+#: builtin/worktree.c:948
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -24037,7 +24585,7 @@ msgstr ""
 "kan inte flytta en låst arbetskatalog, orsak till lås: %s\n"
 "använd \"move -f -f\" för att överstyra, eller lås upp först"
 
-#: builtin/worktree.c:870
+#: builtin/worktree.c:950
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -24045,38 +24593,38 @@ msgstr ""
 "kan inte flytta en låst arbetskatalog;\n"
 "använd \"move -f -f\" för att överstyra, eller lås upp först"
 
-#: builtin/worktree.c:873
+#: builtin/worktree.c:953
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "kontroll misslyckades, kan inte flytta arbetskatalog: %s"
 
-#: builtin/worktree.c:878
+#: builtin/worktree.c:958
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "misslyckades flytta \"%s\" till \"%s\""
 
-#: builtin/worktree.c:924
+#: builtin/worktree.c:1004
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "misslyckades köra \"git status\" på \"%s\""
 
-#: builtin/worktree.c:928
+#: builtin/worktree.c:1008
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
 "\"%s\" innehåller ändrade eller ospårade filer, använd --force för att ta "
 "bort det"
 
-#: builtin/worktree.c:933
+#: builtin/worktree.c:1013
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "misslyckades köra \"git status\" på \"%s\", kod %d"
 
-#: builtin/worktree.c:956
+#: builtin/worktree.c:1036
 msgid "force removal even if worktree is dirty or locked"
 msgstr "tvinga ta bort även om arbetskatalogen är smutsig eller låst"
 
-#: builtin/worktree.c:979
+#: builtin/worktree.c:1059
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -24085,7 +24633,7 @@ msgstr ""
 "kan inte ta bort en låst arbetskatalog, orsak till låset: %s\n"
 "använd \"remove -f -f\" för att överstyra, eller lås upp först"
 
-#: builtin/worktree.c:981
+#: builtin/worktree.c:1061
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -24093,17 +24641,17 @@ msgstr ""
 "kan inte ta bort en låst arbetskatalog;\n"
 "använd \"remove -f -f\" för att överstyra, eller lås upp först"
 
-#: builtin/worktree.c:984
+#: builtin/worktree.c:1064
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "kontroll misslyckades, kan inte ta bort arbetskatalog: %s"
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:1088
 #, c-format
 msgid "repair: %s: %s"
 msgstr "reparera: %s: %s"
 
-#: builtin/worktree.c:1011
+#: builtin/worktree.c:1091
 #, c-format
 msgid "error: %s: %s"
 msgstr "fel: %s: %s"
@@ -24209,29 +24757,29 @@ msgstr "tomt alias för %s"
 msgid "recursive alias: %s"
 msgstr "rekursivt alias: %s"
 
-#: git.c:479
+#: git.c:480
 msgid "write failure on standard output"
 msgstr "skrivfel på standard ut"
 
-#: git.c:481
+#: git.c:482
 msgid "unknown write failure on standard output"
 msgstr "okänt skrivfel på standard ut"
 
-#: git.c:483
+#: git.c:484
 msgid "close failed on standard output"
 msgstr "stäng misslyckades på standard ut"
 
-#: git.c:835
+#: git.c:838
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr "alias-slinga detekterades: expansionen av \"%s\" avslutas aldrig:%s"
 
-#: git.c:885
+#: git.c:888
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "kan inte hantera %s som inbyggd"
 
-#: git.c:898
+#: git.c:901
 #, c-format
 msgid ""
 "usage: %s\n"
@@ -24240,13 +24788,13 @@ msgstr ""
 "användning: %s\n"
 "\n"
 
-#: git.c:918
+#: git.c:921
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr ""
 "expandering av alias \"%s\" misslyckades; \"%s\" är inte ett git-kommando\n"
 
-#: git.c:930
+#: git.c:933
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "misslyckades köra kommandot \"%s\": %s\n"
@@ -24402,139 +24950,139 @@ msgstr ""
 "        bad om: %s\n"
 "  omdirigering: %s"
 
-#: remote-curl.c:183
+#: remote-curl.c:184
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr "felaktig citering på värde för push-option: \"%s\""
 
-#: remote-curl.c:304
+#: remote-curl.c:308
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr "%sinfo/refs inte giltig: är detta ett git-arkiv?"
 
-#: remote-curl.c:405
+#: remote-curl.c:409
 msgid "invalid server response; expected service, got flush packet"
 msgstr "ogiltigt svar från servern; förväntade tjänst, fick flush-paket"
 
-#: remote-curl.c:436
+#: remote-curl.c:440
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr "ogiltigt svar från servern; fick \"%s\""
 
-#: remote-curl.c:496
+#: remote-curl.c:500
 #, c-format
 msgid "repository '%s' not found"
 msgstr "arkivet \"%s\" hittades inte"
 
-#: remote-curl.c:500
+#: remote-curl.c:504
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr "Autentisering misslyckades \"%s\""
 
-#: remote-curl.c:504
+#: remote-curl.c:508
 #, c-format
 msgid "unable to access '%s' with http.pinnedPubkey configuration: %s"
 msgstr "kan inte nå \"%s\" med http.pinnedPubkey inställt till: %s"
 
-#: remote-curl.c:508
+#: remote-curl.c:512
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "kan inte komma åt \"%s\": %s"
 
-#: remote-curl.c:514
+#: remote-curl.c:518
 #, c-format
 msgid "redirecting to %s"
 msgstr "omdirigerar till %s"
 
-#: remote-curl.c:645
+#: remote-curl.c:649
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr "borde inte ha EOF när inte försiktig på EOF"
 
-#: remote-curl.c:657
+#: remote-curl.c:661
 msgid "remote server sent unexpected response end packet"
 msgstr "fjärrservern sände oväntat svarsavslutningspaketet"
 
-#: remote-curl.c:726
+#: remote-curl.c:730
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr "kunde inte spola tillbaka rpc-postdata - försök öka http.postBuffer"
 
-#: remote-curl.c:755
+#: remote-curl.c:759
 #, c-format
 msgid "remote-curl: bad line length character: %.4s"
 msgstr "remote-curl: felaktig radlängdstecken: %.4s"
 
-#: remote-curl.c:757
+#: remote-curl.c:761
 msgid "remote-curl: unexpected response end packet"
 msgstr "remote-curl: oväntat svarsavslutningspaketet"
 
-#: remote-curl.c:833
+#: remote-curl.c:837
 #, c-format
 msgid "RPC failed; %s"
 msgstr "RPC misslyckades; %s"
 
-#: remote-curl.c:873
+#: remote-curl.c:877
 msgid "cannot handle pushes this big"
 msgstr "kan inte hantera så stora sändningar"
 
-#: remote-curl.c:986
+#: remote-curl.c:990
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr "kan inte packa upp anrop; zlib-deflate-fel %d"
 
-#: remote-curl.c:990
+#: remote-curl.c:994
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr "kan inte packa upp anrop; zlib-slutfel %d"
 
-#: remote-curl.c:1040
+#: remote-curl.c:1044
 #, c-format
 msgid "%d bytes of length header were received"
 msgstr "%d byte av längd-huvudet togs emot"
 
-#: remote-curl.c:1042
+#: remote-curl.c:1046
 #, c-format
 msgid "%d bytes of body are still expected"
 msgstr "%d byte av kroppen väntas fortfarande"
 
-#: remote-curl.c:1131
+#: remote-curl.c:1135
 msgid "dumb http transport does not support shallow capabilities"
 msgstr "dum http-transport stöder inte grunda arkiv"
 
-#: remote-curl.c:1146
+#: remote-curl.c:1150
 msgid "fetch failed."
 msgstr "mottagning misslyckades."
 
-#: remote-curl.c:1192
+#: remote-curl.c:1198
 msgid "cannot fetch by sha1 over smart http"
 msgstr "kan inte hämta med sha1 över smart http"
 
-#: remote-curl.c:1236 remote-curl.c:1242
+#: remote-curl.c:1242 remote-curl.c:1248
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr "protokollfel: förväntade sha/ref, fick \"%s\""
 
-#: remote-curl.c:1254 remote-curl.c:1372
+#: remote-curl.c:1260 remote-curl.c:1378
 #, c-format
 msgid "http transport does not support %s"
 msgstr "http-transporten stöder inte %s"
 
-#: remote-curl.c:1290
+#: remote-curl.c:1296
 msgid "git-http-push failed"
 msgstr "git-http-push misslyckades"
 
-#: remote-curl.c:1478
+#: remote-curl.c:1485
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr "remote-curl: användning: git remote-curl <fjärr> [<url>]"
 
-#: remote-curl.c:1510
+#: remote-curl.c:1517
 msgid "remote-curl: error reading command stream from git"
 msgstr "remote-curl: fel vid läsning av kommandoström från git"
 
-#: remote-curl.c:1517
+#: remote-curl.c:1524
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr "remote-curl: försökte ta emot utan lokalt arkiv"
 
-#: remote-curl.c:1558
+#: remote-curl.c:1565
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr "remote-curl: okänt kommando \"%s\" från git"
@@ -24547,122 +25095,122 @@ msgstr "behöver en arbetskatalog"
 msgid "could not find enlistment root"
 msgstr "kunde inte hitta enrolleringsroten"
 
-#: contrib/scalar/scalar.c:89 contrib/scalar/scalar.c:351
-#: contrib/scalar/scalar.c:436 contrib/scalar/scalar.c:579
+#: contrib/scalar/scalar.c:89 contrib/scalar/scalar.c:350
+#: contrib/scalar/scalar.c:435 contrib/scalar/scalar.c:578
 #, c-format
 msgid "could not switch to '%s'"
 msgstr "kunde inte växla till \"%s\""
 
-#: contrib/scalar/scalar.c:180
+#: contrib/scalar/scalar.c:179
 #, c-format
 msgid "could not configure %s=%s"
 msgstr "kunde inte ställa in %s=%s"
 
-#: contrib/scalar/scalar.c:198
+#: contrib/scalar/scalar.c:197
 msgid "could not configure log.excludeDecoration"
 msgstr "kunde inte ställa in log.excludeDecoration"
 
-#: contrib/scalar/scalar.c:219
+#: contrib/scalar/scalar.c:218
 msgid "Scalar enlistments require a worktree"
 msgstr "Scalar-enrolleringar kräver en arbetskatalog"
 
-#: contrib/scalar/scalar.c:311
+#: contrib/scalar/scalar.c:310
 #, c-format
 msgid "remote HEAD is not a branch: '%.*s'"
 msgstr "HEAD hos fjärren är inte en gren: \"%.*s\""
 
-#: contrib/scalar/scalar.c:317
+#: contrib/scalar/scalar.c:316
 msgid "failed to get default branch name from remote; using local default"
 msgstr ""
 "misslyckades hämta namn på standardgren för fjärr; använder lokalt förval"
 
-#: contrib/scalar/scalar.c:330
+#: contrib/scalar/scalar.c:329
 msgid "failed to get default branch name"
 msgstr "misslyckades hämta namn på standardgren"
 
-#: contrib/scalar/scalar.c:341
+#: contrib/scalar/scalar.c:340
 msgid "failed to unregister repository"
 msgstr "misslyckades avregistrera arkivet"
 
-#: contrib/scalar/scalar.c:356
+#: contrib/scalar/scalar.c:355
 msgid "failed to delete enlistment directory"
 msgstr "misslyckades ta bort enrolleringskatalogen"
 
-#: contrib/scalar/scalar.c:376
+#: contrib/scalar/scalar.c:375
 msgid "branch to checkout after clone"
 msgstr "gren att checka ut efter kloning"
 
-#: contrib/scalar/scalar.c:378
+#: contrib/scalar/scalar.c:377
 msgid "when cloning, create full working directory"
 msgstr "skapa komplett arbetskatalog vid kloning"
 
-#: contrib/scalar/scalar.c:380
+#: contrib/scalar/scalar.c:379
 msgid "only download metadata for the branch that will be checked out"
 msgstr "hämta endast metadata för grenen som skall checkas ut"
 
-#: contrib/scalar/scalar.c:385
+#: contrib/scalar/scalar.c:384
 msgid "scalar clone [<options>] [--] <repo> [<dir>]"
 msgstr "scalar clone [<flaggor>] [--] <arkiv> [<kat>]"
 
-#: contrib/scalar/scalar.c:410
+#: contrib/scalar/scalar.c:409
 #, c-format
 msgid "cannot deduce worktree name from '%s'"
 msgstr "Kan inte härleda arbetsträdsnamn från \"%s\""
 
-#: contrib/scalar/scalar.c:419
+#: contrib/scalar/scalar.c:418
 #, c-format
 msgid "directory '%s' exists already"
 msgstr "katalogen \"%s\" finns redan"
 
-#: contrib/scalar/scalar.c:446
+#: contrib/scalar/scalar.c:445
 #, c-format
 msgid "failed to get default branch for '%s'"
 msgstr "misslyckades hämta standardgren för \"%s\""
 
-#: contrib/scalar/scalar.c:457
+#: contrib/scalar/scalar.c:456
 #, c-format
 msgid "could not configure remote in '%s'"
 msgstr "kunde inte ställa in fjärr i \"%s\""
 
-#: contrib/scalar/scalar.c:466
+#: contrib/scalar/scalar.c:465
 #, c-format
 msgid "could not configure '%s'"
 msgstr "kunde inte ställa in \"%s\""
 
-#: contrib/scalar/scalar.c:469
+#: contrib/scalar/scalar.c:468
 msgid "partial clone failed; attempting full clone"
 msgstr "delvis klon misslyckades; försöker med fullständig klon"
 
-#: contrib/scalar/scalar.c:473
+#: contrib/scalar/scalar.c:472
 msgid "could not configure for full clone"
 msgstr "kunde inte ställa in för komplett klon"
 
-#: contrib/scalar/scalar.c:505
+#: contrib/scalar/scalar.c:504
 msgid "`scalar list` does not take arguments"
 msgstr "\"scalar list\" tar inte argument"
 
-#: contrib/scalar/scalar.c:518
+#: contrib/scalar/scalar.c:517
 msgid "scalar register [<enlistment>]"
 msgstr "scalar register [<enrollering>]"
 
-#: contrib/scalar/scalar.c:545
+#: contrib/scalar/scalar.c:544
 msgid "reconfigure all registered enlistments"
 msgstr "konfigurera alla registrerade enrolleringar på nytt"
 
-#: contrib/scalar/scalar.c:549
+#: contrib/scalar/scalar.c:548
 msgid "scalar reconfigure [--all | <enlistment>]"
 msgstr "scalar reconfigure [--all | <enrollering>]"
 
-#: contrib/scalar/scalar.c:567
+#: contrib/scalar/scalar.c:566
 msgid "--all or <enlistment>, but not both"
 msgstr "--all eller <enrollering>, men inte bägge"
 
-#: contrib/scalar/scalar.c:582
+#: contrib/scalar/scalar.c:581
 #, c-format
 msgid "git repository gone in '%s'"
 msgstr "git-arkiv försvunnet i \"%s\""
 
-#: contrib/scalar/scalar.c:622
+#: contrib/scalar/scalar.c:621
 msgid ""
 "scalar run <task> [<enlistment>]\n"
 "Tasks:\n"
@@ -24670,42 +25218,55 @@ msgstr ""
 "scalar run <uppgift> [<enrollering>]\n"
 "Uppgifter:\n"
 
-#: contrib/scalar/scalar.c:640
+#: contrib/scalar/scalar.c:639
 #, c-format
 msgid "no such task: '%s'"
 msgstr "okänd uppgift: \"%s\""
 
-#: contrib/scalar/scalar.c:690
+#: contrib/scalar/scalar.c:689
 msgid "scalar unregister [<enlistment>]"
 msgstr "scalar unregister [<enrollering>]"
 
-#: contrib/scalar/scalar.c:737
+#: contrib/scalar/scalar.c:736
 msgid "scalar delete <enlistment>"
 msgstr "scalar delete <enrollering>"
 
-#: contrib/scalar/scalar.c:752
+#: contrib/scalar/scalar.c:751
 msgid "refusing to delete current working directory"
 msgstr "vägrar ta bort aktuell arbetskatalog"
 
-#: contrib/scalar/scalar.c:767
+#: contrib/scalar/scalar.c:766
 msgid "include Git version"
 msgstr "ta med Git-version"
 
-#: contrib/scalar/scalar.c:769
+#: contrib/scalar/scalar.c:768
 msgid "include Git's build options"
 msgstr "ta med Gits byggflaggor"
 
-#: contrib/scalar/scalar.c:773
+#: contrib/scalar/scalar.c:772
 msgid "scalar verbose [-v | --verbose] [--build-options]"
 msgstr "scalar verbose [-v | --verbose] [--build-options]"
 
+#: contrib/scalar/scalar.c:813
+msgid "-C requires a <directory>"
+msgstr "-C kräver en <katalog>"
+
+#: contrib/scalar/scalar.c:815
+#, c-format
+msgid "could not change to '%s'"
+msgstr "kunde inte byta till \"%s\""
+
 #: contrib/scalar/scalar.c:821
+msgid "-c requires a <key>=<value> argument"
+msgstr "-c kräver ett argument på formen <nyckel>=<värde>"
+
+#: contrib/scalar/scalar.c:839
 msgid ""
-"scalar <command> [<options>]\n"
+"scalar [-C <directory>] [-c <key>=<value>] <command> [<options>]\n"
 "\n"
 "Commands:\n"
 msgstr ""
-"scalar <kommando> [<flaggor>]\n"
+"scalar [-C <katalog>] [-c <nyckel>=<värde>] <kommando> [<flaggor>]\n"
 "\n"
 "Kommandon:\n"
 
@@ -24717,43 +25278,43 @@ msgstr "ingen kompilatorinformation tillgänglig\n"
 msgid "no libc information available\n"
 msgstr "ingen libc-information tillgänglig\n"
 
-#: list-objects-filter-options.h:94
+#: list-objects-filter-options.h:126
 msgid "args"
 msgstr "argument"
 
-#: list-objects-filter-options.h:95
+#: list-objects-filter-options.h:127
 msgid "object filtering"
 msgstr "objektfiltrering"
 
-#: parse-options.h:183
+#: parse-options.h:188
 msgid "expiry-date"
 msgstr "giltig-till"
 
-#: parse-options.h:197
+#: parse-options.h:202
 msgid "no-op (backward compatibility)"
 msgstr "ingen funktion (bakåtkompatibilitet)"
 
-#: parse-options.h:310
+#: parse-options.h:341
 msgid "be more verbose"
 msgstr "var mer pratsam"
 
-#: parse-options.h:312
+#: parse-options.h:343
 msgid "be more quiet"
 msgstr "var mer tyst"
 
-#: parse-options.h:318
+#: parse-options.h:349
 msgid "use <n> digits to display object names"
 msgstr "använd <n> siffror för att visa objektnamn"
 
-#: parse-options.h:337
+#: parse-options.h:368
 msgid "how to strip spaces and #comments from message"
 msgstr "hur blanksteg och #kommentarer ska tas bort från meddelande"
 
-#: parse-options.h:338
+#: parse-options.h:369
 msgid "read pathspec from file"
 msgstr "läs sökvägsangivelse från fil"
 
-#: parse-options.h:339
+#: parse-options.h:370
 msgid ""
 "with --pathspec-from-file, pathspec elements are separated with NUL character"
 msgstr "med --pathspec-from-file, sökvägsangivelser avdelas med NUL-tecken"
@@ -25004,447 +25565,451 @@ msgid "Display help information about Git"
 msgstr "Visa hjälpinformation om Git"
 
 #: command-list.h:108
+msgid "Run git hooks"
+msgstr "Kör git-krokar"
+
+#: command-list.h:109
 msgid "Server side implementation of Git over HTTP"
 msgstr "Serversideimplementation av Git över HTTP"
 
-#: command-list.h:109
+#: command-list.h:110
 msgid "Download from a remote Git repository via HTTP"
 msgstr "Hämta objekt och referenser från annat Git-arkiv över HTTP"
 
-#: command-list.h:110
+#: command-list.h:111
 msgid "Push objects over HTTP/DAV to another repository"
 msgstr "Sänd objekt över HTTP/DAV till ett annat arkiv"
 
-#: command-list.h:111
+#: command-list.h:112
 msgid "Send a collection of patches from stdin to an IMAP folder"
 msgstr "Sänd en samling patchar från stdin till en IMAP-mapp"
 
-#: command-list.h:112
+#: command-list.h:113
 msgid "Build pack index file for an existing packed archive"
 msgstr "SKapa pack-indexfiler för ett befintligt packat arkiv"
 
-#: command-list.h:113
+#: command-list.h:114
 msgid "Create an empty Git repository or reinitialize an existing one"
 msgstr "Skapa tomt Git-arkiv eller ominitiera ett befintligt"
 
-#: command-list.h:114
+#: command-list.h:115
 msgid "Instantly browse your working repository in gitweb"
 msgstr "Omedelbart bläddra i din arbetskatalog med gitweb"
 
-#: command-list.h:115
+#: command-list.h:116
 msgid "Add or parse structured information in commit messages"
 msgstr ""
 "Lägg till eller tolka strukturerad information i incheckningsmeddelanden"
 
-#: command-list.h:116
+#: command-list.h:117
 msgid "Show commit logs"
 msgstr "Visa incheckningsloggar"
 
-#: command-list.h:117
+#: command-list.h:118
 msgid "Show information about files in the index and the working tree"
 msgstr "Visa information om filer i indexet och arbetskatalogen"
 
-#: command-list.h:118
+#: command-list.h:119
 msgid "List references in a remote repository"
 msgstr "Lista referenser i ett fjärrarkiv"
 
-#: command-list.h:119
+#: command-list.h:120
 msgid "List the contents of a tree object"
 msgstr "Visa innehållet i ett trädobjekt"
 
-#: command-list.h:120
+#: command-list.h:121
 msgid "Extracts patch and authorship from a single e-mail message"
 msgstr "Hämta patch och ägarskap från ett enkelt e-postmeddelande"
 
-#: command-list.h:121
+#: command-list.h:122
 msgid "Simple UNIX mbox splitter program"
 msgstr "Enkelt program för att dela en UNIX mbox"
 
-#: command-list.h:122
+#: command-list.h:123
 msgid "Run tasks to optimize Git repository data"
 msgstr "Utför uppgifter för att optimera Git-arkivdata"
 
-#: command-list.h:123
+#: command-list.h:124
 msgid "Join two or more development histories together"
 msgstr "Slå ihop två eller flera utvecklingshistorier"
 
-#: command-list.h:124
+#: command-list.h:125
 msgid "Find as good common ancestors as possible for a merge"
 msgstr "Hitta en så bra anfader som möjligt för sammanslagning"
 
-#: command-list.h:125
+#: command-list.h:126
 msgid "Run a three-way file merge"
 msgstr "Kör en trevägs-filsammanslagning"
 
-#: command-list.h:126
+#: command-list.h:127
 msgid "Run a merge for files needing merging"
 msgstr "Kör en sammanslagning för filer som behöver det"
 
-#: command-list.h:127
+#: command-list.h:128
 msgid "The standard helper program to use with git-merge-index"
 msgstr "Förvalt hjälpprogram att använda tillsammans med git-merge-index"
 
-#: command-list.h:128
+#: command-list.h:129
 msgid "Show three-way merge without touching index"
 msgstr "Visa trevägssammanslagning utan att röra indexet"
 
-#: command-list.h:129
+#: command-list.h:130
 msgid "Run merge conflict resolution tools to resolve merge conflicts"
 msgstr "Kör verktyg för lösning av sammanslagningskonflikter"
 
-#: command-list.h:130
+#: command-list.h:131
 msgid "Creates a tag object with extra validation"
 msgstr "skapar ett taggobjekt med extra validering"
 
-#: command-list.h:131
+#: command-list.h:132
 msgid "Build a tree-object from ls-tree formatted text"
 msgstr "Bygg ett trädobjekt från ls-tree-formaterad text"
 
-#: command-list.h:132
+#: command-list.h:133
 msgid "Write and verify multi-pack-indexes"
 msgstr "Skriv och verifiera multi-pack-index"
 
-#: command-list.h:133
+#: command-list.h:134
 msgid "Move or rename a file, a directory, or a symlink"
 msgstr "Flytta eller byt namn på en fil, katalog eller symbolisk länk"
 
-#: command-list.h:134
+#: command-list.h:135
 msgid "Find symbolic names for given revs"
 msgstr "Hitta symboliska namn för givna referenser"
 
-#: command-list.h:135
+#: command-list.h:136
 msgid "Add or inspect object notes"
 msgstr "Lägg till eller inspektera objektanteckningar"
 
-#: command-list.h:136
+#: command-list.h:137
 msgid "Import from and submit to Perforce repositories"
 msgstr "Importera från eller sänd till Perforce-arkiv"
 
-#: command-list.h:137
+#: command-list.h:138
 msgid "Create a packed archive of objects"
 msgstr "Skapa ett packat arkiv med objekt"
 
-#: command-list.h:138
+#: command-list.h:139
 msgid "Find redundant pack files"
 msgstr "Hitta redundanta pack-filer"
 
-#: command-list.h:139
+#: command-list.h:140
 msgid "Pack heads and tags for efficient repository access"
 msgstr "Packa huvuden och taggar för effektiv arkivåtkomst"
 
-#: command-list.h:140
+#: command-list.h:141
 msgid "Compute unique ID for a patch"
 msgstr "Beräkna unik ID för en patch"
 
-#: command-list.h:141
+#: command-list.h:142
 msgid "Prune all unreachable objects from the object database"
 msgstr "Ta bort alla onåbara objekt från objektdatabasen"
 
-#: command-list.h:142
+#: command-list.h:143
 msgid "Remove extra objects that are already in pack files"
 msgstr "Ta bort extraobjekt som redan finns i pack-filerna"
 
-#: command-list.h:143
+#: command-list.h:144
 msgid "Fetch from and integrate with another repository or a local branch"
 msgstr "Hämta från och integrera med annat arkiv eller en lokal gren"
 
-#: command-list.h:144
+#: command-list.h:145
 msgid "Update remote refs along with associated objects"
 msgstr "Uppdatera fjärr-referenser och tillhörande objekt"
 
-#: command-list.h:145
+#: command-list.h:146
 msgid "Applies a quilt patchset onto the current branch"
 msgstr "Tillämpar en quilt-patchuppsättning på aktiv gren"
 
-#: command-list.h:146
+#: command-list.h:147
 msgid "Compare two commit ranges (e.g. two versions of a branch)"
 msgstr "Jämför två incheckningsintervall (dvs. två versioner av en gren)"
 
-#: command-list.h:147
+#: command-list.h:148
 msgid "Reads tree information into the index"
 msgstr "Läser trädinformation in i indexet"
 
-#: command-list.h:148
+#: command-list.h:149
 msgid "Reapply commits on top of another base tip"
 msgstr "Applicera incheckningar på nytt ovanpå en annan bastopp"
 
-#: command-list.h:149
+#: command-list.h:150
 msgid "Receive what is pushed into the repository"
 msgstr "Ta emot det som sänds till arkivet"
 
-#: command-list.h:150
+#: command-list.h:151
 msgid "Manage reflog information"
 msgstr "Hantera referenslogg-information"
 
-#: command-list.h:151
+#: command-list.h:152
 msgid "Manage set of tracked repositories"
 msgstr "Hantera uppsättningen spårade arkiv"
 
-#: command-list.h:152
+#: command-list.h:153
 msgid "Pack unpacked objects in a repository"
 msgstr "Packa opackade objekt i ett arkiv"
 
-#: command-list.h:153
+#: command-list.h:154
 msgid "Create, list, delete refs to replace objects"
 msgstr "Skapa, visa, ta bort referenser för att ersätta objekt"
 
-#: command-list.h:154
+#: command-list.h:155
 msgid "Generates a summary of pending changes"
 msgstr "Skapar en sammanfattning av väntande ändringar"
 
-#: command-list.h:155
+#: command-list.h:156
 msgid "Reuse recorded resolution of conflicted merges"
 msgstr "Återanvänd sparad lösning av sammanslagningskonflikter"
 
-#: command-list.h:156
+#: command-list.h:157
 msgid "Reset current HEAD to the specified state"
 msgstr "Återställ aktuell HEAD till angivet tillstånd"
 
-#: command-list.h:157
+#: command-list.h:158
 msgid "Restore working tree files"
 msgstr "Återställ filer i arbetskatalogen"
 
-#: command-list.h:158
+#: command-list.h:159
 msgid "Lists commit objects in reverse chronological order"
 msgstr "Visa incheckningsobjekt i omvänd kronologisk ordning"
 
-#: command-list.h:159
+#: command-list.h:160
 msgid "Pick out and massage parameters"
 msgstr "Plocka ut och massera parametrar"
 
-#: command-list.h:160
+#: command-list.h:161
 msgid "Revert some existing commits"
 msgstr "Återställ några befintliga incheckningar"
 
-#: command-list.h:161
+#: command-list.h:162
 msgid "Remove files from the working tree and from the index"
 msgstr "Ta bort filer från arbetskatalogen och från indexet"
 
-#: command-list.h:162
+#: command-list.h:163
 msgid "Send a collection of patches as emails"
 msgstr "Sänd en uppsättning patchar som e-post"
 
-#: command-list.h:163
+#: command-list.h:164
 msgid "Push objects over Git protocol to another repository"
 msgstr "Sänd objekt över Git-protokollet till annat arkiv"
 
-#: command-list.h:164
+#: command-list.h:165
 msgid "Git's i18n setup code for shell scripts"
 msgstr "Git:s i18n-startkod för skalskript"
 
-#: command-list.h:165
+#: command-list.h:166
 msgid "Common Git shell script setup code"
 msgstr "Gemensam skriptstartkod för Git"
 
-#: command-list.h:166
+#: command-list.h:167
 msgid "Restricted login shell for Git-only SSH access"
 msgstr "Begränsat inloggningsskal för SSH-åtkomst till bara Git"
 
-#: command-list.h:167
+#: command-list.h:168
 msgid "Summarize 'git log' output"
 msgstr "Summera \"git log\"-utdata"
 
-#: command-list.h:168
+#: command-list.h:169
 msgid "Show various types of objects"
 msgstr "Visa olika sorters objekt"
 
-#: command-list.h:169
+#: command-list.h:170
 msgid "Show branches and their commits"
 msgstr "Visa grenar och deras incheckningar"
 
-#: command-list.h:170
+#: command-list.h:171
 msgid "Show packed archive index"
 msgstr "Skapa packat arkivindex"
 
-#: command-list.h:171
+#: command-list.h:172
 msgid "List references in a local repository"
 msgstr "Visa referenser i ett lokalt arkiv"
 
-#: command-list.h:172
-msgid "Initialize and modify the sparse-checkout"
-msgstr "Initiera och modifiera sparse-checkout"
-
 #: command-list.h:173
+msgid "Reduce your working tree to a subset of tracked files"
+msgstr "Reducera din arbetskatalog till en undermängd av de spårade filerna"
+
+#: command-list.h:174
 msgid "Add file contents to the staging area"
 msgstr "Lägg filinnehållet till indexet"
 
-#: command-list.h:174
+#: command-list.h:175
 msgid "Stash the changes in a dirty working directory away"
 msgstr "Spara undan ändringar i en lortig arbetskatalog"
 
-#: command-list.h:175
+#: command-list.h:176
 msgid "Show the working tree status"
 msgstr "Visa status för arbetskatalogen"
 
-#: command-list.h:176
+#: command-list.h:177
 msgid "Remove unnecessary whitespace"
 msgstr "Ta bort onödiga blanksteg"
 
-#: command-list.h:177
+#: command-list.h:178
 msgid "Initialize, update or inspect submodules"
 msgstr "Initiera, uppdatera eller inspektera undermoduler"
 
-#: command-list.h:178
+#: command-list.h:179
 msgid "Bidirectional operation between a Subversion repository and Git"
 msgstr "Dubbelriktad verkan mellan ett Subversion-arkiv och Git"
 
-#: command-list.h:179
+#: command-list.h:180
 msgid "Switch branches"
 msgstr "Byt gren"
 
-#: command-list.h:180
+#: command-list.h:181
 msgid "Read, modify and delete symbolic refs"
 msgstr "Läs, modifiera eller ta bort symbolisk referens"
 
-#: command-list.h:181
+#: command-list.h:182
 msgid "Create, list, delete or verify a tag object signed with GPG"
 msgstr "Skapa, visa, ta bort eller verifiera GPG-signerat taggobjekt"
 
-#: command-list.h:182
+#: command-list.h:183
 msgid "Creates a temporary file with a blob's contents"
 msgstr "Skapar temporära filer med innehållet från en blob"
 
-#: command-list.h:183
+#: command-list.h:184
 msgid "Unpack objects from a packed archive"
 msgstr "Packa upp objekt från ett pakat arkiv"
 
-#: command-list.h:184
+#: command-list.h:185
 msgid "Register file contents in the working tree to the index"
 msgstr "Registrera filinnehållet från arbetskatalogen i indexet"
 
-#: command-list.h:185
+#: command-list.h:186
 msgid "Update the object name stored in a ref safely"
 msgstr "Uppdatera objektnamnet i en referens på ett säkert sätt"
 
-#: command-list.h:186
+#: command-list.h:187
 msgid "Update auxiliary info file to help dumb servers"
 msgstr "Uppdatera tilläggsinfofil för att hjälpa dumma servrar"
 
-#: command-list.h:187
+#: command-list.h:188
 msgid "Send archive back to git-archive"
 msgstr "Sänd arkivet tillbaka till git-archive"
 
-#: command-list.h:188
+#: command-list.h:189
 msgid "Send objects packed back to git-fetch-pack"
 msgstr "Sänd packade objekt tillbaka till git-fetch-pack"
 
-#: command-list.h:189
+#: command-list.h:190
 msgid "Show a Git logical variable"
 msgstr "Visa en logisk Git-variabel"
 
-#: command-list.h:190
+#: command-list.h:191
 msgid "Check the GPG signature of commits"
 msgstr "Kontrollera GPG-signaturer för incheckningar"
 
-#: command-list.h:191
+#: command-list.h:192
 msgid "Validate packed Git archive files"
 msgstr "Bekräfta packade Git-arkivfiler"
 
-#: command-list.h:192
+#: command-list.h:193
 msgid "Check the GPG signature of tags"
 msgstr "Kontrollera GPG-signaturer i taggar"
 
-#: command-list.h:193
+#: command-list.h:194
 msgid "Show logs with difference each commit introduces"
 msgstr "Visa loggar med differenser varje incheckning introducerar"
 
-#: command-list.h:194
+#: command-list.h:195
 msgid "Manage multiple working trees"
 msgstr "Hantera ytterligare arbetskataloger"
 
-#: command-list.h:195
+#: command-list.h:196
 msgid "Create a tree object from the current index"
 msgstr "Skapa ett trädobjekt från aktuellt index"
 
-#: command-list.h:196
+#: command-list.h:197
 msgid "Defining attributes per path"
 msgstr "Definierar attribut per sökväg"
 
-#: command-list.h:197
+#: command-list.h:198
 msgid "Git command-line interface and conventions"
 msgstr "Gits kommandoradsgränssnitt och -konventioner"
 
-#: command-list.h:198
+#: command-list.h:199
 msgid "A Git core tutorial for developers"
 msgstr "Grundläggande Git-handledning för utvecklare"
 
-#: command-list.h:199
+#: command-list.h:200
 msgid "Providing usernames and passwords to Git"
 msgstr "Tillhandahåll användarnamn och lösenord till Git"
 
-#: command-list.h:200
+#: command-list.h:201
 msgid "Git for CVS users"
 msgstr "Git för CVS-användare"
 
-#: command-list.h:201
+#: command-list.h:202
 msgid "Tweaking diff output"
 msgstr "Justrea diff-utdata"
 
-#: command-list.h:202
+#: command-list.h:203
 msgid "A useful minimum set of commands for Everyday Git"
 msgstr "Ett användbart minsta uppsättning kommandon för vardags-Git"
 
-#: command-list.h:203
+#: command-list.h:204
 msgid "Frequently asked questions about using Git"
 msgstr "Ofta ställda frågor om att använda Git"
 
-#: command-list.h:204
+#: command-list.h:205
 msgid "A Git Glossary"
 msgstr "En Git-ordlista"
 
-#: command-list.h:205
+#: command-list.h:206
 msgid "Hooks used by Git"
 msgstr "Krokar som används av Git"
 
-#: command-list.h:206
+#: command-list.h:207
 msgid "Specifies intentionally untracked files to ignore"
 msgstr "Ange avsiktligen ospårade filer att ignorera"
 
-#: command-list.h:207
+#: command-list.h:208
 msgid "The Git repository browser"
 msgstr "Bläddraren för Git-arkiv"
 
-#: command-list.h:208
+#: command-list.h:209
 msgid "Map author/committer names and/or E-Mail addresses"
 msgstr "Kopplar författar-/incheckarnamn och/eller -e-postadresser"
 
-#: command-list.h:209
+#: command-list.h:210
 msgid "Defining submodule properties"
 msgstr "Ange egenskaper för undermoduler"
 
-#: command-list.h:210
+#: command-list.h:211
 msgid "Git namespaces"
 msgstr "Git-namnrymder"
 
-#: command-list.h:211
+#: command-list.h:212
 msgid "Helper programs to interact with remote repositories"
 msgstr "Hjälpprogram för att interagera med fjärrarkiv"
 
-#: command-list.h:212
+#: command-list.h:213
 msgid "Git Repository Layout"
 msgstr "Gits arkivlayout"
 
-#: command-list.h:213
+#: command-list.h:214
 msgid "Specifying revisions and ranges for Git"
 msgstr "Ange versioner och intervall i Git"
 
-#: command-list.h:214
+#: command-list.h:215
 msgid "Mounting one repository inside another"
 msgstr "Monterar ett arkiv inuti ett annat"
 
-#: command-list.h:215
+#: command-list.h:216
 msgid "A tutorial introduction to Git"
 msgstr "Introduktion till Git"
 
-#: command-list.h:216
+#: command-list.h:217
 msgid "A tutorial introduction to Git: part two"
 msgstr "Introduktion till Git: del två"
 
-#: command-list.h:217
+#: command-list.h:218
 msgid "Git web interface (web frontend to Git repositories)"
 msgstr "Git-webbgränssnitt (webbframända för Git-arkiv)"
 
-#: command-list.h:218
+#: command-list.h:219
 msgid "An overview of recommended workflows with Git"
 msgstr "Översikt över rekommenderade arbetsflöden med Git"
 
@@ -25488,69 +26053,45 @@ msgstr "Försök enkel sammanslagning med $pretty_name"
 msgid "Simple merge did not work, trying automatic merge."
 msgstr "Enkel sammanslagning misslyckades, försöker automatisk sammanslagning."
 
-#: git-submodule.sh:401
-#, sh-format
-msgid "Unable to find current revision in submodule path '$displaypath'"
-msgstr "Kan inte hitta aktuell revision i undermodulsökvägen \"$displaypath\""
-
-#: git-submodule.sh:411
-#, sh-format
-msgid "Unable to fetch in submodule path '$sm_path'"
-msgstr "Kan inte hämta i undermodulsökväg \"$sm_path\""
-
-#: git-submodule.sh:416
-#, sh-format
-msgid ""
-"Unable to find current ${remote_name}/${branch} revision in submodule path "
-"'$sm_path'"
-msgstr ""
-"Kan inte hitta aktuell revision för ${remote_name}/${branch} i "
-"undermodulsökvägen \"$sm_path\""
-
-#: git-submodule.sh:464
-#, sh-format
-msgid "Failed to recurse into submodule path '$displaypath'"
-msgstr "Misslyckades rekursera in i undermodulsökvägen \"$displaypath\""
-
 #: git-sh-setup.sh:89 git-sh-setup.sh:94
 #, sh-format
 msgid "usage: $dashless $USAGE"
 msgstr "använd: $dashless $USAGE"
 
-#: git-sh-setup.sh:183
+#: git-sh-setup.sh:182
 #, sh-format
 msgid "Cannot chdir to $cdup, the toplevel of the working tree"
 msgstr "Kunde inte byta katalog till $cdup, toppnivån på arbetskatalogen"
 
-#: git-sh-setup.sh:192 git-sh-setup.sh:199
+#: git-sh-setup.sh:191 git-sh-setup.sh:198
 #, sh-format
 msgid "fatal: $program_name cannot be used without a working tree."
 msgstr "ödesdigetrt: $program_name kan inte användas utan arbetskatalog."
 
-#: git-sh-setup.sh:213
+#: git-sh-setup.sh:212
 msgid "Cannot rewrite branches: You have unstaged changes."
 msgstr "Kan inte skriva om grenar: Du har oköade ändringar."
 
-#: git-sh-setup.sh:216
+#: git-sh-setup.sh:215
 #, sh-format
 msgid "Cannot $action: You have unstaged changes."
 msgstr "Kan inte $action: Du har oköade ändringar."
 
-#: git-sh-setup.sh:227
+#: git-sh-setup.sh:226
 #, sh-format
 msgid "Cannot $action: Your index contains uncommitted changes."
 msgstr ""
 "Kan inte $action: Ditt index innehåller ändringar som inte checkats in."
 
-#: git-sh-setup.sh:229
+#: git-sh-setup.sh:228
 msgid "Additionally, your index contains uncommitted changes."
 msgstr "Dessutom innehåller dit index ändringar som inte har checkats in."
 
-#: git-sh-setup.sh:349
+#: git-sh-setup.sh:348
 msgid "You need to run this command from the toplevel of the working tree."
 msgstr "Du måste köra kommandot från arbetskatalogens toppnivå."
 
-#: git-sh-setup.sh:354
+#: git-sh-setup.sh:353
 msgid "Unable to determine absolute path of git directory"
 msgstr "Kunde inte bestämma absolut sökväg till git-katalogen"
 
@@ -26233,23 +26774,23 @@ msgstr "kan inte sända brev som sjubitars"
 msgid "invalid transfer encoding"
 msgstr "ogiltig överföringskondning"
 
-#: git-send-email.perl:2095
+#: git-send-email.perl:2100
 #, perl-format
 msgid ""
-"fatal: %s: rejected by sendemail-validate hook\n"
+"fatal: %s: rejected by %s hook\n"
 "%s\n"
 "warning: no patches were sent\n"
 msgstr ""
-"ödesdigert: %s: refuserad av sendemail-validate-kroken\n"
+"ödesdigert: %s: refuserad av kroken %s\n"
 "%s\n"
 "varning: inga patchar har sänts\n"
 
-#: git-send-email.perl:2105 git-send-email.perl:2158 git-send-email.perl:2168
+#: git-send-email.perl:2110 git-send-email.perl:2163 git-send-email.perl:2173
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "kunde inte öppna %s: %s\n"
 
-#: git-send-email.perl:2108
+#: git-send-email.perl:2113
 #, perl-format
 msgid ""
 "fatal: %s:%d is longer than 998 characters\n"
@@ -26258,7 +26799,7 @@ msgstr ""
 "ödesdigert: %s:%d är längre än 998 tecken\n"
 "varning: inga patchar har sänts\n"
 
-#: git-send-email.perl:2126
+#: git-send-email.perl:2131
 #, perl-format
 msgid "Skipping %s with backup suffix '%s'.\n"
 msgstr ""
@@ -26266,11 +26807,270 @@ msgstr ""
 "säkerhetskopior.\n"
 
 #. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:2130
+#: git-send-email.perl:2135
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "Vill du verkligen sända %s? [y=ja, n=nej]: "
 
+#~ msgid "git archive --list"
+#~ msgstr "git archive --list"
+
+#, c-format
+#~ msgid "unknown value for --diff-merges: %s"
+#~ msgstr "okänt värde för --diff-merges: %s"
+
+#, c-format
+#~ msgid "invalid value '%s' for lsrefs.unborn"
+#~ msgstr "ogiltigt värde \"%s\" för lsrefs.unborn"
+
+#~ msgid "backend for `git stash -p`"
+#~ msgstr "bakända för \"git stash -p\""
+
+#, c-format
+#~ msgid "Invalid value for --empty: %s"
+#~ msgstr "Felaktigt värde för --empty: %s"
+
+#, c-format
+#~ msgid "Invalid value for --patch-format: %s"
+#~ msgstr "Felaktigt värde för --patch-format: %s"
+
+#, c-format
+#~ msgid "Invalid value for --show-current-patch: %s"
+#~ msgstr "Felaktigt värde för --show-current-patch: %s"
+
+#~ msgid ""
+#~ "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad "
+#~ "| --term-new]"
+#~ msgstr ""
+#~ "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad "
+#~ "| --term-new]"
+
+#~ msgid "git bisect--helper --bisect-next"
+#~ msgstr "git bisect--helper --bisect-next"
+
+#~ msgid "git bisect--helper --bisect-visualize"
+#~ msgstr "git bisect--helper --bisect-visualize"
+
+#, c-format
+#~ msgid "invalid color '%s' in color.blame.repeatedLines"
+#~ msgstr "felaktig färg \"%s\" i color.blame.repeatedLines"
+
+#~ msgid "invalid value for blame.coloring"
+#~ msgstr "ogiltigt värde för blame.coloring"
+
+#~ msgid ""
+#~ "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e "
+#~ "| -p | <type> | --textconv | --filters) [--path=<path>] <object>"
+#~ msgstr ""
+#~ "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e "
+#~ "| -p | <typ> | --textconv | --filters) [--path=<sökväg>] <objekt>"
+
+#~ msgid "show object type"
+#~ msgstr "visa objekttyp"
+
+#~ msgid "exit with zero when there's no error"
+#~ msgstr "avsluta med noll när det inte uppstått något fel"
+
+#~ msgid "show info and content of objects fed from the standard input"
+#~ msgstr "visa information och innehåll för objekt som listas på standard in"
+
+#~ msgid "show info about objects fed from the standard input"
+#~ msgstr "visa information för objekt som listas på standard in"
+
+#~ msgid "follow in-tree symlinks (used with --batch or --batch-check)"
+#~ msgstr ""
+#~ "följ symboliska länkar i trädet (använd med --batch eller --batch-check)"
+
+#~ msgid "show all objects with --batch or --batch-check"
+#~ msgstr "visa alla objekt med --batch eller --batch-check"
+
+#~ msgid "do not order --batch-all-objects output"
+#~ msgstr "ordna inte --batch-all-objects output"
+
+#~ msgid "set up tracking mode (see git-pull(1))"
+#~ msgstr "ställ in spårningsläge (se git-pull(1))"
+
+#~ msgid "Using both --reset-author and --author does not make sense"
+#~ msgstr "Kan inte använda både --reset-author och --author"
+
+#~ msgid "Options --squash and --fixup cannot be used together"
+#~ msgstr "Flaggorna --squash och --fixup kan inte användas samtidigt"
+
+#~ msgid "Only one of -c/-C/-F/--fixup can be used."
+#~ msgstr "Endast en av -c/-C/-F/--fixup kan användas."
+
+#~ msgid "Option -m cannot be combined with -c/-C/-F."
+#~ msgstr "Flaggan -m kan inte kombineras med -c/-C/-F."
+
+#~ msgid ""
+#~ "Only one of --include/--only/--all/--interactive/--patch can be used."
+#~ msgstr ""
+#~ "Endast en av --include/--only/--all/--interactive/--patch kan användas."
+
+#~ msgid "git count-objects [-v] [-H | --human-readable]"
+#~ msgstr "git count-objects [-v] [-H | --human-readable]"
+
+#, c-format
+#~ msgid "configuration fetch.output contains invalid value %s"
+#~ msgstr "konfigurationen för fetch.output innehåller ogiltigt värde %s"
+
+#~ msgid "--cached or --untracked cannot be used with --no-index"
+#~ msgstr "--cached och --untracked kan inte användas med --no-index"
+
+#~ msgid "--untracked cannot be used with --cached"
+#~ msgstr "--untracked kan inte användas med --cached"
+
+#~ msgid "git hash-object  --stdin-paths"
+#~ msgstr "git hash-object  --stdin-paths"
+
+#~ msgid "git help [-g|--guides]"
+#~ msgstr "git help [-g|--guides]"
+
+#~ msgid "git help [-c|--config]"
+#~ msgstr "git help [-c|--config]"
+
+#~ msgid "git mktag"
+#~ msgstr "git mktag"
+
+#~ msgid "git mktree [-z] [--missing] [--batch]"
+#~ msgstr "git mktree [-z] [--missing] [--batch]"
+
+#~ msgid "read from stdin"
+#~ msgstr "läs från standard in"
+
+#~ msgid "git notes merge --commit [-v | -q]"
+#~ msgstr "git notes merge --commit [-v | -q]"
+
+#~ msgid "git notes merge --abort [-v | -q]"
+#~ msgstr "git notes merge --abort [-v | -q]"
+
+#~ msgid "git notes get-ref"
+#~ msgstr "git notes get-ref"
+
+#~ msgid "invalid value for --missing"
+#~ msgstr "ogiltigt värde för --missing"
+
+#~ msgid "git prune-packed [-n | --dry-run] [-q | --quiet]"
+#~ msgstr "git prune-packed [-n | --dry-run] [-q | --quiet]"
+
+#, c-format
+#~ msgid "Invalid value for %s: %s"
+#~ msgstr "Felaktigt värde för %s: %s"
+
+#, c-format
+#~ msgid "Invalid value for pull.ff: %s"
+#~ msgstr "Felaktigt värde för pull.ff: %s"
+
+#~ msgid "git rebase --continue | --abort | --skip | --edit-todo"
+#~ msgstr "git rebase --continue | --abort | --skip | --edit-todo"
+
+#, c-format
+#~ msgid "'%s' is not a valid timestamp"
+#~ msgstr "\"%s\" är inte en giltig tidsstämpel"
+
+#~ msgid "git reflog [ show | expire | delete | exists ]"
+#~ msgstr "git reflog [ show | expire | delete | exists ]"
+
+#~ msgid "git remote [-v | --verbose]"
+#~ msgstr "git remote [-v | --verbose]"
+
+#~ msgid "git replace [-f] --convert-graft-file"
+#~ msgstr "git replace [-f] --convert-graft-file"
+
+#, c-format
+#~ msgid ""
+#~ "\n"
+#~ "It took %.2f seconds to enumerate unstaged changes after reset.  You can\n"
+#~ "use '--quiet' to avoid this.  Set the config setting reset.quiet to true\n"
+#~ "to make this the default.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Det tog %.2f sekunder att räkna upp oköade ändringar efter "
+#~ "återställning.\n"
+#~ "Du kan använda \"--quiet\" för att förhindra detta. Ställ "
+#~ "konfigurationsvariabeln\n"
+#~ "reset.quiet till true för att göra detta till förval.\n"
+
+#~ msgid "git sparse-checkout list"
+#~ msgstr "git sparse-checkout list"
+
+#~ msgid "unable to upgrade repository format to enable worktreeConfig"
+#~ msgstr "kunde inte uppgradera arkivformat för att aktivera worktreeConfig"
+
+#~ msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
+#~ msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
+
+#~ msgid "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
+#~ msgstr "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
+
+#~ msgid "git sparse-checkout disable"
+#~ msgstr "git sparse-checkout disable"
+
+#~ msgid ""
+#~ "the stash.useBuiltin support has been removed!\n"
+#~ "See its entry in 'git help config' for details."
+#~ msgstr ""
+#~ "stödet för stash.useBuiltin har tagits bort!\n"
+#~ "Se posten för det i \"git help config\" för detaljer."
+
+#~ msgid "git stripspace [-s | --strip-comments]"
+#~ msgstr "git stripspace [-s | --strip-comments]"
+
+#~ msgid "git stripspace [-c | --comment-lines]"
+#~ msgstr "git stripspace [-c | --comment-lines]"
+
+#~ msgid "submodule--helper print-default-remote takes no arguments"
+#~ msgstr "submodule--helper print-default-remote tar inga argument"
+
+#~ msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
+#~ msgstr ""
+#~ "git submodule--helper update-clone [--prefix=<sökväg>] [<sökväg>...]"
+
+#~ msgid "suppress output for update by rebase or merge"
+#~ msgstr "dölj utdata för uppdatering via ombasering eller sammanslagning{"
+
+#~ msgid "overrides update mode in case the repository is a fresh clone"
+#~ msgstr "överstyr uppdateringsläge om arkviet är en färsk klon"
+
+#~ msgid "depth for shallow fetch"
+#~ msgstr "djup för grund hämtning"
+
+#~ msgid "sha1"
+#~ msgstr "sha1"
+
+#~ msgid "SHA1 expected by superproject"
+#~ msgstr "SHA1 förväntades av överprojekt{"
+
+#~ msgid "subsha1"
+#~ msgstr "subsha1"
+
+#~ msgid "SHA1 of submodule's HEAD"
+#~ msgstr "SHA1 för undermodulens \"HEAD\""
+
+#~ msgid "git submodule--helper run-update-procedure [<options>] <path>"
+#~ msgstr "git submodule--helper run-update-procedure [<flaggor>] <sökväg>"
+
+#~ msgid "git submodule--helper config --check-writeable"
+#~ msgstr "git submodule--helper config --check-writeable"
+
+#~ msgid "git update-server-info [--force]"
+#~ msgstr "git update-server-info [--force]"
+
+#~ msgid "Initialize and modify the sparse-checkout"
+#~ msgstr "Initiera och modifiera sparse-checkout"
+
+#, sh-format
+#~ msgid ""
+#~ "Unable to find current ${remote_name}/${branch} revision in submodule "
+#~ "path '$sm_path'"
+#~ msgstr ""
+#~ "Kan inte hitta aktuell revision för ${remote_name}/${branch} i "
+#~ "undermodulsökvägen \"$sm_path\""
+
+#, sh-format
+#~ msgid "Failed to recurse into submodule path '$displaypath'"
+#~ msgstr "Misslyckades rekursera in i undermodulsökvägen \"$displaypath\""
+
 #~ msgid "--index outside a repository"
 #~ msgstr "--index utanför arkiv"
 
@@ -26723,9 +27523,6 @@ msgstr "Vill du verkligen sända %s? [y=ja, n=nej]: "
 #~ msgid "cannot store pack file"
 #~ msgstr "kan inte spara paketfil"
 
-#~ msgid "cannot store index file"
-#~ msgstr "kan inte spara indexfil"
-
 #~ msgid "exclude patterns are read from <file>"
 #~ msgstr "exkludera mönster som läses från <fil>"
 
@@ -26853,21 +27650,12 @@ msgstr "Vill du verkligen sända %s? [y=ja, n=nej]: "
 #~ msgid "socket/pipe already in use: '%s'"
 #~ msgstr "uttag/rör används redan: \"%s\""
 
-#~ msgid "could not start server on: '%s'"
-#~ msgstr "kunde inte starta server på: \"%s\""
-
 #~ msgid "could not spawn daemon in the background"
 #~ msgstr "kunde inte starta serverprocess i bakgrunden"
 
 #~ msgid "waitpid failed"
 #~ msgstr "\"waitpid\" misslyckades"
 
-#~ msgid "daemon not online yet"
-#~ msgstr "serverprocessen ännu inte operativ"
-
-#~ msgid "daemon failed to start"
-#~ msgstr "serverprocessen kunde inte startas"
-
 #~ msgid "waitpid is confused"
 #~ msgstr "waitpid är förvirrad"
 
@@ -27271,9 +28059,6 @@ msgstr "Vill du verkligen sända %s? [y=ja, n=nej]: "
 #~ msgid "Error deleting remote-tracking branch '%s'"
 #~ msgstr "Fel vid borttagning av fjärrspårande grenen \"%s\""
 
-#~ msgid "Error deleting branch '%s'"
-#~ msgstr "Fel vid borttagning av grenen \"%s\""
-
 #~ msgid "show parse tree for grep expression"
 #~ msgstr "visa analysträd för grep-uttryck"
 
@@ -27709,9 +28494,6 @@ msgstr "Vill du verkligen sända %s? [y=ja, n=nej]: "
 #~ msgid "error building trees"
 #~ msgstr "fel vid byggande av träd"
 
-#~ msgid "invalid date format '%s' in '%s'"
-#~ msgstr "ogiltigt datumformat \"%s\" i \"%s\""
-
 #~ msgid "writing root commit"
 #~ msgstr "skriver rotincheckning"
 
@@ -27917,9 +28699,6 @@ msgstr "Vill du verkligen sända %s? [y=ja, n=nej]: "
 #~ msgstr ""
 #~ "Först, spolar tillbaka huvudet för att spela av ditt arbete ovanpå det..."
 
-#~ msgid "ignoring unknown color-moved-ws mode '%s'"
-#~ msgstr "ignorerar okänt läge för color-mode-ws \"%s\""
-
 #~ msgid "only 'tree:0' is supported"
 #~ msgstr "endast \"tree:0\" stöds"
 
@@ -28707,9 +29486,6 @@ msgstr "Vill du verkligen sända %s? [y=ja, n=nej]: "
 #~ msgid "Invalid gc.pruneexpire: '%s'"
 #~ msgstr "Ogiltig gc.pruneexpire: '%s'"
 
-#~ msgid "(detached from %s)"
-#~ msgstr "(frånkopplad från %s)"
-
 #~ msgid "No existing author found with '%s'"
 #~ msgstr "Hittade ingen befintlig författare med \"%s\""
 
index 6afb871846d4391fa4f025dfcf9cc16d7710f0d2..45d66c66af7c1f633a49ad03bff9044bb372b51c 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -90,8 +90,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Git Turkish Localization Project\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2022-01-17 08:34+0800\n"
-"PO-Revision-Date: 2022-01-11 18:00+0300\n"
+"POT-Creation-Date: 2022-04-13 14:52+0800\n"
+"PO-Revision-Date: 2022-04-06 16:00+0300\n"
 "Last-Translator: Emir SARI <emir_sari@icloud.com>\n"
 "Language-Team: Turkish (https://github.com/bitigchi/git-po/)\n"
 "Language: tr\n"
@@ -100,213 +100,212 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: add-interactive.c:380
+#: add-interactive.c:382
 #, c-format
 msgid "Huh (%s)?"
 msgstr "Pardon (%s)?"
 
-#: add-interactive.c:533 add-interactive.c:834 reset.c:65 sequencer.c:3509
-#: sequencer.c:3974 sequencer.c:4136 builtin/rebase.c:1233
-#: builtin/rebase.c:1642
+#: add-interactive.c:535 add-interactive.c:836 reset.c:136 sequencer.c:3505
+#: sequencer.c:3970 sequencer.c:4127 builtin/rebase.c:1261
+#: builtin/rebase.c:1671
 msgid "could not read index"
 msgstr "indeks okunamadı"
 
-#: add-interactive.c:588 git-add--interactive.perl:269
+#: add-interactive.c:590 git-add--interactive.perl:269
 #: git-add--interactive.perl:294
 msgid "binary"
 msgstr "ikili"
 
-#: add-interactive.c:646 git-add--interactive.perl:278
+#: add-interactive.c:648 git-add--interactive.perl:278
 #: git-add--interactive.perl:332
 msgid "nothing"
 msgstr "hiçbir şey"
 
-#: add-interactive.c:647 git-add--interactive.perl:314
+#: add-interactive.c:649 git-add--interactive.perl:314
 #: git-add--interactive.perl:329
 msgid "unchanged"
 msgstr "değiştirilmemiş"
 
-#: add-interactive.c:684 git-add--interactive.perl:641
+#: add-interactive.c:686 git-add--interactive.perl:641
 msgid "Update"
 msgstr "Güncelle"
 
-#: add-interactive.c:701 add-interactive.c:889
+#: add-interactive.c:703 add-interactive.c:891
 #, c-format
 msgid "could not stage '%s'"
 msgstr "'%s' hazırlanamadı"
 
-#: add-interactive.c:707 add-interactive.c:896 reset.c:89 sequencer.c:3713
+#: add-interactive.c:709 add-interactive.c:898 reset.c:160 sequencer.c:3709
 msgid "could not write index"
 msgstr "indeks yazılamadı"
 
-#: add-interactive.c:710 git-add--interactive.perl:626
+#: add-interactive.c:712 git-add--interactive.perl:626
 #, c-format, perl-format
 msgid "updated %d path\n"
 msgid_plural "updated %d paths\n"
 msgstr[0] "%d yol güncellendi\n"
 msgstr[1] "%d yol güncellendi\n"
 
-#: add-interactive.c:728 git-add--interactive.perl:676
+#: add-interactive.c:730 git-add--interactive.perl:676
 #, c-format, perl-format
 msgid "note: %s is untracked now.\n"
 msgstr "not: %s artık izlenmiyor.\n"
 
-#: add-interactive.c:733 apply.c:4151 builtin/checkout.c:306
+#: add-interactive.c:735 apply.c:4133 builtin/checkout.c:311
 #: builtin/reset.c:167
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "'%s' yolu için make_cache_entry başarısız oldu"
 
-#: add-interactive.c:763 git-add--interactive.perl:653
+#: add-interactive.c:765 git-add--interactive.perl:653
 msgid "Revert"
 msgstr "Geri al"
 
-#: add-interactive.c:779
+#: add-interactive.c:781
 msgid "Could not parse HEAD^{tree}"
 msgstr "HEAD^{tree} ayrıştırılamadı"
 
-#: add-interactive.c:817 git-add--interactive.perl:629
+#: add-interactive.c:819 git-add--interactive.perl:629
 #, c-format, perl-format
 msgid "reverted %d path\n"
 msgid_plural "reverted %d paths\n"
 msgstr[0] "%d yol geri alındı\n"
 msgstr[1] "%d yol geri alındı\n"
 
-#: add-interactive.c:868 git-add--interactive.perl:693
+#: add-interactive.c:870 git-add--interactive.perl:693
 #, c-format
 msgid "No untracked files.\n"
 msgstr "İzlenmeyen dosya yok.\n"
 
-#: add-interactive.c:872 git-add--interactive.perl:687
+#: add-interactive.c:874 git-add--interactive.perl:687
 msgid "Add untracked"
 msgstr "İzlenmeyenleri ekle"
 
-#: add-interactive.c:899 git-add--interactive.perl:623
+#: add-interactive.c:901 git-add--interactive.perl:623
 #, c-format, perl-format
 msgid "added %d path\n"
 msgid_plural "added %d paths\n"
 msgstr[0] "%d yol eklendi\n"
 msgstr[1] "%d yol eklendi\n"
 
-#: add-interactive.c:929
+#: add-interactive.c:931
 #, c-format
 msgid "ignoring unmerged: %s"
 msgstr "birleştirilmeyenler yok sayılıyor: %s"
 
-#: add-interactive.c:941 add-patch.c:1752 git-add--interactive.perl:1371
+#: add-interactive.c:943 add-patch.c:1758 git-add--interactive.perl:1371
 #, c-format
 msgid "Only binary files changed.\n"
 msgstr "Yalnızca ikili dosyalar değiştirildi.\n"
 
-#: add-interactive.c:943 add-patch.c:1750 git-add--interactive.perl:1373
+#: add-interactive.c:945 add-patch.c:1756 git-add--interactive.perl:1373
 #, c-format
 msgid "No changes.\n"
 msgstr "Değişiklik yok.\n"
 
-#: add-interactive.c:947 git-add--interactive.perl:1381
+#: add-interactive.c:949 git-add--interactive.perl:1381
 msgid "Patch update"
 msgstr "Yama güncellemesi"
 
-#: add-interactive.c:986 git-add--interactive.perl:1794
+#: add-interactive.c:988 git-add--interactive.perl:1794
 msgid "Review diff"
 msgstr "diff'i gözden geçir"
 
-#: add-interactive.c:1014
+#: add-interactive.c:1016
 msgid "show paths with changes"
 msgstr "değiştirilmiş yolları göster"
 
-#: add-interactive.c:1016
+#: add-interactive.c:1018
 msgid "add working tree state to the staged set of changes"
 msgstr "hazırlanan değişikliklere çalışma ağacı durumunu ekle"
 
-#: add-interactive.c:1018
+#: add-interactive.c:1020
 msgid "revert staged set of changes back to the HEAD version"
 msgstr "hazırlanan değişiklikleri HEAD sürümüne geri al"
 
-#: add-interactive.c:1020
+#: add-interactive.c:1022
 msgid "pick hunks and update selectively"
 msgstr "parçaları seç ve seçerek güncelle"
 
-#: add-interactive.c:1022
+#: add-interactive.c:1024
 msgid "view diff between HEAD and index"
 msgstr "HEAD ve indeks arasındaki diff'i gör"
 
-#: add-interactive.c:1024
+#: add-interactive.c:1026
 msgid "add contents of untracked files to the staged set of changes"
 msgstr "izlenmeyen dosyaların içeriğini hazırlanan değişikliklere ekle"
 
-#: add-interactive.c:1032 add-interactive.c:1081
+#: add-interactive.c:1034 add-interactive.c:1083
 msgid "Prompt help:"
 msgstr "İstem yardımı:"
 
-#: add-interactive.c:1034
+#: add-interactive.c:1036
 msgid "select a single item"
 msgstr "tek bir öge seç"
 
-#: add-interactive.c:1036
+#: add-interactive.c:1038
 msgid "select a range of items"
 msgstr "bir öge erimi seç"
 
-#: add-interactive.c:1038
+#: add-interactive.c:1040
 msgid "select multiple ranges"
 msgstr "birden çok erim seç"
 
-#: add-interactive.c:1040 add-interactive.c:1085
+#: add-interactive.c:1042 add-interactive.c:1087
 msgid "select item based on unique prefix"
 msgstr "benzersiz öneke dayanarak öge seç"
 
-#: add-interactive.c:1042
+#: add-interactive.c:1044
 msgid "unselect specified items"
 msgstr "belirtilen ögelerin seçimini kaldır"
 
-#: add-interactive.c:1044
+#: add-interactive.c:1046
 msgid "choose all items"
 msgstr "tüm ögeleri seç"
 
-#: add-interactive.c:1046
+#: add-interactive.c:1048
 msgid "(empty) finish selecting"
 msgstr "(boş) seçimi bitir"
 
-#: add-interactive.c:1083
+#: add-interactive.c:1085
 msgid "select a numbered item"
 msgstr "numaralandırılmış bir öge seç"
 
-#: add-interactive.c:1087
+#: add-interactive.c:1089
 msgid "(empty) select nothing"
 msgstr "(boş) hiçbir şey seçme"
 
-#: add-interactive.c:1095 builtin/clean.c:839 git-add--interactive.perl:1898
+#: add-interactive.c:1097 builtin/clean.c:839 git-add--interactive.perl:1898
 msgid "*** Commands ***"
 msgstr "*** Komutlar ***"
 
-#: add-interactive.c:1096 builtin/clean.c:840 git-add--interactive.perl:1895
+#: add-interactive.c:1098 builtin/clean.c:840 git-add--interactive.perl:1895
 msgid "What now"
 msgstr "Şimdi ne olacak"
 
-#: add-interactive.c:1148 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "staged"
 msgstr "hazırlanmış"
 
-#: add-interactive.c:1148 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "unstaged"
 msgstr "hazırlanmamış"
 
-#: add-interactive.c:1148 apply.c:5020 apply.c:5023 builtin/am.c:2367
-#: builtin/am.c:2370 builtin/bugreport.c:107 builtin/clone.c:128
-#: builtin/fetch.c:153 builtin/merge.c:287 builtin/pull.c:194
-#: builtin/submodule--helper.c:404 builtin/submodule--helper.c:1858
-#: builtin/submodule--helper.c:1861 builtin/submodule--helper.c:2504
-#: builtin/submodule--helper.c:2507 builtin/submodule--helper.c:2574
-#: builtin/submodule--helper.c:2579 builtin/submodule--helper.c:2812
+#: add-interactive.c:1150 apply.c:5002 apply.c:5005 builtin/am.c:2370
+#: builtin/am.c:2373 builtin/bugreport.c:107 builtin/clone.c:132
+#: builtin/fetch.c:154 builtin/merge.c:287 builtin/pull.c:194
+#: builtin/submodule--helper.c:412 builtin/submodule--helper.c:1872
+#: builtin/submodule--helper.c:1875 builtin/submodule--helper.c:2709
+#: builtin/submodule--helper.c:2712 builtin/submodule--helper.c:2891
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "yol"
 
-#: add-interactive.c:1155
+#: add-interactive.c:1157
 msgid "could not refresh index"
 msgstr "indeks yenilenemedi"
 
-#: add-interactive.c:1169 builtin/clean.c:804 git-add--interactive.perl:1805
+#: add-interactive.c:1171 builtin/clean.c:804 git-add--interactive.perl:1805
 #, c-format
 msgid "Bye.\n"
 msgstr "Güle güle.\n"
@@ -619,24 +618,24 @@ msgstr "parça üstbilgisi '%.*s' ayrıştırılamadı"
 msgid "could not parse colored hunk header '%.*s'"
 msgstr "renklendirilmiş parça üstbilgisi '%.*s' ayrıştırılamadı"
 
-#: add-patch.c:420
+#: add-patch.c:431
 msgid "could not parse diff"
 msgstr "diff ayrıştırılamadı"
 
-#: add-patch.c:439
+#: add-patch.c:450
 msgid "could not parse colored diff"
 msgstr "renklendirilmiş diff ayrıştırılamadı"
 
-#: add-patch.c:453
+#: add-patch.c:464
 #, c-format
 msgid "failed to run '%s'"
 msgstr "'%s' çalıştırılamadı"
 
-#: add-patch.c:612
+#: add-patch.c:618
 msgid "mismatched output from interactive.diffFilter"
 msgstr "interactive.diffFilter ögesinden eşleşmeyen çıktı"
 
-#: add-patch.c:613
+#: add-patch.c:619
 msgid ""
 "Your filter must maintain a one-to-one correspondence\n"
 "between its input and output lines."
@@ -644,7 +643,7 @@ msgstr ""
 "Süzgeciniz kendisinin girdi ve çıktı satırları arasında\n"
 "birebir karşılık sağlamalıdır."
 
-#: add-patch.c:791
+#: add-patch.c:797
 #, c-format
 msgid ""
 "expected context line #%d in\n"
@@ -653,7 +652,7 @@ msgstr ""
 "şurada bağlam satırı #%d bekleniyordu:\n"
 "%.*s"
 
-#: add-patch.c:806
+#: add-patch.c:812
 #, c-format
 msgid ""
 "hunks do not overlap:\n"
@@ -666,11 +665,11 @@ msgstr ""
 "\tşununla bitmiyor:\n"
 "%.*s"
 
-#: add-patch.c:1082 git-add--interactive.perl:1115
+#: add-patch.c:1088 git-add--interactive.perl:1115
 msgid "Manual hunk edit mode -- see bottom for a quick guide.\n"
 msgstr "El ile parça düzenleme kipi -- hızlıca öğrenmek için aşağıya bakın.\n"
 
-#: add-patch.c:1086
+#: add-patch.c:1092
 #, c-format
 msgid ""
 "---\n"
@@ -684,7 +683,7 @@ msgstr ""
 "%c kaldırılacak.\n"
 
 #. TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
-#: add-patch.c:1100 git-add--interactive.perl:1129
+#: add-patch.c:1106 git-add--interactive.perl:1129
 msgid ""
 "If it does not apply cleanly, you will be given an opportunity to\n"
 "edit again.  If all lines of the hunk are removed, then the edit is\n"
@@ -694,11 +693,11 @@ msgstr ""
 "sunulacaktır. Parçanın tüm satırları kaldırılırsa düzenleme durdurulur\n"
 "ve parça değiştirilmeden bırakılır.\n"
 
-#: add-patch.c:1133
+#: add-patch.c:1139
 msgid "could not parse hunk header"
 msgstr "parça üstbilgisi ayrıştırılamadı"
 
-#: add-patch.c:1178
+#: add-patch.c:1184
 msgid "'git apply --cached' failed"
 msgstr "'git apply --cached' başarısız oldu"
 
@@ -714,26 +713,26 @@ msgstr "'git apply --cached' başarısız oldu"
 #. Consider translating (saying "no" discards!) as
 #. (saying "n" for "no" discards!) if the translation
 #. of the word "no" does not start with n.
-#: add-patch.c:1247 git-add--interactive.perl:1244
+#: add-patch.c:1253 git-add--interactive.perl:1244
 msgid ""
 "Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? "
 msgstr ""
 "Düzenlediğiniz parça uygulanamıyor. Yeniden düzenlensin mi (\"n (hayır)\" "
 "ıskartaya çıkarır!) [y/n]? "
 
-#: add-patch.c:1290
+#: add-patch.c:1296
 msgid "The selected hunks do not apply to the index!"
 msgstr "Seçili parçalar indekse uygulanamıyor!"
 
-#: add-patch.c:1291 git-add--interactive.perl:1348
+#: add-patch.c:1297 git-add--interactive.perl:1348
 msgid "Apply them to the worktree anyway? "
 msgstr "Çalışma ağacına yine de uygulansın mı? "
 
-#: add-patch.c:1298 git-add--interactive.perl:1351
+#: add-patch.c:1304 git-add--interactive.perl:1351
 msgid "Nothing was applied.\n"
 msgstr "Hiçbir şey uygulanmadı.\n"
 
-#: add-patch.c:1355
+#: add-patch.c:1361
 msgid ""
 "j - leave this hunk undecided, see next undecided hunk\n"
 "J - leave this hunk undecided, see next hunk\n"
@@ -755,73 +754,73 @@ msgstr ""
 "e - geçerli parçayı el ile düzenle\n"
 "? - yardımı yazdır\n"
 
-#: add-patch.c:1517 add-patch.c:1527
+#: add-patch.c:1523 add-patch.c:1533
 msgid "No previous hunk"
 msgstr "Öncesinde parça yok"
 
-#: add-patch.c:1522 add-patch.c:1532
+#: add-patch.c:1528 add-patch.c:1538
 msgid "No next hunk"
 msgstr "Sonrasında parça yok"
 
-#: add-patch.c:1538
+#: add-patch.c:1544
 msgid "No other hunks to goto"
 msgstr "Gidilecek başka bir parça yok"
 
-#: add-patch.c:1549 git-add--interactive.perl:1608
+#: add-patch.c:1555 git-add--interactive.perl:1608
 msgid "go to which hunk (<ret> to see more)? "
 msgstr "hangi parçaya gidilsin (daha fazla görmek için <ret>)? "
 
-#: add-patch.c:1550 git-add--interactive.perl:1610
+#: add-patch.c:1556 git-add--interactive.perl:1610
 msgid "go to which hunk? "
 msgstr "hangi parçaya gidilsin? "
 
-#: add-patch.c:1561
+#: add-patch.c:1567
 #, c-format
 msgid "Invalid number: '%s'"
 msgstr "Geçersiz sayı: '%s'"
 
-#: add-patch.c:1566
+#: add-patch.c:1572
 #, c-format
 msgid "Sorry, only %d hunk available."
 msgid_plural "Sorry, only %d hunks available."
 msgstr[0] "Üzgünüm, yalnızca %d parça kullanılabilir."
 msgstr[1] "Üzgünüm, yalnızca %d parça kullanılabilir."
 
-#: add-patch.c:1575
+#: add-patch.c:1581
 msgid "No other hunks to search"
 msgstr "Aranacak başka parça yok"
 
-#: add-patch.c:1581 git-add--interactive.perl:1663
+#: add-patch.c:1587 git-add--interactive.perl:1663
 msgid "search for regex? "
 msgstr "düzenli ifade aransın mı? "
 
-#: add-patch.c:1596
+#: add-patch.c:1602
 #, c-format
 msgid "Malformed search regexp %s: %s"
 msgstr "Hatalı oluşturulmuş düzenli ifade %s: %s"
 
-#: add-patch.c:1613
+#: add-patch.c:1619
 msgid "No hunk matches the given pattern"
 msgstr "Verilen dizgi ile eşleşen bir parça yok"
 
-#: add-patch.c:1620
+#: add-patch.c:1626
 msgid "Sorry, cannot split this hunk"
 msgstr "Üzgünüm, bu parça bölünemiyor"
 
-#: add-patch.c:1624
+#: add-patch.c:1630
 #, c-format
 msgid "Split into %d hunks."
 msgstr "%d parçaya bölündü."
 
-#: add-patch.c:1628
+#: add-patch.c:1634
 msgid "Sorry, cannot edit this hunk"
 msgstr "Üzgünüm, bu parça düzenlenemiyor"
 
-#: add-patch.c:1680
+#: add-patch.c:1686
 msgid "'git apply' failed"
 msgstr "'git apply' başarısız oldu"
 
-#: advice.c:78
+#: advice.c:81
 #, c-format
 msgid ""
 "\n"
@@ -830,37 +829,37 @@ msgstr ""
 "\n"
 "Bu iletiyi \"git config advice.%s false\" ile devre dışı bırakın"
 
-#: advice.c:94
+#: advice.c:97
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%sipucu: %.*s%s\n"
 
-#: advice.c:178
+#: advice.c:181
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr "Seç-al yapılamaz; birleştirmesi tamamlanmamış dosyalarınız var."
 
-#: advice.c:180
+#: advice.c:183
 msgid "Committing is not possible because you have unmerged files."
 msgstr "İşleme yapılamaz; birleştirmesi tamamlanmamış dosyalarınız var."
 
-#: advice.c:182
+#: advice.c:185
 msgid "Merging is not possible because you have unmerged files."
 msgstr "Birleştirme yapılamaz; birleştirmesi tamamlanmamış dosyalarınız var."
 
-#: advice.c:184
+#: advice.c:187
 msgid "Pulling is not possible because you have unmerged files."
 msgstr "Çekme yapılamaz; birleştirmesi tamamlanmamış dosyalarınız var."
 
-#: advice.c:186
+#: advice.c:189
 msgid "Reverting is not possible because you have unmerged files."
 msgstr "Geriye al yapılamaz; birleştirmesi tamamlanmamış dosyalarınız var."
 
-#: advice.c:188
+#: advice.c:191
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr "%s yapılamıyor; birleştirmesi tamamlanmamış dosyalarınız var."
 
-#: advice.c:196
+#: advice.c:199
 msgid ""
 "Fix them up in the work tree, and then use 'git add/rm <file>'\n"
 "as appropriate to mark resolution and make a commit."
@@ -868,27 +867,27 @@ msgstr ""
 "Onları çalışma ağacında onarın, ardından hazırlığı bitirmek için uygun\n"
 "görüldüğü biçimde 'git add/rm <dosya>' yaptıktan sonra işleyin."
 
-#: advice.c:204
+#: advice.c:207
 msgid "Exiting because of an unresolved conflict."
 msgstr "Çözüme kavuşturulmamış bir çakışmadan dolayı çıkılıyor."
 
-#: advice.c:209 builtin/merge.c:1382
+#: advice.c:212 builtin/merge.c:1388
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Birleştirmenizi sonuçlandırmadınız (MERGE_HEAD mevcut)."
 
-#: advice.c:211
+#: advice.c:214
 msgid "Please, commit your changes before merging."
 msgstr "Birleştirme öncesinde değişikliklerinizi işleyin."
 
-#: advice.c:212
+#: advice.c:215
 msgid "Exiting because of unfinished merge."
 msgstr "Tamamlanmamış birleştirmeden dolayı çıkılıyor."
 
-#: advice.c:217
+#: advice.c:220
 msgid "Not possible to fast-forward, aborting."
 msgstr "İleri sarma olanaklı değil, iptal ediliyor."
 
-#: advice.c:227
+#: advice.c:230
 #, c-format
 msgid ""
 "The following paths and/or pathspecs matched paths that exist\n"
@@ -899,7 +898,7 @@ msgstr ""
 "tanımınızın dışında kalan yollarla eşleştiğinden dolayı\n"
 "indeksinizde güncellenmeyecek:\n"
 
-#: advice.c:234
+#: advice.c:237
 msgid ""
 "If you intend to update such entries, try one of the following:\n"
 "* Use the --sparse option.\n"
@@ -910,7 +909,7 @@ msgstr ""
 "* --sparse seçeneğini kullanın.\n"
 "* Aralıklandırma kurallarını devre dışı bırakın veya değiştirin."
 
-#: advice.c:242
+#: advice.c:245
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -969,81 +968,84 @@ msgstr "tanımlanamayan boşluk seçeneği '%s'"
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "tanımlanamayan boşluk yok sayma seçeneği '%s'"
 
-#: apply.c:136 archive.c:584 range-diff.c:559 revision.c:2303 revision.c:2307
-#: revision.c:2316 revision.c:2321 revision.c:2527 revision.c:2870
-#: revision.c:2874 revision.c:2880 revision.c:2883 revision.c:2885
-#: builtin/add.c:510 builtin/add.c:512 builtin/add.c:529 builtin/add.c:541
-#: builtin/branch.c:727 builtin/checkout.c:467 builtin/checkout.c:470
-#: builtin/checkout.c:1644 builtin/checkout.c:1754 builtin/checkout.c:1757
-#: builtin/clone.c:906 builtin/commit.c:358 builtin/commit.c:361
-#: builtin/commit.c:1196 builtin/describe.c:593 builtin/diff-tree.c:155
-#: builtin/difftool.c:733 builtin/fast-export.c:1245 builtin/fetch.c:2038
-#: builtin/fetch.c:2043 builtin/index-pack.c:1852 builtin/init-db.c:560
-#: builtin/log.c:1946 builtin/log.c:1948 builtin/ls-files.c:778
-#: builtin/merge.c:1403 builtin/merge.c:1405 builtin/pack-objects.c:4073
-#: builtin/push.c:592 builtin/push.c:630 builtin/push.c:636 builtin/push.c:641
-#: builtin/rebase.c:1193 builtin/rebase.c:1195 builtin/rebase.c:1199
-#: builtin/repack.c:684 builtin/repack.c:715 builtin/reset.c:426
-#: builtin/reset.c:462 builtin/rev-list.c:541 builtin/show-branch.c:710
-#: builtin/stash.c:1707 builtin/stash.c:1710 builtin/submodule--helper.c:1316
-#: builtin/submodule--helper.c:2975 builtin/tag.c:526 builtin/tag.c:572
-#: builtin/worktree.c:702
+#: apply.c:138 archive.c:584 parse-options.c:1122 range-diff.c:555
+#: revision.c:2314 revision.c:2318 revision.c:2327 revision.c:2332
+#: revision.c:2560 revision.c:2895 revision.c:2899 revision.c:2907
+#: revision.c:2910 revision.c:2912 builtin/add.c:507 builtin/add.c:509
+#: builtin/add.c:515 builtin/add.c:527 builtin/branch.c:755
+#: builtin/checkout.c:472 builtin/checkout.c:475 builtin/checkout.c:1663
+#: builtin/checkout.c:1773 builtin/checkout.c:1776 builtin/clone.c:921
+#: builtin/commit.c:359 builtin/commit.c:362 builtin/commit.c:1200
+#: builtin/commit.c:1256 builtin/commit.c:1273 builtin/describe.c:593
+#: builtin/diff-tree.c:155 builtin/difftool.c:733 builtin/fast-export.c:1245
+#: builtin/fetch.c:2141 builtin/fetch.c:2162 builtin/fetch.c:2167
+#: builtin/help.c:602 builtin/index-pack.c:1858 builtin/init-db.c:560
+#: builtin/log.c:1968 builtin/log.c:1970 builtin/ls-files.c:778
+#: builtin/merge-base.c:163 builtin/merge-base.c:169 builtin/merge.c:1409
+#: builtin/merge.c:1411 builtin/pack-objects.c:4098 builtin/push.c:592
+#: builtin/push.c:630 builtin/push.c:636 builtin/push.c:641
+#: builtin/rebase.c:1221 builtin/rebase.c:1223 builtin/rebase.c:1227
+#: builtin/repack.c:688 builtin/repack.c:719 builtin/reset.c:433
+#: builtin/reset.c:469 builtin/rev-list.c:537 builtin/show-branch.c:711
+#: builtin/stash.c:1696 builtin/stash.c:1699 builtin/submodule--helper.c:1328
+#: builtin/submodule--helper.c:3054 builtin/tag.c:527 builtin/tag.c:573
+#: builtin/worktree.c:779
 #, c-format
 msgid "options '%s' and '%s' cannot be used together"
 msgstr "'%s' ve '%s' seçenekleri birlikte kullanılamaz"
 
-#: apply.c:139 apply.c:150 apply.c:153
+#: apply.c:141 apply.c:152 apply.c:155
 #, c-format
 msgid "'%s' outside a repository"
 msgstr "'%s' bir depo dışında"
 
-#: apply.c:800
+#: apply.c:807
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr "Zaman damgası düzenli ifadesi %s hazırlanamıyor"
 
-#: apply.c:809
+#: apply.c:816
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr "düzenli ifade girdi için %d döndürdü: %s"
 
-#: apply.c:883
+#: apply.c:890
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr "yamanın %d. satırında dosya adı bulunamıyor"
 
-#: apply.c:921
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr ""
 "git apply: hatalı git-diff - /dev/null bekleniyordu, %s alındı, satır %d"
 
-#: apply.c:927
+#: apply.c:934
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr "git apply: hatalı git-diff - %d. satırda tutarsız yeni dosya adı"
 
-#: apply.c:928
+#: apply.c:935
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr "git apply: hatalı git-diff - %d. satırda tutarsız eski dosya adı"
 
-#: apply.c:933
+#: apply.c:940
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr "git apply: hatalı git-diff - %d. satırda /dev/null bekleniyordu"
 
-#: apply.c:962
+#: apply.c:969
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "%d. satırda geçersiz kip: %s"
 
-#: apply.c:1281
+#: apply.c:1288
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr "tutarsız üstbilgi satırları %d ve %d"
 
-#: apply.c:1371
+#: apply.c:1378
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -1058,93 +1060,93 @@ msgstr[1] ""
 "%d öncü yol adı bileşeni kaldırılırken git diff üstbilgisi dosya adı "
 "bilgisine iye değil (%d. satır)"
 
-#: apply.c:1384
+#: apply.c:1391
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr "git diff üstbilgisi dosya adı bilgisine iye değil (%d. satır)"
 
-#: apply.c:1480
+#: apply.c:1487
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr "recount: beklenmedik satır: %.*s"
 
-#: apply.c:1549
+#: apply.c:1556
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr "%d. satırda üstbilgisi olmayan yama parçacığı: %.*s"
 
-#: apply.c:1752
+#: apply.c:1759
 msgid "new file depends on old contents"
 msgstr "yeni dosyanın eski içeriğe bağımlılığı var"
 
-#: apply.c:1754
+#: apply.c:1761
 msgid "deleted file still has contents"
 msgstr "silinen dosya içinde hâlâ bir şeyler var"
 
-#: apply.c:1788
+#: apply.c:1795
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "hasarlı yama, %d. satır"
 
-#: apply.c:1825
+#: apply.c:1832
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "%s yeni dosyasının eski içeriğe bağımlılığı var"
 
-#: apply.c:1827
+#: apply.c:1834
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "%s silinen dosyasının içinde hâlâ bir şeyler var"
 
-#: apply.c:1830
+#: apply.c:1837
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** uyarı: %s dosyası boş duruma gelir; ancak silinmez"
 
-#: apply.c:1978
+#: apply.c:1985
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "hasarlı ikili yama, %d. satır: %.*s"
 
-#: apply.c:2015
+#: apply.c:2022
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "tanımlanamayan ikili yama, %d. satır"
 
-#: apply.c:2177
+#: apply.c:2184
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "yalnızca anlamsız veri içeren yama, %d. satır"
 
-#: apply.c:2263
+#: apply.c:2270
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "%s sembolik bağı okunamıyor"
 
-#: apply.c:2267
+#: apply.c:2274
 #, c-format
 msgid "unable to open or read %s"
 msgstr "%s açılamıyor veya okunamıyor"
 
-#: apply.c:2936
+#: apply.c:2943
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "geçersiz satır başlangıcı: '%c'"
 
-#: apply.c:3057
+#: apply.c:3064
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "Parça #%d başarılı oldu, %d (%d satır ofset)."
 msgstr[1] "Parça #%d başarılı oldu, %d (%d satır ofset)."
 
-#: apply.c:3069
+#: apply.c:3076
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr ""
 "Bağlam şuna indirildi: (%ld/%ld) (%d konumundaki parçacığı uygulamak için)"
 
-#: apply.c:3075
+#: apply.c:3082
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1153,447 +1155,447 @@ msgstr ""
 "şunu ararken:\n"
 "%.*s"
 
-#: apply.c:3097
+#: apply.c:3104
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "'%s' için ikili yama verisi eksik"
 
-#: apply.c:3105
+#: apply.c:3112
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr "'%s' parçası geri alınmadan bir ikili yama reverse-apply yapılamıyor"
 
-#: apply.c:3152
+#: apply.c:3159
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr "tam indeks satırı olmadan '%s' üzerine bir ikili yama uygulanamıyor"
 
-#: apply.c:3163
+#: apply.c:3170
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr "Bu yama geçerli içerik ile eşleşmeyen '%s' üzerine uygulanır (%s)."
 
-#: apply.c:3171
+#: apply.c:3178
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "yama boş bir '%s' üzerine uygulanır; ancak o boş değil"
 
-#: apply.c:3189
+#: apply.c:3196
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "gereken songörüntü %s ('%s' için) okunamıyor"
 
-#: apply.c:3202
+#: apply.c:3209
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "ikili yama '%s' üzerine uygulanamıyor"
 
-#: apply.c:3209
+#: apply.c:3216
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 "'%s' üzerine ikili yama yanlış sonuç doğuruyor (%s bekleniyordu, %s alındı)"
 
-#: apply.c:3230
+#: apply.c:3237
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "yama başarısız oldu: %s:%ld"
 
-#: apply.c:3353
+#: apply.c:3360
 #, c-format
 msgid "cannot checkout %s"
 msgstr "%s çıkışı yapılamıyor"
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:104 pack-revindex.c:214
-#: setup.c:309
+#: apply.c:3412 apply.c:3423 apply.c:3469 midx.c:105 pack-revindex.c:214
+#: setup.c:310
 #, c-format
 msgid "failed to read %s"
 msgstr "%s okunamadı"
 
-#: apply.c:3413
+#: apply.c:3420
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "'%s' bir sembolik bağın ötesinden okunuyor"
 
-#: apply.c:3442 apply.c:3711
+#: apply.c:3449 apply.c:3721
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "%s yolu yeniden adlandırıldı/silindi"
 
-#: apply.c:3549 apply.c:3726
+#: apply.c:3559 apply.c:3736
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s: indekste bulunmuyor"
 
-#: apply.c:3558 apply.c:3734 apply.c:3978
+#: apply.c:3568 apply.c:3744 apply.c:3960
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s: indeks ile eşleşmiyor"
 
-#: apply.c:3595
+#: apply.c:3605
 msgid "repository lacks the necessary blob to perform 3-way merge."
 msgstr "Depo, 3 yönlü birleştirme için gereken ikili nesneye iye değil."
 
-#: apply.c:3598
+#: apply.c:3608
 #, c-format
 msgid "Performing three-way merge...\n"
 msgstr "3 yönlü birleştirme gerçekleştiriliyor...\n"
 
-#: apply.c:3614 apply.c:3618
+#: apply.c:3624 apply.c:3628
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "'%s' ögesinin geçerli içeriği okunamıyor"
 
-#: apply.c:3630
+#: apply.c:3640
 #, c-format
 msgid "Failed to perform three-way merge...\n"
 msgstr "3 yönlü birleştirme gerçekleştirilemedi...\n"
 
-#: apply.c:3644
+#: apply.c:3654
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "'%s' üzerine yama çakışmalarla birlikte uygulandı.\n"
 
-#: apply.c:3649
+#: apply.c:3659
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "'%s' üzerine yama sorunsuzca uygulandı.\n"
 
-#: apply.c:3666
+#: apply.c:3676
 #, c-format
 msgid "Falling back to direct application...\n"
 msgstr "Doğrudan uygulamaya geri çekiliniyor...\n"
 
-#: apply.c:3678
+#: apply.c:3688
 msgid "removal patch leaves file contents"
 msgstr "kaldırma yaması dosya içeriğini bırakır"
 
-#: apply.c:3751
+#: apply.c:3761
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s: yanlış tür"
 
-#: apply.c:3753
+#: apply.c:3763
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s, %o türüne iye, %o bekleniyordu"
 
-#: apply.c:3918 apply.c:3920 read-cache.c:889 read-cache.c:918
-#: read-cache.c:1381
+#: apply.c:3900 apply.c:3902 read-cache.c:903 read-cache.c:932
+#: read-cache.c:1399
 #, c-format
 msgid "invalid path '%s'"
 msgstr "geçersiz yol '%s'"
 
-#: apply.c:3976
+#: apply.c:3958
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s: indekste halihazırda var"
 
-#: apply.c:3980
+#: apply.c:3962
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s: çalışma dizininde halihazırda var"
 
-#: apply.c:4000
+#: apply.c:3982
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "şunun yeni kipi (%o): %s, eski kip (%o) ile eşleşmiyor"
 
-#: apply.c:4005
+#: apply.c:3987
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "şunun yeni kipi (%o): %s, şunun eski kipi (%o): %s, ile eşleşmiyor"
 
-#: apply.c:4025
+#: apply.c:4007
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "etkilenen dosya '%s' bir sembolik bağın ötesinde"
 
-#: apply.c:4029
+#: apply.c:4011
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s: yama uygulanamıyor"
 
-#: apply.c:4044
+#: apply.c:4026
 #, c-format
 msgid "Checking patch %s..."
 msgstr "%s yaması denetleniyor..."
 
-#: apply.c:4136
+#: apply.c:4118
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "%s altmodülü için sha1 bilgisi eksik veya yararsız"
 
-#: apply.c:4143
+#: apply.c:4125
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "geçerli HEAD'de olmayan %s için kip değişimi"
 
-#: apply.c:4146
+#: apply.c:4128
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "sha1 bilgisi eksik veya yararsız (%s)."
 
-#: apply.c:4155
+#: apply.c:4137
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "%s geçici indekse eklenemedi"
 
-#: apply.c:4165
+#: apply.c:4147
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "geçici indeks şuraya yazılamadı: %s"
 
-#: apply.c:4303
+#: apply.c:4285
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "%s indeksten kaldırılamıyor"
 
-#: apply.c:4337
+#: apply.c:4319
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "%s altmodülü için hasarlı yama"
 
-#: apply.c:4343
+#: apply.c:4325
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "yeni oluşturulan '%s' dosyasının bilgileri alınamıyor"
 
-#: apply.c:4351
+#: apply.c:4333
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr "yeni oluşturulan %s dosyası için yardımcı bellek oluşturulamıyor"
 
-#: apply.c:4357 apply.c:4502
+#: apply.c:4339 apply.c:4484
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "%s için önbellek girdisi eklenemiyor"
 
-#: apply.c:4400 builtin/bisect--helper.c:540 builtin/gc.c:2258
+#: apply.c:4382 builtin/bisect--helper.c:540 builtin/gc.c:2258
 #: builtin/gc.c:2293
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "şuraya yazılamadı: '%s'"
 
-#: apply.c:4404
+#: apply.c:4386
 #, c-format
 msgid "closing file '%s'"
 msgstr "'%s' dosyası kapatılıyor"
 
-#: apply.c:4474
+#: apply.c:4456
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "'%s' dosyası yazılamıyor, %o kipi"
 
-#: apply.c:4572
+#: apply.c:4554
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "%s yaması sorunsuzca uygulandı."
 
-#: apply.c:4580
+#: apply.c:4562
 msgid "internal error"
 msgstr "iç hata"
 
-#: apply.c:4583
+#: apply.c:4565
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "%%s yaması %d geri çevirme ile uygulanıyor..."
 msgstr[1] "%%s yaması %d geri çevirme ile uygulanıyor..."
 
-#: apply.c:4594
+#: apply.c:4576
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr ".rej dosya adı %.*s.rej olarak kısaltılıyor"
 
-#: apply.c:4602
+#: apply.c:4584
 #, c-format
 msgid "cannot open %s"
 msgstr "%s açılamıyor"
 
-#: apply.c:4616
+#: apply.c:4598
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "Parça #%d sorunsuzca uygulandı."
 
-#: apply.c:4620
+#: apply.c:4602
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "Parça %d geri çevrildi."
 
-#: apply.c:4749
+#: apply.c:4731
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "'%s' yaması atlandı."
 
-#: apply.c:4758
+#: apply.c:4740
 msgid "No valid patches in input (allow with \"--allow-empty\")"
 msgstr "Girdide geçerli yama yok (\"--allow-empty\" ile izin ver)"
 
-#: apply.c:4779
+#: apply.c:4761
 msgid "unable to read index file"
 msgstr "indeks dosyası okunamıyor"
 
-#: apply.c:4936
+#: apply.c:4918
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "'%s' yaması açılamıyor: %s"
 
-#: apply.c:4963
+#: apply.c:4945
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "%d boşluk hatası susturuldu"
 msgstr[1] "%d boşluk hatası susturuldu"
 
-#: apply.c:4969 apply.c:4984
+#: apply.c:4951 apply.c:4966
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d satır boşluk hatası ekliyor."
 msgstr[1] "%d satır boşluk hatası ekliyor."
 
-#: apply.c:4977
+#: apply.c:4959
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] "Boşluk hataları düzeltildikten sonra %d satır uygulandı."
 msgstr[1] "Boşluk hataları düzeltildikten sonra %d satır uygulandı."
 
-#: apply.c:4993 builtin/add.c:704 builtin/mv.c:338 builtin/rm.c:430
+#: apply.c:4975 builtin/add.c:690 builtin/mv.c:338 builtin/rm.c:430
 msgid "Unable to write new index file"
 msgstr "Yeni indeks dosyası yazılamıyor"
 
-#: apply.c:5021
+#: apply.c:5003
 msgid "don't apply changes matching the given path"
 msgstr "verilen yol ile eşleşen değişiklikleri uygulama"
 
-#: apply.c:5024
+#: apply.c:5006
 msgid "apply changes matching the given path"
 msgstr "verilen yol ile eşleşen değişiklikleri uygula"
 
-#: apply.c:5026 builtin/am.c:2376
+#: apply.c:5008 builtin/am.c:2379
 msgid "num"
 msgstr "sayı"
 
-#: apply.c:5027
+#: apply.c:5009
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "geleneksel diff yollarından <sayı> öncü eğik çizgiyi kaldır"
 
-#: apply.c:5030
+#: apply.c:5012
 msgid "ignore additions made by the patch"
 msgstr "yamanın yaptığı eklemeleri yok say"
 
-#: apply.c:5032
+#: apply.c:5014
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "yamayı uygulama yerine girdi için diffstat çıktısı ver"
 
-#: apply.c:5036
+#: apply.c:5018
 msgid "show number of added and deleted lines in decimal notation"
 msgstr "eklenen ve silinen satırların sayısını onluk birimde göster"
 
-#: apply.c:5038
+#: apply.c:5020
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "yamayı uygulama yerine girdi için bir özet çıktısı ver"
 
-#: apply.c:5040
+#: apply.c:5022
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "yamayı uygulama yerine yamanın uygulanabilir olup olmadığına bak"
 
-#: apply.c:5042
+#: apply.c:5024
 msgid "make sure the patch is applicable to the current index"
 msgstr "yamanın geçerli indekse uygulanabilir olduğundan emin ol"
 
-#: apply.c:5044
+#: apply.c:5026
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "yeni dosyaları `git add --intent-to-add` ile imle"
 
-#: apply.c:5046
+#: apply.c:5028
 msgid "apply a patch without touching the working tree"
 msgstr "çalışma ağacına dokunmadan bir yama uygula"
 
-#: apply.c:5048
+#: apply.c:5030
 msgid "accept a patch that touches outside the working area"
 msgstr "çalışma ağacının dışına dokunan bir yamayı kabul et"
 
-#: apply.c:5051
+#: apply.c:5033
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "ek olarak yamayı da uygula (--stat/--summary/--check ile kullan)"
 
-#: apply.c:5053
+#: apply.c:5035
 msgid "attempt three-way merge, fall back on normal patch if that fails"
 msgstr "3 yönlü birleştirme dene, başarısız olursa normal yamaya geri çekil"
 
-#: apply.c:5055
+#: apply.c:5037
 msgid "build a temporary index based on embedded index information"
 msgstr "gömülü indeks bilgisini temel alan geçici bir indeks oluştur"
 
-#: apply.c:5058 builtin/checkout-index.c:196
+#: apply.c:5040 builtin/checkout-index.c:230
 msgid "paths are separated with NUL character"
 msgstr "yollar NUL karakteri ile ayrılır"
 
-#: apply.c:5060
+#: apply.c:5042
 msgid "ensure at least <n> lines of context match"
 msgstr "en az <n> bağlam satırının eşleştiğinden emin ol"
 
-#: apply.c:5061 builtin/am.c:2352 builtin/am.c:2355
+#: apply.c:5043 builtin/am.c:2355 builtin/am.c:2358
 #: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
-#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3960
-#: builtin/rebase.c:1051
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3983
+#: builtin/rebase.c:1079
 msgid "action"
 msgstr "eylem"
 
-#: apply.c:5062
+#: apply.c:5044
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "boşluk hatası içeren yeni veya değiştirilmiş satırları algıla"
 
-#: apply.c:5065 apply.c:5068
+#: apply.c:5047 apply.c:5050
 msgid "ignore changes in whitespace when finding context"
 msgstr "bağlam bulurken boşluk değişikliklerini yok say"
 
-#: apply.c:5071
+#: apply.c:5053
 msgid "apply the patch in reverse"
 msgstr "yamayı tersten uygula"
 
-#: apply.c:5073
+#: apply.c:5055
 msgid "don't expect at least one line of context"
 msgstr "en az bir satır bağlam bekleme"
 
-#: apply.c:5075
+#: apply.c:5057
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "reddedilmiş parçaları ilgili *.rej dosyalarında bırak"
 
-#: apply.c:5077
+#: apply.c:5059
 msgid "allow overlapping hunks"
 msgstr "üst üste binen parçalara izin ver"
 
-#: apply.c:5080
+#: apply.c:5062
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "dosya sonunda yanlışlıkla algılanan eksik yenisatırı hoş gör"
 
-#: apply.c:5083
+#: apply.c:5065
 msgid "do not trust the line counts in the hunk headers"
 msgstr "parça üstbilgisindeki satır sayımına güvenme"
 
-#: apply.c:5085 builtin/am.c:2364
+#: apply.c:5067 builtin/am.c:2367
 msgid "root"
 msgstr "kök"
 
-#: apply.c:5086
+#: apply.c:5068
 msgid "prepend <root> to all filenames"
 msgstr "tüm dosya adlarının başına <kök> ekle"
 
-#: apply.c:5089
+#: apply.c:5071
 msgid "don't return error for empty patches"
 msgstr "boş yamalar için hata döndürme"
 
-#: archive-tar.c:125 archive-zip.c:345
+#: archive-tar.c:125 archive-zip.c:346
 #, c-format
 msgid "cannot stream blob %s"
 msgstr "%s ikili nesnesi akıtılamıyor"
 
-#: archive-tar.c:265 archive-zip.c:358
+#: archive-tar.c:265 archive-zip.c:359
 #, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
 msgstr "desteklenmeyen dosya kipi: 0%o (SHA1: %s)"
@@ -1612,22 +1614,22 @@ msgstr "açıklayıcı yeniden yönlendirilemiyor"
 msgid "'%s' filter reported error"
 msgstr "'%s' süzgeci hata bildirdi"
 
-#: archive-zip.c:318
+#: archive-zip.c:319
 #, c-format
 msgid "path is not valid UTF-8: %s"
 msgstr "yol geçerli UTF-8 değil: %s"
 
-#: archive-zip.c:322
+#: archive-zip.c:323
 #, c-format
 msgid "path too long (%d chars, SHA1: %s): %s"
 msgstr "yol çok uzun (%d karakter, SHA1: %s): %s"
 
-#: archive-zip.c:469 builtin/pack-objects.c:365 builtin/pack-objects.c:368
+#: archive-zip.c:470 builtin/pack-objects.c:363 builtin/pack-objects.c:366
 #, c-format
 msgid "deflate error (%d)"
 msgstr "söndürme hatası (%d)"
 
-#: archive-zip.c:603
+#: archive-zip.c:604
 #, c-format
 msgid "timestamp too large for this system: %<PRIuMAX>"
 msgstr "zaman damgası bu sistem için çok büyük: %<PRIuMAX>"
@@ -1636,10 +1638,6 @@ msgstr "zaman damgası bu sistem için çok büyük: %<PRIuMAX>"
 msgid "git archive [<options>] <tree-ish> [<path>...]"
 msgstr "git archive [<seçenekler>] <ağacımsı> [<yol>...]"
 
-#: archive.c:15
-msgid "git archive --list"
-msgstr "git archive --list"
-
 #: archive.c:16
 msgid ""
 "git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"
@@ -1651,12 +1649,12 @@ msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote <depo> [--exec <komut>] --list"
 
 #: archive.c:188 archive.c:341 builtin/gc.c:497 builtin/notes.c:238
-#: builtin/tag.c:578
+#: builtin/tag.c:579
 #, c-format
 msgid "cannot read '%s'"
 msgstr "'%s' okunamıyor"
 
-#: archive.c:426 builtin/add.c:215 builtin/add.c:671 builtin/rm.c:334
+#: archive.c:426 builtin/add.c:214 builtin/add.c:657 builtin/rm.c:334
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "yol belirteci '%s' hiçbir dosya ile eşleşmedi"
@@ -1698,7 +1696,7 @@ msgstr "biçim"
 msgid "archive format"
 msgstr "arşiv biçimi"
 
-#: archive.c:552 builtin/log.c:1790
+#: archive.c:552 builtin/log.c:1809
 msgid "prefix"
 msgstr "önek"
 
@@ -1706,12 +1704,12 @@ msgstr "önek"
 msgid "prepend prefix to each pathname in the archive"
 msgstr "öneki arşivdeki tüm yol adlarının başına ekle"
 
-#: archive.c:554 archive.c:557 builtin/blame.c:880 builtin/blame.c:884
-#: builtin/blame.c:885 builtin/commit-tree.c:115 builtin/config.c:135
+#: archive.c:554 archive.c:557 builtin/blame.c:881 builtin/blame.c:885
+#: builtin/blame.c:886 builtin/commit-tree.c:115 builtin/config.c:135
 #: builtin/fast-export.c:1181 builtin/fast-export.c:1183
-#: builtin/fast-export.c:1187 builtin/grep.c:935 builtin/hash-object.c:103
+#: builtin/fast-export.c:1187 builtin/grep.c:936 builtin/hash-object.c:104
 #: builtin/ls-files.c:654 builtin/ls-files.c:657 builtin/notes.c:410
-#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:190
+#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:195
 msgid "file"
 msgstr "dosya"
 
@@ -1739,8 +1737,8 @@ msgstr "sıkıştırma düzeyini ayarla"
 msgid "list supported archive formats"
 msgstr "desteklenen arşiv biçimlerini listele"
 
-#: archive.c:568 builtin/archive.c:89 builtin/clone.c:118 builtin/clone.c:121
-#: builtin/submodule--helper.c:1870 builtin/submodule--helper.c:2513
+#: archive.c:568 builtin/archive.c:89 builtin/clone.c:122 builtin/clone.c:125
+#: builtin/submodule--helper.c:1884 builtin/submodule--helper.c:2718
 msgid "repo"
 msgstr "depo"
 
@@ -1761,11 +1759,12 @@ msgstr "uzak konum komutu git-upload-archive'e olan yol"
 msgid "Unexpected option --remote"
 msgstr "Beklenmedik seçenek --remote"
 
-#: archive.c:580 fetch-pack.c:300 revision.c:2887 builtin/add.c:544
-#: builtin/add.c:576 builtin/checkout.c:1763 builtin/commit.c:370
-#: builtin/fast-export.c:1230 builtin/index-pack.c:1848 builtin/log.c:2115
-#: builtin/reset.c:435 builtin/reset.c:493 builtin/rm.c:281
-#: builtin/stash.c:1719 builtin/worktree.c:508 http-fetch.c:144
+#: archive.c:580 fetch-pack.c:300 revision.c:2914 builtin/add.c:530
+#: builtin/add.c:562 builtin/checkout.c:1782 builtin/clone.c:1099
+#: builtin/clone.c:1102 builtin/commit.c:371 builtin/fast-export.c:1230
+#: builtin/index-pack.c:1854 builtin/log.c:2140 builtin/reset.c:442
+#: builtin/reset.c:500 builtin/rm.c:281 builtin/stash.c:1708
+#: builtin/worktree.c:580 builtin/worktree.c:781 http-fetch.c:144
 #: http-fetch.c:153
 #, c-format
 msgid "the option '%s' requires '%s'"
@@ -1785,17 +1784,17 @@ msgstr "Bilinmeyen arşiv biçimi '%s'"
 msgid "Argument not supported for format '%s': -%d"
 msgstr "'%s' biçimi için desteklenmeyen argüman: -%d"
 
-#: attr.c:203
+#: attr.c:202
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s geçerli bir öznitelik adı değil"
 
-#: attr.c:364
+#: attr.c:363
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s izin verilmiyor: %s:%d"
 
-#: attr.c:404
+#: attr.c:403
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1813,12 +1812,12 @@ msgstr "'%s' dosyasında hatalı tırnağa alınmış içerik: %s"
 msgid "We cannot bisect more!\n"
 msgstr "Daha fazla ikili arama yapılamıyor!\n"
 
-#: bisect.c:764
+#: bisect.c:765
 #, c-format
 msgid "Not a valid commit name %s"
 msgstr "Geçerli bir işleme adı değil: %s"
 
-#: bisect.c:789
+#: bisect.c:790
 #, c-format
 msgid ""
 "The merge base %s is bad.\n"
@@ -1827,7 +1826,7 @@ msgstr ""
 "Birleştirme temeli %s hatalı.\n"
 "Bu demek oluyor ki hata %s ve [%s] arasında düzeltilmiş.\n"
 
-#: bisect.c:794
+#: bisect.c:795
 #, c-format
 msgid ""
 "The merge base %s is new.\n"
@@ -1836,7 +1835,7 @@ msgstr ""
 "Birleştirme temeli %s yeni.\n"
 "Özellik %s ve [%s] arasında değişmiş.\n"
 
-#: bisect.c:799
+#: bisect.c:800
 #, c-format
 msgid ""
 "The merge base %s is %s.\n"
@@ -1845,7 +1844,7 @@ msgstr ""
 "Birleştirme temeli %s, %s.\n"
 "Bu demek oluyor ki ilk '%s' işlemesi %s ve [%s] arasında.\n"
 
-#: bisect.c:807
+#: bisect.c:808
 #, c-format
 msgid ""
 "Some %s revs are not ancestors of the %s rev.\n"
@@ -1856,7 +1855,7 @@ msgstr ""
 "git bisect bu durumda düzgünce çalışamaz.\n"
 "%s ve %s revizyonlarını birbirine mi karıştırdınız?\n"
 
-#: bisect.c:820
+#: bisect.c:821
 #, c-format
 msgid ""
 "the merge base between %s and [%s] must be skipped.\n"
@@ -1867,36 +1866,36 @@ msgstr ""
 "%s işlemesinin %s ve [%s] arasında olduğundan emin olamıyoruz.\n"
 "Yine de sürdüreceğiz."
 
-#: bisect.c:859
+#: bisect.c:860
 #, c-format
 msgid "Bisecting: a merge base must be tested\n"
 msgstr "İkili arama: Birleştirme temelleri sınanmalı\n"
 
-#: bisect.c:909
+#: bisect.c:910
 #, c-format
 msgid "a %s revision is needed"
 msgstr "bir %s revizyonu gerekiyor"
 
-#: bisect.c:939
+#: bisect.c:940
 #, c-format
 msgid "could not create file '%s'"
 msgstr "'%s' dosyası oluşturulamadı"
 
-#: bisect.c:985 builtin/merge.c:155
+#: bisect.c:986 builtin/merge.c:155
 #, c-format
 msgid "could not read file '%s'"
 msgstr "'%s' dosyası okunamadı"
 
-#: bisect.c:1025
+#: bisect.c:1026
 msgid "reading bisect refs failed"
 msgstr "ikili arama başvurularını okuma başarısız oldu"
 
-#: bisect.c:1055
+#: bisect.c:1056
 #, c-format
 msgid "%s was both %s and %s\n"
 msgstr "%s hem %s hem %s idi\n"
 
-#: bisect.c:1064
+#: bisect.c:1065
 #, c-format
 msgid ""
 "No testable commit found.\n"
@@ -1905,7 +1904,7 @@ msgstr ""
 "Sınanabilir bir işleme bulunamadı.\n"
 "Hatalı yol argümanları ile mi başladınız?\n"
 
-#: bisect.c:1093
+#: bisect.c:1094
 #, c-format
 msgid "(roughly %d step)"
 msgid_plural "(roughly %d steps)"
@@ -1915,54 +1914,54 @@ msgstr[1] "(aşağı yukarı %d adım)"
 #. TRANSLATORS: the last %s will be replaced with "(roughly %d
 #. steps)" translation.
 #.
-#: bisect.c:1099
+#: bisect.c:1100
 #, c-format
 msgid "Bisecting: %d revision left to test after this %s\n"
 msgid_plural "Bisecting: %d revisions left to test after this %s\n"
 msgstr[0] "İkili arama: Şundan sonra sınanacak %d revizyon kaldı: %s\n"
 msgstr[1] "İkili arama: Şundan sonra sınanacak %d revizyon kaldı: %s\n"
 
-#: blame.c:2776
+#: blame.c:2773
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents ve --reverse birlikte pek iyi gitmiyor."
 
-#: blame.c:2790
+#: blame.c:2787
 msgid "cannot use --contents with final commit object name"
 msgstr "--contents son işleme nesnesi adı ile kullanılamıyor"
 
-#: blame.c:2811
+#: blame.c:2808
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "--reverse ve --first-parent birlikte en son işlemenin belirtilmesini "
 "gerektiriyor"
 
-#: blame.c:2820 bundle.c:224 midx.c:1042 ref-filter.c:2370 remote.c:2158
-#: sequencer.c:2352 sequencer.c:4899 submodule.c:883 builtin/commit.c:1114
-#: builtin/log.c:429 builtin/log.c:1036 builtin/log.c:1644 builtin/log.c:2071
-#: builtin/log.c:2362 builtin/merge.c:431 builtin/pack-objects.c:3373
-#: builtin/pack-objects.c:3775 builtin/pack-objects.c:3790
+#: blame.c:2817 bundle.c:231 midx.c:1058 ref-filter.c:2371 remote.c:2157
+#: sequencer.c:2348 sequencer.c:4872 submodule.c:913 builtin/commit.c:1118
+#: builtin/log.c:437 builtin/log.c:1055 builtin/log.c:1663 builtin/log.c:2096
+#: builtin/log.c:2387 builtin/merge.c:431 builtin/pack-objects.c:3381
+#: builtin/pack-objects.c:3781 builtin/pack-objects.c:3796
 #: builtin/shortlog.c:255
 msgid "revision walk setup failed"
 msgstr "revizyonda gezinme ayarlaması başarısız oldu"
 
-#: blame.c:2838
+#: blame.c:2835
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "--reverse --first-parent birlikte ilk üst öge zincirinin yanında erim "
 "gerektiriyor"
 
-#: blame.c:2849
+#: blame.c:2846
 #, c-format
 msgid "no such path %s in %s"
 msgstr "şurada %s yolu bulunamadı: %s"
 
-#: blame.c:2860
+#: blame.c:2857
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "%s ikili nesnesi %s yolunda okunamıyor"
 
-#: branch.c:77
+#: branch.c:93
 msgid ""
 "cannot inherit upstream tracking configuration of multiple refs when "
 "rebasing is requested"
@@ -1970,32 +1969,32 @@ msgstr ""
 "yeniden temellendirme istendiğinde birden çok başvurunun üst kaynak izleme "
 "yapılandırması miras alınamıyor"
 
-#: branch.c:88
+#: branch.c:104
 #, c-format
 msgid "not setting branch '%s' as its own upstream"
 msgstr "'%s' dalı kendi üst kaynağı olarak ayarlanamaz"
 
-#: branch.c:144
+#: branch.c:160
 #, c-format
 msgid "branch '%s' set up to track '%s' by rebasing."
 msgstr ""
 "'%s' dalı '%s' ögesini yeniden temellendirme ile izlemek üzere ayarlandı."
 
-#: branch.c:145
+#: branch.c:161
 #, c-format
 msgid "branch '%s' set up to track '%s'."
 msgstr "'%s' dalı '%s' ögesini izlemek üzere ayarlandı."
 
-#: branch.c:148
+#: branch.c:164
 #, c-format
 msgid "branch '%s' set up to track:"
 msgstr "'%s' dalı şunu izlemek üzere ayarlandı:"
 
-#: branch.c:160
+#: branch.c:176
 msgid "unable to write upstream branch configuration"
 msgstr "üstkaynak dal yapılandırması yazılamıyor"
 
-#: branch.c:162
+#: branch.c:178
 msgid ""
 "\n"
 "After fixing the error cause you may try to fix up\n"
@@ -2005,50 +2004,88 @@ msgstr ""
 "Hata nedenini ortadan kaldırdıktan sonra uzak konum izleme\n"
 "bilgisini onarmayı şunu çalıştırarak deneyebilirsiniz:"
 
-#: branch.c:203
+#: branch.c:219
 #, c-format
 msgid "asked to inherit tracking from '%s', but no remote is set"
 msgstr ""
 "'%s' konumundan izleme miras istendi; ancak bir uzak konum ayarlanmamış"
 
-#: branch.c:209
+#: branch.c:225
 #, c-format
 msgid "asked to inherit tracking from '%s', but no merge configuration is set"
 msgstr ""
 "'%s' konumundan izleme miras istendi; ancak bir birleştirme yapılandırması "
 "ayarlanmamış"
 
-#: branch.c:252
+#: branch.c:277
+#, c-format
+msgid "not tracking: ambiguous information for ref '%s'"
+msgstr "izlenmiyor: '%s' başvurusu için belirsiz bilgi"
+
+#. TRANSLATORS: This is a line listing a remote with duplicate
+#. refspecs in the advice message below. For RTL languages you'll
+#. probably want to swap the "%s" and leading "  " space around.
+#.
+#. TRANSLATORS: This is line item of ambiguous object output
+#. from describe_ambiguous_object() above. For RTL languages
+#. you'll probably want to swap the "%s" and leading " " space
+#. around.
+#.
+#: branch.c:289 object-name.c:464
+#, c-format
+msgid "  %s\n"
+msgstr "  %s\n"
+
+#. TRANSLATORS: The second argument is a \n-delimited list of
+#. duplicate refspecs, composed above.
+#.
+#: branch.c:295
 #, c-format
-msgid "not tracking: ambiguous information for ref %s"
-msgstr "izlenmiyor: %s başvurusu için belirsiz bilgi"
+msgid ""
+"There are multiple remotes whose fetch refspecs map to the remote\n"
+"tracking ref '%s':\n"
+"%s\n"
+"This is typically a configuration error.\n"
+"\n"
+"To support setting up tracking branches, ensure that\n"
+"different remotes' fetch refspecs map into different\n"
+"tracking namespaces."
+msgstr ""
+"Getirme başvuru belirteçleri, '%s' uzak izleyen başvurusuna\n"
+"eşlemlenen birden çok uzak konum var:\n"
+"%s\n"
+"Bu, genelde bir yapılandırma hatasıdır.\n"
+"\n"
+"İzleyen dalları ayarlamayı desteklemek için, farklı uzak\n"
+"konumların getirme belirteçlerinin değişik izleme ad alanlarına\n"
+"eşlemlendiğinden emin olun."
 
-#: branch.c:287
+#: branch.c:344
 #, c-format
 msgid "'%s' is not a valid branch name"
 msgstr "'%s' geçerli bir dal adı değil"
 
-#: branch.c:307
+#: branch.c:364
 #, c-format
 msgid "a branch named '%s' already exists"
 msgstr "'%s' adında bir dal halihazırda var"
 
-#: branch.c:313
+#: branch.c:370
 #, c-format
 msgid "cannot force update the branch '%s' checked out at '%s'"
 msgstr "'%s' dalı zorla güncellenemiyor, '%s' konumunda çıkış yapılmış"
 
-#: branch.c:336
+#: branch.c:393
 #, c-format
 msgid "cannot set up tracking information; starting point '%s' is not a branch"
 msgstr "izleme bilgisi ayarlanamıyor; başlangıç noktası '%s' bir dal değil"
 
-#: branch.c:338
+#: branch.c:395
 #, c-format
 msgid "the requested upstream branch '%s' does not exist"
 msgstr "istenen üstkaynak dalı '%s' mevcut değil"
 
-#: branch.c:340
+#: branch.c:397
 msgid ""
 "\n"
 "If you are planning on basing your work on an upstream\n"
@@ -2068,126 +2105,145 @@ msgstr ""
 "tasarlıyorsanız itme sırasında üstkaynak yapılandırmasını\n"
 "da ayarlamak için \"git push -u\" kullanmak isteyebilirsiniz."
 
-#: branch.c:384 builtin/replace.c:321 builtin/replace.c:377
+#: branch.c:445 builtin/replace.c:321 builtin/replace.c:377
 #: builtin/replace.c:423 builtin/replace.c:453
 #, c-format
 msgid "not a valid object name: '%s'"
 msgstr "geçerli bir nesne adı değil: '%s'"
 
-#: branch.c:404
+#: branch.c:465
 #, c-format
 msgid "ambiguous object name: '%s'"
 msgstr "belirsiz nesne adı: '%s'"
 
-#: branch.c:409
+#: branch.c:470
 #, c-format
 msgid "not a valid branch point: '%s'"
 msgstr "geçerli bir dal noktası değil: '%s'"
 
-#: branch.c:469
+#: branch.c:658
+#, c-format
+msgid "submodule '%s': unable to find submodule"
+msgstr "'%s' altmodülü: altmodül bulunamıyor"
+
+#: branch.c:661
+#, c-format
+msgid ""
+"You may try updating the submodules using 'git checkout %s && git submodule "
+"update --init'"
+msgstr ""
+"Altmodülleri güncellemeyi 'git checkout %s && git submodule update --init' "
+"kullanarak deneyebilirsiniz."
+
+#: branch.c:672 branch.c:698
+#, c-format
+msgid "submodule '%s': cannot create branch '%s'"
+msgstr "'%s' altmodülü: '%s' dalı oluşturulamıyor"
+
+#: branch.c:730
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr "'%s' çıkışı '%s' konumunda halihazırda yapılmış"
 
-#: branch.c:494
+#: branch.c:755
 #, c-format
 msgid "HEAD of working tree %s is not updated"
 msgstr "%s çalışma ağacının HEAD'i güncellenmemiş"
 
-#: bundle.c:44
+#: bundle.c:45
 #, c-format
 msgid "unrecognized bundle hash algorithm: %s"
 msgstr "bilinmeyen demet sağlama algoritması: %s"
 
-#: bundle.c:48
+#: bundle.c:53
 #, c-format
 msgid "unknown capability '%s'"
 msgstr "bilinmeyen yetenek '%s'"
 
-#: bundle.c:74
+#: bundle.c:79
 #, c-format
 msgid "'%s' does not look like a v2 or v3 bundle file"
 msgstr "'%s' bir v2 veya v3 demet dosyası gibi görünmüyor"
 
-#: bundle.c:113
+#: bundle.c:118
 #, c-format
 msgid "unrecognized header: %s%s (%d)"
 msgstr "tanımlanamayan üstbilgi: %s%s (%d)"
 
-#: bundle.c:140 rerere.c:464 rerere.c:674 sequencer.c:2620 sequencer.c:3406
-#: builtin/commit.c:862
+#: bundle.c:145 rerere.c:464 rerere.c:675 sequencer.c:2616 sequencer.c:3402
+#: builtin/commit.c:865
 #, c-format
 msgid "could not open '%s'"
 msgstr "'%s' açılamadı"
 
-#: bundle.c:198
+#: bundle.c:203
 msgid "Repository lacks these prerequisite commits:"
 msgstr "Depo aşağıdaki önkoşul işlemelere iye değil:"
 
-#: bundle.c:201
+#: bundle.c:206
 msgid "need a repository to verify a bundle"
 msgstr "bir demeti doğrulamak için bir depo gerekiyor"
 
-#: bundle.c:257
+#: bundle.c:264
 #, c-format
 msgid "The bundle contains this ref:"
-msgid_plural "The bundle contains these %d refs:"
-msgstr[0] "Demet şu başvuruyu içeriyor:"
-msgstr[1] "Demet şu %d başvuruyu içeriyor:"
+msgid_plural "The bundle contains these %<PRIuMAX> refs:"
+msgstr[0] "Demet bu başvuruyu içeriyor:"
+msgstr[1] "Demet bu %<PRIuMAX> başvuruyu içeriyor:"
 
-#: bundle.c:264
+#: bundle.c:272
 msgid "The bundle records a complete history."
 msgstr "Demet tam bir geçmiş kaydını yazar."
 
-#: bundle.c:266
+#: bundle.c:274
 #, c-format
 msgid "The bundle requires this ref:"
-msgid_plural "The bundle requires these %d refs:"
-msgstr[0] "Demet şu işlemeyi gerektiriyor:"
-msgstr[1] "Demet şu %d işlemeyi gerektiriyor:"
+msgid_plural "The bundle requires these %<PRIuMAX> refs:"
+msgstr[0] "Demet bu başvuruyu gerektiriyor:"
+msgstr[1] "Demet bu %<PRIuMAX> başvuruyu gerektiriyor:"
 
-#: bundle.c:333
+#: bundle.c:350
 msgid "unable to dup bundle descriptor"
 msgstr "demet açıklayıcısı çoğaltılamıyor"
 
-#: bundle.c:340
+#: bundle.c:357
 msgid "Could not spawn pack-objects"
 msgstr "pack-objects ortaya çıkarılamadı"
 
-#: bundle.c:351
+#: bundle.c:368
 msgid "pack-objects died"
 msgstr "pack-objects sonlandı"
 
-#: bundle.c:400
+#: bundle.c:417
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "'%s' başvurusu revizyon listesi seçenekleri tarafından dışlandı"
 
-#: bundle.c:504
+#: bundle.c:533 builtin/log.c:211 builtin/log.c:1975 builtin/shortlog.c:400
+#, c-format
+msgid "unrecognized argument: %s"
+msgstr "tanımlanamayan argüman: %s"
+
+#: bundle.c:548
 #, c-format
 msgid "unsupported bundle version %d"
 msgstr "desteklenmeyen demet sürümü %d"
 
-#: bundle.c:506
+#: bundle.c:550
 #, c-format
 msgid "cannot write bundle version %d with algorithm %s"
 msgstr "demet sürümü %d, %s algoritması ile yazılamıyor"
 
-#: bundle.c:524 builtin/log.c:210 builtin/log.c:1953 builtin/shortlog.c:399
-#, c-format
-msgid "unrecognized argument: %s"
-msgstr "tanımlanamayan argüman: %s"
-
-#: bundle.c:553
+#: bundle.c:600
 msgid "Refusing to create empty bundle."
 msgstr "Boş demet oluşturma reddediliyor."
 
-#: bundle.c:563
+#: bundle.c:610
 #, c-format
 msgid "cannot create '%s'"
 msgstr "'%s' oluşturulamıyor"
 
-#: bundle.c:588
+#: bundle.c:639
 msgid "index-pack died"
 msgstr "index-pack sonlandı"
 
@@ -2215,7 +2271,7 @@ msgstr "en son iri parçanın numarası sıfır olmayan %<PRIx32>"
 msgid "invalid color value: %.*s"
 msgstr "geçersiz renk değeri: %.*s"
 
-#: commit-graph.c:204 midx.c:51
+#: commit-graph.c:204 midx.c:52
 msgid "invalid hash version"
 msgstr "geçersiz sağlama sürümü"
 
@@ -2243,207 +2299,208 @@ msgstr "commit-graph sağlama sürümü %X, %X ile eşleşmiyor"
 msgid "commit-graph file is too small to hold %u chunks"
 msgstr "commit-graph dosyası %u iri parça tutmak için pek küçük"
 
-#: commit-graph.c:482
+#: commit-graph.c:485
 msgid "commit-graph has no base graphs chunk"
 msgstr "commit-graph temel grafiği iri parçasına iye değil"
 
-#: commit-graph.c:492
+#: commit-graph.c:495
 msgid "commit-graph chain does not match"
 msgstr "commit-graph zinciri eşleşmiyor"
 
-#: commit-graph.c:540
+#: commit-graph.c:543
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
 msgstr "geçersiz commit-graph zinciri: '%s'. satır bir sağlama değil"
 
-#: commit-graph.c:564
+#: commit-graph.c:567
 msgid "unable to find all commit-graph files"
 msgstr "tüm commit-graph dosyaları bulunamıyor"
 
-#: commit-graph.c:749 commit-graph.c:786
+#: commit-graph.c:752 commit-graph.c:789
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr "geçersiz işleme konumu, commit-graph büyük olasılıkla hasar görmüş"
 
-#: commit-graph.c:770
+#: commit-graph.c:773
 #, c-format
 msgid "could not find commit %s"
 msgstr "%s işlemesi bulunamadı"
 
-#: commit-graph.c:803
+#: commit-graph.c:806
 msgid "commit-graph requires overflow generation data but has none"
 msgstr "commit-graph, taşım oluşturma verisi gerektiriyor; ancak hiç yok"
 
-#: commit-graph.c:1108 builtin/am.c:1369
+#: commit-graph.c:1111 builtin/am.c:1370 builtin/checkout.c:775
+#: builtin/clone.c:705
 #, c-format
 msgid "unable to parse commit %s"
 msgstr "%s işlemesi ayrıştırılamıyor"
 
-#: commit-graph.c:1370 builtin/pack-objects.c:3070
+#: commit-graph.c:1373 builtin/pack-objects.c:3078
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "%s nesnesinin türü alınamıyor"
 
-#: commit-graph.c:1401
+#: commit-graph.c:1404
 msgid "Loading known commits in commit graph"
 msgstr "İşleme grafiğindeki bilinen işlemeler yükleniyor"
 
-#: commit-graph.c:1418
+#: commit-graph.c:1421
 msgid "Expanding reachable commits in commit graph"
 msgstr "İşleme grafiğindeki ulaşılabilir işlemeler genişletiliyor"
 
-#: commit-graph.c:1438
+#: commit-graph.c:1441
 msgid "Clearing commit marks in commit graph"
 msgstr "İşleme grafiğindeki işleme imleri temizleniyor"
 
-#: commit-graph.c:1457
+#: commit-graph.c:1460
 msgid "Computing commit graph topological levels"
 msgstr "İşleme grafiği ilingesel düzeyleri hesaplanıyor"
 
-#: commit-graph.c:1510
+#: commit-graph.c:1513
 msgid "Computing commit graph generation numbers"
 msgstr "İşleme grafiği kuşak sayıları hesaplanıyor"
 
-#: commit-graph.c:1591
+#: commit-graph.c:1598
 msgid "Computing commit changed paths Bloom filters"
 msgstr ""
 "Geçerli işlemelerdeki değiştirilmiş yollar için Bloom süzgeci hesaplanıyor"
 
-#: commit-graph.c:1668
+#: commit-graph.c:1675
 msgid "Collecting referenced commits"
 msgstr "Başvurulmuş işlemeler toplanıyor"
 
-#: commit-graph.c:1693
+#: commit-graph.c:1701
 #, c-format
-msgid "Finding commits for commit graph in %d pack"
-msgid_plural "Finding commits for commit graph in %d packs"
-msgstr[0] "%d pakette işleme grafiği için işlemeler bulunuyor"
-msgstr[1] "%d pakette işleme grafiği için işlemeler bulunuyor"
+msgid "Finding commits for commit graph in %<PRIuMAX> pack"
+msgid_plural "Finding commits for commit graph in %<PRIuMAX> packs"
+msgstr[0] "%<PRIuMAX> pakette işleme grafiği için işlemeler bulunuyor"
+msgstr[1] "%<PRIuMAX> pakette işleme grafiği için işlemeler bulunuyor"
 
-#: commit-graph.c:1706
+#: commit-graph.c:1714
 #, c-format
 msgid "error adding pack %s"
 msgstr "%s paketi eklenirken hata"
 
-#: commit-graph.c:1710
+#: commit-graph.c:1718
 #, c-format
 msgid "error opening index for %s"
 msgstr "%s için indeks açılırken hata"
 
-#: commit-graph.c:1747
+#: commit-graph.c:1756
 msgid "Finding commits for commit graph among packed objects"
 msgstr "Paketlenmiş nesneler arasından işleme grafiği için işlemeler bulunuyor"
 
-#: commit-graph.c:1765
+#: commit-graph.c:1774
 msgid "Finding extra edges in commit graph"
 msgstr "İşleme grafiğindeki ek sınırlar bulunuyor"
 
-#: commit-graph.c:1814
+#: commit-graph.c:1823
 msgid "failed to write correct number of base graph ids"
 msgstr "temel grafiği numaralarının doğru sayısı yazılamadı"
 
-#: commit-graph.c:1845 midx.c:1149
+#: commit-graph.c:1854 midx.c:1168 builtin/sparse-checkout.c:475
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "%s öncü dizinleri oluşturulamıyor"
 
-#: commit-graph.c:1858
+#: commit-graph.c:1868
 msgid "unable to create temporary graph layer"
 msgstr "geçici grafik katmanı oluşturulamıyor"
 
-#: commit-graph.c:1863
+#: commit-graph.c:1873
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr "'%s' için paylaşılan izinler ayarlanamıyor"
 
-#: commit-graph.c:1920
+#: commit-graph.c:1930
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "İşleme grafiği %d geçişte yazılıyor"
 msgstr[1] "İşleme grafiği %d geçişte yazılıyor"
 
-#: commit-graph.c:1956
+#: commit-graph.c:1967
 msgid "unable to open commit-graph chain file"
 msgstr "commit-graph zincir dosyası açılamıyor"
 
-#: commit-graph.c:1972
+#: commit-graph.c:1983
 msgid "failed to rename base commit-graph file"
 msgstr "temel commit-graph dosyası yeniden adlandırılamadı"
 
-#: commit-graph.c:1992
+#: commit-graph.c:2004
 msgid "failed to rename temporary commit-graph file"
 msgstr "geçici commit-graph dosyası yeniden adlandırılamadı"
 
-#: commit-graph.c:2125
+#: commit-graph.c:2137
 msgid "Scanning merged commits"
 msgstr "Birleştirilen işlemeler taranıyor"
 
-#: commit-graph.c:2169
+#: commit-graph.c:2181
 msgid "Merging commit-graph"
 msgstr "commit-graph birleştiriliyor"
 
-#: commit-graph.c:2277
+#: commit-graph.c:2289
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr ""
 "bir commit-graph yazılmaya çalışılıyor; ancak 'core.commitGraph' devre dışı"
 
-#: commit-graph.c:2384
+#: commit-graph.c:2396
 msgid "too many commits to write graph"
 msgstr "grafik yazımı için çok fazla işleme"
 
-#: commit-graph.c:2482
+#: commit-graph.c:2494
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 "commit-graph dosyasının sağlama toplamı yanlış ve büyük olasılıkla hasar "
 "görmüş"
 
-#: commit-graph.c:2492
+#: commit-graph.c:2504
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "commit-graph hatalı nesne tanımlayıcı sırasına iye: %s, sonra %s"
 
-#: commit-graph.c:2502 commit-graph.c:2517
+#: commit-graph.c:2514 commit-graph.c:2529
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr "commit-graph hatalı fanout değerine iye: fanout[%d] = %u != %u"
 
-#: commit-graph.c:2509
+#: commit-graph.c:2521
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "%s işlemesi commit-graph'tan ayrıştırılamadı"
 
-#: commit-graph.c:2527
+#: commit-graph.c:2539
 msgid "Verifying commits in commit graph"
 msgstr "İşleme grafiğindeki işlemeler doğrulanıyor"
 
-#: commit-graph.c:2542
+#: commit-graph.c:2554
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "%s işlemesi commit-graph için olan nesne veritabanından ayrıştırılamadı"
 
-#: commit-graph.c:2549
+#: commit-graph.c:2561
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
 "commit-graph'teki %s işlemesi için olan kök ağaç nesne tanımlayıcısı %s != %s"
 
-#: commit-graph.c:2559
+#: commit-graph.c:2571
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr "%s işlemesi için olan commit-graph üst öge listesi çok uzun"
 
-#: commit-graph.c:2568
+#: commit-graph.c:2580
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "%s için olan commit-graph üst ögesi %s != %s"
 
-#: commit-graph.c:2582
+#: commit-graph.c:2594
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr "%s işlemesi için olan commit-graph üst öge listesi erkenden sonlanıyor"
 
-#: commit-graph.c:2587
+#: commit-graph.c:2599
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
@@ -2451,7 +2508,7 @@ msgstr ""
 "%s işlemesi için commit-graph kuşak sayısı sıfır; ancak başka yerlerde "
 "sıfırdan farklı"
 
-#: commit-graph.c:2591
+#: commit-graph.c:2603
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
@@ -2459,29 +2516,29 @@ msgstr ""
 "%s işlemesi için commit-graph kuşak sayısı sıfırdan farklı; ancak başka "
 "yerlerde sıfır"
 
-#: commit-graph.c:2608
+#: commit-graph.c:2620
 #, c-format
 msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
 msgstr "%s işlemesi için commit-graph kuşağı %<PRIuMAX> < %<PRIuMAX>"
 
-#: commit-graph.c:2614
+#: commit-graph.c:2626
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
 "%s işlemesi için commit-graph içindeki işleme tarihi %<PRIuMAX> != %<PRIuMAX>"
 
-#: commit.c:53 sequencer.c:3109 builtin/am.c:399 builtin/am.c:444
-#: builtin/am.c:449 builtin/am.c:1448 builtin/am.c:2123 builtin/replace.c:456
+#: commit.c:54 sequencer.c:3105 builtin/am.c:400 builtin/am.c:445
+#: builtin/am.c:450 builtin/am.c:1449 builtin/am.c:2124 builtin/replace.c:456
 #, c-format
 msgid "could not parse %s"
 msgstr "%s ayrıştırılamadı"
 
-#: commit.c:55
+#: commit.c:56
 #, c-format
 msgid "%s %s is not a commit!"
 msgstr "%s %s bir işleme değil!"
 
-#: commit.c:196
+#: commit.c:197
 msgid ""
 "Support for <GIT_DIR>/info/grafts is deprecated\n"
 "and will be removed in a future Git version.\n"
@@ -2501,28 +2558,28 @@ msgstr ""
 "\"git config advice.graftFileDeprecated false\"\n"
 "kullanarak bu iletiyi kapatabilirsiniz."
 
-#: commit.c:1241
+#: commit.c:1252
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr ""
 "%s işlemesinin güvenilmeyen bir GPG imzası var, iddiaya göre %s tarafından."
 
-#: commit.c:1245
+#: commit.c:1256
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "%s işlemesinin hatalı bir GPG imzası var, iddiaya göre %s tarafından."
 
-#: commit.c:1248
+#: commit.c:1259
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "%s işlemesinin bir GPG imzası yok."
 
-#: commit.c:1251
+#: commit.c:1262
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "%s işlemesinin %s tarafından sağlanan düzgün bir GPG imzası var\n"
 
-#: commit.c:1505
+#: commit.c:1516
 msgid ""
 "Warning: commit message did not conform to UTF-8.\n"
 "You may want to amend it after fixing the message, or set the config\n"
@@ -2537,7 +2594,15 @@ msgstr ""
 msgid "memory exhausted"
 msgstr "bellek tükendi"
 
-#: config.c:125
+#: compat/terminal.c:167
+msgid "cannot resume in the background, please use 'fg' to resume"
+msgstr "arka planda sürdürülemiyor, sürdürmek için 'fg' kullanın"
+
+#: compat/terminal.c:168
+msgid "cannot restore terminal settings"
+msgstr "uçbirim ayarları geri yüklenemiyor"
+
+#: config.c:143
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2552,341 +2617,368 @@ msgstr ""
 "\t%s\n"
 "Bu dairesel içermelerden dolayı olabilir."
 
-#: config.c:141
+#: config.c:159
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "içerme yolu '%s' genişletilemedi"
 
-#: config.c:152
+#: config.c:170
 msgid "relative config includes must come from files"
 msgstr "göreceli yapılandırma içermeleri dosyalardan gelmeli"
 
-#: config.c:201
+#: config.c:219
 msgid "relative config include conditionals must come from files"
 msgstr "göreceli yapılandırma içerme koşulluları dosyalardan gelmeli"
 
-#: config.c:398
+#: config.c:364
+msgid ""
+"remote URLs cannot be configured in file directly or indirectly included by "
+"includeIf.hasconfig:remote.*.url"
+msgstr ""
+"uzak URL'ler dosya içinde doğrudan veya başka türlü includeIf.hasconfig:"
+"remote.*.url kullanarak yapılandırılamaz"
+
+#: config.c:508
 #, c-format
 msgid "invalid config format: %s"
 msgstr "geçersiz yapılandırma biçimi: %s"
 
-#: config.c:402
+#: config.c:512
 #, c-format
 msgid "missing environment variable name for configuration '%.*s'"
 msgstr "'%.*s' yapılandırması için ortam değişkeni adı eksik"
 
-#: config.c:407
+#: config.c:517
 #, c-format
 msgid "missing environment variable '%s' for configuration '%.*s'"
 msgstr "şu yapılandırma için '%s' ortam değişkeni eksik: '%.*s'"
 
-#: config.c:443
+#: config.c:553
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "anahtar, bir bölüm içermiyor: %s"
 
-#: config.c:448
+#: config.c:558
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr "anahtar, bir değişken adı içermiyor: %s"
 
-#: config.c:470 sequencer.c:2806
+#: config.c:580 sequencer.c:2802
 #, c-format
 msgid "invalid key: %s"
 msgstr "geçersiz anahtar: %s"
 
-#: config.c:475
+#: config.c:585
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "geçersiz anahtar (yenisatır): %s"
 
-#: config.c:495
+#: config.c:605
 msgid "empty config key"
 msgstr "boş yapılandırma anahtarı"
 
-#: config.c:513 config.c:525
+#: config.c:623 config.c:635
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "düzmece yapılandırma parametresi: %s"
 
-#: config.c:539 config.c:556 config.c:563 config.c:572
+#: config.c:649 config.c:666 config.c:673 config.c:682
 #, c-format
 msgid "bogus format in %s"
 msgstr "%s içinde düzmece biçim"
 
-#: config.c:606
+#: config.c:716
 #, c-format
 msgid "bogus count in %s"
 msgstr "%s içinde düzmece sayım"
 
-#: config.c:610
+#: config.c:720
 #, c-format
 msgid "too many entries in %s"
 msgstr "%s içinde çok fazla girdi"
 
-#: config.c:620
+#: config.c:730
 #, c-format
 msgid "missing config key %s"
 msgstr "%s yapılandırma anahtarı eksik"
 
-#: config.c:628
+#: config.c:738
 #, c-format
 msgid "missing config value %s"
 msgstr "%s yapılandırma değeri eksik"
 
-#: config.c:979
+#: config.c:1089
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "hatalı yapılandırma satırı %d, %s ikili nesnesi içinde"
 
-#: config.c:983
+#: config.c:1093
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "hatalı yapılandırma satırı %d, %s dosyası içinde"
 
-#: config.c:987
+#: config.c:1097
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "standart girdi içinde hatalı yapılandırma satırı %d"
 
-#: config.c:991
+#: config.c:1101
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "hatalı yapılandırma satırı %d, %s altmodül ikili nesnesi içinde"
 
-#: config.c:995
+#: config.c:1105
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "hatalı yapılandırma satırı %d, %s komut satırı içinde"
 
-#: config.c:999
+#: config.c:1109
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "hatalı yapılandırma satırı %d (%s içinde)"
 
-#: config.c:1136
+#: config.c:1246
 msgid "out of range"
 msgstr "erim dışı"
 
-#: config.c:1136
+#: config.c:1246
 msgid "invalid unit"
 msgstr "geçersiz birim"
 
-#: config.c:1137
+#: config.c:1247
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "hatalı sayısal yapılandırma değeri '%s', '%s' için: %s"
 
-#: config.c:1147
+#: config.c:1257
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr ""
 "hatalı sayısal yapılandırma değeri '%s', '%s' için, %s ikili nesnesi içinde: "
 "%s"
 
-#: config.c:1150
+#: config.c:1260
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr ""
 "hatalı sayısal yapılandırma değeri '%s', '%s' için, %s dosyası içinde: %s"
 
-#: config.c:1153
+#: config.c:1263
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr ""
 "hatalı sayısal yapılandırma değeri '%s', '%s' için, standart girdi içinde: %s"
 
-#: config.c:1156
+#: config.c:1266
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr ""
 "hatalı sayısal yapılandırma değeri '%s', '%s' için, %s altmodül ikili "
 "nesnesi içinde: %s"
 
-#: config.c:1159
+#: config.c:1269
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr ""
 "hatalı sayısal yapılandırma değeri '%s', '%s' için, %s komut satırı içinde: "
 "%s"
 
-#: config.c:1162
+#: config.c:1272
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr "hatalı sayısal yapılandırma değeri '%s', '%s' için (%s içinde): %s"
 
-#: config.c:1241
+#: config.c:1368
+#, c-format
+msgid "invalid value for variable %s"
+msgstr "%s değişkeni için geçersiz değer"
+
+#: config.c:1389
+#, c-format
+msgid "ignoring unknown core.fsync component '%s'"
+msgstr "bilinmeyen core.fsync bileşeni '%s' yok sayılıyor"
+
+#: config.c:1425
 #, c-format
 msgid "bad boolean config value '%s' for '%s'"
 msgstr "hatalı Boole yapılandırma değeri '%s', '%s' için"
 
-#: config.c:1259
+#: config.c:1443
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "şuradaki kullanıcı dizini genişletilemedi: '%s'"
 
-#: config.c:1268
+#: config.c:1452
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "%s', '%s' için geçerli bir zaman damgası değil"
 
-#: config.c:1361
+#: config.c:1545
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "kısaltma uzunluğu erim dışında: %d"
 
-#: config.c:1375 config.c:1386
+#: config.c:1559 config.c:1570
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "hatalı zlib sıkıştırma düzeyi %d"
 
-#: config.c:1476
+#: config.c:1660
 msgid "core.commentChar should only be one character"
 msgstr "core.commentChar yalnızca bir karakter olmalı"
 
-#: config.c:1509
+#: config.c:1692
+#, c-format
+msgid "ignoring unknown core.fsyncMethod value '%s'"
+msgstr "bilinmeyen core.fsyncMethod değeri '%s' yok sayılıyor"
+
+#: config.c:1698
+msgid "core.fsyncObjectFiles is deprecated; use core.fsync instead"
+msgstr "core.fsyncObjectFiles artık kullanılmıyor; yerine core.fsync kullanın"
+
+#: config.c:1714
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "nesne oluşturma için geçersiz kip: %s"
 
-#: config.c:1584
+#: config.c:1800
 #, c-format
 msgid "malformed value for %s"
 msgstr "%s için hatalı oluşturulmuş değer"
 
-#: config.c:1610
+#: config.c:1826
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "%s için hatalı oluşturulmuş değer: %s"
 
-#: config.c:1611
+#: config.c:1827
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr "nothing, matching, simple, upstream veya current içinden biri olmalı"
 
-#: config.c:1672 builtin/pack-objects.c:4053
+#: config.c:1888 builtin/pack-objects.c:4078
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "hatalı paket sıkıştırma düzeyi %d"
 
-#: config.c:1795
+#: config.c:2014
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "'%s' yapılandırma ikili nesnesi yüklenemiyor"
 
-#: config.c:1798
+#: config.c:2017
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "'%s' başvurusu ikili bir nesneye işaret etmiyor"
 
-#: config.c:1816
+#: config.c:2035
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "'%s' yapılandırma ikili nesnesi çözülemiyor"
 
-#: config.c:1861
+#: config.c:2080
 #, c-format
 msgid "failed to parse %s"
 msgstr "%s ayrıştırılamadı"
 
-#: config.c:1917
+#: config.c:2136
 msgid "unable to parse command-line config"
 msgstr "komut satırı yapılandırması ayrıştırılamıyor"
 
-#: config.c:2285
+#: config.c:2512
 msgid "unknown error occurred while reading the configuration files"
 msgstr "yapılandırma dosyaları okunurken beklenmedik bir hata oluştu"
 
-#: config.c:2459
+#: config.c:2686
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "Geçersiz %s: '%s'"
 
-#: config.c:2504
+#: config.c:2731
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr "splitIndex.maxPercentChange değeri '%d' 0 ve 100 arasında olmalı"
 
-#: config.c:2550
+#: config.c:2763
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "'%s' komut satırı yapılandırmasından ayrıştırılamıyor"
 
-#: config.c:2552
+#: config.c:2765
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "hatalı yapılandırma değişkeni '%s', '%s' dosyası %d. satırda"
 
-#: config.c:2637
+#: config.c:2850
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "geçersiz bölüm adı '%s'"
 
-#: config.c:2669
+#: config.c:2882
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s birden çok değere iye"
 
-#: config.c:2698
+#: config.c:2911
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "yeni yapılandırma dosyası %s yazılamadı"
 
-#: config.c:2950 config.c:3277
+#: config.c:3177 config.c:3518
 #, c-format
 msgid "could not lock config file %s"
 msgstr "%s yapılandırma dosyası kilitlenemedi"
 
-#: config.c:2961
+#: config.c:3188
 #, c-format
 msgid "opening %s"
 msgstr "%s açılıyor"
 
-#: config.c:2998 builtin/config.c:361
+#: config.c:3225 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "geçersiz dizgi: %s"
 
-#: config.c:3023
+#: config.c:3250
 #, c-format
 msgid "invalid config file %s"
 msgstr "geçersiz yapılandırma dosyası %s"
 
-#: config.c:3036 config.c:3290
+#: config.c:3263 config.c:3531
 #, c-format
 msgid "fstat on %s failed"
 msgstr "%s üzerinde fstat başarısız oldu"
 
-#: config.c:3047
+#: config.c:3274
 #, c-format
 msgid "unable to mmap '%s'%s"
 msgstr "'%s'%s mmap yapılamıyor"
 
-#: config.c:3057 config.c:3295
+#: config.c:3284 config.c:3536
 #, c-format
 msgid "chmod on %s failed"
 msgstr "%s üzerinde chmod başarısız oldu"
 
-#: config.c:3142 config.c:3392
+#: config.c:3369 config.c:3633
 #, c-format
 msgid "could not write config file %s"
 msgstr "%s yapılandırma dosyası yazılamadı"
 
-#: config.c:3176
+#: config.c:3403
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "'%s', '%s' olarak ayarlanamadı"
 
-#: config.c:3178 builtin/remote.c:662 builtin/remote.c:860 builtin/remote.c:868
+#: config.c:3405 builtin/remote.c:666 builtin/remote.c:885 builtin/remote.c:893
 #, c-format
 msgid "could not unset '%s'"
 msgstr "'%s' ayarı kapatılamadı"
 
-#: config.c:3268
+#: config.c:3509
 #, c-format
 msgid "invalid section name: %s"
 msgstr "geçersiz bölüm adı: %s"
 
-#: config.c:3435
+#: config.c:3676
 #, c-format
 msgid "missing value for '%s'"
 msgstr "'%s' için değer eksik"
@@ -3213,74 +3305,74 @@ msgstr "şu anahtar için yetki araması atlanıyor: credential.%s"
 
 #: credential.c:112
 msgid "refusing to work with credential missing host field"
-msgstr "anamakine bilgisi eksik yetki ile çalışma reddediliyor"
+msgstr "ana makine bilgisi eksik yetki ile çalışma reddediliyor"
 
 #: credential.c:114
 msgid "refusing to work with credential missing protocol field"
 msgstr "protokol bilgisi eksik yetki ile çalışma reddediliyor"
 
-#: credential.c:395
+#: credential.c:396
 #, c-format
 msgid "url contains a newline in its %s component: %s"
 msgstr "url, kendisinin %s bileşeninde bir yenisatır içeriyor: %s"
 
-#: credential.c:439
+#: credential.c:440
 #, c-format
 msgid "url has no scheme: %s"
 msgstr "url'nin şeması yok: %s"
 
-#: credential.c:512
+#: credential.c:513
 #, c-format
 msgid "credential url cannot be parsed: %s"
 msgstr "yetki url'si ayrıştırılamıyor: %s"
 
-#: date.c:138
+#: date.c:139
 msgid "in the future"
 msgstr "gelecekte"
 
-#: date.c:144
+#: date.c:145
 #, c-format
 msgid "%<PRIuMAX> second ago"
 msgid_plural "%<PRIuMAX> seconds ago"
 msgstr[0] "%<PRIuMAX> saniye önce"
 msgstr[1] "%<PRIuMAX> saniye önce"
 
-#: date.c:151
+#: date.c:152
 #, c-format
 msgid "%<PRIuMAX> minute ago"
 msgid_plural "%<PRIuMAX> minutes ago"
 msgstr[0] "%<PRIuMAX> dakika önce"
 msgstr[1] "%<PRIuMAX> dakika önce"
 
-#: date.c:158
+#: date.c:159
 #, c-format
 msgid "%<PRIuMAX> hour ago"
 msgid_plural "%<PRIuMAX> hours ago"
 msgstr[0] "%<PRIuMAX> saat önce"
 msgstr[1] "%<PRIuMAX> saat önce"
 
-#: date.c:165
+#: date.c:166
 #, c-format
 msgid "%<PRIuMAX> day ago"
 msgid_plural "%<PRIuMAX> days ago"
 msgstr[0] "%<PRIuMAX> gün önce"
 msgstr[1] "%<PRIuMAX> gün önce"
 
-#: date.c:171
+#: date.c:172
 #, c-format
 msgid "%<PRIuMAX> week ago"
 msgid_plural "%<PRIuMAX> weeks ago"
 msgstr[0] "%<PRIuMAX> hafta önce"
 msgstr[1] "%<PRIuMAX> hafta önce"
 
-#: date.c:178
+#: date.c:179
 #, c-format
 msgid "%<PRIuMAX> month ago"
 msgid_plural "%<PRIuMAX> months ago"
 msgstr[0] "%<PRIuMAX> ay önce"
 msgstr[1] "%<PRIuMAX> ay önce"
 
-#: date.c:189
+#: date.c:190
 #, c-format
 msgid "%<PRIuMAX> year"
 msgid_plural "%<PRIuMAX> years"
@@ -3288,14 +3380,14 @@ msgstr[0] "%<PRIuMAX> yıl"
 msgstr[1] "%<PRIuMAX> yıl"
 
 #. TRANSLATORS: "%s" is "<n> years"
-#: date.c:192
+#: date.c:193
 #, c-format
 msgid "%s, %<PRIuMAX> month ago"
 msgid_plural "%s, %<PRIuMAX> months ago"
 msgstr[0] "%s, %<PRIuMAX> ay önce"
 msgstr[1] "%s, %<PRIuMAX> ay önce"
 
-#: date.c:197 date.c:202
+#: date.c:198 date.c:203
 #, c-format
 msgid "%<PRIuMAX> year ago"
 msgid_plural "%<PRIuMAX> years ago"
@@ -3328,10 +3420,14 @@ msgstr ""
 msgid "Marked %d islands, done.\n"
 msgstr "%d delta adası imlendi, bitti.\n"
 
-#: diff-merges.c:70
+#: diff-merges.c:81 gpg-interface.c:719 gpg-interface.c:734 ls-refs.c:37
+#: parallel-checkout.c:42 sequencer.c:2805 setup.c:563 builtin/am.c:203
+#: builtin/am.c:2243 builtin/am.c:2287 builtin/blame.c:724 builtin/blame.c:742
+#: builtin/fetch.c:792 builtin/pack-objects.c:3515 builtin/pull.c:45
+#: builtin/pull.c:47 builtin/pull.c:321
 #, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr "--diff-merges için bilinmeyen değer: %s"
+msgid "invalid value for '%s': '%s'"
+msgstr "'%s' için geçersiz değer: '%s'"
 
 #: diff-lib.c:561
 msgid "--merge-base does not work with ranges"
@@ -3365,17 +3461,17 @@ msgstr ""
 "Bir git deposu değil. Bir çalışma ağacının dışındaki iki yolu karşılaştırmak "
 "için --no-index kullanın."
 
-#: diff.c:158
+#: diff.c:159
 #, c-format
 msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
 msgstr "  dirstat kesim yüzdesi '%s' ayrıştırılamadı\n"
 
-#: diff.c:163
+#: diff.c:164
 #, c-format
 msgid "  Unknown dirstat parameter '%s'\n"
 msgstr "  Bilinmeyen dirstat parametresi '%s'\n"
 
-#: diff.c:299
+#: diff.c:300
 msgid ""
 "color moved setting must be one of 'no', 'default', 'blocks', 'zebra', "
 "'dimmed-zebra', 'plain'"
@@ -3383,7 +3479,7 @@ msgstr ""
 "\"color-moved\" ayarı 'no', 'default', 'blocks', 'zebra', 'dimmed-zebra', "
 "'plain' seçeneklerinden biri olmalıdır"
 
-#: diff.c:327
+#: diff.c:328
 #, c-format
 msgid ""
 "unknown color-moved-ws mode '%s', possible values are 'ignore-space-change', "
@@ -3392,7 +3488,7 @@ msgstr ""
 "bilinmeyen color-moved-ws kipi '%s', olabilecek değerler: 'ignore-space-"
 "change', 'ignore-space-at-eol', 'ignore-all-space' 'allow-indentation-change'"
 
-#: diff.c:335
+#: diff.c:336
 msgid ""
 "color-moved-ws: allow-indentation-change cannot be combined with other "
 "whitespace modes"
@@ -3400,12 +3496,12 @@ msgstr ""
 "color-moved-ws: allow-indentation-change diğer boşluk kipleri ile birlikte "
 "kullanılamaz"
 
-#: diff.c:412
+#: diff.c:413
 #, c-format
 msgid "Unknown value for 'diff.submodule' config variable: '%s'"
 msgstr "'diff.submodule' yapılandırma değişkeni için bilinmeyen değer: '%s'"
 
-#: diff.c:472
+#: diff.c:473
 #, c-format
 msgid ""
 "Found errors in 'diff.dirstat' config variable:\n"
@@ -3414,29 +3510,29 @@ msgstr ""
 "'diff.dirstat' yapılandırma değişkeninde hatalar bulundu:\n"
 "%s"
 
-#: diff.c:4237
+#: diff.c:4282
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "dış diff sonlandı, %s konumunda durdu"
 
-#: diff.c:4589
+#: diff.c:4677 parse-options.c:1114
 #, c-format
 msgid "options '%s', '%s', '%s', and '%s' cannot be used together"
 msgstr "'%s', '%s', '%s' ve '%s' seçenekleri birlikte kullanılamaz"
 
-#: diff.c:4593 builtin/difftool.c:736 builtin/log.c:1982 builtin/worktree.c:506
+#: diff.c:4681 parse-options.c:1118 builtin/worktree.c:578
 #, c-format
 msgid "options '%s', '%s', and '%s' cannot be used together"
 msgstr "'%s', '%s' ve '%s' seçenekleri birlikte kullanılamaz"
 
-#: diff.c:4597
+#: diff.c:4685
 #, c-format
 msgid "options '%s' and '%s' cannot be used together, use '%s' with '%s'"
 msgstr ""
 "'%s' ve '%s' seçenekleri birlikte kullanılamaz, '%s' seçeneğini '%s' ile "
 "kullanın"
 
-#: diff.c:4601
+#: diff.c:4689
 #, c-format
 msgid ""
 "options '%s' and '%s' cannot be used together, use '%s' with '%s' and '%s'"
@@ -3444,22 +3540,22 @@ msgstr ""
 "'%s' ve '%s' seçenekleri birlikte kullanılamaz, '%s' seçeneğini '%s' ve '%s' "
 "ile kullanın"
 
-#: diff.c:4681
+#: diff.c:4769
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow tam olarak yalnızca bir yol belirteci gerektiriyor"
 
-#: diff.c:4729
+#: diff.c:4823
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "geçersiz --stat değeri: %s"
 
-#: diff.c:4734 diff.c:4739 diff.c:4744 diff.c:4749 diff.c:5277
+#: diff.c:4828 diff.c:4833 diff.c:4838 diff.c:4843 diff.c:5319
 #: parse-options.c:217 parse-options.c:221
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s bir sayısal değer bekliyor"
 
-#: diff.c:4766
+#: diff.c:4860
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3468,42 +3564,42 @@ msgstr ""
 "--dirstat/-X seçenek parametresi ayrıştırılamadı:\n"
 "%s"
 
-#: diff.c:4851
+#: diff.c:4893
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "şurada bilinmeyen değişiklik sınıfı '%c': --diff-filter=%s"
 
-#: diff.c:4875
+#: diff.c:4917
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "şundan sonra bilinmeyen değer: ws-error-highlight=%.*s"
 
-#: diff.c:4889
+#: diff.c:4931
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "'%s' çözülemiyor"
 
-#: diff.c:4939 diff.c:4945
+#: diff.c:4981 diff.c:4987
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s <n>/<m> biçimi bekliyor"
 
-#: diff.c:4957
+#: diff.c:4999
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s bir karakter bekliyor, '%s' aldı"
 
-#: diff.c:4978
+#: diff.c:5020
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "hatalı --color-moved argümanı: %s"
 
-#: diff.c:4997
+#: diff.c:5039
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "--color-moved-ws içinde geçersiz kip '%s'"
 
-#: diff.c:5037
+#: diff.c:5079
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
@@ -3511,162 +3607,162 @@ msgstr ""
 "diff-algorithm seçeneği şunları kabul eder: \"myers\", \"minimal\", "
 "\"patience\" ve \"histogram\""
 
-#: diff.c:5073 diff.c:5093
+#: diff.c:5115 diff.c:5135
 #, c-format
 msgid "invalid argument to %s"
 msgstr "%s için geçersiz argüman"
 
-#: diff.c:5197
+#: diff.c:5239
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr "-I'ya geçersiz düzenli ifade verildi: '%s'"
 
-#: diff.c:5246
+#: diff.c:5288
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "--submodule seçenek parametresi ayrıştırılamadı: '%s'"
 
-#: diff.c:5302
+#: diff.c:5344
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "hatalı --word-diff argümanı: %s"
 
-#: diff.c:5338
+#: diff.c:5380
 msgid "Diff output format options"
 msgstr "Diff çıktısı biçimlendirme seçenekleri"
 
-#: diff.c:5340 diff.c:5346
+#: diff.c:5382 diff.c:5388
 msgid "generate patch"
 msgstr "yama oluştur"
 
-#: diff.c:5343 builtin/log.c:179
+#: diff.c:5385 builtin/log.c:180
 msgid "suppress diff output"
 msgstr "diff çıktısını gizle"
 
-#: diff.c:5348 diff.c:5462 diff.c:5469
+#: diff.c:5390 diff.c:5504 diff.c:5511
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5349 diff.c:5352
+#: diff.c:5391 diff.c:5394
 msgid "generate diffs with <n> lines context"
 msgstr "diff'leri <n> satır bağlamlı oluştur"
 
-#: diff.c:5354
+#: diff.c:5396
 msgid "generate the diff in raw format"
 msgstr "diff'i ham biçimde oluştur"
 
-#: diff.c:5357
+#: diff.c:5399
 msgid "synonym for '-p --raw'"
 msgstr "'-p --raw eşanlamlısı"
 
-#: diff.c:5361
+#: diff.c:5403
 msgid "synonym for '-p --stat'"
 msgstr "'-p --stat eşanlamlısı"
 
-#: diff.c:5365
+#: diff.c:5407
 msgid "machine friendly --stat"
 msgstr "makinede okunabilen --stat"
 
-#: diff.c:5368
+#: diff.c:5410
 msgid "output only the last line of --stat"
 msgstr "--stat'ın yalnızca son satırını çıktı ver"
 
-#: diff.c:5370 diff.c:5378
+#: diff.c:5412 diff.c:5420
 msgid "<param1,param2>..."
 msgstr "<param1,param2>..."
 
-#: diff.c:5371
+#: diff.c:5413
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr ""
 "her alt dizin için göreceli bir miktar değişikliğin dağıtımını çıktı ver"
 
-#: diff.c:5375
+#: diff.c:5417
 msgid "synonym for --dirstat=cumulative"
 msgstr "--dirstat=cumulative eşanlamlısı"
 
-#: diff.c:5379
+#: diff.c:5421
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "--dirstat=files,param1,param2... eşanlamlısı"
 
-#: diff.c:5383
+#: diff.c:5425
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 "değişiklikler çakışma imleyicileri veya boşluk hataları doğuruyorsa uyar"
 
-#: diff.c:5386
+#: diff.c:5428
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr ""
 "sıkışık özet; örn. oluşumlar, yeniden adlandırmalar ve kip değişiklikleri"
 
-#: diff.c:5389
+#: diff.c:5431
 msgid "show only names of changed files"
 msgstr "yalnızca değiştirilen dosyaların adlarını göster"
 
-#: diff.c:5392
+#: diff.c:5434
 msgid "show only names and status of changed files"
 msgstr "yalnızca değiştirilen dosyaların adlarını ve durumlarını göster"
 
-#: diff.c:5394
+#: diff.c:5436
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<genişlik>[,<ad-genişlik>[,<sayım>]]"
 
-#: diff.c:5395
+#: diff.c:5437
 msgid "generate diffstat"
 msgstr "diffstat oluştur"
 
-#: diff.c:5397 diff.c:5400 diff.c:5403
+#: diff.c:5439 diff.c:5442 diff.c:5445
 msgid "<width>"
 msgstr "<genişlik>"
 
-#: diff.c:5398
+#: diff.c:5440
 msgid "generate diffstat with a given width"
 msgstr "diffstat'ı verilmiş bir genişlik ile oluştur"
 
-#: diff.c:5401
+#: diff.c:5443
 msgid "generate diffstat with a given name width"
 msgstr "diffstat'ı verilmiş bir ad genişliği ile oluştur"
 
-#: diff.c:5404
+#: diff.c:5446
 msgid "generate diffstat with a given graph width"
 msgstr "diffstat'ı verilmiş bir grafik genişliği ile oluştur"
 
-#: diff.c:5406
+#: diff.c:5448
 msgid "<count>"
 msgstr "<sayım>"
 
-#: diff.c:5407
+#: diff.c:5449
 msgid "generate diffstat with limited lines"
 msgstr "diffstat'ı kısıtlı satırlarla oluştur"
 
-#: diff.c:5410
+#: diff.c:5452
 msgid "generate compact summary in diffstat"
 msgstr "diffstat içinde ufak özet oluştur"
 
-#: diff.c:5413
+#: diff.c:5455
 msgid "output a binary diff that can be applied"
 msgstr "uygulanabilir bir ikili diff çıktısı ver"
 
-#: diff.c:5416
+#: diff.c:5458
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr "\"index\" satırlarında tam ön ve songörüntü nesne adlarını göster"
 
-#: diff.c:5418
+#: diff.c:5460
 msgid "show colored diff"
 msgstr "renkli diff göster"
 
-#: diff.c:5419
+#: diff.c:5461
 msgid "<kind>"
 msgstr "<çeşit>"
 
-#: diff.c:5420
+#: diff.c:5462
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
 msgstr ""
 "diff'teki boşluk hatalarını 'context', 'old' veya 'new' satırlarında vurgula"
 
-#: diff.c:5423
+#: diff.c:5465
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -3674,88 +3770,88 @@ msgstr ""
 "--raw veya --numstat içinde yol adlarını tahrip etme ve çıktı alanı "
 "sonlandırıcıları olarak NUL'ları kullan"
 
-#: diff.c:5426 diff.c:5429 diff.c:5432 diff.c:5541
+#: diff.c:5468 diff.c:5471 diff.c:5474 diff.c:5583
 msgid "<prefix>"
 msgstr "<önek>"
 
-#: diff.c:5427
+#: diff.c:5469
 msgid "show the given source prefix instead of \"a/\""
 msgstr "\"a/\" yerine verilmiş kaynak önekini göster"
 
-#: diff.c:5430
+#: diff.c:5472
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "\"b/\"yerine verilmiş kaynak önekini göster"
 
-#: diff.c:5433
+#: diff.c:5475
 msgid "prepend an additional prefix to every line of output"
 msgstr "çıktının her satırının başına ek bir önek ekle"
 
-#: diff.c:5436
+#: diff.c:5478
 msgid "do not show any source or destination prefix"
 msgstr "hiçbir kaynak ve hedef önekini gösterme"
 
-#: diff.c:5439
+#: diff.c:5481
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr "diff parçaları arasındaki bağlamı belirtilen satır sayısı kadar göster"
 
-#: diff.c:5443 diff.c:5448 diff.c:5453
+#: diff.c:5485 diff.c:5490 diff.c:5495
 msgid "<char>"
 msgstr "<karakter>"
 
-#: diff.c:5444
+#: diff.c:5486
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "yeni satırı belirtmek için '+' yerine kullanılacak karakteri belirle"
 
-#: diff.c:5449
+#: diff.c:5491
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "eski satırı belirtmek için '-' yerine kullanılacak karakteri belirle"
 
-#: diff.c:5454
+#: diff.c:5496
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "bağlam belirtmek için ' ' yerine kullanılacak karakteri belirle"
 
-#: diff.c:5457
+#: diff.c:5499
 msgid "Diff rename options"
 msgstr "Diff yeniden adlandırma seçenekleri"
 
-#: diff.c:5458
+#: diff.c:5500
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5459
+#: diff.c:5501
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr "tam yeniden yazım değişikliklerini silme ve oluşturma olarak ayır"
 
-#: diff.c:5463
+#: diff.c:5505
 msgid "detect renames"
 msgstr "yeniden adlandırmaları algıla"
 
-#: diff.c:5467
+#: diff.c:5509
 msgid "omit the preimage for deletes"
 msgstr "silmeler için öngörüntüyü atla"
 
-#: diff.c:5470
+#: diff.c:5512
 msgid "detect copies"
 msgstr "kopyaları algıla"
 
-#: diff.c:5474
+#: diff.c:5516
 msgid "use unmodified files as source to find copies"
 msgstr "değiştirilmemiş dosyaları kopyaları bulmak için kaynak olarak kullan"
 
-#: diff.c:5476
+#: diff.c:5518
 msgid "disable rename detection"
 msgstr "yeniden adlandırma algılamasını devre dışı bırak"
 
-#: diff.c:5479
+#: diff.c:5521
 msgid "use empty blobs as rename source"
 msgstr "boş ikili nesneleri yeniden adlandırma kaynağı olarak kullan"
 
-#: diff.c:5481
+#: diff.c:5523
 msgid "continue listing the history of a file beyond renames"
 msgstr ""
 "bir dosyanın geçmişini listelemeyi yeniden adlandırmaların ötesinde sürdür"
 
-#: diff.c:5484
+#: diff.c:5526
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
@@ -3763,234 +3859,234 @@ msgstr ""
 "eğer yeniden adlandırma/kopyalama hedeflerinin sayısı verilen sınırı aşarsa "
 "yeniden adlandırma/kopyalama algılamasını önle"
 
-#: diff.c:5486
+#: diff.c:5528
 msgid "Diff algorithm options"
 msgstr "Diff algoritma seçenekleri"
 
-#: diff.c:5488
+#: diff.c:5530
 msgid "produce the smallest possible diff"
 msgstr "olabilecek en küçük diff'i üret"
 
-#: diff.c:5491
+#: diff.c:5533
 msgid "ignore whitespace when comparing lines"
 msgstr "satırları karşılaştırırken boşlukları yok say"
 
-#: diff.c:5494
+#: diff.c:5536
 msgid "ignore changes in amount of whitespace"
 msgstr "boşluk sayısındaki değişiklikleri yok say"
 
-#: diff.c:5497
+#: diff.c:5539
 msgid "ignore changes in whitespace at EOL"
 msgstr "satır sonundaki boşluk değişikliklerini yok say"
 
-#: diff.c:5500
+#: diff.c:5542
 msgid "ignore carrier-return at the end of line"
 msgstr "satır sonundaki satırbaşı karakterini yok say"
 
-#: diff.c:5503
+#: diff.c:5545
 msgid "ignore changes whose lines are all blank"
 msgstr "satırlarının tümü boş olan değişiklikleri yok say"
 
-#: diff.c:5505 diff.c:5527 diff.c:5530 diff.c:5575
+#: diff.c:5547 diff.c:5569 diff.c:5572 diff.c:5617
 msgid "<regex>"
 msgstr "<ifade>"
 
-#: diff.c:5506
+#: diff.c:5548
 msgid "ignore changes whose all lines match <regex>"
 msgstr "satırlarının tümü <ifade> ile eşleşen değişiklikleri yok say"
 
-#: diff.c:5509
+#: diff.c:5551
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr "diff parça sınırlarını kolay okuma için bulgusal olarak kaydır"
 
-#: diff.c:5512
+#: diff.c:5554
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "diff'i \"patience diff\" algoritmasını kullanarak oluştur"
 
-#: diff.c:5516
+#: diff.c:5558
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "diff'i \"histogram diff\" algoritmasını kullanarak oluştur"
 
-#: diff.c:5518
+#: diff.c:5560
 msgid "<algorithm>"
 msgstr "<algoritma>"
 
-#: diff.c:5519
+#: diff.c:5561
 msgid "choose a diff algorithm"
 msgstr "bir diff algoritması seç"
 
-#: diff.c:5521
+#: diff.c:5563
 msgid "<text>"
 msgstr "<metin>"
 
-#: diff.c:5522
+#: diff.c:5564
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "diff'i \"anchored diff\" algoritmasını kullanarak oluştur"
 
-#: diff.c:5524 diff.c:5533 diff.c:5536
+#: diff.c:5566 diff.c:5575 diff.c:5578
 msgid "<mode>"
 msgstr "<kip>"
 
-#: diff.c:5525
+#: diff.c:5567
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr ""
 "sözcük diff'ini değiştirilen sözcükleri sınırlandırmak için <kip> kullanarak "
 "göster"
 
-#: diff.c:5528
+#: diff.c:5570
 msgid "use <regex> to decide what a word is"
 msgstr "bir sözcüğün ne olduğuna karar vermek için <ifade> kullan"
 
-#: diff.c:5531
+#: diff.c:5573
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "şuna eşdeğer: --word-diff=color --word-diff-regex=<ifade>"
 
-#: diff.c:5534
+#: diff.c:5576
 msgid "moved lines of code are colored differently"
 msgstr "taşınan kod satırları farklı renklendirilir"
 
-#: diff.c:5537
+#: diff.c:5579
 msgid "how white spaces are ignored in --color-moved"
 msgstr "boşluklar --color-moved içinde nasıl yok sayılır"
 
-#: diff.c:5540
+#: diff.c:5582
 msgid "Other diff options"
 msgstr "Diğer diff seçenekleri"
 
-#: diff.c:5542
+#: diff.c:5584
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "altdizinden çalıştırıldığında dışarıdaki değişiklikleri hariç tut ve "
 "göreceli yolları göster"
 
-#: diff.c:5546
+#: diff.c:5588
 msgid "treat all files as text"
 msgstr "tüm dosyaları metin olarak varsay"
 
-#: diff.c:5548
+#: diff.c:5590
 msgid "swap two inputs, reverse the diff"
 msgstr "iki girdiyi değiştir, diff'i tersine döndür"
 
-#: diff.c:5550
+#: diff.c:5592
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "ayrımlar varsa 1 ile, yoksa 0 ile çık"
 
-#: diff.c:5552
+#: diff.c:5594
 msgid "disable all output of the program"
 msgstr "tüm program çıktısını devre dışı bırak"
 
-#: diff.c:5554
+#: diff.c:5596
 msgid "allow an external diff helper to be executed"
 msgstr "bir dış diff yardımcısının çalıştırılmasına izin ver"
 
-#: diff.c:5556
+#: diff.c:5598
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 "ikili dosyaları karşılaştırırken dış metin dönüştürme süzgeçlerini çalıştır"
 
-#: diff.c:5558
+#: diff.c:5600
 msgid "<when>"
 msgstr "<ne-zaman>"
 
-#: diff.c:5559
+#: diff.c:5601
 msgid "ignore changes to submodules in the diff generation"
 msgstr "diff oluştururken altmodüllere olan değişiklikleri yok say"
 
-#: diff.c:5562
+#: diff.c:5604
 msgid "<format>"
 msgstr "<biçim>"
 
-#: diff.c:5563
+#: diff.c:5605
 msgid "specify how differences in submodules are shown"
 msgstr "altmodüllerdeki değişikliklerin nasıl gösterileceğini belirt"
 
-#: diff.c:5567
+#: diff.c:5609
 msgid "hide 'git add -N' entries from the index"
 msgstr "indeksten 'git add -N' girdilerini gizle"
 
-#: diff.c:5570
+#: diff.c:5612
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "indekste 'git add -N' girdilerine gerçekmiş gibi davran"
 
-#: diff.c:5572
+#: diff.c:5614
 msgid "<string>"
 msgstr "<dizi>"
 
-#: diff.c:5573
+#: diff.c:5615
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
 msgstr "belirtilen dizinin görülme sayısını değiştiren ayrımlara bak"
 
-#: diff.c:5576
+#: diff.c:5618
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
 msgstr "belirtilen düzenli ifadenin görülme sayısını değiştiren ayrımlara bak"
 
-#: diff.c:5579
+#: diff.c:5621
 msgid "show all changes in the changeset with -S or -G"
 msgstr "değişiklik setinde -S veya -G içeren tüm değişiklikleri göster"
 
-#: diff.c:5582
+#: diff.c:5624
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "-S içindeki <dizi>'yi genişletilmiş POSIX düzenli ifadesi olarak işle"
 
-#: diff.c:5585
+#: diff.c:5627
 msgid "control the order in which files appear in the output"
 msgstr "dosyaların çıktıda hangi sırayla görüneceğini denetle"
 
-#: diff.c:5586 diff.c:5589
+#: diff.c:5628 diff.c:5631
 msgid "<path>"
 msgstr "<yol>"
 
-#: diff.c:5587
+#: diff.c:5629
 msgid "show the change in the specified path first"
 msgstr "öncelikle belirtilen yoldaki değişikliği göster"
 
-#: diff.c:5590
+#: diff.c:5632
 msgid "skip the output to the specified path"
 msgstr "belirtilen yola olan çıktıyı atla"
 
-#: diff.c:5592
+#: diff.c:5634
 msgid "<object-id>"
 msgstr "<nesne-no>"
 
-#: diff.c:5593
+#: diff.c:5635
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
 msgstr "belirtilen nesnenin görülme sayısını değiştiren ayrımlara bak"
 
-#: diff.c:5595
+#: diff.c:5637
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5596
+#: diff.c:5638
 msgid "select files by diff type"
 msgstr "dosyaları diff türüne göre seç"
 
-#: diff.c:5598
+#: diff.c:5640
 msgid "<file>"
 msgstr "<dosya>"
 
-#: diff.c:5599
-msgid "Output to a specific file"
-msgstr "belirli bir dosyaya çıktı ver"
+#: diff.c:5641
+msgid "output to a specific file"
+msgstr "belirli bir dosyaya çıktıla"
 
-#: diff.c:6257
+#: diff.c:6321
 msgid "exhaustive rename detection was skipped due to too many files."
 msgstr ""
 "Geniş kapsamlı yeniden adlandırma algılaması çok fazla dosya olmasından "
 "dolayı atlandı."
 
-#: diff.c:6260
+#: diff.c:6324
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
 "Çok fazla dosya olmasından dolayı yalnızca değiştirilen yollardan kopyalar "
 "bulundu."
 
-#: diff.c:6263
+#: diff.c:6327
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -4041,20 +4137,20 @@ msgstr "koni dizgi eşleşmesi devre dışı bırakılıyor"
 msgid "cannot use %s as an exclude file"
 msgstr "%s bir 'exclude' dosyası olarak kullanılamıyor"
 
-#: dir.c:2418
+#: dir.c:2419
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "'%s' dizini açılamadı"
 
-#: dir.c:2720
+#: dir.c:2721
 msgid "failed to get kernel name and information"
 msgstr "çekirdek adı ve bilgisi alınamadı"
 
-#: dir.c:2844
+#: dir.c:2846
 msgid "untracked cache is disabled on this system or location"
 msgstr "izlenmeyen önbellek bu sistemde veya konumda devre dışı bırakılmış"
 
-#: dir.c:3112
+#: dir.c:3119
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -4062,17 +4158,17 @@ msgstr ""
 "Bir dizin adı tahmin edilemedi.\n"
 "Lütfen komut satırında bir dizin belirtin."
 
-#: dir.c:3800
+#: dir.c:3807
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "%s deposundaki indeks dosyası hasarlı"
 
-#: dir.c:3847 dir.c:3852
+#: dir.c:3854 dir.c:3859
 #, c-format
 msgid "could not create directories for %s"
 msgstr "%s için dizinler oluşturulamadı"
 
-#: dir.c:3881
+#: dir.c:3888
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "git dizini '%s' konumundan '%s' konumuna göç ettirilemedi"
@@ -4091,7 +4187,7 @@ msgstr "İçerik süzülüyor"
 msgid "could not stat file '%s'"
 msgstr "'%s' dosyasının bilgileri alınamadı"
 
-#: environment.c:145
+#: environment.c:147
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "hatalı git ad alanı yolu \"%s\""
@@ -4122,247 +4218,274 @@ msgstr "git fetch-pack: ACK/NAK bekleniyordu, '%s' alındı"
 msgid "unable to write to remote"
 msgstr "uzak konuma yazılamıyor"
 
-#: fetch-pack.c:395 fetch-pack.c:1439
+#: fetch-pack.c:397 fetch-pack.c:1460
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "geçersiz sığ satır: %s"
 
-#: fetch-pack.c:401 fetch-pack.c:1445
+#: fetch-pack.c:403 fetch-pack.c:1466
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "geçersiz sığ olmayan satır: %s"
 
-#: fetch-pack.c:403 fetch-pack.c:1447
+#: fetch-pack.c:405 fetch-pack.c:1468
 #, c-format
 msgid "object not found: %s"
 msgstr "nesne bulunamadı: %s"
 
-#: fetch-pack.c:406 fetch-pack.c:1450
+#: fetch-pack.c:408 fetch-pack.c:1471
 #, c-format
 msgid "error in object: %s"
 msgstr "nesne içinde hata: %s"
 
-#: fetch-pack.c:408 fetch-pack.c:1452
+#: fetch-pack.c:410 fetch-pack.c:1473
 #, c-format
 msgid "no shallow found: %s"
 msgstr "sığ bulunamadı: %s"
 
-#: fetch-pack.c:411 fetch-pack.c:1456
+#: fetch-pack.c:413 fetch-pack.c:1477
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "sığ/sığ olmayan bekleniyordu, %s alındı"
 
-#: fetch-pack.c:451
+#: fetch-pack.c:453
 #, c-format
 msgid "got %s %d %s"
 msgstr "%s %d %s alındı"
 
-#: fetch-pack.c:468
+#: fetch-pack.c:470
 #, c-format
 msgid "invalid commit %s"
 msgstr "geçersiz işleme %s"
 
-#: fetch-pack.c:499
+#: fetch-pack.c:501
 msgid "giving up"
 msgstr "vazgeçiliyor"
 
-#: fetch-pack.c:512 progress.c:339
+#: fetch-pack.c:514 progress.h:25
 msgid "done"
 msgstr "bitti"
 
-#: fetch-pack.c:524
+#: fetch-pack.c:526
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "%s (%d) %s alındı"
 
-#: fetch-pack.c:560
+#: fetch-pack.c:562
 #, c-format
 msgid "Marking %s as complete"
 msgstr "%s tamam olarak imleniyor"
 
-#: fetch-pack.c:775
+#: fetch-pack.c:784
 #, c-format
 msgid "already have %s (%s)"
 msgstr "%s halihazırda var (%s)"
 
-#: fetch-pack.c:861
+#: fetch-pack.c:870
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack: yanbant çoğullama çözücüsü ayrı çatallanamıyor"
 
-#: fetch-pack.c:869
+#: fetch-pack.c:878
 msgid "protocol error: bad pack header"
 msgstr "protokol hatası: hatalı paket üstbilgisi"
 
-#: fetch-pack.c:965
+#: fetch-pack.c:974
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack: %s ayrı çatallanamıyor"
 
-#: fetch-pack.c:971
+#: fetch-pack.c:980
 msgid "fetch-pack: invalid index-pack output"
 msgstr "fetch-pack: geçersiz index-pack çıktısı"
 
-#: fetch-pack.c:988
+#: fetch-pack.c:997
 #, c-format
 msgid "%s failed"
 msgstr "%s başarısız oldu"
 
-#: fetch-pack.c:990
+#: fetch-pack.c:999
 msgid "error in sideband demultiplexer"
 msgstr "yanbant çoğullama çözücüsünde hata"
 
-#: fetch-pack.c:1035
+#: fetch-pack.c:1048
 #, c-format
 msgid "Server version is %.*s"
 msgstr "Sunucu sürümü %.*s"
 
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1052 fetch-pack.c:1058
-#: fetch-pack.c:1062 fetch-pack.c:1066 fetch-pack.c:1070 fetch-pack.c:1074
-#: fetch-pack.c:1078 fetch-pack.c:1082 fetch-pack.c:1086 fetch-pack.c:1090
-#: fetch-pack.c:1096 fetch-pack.c:1102 fetch-pack.c:1107 fetch-pack.c:1112
+#: fetch-pack.c:1056 fetch-pack.c:1062 fetch-pack.c:1065 fetch-pack.c:1071
+#: fetch-pack.c:1075 fetch-pack.c:1079 fetch-pack.c:1083 fetch-pack.c:1087
+#: fetch-pack.c:1091 fetch-pack.c:1095 fetch-pack.c:1099 fetch-pack.c:1103
+#: fetch-pack.c:1109 fetch-pack.c:1115 fetch-pack.c:1120 fetch-pack.c:1125
 #, c-format
 msgid "Server supports %s"
 msgstr "Sunucu %s destekliyor"
 
-#: fetch-pack.c:1045
+#: fetch-pack.c:1058
 msgid "Server does not support shallow clients"
 msgstr "Sunucu sığ istemcileri desteklemiyor"
 
-#: fetch-pack.c:1105
+#: fetch-pack.c:1118
 msgid "Server does not support --shallow-since"
 msgstr "Sunucu --shallow-since desteklemiyor"
 
-#: fetch-pack.c:1110
+#: fetch-pack.c:1123
 msgid "Server does not support --shallow-exclude"
 msgstr "Sunucu --shallow-exclude desteklemiyor"
 
-#: fetch-pack.c:1114
+#: fetch-pack.c:1127
 msgid "Server does not support --deepen"
 msgstr "Sunucu --deepen desteklemiyor"
 
-#: fetch-pack.c:1116
+#: fetch-pack.c:1129
 msgid "Server does not support this repository's object format"
 msgstr "Sunucu bu deponun nesne türünü desteklemiyor"
 
-#: fetch-pack.c:1129
+#: fetch-pack.c:1142
 msgid "no common commits"
 msgstr "ortak işleme yok"
 
-#: fetch-pack.c:1138 fetch-pack.c:1485 builtin/clone.c:1130
+#: fetch-pack.c:1151 fetch-pack.c:1506 builtin/clone.c:1166
 msgid "source repository is shallow, reject to clone."
 msgstr "kaynak depo sığ, klonlama için reddet."
 
-#: fetch-pack.c:1144 fetch-pack.c:1681
+#: fetch-pack.c:1157 fetch-pack.c:1705
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: Getirme başarısız."
 
-#: fetch-pack.c:1258
+#: fetch-pack.c:1271
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "eşleşmeyen algoritmalar: İstemci %s; sunucu %s"
 
-#: fetch-pack.c:1262
+#: fetch-pack.c:1275
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "sunucu '%s' algoritmasını desteklemiyor"
 
-#: fetch-pack.c:1295
+#: fetch-pack.c:1308
 msgid "Server does not support shallow requests"
 msgstr "Sunucu sığ istekleri desteklemiyor"
 
-#: fetch-pack.c:1302
+#: fetch-pack.c:1315
 msgid "Server supports filter"
 msgstr "Sunucu süzgeç destekliyor"
 
-#: fetch-pack.c:1345 fetch-pack.c:2063
+#: fetch-pack.c:1358 fetch-pack.c:2087
 msgid "unable to write request to remote"
 msgstr "uzak konuma istek yazılamıyor"
 
-#: fetch-pack.c:1363
+#: fetch-pack.c:1376
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "bölüm üstbilgisi '%s' okunurken hata"
 
-#: fetch-pack.c:1369
+#: fetch-pack.c:1382
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "'%s' bekleniyordu, '%s' alındı"
 
-#: fetch-pack.c:1403
+#: fetch-pack.c:1416
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "beklenmedik alındı satırı: '%s'"
 
-#: fetch-pack.c:1408
+#: fetch-pack.c:1421
 #, c-format
 msgid "error processing acks: %d"
 msgstr "alındılar işlenirken hata: %d"
 
-#: fetch-pack.c:1418
-msgid "expected packfile to be sent after 'ready'"
-msgstr "paket dosyasının 'ready'den sonra gönderilmesi gerekiyordu"
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#.
+#: fetch-pack.c:1435
+#, c-format
+msgid "expected packfile to be sent after '%s'"
+msgstr "paket dosyasının '%s' ögesinden sonra gönderilmesi bekleniyordu"
 
-#: fetch-pack.c:1420
-msgid "expected no other sections to be sent after no 'ready'"
-msgstr "'ready' \"yok\" iken başka hiçbir bölümün gönderilmemesi gerekiyordu"
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#.
+#: fetch-pack.c:1441
+#, c-format
+msgid "expected no other sections to be sent after no '%s'"
+msgstr "'%s' \"yok\" iken başka hiçbir bölümün gönderilmemesi bekleniyordu"
 
-#: fetch-pack.c:1461
+#: fetch-pack.c:1482
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "sığ bilgi işlenirken hata: %d"
 
-#: fetch-pack.c:1510
+#: fetch-pack.c:1531
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "wanted-ref bekleniyordu, '%s' alındı"
 
-#: fetch-pack.c:1515
+#: fetch-pack.c:1536
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "beklenmedik wanted-ref: '%s'"
 
-#: fetch-pack.c:1520
+#: fetch-pack.c:1541
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "aranan başvurular işlenirken hata: %d"
 
-#: fetch-pack.c:1550
+#: fetch-pack.c:1571
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack: yanıt sonu paketi bekleniyordu"
 
-#: fetch-pack.c:1959
+#: fetch-pack.c:1983
 msgid "no matching remote head"
 msgstr "eşleşen uzak dal ucu yok"
 
-#: fetch-pack.c:1982 builtin/clone.c:581
+#: fetch-pack.c:2006 builtin/clone.c:587
 msgid "remote did not send all necessary objects"
 msgstr "uzak konum gereken tüm nesneleri göndermedi"
 
-#: fetch-pack.c:2085
+#: fetch-pack.c:2109
 msgid "unexpected 'ready' from remote"
 msgstr "uzak konumdan beklenmedik 'ready'"
 
-#: fetch-pack.c:2108
+#: fetch-pack.c:2132
 #, c-format
 msgid "no such remote ref %s"
 msgstr "böyle bir uzak başvuru yok: %s"
 
-#: fetch-pack.c:2111
+#: fetch-pack.c:2135
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "Sunucu %s tanıtılmamış nesnesi için isteğe izin vermiyor"
 
-#: gpg-interface.c:329 gpg-interface.c:457 gpg-interface.c:974
-#: gpg-interface.c:990
+#: fsmonitor-ipc.c:119
+#, c-format
+msgid "fsmonitor_ipc__send_query: invalid path '%s'"
+msgstr "fsmonitor_ipc__send_query: geçersiz yol '%s'"
+
+#: fsmonitor-ipc.c:125
+#, c-format
+msgid "fsmonitor_ipc__send_query: unspecified error on '%s'"
+msgstr "fsmonitor_ipc__send_query: '%s' üzerinde belirtilmemiş hata"
+
+#: fsmonitor-ipc.c:155
+msgid "fsmonitor--daemon is not running"
+msgstr "fsmonitor--daemon çalışmıyor"
+
+#: fsmonitor-ipc.c:164
+#, c-format
+msgid "could not send '%s' command to fsmonitor--daemon"
+msgstr "fsmonitor--daemon'a '%s' komutu gönderilemedi"
+
+#: gpg-interface.c:329 gpg-interface.c:456 gpg-interface.c:995
+#: gpg-interface.c:1011
 msgid "could not create temporary file"
 msgstr "geçici dosya oluşturulamadı"
 
-#: gpg-interface.c:332 gpg-interface.c:460
+#: gpg-interface.c:332 gpg-interface.c:459
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr "şuna ayrık imza yazılamadı: '%s'"
 
-#: gpg-interface.c:451
+#: gpg-interface.c:450
 msgid ""
 "gpg.ssh.allowedSignersFile needs to be configured and exist for ssh "
 "signature verification"
@@ -4370,7 +4493,7 @@ msgstr ""
 "gpg.ssh.allowedSignersFile'ın ssh imza doğrulaması için yapılandırılması ve "
 "var olması gerekiyor"
 
-#: gpg-interface.c:480
+#: gpg-interface.c:479
 msgid ""
 "ssh-keygen -Y find-principals/verify is needed for ssh signature "
 "verification (available in openssh version 8.2p1+)"
@@ -4378,59 +4501,59 @@ msgstr ""
 "ssh-keygen -Y find-principals/verify, ssh imza doğrulaması için gerekli "
 "(openssh 8.21p1+ sürümünde mevcut)"
 
-#: gpg-interface.c:536
+#: gpg-interface.c:550
 #, c-format
 msgid "ssh signing revocation file configured but not found: %s"
 msgstr "ssh imza geri alım dosyası yapılandırıldı; ancak bulunamadı: %s"
 
-#: gpg-interface.c:624
+#: gpg-interface.c:638
 #, c-format
 msgid "bad/incompatible signature '%s'"
 msgstr "hatalı/uyumsuz imza '%s'"
 
-#: gpg-interface.c:801 gpg-interface.c:806
+#: gpg-interface.c:815 gpg-interface.c:820
 #, c-format
 msgid "failed to get the ssh fingerprint for key '%s'"
 msgstr "'%s' anahtarı için ssh parmak izi alınamadı"
 
-#: gpg-interface.c:829
+#: gpg-interface.c:843
 msgid ""
 "either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured"
 msgstr ""
 "ya user.signingkey ya da gpg.ssh.defaultKeyCommand'in yapılandırılması "
 "gerekiyor"
 
-#: gpg-interface.c:851
+#: gpg-interface.c:865
 #, c-format
 msgid "gpg.ssh.defaultKeyCommand succeeded but returned no keys: %s %s"
 msgstr ""
 "gpg.ssh.defaultKeyCommand başarılı oldu; ancak herhangi bir anahtar "
 "döndürmedi: %s %s"
 
-#: gpg-interface.c:857
+#: gpg-interface.c:871
 #, c-format
 msgid "gpg.ssh.defaultKeyCommand failed: %s %s"
 msgstr "gpg.ssh.defaultKeyCommand başarısız oldu: %s %s"
 
-#: gpg-interface.c:945
+#: gpg-interface.c:966
 msgid "gpg failed to sign the data"
 msgstr "gpg veriyi imzalayamadı"
 
-#: gpg-interface.c:967
+#: gpg-interface.c:988
 msgid "user.signingkey needs to be set for ssh signing"
 msgstr "user.signingkey'in ssh imzalaması için ayarlanması gerekiyor"
 
-#: gpg-interface.c:978
+#: gpg-interface.c:999
 #, c-format
 msgid "failed writing ssh signing key to '%s'"
 msgstr "ssh imzalama anahtarı '%s' konumuna yazılamadı"
 
-#: gpg-interface.c:996
+#: gpg-interface.c:1017
 #, c-format
 msgid "failed writing ssh signing key buffer to '%s'"
 msgstr "ssh imzalama anahtarı arabelleği '%s' konumuna yazılamadı"
 
-#: gpg-interface.c:1014
+#: gpg-interface.c:1035
 msgid ""
 "ssh-keygen -Y sign is needed for ssh signing (available in openssh version "
 "8.2p1+)"
@@ -4438,7 +4561,7 @@ msgstr ""
 "ssh-keygen -Y imzası, ssh imzalaması için gerekli (openssh 8.21p1+ sürümünde "
 "mevcut)"
 
-#: gpg-interface.c:1026
+#: gpg-interface.c:1047
 #, c-format
 msgid "failed reading ssh signing data buffer from '%s'"
 msgstr "ssh imzalama verisi arabelleği '%s' konumundan okunamadı"
@@ -4448,7 +4571,7 @@ msgstr "ssh imzalama verisi arabelleği '%s' konumundan okunamadı"
 msgid "ignored invalid color '%.*s' in log.graphColors"
 msgstr "log.graphColors içindeki '%.*s' geçersiz renk yok sayıldı"
 
-#: grep.c:531
+#: grep.c:446
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
@@ -4456,110 +4579,110 @@ msgstr ""
 "verilen dizgi NULL baytı içeriyor (-f <dosya> aracılığıyla). Bu yalnızca "
 "PCRE v2 altında -P ile desteklenir"
 
-#: grep.c:1942
+#: grep.c:1859
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "'%s': %s okunamıyor"
 
-#: grep.c:1959 setup.c:177 builtin/clone.c:302 builtin/diff.c:90
+#: grep.c:1876 setup.c:178 builtin/clone.c:308 builtin/diff.c:90
 #: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "'%s' dosyasının bilgileri alınamadı"
 
-#: grep.c:1970
+#: grep.c:1887
 #, c-format
 msgid "'%s': short read"
 msgstr "'%s': kısa okuma"
 
-#: help.c:24
+#: help.c:25
 msgid "start a working area (see also: git help tutorial)"
 msgstr "bir çalışma alanı başlatın (ayrıca bkz: git help tutorial)"
 
-#: help.c:25
+#: help.c:26
 msgid "work on the current change (see also: git help everyday)"
 msgstr "güncel değişiklikler üzerinde çalışın (ayrıca bkz: git help everyday)"
 
-#: help.c:26
+#: help.c:27
 msgid "examine the history and state (see also: git help revisions)"
 msgstr ""
 "geçmişi ve geçerli durumu gözden geçirin (ayrıca bkz: git help revisions)"
 
-#: help.c:27
+#: help.c:28
 msgid "grow, mark and tweak your common history"
 msgstr "ortak geçmişinizi büyütün, imleyin ve geliştirin"
 
-#: help.c:28
+#: help.c:29
 msgid "collaborate (see also: git help workflows)"
 msgstr "birlikte çalışın (ayrıca bkz: git help workflows)"
 
-#: help.c:32
+#: help.c:33
 msgid "Main Porcelain Commands"
 msgstr "Ana Komutlar"
 
-#: help.c:33
+#: help.c:34
 msgid "Ancillary Commands / Manipulators"
 msgstr "Yan Komutlar / Yönlendiriciler"
 
-#: help.c:34
+#: help.c:35
 msgid "Ancillary Commands / Interrogators"
 msgstr "Yan Komutlar / Sorgucular"
 
-#: help.c:35
+#: help.c:36
 msgid "Interacting with Others"
 msgstr "Başkaları ile Etkileşim"
 
-#: help.c:36
+#: help.c:37
 msgid "Low-level Commands / Manipulators"
 msgstr "Düşük Düzeyli Komutlar / Yönlendiriciler"
 
-#: help.c:37
+#: help.c:38
 msgid "Low-level Commands / Interrogators"
 msgstr "Düşük Düzeyli Komutlar / Sorgucular"
 
-#: help.c:38
+#: help.c:39
 msgid "Low-level Commands / Syncing Repositories"
 msgstr "Düşük Düzeyli Komutlar / Depo Eşitleme"
 
-#: help.c:39
+#: help.c:40
 msgid "Low-level Commands / Internal Helpers"
 msgstr "Düşük Düzeyli Komutlar / İç Yardımcılar"
 
-#: help.c:313
+#: help.c:316
 #, c-format
 msgid "available git commands in '%s'"
 msgstr "'%s' içindeki kullanılabilir git komutları"
 
-#: help.c:320
+#: help.c:323
 msgid "git commands available from elsewhere on your $PATH"
 msgstr "$PATH içindeki başka yerlerden kullanılabilen git komutları"
 
-#: help.c:329
+#: help.c:332
 msgid "These are common Git commands used in various situations:"
 msgstr "En çok kullanılan temel Git komutlarının bir listesi aşağıdadır:"
 
-#: help.c:378 git.c:100
+#: help.c:382 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "desteklenmeyen komut listeleme türü '%s'"
 
-#: help.c:418
+#: help.c:422
 msgid "The Git concept guides are:"
 msgstr "Git konsept kılavuzları şunlardır:"
 
-#: help.c:442
-msgid "See 'git help <command>' to read about a specific subcommand"
-msgstr "Belirli bir altkomut üzerine okumak için 'git help <komut>' kullanın"
-
-#: help.c:447
+#: help.c:446
 msgid "External commands"
 msgstr "Dış komutlar"
 
-#: help.c:462
+#: help.c:468
 msgid "Command aliases"
 msgstr "Komut armaları"
 
-#: help.c:543
+#: help.c:486
+msgid "See 'git help <command>' to read about a specific subcommand"
+msgstr "Belirli bir altkomut üzerine okumak için 'git help <komut>' kullanın"
+
+#: help.c:563
 #, c-format
 msgid ""
 "'%s' appears to be a git command, but we were not\n"
@@ -4568,37 +4691,37 @@ msgstr ""
 "'%s' bir git komutu gibi görünüyor; ancak biz onu\n"
 "çalıştıramadık. git-%s bozuk olabilir mi?"
 
-#: help.c:565 help.c:662
+#: help.c:585 help.c:682
 #, c-format
 msgid "git: '%s' is not a git command. See 'git --help'."
 msgstr "git: '%s' bir git komutu değil. Yardım için: 'git --help'."
 
-#: help.c:613
+#: help.c:633
 msgid "Uh oh. Your system reports no Git commands at all."
 msgstr "Tüh. Sisteminiz hiçbir Git komutu bildirmiyor."
 
-#: help.c:635
+#: help.c:655
 #, c-format
 msgid "WARNING: You called a Git command named '%s', which does not exist."
 msgstr ""
 "UYARI: '%s' adında bir Git komutunu çağırdınız; ancak böyle bir komut yok."
 
-#: help.c:640
+#: help.c:660
 #, c-format
 msgid "Continuing under the assumption that you meant '%s'."
 msgstr "'%s' demek istediğiniz varsayılarak sürdürülüyor."
 
-#: help.c:646
+#: help.c:666
 #, c-format
 msgid "Run '%s' instead [y/N]? "
 msgstr "Bunun yerine '%s' çalıştırılsın mı? (y/N)? "
 
-#: help.c:654
+#: help.c:674
 #, c-format
 msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
 msgstr "%0.1f saniye içinde sürdürülüyor, '%s' demek istediğiniz varsayılacak."
 
-#: help.c:666
+#: help.c:686
 msgid ""
 "\n"
 "The most similar command is"
@@ -4612,16 +4735,16 @@ msgstr[1] ""
 "\n"
 "Buna en yakın komutlar:"
 
-#: help.c:706
+#: help.c:729
 msgid "git version [<options>]"
 msgstr "git version [<seçenekler>]"
 
-#: help.c:761
+#: help.c:784
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s: %s - %s"
 
-#: help.c:765
+#: help.c:788
 msgid ""
 "\n"
 "Did you mean this?"
@@ -4635,7 +4758,7 @@ msgstr[1] ""
 "\n"
 "Şunlardan birini mi demek istediniz?"
 
-#: hook.c:27
+#: hook.c:28
 #, c-format
 msgid ""
 "The '%s' hook was ignored because it's not set as executable.\n"
@@ -4644,15 +4767,20 @@ msgstr ""
 "'%s' kancası yok sayıldı; çünkü bir çalıştırılabilir olarak ayarlanmamış.\n"
 "Bu uyarıyı 'git config advice.ignoredHook false' ile kapatabilirsiniz."
 
-#: ident.c:353
+#: hook.c:87
+#, c-format
+msgid "Couldn't start hook '%s'\n"
+msgstr "'%s' kancası başlatılamadı\n"
+
+#: ident.c:354
 msgid "Author identity unknown\n"
 msgstr "Yazar kimliği bilinmiyor\n"
 
-#: ident.c:356
+#: ident.c:357
 msgid "Committer identity unknown\n"
 msgstr "İşleyici kimliği bilinmiyor\n"
 
-#: ident.c:362
+#: ident.c:363
 msgid ""
 "\n"
 "*** Please tell me who you are.\n"
@@ -4679,71 +4807,71 @@ msgstr ""
 "değişkenini kullanmayın.\n"
 "\n"
 
-#: ident.c:397
+#: ident.c:398
 msgid "no email was given and auto-detection is disabled"
 msgstr "bir e-posta verilmedi ve kendiliğinden algılama devre dışı"
 
-#: ident.c:402
+#: ident.c:403
 #, c-format
 msgid "unable to auto-detect email address (got '%s')"
 msgstr "e-posta adresi kendiliğinden algılanamıyor ('%s' alındı)"
 
-#: ident.c:419
+#: ident.c:420
 msgid "no name was given and auto-detection is disabled"
 msgstr "bir ad verilmedi ve kendiliğinden algılama devre dışı"
 
-#: ident.c:425
+#: ident.c:426
 #, c-format
 msgid "unable to auto-detect name (got '%s')"
 msgstr "ad kendiliğinden algılanamıyor ('%s' alındı)"
 
-#: ident.c:433
+#: ident.c:434
 #, c-format
 msgid "empty ident name (for <%s>) not allowed"
 msgstr "boş tanımlayıcı adına (<%s> için) izin verilmiyor"
 
-#: ident.c:439
+#: ident.c:440
 #, c-format
 msgid "name consists only of disallowed characters: %s"
 msgstr "ad yalnızca izin verilmeyen karakterlerden oluşuyor: %s"
 
-#: ident.c:454 builtin/commit.c:648
+#: ident.c:455 builtin/commit.c:649
 #, c-format
 msgid "invalid date format: %s"
 msgstr "geçersiz tarih biçimi: %s"
 
-#: list-objects-filter-options.c:83
+#: list-objects-filter-options.c:68
 msgid "expected 'tree:<depth>'"
 msgstr "'tree:<derinlik>' bekleniyordu"
 
-#: list-objects-filter-options.c:98
+#: list-objects-filter-options.c:83
 msgid "sparse:path filters support has been dropped"
 msgstr "sparse:path süzgeçleri desteği artık yok"
 
-#: list-objects-filter-options.c:105
+#: list-objects-filter-options.c:90
 #, c-format
 msgid "'%s' for 'object:type=<type>' is not a valid object type"
 msgstr "'object:type=<tür>' için '%s' geçerli bir nesne türü değil"
 
-#: list-objects-filter-options.c:124
+#: list-objects-filter-options.c:109
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "geçersiz filter-spec '%s'"
 
-#: list-objects-filter-options.c:140
+#: list-objects-filter-options.c:125
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
 msgstr "sub-filter-spec içinde kaçış karakteri olmalı: '%c'"
 
-#: list-objects-filter-options.c:182
+#: list-objects-filter-options.c:167
 msgid "expected something after combine:"
 msgstr "birlikte kullanımdan sonra bir şeyler bekleniyordu:"
 
-#: list-objects-filter-options.c:264
+#: list-objects-filter-options.c:249
 msgid "multiple filter-specs cannot be combined"
 msgstr "çoklu filter-specs birlikte kullanılamaz"
 
-#: list-objects-filter-options.c:376
+#: list-objects-filter-options.c:365
 msgid "unable to upgrade repository format to support partial clone"
 msgstr "depo biçimi kısımsal klonları desteklemesi için yükseltilemiyor"
 
@@ -4757,19 +4885,19 @@ msgstr "'%s' içindeki aralıklı ikili nesneye erişilemiyor"
 msgid "unable to parse sparse filter data in %s"
 msgstr "%s içindeki aralıklı süzgeç verisi ayrıştırılamıyor"
 
-#: list-objects.c:127
+#: list-objects.c:144
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
 msgstr "'%s' girdisi (%s ağacında) ağaç kipine iye; ancak bir ağaç değil"
 
-#: list-objects.c:140
+#: list-objects.c:157
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr ""
-"'%s' girdisi (%s ağacında) ikili nesne kipine iye; ancak bir ikili geniş "
-"nesne değil"
+"'%s' girdisi (%s ağacında) ikili nesne kipine iye; ancak bir ikili nesne "
+"değil"
 
-#: list-objects.c:398
+#: list-objects.c:415
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "%s işlemesi için kök ağacı yüklenemiyor"
@@ -4798,17 +4926,12 @@ msgstr ""
 msgid "Unable to create '%s.lock': %s"
 msgstr "'%s.lock' oluşturulamıyor: %s"
 
-#: ls-refs.c:37
-#, c-format
-msgid "invalid value '%s' for lsrefs.unborn"
-msgstr "lsrefs.unborn için '%s' geçersiz değeri"
-
-#: ls-refs.c:174
+#: ls-refs.c:175
 #, c-format
 msgid "unexpected line: '%s'"
 msgstr "beklenmedik satır: '%s'"
 
-#: ls-refs.c:178
+#: ls-refs.c:179
 msgid "expected flush after ls-refs arguments"
 msgstr "ls-refs argümanlarından sonra floş bekleniyordu"
 
@@ -4816,37 +4939,37 @@ msgstr "ls-refs argümanlarından sonra floş bekleniyordu"
 msgid "quoted CRLF detected"
 msgstr "alıntılanmış CRLF algılandı"
 
-#: mailinfo.c:1254 builtin/am.c:184 builtin/mailinfo.c:46
+#: mailinfo.c:1254 builtin/am.c:185 builtin/mailinfo.c:46
 #, c-format
 msgid "bad action '%s' for '%s'"
 msgstr "hatalı eylem '%s', '%s' için"
 
-#: merge-ort.c:1584 merge-recursive.c:1211
+#: merge-ort.c:1630 merge-recursive.c:1214
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "%s altmodülü birleştirilemedi (çıkış yapılmadı)"
 
-#: merge-ort.c:1593 merge-recursive.c:1218
+#: merge-ort.c:1639 merge-recursive.c:1221
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "%s altmodülü birleştirilemedi (işlemeler mevcut değil)"
 
-#: merge-ort.c:1602 merge-recursive.c:1225
+#: merge-ort.c:1648 merge-recursive.c:1228
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr "%s altmodülü birleştirilemedi (işlemeler merge-base'i takip etmiyor)"
 
-#: merge-ort.c:1612 merge-ort.c:1620
+#: merge-ort.c:1658 merge-ort.c:1666
 #, c-format
 msgid "Note: Fast-forwarding submodule %s to %s"
 msgstr "Not: %s altmodülü %s yönüne ileri sarılıyor"
 
-#: merge-ort.c:1642
+#: merge-ort.c:1688
 #, c-format
 msgid "Failed to merge submodule %s"
-msgstr "'%s' altmodülü birleştirilemedi"
+msgstr "'%s' altmodülü birleştirilemedi"
 
-#: merge-ort.c:1649
+#: merge-ort.c:1695
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but a possible merge resolution exists:\n"
@@ -4855,7 +4978,7 @@ msgstr ""
 "%s altmodülü birleştirilemedi; ancak olası bir birleştirme çözümü mevcut:\n"
 "%s\n"
 
-#: merge-ort.c:1653 merge-recursive.c:1281
+#: merge-ort.c:1699 merge-recursive.c:1284
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -4871,7 +4994,7 @@ msgstr ""
 "\n"
 "komutu bu öneriyi kabul edecektir.\n"
 
-#: merge-ort.c:1666
+#: merge-ort.c:1712
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but multiple possible merges exist:\n"
@@ -4881,21 +5004,21 @@ msgstr ""
 "mevcut:\n"
 "%s"
 
-#: merge-ort.c:1887 merge-recursive.c:1372
+#: merge-ort.c:1937 merge-recursive.c:1375
 msgid "Failed to execute internal merge"
 msgstr "İç birleştirme çalıştırılamadı"
 
-#: merge-ort.c:1892 merge-recursive.c:1377
+#: merge-ort.c:1942 merge-recursive.c:1380
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "%s veritabanına eklenemedi"
 
-#: merge-ort.c:1899 merge-recursive.c:1410
+#: merge-ort.c:1949 merge-recursive.c:1413
 #, c-format
 msgid "Auto-merging %s"
 msgstr "%s kendiliğinden birleştiriliyor"
 
-#: merge-ort.c:2038 merge-recursive.c:2132
+#: merge-ort.c:2088 merge-recursive.c:2135
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -4905,7 +5028,7 @@ msgstr ""
 "örtülü yeniden adlandırmanın aşağıdaki yolları oraya koymasına engel oluyor: "
 "%s."
 
-#: merge-ort.c:2048 merge-recursive.c:2142
+#: merge-ort.c:2098 merge-recursive.c:2145
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -4915,7 +5038,7 @@ msgstr ""
 "eşlemlenemiyor; örtülü dizin yeniden adlandırmaları aşağıdaki yolları oraya "
 "koymayı denedi: %s."
 
-#: merge-ort.c:2106
+#: merge-ort.c:2156
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to rename %s to; it was "
@@ -4926,7 +5049,7 @@ msgstr ""
 "adlandırılacağı belirsiz; herhangi bir hedef dosyaların çoğunu almadan "
 "birden çok başka dizine yeniden adlandırılmıştı."
 
-#: merge-ort.c:2260 merge-recursive.c:2478
+#: merge-ort.c:2310 merge-recursive.c:2481
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
@@ -4935,7 +5058,7 @@ msgstr ""
 "UYARI: %s -> %s yeniden adlandırmasını %s ögesine uygulamadan kaçınılıyor, "
 "çünkü %s ögesinin kendisi yeniden adlandırıldı."
 
-#: merge-ort.c:2400 merge-recursive.c:3261
+#: merge-ort.c:2450 merge-recursive.c:3264
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
@@ -4944,7 +5067,7 @@ msgstr ""
 "Yol güncellendi: %s, (%s içinde eklenen) %s içinde yeniden adlandırılan bir "
 "dizinde; onu %s konumuna taşıdı."
 
-#: merge-ort.c:2407 merge-recursive.c:3268
+#: merge-ort.c:2457 merge-recursive.c:3271
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
@@ -4953,7 +5076,7 @@ msgstr ""
 "Yol güncellendi: %s, %s olarak yeniden adlandırıldı (%s içinde), %s içinde "
 "yeniden adlandırılan bir dizinde; onu %s konumuna taşıdı."
 
-#: merge-ort.c:2420 merge-recursive.c:3264
+#: merge-ort.c:2470 merge-recursive.c:3267
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed "
@@ -4962,7 +5085,7 @@ msgstr ""
 "ÇAKIŞMA (dosya konumu): %s, (%s içinde eklenen) %s içinde yeniden "
 "adlandırılan bir dizinde, belki de %s konumuna taşınmalı."
 
-#: merge-ort.c:2428 merge-recursive.c:3271
+#: merge-ort.c:2478 merge-recursive.c:3274
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
@@ -4971,14 +5094,14 @@ msgstr ""
 "ÇAKIŞMA (dosya konumu): %s, %s olarak yeniden adlandırıldı (%s içinde), %s "
 "içinde yeniden adlandırılan bir dizinde, belki de %s konumuna taşınmalı."
 
-#: merge-ort.c:2584
+#: merge-ort.c:2634
 #, c-format
 msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
 msgstr ""
 "ÇAKIŞMA (y. adlandır/y. adlandır): %s->%s olarak adlandırıldı (%s içinde) ve "
 "ek olarak %s olarak da adlandırıldı (%s içinde)."
 
-#: merge-ort.c:2679
+#: merge-ort.c:2729
 #, c-format
 msgid ""
 "CONFLICT (rename involved in collision): rename of %s -> %s has content "
@@ -4987,26 +5110,26 @@ msgid ""
 msgstr ""
 "ÇAKIŞMA (yeniden adlandırma çarpışması): %s -> %s yeniden adlandırmasının "
 "içerik çakışmaları var ve başka bir yolla çarpışıyor; bu iç içe geçmiş "
-"çakışmaimleyicilerine neden olabilir."
+"çakışma imleyicilerine neden olabilir."
 
-#: merge-ort.c:2698 merge-ort.c:2722
+#: merge-ort.c:2748 merge-ort.c:2772
 #, c-format
 msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
 msgstr ""
 "ÇAKIŞMA (yeniden adlandır/sil): %s->%s olarak adlandırıldı (%s içinde); "
 "ancak %s içinde silindi."
 
-#: merge-ort.c:3212 merge-recursive.c:3022
+#: merge-ort.c:3261 merge-recursive.c:3025
 #, c-format
 msgid "cannot read object %s"
 msgstr "%s nesnesi okunamıyor"
 
-#: merge-ort.c:3215 merge-recursive.c:3025
+#: merge-ort.c:3264 merge-recursive.c:3028
 #, c-format
 msgid "object %s is not a blob"
 msgstr "%s nesnesi ikili bir nesne değil"
 
-#: merge-ort.c:3644
+#: merge-ort.c:3693
 #, c-format
 msgid ""
 "CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
@@ -5015,7 +5138,7 @@ msgstr ""
 "ÇAKIŞMA (dosya/dizin): Dizin, şuradan %s yolunda: %s; bunun yerine %s "
 "konumuna taşınıyor."
 
-#: merge-ort.c:3721
+#: merge-ort.c:3770
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed both "
@@ -5025,7 +5148,7 @@ msgstr ""
 "ikisi de yeniden adlandırıldı; böylelikle başka bir yerde kayıtları "
 "yazılabilir."
 
-#: merge-ort.c:3728
+#: merge-ort.c:3777
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed one "
@@ -5035,24 +5158,24 @@ msgstr ""
 "bir tanesi yeniden adlandırıldı; böylelikle her birinin başka bir yerde "
 "kayıtları yazılabilir."
 
-#: merge-ort.c:3819 merge-recursive.c:3101
+#: merge-ort.c:3866 merge-recursive.c:3104
 msgid "content"
 msgstr "içerik"
 
-#: merge-ort.c:3821 merge-recursive.c:3105
+#: merge-ort.c:3868 merge-recursive.c:3108
 msgid "add/add"
 msgstr "ekle/ekle"
 
-#: merge-ort.c:3823 merge-recursive.c:3150
+#: merge-ort.c:3870 merge-recursive.c:3153
 msgid "submodule"
 msgstr "altmodül"
 
-#: merge-ort.c:3825 merge-recursive.c:3151
+#: merge-ort.c:3872 merge-recursive.c:3154
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "ÇAKIŞMA (%s): %s içinde birleştirme çakışması"
 
-#: merge-ort.c:3869
+#: merge-ort.c:3916
 #, c-format
 msgid ""
 "CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
@@ -5061,7 +5184,7 @@ msgstr ""
 "ÇAKIŞMA (değiştir/sil): %s silindi (%s içinde) ve %s içinde değiştirildi. %s "
 "sürümü (şunun: %s) ağaçta bırakıldı."
 
-#: merge-ort.c:4165
+#: merge-ort.c:4212
 #, c-format
 msgid ""
 "Note: %s not up to date and in way of checking out conflicted version; old "
@@ -5073,12 +5196,12 @@ msgstr ""
 #. TRANSLATORS: The %s arguments are: 1) tree hash of a merge
 #. base, and 2-3) the trees for the two trees we're merging.
 #.
-#: merge-ort.c:4534
+#: merge-ort.c:4586
 #, c-format
 msgid "collecting merge info failed for trees %s, %s, %s"
 msgstr "şu ağaçlar için birleştirme bilgisi toplama başarısız: %s, %s, %s"
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3716
+#: merge-ort-wrappers.c:13 merge-recursive.c:3723
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -5088,7 +5211,7 @@ msgstr ""
 "yazılacak:\n"
 "\t%s"
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3482 builtin/merge.c:405
+#: merge-ort-wrappers.c:33 merge-recursive.c:3485 builtin/merge.c:405
 msgid "Already up to date."
 msgstr "Tümü güncel."
 
@@ -5126,7 +5249,7 @@ msgstr ": bir D/F çakışması olabilir mi?"
 msgid "refusing to lose untracked file at '%s'"
 msgstr "'%s' konumundaki izlenmeyen dosyayı kaybetme reddediliyor"
 
-#: merge-recursive.c:956 builtin/cat-file.c:41
+#: merge-recursive.c:956 builtin/cat-file.c:47
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "%s '%s' nesnesi okunamıyor"
@@ -5151,44 +5274,44 @@ msgstr "'%s' için sembolik bağ oluşturulamadı: %s"
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "şununla ne yapılacağı bilinmiyor: %06o %s '%s'"
 
-#: merge-recursive.c:1233 merge-recursive.c:1246
+#: merge-recursive.c:1236 merge-recursive.c:1249
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "%s altmodülü şu işlemeye ileri sarılıyor:"
 
-#: merge-recursive.c:1236 merge-recursive.c:1249
+#: merge-recursive.c:1239 merge-recursive.c:1252
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "%s altmodülü ileri sarılıyor"
 
-#: merge-recursive.c:1273
+#: merge-recursive.c:1276
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 "%s altmodülü birleştirilemedi (işlemeleri takip eden birleştirme bulunamadı)"
 
-#: merge-recursive.c:1277
+#: merge-recursive.c:1280
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "%s altmodülü birleştirilemedi (ileri sarım değil)"
 
-#: merge-recursive.c:1278
+#: merge-recursive.c:1281
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "Şu altmodül için olası bir birleştirme çözümü bulundu:\n"
 
-#: merge-recursive.c:1290
+#: merge-recursive.c:1293
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr "%s altmodülü birleştirilemedi (birden çok birleştirme bulundu)"
 
-#: merge-recursive.c:1434
+#: merge-recursive.c:1437
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr ""
 "Hata: %s konumundaki izlenmeyen dosyayı kaybetme reddediliyor, bunun yerine "
 "%s konumuna yazılacak."
 
-#: merge-recursive.c:1506
+#: merge-recursive.c:1509
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5197,7 +5320,7 @@ msgstr ""
 "ÇAKIŞMA (%s/silme): %s silindi (%s içinde) ve %s (%s içinde). %s (%s) sürümü "
 "ağaçta bırakıldı."
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1514
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5206,7 +5329,7 @@ msgstr ""
 "ÇAKIŞMA (%s/silme): %s silindi (%s içinde) ve %s şuraya: %s (%s içinde). %s "
 "(%s) sürümü ağaçta bırakıldı."
 
-#: merge-recursive.c:1518
+#: merge-recursive.c:1521
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5215,7 +5338,7 @@ msgstr ""
 "ÇAKIŞMA (%s/silme): %s silindi (%s içinde) ve %s (%s içinde). %s (%s) sürümü "
 "ağaçta %s konumunda bırakıldı."
 
-#: merge-recursive.c:1523
+#: merge-recursive.c:1526
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5224,45 +5347,45 @@ msgstr ""
 "ÇAKIŞMA (%s/silme): %s silindi (%s içinde) ve %s şuraya: %s (%s içinde). %s "
 "(%s) sürümü ağaçta %s konumunda bırakıldı."
 
-#: merge-recursive.c:1558
+#: merge-recursive.c:1561
 msgid "rename"
 msgstr "yeniden adlandır"
 
-#: merge-recursive.c:1558
+#: merge-recursive.c:1561
 msgid "renamed"
 msgstr "yeniden adlandırıldı"
 
-#: merge-recursive.c:1609 merge-recursive.c:2515 merge-recursive.c:3178
+#: merge-recursive.c:1612 merge-recursive.c:2518 merge-recursive.c:3181
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "%s konumundaki kirli dosyayı kaybetme reddediliyor"
 
-#: merge-recursive.c:1619
+#: merge-recursive.c:1622
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
 "Engel olduğu halde %s konumundaki izlenmeyen dosyayı kaybetme reddediliyor."
 
-#: merge-recursive.c:1677
+#: merge-recursive.c:1680
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "ÇAKIŞMA (yeniden adlandır/ekle): %s->%s olarak adlandırıldı (%s içinde). %s "
 "eklendi (%s içinde)."
 
-#: merge-recursive.c:1708
+#: merge-recursive.c:1711
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s bir dizin (%s içinde), bunun yerine %s olarak ekleniyor"
 
-#: merge-recursive.c:1713
+#: merge-recursive.c:1716
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr ""
 "%s konumundaki izlenmeyen dosyayı kaybetme reddediliyor, bunun yerine %s "
 "olarak ekleniyor"
 
-#: merge-recursive.c:1740
+#: merge-recursive.c:1743
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -5271,18 +5394,18 @@ msgstr ""
 "ÇAKIŞMA (y. adlandır/y. adlandır): \"%s\"->\"%s\" olarak adlandır (\"%s\" "
 "dalında), \"%s\"->\"%s\" olarak adlandır (\"%s\"%s içinde)"
 
-#: merge-recursive.c:1745
+#: merge-recursive.c:1748
 msgid " (left unresolved)"
 msgstr " (çözülmeden bırakıldı)"
 
-#: merge-recursive.c:1837
+#: merge-recursive.c:1840
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "ÇAKIŞMA (y. adlandır/y. adlandır): %s->%s olarak adlandır (%s içinde). %s->"
 "%s olarak adlandır (%s içinde)"
 
-#: merge-recursive.c:2100
+#: merge-recursive.c:2103
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -5293,7 +5416,7 @@ msgstr ""
 "yerleştirileceği belirsiz; çünkü %s dizini birden çok başka dizine yeniden "
 "adlandırılırken hiçbir hedef dosyaların büyük çoğunluğunu almadı."
 
-#: merge-recursive.c:2234
+#: merge-recursive.c:2237
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -5302,79 +5425,79 @@ msgstr ""
 "ÇAKIŞMA (y. adlandır/y. adlandır): Dizini %s->%s olarak adlandır (%s "
 "içinde). Dizini %s->%s olarak adlandır (%s içinde)."
 
-#: merge-recursive.c:3089
+#: merge-recursive.c:3092
 msgid "modify"
 msgstr "değiştir"
 
-#: merge-recursive.c:3089
+#: merge-recursive.c:3092
 msgid "modified"
 msgstr "değiştirilmiş"
 
-#: merge-recursive.c:3128
+#: merge-recursive.c:3131
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "%s atlandı (mevcut ile aynı biçimde birleştirildi)"
 
-#: merge-recursive.c:3181
+#: merge-recursive.c:3184
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Bunun yerine %s olarak ekleniyor"
 
-#: merge-recursive.c:3385
+#: merge-recursive.c:3388
 #, c-format
 msgid "Removing %s"
 msgstr "%s kaldırılıyor"
 
-#: merge-recursive.c:3408
+#: merge-recursive.c:3411
 msgid "file/directory"
 msgstr "dosya/dizin"
 
-#: merge-recursive.c:3413
+#: merge-recursive.c:3416
 msgid "directory/file"
 msgstr "dizin/dosya"
 
-#: merge-recursive.c:3420
+#: merge-recursive.c:3423
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
 "ÇAKIŞMA (%s): %s adıyla bir dizin var (%s içinde). %s, %s olarak ekleniyor."
 
-#: merge-recursive.c:3429
+#: merge-recursive.c:3432
 #, c-format
 msgid "Adding %s"
 msgstr "%s ekleniyor"
 
-#: merge-recursive.c:3438
+#: merge-recursive.c:3441
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "ÇAKIŞMA (ekle/ekle): %s içinde birleştirme çakışması"
 
-#: merge-recursive.c:3491
+#: merge-recursive.c:3494
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "%s ve %s ağaçlarının birleştirilmesi başarısız"
 
-#: merge-recursive.c:3585
+#: merge-recursive.c:3588
 msgid "Merging:"
 msgstr "Birleştiriliyor:"
 
-#: merge-recursive.c:3598
+#: merge-recursive.c:3601
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "%u ortak ata bulundu:"
 msgstr[1] "%u ortak ata bulundu:"
 
-#: merge-recursive.c:3648
+#: merge-recursive.c:3651
 msgid "merge returned no commit"
 msgstr "birleştirme herhangi bir işleme döndürmedi"
 
-#: merge-recursive.c:3816
+#: merge-recursive.c:3823
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "'%s' nesnesi ayrıştırılamadı"
 
-#: merge-recursive.c:3834 builtin/merge.c:720 builtin/merge.c:906
+#: merge-recursive.c:3841 builtin/merge.c:720 builtin/merge.c:912
 #: builtin/stash.c:489
 msgid "Unable to write index."
 msgstr "İndeks yazılamıyor."
@@ -5383,221 +5506,225 @@ msgstr "İndeks yazılamıyor."
 msgid "failed to read the cache"
 msgstr "önbellek okunamadı"
 
-#: merge.c:102 rerere.c:704 builtin/am.c:1988 builtin/am.c:2022
-#: builtin/checkout.c:598 builtin/checkout.c:853 builtin/clone.c:706
+#: merge.c:102 rerere.c:705 builtin/am.c:1989 builtin/am.c:2023
+#: builtin/checkout.c:603 builtin/checkout.c:865 builtin/clone.c:714
 #: builtin/stash.c:269
 msgid "unable to write new index file"
 msgstr "yeni indeks dosyası yazılamıyor"
 
-#: midx.c:78
+#: midx.c:79
 msgid "multi-pack-index OID fanout is of the wrong size"
 msgstr "multi-pack-index OID ikiye bölümünün boyutu hatalı"
 
-#: midx.c:111
+#: midx.c:112
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "multi-pack-index dosyası %s pek küçük"
 
-#: midx.c:127
+#: midx.c:128
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr "multi-pack-index imzası 0x%08x, 0x%08x imzası ile eşleşmiyor"
 
-#: midx.c:132
+#: midx.c:133
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "multi-pack-index sürümü %d tanımlanamıyor"
 
-#: midx.c:137
+#: midx.c:138
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr "multi-pack-index sağlama sürümü %u, %u sürümü ile eşleşmiyor"
 
-#: midx.c:154
+#: midx.c:155
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "multi-pack-index'ten gerekli pack-name iri parçası eksik"
 
-#: midx.c:156
+#: midx.c:157
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "multi-pack-index'ten gerekli OID fanout iri parçası eksik"
 
-#: midx.c:158
+#: midx.c:159
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "multi-pack-index'ten gerekli OID arama iri parçası eksik"
 
-#: midx.c:160
+#: midx.c:161
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "multi-pack-index'ten gerekli nesne ofsetleri iri parçası eksik"
 
-#: midx.c:176
+#: midx.c:180
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr "multi-pack-index paket adlarının sırasız: '%s' şundan önce: '%s'"
 
-#: midx.c:224
+#: midx.c:228
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "hatalı pack-int-id: %u (%u toplam paket)"
 
-#: midx.c:274
+#: midx.c:278
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr "multi-pack-index bir 64 bit ofset depoluyor; ancak off_t pek küçük"
 
-#: midx.c:505
+#: midx.c:509
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "paket dosyası '%s' eklenemedi"
 
-#: midx.c:511
+#: midx.c:515
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "pack-index '%s' açılamadı"
 
-#: midx.c:579
+#: midx.c:583
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "%d nesnesi paket dosyasında bulunamadı"
 
-#: midx.c:895
+#: midx.c:911
 msgid "cannot store reverse index file"
 msgstr "ters indeks dosyası depolanamıyor"
 
-#: midx.c:993
+#: midx.c:1009
 #, c-format
 msgid "could not parse line: %s"
 msgstr "satır ayrıştırılamadı: %s"
 
-#: midx.c:995
+#: midx.c:1011
 #, c-format
 msgid "malformed line: %s"
 msgstr "hatalı oluşturulmuş satır: %s"
 
-#: midx.c:1162
+#: midx.c:1181
 msgid "ignoring existing multi-pack-index; checksum mismatch"
 msgstr "mevcut multi-pack-index yok sayılıyor; sağlama toplamı uyumsuzluğu"
 
-#: midx.c:1187
+#: midx.c:1206
 msgid "could not load pack"
 msgstr "paket yüklenemedi"
 
-#: midx.c:1193
+#: midx.c:1212
 #, c-format
 msgid "could not open index for %s"
 msgstr "%s için indeks açılamadı"
 
-#: midx.c:1204
+#: midx.c:1223
 msgid "Adding packfiles to multi-pack-index"
 msgstr "Paket dosyaları multi-pack-index'e ekleniyor"
 
-#: midx.c:1247
+#: midx.c:1266
 #, c-format
 msgid "unknown preferred pack: '%s'"
 msgstr "bilinmeyen tercih edilen paket: '%s'"
 
-#: midx.c:1292
+#: midx.c:1311
 #, c-format
 msgid "cannot select preferred pack %s with no objects"
 msgstr "yeğlenen paket %s nesnesiz seçilemiyor"
 
-#: midx.c:1324
+#: midx.c:1343
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "bırakılacak pack-file %s görülmedi"
 
-#: midx.c:1370
+#: midx.c:1389
 #, c-format
 msgid "preferred pack '%s' is expired"
 msgstr "tercih edilen '%s' paketinin süresi geçmiş"
 
-#: midx.c:1383
+#: midx.c:1402
 msgid "no pack files to index."
 msgstr "indekslenecek paket dosyası yok."
 
-#: midx.c:1420
+#: midx.c:1409
+msgid "refusing to write multi-pack .bitmap without any objects"
+msgstr "bir nesne olmadan multi-pack .bitmap yazımı reddediliyor"
+
+#: midx.c:1451
 msgid "could not write multi-pack bitmap"
 msgstr "çoklu paket biteşlem yazılamadı"
 
-#: midx.c:1430
+#: midx.c:1461
 msgid "could not write multi-pack-index"
 msgstr "multi-pack-index yazılamadı"
 
-#: midx.c:1489 builtin/clean.c:37
+#: midx.c:1520 builtin/clean.c:37
 #, c-format
 msgid "failed to remove %s"
 msgstr "%s kaldırılamadı"
 
-#: midx.c:1522
+#: midx.c:1553
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "multi-pack-index %s konumunda temizlenemedi"
 
-#: midx.c:1585
+#: midx.c:1616
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr "multi-pack-index dosyası mevcut, ancak ayrıştırılamadı"
 
-#: midx.c:1593
+#: midx.c:1624
 msgid "incorrect checksum"
 msgstr "yanlış sağlama toplamı"
 
-#: midx.c:1596
+#: midx.c:1627
 msgid "Looking for referenced packfiles"
 msgstr "Başvurulmuş paket dosyaları aranıyor"
 
-#: midx.c:1611
+#: midx.c:1642
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr "oid fanout sırasız: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 
-#: midx.c:1616
+#: midx.c:1647
 msgid "the midx contains no oid"
 msgstr "midx bir oid içermiyor"
 
-#: midx.c:1625
+#: midx.c:1656
 msgid "Verifying OID order in multi-pack-index"
 msgstr "multi-pack-index içindeki OID sırası doğrulanıyor"
 
-#: midx.c:1634
+#: midx.c:1665
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "oid araması sırasız: oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1654
+#: midx.c:1685
 msgid "Sorting objects by packfile"
 msgstr "Nesneler paket dosyasına göre sıralanıyor"
 
-#: midx.c:1661
+#: midx.c:1692
 msgid "Verifying object offsets"
 msgstr "Nesne ofsetleri doğrulanıyor"
 
-#: midx.c:1677
+#: midx.c:1708
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "şunun için paket girdisi yüklenemedi: oid[%d] = %s"
 
-#: midx.c:1683
+#: midx.c:1714
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "paket dosyası %s için pack-index yüklenemedi"
 
-#: midx.c:1692
+#: midx.c:1723
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "şunun için yanlış nesne ofseti: oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 
-#: midx.c:1719
+#: midx.c:1750
 msgid "Counting referenced objects"
 msgstr "Başvurulmuş nesneler sayılıyor"
 
-#: midx.c:1729
+#: midx.c:1760
 msgid "Finding and deleting unreferenced packfiles"
 msgstr "Başvurulmamış paket dosyaları bulunuyor ve siliniyor"
 
-#: midx.c:1921
+#: midx.c:1952
 msgid "could not start pack-objects"
 msgstr "pack-objects başlatılamadı"
 
-#: midx.c:1941
+#: midx.c:1972
 msgid "could not finish pack-objects"
 msgstr "pack-objects bitirilemedi"
 
@@ -5616,7 +5743,7 @@ msgstr "lazy_name oluşturulamıyor: %s"
 msgid "unable to join lazy_name thread: %s"
 msgstr "lazy_name iş parçacığı ucu birleştirilemiyor: %s"
 
-#: notes-merge.c:277
+#: notes-merge.c:276
 #, c-format
 msgid ""
 "You have not concluded your previous notes merge (%s exists).\n"
@@ -5628,7 +5755,7 @@ msgstr ""
 "commit' veya 'git notes merge --abort' kullanarak bir önceki birleştirmeyi "
 "işleyin/durdurun."
 
-#: notes-merge.c:284
+#: notes-merge.c:283
 #, c-format
 msgid "You have not concluded your notes merge (%s exists)."
 msgstr "Notlar birleştirmenizi sonuçlandırmadınız (%s var)."
@@ -5656,272 +5783,343 @@ msgstr "%s içindeki notları yeniden yazma reddediliyor (refs/notes/ dışında
 msgid "Bad %s value: '%s'"
 msgstr "Hatalı %s değeri: '%s'"
 
-#: object-file.c:456
+#: object-file.c:457
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr "nesne dizini %s yok; şurayı denetleyin: .git/objects/info/alternates"
 
-#: object-file.c:514
+#: object-file.c:515
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr "alternatif nesne yolu olağanlaştırılamıyor: %s"
 
-#: object-file.c:588
+#: object-file.c:589
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr "%s: alternatif nesne depoları yok sayılıyor, iç içe geçme pek derin"
 
-#: object-file.c:595
+#: object-file.c:596
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr "nesne dizini olağanlaştırılamıyor: %s"
 
-#: object-file.c:638
+#: object-file.c:639
 msgid "unable to fdopen alternates lockfile"
 msgstr "alternatifler kilit dosyası fdopen yapılamıyor"
 
-#: object-file.c:656
+#: object-file.c:657
 msgid "unable to read alternates file"
 msgstr "alternatifler dosyası okunamıyor"
 
-#: object-file.c:663
+#: object-file.c:664
 msgid "unable to move new alternates file into place"
 msgstr "yeni alternatifler dosyası yerine taşınamıyor"
 
-#: object-file.c:741
+#: object-file.c:742
 #, c-format
 msgid "path '%s' does not exist"
 msgstr "'%s' diye bir yol yok"
 
-#: object-file.c:762
+#: object-file.c:763
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr ""
 "Bağlantı yapılmış çıkış olarak '%s' başvuru deposu henüz desteklenmiyor."
 
-#: object-file.c:768
+#: object-file.c:769
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "Başvuru deposu '%s' yerel bir depo değil."
 
-#: object-file.c:774
+#: object-file.c:775
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr "başvuru deposu '%s' sığ"
 
-#: object-file.c:782
+#: object-file.c:783
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr "başvuru deposu '%s' aşılı"
 
-#: object-file.c:813
+#: object-file.c:814
 #, c-format
 msgid "could not find object directory matching %s"
 msgstr "'%s' ile eşleşen nesne dizini bulunamadı"
 
-#: object-file.c:863
+#: object-file.c:864
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr "alternatif başvurular ayrıştırılırken geçersiz satır: %s"
 
-#: object-file.c:1013
+#: object-file.c:1014
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr "%<PRIuMAX>, %<PRIuMAX> sınırı üzerinden mmap yapılmaya çalışılıyor"
 
-#: object-file.c:1048
+#: object-file.c:1049
 #, c-format
 msgid "mmap failed%s"
 msgstr "mmap başarısız%s"
 
-#: object-file.c:1214
+#: object-file.c:1230
 #, c-format
 msgid "object file %s is empty"
 msgstr "nesne dosyası %s boş"
 
-#: object-file.c:1333 object-file.c:2542
+#: object-file.c:1349 object-file.c:2588
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr "hasar görmüş gevşek nesne '%s'"
 
-#: object-file.c:1335 object-file.c:2546
+#: object-file.c:1351 object-file.c:2592
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr "gevşek nesne '%s' sonunda anlamsız veri"
 
-#: object-file.c:1457
+#: object-file.c:1473
 #, c-format
 msgid "unable to parse %s header"
 msgstr "%s üstbilgisi ayrıştırılamıyor"
 
-#: object-file.c:1459
+#: object-file.c:1475
 msgid "invalid object type"
 msgstr "geçersiz nesne türü"
 
-#: object-file.c:1470
+#: object-file.c:1486
 #, c-format
 msgid "unable to unpack %s header"
 msgstr "%s üstbilgisi açılamıyor"
 
-#: object-file.c:1474
+#: object-file.c:1490
 #, c-format
 msgid "header for %s too long, exceeds %d bytes"
 msgstr "%s üstbilgisi pek uzun, %d bayt'ı aşıyor"
 
-#: object-file.c:1704
+#: object-file.c:1720
 #, c-format
 msgid "failed to read object %s"
 msgstr "%s nesnesi okunamadı"
 
-#: object-file.c:1708
+#: object-file.c:1724
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr "%s yedeği %s için bulunamadı"
 
-#: object-file.c:1712
+#: object-file.c:1728
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr "%s gevşek nesnesi (%s içinde depolanıyor) hasar görmüş"
 
-#: object-file.c:1716
+#: object-file.c:1732
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr "paketlenmiş nesne %s (%s içinde depolanıyor) hasar görmüş"
 
-#: object-file.c:1821
+#: object-file.c:1855
 #, c-format
 msgid "unable to write file %s"
 msgstr "%s dosyası yazılamıyor"
 
-#: object-file.c:1828
+#: object-file.c:1862
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr "'%s' ögesine izin ayarlanamıyor"
 
-#: object-file.c:1835
+#: object-file.c:1869
 msgid "file write error"
 msgstr "dosya yazım hatası"
 
-#: object-file.c:1858
+#: object-file.c:1904
 msgid "error when closing loose object file"
 msgstr "gevşek nesne dosyası kapatılırken hata"
 
-#: object-file.c:1925
+#: object-file.c:1971
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr "%s depo veritabanına nesne eklemek için yetersiz izin"
 
-#: object-file.c:1927
+#: object-file.c:1973
 msgid "unable to create temporary file"
 msgstr "geçici dosya oluşturulamıyor"
 
-#: object-file.c:1951
+#: object-file.c:1997
 msgid "unable to write loose object file"
 msgstr "gevşek nesne dosyası yazılamıyor"
 
-#: object-file.c:1957
+#: object-file.c:2003
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr "yeni nesne %s söndürülemiyor (%d)"
 
-#: object-file.c:1961
+#: object-file.c:2007
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr "%s nesnesi üzerinde deflateEnd başarısız oldu (%d)"
 
-#: object-file.c:1965
+#: object-file.c:2011
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr "%s için olan nesne kaynak verisinden dolayı kafa karışıklığı"
 
-#: object-file.c:1976 builtin/pack-objects.c:1243
+#: object-file.c:2022 builtin/pack-objects.c:1251
 #, c-format
 msgid "failed utime() on %s"
 msgstr "%s üzerinde utime() başarısız"
 
-#: object-file.c:2054
+#: object-file.c:2100
 #, c-format
 msgid "cannot read object for %s"
 msgstr "%s için nesne okunamıyor"
 
-#: object-file.c:2105
+#: object-file.c:2151
 msgid "corrupt commit"
 msgstr "hasar görmüş işleme"
 
-#: object-file.c:2113
+#: object-file.c:2159
 msgid "corrupt tag"
 msgstr "hasar görmüş etiket"
 
-#: object-file.c:2213
+#: object-file.c:2259
 #, c-format
 msgid "read error while indexing %s"
 msgstr "%s indekslenirken okuma hatası"
 
-#: object-file.c:2216
+#: object-file.c:2262
 #, c-format
 msgid "short read while indexing %s"
 msgstr "%s indekslenirken kısa read"
 
-#: object-file.c:2289 object-file.c:2299
+#: object-file.c:2335 object-file.c:2345
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr "%s: veritabanına ekleme başarısız"
 
-#: object-file.c:2305
+#: object-file.c:2351
 #, c-format
 msgid "%s: unsupported file type"
 msgstr "%s: desteklenmeyen dosya türü"
 
-#: object-file.c:2329 builtin/fetch.c:1453
+#: object-file.c:2375 builtin/fetch.c:1494
 #, c-format
 msgid "%s is not a valid object"
 msgstr "%s geçerli bir nesne değil"
 
-#: object-file.c:2331
+#: object-file.c:2377
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "%s geçerli bir '%s' nesnesi değil"
 
-#: object-file.c:2358
+#: object-file.c:2404
 #, c-format
 msgid "unable to open %s"
 msgstr "%s açılamıyor"
 
-#: object-file.c:2553
+#: object-file.c:2599
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr "%s için sağlama uyuşmazlığı (%s bekleniyordu)"
 
-#: object-file.c:2576
+#: object-file.c:2622
 #, c-format
 msgid "unable to mmap %s"
 msgstr "%s mmap yapılamadı"
 
-#: object-file.c:2582
+#: object-file.c:2628
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr "%s üstbilgisi açılamıyor"
 
-#: object-file.c:2587
+#: object-file.c:2633
 #, c-format
 msgid "unable to parse header of %s"
 msgstr "%s üstbilgisi ayrıştırılamıyor"
 
-#: object-file.c:2598
+#: object-file.c:2644
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr "%s içeriği açılamıyor"
 
-#: object-name.c:480
+#. TRANSLATORS: This is a line of ambiguous object
+#. output shown when we cannot look up or parse the
+#. object in question. E.g. "deadbeef [bad object]".
+#.
+#: object-name.c:382
+#, c-format
+msgid "%s [bad object]"
+msgstr "%s [hatalı nesne]"
+
+#. TRANSLATORS: This is a line of ambiguous commit
+#. object output. E.g.:
+#. *
+#.    "deadbeef commit 2021-01-01 - Some Commit Message"
+#.
+#: object-name.c:407
+#, c-format
+msgid "%s commit %s - %s"
+msgstr "%s %s işlemesi - %s"
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output. E.g.:
+#. *
+#.    "deadbeef tag 2022-01-01 - Some Tag Message"
+#. *
+#. The second argument is the YYYY-MM-DD found
+#. in the tag.
+#. *
+#. The third argument is the "tag" string
+#. from object.c.
+#.
+#: object-name.c:428
+#, c-format
+msgid "%s tag %s - %s"
+msgstr "%s %s etiketi - %s"
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output where we couldn't parse
+#. the tag itself. E.g.:
+#. *
+#.    "deadbeef [bad tag, could not parse it]"
+#.
+#: object-name.c:439
+#, c-format
+msgid "%s [bad tag, could not parse it]"
+msgstr "%s [hatalı etiket, ayrıştırılamadı]"
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef tree".
+#.
+#: object-name.c:447
+#, c-format
+msgid "%s tree"
+msgstr "%s ağacı"
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef blob".
+#.
+#: object-name.c:453
+#, c-format
+msgid "%s blob"
+msgstr "%s ikili nesnesi"
+
+#: object-name.c:569
 #, c-format
 msgid "short object ID %s is ambiguous"
-msgstr "kısa nesne ID'si %s belirsiz"
+msgstr "kısa nesne kimliği %s belirsiz"
 
-#: object-name.c:491
-msgid "The candidates are:"
-msgstr "Adaylar:"
+#. TRANSLATORS: The argument is the list of ambiguous
+#. objects composed in show_ambiguous_object(). See
+#. its "TRANSLATORS" comments for details.
+#.
+#: object-name.c:591
+#, c-format
+msgid ""
+"The candidates are:\n"
+"%s"
+msgstr ""
+"Adaylar:\n"
+"%s"
 
-#: object-name.c:790
+#: object-name.c:888
 msgid ""
 "Git normally never creates a ref that ends with 40 hex characters\n"
 "because it will be ignored when you just specify 40-hex. These refs\n"
@@ -5944,22 +6142,22 @@ msgstr ""
 "iletiyi\n"
 "kapatmak için \"git config advice.objectNameWarning\" yapın."
 
-#: object-name.c:910
+#: object-name.c:1008
 #, c-format
 msgid "log for '%.*s' only goes back to %s"
 msgstr "'%.*s' günlüğü yalnızca şuna geri gider: %s"
 
-#: object-name.c:918
+#: object-name.c:1016
 #, c-format
 msgid "log for '%.*s' only has %d entries"
 msgstr "'%.*s' günlüğünde yalnızca %d girdi var"
 
-#: object-name.c:1696
+#: object-name.c:1794
 #, c-format
 msgid "path '%s' exists on disk, but not in '%.*s'"
 msgstr "'%s' yolu disk üzerinde mevcut; ancak '%.*s' içinde değil"
 
-#: object-name.c:1702
+#: object-name.c:1800
 #, c-format
 msgid ""
 "path '%s' exists, but not '%s'\n"
@@ -5968,12 +6166,12 @@ msgstr ""
 "'%s' yolu mevcut; ancak '%s' değil\n"
 "İpucu: Şunu mu demek istediniz: '%.*s:%s', nam-ı diğer '%.*s:./%s'?"
 
-#: object-name.c:1711
+#: object-name.c:1809
 #, c-format
 msgid "path '%s' does not exist in '%.*s'"
 msgstr "'%s' yolu '%.*s' içinde mevcut değil"
 
-#: object-name.c:1739
+#: object-name.c:1837
 #, c-format
 msgid ""
 "path '%s' is in the index, but not at stage %d\n"
@@ -5982,7 +6180,7 @@ msgstr ""
 "'%s' yolu indekste; ancak %d numaralı alanda değil\n"
 "İpucu: Şunu mu demek istediniz: ':%d:%s'?"
 
-#: object-name.c:1755
+#: object-name.c:1853
 #, c-format
 msgid ""
 "path '%s' is in the index, but not '%s'\n"
@@ -5991,21 +6189,26 @@ msgstr ""
 "'%s' yolu indekste; ancak '%s' değil\n"
 "İpucu: Şunu mu demek istediniz: '%d:%s', nam-ı diğer ':%d:./%s'?"
 
-#: object-name.c:1763
+#: object-name.c:1861
 #, c-format
 msgid "path '%s' exists on disk, but not in the index"
 msgstr "'%s' yolu diskte mevcut; ancak indekste değil"
 
-#: object-name.c:1765
+#: object-name.c:1863
 #, c-format
 msgid "path '%s' does not exist (neither on disk nor in the index)"
 msgstr "'%s' diye bir yol yok (ne diskte ne de indekste)"
 
-#: object-name.c:1778
+#: object-name.c:1876
 msgid "relative path syntax can't be used outside working tree"
 msgstr "göreceli yol sözdizimi çalışma ağacı dışında kullanılamaz"
 
-#: object-name.c:1916
+#: object-name.c:1901
+#, c-format
+msgid "<object>:<path> required, only <object> '%s' given"
+msgstr "<nesne>:<yol> gerekiyor, yalnızca <nesne> '%s' verildi"
+
+#: object-name.c:2014
 #, c-format
 msgid "invalid object name '%.*s'."
 msgstr "geçersiz nesne adı: '%.*s'"
@@ -6030,7 +6233,7 @@ msgstr "%s nesnesi %d bilinmeyen tür numarasına iye"
 msgid "unable to parse object: %s"
 msgstr "nesne ayrıştırılamıyor: %s"
 
-#: object.c:283 object.c:295
+#: object.c:283 object.c:294
 #, c-format
 msgid "hash mismatch %s"
 msgstr "sağlama uyuşmazlığı %s"
@@ -6039,21 +6242,21 @@ msgstr "sağlama uyuşmazlığı %s"
 msgid "multi-pack bitmap is missing required reverse index"
 msgstr "çoklu paket biteşlemi gereken ters indeksi içermiyor"
 
-#: pack-bitmap.c:429
+#: pack-bitmap.c:433
 msgid "load_reverse_index: could not open pack"
 msgstr "load_reverse_index: paket açılamadı"
 
-#: pack-bitmap.c:1069 pack-bitmap.c:1075 builtin/pack-objects.c:2424
+#: pack-bitmap.c:1072 pack-bitmap.c:1078 builtin/pack-objects.c:2432
 #, c-format
 msgid "unable to get size of %s"
 msgstr "%s boyutu alınamıyor"
 
-#: pack-bitmap.c:1935
+#: pack-bitmap.c:1937
 #, c-format
 msgid "could not find %s in pack %s at offset %<PRIuMAX>"
 msgstr "%s, %s paketi %<PRIuMAX> ofsetinde bulunamadı"
 
-#: pack-bitmap.c:1971 builtin/rev-list.c:92
+#: pack-bitmap.c:1973 builtin/rev-list.c:91
 #, c-format
 msgid "unable to get disk usage of %s"
 msgstr "%s ögesinin disk kullanımı alınamıyor"
@@ -6097,7 +6300,7 @@ msgstr "dosya bilgileri alınamadı: %s"
 msgid "failed to make %s readable"
 msgstr "%s, yazılabilir yapılamadı"
 
-#: pack-write.c:520
+#: pack-write.c:521
 #, c-format
 msgid "could not write '%s' promisor file"
 msgstr "vaat dosyası '%s' yazılamadı"
@@ -6410,15 +6613,15 @@ msgstr "--pretty biçimi ayrıştırılamıyor"
 
 #: promisor-remote.c:31
 msgid "promisor-remote: unable to fork off fetch subprocess"
-msgstr "promisor-remote: getirme altişlemi çatallanamıyor"
+msgstr "promisor-remote: getirme alt süreci çatallanamıyor"
 
 #: promisor-remote.c:38 promisor-remote.c:40
 msgid "promisor-remote: could not write to fetch subprocess"
-msgstr "promisor-remote: getirme altişlemine yazılamıyor"
+msgstr "promisor-remote: getirme alt sürecine yazılamıyor"
 
 #: promisor-remote.c:44
 msgid "promisor-remote: could not close stdin to fetch subprocess"
-msgstr "promisor-remote: altişlemi getirmek için stdin kapatılamıyor"
+msgstr "promisor-remote: alt sürecine getirmek için stdin kapatılamıyor"
 
 #: promisor-remote.c:54
 #, c-format
@@ -6433,20 +6636,20 @@ msgstr "object-info: argümanlardan sonra floş bekleniyordu"
 msgid "Removing duplicate objects"
 msgstr "Yinelenmiş nesneler kaldırılıyor"
 
-#: range-diff.c:67
+#: range-diff.c:68
 msgid "could not start `log`"
 msgstr "'log' başlatılamadı"
 
-#: range-diff.c:69
+#: range-diff.c:70
 msgid "could not read `log` output"
 msgstr "'log' çıktısı okunamadı"
 
-#: range-diff.c:97 sequencer.c:5602
+#: range-diff.c:98 sequencer.c:5575
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "'%s' işlemesi ayrıştırılamadı"
 
-#: range-diff.c:111
+#: range-diff.c:109
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
@@ -6454,65 +6657,65 @@ msgid ""
 msgstr ""
 "'log' çıktısının ilk satırı ayrıştırılamadı: 'commit ' ile başlamıyor: '%s'"
 
-#: range-diff.c:137
+#: range-diff.c:132
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "git üstbilgisi '%.*s' ayrıştırılamadı"
 
-#: range-diff.c:304
+#: range-diff.c:300
 msgid "failed to generate diff"
 msgstr "diff oluşturulamadı"
 
-#: range-diff.c:562 range-diff.c:564
+#: range-diff.c:558 range-diff.c:560
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "'%s' günlüğü ayrıştırılamadı"
 
-#: read-cache.c:723
+#: read-cache.c:737
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr "dosya arması '%s' eklenmeyecek ('%s' indekste halihazırda var)"
 
-#: read-cache.c:739
+#: read-cache.c:753
 msgid "cannot create an empty blob in the object database"
 msgstr "nesne veritabanında boş ikili bir nesne oluşturulamıyor"
 
-#: read-cache.c:761
+#: read-cache.c:775
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr ""
 "%s: yalnızca sıradan dosyalar, sembolik bağlar ve git dizinleri eklenebilir"
 
-#: read-cache.c:766 builtin/submodule--helper.c:3242
+#: read-cache.c:780 builtin/submodule--helper.c:3359
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr "'%s' çıkışı yapılmış bir işlemeye iye değil"
 
-#: read-cache.c:818
+#: read-cache.c:832
 #, c-format
 msgid "unable to index file '%s'"
 msgstr "'%s' dosyası indekslenemiyor"
 
-#: read-cache.c:837
+#: read-cache.c:851
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr "'%s' indekse eklenemiyor"
 
-#: read-cache.c:848
+#: read-cache.c:862
 #, c-format
 msgid "unable to stat '%s'"
 msgstr "'%s' dosyasının bilgileri alınamıyor"
 
-#: read-cache.c:1386
+#: read-cache.c:1404
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr "'%s' hem bir dosya hem de bir dizin olarak görünüyor"
 
-#: read-cache.c:1601
+#: read-cache.c:1619
 msgid "Refresh index"
 msgstr "İndeks yenileniyor"
 
-#: read-cache.c:1733
+#: read-cache.c:1751
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -6521,7 +6724,7 @@ msgstr ""
 "index.version ayarlanmış; ancak değer geçersiz.\n"
 "%i sürümü kullanılıyor"
 
-#: read-cache.c:1743
+#: read-cache.c:1761
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -6530,143 +6733,147 @@ msgstr ""
 "GIT_INDEX_VERSION ayarlanmış; ancak değer geçersiz.\n"
 "%i sürümü kullanılıyor"
 
-#: read-cache.c:1799
+#: read-cache.c:1817
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "hatalı imza 0x%08x"
 
-#: read-cache.c:1802
+#: read-cache.c:1820
 #, c-format
 msgid "bad index version %d"
 msgstr "hatalı indeks sürümü %d"
 
-#: read-cache.c:1811
+#: read-cache.c:1829
 msgid "bad index file sha1 signature"
 msgstr "hatalı indeks dosyası sha1 imzası"
 
-#: read-cache.c:1845
+#: read-cache.c:1863
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "indeks bizim anlamadığımız %.4s imzası kullanıyor"
 
-#: read-cache.c:1847
+#: read-cache.c:1865
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "%.4s uzantısı yok sayılıyor"
 
-#: read-cache.c:1884
+#: read-cache.c:1902
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "bilinmeyen indeks girdisi biçimi 0x%08x"
 
-#: read-cache.c:1900
+#: read-cache.c:1918
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "indekste hatalı oluşturulmuş ad alanı, '%s' yolu yakınında"
 
-#: read-cache.c:1957
+#: read-cache.c:1975
 msgid "unordered stage entries in index"
 msgstr "indekste sırasız hazırlama alanı girdileri"
 
-#: read-cache.c:1960
+#: read-cache.c:1978
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "birleştirilmiş dosya '%s' için çoklu hazırlama alanı girdileri"
 
-#: read-cache.c:1963
+#: read-cache.c:1981
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "'%s' için sırasız hazırlama alanı girdileri"
 
-#: read-cache.c:2078 read-cache.c:2384 rerere.c:549 rerere.c:583 rerere.c:1095
-#: submodule.c:1662 builtin/add.c:600 builtin/check-ignore.c:183
-#: builtin/checkout.c:527 builtin/checkout.c:719 builtin/clean.c:1013
-#: builtin/commit.c:378 builtin/diff-tree.c:122 builtin/grep.c:519
-#: builtin/mv.c:148 builtin/reset.c:499 builtin/rm.c:293
-#: builtin/submodule--helper.c:327 builtin/submodule--helper.c:3202
+#: read-cache.c:2096 read-cache.c:2402 rerere.c:549 rerere.c:583 rerere.c:1096
+#: submodule.c:1831 builtin/add.c:586 builtin/check-ignore.c:183
+#: builtin/checkout.c:532 builtin/checkout.c:724 builtin/clean.c:1016
+#: builtin/commit.c:379 builtin/diff-tree.c:122 builtin/grep.c:521
+#: builtin/mv.c:148 builtin/reset.c:506 builtin/rm.c:293
+#: builtin/submodule--helper.c:335 builtin/submodule--helper.c:3319
 msgid "index file corrupt"
 msgstr "indeks dosyası hasar görmüş"
 
-#: read-cache.c:2222
+#: read-cache.c:2240
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "load_cache_entries iş parçacığı oluşturulamıyor: %s"
 
-#: read-cache.c:2235
+#: read-cache.c:2253
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "load_cache_entries iş parçacığı ucu birleştirilemiyor: %s"
 
-#: read-cache.c:2268
+#: read-cache.c:2286
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: indeks dosyası açılamadı"
 
-#: read-cache.c:2272
+#: read-cache.c:2290
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s: açık indeksin bilgileri alınamıyor"
 
-#: read-cache.c:2276
+#: read-cache.c:2294
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s: indeks dosyası beklenenden daha küçük"
 
-#: read-cache.c:2280
+#: read-cache.c:2298
 #, c-format
 msgid "%s: unable to map index file%s"
 msgstr "%s: indeks dosyası eşlemlenemiyor%s"
 
-#: read-cache.c:2323
+#: read-cache.c:2341
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "load_index_extensions iş parçacığı oluşturulamıyor: %s"
 
-#: read-cache.c:2350
+#: read-cache.c:2368
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "load_index_extensions iş parçacığı ucu birleştirilemiyor: %s"
 
-#: read-cache.c:2396
+#: read-cache.c:2414
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "paylaşılan indeks '%s' tazelenemedi"
 
-#: read-cache.c:2455
+#: read-cache.c:2473
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "bozuk indeks, %s bekleniyordu (%s içinde), %s alındı"
 
-#: read-cache.c:3086 strbuf.c:1191 wrapper.c:641 builtin/merge.c:1150
+#: read-cache.c:3032
+msgid "cannot write split index for a sparse index"
+msgstr "bir aralıklı indeks için bölünmüş indeks yazılamıyor"
+
+#: read-cache.c:3114 strbuf.c:1192 wrapper.c:717 builtin/merge.c:1156
 #, c-format
 msgid "could not close '%s'"
 msgstr "'%s' kapatılamadı"
 
-#: read-cache.c:3129
+#: read-cache.c:3157
 msgid "failed to convert to a sparse-index"
 msgstr "bir sparse-index'e dönüştürülemedi"
 
-#: read-cache.c:3200
+#: read-cache.c:3228
 #, c-format
 msgid "could not stat '%s'"
 msgstr "'%s' bilgileri alınamadı"
 
-#: read-cache.c:3213
+#: read-cache.c:3241
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "git dizini açılamıyor: %s"
 
-#: read-cache.c:3225
+#: read-cache.c:3253
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "bağlantı kesilemiyor: %s"
 
-#: read-cache.c:3254
+#: read-cache.c:3282
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "'%s' üzerindeki izin bitleri onarılamıyor"
 
-#: read-cache.c:3411
+#: read-cache.c:3439
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s: #0 numaralı hazırlama alanına bırakılamıyor"
@@ -6785,9 +6992,9 @@ msgstr ""
 "Ancak tümünü kaldırırsanız yeniden temellendirme iptal edilecektir.\n"
 "\n"
 
-#: rebase-interactive.c:113 rerere.c:469 rerere.c:676 sequencer.c:3883
-#: sequencer.c:3909 sequencer.c:5708 builtin/fsck.c:328 builtin/gc.c:1791
-#: builtin/rebase.c:190
+#: rebase-interactive.c:113 rerere.c:469 rerere.c:677 sequencer.c:3879
+#: sequencer.c:3905 sequencer.c:5681 builtin/fsck.c:328 builtin/gc.c:1791
+#: builtin/rebase.c:191
 #, c-format
 msgid "could not write '%s'"
 msgstr "'%s' yazılamadı"
@@ -6828,7 +7035,7 @@ msgstr ""
 msgid "%s: 'preserve' superseded by 'merges'"
 msgstr "%s: 'preserve'in yerini 'merges' aldı"
 
-#: ref-filter.c:42 wt-status.c:2048
+#: ref-filter.c:42 wt-status.c:2057
 msgid "gone"
 msgstr "gitti"
 
@@ -6995,81 +7202,91 @@ msgstr "bu komut atom %%(%.*s) reddediyor"
 msgid "--format=%.*s cannot be used with --python, --shell, --tcl"
 msgstr "--format=%.*s, --python, --shell ve --tcl ile kullanılamaz"
 
-#: ref-filter.c:1706
+#: ref-filter.c:1707
 #, c-format
 msgid "(no branch, rebasing %s)"
 msgstr "(dal yok, %s yeniden temellendiriliyor)"
 
-#: ref-filter.c:1709
+#: ref-filter.c:1710
 #, c-format
 msgid "(no branch, rebasing detached HEAD %s)"
 msgstr "(dal yok, ayrık HEAD %s yeniden temellendiriliyor)"
 
-#: ref-filter.c:1712
+#: ref-filter.c:1713
 #, c-format
 msgid "(no branch, bisect started on %s)"
 msgstr "(dal yok, ikili arama %s üzerinde başladı)"
 
-#: ref-filter.c:1716
+#: ref-filter.c:1717
 #, c-format
 msgid "(HEAD detached at %s)"
 msgstr "(HEAD, %s konumunda ayrıldı)"
 
-#: ref-filter.c:1719
+#: ref-filter.c:1720
 #, c-format
 msgid "(HEAD detached from %s)"
 msgstr "(HEAD, %s ögesinden ayrıldı)"
 
-#: ref-filter.c:1722
+#: ref-filter.c:1723
 msgid "(no branch)"
 msgstr "(dal yok)"
 
-#: ref-filter.c:1754 ref-filter.c:1972
+#: ref-filter.c:1755 ref-filter.c:1973
 #, c-format
 msgid "missing object %s for %s"
 msgstr "eksik nesne %s (%s için)"
 
-#: ref-filter.c:1764
+#: ref-filter.c:1765
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer %s üzerinde başarısız oldu (%s için)"
 
-#: ref-filter.c:2155
+#: ref-filter.c:2156
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "'%s' konumunda hatalı oluşturulmuş nesne"
 
-#: ref-filter.c:2245
+#: ref-filter.c:2246
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "bozuk ada iye %s başvurusu yok sayılıyor"
 
-#: ref-filter.c:2250 refs.c:676
+#: ref-filter.c:2251 refs.c:672
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "bozuk başvuru %s yok sayılıyor"
 
-#: ref-filter.c:2629
+#: ref-filter.c:2630
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "biçim: %%(end) ögeciği eksik"
 
-#: ref-filter.c:2740
+#: ref-filter.c:2741
 #, c-format
 msgid "malformed object name %s"
 msgstr "hatalı oluşturulmuş nesne adı %s"
 
-#: ref-filter.c:2745
+#: ref-filter.c:2746
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "'%s' bir işlemeye işaret etmeli"
 
-#: refs.c:261
+#: reflog.c:407
+#, c-format
+msgid "not a reflog: %s"
+msgstr "bir başvuru günlüğü değil: %s"
+
+#: reflog.c:410
+#, c-format
+msgid "no reflog for '%s'"
+msgstr "'%s' için başvuru günlüğü yok"
+
+#: refs.c:262
 #, c-format
 msgid "%s does not point to a valid object!"
 msgstr "%s geçerli bir nesneye işaret etmiyor!"
 
-#: refs.c:563
+#: refs.c:561
 #, c-format
 msgid ""
 "Using '%s' as the name for the initial branch. This default branch name\n"
@@ -7089,87 +7306,88 @@ msgstr ""
 "\n"
 "\tgit config --global init.defaultBranch <ad>\n"
 "\n"
-"'master' yerine kullanılan diğer yaygın dal adları 'main', 'trunk' ve/veya\n"
-"'development'tır. Yeni oluşturulan dal şu komutla yeniden adlandırılabilir:\n"
+"'master' yerine kullanılan diğer yaygın dal adları 'main', 'trunk'\n"
+"ve/veya 'development'tır. Yeni oluşturulan dal şu komutla yeniden\n"
+"adlandırılabilir:\n"
 "\n"
 "\tgit branch -m <ad>\n"
 
-#: refs.c:585
+#: refs.c:583
 #, c-format
 msgid "could not retrieve `%s`"
 msgstr "'%s' alınamadı"
 
-#: refs.c:595
+#: refs.c:593
 #, c-format
 msgid "invalid branch name: %s = %s"
 msgstr "geçersiz dal adı: %s = %s"
 
-#: refs.c:674
+#: refs.c:670
 #, c-format
 msgid "ignoring dangling symref %s"
 msgstr "sarkan sembolik başvuru %s yok sayılıyor"
 
-#: refs.c:925
+#: refs.c:919
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "%s başvurusu için olan günlükte %s sonrasında boşluk var"
 
-#: refs.c:932
+#: refs.c:926
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr ""
 "%s başvurusu için olan günlük %s konumunda beklenmedik bir biçimde sonlandı"
 
-#: refs.c:997
+#: refs.c:991
 #, c-format
 msgid "log for %s is empty"
 msgstr "%s için olan günlük boş"
 
-#: refs.c:1090
+#: refs.c:1086
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "hatalı ada iye '%s' başvurusunu güncelleme reddediliyor"
 
-#: refs.c:1168
+#: refs.c:1164
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "'%s' başvurusu için update_ref başarısız oldu: %s"
 
-#: refs.c:2067
+#: refs.c:2059
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "'%s' başvurusu için birden çok güncellemeye izin verilmiyor"
 
-#: refs.c:2150
+#: refs.c:2145
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "başvuru güncellemeleri karantina ortamı içinde yasak"
 
-#: refs.c:2161
+#: refs.c:2156
 msgid "ref updates aborted by hook"
 msgstr "başvuru güncellemeleri kanca tarafından iptal edildi"
 
-#: refs.c:2269 refs.c:2299
+#: refs.c:2264 refs.c:2294
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "'%s' mevcut; '%s' oluşturulamıyor"
 
-#: refs.c:2275 refs.c:2310
+#: refs.c:2270 refs.c:2305
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "'%s' ve '%s' aynı anda işlenemiyor"
 
-#: refs/files-backend.c:1267
+#: refs/files-backend.c:1295
 #, c-format
 msgid "could not remove reference %s"
 msgstr "%s başvurusu kaldırılamadı"
 
-#: refs/files-backend.c:1281 refs/packed-backend.c:1549
-#: refs/packed-backend.c:1559
+#: refs/files-backend.c:1310 refs/packed-backend.c:1565
+#: refs/packed-backend.c:1575
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr "%s başvurusu silinemedi: %s"
 
-#: refs/files-backend.c:1284 refs/packed-backend.c:1562
+#: refs/files-backend.c:1313 refs/packed-backend.c:1578
 #, c-format
 msgid "could not delete references: %s"
 msgstr "başvurular silinemedi: %s"
@@ -7192,37 +7410,37 @@ msgstr "birden fazla receivepack verildi, birincisi kullanılıyor"
 msgid "more than one uploadpack given, using the first"
 msgstr "birden fazla uploadpack verildi, birincisi kullanılıyor"
 
-#: remote.c:699
+#: remote.c:698
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr "Hem %s hem %s şuraya getirilemiyor: %s"
 
-#: remote.c:703
+#: remote.c:702
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr "%s genelde %s ögesini izler, %s değil"
 
-#: remote.c:707
+#: remote.c:706
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr "%s hem %s hem %s ögelerini izler"
 
-#: remote.c:775
+#: remote.c:774
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr "dizginin '%s' anahtarında '*' yoktu"
 
-#: remote.c:785
+#: remote.c:784
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr "dizginin '%s' değerinde '*' yok"
 
-#: remote.c:1192
+#: remote.c:1191
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "kaynak başvuru belirteci %s başka hiçbir şeyle eşleşmiyor"
 
-#: remote.c:1197
+#: remote.c:1196
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr "kaynak başvuru belirteci %s birden fazlası ile eşleşiyor"
@@ -7231,7 +7449,7 @@ msgstr "kaynak başvuru belirteci %s birden fazlası ile eşleşiyor"
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1212
+#: remote.c:1211
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -7255,7 +7473,7 @@ msgstr ""
 "Hiçbiri işe yaramadı, biz de bıraktık. Başvuruyu tam olarak "
 "nitelendirmelisiniz."
 
-#: remote.c:1232
+#: remote.c:1231
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -7266,7 +7484,7 @@ msgstr ""
 "'%s:refs/heads/%s' konumuna iterek yeni bir dal mı\n"
 "oluşturmak istediniz?"
 
-#: remote.c:1237
+#: remote.c:1236
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -7277,7 +7495,7 @@ msgstr ""
 "'%s:refs/tags/%s' konumuna iterek yeni bir etiket mi\n"
 "oluşturmak istediniz?"
 
-#: remote.c:1242
+#: remote.c:1241
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -7288,7 +7506,7 @@ msgstr ""
 "'%s:refs/tags/%s' konumuna iterek yeni bir ağaç mı\n"
 "etiketlemek istediniz?"
 
-#: remote.c:1247
+#: remote.c:1246
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -7299,114 +7517,114 @@ msgstr ""
 "'%s:refs/tags/%s' konumuna iterek yeni ikili bir nesne mi\n"
 "etiketlemek istediniz?"
 
-#: remote.c:1283
+#: remote.c:1282
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "%s dala çözülemiyor"
 
-#: remote.c:1294
+#: remote.c:1293
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "'%s' silinemiyor: uzak başvuru yok"
 
-#: remote.c:1306
+#: remote.c:1305
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "birden çok hedef başvuru belirteci %s eşleşmesi"
 
-#: remote.c:1313
+#: remote.c:1312
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "hedef başvurusu %s birden çok kaynaktan alıyor"
 
-#: remote.c:1834 remote.c:1941
+#: remote.c:1833 remote.c:1940
 msgid "HEAD does not point to a branch"
 msgstr "HEAD bir dala işaret etmiyor"
 
-#: remote.c:1843
+#: remote.c:1842
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "böyle bir dal yok: '%s'"
 
-#: remote.c:1846
+#: remote.c:1845
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "'%s' dalı için üstkaynak yapılandırılmamış"
 
-#: remote.c:1852
+#: remote.c:1851
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "üstkaynak dalı '%s' bir uzak izleme dalı olarak depolanmıyor"
 
-#: remote.c:1867
+#: remote.c:1866
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr "'%s' itme hedefinin ('%s' uzak konumunda) yerel izleme dalı yok"
 
-#: remote.c:1882
+#: remote.c:1881
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "'%s' dalının itme için uzak konumu yok"
 
-#: remote.c:1892
+#: remote.c:1891
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "'%s' için olan başvuru belirteçleri '%s' içermiyor"
 
-#: remote.c:1905
+#: remote.c:1904
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "itilecek bir hedef yok (push.default: 'nothing')"
 
-#: remote.c:1927
+#: remote.c:1926
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "tek bir konuma 'simple' itme çözülemiyor"
 
-#: remote.c:2060
+#: remote.c:2059
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "%s uzak başvurusu bulunamadı"
 
-#: remote.c:2073
+#: remote.c:2072
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* Eğlenceli başvuru '%s' yerel olarak yok sayılıyor"
 
-#: remote.c:2236
+#: remote.c:2235
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "Dalınız '%s' temelli; ancak üstkaynak kaybolmuş.\n"
 
-#: remote.c:2240
+#: remote.c:2239
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (düzeltmek için \"git branch --unset-upstream\" kullan)\n"
 
-#: remote.c:2243
+#: remote.c:2242
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Dalınız '%s' ile güncel.\n"
 
-#: remote.c:2247
+#: remote.c:2246
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Sizin dalınız ve '%s' başka işlemelere başvuruyor.\n"
 
-#: remote.c:2250
+#: remote.c:2249
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (ayrıntılar için \"%s\" kullanın)\n"
 
-#: remote.c:2254
+#: remote.c:2253
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "Dalınız '%s' dalından %d işleme ileride.\n"
 msgstr[1] "Dalınız '%s' dalından %d işleme ileride.\n"
 
-#: remote.c:2260
+#: remote.c:2259
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (yerel işlemelerinizi yayımlamak için \"git push\" kullanın)\n"
 
-#: remote.c:2263
+#: remote.c:2262
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -7414,11 +7632,11 @@ msgid_plural ""
 msgstr[0] "Dalınız '%s' dalından %d işleme geride ve ileri sarılabilir.\n"
 msgstr[1] "Dalınız '%s' dalından %d işleme geride ve ileri sarılabilir.\n"
 
-#: remote.c:2271
+#: remote.c:2270
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (yerel dalınızı güncellemek için \"git pull\" kullanın)\n"
 
-#: remote.c:2274
+#: remote.c:2273
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -7433,11 +7651,11 @@ msgstr[1] ""
 "Sizin dalınız ve '%s' birbirinden uzaklaşmış ve sırasıyla\n"
 "her birinde %d ve %d işleme var.\n"
 
-#: remote.c:2284
+#: remote.c:2283
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (uzak dalı kendi dalınıza birleştirmek için \"git pull\" kullanın)\n"
 
-#: remote.c:2476
+#: remote.c:2475
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "beklenen nesne adı '%s' ayrıştırılamıyor"
@@ -7475,104 +7693,108 @@ msgstr "'%s' yazılırken hatalar vardı (%s)"
 msgid "failed to flush '%s'"
 msgstr "'%s' floş yapılamadı"
 
-#: rerere.c:487 rerere.c:1023
+#: rerere.c:487 rerere.c:1024
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
 msgstr "'%s' içindeki çakışan parçalar ayrıştırılamadı"
 
-#: rerere.c:668
+#: rerere.c:669
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr "'%s' üzerinde utime() başarısız"
 
-#: rerere.c:678
+#: rerere.c:679
 #, c-format
 msgid "writing '%s' failed"
 msgstr "'%s' yazılamadı"
 
-#: rerere.c:698
+#: rerere.c:699
 #, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr "'%s' bir önceki çözüm kullanılarak hazırlama alanına alındı."
 
-#: rerere.c:737
+#: rerere.c:738
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr "'%s' için çözüm kaydedildi."
 
-#: rerere.c:772
+#: rerere.c:773
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr "'%s' bir önceki çözüm kullanılarak çözüldü."
 
-#: rerere.c:787
+#: rerere.c:788
 #, c-format
 msgid "cannot unlink stray '%s'"
 msgstr "'%s' başıboşunun bağlantısı kesilemiyor"
 
-#: rerere.c:791
+#: rerere.c:792
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr "'%s' için öngörüntü kaydedildi"
 
-#: rerere.c:865 submodule.c:2121 builtin/log.c:2017
-#: builtin/submodule--helper.c:1777 builtin/submodule--helper.c:1820
+#: rerere.c:866 submodule.c:2290 builtin/log.c:2042
+#: builtin/submodule--helper.c:1786 builtin/submodule--helper.c:1833
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "'%s' dizini oluşturulamadı"
 
-#: rerere.c:1041
+#: rerere.c:1042
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr "'%s' içindeki çakışan durum güncellenemedi"
 
-#: rerere.c:1052 rerere.c:1059
+#: rerere.c:1053 rerere.c:1060
 #, c-format
 msgid "no remembered resolution for '%s'"
 msgstr "'%s' için hatırlanan çözüm yok"
 
-#: rerere.c:1061
+#: rerere.c:1062
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr "'%s' bağlantısı kesilemiyor"
 
-#: rerere.c:1071
+#: rerere.c:1072
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr "'%s' için öngörüntü güncellendi"
 
-#: rerere.c:1080
+#: rerere.c:1081
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr "'%s' için çözüm unutuldu\n"
 
-#: rerere.c:1191
+#: rerere.c:1192
 msgid "unable to open rr-cache directory"
 msgstr "rr-cache dizini açılamıyor"
 
-#: reset.c:42
+#: reset.c:112
 msgid "could not determine HEAD revision"
 msgstr "HEAD revizyonu saptanamadı"
 
-#: reset.c:70 reset.c:76 sequencer.c:3700
+#: reset.c:141 reset.c:147 sequencer.c:3696
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "%s ögesinin ağacı bulunamadı"
 
-#: revision.c:2347
+#: revision.c:2358
 msgid "--unpacked=<packfile> no longer supported"
 msgstr "--unpacked=<paketdosyası> artık desteklenmiyor"
 
-#: revision.c:2686
+#: revision.c:2712
 msgid "your current branch appears to be broken"
 msgstr "geçerli dalınız bozuk gibi görünüyor"
 
-#: revision.c:2689
+#: revision.c:2715
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "geçerli dalınız '%s' içinde henüz bir işleme yok"
 
-#: revision.c:2891
+#: revision.c:2901
+msgid "object filtering requires --objects"
+msgstr "nesne süzme --objects gerektiriyor"
+
+#: revision.c:2918
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L, -p ve -s dışında başka diff biçimlerini henüz desteklemiyor"
 
@@ -7601,7 +7823,7 @@ msgstr "itme sertifikası imzalanamadı"
 
 #: send-pack.c:435
 msgid "send-pack: unable to fork off fetch subprocess"
-msgstr "send-pack: getirme altişlemi çatallanamıyor"
+msgstr "send-pack: getirme alt süreci çatallanamıyor"
 
 #: send-pack.c:457
 msgid "push negotiation failed; proceeding anyway with push"
@@ -7641,7 +7863,7 @@ msgstr "geçersiz işleme iletisi temizleme kipi '%s'"
 msgid "could not delete '%s'"
 msgstr "'%s' silinemedi"
 
-#: sequencer.c:345 sequencer.c:4751 builtin/rebase.c:563 builtin/rebase.c:1297
+#: sequencer.c:345 sequencer.c:4724 builtin/rebase.c:564 builtin/rebase.c:1326
 #: builtin/rm.c:409
 #, c-format
 msgid "could not remove '%s'"
@@ -7704,13 +7926,13 @@ msgstr ""
 "atlayabilirsiniz. İptal edip \"git revert\" öncesine\n"
 "geri dönmek için \"git revert --abort\" çalıştırın."
 
-#: sequencer.c:448 sequencer.c:3292
+#: sequencer.c:448 sequencer.c:3288
 #, c-format
 msgid "could not lock '%s'"
 msgstr "'%s' kilitlenemedi"
 
-#: sequencer.c:450 sequencer.c:3091 sequencer.c:3296 sequencer.c:3310
-#: sequencer.c:3561 sequencer.c:5618 strbuf.c:1188 wrapper.c:639
+#: sequencer.c:450 sequencer.c:3087 sequencer.c:3292 sequencer.c:3306
+#: sequencer.c:3557 sequencer.c:5591 strbuf.c:1189 wrapper.c:715
 #, c-format
 msgid "could not write to '%s'"
 msgstr "şuraya yazılamadı: '%s'"
@@ -7720,14 +7942,14 @@ msgstr "şuraya yazılamadı: '%s'"
 msgid "could not write eol to '%s'"
 msgstr "satır sonu şuraya yazılamadı: '%s'"
 
-#: sequencer.c:460 sequencer.c:3096 sequencer.c:3298 sequencer.c:3312
-#: sequencer.c:3569
+#: sequencer.c:460 sequencer.c:3092 sequencer.c:3294 sequencer.c:3308
+#: sequencer.c:3565
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "'%s' tamamlanamadı"
 
-#: sequencer.c:473 sequencer.c:1934 sequencer.c:3116 sequencer.c:3551
-#: sequencer.c:3679 builtin/am.c:289 builtin/commit.c:834 builtin/merge.c:1148
+#: sequencer.c:473 sequencer.c:1930 sequencer.c:3112 sequencer.c:3547
+#: sequencer.c:3675 builtin/am.c:290 builtin/commit.c:837 builtin/merge.c:1154
 #, c-format
 msgid "could not read '%s'"
 msgstr "'%s' okunamadı"
@@ -7746,7 +7968,7 @@ msgstr "İlerlemek için değişikliklerinizi işleyin veya zulalayın."
 msgid "%s: fast-forward"
 msgstr "%s: ileri sar"
 
-#: sequencer.c:574 builtin/tag.c:614
+#: sequencer.c:574 builtin/tag.c:615
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Geçersiz temizlik kipi %s"
@@ -7777,8 +7999,8 @@ msgstr "'%.*s' içinde bir anahtar yok"
 msgid "unable to dequote value of '%s'"
 msgstr "'%s' ögesinin tırnakları kaldırılamıyor"
 
-#: sequencer.c:841 wrapper.c:209 wrapper.c:379 builtin/am.c:756
-#: builtin/am.c:848 builtin/rebase.c:694
+#: sequencer.c:841 wrapper.c:219 wrapper.c:389 builtin/am.c:757
+#: builtin/am.c:849 builtin/rebase.c:699
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "'%s' okuma için açılamadı"
@@ -7896,349 +8118,344 @@ msgstr ""
 "\n"
 "\tgit commit --amend --reset-author\n"
 
-#: sequencer.c:1288
+#: sequencer.c:1287
 msgid "couldn't look up newly created commit"
 msgstr "yeni yapılan işleme aranamadı"
 
-#: sequencer.c:1290
+#: sequencer.c:1289
 msgid "could not parse newly created commit"
 msgstr "yeni yapılan işleme ayrıştırılamadı"
 
-#: sequencer.c:1339
+#: sequencer.c:1336
 msgid "unable to resolve HEAD after creating commit"
 msgstr "HEAD, işleme yapıldıktan sonra çözülemiyor"
 
-#: sequencer.c:1342
+#: sequencer.c:1338
 msgid "detached HEAD"
 msgstr "ayrık HEAD"
 
-#: sequencer.c:1346
+#: sequencer.c:1342
 msgid " (root-commit)"
 msgstr " (kök işleme)"
 
-#: sequencer.c:1367
+#: sequencer.c:1363
 msgid "could not parse HEAD"
 msgstr "HEAD ayrıştırılamadı"
 
-#: sequencer.c:1369
+#: sequencer.c:1365
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s bir işleme değil"
 
-#: sequencer.c:1373 sequencer.c:1451 builtin/commit.c:1708
+#: sequencer.c:1369 sequencer.c:1447 builtin/commit.c:1707
 msgid "could not parse HEAD commit"
 msgstr "HEAD işlemesi ayrıştırılamadı"
 
-#: sequencer.c:1429 sequencer.c:2314
+#: sequencer.c:1425 sequencer.c:2310
 msgid "unable to parse commit author"
 msgstr "işleme yazarı ayrıştırılamıyor"
 
-#: sequencer.c:1440 builtin/am.c:1643 builtin/merge.c:710
+#: sequencer.c:1436 builtin/am.c:1644 builtin/merge.c:710
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree bir ağaca yazamadı"
 
-#: sequencer.c:1473 sequencer.c:1593
+#: sequencer.c:1469 sequencer.c:1589
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "'%s' konumundan işleme iletisi okunamıyor"
 
-#: sequencer.c:1504 sequencer.c:1536
+#: sequencer.c:1500 sequencer.c:1532
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr "geçersiz yazar kimliği '%s'"
 
-#: sequencer.c:1510
+#: sequencer.c:1506
 msgid "corrupt author: missing date information"
 msgstr "hasar görmüş yazar: tarih bilgisi eksik"
 
-#: sequencer.c:1549 builtin/am.c:1670 builtin/commit.c:1822 builtin/merge.c:915
-#: builtin/merge.c:940 t/helper/test-fast-rebase.c:78
+#: sequencer.c:1545 builtin/am.c:1671 builtin/commit.c:1821 builtin/merge.c:921
+#: builtin/merge.c:946 t/helper/test-fast-rebase.c:78
 msgid "failed to write commit object"
 msgstr "işleme nesnesi yazılamadı"
 
-#: sequencer.c:1576 sequencer.c:4523 t/helper/test-fast-rebase.c:199
+#: sequencer.c:1572 sequencer.c:4496 t/helper/test-fast-rebase.c:199
 #: t/helper/test-fast-rebase.c:217
 #, c-format
 msgid "could not update %s"
 msgstr "%s güncellenemedi"
 
-#: sequencer.c:1625
+#: sequencer.c:1621
 #, c-format
 msgid "could not parse commit %s"
 msgstr "%s işlemesi ayrıştırılamadı"
 
-#: sequencer.c:1630
+#: sequencer.c:1626
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "üst işleme %s ayrıştırılamadı"
 
-#: sequencer.c:1713 sequencer.c:1994
+#: sequencer.c:1709 sequencer.c:1990
 #, c-format
 msgid "unknown command: %d"
 msgstr "bilinmeyen komut: %d"
 
-#: sequencer.c:1755
+#: sequencer.c:1751
 msgid "This is the 1st commit message:"
 msgstr "Birinci işleme iletisi bu:"
 
-#: sequencer.c:1756
+#: sequencer.c:1752
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "İşleme iletisi #%d bu:"
 
-#: sequencer.c:1757
+#: sequencer.c:1753
 msgid "The 1st commit message will be skipped:"
 msgstr "Birinci işlemenin iletisi atlanacak:"
 
-#: sequencer.c:1758
+#: sequencer.c:1754
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "İşleme iletisi #%d atlanacak:"
 
-#: sequencer.c:1759
+#: sequencer.c:1755
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "Bu %d işlemenin bir birleşimi."
 
-#: sequencer.c:1906 sequencer.c:1963
+#: sequencer.c:1902 sequencer.c:1959
 #, c-format
 msgid "cannot write '%s'"
 msgstr "'%s' yazılamıyor"
 
-#: sequencer.c:1953
+#: sequencer.c:1949
 msgid "need a HEAD to fixup"
 msgstr "düzeltmek için bir HEAD gerekiyor"
 
-#: sequencer.c:1955 sequencer.c:3596
+#: sequencer.c:1951 sequencer.c:3592
 msgid "could not read HEAD"
 msgstr "HEAD okunamadı"
 
-#: sequencer.c:1957
+#: sequencer.c:1953
 msgid "could not read HEAD's commit message"
 msgstr "HEAD'in işleme iletisi okunamadı"
 
-#: sequencer.c:1981
+#: sequencer.c:1977
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "%s işleme iletisi okunamadı"
 
-#: sequencer.c:2091
+#: sequencer.c:2087
 msgid "your index file is unmerged."
 msgstr "indeks dosyanız birleştirilmemiş"
 
-#: sequencer.c:2098
+#: sequencer.c:2094
 msgid "cannot fixup root commit"
 msgstr "kök işleme düzeltilemiyor"
 
-#: sequencer.c:2117
+#: sequencer.c:2113
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "%s işlemesi bir birleştirme; ancak bir -m seçeneği verilmedi."
 
-#: sequencer.c:2125 sequencer.c:2133
+#: sequencer.c:2121 sequencer.c:2129
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "%s işlemesinin %d diye bir üst ögesi yok"
 
-#: sequencer.c:2139
+#: sequencer.c:2135
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "%s işlemesinin iletisi alınamıyor"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:2158
+#: sequencer.c:2154
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: üst işleme %s ayrıştırılamıyor"
 
-#: sequencer.c:2224
+#: sequencer.c:2220
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "'%s', '%s' olarak yeniden adlandırılamadı"
 
-#: sequencer.c:2284
+#: sequencer.c:2280
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "%s geri alınamadı... %s"
 
-#: sequencer.c:2285
+#: sequencer.c:2281
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "%s uygulanamadı... %s"
 
-#: sequencer.c:2306
+#: sequencer.c:2302
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr "%s %s bırakılıyor -- yama içeriği halihazırda üstkaynakta\n"
 
-#: sequencer.c:2364
+#: sequencer.c:2360
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: indeks okunamadı"
 
-#: sequencer.c:2372
+#: sequencer.c:2368
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: indeks yenilenemedi"
 
-#: sequencer.c:2452
+#: sequencer.c:2448
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s argüman kabul etmiyor: '%s'"
 
-#: sequencer.c:2461
+#: sequencer.c:2457
 #, c-format
 msgid "missing arguments for %s"
 msgstr "%s için eksik argüman"
 
-#: sequencer.c:2504
+#: sequencer.c:2500
 #, c-format
 msgid "could not parse '%s'"
 msgstr "'%s' ayrıştırılamadı"
 
-#: sequencer.c:2565
+#: sequencer.c:2561
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "geçersiz satır %d: %.*s"
 
-#: sequencer.c:2576
+#: sequencer.c:2572
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "öncesinde bir işleme olmadan '%s' yapılamıyor"
 
-#: sequencer.c:2624 builtin/rebase.c:184
+#: sequencer.c:2620 builtin/rebase.c:185
 #, c-format
 msgid "could not read '%s'."
 msgstr "'%s' okunamadı."
 
-#: sequencer.c:2662
+#: sequencer.c:2658
 msgid "cancelling a cherry picking in progress"
 msgstr "sürmekte olan bir seç-al iptal ediliyor"
 
-#: sequencer.c:2671
+#: sequencer.c:2667
 msgid "cancelling a revert in progress"
 msgstr "sürmekte olan bir geri al iptal ediliyor"
 
-#: sequencer.c:2711
+#: sequencer.c:2707
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "lütfen bunu 'git rebase --edit-todo' kullanarak onarın."
 
-#: sequencer.c:2713
+#: sequencer.c:2709
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "kullanılabilir olmayan yönerge tablosu: '%s'"
 
-#: sequencer.c:2718
+#: sequencer.c:2714
 msgid "no commits parsed."
 msgstr "Hiçbir işleme ayrıştırılmadı."
 
-#: sequencer.c:2729
+#: sequencer.c:2725
 msgid "cannot cherry-pick during a revert."
 msgstr "bir geri al sırasında seç-al yapılamıyor"
 
-#: sequencer.c:2731
+#: sequencer.c:2727
 msgid "cannot revert during a cherry-pick."
 msgstr "bir seç-al sırasında geri al yapılamıyor"
 
-#: sequencer.c:2809
-#, c-format
-msgid "invalid value for %s: %s"
-msgstr "%s için geçersiz değer: %s"
-
-#: sequencer.c:2918
+#: sequencer.c:2914
 msgid "unusable squash-onto"
 msgstr "kullanılabilir olmayan squash-onto"
 
-#: sequencer.c:2938
+#: sequencer.c:2934
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "hatalı oluşturulmuş seçenekler tablosu: '%s'"
 
-#: sequencer.c:3033 sequencer.c:4902
+#: sequencer.c:3029 sequencer.c:4875
 msgid "empty commit set passed"
 msgstr "boş işleme seti aktarıldı"
 
-#: sequencer.c:3050
+#: sequencer.c:3046
 msgid "revert is already in progress"
 msgstr "geri al halihazırda sürüyor"
 
-#: sequencer.c:3052
+#: sequencer.c:3048
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "\"git revert (--continue | %s--abort | --quit)\" deneyin"
 
-#: sequencer.c:3055
+#: sequencer.c:3051
 msgid "cherry-pick is already in progress"
 msgstr "seç-al halihazırda sürüyor"
 
-#: sequencer.c:3057
+#: sequencer.c:3053
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "\"git cherry-pick (--continue | %s--abort | --quit)\" deneyin"
 
-#: sequencer.c:3071
+#: sequencer.c:3067
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "ardıştırıcı dizini '%s' oluşturulamadı"
 
-#: sequencer.c:3086
+#: sequencer.c:3082
 msgid "could not lock HEAD"
 msgstr "HEAD kilitlenemedi"
 
-#: sequencer.c:3146 sequencer.c:4612
+#: sequencer.c:3142 sequencer.c:4585
 msgid "no cherry-pick or revert in progress"
 msgstr "süren bir seç-al veya geri al yok"
 
-#: sequencer.c:3148 sequencer.c:3159
+#: sequencer.c:3144 sequencer.c:3155
 msgid "cannot resolve HEAD"
 msgstr "HEAD çözülemiyor"
 
-#: sequencer.c:3150 sequencer.c:3194
+#: sequencer.c:3146 sequencer.c:3190
 msgid "cannot abort from a branch yet to be born"
 msgstr "daha doğmamış bir daldan iptal edilemiyor"
 
-#: sequencer.c:3180 builtin/fetch.c:1004 builtin/fetch.c:1416
-#: builtin/grep.c:772
+#: sequencer.c:3176 builtin/fetch.c:1030 builtin/fetch.c:1457
+#: builtin/grep.c:774
 #, c-format
 msgid "cannot open '%s'"
 msgstr "'%s' açılamıyor"
 
-#: sequencer.c:3182
+#: sequencer.c:3178
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "'%s' okunamıyor: %s"
 
-#: sequencer.c:3183
+#: sequencer.c:3179
 msgid "unexpected end of file"
 msgstr "beklenmedik dosya sonu"
 
-#: sequencer.c:3189
+#: sequencer.c:3185
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "depolanmış seç-al öncesi HEAD dosyası '%s' hasar görmüş"
 
-#: sequencer.c:3200
+#: sequencer.c:3196
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr "HEAD'i taşımış görünüyorsunuz. Geri sarılmıyor, HEAD'inizi denetleyin!"
 
-#: sequencer.c:3241
+#: sequencer.c:3237
 msgid "no revert in progress"
 msgstr "süren bir geri al yok"
 
-#: sequencer.c:3250
+#: sequencer.c:3246
 msgid "no cherry-pick in progress"
 msgstr "süren bir seç-al yok"
 
-#: sequencer.c:3260
+#: sequencer.c:3256
 msgid "failed to skip the commit"
 msgstr "işleme atlanamadı"
 
-#: sequencer.c:3267
+#: sequencer.c:3263
 msgid "there is nothing to skip"
 msgstr "atlanacak bir şey yok"
 
-#: sequencer.c:3270
+#: sequencer.c:3266
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -8247,16 +8464,16 @@ msgstr ""
 "İşlemeyi yaptınız mı?\n"
 "\"git %s --continue\" deneyin.\""
 
-#: sequencer.c:3432 sequencer.c:4503
+#: sequencer.c:3428 sequencer.c:4476
 msgid "cannot read HEAD"
 msgstr "HEAD okunamıyor"
 
-#: sequencer.c:3449
+#: sequencer.c:3445
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "'%s', '%s' konumuna kopyalanamıyor"
 
-#: sequencer.c:3457
+#: sequencer.c:3453
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -8275,27 +8492,27 @@ msgstr ""
 "\n"
 "\tgit rebase --continue\n"
 
-#: sequencer.c:3467
+#: sequencer.c:3463
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "%s uygulanamıyor... %.*s"
 
-#: sequencer.c:3474
+#: sequencer.c:3470
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "%.*s birleştirilemedi"
 
-#: sequencer.c:3488 sequencer.c:3492 builtin/difftool.c:633
+#: sequencer.c:3484 sequencer.c:3488 builtin/difftool.c:633
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "'%s', '%s' konumuna kopyalanamadı"
 
-#: sequencer.c:3503
+#: sequencer.c:3499
 #, c-format
 msgid "Executing: %s\n"
 msgstr "Çalıştırılıyor: %s\n"
 
-#: sequencer.c:3514
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -8310,11 +8527,11 @@ msgstr ""
 "\tgit rebase --continue\n"
 "\n"
 
-#: sequencer.c:3520
+#: sequencer.c:3516
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "ve indekse ve/veya çalışma ağacına değişiklikler yapıldı\n"
 
-#: sequencer.c:3526
+#: sequencer.c:3522
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -8331,90 +8548,90 @@ msgstr ""
 "\tgit rebase --continue\n"
 "\n"
 
-#: sequencer.c:3586
+#: sequencer.c:3582
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "izin verilmeyen etiket adı: '%.*s'"
 
-#: sequencer.c:3659
+#: sequencer.c:3655
 msgid "writing fake root commit"
 msgstr "sahte kök işlemesi yazılıyor"
 
-#: sequencer.c:3664
+#: sequencer.c:3660
 msgid "writing squash-onto"
 msgstr "squash-onto yazılıyor"
 
-#: sequencer.c:3743
+#: sequencer.c:3739
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "'%s' çözülemedi"
 
-#: sequencer.c:3775
+#: sequencer.c:3771
 msgid "cannot merge without a current revision"
 msgstr "güncel bir revizyon olmadan birleştirilemiyor"
 
-#: sequencer.c:3797
+#: sequencer.c:3793
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "'%.*s' ayrıştırılamıyor"
 
-#: sequencer.c:3806
+#: sequencer.c:3802
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "birleştirilecek bir şey yok: '%.*s'"
 
-#: sequencer.c:3818
+#: sequencer.c:3814
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr "ahtapot birleştirmesi bir [yeni kök]ün üzerinde çalıştırılamaz"
 
-#: sequencer.c:3873
+#: sequencer.c:3869
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "'%s' işlemesinin işleme iletisi alınamadı"
 
-#: sequencer.c:4019
+#: sequencer.c:4013
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "şunu birleştirme girişiminde bulunulamadı bile: '%.*s'"
 
-#: sequencer.c:4035
+#: sequencer.c:4029
 msgid "merge: Unable to write new index file"
 msgstr "merge: Yeni indeks dosyası yazılamıyor"
 
-#: sequencer.c:4116
+#: sequencer.c:4110
 msgid "Cannot autostash"
 msgstr "Kendiliğinden zulalanamıyor"
 
-#: sequencer.c:4119
+#: sequencer.c:4113
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Beklenmedik zula yanıtı: '%s'"
 
-#: sequencer.c:4125
+#: sequencer.c:4119
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "'%s' için dizin oluşturulamadı"
 
-#: sequencer.c:4128
+#: sequencer.c:4122
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Zula kendiliğinden oluşturuldu: %s\n"
 
-#: sequencer.c:4132
+#: sequencer.c:4124
 msgid "could not reset --hard"
 msgstr "'reset --hard' yapılamadı"
 
-#: sequencer.c:4157
+#: sequencer.c:4148
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Kendiliğinden zulalama uygulandı.\n"
 
-#: sequencer.c:4169
+#: sequencer.c:4160
 #, c-format
 msgid "cannot store %s"
 msgstr "%s depolanamıyor"
 
-#: sequencer.c:4172
+#: sequencer.c:4163
 #, c-format
 msgid ""
 "%s\n"
@@ -8425,29 +8642,29 @@ msgstr ""
 "Değişiklikleriniz zulada güvende.\n"
 "İstediğiniz zaman \"git stash pop\" veya \"git stash drop\" yapabilirsiniz.\n"
 
-#: sequencer.c:4177
+#: sequencer.c:4168
 msgid "Applying autostash resulted in conflicts."
 msgstr "Kendiliğinden zulalama çakışmalara neden oldu."
 
-#: sequencer.c:4178
+#: sequencer.c:4169
 msgid "Autostash exists; creating a new stash entry."
 msgstr "Kendiliğinden zulalama mevcut; yeni bir zula girdisi oluşturuluyor."
 
-#: sequencer.c:4252
+#: sequencer.c:4225
 msgid "could not detach HEAD"
 msgstr "HEAD ayrılamadı"
 
-#: sequencer.c:4267
+#: sequencer.c:4240
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "HEAD'de duruldu\n"
 
-#: sequencer.c:4269
+#: sequencer.c:4242
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "%s konumunda duruldu\n"
 
-#: sequencer.c:4301
+#: sequencer.c:4274
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -8468,58 +8685,58 @@ msgstr ""
 "\tgit rebase --edit-todo\n"
 "\tgit rebase --continue\n"
 
-#: sequencer.c:4347
+#: sequencer.c:4320
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "Yeniden temellendiriliyor: (%d/%d)%s"
 
-#: sequencer.c:4393
+#: sequencer.c:4366
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "%s konumunda durdu... %.*s\n"
 
-#: sequencer.c:4463
+#: sequencer.c:4436
 #, c-format
 msgid "unknown command %d"
 msgstr "bilinmeyen komut %d"
 
-#: sequencer.c:4511
+#: sequencer.c:4484
 msgid "could not read orig-head"
 msgstr "orig-head okunamadı"
 
-#: sequencer.c:4516
+#: sequencer.c:4489
 msgid "could not read 'onto'"
 msgstr "'onto' okunamadı"
 
-#: sequencer.c:4530
+#: sequencer.c:4503
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "HEAD şu konuma güncellenemedi: %s"
 
-#: sequencer.c:4590
+#: sequencer.c:4563
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "%s başarıyla yeniden temellendirildi ve güncellendi.\n"
 
-#: sequencer.c:4642
+#: sequencer.c:4615
 msgid "cannot rebase: You have unstaged changes."
 msgstr "Yeniden temellendirilemiyor: Hazırlanmamış değişiklikleriniz var."
 
-#: sequencer.c:4651
+#: sequencer.c:4624
 msgid "cannot amend non-existing commit"
 msgstr "var olmayan işleme değiştirilemiyor"
 
-#: sequencer.c:4653
+#: sequencer.c:4626
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "geçersiz dosya: '%s'"
 
-#: sequencer.c:4655
+#: sequencer.c:4628
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "geçersiz içerik: '%s'"
 
-#: sequencer.c:4658
+#: sequencer.c:4631
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -8529,68 +8746,68 @@ msgstr ""
 "Çalışma ağacınızda işlenmemiş değişiklikleriniz var. Lütfen önce\n"
 "onları işleyin ve ardından 'git rebase --continue' yapın."
 
-#: sequencer.c:4694 sequencer.c:4733
+#: sequencer.c:4667 sequencer.c:4706
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "dosya yazılamadı: '%s'"
 
-#: sequencer.c:4749
+#: sequencer.c:4722
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "CHERRY_PICK_HEAD kaldırılamadı"
 
-#: sequencer.c:4759
+#: sequencer.c:4732
 msgid "could not commit staged changes."
 msgstr "Hazırlanmış değişiklikler işlenemedi."
 
-#: sequencer.c:4879
+#: sequencer.c:4852
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: Bir %s seçip alınamıyor"
 
-#: sequencer.c:4883
+#: sequencer.c:4856
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s hatalı revizyon"
 
-#: sequencer.c:4918
+#: sequencer.c:4891
 msgid "can't revert as initial commit"
 msgstr "ilk işleme geri alınamaz"
 
-#: sequencer.c:5189 sequencer.c:5418
+#: sequencer.c:5162 sequencer.c:5391
 #, c-format
 msgid "skipped previously applied commit %s"
 msgstr "daha önce uygulanan %s işlemesi atlandı"
 
-#: sequencer.c:5259 sequencer.c:5434
+#: sequencer.c:5232 sequencer.c:5407
 msgid "use --reapply-cherry-picks to include skipped commits"
 msgstr "atlanan işlemeleri içermek için --reapply-cherry-picks kullanın"
 
-#: sequencer.c:5405
+#: sequencer.c:5378
 msgid "make_script: unhandled options"
 msgstr "make_script: ele alınmayan seçenekler"
 
-#: sequencer.c:5408
+#: sequencer.c:5381
 msgid "make_script: error preparing revisions"
 msgstr "make_script: revizyonlar hazırlanırken hata"
 
-#: sequencer.c:5666 sequencer.c:5683
+#: sequencer.c:5639 sequencer.c:5656
 msgid "nothing to do"
 msgstr "yapılacak bir şey yok"
 
-#: sequencer.c:5702
+#: sequencer.c:5675
 msgid "could not skip unnecessary pick commands"
 msgstr "gerekli olmayan seçim komutları atlanamadı"
 
-#: sequencer.c:5802
+#: sequencer.c:5775
 msgid "the script was already rearranged."
 msgstr "betik halihazırda yeniden düzenlenmişti"
 
-#: setup.c:134
+#: setup.c:135
 #, c-format
 msgid "'%s' is outside repository at '%s'"
 msgstr "'%s', '%s' konumunda depo dışında"
 
-#: setup.c:186
+#: setup.c:187
 #, c-format
 msgid ""
 "%s: no such path in the working tree.\n"
@@ -8599,7 +8816,7 @@ msgstr ""
 "%s: Çalışma ağacında böyle bir yol yok.\n"
 "Yerelde var olmayan yolları belirtmek için 'git <komut> -- <yol>... kullanın."
 
-#: setup.c:199
+#: setup.c:200
 #, c-format
 msgid ""
 "ambiguous argument '%s': unknown revision or path not in the working tree.\n"
@@ -8611,12 +8828,12 @@ msgstr ""
 "Yolları revizyonlardan ayırmak için '--' kullanın, şöyle:\n"
 "'git <komut> [<revizyon>...] -- [<dosya>...]'"
 
-#: setup.c:265
+#: setup.c:266
 #, c-format
 msgid "option '%s' must come before non-option arguments"
 msgstr "'%s' seçeneği seçenek olmayan argümanlardan önce gelmeli"
 
-#: setup.c:284
+#: setup.c:285
 #, c-format
 msgid ""
 "ambiguous argument '%s': both revision and filename\n"
@@ -8627,100 +8844,100 @@ msgstr ""
 "Yolları revizyonlardan ayırmak için '--' kullanın, şöyle:\n"
 "'git <komut> [<revizyon>...] -- [<dosya>...]'"
 
-#: setup.c:420
+#: setup.c:421
 msgid "unable to set up work tree using invalid config"
 msgstr "geçersiz yapılandırma kullanılarak çalışma ağacı kurulamıyor"
 
-#: setup.c:424 builtin/rev-parse.c:895
+#: setup.c:425 builtin/rev-parse.c:895
 msgid "this operation must be run in a work tree"
 msgstr "bu işlem bir çalışma ağacı içinde çalıştırılmalı"
 
-#: setup.c:722
+#: setup.c:724
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr "Beklenen git repo sürümü <= %d, %d bulundu"
 
-#: setup.c:730
+#: setup.c:732
 msgid "unknown repository extension found:"
 msgid_plural "unknown repository extensions found:"
 msgstr[0] "bilinmeyen depo genişletmesi bulundu:"
 msgstr[1] "bilinmeyen depo genişletmeleri bulundu:"
 
-#: setup.c:744
+#: setup.c:746
 msgid "repo version is 0, but v1-only extension found:"
 msgid_plural "repo version is 0, but v1-only extensions found:"
 msgstr[0] "depo sürümü 0; ancak v1'e özel genişletme bulundu:"
 msgstr[1] "depo sürümü 0; ancak v1'e özel genişletmeler bulundu:"
 
-#: setup.c:765
+#: setup.c:767
 #, c-format
 msgid "error opening '%s'"
 msgstr "'%s' açılırken hata"
 
-#: setup.c:767
+#: setup.c:769
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr "bir .git dosyası olabilmek için çok büyük: '%s'"
 
-#: setup.c:769
+#: setup.c:771
 #, c-format
 msgid "error reading %s"
 msgstr "%s okunurken hata"
 
-#: setup.c:771
+#: setup.c:773
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr "geçersiz gitfile biçimi: %s"
 
-#: setup.c:773
+#: setup.c:775
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr "gitfile içinde yol yok: %s"
 
-#: setup.c:775
+#: setup.c:777
 #, c-format
 msgid "not a git repository: %s"
 msgstr "bir git deposu değil: %s"
 
-#: setup.c:877
+#: setup.c:879
 #, c-format
 msgid "'$%s' too big"
 msgstr "'$%s' çok büyük"
 
-#: setup.c:891
+#: setup.c:893
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr "bir git deposu değil: '%s'"
 
-#: setup.c:920 setup.c:922 setup.c:953
+#: setup.c:922 setup.c:924 setup.c:955
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr "'%s' konumuna chdir yapılamıyor"
 
-#: setup.c:925 setup.c:981 setup.c:991 setup.c:1030 setup.c:1038
+#: setup.c:927 setup.c:983 setup.c:993 setup.c:1032 setup.c:1040
 msgid "cannot come back to cwd"
 msgstr "cwd'ye geri dönülemiyor"
 
-#: setup.c:1052
+#: setup.c:1054
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr "'%*s%s%s' bilgileri alınamadı"
 
-#: setup.c:1295
+#: setup.c:1338
 msgid "Unable to read current working directory"
 msgstr "Şu anki çalışma dizini okunamıyor"
 
-#: setup.c:1304 setup.c:1310
+#: setup.c:1347 setup.c:1353
 #, c-format
 msgid "cannot change to '%s'"
 msgstr "şuraya değiştirilemiyor: '%s'"
 
-#: setup.c:1315
+#: setup.c:1358
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
 msgstr "bir git deposu (veya üst dizinlerinden birisi) değil: %s"
 
-#: setup.c:1321
+#: setup.c:1364
 #, c-format
 msgid ""
 "not a git repository (or any parent up to mount point %s)\n"
@@ -8730,7 +8947,20 @@ msgstr ""
 "Dosya sistemi sınırında duruluyor (GIT_DISCOVERY_ACROSS_FILESYSTEM "
 "ayarlanmamış)."
 
-#: setup.c:1446
+#: setup.c:1374
+#, c-format
+msgid ""
+"unsafe repository ('%s' is owned by someone else)\n"
+"To add an exception for this directory, call:\n"
+"\n"
+"\tgit config --global --add safe.directory %s"
+msgstr ""
+"güvensiz depo ('%s' sahibi bir başkası)\n"
+"Bu dizin için bir istisna eklemek için şunu çağırın:\n"
+"\n"
+"\tgit config --global --add safe.directory %s"
+
+#: setup.c:1502
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -8739,57 +8969,61 @@ msgstr ""
 "core.sharedRepository dosya kipi değeri ile sorun (0%.3o).\n"
 "Dosyaların sahibinin her zaman okuma ve yazma izni olması gerekir."
 
-#: setup.c:1508
+#: setup.c:1564
 msgid "fork failed"
 msgstr "çatallama başarısız"
 
-#: setup.c:1513
+#: setup.c:1569
 msgid "setsid failed"
 msgstr "setsid başarısız"
 
-#: sparse-index.c:289
+#: sparse-index.c:285
 #, c-format
 msgid "index entry is a directory, but not sparse (%08x)"
 msgstr "indeks girdisi bir dizin; ancak aralıklı değil (%08x)"
 
+#: split-index.c:9
+msgid "cannot use split index with a sparse index"
+msgstr "bir aralıklı indeksle bölünmüş indeks kullanılamıyor"
+
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:850
+#: strbuf.c:851
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:852
+#: strbuf.c:853
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u GiB/sn"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:860
+#: strbuf.c:861
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:862
+#: strbuf.c:863
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u MiB/sn"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:869
+#: strbuf.c:870
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:871
+#: strbuf.c:872
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u KiB/sn"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:877
+#: strbuf.c:878
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -8797,85 +9031,85 @@ msgstr[0] "%u bayt"
 msgstr[1] "%u bayt"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:879
+#: strbuf.c:880
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
 msgstr[0] "%u bayt/sn"
 msgstr[1] "%u bayt/sn"
 
-#: strbuf.c:1186 wrapper.c:207 wrapper.c:377 builtin/am.c:765
-#: builtin/rebase.c:650
+#: strbuf.c:1187 wrapper.c:217 wrapper.c:387 builtin/am.c:766
+#: builtin/rebase.c:653
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "'%s' yazma için açılamadı"
 
-#: strbuf.c:1195
+#: strbuf.c:1196
 #, c-format
 msgid "could not edit '%s'"
 msgstr "'%s' düzenlenemedi"
 
-#: submodule-config.c:237
+#: submodule-config.c:238
 #, c-format
 msgid "ignoring suspicious submodule name: %s"
 msgstr "kuşku doğuran altmodül yok sayılıyor: %s"
 
-#: submodule-config.c:304
+#: submodule-config.c:305
 msgid "negative values not allowed for submodule.fetchjobs"
 msgstr "submodule.fetchjobs için negatif değerlere izin verilmiyor"
 
-#: submodule-config.c:402
+#: submodule-config.c:403
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr ""
 "'%s' bir komut satırı seçeneği olarak yorumlanabileceğinden yok sayılıyor: %s"
 
-#: submodule-config.c:499
+#: submodule-config.c:500 builtin/push.c:489 builtin/send-pack.c:148
 #, c-format
-msgid "invalid value for %s"
-msgstr "%s için geçersiz değer"
+msgid "invalid value for '%s'"
+msgstr "'%s' için geçersiz değer"
 
-#: submodule-config.c:767
+#: submodule-config.c:828
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr ".gitmodules girdisi %s güncellenemedi"
 
-#: submodule.c:114 submodule.c:143
+#: submodule.c:115 submodule.c:144
 msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
 msgstr ""
 "Birleştirilmemiş .gitmodules değiştirilemiyor, önce birleştirme "
 "çakışmalarını çözün"
 
-#: submodule.c:118 submodule.c:147
+#: submodule.c:119 submodule.c:148
 #, c-format
 msgid "Could not find section in .gitmodules where path=%s"
 msgstr ".gitmodules içinde path=%s olan bölüm bulunamadı"
 
-#: submodule.c:154
+#: submodule.c:155
 #, c-format
 msgid "Could not remove .gitmodules entry for %s"
 msgstr "%s için .gitmodules girdisi kaldırılamadı"
 
-#: submodule.c:165
+#: submodule.c:166
 msgid "staging updated .gitmodules failed"
 msgstr "güncellenmiş .gitmodules'u hazırlama başarısız oldu"
 
-#: submodule.c:358
+#: submodule.c:346
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "içi doldurulmamış '%s' altmodülünde"
 
-#: submodule.c:389
+#: submodule.c:377
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "Yol belirteci '%s' '%.*s' altmodülünde"
 
-#: submodule.c:466
+#: submodule.c:454
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "hatalı --ignore-submodules argümanı: %s"
 
-#: submodule.c:844
+#: submodule.c:866
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -8884,12 +9118,12 @@ msgstr ""
 "%s işlemesinde '%s' yolunda bulunan altmodül, aynı adlı bir altmodülle "
 "çarpışıyor. Atlanıyor."
 
-#: submodule.c:954
+#: submodule.c:987
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr "altmodül girdisi '%s' (%s) bir %s, işleme değil"
 
-#: submodule.c:1042
+#: submodule.c:1069
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
@@ -8898,36 +9132,46 @@ msgstr ""
 "'%s' altmodülünde 'git rev-list <commits> --not --remotes -n 1' "
 "çalıştırılamadı"
 
-#: submodule.c:1165
+#: submodule.c:1192
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "'%s' altmodülü için işlem başarısız oldu"
 
-#: submodule.c:1194 builtin/branch.c:699 builtin/submodule--helper.c:2714
+#: submodule.c:1221 builtin/branch.c:714 builtin/submodule--helper.c:2827
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "HEAD geçerli bir başvuru olarak çözülemedi."
 
-#: submodule.c:1205
+#: submodule.c:1232
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "'%s' altmodülü itiliyor\n"
 
-#: submodule.c:1208
+#: submodule.c:1235
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "'%s' altmodülü itilemiyor\n"
 
-#: submodule.c:1491
+#: submodule.c:1567
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "%s%s altmodülü getiriliyor\n"
 
-#: submodule.c:1525
+#: submodule.c:1589
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "'%s' altmodülüne erişilemedi\n"
 
-#: submodule.c:1680
+#: submodule.c:1618
+#, c-format
+msgid "Could not access submodule '%s' at commit %s\n"
+msgstr "'%s' altmodülüne %s işlemesinde erişilemedi\n"
+
+#: submodule.c:1629
+#, c-format
+msgid "Fetching submodule %s%s at commit %s\n"
+msgstr "%s%s altmodülü %s işlemesinde getiriliyor\n"
+
+#: submodule.c:1849
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -8936,78 +9180,78 @@ msgstr ""
 "Altmodül getirilirken hata:\n"
 "%s"
 
-#: submodule.c:1705
+#: submodule.c:1874
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "'%s' bir git deposu olarak tanımlanamadı"
 
-#: submodule.c:1722
+#: submodule.c:1891
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr "'%s' altmodülü içinde 'git status --porcelain=2' çalıştırılamadı"
 
-#: submodule.c:1763
+#: submodule.c:1932
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr "'%s' altmodülü içinde 'git status --porcelain=2' başarısız oldu"
 
-#: submodule.c:1838
+#: submodule.c:2007
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "'%s' altmodülü içinde 'git status' başlatılamadı"
 
-#: submodule.c:1851
+#: submodule.c:2020
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "'%s' altmodülü içinde 'git status' çalıştırılamadı"
 
-#: submodule.c:1868
+#: submodule.c:2037
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr "'%s' altmodülü içinde core.worktree ayarı kapatılamadı"
 
-#: submodule.c:1895 submodule.c:2210
+#: submodule.c:2064 submodule.c:2379
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr "'%s' altmodülüne özyinelenemedi"
 
-#: submodule.c:1917
+#: submodule.c:2086
 msgid "could not reset submodule index"
 msgstr "altmodül indeksi sıfırlanamadı"
 
-#: submodule.c:1959
+#: submodule.c:2128
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "'%s' altmodülü indeksi kirli"
 
-#: submodule.c:2013
+#: submodule.c:2182
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "'%s' altmodülü güncellenemedi."
 
-#: submodule.c:2081
+#: submodule.c:2250
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr "altmodül git dizini '%s', '%.*s' git dizini içinde"
 
-#: submodule.c:2102
+#: submodule.c:2271
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
 msgstr ""
 "relocate_gitdir birden çok çalışma ağaçlı '%s' altmodülü için desteklenmiyor"
 
-#: submodule.c:2114 submodule.c:2174
+#: submodule.c:2283 submodule.c:2343
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "'%s' altmodülü adı aranamadı"
 
-#: submodule.c:2118
+#: submodule.c:2287
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr "'%s' ögesini mevcut bir git dizinine taşıma reddediliyor"
 
-#: submodule.c:2124
+#: submodule.c:2293
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -9018,11 +9262,11 @@ msgstr ""
 "şuradan: '%s'\n"
 "şuraya: '%s'\n"
 
-#: submodule.c:2255
+#: submodule.c:2424
 msgid "could not start ls-files in .."
 msgstr "ls-files şurada başlatılamadı .."
 
-#: submodule.c:2295
+#: submodule.c:2464
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree beklenmedik bir biçimde %d kodu ile çıktı"
@@ -9043,8 +9287,8 @@ msgstr "'%s' artbilgi komutunu çalıştırma başarısız oldu"
 msgid "unknown value '%s' for key '%s'"
 msgstr "bilinmeyen değer '%s' ('%s' anahtarı için)"
 
-#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
-#: builtin/remote.c:327
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:300
+#: builtin/remote.c:328
 #, c-format
 msgid "more than one %s"
 msgstr "birden çok %s"
@@ -9059,11 +9303,11 @@ msgstr "'%.*s' artbilgisi içinde boş artbilgi jetonu"
 msgid "could not read input file '%s'"
 msgstr "'%s' girdi dosyası okunamadı"
 
-#: trailer.c:766 builtin/mktag.c:89 imap-send.c:1573
+#: trailer.c:766 builtin/mktag.c:88 imap-send.c:1563
 msgid "could not read from stdin"
 msgstr "stdin'den okunamadı"
 
-#: trailer.c:1024 wrapper.c:684
+#: trailer.c:1024 wrapper.c:760
 #, c-format
 msgid "could not stat %s"
 msgstr "%s dosya bilgileri alınamadı"
@@ -9131,7 +9375,7 @@ msgstr "fast-import çalıştırılamadı"
 msgid "error while running fast-import"
 msgstr "fast-import çalıştırılırken hata"
 
-#: transport-helper.c:549 transport-helper.c:1251
+#: transport-helper.c:549 transport-helper.c:1254
 #, c-format
 msgid "could not read ref %s"
 msgstr "%s başvurusu okunamadı"
@@ -9149,7 +9393,7 @@ msgstr "uzak servis yolu ayarlama protokol tarafından desteklenmiyor"
 msgid "invalid remote service path"
 msgstr "geçersiz uzak konum servis yolu"
 
-#: transport-helper.c:661 transport.c:1479
+#: transport-helper.c:661 transport.c:1496
 msgid "operation not supported by protocol"
 msgstr "işlem protokol tarafından desteklenmiyor"
 
@@ -9158,72 +9402,72 @@ msgstr "işlem protokol tarafından desteklenmiyor"
 msgid "can't connect to subservice %s"
 msgstr "%s altservisine bağlanılamıyor"
 
-#: transport-helper.c:693 transport.c:404
+#: transport-helper.c:693 transport.c:415
 msgid "--negotiate-only requires protocol v2"
 msgstr "--negotiate-only protokolün ikinci sürümünü gerektiriyor"
 
-#: transport-helper.c:755
+#: transport-helper.c:758
 msgid "'option' without a matching 'ok/error' directive"
 msgstr "eşleşen bir 'tamam/hata' direktifi olmadan 'option'"
 
-#: transport-helper.c:798
+#: transport-helper.c:801
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "tamam/hata bekleniyordu, yardımcı şunu söyledi: '%s'"
 
-#: transport-helper.c:859
+#: transport-helper.c:862
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "yardımcı %s beklenmedik durumu bildirdi"
 
-#: transport-helper.c:942
+#: transport-helper.c:945
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "%s yardımcısı 'dry-run' desteklemiyor"
 
-#: transport-helper.c:945
+#: transport-helper.c:948
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "%s yardımcısı --signed desteklemiyor"
 
-#: transport-helper.c:948
+#: transport-helper.c:951
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "%s yardımcısı --signed=if-asked desteklemiyor"
 
-#: transport-helper.c:953
+#: transport-helper.c:956
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr "%s yardımcısı --atomic desteklemiyor"
 
-#: transport-helper.c:957
+#: transport-helper.c:960
 #, c-format
 msgid "helper %s does not support --%s"
 msgstr "%s yardımcısı --%s desteklemiyor"
 
-#: transport-helper.c:964
+#: transport-helper.c:967
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "%s yardımcısı 'push-option' desteklemiyor"
 
-#: transport-helper.c:1064
+#: transport-helper.c:1067
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr "remote-helper itme desteklemiyor; başvuru belirteci gerekli"
 
-#: transport-helper.c:1069
+#: transport-helper.c:1072
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "%s yardımcısı 'force' desteklemiyor"
 
-#: transport-helper.c:1116
+#: transport-helper.c:1119
 msgid "couldn't run fast-export"
 msgstr "fast-export çalıştırılamadı"
 
-#: transport-helper.c:1121
+#: transport-helper.c:1124
 msgid "error while running fast-export"
 msgstr "fast-export çalıştırılırken hata"
 
-#: transport-helper.c:1146
+#: transport-helper.c:1149
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -9232,52 +9476,52 @@ msgstr ""
 "Ortak başvuru yok ve hiç belirtilmemiş; bir şey yapılmayacak.\n"
 "Belki de bir dal belirtmelisiniz.\n"
 
-#: transport-helper.c:1228
+#: transport-helper.c:1231
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr "desteklenmeyen nesne biçimi '%s'"
 
-#: transport-helper.c:1237
+#: transport-helper.c:1240
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "başvuru listesinde hatalı oluşturulmuş yanıt: %s"
 
-#: transport-helper.c:1389
+#: transport-helper.c:1392
 #, c-format
 msgid "read(%s) failed"
 msgstr "read(%s) başarısız oldu"
 
-#: transport-helper.c:1416
+#: transport-helper.c:1419
 #, c-format
 msgid "write(%s) failed"
 msgstr "write(%s) başarısız oldu"
 
-#: transport-helper.c:1465
+#: transport-helper.c:1468
 #, c-format
 msgid "%s thread failed"
 msgstr "%s iş parçacığı başarısız oldu"
 
-#: transport-helper.c:1469
+#: transport-helper.c:1472
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "%s iş parçacığı eklenemedi: %s"
 
-#: transport-helper.c:1488 transport-helper.c:1492
+#: transport-helper.c:1491 transport-helper.c:1495
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "veri kopyalama için iş parçacığı başlatılamıyor: %s"
 
-#: transport-helper.c:1529
+#: transport-helper.c:1532
 #, c-format
 msgid "%s process failed to wait"
 msgstr "%s işlemi bekleyemedi"
 
-#: transport-helper.c:1533
+#: transport-helper.c:1536
 #, c-format
 msgid "%s process failed"
 msgstr "%s işlemi başarısız oldu"
 
-#: transport-helper.c:1551 transport-helper.c:1560
+#: transport-helper.c:1554 transport-helper.c:1563
 msgid "can't start thread for copying data"
 msgstr "veri kopyalama için iş parçacığı başlatılamıyor"
 
@@ -9286,51 +9530,51 @@ msgstr "veri kopyalama için iş parçacığı başlatılamıyor"
 msgid "Would set upstream of '%s' to '%s' of '%s'\n"
 msgstr "'%s' üst kaynağı '%s' (kaynak: '%s') olarak ayarlanacak\n"
 
-#: transport.c:145
+#: transport.c:138
 #, c-format
 msgid "could not read bundle '%s'"
 msgstr "'%s' demeti okunamadı"
 
-#: transport.c:227
+#: transport.c:234
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr "transport: Geçersiz derinlik seçeneği '%s'"
 
-#: transport.c:279
+#: transport.c:289
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "ayrıntılar için 'git help config' içinde protocol.version'a bakın"
 
-#: transport.c:280
+#: transport.c:290
 msgid "server options require protocol version 2 or later"
 msgstr "sunucu seçenekleri protokol sürüm 2 veya sonrasını gerektirir"
 
-#: transport.c:407
+#: transport.c:418
 msgid "server does not support wait-for-done"
 msgstr "Sunucu, wait-for-done desteklemiyor"
 
-#: transport.c:759
+#: transport.c:770
 msgid "could not parse transport.color.* config"
 msgstr "transport.color.* yapılandırması ayrıştırılamadı"
 
-#: transport.c:834
+#: transport.c:845
 msgid "support for protocol v2 not implemented yet"
 msgstr "protokol v2 desteği henüz yerine getirilmedi"
 
-#: transport.c:967
+#: transport.c:978
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "'%s' yapılandırması için bilinmeyen değer: %s"
 
-#: transport.c:1033
+#: transport.c:1044
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "'%s' taşıyıcısına izin verilmiyor"
 
-#: transport.c:1082
+#: transport.c:1093
 msgid "git-over-rsync is no longer supported"
 msgstr "git-over-rsync artık desteklenmiyor"
 
-#: transport.c:1185
+#: transport.c:1196
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -9339,7 +9583,7 @@ msgstr ""
 "Aşağıdaki altmodül yolları başka hiçbir uzak konumda bulunamayan\n"
 "değişiklikler içeriyor:\n"
 
-#: transport.c:1189
+#: transport.c:1200
 #, c-format
 msgid ""
 "\n"
@@ -9366,11 +9610,11 @@ msgstr ""
 "kullanın.\n"
 "\n"
 
-#: transport.c:1197
+#: transport.c:1208
 msgid "Aborting."
 msgstr "İptal ediliyor."
 
-#: transport.c:1343
+#: transport.c:1354
 msgid "failed to push all needed submodules"
 msgstr "gereken tüm altmodüller itilemedi"
 
@@ -9650,16 +9894,16 @@ msgstr ""
 "olmayan dosya sisteminde BÜYÜK/küçük harf duyarlı yollar) ve aynı çarpışan\n"
 "gruptan yalnızca bir tanesi çalışma ağacında:\n"
 
-#: unpack-trees.c:1636
+#: unpack-trees.c:1664
 msgid "Updating index flags"
 msgstr "İndeks bayrakları güncelleniyor"
 
-#: unpack-trees.c:2803
+#: unpack-trees.c:2925
 #, c-format
 msgid "worktree and untracked commit have duplicate entries: %s"
 msgstr "çalışma ağacı ve izlenmeyen işlemenin yinelenmiş girdileri var: %s"
 
-#: upload-pack.c:1565
+#: upload-pack.c:1579
 msgid "expected flush after fetch arguments"
 msgstr "getir argümanlarından sonra floş bekleniyordu"
 
@@ -9696,123 +9940,137 @@ msgstr "geçersiz '..' yol kesimi"
 msgid "Fetching objects"
 msgstr "Nesneler getiriliyor"
 
-#: worktree.c:238 builtin/am.c:2209 builtin/bisect--helper.c:156
+#: worktree.c:237 builtin/am.c:2210 builtin/bisect--helper.c:156
 #, c-format
 msgid "failed to read '%s'"
 msgstr "'%s' okunamadı"
 
-#: worktree.c:305
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr "ana çalışma ağacındaki '%s' depo dizini değil"
 
-#: worktree.c:316
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr "'%s' dosyası çalışma ağacı konumuna olan tam yolu içermiyor"
 
-#: worktree.c:328
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr "'%s' mevcut değil"
 
-#: worktree.c:334
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr "'%s' bir .git dosyası değil, hata kodu %d"
 
-#: worktree.c:343
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "'%s' şuna geri işaret etmiyor: '%s'"
 
-#: worktree.c:604
+#: worktree.c:600
 msgid "not a directory"
 msgstr "bir dizin değil"
 
-#: worktree.c:613
+#: worktree.c:609
 msgid ".git is not a file"
 msgstr ".git bir dosya değil"
 
-#: worktree.c:615
+#: worktree.c:611
 msgid ".git file broken"
 msgstr ".git dosyası bozuk"
 
-#: worktree.c:617
+#: worktree.c:613
 msgid ".git file incorrect"
 msgstr ".git dosyası doğru değil"
 
-#: worktree.c:723
+#: worktree.c:719
 msgid "not a valid path"
 msgstr "geçerli bir yol değil"
 
-#: worktree.c:729
+#: worktree.c:725
 msgid "unable to locate repository; .git is not a file"
 msgstr "depo konumu bulunamıyor: .git bir dosya değil"
 
-#: worktree.c:733
+#: worktree.c:729
 msgid "unable to locate repository; .git file does not reference a repository"
 msgstr "depo konumu bulunamıyor: .git dosyası bir depoya başvurmuyor"
 
-#: worktree.c:737
+#: worktree.c:733
 msgid "unable to locate repository; .git file broken"
 msgstr "depo konumu bulunamıyor: .git dosyası bozuk"
 
-#: worktree.c:743
+#: worktree.c:739
 msgid "gitdir unreadable"
 msgstr "okunamayan gitdir"
 
-#: worktree.c:747
+#: worktree.c:743
 msgid "gitdir incorrect"
 msgstr "doğru olmayan gitdir"
 
-#: worktree.c:772
+#: worktree.c:768
 msgid "not a valid directory"
 msgstr "geçerli bir dizin değil"
 
-#: worktree.c:778
+#: worktree.c:774
 msgid "gitdir file does not exist"
 msgstr "gitdir dosyası mevcut değil"
 
-#: worktree.c:783 worktree.c:792
+#: worktree.c:779 worktree.c:788
 #, c-format
 msgid "unable to read gitdir file (%s)"
 msgstr "gitdir dosyası (%s) okunamıyor"
 
-#: worktree.c:802
+#: worktree.c:798
 #, c-format
 msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
 msgstr "az okundu (%<PRIuMAX> bayt bekleniyordu, %<PRIuMAX> okundu)"
 
-#: worktree.c:810
+#: worktree.c:806
 msgid "invalid gitdir file"
 msgstr "geçersiz gitdir dosyası"
 
-#: worktree.c:818
+#: worktree.c:814
 msgid "gitdir file points to non-existent location"
 msgstr "gitdir dosyası var olmayan bir konuma işaret ediyor"
 
-#: wrapper.c:151
+#: worktree.c:830
+#, c-format
+msgid "unable to set %s in '%s'"
+msgstr "%s, '%s' içinde ayarlanamıyor"
+
+#: worktree.c:832
+#, c-format
+msgid "unable to unset %s in '%s'"
+msgstr "%s, '%s' içinde ayarı kaldırılamıyor"
+
+#: worktree.c:852
+msgid "failed to set extensions.worktreeConfig setting"
+msgstr "extensions.worktreeConfig yapılandırması ayarlanamadı"
+
+#: wrapper.c:161
 #, c-format
 msgid "could not setenv '%s'"
 msgstr "setenv '%s' yapılamadı"
 
-#: wrapper.c:203
+#: wrapper.c:213
 #, c-format
 msgid "unable to create '%s'"
 msgstr "'%s' oluşturulamıyor"
 
-#: wrapper.c:205 wrapper.c:375
+#: wrapper.c:215 wrapper.c:385
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr "'%s' okuma ve yazma için açılamadı"
 
-#: wrapper.c:406 wrapper.c:607
+#: wrapper.c:416 wrapper.c:683
 #, c-format
 msgid "unable to access '%s'"
 msgstr "'%s' erişilemiyor"
 
-#: wrapper.c:615
+#: wrapper.c:691
 msgid "unable to get current working directory"
 msgstr "geçerli çalışma dizini alınamıyor"
 
@@ -9850,11 +10108,11 @@ msgstr ""
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr "  (hazırlığı bitirmek için \"git rm <dosya>...\" kullanın)"
 
-#: wt-status.c:211 wt-status.c:1131
+#: wt-status.c:211 wt-status.c:1140
 msgid "Changes to be committed:"
 msgstr "İşlenecek değişiklikler:"
 
-#: wt-status.c:234 wt-status.c:1140
+#: wt-status.c:234 wt-status.c:1149
 msgid "Changes not staged for commit:"
 msgstr "İşleme için hazırlanmamış değişiklikler:"
 
@@ -9954,22 +10212,22 @@ msgstr "değiştirilen içerik, "
 msgid "untracked content, "
 msgstr "izlenmeyen içerik, "
 
-#: wt-status.c:964
+#: wt-status.c:973
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] "Zulanızda şu anda %d girdi var"
 msgstr[1] "Zulanızda şu anda %d girdi var"
 
-#: wt-status.c:995
+#: wt-status.c:1004
 msgid "Submodules changed but not updated:"
 msgstr "Değiştirilen; ancak güncellenmeyen altmodüller:"
 
-#: wt-status.c:997
+#: wt-status.c:1006
 msgid "Submodule changes to be committed:"
 msgstr "İşlenecek altmodül değişiklikleri:"
 
-#: wt-status.c:1079
+#: wt-status.c:1088
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -9977,7 +10235,7 @@ msgstr ""
 "Yukarıdaki satırı değiştirmeyin veya kaldırmayın.\n"
 "Altındaki her şey yok sayılacaktır."
 
-#: wt-status.c:1171
+#: wt-status.c:1180
 #, c-format
 msgid ""
 "\n"
@@ -9988,114 +10246,114 @@ msgstr ""
 "Dal önünde/arkasında değerlerini hesaplama %.2f saniye sürdü.\n"
 "Bundan kaçınmak için --no-ahead-behind kullanabilirsiniz.\n"
 
-#: wt-status.c:1201
+#: wt-status.c:1210
 msgid "You have unmerged paths."
 msgstr "Birleştirilmemiş yollarınız var."
 
-#: wt-status.c:1204
+#: wt-status.c:1213
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (çakışmaları onar ve \"git commit\" çalıştır)"
 
-#: wt-status.c:1206
+#: wt-status.c:1215
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (birleştirmeyi iptal etmek için \"git merge --abort\" kullanın)"
 
-#: wt-status.c:1210
+#: wt-status.c:1219
 msgid "All conflicts fixed but you are still merging."
 msgstr "Tüm çakışmalar onarıldı; ancak siz hâlâ birleştiriyorsunuz."
 
-#: wt-status.c:1213
+#: wt-status.c:1222
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (birleştirmeyi sonuçlandırmak için \"git commit\" kullanın)"
 
-#: wt-status.c:1224
+#: wt-status.c:1233
 msgid "You are in the middle of an am session."
 msgstr "Bir 'am' oturumunun tam ortasındasınız."
 
-#: wt-status.c:1227
+#: wt-status.c:1236
 msgid "The current patch is empty."
 msgstr "Mevcut yama boş."
 
-#: wt-status.c:1232
+#: wt-status.c:1241
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (çakışmaları onar ve ardından \"git am --continue\" çalıştır)"
 
-#: wt-status.c:1234
+#: wt-status.c:1243
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (bu yamayı atlamak için \"git am --skip\" kullanın"
 
-#: wt-status.c:1237
+#: wt-status.c:1246
 msgid ""
 "  (use \"git am --allow-empty\" to record this patch as an empty commit)"
 msgstr ""
 "  (yamayı boş işleme kaydı olarak yazmak için \"git am --allow-empty\" "
 "kullanın)"
 
-#: wt-status.c:1239
+#: wt-status.c:1248
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr "  (ilk dalı eski durumuna getirmek için \"git am --abort\" kullanın)"
 
-#: wt-status.c:1372
+#: wt-status.c:1381
 msgid "git-rebase-todo is missing."
 msgstr "git-rebase-todo eksik"
 
-#: wt-status.c:1374
+#: wt-status.c:1383
 msgid "No commands done."
 msgstr "Yerine getirilen bir komut yok."
 
-#: wt-status.c:1377
+#: wt-status.c:1386
 #, c-format
-msgid "Last command done (%d command done):"
-msgid_plural "Last commands done (%d commands done):"
-msgstr[0] "Son yerine getirilen komut (toplamda %d komut):"
-msgstr[1] "Son yerine getirilen komutlar (toplamda %d komut):"
+msgid "Last command done (%<PRIuMAX> command done):"
+msgid_plural "Last commands done (%<PRIuMAX> commands done):"
+msgstr[0] "Son yerine getirilen komut (%<PRIuMAX> komut yapıldı):"
+msgstr[1] "Son yerine getirilen komutlar (%<PRIuMAX> komut yapıldı):"
 
-#: wt-status.c:1388
+#: wt-status.c:1397
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (ek bilgi için %s dosyasına bakın)"
 
-#: wt-status.c:1393
+#: wt-status.c:1402
 msgid "No commands remaining."
 msgstr "Kalan komut yok."
 
-#: wt-status.c:1396
+#: wt-status.c:1405
 #, c-format
-msgid "Next command to do (%d remaining command):"
-msgid_plural "Next commands to do (%d remaining commands):"
-msgstr[0] "Sıradaki yerine getirilecek komut (%d kalan komut):"
-msgstr[1] "Sıradaki yerine getirilecek komutlar (%d kalan komut):"
+msgid "Next command to do (%<PRIuMAX> remaining command):"
+msgid_plural "Next commands to do (%<PRIuMAX> remaining commands):"
+msgstr[0] "Sıradaki yerine getirilecek komut (%<PRIuMAX> kalan komut):"
+msgstr[1] "Sıradaki yerine getirilecek komutlar (%<PRIuMAX> kalan komut):"
 
-#: wt-status.c:1404
+#: wt-status.c:1413
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr "  (görüntüleme ve düzenleme için \"git rebase --edit-todo\" kullanın)"
 
-#: wt-status.c:1416
+#: wt-status.c:1425
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "Şu anda '%s' dalını '%s' üzerine yeniden temellendiriyorsunuz."
 
-#: wt-status.c:1421
+#: wt-status.c:1430
 msgid "You are currently rebasing."
 msgstr "Şu anda yeniden temellendirme yapmaktasınız."
 
-#: wt-status.c:1434
+#: wt-status.c:1443
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr "  (çakışmaları çözün ve ardından \"git rebase --continue\" çalıştır)"
 
-#: wt-status.c:1436
+#: wt-status.c:1445
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (bu yamayı atlamak için \"git rebase --skip\" kullanın)"
 
-#: wt-status.c:1438
+#: wt-status.c:1447
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr "  (ilk dalı çıkış yapmak için \"git rebase --abort\" kullanın)"
 
-#: wt-status.c:1445
+#: wt-status.c:1454
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr "  (tüm çakışmalar onarıldı: \"git rebase --continue\" çalıştır)"
 
-#: wt-status.c:1449
+#: wt-status.c:1458
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
@@ -10103,158 +10361,158 @@ msgstr ""
 "Şu anda '%s' dalını '%s' üzerine yeniden temellendirirken bir işlemeyi "
 "parçalara bölüyorsunuz."
 
-#: wt-status.c:1454
+#: wt-status.c:1463
 msgid "You are currently splitting a commit during a rebase."
 msgstr ""
 "Şu anda yeniden temellendirme sırasında bir işlemeyi parçalara bölüyorsunuz."
 
-#: wt-status.c:1457
+#: wt-status.c:1466
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr ""
 "  (Çalışma dizininiz temizlendiğinde \"git rebase --continue\" çalıştır)"
 
-#: wt-status.c:1461
+#: wt-status.c:1470
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr ""
 "Şu anda '%s' dalını '%s' üzerine yeniden temellendirirken bir işlemeyi "
 "düzenliyorsunuz."
 
-#: wt-status.c:1466
+#: wt-status.c:1475
 msgid "You are currently editing a commit during a rebase."
 msgstr "Şu anda yeniden temellendirme sırasında bir işlemeyi düzenliyorsunuz."
 
-#: wt-status.c:1469
+#: wt-status.c:1478
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr "  (geçerli işlemeyi değiştirmek için \"git commit --amend\" kullanın)"
 
-#: wt-status.c:1471
+#: wt-status.c:1480
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr ""
 "  (değişikliklerinizden memnunsanız \"git rebase --continue\" kullanın)"
 
-#: wt-status.c:1482
+#: wt-status.c:1491
 msgid "Cherry-pick currently in progress."
 msgstr "Seç-al şu anda sürmekte."
 
-#: wt-status.c:1485
+#: wt-status.c:1494
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "Şu anda %s işlemesini seç-al yapıyorsunuz."
 
-#: wt-status.c:1492
+#: wt-status.c:1501
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr "  (çakışmaları onar ve \"git cherry-pick --continue\" çalıştır)"
 
-#: wt-status.c:1495
+#: wt-status.c:1504
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (sürdürmek için \"git cherry-pick --continue\" çalıştır)"
 
-#: wt-status.c:1498
+#: wt-status.c:1507
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr "  (tüm çakışmalar onarıldı: \"git cherry-pick --continue\" çalıştır)"
 
-#: wt-status.c:1500
+#: wt-status.c:1509
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr "  (bu yamayı atlamak için \"git cherry-pick --skip\" kullanın)"
 
-#: wt-status.c:1502
+#: wt-status.c:1511
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr "  (seç-al işlemini iptal için \"git cherry-pick --abort\" kullanın)"
 
-#: wt-status.c:1512
+#: wt-status.c:1521
 msgid "Revert currently in progress."
 msgstr "Geriye al şu anda sürmekte."
 
-#: wt-status.c:1515
+#: wt-status.c:1524
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Şu anda %s işlemesini geri alıyorsunuz."
 
-#: wt-status.c:1521
+#: wt-status.c:1530
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (çakışmaları onar ve \"git revert --continue\" çalıştır)"
 
-#: wt-status.c:1524
+#: wt-status.c:1533
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (sürdürmek için \"git revert --continue\" çalıştır)"
 
-#: wt-status.c:1527
+#: wt-status.c:1536
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (tüm çakışmalar onarıldı: \"git revert --continue\" çalıştır)"
 
-#: wt-status.c:1529
+#: wt-status.c:1538
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr "  (bu yamayı atlamak için \"git revert --skip\" kullanın)"
 
-#: wt-status.c:1531
+#: wt-status.c:1540
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (geri al işlemini iptal için \"git revert --abort\" kullanın)"
 
-#: wt-status.c:1541
+#: wt-status.c:1550
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "Şu anda ikili arama yapıyorsunuz, '%s' dalından başlandı."
 
-#: wt-status.c:1545
+#: wt-status.c:1554
 msgid "You are currently bisecting."
 msgstr "Şu anda ikili arama yapıyorsunuz."
 
-#: wt-status.c:1548
+#: wt-status.c:1557
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (ilk dala dönmek için \"git bisect reset\" kullanın)"
 
-#: wt-status.c:1559
+#: wt-status.c:1568
 msgid "You are in a sparse checkout."
 msgstr "Bir aralıklı çıkış içindesiniz."
 
-#: wt-status.c:1562
+#: wt-status.c:1571
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
 msgstr "İzlenen dosyaların %%%d mevcut olduğu aralıklı bir çıkıştasınız."
 
-#: wt-status.c:1806
+#: wt-status.c:1815
 msgid "On branch "
 msgstr "Üzerinde bulunulan dal: "
 
-#: wt-status.c:1813
+#: wt-status.c:1822
 msgid "interactive rebase in progress; onto "
 msgstr "şunun üzerine etkileşimli yeniden temellendirme sürmekte: "
 
-#: wt-status.c:1815
+#: wt-status.c:1824
 msgid "rebase in progress; onto "
 msgstr "şunun üzerine yeniden temellendirme sürmekte: "
 
-#: wt-status.c:1820
+#: wt-status.c:1829
 msgid "HEAD detached at "
 msgstr "HEAD şurada ayrıldı: "
 
-#: wt-status.c:1822
+#: wt-status.c:1831
 msgid "HEAD detached from "
 msgstr "HEAD şundan ayrıldı: "
 
-#: wt-status.c:1825
+#: wt-status.c:1834
 msgid "Not currently on any branch."
 msgstr "Şu anda bir dal üzerinde değil."
 
-#: wt-status.c:1842
+#: wt-status.c:1851
 msgid "Initial commit"
 msgstr "İlk işleme"
 
-#: wt-status.c:1843
+#: wt-status.c:1852
 msgid "No commits yet"
 msgstr "Henüz bir işleme yok"
 
-#: wt-status.c:1857
+#: wt-status.c:1866
 msgid "Untracked files"
 msgstr "İzlenmeyen dosyalar"
 
-#: wt-status.c:1859
+#: wt-status.c:1868
 msgid "Ignored files"
 msgstr "Yok sayılan dosyalar"
 
-#: wt-status.c:1863
+#: wt-status.c:1872
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -10265,32 +10523,32 @@ msgstr ""
 "bunu hızlandırabilir; ancak yeni dosyaları eklemeyi unutmamanız\n"
 "konusunda dikkatli olmalısınız (ek bilgi için 'git help status')."
 
-#: wt-status.c:1869
+#: wt-status.c:1878
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "İzlenmeyen dosyalar listelenmiyor%s"
 
-#: wt-status.c:1871
+#: wt-status.c:1880
 msgid " (use -u option to show untracked files)"
 msgstr " (izlenmeyen dosyaları göstermek için -u seçeneğini kullanın)"
 
-#: wt-status.c:1877
+#: wt-status.c:1886
 msgid "No changes"
 msgstr "Değişiklik yok"
 
-#: wt-status.c:1882
+#: wt-status.c:1891
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 "İşlemeye eklenen değişiklik yok (\"git add\" ve/veya \"git commit -a\" "
 "kullanın)\n"
 
-#: wt-status.c:1886
+#: wt-status.c:1895
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "İşlemeye eklenen değişiklik yok\n"
 
-#: wt-status.c:1890
+#: wt-status.c:1899
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -10299,65 +10557,65 @@ msgstr ""
 "işlemeye bir şey eklenmedi; ancak izlenmeyen dosyalar var (izlemek için "
 "\"git add\" kullanın)\n"
 
-#: wt-status.c:1894
+#: wt-status.c:1903
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr "işlemeye bir şey eklenmedi; ancak izlenmeyen dosyalar var\n"
 
-#: wt-status.c:1898
+#: wt-status.c:1907
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 "İşlenecek bir şey yok (dosyalar oluşturun/kopyalayın ve izlemek için \"git "
 "add\" kullanın)\n"
 
-#: wt-status.c:1902 wt-status.c:1908
+#: wt-status.c:1911 wt-status.c:1917
 #, c-format
 msgid "nothing to commit\n"
 msgstr "İşlenecek bir şey yok\n"
 
-#: wt-status.c:1905
+#: wt-status.c:1914
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr ""
 "İşlenecek bir şey yok (izlenmeyen dosyaları göstermek için -u kullanın)\n"
 
-#: wt-status.c:1910
+#: wt-status.c:1919
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "İşlenecek bir şey yok, çalışma ağacı temiz\n"
 
-#: wt-status.c:2015
+#: wt-status.c:2024
 msgid "No commits yet on "
 msgstr "Şurada henüz bir işleme yok: "
 
-#: wt-status.c:2019
+#: wt-status.c:2028
 msgid "HEAD (no branch)"
 msgstr "HEAD (dal yok)"
 
-#: wt-status.c:2050
+#: wt-status.c:2059
 msgid "different"
 msgstr "değişik"
 
-#: wt-status.c:2052 wt-status.c:2060
+#: wt-status.c:2061 wt-status.c:2069
 msgid "behind "
 msgstr "şunun arkasında: "
 
-#: wt-status.c:2055 wt-status.c:2058
+#: wt-status.c:2064 wt-status.c:2067
 msgid "ahead "
 msgstr "şunun önünde: "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2596
+#: wt-status.c:2605
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "%s yapılamıyor: Hazırlanmamış değişiklikleriniz var."
 
-#: wt-status.c:2602
+#: wt-status.c:2611
 msgid "additionally, your index contains uncommitted changes."
 msgstr "Ek olarak, indeksiniz işlenmemiş değişiklikler içeriyor."
 
-#: wt-status.c:2604
+#: wt-status.c:2613
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "%s yapılamıyor: İndeksiniz işlenmemiş değişiklikler içeriyor."
@@ -10380,149 +10638,153 @@ msgstr "accept_thread '%s' başlatılamadı"
 msgid "could not start worker[0] for '%s'"
 msgstr "'%s' için worker[0] başlatılamadı"
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:347
+#: compat/precompose_utf8.c:58 builtin/clone.c:353
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "'%s' bağlantısı kesilemedi"
 
+#: compat/fsmonitor/fsm-listen-darwin.c:355
+msgid "Unable to create FSEventStream."
+msgstr "FSEventStream oluşturulamadı."
+
+#: compat/fsmonitor/fsm-listen-darwin.c:403
+msgid "Failed to start the FSEventStream"
+msgstr "FSEventStream başlatılamadı"
+
 #: builtin/add.c:26
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<seçenekler>] [--] <yol-blrtç>..."
 
-#: builtin/add.c:64
+#: builtin/add.c:63
 #, c-format
 msgid "cannot chmod %cx '%s'"
 msgstr "%cx '%s' chmod yapılamıyor"
 
-#: builtin/add.c:106
+#: builtin/add.c:105
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "beklenmedik diff durumu %c"
 
-#: builtin/add.c:111 builtin/commit.c:298
+#: builtin/add.c:110 builtin/commit.c:299
 msgid "updating files failed"
 msgstr "dosyaları güncelleme başarısız"
 
-#: builtin/add.c:121
+#: builtin/add.c:120
 #, c-format
 msgid "remove '%s'\n"
 msgstr "kaldır: '%s'\n"
 
-#: builtin/add.c:205
+#: builtin/add.c:204
 msgid "Unstaged changes after refreshing the index:"
 msgstr "İndeksi yeniledikten sonra hazırlanmamış değişiklikler:"
 
-#: builtin/add.c:313 builtin/rev-parse.c:993
+#: builtin/add.c:312 builtin/rev-parse.c:993
 msgid "Could not read the index"
 msgstr "İndeks okunamadı"
 
-#: builtin/add.c:326
+#: builtin/add.c:325
 msgid "Could not write patch"
 msgstr "Yama yazılamadı"
 
-#: builtin/add.c:329
+#: builtin/add.c:328
 msgid "editing patch failed"
 msgstr "yamayı düzenleme başarısız"
 
-#: builtin/add.c:332
+#: builtin/add.c:331
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "'%s' dosya bilgileri alınamadı"
 
-#: builtin/add.c:334
+#: builtin/add.c:333
 msgid "Empty patch. Aborted."
 msgstr "Boş yama. İptal edildi."
 
-#: builtin/add.c:340
+#: builtin/add.c:339
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "'%s' uygulanamadı"
 
-#: builtin/add.c:348
+#: builtin/add.c:347
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr ""
 "Aşağıdaki yollar sizin .gitignore dosyalarınızın biri tarafından yok "
 "sayılıyor:\n"
 
-#: builtin/add.c:368 builtin/clean.c:927 builtin/fetch.c:174 builtin/mv.c:124
+#: builtin/add.c:367 builtin/clean.c:927 builtin/fetch.c:175 builtin/mv.c:124
 #: builtin/prune-packed.c:14 builtin/pull.c:208 builtin/push.c:550
-#: builtin/remote.c:1429 builtin/rm.c:244 builtin/send-pack.c:194
+#: builtin/remote.c:1454 builtin/rm.c:244 builtin/send-pack.c:194
 msgid "dry run"
 msgstr "sınama turu"
 
-#: builtin/add.c:369 builtin/check-ignore.c:22 builtin/commit.c:1484
-#: builtin/count-objects.c:98 builtin/fsck.c:789 builtin/log.c:2313
+#: builtin/add.c:368 builtin/check-ignore.c:22 builtin/commit.c:1483
+#: builtin/count-objects.c:98 builtin/fsck.c:789 builtin/log.c:2338
 #: builtin/mv.c:123 builtin/read-tree.c:120
 msgid "be verbose"
 msgstr "ayrıntı ver"
 
-#: builtin/add.c:371
+#: builtin/add.c:370
 msgid "interactive picking"
 msgstr "etkileşimli seçim"
 
-#: builtin/add.c:372 builtin/checkout.c:1581 builtin/reset.c:409
+#: builtin/add.c:371 builtin/checkout.c:1599 builtin/reset.c:417
 msgid "select hunks interactively"
 msgstr "parçaları etkileşimli olarak seç"
 
-#: builtin/add.c:373
+#: builtin/add.c:372
 msgid "edit current diff and apply"
 msgstr "geçerli diff'i düzenle ve uygula"
 
-#: builtin/add.c:374
+#: builtin/add.c:373
 msgid "allow adding otherwise ignored files"
 msgstr "başka türlü yok sayılan dosyaların eklenmesine izin ver"
 
-#: builtin/add.c:375
+#: builtin/add.c:374
 msgid "update tracked files"
 msgstr "izlenen dosyaları güncelle"
 
-#: builtin/add.c:376
+#: builtin/add.c:375
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr "izlenen dosyaların satır sonlarını yeniden olağanlaştır (-u ima eder)"
 
-#: builtin/add.c:377
+#: builtin/add.c:376
 msgid "record only the fact that the path will be added later"
 msgstr "yalnızca yolun sonra ekleneceği gerçeğinin kaydını yaz"
 
-#: builtin/add.c:378
+#: builtin/add.c:377
 msgid "add changes from all tracked and untracked files"
 msgstr "tüm izlenen/izlenmeyen dosyalardan değişiklikleri ekle"
 
-#: builtin/add.c:381
+#: builtin/add.c:380
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr "çalışma ağacında kaldırılan yolları yok say (--no-all ile aynı)"
 
-#: builtin/add.c:383
+#: builtin/add.c:382
 msgid "don't add, only refresh the index"
 msgstr "ekleme, yalnızca indeksi yenile"
 
-#: builtin/add.c:384
+#: builtin/add.c:383
 msgid "just skip files which cannot be added because of errors"
 msgstr "yalnızca hatalardan dolayı eklenemeyen dosyaları atla"
 
-#: builtin/add.c:385
+#: builtin/add.c:384
 msgid "check if - even missing - files are ignored in dry run"
 msgstr ""
 "dosyaların -eksik olsalar bile- sınama turunda yok sayılıp sayılmadığını "
 "denetle"
 
-#: builtin/add.c:386 builtin/mv.c:128 builtin/rm.c:251
+#: builtin/add.c:385 builtin/mv.c:128 builtin/rm.c:251
 msgid "allow updating entries outside of the sparse-checkout cone"
 msgstr "aralıklı çıkış konisi dışındaki girdileri güncellemeye izin ver"
 
-#: builtin/add.c:388 builtin/update-index.c:1004
+#: builtin/add.c:387 builtin/update-index.c:1023
 msgid "override the executable bit of the listed files"
 msgstr "listelenen dosyaların çalıştırılabilir kısımlarını geçersiz kıl"
 
-#: builtin/add.c:390
+#: builtin/add.c:389
 msgid "warn when adding an embedded repository"
 msgstr "gömülü bir depo eklenirken uyar"
 
-#: builtin/add.c:392
-msgid "backend for `git stash -p`"
-msgstr "'git stash -p' için arka uç"
-
-#: builtin/add.c:410
+#: builtin/add.c:407
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -10553,12 +10815,12 @@ msgstr ""
 "\n"
 "Ek bilgi için: \"git help submodule\"."
 
-#: builtin/add.c:439
+#: builtin/add.c:436
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "gömülü git deposu ekleniyor: %s"
 
-#: builtin/add.c:459
+#: builtin/add.c:456
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
@@ -10568,27 +10830,27 @@ msgstr ""
 "Bu iletiyi 'git config advice.addIgnoredFile false'\n"
 "kullanarak kapatabilirsiniz."
 
-#: builtin/add.c:474
+#: builtin/add.c:471
 msgid "adding files failed"
 msgstr "dosya ekleme başarısız"
 
-#: builtin/add.c:548
+#: builtin/add.c:534
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "--chmod param '%s' ya -x ya da +x olmalıdır"
 
-#: builtin/add.c:569 builtin/checkout.c:1751 builtin/commit.c:364
-#: builtin/reset.c:429 builtin/rm.c:275 builtin/stash.c:1713
+#: builtin/add.c:555 builtin/checkout.c:1770 builtin/commit.c:365
+#: builtin/reset.c:436 builtin/rm.c:275 builtin/stash.c:1702
 #, c-format
 msgid "'%s' and pathspec arguments cannot be used together"
 msgstr "'%s' ve yol belirteci argümanları birlikte kullanılamaz"
 
-#: builtin/add.c:580
+#: builtin/add.c:566
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "Hiçbir şey belirtilmedi, hiçbir şey eklenmedi.\n"
 
-#: builtin/add.c:582
+#: builtin/add.c:568
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
@@ -10598,119 +10860,114 @@ msgstr ""
 "Bu iletiyi 'git config advice.addEmptyPathspec false'\n"
 "yaparak kapatabilirsiniz."
 
-#: builtin/am.c:202
-#, c-format
-msgid "Invalid value for --empty: %s"
-msgstr "--empty için geçersiz değer: %s"
-
-#: builtin/am.c:392
+#: builtin/am.c:393
 msgid "could not parse author script"
 msgstr "yazar betiği ayrıştırılamadı"
 
-#: builtin/am.c:482
+#: builtin/am.c:483
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "'%s' applypatch-msg kancası tarafından silindi"
 
-#: builtin/am.c:524
+#: builtin/am.c:525
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Hatalı oluşturulmuş girdi satırı: '%s'."
 
-#: builtin/am.c:562
+#: builtin/am.c:563
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Notların '%s' konumundan '%s' konumuna kopyalanması başarısız"
 
-#: builtin/am.c:588
+#: builtin/am.c:589
 msgid "fseek failed"
 msgstr "fseek başarısız oldu"
 
-#: builtin/am.c:776
+#: builtin/am.c:777
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "'%s' yaması ayrıştırılamadı"
 
-#: builtin/am.c:841
+#: builtin/am.c:842
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Bir kerede yalnızca bir StGIT yama serisi uygulanabilir"
 
-#: builtin/am.c:889
+#: builtin/am.c:890
 msgid "invalid timestamp"
 msgstr "geçersiz zaman damgası"
 
-#: builtin/am.c:894 builtin/am.c:906
+#: builtin/am.c:895 builtin/am.c:907
 msgid "invalid Date line"
 msgstr "geçersiz tarih satırı"
 
-#: builtin/am.c:901
+#: builtin/am.c:902
 msgid "invalid timezone offset"
 msgstr "geçersiz zaman dilimi ofseti"
 
-#: builtin/am.c:994
+#: builtin/am.c:995
 msgid "Patch format detection failed."
 msgstr "Yama biçimi algılaması başarısız."
 
-#: builtin/am.c:999 builtin/clone.c:300
+#: builtin/am.c:1000 builtin/clone.c:306
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "'%s' dizini oluşturulamadı"
 
-#: builtin/am.c:1004
+#: builtin/am.c:1005
 msgid "Failed to split patches."
 msgstr "Yamalar parçalanıp bölünemedi."
 
-#: builtin/am.c:1153
+#: builtin/am.c:1154
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "Bu sorunu çözdüğünüzde \"%s --continue\" çalıştırın."
 
-#: builtin/am.c:1154
+#: builtin/am.c:1155
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "Eğer bu yamayı atlamayı yeğliyorsanız \"%s --skip\" çalıştırın."
 
-#: builtin/am.c:1159
+#: builtin/am.c:1160
 #, c-format
 msgid "To record the empty patch as an empty commit, run \"%s --allow-empty\"."
 msgstr ""
 "Boş yamayı boş işleme kaydı olarak yazmak için \"%s --allow-empty\" "
 "çalıştırın."
 
-#: builtin/am.c:1161
+#: builtin/am.c:1162
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr ""
 "İlk dalı eski durumuna getirip yamalamayı durdurmak için \"%s --abort\" "
 "çalıştır."
 
-#: builtin/am.c:1256
+#: builtin/am.c:1257
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 "Yama format=flowed ile gönderildi; satır sonlarındaki boşluk kaybolmuş "
 "olabilir."
 
-#: builtin/am.c:1344
+#: builtin/am.c:1345
 #, c-format
 msgid "missing author line in commit %s"
 msgstr "%s işlemesinde yazar satırı eksik"
 
-#: builtin/am.c:1347
+#: builtin/am.c:1348
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "geçersiz tanımlama satırı: %.*s"
 
-#: builtin/am.c:1566
+#: builtin/am.c:1567
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr ""
 "Depo 3 yönlü birleştirmeye geri çekilebilme için gereken ikili nesnelere iye "
 "değil."
 
-#: builtin/am.c:1568
+#: builtin/am.c:1569
 msgid "Using index info to reconstruct a base tree..."
 msgstr "Bir temel ağacını yeniden yapmak için indeks bilgisi kullanılıyor..."
 
-#: builtin/am.c:1587
+#: builtin/am.c:1588
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -10718,24 +10975,24 @@ msgstr ""
 "Yamanızı elle mi düzenlediniz?\n"
 "Kendi indeksinde kaydı yazılan ikili nesnelere uygulanamıyor."
 
-#: builtin/am.c:1593
+#: builtin/am.c:1594
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "Temeli yamalamaya ve 3 yönlü birleştirmeye geri çekiliniyor..."
 
-#: builtin/am.c:1619
+#: builtin/am.c:1620
 msgid "Failed to merge in the changes."
 msgstr "Değişiklikler birleştirilemedi."
 
-#: builtin/am.c:1651
+#: builtin/am.c:1652
 msgid "applying to an empty history"
 msgstr "boş bir geçmişe uygulanıyor"
 
-#: builtin/am.c:1703 builtin/am.c:1707
+#: builtin/am.c:1704 builtin/am.c:1708
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "sürdürülemiyor: %s yok."
 
-#: builtin/am.c:1725
+#: builtin/am.c:1726
 msgid "Commit Body is:"
 msgstr "İşleme gövdesi:"
 
@@ -10743,59 +11000,59 @@ msgstr "İşleme gövdesi:"
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1735
+#: builtin/am.c:1736
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr ""
 "Uygula? [y]evet/[n]hayır/düz[e]nle/[v]yamayı görüntüle/tümünü k[a]bul et: "
 
-#: builtin/am.c:1781 builtin/commit.c:409
+#: builtin/am.c:1782 builtin/commit.c:410
 msgid "unable to write index file"
 msgstr "indeks dosyası yazılamıyor"
 
-#: builtin/am.c:1785
+#: builtin/am.c:1786
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Kirli indeks: Yamalar uygulanamıyor (kirli: %s)"
 
-#: builtin/am.c:1827
+#: builtin/am.c:1828
 #, c-format
 msgid "Skipping: %.*s"
-msgstr "Applying: %.*s"
+msgstr "Atlanıyor: %.*s"
 
-#: builtin/am.c:1832
+#: builtin/am.c:1833
 #, c-format
 msgid "Creating an empty commit: %.*s"
 msgstr "Boş bir işleme oluşturuluyor: %.*s"
 
-#: builtin/am.c:1836
+#: builtin/am.c:1837
 msgid "Patch is empty."
 msgstr "Yama boş."
 
-#: builtin/am.c:1847 builtin/am.c:1916
+#: builtin/am.c:1848 builtin/am.c:1917
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Uygulanıyor: %.*s"
 
-#: builtin/am.c:1864
+#: builtin/am.c:1865
 msgid "No changes -- Patch already applied."
 msgstr "Değişiklik yok -- Yama halihazırda uygulandı."
 
-#: builtin/am.c:1870
+#: builtin/am.c:1871
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "Yama şurada başarısız oldu: %s %.*s"
 
-#: builtin/am.c:1874
+#: builtin/am.c:1875
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr ""
 "Başarısız olan yamayı görmek için 'git am --show-current-patch=diff' kullanın"
 
-#: builtin/am.c:1920
+#: builtin/am.c:1921
 msgid "No changes - recorded it as an empty commit."
 msgstr "Değişiklik yok -- boş bir işleme olarak kayıt yazıldı."
 
-#: builtin/am.c:1922
+#: builtin/am.c:1923
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -10805,7 +11062,7 @@ msgstr ""
 "Hazırlanacak başka bir şey kalmadıysa büyük olasılıkla başka bir şey\n"
 "aynı değişiklikleri uygulamış olabilir; bu yamayı atlamak isteyebilirsiniz."
 
-#: builtin/am.c:1930
+#: builtin/am.c:1931
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -10818,17 +11075,17 @@ msgstr ""
 "Bir dosyanın \"onlar sildi\" olduğunu kabul etmek için dosya ile 'git rm' "
 "yapabilirsiniz."
 
-#: builtin/am.c:2038 builtin/am.c:2042 builtin/am.c:2054 builtin/reset.c:448
-#: builtin/reset.c:456
+#: builtin/am.c:2039 builtin/am.c:2043 builtin/am.c:2055 builtin/reset.c:455
+#: builtin/reset.c:463
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "'%s' nesnesi ayrıştırılamadı."
 
-#: builtin/am.c:2090 builtin/am.c:2166
+#: builtin/am.c:2091 builtin/am.c:2167
 msgid "failed to clean index"
 msgstr "indeks temizlenemedi"
 
-#: builtin/am.c:2134
+#: builtin/am.c:2135
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -10836,168 +11093,159 @@ msgstr ""
 "Son 'am' başarısızlığından bu yana HEAD'i hareket ettirmiş görünüyorsunuz.\n"
 "ORIG_HEAD'e geri sarılmıyor."
 
-#: builtin/am.c:2242
-#, c-format
-msgid "Invalid value for --patch-format: %s"
-msgstr "Geçersiz --patch-format değeri: %s"
-
-#: builtin/am.c:2285
-#, c-format
-msgid "Invalid value for --show-current-patch: %s"
-msgstr "--show-current-patch için geçersiz değer: %s"
-
-#: builtin/am.c:2289
+#: builtin/am.c:2292
 #, c-format
 msgid "options '%s=%s' and '%s=%s' cannot be used together"
 msgstr "'%s=%s' ve '%s=%s' seçenekleri birlikte kullanılamaz"
 
-#: builtin/am.c:2320
+#: builtin/am.c:2323
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<seçenekler>] [(<mbox> | <posta-dizin>)...]"
 
-#: builtin/am.c:2321
+#: builtin/am.c:2324
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<seçenekler>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2327
+#: builtin/am.c:2330
 msgid "run interactively"
 msgstr "etkileşimli olarak çalıştır"
 
-#: builtin/am.c:2329
+#: builtin/am.c:2332
 msgid "historical option -- no-op"
 msgstr "tarihi seçenek -- no-op"
 
-#: builtin/am.c:2331
+#: builtin/am.c:2334
 msgid "allow fall back on 3way merging if needed"
 msgstr "gerekirse 3 yönlü birleştirmeye geri çekilmeye izin ver"
 
-#: builtin/am.c:2332 builtin/init-db.c:547 builtin/prune-packed.c:16
-#: builtin/repack.c:642 builtin/stash.c:962
+#: builtin/am.c:2335 builtin/init-db.c:547 builtin/prune-packed.c:16
+#: builtin/repack.c:646 builtin/stash.c:946
 msgid "be quiet"
 msgstr "sessiz ol"
 
-#: builtin/am.c:2334
+#: builtin/am.c:2337
 msgid "add a Signed-off-by trailer to the commit message"
 msgstr "işleme iletisine bir Signed-off-by satırı ekle"
 
-#: builtin/am.c:2337
+#: builtin/am.c:2340
 msgid "recode into utf8 (default)"
 msgstr "utf8 olarak yeniden kodla (öntanımlı)"
 
-#: builtin/am.c:2339
+#: builtin/am.c:2342
 msgid "pass -k flag to git-mailinfo"
 msgstr "'git-mailinfo'ya -k bayrağını geçir"
 
-#: builtin/am.c:2341
+#: builtin/am.c:2344
 msgid "pass -b flag to git-mailinfo"
 msgstr "'git-mailinfo'ya -b bayrağını geçir"
 
-#: builtin/am.c:2343
+#: builtin/am.c:2346
 msgid "pass -m flag to git-mailinfo"
 msgstr "'git-mailinfo'ya -m bayrağını geçir"
 
-#: builtin/am.c:2345
+#: builtin/am.c:2348
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "'git-mailsplit'e mbox biçimi için --keep-cr bayrağını geçir"
 
-#: builtin/am.c:2348
+#: builtin/am.c:2351
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr ""
 "'git-mailsplit'e 'am.keepcr'dan bağımsız olarak --keep-cr bayrağını geçirme"
 
-#: builtin/am.c:2351
+#: builtin/am.c:2354
 msgid "strip everything before a scissors line"
 msgstr "bir kesim çizgisinden önceki her şeyi çıkar"
 
-#: builtin/am.c:2353
+#: builtin/am.c:2356
 msgid "pass it through git-mailinfo"
 msgstr "git-mailinfo içerisinden geçir"
 
-#: builtin/am.c:2356 builtin/am.c:2359 builtin/am.c:2362 builtin/am.c:2365
-#: builtin/am.c:2368 builtin/am.c:2371 builtin/am.c:2374 builtin/am.c:2377
-#: builtin/am.c:2383
+#: builtin/am.c:2359 builtin/am.c:2362 builtin/am.c:2365 builtin/am.c:2368
+#: builtin/am.c:2371 builtin/am.c:2374 builtin/am.c:2377 builtin/am.c:2380
+#: builtin/am.c:2386
 msgid "pass it through git-apply"
 msgstr "git-apply aracılığıyla geçir"
 
-#: builtin/am.c:2373 builtin/commit.c:1515 builtin/fmt-merge-msg.c:18
-#: builtin/fmt-merge-msg.c:21 builtin/grep.c:919 builtin/merge.c:263
+#: builtin/am.c:2376 builtin/commit.c:1514 builtin/fmt-merge-msg.c:18
+#: builtin/fmt-merge-msg.c:21 builtin/grep.c:920 builtin/merge.c:263
 #: builtin/pull.c:142 builtin/pull.c:204 builtin/pull.c:221
-#: builtin/rebase.c:1046 builtin/repack.c:653 builtin/repack.c:657
-#: builtin/repack.c:659 builtin/show-branch.c:649 builtin/show-ref.c:172
-#: builtin/tag.c:445 parse-options.h:154 parse-options.h:175
-#: parse-options.h:317
+#: builtin/rebase.c:1074 builtin/repack.c:657 builtin/repack.c:661
+#: builtin/repack.c:663 builtin/show-branch.c:650 builtin/show-ref.c:172
+#: builtin/tag.c:446 parse-options.h:159 parse-options.h:180
+#: parse-options.h:348
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2379 builtin/branch.c:680 builtin/bugreport.c:109
-#: builtin/for-each-ref.c:41 builtin/replace.c:555 builtin/tag.c:479
-#: builtin/verify-tag.c:38
+#: builtin/am.c:2382 builtin/branch.c:695 builtin/bugreport.c:109
+#: builtin/cat-file.c:848 builtin/cat-file.c:852 builtin/cat-file.c:856
+#: builtin/for-each-ref.c:41 builtin/ls-tree.c:357 builtin/replace.c:555
+#: builtin/tag.c:480 builtin/verify-tag.c:38
 msgid "format"
 msgstr "biçim"
 
-#: builtin/am.c:2380
+#: builtin/am.c:2383
 msgid "format the patch(es) are in"
 msgstr "yama biçimi"
 
-#: builtin/am.c:2386
+#: builtin/am.c:2389
 msgid "override error message when patch failure occurs"
 msgstr "yama başarısız olduğunda hata iletisini geçersiz kıl"
 
-#: builtin/am.c:2388
+#: builtin/am.c:2391
 msgid "continue applying patches after resolving a conflict"
 msgstr "bir çakışmayı çözdükten sonra yamaları uygulamayı sürdür"
 
-#: builtin/am.c:2391
+#: builtin/am.c:2394
 msgid "synonyms for --continue"
 msgstr "--continue eşanlamlıları"
 
-#: builtin/am.c:2394
+#: builtin/am.c:2397
 msgid "skip the current patch"
 msgstr "geçerli yamayı atla"
 
-#: builtin/am.c:2397
+#: builtin/am.c:2400
 msgid "restore the original branch and abort the patching operation"
 msgstr "orijinal dalı eski durumuna getir ve yamalama işlemini iptal et"
 
-#: builtin/am.c:2400
+#: builtin/am.c:2403
 msgid "abort the patching operation but keep HEAD where it is"
 msgstr "yamalama işlemini iptal et; ancak HEAD'i olduğu yerde bırak"
 
-#: builtin/am.c:2404
+#: builtin/am.c:2407
 msgid "show the patch being applied"
 msgstr "uygulanmakta olan yamayı göster"
 
-#: builtin/am.c:2408
+#: builtin/am.c:2411
 msgid "record the empty patch as an empty commit"
 msgstr "boş yamayı bir boş işleme olarak kayıt yaz"
 
-#: builtin/am.c:2412
+#: builtin/am.c:2415
 msgid "lie about committer date"
 msgstr "işleyici tarihi hakkında yalan söyle"
 
-#: builtin/am.c:2414
+#: builtin/am.c:2417
 msgid "use current timestamp for author date"
 msgstr "yazar tarihi için geçerli zaman damgasını kullan"
 
-#: builtin/am.c:2416 builtin/commit-tree.c:118 builtin/commit.c:1643
-#: builtin/merge.c:302 builtin/pull.c:179 builtin/rebase.c:1099
-#: builtin/revert.c:117 builtin/tag.c:460
+#: builtin/am.c:2419 builtin/commit-tree.c:118 builtin/commit.c:1642
+#: builtin/merge.c:302 builtin/pull.c:179 builtin/rebase.c:1127
+#: builtin/revert.c:117 builtin/tag.c:461
 msgid "key-id"
 msgstr "key-id"
 
-#: builtin/am.c:2417 builtin/rebase.c:1100
+#: builtin/am.c:2420 builtin/rebase.c:1128
 msgid "GPG-sign commits"
 msgstr "GPG imzalı işlemeler"
 
-#: builtin/am.c:2420
+#: builtin/am.c:2423
 msgid "how to handle empty patches"
 msgstr "boş yamaların nasıl değerlendirileceği"
 
-#: builtin/am.c:2423
+#: builtin/am.c:2426
 msgid "(internal use for git-rebase)"
 msgstr "(git-rebase için iç kullanım)"
 
-#: builtin/am.c:2441
+#: builtin/am.c:2444
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
@@ -11005,17 +11253,17 @@ msgstr ""
 "-b/--binary seçeneği uzunca bir süredir düzgün çalışmıyordu ve\n"
 "yakında kaldırılacak. Lütfen artık kullanmayın."
 
-#: builtin/am.c:2448
+#: builtin/am.c:2451
 msgid "failed to read the index"
 msgstr "indeks okunamadı"
 
-#: builtin/am.c:2463
+#: builtin/am.c:2466
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr ""
 "Bir önceki yeniden temellendirme dizini %s hâlâ mevcut; ancak mbox verildi."
 
-#: builtin/am.c:2487
+#: builtin/am.c:2490
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -11024,11 +11272,11 @@ msgstr ""
 "Başıboş %s dizini bulundu.\n"
 "Kaldırmak için \"git am --abort\" kullanın."
 
-#: builtin/am.c:2493
+#: builtin/am.c:2496
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "İlerlemekte olan bir çözüm işlemi yok, sürdürme yapmıyoruz."
 
-#: builtin/am.c:2503
+#: builtin/am.c:2506
 msgid "interactive mode requires patches on the command line"
 msgstr "etkileşimli kip yamanın komut satırında olmasını gerektirir"
 
@@ -11065,14 +11313,6 @@ msgstr "git archive: Floş bekleniyordu"
 msgid "git bisect--helper --bisect-reset [<commit>]"
 msgstr "git bisect--helper --bisect-reset [<işleme>]"
 
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
-msgstr ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
-
 #: builtin/bisect--helper.c:26
 msgid ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
@@ -11083,10 +11323,6 @@ msgstr ""
 "=<terim>] [--no-checkout] [--first-parent] [<kötü> [<iyi>...]] [--] "
 "[<yollar>...]"
 
-#: builtin/bisect--helper.c:28
-msgid "git bisect--helper --bisect-next"
-msgstr "git bisect--helper --bisect-next"
-
 #: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr "git bisect--helper --bisect-state (bad|new) [<rev>]"
@@ -11103,10 +11339,6 @@ msgstr "git bisect--helper --bisect-replay <dosyaadı>"
 msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
 msgstr "git bisect--helper --bisect-skip [(<rev>|<erim>)...]"
 
-#: builtin/bisect--helper.c:33
-msgid "git bisect--helper --bisect-visualize"
-msgstr "git bisect--helper --bisect-visualize"
-
 #: builtin/bisect--helper.c:34
 msgid "git bisect--helper --bisect-run <cmd>..."
 msgstr "git bisect--helper --bisect-run <komut>..."
@@ -11327,41 +11559,51 @@ msgstr "'%s'?? ney ney?"
 msgid "cannot read file '%s' for replaying"
 msgstr "'%s' dosyası yeniden oynatım için okunamıyor"
 
-#: builtin/bisect--helper.c:1107 builtin/bisect--helper.c:1274
+#: builtin/bisect--helper.c:1120 builtin/bisect--helper.c:1152
+#, c-format
+msgid "running %s\n"
+msgstr "%s çalıştırılıyor\n"
+
+#: builtin/bisect--helper.c:1145 builtin/bisect--helper.c:1335
 msgid "bisect run failed: no command provided."
 msgstr "ikili arama başarısız: Komut verilmedi."
 
-#: builtin/bisect--helper.c:1116
+#: builtin/bisect--helper.c:1166
 #, c-format
-msgid "running %s\n"
-msgstr "%s çalıştırılıyor\n"
+msgid "unable to verify '%s' on good revision"
+msgstr "'%s', iyi revizyonda doğrulanamadı"
+
+#: builtin/bisect--helper.c:1172
+#, c-format
+msgid "bogus exit code %d for good revision"
+msgstr "iyi revizyon için anlamsız %d çıkış kodu"
 
-#: builtin/bisect--helper.c:1120
+#: builtin/bisect--helper.c:1180
 #, c-format
 msgid "bisect run failed: exit code %d from '%s' is < 0 or >= 128"
 msgstr ""
 "bisect çalıştırılamadı: çıkış kodu %d, '%s' konumundan, < 0 veya >= 128"
 
-#: builtin/bisect--helper.c:1136
+#: builtin/bisect--helper.c:1195
 #, c-format
 msgid "cannot open file '%s' for writing"
 msgstr "'%s' dosyası yazma için açılamadı"
 
-#: builtin/bisect--helper.c:1152
+#: builtin/bisect--helper.c:1213
 msgid "bisect run cannot continue any more"
 msgstr "ikili arama artık çalışmayı sürdüremiyor"
 
-#: builtin/bisect--helper.c:1154
+#: builtin/bisect--helper.c:1215
 #, c-format
 msgid "bisect run success"
 msgstr "ikili arama başarılı"
 
-#: builtin/bisect--helper.c:1157
+#: builtin/bisect--helper.c:1218
 #, c-format
 msgid "bisect found first bad commit"
 msgstr "ikili arama ilk hatalı işlemeyi buldu"
 
-#: builtin/bisect--helper.c:1160
+#: builtin/bisect--helper.c:1221
 #, c-format
 msgid ""
 "bisect run failed: 'git bisect--helper --bisect-state %s' exited with error "
@@ -11370,71 +11612,71 @@ msgstr ""
 "ikili arama çalıştırılamadı: 'git bisect--helper --bisect-state %s', %d hata "
 "koduyla çıktı"
 
-#: builtin/bisect--helper.c:1192
+#: builtin/bisect--helper.c:1253
 msgid "reset the bisection state"
 msgstr "ikili arama durumunu sıfırla"
 
-#: builtin/bisect--helper.c:1194
+#: builtin/bisect--helper.c:1255
 msgid "check whether bad or good terms exist"
 msgstr "iyi veya kötü terimlerin olup olmadığını denetle"
 
-#: builtin/bisect--helper.c:1196
+#: builtin/bisect--helper.c:1257
 msgid "print out the bisect terms"
 msgstr "ikili arama terimlerini yazdır"
 
-#: builtin/bisect--helper.c:1198
+#: builtin/bisect--helper.c:1259
 msgid "start the bisect session"
 msgstr "ikili arama oturumunu başlat"
 
-#: builtin/bisect--helper.c:1200
+#: builtin/bisect--helper.c:1261
 msgid "find the next bisection commit"
 msgstr "bir sonraki ikili arama işlemesini bul"
 
-#: builtin/bisect--helper.c:1202
+#: builtin/bisect--helper.c:1263
 msgid "mark the state of ref (or refs)"
 msgstr "başvurunun (veya başvuruların) durumunu imle"
 
-#: builtin/bisect--helper.c:1204
+#: builtin/bisect--helper.c:1265
 msgid "list the bisection steps so far"
 msgstr "şu ana kadarki ikili arama durumunu listele"
 
-#: builtin/bisect--helper.c:1206
+#: builtin/bisect--helper.c:1267
 msgid "replay the bisection process from the given file"
 msgstr "verilen dosyadan ikili arama işlemini yeniden oynat"
 
-#: builtin/bisect--helper.c:1208
+#: builtin/bisect--helper.c:1269
 msgid "skip some commits for checkout"
 msgstr "çıkış için birkaç işlemeyi atla"
 
-#: builtin/bisect--helper.c:1210
+#: builtin/bisect--helper.c:1271
 msgid "visualize the bisection"
 msgstr "ikili aramayı görselleştir"
 
-#: builtin/bisect--helper.c:1212
-msgid "use <cmd>... to automatically bisect."
+#: builtin/bisect--helper.c:1273
+msgid "use <cmd>... to automatically bisect"
 msgstr "kendiliğinden ikili aramak için <komut>... kullan"
 
-#: builtin/bisect--helper.c:1214
+#: builtin/bisect--helper.c:1275
 msgid "no log for BISECT_WRITE"
 msgstr "BISECT_WRITE için günlük yok"
 
-#: builtin/bisect--helper.c:1229
+#: builtin/bisect--helper.c:1290
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr "--bisect-reset bir argüman veya işleme gerektirmiyor"
 
-#: builtin/bisect--helper.c:1234
+#: builtin/bisect--helper.c:1295
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms 0 veya 1 argüman gerektiriyor"
 
-#: builtin/bisect--helper.c:1243
+#: builtin/bisect--helper.c:1304
 msgid "--bisect-next requires 0 arguments"
 msgstr "--bisect-next 0 argüman gerektiriyor"
 
-#: builtin/bisect--helper.c:1254
+#: builtin/bisect--helper.c:1315
 msgid "--bisect-log requires 0 arguments"
 msgstr "--bisect-log 0 argüman gerektiriyor"
 
-#: builtin/bisect--helper.c:1259
+#: builtin/bisect--helper.c:1320
 msgid "no logfile given"
 msgstr "hiçbir günlük dosyası verilmedi"
 
@@ -11455,143 +11697,134 @@ msgstr "bir renk bekleniyor: %s"
 msgid "must end with a color"
 msgstr "bir renk ile bitmeli"
 
-#: builtin/blame.c:724
-#, c-format
-msgid "invalid color '%s' in color.blame.repeatedLines"
-msgstr "color.blame.repeatedLines içinde geçersiz renk '%s'"
-
-#: builtin/blame.c:742
-msgid "invalid value for blame.coloring"
-msgstr "blame.coloring için geçersiz değer"
-
-#: builtin/blame.c:841
+#: builtin/blame.c:842
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "yok saymak için %s revizyonu bulunamıyor"
 
-#: builtin/blame.c:863
+#: builtin/blame.c:864
 msgid "show blame entries as we find them, incrementally"
 msgstr "genel bakış girdilerini biz buldukça artan biçimde göster"
 
-#: builtin/blame.c:864
+#: builtin/blame.c:865
 msgid "do not show object names of boundary commits (Default: off)"
 msgstr "sınır işlemeleri için nesne adlarını gösterme (Öntanımlı: Kapalı)"
 
-#: builtin/blame.c:865
+#: builtin/blame.c:866
 msgid "do not treat root commits as boundaries (Default: off)"
 msgstr "kök işlemelerini sınır olarak değerlendirme (Öntanımlı: Kapalı)"
 
-#: builtin/blame.c:866
+#: builtin/blame.c:867
 msgid "show work cost statistics"
 msgstr "iş maliyet istatistiklerini göster"
 
-#: builtin/blame.c:867 builtin/checkout.c:1536 builtin/clone.c:94
-#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:180
+#: builtin/blame.c:868 builtin/checkout.c:1554 builtin/clone.c:98
+#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:181
 #: builtin/merge.c:301 builtin/multi-pack-index.c:103
 #: builtin/multi-pack-index.c:154 builtin/multi-pack-index.c:180
 #: builtin/multi-pack-index.c:208 builtin/pull.c:120 builtin/push.c:566
-#: builtin/send-pack.c:202
+#: builtin/remote.c:683 builtin/send-pack.c:202
 msgid "force progress reporting"
 msgstr "durum belirtmeyi zorla"
 
-#: builtin/blame.c:868
+#: builtin/blame.c:869
 msgid "show output score for blame entries"
 msgstr "genel bakış girdileri için çıktı skorunu göster"
 
-#: builtin/blame.c:869
+#: builtin/blame.c:870
 msgid "show original filename (Default: auto)"
 msgstr "orijinal dosya adını göster (Öntanımlı: Otomatik)"
 
-#: builtin/blame.c:870
+#: builtin/blame.c:871
 msgid "show original linenumber (Default: off)"
 msgstr "orijinal satır numarasını göster (Öntanımlı: Kapalı)"
 
-#: builtin/blame.c:871
+#: builtin/blame.c:872
 msgid "show in a format designed for machine consumption"
 msgstr "makine işlemesi için tasarlanmış bir biçimde göster"
 
-#: builtin/blame.c:872
+#: builtin/blame.c:873
 msgid "show porcelain format with per-line commit information"
 msgstr "okunabilir biçimde her satır için işleme bilgisi ile göster"
 
-#: builtin/blame.c:873
+#: builtin/blame.c:874
 msgid "use the same output mode as git-annotate (Default: off)"
 msgstr "git-annotate ile aynı çıktı kipini kullan (Öntanımlı: Kapalı)"
 
-#: builtin/blame.c:874
+#: builtin/blame.c:875
 msgid "show raw timestamp (Default: off)"
 msgstr "ham zaman damgasını göster (Öntanımlı: Kapalı)"
 
-#: builtin/blame.c:875
+#: builtin/blame.c:876
 msgid "show long commit SHA1 (Default: off)"
 msgstr "uzun işleme SHA1'ini göster (Öntanımlı: Kapalı)"
 
-#: builtin/blame.c:876
+#: builtin/blame.c:877
 msgid "suppress author name and timestamp (Default: off)"
 msgstr "yazar adını ve zaman damgasını gizle (Öntanımlı: Kapalı)"
 
-#: builtin/blame.c:877
+#: builtin/blame.c:878
 msgid "show author email instead of name (Default: off)"
 msgstr "yazar adı yerine e-postasını göster (Öntanımlı: Kapalı)"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:879
 msgid "ignore whitespace differences"
 msgstr "boşluk ayrımlarını yok say"
 
-#: builtin/blame.c:879 builtin/log.c:1838
+#: builtin/blame.c:880 builtin/log.c:1857
 msgid "rev"
 msgstr "revizyon"
 
-#: builtin/blame.c:879
+#: builtin/blame.c:880
 msgid "ignore <rev> when blaming"
 msgstr "suçlarken <revizyon>'u yok say"
 
-#: builtin/blame.c:880
+#: builtin/blame.c:881
 msgid "ignore revisions from <file>"
 msgstr "<dosya>'dan olan revizyonları yok say"
 
-#: builtin/blame.c:881
+#: builtin/blame.c:882
 msgid "color redundant metadata from previous line differently"
 msgstr "bir önceki dosyadan gereksiz üstveriyi başka biçimde renklendir"
 
-#: builtin/blame.c:882
+#: builtin/blame.c:883
 msgid "color lines by age"
 msgstr "satırları yaşına göre renklendir"
 
-#: builtin/blame.c:883
+#: builtin/blame.c:884
 msgid "spend extra cycles to find better match"
 msgstr "daha iyi eşleşme bulmak için ek döngüler harca"
 
-#: builtin/blame.c:884
+#: builtin/blame.c:885
 msgid "use revisions from <file> instead of calling git-rev-list"
 msgstr "git-rev-list çağırma yerine <dosya>'dan olan revizyonları kullan"
 
-#: builtin/blame.c:885
+#: builtin/blame.c:886
 msgid "use <file>'s contents as the final image"
 msgstr "<dosya>'nın içeriğini son görüntü olarak kullan"
 
-#: builtin/blame.c:886 builtin/blame.c:887
+#: builtin/blame.c:887 builtin/blame.c:888
 msgid "score"
 msgstr "skor"
 
-#: builtin/blame.c:886
+#: builtin/blame.c:887
 msgid "find line copies within and across files"
 msgstr "satır kopyalarını dosyaların içinde ve aralarında ara"
 
-#: builtin/blame.c:887
+#: builtin/blame.c:888
 msgid "find line movements within and across files"
 msgstr "satır hareketlerini dosyaların içinde ve aralarında ara"
 
-#: builtin/blame.c:888
+#: builtin/blame.c:889
 msgid "range"
 msgstr "erim"
 
-#: builtin/blame.c:889
+#: builtin/blame.c:890
 msgid "process only line range <start>,<end> or function :<funcname>"
 msgstr ""
 "Yalnızca <başlangıç>,<bitiş> satır erimini veya :<işlevadı> işlevini işle"
 
-#: builtin/blame.c:947
+#: builtin/blame.c:949
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr "--progress, --incremental veya okunabilir biçimlerle kullanılamaz"
 
@@ -11603,18 +11836,18 @@ msgstr "--progress, --incremental veya okunabilir biçimlerle kullanılamaz"
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:998
+#: builtin/blame.c:1000
 msgid "4 years, 11 months ago"
 msgstr "4 yıl 11 ay önce"
 
-#: builtin/blame.c:1114
+#: builtin/blame.c:1116
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] "%s dosyasında yalnızca %lu satır var"
 msgstr[1] "%s dosyasında yalnızca %lu satır var"
 
-#: builtin/blame.c:1159
+#: builtin/blame.c:1161
 msgid "Blaming lines"
 msgstr "Genel bakış satırları"
 
@@ -11623,30 +11856,38 @@ msgid "git branch [<options>] [-r | -a] [--merged] [--no-merged]"
 msgstr "git branch [<seçenekler>] [-r | -a] [--merged] [--no-merged]"
 
 #: builtin/branch.c:30
-msgid "git branch [<options>] [-l] [-f] <branch-name> [<start-point>]"
-msgstr "git branch [<seçenekler>] [-l] [-f] <dal-adı> [<başlama-noktası>]"
+msgid ""
+"git branch [<options>] [-f] [--recurse-submodules] <branch-name> [<start-"
+"point>]"
+msgstr ""
+"git branch [<seçenekler>] [-f] [--recurse-submodules] <dal-adı> [<başlangıç-"
+"noktası>]"
 
 #: builtin/branch.c:31
+msgid "git branch [<options>] [-l] [<pattern>...]"
+msgstr "git branch [<seçenekler>] [-l] [<dizgi>...]"
+
+#: builtin/branch.c:32
 msgid "git branch [<options>] [-r] (-d | -D) <branch-name>..."
 msgstr "git branch [<seçenekler>] [-r] (-d | -D) <dal-adı>..."
 
-#: builtin/branch.c:32
+#: builtin/branch.c:33
 msgid "git branch [<options>] (-m | -M) [<old-branch>] <new-branch>"
 msgstr "git branch [<seçenekler>] (-m | -M) [<eski-dal>] <yeni-dal>"
 
-#: builtin/branch.c:33
+#: builtin/branch.c:34
 msgid "git branch [<options>] (-c | -C) [<old-branch>] <new-branch>"
 msgstr "git branch [<seçenekler>] (-c | -C) [<eski-dal>] <yeni-dal>"
 
-#: builtin/branch.c:34
+#: builtin/branch.c:35
 msgid "git branch [<options>] [-r | -a] [--points-at]"
 msgstr "git branch [<seçenekler>] [-r | -a] [--points-at]"
 
-#: builtin/branch.c:35
+#: builtin/branch.c:36
 msgid "git branch [<options>] [-r | -a] [--format]"
 msgstr "git branch [<seçenekler>] [-r | -a] [--format]"
 
-#: builtin/branch.c:153
+#: builtin/branch.c:165
 #, c-format
 msgid ""
 "deleting branch '%s' that has been merged to\n"
@@ -11655,7 +11896,7 @@ msgstr ""
 "'%s' dalı siliniyor: Bu dal '%s'\n"
 "         dalına birleştirilmiş; ancak HEAD'e henüz birleştirilmemiş."
 
-#: builtin/branch.c:157
+#: builtin/branch.c:169
 #, c-format
 msgid ""
 "not deleting branch '%s' that is not yet merged to\n"
@@ -11664,12 +11905,12 @@ msgstr ""
 "'%s' dalı silinmiyor: Bu dal HEAD'e birleştirilmiş olmasına rağmen\n"
 "         '%s' dalına birleştirilmemiş."
 
-#: builtin/branch.c:171
+#: builtin/branch.c:183
 #, c-format
 msgid "Couldn't look up commit object for '%s'"
 msgstr "'%s' için işleme nesnesi aranamadı"
 
-#: builtin/branch.c:175
+#: builtin/branch.c:187
 #, c-format
 msgid ""
 "The branch '%s' is not fully merged.\n"
@@ -11678,111 +11919,111 @@ msgstr ""
 "'%s' dalı tümüyle birleştirilmemiş.\n"
 "Eğer silmek istediğinizden eminseniz 'git branch -D %s' çalıştırın."
 
-#: builtin/branch.c:188
+#: builtin/branch.c:200
 msgid "Update of config-file failed"
 msgstr "config-file güncellemesi başarısız"
 
-#: builtin/branch.c:223
+#: builtin/branch.c:235
 msgid "cannot use -a with -d"
 msgstr "-a, -d ile kullanılamıyor"
 
-#: builtin/branch.c:230
+#: builtin/branch.c:242
 msgid "Couldn't look up commit object for HEAD"
 msgstr "HEAD için işleme nesnesi aranamadı."
 
-#: builtin/branch.c:247
+#: builtin/branch.c:259
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr "'%s' dalı silinemiyor, şurada çıkış yapılmış: '%s'."
 
-#: builtin/branch.c:262
+#: builtin/branch.c:274
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "Uzak izleme dalı '%s' bulunamadı."
 
-#: builtin/branch.c:263
+#: builtin/branch.c:275
 #, c-format
 msgid "branch '%s' not found."
 msgstr "'%s' dalı bulunamadı."
 
-#: builtin/branch.c:294
+#: builtin/branch.c:306
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "Uzak izleme dalı %s silindi (%s idi).\n"
 
-#: builtin/branch.c:295
+#: builtin/branch.c:307
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "%s dalı silindi (%s idi).\n"
 
-#: builtin/branch.c:445 builtin/tag.c:63
+#: builtin/branch.c:457 builtin/tag.c:64
 msgid "unable to parse format string"
 msgstr "biçim dizisi ayrıştırılamıyor"
 
-#: builtin/branch.c:476
+#: builtin/branch.c:488
 msgid "could not resolve HEAD"
 msgstr "HEAD çözülemedi"
 
-#: builtin/branch.c:482
+#: builtin/branch.c:494
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "HEAD (%s), refs/heads/ dışına işaret ediyor"
 
-#: builtin/branch.c:497
+#: builtin/branch.c:509
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "%s dalı %s konumunda yeniden temellendiriliyor"
 
-#: builtin/branch.c:501
+#: builtin/branch.c:513
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "%s dalı %s konumunda ikili aranıyor"
 
-#: builtin/branch.c:518
+#: builtin/branch.c:530
 msgid "cannot copy the current branch while not on any."
 msgstr "Bir dalın üzerinde değilken geçerli dal kopyalanamaz."
 
-#: builtin/branch.c:520
+#: builtin/branch.c:532
 msgid "cannot rename the current branch while not on any."
 msgstr "Bir dalın üzerinde değilken geçerli dal yeniden adlandırılamaz."
 
-#: builtin/branch.c:531
+#: builtin/branch.c:543
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Geçersiz dal adı: '%s'"
 
-#: builtin/branch.c:560
+#: builtin/branch.c:572
 msgid "Branch rename failed"
 msgstr "Dal yeniden adlandırması başarısız"
 
-#: builtin/branch.c:562
+#: builtin/branch.c:574
 msgid "Branch copy failed"
 msgstr "Dal kopyalaması başarısız"
 
-#: builtin/branch.c:566
+#: builtin/branch.c:578
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "Yanlış adlandırılan '%s' dalının bir kopyası oluşturuldu"
 
-#: builtin/branch.c:569
+#: builtin/branch.c:581
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "Yanlış adlandırılan '%s' dalı yeniden adlandırıldı"
 
-#: builtin/branch.c:575
+#: builtin/branch.c:587
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "Dal %s olarak yeniden adlandırıldı; ancak HEAD güncellenmedi!"
 
-#: builtin/branch.c:584
+#: builtin/branch.c:596
 msgid "Branch is renamed, but update of config-file failed"
 msgstr "Dal yeniden adlandırıldı; ancak config-file güncellemesi başarısız"
 
-#: builtin/branch.c:586
+#: builtin/branch.c:598
 msgid "Branch is copied, but update of config-file failed"
 msgstr "Dal kopyalandı; ancak config-file güncellemesi başarısız"
 
-#: builtin/branch.c:602
+#: builtin/branch.c:614
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -11793,176 +12034,193 @@ msgstr ""
 "\t%s\n"
 "'%c' ile başlayan satırlar çıkarılacaktır.\n"
 
-#: builtin/branch.c:637
+#: builtin/branch.c:651
 msgid "Generic options"
 msgstr "Genel seçenekler"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:653
 msgid "show hash and subject, give twice for upstream branch"
 msgstr "sağlamayı ve konuyu göster, üstkaynak dalı için iki kez ver"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:654
 msgid "suppress informational messages"
 msgstr "bilgi iletilerini gizle"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:656 builtin/checkout.c:1571
+#: builtin/submodule--helper.c:3077
 msgid "set branch tracking configuration"
 msgstr "dal izleme yapılandırmasını ayarla"
 
-#: builtin/branch.c:645
+#: builtin/branch.c:659
 msgid "do not use"
 msgstr "kullanma"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:661
 msgid "upstream"
 msgstr "üstkaynak"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:661
 msgid "change the upstream info"
 msgstr "üstkaynak bilgisini değiştir"
 
-#: builtin/branch.c:648
+#: builtin/branch.c:662
 msgid "unset the upstream info"
 msgstr "üstkaynak bilgisini kaldır"
 
-#: builtin/branch.c:649
+#: builtin/branch.c:663
 msgid "use colored output"
 msgstr "renklendirilmiş çıktı kullan"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:664
 msgid "act on remote-tracking branches"
 msgstr "uzak izleme dallarında iş yap"
 
-#: builtin/branch.c:652 builtin/branch.c:654
+#: builtin/branch.c:666 builtin/branch.c:668
 msgid "print only branches that contain the commit"
 msgstr "yalnızca işlemeyi içeren dalları yazdır"
 
-#: builtin/branch.c:653 builtin/branch.c:655
+#: builtin/branch.c:667 builtin/branch.c:669
 msgid "print only branches that don't contain the commit"
 msgstr "yalnızca işlemeyi içermeyen dalları yazdır"
 
-#: builtin/branch.c:658
+#: builtin/branch.c:672
 msgid "Specific git-branch actions:"
 msgstr "Özel git-branch eylemleri:"
 
-#: builtin/branch.c:659
+#: builtin/branch.c:673
 msgid "list both remote-tracking and local branches"
 msgstr "hem uzak izleme hem de yerel dalları listele"
 
-#: builtin/branch.c:661
+#: builtin/branch.c:675
 msgid "delete fully merged branch"
 msgstr "tümüyle birleştirilen dalı sil"
 
-#: builtin/branch.c:662
+#: builtin/branch.c:676
 msgid "delete branch (even if not merged)"
 msgstr "dalı sil (birleştirilmemiş olsa bile)"
 
-#: builtin/branch.c:663
+#: builtin/branch.c:677
 msgid "move/rename a branch and its reflog"
 msgstr "bir dalı ve onun başvuru günlüğünü taşı/yeniden adlandır"
 
-#: builtin/branch.c:664
+#: builtin/branch.c:678
 msgid "move/rename a branch, even if target exists"
 msgstr "bir dalı taşı/yeniden adlandır, hedef var olsa bile"
 
-#: builtin/branch.c:665
+#: builtin/branch.c:679
 msgid "copy a branch and its reflog"
 msgstr "bir dalı ve onun başvuru günlüğünü kopyala"
 
-#: builtin/branch.c:666
+#: builtin/branch.c:680
 msgid "copy a branch, even if target exists"
 msgstr "bir dalı kopyala, hedef var olsa bile"
 
-#: builtin/branch.c:667
+#: builtin/branch.c:681
 msgid "list branch names"
 msgstr "dal adlarını listele"
 
-#: builtin/branch.c:668
+#: builtin/branch.c:682
 msgid "show current branch name"
 msgstr "geçerli dal adını göster"
 
-#: builtin/branch.c:669
+#: builtin/branch.c:683 builtin/submodule--helper.c:3075
 msgid "create the branch's reflog"
 msgstr "dalın başvuru günlüğünü oluştur"
 
-#: builtin/branch.c:671
+#: builtin/branch.c:685
 msgid "edit the description for the branch"
 msgstr "dalın açıklamasını düzenle"
 
-#: builtin/branch.c:672
+#: builtin/branch.c:686
 msgid "force creation, move/rename, deletion"
 msgstr "zorla oluştur, taşı/yeniden adlandır, sil"
 
-#: builtin/branch.c:673
+#: builtin/branch.c:687
 msgid "print only branches that are merged"
 msgstr "yalnızca birleştirilen dalları yazdır"
 
-#: builtin/branch.c:674
+#: builtin/branch.c:688
 msgid "print only branches that are not merged"
 msgstr "yalnızca birleştirilmeyen dalları yazdır"
 
-#: builtin/branch.c:675
+#: builtin/branch.c:689
 msgid "list branches in columns"
 msgstr "dalları sütunlarla listele"
 
-#: builtin/branch.c:677 builtin/for-each-ref.c:45 builtin/notes.c:413
+#: builtin/branch.c:691 builtin/for-each-ref.c:45 builtin/notes.c:413
 #: builtin/notes.c:416 builtin/notes.c:579 builtin/notes.c:582
-#: builtin/tag.c:475
+#: builtin/tag.c:476
 msgid "object"
 msgstr "nesne"
 
-#: builtin/branch.c:678
+#: builtin/branch.c:692
 msgid "print only branches of the object"
 msgstr "yalnızca nesnenin dallarını yazdır"
 
-#: builtin/branch.c:679 builtin/for-each-ref.c:51 builtin/tag.c:482
+#: builtin/branch.c:693 builtin/for-each-ref.c:51 builtin/tag.c:483
 msgid "sorting and filtering are case insensitive"
 msgstr "sıralama ve süzme BÜYÜK/küçük harf duyarlı değildir"
 
-#: builtin/branch.c:680 builtin/for-each-ref.c:41 builtin/tag.c:480
-#: builtin/verify-tag.c:38
+#: builtin/branch.c:694 builtin/ls-files.c:667
+msgid "recurse through submodules"
+msgstr "altmodüller içinden özyinele"
+
+#: builtin/branch.c:695 builtin/for-each-ref.c:41 builtin/ls-tree.c:358
+#: builtin/tag.c:481 builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "çıktı için kullanılacak biçim"
 
-#: builtin/branch.c:703 builtin/clone.c:678
+#: builtin/branch.c:718 builtin/clone.c:684
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD, refs/heads altında bulunamadı!"
 
-#: builtin/branch.c:742 builtin/branch.c:798 builtin/branch.c:807
+#: builtin/branch.c:739
+msgid ""
+"branch with --recurse-submodules can only be used if submodule."
+"propagateBranches is enabled"
+msgstr ""
+"--recurse-submodules ile dallanma, yalnızca submodule.propagateBranches "
+"etkinleştirilmişse kullanılabilir"
+
+#: builtin/branch.c:741
+msgid "--recurse-submodules can only be used to create branches"
+msgstr "--recurse-submodules, yalnızca dal oluşturmada kullanılabilir"
+
+#: builtin/branch.c:770 builtin/branch.c:826 builtin/branch.c:835
 msgid "branch name required"
 msgstr "dal adı gerekli"
 
-#: builtin/branch.c:774
+#: builtin/branch.c:802
 msgid "Cannot give description to detached HEAD"
 msgstr "Ayrılmış HEAD'e açıklama verilemiyor"
 
-#: builtin/branch.c:779
+#: builtin/branch.c:807
 msgid "cannot edit description of more than one branch"
 msgstr "birden çok dalın açıklaması düzenlenemiyor"
 
-#: builtin/branch.c:786
+#: builtin/branch.c:814
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "'%s' dalında henüz bir işleme yok."
 
-#: builtin/branch.c:789
+#: builtin/branch.c:817
 #, c-format
 msgid "No branch named '%s'."
 msgstr "'%s' adında bir dal yok."
 
-#: builtin/branch.c:804
+#: builtin/branch.c:832
 msgid "too many branches for a copy operation"
 msgstr "bir kopyalama işlemi için çok fazla dal"
 
-#: builtin/branch.c:813
+#: builtin/branch.c:841
 msgid "too many arguments for a rename operation"
 msgstr "bir yeniden adlandırma işlemi için çok fazla argüman"
 
-#: builtin/branch.c:818
+#: builtin/branch.c:846
 msgid "too many arguments to set new upstream"
 msgstr "yeni üstkaynak ayarlamak için çok fazla argüman"
 
-#: builtin/branch.c:822
+#: builtin/branch.c:850
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
@@ -11970,31 +12228,31 @@ msgstr ""
 "HEAD'in üst kaynağı %s olarak ayarlanamadı; çünkü herhangi bir dala işaret "
 "etmiyor."
 
-#: builtin/branch.c:825 builtin/branch.c:848
+#: builtin/branch.c:853 builtin/branch.c:873
 #, c-format
 msgid "no such branch '%s'"
 msgstr "'%s' diye bir dal yok"
 
-#: builtin/branch.c:829
+#: builtin/branch.c:857
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "'%s' diye bir dal mevcut değil"
 
-#: builtin/branch.c:842
+#: builtin/branch.c:867
 msgid "too many arguments to unset upstream"
 msgstr "üst kaynağı kaldırmak için çok fazla argüman"
 
-#: builtin/branch.c:846
+#: builtin/branch.c:871
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr ""
 "HEAD'in üst kaynağı kaldırılamadı; çünkü herhangi bir dala işaret etmiyor."
 
-#: builtin/branch.c:852
+#: builtin/branch.c:877
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "'%s' dalının üstkaynak bilgisi yok"
 
-#: builtin/branch.c:862
+#: builtin/branch.c:890
 msgid ""
 "The -a, and -r, options to 'git branch' do not take a branch name.\n"
 "Did you mean to use: -a|-r --list <pattern>?"
@@ -12002,7 +12260,7 @@ msgstr ""
 "'git branch'in -a ve -r seçenekleri bir dal adı almaz.\n"
 "Şunu mu demek istediniz: -a|-r --list <dizgi>?"
 
-#: builtin/branch.c:866
+#: builtin/branch.c:894
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -12117,19 +12375,19 @@ msgstr "git bundle list-heads <dosya> [<başvuru-adı>...]"
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr "git bundle unbundle <dosya> [<başvuru-adı>...]"
 
-#: builtin/bundle.c:65 builtin/pack-objects.c:3876
+#: builtin/bundle.c:65 builtin/pack-objects.c:3899
 msgid "do not show progress meter"
 msgstr "ilerleme çubuğunu gösterme"
 
-#: builtin/bundle.c:67 builtin/bundle.c:167 builtin/pack-objects.c:3878
+#: builtin/bundle.c:67 builtin/bundle.c:168 builtin/pack-objects.c:3901
 msgid "show progress meter"
 msgstr "ilerleme çubuğunu göster"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3880
+#: builtin/bundle.c:69 builtin/pack-objects.c:3903
 msgid "show progress meter during object writing phase"
 msgstr "ilerleme çubuğunu nesne yazımı aşaması sırasında göster"
 
-#: builtin/bundle.c:72 builtin/pack-objects.c:3883
+#: builtin/bundle.c:72 builtin/pack-objects.c:3906
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "ilerleme çubuğu gösterildiğinde --all-progress'e benzer"
 
@@ -12141,130 +12399,245 @@ msgstr "demet biçim sürümünü belirt"
 msgid "Need a repository to create a bundle."
 msgstr "Bir demet oluşturmak için bir depo gerekli."
 
-#: builtin/bundle.c:107
+#: builtin/bundle.c:108
 msgid "do not show bundle details"
 msgstr "demet ayrıntılarını gösterme"
 
-#: builtin/bundle.c:126
+#: builtin/bundle.c:127
 #, c-format
 msgid "%s is okay\n"
 msgstr "%s tamam\n"
 
-#: builtin/bundle.c:182
+#: builtin/bundle.c:183
 msgid "Need a repository to unbundle."
-msgstr "Demeti çözmek için bir depo gerekiyoriyor."
+msgstr "Demeti çözmek için bir depo gerekiyor."
 
-#: builtin/bundle.c:185
+#: builtin/bundle.c:186
 msgid "Unbundling objects"
 msgstr "Nesneler demetten çıkarılıyor"
 
-#: builtin/bundle.c:219 builtin/remote.c:1733
+#: builtin/bundle.c:220 builtin/remote.c:1758
 #, c-format
 msgid "Unknown subcommand: %s"
 msgstr "Bilinmeyen altkomut: %s"
 
-#: builtin/cat-file.c:622
+#: builtin/cat-file.c:568
+msgid "flush is only for --buffer mode"
+msgstr "floş, yalnızca --buffer kipi içindir"
+
+#: builtin/cat-file.c:612
+msgid "empty command in input"
+msgstr "girdide boş komut"
+
+#: builtin/cat-file.c:614
+#, c-format
+msgid "whitespace before command: '%s'"
+msgstr "komuttan önce boşluk: '%s'"
+
+#: builtin/cat-file.c:623
+#, c-format
+msgid "%s requires arguments"
+msgstr "%s, argümanlar gerektiriyor"
+
+#: builtin/cat-file.c:628
+#, c-format
+msgid "%s takes no arguments"
+msgstr "%s, bir argüman almıyor"
+
+#: builtin/cat-file.c:636
+#, c-format
+msgid "unknown command: '%s'"
+msgstr "bilinmeyen komut: '%s'"
+
+#: builtin/cat-file.c:795
+msgid "only one batch option may be specified"
+msgstr "yalnızca bir toplu iş seçeneği belirtilebilir"
+
+#: builtin/cat-file.c:824
+msgid "git cat-file <type> <object>"
+msgstr "git cat-file <tür> <nesne>"
+
+#: builtin/cat-file.c:825
+msgid "git cat-file (-e | -p) <object>"
+msgstr "git cat-file (-e | -p) <nesne>"
+
+#: builtin/cat-file.c:826
+msgid "git cat-file (-t | -s) [--allow-unknown-type] <object>"
+msgstr "git cat-file (-t | -s) [--allow-unknown-type] <nesne>"
+
+#: builtin/cat-file.c:827
 msgid ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <type> | --textconv | --filters) [--path=<path>] <object>"
+"git cat-file (--batch | --batch-check | --batch-command) [--batch-all-"
+"objects]\n"
+"             [--buffer] [--follow-symlinks] [--unordered]\n"
+"             [--textconv | --filters]"
 msgstr ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <tür> | --textconv | --filters) [--path=<yol>] <nesne>"
+"git cat-file (--batch | --batch-check | --batch-command) [--batch-all-"
+"objects]\n"
+"             [--buffer] [--follow-symlinks] [--unordered]\n"
+"             [--textconv | --filters]"
 
-#: builtin/cat-file.c:623
+#: builtin/cat-file.c:830
 msgid ""
-"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
-"symlinks] [--textconv | --filters]"
+"git cat-file (--textconv | --filters)\n"
+"             [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]"
 msgstr ""
-"git cat-file (--batch[=<biçim>] | --batch-check[=<biçim>]) [--follow-"
-"symlinks] [--textconv | --filters]"
+"git cat-file (--textconv | --filters)\n"
+"             [<başvuru>:<yol|ağacımsı> | --path=<yol|ağacımsı> <revizyon>]"
 
-#: builtin/cat-file.c:644
-msgid "only one batch option may be specified"
-msgstr "yalnızca bir toplu iş seçeneği belirtilebilir"
+#: builtin/cat-file.c:836
+msgid "Check object existence or emit object contents"
+msgstr "Nesne varlığını denetle veya nesne içeriğini yay"
+
+#: builtin/cat-file.c:838
+msgid "check if <object> exists"
+msgstr "<nesne> varlığını denetle"
+
+#: builtin/cat-file.c:839
+msgid "pretty-print <object> content"
+msgstr "<nesne> içeriğini okunabilir yap"
 
-#: builtin/cat-file.c:662
-msgid "<type> can be one of: blob, tree, commit, tag"
-msgstr "<tür> yalnızca şunlardan biri olabilir: blob, tree, commit, tag"
+#: builtin/cat-file.c:841
+msgid "Emit [broken] object attributes"
+msgstr "[Hatalı] nesne özniteliklerini yay"
 
-#: builtin/cat-file.c:663
-msgid "show object type"
-msgstr "nesne türünü göster"
+#: builtin/cat-file.c:842
+msgid "show object type (one of 'blob', 'tree', 'commit', 'tag', ...)"
+msgstr "nesne türünü göster (türler: 'blob', 'tree', 'commit', 'tag', ...)"
 
-#: builtin/cat-file.c:664
+#: builtin/cat-file.c:843
 msgid "show object size"
 msgstr "nesne boyutunu göster"
 
-#: builtin/cat-file.c:666
-msgid "exit with zero when there's no error"
-msgstr "hata yoksa sıfır koduyla çık"
+#: builtin/cat-file.c:845
+msgid "allow -s and -t to work with broken/corrupt objects"
+msgstr "-s ve -t'nin bozuk/hasar görmüş nesnelerle çalışmasına izin ver"
 
-#: builtin/cat-file.c:667
-msgid "pretty-print object's content"
-msgstr "nesne içeriğini okunabilir biçimde göster"
+#: builtin/cat-file.c:847
+msgid "Batch objects requested on stdin (or --batch-all-objects)"
+msgstr "Toplu iş nesneleri stdin'de istendi (veya --batch-all-objects)"
 
-#: builtin/cat-file.c:669
-msgid "for blob objects, run textconv on object's content"
-msgstr "ikili nesneler için nesne içeriği üzerinde textconv çalıştır"
+#: builtin/cat-file.c:849
+msgid "show full <object> or <rev> contents"
+msgstr "tam <nesne> veya <revizyon> içeriğini göster"
 
-#: builtin/cat-file.c:671
-msgid "for blob objects, run filters on object's content"
-msgstr "ikili nesneler için nesne içeriği üzerinde süzgeçler çalıştır"
+#: builtin/cat-file.c:853
+msgid "like --batch, but don't emit <contents>"
+msgstr "--batch gibi; ancak <içerik> yayma"
 
-#: builtin/cat-file.c:672
-msgid "blob"
-msgstr "ikili nesne"
+#: builtin/cat-file.c:857
+msgid "read commands from stdin"
+msgstr "komutları stdin'den oku"
 
-#: builtin/cat-file.c:673
-msgid "use a specific path for --textconv/--filters"
-msgstr "--textconv/--filters için belirli bir yol kullan"
+#: builtin/cat-file.c:861
+msgid "with --batch[-check]: ignores stdin, batches all known objects"
+msgstr ""
+"--batch[-check] ile stdin'i yok sayar, bilinen tüm nesneleri bir araya "
+"getirir"
 
-#: builtin/cat-file.c:675
-msgid "allow -s and -t to work with broken/corrupt objects"
-msgstr "-s ve -t'nin bozuk/hasar görmüş nesnelerle çalışmasına izin ver"
+#: builtin/cat-file.c:863
+msgid "Change or optimize batch output"
+msgstr "Toplu iş çıktısını değiştir veya eniyile"
 
-#: builtin/cat-file.c:676
+#: builtin/cat-file.c:864
 msgid "buffer --batch output"
 msgstr "--batch çıktısını arabelleğe al"
 
-#: builtin/cat-file.c:678
-msgid "show info and content of objects fed from the standard input"
-msgstr "standart girdi'den beslenen nesnelerin bilgisini ve içeriğini göster"
+#: builtin/cat-file.c:866
+msgid "follow in-tree symlinks"
+msgstr "ağaç içi sembolik bağları izle"
 
-#: builtin/cat-file.c:682
-msgid "show info about objects fed from the standard input"
-msgstr "standart girdi'den beslenen nesneler hakkında bilgi göster"
+#: builtin/cat-file.c:868
+msgid "do not order objects before emitting them"
+msgstr "onları yaymadan önce nesneleri sıralama"
 
-#: builtin/cat-file.c:686
-msgid "follow in-tree symlinks (used with --batch or --batch-check)"
+#: builtin/cat-file.c:870
+msgid ""
+"Emit object (blob or tree) with conversion or filter (stand-alone, or with "
+"batch)"
 msgstr ""
-"ağaç içi sembolik bağları izle (--batch veya --batch-check ile kullanılır)"
+"Nesneyi (ikili veya ağaç), dönüştürme veya süzgeçle yay (tek veya toplu)"
 
-#: builtin/cat-file.c:688
-msgid "show all objects with --batch or --batch-check"
-msgstr "--batch veya --batch-check ile olan tüm nesneleri göster"
+#: builtin/cat-file.c:872
+msgid "run textconv on object's content"
+msgstr "nesnenin içeriği üzerinde textconv çalıştır"
 
-#: builtin/cat-file.c:690
-msgid "do not order --batch-all-objects output"
-msgstr "--batch-all-objects çıktısını sıralama"
+#: builtin/cat-file.c:874
+msgid "run filters on object's content"
+msgstr "nesnenin içeriği üzerinde süzgeçler çalıştır"
 
-#: builtin/check-attr.c:13
-msgid "git check-attr [-a | --all | <attr>...] [--] <pathname>..."
-msgstr "git check-attr [-a | --all | <öznitelik>...] [--] <yol-adı>..."
+#: builtin/cat-file.c:875
+msgid "blob|tree"
+msgstr "ikili nesne/ağaç"
 
-#: builtin/check-attr.c:14
-msgid "git check-attr --stdin [-z] [-a | --all | <attr>...]"
-msgstr "git check-attr --stdin [-z] [-a | --all | <öznitelik>...]"
+#: builtin/cat-file.c:876
+msgid "use a <path> for (--textconv | --filters); Not with 'batch'"
+msgstr ""
+"(--textconv | --filters) için bir <yol> kullan; ancak 'batch' ile değil"
 
-#: builtin/check-attr.c:21
-msgid "report all attributes set on file"
-msgstr "tüm dosya özniteliklerini bildir"
+#: builtin/cat-file.c:894
+#, c-format
+msgid "'%s=<%s>' needs '%s' or '%s'"
+msgstr "'%s=<%s>' için '%s' veya '%s' gerekiyor"
+
+#: builtin/cat-file.c:896
+msgid "path|tree-ish"
+msgstr "yol|ağacımsı"
+
+#: builtin/cat-file.c:903 builtin/cat-file.c:906 builtin/cat-file.c:909
+#, c-format
+msgid "'%s' requires a batch mode"
+msgstr "'%s' bir toplu iş kipi gerektiriyor"
+
+#: builtin/cat-file.c:921
+#, c-format
+msgid "'-%c' is incompatible with batch mode"
+msgstr "'-%c', toplu iş kipi ile uyumsuz"
+
+#: builtin/cat-file.c:924
+msgid "batch modes take no arguments"
+msgstr "toplu iş kipleri argüman almaz"
+
+#: builtin/cat-file.c:932 builtin/cat-file.c:935
+#, c-format
+msgid "<rev> required with '%s'"
+msgstr "<revizyon>, '%s' ile gerekiyor"
+
+#: builtin/cat-file.c:938
+#, c-format
+msgid "<object> required with '-%c'"
+msgstr "<nesne>, '-%c' ile gerekiyor"
+
+#: builtin/cat-file.c:943 builtin/notes.c:374 builtin/notes.c:429
+#: builtin/notes.c:507 builtin/notes.c:519 builtin/notes.c:596
+#: builtin/notes.c:663 builtin/notes.c:813 builtin/notes.c:965
+#: builtin/notes.c:987 builtin/prune-packed.c:25 builtin/receive-pack.c:2489
+#: builtin/tag.c:592
+msgid "too many arguments"
+msgstr "çok fazla argüman"
+
+#: builtin/cat-file.c:947
+#, c-format
+msgid "only two arguments allowed in <type> <object> mode, not %d"
+msgstr "<tür> <nesne> kipinde yalnızca iki argümana izin veriliyor, %d değil"
+
+#: builtin/check-attr.c:13
+msgid "git check-attr [-a | --all | <attr>...] [--] <pathname>..."
+msgstr "git check-attr [-a | --all | <öznitelik>...] [--] <yol-adı>..."
+
+#: builtin/check-attr.c:14
+msgid "git check-attr --stdin [-z] [-a | --all | <attr>...]"
+msgstr "git check-attr --stdin [-z] [-a | --all | <öznitelik>...]"
+
+#: builtin/check-attr.c:21
+msgid "report all attributes set on file"
+msgstr "tüm dosya özniteliklerini bildir"
 
 #: builtin/check-attr.c:22
 msgid "use .gitattributes only from the index"
 msgstr "yalnızca indeksteki .gitattributes'u kullan"
 
-#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:100
+#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:101
 msgid "read file names from stdin"
 msgstr "dosya adlarını stdin'den oku"
 
@@ -12272,8 +12645,8 @@ msgstr "dosya adlarını stdin'den oku"
 msgid "terminate input and output records by a NUL character"
 msgstr "girdi ve çıktı kayıtlarını bir NUL karakteri ile sonlandır"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1532 builtin/gc.c:550
-#: builtin/worktree.c:493
+#: builtin/check-ignore.c:21 builtin/checkout.c:1550 builtin/gc.c:550
+#: builtin/worktree.c:565
 msgid "suppress progress reporting"
 msgstr "ilerleme bildirimini gizle"
 
@@ -12330,161 +12703,165 @@ msgstr "kişi belirtilmedi"
 msgid "git checkout--worker [<options>]"
 msgstr "git checkout--worker [<seçenekler>]"
 
-#: builtin/checkout--worker.c:118 builtin/checkout-index.c:201
-#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1864
-#: builtin/submodule--helper.c:1867 builtin/submodule--helper.c:1875
-#: builtin/submodule--helper.c:2511 builtin/submodule--helper.c:2577
-#: builtin/worktree.c:491 builtin/worktree.c:728
+#: builtin/checkout--worker.c:118 builtin/checkout-index.c:235
+#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1878
+#: builtin/submodule--helper.c:1881 builtin/submodule--helper.c:1889
+#: builtin/submodule--helper.c:2716 builtin/worktree.c:563
+#: builtin/worktree.c:808
 msgid "string"
 msgstr "dizi"
 
-#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:236
 msgid "when creating files, prepend <string>"
 msgstr "dosyalar oluştururken başına <dizi> ekle"
 
-#: builtin/checkout-index.c:152
+#: builtin/checkout-index.c:184
 msgid "git checkout-index [<options>] [--] [<file>...]"
 msgstr "git checkout-index [<seçenekler>] [--] [<dosya>...]"
 
-#: builtin/checkout-index.c:169
+#: builtin/checkout-index.c:201
 msgid "stage should be between 1 and 3 or all"
 msgstr "stage 1 ve 3 arasında veya tümü olmalıdır"
 
-#: builtin/checkout-index.c:187
+#: builtin/checkout-index.c:219
 msgid "check out all files in the index"
 msgstr "indeksteki tüm dosyaları çıkış yap"
 
-#: builtin/checkout-index.c:188
+#: builtin/checkout-index.c:221
+msgid "do not skip files with skip-worktree set"
+msgstr "skip-worktree kümesiyle dosyaları atlama"
+
+#: builtin/checkout-index.c:222
 msgid "force overwrite of existing files"
 msgstr "mevcut dosyaların üzerine yazılmasını zorla"
 
-#: builtin/checkout-index.c:190
+#: builtin/checkout-index.c:224
 msgid "no warning for existing files and files not in index"
 msgstr "mevcut dosyalar ve indekste olmayan dosyalar için uyarma"
 
-#: builtin/checkout-index.c:192
+#: builtin/checkout-index.c:226
 msgid "don't checkout new files"
 msgstr "yeni dosyaları çıkış yapma"
 
-#: builtin/checkout-index.c:194
+#: builtin/checkout-index.c:228
 msgid "update stat information in the index file"
 msgstr "indeks dosyasındaki dosya bilgilerini güncelle"
 
-#: builtin/checkout-index.c:198
+#: builtin/checkout-index.c:232
 msgid "read list of paths from the standard input"
 msgstr "yolların listesini standart girdi'den oku"
 
-#: builtin/checkout-index.c:200
+#: builtin/checkout-index.c:234
 msgid "write the content to temporary files"
 msgstr "içeriği geçici dosyalara yaz"
 
-#: builtin/checkout-index.c:204
+#: builtin/checkout-index.c:238
 msgid "copy out the files from named stage"
 msgstr "dosyaları adı verilen alandan kopyala"
 
-#: builtin/checkout.c:33
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [<seçenekler>] <dal>"
 
-#: builtin/checkout.c:34
+#: builtin/checkout.c:35
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [<seçenekler>] [<dal>] -- <dosya>..."
 
-#: builtin/checkout.c:39
+#: builtin/checkout.c:40
 msgid "git switch [<options>] [<branch>]"
 msgstr "git switch [<seçenekler>] [<dal>]"
 
-#: builtin/checkout.c:44
+#: builtin/checkout.c:45
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<seçenekler>] [--source=<dal>] <dosya>..."
 
-#: builtin/checkout.c:198 builtin/checkout.c:237
+#: builtin/checkout.c:199 builtin/checkout.c:238
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "'%s' yolu bizdeki sürüme iye değil"
 
-#: builtin/checkout.c:200 builtin/checkout.c:239
+#: builtin/checkout.c:201 builtin/checkout.c:240
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "'%s' yolu onlardaki sürüme iye değil"
 
-#: builtin/checkout.c:216
+#: builtin/checkout.c:217
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "'%s' yolu gereken tüm sürümlere iye değil"
 
-#: builtin/checkout.c:269
+#: builtin/checkout.c:271
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "'%s' yolu gereken sürümlere iye değil"
 
-#: builtin/checkout.c:286
+#: builtin/checkout.c:291
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "'%s' yolu: Birleştirilemiyor"
 
-#: builtin/checkout.c:302
+#: builtin/checkout.c:307
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "'%s' için birleştirme sonuçları eklenemiyor"
 
-#: builtin/checkout.c:419
+#: builtin/checkout.c:424
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "%d birleştirme çakışması yeniden oluşturuldu"
 msgstr[1] "%d birleştirme çakışması yeniden oluşturuldu"
 
-#: builtin/checkout.c:424
+#: builtin/checkout.c:429
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "%d yol şuradan güncellendi: %s"
 msgstr[1] "%d yol şuradan güncellendi: %s"
 
-#: builtin/checkout.c:431
+#: builtin/checkout.c:436
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "%d yol indeksten güncellendi"
 msgstr[1] "%d yol indeksten güncellendi"
 
-#: builtin/checkout.c:454 builtin/checkout.c:457 builtin/checkout.c:460
-#: builtin/checkout.c:464
+#: builtin/checkout.c:459 builtin/checkout.c:462 builtin/checkout.c:465
+#: builtin/checkout.c:469
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "'%s' güncellenmekte olan yollarla kullanılamaz"
 
-#: builtin/checkout.c:474
+#: builtin/checkout.c:479
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr "Aynı anda hem yolları güncelleyip hem de '%s' dalına geçilemiyor."
 
-#: builtin/checkout.c:478
+#: builtin/checkout.c:483
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "ne '%s' ne de '%s' belirtilmiş"
 
-#: builtin/checkout.c:482
+#: builtin/checkout.c:487
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "'%s', '%s' ögesinin belirtilmediği durumlarda kullanılmalıdır"
 
-#: builtin/checkout.c:487 builtin/checkout.c:492
+#: builtin/checkout.c:492 builtin/checkout.c:497
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "'%s' veya '%s', %s ile birlikte kullanılamaz"
 
-#: builtin/checkout.c:566 builtin/checkout.c:573
+#: builtin/checkout.c:571 builtin/checkout.c:578
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "'%s' yolu birleştirilmemiş"
 
-#: builtin/checkout.c:747
+#: builtin/checkout.c:753
 msgid "you need to resolve your current index first"
 msgstr "önce geçerli indeksinizi çözmelisiniz"
 
-#: builtin/checkout.c:797
+#: builtin/checkout.c:809
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -12493,50 +12870,50 @@ msgstr ""
 "aşağıdaki dosyalardaki hazırlanan değişikliklerle sürdürülemiyor:\n"
 "%s"
 
-#: builtin/checkout.c:890
+#: builtin/checkout.c:902
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "'%s' için başvuru günlüğü yapılamıyor: %s\n"
 
-#: builtin/checkout.c:934
+#: builtin/checkout.c:947
 msgid "HEAD is now at"
 msgstr "HEAD konumu:"
 
-#: builtin/checkout.c:938 builtin/clone.c:609 t/helper/test-fast-rebase.c:203
+#: builtin/checkout.c:951 builtin/clone.c:615 t/helper/test-fast-rebase.c:203
 msgid "unable to update HEAD"
 msgstr "HEAD güncellenemiyor"
 
-#: builtin/checkout.c:942
+#: builtin/checkout.c:955
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "'%s' dalı sıfırlandı.\n"
 
-#: builtin/checkout.c:945
+#: builtin/checkout.c:958
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Halihazırda '%s' üzerinde\n"
 
-#: builtin/checkout.c:949
+#: builtin/checkout.c:962
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "'%s' dalına geçildi ve sıfırlandı.\n"
 
-#: builtin/checkout.c:951 builtin/checkout.c:1388
+#: builtin/checkout.c:964 builtin/checkout.c:1398
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "Yeni '%s' dalına geçildi.\n"
 
-#: builtin/checkout.c:953
+#: builtin/checkout.c:966
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "'%s' dalına geçildi.\n"
 
-#: builtin/checkout.c:1004
+#: builtin/checkout.c:1017
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " ... ve %d daha.\n"
 
-#: builtin/checkout.c:1010
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -12559,7 +12936,7 @@ msgstr[1] ""
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1029
+#: builtin/checkout.c:1042
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -12586,19 +12963,19 @@ msgstr[1] ""
 "\tgit branch <yeni-dal-adı> %s\n"
 "\n"
 
-#: builtin/checkout.c:1064
+#: builtin/checkout.c:1077
 msgid "internal error in revision walk"
 msgstr "revizyonlarda gezinirken iç hata"
 
-#: builtin/checkout.c:1068
+#: builtin/checkout.c:1081
 msgid "Previous HEAD position was"
 msgstr "Önceki HEAD konumu şuydu:"
 
-#: builtin/checkout.c:1114 builtin/checkout.c:1383
+#: builtin/checkout.c:1124 builtin/checkout.c:1393
 msgid "You are on a branch yet to be born"
 msgstr "Henüz doğmamış bir dal üzerindesiniz"
 
-#: builtin/checkout.c:1196
+#: builtin/checkout.c:1206
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -12607,7 +12984,7 @@ msgstr ""
 "'%s' hem bir yerel dosya hem de bir izleme dalı olabilir.\n"
 "Lütfen -- (ve isteğe bağlı olarak --no-guess) kullanıp belirsizliği giderin."
 
-#: builtin/checkout.c:1203
+#: builtin/checkout.c:1213
 msgid ""
 "If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
 "you can do so by fully qualifying the name with the --track option:\n"
@@ -12627,51 +13004,57 @@ msgstr ""
 "isterseniz, örn. 'origin', yapılandırmanızda checkout.defaultRemote=origin\n"
 "ayarını yapmayı düşünün."
 
-#: builtin/checkout.c:1213
+#: builtin/checkout.c:1223
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "'%s' birden çok (%d) uzak izleme dalıyla eşleşti"
 
-#: builtin/checkout.c:1279
+#: builtin/checkout.c:1289
 msgid "only one reference expected"
 msgstr "yalnızca bir başvuru bekleniyordu"
 
-#: builtin/checkout.c:1296
+#: builtin/checkout.c:1306
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "Yalnızca bir başvuru bekleniyordu, %d verildi."
 
-#: builtin/checkout.c:1342 builtin/worktree.c:269 builtin/worktree.c:436
+#: builtin/checkout.c:1352 builtin/worktree.c:338 builtin/worktree.c:508
 #, c-format
 msgid "invalid reference: %s"
 msgstr "geçersiz başvuru: %s"
 
-#: builtin/checkout.c:1355 builtin/checkout.c:1725
+#: builtin/checkout.c:1365 builtin/checkout.c:1744
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "başvuru bir ağaca değil: %s"
 
-#: builtin/checkout.c:1402
+#: builtin/checkout.c:1413
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "bir dal bekleniyordu, '%s' etiketi alındı"
 
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1415
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "bir dal bekleniyordu, '%s' uzak dalı alındı"
 
-#: builtin/checkout.c:1405 builtin/checkout.c:1413
+#: builtin/checkout.c:1417 builtin/checkout.c:1426
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "bir dal bekleniyordu, '%s' alındı"
 
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1420
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "bir dal bekleniyordu, '%s' işlemesi alındı"
 
-#: builtin/checkout.c:1424
+#: builtin/checkout.c:1429
+msgid ""
+"If you want to detach HEAD at the commit, try again with the --detach option."
+msgstr ""
+"HEAD'i işlemede ayırmak istiyorsanız --detach seçeneğiyle yeniden deneyin."
+
+#: builtin/checkout.c:1442
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
@@ -12679,7 +13062,7 @@ msgstr ""
 "Birleştirme yaparken dal değiştirilemiyor.\n"
 "\"git merge --quit\" veya \"git worktree add\" yapmayı düşünün."
 
-#: builtin/checkout.c:1428
+#: builtin/checkout.c:1446
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
@@ -12687,7 +13070,7 @@ msgstr ""
 "Bir \"am\" oturumunun ortasında dal değiştirilemiyor.\n"
 "\"git am --quit\" veya \"git worktree add\" yapmayı düşünün."
 
-#: builtin/checkout.c:1432
+#: builtin/checkout.c:1450
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -12695,7 +13078,7 @@ msgstr ""
 "Yeniden temellendirme yaparken dal değiştirilemiyor.\n"
 "\"git rebase --quit\" veya \"git worktree add\" yapmayı düşünün."
 
-#: builtin/checkout.c:1436
+#: builtin/checkout.c:1454
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -12703,7 +13086,7 @@ msgstr ""
 "Seç-al yaparken dal değiştirilemiyor.\n"
 "\"git cherry-pick --quit\" veya \"git worktree add\" yapmayı düşünün."
 
-#: builtin/checkout.c:1440
+#: builtin/checkout.c:1458
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -12711,126 +13094,122 @@ msgstr ""
 "Geriye al yaparken dal değiştirilemiyor.\n"
 "\"git revert --quit\" veya \"git worktree add\" yapmayı düşünün."
 
-#: builtin/checkout.c:1444
+#: builtin/checkout.c:1462
 msgid "you are switching branch while bisecting"
 msgstr "ikili arama yaparken dal değiştiriyorsunuz"
 
-#: builtin/checkout.c:1451
+#: builtin/checkout.c:1469
 msgid "paths cannot be used with switching branches"
 msgstr "dal değiştirilirken yollar kullanılamaz"
 
-#: builtin/checkout.c:1454 builtin/checkout.c:1458 builtin/checkout.c:1462
+#: builtin/checkout.c:1472 builtin/checkout.c:1476 builtin/checkout.c:1480
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "dal değiştirilirken '%s' kullanılamaz"
 
-#: builtin/checkout.c:1466 builtin/checkout.c:1469 builtin/checkout.c:1472
-#: builtin/checkout.c:1477 builtin/checkout.c:1482
+#: builtin/checkout.c:1484 builtin/checkout.c:1487 builtin/checkout.c:1490
+#: builtin/checkout.c:1495 builtin/checkout.c:1500
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "'%s', '%s' ile birlikte kullanılamaz"
 
-#: builtin/checkout.c:1479
+#: builtin/checkout.c:1497
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "'%s', <başlama-noktası> alamaz"
 
-#: builtin/checkout.c:1487
+#: builtin/checkout.c:1505
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "Dal, işleme olmayan '%s' ögesine değiştirilemez"
 
-#: builtin/checkout.c:1494
+#: builtin/checkout.c:1512
 msgid "missing branch or commit argument"
 msgstr "dal veya işleme argümanı eksik"
 
-#: builtin/checkout.c:1537
+#: builtin/checkout.c:1555
 msgid "perform a 3-way merge with the new branch"
 msgstr "yeni dal ile bir 3 yönlü birleştirme gerçekleştir"
 
-#: builtin/checkout.c:1538 builtin/log.c:1825 parse-options.h:323
+#: builtin/checkout.c:1556 builtin/log.c:1844 parse-options.h:354
 msgid "style"
 msgstr "stil"
 
-#: builtin/checkout.c:1539
+#: builtin/checkout.c:1557
 msgid "conflict style (merge, diff3, or zdiff3)"
 msgstr "çakışma stili (birleştirme, diff3 veya zdiff3)"
 
-#: builtin/checkout.c:1551 builtin/worktree.c:488
+#: builtin/checkout.c:1569 builtin/worktree.c:560
 msgid "detach HEAD at named commit"
 msgstr "adı verilen işlemede HEAD'i ayır"
 
-#: builtin/checkout.c:1553
-msgid "set up tracking mode (see git-pull(1))"
-msgstr "izleme kipini ayarla (bilgi için: git-pull(1))"
-
-#: builtin/checkout.c:1556
+#: builtin/checkout.c:1574
 msgid "force checkout (throw away local modifications)"
 msgstr "zorla çıkış yap (yerel değişiklikleri çöpe at)"
 
-#: builtin/checkout.c:1558
+#: builtin/checkout.c:1576
 msgid "new-branch"
 msgstr "yeni dal"
 
-#: builtin/checkout.c:1558
+#: builtin/checkout.c:1576
 msgid "new unparented branch"
 msgstr "yeni üst ögesi olmayan dal"
 
-#: builtin/checkout.c:1560 builtin/merge.c:305
+#: builtin/checkout.c:1578 builtin/merge.c:305
 msgid "update ignored files (default)"
 msgstr "yok sayılan dosyaları güncelle (öntanımlı)"
 
-#: builtin/checkout.c:1563
+#: builtin/checkout.c:1581
 msgid "do not check if another worktree is holding the given ref"
 msgstr ""
 "verilen başvuruyu başka bir çalışma ağacının tutup tutmadığını denetleme"
 
-#: builtin/checkout.c:1576
+#: builtin/checkout.c:1594
 msgid "checkout our version for unmerged files"
 msgstr "birleştirilmeyen dosyalar için bizdeki sürümü çıkış yap"
 
-#: builtin/checkout.c:1579
+#: builtin/checkout.c:1597
 msgid "checkout their version for unmerged files"
 msgstr "birleştirilmeyen dosyalar için onlardaki sürümünü çıkış yap"
 
-#: builtin/checkout.c:1583
+#: builtin/checkout.c:1601
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "yol belirteçlerini yalnızca aralıklı girdilere kısıtlama"
 
-#: builtin/checkout.c:1640
+#: builtin/checkout.c:1659
 #, c-format
 msgid "options '-%c', '-%c', and '%s' cannot be used together"
 msgstr "'-%c', '-%c' ve '%s' seçenekleri birlikte kullanılamaz"
 
-#: builtin/checkout.c:1681
+#: builtin/checkout.c:1700
 msgid "--track needs a branch name"
 msgstr "--track için bir dal adı gerekli"
 
-#: builtin/checkout.c:1686
+#: builtin/checkout.c:1705
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "eksik dal adı; -%c deneyin"
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1737
 #, c-format
 msgid "could not resolve %s"
 msgstr "%s çözülemedi"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1753
 msgid "invalid path specification"
 msgstr "geçersiz yol belirtimi"
 
-#: builtin/checkout.c:1741
+#: builtin/checkout.c:1760
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr "'%s' bir işleme değil ve ondan bir '%s' dalı oluşturulamaz"
 
-#: builtin/checkout.c:1745
+#: builtin/checkout.c:1764
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout: --detach bir '%s' yol argümanı almıyor"
 
-#: builtin/checkout.c:1770
+#: builtin/checkout.c:1789
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -12838,71 +13217,71 @@ msgstr ""
 "git checkout: --ours/--theirs, --force ve --merge indeks çıkışı yapılırken\n"
 "birlikte kullanılamaz."
 
-#: builtin/checkout.c:1775
+#: builtin/checkout.c:1794
 msgid "you must specify path(s) to restore"
 msgstr "eski durumuna getirilecek yolları belirtmelisiniz"
 
-#: builtin/checkout.c:1800 builtin/checkout.c:1802 builtin/checkout.c:1854
-#: builtin/checkout.c:1856 builtin/clone.c:126 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2959
-#: builtin/submodule--helper.c:3253 builtin/worktree.c:484
-#: builtin/worktree.c:486
+#: builtin/checkout.c:1819 builtin/checkout.c:1821 builtin/checkout.c:1873
+#: builtin/checkout.c:1875 builtin/clone.c:130 builtin/remote.c:171
+#: builtin/remote.c:173 builtin/submodule--helper.c:3038
+#: builtin/submodule--helper.c:3371 builtin/worktree.c:556
+#: builtin/worktree.c:558
 msgid "branch"
 msgstr "dal"
 
-#: builtin/checkout.c:1801
+#: builtin/checkout.c:1820
 msgid "create and checkout a new branch"
 msgstr "yeni bir dal oluştur ve çıkış yap"
 
-#: builtin/checkout.c:1803
+#: builtin/checkout.c:1822
 msgid "create/reset and checkout a branch"
 msgstr "bir dal oluştur/sıfırla ve çıkış yap"
 
-#: builtin/checkout.c:1804
+#: builtin/checkout.c:1823
 msgid "create reflog for new branch"
 msgstr "yeni dal için başvuru günlüğü oluştur"
 
-#: builtin/checkout.c:1806
+#: builtin/checkout.c:1825
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr "'git checkout <böyle-bir-dal-yok>'a temkinli yaklaş (öntanımlı)"
 
-#: builtin/checkout.c:1807
+#: builtin/checkout.c:1826
 msgid "use overlay mode (default)"
 msgstr "yerpaylaşım kipini kullan (öntanımlı)"
 
-#: builtin/checkout.c:1855
+#: builtin/checkout.c:1874
 msgid "create and switch to a new branch"
 msgstr "yeni bir dal oluştur ve ona geç"
 
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1876
 msgid "create/reset and switch to a branch"
 msgstr "bir dal oluştur/sıfırla ve ona geç"
 
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1878
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "'git switch <böyle-bir-dal-yok>'a temkinli yaklaş"
 
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1880
 msgid "throw away local modifications"
 msgstr "yerel değişiklikleri çöpe at"
 
-#: builtin/checkout.c:1897
+#: builtin/checkout.c:1916
 msgid "which tree-ish to checkout from"
 msgstr "çıkış yapılacak ağacımsı"
 
-#: builtin/checkout.c:1899
+#: builtin/checkout.c:1918
 msgid "restore the index"
 msgstr "indeksi eski durumuna getir"
 
-#: builtin/checkout.c:1901
+#: builtin/checkout.c:1920
 msgid "restore the working tree (default)"
 msgstr "çalışma ağacını eski durumuna getir"
 
-#: builtin/checkout.c:1903
+#: builtin/checkout.c:1922
 msgid "ignore unmerged entries"
 msgstr "birleştirilmemiş girdileri yok say"
 
-#: builtin/checkout.c:1904
+#: builtin/checkout.c:1923
 msgid "use overlay mode"
 msgstr "yerpaylaşım kipini kullan"
 
@@ -13050,8 +13429,8 @@ msgid "remove whole directories"
 msgstr "dizinleri tümüyle kaldır"
 
 #: builtin/clean.c:932 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:937 builtin/log.c:184 builtin/log.c:186
-#: builtin/ls-files.c:651 builtin/name-rev.c:535 builtin/name-rev.c:537
+#: builtin/grep.c:938 builtin/log.c:185 builtin/log.c:187
+#: builtin/ls-files.c:651 builtin/name-rev.c:585 builtin/name-rev.c:587
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "dizgi"
@@ -13088,210 +13467,214 @@ msgstr ""
 msgid "-x and -X cannot be used together"
 msgstr "-x ve -X birlikte kullanılamaz"
 
-#: builtin/clone.c:45
+#: builtin/clone.c:47
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<seçenekler>] [--] <depo> [<dizin>]"
 
-#: builtin/clone.c:96
+#: builtin/clone.c:100
 msgid "don't clone shallow repository"
 msgstr "sığ depoyu klonlama"
 
-#: builtin/clone.c:98
+#: builtin/clone.c:102
 msgid "don't create a checkout"
 msgstr "çıkış yapma!"
 
-#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:542
+#: builtin/clone.c:103 builtin/clone.c:105 builtin/init-db.c:542
 msgid "create a bare repository"
 msgstr "çıplak bir depo oluştur"
 
-#: builtin/clone.c:103
+#: builtin/clone.c:107
 msgid "create a mirror repository (implies bare)"
 msgstr "bir yansı depo oluştur (çıplak ima eder)"
 
-#: builtin/clone.c:105
+#: builtin/clone.c:109
 msgid "to clone from a local repository"
 msgstr "bir yerel depodan klonla"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "don't use local hardlinks, always copy"
 msgstr "yerel sabit bağları kullanma, her zaman kopyala"
 
-#: builtin/clone.c:109
+#: builtin/clone.c:113
 msgid "setup as shared repository"
 msgstr "paylaşılan depo ayarla"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "pathspec"
 msgstr "yol belirteci"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "initialize submodules in the clone"
 msgstr "klon içerisindeki altmodülleri ilklendir"
 
-#: builtin/clone.c:115
+#: builtin/clone.c:119
 msgid "number of submodules cloned in parallel"
 msgstr "paralelde klonlanan altmodüllerin sayısı"
 
-#: builtin/clone.c:116 builtin/init-db.c:539
+#: builtin/clone.c:120 builtin/init-db.c:539
 msgid "template-directory"
 msgstr "şablon dizini"
 
-#: builtin/clone.c:117 builtin/init-db.c:540
+#: builtin/clone.c:121 builtin/init-db.c:540
 msgid "directory from which templates will be used"
 msgstr "şablonların kullanılacağı dizin"
 
-#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1871
-#: builtin/submodule--helper.c:2514 builtin/submodule--helper.c:3260
+#: builtin/clone.c:123 builtin/clone.c:125 builtin/submodule--helper.c:1885
+#: builtin/submodule--helper.c:2719 builtin/submodule--helper.c:3378
 msgid "reference repository"
 msgstr "başvuru deposu"
 
-#: builtin/clone.c:123 builtin/submodule--helper.c:1873
-#: builtin/submodule--helper.c:2516
+#: builtin/clone.c:127 builtin/submodule--helper.c:1887
+#: builtin/submodule--helper.c:2721
 msgid "use --reference only while cloning"
 msgstr "--reference'ı yalnızca klonlarken kullan"
 
-#: builtin/clone.c:124 builtin/column.c:27 builtin/fmt-merge-msg.c:27
+#: builtin/clone.c:128 builtin/column.c:27 builtin/fmt-merge-msg.c:27
 #: builtin/init-db.c:550 builtin/merge-file.c:48 builtin/merge.c:290
-#: builtin/pack-objects.c:3944 builtin/repack.c:665
-#: builtin/submodule--helper.c:3262 t/helper/test-simple-ipc.c:595
+#: builtin/pack-objects.c:3967 builtin/repack.c:669
+#: builtin/submodule--helper.c:3380 t/helper/test-simple-ipc.c:595
 #: t/helper/test-simple-ipc.c:597
 msgid "name"
 msgstr "ad"
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "üstkaynağı izlemek için 'origin' yerine <ad> kullan"
 
-#: builtin/clone.c:127
+#: builtin/clone.c:131
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "uzak konumun HEAD'i yerine <dal>'ı çıkış yap"
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133
 msgid "path to git-upload-pack on the remote"
 msgstr "uzak konumdaki git-upload-pack'e olan yol"
 
-#: builtin/clone.c:130 builtin/fetch.c:181 builtin/grep.c:876
+#: builtin/clone.c:134 builtin/fetch.c:182 builtin/grep.c:877
 #: builtin/pull.c:212
 msgid "depth"
 msgstr "derinlik"
 
-#: builtin/clone.c:131
+#: builtin/clone.c:135
 msgid "create a shallow clone of that depth"
 msgstr "verilen derinlikte sığ bir depo oluştur"
 
-#: builtin/clone.c:132 builtin/fetch.c:183 builtin/pack-objects.c:3933
+#: builtin/clone.c:136 builtin/fetch.c:184 builtin/pack-objects.c:3956
 #: builtin/pull.c:215
 msgid "time"
 msgstr "zaman"
 
-#: builtin/clone.c:133
+#: builtin/clone.c:137
 msgid "create a shallow clone since a specific time"
 msgstr "verilen zamandan sonrasını içeren bir sığ depo oluştur"
 
-#: builtin/clone.c:134 builtin/fetch.c:185 builtin/fetch.c:208
-#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1022
+#: builtin/clone.c:138 builtin/fetch.c:186 builtin/fetch.c:212
+#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1050
 msgid "revision"
 msgstr "revizyon"
 
-#: builtin/clone.c:135 builtin/fetch.c:186 builtin/pull.c:219
+#: builtin/clone.c:139 builtin/fetch.c:187 builtin/pull.c:219
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "revizyonu hariç tutarak sığ klonun geçmişini derinleştir"
 
-#: builtin/clone.c:137 builtin/submodule--helper.c:1883
-#: builtin/submodule--helper.c:2530
+#: builtin/clone.c:141 builtin/submodule--helper.c:1897
+#: builtin/submodule--helper.c:2735
 msgid "clone only one branch, HEAD or --branch"
 msgstr "yalnızca bir dal klonla, HEAD veya --branch"
 
-#: builtin/clone.c:139
+#: builtin/clone.c:143
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr "etiket klonlama ve sonraki getirmeler de onları izlemesin"
 
-#: builtin/clone.c:141
+#: builtin/clone.c:145
 msgid "any cloned submodules will be shallow"
 msgstr "klonlanan altmodüller sığ olacak"
 
-#: builtin/clone.c:142 builtin/init-db.c:548
+#: builtin/clone.c:146 builtin/init-db.c:548
 msgid "gitdir"
 msgstr "git dizini"
 
-#: builtin/clone.c:143 builtin/init-db.c:549
+#: builtin/clone.c:147 builtin/init-db.c:549
 msgid "separate git dir from working tree"
 msgstr "git dizinini çalışma ağacından ayır"
 
-#: builtin/clone.c:144
+#: builtin/clone.c:148
 msgid "key=value"
 msgstr "anahtar=değer"
 
-#: builtin/clone.c:145
+#: builtin/clone.c:149
 msgid "set config inside the new repository"
 msgstr "yapılandırmayı yeni deponun içinde ayarla"
 
-#: builtin/clone.c:147 builtin/fetch.c:203 builtin/ls-remote.c:77
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
 #: builtin/pull.c:234 builtin/push.c:575 builtin/send-pack.c:200
 msgid "server-specific"
 msgstr "sunucuya özel"
 
-#: builtin/clone.c:147 builtin/fetch.c:203 builtin/ls-remote.c:77
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
 #: builtin/pull.c:235 builtin/push.c:575 builtin/send-pack.c:201
 msgid "option to transmit"
 msgstr "iletme seçeneği"
 
-#: builtin/clone.c:148 builtin/fetch.c:204 builtin/pull.c:238
+#: builtin/clone.c:152 builtin/fetch.c:208 builtin/pull.c:238
 #: builtin/push.c:576
 msgid "use IPv4 addresses only"
 msgstr "yalnızca IPv4 adresleri kullan"
 
-#: builtin/clone.c:150 builtin/fetch.c:206 builtin/pull.c:241
+#: builtin/clone.c:154 builtin/fetch.c:210 builtin/pull.c:241
 #: builtin/push.c:578
 msgid "use IPv6 addresses only"
 msgstr "yalnızca IPv6 adresleri kullan"
 
-#: builtin/clone.c:154
+#: builtin/clone.c:158
+msgid "apply partial clone filters to submodules"
+msgstr "altmodüllere kısımsal klon süzgeçlerini uygula"
+
+#: builtin/clone.c:160
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "klonlanan herhangi bir altmodül kendi uzak izleme dallarını kullanacak"
 
-#: builtin/clone.c:156
+#: builtin/clone.c:162
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr ""
 "sparse-checkout dosyasını yalnızca kökteki dosyaları içerecek biçimde "
 "ilklendir"
 
-#: builtin/clone.c:231
+#: builtin/clone.c:237
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info: '%s' için alternatif eklenemedi: %s\n"
 
-#: builtin/clone.c:304
+#: builtin/clone.c:310
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s var ve bir dizin değil"
 
-#: builtin/clone.c:322
+#: builtin/clone.c:328
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "yineleyici '%s' üzerinden çalıştırılamadı"
 
-#: builtin/clone.c:353
+#: builtin/clone.c:359
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "'%s' bağı oluşturulamadı"
 
-#: builtin/clone.c:357
+#: builtin/clone.c:363
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "dosya şuraya kopyalanamadı: '%s'"
 
-#: builtin/clone.c:362
+#: builtin/clone.c:368
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "'%s' üzerinde yinelenemedi"
 
-#: builtin/clone.c:389
+#: builtin/clone.c:395
 #, c-format
 msgid "done.\n"
 msgstr "bitti.\n"
 
-#: builtin/clone.c:403
+#: builtin/clone.c:409
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -13301,147 +13684,151 @@ msgstr ""
 "Neyin çıkış yapılıp yapılmadığını 'git status' ile inceleyebilir\n"
 "ve 'git restore --source=HEAD' ile yeniden deneyebilirsiniz.\n"
 
-#: builtin/clone.c:480
+#: builtin/clone.c:486
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "Klonlanacak %s uzak dal bulunamadı."
 
-#: builtin/clone.c:597
+#: builtin/clone.c:603
 #, c-format
 msgid "unable to update %s"
 msgstr "%s güncellenemiyor"
 
-#: builtin/clone.c:645
+#: builtin/clone.c:651
 msgid "failed to initialize sparse-checkout"
 msgstr "sparse-checkout ilklendirilemedi"
 
-#: builtin/clone.c:668
+#: builtin/clone.c:674
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr ""
 "uzak konum HEAD'i var olmayan başvuruya bağlanıyor, çıkış yapılamıyor.\n"
 
-#: builtin/clone.c:701
+#: builtin/clone.c:709
 msgid "unable to checkout working tree"
 msgstr "çalışma ağacı çıkış yapılamıyor"
 
-#: builtin/clone.c:779
+#: builtin/clone.c:793
 msgid "unable to write parameters to config file"
 msgstr "parametreler yapılandırma dosyasına yazılamıyor"
 
-#: builtin/clone.c:842
+#: builtin/clone.c:856
 msgid "cannot repack to clean up"
 msgstr "temizlik için yeniden paketlenemiyor"
 
-#: builtin/clone.c:844
+#: builtin/clone.c:858
 msgid "cannot unlink temporary alternates file"
 msgstr "geçici alternatifler dosyasının bağlantısı kesilemiyor"
 
-#: builtin/clone.c:886
+#: builtin/clone.c:901
 msgid "Too many arguments."
 msgstr "Çok fazla argüman."
 
-#: builtin/clone.c:890 contrib/scalar/scalar.c:414
+#: builtin/clone.c:905 contrib/scalar/scalar.c:413
 msgid "You must specify a repository to clone."
 msgstr "Klonlamak için bir depo belirtmelisiniz."
 
-#: builtin/clone.c:903
+#: builtin/clone.c:918
 #, c-format
 msgid "options '%s' and '%s %s' cannot be used together"
 msgstr "'%s' ve '%s %s' seçenekleri birlikte kullanılamaz"
 
-#: builtin/clone.c:920
+#: builtin/clone.c:935
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "'%s' deposu mevcut değil"
 
-#: builtin/clone.c:924 builtin/fetch.c:2052
+#: builtin/clone.c:939 builtin/fetch.c:2176
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "%s derinliği pozitif bir sayı değil"
 
-#: builtin/clone.c:934
+#: builtin/clone.c:949
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "Hedef yolu '%s' halihazırda mevcut ve boş bir dizin değil."
 
-#: builtin/clone.c:940
+#: builtin/clone.c:955
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr "Depo yolu '%s' halihazırda mevcut ve boş bir dizin değil."
 
-#: builtin/clone.c:954
+#: builtin/clone.c:969
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "Çalışma ağacı '%s' halihazırda mevcut."
 
-#: builtin/clone.c:969 builtin/clone.c:990 builtin/difftool.c:256
-#: builtin/log.c:2012 builtin/worktree.c:281 builtin/worktree.c:313
+#: builtin/clone.c:984 builtin/clone.c:1005 builtin/difftool.c:256
+#: builtin/log.c:2037 builtin/worktree.c:350 builtin/worktree.c:382
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "şunun öncü dizinleri oluşturulamadı: '%s'"
 
-#: builtin/clone.c:974
+#: builtin/clone.c:989
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "'%s' çalışma ağacı dizini oluşturulamadı"
 
-#: builtin/clone.c:994
+#: builtin/clone.c:1009
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "'%s' çıplak deposuna klonlanıyor...\n"
 
-#: builtin/clone.c:996
+#: builtin/clone.c:1011
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Klonlama konumu: '%s'...\n"
 
-#: builtin/clone.c:1025
+#: builtin/clone.c:1040
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
 msgstr ""
 "clone --recursive hem --reference hem --reference-if-able ile uyumlu değil"
 
-#: builtin/clone.c:1080 builtin/remote.c:200 builtin/remote.c:710
+#: builtin/clone.c:1116 builtin/remote.c:201 builtin/remote.c:721
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "'%s' geçerli bir uzak konum adı değil"
 
-#: builtin/clone.c:1121
+#: builtin/clone.c:1157
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "--depth yerel klonlarda yok sayılır; yerine file:// kullanın."
 
-#: builtin/clone.c:1123
+#: builtin/clone.c:1159
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr "--shallow-since yerel klonlarda yok sayılır; yerine file:// kullanın."
 
-#: builtin/clone.c:1125
+#: builtin/clone.c:1161
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-exclude yerel klonlarda yok sayılır; yerine file:// kullanın."
 
-#: builtin/clone.c:1127
+#: builtin/clone.c:1163
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr "--filter yerel klonlarda yok sayılır; yerine file:// kullanın."
 
-#: builtin/clone.c:1132
+#: builtin/clone.c:1168
 msgid "source repository is shallow, ignoring --local"
 msgstr "kaynak depo sığ, --local yok sayılıyor"
 
-#: builtin/clone.c:1137
+#: builtin/clone.c:1173
 msgid "--local is ignored"
 msgstr "--local yok sayıldı"
 
-#: builtin/clone.c:1216 builtin/clone.c:1276
+#: builtin/clone.c:1185
+msgid "cannot clone from filtered bundle"
+msgstr "süzülmüş demetten klonlanamıyor"
+
+#: builtin/clone.c:1265 builtin/clone.c:1324
 msgid "remote transport reported error"
 msgstr "uzak konum taşıması hata bildirdi"
 
-#: builtin/clone.c:1228 builtin/clone.c:1239
+#: builtin/clone.c:1277 builtin/clone.c:1289
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "%s uzak dalı %s üstkaynağında bulunamadı"
 
-#: builtin/clone.c:1242
+#: builtin/clone.c:1292
 msgid "You appear to have cloned an empty repository."
 msgstr "Boş bir depoyu klonlamış görünüyorsunuz."
 
@@ -13493,7 +13880,7 @@ msgstr ""
 "split[=<strateji>]] [--reachable|--stdin-packs|--stdin-commits] [--changed-"
 "paths] [--[no-]max-new-filters <n>] [--[no-]progress] <bölme-seçenekleri>"
 
-#: builtin/commit-graph.c:51 builtin/fetch.c:192 builtin/log.c:1794
+#: builtin/commit-graph.c:51 builtin/fetch.c:196 builtin/log.c:1813
 msgid "dir"
 msgstr "dizin"
 
@@ -13595,7 +13982,7 @@ msgstr ""
 msgid "duplicate parent %s ignored"
 msgstr "yinelenmiş üst öge %s yok sayıldı"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:577
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:590
 #, c-format
 msgid "not a valid object name %s"
 msgstr "%s geçerli bir nesne adı değil"
@@ -13618,13 +14005,13 @@ msgstr "üst öge"
 msgid "id of a parent commit object"
 msgstr "bir üst işleme ögesinin no'su"
 
-#: builtin/commit-tree.c:112 builtin/commit.c:1627 builtin/merge.c:284
-#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1677
-#: builtin/tag.c:454
+#: builtin/commit-tree.c:112 builtin/commit.c:1626 builtin/merge.c:284
+#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1666
+#: builtin/tag.c:455
 msgid "message"
 msgstr "ileti"
 
-#: builtin/commit-tree.c:113 builtin/commit.c:1627
+#: builtin/commit-tree.c:113 builtin/commit.c:1626
 msgid "commit message"
 msgstr "işleme iletisi"
 
@@ -13632,7 +14019,7 @@ msgstr "işleme iletisi"
 msgid "read commit log message from file"
 msgstr "işleme günlük iletisini dosyadan oku"
 
-#: builtin/commit-tree.c:119 builtin/commit.c:1644 builtin/merge.c:303
+#: builtin/commit-tree.c:119 builtin/commit.c:1643 builtin/merge.c:303
 #: builtin/pull.c:180 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "işlemeyi GPG ile imzala"
@@ -13645,15 +14032,15 @@ msgstr "bir tam ağaç vermeli"
 msgid "git commit-tree: failed to read"
 msgstr "git commit-tree: okunamadı"
 
-#: builtin/commit.c:42
+#: builtin/commit.c:43
 msgid "git commit [<options>] [--] <pathspec>..."
 msgstr "git commit [<seçenekler>] [--] <yol-blrtç>..."
 
-#: builtin/commit.c:47
+#: builtin/commit.c:48
 msgid "git status [<options>] [--] <pathspec>..."
 msgstr "git status [<seçenekler>] [--] <yol-blrtç>..."
 
-#: builtin/commit.c:52
+#: builtin/commit.c:53
 msgid ""
 "You asked to amend the most recent commit, but doing so would make\n"
 "it empty. You can repeat your command with --allow-empty, or you can\n"
@@ -13663,7 +14050,7 @@ msgstr ""
 "boş yapacaktır. Komutunuzu --allow-empty ile yineleyebilir veya\n"
 "işlemeyi \"git reset HEAD^\" ile tümüyle kaldırabilirsiniz.\n"
 
-#: builtin/commit.c:57
+#: builtin/commit.c:58
 msgid ""
 "The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
 "If you wish to commit it anyway, use:\n"
@@ -13677,15 +14064,15 @@ msgstr ""
 "\tgit commit --allow-empty\n"
 "\n"
 
-#: builtin/commit.c:64
+#: builtin/commit.c:65
 msgid "Otherwise, please use 'git rebase --skip'\n"
 msgstr "Aksi durumda, lütfen 'git rebase --skip' kullanın.\n"
 
-#: builtin/commit.c:67
+#: builtin/commit.c:68
 msgid "Otherwise, please use 'git cherry-pick --skip'\n"
 msgstr "Aksi durumda, lütfen 'git cherry-pick --skip' kullanın.\n"
 
-#: builtin/commit.c:70
+#: builtin/commit.c:71
 msgid ""
 "and then use:\n"
 "\n"
@@ -13707,69 +14094,69 @@ msgstr ""
 "\tgit cherry-pick --skip\n"
 "\n"
 
-#: builtin/commit.c:325
+#: builtin/commit.c:326
 msgid "failed to unpack HEAD tree object"
 msgstr "HEAD ağaç nesnesi açılamadı"
 
-#: builtin/commit.c:375
+#: builtin/commit.c:376
 msgid "No paths with --include/--only does not make sense."
 msgstr "--include/--only içermeyen yollar bir anlam ifade etmiyor."
 
-#: builtin/commit.c:387
+#: builtin/commit.c:388
 msgid "unable to create temporary index"
 msgstr "geçici indeks oluşturulamıyor"
 
-#: builtin/commit.c:396
+#: builtin/commit.c:397
 msgid "interactive add failed"
 msgstr "etkileşimli ekleme başarısız"
 
-#: builtin/commit.c:411
+#: builtin/commit.c:412
 msgid "unable to update temporary index"
 msgstr "geçici indeks güncellenemiyor"
 
-#: builtin/commit.c:413
+#: builtin/commit.c:414
 msgid "Failed to update main cache tree"
 msgstr "Ana önbellek ağacı güncellenemedi"
 
-#: builtin/commit.c:438 builtin/commit.c:461 builtin/commit.c:509
+#: builtin/commit.c:439 builtin/commit.c:462 builtin/commit.c:510
 msgid "unable to write new_index file"
 msgstr "new_index dosyası yazılamıyor"
 
-#: builtin/commit.c:490
+#: builtin/commit.c:491
 msgid "cannot do a partial commit during a merge."
 msgstr "Bir birleştirme sırasında kısmi işleme yapılamaz."
 
-#: builtin/commit.c:492
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr "Bir seç-al sırasında kısmi işleme yapılamaz."
 
-#: builtin/commit.c:494
+#: builtin/commit.c:495
 msgid "cannot do a partial commit during a rebase."
 msgstr "Bir yeniden temellendirme sırasında kısmi işleme yapılamaz."
 
-#: builtin/commit.c:502
+#: builtin/commit.c:503
 msgid "cannot read the index"
 msgstr "indeks okunamıyor"
 
-#: builtin/commit.c:521
+#: builtin/commit.c:522
 msgid "unable to write temporary index file"
 msgstr "geçici indeks dosyası yazılamıyor"
 
-#: builtin/commit.c:619
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "'%s' işlemesinde yazar üstbilgisi yok"
 
-#: builtin/commit.c:621
+#: builtin/commit.c:622
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "'%s' işlemesindeki yazar satırı hatalı oluşturulmuş"
 
-#: builtin/commit.c:640
+#: builtin/commit.c:641
 msgid "malformed --author parameter"
 msgstr "hatalı oluşturulmuş --author parametresi"
 
-#: builtin/commit.c:693
+#: builtin/commit.c:694
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
@@ -13777,43 +14164,43 @@ msgstr ""
 "mevcut işleme iletisinde kullanılmayan bir yorum\n"
 "karakteri seçilemiyor"
 
-#: builtin/commit.c:747 builtin/commit.c:781 builtin/commit.c:1166
+#: builtin/commit.c:750 builtin/commit.c:784 builtin/commit.c:1170
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "%s işlemesi aranamadı"
 
-#: builtin/commit.c:759 builtin/shortlog.c:416
+#: builtin/commit.c:762 builtin/shortlog.c:417
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(günlük iletisi standart girdi'den okunuyor)\n"
 
-#: builtin/commit.c:761
+#: builtin/commit.c:764
 msgid "could not read log from standard input"
 msgstr "günlük standart girdi'den okunamadı"
 
-#: builtin/commit.c:765
+#: builtin/commit.c:768
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "günlük dosyası '%s' okunamadı"
 
-#: builtin/commit.c:802
+#: builtin/commit.c:805
 #, c-format
 msgid "options '%s' and '%s:%s' cannot be used together"
 msgstr "'%s' ve '%s:%s' seçenekleri birlikte kullanılamaz"
 
-#: builtin/commit.c:814 builtin/commit.c:830
+#: builtin/commit.c:817 builtin/commit.c:833
 msgid "could not read SQUASH_MSG"
 msgstr "SQUASH_MSG okunamadı"
 
-#: builtin/commit.c:821
+#: builtin/commit.c:824
 msgid "could not read MERGE_MSG"
 msgstr "MERGE_MSG okunamadı"
 
-#: builtin/commit.c:881
+#: builtin/commit.c:884
 msgid "could not write commit template"
 msgstr "işleme şablonu yazılamadı"
 
-#: builtin/commit.c:894
+#: builtin/commit.c:897
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13822,7 +14209,7 @@ msgstr ""
 "Lütfen değişiklikleriniz için bir işleme iletisi girin. '%c' ile başlayan\n"
 "satırlar yok sayılacaktır.\n"
 
-#: builtin/commit.c:896
+#: builtin/commit.c:899
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13831,7 +14218,7 @@ msgstr ""
 "Lütfen değişiklikleriniz için bir işleme iletisi girin. '%c' ile başlayan\n"
 "satırlar yok sayılacaktır. Boş bir ileti işlemeyi iptal eder.\n"
 
-#: builtin/commit.c:900
+#: builtin/commit.c:903
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13840,7 +14227,7 @@ msgstr ""
 "Lütfen değişiklikleriniz için bir işleme iletisi girin. '%c' ile başlayan\n"
 "satırlar tutulacaktır; isterseniz onları kaldırabilirsiniz.\n"
 
-#: builtin/commit.c:904
+#: builtin/commit.c:907
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13851,7 +14238,7 @@ msgstr ""
 "satırlar tutulacaktır; isterseniz onları kaldırabilirsiniz.\n"
 "Boş bir ileti işlemeyi iptal eder.\n"
 
-#: builtin/commit.c:916
+#: builtin/commit.c:919
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -13865,7 +14252,7 @@ msgstr ""
 "\tgit update-ref -d MERGE_HEAD\n"
 "ve yeniden deneyin.\n"
 
-#: builtin/commit.c:921
+#: builtin/commit.c:924
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -13879,174 +14266,152 @@ msgstr ""
 "\tgit update-ref -d CHERRY_PICK_HEAD\n"
 "ve yeniden deneyin.\n"
 
-#: builtin/commit.c:948
+#: builtin/commit.c:951
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%sYazar:     %.*s <%.*s>"
 
-#: builtin/commit.c:956
+#: builtin/commit.c:959
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%sTarih:     %s"
 
-#: builtin/commit.c:963
+#: builtin/commit.c:966
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%sİşleyici:  %.*s <%.*s>"
 
-#: builtin/commit.c:981
+#: builtin/commit.c:984
 msgid "Cannot read index"
 msgstr "İndeks okunamıyor"
 
-#: builtin/commit.c:1026
+#: builtin/commit.c:1029
 msgid "unable to pass trailers to --trailers"
 msgstr "--trailers'a artbilgiler geçirilemiyor"
 
-#: builtin/commit.c:1066
+#: builtin/commit.c:1069
 msgid "Error building trees"
 msgstr "Ağaçlar yapılırken hata"
 
-#: builtin/commit.c:1080 builtin/tag.c:316
+#: builtin/commit.c:1083 builtin/tag.c:317
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "Lütfen iletiyi -m veya -F seçeneğini kullanarak destekleyin.\n"
 
-#: builtin/commit.c:1124
+#: builtin/commit.c:1128
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr ""
 "--author '%s', 'Ad <e-posta>' biçiminde değil ve mevcut bir yazarla "
 "eşleşmiyor"
 
-#: builtin/commit.c:1138
+#: builtin/commit.c:1142
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "Geçersiz yok sayılanları göster kipi '%s'"
 
-#: builtin/commit.c:1156 builtin/commit.c:1451
+#: builtin/commit.c:1160 builtin/commit.c:1450
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "Geçersiz izlenmeyen dosyaları göster kipi '%s'"
 
-#: builtin/commit.c:1227
+#: builtin/commit.c:1231
 msgid "You are in the middle of a merge -- cannot reword."
 msgstr "Bir birleştirmenin tam ortasındasınız -- ileti değiştirilemiyor."
 
-#: builtin/commit.c:1229
+#: builtin/commit.c:1233
 msgid "You are in the middle of a cherry-pick -- cannot reword."
 msgstr "Bir seç-al'ın tam ortasındasınız -- ileti değiştirilemiyor."
 
-#: builtin/commit.c:1232
+#: builtin/commit.c:1236
 #, c-format
 msgid "reword option of '%s' and path '%s' cannot be used together"
 msgstr ""
 "'%s' ögesinin yeniden yazım seçeneği ve '%s' yolu birlikte kullanılamaz"
 
-#: builtin/commit.c:1234
+#: builtin/commit.c:1238
 #, c-format
 msgid "reword option of '%s' and '%s' cannot be used together"
 msgstr "'%s' ögesinin yeniden yazım seçeneği ve '%s' birlikte kullanılamaz"
 
-#: builtin/commit.c:1254
-msgid "Using both --reset-author and --author does not make sense"
-msgstr "Hem --reset-author ve hem --author birlikte bir anlam ifade etmiyor"
-
-#: builtin/commit.c:1261
+#: builtin/commit.c:1263
 msgid "You have nothing to amend."
 msgstr "Değiştirecek bir şeyiniz yok."
 
-#: builtin/commit.c:1264
+#: builtin/commit.c:1266
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "Bir birleştirmenin tam ortasındasınız -- değiştirme yapılamıyor."
 
-#: builtin/commit.c:1266
+#: builtin/commit.c:1268
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr "Bir seç-al'ın tam ortasındasınız -- değiştirme yapılamıyor."
 
-#: builtin/commit.c:1268
+#: builtin/commit.c:1270
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr ""
 "Bir yeniden temellendirmenin tam ortasındasınız -- değiştirme yapılamıyor."
 
-#: builtin/commit.c:1271
-msgid "Options --squash and --fixup cannot be used together"
-msgstr "--squash ve --fixup seçenekleri birlikte kullanılamaz"
-
-#: builtin/commit.c:1281
-msgid "Only one of -c/-C/-F/--fixup can be used."
-msgstr "-c/-C/-F/--fixup arasından yalnızca bir tanesi kullanılabilir."
-
-#: builtin/commit.c:1283
-msgid "Option -m cannot be combined with -c/-C/-F."
-msgstr "-m seçeneği -c/-C/-F ile birlikte kullanılamaz."
-
-#: builtin/commit.c:1292
+#: builtin/commit.c:1290
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr ""
 "--reset-author yalnızca -C, -c veya --amend ile birlikte kullanılabilir."
 
-#: builtin/commit.c:1310
-msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
-msgstr ""
-"--include/--only/--all/--interactive/--patch arasından yalnızca bir tanesi "
-"kullanılabilir."
-
-#: builtin/commit.c:1338
+#: builtin/commit.c:1337
 #, c-format
 msgid "unknown option: --fixup=%s:%s"
 msgstr "bilinmeyen seçenek: --fixup=%s:%s"
 
-#: builtin/commit.c:1355
+#: builtin/commit.c:1354
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "'%s ...' yolları -a ile bir anlam ifade etmiyor"
 
-#: builtin/commit.c:1486 builtin/commit.c:1655
+#: builtin/commit.c:1485 builtin/commit.c:1654
 msgid "show status concisely"
 msgstr "durumu kısaca göster"
 
-#: builtin/commit.c:1488 builtin/commit.c:1657
+#: builtin/commit.c:1487 builtin/commit.c:1656
 msgid "show branch information"
 msgstr "dal bilgisini göster"
 
-#: builtin/commit.c:1490
+#: builtin/commit.c:1489
 msgid "show stash information"
 msgstr "zula bilgisini göster"
 
-#: builtin/commit.c:1492 builtin/commit.c:1659
+#: builtin/commit.c:1491 builtin/commit.c:1658
 msgid "compute full ahead/behind values"
 msgstr "tam önünde/arkasında değerlerini hesapla"
 
-#: builtin/commit.c:1494
+#: builtin/commit.c:1493
 msgid "version"
 msgstr "sürüm"
 
-#: builtin/commit.c:1494 builtin/commit.c:1661 builtin/push.c:551
-#: builtin/worktree.c:690
+#: builtin/commit.c:1493 builtin/commit.c:1660 builtin/push.c:551
+#: builtin/worktree.c:765
 msgid "machine-readable output"
 msgstr "makine tarafından okunabilir çıktı"
 
-#: builtin/commit.c:1497 builtin/commit.c:1663
+#: builtin/commit.c:1496 builtin/commit.c:1662
 msgid "show status in long format (default)"
 msgstr "durumu uzun biçimde göster (öntanımlı)"
 
-#: builtin/commit.c:1500 builtin/commit.c:1666
+#: builtin/commit.c:1499 builtin/commit.c:1665
 msgid "terminate entries with NUL"
 msgstr "girdileri NUL ile sonlandır"
 
-#: builtin/commit.c:1502 builtin/commit.c:1506 builtin/commit.c:1669
+#: builtin/commit.c:1501 builtin/commit.c:1505 builtin/commit.c:1668
 #: builtin/fast-export.c:1172 builtin/fast-export.c:1175
-#: builtin/fast-export.c:1178 builtin/rebase.c:1111 parse-options.h:337
+#: builtin/fast-export.c:1178 builtin/rebase.c:1139 parse-options.h:368
 msgid "mode"
 msgstr "kip"
 
-#: builtin/commit.c:1503 builtin/commit.c:1669
+#: builtin/commit.c:1502 builtin/commit.c:1668
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr ""
 "izlenmeyen dosyaları göster, ist. bağlı kipler: all, normal, no (Öntanım.: "
 "all)"
 
-#: builtin/commit.c:1507
+#: builtin/commit.c:1506
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
@@ -14054,11 +14419,11 @@ msgstr ""
 "yok sayılan dosyaları göster, isteğe bağlı kipler: traditional (geleneksel) "
 "matching (eşleşen), no (hayır) (Öntanımlı: traditional)."
 
-#: builtin/commit.c:1509 parse-options.h:192
+#: builtin/commit.c:1508 parse-options.h:197
 msgid "when"
 msgstr "ne zaman"
 
-#: builtin/commit.c:1510
+#: builtin/commit.c:1509
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
@@ -14066,198 +14431,198 @@ msgstr ""
 "altmodüllere olan değişiklikleri yok say, isteğe bağlı ne zaman: all "
 "(hepsi), dirty (kirli), untracked (izlenmeyen) (Öntanımlı: all)."
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1511
 msgid "list untracked files in columns"
 msgstr "izlenmeyen dosyaları sütunlarla göster"
 
-#: builtin/commit.c:1513
+#: builtin/commit.c:1512
 msgid "do not detect renames"
 msgstr "yeniden adlandırmaları algılama"
 
-#: builtin/commit.c:1515
+#: builtin/commit.c:1514
 msgid "detect renames, optionally set similarity index"
 msgstr ""
 "yeniden adlandırmaları algıla, isteğe bağlı olarak benzerlik indeksi ayarla"
 
-#: builtin/commit.c:1538
+#: builtin/commit.c:1537
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr ""
 "Yok sayılan ve izlenmeyen dosyalar argümanlarının desteklenmeyen birlikte "
 "kullanımı"
 
-#: builtin/commit.c:1620
+#: builtin/commit.c:1619
 msgid "suppress summary after successful commit"
 msgstr "başarılı işlemenin ardından özeti gizle"
 
-#: builtin/commit.c:1621
+#: builtin/commit.c:1620
 msgid "show diff in commit message template"
 msgstr "diff'i işleme iletisi şablonunda göster"
 
-#: builtin/commit.c:1623
+#: builtin/commit.c:1622
 msgid "Commit message options"
 msgstr "İşleme iletisi seçenekleri"
 
-#: builtin/commit.c:1624 builtin/merge.c:288 builtin/tag.c:456
+#: builtin/commit.c:1623 builtin/merge.c:288 builtin/tag.c:457
 msgid "read message from file"
 msgstr "iletiyi dosyadan oku"
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1624
 msgid "author"
 msgstr "yazar"
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1624
 msgid "override author for commit"
 msgstr "işleme yazarını geçersiz kıl"
 
-#: builtin/commit.c:1626 builtin/gc.c:551
+#: builtin/commit.c:1625 builtin/gc.c:551
 msgid "date"
 msgstr "tarih"
 
-#: builtin/commit.c:1626
+#: builtin/commit.c:1625
 msgid "override date for commit"
 msgstr "işleme tarihini geçersiz kıl"
 
-#: builtin/commit.c:1628 builtin/commit.c:1629 builtin/commit.c:1635
-#: parse-options.h:329 ref-filter.h:89
+#: builtin/commit.c:1627 builtin/commit.c:1628 builtin/commit.c:1634
+#: parse-options.h:360 ref-filter.h:89
 msgid "commit"
 msgstr "işleme"
 
-#: builtin/commit.c:1628
+#: builtin/commit.c:1627
 msgid "reuse and edit message from specified commit"
 msgstr "belirtilen işlemenin iletisini düzenle ve yeniden kullan"
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1628
 msgid "reuse message from specified commit"
 msgstr "belirtilen işlemenin iletisini yeniden kullan"
 
 #. TRANSLATORS: Leave "[(amend|reword):]" as-is,
 #. and only translate <commit>.
 #.
-#: builtin/commit.c:1634
+#: builtin/commit.c:1633
 msgid "[(amend|reword):]commit"
 msgstr "[(amend|reword):]işleme"
 
-#: builtin/commit.c:1634
+#: builtin/commit.c:1633
 msgid ""
 "use autosquash formatted message to fixup or amend/reword specified commit"
 msgstr ""
 "belirtilen işlemeyi değiştirmek/iletiyi yeniden yazmak için kendiliğinden "
 "tıkıştırma tarafından biçimlendirilen iletiyi kullan"
 
-#: builtin/commit.c:1635
+#: builtin/commit.c:1634
 msgid "use autosquash formatted message to squash specified commit"
 msgstr ""
 "belirtilen işlemeyi tıkıştırmak için kendiliğinden tıkıştırma tarafından "
 "biçimlendirilen iletiyi kullan"
 
-#: builtin/commit.c:1636
+#: builtin/commit.c:1635
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr ""
 "işlemenin yazarı şu andan itibaren benim (-C/-c/--amend ile kullanıldı)"
 
-#: builtin/commit.c:1637 builtin/interpret-trailers.c:111
+#: builtin/commit.c:1636 builtin/interpret-trailers.c:111
 msgid "trailer"
 msgstr "artbilgi"
 
-#: builtin/commit.c:1637
+#: builtin/commit.c:1636
 msgid "add custom trailer(s)"
 msgstr "özel artbilgiler ekle"
 
-#: builtin/commit.c:1638 builtin/log.c:1769 builtin/merge.c:306
+#: builtin/commit.c:1637 builtin/log.c:1788 builtin/merge.c:306
 #: builtin/pull.c:146 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr "bir Signed-off-by artbilgisi ekle"
 
-#: builtin/commit.c:1639
+#: builtin/commit.c:1638
 msgid "use specified template file"
 msgstr "belirtilen şablon dosyasını kullan"
 
-#: builtin/commit.c:1640
+#: builtin/commit.c:1639
 msgid "force edit of commit"
 msgstr "işlemeyi zorla düzenle"
 
-#: builtin/commit.c:1642
+#: builtin/commit.c:1641
 msgid "include status in commit message template"
 msgstr "işleme iletisi şablonunda durumu içer"
 
-#: builtin/commit.c:1647
+#: builtin/commit.c:1646
 msgid "Commit contents options"
 msgstr "İşleme içeriği seçenekleri"
 
-#: builtin/commit.c:1648
+#: builtin/commit.c:1647
 msgid "commit all changed files"
 msgstr "değiştirilen tüm dosyaları gönder"
 
-#: builtin/commit.c:1649
+#: builtin/commit.c:1648
 msgid "add specified files to index for commit"
 msgstr "belirtilen dosyaları işleme için indekse ekle"
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1649
 msgid "interactively add files"
 msgstr "dosyaları etkileşimli olarak ekle"
 
-#: builtin/commit.c:1651
+#: builtin/commit.c:1650
 msgid "interactively add changes"
 msgstr "değişiklikleri etkileşimli olarak ekle"
 
-#: builtin/commit.c:1652
+#: builtin/commit.c:1651
 msgid "commit only specified files"
 msgstr "yalnızca belirtilen dosyaları gönder"
 
-#: builtin/commit.c:1653
+#: builtin/commit.c:1652
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr "pre-commit ve commit-msg kancalarını atla"
 
-#: builtin/commit.c:1654
+#: builtin/commit.c:1653
 msgid "show what would be committed"
 msgstr "neyin işleneceğini göster"
 
-#: builtin/commit.c:1667
+#: builtin/commit.c:1666
 msgid "amend previous commit"
 msgstr "önceki işlemeyi değiştir"
 
-#: builtin/commit.c:1668
+#: builtin/commit.c:1667
 msgid "bypass post-rewrite hook"
 msgstr "post-rewrite kancasını atla"
 
-#: builtin/commit.c:1675
+#: builtin/commit.c:1674
 msgid "ok to record an empty change"
 msgstr "boş bir değişikliğin kaydı yazılabilir"
 
-#: builtin/commit.c:1677
+#: builtin/commit.c:1676
 msgid "ok to record a change with an empty message"
 msgstr "boş iletili bir değişikliğin kaydı yazılabilir"
 
-#: builtin/commit.c:1753
+#: builtin/commit.c:1752
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Hasar görmüş MERGE_HEAD dosyası (%s)"
 
-#: builtin/commit.c:1760
+#: builtin/commit.c:1759
 msgid "could not read MERGE_MODE"
 msgstr "MERGE_MODE okunamadı"
 
-#: builtin/commit.c:1781
+#: builtin/commit.c:1780
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "işleme iletisi okunamadı: %s"
 
-#: builtin/commit.c:1788
+#: builtin/commit.c:1787
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "İşleme iletisinin boş bırakılmasından ötürü iptal ediliyor.\n"
 
-#: builtin/commit.c:1793
+#: builtin/commit.c:1792
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "İşleme iptal ediliyor; iletiyi düzenlenmedi.\n"
 
-#: builtin/commit.c:1804
+#: builtin/commit.c:1803
 #, c-format
 msgid "Aborting commit due to empty commit message body.\n"
 msgstr "İşleme iletisi gövdesinin boş bırakılmasından ötürü iptal ediliyor.\n"
 
-#: builtin/commit.c:1840
+#: builtin/commit.c:1839
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -14380,6 +14745,10 @@ msgstr "renk ayarını bul: yuva [stdout tty]"
 msgid "Type"
 msgstr "Tür"
 
+#: builtin/config.c:154 builtin/env--helper.c:42 builtin/hash-object.c:97
+msgid "type"
+msgstr "tür"
+
 #: builtin/config.c:154 builtin/env--helper.c:43
 msgid "value is given this type"
 msgstr "değer bu türde verildi"
@@ -14594,10 +14963,6 @@ msgstr ""
 msgid "no such section: %s"
 msgstr "böyle bir bölüm yok: %s"
 
-#: builtin/count-objects.c:90
-msgid "git count-objects [-v] [-H | --human-readable]"
-msgstr "git count-objects [-v] [-H | --human-readable]"
-
 #: builtin/count-objects.c:100
 msgid "print sizes in human readable format"
 msgstr "yazdırma boyutları kişi tarafından okunabilir biçimde"
@@ -14765,7 +15130,7 @@ msgstr "yalnızca <dizgi> ile eşleşen etiketleri dikkate al"
 msgid "do not consider tags matching <pattern>"
 msgstr "<dizgi> ile eşleşen etiketleri dikkate alma"
 
-#: builtin/describe.c:570 builtin/name-rev.c:544
+#: builtin/describe.c:570 builtin/name-rev.c:595
 msgid "show abbreviated commit object as fallback"
 msgstr "kısaltılmış işleme nesnesini geri çekilinecek nesne olarak göster"
 
@@ -14813,7 +15178,7 @@ msgstr "%s...%s: birleştirme temeli yok"
 msgid "Not a git repository"
 msgstr "Bir git deposu değil"
 
-#: builtin/diff.c:537 builtin/grep.c:698
+#: builtin/diff.c:537 builtin/grep.c:700
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "geçersiz nesne '%s' verildi"
@@ -14932,11 +15297,11 @@ msgstr "'diff'e aktarıldı"
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool, çalışma ağacı veya --no-index gerektiriyor"
 
-#: builtin/difftool.c:744
+#: builtin/difftool.c:745
 msgid "no <tool> given for --tool=<tool>"
 msgstr "--tool=<araç> için bir <araç> verilmedi"
 
-#: builtin/difftool.c:751
+#: builtin/difftool.c:752
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "--extcmd=<komut> için bir <komut> verilmedi"
 
@@ -14944,10 +15309,6 @@ msgstr "--extcmd=<komut> için bir <komut> verilmedi"
 msgid "git env--helper --type=[bool|ulong] <options> <env-var>"
 msgstr "git env--helper --type=[bool|ulong] <seçenekler> <ortam-dğşkn>"
 
-#: builtin/env--helper.c:42 builtin/hash-object.c:96
-msgid "type"
-msgstr "tür"
-
 #: builtin/env--helper.c:46
 msgid "default for git_env_*(...) to fall back on"
 msgstr "git_env_*(...)'ın geri çekileceği öntanımlı"
@@ -14973,8 +15334,8 @@ msgstr ""
 "bekliyor, '%s' değil"
 
 #: builtin/fast-export.c:29
-msgid "git fast-export [rev-list-opts]"
-msgstr "git fast-export [rev-list-opts]"
+msgid "git fast-export [<rev-list-opts>]"
+msgstr "git fast-export [<revizyon-listesi-seçenekleri>]"
 
 #: builtin/fast-export.c:843
 msgid "Error: Cannot export nested tags unless --mark-tags is specified."
@@ -15031,7 +15392,7 @@ msgstr "akışı sonlandırmak için 'done' özelliğini kullan"
 msgid "skip output of blob data"
 msgstr "ikili nesne verisi çıktısını atla"
 
-#: builtin/fast-export.c:1196 builtin/log.c:1841
+#: builtin/fast-export.c:1196 builtin/log.c:1860
 msgid "refspec"
 msgstr "başvuru belirteci"
 
@@ -15063,36 +15424,36 @@ msgstr "ikili nesnelerin/işlemelerin orijinal nesne numaralarını göster"
 msgid "label tags with mark ids"
 msgstr "etiketleri im numaralarıyla adlandır"
 
-#: builtin/fast-import.c:3090
+#: builtin/fast-import.c:3097
 #, c-format
 msgid "Missing from marks for submodule '%s'"
 msgstr "'%s' altmodülü için '(on)-dan' imleri eksik"
 
-#: builtin/fast-import.c:3092
+#: builtin/fast-import.c:3099
 #, c-format
 msgid "Missing to marks for submodule '%s'"
 msgstr "'%s' altmodülü için '(o)-na' imleri eksik"
 
-#: builtin/fast-import.c:3227
+#: builtin/fast-import.c:3234
 #, c-format
 msgid "Expected 'mark' command, got %s"
 msgstr "'mark' komutu bekleniyordu, %s alındı"
 
-#: builtin/fast-import.c:3232
+#: builtin/fast-import.c:3239
 #, c-format
 msgid "Expected 'to' command, got %s"
 msgstr "'to' komutu bekleniyordu, %s alındı"
 
-#: builtin/fast-import.c:3324
+#: builtin/fast-import.c:3331
 msgid "Expected format name:filename for submodule rewrite option"
 msgstr "Altmodül yeniden yazım seçeneği için name:filename biçimi bekleniyordu"
 
-#: builtin/fast-import.c:3379
+#: builtin/fast-import.c:3386
 #, c-format
 msgid "feature '%s' forbidden in input without --allow-unsafe-features"
 msgstr "'%s' özelliği --allow-unsafe-features olmadan girdide yasaklı"
 
-#: builtin/fetch-pack.c:242
+#: builtin/fetch-pack.c:246
 #, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr "Kilit dosyası oluşturuldu; ancak raporlanmadı: %s"
@@ -15113,104 +15474,108 @@ msgstr "git fetch --multiple [<seçenekler>] [(<depo> | <grup>)...]"
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<seçenekler>]"
 
-#: builtin/fetch.c:123
+#: builtin/fetch.c:124
 msgid "fetch.parallel cannot be negative"
 msgstr "fetch.parallel negatif olamaz"
 
-#: builtin/fetch.c:146 builtin/pull.c:189
+#: builtin/fetch.c:147 builtin/pull.c:189
 msgid "fetch from all remotes"
 msgstr "tüm uzak konumlardan getir"
 
-#: builtin/fetch.c:148 builtin/pull.c:249
+#: builtin/fetch.c:149 builtin/pull.c:249
 msgid "set upstream for git pull/fetch"
 msgstr "git pull/fetch için üstkaynak ayarla"
 
-#: builtin/fetch.c:150 builtin/pull.c:192
+#: builtin/fetch.c:151 builtin/pull.c:192
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr ".git/FETCH_HEAD'in üzerine yazmak yerine ona iliştir"
 
-#: builtin/fetch.c:152
+#: builtin/fetch.c:153
 msgid "use atomic transaction to update references"
 msgstr "başvuruları güncellemek için atomsal işlem kullan"
 
-#: builtin/fetch.c:154 builtin/pull.c:195
+#: builtin/fetch.c:155 builtin/pull.c:195
 msgid "path to upload pack on remote end"
 msgstr "uzak uçtaki yükleme paketine olan yol"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:156
 msgid "force overwrite of local reference"
 msgstr "yerel başvurunun üzerine zorla yaz"
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:158
 msgid "fetch from multiple remotes"
 msgstr "birden çok uzak konumdan getir"
 
-#: builtin/fetch.c:159 builtin/pull.c:199
+#: builtin/fetch.c:160 builtin/pull.c:199
 msgid "fetch all tags and associated objects"
 msgstr "tüm etiketleri ve ilişkilendirilen nesneleri getir"
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:162
 msgid "do not fetch all tags (--no-tags)"
 msgstr "tüm etiketleri getirme (--no-tags)"
 
-#: builtin/fetch.c:163
+#: builtin/fetch.c:164
 msgid "number of submodules fetched in parallel"
 msgstr "paralelde getirilen altmodüllerin sayısı"
 
-#: builtin/fetch.c:165
+#: builtin/fetch.c:166
 msgid "modify the refspec to place all refs within refs/prefetch/"
 msgstr ""
 "başvuru belirtecini tüm başvuruları refs/prefetch/'e yerleştirecek biçimde "
 "değiştir"
 
-#: builtin/fetch.c:167 builtin/pull.c:202
+#: builtin/fetch.c:168 builtin/pull.c:202
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "artık uzak konumda olmayan uzak izleme dallarını buda"
 
-#: builtin/fetch.c:169
+#: builtin/fetch.c:170
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr ""
 "artık uzak konumda olmayan yerel etiketleri buda ve değiştirilen etiketleri "
 "güncelle"
 
-#: builtin/fetch.c:170 builtin/fetch.c:195 builtin/pull.c:123
+#: builtin/fetch.c:171 builtin/fetch.c:199 builtin/pull.c:123
 msgid "on-demand"
 msgstr "istek üzerine"
 
-#: builtin/fetch.c:171
+#: builtin/fetch.c:172
 msgid "control recursive fetching of submodules"
 msgstr "altmodüllerin özyineli getirilmesini denetle"
 
-#: builtin/fetch.c:176
+#: builtin/fetch.c:177
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr "getirilen başvuruları FETCH_HEAD dosyasına yaz"
 
-#: builtin/fetch.c:177 builtin/pull.c:210
+#: builtin/fetch.c:178 builtin/pull.c:210
 msgid "keep downloaded pack"
 msgstr "indirilen paketi tut"
 
-#: builtin/fetch.c:179
+#: builtin/fetch.c:180
 msgid "allow updating of HEAD ref"
 msgstr "HEAD başvurusunun güncellenmesine izin ver"
 
-#: builtin/fetch.c:182 builtin/fetch.c:188 builtin/pull.c:213
+#: builtin/fetch.c:183 builtin/fetch.c:189 builtin/pull.c:213
 #: builtin/pull.c:222
 msgid "deepen history of shallow clone"
 msgstr "sığ klonun geçmişini derinleştir"
 
-#: builtin/fetch.c:184 builtin/pull.c:216
+#: builtin/fetch.c:185 builtin/pull.c:216
 msgid "deepen history of shallow repository based on time"
 msgstr "zamana bağlı olarak sığ deponun geçmişini derinleştir"
 
-#: builtin/fetch.c:190 builtin/pull.c:225
+#: builtin/fetch.c:191 builtin/pull.c:225
 msgid "convert to a complete repository"
 msgstr "tam bir depoya dönüştür"
 
-#: builtin/fetch.c:193
+#: builtin/fetch.c:194
+msgid "re-fetch without negotiating common commits"
+msgstr "ortak işlemeleri pazarlık etmeden yeniden getir"
+
+#: builtin/fetch.c:197
 msgid "prepend this to submodule path output"
 msgstr "bunu altmodül yol çıktısının başına ekle"
 
-#: builtin/fetch.c:196
+#: builtin/fetch.c:200
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
@@ -15218,108 +15583,103 @@ msgstr ""
 "altmodüllerin özyineli getirilmesi için öntanımlı (yapılandırma "
 "dosyalarından daha az önceliğe iye)"
 
-#: builtin/fetch.c:200 builtin/pull.c:228
+#: builtin/fetch.c:204 builtin/pull.c:228
 msgid "accept refs that update .git/shallow"
 msgstr ".git/shallow'u güncelleyen başvuruları kabul et"
 
-#: builtin/fetch.c:201 builtin/pull.c:230
+#: builtin/fetch.c:205 builtin/pull.c:230
 msgid "refmap"
 msgstr "ilgili başvuru"
 
-#: builtin/fetch.c:202 builtin/pull.c:231
+#: builtin/fetch.c:206 builtin/pull.c:231
 msgid "specify fetch refmap"
 msgstr "getirme ile ilgili başvuruları belirt"
 
-#: builtin/fetch.c:209 builtin/pull.c:244
+#: builtin/fetch.c:213 builtin/pull.c:244
 msgid "report that we have only objects reachable from this object"
 msgstr "yalnızca bu nesneden ulaşılabilir nesnelerimiz olduğunu bildir"
 
-#: builtin/fetch.c:211
+#: builtin/fetch.c:215
 msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
 msgstr ""
 "bir paket dosyasını getirme; bunun yerine pazarlık ipuçlarının atalarını "
 "yazdır"
 
-#: builtin/fetch.c:214 builtin/fetch.c:216
+#: builtin/fetch.c:218 builtin/fetch.c:220
 msgid "run 'maintenance --auto' after fetching"
 msgstr "getirme sonrasında 'maintenance --auto' çalıştır"
 
-#: builtin/fetch.c:218 builtin/pull.c:247
+#: builtin/fetch.c:222 builtin/pull.c:247
 msgid "check for forced-updates on all updated branches"
 msgstr "tüm güncellenmiş dalları zorlanmış güncellemeler için denetle"
 
-#: builtin/fetch.c:220
+#: builtin/fetch.c:224
 msgid "write the commit-graph after fetching"
 msgstr "getirdikten sonra işleme grafiğini yaz"
 
-#: builtin/fetch.c:222
+#: builtin/fetch.c:226
 msgid "accept refspecs from stdin"
 msgstr "başvuru belirteçlerini stdin'den oku"
 
-#: builtin/fetch.c:592
+#: builtin/fetch.c:618
 msgid "couldn't find remote ref HEAD"
 msgstr "uzak HEAD başvurusu bulunamadı"
 
-#: builtin/fetch.c:766
-#, c-format
-msgid "configuration fetch.output contains invalid value %s"
-msgstr "fetch.output yapılandırması geçersiz değer içeriyor: %s"
-
-#: builtin/fetch.c:867
+#: builtin/fetch.c:893
 #, c-format
 msgid "object %s not found"
 msgstr "%s nesnesi bulunamadı"
 
-#: builtin/fetch.c:871
+#: builtin/fetch.c:897
 msgid "[up to date]"
 msgstr "[güncel]"
 
-#: builtin/fetch.c:883 builtin/fetch.c:901 builtin/fetch.c:973
+#: builtin/fetch.c:909 builtin/fetch.c:927 builtin/fetch.c:999
 msgid "[rejected]"
 msgstr "[reddedildi]"
 
-#: builtin/fetch.c:885
+#: builtin/fetch.c:911
 msgid "can't fetch in current branch"
 msgstr "geçerli dalda getirme yapılamıyor"
 
-#: builtin/fetch.c:886
+#: builtin/fetch.c:912
 msgid "checked out in another worktree"
 msgstr "başka bir çalışma ağacında çıkış yapıldı"
 
-#: builtin/fetch.c:896
+#: builtin/fetch.c:922
 msgid "[tag update]"
 msgstr "[etiket güncellemesi]"
 
-#: builtin/fetch.c:897 builtin/fetch.c:934 builtin/fetch.c:956
-#: builtin/fetch.c:968
+#: builtin/fetch.c:923 builtin/fetch.c:960 builtin/fetch.c:982
+#: builtin/fetch.c:994
 msgid "unable to update local ref"
 msgstr "yerel başvuru güncellenemiyor"
 
-#: builtin/fetch.c:901
+#: builtin/fetch.c:927
 msgid "would clobber existing tag"
 msgstr "var olan etiketi değiştirecektir"
 
-#: builtin/fetch.c:923
+#: builtin/fetch.c:949
 msgid "[new tag]"
 msgstr "[yeni etiket]"
 
-#: builtin/fetch.c:926
+#: builtin/fetch.c:952
 msgid "[new branch]"
 msgstr "[yeni dal]"
 
-#: builtin/fetch.c:929
+#: builtin/fetch.c:955
 msgid "[new ref]"
 msgstr "[yeni başvuru]"
 
-#: builtin/fetch.c:968
+#: builtin/fetch.c:994
 msgid "forced update"
 msgstr "zorlanmış güncelleme"
 
-#: builtin/fetch.c:973
+#: builtin/fetch.c:999
 msgid "non-fast-forward"
 msgstr "ileri sarım değil"
 
-#: builtin/fetch.c:1076
+#: builtin/fetch.c:1102
 msgid ""
 "fetch normally indicates which branches had a forced update,\n"
 "but that check has been disabled; to re-enable, use '--show-forced-updates'\n"
@@ -15329,7 +15689,7 @@ msgstr ""
 "ancak bu denetleme kapatılmış. Yeniden açmak için '--show-forced-updates'\n"
 "bayrağını kullanın veya 'git config fetch.showForcedUpdates true' çalıştırın."
 
-#: builtin/fetch.c:1080
+#: builtin/fetch.c:1106
 #, c-format
 msgid ""
 "it took %.2f seconds to check forced updates; you can use\n"
@@ -15342,22 +15702,22 @@ msgstr ""
 "kullanarak veya 'git config fetch.showForcedUpdates false' çalıştırarak\n"
 "bu denetlemeden kaçınabilirsiniz.\n"
 
-#: builtin/fetch.c:1112
+#: builtin/fetch.c:1136
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s tüm gerekli nesneleri göndermedi\n"
 
-#: builtin/fetch.c:1141
+#: builtin/fetch.c:1156
 #, c-format
 msgid "rejected %s because shallow roots are not allowed to be updated"
 msgstr "%s reddedildi; çünkü sığ köklerin güncellenmesine izin verilmiyor"
 
-#: builtin/fetch.c:1231 builtin/fetch.c:1379
+#: builtin/fetch.c:1259 builtin/fetch.c:1418
 #, c-format
 msgid "From %.*s\n"
 msgstr "Şu konumdan: %.*s\n"
 
-#: builtin/fetch.c:1252
+#: builtin/fetch.c:1269
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -15366,49 +15726,49 @@ msgstr ""
 "bazı yerel başvurular güncellenemedi; 'git remote prune %s'\n"
 "kullanarak eski ve çakışan dalları kaldırmayı deneyin"
 
-#: builtin/fetch.c:1349
+#: builtin/fetch.c:1377
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s sarkacak)"
 
-#: builtin/fetch.c:1350
+#: builtin/fetch.c:1378
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s sarkmaya başladı)"
 
-#: builtin/fetch.c:1382
+#: builtin/fetch.c:1421
 msgid "[deleted]"
 msgstr "[silindi]"
 
-#: builtin/fetch.c:1383 builtin/remote.c:1128
+#: builtin/fetch.c:1422 builtin/remote.c:1153
 msgid "(none)"
 msgstr "(hiçbiri)"
 
-#: builtin/fetch.c:1405
+#: builtin/fetch.c:1446
 #, c-format
 msgid "refusing to fetch into branch '%s' checked out at '%s'"
 msgstr "'%s' dalına getirme reddediliyor, '%s' konumunda çıkış yapıldı"
 
-#: builtin/fetch.c:1425
+#: builtin/fetch.c:1466
 #, c-format
 msgid "option \"%s\" value \"%s\" is not valid for %s"
 msgstr "\"%s\" seçeneği \"%s\" değeri %s için geçerli değil"
 
-#: builtin/fetch.c:1428
+#: builtin/fetch.c:1469
 #, c-format
 msgid "option \"%s\" is ignored for %s\n"
 msgstr "\"%s\" seçeneği %s için yok sayılıyor\n"
 
-#: builtin/fetch.c:1455
+#: builtin/fetch.c:1496
 #, c-format
 msgid "the object %s does not exist"
 msgstr "%s diye bir nesne yok"
 
-#: builtin/fetch.c:1643
+#: builtin/fetch.c:1748
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr "birden çok dal algılandı, --set-upstream ile uyumsuz"
 
-#: builtin/fetch.c:1655
+#: builtin/fetch.c:1760
 #, c-format
 msgid ""
 "could not set upstream of HEAD to '%s' from '%s' when it does not point to "
@@ -15417,19 +15777,19 @@ msgstr ""
 "HEAD'in üst kaynağı '%s' olarak '%s' konumundan ayarlanamadı; çünkü herhangi "
 "bir dala işaret etmiyor."
 
-#: builtin/fetch.c:1668
+#: builtin/fetch.c:1773
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr "bir uzak konum uzak izleme dalı için üstkaynak ayarlanmıyor"
 
-#: builtin/fetch.c:1670
+#: builtin/fetch.c:1775
 msgid "not setting upstream for a remote tag"
 msgstr "bir uzak konum etiketi için üstkaynak ayarlanmıyor"
 
-#: builtin/fetch.c:1672
+#: builtin/fetch.c:1777
 msgid "unknown branch type"
 msgstr "bilinmeyen dal türü"
 
-#: builtin/fetch.c:1674
+#: builtin/fetch.c:1779
 msgid ""
 "no source branch found;\n"
 "you need to specify exactly one branch with the --set-upstream option"
@@ -15437,22 +15797,22 @@ msgstr ""
 "Kaynak dal bulunamadı.\n"
 "--set-upstream seçeneği ile tam olarak bir dal belirtmeniz gerekiyor."
 
-#: builtin/fetch.c:1804 builtin/fetch.c:1867
+#: builtin/fetch.c:1904 builtin/fetch.c:1967
 #, c-format
 msgid "Fetching %s\n"
 msgstr "%s getiriliyor\n"
 
-#: builtin/fetch.c:1814 builtin/fetch.c:1869
+#: builtin/fetch.c:1914 builtin/fetch.c:1969
 #, c-format
 msgid "could not fetch %s"
 msgstr "%s getirilemedi"
 
-#: builtin/fetch.c:1826
+#: builtin/fetch.c:1926
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr "'%s' getirilemedi (çıkış kodu: %d)\n"
 
-#: builtin/fetch.c:1930
+#: builtin/fetch.c:2030
 msgid ""
 "no remote repository specified; please specify either a URL or a\n"
 "remote name from which new revisions should be fetched"
@@ -15460,50 +15820,49 @@ msgstr ""
 "Bir uzak dal belirtilmedi. Lütfen yeni revizyonların\n"
 "getirileceği bir URL veya uzak konum adı belirtin."
 
-#: builtin/fetch.c:1966
+#: builtin/fetch.c:2066
 msgid "you need to specify a tag name"
 msgstr "bir etiket adı belirtmeniz gerekiyor"
 
-#: builtin/fetch.c:2032
-msgid "--negotiate-only needs one or more --negotiate-tip=*"
-msgstr ""
-"--negotiate-only'nin bir veya daha çok --negotiate-tip=* gereksinimi var"
+#: builtin/fetch.c:2156
+msgid "--negotiate-only needs one or more --negotiation-tip=*"
+msgstr "--negotiate-only'e bir veya daha çok --negotiation-tip=* gerekiyor"
 
-#: builtin/fetch.c:2036
+#: builtin/fetch.c:2160
 msgid "negative depth in --deepen is not supported"
 msgstr "--deepen içinde negatif derinlik desteklenmiyor"
 
-#: builtin/fetch.c:2045
+#: builtin/fetch.c:2169
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "tam bir depo üzerinde --unshallow bir anlam ifade etmiyor"
 
-#: builtin/fetch.c:2062
+#: builtin/fetch.c:2186
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all bir depo argümanı almıyor"
 
-#: builtin/fetch.c:2064
+#: builtin/fetch.c:2188
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all başvuru belirteçleri ile birlikte bir anlam ifade etmiyor"
 
-#: builtin/fetch.c:2073
+#: builtin/fetch.c:2197
 #, c-format
 msgid "no such remote or remote group: %s"
 msgstr "böyle bir uzak konum veya uzak konum grubu yok: %s"
 
-#: builtin/fetch.c:2081
+#: builtin/fetch.c:2205
 msgid "fetching a group and specifying refspecs does not make sense"
 msgstr ""
 "bir grubu getirme ve başvuru belirteçleri tanımlama bir anlam ifade etmiyor"
 
-#: builtin/fetch.c:2097
+#: builtin/fetch.c:2221
 msgid "must supply remote when using --negotiate-only"
 msgstr "--negotiate-only kullanırken uzak konum sağlanmalıdır"
 
-#: builtin/fetch.c:2102
+#: builtin/fetch.c:2226
 msgid "protocol does not support --negotiate-only, exiting"
 msgstr "protokol, --negotiate-only desteklemediğinden çıkılıyor"
 
-#: builtin/fetch.c:2121
+#: builtin/fetch.c:2246
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -15511,11 +15870,11 @@ msgstr ""
 "--filter yalnızca extensions.partialclone içinde yapılandırılmış uzak konum "
 "ile kullanılabilir."
 
-#: builtin/fetch.c:2125
+#: builtin/fetch.c:2250
 msgid "--atomic can only be used when fetching from one remote"
 msgstr "--atomic yalnızca bir uzak konumdan getirirken kullanılabilir"
 
-#: builtin/fetch.c:2129
+#: builtin/fetch.c:2254
 msgid "--stdin can only be used when fetching from one remote"
 msgstr ""
 "--stdin seçeneği yalnızca bir uzak konumdan getirilirken kullanılabilir"
@@ -15586,7 +15945,7 @@ msgstr "yer tutucuları Tcl'nin anlayabileceği biçimde tırnak içine al"
 msgid "show only <n> matched refs"
 msgstr "yalnızca <n> eşleşen başvuruyu göster"
 
-#: builtin/for-each-ref.c:42 builtin/tag.c:481
+#: builtin/for-each-ref.c:42 builtin/tag.c:482
 msgid "respect format colors"
 msgstr "biçim renklerine uy"
 
@@ -15780,7 +16139,7 @@ msgstr "Nesne dizinleri denetleniyor"
 msgid "Checking %s link"
 msgstr "%s bağ denetleniyor"
 
-#: builtin/fsck.c:710 builtin/index-pack.c:859
+#: builtin/fsck.c:710 builtin/index-pack.c:862
 #, c-format
 msgid "invalid %s"
 msgstr "geçersiz %s"
@@ -15849,7 +16208,7 @@ msgstr "ek olarak paketleri ve alternatif nesneleri de dikkate al"
 msgid "check only connectivity"
 msgstr "yalnızca bağlanabilirliği denetle"
 
-#: builtin/fsck.c:798 builtin/mktag.c:76
+#: builtin/fsck.c:798 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr "daha kesin denetlemeyi etkinleştir"
 
@@ -15879,6 +16238,118 @@ msgstr "%s: nesne kayıp"
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "geçersiz parametre: sha1 bekleniyordu, '%s' alındı"
 
+#: builtin/fsmonitor--daemon.c:13
+msgid "git fsmonitor--daemon start [<options>]"
+msgstr "git fsmonitor--daemon start [<seçenekler>]"
+
+#: builtin/fsmonitor--daemon.c:14
+msgid "git fsmonitor--daemon run [<options>]"
+msgstr "git fsmonitor--daemon run [<seçenekler>]"
+
+#: builtin/fsmonitor--daemon.c:15
+msgid "git fsmonitor--daemon stop"
+msgstr "git fsmonitor--daemon stop"
+
+#: builtin/fsmonitor--daemon.c:16
+msgid "git fsmonitor--daemon status"
+msgstr "git fsmonitor--daemon status"
+
+#: builtin/fsmonitor--daemon.c:38 builtin/fsmonitor--daemon.c:47
+#, c-format
+msgid "value of '%s' out of range: %d"
+msgstr "'%s' değeri erim dışında: %d"
+
+#: builtin/fsmonitor--daemon.c:57
+#, c-format
+msgid "value of '%s' not bool or int: %d"
+msgstr "'%s' değeri Boole veya tamsayı değil: %d"
+
+#: builtin/fsmonitor--daemon.c:99
+#, c-format
+msgid "fsmonitor-daemon is watching '%s'\n"
+msgstr "fsmonitor-daemon, '%s' ögesini izliyor\n"
+
+#: builtin/fsmonitor--daemon.c:104
+#, c-format
+msgid "fsmonitor-daemon is not watching '%s'\n"
+msgstr "fsmonitor-daemon, '%s' ögesini izlemiyor\n"
+
+#: builtin/fsmonitor--daemon.c:170
+#, c-format
+msgid "could not create fsmonitor cookie '%s'"
+msgstr "fsmonitor çerezi '%s' oluşturulamadı"
+
+#: builtin/fsmonitor--daemon.c:753
+#, c-format
+msgid "fsmonitor: cookie_result '%d' != SEEN"
+msgstr "fsmonitor: cookie_result '%d' != SEEN"
+
+#: builtin/fsmonitor--daemon.c:1187
+#, c-format
+msgid "could not start IPC thread pool on '%s'"
+msgstr "'%s' üzerinde IPC iş parçacığı havuzu başlatılamadı"
+
+#: builtin/fsmonitor--daemon.c:1199
+msgid "could not start fsmonitor listener thread"
+msgstr "fsmonitor dinleyici iş parçacığı başlatılamadı"
+
+#: builtin/fsmonitor--daemon.c:1297
+msgid "could not initialize listener thread"
+msgstr "dinleyici iş parçacığı ilklendirilemedi"
+
+#: builtin/fsmonitor--daemon.c:1328 builtin/fsmonitor--daemon.c:1383
+#, c-format
+msgid "fsmonitor--daemon is already running '%s'"
+msgstr "fsmonitor--daemon, halihazırda '%s' çalıştırıyor"
+
+#: builtin/fsmonitor--daemon.c:1332
+#, c-format
+msgid "running fsmonitor-daemon in '%s'\n"
+msgstr "fsmonitor-daemon '%s' içinde çalışıyor\n"
+
+#: builtin/fsmonitor--daemon.c:1387
+#, c-format
+msgid "starting fsmonitor-daemon in '%s'\n"
+msgstr "'%s' içinde fsmonitor-daemon başlatılıyor\n"
+
+#: builtin/fsmonitor--daemon.c:1413
+msgid "daemon failed to start"
+msgstr "ardalan süreci başlatılamadı"
+
+#: builtin/fsmonitor--daemon.c:1416
+msgid "daemon not online yet"
+msgstr "ardalan süreci henüz çalışmaya başlamadı"
+
+#: builtin/fsmonitor--daemon.c:1419
+msgid "daemon terminated"
+msgstr "ardalan süreci sonlandırıldı"
+
+#: builtin/fsmonitor--daemon.c:1429
+msgid "detach from console"
+msgstr "konsoldan ayrıl"
+
+#: builtin/fsmonitor--daemon.c:1432
+msgid "use <n> ipc worker threads"
+msgstr "<n> ipc işçisi iş parçacığı kullan"
+
+#: builtin/fsmonitor--daemon.c:1435
+msgid "max seconds to wait for background daemon startup"
+msgstr "ardalan sürecinin başlaması için beklenecek en çok saniye"
+
+#: builtin/fsmonitor--daemon.c:1449
+#, c-format
+msgid "invalid 'ipc-threads' value (%d)"
+msgstr "geçersiz 'ipc-threads' değeri (%d)"
+
+#: builtin/fsmonitor--daemon.c:1464
+#, c-format
+msgid "Unhandled subcommand '%s'"
+msgstr "İşlenmemiş altkomut '%s'"
+
+#: builtin/fsmonitor--daemon.c:1477
+msgid "fsmonitor--daemon not supported on this platform"
+msgstr "fsmonitor--daemon bu platformda desteklenmiyor"
+
 #: builtin/gc.c:39
 msgid "git gc [<options>]"
 msgstr "git gc [<seçenekler>]"
@@ -16124,8 +16595,8 @@ msgstr "systemctl başlatılamadı"
 msgid "failed to run systemctl"
 msgstr "systemctl çalıştırılamadı"
 
-#: builtin/gc.c:2210 builtin/gc.c:2215 builtin/worktree.c:62
-#: builtin/worktree.c:944
+#: builtin/gc.c:2210 builtin/gc.c:2215 builtin/worktree.c:63
+#: builtin/worktree.c:1024
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "'%s' silinemedi"
@@ -16173,16 +16644,16 @@ msgstr "git maintenance <altkomut> [<seçenekler>]"
 msgid "invalid subcommand: %s"
 msgstr "geçersiz altkomut: %s"
 
-#: builtin/grep.c:30
+#: builtin/grep.c:32
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<seçenekler>] [-e] <dizgi> [<rev>...] [[--] <yol>...]"
 
-#: builtin/grep.c:239
+#: builtin/grep.c:241
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep: iş parçacığı oluşturulamadı: %s"
 
-#: builtin/grep.c:293
+#: builtin/grep.c:295
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "geçersiz belirtilen iş parçacığı sayısı (%d), %s için"
@@ -16191,259 +16662,251 @@ msgstr "geçersiz belirtilen iş parçacığı sayısı (%d), %s için"
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:301 builtin/index-pack.c:1582 builtin/index-pack.c:1785
-#: builtin/pack-objects.c:3142
+#: builtin/grep.c:303 builtin/index-pack.c:1587 builtin/index-pack.c:1791
+#: builtin/pack-objects.c:3150
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "iş parçacığı desteği yok, %s yok sayılıyor"
 
-#: builtin/grep.c:488 builtin/grep.c:617 builtin/grep.c:657
+#: builtin/grep.c:490 builtin/grep.c:619 builtin/grep.c:659
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "ağaç okunamıyor (%s)"
 
-#: builtin/grep.c:672
+#: builtin/grep.c:674
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "%s türündeki bir nesneden grep yapılamıyor"
 
-#: builtin/grep.c:752
+#: builtin/grep.c:754
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "'%c' anahtarı sayısal bir değer bekliyor"
 
-#: builtin/grep.c:851
+#: builtin/grep.c:852
 msgid "search in index instead of in the work tree"
 msgstr "çalışma ağacı yerine indekste ara"
 
-#: builtin/grep.c:853
+#: builtin/grep.c:854
 msgid "find in contents not managed by git"
 msgstr "git tarafından yönetilmeyen içerikte bul"
 
-#: builtin/grep.c:855
+#: builtin/grep.c:856
 msgid "search in both tracked and untracked files"
 msgstr "hem izlenen hem izlenmeyen dosyalar içinde ara"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:858
 msgid "ignore files specified via '.gitignore'"
 msgstr "'.gitignore'da belirtilen dosyaları yok say"
 
-#: builtin/grep.c:859
+#: builtin/grep.c:860
 msgid "recursively search in each submodule"
 msgstr "her altmodülde özyineli olarak ara"
 
-#: builtin/grep.c:862
+#: builtin/grep.c:863
 msgid "show non-matching lines"
 msgstr "eşleşmeyen satırları göster"
 
-#: builtin/grep.c:864
+#: builtin/grep.c:865
 msgid "case insensitive matching"
 msgstr "BÜYÜK/küçük harf duyarsız eşleşme"
 
-#: builtin/grep.c:866
+#: builtin/grep.c:867
 msgid "match patterns only at word boundaries"
 msgstr "yalnızca sözcük sınırlarındaki dizgileri eşleştir"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:869
 msgid "process binary files as text"
 msgstr "ikili dosyaları metin olarak işle"
 
-#: builtin/grep.c:870
+#: builtin/grep.c:871
 msgid "don't match patterns in binary files"
 msgstr "ikili dosyalardaki dizgileri eşleştirme"
 
-#: builtin/grep.c:873
+#: builtin/grep.c:874
 msgid "process binary files with textconv filters"
 msgstr "ikili dosyaları textconv süzgeçleri ile işle"
 
-#: builtin/grep.c:875
+#: builtin/grep.c:876
 msgid "search in subdirectories (default)"
 msgstr "altdizinlerde ara (öntanımlı)"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:878
 msgid "descend at most <depth> levels"
 msgstr "en çok <derinlik> düzey in"
 
-#: builtin/grep.c:881
+#: builtin/grep.c:882
 msgid "use extended POSIX regular expressions"
 msgstr "genişletilmiş POSIX düzenli ifadelerini kullan"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:885
 msgid "use basic POSIX regular expressions (default)"
 msgstr "temel POSIX düzenli ifadelerini kullan (öntanımlı)"
 
-#: builtin/grep.c:887
+#: builtin/grep.c:888
 msgid "interpret patterns as fixed strings"
 msgstr "dizgileri sabit diziler olarak yorumla"
 
-#: builtin/grep.c:890
+#: builtin/grep.c:891
 msgid "use Perl-compatible regular expressions"
 msgstr "Perl uyumlu düzenli ifadeler kullan"
 
-#: builtin/grep.c:893
+#: builtin/grep.c:894
 msgid "show line numbers"
 msgstr "satır numaralarını göster"
 
-#: builtin/grep.c:894
+#: builtin/grep.c:895
 msgid "show column number of first match"
 msgstr "ilk eşleşmenin sütun numarasını göster"
 
-#: builtin/grep.c:895
+#: builtin/grep.c:896
 msgid "don't show filenames"
 msgstr "dosya adlarını gösterme"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:897
 msgid "show filenames"
 msgstr "dosya adlarını göster"
 
-#: builtin/grep.c:898
+#: builtin/grep.c:899
 msgid "show filenames relative to top directory"
 msgstr "dosya adlarını en üst dizine göreceli olarak göster"
 
-#: builtin/grep.c:900
+#: builtin/grep.c:901
 msgid "show only filenames instead of matching lines"
 msgstr "eşleşen satırlar yerine yalnızca dosya adlarını göster"
 
-#: builtin/grep.c:902
+#: builtin/grep.c:903
 msgid "synonym for --files-with-matches"
 msgstr "--files-with-matches eşanlamlısı"
 
-#: builtin/grep.c:905
+#: builtin/grep.c:906
 msgid "show only the names of files without match"
 msgstr "eşleşme olmadan yalnızca dosya adlarını göster"
 
-#: builtin/grep.c:907
+#: builtin/grep.c:908
 msgid "print NUL after filenames"
 msgstr "dosya adlarından sonra NUL yazdır"
 
-#: builtin/grep.c:910
+#: builtin/grep.c:911
 msgid "show only matching parts of a line"
 msgstr "yalnızca bir satırın eşleşen kısımlarını göster"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:913
 msgid "show the number of matches instead of matching lines"
 msgstr "eşleşen satırlar yerine eşleşme sayısını göster"
 
-#: builtin/grep.c:913
+#: builtin/grep.c:914
 msgid "highlight matches"
 msgstr "eşleşmeleri vurgula"
 
-#: builtin/grep.c:915
+#: builtin/grep.c:916
 msgid "print empty line between matches from different files"
 msgstr "başka dosyalardan olan eşleşmelerin arasına boş satır yazdır"
 
-#: builtin/grep.c:917
+#: builtin/grep.c:918
 msgid "show filename only once above matches from same file"
 msgstr ""
 "aynı dosyadan olan eşleşmelerin üzerinde dosya adını yalnızca bir kez göster"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:921
 msgid "show <n> context lines before and after matches"
 msgstr "eşleşmelerden önce ve sonra <n> satır bağlam göster"
 
-#: builtin/grep.c:923
+#: builtin/grep.c:924
 msgid "show <n> context lines before matches"
 msgstr "eşleşmelerden önce <n> satır bağlam göster"
 
-#: builtin/grep.c:925
+#: builtin/grep.c:926
 msgid "show <n> context lines after matches"
 msgstr "eşleşmelerden sonra <n> satır bağlam göster"
 
-#: builtin/grep.c:927
+#: builtin/grep.c:928
 msgid "use <n> worker threads"
 msgstr "<n> iş parçacığı kullan"
 
-#: builtin/grep.c:928
+#: builtin/grep.c:929
 msgid "shortcut for -C NUM"
 msgstr "-C NUM için kısayol"
 
-#: builtin/grep.c:931
+#: builtin/grep.c:932
 msgid "show a line with the function name before matches"
 msgstr "eşleşmelerden önce işlev adının olduğu bir satır göster"
 
-#: builtin/grep.c:933
+#: builtin/grep.c:934
 msgid "show the surrounding function"
 msgstr "çevresindeki işlevi göster"
 
-#: builtin/grep.c:936
+#: builtin/grep.c:937
 msgid "read patterns from file"
 msgstr "dizgileri dosyadan oku"
 
-#: builtin/grep.c:938
+#: builtin/grep.c:939
 msgid "match <pattern>"
 msgstr "<dizgi> ile eşleş"
 
-#: builtin/grep.c:940
+#: builtin/grep.c:941
 msgid "combine patterns specified with -e"
 msgstr "-e ile belirtilen dizgileri birleştir"
 
-#: builtin/grep.c:952
+#: builtin/grep.c:953
 msgid "indicate hit with exit status without output"
 msgstr "çıkış durumu ile olan eşleşmelerde çıktı verme"
 
-#: builtin/grep.c:954
+#: builtin/grep.c:955
 msgid "show only matches from files that match all patterns"
 msgstr "yalnızca tüm dizgilerle eşleşen dosyalardan eşleşmeleri göster"
 
-#: builtin/grep.c:957
+#: builtin/grep.c:958
 msgid "pager"
 msgstr "sayfalayıcı"
 
-#: builtin/grep.c:957
+#: builtin/grep.c:958
 msgid "show matching files in the pager"
 msgstr "sayfalayıcıda eşleşen dosyaları göster"
 
-#: builtin/grep.c:961
+#: builtin/grep.c:962
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "grep(1)'in çağrılmasına izin ver (bu yapım tarafından yok sayıldı)"
 
-#: builtin/grep.c:1027
+#: builtin/grep.c:1028
 msgid "no pattern given"
 msgstr "bir dizgi verilmedi"
 
-#: builtin/grep.c:1063
+#: builtin/grep.c:1064
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr "--no-index veya --untracked revizyonlarla birlikte kullanılamaz"
 
-#: builtin/grep.c:1071
+#: builtin/grep.c:1072
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "revizyon çözülemiyor: %s"
 
-#: builtin/grep.c:1101
+#: builtin/grep.c:1102
 msgid "--untracked not supported with --recurse-submodules"
 msgstr "--untracked, --recurse-submodules ile desteklenmiyor"
 
-#: builtin/grep.c:1105
+#: builtin/grep.c:1106
 msgid "invalid option combination, ignoring --threads"
 msgstr "geçersiz seçenek birleştirmesi, --threads yok sayılıyor"
 
-#: builtin/grep.c:1108 builtin/pack-objects.c:4059
+#: builtin/grep.c:1109 builtin/pack-objects.c:4084
 msgid "no threads support, ignoring --threads"
 msgstr "iş parçacığı desteği yok, --threads yok sayılıyor"
 
-#: builtin/grep.c:1111 builtin/index-pack.c:1579 builtin/pack-objects.c:3139
+#: builtin/grep.c:1112 builtin/index-pack.c:1584 builtin/pack-objects.c:3147
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "geçersiz belirtilen iş parçacığı sayısı (%d)"
 
-#: builtin/grep.c:1145
+#: builtin/grep.c:1146
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager yalnızca çalışma ağacında çalışır"
 
-#: builtin/grep.c:1171
-msgid "--cached or --untracked cannot be used with --no-index"
-msgstr "--cached veya --untracked, --no-index ile birlikte kullanılamıyor"
-
-#: builtin/grep.c:1174
-msgid "--untracked cannot be used with --cached"
-msgstr "--untracked, --cached ile birlikte kullanılamıyor"
-
-#: builtin/grep.c:1180
+#: builtin/grep.c:1179
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr "--[no-]exclude-standard, izlenen içerik için kullanılamıyor"
 
-#: builtin/grep.c:1188
+#: builtin/grep.c:1187
 msgid "both --cached and trees are given"
 msgstr "hem --cached hem ağaçlar verilmiş"
 
@@ -16455,109 +16918,101 @@ msgstr ""
 "git hash-object [-t <tür>] [-w] [--path=<dosya> | --no-filters] [--stdin] "
 "[--] <dosya>..."
 
-#: builtin/hash-object.c:84
-msgid "git hash-object  --stdin-paths"
-msgstr "git hash-object  --stdin-paths"
-
-#: builtin/hash-object.c:96
+#: builtin/hash-object.c:97
 msgid "object type"
 msgstr "nesne türü"
 
-#: builtin/hash-object.c:97
+#: builtin/hash-object.c:98
 msgid "write the object into the object database"
 msgstr "nesneyi nesne veritabanına yaz"
 
-#: builtin/hash-object.c:99
+#: builtin/hash-object.c:100
 msgid "read the object from stdin"
 msgstr "nesneyi stdin'den oku"
 
-#: builtin/hash-object.c:101
+#: builtin/hash-object.c:102
 msgid "store file as is without filters"
 msgstr "dosyayı süzgeçler olmadan olduğu gibi depola"
 
-#: builtin/hash-object.c:102
+#: builtin/hash-object.c:103
 msgid ""
 "just hash any random garbage to create corrupt objects for debugging Git"
 msgstr ""
 "Git hata ayıklamasında kullanmak için çer çöp toplayarak hasarlı nesneler "
 "oluştur"
 
-#: builtin/hash-object.c:103
+#: builtin/hash-object.c:104
 msgid "process file as it were from this path"
 msgstr "dosyayı sanki bu yoldanmış gibi işle"
 
-#: builtin/help.c:55
+#: builtin/help.c:57
 msgid "print all available commands"
 msgstr "tüm kullanılabilir komutları yazdır"
 
-#: builtin/help.c:57
+#: builtin/help.c:60
+msgid "show external commands in --all"
+msgstr "--all içinde dış komutları göster"
+
+#: builtin/help.c:61
+msgid "show aliases in --all"
+msgstr "--all içinde armaları göster"
+
+#: builtin/help.c:62
 msgid "exclude guides"
 msgstr "kılavuzları hariç tut"
 
-#: builtin/help.c:58
+#: builtin/help.c:63
 msgid "show man page"
 msgstr "man sayfasını göster"
 
-#: builtin/help.c:59
+#: builtin/help.c:64
 msgid "show manual in web browser"
 msgstr "kılavuzu web tarayıcısında göster"
 
-#: builtin/help.c:61
+#: builtin/help.c:66
 msgid "show info page"
 msgstr "bilgi sayfasını göster"
 
-#: builtin/help.c:63
+#: builtin/help.c:68
 msgid "print command description"
 msgstr "komut açıklamasını yazdır"
 
-#: builtin/help.c:65
+#: builtin/help.c:70
 msgid "print list of useful guides"
 msgstr "kullanışlı kılavuzların listesini çıkar"
 
-#: builtin/help.c:67
+#: builtin/help.c:72
 msgid "print all configuration variable names"
 msgstr "tüm yapılandırma değişkenleri adlarını yazdır"
 
-#: builtin/help.c:78
-msgid ""
-"git help [-a|--all] [--[no-]verbose]]\n"
-"         [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
-msgstr ""
-"git help [-a|--all] [--[no-]verbose]]\n"
-"         [[-i|--info] [-m|--man] [-w|--web]] [<komut>]"
-
-#: builtin/help.c:80
-msgid "git help [-g|--guides]"
-msgstr "git help [-g|--guides]"
-
-#: builtin/help.c:81
-msgid "git help [-c|--config]"
-msgstr "git help [-c|--config]"
+#: builtin/help.c:84
+msgid "git help [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
+msgstr "git help [[-i|--info] [-m|--man] [-w|--web]] [<komutlar>]"
 
-#: builtin/help.c:196
+#: builtin/help.c:201
 #, c-format
 msgid "unrecognized help format '%s'"
 msgstr "tanımlanamayan yardım biçimi '%s'"
 
-#: builtin/help.c:222
+#: builtin/help.c:227
 msgid "Failed to start emacsclient."
 msgstr "emacsclient başlatılamadı."
 
-#: builtin/help.c:235
+#: builtin/help.c:240
 msgid "Failed to parse emacsclient version."
 msgstr "emacsclient sürümü ayrıştırılamadı."
 
-#: builtin/help.c:243
+#: builtin/help.c:248
 #, c-format
 msgid "emacsclient version '%d' too old (< 22)."
 msgstr "emacsclient sürümü '%d' pek eski (<22)."
 
-#: builtin/help.c:261 builtin/help.c:283 builtin/help.c:293 builtin/help.c:301
+#: builtin/help.c:266 builtin/help.c:288 builtin/help.c:298 builtin/help.c:306
 #, c-format
 msgid "failed to exec '%s'"
 msgstr "'%s' çalıştırılamadı"
 
-#: builtin/help.c:339
+#: builtin/help.c:344
 #, c-format
 msgid ""
 "'%s': path for unsupported man viewer.\n"
@@ -16566,7 +17021,7 @@ msgstr ""
 "'%s': desteklenmeyen man görüntüleyicisi yolu.\n"
 "Bunun yerine 'man.<araç>.cmd' kullanmayı düşünün."
 
-#: builtin/help.c:351
+#: builtin/help.c:356
 #, c-format
 msgid ""
 "'%s': cmd for supported man viewer.\n"
@@ -16575,42 +17030,57 @@ msgstr ""
 "'%s': desteklenmeyen man görüntüleyicisi komutu.\n"
 "Bunun yerine 'man.<araç>.path' kullanmayı düşünün."
 
-#: builtin/help.c:466
+#: builtin/help.c:471
 #, c-format
 msgid "'%s': unknown man viewer."
 msgstr "'%s': Bilinmeyen man görüntüleyicisi."
 
-#: builtin/help.c:482
+#: builtin/help.c:487
 msgid "no man viewer handled the request"
 msgstr "isteğe hiçbir man görüntüleyicisi ele almadı"
 
-#: builtin/help.c:489
+#: builtin/help.c:494
 msgid "no info viewer handled the request"
 msgstr "isteğe hiçbir bilgi görüntüleyicisi ele almadı"
 
-#: builtin/help.c:550 builtin/help.c:561 git.c:348
+#: builtin/help.c:555 builtin/help.c:566 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "'%s', '%s' olarak armalanmış"
 
-#: builtin/help.c:564 git.c:380
+#: builtin/help.c:569 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr "hatalı alias.%s dizisi: %s"
 
-#: builtin/help.c:580
-msgid "this option doesn't take any other arguments"
-msgstr "bu seçenek başka bir argüman daha almıyor"
+#: builtin/help.c:611
+#, c-format
+msgid "the '%s' option doesn't take any non-option arguments"
+msgstr "'%s', seçenek olmayan bir argüman almıyor"
+
+#: builtin/help.c:631
+msgid ""
+"the '--no-[external-commands|aliases]' options can only be used with '--all'"
+msgstr ""
+"'--no-[external-commands|aliases]', yalnızca '--all' ile kullanılabilir"
 
-#: builtin/help.c:601 builtin/help.c:628
+#: builtin/help.c:643 builtin/help.c:671
 #, c-format
 msgid "usage: %s%s"
 msgstr "kullanım: %s%s"
 
-#: builtin/help.c:623
+#: builtin/help.c:666
 msgid "'git help config' for more information"
 msgstr "ek bilgi için: 'git help config'"
 
+#: builtin/hook.c:10
+msgid "git hook run [--ignore-missing] <hook-name> [-- <hook-args>]"
+msgstr "git hook run [--ignore-missing] <kanca-adı> [-- <kanca-argümanları>]"
+
+#: builtin/hook.c:30
+msgid "silently ignore missing requested <hook-name>"
+msgstr "istenen eksik <kanca-adı> sessizce yok sayılıyor"
+
 #: builtin/index-pack.c:221
 #, c-format
 msgid "object type mismatch at %s"
@@ -16645,244 +17115,245 @@ msgstr "girdide okuma hatası"
 msgid "used more bytes than were available"
 msgstr "kullanılabilir olandan daha çok bayt kullanıldı"
 
-#: builtin/index-pack.c:324 builtin/pack-objects.c:756
+#: builtin/index-pack.c:324 builtin/pack-objects.c:754
 msgid "pack too large for current definition of off_t"
 msgstr "paket off_t'nin geçerli tanımı için çok büyük"
 
-#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
-msgid "pack exceeds maximum allowed size"
-msgstr "paket izin verilen en büyük boyutu aşıyor"
+#: builtin/index-pack.c:329
+#, c-format
+msgid "pack exceeds maximum allowed size (%s)"
+msgstr "paket izin verilen en büyük boyutu aşıyor (%s)"
 
-#: builtin/index-pack.c:358
+#: builtin/index-pack.c:362
 msgid "pack signature mismatch"
 msgstr "paket imzası uyuşmazlığı"
 
-#: builtin/index-pack.c:360
+#: builtin/index-pack.c:364
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "paket sürümü %<PRIu32> desteklenmiyor"
 
-#: builtin/index-pack.c:376
+#: builtin/index-pack.c:380
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "paketin %<PRIuMAX> ofsetinde hatalı nesne var: %s"
 
-#: builtin/index-pack.c:482
+#: builtin/index-pack.c:485
 #, c-format
 msgid "inflate returned %d"
 msgstr "şişirme programı %d döndürdü"
 
-#: builtin/index-pack.c:531
+#: builtin/index-pack.c:534
 msgid "offset value overflow for delta base object"
 msgstr "delta tabanı nesnesi için ofset değeri taşımı"
 
-#: builtin/index-pack.c:539
+#: builtin/index-pack.c:542
 msgid "delta base offset is out of bound"
 msgstr "delta tabanı ofseti sınırlar dışında"
 
-#: builtin/index-pack.c:547
+#: builtin/index-pack.c:550
 #, c-format
 msgid "unknown object type %d"
 msgstr "bilinmeyen nesne türü %d"
 
-#: builtin/index-pack.c:578
+#: builtin/index-pack.c:581
 msgid "cannot pread pack file"
 msgstr "paket dosyası 'pread' yapılamıyor"
 
-#: builtin/index-pack.c:580
+#: builtin/index-pack.c:583
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
 msgstr[0] "zamansız paket dosyası sonu, %<PRIuMAX> bayt eksik"
 msgstr[1] "zamansız paket dosyası sonu, %<PRIuMAX> bayt eksik"
 
-#: builtin/index-pack.c:606
+#: builtin/index-pack.c:609
 msgid "serious inflate inconsistency"
 msgstr "ciddi şişirme programı tutarsızlığı"
 
-#: builtin/index-pack.c:751 builtin/index-pack.c:757 builtin/index-pack.c:781
-#: builtin/index-pack.c:820 builtin/index-pack.c:829
+#: builtin/index-pack.c:754 builtin/index-pack.c:760 builtin/index-pack.c:784
+#: builtin/index-pack.c:823 builtin/index-pack.c:832
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "%s İLE SHA1 ÇARPIŞMASI BULUNDU!"
 
-#: builtin/index-pack.c:754 builtin/pack-objects.c:292
-#: builtin/pack-objects.c:352 builtin/pack-objects.c:458
+#: builtin/index-pack.c:757 builtin/pack-objects.c:290
+#: builtin/pack-objects.c:350 builtin/pack-objects.c:456
 #, c-format
 msgid "unable to read %s"
 msgstr "%s okunamıyor"
 
-#: builtin/index-pack.c:818
+#: builtin/index-pack.c:821
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "mevcut %s nesne bilgisi okunamıyor"
 
-#: builtin/index-pack.c:826
+#: builtin/index-pack.c:829
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "mevcut %s nesnesi okunamıyor"
 
-#: builtin/index-pack.c:840
+#: builtin/index-pack.c:843
 #, c-format
 msgid "invalid blob object %s"
 msgstr "geçersiz %s ikili nesnesi"
 
-#: builtin/index-pack.c:843 builtin/index-pack.c:862
+#: builtin/index-pack.c:846 builtin/index-pack.c:865
 msgid "fsck error in packed object"
 msgstr "paketlenmiş nesne içinde fsck hatası"
 
-#: builtin/index-pack.c:864
+#: builtin/index-pack.c:867
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr "%s ögesinin tüm alt ögeleri ulaşılabilir değil"
 
-#: builtin/index-pack.c:925 builtin/index-pack.c:972
+#: builtin/index-pack.c:928 builtin/index-pack.c:975
 msgid "failed to apply delta"
 msgstr "delta uygulanamadı"
 
-#: builtin/index-pack.c:1156
+#: builtin/index-pack.c:1161
 msgid "Receiving objects"
 msgstr "Nesneler alınıyor"
 
-#: builtin/index-pack.c:1156
+#: builtin/index-pack.c:1161
 msgid "Indexing objects"
 msgstr "Nesneler indeksleniyor"
 
-#: builtin/index-pack.c:1190
+#: builtin/index-pack.c:1195
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "paket hasar görmüş (SHA1 uyumsuzluğu)"
 
-#: builtin/index-pack.c:1195
+#: builtin/index-pack.c:1200
 msgid "cannot fstat packfile"
 msgstr "paket dosyası fstat yapılamıyor"
 
-#: builtin/index-pack.c:1198
+#: builtin/index-pack.c:1203
 msgid "pack has junk at the end"
 msgstr "paket sonunda döküntüler var"
 
-#: builtin/index-pack.c:1210
+#: builtin/index-pack.c:1215
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr "parse_pack_objects() içindeki karmaşa akıl almaz düzeyde"
 
-#: builtin/index-pack.c:1233
+#: builtin/index-pack.c:1238
 msgid "Resolving deltas"
 msgstr "Deltalar çözülüyor"
 
-#: builtin/index-pack.c:1244 builtin/pack-objects.c:2905
+#: builtin/index-pack.c:1249 builtin/pack-objects.c:2913
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "iş parçacığı oluşturulamadı: %s"
 
-#: builtin/index-pack.c:1277
+#: builtin/index-pack.c:1282
 msgid "confusion beyond insanity"
 msgstr "karmaşa akıl almaz düzeyde"
 
-#: builtin/index-pack.c:1283
+#: builtin/index-pack.c:1288
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
 msgstr[0] "%d yerel nesneyle tamamlandı"
 msgstr[1] "%d yerel nesneyle tamamlandı"
 
-#: builtin/index-pack.c:1295
+#: builtin/index-pack.c:1300
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr "%s için beklenmedik kuyruk sağlaması (disk hasarı?)"
 
-#: builtin/index-pack.c:1299
+#: builtin/index-pack.c:1304
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] "paketin %d çözülmemiş deltası var"
 msgstr[1] "paketin %d çözülmemiş deltası var"
 
-#: builtin/index-pack.c:1323
+#: builtin/index-pack.c:1328
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "iliştirilen nesne söndürülemedi (%d)"
 
-#: builtin/index-pack.c:1419
+#: builtin/index-pack.c:1423
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "yerel nesne %s hasarlı"
 
-#: builtin/index-pack.c:1440
+#: builtin/index-pack.c:1445
 #, c-format
 msgid "packfile name '%s' does not end with '.%s'"
 msgstr "paket dosyası adı '%s', '.%s' ile bitmiyor"
 
-#: builtin/index-pack.c:1464
+#: builtin/index-pack.c:1469
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "%s dosyası '%s' yazılamıyor"
 
-#: builtin/index-pack.c:1472
+#: builtin/index-pack.c:1477
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr "yazılmış %s dosyası '%s' kapatılamıyor"
 
-#: builtin/index-pack.c:1489
+#: builtin/index-pack.c:1494
 #, c-format
 msgid "unable to rename temporary '*.%s' file to '%s'"
 msgstr "geçici '*.%s' dosyası '%s' olarak yeniden adlandırılamıyor"
 
-#: builtin/index-pack.c:1514
+#: builtin/index-pack.c:1519
 msgid "error while closing pack file"
 msgstr "paket dosyası kapatılırken hata"
 
-#: builtin/index-pack.c:1573 builtin/pack-objects.c:3150
+#: builtin/index-pack.c:1578 builtin/pack-objects.c:3158
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "hatalı pack.indexversion=%<PRIu32>"
 
-#: builtin/index-pack.c:1643
+#: builtin/index-pack.c:1648
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "Mevcut paket dosyası '%s' açılamıyor"
 
-#: builtin/index-pack.c:1645
+#: builtin/index-pack.c:1650
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "'%s' için mevcut paket idx dosyası açılamıyor"
 
-#: builtin/index-pack.c:1693
+#: builtin/index-pack.c:1698
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] "delta değil: %d nesne"
 msgstr[1] "delta değil: %d nesne"
 
-#: builtin/index-pack.c:1700
+#: builtin/index-pack.c:1705
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
 msgstr[0] "zincir uzunluğu = %d: %lu nesne"
 msgstr[1] "zincir uzunluğu = %d: %lu nesne"
 
-#: builtin/index-pack.c:1742
+#: builtin/index-pack.c:1748
 msgid "Cannot come back to cwd"
 msgstr "Şu anki çalışma dizinine geri gelinemiyor"
 
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1799
-#: builtin/index-pack.c:1819 builtin/index-pack.c:1823
+#: builtin/index-pack.c:1802 builtin/index-pack.c:1805
+#: builtin/index-pack.c:1825 builtin/index-pack.c:1829
 #, c-format
 msgid "bad %s"
 msgstr "hatalı %s"
 
-#: builtin/index-pack.c:1829 builtin/init-db.c:379 builtin/init-db.c:614
+#: builtin/index-pack.c:1835 builtin/init-db.c:379 builtin/init-db.c:614
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "bilinmeyen sağlama algoritması '%s'"
 
-#: builtin/index-pack.c:1850
+#: builtin/index-pack.c:1856
 msgid "--stdin requires a git repository"
 msgstr "--stdin bir git dizini gerektirir"
 
-#: builtin/index-pack.c:1867
+#: builtin/index-pack.c:1873
 msgid "--verify with no packfile name given"
 msgstr "--verify ile bir paket dosyası adı verilmedi"
 
-#: builtin/index-pack.c:1933 builtin/unpack-objects.c:584
+#: builtin/index-pack.c:1939 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "paket nesnelerinde fsck hatası"
 
@@ -17091,40 +17562,40 @@ msgstr "--trailer ile --only-input bir anlam ifade etmiyor"
 msgid "no input file given for in-place editing"
 msgstr "yerinde düzenleme için girdi dosyası verilmedi"
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<seçenekler>] [<revizyon-erimi>] [[--] <yol>...]"
 
-#: builtin/log.c:60
+#: builtin/log.c:61
 msgid "git show [<options>] <object>..."
 msgstr "git show [<seçenekler>] <nesne>..."
 
-#: builtin/log.c:113
+#: builtin/log.c:114
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "geçersiz --decorate seçeneği: %s"
 
-#: builtin/log.c:180
+#: builtin/log.c:181
 msgid "show source"
 msgstr "kaynağı göster"
 
-#: builtin/log.c:181
+#: builtin/log.c:182
 msgid "use mail map file"
 msgstr "posta eşlem dosyasını kullan"
 
-#: builtin/log.c:184
+#: builtin/log.c:185
 msgid "only decorate refs that match <pattern>"
 msgstr "yalnızca <dizgi> ile eşleşen başvuruları süsle"
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "do not decorate refs that match <pattern>"
 msgstr "<dizgi> ile eşleşen başvuruları süsleme"
 
-#: builtin/log.c:187
+#: builtin/log.c:188
 msgid "decorate options"
 msgstr "süsleme seçenekleri"
 
-#: builtin/log.c:190
+#: builtin/log.c:191
 msgid ""
 "trace the evolution of line range <start>,<end> or function :<funcname> in "
 "<file>"
@@ -17132,89 +17603,93 @@ msgstr ""
 "<dosya> içindeki <başlangıç>,<bitiş> satır eriminin veya :<işlevadı> "
 "işlevinin evrimini izle"
 
-#: builtin/log.c:213
+#: builtin/log.c:214
 msgid "-L<range>:<file> cannot be used with pathspec"
 msgstr "-L<erim>:<dosya>, yol belirteci ile kullanılamıyor"
 
-#: builtin/log.c:321
+#: builtin/log.c:322
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "Son çıktı: %d %s\n"
 
-#: builtin/log.c:586
+#: builtin/log.c:429
+msgid "unable to create temporary object directory"
+msgstr "geçici nesne dizini oluşturulamıyor"
+
+#: builtin/log.c:599
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: hatalı dosya"
 
-#: builtin/log.c:601 builtin/log.c:691
+#: builtin/log.c:614 builtin/log.c:706
 #, c-format
 msgid "could not read object %s"
 msgstr "%s nesnesi okunamadı"
 
-#: builtin/log.c:716
+#: builtin/log.c:731
 #, c-format
 msgid "unknown type: %d"
 msgstr "bilinmeyen tür: %d"
 
-#: builtin/log.c:861
+#: builtin/log.c:880
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr "%s: açıklama kipinden geçersiz kapak sayfası"
 
-#: builtin/log.c:868
+#: builtin/log.c:887
 msgid "format.headers without value"
 msgstr "format.headers değere iye değil"
 
-#: builtin/log.c:997
+#: builtin/log.c:1016
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "%s yama dosyası okunamıyor"
 
-#: builtin/log.c:1014
+#: builtin/log.c:1033
 msgid "need exactly one range"
 msgstr "bir tam erim gerekiyor"
 
-#: builtin/log.c:1024
+#: builtin/log.c:1043
 msgid "not a range"
 msgstr "bir erim değil"
 
-#: builtin/log.c:1188
+#: builtin/log.c:1207
 msgid "cover letter needs email format"
 msgstr "ön yazı için e-posta biçimi gerekli"
 
-#: builtin/log.c:1194
+#: builtin/log.c:1213
 msgid "failed to create cover-letter file"
 msgstr "cover-letter dosyası oluşturulamadı"
 
-#: builtin/log.c:1281
+#: builtin/log.c:1300
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "akıl almaz in-reply-to: %s"
 
-#: builtin/log.c:1308
+#: builtin/log.c:1327
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<seçenekler>] [<-beri> | <revizyon-erimi>]"
 
-#: builtin/log.c:1366
+#: builtin/log.c:1385
 msgid "two output directories?"
 msgstr "iki çıktı dizini?"
 
-#: builtin/log.c:1517 builtin/log.c:2344 builtin/log.c:2346 builtin/log.c:2358
+#: builtin/log.c:1536 builtin/log.c:2369 builtin/log.c:2371 builtin/log.c:2383
 #, c-format
 msgid "unknown commit %s"
 msgstr "bilinmeyen işleme %s"
 
-#: builtin/log.c:1528 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1547 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "'%s' geçerli bir başvuru olarak çözülemedi"
 
-#: builtin/log.c:1537
+#: builtin/log.c:1556
 msgid "could not find exact merge base"
 msgstr "kesin birleştirme temeli bulunamadı"
 
-#: builtin/log.c:1547
+#: builtin/log.c:1566
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -17225,274 +17700,278 @@ msgstr ""
 "izleyin. Bunun dışında taban işlemesini kendiniz --base=<taban-işlemesi-no>\n"
 "kullanarak el ile belirtebilirsiniz."
 
-#: builtin/log.c:1570
+#: builtin/log.c:1589
 msgid "failed to find exact merge base"
 msgstr "kesin birleştirme temeli bulunamadı"
 
-#: builtin/log.c:1587
+#: builtin/log.c:1606
 msgid "base commit should be the ancestor of revision list"
 msgstr "taban işlemesi revizyon listesinin atası olmalı"
 
-#: builtin/log.c:1597
+#: builtin/log.c:1616
 msgid "base commit shouldn't be in revision list"
 msgstr "taban işlemesi revizyon listesinde olmamalı"
 
-#: builtin/log.c:1655
+#: builtin/log.c:1674
 msgid "cannot get patch id"
 msgstr "yama numarası alınamıyor"
 
-#: builtin/log.c:1718
+#: builtin/log.c:1737
 msgid "failed to infer range-diff origin of current series"
 msgstr "geçerli dizinin range-diff kökeninden bir anlam çıkartılamadı"
 
-#: builtin/log.c:1720
+#: builtin/log.c:1739
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr "geçerli dizinin range-diff kökeni olarak '%s' kullanılıyor"
 
-#: builtin/log.c:1764
+#: builtin/log.c:1783
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "bir yamayla bile olsa [PATCH n/m] kullan"
 
-#: builtin/log.c:1767
+#: builtin/log.c:1786
 msgid "use [PATCH] even with multiple patches"
 msgstr "birden çok yama bile olsa [PATCH] kullan"
 
-#: builtin/log.c:1771
+#: builtin/log.c:1790
 msgid "print patches to standard out"
 msgstr "yamaları standart çıktıya yazdır"
 
-#: builtin/log.c:1773
+#: builtin/log.c:1792
 msgid "generate a cover letter"
 msgstr "bir ön yazı oluştur"
 
-#: builtin/log.c:1775
+#: builtin/log.c:1794
 msgid "use simple number sequence for output file names"
 msgstr "çıktı dosya adları için yalın sayı dizisi oluştur"
 
-#: builtin/log.c:1776
+#: builtin/log.c:1795
 msgid "sfx"
 msgstr "sonek"
 
-#: builtin/log.c:1777
+#: builtin/log.c:1796
 msgid "use <sfx> instead of '.patch'"
 msgstr "'.patch' yerine <sonek> kullan"
 
-#: builtin/log.c:1779
+#: builtin/log.c:1798
 msgid "start numbering patches at <n> instead of 1"
 msgstr "yamaları 1 yerine <n>'de numaralandırmaya başla"
 
-#: builtin/log.c:1780
+#: builtin/log.c:1799
 msgid "reroll-count"
 msgstr "reroll-count"
 
-#: builtin/log.c:1781
+#: builtin/log.c:1800
 msgid "mark the series as Nth re-roll"
 msgstr "diziyi n. deneme olarak imle"
 
-#: builtin/log.c:1783
+#: builtin/log.c:1802
 msgid "max length of output filename"
 msgstr "çıktı dosya adının olabilecek en çok uzunluğu"
 
-#: builtin/log.c:1785
+#: builtin/log.c:1804
 msgid "use [RFC PATCH] instead of [PATCH]"
 msgstr "[PATCH] yerine [RFC PATCH] kullan"
 
-#: builtin/log.c:1788
+#: builtin/log.c:1807
 msgid "cover-from-description-mode"
 msgstr "açıklama kipinden kapak sayfası kipi"
 
-#: builtin/log.c:1789
+#: builtin/log.c:1808
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr "ön yazının bazı kısımlarını dalın açıklamasından oluştur"
 
-#: builtin/log.c:1791
+#: builtin/log.c:1810
 msgid "use [<prefix>] instead of [PATCH]"
 msgstr "[PATCH] yerine [<önek>] kullan"
 
-#: builtin/log.c:1794
+#: builtin/log.c:1813
 msgid "store resulting files in <dir>"
 msgstr "ortaya çıkan dosyaları <dizin>'de depola"
 
-#: builtin/log.c:1797
+#: builtin/log.c:1816
 msgid "don't strip/add [PATCH]"
 msgstr "[PATCH]'i soyma/ekleme"
 
-#: builtin/log.c:1800
+#: builtin/log.c:1819
 msgid "don't output binary diffs"
 msgstr "ikili diff'leri çıktı verme"
 
-#: builtin/log.c:1802
+#: builtin/log.c:1821
 msgid "output all-zero hash in From header"
 msgstr "From başlığında tümü sıfırdan oluşan sağlama çıktısı ver"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1823
 msgid "don't include a patch matching a commit upstream"
 msgstr "üstkaynaktaki bir işleme ile eşleşen bir yamayı içerme"
 
-#: builtin/log.c:1806
+#: builtin/log.c:1825
 msgid "show patch format instead of default (patch + stat)"
 msgstr "öntanımlı yerine yama biçimini göster (patch + stat)"
 
-#: builtin/log.c:1808
+#: builtin/log.c:1827
 msgid "Messaging"
 msgstr "İletileşme"
 
-#: builtin/log.c:1809
+#: builtin/log.c:1828
 msgid "header"
 msgstr "üstbilgi"
 
-#: builtin/log.c:1810
+#: builtin/log.c:1829
 msgid "add email header"
 msgstr "e-posta üstbilgisi ekle"
 
-#: builtin/log.c:1811 builtin/log.c:1812
+#: builtin/log.c:1830 builtin/log.c:1831
 msgid "email"
 msgstr "e-posta"
 
-#: builtin/log.c:1811
+#: builtin/log.c:1830
 msgid "add To: header"
 msgstr "To: üstbilgisi ekle"
 
-#: builtin/log.c:1812
+#: builtin/log.c:1831
 msgid "add Cc: header"
 msgstr "Cc: üstbilgisi ekle"
 
-#: builtin/log.c:1813
+#: builtin/log.c:1832
 msgid "ident"
 msgstr "tanımlayıcı"
 
-#: builtin/log.c:1814
+#: builtin/log.c:1833
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 "From adresini <tanımlayıcı> olarak ayarla (veya yoksa işleyici tanımlayıcısı)"
 
-#: builtin/log.c:1816
+#: builtin/log.c:1835
 msgid "message-id"
 msgstr "ileti no"
 
-#: builtin/log.c:1817
+#: builtin/log.c:1836
 msgid "make first mail a reply to <message-id>"
 msgstr "ilk postayı <ileti no>'ya bir yanıt yap"
 
-#: builtin/log.c:1818 builtin/log.c:1821
+#: builtin/log.c:1837 builtin/log.c:1840
 msgid "boundary"
 msgstr "sınır"
 
-#: builtin/log.c:1819
+#: builtin/log.c:1838
 msgid "attach the patch"
 msgstr "yamayı ekle"
 
-#: builtin/log.c:1822
+#: builtin/log.c:1841
 msgid "inline the patch"
 msgstr "yamayı iletiye koy"
 
-#: builtin/log.c:1826
+#: builtin/log.c:1845
 msgid "enable message threading, styles: shallow, deep"
 msgstr "iletileri kataloglamayı etkinleştir, stiller: shallow, deep"
 
-#: builtin/log.c:1828
+#: builtin/log.c:1847
 msgid "signature"
 msgstr "imza"
 
-#: builtin/log.c:1829
+#: builtin/log.c:1848
 msgid "add a signature"
 msgstr "imza ekle"
 
-#: builtin/log.c:1830
+#: builtin/log.c:1849
 msgid "base-commit"
 msgstr "taban işleme"
 
-#: builtin/log.c:1831
+#: builtin/log.c:1850
 msgid "add prerequisite tree info to the patch series"
 msgstr "yama dizisine önkoşul ağaç bilgisini ekle"
 
-#: builtin/log.c:1834
+#: builtin/log.c:1853
 msgid "add a signature from a file"
 msgstr "dosyadan bir imza ekle"
 
-#: builtin/log.c:1835
+#: builtin/log.c:1854
 msgid "don't print the patch filenames"
 msgstr "yama dosya adlarını yazdırma"
 
-#: builtin/log.c:1837
+#: builtin/log.c:1856
 msgid "show progress while generating patches"
 msgstr "yamalar oluşturulurken ilerlemeyi göster"
 
-#: builtin/log.c:1839
+#: builtin/log.c:1858
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr "<rev> karşısındaki değişiklikleri ön yazıda veya tek bir yamada göster"
 
-#: builtin/log.c:1842
+#: builtin/log.c:1861
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
 "<bşvr-blrtç> karşısındaki değişiklikleri ön yazıda veya tek bir yamada göster"
 
-#: builtin/log.c:1844 builtin/range-diff.c:28
+#: builtin/log.c:1863 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr "oluşumun tartıldığı yüzde"
 
-#: builtin/log.c:1931
+#: builtin/log.c:1953
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "geçersiz tanımlayıcı satırı: %s"
 
-#: builtin/log.c:1956
+#: builtin/log.c:1978
 msgid "--name-only does not make sense"
 msgstr "--name-only bir anlam ifade etmiyor"
 
-#: builtin/log.c:1958
+#: builtin/log.c:1980
 msgid "--name-status does not make sense"
 msgstr "--name-status bir anlam ifade etmiyor"
 
-#: builtin/log.c:1960
+#: builtin/log.c:1982
 msgid "--check does not make sense"
 msgstr "--check bir anlam ifade etmiyor"
 
-#: builtin/log.c:2104
+#: builtin/log.c:1984
+msgid "--remerge-diff does not make sense"
+msgstr "--remerge-diff bir anlam ifade etmiyor"
+
+#: builtin/log.c:2129
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff, --cover-letter veya tek yama gerektiriyor"
 
-#: builtin/log.c:2108
+#: builtin/log.c:2133
 msgid "Interdiff:"
 msgstr "Interdiff:"
 
-#: builtin/log.c:2109
+#: builtin/log.c:2134
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Interdiff v%d karşısında:"
 
-#: builtin/log.c:2119
+#: builtin/log.c:2144
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff, --cover-letter veya tek yama gerektiriyor"
 
-#: builtin/log.c:2127
+#: builtin/log.c:2152
 msgid "Range-diff:"
 msgstr "Range-diff:"
 
-#: builtin/log.c:2128
+#: builtin/log.c:2153
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "Range-diff v%d karşısında:"
 
-#: builtin/log.c:2139
+#: builtin/log.c:2164
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "'%s' imza dosyası okunamıyor"
 
-#: builtin/log.c:2175
+#: builtin/log.c:2200
 msgid "Generating patches"
 msgstr "Yamalar oluşturuluyor"
 
-#: builtin/log.c:2219
+#: builtin/log.c:2244
 msgid "failed to create output files"
 msgstr "çıktı dosyaları oluşturulamadı"
 
-#: builtin/log.c:2279
+#: builtin/log.c:2304
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<üstkaynak> [<dal-ucu> [<sınır>]]]"
 
-#: builtin/log.c:2333
+#: builtin/log.c:2358
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -17586,10 +18065,6 @@ msgstr "standart git hariç tutmalarını ekle"
 msgid "make the output relative to the project top directory"
 msgstr "çıktıyı en üst proje dizinine göreceli olarak yap"
 
-#: builtin/ls-files.c:667
-msgid "recurse through submodules"
-msgstr "altmodüller içinden özyinele"
-
 #: builtin/ls-files.c:669
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr "eğer bir <dosya> indekste değilse bunu bir hata olarak gör"
@@ -17628,7 +18103,7 @@ msgstr ""
 msgid "do not print remote URL"
 msgstr "uzak konum URL'sini yazdırma"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1103
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1131
 msgid "exec"
 msgstr "çalıştır"
 
@@ -17660,42 +18135,70 @@ msgstr "eşleşen başvuru bulunamazsa 2 numaralı çıkış koduyla çık"
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr "işaret ettiği nesneye ek olarak altında yatan başvuruyu göster"
 
-#: builtin/ls-tree.c:30
+#: builtin/ls-tree.c:36
 msgid "git ls-tree [<options>] <tree-ish> [<path>...]"
 msgstr "git ls-tree [<seçenekler>] <ağacımsı> [<yol>...]"
 
-#: builtin/ls-tree.c:128
+#: builtin/ls-tree.c:54
+#, c-format
+msgid "could not get object info about '%s'"
+msgstr "'%s' hakkında nesne bilgisi alınamadı"
+
+#: builtin/ls-tree.c:79
+#, c-format
+msgid "bad ls-tree format: element '%s' does not start with '('"
+msgstr "hatalı ls-tree biçimi: '%s' ögesi '(' ile başlamıyor"
+
+#: builtin/ls-tree.c:83
+#, c-format
+msgid "bad ls-tree format: element '%s' does not end in ')'"
+msgstr "hatalı ls-tree biçimi: '%s' ögesi ')' ile sonlanmıyor"
+
+#: builtin/ls-tree.c:109
+#, c-format
+msgid "bad ls-tree format: %%%.*s"
+msgstr "hatalı ls-tree biçimi: %%%.*s"
+
+#: builtin/ls-tree.c:336
 msgid "only show trees"
 msgstr "yalnızca ağaçları göster"
 
-#: builtin/ls-tree.c:130
+#: builtin/ls-tree.c:338
 msgid "recurse into subtrees"
 msgstr "altağaçlara özyinele"
 
-#: builtin/ls-tree.c:132
+#: builtin/ls-tree.c:340
 msgid "show trees when recursing"
 msgstr "özyinelerken ağaçları göster"
 
-#: builtin/ls-tree.c:135
+#: builtin/ls-tree.c:343
 msgid "terminate entries with NUL byte"
 msgstr "girdileri NUL baytı ile sonlandır"
 
-#: builtin/ls-tree.c:136
+#: builtin/ls-tree.c:344
 msgid "include object size"
 msgstr "nesne boyutunu içer"
 
-#: builtin/ls-tree.c:138 builtin/ls-tree.c:140
+#: builtin/ls-tree.c:346 builtin/ls-tree.c:348
 msgid "list only filenames"
 msgstr "yalnızca dosya adlarını listele"
 
-#: builtin/ls-tree.c:143
+#: builtin/ls-tree.c:350
+msgid "list only objects"
+msgstr "yalnızca nesneleri listele"
+
+#: builtin/ls-tree.c:353
 msgid "use full path names"
 msgstr "tam yol adlarını kullan"
 
-#: builtin/ls-tree.c:145
+#: builtin/ls-tree.c:355
 msgid "list entire tree; not just current directory (implies --full-name)"
 msgstr "yalnızca geçerli dizini değil tüm ağacı listele (--full-name ima eder)"
 
+#: builtin/ls-tree.c:391
+msgid "--format can't be combined with other format-altering options"
+msgstr "--format, diğer format-altering seçenekleriyle birlikte kullanılamaz"
+
 #. TRANSLATORS: keep <> in "<" mail ">" info.
 #: builtin/mailinfo.c:14
 msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
@@ -17745,7 +18248,11 @@ msgstr "alıntılanmış CR bulunduğu zaman yapılacak eylem"
 msgid "use headers in message's body"
 msgstr "ileti gövdesinde üstbilgi kullan"
 
-#: builtin/mailsplit.c:239
+#: builtin/mailsplit.c:227
+msgid "reading patches from stdin/tty..."
+msgstr "yamalar stdin/tty'den okunuyor..."
+
+#: builtin/mailsplit.c:242
 #, c-format
 msgid "empty mbox: '%s'"
 msgstr "boş mbox: '%s'"
@@ -17770,23 +18277,23 @@ msgstr "git merge-base --is-ancestor <işleme> <işleme>"
 msgid "git merge-base --fork-point <ref> [<commit>]"
 msgstr "git merge-base --fork-point <başvuru> [<işleme>]"
 
-#: builtin/merge-base.c:143
+#: builtin/merge-base.c:144
 msgid "output all common ancestors"
 msgstr "tüm ortak ataları çıktı ver"
 
-#: builtin/merge-base.c:145
+#: builtin/merge-base.c:146
 msgid "find ancestors for a single n-way merge"
 msgstr "tek bir n yönlü birleştirme için ataları bul"
 
-#: builtin/merge-base.c:147
+#: builtin/merge-base.c:148
 msgid "list revs not reachable from others"
 msgstr "başkaları tarafından ulaşılabilir revizyonları listele"
 
-#: builtin/merge-base.c:149
+#: builtin/merge-base.c:150
 msgid "is the first one ancestor of the other?"
 msgstr "ilki diğerlerinin atası mı?"
 
-#: builtin/merge-base.c:151
+#: builtin/merge-base.c:152
 msgid "find where <commit> forked from reflog of <ref>"
 msgstr "<işleme>'nin nerede <başvuru>'nun günlüğünden çatallandığını bul"
 
@@ -17935,7 +18442,7 @@ msgid "verify that the named commit has a valid GPG signature"
 msgstr "adı verilen işlemenin geçerli bir GPG imzası olduğunu doğrula"
 
 #: builtin/merge.c:280 builtin/notes.c:785 builtin/pull.c:172
-#: builtin/rebase.c:1117 builtin/revert.c:114
+#: builtin/rebase.c:1145 builtin/revert.c:114
 msgid "strategy"
 msgstr "strateji"
 
@@ -18068,72 +18575,72 @@ msgstr ""
 "'%c' ile başlayan satırlar yok sayılacaktır. Boş bir ileti işlemeyi\n"
 "iptal eder.\n"
 
-#: builtin/merge.c:894
+#: builtin/merge.c:900
 msgid "Empty commit message."
 msgstr "Boş işleme iletisi."
 
-#: builtin/merge.c:909
+#: builtin/merge.c:915
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Harika.\n"
 
-#: builtin/merge.c:970
+#: builtin/merge.c:976
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr "Otomatik birleştirme başarısız; çakışmaları çözün ve sonucu işleyin.\n"
 
-#: builtin/merge.c:1009
+#: builtin/merge.c:1015
 msgid "No current branch."
 msgstr "Geçerli dal yok."
 
-#: builtin/merge.c:1011
+#: builtin/merge.c:1017
 msgid "No remote for the current branch."
 msgstr "Geçerli dal için uzak konum yok."
 
-#: builtin/merge.c:1013
+#: builtin/merge.c:1019
 msgid "No default upstream defined for the current branch."
 msgstr "Geçerli dal için öntanımlı üstkaynak tanımlanmamış."
 
-#: builtin/merge.c:1018
+#: builtin/merge.c:1024
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "%s için %s konumundan uzak izleme dalı yok"
 
-#: builtin/merge.c:1075
+#: builtin/merge.c:1081
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Hatalı değer '%s', '%s' ortamında"
 
-#: builtin/merge.c:1177
+#: builtin/merge.c:1183
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "%s içinde birleştirebileceğimiz bir şey değil: %s"
 
-#: builtin/merge.c:1211
+#: builtin/merge.c:1217
 msgid "not something we can merge"
 msgstr "birleştirebileceğimiz bir şey değil"
 
-#: builtin/merge.c:1324
+#: builtin/merge.c:1330
 msgid "--abort expects no arguments"
 msgstr "--abort bir argüman beklemez"
 
-#: builtin/merge.c:1328
+#: builtin/merge.c:1334
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "İptal edilecek bir birleştirme yok (MERGE_HEAD eksik)."
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1352
 msgid "--quit expects no arguments"
 msgstr "--quit bir argüman beklemez"
 
-#: builtin/merge.c:1359
+#: builtin/merge.c:1365
 msgid "--continue expects no arguments"
 msgstr "--continue bir argüman beklemez"
 
-#: builtin/merge.c:1363
+#: builtin/merge.c:1369
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "İlerlemekte olan bir birleştirme yok (MERGE_HEAD eksik)."
 
-#: builtin/merge.c:1379
+#: builtin/merge.c:1385
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -18141,7 +18648,7 @@ msgstr ""
 "Birleştirmenizi sonuçlandırmadınız (MERGE_HEAD mevcut).\n"
 "Lütfen birleştirmeden önce değişikliklerinizi işleyin."
 
-#: builtin/merge.c:1386
+#: builtin/merge.c:1392
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -18149,86 +18656,82 @@ msgstr ""
 "Seç-al'ınızı sonuçlandırmadınız (CHERRY_PICK_HEAD mevcut).\n"
 "Lütfen birleştirmeden önce değişikliklerinizi işleyin."
 
-#: builtin/merge.c:1389
+#: builtin/merge.c:1395
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "Seç-al'ınızı sonuçlandırmadınız (CHERRY_PICK_HEAD mevcut)."
 
-#: builtin/merge.c:1421
+#: builtin/merge.c:1427
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr "Belirtilen bir işleme yok ve merge.defaultToUpstream ayarlanmamış."
 
-#: builtin/merge.c:1438
+#: builtin/merge.c:1444
 msgid "Squash commit into empty head not supported yet"
 msgstr "İşlemeyi boş dal ucuna tıkıştırma henüz desteklenmiyor"
 
-#: builtin/merge.c:1440
+#: builtin/merge.c:1446
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr ""
 "İleri sarım olmayan işlemeyi boş dal ucuna yapmak bir anlam ifade etmiyor"
 
-#: builtin/merge.c:1445
+#: builtin/merge.c:1451
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - birleştirebileceğimiz bir şey değil"
 
-#: builtin/merge.c:1447
+#: builtin/merge.c:1453
 msgid "Can merge only exactly one commit into empty head"
 msgstr "Boş dal ucuna tam olarak yalnızca bir işleme birleştirilebilir"
 
-#: builtin/merge.c:1534
+#: builtin/merge.c:1540
 msgid "refusing to merge unrelated histories"
 msgstr "birbiriyle ilişkisi olmayan geçmişleri birleştirme reddediliyor"
 
-#: builtin/merge.c:1553
+#: builtin/merge.c:1559
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Güncelleniyor: %s..%s\n"
 
-#: builtin/merge.c:1601
+#: builtin/merge.c:1606
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Gerçekten önemsiz indeks içi birleştirme deneniyor...\n"
 
-#: builtin/merge.c:1608
+#: builtin/merge.c:1613
 #, c-format
 msgid "Nope.\n"
 msgstr "Yok.\n"
 
-#: builtin/merge.c:1667 builtin/merge.c:1733
+#: builtin/merge.c:1671 builtin/merge.c:1737
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Ağaç bozulmamış durumuna geri sarılıyor...\n"
 
-#: builtin/merge.c:1671
+#: builtin/merge.c:1675
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "%s birleştirme stratejisi deneniyor...\n"
 
-#: builtin/merge.c:1723
+#: builtin/merge.c:1727
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Birleştirmeyi hiçbir birleştirme stratejisi işlemedi\n"
 
-#: builtin/merge.c:1725
+#: builtin/merge.c:1729
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "%s stratejisi ile birleştirme başarısız oldu.\n"
 
-#: builtin/merge.c:1735
+#: builtin/merge.c:1739
 #, c-format
 msgid "Using the %s strategy to prepare resolving by hand.\n"
 msgstr "El ile çözümü hazırlamak için %s stratejisi kullanılıyor.\n"
 
-#: builtin/merge.c:1749
+#: builtin/merge.c:1753
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
 "Otomatik birleştirme iyi geçti; istendiği üzere gönderme öncesinde durdu.\n"
 
-#: builtin/mktag.c:10
-msgid "git mktag"
-msgstr "git mktag"
-
 #: builtin/mktag.c:27
 #, c-format
 msgid "warning: tag input does not pass fsck: %s"
@@ -18254,22 +18757,18 @@ msgstr "etiketlenmiş nesne '%s' okunamadı"
 msgid "object '%s' tagged as '%s', but is a '%s' type"
 msgstr "'%s' nesnesi '%s' olarak etiketlenmiş; ancak bir '%s' türü"
 
-#: builtin/mktag.c:98
+#: builtin/mktag.c:97
 msgid "tag on stdin did not pass our strict fsck check"
 msgstr "stdin üzerindeki etiket bizim sıkı fsck denetimimizi geçemedi"
 
-#: builtin/mktag.c:101
+#: builtin/mktag.c:100
 msgid "tag on stdin did not refer to a valid object"
 msgstr "stdin üzerindeki etiket geçerli bir nesneye başvurmuyor"
 
-#: builtin/mktag.c:104 builtin/tag.c:242
+#: builtin/mktag.c:103 builtin/tag.c:243
 msgid "unable to write tag file"
 msgstr "etiket dosyası yazılamıyor"
 
-#: builtin/mktree.c:66
-msgid "git mktree [-z] [--missing] [--batch]"
-msgstr "git mktree [-z] [--missing] [--batch]"
-
 #: builtin/mktree.c:154
 msgid "input is NUL terminated"
 msgstr "girdi NUL ile sonlandırıldı"
@@ -18427,52 +18926,56 @@ msgstr "%s, kaynak=%s, hedef:%s"
 msgid "Renaming %s to %s\n"
 msgstr "%s, %s olarak yeniden adlandırılıyor\n"
 
-#: builtin/mv.c:314 builtin/remote.c:790 builtin/repack.c:857
+#: builtin/mv.c:314 builtin/remote.c:812 builtin/repack.c:861
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "'%s' yeniden adlandırılamadı"
 
-#: builtin/name-rev.c:474
+#: builtin/name-rev.c:524
 msgid "git name-rev [<options>] <commit>..."
 msgstr "git name-rev [<seçenekler>] <işleme>..."
 
-#: builtin/name-rev.c:475
+#: builtin/name-rev.c:525
 msgid "git name-rev [<options>] --all"
 msgstr "git name-rev [<seçenekler>] --all"
 
-#: builtin/name-rev.c:476
-msgid "git name-rev [<options>] --stdin"
-msgstr "git name-rev [<seçenekler>] --stdin"
+#: builtin/name-rev.c:526
+msgid "git name-rev [<options>] --annotate-stdin"
+msgstr "git name-rev [<seçenekler>] --annotate-stdin"
 
-#: builtin/name-rev.c:533
+#: builtin/name-rev.c:583
 msgid "print only ref-based names (no object names)"
 msgstr "yalnızca başvuru tabanlı adları yazdır (nesne adı yok)"
 
-#: builtin/name-rev.c:534
+#: builtin/name-rev.c:584
 msgid "only use tags to name the commits"
 msgstr "işlemeleri adlandırmak için yalnızca etiketleri kullan"
 
-#: builtin/name-rev.c:536
+#: builtin/name-rev.c:586
 msgid "only use refs matching <pattern>"
 msgstr "yalnızca <dizgi> ile eşleşen başvuruları kullan"
 
-#: builtin/name-rev.c:538
+#: builtin/name-rev.c:588
 msgid "ignore refs matching <pattern>"
 msgstr "<dizgi> ile eşleşen başvuruları yok say"
 
-#: builtin/name-rev.c:540
+#: builtin/name-rev.c:590
 msgid "list all commits reachable from all refs"
 msgstr "tüm başvurulardan ulaşılabilir olan tüm işlemeleri listele"
 
-#: builtin/name-rev.c:541
-msgid "read from stdin"
-msgstr "stdin'den oku"
+#: builtin/name-rev.c:591
+msgid "deprecated: use annotate-stdin instead"
+msgstr "kullanılmıyor: Yerine annotate-stdin kullanın"
+
+#: builtin/name-rev.c:592
+msgid "annotate text from stdin"
+msgstr "metne stdin'den açıklama ekle"
 
-#: builtin/name-rev.c:542
+#: builtin/name-rev.c:593
 msgid "allow to print `undefined` names (default)"
 msgstr "'tanımlanmayan' adların yazdırılmasına izin ver (öntanımlı)"
 
-#: builtin/name-rev.c:548
+#: builtin/name-rev.c:599
 msgid "dereference tags in the input (internal use)"
 msgstr "girdide etiketlerin başvurularını kaldır (iç kullanım)"
 
@@ -18514,14 +19017,6 @@ msgid ""
 msgstr ""
 "git notes [--ref <not-bşvr>] merge [-v | -q] [-s <strateji>] <not-bşvr>"
 
-#: builtin/notes.c:35
-msgid "git notes merge --commit [-v | -q]"
-msgstr "git notes merge --commit [-v | -q]"
-
-#: builtin/notes.c:36
-msgid "git notes merge --abort [-v | -q]"
-msgstr "git notes merge --abort [-v | -q]"
-
 #: builtin/notes.c:37
 msgid "git notes [--ref <notes-ref>] remove [<object>...]"
 msgstr "git notes [--ref <not-bşvr>] remove [<nesne>...]"
@@ -18582,10 +19077,6 @@ msgstr "git notes remove [<nesne>]"
 msgid "git notes prune [<options>]"
 msgstr "git notes prune [<seçenekler>]"
 
-#: builtin/notes.c:92
-msgid "git notes get-ref"
-msgstr "git notes get-ref"
-
 #: builtin/notes.c:97
 msgid "Write/edit the notes for the following object:"
 msgstr "Aşağıdaki nesneler için not yaz/düzenle:"
@@ -18617,7 +19108,7 @@ msgstr "not nesnesi yazılamıyor"
 msgid "the note contents have been left in %s"
 msgstr "not içeriği %s içinde bırakıldı"
 
-#: builtin/notes.c:240 builtin/tag.c:581
+#: builtin/notes.c:240 builtin/tag.c:582
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "'%s' açılamadı veya okunamadı"
@@ -18657,13 +19148,6 @@ msgstr "notlar '%s' konumundan '%s' konumuna kopyalanamadı"
 msgid "refusing to %s notes in %s (outside of refs/notes/)"
 msgstr "notları %s yapma (%s içinde) reddediliyor (refs/notes/ dışında)"
 
-#: builtin/notes.c:374 builtin/notes.c:429 builtin/notes.c:507
-#: builtin/notes.c:519 builtin/notes.c:596 builtin/notes.c:663
-#: builtin/notes.c:813 builtin/notes.c:965 builtin/notes.c:987
-#: builtin/prune-packed.c:25 builtin/receive-pack.c:2487 builtin/tag.c:591
-msgid "too many arguments"
-msgstr "çok fazla argüman"
-
 #: builtin/notes.c:387 builtin/notes.c:676
 #, c-format
 msgid "no note found for object %s."
@@ -18850,7 +19334,7 @@ msgstr ""
 "çözün ve sonucu 'git notes merge --commit' ile işleyin. Birleştirmeyi iptal "
 "etmek isterseniz 'git notes merge --abort' kullanarak bunu yapabilirsiniz.\n"
 
-#: builtin/notes.c:899 builtin/tag.c:594
+#: builtin/notes.c:899 builtin/tag.c:595
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "'%s' geçerli bir başvuru olarak çözülemiyor"
@@ -18868,7 +19352,7 @@ msgstr "var olmayan notu kaldırma denemesi bir hata değil"
 msgid "read object names from the standard input"
 msgstr "nesne adlarını standart girdi'den oku"
 
-#: builtin/notes.c:956 builtin/prune.c:144 builtin/worktree.c:147
+#: builtin/notes.c:956 builtin/prune.c:144 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr "kaldırma, yalnızca göster"
 
@@ -18884,7 +19368,7 @@ msgstr "not başvurusu"
 msgid "use notes from <notes-ref>"
 msgstr "notları <not-bşvr>'ndan kullan"
 
-#: builtin/notes.c:1036 builtin/stash.c:1818
+#: builtin/notes.c:1036 builtin/stash.c:1802
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "bilinmeyen altkomut: %s"
@@ -18902,7 +19386,7 @@ msgid ""
 msgstr ""
 "git pack-objects [<sçnklr>...] <base-name> [< <bşvr-liste> | < <nesne-liste>]"
 
-#: builtin/pack-objects.c:572
+#: builtin/pack-objects.c:570
 #, c-format
 msgid ""
 "write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
@@ -18911,112 +19395,112 @@ msgstr ""
 "write_reuse_object: %s bulunamıyor, %<PRIuMAX> ofsetinde bekleniyordu (%s "
 "paketinde)"
 
-#: builtin/pack-objects.c:580
+#: builtin/pack-objects.c:578
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr "%s için hatalı paketlenmiş nesne CRC'si"
 
-#: builtin/pack-objects.c:591
+#: builtin/pack-objects.c:589
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr "%s için hasar görmüş paketlenmiş nesne"
 
-#: builtin/pack-objects.c:722
+#: builtin/pack-objects.c:720
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr "%s nesnesi için özyineli delta algılandı"
 
-#: builtin/pack-objects.c:941
+#: builtin/pack-objects.c:939
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr "%u nesne sipariş verildi, %<PRIu32> bekleniyordu"
 
-#: builtin/pack-objects.c:1036
+#: builtin/pack-objects.c:1034
 #, c-format
 msgid "expected object at offset %<PRIuMAX> in pack %s"
 msgstr "şu paketin %<PRIuMAX> ofsetinde nesne bekleniyordu: %s"
 
-#: builtin/pack-objects.c:1160
+#: builtin/pack-objects.c:1158
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr ""
 "biteşlem yazımı kapatılıyor, paketler pack.packSizeLimit dolayısıyla "
 "parçalara ayrılmış"
 
-#: builtin/pack-objects.c:1173
+#: builtin/pack-objects.c:1171
 msgid "Writing objects"
 msgstr "Nesneler yazılıyor"
 
-#: builtin/pack-objects.c:1235 builtin/update-index.c:90
+#: builtin/pack-objects.c:1243 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "%s bilgileri alınamıyor"
 
-#: builtin/pack-objects.c:1268
+#: builtin/pack-objects.c:1276
 msgid "failed to write bitmap index"
 msgstr "biteşlem indeksi yazılamadı"
 
-#: builtin/pack-objects.c:1294
+#: builtin/pack-objects.c:1302
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "%<PRIu32> nesne yazıldı (%<PRIu32> bekleniyordu)"
 
-#: builtin/pack-objects.c:1536
+#: builtin/pack-objects.c:1544
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr "bazı nesneler paketlenmediğinden dolayı biteşlem yazımı kapatılıyor"
 
-#: builtin/pack-objects.c:1984
+#: builtin/pack-objects.c:1992
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "%s için paket içinde delta taban ofset taşımı"
 
-#: builtin/pack-objects.c:1993
+#: builtin/pack-objects.c:2001
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "%s için delta taban ofseti sınırların dışında"
 
-#: builtin/pack-objects.c:2274
+#: builtin/pack-objects.c:2282
 msgid "Counting objects"
 msgstr "Nesneler sayılıyor"
 
-#: builtin/pack-objects.c:2439
+#: builtin/pack-objects.c:2447
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "%s nesne üstbilgisi ayrıştırılamıyor"
 
-#: builtin/pack-objects.c:2509 builtin/pack-objects.c:2525
-#: builtin/pack-objects.c:2535
+#: builtin/pack-objects.c:2517 builtin/pack-objects.c:2533
+#: builtin/pack-objects.c:2543
 #, c-format
 msgid "object %s cannot be read"
 msgstr "%s nesnesi okunamıyor"
 
-#: builtin/pack-objects.c:2512 builtin/pack-objects.c:2539
+#: builtin/pack-objects.c:2520 builtin/pack-objects.c:2547
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr "%s nesnesi için tutarsız nesne uzunluğu (%<PRIuMAX> / %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2549
+#: builtin/pack-objects.c:2557
 msgid "suboptimal pack - out of memory"
 msgstr "standart altı paket - bellek yetersiz"
 
-#: builtin/pack-objects.c:2864
+#: builtin/pack-objects.c:2872
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Delta sıkıştırması %d iş parçacığı kullanıyor"
 
-#: builtin/pack-objects.c:3003
+#: builtin/pack-objects.c:3011
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "%s etiketinden ulaşılabilir nesneler paketlenemiyor"
 
-#: builtin/pack-objects.c:3089
+#: builtin/pack-objects.c:3097
 msgid "Compressing objects"
 msgstr "Nesneler sıkıştırılıyor"
 
-#: builtin/pack-objects.c:3095
+#: builtin/pack-objects.c:3103
 msgid "inconsistency with delta count"
 msgstr "delta sayımında tutarsızlık"
 
-#: builtin/pack-objects.c:3174
+#: builtin/pack-objects.c:3182
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
@@ -19025,7 +19509,7 @@ msgstr ""
 "uploadpack.blobpackfileuri değeri '<nesne-sağlaması> <paket-sağlaması> <uri> "
 "biçiminde olmalıdır ('%s' alındı)"
 
-#: builtin/pack-objects.c:3177
+#: builtin/pack-objects.c:3185
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
@@ -19033,18 +19517,18 @@ msgstr ""
 "nesne halihazırda başka bir uploadpack.blobpackfileuri içinde yapılandırıldı "
 "('%s' alındı)"
 
-#: builtin/pack-objects.c:3212
+#: builtin/pack-objects.c:3220
 #, c-format
 msgid "could not get type of object %s in pack %s"
 msgstr "%s nesnesinin türü alınamıyor (%s paketinde)"
 
-#: builtin/pack-objects.c:3340 builtin/pack-objects.c:3351
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3348 builtin/pack-objects.c:3359
+#: builtin/pack-objects.c:3373
 #, c-format
 msgid "could not find pack '%s'"
 msgstr "'%s' paketi bulunamadı"
 
-#: builtin/pack-objects.c:3408
+#: builtin/pack-objects.c:3416
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -19053,7 +19537,7 @@ msgstr ""
 "sınır nesnesi numarası bekleniyordu, anlamsız veri alındı:\n"
 " %s"
 
-#: builtin/pack-objects.c:3414
+#: builtin/pack-objects.c:3422
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -19062,245 +19546,241 @@ msgstr ""
 "nesne numarası bekleniyordu, anlamsız veri alındı:\n"
 "%s"
 
-#: builtin/pack-objects.c:3507
-msgid "invalid value for --missing"
-msgstr "--missing için geçersiz değer"
-
-#: builtin/pack-objects.c:3532 builtin/pack-objects.c:3619
+#: builtin/pack-objects.c:3540 builtin/pack-objects.c:3627
 msgid "cannot open pack index"
 msgstr "paket indeksi açılamıyor"
 
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3549
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "%s konumundaki gevşek nesne incelenemedi"
 
-#: builtin/pack-objects.c:3627
+#: builtin/pack-objects.c:3635
 msgid "unable to force loose object"
 msgstr "gevşek nesne zorlanamıyor"
 
-#: builtin/pack-objects.c:3757
+#: builtin/pack-objects.c:3763
 #, c-format
 msgid "not a rev '%s'"
 msgstr "bir revizyon değil: '%s'"
 
-#: builtin/pack-objects.c:3760 builtin/rev-parse.c:1061
+#: builtin/pack-objects.c:3766 builtin/rev-parse.c:1061
 #, c-format
 msgid "bad revision '%s'"
 msgstr "hatalı revizyon: '%s'"
 
-#: builtin/pack-objects.c:3788
+#: builtin/pack-objects.c:3794
 msgid "unable to add recent objects"
 msgstr "en son nesneler eklenemiyor"
 
-#: builtin/pack-objects.c:3841
+#: builtin/pack-objects.c:3847
 #, c-format
 msgid "unsupported index version %s"
 msgstr "desteklenmeyen indeks sürümü %s"
 
-#: builtin/pack-objects.c:3845
+#: builtin/pack-objects.c:3851
 #, c-format
 msgid "bad index version '%s'"
 msgstr "hatalı indeks sürümü '%s'"
 
-#: builtin/pack-objects.c:3884
+#: builtin/pack-objects.c:3907
 msgid "<version>[,<offset>]"
 msgstr "<sürüm>[,<ofset>]"
 
-#: builtin/pack-objects.c:3885
+#: builtin/pack-objects.c:3908
 msgid "write the pack index file in the specified idx format version"
 msgstr "paket indeks dosyasını belirtilen idx biçiminde yaz"
 
-#: builtin/pack-objects.c:3888
+#: builtin/pack-objects.c:3911
 msgid "maximum size of each output pack file"
 msgstr "her çıktı paketi dosyasının olabilecek en büyük boyutu"
 
-#: builtin/pack-objects.c:3890
+#: builtin/pack-objects.c:3913
 msgid "ignore borrowed objects from alternate object store"
 msgstr "alternatif nesne mağazasından ödünç alınan nesneleri yok say"
 
-#: builtin/pack-objects.c:3892
+#: builtin/pack-objects.c:3915
 msgid "ignore packed objects"
 msgstr "paketlenmiş nesneleri yok say"
 
-#: builtin/pack-objects.c:3894
+#: builtin/pack-objects.c:3917
 msgid "limit pack window by objects"
 msgstr "paket penceresini nesnelerle sınırla"
 
-#: builtin/pack-objects.c:3896
+#: builtin/pack-objects.c:3919
 msgid "limit pack window by memory in addition to object limit"
 msgstr "paket penceresini nesne limitine ek olarak bellek ile kısıtla"
 
-#: builtin/pack-objects.c:3898
+#: builtin/pack-objects.c:3921
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr "ortaya çıkan pakette olabilecek en büyük delta zincirinin uzunluğu"
 
-#: builtin/pack-objects.c:3900
+#: builtin/pack-objects.c:3923
 msgid "reuse existing deltas"
 msgstr "var olan deltaları yeniden kullan"
 
-#: builtin/pack-objects.c:3902
+#: builtin/pack-objects.c:3925
 msgid "reuse existing objects"
 msgstr "var olan nesneleri yeniden kullan"
 
-#: builtin/pack-objects.c:3904
+#: builtin/pack-objects.c:3927
 msgid "use OFS_DELTA objects"
 msgstr "OFS_DELTA nesneleri kullan"
 
-#: builtin/pack-objects.c:3906
+#: builtin/pack-objects.c:3929
 msgid "use threads when searching for best delta matches"
 msgstr "en iyi delta eşleşmelerini ararken iş parçacıklarını kullan"
 
-#: builtin/pack-objects.c:3908
+#: builtin/pack-objects.c:3931
 msgid "do not create an empty pack output"
 msgstr "boş bir paket çıktısı oluşturma"
 
-#: builtin/pack-objects.c:3910
+#: builtin/pack-objects.c:3933
 msgid "read revision arguments from standard input"
 msgstr "revizyon argümanlarını standart girdi'den oku"
 
-#: builtin/pack-objects.c:3912
+#: builtin/pack-objects.c:3935
 msgid "limit the objects to those that are not yet packed"
 msgstr "nesneleri henüz paketlenmeyenlere kısıtla"
 
-#: builtin/pack-objects.c:3915
+#: builtin/pack-objects.c:3938
 msgid "include objects reachable from any reference"
 msgstr "herhangi bir başvurudan ulaşılabilir olan nesneleri içer"
 
-#: builtin/pack-objects.c:3918
+#: builtin/pack-objects.c:3941
 msgid "include objects referred by reflog entries"
 msgstr "başvuru günlüğü tarafından başvurulan nesneleri içer"
 
-#: builtin/pack-objects.c:3921
+#: builtin/pack-objects.c:3944
 msgid "include objects referred to by the index"
 msgstr "indeks tarafından başvurulan nesneleri içer"
 
-#: builtin/pack-objects.c:3924
+#: builtin/pack-objects.c:3947
 msgid "read packs from stdin"
 msgstr "paketleri stdin'den oku"
 
-#: builtin/pack-objects.c:3926
+#: builtin/pack-objects.c:3949
 msgid "output pack to stdout"
 msgstr "paketi stdout'a çıktı ver"
 
-#: builtin/pack-objects.c:3928
+#: builtin/pack-objects.c:3951
 msgid "include tag objects that refer to objects to be packed"
 msgstr "paketlenecek nesnelere başvuran etiket nesnelerini içer"
 
-#: builtin/pack-objects.c:3930
+#: builtin/pack-objects.c:3953
 msgid "keep unreachable objects"
 msgstr "ulaşılamayan nesneleri tut"
 
-#: builtin/pack-objects.c:3932
+#: builtin/pack-objects.c:3955
 msgid "pack loose unreachable objects"
 msgstr "ulaşılamayan gevşek nesneleri paketle"
 
-#: builtin/pack-objects.c:3934
+#: builtin/pack-objects.c:3957
 msgid "unpack unreachable objects newer than <time>"
 msgstr "<zaman>'dan daha yeni ulaşılamayan nesneleri aç"
 
-#: builtin/pack-objects.c:3937
+#: builtin/pack-objects.c:3960
 msgid "use the sparse reachability algorithm"
 msgstr "aralıklı ulaşılabilirlik algoritmasını kullan"
 
-#: builtin/pack-objects.c:3939
+#: builtin/pack-objects.c:3962
 msgid "create thin packs"
 msgstr "ince paketler oluştur"
 
-#: builtin/pack-objects.c:3941
+#: builtin/pack-objects.c:3964
 msgid "create packs suitable for shallow fetches"
 msgstr "sığ getirmelere uygun paketler oluştur"
 
-#: builtin/pack-objects.c:3943
+#: builtin/pack-objects.c:3966
 msgid "ignore packs that have companion .keep file"
 msgstr "eşlik eden .keep dosyasına iye paketleri yok say"
 
-#: builtin/pack-objects.c:3945
+#: builtin/pack-objects.c:3968
 msgid "ignore this pack"
 msgstr "bu paketi yok say"
 
-#: builtin/pack-objects.c:3947
+#: builtin/pack-objects.c:3970
 msgid "pack compression level"
 msgstr "paket sıkıştırma düzeyi"
 
-#: builtin/pack-objects.c:3949
+#: builtin/pack-objects.c:3972
 msgid "do not hide commits by grafts"
 msgstr "aşılarla gelen işlemeleri gizleme"
 
-#: builtin/pack-objects.c:3951
+#: builtin/pack-objects.c:3974
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr ""
 "nesnelerin sayımını hızlandırmak için eğer varsa bir biteşlem indeksi kullan"
 
-#: builtin/pack-objects.c:3953
+#: builtin/pack-objects.c:3976
 msgid "write a bitmap index together with the pack index"
 msgstr "paket indeksiyle birlikte bir biteşlem indeksi de yaz"
 
-#: builtin/pack-objects.c:3957
+#: builtin/pack-objects.c:3980
 msgid "write a bitmap index if possible"
 msgstr "eğer olanaklıysa bir biteşlem indeksi yaz"
 
-#: builtin/pack-objects.c:3961
+#: builtin/pack-objects.c:3984
 msgid "handling for missing objects"
 msgstr "eksik nesneler için işlem"
 
-#: builtin/pack-objects.c:3964
+#: builtin/pack-objects.c:3987
 msgid "do not pack objects in promisor packfiles"
 msgstr "nesneleri vaatçi paket dosyalarıyla paketleme"
 
-#: builtin/pack-objects.c:3966
+#: builtin/pack-objects.c:3989
 msgid "respect islands during delta compression"
 msgstr "delta sıkıştırması sırasında adalara uy"
 
-#: builtin/pack-objects.c:3968
+#: builtin/pack-objects.c:3991
 msgid "protocol"
 msgstr "protokol"
 
-#: builtin/pack-objects.c:3969
+#: builtin/pack-objects.c:3992
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr ""
 "bu protokol ile herhangi bir yapılandırılmış uploadpack.blobpackfileuri "
 "ögesini hariç tut"
 
-#: builtin/pack-objects.c:4002
+#: builtin/pack-objects.c:4027
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "delta zincir derinliği %d çok derin, %d zorlanıyor"
 
-#: builtin/pack-objects.c:4007
+#: builtin/pack-objects.c:4032
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "pack.deltaCacheLimit çok yüksek, %d zorlanıyor"
 
-#: builtin/pack-objects.c:4063
+#: builtin/pack-objects.c:4088
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr "--max-pack-size, aktarım için bir paket yapımında kullanılamaz"
 
-#: builtin/pack-objects.c:4065
+#: builtin/pack-objects.c:4090
 msgid "minimum pack size limit is 1 MiB"
 msgstr "olabilecek en küçük paket boyutu limiti 1 MiB'dır"
 
-#: builtin/pack-objects.c:4070
+#: builtin/pack-objects.c:4095
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "--thin bir indekslenebilir paket yapımında kullanılamaz"
 
-#: builtin/pack-objects.c:4079
+#: builtin/pack-objects.c:4104
 msgid "cannot use --filter without --stdout"
 msgstr "--filter, --stdout olmadan kullanılamaz"
 
-#: builtin/pack-objects.c:4081
+#: builtin/pack-objects.c:4106
 msgid "cannot use --filter with --stdin-packs"
 msgstr "--filter, --stdin-packs ile birlikte kullanılamıyor"
 
-#: builtin/pack-objects.c:4085
+#: builtin/pack-objects.c:4110
 msgid "cannot use internal rev list with --stdin-packs"
 msgstr "iç revizyon listeleri, --stdin-packs ile birlikte kullanılamıyor"
 
-#: builtin/pack-objects.c:4144
+#: builtin/pack-objects.c:4169
 msgid "Enumerating objects"
 msgstr "Nesneler ortaya dökülüyor"
 
-#: builtin/pack-objects.c:4180
+#: builtin/pack-objects.c:4210
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -19336,10 +19816,6 @@ msgstr "her şeyi paketle"
 msgid "prune loose refs (default)"
 msgstr "gevşek başvuruları buda (öntanımlı)"
 
-#: builtin/prune-packed.c:6
-msgid "git prune-packed [-n | --dry-run] [-q | --quiet]"
-msgstr "git prune-packed [-n | --dry-run] [-q | --quiet]"
-
 #: builtin/prune.c:14
 msgid "git prune [-n] [-v] [--progress] [--expire <time>] [--] [<head>...]"
 msgstr ""
@@ -19361,11 +19837,6 @@ msgstr "promisor paket dosyalarının dışındaki nesnelere taramayı kısıtla
 msgid "cannot prune in a precious-objects repo"
 msgstr "bir precious-objects deposu içinde budama yapılamıyor"
 
-#: builtin/pull.c:45 builtin/pull.c:47
-#, c-format
-msgid "Invalid value for %s: %s"
-msgstr "%s için geçersiz değer: %s"
-
 #: builtin/pull.c:67
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
 msgstr "git pull [<seçenekler>] [<depo> [<bşvr-blrtç>...]]"
@@ -19390,7 +19861,7 @@ msgstr "ileri sarıma izin ver"
 msgid "control use of pre-merge-commit and commit-msg hooks"
 msgstr "pre-merge-commit ve commit-msg kancalarının kullanımını denetle"
 
-#: builtin/pull.c:171 parse-options.h:340
+#: builtin/pull.c:171 parse-options.h:371
 msgid "automatically stash/stash pop before and after"
 msgstr "öncesinde ve sonrasında kendiliğinden zulala/zulaları patlat"
 
@@ -19406,11 +19877,6 @@ msgstr "zorla yerel dalın üzerine yaz"
 msgid "number of submodules pulled in parallel"
 msgstr "paralelde çekilen altmodüllerin sayısı"
 
-#: builtin/pull.c:321
-#, c-format
-msgid "Invalid value for pull.ff: %s"
-msgstr "pull.ff için geçersiz değer: %s"
-
 #: builtin/pull.c:449
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
@@ -19442,7 +19908,7 @@ msgstr ""
 "Bu, geçerli dalınız için öntanımlı yapılandırılmış uzak konum olmadığından,\n"
 "komut satırında bir dal belirtmeniz gerekir."
 
-#: builtin/pull.c:460 builtin/rebase.c:951
+#: builtin/pull.c:460 builtin/rebase.c:978
 msgid "You are not currently on a branch."
 msgstr "Şu anda bir dal üzerinde değilsiniz."
 
@@ -19460,16 +19926,16 @@ msgid "See git-pull(1) for details."
 msgstr "Ayrıntılar için: git-pull(1)"
 
 #: builtin/pull.c:467 builtin/pull.c:473 builtin/pull.c:482
-#: builtin/rebase.c:957
+#: builtin/rebase.c:984
 msgid "<remote>"
 msgstr "<uzak-konum>"
 
 #: builtin/pull.c:467 builtin/pull.c:482 builtin/pull.c:487
-#: contrib/scalar/scalar.c:375
+#: contrib/scalar/scalar.c:374
 msgid "<branch>"
 msgstr "<dal>"
 
-#: builtin/pull.c:475 builtin/rebase.c:949
+#: builtin/pull.c:475 builtin/rebase.c:976
 msgid "There is no tracking information for the current branch."
 msgstr "Geçerli dal için izleme bilgisi yok."
 
@@ -19526,19 +19992,19 @@ msgstr ""
 "yapılandırmayı yürütme sırasında --rebase, --no-rebase veya\n"
 "--ff-only ile bir kerelik geçersiz kılabilirsiniz.\n"
 
-#: builtin/pull.c:1046
+#: builtin/pull.c:1047
 msgid "Updating an unborn branch with changes added to the index."
 msgstr "İndekse eklenen değişikliklerle henüz doğmamış bir dal güncelleniyor."
 
-#: builtin/pull.c:1050
+#: builtin/pull.c:1051
 msgid "pull with rebase"
 msgstr "yeniden temellendirme ile çekim"
 
-#: builtin/pull.c:1051
+#: builtin/pull.c:1052
 msgid "please commit or stash them."
 msgstr "Lütfen onları işleyin veya zulalayın."
 
-#: builtin/pull.c:1076
+#: builtin/pull.c:1077
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -19549,7 +20015,7 @@ msgstr ""
 "Çalışma ağacınız %s işlemesinden\n"
 "ileri sarılıyor."
 
-#: builtin/pull.c:1082
+#: builtin/pull.c:1083
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -19566,23 +20032,23 @@ msgstr ""
 "$ git reset --hard\n"
 "komutunu çalıştırın."
 
-#: builtin/pull.c:1097
+#: builtin/pull.c:1098
 msgid "Cannot merge multiple branches into empty head."
 msgstr "Boş dal ucuna birden çok dal birleştirilemez."
 
-#: builtin/pull.c:1102
+#: builtin/pull.c:1103
 msgid "Cannot rebase onto multiple branches."
 msgstr "Birden çok dala yeniden temellendirme yapılamaz."
 
-#: builtin/pull.c:1104
+#: builtin/pull.c:1105
 msgid "Cannot fast-forward to multiple branches."
 msgstr "Birden çok dala ileri sarım yapılamaz."
 
-#: builtin/pull.c:1119
+#: builtin/pull.c:1120
 msgid "Need to specify how to reconcile divergent branches."
 msgstr "Iraksak dalların nasıl uzlaştırılacağının belirtilmesi gerekiyor."
 
-#: builtin/pull.c:1133
+#: builtin/pull.c:1134
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 "yerelde kaydı yazılmış altmodül değişiklikleriyle yeniden temellendirme "
@@ -19694,7 +20160,8 @@ msgstr ""
 "Güncellemeler reddedildi; çünkü geçerli dalınızın ucu kendisinin\n"
 "uzak konum karşıtından geride. Yeniden itmeden önce uzak konumdaki\n"
 "değişiklikleri entegre edin (örn. 'git pull ...').\n"
-"Ayrıntılar için 'git push --help' içinde 'Notes about fast-forwards'a bakın."
+"Ayrıntılar için 'git push --help' içinde 'Notes about fast-forwards'a\n"
+"bakın."
 
 #: builtin/push.c:264
 msgid ""
@@ -19705,8 +20172,9 @@ msgid ""
 msgstr ""
 "Güncellemeler reddedildi; çünkü itilmiş bir dal ucu kendisinin\n"
 "uzak konum karşıtından geride. Yeniden itmeden önce bu dalı çıkış\n"
-"yapın ve uzak konumdaki değişiklikleri entegre edin (örn. 'git pull ...').\n"
-"Ayrıntılar için 'git push --help' içinde 'Notes about fast-forwards'a bakın."
+"yapın ve uzak konumdaki değişiklikleri entegre edin (örn. 'git pull\n"
+"...'). Ayrıntılar için 'git push --help' içinde 'Notes about\n"
+"fast-forwards'a bakın."
 
 #: builtin/push.c:270
 msgid ""
@@ -19720,7 +20188,8 @@ msgstr ""
 "değişiklikler var. Bu genelde başka bir deponun aynı başvuruya itmesinden\n"
 "dolayı olur. Yeniden itmeden önce uzak konumdaki değişiklikleri entegre\n"
 "etmek isteyebilirsiniz (örn. 'git pull ...').\n"
-"Ayrıntılar için 'git push --help' içinde 'Notes about fast-forwards'a bakın."
+"Ayrıntılar için 'git push --help' içinde 'Notes about fast-forwards'a\n"
+"bakın."
 
 #: builtin/push.c:277
 msgid "Updates were rejected because the tag already exists in the remote."
@@ -19758,7 +20227,7 @@ msgstr "İtme konumu: %s\n"
 msgid "failed to push some refs to '%s'"
 msgstr "bazı başvurular '%s' konumuna itilemedi"
 
-#: builtin/push.c:544 builtin/submodule--helper.c:3259
+#: builtin/push.c:544 builtin/submodule--helper.c:3377
 msgid "repository"
 msgstr "depo"
 
@@ -19998,11 +20467,11 @@ msgstr "unpack-trees hatalarını ayıkla"
 msgid "suppress feedback messages"
 msgstr "geribildirim iletilerini gizle"
 
-#: builtin/read-tree.c:183
+#: builtin/read-tree.c:190
 msgid "You need to resolve your current index first"
 msgstr "Öncelikle geçerli indeksinizi çözmelisiniz"
 
-#: builtin/rebase.c:35
+#: builtin/rebase.c:36
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
 "[<upstream> [<branch>]]"
@@ -20010,55 +20479,51 @@ msgstr ""
 "git rebase [-i] [options] [--exec <komut>] [--onto <yeni-temel> | --keep-"
 "base] [<üstkaynak> [<dal>]]"
 
-#: builtin/rebase.c:37
+#: builtin/rebase.c:38
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]"
 msgstr ""
 "git rebase [-i] [options] [--exec <komut>] [--onto <yeni-temel>] --root "
 "[<dal>]"
 
-#: builtin/rebase.c:39
-msgid "git rebase --continue | --abort | --skip | --edit-todo"
-msgstr "git rebase --continue | --abort | --skip | --edit-todo"
-
-#: builtin/rebase.c:230
+#: builtin/rebase.c:231
 #, c-format
 msgid "could not create temporary %s"
 msgstr "geçici %s oluşturulamadı"
 
-#: builtin/rebase.c:236
+#: builtin/rebase.c:237
 msgid "could not mark as interactive"
 msgstr "etkileşimli olarak imlenemedi"
 
-#: builtin/rebase.c:289
+#: builtin/rebase.c:290
 msgid "could not generate todo list"
 msgstr "yapılacaklar listesi oluşturulamadı"
 
-#: builtin/rebase.c:331
+#: builtin/rebase.c:332
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "bir taban işlemesi --upstream veya --onto ile sağlanmalıdır"
 
-#: builtin/rebase.c:390
+#: builtin/rebase.c:391
 #, c-format
 msgid "%s requires the merge backend"
 msgstr "%s birleştirme arka ucunu gerektiriyor"
 
-#: builtin/rebase.c:432
+#: builtin/rebase.c:433
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "'onto' alınamadı: '%s'"
 
-#: builtin/rebase.c:449
+#: builtin/rebase.c:450
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "geçersiz orig-head: '%s'"
 
-#: builtin/rebase.c:474
+#: builtin/rebase.c:475
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "geçersiz allow_rerere_autoupdate yok sayılıyor: '%s'"
 
-#: builtin/rebase.c:597
+#: builtin/rebase.c:600
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -20067,12 +20532,12 @@ msgid ""
 "abort\"."
 msgstr ""
 "Tüm çakışmaları el ile çözün, onları \"git add/rm <çakışan-dosyalar>\"\n"
-"ile tamam olarak imleyin, ardından \"git rebase --continue\" çalıştırın.\n"
-"Bunun yerine bu işlemeyi atlayabilirsiniz: \"git rebase --skip\" yapın.\n"
-"İptal edip \"git rebase\" öncesine geri dönmek için \"git rebase --abort\"\n"
-"çalıştırın."
+"ile tamam olarak imleyin, ardından \"git rebase --continue\"\n"
+"çalıştırın. Bunun yerine bu işlemeyi atlayabilirsiniz: \"git rebase\n"
+"--skip\" yapın. İptal edip \"git rebase\" öncesine geri dönmek için\n"
+"\"git rebase --abort\" çalıştırın."
 
-#: builtin/rebase.c:680
+#: builtin/rebase.c:685
 #, c-format
 msgid ""
 "\n"
@@ -20091,15 +20556,20 @@ msgstr ""
 "\n"
 "Bunun sonucu olarak git onları yeniden temellendiremiyor."
 
-#: builtin/rebase.c:925
+#: builtin/rebase.c:836
+#, c-format
+msgid "could not switch to %s"
+msgstr "şuraya geçilemedi: %s"
+
+#: builtin/rebase.c:952
 #, c-format
 msgid ""
 "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
 "\"."
 msgstr ""
-"tanımlanamayan boş tür '%s'; geçerli türler: \"drop\", \"keep\" ve \"ask\""
+"Tanımlanamayan boş tür '%s'; geçerli türler: \"drop\", \"keep\" ve \"ask\"."
 
-#: builtin/rebase.c:943
+#: builtin/rebase.c:970
 #, c-format
 msgid ""
 "%s\n"
@@ -20116,7 +20586,7 @@ msgstr ""
 "\tgit rebase '<dal>'\n"
 "\n"
 
-#: builtin/rebase.c:959
+#: builtin/rebase.c:986
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -20129,187 +20599,187 @@ msgstr ""
 "\tgit branch --set-upstream-to=%s/<dal> %s\n"
 "\n"
 
-#: builtin/rebase.c:989
+#: builtin/rebase.c:1016
 msgid "exec commands cannot contain newlines"
 msgstr "'exec' komutları yenisatırlar içeremez"
 
-#: builtin/rebase.c:993
+#: builtin/rebase.c:1020
 msgid "empty exec command"
 msgstr "boş 'exec' komutu"
 
-#: builtin/rebase.c:1023
+#: builtin/rebase.c:1051
 msgid "rebase onto given branch instead of upstream"
 msgstr "üstkaynak yerine verilen dalın üzerine yeniden temellendir"
 
-#: builtin/rebase.c:1025
+#: builtin/rebase.c:1053
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr "üstkaynağın birleştirme temelini ve dalını geçerli temel olarak kullan"
 
-#: builtin/rebase.c:1027
+#: builtin/rebase.c:1055
 msgid "allow pre-rebase hook to run"
 msgstr "pre-rebase kancasının çalışmasına izin ver"
 
-#: builtin/rebase.c:1029
+#: builtin/rebase.c:1057
 msgid "be quiet. implies --no-stat"
 msgstr "sessiz ol (--no-stat ima eder)"
 
-#: builtin/rebase.c:1032
+#: builtin/rebase.c:1060
 msgid "display a diffstat of what changed upstream"
 msgstr "üstkaynakta nelerin değiştiğini gösteren bir diffstat görüntüle"
 
-#: builtin/rebase.c:1035
+#: builtin/rebase.c:1063
 msgid "do not show diffstat of what changed upstream"
 msgstr "üstkaynakta nelerin değiştiğini gösteren diffstat gösterme"
 
-#: builtin/rebase.c:1038
+#: builtin/rebase.c:1066
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "her işlemeye bir Signed-off-by artbilgisi ekle"
 
-#: builtin/rebase.c:1041
+#: builtin/rebase.c:1069
 msgid "make committer date match author date"
 msgstr "işleyici tarihi ile yazar tarihini aynı yap"
 
-#: builtin/rebase.c:1043
+#: builtin/rebase.c:1071
 msgid "ignore author date and use current date"
 msgstr "yazar tarihini yok say ve geçerli tarihi kullan"
 
-#: builtin/rebase.c:1045
+#: builtin/rebase.c:1073
 msgid "synonym of --reset-author-date"
 msgstr "--reset-author-date eşanlamlısı"
 
-#: builtin/rebase.c:1047 builtin/rebase.c:1051
+#: builtin/rebase.c:1075 builtin/rebase.c:1079
 msgid "passed to 'git apply'"
 msgstr "'git apply'a aktarıldı"
 
-#: builtin/rebase.c:1049
+#: builtin/rebase.c:1077
 msgid "ignore changes in whitespace"
 msgstr "boşluk değişikliklerini yok say"
 
-#: builtin/rebase.c:1053 builtin/rebase.c:1056
+#: builtin/rebase.c:1081 builtin/rebase.c:1084
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "değiştirilmemiş olsa bile tüm işlemeleri seç-al yap"
 
-#: builtin/rebase.c:1058
+#: builtin/rebase.c:1086
 msgid "continue"
 msgstr "sürdür"
 
-#: builtin/rebase.c:1061
+#: builtin/rebase.c:1089
 msgid "skip current patch and continue"
 msgstr "geçerli yamayı atla ve sürdür"
 
-#: builtin/rebase.c:1063
+#: builtin/rebase.c:1091
 msgid "abort and check out the original branch"
 msgstr "iptal et ve orijinal dalı çıkış yap"
 
-#: builtin/rebase.c:1066
+#: builtin/rebase.c:1094
 msgid "abort but keep HEAD where it is"
 msgstr "iptal et; ancak HEAD'i olduğu yerde bırak"
 
-#: builtin/rebase.c:1067
+#: builtin/rebase.c:1095
 msgid "edit the todo list during an interactive rebase"
 msgstr ""
 "bir etkileşimli yeniden temellendirme sırasında yapılacaklar listesini "
 "düzenle"
 
-#: builtin/rebase.c:1070
+#: builtin/rebase.c:1098
 msgid "show the patch file being applied or merged"
 msgstr "yama dosyası uygulanırken veya birleştirilirken göster"
 
-#: builtin/rebase.c:1073
+#: builtin/rebase.c:1101
 msgid "use apply strategies to rebase"
 msgstr "yeniden temellendirmek için \"apply\" stratejilerini kullan"
 
-#: builtin/rebase.c:1077
+#: builtin/rebase.c:1105
 msgid "use merging strategies to rebase"
 msgstr "yeniden temellendirmek için birleştirme stratejilerini kullan"
 
-#: builtin/rebase.c:1081
+#: builtin/rebase.c:1109
 msgid "let the user edit the list of commits to rebase"
 msgstr ""
 "yeniden temellendirilecek işlemelerin listesini kullanıcının düzenlemesine "
 "izin ver"
 
-#: builtin/rebase.c:1085
+#: builtin/rebase.c:1113
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr ""
 "(KULLANILMAMALI) birleştirmeleri yok saymak yerine onları yeniden "
 "oluşturmaya çalış"
 
-#: builtin/rebase.c:1090
+#: builtin/rebase.c:1118
 msgid "how to handle commits that become empty"
 msgstr "boşalan işlemelerin nasıl ele alınacağı"
 
-#: builtin/rebase.c:1093
+#: builtin/rebase.c:1121
 msgid "keep commits which start empty"
 msgstr "boş başlayan işlemeleri tut"
 
-#: builtin/rebase.c:1097
+#: builtin/rebase.c:1125
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "-i altındaki squash!/fixup! ile başlayan işlemeleri taşı"
 
-#: builtin/rebase.c:1104
+#: builtin/rebase.c:1132
 msgid "add exec lines after each commit of the editable list"
 msgstr "düzenlenebilir listenin her işlemesinden sonra exec satırları ekle"
 
-#: builtin/rebase.c:1108
+#: builtin/rebase.c:1136
 msgid "allow rebasing commits with empty messages"
 msgstr "boş iletili işlemelerin yeniden temellendirilmesine izin ver"
 
-#: builtin/rebase.c:1112
+#: builtin/rebase.c:1140
 msgid "try to rebase merges instead of skipping them"
 msgstr "birleştirmeleri atlamak yerine onları yeniden temellendirmeyi dene"
 
-#: builtin/rebase.c:1115
+#: builtin/rebase.c:1143
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "üstkaynağı arılaştırmak için 'merge-base --fork-point' kullan"
 
-#: builtin/rebase.c:1117
+#: builtin/rebase.c:1145
 msgid "use the given merge strategy"
 msgstr "verilen birleştirme stratejisini kullan"
 
-#: builtin/rebase.c:1119 builtin/revert.c:115
+#: builtin/rebase.c:1147 builtin/revert.c:115
 msgid "option"
 msgstr "seçenek"
 
-#: builtin/rebase.c:1120
+#: builtin/rebase.c:1148
 msgid "pass the argument through to the merge strategy"
 msgstr "argümanı birleştirme stratejisine aktar"
 
-#: builtin/rebase.c:1123
+#: builtin/rebase.c:1151
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "ulaşılabilir tüm işlemeleri kök(ler)e kadar yeniden temellendir"
 
-#: builtin/rebase.c:1126
+#: builtin/rebase.c:1154
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "başarısız olan her 'exec'i kendiliğinden yeniden zamanla"
 
-#: builtin/rebase.c:1128
+#: builtin/rebase.c:1156
 msgid "apply all changes, even those already present upstream"
 msgstr "tüm değişiklikleri uygula, halihazırda üstkaynakta olanları bile"
 
-#: builtin/rebase.c:1149
+#: builtin/rebase.c:1177
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "Görünüşe göre 'git am' sürmekte. Yeniden temellendirilemiyor."
 
-#: builtin/rebase.c:1180
+#: builtin/rebase.c:1208
 msgid "--preserve-merges was replaced by --rebase-merges"
 msgstr "--preserve-merges, --rebase-merges olarak değiştirildi"
 
-#: builtin/rebase.c:1202
+#: builtin/rebase.c:1230
 msgid "No rebase in progress?"
 msgstr "Sürmekte olan bir yeniden temellendirme yok"
 
-#: builtin/rebase.c:1206
+#: builtin/rebase.c:1234
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr ""
 "--edit-todo seçeneği yalnızca etkileşimli yeniden temellendirme sırasında "
 "kullanılabilir."
 
-#: builtin/rebase.c:1229 t/helper/test-fast-rebase.c:122
+#: builtin/rebase.c:1257 t/helper/test-fast-rebase.c:122
 msgid "Cannot read HEAD"
 msgstr "HEAD okunamıyor"
 
-#: builtin/rebase.c:1241
+#: builtin/rebase.c:1269
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -20317,16 +20787,16 @@ msgstr ""
 "Önce tüm birleştirme çakışmalarını düzenlemeli ve onları\n"
 "git add kullanarak tamamlandı olarak imlemelisiniz."
 
-#: builtin/rebase.c:1260
+#: builtin/rebase.c:1287
 msgid "could not discard worktree changes"
 msgstr "çalışma ağacı değişiklikleri atılamadı"
 
-#: builtin/rebase.c:1279
+#: builtin/rebase.c:1308
 #, c-format
 msgid "could not move back to %s"
 msgstr "%s konumuna geri taşınamadı"
 
-#: builtin/rebase.c:1325
+#: builtin/rebase.c:1354
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -20347,124 +20817,119 @@ msgstr ""
 "yapın ve beni yeniden çalıştırın. Ben sizi belki orada hâlâ değerli bir\n"
 "şeyler olabilir diye durdurdum.\n"
 
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1382
 msgid "switch `C' expects a numerical value"
 msgstr "'C' anahtarı sayısal bir değer bekliyor"
 
-#: builtin/rebase.c:1395
+#: builtin/rebase.c:1424
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Bilinmeyen kip: %s"
 
-#: builtin/rebase.c:1434
+#: builtin/rebase.c:1463
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy, --merge veya --interactive gerektiriyor"
 
-#: builtin/rebase.c:1463
+#: builtin/rebase.c:1492
 msgid "apply options and merge options cannot be used together"
 msgstr "uygulama seçenekleri ve birleştirme seçenekleri birlikte kullanılamaz"
 
-#: builtin/rebase.c:1476
+#: builtin/rebase.c:1505
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "Bilinmeyen yeniden temellendirme arka ucu: %s"
 
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1534
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec, --exec veya --interactive gerektiriyor"
 
-#: builtin/rebase.c:1536
+#: builtin/rebase.c:1565
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "geçersiz üstkaynak '%s'"
 
-#: builtin/rebase.c:1542
+#: builtin/rebase.c:1571
 msgid "Could not create new root commit"
 msgstr "Yeni kök işleme oluşturulamadı"
 
-#: builtin/rebase.c:1568
+#: builtin/rebase.c:1597
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr "'%s': tam olarak dallı bir birleştirme temeli gerekli"
 
-#: builtin/rebase.c:1571
+#: builtin/rebase.c:1600
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "'%s': tam olarak bir birleştirme temeli gerekiyor"
 
-#: builtin/rebase.c:1580
+#: builtin/rebase.c:1609
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "'%s' geçerli bir işlemeye işaret etmiyor"
 
-#: builtin/rebase.c:1607
+#: builtin/rebase.c:1636
 #, c-format
 msgid "no such branch/commit '%s'"
 msgstr "böyle bir dal/işleme yok: '%s'"
 
-#: builtin/rebase.c:1618 builtin/submodule--helper.c:39
-#: builtin/submodule--helper.c:2659
+#: builtin/rebase.c:1647 builtin/submodule--helper.c:43
+#: builtin/submodule--helper.c:2477
 #, c-format
 msgid "No such ref: %s"
 msgstr "Böyle bir başvuru yok: %s"
 
-#: builtin/rebase.c:1629
+#: builtin/rebase.c:1658
 msgid "Could not resolve HEAD to a revision"
 msgstr "HEAD bir revizyona çözülemedi"
 
-#: builtin/rebase.c:1650
+#: builtin/rebase.c:1679
 msgid "Please commit or stash them."
 msgstr "Lütfen onları işleyin veya zulalayın."
 
-#: builtin/rebase.c:1686
-#, c-format
-msgid "could not switch to %s"
-msgstr "şuraya geçilemedi: %s"
-
-#: builtin/rebase.c:1697
+#: builtin/rebase.c:1714
 msgid "HEAD is up to date."
 msgstr "HEAD güncel."
 
-#: builtin/rebase.c:1699
+#: builtin/rebase.c:1716
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "Geçerli dal %s güncel.\n"
 
-#: builtin/rebase.c:1707
+#: builtin/rebase.c:1724
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD güncel, yeniden temellendirme zorla yapıldı."
 
-#: builtin/rebase.c:1709
+#: builtin/rebase.c:1726
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "Geçerli dal %s güncel, yeniden temellendirme zorla yapıldı.\n"
 
-#: builtin/rebase.c:1717
+#: builtin/rebase.c:1734
 msgid "The pre-rebase hook refused to rebase."
 msgstr "'pre-rebase' kancası yeniden temellendirmeyi reddetti."
 
-#: builtin/rebase.c:1724
+#: builtin/rebase.c:1741
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "%s için olan değişiklikler:\n"
 
-#: builtin/rebase.c:1727
+#: builtin/rebase.c:1744
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "%s -> %s değişiklikleri:\n"
 
-#: builtin/rebase.c:1752
+#: builtin/rebase.c:1769
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "Öncelikle dal ucu üzerindeki çalışmanızı yeniden oynatmak için geri "
 "sarılıyor...\n"
 
-#: builtin/rebase.c:1761
+#: builtin/rebase.c:1781
 msgid "Could not detach HEAD"
 msgstr "HEAD ayrılamadı"
 
-#: builtin/rebase.c:1770
+#: builtin/rebase.c:1790
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "%s, %s konumuna ileri sarıldı.\n"
@@ -20473,7 +20938,7 @@ msgstr "%s, %s konumuna ileri sarıldı.\n"
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack <git-dizini>"
 
-#: builtin/receive-pack.c:1275
+#: builtin/receive-pack.c:1263
 msgid ""
 "By default, updating the current branch in a non-bare repository\n"
 "is denied, because it will make the index and work tree inconsistent\n"
@@ -20501,7 +20966,7 @@ msgstr ""
 "'receive.denyCurrentBranch' yapılandırma değişkenini 'refuse'\n"
 "olarak ayarlayın."
 
-#: builtin/receive-pack.c:1295
+#: builtin/receive-pack.c:1283
 msgid ""
 "By default, deleting the current branch is denied, because the next\n"
 "'git clone' won't result in any file checked out, causing confusion.\n"
@@ -20523,79 +20988,113 @@ msgstr ""
 "\n"
 "Bu iletiyi susturmak için onu 'refuse' olarak ayarlayın."
 
-#: builtin/receive-pack.c:2474
+#: builtin/receive-pack.c:2476
 msgid "quiet"
 msgstr "sessiz"
 
-#: builtin/receive-pack.c:2489
+#: builtin/receive-pack.c:2491
 msgid "you must specify a directory"
 msgstr "bir dizin belirtmelisiniz"
 
-#: builtin/reflog.c:17
+#: builtin/reflog.c:9
+msgid "git reflog [show] [<log-options>] [<ref>]"
+msgstr "git reflog [show] [<günlük-seçenekleri>] [<başvuru>]"
+
+#: builtin/reflog.c:12
 msgid ""
-"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<refs>..."
+"git reflog expire [--expire=<time>] [--expire-unreachable=<time>]\n"
+"                  [--rewrite] [--updateref] [--stale-fix]\n"
+"                  [--dry-run | -n] [--verbose] [--all [--single-worktree] | "
+"<refs>...]"
 msgstr ""
-"git reflog expire [--expire=<zaman>] [--expire-unreachable=<zaman>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<başvurular>..."
+"git reflog expire [--expire=<zaman>] [--expire-unreachable=<zaman>]\n"
+"                  [--rewrite] [--updateref] [--stale-fix]\n"
+"                  [--dry-run | -n] [--verbose] [--all [--single-worktree] | "
+"<zaman>...]"
 
-#: builtin/reflog.c:22
+#: builtin/reflog.c:17
 msgid ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] "
-"<refs>..."
+"git reflog delete [--rewrite] [--updateref]\n"
+"                  [--dry-run | -n] [--verbose] <ref>@{<specifier>}..."
 msgstr ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] "
-"<başvurular>..."
+"git reflog delete [--rewrite] [--updateref]\n"
+"                  [--dry-run | -n] [--verbose] <başvuru>@{<belirteç>}..."
 
-#: builtin/reflog.c:25
+#: builtin/reflog.c:21
 msgid "git reflog exists <ref>"
 msgstr "git reflog exists <başvuru>"
 
-#: builtin/reflog.c:585 builtin/reflog.c:590
+#: builtin/reflog.c:197 builtin/reflog.c:211
 #, c-format
-msgid "'%s' is not a valid timestamp"
-msgstr "'%s' geçerli bir zaman damgası değil"
+msgid "invalid timestamp '%s' given to '--%s'"
+msgstr "geçersiz zaman damgası '%s', '--%s' argümanına verildi"
+
+#: builtin/reflog.c:240 builtin/reflog.c:359
+msgid "do not actually prune any entries"
+msgstr "özünde, hiçbir girdiyi budama"
+
+#: builtin/reflog.c:243 builtin/reflog.c:362
+msgid ""
+"rewrite the old SHA1 with the new SHA1 of the entry that now precedes it"
+msgstr ""
+"eski SHA-1'i, onun öncesinde gelen girdinin yeni SHA-1'i ile üzerine yaz"
+
+#: builtin/reflog.c:246 builtin/reflog.c:365
+msgid "update the reference to the value of the top reflog entry"
+msgstr "başvuruyu, en üst başvuru günlüğü girdisinin değerine güncelle"
+
+#: builtin/reflog.c:248 builtin/reflog.c:367
+msgid "print extra information on screen"
+msgstr "ekranda ek bilgi yazdır"
+
+#: builtin/reflog.c:249 builtin/reflog.c:253
+msgid "timestamp"
+msgstr "zaman damgası"
+
+#: builtin/reflog.c:250
+msgid "prune entries older than the specified time"
+msgstr "belirtilen zamandan daha eski girdileri buda"
+
+#: builtin/reflog.c:254
+msgid ""
+"prune entries older than <time> that are not reachable from the current tip "
+"of the branch"
+msgstr ""
+"dalın geçerli ucundan erişilemeyen ve <zaman>'dan daha eski girdileri buda"
+
+#: builtin/reflog.c:258
+msgid "prune any reflog entries that point to broken commits"
+msgstr "hatalı işlemelere işaret eden tüm başvuru günlüğü girdilerini buda"
+
+#: builtin/reflog.c:259
+msgid "process the reflogs of all references"
+msgstr "tüm başvuruların başvuru günlüklerini işle"
 
-#: builtin/reflog.c:631
+#: builtin/reflog.c:261
+msgid "limits processing to reflogs from the current worktree only"
+msgstr ""
+"başvuru günlüklerine işlemeyi yalnızca geçerli çalışma ağacına sınırlar"
+
+#: builtin/reflog.c:294
 #, c-format
 msgid "Marking reachable objects..."
 msgstr "Ulaşılabilir nesneler imleniyor..."
 
-#: builtin/reflog.c:675
+#: builtin/reflog.c:338
 #, c-format
 msgid "%s points nowhere!"
 msgstr "%s hiçbir yere işaret etmiyor!"
 
-#: builtin/reflog.c:731
+#: builtin/reflog.c:374
 msgid "no reflog specified to delete"
 msgstr "silmek için bir başvuru günlüğü belirtilmedi"
 
-#: builtin/reflog.c:742
-#, c-format
-msgid "not a reflog: %s"
-msgstr "bir başvuru günlüğü değil: %s"
-
-#: builtin/reflog.c:747
-#, c-format
-msgid "no reflog for '%s'"
-msgstr "'%s' için başvuru günlüğü yok"
-
-#: builtin/reflog.c:794
+#: builtin/reflog.c:396
 #, c-format
 msgid "invalid ref format: %s"
 msgstr "geçersiz başvuru biçimi: %s"
 
-#: builtin/reflog.c:803
-msgid "git reflog [ show | expire | delete | exists ]"
-msgstr "git reflog [ show | expire | delete | exists ]"
-
-#: builtin/remote.c:17
-msgid "git remote [-v | --verbose]"
-msgstr "git remote [-v | --verbose]"
-
-#: builtin/remote.c:18
+#: builtin/remote.c:19
 msgid ""
 "git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--"
 "mirror=<fetch|push>] <name> <url>"
@@ -20603,87 +21102,87 @@ msgstr ""
 "git remote add [-t <dal>] [-m <master>] [-f] [--tags | --no-tags] [--"
 "mirror=<getir|it>] <ad> <url>"
 
-#: builtin/remote.c:19 builtin/remote.c:39
-msgid "git remote rename <old> <new>"
-msgstr "git remote rename <eski> <yeni>"
+#: builtin/remote.c:20 builtin/remote.c:40
+msgid "git remote rename [--[no-]progress] <old> <new>"
+msgstr "git remote rename [--[no-]progress] <eski> <yeni>"
 
-#: builtin/remote.c:20 builtin/remote.c:44
+#: builtin/remote.c:21 builtin/remote.c:45
 msgid "git remote remove <name>"
 msgstr "git remote remove <ad>"
 
-#: builtin/remote.c:21 builtin/remote.c:49
+#: builtin/remote.c:22 builtin/remote.c:50
 msgid "git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"
 msgstr "git remote set-head <ad> (-a | --auto | -d | --delete | <dal>)"
 
-#: builtin/remote.c:22
+#: builtin/remote.c:23
 msgid "git remote [-v | --verbose] show [-n] <name>"
 msgstr "git remote [-v | --verbose] show [-n] <ad>"
 
-#: builtin/remote.c:23
+#: builtin/remote.c:24
 msgid "git remote prune [-n | --dry-run] <name>"
 msgstr "git remote prune [-n | --dry-run] <ad>"
 
-#: builtin/remote.c:24
+#: builtin/remote.c:25
 msgid ""
 "git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
 msgstr ""
 "git remote [-v | --verbose] update [-p | --prune] [(<grup> | <uzak-k>)...]"
 
-#: builtin/remote.c:25
+#: builtin/remote.c:26
 msgid "git remote set-branches [--add] <name> <branch>..."
 msgstr "git remote set-branches [--add] <ad> <dal>..."
 
-#: builtin/remote.c:26 builtin/remote.c:75
+#: builtin/remote.c:27 builtin/remote.c:76
 msgid "git remote get-url [--push] [--all] <name>"
 msgstr "git remote get-url [--push] [--all] <ad>"
 
-#: builtin/remote.c:27 builtin/remote.c:80
+#: builtin/remote.c:28 builtin/remote.c:81
 msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]"
 msgstr "git remote set-url [--push] <ad> <yeni-url> [<eski-url>]"
 
-#: builtin/remote.c:28 builtin/remote.c:81
+#: builtin/remote.c:29 builtin/remote.c:82
 msgid "git remote set-url --add <name> <newurl>"
 msgstr "git remote set-url --add <ad> <yeni-url>"
 
-#: builtin/remote.c:29 builtin/remote.c:82
+#: builtin/remote.c:30 builtin/remote.c:83
 msgid "git remote set-url --delete <name> <url>"
 msgstr "git remote set-url --delete <ad> <url>"
 
-#: builtin/remote.c:34
+#: builtin/remote.c:35
 msgid "git remote add [<options>] <name> <url>"
 msgstr "git remote add [<seçenekler>] <ad> <url>"
 
-#: builtin/remote.c:54
+#: builtin/remote.c:55
 msgid "git remote set-branches <name> <branch>..."
 msgstr "git remote set-branches <ad> <dal>..."
 
-#: builtin/remote.c:55
+#: builtin/remote.c:56
 msgid "git remote set-branches --add <name> <branch>..."
 msgstr "git remote set-branches --add <ad> <dal>..."
 
-#: builtin/remote.c:60
+#: builtin/remote.c:61
 msgid "git remote show [<options>] <name>"
 msgstr "git remote show [<seçenekler>] <ad>"
 
-#: builtin/remote.c:65
+#: builtin/remote.c:66
 msgid "git remote prune [<options>] <name>"
 msgstr "git remote prune [<seçenekler>] <ad>"
 
-#: builtin/remote.c:70
+#: builtin/remote.c:71
 msgid "git remote update [<options>] [<group> | <remote>]..."
 msgstr "git remote update [<seçenekler>] [<grup> | <uzak-konum>]..."
 
-#: builtin/remote.c:99
+#: builtin/remote.c:100
 #, c-format
 msgid "Updating %s"
 msgstr "%s güncelleniyor"
 
-#: builtin/remote.c:101
+#: builtin/remote.c:102
 #, c-format
 msgid "Could not fetch %s"
 msgstr "%s getirilemedi"
 
-#: builtin/remote.c:131
+#: builtin/remote.c:132
 msgid ""
 "--mirror is dangerous and deprecated; please\n"
 "\t use --mirror=fetch or --mirror=push instead"
@@ -20691,80 +21190,80 @@ msgstr ""
 "--mirror tehlikeli ve artık kullanılmamalı; lütfen\n"
 "\t yerine --mirror=fetch veya --mirror=push kullanın."
 
-#: builtin/remote.c:148
+#: builtin/remote.c:149
 #, c-format
 msgid "unknown mirror argument: %s"
 msgstr "bilinmeyen yansı argümanı: %s"
 
-#: builtin/remote.c:164
+#: builtin/remote.c:165
 msgid "fetch the remote branches"
 msgstr "uzak konum dallarını getir"
 
-#: builtin/remote.c:166
+#: builtin/remote.c:167
 msgid "import all tags and associated objects when fetching"
 msgstr "getirirken tüm etiketleri ve ilişkili nesneleri içe aktar"
 
-#: builtin/remote.c:169
+#: builtin/remote.c:170
 msgid "or do not fetch any tag at all (--no-tags)"
 msgstr "veya hiçbir etiketi getirme (--no-tags)"
 
-#: builtin/remote.c:171
+#: builtin/remote.c:172
 msgid "branch(es) to track"
 msgstr "izlenecek dal(lar)"
 
-#: builtin/remote.c:172
+#: builtin/remote.c:173
 msgid "master branch"
 msgstr "ana dal"
 
-#: builtin/remote.c:174
+#: builtin/remote.c:175
 msgid "set up remote as a mirror to push to or fetch from"
 msgstr ""
 "uzak konum deposunu ona itilecek veya ondan getirilecek bir yansı olarak "
 "ayarla"
 
-#: builtin/remote.c:186
+#: builtin/remote.c:187
 msgid "specifying a master branch makes no sense with --mirror"
 msgstr "--mirror ile bir ana dal belirtmek anlam ifade etmiyor"
 
-#: builtin/remote.c:188
+#: builtin/remote.c:189
 msgid "specifying branches to track makes sense only with fetch mirrors"
 msgstr ""
 "izlemek için dallar belirtmek yalnızca getirme yansılarıyla anlamifade ediyor"
 
-#: builtin/remote.c:195 builtin/remote.c:705
+#: builtin/remote.c:196 builtin/remote.c:716
 #, c-format
 msgid "remote %s already exists."
 msgstr "%s uzak konumu halihazırda var."
 
-#: builtin/remote.c:240
+#: builtin/remote.c:241
 #, c-format
 msgid "Could not setup master '%s'"
 msgstr "'%s' ana dalı ayarlanamadı"
 
-#: builtin/remote.c:322
+#: builtin/remote.c:323
 #, c-format
 msgid "unhandled branch.%s.rebase=%s; assuming 'true'"
 msgstr "ilgilenilmemiş branch.%s.rebase=%s, 'true' olduğu var sayılıyor"
 
-#: builtin/remote.c:366
+#: builtin/remote.c:367
 #, c-format
 msgid "Could not get fetch map for refspec %s"
 msgstr "%s başvuru belirteci için getirme haritası alınamadı"
 
-#: builtin/remote.c:460 builtin/remote.c:468
+#: builtin/remote.c:461 builtin/remote.c:469
 msgid "(matching)"
 msgstr "(eşleşiyor)"
 
-#: builtin/remote.c:472
+#: builtin/remote.c:473
 msgid "(delete)"
 msgstr "(sil)"
 
-#: builtin/remote.c:660
+#: builtin/remote.c:664
 #, c-format
 msgid "could not set '%s'"
 msgstr "'%s' ayarlanamadı"
 
-#: builtin/remote.c:665
+#: builtin/remote.c:669
 #, c-format
 msgid ""
 "The %s configuration remote.pushDefault in:\n"
@@ -20775,17 +21274,17 @@ msgstr ""
 "\t%s:%d\n"
 "artık var olmayan '%s' uzak konumunu adlandırıyor."
 
-#: builtin/remote.c:696 builtin/remote.c:841 builtin/remote.c:948
+#: builtin/remote.c:707 builtin/remote.c:866 builtin/remote.c:973
 #, c-format
 msgid "No such remote: '%s'"
 msgstr "Böyle bir uzak konum yok: '%s'"
 
-#: builtin/remote.c:715
+#: builtin/remote.c:726
 #, c-format
 msgid "Could not rename config section '%s' to '%s'"
 msgstr "'%s' yapılandırma bölümü '%s' olarak yeniden adlandırılamadı"
 
-#: builtin/remote.c:735
+#: builtin/remote.c:746
 #, c-format
 msgid ""
 "Not updating non-default fetch refspec\n"
@@ -20796,17 +21295,21 @@ msgstr ""
 "\t%s\n"
 "\tLütfen gerekirse yapılandırmayı el ile güncelleyin."
 
-#: builtin/remote.c:775
+#: builtin/remote.c:783
+msgid "Renaming remote references"
+msgstr "Uzak konum başvuruları yeniden adlandırılıyor"
+
+#: builtin/remote.c:794
 #, c-format
 msgid "deleting '%s' failed"
 msgstr "'%s' silinmesi başarısız"
 
-#: builtin/remote.c:809
+#: builtin/remote.c:832
 #, c-format
 msgid "creating '%s' failed"
 msgstr "'%s' oluşturulması başarısız"
 
-#: builtin/remote.c:887
+#: builtin/remote.c:912
 msgid ""
 "Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
 "to delete it, use:"
@@ -20820,120 +21323,120 @@ msgstr[1] ""
 "Not: refs/remotes hiyerarşisi dışındaki bazı dallar kaldırılmadı;\n"
 "onları silmek için şunu kullanın:"
 
-#: builtin/remote.c:901
+#: builtin/remote.c:926
 #, c-format
 msgid "Could not remove config section '%s'"
 msgstr "'%s' yapılandırsa bölümü kaldırılamadı"
 
-#: builtin/remote.c:1009
+#: builtin/remote.c:1034
 #, c-format
 msgid " new (next fetch will store in remotes/%s)"
 msgstr " yeni (bir sonraki getirme uzak konumlarda depolayacak/%s"
 
-#: builtin/remote.c:1012
+#: builtin/remote.c:1037
 msgid " tracked"
 msgstr " izlendi"
 
-#: builtin/remote.c:1014
+#: builtin/remote.c:1039
 msgid " stale (use 'git remote prune' to remove)"
 msgstr " eskimiş (kaldırmak için 'git remote prune' kullanın)"
 
-#: builtin/remote.c:1016
+#: builtin/remote.c:1041
 msgid " ???"
 msgstr " ???"
 
-#: builtin/remote.c:1057
+#: builtin/remote.c:1082
 #, c-format
 msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
 msgstr "geçersiz branch.%s.merge; birden çok dala yeniden temellendirilemiyor"
 
-#: builtin/remote.c:1066
+#: builtin/remote.c:1091
 #, c-format
 msgid "rebases interactively onto remote %s"
 msgstr "%s uzak konumuna etkileşimli olarak yeniden temellendirir"
 
-#: builtin/remote.c:1068
+#: builtin/remote.c:1093
 #, c-format
 msgid "rebases interactively (with merges) onto remote %s"
 msgstr ""
 "%s uzak konumuna etkileşimli olarak (birleştirmelerle birlikte) yeniden "
 "temellendirir"
 
-#: builtin/remote.c:1071
+#: builtin/remote.c:1096
 #, c-format
 msgid "rebases onto remote %s"
 msgstr "%s uzak konumuna yeniden temellendirir"
 
-#: builtin/remote.c:1075
+#: builtin/remote.c:1100
 #, c-format
 msgid " merges with remote %s"
 msgstr " %s uzak konumu ile birleştirir"
 
-#: builtin/remote.c:1078
+#: builtin/remote.c:1103
 #, c-format
 msgid "merges with remote %s"
 msgstr "%s uzak konumu ile birleştirir"
 
-#: builtin/remote.c:1081
+#: builtin/remote.c:1106
 #, c-format
 msgid "%-*s    and with remote %s\n"
 msgstr "%-*s    ve %s uzak konumu ile birlikte\n"
 
-#: builtin/remote.c:1124
+#: builtin/remote.c:1149
 msgid "create"
 msgstr "oluştur"
 
-#: builtin/remote.c:1127
+#: builtin/remote.c:1152
 msgid "delete"
 msgstr "sil"
 
-#: builtin/remote.c:1131
+#: builtin/remote.c:1156
 msgid "up to date"
 msgstr "güncel"
 
-#: builtin/remote.c:1134
+#: builtin/remote.c:1159
 msgid "fast-forwardable"
 msgstr "ileri sarılabilir"
 
-#: builtin/remote.c:1137
+#: builtin/remote.c:1162
 msgid "local out of date"
 msgstr "yerelin tarihi geçmiş"
 
-#: builtin/remote.c:1144
+#: builtin/remote.c:1169
 #, c-format
 msgid "    %-*s forces to %-*s (%s)"
 msgstr "    %-*s şuna zorluyor: %-*s (%s)"
 
-#: builtin/remote.c:1147
+#: builtin/remote.c:1172
 #, c-format
 msgid "    %-*s pushes to %-*s (%s)"
 msgstr "    %-*s şuna itiyor: %-*s (%s)"
 
-#: builtin/remote.c:1151
+#: builtin/remote.c:1176
 #, c-format
 msgid "    %-*s forces to %s"
 msgstr "    %-*s şuna zorluyor: %s"
 
-#: builtin/remote.c:1154
+#: builtin/remote.c:1179
 #, c-format
 msgid "    %-*s pushes to %s"
 msgstr "    %-*s şuna itiyor: %s"
 
-#: builtin/remote.c:1222
+#: builtin/remote.c:1247
 msgid "do not query remotes"
 msgstr "uzak konumları sorgulama"
 
-#: builtin/remote.c:1243
+#: builtin/remote.c:1268
 #, c-format
 msgid "* remote %s"
 msgstr "* uzak konum %s"
 
-#: builtin/remote.c:1244
+#: builtin/remote.c:1269
 #, c-format
 msgid "  Fetch URL: %s"
 msgstr "  URL'yi getir: %s"
 
-#: builtin/remote.c:1245 builtin/remote.c:1261 builtin/remote.c:1398
+#: builtin/remote.c:1270 builtin/remote.c:1286 builtin/remote.c:1423
 msgid "(no URL)"
 msgstr "(URL yok)"
 
@@ -20941,189 +21444,189 @@ msgstr "(URL yok)"
 #. with the one in " Fetch URL: %s"
 #. translation.
 #.
-#: builtin/remote.c:1259 builtin/remote.c:1261
+#: builtin/remote.c:1284 builtin/remote.c:1286
 #, c-format
 msgid "  Push  URL: %s"
 msgstr "     URL'yi it: %s"
 
-#: builtin/remote.c:1263 builtin/remote.c:1265 builtin/remote.c:1267
+#: builtin/remote.c:1288 builtin/remote.c:1290 builtin/remote.c:1292
 #, c-format
 msgid "  HEAD branch: %s"
 msgstr "     HEAD dalı: %s"
 
-#: builtin/remote.c:1263
+#: builtin/remote.c:1288
 msgid "(not queried)"
 msgstr "(sorgulanmadı"
 
-#: builtin/remote.c:1265
+#: builtin/remote.c:1290
 msgid "(unknown)"
 msgstr "(bilinmiyor)"
 
-#: builtin/remote.c:1269
+#: builtin/remote.c:1294
 #, c-format
 msgid ""
 "  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
 msgstr ""
 "  HEAD dalı (uzak konum HEAD'i belirsiz, aşağıdakilerden biri olabilir):\n"
 
-#: builtin/remote.c:1281
+#: builtin/remote.c:1306
 #, c-format
 msgid "  Remote branch:%s"
 msgid_plural "  Remote branches:%s"
 msgstr[0] "  Uzak dal:%s"
 msgstr[1] "  Uzak dallar:%s"
 
-#: builtin/remote.c:1284 builtin/remote.c:1310
+#: builtin/remote.c:1309 builtin/remote.c:1335
 msgid " (status not queried)"
 msgstr " (durum sorgulanmadı)"
 
-#: builtin/remote.c:1293
+#: builtin/remote.c:1318
 msgid "  Local branch configured for 'git pull':"
 msgid_plural "  Local branches configured for 'git pull':"
 msgstr[0] "  'git pull' için yapılandırılan yerel dal:"
 msgstr[1] "  'git pull' için yapılandırılan yerel dallar:"
 
-#: builtin/remote.c:1301
+#: builtin/remote.c:1326
 msgid "  Local refs will be mirrored by 'git push'"
 msgstr "  Yerel başvurular 'git pull' tarafından yansılanacak"
 
-#: builtin/remote.c:1307
+#: builtin/remote.c:1332
 #, c-format
 msgid "  Local ref configured for 'git push'%s:"
 msgid_plural "  Local refs configured for 'git push'%s:"
 msgstr[0] "  'git push'%s için yapılandırılan yerel başvuru:"
 msgstr[1] "  'git push'%s için yapılandırılan yerel başvurular:"
 
-#: builtin/remote.c:1328
+#: builtin/remote.c:1353
 msgid "set refs/remotes/<name>/HEAD according to remote"
 msgstr "refs/remotes/<ad>/HEAD'i uzak konuma göre ayarla"
 
-#: builtin/remote.c:1330
+#: builtin/remote.c:1355
 msgid "delete refs/remotes/<name>/HEAD"
 msgstr "refs/remotes/<ad>/HEAD'i sil"
 
-#: builtin/remote.c:1344
+#: builtin/remote.c:1369
 msgid "Cannot determine remote HEAD"
 msgstr "Uzak konum HEAD'i belirlenemiyor"
 
-#: builtin/remote.c:1346
+#: builtin/remote.c:1371
 msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
 msgstr "Birden çok uzak konum HEAD dalı. Lütfen birini açıkça seçin:"
 
-#: builtin/remote.c:1356
+#: builtin/remote.c:1381
 #, c-format
 msgid "Could not delete %s"
 msgstr "%s silinemedi"
 
-#: builtin/remote.c:1364
+#: builtin/remote.c:1389
 #, c-format
 msgid "Not a valid ref: %s"
 msgstr "Geçerli bir başvuru değil: %s"
 
-#: builtin/remote.c:1366
+#: builtin/remote.c:1391
 #, c-format
 msgid "Could not setup %s"
 msgstr "%s ayarlanamadı"
 
-#: builtin/remote.c:1384
+#: builtin/remote.c:1409
 #, c-format
 msgid " %s will become dangling!"
 msgstr " %s sarkacak!"
 
-#: builtin/remote.c:1385
+#: builtin/remote.c:1410
 #, c-format
 msgid " %s has become dangling!"
 msgstr " %s sarkmaya başladı!"
 
-#: builtin/remote.c:1394
+#: builtin/remote.c:1419
 #, c-format
 msgid "Pruning %s"
 msgstr "%s budanıyor"
 
-#: builtin/remote.c:1395
+#: builtin/remote.c:1420
 #, c-format
 msgid "URL: %s"
 msgstr "URL: %s"
 
-#: builtin/remote.c:1411
+#: builtin/remote.c:1436
 #, c-format
 msgid " * [would prune] %s"
 msgstr " * %s [budanacak]"
 
-#: builtin/remote.c:1414
+#: builtin/remote.c:1439
 #, c-format
 msgid " * [pruned] %s"
 msgstr " * %s [budandı]"
 
-#: builtin/remote.c:1459
+#: builtin/remote.c:1484
 msgid "prune remotes after fetching"
 msgstr "getirme sonrasında uzak konumları buda"
 
-#: builtin/remote.c:1523 builtin/remote.c:1579 builtin/remote.c:1649
+#: builtin/remote.c:1548 builtin/remote.c:1604 builtin/remote.c:1674
 #, c-format
 msgid "No such remote '%s'"
 msgstr "Böyle bir uzak konum yok '%s'"
 
-#: builtin/remote.c:1541
+#: builtin/remote.c:1566
 msgid "add branch"
 msgstr "dal ekle"
 
-#: builtin/remote.c:1548
+#: builtin/remote.c:1573
 msgid "no remote specified"
 msgstr "uzak konum belirtilmedi"
 
-#: builtin/remote.c:1565
+#: builtin/remote.c:1590
 msgid "query push URLs rather than fetch URLs"
 msgstr "itme URL'lerinden çok getirme URL'lerini sorgula"
 
-#: builtin/remote.c:1567
+#: builtin/remote.c:1592
 msgid "return all URLs"
 msgstr "tüm URL'leri döndür"
 
-#: builtin/remote.c:1597
+#: builtin/remote.c:1622
 #, c-format
 msgid "no URLs configured for remote '%s'"
 msgstr "'%s' uzak konumu için URL yapılandırılmamış"
 
-#: builtin/remote.c:1623
+#: builtin/remote.c:1648
 msgid "manipulate push URLs"
 msgstr "itme URL'lerini değiştir"
 
-#: builtin/remote.c:1625
+#: builtin/remote.c:1650
 msgid "add URL"
 msgstr "URL ekle"
 
-#: builtin/remote.c:1627
+#: builtin/remote.c:1652
 msgid "delete URLs"
 msgstr "URL'leri sil"
 
-#: builtin/remote.c:1634
+#: builtin/remote.c:1659
 msgid "--add --delete doesn't make sense"
 msgstr "--add --delete bir anlam ifade etmiyor"
 
-#: builtin/remote.c:1675
+#: builtin/remote.c:1700
 #, c-format
 msgid "Invalid old URL pattern: %s"
 msgstr "Geçersiz eski URL dizgisi: %s"
 
-#: builtin/remote.c:1683
+#: builtin/remote.c:1708
 #, c-format
 msgid "No such URL found: %s"
 msgstr "Böyle bir URL bulunamadı: %s"
 
-#: builtin/remote.c:1685
+#: builtin/remote.c:1710
 msgid "Will not delete all non-push URLs"
 msgstr "Tüm itme olmayan URL'ler silinmeyecek"
 
-#: builtin/remote.c:1702
+#: builtin/remote.c:1727
 msgid "be verbose; must be placed before a subcommand"
 msgstr "ayrıntılı anlat; bir altkomuttan önce yerleştirilmelidir"
 
-#: builtin/repack.c:28
+#: builtin/repack.c:29
 msgid "git repack [<options>]"
 msgstr "git repack [<seçenekler>]"
 
-#: builtin/repack.c:33
+#: builtin/repack.c:34
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -21132,145 +21635,145 @@ msgstr ""
 "--no-write-bitmap-index kullanın veya pack.writebitmaps\n"
 "yapılandırmasını devre dışı bırakın."
 
-#: builtin/repack.c:201
+#: builtin/repack.c:206
 msgid "could not start pack-objects to repack promisor objects"
 msgstr "vaatçi nesneleri yeniden paketleme için pack-objects başlatılamadı"
 
-#: builtin/repack.c:275 builtin/repack.c:820
+#: builtin/repack.c:280 builtin/repack.c:824
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 "repack: Onaltılı tam nesne no satırları yalnızca pack-objects'ten bekleniyor."
 
-#: builtin/repack.c:299
+#: builtin/repack.c:304
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr "vaatçi nesneleri yeniden paketleme için pack-objects bitirilemedi"
 
-#: builtin/repack.c:314
+#: builtin/repack.c:319
 #, c-format
 msgid "cannot open index for %s"
 msgstr "%s için indeks açılamıyor"
 
-#: builtin/repack.c:373
+#: builtin/repack.c:378
 #, c-format
 msgid "pack %s too large to consider in geometric progression"
 msgstr "%s paketi, geometrik ilerlemede kullanmayı düşünmek için pek büyük"
 
-#: builtin/repack.c:406 builtin/repack.c:413 builtin/repack.c:418
+#: builtin/repack.c:411 builtin/repack.c:418 builtin/repack.c:423
 #, c-format
 msgid "pack %s too large to roll up"
 msgstr "%s paketi, sarmak için pek büyük"
 
-#: builtin/repack.c:498
+#: builtin/repack.c:503
 #, c-format
 msgid "could not open tempfile %s for writing"
 msgstr "geçici dosya '%s', yazma için açılamadı"
 
-#: builtin/repack.c:516
+#: builtin/repack.c:521
 msgid "could not close refs snapshot tempfile"
 msgstr "başvurular anlık görüntü geçici dosyası kapatılamadı"
 
-#: builtin/repack.c:630
+#: builtin/repack.c:634
 msgid "pack everything in a single pack"
 msgstr "her şeyi tek bir pakete sığdır"
 
-#: builtin/repack.c:632
+#: builtin/repack.c:636
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "-a ile aynı ve ulaşılamayan nesneleri serbest bırakır"
 
-#: builtin/repack.c:635
+#: builtin/repack.c:639
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "gereksiz paketleri kaldır ve 'git-prune-packed' çalıştır"
 
-#: builtin/repack.c:637
+#: builtin/repack.c:641
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "'git-pack-objects'e --no-reuse-delta geçir"
 
-#: builtin/repack.c:639
+#: builtin/repack.c:643
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "'git-pack-objects'e --no-reuse-object geçir"
 
-#: builtin/repack.c:641
+#: builtin/repack.c:645
 msgid "do not run git-update-server-info"
 msgstr "'git-update-server-info' çalıştırma"
 
-#: builtin/repack.c:644
+#: builtin/repack.c:648
 msgid "pass --local to git-pack-objects"
 msgstr "--local'ı 'git-pack-objects'e geçir"
 
-#: builtin/repack.c:646
+#: builtin/repack.c:650
 msgid "write bitmap index"
 msgstr "biteşlem indeksi yaz"
 
-#: builtin/repack.c:648
+#: builtin/repack.c:652
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "--delta-islands'ı 'git-pack-objects'e geçir"
 
-#: builtin/repack.c:649
+#: builtin/repack.c:653
 msgid "approxidate"
 msgstr "yaklaşık tarih"
 
-#: builtin/repack.c:650
+#: builtin/repack.c:654
 msgid "with -A, do not loosen objects older than this"
 msgstr "-A ile, bundan daha eski nesneleri bırakma"
 
-#: builtin/repack.c:652
+#: builtin/repack.c:656
 msgid "with -a, repack unreachable objects"
 msgstr "-a ile, ulaşılamayan nesneleri yeniden paketle"
 
-#: builtin/repack.c:654
+#: builtin/repack.c:658
 msgid "size of the window used for delta compression"
 msgstr "delta sıkıştırması için kullanılan pencerenin boyutu"
 
-#: builtin/repack.c:655 builtin/repack.c:661
+#: builtin/repack.c:659 builtin/repack.c:665
 msgid "bytes"
 msgstr "baytlar"
 
-#: builtin/repack.c:656
+#: builtin/repack.c:660
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr "yukarıdakiyle aynı; ancak girdi sayısı yerine bellek boyutunu kısıtla"
 
-#: builtin/repack.c:658
+#: builtin/repack.c:662
 msgid "limits the maximum delta depth"
 msgstr "olabilecek en büyük delta derinliğini kısıtlar"
 
-#: builtin/repack.c:660
+#: builtin/repack.c:664
 msgid "limits the maximum number of threads"
 msgstr "iş parçacıklarının olabilecek en büyük sayısını kısıtlar"
 
-#: builtin/repack.c:662
+#: builtin/repack.c:666
 msgid "maximum size of each packfile"
 msgstr "her paket dosyasının olabilecek en büyük boyutu"
 
-#: builtin/repack.c:664
+#: builtin/repack.c:668
 msgid "repack objects in packs marked with .keep"
 msgstr "nesneleri .keep ile imlenmiş paketlerde yeniden paketle"
 
-#: builtin/repack.c:666
+#: builtin/repack.c:670
 msgid "do not repack this pack"
 msgstr "bu paketi yeniden paketleme"
 
-#: builtin/repack.c:668
+#: builtin/repack.c:672
 msgid "find a geometric progression with factor <N>"
 msgstr "<N> faktörlü bir geometrik ilerleme bul"
 
-#: builtin/repack.c:670
+#: builtin/repack.c:674
 msgid "write a multi-pack index of the resulting packs"
 msgstr "ortaya çıkan paketlerin bir çoklu paket indeksini yaz"
 
-#: builtin/repack.c:680
+#: builtin/repack.c:684
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "bir precious-objects deposundaki paketler silinemiyor"
 
-#: builtin/repack.c:829
+#: builtin/repack.c:833
 msgid "Nothing new to pack."
 msgstr "Paketlenecek yeni bir şey yok."
 
-#: builtin/repack.c:859
+#: builtin/repack.c:863
 #, c-format
 msgid "missing required file: %s"
 msgstr "gereken dosya eksik: %s"
 
-#: builtin/repack.c:861
+#: builtin/repack.c:865
 #, c-format
 msgid "could not unlink: %s"
 msgstr "bağlantı kaldırılamadı: %s"
@@ -21287,10 +21790,6 @@ msgstr "git replace [-f] --edit <nesne>"
 msgid "git replace [-f] --graft <commit> [<parent>...]"
 msgstr "git replace [-f] --graft <işleme> [<üst-öge>...]"
 
-#: builtin/replace.c:25
-msgid "git replace [-f] --convert-graft-file"
-msgstr "git replace [-f] --convert-graft-file"
-
 #: builtin/replace.c:26
 msgid "git replace -d <object>..."
 msgstr "git replace -d <nesne>..."
@@ -21592,98 +22091,95 @@ msgstr "%s ağacı bulunamadı."
 msgid "HEAD is now at %s"
 msgstr "HEAD şimdi şurada: %s"
 
-#: builtin/reset.c:299
+#: builtin/reset.c:304
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Bir birleştirmenin ortasında %s sıfırlaması yapılamıyor."
 
-#: builtin/reset.c:396 builtin/stash.c:606 builtin/stash.c:680
-#: builtin/stash.c:704
+#: builtin/reset.c:402 builtin/stash.c:606 builtin/stash.c:669
+#: builtin/stash.c:693
 msgid "be quiet, only report errors"
 msgstr "sessiz ol, yalnızca hataları bildir"
 
-#: builtin/reset.c:398
+#: builtin/reset.c:404
+msgid "skip refreshing the index after reset"
+msgstr "sıfırlama sonrası indeksi yenilemeyi atla"
+
+#: builtin/reset.c:406
 msgid "reset HEAD and index"
 msgstr "HEAD'i ve indeksi sıfırla"
 
-#: builtin/reset.c:399
+#: builtin/reset.c:407
 msgid "reset only HEAD"
 msgstr "yalnızca HEAD'i sıfırla"
 
-#: builtin/reset.c:401 builtin/reset.c:403
+#: builtin/reset.c:409 builtin/reset.c:411
 msgid "reset HEAD, index and working tree"
 msgstr "HEAD'i, indeksi ve çalışma ağacını sıfırla"
 
-#: builtin/reset.c:405
+#: builtin/reset.c:413
 msgid "reset HEAD but keep local changes"
 msgstr "HEAD'i sıfırla; ancak yerel değişiklikleri tut"
 
-#: builtin/reset.c:411
+#: builtin/reset.c:419
 msgid "record only the fact that removed paths will be added later"
 msgstr ""
 "yalnızca kaldırılan yolların daha sonra ekleneceği gerçeğinin kaydını yaz"
 
-#: builtin/reset.c:445
+#: builtin/reset.c:452
 #, c-format
 msgid "Failed to resolve '%s' as a valid revision."
 msgstr "'%s' geçerli bir revizyon olarak çözülemedi."
 
-#: builtin/reset.c:453
+#: builtin/reset.c:460
 #, c-format
 msgid "Failed to resolve '%s' as a valid tree."
 msgstr "'%s' geçerli bir ağaç olarak çözülemedi."
 
-#: builtin/reset.c:472
+#: builtin/reset.c:479
 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
 msgstr ""
 "belirtilmiş yol ile --mixed artık eski; yerine 'git reset -- <yollar>' "
 "kullanın."
 
-#: builtin/reset.c:474
+#: builtin/reset.c:481
 #, c-format
 msgid "Cannot do %s reset with paths."
 msgstr "Belirtilmiş yol varken %s sıfırlaması yapılamıyor."
 
-#: builtin/reset.c:489
+#: builtin/reset.c:496
 #, c-format
 msgid "%s reset is not allowed in a bare repository"
 msgstr "%s sıfırlamasına çıplak bir depoda izin verilmiyor"
 
-#: builtin/reset.c:520
+#: builtin/reset.c:527
 msgid "Unstaged changes after reset:"
 msgstr "Sıfırlama sonrasında hazırlanmamış değişiklikler:"
 
-#: builtin/reset.c:523
+#: builtin/reset.c:530
 #, c-format
 msgid ""
-"\n"
-"It took %.2f seconds to enumerate unstaged changes after reset.  You can\n"
-"use '--quiet' to avoid this.  Set the config setting reset.quiet to true\n"
-"to make this the default.\n"
+"It took %.2f seconds to refresh the index after reset.  You can use\n"
+"'--no-refresh' to avoid this."
 msgstr ""
-"\n"
-"Sıfırlama sonrasında hazırlanmamış değişiklikleri ortaya dökme %.2f saniye\n"
-"sürdü. Bundan kaçınmak için --quiet kullanabilir, öntanımlı yapmak içinse\n"
-"reset.quiet yapılandırma değişkenini 'true' olarak değiştirebilirsiniz.\n"
+"Sıfırlamadan sonra indeksi yenilemek %.2f saniye sürdü. Bundan kaçınmak "
+"için\n"
+"'--no-refresh' kullanabilirsiniz."
 
-#: builtin/reset.c:541
+#: builtin/reset.c:547
 #, c-format
 msgid "Could not reset index file to revision '%s'."
 msgstr "İndeks dosyası '%s' revizyonuna sıfırlanamadı."
 
-#: builtin/reset.c:546
+#: builtin/reset.c:552
 msgid "Could not write new index file."
 msgstr "Yeni indeks dosyası yazılamadı."
 
-#: builtin/rev-list.c:602
-msgid "object filtering requires --objects"
-msgstr "nesne süzme --objects gerektiriyor"
-
-#: builtin/rev-list.c:674
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr "rev-list not görüntülemesini desteklemiyor"
 
-#: builtin/rev-list.c:679
+#: builtin/rev-list.c:664
 #, c-format
 msgid "marked counting and '%s' cannot be used together"
 msgstr "imli sayım ve '%s' birlikte kullanılamaz"
@@ -22031,11 +22527,11 @@ msgstr "alan"
 msgid "group by field"
 msgstr "alan ile grupla"
 
-#: builtin/shortlog.c:394
+#: builtin/shortlog.c:395
 msgid "too many arguments given outside repository"
 msgstr "depo dışında çok fazla argüman verildi"
 
-#: builtin/show-branch.c:13
+#: builtin/show-branch.c:14
 msgid ""
 "git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
 "                [--current] [--color[=<when>] | --no-color] [--sparse]\n"
@@ -22047,119 +22543,119 @@ msgstr ""
 "                [--more=<n> | --list | --independent | --merge-base]\n"
 "                [--no-name | --sha1-name] [--topics] [(<bşvr> | <glob>)...]"
 
-#: builtin/show-branch.c:17
+#: builtin/show-branch.c:18
 msgid "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"
 msgstr "git show-branch (-g | --reflog)[=<n>[,<temel>]] [--list] [<başvuru>]"
 
-#: builtin/show-branch.c:395
+#: builtin/show-branch.c:396
 #, c-format
 msgid "ignoring %s; cannot handle more than %d ref"
 msgid_plural "ignoring %s; cannot handle more than %d refs"
 msgstr[0] "%s yok sayılıyor; %d başvurudan fazlası ele alınamıyor"
 msgstr[1] "%s yok sayılıyor; %d başvurudan fazlası ele alınamıyor"
 
-#: builtin/show-branch.c:547
+#: builtin/show-branch.c:548
 #, c-format
 msgid "no matching refs with %s"
 msgstr "%s ile eşleşen başvuru yok"
 
-#: builtin/show-branch.c:644
+#: builtin/show-branch.c:645
 msgid "show remote-tracking and local branches"
 msgstr "uzak izleme dallarını ve yerel dalları göster"
 
-#: builtin/show-branch.c:646
+#: builtin/show-branch.c:647
 msgid "show remote-tracking branches"
 msgstr "uzak izleme dallarını göster"
 
-#: builtin/show-branch.c:648
+#: builtin/show-branch.c:649
 msgid "color '*!+-' corresponding to the branch"
 msgstr "'*!+-'i dala göre renklendir"
 
-#: builtin/show-branch.c:650
+#: builtin/show-branch.c:651
 msgid "show <n> more commits after the common ancestor"
 msgstr "ortak atadan sonra <n> işleme daha göster"
 
-#: builtin/show-branch.c:652
+#: builtin/show-branch.c:653
 msgid "synonym to more=-1"
 msgstr "more=-+ eşanlamlısı"
 
-#: builtin/show-branch.c:653
+#: builtin/show-branch.c:654
 msgid "suppress naming strings"
 msgstr "adlandırma dizilerini gizle"
 
-#: builtin/show-branch.c:655
+#: builtin/show-branch.c:656
 msgid "include the current branch"
 msgstr "geçerli dalı içer"
 
-#: builtin/show-branch.c:657
+#: builtin/show-branch.c:658
 msgid "name commits with their object names"
 msgstr "işlemeleri kendi nesne adlarıyla adlandır"
 
-#: builtin/show-branch.c:659
+#: builtin/show-branch.c:660
 msgid "show possible merge bases"
 msgstr "olası birleştirme temellerini göster"
 
-#: builtin/show-branch.c:661
+#: builtin/show-branch.c:662
 msgid "show refs unreachable from any other ref"
 msgstr "başka başvurudan erişilemeyen başvuruları göster"
 
-#: builtin/show-branch.c:663
+#: builtin/show-branch.c:664
 msgid "show commits in topological order"
 msgstr "işlemeleri ilingesel sırada göster"
 
-#: builtin/show-branch.c:666
+#: builtin/show-branch.c:667
 msgid "show only commits not on the first branch"
 msgstr "yalnızca birinci dalda olmayan işlemeleri göster"
 
-#: builtin/show-branch.c:668
+#: builtin/show-branch.c:669
 msgid "show merges reachable from only one tip"
 msgstr "yalnızca bir uçtan ulaşılabilir olan birleştirmeleri göster"
 
-#: builtin/show-branch.c:670
+#: builtin/show-branch.c:671
 msgid "topologically sort, maintaining date order where possible"
 msgstr "olabildiğince tarih sırasını koruyarak ilingesel biçimde sırala"
 
-#: builtin/show-branch.c:673
+#: builtin/show-branch.c:674
 msgid "<n>[,<base>]"
 msgstr "<n>[,<temel>]"
 
-#: builtin/show-branch.c:674
+#: builtin/show-branch.c:675
 msgid "show <n> most recent ref-log entries starting at base"
 msgstr "tabanda başlayarak en yeni <n> başvuru günlüğü girdilerini göster"
 
-#: builtin/show-branch.c:734
+#: builtin/show-branch.c:735
 msgid "no branches given, and HEAD is not valid"
 msgstr "dal verilmedi ve HEAD geçersiz"
 
-#: builtin/show-branch.c:737
+#: builtin/show-branch.c:738
 msgid "--reflog option needs one branch name"
 msgstr "--reflog seçeneği için bir dal adı gerekli"
 
-#: builtin/show-branch.c:740
+#: builtin/show-branch.c:741
 #, c-format
 msgid "only %d entry can be shown at one time."
 msgid_plural "only %d entries can be shown at one time."
-msgstr[0] "aynı anda yalnızca %d girdi gösterilebilir"
-msgstr[1] "aynı anda yalnızca %d girdi gösterilebilir"
+msgstr[0] "Aynı anda yalnızca %d girdi gösterilebilir."
+msgstr[1] "Aynı anda yalnızca %d girdi gösterilebilir."
 
-#: builtin/show-branch.c:744
+#: builtin/show-branch.c:745
 #, c-format
 msgid "no such ref %s"
 msgstr "böyle bir başvuru yok: %s"
 
-#: builtin/show-branch.c:830
+#: builtin/show-branch.c:831
 #, c-format
 msgid "cannot handle more than %d rev."
 msgid_plural "cannot handle more than %d revs."
 msgstr[0] "%d revizyondan başkası ele alınamıyor."
 msgstr[1] "%d revizyondan başkası ele alınamıyor."
 
-#: builtin/show-branch.c:834
+#: builtin/show-branch.c:835
 #, c-format
 msgid "'%s' is not a valid ref."
 msgstr "'%s' geçerli bir başvuru değil."
 
-#: builtin/show-branch.c:837
+#: builtin/show-branch.c:838
 #, c-format
 msgid "cannot find commit %s (%s)"
 msgstr "%s işlemesi bulunamıyor (%s)"
@@ -22216,24 +22712,20 @@ msgstr "sonuçları stdout'a yazdırma (--verify ile birlikte kullanışlı)"
 msgid "show refs from stdin that aren't in local repository"
 msgstr "stdin'den yerel bir depoda olmayan başvuruları göster"
 
-#: builtin/sparse-checkout.c:22
+#: builtin/sparse-checkout.c:23
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr "git sparse-checkout (init|list|set|add|reapply|disable) <seçenekler>"
 
-#: builtin/sparse-checkout.c:46
-msgid "git sparse-checkout list"
-msgstr "git sparse-checkout list"
-
-#: builtin/sparse-checkout.c:60
+#: builtin/sparse-checkout.c:61
 msgid "this worktree is not sparse"
 msgstr "bu çalışma ağacı aralıklı değil"
 
-#: builtin/sparse-checkout.c:75
+#: builtin/sparse-checkout.c:76
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr ""
 "bu çalışma ağacı aralıklı değil (sparse-checkout dosyası var olmayabilir)"
 
-#: builtin/sparse-checkout.c:176
+#: builtin/sparse-checkout.c:177
 #, c-format
 msgid ""
 "directory '%s' contains untracked files, but is not in the sparse-checkout "
@@ -22242,99 +22734,130 @@ msgstr ""
 "'%s' dizini izlenmeyen dosyalar içeriyor; ancak aralıklı çıkış konisinde "
 "değil"
 
-#: builtin/sparse-checkout.c:184
+#: builtin/sparse-checkout.c:185
 #, c-format
 msgid "failed to remove directory '%s'"
 msgstr "'%s' dizini kaldırılamadı"
 
-#: builtin/sparse-checkout.c:324
+#: builtin/sparse-checkout.c:327
 msgid "failed to create directory for sparse-checkout file"
 msgstr "aralıklı çıkış dosyası için dizin oluşturulamadı"
 
-#: builtin/sparse-checkout.c:365
-msgid "unable to upgrade repository format to enable worktreeConfig"
-msgstr "depo biçimi worktreeConfig etkinleştirmesi için yükseltilemiyor"
-
-#: builtin/sparse-checkout.c:367
-msgid "failed to set extensions.worktreeConfig setting"
-msgstr "extensions.worktreeConfig yapılandırması ayarlanamadı"
+#: builtin/sparse-checkout.c:366
+msgid "failed to initialize worktree config"
+msgstr "çalışma ağacı yapılandırması ilklendirilemedi"
 
 #: builtin/sparse-checkout.c:411
 msgid "failed to modify sparse-index config"
 msgstr "sparse-index yapılandırması değiştirilemedi"
 
-#: builtin/sparse-checkout.c:422
-msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
-msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
-
-#: builtin/sparse-checkout.c:441 builtin/sparse-checkout.c:729
-#: builtin/sparse-checkout.c:778
+#: builtin/sparse-checkout.c:441 builtin/sparse-checkout.c:793
+#: builtin/sparse-checkout.c:847
 msgid "initialize the sparse-checkout in cone mode"
 msgstr "aralıklı çıkışı koni kipinde ilklendir"
 
-#: builtin/sparse-checkout.c:443 builtin/sparse-checkout.c:731
-#: builtin/sparse-checkout.c:780
+#: builtin/sparse-checkout.c:443 builtin/sparse-checkout.c:795
+#: builtin/sparse-checkout.c:849
 msgid "toggle the use of a sparse index"
 msgstr "bir aralıklı indeksin kullanımını aç/kapat"
 
-#: builtin/sparse-checkout.c:476
+#: builtin/sparse-checkout.c:479
 #, c-format
 msgid "failed to open '%s'"
 msgstr "'%s' açılamadı"
 
-#: builtin/sparse-checkout.c:528
+#: builtin/sparse-checkout.c:531
 #, c-format
 msgid "could not normalize path %s"
 msgstr "'%s' yolu olağanlaştırılamadı"
 
-#: builtin/sparse-checkout.c:557
+#: builtin/sparse-checkout.c:560
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr "C biçemli '%s' dizisinin tırnakları kaldırılamıyor"
 
-#: builtin/sparse-checkout.c:612 builtin/sparse-checkout.c:640
+#: builtin/sparse-checkout.c:615 builtin/sparse-checkout.c:643
 msgid "unable to load existing sparse-checkout patterns"
 msgstr "mevcut aralıklı çıkış dizgileri yüklenemiyor"
 
-#: builtin/sparse-checkout.c:616
+#: builtin/sparse-checkout.c:619
 msgid "existing sparse-checkout patterns do not use cone mode"
 msgstr "mevcut aralıklı çıkış dizgileri koni kipini kullanmıyor"
 
-#: builtin/sparse-checkout.c:682
-msgid "git sparse-checkout add (--stdin | <patterns>)"
-msgstr "git sparse-checkout add (--stdin | <dizgiler>)"
+#: builtin/sparse-checkout.c:707
+msgid "please run from the toplevel directory in non-cone mode"
+msgstr "koni dışı kipte en üst düzey dizinden çalıştırın"
+
+#: builtin/sparse-checkout.c:712
+msgid "specify directories rather than patterns (no leading slash)"
+msgstr "dizgiler yerine dizinleri belirt (önünde eğik çizgi yok)"
+
+#: builtin/sparse-checkout.c:714
+msgid ""
+"specify directories rather than patterns.  If your directory starts with a "
+"'!', pass --skip-checks"
+msgstr ""
+"dizgiler yerine dizinleri belirt; dizininiz bir '!' ile başlıyorsa --skip-"
+"checks'i geç"
+
+#: builtin/sparse-checkout.c:716
+msgid ""
+"specify directories rather than patterns.  If your directory really has any "
+"of '*?[]\\' in it, pass --skip-checks"
+msgstr ""
+"dizgiler yerine dizinleri belirt; dizininizin içinde '*?[[\\' varsa --skip-"
+"checks'i geç"
+
+#: builtin/sparse-checkout.c:732
+#, c-format
+msgid ""
+"'%s' is not a directory; to treat it as a directory anyway, rerun with --"
+"skip-checks"
+msgstr ""
+"%s, bir dizin değil; yine de bir dizinmiş gibi davranmak için --skip-checks "
+"ile yeniden çalıştır"
+
+#: builtin/sparse-checkout.c:734
+#, c-format
+msgid ""
+"pass a leading slash before paths such as '%s' if you want a single file "
+"(see NON-CONE PROBLEMS in the git-sparse-checkout manual)."
+msgstr ""
+"Tek bir dosya istiyorsanız yollardan önce bir eğik çizgi geçirin ('%s' gibi) "
+"git-sparse-checkout kılavuzunda NON-CONE PROBLEMS'a bakın)."
+
+#: builtin/sparse-checkout.c:739
+msgid "git sparse-checkout add [--skip-checks] (--stdin | <patterns>)"
+msgstr "git sparse-checkout add [--skip-checks] (--stdin | <dizgiler>)"
+
+#: builtin/sparse-checkout.c:752 builtin/sparse-checkout.c:797
+msgid ""
+"skip some sanity checks on the given paths that might give false positives"
+msgstr "yanlış pozitif verebilen yollarda düzgünlük denetimlerini atla"
 
-#: builtin/sparse-checkout.c:694 builtin/sparse-checkout.c:733
+#: builtin/sparse-checkout.c:755 builtin/sparse-checkout.c:800
 msgid "read patterns from standard in"
 msgstr "dizgileri stdin'den oku"
 
-#: builtin/sparse-checkout.c:699
+#: builtin/sparse-checkout.c:760
 msgid "no sparse-checkout to add to"
 msgstr "kendisine eklenecek bir aralıklı çıkış yok"
 
-#: builtin/sparse-checkout.c:712
+#: builtin/sparse-checkout.c:775
 msgid ""
-"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] (--stdin | "
-"<patterns>)"
+"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] "
+"(--stdin | <patterns>)"
 msgstr ""
-"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] (--stdin | "
-"<dizgiler>)"
-
-#: builtin/sparse-checkout.c:765
-msgid "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
-msgstr "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
+"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] "
+"(--stdin | <dizgiler>)"
 
-#: builtin/sparse-checkout.c:785
+#: builtin/sparse-checkout.c:854
 msgid "must be in a sparse-checkout to reapply sparsity patterns"
 msgstr ""
 "aralıklılık dizgilerinin yeniden uygulanması için bir aralıklı çıkış içinde "
 "olmalı"
 
-#: builtin/sparse-checkout.c:803
-msgid "git sparse-checkout disable"
-msgstr "git sparse-checkout disable"
-
-#: builtin/sparse-checkout.c:845
+#: builtin/sparse-checkout.c:914
 msgid "error while refreshing working directory"
 msgstr "çalışma dizini yenilenirken hata"
 
@@ -22477,167 +23000,151 @@ msgstr "İndeks zuladan çıkartılmamıştı."
 msgid "could not restore untracked files from stash"
 msgstr "izlenmeyen dosyalar zuladan geri getirilemedi"
 
-#: builtin/stash.c:608 builtin/stash.c:706
+#: builtin/stash.c:608 builtin/stash.c:695
 msgid "attempt to recreate the index"
 msgstr "indeks yeniden oluşturulmaya çalışılıyor"
 
-#: builtin/stash.c:652
+#: builtin/stash.c:641
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "%s bırakıldı (%s)"
 
-#: builtin/stash.c:655
+#: builtin/stash.c:644
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s: Zula girdisi bırakılamadı"
 
-#: builtin/stash.c:668
+#: builtin/stash.c:657
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "'%s' bir zula başvurusu değil"
 
-#: builtin/stash.c:718
+#: builtin/stash.c:707
 msgid "The stash entry is kept in case you need it again."
 msgstr "Zula girdisi yeniden gereksiniminiz olursa diye saklanıyor."
 
-#: builtin/stash.c:741
+#: builtin/stash.c:730
 msgid "No branch name specified"
 msgstr "Dal adı belirtilmedi"
 
-#: builtin/stash.c:825
+#: builtin/stash.c:809
 msgid "failed to parse tree"
 msgstr "ağaç ayrıştırılamadı"
 
-#: builtin/stash.c:836
+#: builtin/stash.c:820
 msgid "failed to unpack trees"
 msgstr "ağaçların paketi açılamadı"
 
-#: builtin/stash.c:856
+#: builtin/stash.c:840
 msgid "include untracked files in the stash"
 msgstr "zulada izlenmeyen dosyaları içer"
 
-#: builtin/stash.c:859
+#: builtin/stash.c:843
 msgid "only show untracked files in the stash"
 msgstr "zulada yalnızca izlenmeyen dosyaları göster"
 
-#: builtin/stash.c:946 builtin/stash.c:983
+#: builtin/stash.c:930 builtin/stash.c:967
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "%s, %s ile güncellenemiyor"
 
-#: builtin/stash.c:964 builtin/stash.c:1678 builtin/stash.c:1750
+#: builtin/stash.c:948 builtin/stash.c:1667 builtin/stash.c:1739
 msgid "stash message"
 msgstr "zula iletisi"
 
-#: builtin/stash.c:974
+#: builtin/stash.c:958
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" bir <işleme> argümanı gerektirir"
 
-#: builtin/stash.c:1159
+#: builtin/stash.c:1143
 msgid "No staged changes"
 msgstr "Hazırlanan değişiklik yok"
 
-#: builtin/stash.c:1220
+#: builtin/stash.c:1204
 msgid "No changes selected"
 msgstr "Değişiklik seçilmedi"
 
-#: builtin/stash.c:1320
+#: builtin/stash.c:1304
 msgid "You do not have the initial commit yet"
 msgstr "Henüz ilk işleme yapılmamış"
 
-#: builtin/stash.c:1347
+#: builtin/stash.c:1331
 msgid "Cannot save the current index state"
 msgstr "Geçerli indeks durumu kaydedilemiyor"
 
-#: builtin/stash.c:1356
+#: builtin/stash.c:1340
 msgid "Cannot save the untracked files"
 msgstr "İzlenmeyen dosyalar kaydedilemiyor"
 
-#: builtin/stash.c:1367 builtin/stash.c:1386
+#: builtin/stash.c:1351 builtin/stash.c:1370
 msgid "Cannot save the current worktree state"
 msgstr "Geçerli çalışma ağacı durumu kaydedilemiyor"
 
-#: builtin/stash.c:1377
+#: builtin/stash.c:1361
 msgid "Cannot save the current staged state"
 msgstr "Geçerli hazırlananlar durumu kaydedilemiyor"
 
-#: builtin/stash.c:1414
+#: builtin/stash.c:1398
 msgid "Cannot record working tree state"
 msgstr "Çalışma ağacı durumu kaydı yazılamıyor"
 
-#: builtin/stash.c:1463
+#: builtin/stash.c:1447
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr "--patch, --include-untracked veya --all hepsi bir anda kullanılamıyor"
 
-#: builtin/stash.c:1474
+#: builtin/stash.c:1458
 msgid "Can't use --staged and --include-untracked or --all at the same time"
 msgstr "--staged, --include-untracked veya --all hepsi bir anda kullanılamıyor"
 
-#: builtin/stash.c:1492
+#: builtin/stash.c:1476
 msgid "Did you forget to 'git add'?"
 msgstr "'git add' yapmayı mı unuttunuz?"
 
-#: builtin/stash.c:1507
+#: builtin/stash.c:1491
 msgid "No local changes to save"
 msgstr "Kaydedilecek yerel değişiklik yok"
 
-#: builtin/stash.c:1514
+#: builtin/stash.c:1498
 msgid "Cannot initialize stash"
 msgstr "Zula ilklendirilemiyor"
 
-#: builtin/stash.c:1529
+#: builtin/stash.c:1513
 msgid "Cannot save the current status"
 msgstr "Geçerli durum kaydedilemiyor"
 
-#: builtin/stash.c:1534
+#: builtin/stash.c:1518
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Çalışma dizini ve indeks durumu %s kaydedildi"
 
-#: builtin/stash.c:1627
+#: builtin/stash.c:1615
 msgid "Cannot remove worktree changes"
 msgstr "Çalışma ağacı değişiklikleri kaldırılamıyor"
 
-#: builtin/stash.c:1667 builtin/stash.c:1739
+#: builtin/stash.c:1656 builtin/stash.c:1728
 msgid "keep index"
 msgstr "indeksi tut"
 
-#: builtin/stash.c:1669 builtin/stash.c:1741
+#: builtin/stash.c:1658 builtin/stash.c:1730
 msgid "stash staged changes only"
 msgstr "yalnızca hazırlanan değişiklikleri zulala"
 
-#: builtin/stash.c:1671 builtin/stash.c:1743
+#: builtin/stash.c:1660 builtin/stash.c:1732
 msgid "stash in patch mode"
 msgstr "yama kipinde zula"
 
-#: builtin/stash.c:1672 builtin/stash.c:1744
+#: builtin/stash.c:1661 builtin/stash.c:1733
 msgid "quiet mode"
 msgstr "sessiz kip"
 
-#: builtin/stash.c:1674 builtin/stash.c:1746
+#: builtin/stash.c:1663 builtin/stash.c:1735
 msgid "include untracked files in stash"
 msgstr "zulada izlenmeyen dosyaları içer"
 
-#: builtin/stash.c:1676 builtin/stash.c:1748
+#: builtin/stash.c:1665 builtin/stash.c:1737
 msgid "include ignore files"
 msgstr "yok sayma dosyalarını içer"
 
-#: builtin/stash.c:1783
-msgid ""
-"the stash.useBuiltin support has been removed!\n"
-"See its entry in 'git help config' for details."
-msgstr ""
-"stash.useBuiltin desteği kaldırıldı!\n"
-"Ayrıntılar için 'git help config' içindeki girdisine bakın."
-
-#: builtin/stripspace.c:18
-msgid "git stripspace [-s | --strip-comments]"
-msgstr "git stripspace [-s | --strip-comments]"
-
-#: builtin/stripspace.c:19
-msgid "git stripspace [-c | --comment-lines]"
-msgstr "git stripspace [-c | --comment-lines]"
-
 #: builtin/stripspace.c:37
 msgid "skip and remove all lines starting with comment character"
 msgstr "yorum karakteri ile başlayan tüm satırları atla ve kaldır"
@@ -22646,21 +23153,17 @@ msgstr "yorum karakteri ile başlayan tüm satırları atla ve kaldır"
 msgid "prepend comment character and space to each line"
 msgstr "her satırın başına yorum karakteri ve boşluk koy"
 
-#: builtin/submodule--helper.c:46 builtin/submodule--helper.c:2668
+#: builtin/submodule--helper.c:50 builtin/submodule--helper.c:2486
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "Tam bir başvuru adı bekleniyordu, %s alındı"
 
-#: builtin/submodule--helper.c:63
-msgid "submodule--helper print-default-remote takes no arguments"
-msgstr "submodule--helper print-default-remote argümanı almaz"
-
-#: builtin/submodule--helper.c:101
+#: builtin/submodule--helper.c:103
 #, c-format
 msgid "cannot strip one component off url '%s'"
 msgstr "'%s' url'sinden bir bileşen çıkarılamıyor"
 
-#: builtin/submodule--helper.c:211
+#: builtin/submodule--helper.c:213
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
@@ -22669,26 +23172,26 @@ msgstr ""
 "'%s' yapılandırması aranamadı. Bu deponun kendi yetkili üstkaynağı olduğu "
 "varsayılıyor."
 
-#: builtin/submodule--helper.c:405 builtin/submodule--helper.c:1859
+#: builtin/submodule--helper.c:413 builtin/submodule--helper.c:1873
 msgid "alternative anchor for relative paths"
 msgstr "göreceli yollar için alternatif tutturucu"
 
-#: builtin/submodule--helper.c:410
+#: builtin/submodule--helper.c:418
 msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper list [--prefix=<yol>] [<yol>...]"
 
-#: builtin/submodule--helper.c:468 builtin/submodule--helper.c:605
-#: builtin/submodule--helper.c:628
+#: builtin/submodule--helper.c:476 builtin/submodule--helper.c:617
+#: builtin/submodule--helper.c:640
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr ".gitmodules içinde '%s' altmodül yolu için url bulunamadı"
 
-#: builtin/submodule--helper.c:520
+#: builtin/submodule--helper.c:528
 #, c-format
 msgid "Entering '%s'\n"
 msgstr "Giriliyor: '%s'\n"
 
-#: builtin/submodule--helper.c:523
+#: builtin/submodule--helper.c:531
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
@@ -22697,7 +23200,7 @@ msgstr ""
 "run_command, %s için sıfır olmayan durum döndürdü\n"
 "."
 
-#: builtin/submodule--helper.c:545
+#: builtin/submodule--helper.c:553
 #, c-format
 msgid ""
 "run_command returned non-zero status while recursing in the nested "
@@ -22707,67 +23210,67 @@ msgstr ""
 "run_command, %s ögesinin iç içe geçmiş altmodülleri içinde özyinelerken "
 "sıfır olmayan durum döndürdü."
 
-#: builtin/submodule--helper.c:561
+#: builtin/submodule--helper.c:569
 msgid "suppress output of entering each submodule command"
 msgstr "her bir altmodül komutu girişinin çıktısını gizle"
 
-#: builtin/submodule--helper.c:563 builtin/submodule--helper.c:864
-#: builtin/submodule--helper.c:1453
+#: builtin/submodule--helper.c:571 builtin/submodule--helper.c:876
+#: builtin/submodule--helper.c:1458
 msgid "recurse into nested submodules"
 msgstr "iç içe geçmiş altmodüle özyinele"
 
-#: builtin/submodule--helper.c:568
+#: builtin/submodule--helper.c:576
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr "git submodule--helper foreach [--quiet] [--recursive] [--] <komut>"
 
-#: builtin/submodule--helper.c:642
+#: builtin/submodule--helper.c:654
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr "Altmodül yolu url'si '%s' kaydı yapılamadı"
 
-#: builtin/submodule--helper.c:646
+#: builtin/submodule--helper.c:658
 #, c-format
 msgid "Submodule '%s' (%s) registered for path '%s'\n"
 msgstr "'%s' altmodülü (%s), '%s' yoluna kaydı yapıldı\n"
 
-#: builtin/submodule--helper.c:656
+#: builtin/submodule--helper.c:668
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr "uyarı: '%s' altmodülü için komut güncellemesi önerilmiyor\n"
 
-#: builtin/submodule--helper.c:663
+#: builtin/submodule--helper.c:675
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr "'%s' altmodülü yolu için güncelleme kipi kaydı yapılamadı"
 
-#: builtin/submodule--helper.c:685
+#: builtin/submodule--helper.c:697
 msgid "suppress output for initializing a submodule"
 msgstr "bir altmodül ilklendirmesi çıktısını gizle"
 
-#: builtin/submodule--helper.c:690
+#: builtin/submodule--helper.c:702
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr "git submodule--helper init [<seçenekler>] [<yol>]"
 
-#: builtin/submodule--helper.c:763 builtin/submodule--helper.c:898
+#: builtin/submodule--helper.c:775 builtin/submodule--helper.c:910
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr "'%s' yolu için .gitmodules içinde altmodül eşlemi bulunmadı"
 
-#: builtin/submodule--helper.c:811
+#: builtin/submodule--helper.c:823
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr "'%s' altmodülü içinde HEAD başvurusu çözülemedi"
 
-#: builtin/submodule--helper.c:838 builtin/submodule--helper.c:1423
+#: builtin/submodule--helper.c:850 builtin/submodule--helper.c:1428
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "'%s' altmodülüne özyinelenemedi"
 
-#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1590
+#: builtin/submodule--helper.c:874 builtin/submodule--helper.c:1595
 msgid "suppress submodule status output"
 msgstr "altmodül durum çıktısını gizle"
 
-#: builtin/submodule--helper.c:863
+#: builtin/submodule--helper.c:875
 msgid ""
 "use commit stored in the index instead of the one stored in the submodule "
 "HEAD"
@@ -22775,92 +23278,92 @@ msgstr ""
 "altmodül HEAD'i içinde depolanan işleme yerine indekste depolanan işlemeyi "
 "kullan"
 
-#: builtin/submodule--helper.c:869
+#: builtin/submodule--helper.c:881
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr "git submodule status [--quiet] [--cached] [--recursive] [<yol>...]"
 
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:905
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper name <yol>"
 
-#: builtin/submodule--helper.c:965
+#: builtin/submodule--helper.c:977
 #, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr "* %s %s(ikili nesne)->%s(altmodül)"
 
-#: builtin/submodule--helper.c:968
+#: builtin/submodule--helper.c:980
 #, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr "* %s %s(altmodül)->%s(ikili nesne)"
 
-#: builtin/submodule--helper.c:981
+#: builtin/submodule--helper.c:993
 #, c-format
 msgid "%s"
 msgstr "%s"
 
-#: builtin/submodule--helper.c:1031
+#: builtin/submodule--helper.c:1043
 #, c-format
 msgid "couldn't hash object from '%s'"
 msgstr "'%s' üzerinden nesne sağlaması yapılamadı"
 
-#: builtin/submodule--helper.c:1035
+#: builtin/submodule--helper.c:1047
 #, c-format
 msgid "unexpected mode %o\n"
 msgstr "beklenmedik kip %o\n"
 
-#: builtin/submodule--helper.c:1276
+#: builtin/submodule--helper.c:1288
 msgid "use the commit stored in the index instead of the submodule HEAD"
 msgstr "altmodül HEAD'i içindeki işleme ile indekstekini karşılaştırmak için"
 
-#: builtin/submodule--helper.c:1278
+#: builtin/submodule--helper.c:1290
 msgid "compare the commit in the index with that in the submodule HEAD"
 msgstr "indeksteki işlemeyi altmodül HEAD'inde olan ile karşılaştır"
 
-#: builtin/submodule--helper.c:1280
+#: builtin/submodule--helper.c:1292
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr "'ignore_config' değeri 'all' olan altmodülleri atla"
 
-#: builtin/submodule--helper.c:1282
+#: builtin/submodule--helper.c:1294
 msgid "limit the summary size"
 msgstr "özet boyutunu sınırla"
 
-#: builtin/submodule--helper.c:1287
+#: builtin/submodule--helper.c:1299
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr "git submodule--helper summary [<seçenekler>] [<işleme>] [--] [<yol>]"
 
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1323
 msgid "could not fetch a revision for HEAD"
 msgstr "HEAD için bir revizyon getirilemedi"
 
-#: builtin/submodule--helper.c:1373
+#: builtin/submodule--helper.c:1384
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr "'%s' için altmodül url'si eşitleniyor\n"
 
-#: builtin/submodule--helper.c:1379
+#: builtin/submodule--helper.c:1390
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr "'%s' altmodülü yolu için url kaydı yapılamadı"
 
-#: builtin/submodule--helper.c:1393
+#: builtin/submodule--helper.c:1399
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr "'%s' altmodülü için öntanımlı uzak konum alınamadı"
 
-#: builtin/submodule--helper.c:1404
+#: builtin/submodule--helper.c:1409
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr "'%s' altmodülü için uzak konum güncellenemedi"
 
-#: builtin/submodule--helper.c:1451
+#: builtin/submodule--helper.c:1456
 msgid "suppress output of synchronizing submodule url"
 msgstr "altmodül url'si eşitleme çıktısını gizle"
 
-#: builtin/submodule--helper.c:1458
+#: builtin/submodule--helper.c:1463
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<yol>]"
 
-#: builtin/submodule--helper.c:1508
+#: builtin/submodule--helper.c:1513
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory. This will be replaced "
@@ -22869,7 +23372,7 @@ msgstr ""
 "Altmodül çalışma ağacı '%s' bir .git dizini içeriyor. Bu, absorbgitdirs "
 "kullanılarak bir .git dosyası ile değiştirilecek."
 
-#: builtin/submodule--helper.c:1525
+#: builtin/submodule--helper.c:1530
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
@@ -22878,47 +23381,47 @@ msgstr ""
 "Altmodül çalışma ağacı '%s' yerel değişiklikler içeriyor; onları atmak için "
 "'-f' kullanın"
 
-#: builtin/submodule--helper.c:1533
+#: builtin/submodule--helper.c:1538
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "'%s' dizini temizlendi\n"
 
-#: builtin/submodule--helper.c:1535
+#: builtin/submodule--helper.c:1540
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr "'%s' altmodül çalışma ağacı kaldırılamadı\n"
 
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1551
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr "boş altmodül dizini %s oluşturulamadı"
 
-#: builtin/submodule--helper.c:1562
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr "'%s' altmodülü (%s), '%s' yoluna kaydı yapılmamış\n"
 
-#: builtin/submodule--helper.c:1591
+#: builtin/submodule--helper.c:1596
 msgid "remove submodule working trees even if they contain local changes"
 msgstr "altmodül çalışma ağaçlarını yerel değişiklikler içerseler bile kaldır"
 
-#: builtin/submodule--helper.c:1592
+#: builtin/submodule--helper.c:1597
 msgid "unregister all submodules"
 msgstr "tüm altmodüllerin kaydını kaldır"
 
-#: builtin/submodule--helper.c:1597
+#: builtin/submodule--helper.c:1602
 msgid ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
 msgstr ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<yol>...]]"
 
-#: builtin/submodule--helper.c:1611
+#: builtin/submodule--helper.c:1616
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr ""
 "Tüm altmodüllerin ilklendirmesini gerçekten geri almak istiyorsanız '--all' "
 "kullanın"
 
-#: builtin/submodule--helper.c:1656
+#: builtin/submodule--helper.c:1665
 msgid ""
 "An alternate computed from a superproject's alternate is invalid.\n"
 "To allow Git to clone without an alternate in such a case, set\n"
@@ -22930,101 +23433,102 @@ msgstr ""
 "submodule.alternateErrorStrategy ayarını 'info'ya ayarlayın veya\n"
 "--reference yerine --reference-if-able kullanarak klonlayın."
 
-#: builtin/submodule--helper.c:1701 builtin/submodule--helper.c:1704
+#: builtin/submodule--helper.c:1710 builtin/submodule--helper.c:1713
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "'%s' altmodülü alternatif ekleyemiyor: %s"
 
-#: builtin/submodule--helper.c:1740
+#: builtin/submodule--helper.c:1749
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr "'%s' submodule.alternateErrorStrategy değeri tanımlanamadı"
 
-#: builtin/submodule--helper.c:1747
+#: builtin/submodule--helper.c:1756
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "'%s' submodule.alternateLocation değeri tanımlanamadı"
 
-#: builtin/submodule--helper.c:1772
+#: builtin/submodule--helper.c:1781
 #, c-format
 msgid "refusing to create/use '%s' in another submodule's git dir"
 msgstr ""
 "başka bir altmodülün git dizininde '%s' oluşturma/kullanma reddediliyor"
 
-#: builtin/submodule--helper.c:1813
+#: builtin/submodule--helper.c:1826
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
 msgstr "'%s' ögesinin '%s' altmodül yoluna klonlanması başarısız"
 
-#: builtin/submodule--helper.c:1818
+#: builtin/submodule--helper.c:1831
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr "dizin boş değil: '%s'"
 
-#: builtin/submodule--helper.c:1830
+#: builtin/submodule--helper.c:1843
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr "'%s' için altmodül dizini alınamadı"
 
-#: builtin/submodule--helper.c:1862
+#: builtin/submodule--helper.c:1876
 msgid "where the new submodule will be cloned to"
 msgstr "yeni altmodülün nereye klonlanacağı"
 
-#: builtin/submodule--helper.c:1865
+#: builtin/submodule--helper.c:1879
 msgid "name of the new submodule"
 msgstr "yeni altmodülün adı"
 
-#: builtin/submodule--helper.c:1868
+#: builtin/submodule--helper.c:1882
 msgid "url where to clone the submodule from"
 msgstr "altmodülün klonlanacağı url konumu"
 
-#: builtin/submodule--helper.c:1876 builtin/submodule--helper.c:3265
+#: builtin/submodule--helper.c:1890 builtin/submodule--helper.c:3383
 msgid "depth for shallow clones"
 msgstr "sığ klonların derinliği"
 
-#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:2526
-#: builtin/submodule--helper.c:3258
+#: builtin/submodule--helper.c:1893 builtin/submodule--helper.c:2731
+#: builtin/submodule--helper.c:3376
 msgid "force cloning progress"
 msgstr "zorla klonla"
 
-#: builtin/submodule--helper.c:1881 builtin/submodule--helper.c:2528
+#: builtin/submodule--helper.c:1895 builtin/submodule--helper.c:2733
 msgid "disallow cloning into non-empty directory"
 msgstr "boş olmayan dizine klonlamaya izin verme"
 
-#: builtin/submodule--helper.c:1888
+#: builtin/submodule--helper.c:1903
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
-"<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
-"<url> --path <path>"
+"<repository>] [--name <name>] [--depth <depth>] [--single-branch] [--filter "
+"<filter-spec>] --url <url> --path <path>"
 msgstr ""
-"git submodule--helper clone [--prefix=<yol>] [--quiet] [--reference <depo>] "
-"[--name <ad>] [--depth <derinlik>] [--single-branch] --url <url> --path <yol>"
+"git submodule--helper clone [--prefix=<yol>] [--quiet] [--reference "
+"<depo>] [--name <ad>] [--depth <derinlik>] [--single-branch] [--filter "
+"<süzgeç-belirteci>] --url <url> --path <yol>"
 
-#: builtin/submodule--helper.c:1925
+#: builtin/submodule--helper.c:1943
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr "Geçersiz güncelleme kipi '%s', '%s' altmodül yolu için"
 
-#: builtin/submodule--helper.c:1929
+#: builtin/submodule--helper.c:1947
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr "Geçersiz güncelleme kipi '%s', '%s' altmodül yolu için yapılandırılmış"
 
-#: builtin/submodule--helper.c:2044
+#: builtin/submodule--helper.c:2041
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "Altmodül yolu '%s' ilklendirilmedi"
 
-#: builtin/submodule--helper.c:2048
+#: builtin/submodule--helper.c:2045
 msgid "Maybe you want to use 'update --init'?"
 msgstr "'update --init' mi kullanmak istersiniz?"
 
-#: builtin/submodule--helper.c:2078
+#: builtin/submodule--helper.c:2075
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "Birleştirilmemiş altmodül %s atlanıyor"
 
-#: builtin/submodule--helper.c:2107
+#: builtin/submodule--helper.c:2104
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "'%s' altmodülü atlanıyor"
@@ -23039,54 +23543,54 @@ msgstr "'%s' klonlanamadı. Yeniden deneme zamanlandı."
 msgid "Failed to clone '%s' a second time, aborting"
 msgstr "'%s' ikinci bir kez klonlanamadı, iptal ediliyor"
 
-#: builtin/submodule--helper.c:2373
+#: builtin/submodule--helper.c:2371
 #, c-format
 msgid "Unable to checkout '%s' in submodule path '%s'"
 msgstr "Şu altmodül yolunda '%s' çıkışı yapılamadı: '%s'"
 
-#: builtin/submodule--helper.c:2377
+#: builtin/submodule--helper.c:2375
 #, c-format
 msgid "Unable to rebase '%s' in submodule path '%s'"
 msgstr "Şu altmodül yolunda '%s' yeniden temellendirilemedi: '%s'"
 
-#: builtin/submodule--helper.c:2381
+#: builtin/submodule--helper.c:2379
 #, c-format
 msgid "Unable to merge '%s' in submodule path '%s'"
 msgstr "Şu altmodül yolunda '%s' birleştirilemedi: '%s'"
 
-#: builtin/submodule--helper.c:2385
+#: builtin/submodule--helper.c:2383
 #, c-format
 msgid "Execution of '%s %s' failed in submodule path '%s'"
 msgstr "Şu altmodül yolunda '%s %s' çalıştırılamadı: '%s'"
 
-#: builtin/submodule--helper.c:2409
+#: builtin/submodule--helper.c:2402
 #, c-format
 msgid "Submodule path '%s': checked out '%s'\n"
 msgstr "Altmodül yolu '%s': '%s' çıkışı yapıldı\n"
 
-#: builtin/submodule--helper.c:2413
+#: builtin/submodule--helper.c:2406
 #, c-format
 msgid "Submodule path '%s': rebased into '%s'\n"
 msgstr "Altmodül yolu '%s': '%s' üzerine yeniden temellendirildi\n"
 
-#: builtin/submodule--helper.c:2417
+#: builtin/submodule--helper.c:2410
 #, c-format
 msgid "Submodule path '%s': merged in '%s'\n"
 msgstr "Altmodül yolu '%s': '%s' içinde birleştirildi\n"
 
-#: builtin/submodule--helper.c:2421
+#: builtin/submodule--helper.c:2414
 #, c-format
 msgid "Submodule path '%s': '%s %s'\n"
 msgstr "Altmodül yolu '%s': '%s %s'\n"
 
-#: builtin/submodule--helper.c:2445
+#: builtin/submodule--helper.c:2438
 #, c-format
 msgid "Unable to fetch in submodule path '%s'; trying to directly fetch %s:"
 msgstr ""
 "'%s' altmodül yolunda getirme yapılamadı; %s doğrudan getirilmeye "
 "çalışılıyor:"
 
-#: builtin/submodule--helper.c:2454
+#: builtin/submodule--helper.c:2447
 #, c-format
 msgid ""
 "Fetched in submodule path '%s', but it did not contain %s. Direct fetching "
@@ -23095,177 +23599,204 @@ msgstr ""
 "'%s' altmodül yolunda getirme yapıldı; ancak %s içermiyor. Bu işlemenin "
 "doğrudan getirilmesi başarısız oldu."
 
-#: builtin/submodule--helper.c:2505 builtin/submodule--helper.c:2575
-#: builtin/submodule--helper.c:2813
+#: builtin/submodule--helper.c:2481
+#, c-format
+msgid ""
+"Submodule (%s) branch configured to inherit branch from superproject, but "
+"the superproject is not on any branch"
+msgstr ""
+"Altmodül (%s) dalı süperproje dalından devralmak üzere yapılandırıldı; ancak "
+"süperproje herhangi bir dalda değil"
+
+#: builtin/submodule--helper.c:2499
+#, c-format
+msgid "could not get a repository handle for submodule '%s'"
+msgstr "'%s' altmodülü için depo tutacağı alınamadı"
+
+#: builtin/submodule--helper.c:2588
+#, c-format
+msgid "Unable to find current revision in submodule path '%s'"
+msgstr "'%s' altmodül yolunda geçerli revizyon bulunamadı"
+
+#: builtin/submodule--helper.c:2599
+#, c-format
+msgid "Unable to fetch in submodule path '%s'"
+msgstr "'%s' altmodül yolunda getirme yapılamadı"
+
+#: builtin/submodule--helper.c:2604
+#, c-format
+msgid "Unable to find %s revision in submodule path '%s'"
+msgstr "%s revizyonu, '%s' altmodül yolunda bulunamadı"
+
+#: builtin/submodule--helper.c:2640
+#, c-format
+msgid "Failed to recurse into submodule path '%s'"
+msgstr "'%s' altmodül yoluna özyineleme yapılamadı"
+
+#: builtin/submodule--helper.c:2699
+msgid "force checkout updates"
+msgstr "güncellemeleri zorla çıkış yap"
+
+#: builtin/submodule--helper.c:2701
+msgid "initialize uninitialized submodules before update"
+msgstr "güncellemeden önce ilklendirilmemiş altmodülleri ilklendir"
+
+#: builtin/submodule--helper.c:2703
+msgid "use SHA-1 of submodule's remote tracking branch"
+msgstr "altmodül uzak izleme dalının SHA-1'ini kullan"
+
+#: builtin/submodule--helper.c:2705
+msgid "traverse submodules recursively"
+msgstr "altmodülleri özyineli basamaklandır"
+
+#: builtin/submodule--helper.c:2707
+msgid "don't fetch new objects from the remote site"
+msgstr "yeni nesneleri uzak konumdan getirme"
+
+#: builtin/submodule--helper.c:2710 builtin/submodule--helper.c:2892
 msgid "path into the working tree"
 msgstr "çalışma ağacına giden yol"
 
-#: builtin/submodule--helper.c:2508 builtin/submodule--helper.c:2580
+#: builtin/submodule--helper.c:2713
 msgid "path into the working tree, across nested submodule boundaries"
 msgstr "iç içe geçmiş altmodül sınırları üzerinden çalışma ağacına giden yol"
 
-#: builtin/submodule--helper.c:2512 builtin/submodule--helper.c:2578
+#: builtin/submodule--helper.c:2717
 msgid "rebase, merge, checkout or none"
 msgstr "rebase, merge, checkout veya none"
 
-#: builtin/submodule--helper.c:2518
+#: builtin/submodule--helper.c:2723
 msgid "create a shallow clone truncated to the specified number of revisions"
 msgstr "belirli bir revizyon sayısına kısaltılmış sığ klon oluştur"
 
-#: builtin/submodule--helper.c:2521
+#: builtin/submodule--helper.c:2726
 msgid "parallel jobs"
 msgstr "paralel işler"
 
-#: builtin/submodule--helper.c:2523
+#: builtin/submodule--helper.c:2728
 msgid "whether the initial clone should follow the shallow recommendation"
 msgstr "ilk klonun sığlık üzerine olan tavsiyeyi izleyip izlemeyeceği"
 
-#: builtin/submodule--helper.c:2524
+#: builtin/submodule--helper.c:2729
 msgid "don't print cloning progress"
 msgstr "klonlama işlemini yazdırma"
 
-#: builtin/submodule--helper.c:2535
-msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
-msgstr "git submodule--helper update-clone [--prefix=<yol>] [<yol>...]"
-
-#: builtin/submodule--helper.c:2548
-msgid "bad value for update parameter"
-msgstr "güncelleme parametresi için hatalı değer"
-
-#: builtin/submodule--helper.c:2566
-msgid "suppress output for update by rebase or merge"
-msgstr "güncelleme çıktısını yeniden temellendirme veya birleştirme ile sustur"
-
-#: builtin/submodule--helper.c:2567
-msgid "force checkout updates"
-msgstr "güncellemeleri zorla çıkış yap"
-
-#: builtin/submodule--helper.c:2569
-msgid "don't fetch new objects from the remote site"
-msgstr "yeni nesneleri uzak konumdan getirme"
-
-#: builtin/submodule--helper.c:2571
-msgid "overrides update mode in case the repository is a fresh clone"
-msgstr ""
-"deponun taze bir klon olması durumunda güncelleme kipini geçersiz kılar"
-
-#: builtin/submodule--helper.c:2572
-msgid "depth for shallow fetch"
-msgstr "sığ getirme derinliği"
-
-#: builtin/submodule--helper.c:2582
-msgid "sha1"
-msgstr "sha1"
-
-#: builtin/submodule--helper.c:2583
-msgid "SHA1 expected by superproject"
-msgstr "superproject tarafından SHA1 bekleniyordu"
-
-#: builtin/submodule--helper.c:2585
-msgid "subsha1"
-msgstr "subsha1"
-
-#: builtin/submodule--helper.c:2586
-msgid "SHA1 of submodule's HEAD"
-msgstr "altmodülün HEAD'inin SHA1'i"
-
-#: builtin/submodule--helper.c:2592
-msgid "git submodule--helper run-update-procedure [<options>] <path>"
-msgstr "git submodule--helper run-update-procedure [<seçenekler>] [<yol>]"
-
-#: builtin/submodule--helper.c:2663
-#, c-format
+#: builtin/submodule--helper.c:2741
 msgid ""
-"Submodule (%s) branch configured to inherit branch from superproject, but "
-"the superproject is not on any branch"
+"git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] "
+"[-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-"
+"shallow] [--reference <repository>] [--recursive] [--[no-]single-branch] "
+"[--] [<path>...]"
 msgstr ""
-"Altmodül (%s) dalı süperproje dalından devralmak üzere yapılandırıldı; ancak "
-"süperproje herhangi bir dalda değil"
+"git submodule [--quiet] update [--init [--filter=<süzgeç-blrtç>]] [--remote] "
+"[-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-"
+"shallow] [--reference <depo>] [--recursive] [--[no-]single-branch] [--] "
+"[<yol>...]"
 
-#: builtin/submodule--helper.c:2781
-#, c-format
-msgid "could not get a repository handle for submodule '%s'"
-msgstr "'%s' altmodülü için depo tutacağı alınamadı"
+#: builtin/submodule--helper.c:2767
+msgid "bad value for update parameter"
+msgstr "güncelleme parametresi için hatalı değer"
 
-#: builtin/submodule--helper.c:2814
+#: builtin/submodule--helper.c:2893
 msgid "recurse into submodules"
 msgstr "altmodüllere özyinele"
 
-#: builtin/submodule--helper.c:2820
+#: builtin/submodule--helper.c:2899
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr "git submodule--helper absorb-git-dirs [<seçenekler>] [<yol>...]"
 
-#: builtin/submodule--helper.c:2876
+#: builtin/submodule--helper.c:2955
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr ".gitmodules dosyasına yazım güvenli mi değil mi denetle"
 
-#: builtin/submodule--helper.c:2879
+#: builtin/submodule--helper.c:2958
 msgid "unset the config in the .gitmodules file"
 msgstr ".gitmodules dosyasındaki yapılandırmayı kaldır"
 
-#: builtin/submodule--helper.c:2884
+#: builtin/submodule--helper.c:2963
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config <ad> [<değer>]"
 
-#: builtin/submodule--helper.c:2885
+#: builtin/submodule--helper.c:2964
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset <ad>"
 
-#: builtin/submodule--helper.c:2886
-msgid "git submodule--helper config --check-writeable"
-msgstr "git submodule--helper config --check-writeable"
-
-#: builtin/submodule--helper.c:2905 builtin/submodule--helper.c:3121
-#: builtin/submodule--helper.c:3277
+#: builtin/submodule--helper.c:2984 builtin/submodule--helper.c:3238
+#: builtin/submodule--helper.c:3395
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr ".gitmodules dosyasının çalışma ağacında olduğundan lütfen emin ol"
 
-#: builtin/submodule--helper.c:2921
+#: builtin/submodule--helper.c:3000
 msgid "suppress output for setting url of a submodule"
 msgstr "bir altmodül url ayarlanması çıktısını gizle"
 
-#: builtin/submodule--helper.c:2925
+#: builtin/submodule--helper.c:3004
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr "git submodule--helper set-url [--quiet] <yol> <yeniurl>"
 
-#: builtin/submodule--helper.c:2958
+#: builtin/submodule--helper.c:3037
 msgid "set the default tracking branch to master"
 msgstr "öntanımlı izleme dalını master olarak ayarla"
 
-#: builtin/submodule--helper.c:2960
+#: builtin/submodule--helper.c:3039
 msgid "set the default tracking branch"
 msgstr "öntanımlı izleme dalını ayarla"
 
-#: builtin/submodule--helper.c:2964
+#: builtin/submodule--helper.c:3043
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr "git submodule--helper set-branch [-q|--quiet] (-d|--default) <yol>"
 
-#: builtin/submodule--helper.c:2965
+#: builtin/submodule--helper.c:3044
 msgid ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 msgstr ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <dal> <yol>"
 
-#: builtin/submodule--helper.c:2972
+#: builtin/submodule--helper.c:3051
 msgid "--branch or --default required"
 msgstr "--branch veya --default gerekli"
 
-#: builtin/submodule--helper.c:3038
-#, c-format
-msgid "Adding existing repo at '%s' to the index\n"
-msgstr "'%s' konumundaki mevcut repo indekse ekleniyor\n"
+#: builtin/submodule--helper.c:3072 builtin/submodule--helper.c:3375
+msgid "print only error messages"
+msgstr "yalnızca hata iletilerini yazdır"
 
-#: builtin/submodule--helper.c:3041
-#, c-format
-msgid "'%s' already exists and is not a valid git repo"
-msgstr "'%s' halihazırda mevcut ve geçerli bir git deposu değil"
+#: builtin/submodule--helper.c:3073
+msgid "force creation"
+msgstr "oluşturmayı zorla"
+
+#: builtin/submodule--helper.c:3081
+msgid "show whether the branch would be created"
+msgstr "dalın oluşturulup oluşturulmayacağını göster"
+
+#: builtin/submodule--helper.c:3085
+msgid ""
+"git submodule--helper create-branch [-f|--force] [--create-reflog] [-q|--"
+"quiet] [-t|--track] [-n|--dry-run] <name> <start-oid> <start-name>"
+msgstr ""
+"git submodule--helper create-branch [-f|--force] [--create-reflog] [-q|--"
+"quiet] [-t|--track] [-n|--dry-run] <ad> <başlangıç-oid> <başlangıç-adı>"
+
+#: builtin/submodule--helper.c:3097
+#, c-format
+msgid "creating branch '%s'"
+msgstr "'%s' dalı oluşturuluyor"
+
+#: builtin/submodule--helper.c:3155
+#, c-format
+msgid "Adding existing repo at '%s' to the index\n"
+msgstr "'%s' konumundaki mevcut repo indekse ekleniyor\n"
+
+#: builtin/submodule--helper.c:3158
+#, c-format
+msgid "'%s' already exists and is not a valid git repo"
+msgstr "'%s' halihazırda mevcut ve geçerli bir git deposu değil"
 
-#: builtin/submodule--helper.c:3054
+#: builtin/submodule--helper.c:3171
 #, c-format
 msgid "A git directory for '%s' is found locally with remote(s):\n"
 msgstr "'%s' için bir git deposu yerelde şu uzak konumlarla bulundu:\n"
 
-#: builtin/submodule--helper.c:3061
+#: builtin/submodule--helper.c:3178
 #, c-format
 msgid ""
 "If you want to reuse this local git directory instead of cloning again from\n"
@@ -23282,85 +23813,81 @@ msgstr ""
 "depo değilse veya bunun ne anlama geldiğinden emin değilseniz\n"
 "'--name' seçeneği ile başka bir ad seçin."
 
-#: builtin/submodule--helper.c:3073
+#: builtin/submodule--helper.c:3190
 #, c-format
 msgid "Reactivating local git directory for submodule '%s'\n"
 msgstr "'%s' altmodülü için yerel git dizini yeniden etkinleştiriliyor\n"
 
-#: builtin/submodule--helper.c:3110
+#: builtin/submodule--helper.c:3227
 #, c-format
 msgid "unable to checkout submodule '%s'"
 msgstr "'%s' altmodülü çıkış yapılamıyor"
 
-#: builtin/submodule--helper.c:3149
+#: builtin/submodule--helper.c:3266
 #, c-format
 msgid "Failed to add submodule '%s'"
 msgstr "'%s' altmodülü eklenemedi"
 
-#: builtin/submodule--helper.c:3153 builtin/submodule--helper.c:3158
-#: builtin/submodule--helper.c:3166
+#: builtin/submodule--helper.c:3270 builtin/submodule--helper.c:3275
+#: builtin/submodule--helper.c:3283
 #, c-format
 msgid "Failed to register submodule '%s'"
 msgstr "'%s' altmodülü kaydı yapılamadı"
 
-#: builtin/submodule--helper.c:3222
+#: builtin/submodule--helper.c:3339
 #, c-format
 msgid "'%s' already exists in the index"
 msgstr "'%s' indekste halihazırda var"
 
-#: builtin/submodule--helper.c:3225
+#: builtin/submodule--helper.c:3342
 #, c-format
 msgid "'%s' already exists in the index and is not a submodule"
 msgstr "'%s' indekste halihazırda var ve bir altmodül değil"
 
-#: builtin/submodule--helper.c:3254
+#: builtin/submodule--helper.c:3372
 msgid "branch of repository to add as submodule"
 msgstr "altmodül olarak eklenecek depo dalı"
 
-#: builtin/submodule--helper.c:3255
+#: builtin/submodule--helper.c:3373
 msgid "allow adding an otherwise ignored submodule path"
 msgstr "başka bir durumda yok sayılan altmodül yolunun eklenmesine izin ver"
 
-#: builtin/submodule--helper.c:3257
-msgid "print only error messages"
-msgstr "yalnızca hata iletilerini yazdır"
-
-#: builtin/submodule--helper.c:3261
+#: builtin/submodule--helper.c:3379
 msgid "borrow the objects from reference repositories"
 msgstr "nesneleri başvuru depolarından ödünç al"
 
-#: builtin/submodule--helper.c:3263
+#: builtin/submodule--helper.c:3381
 msgid ""
 "sets the submodule’s name to the given string instead of defaulting to its "
 "path"
 msgstr ""
 "altmodülün adını kendi yoluna öntanımlamak yerine verilen dizi olarak ayarlar"
 
-#: builtin/submodule--helper.c:3270
+#: builtin/submodule--helper.c:3388
 msgid "git submodule--helper add [<options>] [--] <repository> [<path>]"
 msgstr "git submodule--helper add [<seçenekler>] [--] <depo> [<yol>]"
 
-#: builtin/submodule--helper.c:3298
+#: builtin/submodule--helper.c:3416
 msgid "Relative path can only be used from the toplevel of the working tree"
 msgstr ""
 "Göreceli yol yalnızca çalışma ağacının en üst düzeyinden kullanılabilir"
 
-#: builtin/submodule--helper.c:3306
+#: builtin/submodule--helper.c:3425
 #, c-format
 msgid "repo URL: '%s' must be absolute or begin with ./|../"
 msgstr "depo URL'si: '%s' mutlak olmalı veya ./|../ ile başlamalıdır"
 
-#: builtin/submodule--helper.c:3341
+#: builtin/submodule--helper.c:3460
 #, c-format
 msgid "'%s' is not a valid submodule name"
 msgstr "'%s' geçerli bir altmodül adı değil"
 
-#: builtin/submodule--helper.c:3405 git.c:452 git.c:726
+#: builtin/submodule--helper.c:3520 git.c:453 git.c:729
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s, --super-prefix desteklemiyor"
 
-#: builtin/submodule--helper.c:3411
+#: builtin/submodule--helper.c:3526
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "'%s' geçerli bir submodule--helper altkomutu değil"
@@ -23393,7 +23920,7 @@ msgstr "neden"
 msgid "reason of the update"
 msgstr "güncelleme nedeni"
 
-#: builtin/tag.c:25
+#: builtin/tag.c:26
 msgid ""
 "git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]\n"
 "        <tagname> [<head>]"
@@ -23401,11 +23928,11 @@ msgstr ""
 "git tag [-a | -s | -u <anahtar-kimliği>] [-f] [-m <ileti> | -F <dosya>]\n"
 "        <etiket-adı> [<head>]"
 
-#: builtin/tag.c:27
+#: builtin/tag.c:28
 msgid "git tag -d <tagname>..."
 msgstr "git tag -d <etiket-adı>..."
 
-#: builtin/tag.c:28
+#: builtin/tag.c:29
 msgid ""
 "git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--"
 "points-at <object>]\n"
@@ -23416,21 +23943,21 @@ msgstr ""
 " [-- points-at <nesne>] [--format=<biçim>] [--merged <işleme>]\n"
 " [--no-merged <işleme>] [<dizgi>...]"
 
-#: builtin/tag.c:30
+#: builtin/tag.c:31
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr "git tag -v [--format=<biçim>] <etiket-adı>..."
 
-#: builtin/tag.c:100
+#: builtin/tag.c:101
 #, c-format
 msgid "tag '%s' not found."
 msgstr "'%s' etiketi bulunamadı."
 
-#: builtin/tag.c:135
+#: builtin/tag.c:136
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr "'%s' etiketi silindi (%s idi)\n"
 
-#: builtin/tag.c:170
+#: builtin/tag.c:171
 #, c-format
 msgid ""
 "\n"
@@ -23443,7 +23970,7 @@ msgstr ""
 "  %s\n"
 "'%c' ile başlayan satırlar yok sayılacaktır.\n"
 
-#: builtin/tag.c:174
+#: builtin/tag.c:175
 #, c-format
 msgid ""
 "\n"
@@ -23458,11 +23985,11 @@ msgstr ""
 "'%c' ile başlayan satırlar tutulacaktır; isterseniz onları "
 "kaldırabilirsiniz.\n"
 
-#: builtin/tag.c:240
+#: builtin/tag.c:241
 msgid "unable to sign the tag"
 msgstr "etiket imzalanamıyor"
 
-#: builtin/tag.c:258
+#: builtin/tag.c:259
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -23475,115 +24002,119 @@ msgstr ""
 "\n"
 "\tgit tag -f %s %s^{}"
 
-#: builtin/tag.c:274
+#: builtin/tag.c:275
 msgid "bad object type."
 msgstr "hatalı nesne türü."
 
-#: builtin/tag.c:325
+#: builtin/tag.c:326
 msgid "no tag message?"
 msgstr "etiket iletisi yok mu?"
 
-#: builtin/tag.c:332
+#: builtin/tag.c:333
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "Etiket iletisi %s içinde bırakıldı\n"
 
-#: builtin/tag.c:444
+#: builtin/tag.c:445
 msgid "list tag names"
 msgstr "etiket adlarını listele"
 
-#: builtin/tag.c:446
+#: builtin/tag.c:447
 msgid "print <n> lines of each tag message"
 msgstr "her etiket iletisinin <n> satırını listele"
 
-#: builtin/tag.c:448
+#: builtin/tag.c:449
 msgid "delete tags"
 msgstr "etiketleri sil"
 
-#: builtin/tag.c:449
+#: builtin/tag.c:450
 msgid "verify tags"
 msgstr "etiketleri doğrula"
 
-#: builtin/tag.c:451
+#: builtin/tag.c:452
 msgid "Tag creation options"
 msgstr "Etiket oluşturma seçenekleri"
 
-#: builtin/tag.c:453
+#: builtin/tag.c:454
 msgid "annotated tag, needs a message"
 msgstr "açıklama eklenmiş etiket için bir ileti gerek"
 
-#: builtin/tag.c:455
+#: builtin/tag.c:456
 msgid "tag message"
 msgstr "etiket iletisi"
 
-#: builtin/tag.c:457
+#: builtin/tag.c:458
 msgid "force edit of tag message"
 msgstr "etiket iletisini zorla düzenle"
 
-#: builtin/tag.c:458
+#: builtin/tag.c:459
 msgid "annotated and GPG-signed tag"
 msgstr "açıklama eklenmiş ve GPG imzalı etiket"
 
-#: builtin/tag.c:461
+#: builtin/tag.c:462
 msgid "use another key to sign the tag"
 msgstr "etiketi imzalamak için başka bir anahtar kullanın"
 
-#: builtin/tag.c:462
+#: builtin/tag.c:463
 msgid "replace the tag if exists"
 msgstr "eğer varsa etiketi başkasıyla değiştir"
 
-#: builtin/tag.c:463 builtin/update-ref.c:511
+#: builtin/tag.c:464 builtin/update-ref.c:511
 msgid "create a reflog"
 msgstr "bir başvuru günlüğü oluştur"
 
-#: builtin/tag.c:465
+#: builtin/tag.c:466
 msgid "Tag listing options"
 msgstr "Etiket listeleme seçenekleri"
 
-#: builtin/tag.c:466
+#: builtin/tag.c:467
 msgid "show tag list in columns"
 msgstr "etiket listesini sütunlarla göster"
 
-#: builtin/tag.c:467 builtin/tag.c:469
+#: builtin/tag.c:468 builtin/tag.c:470
 msgid "print only tags that contain the commit"
 msgstr "yalnızca işlemeyi içeren etiketleri yazdır"
 
-#: builtin/tag.c:468 builtin/tag.c:470
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that don't contain the commit"
 msgstr "yalnızca işleme içermeyen etiketleri yazdır"
 
-#: builtin/tag.c:471
+#: builtin/tag.c:472
 msgid "print only tags that are merged"
 msgstr "yalnızca birleştirilen etiketleri yazdır"
 
-#: builtin/tag.c:472
+#: builtin/tag.c:473
 msgid "print only tags that are not merged"
 msgstr "yalnızca birleştirilmeyen etiketleri yazdır"
 
-#: builtin/tag.c:476
+#: builtin/tag.c:477
 msgid "print only tags of the object"
 msgstr "yalnızca nesnenin etiketlerini yazdır"
 
-#: builtin/tag.c:558
+#: builtin/tag.c:559
 #, c-format
 msgid "the '%s' option is only allowed in list mode"
 msgstr "'%s' seçeneğine yalnızca liste kipinde izin verilir"
 
-#: builtin/tag.c:597
+#: builtin/tag.c:598
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "'%s' geçerli bir etiket adı değil."
 
-#: builtin/tag.c:602
+#: builtin/tag.c:603
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "'%s' etiketi halihazırda var"
 
-#: builtin/tag.c:633
+#: builtin/tag.c:634
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "'%s' etiketi güncellendi (%s idi)\n"
 
+#: builtin/unpack-objects.c:95
+msgid "pack exceeds maximum allowed size"
+msgstr "paket izin verilen en büyük boyutu aşıyor"
+
 #: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
 msgstr "Nesneler açılıyor"
@@ -23640,143 +24171,143 @@ msgstr " Tamam"
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<seçenekler>] [--] [<dosya>...]"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:993
 msgid "continue refresh even when index needs update"
 msgstr "indeksin güncellenmesi gerekse bile yenilemeyi sürdür"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:996
 msgid "refresh: ignore submodules"
 msgstr "refresh: altmodülleri yok say"
 
-#: builtin/update-index.c:980
+#: builtin/update-index.c:999
 msgid "do not ignore new files"
 msgstr "yeni dosyaları yok sayma"
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:1001
 msgid "let files replace directories and vice-versa"
 msgstr "dosyaların dizinlerin yerine geçmesine ve tersine izin ver"
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:1003
 msgid "notice files missing from worktree"
 msgstr "çalışma ağacından eksik olan dosyaları fark et"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:1005
 msgid "refresh even if index contains unmerged entries"
 msgstr "indekste birleştirilmemiş girdiler olsa bile yenile"
 
-#: builtin/update-index.c:989
+#: builtin/update-index.c:1008
 msgid "refresh stat information"
 msgstr "dosya durum bilgisini yenile"
 
-#: builtin/update-index.c:993
+#: builtin/update-index.c:1012
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "--refresh gibi; ancak assume-unchanged ayarını yok sayar"
 
-#: builtin/update-index.c:997
+#: builtin/update-index.c:1016
 msgid "<mode>,<object>,<path>"
 msgstr "<kip>,<nesne>,<yol>"
 
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1017
 msgid "add the specified entry to the index"
 msgstr "belirtilen girdiyi indekse ekle"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1027
 msgid "mark files as \"not changing\""
 msgstr "dosyaları \"not changing\" olarak imle"
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1030
 msgid "clear assumed-unchanged bit"
 msgstr "assumed-unchanged kısmını temizle"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1033
 msgid "mark files as \"index-only\""
 msgstr "dosyaları \"index-only\" olarak imle"
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1036
 msgid "clear skip-worktree bit"
 msgstr "skip-worktree kısmını atla"
 
-#: builtin/update-index.c:1020
+#: builtin/update-index.c:1039
 msgid "do not touch index-only entries"
 msgstr "'index-only' girdilerine dokunma"
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1041
 msgid "add to index only; do not add content to object database"
 msgstr "yalnızca indekse ekle; içeriğe nesne veritabanına ekleme"
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1043
 msgid "remove named paths even if present in worktree"
 msgstr "çalışma ağacında mevcut olsa bile ad verilen yolları kaldır"
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1045
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "--stdin ile: girdi satırları boş baytlarla sonlandırılır"
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1047
 msgid "read list of paths to be updated from standard input"
 msgstr "güncellenecek yol listelerini standart girdi'den oku"
 
-#: builtin/update-index.c:1032
+#: builtin/update-index.c:1051
 msgid "add entries from standard input to the index"
 msgstr "indekse standart girdi'den girdiler ekle"
 
-#: builtin/update-index.c:1036
+#: builtin/update-index.c:1055
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "#2 ve #3 numaralı adımları listelenmiş yollar için yeniden doldur"
 
-#: builtin/update-index.c:1040
+#: builtin/update-index.c:1059
 msgid "only update entries that differ from HEAD"
 msgstr "yalnızca HEAD'den farklı olan girdileri güncelle"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1063
 msgid "ignore files missing from worktree"
 msgstr "çalışma ağacından eksik olan dosyaları yok say"
 
-#: builtin/update-index.c:1047
+#: builtin/update-index.c:1066
 msgid "report actions to standard output"
 msgstr "eylemleri standart çıktı'ya bildir"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1068
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(okunabilir veri için) kaydedilmiş çözülmeyen çakışmaları unut"
 
-#: builtin/update-index.c:1053
+#: builtin/update-index.c:1072
 msgid "write index in this format"
 msgstr "indeksi bu biçimle yaz"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1074
 msgid "enable or disable split index"
 msgstr "bölünmüş indeksi etkinleştir veya devre dışı bırak"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1076
 msgid "enable/disable untracked cache"
 msgstr "izlenmeyen önbelleği etkinleştir/devre dışı bırak"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1078
 msgid "test if the filesystem supports untracked cache"
 msgstr "dosya sisteminin izlenmeyen önbellek destekleyip desteklemediğini sına"
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1080
 msgid "enable untracked cache without testing the filesystem"
 msgstr "dosya sistemini sınamadan izlenmeyen önbelleği etkinleştir"
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1082
 msgid "write out the index even if is not flagged as changed"
 msgstr "değiştirilmiş olarak imlenmese bile indeksi yaz"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1084
 msgid "enable or disable file system monitor"
 msgstr "dosya sistemi monitörünü etkinleştir veya devre dışı bırak"
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1086
 msgid "mark files as fsmonitor valid"
 msgstr "dosyaları dosya sistemi monitöründe geçerli olarak imle"
 
-#: builtin/update-index.c:1070
+#: builtin/update-index.c:1089
 msgid "clear fsmonitor valid bit"
 msgstr "dosya sistemi monitöründe geçerli kısmını temizle"
 
-#: builtin/update-index.c:1173
+#: builtin/update-index.c:1195
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
@@ -23784,7 +24315,7 @@ msgstr ""
 "core.splitIndex 'false' olarak ayarlanmış; bölünmüş indeksi etkinleştirmeyi "
 "gerçekten istiyorsanız bunu kaldırın veya değiştirin"
 
-#: builtin/update-index.c:1182
+#: builtin/update-index.c:1204
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
@@ -23792,7 +24323,7 @@ msgstr ""
 "core.splitIndex 'true' olarak ayarlanmış; bölünmüş indeksi devre dışı "
 "bırakmayı gerçekten istiyorsanız bunu kaldırın veya değiştirin"
 
-#: builtin/update-index.c:1194
+#: builtin/update-index.c:1216
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -23800,11 +24331,11 @@ msgstr ""
 "core.untrackedCache 'true' olarak ayarlanmış; izlenmeyen önbelleği gerçekten "
 "devre dışı bırakmayı istiyorsanız bunu kaldırın veya değiştirin"
 
-#: builtin/update-index.c:1198
+#: builtin/update-index.c:1220
 msgid "Untracked cache disabled"
 msgstr "İzlenmeyen önbellek devre dışı bırakıldı"
 
-#: builtin/update-index.c:1206
+#: builtin/update-index.c:1228
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -23812,29 +24343,29 @@ msgstr ""
 "core.untrackedCache 'false' olarak ayarlanmış; izlenmeyen önbelleği "
 "gerçekten etkinleştirmek istiyorsanız bunu kaldırın veya değiştirin"
 
-#: builtin/update-index.c:1210
+#: builtin/update-index.c:1232
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "İzlenmeyen önbellek '%s' için etkinleştirildi"
 
-#: builtin/update-index.c:1218
+#: builtin/update-index.c:1241
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
 "core.fsmonitor ayarlanmamış; dosya sistemin monitörünü gerçekten "
 "etkinleştirmek istiyorsanız onu ayarlayın"
 
-#: builtin/update-index.c:1222
+#: builtin/update-index.c:1246
 msgid "fsmonitor enabled"
 msgstr "dosya sistemi monitörü etkin"
 
-#: builtin/update-index.c:1225
+#: builtin/update-index.c:1250
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 "core.fsmonitor ayarlanmış; dosya sistemi monitörünü gerçekten devre dışı "
 "bırakmak istiyorsanız onu kaldırın"
 
-#: builtin/update-index.c:1229
+#: builtin/update-index.c:1254
 msgid "fsmonitor disabled"
 msgstr "dosya sistemi monitörü devre dışı"
 
@@ -23867,10 +24398,6 @@ msgstr "stdin'de NUL ile sonlandırılan argümanlar var"
 msgid "read updates from stdin"
 msgstr "güncellemeleri stdin'den oku"
 
-#: builtin/update-server-info.c:7
-msgid "git update-server-info [--force]"
-msgstr "git update-server-info [--force]"
-
 #: builtin/update-server-info.c:15
 msgid "update the info files from scratch"
 msgstr "bilgi dosyalarını en baştan güncelle"
@@ -23952,33 +24479,37 @@ msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<seçenekler>] <ç-ağacı>"
 
 #: builtin/worktree.c:25
+msgid "git worktree repair [<path>...]"
+msgstr "git worktree repair [<yol>...]"
+
+#: builtin/worktree.c:26
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <yol>"
 
-#: builtin/worktree.c:75
+#: builtin/worktree.c:76
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr "%s/%s kaldırılıyor: %s"
 
-#: builtin/worktree.c:148
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
 msgstr "budanan çalışma ağaçlarını bildir"
 
-#: builtin/worktree.c:150
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr "<zaman>'dan eski çalışma ağaçlarının hükmünü kaldır"
 
-#: builtin/worktree.c:220
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr "'%s' halihazırda var"
 
-#: builtin/worktree.c:229
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
 msgstr "kullanılamayan çalışma ağacı konumu '%s'"
 
-#: builtin/worktree.c:234
+#: builtin/worktree.c:235
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -23988,7 +24519,7 @@ msgstr ""
 "geçersiz kılmak için '%s -f -f', temizlemek için 'unlock', 'prune' veya "
 "'remove' kullanın"
 
-#: builtin/worktree.c:236
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -23997,127 +24528,146 @@ msgstr ""
 "'%s' eksik; ancak halihazırda kaydı yapılmış bir çalışma ağacı;\n"
 "geçersiz kılmak için '%s -f', temizlemek için 'prune' veya 'remove' kullanın"
 
-#: builtin/worktree.c:287
+#: builtin/worktree.c:248
+#, c-format
+msgid "failed to copy '%s' to '%s'; sparse-checkout may not work correctly"
+msgstr "'%s' -> '%s' kopyalanamadı; aralıklı çıkış düzgün çalışmayabilir"
+
+#: builtin/worktree.c:268
+#, c-format
+msgid "failed to copy worktree config from '%s' to '%s'"
+msgstr "çalışma ağacı yapılandırması '%s' -> '%s' konumuna kopyalanamadı"
+
+#: builtin/worktree.c:280 builtin/worktree.c:285
+#, c-format
+msgid "failed to unset '%s' in '%s'"
+msgstr "'%s' ayarı, '%s' içinde kaldırılamadı"
+
+#: builtin/worktree.c:356
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "'%s' dizini oluşturulamadı"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:378
 msgid "initializing"
 msgstr "ilklendiriliyor"
 
-#: builtin/worktree.c:420 builtin/worktree.c:426
+#: builtin/worktree.c:492 builtin/worktree.c:498
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "Çalışma ağacı hazırlanıyor (yeni dal '%s')"
 
-#: builtin/worktree.c:422
+#: builtin/worktree.c:494
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr "Çalışma ağacı hazırlanıyor ('%s' dalı sıfırlanıyor; %s konumundaydı)"
 
-#: builtin/worktree.c:431
+#: builtin/worktree.c:503
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "Çalışma ağacı hazırlanıyor ('%s' çıkış yapılıyor)"
 
-#: builtin/worktree.c:437
+#: builtin/worktree.c:509
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Çalışma ağacı hazırlanıyor (ayrık HEAD %s)"
 
-#: builtin/worktree.c:482
+#: builtin/worktree.c:554
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr "diğer çalışma ağacında çıkış yapılmış olsa bile <dal> çıkışını yap"
 
-#: builtin/worktree.c:485
+#: builtin/worktree.c:557
 msgid "create a new branch"
 msgstr "yeni bir dal oluştur"
 
-#: builtin/worktree.c:487
+#: builtin/worktree.c:559
 msgid "create or reset a branch"
 msgstr "yeni bir dal oluştur veya sıfırla"
 
-#: builtin/worktree.c:489
+#: builtin/worktree.c:561
 msgid "populate the new working tree"
 msgstr "yeni çalışma ağacını doldur"
 
-#: builtin/worktree.c:490
+#: builtin/worktree.c:562
 msgid "keep the new working tree locked"
 msgstr "yeni çalışma ağacını kilitli tut"
 
-#: builtin/worktree.c:492 builtin/worktree.c:729
+#: builtin/worktree.c:564 builtin/worktree.c:809
 msgid "reason for locking"
 msgstr "kilitleme nedeni"
 
-#: builtin/worktree.c:495
+#: builtin/worktree.c:567
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "izleme kipini ayarla (bkz: git-branch(1))"
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:570
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "yeni dalın adını bir uzak izleme dalıyla eşleştirmeyi dene"
 
-#: builtin/worktree.c:512
+#: builtin/worktree.c:584
 msgid "added with --lock"
 msgstr "--lock ile eklendi"
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:646
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "--[no-]track yalnızca yeni bir dal oluşturulmuşsa kullanılabilir"
 
-#: builtin/worktree.c:691
+#: builtin/worktree.c:766
 msgid "show extended annotations and reasons, if available"
 msgstr "varsa genişletilmiş açıklamaları ve nedenleri göster"
 
-#: builtin/worktree.c:693
+#: builtin/worktree.c:768
 msgid "add 'prunable' annotation to worktrees older than <time>"
 msgstr "<zaman>'dan eski çalışma ağaçlarına 'budanabilir' açıklama ekle"
 
-#: builtin/worktree.c:741 builtin/worktree.c:774 builtin/worktree.c:848
-#: builtin/worktree.c:972
+#: builtin/worktree.c:770
+msgid "terminate records with a NUL character"
+msgstr "kayıtları bir NUL karakteriyle sonlandır"
+
+#: builtin/worktree.c:821 builtin/worktree.c:854 builtin/worktree.c:928
+#: builtin/worktree.c:1052
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "'%s' bir çalışma ağacı değil"
 
-#: builtin/worktree.c:743 builtin/worktree.c:776
+#: builtin/worktree.c:823 builtin/worktree.c:856
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "Ana çalışma ağacı kilitlenemez veya kilidi açılamaz"
 
-#: builtin/worktree.c:748
+#: builtin/worktree.c:828
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "'%s' halihazırda kilitli, nedeni: %s"
 
-#: builtin/worktree.c:750
+#: builtin/worktree.c:830
 #, c-format
 msgid "'%s' is already locked"
 msgstr "'%s' halihazırda kilitli"
 
-#: builtin/worktree.c:778
+#: builtin/worktree.c:858
 #, c-format
 msgid "'%s' is not locked"
 msgstr "'%s' kilitli değil"
 
-#: builtin/worktree.c:819
+#: builtin/worktree.c:899
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr "altmodül içeren çalışma ağaçları taşınamaz veya kaldırılamaz"
 
-#: builtin/worktree.c:827
+#: builtin/worktree.c:907
 msgid "force move even if worktree is dirty or locked"
 msgstr "çalışma ağacı kirli veya kilitli olsa bile zorla taşı"
 
-#: builtin/worktree.c:850 builtin/worktree.c:974
+#: builtin/worktree.c:930 builtin/worktree.c:1054
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "'%s' bir ana çalışma ağacı"
 
-#: builtin/worktree.c:855
+#: builtin/worktree.c:935
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "hedef adı şuradan anlaşılamadı: '%s'"
 
-#: builtin/worktree.c:868
+#: builtin/worktree.c:948
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -24126,7 +24676,7 @@ msgstr ""
 "kilitli bir çalışma ağacı taşınamıyor, kilit nedeni: %s\n"
 "geçersiz kılmak için 'move -f -f' kullanın veya önce kilidini açın"
 
-#: builtin/worktree.c:870
+#: builtin/worktree.c:950
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -24134,38 +24684,38 @@ msgstr ""
 "kilitli bir çalışma ağacı taşınamıyor;\n"
 "geçersiz kılmak için 'move -f -f' kullanın veya önce kilidini açın"
 
-#: builtin/worktree.c:873
+#: builtin/worktree.c:953
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "doğrulama başarısız, çalışma ağacı taşınamıyor: %s"
 
-#: builtin/worktree.c:878
+#: builtin/worktree.c:958
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "'%s' -> '%s' taşıması başarısız"
 
-#: builtin/worktree.c:924
+#: builtin/worktree.c:1004
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "'%s' üzerinde 'git status' çalıştırılamadı"
 
-#: builtin/worktree.c:928
+#: builtin/worktree.c:1008
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
 "'%s' değiştirilmiş veya izlenmeyen dosyalar içeriyor, silmek için --force "
 "kullanın"
 
-#: builtin/worktree.c:933
+#: builtin/worktree.c:1013
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "'%s' üzerinde 'git status' çalıştırılamadı, kod %d"
 
-#: builtin/worktree.c:956
+#: builtin/worktree.c:1036
 msgid "force removal even if worktree is dirty or locked"
 msgstr "çalışma ağacı kirli veya kilitli olsa bile zorla kaldır"
 
-#: builtin/worktree.c:979
+#: builtin/worktree.c:1059
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -24174,7 +24724,7 @@ msgstr ""
 "kilitli bir çalışma ağacı kaldırılamıyor, kilit nedeni: %s\n"
 "geçersiz kılmak için 'remove -f -f' kullanın veya önce kilidini açın"
 
-#: builtin/worktree.c:981
+#: builtin/worktree.c:1061
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -24182,17 +24732,17 @@ msgstr ""
 "kilitli bir çalışma ağacı kaldırılamıyor;\n"
 "geçersiz kılmak için 'remove -f -f' kullanın veya önce kilidini açın"
 
-#: builtin/worktree.c:984
+#: builtin/worktree.c:1064
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "doğrulama başarısız, çalışma ağacı kaldırılamıyor: %s"
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:1088
 #, c-format
 msgid "repair: %s: %s"
 msgstr "şunu onar %s: %s"
 
-#: builtin/worktree.c:1011
+#: builtin/worktree.c:1091
 #, c-format
 msgid "error: %s: %s"
 msgstr "hata: %s: %s"
@@ -24297,29 +24847,29 @@ msgstr "%s için boş arma"
 msgid "recursive alias: %s"
 msgstr "özyineli arma: %s"
 
-#: git.c:479
+#: git.c:480
 msgid "write failure on standard output"
 msgstr "standart çıktı'da yazma hatası"
 
-#: git.c:481
+#: git.c:482
 msgid "unknown write failure on standard output"
 msgstr "standart çıktı'da bilinmeyen yazma hatası"
 
-#: git.c:483
+#: git.c:484
 msgid "close failed on standard output"
 msgstr "standart çıktı'da kapatma başarısız"
 
-#: git.c:835
+#: git.c:838
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr "arma döngüsü algılandı: '%s' genişletilmesi sonlanmıyor:%s"
 
-#: git.c:885
+#: git.c:888
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "%s bir yerleşik olarak ele alınamıyor"
 
-#: git.c:898
+#: git.c:901
 #, c-format
 msgid ""
 "usage: %s\n"
@@ -24328,13 +24878,13 @@ msgstr ""
 "kullanım: %s\n"
 "\n"
 
-#: git.c:918
+#: git.c:921
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr ""
 "'%s' armasının genişletilmesi başarısız oldu; '%s' bir git komutu değil\n"
 
-#: git.c:930
+#: git.c:933
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "'%s' komutu çalıştırılamadı: %s\n"
@@ -24420,7 +24970,7 @@ msgstr "sunucu iş parçacığı havuzundaki iş parçacığı sayısı"
 
 #: t/helper/test-simple-ipc.c:600
 msgid "seconds to wait for daemon to start or stop"
-msgstr "arka plan servisinin başlaaması veya durması için beklenecek saniye"
+msgstr "ardalan sürecinin başlaması veya durması için beklenecek saniye"
 
 #: t/helper/test-simple-ipc.c:602
 msgid "number of bytes"
@@ -24490,140 +25040,140 @@ msgstr ""
 " şu istendi: %s\n"
 "   yönlenen: %s"
 
-#: remote-curl.c:183
+#: remote-curl.c:184
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr "push-option değerinde geçersiz tırnak içine alım: '%s'"
 
-#: remote-curl.c:304
+#: remote-curl.c:308
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr "%sinfo/refs geçerli değil: bu bir git deposu mu?"
 
-#: remote-curl.c:405
+#: remote-curl.c:409
 msgid "invalid server response; expected service, got flush packet"
 msgstr "geçersiz sunucu yanıtı; servis bekleniyordu, floş paketi alındı"
 
-#: remote-curl.c:436
+#: remote-curl.c:440
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr "geçersiz sunucu yanıtı; '%s' alındı"
 
-#: remote-curl.c:496
+#: remote-curl.c:500
 #, c-format
 msgid "repository '%s' not found"
 msgstr "'%s' deposu bulunamadı"
 
-#: remote-curl.c:500
+#: remote-curl.c:504
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr "'%s' için kimlik doğrulaması başarısız"
 
-#: remote-curl.c:504
+#: remote-curl.c:508
 #, c-format
 msgid "unable to access '%s' with http.pinnedPubkey configuration: %s"
 msgstr "'%s', http.pinnedPubkey yapılandırması ile erişilemiyor: %s"
 
-#: remote-curl.c:508
+#: remote-curl.c:512
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "'%s' erişilemiyor: %s"
 
-#: remote-curl.c:514
+#: remote-curl.c:518
 #, c-format
 msgid "redirecting to %s"
 msgstr "şuraya yeniden yönlendiriliyor: %s"
 
-#: remote-curl.c:645
+#: remote-curl.c:649
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr "dosya sonuna dikkat edilmiyorsa dosya sonu olmamalıdır"
 
-#: remote-curl.c:657
+#: remote-curl.c:661
 msgid "remote server sent unexpected response end packet"
 msgstr "uzak sunucu beklenmedik yanıt sonu paketi gönderdi"
 
-#: remote-curl.c:726
+#: remote-curl.c:730
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr ""
 "rpc sonrası verisi geri sarılamıyor - http.postBuffer'ı artırmayı deneyin"
 
-#: remote-curl.c:755
+#: remote-curl.c:759
 #, c-format
 msgid "remote-curl: bad line length character: %.4s"
 msgstr "remote-curl: hatalı satır uzunluğu karakteri: %.4s"
 
-#: remote-curl.c:757
+#: remote-curl.c:761
 msgid "remote-curl: unexpected response end packet"
 msgstr "remote-curl: beklenmedik yanıt sonu paketi"
 
-#: remote-curl.c:833
+#: remote-curl.c:837
 #, c-format
 msgid "RPC failed; %s"
 msgstr "RPC başarısız oldu; %s"
 
-#: remote-curl.c:873
+#: remote-curl.c:877
 msgid "cannot handle pushes this big"
 msgstr "bu kadar büyük itmeler ele alınamıyor"
 
-#: remote-curl.c:986
+#: remote-curl.c:990
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr "istek söndürülemiyor; 'zlib deflate' hatası %d"
 
-#: remote-curl.c:990
+#: remote-curl.c:994
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr "istek söndürülemiyor; 'zlib end' hatası %d"
 
-#: remote-curl.c:1040
+#: remote-curl.c:1044
 #, c-format
 msgid "%d bytes of length header were received"
 msgstr "üstbilginin %d baytı alındı"
 
-#: remote-curl.c:1042
+#: remote-curl.c:1046
 #, c-format
 msgid "%d bytes of body are still expected"
 msgstr "gövdenin %d baytı hâlâ bekleniyor"
 
-#: remote-curl.c:1131
+#: remote-curl.c:1135
 msgid "dumb http transport does not support shallow capabilities"
 msgstr "programlanamayan http taşıyıcısı sığ işlevleri desteklemiyor"
 
-#: remote-curl.c:1146
+#: remote-curl.c:1150
 msgid "fetch failed."
 msgstr "getirme başarısız."
 
-#: remote-curl.c:1192
+#: remote-curl.c:1198
 msgid "cannot fetch by sha1 over smart http"
 msgstr "akıllı http üzerinden sha1 ile getirme yapılamıyor"
 
-#: remote-curl.c:1236 remote-curl.c:1242
+#: remote-curl.c:1242 remote-curl.c:1248
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr "protokol hatası: sha/ref bekleniyordu, '%s' alındı"
 
-#: remote-curl.c:1254 remote-curl.c:1372
+#: remote-curl.c:1260 remote-curl.c:1378
 #, c-format
 msgid "http transport does not support %s"
 msgstr "http taşıyıcısı %s desteklemiyor"
 
-#: remote-curl.c:1290
+#: remote-curl.c:1296
 msgid "git-http-push failed"
 msgstr "git-http-push başarısız"
 
-#: remote-curl.c:1478
+#: remote-curl.c:1485
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr "remote-curl: kullanım: git remote-curl <uzak-konum> [<url>]"
 
-#: remote-curl.c:1510
+#: remote-curl.c:1517
 msgid "remote-curl: error reading command stream from git"
 msgstr "remote-curl: git'ten komut akışı okunurken hata"
 
-#: remote-curl.c:1517
+#: remote-curl.c:1524
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr "remote-curl: yerel bir depo olmadan getirme yapılmaya çalışıldı"
 
-#: remote-curl.c:1558
+#: remote-curl.c:1565
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr "remote-curl: git'ten bilinmeyen komut '%s'"
@@ -24636,122 +25186,122 @@ msgstr "bir çalışma dizini gerekiyor"
 msgid "could not find enlistment root"
 msgstr "gönüllü yazılma kaydı bulunamıyor"
 
-#: contrib/scalar/scalar.c:89 contrib/scalar/scalar.c:351
-#: contrib/scalar/scalar.c:436 contrib/scalar/scalar.c:579
+#: contrib/scalar/scalar.c:89 contrib/scalar/scalar.c:350
+#: contrib/scalar/scalar.c:435 contrib/scalar/scalar.c:578
 #, c-format
 msgid "could not switch to '%s'"
 msgstr "şuraya geçilemedi: '%s'"
 
-#: contrib/scalar/scalar.c:180
+#: contrib/scalar/scalar.c:179
 #, c-format
 msgid "could not configure %s=%s"
 msgstr "%s=%s yapılandırılamadı"
 
-#: contrib/scalar/scalar.c:198
+#: contrib/scalar/scalar.c:197
 msgid "could not configure log.excludeDecoration"
 msgstr "log.excludeDecoration yapılandırılamadı"
 
-#: contrib/scalar/scalar.c:219
+#: contrib/scalar/scalar.c:218
 msgid "Scalar enlistments require a worktree"
 msgstr "Scalar gönüllü kayıtları bir çalışma ağacı gerektiriyor"
 
-#: contrib/scalar/scalar.c:311
+#: contrib/scalar/scalar.c:310
 #, c-format
 msgid "remote HEAD is not a branch: '%.*s'"
 msgstr "uzak konum HEAD'i bir dal değil: '%.*s'"
 
-#: contrib/scalar/scalar.c:317
+#: contrib/scalar/scalar.c:316
 msgid "failed to get default branch name from remote; using local default"
 msgstr ""
 "uzak konumdan öntanımlı dal adı alınamadı; yerel öntanımlı kullanılıyor"
 
-#: contrib/scalar/scalar.c:330
+#: contrib/scalar/scalar.c:329
 msgid "failed to get default branch name"
 msgstr "öntanımlı dal adı alınamadı"
 
-#: contrib/scalar/scalar.c:341
+#: contrib/scalar/scalar.c:340
 msgid "failed to unregister repository"
 msgstr "depo kaydı silinemedi"
 
-#: contrib/scalar/scalar.c:356
+#: contrib/scalar/scalar.c:355
 msgid "failed to delete enlistment directory"
 msgstr "gönüllü kayıt dizini silinemedi"
 
-#: contrib/scalar/scalar.c:376
+#: contrib/scalar/scalar.c:375
 msgid "branch to checkout after clone"
 msgstr "klonlama sonrası çıkış yapılacak dal"
 
-#: contrib/scalar/scalar.c:378
+#: contrib/scalar/scalar.c:377
 msgid "when cloning, create full working directory"
 msgstr "klonlama sırasında tam çalışma dizini oluştur"
 
-#: contrib/scalar/scalar.c:380
+#: contrib/scalar/scalar.c:379
 msgid "only download metadata for the branch that will be checked out"
 msgstr "yalnızca çıkış yapılacak dalın üstverisini indir"
 
-#: contrib/scalar/scalar.c:385
+#: contrib/scalar/scalar.c:384
 msgid "scalar clone [<options>] [--] <repo> [<dir>]"
 msgstr "scalar clone [<seçenekler>] [--] <depo> [<dizin>]"
 
-#: contrib/scalar/scalar.c:410
+#: contrib/scalar/scalar.c:409
 #, c-format
 msgid "cannot deduce worktree name from '%s'"
 msgstr "'%s' ögesinden çalışma ağacı adı ortaya çıkarılamıyor"
 
-#: contrib/scalar/scalar.c:419
+#: contrib/scalar/scalar.c:418
 #, c-format
 msgid "directory '%s' exists already"
 msgstr "'%s' dizini halihazırda var"
 
-#: contrib/scalar/scalar.c:446
+#: contrib/scalar/scalar.c:445
 #, c-format
 msgid "failed to get default branch for '%s'"
 msgstr "'%s' için öntanımlı dal alınamadı"
 
-#: contrib/scalar/scalar.c:457
+#: contrib/scalar/scalar.c:456
 #, c-format
 msgid "could not configure remote in '%s'"
 msgstr "'%s' içindeki uzak konum yapılandırılamadı"
 
-#: contrib/scalar/scalar.c:466
+#: contrib/scalar/scalar.c:465
 #, c-format
 msgid "could not configure '%s'"
 msgstr "'%s' yapılandırılamadı"
 
-#: contrib/scalar/scalar.c:469
+#: contrib/scalar/scalar.c:468
 msgid "partial clone failed; attempting full clone"
 msgstr "kısımsal klonlama başarısız; tam klonlama deneniyor"
 
-#: contrib/scalar/scalar.c:473
+#: contrib/scalar/scalar.c:472
 msgid "could not configure for full clone"
 msgstr "tam klonlama için yapılandırılamadı"
 
-#: contrib/scalar/scalar.c:505
+#: contrib/scalar/scalar.c:504
 msgid "`scalar list` does not take arguments"
 msgstr "'scalar list' argüman almıyor"
 
-#: contrib/scalar/scalar.c:518
+#: contrib/scalar/scalar.c:517
 msgid "scalar register [<enlistment>]"
 msgstr "scalar register [<gönüllükayıt>]"
 
-#: contrib/scalar/scalar.c:545
+#: contrib/scalar/scalar.c:544
 msgid "reconfigure all registered enlistments"
 msgstr "tüm kaydı yapılmış gönüllü kayıtları yeniden yapılandır"
 
-#: contrib/scalar/scalar.c:549
+#: contrib/scalar/scalar.c:548
 msgid "scalar reconfigure [--all | <enlistment>]"
 msgstr "scalar reconfigure [--all | <gönüllükayıt>]"
 
-#: contrib/scalar/scalar.c:567
+#: contrib/scalar/scalar.c:566
 msgid "--all or <enlistment>, but not both"
 msgstr "--all veya <gönüllükayıt>; ancak ikisi değil"
 
-#: contrib/scalar/scalar.c:582
+#: contrib/scalar/scalar.c:581
 #, c-format
 msgid "git repository gone in '%s'"
 msgstr "git deposu '%s' içinde gitti"
 
-#: contrib/scalar/scalar.c:622
+#: contrib/scalar/scalar.c:621
 msgid ""
 "scalar run <task> [<enlistment>]\n"
 "Tasks:\n"
@@ -24759,42 +25309,55 @@ msgstr ""
 "scalar run <görev> [<gönüllükayıt>]\n"
 "Görevler:\n"
 
-#: contrib/scalar/scalar.c:640
+#: contrib/scalar/scalar.c:639
 #, c-format
 msgid "no such task: '%s'"
 msgstr "böyle bir görev yok: '%s'"
 
-#: contrib/scalar/scalar.c:690
+#: contrib/scalar/scalar.c:689
 msgid "scalar unregister [<enlistment>]"
 msgstr "scalar unregister [<enlistment>]"
 
-#: contrib/scalar/scalar.c:737
+#: contrib/scalar/scalar.c:736
 msgid "scalar delete <enlistment>"
 msgstr "scalar delete <gönüllükayıt>"
 
-#: contrib/scalar/scalar.c:752
+#: contrib/scalar/scalar.c:751
 msgid "refusing to delete current working directory"
 msgstr "geçerli çalışma dizinini silme reddediliyor"
 
-#: contrib/scalar/scalar.c:767
+#: contrib/scalar/scalar.c:766
 msgid "include Git version"
 msgstr "Git sürümünü içer"
 
-#: contrib/scalar/scalar.c:769
+#: contrib/scalar/scalar.c:768
 msgid "include Git's build options"
 msgstr "Git'in yapı seçeneklerini içer"
 
-#: contrib/scalar/scalar.c:773
+#: contrib/scalar/scalar.c:772
 msgid "scalar verbose [-v | --verbose] [--build-options]"
 msgstr "scalar verbose [-v | --verbose] [--build-options]"
 
+#: contrib/scalar/scalar.c:813
+msgid "-C requires a <directory>"
+msgstr "-C, bir <dizin> gerektiriyor"
+
+#: contrib/scalar/scalar.c:815
+#, c-format
+msgid "could not change to '%s'"
+msgstr "'%s' olarak değiştirilemedi"
+
 #: contrib/scalar/scalar.c:821
+msgid "-c requires a <key>=<value> argument"
+msgstr "-c, bir <anahtar>=<değer> argümanı gerektiriyor"
+
+#: contrib/scalar/scalar.c:839
 msgid ""
-"scalar <command> [<options>]\n"
+"scalar [-C <directory>] [-c <key>=<value>] <command> [<options>]\n"
 "\n"
 "Commands:\n"
 msgstr ""
-"scalar <komut> [<seçenekler>]\n"
+"scalar [-C <dizin>] [-c <anahtar>=<değer>] <komut> [<seçenekler>]\n"
 "\n"
 "Komutlar:\n"
 
@@ -24806,43 +25369,43 @@ msgstr "derleyici bilgisi mevcut değil\n"
 msgid "no libc information available\n"
 msgstr "libc bilgisi mevcut değil\n"
 
-#: list-objects-filter-options.h:94
+#: list-objects-filter-options.h:126
 msgid "args"
 msgstr "argümanlar"
 
-#: list-objects-filter-options.h:95
+#: list-objects-filter-options.h:127
 msgid "object filtering"
 msgstr "nesne süzümü"
 
-#: parse-options.h:183
+#: parse-options.h:188
 msgid "expiry-date"
 msgstr "son kullanım tarihi"
 
-#: parse-options.h:197
+#: parse-options.h:202
 msgid "no-op (backward compatibility)"
 msgstr "işlem yok (geriye dönük uyumluluk için)"
 
-#: parse-options.h:310
+#: parse-options.h:341
 msgid "be more verbose"
 msgstr "daha ayrıntılı anlat"
 
-#: parse-options.h:312
+#: parse-options.h:343
 msgid "be more quiet"
 msgstr "daha sessiz ol"
 
-#: parse-options.h:318
+#: parse-options.h:349
 msgid "use <n> digits to display object names"
 msgstr "nesne adlarını görüntülemek için <n> basamak kullan"
 
-#: parse-options.h:337
+#: parse-options.h:368
 msgid "how to strip spaces and #comments from message"
 msgstr "iletiden boşlukları ve #yorumları çıkart"
 
-#: parse-options.h:338
+#: parse-options.h:369
 msgid "read pathspec from file"
 msgstr "yol belirtecini dosyadan oku"
 
-#: parse-options.h:339
+#: parse-options.h:370
 msgid ""
 "with --pathspec-from-file, pathspec elements are separated with NUL character"
 msgstr ""
@@ -24995,7 +25558,7 @@ msgstr "Bir CVS çıkışına tek bir işlemeyi dışa aktar"
 
 #: command-list.h:83
 msgid "Salvage your data out of another SCM people love to hate"
-msgstr "'Tiskindiğiniz' başka bir KDY'den verileri kurtar"
+msgstr "'Tiskindiğiniz' başka bir KDY'den verinizi kurtarın"
 
 #: command-list.h:84
 msgid "A CVS server emulator for Git"
@@ -25095,447 +25658,451 @@ msgid "Display help information about Git"
 msgstr "Git yardım bilgisini görüntüle"
 
 #: command-list.h:108
+msgid "Run git hooks"
+msgstr "Git kancalarını çalıştır"
+
+#: command-list.h:109
 msgid "Server side implementation of Git over HTTP"
 msgstr "Git'in HTTP üzerinden sunucu tarafı uygulaması"
 
-#: command-list.h:109
+#: command-list.h:110
 msgid "Download from a remote Git repository via HTTP"
 msgstr "HTTP üzerinden uzak bir Git deposundan indir"
 
-#: command-list.h:110
+#: command-list.h:111
 msgid "Push objects over HTTP/DAV to another repository"
 msgstr "Nesneleri HTTP/DAV üzerinden başka bir depoya it"
 
-#: command-list.h:111
+#: command-list.h:112
 msgid "Send a collection of patches from stdin to an IMAP folder"
 msgstr "stdin'den bir IMAP klasörüne bir yama derlemesi gönder"
 
-#: command-list.h:112
+#: command-list.h:113
 msgid "Build pack index file for an existing packed archive"
 msgstr "Mevcut paketli bir arşiv için paket indeks dosyası yap"
 
-#: command-list.h:113
+#: command-list.h:114
 msgid "Create an empty Git repository or reinitialize an existing one"
 msgstr "Boş bir Git deposu oluştur veya olanı yeniden ilklendir"
 
-#: command-list.h:114
+#: command-list.h:115
 msgid "Instantly browse your working repository in gitweb"
 msgstr "gitweb'deki çalışma deposuna anında göz at"
 
-#: command-list.h:115
+#: command-list.h:116
 msgid "Add or parse structured information in commit messages"
 msgstr "İşleme iletilerine düzenli bilgi ekle veya ayrıştır"
 
-#: command-list.h:116
+#: command-list.h:117
 msgid "Show commit logs"
 msgstr "İşleme günlüklerini göster"
 
-#: command-list.h:117
+#: command-list.h:118
 msgid "Show information about files in the index and the working tree"
 msgstr "İndeks ve çalışma ağacındaki dosya bilgilerini göster"
 
-#: command-list.h:118
+#: command-list.h:119
 msgid "List references in a remote repository"
 msgstr "Uzak bir depodaki başvuruları listele"
 
-#: command-list.h:119
+#: command-list.h:120
 msgid "List the contents of a tree object"
 msgstr "Bir ağaç nesnesinin içeriğini listele"
 
-#: command-list.h:120
+#: command-list.h:121
 msgid "Extracts patch and authorship from a single e-mail message"
 msgstr "E-posta iletisinden yama ve yazar bilgisini çıkart"
 
-#: command-list.h:121
+#: command-list.h:122
 msgid "Simple UNIX mbox splitter program"
 msgstr "Yalın UNIX mbox bölücü yazılımı"
 
-#: command-list.h:122
+#: command-list.h:123
 msgid "Run tasks to optimize Git repository data"
 msgstr "Git depo verisini eniyilemek için görevler çalıştır"
 
-#: command-list.h:123
+#: command-list.h:124
 msgid "Join two or more development histories together"
 msgstr "İki veya daha fazla geliştirme geçmişini birleştir"
 
-#: command-list.h:124
+#: command-list.h:125
 msgid "Find as good common ancestors as possible for a merge"
 msgstr "Birleştirme için olabildiğince en iyi ortak ataları bul"
 
-#: command-list.h:125
+#: command-list.h:126
 msgid "Run a three-way file merge"
 msgstr "Bir 3 yönlü dosya birleştirmesi çalıştır"
 
-#: command-list.h:126
+#: command-list.h:127
 msgid "Run a merge for files needing merging"
 msgstr "Birleştirilmesi gereken dosyaları birleştir"
 
-#: command-list.h:127
+#: command-list.h:128
 msgid "The standard helper program to use with git-merge-index"
 msgstr "Bu yardımcı program git-merge-index kullanımı içindir"
 
-#: command-list.h:128
+#: command-list.h:129
 msgid "Show three-way merge without touching index"
 msgstr "İndekse dokunmadan üçlü birleştirmeyi göster"
 
-#: command-list.h:129
+#: command-list.h:130
 msgid "Run merge conflict resolution tools to resolve merge conflicts"
 msgstr "Çakışmaları çözmek için çözüm araçlarını çalıştır"
 
-#: command-list.h:130
+#: command-list.h:131
 msgid "Creates a tag object with extra validation"
 msgstr "Ek doğrulamalı bir etiket nesnesi oluştur"
 
-#: command-list.h:131
+#: command-list.h:132
 msgid "Build a tree-object from ls-tree formatted text"
 msgstr "ls-tree biçimli metinden bir ağaç nesnesi yap"
 
-#: command-list.h:132
+#: command-list.h:133
 msgid "Write and verify multi-pack-indexes"
 msgstr "multi-pack-index doğrula ve yaz"
 
-#: command-list.h:133
+#: command-list.h:134
 msgid "Move or rename a file, a directory, or a symlink"
 msgstr "Dosya, dizin veya sembolik bağları taşı/yeniden adlandır"
 
-#: command-list.h:134
+#: command-list.h:135
 msgid "Find symbolic names for given revs"
 msgstr "Verilen revizyonlar için sembolik adları bul"
 
-#: command-list.h:135
+#: command-list.h:136
 msgid "Add or inspect object notes"
 msgstr "Nesne notları ekle veya incele"
 
-#: command-list.h:136
+#: command-list.h:137
 msgid "Import from and submit to Perforce repositories"
 msgstr "Perforce depolarından içe aktar ve onlara gönder"
 
-#: command-list.h:137
+#: command-list.h:138
 msgid "Create a packed archive of objects"
 msgstr "Paketlenmiş bir nesne arşivi oluştur"
 
-#: command-list.h:138
+#: command-list.h:139
 msgid "Find redundant pack files"
 msgstr "Gereksiz paket dosyalarını bul"
 
-#: command-list.h:139
+#: command-list.h:140
 msgid "Pack heads and tags for efficient repository access"
 msgstr "Etkili depo erişimi için dal uçları ve etiketler paketle"
 
-#: command-list.h:140
+#: command-list.h:141
 msgid "Compute unique ID for a patch"
 msgstr "Bir yama için eşi olmayan numara hesapla"
 
-#: command-list.h:141
+#: command-list.h:142
 msgid "Prune all unreachable objects from the object database"
 msgstr "Ulaşılamayan tüm nesneleri nesne veritabanından buda"
 
-#: command-list.h:142
+#: command-list.h:143
 msgid "Remove extra objects that are already in pack files"
 msgstr "Halihazırda paket dosyalarında olan ek nesneleri kaldır"
 
-#: command-list.h:143
+#: command-list.h:144
 msgid "Fetch from and integrate with another repository or a local branch"
 msgstr "Başka bir depo veya yerel daldan getir ve entegre et"
 
-#: command-list.h:144
+#: command-list.h:145
 msgid "Update remote refs along with associated objects"
 msgstr "İlişkin nesnelerle birlikte uzak başvuruları da güncelle"
 
-#: command-list.h:145
+#: command-list.h:146
 msgid "Applies a quilt patchset onto the current branch"
 msgstr "Geçerli dala bir \"Quilt\" yama seti uygula"
 
-#: command-list.h:146
+#: command-list.h:147
 msgid "Compare two commit ranges (e.g. two versions of a branch)"
 msgstr "İki işleme erimini karşılaştır (bir dalın iki sürümü)"
 
-#: command-list.h:147
+#: command-list.h:148
 msgid "Reads tree information into the index"
 msgstr "Ağaç bilgisini indekse okur"
 
-#: command-list.h:148
+#: command-list.h:149
 msgid "Reapply commits on top of another base tip"
 msgstr "İşlemeleri başka bir temel ucu üzerine uygula"
 
-#: command-list.h:149
+#: command-list.h:150
 msgid "Receive what is pushed into the repository"
 msgstr "Depoya ne itildiyse al"
 
-#: command-list.h:150
+#: command-list.h:151
 msgid "Manage reflog information"
 msgstr "Başvuru günlüğü bilgisini yönet"
 
-#: command-list.h:151
+#: command-list.h:152
 msgid "Manage set of tracked repositories"
 msgstr "İzlenen depolar setini yönet"
 
-#: command-list.h:152
+#: command-list.h:153
 msgid "Pack unpacked objects in a repository"
 msgstr "Bir depodaki paketlenmemiş nesneleri paketle"
 
-#: command-list.h:153
+#: command-list.h:154
 msgid "Create, list, delete refs to replace objects"
 msgstr "Nesne değiştirmek için başvurular oluştur, sil, listele"
 
-#: command-list.h:154
+#: command-list.h:155
 msgid "Generates a summary of pending changes"
 msgstr "Bekleyen değişikliklerin bir özetini çıkart"
 
-#: command-list.h:155
+#: command-list.h:156
 msgid "Reuse recorded resolution of conflicted merges"
 msgstr "Çakışan birleştirmelerin kayıtlı çözümlerini yen. kullan"
 
-#: command-list.h:156
+#: command-list.h:157
 msgid "Reset current HEAD to the specified state"
 msgstr "Geçerli HEAD'i belirtilen duruma sıfırla"
 
-#: command-list.h:157
+#: command-list.h:158
 msgid "Restore working tree files"
 msgstr "Çalışma ağacı dosyalarını eski durumuna getir"
 
-#: command-list.h:158
+#: command-list.h:159
 msgid "Lists commit objects in reverse chronological order"
 msgstr "İşleme nesnelerini ters kronolojik sırada listele"
 
-#: command-list.h:159
+#: command-list.h:160
 msgid "Pick out and massage parameters"
 msgstr "Parametreleri al ve üzerinde çalış"
 
-#: command-list.h:160
+#: command-list.h:161
 msgid "Revert some existing commits"
 msgstr "Bazı var olan işlemeleri geri al"
 
-#: command-list.h:161
+#: command-list.h:162
 msgid "Remove files from the working tree and from the index"
 msgstr "Dosyaları çalışma ağacından ve indeksten kaldır"
 
-#: command-list.h:162
+#: command-list.h:163
 msgid "Send a collection of patches as emails"
 msgstr "Bir yama derlemesini e-posta olarak gönder"
 
-#: command-list.h:163
+#: command-list.h:164
 msgid "Push objects over Git protocol to another repository"
 msgstr "Nesneleri Git protokolü üzerinden başka bir depoya it"
 
-#: command-list.h:164
+#: command-list.h:165
 msgid "Git's i18n setup code for shell scripts"
 msgstr "Kabuk betikleri için Git'in i18n kurulum kodu"
 
-#: command-list.h:165
+#: command-list.h:166
 msgid "Common Git shell script setup code"
 msgstr "Ortak Git kabuk betiği kurulum kodu"
 
-#: command-list.h:166
+#: command-list.h:167
 msgid "Restricted login shell for Git-only SSH access"
 msgstr "Yalnızca Git SSH erişimi için kısıtlandırılmış oturum açma kabuğu"
 
-#: command-list.h:167
+#: command-list.h:168
 msgid "Summarize 'git log' output"
 msgstr "'git log' çıktısını özetle"
 
-#: command-list.h:168
+#: command-list.h:169
 msgid "Show various types of objects"
 msgstr "Çeşitli türlerden nesneleri göster"
 
-#: command-list.h:169
+#: command-list.h:170
 msgid "Show branches and their commits"
 msgstr "Dalları ve onların işlemelerini göster"
 
-#: command-list.h:170
+#: command-list.h:171
 msgid "Show packed archive index"
 msgstr "Paketlenmiş arşiv indeksini göster"
 
-#: command-list.h:171
+#: command-list.h:172
 msgid "List references in a local repository"
 msgstr "Yerel bir depodaki başvuruları listele"
 
-#: command-list.h:172
-msgid "Initialize and modify the sparse-checkout"
-msgstr "Aralıklı çıkışı ilklendir ve güncelle"
-
 #: command-list.h:173
+msgid "Reduce your working tree to a subset of tracked files"
+msgstr "Çalışma ağacını izlenen dosyaların bir alt kümesine küçült"
+
+#: command-list.h:174
 msgid "Add file contents to the staging area"
 msgstr "Dosya içeriğini hazırlama alanına ekle"
 
-#: command-list.h:174
+#: command-list.h:175
 msgid "Stash the changes in a dirty working directory away"
 msgstr "Kirli bir çalışma dizinindeki değişiklikleri zulala"
 
-#: command-list.h:175
+#: command-list.h:176
 msgid "Show the working tree status"
 msgstr "Çalışma ağacı durumunu göster"
 
-#: command-list.h:176
+#: command-list.h:177
 msgid "Remove unnecessary whitespace"
 msgstr "Gereksiz boşlukları kaldır"
 
-#: command-list.h:177
+#: command-list.h:178
 msgid "Initialize, update or inspect submodules"
 msgstr "Altmodülleri ilklendir, güncelle veya incele"
 
-#: command-list.h:178
+#: command-list.h:179
 msgid "Bidirectional operation between a Subversion repository and Git"
 msgstr "Bir Subversion ve Git deposu arasında iki yönlü işlemler"
 
-#: command-list.h:179
+#: command-list.h:180
 msgid "Switch branches"
 msgstr "Dal değiştir"
 
-#: command-list.h:180
+#: command-list.h:181
 msgid "Read, modify and delete symbolic refs"
 msgstr "Sembolik başvuruları oku, düzenle ve sil"
 
-#: command-list.h:181
+#: command-list.h:182
 msgid "Create, list, delete or verify a tag object signed with GPG"
 msgstr "GPG imzalı bir etiket oluştur, sil, listele veya doğrula"
 
-#: command-list.h:182
+#: command-list.h:183
 msgid "Creates a temporary file with a blob's contents"
 msgstr "Bir ikili nesnenin içeriği ile geçici bir dosya oluştur"
 
-#: command-list.h:183
+#: command-list.h:184
 msgid "Unpack objects from a packed archive"
 msgstr "Paketlenmiş bir arşivden nesneleri çıkar"
 
-#: command-list.h:184
+#: command-list.h:185
 msgid "Register file contents in the working tree to the index"
 msgstr "Çalışma ağacındaki dosya içeriğini indekse kaydet"
 
-#: command-list.h:185
+#: command-list.h:186
 msgid "Update the object name stored in a ref safely"
 msgstr "Güvenlice bir başvuruda depolanan nesne adını güncelle"
 
-#: command-list.h:186
+#: command-list.h:187
 msgid "Update auxiliary info file to help dumb servers"
 msgstr ""
 "Programlanamayan sunuculara destek için yardımcı veri dosyasını güncelle"
 
-#: command-list.h:187
+#: command-list.h:188
 msgid "Send archive back to git-archive"
 msgstr "Arşivi git-archive'e geri gönder"
 
-#: command-list.h:188
+#: command-list.h:189
 msgid "Send objects packed back to git-fetch-pack"
 msgstr "Nesneleri git-fetch-pack'e paketlenmiş olarak geri gönder"
 
-#: command-list.h:189
+#: command-list.h:190
 msgid "Show a Git logical variable"
 msgstr "Bir mantıksal Git değişkeni göster"
 
-#: command-list.h:190
+#: command-list.h:191
 msgid "Check the GPG signature of commits"
 msgstr "İşlemelerin GPG imzasını denetle"
 
-#: command-list.h:191
+#: command-list.h:192
 msgid "Validate packed Git archive files"
 msgstr "Paketlenmiş Git arşiv dosyalarını doğrula"
 
-#: command-list.h:192
+#: command-list.h:193
 msgid "Check the GPG signature of tags"
 msgstr "Etiketlerin GPG imzasını doğrula"
 
-#: command-list.h:193
+#: command-list.h:194
 msgid "Show logs with difference each commit introduces"
 msgstr "Günlükleri her işlemenin sunduğu değişikliklerle göster"
 
-#: command-list.h:194
+#: command-list.h:195
 msgid "Manage multiple working trees"
 msgstr "Birden çok çalışma ağacını yönet"
 
-#: command-list.h:195
+#: command-list.h:196
 msgid "Create a tree object from the current index"
 msgstr "Geçerli indeksten bir ağaç nesnesi oluştur"
 
-#: command-list.h:196
+#: command-list.h:197
 msgid "Defining attributes per path"
 msgstr "Öznitelikleri yola göre tanımla"
 
-#: command-list.h:197
+#: command-list.h:198
 msgid "Git command-line interface and conventions"
 msgstr "Git komut satırı arabirimi ve kuralları"
 
-#: command-list.h:198
+#: command-list.h:199
 msgid "A Git core tutorial for developers"
 msgstr "Geliştiriciler için Git çekirdeği eğitmeni"
 
-#: command-list.h:199
+#: command-list.h:200
 msgid "Providing usernames and passwords to Git"
 msgstr "Git'e kullanıcı adları ve parolalar belirt"
 
-#: command-list.h:200
+#: command-list.h:201
 msgid "Git for CVS users"
 msgstr "CVS kullanıcıları için Git"
 
-#: command-list.h:201
+#: command-list.h:202
 msgid "Tweaking diff output"
 msgstr "diff çıktısı için ince ayarlar"
 
-#: command-list.h:202
+#: command-list.h:203
 msgid "A useful minimum set of commands for Everyday Git"
 msgstr "Günlük Git kullanımı için yararlı komutlar"
 
-#: command-list.h:203
+#: command-list.h:204
 msgid "Frequently asked questions about using Git"
 msgstr "Git kullanımı hakkında sıkça sorulan sorular"
 
-#: command-list.h:204
+#: command-list.h:205
 msgid "A Git Glossary"
 msgstr "Git Kavram Dizini"
 
-#: command-list.h:205
+#: command-list.h:206
 msgid "Hooks used by Git"
 msgstr "Git tarafından kullanılan kancalar"
 
-#: command-list.h:206
+#: command-list.h:207
 msgid "Specifies intentionally untracked files to ignore"
 msgstr "Özellikle yok sayılması istenen dosyaları belirt"
 
-#: command-list.h:207
+#: command-list.h:208
 msgid "The Git repository browser"
 msgstr "Git depo tarayıcısı"
 
-#: command-list.h:208
+#: command-list.h:209
 msgid "Map author/committer names and/or E-Mail addresses"
 msgstr "Yazar/İşleyici adlarını ve/veya e-posta adreslerini eşlemle"
 
-#: command-list.h:209
+#: command-list.h:210
 msgid "Defining submodule properties"
 msgstr "Altmodül özelliklerini tanımlama"
 
-#: command-list.h:210
+#: command-list.h:211
 msgid "Git namespaces"
 msgstr "Git ad alanları"
 
-#: command-list.h:211
+#: command-list.h:212
 msgid "Helper programs to interact with remote repositories"
 msgstr "Uzak depolar ile etkileşim için yardımcı programlar"
 
-#: command-list.h:212
+#: command-list.h:213
 msgid "Git Repository Layout"
 msgstr "Git Depo Yerleşimi"
 
-#: command-list.h:213
+#: command-list.h:214
 msgid "Specifying revisions and ranges for Git"
 msgstr "Git için revizyonları ve erimleri belirtme"
 
-#: command-list.h:214
+#: command-list.h:215
 msgid "Mounting one repository inside another"
 msgstr "Bir depoyu bir başkasının içine bağlama"
 
-#: command-list.h:215
+#: command-list.h:216
 msgid "A tutorial introduction to Git"
 msgstr "Git'e Giriş"
 
-#: command-list.h:216
+#: command-list.h:217
 msgid "A tutorial introduction to Git: part two"
 msgstr "Git'e Giriş: Bölüm 2"
 
-#: command-list.h:217
+#: command-list.h:218
 msgid "Git web interface (web frontend to Git repositories)"
 msgstr "Git web arabirimi (Git depoları için web ön ucu)"
 
-#: command-list.h:218
+#: command-list.h:219
 msgid "An overview of recommended workflows with Git"
 msgstr "Önerilen Git çalışma akışlarına genel bakış"
 
@@ -25579,68 +26146,44 @@ msgstr "$pretty_name ile yalın birleştirme deneniyor"
 msgid "Simple merge did not work, trying automatic merge."
 msgstr "Yalın birleştirme işe yaramadı, otomatik birleştirme deneniyor."
 
-#: git-submodule.sh:401
-#, sh-format
-msgid "Unable to find current revision in submodule path '$displaypath'"
-msgstr "'$displaypath' altmodül yolunda geçerli revizyon bulunamadı"
-
-#: git-submodule.sh:411
-#, sh-format
-msgid "Unable to fetch in submodule path '$sm_path'"
-msgstr "'$sm_path' altmodül yolunda getirme yapılamadı"
-
-#: git-submodule.sh:416
-#, sh-format
-msgid ""
-"Unable to find current ${remote_name}/${branch} revision in submodule path "
-"'$sm_path'"
-msgstr ""
-"'$sm_path' altmodül yolunda geçerli ${remote_name}/${branch} revizyonu "
-"bulunamadı"
-
-#: git-submodule.sh:464
-#, sh-format
-msgid "Failed to recurse into submodule path '$displaypath'"
-msgstr "'$displaypath' altmodül yoluna özyinelenemedi"
-
 #: git-sh-setup.sh:89 git-sh-setup.sh:94
 #, sh-format
 msgid "usage: $dashless $USAGE"
 msgstr "kullanım: $dashless $USAGE"
 
-#: git-sh-setup.sh:183
+#: git-sh-setup.sh:182
 #, sh-format
 msgid "Cannot chdir to $cdup, the toplevel of the working tree"
 msgstr "$cdup konumuna chdir yapılamıyor, çalışma ağacının en üst düzeyi"
 
-#: git-sh-setup.sh:192 git-sh-setup.sh:199
+#: git-sh-setup.sh:191 git-sh-setup.sh:198
 #, sh-format
 msgid "fatal: $program_name cannot be used without a working tree."
 msgstr "onulmaz: $program_name bir çalışma ağacı olmadan kullanılamaz."
 
-#: git-sh-setup.sh:213
+#: git-sh-setup.sh:212
 msgid "Cannot rewrite branches: You have unstaged changes."
 msgstr "Dallar yeniden yazılamıyor: Hazırlanmamış değişiklikleriniz var."
 
-#: git-sh-setup.sh:216
+#: git-sh-setup.sh:215
 #, sh-format
 msgid "Cannot $action: You have unstaged changes."
 msgstr "$action yapılamıyor: Hazırlanmamış değişiklikleriniz var."
 
-#: git-sh-setup.sh:227
+#: git-sh-setup.sh:226
 #, sh-format
 msgid "Cannot $action: Your index contains uncommitted changes."
 msgstr "$action yapılamıyor: İndeksinizde işlenmemiş değişiklikleriniz var."
 
-#: git-sh-setup.sh:229
+#: git-sh-setup.sh:228
 msgid "Additionally, your index contains uncommitted changes."
 msgstr "Ek olarak, indeksinizde işlenmemiş değişiklikleriniz var."
 
-#: git-sh-setup.sh:349
+#: git-sh-setup.sh:348
 msgid "You need to run this command from the toplevel of the working tree."
 msgstr "Bu komutu çalışma ağacının en üst düzeyinden çalıştırmanız gerekiyor."
 
-#: git-sh-setup.sh:354
+#: git-sh-setup.sh:353
 msgid "Unable to determine absolute path of git directory"
 msgstr "Git dizininin kesin yolu algılanamıyor"
 
@@ -26323,23 +26866,23 @@ msgstr "ileti 7 bit olarak gönderilemiyor"
 msgid "invalid transfer encoding"
 msgstr "geçersiz aktarım kodlaması"
 
-#: git-send-email.perl:2095
+#: git-send-email.perl:2100
 #, perl-format
 msgid ""
-"fatal: %s: rejected by sendemail-validate hook\n"
+"fatal: %s: rejected by %s hook\n"
 "%s\n"
 "warning: no patches were sent\n"
 msgstr ""
-"onulmaz: %s: sendemail-validate kancası tarafından reddedildi\n"
+"onulmaz: %s: %s kancası tarafından reddedildi\n"
 "%s\n"
 "uyarı: hiçbir yama gönderilmedi\n"
 
-#: git-send-email.perl:2105 git-send-email.perl:2158 git-send-email.perl:2168
+#: git-send-email.perl:2110 git-send-email.perl:2163 git-send-email.perl:2173
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "%s açılamıyor: %s\n"
 
-#: git-send-email.perl:2108
+#: git-send-email.perl:2113
 #, perl-format
 msgid ""
 "fatal: %s:%d is longer than 998 characters\n"
@@ -26348,13 +26891,13 @@ msgstr ""
 "onulmaz: %s:%d, 998 karakterden uzun\n"
 "uyarı: hiçbir yama gönderilmedi\n"
 
-#: git-send-email.perl:2126
+#: git-send-email.perl:2131
 #, perl-format
 msgid "Skipping %s with backup suffix '%s'.\n"
 msgstr "%s, yedek sonek '%s' ile atlanıyor.\n"
 
 #. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:2130
+#: git-send-email.perl:2135
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "%s ögesini gerçekten göndermek istiyor musunuz? [y|N]: "
index 0d5b14438a60c3d1071eba41419adb01f64c92c7..69c3b9315413ada04f9370fe38a7309957337198 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -7,10 +7,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: git v2.35.0 round 2\n"
+"Project-Id-Version: git v2.36.0 round 2\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2022-01-17 08:31+0800\n"
-"PO-Revision-Date: 2022-01-17 14:14+0700\n"
+"POT-Creation-Date: 2022-04-13 14:52+0800\n"
+"PO-Revision-Date: 2022-04-14 15:34+0700\n"
 "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
 "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
 "Language: vi\n"
@@ -21,216 +21,215 @@ msgstr ""
 "X-Language-Team-Website: <http://translationproject.org/team/vi.html>\n"
 "X-Generator: Poedit 3.0.1\n"
 
-#: add-interactive.c:380
+#: add-interactive.c:382
 #, c-format
 msgid "Huh (%s)?"
 msgstr "Hả (%s)?"
 
-#: add-interactive.c:533 add-interactive.c:834 reset.c:65 sequencer.c:3509
-#: sequencer.c:3974 sequencer.c:4136 builtin/rebase.c:1233
-#: builtin/rebase.c:1642
+#: add-interactive.c:535 add-interactive.c:836 reset.c:136 sequencer.c:3505
+#: sequencer.c:3970 sequencer.c:4127 builtin/rebase.c:1261
+#: builtin/rebase.c:1671
 msgid "could not read index"
 msgstr "không thể đọc bảng mục lục"
 
-#: add-interactive.c:588 git-add--interactive.perl:269
+#: add-interactive.c:590 git-add--interactive.perl:269
 #: git-add--interactive.perl:294
 msgid "binary"
 msgstr "nhị phân"
 
-#: add-interactive.c:646 git-add--interactive.perl:278
+#: add-interactive.c:648 git-add--interactive.perl:278
 #: git-add--interactive.perl:332
 msgid "nothing"
 msgstr "không có gì"
 
-#: add-interactive.c:647 git-add--interactive.perl:314
+#: add-interactive.c:649 git-add--interactive.perl:314
 #: git-add--interactive.perl:329
 msgid "unchanged"
 msgstr "không thay đổi"
 
-#: add-interactive.c:684 git-add--interactive.perl:641
+#: add-interactive.c:686 git-add--interactive.perl:641
 msgid "Update"
 msgstr "Cập nhật"
 
-#: add-interactive.c:701 add-interactive.c:889
+#: add-interactive.c:703 add-interactive.c:891
 #, c-format
 msgid "could not stage '%s'"
 msgstr "không thể đưa “%s” lên bệ phóng"
 
-#: add-interactive.c:707 add-interactive.c:896 reset.c:89 sequencer.c:3713
+#: add-interactive.c:709 add-interactive.c:898 reset.c:160 sequencer.c:3709
 msgid "could not write index"
 msgstr "không thể ghi bảng mục lục"
 
-#: add-interactive.c:710 git-add--interactive.perl:626
+#: add-interactive.c:712 git-add--interactive.perl:626
 #, c-format, perl-format
 msgid "updated %d path\n"
 msgid_plural "updated %d paths\n"
 msgstr[0] "đã cập nhật %d đường dẫn\n"
 
-#: add-interactive.c:728 git-add--interactive.perl:676
+#: add-interactive.c:730 git-add--interactive.perl:676
 #, c-format, perl-format
 msgid "note: %s is untracked now.\n"
 msgstr "chú ý: %s giờ đã bỏ theo dõi.\n"
 
-#: add-interactive.c:733 apply.c:4151 builtin/checkout.c:306
+#: add-interactive.c:735 apply.c:4133 builtin/checkout.c:311
 #: builtin/reset.c:167
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "make_cache_entry gặp lỗi đối với đường dẫn “%s”"
 
-#: add-interactive.c:763 git-add--interactive.perl:653
+#: add-interactive.c:765 git-add--interactive.perl:653
 msgid "Revert"
 msgstr "Hoàn nguyên"
 
-#: add-interactive.c:779
+#: add-interactive.c:781
 msgid "Could not parse HEAD^{tree}"
 msgstr "Không thể phân tích cú pháp HEAD^{tree}"
 
-#: add-interactive.c:817 git-add--interactive.perl:629
+#: add-interactive.c:819 git-add--interactive.perl:629
 #, c-format, perl-format
 msgid "reverted %d path\n"
 msgid_plural "reverted %d paths\n"
 msgstr[0] "đã hoàn nguyên %d đường dẫn\n"
 
-#: add-interactive.c:868 git-add--interactive.perl:693
+#: add-interactive.c:870 git-add--interactive.perl:693
 #, c-format
 msgid "No untracked files.\n"
 msgstr "Không có tập tin nào chưa được theo dõi.\n"
 
-#: add-interactive.c:872 git-add--interactive.perl:687
+#: add-interactive.c:874 git-add--interactive.perl:687
 msgid "Add untracked"
 msgstr "Thêm các cái chưa được theo dõi"
 
-#: add-interactive.c:899 git-add--interactive.perl:623
+#: add-interactive.c:901 git-add--interactive.perl:623
 #, c-format, perl-format
 msgid "added %d path\n"
 msgid_plural "added %d paths\n"
 msgstr[0] "đã thêm %d đường dẫn\n"
 
-#: add-interactive.c:929
+#: add-interactive.c:931
 #, c-format
 msgid "ignoring unmerged: %s"
 msgstr "bỏ qua những thứ chưa hòa trộn: %s"
 
-#: add-interactive.c:941 add-patch.c:1752 git-add--interactive.perl:1371
+#: add-interactive.c:943 add-patch.c:1758 git-add--interactive.perl:1371
 #, c-format
 msgid "Only binary files changed.\n"
 msgstr "Chỉ có các tập tin nhị phân là thay đổi.\n"
 
-#: add-interactive.c:943 add-patch.c:1750 git-add--interactive.perl:1373
+#: add-interactive.c:945 add-patch.c:1756 git-add--interactive.perl:1373
 #, c-format
 msgid "No changes.\n"
 msgstr "Không có thay đổi nào.\n"
 
-#: add-interactive.c:947 git-add--interactive.perl:1381
+#: add-interactive.c:949 git-add--interactive.perl:1381
 msgid "Patch update"
 msgstr "Cập nhật miếng vá"
 
-#: add-interactive.c:986 git-add--interactive.perl:1794
+#: add-interactive.c:988 git-add--interactive.perl:1794
 msgid "Review diff"
 msgstr "Xem xét lại diff"
 
-#: add-interactive.c:1014
+#: add-interactive.c:1016
 msgid "show paths with changes"
 msgstr "hiển thị đường dẫn với các thay đổi"
 
-#: add-interactive.c:1016
+#: add-interactive.c:1018
 msgid "add working tree state to the staged set of changes"
 msgstr ""
 "thêm trạng thái cây làm việc vào tập hợp các thay đổi đã được đưa lên bệ "
 "phóng"
 
-#: add-interactive.c:1018
+#: add-interactive.c:1020
 msgid "revert staged set of changes back to the HEAD version"
 msgstr ""
 "hoàn nguyên lại tập hợp các thay đổi đã được đưa lên bệ phóng trở lại phiên "
 "bản HEAD"
 
-#: add-interactive.c:1020
+#: add-interactive.c:1022
 msgid "pick hunks and update selectively"
 msgstr "chọn các “khúc” và cập nhật có tuyển chọn"
 
-#: add-interactive.c:1022
+#: add-interactive.c:1024
 msgid "view diff between HEAD and index"
 msgstr "xem khác biệt giữa HEAD và mục lục"
 
-#: add-interactive.c:1024
+#: add-interactive.c:1026
 msgid "add contents of untracked files to the staged set of changes"
 msgstr ""
 "thêm nội dung của các tập tin chưa được theo dõi vào tập hợp các thay đổi đã "
 "được đưa lên bệ phóng"
 
-#: add-interactive.c:1032 add-interactive.c:1081
+#: add-interactive.c:1034 add-interactive.c:1083
 msgid "Prompt help:"
 msgstr "Trợ giúp về nhắc:"
 
-#: add-interactive.c:1034
+#: add-interactive.c:1036
 msgid "select a single item"
 msgstr "chọn một mục đơn"
 
-#: add-interactive.c:1036
+#: add-interactive.c:1038
 msgid "select a range of items"
 msgstr "chọn một vùng các mục"
 
-#: add-interactive.c:1038
+#: add-interactive.c:1040
 msgid "select multiple ranges"
 msgstr "chọn nhiều vùng"
 
-#: add-interactive.c:1040 add-interactive.c:1085
+#: add-interactive.c:1042 add-interactive.c:1087
 msgid "select item based on unique prefix"
 msgstr "chọn mục dựa trên tiền tố duy nhất"
 
-#: add-interactive.c:1042
+#: add-interactive.c:1044
 msgid "unselect specified items"
 msgstr "bỏ chọn các mục đã cho"
 
-#: add-interactive.c:1044
+#: add-interactive.c:1046
 msgid "choose all items"
 msgstr "chọn tất cả các mục"
 
-#: add-interactive.c:1046
+#: add-interactive.c:1048
 msgid "(empty) finish selecting"
 msgstr "(để trống) hoàn tất chọn lựa"
 
-#: add-interactive.c:1083
+#: add-interactive.c:1085
 msgid "select a numbered item"
 msgstr "tùy chọn mục bằng số"
 
-#: add-interactive.c:1087
+#: add-interactive.c:1089
 msgid "(empty) select nothing"
 msgstr "(để trống) không chọn gì"
 
-#: add-interactive.c:1095 builtin/clean.c:839 git-add--interactive.perl:1898
+#: add-interactive.c:1097 builtin/clean.c:839 git-add--interactive.perl:1898
 msgid "*** Commands ***"
 msgstr "*** Lệnh ***"
 
-#: add-interactive.c:1096 builtin/clean.c:840 git-add--interactive.perl:1895
+#: add-interactive.c:1098 builtin/clean.c:840 git-add--interactive.perl:1895
 msgid "What now"
 msgstr "Giờ thì sao"
 
-#: add-interactive.c:1148 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "staged"
 msgstr "đã đưa lên bệ phóng"
 
-#: add-interactive.c:1148 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "unstaged"
 msgstr "chưa đưa lên bệ phóng"
 
-#: add-interactive.c:1148 apply.c:5020 apply.c:5023 builtin/am.c:2367
-#: builtin/am.c:2370 builtin/bugreport.c:107 builtin/clone.c:128
-#: builtin/fetch.c:153 builtin/merge.c:287 builtin/pull.c:194
-#: builtin/submodule--helper.c:404 builtin/submodule--helper.c:1858
-#: builtin/submodule--helper.c:1861 builtin/submodule--helper.c:2504
-#: builtin/submodule--helper.c:2507 builtin/submodule--helper.c:2574
-#: builtin/submodule--helper.c:2579 builtin/submodule--helper.c:2812
+#: add-interactive.c:1150 apply.c:5002 apply.c:5005 builtin/am.c:2370
+#: builtin/am.c:2373 builtin/bugreport.c:107 builtin/clone.c:132
+#: builtin/fetch.c:154 builtin/merge.c:287 builtin/pull.c:194
+#: builtin/submodule--helper.c:412 builtin/submodule--helper.c:1872
+#: builtin/submodule--helper.c:1875 builtin/submodule--helper.c:2709
+#: builtin/submodule--helper.c:2712 builtin/submodule--helper.c:2891
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "đường-dẫn"
 
-#: add-interactive.c:1155
+#: add-interactive.c:1157
 msgid "could not refresh index"
 msgstr "không thể đọc lại bảng mục lục"
 
-#: add-interactive.c:1169 builtin/clean.c:804 git-add--interactive.perl:1805
+#: add-interactive.c:1171 builtin/clean.c:804 git-add--interactive.perl:1805
 #, c-format
 msgid "Bye.\n"
 msgstr "Tạm biệt.\n"
@@ -544,24 +543,24 @@ msgstr "không thể phân tích cú pháp phần đầu của khúc “%.*s”"
 msgid "could not parse colored hunk header '%.*s'"
 msgstr "không thể phân tích cú pháp phần đầu khúc đã tô màu “%.*s”"
 
-#: add-patch.c:420
+#: add-patch.c:431
 msgid "could not parse diff"
 msgstr "không thể phân tích cú pháp khác biệt"
 
-#: add-patch.c:439
+#: add-patch.c:450
 msgid "could not parse colored diff"
 msgstr "không thể phân tích khác biệt được tô màu"
 
-#: add-patch.c:453
+#: add-patch.c:464
 #, c-format
 msgid "failed to run '%s'"
 msgstr "gặp lỗi khi chạy “%s”"
 
-#: add-patch.c:612
+#: add-patch.c:618
 msgid "mismatched output from interactive.diffFilter"
 msgstr "đầu ra không khớp từ interactive.diffFilter"
 
-#: add-patch.c:613
+#: add-patch.c:619
 msgid ""
 "Your filter must maintain a one-to-one correspondence\n"
 "between its input and output lines."
@@ -569,7 +568,7 @@ msgstr ""
 "Bộ lọc của bạn phải duy trì một quan hệ một-đến-một\n"
 "giữa các dòng đầu vào và đầu ra của nó."
 
-#: add-patch.c:791
+#: add-patch.c:797
 #, c-format
 msgid ""
 "expected context line #%d in\n"
@@ -578,7 +577,7 @@ msgstr ""
 "cần dòng ngữ cảnh #%d trong\n"
 "%.*s"
 
-#: add-patch.c:806
+#: add-patch.c:812
 #, c-format
 msgid ""
 "hunks do not overlap:\n"
@@ -591,11 +590,11 @@ msgstr ""
 "\tkhông được kết thúc bằng:\n"
 "%.*s"
 
-#: add-patch.c:1082 git-add--interactive.perl:1115
+#: add-patch.c:1088 git-add--interactive.perl:1115
 msgid "Manual hunk edit mode -- see bottom for a quick guide.\n"
 msgstr "Chế độ sửa khúc bằng tay -- xem ở đáy để có hướng dẫn sử dụng nhanh.\n"
 
-#: add-patch.c:1086
+#: add-patch.c:1092
 #, c-format
 msgid ""
 "---\n"
@@ -609,7 +608,7 @@ msgstr ""
 "Những dòng bắt đầu bằng %c sẽ bị loại bỏ.\n"
 
 #. TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
-#: add-patch.c:1100 git-add--interactive.perl:1129
+#: add-patch.c:1106 git-add--interactive.perl:1129
 msgid ""
 "If it does not apply cleanly, you will be given an opportunity to\n"
 "edit again.  If all lines of the hunk are removed, then the edit is\n"
@@ -619,11 +618,11 @@ msgstr ""
 "để sửa lần nữa. Nếu mọi dòng của khúc bị xóa bỏ, thế thì những\n"
 "sửa dổi sẽ bị loại bỏ, và khúc vẫn giữ nguyên.\n"
 
-#: add-patch.c:1133
+#: add-patch.c:1139
 msgid "could not parse hunk header"
 msgstr "không thể phân tích cú pháp phần đầu khúc"
 
-#: add-patch.c:1178
+#: add-patch.c:1184
 msgid "'git apply --cached' failed"
 msgstr "“git apply --cached” gặp lỗi"
 
@@ -639,26 +638,26 @@ msgstr "“git apply --cached” gặp lỗi"
 #. Consider translating (saying "no" discards!) as
 #. (saying "n" for "no" discards!) if the translation
 #. of the word "no" does not start with n.
-#: add-patch.c:1247 git-add--interactive.perl:1244
+#: add-patch.c:1253 git-add--interactive.perl:1244
 msgid ""
 "Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? "
 msgstr ""
 "Hunk đã sửa của bạn không được áp dụng. Sửa lại lần nữa (nói \"n\" để loại "
 "bỏ!) [y/n]? "
 
-#: add-patch.c:1290
+#: add-patch.c:1296
 msgid "The selected hunks do not apply to the index!"
 msgstr "Các khúc đã chọn không được áp dụng vào bảng mục lục!"
 
-#: add-patch.c:1291 git-add--interactive.perl:1348
+#: add-patch.c:1297 git-add--interactive.perl:1348
 msgid "Apply them to the worktree anyway? "
 msgstr "Vẫn áp dụng chúng cho cây làm việc? "
 
-#: add-patch.c:1298 git-add--interactive.perl:1351
+#: add-patch.c:1304 git-add--interactive.perl:1351
 msgid "Nothing was applied.\n"
 msgstr "Đã không áp dụng gì cả.\n"
 
-#: add-patch.c:1355
+#: add-patch.c:1361
 msgid ""
 "j - leave this hunk undecided, see next undecided hunk\n"
 "J - leave this hunk undecided, see next hunk\n"
@@ -680,72 +679,72 @@ msgstr ""
 "e - sửa bằng tay khúc hiện hành\n"
 "? - hiển thị trợ giúp\n"
 
-#: add-patch.c:1517 add-patch.c:1527
+#: add-patch.c:1523 add-patch.c:1533
 msgid "No previous hunk"
 msgstr "Không có khúc kế trước"
 
-#: add-patch.c:1522 add-patch.c:1532
+#: add-patch.c:1528 add-patch.c:1538
 msgid "No next hunk"
 msgstr "Không có khúc kế tiếp"
 
-#: add-patch.c:1538
+#: add-patch.c:1544
 msgid "No other hunks to goto"
 msgstr "Không còn khúc nào để mà nhảy đến"
 
-#: add-patch.c:1549 git-add--interactive.perl:1608
+#: add-patch.c:1555 git-add--interactive.perl:1608
 msgid "go to which hunk (<ret> to see more)? "
 msgstr "nhảy đến khúc nào (<ret> để xem thêm)? "
 
-#: add-patch.c:1550 git-add--interactive.perl:1610
+#: add-patch.c:1556 git-add--interactive.perl:1610
 msgid "go to which hunk? "
 msgstr "nhảy đến khúc nào? "
 
-#: add-patch.c:1561
+#: add-patch.c:1567
 #, c-format
 msgid "Invalid number: '%s'"
 msgstr "Số không hợp lệ: “%s”"
 
-#: add-patch.c:1566
+#: add-patch.c:1572
 #, c-format
 msgid "Sorry, only %d hunk available."
 msgid_plural "Sorry, only %d hunks available."
 msgstr[0] "Rất tiếc, chỉ có sẵn %d khúc."
 
-#: add-patch.c:1575
+#: add-patch.c:1581
 msgid "No other hunks to search"
 msgstr "Không còn khúc nào để mà tìm kiếm"
 
-#: add-patch.c:1581 git-add--interactive.perl:1663
+#: add-patch.c:1587 git-add--interactive.perl:1663
 msgid "search for regex? "
 msgstr "tìm kiếm cho biểu thức chính quy? "
 
-#: add-patch.c:1596
+#: add-patch.c:1602
 #, c-format
 msgid "Malformed search regexp %s: %s"
 msgstr "Định dạng tìm kiếm của biểu thức chính quy không đúng %s: %s"
 
-#: add-patch.c:1613
+#: add-patch.c:1619
 msgid "No hunk matches the given pattern"
 msgstr "Không thấy khúc nào khớp mẫu đã cho"
 
-#: add-patch.c:1620
+#: add-patch.c:1626
 msgid "Sorry, cannot split this hunk"
 msgstr "Rất tiếc, không thể chia nhỏ khúc này"
 
-#: add-patch.c:1624
+#: add-patch.c:1630
 #, c-format
 msgid "Split into %d hunks."
 msgstr "Chi nhỏ thành %d khúc."
 
-#: add-patch.c:1628
+#: add-patch.c:1634
 msgid "Sorry, cannot edit this hunk"
 msgstr "Rất tiếc, không thể sửa khúc này"
 
-#: add-patch.c:1680
+#: add-patch.c:1686
 msgid "'git apply' failed"
 msgstr "“git apply” gặp lỗi"
 
-#: advice.c:78
+#: advice.c:81
 #, c-format
 msgid ""
 "\n"
@@ -754,47 +753,47 @@ msgstr ""
 "\n"
 "Tắt lời nhắn này bằng \"git config advice.%s false\""
 
-#: advice.c:94
+#: advice.c:97
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%sgợi ý: %.*s%s\n"
 
-#: advice.c:178
+#: advice.c:181
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr ""
 "Cherry-picking là không thể thực hiện bởi vì bạn có những tập tin chưa được "
 "hòa trộn."
 
-#: advice.c:180
+#: advice.c:183
 msgid "Committing is not possible because you have unmerged files."
 msgstr ""
 "Không thể thực hiện chuyển giao được bởi vì bạn có những tập tin chưa được "
 "hòa trộn."
 
-#: advice.c:182
+#: advice.c:185
 msgid "Merging is not possible because you have unmerged files."
 msgstr ""
 "Không thể thực hiện hòa trộn bởi vì bạn có những tập tin chưa được hòa trộn."
 
-#: advice.c:184
+#: advice.c:187
 msgid "Pulling is not possible because you have unmerged files."
 msgstr ""
 "Không thể thực hiện kéo về bởi vì bạn có những tập tin chưa được hòa trộn."
 
-#: advice.c:186
+#: advice.c:189
 msgid "Reverting is not possible because you have unmerged files."
 msgstr ""
 "Không thể thực hiện hoàn nguyên bởi vì bạn có những tập tin chưa được hòa "
 "trộn."
 
-#: advice.c:188
+#: advice.c:191
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr ""
 "Việc này không thể thực hiện với %s bởi vì bạn có những tập tin chưa được "
 "hòa trộn."
 
-#: advice.c:196
+#: advice.c:199
 msgid ""
 "Fix them up in the work tree, and then use 'git add/rm <file>'\n"
 "as appropriate to mark resolution and make a commit."
@@ -802,27 +801,27 @@ msgstr ""
 "Sửa chúng trong cây làm việc, và sau đó dùng lệnh “git add/rm <tập-tin>”\n"
 "dành riêng cho việc đánh dấu cần giải quyết và tạo lần chuyển giao."
 
-#: advice.c:204
+#: advice.c:207
 msgid "Exiting because of an unresolved conflict."
 msgstr "Thoát ra bởi vì xung đột không thể giải quyết."
 
-#: advice.c:209 builtin/merge.c:1382
+#: advice.c:212 builtin/merge.c:1388
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "Bạn chưa kết thúc việc hòa trộn (MERGE_HEAD vẫn tồn tại)."
 
-#: advice.c:211
+#: advice.c:214
 msgid "Please, commit your changes before merging."
 msgstr "Vui lòng chuyển giao các thay đổi trước khi hòa trộn."
 
-#: advice.c:212
+#: advice.c:215
 msgid "Exiting because of unfinished merge."
 msgstr "Thoát ra bởi vì việc hòa trộn không hoàn tất."
 
-#: advice.c:217
+#: advice.c:220
 msgid "Not possible to fast-forward, aborting."
 msgstr "Thực hiện lệnh chuyển-tiếp-nhanh là không thể được, đang bỏ qua."
 
-#: advice.c:227
+#: advice.c:230
 #, c-format
 msgid ""
 "The following paths and/or pathspecs matched paths that exist\n"
@@ -834,7 +833,7 @@ msgstr ""
 "bên ngoài định nghĩa “sparse-checkout” của bạn, vì vậy sẽ không\n"
 "cập nhật trong chỉ mục:\n"
 
-#: advice.c:234
+#: advice.c:237
 msgid ""
 "If you intend to update such entries, try one of the following:\n"
 "* Use the --sparse option.\n"
@@ -844,7 +843,7 @@ msgstr ""
 "* Sử dụng tùy chọn --sparse.\n"
 "* Vô hiệu hóa hoặc sửa đổi các quy tắc thưa thớt."
 
-#: advice.c:242
+#: advice.c:245
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -904,83 +903,86 @@ msgstr "không nhận ra tùy chọn về khoảng trắng “%s”"
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "không nhận ra tùy chọn bỏ qua khoảng trắng “%s”"
 
-#: apply.c:136 archive.c:584 range-diff.c:559 revision.c:2303 revision.c:2307
-#: revision.c:2316 revision.c:2321 revision.c:2527 revision.c:2870
-#: revision.c:2874 revision.c:2880 revision.c:2883 revision.c:2885
-#: builtin/add.c:510 builtin/add.c:512 builtin/add.c:529 builtin/add.c:541
-#: builtin/branch.c:727 builtin/checkout.c:467 builtin/checkout.c:470
-#: builtin/checkout.c:1644 builtin/checkout.c:1754 builtin/checkout.c:1757
-#: builtin/clone.c:906 builtin/commit.c:358 builtin/commit.c:361
-#: builtin/commit.c:1196 builtin/describe.c:593 builtin/diff-tree.c:155
-#: builtin/difftool.c:733 builtin/fast-export.c:1245 builtin/fetch.c:2038
-#: builtin/fetch.c:2043 builtin/index-pack.c:1852 builtin/init-db.c:560
-#: builtin/log.c:1946 builtin/log.c:1948 builtin/ls-files.c:778
-#: builtin/merge.c:1403 builtin/merge.c:1405 builtin/pack-objects.c:4073
-#: builtin/push.c:592 builtin/push.c:630 builtin/push.c:636 builtin/push.c:641
-#: builtin/rebase.c:1193 builtin/rebase.c:1195 builtin/rebase.c:1199
-#: builtin/repack.c:684 builtin/repack.c:715 builtin/reset.c:426
-#: builtin/reset.c:462 builtin/rev-list.c:541 builtin/show-branch.c:710
-#: builtin/stash.c:1707 builtin/stash.c:1710 builtin/submodule--helper.c:1316
-#: builtin/submodule--helper.c:2975 builtin/tag.c:526 builtin/tag.c:572
-#: builtin/worktree.c:702
+#: apply.c:138 archive.c:584 parse-options.c:1122 range-diff.c:555
+#: revision.c:2314 revision.c:2318 revision.c:2327 revision.c:2332
+#: revision.c:2560 revision.c:2895 revision.c:2899 revision.c:2907
+#: revision.c:2910 revision.c:2912 builtin/add.c:507 builtin/add.c:509
+#: builtin/add.c:515 builtin/add.c:527 builtin/branch.c:755
+#: builtin/checkout.c:472 builtin/checkout.c:475 builtin/checkout.c:1663
+#: builtin/checkout.c:1773 builtin/checkout.c:1776 builtin/clone.c:921
+#: builtin/commit.c:359 builtin/commit.c:362 builtin/commit.c:1200
+#: builtin/commit.c:1256 builtin/commit.c:1273 builtin/describe.c:593
+#: builtin/diff-tree.c:155 builtin/difftool.c:733 builtin/fast-export.c:1245
+#: builtin/fetch.c:2141 builtin/fetch.c:2162 builtin/fetch.c:2167
+#: builtin/help.c:602 builtin/index-pack.c:1858 builtin/init-db.c:560
+#: builtin/log.c:1968 builtin/log.c:1970 builtin/ls-files.c:778
+#: builtin/merge-base.c:163 builtin/merge-base.c:169 builtin/merge.c:1409
+#: builtin/merge.c:1411 builtin/pack-objects.c:4098 builtin/push.c:592
+#: builtin/push.c:630 builtin/push.c:636 builtin/push.c:641
+#: builtin/rebase.c:1221 builtin/rebase.c:1223 builtin/rebase.c:1227
+#: builtin/repack.c:688 builtin/repack.c:719 builtin/reset.c:433
+#: builtin/reset.c:469 builtin/rev-list.c:537 builtin/show-branch.c:711
+#: builtin/stash.c:1696 builtin/stash.c:1699 builtin/submodule--helper.c:1328
+#: builtin/submodule--helper.c:3054 builtin/tag.c:527 builtin/tag.c:573
+#: builtin/worktree.c:779
 #, c-format
 msgid "options '%s' and '%s' cannot be used together"
 msgstr "tùy chọn '%s' và '%s' không thể dùng cùng nhau"
 
-#: apply.c:139 apply.c:150 apply.c:153
+#: apply.c:141 apply.c:152 apply.c:155
 #, c-format
 msgid "'%s' outside a repository"
 msgstr "'%s' ở ngoài một kho chứa"
 
-#: apply.c:800
+#: apply.c:807
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr ""
 "Không thể chuẩn bị biểu thức chính qui dấu vết thời gian (timestamp regexp) "
 "%s"
 
-#: apply.c:809
+#: apply.c:816
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr "thi hành biểu thức chính quy trả về %d cho đầu vào: %s"
 
-#: apply.c:883
+#: apply.c:890
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr "không thể tìm thấy tên tập tin trong miếng vá tại dòng %d"
 
-#: apply.c:921
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr ""
 "git apply: git-diff sai - cần /dev/null, nhưng lại nhận được %s trên dòng %d"
 
-#: apply.c:927
+#: apply.c:934
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr "git apply: git-diff sai - tên tập tin mới không nhất quán trên dòng %d"
 
-#: apply.c:928
+#: apply.c:935
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr "git apply: git-diff sai - tên tập tin cũ không nhất quán trên dòng %d"
 
-#: apply.c:933
+#: apply.c:940
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr "git apply: git-diff sai - cần “/dev/null” trên dòng %d"
 
-#: apply.c:962
+#: apply.c:969
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "chế độ không hợp lệ trên dòng %d: %s"
 
-#: apply.c:1281
+#: apply.c:1288
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr "phần đầu mâu thuẫn dòng %d và %d"
 
-#: apply.c:1371
+#: apply.c:1378
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -992,91 +994,91 @@ msgstr[0] ""
 "phần đầu diff cho git  thiếu thông tin tên tập tin khi gỡ bỏ đi %d trong "
 "thành phần dẫn đầu tên của đường dẫn (dòng %d)"
 
-#: apply.c:1384
+#: apply.c:1391
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr "phần đầu diff cho git thiếu thông tin tên tập tin (dòng %d)"
 
-#: apply.c:1480
+#: apply.c:1487
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr "chi tiết: dòng không cần: %.*s"
 
-#: apply.c:1549
+#: apply.c:1556
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr "miếng vá phân mảnh mà không có phần đầu tại dòng %d: %.*s"
 
-#: apply.c:1752
+#: apply.c:1759
 msgid "new file depends on old contents"
 msgstr "tập tin mới phụ thuộc vào nội dung cũ"
 
-#: apply.c:1754
+#: apply.c:1761
 msgid "deleted file still has contents"
 msgstr "tập tin đã xóa vẫn còn nội dung"
 
-#: apply.c:1788
+#: apply.c:1795
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "miếng vá hỏng tại dòng %d"
 
-#: apply.c:1825
+#: apply.c:1832
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "tập tin mới %s phụ thuộc vào nội dung cũ"
 
-#: apply.c:1827
+#: apply.c:1834
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "tập tin đã xóa %s vẫn còn nội dung"
 
-#: apply.c:1830
+#: apply.c:1837
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** cảnh báo: tập tin %s trở nên trống rỗng nhưng không bị xóa"
 
-#: apply.c:1978
+#: apply.c:1985
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "miếng vá định dạng nhị phân sai hỏng tại dòng %d: %.*s"
 
-#: apply.c:2015
+#: apply.c:2022
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "miếng vá định dạng nhị phân không được nhận ra tại dòng %d"
 
-#: apply.c:2177
+#: apply.c:2184
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "vá chỉ với “rác” tại dòng %d"
 
-#: apply.c:2263
+#: apply.c:2270
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "không thể đọc liên kết mềm %s"
 
-#: apply.c:2267
+#: apply.c:2274
 #, c-format
 msgid "unable to open or read %s"
 msgstr "không thể mở hay đọc %s"
 
-#: apply.c:2936
+#: apply.c:2943
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "sai khởi đầu dòng: “%c”"
 
-#: apply.c:3057
+#: apply.c:3064
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "Khối dữ liệu #%d thành công tại %d (offset %d dòng)."
 
-#: apply.c:3069
+#: apply.c:3076
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "Ngữ cảnh bị giảm xuống còn (%ld/%ld) để áp dụng mảnh dữ liệu tại %d"
 
-#: apply.c:3075
+#: apply.c:3082
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1085,457 +1087,457 @@ msgstr ""
 "trong khi đang tìm kiếm cho:\n"
 "%.*s"
 
-#: apply.c:3097
+#: apply.c:3104
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "thiếu dữ liệu của miếng vá định dạng nhị phân cho “%s”"
 
-#: apply.c:3105
+#: apply.c:3112
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr ""
 "không thể reverse-apply một miếng vá nhị phân mà không đảo ngược khúc thành "
 "“%s”"
 
-#: apply.c:3152
+#: apply.c:3159
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr ""
 "không thể áp dụng miếng vá nhị phân thành “%s” mà không có dòng chỉ mục đầy "
 "đủ"
 
-#: apply.c:3163
+#: apply.c:3170
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr ""
 "miếng vá áp dụng cho “%s” (%s), cái mà không khớp với các nội dung hiện tại."
 
-#: apply.c:3171
+#: apply.c:3178
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "miếng vá áp dụng cho một “%s” trống rỗng nhưng nó lại không trống"
 
-#: apply.c:3189
+#: apply.c:3196
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "không thể đọc postimage %s cần thiết cho “%s”"
 
-#: apply.c:3202
+#: apply.c:3209
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "miếng vá định dạng nhị phân không được áp dụng cho “%s”"
 
-#: apply.c:3209
+#: apply.c:3216
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr ""
 "vá nhị phân cho “%s” tạo ra kết quả không chính xác (mong chờ %s, lại nhận "
 "%s)"
 
-#: apply.c:3230
+#: apply.c:3237
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "gặp lỗi khi vá: %s:%ld"
 
-#: apply.c:3353
+#: apply.c:3360
 #, c-format
 msgid "cannot checkout %s"
 msgstr "không thể lấy ra %s"
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:104 pack-revindex.c:214
-#: setup.c:309
+#: apply.c:3412 apply.c:3423 apply.c:3469 midx.c:105 pack-revindex.c:214
+#: setup.c:310
 #, c-format
 msgid "failed to read %s"
 msgstr "gặp lỗi khi đọc %s"
 
-#: apply.c:3413
+#: apply.c:3420
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "đọc từ “%s” vượt ra ngoài liên kết mềm"
 
-#: apply.c:3442 apply.c:3711
+#: apply.c:3449 apply.c:3721
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "đường dẫn %s đã bị xóa hoặc đổi tên"
 
-#: apply.c:3549 apply.c:3726
+#: apply.c:3559 apply.c:3736
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s: không tồn tại trong bảng mục lục"
 
-#: apply.c:3558 apply.c:3734 apply.c:3978
+#: apply.c:3568 apply.c:3744 apply.c:3960
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s: không khớp trong mục lục"
 
-#: apply.c:3595
+#: apply.c:3605
 msgid "repository lacks the necessary blob to perform 3-way merge."
 msgstr "kho thiếu đối tượng blob cần thiết để thực hiện hòa trộn “3-way”."
 
-#: apply.c:3598
+#: apply.c:3608
 #, c-format
 msgid "Performing three-way merge...\n"
 msgstr "Đang thực hiện hòa trộn “3-đường”…\n"
 
-#: apply.c:3614 apply.c:3618
+#: apply.c:3624 apply.c:3628
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "không thể đọc nội dung hiện hành của “%s”"
 
-#: apply.c:3630
+#: apply.c:3640
 #, c-format
 msgid "Failed to perform three-way merge...\n"
 msgstr "Gặp lỗi khi thực hiện hòa trộn kiểu “three-way”…\n"
 
-#: apply.c:3644
+#: apply.c:3654
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "Đã áp dụng miếng vá %s với các xung đột.\n"
 
-#: apply.c:3649
+#: apply.c:3659
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "Đã áp dụng miếng vá %s một cách sạch sẽ.\n"
 
-#: apply.c:3666
+#: apply.c:3676
 #, c-format
 msgid "Falling back to direct application...\n"
 msgstr "Đang trở lại ứng dụng chi phối…\n"
 
-#: apply.c:3678
+#: apply.c:3688
 msgid "removal patch leaves file contents"
 msgstr "loại bỏ miếng vá để lại nội dung tập tin"
 
-#: apply.c:3751
+#: apply.c:3761
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s: sai kiểu"
 
-#: apply.c:3753
+#: apply.c:3763
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s có kiểu %o, cần %o"
 
-#: apply.c:3918 apply.c:3920 read-cache.c:889 read-cache.c:918
-#: read-cache.c:1381
+#: apply.c:3900 apply.c:3902 read-cache.c:903 read-cache.c:932
+#: read-cache.c:1399
 #, c-format
 msgid "invalid path '%s'"
 msgstr "đường dẫn không hợp lệ “%s”"
 
-#: apply.c:3976
+#: apply.c:3958
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s: đã có từ trước trong bảng mục lục"
 
-#: apply.c:3980
+#: apply.c:3962
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s: đã sẵn có trong thư mục đang làm việc"
 
-#: apply.c:4000
+#: apply.c:3982
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "chế độ mới (%o) của %s không khớp với chế độ cũ (%o)"
 
-#: apply.c:4005
+#: apply.c:3987
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "chế độ mới (%o) của %s không khớp với chế độ cũ (%o) của %s"
 
-#: apply.c:4025
+#: apply.c:4007
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "tập tin chịu tác động “%s” vượt ra ngoài liên kết mềm"
 
-#: apply.c:4029
+#: apply.c:4011
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s: miếng vá không được áp dụng"
 
-#: apply.c:4044
+#: apply.c:4026
 #, c-format
 msgid "Checking patch %s..."
 msgstr "Đang kiểm tra miếng vá %s…"
 
-#: apply.c:4136
+#: apply.c:4118
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "thông tin sha1 thiếu hoặc không dùng được cho mô-đun %s"
 
-#: apply.c:4143
+#: apply.c:4125
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "thay đổi chế độ cho %s, cái mà không phải là HEAD hiện tại"
 
-#: apply.c:4146
+#: apply.c:4128
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "thông tin sha1 còn thiếu hay không dùng được(%s)."
 
-#: apply.c:4155
+#: apply.c:4137
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "không thể thêm %s vào chỉ mục tạm thời"
 
-#: apply.c:4165
+#: apply.c:4147
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "không thể ghi mục lục tạm vào %s"
 
-#: apply.c:4303
+#: apply.c:4285
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "không thể gỡ bỏ %s từ mục lục"
 
-#: apply.c:4337
+#: apply.c:4319
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "miếng vá sai hỏng cho mô-đun-con %s"
 
-#: apply.c:4343
+#: apply.c:4325
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "không thể lấy thống kê về tập tin %s mới hơn đã được tạo"
 
-#: apply.c:4351
+#: apply.c:4333
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr "không thể tạo “kho lưu đằng sau” cho tập tin được tạo mới hơn %s"
 
-#: apply.c:4357 apply.c:4502
+#: apply.c:4339 apply.c:4484
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "không thể thêm mục nhớ đệm cho %s"
 
-#: apply.c:4400 builtin/bisect--helper.c:540 builtin/gc.c:2258
+#: apply.c:4382 builtin/bisect--helper.c:540 builtin/gc.c:2258
 #: builtin/gc.c:2293
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "gặp lỗi khi ghi vào “%s”"
 
-#: apply.c:4404
+#: apply.c:4386
 #, c-format
 msgid "closing file '%s'"
 msgstr "đang đóng tập tin “%s”"
 
-#: apply.c:4474
+#: apply.c:4456
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "không thể ghi vào tập tin “%s” chế độ %o"
 
-#: apply.c:4572
+#: apply.c:4554
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "Đã áp dụng miếng vá %s một cách sạch sẽ."
 
-#: apply.c:4580
+#: apply.c:4562
 msgid "internal error"
 msgstr "lỗi nội bộ"
 
-#: apply.c:4583
+#: apply.c:4565
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "Đang áp dụng miếng vá %%s với %d lần từ chối…"
 
-#: apply.c:4594
+#: apply.c:4576
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "đang cắt ngắn tên tập tin .rej thành %.*s.rej"
 
-#: apply.c:4602
+#: apply.c:4584
 #, c-format
 msgid "cannot open %s"
 msgstr "không mở được “%s”"
 
-#: apply.c:4616
+#: apply.c:4598
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "Khối nhớ #%d được áp dụng gọn gàng."
 
-#: apply.c:4620
+#: apply.c:4602
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "Đoạn dữ liệu #%d bị từ chối."
 
-#: apply.c:4749
+#: apply.c:4731
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "Bỏ qua đường dẫn “%s”."
 
-#: apply.c:4758
+#: apply.c:4740
 msgid "No valid patches in input (allow with \"--allow-empty\")"
 msgstr ""
 "Không có miếng vá hợp lệ nào trong đầu vào (cho phép với \"--allow-empty\")"
 
-#: apply.c:4779
+#: apply.c:4761
 msgid "unable to read index file"
 msgstr "không thể đọc tập tin lưu bảng mục lục"
 
-#: apply.c:4936
+#: apply.c:4918
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "không thể mở miếng vá “%s”: %s"
 
-#: apply.c:4963
+#: apply.c:4945
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "đã chấm dứt %d lỗi khoảng trắng"
 
-#: apply.c:4969 apply.c:4984
+#: apply.c:4951 apply.c:4966
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d dòng thêm khoảng trắng lỗi."
 
-#: apply.c:4977
+#: apply.c:4959
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] "%d dòng được áp dụng sau khi sửa các lỗi khoảng trắng."
 
-#: apply.c:4993 builtin/add.c:704 builtin/mv.c:338 builtin/rm.c:430
+#: apply.c:4975 builtin/add.c:690 builtin/mv.c:338 builtin/rm.c:430
 msgid "Unable to write new index file"
 msgstr "Không thể ghi tập tin lưu bảng mục lục mới"
 
-#: apply.c:5021
+#: apply.c:5003
 msgid "don't apply changes matching the given path"
 msgstr "không áp dụng các thay đổi khớp với đường dẫn đã cho"
 
-#: apply.c:5024
+#: apply.c:5006
 msgid "apply changes matching the given path"
 msgstr "áp dụng các thay đổi khớp với đường dẫn đã cho"
 
-#: apply.c:5026 builtin/am.c:2376
+#: apply.c:5008 builtin/am.c:2379
 msgid "num"
 msgstr "số"
 
-#: apply.c:5027
+#: apply.c:5009
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "gỡ bỏ <số> dấu gạch chéo dẫn đầu từ đường dẫn diff cổ điển"
 
-#: apply.c:5030
+#: apply.c:5012
 msgid "ignore additions made by the patch"
 msgstr "lờ đi phần bổ xung được tạo ra bởi miếng vá"
 
-#: apply.c:5032
+#: apply.c:5014
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr ""
 "thay vì áp dụng một miếng vá, kết xuất kết quả từ lệnh diffstat cho đầu ra"
 
-#: apply.c:5036
+#: apply.c:5018
 msgid "show number of added and deleted lines in decimal notation"
 msgstr ""
 "hiển thị số lượng các dòng được thêm vào và xóa đi theo ký hiệu thập phân"
 
-#: apply.c:5038
+#: apply.c:5020
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "thay vì áp dụng một miếng vá, kết xuất kết quả cho đầu vào"
 
-#: apply.c:5040
+#: apply.c:5022
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "thay vì áp dụng miếng vá, hãy xem xem miếng vá có thích hợp không"
 
-#: apply.c:5042
+#: apply.c:5024
 msgid "make sure the patch is applicable to the current index"
 msgstr "hãy chắc chắn là miếng vá thích hợp với bảng mục lục hiện hành"
 
-#: apply.c:5044
+#: apply.c:5026
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "đánh dấu các tập tin mới với “git add --intent-to-add”"
 
-#: apply.c:5046
+#: apply.c:5028
 msgid "apply a patch without touching the working tree"
 msgstr "áp dụng một miếng vá mà không động chạm đến cây làm việc"
 
-#: apply.c:5048
+#: apply.c:5030
 msgid "accept a patch that touches outside the working area"
 msgstr "chấp nhận một miếng vá mà không động chạm đến cây làm việc"
 
-#: apply.c:5051
+#: apply.c:5033
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr ""
 "đồng thời áp dụng miếng vá (dùng với tùy chọn --stat/--summary/--check)"
 
-#: apply.c:5053
+#: apply.c:5035
 msgid "attempt three-way merge, fall back on normal patch if that fails"
 msgstr ""
 "thử hòa trộn kiểu three-way, quay lại dán bình thường nếu không thể thực "
 "hiện được"
 
-#: apply.c:5055
+#: apply.c:5037
 msgid "build a temporary index based on embedded index information"
 msgstr ""
 "xây dựng bảng mục lục tạm thời trên cơ sở thông tin bảng mục lục được nhúng"
 
-#: apply.c:5058 builtin/checkout-index.c:196
+#: apply.c:5040 builtin/checkout-index.c:230
 msgid "paths are separated with NUL character"
 msgstr "các đường dẫn bị ngăn cách bởi ký tự NULL"
 
-#: apply.c:5060
+#: apply.c:5042
 msgid "ensure at least <n> lines of context match"
 msgstr "đảm bảo rằng có ít nhất <n> dòng ngữ cảnh khớp"
 
-#: apply.c:5061 builtin/am.c:2352 builtin/am.c:2355
+#: apply.c:5043 builtin/am.c:2355 builtin/am.c:2358
 #: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
-#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3960
-#: builtin/rebase.c:1051
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3983
+#: builtin/rebase.c:1079
 msgid "action"
 msgstr "hành động"
 
-#: apply.c:5062
+#: apply.c:5044
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "tìm thấy một dòng mới hoặc bị sửa đổi mà nó có lỗi do khoảng trắng"
 
-#: apply.c:5065 apply.c:5068
+#: apply.c:5047 apply.c:5050
 msgid "ignore changes in whitespace when finding context"
 msgstr "lờ đi sự thay đổi do khoảng trắng gây ra khi tìm ngữ cảnh"
 
-#: apply.c:5071
+#: apply.c:5053
 msgid "apply the patch in reverse"
 msgstr "áp dụng miếng vá theo chiều ngược"
 
-#: apply.c:5073
+#: apply.c:5055
 msgid "don't expect at least one line of context"
 msgstr "đừng hy vọng có ít nhất một dòng ngữ cảnh"
 
-#: apply.c:5075
+#: apply.c:5057
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "để lại khối dữ liệu bị từ chối trong các tập tin *.rej tương ứng"
 
-#: apply.c:5077
+#: apply.c:5059
 msgid "allow overlapping hunks"
 msgstr "cho phép chồng khối nhớ"
 
-#: apply.c:5080
+#: apply.c:5062
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr ""
 "đã dò tìm thấy dung sai không chính xác thiếu dòng mới tại cuối tập tin"
 
-#: apply.c:5083
+#: apply.c:5065
 msgid "do not trust the line counts in the hunk headers"
 msgstr "không tin số lượng dòng trong phần đầu khối dữ liệu"
 
-#: apply.c:5085 builtin/am.c:2364
+#: apply.c:5067 builtin/am.c:2367
 msgid "root"
 msgstr "gốc"
 
-#: apply.c:5086
+#: apply.c:5068
 msgid "prepend <root> to all filenames"
 msgstr "treo thêm <root> vào tất cả các tên tập tin"
 
-#: apply.c:5089
+#: apply.c:5071
 msgid "don't return error for empty patches"
 msgstr "đừng trả về lỗi khi các miếng vá trống rỗng"
 
-#: archive-tar.c:125 archive-zip.c:345
+#: archive-tar.c:125 archive-zip.c:346
 #, c-format
 msgid "cannot stream blob %s"
 msgstr "không thể stream blob “%s”"
 
-#: archive-tar.c:265 archive-zip.c:358
+#: archive-tar.c:265 archive-zip.c:359
 #, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
 msgstr "chế độ tập tin không được hỗ trợ: 0%o (SHA1: %s)"
@@ -1554,22 +1556,22 @@ msgstr "không thể chuyển hướng mô tả"
 msgid "'%s' filter reported error"
 msgstr "bộ lọc “%s” đã báo cáo lỗi"
 
-#: archive-zip.c:318
+#: archive-zip.c:319
 #, c-format
 msgid "path is not valid UTF-8: %s"
 msgstr "đường dẫn không hợp lệ UTF-8: %s"
 
-#: archive-zip.c:322
+#: archive-zip.c:323
 #, c-format
 msgid "path too long (%d chars, SHA1: %s): %s"
 msgstr "đường dẫn quá dài (%d ký tự, SHA1: %s): %s"
 
-#: archive-zip.c:469 builtin/pack-objects.c:365 builtin/pack-objects.c:368
+#: archive-zip.c:470 builtin/pack-objects.c:363 builtin/pack-objects.c:366
 #, c-format
 msgid "deflate error (%d)"
 msgstr "lỗi giải nén (%d)"
 
-#: archive-zip.c:603
+#: archive-zip.c:604
 #, c-format
 msgid "timestamp too large for this system: %<PRIuMAX>"
 msgstr "dấu vết thời gian là quá lớn cho hệ thống này: %<PRIuMAX>"
@@ -1578,10 +1580,6 @@ msgstr "dấu vết thời gian là quá lớn cho hệ thống này: %<PRIuMAX>
 msgid "git archive [<options>] <tree-ish> [<path>...]"
 msgstr "git archive [<các tùy chọn>] <tree-ish> [</đường/dẫn>…]"
 
-#: archive.c:15
-msgid "git archive --list"
-msgstr "git archive --list"
-
 #: archive.c:16
 msgid ""
 "git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"
@@ -1594,12 +1592,12 @@ msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote <kho> [--exec <lệnh>] --list"
 
 #: archive.c:188 archive.c:341 builtin/gc.c:497 builtin/notes.c:238
-#: builtin/tag.c:578
+#: builtin/tag.c:579
 #, c-format
 msgid "cannot read '%s'"
 msgstr "không thể đọc “%s”"
 
-#: archive.c:426 builtin/add.c:215 builtin/add.c:671 builtin/rm.c:334
+#: archive.c:426 builtin/add.c:214 builtin/add.c:657 builtin/rm.c:334
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "đặc tả đường dẫn “%s” không khớp với bất kỳ tập tin nào"
@@ -1641,7 +1639,7 @@ msgstr "định_dạng"
 msgid "archive format"
 msgstr "định dạng lưu trữ"
 
-#: archive.c:552 builtin/log.c:1790
+#: archive.c:552 builtin/log.c:1809
 msgid "prefix"
 msgstr "tiền_tố"
 
@@ -1649,12 +1647,12 @@ msgstr "tiền_tố"
 msgid "prepend prefix to each pathname in the archive"
 msgstr "nối thêm tiền tố vào từng đường dẫn tập tin trong kho lưu"
 
-#: archive.c:554 archive.c:557 builtin/blame.c:880 builtin/blame.c:884
-#: builtin/blame.c:885 builtin/commit-tree.c:115 builtin/config.c:135
+#: archive.c:554 archive.c:557 builtin/blame.c:881 builtin/blame.c:885
+#: builtin/blame.c:886 builtin/commit-tree.c:115 builtin/config.c:135
 #: builtin/fast-export.c:1181 builtin/fast-export.c:1183
-#: builtin/fast-export.c:1187 builtin/grep.c:935 builtin/hash-object.c:103
+#: builtin/fast-export.c:1187 builtin/grep.c:936 builtin/hash-object.c:104
 #: builtin/ls-files.c:654 builtin/ls-files.c:657 builtin/notes.c:410
-#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:190
+#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:195
 msgid "file"
 msgstr "tập_tin"
 
@@ -1682,8 +1680,8 @@ msgstr "đặt mức nén"
 msgid "list supported archive formats"
 msgstr "liệt kê các kiểu nén được hỗ trợ"
 
-#: archive.c:568 builtin/archive.c:89 builtin/clone.c:118 builtin/clone.c:121
-#: builtin/submodule--helper.c:1870 builtin/submodule--helper.c:2513
+#: archive.c:568 builtin/archive.c:89 builtin/clone.c:122 builtin/clone.c:125
+#: builtin/submodule--helper.c:1884 builtin/submodule--helper.c:2718
 msgid "repo"
 msgstr "kho"
 
@@ -1704,11 +1702,12 @@ msgstr "đường dẫn đến lệnh git-upload-archive trên máy chủ"
 msgid "Unexpected option --remote"
 msgstr "Gặp tùy chọn không cần --remote"
 
-#: archive.c:580 fetch-pack.c:300 revision.c:2887 builtin/add.c:544
-#: builtin/add.c:576 builtin/checkout.c:1763 builtin/commit.c:370
-#: builtin/fast-export.c:1230 builtin/index-pack.c:1848 builtin/log.c:2115
-#: builtin/reset.c:435 builtin/reset.c:493 builtin/rm.c:281
-#: builtin/stash.c:1719 builtin/worktree.c:508 http-fetch.c:144
+#: archive.c:580 fetch-pack.c:300 revision.c:2914 builtin/add.c:530
+#: builtin/add.c:562 builtin/checkout.c:1782 builtin/clone.c:1099
+#: builtin/clone.c:1102 builtin/commit.c:371 builtin/fast-export.c:1230
+#: builtin/index-pack.c:1854 builtin/log.c:2140 builtin/reset.c:442
+#: builtin/reset.c:500 builtin/rm.c:281 builtin/stash.c:1708
+#: builtin/worktree.c:580 builtin/worktree.c:781 http-fetch.c:144
 #: http-fetch.c:153
 #, c-format
 msgid "the option '%s' requires '%s'"
@@ -1728,17 +1727,17 @@ msgstr "Không hiểu định dạng “%s”"
 msgid "Argument not supported for format '%s': -%d"
 msgstr "Tham số không được hỗ trợ cho định dạng “%s”: -%d"
 
-#: attr.c:203
+#: attr.c:202
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s không phải tên thuộc tính hợp lệ"
 
-#: attr.c:364
+#: attr.c:363
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "%s không được phép: %s:%d"
 
-#: attr.c:404
+#: attr.c:403
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1756,12 +1755,12 @@ msgstr "Nội dung được trích dẫn sai trong tập tin “%s”: %s"
 msgid "We cannot bisect more!\n"
 msgstr "Chúng tôi không bisect thêm nữa!\n"
 
-#: bisect.c:764
+#: bisect.c:765
 #, c-format
 msgid "Not a valid commit name %s"
 msgstr "Không phải tên đối tượng commit %s hợp lệ"
 
-#: bisect.c:789
+#: bisect.c:790
 #, c-format
 msgid ""
 "The merge base %s is bad.\n"
@@ -1770,7 +1769,7 @@ msgstr ""
 "Hòa trộn trên %s là sai.\n"
 "Điều đó có nghĩa là lỗi đã được sửa chữa giữa %s và [%s].\n"
 
-#: bisect.c:794
+#: bisect.c:795
 #, c-format
 msgid ""
 "The merge base %s is new.\n"
@@ -1779,7 +1778,7 @@ msgstr ""
 "Hòa trộn trên %s là mới.\n"
 "Gần như chắc chắn là có thay đổi giữa %s và [%s].\n"
 
-#: bisect.c:799
+#: bisect.c:800
 #, c-format
 msgid ""
 "The merge base %s is %s.\n"
@@ -1788,7 +1787,7 @@ msgstr ""
 "Hòa trộn trên %s là %s.\n"
 "Điều đó có nghĩa là lần chuyển giao “%s” đầu tiên là giữa %s và [%s].\n"
 
-#: bisect.c:807
+#: bisect.c:808
 #, c-format
 msgid ""
 "Some %s revs are not ancestors of the %s rev.\n"
@@ -1799,7 +1798,7 @@ msgstr ""
 "git bisect không thể làm việc đúng đắn trong trường hợp này.\n"
 "Liệu có phải bạn nhầm lẫn các điểm %s và %s không?\n"
 
-#: bisect.c:820
+#: bisect.c:821
 #, c-format
 msgid ""
 "the merge base between %s and [%s] must be skipped.\n"
@@ -1811,36 +1810,36 @@ msgstr ""
 "%s.\n"
 "Chúng tôi vẫn cứ tiếp tục."
 
-#: bisect.c:859
+#: bisect.c:860
 #, c-format
 msgid "Bisecting: a merge base must be tested\n"
 msgstr "Bisecting: nền hòa trộn cần phải được kiểm tra\n"
 
-#: bisect.c:909
+#: bisect.c:910
 #, c-format
 msgid "a %s revision is needed"
 msgstr "cần một điểm xét duyệt %s"
 
-#: bisect.c:939
+#: bisect.c:940
 #, c-format
 msgid "could not create file '%s'"
 msgstr "không thể tạo tập tin “%s”"
 
-#: bisect.c:985 builtin/merge.c:155
+#: bisect.c:986 builtin/merge.c:155
 #, c-format
 msgid "could not read file '%s'"
 msgstr "không thể đọc tập tin “%s”"
 
-#: bisect.c:1025
+#: bisect.c:1026
 msgid "reading bisect refs failed"
 msgstr "việc đọc tham chiếu bisect gặp lỗi"
 
-#: bisect.c:1055
+#: bisect.c:1056
 #, c-format
 msgid "%s was both %s and %s\n"
 msgstr "%s là cả %s và %s\n"
 
-#: bisect.c:1064
+#: bisect.c:1065
 #, c-format
 msgid ""
 "No testable commit found.\n"
@@ -1849,7 +1848,7 @@ msgstr ""
 "Không tìm thấy lần chuyển giao kiểm tra được nào.\n"
 "Có lẽ bạn bắt đầu với các tham số đường dẫn sai?\n"
 
-#: bisect.c:1093
+#: bisect.c:1094
 #, c-format
 msgid "(roughly %d step)"
 msgid_plural "(roughly %d steps)"
@@ -1858,52 +1857,52 @@ msgstr[0] "(ước chừng %d bước)"
 #. TRANSLATORS: the last %s will be replaced with "(roughly %d
 #. steps)" translation.
 #.
-#: bisect.c:1099
+#: bisect.c:1100
 #, c-format
 msgid "Bisecting: %d revision left to test after this %s\n"
 msgid_plural "Bisecting: %d revisions left to test after this %s\n"
 msgstr[0] "Bisecting: còn %d điểm xét duyệt để kiểm sau %s này\n"
 
-#: blame.c:2776
+#: blame.c:2773
 msgid "--contents and --reverse do not blend well."
 msgstr "tùy chọn --contents và --reverse không được trộn vào nhau."
 
-#: blame.c:2790
+#: blame.c:2787
 msgid "cannot use --contents with final commit object name"
 msgstr "không thể dùng --contents với tên đối tượng chuyển giao cuối cùng"
 
-#: blame.c:2811
+#: blame.c:2808
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr ""
 "cùng sử dụng --reverse và --first-parent cần chỉ định lần chuyển giao cuối"
 
-#: blame.c:2820 bundle.c:224 midx.c:1042 ref-filter.c:2370 remote.c:2158
-#: sequencer.c:2352 sequencer.c:4899 submodule.c:883 builtin/commit.c:1114
-#: builtin/log.c:429 builtin/log.c:1036 builtin/log.c:1644 builtin/log.c:2071
-#: builtin/log.c:2362 builtin/merge.c:431 builtin/pack-objects.c:3373
-#: builtin/pack-objects.c:3775 builtin/pack-objects.c:3790
+#: blame.c:2817 bundle.c:231 midx.c:1058 ref-filter.c:2371 remote.c:2157
+#: sequencer.c:2348 sequencer.c:4872 submodule.c:913 builtin/commit.c:1118
+#: builtin/log.c:437 builtin/log.c:1055 builtin/log.c:1663 builtin/log.c:2096
+#: builtin/log.c:2387 builtin/merge.c:431 builtin/pack-objects.c:3381
+#: builtin/pack-objects.c:3781 builtin/pack-objects.c:3796
 #: builtin/shortlog.c:255
 msgid "revision walk setup failed"
 msgstr "cài đặt việc di chuyển qua các điểm xét duyệt gặp lỗi"
 
-#: blame.c:2838
+#: blame.c:2835
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr ""
 "cùng sử dụng --reverse --first-parent yêu cầu vùng cùng với chuỗi cha-mẹ-đầu-"
 "tiên"
 
-#: blame.c:2849
+#: blame.c:2846
 #, c-format
 msgid "no such path %s in %s"
 msgstr "không có đường dẫn %s trong “%s”"
 
-#: blame.c:2860
+#: blame.c:2857
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "không thể đọc blob %s cho đường dẫn “%s”"
 
-#: branch.c:77
+#: branch.c:93
 msgid ""
 "cannot inherit upstream tracking configuration of multiple refs when "
 "rebasing is requested"
@@ -1911,31 +1910,31 @@ msgstr ""
 "không thể kế thừa cấu hình theo dõi thượng nguồn của nhiều tham chiếu khi mà "
 "lệnh cải tổ được yêu cầu"
 
-#: branch.c:88
+#: branch.c:104
 #, c-format
 msgid "not setting branch '%s' as its own upstream"
 msgstr "không cài đặt nhánh '%s' như là thượng nguồn của nó"
 
-#: branch.c:144
+#: branch.c:160
 #, c-format
 msgid "branch '%s' set up to track '%s' by rebasing."
 msgstr "nhánh “%s” cài đặt để theo dõi “%s” bằng cách rebase."
 
-#: branch.c:145
+#: branch.c:161
 #, c-format
 msgid "branch '%s' set up to track '%s'."
 msgstr "nhánh “%s” cài đặt để theo dõi “%s”."
 
-#: branch.c:148
+#: branch.c:164
 #, c-format
 msgid "branch '%s' set up to track:"
 msgstr "nhánh “%s” cài đặt để theo dõi:"
 
-#: branch.c:160
+#: branch.c:176
 msgid "unable to write upstream branch configuration"
 msgstr "không thể ghi cấu hình nhánh thượng nguồn"
 
-#: branch.c:162
+#: branch.c:178
 msgid ""
 "\n"
 "After fixing the error cause you may try to fix up\n"
@@ -1945,52 +1944,90 @@ msgstr ""
 "Sau khi sửa nguyên nhân gây lỗi bạn có lẻ cần thử sửa\n"
 "thông tin theo dõi máy chủ bằng cách gọi lệnh:"
 
-#: branch.c:203
+#: branch.c:219
 #, c-format
 msgid "asked to inherit tracking from '%s', but no remote is set"
 msgstr ""
 "đã hỏi để kế thừa theo dõi từ '%s', nhưng không có máy chủ nào được đặt"
 
-#: branch.c:209
+#: branch.c:225
 #, c-format
 msgid "asked to inherit tracking from '%s', but no merge configuration is set"
 msgstr ""
 "đã hỏi để kế thừa theo dõi từ '%s', nhưng không có cấu hình hòa trộn nào "
 "được đặt"
 
-#: branch.c:252
+#: branch.c:277
+#, c-format
+msgid "not tracking: ambiguous information for ref '%s'"
+msgstr "không theo dõi: thông tin chưa rõ ràng cho tham chiếu '%s'"
+
+#. TRANSLATORS: This is a line listing a remote with duplicate
+#. refspecs in the advice message below. For RTL languages you'll
+#. probably want to swap the "%s" and leading "  " space around.
+#.
+#. TRANSLATORS: This is line item of ambiguous object output
+#. from describe_ambiguous_object() above. For RTL languages
+#. you'll probably want to swap the "%s" and leading " " space
+#. around.
+#.
+#: branch.c:289 object-name.c:464
+#, c-format
+msgid "  %s\n"
+msgstr "  %s\n"
+
+#. TRANSLATORS: The second argument is a \n-delimited list of
+#. duplicate refspecs, composed above.
+#.
+#: branch.c:295
 #, c-format
-msgid "not tracking: ambiguous information for ref %s"
-msgstr "không theo dõi: thông tin chưa rõ ràng cho tham chiếu %s"
+msgid ""
+"There are multiple remotes whose fetch refspecs map to the remote\n"
+"tracking ref '%s':\n"
+"%s\n"
+"This is typically a configuration error.\n"
+"\n"
+"To support setting up tracking branches, ensure that\n"
+"different remotes' fetch refspecs map into different\n"
+"tracking namespaces."
+msgstr ""
+"Có nhiều máy chủ những cái lấy ánh xạ refspecs tham chiếu theo\n"
+"dõi máy chủ '%s':\n"
+"%s\n"
+"Đây thường là lỗi cấu hình.\n"
+"\n"
+"Để hỗ trợ thiết lập các nhánh theo dõi, hãy đảm bảo rằng\n"
+"các máy chủ khác nhau lấy các refspecs ánh xạ đến\n"
+"không gian tên theo dõi khác."
 
-#: branch.c:287
+#: branch.c:344
 #, c-format
 msgid "'%s' is not a valid branch name"
 msgstr "“%s” không phải là một tên nhánh hợp lệ"
 
-#: branch.c:307
+#: branch.c:364
 #, c-format
 msgid "a branch named '%s' already exists"
 msgstr "đã có nhánh mang tên “%s”"
 
-#: branch.c:313
+#: branch.c:370
 #, c-format
 msgid "cannot force update the branch '%s' checked out at '%s'"
 msgstr "không thể ép buộc cập nhật nhánh “%s” đã được lấy ra tại “%s”"
 
-#: branch.c:336
+#: branch.c:393
 #, c-format
 msgid "cannot set up tracking information; starting point '%s' is not a branch"
 msgstr ""
 "không thể cài đặt thông tin theo dõi; điểm bắt đầu “%s” không phải là một "
 "nhánh"
 
-#: branch.c:338
+#: branch.c:395
 #, c-format
 msgid "the requested upstream branch '%s' does not exist"
 msgstr "nhánh thượng nguồn đã yêu cầu “%s” không tồn tại"
 
-#: branch.c:340
+#: branch.c:397
 msgid ""
 "\n"
 "If you are planning on basing your work on an upstream\n"
@@ -2010,124 +2047,143 @@ msgstr ""
 "sẽ theo dõi bản đối chiếu máy chủ của nó, bạn cần dùng lệnh\n"
 "\"git push -u\" để đặt cấu hình thượng nguồn bạn muốn push."
 
-#: branch.c:384 builtin/replace.c:321 builtin/replace.c:377
+#: branch.c:445 builtin/replace.c:321 builtin/replace.c:377
 #: builtin/replace.c:423 builtin/replace.c:453
 #, c-format
 msgid "not a valid object name: '%s'"
 msgstr "không phải là tên đối tượng hợp lệ: “%s”"
 
-#: branch.c:404
+#: branch.c:465
 #, c-format
 msgid "ambiguous object name: '%s'"
 msgstr "tên đối tượng chưa rõ ràng: “%s”."
 
-#: branch.c:409
+#: branch.c:470
 #, c-format
 msgid "not a valid branch point: '%s'"
 msgstr "không phải là một điểm nhánh hợp lệ: “%s”"
 
-#: branch.c:469
+#: branch.c:658
+#, c-format
+msgid "submodule '%s': unable to find submodule"
+msgstr "mô-đun-con “%s”: không thể tìm thấy mô-đun-con"
+
+#: branch.c:661
+#, c-format
+msgid ""
+"You may try updating the submodules using 'git checkout %s && git submodule "
+"update --init'"
+msgstr ""
+"Bạn có thể thử cập nhật các mô-đun-con bằng cách sử dụng 'git checkout %s && "
+"git submodule update --init'"
+
+#: branch.c:672 branch.c:698
+#, c-format
+msgid "submodule '%s': cannot create branch '%s'"
+msgstr "mô-đun-con “%s”: không thể tạo nhánh “%s”"
+
+#: branch.c:730
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr "“%s” đã được lấy ra tại “%s” rồi"
 
-#: branch.c:494
+#: branch.c:755
 #, c-format
 msgid "HEAD of working tree %s is not updated"
 msgstr "HEAD của cây làm việc %s chưa được cập nhật"
 
-#: bundle.c:44
+#: bundle.c:45
 #, c-format
 msgid "unrecognized bundle hash algorithm: %s"
 msgstr "không hiểu thuật toán băm dữ liệu bundle: %s"
 
-#: bundle.c:48
+#: bundle.c:53
 #, c-format
 msgid "unknown capability '%s'"
 msgstr "không hiểu dung lượng “%s”"
 
-#: bundle.c:74
+#: bundle.c:79
 #, c-format
 msgid "'%s' does not look like a v2 or v3 bundle file"
 msgstr "“%s” không giống như tập tin v2 hay v3 bundle (định dạng dump của git)"
 
-#: bundle.c:113
+#: bundle.c:118
 #, c-format
 msgid "unrecognized header: %s%s (%d)"
 msgstr "phần đầu không được thừa nhận: %s%s (%d)"
 
-#: bundle.c:140 rerere.c:464 rerere.c:674 sequencer.c:2620 sequencer.c:3406
-#: builtin/commit.c:862
+#: bundle.c:145 rerere.c:464 rerere.c:675 sequencer.c:2616 sequencer.c:3402
+#: builtin/commit.c:865
 #, c-format
 msgid "could not open '%s'"
 msgstr "không thể mở “%s”"
 
-#: bundle.c:198
+#: bundle.c:203
 msgid "Repository lacks these prerequisite commits:"
 msgstr "Kho chứa thiếu những lần chuyển giao tiên quyết này:"
 
-#: bundle.c:201
+#: bundle.c:206
 msgid "need a repository to verify a bundle"
 msgstr "cần một kho chứa để thẩm tra một bundle"
 
-#: bundle.c:257
+#: bundle.c:264
 #, c-format
 msgid "The bundle contains this ref:"
-msgid_plural "The bundle contains these %d refs:"
-msgstr[0] "Bó dữ liệu chứa %d tham chiếu:"
+msgid_plural "The bundle contains these %<PRIuMAX> refs:"
+msgstr[0] "Bó dữ liệu chứa %<PRIuMAX> tham chiếu:"
 
-#: bundle.c:264
+#: bundle.c:272
 msgid "The bundle records a complete history."
 msgstr "Lệnh bundle ghi lại toàn bộ lịch sử."
 
-#: bundle.c:266
+#: bundle.c:274
 #, c-format
 msgid "The bundle requires this ref:"
-msgid_plural "The bundle requires these %d refs:"
-msgstr[0] "Lệnh bundle yêu cầu %d tham chiếu này:"
+msgid_plural "The bundle requires these %<PRIuMAX> refs:"
+msgstr[0] "Lệnh bundle yêu cầu %<PRIuMAX> tham chiếu này:"
 
-#: bundle.c:333
+#: bundle.c:350
 msgid "unable to dup bundle descriptor"
 msgstr "không thể nhân đôi bộ mô tả bundle"
 
-#: bundle.c:340
+#: bundle.c:357
 msgid "Could not spawn pack-objects"
 msgstr "Không thể sản sinh đối tượng gói"
 
-#: bundle.c:351
+#: bundle.c:368
 msgid "pack-objects died"
 msgstr "đối tượng gói đã chết"
 
-#: bundle.c:400
+#: bundle.c:417
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "th.chiếu “%s” bị loại trừ bởi các tùy chọn rev-list"
 
-#: bundle.c:504
+#: bundle.c:533 builtin/log.c:211 builtin/log.c:1975 builtin/shortlog.c:400
+#, c-format
+msgid "unrecognized argument: %s"
+msgstr "đối số không được thừa nhận: %s"
+
+#: bundle.c:548
 #, c-format
 msgid "unsupported bundle version %d"
 msgstr "phiên bản bundle %d không được hỗ trợ"
 
-#: bundle.c:506
+#: bundle.c:550
 #, c-format
 msgid "cannot write bundle version %d with algorithm %s"
 msgstr "không thể ghi phiên bản bundle %d với thuật toán %s"
 
-#: bundle.c:524 builtin/log.c:210 builtin/log.c:1953 builtin/shortlog.c:399
-#, c-format
-msgid "unrecognized argument: %s"
-msgstr "đối số không được thừa nhận: %s"
-
-#: bundle.c:553
+#: bundle.c:600
 msgid "Refusing to create empty bundle."
 msgstr "Từ chối tạo một bó dữ liệu trống rỗng."
 
-#: bundle.c:563
+#: bundle.c:610
 #, c-format
 msgid "cannot create '%s'"
 msgstr "không thể tạo “%s”"
 
-#: bundle.c:588
+#: bundle.c:639
 msgid "index-pack died"
 msgstr "mục lục gói đã chết"
 
@@ -2155,7 +2211,7 @@ msgstr "mảnh cuối cùng có id không bằng không %<PRIx32>"
 msgid "invalid color value: %.*s"
 msgstr "giá trị màu không hợp lệ: %.*s"
 
-#: commit-graph.c:204 midx.c:51
+#: commit-graph.c:204 midx.c:52
 msgid "invalid hash version"
 msgstr "phiên bản băm không hợp lệ"
 
@@ -2183,221 +2239,222 @@ msgstr "phiên bản đồ-thị-các-lần-chuyển-giao %X không khớp phiê
 msgid "commit-graph file is too small to hold %u chunks"
 msgstr "tập tin đồ-thị-các-lần-chuyển-giao quá nhỏ để giữ %u mảnh dữ liệu"
 
-#: commit-graph.c:482
+#: commit-graph.c:485
 msgid "commit-graph has no base graphs chunk"
 msgstr "đồ-thị-các-lần-chuyển-giao có không có mảnh các đồ họa cơ sở"
 
-#: commit-graph.c:492
+#: commit-graph.c:495
 msgid "commit-graph chain does not match"
 msgstr "móc xích đồ-thị-các-lần-chuyển-giao không khớp"
 
-#: commit-graph.c:540
+#: commit-graph.c:543
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
 msgstr ""
 "móc xích đồ-thị-các-lần-chuyển-giao không hợp lệ: dòng “%s” không phải là "
 "một mã băm"
 
-#: commit-graph.c:564
+#: commit-graph.c:567
 msgid "unable to find all commit-graph files"
 msgstr "không thể tìm thấy tất cả các tập tin đồ-thị-các-lần-chuyển-giao"
 
-#: commit-graph.c:749 commit-graph.c:786
+#: commit-graph.c:752 commit-graph.c:789
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr ""
 "vị trí lần chuyển giao không hợp lệ. đồ-thị-các-lần-chuyển-giao có vẻ như đã "
 "bị hỏng"
 
-#: commit-graph.c:770
+#: commit-graph.c:773
 #, c-format
 msgid "could not find commit %s"
 msgstr "không thể tìm thấy lần chuyển giao %s"
 
-#: commit-graph.c:803
+#: commit-graph.c:806
 msgid "commit-graph requires overflow generation data but has none"
 msgstr "commit-graph yêu cầu dữ liệu tạo tràn nhưng không có"
 
-#: commit-graph.c:1108 builtin/am.c:1369
+#: commit-graph.c:1111 builtin/am.c:1370 builtin/checkout.c:775
+#: builtin/clone.c:705
 #, c-format
 msgid "unable to parse commit %s"
 msgstr "không thể phân tích lần chuyển giao “%s”"
 
-#: commit-graph.c:1370 builtin/pack-objects.c:3070
+#: commit-graph.c:1373 builtin/pack-objects.c:3078
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "không thể lấy kiểu của đối tượng “%s”"
 
-#: commit-graph.c:1401
+#: commit-graph.c:1404
 msgid "Loading known commits in commit graph"
 msgstr "Đang tải các lần chuyển giao chưa biết trong đồ thị lần chuyển giao"
 
-#: commit-graph.c:1418
+#: commit-graph.c:1421
 msgid "Expanding reachable commits in commit graph"
 msgstr ""
 "Mở rộng các lần chuyển giao có thể tiếp cận được trong trong đồ thị lần "
 "chuyển giao"
 
-#: commit-graph.c:1438
+#: commit-graph.c:1441
 msgid "Clearing commit marks in commit graph"
 msgstr "Đang dọn dẹp các đánh dấu lần chuyển giao trong đồ thị lần chuyển giao"
 
-#: commit-graph.c:1457
+#: commit-graph.c:1460
 msgid "Computing commit graph topological levels"
 msgstr "Đang tính mức hình học tô-pô tạo đồ thị các lần chuyển giao"
 
-#: commit-graph.c:1510
+#: commit-graph.c:1513
 msgid "Computing commit graph generation numbers"
 msgstr "Đang tính toán số tạo đồ thị các lần chuyển giao"
 
-#: commit-graph.c:1591
+#: commit-graph.c:1598
 msgid "Computing commit changed paths Bloom filters"
 msgstr "Đang tính toán chuyển giao các bộ lọc Bloom đường dẫn bị thay đổi"
 
-#: commit-graph.c:1668
+#: commit-graph.c:1675
 msgid "Collecting referenced commits"
 msgstr "Đang sưu tập các lần chuyển giao được tham chiếu"
 
-#: commit-graph.c:1693
+#: commit-graph.c:1701
 #, c-format
-msgid "Finding commits for commit graph in %d pack"
-msgid_plural "Finding commits for commit graph in %d packs"
+msgid "Finding commits for commit graph in %<PRIuMAX> pack"
+msgid_plural "Finding commits for commit graph in %<PRIuMAX> packs"
 msgstr[0] ""
-"Đang tìm các lần chuyển giao cho đồ thị lần chuyển giao trong %d gói"
+"Đang tìm các lần chuyển giao cho đồ thị lần chuyển giao trong %<PRIuMAX> gói"
 
-#: commit-graph.c:1706
+#: commit-graph.c:1714
 #, c-format
 msgid "error adding pack %s"
 msgstr "gặp lỗi thêm gói %s"
 
-#: commit-graph.c:1710
+#: commit-graph.c:1718
 #, c-format
 msgid "error opening index for %s"
 msgstr "gặp lỗi khi mở mục lục cho “%s”"
 
-#: commit-graph.c:1747
+#: commit-graph.c:1756
 msgid "Finding commits for commit graph among packed objects"
 msgstr ""
 "Đang tìm các lần chuyển giao cho đồ thị lần chuyển giao trong số các đối "
 "tượng đã đóng gói"
 
-#: commit-graph.c:1765
+#: commit-graph.c:1774
 msgid "Finding extra edges in commit graph"
 msgstr "Đang tìm các cạnh mở tộng trong đồ thị lần chuyển giao"
 
-#: commit-graph.c:1814
+#: commit-graph.c:1823
 msgid "failed to write correct number of base graph ids"
 msgstr "gặp lỗi khi ghi số đúng của mã đồ họa cơ sở"
 
-#: commit-graph.c:1845 midx.c:1149
+#: commit-graph.c:1854 midx.c:1168 builtin/sparse-checkout.c:475
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "không thể tạo các thư mục dẫn đầu của “%s”"
 
-#: commit-graph.c:1858
+#: commit-graph.c:1868
 msgid "unable to create temporary graph layer"
 msgstr "không thể tạo lớp sơ đồ tạm thời"
 
-#: commit-graph.c:1863
+#: commit-graph.c:1873
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr "không thể chỉnh sửa quyền chia sẻ thành “%s”"
 
-#: commit-graph.c:1920
+#: commit-graph.c:1930
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "Đang ghi ra đồ thị các lần chuyển giao trong lần %d"
 
-#: commit-graph.c:1956
+#: commit-graph.c:1967
 msgid "unable to open commit-graph chain file"
 msgstr "không thể mở tập tin mắt xích đồ thị chuyển giao"
 
-#: commit-graph.c:1972
+#: commit-graph.c:1983
 msgid "failed to rename base commit-graph file"
 msgstr "gặp lỗi khi đổi tên tập tin đồ-thị-các-lần-chuyển-giao"
 
-#: commit-graph.c:1992
+#: commit-graph.c:2004
 msgid "failed to rename temporary commit-graph file"
 msgstr "gặp lỗi khi đổi tên tập tin đồ-thị-các-lần-chuyển-giao tạm thời"
 
-#: commit-graph.c:2125
+#: commit-graph.c:2137
 msgid "Scanning merged commits"
 msgstr "Đang quét các lần chuyển giao đã hòa trộn"
 
-#: commit-graph.c:2169
+#: commit-graph.c:2181
 msgid "Merging commit-graph"
 msgstr "Đang hòa trộn đồ-thị-các-lần-chuyển-giao"
 
-#: commit-graph.c:2277
+#: commit-graph.c:2289
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr ""
 "cố gắng để ghi một đồ thị các lần chuyển giao, nhưng “core.commitGraph” bị "
 "vô hiệu hóa"
 
-#: commit-graph.c:2384
+#: commit-graph.c:2396
 msgid "too many commits to write graph"
 msgstr "có quá nhiều lần chuyển giao để ghi đồ thị"
 
-#: commit-graph.c:2482
+#: commit-graph.c:2494
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr ""
 "tập tin đồ-thị-các-lần-chuyển-giao có tổng kiểm không đúng và có vẻ như là "
 "đã hỏng"
 
-#: commit-graph.c:2492
+#: commit-graph.c:2504
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "đồ-thị-các-lần-chuyển-giao có thứ tự OID không đúng: %s sau %s"
 
-#: commit-graph.c:2502 commit-graph.c:2517
+#: commit-graph.c:2514 commit-graph.c:2529
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr ""
 "đồ-thị-các-lần-chuyển-giao có giá trị fanout không đúng: fanout[%d] = %u != "
 "%u"
 
-#: commit-graph.c:2509
+#: commit-graph.c:2521
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "gặp lỗi khi phân tích lần chuyển giao từ %s đồ-thị-các-lần-chuyển-giao"
 
-#: commit-graph.c:2527
+#: commit-graph.c:2539
 msgid "Verifying commits in commit graph"
 msgstr "Đang thẩm tra các lần chuyển giao trong đồ thị lần chuyển giao"
 
-#: commit-graph.c:2542
+#: commit-graph.c:2554
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr ""
 "gặp lỗi khi phân tích lần chuyển giao %s từ cơ sở dữ liệu đối tượng cho đồ "
 "thị lần chuyển giao"
 
-#: commit-graph.c:2549
+#: commit-graph.c:2561
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr ""
 "OID cây gốc cho lần chuyển giao %s trong đồ-thị-các-lần-chuyển-giao là %s != "
 "%s"
 
-#: commit-graph.c:2559
+#: commit-graph.c:2571
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr ""
 "danh sách cha mẹ đồ-thị-các-lần-chuyển-giao cho lần chuyển giao %s là quá dài"
 
-#: commit-graph.c:2568
+#: commit-graph.c:2580
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "cha mẹ đồ-thị-các-lần-chuyển-giao cho %s là %s != %s"
 
-#: commit-graph.c:2582
+#: commit-graph.c:2594
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr ""
 "danh sách cha mẹ đồ-thị-các-lần-chuyển-giao cho lần chuyển giao %s bị chấm "
 "dứt quá sớm"
 
-#: commit-graph.c:2587
+#: commit-graph.c:2599
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
@@ -2405,7 +2462,7 @@ msgstr ""
 "đồ-thị-các-lần-chuyển-giao có con số không lần tạo cho lần chuyển giao %s, "
 "nhưng không phải số không ở chỗ khác"
 
-#: commit-graph.c:2591
+#: commit-graph.c:2603
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
@@ -2413,32 +2470,32 @@ msgstr ""
 "đồ-thị-các-lần-chuyển-giao có con số không phải không lần tạo cho lần chuyển "
 "giao %s, nhưng số không ở chỗ khác"
 
-#: commit-graph.c:2608
+#: commit-graph.c:2620
 #, c-format
 msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
 msgstr ""
 "tạo đồ-thị-các-lần-chuyển-giao cho lần chuyển giao %s là %<PRIuMAX> < "
 "%<PRIuMAX>"
 
-#: commit-graph.c:2614
+#: commit-graph.c:2626
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr ""
 "ngày chuyển giao cho lần chuyển giao %s trong đồ-thị-các-lần-chuyển-giao là "
 "%<PRIuMAX> != %<PRIuMAX>"
 
-#: commit.c:53 sequencer.c:3109 builtin/am.c:399 builtin/am.c:444
-#: builtin/am.c:449 builtin/am.c:1448 builtin/am.c:2123 builtin/replace.c:456
+#: commit.c:54 sequencer.c:3105 builtin/am.c:400 builtin/am.c:445
+#: builtin/am.c:450 builtin/am.c:1449 builtin/am.c:2124 builtin/replace.c:456
 #, c-format
 msgid "could not parse %s"
 msgstr "không thể phân tích cú pháp %s"
 
-#: commit.c:55
+#: commit.c:56
 #, c-format
 msgid "%s %s is not a commit!"
 msgstr "%s %s không phải là một lần chuyển giao!"
 
-#: commit.c:196
+#: commit.c:197
 msgid ""
 "Support for <GIT_DIR>/info/grafts is deprecated\n"
 "and will be removed in a future Git version.\n"
@@ -2458,28 +2515,28 @@ msgstr ""
 "Tắt lời nhắn này bằng cách chạy\n"
 "\"git config advice.graftFileDeprecated false\""
 
-#: commit.c:1241
+#: commit.c:1252
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr ""
 "Lần chuyển giao %s có một chữ ký GPG không đáng tin, được cho là bởi %s."
 
-#: commit.c:1245
+#: commit.c:1256
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "Lần chuyển giao %s có một chữ ký GPG sai, được cho là bởi %s."
 
-#: commit.c:1248
+#: commit.c:1259
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "Lần chuyển giao %s không có chữ ký GPG."
 
-#: commit.c:1251
+#: commit.c:1262
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "Lần chuyển giao %s có một chữ ký GPG tốt bởi %s\n"
 
-#: commit.c:1505
+#: commit.c:1516
 msgid ""
 "Warning: commit message did not conform to UTF-8.\n"
 "You may want to amend it after fixing the message, or set the config\n"
@@ -2493,7 +2550,17 @@ msgstr ""
 msgid "memory exhausted"
 msgstr "hết bộ nhớ"
 
-#: config.c:125
+#: compat/terminal.c:167
+msgid "cannot resume in the background, please use 'fg' to resume"
+msgstr ""
+"không thể khôi phục lại trong nền hệ thống, vui lòng sử dụng 'fg' để khôi "
+"phục lại"
+
+#: compat/terminal.c:168
+msgid "cannot restore terminal settings"
+msgstr "không thể phục hồi lại các cài đặt thiết bị cuối"
+
+#: config.c:143
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2508,335 +2575,362 @@ msgstr ""
 "\t%s\n"
 "Nguyên nhân có thể là gồm quẩn vòng."
 
-#: config.c:141
+#: config.c:159
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "không thể khai triển đường dẫn “%s”"
 
-#: config.c:152
+#: config.c:170
 msgid "relative config includes must come from files"
 msgstr "các bao gồm cấu hình liên quan phải đến từ các tập tin"
 
-#: config.c:201
+#: config.c:219
 msgid "relative config include conditionals must come from files"
 msgstr "các điều kiện bao gồm cấu hình liên quan phải đến từ các tập tin"
 
-#: config.c:398
+#: config.c:364
+msgid ""
+"remote URLs cannot be configured in file directly or indirectly included by "
+"includeIf.hasconfig:remote.*.url"
+msgstr ""
+"các URL máy chủ không thể được cấu hình trong tệp trực tiếp hoặc gián tiếp "
+"được bao gồm bởi includeIf.hasconfig:remote.*.url"
+
+#: config.c:508
 #, c-format
 msgid "invalid config format: %s"
 msgstr "định dạng cấu hình không hợp lệ: %s"
 
-#: config.c:402
+#: config.c:512
 #, c-format
 msgid "missing environment variable name for configuration '%.*s'"
 msgstr "thiếu tên biến môi trường cho cấu hình “%.*s”"
 
-#: config.c:407
+#: config.c:517
 #, c-format
 msgid "missing environment variable '%s' for configuration '%.*s'"
 msgstr "thiếu biến môi trường “%s” cho cấu hình “%.*s”"
 
-#: config.c:443
+#: config.c:553
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "khóa không chứa một phần: %s"
 
-#: config.c:448
+#: config.c:558
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr "khóa không chứa bất kỳ một tên biến nào: %s"
 
-#: config.c:470 sequencer.c:2806
+#: config.c:580 sequencer.c:2802
 #, c-format
 msgid "invalid key: %s"
 msgstr "khóa không đúng: %s"
 
-#: config.c:475
+#: config.c:585
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "khóa không hợp lệ (dòng mới): %s"
 
-#: config.c:495
+#: config.c:605
 msgid "empty config key"
 msgstr "khóa cấu hình trống rỗng"
 
-#: config.c:513 config.c:525
+#: config.c:623 config.c:635
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "tham số cấu hình không có thực: %s"
 
-#: config.c:539 config.c:556 config.c:563 config.c:572
+#: config.c:649 config.c:666 config.c:673 config.c:682
 #, c-format
 msgid "bogus format in %s"
 msgstr "định dạng không có thực trong %s"
 
-#: config.c:606
+#: config.c:716
 #, c-format
 msgid "bogus count in %s"
 msgstr "số lượng không có thực trong %s"
 
-#: config.c:610
+#: config.c:720
 #, c-format
 msgid "too many entries in %s"
 msgstr "quá nhiều mục tin trong %s"
 
-#: config.c:620
+#: config.c:730
 #, c-format
 msgid "missing config key %s"
 msgstr "thiếu khóa cấu hình “%s”"
 
-#: config.c:628
+#: config.c:738
 #, c-format
 msgid "missing config value %s"
 msgstr "thiếu giá trị cấu hình “%s”"
 
-#: config.c:979
+#: config.c:1089
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "tập tin cấu hình sai tại dòng %d trong blob %s"
 
-#: config.c:983
+#: config.c:1093
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "cấu hình sai tại dòng %d trong tập tin %s"
 
-#: config.c:987
+#: config.c:1097
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "cấu hình sai tại dòng %d trong đầu vào tiêu chuẩn"
 
-#: config.c:991
+#: config.c:1101
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "cấu hình sai tại dòng %d trong blob-mô-đun-con %s"
 
-#: config.c:995
+#: config.c:1105
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "cấu hình sai tại dòng %d trong dòng lệnh %s"
 
-#: config.c:999
+#: config.c:1109
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "cấu hình sai tại dòng %d trong %s"
 
-#: config.c:1136
+#: config.c:1246
 msgid "out of range"
 msgstr "nằm ngoài phạm vi"
 
-#: config.c:1136
+#: config.c:1246
 msgid "invalid unit"
 msgstr "đơn vị không hợp lệ"
 
-#: config.c:1137
+#: config.c:1247
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "sai giá trị bằng số của cấu hình “%s” cho “%s”: %s"
 
-#: config.c:1147
+#: config.c:1257
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr "sai giá trị bằng số của cấu hình “%s” cho “%s” trong blob %s: %s"
 
-#: config.c:1150
+#: config.c:1260
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr "sai giá trị bằng số của cấu hình “%s” cho “%s” trong tập tin %s: %s"
 
-#: config.c:1153
+#: config.c:1263
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr ""
 "sai giá trị bằng số của cấu hình “%s” cho “%s” trong đầu vào tiêu chuẩn: %s"
 
-#: config.c:1156
+#: config.c:1266
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr ""
 "sai giá trị bằng số của cấu hình “%s” cho “%s” trong submodule-blob %s: %s"
 
-#: config.c:1159
+#: config.c:1269
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr "sai giá trị bằng số của cấu hình “%s” cho “%s” trong dòng lệnh %s: %s"
 
-#: config.c:1162
+#: config.c:1272
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr "sai giá trị bằng số của cấu hình “%s” cho “%s” trong %s: %s"
 
-#: config.c:1241
+#: config.c:1368
+#, c-format
+msgid "invalid value for variable %s"
+msgstr "giá trị không hợp lệ cho biến %s"
+
+#: config.c:1389
+#, c-format
+msgid "ignoring unknown core.fsync component '%s'"
+msgstr "bỏ qua thành phần core.fsync chưa biết '%s'"
+
+#: config.c:1425
 #, c-format
 msgid "bad boolean config value '%s' for '%s'"
 msgstr "sai giá trị kiểu lô-gíc của cấu hình “%s” cho “%s”"
 
-#: config.c:1259
+#: config.c:1443
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "gặp lỗi mở rộng thư mục người dùng trong: “%s”"
 
-#: config.c:1268
+#: config.c:1452
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "“%s” dành cho “%s” không phải là dấu vết thời gian hợp lệ"
 
-#: config.c:1361
+#: config.c:1545
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "chiều dài abbrev nằm ngoài phạm vi: %d"
 
-#: config.c:1375 config.c:1386
+#: config.c:1559 config.c:1570
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "mức nén zlib %d là sai"
 
-#: config.c:1476
+#: config.c:1660
 msgid "core.commentChar should only be one character"
 msgstr "core.commentChar chỉ được có một ký tự"
 
-#: config.c:1509
+#: config.c:1692
+#, c-format
+msgid "ignoring unknown core.fsyncMethod value '%s'"
+msgstr "bỏ qua giá trị core.fsyncMethod chưa biết '%s'"
+
+#: config.c:1698
+msgid "core.fsyncObjectFiles is deprecated; use core.fsync instead"
+msgstr "core.fsyncObjectFiles đã lạc hậu; hãy dùng core.fsync để thay thế"
+
+#: config.c:1714
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "chế độ không hợp lệ đối với việc tạo đối tượng: %s"
 
-#: config.c:1584
+#: config.c:1800
 #, c-format
 msgid "malformed value for %s"
 msgstr "giá trị cho %s sai dạng"
 
-#: config.c:1610
+#: config.c:1826
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "giá trị cho %s sai dạng: %s"
 
-#: config.c:1611
+#: config.c:1827
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr "phải là một trong số nothing, matching, simple, upstream hay current"
 
-#: config.c:1672 builtin/pack-objects.c:4053
+#: config.c:1888 builtin/pack-objects.c:4078
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "mức nén gói %d không hợp lệ"
 
-#: config.c:1795
+#: config.c:2014
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "không thể tải đối tượng blob cấu hình “%s”"
 
-#: config.c:1798
+#: config.c:2017
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "tham chiếu “%s” không chỉ đến một blob nào cả"
 
-#: config.c:1816
+#: config.c:2035
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "không thể phân giải điểm xét duyệt “%s”"
 
-#: config.c:1861
+#: config.c:2080
 #, c-format
 msgid "failed to parse %s"
 msgstr "gặp lỗi khi phân tích cú pháp %s"
 
-#: config.c:1917
+#: config.c:2136
 msgid "unable to parse command-line config"
 msgstr "không thể phân tích cấu hình dòng lệnh"
 
-#: config.c:2285
+#: config.c:2512
 msgid "unknown error occurred while reading the configuration files"
 msgstr "đã có lỗi chưa biết xảy ra trong khi đọc các tập tin cấu hình"
 
-#: config.c:2459
+#: config.c:2686
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "%s không hợp lệ: “%s”"
 
-#: config.c:2504
+#: config.c:2731
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr "giá trị splitIndex.maxPercentChange “%d” phải nằm giữa 0 và 100"
 
-#: config.c:2550
+#: config.c:2763
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "không thể phân tích “%s” từ cấu hình dòng lệnh"
 
-#: config.c:2552
+#: config.c:2765
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "sai biến cấu hình “%s” trong tập tin “%s” tại dòng %d"
 
-#: config.c:2637
+#: config.c:2850
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "tên của phần không hợp lệ “%s”"
 
-#: config.c:2669
+#: config.c:2882
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s có đa giá trị"
 
-#: config.c:2698
+#: config.c:2911
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "gặp lỗi khi ghi tập tin cấu hình “%s”"
 
-#: config.c:2950 config.c:3277
+#: config.c:3177 config.c:3518
 #, c-format
 msgid "could not lock config file %s"
 msgstr "không thể khóa tập tin cấu hình %s"
 
-#: config.c:2961
+#: config.c:3188
 #, c-format
 msgid "opening %s"
 msgstr "đang mở “%s”"
 
-#: config.c:2998 builtin/config.c:361
+#: config.c:3225 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "mẫu không hợp lệ: %s"
 
-#: config.c:3023
+#: config.c:3250
 #, c-format
 msgid "invalid config file %s"
 msgstr "tập tin cấu hình “%s” không hợp lệ"
 
-#: config.c:3036 config.c:3290
+#: config.c:3263 config.c:3531
 #, c-format
 msgid "fstat on %s failed"
 msgstr "fstat trên %s gặp lỗi"
 
-#: config.c:3047
+#: config.c:3274
 #, c-format
 msgid "unable to mmap '%s'%s"
 msgstr "không thể mmap “%s”%s"
 
-#: config.c:3057 config.c:3295
+#: config.c:3284 config.c:3536
 #, c-format
 msgid "chmod on %s failed"
 msgstr "chmod trên %s gặp lỗi"
 
-#: config.c:3142 config.c:3392
+#: config.c:3369 config.c:3633
 #, c-format
 msgid "could not write config file %s"
 msgstr "không thể ghi tập tin cấu hình “%s”"
 
-#: config.c:3176
+#: config.c:3403
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "không thể đặt “%s” thành “%s”"
 
-#: config.c:3178 builtin/remote.c:662 builtin/remote.c:860 builtin/remote.c:868
+#: config.c:3405 builtin/remote.c:666 builtin/remote.c:885 builtin/remote.c:893
 #, c-format
 msgid "could not unset '%s'"
 msgstr "không thể thôi đặt “%s”"
 
-#: config.c:3268
+#: config.c:3509
 #, c-format
 msgid "invalid section name: %s"
 msgstr "tên của phần không hợp lệ: %s"
 
-#: config.c:3435
+#: config.c:3676
 #, c-format
 msgid "missing value for '%s'"
 msgstr "thiếu giá trị cho cho “%s”"
@@ -3169,75 +3263,75 @@ msgstr "từ chối làm việc với giấy chứng thực thiếu trường m
 msgid "refusing to work with credential missing protocol field"
 msgstr "từ chối làm việc với giấy chứng thực thiếu trường giao thức"
 
-#: credential.c:395
+#: credential.c:396
 #, c-format
 msgid "url contains a newline in its %s component: %s"
 msgstr "url có chứa một dấu xuống dòng trong thành phần %s của nó: %s"
 
-#: credential.c:439
+#: credential.c:440
 #, c-format
 msgid "url has no scheme: %s"
 msgstr "url không có lược đồ: %s"
 
-#: credential.c:512
+#: credential.c:513
 #, c-format
 msgid "credential url cannot be parsed: %s"
 msgstr "không thể phân tích cú pháp giấy chứng thực url: %s"
 
-#: date.c:138
+#: date.c:139
 msgid "in the future"
 msgstr "ở thời tương lai"
 
-#: date.c:144
+#: date.c:145
 #, c-format
 msgid "%<PRIuMAX> second ago"
 msgid_plural "%<PRIuMAX> seconds ago"
 msgstr[0] "%<PRIuMAX> giây trước"
 
-#: date.c:151
+#: date.c:152
 #, c-format
 msgid "%<PRIuMAX> minute ago"
 msgid_plural "%<PRIuMAX> minutes ago"
 msgstr[0] "%<PRIuMAX> phút trước"
 
-#: date.c:158
+#: date.c:159
 #, c-format
 msgid "%<PRIuMAX> hour ago"
 msgid_plural "%<PRIuMAX> hours ago"
 msgstr[0] "%<PRIuMAX> giờ trước"
 
-#: date.c:165
+#: date.c:166
 #, c-format
 msgid "%<PRIuMAX> day ago"
 msgid_plural "%<PRIuMAX> days ago"
 msgstr[0] "%<PRIuMAX> ngày trước"
 
-#: date.c:171
+#: date.c:172
 #, c-format
 msgid "%<PRIuMAX> week ago"
 msgid_plural "%<PRIuMAX> weeks ago"
 msgstr[0] "%<PRIuMAX> tuần trước"
 
-#: date.c:178
+#: date.c:179
 #, c-format
 msgid "%<PRIuMAX> month ago"
 msgid_plural "%<PRIuMAX> months ago"
 msgstr[0] "%<PRIuMAX> tháng trước"
 
-#: date.c:189
+#: date.c:190
 #, c-format
 msgid "%<PRIuMAX> year"
 msgid_plural "%<PRIuMAX> years"
 msgstr[0] "%<PRIuMAX> năm"
 
 #. TRANSLATORS: "%s" is "<n> years"
-#: date.c:192
+#: date.c:193
 #, c-format
 msgid "%s, %<PRIuMAX> month ago"
 msgid_plural "%s, %<PRIuMAX> months ago"
 msgstr[0] "%s, %<PRIuMAX> tháng trước"
 
-#: date.c:197 date.c:202
+#: date.c:198 date.c:203
 #, c-format
 msgid "%<PRIuMAX> year ago"
 msgid_plural "%<PRIuMAX> years ago"
@@ -3268,10 +3362,14 @@ msgstr ""
 msgid "Marked %d islands, done.\n"
 msgstr "Đã đánh dấu %d island, xong.\n"
 
-#: diff-merges.c:70
+#: diff-merges.c:81 gpg-interface.c:719 gpg-interface.c:734 ls-refs.c:37
+#: parallel-checkout.c:42 sequencer.c:2805 setup.c:563 builtin/am.c:203
+#: builtin/am.c:2243 builtin/am.c:2287 builtin/blame.c:724 builtin/blame.c:742
+#: builtin/fetch.c:792 builtin/pack-objects.c:3515 builtin/pull.c:45
+#: builtin/pull.c:47 builtin/pull.c:321
 #, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr "không hiểu giá trị cho --diff-merges: %s"
+msgid "invalid value for '%s': '%s'"
+msgstr "giá trị không hợp lệ cho '%s': '%s'"
 
 #: diff-lib.c:561
 msgid "--merge-base does not work with ranges"
@@ -3305,17 +3403,17 @@ msgstr ""
 "Không phải là một thư mục git. Dùng --no-index để so sánh hai đường dẫn bên "
 "ngoài một cây làm việc"
 
-#: diff.c:158
+#: diff.c:159
 #, c-format
 msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
 msgstr "  Gặp lỗi khi phân tích dirstat cắt bỏ phần trăm “%s”\n"
 
-#: diff.c:163
+#: diff.c:164
 #, c-format
 msgid "  Unknown dirstat parameter '%s'\n"
 msgstr "  Không hiểu đối số dirstat “%s”\n"
 
-#: diff.c:299
+#: diff.c:300
 msgid ""
 "color moved setting must be one of 'no', 'default', 'blocks', 'zebra', "
 "'dimmed-zebra', 'plain'"
@@ -3323,7 +3421,7 @@ msgstr ""
 "cài đặt màu đã di chuyển phải là một trong “no”, “default”, “blocks”, "
 "“zebra”, “dimmed-zebra”, “plain”"
 
-#: diff.c:327
+#: diff.c:328
 #, c-format
 msgid ""
 "unknown color-moved-ws mode '%s', possible values are 'ignore-space-change', "
@@ -3333,7 +3431,7 @@ msgstr ""
 "change”, “ignore-space-at-eol”, “ignore-all-space”, “allow-indentation-"
 "change”"
 
-#: diff.c:335
+#: diff.c:336
 msgid ""
 "color-moved-ws: allow-indentation-change cannot be combined with other "
 "whitespace modes"
@@ -3341,12 +3439,12 @@ msgstr ""
 "color-moved-ws: allow-indentation-change không thể tổ hợp cùng với các chế "
 "độ khoảng trắng khác"
 
-#: diff.c:412
+#: diff.c:413
 #, c-format
 msgid "Unknown value for 'diff.submodule' config variable: '%s'"
 msgstr "Không hiểu giá trị cho biến cấu hình “diff.submodule”: “%s”"
 
-#: diff.c:472
+#: diff.c:473
 #, c-format
 msgid ""
 "Found errors in 'diff.dirstat' config variable:\n"
@@ -3355,49 +3453,49 @@ msgstr ""
 "Tìm thấy các lỗi trong biến cấu hình “diff.dirstat”:\n"
 "%s"
 
-#: diff.c:4237
+#: diff.c:4282
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "phần mềm diff ở bên ngoài đã chết, dừng tại %s"
 
-#: diff.c:4589
+#: diff.c:4677 parse-options.c:1114
 #, c-format
 msgid "options '%s', '%s', '%s', and '%s' cannot be used together"
 msgstr "tùy chọn '%s', '%s', '%s' và '%s' không thể dùng cùng nhau"
 
-#: diff.c:4593 builtin/difftool.c:736 builtin/log.c:1982 builtin/worktree.c:506
+#: diff.c:4681 parse-options.c:1118 builtin/worktree.c:578
 #, c-format
 msgid "options '%s', '%s', and '%s' cannot be used together"
 msgstr "tùy chọn '%s', '%s' và '%s' không thể dùng cùng nhau"
 
-#: diff.c:4597
+#: diff.c:4685
 #, c-format
 msgid "options '%s' and '%s' cannot be used together, use '%s' with '%s'"
 msgstr "tùy chọn '%s' và '%s' không thể dùng cùng nhau, dùng '%s' với '%s'"
 
-#: diff.c:4601
+#: diff.c:4689
 #, c-format
 msgid ""
 "options '%s' and '%s' cannot be used together, use '%s' with '%s' and '%s'"
 msgstr ""
 "tùy chọn '%s' và '%s' không thể dùng cùng nhau, dùng '%s' với '%s' và '%s'"
 
-#: diff.c:4681
+#: diff.c:4769
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow cần chính xác một đặc tả đường dẫn"
 
-#: diff.c:4729
+#: diff.c:4823
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "giá trị --stat không hợp lệ: “%s”"
 
-#: diff.c:4734 diff.c:4739 diff.c:4744 diff.c:4749 diff.c:5277
+#: diff.c:4828 diff.c:4833 diff.c:4838 diff.c:4843 diff.c:5319
 #: parse-options.c:217 parse-options.c:221
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "tùy chọn “%s” cần một giá trị bằng số"
 
-#: diff.c:4766
+#: diff.c:4860
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3406,42 +3504,42 @@ msgstr ""
 "Gặp lỗi khi phân tích đối số tùy chọn --dirstat/-X:\n"
 "%s"
 
-#: diff.c:4851
+#: diff.c:4893
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "không hiểu lớp thay đổi “%c” trong --diff-filter=%s"
 
-#: diff.c:4875
+#: diff.c:4917
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "không hiểu giá trị sau ws-error-highlight=%.*s"
 
-#: diff.c:4889
+#: diff.c:4931
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "không thể phân giải “%s”"
 
-#: diff.c:4939 diff.c:4945
+#: diff.c:4981 diff.c:4987
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s cần dạng <n>/<m>"
 
-#: diff.c:4957
+#: diff.c:4999
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s cần một ký tự, nhưng lại nhận được “%s”"
 
-#: diff.c:4978
+#: diff.c:5020
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "đối số --color-moved sai: %s"
 
-#: diff.c:4997
+#: diff.c:5039
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "chế độ “%s” không hợp lệ trong --color-moved-ws"
 
-#: diff.c:5037
+#: diff.c:5079
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
@@ -3449,155 +3547,155 @@ msgstr ""
 "tùy chọn  diff-algorithm chấp nhận \"myers\", \"minimal\", \"patience\" và "
 "\"histogram\""
 
-#: diff.c:5073 diff.c:5093
+#: diff.c:5115 diff.c:5135
 #, c-format
 msgid "invalid argument to %s"
 msgstr "tham số cho %s không hợp lệ"
 
-#: diff.c:5197
+#: diff.c:5239
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr "đưa cho -I biểu thức chính quy không hợp lệ: “%s”"
 
-#: diff.c:5246
+#: diff.c:5288
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "gặp lỗi khi phân tích đối số tùy chọn --submodule: “%s”"
 
-#: diff.c:5302
+#: diff.c:5344
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "đối số --word-diff sai: %s"
 
-#: diff.c:5338
+#: diff.c:5380
 msgid "Diff output format options"
 msgstr "Các tùy chọn định dạng khi xuất các khác biệt"
 
-#: diff.c:5340 diff.c:5346
+#: diff.c:5382 diff.c:5388
 msgid "generate patch"
 msgstr "tạo miếng vá"
 
-#: diff.c:5343 builtin/log.c:179
+#: diff.c:5385 builtin/log.c:180
 msgid "suppress diff output"
 msgstr "chặn mọi kết xuất từ diff"
 
-#: diff.c:5348 diff.c:5462 diff.c:5469
+#: diff.c:5390 diff.c:5504 diff.c:5511
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5349 diff.c:5352
+#: diff.c:5391 diff.c:5394
 msgid "generate diffs with <n> lines context"
 msgstr "tạo khác biệt với <n> dòng ngữ cảnh"
 
-#: diff.c:5354
+#: diff.c:5396
 msgid "generate the diff in raw format"
 msgstr "tạo khác biệt ở định dạng thô"
 
-#: diff.c:5357
+#: diff.c:5399
 msgid "synonym for '-p --raw'"
 msgstr "đồng nghĩa với “-p --raw”"
 
-#: diff.c:5361
+#: diff.c:5403
 msgid "synonym for '-p --stat'"
 msgstr "đồng nghĩa với “-p --stat”"
 
-#: diff.c:5365
+#: diff.c:5407
 msgid "machine friendly --stat"
 msgstr "--stat thuận tiện cho máy đọc"
 
-#: diff.c:5368
+#: diff.c:5410
 msgid "output only the last line of --stat"
 msgstr "chỉ xuất những dòng cuối của --stat"
 
-#: diff.c:5370 diff.c:5378
+#: diff.c:5412 diff.c:5420
 msgid "<param1,param2>..."
 msgstr "<tham_số_1,tham_số_2>…"
 
-#: diff.c:5371
+#: diff.c:5413
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr "đầu ra phân phối của số lượng thay đổi tương đối cho mỗi thư mục con"
 
-#: diff.c:5375
+#: diff.c:5417
 msgid "synonym for --dirstat=cumulative"
 msgstr "đồng nghĩa với --dirstat=cumulative"
 
-#: diff.c:5379
+#: diff.c:5421
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "đồng nghĩa với --dirstat=files,param1,param2…"
 
-#: diff.c:5383
+#: diff.c:5425
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr ""
 "cảnh báo nếu các thay đổi đưa ra các bộ tạo xung đột hay lỗi khoảng trắng"
 
-#: diff.c:5386
+#: diff.c:5428
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr "tổng hợp dạng xúc tích như là tạo, đổi tên và các thay đổi chế độ"
 
-#: diff.c:5389
+#: diff.c:5431
 msgid "show only names of changed files"
 msgstr "chỉ hiển thị tên của các tập tin đổi"
 
-#: diff.c:5392
+#: diff.c:5434
 msgid "show only names and status of changed files"
 msgstr "chỉ hiển thị tên tập tin và tình trạng của các tập tin bị thay đổi"
 
-#: diff.c:5394
+#: diff.c:5436
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<rộng>[,<name-width>[,<số-lượng>]]"
 
-#: diff.c:5395
+#: diff.c:5437
 msgid "generate diffstat"
 msgstr "tạo diffstat"
 
-#: diff.c:5397 diff.c:5400 diff.c:5403
+#: diff.c:5439 diff.c:5442 diff.c:5445
 msgid "<width>"
 msgstr "<rộng>"
 
-#: diff.c:5398
+#: diff.c:5440
 msgid "generate diffstat with a given width"
 msgstr "tạo diffstat với độ rộng đã cho"
 
-#: diff.c:5401
+#: diff.c:5443
 msgid "generate diffstat with a given name width"
 msgstr "tạo diffstat với tên độ rộng đã cho"
 
-#: diff.c:5404
+#: diff.c:5446
 msgid "generate diffstat with a given graph width"
 msgstr "tạo diffstat với độ rộng đồ thị đã cho"
 
-#: diff.c:5406
+#: diff.c:5448
 msgid "<count>"
 msgstr "<số_lượng>"
 
-#: diff.c:5407
+#: diff.c:5449
 msgid "generate diffstat with limited lines"
 msgstr "tạo diffstat với các dòng bị giới hạn"
 
-#: diff.c:5410
+#: diff.c:5452
 msgid "generate compact summary in diffstat"
 msgstr "tạo tổng hợp xúc tích trong diffstat"
 
-#: diff.c:5413
+#: diff.c:5455
 msgid "output a binary diff that can be applied"
 msgstr "xuất ra một khác biệt dạng nhị phân cái mà có thể được áp dụng"
 
-#: diff.c:5416
+#: diff.c:5458
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr ""
 "hiển thị đầy đủ các tên đối tượng pre- và post-image trên các dòng \"mục lục"
 "\""
 
-#: diff.c:5418
+#: diff.c:5460
 msgid "show colored diff"
 msgstr "hiển thị thay đổi được tô màu"
 
-#: diff.c:5419
+#: diff.c:5461
 msgid "<kind>"
 msgstr "<kiểu>"
 
-#: diff.c:5420
+#: diff.c:5462
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
@@ -3605,7 +3703,7 @@ msgstr ""
 "tô sáng các lỗi về khoảng trắng trong các dòng “context”, “old” và “new” "
 "trong khác biệt"
 
-#: diff.c:5423
+#: diff.c:5465
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -3613,89 +3711,89 @@ msgstr ""
 "không munge tên đường dẫn và sử dụng NUL làm bộ phân tách trường đầu ra "
 "trong --raw hay --numstat"
 
-#: diff.c:5426 diff.c:5429 diff.c:5432 diff.c:5541
+#: diff.c:5468 diff.c:5471 diff.c:5474 diff.c:5583
 msgid "<prefix>"
 msgstr "<tiền_tố>"
 
-#: diff.c:5427
+#: diff.c:5469
 msgid "show the given source prefix instead of \"a/\""
 msgstr "hiển thị tiền tố nguồn đã cho thay cho \"a/\""
 
-#: diff.c:5430
+#: diff.c:5472
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "hiển thị tiền tố đích đã cho thay cho \"b/\""
 
-#: diff.c:5433
+#: diff.c:5475
 msgid "prepend an additional prefix to every line of output"
 msgstr "treo vào trước một tiền tố bổ sung cho mỗi dòng kết xuất"
 
-#: diff.c:5436
+#: diff.c:5478
 msgid "do not show any source or destination prefix"
 msgstr "đừng hiển thị bất kỳ tiền tố nguồn hay đích"
 
-#: diff.c:5439
+#: diff.c:5481
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr ""
 "hiển thị ngữ cảnh giữa các khúc khác biệt khi đạt đến số lượng dòng đã chỉ "
 "định"
 
-#: diff.c:5443 diff.c:5448 diff.c:5453
+#: diff.c:5485 diff.c:5490 diff.c:5495
 msgid "<char>"
 msgstr "<ký_tự>"
 
-#: diff.c:5444
+#: diff.c:5486
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "chỉ định một ký tự để biểu thị một dòng được thêm mới thay cho “+”"
 
-#: diff.c:5449
+#: diff.c:5491
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "chỉ định một ký tự để biểu thị một dòng đã cũ thay cho “-”"
 
-#: diff.c:5454
+#: diff.c:5496
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "chỉ định một ký tự để biểu thị một ngữ cảnh thay cho “”"
 
-#: diff.c:5457
+#: diff.c:5499
 msgid "Diff rename options"
 msgstr "Tùy chọn khác biệt đổi tên"
 
-#: diff.c:5458
+#: diff.c:5500
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5459
+#: diff.c:5501
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr "ngắt các thay đổi ghi lại hoàn thiện thành cặp của xóa và tạo"
 
-#: diff.c:5463
+#: diff.c:5505
 msgid "detect renames"
 msgstr "dò tìm các tên thay đổi"
 
-#: diff.c:5467
+#: diff.c:5509
 msgid "omit the preimage for deletes"
 msgstr "bỏ qua preimage (tiền ảnh??) cho các việc xóa"
 
-#: diff.c:5470
+#: diff.c:5512
 msgid "detect copies"
 msgstr "dò bản sao"
 
-#: diff.c:5474
+#: diff.c:5516
 msgid "use unmodified files as source to find copies"
 msgstr "dùng các tập tin không bị chỉnh sửa như là nguồn để tìm các bản sao"
 
-#: diff.c:5476
+#: diff.c:5518
 msgid "disable rename detection"
 msgstr "tắt dò tìm đổi tên"
 
-#: diff.c:5479
+#: diff.c:5521
 msgid "use empty blobs as rename source"
 msgstr "dùng các blob trống rống như là nguồn đổi tên"
 
-#: diff.c:5481
+#: diff.c:5523
 msgid "continue listing the history of a file beyond renames"
 msgstr "tiếp tục liệt kê lịch sử của một tập tin ngoài đổi tên"
 
-#: diff.c:5484
+#: diff.c:5526
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
@@ -3703,160 +3801,160 @@ msgstr ""
 "ngăn cản dò tìm đổi tên/bản sao nếu số lượng của đích đổi tên/bản sao vượt "
 "quá giới hạn đưa ra"
 
-#: diff.c:5486
+#: diff.c:5528
 msgid "Diff algorithm options"
 msgstr "Tùy chọn thuật toán khác biệt"
 
-#: diff.c:5488
+#: diff.c:5530
 msgid "produce the smallest possible diff"
 msgstr "sản sinh khác biệt ít nhất có thể"
 
-#: diff.c:5491
+#: diff.c:5533
 msgid "ignore whitespace when comparing lines"
 msgstr "lờ đi sự thay đổi do khoảng trắng gây ra khi so sánh các dòng"
 
-#: diff.c:5494
+#: diff.c:5536
 msgid "ignore changes in amount of whitespace"
 msgstr "lờ đi sự thay đổi do số lượng khoảng trắng gây ra"
 
-#: diff.c:5497
+#: diff.c:5539
 msgid "ignore changes in whitespace at EOL"
 msgstr "lờ đi sự thay đổi do khoảng trắng gây ra khi ở cuối dòng EOL"
 
-#: diff.c:5500
+#: diff.c:5542
 msgid "ignore carrier-return at the end of line"
 msgstr "bỏ qua ký tự về đầu dòng tại cuối dòng"
 
-#: diff.c:5503
+#: diff.c:5545
 msgid "ignore changes whose lines are all blank"
 msgstr "bỏ qua các thay đổi cho toàn bộ các dòng là trống"
 
-#: diff.c:5505 diff.c:5527 diff.c:5530 diff.c:5575
+#: diff.c:5547 diff.c:5569 diff.c:5572 diff.c:5617
 msgid "<regex>"
 msgstr "<regex>"
 
-#: diff.c:5506
+#: diff.c:5548
 msgid "ignore changes whose all lines match <regex>"
 msgstr "bỏ qua các thay đổi có tất cả các dòng khớp <regex>"
 
-#: diff.c:5509
+#: diff.c:5551
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr "heuristic để dịch hạn biên của khối khác biệt cho dễ đọc"
 
-#: diff.c:5512
+#: diff.c:5554
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "tạo khác biệt sử dung thuật toán \"patience diff\""
 
-#: diff.c:5516
+#: diff.c:5558
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "tạo khác biệt sử dung thuật toán \"histogram diff\""
 
-#: diff.c:5518
+#: diff.c:5560
 msgid "<algorithm>"
 msgstr "<thuật toán>"
 
-#: diff.c:5519
+#: diff.c:5561
 msgid "choose a diff algorithm"
 msgstr "chọn một thuật toán khác biệt"
 
-#: diff.c:5521
+#: diff.c:5563
 msgid "<text>"
 msgstr "<văn bản>"
 
-#: diff.c:5522
+#: diff.c:5564
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "tạo khác biệt sử dung thuật toán \"anchored diff\""
 
-#: diff.c:5524 diff.c:5533 diff.c:5536
+#: diff.c:5566 diff.c:5575 diff.c:5578
 msgid "<mode>"
 msgstr "<chế độ>"
 
-#: diff.c:5525
+#: diff.c:5567
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr ""
 "hiển thị khác biệt từ, sử dụng <chế độ> để bỏ giới hạn các từ bị thay đổi"
 
-#: diff.c:5528
+#: diff.c:5570
 msgid "use <regex> to decide what a word is"
 msgstr "dùng <regex> để quyết định từ là cái gì"
 
-#: diff.c:5531
+#: diff.c:5573
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "tương đương với --word-diff=color --word-diff-regex=<regex>"
 
-#: diff.c:5534
+#: diff.c:5576
 msgid "moved lines of code are colored differently"
 msgstr "các dòng di chuyển của mã mà được tô màu khác nhau"
 
-#: diff.c:5537
+#: diff.c:5579
 msgid "how white spaces are ignored in --color-moved"
 msgstr "cách bỏ qua khoảng trắng trong --color-moved"
 
-#: diff.c:5540
+#: diff.c:5582
 msgid "Other diff options"
 msgstr "Các tùy chọn khác biệt khác"
 
-#: diff.c:5542
+#: diff.c:5584
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr ""
 "khi chạy từ thư mục con, thực thi các thay đổi bên ngoài và hiển thị các "
 "đường dẫn liên quan"
 
-#: diff.c:5546
+#: diff.c:5588
 msgid "treat all files as text"
 msgstr "coi mọi tập tin là dạng văn bản thường"
 
-#: diff.c:5548
+#: diff.c:5590
 msgid "swap two inputs, reverse the diff"
 msgstr "tráo đổi hai đầu vào, đảo ngược khác biệt"
 
-#: diff.c:5550
+#: diff.c:5592
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "thoát với mã 1 nếu không có khác biệt gì, 0 nếu ngược lại"
 
-#: diff.c:5552
+#: diff.c:5594
 msgid "disable all output of the program"
 msgstr "tắt mọi kết xuất của chương trình"
 
-#: diff.c:5554
+#: diff.c:5596
 msgid "allow an external diff helper to be executed"
 msgstr "cho phép mộ bộ hỗ trợ xuất khác biệt ở bên ngoài được phép thực thi"
 
-#: diff.c:5556
+#: diff.c:5598
 msgid "run external text conversion filters when comparing binary files"
 msgstr ""
 "chạy các bộ lọc văn bản thông thường bên ngoài khi so sánh các tập tin nhị "
 "phân"
 
-#: diff.c:5558
+#: diff.c:5600
 msgid "<when>"
 msgstr "<khi>"
 
-#: diff.c:5559
+#: diff.c:5601
 msgid "ignore changes to submodules in the diff generation"
 msgstr "bỏ qua các thay đổi trong mô-đun-con trong khi tạo khác biệt"
 
-#: diff.c:5562
+#: diff.c:5604
 msgid "<format>"
 msgstr "<định dạng>"
 
-#: diff.c:5563
+#: diff.c:5605
 msgid "specify how differences in submodules are shown"
 msgstr "chi định khác biệt bao nhiêu trong các mô đun con được hiển thị"
 
-#: diff.c:5567
+#: diff.c:5609
 msgid "hide 'git add -N' entries from the index"
 msgstr "ẩn các mục “git add -N” từ bảng mục lục"
 
-#: diff.c:5570
+#: diff.c:5612
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "coi các mục “git add -N” như là có thật trong bảng mục lục"
 
-#: diff.c:5572
+#: diff.c:5614
 msgid "<string>"
 msgstr "<chuỗi>"
 
-#: diff.c:5573
+#: diff.c:5615
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
@@ -3864,7 +3962,7 @@ msgstr ""
 "tìm các khác biệt cái mà thay đổi số lượng xảy ra của các phát sinh của "
 "chuỗi được chỉ ra"
 
-#: diff.c:5576
+#: diff.c:5618
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
@@ -3872,35 +3970,35 @@ msgstr ""
 "tìm các khác biệt cái mà thay đổi số lượng xảy ra của các phát sinh của biểu "
 "thức chính quy được chỉ ra"
 
-#: diff.c:5579
+#: diff.c:5621
 msgid "show all changes in the changeset with -S or -G"
 msgstr "hiển thị tất cả các thay đổi trong một bộ các thay đổi với -S hay -G"
 
-#: diff.c:5582
+#: diff.c:5624
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "coi <chuỗi> trong -S như là biểu thức chính qui POSIX có mở rộng"
 
-#: diff.c:5585
+#: diff.c:5627
 msgid "control the order in which files appear in the output"
 msgstr "điều khiển thứ tự xuát hiện các tập tin trong kết xuất"
 
-#: diff.c:5586 diff.c:5589
+#: diff.c:5628 diff.c:5631
 msgid "<path>"
 msgstr "<đường-dẫn>"
 
-#: diff.c:5587
+#: diff.c:5629
 msgid "show the change in the specified path first"
 msgstr "hiển thị các thay đổi trong đường dẫn đã cho đầu tiên"
 
-#: diff.c:5590
+#: diff.c:5632
 msgid "skip the output to the specified path"
 msgstr "bỏ qua đầu ra đến đường dẫn đã cho"
 
-#: diff.c:5592
+#: diff.c:5634
 msgid "<object-id>"
 msgstr "<mã-số-đối-tượng>"
 
-#: diff.c:5593
+#: diff.c:5635
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
@@ -3908,32 +4006,32 @@ msgstr ""
 "tìm các khác biệt cái mà thay đổi số lượng xảy ra của các phát sinh của đối "
 "tượng được chỉ ra"
 
-#: diff.c:5595
+#: diff.c:5637
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)…[*]]"
 
-#: diff.c:5596
+#: diff.c:5638
 msgid "select files by diff type"
 msgstr "chọn các tập tin theo kiểu khác biệt"
 
-#: diff.c:5598
+#: diff.c:5640
 msgid "<file>"
 msgstr "<tập_tin>"
 
-#: diff.c:5599
-msgid "Output to a specific file"
-msgstr "Xuất ra một tập tin cụ thể"
+#: diff.c:5641
+msgid "output to a specific file"
+msgstr "xuất ra một tập tin cụ thể"
 
-#: diff.c:6257
+#: diff.c:6321
 msgid "exhaustive rename detection was skipped due to too many files."
 msgstr "nhận thấy đổi tên toàn diện đã bị bỏ qua bởi có quá nhiều tập tin."
 
-#: diff.c:6260
+#: diff.c:6324
 msgid "only found copies from modified paths due to too many files."
 msgstr ""
 "chỉ tìm thấy các bản sao từ đường dẫn đã sửa đổi bởi vì có quá nhiều tập tin."
 
-#: diff.c:6263
+#: diff.c:6327
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -3984,20 +4082,20 @@ msgstr "vô hiệu khớp mẫu nón"
 msgid "cannot use %s as an exclude file"
 msgstr "không thể dùng %s như là một tập tin loại trừ"
 
-#: dir.c:2418
+#: dir.c:2419
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "không thể mở thư mục “%s”"
 
-#: dir.c:2720
+#: dir.c:2721
 msgid "failed to get kernel name and information"
 msgstr "gặp lỗi khi lấy tên và thông tin của nhân"
 
-#: dir.c:2844
+#: dir.c:2846
 msgid "untracked cache is disabled on this system or location"
 msgstr "bộ nhớ tạm không theo vết bị tắt trên hệ thống hay vị trí này"
 
-#: dir.c:3112
+#: dir.c:3119
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -4005,17 +4103,17 @@ msgstr ""
 "Không đoán được thư mục tên là gì.\n"
 "Vui lòng chỉ định tên một thư mục trên dòng lệnh"
 
-#: dir.c:3800
+#: dir.c:3807
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "tập tin ghi bảng mục lục bị hỏng trong kho %s"
 
-#: dir.c:3847 dir.c:3852
+#: dir.c:3854 dir.c:3859
 #, c-format
 msgid "could not create directories for %s"
 msgstr "không thể tạo thư mục cho %s"
 
-#: dir.c:3881
+#: dir.c:3888
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "không thể di dời thư mục git từ “%s” sang “%s”"
@@ -4034,7 +4132,7 @@ msgstr "Nội dung lọc"
 msgid "could not stat file '%s'"
 msgstr "không thể lấy thống kê tập tin “%s”"
 
-#: environment.c:145
+#: environment.c:147
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "đường dẫn không gian tên git \"%s\" sai"
@@ -4065,248 +4163,275 @@ msgstr "git fetch-pack: cần ACK/NAK, nhưng lại nhận được “%s”"
 msgid "unable to write to remote"
 msgstr "không thể ghi lên máy phục vụ"
 
-#: fetch-pack.c:395 fetch-pack.c:1439
+#: fetch-pack.c:397 fetch-pack.c:1460
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "dòng shallow không hợp lệ: %s"
 
-#: fetch-pack.c:401 fetch-pack.c:1445
+#: fetch-pack.c:403 fetch-pack.c:1466
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "dòng unshallow không hợp lệ: %s"
 
-#: fetch-pack.c:403 fetch-pack.c:1447
+#: fetch-pack.c:405 fetch-pack.c:1468
 #, c-format
 msgid "object not found: %s"
 msgstr "không tìm thấy đối tượng: %s"
 
-#: fetch-pack.c:406 fetch-pack.c:1450
+#: fetch-pack.c:408 fetch-pack.c:1471
 #, c-format
 msgid "error in object: %s"
 msgstr "lỗi trong đối tượng: %s"
 
-#: fetch-pack.c:408 fetch-pack.c:1452
+#: fetch-pack.c:410 fetch-pack.c:1473
 #, c-format
 msgid "no shallow found: %s"
 msgstr "không tìm shallow nào: %s"
 
-#: fetch-pack.c:411 fetch-pack.c:1456
+#: fetch-pack.c:413 fetch-pack.c:1477
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "cần shallow/unshallow, nhưng lại nhận được %s"
 
-#: fetch-pack.c:451
+#: fetch-pack.c:453
 #, c-format
 msgid "got %s %d %s"
 msgstr "nhận %s %d - %s"
 
-#: fetch-pack.c:468
+#: fetch-pack.c:470
 #, c-format
 msgid "invalid commit %s"
 msgstr "lần chuyển giao %s không hợp lệ"
 
-#: fetch-pack.c:499
+#: fetch-pack.c:501
 msgid "giving up"
 msgstr "chịu thua"
 
-#: fetch-pack.c:512 progress.c:339
+#: fetch-pack.c:514 progress.h:25
 msgid "done"
 msgstr "xong"
 
-#: fetch-pack.c:524
+#: fetch-pack.c:526
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "nhận %s (%d) %s"
 
-#: fetch-pack.c:560
+#: fetch-pack.c:562
 #, c-format
 msgid "Marking %s as complete"
 msgstr "Đánh dấu %s là đã hoàn thành"
 
-#: fetch-pack.c:775
+#: fetch-pack.c:784
 #, c-format
 msgid "already have %s (%s)"
 msgstr "đã sẵn có %s (%s)"
 
-#: fetch-pack.c:861
+#: fetch-pack.c:870
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack: không thể rẽ nhánh sideband demultiplexer"
 
-#: fetch-pack.c:869
+#: fetch-pack.c:878
 msgid "protocol error: bad pack header"
 msgstr "lỗi giao thức: phần đầu gói bị sai"
 
-#: fetch-pack.c:965
+#: fetch-pack.c:974
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack: không thể rẽ nhánh %s"
 
-#: fetch-pack.c:971
+#: fetch-pack.c:980
 msgid "fetch-pack: invalid index-pack output"
 msgstr "fetch-pack: kết xuất index-pack không hợp lệ"
 
-#: fetch-pack.c:988
+#: fetch-pack.c:997
 #, c-format
 msgid "%s failed"
 msgstr "%s gặp lỗi"
 
-#: fetch-pack.c:990
+#: fetch-pack.c:999
 msgid "error in sideband demultiplexer"
 msgstr "có lỗi trong sideband demultiplexer"
 
-#: fetch-pack.c:1035
+#: fetch-pack.c:1048
 #, c-format
 msgid "Server version is %.*s"
 msgstr "Phiên bản máy chủ là %.*s"
 
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1052 fetch-pack.c:1058
-#: fetch-pack.c:1062 fetch-pack.c:1066 fetch-pack.c:1070 fetch-pack.c:1074
-#: fetch-pack.c:1078 fetch-pack.c:1082 fetch-pack.c:1086 fetch-pack.c:1090
-#: fetch-pack.c:1096 fetch-pack.c:1102 fetch-pack.c:1107 fetch-pack.c:1112
+#: fetch-pack.c:1056 fetch-pack.c:1062 fetch-pack.c:1065 fetch-pack.c:1071
+#: fetch-pack.c:1075 fetch-pack.c:1079 fetch-pack.c:1083 fetch-pack.c:1087
+#: fetch-pack.c:1091 fetch-pack.c:1095 fetch-pack.c:1099 fetch-pack.c:1103
+#: fetch-pack.c:1109 fetch-pack.c:1115 fetch-pack.c:1120 fetch-pack.c:1125
 #, c-format
 msgid "Server supports %s"
 msgstr "Máy chủ hỗ trợ %s"
 
-#: fetch-pack.c:1045
+#: fetch-pack.c:1058
 msgid "Server does not support shallow clients"
 msgstr "Máy chủ không hỗ trợ máy khách shallow"
 
-#: fetch-pack.c:1105
+#: fetch-pack.c:1118
 msgid "Server does not support --shallow-since"
 msgstr "Máy chủ không hỗ trợ --shallow-since"
 
-#: fetch-pack.c:1110
+#: fetch-pack.c:1123
 msgid "Server does not support --shallow-exclude"
 msgstr "Máy chủ không hỗ trợ --shallow-exclude"
 
-#: fetch-pack.c:1114
+#: fetch-pack.c:1127
 msgid "Server does not support --deepen"
 msgstr "Máy chủ không hỗ trợ --deepen"
 
-#: fetch-pack.c:1116
+#: fetch-pack.c:1129
 msgid "Server does not support this repository's object format"
 msgstr "Máy chủ không hỗ trợ định dạng đối tượng của kho này"
 
-#: fetch-pack.c:1129
+#: fetch-pack.c:1142
 msgid "no common commits"
 msgstr "không có lần chuyển giao chung nào"
 
-#: fetch-pack.c:1138 fetch-pack.c:1485 builtin/clone.c:1130
+#: fetch-pack.c:1151 fetch-pack.c:1506 builtin/clone.c:1166
 msgid "source repository is shallow, reject to clone."
 msgstr "kho nguồn là nông, nên bỏ từ chối nhân bản."
 
-#: fetch-pack.c:1144 fetch-pack.c:1681
+#: fetch-pack.c:1157 fetch-pack.c:1705
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack: fetch gặp lỗi."
 
-#: fetch-pack.c:1258
+#: fetch-pack.c:1271
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "các thuật toán không khớp nhau: máy khách %s; máy chủ %s"
 
-#: fetch-pack.c:1262
+#: fetch-pack.c:1275
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "máy chủ không hỗ trợ thuật toán “%s”"
 
-#: fetch-pack.c:1295
+#: fetch-pack.c:1308
 msgid "Server does not support shallow requests"
 msgstr "Máy chủ không hỗ trợ yêu cầu shallow"
 
-#: fetch-pack.c:1302
+#: fetch-pack.c:1315
 msgid "Server supports filter"
 msgstr "Máy chủ hỗ trợ bộ lọc"
 
-#: fetch-pack.c:1345 fetch-pack.c:2063
+#: fetch-pack.c:1358 fetch-pack.c:2087
 msgid "unable to write request to remote"
 msgstr "không thể ghi các yêu cầu lên máy phục vụ"
 
-#: fetch-pack.c:1363
+#: fetch-pack.c:1376
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "gặp lỗi khi đọc phần đầu của đoạn %s"
 
-#: fetch-pack.c:1369
+#: fetch-pack.c:1382
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "cần “%s”, nhưng lại nhận “%s”"
 
-#: fetch-pack.c:1403
+#: fetch-pack.c:1416
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "gặp dòng không được thừa nhận: “%s”"
 
-#: fetch-pack.c:1408
+#: fetch-pack.c:1421
 #, c-format
 msgid "error processing acks: %d"
 msgstr "gặp lỗi khi xử lý tín hiệu trả lời: %d"
 
-#: fetch-pack.c:1418
-msgid "expected packfile to be sent after 'ready'"
-msgstr "cần tập tin gói để gửi sau “ready”"
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#.
+#: fetch-pack.c:1435
+#, c-format
+msgid "expected packfile to be sent after '%s'"
+msgstr "cần tập tin gói để gửi sau “%s”"
 
-#: fetch-pack.c:1420
-msgid "expected no other sections to be sent after no 'ready'"
-msgstr "không cần thêm phần nào để gửi sau “ready”"
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#.
+#: fetch-pack.c:1441
+#, c-format
+msgid "expected no other sections to be sent after no '%s'"
+msgstr "không cần thêm phần nào để gửi sau không “%s”"
 
-#: fetch-pack.c:1461
+#: fetch-pack.c:1482
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "lỗi xử lý thông tin shallow: %d"
 
-#: fetch-pack.c:1510
+#: fetch-pack.c:1531
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "cần wanted-ref, nhưng lại nhận được “%s”"
 
-#: fetch-pack.c:1515
+#: fetch-pack.c:1536
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "wanted-ref không được mong đợi: “%s”"
 
-#: fetch-pack.c:1520
+#: fetch-pack.c:1541
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "lỗi khi xử lý wanted refs: %d"
 
-#: fetch-pack.c:1550
+#: fetch-pack.c:1571
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack: cần nhận được trả lời là kết thúc gói"
 
-#: fetch-pack.c:1959
+#: fetch-pack.c:1983
 msgid "no matching remote head"
 msgstr "không khớp phần đầu máy chủ"
 
-#: fetch-pack.c:1982 builtin/clone.c:581
+#: fetch-pack.c:2006 builtin/clone.c:587
 msgid "remote did not send all necessary objects"
 msgstr "máy chủ đã không gửi tất cả các đối tượng cần thiết"
 
-#: fetch-pack.c:2085
+#: fetch-pack.c:2109
 msgid "unexpected 'ready' from remote"
 msgstr "gặp “ready” đột xuất từ máy chủ"
 
-#: fetch-pack.c:2108
+#: fetch-pack.c:2132
 #, c-format
 msgid "no such remote ref %s"
 msgstr "không có máy chủ tham chiếu nào như %s"
 
-#: fetch-pack.c:2111
+#: fetch-pack.c:2135
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr ""
 "Máy phục vụ không cho phép yêu cầu cho đối tượng không được báo trước %s"
 
-#: gpg-interface.c:329 gpg-interface.c:457 gpg-interface.c:974
-#: gpg-interface.c:990
+#: fsmonitor-ipc.c:119
+#, c-format
+msgid "fsmonitor_ipc__send_query: invalid path '%s'"
+msgstr "fsmonitor_ipc__send_query: đường dẫn không hợp lệ '%s'"
+
+#: fsmonitor-ipc.c:125
+#, c-format
+msgid "fsmonitor_ipc__send_query: unspecified error on '%s'"
+msgstr "fsmonitor_ipc__send_query: lỗi chưa rõ trên '%s'"
+
+#: fsmonitor-ipc.c:155
+msgid "fsmonitor--daemon is not running"
+msgstr "fsmonitor--daemon hiện tại chưa chạy"
+
+#: fsmonitor-ipc.c:164
+#, c-format
+msgid "could not send '%s' command to fsmonitor--daemon"
+msgstr "không thể gửi lệnh '%s' đến fsmonitor--daemon"
+
+#: gpg-interface.c:329 gpg-interface.c:456 gpg-interface.c:995
+#: gpg-interface.c:1011
 msgid "could not create temporary file"
 msgstr "không thể tạo tập tin tạm thời"
 
-#: gpg-interface.c:332 gpg-interface.c:460
+#: gpg-interface.c:332 gpg-interface.c:459
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr "gặp lỗi khi ghi chữ ký đính kèm vào “%s”"
 
-#: gpg-interface.c:451
+#: gpg-interface.c:450
 msgid ""
 "gpg.ssh.allowedSignersFile needs to be configured and exist for ssh "
 "signature verification"
@@ -4314,7 +4439,7 @@ msgstr ""
 "gpg.ssh.allowedSignersFile cần được cấu hình và tồn tại để xác minh chữ ký "
 "ssh"
 
-#: gpg-interface.c:480
+#: gpg-interface.c:479
 msgid ""
 "ssh-keygen -Y find-principals/verify is needed for ssh signature "
 "verification (available in openssh version 8.2p1+)"
@@ -4322,57 +4447,57 @@ msgstr ""
 "ssh-keygen -Y find-principals/verify là cần thiết để xác minh chữ ký ssh (có "
 "sẵn trong phiên bản openssh 8.2p1+)"
 
-#: gpg-interface.c:536
+#: gpg-interface.c:550
 #, c-format
 msgid "ssh signing revocation file configured but not found: %s"
 msgstr "tập tin thu hồi chữ ký ssh đã được cấu hình nhưng không tìm thấy: %s"
 
-#: gpg-interface.c:624
+#: gpg-interface.c:638
 #, c-format
 msgid "bad/incompatible signature '%s'"
 msgstr "chữ sai / không tương thích “%s”"
 
-#: gpg-interface.c:801 gpg-interface.c:806
+#: gpg-interface.c:815 gpg-interface.c:820
 #, c-format
 msgid "failed to get the ssh fingerprint for key '%s'"
 msgstr "gặp lỗi khi lấy dấu vân tay ssh cho khóa “%s”"
 
-#: gpg-interface.c:829
+#: gpg-interface.c:843
 msgid ""
 "either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured"
 msgstr ""
 "hoặc là user.signingkey hoặc gpg.ssh.defaultKeyCommand cần được cấu hình"
 
-#: gpg-interface.c:851
+#: gpg-interface.c:865
 #, c-format
 msgid "gpg.ssh.defaultKeyCommand succeeded but returned no keys: %s %s"
 msgstr ""
 "gpg.ssh.defaultKeyCommand thành công nhưng lại không trả về khóa nào: %s %s"
 
-#: gpg-interface.c:857
+#: gpg-interface.c:871
 #, c-format
 msgid "gpg.ssh.defaultKeyCommand failed: %s %s"
 msgstr "gpg.ssh.defaultKeyCommand gặp lỗi: %s %s"
 
-#: gpg-interface.c:945
+#: gpg-interface.c:966
 msgid "gpg failed to sign the data"
 msgstr "gpg gặp lỗi khi ký dữ liệu"
 
-#: gpg-interface.c:967
+#: gpg-interface.c:988
 msgid "user.signingkey needs to be set for ssh signing"
 msgstr "user.signingkey cần được đặt cho ký ssh"
 
-#: gpg-interface.c:978
+#: gpg-interface.c:999
 #, c-format
 msgid "failed writing ssh signing key to '%s'"
 msgstr "gặp lỗi khi ghi chìa khóa ký ssh vào “%s”"
 
-#: gpg-interface.c:996
+#: gpg-interface.c:1017
 #, c-format
 msgid "failed writing ssh signing key buffer to '%s'"
 msgstr "gặp lỗi khi ghi bộ đệm chìa khóa ký ssh vào “%s”"
 
-#: gpg-interface.c:1014
+#: gpg-interface.c:1035
 msgid ""
 "ssh-keygen -Y sign is needed for ssh signing (available in openssh version "
 "8.2p1+)"
@@ -4380,7 +4505,7 @@ msgstr ""
 "ssh-keygen -Y sign là cần thiết cho ký ssh (sẵn có trong openssh phiên bản "
 "8.2p1+)"
 
-#: gpg-interface.c:1026
+#: gpg-interface.c:1047
 #, c-format
 msgid "failed reading ssh signing data buffer from '%s'"
 msgstr "gặp lỗi khi đọc bộ đệm dữ liệu chữ ký ssh từ “%s”"
@@ -4390,7 +4515,7 @@ msgstr "gặp lỗi khi đọc bộ đệm dữ liệu chữ ký ssh từ “%s
 msgid "ignored invalid color '%.*s' in log.graphColors"
 msgstr "bỏ qua màu không hợp lệ “%.*s” trong log.graphColors"
 
-#: grep.c:531
+#: grep.c:446
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
@@ -4398,109 +4523,109 @@ msgstr ""
 "mẫu đã cho có chứa NULL byte (qua -f <file>). Điều này chỉ được hỗ trợ với -"
 "P dưới PCRE v2"
 
-#: grep.c:1942
+#: grep.c:1859
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "“%s”: không thể đọc %s"
 
-#: grep.c:1959 setup.c:177 builtin/clone.c:302 builtin/diff.c:90
+#: grep.c:1876 setup.c:178 builtin/clone.c:308 builtin/diff.c:90
 #: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "gặp lỗi khi lấy thống kê về “%s”"
 
-#: grep.c:1970
+#: grep.c:1887
 #, c-format
 msgid "'%s': short read"
 msgstr "“%s”: đọc ngắn"
 
-#: help.c:24
+#: help.c:25
 msgid "start a working area (see also: git help tutorial)"
 msgstr "bắt đầu một vùng làm việc (xem thêm: git help tutorial)"
 
-#: help.c:25
+#: help.c:26
 msgid "work on the current change (see also: git help everyday)"
 msgstr "làm việc trên thay đổi hiện tại (xem thêm: git help everyday)"
 
-#: help.c:26
+#: help.c:27
 msgid "examine the history and state (see also: git help revisions)"
 msgstr "xem xét lịch sử tình trạng (xem thêm: git help revisions)"
 
-#: help.c:27
+#: help.c:28
 msgid "grow, mark and tweak your common history"
 msgstr "thêm, ghi dấu và chỉnh lịch sử chung của bạn"
 
-#: help.c:28
+#: help.c:29
 msgid "collaborate (see also: git help workflows)"
 msgstr "làm việc nhóm (xem thêm: git help workflows)"
 
-#: help.c:32
+#: help.c:33
 msgid "Main Porcelain Commands"
 msgstr "Các lệnh Porcelain chính"
 
-#: help.c:33
+#: help.c:34
 msgid "Ancillary Commands / Manipulators"
 msgstr "Lệnh/thao tác thứ cấp"
 
-#: help.c:34
+#: help.c:35
 msgid "Ancillary Commands / Interrogators"
 msgstr "Lệnh/bộ hỏi thứ cấp"
 
-#: help.c:35
+#: help.c:36
 msgid "Interacting with Others"
 msgstr "Tương tác với những cái khác"
 
-#: help.c:36
+#: help.c:37
 msgid "Low-level Commands / Manipulators"
 msgstr "Lệnh/thao tác ở mức thấp"
 
-#: help.c:37
+#: help.c:38
 msgid "Low-level Commands / Interrogators"
 msgstr "Lệnh/bộ hỏi ở mức thấp"
 
-#: help.c:38
+#: help.c:39
 msgid "Low-level Commands / Syncing Repositories"
 msgstr "Lệnh/Đồng bộ kho ở mức thấp"
 
-#: help.c:39
+#: help.c:40
 msgid "Low-level Commands / Internal Helpers"
 msgstr "Lệnh/Hỗ trợ nội tại ở mức thấp"
 
-#: help.c:313
+#: help.c:316
 #, c-format
 msgid "available git commands in '%s'"
 msgstr "các lệnh git sẵn có trong thư mục “%s”:"
 
-#: help.c:320
+#: help.c:323
 msgid "git commands available from elsewhere on your $PATH"
 msgstr "các lệnh git sẵn có từ một nơi khác trong $PATH của bạn"
 
-#: help.c:329
+#: help.c:332
 msgid "These are common Git commands used in various situations:"
 msgstr "Có các lệnh Git chung được sử dụng trong các tình huống khác nhau:"
 
-#: help.c:378 git.c:100
+#: help.c:382 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "không hỗ trợ liệt kê lệnh kiểu “%s”"
 
-#: help.c:418
+#: help.c:422
 msgid "The Git concept guides are:"
 msgstr "Các chỉ dẫn khái niệm về Git là:"
 
-#: help.c:442
-msgid "See 'git help <command>' to read about a specific subcommand"
-msgstr "Xem “git help <lệnh>” để đọc các đặc tả của lệnh con"
-
-#: help.c:447
+#: help.c:446
 msgid "External commands"
 msgstr "Các lệnh bên ngoài"
 
-#: help.c:462
+#: help.c:468
 msgid "Command aliases"
 msgstr "Các bí danh lệnh"
 
-#: help.c:543
+#: help.c:486
+msgid "See 'git help <command>' to read about a specific subcommand"
+msgstr "Xem “git help <lệnh>” để đọc các đặc tả của lệnh con"
+
+#: help.c:563
 #, c-format
 msgid ""
 "'%s' appears to be a git command, but we were not\n"
@@ -4509,36 +4634,36 @@ msgstr ""
 "“%s” trông như là một lệnh git, nhưng chúng tôi không\n"
 "thể thực thi nó. Có lẽ là lệnh git-%s đã bị hỏng?"
 
-#: help.c:565 help.c:662
+#: help.c:585 help.c:682
 #, c-format
 msgid "git: '%s' is not a git command. See 'git --help'."
 msgstr "git: “%s” không phải là một lệnh của git. Xem “git --help”."
 
-#: help.c:613
+#: help.c:633
 msgid "Uh oh. Your system reports no Git commands at all."
 msgstr "Ối chà. Hệ thống của bạn báo rằng chẳng có lệnh Git nào cả."
 
-#: help.c:635
+#: help.c:655
 #, c-format
 msgid "WARNING: You called a Git command named '%s', which does not exist."
 msgstr "CẢNH BÁO: Bạn đã gọi lệnh Git có tên “%s”, mà nó lại không có sẵn."
 
-#: help.c:640
+#: help.c:660
 #, c-format
 msgid "Continuing under the assumption that you meant '%s'."
 msgstr "Tiếp tục và coi rằng ý bạn là “%s”."
 
-#: help.c:646
+#: help.c:666
 #, c-format
 msgid "Run '%s' instead [y/N]? "
 msgstr "Chạy “%s” để thay thế? (y/N)? "
 
-#: help.c:654
+#: help.c:674
 #, c-format
 msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
 msgstr "Tiếp tục trong %0.1f giây,và coi rằng ý bạn là “%s”."
 
-#: help.c:666
+#: help.c:686
 msgid ""
 "\n"
 "The most similar command is"
@@ -4549,16 +4674,16 @@ msgstr[0] ""
 "\n"
 "Những lệnh giống nhất là"
 
-#: help.c:706
+#: help.c:729
 msgid "git version [<options>]"
 msgstr "git version [<các tùy chọn>]"
 
-#: help.c:761
+#: help.c:784
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s: %s - %s"
 
-#: help.c:765
+#: help.c:788
 msgid ""
 "\n"
 "Did you mean this?"
@@ -4569,7 +4694,7 @@ msgstr[0] ""
 "\n"
 "Có phải ý bạn là một trong số những cái này không?"
 
-#: hook.c:27
+#: hook.c:28
 #, c-format
 msgid ""
 "The '%s' hook was ignored because it's not set as executable.\n"
@@ -4578,15 +4703,20 @@ msgstr ""
 "Móc “%s” bị bỏ qua bởi vì nó không thể đặt là thực thi được.\n"
 "Bạn có thể tắt cảnh báo này bằng “git config advice.ignoredHook false“."
 
-#: ident.c:353
+#: hook.c:87
+#, c-format
+msgid "Couldn't start hook '%s'\n"
+msgstr "Không thể khởi chạy móc “%s”\n"
+
+#: ident.c:354
 msgid "Author identity unknown\n"
 msgstr "Chưa biết định danh tác giả\n"
 
-#: ident.c:356
+#: ident.c:357
 msgid "Committer identity unknown\n"
 msgstr "Chưa biết định danh người chuyển giao\n"
 
-#: ident.c:362
+#: ident.c:363
 msgid ""
 "\n"
 "*** Please tell me who you are.\n"
@@ -4612,71 +4742,71 @@ msgstr ""
 "Bỏ tùy chọn --global nếu chỉ định danh riêng cho kho này.\n"
 "\n"
 
-#: ident.c:397
+#: ident.c:398
 msgid "no email was given and auto-detection is disabled"
 msgstr "không đưa ra địa chỉ thư điện tử và auto-detection bị tắt"
 
-#: ident.c:402
+#: ident.c:403
 #, c-format
 msgid "unable to auto-detect email address (got '%s')"
 msgstr "không thể tự dò tìm địa chỉ thư điện tử (nhận “%s”)"
 
-#: ident.c:419
+#: ident.c:420
 msgid "no name was given and auto-detection is disabled"
 msgstr "chưa chỉ ra tên và tự-động-dò-tìm bị tắt"
 
-#: ident.c:425
+#: ident.c:426
 #, c-format
 msgid "unable to auto-detect name (got '%s')"
 msgstr "không thể dò-tìm-tự động tên (đã nhận “%s”)"
 
-#: ident.c:433
+#: ident.c:434
 #, c-format
 msgid "empty ident name (for <%s>) not allowed"
 msgstr "không cho phép tên định danh là rỗng (cho <%s>)"
 
-#: ident.c:439
+#: ident.c:440
 #, c-format
 msgid "name consists only of disallowed characters: %s"
 msgstr "tên chỉ được phép bao gồm các ký tự sau: %s"
 
-#: ident.c:454 builtin/commit.c:648
+#: ident.c:455 builtin/commit.c:649
 #, c-format
 msgid "invalid date format: %s"
 msgstr "ngày tháng không hợp lệ: %s"
 
-#: list-objects-filter-options.c:83
+#: list-objects-filter-options.c:68
 msgid "expected 'tree:<depth>'"
 msgstr "cần “tree:<depth>”"
 
-#: list-objects-filter-options.c:98
+#: list-objects-filter-options.c:83
 msgid "sparse:path filters support has been dropped"
 msgstr "việc hỗ trợ bộ lọc sparse:đường/dẫn đã bị bỏ"
 
-#: list-objects-filter-options.c:105
+#: list-objects-filter-options.c:90
 #, c-format
 msgid "'%s' for 'object:type=<type>' is not a valid object type"
 msgstr "“%s” dành cho “object:type=<type>” không phải là kiểu đối tượng hợp lệ"
 
-#: list-objects-filter-options.c:124
+#: list-objects-filter-options.c:109
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "đặc tả bộ lọc không hợp lệ “%s”"
 
-#: list-objects-filter-options.c:140
+#: list-objects-filter-options.c:125
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
 msgstr "phải thoát char trong sub-filter-spec: “%c”"
 
-#: list-objects-filter-options.c:182
+#: list-objects-filter-options.c:167
 msgid "expected something after combine:"
 msgstr "mong đợi một cái gì đó sau khi kết hợp:"
 
-#: list-objects-filter-options.c:264
+#: list-objects-filter-options.c:249
 msgid "multiple filter-specs cannot be combined"
 msgstr "không thể tổ hợp nhiều đặc tả kiểu lọc"
 
-#: list-objects-filter-options.c:376
+#: list-objects-filter-options.c:365
 msgid "unable to upgrade repository format to support partial clone"
 msgstr "không thể nâng cấp định định dạng kho chứa để hỗ trợ nhân bản cục bộ"
 
@@ -4690,17 +4820,17 @@ msgstr "không thể truy cập các blob rải rác trong “%s”"
 msgid "unable to parse sparse filter data in %s"
 msgstr "không thể phân tích dữ liệu bộ lọc rải rác trong %s"
 
-#: list-objects.c:127
+#: list-objects.c:144
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
 msgstr "mục “%s” trong cây %s có nút cây, nhưng không phải là một cây"
 
-#: list-objects.c:140
+#: list-objects.c:157
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr "mục “%s” trong cây %s có nút blob, nhưng không phải là một blob"
 
-#: list-objects.c:398
+#: list-objects.c:415
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "không thể tải cây gốc cho lần chuyển giao “%s”"
@@ -4729,17 +4859,12 @@ msgstr ""
 msgid "Unable to create '%s.lock': %s"
 msgstr "Không thể tạo “%s.lock”: %s"
 
-#: ls-refs.c:37
-#, c-format
-msgid "invalid value '%s' for lsrefs.unborn"
-msgstr "giá trị “%s” không hợp lệ cho lsrefs.unborn"
-
-#: ls-refs.c:174
+#: ls-refs.c:175
 #, c-format
 msgid "unexpected line: '%s'"
 msgstr "dòng không cần: “%s”"
 
-#: ls-refs.c:178
+#: ls-refs.c:179
 msgid "expected flush after ls-refs arguments"
 msgstr "cần đẩy dữ liệu lên đĩa sau tham số ls-refs (liệt kê tham chiếu)"
 
@@ -4747,39 +4872,39 @@ msgstr "cần đẩy dữ liệu lên đĩa sau tham số ls-refs (liệt kê th
 msgid "quoted CRLF detected"
 msgstr "phát hiện CRLF được trích dẫn"
 
-#: mailinfo.c:1254 builtin/am.c:184 builtin/mailinfo.c:46
+#: mailinfo.c:1254 builtin/am.c:185 builtin/mailinfo.c:46
 #, c-format
 msgid "bad action '%s' for '%s'"
 msgstr "thao tác sai “%s” cho “%s”"
 
-#: merge-ort.c:1584 merge-recursive.c:1211
+#: merge-ort.c:1630 merge-recursive.c:1214
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "Gặp lỗi khi hòa trộn mô-đun-con “%s” (không lấy ra được)"
 
-#: merge-ort.c:1593 merge-recursive.c:1218
+#: merge-ort.c:1639 merge-recursive.c:1221
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "Gặp lỗi khi hòa trộn mô-đun-con “%s” (lần chuyển giao không hiện diện)"
 
-#: merge-ort.c:1602 merge-recursive.c:1225
+#: merge-ort.c:1648 merge-recursive.c:1228
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr ""
 "Gặp lỗi khi hòa trộn mô-đun-con “%s” (lần chuyển giao không theo sau nền-hòa-"
 "trộn)"
 
-#: merge-ort.c:1612 merge-ort.c:1620
+#: merge-ort.c:1658 merge-ort.c:1666
 #, c-format
 msgid "Note: Fast-forwarding submodule %s to %s"
 msgstr "Chú ý: Chuyển-tiếp-nhanh mô-đun-con “%s” sang “%s”"
 
-#: merge-ort.c:1642
+#: merge-ort.c:1688
 #, c-format
 msgid "Failed to merge submodule %s"
 msgstr "Gặp lỗi khi hòa trộn mô-đun-con “%s”"
 
-#: merge-ort.c:1649
+#: merge-ort.c:1695
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but a possible merge resolution exists:\n"
@@ -4788,7 +4913,7 @@ msgstr ""
 "Gặp lỗi khi hòa trộn mô-đun-con “%s”, nhưng có cách giải quyết:\n"
 "%s\n"
 
-#: merge-ort.c:1653 merge-recursive.c:1281
+#: merge-ort.c:1699 merge-recursive.c:1284
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -4805,7 +4930,7 @@ msgstr ""
 "\n"
 "cái mà sẽ chấp nhận gợi ý này.\n"
 
-#: merge-ort.c:1666
+#: merge-ort.c:1712
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but multiple possible merges exist:\n"
@@ -4814,21 +4939,21 @@ msgstr ""
 "Gặp lỗi khi hòa trộn mô-đun-con “%s”, nhưng có nhiều cách giải quyết:\n"
 "%s"
 
-#: merge-ort.c:1887 merge-recursive.c:1372
+#: merge-ort.c:1937 merge-recursive.c:1375
 msgid "Failed to execute internal merge"
 msgstr "Gặp lỗi khi thực hiện trộn nội bộ"
 
-#: merge-ort.c:1892 merge-recursive.c:1377
+#: merge-ort.c:1942 merge-recursive.c:1380
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "Không thể thêm %s vào cơ sở dữ liệu"
 
-#: merge-ort.c:1899 merge-recursive.c:1410
+#: merge-ort.c:1949 merge-recursive.c:1413
 #, c-format
 msgid "Auto-merging %s"
 msgstr "Tự-động-hòa-trộn %s"
 
-#: merge-ort.c:2038 merge-recursive.c:2132
+#: merge-ort.c:2088 merge-recursive.c:2135
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -4837,7 +4962,7 @@ msgstr ""
 "XUNG ĐỘT: (ngầm đổi tên thư mục): Tập tin/thư mục đã sẵn có tại %s theo cách "
 "của các đổi tên thư mục ngầm đặt (các) đường dẫn sau ở đây: %s."
 
-#: merge-ort.c:2048 merge-recursive.c:2142
+#: merge-ort.c:2098 merge-recursive.c:2145
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -4846,7 +4971,7 @@ msgstr ""
 "XUNG ĐỘT: (ngầm đổi tên thư mục): Không thể ánh xạ một đường dẫn thành %s; "
 "các đổi tên thư mục ngầm cố đặt các đường dẫn ở đây: %s"
 
-#: merge-ort.c:2106
+#: merge-ort.c:2156
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to rename %s to; it was "
@@ -4857,7 +4982,7 @@ msgstr ""
 "thành; nó đã bị đổi tên thành nhiều thư mục khác, với không đích đến nhận "
 "một phần nhiều của các tập tin."
 
-#: merge-ort.c:2260 merge-recursive.c:2478
+#: merge-ort.c:2310 merge-recursive.c:2481
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
@@ -4866,7 +4991,7 @@ msgstr ""
 "CẢNH BÁO: tránh áp dụng %s -> %s đổi thên thành %s, bởi vì bản thân %s cũng "
 "bị đổi tên."
 
-#: merge-ort.c:2400 merge-recursive.c:3261
+#: merge-ort.c:2450 merge-recursive.c:3264
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
@@ -4875,7 +5000,7 @@ msgstr ""
 "Đường dẫn đã được cập nhật: %s được thêm vào trong %s bên trong một thư mục "
 "đã được đổi tên trong %s; di chuyển nó đến %s."
 
-#: merge-ort.c:2407 merge-recursive.c:3268
+#: merge-ort.c:2457 merge-recursive.c:3271
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
@@ -4884,7 +5009,7 @@ msgstr ""
 "Đường dẫn đã được cập nhật: %s được đổi tên thành %s trong %s, bên trong một "
 "thư mục đã được đổi tên trong %s; di chuyển nó đến %s."
 
-#: merge-ort.c:2420 merge-recursive.c:3264
+#: merge-ort.c:2470 merge-recursive.c:3267
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed "
@@ -4893,7 +5018,7 @@ msgstr ""
 "XUNG ĐỘT (vị trí tệp): %s được thêm vào trong %s trong một thư mục đã được "
 "đổi tên thành %s, đoán là nó nên được di chuyển đến %s."
 
-#: merge-ort.c:2428 merge-recursive.c:3271
+#: merge-ort.c:2478 merge-recursive.c:3274
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
@@ -4902,13 +5027,13 @@ msgstr ""
 "XUNG ĐỘT (vị trí tệp): %s được đổi tên thành %s trong %s, bên trong một thư "
 "mục đã được đổi tên thành %s, đoán là nó nên được di chuyển đến %s."
 
-#: merge-ort.c:2584
+#: merge-ort.c:2634
 #, c-format
 msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
 msgstr ""
 "XUNG ĐỘT (đổi-tên/đổi-tên): Đổi tên %s->%s trong %s và thành %s trong %s."
 
-#: merge-ort.c:2679
+#: merge-ort.c:2729
 #, c-format
 msgid ""
 "CONFLICT (rename involved in collision): rename of %s -> %s has content "
@@ -4919,23 +5044,23 @@ msgstr ""
 "VÀ va chạm với một đường dẫn khác; điều này có thể dẫn đến tạo ra các xung "
 "đột lồng nhau."
 
-#: merge-ort.c:2698 merge-ort.c:2722
+#: merge-ort.c:2748 merge-ort.c:2772
 #, c-format
 msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
 msgstr ""
 "XUNG ĐỘT (đổi-tên/xóa): Đổi tên %s->%s trong %s, nhưng lại bị xóa trong %s."
 
-#: merge-ort.c:3212 merge-recursive.c:3022
+#: merge-ort.c:3261 merge-recursive.c:3025
 #, c-format
 msgid "cannot read object %s"
 msgstr "không thể đọc đối tượng %s"
 
-#: merge-ort.c:3215 merge-recursive.c:3025
+#: merge-ort.c:3264 merge-recursive.c:3028
 #, c-format
 msgid "object %s is not a blob"
 msgstr "đối tượng %s không phải là một blob"
 
-#: merge-ort.c:3644
+#: merge-ort.c:3693
 #, c-format
 msgid ""
 "CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
@@ -4944,7 +5069,7 @@ msgstr ""
 "XUNG ĐỘT (tập tin/thư mục): thư mục theo cách của %s từ %s; thay vào đó, di "
 "chuyển nó đến %s."
 
-#: merge-ort.c:3721
+#: merge-ort.c:3770
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed both "
@@ -4953,7 +5078,7 @@ msgstr ""
 "XUNG ĐỘT (các kiểu riêng biệt): %s có các kiểu khác nhau ở mỗi bên; đã đổi "
 "tên cả hai trong số chúng để mỗi cái có thể được ghi lại ở đâu đó."
 
-#: merge-ort.c:3728
+#: merge-ort.c:3777
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed one "
@@ -4962,24 +5087,24 @@ msgstr ""
 "XUNG ĐỘT (các kiểu riêng biệt): %s có các loại khác nhau ở mỗi bên; đã đổi "
 "tên một trong số chúng để mỗi cái có thể được ghi lại ở đâu đó."
 
-#: merge-ort.c:3819 merge-recursive.c:3101
+#: merge-ort.c:3866 merge-recursive.c:3104
 msgid "content"
 msgstr "nội dung"
 
-#: merge-ort.c:3821 merge-recursive.c:3105
+#: merge-ort.c:3868 merge-recursive.c:3108
 msgid "add/add"
 msgstr "thêm/thêm"
 
-#: merge-ort.c:3823 merge-recursive.c:3150
+#: merge-ort.c:3870 merge-recursive.c:3153
 msgid "submodule"
 msgstr "mô-đun-con"
 
-#: merge-ort.c:3825 merge-recursive.c:3151
+#: merge-ort.c:3872 merge-recursive.c:3154
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "XUNG ĐỘT (%s): Xung đột hòa trộn trong %s"
 
-#: merge-ort.c:3869
+#: merge-ort.c:3916
 #, c-format
 msgid ""
 "CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
@@ -4988,7 +5113,7 @@ msgstr ""
 "XUNG ĐỘT (sửa/xóa): %s bị xóa trong %s và sửa trong %s. Phiên bản %s của %s "
 "còn lại trong cây (tree)."
 
-#: merge-ort.c:4165
+#: merge-ort.c:4212
 #, c-format
 msgid ""
 "Note: %s not up to date and in way of checking out conflicted version; old "
@@ -5000,12 +5125,12 @@ msgstr ""
 #. TRANSLATORS: The %s arguments are: 1) tree hash of a merge
 #. base, and 2-3) the trees for the two trees we're merging.
 #.
-#: merge-ort.c:4534
+#: merge-ort.c:4586
 #, c-format
 msgid "collecting merge info failed for trees %s, %s, %s"
 msgstr "thu thập thông tin hòa trộn gặp lỗi cho cây %s, %s, %s"
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3716
+#: merge-ort-wrappers.c:13 merge-recursive.c:3723
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -5015,7 +5140,7 @@ msgstr ""
 "hòa trộn:\n"
 "  %s"
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3482 builtin/merge.c:405
+#: merge-ort-wrappers.c:33 merge-recursive.c:3485 builtin/merge.c:405
 msgid "Already up to date."
 msgstr "Đã cập nhật rồi."
 
@@ -5054,7 +5179,7 @@ msgstr ": có lẽ là một xung đột D/F?"
 msgid "refusing to lose untracked file at '%s'"
 msgstr "từ chối đóng tập tin không được theo dõi tại “%s”"
 
-#: merge-recursive.c:956 builtin/cat-file.c:41
+#: merge-recursive.c:956 builtin/cat-file.c:47
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "không thể đọc đối tượng %s “%s”"
@@ -5079,45 +5204,45 @@ msgstr "gặp lỗi khi tạo liên kết mềm (symlink) “%s”: %s"
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "không hiểu phải làm gì với %06o %s “%s”"
 
-#: merge-recursive.c:1233 merge-recursive.c:1246
+#: merge-recursive.c:1236 merge-recursive.c:1249
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "Chuyển-tiếp-nhanh mô-đun-con “%s” đến lần chuyển giao sau đây:"
 
-#: merge-recursive.c:1236 merge-recursive.c:1249
+#: merge-recursive.c:1239 merge-recursive.c:1252
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "Chuyển-tiếp-nhanh mô-đun-con “%s”"
 
-#: merge-recursive.c:1273
+#: merge-recursive.c:1276
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr ""
 "Gặp lỗi khi hòa trộn mô-đun-con “%s” (không tìm thấy các lần chuyển giao "
 "theo sau hòa trộn)"
 
-#: merge-recursive.c:1277
+#: merge-recursive.c:1280
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "Gặp lỗi khi hòa trộn mô-đun-con “%s” (không chuyển tiếp nhanh được)"
 
-#: merge-recursive.c:1278
+#: merge-recursive.c:1281
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "Tìm thấy một giải pháp hòa trộn có thể cho mô-đun-con:\n"
 
-#: merge-recursive.c:1290
+#: merge-recursive.c:1293
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr "Gặp lỗi khi hòa trộn mô-đun-con “%s” (thấy nhiều hòa trộn đa trùng)"
 
-#: merge-recursive.c:1434
+#: merge-recursive.c:1437
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr ""
 "Lỗi: từ chối đóng tập tin không được theo dõi tại “%s”; thay vào đó ghi vào "
 "%s."
 
-#: merge-recursive.c:1506
+#: merge-recursive.c:1509
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5126,7 +5251,7 @@ msgstr ""
 "XUNG ĐỘT (%s/xóa): %s bị xóa trong %s và %s trong %s. Phiên bản %s của %s "
 "còn lại trong cây (tree)."
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1514
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5135,7 +5260,7 @@ msgstr ""
 "XUNG ĐỘT (%s/xóa): %s bị xóa trong %s và %s đến %s trong %s. Phiên bản %s "
 "của %s còn lại trong cây (tree)."
 
-#: merge-recursive.c:1518
+#: merge-recursive.c:1521
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5144,7 +5269,7 @@ msgstr ""
 "XUNG ĐỘT (%s/xóa): %s bị xóa trong %s và %s trong %s. Phiên bản %s của %s "
 "còn lại trong cây (tree) tại %s."
 
-#: merge-recursive.c:1523
+#: merge-recursive.c:1526
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5153,45 +5278,45 @@ msgstr ""
 "XUNG ĐỘT (%s/xóa): %s bị xóa trong %s và %s đến %s trong %s. Phiên bản %s "
 "của %s còn lại trong cây (tree) tại %s."
 
-#: merge-recursive.c:1558
+#: merge-recursive.c:1561
 msgid "rename"
 msgstr "đổi tên"
 
-#: merge-recursive.c:1558
+#: merge-recursive.c:1561
 msgid "renamed"
 msgstr "đã đổi tên"
 
-#: merge-recursive.c:1609 merge-recursive.c:2515 merge-recursive.c:3178
+#: merge-recursive.c:1612 merge-recursive.c:2518 merge-recursive.c:3181
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "Từ chối đóng tập tin không được theo dõi tại “%s”"
 
-#: merge-recursive.c:1619
+#: merge-recursive.c:1622
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr ""
 "Từ chối đóng tập tin không được theo dõi tại “%s”, ngay cả khi nó ở trên "
 "đường."
 
-#: merge-recursive.c:1677
+#: merge-recursive.c:1680
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "XUNG ĐỘT (đổi-tên/thêm): Đổi tên %s->%s trong %s. %s được thêm trong %s"
 
-#: merge-recursive.c:1708
+#: merge-recursive.c:1711
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s là một thư mục trong %s thay vào đó thêm vào như là %s"
 
-#: merge-recursive.c:1713
+#: merge-recursive.c:1716
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr ""
 "Từ chối đóng tập tin không được theo dõi tại “%s”; thay vào đó đang thêm "
 "thành %s"
 
-#: merge-recursive.c:1740
+#: merge-recursive.c:1743
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -5200,17 +5325,17 @@ msgstr ""
 "XUNG ĐỘT (đổi-tên/đổi-tên): Đổi tên \"%s\"->\"%s\" trong nhánh \"%s\" đổi "
 "tên \"%s\"->\"%s\" trong \"%s\"%s"
 
-#: merge-recursive.c:1745
+#: merge-recursive.c:1748
 msgid " (left unresolved)"
 msgstr " (cần giải quyết)"
 
-#: merge-recursive.c:1837
+#: merge-recursive.c:1840
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "XUNG ĐỘT (đổi-tên/đổi-tên): Đổi tên %s->%s trong %s. Đổi tên %s->%s trong %s"
 
-#: merge-recursive.c:2100
+#: merge-recursive.c:2103
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -5221,7 +5346,7 @@ msgstr ""
 "vì thư mục %s đã bị đổi tên thành nhiều thư mục khác, với không đích đến "
 "nhận một phần nhiều của các tập tin."
 
-#: merge-recursive.c:2234
+#: merge-recursive.c:2237
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -5230,79 +5355,79 @@ msgstr ""
 "XUNG ĐỘT (đổi-tên/đổi-tên): Đổi tên thư mục %s->%s trong %s. Đổi tên thư mục "
 "%s->%s trong %s"
 
-#: merge-recursive.c:3089
+#: merge-recursive.c:3092
 msgid "modify"
 msgstr "sửa đổi"
 
-#: merge-recursive.c:3089
+#: merge-recursive.c:3092
 msgid "modified"
 msgstr "đã sửa"
 
-#: merge-recursive.c:3128
+#: merge-recursive.c:3131
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "Đã bỏ qua %s (đã có sẵn lần hòa trộn này)"
 
-#: merge-recursive.c:3181
+#: merge-recursive.c:3184
 #, c-format
 msgid "Adding as %s instead"
 msgstr "Thay vào đó thêm vào %s"
 
-#: merge-recursive.c:3385
+#: merge-recursive.c:3388
 #, c-format
 msgid "Removing %s"
 msgstr "Đang xóa %s"
 
-#: merge-recursive.c:3408
+#: merge-recursive.c:3411
 msgid "file/directory"
 msgstr "tập-tin/thư-mục"
 
-#: merge-recursive.c:3413
+#: merge-recursive.c:3416
 msgid "directory/file"
 msgstr "thư-mục/tập-tin"
 
-#: merge-recursive.c:3420
+#: merge-recursive.c:3423
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr ""
 "XUNG ĐỘT (%s): Ở đây không có thư mục nào có tên %s trong %s. Thêm %s như là "
 "%s"
 
-#: merge-recursive.c:3429
+#: merge-recursive.c:3432
 #, c-format
 msgid "Adding %s"
 msgstr "Thêm \"%s\""
 
-#: merge-recursive.c:3438
+#: merge-recursive.c:3441
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "XUNG ĐỘT (thêm/thêm): Xung đột hòa trộn trong %s"
 
-#: merge-recursive.c:3491
+#: merge-recursive.c:3494
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "hòa trộn các cây %s và %s gặp lỗi"
 
-#: merge-recursive.c:3585
+#: merge-recursive.c:3588
 msgid "Merging:"
 msgstr "Đang trộn:"
 
-#: merge-recursive.c:3598
+#: merge-recursive.c:3601
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "tìm thấy %u tổ tiên chung:"
 
-#: merge-recursive.c:3648
+#: merge-recursive.c:3651
 msgid "merge returned no commit"
 msgstr "hòa trộn không trả về lần chuyển giao nào"
 
-#: merge-recursive.c:3816
+#: merge-recursive.c:3823
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "Không thể phân tích đối tượng “%s”"
 
-#: merge-recursive.c:3834 builtin/merge.c:720 builtin/merge.c:906
+#: merge-recursive.c:3841 builtin/merge.c:720 builtin/merge.c:912
 #: builtin/stash.c:489
 msgid "Unable to write index."
 msgstr "Không thể ghi bảng mục lục."
@@ -5311,222 +5436,226 @@ msgstr "Không thể ghi bảng mục lục."
 msgid "failed to read the cache"
 msgstr "gặp lỗi khi đọc bộ nhớ đệm"
 
-#: merge.c:102 rerere.c:704 builtin/am.c:1988 builtin/am.c:2022
-#: builtin/checkout.c:598 builtin/checkout.c:853 builtin/clone.c:706
+#: merge.c:102 rerere.c:705 builtin/am.c:1989 builtin/am.c:2023
+#: builtin/checkout.c:603 builtin/checkout.c:865 builtin/clone.c:714
 #: builtin/stash.c:269
 msgid "unable to write new index file"
 msgstr "không thể ghi tập tin lưu bảng mục lục mới"
 
-#: midx.c:78
+#: midx.c:79
 msgid "multi-pack-index OID fanout is of the wrong size"
 msgstr "fanout OID nhiều gói chỉ mục có kích thước sai"
 
-#: midx.c:111
+#: midx.c:112
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "tập tin đồ thị multi-pack-index %s quá nhỏ"
 
-#: midx.c:127
+#: midx.c:128
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr "chữ ký multi-pack-index 0x%08x không khớp chữ ký 0x%08x"
 
-#: midx.c:132
+#: midx.c:133
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "không nhận ra phiên bản %d của multi-pack-index"
 
-#: midx.c:137
+#: midx.c:138
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr "phiên bản băm multi-pack-index %u không khớp phiên bản %u"
 
-#: midx.c:154
+#: midx.c:155
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "multi-pack-index thiếu mảnh pack-name cần thiết"
 
-#: midx.c:156
+#: midx.c:157
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "multi-pack-index thiếu mảnh OID fanout cần thiết"
 
-#: midx.c:158
+#: midx.c:159
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "multi-pack-index thiếu mảnh OID lookup cần thiết"
 
-#: midx.c:160
+#: midx.c:161
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "multi-pack-index thiếu mảnh các khoảng bù đối tượng cần thiết"
 
-#: midx.c:176
+#: midx.c:180
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr "các tên gói multi-pack-index không đúng thứ tự: “%s” trước “%s”"
 
-#: midx.c:224
+#: midx.c:228
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "pack-int-id sai: %u (%u các gói tổng)"
 
-#: midx.c:274
+#: midx.c:278
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr "multi-pack-index lưu trữ một khoảng bù 64-bít, nhưng off_t là quá nhỏ"
 
-#: midx.c:505
+#: midx.c:509
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "gặp lỗi khi thêm tập tin gói “%s”"
 
-#: midx.c:511
+#: midx.c:515
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "gặp lỗi khi mở pack-index “%s”"
 
-#: midx.c:579
+#: midx.c:583
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "gặp lỗi khi phân bổ đối tượng “%d” trong tập tin gói"
 
-#: midx.c:895
+#: midx.c:911
 msgid "cannot store reverse index file"
 msgstr "không thể lưu trữ tập tin ghi mục lục đảo ngược"
 
-#: midx.c:993
+#: midx.c:1009
 #, c-format
 msgid "could not parse line: %s"
 msgstr "không thể phân tích cú pháp dòng: %s"
 
-#: midx.c:995
+#: midx.c:1011
 #, c-format
 msgid "malformed line: %s"
 msgstr "dòng dị hình: %s"
 
-#: midx.c:1162
+#: midx.c:1181
 msgid "ignoring existing multi-pack-index; checksum mismatch"
 msgstr "bỏ qua multi-pack-index sẵn có; tổng kiểm không khớp"
 
-#: midx.c:1187
+#: midx.c:1206
 msgid "could not load pack"
 msgstr "không thể tải gói"
 
-#: midx.c:1193
+#: midx.c:1212
 #, c-format
 msgid "could not open index for %s"
 msgstr "không thể mở mục lục cho %s"
 
-#: midx.c:1204
+#: midx.c:1223
 msgid "Adding packfiles to multi-pack-index"
 msgstr "Đang thêm tập tin gói từ multi-pack-index"
 
-#: midx.c:1247
+#: midx.c:1266
 #, c-format
 msgid "unknown preferred pack: '%s'"
 msgstr "không hiểu \"preferred pack\": %s"
 
-#: midx.c:1292
+#: midx.c:1311
 #, c-format
 msgid "cannot select preferred pack %s with no objects"
 msgstr "không thể chọn gói ưa dùng %s với không đối tượng nào"
 
-#: midx.c:1324
+#: midx.c:1343
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "đã không thấy tập tin gói %s để mà xóa"
 
-#: midx.c:1370
+#: midx.c:1389
 #, c-format
 msgid "preferred pack '%s' is expired"
 msgstr "\"preferred pack\" “%s” đã hết hạn"
 
-#: midx.c:1383
+#: midx.c:1402
 msgid "no pack files to index."
 msgstr "không có tập tin gói để đánh mục lục."
 
-#: midx.c:1420
+#: midx.c:1409
+msgid "refusing to write multi-pack .bitmap without any objects"
+msgstr "từ chối ghi “multi-pack bitmap” mà không có bất kỳ đối tượng nào"
+
+#: midx.c:1451
 msgid "could not write multi-pack bitmap"
 msgstr "không thể ghi “multi-pack bitmap”"
 
-#: midx.c:1430
+#: midx.c:1461
 msgid "could not write multi-pack-index"
 msgstr "không thể ghi “multi-pack-index”"
 
-#: midx.c:1489 builtin/clean.c:37
+#: midx.c:1520 builtin/clean.c:37
 #, c-format
 msgid "failed to remove %s"
 msgstr "gặp lỗi khi gỡ bỏ %s"
 
-#: midx.c:1522
+#: midx.c:1553
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "gặp lỗi khi xóa multi-pack-index tại %s"
 
-#: midx.c:1585
+#: midx.c:1616
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr "đã có tập tin multi-pack-index, nhưng gặp lỗi khi phân tích cú pháp"
 
-#: midx.c:1593
+#: midx.c:1624
 msgid "incorrect checksum"
 msgstr "tổng kiểm không đúng"
 
-#: midx.c:1596
+#: midx.c:1627
 msgid "Looking for referenced packfiles"
 msgstr "Đang khóa cho các gói bị tham chiếu"
 
-#: midx.c:1611
+#: midx.c:1642
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr "fanout cũ sai thứ tự: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 
-#: midx.c:1616
+#: midx.c:1647
 msgid "the midx contains no oid"
 msgstr "midx chẳng chứa oid nào"
 
-#: midx.c:1625
+#: midx.c:1656
 msgid "Verifying OID order in multi-pack-index"
 msgstr "Thẩm tra thứ tự OID trong multi-pack-index"
 
-#: midx.c:1634
+#: midx.c:1665
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "lookup cũ sai thứ tự: oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1654
+#: midx.c:1685
 msgid "Sorting objects by packfile"
 msgstr "Đang sắp xếp các đối tượng theo tập tin gói"
 
-#: midx.c:1661
+#: midx.c:1692
 msgid "Verifying object offsets"
 msgstr "Đang thẩm tra các khoảng bù đối tượng"
 
-#: midx.c:1677
+#: midx.c:1708
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "gặp lỗi khi tải mục gói cho oid[%d] = %s"
 
-#: midx.c:1683
+#: midx.c:1714
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "gặp lỗi khi tải pack-index cho tập tin gói %s"
 
-#: midx.c:1692
+#: midx.c:1723
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr ""
 "khoảng bù đối tượng không đúng cho oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 
-#: midx.c:1719
+#: midx.c:1750
 msgid "Counting referenced objects"
 msgstr "Đang đếm các đối tượng được tham chiếu"
 
-#: midx.c:1729
+#: midx.c:1760
 msgid "Finding and deleting unreferenced packfiles"
 msgstr "Đang tìm và xóa các gói không được tham chiếu"
 
-#: midx.c:1921
+#: midx.c:1952
 msgid "could not start pack-objects"
 msgstr "không thể lấy thông tin thống kê về các đối tượng gói"
 
-#: midx.c:1941
+#: midx.c:1972
 msgid "could not finish pack-objects"
 msgstr "không thể hoàn thiện các đối tượng gói"
 
@@ -5545,7 +5674,7 @@ msgstr "không thể tạo tuyến lazy_name: %s"
 msgid "unable to join lazy_name thread: %s"
 msgstr "không thể gia nhập tuyến lazy_name: %s"
 
-#: notes-merge.c:277
+#: notes-merge.c:276
 #, c-format
 msgid ""
 "You have not concluded your previous notes merge (%s exists).\n"
@@ -5557,7 +5686,7 @@ msgstr ""
 "chuyển giao hay bãi bỏ lần hòa trộn trước đây và bắt đầu một hòa trộn ghi "
 "chú mới."
 
-#: notes-merge.c:284
+#: notes-merge.c:283
 #, c-format
 msgid "You have not concluded your notes merge (%s exists)."
 msgstr "Bạn chưa kết thúc việc hòa trộn ghi chú (%s vẫn tồn tại)."
@@ -5587,273 +5716,344 @@ msgstr "Từ chối ghi đè ghi chú trong %s (nằm ngoài refs/notes/)"
 msgid "Bad %s value: '%s'"
 msgstr "Giá trị %s sai: “%s”"
 
-#: object-file.c:456
+#: object-file.c:457
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr ""
 "thư mục đối tượng %s không tồn tại; kiểm tra .git/objects/info/alternates"
 
-#: object-file.c:514
+#: object-file.c:515
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr "không thể thường hóa đường dẫn đối tượng thay thế: “%s”"
 
-#: object-file.c:588
+#: object-file.c:589
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr "%s: đang bỏ qua kho đối tượng thay thế, lồng nhau quá sâu"
 
-#: object-file.c:595
+#: object-file.c:596
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr "không thể chuẩn hóa thư mục đối tượng: “%s”"
 
-#: object-file.c:638
+#: object-file.c:639
 msgid "unable to fdopen alternates lockfile"
 msgstr "không thể fdopen tập tin khóa thay thế"
 
-#: object-file.c:656
+#: object-file.c:657
 msgid "unable to read alternates file"
 msgstr "không thể đọc tập tin thay thế"
 
-#: object-file.c:663
+#: object-file.c:664
 msgid "unable to move new alternates file into place"
 msgstr "không thể di chuyển tập tin thay thế vào chỗ"
 
-#: object-file.c:741
+#: object-file.c:742
 #, c-format
 msgid "path '%s' does not exist"
 msgstr "đường dẫn “%s” không tồn tại"
 
-#: object-file.c:762
+#: object-file.c:763
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr "kho tham chiếu “%s” như là lấy ra liên kết vẫn chưa được hỗ trợ."
 
-#: object-file.c:768
+#: object-file.c:769
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "kho tham chiếu “%s” không phải là một kho nội bộ."
 
-#: object-file.c:774
+#: object-file.c:775
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr "kho tham chiếu “%s” là nông"
 
-#: object-file.c:782
+#: object-file.c:783
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr "kho tham chiếu “%s” bị cấy ghép"
 
-#: object-file.c:813
+#: object-file.c:814
 #, c-format
 msgid "could not find object directory matching %s"
 msgstr "không thể tìm thấy thư mục đối tượng khớp với “%s”"
 
-#: object-file.c:863
+#: object-file.c:864
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr "dòng không hợp lệ trong khi phân tích các tham chiếu thay thế: %s"
 
-#: object-file.c:1013
+#: object-file.c:1014
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr "đang cố để mmap %<PRIuMAX> vượt quá giới hạn %<PRIuMAX>"
 
-#: object-file.c:1048
+#: object-file.c:1049
 #, c-format
 msgid "mmap failed%s"
 msgstr "mmap gặp lỗi%s"
 
-#: object-file.c:1214
+#: object-file.c:1230
 #, c-format
 msgid "object file %s is empty"
 msgstr "tập tin đối tượng %s trống rỗng"
 
-#: object-file.c:1333 object-file.c:2542
+#: object-file.c:1349 object-file.c:2588
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr "đối tượng mất hỏng “%s”"
 
-#: object-file.c:1335 object-file.c:2546
+#: object-file.c:1351 object-file.c:2592
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr "gặp rác tại cuối của đối tượng bị mất “%s”"
 
-#: object-file.c:1457
+#: object-file.c:1473
 #, c-format
 msgid "unable to parse %s header"
 msgstr "không thể phân tích phần đầu của “%s”"
 
-#: object-file.c:1459
+#: object-file.c:1475
 msgid "invalid object type"
 msgstr "kiểu đối tượng không hợp lệ"
 
-#: object-file.c:1470
+#: object-file.c:1486
 #, c-format
 msgid "unable to unpack %s header"
 msgstr "không thể giải gói phần đầu %s"
 
-#: object-file.c:1474
+#: object-file.c:1490
 #, c-format
 msgid "header for %s too long, exceeds %d bytes"
 msgstr "phần đầu cho %s quá dài, vượt quá %d byte"
 
-#: object-file.c:1704
+#: object-file.c:1720
 #, c-format
 msgid "failed to read object %s"
 msgstr "gặp lỗi khi đọc đối tượng “%s”"
 
-#: object-file.c:1708
+#: object-file.c:1724
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr "c%s thay thế không được tìm thấy cho %s"
 
-#: object-file.c:1712
+#: object-file.c:1728
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr "đối tượng mất %s (được lưu trong %s) bị hỏng"
 
-#: object-file.c:1716
+#: object-file.c:1732
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr "đối tượng đã đóng gói %s (được lưu trong %s) bị hỏng"
 
-#: object-file.c:1821
+#: object-file.c:1855
 #, c-format
 msgid "unable to write file %s"
 msgstr "không thể ghi tập tin %s"
 
-#: object-file.c:1828
+#: object-file.c:1862
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr "không thể đặt quyền thành “%s”"
 
-#: object-file.c:1835
+#: object-file.c:1869
 msgid "file write error"
 msgstr "lỗi ghi tập tin"
 
-#: object-file.c:1858
+#: object-file.c:1904
 msgid "error when closing loose object file"
 msgstr "gặp lỗi trong khi đóng tập tin đối tượng"
 
-#: object-file.c:1925
+#: object-file.c:1971
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr ""
 "không đủ thẩm quyền để thêm một đối tượng vào cơ sở dữ liệu kho chứa %s"
 
-#: object-file.c:1927
+#: object-file.c:1973
 msgid "unable to create temporary file"
 msgstr "không thể tạo tập tin tạm thời"
 
-#: object-file.c:1951
+#: object-file.c:1997
 msgid "unable to write loose object file"
 msgstr "không thể ghi tập tin đối tượng đã mất"
 
-#: object-file.c:1957
+#: object-file.c:2003
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr "không thể xả nén đối tượng mới %s (%d)"
 
-#: object-file.c:1961
+#: object-file.c:2007
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr "deflateEnd trên đối tượng %s gặp lỗi (%d)"
 
-#: object-file.c:1965
+#: object-file.c:2011
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr "chưa rõ ràng baowir dữ liệu nguồn đối tượng không ổn định cho %s"
 
-#: object-file.c:1976 builtin/pack-objects.c:1243
+#: object-file.c:2022 builtin/pack-objects.c:1251
 #, c-format
 msgid "failed utime() on %s"
 msgstr "gặp lỗi utime() trên “%s”"
 
-#: object-file.c:2054
+#: object-file.c:2100
 #, c-format
 msgid "cannot read object for %s"
 msgstr "không thể đọc đối tượng cho %s"
 
-#: object-file.c:2105
+#: object-file.c:2151
 msgid "corrupt commit"
 msgstr "lần chuyển giao sai hỏng"
 
-#: object-file.c:2113
+#: object-file.c:2159
 msgid "corrupt tag"
 msgstr "thẻ sai hỏng"
 
-#: object-file.c:2213
+#: object-file.c:2259
 #, c-format
 msgid "read error while indexing %s"
 msgstr "gặp lỗi đọc khi đánh mục lục %s"
 
-#: object-file.c:2216
+#: object-file.c:2262
 #, c-format
 msgid "short read while indexing %s"
 msgstr "không đọc ngắn khi đánh mục lục %s"
 
-#: object-file.c:2289 object-file.c:2299
+#: object-file.c:2335 object-file.c:2345
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr "%s: gặp lỗi khi thêm vào cơ sở dữ liệu"
 
-#: object-file.c:2305
+#: object-file.c:2351
 #, c-format
 msgid "%s: unsupported file type"
 msgstr "%s: kiểu tập tin không được hỗ trợ"
 
-#: object-file.c:2329 builtin/fetch.c:1453
+#: object-file.c:2375 builtin/fetch.c:1494
 #, c-format
 msgid "%s is not a valid object"
 msgstr "%s không phải là một đối tượng hợp lệ"
 
-#: object-file.c:2331
+#: object-file.c:2377
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "%s không phải là một đối tượng “%s” hợp lệ"
 
-#: object-file.c:2358
+#: object-file.c:2404
 #, c-format
 msgid "unable to open %s"
 msgstr "không thể mở %s"
 
-#: object-file.c:2553
+#: object-file.c:2599
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr "mã băm không khớp cho %s (cần %s)"
 
-#: object-file.c:2576
+#: object-file.c:2622
 #, c-format
 msgid "unable to mmap %s"
 msgstr "không thể mmap %s"
 
-#: object-file.c:2582
+#: object-file.c:2628
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr "không thể giải gói phần đầu của “%s”"
 
-#: object-file.c:2587
+#: object-file.c:2633
 #, c-format
 msgid "unable to parse header of %s"
 msgstr "không thể phân tích phần đầu của “%s”"
 
-#: object-file.c:2598
+#: object-file.c:2644
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr "không thể giải gói nội dung của “%s”"
 
-#: object-name.c:480
+#. TRANSLATORS: This is a line of ambiguous object
+#. output shown when we cannot look up or parse the
+#. object in question. E.g. "deadbeef [bad object]".
+#.
+#: object-name.c:382
+#, c-format
+msgid "%s [bad object]"
+msgstr "%s [đối tượng sai.]"
+
+#. TRANSLATORS: This is a line of ambiguous commit
+#. object output. E.g.:
+#. *
+#. "deadbeef commit 2021-01-01 - Some Commit Message"
+#.
+#: object-name.c:407
+#, c-format
+msgid "%s commit %s - %s"
+msgstr "%s lần chuyển giao %s - %s"
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output. E.g.:
+#. *
+#. "deadbeef tag 2022-01-01 - Some Tag Message"
+#. *
+#. The second argument is the YYYY-MM-DD found
+#. in the tag.
+#. *
+#. The third argument is the "tag" string
+#. from object.c.
+#.
+#: object-name.c:428
+#, c-format
+msgid "%s tag %s - %s"
+msgstr "%s thẻ %s - %s"
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output where we couldn't parse
+#. the tag itself. E.g.:
+#. *
+#. "deadbeef [bad tag, could not parse it]"
+#.
+#: object-name.c:439
+#, c-format
+msgid "%s [bad tag, could not parse it]"
+msgstr "%s [thẻ sai, không thể phân tích cú pháp nó]"
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef tree".
+#.
+#: object-name.c:447
+#, c-format
+msgid "%s tree"
+msgstr "%s tree"
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef blob".
+#.
+#: object-name.c:453
+#, c-format
+msgid "%s blob"
+msgstr "%s blob"
+
+#: object-name.c:569
 #, c-format
 msgid "short object ID %s is ambiguous"
 msgstr "mã đối tượng dạng rút gọn %s chưa rõ ràng"
 
-#: object-name.c:491
-msgid "The candidates are:"
-msgstr "Các ứng cử là:"
+#. TRANSLATORS: The argument is the list of ambiguous
+#. objects composed in show_ambiguous_object(). See
+#. its "TRANSLATORS" comments for details.
+#.
+#: object-name.c:591
+#, c-format
+msgid ""
+"The candidates are:\n"
+"%s"
+msgstr ""
+"Các ứng cử là:\n"
+"%s"
 
-#: object-name.c:790
+#: object-name.c:888
 msgid ""
 "Git normally never creates a ref that ends with 40 hex characters\n"
 "because it will be ignored when you just specify 40-hex. These refs\n"
@@ -5877,22 +6077,22 @@ msgstr ""
 "này\n"
 "bằng cách chạy lệnh \"git config advice.objectNameWarning false\""
 
-#: object-name.c:910
+#: object-name.c:1008
 #, c-format
 msgid "log for '%.*s' only goes back to %s"
 msgstr "nhật ký cho “%.*s” chỉ trở lại đến %s"
 
-#: object-name.c:918
+#: object-name.c:1016
 #, c-format
 msgid "log for '%.*s' only has %d entries"
 msgstr "nhật ký cho “%.*s” chỉ có %d mục"
 
-#: object-name.c:1696
+#: object-name.c:1794
 #, c-format
 msgid "path '%s' exists on disk, but not in '%.*s'"
 msgstr "đường dẫn “%s” có ở trên đĩa, nhưng không trong “%.*s”"
 
-#: object-name.c:1702
+#: object-name.c:1800
 #, c-format
 msgid ""
 "path '%s' exists, but not '%s'\n"
@@ -5901,12 +6101,12 @@ msgstr ""
 "đường dẫn “%s” tồn tại, nhưng không phải “%s”\n"
 "gợi ý: Có phải ý bạn là “%.*s:%s” aka “%.*s:./%s”?"
 
-#: object-name.c:1711
+#: object-name.c:1809
 #, c-format
 msgid "path '%s' does not exist in '%.*s'"
 msgstr "đường dẫn “%s” không tồn tại trong “%.*s”"
 
-#: object-name.c:1739
+#: object-name.c:1837
 #, c-format
 msgid ""
 "path '%s' is in the index, but not at stage %d\n"
@@ -5915,7 +6115,7 @@ msgstr ""
 "đường dẫn “%s” nằm trong chỉ mục, nhưng không phải ở giai đoạn %d\n"
 "gợi ý: Có phải ý bạn là “:%d:%s”?"
 
-#: object-name.c:1755
+#: object-name.c:1853
 #, c-format
 msgid ""
 "path '%s' is in the index, but not '%s'\n"
@@ -5924,21 +6124,26 @@ msgstr ""
 "đường dẫn “%s” nằm trong chỉ mục, nhưng không phải “%s”\n"
 "gợi ý: Có phải ý bạn là “:% d:%s “ aka “:%d:./%s”?"
 
-#: object-name.c:1763
+#: object-name.c:1861
 #, c-format
 msgid "path '%s' exists on disk, but not in the index"
 msgstr "đường dẫn “%s” tồn tại trên đĩa, nhưng không có trong chỉ mục"
 
-#: object-name.c:1765
+#: object-name.c:1863
 #, c-format
 msgid "path '%s' does not exist (neither on disk nor in the index)"
 msgstr "đường dẫn “%s” không tồn tại (không trên đĩa cũng không trong mục lục)"
 
-#: object-name.c:1778
+#: object-name.c:1876
 msgid "relative path syntax can't be used outside working tree"
 msgstr "cú pháp đường dẫn tương đối không thể thể dùng ngoài cây làm việc"
 
-#: object-name.c:1916
+#: object-name.c:1901
+#, c-format
+msgid "<object>:<path> required, only <object> '%s' given"
+msgstr "<object>:<path> cần cả hai, nhưng chỉ <object> '%s' được đưa ra"
+
+#: object-name.c:2014
 #, c-format
 msgid "invalid object name '%.*s'."
 msgstr "“%.*s” không phải là tên đối tượng hợp lệ."
@@ -5963,7 +6168,7 @@ msgstr "đối tượng %s có mã kiểu %d chưa biết"
 msgid "unable to parse object: %s"
 msgstr "không thể phân tích đối tượng: “%s”"
 
-#: object.c:283 object.c:295
+#: object.c:283 object.c:294
 #, c-format
 msgid "hash mismatch %s"
 msgstr "mã băm không khớp %s"
@@ -5972,21 +6177,21 @@ msgstr "mã băm không khớp %s"
 msgid "multi-pack bitmap is missing required reverse index"
 msgstr "ánh xạ multi-pack thiếu mục lục để dành cần thiết"
 
-#: pack-bitmap.c:429
+#: pack-bitmap.c:433
 msgid "load_reverse_index: could not open pack"
 msgstr "load_reverse_index: không thể mở gói"
 
-#: pack-bitmap.c:1069 pack-bitmap.c:1075 builtin/pack-objects.c:2424
+#: pack-bitmap.c:1072 pack-bitmap.c:1078 builtin/pack-objects.c:2432
 #, c-format
 msgid "unable to get size of %s"
 msgstr "không thể lấy kích cỡ của %s"
 
-#: pack-bitmap.c:1935
+#: pack-bitmap.c:1937
 #, c-format
 msgid "could not find %s in pack %s at offset %<PRIuMAX>"
 msgstr "không thể tìm thấy %s trong gói “%s” tại vị trí %<PRIuMAX>"
 
-#: pack-bitmap.c:1971 builtin/rev-list.c:92
+#: pack-bitmap.c:1973 builtin/rev-list.c:91
 #, c-format
 msgid "unable to get disk usage of %s"
 msgstr "không thể dung lượng đĩa đã dùng của %s"
@@ -6030,7 +6235,7 @@ msgstr "không thể lấy thông tin thống kê: %s"
 msgid "failed to make %s readable"
 msgstr "gặp lỗi làm cho %s đọc được"
 
-#: pack-write.c:520
+#: pack-write.c:521
 #, c-format
 msgid "could not write '%s' promisor file"
 msgstr "không thể ghi tập tin promisor “%s”"
@@ -6370,20 +6575,20 @@ msgstr "object-info: cần đẩy dữ liệu lên đĩa sau các tham số"
 msgid "Removing duplicate objects"
 msgstr "Đang gỡ các đối tượng trùng lặp"
 
-#: range-diff.c:67
+#: range-diff.c:68
 msgid "could not start `log`"
 msgstr "không thể lấy thông tin thống kê về “log“"
 
-#: range-diff.c:69
+#: range-diff.c:70
 msgid "could not read `log` output"
 msgstr "không thể đọc kết xuất “log”"
 
-#: range-diff.c:97 sequencer.c:5602
+#: range-diff.c:98 sequencer.c:5575
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "không thể phân tích lần chuyển giao “%s”"
 
-#: range-diff.c:111
+#: range-diff.c:109
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
@@ -6392,66 +6597,66 @@ msgstr ""
 "không thể phân tích cú pháp dòng đầu tiên của đầu ra “log”: không bắt đầu "
 "bằng “commit ”: “%s”"
 
-#: range-diff.c:137
+#: range-diff.c:132
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "không thể phân tích cú pháp phần đầu git “%.*s”"
 
-#: range-diff.c:304
+#: range-diff.c:300
 msgid "failed to generate diff"
 msgstr "gặp lỗi khi tạo khác biệt"
 
-#: range-diff.c:562 range-diff.c:564
+#: range-diff.c:558 range-diff.c:560
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "không thể phân tích nhật ký cho “%s”"
 
-#: read-cache.c:723
+#: read-cache.c:737
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr ""
 "sẽ không thêm các bí danh “%s” (“%s” đã có từ trước trong bảng mục lục)"
 
-#: read-cache.c:739
+#: read-cache.c:753
 msgid "cannot create an empty blob in the object database"
 msgstr "không thể tạo một blob rỗng trong cơ sở dữ liệu đối tượng"
 
-#: read-cache.c:761
+#: read-cache.c:775
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr ""
 "%s: chỉ có thể thêm tập tin thông thường, liên kết mềm hoặc git-directories"
 
-#: read-cache.c:766 builtin/submodule--helper.c:3242
+#: read-cache.c:780 builtin/submodule--helper.c:3359
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr "“%s” không có một lần chuyển giao nào được lấy ra"
 
-#: read-cache.c:818
+#: read-cache.c:832
 #, c-format
 msgid "unable to index file '%s'"
 msgstr "không thể đánh mục lục tập tin “%s”"
 
-#: read-cache.c:837
+#: read-cache.c:851
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr "không thể thêm %s vào bảng mục lục"
 
-#: read-cache.c:848
+#: read-cache.c:862
 #, c-format
 msgid "unable to stat '%s'"
 msgstr "không thể lấy thống kê “%s”"
 
-#: read-cache.c:1386
+#: read-cache.c:1404
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr "%s có vẻ không phải là tập tin và cũng chẳng phải là một thư mục"
 
-#: read-cache.c:1601
+#: read-cache.c:1619
 msgid "Refresh index"
 msgstr "Làm tươi mới bảng mục lục"
 
-#: read-cache.c:1733
+#: read-cache.c:1751
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -6460,7 +6665,7 @@ msgstr ""
 "index.version được đặt, nhưng giá trị của nó lại không hợp lệ.\n"
 "Dùng phiên bản %i"
 
-#: read-cache.c:1743
+#: read-cache.c:1761
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -6469,143 +6674,147 @@ msgstr ""
 "GIT_INDEX_VERSION được đặt, nhưng giá trị của nó lại không hợp lệ.\n"
 "Dùng phiên bản %i"
 
-#: read-cache.c:1799
+#: read-cache.c:1817
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "chữ ký sai 0x%08x"
 
-#: read-cache.c:1802
+#: read-cache.c:1820
 #, c-format
 msgid "bad index version %d"
 msgstr "phiên bản mục lục sai %d"
 
-#: read-cache.c:1811
+#: read-cache.c:1829
 msgid "bad index file sha1 signature"
 msgstr "chữ ký dạng sha1 cho tập tin mục lục không đúng"
 
-#: read-cache.c:1845
+#: read-cache.c:1863
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "mục lục dùng phần mở rộng %.4s, cái mà chúng tôi không hiểu được"
 
-#: read-cache.c:1847
+#: read-cache.c:1865
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "đang lờ đi phần mở rộng %.4s"
 
-#: read-cache.c:1884
+#: read-cache.c:1902
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "không hiểu định dạng mục lục 0x%08x"
 
-#: read-cache.c:1900
+#: read-cache.c:1918
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "trường tên sai sạng trong mục lục, gần đường dẫn “%s”"
 
-#: read-cache.c:1957
+#: read-cache.c:1975
 msgid "unordered stage entries in index"
 msgstr "các mục tin stage không đúng thứ tự trong mục lục"
 
-#: read-cache.c:1960
+#: read-cache.c:1978
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "nhiều mục stage cho tập tin hòa trộn “%s”"
 
-#: read-cache.c:1963
+#: read-cache.c:1981
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "các mục tin stage không đúng thứ tự cho “%s”"
 
-#: read-cache.c:2078 read-cache.c:2384 rerere.c:549 rerere.c:583 rerere.c:1095
-#: submodule.c:1662 builtin/add.c:600 builtin/check-ignore.c:183
-#: builtin/checkout.c:527 builtin/checkout.c:719 builtin/clean.c:1013
-#: builtin/commit.c:378 builtin/diff-tree.c:122 builtin/grep.c:519
-#: builtin/mv.c:148 builtin/reset.c:499 builtin/rm.c:293
-#: builtin/submodule--helper.c:327 builtin/submodule--helper.c:3202
+#: read-cache.c:2096 read-cache.c:2402 rerere.c:549 rerere.c:583 rerere.c:1096
+#: submodule.c:1831 builtin/add.c:586 builtin/check-ignore.c:183
+#: builtin/checkout.c:532 builtin/checkout.c:724 builtin/clean.c:1016
+#: builtin/commit.c:379 builtin/diff-tree.c:122 builtin/grep.c:521
+#: builtin/mv.c:148 builtin/reset.c:506 builtin/rm.c:293
+#: builtin/submodule--helper.c:335 builtin/submodule--helper.c:3319
 msgid "index file corrupt"
 msgstr "tập tin ghi bảng mục lục bị hỏng"
 
-#: read-cache.c:2222
+#: read-cache.c:2240
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "không thể tạo tuyến load_cache_entries: %s"
 
-#: read-cache.c:2235
+#: read-cache.c:2253
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "không thể gia nhập tuyến load_cache_entries: %s"
 
-#: read-cache.c:2268
+#: read-cache.c:2286
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s: mở tập tin mục lục gặp lỗi"
 
-#: read-cache.c:2272
+#: read-cache.c:2290
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s: không thể lấy thống kê bảng mục lục đã mở"
 
-#: read-cache.c:2276
+#: read-cache.c:2294
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s: tập tin mục lục nhỏ hơn mong đợi"
 
-#: read-cache.c:2280
+#: read-cache.c:2298
 #, c-format
 msgid "%s: unable to map index file%s"
 msgstr "%s: không thể ánh xạ tập tin mục lục%s"
 
-#: read-cache.c:2323
+#: read-cache.c:2341
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "không thể tạo tuyến load_index_extensions: %s"
 
-#: read-cache.c:2350
+#: read-cache.c:2368
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "không thể gia nhập tuyến load_index_extensions: %s"
 
-#: read-cache.c:2396
+#: read-cache.c:2414
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "không thể làm tươi mới mục lục đã chia sẻ “%s”"
 
-#: read-cache.c:2455
+#: read-cache.c:2473
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "mục lục bị hỏng, cần %s trong %s, nhưng lại nhận được %s"
 
-#: read-cache.c:3086 strbuf.c:1191 wrapper.c:641 builtin/merge.c:1150
+#: read-cache.c:3032
+msgid "cannot write split index for a sparse index"
+msgstr "không thể ghi mục lục chia tách cho \"sparse index\""
+
+#: read-cache.c:3114 strbuf.c:1192 wrapper.c:717 builtin/merge.c:1156
 #, c-format
 msgid "could not close '%s'"
 msgstr "không thể đóng “%s”"
 
-#: read-cache.c:3129
+#: read-cache.c:3157
 msgid "failed to convert to a sparse-index"
 msgstr "gặp lỗi khi chuyển đổi sang \"sparse-index\""
 
-#: read-cache.c:3200
+#: read-cache.c:3228
 #, c-format
 msgid "could not stat '%s'"
 msgstr "không thể lấy thông tin thống kê về “%s”"
 
-#: read-cache.c:3213
+#: read-cache.c:3241
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "không thể mở thư mục git: %s"
 
-#: read-cache.c:3225
+#: read-cache.c:3253
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "không thể bỏ liên kết (unlink): “%s”"
 
-#: read-cache.c:3254
+#: read-cache.c:3282
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "không thể sửa các bít phân quyền trên “%s”"
 
-#: read-cache.c:3411
+#: read-cache.c:3439
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s: không thể xóa bỏ stage #0"
@@ -6728,9 +6937,9 @@ msgstr ""
 "Tuy nhiên, nếu bạn xóa bỏ mọi thứ, việc cải tổ sẽ bị bãi bỏ.\n"
 "\n"
 
-#: rebase-interactive.c:113 rerere.c:469 rerere.c:676 sequencer.c:3883
-#: sequencer.c:3909 sequencer.c:5708 builtin/fsck.c:328 builtin/gc.c:1791
-#: builtin/rebase.c:190
+#: rebase-interactive.c:113 rerere.c:469 rerere.c:677 sequencer.c:3879
+#: sequencer.c:3905 sequencer.c:5681 builtin/fsck.c:328 builtin/gc.c:1791
+#: builtin/rebase.c:191
 #, c-format
 msgid "could not write '%s'"
 msgstr "không thể ghi “%s”"
@@ -6772,7 +6981,7 @@ msgstr ""
 msgid "%s: 'preserve' superseded by 'merges'"
 msgstr "%s: “preserve” bị cấm bởi “merges”"
 
-#: ref-filter.c:42 wt-status.c:2048
+#: ref-filter.c:42 wt-status.c:2057
 msgid "gone"
 msgstr "đã ra đi"
 
@@ -6940,81 +7149,91 @@ msgstr "lệnh này từ chối atom %%(%.*s)"
 msgid "--format=%.*s cannot be used with --python, --shell, --tcl"
 msgstr "--format=%.*s không thể được dùng với --python, --shell, --tcl"
 
-#: ref-filter.c:1706
+#: ref-filter.c:1707
 #, c-format
 msgid "(no branch, rebasing %s)"
 msgstr "(không nhánh, đang cải tổ %s)"
 
-#: ref-filter.c:1709
+#: ref-filter.c:1710
 #, c-format
 msgid "(no branch, rebasing detached HEAD %s)"
 msgstr "(không nhánh, đang cải tổ HEAD %s đã tách rời)"
 
-#: ref-filter.c:1712
+#: ref-filter.c:1713
 #, c-format
 msgid "(no branch, bisect started on %s)"
 msgstr "(không nhánh, di chuyển nửa bước được bắt đầu tại %s)"
 
-#: ref-filter.c:1716
+#: ref-filter.c:1717
 #, c-format
 msgid "(HEAD detached at %s)"
 msgstr "(HEAD được tách rời tại %s)"
 
-#: ref-filter.c:1719
+#: ref-filter.c:1720
 #, c-format
 msgid "(HEAD detached from %s)"
 msgstr "(HEAD được tách rời khỏi %s)"
 
-#: ref-filter.c:1722
+#: ref-filter.c:1723
 msgid "(no branch)"
 msgstr "(không nhánh)"
 
-#: ref-filter.c:1754 ref-filter.c:1972
+#: ref-filter.c:1755 ref-filter.c:1973
 #, c-format
 msgid "missing object %s for %s"
 msgstr "thiếu đối tượng %s cho %s"
 
-#: ref-filter.c:1764
+#: ref-filter.c:1765
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer gặp lỗi trên %s cho %s"
 
-#: ref-filter.c:2155
+#: ref-filter.c:2156
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "đối tượng dị hình tại “%s”"
 
-#: ref-filter.c:2245
+#: ref-filter.c:2246
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "đang lờ đi tham chiếu với tên hỏng %s"
 
-#: ref-filter.c:2250 refs.c:676
+#: ref-filter.c:2251 refs.c:672
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "đang lờ đi tham chiếu hỏng %s"
 
-#: ref-filter.c:2629
+#: ref-filter.c:2630
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "định dạng: thiếu nguyên tử %%(end)"
 
-#: ref-filter.c:2740
+#: ref-filter.c:2741
 #, c-format
 msgid "malformed object name %s"
 msgstr "tên đối tượng dị hình %s"
 
-#: ref-filter.c:2745
+#: ref-filter.c:2746
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "tùy chọn “%s” phải chỉ đến một lần chuyển giao"
 
-#: refs.c:261
+#: reflog.c:407
+#, c-format
+msgid "not a reflog: %s"
+msgstr "không phải một reflog: %s"
+
+#: reflog.c:410
+#, c-format
+msgid "no reflog for '%s'"
+msgstr "không reflog cho “%s”"
+
+#: refs.c:262
 #, c-format
 msgid "%s does not point to a valid object!"
 msgstr "“%s” không chỉ đến một lần chuyển giao hợp lệ nào cả!"
 
-#: refs.c:563
+#: refs.c:561
 #, c-format
 msgid ""
 "Using '%s' as the name for the initial branch. This default branch name\n"
@@ -7039,81 +7258,81 @@ msgstr ""
 "\n"
 "\tgit branch -m <tên>\n"
 
-#: refs.c:585
+#: refs.c:583
 #, c-format
 msgid "could not retrieve `%s`"
 msgstr "không thể lấy về “%s”"
 
-#: refs.c:595
+#: refs.c:593
 #, c-format
 msgid "invalid branch name: %s = %s"
 msgstr "tên nhánh không hợp lệ: %s = %s"
 
-#: refs.c:674
+#: refs.c:670
 #, c-format
 msgid "ignoring dangling symref %s"
 msgstr "đang lờ đi tham chiếu mềm thừa %s"
 
-#: refs.c:925
+#: refs.c:919
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "nhật ký cho tham chiếu %s có khoảng trống sau %s"
 
-#: refs.c:932
+#: refs.c:926
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr "nhật ký cho tham chiếu %s kết thúc bất ngờ trên %s"
 
-#: refs.c:997
+#: refs.c:991
 #, c-format
 msgid "log for %s is empty"
 msgstr "nhật ký cho %s trống rỗng"
 
-#: refs.c:1090
+#: refs.c:1086
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "từ chối cập nhật tham chiếu với tên sai “%s”"
 
-#: refs.c:1168
+#: refs.c:1164
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "update_ref bị lỗi cho ref “%s”: %s"
 
-#: refs.c:2067
+#: refs.c:2059
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "không cho phép đa cập nhật cho tham chiếu “%s”"
 
-#: refs.c:2150
+#: refs.c:2145
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "cập nhật tham chiếu bị cấm trong môi trường kiểm tra"
 
-#: refs.c:2161
+#: refs.c:2156
 msgid "ref updates aborted by hook"
 msgstr "các cập nhật tham chiếu bị bãi bỏ bởi móc"
 
-#: refs.c:2269 refs.c:2299
+#: refs.c:2264 refs.c:2294
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "“%s” sẵn có; không thể tạo “%s”"
 
-#: refs.c:2275 refs.c:2310
+#: refs.c:2270 refs.c:2305
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "không thể xử lý “%s” và “%s” cùng một lúc"
 
-#: refs/files-backend.c:1267
+#: refs/files-backend.c:1295
 #, c-format
 msgid "could not remove reference %s"
 msgstr "không thể gỡ bỏ tham chiếu: %s"
 
-#: refs/files-backend.c:1281 refs/packed-backend.c:1549
-#: refs/packed-backend.c:1559
+#: refs/files-backend.c:1310 refs/packed-backend.c:1565
+#: refs/packed-backend.c:1575
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr "không thể xóa bỏ tham chiếu %s: %s"
 
-#: refs/files-backend.c:1284 refs/packed-backend.c:1562
+#: refs/files-backend.c:1313 refs/packed-backend.c:1578
 #, c-format
 msgid "could not delete references: %s"
 msgstr "không thể xóa bỏ tham chiếu: %s"
@@ -7136,37 +7355,37 @@ msgstr "đã đưa ra nhiều hơn một gói nhận về, đang sử dụng cá
 msgid "more than one uploadpack given, using the first"
 msgstr "đã đưa ra nhiều hơn một gói tải lên, đang sử dụng cái đầu tiên"
 
-#: remote.c:699
+#: remote.c:698
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr "Không thể lấy về cả %s và %s cho %s"
 
-#: remote.c:703
+#: remote.c:702
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr "%s thường theo dõi %s, không phải %s"
 
-#: remote.c:707
+#: remote.c:706
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr "%s theo dõi cả %s và %s"
 
-#: remote.c:775
+#: remote.c:774
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr "khóa “%s” của mẫu k có “*”"
 
-#: remote.c:785
+#: remote.c:784
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr "giá trị “%s” của mẫu k có “*”"
 
-#: remote.c:1192
+#: remote.c:1191
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "refspec %s nguồn không khớp bất kỳ cái gì"
 
-#: remote.c:1197
+#: remote.c:1196
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr "refspec %s nguồn khớp nhiều hơn một"
@@ -7175,7 +7394,7 @@ msgstr "refspec %s nguồn khớp nhiều hơn một"
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1212
+#: remote.c:1211
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -7200,7 +7419,7 @@ msgstr ""
 "Nếu cả hai là không thể, thì chúng tôi cũng chịu thua. Bạn phải dùng tham "
 "chiếu dạng đầy đủ."
 
-#: remote.c:1232
+#: remote.c:1231
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -7211,7 +7430,7 @@ msgstr ""
 "Có phải ý bạn là một tạo một nhánh mới bằng cách đẩy lên\n"
 "“%s:refs/heads/%s”?"
 
-#: remote.c:1237
+#: remote.c:1236
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -7222,7 +7441,7 @@ msgstr ""
 "Có phải ý bạn là một tạo một thẻ mới bằng cách đẩy lên\n"
 "“%s:refs/tags/%s”?"
 
-#: remote.c:1242
+#: remote.c:1241
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -7233,7 +7452,7 @@ msgstr ""
 "Có phải ý bạn là một tạo một cây mới bằng cách đẩy lên\n"
 "“%s:refs/tags/%s”?"
 
-#: remote.c:1247
+#: remote.c:1246
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -7244,115 +7463,115 @@ msgstr ""
 "Có phải ý bạn là một tạo một blob mới bằng cách đẩy lên\n"
 "“%s:refs/tags/%s”?"
 
-#: remote.c:1283
+#: remote.c:1282
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "“%s” không thể được phân giải thành nhánh"
 
-#: remote.c:1294
+#: remote.c:1293
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "không thể xóa “%s”: tham chiếu trên máy chủ không tồn tại"
 
-#: remote.c:1306
+#: remote.c:1305
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "dst refspec %s khớp nhiều hơn một"
 
-#: remote.c:1313
+#: remote.c:1312
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "dst ref %s nhận từ hơn một nguồn"
 
-#: remote.c:1834 remote.c:1941
+#: remote.c:1833 remote.c:1940
 msgid "HEAD does not point to a branch"
 msgstr "HEAD không chỉ đến một nhánh nào cả"
 
-#: remote.c:1843
+#: remote.c:1842
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "không có nhánh nào như thế: “%s”"
 
-#: remote.c:1846
+#: remote.c:1845
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "không có thượng nguồn được cấu hình cho nhánh “%s”"
 
-#: remote.c:1852
+#: remote.c:1851
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr ""
 "nhánh thượng nguồn “%s” không được lưu lại như là một nhánh theo dõi máy chủ"
 
-#: remote.c:1867
+#: remote.c:1866
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr "đẩy lên đích “%s” trên máy chủ “%s” không có nhánh theo dõi nội bộ"
 
-#: remote.c:1882
+#: remote.c:1881
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "nhánh “%s” không có máy chủ để đẩy lên"
 
-#: remote.c:1892
+#: remote.c:1891
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "đẩy refspecs cho “%s” không bao gồm “%s”"
 
-#: remote.c:1905
+#: remote.c:1904
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "đẩy lên mà không có đích (push.default là “nothing”)"
 
-#: remote.c:1927
+#: remote.c:1926
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "không thể phân giải đẩy “đơn giản” đến một đích đơn"
 
-#: remote.c:2060
+#: remote.c:2059
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "không thể tìm thấy tham chiếu máy chủ %s"
 
-#: remote.c:2073
+#: remote.c:2072
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* Đang bỏ qua tham chiếu thú vị nội bộ “%s”"
 
-#: remote.c:2236
+#: remote.c:2235
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr ""
 "Nhánh của bạn dựa trên cơ sở là “%s”, nhưng trên thượng nguồn không còn.\n"
 
-#: remote.c:2240
+#: remote.c:2239
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "   (dùng \" git branch --unset-upstream\" để sửa)\n"
 
-#: remote.c:2243
+#: remote.c:2242
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "Nhánh của bạn đã cập nhật với “%s”.\n"
 
-#: remote.c:2247
+#: remote.c:2246
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "Nhánh của bạn và “%s” tham chiếu đến các lần chuyển giao khác nhau.\n"
 
-#: remote.c:2250
+#: remote.c:2249
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (dùng \"%s\" để biết thêm chi tiết)\n"
 
-#: remote.c:2254
+#: remote.c:2253
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "Nhánh của bạn đứng trước “%s” %d lần chuyển giao.\n"
 
-#: remote.c:2260
+#: remote.c:2259
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (dùng \"git push\" để xuất bản các lần chuyển giao nội bộ của bạn)\n"
 
-#: remote.c:2263
+#: remote.c:2262
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -7361,11 +7580,11 @@ msgstr[0] ""
 "Nhánh của bạn đứng đằng sau “%s” %d lần chuyển giao, và có thể được chuyển-"
 "tiếp-nhanh.\n"
 
-#: remote.c:2271
+#: remote.c:2270
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (dùng \"git pull\" để cập nhật nhánh nội bộ của bạn)\n"
 
-#: remote.c:2274
+#: remote.c:2273
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -7378,13 +7597,13 @@ msgstr[0] ""
 "và có %d và %d lần chuyển giao khác nhau cho từng cái,\n"
 "tương ứng với mỗi lần.\n"
 
-#: remote.c:2284
+#: remote.c:2283
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr ""
 "  (dùng \"git pull\" để hòa trộn nhánh trên máy chủ vào trong nhánh của "
 "bạn)\n"
 
-#: remote.c:2476
+#: remote.c:2475
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "không thể phân tích tên đối tượng mong muốn “%s”"
@@ -7422,104 +7641,108 @@ msgstr "gặp lỗi đọc khi đang ghi “%s” (%s)"
 msgid "failed to flush '%s'"
 msgstr "gặp lỗi khi đẩy dữ liệu “%s” lên đĩa"
 
-#: rerere.c:487 rerere.c:1023
+#: rerere.c:487 rerere.c:1024
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
 msgstr "không thể phân tích các mảnh xung đột trong “%s”"
 
-#: rerere.c:668
+#: rerere.c:669
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr "gặp lỗi utime() trên “%s”"
 
-#: rerere.c:678
+#: rerere.c:679
 #, c-format
 msgid "writing '%s' failed"
 msgstr "gặp lỗi khi đang ghi “%s”"
 
-#: rerere.c:698
+#: rerere.c:699
 #, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr "Đã tạm cất “%s” sử dụng cách phân giải kế trước."
 
-#: rerere.c:737
+#: rerere.c:738
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr "Cách giải quyết đã ghi lại cho “%s”."
 
-#: rerere.c:772
+#: rerere.c:773
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr "Đã phân giải giải “%s” sử dụng cách giải quyết kế trước."
 
-#: rerere.c:787
+#: rerere.c:788
 #, c-format
 msgid "cannot unlink stray '%s'"
 msgstr "không thể unlink stray “%s”"
 
-#: rerere.c:791
+#: rerere.c:792
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr "Preimage đã được ghi lại cho “%s”"
 
-#: rerere.c:865 submodule.c:2121 builtin/log.c:2017
-#: builtin/submodule--helper.c:1777 builtin/submodule--helper.c:1820
+#: rerere.c:866 submodule.c:2290 builtin/log.c:2042
+#: builtin/submodule--helper.c:1786 builtin/submodule--helper.c:1833
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "không thể tạo thư mục “%s”"
 
-#: rerere.c:1041
+#: rerere.c:1042
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr "gặp lỗi khi chạy cập nhật trạng thái bị xung đột trong “%s”"
 
-#: rerere.c:1052 rerere.c:1059
+#: rerere.c:1053 rerere.c:1060
 #, c-format
 msgid "no remembered resolution for '%s'"
 msgstr "đừng nhó các giải quyết cho “%s”"
 
-#: rerere.c:1061
+#: rerere.c:1062
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr "không thể unlink “%s”"
 
-#: rerere.c:1071
+#: rerere.c:1072
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr "Đã cập nhật preimage cho “%s”"
 
-#: rerere.c:1080
+#: rerere.c:1081
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr "Quên phân giải cho “%s”\n"
 
-#: rerere.c:1191
+#: rerere.c:1192
 msgid "unable to open rr-cache directory"
 msgstr "không thể mở thư mục rr-cache"
 
-#: reset.c:42
+#: reset.c:112
 msgid "could not determine HEAD revision"
 msgstr "không thể dò tìm điểm xét duyệt HEAD"
 
-#: reset.c:70 reset.c:76 sequencer.c:3700
+#: reset.c:141 reset.c:147 sequencer.c:3696
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "gặp lỗi khi tìm cây của %s"
 
-#: revision.c:2347
+#: revision.c:2358
 msgid "--unpacked=<packfile> no longer supported"
 msgstr "--unpacked=<packfile> không còn được hỗ trợ nữa"
 
-#: revision.c:2686
+#: revision.c:2712
 msgid "your current branch appears to be broken"
 msgstr "nhánh hiện tại của bạn có vẻ như bị hỏng"
 
-#: revision.c:2689
+#: revision.c:2715
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "nhánh hiện tại của bạn “%s” không có một lần chuyển giao nào cả"
 
-#: revision.c:2891
+#: revision.c:2901
+msgid "object filtering requires --objects"
+msgstr "lọc đối tượng yêu cầu --objects"
+
+#: revision.c:2918
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L vẫn chưa hỗ trợ định dạng khác biệt nào ngoài -p và -s"
 
@@ -7589,7 +7812,7 @@ msgstr "chế độ dọn dẹp ghi chú các lần chuyển giao không hợp l
 msgid "could not delete '%s'"
 msgstr "không thể xóa bỏ “%s”"
 
-#: sequencer.c:345 sequencer.c:4751 builtin/rebase.c:563 builtin/rebase.c:1297
+#: sequencer.c:345 sequencer.c:4724 builtin/rebase.c:564 builtin/rebase.c:1326
 #: builtin/rm.c:409
 #, c-format
 msgid "could not remove '%s'"
@@ -7652,13 +7875,13 @@ msgstr ""
 "Để bãi bỏ và quay trở lại trạng thái trước \"git revert\",\n"
 "chạy \"git revert --abort\"."
 
-#: sequencer.c:448 sequencer.c:3292
+#: sequencer.c:448 sequencer.c:3288
 #, c-format
 msgid "could not lock '%s'"
 msgstr "không thể khóa “%s”"
 
-#: sequencer.c:450 sequencer.c:3091 sequencer.c:3296 sequencer.c:3310
-#: sequencer.c:3561 sequencer.c:5618 strbuf.c:1188 wrapper.c:639
+#: sequencer.c:450 sequencer.c:3087 sequencer.c:3292 sequencer.c:3306
+#: sequencer.c:3557 sequencer.c:5591 strbuf.c:1189 wrapper.c:715
 #, c-format
 msgid "could not write to '%s'"
 msgstr "không thể ghi vào “%s”"
@@ -7668,14 +7891,14 @@ msgstr "không thể ghi vào “%s”"
 msgid "could not write eol to '%s'"
 msgstr "không thể ghi eol vào “%s”"
 
-#: sequencer.c:460 sequencer.c:3096 sequencer.c:3298 sequencer.c:3312
-#: sequencer.c:3569
+#: sequencer.c:460 sequencer.c:3092 sequencer.c:3294 sequencer.c:3308
+#: sequencer.c:3565
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "gặp lỗi khi hoàn thành “%s”"
 
-#: sequencer.c:473 sequencer.c:1934 sequencer.c:3116 sequencer.c:3551
-#: sequencer.c:3679 builtin/am.c:289 builtin/commit.c:834 builtin/merge.c:1148
+#: sequencer.c:473 sequencer.c:1930 sequencer.c:3112 sequencer.c:3547
+#: sequencer.c:3675 builtin/am.c:290 builtin/commit.c:837 builtin/merge.c:1154
 #, c-format
 msgid "could not read '%s'"
 msgstr "không thể đọc “%s”"
@@ -7694,7 +7917,7 @@ msgstr "chuyển giao các thay đổi của bạn hay tạm cất (stash) chún
 msgid "%s: fast-forward"
 msgstr "%s: chuyển-tiếp-nhanh"
 
-#: sequencer.c:574 builtin/tag.c:614
+#: sequencer.c:574 builtin/tag.c:615
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "Chế độ dọn dẹp không hợp lệ %s"
@@ -7725,8 +7948,8 @@ msgstr "không có khóa hiện diện trong “%.*s”"
 msgid "unable to dequote value of '%s'"
 msgstr "không thể giải trích dẫn giá trị của “%s”"
 
-#: sequencer.c:841 wrapper.c:209 wrapper.c:379 builtin/am.c:756
-#: builtin/am.c:848 builtin/rebase.c:694
+#: sequencer.c:841 wrapper.c:219 wrapper.c:389 builtin/am.c:757
+#: builtin/am.c:849 builtin/rebase.c:699
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "không thể mở “%s” để đọc"
@@ -7852,352 +8075,347 @@ msgstr ""
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1288
+#: sequencer.c:1287
 msgid "couldn't look up newly created commit"
 msgstr "không thể tìm thấy lần chuyển giao mới hơn đã được tạo"
 
-#: sequencer.c:1290
+#: sequencer.c:1289
 msgid "could not parse newly created commit"
 msgstr ""
 "không thể phân tích cú pháp của đối tượng chuyển giao mới hơn đã được tạo"
 
-#: sequencer.c:1339
+#: sequencer.c:1336
 msgid "unable to resolve HEAD after creating commit"
 msgstr "không thể phân giải HEAD sau khi tạo lần chuyển giao"
 
-#: sequencer.c:1342
+#: sequencer.c:1338
 msgid "detached HEAD"
 msgstr "đã rời khỏi HEAD"
 
-#: sequencer.c:1346
+#: sequencer.c:1342
 msgid " (root-commit)"
 msgstr " (root-commit)"
 
-#: sequencer.c:1367
+#: sequencer.c:1363
 msgid "could not parse HEAD"
 msgstr "không thể phân tích HEAD"
 
-#: sequencer.c:1369
+#: sequencer.c:1365
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s không phải là một lần chuyển giao!"
 
-#: sequencer.c:1373 sequencer.c:1451 builtin/commit.c:1708
+#: sequencer.c:1369 sequencer.c:1447 builtin/commit.c:1707
 msgid "could not parse HEAD commit"
 msgstr "không thể phân tích commit (lần chuyển giao) HEAD"
 
-#: sequencer.c:1429 sequencer.c:2314
+#: sequencer.c:1425 sequencer.c:2310
 msgid "unable to parse commit author"
 msgstr "không thể phân tích tác giả của lần chuyển giao"
 
-#: sequencer.c:1440 builtin/am.c:1643 builtin/merge.c:710
+#: sequencer.c:1436 builtin/am.c:1644 builtin/merge.c:710
 msgid "git write-tree failed to write a tree"
 msgstr "lệnh git write-tree gặp lỗi khi ghi một cây"
 
-#: sequencer.c:1473 sequencer.c:1593
+#: sequencer.c:1469 sequencer.c:1589
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "không thể đọc phần chú thích (message) từ “%s”"
 
-#: sequencer.c:1504 sequencer.c:1536
+#: sequencer.c:1500 sequencer.c:1532
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr "định danh tác giả không hợp lệ “%s”"
 
-#: sequencer.c:1510
+#: sequencer.c:1506
 msgid "corrupt author: missing date information"
 msgstr "tác giả sai hỏng: thiếu thông tin ngày tháng"
 
-#: sequencer.c:1549 builtin/am.c:1670 builtin/commit.c:1822 builtin/merge.c:915
-#: builtin/merge.c:940 t/helper/test-fast-rebase.c:78
+#: sequencer.c:1545 builtin/am.c:1671 builtin/commit.c:1821 builtin/merge.c:921
+#: builtin/merge.c:946 t/helper/test-fast-rebase.c:78
 msgid "failed to write commit object"
 msgstr "gặp lỗi khi ghi đối tượng chuyển giao"
 
-#: sequencer.c:1576 sequencer.c:4523 t/helper/test-fast-rebase.c:199
+#: sequencer.c:1572 sequencer.c:4496 t/helper/test-fast-rebase.c:199
 #: t/helper/test-fast-rebase.c:217
 #, c-format
 msgid "could not update %s"
 msgstr "không thể cập nhật %s"
 
-#: sequencer.c:1625
+#: sequencer.c:1621
 #, c-format
 msgid "could not parse commit %s"
 msgstr "không thể phân tích lần chuyển giao %s"
 
-#: sequencer.c:1630
+#: sequencer.c:1626
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "không thể phân tích lần chuyển giao cha mẹ “%s”"
 
-#: sequencer.c:1713 sequencer.c:1994
+#: sequencer.c:1709 sequencer.c:1990
 #, c-format
 msgid "unknown command: %d"
 msgstr "không hiểu câu lệnh %d"
 
-#: sequencer.c:1755
+#: sequencer.c:1751
 msgid "This is the 1st commit message:"
 msgstr "Đây là chú thích cho lần chuyển giao thứ nhất:"
 
-#: sequencer.c:1756
+#: sequencer.c:1752
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "Đây là chú thích cho lần chuyển giao thứ #%d:"
 
-#: sequencer.c:1757
+#: sequencer.c:1753
 msgid "The 1st commit message will be skipped:"
 msgstr "Chú thích cho lần chuyển giao thứ nhất sẽ bị bỏ qua:"
 
-#: sequencer.c:1758
+#: sequencer.c:1754
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "Chú thích cho lần chuyển giao thứ #%d sẽ bị bỏ qua:"
 
-#: sequencer.c:1759
+#: sequencer.c:1755
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "Đây là tổ hợp của %d lần chuyển giao."
 
-#: sequencer.c:1906 sequencer.c:1963
+#: sequencer.c:1902 sequencer.c:1959
 #, c-format
 msgid "cannot write '%s'"
 msgstr "không thể ghi “%s”"
 
-#: sequencer.c:1953
+#: sequencer.c:1949
 msgid "need a HEAD to fixup"
 msgstr "cần một HEAD để sửa"
 
-#: sequencer.c:1955 sequencer.c:3596
+#: sequencer.c:1951 sequencer.c:3592
 msgid "could not read HEAD"
 msgstr "không thể đọc HEAD"
 
-#: sequencer.c:1957
+#: sequencer.c:1953
 msgid "could not read HEAD's commit message"
 msgstr "không thể đọc phần chú thích (message) của HEAD"
 
-#: sequencer.c:1981
+#: sequencer.c:1977
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "không thể đọc phần chú thích (message) của %s"
 
-#: sequencer.c:2091
+#: sequencer.c:2087
 msgid "your index file is unmerged."
 msgstr "tập tin lưu mục lục của bạn không được hòa trộn."
 
-#: sequencer.c:2098
+#: sequencer.c:2094
 msgid "cannot fixup root commit"
 msgstr "không thể sửa chữa lần chuyển giao gốc"
 
-#: sequencer.c:2117
+#: sequencer.c:2113
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "lần chuyển giao %s là một lần hòa trộn nhưng không đưa ra tùy chọn -m."
 
-#: sequencer.c:2125 sequencer.c:2133
+#: sequencer.c:2121 sequencer.c:2129
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "lần chuyển giao %s không có cha mẹ %d"
 
-#: sequencer.c:2139
+#: sequencer.c:2135
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "không thể lấy ghi chú lần chuyển giao cho %s"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:2158
+#: sequencer.c:2154
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s: không thể phân tích lần chuyển giao mẹ của %s"
 
-#: sequencer.c:2224
+#: sequencer.c:2220
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "không thể đổi tên “%s” thành “%s”"
 
-#: sequencer.c:2284
+#: sequencer.c:2280
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "không thể hoàn nguyên %s… %s"
 
-#: sequencer.c:2285
+#: sequencer.c:2281
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "không thể áp dụng miếng vá %s… %s"
 
-#: sequencer.c:2306
+#: sequencer.c:2302
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr "xóa %s %s -- vá nội dung thượng nguồn đã có\n"
 
-#: sequencer.c:2364
+#: sequencer.c:2360
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s: gặp lỗi đọc bảng mục lục"
 
-#: sequencer.c:2372
+#: sequencer.c:2368
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s: gặp lỗi khi làm tươi mới bảng mục lục"
 
-#: sequencer.c:2452
+#: sequencer.c:2448
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s không nhận các đối số: “%s”"
 
-#: sequencer.c:2461
+#: sequencer.c:2457
 #, c-format
 msgid "missing arguments for %s"
 msgstr "thiếu đối số cho %s"
 
-#: sequencer.c:2504
+#: sequencer.c:2500
 #, c-format
 msgid "could not parse '%s'"
 msgstr "không thể phân tích cú pháp “%s”"
 
-#: sequencer.c:2565
+#: sequencer.c:2561
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "dòng không hợp lệ %d: %.*s"
 
-#: sequencer.c:2576
+#: sequencer.c:2572
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "không thể “%s” thể mà không có lần chuyển giao kế trước"
 
-#: sequencer.c:2624 builtin/rebase.c:184
+#: sequencer.c:2620 builtin/rebase.c:185
 #, c-format
 msgid "could not read '%s'."
 msgstr "không thể đọc “%s”."
 
-#: sequencer.c:2662
+#: sequencer.c:2658
 msgid "cancelling a cherry picking in progress"
 msgstr "đang hủy bỏ thao tác cherry pick đang thực hiện"
 
-#: sequencer.c:2671
+#: sequencer.c:2667
 msgid "cancelling a revert in progress"
 msgstr "đang hủy bỏ các thao tác hoàn nguyên đang thực hiện"
 
-#: sequencer.c:2711
+#: sequencer.c:2707
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "vui lòng sửa lỗi này bằng cách dùng “git rebase --edit-todo”."
 
-#: sequencer.c:2713
+#: sequencer.c:2709
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "bảng chỉ thị không thể dùng được: %s"
 
-#: sequencer.c:2718
+#: sequencer.c:2714
 msgid "no commits parsed."
 msgstr "không có lần chuyển giao nào được phân tích."
 
-#: sequencer.c:2729
+#: sequencer.c:2725
 msgid "cannot cherry-pick during a revert."
 msgstr "không thể cherry-pick trong khi hoàn nguyên."
 
-#: sequencer.c:2731
+#: sequencer.c:2727
 msgid "cannot revert during a cherry-pick."
 msgstr "không thể thực hiện việc hoàn nguyên trong khi đang cherry-pick."
 
-#: sequencer.c:2809
-#, c-format
-msgid "invalid value for %s: %s"
-msgstr "giá trị cho %s không hợp lệ: %s"
-
-#: sequencer.c:2918
+#: sequencer.c:2914
 msgid "unusable squash-onto"
 msgstr "squash-onto không dùng được"
 
-#: sequencer.c:2938
+#: sequencer.c:2934
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "bảng tùy chọn dị hình: “%s”"
 
-#: sequencer.c:3033 sequencer.c:4902
+#: sequencer.c:3029 sequencer.c:4875
 msgid "empty commit set passed"
 msgstr "lần chuyển giao trống rỗng đặt là hợp quy cách"
 
-#: sequencer.c:3050
+#: sequencer.c:3046
 msgid "revert is already in progress"
 msgstr "có thao tác hoàn nguyên đang được thực hiện"
 
-#: sequencer.c:3052
+#: sequencer.c:3048
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "hãy thử \"git revert (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:3055
+#: sequencer.c:3051
 msgid "cherry-pick is already in progress"
 msgstr "có thao tác “cherry-pick” đang được thực hiện"
 
-#: sequencer.c:3057
+#: sequencer.c:3053
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "hãy thử \"git cherry-pick (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:3071
+#: sequencer.c:3067
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "không thể tạo thư mục xếp dãy “%s”"
 
-#: sequencer.c:3086
+#: sequencer.c:3082
 msgid "could not lock HEAD"
 msgstr "không thể khóa HEAD"
 
-#: sequencer.c:3146 sequencer.c:4612
+#: sequencer.c:3142 sequencer.c:4585
 msgid "no cherry-pick or revert in progress"
 msgstr "không cherry-pick hay hoàn nguyên trong tiến trình"
 
-#: sequencer.c:3148 sequencer.c:3159
+#: sequencer.c:3144 sequencer.c:3155
 msgid "cannot resolve HEAD"
 msgstr "không thể phân giải HEAD"
 
-#: sequencer.c:3150 sequencer.c:3194
+#: sequencer.c:3146 sequencer.c:3190
 msgid "cannot abort from a branch yet to be born"
 msgstr "không thể hủy bỏ từ một nhánh mà nó còn chưa được tạo ra"
 
-#: sequencer.c:3180 builtin/fetch.c:1004 builtin/fetch.c:1416
-#: builtin/grep.c:772
+#: sequencer.c:3176 builtin/fetch.c:1030 builtin/fetch.c:1457
+#: builtin/grep.c:774
 #, c-format
 msgid "cannot open '%s'"
 msgstr "không mở được “%s”"
 
-#: sequencer.c:3182
+#: sequencer.c:3178
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "không thể đọc “%s”: %s"
 
-#: sequencer.c:3183
+#: sequencer.c:3179
 msgid "unexpected end of file"
 msgstr "gặp kết thúc tập tin đột xuất"
 
-#: sequencer.c:3189
+#: sequencer.c:3185
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "tập tin HEAD “pre-cherry-pick” đã lưu “%s” bị hỏng"
 
-#: sequencer.c:3200
+#: sequencer.c:3196
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr ""
 "Bạn có lẽ đã có HEAD đã bị di chuyển đi, Không thể tua, kiểm tra HEAD của "
 "bạn!"
 
-#: sequencer.c:3241
+#: sequencer.c:3237
 msgid "no revert in progress"
 msgstr "không có tiến trình hoàn nguyên nào"
 
-#: sequencer.c:3250
+#: sequencer.c:3246
 msgid "no cherry-pick in progress"
 msgstr "không có cherry-pick đang được thực hiện"
 
-#: sequencer.c:3260
+#: sequencer.c:3256
 msgid "failed to skip the commit"
 msgstr "gặp lỗi khi bỏ qua đối tượng chuyển giao"
 
-#: sequencer.c:3267
+#: sequencer.c:3263
 msgid "there is nothing to skip"
 msgstr "ở đây không có gì để mà bỏ qua cả"
 
-#: sequencer.c:3270
+#: sequencer.c:3266
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -8206,16 +8424,16 @@ msgstr ""
 "bạn đã sẵn sàng chuyển giao chưa?\n"
 "thử \"git %s --continue\""
 
-#: sequencer.c:3432 sequencer.c:4503
+#: sequencer.c:3428 sequencer.c:4476
 msgid "cannot read HEAD"
 msgstr "không thể đọc HEAD"
 
-#: sequencer.c:3449
+#: sequencer.c:3445
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "không thể chép “%s” sang “%s”"
 
-#: sequencer.c:3457
+#: sequencer.c:3453
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -8234,27 +8452,27 @@ msgstr ""
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:3467
+#: sequencer.c:3463
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "Không thể áp dụng %s… %.*s"
 
-#: sequencer.c:3474
+#: sequencer.c:3470
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "Không hòa trộn %.*s"
 
-#: sequencer.c:3488 sequencer.c:3492 builtin/difftool.c:633
+#: sequencer.c:3484 sequencer.c:3488 builtin/difftool.c:633
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "không thể chép “%s” sang “%s”"
 
-#: sequencer.c:3503
+#: sequencer.c:3499
 #, c-format
 msgid "Executing: %s\n"
 msgstr "Đang thực thi: %s\n"
 
-#: sequencer.c:3514
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -8269,11 +8487,11 @@ msgstr ""
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3520
+#: sequencer.c:3516
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "và tạo các thay đổi bảng mục lục và/hay cây làm việc\n"
 
-#: sequencer.c:3526
+#: sequencer.c:3522
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -8290,90 +8508,90 @@ msgstr ""
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3586
+#: sequencer.c:3582
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "tên nhãn dị hình: “%.*s”"
 
-#: sequencer.c:3659
+#: sequencer.c:3655
 msgid "writing fake root commit"
 msgstr "ghi lần chuyển giao gốc giả"
 
-#: sequencer.c:3664
+#: sequencer.c:3660
 msgid "writing squash-onto"
 msgstr "đang ghi squash-onto"
 
-#: sequencer.c:3743
+#: sequencer.c:3739
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "không thể phân giải “%s”"
 
-#: sequencer.c:3775
+#: sequencer.c:3771
 msgid "cannot merge without a current revision"
 msgstr "không thể hòa trộn mà không có một điểm xét duyệt hiện tại"
 
-#: sequencer.c:3797
+#: sequencer.c:3793
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "không thể phân tích “%.*s”"
 
-#: sequencer.c:3806
+#: sequencer.c:3802
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "chẳng có gì để hòa trộn: “%.*s”"
 
-#: sequencer.c:3818
+#: sequencer.c:3814
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr "hòa trộn octopus không thể được thực thi trên đỉnh của một [new root]"
 
-#: sequencer.c:3873
+#: sequencer.c:3869
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "không thể lấy chú thích của lần chuyển giao của “%s”"
 
-#: sequencer.c:4019
+#: sequencer.c:4013
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "không thể ngay cả khi thử hòa trộn “%.*s”"
 
-#: sequencer.c:4035
+#: sequencer.c:4029
 msgid "merge: Unable to write new index file"
 msgstr "merge: Không thể ghi tập tin lưu bảng mục lục mới"
 
-#: sequencer.c:4116
+#: sequencer.c:4110
 msgid "Cannot autostash"
 msgstr "Không thể autostash"
 
-#: sequencer.c:4119
+#: sequencer.c:4113
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "Gặp đáp ứng stash không cần: “%s”"
 
-#: sequencer.c:4125
+#: sequencer.c:4119
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "Không thể tạo thư mục cho “%s”"
 
-#: sequencer.c:4128
+#: sequencer.c:4122
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "Đã tạo autostash: %s\n"
 
-#: sequencer.c:4132
+#: sequencer.c:4124
 msgid "could not reset --hard"
 msgstr "không thể reset --hard"
 
-#: sequencer.c:4157
+#: sequencer.c:4148
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "Đã áp dụng autostash.\n"
 
-#: sequencer.c:4169
+#: sequencer.c:4160
 #, c-format
 msgid "cannot store %s"
 msgstr "không thử lưu “%s”"
 
-#: sequencer.c:4172
+#: sequencer.c:4163
 #, c-format
 msgid ""
 "%s\n"
@@ -8385,29 +8603,29 @@ msgstr ""
 "Bạn có thể chạy lệnh \"git stash pop\" hay \"git stash drop\" bất kỳ lúc "
 "nào.\n"
 
-#: sequencer.c:4177
+#: sequencer.c:4168
 msgid "Applying autostash resulted in conflicts."
 msgstr "Áp dụng autostash có hiệu quả trong các xung đột."
 
-#: sequencer.c:4178
+#: sequencer.c:4169
 msgid "Autostash exists; creating a new stash entry."
 msgstr "Autostash đã sẵn có; nên tạo một mục stash mới."
 
-#: sequencer.c:4252
+#: sequencer.c:4225
 msgid "could not detach HEAD"
 msgstr "không thể tách rời HEAD"
 
-#: sequencer.c:4267
+#: sequencer.c:4240
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "Dừng lại ở HEAD\n"
 
-#: sequencer.c:4269
+#: sequencer.c:4242
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "Dừng lại ở %s\n"
 
-#: sequencer.c:4301
+#: sequencer.c:4274
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -8428,58 +8646,58 @@ msgstr ""
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:4347
+#: sequencer.c:4320
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "Đang cải tổ (%d/%d)%s"
 
-#: sequencer.c:4393
+#: sequencer.c:4366
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "Dừng lại ở %s…  %.*s\n"
 
-#: sequencer.c:4463
+#: sequencer.c:4436
 #, c-format
 msgid "unknown command %d"
 msgstr "không hiểu câu lệnh %d"
 
-#: sequencer.c:4511
+#: sequencer.c:4484
 msgid "could not read orig-head"
 msgstr "không thể đọc orig-head"
 
-#: sequencer.c:4516
+#: sequencer.c:4489
 msgid "could not read 'onto'"
 msgstr "không thể đọc “onto”."
 
-#: sequencer.c:4530
+#: sequencer.c:4503
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "không thể cập nhật HEAD thành %s"
 
-#: sequencer.c:4590
+#: sequencer.c:4563
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "Cài tổ và cập nhật %s một cách thành công.\n"
 
-#: sequencer.c:4642
+#: sequencer.c:4615
 msgid "cannot rebase: You have unstaged changes."
 msgstr "không thể cải tổ: Bạn có các thay đổi chưa được đưa lên bệ phóng."
 
-#: sequencer.c:4651
+#: sequencer.c:4624
 msgid "cannot amend non-existing commit"
 msgstr "không thể tu bỏ một lần chuyển giao không tồn tại"
 
-#: sequencer.c:4653
+#: sequencer.c:4626
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "tập tin không hợp lệ: “%s”"
 
-#: sequencer.c:4655
+#: sequencer.c:4628
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "nội dung không hợp lệ: “%s”"
 
-#: sequencer.c:4658
+#: sequencer.c:4631
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -8489,69 +8707,69 @@ msgstr ""
 "Bạn có các thay đổi chưa chuyển giao trong thư mục làm việc. Vui lòng\n"
 "chuyển giao chúng trước và sau đó chạy lệnh “git rebase --continue” lần nữa."
 
-#: sequencer.c:4694 sequencer.c:4733
+#: sequencer.c:4667 sequencer.c:4706
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "không thể ghi tập tin: “%s”"
 
-#: sequencer.c:4749
+#: sequencer.c:4722
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "không thể xóa bỏ CHERRY_PICK_HEAD"
 
-#: sequencer.c:4759
+#: sequencer.c:4732
 msgid "could not commit staged changes."
 msgstr "không thể chuyển giao các thay đổi đã đưa lên bệ phóng."
 
-#: sequencer.c:4879
+#: sequencer.c:4852
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s: không thể cherry-pick một %s"
 
-#: sequencer.c:4883
+#: sequencer.c:4856
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s: điểm xét duyệt sai"
 
-#: sequencer.c:4918
+#: sequencer.c:4891
 msgid "can't revert as initial commit"
 msgstr "không thể hoàn nguyên một lần chuyển giao khởi tạo"
 
-#: sequencer.c:5189 sequencer.c:5418
+#: sequencer.c:5162 sequencer.c:5391
 #, c-format
 msgid "skipped previously applied commit %s"
 msgstr "bỏ qua lần chuyển giao được áp dụng kế trước %s"
 
-#: sequencer.c:5259 sequencer.c:5434
+#: sequencer.c:5232 sequencer.c:5407
 msgid "use --reapply-cherry-picks to include skipped commits"
 msgstr ""
 "dùng --reapply-cherry-picks để bao gồm các lần chuyển giao đã bị bỏ qua"
 
-#: sequencer.c:5405
+#: sequencer.c:5378
 msgid "make_script: unhandled options"
 msgstr "make_script: các tùy chọn được không xử lý"
 
-#: sequencer.c:5408
+#: sequencer.c:5381
 msgid "make_script: error preparing revisions"
 msgstr "make_script: lỗi chuẩn bị điểm hiệu chỉnh"
 
-#: sequencer.c:5666 sequencer.c:5683
+#: sequencer.c:5639 sequencer.c:5656
 msgid "nothing to do"
 msgstr "không có gì để làm"
 
-#: sequencer.c:5702
+#: sequencer.c:5675
 msgid "could not skip unnecessary pick commands"
 msgstr "không thể bỏ qua các lệnh cậy (pick) không cần thiết"
 
-#: sequencer.c:5802
+#: sequencer.c:5775
 msgid "the script was already rearranged."
 msgstr "văn lệnh đã sẵn được sắp đặt rồi."
 
-#: setup.c:134
+#: setup.c:135
 #, c-format
 msgid "'%s' is outside repository at '%s'"
 msgstr "“%s” ngoài một kho chứa tại “%s”"
 
-#: setup.c:186
+#: setup.c:187
 #, c-format
 msgid ""
 "%s: no such path in the working tree.\n"
@@ -8561,7 +8779,7 @@ msgstr ""
 "Dùng “git <lệnh> -- <đường/dẫn>…” để chỉ định đường dẫn mà nó không tồn tại "
 "một cách nội bộ."
 
-#: setup.c:199
+#: setup.c:200
 #, c-format
 msgid ""
 "ambiguous argument '%s': unknown revision or path not in the working tree.\n"
@@ -8573,12 +8791,12 @@ msgstr ""
 "Dùng “--” để ngăn cách các đường dẫn khỏi điểm xem xét, như thế này:\n"
 "“git <lệnh> [<điểm xem xét>…] -- [<tập tin>…]”"
 
-#: setup.c:265
+#: setup.c:266
 #, c-format
 msgid "option '%s' must come before non-option arguments"
 msgstr "tùy chọn “%s” phải trước các đối số đầu tiên không có tùy chọn"
 
-#: setup.c:284
+#: setup.c:285
 #, c-format
 msgid ""
 "ambiguous argument '%s': both revision and filename\n"
@@ -8589,98 +8807,98 @@ msgstr ""
 "Dùng “--” để ngăn cách các đường dẫn khỏi điểm xem xét, như thế này:\n"
 "“git <lệnh> [<điểm xem xét>…] -- [<tập tin>…]”"
 
-#: setup.c:420
+#: setup.c:421
 msgid "unable to set up work tree using invalid config"
 msgstr "không thể cài đặt thư mục làm việc sử dụng cấu hình không hợp lệ"
 
-#: setup.c:424 builtin/rev-parse.c:895
+#: setup.c:425 builtin/rev-parse.c:895
 msgid "this operation must be run in a work tree"
 msgstr "thao tác này phải được thực hiện trong thư mục làm việc"
 
-#: setup.c:722
+#: setup.c:724
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr "Cần phiên bản kho git <= %d, nhưng lại nhận được %d"
 
-#: setup.c:730
+#: setup.c:732
 msgid "unknown repository extension found:"
 msgid_plural "unknown repository extensions found:"
 msgstr[0] "tìm thấy phần mở rộng kho chưa biết:"
 
-#: setup.c:744
+#: setup.c:746
 msgid "repo version is 0, but v1-only extension found:"
 msgid_plural "repo version is 0, but v1-only extensions found:"
 msgstr[0] "phiên bản kho là 0, nhưng lại tìm thấy phần mở rộng chỉ v1:"
 
-#: setup.c:765
+#: setup.c:767
 #, c-format
 msgid "error opening '%s'"
 msgstr "gặp lỗi khi mở “%s”"
 
-#: setup.c:767
+#: setup.c:769
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr "tập tin .git là quá lớn: “%s”"
 
-#: setup.c:769
+#: setup.c:771
 #, c-format
 msgid "error reading %s"
 msgstr "gặp lỗi khi đọc %s"
 
-#: setup.c:771
+#: setup.c:773
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr "định dạng tập tin git không hợp lệ: %s"
 
-#: setup.c:773
+#: setup.c:775
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr "không có đường dẫn trong tập tin git: %s"
 
-#: setup.c:775
+#: setup.c:777
 #, c-format
 msgid "not a git repository: %s"
 msgstr "không phải là kho git: %s"
 
-#: setup.c:877
+#: setup.c:879
 #, c-format
 msgid "'$%s' too big"
 msgstr "“$%s” quá lớn"
 
-#: setup.c:891
+#: setup.c:893
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr "không phải là kho git: “%s”"
 
-#: setup.c:920 setup.c:922 setup.c:953
+#: setup.c:922 setup.c:924 setup.c:955
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr "không thể chdir (chuyển đổi thư mục) sang “%s”"
 
-#: setup.c:925 setup.c:981 setup.c:991 setup.c:1030 setup.c:1038
+#: setup.c:927 setup.c:983 setup.c:993 setup.c:1032 setup.c:1040
 msgid "cannot come back to cwd"
 msgstr "không thể quay lại cwd"
 
-#: setup.c:1052
+#: setup.c:1054
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr "gặp lỗi khi lấy thống kê về “%*s%s%s”"
 
-#: setup.c:1295
+#: setup.c:1338
 msgid "Unable to read current working directory"
 msgstr "Không thể đọc thư mục làm việc hiện hành"
 
-#: setup.c:1304 setup.c:1310
+#: setup.c:1347 setup.c:1353
 #, c-format
 msgid "cannot change to '%s'"
 msgstr "không thể chuyển sang “%s”"
 
-#: setup.c:1315
+#: setup.c:1358
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
 msgstr "không phải là kho git (hoặc bất kỳ thư mục cha mẹ nào): %s"
 
-#: setup.c:1321
+#: setup.c:1364
 #, c-format
 msgid ""
 "not a git repository (or any parent up to mount point %s)\n"
@@ -8690,7 +8908,20 @@ msgstr ""
 "Dừng tại biên của hệ thống tập tin (GIT_DISCOVERY_ACROSS_FILESYSTEM chưa "
 "đặt)."
 
-#: setup.c:1446
+#: setup.c:1374
+#, c-format
+msgid ""
+"unsafe repository ('%s' is owned by someone else)\n"
+"To add an exception for this directory, call:\n"
+"\n"
+"\tgit config --global --add safe.directory %s"
+msgstr ""
+"kho lưu trữ không an toàn ('%s' thuộc sở hữu của người khác)\n"
+"Để thêm ngoại lệ cho thư mục này, hãy gọi:\n"
+"\n"
+"\tgit config --global --add safe.directory %s"
+
+#: setup.c:1502
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -8699,142 +8930,146 @@ msgstr ""
 "gặp vấn đề với giá trị chế độ tập tin core.sharedRepository (0%.3o).\n"
 "người sở hữu tập tin phải luôn có quyền đọc và ghi."
 
-#: setup.c:1508
+#: setup.c:1564
 msgid "fork failed"
 msgstr "gặp lỗi khi rẽ nhánh tiến trình"
 
-#: setup.c:1513
+#: setup.c:1569
 msgid "setsid failed"
 msgstr "setsid gặp lỗi"
 
-#: sparse-index.c:289
+#: sparse-index.c:285
 #, c-format
 msgid "index entry is a directory, but not sparse (%08x)"
 msgstr "mục tin mục lục là một thư mục, nhưng không \"sparse\" (%08x)"
 
+#: split-index.c:9
+msgid "cannot use split index with a sparse index"
+msgstr "không thể sử dụng bảng mục lục chia tách với một \"sparse index\""
+
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:850
+#: strbuf.c:851
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:852
+#: strbuf.c:853
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u GiB/giây"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:860
+#: strbuf.c:861
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:862
+#: strbuf.c:863
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u MiB/giây"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:869
+#: strbuf.c:870
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:871
+#: strbuf.c:872
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u KiB/giây"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:877
+#: strbuf.c:878
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
 msgstr[0] "%u byte"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:879
+#: strbuf.c:880
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
 msgstr[0] "%u byte/giây"
 
-#: strbuf.c:1186 wrapper.c:207 wrapper.c:377 builtin/am.c:765
-#: builtin/rebase.c:650
+#: strbuf.c:1187 wrapper.c:217 wrapper.c:387 builtin/am.c:766
+#: builtin/rebase.c:653
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "không thể mở “%s” để ghi"
 
-#: strbuf.c:1195
+#: strbuf.c:1196
 #, c-format
 msgid "could not edit '%s'"
 msgstr "không thể sửa “%s”"
 
-#: submodule-config.c:237
+#: submodule-config.c:238
 #, c-format
 msgid "ignoring suspicious submodule name: %s"
 msgstr "đang lờ đi tên mô-đun-con mập mờ: %s"
 
-#: submodule-config.c:304
+#: submodule-config.c:305
 msgid "negative values not allowed for submodule.fetchjobs"
 msgstr "không cho phép giá trị âm ở submodule.fetchjobs"
 
-#: submodule-config.c:402
+#: submodule-config.c:403
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr ""
 "đang bỏ qua “%s” cái mà có thể được phiên dịch như là một tùy chọn dòng "
 "lệnh: %s"
 
-#: submodule-config.c:499
+#: submodule-config.c:500 builtin/push.c:489 builtin/send-pack.c:148
 #, c-format
-msgid "invalid value for %s"
-msgstr "giá trị cho %s không hợp lệ"
+msgid "invalid value for '%s'"
+msgstr "giá trị cho '%s' không hợp lệ"
 
-#: submodule-config.c:767
+#: submodule-config.c:828
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr "Không thể cập nhật mục .gitmodules %s"
 
-#: submodule.c:114 submodule.c:143
+#: submodule.c:115 submodule.c:144
 msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
 msgstr ""
 "Không thể thay đổi .gitmodules chưa hòa trộn, hãy giải quyết xung đột trộn "
 "trước"
 
-#: submodule.c:118 submodule.c:147
+#: submodule.c:119 submodule.c:148
 #, c-format
 msgid "Could not find section in .gitmodules where path=%s"
 msgstr "Không thể tìm thấy phần trong .gitmodules nơi mà đường_dẫn=%s"
 
-#: submodule.c:154
+#: submodule.c:155
 #, c-format
 msgid "Could not remove .gitmodules entry for %s"
 msgstr "Không thể gỡ bỏ mục .gitmodules dành cho %s"
 
-#: submodule.c:165
+#: submodule.c:166
 msgid "staging updated .gitmodules failed"
 msgstr "gặp lỗi khi tổ chức .gitmodules đã cập nhật"
 
-#: submodule.c:358
+#: submodule.c:346
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "trong mô-đun-con không có gì “%s”"
 
-#: submodule.c:389
+#: submodule.c:377
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "Đặc tả đường dẫn “%s” thì ở trong mô-đun-con “%.*s”"
 
-#: submodule.c:466
+#: submodule.c:454
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "đối số --ignore-submodules sai: %s"
 
-#: submodule.c:844
+#: submodule.c:866
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
@@ -8843,13 +9078,13 @@ msgstr ""
 "Mô-đun-con trong lần chuyển giao %s tại đường dẫn: “%s” va chạm với mô-đun-"
 "con cùng tên. Nên bỏ qua nó."
 
-#: submodule.c:954
+#: submodule.c:987
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr ""
 "mục tin mô-đun-con “%s” (%s) là một %s, không phải là một lần chuyển giao"
 
-#: submodule.c:1042
+#: submodule.c:1069
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
@@ -8858,36 +9093,46 @@ msgstr ""
 "Không thể chạy lệnh “git rev-list <các lần chuyển giao> --not --remotes -n "
 "1” trong mô-đun-con “%s”"
 
-#: submodule.c:1165
+#: submodule.c:1192
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "xử lý cho mô-đun-con “%s” gặp lỗi"
 
-#: submodule.c:1194 builtin/branch.c:699 builtin/submodule--helper.c:2714
+#: submodule.c:1221 builtin/branch.c:714 builtin/submodule--helper.c:2827
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "Gặp lỗi khi phân giải HEAD như là một tham chiếu hợp lệ."
 
-#: submodule.c:1205
+#: submodule.c:1232
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "Đẩy lên mô-đun-con “%s”\n"
 
-#: submodule.c:1208
+#: submodule.c:1235
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "Không thể đẩy lên mô-đun-con “%s”\n"
 
-#: submodule.c:1491
+#: submodule.c:1567
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "Đang lấy về mô-đun-con %s%s\n"
 
-#: submodule.c:1525
+#: submodule.c:1589
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "Không thể truy cập mô-đun-con “%s”\n"
 
-#: submodule.c:1680
+#: submodule.c:1618
+#, c-format
+msgid "Could not access submodule '%s' at commit %s\n"
+msgstr "Không thể truy cập mô-đun-con “%s” ở lần chuyển giao %s\n"
+
+#: submodule.c:1629
+#, c-format
+msgid "Fetching submodule %s%s at commit %s\n"
+msgstr "Đang lấy về mô-đun-con %s%s tại lần chuyển giao %s\n"
+
+#: submodule.c:1849
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -8896,61 +9141,61 @@ msgstr ""
 "Có lỗi khi lấy về mô-đun-con:\n"
 " “%s”"
 
-#: submodule.c:1705
+#: submodule.c:1874
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "không nhận ra “%s” là một kho git"
 
-#: submodule.c:1722
+#: submodule.c:1891
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr "Không thể chạy “git status --porcelain=2” trong mô-đun-con “%s”"
 
-#: submodule.c:1763
+#: submodule.c:1932
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr "“git status --porcelain=2” gặp lỗi trong mô-đun-con “%s”"
 
-#: submodule.c:1838
+#: submodule.c:2007
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "không thể lấy thống kê “git status” trong mô-đun-con “%s”"
 
-#: submodule.c:1851
+#: submodule.c:2020
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "không thể chạy “git status” trong mô-đun-con “%s”"
 
-#: submodule.c:1868
+#: submodule.c:2037
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr "Không thể đặt core.worktree trong mô-đun-con “%s”"
 
-#: submodule.c:1895 submodule.c:2210
+#: submodule.c:2064 submodule.c:2379
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr "không thể đệ quy vào trong mô-đun-con “%s”"
 
-#: submodule.c:1917
+#: submodule.c:2086
 msgid "could not reset submodule index"
 msgstr "không thể đặt lại mục lục của mô-đun-con"
 
-#: submodule.c:1959
+#: submodule.c:2128
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "mô-đun-con “%s” có mục lục còn bẩn"
 
-#: submodule.c:2013
+#: submodule.c:2182
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "Mô-đun-con “%s” không thể được cập nhật."
 
-#: submodule.c:2081
+#: submodule.c:2250
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr "thư mục git mô đun con “%s” là bên trong git DIR “%.*s”"
 
-#: submodule.c:2102
+#: submodule.c:2271
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -8958,17 +9203,17 @@ msgstr ""
 "relocate_gitdir cho mô-đun-con “%s” với nhiều hơn một cây làm việc là chưa "
 "được hỗ trợ"
 
-#: submodule.c:2114 submodule.c:2174
+#: submodule.c:2283 submodule.c:2343
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "không thể tìm kiếm tên cho mô-đun-con “%s”"
 
-#: submodule.c:2118
+#: submodule.c:2287
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr "từ chối di chuyển “%s” vào trong một thư mục git sẵn có"
 
-#: submodule.c:2124
+#: submodule.c:2293
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -8979,11 +9224,11 @@ msgstr ""
 "“%s” sang\n"
 "“%s”\n"
 
-#: submodule.c:2255
+#: submodule.c:2424
 msgid "could not start ls-files in .."
 msgstr "không thể lấy thông tin thống kê về ls-files trong .."
 
-#: submodule.c:2295
+#: submodule.c:2464
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree trả về mã không như mong đợi %d"
@@ -9004,8 +9249,8 @@ msgstr "chạy lệnh kéo theo “%s” gặp lỗi"
 msgid "unknown value '%s' for key '%s'"
 msgstr "không hiểu giá trị “%s” cho khóa “%s”"
 
-#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
-#: builtin/remote.c:327
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:300
+#: builtin/remote.c:328
 #, c-format
 msgid "more than one %s"
 msgstr "nhiều hơn một %s"
@@ -9020,11 +9265,11 @@ msgstr "thẻ thừa trống rỗng trong phần thừa “%.*s”"
 msgid "could not read input file '%s'"
 msgstr "không đọc được tập tin đầu vào “%s”"
 
-#: trailer.c:766 builtin/mktag.c:89 imap-send.c:1573
+#: trailer.c:766 builtin/mktag.c:88 imap-send.c:1563
 msgid "could not read from stdin"
 msgstr "không thể đọc từ đầu vào tiêu chuẩn"
 
-#: trailer.c:1024 wrapper.c:684
+#: trailer.c:1024 wrapper.c:760
 #, c-format
 msgid "could not stat %s"
 msgstr "không thể lấy thông tin thống kê về %s"
@@ -9092,7 +9337,7 @@ msgstr "không thể chạy fast-import"
 msgid "error while running fast-import"
 msgstr "gặp lỗi trong khi chạy fast-import"
 
-#: transport-helper.c:549 transport-helper.c:1251
+#: transport-helper.c:549 transport-helper.c:1254
 #, c-format
 msgid "could not read ref %s"
 msgstr "không thể đọc tham chiếu %s"
@@ -9110,7 +9355,7 @@ msgstr "giao thức này không hỗ trợ cài đặt đường dẫn dịch v
 msgid "invalid remote service path"
 msgstr "đường dẫn dịch vụ máy chủ không hợp lệ"
 
-#: transport-helper.c:661 transport.c:1479
+#: transport-helper.c:661 transport.c:1496
 msgid "operation not supported by protocol"
 msgstr "thao tác không được gia thức hỗ trợ"
 
@@ -9119,72 +9364,72 @@ msgstr "thao tác không được gia thức hỗ trợ"
 msgid "can't connect to subservice %s"
 msgstr "không thể kết nối đến dịch vụ phụ %s"
 
-#: transport-helper.c:693 transport.c:404
+#: transport-helper.c:693 transport.c:415
 msgid "--negotiate-only requires protocol v2"
 msgstr "--negotiate-only cần giao thức v2"
 
-#: transport-helper.c:755
+#: transport-helper.c:758
 msgid "'option' without a matching 'ok/error' directive"
 msgstr "“option” không có chỉ thị “ok/error” tương ứng"
 
-#: transport-helper.c:798
+#: transport-helper.c:801
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "cần ok/error, nhưng bộ hỗ trợ lại nói “%s”"
 
-#: transport-helper.c:859
+#: transport-helper.c:862
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "bộ hỗ trợ báo cáo rằng không cần tình trạng của %s"
 
-#: transport-helper.c:942
+#: transport-helper.c:945
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "helper %s không hỗ trợ dry-run"
 
-#: transport-helper.c:945
+#: transport-helper.c:948
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "helper %s không hỗ trợ --signed"
 
-#: transport-helper.c:948
+#: transport-helper.c:951
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "helper %s không hỗ trợ --signed=if-asked"
 
-#: transport-helper.c:953
+#: transport-helper.c:956
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr "helper %s không hỗ trợ --atomic"
 
-#: transport-helper.c:957
+#: transport-helper.c:960
 #, c-format
 msgid "helper %s does not support --%s"
 msgstr "helper %s không hỗ trợ --%s"
 
-#: transport-helper.c:964
+#: transport-helper.c:967
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "helper %s không hỗ trợ “push-option”"
 
-#: transport-helper.c:1064
+#: transport-helper.c:1067
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr "remote-helper không hỗ trợ push; cần đặc tả tham chiếu"
 
-#: transport-helper.c:1069
+#: transport-helper.c:1072
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "helper %s không hỗ trợ “force”"
 
-#: transport-helper.c:1116
+#: transport-helper.c:1119
 msgid "couldn't run fast-export"
 msgstr "không thể chạy fast-export"
 
-#: transport-helper.c:1121
+#: transport-helper.c:1124
 msgid "error while running fast-export"
 msgstr "gặp lỗi trong khi chạy fast-export"
 
-#: transport-helper.c:1146
+#: transport-helper.c:1149
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -9194,52 +9439,52 @@ msgstr ""
 "cả.\n"
 "Tuy nhiên bạn nên chỉ định một nhánh.\n"
 
-#: transport-helper.c:1228
+#: transport-helper.c:1231
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr "không hỗ trợ định dạng đối tượng “%s”"
 
-#: transport-helper.c:1237
+#: transport-helper.c:1240
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "đáp ứng sai dạng trong danh sách tham chiếu: %s"
 
-#: transport-helper.c:1389
+#: transport-helper.c:1392
 #, c-format
 msgid "read(%s) failed"
 msgstr "read(%s) gặp lỗi"
 
-#: transport-helper.c:1416
+#: transport-helper.c:1419
 #, c-format
 msgid "write(%s) failed"
 msgstr "write(%s) gặp lỗi"
 
-#: transport-helper.c:1465
+#: transport-helper.c:1468
 #, c-format
 msgid "%s thread failed"
 msgstr "tuyến trình %s gặp lỗi"
 
-#: transport-helper.c:1469
+#: transport-helper.c:1472
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "tuyến trình %s gặp lỗi khi gia nhập: %s"
 
-#: transport-helper.c:1488 transport-helper.c:1492
+#: transport-helper.c:1491 transport-helper.c:1495
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "không thể khởi chạy tuyến trình để sao chép dữ liệu: %s"
 
-#: transport-helper.c:1529
+#: transport-helper.c:1532
 #, c-format
 msgid "%s process failed to wait"
 msgstr "xử lý %s gặp lỗi khi đợi"
 
-#: transport-helper.c:1533
+#: transport-helper.c:1536
 #, c-format
 msgid "%s process failed"
 msgstr "xử lý %s gặp lỗi"
 
-#: transport-helper.c:1551 transport-helper.c:1560
+#: transport-helper.c:1554 transport-helper.c:1563
 msgid "can't start thread for copying data"
 msgstr "không thể khởi chạy tuyến trình cho việc chép dữ liệu"
 
@@ -9248,51 +9493,51 @@ msgstr "không thể khởi chạy tuyến trình cho việc chép dữ liệu"
 msgid "Would set upstream of '%s' to '%s' of '%s'\n"
 msgstr "Không thể đặt thượng nguồn của “%s” thành “%s” của “%s”\n"
 
-#: transport.c:145
+#: transport.c:138
 #, c-format
 msgid "could not read bundle '%s'"
 msgstr "không thể đọc bó “%s”"
 
-#: transport.c:227
+#: transport.c:234
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr "vận chuyển: tùy chọn độ sâu “%s” không hợp lệ"
 
-#: transport.c:279
+#: transport.c:289
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "xem protocol.version trong “git help config” để có thêm thông tin"
 
-#: transport.c:280
+#: transport.c:290
 msgid "server options require protocol version 2 or later"
 msgstr "các tùy chọn máy chủ yêu cầu giao thức phiên bản 2 hoặc mới hơn"
 
-#: transport.c:407
+#: transport.c:418
 msgid "server does not support wait-for-done"
 msgstr "máy chủ không hỗ trợ wait-for-done"
 
-#: transport.c:759
+#: transport.c:770
 msgid "could not parse transport.color.* config"
 msgstr "không thể phân tích cú pháp cấu hình transport.color.*"
 
-#: transport.c:834
+#: transport.c:845
 msgid "support for protocol v2 not implemented yet"
 msgstr "việc hỗ trợ giao thức v2 chưa được thực hiện"
 
-#: transport.c:967
+#: transport.c:978
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "không hiểu giá trị cho cho cấu hình “%s”: %s"
 
-#: transport.c:1033
+#: transport.c:1044
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "không cho phép phương thức vận chuyển “%s”"
 
-#: transport.c:1082
+#: transport.c:1093
 msgid "git-over-rsync is no longer supported"
 msgstr "git-over-rsync không còn được hỗ trợ nữa"
 
-#: transport.c:1185
+#: transport.c:1196
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
@@ -9301,7 +9546,7 @@ msgstr ""
 "Các đường dẫn mô-đun-con sau đây có chứa các thay đổi cái mà\n"
 "có thể được tìm thấy trên mọi máy phục vụ:\n"
 
-#: transport.c:1189
+#: transport.c:1200
 #, c-format
 msgid ""
 "\n"
@@ -9328,11 +9573,11 @@ msgstr ""
 "để đẩy chúng lên máy phục vụ.\n"
 "\n"
 
-#: transport.c:1197
+#: transport.c:1208
 msgid "Aborting."
 msgstr "Bãi bỏ."
 
-#: transport.c:1343
+#: transport.c:1354
 msgid "failed to push all needed submodules"
 msgstr "gặp lỗi khi đẩy dữ liệu của tất cả các mô-đun-con cần thiết"
 
@@ -9627,17 +9872,17 @@ msgstr ""
 "HOA/thường trên một hệ thống tập tin không phân biệt HOA/thường)\n"
 "và chỉ một từ cùng một nhóm xung đột là trong cây làm việc hiện tại:\n"
 
-#: unpack-trees.c:1636
+#: unpack-trees.c:1664
 msgid "Updating index flags"
 msgstr "Đang cập nhật các cờ mục lục"
 
-#: unpack-trees.c:2803
+#: unpack-trees.c:2925
 #, c-format
 msgid "worktree and untracked commit have duplicate entries: %s"
 msgstr ""
 "cây làm việc và lần chuyển giao không được theo dõi có các mục trùng lặp: %s"
 
-#: upload-pack.c:1565
+#: upload-pack.c:1579
 msgid "expected flush after fetch arguments"
 msgstr "cần đẩy dữ liệu lên đĩa sau các tham số của lệnh fetch"
 
@@ -9674,124 +9919,138 @@ msgstr "đoạn đường dẫn “..” không hợp lệ"
 msgid "Fetching objects"
 msgstr "Đang lấy về các đối tượng"
 
-#: worktree.c:238 builtin/am.c:2209 builtin/bisect--helper.c:156
+#: worktree.c:237 builtin/am.c:2210 builtin/bisect--helper.c:156
 #, c-format
 msgid "failed to read '%s'"
 msgstr "gặp lỗi khi đọc “%s”"
 
-#: worktree.c:305
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr "“%s” tại cây làm việc chình không phải là thư mục kho"
 
-#: worktree.c:316
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr ""
 "tập tin “%s” không chứa đường dẫn tuyệt đối đến vị trí cây làm việc hiện"
 
-#: worktree.c:328
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr "\"%s\" không tồn tại"
 
-#: worktree.c:334
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr "“%s” không phải là tập tin .git, mã lỗi %d"
 
-#: worktree.c:343
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "“%s” không chỉ ngược đến “%s”"
 
-#: worktree.c:604
+#: worktree.c:600
 msgid "not a directory"
 msgstr "không phải thư mục"
 
-#: worktree.c:613
+#: worktree.c:609
 msgid ".git is not a file"
 msgstr ".git không phải là một tập tin"
 
-#: worktree.c:615
+#: worktree.c:611
 msgid ".git file broken"
 msgstr "tệp .git bị hỏng"
 
-#: worktree.c:617
+#: worktree.c:613
 msgid ".git file incorrect"
 msgstr "tập tin .git không chính xác"
 
-#: worktree.c:723
+#: worktree.c:719
 msgid "not a valid path"
 msgstr "không phải là một đường dẫn hợp lệ"
 
-#: worktree.c:729
+#: worktree.c:725
 msgid "unable to locate repository; .git is not a file"
 msgstr "không thể phân bổ kho chứa; .git không phải là một tập tin"
 
-#: worktree.c:733
+#: worktree.c:729
 msgid "unable to locate repository; .git file does not reference a repository"
 msgstr "không thể phân bổ kho chứa; tập tin .git tham chiếu đến một kho"
 
-#: worktree.c:737
+#: worktree.c:733
 msgid "unable to locate repository; .git file broken"
 msgstr "không thể phân bổ kho chứa; tập tin .git bị hỏng"
 
-#: worktree.c:743
+#: worktree.c:739
 msgid "gitdir unreadable"
 msgstr "gitdir không thể đọc được"
 
-#: worktree.c:747
+#: worktree.c:743
 msgid "gitdir incorrect"
 msgstr "gitdir không chính xác"
 
-#: worktree.c:772
+#: worktree.c:768
 msgid "not a valid directory"
 msgstr "không phải thư mục hợp lệ"
 
-#: worktree.c:778
+#: worktree.c:774
 msgid "gitdir file does not exist"
 msgstr "tập tin gitdir không tồn tại"
 
-#: worktree.c:783 worktree.c:792
+#: worktree.c:779 worktree.c:788
 #, c-format
 msgid "unable to read gitdir file (%s)"
 msgstr "không thể đọc tập tin gitdir (%s)"
 
-#: worktree.c:802
+#: worktree.c:798
 #, c-format
 msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
 msgstr "đọc ngắn (cần %<PRIuMAX> byte, đọc %<PRIuMAX>)"
 
-#: worktree.c:810
+#: worktree.c:806
 msgid "invalid gitdir file"
 msgstr "tập tin gitdir (thư mục git) không hợp lệ"
 
-#: worktree.c:818
+#: worktree.c:814
 msgid "gitdir file points to non-existent location"
 msgstr "tập tin gitdir chỉ đến vị trí không tồn tại"
 
-#: wrapper.c:151
+#: worktree.c:830
+#, c-format
+msgid "unable to set %s in '%s'"
+msgstr "không thể đặt %s trong “%s”"
+
+#: worktree.c:832
+#, c-format
+msgid "unable to unset %s in '%s'"
+msgstr "không thể bỏ đặt %s trong '%s'"
+
+#: worktree.c:852
+msgid "failed to set extensions.worktreeConfig setting"
+msgstr "gặp lỗi khi đặt cài đặt extensions.worktreeConfig"
+
+#: wrapper.c:161
 #, c-format
 msgid "could not setenv '%s'"
 msgstr "không thể setenv “%s”"
 
-#: wrapper.c:203
+#: wrapper.c:213
 #, c-format
 msgid "unable to create '%s'"
 msgstr "không thể tạo “%s”"
 
-#: wrapper.c:205 wrapper.c:375
+#: wrapper.c:215 wrapper.c:385
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr "không thể mở “%s” để đọc và ghi"
 
-#: wrapper.c:406 wrapper.c:607
+#: wrapper.c:416 wrapper.c:683
 #, c-format
 msgid "unable to access '%s'"
 msgstr "không thể truy cập “%s”"
 
-#: wrapper.c:615
+#: wrapper.c:691
 msgid "unable to get current working directory"
 msgstr "không thể lấy thư mục làm việc hiện hành"
 
@@ -9828,11 +10087,11 @@ msgstr ""
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr "  (dùng \"git rm <tập-tin>…\" để đánh dấu là cần giải quyết)"
 
-#: wt-status.c:211 wt-status.c:1131
+#: wt-status.c:211 wt-status.c:1140
 msgid "Changes to be committed:"
 msgstr "Những thay đổi sẽ được chuyển giao:"
 
-#: wt-status.c:234 wt-status.c:1140
+#: wt-status.c:234 wt-status.c:1149
 msgid "Changes not staged for commit:"
 msgstr "Các thay đổi chưa được đặt lên bệ phóng để chuyển giao:"
 
@@ -9936,21 +10195,21 @@ msgstr "nội dung bị sửa đổi, "
 msgid "untracked content, "
 msgstr "nội dung chưa được theo dõi, "
 
-#: wt-status.c:964
+#: wt-status.c:973
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] "Bạn hiện nay ở trong phần cất đi đang có %d mục"
 
-#: wt-status.c:995
+#: wt-status.c:1004
 msgid "Submodules changed but not updated:"
 msgstr "Những mô-đun-con đã bị thay đổi nhưng chưa được cập nhật:"
 
-#: wt-status.c:997
+#: wt-status.c:1006
 msgid "Submodule changes to be committed:"
 msgstr "Những mô-đun-con thay đổi đã được chuyển giao:"
 
-#: wt-status.c:1079
+#: wt-status.c:1088
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -9958,7 +10217,7 @@ msgstr ""
 "Không sửa hay xóa bỏ đường ở trên.\n"
 "Mọi thứ phía dưới sẽ được xóa bỏ."
 
-#: wt-status.c:1171
+#: wt-status.c:1180
 #, c-format
 msgid ""
 "\n"
@@ -9969,116 +10228,116 @@ msgstr ""
 "Nó cần %.2f giây để tính toán giá trị của trước/sau của nhánh.\n"
 "Bạn có thể dùng “--no-ahead-behind” tránh phải điều này.\n"
 
-#: wt-status.c:1201
+#: wt-status.c:1210
 msgid "You have unmerged paths."
 msgstr "Bạn có những đường dẫn chưa được hòa trộn."
 
-#: wt-status.c:1204
+#: wt-status.c:1213
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (sửa các xung đột rồi chạy \"git commit\")"
 
-#: wt-status.c:1206
+#: wt-status.c:1215
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (dùng \"git merge --abort\" để bãi bỏ việc hòa trộn)"
 
-#: wt-status.c:1210
+#: wt-status.c:1219
 msgid "All conflicts fixed but you are still merging."
 msgstr "Tất cả các xung đột đã được giải quyết nhưng bạn vẫn đang hòa trộn."
 
-#: wt-status.c:1213
+#: wt-status.c:1222
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (dùng \"git commit\" để hoàn tất việc hòa trộn)"
 
-#: wt-status.c:1224
+#: wt-status.c:1233
 msgid "You are in the middle of an am session."
 msgstr "Bạn đang ở giữa của một phiên “am”."
 
-#: wt-status.c:1227
+#: wt-status.c:1236
 msgid "The current patch is empty."
 msgstr "Miếng vá hiện tại bị trống rỗng."
 
-#: wt-status.c:1232
+#: wt-status.c:1241
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (sửa các xung đột và sau đó chạy lệnh \"git am --continue\")"
 
-#: wt-status.c:1234
+#: wt-status.c:1243
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (dùng \"git am --skip\" để bỏ qua miếng vá này)"
 
-#: wt-status.c:1237
+#: wt-status.c:1246
 msgid ""
 "  (use \"git am --allow-empty\" to record this patch as an empty commit)"
 msgstr ""
 "  (dùng \"git am --allow-empty\" ghi miếng vá này như một lần chuyển giao "
 "rỗng)"
 
-#: wt-status.c:1239
+#: wt-status.c:1248
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr "  (dùng \"git am --abort\" để phục hồi lại nhánh nguyên thủy)"
 
-#: wt-status.c:1372
+#: wt-status.c:1381
 msgid "git-rebase-todo is missing."
 msgstr "thiếu git-rebase-todo."
 
-#: wt-status.c:1374
+#: wt-status.c:1383
 msgid "No commands done."
 msgstr "Không thực hiện lệnh nào."
 
-#: wt-status.c:1377
+#: wt-status.c:1386
 #, c-format
-msgid "Last command done (%d command done):"
-msgid_plural "Last commands done (%d commands done):"
-msgstr[0] "Lệnh thực hiện cuối (%d lệnh được thực thi):"
+msgid "Last command done (%<PRIuMAX> command done):"
+msgid_plural "Last commands done (%<PRIuMAX> commands done):"
+msgstr[0] "Lệnh thực hiện cuối (%<PRIuMAX> lệnh được thực thi):"
 
-#: wt-status.c:1388
+#: wt-status.c:1397
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (xem thêm trong %s)"
 
-#: wt-status.c:1393
+#: wt-status.c:1402
 msgid "No commands remaining."
 msgstr "Không có lệnh nào còn lại."
 
-#: wt-status.c:1396
+#: wt-status.c:1405
 #, c-format
-msgid "Next command to do (%d remaining command):"
-msgid_plural "Next commands to do (%d remaining commands):"
-msgstr[0] "Lệnh cần làm kế tiếp (%d lệnh còn lại):"
+msgid "Next command to do (%<PRIuMAX> remaining command):"
+msgid_plural "Next commands to do (%<PRIuMAX> remaining commands):"
+msgstr[0] "Lệnh cần làm kế tiếp (%<PRIuMAX> lệnh còn lại):"
 
-#: wt-status.c:1404
+#: wt-status.c:1413
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr "  (dùng lệnh \"git rebase --edit-todo\" để xem và sửa)"
 
-#: wt-status.c:1416
+#: wt-status.c:1425
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "Bạn hiện nay đang thực hiện việc “rebase” nhánh “%s” trên “%s”."
 
-#: wt-status.c:1421
+#: wt-status.c:1430
 msgid "You are currently rebasing."
 msgstr "Bạn hiện nay đang thực hiện việc “rebase” (cải tổ)."
 
-#: wt-status.c:1434
+#: wt-status.c:1443
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr ""
 "  (sửa các xung đột và sau đó chạy lệnh “cải tổ” \"git rebase --continue\")"
 
-#: wt-status.c:1436
+#: wt-status.c:1445
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (dùng lệnh “cải tổ” \"git rebase --skip\" để bỏ qua lần vá này)"
 
-#: wt-status.c:1438
+#: wt-status.c:1447
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr ""
 "  (dùng lệnh “cải tổ” \"git rebase --abort\" để check-out nhánh nguyên thủy)"
 
-#: wt-status.c:1445
+#: wt-status.c:1454
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr ""
 "  (khi tất cả các xung đột đã sửa xong: chạy lệnh “cải tổ” \"git rebase --"
 "continue\")"
 
-#: wt-status.c:1449
+#: wt-status.c:1458
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
@@ -10086,169 +10345,169 @@ msgstr ""
 "Bạn hiện nay đang thực hiện việc chia tách một lần chuyển giao trong khi "
 "đang “rebase” nhánh “%s” trên “%s”."
 
-#: wt-status.c:1454
+#: wt-status.c:1463
 msgid "You are currently splitting a commit during a rebase."
 msgstr ""
 "Bạn hiện tại đang cắt đôi một lần chuyển giao trong khi đang thực hiện việc "
 "rebase."
 
-#: wt-status.c:1457
+#: wt-status.c:1466
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr ""
 "  (Một khi thư mục làm việc của bạn đã gọn gàng, chạy lệnh “cải tổ” \"git "
 "rebase --continue\")"
 
-#: wt-status.c:1461
+#: wt-status.c:1470
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr ""
 "Bạn hiện nay đang thực hiện việc sửa chữa một lần chuyển giao trong khi đang "
 "rebase nhánh “%s” trên “%s”."
 
-#: wt-status.c:1466
+#: wt-status.c:1475
 msgid "You are currently editing a commit during a rebase."
 msgstr "Bạn hiện đang sửa một lần chuyển giao trong khi bạn thực hiện rebase."
 
-#: wt-status.c:1469
+#: wt-status.c:1478
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr "  (dùng \"git commit --amend\" để “tu bổ” lần chuyển giao hiện tại)"
 
-#: wt-status.c:1471
+#: wt-status.c:1480
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr ""
 "  (chạy lệnh “cải tổ” \"git rebase --continue\" một khi bạn cảm thấy hài "
 "lòng về những thay đổi của mình)"
 
-#: wt-status.c:1482
+#: wt-status.c:1491
 msgid "Cherry-pick currently in progress."
 msgstr "Cherry-pick hiện tại đang được thực hiện."
 
-#: wt-status.c:1485
+#: wt-status.c:1494
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "Bạn hiện nay đang thực hiện việc cherry-pick lần chuyển giao %s."
 
-#: wt-status.c:1492
+#: wt-status.c:1501
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr ""
 "  (sửa các xung đột và sau đó chạy lệnh \"git cherry-pick --continue\")"
 
-#: wt-status.c:1495
+#: wt-status.c:1504
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (chạy lệnh \"git cherry-pick --continue\" để tiếp tục)"
 
-#: wt-status.c:1498
+#: wt-status.c:1507
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr ""
 "  (khi tất cả các xung đột đã sửa xong: chạy lệnh \"git cherry-pick --"
 "continue\")"
 
-#: wt-status.c:1500
+#: wt-status.c:1509
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr "  (dùng \"git cherry-pick --skip\" để bỏ qua miếng vá này)"
 
-#: wt-status.c:1502
+#: wt-status.c:1511
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr "  (dùng \"git cherry-pick --abort\" để hủy bỏ thao tác cherry-pick)"
 
-#: wt-status.c:1512
+#: wt-status.c:1521
 msgid "Revert currently in progress."
 msgstr "Hoàn nguyên hiện tại đang thực hiện."
 
-#: wt-status.c:1515
+#: wt-status.c:1524
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "Bạn hiện nay đang thực hiện thao tác hoàn nguyên lần chuyển giao “%s”."
 
-#: wt-status.c:1521
+#: wt-status.c:1530
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (sửa các xung đột và sau đó chạy lệnh \"git revert --continue\")"
 
-#: wt-status.c:1524
+#: wt-status.c:1533
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (chạy lệnh \"git revert --continue\" để tiếp tục)"
 
-#: wt-status.c:1527
+#: wt-status.c:1536
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr ""
 "  (khi tất cả các xung đột đã sửa xong: chạy lệnh \"git revert --continue\")"
 
-#: wt-status.c:1529
+#: wt-status.c:1538
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr "  (dùng lệnh \"git revert --skip\" để bỏ qua lần vá này)"
 
-#: wt-status.c:1531
+#: wt-status.c:1540
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (dùng \"git revert --abort\" để hủy bỏ thao tác hoàn nguyên)"
 
-#: wt-status.c:1541
+#: wt-status.c:1550
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr ""
 "Bạn hiện nay đang thực hiện thao tác di chuyển nửa bước (bisect), bắt đầu từ "
 "nhánh “%s”."
 
-#: wt-status.c:1545
+#: wt-status.c:1554
 msgid "You are currently bisecting."
 msgstr "Bạn hiện tại đang thực hiện việc bisect (di chuyển nửa bước)."
 
-#: wt-status.c:1548
+#: wt-status.c:1557
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (dùng \"git bisect reset\" để quay trở lại nhánh nguyên thủy)"
 
-#: wt-status.c:1559
+#: wt-status.c:1568
 msgid "You are in a sparse checkout."
 msgstr "Bạn đang trong lần lấy ra sparse."
 
-#: wt-status.c:1562
+#: wt-status.c:1571
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
 msgstr ""
 "Bạn đang ở trong lần lấy ra sparser %d%% của các tập tin được theo dõi hiện "
 "tại."
 
-#: wt-status.c:1806
+#: wt-status.c:1815
 msgid "On branch "
 msgstr "Trên nhánh "
 
-#: wt-status.c:1813
+#: wt-status.c:1822
 msgid "interactive rebase in progress; onto "
 msgstr "rebase ở chế độ tương tác đang được thực hiện; lên trên "
 
-#: wt-status.c:1815
+#: wt-status.c:1824
 msgid "rebase in progress; onto "
 msgstr "rebase đang được thực hiện: lên trên "
 
-#: wt-status.c:1820
+#: wt-status.c:1829
 msgid "HEAD detached at "
 msgstr "HEAD được tách rời tại "
 
-#: wt-status.c:1822
+#: wt-status.c:1831
 msgid "HEAD detached from "
 msgstr "HEAD được tách rời từ "
 
-#: wt-status.c:1825
+#: wt-status.c:1834
 msgid "Not currently on any branch."
 msgstr "Hiện tại chẳng ở nhánh nào cả."
 
-#: wt-status.c:1842
+#: wt-status.c:1851
 msgid "Initial commit"
 msgstr "Lần chuyển giao khởi tạo"
 
-#: wt-status.c:1843
+#: wt-status.c:1852
 msgid "No commits yet"
 msgstr "Vẫn chưa chuyển giao"
 
-#: wt-status.c:1857
+#: wt-status.c:1866
 msgid "Untracked files"
 msgstr "Những tập tin chưa được theo dõi"
 
-#: wt-status.c:1859
+#: wt-status.c:1868
 msgid "Ignored files"
 msgstr "Những tập tin bị lờ đi"
 
-#: wt-status.c:1863
+#: wt-status.c:1872
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -10260,32 +10519,32 @@ msgstr ""
 "có lẽ làm nó nhanh hơn, nhưng bạn phải cẩn thận đừng quên mình phải\n"
 "tự thêm các tập tin mới (xem “git help status”.."
 
-#: wt-status.c:1869
+#: wt-status.c:1878
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "Những tập tin chưa được theo dõi không được liệt kê ra %s"
 
-#: wt-status.c:1871
+#: wt-status.c:1880
 msgid " (use -u option to show untracked files)"
 msgstr " (dùng tùy chọn -u để hiển thị các tập tin chưa được theo dõi)"
 
-#: wt-status.c:1877
+#: wt-status.c:1886
 msgid "No changes"
 msgstr "Không có thay đổi nào"
 
-#: wt-status.c:1882
+#: wt-status.c:1891
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr ""
 "không có thay đổi nào được thêm vào để chuyển giao (dùng \"git add\" và/hoặc "
 "\"git commit -a\")\n"
 
-#: wt-status.c:1886
+#: wt-status.c:1895
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "không có thay đổi nào được thêm vào để chuyển giao\n"
 
-#: wt-status.c:1890
+#: wt-status.c:1899
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
@@ -10294,68 +10553,68 @@ msgstr ""
 "không có gì được thêm vào lần chuyển giao nhưng có những tập tin chưa được "
 "theo dõi hiện diện (dùng \"git add\" để đưa vào theo dõi)\n"
 
-#: wt-status.c:1894
+#: wt-status.c:1903
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr ""
 "không có gì được thêm vào lần chuyển giao nhưng có những tập tin chưa được "
 "theo dõi hiện diện\n"
 
-#: wt-status.c:1898
+#: wt-status.c:1907
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr ""
 "không có gì để chuyển giao (tạo/sao-chép các tập tin và dùng \"git add\" để "
 "đưa vào theo dõi)\n"
 
-#: wt-status.c:1902 wt-status.c:1908
+#: wt-status.c:1911 wt-status.c:1917
 #, c-format
 msgid "nothing to commit\n"
 msgstr "không có gì để chuyển giao\n"
 
-#: wt-status.c:1905
+#: wt-status.c:1914
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr ""
 "không có gì để chuyển giao (dùng -u xem các tập tin chưa được theo dõi)\n"
 
-#: wt-status.c:1910
+#: wt-status.c:1919
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "không có gì để chuyển giao, thư mục làm việc sạch sẽ\n"
 
-#: wt-status.c:2015
+#: wt-status.c:2024
 msgid "No commits yet on "
 msgstr "Vẫn không thực hiện lệnh chuyển giao nào "
 
-#: wt-status.c:2019
+#: wt-status.c:2028
 msgid "HEAD (no branch)"
 msgstr "HEAD (không nhánh)"
 
-#: wt-status.c:2050
+#: wt-status.c:2059
 msgid "different"
 msgstr "khác"
 
-#: wt-status.c:2052 wt-status.c:2060
+#: wt-status.c:2061 wt-status.c:2069
 msgid "behind "
 msgstr "đằng sau "
 
-#: wt-status.c:2055 wt-status.c:2058
+#: wt-status.c:2064 wt-status.c:2067
 msgid "ahead "
 msgstr "phía trước "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2596
+#: wt-status.c:2605
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "không thể %s: Bạn có các thay đổi chưa được đưa lên bệ phóng."
 
-#: wt-status.c:2602
+#: wt-status.c:2611
 msgid "additionally, your index contains uncommitted changes."
 msgstr ""
 "thêm vào đó, bảng mục lục của bạn có chứa các thay đổi chưa được chuyển giao."
 
-#: wt-status.c:2604
+#: wt-status.c:2613
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr ""
@@ -10379,152 +10638,156 @@ msgstr "không thể khởi chạy accept_thread “%s”"
 msgid "could not start worker[0] for '%s'"
 msgstr "không thể khởi chạy bộ làm việc worker[0] cho “%s”"
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:347
+#: compat/precompose_utf8.c:58 builtin/clone.c:353
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "gặp lỗi khi bỏ liên kết (unlink) “%s”"
 
+#: compat/fsmonitor/fsm-listen-darwin.c:355
+msgid "Unable to create FSEventStream."
+msgstr "Không thể tạo FSEventStream."
+
+#: compat/fsmonitor/fsm-listen-darwin.c:403
+msgid "Failed to start the FSEventStream"
+msgstr "Gặp lỗi khi khởi chạy FSEventStream"
+
 #: builtin/add.c:26
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<các tùy chọn>] [--]  <pathspec>…"
 
-#: builtin/add.c:64
+#: builtin/add.c:63
 #, c-format
 msgid "cannot chmod %cx '%s'"
 msgstr "không thể chmod %cx “%s”"
 
-#: builtin/add.c:106
+#: builtin/add.c:105
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "trạng thái lệnh diff không như mong đợi %c"
 
-#: builtin/add.c:111 builtin/commit.c:298
+#: builtin/add.c:110 builtin/commit.c:299
 msgid "updating files failed"
 msgstr "cập nhật tập tin gặp lỗi"
 
-#: builtin/add.c:121
+#: builtin/add.c:120
 #, c-format
 msgid "remove '%s'\n"
 msgstr "gỡ bỏ “%s”\n"
 
-#: builtin/add.c:205
+#: builtin/add.c:204
 msgid "Unstaged changes after refreshing the index:"
 msgstr ""
 "Đưa ra khỏi bệ phóng các thay đổi sau khi làm tươi mới lại bảng mục lục:"
 
-#: builtin/add.c:313 builtin/rev-parse.c:993
+#: builtin/add.c:312 builtin/rev-parse.c:993
 msgid "Could not read the index"
 msgstr "Không thể đọc bảng mục lục"
 
-#: builtin/add.c:326
+#: builtin/add.c:325
 msgid "Could not write patch"
 msgstr "Không thể ghi ra miếng vá"
 
-#: builtin/add.c:329
+#: builtin/add.c:328
 msgid "editing patch failed"
 msgstr "gặp lỗi khi sửa miếng vá"
 
-#: builtin/add.c:332
+#: builtin/add.c:331
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "Không thể lấy thông tin thống kê về “%s”"
 
-#: builtin/add.c:334
+#: builtin/add.c:333
 msgid "Empty patch. Aborted."
 msgstr "Miếng vá trống rỗng. Nên bỏ qua."
 
-#: builtin/add.c:340
+#: builtin/add.c:339
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "Không thể áp dụng miếng vá “%s”"
 
-#: builtin/add.c:348
+#: builtin/add.c:347
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr ""
 "Các đường dẫn theo sau đây sẽ bị lờ đi bởi một trong các tập tin .gitignore "
 "của bạn:\n"
 
-#: builtin/add.c:368 builtin/clean.c:927 builtin/fetch.c:174 builtin/mv.c:124
+#: builtin/add.c:367 builtin/clean.c:927 builtin/fetch.c:175 builtin/mv.c:124
 #: builtin/prune-packed.c:14 builtin/pull.c:208 builtin/push.c:550
-#: builtin/remote.c:1429 builtin/rm.c:244 builtin/send-pack.c:194
+#: builtin/remote.c:1454 builtin/rm.c:244 builtin/send-pack.c:194
 msgid "dry run"
 msgstr "chạy thử"
 
-#: builtin/add.c:369 builtin/check-ignore.c:22 builtin/commit.c:1484
-#: builtin/count-objects.c:98 builtin/fsck.c:789 builtin/log.c:2313
+#: builtin/add.c:368 builtin/check-ignore.c:22 builtin/commit.c:1483
+#: builtin/count-objects.c:98 builtin/fsck.c:789 builtin/log.c:2338
 #: builtin/mv.c:123 builtin/read-tree.c:120
 msgid "be verbose"
 msgstr "chi tiết"
 
-#: builtin/add.c:371
+#: builtin/add.c:370
 msgid "interactive picking"
 msgstr "sửa bằng cách tương tác"
 
-#: builtin/add.c:372 builtin/checkout.c:1581 builtin/reset.c:409
+#: builtin/add.c:371 builtin/checkout.c:1599 builtin/reset.c:417
 msgid "select hunks interactively"
 msgstr "chọn “hunks” theo kiểu tương tác"
 
-#: builtin/add.c:373
+#: builtin/add.c:372
 msgid "edit current diff and apply"
 msgstr "sửa diff hiện nay và áp dụng nó"
 
-#: builtin/add.c:374
+#: builtin/add.c:373
 msgid "allow adding otherwise ignored files"
 msgstr "cho phép thêm các tập tin bị bỏ qua khác"
 
-#: builtin/add.c:375
+#: builtin/add.c:374
 msgid "update tracked files"
 msgstr "cập nhật các tập tin được theo dõi"
 
-#: builtin/add.c:376
+#: builtin/add.c:375
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr "thường hóa lại EOL của các tập tin được theo dõi (ý là -u)"
 
-#: builtin/add.c:377
+#: builtin/add.c:376
 msgid "record only the fact that the path will be added later"
 msgstr "chỉ ghi lại sự việc mà đường dẫn sẽ được thêm vào sau"
 
-#: builtin/add.c:378
+#: builtin/add.c:377
 msgid "add changes from all tracked and untracked files"
 msgstr ""
 "thêm các thay đổi từ tất cả các tập tin có cũng như không được theo dõi dấu "
 "vết"
 
-#: builtin/add.c:381
+#: builtin/add.c:380
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr ""
 "lờ đi các đường dẫn bị gỡ bỏ trong cây thư mục làm việc (giống với --no-all)"
 
-#: builtin/add.c:383
+#: builtin/add.c:382
 msgid "don't add, only refresh the index"
 msgstr "không thêm, chỉ làm tươi mới bảng mục lục"
 
-#: builtin/add.c:384
+#: builtin/add.c:383
 msgid "just skip files which cannot be added because of errors"
 msgstr "chie bỏ qua những tập tin mà nó không thể được thêm vào bởi vì gặp lỗi"
 
-#: builtin/add.c:385
+#: builtin/add.c:384
 msgid "check if - even missing - files are ignored in dry run"
 msgstr ""
 "kiểm tra xem - thậm chí thiếu - tập tin bị bỏ qua trong quá trình chạy thử"
 
-#: builtin/add.c:386 builtin/mv.c:128 builtin/rm.c:251
+#: builtin/add.c:385 builtin/mv.c:128 builtin/rm.c:251
 msgid "allow updating entries outside of the sparse-checkout cone"
 msgstr "cho phép cập nhật các mục ở ngoài “sparse-checkout cone”"
 
-#: builtin/add.c:388 builtin/update-index.c:1004
+#: builtin/add.c:387 builtin/update-index.c:1023
 msgid "override the executable bit of the listed files"
 msgstr "ghi đè lên bít thi hành của các tập tin được liệt kê"
 
-#: builtin/add.c:390
+#: builtin/add.c:389
 msgid "warn when adding an embedded repository"
 msgstr "cảnh báo khi thêm một kho nhúng"
 
-#: builtin/add.c:392
-msgid "backend for `git stash -p`"
-msgstr "ứng dụng chạy phía sau cho “git stash -p”"
-
-#: builtin/add.c:410
+#: builtin/add.c:407
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -10555,12 +10818,12 @@ msgstr ""
 "\n"
 "Xem \"git help submodule\" để biết thêm chi tiết."
 
-#: builtin/add.c:439
+#: builtin/add.c:436
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "thêm cần một kho git nhúng: %s"
 
-#: builtin/add.c:459
+#: builtin/add.c:456
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
@@ -10570,27 +10833,27 @@ msgstr ""
 "Tắt thông báo này bằng cách chạy lệnh\n"
 "\"git config advice.addIgnoredFile false\""
 
-#: builtin/add.c:474
+#: builtin/add.c:471
 msgid "adding files failed"
 msgstr "thêm tập tin gặp lỗi"
 
-#: builtin/add.c:548
+#: builtin/add.c:534
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "--chmod tham số “%s” phải hoặc là -x hay +x"
 
-#: builtin/add.c:569 builtin/checkout.c:1751 builtin/commit.c:364
-#: builtin/reset.c:429 builtin/rm.c:275 builtin/stash.c:1713
+#: builtin/add.c:555 builtin/checkout.c:1770 builtin/commit.c:365
+#: builtin/reset.c:436 builtin/rm.c:275 builtin/stash.c:1702
 #, c-format
 msgid "'%s' and pathspec arguments cannot be used together"
 msgstr "'%s' và các tham số đặc tả đường dẫn không thể dùng cùng nhau"
 
-#: builtin/add.c:580
+#: builtin/add.c:566
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "Không có gì được chỉ ra, không có gì được thêm vào.\n"
 
-#: builtin/add.c:582
+#: builtin/add.c:568
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
@@ -10600,117 +10863,112 @@ msgstr ""
 "Tắt thông báo này bằng cách chạy lệnh\n"
 "\"git config advice.addEmptyPathspec false\""
 
-#: builtin/am.c:202
-#, c-format
-msgid "Invalid value for --empty: %s"
-msgstr "Giá trị cho --empty không hợp lệ: %s"
-
-#: builtin/am.c:392
+#: builtin/am.c:393
 msgid "could not parse author script"
 msgstr "không thể phân tích cú pháp văn lệnh tác giả"
 
-#: builtin/am.c:482
+#: builtin/am.c:483
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "“%s” bị xóa bởi móc applypatch-msg"
 
-#: builtin/am.c:524
+#: builtin/am.c:525
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "Dòng đầu vào dị hình: “%s”."
 
-#: builtin/am.c:562
+#: builtin/am.c:563
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "Gặp lỗi khi sao chép ghi chú (note) từ “%s” tới “%s”"
 
-#: builtin/am.c:588
+#: builtin/am.c:589
 msgid "fseek failed"
 msgstr "fseek gặp lỗi"
 
-#: builtin/am.c:776
+#: builtin/am.c:777
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "không thể phân tích cú pháp “%s”"
 
-#: builtin/am.c:841
+#: builtin/am.c:842
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "Chỉ có một sê-ri miếng vá StGIT được áp dụng một lúc"
 
-#: builtin/am.c:889
+#: builtin/am.c:890
 msgid "invalid timestamp"
 msgstr "dấu thời gian không hợp lệ"
 
-#: builtin/am.c:894 builtin/am.c:906
+#: builtin/am.c:895 builtin/am.c:907
 msgid "invalid Date line"
 msgstr "dòng Ngày tháng không hợp lệ"
 
-#: builtin/am.c:901
+#: builtin/am.c:902
 msgid "invalid timezone offset"
 msgstr "độ lệch múi giờ không hợp lệ"
 
-#: builtin/am.c:994
+#: builtin/am.c:995
 msgid "Patch format detection failed."
 msgstr "Dò tìm định dạng miếng vá gặp lỗi."
 
-#: builtin/am.c:999 builtin/clone.c:300
+#: builtin/am.c:1000 builtin/clone.c:306
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "tạo thư mục \"%s\" gặp lỗi"
 
-#: builtin/am.c:1004
+#: builtin/am.c:1005
 msgid "Failed to split patches."
 msgstr "Gặp lỗi khi chia nhỏ các miếng vá."
 
-#: builtin/am.c:1153
+#: builtin/am.c:1154
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "Khi bạn đã giải quyết xong trục trặc này, hãy chạy \"%s --continue\"."
 
-#: builtin/am.c:1154
+#: builtin/am.c:1155
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr ""
 "Nếu bạn muốn bỏ qua miếng vá này, hãy chạy lệnh \"%s --skip\" để thay thế."
 
-#: builtin/am.c:1159
+#: builtin/am.c:1160
 #, c-format
 msgid "To record the empty patch as an empty commit, run \"%s --allow-empty\"."
 msgstr ""
 "Để ghi một miếng vá trống rỗng như một lần chuyển giao rông, \"%s --allow-"
 "empty\"."
 
-#: builtin/am.c:1161
+#: builtin/am.c:1162
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr "Để phục hồi lại nhánh gốc và dừng vá, hãy chạy \"%s --abort\"."
 
-#: builtin/am.c:1256
+#: builtin/am.c:1257
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr ""
 "Miếng vá được gửi với format=flowed; khoảng trống ở cuối của các dòng có thể "
 "bị mất."
 
-#: builtin/am.c:1344
+#: builtin/am.c:1345
 #, c-format
 msgid "missing author line in commit %s"
 msgstr "thiếu dòng tác giả trong lần chuyển gia %s"
 
-#: builtin/am.c:1347
+#: builtin/am.c:1348
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "dòng định danh không hợp lệ: %.*s"
 
-#: builtin/am.c:1566
+#: builtin/am.c:1567
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr "Kho thiếu đối tượng blob cần thiết để thực hiện “3-way merge”."
 
-#: builtin/am.c:1568
+#: builtin/am.c:1569
 msgid "Using index info to reconstruct a base tree..."
 msgstr ""
 "Sử dụng thông tin trong bảng mục lục để cấu trúc lại một cây (tree) cơ sở…"
 
-#: builtin/am.c:1587
+#: builtin/am.c:1588
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -10718,24 +10976,24 @@ msgstr ""
 "Bạn đã sửa miếng vá của mình bằng cách thủ công à?\n"
 "Nó không thể áp dụng các blob đã được ghi lại trong bảng mục lục của nó."
 
-#: builtin/am.c:1593
+#: builtin/am.c:1594
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "Đang dùng phương án dự phòng: vá bản cơ sở và “hòa trộn 3-đường”…"
 
-#: builtin/am.c:1619
+#: builtin/am.c:1620
 msgid "Failed to merge in the changes."
 msgstr "Gặp lỗi khi trộn vào các thay đổi."
 
-#: builtin/am.c:1651
+#: builtin/am.c:1652
 msgid "applying to an empty history"
 msgstr "áp dụng vào một lịch sử trống rỗng"
 
-#: builtin/am.c:1703 builtin/am.c:1707
+#: builtin/am.c:1704 builtin/am.c:1708
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "không thể phục hồi: %s không tồn tại."
 
-#: builtin/am.c:1725
+#: builtin/am.c:1726
 msgid "Commit Body is:"
 msgstr "Thân của lần chuyển giao là:"
 
@@ -10743,59 +11001,59 @@ msgstr "Thân của lần chuyển giao là:"
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1735
+#: builtin/am.c:1736
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr ""
 "Áp dụng? đồng ý [y]/khô[n]g/chỉnh sửa [e]/hiển thị miếng [v]á/chấp nhận tất "
 "cả [a]: "
 
-#: builtin/am.c:1781 builtin/commit.c:409
+#: builtin/am.c:1782 builtin/commit.c:410
 msgid "unable to write index file"
 msgstr "không thể ghi tập tin lưu mục lục"
 
-#: builtin/am.c:1785
+#: builtin/am.c:1786
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "Bảng mục lục bẩn: không thể áp dụng các miếng vá (bẩn: %s)"
 
-#: builtin/am.c:1827
+#: builtin/am.c:1828
 #, c-format
 msgid "Skipping: %.*s"
 msgstr "Đang bỏ qua: %.*s"
 
-#: builtin/am.c:1832
+#: builtin/am.c:1833
 #, c-format
 msgid "Creating an empty commit: %.*s"
 msgstr "Đang tạo một lần chuyển giao trống rỗng: %.*s"
 
-#: builtin/am.c:1836
+#: builtin/am.c:1837
 msgid "Patch is empty."
 msgstr "Miếng vá trống rỗng."
 
-#: builtin/am.c:1847 builtin/am.c:1916
+#: builtin/am.c:1848 builtin/am.c:1917
 #, c-format
 msgid "Applying: %.*s"
 msgstr "Áp dụng: %.*s"
 
-#: builtin/am.c:1864
+#: builtin/am.c:1865
 msgid "No changes -- Patch already applied."
 msgstr "Không thay đổi gì cả -- Miếng vá đã được áp dụng rồi."
 
-#: builtin/am.c:1870
+#: builtin/am.c:1871
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "Gặp lỗi khi vá tại %s %.*s"
 
-#: builtin/am.c:1874
+#: builtin/am.c:1875
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr "Dùng “git am --show-current-patch=diff” để xem miếng vá bị lỗi"
 
-#: builtin/am.c:1920
+#: builtin/am.c:1921
 msgid "No changes - recorded it as an empty commit."
 msgstr "Không có thay đổi nào - được ghi thành một lần chuyển giao rỗng."
 
-#: builtin/am.c:1922
+#: builtin/am.c:1923
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -10806,7 +11064,7 @@ msgstr ""
 "đã sẵn được đưa vào với cùng nội dung thay đổi; bạn có lẽ muốn bỏ qua miếng "
 "vá này."
 
-#: builtin/am.c:1930
+#: builtin/am.c:1931
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -10819,17 +11077,17 @@ msgstr ""
 "Bạn có lẽ muốn chạy “git rm“ trên một tập tin để chấp nhận \"được xóa bởi họ"
 "\" cho nó."
 
-#: builtin/am.c:2038 builtin/am.c:2042 builtin/am.c:2054 builtin/reset.c:448
-#: builtin/reset.c:456
+#: builtin/am.c:2039 builtin/am.c:2043 builtin/am.c:2055 builtin/reset.c:455
+#: builtin/reset.c:463
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "Không thể phân tích đối tượng “%s”."
 
-#: builtin/am.c:2090 builtin/am.c:2166
+#: builtin/am.c:2091 builtin/am.c:2167
 msgid "failed to clean index"
 msgstr "gặp lỗi khi dọn bảng mục lục"
 
-#: builtin/am.c:2134
+#: builtin/am.c:2135
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
@@ -10837,168 +11095,159 @@ msgstr ""
 "Bạn có lẽ đã có HEAD đã bị di chuyển đi kể từ lần “am” thất bại cuối cùng.\n"
 "Không thể chuyển tới ORIG_HEAD"
 
-#: builtin/am.c:2242
-#, c-format
-msgid "Invalid value for --patch-format: %s"
-msgstr "Giá trị không hợp lệ cho --patch-format: %s"
-
-#: builtin/am.c:2285
-#, c-format
-msgid "Invalid value for --show-current-patch: %s"
-msgstr "Giá trị không hợp lệ cho --show-current-patch: %s"
-
-#: builtin/am.c:2289
+#: builtin/am.c:2292
 #, c-format
 msgid "options '%s=%s' and '%s=%s' cannot be used together"
 msgstr "tùy chọn '%s=%s' và '%s=%s' không thể dùng cùng nhau"
 
-#: builtin/am.c:2320
+#: builtin/am.c:2323
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<các tùy chọn>] [(<mbox>|<Maildir>)…]"
 
-#: builtin/am.c:2321
+#: builtin/am.c:2324
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<các tùy chọn>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2327
+#: builtin/am.c:2330
 msgid "run interactively"
 msgstr "chạy kiểu tương tác"
 
-#: builtin/am.c:2329
+#: builtin/am.c:2332
 msgid "historical option -- no-op"
 msgstr "tùy chọn lịch sử -- không-toán-tử"
 
-#: builtin/am.c:2331
+#: builtin/am.c:2334
 msgid "allow fall back on 3way merging if needed"
 msgstr "cho phép quay trở lại để hòa trộn kiểu “3way” nếu cần"
 
-#: builtin/am.c:2332 builtin/init-db.c:547 builtin/prune-packed.c:16
-#: builtin/repack.c:642 builtin/stash.c:962
+#: builtin/am.c:2335 builtin/init-db.c:547 builtin/prune-packed.c:16
+#: builtin/repack.c:646 builtin/stash.c:946
 msgid "be quiet"
 msgstr "im lặng"
 
-#: builtin/am.c:2334
+#: builtin/am.c:2337
 msgid "add a Signed-off-by trailer to the commit message"
 msgstr "thêm dòng Signed-off-by vào cuối ghi chú của lần chuyển giao"
 
-#: builtin/am.c:2337
+#: builtin/am.c:2340
 msgid "recode into utf8 (default)"
 msgstr "chuyển mã thành utf8 (mặc định)"
 
-#: builtin/am.c:2339
+#: builtin/am.c:2342
 msgid "pass -k flag to git-mailinfo"
 msgstr "chuyển cờ -k cho git-mailinfo"
 
-#: builtin/am.c:2341
+#: builtin/am.c:2344
 msgid "pass -b flag to git-mailinfo"
 msgstr "chuyển cờ -b cho git-mailinfo"
 
-#: builtin/am.c:2343
+#: builtin/am.c:2346
 msgid "pass -m flag to git-mailinfo"
 msgstr "chuyển cờ -m cho git-mailinfo"
 
-#: builtin/am.c:2345
+#: builtin/am.c:2348
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "chuyển cờ --keep-cr cho git-mailsplit với định dạng mbox"
 
-#: builtin/am.c:2348
+#: builtin/am.c:2351
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr ""
 "đừng chuyển cờ --keep-cr cho git-mailsplit không phụ thuộc vào am.keepcr"
 
-#: builtin/am.c:2351
+#: builtin/am.c:2354
 msgid "strip everything before a scissors line"
 msgstr "cắt mọi thứ trước dòng scissors"
 
-#: builtin/am.c:2353
+#: builtin/am.c:2356
 msgid "pass it through git-mailinfo"
 msgstr "chuyển nó qua git-mailinfo"
 
-#: builtin/am.c:2356 builtin/am.c:2359 builtin/am.c:2362 builtin/am.c:2365
-#: builtin/am.c:2368 builtin/am.c:2371 builtin/am.c:2374 builtin/am.c:2377
-#: builtin/am.c:2383
+#: builtin/am.c:2359 builtin/am.c:2362 builtin/am.c:2365 builtin/am.c:2368
+#: builtin/am.c:2371 builtin/am.c:2374 builtin/am.c:2377 builtin/am.c:2380
+#: builtin/am.c:2386
 msgid "pass it through git-apply"
 msgstr "chuyển nó qua git-apply"
 
-#: builtin/am.c:2373 builtin/commit.c:1515 builtin/fmt-merge-msg.c:18
-#: builtin/fmt-merge-msg.c:21 builtin/grep.c:919 builtin/merge.c:263
+#: builtin/am.c:2376 builtin/commit.c:1514 builtin/fmt-merge-msg.c:18
+#: builtin/fmt-merge-msg.c:21 builtin/grep.c:920 builtin/merge.c:263
 #: builtin/pull.c:142 builtin/pull.c:204 builtin/pull.c:221
-#: builtin/rebase.c:1046 builtin/repack.c:653 builtin/repack.c:657
-#: builtin/repack.c:659 builtin/show-branch.c:649 builtin/show-ref.c:172
-#: builtin/tag.c:445 parse-options.h:154 parse-options.h:175
-#: parse-options.h:317
+#: builtin/rebase.c:1074 builtin/repack.c:657 builtin/repack.c:661
+#: builtin/repack.c:663 builtin/show-branch.c:650 builtin/show-ref.c:172
+#: builtin/tag.c:446 parse-options.h:159 parse-options.h:180
+#: parse-options.h:348
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2379 builtin/branch.c:680 builtin/bugreport.c:109
-#: builtin/for-each-ref.c:41 builtin/replace.c:555 builtin/tag.c:479
-#: builtin/verify-tag.c:38
+#: builtin/am.c:2382 builtin/branch.c:695 builtin/bugreport.c:109
+#: builtin/cat-file.c:848 builtin/cat-file.c:852 builtin/cat-file.c:856
+#: builtin/for-each-ref.c:41 builtin/ls-tree.c:357 builtin/replace.c:555
+#: builtin/tag.c:480 builtin/verify-tag.c:38
 msgid "format"
 msgstr "định dạng"
 
-#: builtin/am.c:2380
+#: builtin/am.c:2383
 msgid "format the patch(es) are in"
 msgstr "định dạng (các) miếng vá theo"
 
-#: builtin/am.c:2386
+#: builtin/am.c:2389
 msgid "override error message when patch failure occurs"
 msgstr "đè lên các lời nhắn lỗi khi xảy ra lỗi vá nghiêm trọng"
 
-#: builtin/am.c:2388
+#: builtin/am.c:2391
 msgid "continue applying patches after resolving a conflict"
 msgstr "tiếp tục áp dụng các miếng vá sau khi giải quyết xung đột"
 
-#: builtin/am.c:2391
+#: builtin/am.c:2394
 msgid "synonyms for --continue"
 msgstr "đồng nghĩa với --continue"
 
-#: builtin/am.c:2394
+#: builtin/am.c:2397
 msgid "skip the current patch"
 msgstr "bỏ qua miếng vá hiện hành"
 
-#: builtin/am.c:2397
+#: builtin/am.c:2400
 msgid "restore the original branch and abort the patching operation"
 msgstr "phục hồi lại nhánh gốc và loại bỏ thao tác vá"
 
-#: builtin/am.c:2400
+#: builtin/am.c:2403
 msgid "abort the patching operation but keep HEAD where it is"
 msgstr "bỏ qua thao tác vá nhưng vẫn giữ HEAD nơi nó chỉ đến"
 
-#: builtin/am.c:2404
+#: builtin/am.c:2407
 msgid "show the patch being applied"
 msgstr "hiển thị miếng vá đã được áp dụng rồi"
 
-#: builtin/am.c:2408
+#: builtin/am.c:2411
 msgid "record the empty patch as an empty commit"
 msgstr "ghi lại miếng vá trống rỗng như là một lần chuyển giao trống"
 
-#: builtin/am.c:2412
+#: builtin/am.c:2415
 msgid "lie about committer date"
 msgstr "nói dối về ngày chuyển giao"
 
-#: builtin/am.c:2414
+#: builtin/am.c:2417
 msgid "use current timestamp for author date"
 msgstr "dùng dấu thời gian hiện tại cho ngày tác giả"
 
-#: builtin/am.c:2416 builtin/commit-tree.c:118 builtin/commit.c:1643
-#: builtin/merge.c:302 builtin/pull.c:179 builtin/rebase.c:1099
-#: builtin/revert.c:117 builtin/tag.c:460
+#: builtin/am.c:2419 builtin/commit-tree.c:118 builtin/commit.c:1642
+#: builtin/merge.c:302 builtin/pull.c:179 builtin/rebase.c:1127
+#: builtin/revert.c:117 builtin/tag.c:461
 msgid "key-id"
 msgstr "mã-số-khóa"
 
-#: builtin/am.c:2417 builtin/rebase.c:1100
+#: builtin/am.c:2420 builtin/rebase.c:1128
 msgid "GPG-sign commits"
 msgstr "Các lần chuyển giao ký-GPG"
 
-#: builtin/am.c:2420
+#: builtin/am.c:2423
 msgid "how to handle empty patches"
 msgstr "xử lý các miếng vá trống rỗng như thế nào"
 
-#: builtin/am.c:2423
+#: builtin/am.c:2426
 msgid "(internal use for git-rebase)"
 msgstr "(dùng nội bộ cho git-rebase)"
 
-#: builtin/am.c:2441
+#: builtin/am.c:2444
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
@@ -11006,16 +11255,16 @@ msgstr ""
 "Tùy chọn -b/--binary đã không dùng từ lâu rồi, và\n"
 "nó sẽ được bỏ đi. Xin đừng sử dụng nó thêm nữa."
 
-#: builtin/am.c:2448
+#: builtin/am.c:2451
 msgid "failed to read the index"
 msgstr "gặp lỗi đọc bảng mục lục"
 
-#: builtin/am.c:2463
+#: builtin/am.c:2466
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr "thư mục rebase trước %s không sẵn có nhưng mbox lại đưa ra."
 
-#: builtin/am.c:2487
+#: builtin/am.c:2490
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -11024,11 +11273,11 @@ msgstr ""
 "Tìm thấy thư mục lạc %s.\n"
 "Dùng \"git am --abort\" để loại bỏ nó đi."
 
-#: builtin/am.c:2493
+#: builtin/am.c:2496
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "Thao tác phân giải không được tiến hành, chúng ta không phục hồi lại."
 
-#: builtin/am.c:2503
+#: builtin/am.c:2506
 msgid "interactive mode requires patches on the command line"
 msgstr "chế độ tương tác yêu cầu có các miếng vá trên dòng lệnh"
 
@@ -11065,14 +11314,6 @@ msgstr "git archive: cần một flush (đẩy dữ liệu lên đĩa)"
 msgid "git bisect--helper --bisect-reset [<commit>]"
 msgstr "git bisect--helper --bisect-reset [<lần_chuyển_giao>]"
 
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
-msgstr ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
-
 #: builtin/bisect--helper.c:26
 msgid ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
@@ -11083,10 +11324,6 @@ msgstr ""
 "=<term>] [--no-checkout] [--first-parent] [<bad> [<good>…]] [--] [</các/"
 "đường/dẫn>…]"
 
-#: builtin/bisect--helper.c:28
-msgid "git bisect--helper --bisect-next"
-msgstr "git bisect--helper --bisect-next"
-
 #: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr "git bisect--helper --bisect-state (bad|new) [<lần_chuyển_giao>]"
@@ -11103,10 +11340,6 @@ msgstr "git bisect--helper --bisect-replay <tên_tập_tin>"
 msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
 msgstr "git bisect--helper --bisect-skip [(<rev>|<vùng>)…]"
 
-#: builtin/bisect--helper.c:33
-msgid "git bisect--helper --bisect-visualize"
-msgstr "git bisect--helper --bisect-visualize"
-
 #: builtin/bisect--helper.c:34
 msgid "git bisect--helper --bisect-run <cmd>..."
 msgstr "git bisect--helper --bisect-run <lệnh>…"
@@ -11328,40 +11561,50 @@ msgstr "“%s”?? bạn đang nói gì thế?"
 msgid "cannot read file '%s' for replaying"
 msgstr "không thể đọc tập tin “%s” để thao diễn lại"
 
-#: builtin/bisect--helper.c:1107 builtin/bisect--helper.c:1274
+#: builtin/bisect--helper.c:1120 builtin/bisect--helper.c:1152
+#, c-format
+msgid "running %s\n"
+msgstr "đang chạy %s\n"
+
+#: builtin/bisect--helper.c:1145 builtin/bisect--helper.c:1335
 msgid "bisect run failed: no command provided."
 msgstr "bisect chạy gặp lỗi: không đưa ra lệnh."
 
-#: builtin/bisect--helper.c:1116
+#: builtin/bisect--helper.c:1166
 #, c-format
-msgid "running %s\n"
-msgstr "đang chạy %s\n"
+msgid "unable to verify '%s' on good revision"
+msgstr "không thể xác nhận “%s” trên điểm xét duyệt tốt"
+
+#: builtin/bisect--helper.c:1172
+#, c-format
+msgid "bogus exit code %d for good revision"
+msgstr "mã thoát giả %d cho điểm xét duyệt tốt"
 
-#: builtin/bisect--helper.c:1120
+#: builtin/bisect--helper.c:1180
 #, c-format
 msgid "bisect run failed: exit code %d from '%s' is < 0 or >= 128"
 msgstr "chạy bisect gặp lỗi: mã trả về %d từ lệnh “%s” là < 0 hoặc >= 128"
 
-#: builtin/bisect--helper.c:1136
+#: builtin/bisect--helper.c:1195
 #, c-format
 msgid "cannot open file '%s' for writing"
 msgstr "không thể mở “%s” để ghi"
 
-#: builtin/bisect--helper.c:1152
+#: builtin/bisect--helper.c:1213
 msgid "bisect run cannot continue any more"
 msgstr "bisect không thể tiếp tục thêm được nữa"
 
-#: builtin/bisect--helper.c:1154
+#: builtin/bisect--helper.c:1215
 #, c-format
 msgid "bisect run success"
 msgstr "bisect chạy thành công"
 
-#: builtin/bisect--helper.c:1157
+#: builtin/bisect--helper.c:1218
 #, c-format
 msgid "bisect found first bad commit"
 msgstr "bisect tìm thấy lần chuyển giao sai đầu tiên"
 
-#: builtin/bisect--helper.c:1160
+#: builtin/bisect--helper.c:1221
 #, c-format
 msgid ""
 "bisect run failed: 'git bisect--helper --bisect-state %s' exited with error "
@@ -11370,72 +11613,72 @@ msgstr ""
 "chạy bisect gặp lỗi: “git bisect--helper --bisect-state %s” đã thoát ra với "
 "mã lỗi %d"
 
-#: builtin/bisect--helper.c:1192
+#: builtin/bisect--helper.c:1253
 msgid "reset the bisection state"
 msgstr "đặt lại trạng di chuyển nửa bước"
 
-#: builtin/bisect--helper.c:1194
+#: builtin/bisect--helper.c:1255
 msgid "check whether bad or good terms exist"
 msgstr "kiểm tra xem các thời điểm xấu/tốt có tồn tại không"
 
-#: builtin/bisect--helper.c:1196
+#: builtin/bisect--helper.c:1257
 msgid "print out the bisect terms"
 msgstr "in ra các thời điểm di chuyển nửa bước"
 
-#: builtin/bisect--helper.c:1198
+#: builtin/bisect--helper.c:1259
 msgid "start the bisect session"
 msgstr "bắt đầu phiên di chuyển nửa bước"
 
-#: builtin/bisect--helper.c:1200
+#: builtin/bisect--helper.c:1261
 msgid "find the next bisection commit"
 msgstr "tìm lần chuyển giao không di chuyển phân đôi"
 
-#: builtin/bisect--helper.c:1202
+#: builtin/bisect--helper.c:1263
 msgid "mark the state of ref (or refs)"
 msgstr "đánh dấu trạng thái ref (hoặc refs)"
 
-#: builtin/bisect--helper.c:1204
+#: builtin/bisect--helper.c:1265
 msgid "list the bisection steps so far"
 msgstr "liệt kê các bước bisection đi quá xa"
 
-#: builtin/bisect--helper.c:1206
+#: builtin/bisect--helper.c:1267
 msgid "replay the bisection process from the given file"
 msgstr "phát lại quá trình bisection từ tệp đã cho"
 
-#: builtin/bisect--helper.c:1208
+#: builtin/bisect--helper.c:1269
 msgid "skip some commits for checkout"
 msgstr "bỏ qua một số lần chuyển giao để lấy ra"
 
-#: builtin/bisect--helper.c:1210
+#: builtin/bisect--helper.c:1271
 msgid "visualize the bisection"
 msgstr "trực quan việc di chuyển nửa bước"
 
-#: builtin/bisect--helper.c:1212
-msgid "use <cmd>... to automatically bisect."
-msgstr "dùng <cmd>… để bisect một cách tự động."
+#: builtin/bisect--helper.c:1273
+msgid "use <cmd>... to automatically bisect"
+msgstr "dùng <cmd>… để bisect một cách tự động"
 
-#: builtin/bisect--helper.c:1214
+#: builtin/bisect--helper.c:1275
 msgid "no log for BISECT_WRITE"
 msgstr "không có nhật ký cho BISECT_WRITE"
 
-#: builtin/bisect--helper.c:1229
+#: builtin/bisect--helper.c:1290
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr ""
 "--bisect-reset requires không nhận đối số cũng không nhận lần chuyển giao"
 
-#: builtin/bisect--helper.c:1234
+#: builtin/bisect--helper.c:1295
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms cần 0 hoặc 1 tham số"
 
-#: builtin/bisect--helper.c:1243
+#: builtin/bisect--helper.c:1304
 msgid "--bisect-next requires 0 arguments"
 msgstr "--bisect-next cần 0 tham số"
 
-#: builtin/bisect--helper.c:1254
+#: builtin/bisect--helper.c:1315
 msgid "--bisect-log requires 0 arguments"
 msgstr "--bisect-log cần 0 tham số"
 
-#: builtin/bisect--helper.c:1259
+#: builtin/bisect--helper.c:1320
 msgid "no logfile given"
 msgstr "chưa chỉ ra tập tin ghi nhật ký"
 
@@ -11456,145 +11699,136 @@ msgstr "cần một màu: %s"
 msgid "must end with a color"
 msgstr "phải kết thúc bằng một màu"
 
-#: builtin/blame.c:724
-#, c-format
-msgid "invalid color '%s' in color.blame.repeatedLines"
-msgstr "màu không hợp lệ “%s” trong color.blame.repeatedLines"
-
-#: builtin/blame.c:742
-msgid "invalid value for blame.coloring"
-msgstr "màu không hợp lệ cho blame.coloring"
-
-#: builtin/blame.c:841
+#: builtin/blame.c:842
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "không thể tìm thấy điểm xét duyệt %s để mà bỏ qua"
 
-#: builtin/blame.c:863
+#: builtin/blame.c:864
 msgid "show blame entries as we find them, incrementally"
 msgstr "hiển thị các mục “blame” như là chúng ta thấy chúng, tăng dần"
 
-#: builtin/blame.c:864
+#: builtin/blame.c:865
 msgid "do not show object names of boundary commits (Default: off)"
 msgstr ""
 "đừng hiển thị tên đối tượng của những lần chuyển giao biên giới (Mặc định: "
 "off)"
 
-#: builtin/blame.c:865
+#: builtin/blame.c:866
 msgid "do not treat root commits as boundaries (Default: off)"
 msgstr "không coi các lần chuyển giao gốc là giới hạn (Mặc định: off)"
 
-#: builtin/blame.c:866
+#: builtin/blame.c:867
 msgid "show work cost statistics"
 msgstr "hiển thị thống kê công sức làm việc"
 
-#: builtin/blame.c:867 builtin/checkout.c:1536 builtin/clone.c:94
-#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:180
+#: builtin/blame.c:868 builtin/checkout.c:1554 builtin/clone.c:98
+#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:181
 #: builtin/merge.c:301 builtin/multi-pack-index.c:103
 #: builtin/multi-pack-index.c:154 builtin/multi-pack-index.c:180
 #: builtin/multi-pack-index.c:208 builtin/pull.c:120 builtin/push.c:566
-#: builtin/send-pack.c:202
+#: builtin/remote.c:683 builtin/send-pack.c:202
 msgid "force progress reporting"
 msgstr "ép buộc báo cáo tiến triển công việc"
 
-#: builtin/blame.c:868
+#: builtin/blame.c:869
 msgid "show output score for blame entries"
 msgstr "hiển thị kết xuất điểm số cho các mục tin “blame”"
 
-#: builtin/blame.c:869
+#: builtin/blame.c:870
 msgid "show original filename (Default: auto)"
 msgstr "hiển thị tên tập tin gốc (Mặc định: auto)"
 
-#: builtin/blame.c:870
+#: builtin/blame.c:871
 msgid "show original linenumber (Default: off)"
 msgstr "hiển thị số dòng gốc (Mặc định: off)"
 
-#: builtin/blame.c:871
+#: builtin/blame.c:872
 msgid "show in a format designed for machine consumption"
 msgstr "hiển thị ở định dạng đã thiết kế cho dùng bằng máy"
 
-#: builtin/blame.c:872
+#: builtin/blame.c:873
 msgid "show porcelain format with per-line commit information"
 msgstr "hiển thị định dạng “porcelain” với thông tin chuyển giao mỗi dòng"
 
-#: builtin/blame.c:873
+#: builtin/blame.c:874
 msgid "use the same output mode as git-annotate (Default: off)"
 msgstr "dùng cùng chế độ xuất ra với git-annotate (Mặc định: off)"
 
-#: builtin/blame.c:874
+#: builtin/blame.c:875
 msgid "show raw timestamp (Default: off)"
 msgstr "hiển thị dấu vết thời gian dạng thô (Mặc định: off)"
 
-#: builtin/blame.c:875
+#: builtin/blame.c:876
 msgid "show long commit SHA1 (Default: off)"
 msgstr "hiển thị SHA1 của lần chuyển giao dạng dài (Mặc định: off)"
 
-#: builtin/blame.c:876
+#: builtin/blame.c:877
 msgid "suppress author name and timestamp (Default: off)"
 msgstr "không hiển thị tên tác giả và dấu vết thời gian (Mặc định: off)"
 
-#: builtin/blame.c:877
+#: builtin/blame.c:878
 msgid "show author email instead of name (Default: off)"
 msgstr "hiển thị thư điện tử của tác giả thay cho tên (Mặc định: off)"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:879
 msgid "ignore whitespace differences"
 msgstr "bỏ qua các khác biệt do khoảng trắng gây ra"
 
-#: builtin/blame.c:879 builtin/log.c:1838
+#: builtin/blame.c:880 builtin/log.c:1857
 msgid "rev"
 msgstr "rev"
 
-#: builtin/blame.c:879
+#: builtin/blame.c:880
 msgid "ignore <rev> when blaming"
 msgstr "bỏ qua <rev> khi blame"
 
-#: builtin/blame.c:880
+#: builtin/blame.c:881
 msgid "ignore revisions from <file>"
 msgstr "bỏ qua các điểm xét duyệt từ <tập tin>"
 
-#: builtin/blame.c:881
+#: builtin/blame.c:882
 msgid "color redundant metadata from previous line differently"
 msgstr "siêu dữ liệu dư thừa màu từ dòng trước khác hẳn"
 
-#: builtin/blame.c:882
+#: builtin/blame.c:883
 msgid "color lines by age"
 msgstr "các dòng màu theo tuổi"
 
-#: builtin/blame.c:883
+#: builtin/blame.c:884
 msgid "spend extra cycles to find better match"
 msgstr "tiêu thụ thêm năng tài nguyên máy móc để tìm kiếm tốt hơn nữa"
 
-#: builtin/blame.c:884
+#: builtin/blame.c:885
 msgid "use revisions from <file> instead of calling git-rev-list"
 msgstr ""
 "sử dụng các điểm xét duyệt (revision) từ <tập tin> thay vì gọi “git-rev-list”"
 
-#: builtin/blame.c:885
+#: builtin/blame.c:886
 msgid "use <file>'s contents as the final image"
 msgstr "sử dụng nội dung của <tập tin> như là ảnh cuối cùng"
 
-#: builtin/blame.c:886 builtin/blame.c:887
+#: builtin/blame.c:887 builtin/blame.c:888
 msgid "score"
 msgstr "điểm số"
 
-#: builtin/blame.c:886
+#: builtin/blame.c:887
 msgid "find line copies within and across files"
 msgstr "tìm các bản sao chép dòng trong và ngang qua tập tin"
 
-#: builtin/blame.c:887
+#: builtin/blame.c:888
 msgid "find line movements within and across files"
 msgstr "tìm các di chuyển dòng trong và ngang qua tập tin"
 
-#: builtin/blame.c:888
+#: builtin/blame.c:889
 msgid "range"
 msgstr "vùng"
 
-#: builtin/blame.c:889
+#: builtin/blame.c:890
 msgid "process only line range <start>,<end> or function :<funcname>"
 msgstr "xử lý chỉ dòng vùng <đầu>,<cuối> hoặc tính năng :<funcname>"
 
-#: builtin/blame.c:947
+#: builtin/blame.c:949
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr ""
 "--progress không được dùng cùng với --incremental hay các định dạng porcelain"
@@ -11607,17 +11841,17 @@ msgstr ""
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:998
+#: builtin/blame.c:1000
 msgid "4 years, 11 months ago"
 msgstr "4 năm, 11 tháng trước"
 
-#: builtin/blame.c:1114
+#: builtin/blame.c:1116
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] "tập tin %s chỉ có %lu dòng"
 
-#: builtin/blame.c:1159
+#: builtin/blame.c:1161
 msgid "Blaming lines"
 msgstr "Các dòng blame"
 
@@ -11626,30 +11860,38 @@ msgid "git branch [<options>] [-r | -a] [--merged] [--no-merged]"
 msgstr "git branch [<các tùy chọn>] [-r | -a] [--merged] [ --no-merged]"
 
 #: builtin/branch.c:30
-msgid "git branch [<options>] [-l] [-f] <branch-name> [<start-point>]"
-msgstr "git branch [<các tùy chọn>] [-l] [-f] <tên-nhánh> [<điểm-đầu>]"
+msgid ""
+"git branch [<options>] [-f] [--recurse-submodules] <branch-name> [<start-"
+"point>]"
+msgstr ""
+"git branch [<các tùy chọn>] [-f] [--recurse-submodules] <tên-nhánh> [<điểm-"
+"đầu>]"
 
 #: builtin/branch.c:31
+msgid "git branch [<options>] [-l] [<pattern>...]"
+msgstr "git branch [<các tùy chọn>] [-l] [<mẫu>...]"
+
+#: builtin/branch.c:32
 msgid "git branch [<options>] [-r] (-d | -D) <branch-name>..."
 msgstr "git branch [<các tùy chọn>] [-r] (-d | -D) <tên-nhánh> …"
 
-#: builtin/branch.c:32
+#: builtin/branch.c:33
 msgid "git branch [<options>] (-m | -M) [<old-branch>] <new-branch>"
 msgstr "git branch [<các tùy chọn>] (-m | -M) [<nhánh-cũ>] <nhánh-mới>"
 
-#: builtin/branch.c:33
+#: builtin/branch.c:34
 msgid "git branch [<options>] (-c | -C) [<old-branch>] <new-branch>"
 msgstr "git branch [<các tùy chọn>] (-c | -C) [<nhánh-cũ>] <nhánh-mới>"
 
-#: builtin/branch.c:34
+#: builtin/branch.c:35
 msgid "git branch [<options>] [-r | -a] [--points-at]"
 msgstr "git branch [<các tùy chọn>] [-r | -a] [--points-at]"
 
-#: builtin/branch.c:35
+#: builtin/branch.c:36
 msgid "git branch [<options>] [-r | -a] [--format]"
 msgstr "git branch [<các tùy chọn>] [-r | -a] [--format]"
 
-#: builtin/branch.c:153
+#: builtin/branch.c:165
 #, c-format
 msgid ""
 "deleting branch '%s' that has been merged to\n"
@@ -11658,7 +11900,7 @@ msgstr ""
 "đang xóa nhánh “%s” mà nó lại đã được hòa trộn vào\n"
 "         “%s”, nhưng vẫn chưa được hòa trộn vào HEAD."
 
-#: builtin/branch.c:157
+#: builtin/branch.c:169
 #, c-format
 msgid ""
 "not deleting branch '%s' that is not yet merged to\n"
@@ -11667,12 +11909,12 @@ msgstr ""
 "không xóa nhánh “%s” cái mà chưa được hòa trộn vào\n"
 "         “%s”, cho dù là nó đã được hòa trộn vào HEAD."
 
-#: builtin/branch.c:171
+#: builtin/branch.c:183
 #, c-format
 msgid "Couldn't look up commit object for '%s'"
 msgstr "Không thể tìm kiếm đối tượng chuyển giao cho “%s”"
 
-#: builtin/branch.c:175
+#: builtin/branch.c:187
 #, c-format
 msgid ""
 "The branch '%s' is not fully merged.\n"
@@ -11681,111 +11923,111 @@ msgstr ""
 "Nhánh “%s” không được trộn một cách đầy đủ.\n"
 "Nếu bạn thực sự muốn xóa nó, thì chạy lệnh “git branch -D %s”."
 
-#: builtin/branch.c:188
+#: builtin/branch.c:200
 msgid "Update of config-file failed"
 msgstr "Cập nhật tập tin cấu hình gặp lỗi"
 
-#: builtin/branch.c:223
+#: builtin/branch.c:235
 msgid "cannot use -a with -d"
 msgstr "không thể dùng tùy chọn -a với -d"
 
-#: builtin/branch.c:230
+#: builtin/branch.c:242
 msgid "Couldn't look up commit object for HEAD"
 msgstr "Không thể tìm kiếm đối tượng chuyển giao cho HEAD"
 
-#: builtin/branch.c:247
+#: builtin/branch.c:259
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr "Không thể xóa nhánh “%s” đã được lấy ra tại “%s”"
 
-#: builtin/branch.c:262
+#: builtin/branch.c:274
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "không tìm thấy nhánh theo dõi máy chủ “%s”."
 
-#: builtin/branch.c:263
+#: builtin/branch.c:275
 #, c-format
 msgid "branch '%s' not found."
 msgstr "không tìm thấy nhánh “%s”."
 
-#: builtin/branch.c:294
+#: builtin/branch.c:306
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "Đã xóa nhánh theo dõi máy chủ \"%s\" (từng là %s).\n"
 
-#: builtin/branch.c:295
+#: builtin/branch.c:307
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "Nhánh “%s” đã bị xóa (từng là %s)\n"
 
-#: builtin/branch.c:445 builtin/tag.c:63
+#: builtin/branch.c:457 builtin/tag.c:64
 msgid "unable to parse format string"
 msgstr "không thể phân tích chuỗi định dạng"
 
-#: builtin/branch.c:476
+#: builtin/branch.c:488
 msgid "could not resolve HEAD"
 msgstr "không thể phân giải HEAD"
 
-#: builtin/branch.c:482
+#: builtin/branch.c:494
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "HEAD (%s) chỉ bên ngoài của refs/heads/"
 
-#: builtin/branch.c:497
+#: builtin/branch.c:509
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "Nhánh %s đang được cải tổ lại tại %s"
 
-#: builtin/branch.c:501
+#: builtin/branch.c:513
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "Nhánh %s đang được di chuyển phân đôi (bisect) tại %s"
 
-#: builtin/branch.c:518
+#: builtin/branch.c:530
 msgid "cannot copy the current branch while not on any."
 msgstr "không thể sao chép nhánh hiện hành trong khi nó chẳng ở đâu cả."
 
-#: builtin/branch.c:520
+#: builtin/branch.c:532
 msgid "cannot rename the current branch while not on any."
 msgstr "không thể đổi tên nhánh hiện hành trong khi nó chẳng ở đâu cả."
 
-#: builtin/branch.c:531
+#: builtin/branch.c:543
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "Tên nhánh không hợp lệ: “%s”"
 
-#: builtin/branch.c:560
+#: builtin/branch.c:572
 msgid "Branch rename failed"
 msgstr "Gặp lỗi khi đổi tên nhánh"
 
-#: builtin/branch.c:562
+#: builtin/branch.c:574
 msgid "Branch copy failed"
 msgstr "Gặp lỗi khi sao chép nhánh"
 
-#: builtin/branch.c:566
+#: builtin/branch.c:578
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "Đã tạo một bản sao của nhánh khuyết danh “%s”"
 
-#: builtin/branch.c:569
+#: builtin/branch.c:581
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "Đã đổi tên nhánh khuyết danh “%s” đi"
 
-#: builtin/branch.c:575
+#: builtin/branch.c:587
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "Nhánh bị đổi tên thành %s, nhưng HEAD lại không được cập nhật!"
 
-#: builtin/branch.c:584
+#: builtin/branch.c:596
 msgid "Branch is renamed, but update of config-file failed"
 msgstr "Nhánh bị đổi tên, nhưng cập nhật tập tin cấu hình gặp lỗi"
 
-#: builtin/branch.c:586
+#: builtin/branch.c:598
 msgid "Branch is copied, but update of config-file failed"
 msgstr "Nhánh đã được sao chép, nhưng cập nhật tập tin cấu hình gặp lỗi"
 
-#: builtin/branch.c:602
+#: builtin/branch.c:614
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -11796,176 +12038,193 @@ msgstr ""
 "  %s\n"
 "Những dòng được bắt đầu bằng “%c” sẽ được cắt bỏ.\n"
 
-#: builtin/branch.c:637
+#: builtin/branch.c:651
 msgid "Generic options"
 msgstr "Tùy chọn chung"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:653
 msgid "show hash and subject, give twice for upstream branch"
 msgstr "hiển thị mã băm và chủ đề, đưa ra hai lần cho nhánh thượng nguồn"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:654
 msgid "suppress informational messages"
 msgstr "không xuất các thông tin"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:656 builtin/checkout.c:1571
+#: builtin/submodule--helper.c:3077
 msgid "set branch tracking configuration"
 msgstr "đặt cấu hình thao dõi nhánh"
 
-#: builtin/branch.c:645
+#: builtin/branch.c:659
 msgid "do not use"
 msgstr "không dùng"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:661
 msgid "upstream"
 msgstr "thượng nguồn"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:661
 msgid "change the upstream info"
 msgstr "thay đổi thông tin thượng nguồn"
 
-#: builtin/branch.c:648
+#: builtin/branch.c:662
 msgid "unset the upstream info"
 msgstr "bỏ đặt thông tin thượng nguồn"
 
-#: builtin/branch.c:649
+#: builtin/branch.c:663
 msgid "use colored output"
 msgstr "tô màu kết xuất"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:664
 msgid "act on remote-tracking branches"
 msgstr "thao tác trên nhánh “remote-tracking”"
 
-#: builtin/branch.c:652 builtin/branch.c:654
+#: builtin/branch.c:666 builtin/branch.c:668
 msgid "print only branches that contain the commit"
 msgstr "chỉ hiển thị những nhánh mà nó chứa lần chuyển giao"
 
-#: builtin/branch.c:653 builtin/branch.c:655
+#: builtin/branch.c:667 builtin/branch.c:669
 msgid "print only branches that don't contain the commit"
 msgstr "chỉ hiển thị những nhánh mà nó không chứa lần chuyển giao"
 
-#: builtin/branch.c:658
+#: builtin/branch.c:672
 msgid "Specific git-branch actions:"
 msgstr "Hành động git-branch:"
 
-#: builtin/branch.c:659
+#: builtin/branch.c:673
 msgid "list both remote-tracking and local branches"
 msgstr "liệt kê cả nhánh “remote-tracking” và nội bộ"
 
-#: builtin/branch.c:661
+#: builtin/branch.c:675
 msgid "delete fully merged branch"
 msgstr "xóa một toàn bộ nhánh đã hòa trộn"
 
-#: builtin/branch.c:662
+#: builtin/branch.c:676
 msgid "delete branch (even if not merged)"
 msgstr "xóa nhánh (cho dù là chưa được hòa trộn)"
 
-#: builtin/branch.c:663
+#: builtin/branch.c:677
 msgid "move/rename a branch and its reflog"
 msgstr "di chuyển hay đổi tên một nhánh và reflog của nó"
 
-#: builtin/branch.c:664
+#: builtin/branch.c:678
 msgid "move/rename a branch, even if target exists"
 msgstr "di chuyển hoặc đổi tên một nhánh ngay cả khi đích đã có sẵn"
 
-#: builtin/branch.c:665
+#: builtin/branch.c:679
 msgid "copy a branch and its reflog"
 msgstr "sao chép một nhánh và reflog của nó"
 
-#: builtin/branch.c:666
+#: builtin/branch.c:680
 msgid "copy a branch, even if target exists"
 msgstr "sao chép một nhánh ngay cả khi đích đã có sẵn"
 
-#: builtin/branch.c:667
+#: builtin/branch.c:681
 msgid "list branch names"
 msgstr "liệt kê các tên nhánh"
 
-#: builtin/branch.c:668
+#: builtin/branch.c:682
 msgid "show current branch name"
 msgstr "hiển thị nhánh hiện hành"
 
-#: builtin/branch.c:669
+#: builtin/branch.c:683 builtin/submodule--helper.c:3075
 msgid "create the branch's reflog"
 msgstr "tạo reflog của nhánh"
 
-#: builtin/branch.c:671
+#: builtin/branch.c:685
 msgid "edit the description for the branch"
 msgstr "sửa mô tả cho nhánh"
 
-#: builtin/branch.c:672
+#: builtin/branch.c:686
 msgid "force creation, move/rename, deletion"
 msgstr "buộc tạo, di chuyển/đổi tên, xóa"
 
-#: builtin/branch.c:673
+#: builtin/branch.c:687
 msgid "print only branches that are merged"
 msgstr "chỉ hiển thị những nhánh mà nó được hòa trộn"
 
-#: builtin/branch.c:674
+#: builtin/branch.c:688
 msgid "print only branches that are not merged"
 msgstr "chỉ hiển thị những nhánh mà nó không được hòa trộn"
 
-#: builtin/branch.c:675
+#: builtin/branch.c:689
 msgid "list branches in columns"
 msgstr "liệt kê các nhánh trong các cột"
 
-#: builtin/branch.c:677 builtin/for-each-ref.c:45 builtin/notes.c:413
+#: builtin/branch.c:691 builtin/for-each-ref.c:45 builtin/notes.c:413
 #: builtin/notes.c:416 builtin/notes.c:579 builtin/notes.c:582
-#: builtin/tag.c:475
+#: builtin/tag.c:476
 msgid "object"
 msgstr "đối tượng"
 
-#: builtin/branch.c:678
+#: builtin/branch.c:692
 msgid "print only branches of the object"
 msgstr "chỉ hiển thị các nhánh của đối tượng"
 
-#: builtin/branch.c:679 builtin/for-each-ref.c:51 builtin/tag.c:482
+#: builtin/branch.c:693 builtin/for-each-ref.c:51 builtin/tag.c:483
 msgid "sorting and filtering are case insensitive"
 msgstr "sắp xếp và lọc là phân biệt HOA thường"
 
-#: builtin/branch.c:680 builtin/for-each-ref.c:41 builtin/tag.c:480
-#: builtin/verify-tag.c:38
+#: builtin/branch.c:694 builtin/ls-files.c:667
+msgid "recurse through submodules"
+msgstr "đệ quy xuyên qua mô-đun con"
+
+#: builtin/branch.c:695 builtin/for-each-ref.c:41 builtin/ls-tree.c:358
+#: builtin/tag.c:481 builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "định dạng sẽ dùng cho đầu ra"
 
-#: builtin/branch.c:703 builtin/clone.c:678
+#: builtin/branch.c:718 builtin/clone.c:684
 msgid "HEAD not found below refs/heads!"
 msgstr "Không tìm thấy HEAD ở dưới refs/heads!"
 
-#: builtin/branch.c:742 builtin/branch.c:798 builtin/branch.c:807
+#: builtin/branch.c:739
+msgid ""
+"branch with --recurse-submodules can only be used if submodule."
+"propagateBranches is enabled"
+msgstr ""
+"nhánh với --recurse-submodules chỉ có thể được sử dụng nếu submodule."
+"propagateBranches được kích hoạt"
+
+#: builtin/branch.c:741
+msgid "--recurse-submodules can only be used to create branches"
+msgstr "--recurse-submodules chỉ có thể được sử dụng để tạo ra các nhánh"
+
+#: builtin/branch.c:770 builtin/branch.c:826 builtin/branch.c:835
 msgid "branch name required"
 msgstr "cần chỉ ra tên nhánh"
 
-#: builtin/branch.c:774
+#: builtin/branch.c:802
 msgid "Cannot give description to detached HEAD"
 msgstr "Không thể đưa ra mô tả HEAD đã tách rời"
 
-#: builtin/branch.c:779
+#: builtin/branch.c:807
 msgid "cannot edit description of more than one branch"
 msgstr "không thể sửa mô tả cho nhiều hơn một nhánh"
 
-#: builtin/branch.c:786
+#: builtin/branch.c:814
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "Vẫn chưa chuyển giao trên nhánh “%s”."
 
-#: builtin/branch.c:789
+#: builtin/branch.c:817
 #, c-format
 msgid "No branch named '%s'."
 msgstr "Không có nhánh nào có tên “%s”."
 
-#: builtin/branch.c:804
+#: builtin/branch.c:832
 msgid "too many branches for a copy operation"
 msgstr "quá nhiều nhánh dành cho thao tác sao chép"
 
-#: builtin/branch.c:813
+#: builtin/branch.c:841
 msgid "too many arguments for a rename operation"
 msgstr "quá nhiều tham số cho thao tác đổi tên"
 
-#: builtin/branch.c:818
+#: builtin/branch.c:846
 msgid "too many arguments to set new upstream"
 msgstr "quá nhiều tham số để đặt thượng nguồn mới"
 
-#: builtin/branch.c:822
+#: builtin/branch.c:850
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
@@ -11973,30 +12232,30 @@ msgstr ""
 "không thể đặt thượng nguồn của HEAD thành %s khi mà nó chẳng chỉ đến nhánh "
 "nào cả."
 
-#: builtin/branch.c:825 builtin/branch.c:848
+#: builtin/branch.c:853 builtin/branch.c:873
 #, c-format
 msgid "no such branch '%s'"
 msgstr "không có nhánh nào như thế “%s”"
 
-#: builtin/branch.c:829
+#: builtin/branch.c:857
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "chưa có nhánh “%s”"
 
-#: builtin/branch.c:842
+#: builtin/branch.c:867
 msgid "too many arguments to unset upstream"
 msgstr "quá nhiều tham số để bỏ đặt thượng nguồn"
 
-#: builtin/branch.c:846
+#: builtin/branch.c:871
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr "không thể bỏ đặt thượng nguồn của HEAD không chỉ đến một nhánh nào cả."
 
-#: builtin/branch.c:852
+#: builtin/branch.c:877
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "Nhánh “%s” không có thông tin thượng nguồn"
 
-#: builtin/branch.c:862
+#: builtin/branch.c:890
 msgid ""
 "The -a, and -r, options to 'git branch' do not take a branch name.\n"
 "Did you mean to use: -a|-r --list <pattern>?"
@@ -12005,7 +12264,7 @@ msgstr ""
 "nhánh.\n"
 "Có phải ý bạn là dùng: -a|-r --list <mẫu>?"
 
-#: builtin/branch.c:866
+#: builtin/branch.c:894
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -12121,19 +12380,19 @@ msgstr "git bundle list-heads <tập tin> [<tên tham chiếu>…]"
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr "git bundle unbundle <tập tin> [<tên tham chiếu>…]"
 
-#: builtin/bundle.c:65 builtin/pack-objects.c:3876
+#: builtin/bundle.c:65 builtin/pack-objects.c:3899
 msgid "do not show progress meter"
 msgstr "không hiển thị bộ đo tiến trình"
 
-#: builtin/bundle.c:67 builtin/bundle.c:167 builtin/pack-objects.c:3878
+#: builtin/bundle.c:67 builtin/bundle.c:168 builtin/pack-objects.c:3901
 msgid "show progress meter"
 msgstr "hiển thị bộ đo tiến trình"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3880
+#: builtin/bundle.c:69 builtin/pack-objects.c:3903
 msgid "show progress meter during object writing phase"
 msgstr "hiển thị bộ đo tiến triển trong suốt pha ghi đối tượng"
 
-#: builtin/bundle.c:72 builtin/pack-objects.c:3883
+#: builtin/bundle.c:72 builtin/pack-objects.c:3906
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "tương tự --all-progress khi bộ đo tiến trình được xuất hiện"
 
@@ -12145,118 +12404,238 @@ msgstr "chỉ điịnh định dạng cho bundle"
 msgid "Need a repository to create a bundle."
 msgstr "Cần một kho chứa để có thể tạo một bundle."
 
-#: builtin/bundle.c:107
+#: builtin/bundle.c:108
 msgid "do not show bundle details"
 msgstr "không hiển thị chi tiết bundle (bó)"
 
-#: builtin/bundle.c:126
+#: builtin/bundle.c:127
 #, c-format
 msgid "%s is okay\n"
 msgstr "“%s” tốt\n"
 
-#: builtin/bundle.c:182
+#: builtin/bundle.c:183
 msgid "Need a repository to unbundle."
 msgstr "Cần một kho chứa để có thể giải nén một bundle."
 
-#: builtin/bundle.c:185
+#: builtin/bundle.c:186
 msgid "Unbundling objects"
 msgstr "Tháo rời các đối tượng"
 
-#: builtin/bundle.c:219 builtin/remote.c:1733
+#: builtin/bundle.c:220 builtin/remote.c:1758
 #, c-format
 msgid "Unknown subcommand: %s"
 msgstr "Không hiểu câu lệnh con: %s"
 
-#: builtin/cat-file.c:622
+#: builtin/cat-file.c:568
+msgid "flush is only for --buffer mode"
+msgstr "flush chỉ dành cho chế độ --buffer"
+
+#: builtin/cat-file.c:612
+msgid "empty command in input"
+msgstr "lệnh thực thi trống rỗng trong đầu vào"
+
+#: builtin/cat-file.c:614
+#, c-format
+msgid "whitespace before command: '%s'"
+msgstr "có khoảng trắng trước lệnh: '%s'"
+
+#: builtin/cat-file.c:623
+#, c-format
+msgid "%s requires arguments"
+msgstr "%s cần các tham số"
+
+#: builtin/cat-file.c:628
+#, c-format
+msgid "%s takes no arguments"
+msgstr "%s không nhận tham số"
+
+#: builtin/cat-file.c:636
+#, c-format
+msgid "unknown command: '%s'"
+msgstr "không hiểu câu lệnh: '%s'"
+
+#: builtin/cat-file.c:795
+msgid "only one batch option may be specified"
+msgstr "chỉ một tùy chọn batch được chỉ ra"
+
+#: builtin/cat-file.c:824
+msgid "git cat-file <type> <object>"
+msgstr "git cat-file <kiểu> <đối tượng>"
+
+#: builtin/cat-file.c:825
+msgid "git cat-file (-e | -p) <object>"
+msgstr "git cat-file (-e | -p) <đối tượng>"
+
+#: builtin/cat-file.c:826
+msgid "git cat-file (-t | -s) [--allow-unknown-type] <object>"
+msgstr "git cat-file (-t | -s) [--allow-unknown-type] <đối_tượng>"
+
+#: builtin/cat-file.c:827
 msgid ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <type> | --textconv | --filters) [--path=<path>] <object>"
+"git cat-file (--batch | --batch-check | --batch-command) [--batch-all-"
+"objects]\n"
+"             [--buffer] [--follow-symlinks] [--unordered]\n"
+"             [--textconv | --filters]"
 msgstr ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <kiểu> | --textconv) | --filters) [--path=<đường/dẫn>] <đối_tượng>"
+"git cat-file (--batch | --batch-check | --batch-command) [--batch-all-"
+"objects]\n"
+"             [--buffer] [--follow-symlinks] [--unordered]\n"
+"             [--textconv | --filters]"
 
-#: builtin/cat-file.c:623
+#: builtin/cat-file.c:830
 msgid ""
-"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
-"symlinks] [--textconv | --filters]"
+"git cat-file (--textconv | --filters)\n"
+"             [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]"
 msgstr ""
-"git cat-file (--batch[=<định dạng>] | --batch-check[=<định dạng>]) [--follow-"
-"symlinks] [--textconv | --filters]"
+"git cat-file (--textconv | --filters)\n"
+"             [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]"
 
-#: builtin/cat-file.c:644
-msgid "only one batch option may be specified"
-msgstr "chỉ một tùy chọn batch được chỉ ra"
+#: builtin/cat-file.c:836
+msgid "Check object existence or emit object contents"
+msgstr "Kiểm tra đối tượng có sẵn hay không hoặc phát nội dung của đối tượng"
+
+#: builtin/cat-file.c:838
+msgid "check if <object> exists"
+msgstr "không tra xem <đối tượng> có sẵn hay không"
+
+#: builtin/cat-file.c:839
+msgid "pretty-print <object> content"
+msgstr "in nội dung <đối tượng> dạng dễ đọc"
 
-#: builtin/cat-file.c:662
-msgid "<type> can be one of: blob, tree, commit, tag"
-msgstr "<kiểu> là một trong số: blob, tree, commit hoặc tag"
+#: builtin/cat-file.c:841
+msgid "Emit [broken] object attributes"
+msgstr "Phát các thuộc tính đối tượng [hỏng]"
 
-#: builtin/cat-file.c:663
-msgid "show object type"
-msgstr "hiển thị kiểu đối tượng"
+#: builtin/cat-file.c:842
+msgid "show object type (one of 'blob', 'tree', 'commit', 'tag', ...)"
+msgstr ""
+"hiển thị kiểu của đối tượng (là một trong số 'blob', 'tree', 'commit', "
+"'tag', ...)"
 
-#: builtin/cat-file.c:664
+#: builtin/cat-file.c:843
 msgid "show object size"
 msgstr "hiển thị kích thước đối tượng"
 
-#: builtin/cat-file.c:666
-msgid "exit with zero when there's no error"
-msgstr "thoát với 0 khi không có lỗi"
+#: builtin/cat-file.c:845
+msgid "allow -s and -t to work with broken/corrupt objects"
+msgstr "cho phép -s và -t để làm việc với các đối tượng sai/hỏng"
 
-#: builtin/cat-file.c:667
-msgid "pretty-print object's content"
-msgstr "in nội dung đối tượng dạng dễ đọc"
+#: builtin/cat-file.c:847
+msgid "Batch objects requested on stdin (or --batch-all-objects)"
+msgstr ""
+"Đã yêu cầu các đối tượng batch trên đầu vào tiêu chuẩn stdin (hoặc --batch-"
+"all-objects)"
 
-#: builtin/cat-file.c:669
-msgid "for blob objects, run textconv on object's content"
-msgstr "với đối tượng blob, chạy lệnh textconv trên nội dung của đối tượng"
+#: builtin/cat-file.c:849
+msgid "show full <object> or <rev> contents"
+msgstr "hiển thị đầy đủ nội dung <object> hay <rev>"
 
-#: builtin/cat-file.c:671
-msgid "for blob objects, run filters on object's content"
-msgstr "với đối tượng blob, chạy các bộ lọc nội dung của đối tượng"
+#: builtin/cat-file.c:853
+msgid "like --batch, but don't emit <contents>"
+msgstr "giống --batch, nhưng không phát ra <contents>"
 
-#: builtin/cat-file.c:672
-msgid "blob"
-msgstr "blob"
+#: builtin/cat-file.c:857
+msgid "read commands from stdin"
+msgstr "đọc các lệnh từ đầu vào tiêu chuẩn"
 
-#: builtin/cat-file.c:673
-msgid "use a specific path for --textconv/--filters"
-msgstr "dùng một đường dẫn rõ ràng cho --textconv/--filters"
+#: builtin/cat-file.c:861
+msgid "with --batch[-check]: ignores stdin, batches all known objects"
+msgstr ""
+"với --batch[-check]: bỏ qua đầu vào tiêu chuẩn stdin, batch mọi đối tượng đã "
+"biết"
 
-#: builtin/cat-file.c:675
-msgid "allow -s and -t to work with broken/corrupt objects"
-msgstr "cho phép -s và -t để làm việc với các đối tượng sai/hỏng"
+#: builtin/cat-file.c:863
+msgid "Change or optimize batch output"
+msgstr "Thay đổi hay tối ưu hóa đầu ra batch"
 
-#: builtin/cat-file.c:676
+#: builtin/cat-file.c:864
 msgid "buffer --batch output"
 msgstr "đệm kết xuất --batch"
 
-#: builtin/cat-file.c:678
-msgid "show info and content of objects fed from the standard input"
+#: builtin/cat-file.c:866
+msgid "follow in-tree symlinks"
+msgstr "theo liên kết mềm trong-cây"
+
+#: builtin/cat-file.c:868
+msgid "do not order objects before emitting them"
+msgstr "đừng sắp xếp các đối tượng trước khi phát chúng"
+
+#: builtin/cat-file.c:870
+msgid ""
+"Emit object (blob or tree) with conversion or filter (stand-alone, or with "
+"batch)"
 msgstr ""
-"hiển thị thông tin và nội dung của các đối tượng lấy từ đầu vào tiêu chuẩn"
+"Phát đối tượng (blob hoặc cây) với bộ chuyển đổi hoặc bộ lọc (stand-alone, "
+"hoặc với batch)"
 
-#: builtin/cat-file.c:682
-msgid "show info about objects fed from the standard input"
-msgstr "hiển thị các thông tin về đối tượng fed  từ đầu vào tiêu chuẩn"
+#: builtin/cat-file.c:872
+msgid "run textconv on object's content"
+msgstr "chạy lệnh textconv trên nội dung của đối tượng"
 
-#: builtin/cat-file.c:686
-msgid "follow in-tree symlinks (used with --batch or --batch-check)"
-msgstr "theo liên kết mềm trong-cây (được dùng với --batch hay --batch-check)"
+#: builtin/cat-file.c:874
+msgid "run filters on object's content"
+msgstr "chạy các bộ lọc nội dung của đối tượng"
 
-#: builtin/cat-file.c:688
-msgid "show all objects with --batch or --batch-check"
-msgstr "hiển thị mọi đối tượng với --batch hay --batch-check"
+#: builtin/cat-file.c:875
+msgid "blob|tree"
+msgstr "blob|tree"
 
-#: builtin/cat-file.c:690
-msgid "do not order --batch-all-objects output"
-msgstr "đừng sắp xếp đầu ra --batch-all-objects"
+#: builtin/cat-file.c:876
+msgid "use a <path> for (--textconv | --filters); Not with 'batch'"
+msgstr ""
+"dùng một </đường/dẫn/> rõ ràng cho (--textconv/--filters); Không với 'batch'"
 
-#: builtin/check-attr.c:13
-msgid "git check-attr [-a | --all | <attr>...] [--] <pathname>..."
-msgstr "git check-attr [-a | --all | <attr>…] [--] tên-đường-dẫn…"
+#: builtin/cat-file.c:894
+#, c-format
+msgid "'%s=<%s>' needs '%s' or '%s'"
+msgstr "'%s=<%s>' cần '%s' hoặc '%s'"
 
-#: builtin/check-attr.c:14
+#: builtin/cat-file.c:896
+msgid "path|tree-ish"
+msgstr "path|tree-ish"
+
+#: builtin/cat-file.c:903 builtin/cat-file.c:906 builtin/cat-file.c:909
+#, c-format
+msgid "'%s' requires a batch mode"
+msgstr "“%s” cần một chế độ batch"
+
+#: builtin/cat-file.c:921
+#, c-format
+msgid "'-%c' is incompatible with batch mode"
+msgstr "'-%c' là xung khắc với chế độ batch"
+
+#: builtin/cat-file.c:924
+msgid "batch modes take no arguments"
+msgstr "chế độ batch không nhận các đối số"
+
+#: builtin/cat-file.c:932 builtin/cat-file.c:935
+#, c-format
+msgid "<rev> required with '%s'"
+msgstr "cần <rev> với '%s'"
+
+#: builtin/cat-file.c:938
+#, c-format
+msgid "<object> required with '-%c'"
+msgstr "cần <object> với '-%c'"
+
+#: builtin/cat-file.c:943 builtin/notes.c:374 builtin/notes.c:429
+#: builtin/notes.c:507 builtin/notes.c:519 builtin/notes.c:596
+#: builtin/notes.c:663 builtin/notes.c:813 builtin/notes.c:965
+#: builtin/notes.c:987 builtin/prune-packed.c:25 builtin/receive-pack.c:2489
+#: builtin/tag.c:592
+msgid "too many arguments"
+msgstr "có quá nhiều đối số"
+
+#: builtin/cat-file.c:947
+#, c-format
+msgid "only two arguments allowed in <type> <object> mode, not %d"
+msgstr "chỉ hai đối số được phép trong chế độ <type> <object>, không phải %d"
+
+#: builtin/check-attr.c:13
+msgid "git check-attr [-a | --all | <attr>...] [--] <pathname>..."
+msgstr "git check-attr [-a | --all | <attr>…] [--] tên-đường-dẫn…"
+
+#: builtin/check-attr.c:14
 msgid "git check-attr --stdin [-z] [-a | --all | <attr>...]"
 msgstr "git check-attr --stdin [-z] [-a | --all | <attr>…]"
 
@@ -12268,7 +12647,7 @@ msgstr "báo cáo tất cả các thuộc tính đặt trên tập tin"
 msgid "use .gitattributes only from the index"
 msgstr "chỉ dùng .gitattributes từ bảng mục lục"
 
-#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:100
+#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:101
 msgid "read file names from stdin"
 msgstr "đọc tên tập tin từ đầu vào tiêu chuẩn"
 
@@ -12276,8 +12655,8 @@ msgstr "đọc tên tập tin từ đầu vào tiêu chuẩn"
 msgid "terminate input and output records by a NUL character"
 msgstr "chấm dứt các bản ghi vào và ra bằng ký tự NULL"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1532 builtin/gc.c:550
-#: builtin/worktree.c:493
+#: builtin/check-ignore.c:21 builtin/checkout.c:1550 builtin/gc.c:550
+#: builtin/worktree.c:565
 msgid "suppress progress reporting"
 msgstr "chặn các báo cáo tiến trình hoạt động"
 
@@ -12334,160 +12713,164 @@ msgstr "chưa chỉ ra danh bạ"
 msgid "git checkout--worker [<options>]"
 msgstr "git checkout--worker [<các tùy chọn>]"
 
-#: builtin/checkout--worker.c:118 builtin/checkout-index.c:201
-#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1864
-#: builtin/submodule--helper.c:1867 builtin/submodule--helper.c:1875
-#: builtin/submodule--helper.c:2511 builtin/submodule--helper.c:2577
-#: builtin/worktree.c:491 builtin/worktree.c:728
+#: builtin/checkout--worker.c:118 builtin/checkout-index.c:235
+#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1878
+#: builtin/submodule--helper.c:1881 builtin/submodule--helper.c:1889
+#: builtin/submodule--helper.c:2716 builtin/worktree.c:563
+#: builtin/worktree.c:808
 msgid "string"
 msgstr "chuỗi"
 
-#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:236
 msgid "when creating files, prepend <string>"
 msgstr "khi tạo các tập tin, nối thêm <chuỗi>"
 
-#: builtin/checkout-index.c:152
+#: builtin/checkout-index.c:184
 msgid "git checkout-index [<options>] [--] [<file>...]"
 msgstr "git checkout-index [<các tùy chọn>] [--] [<tập-tin>…]"
 
-#: builtin/checkout-index.c:169
+#: builtin/checkout-index.c:201
 msgid "stage should be between 1 and 3 or all"
 msgstr "stage nên giữa 1 và 3 hay all"
 
-#: builtin/checkout-index.c:187
+#: builtin/checkout-index.c:219
 msgid "check out all files in the index"
 msgstr "lấy ra toàn bộ các tập tin trong bảng mục lục"
 
-#: builtin/checkout-index.c:188
+#: builtin/checkout-index.c:221
+msgid "do not skip files with skip-worktree set"
+msgstr "đừng bỏ qua các tập tin với skip-worktree được đặt"
+
+#: builtin/checkout-index.c:222
 msgid "force overwrite of existing files"
 msgstr "ép buộc ghi đè lên tập tin đã sẵn có từ trước"
 
-#: builtin/checkout-index.c:190
+#: builtin/checkout-index.c:224
 msgid "no warning for existing files and files not in index"
 msgstr ""
 "không cảnh báo cho những tập tin tồn tại và không có trong bảng mục lục"
 
-#: builtin/checkout-index.c:192
+#: builtin/checkout-index.c:226
 msgid "don't checkout new files"
 msgstr "không checkout các tập tin mới"
 
-#: builtin/checkout-index.c:194
+#: builtin/checkout-index.c:228
 msgid "update stat information in the index file"
 msgstr "cập nhật thông tin thống kê trong tập tin lưu bảng mục lục mới"
 
-#: builtin/checkout-index.c:198
+#: builtin/checkout-index.c:232
 msgid "read list of paths from the standard input"
 msgstr "đọc danh sách đường dẫn từ đầu vào tiêu chuẩn"
 
-#: builtin/checkout-index.c:200
+#: builtin/checkout-index.c:234
 msgid "write the content to temporary files"
 msgstr "ghi nội dung vào tập tin tạm"
 
-#: builtin/checkout-index.c:204
+#: builtin/checkout-index.c:238
 msgid "copy out the files from named stage"
 msgstr "sao chép ra các tập tin từ bệ phóng có tên"
 
-#: builtin/checkout.c:33
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [<các tùy chọn>] <nhánh>"
 
-#: builtin/checkout.c:34
+#: builtin/checkout.c:35
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [<các tùy chọn>] [<nhánh>] -- <tập-tin>…"
 
-#: builtin/checkout.c:39
+#: builtin/checkout.c:40
 msgid "git switch [<options>] [<branch>]"
 msgstr "git switch [<các tùy chọn>] [<nhánh>]"
 
-#: builtin/checkout.c:44
+#: builtin/checkout.c:45
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<các tùy chọn>] [--source=<nhánh>] <tập tin>…"
 
-#: builtin/checkout.c:198 builtin/checkout.c:237
+#: builtin/checkout.c:199 builtin/checkout.c:238
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "đường dẫn “%s” không có các phiên bản của chúng ta"
 
-#: builtin/checkout.c:200 builtin/checkout.c:239
+#: builtin/checkout.c:201 builtin/checkout.c:240
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "đường dẫn “%s” không có các phiên bản của chúng"
 
-#: builtin/checkout.c:216
+#: builtin/checkout.c:217
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "đường dẫn “%s” không có tất cả các phiên bản cần thiết"
 
-#: builtin/checkout.c:269
+#: builtin/checkout.c:271
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "đường dẫn “%s” không có các phiên bản cần thiết"
 
-#: builtin/checkout.c:286
+#: builtin/checkout.c:291
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "đường dẫn “%s”: không thể hòa trộn"
 
-#: builtin/checkout.c:302
+#: builtin/checkout.c:307
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "Không thể thêm kết quả hòa trộn cho “%s”"
 
-#: builtin/checkout.c:419
+#: builtin/checkout.c:424
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "Đã tạo lại %d xung đột hòa trộn"
 
-#: builtin/checkout.c:424
+#: builtin/checkout.c:429
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "Đã cập nhật đường dẫn %d từ %s"
 
-#: builtin/checkout.c:431
+#: builtin/checkout.c:436
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "Đã cập nhật đường dẫn %d từ mục lục"
 
-#: builtin/checkout.c:454 builtin/checkout.c:457 builtin/checkout.c:460
-#: builtin/checkout.c:464
+#: builtin/checkout.c:459 builtin/checkout.c:462 builtin/checkout.c:465
+#: builtin/checkout.c:469
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "không được dùng “%s” với các đường dẫn cập nhật"
 
-#: builtin/checkout.c:474
+#: builtin/checkout.c:479
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr ""
 "Không thể cập nhật các đường dẫn và chuyển đến nhánh “%s” cùng một lúc."
 
-#: builtin/checkout.c:478
+#: builtin/checkout.c:483
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "không chỉ định “%s” cũng không “%s”"
 
-#: builtin/checkout.c:482
+#: builtin/checkout.c:487
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "phải có “%s” khi không chỉ định “%s”"
 
-#: builtin/checkout.c:487 builtin/checkout.c:492
+#: builtin/checkout.c:492 builtin/checkout.c:497
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "“%s” hay “%s” không thể được sử dụng với %s"
 
-#: builtin/checkout.c:566 builtin/checkout.c:573
+#: builtin/checkout.c:571 builtin/checkout.c:578
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "đường dẫn “%s” không được hòa trộn"
 
-#: builtin/checkout.c:747
+#: builtin/checkout.c:753
 msgid "you need to resolve your current index first"
 msgstr "bạn cần phải giải quyết bảng mục lục hiện tại của bạn trước đã"
 
-#: builtin/checkout.c:797
+#: builtin/checkout.c:809
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -12497,50 +12880,50 @@ msgstr ""
 "sau:\n"
 "%s"
 
-#: builtin/checkout.c:890
+#: builtin/checkout.c:902
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "Không thể thực hiện reflog cho “%s”: %s\n"
 
-#: builtin/checkout.c:934
+#: builtin/checkout.c:947
 msgid "HEAD is now at"
 msgstr "HEAD hiện giờ tại"
 
-#: builtin/checkout.c:938 builtin/clone.c:609 t/helper/test-fast-rebase.c:203
+#: builtin/checkout.c:951 builtin/clone.c:615 t/helper/test-fast-rebase.c:203
 msgid "unable to update HEAD"
 msgstr "không thể cập nhật HEAD"
 
-#: builtin/checkout.c:942
+#: builtin/checkout.c:955
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "Đặt lại nhánh “%s”\n"
 
-#: builtin/checkout.c:945
+#: builtin/checkout.c:958
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "Đã sẵn sàng trên “%s”\n"
 
-#: builtin/checkout.c:949
+#: builtin/checkout.c:962
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "Đã chuyển tới và đặt lại nhánh “%s”\n"
 
-#: builtin/checkout.c:951 builtin/checkout.c:1388
+#: builtin/checkout.c:964 builtin/checkout.c:1398
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "Đã chuyển đến nhánh mới “%s”\n"
 
-#: builtin/checkout.c:953
+#: builtin/checkout.c:966
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "Đã chuyển đến nhánh “%s”\n"
 
-#: builtin/checkout.c:1004
+#: builtin/checkout.c:1017
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " … và nhiều hơn %d.\n"
 
-#: builtin/checkout.c:1010
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -12559,7 +12942,7 @@ msgstr[0] ""
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1029
+#: builtin/checkout.c:1042
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -12580,19 +12963,19 @@ msgstr[0] ""
 " git branch <tên_nhánh_mới> %s\n"
 "\n"
 
-#: builtin/checkout.c:1064
+#: builtin/checkout.c:1077
 msgid "internal error in revision walk"
 msgstr "lỗi nội bộ trong khi di chuyển qua các điểm xét duyệt"
 
-#: builtin/checkout.c:1068
+#: builtin/checkout.c:1081
 msgid "Previous HEAD position was"
 msgstr "Vị trí trước kia của HEAD là"
 
-#: builtin/checkout.c:1114 builtin/checkout.c:1383
+#: builtin/checkout.c:1124 builtin/checkout.c:1393
 msgid "You are on a branch yet to be born"
 msgstr "Bạn tại nhánh mà nó chưa hề được sinh ra"
 
-#: builtin/checkout.c:1196
+#: builtin/checkout.c:1206
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -12601,7 +12984,7 @@ msgstr ""
 "“%s” không thể là cả tập tin nội bộ và một nhánh theo dõi.\n"
 "Vui long dùng -- (và tùy chọn thêm --no-guess) để tránh lẫn lộn"
 
-#: builtin/checkout.c:1203
+#: builtin/checkout.c:1213
 msgid ""
 "If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
 "you can do so by fully qualifying the name with the --track option:\n"
@@ -12621,51 +13004,58 @@ msgstr ""
 "chưa rõ ràng, ví dụ máy chủ “origin”, cân nhắc cài đặt\n"
 "checkout.defaultRemote=origin trong cấu hình của bạn."
 
-#: builtin/checkout.c:1213
+#: builtin/checkout.c:1223
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "“%s” khớp với nhiều (%d) nhánh máy chủ được theo dõi"
 
-#: builtin/checkout.c:1279
+#: builtin/checkout.c:1289
 msgid "only one reference expected"
 msgstr "chỉ cần một tham chiếu"
 
-#: builtin/checkout.c:1296
+#: builtin/checkout.c:1306
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "chỉ cần một tham chiếu, nhưng lại đưa ra %d."
 
-#: builtin/checkout.c:1342 builtin/worktree.c:269 builtin/worktree.c:436
+#: builtin/checkout.c:1352 builtin/worktree.c:338 builtin/worktree.c:508
 #, c-format
 msgid "invalid reference: %s"
 msgstr "tham chiếu không hợp lệ: %s"
 
-#: builtin/checkout.c:1355 builtin/checkout.c:1725
+#: builtin/checkout.c:1365 builtin/checkout.c:1744
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "tham chiếu không phải là một cây:%s"
 
-#: builtin/checkout.c:1402
+#: builtin/checkout.c:1413
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "cần một nhánh, nhưng lại nhận được thẻ “%s”"
 
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1415
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "cần một nhánh, nhưng lại nhận được nhánh máy phục vụ “%s”"
 
-#: builtin/checkout.c:1405 builtin/checkout.c:1413
+#: builtin/checkout.c:1417 builtin/checkout.c:1426
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "cần một nhánh, nhưng lại nhận được “%s”"
 
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1420
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "cần một nhánh, nhưng lại nhận được “%s”"
 
-#: builtin/checkout.c:1424
+#: builtin/checkout.c:1429
+msgid ""
+"If you want to detach HEAD at the commit, try again with the --detach option."
+msgstr ""
+"Nếu bạn muốn tách rời HEAD ở lần chuyển giao, hay thử lại với tùy chọn --"
+"detach."
+
+#: builtin/checkout.c:1442
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
@@ -12673,7 +13063,7 @@ msgstr ""
 "không thể chuyển nhánh trong khi đang hòa trộn\n"
 "Cân nhắc dung \"git merge --quit\" hoặc \"git worktree add\"."
 
-#: builtin/checkout.c:1428
+#: builtin/checkout.c:1446
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
@@ -12681,7 +13071,7 @@ msgstr ""
 "không thể chuyển nhanh ở giữa một phiên am\n"
 "Cân nhắc dùng \"git am --quit\" hoặc \"git worktree add\"."
 
-#: builtin/checkout.c:1432
+#: builtin/checkout.c:1450
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -12689,7 +13079,7 @@ msgstr ""
 "không thể chuyển nhánh trong khi cải tổ\n"
 "Cân nhắc dùng \"git rebase --quit\" hay \"git worktree add\"."
 
-#: builtin/checkout.c:1436
+#: builtin/checkout.c:1454
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -12697,7 +13087,7 @@ msgstr ""
 "không thể chuyển nhánh trong khi  cherry-picking\n"
 "Cân nhắc dùng \"git cherry-pick --quit\" hay \"git worktree add\"."
 
-#: builtin/checkout.c:1440
+#: builtin/checkout.c:1458
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -12705,131 +13095,127 @@ msgstr ""
 "không thể chuyển nhánh trong khi hoàn nguyên\n"
 "Cân nhắc dùng \"git revert --quit\" hoặc \"git worktree add\"."
 
-#: builtin/checkout.c:1444
+#: builtin/checkout.c:1462
 msgid "you are switching branch while bisecting"
 msgstr ""
 "bạn hiện tại đang thực hiện việc chuyển nhánh trong khi đang di chuyển nửa "
 "bước"
 
-#: builtin/checkout.c:1451
+#: builtin/checkout.c:1469
 msgid "paths cannot be used with switching branches"
 msgstr "các đường dẫn không thể dùng cùng với các nhánh chuyển"
 
-#: builtin/checkout.c:1454 builtin/checkout.c:1458 builtin/checkout.c:1462
+#: builtin/checkout.c:1472 builtin/checkout.c:1476 builtin/checkout.c:1480
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "“%s” không thể được sử dụng với các nhánh chuyển"
 
-#: builtin/checkout.c:1466 builtin/checkout.c:1469 builtin/checkout.c:1472
-#: builtin/checkout.c:1477 builtin/checkout.c:1482
+#: builtin/checkout.c:1484 builtin/checkout.c:1487 builtin/checkout.c:1490
+#: builtin/checkout.c:1495 builtin/checkout.c:1500
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "“%s” không thể được dùng với “%s”"
 
-#: builtin/checkout.c:1479
+#: builtin/checkout.c:1497
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "“%s” không thể nhận <điểm-đầu>"
 
-#: builtin/checkout.c:1487
+#: builtin/checkout.c:1505
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "Không thể chuyển nhánh đến một thứ không phải là lần chuyển giao “%s”"
 
-#: builtin/checkout.c:1494
+#: builtin/checkout.c:1512
 msgid "missing branch or commit argument"
 msgstr "thiếu tham số là nhánh hoặc lần chuyển giao"
 
-#: builtin/checkout.c:1537
+#: builtin/checkout.c:1555
 msgid "perform a 3-way merge with the new branch"
 msgstr "thực hiện hòa trộn kiểu 3-way với nhánh mới"
 
-#: builtin/checkout.c:1538 builtin/log.c:1825 parse-options.h:323
+#: builtin/checkout.c:1556 builtin/log.c:1844 parse-options.h:354
 msgid "style"
 msgstr "kiểu"
 
-#: builtin/checkout.c:1539
+#: builtin/checkout.c:1557
 msgid "conflict style (merge, diff3, or zdiff3)"
 msgstr "xung đột kiểu (hòa trộn, diff3 hoặc zdiff3)"
 
-#: builtin/checkout.c:1551 builtin/worktree.c:488
+#: builtin/checkout.c:1569 builtin/worktree.c:560
 msgid "detach HEAD at named commit"
 msgstr "rời bỏ HEAD tại lần chuyển giao theo tên"
 
-#: builtin/checkout.c:1553
-msgid "set up tracking mode (see git-pull(1))"
-msgstr "cài đặt chế độ theo dõi (xem git-pull(1))"
-
-#: builtin/checkout.c:1556
+#: builtin/checkout.c:1574
 msgid "force checkout (throw away local modifications)"
 msgstr "ép buộc lấy ra (bỏ đi những thay đổi nội bộ)"
 
-#: builtin/checkout.c:1558
+#: builtin/checkout.c:1576
 msgid "new-branch"
 msgstr "nhánh-mới"
 
-#: builtin/checkout.c:1558
+#: builtin/checkout.c:1576
 msgid "new unparented branch"
 msgstr "nhánh không cha mới"
 
-#: builtin/checkout.c:1560 builtin/merge.c:305
+#: builtin/checkout.c:1578 builtin/merge.c:305
 msgid "update ignored files (default)"
 msgstr "cập nhật các tập tin bị bỏ qua (mặc định)"
 
-#: builtin/checkout.c:1563
+#: builtin/checkout.c:1581
 msgid "do not check if another worktree is holding the given ref"
 msgstr "không kiểm tra nếu cây làm việc khác đang giữ tham chiếu đã cho"
 
-#: builtin/checkout.c:1576
+#: builtin/checkout.c:1594
 msgid "checkout our version for unmerged files"
 msgstr ""
 "lấy ra (checkout) phiên bản của chúng ta cho các tập tin chưa được hòa trộn"
 
-#: builtin/checkout.c:1579
+#: builtin/checkout.c:1597
 msgid "checkout their version for unmerged files"
 msgstr ""
 "lấy ra (checkout) phiên bản của chúng họ cho các tập tin chưa được hòa trộn"
 
-#: builtin/checkout.c:1583
+#: builtin/checkout.c:1601
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "không giới hạn đặc tả đường dẫn thành chỉ các mục rải rác"
 
-#: builtin/checkout.c:1640
+#: builtin/checkout.c:1659
 #, c-format
 msgid "options '-%c', '-%c', and '%s' cannot be used together"
 msgstr "tùy chọn '-%c', '-%c' và '%s' không thể dùng cùng nhau"
 
-#: builtin/checkout.c:1681
+#: builtin/checkout.c:1700
 msgid "--track needs a branch name"
 msgstr "--track cần tên một nhánh"
 
-#: builtin/checkout.c:1686
+#: builtin/checkout.c:1705
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "thiếu tên nhánh; hãy thử -%c"
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1737
 #, c-format
 msgid "could not resolve %s"
 msgstr "không thể phân giải “%s”"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1753
 msgid "invalid path specification"
 msgstr "đường dẫn đã cho không hợp lệ"
 
-#: builtin/checkout.c:1741
+#: builtin/checkout.c:1760
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr ""
 "“%s” không phải là một lần chuyển giao và một nhánh'%s” không thể được tạo "
 "từ đó"
 
-#: builtin/checkout.c:1745
+#: builtin/checkout.c:1764
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout: --detach không nhận một đối số đường dẫn “%s”"
 
-#: builtin/checkout.c:1770
+#: builtin/checkout.c:1789
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
@@ -12837,71 +13223,71 @@ msgstr ""
 "git checkout: --ours/--theirs, --force và --merge là xung khắc với nhau khi\n"
 "checkout bảng mục lục (index)."
 
-#: builtin/checkout.c:1775
+#: builtin/checkout.c:1794
 msgid "you must specify path(s) to restore"
 msgstr "bạn phải chỉ định các thư mục muốn hồi phục"
 
-#: builtin/checkout.c:1800 builtin/checkout.c:1802 builtin/checkout.c:1854
-#: builtin/checkout.c:1856 builtin/clone.c:126 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2959
-#: builtin/submodule--helper.c:3253 builtin/worktree.c:484
-#: builtin/worktree.c:486
+#: builtin/checkout.c:1819 builtin/checkout.c:1821 builtin/checkout.c:1873
+#: builtin/checkout.c:1875 builtin/clone.c:130 builtin/remote.c:171
+#: builtin/remote.c:173 builtin/submodule--helper.c:3038
+#: builtin/submodule--helper.c:3371 builtin/worktree.c:556
+#: builtin/worktree.c:558
 msgid "branch"
 msgstr "nhánh"
 
-#: builtin/checkout.c:1801
+#: builtin/checkout.c:1820
 msgid "create and checkout a new branch"
 msgstr "tạo và checkout một nhánh mới"
 
-#: builtin/checkout.c:1803
+#: builtin/checkout.c:1822
 msgid "create/reset and checkout a branch"
 msgstr "tạo/đặt_lại và checkout một nhánh"
 
-#: builtin/checkout.c:1804
+#: builtin/checkout.c:1823
 msgid "create reflog for new branch"
 msgstr "tạo reflog cho nhánh mới"
 
-#: builtin/checkout.c:1806
+#: builtin/checkout.c:1825
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr "gợi ý thứ hai “git checkout <không-nhánh-nào-như-vậy>” (mặc định)"
 
-#: builtin/checkout.c:1807
+#: builtin/checkout.c:1826
 msgid "use overlay mode (default)"
 msgstr "dùng chế độ che phủ (mặc định)"
 
-#: builtin/checkout.c:1855
+#: builtin/checkout.c:1874
 msgid "create and switch to a new branch"
 msgstr "tạo và chuyển đến một nhánh mới"
 
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1876
 msgid "create/reset and switch to a branch"
 msgstr "tạo/đặt_lại và chuyển đến một nhánh"
 
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1878
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "gợi ý thứ hai \"git switch <không-nhánh-nào-như-vậy>\""
 
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1880
 msgid "throw away local modifications"
 msgstr "vứt bỏ các sửa đổi địa phương"
 
-#: builtin/checkout.c:1897
+#: builtin/checkout.c:1916
 msgid "which tree-ish to checkout from"
 msgstr "lấy ra từ tree-ish nào"
 
-#: builtin/checkout.c:1899
+#: builtin/checkout.c:1918
 msgid "restore the index"
 msgstr "phục hồi bảng mục lục"
 
-#: builtin/checkout.c:1901
+#: builtin/checkout.c:1920
 msgid "restore the working tree (default)"
 msgstr "phục hồi cây làm việc (mặc định)"
 
-#: builtin/checkout.c:1903
+#: builtin/checkout.c:1922
 msgid "ignore unmerged entries"
 msgstr "bỏ qua những thứ chưa hòa trộn: %s"
 
-#: builtin/checkout.c:1904
+#: builtin/checkout.c:1923
 msgid "use overlay mode"
 msgstr "dùng chế độ che phủ"
 
@@ -13049,8 +13435,8 @@ msgid "remove whole directories"
 msgstr "gỡ bỏ toàn bộ thư mục"
 
 #: builtin/clean.c:932 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:937 builtin/log.c:184 builtin/log.c:186
-#: builtin/ls-files.c:651 builtin/name-rev.c:535 builtin/name-rev.c:537
+#: builtin/grep.c:938 builtin/log.c:185 builtin/log.c:187
+#: builtin/ls-files.c:651 builtin/name-rev.c:585 builtin/name-rev.c:587
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "mẫu"
@@ -13087,210 +13473,214 @@ msgstr ""
 msgid "-x and -X cannot be used together"
 msgstr "-x và -X không thể dùng cùng nhau"
 
-#: builtin/clone.c:45
+#: builtin/clone.c:47
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<các tùy chọn>] [--] <kho> [<t.mục>]"
 
-#: builtin/clone.c:96
+#: builtin/clone.c:100
 msgid "don't clone shallow repository"
 msgstr "đừng nhân bản từ kho nông"
 
-#: builtin/clone.c:98
+#: builtin/clone.c:102
 msgid "don't create a checkout"
 msgstr "không tạo một checkout"
 
-#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:542
+#: builtin/clone.c:103 builtin/clone.c:105 builtin/init-db.c:542
 msgid "create a bare repository"
 msgstr "tạo kho thuần"
 
-#: builtin/clone.c:103
+#: builtin/clone.c:107
 msgid "create a mirror repository (implies bare)"
 msgstr "tạo kho bản sao (ý là kho thuần)"
 
-#: builtin/clone.c:105
+#: builtin/clone.c:109
 msgid "to clone from a local repository"
 msgstr "để nhân bản từ kho nội bộ"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "don't use local hardlinks, always copy"
 msgstr "không sử dụng liên kết cứng nội bộ, luôn sao chép"
 
-#: builtin/clone.c:109
+#: builtin/clone.c:113
 msgid "setup as shared repository"
 msgstr "cài đặt đây là kho chia sẻ"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "pathspec"
 msgstr "đặc-tả-đường-dẫn"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "initialize submodules in the clone"
 msgstr "khởi tạo mô-đun-con trong bản sao"
 
-#: builtin/clone.c:115
+#: builtin/clone.c:119
 msgid "number of submodules cloned in parallel"
 msgstr "số lượng mô-đun-con được nhân bản đồng thời"
 
-#: builtin/clone.c:116 builtin/init-db.c:539
+#: builtin/clone.c:120 builtin/init-db.c:539
 msgid "template-directory"
 msgstr "thư-mục-mẫu"
 
-#: builtin/clone.c:117 builtin/init-db.c:540
+#: builtin/clone.c:121 builtin/init-db.c:540
 msgid "directory from which templates will be used"
 msgstr "thư mục mà tại đó các mẫu sẽ được dùng"
 
-#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1871
-#: builtin/submodule--helper.c:2514 builtin/submodule--helper.c:3260
+#: builtin/clone.c:123 builtin/clone.c:125 builtin/submodule--helper.c:1885
+#: builtin/submodule--helper.c:2719 builtin/submodule--helper.c:3378
 msgid "reference repository"
 msgstr "kho tham chiếu"
 
-#: builtin/clone.c:123 builtin/submodule--helper.c:1873
-#: builtin/submodule--helper.c:2516
+#: builtin/clone.c:127 builtin/submodule--helper.c:1887
+#: builtin/submodule--helper.c:2721
 msgid "use --reference only while cloning"
 msgstr "chỉ dùng --reference khi nhân bản"
 
-#: builtin/clone.c:124 builtin/column.c:27 builtin/fmt-merge-msg.c:27
+#: builtin/clone.c:128 builtin/column.c:27 builtin/fmt-merge-msg.c:27
 #: builtin/init-db.c:550 builtin/merge-file.c:48 builtin/merge.c:290
-#: builtin/pack-objects.c:3944 builtin/repack.c:665
-#: builtin/submodule--helper.c:3262 t/helper/test-simple-ipc.c:595
+#: builtin/pack-objects.c:3967 builtin/repack.c:669
+#: builtin/submodule--helper.c:3380 t/helper/test-simple-ipc.c:595
 #: t/helper/test-simple-ipc.c:597
 msgid "name"
 msgstr "tên"
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "dùng <tên> thay cho “origin” để theo dõi thượng nguồn"
 
-#: builtin/clone.c:127
+#: builtin/clone.c:131
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "lấy ra <nhánh> thay cho HEAD của máy chủ"
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133
 msgid "path to git-upload-pack on the remote"
 msgstr "đường dẫn đến git-upload-pack trên máy chủ"
 
-#: builtin/clone.c:130 builtin/fetch.c:181 builtin/grep.c:876
+#: builtin/clone.c:134 builtin/fetch.c:182 builtin/grep.c:877
 #: builtin/pull.c:212
 msgid "depth"
 msgstr "độ-sâu"
 
-#: builtin/clone.c:131
+#: builtin/clone.c:135
 msgid "create a shallow clone of that depth"
 msgstr "tạo bản sao không đầy đủ cho mức sâu đã cho"
 
-#: builtin/clone.c:132 builtin/fetch.c:183 builtin/pack-objects.c:3933
+#: builtin/clone.c:136 builtin/fetch.c:184 builtin/pack-objects.c:3956
 #: builtin/pull.c:215
 msgid "time"
 msgstr "thời-gian"
 
-#: builtin/clone.c:133
+#: builtin/clone.c:137
 msgid "create a shallow clone since a specific time"
 msgstr "tạo bản sao không đầy đủ từ thời điểm đã cho"
 
-#: builtin/clone.c:134 builtin/fetch.c:185 builtin/fetch.c:208
-#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1022
+#: builtin/clone.c:138 builtin/fetch.c:186 builtin/fetch.c:212
+#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1050
 msgid "revision"
 msgstr "điểm xét duyệt"
 
-#: builtin/clone.c:135 builtin/fetch.c:186 builtin/pull.c:219
+#: builtin/clone.c:139 builtin/fetch.c:187 builtin/pull.c:219
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "làm sâu hơn lịch sử của bản sao shallow, bằng điểm xét duyệt loại trừ"
 
-#: builtin/clone.c:137 builtin/submodule--helper.c:1883
-#: builtin/submodule--helper.c:2530
+#: builtin/clone.c:141 builtin/submodule--helper.c:1897
+#: builtin/submodule--helper.c:2735
 msgid "clone only one branch, HEAD or --branch"
 msgstr "chỉ nhân bản một nhánh, HEAD hoặc --branch"
 
-#: builtin/clone.c:139
+#: builtin/clone.c:143
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr ""
 "đứng có nhân bản bất kỳ nhánh nào, và làm cho những lần lấy về sau không "
 "theo chúng nữa"
 
-#: builtin/clone.c:141
+#: builtin/clone.c:145
 msgid "any cloned submodules will be shallow"
 msgstr "mọi mô-đun-con nhân bản sẽ là shallow (nông)"
 
-#: builtin/clone.c:142 builtin/init-db.c:548
+#: builtin/clone.c:146 builtin/init-db.c:548
 msgid "gitdir"
 msgstr "gitdir"
 
-#: builtin/clone.c:143 builtin/init-db.c:549
+#: builtin/clone.c:147 builtin/init-db.c:549
 msgid "separate git dir from working tree"
 msgstr "không dùng chung thư mục dành riêng cho git và thư mục làm việc"
 
-#: builtin/clone.c:144
+#: builtin/clone.c:148
 msgid "key=value"
 msgstr "khóa=giá_trị"
 
-#: builtin/clone.c:145
+#: builtin/clone.c:149
 msgid "set config inside the new repository"
 msgstr "đặt cấu hình bên trong một kho chứa mới"
 
-#: builtin/clone.c:147 builtin/fetch.c:203 builtin/ls-remote.c:77
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
 #: builtin/pull.c:234 builtin/push.c:575 builtin/send-pack.c:200
 msgid "server-specific"
 msgstr "đặc-tả-máy-phục-vụ"
 
-#: builtin/clone.c:147 builtin/fetch.c:203 builtin/ls-remote.c:77
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
 #: builtin/pull.c:235 builtin/push.c:575 builtin/send-pack.c:201
 msgid "option to transmit"
 msgstr "tùy chọn để chuyển giao"
 
-#: builtin/clone.c:148 builtin/fetch.c:204 builtin/pull.c:238
+#: builtin/clone.c:152 builtin/fetch.c:208 builtin/pull.c:238
 #: builtin/push.c:576
 msgid "use IPv4 addresses only"
 msgstr "chỉ dùng địa chỉ IPv4"
 
-#: builtin/clone.c:150 builtin/fetch.c:206 builtin/pull.c:241
+#: builtin/clone.c:154 builtin/fetch.c:210 builtin/pull.c:241
 #: builtin/push.c:578
 msgid "use IPv6 addresses only"
 msgstr "chỉ dùng địa chỉ IPv6"
 
-#: builtin/clone.c:154
+#: builtin/clone.c:158
+msgid "apply partial clone filters to submodules"
+msgstr "áp dụng các bộ lọc nhân bản một phần cho mô-đun-con"
+
+#: builtin/clone.c:160
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "mọi mô-đun-con nhân bản sẽ dung nhánh theo dõi máy chủ của chúng"
 
-#: builtin/clone.c:156
+#: builtin/clone.c:162
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr "khởi tạo tập tin sparse-checkout để bao gồm chỉ các tập tin ở gốc"
 
-#: builtin/clone.c:231
+#: builtin/clone.c:237
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "thông tin: không thể thêm thay thế cho “%s”: %s\n"
 
-#: builtin/clone.c:304
+#: builtin/clone.c:310
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s có tồn tại nhưng lại không phải là một thư mục"
 
-#: builtin/clone.c:322
+#: builtin/clone.c:328
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "gặp lỗi khi bắt đầu lặp qua “%s”"
 
-#: builtin/clone.c:353
+#: builtin/clone.c:359
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "gặp lỗi khi tạo được liên kết mềm %s"
 
-#: builtin/clone.c:357
+#: builtin/clone.c:363
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "gặp lỗi khi sao chép tập tin và “%s”"
 
-#: builtin/clone.c:362
+#: builtin/clone.c:368
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "gặp lỗi khi lặp qua “%s”"
 
-#: builtin/clone.c:389
+#: builtin/clone.c:395
 #, c-format
 msgid "done.\n"
 msgstr "hoàn tất.\n"
 
-#: builtin/clone.c:403
+#: builtin/clone.c:409
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -13300,101 +13690,101 @@ msgstr ""
 "Bạn kiểm tra kỹ xem cái gì được lấy ra bằng lệnh “git status”\n"
 "và thử lấy ra với lệnh “git restore --source=HEAD :/”\n"
 
-#: builtin/clone.c:480
+#: builtin/clone.c:486
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "Không tìm thấy nhánh máy chủ %s để nhân bản (clone)."
 
-#: builtin/clone.c:597
+#: builtin/clone.c:603
 #, c-format
 msgid "unable to update %s"
 msgstr "không thể cập nhật %s"
 
-#: builtin/clone.c:645
+#: builtin/clone.c:651
 msgid "failed to initialize sparse-checkout"
 msgstr "gặp lỗi khi khởi tạo sparse-checkout"
 
-#: builtin/clone.c:668
+#: builtin/clone.c:674
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr "refers HEAD máy chủ  chỉ đến ref không tồn tại, không thể lấy ra.\n"
 
-#: builtin/clone.c:701
+#: builtin/clone.c:709
 msgid "unable to checkout working tree"
 msgstr "không thể lấy ra (checkout) cây làm việc"
 
-#: builtin/clone.c:779
+#: builtin/clone.c:793
 msgid "unable to write parameters to config file"
 msgstr "không thể ghi các tham số vào tập tin cấu hình"
 
-#: builtin/clone.c:842
+#: builtin/clone.c:856
 msgid "cannot repack to clean up"
 msgstr "không thể đóng gói để dọn dẹp"
 
-#: builtin/clone.c:844
+#: builtin/clone.c:858
 msgid "cannot unlink temporary alternates file"
 msgstr "không thể bỏ liên kết tập tin thay thế tạm thời"
 
-#: builtin/clone.c:886
+#: builtin/clone.c:901
 msgid "Too many arguments."
 msgstr "Có quá nhiều đối số."
 
-#: builtin/clone.c:890 contrib/scalar/scalar.c:414
+#: builtin/clone.c:905 contrib/scalar/scalar.c:413
 msgid "You must specify a repository to clone."
 msgstr "Bạn phải chỉ định một kho để mà nhân bản (clone)."
 
-#: builtin/clone.c:903
+#: builtin/clone.c:918
 #, c-format
 msgid "options '%s' and '%s %s' cannot be used together"
 msgstr "tùy chọn '%s', và '%s %s' không thể dùng cùng nhau"
 
-#: builtin/clone.c:920
+#: builtin/clone.c:935
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "kho chứa “%s” chưa tồn tại"
 
-#: builtin/clone.c:924 builtin/fetch.c:2052
+#: builtin/clone.c:939 builtin/fetch.c:2176
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "độ sâu %s không phải là một số nguyên dương"
 
-#: builtin/clone.c:934
+#: builtin/clone.c:949
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "đường dẫn đích “%s” đã có từ trước và không phải là một thư mục rỗng."
 
-#: builtin/clone.c:940
+#: builtin/clone.c:955
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr ""
 "đường dẫn kho chứa “%s” đã có từ trước và không phải là một thư mục rỗng."
 
-#: builtin/clone.c:954
+#: builtin/clone.c:969
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "cây làm việc “%s” đã sẵn tồn tại rồi."
 
-#: builtin/clone.c:969 builtin/clone.c:990 builtin/difftool.c:256
-#: builtin/log.c:2012 builtin/worktree.c:281 builtin/worktree.c:313
+#: builtin/clone.c:984 builtin/clone.c:1005 builtin/difftool.c:256
+#: builtin/log.c:2037 builtin/worktree.c:350 builtin/worktree.c:382
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "không thể tạo các thư mục dẫn đầu của “%s”"
 
-#: builtin/clone.c:974
+#: builtin/clone.c:989
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "không thể tạo cây thư mục làm việc dir “%s”"
 
-#: builtin/clone.c:994
+#: builtin/clone.c:1009
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "Đang nhân bản thành kho chứa bare “%s”…\n"
 
-#: builtin/clone.c:996
+#: builtin/clone.c:1011
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "Đang nhân bản thành “%s”…\n"
 
-#: builtin/clone.c:1025
+#: builtin/clone.c:1040
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
@@ -13402,50 +13792,54 @@ msgstr ""
 "nhân bản --recursive không tương thích với cả hai --reference và --reference-"
 "if-able"
 
-#: builtin/clone.c:1080 builtin/remote.c:200 builtin/remote.c:710
+#: builtin/clone.c:1116 builtin/remote.c:201 builtin/remote.c:721
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "“%s” không phải tên máy chủ hợp lệ"
 
-#: builtin/clone.c:1121
+#: builtin/clone.c:1157
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "--depth bị lờ đi khi nhân bản nội bộ; hãy sử dụng file:// để thay thế."
 
-#: builtin/clone.c:1123
+#: builtin/clone.c:1159
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-since bị lờ đi khi nhân bản nội bộ; hãy sử dụng file:// để thay "
 "thế."
 
-#: builtin/clone.c:1125
+#: builtin/clone.c:1161
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr ""
 "--shallow-exclude bị lờ đi khi nhân bản nội bộ; hãy sử dụng file:// để thay "
 "thế."
 
-#: builtin/clone.c:1127
+#: builtin/clone.c:1163
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr ""
 "--filter bị lờ đi khi nhân bản nội bộ; hãy sử dụng file:// để thay thế."
 
-#: builtin/clone.c:1132
+#: builtin/clone.c:1168
 msgid "source repository is shallow, ignoring --local"
 msgstr "kho nguồn là nông, nên bỏ qua --local"
 
-#: builtin/clone.c:1137
+#: builtin/clone.c:1173
 msgid "--local is ignored"
 msgstr "--local bị lờ đi"
 
-#: builtin/clone.c:1216 builtin/clone.c:1276
+#: builtin/clone.c:1185
+msgid "cannot clone from filtered bundle"
+msgstr "không thể nhân bản từ bundle được lọc ra"
+
+#: builtin/clone.c:1265 builtin/clone.c:1324
 msgid "remote transport reported error"
 msgstr "vận chuyển máy mạng đã báo cáo lỗi"
 
-#: builtin/clone.c:1228 builtin/clone.c:1239
+#: builtin/clone.c:1277 builtin/clone.c:1289
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "Nhánh máy chủ %s không tìm thấy trong thượng nguồn %s"
 
-#: builtin/clone.c:1242
+#: builtin/clone.c:1292
 msgid "You appear to have cloned an empty repository."
 msgstr "Bạn hình như là đã nhân bản một kho trống rỗng."
 
@@ -13499,7 +13893,7 @@ msgstr ""
 "paths] [--[no-]max-new-filters <n>] [--[no-]progress] <các tùy chọn chia "
 "tách>"
 
-#: builtin/commit-graph.c:51 builtin/fetch.c:192 builtin/log.c:1794
+#: builtin/commit-graph.c:51 builtin/fetch.c:196 builtin/log.c:1813
 msgid "dir"
 msgstr "tmục"
 
@@ -13606,7 +14000,7 @@ msgstr ""
 msgid "duplicate parent %s ignored"
 msgstr "cha mẹ bị trùng lặp %s đã bị bỏ qua"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:577
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:590
 #, c-format
 msgid "not a valid object name %s"
 msgstr "không phải là tên đối tượng hợp lệ “%s”"
@@ -13629,13 +14023,13 @@ msgstr "cha-mẹ"
 msgid "id of a parent commit object"
 msgstr "mã số của đối tượng chuyển giao cha mẹ"
 
-#: builtin/commit-tree.c:112 builtin/commit.c:1627 builtin/merge.c:284
-#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1677
-#: builtin/tag.c:454
+#: builtin/commit-tree.c:112 builtin/commit.c:1626 builtin/merge.c:284
+#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1666
+#: builtin/tag.c:455
 msgid "message"
 msgstr "chú thích"
 
-#: builtin/commit-tree.c:113 builtin/commit.c:1627
+#: builtin/commit-tree.c:113 builtin/commit.c:1626
 msgid "commit message"
 msgstr "chú thích của lần chuyển giao"
 
@@ -13643,7 +14037,7 @@ msgstr "chú thích của lần chuyển giao"
 msgid "read commit log message from file"
 msgstr "đọc chú thích nhật ký lần chuyển giao từ tập tin"
 
-#: builtin/commit-tree.c:119 builtin/commit.c:1644 builtin/merge.c:303
+#: builtin/commit-tree.c:119 builtin/commit.c:1643 builtin/merge.c:303
 #: builtin/pull.c:180 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "Ký lần chuyển giao dùng GPG"
@@ -13656,15 +14050,15 @@ msgstr "phải đưa ra chính xác một cây"
 msgid "git commit-tree: failed to read"
 msgstr "git commit-tree: gặp lỗi khi đọc"
 
-#: builtin/commit.c:42
+#: builtin/commit.c:43
 msgid "git commit [<options>] [--] <pathspec>..."
 msgstr "git commit [<các tùy chọn>] [--] <pathspec>…"
 
-#: builtin/commit.c:47
+#: builtin/commit.c:48
 msgid "git status [<options>] [--] <pathspec>..."
 msgstr "git status [<các tùy chọn>] [--] <pathspec>…"
 
-#: builtin/commit.c:52
+#: builtin/commit.c:53
 msgid ""
 "You asked to amend the most recent commit, but doing so would make\n"
 "it empty. You can repeat your command with --allow-empty, or you can\n"
@@ -13677,7 +14071,7 @@ msgstr ""
 "hoặc là bạn gỡ bỏ các lần chuyển giao một cách hoàn toàn bằng lệnh:\n"
 "\"git reset HEAD^\".\n"
 
-#: builtin/commit.c:57
+#: builtin/commit.c:58
 msgid ""
 "The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
 "If you wish to commit it anyway, use:\n"
@@ -13692,15 +14086,15 @@ msgstr ""
 "    git commit --allow-empty\n"
 "\n"
 
-#: builtin/commit.c:64
+#: builtin/commit.c:65
 msgid "Otherwise, please use 'git rebase --skip'\n"
 msgstr "Nếu không được thì dùng lệnh \"git rebase --skip\"\n"
 
-#: builtin/commit.c:67
+#: builtin/commit.c:68
 msgid "Otherwise, please use 'git cherry-pick --skip'\n"
 msgstr "Nếu không được thì dùng lệnh \"git cherry-pick --skip\"\n"
 
-#: builtin/commit.c:70
+#: builtin/commit.c:71
 msgid ""
 "and then use:\n"
 "\n"
@@ -13722,72 +14116,72 @@ msgstr ""
 "    git cherry-pick --skip\n"
 "\n"
 
-#: builtin/commit.c:325
+#: builtin/commit.c:326
 msgid "failed to unpack HEAD tree object"
 msgstr "gặp lỗi khi tháo dỡ HEAD đối tượng cây"
 
-#: builtin/commit.c:375
+#: builtin/commit.c:376
 msgid "No paths with --include/--only does not make sense."
 msgstr "Không đường dẫn với các tùy chọn --include/--only không hợp lý."
 
-#: builtin/commit.c:387
+#: builtin/commit.c:388
 msgid "unable to create temporary index"
 msgstr "không thể tạo bảng mục lục tạm thời"
 
-#: builtin/commit.c:396
+#: builtin/commit.c:397
 msgid "interactive add failed"
 msgstr "gặp lỗi khi thêm bằng cách tương"
 
-#: builtin/commit.c:411
+#: builtin/commit.c:412
 msgid "unable to update temporary index"
 msgstr "không thể cập nhật bảng mục lục tạm thời"
 
-#: builtin/commit.c:413
+#: builtin/commit.c:414
 msgid "Failed to update main cache tree"
 msgstr "Gặp lỗi khi cập nhật cây bộ nhớ đệm"
 
-#: builtin/commit.c:438 builtin/commit.c:461 builtin/commit.c:509
+#: builtin/commit.c:439 builtin/commit.c:462 builtin/commit.c:510
 msgid "unable to write new_index file"
 msgstr "không thể ghi tập tin lưu bảng mục lục mới (new_index)"
 
-#: builtin/commit.c:490
+#: builtin/commit.c:491
 msgid "cannot do a partial commit during a merge."
 msgstr ""
 "không thể thực hiện việc chuyển giao cục bộ trong khi đang được hòa trộn."
 
-#: builtin/commit.c:492
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr ""
 "không thể thực hiện việc chuyển giao bộ phận trong khi đang cherry-pick."
 
-#: builtin/commit.c:494
+#: builtin/commit.c:495
 msgid "cannot do a partial commit during a rebase."
 msgstr ""
 "không thể thực hiện việc chuyển giao cục bộ trong khi đang thực hiện cải tổ."
 
-#: builtin/commit.c:502
+#: builtin/commit.c:503
 msgid "cannot read the index"
 msgstr "không đọc được bảng mục lục"
 
-#: builtin/commit.c:521
+#: builtin/commit.c:522
 msgid "unable to write temporary index file"
 msgstr "không thể ghi tập tin lưu bảng mục lục tạm thời"
 
-#: builtin/commit.c:619
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "lần chuyển giao “%s” thiếu phần tác giả ở đầu"
 
-#: builtin/commit.c:621
+#: builtin/commit.c:622
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "lần chuyển giao “%s” có phần tác giả ở đầu dị dạng"
 
-#: builtin/commit.c:640
+#: builtin/commit.c:641
 msgid "malformed --author parameter"
 msgstr "đối số cho --author bị dị hình"
 
-#: builtin/commit.c:693
+#: builtin/commit.c:694
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
@@ -13795,43 +14189,43 @@ msgstr ""
 "không thể chọn một ký tự ghi chú cái mà không được dùng\n"
 "trong phần ghi chú hiện tại"
 
-#: builtin/commit.c:747 builtin/commit.c:781 builtin/commit.c:1166
+#: builtin/commit.c:750 builtin/commit.c:784 builtin/commit.c:1170
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "không thể tìm kiếm commit (lần chuyển giao) %s"
 
-#: builtin/commit.c:759 builtin/shortlog.c:416
+#: builtin/commit.c:762 builtin/shortlog.c:417
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(đang đọc thông điệp nhật ký từ đầu vào tiêu chuẩn)\n"
 
-#: builtin/commit.c:761
+#: builtin/commit.c:764
 msgid "could not read log from standard input"
 msgstr "không thể đọc nhật ký từ đầu vào tiêu chuẩn"
 
-#: builtin/commit.c:765
+#: builtin/commit.c:768
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "không đọc được tệp nhật ký “%s”"
 
-#: builtin/commit.c:802
+#: builtin/commit.c:805
 #, c-format
 msgid "options '%s' and '%s:%s' cannot be used together"
 msgstr "tùy chọn '%s', và '%s:%s' không thể dùng cùng nhau"
 
-#: builtin/commit.c:814 builtin/commit.c:830
+#: builtin/commit.c:817 builtin/commit.c:833
 msgid "could not read SQUASH_MSG"
 msgstr "không thể đọc SQUASH_MSG"
 
-#: builtin/commit.c:821
+#: builtin/commit.c:824
 msgid "could not read MERGE_MSG"
 msgstr "không thể đọc MERGE_MSG"
 
-#: builtin/commit.c:881
+#: builtin/commit.c:884
 msgid "could not write commit template"
 msgstr "không thể ghi mẫu chuyển giao"
 
-#: builtin/commit.c:894
+#: builtin/commit.c:897
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13840,7 +14234,7 @@ msgstr ""
 "Hãy nhập vào các thông tin để giải thích các thay đổi của bạn. Những\n"
 "dòng được bắt đầu bằng “%c” sẽ được bỏ qua.\n"
 
-#: builtin/commit.c:896
+#: builtin/commit.c:899
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13851,7 +14245,7 @@ msgstr ""
 "bắt đầu bằng “%c” sẽ được bỏ qua, nếu phần chú thích rỗng sẽ hủy bỏ lần "
 "chuyển giao.\n"
 
-#: builtin/commit.c:900
+#: builtin/commit.c:903
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13861,7 +14255,7 @@ msgstr ""
 "được\n"
 "bắt đầu bằng “%c” sẽ được bỏ qua; bạn có thể xóa chúng đi nếu muốn thế.\n"
 
-#: builtin/commit.c:904
+#: builtin/commit.c:907
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13873,7 +14267,7 @@ msgstr ""
 "bắt đầu bằng “%c” sẽ được bỏ qua; bạn có thể xóa chúng đi nếu muốn thế.\n"
 "Phần chú thích này nếu trống rỗng sẽ hủy bỏ lần chuyển giao.\n"
 
-#: builtin/commit.c:916
+#: builtin/commit.c:919
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -13887,7 +14281,7 @@ msgstr ""
 "\tgit update-ref -d MERGE_HEAD\n"
 "và thử lại.\n"
 
-#: builtin/commit.c:921
+#: builtin/commit.c:924
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -13901,180 +14295,158 @@ msgstr ""
 "\tgit update-ref -d CHERRY_PICK_HEAD\n"
 "và thử lại.\n"
 
-#: builtin/commit.c:948
+#: builtin/commit.c:951
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%sTác giả:           %.*s <%.*s>"
 
-#: builtin/commit.c:956
+#: builtin/commit.c:959
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%sNgày tháng:        %s"
 
-#: builtin/commit.c:963
+#: builtin/commit.c:966
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%sNgười chuyển giao: %.*s <%.*s>"
 
-#: builtin/commit.c:981
+#: builtin/commit.c:984
 msgid "Cannot read index"
 msgstr "Không đọc được bảng mục lục"
 
-#: builtin/commit.c:1026
+#: builtin/commit.c:1029
 msgid "unable to pass trailers to --trailers"
 msgstr "không thể chuyển phần đuôi cho “--trailers”"
 
-#: builtin/commit.c:1066
+#: builtin/commit.c:1069
 msgid "Error building trees"
 msgstr "Gặp lỗi khi xây dựng cây"
 
-#: builtin/commit.c:1080 builtin/tag.c:316
+#: builtin/commit.c:1083 builtin/tag.c:317
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "Xin hãy cung cấp lời chú giải hoặc là dùng tùy chọn -m hoặc là -F.\n"
 
-#: builtin/commit.c:1124
+#: builtin/commit.c:1128
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr ""
 "--author “%s” không phải là “Họ và tên <thư điện tửl>” và không khớp bất kỳ "
 "tác giả nào sẵn có"
 
-#: builtin/commit.c:1138
+#: builtin/commit.c:1142
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "Chế độ bỏ qua không hợp lệ “%s”"
 
-#: builtin/commit.c:1156 builtin/commit.c:1451
+#: builtin/commit.c:1160 builtin/commit.c:1450
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "Chế độ cho các tập tin chưa được theo dõi không hợp lệ “%s”"
 
-#: builtin/commit.c:1227
+#: builtin/commit.c:1231
 msgid "You are in the middle of a merge -- cannot reword."
 msgstr ""
 "Bạn đang ở giữa của quá trình hòa trộn -- không thể thực hiện việc “reword”."
 
-#: builtin/commit.c:1229
+#: builtin/commit.c:1233
 msgid "You are in the middle of a cherry-pick -- cannot reword."
 msgstr ""
 "Bạn đang ở giữa của quá trình cherry-pick -- không thể thực hiện việc "
 "“reword”."
 
-#: builtin/commit.c:1232
+#: builtin/commit.c:1236
 #, c-format
 msgid "reword option of '%s' and path '%s' cannot be used together"
 msgstr ""
 "không thể tổ hợp tùy chọn \"reword\" của '%s' với đường dẫn '%s' cùng nhau"
 
-#: builtin/commit.c:1234
+#: builtin/commit.c:1238
 #, c-format
 msgid "reword option of '%s' and '%s' cannot be used together"
 msgstr "không thể tổ hợp tùy chọn \"reword\" của '%s' với '%s' cùng nhau"
 
-#: builtin/commit.c:1254
-msgid "Using both --reset-author and --author does not make sense"
-msgstr "Sử dụng cả hai tùy chọn --reset-author và --author không hợp lý"
-
-#: builtin/commit.c:1261
+#: builtin/commit.c:1263
 msgid "You have nothing to amend."
 msgstr "Không có gì để mà “tu bổ” cả."
 
-#: builtin/commit.c:1264
+#: builtin/commit.c:1266
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr ""
 "Bạn đang ở giữa của quá trình hòa trộn -- không thể thực hiện việc “tu bổ”."
 
-#: builtin/commit.c:1266
+#: builtin/commit.c:1268
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr ""
 "Bạn đang ở giữa của quá trình cherry-pick -- không thể thực hiện việc “tu "
 "bổ”."
 
-#: builtin/commit.c:1268
+#: builtin/commit.c:1270
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr ""
 "Bạn đang ở giữa của quá trình cải tổ -- nên không thể thực hiện việc “tu bổ”."
 
-#: builtin/commit.c:1271
-msgid "Options --squash and --fixup cannot be used together"
-msgstr "Các tùy chọn --squash và --fixup không thể sử dụng cùng với nhau"
-
-#: builtin/commit.c:1281
-msgid "Only one of -c/-C/-F/--fixup can be used."
-msgstr "Chỉ được dùng một trong số tùy chọn trong số -c/-C/-F/--fixup."
-
-#: builtin/commit.c:1283
-msgid "Option -m cannot be combined with -c/-C/-F."
-msgstr "Tùy chọn -m không thể được tổ hợp cùng với -c/-C/-F."
-
-#: builtin/commit.c:1292
+#: builtin/commit.c:1290
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr ""
 "--reset-author chỉ có thể được sử dụng với tùy chọn -C, -c hay --amend."
 
-#: builtin/commit.c:1310
-msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
-msgstr ""
-"Chỉ một trong các tùy chọn --include/--only/--all/--interactive/--patch được "
-"sử dụng."
-
-#: builtin/commit.c:1338
+#: builtin/commit.c:1337
 #, c-format
 msgid "unknown option: --fixup=%s:%s"
 msgstr "không hiểu tùy chọn: --fixup=%s:%s"
 
-#: builtin/commit.c:1355
+#: builtin/commit.c:1354
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "các đường dẫn “%s …” với tùy chọn -a không hợp lý"
 
-#: builtin/commit.c:1486 builtin/commit.c:1655
+#: builtin/commit.c:1485 builtin/commit.c:1654
 msgid "show status concisely"
 msgstr "hiển thị trạng thái ở dạng súc tích"
 
-#: builtin/commit.c:1488 builtin/commit.c:1657
+#: builtin/commit.c:1487 builtin/commit.c:1656
 msgid "show branch information"
 msgstr "hiển thị thông tin nhánh"
 
-#: builtin/commit.c:1490
+#: builtin/commit.c:1489
 msgid "show stash information"
 msgstr "hiển thị thông tin về tạm cất"
 
-#: builtin/commit.c:1492 builtin/commit.c:1659
+#: builtin/commit.c:1491 builtin/commit.c:1658
 msgid "compute full ahead/behind values"
 msgstr "tính đầy đủ giá trị trước/sau"
 
-#: builtin/commit.c:1494
+#: builtin/commit.c:1493
 msgid "version"
 msgstr "phiên bản"
 
-#: builtin/commit.c:1494 builtin/commit.c:1661 builtin/push.c:551
-#: builtin/worktree.c:690
+#: builtin/commit.c:1493 builtin/commit.c:1660 builtin/push.c:551
+#: builtin/worktree.c:765
 msgid "machine-readable output"
 msgstr "kết xuất dạng máy-có-thể-đọc"
 
-#: builtin/commit.c:1497 builtin/commit.c:1663
+#: builtin/commit.c:1496 builtin/commit.c:1662
 msgid "show status in long format (default)"
 msgstr "hiển thị trạng thái ở định dạng dài (mặc định)"
 
-#: builtin/commit.c:1500 builtin/commit.c:1666
+#: builtin/commit.c:1499 builtin/commit.c:1665
 msgid "terminate entries with NUL"
 msgstr "chấm dứt các mục bằng NUL"
 
-#: builtin/commit.c:1502 builtin/commit.c:1506 builtin/commit.c:1669
+#: builtin/commit.c:1501 builtin/commit.c:1505 builtin/commit.c:1668
 #: builtin/fast-export.c:1172 builtin/fast-export.c:1175
-#: builtin/fast-export.c:1178 builtin/rebase.c:1111 parse-options.h:337
+#: builtin/fast-export.c:1178 builtin/rebase.c:1139 parse-options.h:368
 msgid "mode"
 msgstr "chế độ"
 
-#: builtin/commit.c:1503 builtin/commit.c:1669
+#: builtin/commit.c:1502 builtin/commit.c:1668
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr ""
 "hiển thị các tập tin chưa được theo dõi  dấu vết, các chế độ tùy chọn:  all, "
 "normal, no. (Mặc định: all)"
 
-#: builtin/commit.c:1507
+#: builtin/commit.c:1506
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
@@ -14082,11 +14454,11 @@ msgstr ""
 "hiển thị các tập tin bị bỏ qua, các chế độ tùy chọn: traditional, matching, "
 "no. (Mặc định: traditional)"
 
-#: builtin/commit.c:1509 parse-options.h:192
+#: builtin/commit.c:1508 parse-options.h:197
 msgid "when"
 msgstr "khi"
 
-#: builtin/commit.c:1510
+#: builtin/commit.c:1509
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
@@ -14094,199 +14466,199 @@ msgstr ""
 "bỏ qua các thay đổi trong mô-đun-con, tùy chọn khi: all, dirty, untracked. "
 "(Mặc định: all)"
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1511
 msgid "list untracked files in columns"
 msgstr "hiển thị danh sách các tập-tin chưa được theo dõi trong các cột"
 
-#: builtin/commit.c:1513
+#: builtin/commit.c:1512
 msgid "do not detect renames"
 msgstr "không dò tìm các tên thay đổi"
 
-#: builtin/commit.c:1515
+#: builtin/commit.c:1514
 msgid "detect renames, optionally set similarity index"
 msgstr "dò các tên thay đổi, tùy ý đặt mục lục tương tự"
 
-#: builtin/commit.c:1538
+#: builtin/commit.c:1537
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr ""
 "Không hỗ trỡ tổ hợp các tham số các tập tin bị bỏ qua và không được theo dõi"
 
-#: builtin/commit.c:1620
+#: builtin/commit.c:1619
 msgid "suppress summary after successful commit"
 msgstr "không hiển thị tổng kết sau khi chuyển giao thành công"
 
-#: builtin/commit.c:1621
+#: builtin/commit.c:1620
 msgid "show diff in commit message template"
 msgstr "hiển thị sự khác biệt trong mẫu tin nhắn chuyển giao"
 
-#: builtin/commit.c:1623
+#: builtin/commit.c:1622
 msgid "Commit message options"
 msgstr "Các tùy chọn ghi chú commit"
 
-#: builtin/commit.c:1624 builtin/merge.c:288 builtin/tag.c:456
+#: builtin/commit.c:1623 builtin/merge.c:288 builtin/tag.c:457
 msgid "read message from file"
 msgstr "đọc chú thích từ tập tin"
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1624
 msgid "author"
 msgstr "tác giả"
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1624
 msgid "override author for commit"
 msgstr "ghi đè tác giả cho commit"
 
-#: builtin/commit.c:1626 builtin/gc.c:551
+#: builtin/commit.c:1625 builtin/gc.c:551
 msgid "date"
 msgstr "ngày tháng"
 
-#: builtin/commit.c:1626
+#: builtin/commit.c:1625
 msgid "override date for commit"
 msgstr "ghi đè ngày tháng cho lần chuyển giao"
 
-#: builtin/commit.c:1628 builtin/commit.c:1629 builtin/commit.c:1635
-#: parse-options.h:329 ref-filter.h:89
+#: builtin/commit.c:1627 builtin/commit.c:1628 builtin/commit.c:1634
+#: parse-options.h:360 ref-filter.h:89
 msgid "commit"
 msgstr "lần_chuyển_giao"
 
-#: builtin/commit.c:1628
+#: builtin/commit.c:1627
 msgid "reuse and edit message from specified commit"
 msgstr "dùng lại các ghi chú từ lần chuyển giao đã cho nhưng có cho sửa chữa"
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1628
 msgid "reuse message from specified commit"
 msgstr "dùng lại các ghi chú từ lần chuyển giao đã cho"
 
 #. TRANSLATORS: Leave "[(amend|reword):]" as-is,
 #. and only translate <commit>.
 #.
-#: builtin/commit.c:1634
+#: builtin/commit.c:1633
 msgid "[(amend|reword):]commit"
 msgstr "[(amend|reword):]commit"
 
-#: builtin/commit.c:1634
+#: builtin/commit.c:1633
 msgid ""
 "use autosquash formatted message to fixup or amend/reword specified commit"
 msgstr ""
 "dùng ghi chú có định dạng autosquash để sửa chữa hoặc tu bổ/reword lần "
 "chuyển giao đã chỉ ra"
 
-#: builtin/commit.c:1635
+#: builtin/commit.c:1634
 msgid "use autosquash formatted message to squash specified commit"
 msgstr ""
 "dùng lời nhắn có định dạng tự động nén để nén lại các lần chuyển giao đã chỉ "
 "ra"
 
-#: builtin/commit.c:1636
+#: builtin/commit.c:1635
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr ""
 "lần chuyển giao nhận tôi là tác giả (được dùng với tùy chọn -C/-c/--amend)"
 
-#: builtin/commit.c:1637 builtin/interpret-trailers.c:111
+#: builtin/commit.c:1636 builtin/interpret-trailers.c:111
 msgid "trailer"
 msgstr "bộ dò vết"
 
-#: builtin/commit.c:1637
+#: builtin/commit.c:1636
 msgid "add custom trailer(s)"
 msgstr "thêm đuôi tự chọn"
 
-#: builtin/commit.c:1638 builtin/log.c:1769 builtin/merge.c:306
+#: builtin/commit.c:1637 builtin/log.c:1788 builtin/merge.c:306
 #: builtin/pull.c:146 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr "thêm dòng Signed-off-by vào cuối"
 
-#: builtin/commit.c:1639
+#: builtin/commit.c:1638
 msgid "use specified template file"
 msgstr "sử dụng tập tin mẫu đã cho"
 
-#: builtin/commit.c:1640
+#: builtin/commit.c:1639
 msgid "force edit of commit"
 msgstr "ép buộc sửa lần commit"
 
-#: builtin/commit.c:1642
+#: builtin/commit.c:1641
 msgid "include status in commit message template"
 msgstr "bao gồm các trạng thái trong mẫu ghi chú chuyển giao"
 
-#: builtin/commit.c:1647
+#: builtin/commit.c:1646
 msgid "Commit contents options"
 msgstr "Các tùy nội dung ghi chú commit"
 
-#: builtin/commit.c:1648
+#: builtin/commit.c:1647
 msgid "commit all changed files"
 msgstr "chuyển giao tất cả các tập tin có thay đổi"
 
-#: builtin/commit.c:1649
+#: builtin/commit.c:1648
 msgid "add specified files to index for commit"
 msgstr "thêm các tập tin đã chỉ ra vào bảng mục lục để chuyển giao"
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1649
 msgid "interactively add files"
 msgstr "thêm các tập-tin bằng tương tác"
 
-#: builtin/commit.c:1651
+#: builtin/commit.c:1650
 msgid "interactively add changes"
 msgstr "thêm các thay đổi bằng tương tác"
 
-#: builtin/commit.c:1652
+#: builtin/commit.c:1651
 msgid "commit only specified files"
 msgstr "chỉ chuyển giao các tập tin đã chỉ ra"
 
-#: builtin/commit.c:1653
+#: builtin/commit.c:1652
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr "vòng qua móc (hook) pre-commit và commit-msg"
 
-#: builtin/commit.c:1654
+#: builtin/commit.c:1653
 msgid "show what would be committed"
 msgstr "hiển thị xem cái gì có thể được chuyển giao"
 
-#: builtin/commit.c:1667
+#: builtin/commit.c:1666
 msgid "amend previous commit"
 msgstr "“tu bổ” (amend) lần commit trước"
 
-#: builtin/commit.c:1668
+#: builtin/commit.c:1667
 msgid "bypass post-rewrite hook"
 msgstr "vòng qua móc (hook) post-rewrite"
 
-#: builtin/commit.c:1675
+#: builtin/commit.c:1674
 msgid "ok to record an empty change"
 msgstr "ok để ghi lại một thay đổi trống rỗng"
 
-#: builtin/commit.c:1677
+#: builtin/commit.c:1676
 msgid "ok to record a change with an empty message"
 msgstr "ok để ghi các thay đổi với lời nhắn trống rỗng"
 
-#: builtin/commit.c:1753
+#: builtin/commit.c:1752
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "Tập tin MERGE_HEAD sai hỏng (%s)"
 
-#: builtin/commit.c:1760
+#: builtin/commit.c:1759
 msgid "could not read MERGE_MODE"
 msgstr "không thể đọc MERGE_MODE"
 
-#: builtin/commit.c:1781
+#: builtin/commit.c:1780
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "không thể đọc phần chú thích (message) của lần chuyển giao: %s"
 
-#: builtin/commit.c:1788
+#: builtin/commit.c:1787
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "Bãi bỏ việc chuyển giao bởi vì phần chú thích của nó trống rỗng.\n"
 
-#: builtin/commit.c:1793
+#: builtin/commit.c:1792
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr ""
 "Đang bỏ qua việc chuyển giao; bạn đã không biên soạn phần chú thích "
 "(message).\n"
 
-#: builtin/commit.c:1804
+#: builtin/commit.c:1803
 #, c-format
 msgid "Aborting commit due to empty commit message body.\n"
 msgstr ""
 "Bãi bỏ việc chuyển giao bởi vì phần thân chú thích của nó trống rỗng.\n"
 
-#: builtin/commit.c:1840
+#: builtin/commit.c:1839
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -14410,6 +14782,10 @@ msgstr "tìm các cài đặt về màu sắc: slot [stdout-là-tty]"
 msgid "Type"
 msgstr "Kiểu"
 
+#: builtin/config.c:154 builtin/env--helper.c:42 builtin/hash-object.c:97
+msgid "type"
+msgstr "kiểu"
+
 #: builtin/config.c:154 builtin/env--helper.c:43
 msgid "value is given this type"
 msgstr "giá trị được đưa kiểu này"
@@ -14624,10 +15000,6 @@ msgstr ""
 msgid "no such section: %s"
 msgstr "không có đoạn: %s"
 
-#: builtin/count-objects.c:90
-msgid "git count-objects [-v] [-H | --human-readable]"
-msgstr "git count-objects [-v] [-H | --human-readable]"
-
 #: builtin/count-objects.c:100
 msgid "print sizes in human readable format"
 msgstr "hiển thị kích cỡ theo định dạng dành cho người đọc"
@@ -14794,7 +15166,7 @@ msgstr "chỉ cân nhắc đến những thẻ khớp với <mẫu>"
 msgid "do not consider tags matching <pattern>"
 msgstr "không coi rằng các thẻ khớp với <mẫu>"
 
-#: builtin/describe.c:570 builtin/name-rev.c:544
+#: builtin/describe.c:570 builtin/name-rev.c:595
 msgid "show abbreviated commit object as fallback"
 msgstr "hiển thị đối tượng chuyển giao vắn tắt như là fallback"
 
@@ -14842,7 +15214,7 @@ msgstr "%s…%s: không có cơ sở hòa trộn"
 msgid "Not a git repository"
 msgstr "Không phải là kho git"
 
-#: builtin/diff.c:537 builtin/grep.c:698
+#: builtin/diff.c:537 builtin/grep.c:700
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "đối tượng đã cho “%s” không hợp lệ."
@@ -14960,11 +15332,11 @@ msgstr "chuyển cho “diff”"
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool cần cây làm việc hoặc --no-index"
 
-#: builtin/difftool.c:744
+#: builtin/difftool.c:745
 msgid "no <tool> given for --tool=<tool>"
 msgstr "chưa đưa ra <công_cụ> cho --tool=<công_cụ>"
 
-#: builtin/difftool.c:751
+#: builtin/difftool.c:752
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "chưa đưa ra <lệnh> cho --extcmd=<lệnh>"
 
@@ -14972,10 +15344,6 @@ msgstr "chưa đưa ra <lệnh> cho --extcmd=<lệnh>"
 msgid "git env--helper --type=[bool|ulong] <options> <env-var>"
 msgstr "git env--helper --type=[bool|ulong] <các tùy chọn> <env-var>"
 
-#: builtin/env--helper.c:42 builtin/hash-object.c:96
-msgid "type"
-msgstr "kiểu"
-
 #: builtin/env--helper.c:46
 msgid "default for git_env_*(...) to fall back on"
 msgstr "mặc định cho git_env_*(…) để quay về"
@@ -15000,8 +15368,8 @@ msgstr ""
 "type=ulong“, không phải “%s“"
 
 #: builtin/fast-export.c:29
-msgid "git fast-export [rev-list-opts]"
-msgstr "git fast-export [rev-list-opts]"
+msgid "git fast-export [<rev-list-opts>]"
+msgstr "git fast-export [<rev-list-opts>]"
 
 #: builtin/fast-export.c:843
 msgid "Error: Cannot export nested tags unless --mark-tags is specified."
@@ -15056,7 +15424,7 @@ msgstr "sử dụng tính năng done để chấm dứt luồng dữ liệu"
 msgid "skip output of blob data"
 msgstr "bỏ qua kết xuất của dữ liệu blob"
 
-#: builtin/fast-export.c:1196 builtin/log.c:1841
+#: builtin/fast-export.c:1196 builtin/log.c:1860
 msgid "refspec"
 msgstr "refspec"
 
@@ -15090,37 +15458,37 @@ msgstr "hiển thị các mã id nguyên gốc của blobs/commits"
 msgid "label tags with mark ids"
 msgstr "gắn thẻ với các mã ID đánh dấu"
 
-#: builtin/fast-import.c:3090
+#: builtin/fast-import.c:3097
 #, c-format
 msgid "Missing from marks for submodule '%s'"
 msgstr "Thiếu các đánh dấu cho mô-đun-con “%s”"
 
-#: builtin/fast-import.c:3092
+#: builtin/fast-import.c:3099
 #, c-format
 msgid "Missing to marks for submodule '%s'"
 msgstr "Thiếu đánh dấu cho mô-đun-con “%s”"
 
-#: builtin/fast-import.c:3227
+#: builtin/fast-import.c:3234
 #, c-format
 msgid "Expected 'mark' command, got %s"
 msgstr "Cần lệnh “mark”, nhưng lại nhận được %s"
 
-#: builtin/fast-import.c:3232
+#: builtin/fast-import.c:3239
 #, c-format
 msgid "Expected 'to' command, got %s"
 msgstr "Cần lệnh “to”, nhưng lại nhận được %s"
 
-#: builtin/fast-import.c:3324
+#: builtin/fast-import.c:3331
 msgid "Expected format name:filename for submodule rewrite option"
 msgstr "Cần định dạng tên:tên_tập_tin cho tùy chọn ghi lại mô-đun-con"
 
-#: builtin/fast-import.c:3379
+#: builtin/fast-import.c:3386
 #, c-format
 msgid "feature '%s' forbidden in input without --allow-unsafe-features"
 msgstr ""
 "tính năng “%s” bị cấm chỉ trong đầu vào mà không có --allow-unsafe-features"
 
-#: builtin/fetch-pack.c:242
+#: builtin/fetch-pack.c:246
 #, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr "Tập tin khóa đã được tạo nhưng chưa được báo cáo: %s"
@@ -15141,103 +15509,107 @@ msgstr "git fetch --multiple [<các tùy chọn>] [(<kho> | <nhóm>)…]"
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<các tùy chọn>]"
 
-#: builtin/fetch.c:123
+#: builtin/fetch.c:124
 msgid "fetch.parallel cannot be negative"
 msgstr "fetch.parallel không thể âm"
 
-#: builtin/fetch.c:146 builtin/pull.c:189
+#: builtin/fetch.c:147 builtin/pull.c:189
 msgid "fetch from all remotes"
 msgstr "lấy về từ tất cả các máy chủ"
 
-#: builtin/fetch.c:148 builtin/pull.c:249
+#: builtin/fetch.c:149 builtin/pull.c:249
 msgid "set upstream for git pull/fetch"
 msgstr "đặt thượng nguồn cho git pull/fetch"
 
-#: builtin/fetch.c:150 builtin/pull.c:192
+#: builtin/fetch.c:151 builtin/pull.c:192
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "nối thêm vào .git/FETCH_HEAD thay vì ghi đè lên nó"
 
-#: builtin/fetch.c:152
+#: builtin/fetch.c:153
 msgid "use atomic transaction to update references"
 msgstr "sử dụng giao dịch hạt nhân bên phía máy chủ"
 
-#: builtin/fetch.c:154 builtin/pull.c:195
+#: builtin/fetch.c:155 builtin/pull.c:195
 msgid "path to upload pack on remote end"
 msgstr "đường dẫn đến gói tải lên trên máy chủ cuối"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:156
 msgid "force overwrite of local reference"
 msgstr "ép buộc ghi đè lên tham chiếu nội bộ"
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:158
 msgid "fetch from multiple remotes"
 msgstr "lấy từ nhiều máy chủ cùng lúc"
 
-#: builtin/fetch.c:159 builtin/pull.c:199
+#: builtin/fetch.c:160 builtin/pull.c:199
 msgid "fetch all tags and associated objects"
 msgstr "lấy tất cả các thẻ cùng với các đối tượng liên quan đến nó"
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:162
 msgid "do not fetch all tags (--no-tags)"
 msgstr "không lấy tất cả các thẻ (--no-tags)"
 
-#: builtin/fetch.c:163
+#: builtin/fetch.c:164
 msgid "number of submodules fetched in parallel"
 msgstr "số lượng mô-đun-con được lấy đồng thời"
 
-#: builtin/fetch.c:165
+#: builtin/fetch.c:166
 msgid "modify the refspec to place all refs within refs/prefetch/"
 msgstr ""
 "sửa đặc tả đường dẫn cho các tham chiếu mọi chỗ có trong refs/prefetch/"
 
-#: builtin/fetch.c:167 builtin/pull.c:202
+#: builtin/fetch.c:168 builtin/pull.c:202
 msgid "prune remote-tracking branches no longer on remote"
 msgstr ""
 "cắt cụt (prune) các nhánh “remote-tracking” không còn tồn tại trên máy chủ "
 "nữa"
 
-#: builtin/fetch.c:169
+#: builtin/fetch.c:170
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr "cắt xém các thẻ nội bộ không còn ở máy chủ và xóa các thẻ đã thay đổi"
 
-#: builtin/fetch.c:170 builtin/fetch.c:195 builtin/pull.c:123
+#: builtin/fetch.c:171 builtin/fetch.c:199 builtin/pull.c:123
 msgid "on-demand"
 msgstr "khi-cần"
 
-#: builtin/fetch.c:171
+#: builtin/fetch.c:172
 msgid "control recursive fetching of submodules"
 msgstr "điều khiển việc lấy về đệ quy trong các mô-đun-con"
 
-#: builtin/fetch.c:176
+#: builtin/fetch.c:177
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr "ghi các tham chiếu lấy về vào tập tin FETCH_HEAD"
 
-#: builtin/fetch.c:177 builtin/pull.c:210
+#: builtin/fetch.c:178 builtin/pull.c:210
 msgid "keep downloaded pack"
 msgstr "giữ lại gói đã tải về"
 
-#: builtin/fetch.c:179
+#: builtin/fetch.c:180
 msgid "allow updating of HEAD ref"
 msgstr "cho phép cập nhật th.chiếu HEAD"
 
-#: builtin/fetch.c:182 builtin/fetch.c:188 builtin/pull.c:213
+#: builtin/fetch.c:183 builtin/fetch.c:189 builtin/pull.c:213
 #: builtin/pull.c:222
 msgid "deepen history of shallow clone"
 msgstr "làm sâu hơn lịch sử của bản sao"
 
-#: builtin/fetch.c:184 builtin/pull.c:216
+#: builtin/fetch.c:185 builtin/pull.c:216
 msgid "deepen history of shallow repository based on time"
 msgstr "làm sâu hơn lịch sử của kho bản sao shallow dựa trên thời gian"
 
-#: builtin/fetch.c:190 builtin/pull.c:225
+#: builtin/fetch.c:191 builtin/pull.c:225
 msgid "convert to a complete repository"
 msgstr "chuyển đổi hoàn toàn sang kho git"
 
-#: builtin/fetch.c:193
+#: builtin/fetch.c:194
+msgid "re-fetch without negotiating common commits"
+msgstr "re-fetch mà không dàn xếp các lần chuyển giao chung"
+
+#: builtin/fetch.c:197
 msgid "prepend this to submodule path output"
 msgstr "soạn sẵn cái này cho kết xuất đường dẫn mô-đun-con"
 
-#: builtin/fetch.c:196
+#: builtin/fetch.c:200
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
@@ -15245,108 +15617,103 @@ msgstr ""
 "mặc định cho việc lấy đệ quy các mô-đun-con (có mức ưu tiên thấp hơn các tập "
 "tin cấu hình config)"
 
-#: builtin/fetch.c:200 builtin/pull.c:228
+#: builtin/fetch.c:204 builtin/pull.c:228
 msgid "accept refs that update .git/shallow"
 msgstr "chấp nhận tham chiếu cập nhật .git/shallow"
 
-#: builtin/fetch.c:201 builtin/pull.c:230
+#: builtin/fetch.c:205 builtin/pull.c:230
 msgid "refmap"
 msgstr "refmap"
 
-#: builtin/fetch.c:202 builtin/pull.c:231
+#: builtin/fetch.c:206 builtin/pull.c:231
 msgid "specify fetch refmap"
 msgstr "chỉ ra refmap cần lấy về"
 
-#: builtin/fetch.c:209 builtin/pull.c:244
+#: builtin/fetch.c:213 builtin/pull.c:244
 msgid "report that we have only objects reachable from this object"
 msgstr ""
 "báo cáo rằng chúng ta chỉ có các đối tượng tiếp cận được từ đối tượng này"
 
-#: builtin/fetch.c:211
+#: builtin/fetch.c:215
 msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
 msgstr ""
 "không lấy về một packfile; thay vào đó, hãy in tổ tiên của đỉnh đàm phán"
 
-#: builtin/fetch.c:214 builtin/fetch.c:216
+#: builtin/fetch.c:218 builtin/fetch.c:220
 msgid "run 'maintenance --auto' after fetching"
 msgstr "chạy “maintenance --auto” sau khi lấy về"
 
-#: builtin/fetch.c:218 builtin/pull.c:247
+#: builtin/fetch.c:222 builtin/pull.c:247
 msgid "check for forced-updates on all updated branches"
 msgstr "kiểm cho các-cập-nhật-bắt-buộc trên mọi nhánh đã cập nhật"
 
-#: builtin/fetch.c:220
+#: builtin/fetch.c:224
 msgid "write the commit-graph after fetching"
 msgstr "ghi ra đồ thị các lần chuyển giao sau khi lấy về"
 
-#: builtin/fetch.c:222
+#: builtin/fetch.c:226
 msgid "accept refspecs from stdin"
 msgstr "chấp nhận tham chiếu từ đầu vào tiêu chuẩn"
 
-#: builtin/fetch.c:592
+#: builtin/fetch.c:618
 msgid "couldn't find remote ref HEAD"
 msgstr "không thể tìm thấy HEAD tham chiếu máy chủ"
 
-#: builtin/fetch.c:766
-#, c-format
-msgid "configuration fetch.output contains invalid value %s"
-msgstr "phần cấu hình fetch.output có chứa giá-trị không hợp lệ %s"
-
-#: builtin/fetch.c:867
+#: builtin/fetch.c:893
 #, c-format
 msgid "object %s not found"
 msgstr "không tìm thấy đối tượng %s"
 
-#: builtin/fetch.c:871
+#: builtin/fetch.c:897
 msgid "[up to date]"
 msgstr "[đã cập nhật]"
 
-#: builtin/fetch.c:883 builtin/fetch.c:901 builtin/fetch.c:973
+#: builtin/fetch.c:909 builtin/fetch.c:927 builtin/fetch.c:999
 msgid "[rejected]"
 msgstr "[Bị từ chối]"
 
-#: builtin/fetch.c:885
+#: builtin/fetch.c:911
 msgid "can't fetch in current branch"
 msgstr "không thể fetch (lấy) về nhánh hiện hành"
 
-#: builtin/fetch.c:886
+#: builtin/fetch.c:912
 msgid "checked out in another worktree"
 msgstr "lấy ra trong cây làm việc khác"
 
-#: builtin/fetch.c:896
+#: builtin/fetch.c:922
 msgid "[tag update]"
 msgstr "[cập nhật thẻ]"
 
-#: builtin/fetch.c:897 builtin/fetch.c:934 builtin/fetch.c:956
-#: builtin/fetch.c:968
+#: builtin/fetch.c:923 builtin/fetch.c:960 builtin/fetch.c:982
+#: builtin/fetch.c:994
 msgid "unable to update local ref"
 msgstr "không thể cập nhật tham chiếu nội bộ"
 
-#: builtin/fetch.c:901
+#: builtin/fetch.c:927
 msgid "would clobber existing tag"
 msgstr "nên xóa chồng các thẻ có sẵn"
 
-#: builtin/fetch.c:923
+#: builtin/fetch.c:949
 msgid "[new tag]"
 msgstr "[thẻ mới]"
 
-#: builtin/fetch.c:926
+#: builtin/fetch.c:952
 msgid "[new branch]"
 msgstr "[nhánh mới]"
 
-#: builtin/fetch.c:929
+#: builtin/fetch.c:955
 msgid "[new ref]"
 msgstr "[ref (tham chiếu) mới]"
 
-#: builtin/fetch.c:968
+#: builtin/fetch.c:994
 msgid "forced update"
 msgstr "cưỡng bức cập nhật"
 
-#: builtin/fetch.c:973
+#: builtin/fetch.c:999
 msgid "non-fast-forward"
 msgstr "không-phải-chuyển-tiếp-nhanh"
 
-#: builtin/fetch.c:1076
+#: builtin/fetch.c:1102
 msgid ""
 "fetch normally indicates which branches had a forced update,\n"
 "but that check has been disabled; to re-enable, use '--show-forced-updates'\n"
@@ -15356,7 +15723,7 @@ msgstr ""
 "nhưng lựa chọn bị tắt; để kích hoạt lại, sử dụng cờ\n"
 "“--show-forced-updates” hoặc chạy “git config fetch.showForcedUpdates true”."
 
-#: builtin/fetch.c:1080
+#: builtin/fetch.c:1106
 #, c-format
 msgid ""
 "it took %.2f seconds to check forced updates; you can use\n"
@@ -15369,22 +15736,22 @@ msgstr ""
 "false”\n"
 "để tránh kiểm tra này\n"
 
-#: builtin/fetch.c:1112
+#: builtin/fetch.c:1136
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s đã không gửi tất cả các đối tượng cần thiết\n"
 
-#: builtin/fetch.c:1141
+#: builtin/fetch.c:1156
 #, c-format
 msgid "rejected %s because shallow roots are not allowed to be updated"
 msgstr "từ chối %s bởi vì các gốc nông thì không được phép cập nhật"
 
-#: builtin/fetch.c:1231 builtin/fetch.c:1379
+#: builtin/fetch.c:1259 builtin/fetch.c:1418
 #, c-format
 msgid "From %.*s\n"
 msgstr "Từ %.*s\n"
 
-#: builtin/fetch.c:1252
+#: builtin/fetch.c:1269
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -15393,49 +15760,49 @@ msgstr ""
 "một số tham chiếu nội bộ không thể được cập nhật; hãy thử chạy\n"
 " “git remote prune %s” để bỏ đi những nhánh cũ, hay bị xung đột"
 
-#: builtin/fetch.c:1349
+#: builtin/fetch.c:1377
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s sẽ trở thành không đầu (không được quản lý))"
 
-#: builtin/fetch.c:1350
+#: builtin/fetch.c:1378
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s đã trở thành không đầu (không được quản lý))"
 
-#: builtin/fetch.c:1382
+#: builtin/fetch.c:1421
 msgid "[deleted]"
 msgstr "[đã xóa]"
 
-#: builtin/fetch.c:1383 builtin/remote.c:1128
+#: builtin/fetch.c:1422 builtin/remote.c:1153
 msgid "(none)"
 msgstr "(không)"
 
-#: builtin/fetch.c:1405
+#: builtin/fetch.c:1446
 #, c-format
 msgid "refusing to fetch into branch '%s' checked out at '%s'"
 msgstr "từ chối lấy về vào nhánh “%s” đã được lấy ra tại “%s”"
 
-#: builtin/fetch.c:1425
+#: builtin/fetch.c:1466
 #, c-format
 msgid "option \"%s\" value \"%s\" is not valid for %s"
 msgstr "tùy chọn \"%s\" có giá trị \"%s\" là không hợp lệ cho %s"
 
-#: builtin/fetch.c:1428
+#: builtin/fetch.c:1469
 #, c-format
 msgid "option \"%s\" is ignored for %s\n"
 msgstr "tùy chọn \"%s\" bị bỏ qua với %s\n"
 
-#: builtin/fetch.c:1455
+#: builtin/fetch.c:1496
 #, c-format
 msgid "the object %s does not exist"
 msgstr "đối tượng “%s” không tồn tại"
 
-#: builtin/fetch.c:1643
+#: builtin/fetch.c:1748
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr "phát hiện nhiều nhánh, không tương thích với --set-upstream"
 
-#: builtin/fetch.c:1655
+#: builtin/fetch.c:1760
 #, c-format
 msgid ""
 "could not set upstream of HEAD to '%s' from '%s' when it does not point to "
@@ -15444,19 +15811,19 @@ msgstr ""
 "không thể đặt thượng nguồn của HEAD thành '%s' từ '%s' khi mà nó chẳng chỉ "
 "đến nhánh nào cả."
 
-#: builtin/fetch.c:1668
+#: builtin/fetch.c:1773
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr "không cài đặt thượng nguồn cho một nhánh được theo dõi trên máy chủ"
 
-#: builtin/fetch.c:1670
+#: builtin/fetch.c:1775
 msgid "not setting upstream for a remote tag"
 msgstr "không cài đặt thượng nguồn cho một thẻ nhánh trên máy chủ"
 
-#: builtin/fetch.c:1672
+#: builtin/fetch.c:1777
 msgid "unknown branch type"
 msgstr "không hiểu kiểu nhánh"
 
-#: builtin/fetch.c:1674
+#: builtin/fetch.c:1779
 msgid ""
 "no source branch found;\n"
 "you need to specify exactly one branch with the --set-upstream option"
@@ -15464,22 +15831,22 @@ msgstr ""
 "không tìm thấy nhánh nguồn.\n"
 "bạn cần phải chỉ định chính xác một nhánh với tùy chọn --set-upstream"
 
-#: builtin/fetch.c:1804 builtin/fetch.c:1867
+#: builtin/fetch.c:1904 builtin/fetch.c:1967
 #, c-format
 msgid "Fetching %s\n"
 msgstr "Đang lấy “%s” về\n"
 
-#: builtin/fetch.c:1814 builtin/fetch.c:1869
+#: builtin/fetch.c:1914 builtin/fetch.c:1969
 #, c-format
 msgid "could not fetch %s"
 msgstr "không thể lấy “%s” về"
 
-#: builtin/fetch.c:1826
+#: builtin/fetch.c:1926
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr "không thể lấy “%s” (mã thoát: %d)\n"
 
-#: builtin/fetch.c:1930
+#: builtin/fetch.c:2030
 msgid ""
 "no remote repository specified; please specify either a URL or a\n"
 "remote name from which new revisions should be fetched"
@@ -15487,48 +15854,48 @@ msgstr ""
 "chưa chỉ ra kho chứa máy chủ; xin hãy chỉ định hoặc là URL hoặc\n"
 "tên máy chủ từ cái mà những điểm xét duyệt mới có thể được fetch (lấy về)"
 
-#: builtin/fetch.c:1966
+#: builtin/fetch.c:2066
 msgid "you need to specify a tag name"
 msgstr "bạn cần chỉ định một tên thẻ"
 
-#: builtin/fetch.c:2032
-msgid "--negotiate-only needs one or more --negotiate-tip=*"
-msgstr "--negotiate-only cần một tham số hay nhiều --negotiate-tip=* hơn"
+#: builtin/fetch.c:2156
+msgid "--negotiate-only needs one or more --negotiation-tip=*"
+msgstr "--negotiate-only cần một hay nhiều --negotiation-tip=* hơn"
 
-#: builtin/fetch.c:2036
+#: builtin/fetch.c:2160
 msgid "negative depth in --deepen is not supported"
 msgstr "mức sâu là số âm trong --deepen là không được hỗ trợ"
 
-#: builtin/fetch.c:2045
+#: builtin/fetch.c:2169
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "--unshallow trên kho hoàn chỉnh là không hợp lý"
 
-#: builtin/fetch.c:2062
+#: builtin/fetch.c:2186
 msgid "fetch --all does not take a repository argument"
 msgstr "lệnh lấy về \"fetch --all\" không lấy đối số kho chứa"
 
-#: builtin/fetch.c:2064
+#: builtin/fetch.c:2188
 msgid "fetch --all does not make sense with refspecs"
 msgstr "lệnh lấy về \"fetch --all\" không hợp lý với refspecs"
 
-#: builtin/fetch.c:2073
+#: builtin/fetch.c:2197
 #, c-format
 msgid "no such remote or remote group: %s"
 msgstr "không có nhóm máy chủ hay máy chủ như thế: %s"
 
-#: builtin/fetch.c:2081
+#: builtin/fetch.c:2205
 msgid "fetching a group and specifying refspecs does not make sense"
 msgstr "việc lấy về một nhóm và chỉ định refspecs là không hợp lý"
 
-#: builtin/fetch.c:2097
+#: builtin/fetch.c:2221
 msgid "must supply remote when using --negotiate-only"
 msgstr "phải cung cấp máy chủ khi sử dụng --negotiate-only"
 
-#: builtin/fetch.c:2102
+#: builtin/fetch.c:2226
 msgid "protocol does not support --negotiate-only, exiting"
 msgstr "giao thức không hỗ trợ --negotiate-only, nên thoát"
 
-#: builtin/fetch.c:2121
+#: builtin/fetch.c:2246
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
@@ -15536,11 +15903,11 @@ msgstr ""
 "--filter chỉ có thể được dùng với máy chủ được cấu hình bằng extensions."
 "partialclone"
 
-#: builtin/fetch.c:2125
+#: builtin/fetch.c:2250
 msgid "--atomic can only be used when fetching from one remote"
 msgstr "--atomic chỉ có thể dùng khi lấy về từ một máy chủ"
 
-#: builtin/fetch.c:2129
+#: builtin/fetch.c:2254
 msgid "--stdin can only be used when fetching from one remote"
 msgstr "--stdin chỉ có thể dùng khi lấy về từ một máy chủ"
 
@@ -15615,7 +15982,7 @@ msgstr "trích dẫn để phù hợp cho Tcl"
 msgid "show only <n> matched refs"
 msgstr "hiển thị chỉ <n> tham chiếu khớp"
 
-#: builtin/for-each-ref.c:42 builtin/tag.c:481
+#: builtin/for-each-ref.c:42 builtin/tag.c:482
 msgid "respect format colors"
 msgstr "các màu định dạng lưu tâm"
 
@@ -15809,7 +16176,7 @@ msgstr "Đang kiểm tra các thư mục đối tượng"
 msgid "Checking %s link"
 msgstr "Đang lấy liên kết %s"
 
-#: builtin/fsck.c:710 builtin/index-pack.c:859
+#: builtin/fsck.c:710 builtin/index-pack.c:862
 #, c-format
 msgid "invalid %s"
 msgstr "%s không hợp lệ"
@@ -15878,7 +16245,7 @@ msgstr "cũng cân nhắc đến các đối tượng gói và thay thế"
 msgid "check only connectivity"
 msgstr "chỉ kiểm tra kết nối"
 
-#: builtin/fsck.c:798 builtin/mktag.c:76
+#: builtin/fsck.c:798 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr "cho phép kiểm tra hạn chế hơn"
 
@@ -15908,6 +16275,118 @@ msgstr "%s: thiếu đối tượng"
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "tham số không hợp lệ: cần sha1, nhưng lại nhận được “%s”"
 
+#: builtin/fsmonitor--daemon.c:13
+msgid "git fsmonitor--daemon start [<options>]"
+msgstr "git fsmonitor--daemon start [<các tùy chọn>]"
+
+#: builtin/fsmonitor--daemon.c:14
+msgid "git fsmonitor--daemon run [<options>]"
+msgstr "git fsmonitor--daemon run [<các tùy chọn>]"
+
+#: builtin/fsmonitor--daemon.c:15
+msgid "git fsmonitor--daemon stop"
+msgstr "git fsmonitor--daemon stop"
+
+#: builtin/fsmonitor--daemon.c:16
+msgid "git fsmonitor--daemon status"
+msgstr "git fsmonitor--daemon status"
+
+#: builtin/fsmonitor--daemon.c:38 builtin/fsmonitor--daemon.c:47
+#, c-format
+msgid "value of '%s' out of range: %d"
+msgstr "siá trị '%s' ngoài phạm vi cho phép: %d"
+
+#: builtin/fsmonitor--daemon.c:57
+#, c-format
+msgid "value of '%s' not bool or int: %d"
+msgstr "giá trị của '%s' không là bool hoặc int: %d"
+
+#: builtin/fsmonitor--daemon.c:99
+#, c-format
+msgid "fsmonitor-daemon is watching '%s'\n"
+msgstr "fsmonitor-daemon đang theo dõi '%s'\n"
+
+#: builtin/fsmonitor--daemon.c:104
+#, c-format
+msgid "fsmonitor-daemon is not watching '%s'\n"
+msgstr "fsmonitor-daemon hiện không theo dõi '%s'\n"
+
+#: builtin/fsmonitor--daemon.c:170
+#, c-format
+msgid "could not create fsmonitor cookie '%s'"
+msgstr "không thể tạo fsmonitor cookie “%s”"
+
+#: builtin/fsmonitor--daemon.c:753
+#, c-format
+msgid "fsmonitor: cookie_result '%d' != SEEN"
+msgstr "fsmonitor: cookie_result '%d' != SEEN"
+
+#: builtin/fsmonitor--daemon.c:1187
+#, c-format
+msgid "could not start IPC thread pool on '%s'"
+msgstr "không thể khởi chạy bể tiến trình IPC trêm “%s”"
+
+#: builtin/fsmonitor--daemon.c:1199
+msgid "could not start fsmonitor listener thread"
+msgstr "không thể lấy thông tin thống kê về tuyến trình lắng nghe fsmonitor"
+
+#: builtin/fsmonitor--daemon.c:1297
+msgid "could not initialize listener thread"
+msgstr "không thể khởi tạo tuyến trình lắng nghe"
+
+#: builtin/fsmonitor--daemon.c:1328 builtin/fsmonitor--daemon.c:1383
+#, c-format
+msgid "fsmonitor--daemon is already running '%s'"
+msgstr "fsmonitor--daemon hiện đang chạy rồi '%s'"
+
+#: builtin/fsmonitor--daemon.c:1332
+#, c-format
+msgid "running fsmonitor-daemon in '%s'\n"
+msgstr "chạy fsmonitor-daemon trong '%s'\n"
+
+#: builtin/fsmonitor--daemon.c:1387
+#, c-format
+msgid "starting fsmonitor-daemon in '%s'\n"
+msgstr "đang khởi chạy fsmonitor-daemon trong “%s”\n"
+
+#: builtin/fsmonitor--daemon.c:1413
+msgid "daemon failed to start"
+msgstr "gặp lỗi khi khởi chạy dịch vụ chạy ngầm"
+
+#: builtin/fsmonitor--daemon.c:1416
+msgid "daemon not online yet"
+msgstr "ứng dụng chạy ngầm hiện chưa trực tuyến"
+
+#: builtin/fsmonitor--daemon.c:1419
+msgid "daemon terminated"
+msgstr "dịch vụ chạy ngầm đã bị dừng"
+
+#: builtin/fsmonitor--daemon.c:1429
+msgid "detach from console"
+msgstr "tách rời khỏi bảng điều khiển"
+
+#: builtin/fsmonitor--daemon.c:1432
+msgid "use <n> ipc worker threads"
+msgstr "dùng <n> tuyến trình làm việc ipc"
+
+#: builtin/fsmonitor--daemon.c:1435
+msgid "max seconds to wait for background daemon startup"
+msgstr "số giây chờ tối đa khi khởi động dịch vụ chạy nền"
+
+#: builtin/fsmonitor--daemon.c:1449
+#, c-format
+msgid "invalid 'ipc-threads' value (%d)"
+msgstr "giá trị 'ipc-threads' không hợp lệ (%d)"
+
+#: builtin/fsmonitor--daemon.c:1464
+#, c-format
+msgid "Unhandled subcommand '%s'"
+msgstr "Lệnh con không được xử lý '%s'"
+
+#: builtin/fsmonitor--daemon.c:1477
+msgid "fsmonitor--daemon not supported on this platform"
+msgstr "fsmonitor--daemon không hỗ trợ trên nền tảng này"
+
 #: builtin/gc.c:39
 msgid "git gc [<options>]"
 msgstr "git gc [<các tùy chọn>]"
@@ -16156,8 +16635,8 @@ msgstr "gặp lỗi khi khởi chạy systemctl"
 msgid "failed to run systemctl"
 msgstr "gặp lỗi khi chạy systemctl"
 
-#: builtin/gc.c:2210 builtin/gc.c:2215 builtin/worktree.c:62
-#: builtin/worktree.c:944
+#: builtin/gc.c:2210 builtin/gc.c:2215 builtin/worktree.c:63
+#: builtin/worktree.c:1024
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "gặp lỗi khi xóa “%s”"
@@ -16205,16 +16684,16 @@ msgstr "git maintenance run <lệnh_con> [<các tùy chọn>]"
 msgid "invalid subcommand: %s"
 msgstr "lện con không hợp lệ: %s"
 
-#: builtin/grep.c:30
+#: builtin/grep.c:32
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<các tùy chọn>] [-e] <mẫu> [<rev>…] [[--] </đường/dẫn>…]"
 
-#: builtin/grep.c:239
+#: builtin/grep.c:241
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep: gặp lỗi tạo tuyến (thread): %s"
 
-#: builtin/grep.c:293
+#: builtin/grep.c:295
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "số tuyến đã cho không hợp lệ (%d) cho %s"
@@ -16223,259 +16702,251 @@ msgstr "số tuyến đã cho không hợp lệ (%d) cho %s"
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:301 builtin/index-pack.c:1582 builtin/index-pack.c:1785
-#: builtin/pack-objects.c:3142
+#: builtin/grep.c:303 builtin/index-pack.c:1587 builtin/index-pack.c:1791
+#: builtin/pack-objects.c:3150
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "không hỗ trợ đa tuyến, bỏ qua %s"
 
-#: builtin/grep.c:488 builtin/grep.c:617 builtin/grep.c:657
+#: builtin/grep.c:490 builtin/grep.c:619 builtin/grep.c:659
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "không thể đọc cây (%s)"
 
-#: builtin/grep.c:672
+#: builtin/grep.c:674
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "không thể thực hiện lệnh grep (lọc tìm) từ đối tượng thuộc kiểu %s"
 
-#: builtin/grep.c:752
+#: builtin/grep.c:754
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "chuyển đến “%c” cần một giá trị bằng số"
 
-#: builtin/grep.c:851
+#: builtin/grep.c:852
 msgid "search in index instead of in the work tree"
 msgstr "tìm trong bảng mục lục thay vì trong cây làm việc"
 
-#: builtin/grep.c:853
+#: builtin/grep.c:854
 msgid "find in contents not managed by git"
 msgstr "tìm trong nội dung không được quản lý bởi git"
 
-#: builtin/grep.c:855
+#: builtin/grep.c:856
 msgid "search in both tracked and untracked files"
 msgstr "tìm kiếm các tập tin được và chưa được theo dõi dấu vết"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:858
 msgid "ignore files specified via '.gitignore'"
 msgstr "các tập tin bị bỏ qua được chỉ định thông qua “.gitignore”"
 
-#: builtin/grep.c:859
+#: builtin/grep.c:860
 msgid "recursively search in each submodule"
 msgstr "tìm kiếm đệ quy trong từng mô-đun-con"
 
-#: builtin/grep.c:862
+#: builtin/grep.c:863
 msgid "show non-matching lines"
 msgstr "hiển thị những dòng không khớp với mẫu"
 
-#: builtin/grep.c:864
+#: builtin/grep.c:865
 msgid "case insensitive matching"
 msgstr "phân biệt HOA/thường"
 
-#: builtin/grep.c:866
+#: builtin/grep.c:867
 msgid "match patterns only at word boundaries"
 msgstr "chỉ khớp mẫu tại đường ranh giới từ"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:869
 msgid "process binary files as text"
 msgstr "xử lý tập tin nhị phân như là dạng văn bản thường"
 
-#: builtin/grep.c:870
+#: builtin/grep.c:871
 msgid "don't match patterns in binary files"
 msgstr "không khớp mẫu trong các tập tin nhị phân"
 
-#: builtin/grep.c:873
+#: builtin/grep.c:874
 msgid "process binary files with textconv filters"
 msgstr "xử lý tập tin nhị phân với các bộ lọc “textconv”"
 
-#: builtin/grep.c:875
+#: builtin/grep.c:876
 msgid "search in subdirectories (default)"
 msgstr "tìm kiếm trong thư mục con (mặc định)"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:878
 msgid "descend at most <depth> levels"
 msgstr "hạ xuống ít nhất là mức <sâu>"
 
-#: builtin/grep.c:881
+#: builtin/grep.c:882
 msgid "use extended POSIX regular expressions"
 msgstr "dùng biểu thức chính qui POSIX có mở rộng"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:885
 msgid "use basic POSIX regular expressions (default)"
 msgstr "sử dụng biểu thức chính quy kiểu POSIX (mặc định)"
 
-#: builtin/grep.c:887
+#: builtin/grep.c:888
 msgid "interpret patterns as fixed strings"
 msgstr "diễn dịch các mẫu như là chuỗi cố định"
 
-#: builtin/grep.c:890
+#: builtin/grep.c:891
 msgid "use Perl-compatible regular expressions"
 msgstr "sử dụng biểu thức chính quy tương thích Perl"
 
-#: builtin/grep.c:893
+#: builtin/grep.c:894
 msgid "show line numbers"
 msgstr "hiển thị số của dòng"
 
-#: builtin/grep.c:894
+#: builtin/grep.c:895
 msgid "show column number of first match"
 msgstr "hiển thị số cột của khớp với mẫu đầu tiên"
 
-#: builtin/grep.c:895
+#: builtin/grep.c:896
 msgid "don't show filenames"
 msgstr "không hiển thị tên tập tin"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:897
 msgid "show filenames"
 msgstr "hiển thị các tên tập tin"
 
-#: builtin/grep.c:898
+#: builtin/grep.c:899
 msgid "show filenames relative to top directory"
 msgstr "hiển thị tên tập tin tương đối với thư mục đỉnh (top)"
 
-#: builtin/grep.c:900
+#: builtin/grep.c:901
 msgid "show only filenames instead of matching lines"
 msgstr "chỉ hiển thị tên tập tin thay vì những dòng khớp với mẫu"
 
-#: builtin/grep.c:902
+#: builtin/grep.c:903
 msgid "synonym for --files-with-matches"
 msgstr "đồng nghĩa với --files-with-matches"
 
-#: builtin/grep.c:905
+#: builtin/grep.c:906
 msgid "show only the names of files without match"
 msgstr "chỉ hiển thị tên cho những tập tin không khớp với mẫu"
 
-#: builtin/grep.c:907
+#: builtin/grep.c:908
 msgid "print NUL after filenames"
 msgstr "thêm NUL vào sau tên tập tin"
 
-#: builtin/grep.c:910
+#: builtin/grep.c:911
 msgid "show only matching parts of a line"
 msgstr "chỉ hiển thị những phần khớp với mẫu của một dòng"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:913
 msgid "show the number of matches instead of matching lines"
 msgstr "hiển thị số lượng khớp thay vì những dòng khớp với mẫu"
 
-#: builtin/grep.c:913
+#: builtin/grep.c:914
 msgid "highlight matches"
 msgstr "tô sáng phần khớp mẫu"
 
-#: builtin/grep.c:915
+#: builtin/grep.c:916
 msgid "print empty line between matches from different files"
 msgstr "hiển thị dòng trống giữa các lần khớp từ các tập tin khác biệt"
 
-#: builtin/grep.c:917
+#: builtin/grep.c:918
 msgid "show filename only once above matches from same file"
 msgstr ""
 "hiển thị tên tập tin một lần phía trên các lần khớp từ cùng một tập tin"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:921
 msgid "show <n> context lines before and after matches"
 msgstr "hiển thị <n> dòng nội dung phía trước và sau các lần khớp"
 
-#: builtin/grep.c:923
+#: builtin/grep.c:924
 msgid "show <n> context lines before matches"
 msgstr "hiển thị <n> dòng nội dung trước khớp"
 
-#: builtin/grep.c:925
+#: builtin/grep.c:926
 msgid "show <n> context lines after matches"
 msgstr "hiển thị <n> dòng nội dung sau khớp"
 
-#: builtin/grep.c:927
+#: builtin/grep.c:928
 msgid "use <n> worker threads"
 msgstr "dùng <n> tuyến trình làm việc"
 
-#: builtin/grep.c:928
+#: builtin/grep.c:929
 msgid "shortcut for -C NUM"
 msgstr "dạng viết tắt của -C SỐ"
 
-#: builtin/grep.c:931
+#: builtin/grep.c:932
 msgid "show a line with the function name before matches"
 msgstr "hiển thị dòng vói tên hàm trước các lần khớp"
 
-#: builtin/grep.c:933
+#: builtin/grep.c:934
 msgid "show the surrounding function"
 msgstr "hiển thị hàm bao quanh"
 
-#: builtin/grep.c:936
+#: builtin/grep.c:937
 msgid "read patterns from file"
 msgstr "đọc mẫu từ tập-tin"
 
-#: builtin/grep.c:938
+#: builtin/grep.c:939
 msgid "match <pattern>"
 msgstr "match <mẫu>"
 
-#: builtin/grep.c:940
+#: builtin/grep.c:941
 msgid "combine patterns specified with -e"
 msgstr "tổ hợp mẫu được chỉ ra với tùy chọn -e"
 
-#: builtin/grep.c:952
+#: builtin/grep.c:953
 msgid "indicate hit with exit status without output"
 msgstr "đưa ra gợi ý với trạng thái thoát mà không có kết xuất"
 
-#: builtin/grep.c:954
+#: builtin/grep.c:955
 msgid "show only matches from files that match all patterns"
 msgstr "chỉ hiển thị những cái khớp từ tập tin mà nó khớp toàn bộ các mẫu"
 
-#: builtin/grep.c:957
+#: builtin/grep.c:958
 msgid "pager"
 msgstr "dàn trang"
 
-#: builtin/grep.c:957
+#: builtin/grep.c:958
 msgid "show matching files in the pager"
 msgstr "hiển thị các tập tin khớp trong trang giấy"
 
-#: builtin/grep.c:961
+#: builtin/grep.c:962
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "cho phép gọi grep(1) (bị bỏ qua bởi lần dịch này)"
 
-#: builtin/grep.c:1027
+#: builtin/grep.c:1028
 msgid "no pattern given"
 msgstr "chưa chỉ ra mẫu"
 
-#: builtin/grep.c:1063
+#: builtin/grep.c:1064
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr "--no-index hay --untracked không được sử dụng cùng với revs"
 
-#: builtin/grep.c:1071
+#: builtin/grep.c:1072
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "không thể phân giải điểm xét duyệt: %s"
 
-#: builtin/grep.c:1101
+#: builtin/grep.c:1102
 msgid "--untracked not supported with --recurse-submodules"
 msgstr "tùy chọn --untracked không được hỗ trợ với --recurse-submodules"
 
-#: builtin/grep.c:1105
+#: builtin/grep.c:1106
 msgid "invalid option combination, ignoring --threads"
 msgstr "tổ hợp tùy chọn không hợp lệ, bỏ qua --threads"
 
-#: builtin/grep.c:1108 builtin/pack-objects.c:4059
+#: builtin/grep.c:1109 builtin/pack-objects.c:4084
 msgid "no threads support, ignoring --threads"
 msgstr "không hỗ trợ đa tuyến, bỏ qua --threads"
 
-#: builtin/grep.c:1111 builtin/index-pack.c:1579 builtin/pack-objects.c:3139
+#: builtin/grep.c:1112 builtin/index-pack.c:1584 builtin/pack-objects.c:3147
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "số tuyến chỉ ra không hợp lệ (%d)"
 
-#: builtin/grep.c:1145
+#: builtin/grep.c:1146
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager chỉ làm việc trên cây-làm-việc"
 
-#: builtin/grep.c:1171
-msgid "--cached or --untracked cannot be used with --no-index"
-msgstr "--cached hay --untracked không được sử dụng với --no-index"
-
-#: builtin/grep.c:1174
-msgid "--untracked cannot be used with --cached"
-msgstr "--untracked không thể được sử dụng với tùy chọn --cached"
-
-#: builtin/grep.c:1180
+#: builtin/grep.c:1179
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr "--[no-]exclude-standard không thể sử dụng cho nội dung lưu dấu vết"
 
-#: builtin/grep.c:1188
+#: builtin/grep.c:1187
 msgid "both --cached and trees are given"
 msgstr "cả hai --cached và các cây phải được chỉ ra"
 
@@ -16487,107 +16958,99 @@ msgstr ""
 "git hash-object [-t <kiểu>] [-w] [--path=<tập-tin> | --no-filters] [--stdin] "
 "[--] <tập-tin>…"
 
-#: builtin/hash-object.c:84
-msgid "git hash-object  --stdin-paths"
-msgstr "git hash-object  --stdin-paths"
-
-#: builtin/hash-object.c:96
+#: builtin/hash-object.c:97
 msgid "object type"
 msgstr "kiểu đối tượng"
 
-#: builtin/hash-object.c:97
+#: builtin/hash-object.c:98
 msgid "write the object into the object database"
 msgstr "ghi đối tượng vào dữ liệu đối tượng"
 
-#: builtin/hash-object.c:99
+#: builtin/hash-object.c:100
 msgid "read the object from stdin"
 msgstr "đọc đối tượng từ đầu vào tiêu chuẩn stdin"
 
-#: builtin/hash-object.c:101
+#: builtin/hash-object.c:102
 msgid "store file as is without filters"
 msgstr "lưu các tập tin mà nó không có các bộ lọc"
 
-#: builtin/hash-object.c:102
+#: builtin/hash-object.c:103
 msgid ""
 "just hash any random garbage to create corrupt objects for debugging Git"
 msgstr "chỉ cần băm rác ngẫu nhiên để tạo một đối tượng hỏng để mà gỡ lỗi Git"
 
-#: builtin/hash-object.c:103
+#: builtin/hash-object.c:104
 msgid "process file as it were from this path"
 msgstr "xử lý tập tin như là nó đang ở thư mục này"
 
-#: builtin/help.c:55
+#: builtin/help.c:57
 msgid "print all available commands"
 msgstr "hiển thị danh sách các câu lệnh người dùng có thể sử dụng"
 
-#: builtin/help.c:57
+#: builtin/help.c:60
+msgid "show external commands in --all"
+msgstr "hiển thị các lệnh bên ngoài trong --all"
+
+#: builtin/help.c:61
+msgid "show aliases in --all"
+msgstr "hiển thị các bí danh trong --all"
+
+#: builtin/help.c:62
 msgid "exclude guides"
 msgstr "hướng dẫn loại trừ"
 
-#: builtin/help.c:58
+#: builtin/help.c:63
 msgid "show man page"
 msgstr "hiển thị trang man"
 
-#: builtin/help.c:59
+#: builtin/help.c:64
 msgid "show manual in web browser"
 msgstr "hiển thị hướng dẫn sử dụng trong trình duyệt web"
 
-#: builtin/help.c:61
+#: builtin/help.c:66
 msgid "show info page"
 msgstr "hiển thị trang info"
 
-#: builtin/help.c:63
+#: builtin/help.c:68
 msgid "print command description"
 msgstr "hiển thị mô tả lệnh"
 
-#: builtin/help.c:65
+#: builtin/help.c:70
 msgid "print list of useful guides"
 msgstr "hiển thị danh sách các hướng dẫn hữu dụng"
 
-#: builtin/help.c:67
+#: builtin/help.c:72
 msgid "print all configuration variable names"
 msgstr "in ra tất cả các tên biến cấu hình"
 
-#: builtin/help.c:78
-msgid ""
-"git help [-a|--all] [--[no-]verbose]]\n"
-"         [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
-msgstr ""
-"git help [-a|--all] [--[no-]verbose]]\n"
-"         [[-i|--info] [-m|--man] [-w|--web]] [<lệnh>]"
-
-#: builtin/help.c:80
-msgid "git help [-g|--guides]"
-msgstr "git help [-g|--guides]"
-
-#: builtin/help.c:81
-msgid "git help [-c|--config]"
-msgstr "git help [-c|--config]"
+#: builtin/help.c:84
+msgid "git help [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
+msgstr "git help [[-i|--info] [-m|--man] [-w|--web]] [<lệnh>]"
 
-#: builtin/help.c:196
+#: builtin/help.c:201
 #, c-format
 msgid "unrecognized help format '%s'"
 msgstr "không nhận ra định dạng trợ giúp “%s”"
 
-#: builtin/help.c:222
+#: builtin/help.c:227
 msgid "Failed to start emacsclient."
 msgstr "Gặp lỗi khi khởi chạy emacsclient."
 
-#: builtin/help.c:235
+#: builtin/help.c:240
 msgid "Failed to parse emacsclient version."
 msgstr "Gặp lỗi khi phân tích phiên bản emacsclient."
 
-#: builtin/help.c:243
+#: builtin/help.c:248
 #, c-format
 msgid "emacsclient version '%d' too old (< 22)."
 msgstr "phiên bản của emacsclient “%d” quá cũ (< 22)."
 
-#: builtin/help.c:261 builtin/help.c:283 builtin/help.c:293 builtin/help.c:301
+#: builtin/help.c:266 builtin/help.c:288 builtin/help.c:298 builtin/help.c:306
 #, c-format
 msgid "failed to exec '%s'"
 msgstr "gặp lỗi khi thực thi “%s”"
 
-#: builtin/help.c:339
+#: builtin/help.c:344
 #, c-format
 msgid ""
 "'%s': path for unsupported man viewer.\n"
@@ -16596,7 +17059,7 @@ msgstr ""
 "“%s”: đường dẫn không hỗ trợ bộ trình chiếu man.\n"
 "Hãy cân nhắc đến việc sử dụng “man.<tool>.cmd” để thay thế."
 
-#: builtin/help.c:351
+#: builtin/help.c:356
 #, c-format
 msgid ""
 "'%s': cmd for supported man viewer.\n"
@@ -16605,42 +17068,58 @@ msgstr ""
 "“%s”: cmd (lệnh) hỗ trợ bộ trình chiếu man.\n"
 "Hãy cân nhắc đến việc sử dụng “man.<tool>.path” để thay thế."
 
-#: builtin/help.c:466
+#: builtin/help.c:471
 #, c-format
 msgid "'%s': unknown man viewer."
 msgstr "“%s”: không rõ chương trình xem man."
 
-#: builtin/help.c:482
+#: builtin/help.c:487
 msgid "no man viewer handled the request"
 msgstr "không có trình xem trợ giúp dạng manpage tiếp hợp với yêu cầu"
 
-#: builtin/help.c:489
+#: builtin/help.c:494
 msgid "no info viewer handled the request"
 msgstr "không có trình xem trợ giúp dạng info tiếp hợp với yêu cầu"
 
-#: builtin/help.c:550 builtin/help.c:561 git.c:348
+#: builtin/help.c:555 builtin/help.c:566 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "“%s” được đặt bí danh thành “%s”"
 
-#: builtin/help.c:564 git.c:380
+#: builtin/help.c:569 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr "chuỗi alias.%s sai: %s"
 
-#: builtin/help.c:580
-msgid "this option doesn't take any other arguments"
-msgstr "tùy chọn này không nhận tham số nào khác"
+#: builtin/help.c:611
+#, c-format
+msgid "the '%s' option doesn't take any non-option arguments"
+msgstr "tùy chọn '%s' không nhận bất kỳ tham số không phải tùy chọn nào khác"
+
+#: builtin/help.c:631
+msgid ""
+"the '--no-[external-commands|aliases]' options can only be used with '--all'"
+msgstr ""
+"tùy chọn '--no-[external-commands|aliases]' chỉ có thể sử dụng cùng với '--"
+"all'"
 
-#: builtin/help.c:601 builtin/help.c:628
+#: builtin/help.c:643 builtin/help.c:671
 #, c-format
 msgid "usage: %s%s"
 msgstr "cách dùng: %s%s"
 
-#: builtin/help.c:623
+#: builtin/help.c:666
 msgid "'git help config' for more information"
 msgstr "Chạy lệnh “git help config” để có thêm thông tin"
 
+#: builtin/hook.c:10
+msgid "git hook run [--ignore-missing] <hook-name> [-- <hook-args>]"
+msgstr "git hook run [--ignore-missing] <tên-móc> [-- <các tham số cho móc>]"
+
+#: builtin/hook.c:30
+msgid "silently ignore missing requested <hook-name>"
+msgstr "bỏ qua âm thầm các <hook-name> đã yêu cầu còn thiếu"
+
 #: builtin/index-pack.c:221
 #, c-format
 msgid "object type mismatch at %s"
@@ -16674,239 +17153,240 @@ msgstr "lỗi đọc ở đầu vào"
 msgid "used more bytes than were available"
 msgstr "sử dụng nhiều hơn số lượng byte mà nó sẵn có"
 
-#: builtin/index-pack.c:324 builtin/pack-objects.c:756
+#: builtin/index-pack.c:324 builtin/pack-objects.c:754
 msgid "pack too large for current definition of off_t"
 msgstr "gói quá lớn so với định nghĩa hiện tại của kiểu off_t"
 
-#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
-msgid "pack exceeds maximum allowed size"
-msgstr "gói đã vượt quá cỡ tối đa được phép"
+#: builtin/index-pack.c:329
+#, c-format
+msgid "pack exceeds maximum allowed size (%s)"
+msgstr "gói đã vượt quá cỡ tối đa được phép (%s)"
 
-#: builtin/index-pack.c:358
+#: builtin/index-pack.c:362
 msgid "pack signature mismatch"
 msgstr "chữ ký cho gói không khớp"
 
-#: builtin/index-pack.c:360
+#: builtin/index-pack.c:364
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "không hỗ trợ phiên bản gói %<PRIu32>"
 
-#: builtin/index-pack.c:376
+#: builtin/index-pack.c:380
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "gói có đối tượng sai tại khoảng bù %<PRIuMAX>: %s"
 
-#: builtin/index-pack.c:482
+#: builtin/index-pack.c:485
 #, c-format
 msgid "inflate returned %d"
 msgstr "xả nén trả về %d"
 
-#: builtin/index-pack.c:531
+#: builtin/index-pack.c:534
 msgid "offset value overflow for delta base object"
 msgstr "tràn giá trị khoảng bù cho đối tượng delta cơ sở"
 
-#: builtin/index-pack.c:539
+#: builtin/index-pack.c:542
 msgid "delta base offset is out of bound"
 msgstr "khoảng bù cơ sở cho delta nằm ngoài phạm vi"
 
-#: builtin/index-pack.c:547
+#: builtin/index-pack.c:550
 #, c-format
 msgid "unknown object type %d"
 msgstr "không hiểu kiểu đối tượng %d"
 
-#: builtin/index-pack.c:578
+#: builtin/index-pack.c:581
 msgid "cannot pread pack file"
 msgstr "không thể chạy hàm pread cho tập tin gói"
 
-#: builtin/index-pack.c:580
+#: builtin/index-pack.c:583
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
 msgstr[0] "tập tin gói bị kết thúc sớm, thiếu %<PRIuMAX> byte"
 
-#: builtin/index-pack.c:606
+#: builtin/index-pack.c:609
 msgid "serious inflate inconsistency"
 msgstr "sự mâu thuẫn xả nén nghiêm trọng"
 
-#: builtin/index-pack.c:751 builtin/index-pack.c:757 builtin/index-pack.c:781
-#: builtin/index-pack.c:820 builtin/index-pack.c:829
+#: builtin/index-pack.c:754 builtin/index-pack.c:760 builtin/index-pack.c:784
+#: builtin/index-pack.c:823 builtin/index-pack.c:832
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "SỰ VA CHẠM SHA1 ĐàXẢY RA VỚI %s!"
 
-#: builtin/index-pack.c:754 builtin/pack-objects.c:292
-#: builtin/pack-objects.c:352 builtin/pack-objects.c:458
+#: builtin/index-pack.c:757 builtin/pack-objects.c:290
+#: builtin/pack-objects.c:350 builtin/pack-objects.c:456
 #, c-format
 msgid "unable to read %s"
 msgstr "không thể đọc %s"
 
-#: builtin/index-pack.c:818
+#: builtin/index-pack.c:821
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "không thể đọc thông tin đối tượng sẵn có %s"
 
-#: builtin/index-pack.c:826
+#: builtin/index-pack.c:829
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "không thể đọc đối tượng đã tồn tại %s"
 
-#: builtin/index-pack.c:840
+#: builtin/index-pack.c:843
 #, c-format
 msgid "invalid blob object %s"
 msgstr "đối tượng blob không hợp lệ %s"
 
-#: builtin/index-pack.c:843 builtin/index-pack.c:862
+#: builtin/index-pack.c:846 builtin/index-pack.c:865
 msgid "fsck error in packed object"
 msgstr "lỗi fsck trong đối tượng đóng gói"
 
-#: builtin/index-pack.c:864
+#: builtin/index-pack.c:867
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr "Không phải tất cả các đối tượng con của %s là có thể với tới được"
 
-#: builtin/index-pack.c:925 builtin/index-pack.c:972
+#: builtin/index-pack.c:928 builtin/index-pack.c:975
 msgid "failed to apply delta"
 msgstr "gặp lỗi khi áp dụng delta"
 
-#: builtin/index-pack.c:1156
+#: builtin/index-pack.c:1161
 msgid "Receiving objects"
 msgstr "Đang nhận về các đối tượng"
 
-#: builtin/index-pack.c:1156
+#: builtin/index-pack.c:1161
 msgid "Indexing objects"
 msgstr "Các đối tượng bảng mục lục"
 
-#: builtin/index-pack.c:1190
+#: builtin/index-pack.c:1195
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "gói bị sai hỏng (SHA1 không khớp)"
 
-#: builtin/index-pack.c:1195
+#: builtin/index-pack.c:1200
 msgid "cannot fstat packfile"
 msgstr "không thể lấy thông tin thống kê packfile"
 
-#: builtin/index-pack.c:1198
+#: builtin/index-pack.c:1203
 msgid "pack has junk at the end"
 msgstr "pack có phần thừa ở cuối"
 
-#: builtin/index-pack.c:1210
+#: builtin/index-pack.c:1215
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr "lộn xộn hơn cả điên rồ khi chạy hàm parse_pack_objects()"
 
-#: builtin/index-pack.c:1233
+#: builtin/index-pack.c:1238
 msgid "Resolving deltas"
 msgstr "Đang phân giải các delta"
 
-#: builtin/index-pack.c:1244 builtin/pack-objects.c:2905
+#: builtin/index-pack.c:1249 builtin/pack-objects.c:2913
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "không thể tạo tuyến: %s"
 
-#: builtin/index-pack.c:1277
+#: builtin/index-pack.c:1282
 msgid "confusion beyond insanity"
 msgstr "lộn xộn hơn cả điên rồ"
 
-#: builtin/index-pack.c:1283
+#: builtin/index-pack.c:1288
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
 msgstr[0] "đầy đủ với %d đối tượng nội bộ"
 
-#: builtin/index-pack.c:1295
+#: builtin/index-pack.c:1300
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr "Gặp tổng kiểm tra tail không cần cho %s (đĩa hỏng?)"
 
-#: builtin/index-pack.c:1299
+#: builtin/index-pack.c:1304
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] "gói có %d delta chưa được giải quyết"
 
-#: builtin/index-pack.c:1323
+#: builtin/index-pack.c:1328
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "không thể xả nén đối tượng nối thêm (%d)"
 
-#: builtin/index-pack.c:1419
+#: builtin/index-pack.c:1423
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "đối tượng nội bộ %s bị hỏng"
 
-#: builtin/index-pack.c:1440
+#: builtin/index-pack.c:1445
 #, c-format
 msgid "packfile name '%s' does not end with '.%s'"
 msgstr "tên tập tin tập tin gói “%s” không được kết thúc “.%s”"
 
-#: builtin/index-pack.c:1464
+#: builtin/index-pack.c:1469
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "không thể ghi %s tập tin “%s”"
 
-#: builtin/index-pack.c:1472
+#: builtin/index-pack.c:1477
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr "không thể đóng tập tin được ghi %s “%s”"
 
-#: builtin/index-pack.c:1489
+#: builtin/index-pack.c:1494
 #, c-format
 msgid "unable to rename temporary '*.%s' file to '%s'"
 msgstr "không thể đổi tên tập tin tạm thời “*.%s” thành “%s”"
 
-#: builtin/index-pack.c:1514
+#: builtin/index-pack.c:1519
 msgid "error while closing pack file"
 msgstr "gặp lỗi trong khi đóng tập tin gói"
 
-#: builtin/index-pack.c:1573 builtin/pack-objects.c:3150
+#: builtin/index-pack.c:1578 builtin/pack-objects.c:3158
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "sai pack.indexversion=%<PRIu32>"
 
-#: builtin/index-pack.c:1643
+#: builtin/index-pack.c:1648
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "Không thể mở tập tin gói đã sẵn có “%s”"
 
-#: builtin/index-pack.c:1645
+#: builtin/index-pack.c:1650
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "Không thể mở tập tin idx của gói cho “%s”"
 
-#: builtin/index-pack.c:1693
+#: builtin/index-pack.c:1698
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] "không delta: %d đối tượng"
 
-#: builtin/index-pack.c:1700
+#: builtin/index-pack.c:1705
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
 msgstr[0] "chiều dài xích = %d: %lu đối tượng"
 
-#: builtin/index-pack.c:1742
+#: builtin/index-pack.c:1748
 msgid "Cannot come back to cwd"
 msgstr "Không thể quay lại cwd"
 
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1799
-#: builtin/index-pack.c:1819 builtin/index-pack.c:1823
+#: builtin/index-pack.c:1802 builtin/index-pack.c:1805
+#: builtin/index-pack.c:1825 builtin/index-pack.c:1829
 #, c-format
 msgid "bad %s"
 msgstr "%s sai"
 
-#: builtin/index-pack.c:1829 builtin/init-db.c:379 builtin/init-db.c:614
+#: builtin/index-pack.c:1835 builtin/init-db.c:379 builtin/init-db.c:614
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "không hiểu thuật toán băm dữ liệu “%s”"
 
-#: builtin/index-pack.c:1850
+#: builtin/index-pack.c:1856
 msgid "--stdin requires a git repository"
 msgstr "--stdin cần một kho git"
 
-#: builtin/index-pack.c:1867
+#: builtin/index-pack.c:1873
 msgid "--verify with no packfile name given"
 msgstr "dùng tùy chọn --verify mà không đưa ra tên packfile"
 
-#: builtin/index-pack.c:1933 builtin/unpack-objects.c:584
+#: builtin/index-pack.c:1939 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "lỗi fsck trong các đối tượng gói"
 
@@ -17115,40 +17595,40 @@ msgstr "--trailer cùng với --only-input không hợp lý"
 msgid "no input file given for in-place editing"
 msgstr "không đưa ra tập tin đầu vào để sửa tại-chỗ"
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<các tùy chọn>] [<vùng-xem-xét>] [[--] </đường/dẫn>…]"
 
-#: builtin/log.c:60
+#: builtin/log.c:61
 msgid "git show [<options>] <object>..."
 msgstr "git show [<các tùy chọn>] <đối-tượng>…"
 
-#: builtin/log.c:113
+#: builtin/log.c:114
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "tùy chọn --decorate không hợp lệ: %s"
 
-#: builtin/log.c:180
+#: builtin/log.c:181
 msgid "show source"
 msgstr "hiển thị mã nguồn"
 
-#: builtin/log.c:181
+#: builtin/log.c:182
 msgid "use mail map file"
 msgstr "sử dụng tập tin ánh xạ thư"
 
-#: builtin/log.c:184
+#: builtin/log.c:185
 msgid "only decorate refs that match <pattern>"
 msgstr "chỉ tô sáng các tham chiếu khớp với <mẫu>"
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "do not decorate refs that match <pattern>"
 msgstr "không tô sáng các tham chiếu khớp với <mẫu>"
 
-#: builtin/log.c:187
+#: builtin/log.c:188
 msgid "decorate options"
 msgstr "các tùy chọn trang trí"
 
-#: builtin/log.c:190
+#: builtin/log.c:191
 msgid ""
 "trace the evolution of line range <start>,<end> or function :<funcname> in "
 "<file>"
@@ -17156,89 +17636,93 @@ msgstr ""
 "theo dõi sự tiến hóa của phạm vi <start><end> dòng, hoặc chức năng:"
 "<funcname> trong <file>"
 
-#: builtin/log.c:213
+#: builtin/log.c:214
 msgid "-L<range>:<file> cannot be used with pathspec"
 msgstr "-L<vùng>:<tập_tin> không thể được sử dụng với đặc tả đường dẫn"
 
-#: builtin/log.c:321
+#: builtin/log.c:322
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "Kết xuất cuối cùng: %d %s\n"
 
-#: builtin/log.c:586
+#: builtin/log.c:429
+msgid "unable to create temporary object directory"
+msgstr "không thể tạo thư mục đối tượng tạm thời"
+
+#: builtin/log.c:599
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: sai tập tin"
 
-#: builtin/log.c:601 builtin/log.c:691
+#: builtin/log.c:614 builtin/log.c:706
 #, c-format
 msgid "could not read object %s"
 msgstr "không thể đọc đối tượng %s"
 
-#: builtin/log.c:716
+#: builtin/log.c:731
 #, c-format
 msgid "unknown type: %d"
 msgstr "không nhận ra kiểu: %d"
 
-#: builtin/log.c:861
+#: builtin/log.c:880
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr "%s: bao bọc không hợp lệ từ chế độ mô tả"
 
-#: builtin/log.c:868
+#: builtin/log.c:887
 msgid "format.headers without value"
 msgstr "format.headers không có giá trị cụ thể"
 
-#: builtin/log.c:997
+#: builtin/log.c:1016
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "không thể mở tập tin miếng vá: %s"
 
-#: builtin/log.c:1014
+#: builtin/log.c:1033
 msgid "need exactly one range"
 msgstr "cần chính xác một vùng"
 
-#: builtin/log.c:1024
+#: builtin/log.c:1043
 msgid "not a range"
 msgstr "không phải là một vùng"
 
-#: builtin/log.c:1188
+#: builtin/log.c:1207
 msgid "cover letter needs email format"
 msgstr "“cover letter” cần cho định dạng thư"
 
-#: builtin/log.c:1194
+#: builtin/log.c:1213
 msgid "failed to create cover-letter file"
 msgstr "gặp lỗi khi tạo các tập tin cover-letter"
 
-#: builtin/log.c:1281
+#: builtin/log.c:1300
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "in-reply-to điên rồ: %s"
 
-#: builtin/log.c:1308
+#: builtin/log.c:1327
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<các tùy chọn>] [<kể-từ> | <vùng-xem-xét>]"
 
-#: builtin/log.c:1366
+#: builtin/log.c:1385
 msgid "two output directories?"
 msgstr "hai thư mục kết xuất?"
 
-#: builtin/log.c:1517 builtin/log.c:2344 builtin/log.c:2346 builtin/log.c:2358
+#: builtin/log.c:1536 builtin/log.c:2369 builtin/log.c:2371 builtin/log.c:2383
 #, c-format
 msgid "unknown commit %s"
 msgstr "không hiểu lần chuyển giao %s"
 
-#: builtin/log.c:1528 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1547 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "gặp lỗi khi phân giải “%s” như là một tham chiếu hợp lệ"
 
-#: builtin/log.c:1537
+#: builtin/log.c:1556
 msgid "could not find exact merge base"
 msgstr "không tìm thấy nền hòa trộn chính xác"
 
-#: builtin/log.c:1547
+#: builtin/log.c:1566
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -17249,277 +17733,281 @@ msgstr ""
 "nhánh máy chủ. Hoặc là bạn có thể chỉ định lần chuyển giao nền bằng\n"
 "\"--base=<base-commit-id>\" một cách thủ công"
 
-#: builtin/log.c:1570
+#: builtin/log.c:1589
 msgid "failed to find exact merge base"
 msgstr "gặp lỗi khi tìm nền hòa trộn chính xác"
 
-#: builtin/log.c:1587
+#: builtin/log.c:1606
 msgid "base commit should be the ancestor of revision list"
 msgstr "lần chuyển giao nền không là tổ tiên của danh sách điểm xét duyệt"
 
-#: builtin/log.c:1597
+#: builtin/log.c:1616
 msgid "base commit shouldn't be in revision list"
 msgstr "lần chuyển giao nền không được trong danh sách điểm xét duyệt"
 
-#: builtin/log.c:1655
+#: builtin/log.c:1674
 msgid "cannot get patch id"
 msgstr "không thể lấy mã miếng vá"
 
-#: builtin/log.c:1718
+#: builtin/log.c:1737
 msgid "failed to infer range-diff origin of current series"
 msgstr ""
 "gặp lỗi khi suy luận range-diff (vùng khác biệt) gốc của sê-ri hiện tại"
 
-#: builtin/log.c:1720
+#: builtin/log.c:1739
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr "dùng “%s” như là gốc range-diff của sê-ri hiện tại"
 
-#: builtin/log.c:1764
+#: builtin/log.c:1783
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "dùng [PATCH n/m] ngay cả với miếng vá đơn"
 
-#: builtin/log.c:1767
+#: builtin/log.c:1786
 msgid "use [PATCH] even with multiple patches"
 msgstr "dùng [VÁ] ngay cả với các miếng vá phức tạp"
 
-#: builtin/log.c:1771
+#: builtin/log.c:1790
 msgid "print patches to standard out"
 msgstr "hiển thị miếng vá ra đầu ra chuẩn"
 
-#: builtin/log.c:1773
+#: builtin/log.c:1792
 msgid "generate a cover letter"
 msgstr "tạo bì thư"
 
-#: builtin/log.c:1775
+#: builtin/log.c:1794
 msgid "use simple number sequence for output file names"
 msgstr "sử dụng chỗi dãy số dạng đơn giản cho tên tập-tin xuất ra"
 
-#: builtin/log.c:1776
+#: builtin/log.c:1795
 msgid "sfx"
 msgstr "sfx"
 
-#: builtin/log.c:1777
+#: builtin/log.c:1796
 msgid "use <sfx> instead of '.patch'"
 msgstr "sử dụng <sfx> thay cho “.patch”"
 
-#: builtin/log.c:1779
+#: builtin/log.c:1798
 msgid "start numbering patches at <n> instead of 1"
 msgstr "bắt đầu đánh số miếng vá từ <n> thay vì 1"
 
-#: builtin/log.c:1780
+#: builtin/log.c:1799
 msgid "reroll-count"
 msgstr "đếm reroll"
 
-#: builtin/log.c:1781
+#: builtin/log.c:1800
 msgid "mark the series as Nth re-roll"
 msgstr "đánh dấu chuỗi nối tiếp dạng thứ-N re-roll"
 
-#: builtin/log.c:1783
+#: builtin/log.c:1802
 msgid "max length of output filename"
 msgstr "chiều dài tên tập tin đầu ra tối đa"
 
-#: builtin/log.c:1785
+#: builtin/log.c:1804
 msgid "use [RFC PATCH] instead of [PATCH]"
 msgstr "dùng [VÁ RFC] thay cho [VÁ]"
 
-#: builtin/log.c:1788
+#: builtin/log.c:1807
 msgid "cover-from-description-mode"
 msgstr "cover-from-description-mode"
 
-#: builtin/log.c:1789
+#: builtin/log.c:1808
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr "tạo ra các phần của một lá thư bao gồm dựa trên mô tả của nhánh"
 
-#: builtin/log.c:1791
+#: builtin/log.c:1810
 msgid "use [<prefix>] instead of [PATCH]"
 msgstr "dùng [<tiền-tố>] thay cho [VÁ]"
 
-#: builtin/log.c:1794
+#: builtin/log.c:1813
 msgid "store resulting files in <dir>"
 msgstr "lưu các tập tin kết quả trong <t.mục>"
 
-#: builtin/log.c:1797
+#: builtin/log.c:1816
 msgid "don't strip/add [PATCH]"
 msgstr "không strip/add [VÁ]"
 
-#: builtin/log.c:1800
+#: builtin/log.c:1819
 msgid "don't output binary diffs"
 msgstr "không kết xuất diff (những khác biệt) nhị phân"
 
-#: builtin/log.c:1802
+#: builtin/log.c:1821
 msgid "output all-zero hash in From header"
 msgstr "xuất mọi mã băm all-zero trong phần đầu From"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1823
 msgid "don't include a patch matching a commit upstream"
 msgstr "không bao gồm miếng vá khớp với một lần chuyển giao thượng nguồn"
 
-#: builtin/log.c:1806
+#: builtin/log.c:1825
 msgid "show patch format instead of default (patch + stat)"
 msgstr "hiển thị định dạng miếng vá thay vì mặc định (miếng vá + thống kê)"
 
-#: builtin/log.c:1808
+#: builtin/log.c:1827
 msgid "Messaging"
 msgstr "Lời nhắn"
 
-#: builtin/log.c:1809
+#: builtin/log.c:1828
 msgid "header"
 msgstr "đầu đề thư"
 
-#: builtin/log.c:1810
+#: builtin/log.c:1829
 msgid "add email header"
 msgstr "thêm đầu đề thư"
 
-#: builtin/log.c:1811 builtin/log.c:1812
+#: builtin/log.c:1830 builtin/log.c:1831
 msgid "email"
 msgstr "thư điện tử"
 
-#: builtin/log.c:1811
+#: builtin/log.c:1830
 msgid "add To: header"
 msgstr "thêm To: đầu đề thư"
 
-#: builtin/log.c:1812
+#: builtin/log.c:1831
 msgid "add Cc: header"
 msgstr "thêm Cc: đầu đề thư"
 
-#: builtin/log.c:1813
+#: builtin/log.c:1832
 msgid "ident"
 msgstr "thụt lề"
 
-#: builtin/log.c:1814
+#: builtin/log.c:1833
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr ""
 "đặt “Địa chỉ gửi” thành <thụ lề> (hoặc thụt lề người commit nếu bỏ quên)"
 
-#: builtin/log.c:1816
+#: builtin/log.c:1835
 msgid "message-id"
 msgstr "message-id"
 
-#: builtin/log.c:1817
+#: builtin/log.c:1836
 msgid "make first mail a reply to <message-id>"
 msgstr "dùng thư đầu tiên để trả lời <message-id>"
 
-#: builtin/log.c:1818 builtin/log.c:1821
+#: builtin/log.c:1837 builtin/log.c:1840
 msgid "boundary"
 msgstr "ranh giới"
 
-#: builtin/log.c:1819
+#: builtin/log.c:1838
 msgid "attach the patch"
 msgstr "đính kèm miếng vá"
 
-#: builtin/log.c:1822
+#: builtin/log.c:1841
 msgid "inline the patch"
 msgstr "dùng miếng vá làm nội dung"
 
-#: builtin/log.c:1826
+#: builtin/log.c:1845
 msgid "enable message threading, styles: shallow, deep"
 msgstr "cho phép luồng lời nhắn, kiểu: “shallow”, “deep”"
 
-#: builtin/log.c:1828
+#: builtin/log.c:1847
 msgid "signature"
 msgstr "chữ ký"
 
-#: builtin/log.c:1829
+#: builtin/log.c:1848
 msgid "add a signature"
 msgstr "thêm chữ ký"
 
-#: builtin/log.c:1830
+#: builtin/log.c:1849
 msgid "base-commit"
 msgstr "lần_chuyển_giao_nền"
 
-#: builtin/log.c:1831
+#: builtin/log.c:1850
 msgid "add prerequisite tree info to the patch series"
 msgstr "add trước hết đòi hỏi thông tin cây tới sê-ri miếng vá"
 
-#: builtin/log.c:1834
+#: builtin/log.c:1853
 msgid "add a signature from a file"
 msgstr "thêm chữ ký từ một tập tin"
 
-#: builtin/log.c:1835
+#: builtin/log.c:1854
 msgid "don't print the patch filenames"
 msgstr "không hiển thị các tên tập tin của miếng vá"
 
-#: builtin/log.c:1837
+#: builtin/log.c:1856
 msgid "show progress while generating patches"
 msgstr "hiển thị bộ đo tiến triển trong khi tạo các miếng vá"
 
-#: builtin/log.c:1839
+#: builtin/log.c:1858
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr ""
 "hiển thị các thay đổi dựa trên <rev> trong các chữ bao bọc hoặc miếng vá đơn"
 
-#: builtin/log.c:1842
+#: builtin/log.c:1861
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr ""
 "hiển thị các thay đổi dựa trên <refspec> trong các chữ bao bọc hoặc miếng vá "
 "đơn"
 
-#: builtin/log.c:1844 builtin/range-diff.c:28
+#: builtin/log.c:1863 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr "tỷ lệ phần trăm theo cái tạo là weighted"
 
-#: builtin/log.c:1931
+#: builtin/log.c:1953
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "dòng định danh không hợp lệ: %s"
 
-#: builtin/log.c:1956
+#: builtin/log.c:1978
 msgid "--name-only does not make sense"
 msgstr "--name-only không hợp lý"
 
-#: builtin/log.c:1958
+#: builtin/log.c:1980
 msgid "--name-status does not make sense"
 msgstr "--name-status không hợp lý"
 
-#: builtin/log.c:1960
+#: builtin/log.c:1982
 msgid "--check does not make sense"
 msgstr "--check không hợp lý"
 
-#: builtin/log.c:2104
+#: builtin/log.c:1984
+msgid "--remerge-diff does not make sense"
+msgstr "--remerge-diff không hợp lý"
+
+#: builtin/log.c:2129
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff cần --cover-letter hoặc vá đơn"
 
-#: builtin/log.c:2108
+#: builtin/log.c:2133
 msgid "Interdiff:"
 msgstr "Interdiff:"
 
-#: builtin/log.c:2109
+#: builtin/log.c:2134
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "Interdiff dựa trên v%d:"
 
-#: builtin/log.c:2119
+#: builtin/log.c:2144
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff yêu cầu --cover-letter hoặc miếng vá đơn"
 
-#: builtin/log.c:2127
+#: builtin/log.c:2152
 msgid "Range-diff:"
 msgstr "Range-diff:"
 
-#: builtin/log.c:2128
+#: builtin/log.c:2153
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "Range-diff dựa trên v%d:"
 
-#: builtin/log.c:2139
+#: builtin/log.c:2164
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "không thể đọc tập tin chữ ký “%s”"
 
-#: builtin/log.c:2175
+#: builtin/log.c:2200
 msgid "Generating patches"
 msgstr "Đang tạo các miếng vá"
 
-#: builtin/log.c:2219
+#: builtin/log.c:2244
 msgid "failed to create output files"
 msgstr "gặp lỗi khi tạo các tập tin kết xuất"
 
-#: builtin/log.c:2279
+#: builtin/log.c:2304
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<thượng-nguồn> [<đầu> [<giới-hạn>]]]"
 
-#: builtin/log.c:2333
+#: builtin/log.c:2358
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -17617,10 +18105,6 @@ msgstr "thêm loại trừ tiêu chuẩn kiểu git"
 msgid "make the output relative to the project top directory"
 msgstr "làm cho kết xuất liên quan đến thư mục ở mức cao nhất (gốc) của dự án"
 
-#: builtin/ls-files.c:667
-msgid "recurse through submodules"
-msgstr "đệ quy xuyên qua mô-đun con"
-
 #: builtin/ls-files.c:669
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr "nếu <tập tin> bất kỳ không ở trong bảng mục lục, xử lý nó như một lỗi"
@@ -17660,7 +18144,7 @@ msgstr ""
 msgid "do not print remote URL"
 msgstr "không hiển thị URL máy chủ"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1103
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1131
 msgid "exec"
 msgstr "thực thi"
 
@@ -17692,42 +18176,71 @@ msgstr "thoát với mã là 2 nếu không tìm thấy tham chiếu nào khớp
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr "hiển thị tham chiếu nằm dưới để thêm vào đối tượng được chỉ bởi nó"
 
-#: builtin/ls-tree.c:30
+#: builtin/ls-tree.c:36
 msgid "git ls-tree [<options>] <tree-ish> [<path>...]"
 msgstr "git ls-tree [<các tùy chọn>] <tree-ish> [</đường/dẫn>…]"
 
-#: builtin/ls-tree.c:128
+#: builtin/ls-tree.c:54
+#, c-format
+msgid "could not get object info about '%s'"
+msgstr "không thể lấy thông tin đối tượng về “%s”"
+
+#: builtin/ls-tree.c:79
+#, c-format
+msgid "bad ls-tree format: element '%s' does not start with '('"
+msgstr "định dạng ls-tree sai: phần tử “%s” không bắt đầu bằng “(”"
+
+#: builtin/ls-tree.c:83
+#, c-format
+msgid "bad ls-tree format: element '%s' does not end in ')'"
+msgstr "định dạng ls-tree sai: phần tử “%s” không bắt kết thúc bằng “)”"
+
+#: builtin/ls-tree.c:109
+#, c-format
+msgid "bad ls-tree format: %%%.*s"
+msgstr "định dạng ls-tree sai: %%%.*s"
+
+#: builtin/ls-tree.c:336
 msgid "only show trees"
 msgstr "chỉ hiển thị các tree"
 
-#: builtin/ls-tree.c:130
+#: builtin/ls-tree.c:338
 msgid "recurse into subtrees"
 msgstr "đệ quy vào các thư mục con"
 
-#: builtin/ls-tree.c:132
+#: builtin/ls-tree.c:340
 msgid "show trees when recursing"
 msgstr "hiển thị cây khi đệ quy"
 
-#: builtin/ls-tree.c:135
+#: builtin/ls-tree.c:343
 msgid "terminate entries with NUL byte"
 msgstr "chấm dứt mục tin với byte NUL"
 
-#: builtin/ls-tree.c:136
+#: builtin/ls-tree.c:344
 msgid "include object size"
 msgstr "gồm cả kích thước đối tượng"
 
-#: builtin/ls-tree.c:138 builtin/ls-tree.c:140
+#: builtin/ls-tree.c:346 builtin/ls-tree.c:348
 msgid "list only filenames"
 msgstr "chỉ liệt kê tên tập tin"
 
-#: builtin/ls-tree.c:143
+#: builtin/ls-tree.c:350
+msgid "list only objects"
+msgstr "chỉ liệt kê các đối tượng"
+
+#: builtin/ls-tree.c:353
 msgid "use full path names"
 msgstr "dùng tên đường dẫn đầy đủ"
 
-#: builtin/ls-tree.c:145
+#: builtin/ls-tree.c:355
 msgid "list entire tree; not just current directory (implies --full-name)"
 msgstr "liệt kê cây mục tin; không chỉ thư mục hiện hành (ngụ ý --full-name)"
 
+#: builtin/ls-tree.c:391
+msgid "--format can't be combined with other format-altering options"
+msgstr ""
+"--format không thể được tổ hợp cùng với các tùy chọn format-alterin khác"
+
 #. TRANSLATORS: keep <> in "<" mail ">" info.
 #: builtin/mailinfo.c:14
 msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
@@ -17777,7 +18290,11 @@ msgstr "hành động khi CR được trích dẫn được tìm thấy"
 msgid "use headers in message's body"
 msgstr "sử dụng phần đầu trong nội dung thư"
 
-#: builtin/mailsplit.c:239
+#: builtin/mailsplit.c:227
+msgid "reading patches from stdin/tty..."
+msgstr "đọc các miếng vá từ đầu vào tiêu chuẩn stdin/tty..."
+
+#: builtin/mailsplit.c:242
 #, c-format
 msgid "empty mbox: '%s'"
 msgstr "mbox trống rỗng: “%s”"
@@ -17802,23 +18319,23 @@ msgstr "git merge-base --is-ancestor <commit> <lần_chuyển_giao>"
 msgid "git merge-base --fork-point <ref> [<commit>]"
 msgstr "git merge-base --fork-point <tham-chiếu> [<lần_chuyển_giao>]"
 
-#: builtin/merge-base.c:143
+#: builtin/merge-base.c:144
 msgid "output all common ancestors"
 msgstr "xuất ra tất cả các ông bà, tổ tiên chung"
 
-#: builtin/merge-base.c:145
+#: builtin/merge-base.c:146
 msgid "find ancestors for a single n-way merge"
 msgstr "tìm tổ tiên của hòa trộn n-way đơn"
 
-#: builtin/merge-base.c:147
+#: builtin/merge-base.c:148
 msgid "list revs not reachable from others"
 msgstr "liệt kê các “rev” mà nó không thể đọc được từ cái khác"
 
-#: builtin/merge-base.c:149
+#: builtin/merge-base.c:150
 msgid "is the first one ancestor of the other?"
 msgstr "là cha mẹ đầu tiên của cái khác?"
 
-#: builtin/merge-base.c:151
+#: builtin/merge-base.c:152
 msgid "find where <commit> forked from reflog of <ref>"
 msgstr "tìm xem <commit> được rẽ nhánh ở đâu từ reflog của <th.chiếu>"
 
@@ -17965,7 +18482,7 @@ msgid "verify that the named commit has a valid GPG signature"
 msgstr "thẩm tra xem lần chuyển giao có tên đó có chữ ký GPG hợp lệ hay không"
 
 #: builtin/merge.c:280 builtin/notes.c:785 builtin/pull.c:172
-#: builtin/rebase.c:1117 builtin/revert.c:114
+#: builtin/rebase.c:1145 builtin/revert.c:114
 msgid "strategy"
 msgstr "chiến lược"
 
@@ -18103,75 +18620,75 @@ msgstr ""
 "Những dòng được bắt đầu bằng “%c” sẽ được bỏ qua, và nếu phần chú\n"
 "thích rỗng sẽ hủy bỏ lần chuyển giao.\n"
 
-#: builtin/merge.c:894
+#: builtin/merge.c:900
 msgid "Empty commit message."
 msgstr "Chú thích của lần commit (chuyển giao) bị trống rỗng."
 
-#: builtin/merge.c:909
+#: builtin/merge.c:915
 #, c-format
 msgid "Wonderful.\n"
 msgstr "Tuyệt vời.\n"
 
-#: builtin/merge.c:970
+#: builtin/merge.c:976
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr ""
 "Việc tự động hòa trộn gặp lỗi; hãy sửa các xung đột sau đó chuyển giao kết "
 "quả.\n"
 
-#: builtin/merge.c:1009
+#: builtin/merge.c:1015
 msgid "No current branch."
 msgstr "Không phải nhánh hiện hành."
 
-#: builtin/merge.c:1011
+#: builtin/merge.c:1017
 msgid "No remote for the current branch."
 msgstr "Không có máy chủ cho nhánh hiện hành."
 
-#: builtin/merge.c:1013
+#: builtin/merge.c:1019
 msgid "No default upstream defined for the current branch."
 msgstr "Không có thượng nguồn mặc định được định nghĩa cho nhánh hiện hành."
 
-#: builtin/merge.c:1018
+#: builtin/merge.c:1024
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "Không nhánh mạng theo dõi cho %s từ %s"
 
-#: builtin/merge.c:1075
+#: builtin/merge.c:1081
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "Giá trị sai “%s” trong biến môi trường “%s”"
 
-#: builtin/merge.c:1177
+#: builtin/merge.c:1183
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "không phải là một thứ gì đó mà chúng tôi có thể hòa trộn trong %s: %s"
 
-#: builtin/merge.c:1211
+#: builtin/merge.c:1217
 msgid "not something we can merge"
 msgstr "không phải là thứ gì đó mà chúng tôi có thể hòa trộn"
 
-#: builtin/merge.c:1324
+#: builtin/merge.c:1330
 msgid "--abort expects no arguments"
 msgstr "--abort không nhận các đối số"
 
-#: builtin/merge.c:1328
+#: builtin/merge.c:1334
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr ""
 "Ở đây không có lần hòa trộn nào được hủy bỏ giữa chừng cả (thiếu MERGE_HEAD)."
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1352
 msgid "--quit expects no arguments"
 msgstr "--quit không nhận các đối số"
 
-#: builtin/merge.c:1359
+#: builtin/merge.c:1365
 msgid "--continue expects no arguments"
 msgstr "--continue không nhận đối số"
 
-#: builtin/merge.c:1363
+#: builtin/merge.c:1369
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "Ở đây không có lần hòa trộn nào đang được xử lý cả (thiếu MERGE_HEAD)."
 
-#: builtin/merge.c:1379
+#: builtin/merge.c:1385
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -18179,7 +18696,7 @@ msgstr ""
 "Bạn chưa kết thúc việc hòa trộn (MERGE_HEAD vẫn tồn tại).\n"
 "Hãy chuyển giao các thay đổi trước khi bạn có thể hòa trộn."
 
-#: builtin/merge.c:1386
+#: builtin/merge.c:1392
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -18187,88 +18704,84 @@ msgstr ""
 "Bạn chưa kết thúc việc cherry-pick (CHERRY_PICK_HEAD vẫn tồn tại).\n"
 "Hãy chuyển giao các thay đổi trước khi bạn có thể hòa trộn."
 
-#: builtin/merge.c:1389
+#: builtin/merge.c:1395
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "Bạn chưa kết thúc việc cherry-pick (CHERRY_PICK_HEAD vẫn tồn tại)."
 
-#: builtin/merge.c:1421
+#: builtin/merge.c:1427
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr "Không chỉ ra lần chuyển giao và merge.defaultToUpstream chưa được đặt."
 
-#: builtin/merge.c:1438
+#: builtin/merge.c:1444
 msgid "Squash commit into empty head not supported yet"
 msgstr "Squash commit vào một head trống rỗng vẫn chưa được hỗ trợ"
 
-#: builtin/merge.c:1440
+#: builtin/merge.c:1446
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr ""
 "Chuyển giao không-chuyển-tiếp-nhanh không hợp lý ở trong một head trống rỗng"
 
-#: builtin/merge.c:1445
+#: builtin/merge.c:1451
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - không phải là thứ gì đó mà chúng tôi có thể hòa trộn"
 
-#: builtin/merge.c:1447
+#: builtin/merge.c:1453
 msgid "Can merge only exactly one commit into empty head"
 msgstr ""
 "Không thể hòa trộn một cách đúng đắn một lần chuyển giao vào một head rỗng"
 
-#: builtin/merge.c:1534
+#: builtin/merge.c:1540
 msgid "refusing to merge unrelated histories"
 msgstr "từ chối hòa trộn lịch sử không liên quan"
 
-#: builtin/merge.c:1553
+#: builtin/merge.c:1559
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "Đang cập nhật %s..%s\n"
 
-#: builtin/merge.c:1601
+#: builtin/merge.c:1606
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "Đang thử hòa trộn kiểu “trivial in-index”…\n"
 
-#: builtin/merge.c:1608
+#: builtin/merge.c:1613
 #, c-format
 msgid "Nope.\n"
 msgstr "Không.\n"
 
-#: builtin/merge.c:1667 builtin/merge.c:1733
+#: builtin/merge.c:1671 builtin/merge.c:1737
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "Đang tua lại cây thành thời xa xưa…\n"
 
-#: builtin/merge.c:1671
+#: builtin/merge.c:1675
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "Đang thử chiến lược hòa trộn %s…\n"
 
-#: builtin/merge.c:1723
+#: builtin/merge.c:1727
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "Không có chiến lược hòa trộn nào được nắm giữ (handle) sự hòa trộn.\n"
 
-#: builtin/merge.c:1725
+#: builtin/merge.c:1729
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "Hòa trộn với chiến lược %s gặp lỗi.\n"
 
-#: builtin/merge.c:1735
+#: builtin/merge.c:1739
 #, c-format
 msgid "Using the %s strategy to prepare resolving by hand.\n"
 msgstr "Sử dụng chiến lược %s để chuẩn bị giải quyết bằng tay.\n"
 
-#: builtin/merge.c:1749
+#: builtin/merge.c:1753
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr ""
 "Hòa trộn tự động đã trở nên tốt; bị dừng trước khi việc chuyển giao được yêu "
 "cầu\n"
 
-#: builtin/mktag.c:10
-msgid "git mktag"
-msgstr "git mktag"
-
 #: builtin/mktag.c:27
 #, c-format
 msgid "warning: tag input does not pass fsck: %s"
@@ -18294,24 +18807,20 @@ msgstr "không thể đọc đối tượng được đánh thẻ %s"
 msgid "object '%s' tagged as '%s', but is a '%s' type"
 msgstr "đối tượng %s được đánh thẻ là %s, không phải là kiểu %s"
 
-#: builtin/mktag.c:98
+#: builtin/mktag.c:97
 msgid "tag on stdin did not pass our strict fsck check"
 msgstr ""
 "thẻ trên stdin đã không vượt qua kiểm tra fsck nghiêm ngặt của chúng tôi"
 
-#: builtin/mktag.c:101
+#: builtin/mktag.c:100
 msgid "tag on stdin did not refer to a valid object"
 msgstr ""
 "thẻ trên đầu vào tiêu chuẩn không chỉ đến một lần chuyển giao hợp lệ nào cả"
 
-#: builtin/mktag.c:104 builtin/tag.c:242
+#: builtin/mktag.c:103 builtin/tag.c:243
 msgid "unable to write tag file"
 msgstr "không thể ghi vào tập tin lưu thẻ"
 
-#: builtin/mktree.c:66
-msgid "git mktree [-z] [--missing] [--batch]"
-msgstr "git mktree [-z] [--missing] [--batch]"
-
 #: builtin/mktree.c:154
 msgid "input is NUL terminated"
 msgstr "đầu vào được chấm dứt bởi NUL"
@@ -18468,53 +18977,57 @@ msgstr "%s, nguồn=%s, đích=%s"
 msgid "Renaming %s to %s\n"
 msgstr "Đổi tên %s thành %s\n"
 
-#: builtin/mv.c:314 builtin/remote.c:790 builtin/repack.c:857
+#: builtin/mv.c:314 builtin/remote.c:812 builtin/repack.c:861
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "gặp lỗi khi đổi tên “%s”"
 
-#: builtin/name-rev.c:474
+#: builtin/name-rev.c:524
 msgid "git name-rev [<options>] <commit>..."
 msgstr "git name-rev [<các tùy chọn>] <commit>…"
 
-#: builtin/name-rev.c:475
+#: builtin/name-rev.c:525
 msgid "git name-rev [<options>] --all"
 msgstr "git name-rev [<các tùy chọn>] --all"
 
-#: builtin/name-rev.c:476
-msgid "git name-rev [<options>] --stdin"
-msgstr "git name-rev [<các tùy chọn>] --stdin"
+#: builtin/name-rev.c:526
+msgid "git name-rev [<options>] --annotate-stdin"
+msgstr "git name-rev [<các tùy chọn>] --annotate-stdin"
 
-#: builtin/name-rev.c:533
+#: builtin/name-rev.c:583
 msgid "print only ref-based names (no object names)"
 msgstr "chỉ hiển thị các tham chiếu cơ sở (không phải các tên đối tượng)"
 
-#: builtin/name-rev.c:534
+#: builtin/name-rev.c:584
 msgid "only use tags to name the commits"
 msgstr "chỉ dùng các thẻ để đặt tên cho các lần chuyển giao"
 
-#: builtin/name-rev.c:536
+#: builtin/name-rev.c:586
 msgid "only use refs matching <pattern>"
 msgstr "chỉ sử dụng các tham chiếu khớp với <mẫu>"
 
-#: builtin/name-rev.c:538
+#: builtin/name-rev.c:588
 msgid "ignore refs matching <pattern>"
 msgstr "bỏ qua các tham chiếu khớp với <mẫu>"
 
-#: builtin/name-rev.c:540
+#: builtin/name-rev.c:590
 msgid "list all commits reachable from all refs"
 msgstr ""
 "liệt kê tất cả các lần chuyển giao có thể đọc được từ tất cả các tham chiếu"
 
-#: builtin/name-rev.c:541
-msgid "read from stdin"
-msgstr "đọc từ đầu vào tiêu chuẩn"
+#: builtin/name-rev.c:591
+msgid "deprecated: use annotate-stdin instead"
+msgstr "đã lạc hậu: hãy dùng annotate-stdin để thay thế"
 
-#: builtin/name-rev.c:542
+#: builtin/name-rev.c:592
+msgid "annotate text from stdin"
+msgstr "chú giải chữ từ đầu vào tiêu chuẩn stdin"
+
+#: builtin/name-rev.c:593
 msgid "allow to print `undefined` names (default)"
 msgstr "cho phép in các tên “chưa định nghĩa” (mặc định)"
 
-#: builtin/name-rev.c:548
+#: builtin/name-rev.c:599
 msgid "dereference tags in the input (internal use)"
 msgstr "bãi bỏ tham chiếu các thẻ trong đầu vào (dùng nội bộ)"
 
@@ -18556,14 +19069,6 @@ msgid ""
 msgstr ""
 "git notes [--ref <notes-ref>] merge [-v | -q] [-s <chiến-lược> ] <notes-ref>"
 
-#: builtin/notes.c:35
-msgid "git notes merge --commit [-v | -q]"
-msgstr "git notes merge --commit [-v | -q]"
-
-#: builtin/notes.c:36
-msgid "git notes merge --abort [-v | -q]"
-msgstr "git notes merge --abort [-v | -q]"
-
 #: builtin/notes.c:37
 msgid "git notes [--ref <notes-ref>] remove [<object>...]"
 msgstr "git notes [--ref <notes-ref>] remove [<đối-tượng>…]"
@@ -18624,10 +19129,6 @@ msgstr "git notes remove [<đối tượng>]"
 msgid "git notes prune [<options>]"
 msgstr "git notes prune [<các tùy chọn>]"
 
-#: builtin/notes.c:92
-msgid "git notes get-ref"
-msgstr "git notes get-ref"
-
 #: builtin/notes.c:97
 msgid "Write/edit the notes for the following object:"
 msgstr "Ghi hay sửa ghi chú cho đối tượng sau đây:"
@@ -18660,7 +19161,7 @@ msgstr "không thể ghi đối tượng ghi chú (note)"
 msgid "the note contents have been left in %s"
 msgstr "nội dung ghi chú còn lại %s"
 
-#: builtin/notes.c:240 builtin/tag.c:581
+#: builtin/notes.c:240 builtin/tag.c:582
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "không thể mở hay đọc “%s”"
@@ -18700,13 +19201,6 @@ msgstr "gặp lỗi khi sao chép ghi chú (note) từ “%s” sang “%s”"
 msgid "refusing to %s notes in %s (outside of refs/notes/)"
 msgstr "từ chối %s ghi chú trong %s (nằm ngoài refs/notes/)"
 
-#: builtin/notes.c:374 builtin/notes.c:429 builtin/notes.c:507
-#: builtin/notes.c:519 builtin/notes.c:596 builtin/notes.c:663
-#: builtin/notes.c:813 builtin/notes.c:965 builtin/notes.c:987
-#: builtin/prune-packed.c:25 builtin/receive-pack.c:2487 builtin/tag.c:591
-msgid "too many arguments"
-msgstr "có quá nhiều đối số"
-
 #: builtin/notes.c:387 builtin/notes.c:676
 #, c-format
 msgid "no note found for object %s."
@@ -18895,7 +19389,7 @@ msgstr ""
 "chuyển giao kết quả bằng “git notes merge --commit”, hoặc bãi bỏ việc hòa "
 "trộn bằng “git notes merge --abort”.\n"
 
-#: builtin/notes.c:899 builtin/tag.c:594
+#: builtin/notes.c:899 builtin/tag.c:595
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "Gặp lỗi khi phân giải “%s” như là một tham chiếu hợp lệ."
@@ -18913,7 +19407,7 @@ msgstr "cố gắng gỡ bỏ một note chưa từng tồn tại không phải
 msgid "read object names from the standard input"
 msgstr "đọc tên đối tượng từ thiết bị nhập chuẩn"
 
-#: builtin/notes.c:956 builtin/prune.c:144 builtin/worktree.c:147
+#: builtin/notes.c:956 builtin/prune.c:144 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr "không gỡ bỏ, chỉ hiển thị"
 
@@ -18929,7 +19423,7 @@ msgstr "notes-ref"
 msgid "use notes from <notes-ref>"
 msgstr "dùng “notes” từ <notes-ref>"
 
-#: builtin/notes.c:1036 builtin/stash.c:1818
+#: builtin/notes.c:1036 builtin/stash.c:1802
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "không hiểu câu lệnh con: %s"
@@ -18948,7 +19442,7 @@ msgstr ""
 "git pack-objects [các tùy chọn…] <base-name> [< <danh-sách-ref> | < <danh-"
 "sách-đối-tượng>]"
 
-#: builtin/pack-objects.c:572
+#: builtin/pack-objects.c:570
 #, c-format
 msgid ""
 "write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
@@ -18957,112 +19451,112 @@ msgstr ""
 "write_reuse_object: không thể phân bổ %s, cần tại vị trí bù %<PRIuMAX> trong "
 "gói %s"
 
-#: builtin/pack-objects.c:580
+#: builtin/pack-objects.c:578
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr "CRC của đối tượng gói sai với %s"
 
-#: builtin/pack-objects.c:591
+#: builtin/pack-objects.c:589
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr "đối tượng đã đóng gói sai hỏng cho %s"
 
-#: builtin/pack-objects.c:722
+#: builtin/pack-objects.c:720
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr "dò thấy delta đệ quy cho đối tượng %s"
 
-#: builtin/pack-objects.c:941
+#: builtin/pack-objects.c:939
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr "đã sắp xếp %u đối tượng, cần %<PRIu32>"
 
-#: builtin/pack-objects.c:1036
+#: builtin/pack-objects.c:1034
 #, c-format
 msgid "expected object at offset %<PRIuMAX> in pack %s"
 msgstr "cần đối tượng tại khoảng bù %<PRIuMAX> trong gói: %s"
 
-#: builtin/pack-objects.c:1160
+#: builtin/pack-objects.c:1158
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr "tắt ghi bitmap, các gói bị chia nhỏ bởi vì pack.packSizeLimit"
 
-#: builtin/pack-objects.c:1173
+#: builtin/pack-objects.c:1171
 msgid "Writing objects"
 msgstr "Đang ghi lại các đối tượng"
 
-#: builtin/pack-objects.c:1235 builtin/update-index.c:90
+#: builtin/pack-objects.c:1243 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "gặp lỗi khi lấy thông tin thống kê về %s"
 
-#: builtin/pack-objects.c:1268
+#: builtin/pack-objects.c:1276
 msgid "failed to write bitmap index"
 msgstr "gặp lỗi khi ghi mục lục ánh xạ"
 
-#: builtin/pack-objects.c:1294
+#: builtin/pack-objects.c:1302
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "đã ghi %<PRIu32> đối tượng trong khi cần %<PRIu32>"
 
-#: builtin/pack-objects.c:1536
+#: builtin/pack-objects.c:1544
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr "tắt ghi bitmap, như vậy một số đối tượng sẽ không được đóng gói"
 
-#: builtin/pack-objects.c:1984
+#: builtin/pack-objects.c:1992
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "khoảng bù cơ sở cho delta bị tràn trong gói cho %s"
 
-#: builtin/pack-objects.c:1993
+#: builtin/pack-objects.c:2001
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "khoảng bù cơ sở cho delta nằm ngoài phạm cho %s"
 
-#: builtin/pack-objects.c:2274
+#: builtin/pack-objects.c:2282
 msgid "Counting objects"
 msgstr "Đang đếm các đối tượng"
 
-#: builtin/pack-objects.c:2439
+#: builtin/pack-objects.c:2447
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "không thể phân tích phần đầu đối tượng của “%s”"
 
-#: builtin/pack-objects.c:2509 builtin/pack-objects.c:2525
-#: builtin/pack-objects.c:2535
+#: builtin/pack-objects.c:2517 builtin/pack-objects.c:2533
+#: builtin/pack-objects.c:2543
 #, c-format
 msgid "object %s cannot be read"
 msgstr "không thể đọc đối tượng %s"
 
-#: builtin/pack-objects.c:2512 builtin/pack-objects.c:2539
+#: builtin/pack-objects.c:2520 builtin/pack-objects.c:2547
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr ""
 "đối tượng %s không nhất quán về chiều dài đối tượng (%<PRIuMAX> so với "
 "%<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2549
+#: builtin/pack-objects.c:2557
 msgid "suboptimal pack - out of memory"
 msgstr "suboptimal pack - hết bộ nhớ"
 
-#: builtin/pack-objects.c:2864
+#: builtin/pack-objects.c:2872
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "Nén delta dùng tới %d tuyến trình"
 
-#: builtin/pack-objects.c:3003
+#: builtin/pack-objects.c:3011
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "không thể đóng gói các đối tượng tiếp cận được từ thẻ “%s”"
 
-#: builtin/pack-objects.c:3089
+#: builtin/pack-objects.c:3097
 msgid "Compressing objects"
 msgstr "Đang nén các đối tượng"
 
-#: builtin/pack-objects.c:3095
+#: builtin/pack-objects.c:3103
 msgid "inconsistency with delta count"
 msgstr "mâu thuẫn với số lượng delta"
 
-#: builtin/pack-objects.c:3174
+#: builtin/pack-objects.c:3182
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
@@ -19071,7 +19565,7 @@ msgstr ""
 "giá trị của uploadpack.blobpackfileuri phải có dạng “<object-hash> <pack-"
 "hash> <uri>” (nhận “%s”)"
 
-#: builtin/pack-objects.c:3177
+#: builtin/pack-objects.c:3185
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
@@ -19079,18 +19573,18 @@ msgstr ""
 "đối tượng đã được cấu hình trong một uploadpack.blobpackfileuri khác (đã "
 "nhận “%s”)"
 
-#: builtin/pack-objects.c:3212
+#: builtin/pack-objects.c:3220
 #, c-format
 msgid "could not get type of object %s in pack %s"
 msgstr "không thể lấy kiểu của đối tượng “%s” trong gói “%s”"
 
-#: builtin/pack-objects.c:3340 builtin/pack-objects.c:3351
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3348 builtin/pack-objects.c:3359
+#: builtin/pack-objects.c:3373
 #, c-format
 msgid "could not find pack '%s'"
 msgstr "không thể tìm thấy gói “%s”"
 
-#: builtin/pack-objects.c:3408
+#: builtin/pack-objects.c:3416
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -19099,7 +19593,7 @@ msgstr ""
 "cần ID đối tượng cạnh, nhận được rác:\n"
 " %s"
 
-#: builtin/pack-objects.c:3414
+#: builtin/pack-objects.c:3422
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -19108,244 +19602,240 @@ msgstr ""
 "cần ID đối tượng, nhận được rác:\n"
 " %s"
 
-#: builtin/pack-objects.c:3507
-msgid "invalid value for --missing"
-msgstr "giá trị cho --missing không hợp lệ"
-
-#: builtin/pack-objects.c:3532 builtin/pack-objects.c:3619
+#: builtin/pack-objects.c:3540 builtin/pack-objects.c:3627
 msgid "cannot open pack index"
 msgstr "không thể mở mục lục của gói"
 
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3549
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "đối tượng mất tại %s không thể đã kiểm tra"
 
-#: builtin/pack-objects.c:3627
+#: builtin/pack-objects.c:3635
 msgid "unable to force loose object"
 msgstr "không thể buộc mất đối tượng"
 
-#: builtin/pack-objects.c:3757
+#: builtin/pack-objects.c:3763
 #, c-format
 msgid "not a rev '%s'"
 msgstr "không phải một rev “%s”"
 
-#: builtin/pack-objects.c:3760 builtin/rev-parse.c:1061
+#: builtin/pack-objects.c:3766 builtin/rev-parse.c:1061
 #, c-format
 msgid "bad revision '%s'"
 msgstr "điểm xem xét sai “%s”"
 
-#: builtin/pack-objects.c:3788
+#: builtin/pack-objects.c:3794
 msgid "unable to add recent objects"
 msgstr "không thể thêm các đối tượng mới dùng"
 
-#: builtin/pack-objects.c:3841
+#: builtin/pack-objects.c:3847
 #, c-format
 msgid "unsupported index version %s"
 msgstr "phiên bản mục lục không được hỗ trợ %s"
 
-#: builtin/pack-objects.c:3845
+#: builtin/pack-objects.c:3851
 #, c-format
 msgid "bad index version '%s'"
 msgstr "phiên bản mục lục sai “%s”"
 
-#: builtin/pack-objects.c:3884
+#: builtin/pack-objects.c:3907
 msgid "<version>[,<offset>]"
 msgstr "<phiên bản>[,offset]"
 
-#: builtin/pack-objects.c:3885
+#: builtin/pack-objects.c:3908
 msgid "write the pack index file in the specified idx format version"
 msgstr "ghi tập tin bảng mục lục gói (pack) ở phiên bản định dạng idx đã cho"
 
-#: builtin/pack-objects.c:3888
+#: builtin/pack-objects.c:3911
 msgid "maximum size of each output pack file"
 msgstr "kcíh thước tối đa cho tập tin gói được tạo"
 
-#: builtin/pack-objects.c:3890
+#: builtin/pack-objects.c:3913
 msgid "ignore borrowed objects from alternate object store"
 msgstr "bỏ qua các đối tượng vay mượn từ kho đối tượng thay thế"
 
-#: builtin/pack-objects.c:3892
+#: builtin/pack-objects.c:3915
 msgid "ignore packed objects"
 msgstr "bỏ qua các đối tượng đóng gói"
 
-#: builtin/pack-objects.c:3894
+#: builtin/pack-objects.c:3917
 msgid "limit pack window by objects"
 msgstr "giới hạn cửa sổ đóng gói theo đối tượng"
 
-#: builtin/pack-objects.c:3896
+#: builtin/pack-objects.c:3919
 msgid "limit pack window by memory in addition to object limit"
 msgstr "giới hạn cửa sổ đóng gói theo bộ nhớ cộng thêm với giới hạn đối tượng"
 
-#: builtin/pack-objects.c:3898
+#: builtin/pack-objects.c:3921
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr "độ dài tối đa của chuỗi móc xích “delta” được phép trong gói kết quả"
 
-#: builtin/pack-objects.c:3900
+#: builtin/pack-objects.c:3923
 msgid "reuse existing deltas"
 msgstr "dùng lại các delta sẵn có"
 
-#: builtin/pack-objects.c:3902
+#: builtin/pack-objects.c:3925
 msgid "reuse existing objects"
 msgstr "dùng lại các đối tượng sẵn có"
 
-#: builtin/pack-objects.c:3904
+#: builtin/pack-objects.c:3927
 msgid "use OFS_DELTA objects"
 msgstr "dùng các đối tượng OFS_DELTA"
 
-#: builtin/pack-objects.c:3906
+#: builtin/pack-objects.c:3929
 msgid "use threads when searching for best delta matches"
 msgstr "sử dụng các tuyến trình khi tìm kiếm cho các mẫu khớp delta tốt nhất"
 
-#: builtin/pack-objects.c:3908
+#: builtin/pack-objects.c:3931
 msgid "do not create an empty pack output"
 msgstr "không thể tạo kết xuất gói trống rỗng"
 
-#: builtin/pack-objects.c:3910
+#: builtin/pack-objects.c:3933
 msgid "read revision arguments from standard input"
 msgstr "đọc tham số “revision” từ thiết bị nhập chuẩn"
 
-#: builtin/pack-objects.c:3912
+#: builtin/pack-objects.c:3935
 msgid "limit the objects to those that are not yet packed"
 msgstr "giới hạn các đối tượng thành những cái mà chúng vẫn chưa được đóng gói"
 
-#: builtin/pack-objects.c:3915
+#: builtin/pack-objects.c:3938
 msgid "include objects reachable from any reference"
 msgstr "bao gồm các đối tượng có thể đọc được từ bất kỳ tham chiếu nào"
 
-#: builtin/pack-objects.c:3918
+#: builtin/pack-objects.c:3941
 msgid "include objects referred by reflog entries"
 msgstr "bao gồm các đối tượng được tham chiếu bởi các mục reflog"
 
-#: builtin/pack-objects.c:3921
+#: builtin/pack-objects.c:3944
 msgid "include objects referred to by the index"
 msgstr "bao gồm các đối tượng được tham chiếu bởi mục lục"
 
-#: builtin/pack-objects.c:3924
+#: builtin/pack-objects.c:3947
 msgid "read packs from stdin"
 msgstr "đọc các gói từ đầu vào tiêu chuẩn"
 
-#: builtin/pack-objects.c:3926
+#: builtin/pack-objects.c:3949
 msgid "output pack to stdout"
 msgstr "xuất gói ra đầu ra tiêu chuẩn"
 
-#: builtin/pack-objects.c:3928
+#: builtin/pack-objects.c:3951
 msgid "include tag objects that refer to objects to be packed"
 msgstr "bao gồm các đối tượng tham chiếu đến các đối tượng được đóng gói"
 
-#: builtin/pack-objects.c:3930
+#: builtin/pack-objects.c:3953
 msgid "keep unreachable objects"
 msgstr "giữ lại các đối tượng không thể đọc được"
 
-#: builtin/pack-objects.c:3932
+#: builtin/pack-objects.c:3955
 msgid "pack loose unreachable objects"
 msgstr "pack mất các đối tượng không thể đọc được"
 
-#: builtin/pack-objects.c:3934
+#: builtin/pack-objects.c:3957
 msgid "unpack unreachable objects newer than <time>"
 msgstr ""
 "xả nén (gỡ khỏi gói) các đối tượng không thể đọc được mới hơn <thời-gian>"
 
-#: builtin/pack-objects.c:3937
+#: builtin/pack-objects.c:3960
 msgid "use the sparse reachability algorithm"
 msgstr "sử dụng thuật toán “sparse reachability”"
 
-#: builtin/pack-objects.c:3939
+#: builtin/pack-objects.c:3962
 msgid "create thin packs"
 msgstr "tạo gói nhẹ"
 
-#: builtin/pack-objects.c:3941
+#: builtin/pack-objects.c:3964
 msgid "create packs suitable for shallow fetches"
 msgstr "tạo gói để phù hợp cho lấy về nông (shallow)"
 
-#: builtin/pack-objects.c:3943
+#: builtin/pack-objects.c:3966
 msgid "ignore packs that have companion .keep file"
 msgstr "bỏ qua các gói mà nó có tập tin .keep đi kèm"
 
-#: builtin/pack-objects.c:3945
+#: builtin/pack-objects.c:3968
 msgid "ignore this pack"
 msgstr "bỏ qua gói này"
 
-#: builtin/pack-objects.c:3947
+#: builtin/pack-objects.c:3970
 msgid "pack compression level"
 msgstr "mức nén gói"
 
-#: builtin/pack-objects.c:3949
+#: builtin/pack-objects.c:3972
 msgid "do not hide commits by grafts"
 msgstr "không ẩn các lần chuyển giao bởi “grafts”"
 
-#: builtin/pack-objects.c:3951
+#: builtin/pack-objects.c:3974
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr "dùng mục lục ánh xạ nếu có thể được để nâng cao tốc độ đếm đối tượng"
 
-#: builtin/pack-objects.c:3953
+#: builtin/pack-objects.c:3976
 msgid "write a bitmap index together with the pack index"
 msgstr "ghi một mục lục ánh xạ cùng với mục lục gói"
 
-#: builtin/pack-objects.c:3957
+#: builtin/pack-objects.c:3980
 msgid "write a bitmap index if possible"
 msgstr "ghi mục lục ánh xạ nếu được"
 
-#: builtin/pack-objects.c:3961
+#: builtin/pack-objects.c:3984
 msgid "handling for missing objects"
 msgstr "xử lý cho thiếu đối tượng"
 
-#: builtin/pack-objects.c:3964
+#: builtin/pack-objects.c:3987
 msgid "do not pack objects in promisor packfiles"
 msgstr "không thể đóng gói các đối tượng trong các tập tin gói hứa hẹn"
 
-#: builtin/pack-objects.c:3966
+#: builtin/pack-objects.c:3989
 msgid "respect islands during delta compression"
 msgstr "tôn trọng island trong suốt quá trình nén “delta”"
 
-#: builtin/pack-objects.c:3968
+#: builtin/pack-objects.c:3991
 msgid "protocol"
 msgstr "giao thức"
 
-#: builtin/pack-objects.c:3969
+#: builtin/pack-objects.c:3992
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr "loại trừ bất kỳ cấu hình uploadpack.blobpackfileuri với giao thức này"
 
-#: builtin/pack-objects.c:4002
+#: builtin/pack-objects.c:4027
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "mức sau xích delta %d là quá sâu, buộc dùng %d"
 
-#: builtin/pack-objects.c:4007
+#: builtin/pack-objects.c:4032
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "pack.deltaCacheLimit là quá cao, ép dùng %d"
 
-#: builtin/pack-objects.c:4063
+#: builtin/pack-objects.c:4088
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr ""
 "--max-pack-size không thể được sử dụng để xây dựng một gói để vận chuyển"
 
-#: builtin/pack-objects.c:4065
+#: builtin/pack-objects.c:4090
 msgid "minimum pack size limit is 1 MiB"
 msgstr "giới hạn kích thước tối thiểu của gói là 1 MiB"
 
-#: builtin/pack-objects.c:4070
+#: builtin/pack-objects.c:4095
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "--thin không thể được dùng để xây dựng gói đánh mục lục được"
 
-#: builtin/pack-objects.c:4079
+#: builtin/pack-objects.c:4104
 msgid "cannot use --filter without --stdout"
 msgstr "không thể dùng tùy chọn --filter mà không có --stdout"
 
-#: builtin/pack-objects.c:4081
+#: builtin/pack-objects.c:4106
 msgid "cannot use --filter with --stdin-packs"
 msgstr "không thể dùng tùy chọn --filter với --stdin-packs"
 
-#: builtin/pack-objects.c:4085
+#: builtin/pack-objects.c:4110
 msgid "cannot use internal rev list with --stdin-packs"
 msgstr "không thể dùng danh sách rev bên trong với --stdin-packs"
 
-#: builtin/pack-objects.c:4144
+#: builtin/pack-objects.c:4169
 msgid "Enumerating objects"
 msgstr "Đánh số các đối tượng"
 
-#: builtin/pack-objects.c:4180
+#: builtin/pack-objects.c:4210
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -19380,10 +19870,6 @@ msgstr "đóng gói mọi thứ"
 msgid "prune loose refs (default)"
 msgstr "prune (cắt cụt) những tham chiếu bị mất (mặc định)"
 
-#: builtin/prune-packed.c:6
-msgid "git prune-packed [-n | --dry-run] [-q | --quiet]"
-msgstr "git prune-packed [-n | --dry-run] [-q | --quiet]"
-
 #: builtin/prune.c:14
 msgid "git prune [-n] [-v] [--progress] [--expire <time>] [--] [<head>...]"
 msgstr "git prune [-n] [-v] [--progress] [--expire <thời-gian>] [--] [<head>…]"
@@ -19404,11 +19890,6 @@ msgstr "giới hạn giao đến các đối tượng nằm ngoài các tập ti
 msgid "cannot prune in a precious-objects repo"
 msgstr "không thể tỉa bớt trong một kho đối_tượng_vĩ_đại"
 
-#: builtin/pull.c:45 builtin/pull.c:47
-#, c-format
-msgid "Invalid value for %s: %s"
-msgstr "Giá trị không hợp lệ %s: %s"
-
 #: builtin/pull.c:67
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
 msgstr "git pull [<các tùy chọn>] [<kho-chứa> [<refspec>…]]"
@@ -19433,7 +19914,7 @@ msgstr "cho phép chuyển-tiếp-nhanh"
 msgid "control use of pre-merge-commit and commit-msg hooks"
 msgstr "điều khiển cách dùng các móc (hook) pre-merge-commit và commit-msg"
 
-#: builtin/pull.c:171 parse-options.h:340
+#: builtin/pull.c:171 parse-options.h:371
 msgid "automatically stash/stash pop before and after"
 msgstr "tự động stash/stash pop trước và sau"
 
@@ -19449,11 +19930,6 @@ msgstr "ép buộc ghi đè lên nhánh nội bộ"
 msgid "number of submodules pulled in parallel"
 msgstr "số lượng mô-đun-con được đẩy lên đồng thời"
 
-#: builtin/pull.c:321
-#, c-format
-msgid "Invalid value for pull.ff: %s"
-msgstr "Giá trị không hợp lệ cho pull.ff: %s"
-
 #: builtin/pull.c:449
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
@@ -19490,7 +19966,7 @@ msgstr ""
 "theo mặc định cho nhánh hiện tại của bạn, bạn phải chỉ định\n"
 "một nhánh trên dòng lệnh."
 
-#: builtin/pull.c:460 builtin/rebase.c:951
+#: builtin/pull.c:460 builtin/rebase.c:978
 msgid "You are not currently on a branch."
 msgstr "Hiện tại bạn chẳng ở nhánh nào cả."
 
@@ -19507,16 +19983,16 @@ msgid "See git-pull(1) for details."
 msgstr "Xem git-pull(1) để biết thêm chi tiết."
 
 #: builtin/pull.c:467 builtin/pull.c:473 builtin/pull.c:482
-#: builtin/rebase.c:957
+#: builtin/rebase.c:984
 msgid "<remote>"
 msgstr "<máy chủ>"
 
 #: builtin/pull.c:467 builtin/pull.c:482 builtin/pull.c:487
-#: contrib/scalar/scalar.c:375
+#: contrib/scalar/scalar.c:374
 msgid "<branch>"
 msgstr "<nhánh>"
 
-#: builtin/pull.c:475 builtin/rebase.c:949
+#: builtin/pull.c:475 builtin/rebase.c:976
 msgid "There is no tracking information for the current branch."
 msgstr "Ở đây không có thông tin theo dõi cho nhánh hiện hành."
 
@@ -19575,21 +20051,21 @@ msgstr ""
 "hoặc --ff-only trên dòng lệnh để ghi đè các mặc định đã cấu hình cho mỗi\n"
 "lần gọi.\n"
 
-#: builtin/pull.c:1046
+#: builtin/pull.c:1047
 msgid "Updating an unborn branch with changes added to the index."
 msgstr ""
 "Đang cập nhật một nhánh chưa được sinh ra với các thay đổi được thêm vào "
 "bảng mục lục."
 
-#: builtin/pull.c:1050
+#: builtin/pull.c:1051
 msgid "pull with rebase"
 msgstr "pull với rebase"
 
-#: builtin/pull.c:1051
+#: builtin/pull.c:1052
 msgid "please commit or stash them."
 msgstr "xin hãy chuyển giao hoặc tạm cất (stash) chúng."
 
-#: builtin/pull.c:1076
+#: builtin/pull.c:1077
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -19600,7 +20076,7 @@ msgstr ""
 "đang chuyển-tiếp-nhanh cây làm việc của bạn từ\n"
 "lần chuyển giaot %s."
 
-#: builtin/pull.c:1082
+#: builtin/pull.c:1083
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -19618,23 +20094,23 @@ msgstr ""
 "$ git reset --hard\n"
 "để khôi phục lại."
 
-#: builtin/pull.c:1097
+#: builtin/pull.c:1098
 msgid "Cannot merge multiple branches into empty head."
 msgstr "Không thể hòa trộn nhiều nhánh vào trong một head trống rỗng."
 
-#: builtin/pull.c:1102
+#: builtin/pull.c:1103
 msgid "Cannot rebase onto multiple branches."
 msgstr "Không thể thực hiện lệnh rebase (cải tổ) trên nhiều nhánh."
 
-#: builtin/pull.c:1104
+#: builtin/pull.c:1105
 msgid "Cannot fast-forward to multiple branches."
 msgstr "Không thể thực hiện chuyển tiếp nhanh trên nhiều nhánh."
 
-#: builtin/pull.c:1119
+#: builtin/pull.c:1120
 msgid "Need to specify how to reconcile divergent branches."
 msgstr "Caanfchir định làm thế nào để giải quyết các nhánh phân kỳ."
 
-#: builtin/pull.c:1133
+#: builtin/pull.c:1134
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr ""
 "không thể cải tổ với các thay đổi mô-đun-con được ghi lại một cách cục bộ"
@@ -19818,7 +20294,7 @@ msgstr "Đang đẩy lên %s\n"
 msgid "failed to push some refs to '%s'"
 msgstr "gặp lỗi khi đẩy tới một số tham chiếu đến “%s”"
 
-#: builtin/push.c:544 builtin/submodule--helper.c:3259
+#: builtin/push.c:544 builtin/submodule--helper.c:3377
 msgid "repository"
 msgstr "kho"
 
@@ -20058,11 +20534,11 @@ msgstr "gỡ lỗi “unpack-trees”"
 msgid "suppress feedback messages"
 msgstr "không xuất các thông tin phản hồi"
 
-#: builtin/read-tree.c:183
+#: builtin/read-tree.c:190
 msgid "You need to resolve your current index first"
 msgstr "Bạn cần phải giải quyết bảng mục lục hiện tại của bạn trước đã"
 
-#: builtin/rebase.c:35
+#: builtin/rebase.c:36
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
 "[<upstream> [<branch>]]"
@@ -20070,55 +20546,51 @@ msgstr ""
 "git rebase [-i] [các tùy chọn] [--exec <lệnh>] [--onto <newbase> | --keep-"
 "base] [<upstream>] [<nhánh>]]"
 
-#: builtin/rebase.c:37
+#: builtin/rebase.c:38
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]"
 msgstr ""
 "git rebase [-i] [các tùy chọn] [--exec <lệnh>] [--onto <newbase>] --root "
 "[<nhánh>]"
 
-#: builtin/rebase.c:39
-msgid "git rebase --continue | --abort | --skip | --edit-todo"
-msgstr "git rebase --continue | --abort | --skip | --edit-todo"
-
-#: builtin/rebase.c:230
+#: builtin/rebase.c:231
 #, c-format
 msgid "could not create temporary %s"
 msgstr "không thể tạo %s tạm thời"
 
-#: builtin/rebase.c:236
+#: builtin/rebase.c:237
 msgid "could not mark as interactive"
 msgstr "không thể đánh dấu là tương tác"
 
-#: builtin/rebase.c:289
+#: builtin/rebase.c:290
 msgid "could not generate todo list"
 msgstr "không thể tạo danh sách cần làm"
 
-#: builtin/rebase.c:331
+#: builtin/rebase.c:332
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "lần chuyển giao cơ sỏ phải được chỉ định với --upstream hoặc --onto"
 
-#: builtin/rebase.c:390
+#: builtin/rebase.c:391
 #, c-format
 msgid "%s requires the merge backend"
 msgstr "%s cần một ứng dụng hòa trộn chạy phía sau"
 
-#: builtin/rebase.c:432
+#: builtin/rebase.c:433
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "không thể đặt lấy “onto”: “%s”"
 
-#: builtin/rebase.c:449
+#: builtin/rebase.c:450
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "orig-head không hợp lệ: “%s”"
 
-#: builtin/rebase.c:474
+#: builtin/rebase.c:475
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "đang bỏ qua allow_rerere_autoupdate không hợp lệ: “%s”"
 
-#: builtin/rebase.c:597
+#: builtin/rebase.c:600
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -20133,7 +20605,7 @@ msgstr ""
 "Để bãi bỏ và quay trở lại trạng thái trước \"git rebase\", chạy \"git rebase "
 "--abort\"."
 
-#: builtin/rebase.c:680
+#: builtin/rebase.c:685
 #, c-format
 msgid ""
 "\n"
@@ -20152,7 +20624,12 @@ msgstr ""
 "\n"
 "Kết quả là git không thể cải tổ lại chúng."
 
-#: builtin/rebase.c:925
+#: builtin/rebase.c:836
+#, c-format
+msgid "could not switch to %s"
+msgstr "không thể chuyển đến %s"
+
+#: builtin/rebase.c:952
 #, c-format
 msgid ""
 "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
@@ -20161,7 +20638,7 @@ msgstr ""
 "kiểu rỗng không được nhận dạng “%s”; giá trị hợp lệ là \"drop\", \"keep\", "
 "và \"ask\"."
 
-#: builtin/rebase.c:943
+#: builtin/rebase.c:970
 #, c-format
 msgid ""
 "%s\n"
@@ -20178,7 +20655,7 @@ msgstr ""
 "    git rebase “<nhánh>”\n"
 "\n"
 
-#: builtin/rebase.c:959
+#: builtin/rebase.c:986
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -20192,185 +20669,185 @@ msgstr ""
 "    git branch --set-upstream-to=%s/<nhánh> %s\n"
 "\n"
 
-#: builtin/rebase.c:989
+#: builtin/rebase.c:1016
 msgid "exec commands cannot contain newlines"
 msgstr "các lệnh thực thi không thể chứa các ký tự dòng mới"
 
-#: builtin/rebase.c:993
+#: builtin/rebase.c:1020
 msgid "empty exec command"
 msgstr "lệnh thực thi trống rỗng"
 
-#: builtin/rebase.c:1023
+#: builtin/rebase.c:1051
 msgid "rebase onto given branch instead of upstream"
 msgstr "cải tổ vào nhánh đã cho thay cho thượng nguồn"
 
-#: builtin/rebase.c:1025
+#: builtin/rebase.c:1053
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr ""
 "sử dụng các cơ sở hòa trộn của thượng nguồn và nhánh như là cơ sở hiện tại"
 
-#: builtin/rebase.c:1027
+#: builtin/rebase.c:1055
 msgid "allow pre-rebase hook to run"
 msgstr "cho phép móc (hook) pre-rebase được chạy"
 
-#: builtin/rebase.c:1029
+#: builtin/rebase.c:1057
 msgid "be quiet. implies --no-stat"
 msgstr "hãy im lặng. ý là --no-stat"
 
-#: builtin/rebase.c:1032
+#: builtin/rebase.c:1060
 msgid "display a diffstat of what changed upstream"
 msgstr "hiển thị một diffstat của những thay đổi thượng nguồn"
 
-#: builtin/rebase.c:1035
+#: builtin/rebase.c:1063
 msgid "do not show diffstat of what changed upstream"
 msgstr "đừng hiển thị diffstat của những thay đổi thượng nguồn"
 
-#: builtin/rebase.c:1038
+#: builtin/rebase.c:1066
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "thêm dòng Signed-off-by vào cuối cho từng lần chuyển giao"
 
-#: builtin/rebase.c:1041
+#: builtin/rebase.c:1069
 msgid "make committer date match author date"
 msgstr "làm ngày tháng chuyển giao khớp với ngày của tác giả"
 
-#: builtin/rebase.c:1043
+#: builtin/rebase.c:1071
 msgid "ignore author date and use current date"
 msgstr "bỏ qua ngày tác giả và sử dụng ngày tháng hiện tại"
 
-#: builtin/rebase.c:1045
+#: builtin/rebase.c:1073
 msgid "synonym of --reset-author-date"
 msgstr "đồng nghĩa với --reset-author-date"
 
-#: builtin/rebase.c:1047 builtin/rebase.c:1051
+#: builtin/rebase.c:1075 builtin/rebase.c:1079
 msgid "passed to 'git apply'"
 msgstr "chuyển cho “git apply”"
 
-#: builtin/rebase.c:1049
+#: builtin/rebase.c:1077
 msgid "ignore changes in whitespace"
 msgstr "lờ đi sự thay đổi do khoảng trắng gây ra"
 
-#: builtin/rebase.c:1053 builtin/rebase.c:1056
+#: builtin/rebase.c:1081 builtin/rebase.c:1084
 msgid "cherry-pick all commits, even if unchanged"
 msgstr ""
 "cherry-pick tất cả các lần chuyển giao, ngay cả khi không có thay đổi gì"
 
-#: builtin/rebase.c:1058
+#: builtin/rebase.c:1086
 msgid "continue"
 msgstr "tiếp tục"
 
-#: builtin/rebase.c:1061
+#: builtin/rebase.c:1089
 msgid "skip current patch and continue"
 msgstr "bỏ qua miếng vá hiện hành và tiếp tục"
 
-#: builtin/rebase.c:1063
+#: builtin/rebase.c:1091
 msgid "abort and check out the original branch"
 msgstr "bãi bỏ và lấy ra nhánh nguyên thủy"
 
-#: builtin/rebase.c:1066
+#: builtin/rebase.c:1094
 msgid "abort but keep HEAD where it is"
 msgstr "bãi bỏ nhưng vẫn vẫn giữ HEAD chỉ đến nó"
 
-#: builtin/rebase.c:1067
+#: builtin/rebase.c:1095
 msgid "edit the todo list during an interactive rebase"
 msgstr "sửa danh sách cần làm trong quá trình “rebase” (cải tổ) tương tác"
 
-#: builtin/rebase.c:1070
+#: builtin/rebase.c:1098
 msgid "show the patch file being applied or merged"
 msgstr "hiển thị miếng vá đã được áp dụng hay hòa trộn"
 
-#: builtin/rebase.c:1073
+#: builtin/rebase.c:1101
 msgid "use apply strategies to rebase"
 msgstr "dùng chiến lược áp dụng để cải tổ"
 
-#: builtin/rebase.c:1077
+#: builtin/rebase.c:1105
 msgid "use merging strategies to rebase"
 msgstr "dùng chiến lược hòa trộn để cải tổ"
 
-#: builtin/rebase.c:1081
+#: builtin/rebase.c:1109
 msgid "let the user edit the list of commits to rebase"
 msgstr "để người dùng sửa danh sách các lần chuyển giao muốn cải tổ"
 
-#: builtin/rebase.c:1085
+#: builtin/rebase.c:1113
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(ĐàLẠC HẬU) hay thử tạo lại các hòa trộn thay vì bỏ qua chúng"
 
-#: builtin/rebase.c:1090
+#: builtin/rebase.c:1118
 msgid "how to handle commits that become empty"
 msgstr "xử lý các lần chuyển giao mà nó trở thành trống rỗng như thế nào"
 
-#: builtin/rebase.c:1093
+#: builtin/rebase.c:1121
 msgid "keep commits which start empty"
 msgstr "bỏ qua các lần chuyển giao mà nó bắt đầu trống rỗng"
 
-#: builtin/rebase.c:1097
+#: builtin/rebase.c:1125
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "di chuyển các lần chuyển giao mà bắt đầu bằng squash!/fixup! dưới -i"
 
-#: builtin/rebase.c:1104
+#: builtin/rebase.c:1132
 msgid "add exec lines after each commit of the editable list"
 msgstr "thêm các dòng thực thi sau từng lần chuyển giao của danh sách sửa được"
 
-#: builtin/rebase.c:1108
+#: builtin/rebase.c:1136
 msgid "allow rebasing commits with empty messages"
 msgstr "chấp nhận cải tổ các chuyển giao mà không ghi chú gì"
 
-#: builtin/rebase.c:1112
+#: builtin/rebase.c:1140
 msgid "try to rebase merges instead of skipping them"
 msgstr "cố thử cải tổ các hòa trộn thay vì bỏ qua chúng"
 
-#: builtin/rebase.c:1115
+#: builtin/rebase.c:1143
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "dùng “merge-base --fork-point” để định nghĩa lại thượng nguồn"
 
-#: builtin/rebase.c:1117
+#: builtin/rebase.c:1145
 msgid "use the given merge strategy"
 msgstr "dùng chiến lược hòa trộn đã cho"
 
-#: builtin/rebase.c:1119 builtin/revert.c:115
+#: builtin/rebase.c:1147 builtin/revert.c:115
 msgid "option"
 msgstr "tùy chọn"
 
-#: builtin/rebase.c:1120
+#: builtin/rebase.c:1148
 msgid "pass the argument through to the merge strategy"
 msgstr "chuyển thao số đến chiến lược hòa trộn"
 
-#: builtin/rebase.c:1123
+#: builtin/rebase.c:1151
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "cải tổ tất các các lần chuyển giao cho đến root"
 
-#: builtin/rebase.c:1126
+#: builtin/rebase.c:1154
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "lập lịch lại một cách tự động bất kỳ “exec“ bị lỗi"
 
-#: builtin/rebase.c:1128
+#: builtin/rebase.c:1156
 msgid "apply all changes, even those already present upstream"
 msgstr ""
 "áp dụng mọi thay đổi, ngay cả khi những thứ đó đã sẵn có ở thượng nguồn"
 
-#: builtin/rebase.c:1149
+#: builtin/rebase.c:1177
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr ""
 "Hình như đang trong quá trình thực hiện lệnh “git am”. Không thể rebase."
 
-#: builtin/rebase.c:1180
+#: builtin/rebase.c:1208
 msgid "--preserve-merges was replaced by --rebase-merges"
 msgstr "--preserve-merges đã bị thay thế bằng --rebase-merges"
 
-#: builtin/rebase.c:1202
+#: builtin/rebase.c:1230
 msgid "No rebase in progress?"
 msgstr "Không có tiến trình rebase nào phải không?"
 
-#: builtin/rebase.c:1206
+#: builtin/rebase.c:1234
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr ""
 "Hành động “--edit-todo” chỉ có thể dùng trong quá trình “rebase” (sửa lịch "
 "sử) tương tác."
 
-#: builtin/rebase.c:1229 t/helper/test-fast-rebase.c:122
+#: builtin/rebase.c:1257 t/helper/test-fast-rebase.c:122
 msgid "Cannot read HEAD"
 msgstr "Không thể đọc HEAD"
 
-#: builtin/rebase.c:1241
+#: builtin/rebase.c:1269
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -20378,16 +20855,16 @@ msgstr ""
 "Bạn phải sửa tất cả các lần hòa trộn xung đột và sau\n"
 "đó đánh dấu chúng là cần xử lý sử dụng lệnh git add"
 
-#: builtin/rebase.c:1260
+#: builtin/rebase.c:1287
 msgid "could not discard worktree changes"
 msgstr "không thể loại bỏ các thay đổi cây-làm-việc"
 
-#: builtin/rebase.c:1279
+#: builtin/rebase.c:1308
 #, c-format
 msgid "could not move back to %s"
 msgstr "không thể quay trở lại %s"
 
-#: builtin/rebase.c:1325
+#: builtin/rebase.c:1354
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -20408,124 +20885,119 @@ msgstr ""
 "và chạy TÔI lần nữa. TÔI dừng lại trong trường hợp bạn vẫn\n"
 "có một số thứ quý giá ở đây.\n"
 
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1382
 msgid "switch `C' expects a numerical value"
 msgstr "tùy chọn “%c” cần một giá trị bằng số"
 
-#: builtin/rebase.c:1395
+#: builtin/rebase.c:1424
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "Không hiểu chế độ: %s"
 
-#: builtin/rebase.c:1434
+#: builtin/rebase.c:1463
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy cần --merge hay --interactive"
 
-#: builtin/rebase.c:1463
+#: builtin/rebase.c:1492
 msgid "apply options and merge options cannot be used together"
 msgstr ""
 "không thể tổ hợp các tùy chọn áp dụng với các tùy chọn hòa trộn với nhau"
 
-#: builtin/rebase.c:1476
+#: builtin/rebase.c:1505
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "Không hiểu ứng dụng chạy phía sau lệnh cải tổ: %s"
 
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1534
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec cần --exec hay --interactive"
 
-#: builtin/rebase.c:1536
+#: builtin/rebase.c:1565
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "thượng nguồn không hợp lệ “%s”"
 
-#: builtin/rebase.c:1542
+#: builtin/rebase.c:1571
 msgid "Could not create new root commit"
 msgstr "Không thể tạo lần chuyển giao gốc mới"
 
-#: builtin/rebase.c:1568
+#: builtin/rebase.c:1597
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr "“%s”: cần chính xác một cơ sở hòa trộn với nhánh"
 
-#: builtin/rebase.c:1571
+#: builtin/rebase.c:1600
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "“%s”: cần chính xác một cơ sở hòa trộn"
 
-#: builtin/rebase.c:1580
+#: builtin/rebase.c:1609
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "Không chỉ đến một lần chuyển giao không hợp lệ “%s”"
 
-#: builtin/rebase.c:1607
+#: builtin/rebase.c:1636
 #, c-format
 msgid "no such branch/commit '%s'"
 msgstr "không có nhánh/lần chuyển giao “%s” như thế"
 
-#: builtin/rebase.c:1618 builtin/submodule--helper.c:39
-#: builtin/submodule--helper.c:2659
+#: builtin/rebase.c:1647 builtin/submodule--helper.c:43
+#: builtin/submodule--helper.c:2477
 #, c-format
 msgid "No such ref: %s"
 msgstr "Không có tham chiếu nào như thế: %s"
 
-#: builtin/rebase.c:1629
+#: builtin/rebase.c:1658
 msgid "Could not resolve HEAD to a revision"
 msgstr "Không thể phân giải lần chuyển giao HEAD đến một điểm xét duyệt"
 
-#: builtin/rebase.c:1650
+#: builtin/rebase.c:1679
 msgid "Please commit or stash them."
 msgstr "Xin hãy chuyển giao hoặc tạm cất (stash) chúng."
 
-#: builtin/rebase.c:1686
-#, c-format
-msgid "could not switch to %s"
-msgstr "không thể chuyển đến %s"
-
-#: builtin/rebase.c:1697
+#: builtin/rebase.c:1714
 msgid "HEAD is up to date."
 msgstr "HEAD đã cập nhật."
 
-#: builtin/rebase.c:1699
+#: builtin/rebase.c:1716
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "Nhánh hiện tại %s đã được cập nhật rồi.\n"
 
-#: builtin/rebase.c:1707
+#: builtin/rebase.c:1724
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD hiện đã được cập nhật rồi, bị ép buộc rebase."
 
-#: builtin/rebase.c:1709
+#: builtin/rebase.c:1726
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "Nhánh hiện tại %s đã được cập nhật rồi, lệnh rebase ép buộc.\n"
 
-#: builtin/rebase.c:1717
+#: builtin/rebase.c:1734
 msgid "The pre-rebase hook refused to rebase."
 msgstr "Móc (hook) pre-rebase từ chối rebase."
 
-#: builtin/rebase.c:1724
+#: builtin/rebase.c:1741
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "Thay đổi thành %s:\n"
 
-#: builtin/rebase.c:1727
+#: builtin/rebase.c:1744
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "Thay đổi từ %s thành %s:\n"
 
-#: builtin/rebase.c:1752
+#: builtin/rebase.c:1769
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr ""
 "Trước tiên, di chuyển head để xem lại các công việc trên đỉnh của nó…\n"
 
-#: builtin/rebase.c:1761
+#: builtin/rebase.c:1781
 msgid "Could not detach HEAD"
 msgstr "Không thể tách rời HEAD"
 
-#: builtin/rebase.c:1770
+#: builtin/rebase.c:1790
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "Chuyển-tiếp-nhanh %s đến %s.\n"
@@ -20534,7 +21006,7 @@ msgstr "Chuyển-tiếp-nhanh %s đến %s.\n"
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack <thư-mục-git>"
 
-#: builtin/receive-pack.c:1275
+#: builtin/receive-pack.c:1263
 msgid ""
 "By default, updating the current branch in a non-bare repository\n"
 "is denied, because it will make the index and work tree inconsistent\n"
@@ -20564,7 +21036,7 @@ msgstr ""
 "Để chấm dứt lời nhắn này và vẫn giữ cách ứng xử mặc định, hãy đặt\n"
 "biến cấu hình “receive.denyCurrentBranch” thành “refuse”."
 
-#: builtin/receive-pack.c:1295
+#: builtin/receive-pack.c:1283
 msgid ""
 "By default, deleting the current branch is denied, because the next\n"
 "'git clone' won't result in any file checked out, causing confusion.\n"
@@ -20585,79 +21057,112 @@ msgstr ""
 "\n"
 "Để chấm dứt lời nhắn này, bạn hãy đặt nó thành “refuse”."
 
-#: builtin/receive-pack.c:2474
+#: builtin/receive-pack.c:2476
 msgid "quiet"
 msgstr "im lặng"
 
-#: builtin/receive-pack.c:2489
+#: builtin/receive-pack.c:2491
 msgid "you must specify a directory"
 msgstr "bạn phải chỉ định thư mục"
 
-#: builtin/reflog.c:17
+#: builtin/reflog.c:9
+msgid "git reflog [show] [<log-options>] [<ref>]"
+msgstr "git reflog [show] [<các tùy chọn>] [<tham chiếu>]"
+
+#: builtin/reflog.c:12
 msgid ""
-"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<refs>..."
+"git reflog expire [--expire=<time>] [--expire-unreachable=<time>]\n"
+"                  [--rewrite] [--updateref] [--stale-fix]\n"
+"                  [--dry-run | -n] [--verbose] [--all [--single-worktree] | "
+"<refs>...]"
 msgstr ""
-"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<các tham chiếu>…"
+"git reflog expire [--expire=<time>] [--expire-unreachable=<time>]\n"
+"                  [--rewrite] [--updateref] [--stale-fix]\n"
+"                  [--dry-run | -n] [--verbose] [--all [--single-worktree] | "
+"<refs>...]"
 
-#: builtin/reflog.c:22
+#: builtin/reflog.c:17
 msgid ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] "
-"<refs>..."
+"git reflog delete [--rewrite] [--updateref]\n"
+"                  [--dry-run | -n] [--verbose] <ref>@{<specifier>}..."
 msgstr ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] "
-"<các tham chiếu>…"
+"git reflog delete [--rewrite] [--updateref]\n"
+"                  [--dry-run | -n] [--verbose] <ref>@{<specifier>}..."
 
-#: builtin/reflog.c:25
+#: builtin/reflog.c:21
 msgid "git reflog exists <ref>"
 msgstr "git reflog exists <tham_chiếu>"
 
-#: builtin/reflog.c:585 builtin/reflog.c:590
+#: builtin/reflog.c:197 builtin/reflog.c:211
 #, c-format
-msgid "'%s' is not a valid timestamp"
-msgstr "“%s” không phải là dấu thời gian hợp lệ"
+msgid "invalid timestamp '%s' given to '--%s'"
+msgstr "dấu vết thời gian không hợp lệ '%s' đưa cho '--%s'"
+
+#: builtin/reflog.c:240 builtin/reflog.c:359
+msgid "do not actually prune any entries"
+msgstr "thực tế không cắt ngắn bất kỳ mục tin nào"
+
+#: builtin/reflog.c:243 builtin/reflog.c:362
+msgid ""
+"rewrite the old SHA1 with the new SHA1 of the entry that now precedes it"
+msgstr "ghi lại SHA1 cũ bằng một SHA1 mới của mục tin mà giờ đứng trước nó"
+
+#: builtin/reflog.c:246 builtin/reflog.c:365
+msgid "update the reference to the value of the top reflog entry"
+msgstr "cập nhật tham chiếu đến giá trị của mục tin reflog trên cùng"
+
+#: builtin/reflog.c:248 builtin/reflog.c:367
+msgid "print extra information on screen"
+msgstr "xuất thông tin thêm trên màn hình"
+
+#: builtin/reflog.c:249 builtin/reflog.c:253
+msgid "timestamp"
+msgstr "dấu vết thời gian"
+
+#: builtin/reflog.c:250
+msgid "prune entries older than the specified time"
+msgstr "cắt cụt các mục tin cũ hơn khoảng thời gian đã cho"
 
-#: builtin/reflog.c:631
+#: builtin/reflog.c:254
+msgid ""
+"prune entries older than <time> that are not reachable from the current tip "
+"of the branch"
+msgstr ""
+"cắt cụt các mục tin cũ hơn <thời gian> cái mà không thể tiếp cận được từ "
+"đỉnh hiện tại của nhánh"
+
+#: builtin/reflog.c:258
+msgid "prune any reflog entries that point to broken commits"
+msgstr "cắt ngắn bất kỳ mục tin reflog cái mà chỉ đến lần chuyển giao hỏng"
+
+#: builtin/reflog.c:259
+msgid "process the reflogs of all references"
+msgstr "xử lý các reflogs cho mọi tham chiếu"
+
+#: builtin/reflog.c:261
+msgid "limits processing to reflogs from the current worktree only"
+msgstr "giới hạn xử lý với reflogs chỉ từ thư mục làm việc hiện tại"
+
+#: builtin/reflog.c:294
 #, c-format
 msgid "Marking reachable objects..."
 msgstr "Đánh dấu các đối tượng tiếp cận được…"
 
-#: builtin/reflog.c:675
+#: builtin/reflog.c:338
 #, c-format
 msgid "%s points nowhere!"
 msgstr "%s chẳng chỉ đến đâu cả!"
 
-#: builtin/reflog.c:731
+#: builtin/reflog.c:374
 msgid "no reflog specified to delete"
 msgstr "chưa chỉ ra reflog để xóa"
 
-#: builtin/reflog.c:742
-#, c-format
-msgid "not a reflog: %s"
-msgstr "không phải một reflog: %s"
-
-#: builtin/reflog.c:747
-#, c-format
-msgid "no reflog for '%s'"
-msgstr "không reflog cho “%s”"
-
-#: builtin/reflog.c:794
+#: builtin/reflog.c:396
 #, c-format
 msgid "invalid ref format: %s"
 msgstr "định dạng tham chiếu không hợp lệ: %s"
 
-#: builtin/reflog.c:803
-msgid "git reflog [ show | expire | delete | exists ]"
-msgstr "git reflog [ show | expire | delete | exists ]"
-
-#: builtin/remote.c:17
-msgid "git remote [-v | --verbose]"
-msgstr "git remote [-v | --verbose]"
-
-#: builtin/remote.c:18
+#: builtin/remote.c:19
 msgid ""
 "git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--"
 "mirror=<fetch|push>] <name> <url>"
@@ -20665,87 +21170,87 @@ msgstr ""
 "git remote add [-t <nhánh>] [-m <master>] [-f] [--tags|--no-tags] [--"
 "mirror=<fetch|push>] <tên> <url>"
 
-#: builtin/remote.c:19 builtin/remote.c:39
-msgid "git remote rename <old> <new>"
-msgstr "git remote rename <tên-cũ> <tên-mới>"
+#: builtin/remote.c:20 builtin/remote.c:40
+msgid "git remote rename [--[no-]progress] <old> <new>"
+msgstr "git remote rename [--[no-]progress] <tên-cũ> <tên-mới>"
 
-#: builtin/remote.c:20 builtin/remote.c:44
+#: builtin/remote.c:21 builtin/remote.c:45
 msgid "git remote remove <name>"
 msgstr "git remote remove <tên>"
 
-#: builtin/remote.c:21 builtin/remote.c:49
+#: builtin/remote.c:22 builtin/remote.c:50
 msgid "git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"
 msgstr "git remote set-head <tên> (-a | --auto | -d | --delete | <nhánh>)"
 
-#: builtin/remote.c:22
+#: builtin/remote.c:23
 msgid "git remote [-v | --verbose] show [-n] <name>"
 msgstr "git remote [-v | --verbose] show [-n] <tên>"
 
-#: builtin/remote.c:23
+#: builtin/remote.c:24
 msgid "git remote prune [-n | --dry-run] <name>"
 msgstr "git remote prune [-n | --dry-run] <tên>"
 
-#: builtin/remote.c:24
+#: builtin/remote.c:25
 msgid ""
 "git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
 msgstr ""
 "git remote [-v | --verbose] update [-p | --prune] [(<nhóm> | <máy-chủ>)…]"
 
-#: builtin/remote.c:25
+#: builtin/remote.c:26
 msgid "git remote set-branches [--add] <name> <branch>..."
 msgstr "git remote set-branches [--add] <tên> <nhánh>…"
 
-#: builtin/remote.c:26 builtin/remote.c:75
+#: builtin/remote.c:27 builtin/remote.c:76
 msgid "git remote get-url [--push] [--all] <name>"
 msgstr "git remote set-url [--push] [--all] <tên>"
 
-#: builtin/remote.c:27 builtin/remote.c:80
+#: builtin/remote.c:28 builtin/remote.c:81
 msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]"
 msgstr "git remote set-url [--push] <tên> <url-mới> [<url-cũ>]"
 
-#: builtin/remote.c:28 builtin/remote.c:81
+#: builtin/remote.c:29 builtin/remote.c:82
 msgid "git remote set-url --add <name> <newurl>"
 msgstr "git remote set-url --add <tên> <url-mới>"
 
-#: builtin/remote.c:29 builtin/remote.c:82
+#: builtin/remote.c:30 builtin/remote.c:83
 msgid "git remote set-url --delete <name> <url>"
 msgstr "git remote set-url --delete <tên> <url>"
 
-#: builtin/remote.c:34
+#: builtin/remote.c:35
 msgid "git remote add [<options>] <name> <url>"
 msgstr "git remote add [<các tùy chọn>] <tên> <url>"
 
-#: builtin/remote.c:54
+#: builtin/remote.c:55
 msgid "git remote set-branches <name> <branch>..."
 msgstr "git remote set-branches <tên> <nhánh>…"
 
-#: builtin/remote.c:55
+#: builtin/remote.c:56
 msgid "git remote set-branches --add <name> <branch>..."
 msgstr "git remote set-branches --add <tên> <nhánh>…"
 
-#: builtin/remote.c:60
+#: builtin/remote.c:61
 msgid "git remote show [<options>] <name>"
 msgstr "git remote show [<các tùy chọn>] <tên>"
 
-#: builtin/remote.c:65
+#: builtin/remote.c:66
 msgid "git remote prune [<options>] <name>"
 msgstr "git remote prune [<các tùy chọn>] <tên>"
 
-#: builtin/remote.c:70
+#: builtin/remote.c:71
 msgid "git remote update [<options>] [<group> | <remote>]..."
 msgstr "git remote update [<các tùy chọn>] [<nhóm> | <máy-chủ>]…"
 
-#: builtin/remote.c:99
+#: builtin/remote.c:100
 #, c-format
 msgid "Updating %s"
 msgstr "Đang cập nhật %s"
 
-#: builtin/remote.c:101
+#: builtin/remote.c:102
 #, c-format
 msgid "Could not fetch %s"
 msgstr "Không thể lấy“%s” về"
 
-#: builtin/remote.c:131
+#: builtin/remote.c:132
 msgid ""
 "--mirror is dangerous and deprecated; please\n"
 "\t use --mirror=fetch or --mirror=push instead"
@@ -20753,77 +21258,77 @@ msgstr ""
 "--mirror nguy hiểm và không dùng nữa; xin hãy\n"
 "\t sử dụng tùy chọn --mirror=fetch hoặc --mirror=push để thay thế"
 
-#: builtin/remote.c:148
+#: builtin/remote.c:149
 #, c-format
 msgid "unknown mirror argument: %s"
 msgstr "không hiểu tham số máy bản sao (mirror): %s"
 
-#: builtin/remote.c:164
+#: builtin/remote.c:165
 msgid "fetch the remote branches"
 msgstr "lấy về các nhánh từ máy chủ"
 
-#: builtin/remote.c:166
+#: builtin/remote.c:167
 msgid "import all tags and associated objects when fetching"
 msgstr "nhập vào tất cả các đối tượng thẻ và thành phần liên quan khi lấy về"
 
-#: builtin/remote.c:169
+#: builtin/remote.c:170
 msgid "or do not fetch any tag at all (--no-tags)"
 msgstr "hoặc không lấy về bất kỳ thẻ nào (--no-tags)"
 
-#: builtin/remote.c:171
+#: builtin/remote.c:172
 msgid "branch(es) to track"
 msgstr "các nhánh để theo dõi"
 
-#: builtin/remote.c:172
+#: builtin/remote.c:173
 msgid "master branch"
 msgstr "nhánh master"
 
-#: builtin/remote.c:174
+#: builtin/remote.c:175
 msgid "set up remote as a mirror to push to or fetch from"
 msgstr "đặt máy chủ (remote) như là một máy bản sao để push hay fetch từ đó"
 
-#: builtin/remote.c:186
+#: builtin/remote.c:187
 msgid "specifying a master branch makes no sense with --mirror"
 msgstr "đang chỉ định một nhánh master không hợp lý với tùy chọn --mirror"
 
-#: builtin/remote.c:188
+#: builtin/remote.c:189
 msgid "specifying branches to track makes sense only with fetch mirrors"
 msgstr "chỉ định những nhánh để theo dõi chỉ hợp lý với các “fetch mirror”"
 
-#: builtin/remote.c:195 builtin/remote.c:705
+#: builtin/remote.c:196 builtin/remote.c:716
 #, c-format
 msgid "remote %s already exists."
 msgstr "máy chủ %s đã tồn tại rồi."
 
-#: builtin/remote.c:240
+#: builtin/remote.c:241
 #, c-format
 msgid "Could not setup master '%s'"
 msgstr "Không thể cài đặt nhánh master “%s”"
 
-#: builtin/remote.c:322
+#: builtin/remote.c:323
 #, c-format
 msgid "unhandled branch.%s.rebase=%s; assuming 'true'"
 msgstr "nhánh chưa được quản lý.%s.rebase=%s; giả định là “true”"
 
-#: builtin/remote.c:366
+#: builtin/remote.c:367
 #, c-format
 msgid "Could not get fetch map for refspec %s"
 msgstr "Không thể lấy ánh xạ (map) fetch cho đặc tả tham chiếu %s"
 
-#: builtin/remote.c:460 builtin/remote.c:468
+#: builtin/remote.c:461 builtin/remote.c:469
 msgid "(matching)"
 msgstr "(khớp)"
 
-#: builtin/remote.c:472
+#: builtin/remote.c:473
 msgid "(delete)"
 msgstr "(xóa)"
 
-#: builtin/remote.c:660
+#: builtin/remote.c:664
 #, c-format
 msgid "could not set '%s'"
 msgstr "không thể đặt “%s”"
 
-#: builtin/remote.c:665
+#: builtin/remote.c:669
 #, c-format
 msgid ""
 "The %s configuration remote.pushDefault in:\n"
@@ -20834,17 +21339,17 @@ msgstr ""
 "\t%s:%d\n"
 "bây giờ tên trên máy chủ không tồn tại “%s”"
 
-#: builtin/remote.c:696 builtin/remote.c:841 builtin/remote.c:948
+#: builtin/remote.c:707 builtin/remote.c:866 builtin/remote.c:973
 #, c-format
 msgid "No such remote: '%s'"
 msgstr "Không có máy chủ nào như vậy: “%s”"
 
-#: builtin/remote.c:715
+#: builtin/remote.c:726
 #, c-format
 msgid "Could not rename config section '%s' to '%s'"
 msgstr "Không thể đổi tên phần của cấu hình từ “%s” thành “%s”"
 
-#: builtin/remote.c:735
+#: builtin/remote.c:746
 #, c-format
 msgid ""
 "Not updating non-default fetch refspec\n"
@@ -20855,17 +21360,21 @@ msgstr ""
 "\t%s\n"
 "\tXin hãy cập nhật phần cấu hình một cách thủ công nếu thấy cần thiết."
 
-#: builtin/remote.c:775
+#: builtin/remote.c:783
+msgid "Renaming remote references"
+msgstr "Đổi tên các tham chiếu máy chủ"
+
+#: builtin/remote.c:794
 #, c-format
 msgid "deleting '%s' failed"
 msgstr "gặp lỗi khi xóa “%s”"
 
-#: builtin/remote.c:809
+#: builtin/remote.c:832
 #, c-format
 msgid "creating '%s' failed"
 msgstr "gặp lỗi khi tạo “%s”"
 
-#: builtin/remote.c:887
+#: builtin/remote.c:912
 msgid ""
 "Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
 "to delete it, use:"
@@ -20877,119 +21386,119 @@ msgstr[0] ""
 "đi;\n"
 "để xóa đi, sử dụng:"
 
-#: builtin/remote.c:901
+#: builtin/remote.c:926
 #, c-format
 msgid "Could not remove config section '%s'"
 msgstr "Không thể gỡ bỏ phần cấu hình “%s”"
 
-#: builtin/remote.c:1009
+#: builtin/remote.c:1034
 #, c-format
 msgid " new (next fetch will store in remotes/%s)"
 msgstr " mới (lần lấy về tiếp theo sẽ lưu trong remotes/%s)"
 
-#: builtin/remote.c:1012
+#: builtin/remote.c:1037
 msgid " tracked"
 msgstr " được theo dõi"
 
-#: builtin/remote.c:1014
+#: builtin/remote.c:1039
 msgid " stale (use 'git remote prune' to remove)"
 msgstr " cũ rích (dùng “git remote prune” để gỡ bỏ)"
 
-#: builtin/remote.c:1016
+#: builtin/remote.c:1041
 msgid " ???"
 msgstr " ???"
 
-#: builtin/remote.c:1057
+#: builtin/remote.c:1082
 #, c-format
 msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
 msgstr "branch.%s.merge không hợp lệ; không thể cải tổ về phía > 1 nhánh"
 
-#: builtin/remote.c:1066
+#: builtin/remote.c:1091
 #, c-format
 msgid "rebases interactively onto remote %s"
 msgstr "thực hiện rebase một cách tương tác trên máy chủ %s"
 
-#: builtin/remote.c:1068
+#: builtin/remote.c:1093
 #, c-format
 msgid "rebases interactively (with merges) onto remote %s"
 msgstr ""
 "thực hiện cải tổ (với các hòa trộn) một cách tương tác lên trên máy chủ %s"
 
-#: builtin/remote.c:1071
+#: builtin/remote.c:1096
 #, c-format
 msgid "rebases onto remote %s"
 msgstr "thực hiện rebase trên máy chủ %s"
 
-#: builtin/remote.c:1075
+#: builtin/remote.c:1100
 #, c-format
 msgid " merges with remote %s"
 msgstr " hòa trộn với máy chủ %s"
 
-#: builtin/remote.c:1078
+#: builtin/remote.c:1103
 #, c-format
 msgid "merges with remote %s"
 msgstr "hòa trộn với máy chủ %s"
 
-#: builtin/remote.c:1081
+#: builtin/remote.c:1106
 #, c-format
 msgid "%-*s    and with remote %s\n"
 msgstr "%-*s    và với máy chủ %s\n"
 
-#: builtin/remote.c:1124
+#: builtin/remote.c:1149
 msgid "create"
 msgstr "tạo"
 
-#: builtin/remote.c:1127
+#: builtin/remote.c:1152
 msgid "delete"
 msgstr "xóa"
 
-#: builtin/remote.c:1131
+#: builtin/remote.c:1156
 msgid "up to date"
 msgstr "đã cập nhật"
 
-#: builtin/remote.c:1134
+#: builtin/remote.c:1159
 msgid "fast-forwardable"
 msgstr "có-thể-chuyển-tiếp-nhanh"
 
-#: builtin/remote.c:1137
+#: builtin/remote.c:1162
 msgid "local out of date"
 msgstr "dữ liệu nội bộ đã cũ"
 
-#: builtin/remote.c:1144
+#: builtin/remote.c:1169
 #, c-format
 msgid "    %-*s forces to %-*s (%s)"
 msgstr "    %-*s ép buộc thành %-*s (%s)"
 
-#: builtin/remote.c:1147
+#: builtin/remote.c:1172
 #, c-format
 msgid "    %-*s pushes to %-*s (%s)"
 msgstr "    %-*s đẩy lên thành %-*s (%s)"
 
-#: builtin/remote.c:1151
+#: builtin/remote.c:1176
 #, c-format
 msgid "    %-*s forces to %s"
 msgstr "    %-*s ép buộc thành %s"
 
-#: builtin/remote.c:1154
+#: builtin/remote.c:1179
 #, c-format
 msgid "    %-*s pushes to %s"
 msgstr "    %-*s đẩy lên thành %s"
 
-#: builtin/remote.c:1222
+#: builtin/remote.c:1247
 msgid "do not query remotes"
 msgstr "không truy vấn các máy chủ"
 
-#: builtin/remote.c:1243
+#: builtin/remote.c:1268
 #, c-format
 msgid "* remote %s"
 msgstr "* máy chủ %s"
 
-#: builtin/remote.c:1244
+#: builtin/remote.c:1269
 #, c-format
 msgid "  Fetch URL: %s"
 msgstr "  URL để lấy về: %s"
 
-#: builtin/remote.c:1245 builtin/remote.c:1261 builtin/remote.c:1398
+#: builtin/remote.c:1270 builtin/remote.c:1286 builtin/remote.c:1423
 msgid "(no URL)"
 msgstr "(không có URL)"
 
@@ -20997,185 +21506,185 @@ msgstr "(không có URL)"
 #. with the one in " Fetch URL: %s"
 #. translation.
 #.
-#: builtin/remote.c:1259 builtin/remote.c:1261
+#: builtin/remote.c:1284 builtin/remote.c:1286
 #, c-format
 msgid "  Push  URL: %s"
 msgstr "  URL để đẩy lên: %s"
 
-#: builtin/remote.c:1263 builtin/remote.c:1265 builtin/remote.c:1267
+#: builtin/remote.c:1288 builtin/remote.c:1290 builtin/remote.c:1292
 #, c-format
 msgid "  HEAD branch: %s"
 msgstr "  Nhánh HEAD: %s"
 
-#: builtin/remote.c:1263
+#: builtin/remote.c:1288
 msgid "(not queried)"
 msgstr "(không yêu cầu)"
 
-#: builtin/remote.c:1265
+#: builtin/remote.c:1290
 msgid "(unknown)"
 msgstr "(không hiểu)"
 
-#: builtin/remote.c:1269
+#: builtin/remote.c:1294
 #, c-format
 msgid ""
 "  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
 msgstr "  nhánh HEAD (HEAD máy chủ chưa rõ ràng, có lẽ là một trong số sau):\n"
 
-#: builtin/remote.c:1281
+#: builtin/remote.c:1306
 #, c-format
 msgid "  Remote branch:%s"
 msgid_plural "  Remote branches:%s"
 msgstr[0] "  Những nhánh trên máy chủ:%s"
 
-#: builtin/remote.c:1284 builtin/remote.c:1310
+#: builtin/remote.c:1309 builtin/remote.c:1335
 msgid " (status not queried)"
 msgstr " (trạng thái không được yêu cầu)"
 
-#: builtin/remote.c:1293
+#: builtin/remote.c:1318
 msgid "  Local branch configured for 'git pull':"
 msgid_plural "  Local branches configured for 'git pull':"
 msgstr[0] "  Những nhánh nội bộ đã được cấu hình cho lệnh “git pull”:"
 
-#: builtin/remote.c:1301
+#: builtin/remote.c:1326
 msgid "  Local refs will be mirrored by 'git push'"
 msgstr "  refs nội bộ sẽ được phản chiếu bởi lệnh “git push”"
 
-#: builtin/remote.c:1307
+#: builtin/remote.c:1332
 #, c-format
 msgid "  Local ref configured for 'git push'%s:"
 msgid_plural "  Local refs configured for 'git push'%s:"
 msgstr[0] "  Những tham chiếu nội bộ được cấu hình cho lệnh “git push”%s:"
 
-#: builtin/remote.c:1328
+#: builtin/remote.c:1353
 msgid "set refs/remotes/<name>/HEAD according to remote"
 msgstr "đặt refs/remotes/<tên>/HEAD cho phù hợp với máy chủ"
 
-#: builtin/remote.c:1330
+#: builtin/remote.c:1355
 msgid "delete refs/remotes/<name>/HEAD"
 msgstr "xóa refs/remotes/<tên>/HEAD"
 
-#: builtin/remote.c:1344
+#: builtin/remote.c:1369
 msgid "Cannot determine remote HEAD"
 msgstr "Không thể xác định được HEAD máy chủ"
 
-#: builtin/remote.c:1346
+#: builtin/remote.c:1371
 msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
 msgstr "Nhiều nhánh HEAD máy chủ. Hãy chọn rõ ràng một:"
 
-#: builtin/remote.c:1356
+#: builtin/remote.c:1381
 #, c-format
 msgid "Could not delete %s"
 msgstr "Không thể xóa bỏ %s"
 
-#: builtin/remote.c:1364
+#: builtin/remote.c:1389
 #, c-format
 msgid "Not a valid ref: %s"
 msgstr "Không phải là tham chiếu hợp lệ: %s"
 
-#: builtin/remote.c:1366
+#: builtin/remote.c:1391
 #, c-format
 msgid "Could not setup %s"
 msgstr "Không thể cài đặt %s"
 
-#: builtin/remote.c:1384
+#: builtin/remote.c:1409
 #, c-format
 msgid " %s will become dangling!"
 msgstr " %s sẽ trở thành không đầu (không được quản lý)!"
 
-#: builtin/remote.c:1385
+#: builtin/remote.c:1410
 #, c-format
 msgid " %s has become dangling!"
 msgstr " %s đã trở thành không đầu (không được quản lý)!"
 
-#: builtin/remote.c:1394
+#: builtin/remote.c:1419
 #, c-format
 msgid "Pruning %s"
 msgstr "Đang xén bớt %s"
 
-#: builtin/remote.c:1395
+#: builtin/remote.c:1420
 #, c-format
 msgid "URL: %s"
 msgstr "URL: %s"
 
-#: builtin/remote.c:1411
+#: builtin/remote.c:1436
 #, c-format
 msgid " * [would prune] %s"
 msgstr " * [nên xén bớt] %s"
 
-#: builtin/remote.c:1414
+#: builtin/remote.c:1439
 #, c-format
 msgid " * [pruned] %s"
 msgstr " * [đã bị xén] %s"
 
-#: builtin/remote.c:1459
+#: builtin/remote.c:1484
 msgid "prune remotes after fetching"
 msgstr "cắt máy chủ sau khi lấy về"
 
-#: builtin/remote.c:1523 builtin/remote.c:1579 builtin/remote.c:1649
+#: builtin/remote.c:1548 builtin/remote.c:1604 builtin/remote.c:1674
 #, c-format
 msgid "No such remote '%s'"
 msgstr "Không có máy chủ nào có tên “%s”"
 
-#: builtin/remote.c:1541
+#: builtin/remote.c:1566
 msgid "add branch"
 msgstr "thêm nhánh"
 
-#: builtin/remote.c:1548
+#: builtin/remote.c:1573
 msgid "no remote specified"
 msgstr "chưa chỉ ra máy chủ nào"
 
-#: builtin/remote.c:1565
+#: builtin/remote.c:1590
 msgid "query push URLs rather than fetch URLs"
 msgstr "truy vấn đẩy URL thay vì lấy"
 
-#: builtin/remote.c:1567
+#: builtin/remote.c:1592
 msgid "return all URLs"
 msgstr "trả về mọi URL"
 
-#: builtin/remote.c:1597
+#: builtin/remote.c:1622
 #, c-format
 msgid "no URLs configured for remote '%s'"
 msgstr "không có URL nào được cấu hình cho nhánh “%s”"
 
-#: builtin/remote.c:1623
+#: builtin/remote.c:1648
 msgid "manipulate push URLs"
 msgstr "đẩy các “URL” bằng tay"
 
-#: builtin/remote.c:1625
+#: builtin/remote.c:1650
 msgid "add URL"
 msgstr "thêm URL"
 
-#: builtin/remote.c:1627
+#: builtin/remote.c:1652
 msgid "delete URLs"
 msgstr "xóa URLs"
 
-#: builtin/remote.c:1634
+#: builtin/remote.c:1659
 msgid "--add --delete doesn't make sense"
 msgstr "--add --delete không hợp lý"
 
-#: builtin/remote.c:1675
+#: builtin/remote.c:1700
 #, c-format
 msgid "Invalid old URL pattern: %s"
 msgstr "Kiểu mẫu URL cũ không hợp lệ: %s"
 
-#: builtin/remote.c:1683
+#: builtin/remote.c:1708
 #, c-format
 msgid "No such URL found: %s"
 msgstr "Không tìm thấy URL như vậy: %s"
 
-#: builtin/remote.c:1685
+#: builtin/remote.c:1710
 msgid "Will not delete all non-push URLs"
 msgstr "Sẽ không xóa những địa chỉ URL không-push"
 
-#: builtin/remote.c:1702
+#: builtin/remote.c:1727
 msgid "be verbose; must be placed before a subcommand"
 msgstr "chi tiết; phải được đặt trước một lệnh-con"
 
-#: builtin/repack.c:28
+#: builtin/repack.c:29
 msgid "git repack [<options>]"
 msgstr "git repack [<các tùy chọn>]"
 
-#: builtin/repack.c:33
+#: builtin/repack.c:34
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -21183,148 +21692,148 @@ msgstr ""
 "Gia tăng repack là không tương thích với chỉ mục bitmap. Dùng\n"
 "--no-write-bitmap-index hay tắt cấu hình pack.writebitmaps."
 
-#: builtin/repack.c:201
+#: builtin/repack.c:206
 msgid "could not start pack-objects to repack promisor objects"
 msgstr ""
 "không thể lấy thông tin thống kê pack-objects để mà đóng gói lại các đối "
 "tượng hứa hẹn"
 
-#: builtin/repack.c:275 builtin/repack.c:820
+#: builtin/repack.c:280 builtin/repack.c:824
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr ""
 "repack: Đang chỉ cần các dòng ID đối tượng dạng thập lục phân đầy dủ từ pack-"
 "objects."
 
-#: builtin/repack.c:299
+#: builtin/repack.c:304
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr "không thể hoàn tất pack-objects để đóng gói các đối tượng hứa hẹn"
 
-#: builtin/repack.c:314
+#: builtin/repack.c:319
 #, c-format
 msgid "cannot open index for %s"
 msgstr "không thể mở mục lục cho “%s”"
 
-#: builtin/repack.c:373
+#: builtin/repack.c:378
 #, c-format
 msgid "pack %s too large to consider in geometric progression"
 msgstr "gói %s là quá lớn để được xem là trong tiến trình hình học"
 
-#: builtin/repack.c:406 builtin/repack.c:413 builtin/repack.c:418
+#: builtin/repack.c:411 builtin/repack.c:418 builtin/repack.c:423
 #, c-format
 msgid "pack %s too large to roll up"
 msgstr "gói %s là quá lớn để được cuộn lại"
 
-#: builtin/repack.c:498
+#: builtin/repack.c:503
 #, c-format
 msgid "could not open tempfile %s for writing"
 msgstr "không thể mở tập tin tạm %s để ghi"
 
-#: builtin/repack.c:516
+#: builtin/repack.c:521
 msgid "could not close refs snapshot tempfile"
 msgstr "không thể đóng tập tin tạm thời chụp nhanh các tham chiếu"
 
-#: builtin/repack.c:630
+#: builtin/repack.c:634
 msgid "pack everything in a single pack"
 msgstr "đóng gói mọi thứ trong một gói đơn"
 
-#: builtin/repack.c:632
+#: builtin/repack.c:636
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "giống với -a, và chỉnh sửa các đối tượng không đọc được thiếu sót"
 
-#: builtin/repack.c:635
+#: builtin/repack.c:639
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "xóa bỏ các gói dư thừa, và chạy git-prune-packed"
 
-#: builtin/repack.c:637
+#: builtin/repack.c:641
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "chuyển --no-reuse-delta cho git-pack-objects"
 
-#: builtin/repack.c:639
+#: builtin/repack.c:643
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "chuyển --no-reuse-object cho git-pack-objects"
 
-#: builtin/repack.c:641
+#: builtin/repack.c:645
 msgid "do not run git-update-server-info"
 msgstr "không chạy git-update-server-info"
 
-#: builtin/repack.c:644
+#: builtin/repack.c:648
 msgid "pass --local to git-pack-objects"
 msgstr "chuyển --local cho git-pack-objects"
 
-#: builtin/repack.c:646
+#: builtin/repack.c:650
 msgid "write bitmap index"
 msgstr "ghi mục lục ánh xạ"
 
-#: builtin/repack.c:648
+#: builtin/repack.c:652
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "chuyển --delta-islands cho git-pack-objects"
 
-#: builtin/repack.c:649
+#: builtin/repack.c:653
 msgid "approxidate"
 msgstr "ngày ước tính"
 
-#: builtin/repack.c:650
+#: builtin/repack.c:654
 msgid "with -A, do not loosen objects older than this"
 msgstr "với -A, các đối tượng cũ hơn khoảng thời gian này thì không bị mất"
 
-#: builtin/repack.c:652
+#: builtin/repack.c:656
 msgid "with -a, repack unreachable objects"
 msgstr "với -a, đóng gói lại các đối tượng không thể đọc được"
 
-#: builtin/repack.c:654
+#: builtin/repack.c:658
 msgid "size of the window used for delta compression"
 msgstr "kích thước cửa sổ được dùng cho nén “delta”"
 
-#: builtin/repack.c:655 builtin/repack.c:661
+#: builtin/repack.c:659 builtin/repack.c:665
 msgid "bytes"
 msgstr "byte"
 
-#: builtin/repack.c:656
+#: builtin/repack.c:660
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr "giống như trên, nhưng giới hạn kích thước bộ nhớ hay vì số lượng"
 
-#: builtin/repack.c:658
+#: builtin/repack.c:662
 msgid "limits the maximum delta depth"
 msgstr "giới hạn độ sâu tối đa của “delta”"
 
-#: builtin/repack.c:660
+#: builtin/repack.c:664
 msgid "limits the maximum number of threads"
 msgstr "giới hạn số lượng tối đa tuyến trình"
 
-#: builtin/repack.c:662
+#: builtin/repack.c:666
 msgid "maximum size of each packfile"
 msgstr "kích thước tối đa cho từng tập tin gói"
 
-#: builtin/repack.c:664
+#: builtin/repack.c:668
 msgid "repack objects in packs marked with .keep"
 msgstr "đóng gói lại các đối tượng trong các gói đã đánh dấu bằng .keep"
 
-#: builtin/repack.c:666
+#: builtin/repack.c:670
 msgid "do not repack this pack"
 msgstr "đừng đóng gói lại gói này"
 
-#: builtin/repack.c:668
+#: builtin/repack.c:672
 msgid "find a geometric progression with factor <N>"
 msgstr "tìm một tiến trình hình học với hệ số <N>"
 
-#: builtin/repack.c:670
+#: builtin/repack.c:674
 msgid "write a multi-pack index of the resulting packs"
 msgstr "ghi mục lục “multi-pack” của các gói kết quả"
 
-#: builtin/repack.c:680
+#: builtin/repack.c:684
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "không thể xóa các gói trong một kho đối_tượng_vĩ_đại"
 
-#: builtin/repack.c:829
+#: builtin/repack.c:833
 msgid "Nothing new to pack."
 msgstr "Không có gì mới để mà đóng gói."
 
-#: builtin/repack.c:859
+#: builtin/repack.c:863
 #, c-format
 msgid "missing required file: %s"
 msgstr "thiếu tập tin cần thiết: %s"
 
-#: builtin/repack.c:861
+#: builtin/repack.c:865
 #, c-format
 msgid "could not unlink: %s"
 msgstr "không thể bỏ liên kết: %s"
@@ -21341,10 +21850,6 @@ msgstr "git replace [-f] --edit <đối tượng>"
 msgid "git replace [-f] --graft <commit> [<parent>...]"
 msgstr "git replace [-f] --graft <lần_chuyển_giao> [<cha_mẹ>…]"
 
-#: builtin/replace.c:25
-msgid "git replace [-f] --convert-graft-file"
-msgstr "git replace [-f] --convert-graft-file"
-
 #: builtin/replace.c:26
 msgid "git replace -d <object>..."
 msgstr "git replace -d <đối tượng>…"
@@ -21647,99 +22152,94 @@ msgstr "Gặp lỗi khi tìm cây của %s."
 msgid "HEAD is now at %s"
 msgstr "HEAD hiện giờ tại %s"
 
-#: builtin/reset.c:299
+#: builtin/reset.c:304
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "Không thể thực hiện một %s reset ở giữa của quá trình hòa trộn."
 
-#: builtin/reset.c:396 builtin/stash.c:606 builtin/stash.c:680
-#: builtin/stash.c:704
+#: builtin/reset.c:402 builtin/stash.c:606 builtin/stash.c:669
+#: builtin/stash.c:693
 msgid "be quiet, only report errors"
 msgstr "làm việc ở chế độ im lặng, chỉ hiển thị khi có lỗi"
 
-#: builtin/reset.c:398
+#: builtin/reset.c:404
+msgid "skip refreshing the index after reset"
+msgstr "bỏ qua làm tươi mục lục sau khi đặt lại"
+
+#: builtin/reset.c:406
 msgid "reset HEAD and index"
 msgstr "đặt lại (reset) HEAD và bảng mục lục"
 
-#: builtin/reset.c:399
+#: builtin/reset.c:407
 msgid "reset only HEAD"
 msgstr "chỉ đặt lại (reset) HEAD"
 
-#: builtin/reset.c:401 builtin/reset.c:403
+#: builtin/reset.c:409 builtin/reset.c:411
 msgid "reset HEAD, index and working tree"
 msgstr "đặt lại HEAD, bảng mục lục và cây làm việc"
 
-#: builtin/reset.c:405
+#: builtin/reset.c:413
 msgid "reset HEAD but keep local changes"
 msgstr "đặt lại HEAD nhưng giữ lại các thay đổi nội bộ"
 
-#: builtin/reset.c:411
+#: builtin/reset.c:419
 msgid "record only the fact that removed paths will be added later"
 msgstr "chỉ ghi lại những đường dẫn thực sự sẽ được thêm vào sau này"
 
-#: builtin/reset.c:445
+#: builtin/reset.c:452
 #, c-format
 msgid "Failed to resolve '%s' as a valid revision."
 msgstr "Gặp lỗi khi phân giải “%s” như là điểm xét duyệt hợp lệ."
 
-#: builtin/reset.c:453
+#: builtin/reset.c:460
 #, c-format
 msgid "Failed to resolve '%s' as a valid tree."
 msgstr "Gặp lỗi khi phân giải “%s” như là một cây (tree) hợp lệ."
 
-#: builtin/reset.c:472
+#: builtin/reset.c:479
 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
 msgstr ""
 "--mixed với các đường dẫn không còn dùng nữa; hãy thay thế bằng lệnh “git "
 "reset -- </các/đường/dẫn>”."
 
-#: builtin/reset.c:474
+#: builtin/reset.c:481
 #, c-format
 msgid "Cannot do %s reset with paths."
 msgstr "Không thể thực hiện lệnh %s reset với các đường dẫn."
 
-#: builtin/reset.c:489
+#: builtin/reset.c:496
 #, c-format
 msgid "%s reset is not allowed in a bare repository"
 msgstr "%s reset không được phép trên kho thuần"
 
-#: builtin/reset.c:520
+#: builtin/reset.c:527
 msgid "Unstaged changes after reset:"
 msgstr "Những thay đổi được đưa ra khỏi bệ phóng sau khi reset:"
 
-#: builtin/reset.c:523
+#: builtin/reset.c:530
 #, c-format
 msgid ""
-"\n"
-"It took %.2f seconds to enumerate unstaged changes after reset.  You can\n"
-"use '--quiet' to avoid this.  Set the config setting reset.quiet to true\n"
-"to make this the default.\n"
+"It took %.2f seconds to refresh the index after reset.  You can use\n"
+"'--no-refresh' to avoid this."
 msgstr ""
-"\n"
-"Cần %.2f giây để kiểm đếm các thay đổi chưa đưa lên bệ phóng sau khi đặt "
-"lại.\n"
-"Bạn có thể sử dụng “--quiet” để tránh việc này. Đặt reset.quiet thành true "
-"trong\n"
-"cài đặt config nếu bạn muốn thực hiện nó như là mặc định.\n"
+"Việc này cần %.2f giây để làm tươi mới mục lục sau khi đặt lại. Bạn có thể "
+"sử dụng\n"
+"“--no-refresh” tránh điều này."
 
-#: builtin/reset.c:541
+#: builtin/reset.c:547
 #, c-format
 msgid "Could not reset index file to revision '%s'."
 msgstr "Không thể đặt lại (reset) bảng mục lục thành điểm xét duyệt “%s”."
 
-#: builtin/reset.c:546
+#: builtin/reset.c:552
 msgid "Could not write new index file."
 msgstr "Không thể ghi tập tin lưu bảng mục lục mới."
 
-#: builtin/rev-list.c:602
-msgid "object filtering requires --objects"
-msgstr "lọc đối tượng yêu cầu --objects"
-
-#: builtin/rev-list.c:674
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr "rev-list không hỗ trợ hiển thị các ghi chú"
 
-#: builtin/rev-list.c:679
+#: builtin/rev-list.c:664
 #, c-format
 msgid "marked counting and '%s' cannot be used together"
 msgstr "đánh dấu để đếm và '%s' không thể dùng cùng nhau"
@@ -22082,11 +22582,11 @@ msgstr "trường"
 msgid "group by field"
 msgstr "nhóm theo trường"
 
-#: builtin/shortlog.c:394
+#: builtin/shortlog.c:395
 msgid "too many arguments given outside repository"
 msgstr "quá nhiều tham số đưa ra ngoài kho chứa"
 
-#: builtin/show-branch.c:13
+#: builtin/show-branch.c:14
 msgid ""
 "git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
 "                [--current] [--color[=<when>] | --no-color] [--sparse]\n"
@@ -22098,116 +22598,116 @@ msgstr ""
 "                [--more=<n> | --list | --independent | --merge-base]\n"
 "                [--no-name | --sha1-name] [--topics] [(<rev> | <glob>)…]"
 
-#: builtin/show-branch.c:17
+#: builtin/show-branch.c:18
 msgid "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"
 msgstr "git show-branch (-g | --reflog)[=<n>[,<nền>]] [--list] [<ref>]"
 
-#: builtin/show-branch.c:395
+#: builtin/show-branch.c:396
 #, c-format
 msgid "ignoring %s; cannot handle more than %d ref"
 msgid_plural "ignoring %s; cannot handle more than %d refs"
 msgstr[0] "đang bỏ qua %s; không thể xử lý nhiều hơn %d tham chiếu"
 
-#: builtin/show-branch.c:547
+#: builtin/show-branch.c:548
 #, c-format
 msgid "no matching refs with %s"
 msgstr "không tham chiếu nào khớp với %s"
 
-#: builtin/show-branch.c:644
+#: builtin/show-branch.c:645
 msgid "show remote-tracking and local branches"
 msgstr "hiển thị các nhánh remote-tracking và nội bộ"
 
-#: builtin/show-branch.c:646
+#: builtin/show-branch.c:647
 msgid "show remote-tracking branches"
 msgstr "hiển thị các nhánh remote-tracking"
 
-#: builtin/show-branch.c:648
+#: builtin/show-branch.c:649
 msgid "color '*!+-' corresponding to the branch"
 msgstr "màu “*!+-” tương ứng với nhánh"
 
-#: builtin/show-branch.c:650
+#: builtin/show-branch.c:651
 msgid "show <n> more commits after the common ancestor"
 msgstr "hiển thị thêm <n> lần chuyển giao sau cha mẹ chung"
 
-#: builtin/show-branch.c:652
+#: builtin/show-branch.c:653
 msgid "synonym to more=-1"
 msgstr "đồng nghĩa với more=-1"
 
-#: builtin/show-branch.c:653
+#: builtin/show-branch.c:654
 msgid "suppress naming strings"
 msgstr "chặn các chuỗi đặt tên"
 
-#: builtin/show-branch.c:655
+#: builtin/show-branch.c:656
 msgid "include the current branch"
 msgstr "bao gồm nhánh hiện hành"
 
-#: builtin/show-branch.c:657
+#: builtin/show-branch.c:658
 msgid "name commits with their object names"
 msgstr "đặt tên các lần chuyển giao bằng các tên của đối tượng của chúng"
 
-#: builtin/show-branch.c:659
+#: builtin/show-branch.c:660
 msgid "show possible merge bases"
 msgstr "hiển thị mọi cơ sở có thể dùng để hòa trộn"
 
-#: builtin/show-branch.c:661
+#: builtin/show-branch.c:662
 msgid "show refs unreachable from any other ref"
 msgstr "hiển thị các tham chiếu không thể được đọc bởi bất kỳ tham chiếu khác"
 
-#: builtin/show-branch.c:663
+#: builtin/show-branch.c:664
 msgid "show commits in topological order"
 msgstr "hiển thị các lần chuyển giao theo thứ tự tôpô"
 
-#: builtin/show-branch.c:666
+#: builtin/show-branch.c:667
 msgid "show only commits not on the first branch"
 msgstr "chỉ hiển thị các lần chuyển giao không nằm trên nhánh đầu tiên"
 
-#: builtin/show-branch.c:668
+#: builtin/show-branch.c:669
 msgid "show merges reachable from only one tip"
 msgstr "hiển thị các lần hòa trộn có thể đọc được chỉ từ một đầu mút"
 
-#: builtin/show-branch.c:670
+#: builtin/show-branch.c:671
 msgid "topologically sort, maintaining date order where possible"
 msgstr "sắp xếp hình thái học, bảo trì thứ tự ngày nếu có thể"
 
-#: builtin/show-branch.c:673
+#: builtin/show-branch.c:674
 msgid "<n>[,<base>]"
 msgstr "<n>[,<cơ_sở>]"
 
-#: builtin/show-branch.c:674
+#: builtin/show-branch.c:675
 msgid "show <n> most recent ref-log entries starting at base"
 msgstr "hiển thị <n> các mục “ref-log” gần nhất kể từ nền (base)"
 
-#: builtin/show-branch.c:734
+#: builtin/show-branch.c:735
 msgid "no branches given, and HEAD is not valid"
 msgstr "chưa đưa ra nhánh, và HEAD không hợp lệ"
 
-#: builtin/show-branch.c:737
+#: builtin/show-branch.c:738
 msgid "--reflog option needs one branch name"
 msgstr "--reflog cần tên một nhánh"
 
-#: builtin/show-branch.c:740
+#: builtin/show-branch.c:741
 #, c-format
 msgid "only %d entry can be shown at one time."
 msgid_plural "only %d entries can be shown at one time."
 msgstr[0] "chỉ có thể hiển thị cùng lúc %d hạng mục."
 
-#: builtin/show-branch.c:744
+#: builtin/show-branch.c:745
 #, c-format
 msgid "no such ref %s"
 msgstr "không có tham chiếu nào như thế %s"
 
-#: builtin/show-branch.c:830
+#: builtin/show-branch.c:831
 #, c-format
 msgid "cannot handle more than %d rev."
 msgid_plural "cannot handle more than %d revs."
 msgstr[0] "không thể xử lý nhiều hơn %d điểm xét duyệt."
 
-#: builtin/show-branch.c:834
+#: builtin/show-branch.c:835
 #, c-format
 msgid "'%s' is not a valid ref."
 msgstr "“%s” không phải tham chiếu hợp lệ."
 
-#: builtin/show-branch.c:837
+#: builtin/show-branch.c:838
 #, c-format
 msgid "cannot find commit %s (%s)"
 msgstr "không thể tìm thấy lần chuyển giao %s (%s)"
@@ -22268,25 +22768,21 @@ msgstr ""
 "hiển thị các tham chiếu từ đầu vào tiêu chuẩn (stdin) cái mà không ở kho nội "
 "bộ"
 
-#: builtin/sparse-checkout.c:22
+#: builtin/sparse-checkout.c:23
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr "git sparse-checkout (init|list|set|add|reapply|disable) <các-tùy-chọn>"
 
-#: builtin/sparse-checkout.c:46
-msgid "git sparse-checkout list"
-msgstr "git sparse-checkout list"
-
-#: builtin/sparse-checkout.c:60
+#: builtin/sparse-checkout.c:61
 msgid "this worktree is not sparse"
 msgstr "cây làm việc này không phải là sparse"
 
-#: builtin/sparse-checkout.c:75
+#: builtin/sparse-checkout.c:76
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr ""
 "không thể phân tích cú pháp cây làm việc này (tập tin sparse-checkout có lẽ "
 "không tồn tại)"
 
-#: builtin/sparse-checkout.c:176
+#: builtin/sparse-checkout.c:177
 #, c-format
 msgid ""
 "directory '%s' contains untracked files, but is not in the sparse-checkout "
@@ -22295,97 +22791,130 @@ msgstr ""
 "thư mục “%s” có chứa các tập tin chưa được theo dõi, nhưng lại không trong "
 "“sparse-checkout cone”"
 
-#: builtin/sparse-checkout.c:184
+#: builtin/sparse-checkout.c:185
 #, c-format
 msgid "failed to remove directory '%s'"
 msgstr "gặp lỗi khi gỡ bỏ thư mục \"%s\""
 
-#: builtin/sparse-checkout.c:324
+#: builtin/sparse-checkout.c:327
 msgid "failed to create directory for sparse-checkout file"
 msgstr "gặp lỗi khi tạo thư mục cho tập tin sparse-checkout"
 
-#: builtin/sparse-checkout.c:365
-msgid "unable to upgrade repository format to enable worktreeConfig"
-msgstr "không thể nâng cấp định dạng kho lưu trữ để kích hoạt worktreeConfig"
-
-#: builtin/sparse-checkout.c:367
-msgid "failed to set extensions.worktreeConfig setting"
-msgstr "gặp lỗi khi đặt cài đặt extensions.worktreeConfig"
+#: builtin/sparse-checkout.c:366
+msgid "failed to initialize worktree config"
+msgstr "gặp lỗi khi khởi tạo cấu hình cây làm việc"
 
 #: builtin/sparse-checkout.c:411
 msgid "failed to modify sparse-index config"
 msgstr "gặp lỗi khi sửa cấu hình \"sparse-index\""
 
-#: builtin/sparse-checkout.c:422
-msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
-msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
-
-#: builtin/sparse-checkout.c:441 builtin/sparse-checkout.c:729
-#: builtin/sparse-checkout.c:778
+#: builtin/sparse-checkout.c:441 builtin/sparse-checkout.c:793
+#: builtin/sparse-checkout.c:847
 msgid "initialize the sparse-checkout in cone mode"
 msgstr "khởi tạo sparse-checkout trong chế độ nón"
 
-#: builtin/sparse-checkout.c:443 builtin/sparse-checkout.c:731
-#: builtin/sparse-checkout.c:780
+#: builtin/sparse-checkout.c:443 builtin/sparse-checkout.c:795
+#: builtin/sparse-checkout.c:849
 msgid "toggle the use of a sparse index"
 msgstr "bật tắt việc sử dụng một \"sparse index\""
 
-#: builtin/sparse-checkout.c:476
+#: builtin/sparse-checkout.c:479
 #, c-format
 msgid "failed to open '%s'"
 msgstr "gặp lỗi khi mở “%s”"
 
-#: builtin/sparse-checkout.c:528
+#: builtin/sparse-checkout.c:531
 #, c-format
 msgid "could not normalize path %s"
 msgstr "không thể thường hóa đường dẫn “%s”"
 
-#: builtin/sparse-checkout.c:557
+#: builtin/sparse-checkout.c:560
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr "không thể bỏ trích dẫn chuỗi kiểu C “%s”"
 
-#: builtin/sparse-checkout.c:612 builtin/sparse-checkout.c:640
+#: builtin/sparse-checkout.c:615 builtin/sparse-checkout.c:643
 msgid "unable to load existing sparse-checkout patterns"
 msgstr "không thể tải các mẫu sparse-checkout"
 
-#: builtin/sparse-checkout.c:616
+#: builtin/sparse-checkout.c:619
 msgid "existing sparse-checkout patterns do not use cone mode"
 msgstr "đặt các mẫu sparse-checkout sẵn có không sử dụng chế độ cone"
 
-#: builtin/sparse-checkout.c:682
-msgid "git sparse-checkout add (--stdin | <patterns>)"
-msgstr "git sparse-checkout add (--stdin | <các mẫu>)"
+#: builtin/sparse-checkout.c:707
+msgid "please run from the toplevel directory in non-cone mode"
+msgstr "vui lòng chạy từ thư mục mức cao nhất trong chế độ non-cone"
+
+#: builtin/sparse-checkout.c:712
+msgid "specify directories rather than patterns (no leading slash)"
+msgstr "chỉ định các thư mục thay mẫu (không có dấu gạch chéo đứng đầu)"
+
+#: builtin/sparse-checkout.c:714
+msgid ""
+"specify directories rather than patterns.  If your directory starts with a "
+"'!', pass --skip-checks"
+msgstr ""
+"chỉ định các thư mục thay mẫu. Nếu thư mục của bạn bắt đầu với một '!', "
+"chuyển qua --skip-checks"
+
+#: builtin/sparse-checkout.c:716
+msgid ""
+"specify directories rather than patterns.  If your directory really has any "
+"of '*?[]\\' in it, pass --skip-checks"
+msgstr ""
+"chỉ định các thư mục thay mẫu. Nếu thư mục của bạn đã sẵn có chứa một trong "
+"số bất kỳ '*?[]\\', chuyển qua --skip-checks"
+
+#: builtin/sparse-checkout.c:732
+#, c-format
+msgid ""
+"'%s' is not a directory; to treat it as a directory anyway, rerun with --"
+"skip-checks"
+msgstr ""
+"'%s' không phải là một thư mục; để vẫn coi nó là một thư mục hãy chạy với --"
+"skip-checks"
+
+#: builtin/sparse-checkout.c:734
+#, c-format
+msgid ""
+"pass a leading slash before paths such as '%s' if you want a single file "
+"(see NON-CONE PROBLEMS in the git-sparse-checkout manual)."
+msgstr ""
+"chuyển một dấu xổ chéo dẫn đầu đường dẫn như là '%s' nếu bạn muốn một tập "
+"tin đơn (xem NON-CONE PROBLEMS trong hướng dẫn sử dụng git-sparse-checkout)."
+
+#: builtin/sparse-checkout.c:739
+msgid "git sparse-checkout add [--skip-checks] (--stdin | <patterns>)"
+msgstr "git sparse-checkout add [--skip-checks] (--stdin | <các mẫu>)"
+
+#: builtin/sparse-checkout.c:752 builtin/sparse-checkout.c:797
+msgid ""
+"skip some sanity checks on the given paths that might give false positives"
+msgstr ""
+"bỏ qua một số kiểm tra đúng mục trên đường dẫn đã cho cái mà có thể đưa ra "
+"xác thực sai"
 
-#: builtin/sparse-checkout.c:694 builtin/sparse-checkout.c:733
+#: builtin/sparse-checkout.c:755 builtin/sparse-checkout.c:800
 msgid "read patterns from standard in"
 msgstr "đọc các mẫu từ đầu vào tiêu chuẩn"
 
-#: builtin/sparse-checkout.c:699
+#: builtin/sparse-checkout.c:760
 msgid "no sparse-checkout to add to"
 msgstr "không có sparse-checkout để thêm vào"
 
-#: builtin/sparse-checkout.c:712
+#: builtin/sparse-checkout.c:775
 msgid ""
-"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] (--stdin | "
-"<patterns>)"
+"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] "
+"(--stdin | <patterns>)"
 msgstr ""
-"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] (--stdin | <các "
-"mẫu>)"
+"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] "
+"(--stdin | <các mẫu>)"
 
-#: builtin/sparse-checkout.c:765
-msgid "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
-msgstr "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
-
-#: builtin/sparse-checkout.c:785
+#: builtin/sparse-checkout.c:854
 msgid "must be in a sparse-checkout to reapply sparsity patterns"
 msgstr "phải trong một sparse-checkout để áp dụng lại các mẫu sparse"
 
-#: builtin/sparse-checkout.c:803
-msgid "git sparse-checkout disable"
-msgstr "git sparse-checkout disable"
-
-#: builtin/sparse-checkout.c:845
+#: builtin/sparse-checkout.c:914
 msgid "error while refreshing working directory"
 msgstr "gặp lỗi khi đọc lại thư mục làm việc"
 
@@ -22527,167 +23056,151 @@ msgstr "Bảng mục lục đã không được bỏ stash."
 msgid "could not restore untracked files from stash"
 msgstr "không thể phục hồi các tập tin chưa theo dõi từ mục cất đi (stash)"
 
-#: builtin/stash.c:608 builtin/stash.c:706
+#: builtin/stash.c:608 builtin/stash.c:695
 msgid "attempt to recreate the index"
 msgstr "gặp lỗi đọc bảng mục lục"
 
-#: builtin/stash.c:652
+#: builtin/stash.c:641
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "Đã xóa %s (%s)"
 
-#: builtin/stash.c:655
+#: builtin/stash.c:644
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s: Không thể xóa bỏ mục stash"
 
-#: builtin/stash.c:668
+#: builtin/stash.c:657
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "”%s” không phải tham chiếu đến stash"
 
-#: builtin/stash.c:718
+#: builtin/stash.c:707
 msgid "The stash entry is kept in case you need it again."
 msgstr "Các mục tạm cất (stash) được giữ trong trường hợp bạn lại cần nó."
 
-#: builtin/stash.c:741
+#: builtin/stash.c:730
 msgid "No branch name specified"
 msgstr "Chưa chỉ ra tên của nhánh"
 
-#: builtin/stash.c:825
+#: builtin/stash.c:809
 msgid "failed to parse tree"
 msgstr "gặp lỗi khi phân tích cây"
 
-#: builtin/stash.c:836
+#: builtin/stash.c:820
 msgid "failed to unpack trees"
 msgstr "gặp lỗi khi tháo dỡ cây"
 
-#: builtin/stash.c:856
+#: builtin/stash.c:840
 msgid "include untracked files in the stash"
 msgstr "bao gồm các tập tin không được theo dõi trong stash"
 
-#: builtin/stash.c:859
+#: builtin/stash.c:843
 msgid "only show untracked files in the stash"
 msgstr "chỉ hiển thị các tập tin không được theo dõi trong stash"
 
-#: builtin/stash.c:946 builtin/stash.c:983
+#: builtin/stash.c:930 builtin/stash.c:967
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "Không thể cập nhật %s với %s"
 
-#: builtin/stash.c:964 builtin/stash.c:1678 builtin/stash.c:1750
+#: builtin/stash.c:948 builtin/stash.c:1667 builtin/stash.c:1739
 msgid "stash message"
 msgstr "phần chú thích cho stash"
 
-#: builtin/stash.c:974
+#: builtin/stash.c:958
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" cần một đối số <lần chuyển giao>"
 
-#: builtin/stash.c:1159
+#: builtin/stash.c:1143
 msgid "No staged changes"
 msgstr "Không có thay đổi đã được đưa lên bệ phóng"
 
-#: builtin/stash.c:1220
+#: builtin/stash.c:1204
 msgid "No changes selected"
 msgstr "Chưa có thay đổi nào được chọn"
 
-#: builtin/stash.c:1320
+#: builtin/stash.c:1304
 msgid "You do not have the initial commit yet"
 msgstr "Bạn chưa còn có lần chuyển giao khởi tạo"
 
-#: builtin/stash.c:1347
+#: builtin/stash.c:1331
 msgid "Cannot save the current index state"
 msgstr "Không thể ghi lại trạng thái bảng mục lục hiện hành"
 
-#: builtin/stash.c:1356
+#: builtin/stash.c:1340
 msgid "Cannot save the untracked files"
 msgstr "Không thể ghi lại các tập tin chưa theo dõi"
 
-#: builtin/stash.c:1367 builtin/stash.c:1386
+#: builtin/stash.c:1351 builtin/stash.c:1370
 msgid "Cannot save the current worktree state"
 msgstr "Không thể ghi lại trạng thái cây-làm-việc hiện hành"
 
-#: builtin/stash.c:1377
+#: builtin/stash.c:1361
 msgid "Cannot save the current staged state"
 msgstr "Không thể ghi lại trạng thái bệ phóng hiện hành"
 
-#: builtin/stash.c:1414
+#: builtin/stash.c:1398
 msgid "Cannot record working tree state"
 msgstr "Không thể ghi lại trạng thái cây làm việc hiện hành"
 
-#: builtin/stash.c:1463
+#: builtin/stash.c:1447
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr "Không thể dùng --patch và --include-untracked hay --all cùng một lúc"
 
-#: builtin/stash.c:1474
+#: builtin/stash.c:1458
 msgid "Can't use --staged and --include-untracked or --all at the same time"
 msgstr "Không thể dùng --staged và --include-untracked hay --all cùng một lúc"
 
-#: builtin/stash.c:1492
+#: builtin/stash.c:1476
 msgid "Did you forget to 'git add'?"
 msgstr "Có lẽ bạn đã quên “git add ” phải không?"
 
-#: builtin/stash.c:1507
+#: builtin/stash.c:1491
 msgid "No local changes to save"
 msgstr "Không có thay đổi nội bộ nào được ghi lại"
 
-#: builtin/stash.c:1514
+#: builtin/stash.c:1498
 msgid "Cannot initialize stash"
 msgstr "Không thể khởi tạo stash"
 
-#: builtin/stash.c:1529
+#: builtin/stash.c:1513
 msgid "Cannot save the current status"
 msgstr "Không thể ghi lại trạng thái hiện hành"
 
-#: builtin/stash.c:1534
+#: builtin/stash.c:1518
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "Đã ghi lại thư mục làm việc và trạng thái mục lục %s"
 
-#: builtin/stash.c:1627
+#: builtin/stash.c:1615
 msgid "Cannot remove worktree changes"
 msgstr "Không thể gỡ bỏ các thay đổi cây-làm-việc"
 
-#: builtin/stash.c:1667 builtin/stash.c:1739
+#: builtin/stash.c:1656 builtin/stash.c:1728
 msgid "keep index"
 msgstr "giữ nguyên bảng mục lục"
 
-#: builtin/stash.c:1669 builtin/stash.c:1741
+#: builtin/stash.c:1658 builtin/stash.c:1730
 msgid "stash staged changes only"
 msgstr "chỉ tạm cất đi các thay đổi đã đưa lên bệ phóng"
 
-#: builtin/stash.c:1671 builtin/stash.c:1743
+#: builtin/stash.c:1660 builtin/stash.c:1732
 msgid "stash in patch mode"
 msgstr "cất đi ở chế độ miếng vá"
 
-#: builtin/stash.c:1672 builtin/stash.c:1744
+#: builtin/stash.c:1661 builtin/stash.c:1733
 msgid "quiet mode"
 msgstr "chế độ im lặng"
 
-#: builtin/stash.c:1674 builtin/stash.c:1746
+#: builtin/stash.c:1663 builtin/stash.c:1735
 msgid "include untracked files in stash"
 msgstr "bao gồm các tập tin không được theo dõi trong stash"
 
-#: builtin/stash.c:1676 builtin/stash.c:1748
+#: builtin/stash.c:1665 builtin/stash.c:1737
 msgid "include ignore files"
 msgstr "bao gồm các tập tin bị bỏ qua"
 
-#: builtin/stash.c:1783
-msgid ""
-"the stash.useBuiltin support has been removed!\n"
-"See its entry in 'git help config' for details."
-msgstr ""
-"việc hỗ trợ stash.useBuiltin đã bị xóa!\n"
-"Xem mục tin của nó trong “git help config” để biết chi tiết."
-
-#: builtin/stripspace.c:18
-msgid "git stripspace [-s | --strip-comments]"
-msgstr "git stripspace [-s | --strip-comments]"
-
-#: builtin/stripspace.c:19
-msgid "git stripspace [-c | --comment-lines]"
-msgstr "git stripspace [-c | --comment-lines]"
-
 #: builtin/stripspace.c:37
 msgid "skip and remove all lines starting with comment character"
 msgstr "giữ và xóa bỏ mọi dòng bắt đầu bằng ký tự ghi chú"
@@ -22696,21 +23209,17 @@ msgstr "giữ và xóa bỏ mọi dòng bắt đầu bằng ký tự ghi chú"
 msgid "prepend comment character and space to each line"
 msgstr "treo trước ký tự ghi chú và ký tự khoảng trắng cho từng dòng"
 
-#: builtin/submodule--helper.c:46 builtin/submodule--helper.c:2668
+#: builtin/submodule--helper.c:50 builtin/submodule--helper.c:2486
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "Cần tên tham chiếu dạng đầy đủ, nhưng lại nhận được %s"
 
-#: builtin/submodule--helper.c:63
-msgid "submodule--helper print-default-remote takes no arguments"
-msgstr "submodule--helper print-default-remote takes không nhận tham số"
-
-#: builtin/submodule--helper.c:101
+#: builtin/submodule--helper.c:103
 #, c-format
 msgid "cannot strip one component off url '%s'"
 msgstr "không thể cắt bỏ một thành phần ra khỏi “%s” url"
 
-#: builtin/submodule--helper.c:211
+#: builtin/submodule--helper.c:213
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
@@ -22719,26 +23228,26 @@ msgstr ""
 "không thể tìm thấy cấu hình “%s”. Coi rằng đây là kho thượng nguồn có quyền "
 "sở hữu chính nó."
 
-#: builtin/submodule--helper.c:405 builtin/submodule--helper.c:1859
+#: builtin/submodule--helper.c:413 builtin/submodule--helper.c:1873
 msgid "alternative anchor for relative paths"
 msgstr "điểm neo thay thế cho các đường dẫn tương đối"
 
-#: builtin/submodule--helper.c:410
+#: builtin/submodule--helper.c:418
 msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper list [--prefix=</đường/dẫn>] [</đường/dẫn>…]"
 
-#: builtin/submodule--helper.c:468 builtin/submodule--helper.c:605
-#: builtin/submodule--helper.c:628
+#: builtin/submodule--helper.c:476 builtin/submodule--helper.c:617
+#: builtin/submodule--helper.c:640
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr "Không tìm thấy url cho đường dẫn mô-đun-con “%s” trong .gitmodules"
 
-#: builtin/submodule--helper.c:520
+#: builtin/submodule--helper.c:528
 #, c-format
 msgid "Entering '%s'\n"
 msgstr "Đang vào “%s”\n"
 
-#: builtin/submodule--helper.c:523
+#: builtin/submodule--helper.c:531
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
@@ -22747,7 +23256,7 @@ msgstr ""
 "run_command trả về trạng thái khác không cho %s\n"
 "."
 
-#: builtin/submodule--helper.c:545
+#: builtin/submodule--helper.c:553
 #, c-format
 msgid ""
 "run_command returned non-zero status while recursing in the nested "
@@ -22758,69 +23267,69 @@ msgstr ""
 "con lồng nhau của %s\n"
 "."
 
-#: builtin/submodule--helper.c:561
+#: builtin/submodule--helper.c:569
 msgid "suppress output of entering each submodule command"
 msgstr "chặn kết xuất của từng lệnh mô-đun-con"
 
-#: builtin/submodule--helper.c:563 builtin/submodule--helper.c:864
-#: builtin/submodule--helper.c:1453
+#: builtin/submodule--helper.c:571 builtin/submodule--helper.c:876
+#: builtin/submodule--helper.c:1458
 msgid "recurse into nested submodules"
 msgstr "đệ quy vào trong mô-đun-con lồng nhau"
 
-#: builtin/submodule--helper.c:568
+#: builtin/submodule--helper.c:576
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr "git submodule--helper foreach [--quiet] [--recursive] [--]  <lệnh>"
 
-#: builtin/submodule--helper.c:642
+#: builtin/submodule--helper.c:654
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr "Gặp lỗi khi đăng ký url cho đường dẫn mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:646
+#: builtin/submodule--helper.c:658
 #, c-format
 msgid "Submodule '%s' (%s) registered for path '%s'\n"
 msgstr "Mô-đun-con “%s” (%s) được đăng ký cho đường dẫn “%s”\n"
 
-#: builtin/submodule--helper.c:656
+#: builtin/submodule--helper.c:668
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr "cảnh báo: chế độ lệnh cập nhật được gợi ý cho mô-đun-con “%s”\n"
 
-#: builtin/submodule--helper.c:663
+#: builtin/submodule--helper.c:675
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr "Gặp lỗi khi đăng ký chế độ cập nhật cho đường dẫn mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:685
+#: builtin/submodule--helper.c:697
 msgid "suppress output for initializing a submodule"
 msgstr "chặn kết xuất của khởi tạo một mô-đun-con"
 
-#: builtin/submodule--helper.c:690
+#: builtin/submodule--helper.c:702
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr "git submodule--helper init [<các tùy chọn>] [</đường/dẫn>]"
 
-#: builtin/submodule--helper.c:763 builtin/submodule--helper.c:898
+#: builtin/submodule--helper.c:775 builtin/submodule--helper.c:910
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr ""
 "không tìm thấy ánh xạ (mapping) mô-đun-con trong .gitmodules cho đường dẫn "
 "“%s”"
 
-#: builtin/submodule--helper.c:811
+#: builtin/submodule--helper.c:823
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr "không thể phân giải tham chiếu HEAD bên trong mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:838 builtin/submodule--helper.c:1423
+#: builtin/submodule--helper.c:850 builtin/submodule--helper.c:1428
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "gặp lỗi khi đệ quy vào trong mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1590
+#: builtin/submodule--helper.c:874 builtin/submodule--helper.c:1595
 msgid "suppress submodule status output"
 msgstr "chặn kết xuất về tình trạng mô-đun-con"
 
-#: builtin/submodule--helper.c:863
+#: builtin/submodule--helper.c:875
 msgid ""
 "use commit stored in the index instead of the one stored in the submodule "
 "HEAD"
@@ -22828,98 +23337,98 @@ msgstr ""
 "dùng lần chuyển giao lưu trong mục lục thay cho cái được lưu trong HEAD mô-"
 "đun-con"
 
-#: builtin/submodule--helper.c:869
+#: builtin/submodule--helper.c:881
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr ""
 "git submodule status [--quiet] [--cached] [--recursive] [</đường/dẫn>…]"
 
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:905
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper name </đường/dẫn>"
 
-#: builtin/submodule--helper.c:965
+#: builtin/submodule--helper.c:977
 #, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr ""
 "* %s %s(blob)->%s(\n"
 ")"
 
-#: builtin/submodule--helper.c:968
+#: builtin/submodule--helper.c:980
 #, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr "* %s %s(mô-đun-con)->%s(blob)"
 
-#: builtin/submodule--helper.c:981
+#: builtin/submodule--helper.c:993
 #, c-format
 msgid "%s"
 msgstr "%s"
 
-#: builtin/submodule--helper.c:1031
+#: builtin/submodule--helper.c:1043
 #, c-format
 msgid "couldn't hash object from '%s'"
 msgstr "không thể băm đối tượng từ “%s”"
 
-#: builtin/submodule--helper.c:1035
+#: builtin/submodule--helper.c:1047
 #, c-format
 msgid "unexpected mode %o\n"
 msgstr "gặp chế độ không như mong chờ %o\n"
 
-#: builtin/submodule--helper.c:1276
+#: builtin/submodule--helper.c:1288
 msgid "use the commit stored in the index instead of the submodule HEAD"
 msgstr "hùng lần chuyển giao đã lưu trong mục lục thay cho HEAD mô-đun-con"
 
-#: builtin/submodule--helper.c:1278
+#: builtin/submodule--helper.c:1290
 msgid "compare the commit in the index with that in the submodule HEAD"
 msgstr "để so sánh lần trong mục lục với cái trong HEAD mô-đun-con"
 
-#: builtin/submodule--helper.c:1280
+#: builtin/submodule--helper.c:1292
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr ""
 "bỏ qua các mô-đun-con với giá trị của “ignore_config” được đặt thành “all”"
 
-#: builtin/submodule--helper.c:1282
+#: builtin/submodule--helper.c:1294
 msgid "limit the summary size"
 msgstr "giới hạn kích cỡ tổng hợp"
 
-#: builtin/submodule--helper.c:1287
+#: builtin/submodule--helper.c:1299
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr ""
 "git submodule--helper summary [<các tùy chọn>] [<lần_chuyển_giao>] [--] [</"
 "đường/dẫn>]"
 
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1323
 msgid "could not fetch a revision for HEAD"
 msgstr "không thể lấy về một điểm xem xét cho HEAD"
 
-#: builtin/submodule--helper.c:1373
+#: builtin/submodule--helper.c:1384
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr "Url mô-đun-con đồng bộ hóa cho “%s”\n"
 
-#: builtin/submodule--helper.c:1379
+#: builtin/submodule--helper.c:1390
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr "gặp lỗi khi đăng ký url cho đường dẫn mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:1393
+#: builtin/submodule--helper.c:1399
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr "gặp lỗi khi lấy máy chủ mặc định cho mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:1404
+#: builtin/submodule--helper.c:1409
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr "gặp lỗi khi cập nhật cho mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:1451
+#: builtin/submodule--helper.c:1456
 msgid "suppress output of synchronizing submodule url"
 msgstr "chặn kết xuất của url mô-đun-con đồng bộ"
 
-#: builtin/submodule--helper.c:1458
+#: builtin/submodule--helper.c:1463
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [</đường/dẫn>]"
 
-#: builtin/submodule--helper.c:1508
+#: builtin/submodule--helper.c:1513
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory. This will be replaced "
@@ -22928,7 +23437,7 @@ msgstr ""
 "Cây làm việc mô-đun-con “%s” có chứa thư mục .git. Việc này sẽ được thay thế "
 "với một tập tin .git bằng các sử dụng absorbgitdirs."
 
-#: builtin/submodule--helper.c:1525
+#: builtin/submodule--helper.c:1530
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
@@ -22937,45 +23446,45 @@ msgstr ""
 "Cây làm việc mô-đun-con “%s” chứa các thay đổi nội bộ; hãy dùng “-f” để loại "
 "bỏ chúng đi"
 
-#: builtin/submodule--helper.c:1533
+#: builtin/submodule--helper.c:1538
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "Đã xóa thư mục “%s”\n"
 
-#: builtin/submodule--helper.c:1535
+#: builtin/submodule--helper.c:1540
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr "Không thể gỡ bỏ cây làm việc mô-đun-con “%s”\n"
 
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1551
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr "không thể tạo thư mục mô-đun-con rỗng “%s”"
 
-#: builtin/submodule--helper.c:1562
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr "Mô-đun-con “%s” (%s) được đăng ký cho đường dẫn “%s”\n"
 
-#: builtin/submodule--helper.c:1591
+#: builtin/submodule--helper.c:1596
 msgid "remove submodule working trees even if they contain local changes"
 msgstr "gỡ bỏ cây làm việc của mô-đun-con ngay cả khi nó có thay đổi nội bộ"
 
-#: builtin/submodule--helper.c:1592
+#: builtin/submodule--helper.c:1597
 msgid "unregister all submodules"
 msgstr "bỏ đăng ký tất cả các trong mô-đun-con"
 
-#: builtin/submodule--helper.c:1597
+#: builtin/submodule--helper.c:1602
 msgid ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
 msgstr ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--]  [</đường/dẫn>…]]"
 
-#: builtin/submodule--helper.c:1611
+#: builtin/submodule--helper.c:1616
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr "Dùng “--all” nếu bạn thực sự muốn hủy khởi tạo mọi mô-đun-con"
 
-#: builtin/submodule--helper.c:1656
+#: builtin/submodule--helper.c:1665
 msgid ""
 "An alternate computed from a superproject's alternate is invalid.\n"
 "To allow Git to clone without an alternate in such a case, set\n"
@@ -22990,102 +23499,102 @@ msgstr ""
 "bằng\n"
 "“--reference-if-able” thay vì dùng “--reference”."
 
-#: builtin/submodule--helper.c:1701 builtin/submodule--helper.c:1704
+#: builtin/submodule--helper.c:1710 builtin/submodule--helper.c:1713
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "mô-đun-con “%s” không thể thêm thay thế: %s"
 
-#: builtin/submodule--helper.c:1740
+#: builtin/submodule--helper.c:1749
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr "Giá trị “%s” cho submodule.alternateErrorStrategy không được thừa nhận"
 
-#: builtin/submodule--helper.c:1747
+#: builtin/submodule--helper.c:1756
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "Giá trị “%s” cho submodule.alternateLocation không được thừa nhận"
 
-#: builtin/submodule--helper.c:1772
+#: builtin/submodule--helper.c:1781
 #, c-format
 msgid "refusing to create/use '%s' in another submodule's git dir"
 msgstr "từ chối tạo/dùng “%s” trong một thư mục git của mô đun con"
 
-#: builtin/submodule--helper.c:1813
+#: builtin/submodule--helper.c:1826
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
 msgstr "việc sao “%s” vào đường dẫn mô-đun-con “%s” gặp lỗi"
 
-#: builtin/submodule--helper.c:1818
+#: builtin/submodule--helper.c:1831
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr "thư mục không trống: “%s”"
 
-#: builtin/submodule--helper.c:1830
+#: builtin/submodule--helper.c:1843
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr "không thể lấy thư mục mô-đun-con cho “%s”"
 
-#: builtin/submodule--helper.c:1862
+#: builtin/submodule--helper.c:1876
 msgid "where the new submodule will be cloned to"
 msgstr "nhân bản mô-đun-con mới vào chỗ nào"
 
-#: builtin/submodule--helper.c:1865
+#: builtin/submodule--helper.c:1879
 msgid "name of the new submodule"
 msgstr "tên của mô-đun-con mới"
 
-#: builtin/submodule--helper.c:1868
+#: builtin/submodule--helper.c:1882
 msgid "url where to clone the submodule from"
 msgstr "url nơi mà nhân bản mô-đun-con từ đó"
 
-#: builtin/submodule--helper.c:1876 builtin/submodule--helper.c:3265
+#: builtin/submodule--helper.c:1890 builtin/submodule--helper.c:3383
 msgid "depth for shallow clones"
 msgstr "chiều sâu lịch sử khi tạo bản sao"
 
-#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:2526
-#: builtin/submodule--helper.c:3258
+#: builtin/submodule--helper.c:1893 builtin/submodule--helper.c:2731
+#: builtin/submodule--helper.c:3376
 msgid "force cloning progress"
 msgstr "ép buộc tiến trình nhân bản"
 
-#: builtin/submodule--helper.c:1881 builtin/submodule--helper.c:2528
+#: builtin/submodule--helper.c:1895 builtin/submodule--helper.c:2733
 msgid "disallow cloning into non-empty directory"
 msgstr "làm đầy đủ dữ liệu cho bản sao vào trong một thư mục trống rỗng"
 
-#: builtin/submodule--helper.c:1888
+#: builtin/submodule--helper.c:1903
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
-"<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
-"<url> --path <path>"
+"<repository>] [--name <name>] [--depth <depth>] [--single-branch] [--filter "
+"<filter-spec>] --url <url> --path <path>"
 msgstr ""
 "git submodule--helper clone [--prefix=</đường/dẫn>] [--quiet] [--reference "
-"<kho>] [--name <tên>] [--depth <sâu>] [--single-branch] --url <url> --path </"
-"đường/dẫn>"
+"<kho>] [--name <tên>] [--depth <sâu>] [--single-branch] [--filter <filter-"
+"spec>] --url <url> --path </đường/dẫn>"
 
-#: builtin/submodule--helper.c:1925
+#: builtin/submodule--helper.c:1943
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr "Chế độ cập nhật “%s” không hợp lệ cho đường dẫn mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:1929
+#: builtin/submodule--helper.c:1947
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr ""
 "Chế độ cập nhật “%s” không hợp lệ được cấu hình cho đường dẫn mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:2044
+#: builtin/submodule--helper.c:2041
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "Đường dẫn mô-đun-con “%s” chưa được khởi tạo"
 
-#: builtin/submodule--helper.c:2048
+#: builtin/submodule--helper.c:2045
 msgid "Maybe you want to use 'update --init'?"
 msgstr "Có lẽ bạn là bạn muốn dùng \"update --init\" phải không?"
 
-#: builtin/submodule--helper.c:2078
+#: builtin/submodule--helper.c:2075
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "Bỏ qua các mô-đun-con chưa được hòa trộn %s"
 
-#: builtin/submodule--helper.c:2107
+#: builtin/submodule--helper.c:2104
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "Bỏ qua mô-đun-con “%s”"
@@ -23100,54 +23609,54 @@ msgstr "Gặp lỗi khi nhân bản “%s”. Thử lại lịch trình"
 msgid "Failed to clone '%s' a second time, aborting"
 msgstr "Gặp lỗi khi nhân bản “%s” lần thứ hai nên bãi bỏ"
 
-#: builtin/submodule--helper.c:2373
+#: builtin/submodule--helper.c:2371
 #, c-format
 msgid "Unable to checkout '%s' in submodule path '%s'"
 msgstr "Không thể lấy ra “%s” trong đường dẫn mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:2377
+#: builtin/submodule--helper.c:2375
 #, c-format
 msgid "Unable to rebase '%s' in submodule path '%s'"
 msgstr "Không thể cải tổ “%s” trong đường dẫn mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:2381
+#: builtin/submodule--helper.c:2379
 #, c-format
 msgid "Unable to merge '%s' in submodule path '%s'"
 msgstr "Không thể hòa trộn (merge) “%s” trong đường dẫn mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:2385
+#: builtin/submodule--helper.c:2383
 #, c-format
 msgid "Execution of '%s %s' failed in submodule path '%s'"
 msgstr ""
 "Thực hiện không thành công lệnh “%s %s” trong đường dẫn mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:2409
+#: builtin/submodule--helper.c:2402
 #, c-format
 msgid "Submodule path '%s': checked out '%s'\n"
 msgstr "Đường dẫn mô-đun-con “%s”: đã checkout “%s”\n"
 
-#: builtin/submodule--helper.c:2413
+#: builtin/submodule--helper.c:2406
 #, c-format
 msgid "Submodule path '%s': rebased into '%s'\n"
 msgstr "Đường dẫn mô-đun-con “%s”: được rebase vào trong “%s”\n"
 
-#: builtin/submodule--helper.c:2417
+#: builtin/submodule--helper.c:2410
 #, c-format
 msgid "Submodule path '%s': merged in '%s'\n"
 msgstr "Đường dẫn mô-đun-con “%s”: được hòa trộn vào “%s”\n"
 
-#: builtin/submodule--helper.c:2421
+#: builtin/submodule--helper.c:2414
 #, c-format
 msgid "Submodule path '%s': '%s %s'\n"
 msgstr "Đường dẫn mô-đun-con “%s”: “%s %s”\n"
 
-#: builtin/submodule--helper.c:2445
+#: builtin/submodule--helper.c:2438
 #, c-format
 msgid "Unable to fetch in submodule path '%s'; trying to directly fetch %s:"
 msgstr ""
 "Không thể lấy về trong đường dẫn mô-đun-con “%s”; thử lấy về trực tiếp %s:"
 
-#: builtin/submodule--helper.c:2454
+#: builtin/submodule--helper.c:2447
 #, c-format
 msgid ""
 "Fetched in submodule path '%s', but it did not contain %s. Direct fetching "
@@ -23156,181 +23665,208 @@ msgstr ""
 "Đã lấy về từ đường dẫn mô-đun con “%s”, nhưng nó không chứa %s. Lấy về trực "
 "tiếp lần chuyển giao gặp lỗi đó."
 
-#: builtin/submodule--helper.c:2505 builtin/submodule--helper.c:2575
-#: builtin/submodule--helper.c:2813
+#: builtin/submodule--helper.c:2481
+#, c-format
+msgid ""
+"Submodule (%s) branch configured to inherit branch from superproject, but "
+"the superproject is not on any branch"
+msgstr ""
+"Nhánh mô-đun-con (%s) được cấu hình kế thừa nhánh từ siêu dự án, nhưng siêu "
+"dự án lại không trên bất kỳ nhánh nào"
+
+#: builtin/submodule--helper.c:2499
+#, c-format
+msgid "could not get a repository handle for submodule '%s'"
+msgstr "không thể lấy thẻ quản kho cho mô-đun-con “%s”"
+
+#: builtin/submodule--helper.c:2588
+#, c-format
+msgid "Unable to find current revision in submodule path '%s'"
+msgstr ""
+"Không tìm thấy điểm xét duyệt hiện hành trong đường dẫn mô-đun-con “%s”"
+
+#: builtin/submodule--helper.c:2599
+#, c-format
+msgid "Unable to fetch in submodule path '%s'"
+msgstr "Không thể lấy về trong đường dẫn mô-đun-con “%s”"
+
+#: builtin/submodule--helper.c:2604
+#, c-format
+msgid "Unable to find %s revision in submodule path '%s'"
+msgstr "Không tìm thấy điểm xét duyệt %s trong đường dẫn mô-đun-con “%s”"
+
+#: builtin/submodule--helper.c:2640
+#, c-format
+msgid "Failed to recurse into submodule path '%s'"
+msgstr "Gặp lỗi khi đệ quy vào trong đường dẫn mô-đun-con “%s”"
+
+#: builtin/submodule--helper.c:2699
+msgid "force checkout updates"
+msgstr "ép buộc lấy ra các cập nhật"
+
+#: builtin/submodule--helper.c:2701
+msgid "initialize uninitialized submodules before update"
+msgstr "khởi tạo mô-đun-con chưa khởi tạo trước khi cập nhật"
+
+#: builtin/submodule--helper.c:2703
+msgid "use SHA-1 of submodule's remote tracking branch"
+msgstr "sử dụng SHA-1 của nhánh theo dõi máy chủ của mô-đun-con"
+
+#: builtin/submodule--helper.c:2705
+msgid "traverse submodules recursively"
+msgstr "đi theo mô-đun con một cách đệ quy"
+
+#: builtin/submodule--helper.c:2707
+msgid "don't fetch new objects from the remote site"
+msgstr "đừng lấy các đối tượng mới từ địa chỉ trên mạng"
+
+#: builtin/submodule--helper.c:2710 builtin/submodule--helper.c:2892
 msgid "path into the working tree"
 msgstr "đường dẫn đến cây làm việc"
 
-#: builtin/submodule--helper.c:2508 builtin/submodule--helper.c:2580
+#: builtin/submodule--helper.c:2713
 msgid "path into the working tree, across nested submodule boundaries"
 msgstr "đường dẫn đến cây làm việc, chéo biên giới mô-đun-con lồng nhau"
 
-#: builtin/submodule--helper.c:2512 builtin/submodule--helper.c:2578
+#: builtin/submodule--helper.c:2717
 msgid "rebase, merge, checkout or none"
 msgstr "rebase, merge, checkout hoặc không làm gì cả"
 
-#: builtin/submodule--helper.c:2518
+#: builtin/submodule--helper.c:2723
 msgid "create a shallow clone truncated to the specified number of revisions"
 msgstr ""
 "tạo một bản sao nông được cắt ngắn thành số lượng điểm xét duyệt đã cho"
 
-#: builtin/submodule--helper.c:2521
+#: builtin/submodule--helper.c:2726
 msgid "parallel jobs"
 msgstr "công việc đồng thời"
 
-#: builtin/submodule--helper.c:2523
+#: builtin/submodule--helper.c:2728
 msgid "whether the initial clone should follow the shallow recommendation"
 msgstr "nhân bản lần đầu có nên theo khuyến nghị là nông hay không"
 
-#: builtin/submodule--helper.c:2524
+#: builtin/submodule--helper.c:2729
 msgid "don't print cloning progress"
 msgstr "đừng in tiến trình nhân bản"
 
-#: builtin/submodule--helper.c:2535
-msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
+#: builtin/submodule--helper.c:2741
+msgid ""
+"git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] "
+"[-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-"
+"shallow] [--reference <repository>] [--recursive] [--[no-]single-branch] "
+"[--] [<path>...]"
 msgstr ""
-"git submodule--helper update-clone [--prefix=</đường/dẫn>] [</đường/dẫn>…]"
+"git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] "
+"[-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-"
+"shallow] [--reference <kho>] [--recursive] [--[no-]single-branch] [--] [</"
+"đường/dẫn/>...]"
 
-#: builtin/submodule--helper.c:2548
+#: builtin/submodule--helper.c:2767
 msgid "bad value for update parameter"
 msgstr "giá trị cho  tham số cập nhật bị sai"
 
-#: builtin/submodule--helper.c:2566
-msgid "suppress output for update by rebase or merge"
-msgstr "chặn kết xuất cho cập nhật bởi cải tổ hoặc hòa trộn"
-
-#: builtin/submodule--helper.c:2567
-msgid "force checkout updates"
-msgstr "ép buộc lấy ra các cập nhật"
-
-#: builtin/submodule--helper.c:2569
-msgid "don't fetch new objects from the remote site"
-msgstr "đừng lấy các đối tượng mới từ địa chỉ trên mạng"
-
-#: builtin/submodule--helper.c:2571
-msgid "overrides update mode in case the repository is a fresh clone"
-msgstr "ghi đè chế độ cập nhật trong trường hợp kho lưu trữ là bản sao mới"
-
-#: builtin/submodule--helper.c:2572
-msgid "depth for shallow fetch"
-msgstr "chiều sâu lịch sử muốn lấy về"
-
-#: builtin/submodule--helper.c:2582
-msgid "sha1"
-msgstr "sha1"
-
-#: builtin/submodule--helper.c:2583
-msgid "SHA1 expected by superproject"
-msgstr "SHA1 là cần thiết cho superproject"
-
-#: builtin/submodule--helper.c:2585
-msgid "subsha1"
-msgstr "subsha1"
-
-#: builtin/submodule--helper.c:2586
-msgid "SHA1 of submodule's HEAD"
-msgstr "SHA1 của HEAD của mô-đun-con"
-
-#: builtin/submodule--helper.c:2592
-msgid "git submodule--helper run-update-procedure [<options>] <path>"
-msgstr ""
-"git submodule--helper run-update-procedure [<các tùy chọn>] </đường/dẫn>"
-
-#: builtin/submodule--helper.c:2663
-#, c-format
-msgid ""
-"Submodule (%s) branch configured to inherit branch from superproject, but "
-"the superproject is not on any branch"
-msgstr ""
-"Nhánh mô-đun-con (%s) được cấu hình kế thừa nhánh từ siêu dự án, nhưng siêu "
-"dự án lại không trên bất kỳ nhánh nào"
-
-#: builtin/submodule--helper.c:2781
-#, c-format
-msgid "could not get a repository handle for submodule '%s'"
-msgstr "không thể lấy thẻ quản kho cho mô-đun-con “%s”"
-
-#: builtin/submodule--helper.c:2814
+#: builtin/submodule--helper.c:2893
 msgid "recurse into submodules"
 msgstr "đệ quy vào trong mô-đun-con"
 
-#: builtin/submodule--helper.c:2820
+#: builtin/submodule--helper.c:2899
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr "git submodule--helper absorb-git-dirs [<các tùy chọn>] [</đường/dẫn>…]"
 
-#: builtin/submodule--helper.c:2876
+#: builtin/submodule--helper.c:2955
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr "chọn nếu nó là an toàn để ghi vào tập tin .gitmodules"
 
-#: builtin/submodule--helper.c:2879
+#: builtin/submodule--helper.c:2958
 msgid "unset the config in the .gitmodules file"
 msgstr "bỏ đặt cấu hình trong tập tin .gitmodules"
 
-#: builtin/submodule--helper.c:2884
+#: builtin/submodule--helper.c:2963
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config <tên> [<giá trị>]"
 
-#: builtin/submodule--helper.c:2885
+#: builtin/submodule--helper.c:2964
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset <tên>"
 
-#: builtin/submodule--helper.c:2886
-msgid "git submodule--helper config --check-writeable"
-msgstr "git submodule--helper config --check-writeable"
-
-#: builtin/submodule--helper.c:2905 builtin/submodule--helper.c:3121
-#: builtin/submodule--helper.c:3277
+#: builtin/submodule--helper.c:2984 builtin/submodule--helper.c:3238
+#: builtin/submodule--helper.c:3395
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr "hãy đảm bảo rằng tập tin .gitmodules có trong cây làm việc"
 
-#: builtin/submodule--helper.c:2921
+#: builtin/submodule--helper.c:3000
 msgid "suppress output for setting url of a submodule"
 msgstr "chặn kết xuất cho cài đặt url của một mô-đun-con"
 
-#: builtin/submodule--helper.c:2925
+#: builtin/submodule--helper.c:3004
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr "git submodule--helper set-url [--quiet] </đường/dẫn> <url_mới>"
 
-#: builtin/submodule--helper.c:2958
+#: builtin/submodule--helper.c:3037
 msgid "set the default tracking branch to master"
 msgstr "đặt nhánh theo dõi mặc định thành master"
 
-#: builtin/submodule--helper.c:2960
+#: builtin/submodule--helper.c:3039
 msgid "set the default tracking branch"
 msgstr "đặt nhánh theo dõi mặc định"
 
-#: builtin/submodule--helper.c:2964
+#: builtin/submodule--helper.c:3043
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr ""
 "git submodule--helper set-branch [-q|--quiet](-d|--default)</đường/dẫn>"
 
-#: builtin/submodule--helper.c:2965
+#: builtin/submodule--helper.c:3044
 msgid ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 msgstr ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <nhánh> </đường/"
 "dẫn>"
 
-#: builtin/submodule--helper.c:2972
+#: builtin/submodule--helper.c:3051
 msgid "--branch or --default required"
 msgstr "cần --branch hoặc --default"
 
-#: builtin/submodule--helper.c:3038
+#: builtin/submodule--helper.c:3072 builtin/submodule--helper.c:3375
+msgid "print only error messages"
+msgstr "chỉ hiển thị các thông điệp báo lỗi"
+
+#: builtin/submodule--helper.c:3073
+msgid "force creation"
+msgstr "buộc tạo"
+
+#: builtin/submodule--helper.c:3081
+msgid "show whether the branch would be created"
+msgstr "hiển thị xem nhánh nào nên được tạo ra"
+
+#: builtin/submodule--helper.c:3085
+msgid ""
+"git submodule--helper create-branch [-f|--force] [--create-reflog] [-q|--"
+"quiet] [-t|--track] [-n|--dry-run] <name> <start-oid> <start-name>"
+msgstr ""
+"git submodule--helper create-branch [-f|--force] [--create-reflog] [-q|--"
+"quiet] [-t|--track] [-n|--dry-run] <tên> <start-oid> <start-name>"
+
+#: builtin/submodule--helper.c:3097
+#, c-format
+msgid "creating branch '%s'"
+msgstr "đang tạo nhánh “%s”"
+
+#: builtin/submodule--helper.c:3155
 #, c-format
 msgid "Adding existing repo at '%s' to the index\n"
 msgstr "Đang thêm repo có sẵn tại “%s” vào bảng mục lục\n"
 
-#: builtin/submodule--helper.c:3041
+#: builtin/submodule--helper.c:3158
 #, c-format
 msgid "'%s' already exists and is not a valid git repo"
 msgstr "“%s” đã tồn tại từ trước và không phải là một kho git hợp lệ"
 
-#: builtin/submodule--helper.c:3054
+#: builtin/submodule--helper.c:3171
 #, c-format
 msgid "A git directory for '%s' is found locally with remote(s):\n"
 msgstr "Thư mục git cho “%s” được tìm thấy một cách cục bộ với các máy chủ:\n"
 
-#: builtin/submodule--helper.c:3061
+#: builtin/submodule--helper.c:3178
 #, c-format
 msgid ""
 "If you want to reuse this local git directory instead of cloning again from\n"
@@ -23348,87 +23884,83 @@ msgstr ""
 "là bạn không chắc chắn điều đó nghĩa là gì thì chọn tên khác với tùy chọn “--"
 "name”."
 
-#: builtin/submodule--helper.c:3073
+#: builtin/submodule--helper.c:3190
 #, c-format
 msgid "Reactivating local git directory for submodule '%s'\n"
 msgstr "Phục hồi sự hoạt động của thư mục git nội bộ cho mô-đun-con “%s”.\n"
 
-#: builtin/submodule--helper.c:3110
+#: builtin/submodule--helper.c:3227
 #, c-format
 msgid "unable to checkout submodule '%s'"
 msgstr "không thể lấy ra mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:3149
+#: builtin/submodule--helper.c:3266
 #, c-format
 msgid "Failed to add submodule '%s'"
 msgstr "Gặp lỗi khi thêm mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:3153 builtin/submodule--helper.c:3158
-#: builtin/submodule--helper.c:3166
+#: builtin/submodule--helper.c:3270 builtin/submodule--helper.c:3275
+#: builtin/submodule--helper.c:3283
 #, c-format
 msgid "Failed to register submodule '%s'"
 msgstr "Gặp lỗi khi đăng ký mô-đun-con “%s”"
 
-#: builtin/submodule--helper.c:3222
+#: builtin/submodule--helper.c:3339
 #, c-format
 msgid "'%s' already exists in the index"
 msgstr "”%s” thực sự đã tồn tại ở bảng mục lục rồi"
 
-#: builtin/submodule--helper.c:3225
+#: builtin/submodule--helper.c:3342
 #, c-format
 msgid "'%s' already exists in the index and is not a submodule"
 msgstr ""
 "”%s” thực sự đã tồn tại ở bảng mục lục rồi và không phải là một mô-đun-con"
 
-#: builtin/submodule--helper.c:3254
+#: builtin/submodule--helper.c:3372
 msgid "branch of repository to add as submodule"
 msgstr "nhánh của kho để thêm như là mô-đun-con"
 
-#: builtin/submodule--helper.c:3255
+#: builtin/submodule--helper.c:3373
 msgid "allow adding an otherwise ignored submodule path"
 msgstr "cho phép thêm một đường dẫn mô-đun-con bị bỏ qua khác"
 
-#: builtin/submodule--helper.c:3257
-msgid "print only error messages"
-msgstr "chỉ hiển thị các thông điệp báo lỗi"
-
-#: builtin/submodule--helper.c:3261
+#: builtin/submodule--helper.c:3379
 msgid "borrow the objects from reference repositories"
 msgstr "vay mượn các đối tượng từ kho thay thế"
 
-#: builtin/submodule--helper.c:3263
+#: builtin/submodule--helper.c:3381
 msgid ""
 "sets the submodule’s name to the given string instead of defaulting to its "
 "path"
 msgstr ""
-"đặt tên của submodule bằng chuỗi đã cho thay vì mặc định là đường dẫn của nó"
+"đặt tên của mô-đun-con bằng chuỗi đã cho thay vì mặc định là đường dẫn của nó"
 
-#: builtin/submodule--helper.c:3270
+#: builtin/submodule--helper.c:3388
 msgid "git submodule--helper add [<options>] [--] <repository> [<path>]"
 msgstr "git submodule--helper add [<các tùy chọn>] [--] <kho> [</đường/dẫn>]"
 
-#: builtin/submodule--helper.c:3298
+#: builtin/submodule--helper.c:3416
 msgid "Relative path can only be used from the toplevel of the working tree"
 msgstr ""
 "Đường dẫn tương đối chỉ có thể dùng từ thư mục ở mức cao nhất của cây làm "
 "việc"
 
-#: builtin/submodule--helper.c:3306
+#: builtin/submodule--helper.c:3425
 #, c-format
 msgid "repo URL: '%s' must be absolute or begin with ./|../"
 msgstr "repo URL: “%s” phải là đường dẫn tuyệt đối hoặc là bắt đầu bằng ./|../"
 
-#: builtin/submodule--helper.c:3341
+#: builtin/submodule--helper.c:3460
 #, c-format
 msgid "'%s' is not a valid submodule name"
 msgstr "“%s” không phải là một tên mô-đun-con hợp lệ"
 
-#: builtin/submodule--helper.c:3405 git.c:452 git.c:726
+#: builtin/submodule--helper.c:3520 git.c:453 git.c:729
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s không hỗ trợ --super-prefix"
 
-#: builtin/submodule--helper.c:3411
+#: builtin/submodule--helper.c:3526
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "“%s” không phải là lệnh con submodule--helper hợp lệ"
@@ -23461,7 +23993,7 @@ msgstr "lý do"
 msgid "reason of the update"
 msgstr "lý do cập nhật"
 
-#: builtin/tag.c:25
+#: builtin/tag.c:26
 msgid ""
 "git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]\n"
 "        <tagname> [<head>]"
@@ -23469,11 +24001,11 @@ msgstr ""
 "git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <tập-tin>]\n"
 "        <tên-thẻ> [<head>]"
 
-#: builtin/tag.c:27
+#: builtin/tag.c:28
 msgid "git tag -d <tagname>..."
 msgstr "git tag -d <tên-thẻ>…"
 
-#: builtin/tag.c:28
+#: builtin/tag.c:29
 msgid ""
 "git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--"
 "points-at <object>]\n"
@@ -23485,21 +24017,21 @@ msgstr ""
 "        [--format=<định_dạng>] [--merged <lần_chuyển_giao>] [--no-merged "
 "[<lần_chuyển_giao>]] [<mẫu>…]"
 
-#: builtin/tag.c:30
+#: builtin/tag.c:31
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr "git tag -v [--format=<định_dạng>]  <tên-thẻ>…"
 
-#: builtin/tag.c:100
+#: builtin/tag.c:101
 #, c-format
 msgid "tag '%s' not found."
 msgstr "không tìm thấy tìm thấy thẻ “%s”."
 
-#: builtin/tag.c:135
+#: builtin/tag.c:136
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr "Thẻ đã bị xóa “%s” (từng là %s)\n"
 
-#: builtin/tag.c:170
+#: builtin/tag.c:171
 #, c-format
 msgid ""
 "\n"
@@ -23512,7 +24044,7 @@ msgstr ""
 "  %s\n"
 "Những dòng được bắt đầu bằng “%c” sẽ được bỏ qua.\n"
 
-#: builtin/tag.c:174
+#: builtin/tag.c:175
 #, c-format
 msgid ""
 "\n"
@@ -23527,11 +24059,11 @@ msgstr ""
 "Những dòng được bắt đầu bằng “%c” sẽ được giữ lại; bạn có thể xóa chúng đi "
 "nếu muốn.\n"
 
-#: builtin/tag.c:240
+#: builtin/tag.c:241
 msgid "unable to sign the tag"
 msgstr "không thể ký thẻ"
 
-#: builtin/tag.c:258
+#: builtin/tag.c:259
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -23544,115 +24076,119 @@ msgstr ""
 "\n"
 "\tgit tag -f %s %s^{}"
 
-#: builtin/tag.c:274
+#: builtin/tag.c:275
 msgid "bad object type."
 msgstr "kiểu đối tượng sai."
 
-#: builtin/tag.c:325
+#: builtin/tag.c:326
 msgid "no tag message?"
 msgstr "không có chú thích gì cho cho thẻ à?"
 
-#: builtin/tag.c:332
+#: builtin/tag.c:333
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "Nội dung ghi chú còn lại %s\n"
 
-#: builtin/tag.c:444
+#: builtin/tag.c:445
 msgid "list tag names"
 msgstr "chỉ liệt kê tên các thẻ"
 
-#: builtin/tag.c:446
+#: builtin/tag.c:447
 msgid "print <n> lines of each tag message"
 msgstr "hiển thị <n> dòng cho mỗi ghi chú"
 
-#: builtin/tag.c:448
+#: builtin/tag.c:449
 msgid "delete tags"
 msgstr "xóa thẻ"
 
-#: builtin/tag.c:449
+#: builtin/tag.c:450
 msgid "verify tags"
 msgstr "thẩm tra thẻ"
 
-#: builtin/tag.c:451
+#: builtin/tag.c:452
 msgid "Tag creation options"
 msgstr "Tùy chọn tạo thẻ"
 
-#: builtin/tag.c:453
+#: builtin/tag.c:454
 msgid "annotated tag, needs a message"
 msgstr "để chú giải cho thẻ, cần một lời ghi chú"
 
-#: builtin/tag.c:455
+#: builtin/tag.c:456
 msgid "tag message"
 msgstr "phần chú thích cho thẻ"
 
-#: builtin/tag.c:457
+#: builtin/tag.c:458
 msgid "force edit of tag message"
 msgstr "ép buộc sửa thẻ lần commit"
 
-#: builtin/tag.c:458
+#: builtin/tag.c:459
 msgid "annotated and GPG-signed tag"
 msgstr "thẻ chú giải và ký kiểu GPG"
 
-#: builtin/tag.c:461
+#: builtin/tag.c:462
 msgid "use another key to sign the tag"
 msgstr "dùng kháo khác để ký thẻ"
 
-#: builtin/tag.c:462
+#: builtin/tag.c:463
 msgid "replace the tag if exists"
 msgstr "thay thế nếu thẻ đó đã có trước"
 
-#: builtin/tag.c:463 builtin/update-ref.c:511
+#: builtin/tag.c:464 builtin/update-ref.c:511
 msgid "create a reflog"
 msgstr "tạo một reflog"
 
-#: builtin/tag.c:465
+#: builtin/tag.c:466
 msgid "Tag listing options"
 msgstr "Các tùy chọn liệt kê thẻ"
 
-#: builtin/tag.c:466
+#: builtin/tag.c:467
 msgid "show tag list in columns"
 msgstr "hiển thị danh sách thẻ trong các cột"
 
-#: builtin/tag.c:467 builtin/tag.c:469
+#: builtin/tag.c:468 builtin/tag.c:470
 msgid "print only tags that contain the commit"
 msgstr "chỉ hiển thị những nhánh mà nó chứa lần chuyển giao"
 
-#: builtin/tag.c:468 builtin/tag.c:470
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that don't contain the commit"
 msgstr "chỉ hiển thị những thẻ mà nó không chứa lần chuyển giao"
 
-#: builtin/tag.c:471
+#: builtin/tag.c:472
 msgid "print only tags that are merged"
 msgstr "chỉ hiển thị những thẻ mà nó được hòa trộn"
 
-#: builtin/tag.c:472
+#: builtin/tag.c:473
 msgid "print only tags that are not merged"
 msgstr "chỉ hiển thị những thẻ mà nó không được hòa trộn"
 
-#: builtin/tag.c:476
+#: builtin/tag.c:477
 msgid "print only tags of the object"
 msgstr "chỉ hiển thị các thẻ của đối tượng"
 
-#: builtin/tag.c:558
+#: builtin/tag.c:559
 #, c-format
 msgid "the '%s' option is only allowed in list mode"
 msgstr "tùy chọn '%s' chỉ cho phép dùng trong chế độ liệt kê"
 
-#: builtin/tag.c:597
+#: builtin/tag.c:598
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "“%s” không phải thẻ hợp lệ."
 
-#: builtin/tag.c:602
+#: builtin/tag.c:603
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "thẻ “%s” đã tồn tại rồi"
 
-#: builtin/tag.c:633
+#: builtin/tag.c:634
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "Đã cập nhật thẻ “%s” (trước là %s)\n"
 
+#: builtin/unpack-objects.c:95
+msgid "pack exceeds maximum allowed size"
+msgstr "gói đã vượt quá cỡ tối đa được phép"
+
 #: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
 msgstr "Đang giải nén các đối tượng"
@@ -23711,147 +24247,147 @@ msgstr " Đồng ý"
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<các tùy chọn>] [--] [<tập-tin>…]"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:993
 msgid "continue refresh even when index needs update"
 msgstr "tiếp tục làm mới ngay cả khi bảng mục lục cần được cập nhật"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:996
 msgid "refresh: ignore submodules"
 msgstr "refresh: lờ đi mô-đun-con"
 
-#: builtin/update-index.c:980
+#: builtin/update-index.c:999
 msgid "do not ignore new files"
 msgstr "không bỏ qua các tập tin mới tạo"
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:1001
 msgid "let files replace directories and vice-versa"
 msgstr "để các tập tin thay thế các thư mục và “vice-versa”"
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:1003
 msgid "notice files missing from worktree"
 msgstr "thông báo các tập-tin thiếu trong thư-mục làm việc"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:1005
 msgid "refresh even if index contains unmerged entries"
 msgstr ""
 "làm tươi mới thậm chí khi bảng mục lục chứa các mục tin chưa được hòa trộn"
 
-#: builtin/update-index.c:989
+#: builtin/update-index.c:1008
 msgid "refresh stat information"
 msgstr "lấy lại thông tin thống kê"
 
-#: builtin/update-index.c:993
+#: builtin/update-index.c:1012
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "giống --refresh, nhưng bỏ qua các cài đặt “assume-unchanged”"
 
-#: builtin/update-index.c:997
+#: builtin/update-index.c:1016
 msgid "<mode>,<object>,<path>"
 msgstr "<chế_độ>,<đối_tượng>,<đường_dẫn>"
 
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1017
 msgid "add the specified entry to the index"
 msgstr "thêm các tập tin đã chỉ ra vào bảng mục lục"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1027
 msgid "mark files as \"not changing\""
 msgstr "đánh dấu các tập tin là \"không thay đổi\""
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1030
 msgid "clear assumed-unchanged bit"
 msgstr "xóa bít assumed-unchanged (giả định là không thay đổi)"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1033
 msgid "mark files as \"index-only\""
 msgstr "đánh dấu các tập tin là “chỉ-đọc”"
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1036
 msgid "clear skip-worktree bit"
 msgstr "xóa bít skip-worktree"
 
-#: builtin/update-index.c:1020
+#: builtin/update-index.c:1039
 msgid "do not touch index-only entries"
 msgstr "đừng động vào các mục index-only"
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1041
 msgid "add to index only; do not add content to object database"
 msgstr ""
 "chỉ thêm vào bảng mục lục; không thêm nội dung vào cơ sở dữ liệu đối tượng"
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1043
 msgid "remove named paths even if present in worktree"
 msgstr ""
 "gỡ bỏ các đường dẫn được đặt tên thậm chí cả khi nó hiện diện trong thư mục "
 "làm việc"
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1045
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "với tùy chọn --stdin: các dòng đầu vào được chấm dứt bởi ký tự null"
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1047
 msgid "read list of paths to be updated from standard input"
 msgstr "đọc danh sách đường dẫn cần cập nhật từ đầu vào tiêu chuẩn"
 
-#: builtin/update-index.c:1032
+#: builtin/update-index.c:1051
 msgid "add entries from standard input to the index"
 msgstr "không thể đọc các mục từ đầu vào tiêu chuẩn vào bảng mục lục"
 
-#: builtin/update-index.c:1036
+#: builtin/update-index.c:1055
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "phục hồi các trạng thái #2 và #3 cho các đường dẫn được liệt kê"
 
-#: builtin/update-index.c:1040
+#: builtin/update-index.c:1059
 msgid "only update entries that differ from HEAD"
 msgstr "chỉ cập nhật các mục tin mà nó khác biệt so với HEAD"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1063
 msgid "ignore files missing from worktree"
 msgstr "bỏ qua các tập-tin thiếu trong thư-mục làm việc"
 
-#: builtin/update-index.c:1047
+#: builtin/update-index.c:1066
 msgid "report actions to standard output"
 msgstr "báo cáo các thao tác ra thiết bị xuất chuẩn"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1068
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(cho “porcelains”) quên các xung đột chưa được giải quyết đã ghi"
 
-#: builtin/update-index.c:1053
+#: builtin/update-index.c:1072
 msgid "write index in this format"
 msgstr "ghi mục lục ở định dạng này"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1074
 msgid "enable or disable split index"
 msgstr "bật/tắt chia cắt bảng mục lục"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1076
 msgid "enable/disable untracked cache"
 msgstr "bật/tắt bộ đệm không theo vết"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1078
 msgid "test if the filesystem supports untracked cache"
 msgstr "kiểm tra xem hệ thống tập tin có hỗ trợ đệm không theo dõi hay không"
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1080
 msgid "enable untracked cache without testing the filesystem"
 msgstr "bật bộ đệm không theo vết mà không kiểm tra hệ thống tập tin"
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1082
 msgid "write out the index even if is not flagged as changed"
 msgstr "ghi ra mục lục ngay cả khi không được đánh cờ là có thay đổi"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1084
 msgid "enable or disable file system monitor"
 msgstr "bật/tắt theo dõi hệ thống tập tin"
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1086
 msgid "mark files as fsmonitor valid"
 msgstr "đánh dấu các tập tin là hợp lệ fsmonitor"
 
-#: builtin/update-index.c:1070
+#: builtin/update-index.c:1089
 msgid "clear fsmonitor valid bit"
 msgstr "xóa bít hợp lệ fsmonitor"
 
-#: builtin/update-index.c:1173
+#: builtin/update-index.c:1195
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
@@ -23859,7 +24395,7 @@ msgstr ""
 "core.splitIndex được đặt là sai; xóa bỏ hay thay đổi nó, nếu bạn thực sự "
 "muốn bật chia tách mục lục"
 
-#: builtin/update-index.c:1182
+#: builtin/update-index.c:1204
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
@@ -23867,7 +24403,7 @@ msgstr ""
 "core.splitIndex được đặt là đúng; xóa bỏ hay thay đổi nó, nếu bạn thực sự "
 "muốn tắt chia tách mục lục"
 
-#: builtin/update-index.c:1194
+#: builtin/update-index.c:1216
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -23875,11 +24411,11 @@ msgstr ""
 "core.untrackedCache được đặt là đúng; xóa bỏ hay thay đổi nó, nếu bạn thực "
 "sự muốn tắt bộ đệm chưa theo dõi"
 
-#: builtin/update-index.c:1198
+#: builtin/update-index.c:1220
 msgid "Untracked cache disabled"
 msgstr "Nhớ đệm không theo vết bị tắt"
 
-#: builtin/update-index.c:1206
+#: builtin/update-index.c:1228
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -23887,29 +24423,29 @@ msgstr ""
 "core.untrackedCache được đặt là sai; xóa bỏ hay thay đổi nó, nếu bạn thực sự "
 "muốn bật bộ đệm chưa theo dõi"
 
-#: builtin/update-index.c:1210
+#: builtin/update-index.c:1232
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "Nhớ đệm không theo vết được bật cho “%s”"
 
-#: builtin/update-index.c:1218
+#: builtin/update-index.c:1241
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr ""
 "core.fsmonitor chưa được đặt; đặt nó nếu bạn thực sự muốn bật theo dõi hệ "
 "thống tập tin"
 
-#: builtin/update-index.c:1222
+#: builtin/update-index.c:1246
 msgid "fsmonitor enabled"
 msgstr "fsmonitor được bật"
 
-#: builtin/update-index.c:1225
+#: builtin/update-index.c:1250
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr ""
 "core.fsmonitor đã được đặt; bỏ đặt nó nếu bạn thực sự muốn bật theo dõi hệ "
 "thống tập tin"
 
-#: builtin/update-index.c:1229
+#: builtin/update-index.c:1254
 msgid "fsmonitor disabled"
 msgstr "fsmonitor bị tắt"
 
@@ -23941,10 +24477,6 @@ msgstr "đầu vào tiêu chuẩn có các đối số được chấm dứt b
 msgid "read updates from stdin"
 msgstr "đọc cập nhật từ đầu vào tiêu chuẩn"
 
-#: builtin/update-server-info.c:7
-msgid "git update-server-info [--force]"
-msgstr "git update-server-info [--force]"
-
 #: builtin/update-server-info.c:15
 msgid "update the info files from scratch"
 msgstr "cập nhật các tập tin thông tin từ điểm xuất phát"
@@ -24026,33 +24558,37 @@ msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<các tùy chọn>] <worktree>"
 
 #: builtin/worktree.c:25
+msgid "git worktree repair [<path>...]"
+msgstr "git worktree repair [</đường/dẫn/>...]"
+
+#: builtin/worktree.c:26
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock </đường/dẫn>"
 
-#: builtin/worktree.c:75
+#: builtin/worktree.c:76
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr "Đang xóa %s/%s: %s"
 
-#: builtin/worktree.c:148
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
 msgstr "báo cáo các cây làm việc đã prune"
 
-#: builtin/worktree.c:150
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr "các cây làm việc hết hạn cũ hơn khoảng <thời gian>"
 
-#: builtin/worktree.c:220
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr "“%s” đã có từ trước rồi"
 
-#: builtin/worktree.c:229
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
 msgstr "đích cây làm việc không sử dụng được “%s”"
 
-#: builtin/worktree.c:234
+#: builtin/worktree.c:235
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -24061,7 +24597,7 @@ msgstr ""
 "“%s” bị mất nhưng cây làm việc bị khóa;\n"
 "dùng “%s -f -f” để ghi đè, hoặc “unlock” và “prune” hay “remove” để xóa"
 
-#: builtin/worktree.c:236
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -24070,129 +24606,148 @@ msgstr ""
 "“%s” bị mất nhưng cây làm việc đã được đăng ký;\n"
 "dùng “%s -f” để ghi đè, hoặc “prune” hay “remove” để xóa"
 
-#: builtin/worktree.c:287
+#: builtin/worktree.c:248
+#, c-format
+msgid "failed to copy '%s' to '%s'; sparse-checkout may not work correctly"
+msgstr "gặp lỗi khi sao chép '%s' sang '%s'; không thể làm việc đúng được"
+
+#: builtin/worktree.c:268
+#, c-format
+msgid "failed to copy worktree config from '%s' to '%s'"
+msgstr "gặp lỗi khi sao chép cấu hình cây làm việc từ “%s” sang “%s”"
+
+#: builtin/worktree.c:280 builtin/worktree.c:285
+#, c-format
+msgid "failed to unset '%s' in '%s'"
+msgstr "gặp lỗi bỏ đặt “%s” trong “%s”"
+
+#: builtin/worktree.c:356
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "không thể tạo thư mục của “%s”"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:378
 msgid "initializing"
 msgstr "khởi tạo"
 
-#: builtin/worktree.c:420 builtin/worktree.c:426
+#: builtin/worktree.c:492 builtin/worktree.c:498
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "Đang chuẩn bị cây làm việc (nhánh mới “%s”)"
 
-#: builtin/worktree.c:422
+#: builtin/worktree.c:494
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr "Đang chuẩn bị cây làm việc (đang cài đặt nhánh “%s”, trước đây tại %s)"
 
-#: builtin/worktree.c:431
+#: builtin/worktree.c:503
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "Đang chuẩn bị cây làm việc (đang lấy ra “%s”)"
 
-#: builtin/worktree.c:437
+#: builtin/worktree.c:509
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "Đang chuẩn bị cây làm việc (HEAD đã tách rời “%s”)"
 
-#: builtin/worktree.c:482
+#: builtin/worktree.c:554
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr "lấy ra <nhánh> ngay cả khi nó đã được lấy ra ở cây làm việc khác"
 
-#: builtin/worktree.c:485
+#: builtin/worktree.c:557
 msgid "create a new branch"
 msgstr "tạo nhánh mới"
 
-#: builtin/worktree.c:487
+#: builtin/worktree.c:559
 msgid "create or reset a branch"
 msgstr "tạo hay đặt lại một nhánh"
 
-#: builtin/worktree.c:489
+#: builtin/worktree.c:561
 msgid "populate the new working tree"
 msgstr "di chuyển cây làm việc mới"
 
-#: builtin/worktree.c:490
+#: builtin/worktree.c:562
 msgid "keep the new working tree locked"
 msgstr "giữ cây làm việc mới bị khóa"
 
-#: builtin/worktree.c:492 builtin/worktree.c:729
+#: builtin/worktree.c:564 builtin/worktree.c:809
 msgid "reason for locking"
 msgstr "lý do khóa"
 
-#: builtin/worktree.c:495
+#: builtin/worktree.c:567
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "cài đặt chế độ theo dõi (xem git-branch(1))"
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:570
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "có khớp tên tên nhánh mới với một nhánh theo dõi máy chủ"
 
-#: builtin/worktree.c:512
+#: builtin/worktree.c:584
 msgid "added with --lock"
 msgstr "được thêm với --lock"
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:646
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "--[no-]track chỉ có thể được dùng nếu một nhánh mới được tạo"
 
-#: builtin/worktree.c:691
+#: builtin/worktree.c:766
 msgid "show extended annotations and reasons, if available"
 msgstr "hiển thị chú thích và lý do mở rộng, nếu có"
 
-#: builtin/worktree.c:693
+#: builtin/worktree.c:768
 msgid "add 'prunable' annotation to worktrees older than <time>"
 msgstr ""
 "thêm chú thích kiểu “prunable” cho các cây làm việc hết hạn cũ hơn khoảng "
 "<thời gian>"
 
-#: builtin/worktree.c:741 builtin/worktree.c:774 builtin/worktree.c:848
-#: builtin/worktree.c:972
+#: builtin/worktree.c:770
+msgid "terminate records with a NUL character"
+msgstr "chấm dứt các bản ghi bằng ký tự NULL"
+
+#: builtin/worktree.c:821 builtin/worktree.c:854 builtin/worktree.c:928
+#: builtin/worktree.c:1052
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "%s không phải là cây làm việc"
 
-#: builtin/worktree.c:743 builtin/worktree.c:776
+#: builtin/worktree.c:823 builtin/worktree.c:856
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "Cây thư mục làm việc chính không thể khóa hay bỏ khóa được"
 
-#: builtin/worktree.c:748
+#: builtin/worktree.c:828
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "“%s” đã được khóa rồi, lý do: %s"
 
-#: builtin/worktree.c:750
+#: builtin/worktree.c:830
 #, c-format
 msgid "'%s' is already locked"
 msgstr "“%s” đã được khóa rồi"
 
-#: builtin/worktree.c:778
+#: builtin/worktree.c:858
 #, c-format
 msgid "'%s' is not locked"
 msgstr "“%s” chưa bị khóa"
 
-#: builtin/worktree.c:819
+#: builtin/worktree.c:899
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr "cây làm việc có chứa mô-đun-con không thể di chuyển hay xóa bỏ"
 
-#: builtin/worktree.c:827
+#: builtin/worktree.c:907
 msgid "force move even if worktree is dirty or locked"
 msgstr "ép buộc ngay cả khi cây làm việc đang bẩn hay bị khóa"
 
-#: builtin/worktree.c:850 builtin/worktree.c:974
+#: builtin/worktree.c:930 builtin/worktree.c:1054
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "“%s” là cây làm việc chính"
 
-#: builtin/worktree.c:855
+#: builtin/worktree.c:935
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "không thể phác họa ra tên đích đến “%s”"
 
-#: builtin/worktree.c:868
+#: builtin/worktree.c:948
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -24201,7 +24756,7 @@ msgstr ""
 "không thể di chuyển một cây-làm-việc bị khóa, khóa vì: %s\n"
 "dùng “move -f -f” để ghi đè hoặc mở khóa trước đã"
 
-#: builtin/worktree.c:870
+#: builtin/worktree.c:950
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -24209,38 +24764,38 @@ msgstr ""
 "không thể di chuyển một cây-làm-việc bị khóa;\n"
 "dùng “move -f -f” để ghi đè hoặc mở khóa trước đã"
 
-#: builtin/worktree.c:873
+#: builtin/worktree.c:953
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "thẩm tra gặp lỗi, không thể di chuyển một cây-làm-việc: %s"
 
-#: builtin/worktree.c:878
+#: builtin/worktree.c:958
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "gặp lỗi khi chuyển “%s” sang “%s”"
 
-#: builtin/worktree.c:924
+#: builtin/worktree.c:1004
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "gặp lỗi khi chạy “git status” vào “%s”"
 
-#: builtin/worktree.c:928
+#: builtin/worktree.c:1008
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr ""
 "“%s” có chứa các tập tin đã bị sửa chữa hoặc chưa được theo dõi, hãy dùng --"
 "force để xóa nó"
 
-#: builtin/worktree.c:933
+#: builtin/worktree.c:1013
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "gặp lỗi khi chạy “git status” trong “%s”, mã %d"
 
-#: builtin/worktree.c:956
+#: builtin/worktree.c:1036
 msgid "force removal even if worktree is dirty or locked"
 msgstr "ép buộc di chuyển thậm chí cả khi cây làm việc đang bẩn hay bị khóa"
 
-#: builtin/worktree.c:979
+#: builtin/worktree.c:1059
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -24249,7 +24804,7 @@ msgstr ""
 "không thể xóa bỏ một cây-làm-việc bị khóa, khóa vì: %s\n"
 "dùng “remove -f -f” để ghi đè hoặc mở khóa trước đã"
 
-#: builtin/worktree.c:981
+#: builtin/worktree.c:1061
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -24257,17 +24812,17 @@ msgstr ""
 "không thể xóa bỏ một cây-làm-việc bị khóa;\n"
 "dùng “remove -f -f” để ghi đè hoặc mở khóa trước đã"
 
-#: builtin/worktree.c:984
+#: builtin/worktree.c:1064
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "thẩm tra gặp lỗi, không thể gỡ bỏ một cây-làm-việc: %s"
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:1088
 #, c-format
 msgid "repair: %s: %s"
 msgstr "sửa chữa: %s: %s"
 
-#: builtin/worktree.c:1011
+#: builtin/worktree.c:1091
 #, c-format
 msgid "error: %s: %s"
 msgstr "lỗi: %s: %s"
@@ -24374,30 +24929,30 @@ msgstr "làm trống bí danh cho %s"
 msgid "recursive alias: %s"
 msgstr "đệ quy các bí danh: %s"
 
-#: git.c:479
+#: git.c:480
 msgid "write failure on standard output"
 msgstr "lỗi ghi nghiêm trong trên đầu ra tiêu chuẩn"
 
-#: git.c:481
+#: git.c:482
 msgid "unknown write failure on standard output"
 msgstr "lỗi nghiêm trọng chưa biết khi ghi ra đầu ra tiêu chuẩn"
 
-#: git.c:483
+#: git.c:484
 msgid "close failed on standard output"
 msgstr "gặp lỗi khi đóng đầu ra tiêu chuẩn"
 
-#: git.c:835
+#: git.c:838
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr ""
 "dò tìm thấy các bí danh quẩn tròn: biểu thức của “%s” không có điểm kết:%s"
 
-#: git.c:885
+#: git.c:888
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "không thể xử lý %s như là một phần bổ sung"
 
-#: git.c:898
+#: git.c:901
 #, c-format
 msgid ""
 "usage: %s\n"
@@ -24406,12 +24961,12 @@ msgstr ""
 "cách dùng: %s\n"
 "\n"
 
-#: git.c:918
+#: git.c:921
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr "gặp lỗi khi khai triển bí danh “%s”; “%s” không phải là lệnh git\n"
 
-#: git.c:930
+#: git.c:933
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "gặp lỗi khi chạy lệnh “%s”: %s\n"
@@ -24570,141 +25125,141 @@ msgstr ""
 "      hỏi cho: %s\n"
 " chuyển hướng: %s"
 
-#: remote-curl.c:183
+#: remote-curl.c:184
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr "sai trích dẫn trong giá trị push-option :“%s”"
 
-#: remote-curl.c:304
+#: remote-curl.c:308
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr "%sinfo/refs không hợp lệ: đây có phải là một kho git?"
 
-#: remote-curl.c:405
+#: remote-curl.c:409
 msgid "invalid server response; expected service, got flush packet"
 msgstr ""
 "đáp ứng từ máy phục vụ không hợp lệ; cần dịch vụ, nhưng lại nhận được gói "
 "flush"
 
-#: remote-curl.c:436
+#: remote-curl.c:440
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr "trả về của máy phục vụ không hợp lệ; nhận được %s"
 
-#: remote-curl.c:496
+#: remote-curl.c:500
 #, c-format
 msgid "repository '%s' not found"
 msgstr "không tìm thấy kho “%s”"
 
-#: remote-curl.c:500
+#: remote-curl.c:504
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr "Xác thực gặp lỗi cho “%s”"
 
-#: remote-curl.c:504
+#: remote-curl.c:508
 #, c-format
 msgid "unable to access '%s' with http.pinnedPubkey configuration: %s"
 msgstr "không thể truy cập “%s” với cấu hình http.pinnedPubkey: %s"
 
-#: remote-curl.c:508
+#: remote-curl.c:512
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "không thể truy cập “%s”: %s"
 
-#: remote-curl.c:514
+#: remote-curl.c:518
 #, c-format
 msgid "redirecting to %s"
 msgstr "chuyển hướng đến %s"
 
-#: remote-curl.c:645
+#: remote-curl.c:649
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr "không nên có EOF khi không gentle trên EOF"
 
-#: remote-curl.c:657
+#: remote-curl.c:661
 msgid "remote server sent unexpected response end packet"
 msgstr "máy phục vụ gửi gói kết thúc không cần"
 
-#: remote-curl.c:726
+#: remote-curl.c:730
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr "không thể tua lại dữ liệu post rpc - thử tăng http.postBuffer"
 
-#: remote-curl.c:755
+#: remote-curl.c:759
 #, c-format
 msgid "remote-curl: bad line length character: %.4s"
 msgstr "remote-curl: ký tự chiều dài dòng bị sai: %.4s"
 
-#: remote-curl.c:757
+#: remote-curl.c:761
 msgid "remote-curl: unexpected response end packet"
 msgstr "remote-curl: gặp đáp ứng là gói kết thúc bất ngờ"
 
-#: remote-curl.c:833
+#: remote-curl.c:837
 #, c-format
 msgid "RPC failed; %s"
 msgstr "RPC gặp lỗi; %s"
 
-#: remote-curl.c:873
+#: remote-curl.c:877
 msgid "cannot handle pushes this big"
 msgstr "không thể xử lý đẩy cái lớn này"
 
-#: remote-curl.c:986
+#: remote-curl.c:990
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr "không thể giải nén yêu cầu; có lỗi khi giải nén của zlib %d"
 
-#: remote-curl.c:990
+#: remote-curl.c:994
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr "không thể giải nén yêu cầu; có lỗi ở cuối %d"
 
-#: remote-curl.c:1040
+#: remote-curl.c:1044
 #, c-format
 msgid "%d bytes of length header were received"
 msgstr "đã nhận về phần đầu có chiều dài %d byte"
 
-#: remote-curl.c:1042
+#: remote-curl.c:1046
 #, c-format
 msgid "%d bytes of body are still expected"
 msgstr "phần thân vẫn còn cần %d byte"
 
-#: remote-curl.c:1131
+#: remote-curl.c:1135
 msgid "dumb http transport does not support shallow capabilities"
 msgstr "đổ vận chuyển http không hỗ trợ khả năng nông"
 
-#: remote-curl.c:1146
+#: remote-curl.c:1150
 msgid "fetch failed."
 msgstr "lấy về gặp lỗi."
 
-#: remote-curl.c:1192
+#: remote-curl.c:1198
 msgid "cannot fetch by sha1 over smart http"
 msgstr "không thể lấy về bằng sha1 thông qua smart http"
 
-#: remote-curl.c:1236 remote-curl.c:1242
+#: remote-curl.c:1242 remote-curl.c:1248
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr "lỗi giao thức: cần sha/ref, nhưng lại nhận được “%s”"
 
-#: remote-curl.c:1254 remote-curl.c:1372
+#: remote-curl.c:1260 remote-curl.c:1378
 #, c-format
 msgid "http transport does not support %s"
 msgstr "vận chuyển http không hỗ trợ %s"
 
-#: remote-curl.c:1290
+#: remote-curl.c:1296
 msgid "git-http-push failed"
 msgstr "git-http-push gặp lỗi"
 
-#: remote-curl.c:1478
+#: remote-curl.c:1485
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr "remote-curl: usage: git remote-curl <máy chủ> [<url>]"
 
-#: remote-curl.c:1510
+#: remote-curl.c:1517
 msgid "remote-curl: error reading command stream from git"
 msgstr "remote-curl: gặp lỗi khi đọc luồng dữ liệu lệnh từ git"
 
-#: remote-curl.c:1517
+#: remote-curl.c:1524
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr "remote-curl: đã cố gắng fetch mà không có kho nội bộ"
 
-#: remote-curl.c:1558
+#: remote-curl.c:1565
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr "remote-curl: không hiểu lệnh “%s” từ git"
@@ -24717,121 +25272,121 @@ msgstr "cần một thư mục làm việc"
 msgid "could not find enlistment root"
 msgstr "không tìm thấy gốc enlistment"
 
-#: contrib/scalar/scalar.c:89 contrib/scalar/scalar.c:351
-#: contrib/scalar/scalar.c:436 contrib/scalar/scalar.c:579
+#: contrib/scalar/scalar.c:89 contrib/scalar/scalar.c:350
+#: contrib/scalar/scalar.c:435 contrib/scalar/scalar.c:578
 #, c-format
 msgid "could not switch to '%s'"
 msgstr "không thể chuyển đến '%s'"
 
-#: contrib/scalar/scalar.c:180
+#: contrib/scalar/scalar.c:179
 #, c-format
 msgid "could not configure %s=%s"
 msgstr "không thể đóng cấu hình %s=%s"
 
-#: contrib/scalar/scalar.c:198
+#: contrib/scalar/scalar.c:197
 msgid "could not configure log.excludeDecoration"
 msgstr "không thể cấu hình log.excludeDecoration"
 
-#: contrib/scalar/scalar.c:219
+#: contrib/scalar/scalar.c:218
 msgid "Scalar enlistments require a worktree"
 msgstr "'Scalar enlistments' cần một cây làm việc"
 
-#: contrib/scalar/scalar.c:311
+#: contrib/scalar/scalar.c:310
 #, c-format
 msgid "remote HEAD is not a branch: '%.*s'"
 msgstr "HEAD của máy chủ không phải một nhánh: '%.*s'"
 
-#: contrib/scalar/scalar.c:317
+#: contrib/scalar/scalar.c:316
 msgid "failed to get default branch name from remote; using local default"
 msgstr "gặp lỗi khi lấy tên nhánh mặc định từ máy chủ; sử dụng mặc định nội bộ"
 
-#: contrib/scalar/scalar.c:330
+#: contrib/scalar/scalar.c:329
 msgid "failed to get default branch name"
 msgstr "gặp lỗi khi lấy tên nhánh mặc định"
 
-#: contrib/scalar/scalar.c:341
+#: contrib/scalar/scalar.c:340
 msgid "failed to unregister repository"
 msgstr "gặp lỗi khi hủy đăng ký kho chứa"
 
-#: contrib/scalar/scalar.c:356
+#: contrib/scalar/scalar.c:355
 msgid "failed to delete enlistment directory"
 msgstr "gặp lỗi khi xóa thư mục dành được"
 
-#: contrib/scalar/scalar.c:376
+#: contrib/scalar/scalar.c:375
 msgid "branch to checkout after clone"
 msgstr "nhánh để lấy ra sau khi nhân bản"
 
-#: contrib/scalar/scalar.c:378
+#: contrib/scalar/scalar.c:377
 msgid "when cloning, create full working directory"
 msgstr "khi nhân bản, tạo đầy đủ thư mục làm việc"
 
-#: contrib/scalar/scalar.c:380
+#: contrib/scalar/scalar.c:379
 msgid "only download metadata for the branch that will be checked out"
 msgstr "chỉ siêu dữ liệu tải về cho nhánh mà sẽ được lấy ra"
 
-#: contrib/scalar/scalar.c:385
+#: contrib/scalar/scalar.c:384
 msgid "scalar clone [<options>] [--] <repo> [<dir>]"
 msgstr "scalar clone [<các tùy chọn>] [--] <kho> [<t.mục>]"
 
-#: contrib/scalar/scalar.c:410
+#: contrib/scalar/scalar.c:409
 #, c-format
 msgid "cannot deduce worktree name from '%s'"
 msgstr "không thể suy diễn tên cây làm việc từ '%s'"
 
-#: contrib/scalar/scalar.c:419
+#: contrib/scalar/scalar.c:418
 #, c-format
 msgid "directory '%s' exists already"
 msgstr "thư mục '%s' đã sẵn có"
 
-#: contrib/scalar/scalar.c:446
+#: contrib/scalar/scalar.c:445
 #, c-format
 msgid "failed to get default branch for '%s'"
 msgstr "gặp lỗi khi lấy nhánh mặc định cho '%s'"
 
-#: contrib/scalar/scalar.c:457
+#: contrib/scalar/scalar.c:456
 #, c-format
 msgid "could not configure remote in '%s'"
 msgstr "không thể cấu hình máy chủ trong '%s'"
 
-#: contrib/scalar/scalar.c:466
+#: contrib/scalar/scalar.c:465
 #, c-format
 msgid "could not configure '%s'"
 msgstr "không thể cấu hình '%s'"
 
-#: contrib/scalar/scalar.c:469
+#: contrib/scalar/scalar.c:468
 msgid "partial clone failed; attempting full clone"
 msgstr "nhân bản từng phần gặp lỗi; đang cố thử nhân bản đầy đủ"
 
-#: contrib/scalar/scalar.c:473
+#: contrib/scalar/scalar.c:472
 msgid "could not configure for full clone"
 msgstr "không thể cấu hình cho nhân bản đầy đủ"
 
-#: contrib/scalar/scalar.c:505
+#: contrib/scalar/scalar.c:504
 msgid "`scalar list` does not take arguments"
 msgstr "`scalar list` không nhận các tham số"
 
-#: contrib/scalar/scalar.c:518
+#: contrib/scalar/scalar.c:517
 msgid "scalar register [<enlistment>]"
 msgstr "scalar register [<enlistment>]"
 
-#: contrib/scalar/scalar.c:545
+#: contrib/scalar/scalar.c:544
 msgid "reconfigure all registered enlistments"
 msgstr "cấu hình mọi enlistments đã đăng ký"
 
-#: contrib/scalar/scalar.c:549
+#: contrib/scalar/scalar.c:548
 msgid "scalar reconfigure [--all | <enlistment>]"
 msgstr "scalar reconfigure [--all | <enlistment>]"
 
-#: contrib/scalar/scalar.c:567
+#: contrib/scalar/scalar.c:566
 msgid "--all or <enlistment>, but not both"
 msgstr "--all hoặc <enlistment>, không thể là cả hai"
 
-#: contrib/scalar/scalar.c:582
+#: contrib/scalar/scalar.c:581
 #, c-format
 msgid "git repository gone in '%s'"
 msgstr "kho git ra đi trong '%s'"
 
-#: contrib/scalar/scalar.c:622
+#: contrib/scalar/scalar.c:621
 msgid ""
 "scalar run <task> [<enlistment>]\n"
 "Tasks:\n"
@@ -24839,42 +25394,55 @@ msgstr ""
 "scalar run <task> [<enlistment>]\n"
 "Nhiệm vụ:\n"
 
-#: contrib/scalar/scalar.c:640
+#: contrib/scalar/scalar.c:639
 #, c-format
 msgid "no such task: '%s'"
 msgstr "không có nhiệm vụ nào như thế: “%s”"
 
-#: contrib/scalar/scalar.c:690
+#: contrib/scalar/scalar.c:689
 msgid "scalar unregister [<enlistment>]"
 msgstr "scalar unregister [<enlistment>]"
 
-#: contrib/scalar/scalar.c:737
+#: contrib/scalar/scalar.c:736
 msgid "scalar delete <enlistment>"
 msgstr "scalar delete <enlistment>"
 
-#: contrib/scalar/scalar.c:752
+#: contrib/scalar/scalar.c:751
 msgid "refusing to delete current working directory"
 msgstr "từ chối gỡ bỏ thư mục làm việc hiện tại"
 
-#: contrib/scalar/scalar.c:767
+#: contrib/scalar/scalar.c:766
 msgid "include Git version"
 msgstr "bao gồm phiên bản Git"
 
-#: contrib/scalar/scalar.c:769
+#: contrib/scalar/scalar.c:768
 msgid "include Git's build options"
 msgstr "bao gồm các tùy chọn biên dịch của Git"
 
-#: contrib/scalar/scalar.c:773
+#: contrib/scalar/scalar.c:772
 msgid "scalar verbose [-v | --verbose] [--build-options]"
 msgstr "scalar verbose [-v | --verbose] [--build-options]"
 
+#: contrib/scalar/scalar.c:813
+msgid "-C requires a <directory>"
+msgstr "-C cần một <thư_mục>"
+
+#: contrib/scalar/scalar.c:815
+#, c-format
+msgid "could not change to '%s'"
+msgstr "không thể chuyển sang “%s”"
+
 #: contrib/scalar/scalar.c:821
+msgid "-c requires a <key>=<value> argument"
+msgstr "-c cần một tham số <key>=<value>"
+
+#: contrib/scalar/scalar.c:839
 msgid ""
-"scalar <command> [<options>]\n"
+"scalar [-C <directory>] [-c <key>=<value>] <command> [<options>]\n"
 "\n"
 "Commands:\n"
 msgstr ""
-"scalar <lệnh> [<các tùy chọn>]\n"
+"scalar [-C </thư/mục/>] [-c <khóa>=<giá trị>] <lệnh> [<các tùy chọn>]\n"
 "\n"
 "Các lệnh:\n"
 
@@ -24886,43 +25454,43 @@ msgstr "hiện không có thông tin về trình biên dịch\n"
 msgid "no libc information available\n"
 msgstr "không có thông tin về libc\n"
 
-#: list-objects-filter-options.h:94
+#: list-objects-filter-options.h:126
 msgid "args"
 msgstr "các_tham_số"
 
-#: list-objects-filter-options.h:95
+#: list-objects-filter-options.h:127
 msgid "object filtering"
 msgstr "lọc đối tượng"
 
-#: parse-options.h:183
+#: parse-options.h:188
 msgid "expiry-date"
 msgstr "ngày hết hạn"
 
-#: parse-options.h:197
+#: parse-options.h:202
 msgid "no-op (backward compatibility)"
 msgstr "no-op (tương thích ngược)"
 
-#: parse-options.h:310
+#: parse-options.h:341
 msgid "be more verbose"
 msgstr "chi tiết hơn nữa"
 
-#: parse-options.h:312
+#: parse-options.h:343
 msgid "be more quiet"
 msgstr "im lặng hơn nữa"
 
-#: parse-options.h:318
+#: parse-options.h:349
 msgid "use <n> digits to display object names"
 msgstr "sử dụng <n> chữ số để hiển thị tên đối tượng"
 
-#: parse-options.h:337
+#: parse-options.h:368
 msgid "how to strip spaces and #comments from message"
 msgstr "làm thế nào để cắt bỏ khoảng trắng và #ghichú từ mẩu tin nhắn"
 
-#: parse-options.h:338
+#: parse-options.h:369
 msgid "read pathspec from file"
 msgstr "đọc đặc tả đường dẫn từ tập tin"
 
-#: parse-options.h:339
+#: parse-options.h:370
 msgid ""
 "with --pathspec-from-file, pathspec elements are separated with NUL character"
 msgstr ""
@@ -25186,450 +25754,456 @@ msgid "Display help information about Git"
 msgstr "Hiển thị thông tin trợ giúp về Git"
 
 #: command-list.h:108
+msgid "Run git hooks"
+msgstr "Chạy các móc git"
+
+#: command-list.h:109
 msgid "Server side implementation of Git over HTTP"
 msgstr "Thi hành phía máy chủ của Git qua HTTP"
 
-#: command-list.h:109
+#: command-list.h:110
 msgid "Download from a remote Git repository via HTTP"
 msgstr "Tải về từ một kho chứa Git trên mạng thông qua HTTP"
 
-#: command-list.h:110
+#: command-list.h:111
 msgid "Push objects over HTTP/DAV to another repository"
 msgstr "Đẩy các đối tượng lên thông qua HTTP/DAV đến kho chứa khác"
 
-#: command-list.h:111
+#: command-list.h:112
 msgid "Send a collection of patches from stdin to an IMAP folder"
 msgstr ""
 "Gửi một bộ sưu tập các miếng vá từ đầu vào tiêu chuẩn đến một thư mục IMAP"
 
-#: command-list.h:112
+#: command-list.h:113
 msgid "Build pack index file for an existing packed archive"
 msgstr "Xây dựng tập tin mục lục gói cho một kho nén đã đóng gói sẵn có"
 
-#: command-list.h:113
+#: command-list.h:114
 msgid "Create an empty Git repository or reinitialize an existing one"
 msgstr "Tạo một kho git mới hay khởi tạo lại một kho đã tồn tại từ trước"
 
-#: command-list.h:114
+#: command-list.h:115
 msgid "Instantly browse your working repository in gitweb"
 msgstr "Duyệt ngay kho làm việc của bạn trong gitweb"
 
-#: command-list.h:115
+#: command-list.h:116
 msgid "Add or parse structured information in commit messages"
 msgstr "Thêm hay phân tích thông tin cấu trúc trong ghi chú lần chuyển giao"
 
-#: command-list.h:116
+#: command-list.h:117
 msgid "Show commit logs"
 msgstr "Hiển thị nhật ký các lần chuyển giao"
 
-#: command-list.h:117
+#: command-list.h:118
 msgid "Show information about files in the index and the working tree"
 msgstr "Hiển thị thông tin về các tập tin trong bảng mục lục và cây làm việc"
 
-#: command-list.h:118
+#: command-list.h:119
 msgid "List references in a remote repository"
 msgstr "Liệt kê các tham chiếu trong một kho chứa trên mạng"
 
-#: command-list.h:119
+#: command-list.h:120
 msgid "List the contents of a tree object"
 msgstr "Liệt kê nội dung của đối tượng cây"
 
-#: command-list.h:120
+#: command-list.h:121
 msgid "Extracts patch and authorship from a single e-mail message"
 msgstr "Trích xuất miếng và và nguồn tác giả từ một thư điện tử đơn"
 
-#: command-list.h:121
+#: command-list.h:122
 msgid "Simple UNIX mbox splitter program"
 msgstr "Chương trình phân tách UNIX mbox đơn giản"
 
-#: command-list.h:122
+#: command-list.h:123
 msgid "Run tasks to optimize Git repository data"
 msgstr "Chạy các nhiệm vụ để tối ưu hóa dữ liệu kho Git"
 
-#: command-list.h:123
+#: command-list.h:124
 msgid "Join two or more development histories together"
 msgstr "Hợp nhất hai hay nhiều hơn lịch sử của các nhà phát triển"
 
-#: command-list.h:124
+#: command-list.h:125
 msgid "Find as good common ancestors as possible for a merge"
 msgstr "Tìm các tổ tiên chung tốt có thể được cho hòa trộn"
 
-#: command-list.h:125
+#: command-list.h:126
 msgid "Run a three-way file merge"
 msgstr "Chạy một hòa trộn tập tin “3-đường”"
 
-#: command-list.h:126
+#: command-list.h:127
 msgid "Run a merge for files needing merging"
 msgstr "Chạy một hòa trộn cho các tập tin cần hòa trộn"
 
-#: command-list.h:127
+#: command-list.h:128
 msgid "The standard helper program to use with git-merge-index"
 msgstr "Một chương trình hỗ trợ tiêu chuẩn dùng với git-merge-index"
 
-#: command-list.h:128
+#: command-list.h:129
 msgid "Show three-way merge without touching index"
 msgstr "Hiển thị hòa trộn ba-đường mà không đụng chạm đến mục lục"
 
-#: command-list.h:129
+#: command-list.h:130
 msgid "Run merge conflict resolution tools to resolve merge conflicts"
 msgstr ""
 "Chạy công cụ phân giải xung đột hòa trộn để mà giải quyết các xung đột hòa "
 "trộn"
 
-#: command-list.h:130
+#: command-list.h:131
 msgid "Creates a tag object with extra validation"
 msgstr "Tạo một đối tượng thẻ với kiểm tra mở rộng"
 
-#: command-list.h:131
+#: command-list.h:132
 msgid "Build a tree-object from ls-tree formatted text"
 msgstr "Xây dựng một tree-object từ văn bản định dạng ls-tree"
 
-#: command-list.h:132
+#: command-list.h:133
 msgid "Write and verify multi-pack-indexes"
 msgstr "Ghi và thẩm tra các multi-pack-indexes"
 
-#: command-list.h:133
+#: command-list.h:134
 msgid "Move or rename a file, a directory, or a symlink"
 msgstr "Di chuyển hay đổi tên một tập tin, thư mục hoặc liên kết mềm"
 
-#: command-list.h:134
+#: command-list.h:135
 msgid "Find symbolic names for given revs"
 msgstr "Tìm các tên liên kết mềm cho điểm xét đã cho"
 
-#: command-list.h:135
+#: command-list.h:136
 msgid "Add or inspect object notes"
 msgstr "Thêm hoặc điều tra đối tượng ghi chú"
 
-#: command-list.h:136
+#: command-list.h:137
 msgid "Import from and submit to Perforce repositories"
 msgstr "Nhập vào từ và gửi đến các kho cần thiết"
 
-#: command-list.h:137
+#: command-list.h:138
 msgid "Create a packed archive of objects"
 msgstr "Tạo một kho lưu được đóng gói cho các đối"
 
-#: command-list.h:138
+#: command-list.h:139
 msgid "Find redundant pack files"
 msgstr "Tìm các tập tin gói dư thừa"
 
-#: command-list.h:139
+#: command-list.h:140
 msgid "Pack heads and tags for efficient repository access"
 msgstr "Đóng gói các phần đầu và thẻ để truy cập kho hiệu quả hơn"
 
-#: command-list.h:140
+#: command-list.h:141
 msgid "Compute unique ID for a patch"
 msgstr "Tính toán ID duy nhất cho một miếng vá"
 
-#: command-list.h:141
+#: command-list.h:142
 msgid "Prune all unreachable objects from the object database"
 msgstr ""
 "Xén bớt tất các các đối tượng không tiếp cận được từ cơ sở dữ liệu đối tượng"
 
-#: command-list.h:142
+#: command-list.h:143
 msgid "Remove extra objects that are already in pack files"
 msgstr "Xóa bỏ các đối tượng mở rộng cái mà đã sẵn có trong các tập tin gói"
 
-#: command-list.h:143
+#: command-list.h:144
 msgid "Fetch from and integrate with another repository or a local branch"
 msgstr "Lấy về và hợp nhất với kho khác hay một nhánh nội bộ"
 
-#: command-list.h:144
+#: command-list.h:145
 msgid "Update remote refs along with associated objects"
 msgstr "Cập nhật th.chiếu máy chủ cùng với các đối tượng liên quan đến nó"
 
-#: command-list.h:145
+#: command-list.h:146
 msgid "Applies a quilt patchset onto the current branch"
 msgstr "Ấp dụng một bộ miếng vá quilt vào trong nhánh hiện hành"
 
-#: command-list.h:146
+#: command-list.h:147
 msgid "Compare two commit ranges (e.g. two versions of a branch)"
 msgstr "So sánh hai vùng chuyển giao (vd: hai phiên bản của một nhánh)"
 
-#: command-list.h:147
+#: command-list.h:148
 msgid "Reads tree information into the index"
 msgstr "Đọc thông tin cây vào trong mục lục"
 
-#: command-list.h:148
+#: command-list.h:149
 msgid "Reapply commits on top of another base tip"
 msgstr "Thu hoạch các lần chuyển giao trên đỉnh của đầu mút cơ sở khác"
 
-#: command-list.h:149
+#: command-list.h:150
 msgid "Receive what is pushed into the repository"
 msgstr "Nhận cái mà được đẩy vào trong kho"
 
-#: command-list.h:150
+#: command-list.h:151
 msgid "Manage reflog information"
 msgstr "Quản lý thông tin reflog"
 
-#: command-list.h:151
+#: command-list.h:152
 msgid "Manage set of tracked repositories"
 msgstr "Quản lý tập hợp các kho chứa đã được theo dõi"
 
-#: command-list.h:152
+#: command-list.h:153
 msgid "Pack unpacked objects in a repository"
 msgstr "Đóng gói các đối tượng chưa đóng gói ở một kho chứa"
 
-#: command-list.h:153
+#: command-list.h:154
 msgid "Create, list, delete refs to replace objects"
 msgstr "Tạo, liệt kê, xóa các tham chiếu để thay thế các đối tượng"
 
-#: command-list.h:154
+#: command-list.h:155
 msgid "Generates a summary of pending changes"
 msgstr "Tạo ra một tóm tắt các thay đổi còn treo"
 
-#: command-list.h:155
+#: command-list.h:156
 msgid "Reuse recorded resolution of conflicted merges"
 msgstr "Dùng lại các giải pháp đã ghi lại của các hòa trộn bị xung đột"
 
-#: command-list.h:156
+#: command-list.h:157
 msgid "Reset current HEAD to the specified state"
 msgstr "Đặt lại HEAD hiện hành thành trạng thái đã cho"
 
-#: command-list.h:157
+#: command-list.h:158
 msgid "Restore working tree files"
 msgstr "Hoàn nguyên các tập tin cây làm việc"
 
-#: command-list.h:158
+#: command-list.h:159
 msgid "Lists commit objects in reverse chronological order"
 msgstr "Liệt kê các đối tượng chuyển giao theo thứ tự tôpô đảo ngược"
 
-#: command-list.h:159
+#: command-list.h:160
 msgid "Pick out and massage parameters"
 msgstr "Cậy ra và xử lý các tham số"
 
-#: command-list.h:160
+#: command-list.h:161
 msgid "Revert some existing commits"
 msgstr "Hoàn lại một số lần chuyển giao sẵn có"
 
-#: command-list.h:161
+#: command-list.h:162
 msgid "Remove files from the working tree and from the index"
 msgstr "Gỡ bỏ các tập tin từ cây làm việc và từ bảng mục lục"
 
-#: command-list.h:162
+#: command-list.h:163
 msgid "Send a collection of patches as emails"
 msgstr "Gửi một tập hợp của các miếng vá ở dạng thư điện tử"
 
-#: command-list.h:163
+#: command-list.h:164
 msgid "Push objects over Git protocol to another repository"
 msgstr "Đẩy các đối tượng lên thông qua giao thức Git đến kho chứa khác"
 
-#: command-list.h:164
+#: command-list.h:165
 msgid "Git's i18n setup code for shell scripts"
 msgstr "Nã cài đặt quốc tế hóa của Git cho văn lệnh hệ vỏ"
 
-#: command-list.h:165
+#: command-list.h:166
 msgid "Common Git shell script setup code"
 msgstr "Mã cài đặt văn lệnh hệ vỏ Git chung"
 
-#: command-list.h:166
+#: command-list.h:167
 msgid "Restricted login shell for Git-only SSH access"
 msgstr "Hệ vỏ đăng nhập có hạn chế cho truy cập SSH chỉ-Git"
 
-#: command-list.h:167
+#: command-list.h:168
 msgid "Summarize 'git log' output"
 msgstr "Kết xuất “git log” dạng tóm tắt"
 
-#: command-list.h:168
+#: command-list.h:169
 msgid "Show various types of objects"
 msgstr "Hiển thị các kiểu khác nhau của các đối tượng"
 
-#: command-list.h:169
+#: command-list.h:170
 msgid "Show branches and their commits"
 msgstr "Hiển thị những nhánh và các lần chuyển giao của chúng"
 
-#: command-list.h:170
+#: command-list.h:171
 msgid "Show packed archive index"
 msgstr "Hiển thị các muc lục kho nén đã đóng gói"
 
-#: command-list.h:171
+#: command-list.h:172
 msgid "List references in a local repository"
 msgstr "Liệt kê các tham chiếu trong một kho nội bộ"
 
-#: command-list.h:172
-msgid "Initialize and modify the sparse-checkout"
-msgstr "Khởi tạo và sửa đổi sparse-checkout"
-
 #: command-list.h:173
+msgid "Reduce your working tree to a subset of tracked files"
+msgstr ""
+"Giảm lược cây làm việc của bạn thành tập hợp con của các tập tin được theo "
+"dõi"
+
+#: command-list.h:174
 msgid "Add file contents to the staging area"
 msgstr "Thêm nội dung tập tin vào vùng bệ phóng"
 
-#: command-list.h:174
+#: command-list.h:175
 msgid "Stash the changes in a dirty working directory away"
 msgstr "Tạm cất đi các thay đổi trong một thư mục làm việc bẩn"
 
-#: command-list.h:175
+#: command-list.h:176
 msgid "Show the working tree status"
 msgstr "Hiển thị trạng thái cây làm việc"
 
-#: command-list.h:176
+#: command-list.h:177
 msgid "Remove unnecessary whitespace"
 msgstr "Xóa bỏ các khoảng trắng không cần thiết"
 
-#: command-list.h:177
+#: command-list.h:178
 msgid "Initialize, update or inspect submodules"
 msgstr "Khởi tạo, cập nhật hay điều tra các mô-đun-con"
 
-#: command-list.h:178
+#: command-list.h:179
 msgid "Bidirectional operation between a Subversion repository and Git"
 msgstr "Thao tác hai hướng giữ hai kho Subversion và Git"
 
-#: command-list.h:179
+#: command-list.h:180
 msgid "Switch branches"
 msgstr "Các nhánh chuyển"
 
-#: command-list.h:180
+#: command-list.h:181
 msgid "Read, modify and delete symbolic refs"
 msgstr "Đọc, sửa và xóa tham chiếu mềm"
 
-#: command-list.h:181
+#: command-list.h:182
 msgid "Create, list, delete or verify a tag object signed with GPG"
 msgstr "Tạo, liệt kê, xóa hay xác thực một đối tượng thẻ được ký bằng GPG"
 
-#: command-list.h:182
+#: command-list.h:183
 msgid "Creates a temporary file with a blob's contents"
 msgstr "Tạo một tập tin tạm với nội dung của blob"
 
-#: command-list.h:183
+#: command-list.h:184
 msgid "Unpack objects from a packed archive"
 msgstr "Gỡ các đối tượng khỏi một kho lưu đã đóng gói"
 
-#: command-list.h:184
+#: command-list.h:185
 msgid "Register file contents in the working tree to the index"
 msgstr "Đăng ký nội dung tập tin từ cây làm việc đến bảng mục lục"
 
-#: command-list.h:185
+#: command-list.h:186
 msgid "Update the object name stored in a ref safely"
 msgstr "Cập nhật tên đối tượng được lưu trong một tham chiếu một cách an toàn"
 
-#: command-list.h:186
+#: command-list.h:187
 msgid "Update auxiliary info file to help dumb servers"
 msgstr "Cập nhật tập tin thông tin phụ trợ để giúp đỡ các dịch vụ dumb"
 
-#: command-list.h:187
+#: command-list.h:188
 msgid "Send archive back to git-archive"
 msgstr "Gửi kho lưu trở lại cho git-archive"
 
-#: command-list.h:188
+#: command-list.h:189
 msgid "Send objects packed back to git-fetch-pack"
 msgstr "Gửi các đối tượng đã đóng gói trở lại cho git-fetch-pack"
 
-#: command-list.h:189
+#: command-list.h:190
 msgid "Show a Git logical variable"
 msgstr "Hiển thị một biến Git luận lý"
 
-#: command-list.h:190
+#: command-list.h:191
 msgid "Check the GPG signature of commits"
 msgstr "Kiểm tra ký lần chuyển giao dùng GPG"
 
-#: command-list.h:191
+#: command-list.h:192
 msgid "Validate packed Git archive files"
 msgstr "Kiểm tra lại các tập tin kho (lưu trữ, nén) Git đã được đóng gói"
 
-#: command-list.h:192
+#: command-list.h:193
 msgid "Check the GPG signature of tags"
 msgstr "Kiểm tra chữ ký GPG của các thẻ"
 
-#: command-list.h:193
+#: command-list.h:194
 msgid "Show logs with difference each commit introduces"
 msgstr "Hiển thị các nhật ký với từng lần chuyển giao khác nhau đưa ra"
 
-#: command-list.h:194
+#: command-list.h:195
 msgid "Manage multiple working trees"
 msgstr "Quản lý nhiều cây làm việc"
 
-#: command-list.h:195
+#: command-list.h:196
 msgid "Create a tree object from the current index"
 msgstr "Tạo một đối tượng cây từ đầu vào tiêu chuẩn stdin hiện tại"
 
-#: command-list.h:196
+#: command-list.h:197
 msgid "Defining attributes per path"
 msgstr "Định nghĩa các thuộc tính cho mỗi đường dẫn"
 
-#: command-list.h:197
+#: command-list.h:198
 msgid "Git command-line interface and conventions"
 msgstr "Giao diện dòng lệnh Git và quy ước"
 
-#: command-list.h:198
+#: command-list.h:199
 msgid "A Git core tutorial for developers"
 msgstr "Hướng dẫn Git cơ bản cho nhà phát triển"
 
-#: command-list.h:199
+#: command-list.h:200
 msgid "Providing usernames and passwords to Git"
 msgstr "Cung cấp tài khoản và mật khẩu cho Git"
 
-#: command-list.h:200
+#: command-list.h:201
 msgid "Git for CVS users"
 msgstr "Git dành cho những người dùng CVS"
 
-#: command-list.h:201
+#: command-list.h:202
 msgid "Tweaking diff output"
 msgstr "Chỉnh kết xuất diff"
 
-#: command-list.h:202
+#: command-list.h:203
 msgid "A useful minimum set of commands for Everyday Git"
 msgstr "Một tập hợp lệnh hữu dụng tối thiểu để dùng Git hàng ngày"
 
-#: command-list.h:203
+#: command-list.h:204
 msgid "Frequently asked questions about using Git"
 msgstr "Các câu hỏi thường gặp về cách sử dụng Git"
 
-#: command-list.h:204
+#: command-list.h:205
 msgid "A Git Glossary"
 msgstr "Thuật ngữ chuyên môn Git"
 
-#: command-list.h:205
+#: command-list.h:206
 msgid "Hooks used by Git"
 msgstr "Các móc được sử dụng bởi Git"
 
-#: command-list.h:206
+#: command-list.h:207
 msgid "Specifies intentionally untracked files to ignore"
 msgstr "Chỉ định các tập tin không cần theo dõi"
 
-#: command-list.h:207
+#: command-list.h:208
 msgid "The Git repository browser"
 msgstr "Bộ duyện kho Git"
 
-#: command-list.h:208
+#: command-list.h:209
 msgid "Map author/committer names and/or E-Mail addresses"
 msgstr "Ánh xạ tên tác giả/người chuyển giao và/hoặc địa chỉ E-Mail"
 
-#: command-list.h:209
+#: command-list.h:210
 msgid "Defining submodule properties"
 msgstr "Định nghĩa thuộc tính mô-đun-con"
 
-#: command-list.h:210
+#: command-list.h:211
 msgid "Git namespaces"
 msgstr "Không gian tên Git"
 
-#: command-list.h:211
+#: command-list.h:212
 msgid "Helper programs to interact with remote repositories"
 msgstr "Các chương trình hỗ trợ để tương tác với các kho chứa trên máy chủ"
 
-#: command-list.h:212
+#: command-list.h:213
 msgid "Git Repository Layout"
 msgstr "Bố cục kho Git"
 
-#: command-list.h:213
+#: command-list.h:214
 msgid "Specifying revisions and ranges for Git"
 msgstr "Chỉ định điểm xét duyệt và vùng cho Git"
 
-#: command-list.h:214
+#: command-list.h:215
 msgid "Mounting one repository inside another"
 msgstr "Gắn một kho chứa vào trong một cái khác"
 
-#: command-list.h:215
+#: command-list.h:216
 msgid "A tutorial introduction to Git"
 msgstr "Hướng dẫn cách dùng Git"
 
-#: command-list.h:216
+#: command-list.h:217
 msgid "A tutorial introduction to Git: part two"
 msgstr "Hướng dẫn cách dùng Git: phần hai"
 
-#: command-list.h:217
+#: command-list.h:218
 msgid "Git web interface (web frontend to Git repositories)"
 msgstr "Giao diện Git trên nền web (ứng dụng web chạy trên kho Git)"
 
-#: command-list.h:218
+#: command-list.h:219
 msgid "An overview of recommended workflows with Git"
 msgstr "Tổng quan về luồng công việc khuyến nghị nên dùng với Git"
 
@@ -25673,77 +26247,51 @@ msgstr "Đang thử hòa trộn đơn giản với $pretty_name"
 msgid "Simple merge did not work, trying automatic merge."
 msgstr "Hòa trộn đơn giản không làm việc, thử hòa trộn tự động."
 
-#: git-submodule.sh:401
-#, sh-format
-msgid "Unable to find current revision in submodule path '$displaypath'"
-msgstr ""
-"Không tìm thấy điểm xét duyệt hiện hành trong đường dẫn mô-đun-con "
-"“$displaypath”"
-
-#: git-submodule.sh:411
-#, sh-format
-msgid "Unable to fetch in submodule path '$sm_path'"
-msgstr "Không thể lấy về trong đường dẫn mô-đun-con “$sm_path”"
-
-#: git-submodule.sh:416
-#, sh-format
-msgid ""
-"Unable to find current ${remote_name}/${branch} revision in submodule path "
-"'$sm_path'"
-msgstr ""
-"Không thể tìm thấy điểm xét duyệt hiện hành ${remote_name}/${branch} trong "
-"đường dẫn mô-đun-con “$sm_path”"
-
-#: git-submodule.sh:464
-#, sh-format
-msgid "Failed to recurse into submodule path '$displaypath'"
-msgstr "Gặp lỗi khi đệ quy vào trong đường dẫn mô-đun-con “$displaypath”"
-
 #: git-sh-setup.sh:89 git-sh-setup.sh:94
 #, sh-format
 msgid "usage: $dashless $USAGE"
 msgstr "cách dùng: $dashless $USAGE"
 
-#: git-sh-setup.sh:183
+#: git-sh-setup.sh:182
 #, sh-format
 msgid "Cannot chdir to $cdup, the toplevel of the working tree"
 msgstr ""
 "Không thể chuyển thư mục (chdir) sang $cdup, thư mục ở mức cao nhất của cây "
 "làm việc"
 
-#: git-sh-setup.sh:192 git-sh-setup.sh:199
+#: git-sh-setup.sh:191 git-sh-setup.sh:198
 #, sh-format
 msgid "fatal: $program_name cannot be used without a working tree."
 msgstr ""
 "lỗi nghiêm trọng: $program_name không thể được dùng ngoaoif thư mục làm việc."
 
-#: git-sh-setup.sh:213
+#: git-sh-setup.sh:212
 msgid "Cannot rewrite branches: You have unstaged changes."
 msgstr ""
 "Không thể ghi lại các nhánh: Bạn có các thay đổi chưa được đưa lên bệ phóng."
 
-#: git-sh-setup.sh:216
+#: git-sh-setup.sh:215
 #, sh-format
 msgid "Cannot $action: You have unstaged changes."
 msgstr "Không thể $action: Bạn có các thay đổi chưa được đưa lên bệ phóng."
 
-#: git-sh-setup.sh:227
+#: git-sh-setup.sh:226
 #, sh-format
 msgid "Cannot $action: Your index contains uncommitted changes."
 msgstr ""
 "Không thể $action: Mục lục của bạn có chứa các thay đổi chưa được chuyển "
 "giao."
 
-#: git-sh-setup.sh:229
+#: git-sh-setup.sh:228
 msgid "Additionally, your index contains uncommitted changes."
 msgstr ""
 "Thêm vào đó, bảng mục lục của bạn có chứa các thay đổi chưa được chuyển giao."
 
-#: git-sh-setup.sh:349
+#: git-sh-setup.sh:348
 msgid "You need to run this command from the toplevel of the working tree."
 msgstr "Bạn cần chạy lệnh này từ thư mục ở mức cao nhất của cây làm việc."
 
-#: git-sh-setup.sh:354
+#: git-sh-setup.sh:353
 msgid "Unable to determine absolute path of git directory"
 msgstr "Không thể dò tìm đường dẫn tuyệt đối của thư mục git"
 
@@ -26426,23 +26974,23 @@ msgstr "không thể lấy gửi thư dạng 7 bít"
 msgid "invalid transfer encoding"
 msgstr "bảng mã truyền không hợp lệ"
 
-#: git-send-email.perl:2095
+#: git-send-email.perl:2100
 #, perl-format
 msgid ""
-"fatal: %s: rejected by sendemail-validate hook\n"
+"fatal: %s: rejected by %s hook\n"
 "%s\n"
 "warning: no patches were sent\n"
 msgstr ""
-"nghiêm trọng: %s: bị từ chối bởi móc sendemail-validate\n"
+"nghiêm trọng: %s: bị từ chối bởi móc %s\n"
 "%s\n"
 "cảnh báo: không có miếng vá nào được gửi đi\n"
 
-#: git-send-email.perl:2105 git-send-email.perl:2158 git-send-email.perl:2168
+#: git-send-email.perl:2110 git-send-email.perl:2163 git-send-email.perl:2173
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "không thể mở %s: %s\n"
 
-#: git-send-email.perl:2108
+#: git-send-email.perl:2113
 #, perl-format
 msgid ""
 "fatal: %s:%d is longer than 998 characters\n"
@@ -26451,13 +26999,280 @@ msgstr ""
 "nghiêm trọng: %s: %d là dài hơn 998 ký tự\n"
 "cảnh báo: không có miếng vá nào được gửi đi\n"
 
-#: git-send-email.perl:2126
+#: git-send-email.perl:2131
 #, perl-format
 msgid "Skipping %s with backup suffix '%s'.\n"
 msgstr "Bỏ qua %s với hậu tố sao lưu dự phòng “%s”.\n"
 
 #. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:2130
+#: git-send-email.perl:2135
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "Bạn có thực sự muốn gửi %s? [y|N](có/KHÔNG): "
+
+#, perl-format
+#~ msgid "fatal: %s: rejected by %s hook\n"
+#~ msgstr "lỗi nghiêm trọng: %s: bị từ chối bởi móc %s\n"
+
+#~ msgid "git archive --list"
+#~ msgstr "git archive --list"
+
+#, c-format
+#~ msgid "unknown value for --diff-merges: %s"
+#~ msgstr "không hiểu giá trị cho --diff-merges: %s"
+
+#, c-format
+#~ msgid "invalid value '%s' for lsrefs.unborn"
+#~ msgstr "giá trị “%s” không hợp lệ cho lsrefs.unborn"
+
+#~ msgid "backend for `git stash -p`"
+#~ msgstr "ứng dụng chạy phía sau cho “git stash -p”"
+
+#, c-format
+#~ msgid "Invalid value for --empty: %s"
+#~ msgstr "Giá trị cho --empty không hợp lệ: %s"
+
+#, c-format
+#~ msgid "Invalid value for --patch-format: %s"
+#~ msgstr "Giá trị không hợp lệ cho --patch-format: %s"
+
+#, c-format
+#~ msgid "Invalid value for --show-current-patch: %s"
+#~ msgstr "Giá trị không hợp lệ cho --show-current-patch: %s"
+
+#~ msgid ""
+#~ "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad "
+#~ "| --term-new]"
+#~ msgstr ""
+#~ "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad "
+#~ "| --term-new]"
+
+#~ msgid "git bisect--helper --bisect-next"
+#~ msgstr "git bisect--helper --bisect-next"
+
+#~ msgid "git bisect--helper --bisect-visualize"
+#~ msgstr "git bisect--helper --bisect-visualize"
+
+#, c-format
+#~ msgid "invalid color '%s' in color.blame.repeatedLines"
+#~ msgstr "màu không hợp lệ “%s” trong color.blame.repeatedLines"
+
+#~ msgid "invalid value for blame.coloring"
+#~ msgstr "màu không hợp lệ cho blame.coloring"
+
+#~ msgid ""
+#~ "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e "
+#~ "| -p | <type> | --textconv | --filters) [--path=<path>] <object>"
+#~ msgstr ""
+#~ "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e "
+#~ "| -p | <kiểu> | --textconv) | --filters) [--path=<đường/dẫn>] <đối_tượng>"
+
+#~ msgid "show object type"
+#~ msgstr "hiển thị kiểu đối tượng"
+
+#~ msgid "exit with zero when there's no error"
+#~ msgstr "thoát với 0 khi không có lỗi"
+
+#~ msgid "show info and content of objects fed from the standard input"
+#~ msgstr ""
+#~ "hiển thị thông tin và nội dung của các đối tượng lấy từ đầu vào tiêu chuẩn"
+
+#~ msgid "show info about objects fed from the standard input"
+#~ msgstr "hiển thị các thông tin về đối tượng fed  từ đầu vào tiêu chuẩn"
+
+#~ msgid "follow in-tree symlinks (used with --batch or --batch-check)"
+#~ msgstr ""
+#~ "theo liên kết mềm trong-cây (được dùng với --batch hay --batch-check)"
+
+#~ msgid "show all objects with --batch or --batch-check"
+#~ msgstr "hiển thị mọi đối tượng với --batch hay --batch-check"
+
+#~ msgid "do not order --batch-all-objects output"
+#~ msgstr "đừng sắp xếp đầu ra --batch-all-objects"
+
+#~ msgid "set up tracking mode (see git-pull(1))"
+#~ msgstr "cài đặt chế độ theo dõi (xem git-pull(1))"
+
+#~ msgid "Using both --reset-author and --author does not make sense"
+#~ msgstr "Sử dụng cả hai tùy chọn --reset-author và --author không hợp lý"
+
+#~ msgid "Options --squash and --fixup cannot be used together"
+#~ msgstr "Các tùy chọn --squash và --fixup không thể sử dụng cùng với nhau"
+
+#~ msgid "Only one of -c/-C/-F/--fixup can be used."
+#~ msgstr "Chỉ được dùng một trong số tùy chọn trong số -c/-C/-F/--fixup."
+
+#~ msgid "Option -m cannot be combined with -c/-C/-F."
+#~ msgstr "Tùy chọn -m không thể được tổ hợp cùng với -c/-C/-F."
+
+#~ msgid ""
+#~ "Only one of --include/--only/--all/--interactive/--patch can be used."
+#~ msgstr ""
+#~ "Chỉ một trong các tùy chọn --include/--only/--all/--interactive/--patch "
+#~ "được sử dụng."
+
+#~ msgid "git count-objects [-v] [-H | --human-readable]"
+#~ msgstr "git count-objects [-v] [-H | --human-readable]"
+
+#, c-format
+#~ msgid "configuration fetch.output contains invalid value %s"
+#~ msgstr "phần cấu hình fetch.output có chứa giá-trị không hợp lệ %s"
+
+#~ msgid "--cached or --untracked cannot be used with --no-index"
+#~ msgstr "--cached hay --untracked không được sử dụng với --no-index"
+
+#~ msgid "--untracked cannot be used with --cached"
+#~ msgstr "--untracked không thể được sử dụng với tùy chọn --cached"
+
+#~ msgid "git hash-object  --stdin-paths"
+#~ msgstr "git hash-object  --stdin-paths"
+
+#~ msgid "git help [-g|--guides]"
+#~ msgstr "git help [-g|--guides]"
+
+#~ msgid "git help [-c|--config]"
+#~ msgstr "git help [-c|--config]"
+
+#~ msgid "git mktag"
+#~ msgstr "git mktag"
+
+#~ msgid "git mktree [-z] [--missing] [--batch]"
+#~ msgstr "git mktree [-z] [--missing] [--batch]"
+
+#~ msgid "read from stdin"
+#~ msgstr "đọc từ đầu vào tiêu chuẩn"
+
+#~ msgid "git notes merge --commit [-v | -q]"
+#~ msgstr "git notes merge --commit [-v | -q]"
+
+#~ msgid "git notes merge --abort [-v | -q]"
+#~ msgstr "git notes merge --abort [-v | -q]"
+
+#~ msgid "git notes get-ref"
+#~ msgstr "git notes get-ref"
+
+#~ msgid "invalid value for --missing"
+#~ msgstr "giá trị cho --missing không hợp lệ"
+
+#~ msgid "git prune-packed [-n | --dry-run] [-q | --quiet]"
+#~ msgstr "git prune-packed [-n | --dry-run] [-q | --quiet]"
+
+#, c-format
+#~ msgid "Invalid value for %s: %s"
+#~ msgstr "Giá trị không hợp lệ %s: %s"
+
+#, c-format
+#~ msgid "Invalid value for pull.ff: %s"
+#~ msgstr "Giá trị không hợp lệ cho pull.ff: %s"
+
+#~ msgid "git rebase --continue | --abort | --skip | --edit-todo"
+#~ msgstr "git rebase --continue | --abort | --skip | --edit-todo"
+
+#, c-format
+#~ msgid "'%s' is not a valid timestamp"
+#~ msgstr "“%s” không phải là dấu thời gian hợp lệ"
+
+#~ msgid "git reflog [ show | expire | delete | exists ]"
+#~ msgstr "git reflog [ show | expire | delete | exists ]"
+
+#~ msgid "git remote [-v | --verbose]"
+#~ msgstr "git remote [-v | --verbose]"
+
+#~ msgid "git replace [-f] --convert-graft-file"
+#~ msgstr "git replace [-f] --convert-graft-file"
+
+#, c-format
+#~ msgid ""
+#~ "\n"
+#~ "It took %.2f seconds to enumerate unstaged changes after reset.  You can\n"
+#~ "use '--quiet' to avoid this.  Set the config setting reset.quiet to true\n"
+#~ "to make this the default.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Cần %.2f giây để kiểm đếm các thay đổi chưa đưa lên bệ phóng sau khi đặt "
+#~ "lại.\n"
+#~ "Bạn có thể sử dụng “--quiet” để tránh việc này. Đặt reset.quiet thành "
+#~ "true trong\n"
+#~ "cài đặt config nếu bạn muốn thực hiện nó như là mặc định.\n"
+
+#~ msgid "git sparse-checkout list"
+#~ msgstr "git sparse-checkout list"
+
+#~ msgid "unable to upgrade repository format to enable worktreeConfig"
+#~ msgstr ""
+#~ "không thể nâng cấp định dạng kho lưu trữ để kích hoạt worktreeConfig"
+
+#~ msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
+#~ msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
+
+#~ msgid "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
+#~ msgstr "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
+
+#~ msgid "git sparse-checkout disable"
+#~ msgstr "git sparse-checkout disable"
+
+#~ msgid ""
+#~ "the stash.useBuiltin support has been removed!\n"
+#~ "See its entry in 'git help config' for details."
+#~ msgstr ""
+#~ "việc hỗ trợ stash.useBuiltin đã bị xóa!\n"
+#~ "Xem mục tin của nó trong “git help config” để biết chi tiết."
+
+#~ msgid "git stripspace [-s | --strip-comments]"
+#~ msgstr "git stripspace [-s | --strip-comments]"
+
+#~ msgid "git stripspace [-c | --comment-lines]"
+#~ msgstr "git stripspace [-c | --comment-lines]"
+
+#~ msgid "submodule--helper print-default-remote takes no arguments"
+#~ msgstr "submodule--helper print-default-remote takes không nhận tham số"
+
+#~ msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
+#~ msgstr ""
+#~ "git submodule--helper update-clone [--prefix=</đường/dẫn>] [</đường/dẫn>…]"
+
+#~ msgid "suppress output for update by rebase or merge"
+#~ msgstr "chặn kết xuất cho cập nhật bởi cải tổ hoặc hòa trộn"
+
+#~ msgid "overrides update mode in case the repository is a fresh clone"
+#~ msgstr "ghi đè chế độ cập nhật trong trường hợp kho lưu trữ là bản sao mới"
+
+#~ msgid "depth for shallow fetch"
+#~ msgstr "chiều sâu lịch sử muốn lấy về"
+
+#~ msgid "sha1"
+#~ msgstr "sha1"
+
+#~ msgid "SHA1 expected by superproject"
+#~ msgstr "SHA1 là cần thiết cho superproject"
+
+#~ msgid "subsha1"
+#~ msgstr "subsha1"
+
+#~ msgid "SHA1 of submodule's HEAD"
+#~ msgstr "SHA1 của HEAD của mô-đun-con"
+
+#~ msgid "git submodule--helper run-update-procedure [<options>] <path>"
+#~ msgstr ""
+#~ "git submodule--helper run-update-procedure [<các tùy chọn>] </đường/dẫn>"
+
+#~ msgid "git submodule--helper config --check-writeable"
+#~ msgstr "git submodule--helper config --check-writeable"
+
+#~ msgid "git update-server-info [--force]"
+#~ msgstr "git update-server-info [--force]"
+
+#~ msgid "Initialize and modify the sparse-checkout"
+#~ msgstr "Khởi tạo và sửa đổi sparse-checkout"
+
+#, sh-format
+#~ msgid ""
+#~ "Unable to find current ${remote_name}/${branch} revision in submodule "
+#~ "path '$sm_path'"
+#~ msgstr ""
+#~ "Không thể tìm thấy điểm xét duyệt hiện hành ${remote_name}/${branch} "
+#~ "trong đường dẫn mô-đun-con “$sm_path”"
+
+#, sh-format
+#~ msgid "Failed to recurse into submodule path '$displaypath'"
+#~ msgstr "Gặp lỗi khi đệ quy vào trong đường dẫn mô-đun-con “$displaypath”"
index 484f2d8aafb8dd5ab3ccfe535be5931ccb9f07a6..f0551f2c68c946f8f470d842172a3dadc35399bb 100644 (file)
@@ -144,224 +144,223 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2022-01-17 08:34+0800\n"
-"PO-Revision-Date: 2022-01-11 18:18+0000\n"
+"POT-Creation-Date: 2022-04-13 14:52+0800\n"
+"PO-Revision-Date: 2022-04-14 15:39+0100\n"
 "Last-Translator: Fangyi Zhou <me@fangyi.io>\n"
-"Language-Team: GitHub <https://github.com/jiangxin/git/>\n"
+"Language-Team: GitHub <https://github.com/fangyi-zhou/git-po/>\n"
 "Language: zh_CN\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Gtranslator 41.0\n"
+"X-Generator: Gtranslator 40.0\n"
 
-#: add-interactive.c:380
+#: add-interactive.c:382
 #, c-format
 msgid "Huh (%s)?"
 msgstr "嗯(%s)?"
 
-#: add-interactive.c:533 add-interactive.c:834 reset.c:65 sequencer.c:3509
-#: sequencer.c:3974 sequencer.c:4136 builtin/rebase.c:1233
-#: builtin/rebase.c:1642
+#: add-interactive.c:535 add-interactive.c:836 reset.c:136 sequencer.c:3505
+#: sequencer.c:3970 sequencer.c:4127 builtin/rebase.c:1261
+#: builtin/rebase.c:1671
 msgid "could not read index"
 msgstr "不能读取索引"
 
-#: add-interactive.c:588 git-add--interactive.perl:269
+#: add-interactive.c:590 git-add--interactive.perl:269
 #: git-add--interactive.perl:294
 msgid "binary"
 msgstr "二进制"
 
-#: add-interactive.c:646 git-add--interactive.perl:278
+#: add-interactive.c:648 git-add--interactive.perl:278
 #: git-add--interactive.perl:332
 msgid "nothing"
 msgstr "无"
 
-#: add-interactive.c:647 git-add--interactive.perl:314
+#: add-interactive.c:649 git-add--interactive.perl:314
 #: git-add--interactive.perl:329
 msgid "unchanged"
 msgstr "没有修改"
 
-#: add-interactive.c:684 git-add--interactive.perl:641
+#: add-interactive.c:686 git-add--interactive.perl:641
 msgid "Update"
 msgstr "更新"
 
-#: add-interactive.c:701 add-interactive.c:889
+#: add-interactive.c:703 add-interactive.c:891
 #, c-format
 msgid "could not stage '%s'"
 msgstr "不能暂存 '%s'"
 
-#: add-interactive.c:707 add-interactive.c:896 reset.c:89 sequencer.c:3713
+#: add-interactive.c:709 add-interactive.c:898 reset.c:160 sequencer.c:3709
 msgid "could not write index"
 msgstr "不能写入索引"
 
-#: add-interactive.c:710 git-add--interactive.perl:626
+#: add-interactive.c:712 git-add--interactive.perl:626
 #, c-format, perl-format
 msgid "updated %d path\n"
 msgid_plural "updated %d paths\n"
 msgstr[0] "更新了 %d 个路径\n"
 msgstr[1] "更新了 %d 个路径\n"
 
-#: add-interactive.c:728 git-add--interactive.perl:676
+#: add-interactive.c:730 git-add--interactive.perl:676
 #, c-format, perl-format
 msgid "note: %s is untracked now.\n"
 msgstr "说明:%s 现已成为未跟踪的。\n"
 
-#: add-interactive.c:733 apply.c:4151 builtin/checkout.c:306
+#: add-interactive.c:735 apply.c:4133 builtin/checkout.c:311
 #: builtin/reset.c:167
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "对路径 '%s' 的 make_cache_entry 操作失败"
 
-#: add-interactive.c:763 git-add--interactive.perl:653
+#: add-interactive.c:765 git-add--interactive.perl:653
 msgid "Revert"
 msgstr "还原"
 
-#: add-interactive.c:779
+#: add-interactive.c:781
 msgid "Could not parse HEAD^{tree}"
 msgstr "不能解析 HEAD^{tree}"
 
-#: add-interactive.c:817 git-add--interactive.perl:629
+#: add-interactive.c:819 git-add--interactive.perl:629
 #, c-format, perl-format
 msgid "reverted %d path\n"
 msgid_plural "reverted %d paths\n"
 msgstr[0] "还原了 %d 个路径\n"
 msgstr[1] "还原了 %d 个路径\n"
 
-#: add-interactive.c:868 git-add--interactive.perl:693
+#: add-interactive.c:870 git-add--interactive.perl:693
 #, c-format
 msgid "No untracked files.\n"
 msgstr "没有未跟踪的文件。\n"
 
-#: add-interactive.c:872 git-add--interactive.perl:687
+#: add-interactive.c:874 git-add--interactive.perl:687
 msgid "Add untracked"
 msgstr "添加未跟踪的"
 
-#: add-interactive.c:899 git-add--interactive.perl:623
+#: add-interactive.c:901 git-add--interactive.perl:623
 #, c-format, perl-format
 msgid "added %d path\n"
 msgid_plural "added %d paths\n"
 msgstr[0] "增加了 %d 个路径\n"
 msgstr[1] "增加了 %d 个路径\n"
 
-#: add-interactive.c:929
+#: add-interactive.c:931
 #, c-format
 msgid "ignoring unmerged: %s"
 msgstr "忽略未合入的:%s"
 
-#: add-interactive.c:941 add-patch.c:1752 git-add--interactive.perl:1371
+#: add-interactive.c:943 add-patch.c:1758 git-add--interactive.perl:1371
 #, c-format
 msgid "Only binary files changed.\n"
 msgstr "只有二进制文件被修改。\n"
 
-#: add-interactive.c:943 add-patch.c:1750 git-add--interactive.perl:1373
+#: add-interactive.c:945 add-patch.c:1756 git-add--interactive.perl:1373
 #, c-format
 msgid "No changes.\n"
 msgstr "没有修改。\n"
 
-#: add-interactive.c:947 git-add--interactive.perl:1381
+#: add-interactive.c:949 git-add--interactive.perl:1381
 msgid "Patch update"
 msgstr "补丁更新"
 
-#: add-interactive.c:986 git-add--interactive.perl:1794
+#: add-interactive.c:988 git-add--interactive.perl:1794
 msgid "Review diff"
 msgstr "检视 diff"
 
-#: add-interactive.c:1014
+#: add-interactive.c:1016
 msgid "show paths with changes"
 msgstr "显示含变更的路径"
 
-#: add-interactive.c:1016
+#: add-interactive.c:1018
 msgid "add working tree state to the staged set of changes"
 msgstr "将工作区状态添加到暂存区修改集中"
 
-#: add-interactive.c:1018
+#: add-interactive.c:1020
 msgid "revert staged set of changes back to the HEAD version"
 msgstr "将暂存的修改集恢复为 HEAD 版本"
 
-#: add-interactive.c:1020
+#: add-interactive.c:1022
 msgid "pick hunks and update selectively"
 msgstr "挑选数据块并有选择地更新"
 
-#: add-interactive.c:1022
+#: add-interactive.c:1024
 msgid "view diff between HEAD and index"
 msgstr "显示 HEAD 和索引的差异"
 
-#: add-interactive.c:1024
+#: add-interactive.c:1026
 msgid "add contents of untracked files to the staged set of changes"
 msgstr "将未跟踪文件的内容添加到暂存区修改集中"
 
-#: add-interactive.c:1032 add-interactive.c:1081
+#: add-interactive.c:1034 add-interactive.c:1083
 msgid "Prompt help:"
 msgstr "帮助:"
 
-#: add-interactive.c:1034
+#: add-interactive.c:1036
 msgid "select a single item"
 msgstr "选择一个条目"
 
-#: add-interactive.c:1036
+#: add-interactive.c:1038
 msgid "select a range of items"
 msgstr "选择一系列条目"
 
-#: add-interactive.c:1038
+#: add-interactive.c:1040
 msgid "select multiple ranges"
 msgstr "选择多个范围"
 
-#: add-interactive.c:1040 add-interactive.c:1085
+#: add-interactive.c:1042 add-interactive.c:1087
 msgid "select item based on unique prefix"
 msgstr "基于唯一前缀选择条目"
 
-#: add-interactive.c:1042
+#: add-interactive.c:1044
 msgid "unselect specified items"
 msgstr "反选指定的条目"
 
-#: add-interactive.c:1044
+#: add-interactive.c:1046
 msgid "choose all items"
 msgstr "选择所有条目"
 
-#: add-interactive.c:1046
+#: add-interactive.c:1048
 msgid "(empty) finish selecting"
 msgstr "(空)结束选择"
 
-#: add-interactive.c:1083
+#: add-interactive.c:1085
 msgid "select a numbered item"
 msgstr "选择一个编号条目"
 
-#: add-interactive.c:1087
+#: add-interactive.c:1089
 msgid "(empty) select nothing"
 msgstr "(空)不选择任何内容"
 
-#: add-interactive.c:1095 builtin/clean.c:839 git-add--interactive.perl:1898
+#: add-interactive.c:1097 builtin/clean.c:839 git-add--interactive.perl:1898
 msgid "*** Commands ***"
 msgstr "*** 命令 ***"
 
-#: add-interactive.c:1096 builtin/clean.c:840 git-add--interactive.perl:1895
+#: add-interactive.c:1098 builtin/clean.c:840 git-add--interactive.perl:1895
 msgid "What now"
 msgstr "请选择"
 
-#: add-interactive.c:1148 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "staged"
 msgstr "缓存"
 
-#: add-interactive.c:1148 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "unstaged"
 msgstr "未缓存"
 
-#: add-interactive.c:1148 apply.c:5020 apply.c:5023 builtin/am.c:2367
-#: builtin/am.c:2370 builtin/bugreport.c:107 builtin/clone.c:128
-#: builtin/fetch.c:153 builtin/merge.c:287 builtin/pull.c:194
-#: builtin/submodule--helper.c:404 builtin/submodule--helper.c:1858
-#: builtin/submodule--helper.c:1861 builtin/submodule--helper.c:2504
-#: builtin/submodule--helper.c:2507 builtin/submodule--helper.c:2574
-#: builtin/submodule--helper.c:2579 builtin/submodule--helper.c:2812
+#: add-interactive.c:1150 apply.c:5002 apply.c:5005 builtin/am.c:2370
+#: builtin/am.c:2373 builtin/bugreport.c:107 builtin/clone.c:132
+#: builtin/fetch.c:154 builtin/merge.c:287 builtin/pull.c:194
+#: builtin/submodule--helper.c:412 builtin/submodule--helper.c:1872
+#: builtin/submodule--helper.c:1875 builtin/submodule--helper.c:2709
+#: builtin/submodule--helper.c:2712 builtin/submodule--helper.c:2891
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "路径"
 
-#: add-interactive.c:1155
+#: add-interactive.c:1157
 msgid "could not refresh index"
 msgstr "不能刷新索引"
 
-#: add-interactive.c:1169 builtin/clean.c:804 git-add--interactive.perl:1805
+#: add-interactive.c:1171 builtin/clean.c:804 git-add--interactive.perl:1805
 #, c-format
 msgid "Bye.\n"
 msgstr "再见。\n"
@@ -662,30 +661,30 @@ msgstr "无法解析数据块头信息 '%.*s'"
 msgid "could not parse colored hunk header '%.*s'"
 msgstr "无法解析彩色数据块头信息 '%.*s'"
 
-#: add-patch.c:420
+#: add-patch.c:431
 msgid "could not parse diff"
 msgstr "不能解析差异信息"
 
-#: add-patch.c:439
+#: add-patch.c:450
 msgid "could not parse colored diff"
 msgstr "不能解析彩色差异信息"
 
-#: add-patch.c:453
+#: add-patch.c:464
 #, c-format
 msgid "failed to run '%s'"
 msgstr "无法运行 '%s'"
 
-#: add-patch.c:612
+#: add-patch.c:618
 msgid "mismatched output from interactive.diffFilter"
 msgstr "interactive.diffFilter 的输出不匹配"
 
-#: add-patch.c:613
+#: add-patch.c:619
 msgid ""
 "Your filter must maintain a one-to-one correspondence\n"
 "between its input and output lines."
 msgstr "您的过滤器必须在其输入和输出的行之间保持一一对应的关系。"
 
-#: add-patch.c:791
+#: add-patch.c:797
 #, c-format
 msgid ""
 "expected context line #%d in\n"
@@ -694,7 +693,7 @@ msgstr ""
 "预期上下文行 #%d 于\n"
 "%.*s"
 
-#: add-patch.c:806
+#: add-patch.c:812
 #, c-format
 msgid ""
 "hunks do not overlap:\n"
@@ -707,11 +706,11 @@ msgstr ""
 "\t不是结尾于:\n"
 "%.*s"
 
-#: add-patch.c:1082 git-add--interactive.perl:1115
+#: add-patch.c:1088 git-add--interactive.perl:1115
 msgid "Manual hunk edit mode -- see bottom for a quick guide.\n"
 msgstr "手动块编辑模式 -- 查看底部的快速指南。\n"
 
-#: add-patch.c:1086
+#: add-patch.c:1092
 #, c-format
 msgid ""
 "---\n"
@@ -725,7 +724,7 @@ msgstr ""
 "以 %c 开始的行将被删除。\n"
 
 #. TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
-#: add-patch.c:1100 git-add--interactive.perl:1129
+#: add-patch.c:1106 git-add--interactive.perl:1129
 msgid ""
 "If it does not apply cleanly, you will be given an opportunity to\n"
 "edit again.  If all lines of the hunk are removed, then the edit is\n"
@@ -734,11 +733,11 @@ msgstr ""
 "如果不能干净地应用,您将有机会重新编辑。如果该块的全部内容删除,则\n"
 "此次编辑被终止,该块不会被修改。\n"
 
-#: add-patch.c:1133
+#: add-patch.c:1139
 msgid "could not parse hunk header"
 msgstr "无法解析数据块头信息"
 
-#: add-patch.c:1178
+#: add-patch.c:1184
 msgid "'git apply --cached' failed"
 msgstr "'git apply --cached' 失败"
 
@@ -754,24 +753,24 @@ msgstr "'git apply --cached' 失败"
 #. Consider translating (saying "no" discards!) as
 #. (saying "n" for "no" discards!) if the translation
 #. of the word "no" does not start with n.
-#: add-patch.c:1247 git-add--interactive.perl:1244
+#: add-patch.c:1253 git-add--interactive.perl:1244
 msgid ""
 "Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? "
 msgstr "您的编辑块不能被应用。重新编辑(选择 \"no\" 丢弃!) [y/n]? "
 
-#: add-patch.c:1290
+#: add-patch.c:1296
 msgid "The selected hunks do not apply to the index!"
 msgstr "选中的块不能应用到索引!"
 
-#: add-patch.c:1291 git-add--interactive.perl:1348
+#: add-patch.c:1297 git-add--interactive.perl:1348
 msgid "Apply them to the worktree anyway? "
 msgstr "无论如何都要应用到工作区么?"
 
-#: add-patch.c:1298 git-add--interactive.perl:1351
+#: add-patch.c:1304 git-add--interactive.perl:1351
 msgid "Nothing was applied.\n"
 msgstr "未应用。\n"
 
-#: add-patch.c:1355
+#: add-patch.c:1361
 msgid ""
 "j - leave this hunk undecided, see next undecided hunk\n"
 "J - leave this hunk undecided, see next hunk\n"
@@ -793,73 +792,73 @@ msgstr ""
 "e - 手动编辑当前块\n"
 "? - 显示帮助\n"
 
-#: add-patch.c:1517 add-patch.c:1527
+#: add-patch.c:1523 add-patch.c:1533
 msgid "No previous hunk"
 msgstr "没有前一个块"
 
-#: add-patch.c:1522 add-patch.c:1532
+#: add-patch.c:1528 add-patch.c:1538
 msgid "No next hunk"
 msgstr "没有下一个块"
 
-#: add-patch.c:1538
+#: add-patch.c:1544
 msgid "No other hunks to goto"
 msgstr "没有其它可供跳转的块"
 
-#: add-patch.c:1549 git-add--interactive.perl:1608
+#: add-patch.c:1555 git-add--interactive.perl:1608
 msgid "go to which hunk (<ret> to see more)? "
 msgstr "跳转到哪个块(<回车> 查看更多)? "
 
-#: add-patch.c:1550 git-add--interactive.perl:1610
+#: add-patch.c:1556 git-add--interactive.perl:1610
 msgid "go to which hunk? "
 msgstr "跳转到哪个块?"
 
-#: add-patch.c:1561
+#: add-patch.c:1567
 #, c-format
 msgid "Invalid number: '%s'"
 msgstr "无效数字:'%s'"
 
-#: add-patch.c:1566
+#: add-patch.c:1572
 #, c-format
 msgid "Sorry, only %d hunk available."
 msgid_plural "Sorry, only %d hunks available."
 msgstr[0] "对不起,只有 %d 个可用块。"
 msgstr[1] "对不起,只有 %d 个可用块。"
 
-#: add-patch.c:1575
+#: add-patch.c:1581
 msgid "No other hunks to search"
 msgstr "没有其它可供查找的块"
 
-#: add-patch.c:1581 git-add--interactive.perl:1663
+#: add-patch.c:1587 git-add--interactive.perl:1663
 msgid "search for regex? "
 msgstr "使用正则表达式搜索?"
 
-#: add-patch.c:1596
+#: add-patch.c:1602
 #, c-format
 msgid "Malformed search regexp %s: %s"
 msgstr "错误的正则表达式 %s:%s"
 
-#: add-patch.c:1613
+#: add-patch.c:1619
 msgid "No hunk matches the given pattern"
 msgstr "没有和给定模式相匹配的块"
 
-#: add-patch.c:1620
+#: add-patch.c:1626
 msgid "Sorry, cannot split this hunk"
 msgstr "对不起,不能拆分这个块"
 
-#: add-patch.c:1624
+#: add-patch.c:1630
 #, c-format
 msgid "Split into %d hunks."
 msgstr "拆分为 %d 块。"
 
-#: add-patch.c:1628
+#: add-patch.c:1634
 msgid "Sorry, cannot edit this hunk"
 msgstr "对不起,不能编辑这个块"
 
-#: add-patch.c:1680
+#: add-patch.c:1686
 msgid "'git apply' failed"
 msgstr "'git apply' 失败"
 
-#: advice.c:78
+#: advice.c:81
 #, c-format
 msgid ""
 "\n"
@@ -868,37 +867,37 @@ msgstr ""
 "\n"
 "使用 \"git config advice.%s false\" 来关闭此消息"
 
-#: advice.c:94
+#: advice.c:97
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%s提示:%.*s%s\n"
 
-#: advice.c:178
+#: advice.c:181
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr "无法拣选,因为您有未合并的文件。"
 
-#: advice.c:180
+#: advice.c:183
 msgid "Committing is not possible because you have unmerged files."
 msgstr "无法提交,因为您有未合并的文件。"
 
-#: advice.c:182
+#: advice.c:185
 msgid "Merging is not possible because you have unmerged files."
 msgstr "无法合并,因为您有未合并的文件。"
 
-#: advice.c:184
+#: advice.c:187
 msgid "Pulling is not possible because you have unmerged files."
 msgstr "无法拉取,因为您有未合并的文件。"
 
-#: advice.c:186
+#: advice.c:189
 msgid "Reverting is not possible because you have unmerged files."
 msgstr "无法回退,因为您有未合并的文件。"
 
-#: advice.c:188
+#: advice.c:191
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr "无法 %s,因为您有未合并的文件。"
 
-#: advice.c:196
+#: advice.c:199
 msgid ""
 "Fix them up in the work tree, and then use 'git add/rm <file>'\n"
 "as appropriate to mark resolution and make a commit."
@@ -906,27 +905,27 @@ msgstr ""
 "请在工作区改正文件,然后酌情使用 'git add/rm <文件>' 命令标记\n"
 "解决方案并提交。"
 
-#: advice.c:204
+#: advice.c:207
 msgid "Exiting because of an unresolved conflict."
 msgstr "因为存在未解决的冲突而退出。"
 
-#: advice.c:209 builtin/merge.c:1382
+#: advice.c:212 builtin/merge.c:1388
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "您尚未结束您的合并(存在 MERGE_HEAD)。"
 
-#: advice.c:211
+#: advice.c:214
 msgid "Please, commit your changes before merging."
 msgstr "请在合并前先提交您的修改。"
 
-#: advice.c:212
+#: advice.c:215
 msgid "Exiting because of unfinished merge."
 msgstr "因为存在未完成的合并而退出。"
 
-#: advice.c:217
+#: advice.c:220
 msgid "Not possible to fast-forward, aborting."
 msgstr "无法快进,终止。"
 
-#: advice.c:227
+#: advice.c:230
 #, c-format
 msgid ""
 "The following paths and/or pathspecs matched paths that exist\n"
@@ -936,7 +935,7 @@ msgstr ""
 "下面的路径和/或者路径规格匹配了您定义的稀疏检出以外的路径,\n"
 "所以不会在索引中更新:\n"
 
-#: advice.c:234
+#: advice.c:237
 msgid ""
 "If you intend to update such entries, try one of the following:\n"
 "* Use the --sparse option.\n"
@@ -946,7 +945,7 @@ msgstr ""
 "* 使用 --sparse 选项。\n"
 "* 禁用或者修改稀疏规则。"
 
-#: advice.c:242
+#: advice.c:245
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -1003,80 +1002,83 @@ msgstr "未能识别的空白字符选项 '%s'"
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "未能识别的空白字符忽略选项 '%s'"
 
-#: apply.c:136 archive.c:584 range-diff.c:559 revision.c:2303 revision.c:2307
-#: revision.c:2316 revision.c:2321 revision.c:2527 revision.c:2870
-#: revision.c:2874 revision.c:2880 revision.c:2883 revision.c:2885
-#: builtin/add.c:510 builtin/add.c:512 builtin/add.c:529 builtin/add.c:541
-#: builtin/branch.c:727 builtin/checkout.c:467 builtin/checkout.c:470
-#: builtin/checkout.c:1644 builtin/checkout.c:1754 builtin/checkout.c:1757
-#: builtin/clone.c:906 builtin/commit.c:358 builtin/commit.c:361
-#: builtin/commit.c:1196 builtin/describe.c:593 builtin/diff-tree.c:155
-#: builtin/difftool.c:733 builtin/fast-export.c:1245 builtin/fetch.c:2038
-#: builtin/fetch.c:2043 builtin/index-pack.c:1852 builtin/init-db.c:560
-#: builtin/log.c:1946 builtin/log.c:1948 builtin/ls-files.c:778
-#: builtin/merge.c:1403 builtin/merge.c:1405 builtin/pack-objects.c:4073
-#: builtin/push.c:592 builtin/push.c:630 builtin/push.c:636 builtin/push.c:641
-#: builtin/rebase.c:1193 builtin/rebase.c:1195 builtin/rebase.c:1199
-#: builtin/repack.c:684 builtin/repack.c:715 builtin/reset.c:426
-#: builtin/reset.c:462 builtin/rev-list.c:541 builtin/show-branch.c:710
-#: builtin/stash.c:1707 builtin/stash.c:1710 builtin/submodule--helper.c:1316
-#: builtin/submodule--helper.c:2975 builtin/tag.c:526 builtin/tag.c:572
-#: builtin/worktree.c:702
+#: apply.c:138 archive.c:584 parse-options.c:1122 range-diff.c:555
+#: revision.c:2314 revision.c:2318 revision.c:2327 revision.c:2332
+#: revision.c:2560 revision.c:2895 revision.c:2899 revision.c:2907
+#: revision.c:2910 revision.c:2912 builtin/add.c:507 builtin/add.c:509
+#: builtin/add.c:515 builtin/add.c:527 builtin/branch.c:755
+#: builtin/checkout.c:472 builtin/checkout.c:475 builtin/checkout.c:1663
+#: builtin/checkout.c:1773 builtin/checkout.c:1776 builtin/clone.c:921
+#: builtin/commit.c:359 builtin/commit.c:362 builtin/commit.c:1200
+#: builtin/commit.c:1256 builtin/commit.c:1273 builtin/describe.c:593
+#: builtin/diff-tree.c:155 builtin/difftool.c:733 builtin/fast-export.c:1245
+#: builtin/fetch.c:2141 builtin/fetch.c:2162 builtin/fetch.c:2167
+#: builtin/help.c:602 builtin/index-pack.c:1858 builtin/init-db.c:560
+#: builtin/log.c:1968 builtin/log.c:1970 builtin/ls-files.c:778
+#: builtin/merge-base.c:163 builtin/merge-base.c:169 builtin/merge.c:1409
+#: builtin/merge.c:1411 builtin/pack-objects.c:4098 builtin/push.c:592
+#: builtin/push.c:630 builtin/push.c:636 builtin/push.c:641
+#: builtin/rebase.c:1221 builtin/rebase.c:1223 builtin/rebase.c:1227
+#: builtin/repack.c:688 builtin/repack.c:719 builtin/reset.c:433
+#: builtin/reset.c:469 builtin/rev-list.c:537 builtin/show-branch.c:711
+#: builtin/stash.c:1696 builtin/stash.c:1699 builtin/submodule--helper.c:1328
+#: builtin/submodule--helper.c:3054 builtin/tag.c:527 builtin/tag.c:573
+#: builtin/worktree.c:779
 #, c-format
 msgid "options '%s' and '%s' cannot be used together"
 msgstr "选项 '%s' 和 '%s' 不能同时使用"
 
-#: apply.c:139 apply.c:150 apply.c:153
+#: apply.c:141 apply.c:152 apply.c:155
 #, c-format
 msgid "'%s' outside a repository"
 msgstr "'%s' 在仓库之外"
 
-#: apply.c:800
+#: apply.c:807
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr "无法准备时间戳正则表达式 %s"
 
-#: apply.c:809
+#: apply.c:816
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr "regexec 返回 %d,输入为:%s"
 
-#: apply.c:883
+#: apply.c:890
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr "不能在补丁的第 %d 行找到文件名"
 
-#: apply.c:921
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr "git apply:错误的 git-diff - 应为 /dev/null,但在第 %2$d 行得到 %1$s"
 
-#: apply.c:927
+#: apply.c:934
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr "git apply:错误的 git-diff - 第 %d 行上新文件名不一致"
 
-#: apply.c:928
+#: apply.c:935
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr "git apply:错误的 git-diff - 第 %d 行上旧文件名不一致"
 
-#: apply.c:933
+#: apply.c:940
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr "git apply:错误的 git-diff - 第 %d 行处应为 /dev/null"
 
-#: apply.c:962
+#: apply.c:969
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "第 %d 行包含无效文件模式:%s"
 
-#: apply.c:1281
+#: apply.c:1288
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr "不一致的文件头,%d 行和 %d 行"
 
-#: apply.c:1371
+#: apply.c:1378
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -1087,92 +1089,92 @@ msgid_plural ""
 msgstr[0] "当移除 %d 个前导路径后 git diff 头缺乏文件名信息(第 %d 行)"
 msgstr[1] "当移除 %d 个前导路径后 git diff 头缺乏文件名信息(第 %d 行)"
 
-#: apply.c:1384
+#: apply.c:1391
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr "git diff 的头信息中缺乏文件名信息(第 %d 行)"
 
-#: apply.c:1480
+#: apply.c:1487
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr "recount:意外的行:%.*s"
 
-#: apply.c:1549
+#: apply.c:1556
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr "第 %d 行的补丁片段没有头信息:%.*s"
 
-#: apply.c:1752
+#: apply.c:1759
 msgid "new file depends on old contents"
 msgstr "新文件依赖旧内容"
 
-#: apply.c:1754
+#: apply.c:1761
 msgid "deleted file still has contents"
 msgstr "删除的文件仍有内容"
 
-#: apply.c:1788
+#: apply.c:1795
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "补丁在第 %d 行损坏"
 
-#: apply.c:1825
+#: apply.c:1832
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "新文件 %s 依赖旧内容"
 
-#: apply.c:1827
+#: apply.c:1834
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "删除的文件 %s 仍有内容"
 
-#: apply.c:1830
+#: apply.c:1837
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** 警告:文件 %s 成为空文件但并未删除"
 
-#: apply.c:1978
+#: apply.c:1985
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "二进制补丁在第 %d 行损坏:%.*s"
 
-#: apply.c:2015
+#: apply.c:2022
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "未能识别的二进制补丁位于第 %d 行"
 
-#: apply.c:2177
+#: apply.c:2184
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "补丁文件的第 %d 行只有垃圾数据"
 
-#: apply.c:2263
+#: apply.c:2270
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "无法读取符号链接 %s"
 
-#: apply.c:2267
+#: apply.c:2274
 #, c-format
 msgid "unable to open or read %s"
 msgstr "不能打开或读取 %s"
 
-#: apply.c:2936
+#: apply.c:2943
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "无效的行首字符:'%c'"
 
-#: apply.c:3057
+#: apply.c:3064
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "块 #%d 成功应用于 %d(偏移 %d 行)"
 msgstr[1] "块 #%d 成功应用于 %d(偏移 %d 行)"
 
-#: apply.c:3069
+#: apply.c:3076
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "上下文减少到(%ld/%ld)以在第 %d 行应用补丁片段"
 
-#: apply.c:3075
+#: apply.c:3082
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1181,446 +1183,446 @@ msgstr ""
 "当查询:\n"
 "%.*s"
 
-#: apply.c:3097
+#: apply.c:3104
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "缺失 '%s' 的二进制补丁数据"
 
-#: apply.c:3105
+#: apply.c:3112
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr "不能反向应用一个缺少到 '%s' 的反向数据块的二进制补丁"
 
-#: apply.c:3152
+#: apply.c:3159
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr "不能在 '%s' 上应用没有完整索引行的二进制补丁"
 
-#: apply.c:3163
+#: apply.c:3170
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr "补丁应用到 '%s'(%s),但是和当前内容不匹配。"
 
-#: apply.c:3171
+#: apply.c:3178
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "补丁应用到空文件 '%s',但其并非空文件"
 
-#: apply.c:3189
+#: apply.c:3196
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "无法读取 '%2$s' 必需的目标文件 %1$s"
 
-#: apply.c:3202
+#: apply.c:3209
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "二进制补丁未应用到 '%s'"
 
-#: apply.c:3209
+#: apply.c:3216
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr "到 '%s' 的二进制补丁产生了不正确的结果(应为 %s,却为 %s)"
 
-#: apply.c:3230
+#: apply.c:3237
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "打补丁失败:%s:%ld"
 
-#: apply.c:3353
+#: apply.c:3360
 #, c-format
 msgid "cannot checkout %s"
 msgstr "不能检出 %s"
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:104 pack-revindex.c:214
-#: setup.c:309
+#: apply.c:3412 apply.c:3423 apply.c:3469 midx.c:105 pack-revindex.c:214
+#: setup.c:310
 #, c-format
 msgid "failed to read %s"
 msgstr "无法读取 %s"
 
-#: apply.c:3413
+#: apply.c:3420
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "读取位于符号链接中的 '%s'"
 
-#: apply.c:3442 apply.c:3711
+#: apply.c:3449 apply.c:3721
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "路径 %s 已经被重命名/删除"
 
-#: apply.c:3549 apply.c:3726
+#: apply.c:3559 apply.c:3736
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s:不存在于索引中"
 
-#: apply.c:3558 apply.c:3734 apply.c:3978
+#: apply.c:3568 apply.c:3744 apply.c:3960
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s:和索引不匹配"
 
-#: apply.c:3595
+#: apply.c:3605
 msgid "repository lacks the necessary blob to perform 3-way merge."
 msgstr "仓库缺乏执行三方合并所必需的数据对象。"
 
-#: apply.c:3598
+#: apply.c:3608
 #, c-format
 msgid "Performing three-way merge...\n"
 msgstr "执行三方合并...\n"
 
-#: apply.c:3614 apply.c:3618
+#: apply.c:3624 apply.c:3628
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "无法读取 '%s' 的当前内容"
 
-#: apply.c:3630
+#: apply.c:3640
 #, c-format
 msgid "Failed to perform three-way merge...\n"
 msgstr "无法执行三方合并...\n"
 
-#: apply.c:3644
+#: apply.c:3654
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "应用补丁到 '%s' 存在冲突。\n"
 
-#: apply.c:3649
+#: apply.c:3659
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "成功应用补丁到 '%s'。\n"
 
-#: apply.c:3666
+#: apply.c:3676
 #, c-format
 msgid "Falling back to direct application...\n"
 msgstr "回落到直接应用...\n"
 
-#: apply.c:3678
+#: apply.c:3688
 msgid "removal patch leaves file contents"
 msgstr "移除补丁仍留下了文件内容"
 
-#: apply.c:3751
+#: apply.c:3761
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s:错误类型"
 
-#: apply.c:3753
+#: apply.c:3763
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s 的类型是 %o,应为 %o"
 
-#: apply.c:3918 apply.c:3920 read-cache.c:889 read-cache.c:918
-#: read-cache.c:1381
+#: apply.c:3900 apply.c:3902 read-cache.c:903 read-cache.c:932
+#: read-cache.c:1399
 #, c-format
 msgid "invalid path '%s'"
 msgstr "无效路径 '%s'"
 
-#: apply.c:3976
+#: apply.c:3958
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s:已经存在于索引中"
 
-#: apply.c:3980
+#: apply.c:3962
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s:已经存在于工作区中"
 
-#: apply.c:4000
+#: apply.c:3982
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "%2$s 的新模式(%1$o)和旧模式(%3$o)不匹配"
 
-#: apply.c:4005
+#: apply.c:3987
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "%2$s 的新模式(%1$o)和 %4$s 的旧模式(%3$o)不匹配"
 
-#: apply.c:4025
+#: apply.c:4007
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "受影响的文件 '%s' 位于符号链接中"
 
-#: apply.c:4029
+#: apply.c:4011
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s:补丁未应用"
 
-#: apply.c:4044
+#: apply.c:4026
 #, c-format
 msgid "Checking patch %s..."
 msgstr "正在检查补丁 %s..."
 
-#: apply.c:4136
+#: apply.c:4118
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "子模组 %s 的 sha1 信息缺失或无效"
 
-#: apply.c:4143
+#: apply.c:4125
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "%s 的模式变更,但它不在当前 HEAD 中"
 
-#: apply.c:4146
+#: apply.c:4128
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "sha1 信息缺失或无效(%s)。"
 
-#: apply.c:4155
+#: apply.c:4137
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "不能在临时索引中添加 %s"
 
-#: apply.c:4165
+#: apply.c:4147
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "不能把临时索引写入到 %s"
 
-#: apply.c:4303
+#: apply.c:4285
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "不能从索引中移除 %s"
 
-#: apply.c:4337
+#: apply.c:4319
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "子模组 %s 损坏的补丁"
 
-#: apply.c:4343
+#: apply.c:4325
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "不能对新建文件 '%s' 调用 stat"
 
-#: apply.c:4351
+#: apply.c:4333
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr "不能为新建文件 %s 创建后端存储"
 
-#: apply.c:4357 apply.c:4502
+#: apply.c:4339 apply.c:4484
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "无法为 %s 添加缓存条目"
 
-#: apply.c:4400 builtin/bisect--helper.c:540 builtin/gc.c:2258
+#: apply.c:4382 builtin/bisect--helper.c:540 builtin/gc.c:2258
 #: builtin/gc.c:2293
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "无法写入 '%s'"
 
-#: apply.c:4404
+#: apply.c:4386
 #, c-format
 msgid "closing file '%s'"
 msgstr "关闭文件 '%s'"
 
-#: apply.c:4474
+#: apply.c:4456
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "不能写文件 '%s' 权限 %o"
 
-#: apply.c:4572
+#: apply.c:4554
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "成功应用补丁 %s。"
 
-#: apply.c:4580
+#: apply.c:4562
 msgid "internal error"
 msgstr "内部错误"
 
-#: apply.c:4583
+#: apply.c:4565
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "应用 %%s 个补丁,其中 %d 个被拒绝..."
 msgstr[1] "应用 %%s 个补丁,其中 %d 个被拒绝..."
 
-#: apply.c:4594
+#: apply.c:4576
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "截短 .rej 文件名为 %.*s.rej"
 
-#: apply.c:4602
+#: apply.c:4584
 #, c-format
 msgid "cannot open %s"
 msgstr "不能打开 %s"
 
-#: apply.c:4616
+#: apply.c:4598
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "第 #%d 个片段成功应用。"
 
-#: apply.c:4620
+#: apply.c:4602
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "拒绝第 #%d 个片段。"
 
-#: apply.c:4749
+#: apply.c:4731
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "略过补丁 '%s'。"
 
-#: apply.c:4758
+#: apply.c:4740
 msgid "No valid patches in input (allow with \"--allow-empty\")"
 msgstr "输入中没有合法的补丁 (使用 \"--allow-empty\" 来允许)"
 
-#: apply.c:4779
+#: apply.c:4761
 msgid "unable to read index file"
 msgstr "无法读取索引文件"
 
-#: apply.c:4936
+#: apply.c:4918
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "不能打开补丁 '%s':%s"
 
-#: apply.c:4963
+#: apply.c:4945
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "抑制下仍有 %d 个空白字符误用"
 msgstr[1] "抑制下仍有 %d 个空白字符误用"
 
-#: apply.c:4969 apply.c:4984
+#: apply.c:4951 apply.c:4966
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d 行新增了空白字符误用。"
 msgstr[1] "%d 行新增了空白字符误用。"
 
-#: apply.c:4977
+#: apply.c:4959
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] "修复空白错误后,应用了 %d 行。"
 msgstr[1] "修复空白错误后,应用了 %d 行。"
 
-#: apply.c:4993 builtin/add.c:704 builtin/mv.c:338 builtin/rm.c:430
+#: apply.c:4975 builtin/add.c:690 builtin/mv.c:338 builtin/rm.c:430
 msgid "Unable to write new index file"
 msgstr "无法写入新索引文件"
 
-#: apply.c:5021
+#: apply.c:5003
 msgid "don't apply changes matching the given path"
 msgstr "不要应用与给出路径向匹配的变更"
 
-#: apply.c:5024
+#: apply.c:5006
 msgid "apply changes matching the given path"
 msgstr "应用与给出路径向匹配的变更"
 
-#: apply.c:5026 builtin/am.c:2376
+#: apply.c:5008 builtin/am.c:2379
 msgid "num"
 msgstr "数字"
 
-#: apply.c:5027
+#: apply.c:5009
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "从传统的 diff 路径中移除指定数量的前导斜线"
 
-#: apply.c:5030
+#: apply.c:5012
 msgid "ignore additions made by the patch"
 msgstr "忽略补丁中的添加的文件"
 
-#: apply.c:5032
+#: apply.c:5014
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "不应用补丁,而是显示输入的差异统计(diffstat)"
 
-#: apply.c:5036
+#: apply.c:5018
 msgid "show number of added and deleted lines in decimal notation"
 msgstr "以十进制数显示添加和删除的行数"
 
-#: apply.c:5038
+#: apply.c:5020
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "不应用补丁,而是显示输入的概要"
 
-#: apply.c:5040
+#: apply.c:5022
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "不应用补丁,而是查看补丁是否可应用"
 
-#: apply.c:5042
+#: apply.c:5024
 msgid "make sure the patch is applicable to the current index"
 msgstr "确认补丁可以应用到当前索引"
 
-#: apply.c:5044
+#: apply.c:5026
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "使用命令 `git add --intent-to-add` 标记新增文件"
 
-#: apply.c:5046
+#: apply.c:5028
 msgid "apply a patch without touching the working tree"
 msgstr "应用补丁而不修改工作区"
 
-#: apply.c:5048
+#: apply.c:5030
 msgid "accept a patch that touches outside the working area"
 msgstr "接受修改工作区之外文件的补丁"
 
-#: apply.c:5051
+#: apply.c:5033
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "还应用此补丁(与 --stat/--summary/--check 选项同时使用)"
 
-#: apply.c:5053
+#: apply.c:5035
 msgid "attempt three-way merge, fall back on normal patch if that fails"
 msgstr "尝试三路合并,如果失败则回落至正常补丁模式"
 
-#: apply.c:5055
+#: apply.c:5037
 msgid "build a temporary index based on embedded index information"
 msgstr "创建一个临时索引基于嵌入的索引信息"
 
-#: apply.c:5058 builtin/checkout-index.c:196
+#: apply.c:5040 builtin/checkout-index.c:230
 msgid "paths are separated with NUL character"
 msgstr "路径以 NUL 字符分隔"
 
-#: apply.c:5060
+#: apply.c:5042
 msgid "ensure at least <n> lines of context match"
 msgstr "确保至少匹配 <n> 行上下文"
 
-#: apply.c:5061 builtin/am.c:2352 builtin/am.c:2355
+#: apply.c:5043 builtin/am.c:2355 builtin/am.c:2358
 #: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
-#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3960
-#: builtin/rebase.c:1051
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3983
+#: builtin/rebase.c:1079
 msgid "action"
 msgstr "动作"
 
-#: apply.c:5062
+#: apply.c:5044
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "检查新增和修改的行中间的空白字符滥用"
 
-#: apply.c:5065 apply.c:5068
+#: apply.c:5047 apply.c:5050
 msgid "ignore changes in whitespace when finding context"
 msgstr "查找上下文时忽略空白字符的变更"
 
-#: apply.c:5071
+#: apply.c:5053
 msgid "apply the patch in reverse"
 msgstr "反向应用补丁"
 
-#: apply.c:5073
+#: apply.c:5055
 msgid "don't expect at least one line of context"
 msgstr "无需至少一行上下文"
 
-#: apply.c:5075
+#: apply.c:5057
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "将拒绝的补丁片段保存在对应的 *.rej 文件中"
 
-#: apply.c:5077
+#: apply.c:5059
 msgid "allow overlapping hunks"
 msgstr "允许重叠的补丁片段"
 
-#: apply.c:5080
+#: apply.c:5062
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "允许不正确的文件末尾换行符"
 
-#: apply.c:5083
+#: apply.c:5065
 msgid "do not trust the line counts in the hunk headers"
 msgstr "不信任补丁片段的头信息中的行号"
 
-#: apply.c:5085 builtin/am.c:2364
+#: apply.c:5067 builtin/am.c:2367
 msgid "root"
 msgstr "根目录"
 
-#: apply.c:5086
+#: apply.c:5068
 msgid "prepend <root> to all filenames"
 msgstr "为所有文件名前添加 <根目录>"
 
-#: apply.c:5089
+#: apply.c:5071
 msgid "don't return error for empty patches"
 msgstr "对空的补丁不返回错误"
 
-#: archive-tar.c:125 archive-zip.c:345
+#: archive-tar.c:125 archive-zip.c:346
 #, c-format
 msgid "cannot stream blob %s"
 msgstr "不能打开数据对象 %s"
 
-#: archive-tar.c:265 archive-zip.c:358
+#: archive-tar.c:265 archive-zip.c:359
 #, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
 msgstr "不支持的文件模式:0%o (SHA1: %s)"
@@ -1639,22 +1641,22 @@ msgstr "无法重定向描述符"
 msgid "'%s' filter reported error"
 msgstr "'%s' 过滤器报告了错误"
 
-#: archive-zip.c:318
+#: archive-zip.c:319
 #, c-format
 msgid "path is not valid UTF-8: %s"
 msgstr "路径不是有效的 UTF-8:%s"
 
-#: archive-zip.c:322
+#: archive-zip.c:323
 #, c-format
 msgid "path too long (%d chars, SHA1: %s): %s"
 msgstr "路径太长(%d 字符,SHA1:%s):%s"
 
-#: archive-zip.c:469 builtin/pack-objects.c:365 builtin/pack-objects.c:368
+#: archive-zip.c:470 builtin/pack-objects.c:363 builtin/pack-objects.c:366
 #, c-format
 msgid "deflate error (%d)"
 msgstr "压缩错误 (%d)"
 
-#: archive-zip.c:603
+#: archive-zip.c:604
 #, c-format
 msgid "timestamp too large for this system: %<PRIuMAX>"
 msgstr "对于本系统时间戳太大:%<PRIuMAX>"
@@ -1663,10 +1665,6 @@ msgstr "对于本系统时间戳太大:%<PRIuMAX>"
 msgid "git archive [<options>] <tree-ish> [<path>...]"
 msgstr "git archive [<选项>] <树对象> [<路径>...]"
 
-#: archive.c:15
-msgid "git archive --list"
-msgstr "git archive --list"
-
 #: archive.c:16
 msgid ""
 "git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"
@@ -1678,12 +1676,12 @@ msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote <仓库> [--exec <命令>] --list"
 
 #: archive.c:188 archive.c:341 builtin/gc.c:497 builtin/notes.c:238
-#: builtin/tag.c:578
+#: builtin/tag.c:579
 #, c-format
 msgid "cannot read '%s'"
 msgstr "不能读取 '%s'"
 
-#: archive.c:426 builtin/add.c:215 builtin/add.c:671 builtin/rm.c:334
+#: archive.c:426 builtin/add.c:214 builtin/add.c:657 builtin/rm.c:334
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "路径规格 '%s' 未匹配任何文件"
@@ -1725,7 +1723,7 @@ msgstr "格式"
 msgid "archive format"
 msgstr "归档格式"
 
-#: archive.c:552 builtin/log.c:1790
+#: archive.c:552 builtin/log.c:1809
 msgid "prefix"
 msgstr "前缀"
 
@@ -1733,12 +1731,12 @@ msgstr "前缀"
 msgid "prepend prefix to each pathname in the archive"
 msgstr "为归档中每个路径名加上前缀"
 
-#: archive.c:554 archive.c:557 builtin/blame.c:880 builtin/blame.c:884
-#: builtin/blame.c:885 builtin/commit-tree.c:115 builtin/config.c:135
+#: archive.c:554 archive.c:557 builtin/blame.c:881 builtin/blame.c:885
+#: builtin/blame.c:886 builtin/commit-tree.c:115 builtin/config.c:135
 #: builtin/fast-export.c:1181 builtin/fast-export.c:1183
-#: builtin/fast-export.c:1187 builtin/grep.c:935 builtin/hash-object.c:103
+#: builtin/fast-export.c:1187 builtin/grep.c:936 builtin/hash-object.c:104
 #: builtin/ls-files.c:654 builtin/ls-files.c:657 builtin/notes.c:410
-#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:190
+#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:195
 msgid "file"
 msgstr "文件"
 
@@ -1766,8 +1764,8 @@ msgstr "设置压缩级别"
 msgid "list supported archive formats"
 msgstr "列出支持的归档格式"
 
-#: archive.c:568 builtin/archive.c:89 builtin/clone.c:118 builtin/clone.c:121
-#: builtin/submodule--helper.c:1870 builtin/submodule--helper.c:2513
+#: archive.c:568 builtin/archive.c:89 builtin/clone.c:122 builtin/clone.c:125
+#: builtin/submodule--helper.c:1884 builtin/submodule--helper.c:2718
 msgid "repo"
 msgstr "仓库"
 
@@ -1788,11 +1786,12 @@ msgstr "远程 git-upload-archive 命令的路径"
 msgid "Unexpected option --remote"
 msgstr "未知参数 --remote"
 
-#: archive.c:580 fetch-pack.c:300 revision.c:2887 builtin/add.c:544
-#: builtin/add.c:576 builtin/checkout.c:1763 builtin/commit.c:370
-#: builtin/fast-export.c:1230 builtin/index-pack.c:1848 builtin/log.c:2115
-#: builtin/reset.c:435 builtin/reset.c:493 builtin/rm.c:281
-#: builtin/stash.c:1719 builtin/worktree.c:508 http-fetch.c:144
+#: archive.c:580 fetch-pack.c:300 revision.c:2914 builtin/add.c:530
+#: builtin/add.c:562 builtin/checkout.c:1782 builtin/clone.c:1099
+#: builtin/clone.c:1102 builtin/commit.c:371 builtin/fast-export.c:1230
+#: builtin/index-pack.c:1854 builtin/log.c:2140 builtin/reset.c:442
+#: builtin/reset.c:500 builtin/rm.c:281 builtin/stash.c:1708
+#: builtin/worktree.c:580 builtin/worktree.c:781 http-fetch.c:144
 #: http-fetch.c:153
 #, c-format
 msgid "the option '%s' requires '%s'"
@@ -1812,17 +1811,17 @@ msgstr "未知归档格式 '%s'"
 msgid "Argument not supported for format '%s': -%d"
 msgstr "参数不支持此格式 '%s':-%d"
 
-#: attr.c:203
+#: attr.c:202
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s 不是一个有效的属性名"
 
-#: attr.c:364
+#: attr.c:363
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "不允许 %s:%s:%d"
 
-#: attr.c:404
+#: attr.c:403
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1840,12 +1839,12 @@ msgstr "文件 '%s' 包含错误的引用格式:%s"
 msgid "We cannot bisect more!\n"
 msgstr "我们无法进行更多的二分查找!\n"
 
-#: bisect.c:764
+#: bisect.c:765
 #, c-format
 msgid "Not a valid commit name %s"
 msgstr "不是一个有效的提交名 %s"
 
-#: bisect.c:789
+#: bisect.c:790
 #, c-format
 msgid ""
 "The merge base %s is bad.\n"
@@ -1854,7 +1853,7 @@ msgstr ""
 "合并基线 %s 是坏的。\n"
 "这意味着介于 %s 和 [%s] 之间的 bug 已经被修复。\n"
 
-#: bisect.c:794
+#: bisect.c:795
 #, c-format
 msgid ""
 "The merge base %s is new.\n"
@@ -1863,7 +1862,7 @@ msgstr ""
 "合并基线 %s 是新的。\n"
 "介于 %s 和 [%s] 之间的属性已经被修改。\n"
 
-#: bisect.c:799
+#: bisect.c:800
 #, c-format
 msgid ""
 "The merge base %s is %s.\n"
@@ -1872,7 +1871,7 @@ msgstr ""
 "合并基线 %s 是 %s。\n"
 "这意味着第一个 '%s' 提交位于 %s 和 [%s] 之间。\n"
 
-#: bisect.c:807
+#: bisect.c:808
 #, c-format
 msgid ""
 "Some %s revs are not ancestors of the %s rev.\n"
@@ -1883,7 +1882,7 @@ msgstr ""
 "这种情况下 git 二分查找无法正常工作。\n"
 "您可能弄错了 %s 和 %s 版本?\n"
 
-#: bisect.c:820
+#: bisect.c:821
 #, c-format
 msgid ""
 "the merge base between %s and [%s] must be skipped.\n"
@@ -1894,36 +1893,36 @@ msgstr ""
 "所以我们无法确认第一个 %s 提交是否介于 %s 和 %s 之间。\n"
 "我们仍旧继续。"
 
-#: bisect.c:859
+#: bisect.c:860
 #, c-format
 msgid "Bisecting: a merge base must be tested\n"
 msgstr "二分查找中:合并基线必须是经过测试的\n"
 
-#: bisect.c:909
+#: bisect.c:910
 #, c-format
 msgid "a %s revision is needed"
 msgstr "需要一个 %s 版本"
 
-#: bisect.c:939
+#: bisect.c:940
 #, c-format
 msgid "could not create file '%s'"
 msgstr "不能创建文件 '%s'"
 
-#: bisect.c:985 builtin/merge.c:155
+#: bisect.c:986 builtin/merge.c:155
 #, c-format
 msgid "could not read file '%s'"
 msgstr "不能读取文件 '%s'"
 
-#: bisect.c:1025
+#: bisect.c:1026
 msgid "reading bisect refs failed"
 msgstr "读取二分查找引用失败"
 
-#: bisect.c:1055
+#: bisect.c:1056
 #, c-format
 msgid "%s was both %s and %s\n"
 msgstr "%s 同时为 %s 和 %s\n"
 
-#: bisect.c:1064
+#: bisect.c:1065
 #, c-format
 msgid ""
 "No testable commit found.\n"
@@ -1932,7 +1931,7 @@ msgstr ""
 "没有发现可测试的提交。\n"
 "可能您在运行时使用了错误的路径参数?\n"
 
-#: bisect.c:1093
+#: bisect.c:1094
 #, c-format
 msgid "(roughly %d step)"
 msgid_plural "(roughly %d steps)"
@@ -1942,80 +1941,80 @@ msgstr[1] "(大概 %d 步)"
 #. TRANSLATORS: the last %s will be replaced with "(roughly %d
 #. steps)" translation.
 #.
-#: bisect.c:1099
+#: bisect.c:1100
 #, c-format
 msgid "Bisecting: %d revision left to test after this %s\n"
 msgid_plural "Bisecting: %d revisions left to test after this %s\n"
 msgstr[0] "二分查找中:在此之后,还剩 %d 个版本待测试 %s\n"
 msgstr[1] "二分查找中:在此之后,还剩 %d 个版本待测试 %s\n"
 
-#: blame.c:2776
+#: blame.c:2773
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents 和 --reverse 不能混用。"
 
-#: blame.c:2790
+#: blame.c:2787
 msgid "cannot use --contents with final commit object name"
 msgstr "不能将 --contents 和最终的提交对象名共用"
 
-#: blame.c:2811
+#: blame.c:2808
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr "--reverse 和 --first-parent 共用,需要指定最新的提交"
 
-#: blame.c:2820 bundle.c:224 midx.c:1042 ref-filter.c:2370 remote.c:2158
-#: sequencer.c:2352 sequencer.c:4899 submodule.c:883 builtin/commit.c:1114
-#: builtin/log.c:429 builtin/log.c:1036 builtin/log.c:1644 builtin/log.c:2071
-#: builtin/log.c:2362 builtin/merge.c:431 builtin/pack-objects.c:3373
-#: builtin/pack-objects.c:3775 builtin/pack-objects.c:3790
+#: blame.c:2817 bundle.c:231 midx.c:1058 ref-filter.c:2371 remote.c:2157
+#: sequencer.c:2348 sequencer.c:4872 submodule.c:913 builtin/commit.c:1118
+#: builtin/log.c:437 builtin/log.c:1055 builtin/log.c:1663 builtin/log.c:2096
+#: builtin/log.c:2387 builtin/merge.c:431 builtin/pack-objects.c:3381
+#: builtin/pack-objects.c:3781 builtin/pack-objects.c:3796
 #: builtin/shortlog.c:255
 msgid "revision walk setup failed"
 msgstr "版本遍历设置失败"
 
-#: blame.c:2838
+#: blame.c:2835
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr "--reverse 和 --first-parent 共用,需要第一祖先链上的提交范围"
 
-#: blame.c:2849
+#: blame.c:2846
 #, c-format
 msgid "no such path %s in %s"
 msgstr "在 %2$s 中无此路径 %1$s"
 
-#: blame.c:2860
+#: blame.c:2857
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "不能为路径 %2$s 读取数据对象 %1$s"
 
-#: branch.c:77
+#: branch.c:93
 msgid ""
 "cannot inherit upstream tracking configuration of multiple refs when "
 "rebasing is requested"
 msgstr "在请求变基时无法继承上游多个引用的跟踪设置"
 
-#: branch.c:88
+#: branch.c:104
 #, c-format
 msgid "not setting branch '%s' as its own upstream"
 msgstr "没有将分支 '%s' 设置为它自己的上游"
 
-#: branch.c:144
+#: branch.c:160
 #, c-format
 msgid "branch '%s' set up to track '%s' by rebasing."
 msgstr "分支 '%s' 设置为使用变基来跟踪 '%s'。"
 
-#: branch.c:145
+#: branch.c:161
 #, c-format
 msgid "branch '%s' set up to track '%s'."
 msgstr "分支 '%s' 设置为跟踪 '%s'。"
 
-#: branch.c:148
+#: branch.c:164
 #, c-format
 msgid "branch '%s' set up to track:"
 msgstr "分支 '%s' 设置为跟踪:"
 
-#: branch.c:160
+#: branch.c:176
 msgid "unable to write upstream branch configuration"
 msgstr "无法写入上游分支配置"
 
-#: branch.c:162
+#: branch.c:178
 msgid ""
 "\n"
 "After fixing the error cause you may try to fix up\n"
@@ -2024,47 +2023,84 @@ msgstr ""
 "\n"
 "在修复错误后,您可以通过执行以下命令来尝试修改远程跟踪分支:"
 
-#: branch.c:203
+#: branch.c:219
 #, c-format
 msgid "asked to inherit tracking from '%s', but no remote is set"
 msgstr "要求从 '%s' 继承跟踪信息,但是没有设置远程"
 
-#: branch.c:209
+#: branch.c:225
 #, c-format
 msgid "asked to inherit tracking from '%s', but no merge configuration is set"
 msgstr "要求从 '%s' 继承跟踪信息,但是没有设置合并配置"
 
-#: branch.c:252
+#: branch.c:277
+#, c-format
+msgid "not tracking: ambiguous information for ref '%s'"
+msgstr "不在跟踪中:引用 '%s' 有歧义的信息"
+
+#  译者:为保证在输出中对齐,注意调整句中空格!
+#. TRANSLATORS: This is a line listing a remote with duplicate
+#. refspecs in the advice message below. For RTL languages you'll
+#. probably want to swap the "%s" and leading "  " space around.
+#.
+#. TRANSLATORS: This is line item of ambiguous object output
+#. from describe_ambiguous_object() above. For RTL languages
+#. you'll probably want to swap the "%s" and leading " " space
+#. around.
+#.
+#: branch.c:289 object-name.c:464
+#, c-format
+msgid "  %s\n"
+msgstr "  %s\n"
+
+#. TRANSLATORS: The second argument is a \n-delimited list of
+#. duplicate refspecs, composed above.
+#.
+#: branch.c:295
 #, c-format
-msgid "not tracking: ambiguous information for ref %s"
-msgstr "未跟踪:引用 %s 有歧义"
+msgid ""
+"There are multiple remotes whose fetch refspecs map to the remote\n"
+"tracking ref '%s':\n"
+"%s\n"
+"This is typically a configuration error.\n"
+"\n"
+"To support setting up tracking branches, ensure that\n"
+"different remotes' fetch refspecs map into different\n"
+"tracking namespaces."
+msgstr ""
+"有多个远程的获取引用规格映射到了追踪引用 '%s':\n"
+"%s\n"
+"这一般是个配置错误。\n"
+"\n"
+"如果要支持设置追踪分支,请保证不同远程的获取引用规格映射至不同的追踪命名空"
+"间。"
 
-#: branch.c:287
+#: branch.c:344
 #, c-format
 msgid "'%s' is not a valid branch name"
 msgstr "'%s' 不是一个有效的分支名称"
 
-#: branch.c:307
+#: branch.c:364
 #, c-format
 msgid "a branch named '%s' already exists"
 msgstr "一个名为 '%s' 的分支已经存在"
 
-#: branch.c:313
+#: branch.c:370
 #, c-format
 msgid "cannot force update the branch '%s' checked out at '%s'"
 msgstr "无法强制更新检出于 '%2$s' 的分支 '%1$s'"
 
-#: branch.c:336
+#: branch.c:393
 #, c-format
 msgid "cannot set up tracking information; starting point '%s' is not a branch"
 msgstr "无法设置跟踪信息;起始点 '%s' 不是一个分支"
 
-#: branch.c:338
+#: branch.c:395
 #, c-format
 msgid "the requested upstream branch '%s' does not exist"
 msgstr "请求的上游分支 '%s' 不存在"
 
-#: branch.c:340
+#: branch.c:397
 msgid ""
 "\n"
 "If you are planning on basing your work on an upstream\n"
@@ -2082,126 +2118,144 @@ msgstr ""
 "如果您正计划推送一个能与对应远程分支建立跟踪的新的本地分支,\n"
 "您可能需要使用 \"git push -u\" 推送分支并配置和上游的关联。"
 
-#: branch.c:384 builtin/replace.c:321 builtin/replace.c:377
+#: branch.c:445 builtin/replace.c:321 builtin/replace.c:377
 #: builtin/replace.c:423 builtin/replace.c:453
 #, c-format
 msgid "not a valid object name: '%s'"
 msgstr "不是一个有效的对象名:'%s'"
 
-#: branch.c:404
+#: branch.c:465
 #, c-format
 msgid "ambiguous object name: '%s'"
 msgstr "歧义的对象名:'%s'"
 
-#: branch.c:409
+#: branch.c:470
 #, c-format
 msgid "not a valid branch point: '%s'"
 msgstr "无效的分支点:'%s'"
 
-#: branch.c:469
+#: branch.c:658
+#, c-format
+msgid "submodule '%s': unable to find submodule"
+msgstr "子模组 '%s':无法找到子模组"
+
+#: branch.c:661
+#, c-format
+msgid ""
+"You may try updating the submodules using 'git checkout %s && git submodule "
+"update --init'"
+msgstr ""
+"你可以用 'git checkout %s && git submodule update --init' 来尝试更新子模组"
+
+#: branch.c:672 branch.c:698
+#, c-format
+msgid "submodule '%s': cannot create branch '%s'"
+msgstr "子模组 '%s':不能创建分支 '%s'"
+
+#: branch.c:730
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr "'%s' 已经检出到 '%s'"
 
-#: branch.c:494
+#: branch.c:755
 #, c-format
 msgid "HEAD of working tree %s is not updated"
 msgstr "工作区 %s 的 HEAD 指向没有被更新"
 
-#: bundle.c:44
+#: bundle.c:45
 #, c-format
 msgid "unrecognized bundle hash algorithm: %s"
 msgstr "未能识别的归档包哈希算法:%s"
 
-#: bundle.c:48
+#: bundle.c:53
 #, c-format
 msgid "unknown capability '%s'"
 msgstr "未知能力 '%s'"
 
-#: bundle.c:74
+#: bundle.c:79
 #, c-format
 msgid "'%s' does not look like a v2 or v3 bundle file"
 msgstr "'%s' 不像是一个 v2 或 v3 版本的归档包文件"
 
-#: bundle.c:113
+#: bundle.c:118
 #, c-format
 msgid "unrecognized header: %s%s (%d)"
 msgstr "未能识别的包头:%s%s (%d)"
 
-#: bundle.c:140 rerere.c:464 rerere.c:674 sequencer.c:2620 sequencer.c:3406
-#: builtin/commit.c:862
+#: bundle.c:145 rerere.c:464 rerere.c:675 sequencer.c:2616 sequencer.c:3402
+#: builtin/commit.c:865
 #, c-format
 msgid "could not open '%s'"
 msgstr "不能打开 '%s'"
 
-#: bundle.c:198
+#: bundle.c:203
 msgid "Repository lacks these prerequisite commits:"
 msgstr "仓库中缺少这些必备的提交:"
 
-#: bundle.c:201
+#: bundle.c:206
 msgid "need a repository to verify a bundle"
 msgstr "需要一个仓库来校验一个归档包"
 
-#: bundle.c:257
+#: bundle.c:264
 #, c-format
 msgid "The bundle contains this ref:"
-msgid_plural "The bundle contains these %d refs:"
+msgid_plural "The bundle contains these %<PRIuMAX> refs:"
 msgstr[0] "这个归档包中含有这个引用:"
-msgstr[1] "这个归档包中含有 %d 个引用:"
+msgstr[1] "这个归档包中含有 %<PRIuMAX> 个引用:"
 
-#: bundle.c:264
+#: bundle.c:272
 msgid "The bundle records a complete history."
 msgstr "这个归档包记录一个完整历史。"
 
-#: bundle.c:266
+#: bundle.c:274
 #, c-format
 msgid "The bundle requires this ref:"
-msgid_plural "The bundle requires these %d refs:"
+msgid_plural "The bundle requires these %<PRIuMAX> refs:"
 msgstr[0] "这个归档包需要这个引用:"
-msgstr[1] "这个归档包需要 %d 个引用:"
+msgstr[1] "这个归档包需要 %<PRIuMAX> 个引用:"
 
-#: bundle.c:333
+#: bundle.c:350
 msgid "unable to dup bundle descriptor"
 msgstr "无法复制归档包描述符"
 
-#: bundle.c:340
+#: bundle.c:357
 msgid "Could not spawn pack-objects"
 msgstr "不能生成 pack-objects 进程"
 
-#: bundle.c:351
+#: bundle.c:368
 msgid "pack-objects died"
 msgstr "pack-objects 终止"
 
-#: bundle.c:400
+#: bundle.c:417
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "引用 '%s' 被 rev-list 选项排除"
 
-#: bundle.c:504
+#: bundle.c:533 builtin/log.c:211 builtin/log.c:1975 builtin/shortlog.c:400
+#, c-format
+msgid "unrecognized argument: %s"
+msgstr "未能识别的参数:%s"
+
+#: bundle.c:548
 #, c-format
 msgid "unsupported bundle version %d"
 msgstr "不支持的归档包版本 %d"
 
-#: bundle.c:506
+#: bundle.c:550
 #, c-format
 msgid "cannot write bundle version %d with algorithm %s"
 msgstr "不能写入,归档包版本 %d 不支持算法 %s"
 
-#: bundle.c:524 builtin/log.c:210 builtin/log.c:1953 builtin/shortlog.c:399
-#, c-format
-msgid "unrecognized argument: %s"
-msgstr "未能识别的参数:%s"
-
-#: bundle.c:553
+#: bundle.c:600
 msgid "Refusing to create empty bundle."
 msgstr "不能创建空的归档包。"
 
-#: bundle.c:563
+#: bundle.c:610
 #, c-format
 msgid "cannot create '%s'"
 msgstr "不能创建 '%s'"
 
-#: bundle.c:588
+#: bundle.c:639
 msgid "index-pack died"
 msgstr "index-pack 终止"
 
@@ -2229,7 +2283,7 @@ msgstr "最终块有非零 ID %<PRIx32>"
 msgid "invalid color value: %.*s"
 msgstr "无效的颜色值:%.*s"
 
-#: commit-graph.c:204 midx.c:51
+#: commit-graph.c:204 midx.c:52
 msgid "invalid hash version"
 msgstr "无效的哈希版本"
 
@@ -2257,234 +2311,235 @@ msgstr "提交图形哈希版本 %X 和版本 %X 不匹配"
 msgid "commit-graph file is too small to hold %u chunks"
 msgstr "提交图形文件太小,容不下 %u 个块"
 
-#: commit-graph.c:482
+#: commit-graph.c:485
 msgid "commit-graph has no base graphs chunk"
 msgstr "提交图形没有基础图形块"
 
-#: commit-graph.c:492
+#: commit-graph.c:495
 msgid "commit-graph chain does not match"
 msgstr "提交图形链不匹配"
 
-#: commit-graph.c:540
+#: commit-graph.c:543
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
 msgstr "无效的提交图形链:行 '%s' 不是一个哈希值"
 
-#: commit-graph.c:564
+#: commit-graph.c:567
 msgid "unable to find all commit-graph files"
 msgstr "无法找到所有提交图形文件"
 
-#: commit-graph.c:749 commit-graph.c:786
+#: commit-graph.c:752 commit-graph.c:789
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr "无效的提交位置。提交图形可能已损坏"
 
-#: commit-graph.c:770
+#: commit-graph.c:773
 #, c-format
 msgid "could not find commit %s"
 msgstr "无法找到提交 %s"
 
-#: commit-graph.c:803
+#: commit-graph.c:806
 msgid "commit-graph requires overflow generation data but has none"
 msgstr "提交图需要溢出世代数据,但是没有"
 
-#: commit-graph.c:1108 builtin/am.c:1369
+#: commit-graph.c:1111 builtin/am.c:1370 builtin/checkout.c:775
+#: builtin/clone.c:705
 #, c-format
 msgid "unable to parse commit %s"
 msgstr "不能解析提交 %s"
 
-#: commit-graph.c:1370 builtin/pack-objects.c:3070
+#: commit-graph.c:1373 builtin/pack-objects.c:3078
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "无法获得对象 %s 类型"
 
-#: commit-graph.c:1401
+#: commit-graph.c:1404
 msgid "Loading known commits in commit graph"
 msgstr "正在加载提交图中的已知提交"
 
-#: commit-graph.c:1418
+#: commit-graph.c:1421
 msgid "Expanding reachable commits in commit graph"
 msgstr "正在扩展提交图中的可达提交"
 
-#: commit-graph.c:1438
+#: commit-graph.c:1441
 msgid "Clearing commit marks in commit graph"
 msgstr "正在清除提交图中的提交标记"
 
-#: commit-graph.c:1457
+#: commit-graph.c:1460
 msgid "Computing commit graph topological levels"
 msgstr "正在计算提交图拓扑级别"
 
-#: commit-graph.c:1510
+#: commit-graph.c:1513
 msgid "Computing commit graph generation numbers"
 msgstr "正在计算提交图世代数字"
 
-#: commit-graph.c:1591
+#: commit-graph.c:1598
 msgid "Computing commit changed paths Bloom filters"
 msgstr "计算提交变更路径的布隆过滤器"
 
-#: commit-graph.c:1668
+#: commit-graph.c:1675
 msgid "Collecting referenced commits"
 msgstr "正在收集引用的提交"
 
-#: commit-graph.c:1693
+#: commit-graph.c:1701
 #, c-format
-msgid "Finding commits for commit graph in %d pack"
-msgid_plural "Finding commits for commit graph in %d packs"
-msgstr[0] "正在 %d 个包中查找提交图的提交"
-msgstr[1] "正在 %d 个包中查找提交图的提交"
+msgid "Finding commits for commit graph in %<PRIuMAX> pack"
+msgid_plural "Finding commits for commit graph in %<PRIuMAX> packs"
+msgstr[0] "正在 %<PRIuMAX> 个包中查找提交图的提交"
+msgstr[1] "正在 %<PRIuMAX> 个包中查找提交图的提交"
 
-#: commit-graph.c:1706
+#: commit-graph.c:1714
 #, c-format
 msgid "error adding pack %s"
 msgstr "添加包 %s 出错"
 
-#: commit-graph.c:1710
+#: commit-graph.c:1718
 #, c-format
 msgid "error opening index for %s"
 msgstr "为 %s 打开索引出错"
 
-#: commit-graph.c:1747
+#: commit-graph.c:1756
 msgid "Finding commits for commit graph among packed objects"
 msgstr "正在打包对象中查找提交图的提交"
 
-#: commit-graph.c:1765
+#: commit-graph.c:1774
 msgid "Finding extra edges in commit graph"
 msgstr "正在查找提交图中额外的边"
 
-#: commit-graph.c:1814
+#: commit-graph.c:1823
 msgid "failed to write correct number of base graph ids"
 msgstr "无法写入正确数量的基础图形 ID"
 
-#: commit-graph.c:1845 midx.c:1149
+#: commit-graph.c:1854 midx.c:1168 builtin/sparse-checkout.c:475
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "不能为 %s 创建先导目录"
 
-#: commit-graph.c:1858
+#: commit-graph.c:1868
 msgid "unable to create temporary graph layer"
 msgstr "无法创建临时图层"
 
-#: commit-graph.c:1863
+#: commit-graph.c:1873
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr "无法为 '%s' 调整共享权限"
 
-#: commit-graph.c:1920
+#: commit-graph.c:1930
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "正在用 %d 步写出提交图"
 msgstr[1] "正在用 %d 步写出提交图"
 
-#: commit-graph.c:1956
+#: commit-graph.c:1967
 msgid "unable to open commit-graph chain file"
 msgstr "无法打开提交图形链文件"
 
-#: commit-graph.c:1972
+#: commit-graph.c:1983
 msgid "failed to rename base commit-graph file"
 msgstr "无法重命名基础提交图形文件"
 
-#: commit-graph.c:1992
+#: commit-graph.c:2004
 msgid "failed to rename temporary commit-graph file"
 msgstr "无法重命名临时提交图形文件"
 
-#: commit-graph.c:2125
+#: commit-graph.c:2137
 msgid "Scanning merged commits"
 msgstr "正在扫描合并提交"
 
-#: commit-graph.c:2169
+#: commit-graph.c:2181
 msgid "Merging commit-graph"
 msgstr "正在合并提交图形"
 
-#: commit-graph.c:2277
+#: commit-graph.c:2289
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr "正尝试写提交图,但是 'core.commitGraph' 被禁用"
 
-#: commit-graph.c:2384
+#: commit-graph.c:2396
 msgid "too many commits to write graph"
 msgstr "提交太多不能画图"
 
-#: commit-graph.c:2482
+#: commit-graph.c:2494
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr "提交图文件的校验码错误,可能已经损坏"
 
-#: commit-graph.c:2492
+#: commit-graph.c:2504
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "提交图形的对象 ID 顺序不正确:%s 然后 %s"
 
-#: commit-graph.c:2502 commit-graph.c:2517
+#: commit-graph.c:2514 commit-graph.c:2529
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr "提交图形有不正确的扇出值:fanout[%d] = %u != %u"
 
-#: commit-graph.c:2509
+#: commit-graph.c:2521
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "无法从提交图形中解析提交 %s"
 
-#: commit-graph.c:2527
+#: commit-graph.c:2539
 msgid "Verifying commits in commit graph"
 msgstr "正在校验提交图中的提交"
 
-#: commit-graph.c:2542
+#: commit-graph.c:2554
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr "无法从提交图形的对象库中解析提交 %s"
 
-#: commit-graph.c:2549
+#: commit-graph.c:2561
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr "提交图形中的提交 %s 的根树对象 ID 是 %s != %s"
 
-#: commit-graph.c:2559
+#: commit-graph.c:2571
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr "提交 %s 的提交图形父提交列表太长了"
 
-#: commit-graph.c:2568
+#: commit-graph.c:2580
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "%s 的提交图形父提交是 %s != %s"
 
-#: commit-graph.c:2582
+#: commit-graph.c:2594
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr "提交 %s 的提交图形父提交列表过早终止"
 
-#: commit-graph.c:2587
+#: commit-graph.c:2599
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
 msgstr "提交图形中提交 %s 的世代号是零,但其它地方非零"
 
-#: commit-graph.c:2591
+#: commit-graph.c:2603
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
 msgstr "提交图形中提交 %s 的世代号非零,但其它地方是零"
 
-#: commit-graph.c:2608
+#: commit-graph.c:2620
 #, c-format
 msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
 msgstr "提交图形中的提交 %s 的世代号是 %<PRIuMAX> < %<PRIuMAX>"
 
-#: commit-graph.c:2614
+#: commit-graph.c:2626
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr "提交图形中提交 %s 的提交日期是 %<PRIuMAX> != %<PRIuMAX>"
 
-#: commit.c:53 sequencer.c:3109 builtin/am.c:399 builtin/am.c:444
-#: builtin/am.c:449 builtin/am.c:1448 builtin/am.c:2123 builtin/replace.c:456
+#: commit.c:54 sequencer.c:3105 builtin/am.c:400 builtin/am.c:445
+#: builtin/am.c:450 builtin/am.c:1449 builtin/am.c:2124 builtin/replace.c:456
 #, c-format
 msgid "could not parse %s"
 msgstr "不能解析 %s"
 
-#: commit.c:55
+#: commit.c:56
 #, c-format
 msgid "%s %s is not a commit!"
 msgstr "%s %s 不是一个提交!"
 
-#: commit.c:196
+#: commit.c:197
 msgid ""
 "Support for <GIT_DIR>/info/grafts is deprecated\n"
 "and will be removed in a future Git version.\n"
@@ -2504,27 +2559,27 @@ msgstr ""
 "设置 \"git config advice.graftFileDeprecated false\"\n"
 "可关闭本消息"
 
-#: commit.c:1241
+#: commit.c:1252
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr "提交 %s 有一个非可信的声称来自 %s 的 GPG 签名。"
 
-#: commit.c:1245
+#: commit.c:1256
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "提交 %s 有一个错误的声称来自 %s 的 GPG 签名。"
 
-#: commit.c:1248
+#: commit.c:1259
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "提交 %s 没有 GPG 签名。"
 
-#: commit.c:1251
+#: commit.c:1262
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "提交 %s 有一个来自 %s 的好的 GPG 签名。\n"
 
-#: commit.c:1505
+#: commit.c:1516
 msgid ""
 "Warning: commit message did not conform to UTF-8.\n"
 "You may want to amend it after fixing the message, or set the config\n"
@@ -2538,7 +2593,15 @@ msgstr ""
 msgid "memory exhausted"
 msgstr "内存耗尽"
 
-#: config.c:125
+#: compat/terminal.c:167
+msgid "cannot resume in the background, please use 'fg' to resume"
+msgstr "无法从后台中恢复,请使用 'fg' 来恢复"
+
+#: compat/terminal.c:168
+msgid "cannot restore terminal settings"
+msgstr "无法恢复终端设置"
+
+#: config.c:143
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2553,333 +2616,360 @@ msgstr ""
 "\t%2$s\n"
 "这可能是因为循环包含。"
 
-#: config.c:141
+#: config.c:159
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "无法扩展包含路径 '%s'"
 
-#: config.c:152
+#: config.c:170
 msgid "relative config includes must come from files"
 msgstr "相对路径的配置文件引用必须来自于文件"
 
-#: config.c:201
+#: config.c:219
 msgid "relative config include conditionals must come from files"
 msgstr "相对路径的配置文件条件引用必须来自于文件"
 
-#: config.c:398
+#: config.c:364
+msgid ""
+"remote URLs cannot be configured in file directly or indirectly included by "
+"includeIf.hasconfig:remote.*.url"
+msgstr ""
+"远程 URL 不能在文件中配置,不管直接地还是通过 includeIf.hasconfig:remote.*."
+"url 间接地包含。"
+
+#: config.c:508
 #, c-format
 msgid "invalid config format: %s"
 msgstr "无效的配置格式:%s"
 
-#: config.c:402
+#: config.c:512
 #, c-format
 msgid "missing environment variable name for configuration '%.*s'"
 msgstr "配置 '%.*s' 缺少环境变量名称"
 
-#: config.c:407
+#: config.c:517
 #, c-format
 msgid "missing environment variable '%s' for configuration '%.*s'"
 msgstr "缺少环境变量 '%s' 于配置 '%.*s' "
 
-#: config.c:443
+#: config.c:553
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "键名没有包含一个小节名称:%s"
 
-#: config.c:448
+#: config.c:558
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr "键名没有包含变量名:%s"
 
-#: config.c:470 sequencer.c:2806
+#: config.c:580 sequencer.c:2802
 #, c-format
 msgid "invalid key: %s"
 msgstr "无效键名:%s"
 
-#: config.c:475
+#: config.c:585
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "无效键名(有换行符):%s"
 
-#: config.c:495
+#: config.c:605
 msgid "empty config key"
 msgstr "空的配置键名"
 
-#: config.c:513 config.c:525
+#: config.c:623 config.c:635
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "伪配置参数:%s"
 
-#: config.c:539 config.c:556 config.c:563 config.c:572
+#: config.c:649 config.c:666 config.c:673 config.c:682
 #, c-format
 msgid "bogus format in %s"
 msgstr "%s 中格式错误"
 
-#: config.c:606
+#: config.c:716
 #, c-format
 msgid "bogus count in %s"
 msgstr "%s 中错误计数"
 
-#: config.c:610
+#: config.c:720
 #, c-format
 msgid "too many entries in %s"
 msgstr "%s 中太多的条目"
 
-#: config.c:620
+#: config.c:730
 #, c-format
 msgid "missing config key %s"
 msgstr "缺失配置键名 %s"
 
-#: config.c:628
+#: config.c:738
 #, c-format
 msgid "missing config value %s"
 msgstr "缺失配置取值 %s"
 
-#: config.c:979
+#: config.c:1089
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "数据对象 %2$s 中错误的配置行 %1$d"
 
-#: config.c:983
+#: config.c:1093
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "文件 %2$s 中错误的配置行 %1$d"
 
-#: config.c:987
+#: config.c:1097
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "标准输入中错误的配置行 %d"
 
-#: config.c:991
+#: config.c:1101
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "子模组数据对象 %2$s 中错误的配置行 %1$d"
 
-#: config.c:995
+#: config.c:1105
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "命令行 %2$s 中错误的配置行 %1$d"
 
-#: config.c:999
+#: config.c:1109
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "在 %2$s 中错误的配置行 %1$d"
 
-#: config.c:1136
+#: config.c:1246
 msgid "out of range"
 msgstr "超出范围"
 
-#: config.c:1136
+#: config.c:1246
 msgid "invalid unit"
 msgstr "无效的单位"
 
-#: config.c:1137
+#: config.c:1247
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "配置变量 '%2$s' 的数字取值 '%1$s' 设置错误:%3$s"
 
-#: config.c:1147
+#: config.c:1257
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr "数据对象 %3$s 中配置变量 '%2$s' 错误的取值 '%1$s':%4$s"
 
-#: config.c:1150
+#: config.c:1260
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr "文件 %3$s 中配置变量 '%2$s' 错误的取值 '%1$s':%4$s"
 
-#: config.c:1153
+#: config.c:1263
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr "标准输入中配置变量 '%2$s' 错误的取值 '%1$s':%3$s"
 
-#: config.c:1156
+#: config.c:1266
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr "子模组数据 %3$s 中配置变量 '%2$s' 错误的取值 '%1$s':%4$s"
 
-#: config.c:1159
+#: config.c:1269
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr "命令行 %3$s 中配置变量 '%2$s' 错误的取值 '%1$s':%4$s"
 
-#: config.c:1162
+#: config.c:1272
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr "在 %3$s 中配置变量 '%2$s' 错误的取值 '%1$s':%4$s"
 
-#: config.c:1241
+#: config.c:1368
+#, c-format
+msgid "invalid value for variable %s"
+msgstr "变量 %s 的值无效"
+
+#: config.c:1389
+#, c-format
+msgid "ignoring unknown core.fsync component '%s'"
+msgstr "忽略未知的 core.fsync 组件 '%s'"
+
+#: config.c:1425
 #, c-format
 msgid "bad boolean config value '%s' for '%s'"
 msgstr "'%2$s' 的错误的布尔取值 '%1$s'"
 
-#: config.c:1259
+#: config.c:1443
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "无法扩展用户目录:'%s'"
 
-#: config.c:1268
+#: config.c:1452
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "'%2$s' 的值 '%1$s' 不是一个有效的时间戳"
 
-#: config.c:1361
+#: config.c:1545
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "缩写长度超出范围:%d"
 
-#: config.c:1375 config.c:1386
+#: config.c:1559 config.c:1570
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "错误的 zlib 压缩级别 %d"
 
-#: config.c:1476
+#: config.c:1660
 msgid "core.commentChar should only be one character"
 msgstr "core.commentChar 应该是一个字符"
 
-#: config.c:1509
+#: config.c:1692
+#, c-format
+msgid "ignoring unknown core.fsyncMethod value '%s'"
+msgstr "忽略未知的 core.fsyncMethod 值 '%s'"
+
+#: config.c:1698
+msgid "core.fsyncObjectFiles is deprecated; use core.fsync instead"
+msgstr "core.fsyncObjectFiles 已经被弃用;取而代之使用 core.fsync"
+
+#: config.c:1714
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "无效的对象创建模式:%s"
 
-#: config.c:1584
+#: config.c:1800
 #, c-format
 msgid "malformed value for %s"
 msgstr "%s 的取值格式错误"
 
-#: config.c:1610
+#: config.c:1826
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "%s 的取值格式错误:%s"
 
-#: config.c:1611
+#: config.c:1827
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr "必须是其中之一:nothing、matching、simple、upstream 或 current"
 
-#: config.c:1672 builtin/pack-objects.c:4053
+#: config.c:1888 builtin/pack-objects.c:4078
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "错误的打包压缩级别 %d"
 
-#: config.c:1795
+#: config.c:2014
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "无法从数据对象 '%s' 加载配置"
 
-#: config.c:1798
+#: config.c:2017
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "引用 '%s' 没有指向一个数据对象"
 
-#: config.c:1816
+#: config.c:2035
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "不能解析配置对象 '%s'"
 
-#: config.c:1861
+#: config.c:2080
 #, c-format
 msgid "failed to parse %s"
 msgstr "无法解析 %s"
 
-#: config.c:1917
+#: config.c:2136
 msgid "unable to parse command-line config"
 msgstr "无法解析命令行中的配置"
 
-#: config.c:2285
+#: config.c:2512
 msgid "unknown error occurred while reading the configuration files"
 msgstr "在读取配置文件时遇到未知错误"
 
-#: config.c:2459
+#: config.c:2686
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "无效 %s:'%s'"
 
-#: config.c:2504
+#: config.c:2731
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr "splitIndex.maxPercentChange 的取值 '%d' 应该介于 0 和 100 之间"
 
-#: config.c:2550
+#: config.c:2763
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "无法解析命令行配置中的 '%s'"
 
-#: config.c:2552
+#: config.c:2765
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "在文件 '%2$s' 的第 %3$d 行发现错误的配置变量 '%1$s'"
 
-#: config.c:2637
+#: config.c:2850
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "无效的小节名称 '%s'"
 
-#: config.c:2669
+#: config.c:2882
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s 有多个取值"
 
-#: config.c:2698
+#: config.c:2911
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "无法写入新的配置文件 %s"
 
-#: config.c:2950 config.c:3277
+#: config.c:3177 config.c:3518
 #, c-format
 msgid "could not lock config file %s"
 msgstr "不能锁定配置文件 %s"
 
-#: config.c:2961
+#: config.c:3188
 #, c-format
 msgid "opening %s"
 msgstr "打开 %s"
 
-#: config.c:2998 builtin/config.c:361
+#: config.c:3225 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "无效模式:%s"
 
-#: config.c:3023
+#: config.c:3250
 #, c-format
 msgid "invalid config file %s"
 msgstr "无效的配置文件 %s"
 
-#: config.c:3036 config.c:3290
+#: config.c:3263 config.c:3531
 #, c-format
 msgid "fstat on %s failed"
 msgstr "对 %s 调用 fstat 失败"
 
-#: config.c:3047
+#: config.c:3274
 #, c-format
 msgid "unable to mmap '%s'%s"
 msgstr "不能 mmap '%s'%s"
 
-#: config.c:3057 config.c:3295
+#: config.c:3284 config.c:3536
 #, c-format
 msgid "chmod on %s failed"
 msgstr "对 %s 调用 chmod 失败"
 
-#: config.c:3142 config.c:3392
+#: config.c:3369 config.c:3633
 #, c-format
 msgid "could not write config file %s"
 msgstr "不能写入配置文件 %s"
 
-#: config.c:3176
+#: config.c:3403
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "不能设置 '%s' 为 '%s'"
 
-#: config.c:3178 builtin/remote.c:662 builtin/remote.c:860 builtin/remote.c:868
+#: config.c:3405 builtin/remote.c:666 builtin/remote.c:885 builtin/remote.c:893
 #, c-format
 msgid "could not unset '%s'"
 msgstr "不能取消设置 '%s'"
 
-#: config.c:3268
+#: config.c:3509
 #, c-format
 msgid "invalid section name: %s"
 msgstr "无效的小节名称:%s"
 
-#: config.c:3435
+#: config.c:3676
 #, c-format
 msgid "missing value for '%s'"
 msgstr "%s 的取值缺失"
@@ -3208,68 +3298,68 @@ msgstr "拒绝使用缺少主机字段的凭据"
 msgid "refusing to work with credential missing protocol field"
 msgstr "拒绝使用缺少协议字段的凭据"
 
-#: credential.c:395
+#: credential.c:396
 #, c-format
 msgid "url contains a newline in its %s component: %s"
 msgstr "URL 的 %s 组件中包含换行符:%s"
 
-#: credential.c:439
+#: credential.c:440
 #, c-format
 msgid "url has no scheme: %s"
 msgstr "URL 没有 scheme:%s"
 
-#: credential.c:512
+#: credential.c:513
 #, c-format
 msgid "credential url cannot be parsed: %s"
 msgstr "不能解析凭据 URL:%s"
 
-#: date.c:138
+#: date.c:139
 msgid "in the future"
 msgstr "在将来"
 
-#: date.c:144
+#: date.c:145
 #, c-format
 msgid "%<PRIuMAX> second ago"
 msgid_plural "%<PRIuMAX> seconds ago"
 msgstr[0] "%<PRIuMAX> 秒钟前"
 msgstr[1] "%<PRIuMAX> 秒钟前"
 
-#: date.c:151
+#: date.c:152
 #, c-format
 msgid "%<PRIuMAX> minute ago"
 msgid_plural "%<PRIuMAX> minutes ago"
 msgstr[0] "%<PRIuMAX> 分钟前"
 msgstr[1] "%<PRIuMAX> 分钟前"
 
-#: date.c:158
+#: date.c:159
 #, c-format
 msgid "%<PRIuMAX> hour ago"
 msgid_plural "%<PRIuMAX> hours ago"
 msgstr[0] "%<PRIuMAX> 小时前"
 msgstr[1] "%<PRIuMAX> 小时前"
 
-#: date.c:165
+#: date.c:166
 #, c-format
 msgid "%<PRIuMAX> day ago"
 msgid_plural "%<PRIuMAX> days ago"
 msgstr[0] "%<PRIuMAX> 天前"
 msgstr[1] "%<PRIuMAX> 天前"
 
-#: date.c:171
+#: date.c:172
 #, c-format
 msgid "%<PRIuMAX> week ago"
 msgid_plural "%<PRIuMAX> weeks ago"
 msgstr[0] "%<PRIuMAX> 周前"
 msgstr[1] "%<PRIuMAX> 周前"
 
-#: date.c:178
+#: date.c:179
 #, c-format
 msgid "%<PRIuMAX> month ago"
 msgid_plural "%<PRIuMAX> months ago"
 msgstr[0] "%<PRIuMAX> 个月前"
 msgstr[1] "%<PRIuMAX> 个月前"
 
-#: date.c:189
+#: date.c:190
 #, c-format
 msgid "%<PRIuMAX> year"
 msgid_plural "%<PRIuMAX> years"
@@ -3277,14 +3367,14 @@ msgstr[0] "%<PRIuMAX> 年"
 msgstr[1] "%<PRIuMAX> 年"
 
 #. TRANSLATORS: "%s" is "<n> years"
-#: date.c:192
+#: date.c:193
 #, c-format
 msgid "%s, %<PRIuMAX> month ago"
 msgid_plural "%s, %<PRIuMAX> months ago"
 msgstr[0] "%s %<PRIuMAX> 个月前"
 msgstr[1] "%s %<PRIuMAX> 个月前"
 
-#: date.c:197 date.c:202
+#: date.c:198 date.c:203
 #, c-format
 msgid "%<PRIuMAX> year ago"
 msgid_plural "%<PRIuMAX> years ago"
@@ -3315,10 +3405,14 @@ msgstr "来自 config 的数据岛正则表达式有太多的捕获组(最多
 msgid "Marked %d islands, done.\n"
 msgstr "已标记 %d 个数据岛,结束。\n"
 
-#: diff-merges.c:70
+#: diff-merges.c:81 gpg-interface.c:719 gpg-interface.c:734 ls-refs.c:37
+#: parallel-checkout.c:42 sequencer.c:2805 setup.c:563 builtin/am.c:203
+#: builtin/am.c:2243 builtin/am.c:2287 builtin/blame.c:724 builtin/blame.c:742
+#: builtin/fetch.c:792 builtin/pack-objects.c:3515 builtin/pull.c:45
+#: builtin/pull.c:47 builtin/pull.c:321
 #, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr "未知的 --diff-merges 取值:%s"
+msgid "invalid value for '%s': '%s'"
+msgstr "'%s' 的值无效:'%s'"
 
 #: diff-lib.c:561
 msgid "--merge-base does not work with ranges"
@@ -3351,18 +3445,18 @@ msgid ""
 msgstr "不是 git 仓库。使用 --no-index 比较工作区之外的两个路径"
 
 #  译者:注意保持前导空格
-#: diff.c:158
+#: diff.c:159
 #, c-format
 msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
 msgstr "  无法解析 dirstat 截止(cut-off)百分比 '%s'\n"
 
 #  译者:注意保持前导空格
-#: diff.c:163
+#: diff.c:164
 #, c-format
 msgid "  Unknown dirstat parameter '%s'\n"
 msgstr "  未知的 dirstat 参数 '%s'\n"
 
-#: diff.c:299
+#: diff.c:300
 msgid ""
 "color moved setting must be one of 'no', 'default', 'blocks', 'zebra', "
 "'dimmed-zebra', 'plain'"
@@ -3370,7 +3464,7 @@ msgstr ""
 "移动的颜色设置必须是 'no'、'default'、'blocks'、'zebra'、'dimmed-zebra' 或 "
 "'plain'"
 
-#: diff.c:327
+#: diff.c:328
 #, c-format
 msgid ""
 "unknown color-moved-ws mode '%s', possible values are 'ignore-space-change', "
@@ -3379,18 +3473,18 @@ msgstr ""
 "未知的 color-moved-ws 模式 '%s',可能的取值有 'ignore-space-change'、'ignore-"
 "space-at-eol'、'ignore-all-space'、'allow-indentation-change'"
 
-#: diff.c:335
+#: diff.c:336
 msgid ""
 "color-moved-ws: allow-indentation-change cannot be combined with other "
 "whitespace modes"
 msgstr "color-moved-ws:allow-indentation-change 不能与其它空白字符模式共用"
 
-#: diff.c:412
+#: diff.c:413
 #, c-format
 msgid "Unknown value for 'diff.submodule' config variable: '%s'"
 msgstr "配置变量 'diff.submodule' 未知的取值:'%s'"
 
-#: diff.c:472
+#: diff.c:473
 #, c-format
 msgid ""
 "Found errors in 'diff.dirstat' config variable:\n"
@@ -3399,48 +3493,48 @@ msgstr ""
 "发现配置变量 'diff.dirstat' 中的错误:\n"
 "%s"
 
-#: diff.c:4237
+#: diff.c:4282
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "外部 diff 退出,停止在 %s"
 
-#: diff.c:4589
+#: diff.c:4677 parse-options.c:1114
 #, c-format
 msgid "options '%s', '%s', '%s', and '%s' cannot be used together"
 msgstr "选项 '%s'、'%s'、'%s' 和 '%s' 不能同时使用"
 
-#: diff.c:4593 builtin/difftool.c:736 builtin/log.c:1982 builtin/worktree.c:506
+#: diff.c:4681 parse-options.c:1118 builtin/worktree.c:578
 #, c-format
 msgid "options '%s', '%s', and '%s' cannot be used together"
 msgstr "选项 '%s'、'%s' 和 '%s' 不能同时使用"
 
-#: diff.c:4597
+#: diff.c:4685
 #, c-format
 msgid "options '%s' and '%s' cannot be used together, use '%s' with '%s'"
 msgstr "选项 '%1$s'、'%2$s' 不能同时使用,与 '%4$s' 一起使用 '%3$s'"
 
-#: diff.c:4601
+#: diff.c:4689
 #, c-format
 msgid ""
 "options '%s' and '%s' cannot be used together, use '%s' with '%s' and '%s'"
 msgstr "选项 '%1$s'、'%2$s' 不能同时使用,与 '%4$s' 和 '%5$s' 一起使用 '%3$s'"
 
-#: diff.c:4681
+#: diff.c:4769
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow 明确要求只跟一个路径规格"
 
-#: diff.c:4729
+#: diff.c:4823
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "无效的 --stat 值:%s"
 
-#: diff.c:4734 diff.c:4739 diff.c:4744 diff.c:4749 diff.c:5277
+#: diff.c:4828 diff.c:4833 diff.c:4838 diff.c:4843 diff.c:5319
 #: parse-options.c:217 parse-options.c:221
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s 期望一个数字值"
 
-#: diff.c:4766
+#: diff.c:4860
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3449,200 +3543,200 @@ msgstr ""
 "无法解析 --dirstat/-X 选项的参数:\n"
 "%s"
 
-#: diff.c:4851
+#: diff.c:4893
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "--diff-filter=%2$s 中未知的变更类 '%1$c'"
 
-#: diff.c:4875
+#: diff.c:4917
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "ws-error-highlight=%.*s 之后未知的值"
 
-#: diff.c:4889
+#: diff.c:4931
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "不能解析 '%s'"
 
-#: diff.c:4939 diff.c:4945
+#: diff.c:4981 diff.c:4987
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s 期望 <n>/<m> 格式"
 
-#: diff.c:4957
+#: diff.c:4999
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s 期望一个字符,得到 '%s'"
 
-#: diff.c:4978
+#: diff.c:5020
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "坏的 --color-moved 参数:%s"
 
-#: diff.c:4997
+#: diff.c:5039
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "--color-moved-ws 中的无效模式 '%s' "
 
-#: diff.c:5037
+#: diff.c:5079
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
 msgstr ""
 "diff-algorithm 选项有 \"myers\"、\"minimal\"、\"patience\" 和 \"histogram\""
 
-#: diff.c:5073 diff.c:5093
+#: diff.c:5115 diff.c:5135
 #, c-format
 msgid "invalid argument to %s"
 msgstr "%s 的参数无效"
 
-#: diff.c:5197
+#: diff.c:5239
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr "选项 -I 的正则表达式无效:'%s'"
 
-#: diff.c:5246
+#: diff.c:5288
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "无法解析 --submodule 选项的参数:'%s'"
 
-#: diff.c:5302
+#: diff.c:5344
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "坏的 --word-diff 参数:%s"
 
-#: diff.c:5338
+#: diff.c:5380
 msgid "Diff output format options"
 msgstr "差异输出格式化选项"
 
-#: diff.c:5340 diff.c:5346
+#: diff.c:5382 diff.c:5388
 msgid "generate patch"
 msgstr "生成补丁"
 
-#: diff.c:5343 builtin/log.c:179
+#: diff.c:5385 builtin/log.c:180
 msgid "suppress diff output"
 msgstr "不显示差异输出"
 
-#: diff.c:5348 diff.c:5462 diff.c:5469
+#: diff.c:5390 diff.c:5504 diff.c:5511
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5349 diff.c:5352
+#: diff.c:5391 diff.c:5394
 msgid "generate diffs with <n> lines context"
 msgstr "生成含 <n> 行上下文的差异"
 
-#: diff.c:5354
+#: diff.c:5396
 msgid "generate the diff in raw format"
 msgstr "生成原始格式的差异"
 
-#: diff.c:5357
+#: diff.c:5399
 msgid "synonym for '-p --raw'"
 msgstr "和 '-p --raw' 同义"
 
-#: diff.c:5361
+#: diff.c:5403
 msgid "synonym for '-p --stat'"
 msgstr "和 '-p --stat' 同义"
 
-#: diff.c:5365
+#: diff.c:5407
 msgid "machine friendly --stat"
 msgstr "机器友好的 --stat"
 
-#: diff.c:5368
+#: diff.c:5410
 msgid "output only the last line of --stat"
 msgstr "只输出 --stat 的最后一行"
 
-#: diff.c:5370 diff.c:5378
+#: diff.c:5412 diff.c:5420
 msgid "<param1,param2>..."
 msgstr "<参数1,参数2>..."
 
-#: diff.c:5371
+#: diff.c:5413
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr "输出每个子目录相对变更的分布"
 
-#: diff.c:5375
+#: diff.c:5417
 msgid "synonym for --dirstat=cumulative"
 msgstr "和 --dirstat=cumulative 同义"
 
-#: diff.c:5379
+#: diff.c:5421
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "是 --dirstat=files,param1,param2... 的同义词"
 
-#: diff.c:5383
+#: diff.c:5425
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr "如果变更中引入冲突定界符或空白错误,给出警告"
 
-#: diff.c:5386
+#: diff.c:5428
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr "精简摘要,例如创建、重命名和模式变更"
 
-#: diff.c:5389
+#: diff.c:5431
 msgid "show only names of changed files"
 msgstr "只显示变更文件的文件名"
 
-#: diff.c:5392
+#: diff.c:5434
 msgid "show only names and status of changed files"
 msgstr "只显示变更文件的文件名和状态"
 
-#: diff.c:5394
+#: diff.c:5436
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<宽度>[,<文件名宽度>[,<次数>]]"
 
-#: diff.c:5395
+#: diff.c:5437
 msgid "generate diffstat"
 msgstr "生成差异统计(diffstat)"
 
-#: diff.c:5397 diff.c:5400 diff.c:5403
+#: diff.c:5439 diff.c:5442 diff.c:5445
 msgid "<width>"
 msgstr "<宽度>"
 
-#: diff.c:5398
+#: diff.c:5440
 msgid "generate diffstat with a given width"
 msgstr "使用给定的长度生成差异统计"
 
-#: diff.c:5401
+#: diff.c:5443
 msgid "generate diffstat with a given name width"
 msgstr "使用给定的文件名长度生成差异统计"
 
-#: diff.c:5404
+#: diff.c:5446
 msgid "generate diffstat with a given graph width"
 msgstr "使用给定的图形长度生成差异统计"
 
-#: diff.c:5406
+#: diff.c:5448
 msgid "<count>"
 msgstr "<次数>"
 
-#: diff.c:5407
+#: diff.c:5449
 msgid "generate diffstat with limited lines"
 msgstr "生成有限行数的差异统计"
 
-#: diff.c:5410
+#: diff.c:5452
 msgid "generate compact summary in diffstat"
 msgstr "生成差异统计的简洁摘要"
 
-#: diff.c:5413
+#: diff.c:5455
 msgid "output a binary diff that can be applied"
 msgstr "输出一个可以应用的二进制差异"
 
-#: diff.c:5416
+#: diff.c:5458
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr "在 \"index\" 行显示完整的前后对象名称"
 
-#: diff.c:5418
+#: diff.c:5460
 msgid "show colored diff"
 msgstr "显示带颜色的差异"
 
-#: diff.c:5419
+#: diff.c:5461
 msgid "<kind>"
 msgstr "<类型>"
 
-#: diff.c:5420
+#: diff.c:5462
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
 msgstr "对于差异中的上下文、旧的和新的行,加亮显示错误的空白字符"
 
-#: diff.c:5423
+#: diff.c:5465
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -3650,311 +3744,311 @@ msgstr ""
 "在 --raw 或者 --numstat 中,不对路径字符转码并使用 NUL 字符做为输出字段的分隔"
 "符"
 
-#: diff.c:5426 diff.c:5429 diff.c:5432 diff.c:5541
+#: diff.c:5468 diff.c:5471 diff.c:5474 diff.c:5583
 msgid "<prefix>"
 msgstr "<前缀>"
 
-#: diff.c:5427
+#: diff.c:5469
 msgid "show the given source prefix instead of \"a/\""
 msgstr "显示给定的源前缀取代 \"a/\""
 
-#: diff.c:5430
+#: diff.c:5472
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "显示给定的目标前缀取代 \"b/\""
 
-#: diff.c:5433
+#: diff.c:5475
 msgid "prepend an additional prefix to every line of output"
 msgstr "输出的每一行附加前缀"
 
-#: diff.c:5436
+#: diff.c:5478
 msgid "do not show any source or destination prefix"
 msgstr "不显示任何源和目标前缀"
 
-#: diff.c:5439
+#: diff.c:5481
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr "显示指定行数的差异块间的上下文"
 
-#: diff.c:5443 diff.c:5448 diff.c:5453
+#: diff.c:5485 diff.c:5490 diff.c:5495
 msgid "<char>"
 msgstr "<字符>"
 
-#: diff.c:5444
+#: diff.c:5486
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "指定一个字符取代 '+' 来表示新的一行"
 
-#: diff.c:5449
+#: diff.c:5491
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "指定一个字符取代 '-' 来表示旧的一行"
 
-#: diff.c:5454
+#: diff.c:5496
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "指定一个字符取代 ' ' 来表示一行上下文"
 
-#: diff.c:5457
+#: diff.c:5499
 msgid "Diff rename options"
 msgstr "差异重命名选项"
 
-#: diff.c:5458
+#: diff.c:5500
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5459
+#: diff.c:5501
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr "将完全重写的变更打破为成对的删除和创建"
 
-#: diff.c:5463
+#: diff.c:5505
 msgid "detect renames"
 msgstr "检测重命名"
 
-#: diff.c:5467
+#: diff.c:5509
 msgid "omit the preimage for deletes"
 msgstr "省略删除操作的差异输出"
 
-#: diff.c:5470
+#: diff.c:5512
 msgid "detect copies"
 msgstr "检测拷贝"
 
-#: diff.c:5474
+#: diff.c:5516
 msgid "use unmodified files as source to find copies"
 msgstr "使用未修改的文件做为发现拷贝的源"
 
-#: diff.c:5476
+#: diff.c:5518
 msgid "disable rename detection"
 msgstr "禁用重命名探测"
 
-#: diff.c:5479
+#: diff.c:5521
 msgid "use empty blobs as rename source"
 msgstr "使用空的数据对象做为重命名的源"
 
-#: diff.c:5481
+#: diff.c:5523
 msgid "continue listing the history of a file beyond renames"
 msgstr "继续列出文件重命名以外的历史记录"
 
-#: diff.c:5484
+#: diff.c:5526
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
 msgstr "如果重命名/拷贝目标超过给定的限制,禁止重命名/拷贝检测"
 
-#: diff.c:5486
+#: diff.c:5528
 msgid "Diff algorithm options"
 msgstr "差异算法选项"
 
-#: diff.c:5488
+#: diff.c:5530
 msgid "produce the smallest possible diff"
 msgstr "生成尽可能小的差异"
 
-#: diff.c:5491
+#: diff.c:5533
 msgid "ignore whitespace when comparing lines"
 msgstr "行比较时忽略空白字符"
 
-#: diff.c:5494
+#: diff.c:5536
 msgid "ignore changes in amount of whitespace"
 msgstr "忽略空白字符的变更"
 
-#: diff.c:5497
+#: diff.c:5539
 msgid "ignore changes in whitespace at EOL"
 msgstr "忽略行尾的空白字符变更"
 
-#: diff.c:5500
+#: diff.c:5542
 msgid "ignore carrier-return at the end of line"
 msgstr "忽略行尾的回车符(CR)"
 
-#: diff.c:5503
+#: diff.c:5545
 msgid "ignore changes whose lines are all blank"
 msgstr "忽略整行都是空白的变更"
 
-#: diff.c:5505 diff.c:5527 diff.c:5530 diff.c:5575
+#: diff.c:5547 diff.c:5569 diff.c:5572 diff.c:5617
 msgid "<regex>"
 msgstr "<正则>"
 
-#: diff.c:5506
+#: diff.c:5548
 msgid "ignore changes whose all lines match <regex>"
 msgstr "忽略所有行都和正则表达式匹配的变更"
 
-#: diff.c:5509
+#: diff.c:5551
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr "启发式转换差异边界以便阅读"
 
-#: diff.c:5512
+#: diff.c:5554
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "使用 \"patience diff\" 算法生成差异"
 
-#: diff.c:5516
+#: diff.c:5558
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "使用 \"histogram diff\" 算法生成差异"
 
-#: diff.c:5518
+#: diff.c:5560
 msgid "<algorithm>"
 msgstr "<算法>"
 
-#: diff.c:5519
+#: diff.c:5561
 msgid "choose a diff algorithm"
 msgstr "选择一个差异算法"
 
-#: diff.c:5521
+#: diff.c:5563
 msgid "<text>"
 msgstr "<文本>"
 
-#: diff.c:5522
+#: diff.c:5564
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "使用 \"anchored diff\" 算法生成差异"
 
-#: diff.c:5524 diff.c:5533 diff.c:5536
+#: diff.c:5566 diff.c:5575 diff.c:5578
 msgid "<mode>"
 msgstr "<模式>"
 
-#: diff.c:5525
+#: diff.c:5567
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr "显示单词差异,使用 <模式> 分隔变更的单词"
 
-#: diff.c:5528
+#: diff.c:5570
 msgid "use <regex> to decide what a word is"
 msgstr "使用 <正则表达式> 确定何为一个词"
 
-#: diff.c:5531
+#: diff.c:5573
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "相当于 --word-diff=color --word-diff-regex=<正则>"
 
-#: diff.c:5534
+#: diff.c:5576
 msgid "moved lines of code are colored differently"
 msgstr "移动的代码行用不同方式着色"
 
-#: diff.c:5537
+#: diff.c:5579
 msgid "how white spaces are ignored in --color-moved"
 msgstr "在 --color-moved 下如何忽略空白字符"
 
-#: diff.c:5540
+#: diff.c:5582
 msgid "Other diff options"
 msgstr "其它差异选项"
 
-#: diff.c:5542
+#: diff.c:5584
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr "当从子目录运行,排除目录之外的变更并显示相对路径"
 
-#: diff.c:5546
+#: diff.c:5588
 msgid "treat all files as text"
 msgstr "把所有文件当做文本处理"
 
-#: diff.c:5548
+#: diff.c:5590
 msgid "swap two inputs, reverse the diff"
 msgstr "交换两个输入,反转差异"
 
-#: diff.c:5550
+#: diff.c:5592
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "有差异时退出码为 1,否则为 0"
 
-#: diff.c:5552
+#: diff.c:5594
 msgid "disable all output of the program"
 msgstr "禁用本程序的所有输出"
 
-#: diff.c:5554
+#: diff.c:5596
 msgid "allow an external diff helper to be executed"
 msgstr "允许执行一个外置的差异助手"
 
-#: diff.c:5556
+#: diff.c:5598
 msgid "run external text conversion filters when comparing binary files"
 msgstr "当比较二进制文件时,运行外部的文本转换过滤器"
 
-#: diff.c:5558
+#: diff.c:5600
 msgid "<when>"
 msgstr "<何时>"
 
-#: diff.c:5559
+#: diff.c:5601
 msgid "ignore changes to submodules in the diff generation"
 msgstr "在生成差异时,忽略子模组的更改"
 
-#: diff.c:5562
+#: diff.c:5604
 msgid "<format>"
 msgstr "<格式>"
 
-#: diff.c:5563
+#: diff.c:5605
 msgid "specify how differences in submodules are shown"
 msgstr "指定子模组的差异如何显示"
 
-#: diff.c:5567
+#: diff.c:5609
 msgid "hide 'git add -N' entries from the index"
 msgstr "隐藏索引中 'git add -N' 条目"
 
-#: diff.c:5570
+#: diff.c:5612
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "将索引中 'git add -N' 条目当做真实的"
 
-#: diff.c:5572
+#: diff.c:5614
 msgid "<string>"
 msgstr "<字符串>"
 
-#: diff.c:5573
+#: diff.c:5615
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
 msgstr "查找改变了指定字符串出现次数的差异"
 
-#: diff.c:5576
+#: diff.c:5618
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
 msgstr "查找改变指定正则匹配出现次数的差异"
 
-#: diff.c:5579
+#: diff.c:5621
 msgid "show all changes in the changeset with -S or -G"
 msgstr "显示使用 -S 或 -G 的变更集的所有变更"
 
-#: diff.c:5582
+#: diff.c:5624
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "将 -S 的 <string> 当做扩展的 POSIX 正则表达式"
 
-#: diff.c:5585
+#: diff.c:5627
 msgid "control the order in which files appear in the output"
 msgstr "控制输出中的文件显示顺序"
 
-#: diff.c:5586 diff.c:5589
+#: diff.c:5628 diff.c:5631
 msgid "<path>"
 msgstr "<路径>"
 
-#: diff.c:5587
+#: diff.c:5629
 msgid "show the change in the specified path first"
 msgstr "先显示指定路径的变更"
 
-#: diff.c:5590
+#: diff.c:5632
 msgid "skip the output to the specified path"
 msgstr "跳过指定路径的输出"
 
-#: diff.c:5592
+#: diff.c:5634
 msgid "<object-id>"
 msgstr "<对象 ID>"
 
-#: diff.c:5593
+#: diff.c:5635
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
 msgstr "查找改变指定对象出现次数的差异"
 
-#: diff.c:5595
+#: diff.c:5637
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5596
+#: diff.c:5638
 msgid "select files by diff type"
 msgstr "通过差异类型选择文件"
 
-#: diff.c:5598
+#: diff.c:5640
 msgid "<file>"
 msgstr "<文件>"
 
-#: diff.c:5599
-msgid "Output to a specific file"
-msgstr "输出到一个指定的文件"
+#: diff.c:5641
+msgid "output to a specific file"
+msgstr "输出到指定的文件"
 
-#: diff.c:6257
+#: diff.c:6321
 msgid "exhaustive rename detection was skipped due to too many files."
 msgstr "由于文件太多,跳过详尽的重命名检查。"
 
-#: diff.c:6260
+#: diff.c:6324
 msgid "only found copies from modified paths due to too many files."
 msgstr "由于文件太多,只在修改的路径中找到了拷贝。"
 
-#: diff.c:6263
+#: diff.c:6327
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -4003,20 +4097,20 @@ msgstr "停用锥形模式匹配"
 msgid "cannot use %s as an exclude file"
 msgstr "不能将 %s 用作排除文件"
 
-#: dir.c:2418
+#: dir.c:2419
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "不能打开目录 '%s'"
 
-#: dir.c:2720
+#: dir.c:2721
 msgid "failed to get kernel name and information"
 msgstr "无法获得内核名称和信息"
 
-#: dir.c:2844
+#: dir.c:2846
 msgid "untracked cache is disabled on this system or location"
 msgstr "缓存未跟踪文件在本系统或位置中被禁用"
 
-#: dir.c:3112
+#: dir.c:3119
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -4024,17 +4118,17 @@ msgstr ""
 "无法猜到目录名。\n"
 "请在命令行指定一个目录"
 
-#: dir.c:3800
+#: dir.c:3807
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "仓库 %s 中的索引文件损坏"
 
-#: dir.c:3847 dir.c:3852
+#: dir.c:3854 dir.c:3859
 #, c-format
 msgid "could not create directories for %s"
 msgstr "不能为 %s 创建目录"
 
-#: dir.c:3881
+#: dir.c:3888
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "不能从 '%s' 迁移 git 目录到 '%s'"
@@ -4053,7 +4147,7 @@ msgstr "过滤内容"
 msgid "could not stat file '%s'"
 msgstr "不能对文件 '%s' 调用 stat"
 
-#: environment.c:145
+#: environment.c:147
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "错误的 git 名字空间路径 \"%s\""
@@ -4084,253 +4178,280 @@ msgstr "git fetch-pack:应为 ACK/NAK,却得到 '%s'"
 msgid "unable to write to remote"
 msgstr "无法写到远程"
 
-#: fetch-pack.c:395 fetch-pack.c:1439
+#: fetch-pack.c:397 fetch-pack.c:1460
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "无效的 shallow 信息:%s"
 
-#: fetch-pack.c:401 fetch-pack.c:1445
+#: fetch-pack.c:403 fetch-pack.c:1466
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "无效的 unshallow 信息:%s"
 
-#: fetch-pack.c:403 fetch-pack.c:1447
+#: fetch-pack.c:405 fetch-pack.c:1468
 #, c-format
 msgid "object not found: %s"
 msgstr "对象未找到:%s"
 
-#: fetch-pack.c:406 fetch-pack.c:1450
+#: fetch-pack.c:408 fetch-pack.c:1471
 #, c-format
 msgid "error in object: %s"
 msgstr "对象中出错:%s"
 
-#: fetch-pack.c:408 fetch-pack.c:1452
+#: fetch-pack.c:410 fetch-pack.c:1473
 #, c-format
 msgid "no shallow found: %s"
 msgstr "未发现 shallow:%s"
 
-#: fetch-pack.c:411 fetch-pack.c:1456
+#: fetch-pack.c:413 fetch-pack.c:1477
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "应为 shallow/unshallow,却得到 %s"
 
-#: fetch-pack.c:451
+#: fetch-pack.c:453
 #, c-format
 msgid "got %s %d %s"
 msgstr "得到 %s %d %s"
 
-#: fetch-pack.c:468
+#: fetch-pack.c:470
 #, c-format
 msgid "invalid commit %s"
 msgstr "无效提交 %s"
 
-#: fetch-pack.c:499
+#: fetch-pack.c:501
 msgid "giving up"
 msgstr "放弃"
 
-#: fetch-pack.c:512 progress.c:339
+#: fetch-pack.c:514 progress.h:25
 msgid "done"
 msgstr "完成"
 
-#: fetch-pack.c:524
+#: fetch-pack.c:526
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "得到 %s (%d) %s"
 
-#: fetch-pack.c:560
+#: fetch-pack.c:562
 #, c-format
 msgid "Marking %s as complete"
 msgstr "标记 %s 为完成"
 
-#: fetch-pack.c:775
+#: fetch-pack.c:784
 #, c-format
 msgid "already have %s (%s)"
 msgstr "已经有 %s(%s)"
 
-#: fetch-pack.c:861
+#: fetch-pack.c:870
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack:无法派生 sideband 多路输出"
 
-#: fetch-pack.c:869
+#: fetch-pack.c:878
 msgid "protocol error: bad pack header"
 msgstr "协议错误:坏的包头"
 
-#: fetch-pack.c:965
+#: fetch-pack.c:974
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack:无法派生进程 %s"
 
-#: fetch-pack.c:971
+#: fetch-pack.c:980
 msgid "fetch-pack: invalid index-pack output"
 msgstr "fetch-pack:无效的 index-pack 输出"
 
-#: fetch-pack.c:988
+#: fetch-pack.c:997
 #, c-format
 msgid "%s failed"
 msgstr "%s 失败"
 
-#: fetch-pack.c:990
+#: fetch-pack.c:999
 msgid "error in sideband demultiplexer"
 msgstr "sideband 多路输出出错"
 
-#: fetch-pack.c:1035
+#: fetch-pack.c:1048
 #, c-format
 msgid "Server version is %.*s"
 msgstr "服务器版本 %.*s"
 
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1052 fetch-pack.c:1058
-#: fetch-pack.c:1062 fetch-pack.c:1066 fetch-pack.c:1070 fetch-pack.c:1074
-#: fetch-pack.c:1078 fetch-pack.c:1082 fetch-pack.c:1086 fetch-pack.c:1090
-#: fetch-pack.c:1096 fetch-pack.c:1102 fetch-pack.c:1107 fetch-pack.c:1112
+#: fetch-pack.c:1056 fetch-pack.c:1062 fetch-pack.c:1065 fetch-pack.c:1071
+#: fetch-pack.c:1075 fetch-pack.c:1079 fetch-pack.c:1083 fetch-pack.c:1087
+#: fetch-pack.c:1091 fetch-pack.c:1095 fetch-pack.c:1099 fetch-pack.c:1103
+#: fetch-pack.c:1109 fetch-pack.c:1115 fetch-pack.c:1120 fetch-pack.c:1125
 #, c-format
 msgid "Server supports %s"
 msgstr "服务器支持 %s"
 
-#: fetch-pack.c:1045
+#: fetch-pack.c:1058
 msgid "Server does not support shallow clients"
 msgstr "服务器不支持浅客户端"
 
-#: fetch-pack.c:1105
+#: fetch-pack.c:1118
 msgid "Server does not support --shallow-since"
 msgstr "服务器不支持 --shallow-since"
 
-#: fetch-pack.c:1110
+#: fetch-pack.c:1123
 msgid "Server does not support --shallow-exclude"
 msgstr "服务器不支持 --shallow-exclude"
 
-#: fetch-pack.c:1114
+#: fetch-pack.c:1127
 msgid "Server does not support --deepen"
 msgstr "服务器不支持 --deepen"
 
-#: fetch-pack.c:1116
+#: fetch-pack.c:1129
 msgid "Server does not support this repository's object format"
 msgstr "服务器不支持这个仓库的对象格式"
 
-#: fetch-pack.c:1129
+#: fetch-pack.c:1142
 msgid "no common commits"
 msgstr "没有共同的提交"
 
-#: fetch-pack.c:1138 fetch-pack.c:1485 builtin/clone.c:1130
+#: fetch-pack.c:1151 fetch-pack.c:1506 builtin/clone.c:1166
 msgid "source repository is shallow, reject to clone."
 msgstr "源仓库是浅克隆,拒绝克隆。"
 
-#: fetch-pack.c:1144 fetch-pack.c:1681
+#: fetch-pack.c:1157 fetch-pack.c:1705
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack:获取失败。"
 
-#: fetch-pack.c:1258
+#: fetch-pack.c:1271
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "不匹配的算法:客户端 %s,服务端 %s"
 
-#: fetch-pack.c:1262
+#: fetch-pack.c:1275
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "服务器不支持算法 '%s'"
 
-#: fetch-pack.c:1295
+#: fetch-pack.c:1308
 msgid "Server does not support shallow requests"
 msgstr "服务器不支持浅克隆请求"
 
-#: fetch-pack.c:1302
+#: fetch-pack.c:1315
 msgid "Server supports filter"
 msgstr "服务器支持 filter"
 
-#: fetch-pack.c:1345 fetch-pack.c:2063
+#: fetch-pack.c:1358 fetch-pack.c:2087
 msgid "unable to write request to remote"
 msgstr "无法将请求写到远程"
 
-#: fetch-pack.c:1363
+#: fetch-pack.c:1376
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "读取节标题 '%s' 出错"
 
-#: fetch-pack.c:1369
+#: fetch-pack.c:1382
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "预期 '%s',得到 '%s'"
 
-#: fetch-pack.c:1403
+#: fetch-pack.c:1416
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "意外的确认行:'%s'"
 
-#: fetch-pack.c:1408
+#: fetch-pack.c:1421
 #, c-format
 msgid "error processing acks: %d"
 msgstr "处理 ack 出错:%d"
 
-#: fetch-pack.c:1418
-msgid "expected packfile to be sent after 'ready'"
-msgstr "预期在 'ready' 之后发送 packfile"
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#.
+#: fetch-pack.c:1435
+#, c-format
+msgid "expected packfile to be sent after '%s'"
+msgstr "预期在 '%s' 之后发送 packfile"
 
-#: fetch-pack.c:1420
-msgid "expected no other sections to be sent after no 'ready'"
-msgstr "在没有 'ready' 不应该发送其它小节"
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#.
+#: fetch-pack.c:1441
+#, c-format
+msgid "expected no other sections to be sent after no '%s'"
+msgstr "在没有 '%s' 后不应该发送其它小节"
 
-#: fetch-pack.c:1461
+#: fetch-pack.c:1482
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "处理浅克隆信息出错:%d"
 
-#: fetch-pack.c:1510
+#: fetch-pack.c:1531
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "预期 wanted-ref,得到 '%s'"
 
-#: fetch-pack.c:1515
+#: fetch-pack.c:1536
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "意外的 wanted-ref:'%s'"
 
-#: fetch-pack.c:1520
+#: fetch-pack.c:1541
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "处理要获取的引用出错:%d"
 
-#: fetch-pack.c:1550
+#: fetch-pack.c:1571
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack:预期响应结束包"
 
-#: fetch-pack.c:1959
+#: fetch-pack.c:1983
 msgid "no matching remote head"
 msgstr "没有匹配的远程分支"
 
-#: fetch-pack.c:1982 builtin/clone.c:581
+#: fetch-pack.c:2006 builtin/clone.c:587
 msgid "remote did not send all necessary objects"
 msgstr "远程没有发送所有必需的对象"
 
-#: fetch-pack.c:2085
+#: fetch-pack.c:2109
 msgid "unexpected 'ready' from remote"
 msgstr "来自远程的意外的 'ready'"
 
-#: fetch-pack.c:2108
+#: fetch-pack.c:2132
 #, c-format
 msgid "no such remote ref %s"
 msgstr "没有这样的远程引用 %s"
 
-#: fetch-pack.c:2111
+#: fetch-pack.c:2135
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "服务器不允许请求未公开的对象 %s"
 
-#: gpg-interface.c:329 gpg-interface.c:457 gpg-interface.c:974
-#: gpg-interface.c:990
+#: fsmonitor-ipc.c:119
+#, c-format
+msgid "fsmonitor_ipc__send_query: invalid path '%s'"
+msgstr "fsmonitor_ipc__send_query: 无效路径 '%s'"
+
+#: fsmonitor-ipc.c:125
+#, c-format
+msgid "fsmonitor_ipc__send_query: unspecified error on '%s'"
+msgstr "fsmonitor_ipc__send_query: 未知错误于 '%s'"
+
+#: fsmonitor-ipc.c:155
+msgid "fsmonitor--daemon is not running"
+msgstr "fsmonitor--daemon 没有运行"
+
+#: fsmonitor-ipc.c:164
+#, c-format
+msgid "could not send '%s' command to fsmonitor--daemon"
+msgstr "无法发送 '%s' 命令至 fsmonitor--daemon"
+
+#: gpg-interface.c:329 gpg-interface.c:456 gpg-interface.c:995
+#: gpg-interface.c:1011
 msgid "could not create temporary file"
 msgstr "不能创建临时文件"
 
-#: gpg-interface.c:332 gpg-interface.c:460
+#: gpg-interface.c:332 gpg-interface.c:459
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr "无法将分离式签名写入 '%s'"
 
-#: gpg-interface.c:451
+#: gpg-interface.c:450
 msgid ""
 "gpg.ssh.allowedSignersFile needs to be configured and exist for ssh "
 "signature verification"
 msgstr "ssh 签名验证需要 gpg.ssh.allowedSignersFile 被设置且存在"
 
-#: gpg-interface.c:480
+#: gpg-interface.c:479
 msgid ""
 "ssh-keygen -Y find-principals/verify is needed for ssh signature "
 "verification (available in openssh version 8.2p1+)"
@@ -4338,61 +4459,61 @@ msgstr ""
 "ssh 签名验证需要 ssh-keygen -Y find-principals/verify \n"
 "(openssh 8.2p1+ 版本可用)"
 
-#: gpg-interface.c:536
+#: gpg-interface.c:550
 #, c-format
 msgid "ssh signing revocation file configured but not found: %s"
 msgstr "设置了 ssh 签名吊销文件但无法找到:%s"
 
-#: gpg-interface.c:624
+#: gpg-interface.c:638
 #, c-format
 msgid "bad/incompatible signature '%s'"
 msgstr "坏的/不兼容的签名 '%s‘"
 
-#: gpg-interface.c:801 gpg-interface.c:806
+#: gpg-interface.c:815 gpg-interface.c:820
 #, c-format
 msgid "failed to get the ssh fingerprint for key '%s'"
 msgstr "无法得到密钥 '%s' 的 ssh 指纹"
 
-#: gpg-interface.c:829
+#: gpg-interface.c:843
 msgid ""
 "either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured"
 msgstr "需要配置 user.signingkey 或者 gpg.ssh.defaultKeyCommand 其中之一"
 
-#: gpg-interface.c:851
+#: gpg-interface.c:865
 #, c-format
 msgid "gpg.ssh.defaultKeyCommand succeeded but returned no keys: %s %s"
 msgstr "gpg.ssh.defaultKeyCommand 成功,但没有返回密钥:%s %s"
 
-#: gpg-interface.c:857
+#: gpg-interface.c:871
 #, c-format
 msgid "gpg.ssh.defaultKeyCommand failed: %s %s"
 msgstr "gpg.ssh.defaultKeyCommand 失败:%s %s"
 
-#: gpg-interface.c:945
+#: gpg-interface.c:966
 msgid "gpg failed to sign the data"
 msgstr "gpg 无法为数据签名"
 
-#: gpg-interface.c:967
+#: gpg-interface.c:988
 msgid "user.signingkey needs to be set for ssh signing"
 msgstr "ssh 签名需要设置 user.signingkey"
 
-#: gpg-interface.c:978
+#: gpg-interface.c:999
 #, c-format
 msgid "failed writing ssh signing key to '%s'"
 msgstr "无法将 ssh 签名密钥写入 '%s'"
 
-#: gpg-interface.c:996
+#: gpg-interface.c:1017
 #, c-format
 msgid "failed writing ssh signing key buffer to '%s'"
 msgstr "无法将 ssh 签名密钥缓冲区写入 '%s'"
 
-#: gpg-interface.c:1014
+#: gpg-interface.c:1035
 msgid ""
 "ssh-keygen -Y sign is needed for ssh signing (available in openssh version "
 "8.2p1+)"
 msgstr "ssh 签名需要 ssh-keygen -Y sign (openssh 8.2p1+ 版本可用)"
 
-#: gpg-interface.c:1026
+#: gpg-interface.c:1047
 #, c-format
 msgid "failed reading ssh signing data buffer from '%s'"
 msgstr "无法从 '%s' 读入 ssh 签名数据"
@@ -4402,7 +4523,7 @@ msgstr "无法从 '%s' 读入 ssh 签名数据"
 msgid "ignored invalid color '%.*s' in log.graphColors"
 msgstr "忽略 log.graphColors 中无效的颜色 '%.*s'"
 
-#: grep.c:531
+#: grep.c:446
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
@@ -4410,109 +4531,109 @@ msgstr ""
 "给定的模式包含 NULL 字符(通过 -f <文件> 参数)。只有 PCRE v2 下的 -P 支持此"
 "功能"
 
-#: grep.c:1942
+#: grep.c:1859
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "'%s':无法读取 %s"
 
-#: grep.c:1959 setup.c:177 builtin/clone.c:302 builtin/diff.c:90
+#: grep.c:1876 setup.c:178 builtin/clone.c:308 builtin/diff.c:90
 #: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "无法对 '%s' 调用 stat"
 
-#: grep.c:1970
+#: grep.c:1887
 #, c-format
 msgid "'%s': short read"
 msgstr "'%s':读取不完整"
 
-#: help.c:24
+#: help.c:25
 msgid "start a working area (see also: git help tutorial)"
 msgstr "开始一个工作区(参见:git help tutorial)"
 
-#: help.c:25
+#: help.c:26
 msgid "work on the current change (see also: git help everyday)"
 msgstr "在当前变更上工作(参见:git help everyday)"
 
-#: help.c:26
+#: help.c:27
 msgid "examine the history and state (see also: git help revisions)"
 msgstr "检查历史和状态(参见:git help revisions)"
 
-#: help.c:27
+#: help.c:28
 msgid "grow, mark and tweak your common history"
 msgstr "扩展、标记和调校您的历史记录"
 
-#: help.c:28
+#: help.c:29
 msgid "collaborate (see also: git help workflows)"
 msgstr "协同(参见:git help workflows)"
 
-#: help.c:32
+#: help.c:33
 msgid "Main Porcelain Commands"
 msgstr "主要的上层命令"
 
-#: help.c:33
+#: help.c:34
 msgid "Ancillary Commands / Manipulators"
 msgstr "辅助命令/操作者"
 
-#: help.c:34
+#: help.c:35
 msgid "Ancillary Commands / Interrogators"
 msgstr "辅助命令/询问者"
 
-#: help.c:35
+#: help.c:36
 msgid "Interacting with Others"
 msgstr "与其它系统交互"
 
-#: help.c:36
+#: help.c:37
 msgid "Low-level Commands / Manipulators"
 msgstr "低级命令/操作者"
 
-#: help.c:37
+#: help.c:38
 msgid "Low-level Commands / Interrogators"
 msgstr "低级命令/询问者"
 
-#: help.c:38
+#: help.c:39
 msgid "Low-level Commands / Syncing Repositories"
 msgstr "低级命令/同步仓库"
 
-#: help.c:39
+#: help.c:40
 msgid "Low-level Commands / Internal Helpers"
 msgstr "低级命令/内部助手"
 
-#: help.c:313
+#: help.c:316
 #, c-format
 msgid "available git commands in '%s'"
 msgstr "在 '%s' 下可用的 git 命令"
 
-#: help.c:320
+#: help.c:323
 msgid "git commands available from elsewhere on your $PATH"
 msgstr "在 $PATH 路径中的其他地方可用的 git 命令"
 
-#: help.c:329
+#: help.c:332
 msgid "These are common Git commands used in various situations:"
 msgstr "这些是各种场合常见的 Git 命令:"
 
-#: help.c:378 git.c:100
+#: help.c:382 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "不支持的命令列表类型 '%s'"
 
-#: help.c:418
+#: help.c:422
 msgid "The Git concept guides are:"
 msgstr "Git 概念向导有:"
 
-#: help.c:442
-msgid "See 'git help <command>' to read about a specific subcommand"
-msgstr "执行 'git help <command>' 来查看特定子命令"
-
-#: help.c:447
+#: help.c:446
 msgid "External commands"
 msgstr "外部命令"
 
-#: help.c:462
+#: help.c:468
 msgid "Command aliases"
 msgstr "命令别名"
 
-#: help.c:543
+#: help.c:486
+msgid "See 'git help <command>' to read about a specific subcommand"
+msgstr "执行 'git help <command>' 来了解特定子命令"
+
+#: help.c:563
 #, c-format
 msgid ""
 "'%s' appears to be a git command, but we were not\n"
@@ -4521,36 +4642,36 @@ msgstr ""
 "'%s' 像是一个 git 命令,但却无法运行。\n"
 "可能是 git-%s 受损?"
 
-#: help.c:565 help.c:662
+#: help.c:585 help.c:682
 #, c-format
 msgid "git: '%s' is not a git command. See 'git --help'."
 msgstr "git:'%s' 不是一个 git 命令。参见 'git --help'。"
 
-#: help.c:613
+#: help.c:633
 msgid "Uh oh. Your system reports no Git commands at all."
 msgstr "唉呀,您的系统中未发现 Git 命令。"
 
-#: help.c:635
+#: help.c:655
 #, c-format
 msgid "WARNING: You called a Git command named '%s', which does not exist."
 msgstr "警告:您运行了一个并不存在的 Git 命令 '%s'。"
 
-#: help.c:640
+#: help.c:660
 #, c-format
 msgid "Continuing under the assumption that you meant '%s'."
 msgstr "假定您想要的是 '%s' 并继续。"
 
-#: help.c:646
+#: help.c:666
 #, c-format
 msgid "Run '%s' instead [y/N]? "
 msgstr "取而代之运行 '%s' [y/N]?"
 
-#: help.c:654
+#: help.c:674
 #, c-format
 msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
 msgstr "假定您想要的是 '%2$s',在 %1$0.1f 秒钟后继续。"
 
-#: help.c:666
+#: help.c:686
 msgid ""
 "\n"
 "The most similar command is"
@@ -4564,16 +4685,16 @@ msgstr[1] ""
 "\n"
 "最相似的命令是"
 
-#: help.c:706
+#: help.c:729
 msgid "git version [<options>]"
 msgstr "git version [<选项>]"
 
-#: help.c:761
+#: help.c:784
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s:%s - %s"
 
-#: help.c:765
+#: help.c:788
 msgid ""
 "\n"
 "Did you mean this?"
@@ -4587,7 +4708,7 @@ msgstr[1] ""
 "\n"
 "您指的是这其中的某一个么?"
 
-#: hook.c:27
+#: hook.c:28
 #, c-format
 msgid ""
 "The '%s' hook was ignored because it's not set as executable.\n"
@@ -4596,15 +4717,20 @@ msgstr ""
 "因为没有将钩子 '%s' 设置为可执行,钩子被忽略。您可以通过\n"
 "配置 `git config advice.ignoredHook false` 来关闭这条警告。"
 
-#: ident.c:353
+#: hook.c:87
+#, c-format
+msgid "Couldn't start hook '%s'\n"
+msgstr "不能启动钩子 '%s'\n"
+
+#: ident.c:354
 msgid "Author identity unknown\n"
 msgstr "作者身份未知\n"
 
-#: ident.c:356
+#: ident.c:357
 msgid "Committer identity unknown\n"
 msgstr "提交者身份未知\n"
 
-#: ident.c:362
+#: ident.c:363
 msgid ""
 "\n"
 "*** Please tell me who you are.\n"
@@ -4629,71 +4755,71 @@ msgstr ""
 "来设置您账号的缺省身份标识。\n"
 "如果仅在本仓库设置身份标识,则省略 --global 参数。\n"
 
-#: ident.c:397
+#: ident.c:398
 msgid "no email was given and auto-detection is disabled"
 msgstr "未提供邮件地址且自动探测被禁用"
 
-#: ident.c:402
+#: ident.c:403
 #, c-format
 msgid "unable to auto-detect email address (got '%s')"
 msgstr "无法自动探测邮件地址(得到 '%s')"
 
-#: ident.c:419
+#: ident.c:420
 msgid "no name was given and auto-detection is disabled"
 msgstr "未提供姓名且自动探测被禁用"
 
-#: ident.c:425
+#: ident.c:426
 #, c-format
 msgid "unable to auto-detect name (got '%s')"
 msgstr "无法自动探测姓名(得到 '%s')"
 
-#: ident.c:433
+#: ident.c:434
 #, c-format
 msgid "empty ident name (for <%s>) not allowed"
 msgstr "不允许空的姓名(对于 <%s>)"
 
-#: ident.c:439
+#: ident.c:440
 #, c-format
 msgid "name consists only of disallowed characters: %s"
 msgstr "姓名中仅包含禁用字符:%s"
 
-#: ident.c:454 builtin/commit.c:648
+#: ident.c:455 builtin/commit.c:649
 #, c-format
 msgid "invalid date format: %s"
 msgstr "无效的日期格式:%s"
 
-#: list-objects-filter-options.c:83
+#: list-objects-filter-options.c:68
 msgid "expected 'tree:<depth>'"
 msgstr "期望 'tree:<深度>'"
 
-#: list-objects-filter-options.c:98
+#: list-objects-filter-options.c:83
 msgid "sparse:path filters support has been dropped"
 msgstr "sparse:path 过滤器支持已被删除"
 
-#: list-objects-filter-options.c:105
+#: list-objects-filter-options.c:90
 #, c-format
 msgid "'%s' for 'object:type=<type>' is not a valid object type"
 msgstr "'object:type=<type>' 的值 '%s' 不是有效的对象类型"
 
-#: list-objects-filter-options.c:124
+#: list-objects-filter-options.c:109
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "无效的过滤器表达式 '%s'"
 
-#: list-objects-filter-options.c:140
+#: list-objects-filter-options.c:125
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
 msgstr "必须对 sub-filter-spec 中的字符进行转义:'%c'"
 
-#: list-objects-filter-options.c:182
+#: list-objects-filter-options.c:167
 msgid "expected something after combine:"
 msgstr "期望在组合后有一些东西:"
 
-#: list-objects-filter-options.c:264
+#: list-objects-filter-options.c:249
 msgid "multiple filter-specs cannot be combined"
 msgstr "不能混用多种过滤规格"
 
-#: list-objects-filter-options.c:376
+#: list-objects-filter-options.c:365
 msgid "unable to upgrade repository format to support partial clone"
 msgstr "无法升级仓库格式以支持部分克隆"
 
@@ -4707,17 +4833,17 @@ msgstr "不能访问 '%s' 中的稀疏数据对象"
 msgid "unable to parse sparse filter data in %s"
 msgstr "无法解析 %s 中的稀疏过滤器数据"
 
-#: list-objects.c:127
+#: list-objects.c:144
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
 msgstr "树 %2$s 中的条目 '%1$s' 具有树的模式,但不是一个树对象"
 
-#: list-objects.c:140
+#: list-objects.c:157
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr "树 %2$s 中的条目 '%1$s' 具有数据对象的模式,但不是一个数据对象"
 
-#: list-objects.c:398
+#: list-objects.c:415
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "无法为提交 %s 加载根树"
@@ -4745,17 +4871,12 @@ msgstr ""
 msgid "Unable to create '%s.lock': %s"
 msgstr "不能创建 '%s.lock':%s"
 
-#: ls-refs.c:37
-#, c-format
-msgid "invalid value '%s' for lsrefs.unborn"
-msgstr "lsrefs.unborn 的取值 '%s' 无效"
-
-#: ls-refs.c:174
+#: ls-refs.c:175
 #, c-format
 msgid "unexpected line: '%s'"
 msgstr "意外的行:'%s'"
 
-#: ls-refs.c:178
+#: ls-refs.c:179
 msgid "expected flush after ls-refs arguments"
 msgstr "在 ls-refs 参数后应该有一个 flush 包"
 
@@ -4763,37 +4884,37 @@ msgstr "在 ls-refs 参数后应该有一个 flush 包"
 msgid "quoted CRLF detected"
 msgstr "检测到被引用的 CRLF"
 
-#: mailinfo.c:1254 builtin/am.c:184 builtin/mailinfo.c:46
+#: mailinfo.c:1254 builtin/am.c:185 builtin/mailinfo.c:46
 #, c-format
 msgid "bad action '%s' for '%s'"
 msgstr "'%2$s' 的错误动作 '%1$s'"
 
-#: merge-ort.c:1584 merge-recursive.c:1211
+#: merge-ort.c:1630 merge-recursive.c:1214
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "无法合并子模组 %s (没有检出)"
 
-#: merge-ort.c:1593 merge-recursive.c:1218
+#: merge-ort.c:1639 merge-recursive.c:1221
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "无法合并子模组 %s(提交不存在)"
 
-#: merge-ort.c:1602 merge-recursive.c:1225
+#: merge-ort.c:1648 merge-recursive.c:1228
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr "无法合并子模组 %s (提交未跟随合并基线)"
 
-#: merge-ort.c:1612 merge-ort.c:1620
+#: merge-ort.c:1658 merge-ort.c:1666
 #, c-format
 msgid "Note: Fast-forwarding submodule %s to %s"
 msgstr "注意:快进子模组 %s 到 %s"
 
-#: merge-ort.c:1642
+#: merge-ort.c:1688
 #, c-format
 msgid "Failed to merge submodule %s"
 msgstr "无法合并子模组 %s"
 
-#: merge-ort.c:1649
+#: merge-ort.c:1695
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but a possible merge resolution exists:\n"
@@ -4802,7 +4923,7 @@ msgstr ""
 "无法合并子模组 %s,但是存在一个可能的合并方案:\n"
 "%s\n"
 
-#: merge-ort.c:1653 merge-recursive.c:1281
+#: merge-ort.c:1699 merge-recursive.c:1284
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -4818,7 +4939,7 @@ msgstr ""
 "\n"
 "以接受此建议。\n"
 
-#: merge-ort.c:1666
+#: merge-ort.c:1712
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but multiple possible merges exist:\n"
@@ -4827,21 +4948,21 @@ msgstr ""
 "无法合并子模组 %s,但是存在多个可能的合并:\n"
 "%s"
 
-#: merge-ort.c:1887 merge-recursive.c:1372
+#: merge-ort.c:1937 merge-recursive.c:1375
 msgid "Failed to execute internal merge"
 msgstr "无法执行内部合并"
 
-#: merge-ort.c:1892 merge-recursive.c:1377
+#: merge-ort.c:1942 merge-recursive.c:1380
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "不能添加 %s 至对象库"
 
-#: merge-ort.c:1899 merge-recursive.c:1410
+#: merge-ort.c:1949 merge-recursive.c:1413
 #, c-format
 msgid "Auto-merging %s"
 msgstr "自动合并 %s"
 
-#: merge-ort.c:2038 merge-recursive.c:2132
+#: merge-ort.c:2088 merge-recursive.c:2135
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -4850,7 +4971,7 @@ msgstr ""
 "冲突(隐式目录重命名):处于隐式目录重命名的现存文件/目录 %s,将以下路径放"
 "在:%s。"
 
-#: merge-ort.c:2048 merge-recursive.c:2142
+#: merge-ort.c:2098 merge-recursive.c:2145
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -4859,7 +4980,7 @@ msgstr ""
 "冲突(隐式目录重命名):无法映射一个以上路径到 %s,隐式目录重命名尝试将这些路"
 "径放置于此:%s"
 
-#: merge-ort.c:2106
+#: merge-ort.c:2156
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to rename %s to; it was "
@@ -4869,14 +4990,14 @@ msgstr ""
 "冲突(分割的目录重命名):不清楚重命名 %s 到哪里,因为它被重命名到多个其他目"
 "录中,没有一个目标目录中包含多数文件。"
 
-#: merge-ort.c:2260 merge-recursive.c:2478
+#: merge-ort.c:2310 merge-recursive.c:2481
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
 "renamed."
 msgstr "警告:避免应用 %s -> %s 的重命名到 %s,因为 %s 本身已被重命名。"
 
-#: merge-ort.c:2400 merge-recursive.c:3261
+#: merge-ort.c:2450 merge-recursive.c:3264
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
@@ -4884,7 +5005,7 @@ msgid ""
 msgstr ""
 "路径已更新:%s 添加到 %s,位于一个被重命名到 %s 的目录中,将其移动到 %s。"
 
-#: merge-ort.c:2407 merge-recursive.c:3268
+#: merge-ort.c:2457 merge-recursive.c:3271
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
@@ -4893,7 +5014,7 @@ msgstr ""
 "路径已更新:%1$s 重命名为 %3$s 中的 %2$s,而该目录被重命名到 %4$s 中,将其移"
 "动到 %5$s。"
 
-#: merge-ort.c:2420 merge-recursive.c:3264
+#: merge-ort.c:2470 merge-recursive.c:3267
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed "
@@ -4902,7 +5023,7 @@ msgstr ""
 "冲突(文件位置):%s 添加到 %s,位于一个被重命名为 %s 的目录中,建议将其移动"
 "到 %s。"
 
-#: merge-ort.c:2428 merge-recursive.c:3271
+#: merge-ort.c:2478 merge-recursive.c:3274
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
@@ -4911,13 +5032,13 @@ msgstr ""
 "冲突(文件位置):%1$s 重命名为 %3$s 中的 %2$s,而该目录被重命名到 %4$s 中,"
 "建议将其移动到 %5$s。"
 
-#: merge-ort.c:2584
+#: merge-ort.c:2634
 #, c-format
 msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
 msgstr ""
 "冲突(重命名/重命名):%1$s 重命名为 %3$s 中的 %2$s,以及在 %5$s 中的 %4$s。"
 
-#: merge-ort.c:2679
+#: merge-ort.c:2729
 #, c-format
 msgid ""
 "CONFLICT (rename involved in collision): rename of %s -> %s has content "
@@ -4927,29 +5048,29 @@ msgstr ""
 "冲突(重命名卷入冲突):重命名 %s -> %s 有内容冲突并且和另外一个路径碰撞,这"
 "可能导致嵌套的冲突标签。"
 
-#: merge-ort.c:2698 merge-ort.c:2722
+#: merge-ort.c:2748 merge-ort.c:2772
 #, c-format
 msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
 msgstr "冲突(重命名/删除):%1$s 在 %3$s 中重命名为 %2$s,但在 %4$s 中删除。"
 
-#: merge-ort.c:3212 merge-recursive.c:3022
+#: merge-ort.c:3261 merge-recursive.c:3025
 #, c-format
 msgid "cannot read object %s"
 msgstr "不能读取对象 %s"
 
-#: merge-ort.c:3215 merge-recursive.c:3025
+#: merge-ort.c:3264 merge-recursive.c:3028
 #, c-format
 msgid "object %s is not a blob"
 msgstr "对象 %s 不是一个数据对象"
 
-#: merge-ort.c:3644
+#: merge-ort.c:3693
 #, c-format
 msgid ""
 "CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
 "%s instead."
 msgstr "冲突(文件/目录):目录已存在于 %2$s 中的 %1$s,将其移动到 %3$s。"
 
-#: merge-ort.c:3721
+#: merge-ort.c:3770
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed both "
@@ -4958,7 +5079,7 @@ msgstr ""
 "冲突(不同类型):%s 在两侧有不同的类型,将两者都重命名以便它们能记录在不同位"
 "置。"
 
-#: merge-ort.c:3728
+#: merge-ort.c:3777
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed one "
@@ -4967,24 +5088,24 @@ msgstr ""
 "冲突(不同类型):%s 在两侧有不同的类型,将其中之一重命名以便它们能记录在不同"
 "位置。"
 
-#: merge-ort.c:3819 merge-recursive.c:3101
+#: merge-ort.c:3866 merge-recursive.c:3104
 msgid "content"
 msgstr "内容"
 
-#: merge-ort.c:3821 merge-recursive.c:3105
+#: merge-ort.c:3868 merge-recursive.c:3108
 msgid "add/add"
 msgstr "添加/添加"
 
-#: merge-ort.c:3823 merge-recursive.c:3150
+#: merge-ort.c:3870 merge-recursive.c:3153
 msgid "submodule"
 msgstr "子模组"
 
-#: merge-ort.c:3825 merge-recursive.c:3151
+#: merge-ort.c:3872 merge-recursive.c:3154
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "冲突(%s):合并冲突于 %s"
 
-#: merge-ort.c:3869
+#: merge-ort.c:3916
 #, c-format
 msgid ""
 "CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
@@ -4993,7 +5114,7 @@ msgstr ""
 "冲突(修改/删除):%1$s 在 %2$s 中被删除,在 %3$s 中被修改。%5$s 的 %4$s 版本"
 "在树中被保留。"
 
-#: merge-ort.c:4165
+#: merge-ort.c:4212
 #, c-format
 msgid ""
 "Note: %s not up to date and in way of checking out conflicted version; old "
@@ -5003,12 +5124,12 @@ msgstr "注意:%s 不是最新的,并且与要检出的版本冲突。旧副
 #. TRANSLATORS: The %s arguments are: 1) tree hash of a merge
 #. base, and 2-3) the trees for the two trees we're merging.
 #.
-#: merge-ort.c:4534
+#: merge-ort.c:4586
 #, c-format
 msgid "collecting merge info failed for trees %s, %s, %s"
 msgstr "无法收集树 %s、%s、%s 的合并信息"
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3716
+#: merge-ort-wrappers.c:13 merge-recursive.c:3723
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -5017,7 +5138,7 @@ msgstr ""
 "您对下列文件的本地修改将被合并操作覆盖:\n"
 "  %s"
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3482 builtin/merge.c:405
+#: merge-ort-wrappers.c:33 merge-recursive.c:3485 builtin/merge.c:405
 msgid "Already up to date."
 msgstr "已经是最新的。"
 
@@ -5054,7 +5175,7 @@ msgstr ":可能是一个目录/文件冲突?"
 msgid "refusing to lose untracked file at '%s'"
 msgstr "拒绝丢弃 '%s' 中的未跟踪文件"
 
-#: merge-recursive.c:956 builtin/cat-file.c:41
+#: merge-recursive.c:956 builtin/cat-file.c:47
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "不能读取对象 %s '%s'"
@@ -5079,41 +5200,41 @@ msgstr "无法创建符号链接 '%s':%s"
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "不知道如何处理 %06o %s '%s'"
 
-#: merge-recursive.c:1233 merge-recursive.c:1246
+#: merge-recursive.c:1236 merge-recursive.c:1249
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "子模组 %s 快进到如下提交:"
 
-#: merge-recursive.c:1236 merge-recursive.c:1249
+#: merge-recursive.c:1239 merge-recursive.c:1252
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "快进子模组 %s"
 
-#: merge-recursive.c:1273
+#: merge-recursive.c:1276
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr "无法合并子模组 %s (没发现合并跟随的提交)"
 
-#: merge-recursive.c:1277
+#: merge-recursive.c:1280
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "无法合并子模组 %s(非快进)"
 
-#: merge-recursive.c:1278
+#: merge-recursive.c:1281
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "找到子模组的一个可能的合并方案:\n"
 
-#: merge-recursive.c:1290
+#: merge-recursive.c:1293
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr "无法合并子模组 %s (发现多个合并)"
 
-#: merge-recursive.c:1434
+#: merge-recursive.c:1437
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr "错误:拒绝丢失未跟踪文件 '%s',而是写入 %s。"
 
-#: merge-recursive.c:1506
+#: merge-recursive.c:1509
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5122,7 +5243,7 @@ msgstr ""
 "冲突(%1$s/删除):%2$s 在 %3$s 中被删除,在 %5$s 中被 %4$s。%7$s 的 %6$s 版"
 "本被保留。"
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1514
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5131,7 +5252,7 @@ msgstr ""
 "冲突(%1$s/删除):%2$s 在 %3$s 中被删除,在 %6$s 中的 %5$s 被 %4$s。%8$s 的 "
 "%7$s 版本被保留。"
 
-#: merge-recursive.c:1518
+#: merge-recursive.c:1521
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5140,7 +5261,7 @@ msgstr ""
 "冲突(%1$s/删除):%2$s 在 %3$s 中被删除,在 %5$s 中被 %4$s。%7$s 的 %6$s 版"
 "本保留在 %8$s 中。"
 
-#: merge-recursive.c:1523
+#: merge-recursive.c:1526
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5149,60 +5270,60 @@ msgstr ""
 "冲突(%1$s/删除):%2$s 在 %3$s 中被删除,在 %6$s 中的 %5$s 被 %4$s。%8$s 的 "
 "%7$s 版本保留在 %9$s 中。"
 
-#: merge-recursive.c:1558
+#: merge-recursive.c:1561
 msgid "rename"
 msgstr "重命名"
 
-#: merge-recursive.c:1558
+#: merge-recursive.c:1561
 msgid "renamed"
 msgstr "重命名"
 
-#: merge-recursive.c:1609 merge-recursive.c:2515 merge-recursive.c:3178
+#: merge-recursive.c:1612 merge-recursive.c:2518 merge-recursive.c:3181
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "拒绝丢失脏文件 '%s'"
 
-#: merge-recursive.c:1619
+#: merge-recursive.c:1622
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr "拒绝在 '%s' 处失去未跟踪文件,即使它存在于重命名中。"
 
-#: merge-recursive.c:1677
+#: merge-recursive.c:1680
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr "冲突(重命名/添加):在 %3$s 中重命名 %1$s->%2$s。在 %5$s 中添加 %4$s"
 
-#: merge-recursive.c:1708
+#: merge-recursive.c:1711
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s 是 %s 中的一个目录而以 %s 为名被添加"
 
-#: merge-recursive.c:1713
+#: merge-recursive.c:1716
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr "拒绝丢失未跟踪文件 '%s',而是添加为 %s"
 
-#: merge-recursive.c:1740
+#: merge-recursive.c:1743
 #, c-format
 msgid ""
-"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
-"\"->\"%s\" in \"%s\"%s"
+"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename "
+"\"%s\"->\"%s\" in \"%s\"%s"
 msgstr ""
 "冲突(重命名/重命名):在分支 \"%3$s\" 中重命名 \"%1$s\"->\"%2$s\",在分支 "
 "\"%6$s\" 中重命名 \"%4$s\"->\"%5$s\"%7$s"
 
-#: merge-recursive.c:1745
+#: merge-recursive.c:1748
 msgid " (left unresolved)"
 msgstr "(留下未解决)"
 
-#: merge-recursive.c:1837
+#: merge-recursive.c:1840
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
-"冲突(重命名/重命名):在 %3$s 中重命名 %1$s->%2$s,在 %6$s 中重命名 %4$s->"
-"%5$s"
+"冲突(重命名/重命名):在 %3$s 中重命名 %1$s->%2$s,在 %6$s 中重命名 %4$s-"
+">%5$s"
 
-#: merge-recursive.c:2100
+#: merge-recursive.c:2103
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -5212,7 +5333,7 @@ msgstr ""
 "冲突(分割的目录重命名):不清楚 %s 应该放在哪里,因为目录 %s 被重命名到多个"
 "其它目录,没有目录包含大部分文件。"
 
-#: merge-recursive.c:2234
+#: merge-recursive.c:2237
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -5221,78 +5342,78 @@ msgstr ""
 "冲突(重命名/重命名):在 %3$s 中重命名目录 %1$s->%2$s,在 %6$s 中重命名目录 "
 "%4$s->%5$s"
 
-#: merge-recursive.c:3089
+#: merge-recursive.c:3092
 msgid "modify"
 msgstr "修改"
 
-#: merge-recursive.c:3089
+#: merge-recursive.c:3092
 msgid "modified"
 msgstr "修改"
 
-#: merge-recursive.c:3128
+#: merge-recursive.c:3131
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "略过 %s(已经做过相同合并)"
 
-#: merge-recursive.c:3181
+#: merge-recursive.c:3184
 #, c-format
 msgid "Adding as %s instead"
 msgstr "而是以 %s 为名添加"
 
-#: merge-recursive.c:3385
+#: merge-recursive.c:3388
 #, c-format
 msgid "Removing %s"
 msgstr "删除 %s"
 
-#: merge-recursive.c:3408
+#: merge-recursive.c:3411
 msgid "file/directory"
 msgstr "文件/目录"
 
-#: merge-recursive.c:3413
+#: merge-recursive.c:3416
 msgid "directory/file"
 msgstr "目录/文件"
 
-#: merge-recursive.c:3420
+#: merge-recursive.c:3423
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr "冲突(%1$s):在 %3$s 中有一个名为 %2$s 的目录。以 %5$s 为名添加 %4$s"
 
-#: merge-recursive.c:3429
+#: merge-recursive.c:3432
 #, c-format
 msgid "Adding %s"
 msgstr "添加 %s"
 
-#: merge-recursive.c:3438
+#: merge-recursive.c:3441
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "冲突(add/add):合并冲突于 %s"
 
-#: merge-recursive.c:3491
+#: merge-recursive.c:3494
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "无法合并树 %s 和 %s"
 
-#: merge-recursive.c:3585
+#: merge-recursive.c:3588
 msgid "Merging:"
 msgstr "合并:"
 
-#: merge-recursive.c:3598
+#: merge-recursive.c:3601
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "发现 %u 个共同祖先:"
 msgstr[1] "发现 %u 个共同祖先:"
 
-#: merge-recursive.c:3648
+#: merge-recursive.c:3651
 msgid "merge returned no commit"
 msgstr "合并未返回提交"
 
-#: merge-recursive.c:3816
+#: merge-recursive.c:3823
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "不能解析对象 '%s'"
 
-#: merge-recursive.c:3834 builtin/merge.c:720 builtin/merge.c:906
+#: merge-recursive.c:3841 builtin/merge.c:720 builtin/merge.c:912
 #: builtin/stash.c:489
 msgid "Unable to write index."
 msgstr "不能写入索引。"
@@ -5301,221 +5422,225 @@ msgstr "不能写入索引。"
 msgid "failed to read the cache"
 msgstr "无法读取缓存"
 
-#: merge.c:102 rerere.c:704 builtin/am.c:1988 builtin/am.c:2022
-#: builtin/checkout.c:598 builtin/checkout.c:853 builtin/clone.c:706
+#: merge.c:102 rerere.c:705 builtin/am.c:1989 builtin/am.c:2023
+#: builtin/checkout.c:603 builtin/checkout.c:865 builtin/clone.c:714
 #: builtin/stash.c:269
 msgid "unable to write new index file"
 msgstr "无法写新的索引文件"
 
-#: midx.c:78
+#: midx.c:79
 msgid "multi-pack-index OID fanout is of the wrong size"
 msgstr "多包索引的对象ID扇出表大小错误"
 
-#: midx.c:111
+#: midx.c:112
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "多包索引文件 %s 太小"
 
-#: midx.c:127
+#: midx.c:128
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr "多包索引签名 0x%08x 和签名 0x%08x 不匹配"
 
-#: midx.c:132
+#: midx.c:133
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "multi-pack-index 版本 %d 不能被识别"
 
-#: midx.c:137
+#: midx.c:138
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr "多包索引哈希版本 %u 和版本 %u 不匹配"
 
-#: midx.c:154
+#: midx.c:155
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "多包索引缺少必需的包名块"
 
-#: midx.c:156
+#: midx.c:157
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "多包索引缺少必需的对象 ID 扇出块"
 
-#: midx.c:158
+#: midx.c:159
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "多包索引缺少必需的对象 ID 查询块"
 
-#: midx.c:160
+#: midx.c:161
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "多包索引缺少必需的对象偏移块"
 
-#: midx.c:176
+#: midx.c:180
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr "多包索引包名无序:'%s' 在 '%s' 之前"
 
-#: midx.c:224
+#: midx.c:228
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "错的 pack-int-id:%u(共有 %u 个包)"
 
-#: midx.c:274
+#: midx.c:278
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr "多包索引存储一个64位偏移,但是 off_t 太小"
 
-#: midx.c:505
+#: midx.c:509
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "无法添加包文件 '%s'"
 
-#: midx.c:511
+#: midx.c:515
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "无法打开包索引 '%s'"
 
-#: midx.c:579
+#: midx.c:583
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "无法在包文件中定位对象 %d"
 
-#: midx.c:895
+#: midx.c:911
 msgid "cannot store reverse index file"
 msgstr "无法存储反向索引文件"
 
-#: midx.c:993
+#: midx.c:1009
 #, c-format
 msgid "could not parse line: %s"
 msgstr "不能解析行:%s"
 
-#: midx.c:995
+#: midx.c:1011
 #, c-format
 msgid "malformed line: %s"
 msgstr "格式错误的行:%s"
 
-#: midx.c:1162
+#: midx.c:1181
 msgid "ignoring existing multi-pack-index; checksum mismatch"
 msgstr "忽略已存在的多包索引,校验码不匹配"
 
-#: midx.c:1187
+#: midx.c:1206
 msgid "could not load pack"
 msgstr "不能载入包"
 
-#: midx.c:1193
+#: midx.c:1212
 #, c-format
 msgid "could not open index for %s"
 msgstr "不能打开 %s 的索引"
 
-#: midx.c:1204
+#: midx.c:1223
 msgid "Adding packfiles to multi-pack-index"
 msgstr "添加包文件到多包索引"
 
-#: midx.c:1247
+#: midx.c:1266
 #, c-format
 msgid "unknown preferred pack: '%s'"
 msgstr "未知的首选包:'%s'"
 
-#: midx.c:1292
+#: midx.c:1311
 #, c-format
 msgid "cannot select preferred pack %s with no objects"
 msgstr "不能选择没有对象的首选包 %s"
 
-#: midx.c:1324
+#: midx.c:1343
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "没有看到要丢弃的包文件 %s"
 
-#: midx.c:1370
+#: midx.c:1389
 #, c-format
 msgid "preferred pack '%s' is expired"
 msgstr "首选包 '%s' 已过期"
 
-#: midx.c:1383
+#: midx.c:1402
 msgid "no pack files to index."
 msgstr "没有要索引的包文件。"
 
-#: midx.c:1420
+#: midx.c:1409
+msgid "refusing to write multi-pack .bitmap without any objects"
+msgstr "拒绝写入没有任何对象的多包位图 .bitmap"
+
+#: midx.c:1451
 msgid "could not write multi-pack bitmap"
 msgstr "无法写入多包位图"
 
-#: midx.c:1430
+#: midx.c:1461
 msgid "could not write multi-pack-index"
 msgstr "无法写入多包索引"
 
-#: midx.c:1489 builtin/clean.c:37
+#: midx.c:1520 builtin/clean.c:37
 #, c-format
 msgid "failed to remove %s"
 msgstr "无法删除 %s"
 
-#: midx.c:1522
+#: midx.c:1553
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "无法清理位于 %s 的多包索引"
 
-#: midx.c:1585
+#: midx.c:1616
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr "多包索引文件存在,但无法解析"
 
-#: midx.c:1593
+#: midx.c:1624
 msgid "incorrect checksum"
 msgstr "不正确的校验码"
 
-#: midx.c:1596
+#: midx.c:1627
 msgid "Looking for referenced packfiles"
 msgstr "正在查找引用的包文件"
 
-#: midx.c:1611
+#: midx.c:1642
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr "对象 ID 扇出无序:fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 
-#: midx.c:1616
+#: midx.c:1647
 msgid "the midx contains no oid"
 msgstr "midx 不包含 oid"
 
-#: midx.c:1625
+#: midx.c:1656
 msgid "Verifying OID order in multi-pack-index"
 msgstr "校验多包索引中的 OID 顺序"
 
-#: midx.c:1634
+#: midx.c:1665
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "对象 ID 查询无序:oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1654
+#: midx.c:1685
 msgid "Sorting objects by packfile"
 msgstr "通过包文件为对象排序"
 
-#: midx.c:1661
+#: midx.c:1692
 msgid "Verifying object offsets"
 msgstr "校验对象偏移"
 
-#: midx.c:1677
+#: midx.c:1708
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "无法为 oid[%d] = %s 加载包条目"
 
-#: midx.c:1683
+#: midx.c:1714
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "无法为包文件 %s 加载包索引"
 
-#: midx.c:1692
+#: midx.c:1723
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "oid[%d] = %s 错误的对象偏移:%<PRIx64> != %<PRIx64>"
 
-#: midx.c:1719
+#: midx.c:1750
 msgid "Counting referenced objects"
 msgstr "正在对引用对象计数"
 
-#: midx.c:1729
+#: midx.c:1760
 msgid "Finding and deleting unreferenced packfiles"
 msgstr "正在查找和删除未引用的包文件"
 
-#: midx.c:1921
+#: midx.c:1952
 msgid "could not start pack-objects"
 msgstr "不能开始 pack-objects"
 
-#: midx.c:1941
+#: midx.c:1972
 msgid "could not finish pack-objects"
 msgstr "不能结束 pack-objects"
 
@@ -5534,7 +5659,7 @@ msgstr "不能创建 lazy_name 线程:%s"
 msgid "unable to join lazy_name thread: %s"
 msgstr "不能加入 lazy_name 线程:%s"
 
-#: notes-merge.c:277
+#: notes-merge.c:276
 #, c-format
 msgid ""
 "You have not concluded your previous notes merge (%s exists).\n"
@@ -5545,7 +5670,7 @@ msgstr ""
 "在开始一个新的注释合并之前,请使用 'git notes merge --commit' 或者 'git "
 "notes merge --abort' 来提交/终止前一次合并。"
 
-#: notes-merge.c:284
+#: notes-merge.c:283
 #, c-format
 msgid "You have not concluded your notes merge (%s exists)."
 msgstr "您尚未结束注释合并(存在 %s)。"
@@ -5573,271 +5698,342 @@ msgstr "拒绝向 %s(在 refs/notes/ 之外)写入注解"
 msgid "Bad %s value: '%s'"
 msgstr "坏的 %s 值:'%s'"
 
-#: object-file.c:456
+#: object-file.c:457
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr "对象目录 %s 不存在,检查 .git/objects/info/alternates"
 
-#: object-file.c:514
+#: object-file.c:515
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr "无法规范化备用对象路径:%s"
 
-#: object-file.c:588
+#: object-file.c:589
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr "%s:忽略备用对象库,嵌套太深"
 
-#: object-file.c:595
+#: object-file.c:596
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr "无法规范化对象目录: %s"
 
-#: object-file.c:638
+#: object-file.c:639
 msgid "unable to fdopen alternates lockfile"
 msgstr "无法 fdopen 替换锁文件"
 
-#: object-file.c:656
+#: object-file.c:657
 msgid "unable to read alternates file"
 msgstr "无法读取替代文件"
 
-#: object-file.c:663
+#: object-file.c:664
 msgid "unable to move new alternates file into place"
 msgstr "无法将新的替代文件移动到位"
 
-#: object-file.c:741
+#: object-file.c:742
 #, c-format
 msgid "path '%s' does not exist"
 msgstr "路径 '%s' 不存在"
 
-#: object-file.c:762
+#: object-file.c:763
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr "尚不支持将参考仓库 '%s' 作为一个链接检出。"
 
-#: object-file.c:768
+#: object-file.c:769
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "参考仓库 '%s' 不是一个本地仓库。"
 
-#: object-file.c:774
+#: object-file.c:775
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr "参考仓库 '%s' 是一个浅克隆"
 
-#: object-file.c:782
+#: object-file.c:783
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr "参考仓库 '%s' 已被移植"
 
-#: object-file.c:813
+#: object-file.c:814
 #, c-format
 msgid "could not find object directory matching %s"
 msgstr "无法找到和 %s 匹配的对象目录"
 
-#: object-file.c:863
+#: object-file.c:864
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr "解析备用引用时无效的行:%s"
 
-#: object-file.c:1013
+#: object-file.c:1014
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr "尝试 mmap %<PRIuMAX>,超过了最大值 %<PRIuMAX>"
 
-#: object-file.c:1048
+#: object-file.c:1049
 #, c-format
 msgid "mmap failed%s"
 msgstr "mmap 失败%s"
 
-#: object-file.c:1214
+#: object-file.c:1230
 #, c-format
 msgid "object file %s is empty"
 msgstr "对象文件 %s 为空"
 
-#: object-file.c:1333 object-file.c:2542
+#: object-file.c:1349 object-file.c:2588
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr "损坏的松散对象 '%s'"
 
-#: object-file.c:1335 object-file.c:2546
+#: object-file.c:1351 object-file.c:2592
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr "松散对象 '%s' 后面有垃圾数据"
 
-#: object-file.c:1457
+#: object-file.c:1473
 #, c-format
 msgid "unable to parse %s header"
 msgstr "无法解析 %s 头部"
 
-#: object-file.c:1459
+#: object-file.c:1475
 msgid "invalid object type"
 msgstr "无效的对象类型"
 
-#: object-file.c:1470
+#: object-file.c:1486
 #, c-format
 msgid "unable to unpack %s header"
 msgstr "无法解开 %s 头部"
 
-#: object-file.c:1474
+#: object-file.c:1490
 #, c-format
 msgid "header for %s too long, exceeds %d bytes"
 msgstr "%s 的头部太长,超出了 %d 字节"
 
-#: object-file.c:1704
+#: object-file.c:1720
 #, c-format
 msgid "failed to read object %s"
 msgstr "无法读取对象 %s"
 
-#: object-file.c:1708
+#: object-file.c:1724
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr "找不到 %2$s 的替代 %1$s"
 
-#: object-file.c:1712
+#: object-file.c:1728
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr "松散对象 %s(保存在 %s)已损坏"
 
-#: object-file.c:1716
+#: object-file.c:1732
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr "打包对象 %s(保存在 %s)已损坏"
 
-#: object-file.c:1821
+#: object-file.c:1855
 #, c-format
 msgid "unable to write file %s"
 msgstr "无法写文件 %s"
 
-#: object-file.c:1828
+#: object-file.c:1862
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr "无法为 '%s' 设置权限"
 
-#: object-file.c:1835
+#: object-file.c:1869
 msgid "file write error"
 msgstr "文件写错误"
 
-#: object-file.c:1858
+#: object-file.c:1904
 msgid "error when closing loose object file"
 msgstr "关闭松散对象文件时出错"
 
-#: object-file.c:1925
+#: object-file.c:1971
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr "权限不足,无法在仓库对象库 %s 中添加对象"
 
-#: object-file.c:1927
+#: object-file.c:1973
 msgid "unable to create temporary file"
 msgstr "无法创建临时文件"
 
-#: object-file.c:1951
+#: object-file.c:1997
 msgid "unable to write loose object file"
 msgstr "不能写松散对象文件"
 
-#: object-file.c:1957
+#: object-file.c:2003
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr "不能压缩新对象 %s(%d)"
 
-#: object-file.c:1961
+#: object-file.c:2007
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr "在对象 %s 上调用 deflateEnd 失败(%d)"
 
-#: object-file.c:1965
+#: object-file.c:2011
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr "被 %s 的不稳定对象源数据搞糊涂了"
 
-#: object-file.c:1976 builtin/pack-objects.c:1243
+#: object-file.c:2022 builtin/pack-objects.c:1251
 #, c-format
 msgid "failed utime() on %s"
 msgstr "在 %s 上调用 utime() 失败"
 
-#: object-file.c:2054
+#: object-file.c:2100
 #, c-format
 msgid "cannot read object for %s"
 msgstr "不能读取对象 %s"
 
-#: object-file.c:2105
+#: object-file.c:2151
 msgid "corrupt commit"
 msgstr "损坏的提交"
 
-#: object-file.c:2113
+#: object-file.c:2159
 msgid "corrupt tag"
 msgstr "损坏的标签"
 
-#: object-file.c:2213
+#: object-file.c:2259
 #, c-format
 msgid "read error while indexing %s"
 msgstr "索引 %s 时读取错误"
 
-#: object-file.c:2216
+#: object-file.c:2262
 #, c-format
 msgid "short read while indexing %s"
 msgstr "索引 %s 时读入不完整"
 
-#: object-file.c:2289 object-file.c:2299
+#: object-file.c:2335 object-file.c:2345
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr "%s:无法插入数据库"
 
-#: object-file.c:2305
+#: object-file.c:2351
 #, c-format
 msgid "%s: unsupported file type"
 msgstr "%s:不支持的文件类型"
 
-#: object-file.c:2329 builtin/fetch.c:1453
+#: object-file.c:2375 builtin/fetch.c:1494
 #, c-format
 msgid "%s is not a valid object"
 msgstr "%s 不是一个有效的对象"
 
-#: object-file.c:2331
+#: object-file.c:2377
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "%s 不是一个有效的 '%s' 对象"
 
-#: object-file.c:2358
+#: object-file.c:2404
 #, c-format
 msgid "unable to open %s"
 msgstr "不能打开 %s"
 
-#: object-file.c:2553
+#: object-file.c:2599
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr "%s 的哈希值不匹配(预期 %s)"
 
-#: object-file.c:2576
+#: object-file.c:2622
 #, c-format
 msgid "unable to mmap %s"
 msgstr "不能 mmap %s"
 
-#: object-file.c:2582
+#: object-file.c:2628
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr "无法解压缩 %s 的头部"
 
-#: object-file.c:2587
+#: object-file.c:2633
 #, c-format
 msgid "unable to parse header of %s"
 msgstr "无法解析 %s 的头部"
 
-#: object-file.c:2598
+#: object-file.c:2644
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr "无法解压缩 %s 的内容"
 
-#: object-name.c:480
+#. TRANSLATORS: This is a line of ambiguous object
+#. output shown when we cannot look up or parse the
+#. object in question. E.g. "deadbeef [bad object]".
+#.
+#: object-name.c:382
+#, c-format
+msgid "%s [bad object]"
+msgstr "%s [坏的对象]"
+
+#. TRANSLATORS: This is a line of ambiguous commit
+#. object output. E.g.:
+#. *
+#.    "deadbeef commit 2021-01-01 - Some Commit Message"
+#.
+#: object-name.c:407
+#, c-format
+msgid "%s commit %s - %s"
+msgstr "%s 提交 %s - %s"
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output. E.g.:
+#. *
+#.    "deadbeef tag 2022-01-01 - Some Tag Message"
+#. *
+#. The second argument is the YYYY-MM-DD found
+#. in the tag.
+#. *
+#. The third argument is the "tag" string
+#. from object.c.
+#.
+#: object-name.c:428
+#, c-format
+msgid "%s tag %s - %s"
+msgstr "%s 标签 %s - %s"
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output where we couldn't parse
+#. the tag itself. E.g.:
+#. *
+#.    "deadbeef [bad tag, could not parse it]"
+#.
+#: object-name.c:439
+#, c-format
+msgid "%s [bad tag, could not parse it]"
+msgstr "%s [坏的标签,无法解析]"
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef tree".
+#.
+#: object-name.c:447
+#, c-format
+msgid "%s tree"
+msgstr "%s 树"
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef blob".
+#.
+#: object-name.c:453
+#, c-format
+msgid "%s blob"
+msgstr "%s 数据对象"
+
+#: object-name.c:569
 #, c-format
 msgid "short object ID %s is ambiguous"
 msgstr "短对象ID %s 存在歧义"
 
-#: object-name.c:491
-msgid "The candidates are:"
-msgstr "候选者有:"
+#. TRANSLATORS: The argument is the list of ambiguous
+#. objects composed in show_ambiguous_object(). See
+#. its "TRANSLATORS" comments for details.
+#.
+#: object-name.c:591
+#, c-format
+msgid ""
+"The candidates are:\n"
+"%s"
+msgstr ""
+"候选者有:\n"
+"%s"
 
-#: object-name.c:790
+#: object-name.c:888
 msgid ""
 "Git normally never creates a ref that ends with 40 hex characters\n"
 "because it will be ignored when you just specify 40-hex. These refs\n"
@@ -5858,22 +6054,22 @@ msgstr ""
 "引用,可能需要删除它们。运行 \"git config advice.objectNameWarning\n"
 "false\" 命令关闭本消息通知。"
 
-#: object-name.c:910
+#: object-name.c:1008
 #, c-format
 msgid "log for '%.*s' only goes back to %s"
 msgstr "'%.*s' 的日志仅能回到 %s"
 
-#: object-name.c:918
+#: object-name.c:1016
 #, c-format
 msgid "log for '%.*s' only has %d entries"
 msgstr "'%.*s' 的日志仅有 %d 个条目"
 
-#: object-name.c:1696
+#: object-name.c:1794
 #, c-format
 msgid "path '%s' exists on disk, but not in '%.*s'"
 msgstr "路径 '%s' 在磁盘上,但是不在 '%.*s' 中"
 
-#: object-name.c:1702
+#: object-name.c:1800
 #, c-format
 msgid ""
 "path '%s' exists, but not '%s'\n"
@@ -5882,12 +6078,12 @@ msgstr ""
 "路径 '%s' 存在,而 '%s' 不存在\n"
 "提示:您的意思是 '%.*s:%s' 亦即 '%.*s:./%s'?"
 
-#: object-name.c:1711
+#: object-name.c:1809
 #, c-format
 msgid "path '%s' does not exist in '%.*s'"
 msgstr "路径 '%s' 不在 '%.*s' 中"
 
-#: object-name.c:1739
+#: object-name.c:1837
 #, c-format
 msgid ""
 "path '%s' is in the index, but not at stage %d\n"
@@ -5896,7 +6092,7 @@ msgstr ""
 "路径 '%s' 在索引中,但不在暂存区 %d 中\n"
 "提示:您的意思是 ':%d:%s'?"
 
-#: object-name.c:1755
+#: object-name.c:1853
 #, c-format
 msgid ""
 "path '%s' is in the index, but not '%s'\n"
@@ -5905,21 +6101,26 @@ msgstr ""
 "路径 '%s' 在索引中,但 '%s' 不在\n"
 "提示:您的意思是 ':%d:%s' 亦即 ':%d:./%s'?"
 
-#: object-name.c:1763
+#: object-name.c:1861
 #, c-format
 msgid "path '%s' exists on disk, but not in the index"
 msgstr "路径 '%s' 在磁盘上,但不在索引里"
 
-#: object-name.c:1765
+#: object-name.c:1863
 #, c-format
 msgid "path '%s' does not exist (neither on disk nor in the index)"
 msgstr "路径 '%s' 不存在(既不在磁盘上,也不在索引中)"
 
-#: object-name.c:1778
+#: object-name.c:1876
 msgid "relative path syntax can't be used outside working tree"
 msgstr "不能在工作区之外使用相对路径语法"
 
-#: object-name.c:1916
+#: object-name.c:1901
+#, c-format
+msgid "<object>:<path> required, only <object> '%s' given"
+msgstr "需要 <对象>:<路径>,只给出了 <对象> '%s'"
+
+#: object-name.c:2014
 #, c-format
 msgid "invalid object name '%.*s'."
 msgstr "无效的对象名 '%.*s'。"
@@ -5944,7 +6145,7 @@ msgstr "对象 %s 有未知的类型 id %d"
 msgid "unable to parse object: %s"
 msgstr "不能解析对象:%s"
 
-#: object.c:283 object.c:295
+#: object.c:283 object.c:294
 #, c-format
 msgid "hash mismatch %s"
 msgstr "哈希值与 %s 不匹配"
@@ -5953,21 +6154,21 @@ msgstr "哈希值与 %s 不匹配"
 msgid "multi-pack bitmap is missing required reverse index"
 msgstr "多包位图缺少必需的反向索引"
 
-#: pack-bitmap.c:429
+#: pack-bitmap.c:433
 msgid "load_reverse_index: could not open pack"
 msgstr "load_reverse_index:无法打开包"
 
-#: pack-bitmap.c:1069 pack-bitmap.c:1075 builtin/pack-objects.c:2424
+#: pack-bitmap.c:1072 pack-bitmap.c:1078 builtin/pack-objects.c:2432
 #, c-format
 msgid "unable to get size of %s"
 msgstr "无法得到 %s 的大小"
 
-#: pack-bitmap.c:1935
+#: pack-bitmap.c:1937
 #, c-format
 msgid "could not find %s in pack %s at offset %<PRIuMAX>"
 msgstr "在包 %2$s 偏移 %3$<PRIuMAX> 中无法找到 %1$s"
 
-#: pack-bitmap.c:1971 builtin/rev-list.c:92
+#: pack-bitmap.c:1973 builtin/rev-list.c:91
 #, c-format
 msgid "unable to get disk usage of %s"
 msgstr "无法得到 %s 的磁盘使用量"
@@ -6011,7 +6212,7 @@ msgstr "不能调用 stat:%s"
 msgid "failed to make %s readable"
 msgstr "无法设置 %s 为可读"
 
-#: pack-write.c:520
+#: pack-write.c:521
 #, c-format
 msgid "could not write '%s' promisor file"
 msgstr "无法写入 '%s' 承诺者文件"
@@ -6346,84 +6547,84 @@ msgstr "object-info:在参数之后应有一个 flush"
 msgid "Removing duplicate objects"
 msgstr "正在删除重复对象"
 
-#: range-diff.c:67
+#: range-diff.c:68
 msgid "could not start `log`"
 msgstr "不能启动 `log`"
 
-#: range-diff.c:69
+#: range-diff.c:70
 msgid "could not read `log` output"
 msgstr "不能读取 `log` 的输出"
 
-#: range-diff.c:97 sequencer.c:5602
+#: range-diff.c:98 sequencer.c:5575
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "不能解析提交 '%s'"
 
-#: range-diff.c:111
+#: range-diff.c:109
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
 "'%s'"
 msgstr "无法解析 `log` 输出的首行:不是以 'commit ' 开头:'%s'"
 
-#: range-diff.c:137
+#: range-diff.c:132
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "无法解析 git 头 '%.*s'"
 
-#: range-diff.c:304
+#: range-diff.c:300
 msgid "failed to generate diff"
 msgstr "无法生成 diff"
 
-#: range-diff.c:562 range-diff.c:564
+#: range-diff.c:558 range-diff.c:560
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "不能解析 '%s' 的日志"
 
-#: read-cache.c:723
+#: read-cache.c:737
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr "将不会添加文件别名 '%s'('%s' 已经存在于索引中)"
 
-#: read-cache.c:739
+#: read-cache.c:753
 msgid "cannot create an empty blob in the object database"
 msgstr "不能在对象数据库中创建空的数据对象"
 
-#: read-cache.c:761
+#: read-cache.c:775
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr "%s:只能添加常规文件、符号链接或 git 目录"
 
-#: read-cache.c:766 builtin/submodule--helper.c:3242
+#: read-cache.c:780 builtin/submodule--helper.c:3359
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr "'%s' 没有检出一个提交"
 
-#: read-cache.c:818
+#: read-cache.c:832
 #, c-format
 msgid "unable to index file '%s'"
 msgstr "无法索引文件 '%s'"
 
-#: read-cache.c:837
+#: read-cache.c:851
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr "无法在索引中添加 '%s'"
 
-#: read-cache.c:848
+#: read-cache.c:862
 #, c-format
 msgid "unable to stat '%s'"
 msgstr "无法对 %s 执行 stat"
 
-#: read-cache.c:1386
+#: read-cache.c:1404
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr "'%s' 看起来既是文件又是目录"
 
-#: read-cache.c:1601
+#: read-cache.c:1619
 msgid "Refresh index"
 msgstr "刷新索引"
 
-#: read-cache.c:1733
+#: read-cache.c:1751
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -6432,7 +6633,7 @@ msgstr ""
 "设置了 index.version,但是取值无效。\n"
 "使用版本 %i"
 
-#: read-cache.c:1743
+#: read-cache.c:1761
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -6441,144 +6642,148 @@ msgstr ""
 "设置了 GIT_INDEX_VERSION,但是取值无效。\n"
 "使用版本 %i"
 
-#: read-cache.c:1799
+#: read-cache.c:1817
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "坏的签名 0x%08x"
 
-#: read-cache.c:1802
+#: read-cache.c:1820
 #, c-format
 msgid "bad index version %d"
 msgstr "坏的索引版本 %d"
 
-#: read-cache.c:1811
+#: read-cache.c:1829
 msgid "bad index file sha1 signature"
 msgstr "坏的索引文件 sha1 签名"
 
-#: read-cache.c:1845
+#: read-cache.c:1863
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "索引使用不被支持的 %.4s 扩展"
 
 #      
-#: read-cache.c:1847
+#: read-cache.c:1865
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "忽略 %.4s 扩展"
 
-#: read-cache.c:1884
+#: read-cache.c:1902
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "未知的索引条目格式 0x%08x"
 
-#: read-cache.c:1900
+#: read-cache.c:1918
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "索引中靠近路径 '%s' 有错误的名称字段"
 
-#: read-cache.c:1957
+#: read-cache.c:1975
 msgid "unordered stage entries in index"
 msgstr "索引中有未排序的暂存条目"
 
-#: read-cache.c:1960
+#: read-cache.c:1978
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "合并文件 '%s' 有多个暂存条目"
 
-#: read-cache.c:1963
+#: read-cache.c:1981
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "'%s' 的未排序暂存条目"
 
-#: read-cache.c:2078 read-cache.c:2384 rerere.c:549 rerere.c:583 rerere.c:1095
-#: submodule.c:1662 builtin/add.c:600 builtin/check-ignore.c:183
-#: builtin/checkout.c:527 builtin/checkout.c:719 builtin/clean.c:1013
-#: builtin/commit.c:378 builtin/diff-tree.c:122 builtin/grep.c:519
-#: builtin/mv.c:148 builtin/reset.c:499 builtin/rm.c:293
-#: builtin/submodule--helper.c:327 builtin/submodule--helper.c:3202
+#: read-cache.c:2096 read-cache.c:2402 rerere.c:549 rerere.c:583 rerere.c:1096
+#: submodule.c:1831 builtin/add.c:586 builtin/check-ignore.c:183
+#: builtin/checkout.c:532 builtin/checkout.c:724 builtin/clean.c:1016
+#: builtin/commit.c:379 builtin/diff-tree.c:122 builtin/grep.c:521
+#: builtin/mv.c:148 builtin/reset.c:506 builtin/rm.c:293
+#: builtin/submodule--helper.c:335 builtin/submodule--helper.c:3319
 msgid "index file corrupt"
 msgstr "索引文件损坏"
 
-#: read-cache.c:2222
+#: read-cache.c:2240
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "无法创建 load_cache_entries 线程:%s"
 
-#: read-cache.c:2235
+#: read-cache.c:2253
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "无法加入 load_cache_entries 线程:%s"
 
-#: read-cache.c:2268
+#: read-cache.c:2286
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s:打开索引文件失败"
 
-#: read-cache.c:2272
+#: read-cache.c:2290
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s:不能对打开的索引执行 stat 操作"
 
-#: read-cache.c:2276
+#: read-cache.c:2294
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s:索引文件比预期的小"
 
-#: read-cache.c:2280
+#: read-cache.c:2298
 #, c-format
 msgid "%s: unable to map index file%s"
 msgstr "%s:无法映射索引文件%s"
 
-#: read-cache.c:2323
+#: read-cache.c:2341
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "无法创建 load_index_extensions 线程:%s"
 
-#: read-cache.c:2350
+#: read-cache.c:2368
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "无法加入 load_index_extensions 线程:%s"
 
-#: read-cache.c:2396
+#: read-cache.c:2414
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "无法刷新共享索引 '%s'"
 
-#: read-cache.c:2455
+#: read-cache.c:2473
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "损坏的索引,期望在 %2$s 中的 %1$s,得到 %3$s"
 
-#: read-cache.c:3086 strbuf.c:1191 wrapper.c:641 builtin/merge.c:1150
+#: read-cache.c:3032
+msgid "cannot write split index for a sparse index"
+msgstr "无法为稀疏索引写入拆分索引"
+
+#: read-cache.c:3114 strbuf.c:1192 wrapper.c:717 builtin/merge.c:1156
 #, c-format
 msgid "could not close '%s'"
 msgstr "不能关闭 '%s'"
 
-#: read-cache.c:3129
+#: read-cache.c:3157
 msgid "failed to convert to a sparse-index"
 msgstr "无法转换为稀疏索引"
 
-#: read-cache.c:3200
+#: read-cache.c:3228
 #, c-format
 msgid "could not stat '%s'"
 msgstr "不能对 '%s' 调用 stat"
 
-#: read-cache.c:3213
+#: read-cache.c:3241
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "不能打开 git 目录:%s"
 
-#: read-cache.c:3225
+#: read-cache.c:3253
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "无法删除:%s"
 
-#: read-cache.c:3254
+#: read-cache.c:3282
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "不能修复 '%s' 的权限位"
 
-#: read-cache.c:3411
+#: read-cache.c:3439
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s:不能落到暂存区 #0"
@@ -6691,9 +6896,9 @@ msgstr ""
 "然而,如果您删除全部内容,变基操作将会终止。\n"
 "\n"
 
-#: rebase-interactive.c:113 rerere.c:469 rerere.c:676 sequencer.c:3883
-#: sequencer.c:3909 sequencer.c:5708 builtin/fsck.c:328 builtin/gc.c:1791
-#: builtin/rebase.c:190
+#: rebase-interactive.c:113 rerere.c:469 rerere.c:677 sequencer.c:3879
+#: sequencer.c:3905 sequencer.c:5681 builtin/fsck.c:328 builtin/gc.c:1791
+#: builtin/rebase.c:191
 #, c-format
 msgid "could not write '%s'"
 msgstr "不能写入 '%s'"
@@ -6733,7 +6938,7 @@ msgstr ""
 msgid "%s: 'preserve' superseded by 'merges'"
 msgstr "%s:'preserve' 被 'merges' 取代"
 
-#: ref-filter.c:42 wt-status.c:2048
+#: ref-filter.c:42 wt-status.c:2057
 msgid "gone"
 msgstr "丢失"
 
@@ -6899,81 +7104,91 @@ msgstr "这个命令拒绝元素 %%(%.*s)"
 msgid "--format=%.*s cannot be used with --python, --shell, --tcl"
 msgstr "--format=%.*s 不能和 --python、--shell、--tcl 同时使用"
 
-#: ref-filter.c:1706
+#: ref-filter.c:1707
 #, c-format
 msgid "(no branch, rebasing %s)"
 msgstr "(非分支,正变基 %s)"
 
-#: ref-filter.c:1709
+#: ref-filter.c:1710
 #, c-format
 msgid "(no branch, rebasing detached HEAD %s)"
 msgstr "(非分支,正变基分离头指针 %s)"
 
-#: ref-filter.c:1712
+#: ref-filter.c:1713
 #, c-format
 msgid "(no branch, bisect started on %s)"
 msgstr "(非分支,二分查找开始于 %s)"
 
-#: ref-filter.c:1716
+#: ref-filter.c:1717
 #, c-format
 msgid "(HEAD detached at %s)"
 msgstr "(头指针在 %s 分离)"
 
-#: ref-filter.c:1719
+#: ref-filter.c:1720
 #, c-format
 msgid "(HEAD detached from %s)"
 msgstr "(头指针自 %s 分离)"
 
-#: ref-filter.c:1722
+#: ref-filter.c:1723
 msgid "(no branch)"
 msgstr "(非分支)"
 
-#: ref-filter.c:1754 ref-filter.c:1972
+#: ref-filter.c:1755 ref-filter.c:1973
 #, c-format
 msgid "missing object %s for %s"
 msgstr "缺失 %2$s 的对象 %1$s"
 
-#: ref-filter.c:1764
+#: ref-filter.c:1765
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer 失败于 %2$s 的 %1$s"
 
-#: ref-filter.c:2155
+#: ref-filter.c:2156
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "格式错误的对象 '%s'"
 
-#: ref-filter.c:2245
+#: ref-filter.c:2246
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "忽略带有错误名称 %s 的引用"
 
-#: ref-filter.c:2250 refs.c:676
+#: ref-filter.c:2251 refs.c:672
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "忽略损坏的引用 %s"
 
-#: ref-filter.c:2629
+#: ref-filter.c:2630
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "格式:缺少 %%(end) 元素"
 
-#: ref-filter.c:2740
+#: ref-filter.c:2741
 #, c-format
 msgid "malformed object name %s"
 msgstr "格式错误的对象名 %s"
 
-#: ref-filter.c:2745
+#: ref-filter.c:2746
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "选项 `%s' 必须指向一个提交"
 
-#: refs.c:261
+#: reflog.c:407
+#, c-format
+msgid "not a reflog: %s"
+msgstr "不是一个引用日志:%s"
+
+#: reflog.c:410
+#, c-format
+msgid "no reflog for '%s'"
+msgstr "没有 '%s' 的引用日志"
+
+#: refs.c:262
 #, c-format
 msgid "%s does not point to a valid object!"
 msgstr "%s 没有指向一个有效的对象!"
 
-#: refs.c:563
+#: refs.c:561
 #, c-format
 msgid ""
 "Using '%s' as the name for the initial branch. This default branch name\n"
@@ -6997,81 +7212,81 @@ msgstr ""
 "\n"
 "\tgit branch -m <name>\n"
 
-#: refs.c:585
+#: refs.c:583
 #, c-format
 msgid "could not retrieve `%s`"
 msgstr "无法获取 `%s`"
 
-#: refs.c:595
+#: refs.c:593
 #, c-format
 msgid "invalid branch name: %s = %s"
 msgstr "无效的分支名:%s = %s"
 
-#: refs.c:674
+#: refs.c:670
 #, c-format
 msgid "ignoring dangling symref %s"
 msgstr "忽略悬空符号引用 %s"
 
-#: refs.c:925
+#: refs.c:919
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "引用 %s 的日志在 %s 之后有缺口"
 
-#: refs.c:932
+#: refs.c:926
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr "引用 %s 的日志意外终止于 %s "
 
-#: refs.c:997
+#: refs.c:991
 #, c-format
 msgid "log for %s is empty"
 msgstr "%s 的日志为空"
 
-#: refs.c:1090
+#: refs.c:1086
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "拒绝更新有错误名称 '%s' 的引用"
 
-#: refs.c:1168
+#: refs.c:1164
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "对引用 '%s' 执行 update_ref 失败:%s"
 
-#: refs.c:2067
+#: refs.c:2059
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "不允许对引用 '%s' 多次更新"
 
-#: refs.c:2150
+#: refs.c:2145
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "在隔离环境中禁止更新引用"
 
-#: refs.c:2161
+#: refs.c:2156
 msgid "ref updates aborted by hook"
 msgstr "引用更新被钩子中止"
 
-#: refs.c:2269 refs.c:2299
+#: refs.c:2264 refs.c:2294
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "'%s' 已存在,无法创建 '%s'"
 
-#: refs.c:2275 refs.c:2310
+#: refs.c:2270 refs.c:2305
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "无法同时处理 '%s' 和 '%s'"
 
-#: refs/files-backend.c:1267
+#: refs/files-backend.c:1295
 #, c-format
 msgid "could not remove reference %s"
 msgstr "无法删除引用 %s"
 
-#: refs/files-backend.c:1281 refs/packed-backend.c:1549
-#: refs/packed-backend.c:1559
+#: refs/files-backend.c:1310 refs/packed-backend.c:1565
+#: refs/packed-backend.c:1575
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr "无法删除引用 %s:%s"
 
-#: refs/files-backend.c:1284 refs/packed-backend.c:1562
+#: refs/files-backend.c:1313 refs/packed-backend.c:1578
 #, c-format
 msgid "could not delete references: %s"
 msgstr "无法删除引用:%s"
@@ -7094,37 +7309,37 @@ msgstr "提供了一个以上的 receivepack,使用第一个"
 msgid "more than one uploadpack given, using the first"
 msgstr "提供了一个以上的 uploadpack,使用第一个"
 
-#: remote.c:699
+#: remote.c:698
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr "不能同时获取 %s 和 %s 至 %s"
 
-#: remote.c:703
+#: remote.c:702
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr "%s 通常跟踪 %s,而非 %s"
 
-#: remote.c:707
+#: remote.c:706
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr "%s 同时跟踪 %s 和 %s"
 
-#: remote.c:775
+#: remote.c:774
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr "模式的键 '%s' 没有 '*'"
 
-#: remote.c:785
+#: remote.c:784
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr "模式的值 '%s' 没有 '*'"
 
-#: remote.c:1192
+#: remote.c:1191
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "源引用规格 %s 没有匹配"
 
-#: remote.c:1197
+#: remote.c:1196
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr "源引用规格 %s 匹配超过一个"
@@ -7133,7 +7348,7 @@ msgstr "源引用规格 %s 匹配超过一个"
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1212
+#: remote.c:1211
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -7155,7 +7370,7 @@ msgstr ""
 "\n"
 "都不行,所以我们已放弃。您必须给出完整的引用。"
 
-#: remote.c:1232
+#: remote.c:1231
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -7165,7 +7380,7 @@ msgstr ""
 "引用规格的 <src> 是一个提交对象。您是想创建一个新的分支而向\n"
 "'%s:refs/heads/%s' 推送么?"
 
-#: remote.c:1237
+#: remote.c:1236
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -7175,7 +7390,7 @@ msgstr ""
 "引用规格的 <src> 是一个标签对象。您是想创建一个新的标签而向\n"
 "'%s:refs/tags/%s' 推送么?"
 
-#: remote.c:1242
+#: remote.c:1241
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -7185,7 +7400,7 @@ msgstr ""
 "引用规格的 <src> 是一个树对象。您是想为这个树对象创建标签而向\n"
 "'%s:refs/tags/%s' 推送么?"
 
-#: remote.c:1247
+#: remote.c:1246
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -7195,114 +7410,114 @@ msgstr ""
 "引用规格的 <src> 是一个数据对象。您是想为这个数据对象创建标签而向\n"
 "'%s:refs/tags/%s' 推送么?"
 
-#: remote.c:1283
+#: remote.c:1282
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "%s 无法被解析为分支"
 
-#: remote.c:1294
+#: remote.c:1293
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "无法删除 '%s':远程引用不存在"
 
-#: remote.c:1306
+#: remote.c:1305
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "目标引用规格 %s 匹配超过一个"
 
-#: remote.c:1313
+#: remote.c:1312
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "目标引用 %s 接收超过一个源"
 
-#: remote.c:1834 remote.c:1941
+#: remote.c:1833 remote.c:1940
 msgid "HEAD does not point to a branch"
 msgstr "HEAD 没有指向一个分支"
 
-#: remote.c:1843
+#: remote.c:1842
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "没有此分支:'%s'"
 
-#: remote.c:1846
+#: remote.c:1845
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "尚未给分支 '%s' 设置上游"
 
-#: remote.c:1852
+#: remote.c:1851
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "上游分支 '%s' 没有存储为一个远程跟踪分支"
 
-#: remote.c:1867
+#: remote.c:1866
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr "推送目标 '%s' 至远程 '%s' 没有本地跟踪分支"
 
-#: remote.c:1882
+#: remote.c:1881
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "分支 '%s' 没有设置要推送的远程服务器"
 
-#: remote.c:1892
+#: remote.c:1891
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "向 '%s' 推送引用规格未包含 '%s'"
 
-#: remote.c:1905
+#: remote.c:1904
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "推送无目标(push.default 是 'nothing')"
 
-#: remote.c:1927
+#: remote.c:1926
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "无法解析 'simple' 推送至一个单独的目标"
 
-#: remote.c:2060
+#: remote.c:2059
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "无法找到远程引用 %s"
 
-#: remote.c:2073
+#: remote.c:2072
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* 在本地忽略可笑的引用 '%s'"
 
-#: remote.c:2236
+#: remote.c:2235
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "您的分支基于 '%s',但此上游分支已经不存在。\n"
 
-#: remote.c:2240
+#: remote.c:2239
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (使用 \"git branch --unset-upstream\" 来修复)\n"
 
-#: remote.c:2243
+#: remote.c:2242
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "您的分支与上游分支 '%s' 一致。\n"
 
-#: remote.c:2247
+#: remote.c:2246
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "您的分支和 '%s' 指向不同的提交。\n"
 
-#: remote.c:2250
+#: remote.c:2249
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (使用 \"%s\" 查看详情)\n"
 
-#: remote.c:2254
+#: remote.c:2253
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "您的分支领先 '%s' 共 %d 个提交。\n"
 msgstr[1] "您的分支领先 '%s' 共 %d 个提交。\n"
 
-#: remote.c:2260
+#: remote.c:2259
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (使用 \"git push\" 来发布您的本地提交)\n"
 
-#: remote.c:2263
+#: remote.c:2262
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -7311,11 +7526,11 @@ msgstr[0] "您的分支落后 '%s' 共 %d 个提交,并且可以快进。\n"
 msgstr[1] "您的分支落后 '%s' 共 %d 个提交,并且可以快进。\n"
 
 #  译者:注意保持前导空格
-#: remote.c:2271
+#: remote.c:2270
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (使用 \"git pull\" 来更新您的本地分支)\n"
 
-#: remote.c:2274
+#: remote.c:2273
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -7331,11 +7546,11 @@ msgstr[1] ""
 "并且分别有 %d 和 %d 处不同的提交。\n"
 
 #  译者:注意保持前导空格
-#: remote.c:2284
+#: remote.c:2283
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (使用 \"git pull\" 来合并远程分支)\n"
 
-#: remote.c:2476
+#: remote.c:2475
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "无法解析期望的对象名 '%s'"
@@ -7373,104 +7588,108 @@ msgstr "写入 '%s' (%s) 时出错"
 msgid "failed to flush '%s'"
 msgstr "无法刷新 '%s'"
 
-#: rerere.c:487 rerere.c:1023
+#: rerere.c:487 rerere.c:1024
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
 msgstr "不能解析 '%s' 中的冲突块"
 
-#: rerere.c:668
+#: rerere.c:669
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr "在 '%s' 上调用 utime() 失败"
 
-#: rerere.c:678
+#: rerere.c:679
 #, c-format
 msgid "writing '%s' failed"
 msgstr "写入 '%s' 失败"
 
-#: rerere.c:698
+#: rerere.c:699
 #, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr "使用之前的解决方案暂存 '%s'。"
 
-#: rerere.c:737
+#: rerere.c:738
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr "已记录 '%s' 的解决方案。"
 
-#: rerere.c:772
+#: rerere.c:773
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr "使用之前的解决方案解决 '%s'。"
 
-#: rerere.c:787
+#: rerere.c:788
 #, c-format
 msgid "cannot unlink stray '%s'"
 msgstr "不能删除 stray '%s'"
 
-#: rerere.c:791
+#: rerere.c:792
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr "为 '%s' 记录 preimage"
 
-#: rerere.c:865 submodule.c:2121 builtin/log.c:2017
-#: builtin/submodule--helper.c:1777 builtin/submodule--helper.c:1820
+#: rerere.c:866 submodule.c:2290 builtin/log.c:2042
+#: builtin/submodule--helper.c:1786 builtin/submodule--helper.c:1833
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "不能创建目录 '%s'"
 
-#: rerere.c:1041
+#: rerere.c:1042
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr "无法更新 '%s' 中的冲突状态"
 
-#: rerere.c:1052 rerere.c:1059
+#: rerere.c:1053 rerere.c:1060
 #, c-format
 msgid "no remembered resolution for '%s'"
 msgstr "没有为 '%s' 记忆的解决方案"
 
-#: rerere.c:1061
+#: rerere.c:1062
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr "不能删除 '%s'"
 
-#: rerere.c:1071
+#: rerere.c:1072
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr "已为 '%s' 更新 preimage"
 
-#: rerere.c:1080
+#: rerere.c:1081
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr "忘记 '%s' 的解决方案\n"
 
-#: rerere.c:1191
+#: rerere.c:1192
 msgid "unable to open rr-cache directory"
 msgstr "不能打开 rr-cache 目录"
 
-#: reset.c:42
+#: reset.c:112
 msgid "could not determine HEAD revision"
 msgstr "不能确定 HEAD 版本"
 
-#: reset.c:70 reset.c:76 sequencer.c:3700
+#: reset.c:141 reset.c:147 sequencer.c:3696
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "无法找到 %s 指向的树"
 
-#: revision.c:2347
+#: revision.c:2358
 msgid "--unpacked=<packfile> no longer supported"
 msgstr "不再支持 --unpacked=<packfile>"
 
-#: revision.c:2686
+#: revision.c:2712
 msgid "your current branch appears to be broken"
 msgstr "您的当前分支好像被损坏"
 
-#: revision.c:2689
+#: revision.c:2715
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "您的当前分支 '%s' 尚无任何提交"
 
-#: revision.c:2891
+#: revision.c:2901
+msgid "object filtering requires --objects"
+msgstr "对象过滤需要 --objects"
+
+#: revision.c:2918
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L 尚不支持 -p 和 -s 之外的差异格式"
 
@@ -7537,7 +7756,7 @@ msgstr "无效的提交信息清理模式 '%s'"
 msgid "could not delete '%s'"
 msgstr "无法删除 '%s'"
 
-#: sequencer.c:345 sequencer.c:4751 builtin/rebase.c:563 builtin/rebase.c:1297
+#: sequencer.c:345 sequencer.c:4724 builtin/rebase.c:564 builtin/rebase.c:1326
 #: builtin/rm.c:409
 #, c-format
 msgid "could not remove '%s'"
@@ -7596,13 +7815,13 @@ msgstr ""
 "\"git revert --skip\" 命令跳过这个提交。如果想要终止执行并回到\n"
 "执行 \"git revert\" 之前的状态,执行 \"git revert --abort\"。"
 
-#: sequencer.c:448 sequencer.c:3292
+#: sequencer.c:448 sequencer.c:3288
 #, c-format
 msgid "could not lock '%s'"
 msgstr "不能锁定 '%s'"
 
-#: sequencer.c:450 sequencer.c:3091 sequencer.c:3296 sequencer.c:3310
-#: sequencer.c:3561 sequencer.c:5618 strbuf.c:1188 wrapper.c:639
+#: sequencer.c:450 sequencer.c:3087 sequencer.c:3292 sequencer.c:3306
+#: sequencer.c:3557 sequencer.c:5591 strbuf.c:1189 wrapper.c:715
 #, c-format
 msgid "could not write to '%s'"
 msgstr "不能写入 '%s'"
@@ -7612,14 +7831,14 @@ msgstr "不能写入 '%s'"
 msgid "could not write eol to '%s'"
 msgstr "不能将换行符写入 '%s'"
 
-#: sequencer.c:460 sequencer.c:3096 sequencer.c:3298 sequencer.c:3312
-#: sequencer.c:3569
+#: sequencer.c:460 sequencer.c:3092 sequencer.c:3294 sequencer.c:3308
+#: sequencer.c:3565
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "无法完成 '%s'"
 
-#: sequencer.c:473 sequencer.c:1934 sequencer.c:3116 sequencer.c:3551
-#: sequencer.c:3679 builtin/am.c:289 builtin/commit.c:834 builtin/merge.c:1148
+#: sequencer.c:473 sequencer.c:1930 sequencer.c:3112 sequencer.c:3547
+#: sequencer.c:3675 builtin/am.c:290 builtin/commit.c:837 builtin/merge.c:1154
 #, c-format
 msgid "could not read '%s'"
 msgstr "不能读取 '%s'"
@@ -7638,7 +7857,7 @@ msgstr "提交您的修改或贮藏后再继续。"
 msgid "%s: fast-forward"
 msgstr "%s:快进"
 
-#: sequencer.c:574 builtin/tag.c:614
+#: sequencer.c:574 builtin/tag.c:615
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "无效的清理模式 %s"
@@ -7669,8 +7888,8 @@ msgstr "在 '%.*s' 中没有 key"
 msgid "unable to dequote value of '%s'"
 msgstr "无法为 '%s' 的值去引号"
 
-#: sequencer.c:841 wrapper.c:209 wrapper.c:379 builtin/am.c:756
-#: builtin/am.c:848 builtin/rebase.c:694
+#: sequencer.c:841 wrapper.c:219 wrapper.c:389 builtin/am.c:757
+#: builtin/am.c:849 builtin/rebase.c:699
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "无法打开 '%s' 进行读取"
@@ -7784,350 +8003,345 @@ msgstr ""
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1288
+#: sequencer.c:1287
 msgid "couldn't look up newly created commit"
 msgstr "无法找到新创建的提交"
 
-#: sequencer.c:1290
+#: sequencer.c:1289
 msgid "could not parse newly created commit"
 msgstr "不能解析新创建的提交"
 
-#: sequencer.c:1339
+#: sequencer.c:1336
 msgid "unable to resolve HEAD after creating commit"
 msgstr "创建提交后,不能解析 HEAD"
 
-#: sequencer.c:1342
+#: sequencer.c:1338
 msgid "detached HEAD"
 msgstr "分离头指针"
 
 #  译者:中文字符串拼接,可删除前导空格
-#: sequencer.c:1346
+#: sequencer.c:1342
 msgid " (root-commit)"
 msgstr "(根提交)"
 
-#: sequencer.c:1367
+#: sequencer.c:1363
 msgid "could not parse HEAD"
 msgstr "不能解析 HEAD"
 
-#: sequencer.c:1369
+#: sequencer.c:1365
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s 不是一个提交!"
 
-#: sequencer.c:1373 sequencer.c:1451 builtin/commit.c:1708
+#: sequencer.c:1369 sequencer.c:1447 builtin/commit.c:1707
 msgid "could not parse HEAD commit"
 msgstr "不能解析 HEAD 提交"
 
-#: sequencer.c:1429 sequencer.c:2314
+#: sequencer.c:1425 sequencer.c:2310
 msgid "unable to parse commit author"
 msgstr "不能解析提交作者"
 
-#: sequencer.c:1440 builtin/am.c:1643 builtin/merge.c:710
+#: sequencer.c:1436 builtin/am.c:1644 builtin/merge.c:710
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree 无法写入树对象"
 
-#: sequencer.c:1473 sequencer.c:1593
+#: sequencer.c:1469 sequencer.c:1589
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "不能从 '%s' 读取提交说明"
 
-#: sequencer.c:1504 sequencer.c:1536
+#: sequencer.c:1500 sequencer.c:1532
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr "无效的作者身份 '%s'"
 
-#: sequencer.c:1510
+#: sequencer.c:1506
 msgid "corrupt author: missing date information"
 msgstr "损坏的作者:缺失日期信息"
 
-#: sequencer.c:1549 builtin/am.c:1670 builtin/commit.c:1822 builtin/merge.c:915
-#: builtin/merge.c:940 t/helper/test-fast-rebase.c:78
+#: sequencer.c:1545 builtin/am.c:1671 builtin/commit.c:1821 builtin/merge.c:921
+#: builtin/merge.c:946 t/helper/test-fast-rebase.c:78
 msgid "failed to write commit object"
 msgstr "无法写提交对象"
 
-#: sequencer.c:1576 sequencer.c:4523 t/helper/test-fast-rebase.c:199
+#: sequencer.c:1572 sequencer.c:4496 t/helper/test-fast-rebase.c:199
 #: t/helper/test-fast-rebase.c:217
 #, c-format
 msgid "could not update %s"
 msgstr "不能更新 %s"
 
-#: sequencer.c:1625
+#: sequencer.c:1621
 #, c-format
 msgid "could not parse commit %s"
 msgstr "不能解析提交 %s"
 
-#: sequencer.c:1630
+#: sequencer.c:1626
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "不能解析父提交 %s"
 
-#: sequencer.c:1713 sequencer.c:1994
+#: sequencer.c:1709 sequencer.c:1990
 #, c-format
 msgid "unknown command: %d"
 msgstr "未知命令:%d"
 
-#: sequencer.c:1755
+#: sequencer.c:1751
 msgid "This is the 1st commit message:"
 msgstr "这是第一个提交说明:"
 
-#: sequencer.c:1756
+#: sequencer.c:1752
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "这是提交说明 #%d:"
 
-#: sequencer.c:1757
+#: sequencer.c:1753
 msgid "The 1st commit message will be skipped:"
 msgstr "第一个提交说明将被跳过:"
 
-#: sequencer.c:1758
+#: sequencer.c:1754
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "提交说明 #%d 将被跳过:"
 
-#: sequencer.c:1759
+#: sequencer.c:1755
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "这是一个 %d 个提交的组合。"
 
-#: sequencer.c:1906 sequencer.c:1963
+#: sequencer.c:1902 sequencer.c:1959
 #, c-format
 msgid "cannot write '%s'"
 msgstr "不能写 '%s'"
 
-#: sequencer.c:1953
+#: sequencer.c:1949
 msgid "need a HEAD to fixup"
 msgstr "需要一个 HEAD 来修复"
 
-#: sequencer.c:1955 sequencer.c:3596
+#: sequencer.c:1951 sequencer.c:3592
 msgid "could not read HEAD"
 msgstr "不能读取 HEAD"
 
-#: sequencer.c:1957
+#: sequencer.c:1953
 msgid "could not read HEAD's commit message"
 msgstr "不能读取 HEAD 的提交说明"
 
-#: sequencer.c:1981
+#: sequencer.c:1977
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "不能读取 %s 的提交说明"
 
-#: sequencer.c:2091
+#: sequencer.c:2087
 msgid "your index file is unmerged."
 msgstr "您的索引文件未完成合并。"
 
-#: sequencer.c:2098
+#: sequencer.c:2094
 msgid "cannot fixup root commit"
 msgstr "不能修复根提交"
 
-#: sequencer.c:2117
+#: sequencer.c:2113
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "提交 %s 是一个合并提交但未提供 -m 选项。"
 
-#: sequencer.c:2125 sequencer.c:2133
+#: sequencer.c:2121 sequencer.c:2129
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "提交 %s 没有第 %d 个父提交"
 
-#: sequencer.c:2139
+#: sequencer.c:2135
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "不能得到 %s 的提交说明"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:2158
+#: sequencer.c:2154
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s:不能解析父提交 %s"
 
-#: sequencer.c:2224
+#: sequencer.c:2220
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "不能将 '%s' 重命名为 '%s'"
 
-#: sequencer.c:2284
+#: sequencer.c:2280
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "不能还原 %s... %s"
 
-#: sequencer.c:2285
+#: sequencer.c:2281
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "不能应用 %s... %s"
 
-#: sequencer.c:2306
+#: sequencer.c:2302
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr "丢弃 %s %s -- 补丁内容已在上游\n"
 
-#: sequencer.c:2364
+#: sequencer.c:2360
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s:无法读取索引"
 
-#: sequencer.c:2372
+#: sequencer.c:2368
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s:无法刷新索引"
 
-#: sequencer.c:2452
+#: sequencer.c:2448
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s 不接受参数:'%s'"
 
-#: sequencer.c:2461
+#: sequencer.c:2457
 #, c-format
 msgid "missing arguments for %s"
 msgstr "缺少 %s 的参数"
 
-#: sequencer.c:2504
+#: sequencer.c:2500
 #, c-format
 msgid "could not parse '%s'"
 msgstr "无法解析 '%s'"
 
-#: sequencer.c:2565
+#: sequencer.c:2561
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "无效行 %d:%.*s"
 
-#: sequencer.c:2576
+#: sequencer.c:2572
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "没有父提交的情况下不能 '%s'"
 
-#: sequencer.c:2624 builtin/rebase.c:184
+#: sequencer.c:2620 builtin/rebase.c:185
 #, c-format
 msgid "could not read '%s'."
 msgstr "不能读取 '%s'。"
 
-#: sequencer.c:2662
+#: sequencer.c:2658
 msgid "cancelling a cherry picking in progress"
 msgstr "正在取消一个进行中的拣选"
 
-#: sequencer.c:2671
+#: sequencer.c:2667
 msgid "cancelling a revert in progress"
 msgstr "正在取消一个进行中的还原"
 
-#: sequencer.c:2711
+#: sequencer.c:2707
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "请用 'git rebase --edit-todo' 来修改。"
 
-#: sequencer.c:2713
+#: sequencer.c:2709
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "不可用的指令清单:'%s'"
 
-#: sequencer.c:2718
+#: sequencer.c:2714
 msgid "no commits parsed."
 msgstr "没有解析提交。"
 
-#: sequencer.c:2729
+#: sequencer.c:2725
 msgid "cannot cherry-pick during a revert."
 msgstr "不能在回退中执行拣选。"
 
-#: sequencer.c:2731
+#: sequencer.c:2727
 msgid "cannot revert during a cherry-pick."
 msgstr "不能在拣选中执行回退。"
 
-#: sequencer.c:2809
-#, c-format
-msgid "invalid value for %s: %s"
-msgstr "%s 的值无效:%s"
-
-#: sequencer.c:2918
+#: sequencer.c:2914
 msgid "unusable squash-onto"
 msgstr "不可用的 squash-onto"
 
-#: sequencer.c:2938
+#: sequencer.c:2934
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "格式错误的选项清单:'%s'"
 
-#: sequencer.c:3033 sequencer.c:4902
+#: sequencer.c:3029 sequencer.c:4875
 msgid "empty commit set passed"
 msgstr "提供了空的提交集"
 
-#: sequencer.c:3050
+#: sequencer.c:3046
 msgid "revert is already in progress"
 msgstr "一个还原操作已在进行"
 
-#: sequencer.c:3052
+#: sequencer.c:3048
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "尝试 \"git revert (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:3055
+#: sequencer.c:3051
 msgid "cherry-pick is already in progress"
 msgstr "拣选操作已在进行"
 
-#: sequencer.c:3057
+#: sequencer.c:3053
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "尝试 \"git cherry-pick (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:3071
+#: sequencer.c:3067
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "不能创建序列目录 '%s'"
 
-#: sequencer.c:3086
+#: sequencer.c:3082
 msgid "could not lock HEAD"
 msgstr "不能锁定 HEAD"
 
-#: sequencer.c:3146 sequencer.c:4612
+#: sequencer.c:3142 sequencer.c:4585
 msgid "no cherry-pick or revert in progress"
 msgstr "拣选或还原操作并未进行"
 
-#: sequencer.c:3148 sequencer.c:3159
+#: sequencer.c:3144 sequencer.c:3155
 msgid "cannot resolve HEAD"
 msgstr "不能解析 HEAD"
 
-#: sequencer.c:3150 sequencer.c:3194
+#: sequencer.c:3146 sequencer.c:3190
 msgid "cannot abort from a branch yet to be born"
 msgstr "不能从尚未建立的分支终止"
 
-#: sequencer.c:3180 builtin/fetch.c:1004 builtin/fetch.c:1416
-#: builtin/grep.c:772
+#: sequencer.c:3176 builtin/fetch.c:1030 builtin/fetch.c:1457
+#: builtin/grep.c:774
 #, c-format
 msgid "cannot open '%s'"
 msgstr "不能打开 '%s'"
 
-#: sequencer.c:3182
+#: sequencer.c:3178
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "不能读取 '%s':%s"
 
-#: sequencer.c:3183
+#: sequencer.c:3179
 msgid "unexpected end of file"
 msgstr "意外的文件结束"
 
-#: sequencer.c:3189
+#: sequencer.c:3185
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "保存拣选提交前的 HEAD 文件 '%s' 损坏"
 
-#: sequencer.c:3200
+#: sequencer.c:3196
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr "您好像移动了 HEAD。未能回退,检查您的 HEAD!"
 
-#: sequencer.c:3241
+#: sequencer.c:3237
 msgid "no revert in progress"
 msgstr "没有正在进行的还原"
 
-#: sequencer.c:3250
+#: sequencer.c:3246
 msgid "no cherry-pick in progress"
 msgstr "没有正在进行的拣选"
 
-#: sequencer.c:3260
+#: sequencer.c:3256
 msgid "failed to skip the commit"
 msgstr "无法跳过这个提交"
 
-#: sequencer.c:3267
+#: sequencer.c:3263
 msgid "there is nothing to skip"
 msgstr "没有要跳过的"
 
-#: sequencer.c:3270
+#: sequencer.c:3266
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -8136,16 +8350,16 @@ msgstr ""
 "您已经提交了么?\n"
 "试试 \"git %s --continue\""
 
-#: sequencer.c:3432 sequencer.c:4503
+#: sequencer.c:3428 sequencer.c:4476
 msgid "cannot read HEAD"
 msgstr "不能读取 HEAD"
 
-#: sequencer.c:3449
+#: sequencer.c:3445
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "无法拷贝 '%s' 至 '%s'"
 
-#: sequencer.c:3457
+#: sequencer.c:3453
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -8164,27 +8378,27 @@ msgstr ""
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:3467
+#: sequencer.c:3463
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "不能应用 %s... %.*s"
 
-#: sequencer.c:3474
+#: sequencer.c:3470
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "不能合并 %.*s"
 
-#: sequencer.c:3488 sequencer.c:3492 builtin/difftool.c:633
+#: sequencer.c:3484 sequencer.c:3488 builtin/difftool.c:633
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "不能拷贝 '%s' 至 '%s'"
 
-#: sequencer.c:3503
+#: sequencer.c:3499
 #, c-format
 msgid "Executing: %s\n"
 msgstr "正在执行:%s\n"
 
-#: sequencer.c:3514
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -8199,11 +8413,11 @@ msgstr ""
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3520
+#: sequencer.c:3516
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "并且修改索引和/或工作区\n"
 
-#: sequencer.c:3526
+#: sequencer.c:3522
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -8220,90 +8434,90 @@ msgstr ""
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3586
+#: sequencer.c:3582
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "非法的标签名称:'%.*s'"
 
-#: sequencer.c:3659
+#: sequencer.c:3655
 msgid "writing fake root commit"
 msgstr "写伪根提交"
 
-#: sequencer.c:3664
+#: sequencer.c:3660
 msgid "writing squash-onto"
 msgstr "写入 squash-onto"
 
-#: sequencer.c:3743
+#: sequencer.c:3739
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "无法解析 '%s'"
 
-#: sequencer.c:3775
+#: sequencer.c:3771
 msgid "cannot merge without a current revision"
 msgstr "没有当前版本不能合并"
 
-#: sequencer.c:3797
+#: sequencer.c:3793
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "无法解析 '%.*s'"
 
-#: sequencer.c:3806
+#: sequencer.c:3802
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "无可用合并:'%.*s'"
 
-#: sequencer.c:3818
+#: sequencer.c:3814
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr "章鱼合并不能在一个新的根提交上执行"
 
-#: sequencer.c:3873
+#: sequencer.c:3869
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "不能获取 '%s' 的提交说明"
 
-#: sequencer.c:4019
+#: sequencer.c:4013
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "甚至不能尝试合并 '%.*s'"
 
-#: sequencer.c:4035
+#: sequencer.c:4029
 msgid "merge: Unable to write new index file"
 msgstr "合并:无法写入新索引文件"
 
-#: sequencer.c:4116
+#: sequencer.c:4110
 msgid "Cannot autostash"
 msgstr "无法自动贮藏"
 
-#: sequencer.c:4119
+#: sequencer.c:4113
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "意外的贮藏响应:'%s'"
 
-#: sequencer.c:4125
+#: sequencer.c:4119
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "不能为 '%s' 创建目录"
 
-#: sequencer.c:4128
+#: sequencer.c:4122
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "创建了自动贮藏:%s\n"
 
-#: sequencer.c:4132
+#: sequencer.c:4124
 msgid "could not reset --hard"
 msgstr "无法硬性重置(reset --hard)"
 
-#: sequencer.c:4157
+#: sequencer.c:4148
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "已应用自动贮藏。\n"
 
-#: sequencer.c:4169
+#: sequencer.c:4160
 #, c-format
 msgid "cannot store %s"
 msgstr "不能存储 %s"
 
-#: sequencer.c:4172
+#: sequencer.c:4163
 #, c-format
 msgid ""
 "%s\n"
@@ -8314,29 +8528,29 @@ msgstr ""
 "您的修改在贮藏区中很安全。\n"
 "您可以在任何时候运行 \"git stash pop\" 或 \"git stash drop\"。\n"
 
-#: sequencer.c:4177
+#: sequencer.c:4168
 msgid "Applying autostash resulted in conflicts."
 msgstr "应用自动贮藏导致冲突。"
 
-#: sequencer.c:4178
+#: sequencer.c:4169
 msgid "Autostash exists; creating a new stash entry."
 msgstr "自动贮藏已经存在;正在创建一个新的贮藏条目。"
 
-#: sequencer.c:4252
+#: sequencer.c:4225
 msgid "could not detach HEAD"
 msgstr "不能分离头指针"
 
-#: sequencer.c:4267
+#: sequencer.c:4240
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "停止在 HEAD\n"
 
-#: sequencer.c:4269
+#: sequencer.c:4242
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "停止在 %s\n"
 
-#: sequencer.c:4301
+#: sequencer.c:4274
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -8356,58 +8570,58 @@ msgstr ""
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:4347
+#: sequencer.c:4320
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "正在变基(%d/%d)%s"
 
-#: sequencer.c:4393
+#: sequencer.c:4366
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "停止在 %s... %.*s\n"
 
-#: sequencer.c:4463
+#: sequencer.c:4436
 #, c-format
 msgid "unknown command %d"
 msgstr "未知命令 %d"
 
-#: sequencer.c:4511
+#: sequencer.c:4484
 msgid "could not read orig-head"
 msgstr "不能读取 orig-head"
 
-#: sequencer.c:4516
+#: sequencer.c:4489
 msgid "could not read 'onto'"
 msgstr "不能读取 'onto'"
 
-#: sequencer.c:4530
+#: sequencer.c:4503
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "不能更新 HEAD 为 %s"
 
-#: sequencer.c:4590
+#: sequencer.c:4563
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "成功变基并更新 %s。\n"
 
-#: sequencer.c:4642
+#: sequencer.c:4615
 msgid "cannot rebase: You have unstaged changes."
 msgstr "不能变基:您有未暂存的变更。"
 
-#: sequencer.c:4651
+#: sequencer.c:4624
 msgid "cannot amend non-existing commit"
 msgstr "不能修补不存在的提交"
 
-#: sequencer.c:4653
+#: sequencer.c:4626
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "无效文件:'%s'"
 
-#: sequencer.c:4655
+#: sequencer.c:4628
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "无效内容:'%s'"
 
-#: sequencer.c:4658
+#: sequencer.c:4631
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -8416,68 +8630,68 @@ msgstr ""
 "\n"
 "您的工作区中有未提交的变更。请先提交然后再次运行 'git rebase --continue'。"
 
-#: sequencer.c:4694 sequencer.c:4733
+#: sequencer.c:4667 sequencer.c:4706
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "不能写入文件:'%s'"
 
-#: sequencer.c:4749
+#: sequencer.c:4722
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "不能删除 CHERRY_PICK_HEAD"
 
-#: sequencer.c:4759
+#: sequencer.c:4732
 msgid "could not commit staged changes."
 msgstr "不能提交暂存的修改。"
 
-#: sequencer.c:4879
+#: sequencer.c:4852
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s:不能拣选一个%s"
 
-#: sequencer.c:4883
+#: sequencer.c:4856
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s:错误的版本"
 
-#: sequencer.c:4918
+#: sequencer.c:4891
 msgid "can't revert as initial commit"
 msgstr "不能作为初始提交回退"
 
-#: sequencer.c:5189 sequencer.c:5418
+#: sequencer.c:5162 sequencer.c:5391
 #, c-format
 msgid "skipped previously applied commit %s"
 msgstr "跳过了先前已应用的提交 %s"
 
-#: sequencer.c:5259 sequencer.c:5434
+#: sequencer.c:5232 sequencer.c:5407
 msgid "use --reapply-cherry-picks to include skipped commits"
 msgstr "使用 --reapply-cherry-picks 来包括跳过的提交"
 
-#: sequencer.c:5405
+#: sequencer.c:5378
 msgid "make_script: unhandled options"
 msgstr "make_script:有未能处理的选项"
 
-#: sequencer.c:5408
+#: sequencer.c:5381
 msgid "make_script: error preparing revisions"
 msgstr "make_script:准备版本时错误"
 
-#: sequencer.c:5666 sequencer.c:5683
+#: sequencer.c:5639 sequencer.c:5656
 msgid "nothing to do"
 msgstr "无事可做"
 
-#: sequencer.c:5702
+#: sequencer.c:5675
 msgid "could not skip unnecessary pick commands"
 msgstr "无法跳过不必要的拣选"
 
-#: sequencer.c:5802
+#: sequencer.c:5775
 msgid "the script was already rearranged."
 msgstr "脚本已经重新编排。"
 
-#: setup.c:134
+#: setup.c:135
 #, c-format
 msgid "'%s' is outside repository at '%s'"
 msgstr "'%s' 在位于 '%s' 的仓库之外"
 
-#: setup.c:186
+#: setup.c:187
 #, c-format
 msgid ""
 "%s: no such path in the working tree.\n"
@@ -8486,7 +8700,7 @@ msgstr ""
 "%s:工作区中无此路径。\n"
 "使用命令 'git <命令> -- <路径>...' 来指定本地不存在的路径。"
 
-#: setup.c:199
+#: setup.c:200
 #, c-format
 msgid ""
 "ambiguous argument '%s': unknown revision or path not in the working tree.\n"
@@ -8497,12 +8711,12 @@ msgstr ""
 "使用 '--' 来分隔版本和路径,例如:\n"
 "'git <命令> [<版本>...] -- [<文件>...]'"
 
-#: setup.c:265
+#: setup.c:266
 #, c-format
 msgid "option '%s' must come before non-option arguments"
 msgstr "选项 '%s' 必须在其他非选项参数之前"
 
-#: setup.c:284
+#: setup.c:285
 #, c-format
 msgid ""
 "ambiguous argument '%s': both revision and filename\n"
@@ -8513,100 +8727,100 @@ msgstr ""
 "使用 '--' 来分隔版本和路径,例如:\n"
 "'git <命令> [<版本>...] -- [<文件>...]'"
 
-#: setup.c:420
+#: setup.c:421
 msgid "unable to set up work tree using invalid config"
 msgstr "无法使用无效配置来创建工作区"
 
-#: setup.c:424 builtin/rev-parse.c:895
+#: setup.c:425 builtin/rev-parse.c:895
 msgid "this operation must be run in a work tree"
 msgstr "该操作必须在一个工作区中运行"
 
-#: setup.c:722
+#: setup.c:724
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr "期望 git 仓库版本 <= %d,却得到 %d"
 
-#: setup.c:730
+#: setup.c:732
 msgid "unknown repository extension found:"
 msgid_plural "unknown repository extensions found:"
 msgstr[0] "发现未知的仓库扩展:"
 msgstr[1] "发现未知的仓库扩展:"
 
-#: setup.c:744
+#: setup.c:746
 msgid "repo version is 0, but v1-only extension found:"
 msgid_plural "repo version is 0, but v1-only extensions found:"
 msgstr[0] "仓库的版本是 0,但是发现仅用于 v1 的扩展:"
 msgstr[1] "仓库的版本是 0,但是发现仅用于 v1 的扩展:"
 
-#: setup.c:765
+#: setup.c:767
 #, c-format
 msgid "error opening '%s'"
 msgstr "打开 '%s' 出错"
 
-#: setup.c:767
+#: setup.c:769
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr "文件太大,无法作为 .git 文件:'%s'"
 
-#: setup.c:769
+#: setup.c:771
 #, c-format
 msgid "error reading %s"
 msgstr "读取 %s 出错"
 
-#: setup.c:771
+#: setup.c:773
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr "无效的 gitfile 格式:%s"
 
-#: setup.c:773
+#: setup.c:775
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr "在 gitfile 中没有路径:%s"
 
-#: setup.c:775
+#: setup.c:777
 #, c-format
 msgid "not a git repository: %s"
 msgstr "不是 git 仓库:%s"
 
-#: setup.c:877
+#: setup.c:879
 #, c-format
 msgid "'$%s' too big"
 msgstr "'$%s' 太大"
 
-#: setup.c:891
+#: setup.c:893
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr "不是 git 仓库:'%s'"
 
-#: setup.c:920 setup.c:922 setup.c:953
+#: setup.c:922 setup.c:924 setup.c:955
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr "不能切换目录到 '%s'"
 
-#: setup.c:925 setup.c:981 setup.c:991 setup.c:1030 setup.c:1038
+#: setup.c:927 setup.c:983 setup.c:993 setup.c:1032 setup.c:1040
 msgid "cannot come back to cwd"
 msgstr "无法返回当前工作目录"
 
-#: setup.c:1052
+#: setup.c:1054
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr "无法获取 '%*s%s%s' 状态(stat)"
 
-#: setup.c:1295
+#: setup.c:1338
 msgid "Unable to read current working directory"
 msgstr "不能读取当前工作目录"
 
-#: setup.c:1304 setup.c:1310
+#: setup.c:1347 setup.c:1353
 #, c-format
 msgid "cannot change to '%s'"
 msgstr "不能切换到 '%s'"
 
-#: setup.c:1315
+#: setup.c:1358
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
 msgstr "不是 git 仓库(或者任何父目录):%s"
 
-#: setup.c:1321
+#: setup.c:1364
 #, c-format
 msgid ""
 "not a git repository (or any parent up to mount point %s)\n"
@@ -8615,7 +8829,21 @@ msgstr ""
 "不是 git 仓库(或者直至挂载点 %s 的任何父目录)\n"
 "停止在文件系统边界(未设置 GIT_DISCOVERY_ACROSS_FILESYSTEM)。"
 
-#: setup.c:1446
+#: setup.c:1374
+#, c-format
+msgid ""
+"unsafe repository ('%s' is owned by someone else)\n"
+"To add an exception for this directory, call:\n"
+"\n"
+"\tgit config --global --add safe.directory %s"
+msgstr ""
+"仓库不安全('%s' 的所有者是其他人)\n"
+"要为本仓库创建特例,请使用:\n"
+"\n"
+"\tgit config --global --add safe.directory %s"
+
+
+#: setup.c:1502
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -8624,57 +8852,61 @@ msgstr ""
 "参数 core.sharedRepository 的文件属性值有问题(0%.3o)。\n"
 "文件属主必须始终拥有读写权限。"
 
-#: setup.c:1508
+#: setup.c:1564
 msgid "fork failed"
 msgstr "fork 失败"
 
-#: setup.c:1513
+#: setup.c:1569
 msgid "setsid failed"
 msgstr "setsid 失败"
 
-#: sparse-index.c:289
+#: sparse-index.c:285
 #, c-format
 msgid "index entry is a directory, but not sparse (%08x)"
 msgstr "索引条目是一个目录,但不是稀疏的 (%08x)"
 
+#: split-index.c:9
+msgid "cannot use split index with a sparse index"
+msgstr "拆分索引无法与稀疏索引一起使用"
+
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:850
+#: strbuf.c:851
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:852
+#: strbuf.c:853
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u GiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:860
+#: strbuf.c:861
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:862
+#: strbuf.c:863
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u MiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:869
+#: strbuf.c:870
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:871
+#: strbuf.c:872
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u KiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:877
+#: strbuf.c:878
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
@@ -8682,130 +8914,140 @@ msgstr[0] "%u 字节"
 msgstr[1] "%u 字节"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:879
+#: strbuf.c:880
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
 msgstr[0] "%u 字节/秒"
 msgstr[1] "%u 字节/秒"
 
-#: strbuf.c:1186 wrapper.c:207 wrapper.c:377 builtin/am.c:765
-#: builtin/rebase.c:650
+#: strbuf.c:1187 wrapper.c:217 wrapper.c:387 builtin/am.c:766
+#: builtin/rebase.c:653
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "无法打开 '%s' 进行写入"
 
-#: strbuf.c:1195
+#: strbuf.c:1196
 #, c-format
 msgid "could not edit '%s'"
 msgstr "不能编辑 '%s'"
 
-#: submodule-config.c:237
+#: submodule-config.c:238
 #, c-format
 msgid "ignoring suspicious submodule name: %s"
 msgstr "忽略可疑的子模组名称:%s"
 
-#: submodule-config.c:304
+#: submodule-config.c:305
 msgid "negative values not allowed for submodule.fetchjobs"
 msgstr "submodule.fetchjobs 不允许为负值"
 
-#: submodule-config.c:402
+#: submodule-config.c:403
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr "忽略可能被解析为命令行选项的 '%s':%s"
 
-#: submodule-config.c:499
+#: submodule-config.c:500 builtin/push.c:489 builtin/send-pack.c:148
 #, c-format
-msgid "invalid value for %s"
-msgstr "%s 的值无效"
+msgid "invalid value for '%s'"
+msgstr "'%s' 的值无效"
 
-#: submodule-config.c:767
+#: submodule-config.c:828
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr "不能更新 .gitmodules 条目 %s"
 
-#: submodule.c:114 submodule.c:143
+#: submodule.c:115 submodule.c:144
 msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
 msgstr "无法修改未合并的 .gitmodules,先解决合并冲突"
 
-#: submodule.c:118 submodule.c:147
+#: submodule.c:119 submodule.c:148
 #, c-format
 msgid "Could not find section in .gitmodules where path=%s"
 msgstr "无法在 .gitmodules 中找到 path=%s 的小节"
 
-#: submodule.c:154
+#: submodule.c:155
 #, c-format
 msgid "Could not remove .gitmodules entry for %s"
 msgstr "无法移除 %s 的 .gitmodules 条目"
 
-#: submodule.c:165
+#: submodule.c:166
 msgid "staging updated .gitmodules failed"
 msgstr "将更新后 .gitmodules 添加暂存区失败"
 
-#: submodule.c:358
+#: submodule.c:346
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "位于未检出的子模组 '%s'"
 
-#: submodule.c:389
+#: submodule.c:377
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "路径规格 '%s' 在子模组 '%.*s' 中"
 
-#: submodule.c:466
+#: submodule.c:454
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "坏的 --ignore-submodules 参数:%s"
 
-#: submodule.c:844
+#: submodule.c:866
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
 "same. Skipping it."
 msgstr "提交 %s 中位于路径 '%s' 的子模组和同名的子模组冲突。 跳过它。"
 
-#: submodule.c:954
+#: submodule.c:987
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr "子模组条目 '%s'(%s)是一个 %s,不是一个提交"
 
-#: submodule.c:1042
+#: submodule.c:1069
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
 "submodule %s"
 msgstr "无法在子模组 %s 中执行 'git rev-list <提交> --not --remotes -n 1'"
 
-#: submodule.c:1165
+#: submodule.c:1192
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "处理子模组 '%s' 失败"
 
-#: submodule.c:1194 builtin/branch.c:699 builtin/submodule--helper.c:2714
+#: submodule.c:1221 builtin/branch.c:714 builtin/submodule--helper.c:2827
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "无法将 HEAD 解析为有效引用。"
 
-#: submodule.c:1205
+#: submodule.c:1232
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "正在推送子模组 '%s'\n"
 
-#: submodule.c:1208
+#: submodule.c:1235
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "无法推送子模组 '%s'\n"
 
-#: submodule.c:1491
+#: submodule.c:1567
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "正在获取子模组 %s%s\n"
 
-#: submodule.c:1525
+#: submodule.c:1589
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "无法访问子模组 '%s'\n"
 
-#: submodule.c:1680
+#: submodule.c:1618
+#, c-format
+msgid "Could not access submodule '%s' at commit %s\n"
+msgstr "无法访问子模组 '%s' 提交 %s\n"
+
+#: submodule.c:1629
+#, c-format
+msgid "Fetching submodule %s%s at commit %s\n"
+msgstr "正在获取子模组 %s%s 提交 %s\n"
+
+#: submodule.c:1849
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -8814,77 +9056,77 @@ msgstr ""
 "获取子模组时的错误:\n"
 "%s"
 
-#: submodule.c:1705
+#: submodule.c:1874
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "无法将 '%s' 识别为 git 仓库"
 
-#: submodule.c:1722
+#: submodule.c:1891
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr "无法在子模组 %s 中执行 'git status --porcelain=2'"
 
-#: submodule.c:1763
+#: submodule.c:1932
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr "在子模组 %s 中执行 'git status --porcelain=2' 失败"
 
-#: submodule.c:1838
+#: submodule.c:2007
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "无法在子模组 '%s' 中启动 'git status'"
 
-#: submodule.c:1851
+#: submodule.c:2020
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "无法在子模组 '%s' 中执行 'git status'"
 
-#: submodule.c:1868
+#: submodule.c:2037
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr "无法在子模组 '%s' 中取消 core.worktree 的设置"
 
-#: submodule.c:1895 submodule.c:2210
+#: submodule.c:2064 submodule.c:2379
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr "无法递归进子模组路径 '%s'"
 
-#: submodule.c:1917
+#: submodule.c:2086
 msgid "could not reset submodule index"
 msgstr "无法重置子模组索引"
 
-#: submodule.c:1959
+#: submodule.c:2128
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "子模组 '%s' 中有脏索引"
 
-#: submodule.c:2013
+#: submodule.c:2182
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "子模组 '%s' 无法被更新。"
 
-#: submodule.c:2081
+#: submodule.c:2250
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr "子模组 git 目录 '%s' 位于 git 目录 '%.*s' 中"
 
-#: submodule.c:2102
+#: submodule.c:2271
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
 msgstr "不支持对有多个工作区的子模组 '%s' 执行 relocate_gitdir"
 
-#: submodule.c:2114 submodule.c:2174
+#: submodule.c:2283 submodule.c:2343
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "不能查询子模组 '%s' 的名称"
 
-#: submodule.c:2118
+#: submodule.c:2287
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr "禁止移动 '%s' 到现存 git 目录中"
 
-#: submodule.c:2124
+#: submodule.c:2293
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -8895,11 +9137,11 @@ msgstr ""
 "'%s' 迁移至\n"
 "'%s'\n"
 
-#: submodule.c:2255
+#: submodule.c:2424
 msgid "could not start ls-files in .."
 msgstr "无法在 .. 中启动 ls-files"
 
-#: submodule.c:2295
+#: submodule.c:2464
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree 返回未知返回值 %d"
@@ -8920,8 +9162,8 @@ msgstr "执行 trailer 命令 '%s' 失败"
 msgid "unknown value '%s' for key '%s'"
 msgstr "键 '%2$s' 的未知取值 '%1$s'"
 
-#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
-#: builtin/remote.c:327
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:300
+#: builtin/remote.c:328
 #, c-format
 msgid "more than one %s"
 msgstr "多于一个 %s"
@@ -8936,11 +9178,11 @@ msgstr "尾注 '%.*s' 的键为空"
 msgid "could not read input file '%s'"
 msgstr "不能读取输入文件 '%s'"
 
-#: trailer.c:766 builtin/mktag.c:89 imap-send.c:1573
+#: trailer.c:766 builtin/mktag.c:88 imap-send.c:1563
 msgid "could not read from stdin"
 msgstr "不能自标准输入读取"
 
-#: trailer.c:1024 wrapper.c:684
+#: trailer.c:1024 wrapper.c:760
 #, c-format
 msgid "could not stat %s"
 msgstr "不能对 %s 调用 stat"
@@ -9006,7 +9248,7 @@ msgstr "不能执行 fast-import"
 msgid "error while running fast-import"
 msgstr "执行 fast-import 出错"
 
-#: transport-helper.c:549 transport-helper.c:1251
+#: transport-helper.c:549 transport-helper.c:1254
 #, c-format
 msgid "could not read ref %s"
 msgstr "无法读取引用 %s"
@@ -9024,7 +9266,7 @@ msgstr "协议不支持设置远程服务路径"
 msgid "invalid remote service path"
 msgstr "无效的远程服务路径"
 
-#: transport-helper.c:661 transport.c:1479
+#: transport-helper.c:661 transport.c:1496
 msgid "operation not supported by protocol"
 msgstr "协议不支持该操作"
 
@@ -9033,72 +9275,72 @@ msgstr "协议不支持该操作"
 msgid "can't connect to subservice %s"
 msgstr "不能连接到子服务 %s"
 
-#: transport-helper.c:693 transport.c:404
+#: transport-helper.c:693 transport.c:415
 msgid "--negotiate-only requires protocol v2"
 msgstr "--negotiate-only 需要协议 v2"
 
-#: transport-helper.c:755
+#: transport-helper.c:758
 msgid "'option' without a matching 'ok/error' directive"
 msgstr "'option' 缺乏一个匹配的 'ok/error' 指令"
 
-#: transport-helper.c:798
+#: transport-helper.c:801
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "预期 ok/error,助手说 '%s'"
 
-#: transport-helper.c:859
+#: transport-helper.c:862
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "助手报告 %s 的意外状态"
 
-#: transport-helper.c:942
+#: transport-helper.c:945
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "助手 %s 不支持 dry-run"
 
-#: transport-helper.c:945
+#: transport-helper.c:948
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "助手 %s 不支持 --signed"
 
-#: transport-helper.c:948
+#: transport-helper.c:951
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "助手 %s 不支持 --signed=if-asked"
 
-#: transport-helper.c:953
+#: transport-helper.c:956
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr "助手 %s 不支持 --atomic"
 
-#: transport-helper.c:957
+#: transport-helper.c:960
 #, c-format
 msgid "helper %s does not support --%s"
 msgstr "助手 %s 不支持 --%s"
 
-#: transport-helper.c:964
+#: transport-helper.c:967
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "助手 %s 不支持 'push-option'"
 
-#: transport-helper.c:1064
+#: transport-helper.c:1067
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr "remote-heper 不支持推送,需要引用规格"
 
-#: transport-helper.c:1069
+#: transport-helper.c:1072
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "助手 %s 不支持 'force'"
 
-#: transport-helper.c:1116
+#: transport-helper.c:1119
 msgid "couldn't run fast-export"
 msgstr "无法执行 fast-export"
 
-#: transport-helper.c:1121
+#: transport-helper.c:1124
 msgid "error while running fast-export"
 msgstr "执行 fast-export 时出错"
 
-#: transport-helper.c:1146
+#: transport-helper.c:1149
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -9107,52 +9349,52 @@ msgstr ""
 "没有共同的引用并且也没有指定,什么也不会做。\n"
 "也许您应该指定一个分支。\n"
 
-#: transport-helper.c:1228
+#: transport-helper.c:1231
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr "不支持的对象格式 '%s'"
 
-#: transport-helper.c:1237
+#: transport-helper.c:1240
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "引用列表中格式错误的响应:%s"
 
-#: transport-helper.c:1389
+#: transport-helper.c:1392
 #, c-format
 msgid "read(%s) failed"
 msgstr "读取(%s)失败"
 
-#: transport-helper.c:1416
+#: transport-helper.c:1419
 #, c-format
 msgid "write(%s) failed"
 msgstr "写(%s)失败"
 
-#: transport-helper.c:1465
+#: transport-helper.c:1468
 #, c-format
 msgid "%s thread failed"
 msgstr "%s 线程失败"
 
-#: transport-helper.c:1469
+#: transport-helper.c:1472
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "%s 线程等待失败:%s"
 
-#: transport-helper.c:1488 transport-helper.c:1492
+#: transport-helper.c:1491 transport-helper.c:1495
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "不能启动线程来拷贝数据:%s"
 
-#: transport-helper.c:1529
+#: transport-helper.c:1532
 #, c-format
 msgid "%s process failed to wait"
 msgstr "%s 进程等待失败"
 
-#: transport-helper.c:1533
+#: transport-helper.c:1536
 #, c-format
 msgid "%s process failed"
 msgstr "%s 进程失败"
 
-#: transport-helper.c:1551 transport-helper.c:1560
+#: transport-helper.c:1554 transport-helper.c:1563
 msgid "can't start thread for copying data"
 msgstr "不能启动线程来拷贝数据"
 
@@ -9161,58 +9403,58 @@ msgstr "不能启动线程来拷贝数据"
 msgid "Would set upstream of '%s' to '%s' of '%s'\n"
 msgstr "将要设置 '%1$s' 的上游为 '%3$s' 的 '%2$s'\n"
 
-#: transport.c:145
+#: transport.c:138
 #, c-format
 msgid "could not read bundle '%s'"
 msgstr "无法读取归档包 '%s'"
 
-#: transport.c:227
+#: transport.c:234
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr "传输:无效的深度选项 '%s'"
 
-#: transport.c:279
+#: transport.c:289
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "查看 'git help config' 中的 protocol.version 获取更多信息"
 
-#: transport.c:280
+#: transport.c:290
 msgid "server options require protocol version 2 or later"
 msgstr "服务端选项需要版本 2 协议或更高"
 
-#: transport.c:407
+#: transport.c:418
 msgid "server does not support wait-for-done"
 msgstr "服务器不支持 wait-for-done"
 
-#: transport.c:759
+#: transport.c:770
 msgid "could not parse transport.color.* config"
 msgstr "不能解析 transport.color.* 配置"
 
-#: transport.c:834
+#: transport.c:845
 msgid "support for protocol v2 not implemented yet"
 msgstr "协议 v2 的支持尚未实现"
 
-#: transport.c:967
+#: transport.c:978
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "配置 '%s' 的取值未知:%s"
 
-#: transport.c:1033
+#: transport.c:1044
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "传输 '%s' 不允许"
 
-#: transport.c:1082
+#: transport.c:1093
 msgid "git-over-rsync is no longer supported"
 msgstr "不再支持 git-over-rsync"
 
-#: transport.c:1185
+#: transport.c:1196
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
 "not be found on any remote:\n"
 msgstr "下列子模组路径所包含的修改在任何远程源中都找不到:\n"
 
-#: transport.c:1189
+#: transport.c:1200
 #, c-format
 msgid ""
 "\n"
@@ -9239,11 +9481,11 @@ msgstr ""
 "以推送至远程。\n"
 "\n"
 
-#: transport.c:1197
+#: transport.c:1208
 msgid "Aborting."
 msgstr "正在终止。"
 
-#: transport.c:1343
+#: transport.c:1354
 msgid "failed to push all needed submodules"
 msgstr "不能推送全部需要的子模组"
 
@@ -9513,16 +9755,16 @@ msgstr ""
 "以下路径发生碰撞(如:在不区分大小写的文件系统上的区分大小写的路径),\n"
 "并且碰撞组中只有一个文件存在工作区中:\n"
 
-#: unpack-trees.c:1636
+#: unpack-trees.c:1664
 msgid "Updating index flags"
 msgstr "正在更新索引标志"
 
-#: unpack-trees.c:2803
+#: unpack-trees.c:2925
 #, c-format
 msgid "worktree and untracked commit have duplicate entries: %s"
 msgstr "工作树和未跟踪提交具有重复条目:%s"
 
-#: upload-pack.c:1565
+#: upload-pack.c:1579
 msgid "expected flush after fetch arguments"
 msgstr "在 fetch 参数之后应该有一个 flush 包"
 
@@ -9559,123 +9801,137 @@ msgstr "无效的 '..' 路径片段"
 msgid "Fetching objects"
 msgstr "正在获取对象"
 
-#: worktree.c:238 builtin/am.c:2209 builtin/bisect--helper.c:156
+#: worktree.c:237 builtin/am.c:2210 builtin/bisect--helper.c:156
 #, c-format
 msgid "failed to read '%s'"
 msgstr "无法读取 '%s'"
 
-#: worktree.c:305
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr "在主工作区的 '%s' 不是仓库目录"
 
-#: worktree.c:316
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr "文件 '%s' 不包含工作区的绝对路径"
 
-#: worktree.c:328
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr "'%s' 不存在"
 
-#: worktree.c:334
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr "'%s' 不是一个 .git 文件,错误码 %d"
 
-#: worktree.c:343
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "'%s' 没有指回到 '%s'"
 
-#: worktree.c:604
+#: worktree.c:600
 msgid "not a directory"
 msgstr "不是一个目录"
 
-#: worktree.c:613
+#: worktree.c:609
 msgid ".git is not a file"
 msgstr ".git 不是一个文件"
 
-#: worktree.c:615
+#: worktree.c:611
 msgid ".git file broken"
 msgstr ".git 文件损坏"
 
-#: worktree.c:617
+#: worktree.c:613
 msgid ".git file incorrect"
 msgstr ".git 文件不正确"
 
-#: worktree.c:723
+#: worktree.c:719
 msgid "not a valid path"
 msgstr "不是一个有效的路径"
 
-#: worktree.c:729
+#: worktree.c:725
 msgid "unable to locate repository; .git is not a file"
 msgstr "无法定位仓库,.git 不是一个文件"
 
-#: worktree.c:733
+#: worktree.c:729
 msgid "unable to locate repository; .git file does not reference a repository"
 msgstr "无法定位仓库,.git 文件没有指向一个仓库"
 
-#: worktree.c:737
+#: worktree.c:733
 msgid "unable to locate repository; .git file broken"
 msgstr "无法定位仓库,.git 文件损坏"
 
-#: worktree.c:743
+#: worktree.c:739
 msgid "gitdir unreadable"
 msgstr "gitdir 不可读"
 
-#: worktree.c:747
+#: worktree.c:743
 msgid "gitdir incorrect"
 msgstr "gitdir 不正确"
 
-#: worktree.c:772
+#: worktree.c:768
 msgid "not a valid directory"
 msgstr "不是一个有效的目录"
 
-#: worktree.c:778
+#: worktree.c:774
 msgid "gitdir file does not exist"
 msgstr "gitdir 文件不存在"
 
-#: worktree.c:783 worktree.c:792
+#: worktree.c:779 worktree.c:788
 #, c-format
 msgid "unable to read gitdir file (%s)"
 msgstr "无法读取 gitdir 文件(%s)"
 
-#: worktree.c:802
+#: worktree.c:798
 #, c-format
 msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
 msgstr "读取过短(期望 %<PRIuMAX> 字节,读取 %<PRIuMAX>)"
 
-#: worktree.c:810
+#: worktree.c:806
 msgid "invalid gitdir file"
 msgstr "无效的 gitdir 文件"
 
-#: worktree.c:818
+#: worktree.c:814
 msgid "gitdir file points to non-existent location"
 msgstr "gitdir 文件指向一个不存在的位置"
 
-#: wrapper.c:151
+#: worktree.c:830
+#, c-format
+msgid "unable to set %s in '%s'"
+msgstr "无法在 '%2$s' 中设置 %1$s"
+
+#: worktree.c:832
+#, c-format
+msgid "unable to unset %s in '%s'"
+msgstr "无法在 '%2$s' 中取消设置 %1$s"
+
+#: worktree.c:852
+msgid "failed to set extensions.worktreeConfig setting"
+msgstr "无法设置 extensions.worktreeConfig"
+
+#: wrapper.c:161
 #, c-format
 msgid "could not setenv '%s'"
-msgstr "不能设置环境变量 '%s'"
+msgstr "无法设置环境变量 '%s'"
 
-#: wrapper.c:203
+#: wrapper.c:213
 #, c-format
 msgid "unable to create '%s'"
-msgstr "不能创建 '%s'"
+msgstr "无法创建 '%s'"
 
-#: wrapper.c:205 wrapper.c:375
+#: wrapper.c:215 wrapper.c:385
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr "无法打开 '%s' 进行读写"
 
-#: wrapper.c:406 wrapper.c:607
+#: wrapper.c:416 wrapper.c:683
 #, c-format
 msgid "unable to access '%s'"
 msgstr "不能访问 '%s'"
 
-#: wrapper.c:615
+#: wrapper.c:691
 msgid "unable to get current working directory"
 msgstr "不能获取当前工作目录"
 
@@ -9714,11 +9970,11 @@ msgstr "  (酌情使用 \"git add/rm <文件>...\" 标记解决方案)"
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr "  (使用 \"git rm <文件>...\" 标记解决方案)"
 
-#: wt-status.c:211 wt-status.c:1131
+#: wt-status.c:211 wt-status.c:1140
 msgid "Changes to be committed:"
 msgstr "要提交的变更:"
 
-#: wt-status.c:234 wt-status.c:1140
+#: wt-status.c:234 wt-status.c:1149
 msgid "Changes not staged for commit:"
 msgstr "尚未暂存以备提交的变更:"
 
@@ -9824,22 +10080,22 @@ msgstr "修改的内容, "
 msgid "untracked content, "
 msgstr "未跟踪的内容, "
 
-#: wt-status.c:964
+#: wt-status.c:973
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] "您的贮藏区当前有 %d 条记录"
 msgstr[1] "您的贮藏区当前有 %d 条记录"
 
-#: wt-status.c:995
+#: wt-status.c:1004
 msgid "Submodules changed but not updated:"
 msgstr "子模组已修改但尚未更新:"
 
-#: wt-status.c:997
+#: wt-status.c:1006
 msgid "Submodule changes to be committed:"
 msgstr "要提交的子模组变更:"
 
-#: wt-status.c:1079
+#: wt-status.c:1088
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -9847,7 +10103,7 @@ msgstr ""
 "不要改动或删除上面的一行。\n"
 "其下所有内容都将被忽略。"
 
-#: wt-status.c:1171
+#: wt-status.c:1180
 #, c-format
 msgid ""
 "\n"
@@ -9858,290 +10114,290 @@ msgstr ""
 "花了 %.2f 秒才计算出分支的领先/落后范围。\n"
 "为避免,您可以使用 '--no-ahead-behind'。\n"
 
-#: wt-status.c:1201
+#: wt-status.c:1210
 msgid "You have unmerged paths."
 msgstr "您有尚未合并的路径。"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1204
+#: wt-status.c:1213
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (解决冲突并运行 \"git commit\")"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1206
+#: wt-status.c:1215
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (使用 \"git merge --abort\" 终止合并)"
 
-#: wt-status.c:1210
+#: wt-status.c:1219
 msgid "All conflicts fixed but you are still merging."
 msgstr "所有冲突已解决但您仍处于合并中。"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1213
+#: wt-status.c:1222
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (使用 \"git commit\" 结束合并)"
 
-#: wt-status.c:1224
+#: wt-status.c:1233
 msgid "You are in the middle of an am session."
 msgstr "您正处于 am 操作过程中。"
 
-#: wt-status.c:1227
+#: wt-status.c:1236
 msgid "The current patch is empty."
 msgstr "当前的补丁为空。"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1232
+#: wt-status.c:1241
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (解决冲突,然后运行 \"git am --continue\")"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1234
+#: wt-status.c:1243
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (使用 \"git am --skip\" 跳过此补丁)"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1237
+#: wt-status.c:1246
 msgid ""
 "  (use \"git am --allow-empty\" to record this patch as an empty commit)"
 msgstr "  (使用 \"git am --allow-empty\" 将这个补丁记录为空提交)"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1239
+#: wt-status.c:1248
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr "  (使用 \"git am --abort\" 恢复原有分支)"
 
-#: wt-status.c:1372
+#: wt-status.c:1381
 msgid "git-rebase-todo is missing."
 msgstr "git-rebase-todo 丢失。"
 
-#: wt-status.c:1374
+#: wt-status.c:1383
 msgid "No commands done."
 msgstr "没有命令被执行。"
 
-#: wt-status.c:1377
+#: wt-status.c:1386
 #, c-format
-msgid "Last command done (%d command done):"
-msgid_plural "Last commands done (%d commands done):"
-msgstr[0] "最后一条命令已完成(%d 条命令被执行):"
-msgstr[1] "最后的命令已完成(%d 条命令被执行):"
+msgid "Last command done (%<PRIuMAX> command done):"
+msgid_plural "Last commands done (%<PRIuMAX> commands done):"
+msgstr[0] "最后完成的命令(%<PRIuMAX> 条命令被执行):"
+msgstr[1] "最后完成的命令(%<PRIuMAX> 条命令被执行):"
 
-#: wt-status.c:1388
+#: wt-status.c:1397
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (更多参见文件 %s)"
 
-#: wt-status.c:1393
+#: wt-status.c:1402
 msgid "No commands remaining."
 msgstr "未剩下任何命令。"
 
-#: wt-status.c:1396
+#: wt-status.c:1405
 #, c-format
-msgid "Next command to do (%d remaining command):"
-msgid_plural "Next commands to do (%d remaining commands):"
-msgstr[0] "接下来要执行的命令(剩余 %d 条命令):"
-msgstr[1] "接下来要执行的命令(剩余 %d 条命令):"
+msgid "Next command to do (%<PRIuMAX> remaining command):"
+msgid_plural "Next commands to do (%<PRIuMAX> remaining commands):"
+msgstr[0] "接下来要执行的命令(剩余 %<PRIuMAX> 条命令):"
+msgstr[1] "接下来要执行的命令(剩余 %<PRIuMAX> 条命令):"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1404
+#: wt-status.c:1413
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr "  (使用 \"git rebase --edit-todo\" 来查看和编辑)"
 
-#: wt-status.c:1416
+#: wt-status.c:1425
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "您在执行将分支 '%s' 变基到 '%s' 的操作。"
 
-#: wt-status.c:1421
+#: wt-status.c:1430
 msgid "You are currently rebasing."
 msgstr "您在执行变基操作。"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1434
+#: wt-status.c:1443
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr "  (解决冲突,然后运行 \"git rebase --continue\")"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1436
+#: wt-status.c:1445
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (使用 \"git rebase --skip\" 跳过此补丁)"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1438
+#: wt-status.c:1447
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr "  (使用 \"git rebase --abort\" 以检出原有分支)"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1445
+#: wt-status.c:1454
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr "  (所有冲突已解决:运行 \"git rebase --continue\")"
 
-#: wt-status.c:1449
+#: wt-status.c:1458
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
 msgstr "您在执行将分支 '%s' 变基到 '%s' 的操作时拆分提交。"
 
-#: wt-status.c:1454
+#: wt-status.c:1463
 msgid "You are currently splitting a commit during a rebase."
 msgstr "您在执行变基操作时拆分提交。"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1457
+#: wt-status.c:1466
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr "  (一旦您工作目录提交干净后,运行 \"git rebase --continue\")"
 
-#: wt-status.c:1461
+#: wt-status.c:1470
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr "您在执行将分支 '%s' 变基到 '%s' 的操作时编辑提交。"
 
-#: wt-status.c:1466
+#: wt-status.c:1475
 msgid "You are currently editing a commit during a rebase."
 msgstr "您在执行变基操作时编辑提交。"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1469
+#: wt-status.c:1478
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr "  (使用 \"git commit --amend\" 修补当前提交)"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1471
+#: wt-status.c:1480
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr "  (当您对您的修改满意后执行 \"git rebase --continue\")"
 
-#: wt-status.c:1482
+#: wt-status.c:1491
 msgid "Cherry-pick currently in progress."
 msgstr "拣选操作正在进行中。"
 
-#: wt-status.c:1485
+#: wt-status.c:1494
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "您在执行拣选提交 %s 的操作。"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1492
+#: wt-status.c:1501
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr "  (解决冲突并运行 \"git cherry-pick --continue\")"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1495
+#: wt-status.c:1504
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (执行 \"git cherry-pick --continue\" 以继续)"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1498
+#: wt-status.c:1507
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr "  (所有冲突已解决:运行 \"git cherry-pick --continue\")"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1500
+#: wt-status.c:1509
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr "  (使用 \"git cherry-pick --skip\" 跳过此补丁)"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1502
+#: wt-status.c:1511
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr "  (使用 \"git cherry-pick --abort\" 以取消拣选操作)"
 
-#: wt-status.c:1512
+#: wt-status.c:1521
 msgid "Revert currently in progress."
 msgstr "还原操作正在行中。"
 
-#: wt-status.c:1515
+#: wt-status.c:1524
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "您在执行反转提交 %s 的操作。"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1521
+#: wt-status.c:1530
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (解决冲突并执行 \"git revert --continue\")"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1524
+#: wt-status.c:1533
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (执行 \"git revert --continue\" 以继续)"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1527
+#: wt-status.c:1536
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (所有冲突已解决:执行 \"git revert --continue\")"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1529
+#: wt-status.c:1538
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr "  (使用 \"git revert --skip\" 跳过此补丁)"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1531
+#: wt-status.c:1540
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (使用 \"git revert --abort\" 以取消反转提交操作)"
 
-#: wt-status.c:1541
+#: wt-status.c:1550
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "您在执行从分支 '%s' 开始的二分查找操作。"
 
-#: wt-status.c:1545
+#: wt-status.c:1554
 msgid "You are currently bisecting."
 msgstr "您在执行二分查找操作。"
 
 #  译者:注意保持前导空格
-#: wt-status.c:1548
+#: wt-status.c:1557
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (使用 \"git bisect reset\" 以回到原有分支)"
 
-#: wt-status.c:1559
+#: wt-status.c:1568
 msgid "You are in a sparse checkout."
 msgstr "您处于一个稀疏检出中。"
 
-#: wt-status.c:1562
+#: wt-status.c:1571
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
 msgstr "您处于稀疏检出状态,包含 %d%% 的跟踪文件"
 
-#: wt-status.c:1806
+#: wt-status.c:1815
 msgid "On branch "
 msgstr "位于分支 "
 
-#: wt-status.c:1813
+#: wt-status.c:1822
 msgid "interactive rebase in progress; onto "
 msgstr "交互式变基操作正在进行中;至 "
 
-#: wt-status.c:1815
+#: wt-status.c:1824
 msgid "rebase in progress; onto "
 msgstr "变基操作正在进行中;至 "
 
-#: wt-status.c:1820
+#: wt-status.c:1829
 msgid "HEAD detached at "
 msgstr "头指针分离于 "
 
-#: wt-status.c:1822
+#: wt-status.c:1831
 msgid "HEAD detached from "
 msgstr "头指针分离自 "
 
-#: wt-status.c:1825
+#: wt-status.c:1834
 msgid "Not currently on any branch."
 msgstr "当前不在任何分支上。"
 
-#: wt-status.c:1842
+#: wt-status.c:1851
 msgid "Initial commit"
 msgstr "初始提交"
 
-#: wt-status.c:1843
+#: wt-status.c:1852
 msgid "No commits yet"
 msgstr "尚无提交"
 
-#: wt-status.c:1857
+#: wt-status.c:1866
 msgid "Untracked files"
 msgstr "未跟踪的文件"
 
-#: wt-status.c:1859
+#: wt-status.c:1868
 msgid "Ignored files"
 msgstr "忽略的文件"
 
-#: wt-status.c:1863
+#: wt-status.c:1872
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -10151,94 +10407,94 @@ msgstr ""
 "耗费了 %.2f 秒以枚举未跟踪的文件。'status -uno' 也许能提高速度,\n"
 "但您需要小心不要忘了添加新文件(参见 'git help status')。"
 
-#: wt-status.c:1869
+#: wt-status.c:1878
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "未跟踪的文件没有列出%s"
 
 #  译者:中文字符串拼接,可删除前导空格
-#: wt-status.c:1871
+#: wt-status.c:1880
 msgid " (use -u option to show untracked files)"
 msgstr "(使用 -u 参数显示未跟踪的文件)"
 
-#: wt-status.c:1877
+#: wt-status.c:1886
 msgid "No changes"
 msgstr "没有修改"
 
-#: wt-status.c:1882
+#: wt-status.c:1891
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr "修改尚未加入提交(使用 \"git add\" 和/或 \"git commit -a\")\n"
 
-#: wt-status.c:1886
+#: wt-status.c:1895
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "修改尚未加入提交\n"
 
-#: wt-status.c:1890
+#: wt-status.c:1899
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
 "track)\n"
 msgstr "提交为空,但是存在尚未跟踪的文件(使用 \"git add\" 建立跟踪)\n"
 
-#: wt-status.c:1894
+#: wt-status.c:1903
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr "提交为空,但是存在尚未跟踪的文件\n"
 
-#: wt-status.c:1898
+#: wt-status.c:1907
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr "无文件要提交(创建/拷贝文件并使用 \"git add\" 建立跟踪)\n"
 
-#: wt-status.c:1902 wt-status.c:1908
+#: wt-status.c:1911 wt-status.c:1917
 #, c-format
 msgid "nothing to commit\n"
 msgstr "无文件要提交\n"
 
-#: wt-status.c:1905
+#: wt-status.c:1914
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr "无文件要提交(使用 -u 显示未跟踪的文件)\n"
 
-#: wt-status.c:1910
+#: wt-status.c:1919
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "无文件要提交,干净的工作区\n"
 
-#: wt-status.c:2015
+#: wt-status.c:2024
 msgid "No commits yet on "
 msgstr "尚无提交在 "
 
-#: wt-status.c:2019
+#: wt-status.c:2028
 msgid "HEAD (no branch)"
 msgstr "HEAD(非分支)"
 
-#: wt-status.c:2050
+#: wt-status.c:2059
 msgid "different"
 msgstr "不同"
 
 #  译者:注意保持句尾空格
-#: wt-status.c:2052 wt-status.c:2060
+#: wt-status.c:2061 wt-status.c:2069
 msgid "behind "
 msgstr "落后 "
 
-#: wt-status.c:2055 wt-status.c:2058
+#: wt-status.c:2064 wt-status.c:2067
 msgid "ahead "
 msgstr "领先 "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2596
+#: wt-status.c:2605
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "不能%s:您有未暂存的变更。"
 
-#: wt-status.c:2602
+#: wt-status.c:2611
 msgid "additionally, your index contains uncommitted changes."
 msgstr "另外,您的索引中包含未提交的变更。"
 
-#: wt-status.c:2604
+#: wt-status.c:2613
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "不能%s:您的索引中包含未提交的变更。"
@@ -10261,145 +10517,149 @@ msgstr "无法启动 accept_thread '%s'"
 msgid "could not start worker[0] for '%s'"
 msgstr "无法启动 '%s' 的 worker[0]"
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:347
+#: compat/precompose_utf8.c:58 builtin/clone.c:353
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "无法删除 '%s'"
 
+#: compat/fsmonitor/fsm-listen-darwin.c:355
+msgid "Unable to create FSEventStream."
+msgstr "无法创建 FSEventStream。"
+
+#: compat/fsmonitor/fsm-listen-darwin.c:403
+msgid "Failed to start the FSEventStream"
+msgstr "无法启动 FSEventStream"
+
 #: builtin/add.c:26
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<选项>] [--] <路径规格>..."
 
-#: builtin/add.c:64
+#: builtin/add.c:63
 #, c-format
 msgid "cannot chmod %cx '%s'"
 msgstr "不能 chmod %cx '%s'"
 
-#: builtin/add.c:106
+#: builtin/add.c:105
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "意外的差异状态 %c"
 
-#: builtin/add.c:111 builtin/commit.c:298
+#: builtin/add.c:110 builtin/commit.c:299
 msgid "updating files failed"
 msgstr "更新文件失败"
 
-#: builtin/add.c:121
+#: builtin/add.c:120
 #, c-format
 msgid "remove '%s'\n"
 msgstr "删除 '%s'\n"
 
-#: builtin/add.c:205
+#: builtin/add.c:204
 msgid "Unstaged changes after refreshing the index:"
 msgstr "刷新索引之后尚未被暂存的变更:"
 
-#: builtin/add.c:313 builtin/rev-parse.c:993
+#: builtin/add.c:312 builtin/rev-parse.c:993
 msgid "Could not read the index"
 msgstr "不能读取索引"
 
-#: builtin/add.c:326
+#: builtin/add.c:325
 msgid "Could not write patch"
 msgstr "不能生成补丁"
 
-#: builtin/add.c:329
+#: builtin/add.c:328
 msgid "editing patch failed"
 msgstr "编辑补丁失败"
 
-#: builtin/add.c:332
+#: builtin/add.c:331
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "不能对 '%s' 调用 stat"
 
-#: builtin/add.c:334
+#: builtin/add.c:333
 msgid "Empty patch. Aborted."
 msgstr "空补丁。异常终止。"
 
-#: builtin/add.c:340
+#: builtin/add.c:339
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "不能应用 '%s'"
 
-#: builtin/add.c:348
+#: builtin/add.c:347
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr "下列路径根据您的一个 .gitignore 文件而被忽略:\n"
 
-#: builtin/add.c:368 builtin/clean.c:927 builtin/fetch.c:174 builtin/mv.c:124
+#: builtin/add.c:367 builtin/clean.c:927 builtin/fetch.c:175 builtin/mv.c:124
 #: builtin/prune-packed.c:14 builtin/pull.c:208 builtin/push.c:550
-#: builtin/remote.c:1429 builtin/rm.c:244 builtin/send-pack.c:194
+#: builtin/remote.c:1454 builtin/rm.c:244 builtin/send-pack.c:194
 msgid "dry run"
 msgstr "演习"
 
-#: builtin/add.c:369 builtin/check-ignore.c:22 builtin/commit.c:1484
-#: builtin/count-objects.c:98 builtin/fsck.c:789 builtin/log.c:2313
+#: builtin/add.c:368 builtin/check-ignore.c:22 builtin/commit.c:1483
+#: builtin/count-objects.c:98 builtin/fsck.c:789 builtin/log.c:2338
 #: builtin/mv.c:123 builtin/read-tree.c:120
 msgid "be verbose"
 msgstr "冗长输出"
 
-#: builtin/add.c:371
+#: builtin/add.c:370
 msgid "interactive picking"
 msgstr "交互式拣选"
 
-#: builtin/add.c:372 builtin/checkout.c:1581 builtin/reset.c:409
+#: builtin/add.c:371 builtin/checkout.c:1599 builtin/reset.c:417
 msgid "select hunks interactively"
 msgstr "交互式挑选数据块"
 
-#: builtin/add.c:373
+#: builtin/add.c:372
 msgid "edit current diff and apply"
 msgstr "编辑当前差异并应用"
 
-#: builtin/add.c:374
+#: builtin/add.c:373
 msgid "allow adding otherwise ignored files"
 msgstr "允许添加忽略的文件"
 
-#: builtin/add.c:375
+#: builtin/add.c:374
 msgid "update tracked files"
 msgstr "更新已跟踪的文件"
 
-#: builtin/add.c:376
+#: builtin/add.c:375
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr "对已跟踪文件(暗含 -u)重新归一换行符"
 
-#: builtin/add.c:377
+#: builtin/add.c:376
 msgid "record only the fact that the path will be added later"
 msgstr "只记录,该路径稍后再添加"
 
-#: builtin/add.c:378
+#: builtin/add.c:377
 msgid "add changes from all tracked and untracked files"
 msgstr "添加所有改变的已跟踪文件和未跟踪文件"
 
-#: builtin/add.c:381
+#: builtin/add.c:380
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr "忽略工作区中移除的路径(和 --no-all 相同)"
 
-#: builtin/add.c:383
+#: builtin/add.c:382
 msgid "don't add, only refresh the index"
 msgstr "不添加,只刷新索引"
 
-#: builtin/add.c:384
+#: builtin/add.c:383
 msgid "just skip files which cannot be added because of errors"
 msgstr "跳过因出错不能添加的文件"
 
-#: builtin/add.c:385
+#: builtin/add.c:384
 msgid "check if - even missing - files are ignored in dry run"
 msgstr "检查在演习模式下文件(即使不存在)是否被忽略"
 
-#: builtin/add.c:386 builtin/mv.c:128 builtin/rm.c:251
+#: builtin/add.c:385 builtin/mv.c:128 builtin/rm.c:251
 msgid "allow updating entries outside of the sparse-checkout cone"
 msgstr "允许更新稀疏检出锥以外的条目"
 
-#: builtin/add.c:388 builtin/update-index.c:1004
+#: builtin/add.c:387 builtin/update-index.c:1023
 msgid "override the executable bit of the listed files"
 msgstr "覆盖列表里文件的可执行位"
 
-#: builtin/add.c:390
+#: builtin/add.c:389
 msgid "warn when adding an embedded repository"
 msgstr "创建一个嵌入式仓库时给予警告"
 
-#: builtin/add.c:392
-msgid "backend for `git stash -p`"
-msgstr "`git stash -p` 的后端"
-
-#: builtin/add.c:410
+#: builtin/add.c:407
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -10427,12 +10687,12 @@ msgstr ""
 "\n"
 "参见 \"git help submodule\" 获取更多信息。"
 
-#: builtin/add.c:439
+#: builtin/add.c:436
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "正在添加嵌入式 git 仓库:%s"
 
-#: builtin/add.c:459
+#: builtin/add.c:456
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
@@ -10442,27 +10702,27 @@ msgstr ""
 "运行下面的命令来关闭本消息\n"
 "\"git config advice.addIgnoredFile false\""
 
-#: builtin/add.c:474
+#: builtin/add.c:471
 msgid "adding files failed"
 msgstr "添加文件失败"
 
-#: builtin/add.c:548
+#: builtin/add.c:534
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "参数 --chmod 取值 '%s' 必须是 -x 或 +x"
 
-#: builtin/add.c:569 builtin/checkout.c:1751 builtin/commit.c:364
-#: builtin/reset.c:429 builtin/rm.c:275 builtin/stash.c:1713
+#: builtin/add.c:555 builtin/checkout.c:1770 builtin/commit.c:365
+#: builtin/reset.c:436 builtin/rm.c:275 builtin/stash.c:1702
 #, c-format
 msgid "'%s' and pathspec arguments cannot be used together"
 msgstr "'%s' 和路径规格参数不能同时使用"
 
-#: builtin/add.c:580
+#: builtin/add.c:566
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "没有指定文件,也没有文件被添加。\n"
 
-#: builtin/add.c:582
+#: builtin/add.c:568
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
@@ -10472,111 +10732,106 @@ msgstr ""
 "运行下面的命令来关闭本消息\n"
 "\"git config advice.addEmptyPathspec false\""
 
-#: builtin/am.c:202
-#, c-format
-msgid "Invalid value for --empty: %s"
-msgstr "--empty 的值无效:%s"
-
-#: builtin/am.c:392
+#: builtin/am.c:393
 msgid "could not parse author script"
 msgstr "不能解析作者脚本"
 
-#: builtin/am.c:482
+#: builtin/am.c:483
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "'%s' 被 applypatch-msg 钩子删除"
 
-#: builtin/am.c:524
+#: builtin/am.c:525
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "非法的输入行:'%s'。"
 
-#: builtin/am.c:562
+#: builtin/am.c:563
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "从 '%s' 拷贝注解到 '%s' 时失败"
 
-#: builtin/am.c:588
+#: builtin/am.c:589
 msgid "fseek failed"
 msgstr "fseek 失败"
 
-#: builtin/am.c:776
+#: builtin/am.c:777
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "无法解析补丁 '%s'"
 
-#: builtin/am.c:841
+#: builtin/am.c:842
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "一次只能有一个 StGIT 补丁队列被应用"
 
-#: builtin/am.c:889
+#: builtin/am.c:890
 msgid "invalid timestamp"
 msgstr "无效的时间戳"
 
-#: builtin/am.c:894 builtin/am.c:906
+#: builtin/am.c:895 builtin/am.c:907
 msgid "invalid Date line"
 msgstr "无效的日期行"
 
-#: builtin/am.c:901
+#: builtin/am.c:902
 msgid "invalid timezone offset"
 msgstr "无效的时区偏移值"
 
-#: builtin/am.c:994
+#: builtin/am.c:995
 msgid "Patch format detection failed."
 msgstr "补丁格式探测失败。"
 
-#: builtin/am.c:999 builtin/clone.c:300
+#: builtin/am.c:1000 builtin/clone.c:306
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "无法创建目录 '%s'"
 
-#: builtin/am.c:1004
+#: builtin/am.c:1005
 msgid "Failed to split patches."
 msgstr "无法拆分补丁。"
 
-#: builtin/am.c:1153
+#: builtin/am.c:1154
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "当您解决这一问题,执行 \"%s --continue\"。"
 
-#: builtin/am.c:1154
+#: builtin/am.c:1155
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "如果您想要跳过这一补丁,则执行 \"%s --skip\"。"
 
-#: builtin/am.c:1159
+#: builtin/am.c:1160
 #, c-format
 msgid "To record the empty patch as an empty commit, run \"%s --allow-empty\"."
 msgstr "若要把空补丁记录为空提交,执行 \"%s --allow-empty\"。"
 
-#: builtin/am.c:1161
+#: builtin/am.c:1162
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr "若要复原至原始分支并停止补丁操作,执行 \"%s --abort\"。"
 
-#: builtin/am.c:1256
+#: builtin/am.c:1257
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr "补丁使用 format=flowed 格式发送,行尾的空格可能会丢失。"
 
-#: builtin/am.c:1344
+#: builtin/am.c:1345
 #, c-format
 msgid "missing author line in commit %s"
 msgstr "在提交 %s 中缺失作者行"
 
-#: builtin/am.c:1347
+#: builtin/am.c:1348
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "无效的身份标识:%.*s"
 
-#: builtin/am.c:1566
+#: builtin/am.c:1567
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr "仓库缺乏必要的数据对象以进行三方合并。"
 
-#: builtin/am.c:1568
+#: builtin/am.c:1569
 msgid "Using index info to reconstruct a base tree..."
 msgstr "使用索引来重建一个(三方合并的)基础目录树..."
 
-#: builtin/am.c:1587
+#: builtin/am.c:1588
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -10584,24 +10839,24 @@ msgstr ""
 "您是否曾手动编辑过您的补丁?\n"
 "无法应用补丁到索引中的数据对象上。"
 
-#: builtin/am.c:1593
+#: builtin/am.c:1594
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "回落到基础版本上打补丁及进行三方合并..."
 
-#: builtin/am.c:1619
+#: builtin/am.c:1620
 msgid "Failed to merge in the changes."
 msgstr "无法合并变更。"
 
-#: builtin/am.c:1651
+#: builtin/am.c:1652
 msgid "applying to an empty history"
 msgstr "正应用到一个空历史上"
 
-#: builtin/am.c:1703 builtin/am.c:1707
+#: builtin/am.c:1704 builtin/am.c:1708
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "无法继续:%s 不存在。"
 
-#: builtin/am.c:1725
+#: builtin/am.c:1726
 msgid "Commit Body is:"
 msgstr "提交内容为:"
 
@@ -10609,57 +10864,57 @@ msgstr "提交内容为:"
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1735
+#: builtin/am.c:1736
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr "应用?是[y]/否[n]/编辑[e]/查看补丁[v]/应用所有[a]:"
 
-#: builtin/am.c:1781 builtin/commit.c:409
+#: builtin/am.c:1782 builtin/commit.c:410
 msgid "unable to write index file"
 msgstr "无法写入索引文件"
 
-#: builtin/am.c:1785
+#: builtin/am.c:1786
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "脏索引:不能应用补丁(脏文件:%s)"
 
-#: builtin/am.c:1827
+#: builtin/am.c:1828
 #, c-format
 msgid "Skipping: %.*s"
 msgstr "跳过:%.*s"
 
-#: builtin/am.c:1832
+#: builtin/am.c:1833
 #, c-format
 msgid "Creating an empty commit: %.*s"
 msgstr "创建空提交:%.*s"
 
-#: builtin/am.c:1836
+#: builtin/am.c:1837
 msgid "Patch is empty."
 msgstr "补丁为空。"
 
-#: builtin/am.c:1847 builtin/am.c:1916
+#: builtin/am.c:1848 builtin/am.c:1917
 #, c-format
 msgid "Applying: %.*s"
 msgstr "应用:%.*s"
 
-#: builtin/am.c:1864
+#: builtin/am.c:1865
 msgid "No changes -- Patch already applied."
 msgstr "没有变更 —— 补丁已经应用过。"
 
-#: builtin/am.c:1870
+#: builtin/am.c:1871
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "打补丁失败于 %s %.*s"
 
-#: builtin/am.c:1874
+#: builtin/am.c:1875
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr "用 'git am --show-current-patch=diff' 命令查看失败的补丁"
 
-#: builtin/am.c:1920
+#: builtin/am.c:1921
 msgid "No changes - recorded it as an empty commit."
 msgstr "没有变更 —— 记录为空提交。"
 
-#: builtin/am.c:1922
+#: builtin/am.c:1923
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -10669,7 +10924,7 @@ msgstr ""
 "如果没有什么要添加到暂存区的,则很可能是其它提交已经引入了相同的变更。\n"
 "您也许想要跳过这个补丁。"
 
-#: builtin/am.c:1930
+#: builtin/am.c:1931
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -10680,183 +10935,174 @@ msgstr ""
 "您应该对已经冲突解决的每一个文件执行 'git add' 来标记已经完成。 \n"
 "您可以对 \"由他们删除\" 的文件执行 `git rm` 命令。"
 
-#: builtin/am.c:2038 builtin/am.c:2042 builtin/am.c:2054 builtin/reset.c:448
-#: builtin/reset.c:456
+#: builtin/am.c:2039 builtin/am.c:2043 builtin/am.c:2055 builtin/reset.c:455
+#: builtin/reset.c:463
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "不能解析对象 '%s'。"
 
-#: builtin/am.c:2090 builtin/am.c:2166
+#: builtin/am.c:2091 builtin/am.c:2167
 msgid "failed to clean index"
 msgstr "无法清空索引"
 
-#: builtin/am.c:2134
+#: builtin/am.c:2135
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
 msgstr "您好像在上一次 'am' 失败后移动了 HEAD。未回退至 ORIG_HEAD"
 
-#: builtin/am.c:2242
-#, c-format
-msgid "Invalid value for --patch-format: %s"
-msgstr "无效的 --patch-format 值:%s"
-
-#: builtin/am.c:2285
-#, c-format
-msgid "Invalid value for --show-current-patch: %s"
-msgstr "无效的 --show-current-patch 值:%s"
-
-#: builtin/am.c:2289
+#: builtin/am.c:2292
 #, c-format
 msgid "options '%s=%s' and '%s=%s' cannot be used together"
 msgstr "选项 '%s=%s' 和 '%s=%s' 不能同时使用"
 
-#: builtin/am.c:2320
+#: builtin/am.c:2323
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<选项>] [(<mbox> | <Maildir>)...]"
 
-#: builtin/am.c:2321
+#: builtin/am.c:2324
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<选项>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2327
+#: builtin/am.c:2330
 msgid "run interactively"
 msgstr "以交互式方式运行"
 
-#: builtin/am.c:2329
+#: builtin/am.c:2332
 msgid "historical option -- no-op"
 msgstr "老的参数 —— 无作用"
 
-#: builtin/am.c:2331
+#: builtin/am.c:2334
 msgid "allow fall back on 3way merging if needed"
 msgstr "如果必要,允许使用三方合并。"
 
-#: builtin/am.c:2332 builtin/init-db.c:547 builtin/prune-packed.c:16
-#: builtin/repack.c:642 builtin/stash.c:962
+#: builtin/am.c:2335 builtin/init-db.c:547 builtin/prune-packed.c:16
+#: builtin/repack.c:646 builtin/stash.c:946
 msgid "be quiet"
 msgstr "静默模式"
 
-#: builtin/am.c:2334
+#: builtin/am.c:2337
 msgid "add a Signed-off-by trailer to the commit message"
 msgstr "在提交说明中添加 Signed-off-by 尾注"
 
-#: builtin/am.c:2337
+#: builtin/am.c:2340
 msgid "recode into utf8 (default)"
 msgstr "使用 utf8 字符集(默认)"
 
-#: builtin/am.c:2339
+#: builtin/am.c:2342
 msgid "pass -k flag to git-mailinfo"
 msgstr "向 git-mailinfo 传递 -k 参数"
 
-#: builtin/am.c:2341
+#: builtin/am.c:2344
 msgid "pass -b flag to git-mailinfo"
 msgstr "向 git-mailinfo 传递 -b 参数"
 
-#: builtin/am.c:2343
+#: builtin/am.c:2346
 msgid "pass -m flag to git-mailinfo"
 msgstr "向 git-mailinfo 传递 -m 参数"
 
-#: builtin/am.c:2345
+#: builtin/am.c:2348
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "针对 mbox 格式,向 git-mailsplit 传递 --keep-cr 参数"
 
-#: builtin/am.c:2348
+#: builtin/am.c:2351
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr "不向 git-mailsplit 传递 --keep-cr 参数,覆盖 am.keepcr 的设置"
 
-#: builtin/am.c:2351
+#: builtin/am.c:2354
 msgid "strip everything before a scissors line"
 msgstr "丢弃裁切线前的所有内容"
 
-#: builtin/am.c:2353
+#: builtin/am.c:2356
 msgid "pass it through git-mailinfo"
 msgstr "传递给 git-mailinfo"
 
-#: builtin/am.c:2356 builtin/am.c:2359 builtin/am.c:2362 builtin/am.c:2365
-#: builtin/am.c:2368 builtin/am.c:2371 builtin/am.c:2374 builtin/am.c:2377
-#: builtin/am.c:2383
+#: builtin/am.c:2359 builtin/am.c:2362 builtin/am.c:2365 builtin/am.c:2368
+#: builtin/am.c:2371 builtin/am.c:2374 builtin/am.c:2377 builtin/am.c:2380
+#: builtin/am.c:2386
 msgid "pass it through git-apply"
 msgstr "传递给 git-apply"
 
-#: builtin/am.c:2373 builtin/commit.c:1515 builtin/fmt-merge-msg.c:18
-#: builtin/fmt-merge-msg.c:21 builtin/grep.c:919 builtin/merge.c:263
+#: builtin/am.c:2376 builtin/commit.c:1514 builtin/fmt-merge-msg.c:18
+#: builtin/fmt-merge-msg.c:21 builtin/grep.c:920 builtin/merge.c:263
 #: builtin/pull.c:142 builtin/pull.c:204 builtin/pull.c:221
-#: builtin/rebase.c:1046 builtin/repack.c:653 builtin/repack.c:657
-#: builtin/repack.c:659 builtin/show-branch.c:649 builtin/show-ref.c:172
-#: builtin/tag.c:445 parse-options.h:154 parse-options.h:175
-#: parse-options.h:317
+#: builtin/rebase.c:1074 builtin/repack.c:657 builtin/repack.c:661
+#: builtin/repack.c:663 builtin/show-branch.c:650 builtin/show-ref.c:172
+#: builtin/tag.c:446 parse-options.h:159 parse-options.h:180
+#: parse-options.h:348
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2379 builtin/branch.c:680 builtin/bugreport.c:109
-#: builtin/for-each-ref.c:41 builtin/replace.c:555 builtin/tag.c:479
-#: builtin/verify-tag.c:38
+#: builtin/am.c:2382 builtin/branch.c:695 builtin/bugreport.c:109
+#: builtin/cat-file.c:848 builtin/cat-file.c:852 builtin/cat-file.c:856
+#: builtin/for-each-ref.c:41 builtin/ls-tree.c:357 builtin/replace.c:555
+#: builtin/tag.c:480 builtin/verify-tag.c:38
 msgid "format"
 msgstr "格式"
 
-#: builtin/am.c:2380
+#: builtin/am.c:2383
 msgid "format the patch(es) are in"
 msgstr "补丁的格式"
 
-#: builtin/am.c:2386
+#: builtin/am.c:2389
 msgid "override error message when patch failure occurs"
 msgstr "打补丁失败时显示的错误信息"
 
-#: builtin/am.c:2388
+#: builtin/am.c:2391
 msgid "continue applying patches after resolving a conflict"
 msgstr "冲突解决后继续应用补丁"
 
-#: builtin/am.c:2391
+#: builtin/am.c:2394
 msgid "synonyms for --continue"
 msgstr "和 --continue 同义"
 
-#: builtin/am.c:2394
+#: builtin/am.c:2397
 msgid "skip the current patch"
 msgstr "跳过当前补丁"
 
-#: builtin/am.c:2397
+#: builtin/am.c:2400
 msgid "restore the original branch and abort the patching operation"
 msgstr "恢复原始分支并终止打补丁操作"
 
-#: builtin/am.c:2400
+#: builtin/am.c:2403
 msgid "abort the patching operation but keep HEAD where it is"
 msgstr "终止补丁操作但保持 HEAD 不变"
 
-#: builtin/am.c:2404
+#: builtin/am.c:2407
 msgid "show the patch being applied"
 msgstr "显示正在应用的补丁"
 
-#: builtin/am.c:2408
+#: builtin/am.c:2411
 msgid "record the empty patch as an empty commit"
 msgstr "把空补丁记录为空提交"
 
-#: builtin/am.c:2412
+#: builtin/am.c:2415
 msgid "lie about committer date"
 msgstr "将作者日期作为提交日期"
 
-#: builtin/am.c:2414
+#: builtin/am.c:2417
 msgid "use current timestamp for author date"
 msgstr "用当前时间作为作者日期"
 
-#: builtin/am.c:2416 builtin/commit-tree.c:118 builtin/commit.c:1643
-#: builtin/merge.c:302 builtin/pull.c:179 builtin/rebase.c:1099
-#: builtin/revert.c:117 builtin/tag.c:460
+#: builtin/am.c:2419 builtin/commit-tree.c:118 builtin/commit.c:1642
+#: builtin/merge.c:302 builtin/pull.c:179 builtin/rebase.c:1127
+#: builtin/revert.c:117 builtin/tag.c:461
 msgid "key-id"
 msgstr "key-id"
 
-#: builtin/am.c:2417 builtin/rebase.c:1100
+#: builtin/am.c:2420 builtin/rebase.c:1128
 msgid "GPG-sign commits"
 msgstr "使用 GPG 签名提交"
 
-#: builtin/am.c:2420
+#: builtin/am.c:2423
 msgid "how to handle empty patches"
 msgstr "如何处理空补丁"
 
-#: builtin/am.c:2423
+#: builtin/am.c:2426
 msgid "(internal use for git-rebase)"
 msgstr "(内部使用,用于 git-rebase)"
 
-#: builtin/am.c:2441
+#: builtin/am.c:2444
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
@@ -10864,16 +11110,16 @@ msgstr ""
 "参数 -b/--binary 已经很长时间不做任何实质操作了,并且将被移除。\n"
 "请不要再使用它了。"
 
-#: builtin/am.c:2448
+#: builtin/am.c:2451
 msgid "failed to read the index"
 msgstr "无法读取索引"
 
-#: builtin/am.c:2463
+#: builtin/am.c:2466
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr "之前的变基目录 %s 仍然存在,但却提供了 mbox。"
 
-#: builtin/am.c:2487
+#: builtin/am.c:2490
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -10882,11 +11128,11 @@ msgstr ""
 "发现了错误的 %s 目录。\n"
 "使用 \"git am --abort\" 删除它。"
 
-#: builtin/am.c:2493
+#: builtin/am.c:2496
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "解决操作未进行,我们不会继续。"
 
-#: builtin/am.c:2503
+#: builtin/am.c:2506
 msgid "interactive mode requires patches on the command line"
 msgstr "交互式模式需要命令行上提供补丁"
 
@@ -10923,14 +11169,6 @@ msgstr "git archive:应有一个 flush 包"
 msgid "git bisect--helper --bisect-reset [<commit>]"
 msgstr "git bisect--helper --bisect-reset [<提交>]"
 
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
-msgstr ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
-
 #: builtin/bisect--helper.c:26
 msgid ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
@@ -10940,10 +11178,6 @@ msgstr ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<术语> --term-{old,good}"
 "=<术语>] [--no-checkout] [--first-parent] [<坏> [<好>...]] [--] [<路径>...]"
 
-#: builtin/bisect--helper.c:28
-msgid "git bisect--helper --bisect-next"
-msgstr "git bisect--helper --bisect-next"
-
 #: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr "git bisect--helper --bisect-state (bad|new) [<版本>]"
@@ -10960,10 +11194,6 @@ msgstr "git bisect--helper --bisect-replay <文件>"
 msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
 msgstr "git bisect--helper --bisect-skip [(<版本>|<范围>)...]"
 
-#: builtin/bisect--helper.c:33
-msgid "git bisect--helper --bisect-visualize"
-msgstr "git bisect--helper --bisect-visualize"
-
 #: builtin/bisect--helper.c:34
 msgid "git bisect--helper --bisect-run <cmd>..."
 msgstr "git bisect--helper --bisect-run <命令>..."
@@ -11181,111 +11411,121 @@ msgstr "'%s'?? 您在说什么?"
 msgid "cannot read file '%s' for replaying"
 msgstr "不能读取文件 '%s' 来重放"
 
-#: builtin/bisect--helper.c:1107 builtin/bisect--helper.c:1274
+#: builtin/bisect--helper.c:1120 builtin/bisect--helper.c:1152
+#, c-format
+msgid "running %s\n"
+msgstr "正在执行 %s\n"
+
+#: builtin/bisect--helper.c:1145 builtin/bisect--helper.c:1335
 msgid "bisect run failed: no command provided."
 msgstr "二分查找运行失败:没有提供命令。"
 
-#: builtin/bisect--helper.c:1116
+#: builtin/bisect--helper.c:1166
 #, c-format
-msgid "running %s\n"
-msgstr "正在执行 %s\n"
+msgid "unable to verify '%s' on good revision"
+msgstr "无法在好版本中验证 '%s'"
+
+#: builtin/bisect--helper.c:1172
+#, c-format
+msgid "bogus exit code %d for good revision"
+msgstr "好版本返回错误的退出码 %d"
 
-#: builtin/bisect--helper.c:1120
+#: builtin/bisect--helper.c:1180
 #, c-format
 msgid "bisect run failed: exit code %d from '%s' is < 0 or >= 128"
 msgstr "二分查找运行失败:命令 '%2$s' 的退出码 %1$d < 0 或 >= 128"
 
-#: builtin/bisect--helper.c:1136
+#: builtin/bisect--helper.c:1195
 #, c-format
 msgid "cannot open file '%s' for writing"
 msgstr "无法打开文件 '%s' 进行写入"
 
-#: builtin/bisect--helper.c:1152
+#: builtin/bisect--helper.c:1213
 msgid "bisect run cannot continue any more"
 msgstr "二分查找不能继续运行"
 
-#: builtin/bisect--helper.c:1154
+#: builtin/bisect--helper.c:1215
 #, c-format
 msgid "bisect run success"
 msgstr "二分查找运行成功"
 
-#: builtin/bisect--helper.c:1157
+#: builtin/bisect--helper.c:1218
 #, c-format
 msgid "bisect found first bad commit"
 msgstr "二分查找找到了第一个坏的提交"
 
-#: builtin/bisect--helper.c:1160
+#: builtin/bisect--helper.c:1221
 #, c-format
 msgid ""
 "bisect run failed: 'git bisect--helper --bisect-state %s' exited with error "
 "code %d"
 msgstr "二分查找运行失败:'git bisect--helper --bisect-state %s' 退出码为 %d"
 
-#: builtin/bisect--helper.c:1192
+#: builtin/bisect--helper.c:1253
 msgid "reset the bisection state"
 msgstr "清除二分查找状态"
 
-#: builtin/bisect--helper.c:1194
+#: builtin/bisect--helper.c:1255
 msgid "check whether bad or good terms exist"
 msgstr "检查坏的或好的术语是否存在"
 
-#: builtin/bisect--helper.c:1196
+#: builtin/bisect--helper.c:1257
 msgid "print out the bisect terms"
 msgstr "打印二分查找术语"
 
-#: builtin/bisect--helper.c:1198
+#: builtin/bisect--helper.c:1259
 msgid "start the bisect session"
 msgstr "启动二分查找过程"
 
-#: builtin/bisect--helper.c:1200
+#: builtin/bisect--helper.c:1261
 msgid "find the next bisection commit"
 msgstr "查询下一个二分查找提交"
 
-#: builtin/bisect--helper.c:1202
+#: builtin/bisect--helper.c:1263
 msgid "mark the state of ref (or refs)"
 msgstr "标记引用的状态"
 
-#: builtin/bisect--helper.c:1204
+#: builtin/bisect--helper.c:1265
 msgid "list the bisection steps so far"
 msgstr "列出到目前为止的二分查找步骤"
 
-#: builtin/bisect--helper.c:1206
+#: builtin/bisect--helper.c:1267
 msgid "replay the bisection process from the given file"
 msgstr "从给定文件重放二分查找进程"
 
-#: builtin/bisect--helper.c:1208
+#: builtin/bisect--helper.c:1269
 msgid "skip some commits for checkout"
 msgstr "跳过要检出的一些提交"
 
-#: builtin/bisect--helper.c:1210
+#: builtin/bisect--helper.c:1271
 msgid "visualize the bisection"
 msgstr "可视化二分查找过程"
 
-#: builtin/bisect--helper.c:1212
-msgid "use <cmd>... to automatically bisect."
-msgstr "使用 <命令>... 来自动二分查找"
+#: builtin/bisect--helper.c:1273
+msgid "use <cmd>... to automatically bisect"
+msgstr "使用 <命令>... 来自动二分查找"
 
-#: builtin/bisect--helper.c:1214
+#: builtin/bisect--helper.c:1275
 msgid "no log for BISECT_WRITE"
 msgstr "BISECT_WRITE 无日志"
 
-#: builtin/bisect--helper.c:1229
+#: builtin/bisect--helper.c:1290
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr "--bisect-reset 无需参数或者需要一个提交"
 
-#: builtin/bisect--helper.c:1234
+#: builtin/bisect--helper.c:1295
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms 需要 0 或 1 个参数"
 
-#: builtin/bisect--helper.c:1243
+#: builtin/bisect--helper.c:1304
 msgid "--bisect-next requires 0 arguments"
 msgstr "--bisect-next 需要 0 个参数"
 
-#: builtin/bisect--helper.c:1254
+#: builtin/bisect--helper.c:1315
 msgid "--bisect-log requires 0 arguments"
 msgstr "--bisect-log 需要 0 个参数"
 
-#: builtin/bisect--helper.c:1259
+#: builtin/bisect--helper.c:1320
 msgid "no logfile given"
 msgstr "未提供日志文件"
 
@@ -11306,142 +11546,133 @@ msgstr "期望一个颜色:%s"
 msgid "must end with a color"
 msgstr "必须以一个颜色结尾"
 
-#: builtin/blame.c:724
-#, c-format
-msgid "invalid color '%s' in color.blame.repeatedLines"
-msgstr "设置 color.blame.repeatedLines 中的无效颜色 '%s'"
-
-#: builtin/blame.c:742
-msgid "invalid value for blame.coloring"
-msgstr "设置 blame.coloring 中的无效取值"
-
-#: builtin/blame.c:841
+#: builtin/blame.c:842
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "不能找到要忽略的版本 %s"
 
-#: builtin/blame.c:863
+#: builtin/blame.c:864
 msgid "show blame entries as we find them, incrementally"
 msgstr "增量式地显示发现的 blame 条目"
 
-#: builtin/blame.c:864
+#: builtin/blame.c:865
 msgid "do not show object names of boundary commits (Default: off)"
 msgstr "不显示边界提交的对象名(默认:关闭)"
 
-#: builtin/blame.c:865
+#: builtin/blame.c:866
 msgid "do not treat root commits as boundaries (Default: off)"
 msgstr "不把根提交作为边界(默认:关闭)"
 
-#: builtin/blame.c:866
+#: builtin/blame.c:867
 msgid "show work cost statistics"
 msgstr "显示工作消耗统计"
 
-#: builtin/blame.c:867 builtin/checkout.c:1536 builtin/clone.c:94
-#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:180
+#: builtin/blame.c:868 builtin/checkout.c:1554 builtin/clone.c:98
+#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:181
 #: builtin/merge.c:301 builtin/multi-pack-index.c:103
 #: builtin/multi-pack-index.c:154 builtin/multi-pack-index.c:180
 #: builtin/multi-pack-index.c:208 builtin/pull.c:120 builtin/push.c:566
-#: builtin/send-pack.c:202
+#: builtin/remote.c:683 builtin/send-pack.c:202
 msgid "force progress reporting"
 msgstr "强制显示进度报告"
 
-#: builtin/blame.c:868
+#: builtin/blame.c:869
 msgid "show output score for blame entries"
 msgstr "显示 blame 条目的输出得分"
 
-#: builtin/blame.c:869
+#: builtin/blame.c:870
 msgid "show original filename (Default: auto)"
 msgstr "显示原始文件名(默认:自动)"
 
-#: builtin/blame.c:870
+#: builtin/blame.c:871
 msgid "show original linenumber (Default: off)"
 msgstr "显示原始的行号(默认:关闭)"
 
-#: builtin/blame.c:871
+#: builtin/blame.c:872
 msgid "show in a format designed for machine consumption"
 msgstr "显示为一个适合机器读取的格式"
 
-#: builtin/blame.c:872
+#: builtin/blame.c:873
 msgid "show porcelain format with per-line commit information"
 msgstr "为每一行显示机器适用的提交信息"
 
-#: builtin/blame.c:873
+#: builtin/blame.c:874
 msgid "use the same output mode as git-annotate (Default: off)"
 msgstr "使用和 git-annotate 相同的输出模式(默认:关闭)"
 
-#: builtin/blame.c:874
+#: builtin/blame.c:875
 msgid "show raw timestamp (Default: off)"
 msgstr "显示原始时间戳(默认:关闭)"
 
-#: builtin/blame.c:875
+#: builtin/blame.c:876
 msgid "show long commit SHA1 (Default: off)"
 msgstr "显示长的 SHA1 提交号(默认:关闭)"
 
-#: builtin/blame.c:876
+#: builtin/blame.c:877
 msgid "suppress author name and timestamp (Default: off)"
 msgstr "隐藏作者名字和时间戳(默认:关闭)"
 
-#: builtin/blame.c:877
+#: builtin/blame.c:878
 msgid "show author email instead of name (Default: off)"
 msgstr "显示作者的邮箱而不是名字(默认:关闭)"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:879
 msgid "ignore whitespace differences"
 msgstr "忽略空白差异"
 
-#: builtin/blame.c:879 builtin/log.c:1838
+#: builtin/blame.c:880 builtin/log.c:1857
 msgid "rev"
 msgstr "版本"
 
-#: builtin/blame.c:879
+#: builtin/blame.c:880
 msgid "ignore <rev> when blaming"
 msgstr "在执行 blame 操作时忽略 <版本>"
 
-#: builtin/blame.c:880
+#: builtin/blame.c:881
 msgid "ignore revisions from <file>"
 msgstr "忽略来自 <文件> 中的版本"
 
-#: builtin/blame.c:881
+#: builtin/blame.c:882
 msgid "color redundant metadata from previous line differently"
 msgstr "使用颜色间隔输出与前一行不同的重复元信息"
 
-#: builtin/blame.c:882
+#: builtin/blame.c:883
 msgid "color lines by age"
 msgstr "依据时间着色"
 
-#: builtin/blame.c:883
+#: builtin/blame.c:884
 msgid "spend extra cycles to find better match"
 msgstr "花费额外的循环来找到更好的匹配"
 
-#: builtin/blame.c:884
+#: builtin/blame.c:885
 msgid "use revisions from <file> instead of calling git-rev-list"
 msgstr "使用来自 <文件> 的修订集而不是调用 git-rev-list"
 
-#: builtin/blame.c:885
+#: builtin/blame.c:886
 msgid "use <file>'s contents as the final image"
 msgstr "使用 <文件> 的内容作为最终的镜像"
 
-#: builtin/blame.c:886 builtin/blame.c:887
+#: builtin/blame.c:887 builtin/blame.c:888
 msgid "score"
 msgstr "得分"
 
-#: builtin/blame.c:886
+#: builtin/blame.c:887
 msgid "find line copies within and across files"
 msgstr "找到文件内及跨文件的行拷贝"
 
-#: builtin/blame.c:887
+#: builtin/blame.c:888
 msgid "find line movements within and across files"
 msgstr "找到文件内及跨文件的行移动"
 
-#: builtin/blame.c:888
+#: builtin/blame.c:889
 msgid "range"
 msgstr "范围"
 
-#: builtin/blame.c:889
+#: builtin/blame.c:890
 msgid "process only line range <start>,<end> or function :<funcname>"
 msgstr "只处理在 <开始>,<结束> 范围内的行,或者函数:<函数名>"
 
-#: builtin/blame.c:947
+#: builtin/blame.c:949
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr "--progress 不能和 --incremental 或机器内部格式一起使用"
 
@@ -11453,18 +11684,18 @@ msgstr "--progress 不能和 --incremental 或机器内部格式一起使用"
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:998
+#: builtin/blame.c:1000
 msgid "4 years, 11 months ago"
 msgstr "4 年 11 个月前"
 
-#: builtin/blame.c:1114
+#: builtin/blame.c:1116
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] "文件 %s 只有 %lu 行"
 msgstr[1] "文件 %s 只有 %lu 行"
 
-#: builtin/blame.c:1159
+#: builtin/blame.c:1161
 msgid "Blaming lines"
 msgstr "追踪代码行"
 
@@ -11473,31 +11704,37 @@ msgid "git branch [<options>] [-r | -a] [--merged] [--no-merged]"
 msgstr "git branch [<选项>] [-r | -a] [--merged] [--no-merged]"
 
 #: builtin/branch.c:30
-msgid "git branch [<options>] [-l] [-f] <branch-name> [<start-point>]"
-msgstr "git branch [<选项>] [-l] [-f] <分支名> [<起始点>]"
+msgid ""
+"git branch [<options>] [-f] [--recurse-submodules] <branch-name> [<start-"
+"point>]"
+msgstr "git branch [<选项>] [-f] [--recurse-submodules] <分支名> [<起始点>]"
 
 #: builtin/branch.c:31
+msgid "git branch [<options>] [-l] [<pattern>...]"
+msgstr "git branch [<选项>] [-l] [<模式>...]"
+
+#: builtin/branch.c:32
 msgid "git branch [<options>] [-r] (-d | -D) <branch-name>..."
 msgstr "git branch [<选项>] [-r] (-d | -D) <分支名>..."
 
-#: builtin/branch.c:32
+#: builtin/branch.c:33
 msgid "git branch [<options>] (-m | -M) [<old-branch>] <new-branch>"
 msgstr "git branch [<选项>] (-m | -M) [<旧分支>] <新分支>"
 
-#: builtin/branch.c:33
+#: builtin/branch.c:34
 msgid "git branch [<options>] (-c | -C) [<old-branch>] <new-branch>"
 msgstr "git branch [<选项>] (-c | -C) [<老分支>] <新分支>"
 
-#: builtin/branch.c:34
+#: builtin/branch.c:35
 msgid "git branch [<options>] [-r | -a] [--points-at]"
 msgstr "git branch [<选项>] [-r | -a] [--points-at]"
 
-#: builtin/branch.c:35
+#: builtin/branch.c:36
 msgid "git branch [<options>] [-r | -a] [--format]"
 msgstr "git branch [<选项>] [-r | -a] [--format]"
 
 #  译者:保持原换行格式,在输出时 %s 的替代内容会让字符串变长
-#: builtin/branch.c:153
+#: builtin/branch.c:165
 #, c-format
 msgid ""
 "deleting branch '%s' that has been merged to\n"
@@ -11507,7 +11744,7 @@ msgstr ""
 "         '%s',但未合并到 HEAD。"
 
 #  译者:保持原换行格式,在输出时 %s 的替代内容会让字符串变长
-#: builtin/branch.c:157
+#: builtin/branch.c:169
 #, c-format
 msgid ""
 "not deleting branch '%s' that is not yet merged to\n"
@@ -11516,12 +11753,12 @@ msgstr ""
 "并未删除分支 '%s', 虽然它已经合并到 HEAD,\n"
 "         然而却尚未被合并到分支 '%s' 。"
 
-#: builtin/branch.c:171
+#: builtin/branch.c:183
 #, c-format
 msgid "Couldn't look up commit object for '%s'"
 msgstr "无法查询 '%s' 指向的提交对象"
 
-#: builtin/branch.c:175
+#: builtin/branch.c:187
 #, c-format
 msgid ""
 "The branch '%s' is not fully merged.\n"
@@ -11530,111 +11767,111 @@ msgstr ""
 "分支 '%s' 没有完全合并。\n"
 "如果您确认要删除它,执行 'git branch -D %s'。"
 
-#: builtin/branch.c:188
+#: builtin/branch.c:200
 msgid "Update of config-file failed"
 msgstr "更新配置文件失败"
 
-#: builtin/branch.c:223
+#: builtin/branch.c:235
 msgid "cannot use -a with -d"
 msgstr "不能将 -a 和 -d 同时使用"
 
-#: builtin/branch.c:230
+#: builtin/branch.c:242
 msgid "Couldn't look up commit object for HEAD"
 msgstr "无法查询 HEAD 指向的提交对象"
 
-#: builtin/branch.c:247
+#: builtin/branch.c:259
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr "无法删除检出于 '%2$s' 的分支 '%1$s'。"
 
-#: builtin/branch.c:262
+#: builtin/branch.c:274
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "未能找到远程跟踪分支 '%s'。"
 
-#: builtin/branch.c:263
+#: builtin/branch.c:275
 #, c-format
 msgid "branch '%s' not found."
 msgstr "分支 '%s' 未发现。"
 
-#: builtin/branch.c:294
+#: builtin/branch.c:306
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "已删除远程跟踪分支 %s(曾为 %s)。\n"
 
-#: builtin/branch.c:295
+#: builtin/branch.c:307
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "已删除分支 %s(曾为 %s)。\n"
 
-#: builtin/branch.c:445 builtin/tag.c:63
+#: builtin/branch.c:457 builtin/tag.c:64
 msgid "unable to parse format string"
 msgstr "不能解析格式化字符串"
 
-#: builtin/branch.c:476
+#: builtin/branch.c:488
 msgid "could not resolve HEAD"
 msgstr "不能解析 HEAD 提交"
 
-#: builtin/branch.c:482
+#: builtin/branch.c:494
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "HEAD (%s) 指向 refs/heads/ 之外"
 
-#: builtin/branch.c:497
+#: builtin/branch.c:509
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "分支 %s 正被变基到 %s"
 
-#: builtin/branch.c:501
+#: builtin/branch.c:513
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "分支 %s 正被二分查找于 %s"
 
-#: builtin/branch.c:518
+#: builtin/branch.c:530
 msgid "cannot copy the current branch while not on any."
 msgstr "无法拷贝当前分支因为不处于任何分支上。"
 
-#: builtin/branch.c:520
+#: builtin/branch.c:532
 msgid "cannot rename the current branch while not on any."
 msgstr "无法重命名当前分支因为不处于任何分支上。"
 
-#: builtin/branch.c:531
+#: builtin/branch.c:543
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "无效的分支名:'%s'"
 
-#: builtin/branch.c:560
+#: builtin/branch.c:572
 msgid "Branch rename failed"
 msgstr "分支重命名失败"
 
-#: builtin/branch.c:562
+#: builtin/branch.c:574
 msgid "Branch copy failed"
 msgstr "分支拷贝失败"
 
-#: builtin/branch.c:566
+#: builtin/branch.c:578
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "已为错误命名的分支 '%s' 创建了一个副本"
 
-#: builtin/branch.c:569
+#: builtin/branch.c:581
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "已将错误命名的分支 '%s' 重命名"
 
-#: builtin/branch.c:575
+#: builtin/branch.c:587
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "分支重命名为 %s,但 HEAD 没有更新!"
 
-#: builtin/branch.c:584
+#: builtin/branch.c:596
 msgid "Branch is renamed, but update of config-file failed"
 msgstr "分支被重命名,但更新配置文件失败"
 
-#: builtin/branch.c:586
+#: builtin/branch.c:598
 msgid "Branch is copied, but update of config-file failed"
 msgstr "分支已拷贝,但更新配置文件失败"
 
-#: builtin/branch.c:602
+#: builtin/branch.c:614
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -11645,205 +11882,221 @@ msgstr ""
 "  %s\n"
 "以 '%c' 开头的行将被过滤。\n"
 
-#: builtin/branch.c:637
+#: builtin/branch.c:651
 msgid "Generic options"
 msgstr "通用选项"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:653
 msgid "show hash and subject, give twice for upstream branch"
 msgstr "显示哈希值和主题,若参数出现两次则显示上游分支"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:654
 msgid "suppress informational messages"
 msgstr "不显示信息"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:656 builtin/checkout.c:1571
+#: builtin/submodule--helper.c:3077
 msgid "set branch tracking configuration"
 msgstr "设置分支跟踪配置"
 
-#: builtin/branch.c:645
+#: builtin/branch.c:659
 msgid "do not use"
 msgstr "不要使用"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:661
 msgid "upstream"
 msgstr "上游"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:661
 msgid "change the upstream info"
 msgstr "改变上游信息"
 
-#: builtin/branch.c:648
+#: builtin/branch.c:662
 msgid "unset the upstream info"
 msgstr "取消上游信息的设置"
 
-#: builtin/branch.c:649
+#: builtin/branch.c:663
 msgid "use colored output"
 msgstr "使用彩色输出"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:664
 msgid "act on remote-tracking branches"
 msgstr "作用于远程跟踪分支"
 
-#: builtin/branch.c:652 builtin/branch.c:654
+#: builtin/branch.c:666 builtin/branch.c:668
 msgid "print only branches that contain the commit"
 msgstr "只打印包含该提交的分支"
 
-#: builtin/branch.c:653 builtin/branch.c:655
+#: builtin/branch.c:667 builtin/branch.c:669
 msgid "print only branches that don't contain the commit"
 msgstr "只打印不包含该提交的分支"
 
-#: builtin/branch.c:658
+#: builtin/branch.c:672
 msgid "Specific git-branch actions:"
 msgstr "具体的 git-branch 动作:"
 
-#: builtin/branch.c:659
+#: builtin/branch.c:673
 msgid "list both remote-tracking and local branches"
 msgstr "列出远程跟踪及本地分支"
 
-#: builtin/branch.c:661
+#: builtin/branch.c:675
 msgid "delete fully merged branch"
 msgstr "删除完全合并的分支"
 
-#: builtin/branch.c:662
+#: builtin/branch.c:676
 msgid "delete branch (even if not merged)"
 msgstr "删除分支(即使没有合并)"
 
-#: builtin/branch.c:663
+#: builtin/branch.c:677
 msgid "move/rename a branch and its reflog"
 msgstr "移动/重命名一个分支,以及它的引用日志"
 
-#: builtin/branch.c:664
+#: builtin/branch.c:678
 msgid "move/rename a branch, even if target exists"
 msgstr "移动/重命名一个分支,即使目标已存在"
 
-#: builtin/branch.c:665
+#: builtin/branch.c:679
 msgid "copy a branch and its reflog"
 msgstr "拷贝一个分支和它的引用日志"
 
-#: builtin/branch.c:666
+#: builtin/branch.c:680
 msgid "copy a branch, even if target exists"
 msgstr "拷贝一个分支,即使目标已存在"
 
-#: builtin/branch.c:667
+#: builtin/branch.c:681
 msgid "list branch names"
 msgstr "列出分支名"
 
-#: builtin/branch.c:668
+#: builtin/branch.c:682
 msgid "show current branch name"
 msgstr "显示当前分支名"
 
-#: builtin/branch.c:669
+#: builtin/branch.c:683 builtin/submodule--helper.c:3075
 msgid "create the branch's reflog"
 msgstr "创建分支的引用日志"
 
-#: builtin/branch.c:671
+#: builtin/branch.c:685
 msgid "edit the description for the branch"
 msgstr "标记分支的描述"
 
-#: builtin/branch.c:672
+#: builtin/branch.c:686
 msgid "force creation, move/rename, deletion"
 msgstr "强制创建、移动/重命名、删除"
 
-#: builtin/branch.c:673
+#: builtin/branch.c:687
 msgid "print only branches that are merged"
 msgstr "只打印已经合并的分支"
 
-#: builtin/branch.c:674
+#: builtin/branch.c:688
 msgid "print only branches that are not merged"
 msgstr "只打印尚未合并的分支"
 
-#: builtin/branch.c:675
+#: builtin/branch.c:689
 msgid "list branches in columns"
 msgstr "以列的方式显示分支"
 
-#: builtin/branch.c:677 builtin/for-each-ref.c:45 builtin/notes.c:413
+#: builtin/branch.c:691 builtin/for-each-ref.c:45 builtin/notes.c:413
 #: builtin/notes.c:416 builtin/notes.c:579 builtin/notes.c:582
-#: builtin/tag.c:475
+#: builtin/tag.c:476
 msgid "object"
 msgstr "对象"
 
-#: builtin/branch.c:678
+#: builtin/branch.c:692
 msgid "print only branches of the object"
 msgstr "只打印指向该对象的分支"
 
-#: builtin/branch.c:679 builtin/for-each-ref.c:51 builtin/tag.c:482
+#: builtin/branch.c:693 builtin/for-each-ref.c:51 builtin/tag.c:483
 msgid "sorting and filtering are case insensitive"
 msgstr "排序和过滤属于大小写不敏感"
 
-#: builtin/branch.c:680 builtin/for-each-ref.c:41 builtin/tag.c:480
-#: builtin/verify-tag.c:38
+#: builtin/branch.c:694 builtin/ls-files.c:667
+msgid "recurse through submodules"
+msgstr "在子模组中递归"
+
+#: builtin/branch.c:695 builtin/for-each-ref.c:41 builtin/ls-tree.c:358
+#: builtin/tag.c:481 builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "输出格式"
 
-#: builtin/branch.c:703 builtin/clone.c:678
+#: builtin/branch.c:718 builtin/clone.c:684
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD 没有位于 /refs/heads 之下!"
 
-#: builtin/branch.c:742 builtin/branch.c:798 builtin/branch.c:807
+#: builtin/branch.c:739
+msgid ""
+"branch with --recurse-submodules can only be used if submodule."
+"propagateBranches is enabled"
+msgstr ""
+"带有 --recurse-submodules 的分支只能在 submodule.propagateBranches 启用时使用"
+
+#: builtin/branch.c:741
+msgid "--recurse-submodules can only be used to create branches"
+msgstr "--recurse-submodules 只能用于创建分支"
+
+#: builtin/branch.c:770 builtin/branch.c:826 builtin/branch.c:835
 msgid "branch name required"
 msgstr "必须提供分支名"
 
-#: builtin/branch.c:774
+#: builtin/branch.c:802
 msgid "Cannot give description to detached HEAD"
 msgstr "不能向分离头指针提供描述"
 
-#: builtin/branch.c:779
+#: builtin/branch.c:807
 msgid "cannot edit description of more than one branch"
 msgstr "不能为一个以上的分支编辑描述"
 
-#: builtin/branch.c:786
+#: builtin/branch.c:814
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "分支 '%s' 尚无提交。"
 
-#: builtin/branch.c:789
+#: builtin/branch.c:817
 #, c-format
 msgid "No branch named '%s'."
 msgstr "没有分支 '%s'。"
 
-#: builtin/branch.c:804
+#: builtin/branch.c:832
 msgid "too many branches for a copy operation"
 msgstr "为拷贝操作提供了太多的分支名"
 
-#: builtin/branch.c:813
+#: builtin/branch.c:841
 msgid "too many arguments for a rename operation"
 msgstr "为重命名操作提供了太多的参数"
 
-#: builtin/branch.c:818
+#: builtin/branch.c:846
 msgid "too many arguments to set new upstream"
 msgstr "为设置新上游提供了太多的参数"
 
-#: builtin/branch.c:822
+#: builtin/branch.c:850
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
 msgstr "无法设置 HEAD 的上游为 %s,因为 HEAD 没有指向任何分支。"
 
-#: builtin/branch.c:825 builtin/branch.c:848
+#: builtin/branch.c:853 builtin/branch.c:873
 #, c-format
 msgid "no such branch '%s'"
 msgstr "没有此分支 '%s'"
 
-#: builtin/branch.c:829
+#: builtin/branch.c:857
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "分支 '%s' 不存在"
 
-#: builtin/branch.c:842
+#: builtin/branch.c:867
 msgid "too many arguments to unset upstream"
 msgstr "为取消上游设置操作提供了太多的参数"
 
-#: builtin/branch.c:846
+#: builtin/branch.c:871
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr "无法取消 HEAD 的上游设置因为它没有指向一个分支"
 
-#: builtin/branch.c:852
+#: builtin/branch.c:877
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "分支 '%s' 没有上游信息"
 
-#: builtin/branch.c:862
+#: builtin/branch.c:890
 msgid ""
 "The -a, and -r, options to 'git branch' do not take a branch name.\n"
 "Did you mean to use: -a|-r --list <pattern>?"
@@ -11851,7 +12104,7 @@ msgstr ""
 "'git branch' 的 -a 和 -r 选项不带一个分支名。\n"
 "您是否想要使用:-a|-r --list <模式>?"
 
-#: builtin/branch.c:866
+#: builtin/branch.c:894
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -11964,19 +12217,19 @@ msgstr "git bundle list-heads <文件> [<引用名>...]"
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr "git bundle unbundle <文件> [<引用名>...]"
 
-#: builtin/bundle.c:65 builtin/pack-objects.c:3876
+#: builtin/bundle.c:65 builtin/pack-objects.c:3899
 msgid "do not show progress meter"
 msgstr "不显示进度表"
 
-#: builtin/bundle.c:67 builtin/bundle.c:167 builtin/pack-objects.c:3878
+#: builtin/bundle.c:67 builtin/bundle.c:168 builtin/pack-objects.c:3901
 msgid "show progress meter"
 msgstr "显示进度表"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3880
+#: builtin/bundle.c:69 builtin/pack-objects.c:3903
 msgid "show progress meter during object writing phase"
 msgstr "在对象写入阶段显示进度表"
 
-#: builtin/bundle.c:72 builtin/pack-objects.c:3883
+#: builtin/bundle.c:72 builtin/pack-objects.c:3906
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "当进度表显示时类似于 --all-progress"
 
@@ -11988,129 +12241,241 @@ msgstr "指定归档包的格式版本"
 msgid "Need a repository to create a bundle."
 msgstr "需要一个仓库来创建归档包。"
 
-#: builtin/bundle.c:107
+#: builtin/bundle.c:108
 msgid "do not show bundle details"
 msgstr "不显示归档包的细节"
 
-#: builtin/bundle.c:126
+#: builtin/bundle.c:127
 #, c-format
 msgid "%s is okay\n"
 msgstr "%s 可以\n"
 
-#: builtin/bundle.c:182
+#: builtin/bundle.c:183
 msgid "Need a repository to unbundle."
 msgstr "需要一个仓库来解开归档包。"
 
-#: builtin/bundle.c:185
+#: builtin/bundle.c:186
 msgid "Unbundling objects"
 msgstr "解包对象中"
 
-#: builtin/bundle.c:219 builtin/remote.c:1733
+#: builtin/bundle.c:220 builtin/remote.c:1758
 #, c-format
 msgid "Unknown subcommand: %s"
 msgstr "未知子命令:%s"
 
-#: builtin/cat-file.c:622
+#: builtin/cat-file.c:568
+msgid "flush is only for --buffer mode"
+msgstr "flush 只在 --buffer 模式中使用"
+
+#: builtin/cat-file.c:612
+msgid "empty command in input"
+msgstr "输入为空的命令"
+
+#: builtin/cat-file.c:614
+#, c-format
+msgid "whitespace before command: '%s'"
+msgstr "命令前存在空白:'%s'"
+
+#: builtin/cat-file.c:623
+#, c-format
+msgid "%s requires arguments"
+msgstr "%s 需要参数"
+
+#: builtin/cat-file.c:628
+#, c-format
+msgid "%s takes no arguments"
+msgstr "%s 不需要参数"
+
+#: builtin/cat-file.c:636
+#, c-format
+msgid "unknown command: '%s'"
+msgstr "未知命令:'%s'"
+
+#: builtin/cat-file.c:795
+msgid "only one batch option may be specified"
+msgstr "只能指定一个批处理选项"
+
+#: builtin/cat-file.c:824
+msgid "git cat-file <type> <object>"
+msgstr "git cat-file <类型> <对象>"
+
+#: builtin/cat-file.c:825
+msgid "git cat-file (-e | -p) <object>"
+msgstr "git cat-file (-e | -p) <对象>"
+
+#: builtin/cat-file.c:826
+msgid "git cat-file (-t | -s) [--allow-unknown-type] <object>"
+msgstr "git cat-file (-t | -s) [--allow-unknown-type] <对象>"
+
+#: builtin/cat-file.c:827
 msgid ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <type> | --textconv | --filters) [--path=<path>] <object>"
+"git cat-file (--batch | --batch-check | --batch-command) [--batch-all-"
+"objects]\n"
+"             [--buffer] [--follow-symlinks] [--unordered]\n"
+"             [--textconv | --filters]"
 msgstr ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <类型> | --textconv | --filters) [--path=<路径>] <对象>"
+"git cat-file (--batch | --batch-check | --batch-command) [--batch-all-"
+"objects]\n"
+"             [--buffer] [--follow-symlinks] [--unordered]\n"
+"             [--textconv | --filters]"
 
-#: builtin/cat-file.c:623
+#: builtin/cat-file.c:830
 msgid ""
-"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
-"symlinks] [--textconv | --filters]"
+"git cat-file (--textconv | --filters)\n"
+"             [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]"
 msgstr ""
-"git cat-file (--batch[=<格式>] | --batch-check[=<格式>]) [--follow-symlinks] "
-"[--textconv | --filters]"
+"git cat-file (--textconv | --filters)\n"
+"             [<版本>:<路径|树对象> | --path=<路径|树对象> <版本>]"
 
-#: builtin/cat-file.c:644
-msgid "only one batch option may be specified"
-msgstr "只能指定一个批处理选项"
+#: builtin/cat-file.c:836
+msgid "Check object existence or emit object contents"
+msgstr "检查对象存在或输出对象内容"
+
+#: builtin/cat-file.c:838
+msgid "check if <object> exists"
+msgstr "检查 <对象> 是否存在"
 
-#: builtin/cat-file.c:662
-msgid "<type> can be one of: blob, tree, commit, tag"
-msgstr "<类型> 可以是其中之一:blob、tree、commit、tag"
+#: builtin/cat-file.c:839
+msgid "pretty-print <object> content"
+msgstr "美观地打印 <对象> 的内容"
 
-#: builtin/cat-file.c:663
-msgid "show object type"
-msgstr "显示对象类型"
+#: builtin/cat-file.c:841
+msgid "Emit [broken] object attributes"
+msgstr "输出 [坏的] 对象属性"
 
-#: builtin/cat-file.c:664
+#: builtin/cat-file.c:842
+msgid "show object type (one of 'blob', 'tree', 'commit', 'tag', ...)"
+msgstr "显示对象的类型('blob'、'tree'、'commit'、'tag'……其中之一)"
+
+#: builtin/cat-file.c:843
 msgid "show object size"
 msgstr "显示对象大小"
 
-#: builtin/cat-file.c:666
-msgid "exit with zero when there's no error"
-msgstr "å½\93没æ\9c\89é\94\99误æ\97¶é\80\80å\87ºå¹¶è¿\94å\9b\9eé\9b"
+#: builtin/cat-file.c:845
+msgid "allow -s and -t to work with broken/corrupt objects"
+msgstr "å\85\81许 -s å\92\8c -t å¯¹æ\8d\9få\9d\8fç\9a\84对象ç\94\9fæ\95\88"
 
-#: builtin/cat-file.c:667
-msgid "pretty-print object's content"
-msgstr "美观地打印对象的内容"
+#: builtin/cat-file.c:847
+msgid "Batch objects requested on stdin (or --batch-all-objects)"
+msgstr "批量处理标准输入中请求的对象(或者 --batch-all-objects)"
 
-#: builtin/cat-file.c:669
-msgid "for blob objects, run textconv on object's content"
-msgstr "对于数据对象,对其内容做文本转换"
+#: builtin/cat-file.c:849
+msgid "show full <object> or <rev> contents"
+msgstr "显示完整的 <对象> 或 <版本> 内容"
 
-#: builtin/cat-file.c:671
-msgid "for blob objects, run filters on object's content"
-msgstr "对于数据对象,对其内容做过滤"
+#: builtin/cat-file.c:853
+msgid "like --batch, but don't emit <contents>"
+msgstr "类似于 --batch,但不输出 <内容>"
 
-#: builtin/cat-file.c:672
-msgid "blob"
-msgstr "数据对象"
+#: builtin/cat-file.c:857
+msgid "read commands from stdin"
+msgstr "从标准输入读取命令"
 
-#: builtin/cat-file.c:673
-msgid "use a specific path for --textconv/--filters"
-msgstr "对äº\8e --textconv/--filters ä½¿ç\94¨ä¸\80个ç\89¹å®\9aç\9a\84è·¯å¾\84"
+#: builtin/cat-file.c:861
+msgid "with --batch[-check]: ignores stdin, batches all known objects"
+msgstr "带æ\9c\89 --batch[-check]ï¼\9a忽ç\95¥æ \87å\87\86è¾\93å\85¥ï¼\8cæ\89¹é\87\8få¤\84ç\90\86æ\89\80æ\9c\89å·²ç\9f¥ç\9a\84对象"
 
-#: builtin/cat-file.c:675
-msgid "allow -s and -t to work with broken/corrupt objects"
-msgstr "允许 -s 和 -t 对损坏的对象生效"
+#: builtin/cat-file.c:863
+msgid "Change or optimize batch output"
+msgstr "更改或优化批处理输出"
 
-#: builtin/cat-file.c:676
+#: builtin/cat-file.c:864
 msgid "buffer --batch output"
 msgstr "缓冲 --batch 的输出"
 
-#: builtin/cat-file.c:678
-msgid "show info and content of objects fed from the standard input"
-msgstr "显示从标准输入提供的对象的信息和内容"
+#: builtin/cat-file.c:866
+msgid "follow in-tree symlinks"
+msgstr "跟随树内符号链接"
 
-#: builtin/cat-file.c:682
-msgid "show info about objects fed from the standard input"
-msgstr "显示从标准输入提供的对象的信息"
+#: builtin/cat-file.c:868
+msgid "do not order objects before emitting them"
+msgstr "在输出对象前不要排序"
 
-#: builtin/cat-file.c:686
-msgid "follow in-tree symlinks (used with --batch or --batch-check)"
-msgstr "跟随树内符号链接(和 --batch 或 --batch-check 共用)"
+#: builtin/cat-file.c:870
+msgid ""
+"Emit object (blob or tree) with conversion or filter (stand-alone, or with "
+"batch)"
+msgstr "转换或过滤后输出对象(数据对象或树)(单独或批处理)"
 
-#: builtin/cat-file.c:688
-msgid "show all objects with --batch or --batch-check"
-msgstr "使用 --batch 或 --batch-check 参数显示所有对象"
+#: builtin/cat-file.c:872
+msgid "run textconv on object's content"
+msgstr "对对象内容做文本转换"
 
-#: builtin/cat-file.c:690
-msgid "do not order --batch-all-objects output"
-msgstr "不要对 --batch-all-objects 的输出排序"
+#: builtin/cat-file.c:874
+msgid "run filters on object's content"
+msgstr "对对象内容做过滤"
 
-#: builtin/check-attr.c:13
-msgid "git check-attr [-a | --all | <attr>...] [--] <pathname>..."
-msgstr "git check-attr [-a | --all | <属性>...] [--] <路径名>..."
+#: builtin/cat-file.c:875
+msgid "blob|tree"
+msgstr "数据对象|树"
 
-#: builtin/check-attr.c:14
-msgid "git check-attr --stdin [-z] [-a | --all | <attr>...]"
-msgstr "git check-attr --stdin [-z] [-a | --all | <属性>...]"
+#: builtin/cat-file.c:876
+msgid "use a <path> for (--textconv | --filters); Not with 'batch'"
+msgstr "(--textconv | --filters) 使用 <路径>;而不是 'batch'"
 
-#: builtin/check-attr.c:21
-msgid "report all attributes set on file"
-msgstr "报告设置在文件上的所有属性"
+#: builtin/cat-file.c:894
+#, c-format
+msgid "'%s=<%s>' needs '%s' or '%s'"
+msgstr "'%s=<%s>' 需要 '%s' 或 '%s'"
 
-#: builtin/check-attr.c:22
-msgid "use .gitattributes only from the index"
+#: builtin/cat-file.c:896
+msgid "path|tree-ish"
+msgstr "路径|树对象"
+
+#: builtin/cat-file.c:903 builtin/cat-file.c:906 builtin/cat-file.c:909
+#, c-format
+msgid "'%s' requires a batch mode"
+msgstr "'%s' 需要批处理模式"
+
+#: builtin/cat-file.c:921
+#, c-format
+msgid "'-%c' is incompatible with batch mode"
+msgstr "'-%c' 与批处理模式不兼容"
+
+#: builtin/cat-file.c:924
+msgid "batch modes take no arguments"
+msgstr "批处理模式不带其他参数"
+
+#: builtin/cat-file.c:932 builtin/cat-file.c:935
+#, c-format
+msgid "<rev> required with '%s'"
+msgstr "'%s' 需要 <版本>"
+
+#: builtin/cat-file.c:938
+#, c-format
+msgid "<object> required with '-%c'"
+msgstr "'-%c' 需要 <对象>"
+
+#: builtin/cat-file.c:943 builtin/notes.c:374 builtin/notes.c:429
+#: builtin/notes.c:507 builtin/notes.c:519 builtin/notes.c:596
+#: builtin/notes.c:663 builtin/notes.c:813 builtin/notes.c:965
+#: builtin/notes.c:987 builtin/prune-packed.c:25 builtin/receive-pack.c:2489
+#: builtin/tag.c:592
+msgid "too many arguments"
+msgstr "太多参数"
+
+#: builtin/cat-file.c:947
+#, c-format
+msgid "only two arguments allowed in <type> <object> mode, not %d"
+msgstr "<类型> <对象> 模式只允许两个参数,而不是 %d 个"
+
+#: builtin/check-attr.c:13
+msgid "git check-attr [-a | --all | <attr>...] [--] <pathname>..."
+msgstr "git check-attr [-a | --all | <属性>...] [--] <路径名>..."
+
+#: builtin/check-attr.c:14
+msgid "git check-attr --stdin [-z] [-a | --all | <attr>...]"
+msgstr "git check-attr --stdin [-z] [-a | --all | <属性>...]"
+
+#: builtin/check-attr.c:21
+msgid "report all attributes set on file"
+msgstr "报告设置在文件上的所有属性"
+
+#: builtin/check-attr.c:22
+msgid "use .gitattributes only from the index"
 msgstr "只使用索引中的 .gitattributes"
 
-#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:100
+#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:101
 msgid "read file names from stdin"
 msgstr "从标准输入读出文件名"
 
@@ -12118,8 +12483,8 @@ msgstr "从标准输入读出文件名"
 msgid "terminate input and output records by a NUL character"
 msgstr "输入和输出的记录使用 NUL 字符终结"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1532 builtin/gc.c:550
-#: builtin/worktree.c:493
+#: builtin/check-ignore.c:21 builtin/checkout.c:1550 builtin/gc.c:550
+#: builtin/worktree.c:565
 msgid "suppress progress reporting"
 msgstr "不显示进度报告"
 
@@ -12176,161 +12541,165 @@ msgstr "未指定联系地址"
 msgid "git checkout--worker [<options>]"
 msgstr "git checkout--worker [<选项>]"
 
-#: builtin/checkout--worker.c:118 builtin/checkout-index.c:201
-#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1864
-#: builtin/submodule--helper.c:1867 builtin/submodule--helper.c:1875
-#: builtin/submodule--helper.c:2511 builtin/submodule--helper.c:2577
-#: builtin/worktree.c:491 builtin/worktree.c:728
+#: builtin/checkout--worker.c:118 builtin/checkout-index.c:235
+#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1878
+#: builtin/submodule--helper.c:1881 builtin/submodule--helper.c:1889
+#: builtin/submodule--helper.c:2716 builtin/worktree.c:563
+#: builtin/worktree.c:808
 msgid "string"
 msgstr "字符串"
 
-#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:236
 msgid "when creating files, prepend <string>"
 msgstr "在创建文件时,在前面加上 <字符串>"
 
-#: builtin/checkout-index.c:152
+#: builtin/checkout-index.c:184
 msgid "git checkout-index [<options>] [--] [<file>...]"
 msgstr "git checkout-index [<选项>] [--] [<文件>...]"
 
-#: builtin/checkout-index.c:169
+#: builtin/checkout-index.c:201
 msgid "stage should be between 1 and 3 or all"
 msgstr "索引值应该取值 1 到 3 或者 all"
 
-#: builtin/checkout-index.c:187
+#: builtin/checkout-index.c:219
 msgid "check out all files in the index"
 msgstr "检出索引区的所有文件"
 
-#: builtin/checkout-index.c:188
+#: builtin/checkout-index.c:221
+msgid "do not skip files with skip-worktree set"
+msgstr "在 skip-worktree 设置时不要跳过文件"
+
+#: builtin/checkout-index.c:222
 msgid "force overwrite of existing files"
 msgstr "强制覆盖现有的文件"
 
-#: builtin/checkout-index.c:190
+#: builtin/checkout-index.c:224
 msgid "no warning for existing files and files not in index"
 msgstr "存在或不在索引中的文件都没有警告"
 
-#: builtin/checkout-index.c:192
+#: builtin/checkout-index.c:226
 msgid "don't checkout new files"
 msgstr "不检出新文件"
 
-#: builtin/checkout-index.c:194
+#: builtin/checkout-index.c:228
 msgid "update stat information in the index file"
 msgstr "更新索引中文件的状态信息"
 
-#: builtin/checkout-index.c:198
+#: builtin/checkout-index.c:232
 msgid "read list of paths from the standard input"
 msgstr "从标准输入读取路径列表"
 
-#: builtin/checkout-index.c:200
+#: builtin/checkout-index.c:234
 msgid "write the content to temporary files"
 msgstr "将内容写入临时文件"
 
-#: builtin/checkout-index.c:204
+#: builtin/checkout-index.c:238
 msgid "copy out the files from named stage"
 msgstr "从指定暂存区中拷出文件"
 
-#: builtin/checkout.c:33
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [<选项>] <分支>"
 
-#: builtin/checkout.c:34
+#: builtin/checkout.c:35
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [<选项>] [<分支>] -- <文件>..."
 
-#: builtin/checkout.c:39
+#: builtin/checkout.c:40
 msgid "git switch [<options>] [<branch>]"
 msgstr "git switch [<选项>] [<分支>]"
 
-#: builtin/checkout.c:44
+#: builtin/checkout.c:45
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<选项>] [--source=<分支>] <文件>..."
 
-#: builtin/checkout.c:198 builtin/checkout.c:237
+#: builtin/checkout.c:199 builtin/checkout.c:238
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "路径 '%s' 没有我们的版本"
 
-#: builtin/checkout.c:200 builtin/checkout.c:239
+#: builtin/checkout.c:201 builtin/checkout.c:240
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "路径 '%s' 没有他们的版本"
 
-#: builtin/checkout.c:216
+#: builtin/checkout.c:217
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "路径 '%s' 没有全部必需的版本"
 
-#: builtin/checkout.c:269
+#: builtin/checkout.c:271
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "路径 '%s' 没有必需的版本"
 
-#: builtin/checkout.c:286
+#: builtin/checkout.c:291
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "path '%s':无法合并"
 
-#: builtin/checkout.c:302
+#: builtin/checkout.c:307
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "无法为 '%s' 添加合并结果"
 
-#: builtin/checkout.c:419
+#: builtin/checkout.c:424
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "重新创建了 %d 个合并冲突"
 msgstr[1] "重新创建了 %d 个合并冲突"
 
-#: builtin/checkout.c:424
+#: builtin/checkout.c:429
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "从 %2$s 更新了 %1$d 个路径"
 msgstr[1] "从 %2$s 更新了 %1$d 个路径"
 
-#: builtin/checkout.c:431
+#: builtin/checkout.c:436
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "从索引区更新了 %d 个路径"
 msgstr[1] "从索引区更新了 %d 个路径"
 
-#: builtin/checkout.c:454 builtin/checkout.c:457 builtin/checkout.c:460
-#: builtin/checkout.c:464
+#: builtin/checkout.c:459 builtin/checkout.c:462 builtin/checkout.c:465
+#: builtin/checkout.c:469
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "'%s' 不能在更新路径时使用"
 
-#: builtin/checkout.c:474
+#: builtin/checkout.c:479
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr "不能同时更新路径并切换到分支'%s'。"
 
-#: builtin/checkout.c:478
+#: builtin/checkout.c:483
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "'%s' 或 '%s' 都没有指定"
 
-#: builtin/checkout.c:482
+#: builtin/checkout.c:487
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "未指定 '%2$s' 时,必须使用 '%1$s'"
 
-#: builtin/checkout.c:487 builtin/checkout.c:492
+#: builtin/checkout.c:492 builtin/checkout.c:497
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "'%s' 或 '%s' 不能和 %s 一起使用"
 
-#: builtin/checkout.c:566 builtin/checkout.c:573
+#: builtin/checkout.c:571 builtin/checkout.c:578
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "路径 '%s' 未合并"
 
-#: builtin/checkout.c:747
+#: builtin/checkout.c:753
 msgid "you need to resolve your current index first"
 msgstr "您需要先解决当前索引的冲突"
 
-#: builtin/checkout.c:797
+#: builtin/checkout.c:809
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -12339,51 +12708,51 @@ msgstr ""
 "不能继续,下列文件有暂存的修改:\n"
 "%s"
 
-#: builtin/checkout.c:890
+#: builtin/checkout.c:902
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "不能对 '%s' 执行 reflog 操作:%s\n"
 
-#: builtin/checkout.c:934
+#: builtin/checkout.c:947
 msgid "HEAD is now at"
 msgstr "HEAD 目前位于"
 
-#: builtin/checkout.c:938 builtin/clone.c:609 t/helper/test-fast-rebase.c:203
+#: builtin/checkout.c:951 builtin/clone.c:615 t/helper/test-fast-rebase.c:203
 msgid "unable to update HEAD"
 msgstr "不能更新 HEAD"
 
-#: builtin/checkout.c:942
+#: builtin/checkout.c:955
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "重置分支 '%s'\n"
 
-#: builtin/checkout.c:945
+#: builtin/checkout.c:958
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "已经位于 '%s'\n"
 
-#: builtin/checkout.c:949
+#: builtin/checkout.c:962
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "切换并重置分支 '%s'\n"
 
-#: builtin/checkout.c:951 builtin/checkout.c:1388
+#: builtin/checkout.c:964 builtin/checkout.c:1398
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "切换到一个新分支 '%s'\n"
 
-#: builtin/checkout.c:953
+#: builtin/checkout.c:966
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "切换到分支 '%s'\n"
 
 #  译者:注意保持前导空格
-#: builtin/checkout.c:1004
+#: builtin/checkout.c:1017
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " ... 及其它 %d 个。\n"
 
-#: builtin/checkout.c:1010
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -12404,7 +12773,7 @@ msgstr[1] ""
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1029
+#: builtin/checkout.c:1042
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -12431,19 +12800,19 @@ msgstr[1] ""
 " git branch <新分支名> %s\n"
 "\n"
 
-#: builtin/checkout.c:1064
+#: builtin/checkout.c:1077
 msgid "internal error in revision walk"
 msgstr "在版本遍历时遇到内部错误"
 
-#: builtin/checkout.c:1068
+#: builtin/checkout.c:1081
 msgid "Previous HEAD position was"
 msgstr "之前的 HEAD 位置是"
 
-#: builtin/checkout.c:1114 builtin/checkout.c:1383
+#: builtin/checkout.c:1124 builtin/checkout.c:1393
 msgid "You are on a branch yet to be born"
 msgstr "您位于一个尚未初始化的分支"
 
-#: builtin/checkout.c:1196
+#: builtin/checkout.c:1206
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -12452,7 +12821,7 @@ msgstr ""
 "'%s' 既可以是一个本地文件,也可以是一个跟踪分支。\n"
 "请使用 --(和可选的 --no-guess)来消除歧义"
 
-#: builtin/checkout.c:1203
+#: builtin/checkout.c:1213
 msgid ""
 "If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
 "you can do so by fully qualifying the name with the --track option:\n"
@@ -12471,51 +12840,56 @@ msgstr ""
 "如果您总是喜欢使用模糊的简短分支名 <名称>,而不喜欢如 'origin' 的远程\n"
 "名称,可以在配置中设置 checkout.defaultRemote=origin。"
 
-#: builtin/checkout.c:1213
+#: builtin/checkout.c:1223
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "'%s' 匹配多个(%d 个)远程跟踪分支"
 
-#: builtin/checkout.c:1279
+#: builtin/checkout.c:1289
 msgid "only one reference expected"
 msgstr "只期望一个引用"
 
-#: builtin/checkout.c:1296
+#: builtin/checkout.c:1306
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "应只有一个引用,却给出了 %d 个"
 
-#: builtin/checkout.c:1342 builtin/worktree.c:269 builtin/worktree.c:436
+#: builtin/checkout.c:1352 builtin/worktree.c:338 builtin/worktree.c:508
 #, c-format
 msgid "invalid reference: %s"
 msgstr "无效引用:%s"
 
-#: builtin/checkout.c:1355 builtin/checkout.c:1725
+#: builtin/checkout.c:1365 builtin/checkout.c:1744
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "引用不是一个树:%s"
 
-#: builtin/checkout.c:1402
+#: builtin/checkout.c:1413
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "期望一个分支,得到标签 '%s'"
 
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1415
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "期望一个分支,得到远程分支 '%s'"
 
-#: builtin/checkout.c:1405 builtin/checkout.c:1413
+#: builtin/checkout.c:1417 builtin/checkout.c:1426
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "期望一个分支,得到 '%s'"
 
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1420
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "期望一个分支,得到提交 '%s'"
 
-#: builtin/checkout.c:1424
+#: builtin/checkout.c:1429
+msgid ""
+"If you want to detach HEAD at the commit, try again with the --detach option."
+msgstr "如果你在本提交分离头指针,使用 --detach 选项重试。"
+
+#: builtin/checkout.c:1442
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
@@ -12523,7 +12897,7 @@ msgstr ""
 "不能在合并时切换分支\n"
 "考虑使用 \"git merge --quit\" 或 \"git worktree add\"。"
 
-#: builtin/checkout.c:1428
+#: builtin/checkout.c:1446
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
@@ -12531,7 +12905,7 @@ msgstr ""
 "不能在一个 am 会话期间切换分支\n"
 "考虑使用 \"git am --quit\" 或 \"git worktree add\"。"
 
-#: builtin/checkout.c:1432
+#: builtin/checkout.c:1450
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -12539,7 +12913,7 @@ msgstr ""
 "不能在变基时切换分支\n"
 "考虑使用 \"git rebase --quit\" 或 \"git worktree add\"。"
 
-#: builtin/checkout.c:1436
+#: builtin/checkout.c:1454
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -12547,7 +12921,7 @@ msgstr ""
 "不能在拣选时切换分支\n"
 "考虑使用 \"git cherry-pick --quit\" 或 \"git worktree add\"。"
 
-#: builtin/checkout.c:1440
+#: builtin/checkout.c:1458
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -12555,196 +12929,192 @@ msgstr ""
 "不能在还原时切换分支\n"
 "考虑使用 \"git revert --quit\" 或 \"git worktree add\"。"
 
-#: builtin/checkout.c:1444
+#: builtin/checkout.c:1462
 msgid "you are switching branch while bisecting"
 msgstr "您在执行二分查找时切换分支"
 
-#: builtin/checkout.c:1451
+#: builtin/checkout.c:1469
 msgid "paths cannot be used with switching branches"
 msgstr "路径不能和切换分支同时使用"
 
-#: builtin/checkout.c:1454 builtin/checkout.c:1458 builtin/checkout.c:1462
+#: builtin/checkout.c:1472 builtin/checkout.c:1476 builtin/checkout.c:1480
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "'%s' 不能和切换分支同时使用"
 
-#: builtin/checkout.c:1466 builtin/checkout.c:1469 builtin/checkout.c:1472
-#: builtin/checkout.c:1477 builtin/checkout.c:1482
+#: builtin/checkout.c:1484 builtin/checkout.c:1487 builtin/checkout.c:1490
+#: builtin/checkout.c:1495 builtin/checkout.c:1500
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "'%s' 不能和 '%s' 同时使用"
 
-#: builtin/checkout.c:1479
+#: builtin/checkout.c:1497
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "'%s' 不带 <起始点>"
 
-#: builtin/checkout.c:1487
+#: builtin/checkout.c:1505
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "不能切换分支到一个非提交 '%s'"
 
-#: builtin/checkout.c:1494
+#: builtin/checkout.c:1512
 msgid "missing branch or commit argument"
 msgstr "缺少分支或提交参数"
 
-#: builtin/checkout.c:1537
+#: builtin/checkout.c:1555
 msgid "perform a 3-way merge with the new branch"
 msgstr "和新的分支执行三方合并"
 
-#: builtin/checkout.c:1538 builtin/log.c:1825 parse-options.h:323
+#: builtin/checkout.c:1556 builtin/log.c:1844 parse-options.h:354
 msgid "style"
 msgstr "风格"
 
-#: builtin/checkout.c:1539
+#: builtin/checkout.c:1557
 msgid "conflict style (merge, diff3, or zdiff3)"
 msgstr "冲突输出风格(merge、diff3 或 zdiff3)"
 
-#: builtin/checkout.c:1551 builtin/worktree.c:488
+#: builtin/checkout.c:1569 builtin/worktree.c:560
 msgid "detach HEAD at named commit"
 msgstr "HEAD 从指定的提交分离"
 
-#: builtin/checkout.c:1553
-msgid "set up tracking mode (see git-pull(1))"
-msgstr "设置跟踪模式(参见 git-pull(1))"
-
-#: builtin/checkout.c:1556
+#: builtin/checkout.c:1574
 msgid "force checkout (throw away local modifications)"
 msgstr "强制检出(丢弃本地修改)"
 
-#: builtin/checkout.c:1558
+#: builtin/checkout.c:1576
 msgid "new-branch"
 msgstr "新分支"
 
-#: builtin/checkout.c:1558
+#: builtin/checkout.c:1576
 msgid "new unparented branch"
 msgstr "新的没有父提交的分支"
 
-#: builtin/checkout.c:1560 builtin/merge.c:305
+#: builtin/checkout.c:1578 builtin/merge.c:305
 msgid "update ignored files (default)"
 msgstr "更新忽略的文件(默认)"
 
-#: builtin/checkout.c:1563
+#: builtin/checkout.c:1581
 msgid "do not check if another worktree is holding the given ref"
 msgstr "不检查指定的引用是否被其他工作区所占用"
 
-#: builtin/checkout.c:1576
+#: builtin/checkout.c:1594
 msgid "checkout our version for unmerged files"
 msgstr "对尚未合并的文件检出我们的版本"
 
-#: builtin/checkout.c:1579
+#: builtin/checkout.c:1597
 msgid "checkout their version for unmerged files"
 msgstr "对尚未合并的文件检出他们的版本"
 
-#: builtin/checkout.c:1583
+#: builtin/checkout.c:1601
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "对路径不做稀疏检出的限制"
 
-#: builtin/checkout.c:1640
+#: builtin/checkout.c:1659
 #, c-format
 msgid "options '-%c', '-%c', and '%s' cannot be used together"
 msgstr "选项 '-%c'、'-%c' 和 ‘%s' 不能同时使用"
 
-#: builtin/checkout.c:1681
+#: builtin/checkout.c:1700
 msgid "--track needs a branch name"
 msgstr "--track 需要一个分支名"
 
-#: builtin/checkout.c:1686
+#: builtin/checkout.c:1705
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "缺少分支名,尝试 -%c"
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1737
 #, c-format
 msgid "could not resolve %s"
 msgstr "无法解析 %s"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1753
 msgid "invalid path specification"
 msgstr "无效的路径规格"
 
-#: builtin/checkout.c:1741
+#: builtin/checkout.c:1760
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr "'%s' 不是一个提交,不能基于它创建分支 '%s'"
 
-#: builtin/checkout.c:1745
+#: builtin/checkout.c:1764
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout:--detach 不能接收路径参数 '%s'"
 
-#: builtin/checkout.c:1770
+#: builtin/checkout.c:1789
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
 msgstr ""
 "git checkout:在从索引检出时,--ours/--theirs、--force 和 --merge 不兼容。"
 
-#: builtin/checkout.c:1775
+#: builtin/checkout.c:1794
 msgid "you must specify path(s) to restore"
 msgstr "您必须指定一个要恢复的路径"
 
-#: builtin/checkout.c:1800 builtin/checkout.c:1802 builtin/checkout.c:1854
-#: builtin/checkout.c:1856 builtin/clone.c:126 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2959
-#: builtin/submodule--helper.c:3253 builtin/worktree.c:484
-#: builtin/worktree.c:486
+#: builtin/checkout.c:1819 builtin/checkout.c:1821 builtin/checkout.c:1873
+#: builtin/checkout.c:1875 builtin/clone.c:130 builtin/remote.c:171
+#: builtin/remote.c:173 builtin/submodule--helper.c:3038
+#: builtin/submodule--helper.c:3371 builtin/worktree.c:556
+#: builtin/worktree.c:558
 msgid "branch"
 msgstr "分支"
 
-#: builtin/checkout.c:1801
+#: builtin/checkout.c:1820
 msgid "create and checkout a new branch"
 msgstr "创建并检出一个新的分支"
 
-#: builtin/checkout.c:1803
+#: builtin/checkout.c:1822
 msgid "create/reset and checkout a branch"
 msgstr "创建/重置并检出一个分支"
 
-#: builtin/checkout.c:1804
+#: builtin/checkout.c:1823
 msgid "create reflog for new branch"
 msgstr "为新的分支创建引用日志"
 
-#: builtin/checkout.c:1806
+#: builtin/checkout.c:1825
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr "二次猜测 'git checkout <无此分支>'(默认)"
 
-#: builtin/checkout.c:1807
+#: builtin/checkout.c:1826
 msgid "use overlay mode (default)"
 msgstr "使用叠加模式(默认)"
 
-#: builtin/checkout.c:1855
+#: builtin/checkout.c:1874
 msgid "create and switch to a new branch"
 msgstr "创建并切换一个新分支"
 
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1876
 msgid "create/reset and switch to a branch"
 msgstr "创建/重置并切换一个分支"
 
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1878
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "二次猜测 'git switch <无此分支>'"
 
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1880
 msgid "throw away local modifications"
 msgstr "丢弃本地修改"
 
-#: builtin/checkout.c:1897
+#: builtin/checkout.c:1916
 msgid "which tree-ish to checkout from"
 msgstr "要检出哪一个树"
 
-#: builtin/checkout.c:1899
+#: builtin/checkout.c:1918
 msgid "restore the index"
 msgstr "恢复索引"
 
-#: builtin/checkout.c:1901
+#: builtin/checkout.c:1920
 msgid "restore the working tree (default)"
 msgstr "恢复工作区(默认)"
 
-#: builtin/checkout.c:1903
+#: builtin/checkout.c:1922
 msgid "ignore unmerged entries"
 msgstr "忽略未合并条目"
 
-#: builtin/checkout.c:1904
+#: builtin/checkout.c:1923
 msgid "use overlay mode"
 msgstr "使用叠加模式"
 
@@ -12892,8 +13262,8 @@ msgid "remove whole directories"
 msgstr "删除整个目录"
 
 #: builtin/clean.c:932 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:937 builtin/log.c:184 builtin/log.c:186
-#: builtin/ls-files.c:651 builtin/name-rev.c:535 builtin/name-rev.c:537
+#: builtin/grep.c:938 builtin/log.c:185 builtin/log.c:187
+#: builtin/ls-files.c:651 builtin/name-rev.c:585 builtin/name-rev.c:587
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "模式"
@@ -12928,208 +13298,212 @@ msgstr ""
 msgid "-x and -X cannot be used together"
 msgstr "-x 和 -X 不能同时使用"
 
-#: builtin/clone.c:45
+#: builtin/clone.c:47
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<选项>] [--] <仓库> [<路径>]"
 
-#: builtin/clone.c:96
+#: builtin/clone.c:100
 msgid "don't clone shallow repository"
 msgstr "不克隆浅仓库"
 
-#: builtin/clone.c:98
+#: builtin/clone.c:102
 msgid "don't create a checkout"
 msgstr "不创建一个检出"
 
-#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:542
+#: builtin/clone.c:103 builtin/clone.c:105 builtin/init-db.c:542
 msgid "create a bare repository"
 msgstr "创建一个纯仓库"
 
-#: builtin/clone.c:103
+#: builtin/clone.c:107
 msgid "create a mirror repository (implies bare)"
 msgstr "创建一个镜像仓库(也是纯仓库)"
 
-#: builtin/clone.c:105
+#: builtin/clone.c:109
 msgid "to clone from a local repository"
 msgstr "从本地仓库克隆"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "don't use local hardlinks, always copy"
 msgstr "不使用本地硬链接,始终复制"
 
-#: builtin/clone.c:109
+#: builtin/clone.c:113
 msgid "setup as shared repository"
 msgstr "设置为共享仓库"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "pathspec"
 msgstr "路径规格"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "initialize submodules in the clone"
 msgstr "在克隆时初始化子模组"
 
-#: builtin/clone.c:115
+#: builtin/clone.c:119
 msgid "number of submodules cloned in parallel"
 msgstr "并发克隆的子模组的数量"
 
-#: builtin/clone.c:116 builtin/init-db.c:539
+#: builtin/clone.c:120 builtin/init-db.c:539
 msgid "template-directory"
 msgstr "模板目录"
 
-#: builtin/clone.c:117 builtin/init-db.c:540
+#: builtin/clone.c:121 builtin/init-db.c:540
 msgid "directory from which templates will be used"
 msgstr "模板目录将被使用"
 
-#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1871
-#: builtin/submodule--helper.c:2514 builtin/submodule--helper.c:3260
+#: builtin/clone.c:123 builtin/clone.c:125 builtin/submodule--helper.c:1885
+#: builtin/submodule--helper.c:2719 builtin/submodule--helper.c:3378
 msgid "reference repository"
 msgstr "参考仓库"
 
-#: builtin/clone.c:123 builtin/submodule--helper.c:1873
-#: builtin/submodule--helper.c:2516
+#: builtin/clone.c:127 builtin/submodule--helper.c:1887
+#: builtin/submodule--helper.c:2721
 msgid "use --reference only while cloning"
 msgstr "仅在克隆时参考 --reference 指向的本地仓库"
 
-#: builtin/clone.c:124 builtin/column.c:27 builtin/fmt-merge-msg.c:27
+#: builtin/clone.c:128 builtin/column.c:27 builtin/fmt-merge-msg.c:27
 #: builtin/init-db.c:550 builtin/merge-file.c:48 builtin/merge.c:290
-#: builtin/pack-objects.c:3944 builtin/repack.c:665
-#: builtin/submodule--helper.c:3262 t/helper/test-simple-ipc.c:595
+#: builtin/pack-objects.c:3967 builtin/repack.c:669
+#: builtin/submodule--helper.c:3380 t/helper/test-simple-ipc.c:595
 #: t/helper/test-simple-ipc.c:597
 msgid "name"
 msgstr "名称"
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "使用 <名称> 而不是 'origin' 去跟踪上游"
 
-#: builtin/clone.c:127
+#: builtin/clone.c:131
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "检出 <分支> 而不是远程 HEAD"
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133
 msgid "path to git-upload-pack on the remote"
 msgstr "远程 git-upload-pack 路径"
 
-#: builtin/clone.c:130 builtin/fetch.c:181 builtin/grep.c:876
+#: builtin/clone.c:134 builtin/fetch.c:182 builtin/grep.c:877
 #: builtin/pull.c:212
 msgid "depth"
 msgstr "深度"
 
-#: builtin/clone.c:131
+#: builtin/clone.c:135
 msgid "create a shallow clone of that depth"
 msgstr "创建一个指定深度的浅克隆"
 
-#: builtin/clone.c:132 builtin/fetch.c:183 builtin/pack-objects.c:3933
+#: builtin/clone.c:136 builtin/fetch.c:184 builtin/pack-objects.c:3956
 #: builtin/pull.c:215
 msgid "time"
 msgstr "时间"
 
-#: builtin/clone.c:133
+#: builtin/clone.c:137
 msgid "create a shallow clone since a specific time"
 msgstr "从一个特定时间创建一个浅克隆"
 
-#: builtin/clone.c:134 builtin/fetch.c:185 builtin/fetch.c:208
-#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1022
+#: builtin/clone.c:138 builtin/fetch.c:186 builtin/fetch.c:212
+#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1050
 msgid "revision"
 msgstr "版本"
 
-#: builtin/clone.c:135 builtin/fetch.c:186 builtin/pull.c:219
+#: builtin/clone.c:139 builtin/fetch.c:187 builtin/pull.c:219
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "深化浅克隆的历史,除了特定版本"
 
-#: builtin/clone.c:137 builtin/submodule--helper.c:1883
-#: builtin/submodule--helper.c:2530
+#: builtin/clone.c:141 builtin/submodule--helper.c:1897
+#: builtin/submodule--helper.c:2735
 msgid "clone only one branch, HEAD or --branch"
 msgstr "只克隆一个分支、HEAD 或 --branch"
 
-#: builtin/clone.c:139
+#: builtin/clone.c:143
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr "不要克隆任何标签,并且后续获取操作也不下载它们"
 
-#: builtin/clone.c:141
+#: builtin/clone.c:145
 msgid "any cloned submodules will be shallow"
 msgstr "子模组将以浅下载模式克隆"
 
-#: builtin/clone.c:142 builtin/init-db.c:548
+#: builtin/clone.c:146 builtin/init-db.c:548
 msgid "gitdir"
 msgstr "git目录"
 
-#: builtin/clone.c:143 builtin/init-db.c:549
+#: builtin/clone.c:147 builtin/init-db.c:549
 msgid "separate git dir from working tree"
 msgstr "git目录和工作区分离"
 
-#: builtin/clone.c:144
+#: builtin/clone.c:148
 msgid "key=value"
 msgstr "key=value"
 
-#: builtin/clone.c:145
+#: builtin/clone.c:149
 msgid "set config inside the new repository"
 msgstr "在新仓库中设置配置信息"
 
-#: builtin/clone.c:147 builtin/fetch.c:203 builtin/ls-remote.c:77
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
 #: builtin/pull.c:234 builtin/push.c:575 builtin/send-pack.c:200
 msgid "server-specific"
 msgstr "server-specific"
 
-#: builtin/clone.c:147 builtin/fetch.c:203 builtin/ls-remote.c:77
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
 #: builtin/pull.c:235 builtin/push.c:575 builtin/send-pack.c:201
 msgid "option to transmit"
 msgstr "传输选项"
 
-#: builtin/clone.c:148 builtin/fetch.c:204 builtin/pull.c:238
+#: builtin/clone.c:152 builtin/fetch.c:208 builtin/pull.c:238
 #: builtin/push.c:576
 msgid "use IPv4 addresses only"
 msgstr "只使用 IPv4 地址"
 
-#: builtin/clone.c:150 builtin/fetch.c:206 builtin/pull.c:241
+#: builtin/clone.c:154 builtin/fetch.c:210 builtin/pull.c:241
 #: builtin/push.c:578
 msgid "use IPv6 addresses only"
 msgstr "只使用 IPv6 地址"
 
-#: builtin/clone.c:154
+#: builtin/clone.c:158
+msgid "apply partial clone filters to submodules"
+msgstr "对子模组使用部分克隆过滤器"
+
+#: builtin/clone.c:160
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "任何克隆的子模组将使用它们的远程跟踪分支"
 
-#: builtin/clone.c:156
+#: builtin/clone.c:162
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr "初始化稀疏检出文件,只包含根目录文件"
 
-#: builtin/clone.c:231
+#: builtin/clone.c:237
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info: 不能为 '%s' 添加一个备用:%s\n"
 
-#: builtin/clone.c:304
+#: builtin/clone.c:310
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s 存在且不是一个目录"
 
-#: builtin/clone.c:322
+#: builtin/clone.c:328
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "无法在 '%s' 上启动迭代器"
 
-#: builtin/clone.c:353
+#: builtin/clone.c:359
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "无法创建链接 '%s'"
 
-#: builtin/clone.c:357
+#: builtin/clone.c:363
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "无法拷贝文件至 '%s'"
 
-#: builtin/clone.c:362
+#: builtin/clone.c:368
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "无法在 '%s' 上迭代"
 
-#: builtin/clone.c:389
+#: builtin/clone.c:395
 #, c-format
 msgid "done.\n"
 msgstr "完成。\n"
 
-#: builtin/clone.c:403
+#: builtin/clone.c:409
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -13139,144 +13513,148 @@ msgstr ""
 "您可以通过 'git status' 检查哪些已被检出,然后使用命令\n"
 "'git restore --source=HEAD :/' 重试\n"
 
-#: builtin/clone.c:480
+#: builtin/clone.c:486
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "不能发现要克隆的远程分支 %s。"
 
-#: builtin/clone.c:597
+#: builtin/clone.c:603
 #, c-format
 msgid "unable to update %s"
 msgstr "不能更新 %s"
 
-#: builtin/clone.c:645
+#: builtin/clone.c:651
 msgid "failed to initialize sparse-checkout"
 msgstr "无法初始化稀疏检出"
 
-#: builtin/clone.c:668
+#: builtin/clone.c:674
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr "远程 HEAD 指向一个不存在的引用,无法检出。\n"
 
-#: builtin/clone.c:701
+#: builtin/clone.c:709
 msgid "unable to checkout working tree"
 msgstr "不能检出工作区"
 
-#: builtin/clone.c:779
+#: builtin/clone.c:793
 msgid "unable to write parameters to config file"
 msgstr "无法将参数写入配置文件"
 
-#: builtin/clone.c:842
+#: builtin/clone.c:856
 msgid "cannot repack to clean up"
 msgstr "无法执行 repack 来清理"
 
-#: builtin/clone.c:844
+#: builtin/clone.c:858
 msgid "cannot unlink temporary alternates file"
 msgstr "无法删除临时的 alternates 文件"
 
-#: builtin/clone.c:886
+#: builtin/clone.c:901
 msgid "Too many arguments."
 msgstr "太多参数。"
 
-#: builtin/clone.c:890 contrib/scalar/scalar.c:414
+#: builtin/clone.c:905 contrib/scalar/scalar.c:413
 msgid "You must specify a repository to clone."
 msgstr "您必须指定一个仓库来克隆。"
 
-#: builtin/clone.c:903
+#: builtin/clone.c:918
 #, c-format
 msgid "options '%s' and '%s %s' cannot be used together"
 msgstr "选项 '%s' 和 '%s %s' 不能同时使用"
 
-#: builtin/clone.c:920
+#: builtin/clone.c:935
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "仓库 '%s' 不存在"
 
-#: builtin/clone.c:924 builtin/fetch.c:2052
+#: builtin/clone.c:939 builtin/fetch.c:2176
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "深度 %s 不是一个正数"
 
-#: builtin/clone.c:934
+#: builtin/clone.c:949
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "目标路径 '%s' 已经存在,并且不是一个空目录。"
 
-#: builtin/clone.c:940
+#: builtin/clone.c:955
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr "仓库路径 '%s' 已经存在,并且不是一个空目录。"
 
-#: builtin/clone.c:954
+#: builtin/clone.c:969
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "工作区 '%s' 已经存在。"
 
-#: builtin/clone.c:969 builtin/clone.c:990 builtin/difftool.c:256
-#: builtin/log.c:2012 builtin/worktree.c:281 builtin/worktree.c:313
+#: builtin/clone.c:984 builtin/clone.c:1005 builtin/difftool.c:256
+#: builtin/log.c:2037 builtin/worktree.c:350 builtin/worktree.c:382
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "不能为 '%s' 创建先导目录"
 
-#: builtin/clone.c:974
+#: builtin/clone.c:989
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "不能创建工作区目录 '%s'"
 
-#: builtin/clone.c:994
+#: builtin/clone.c:1009
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "克隆到纯仓库 '%s'...\n"
 
-#: builtin/clone.c:996
+#: builtin/clone.c:1011
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "正克隆到 '%s'...\n"
 
-#: builtin/clone.c:1025
+#: builtin/clone.c:1040
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
 msgstr "clone --recursive 和 --reference 以及 --reference-if-able 不兼容"
 
-#: builtin/clone.c:1080 builtin/remote.c:200 builtin/remote.c:710
+#: builtin/clone.c:1116 builtin/remote.c:201 builtin/remote.c:721
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "'%s' 不是一个有效的远程名称"
 
-#: builtin/clone.c:1121
+#: builtin/clone.c:1157
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "--depth 在本地克隆时被忽略,请改用 file:// 协议。"
 
-#: builtin/clone.c:1123
+#: builtin/clone.c:1159
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr "--shallow-since 在本地克隆时被忽略,请改用 file:// 协议。"
 
-#: builtin/clone.c:1125
+#: builtin/clone.c:1161
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr "--shallow-exclude 在本地克隆时被忽略,请改用 file:// 协议。"
 
-#: builtin/clone.c:1127
+#: builtin/clone.c:1163
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr "--filter 在本地克隆时被忽略,请改用 file:// 协议。"
 
-#: builtin/clone.c:1132
+#: builtin/clone.c:1168
 msgid "source repository is shallow, ignoring --local"
 msgstr "源仓库是浅克隆,忽略 --local"
 
-#: builtin/clone.c:1137
+#: builtin/clone.c:1173
 msgid "--local is ignored"
 msgstr "--local 被忽略"
 
-#: builtin/clone.c:1216 builtin/clone.c:1276
+#: builtin/clone.c:1185
+msgid "cannot clone from filtered bundle"
+msgstr "无法从经过过滤的归档包克隆"
+
+#: builtin/clone.c:1265 builtin/clone.c:1324
 msgid "remote transport reported error"
 msgstr "远程传输报告错误"
 
-#: builtin/clone.c:1228 builtin/clone.c:1239
+#: builtin/clone.c:1277 builtin/clone.c:1289
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "远程分支 %s 在上游 %s 未发现"
 
-#: builtin/clone.c:1242
+#: builtin/clone.c:1292
 msgid "You appear to have cloned an empty repository."
 msgstr "您似乎克隆了一个空仓库。"
 
@@ -13329,7 +13707,7 @@ msgstr ""
 ">]] [--reachable|--stdin-packs|--stdin-commits] [--changed-paths] [--"
 "[no-]max-new-filters <n>] [--[no-]progress] <切分选项>"
 
-#: builtin/commit-graph.c:51 builtin/fetch.c:192 builtin/log.c:1794
+#: builtin/commit-graph.c:51 builtin/fetch.c:196 builtin/log.c:1813
 msgid "dir"
 msgstr "目录"
 
@@ -13427,7 +13805,7 @@ msgstr ""
 msgid "duplicate parent %s ignored"
 msgstr "忽略重复的父提交 %s"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:577
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:590
 #, c-format
 msgid "not a valid object name %s"
 msgstr "不是一个有效的对象名 %s"
@@ -13450,13 +13828,13 @@ msgstr "父提交"
 msgid "id of a parent commit object"
 msgstr "父提交对象 ID"
 
-#: builtin/commit-tree.c:112 builtin/commit.c:1627 builtin/merge.c:284
-#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1677
-#: builtin/tag.c:454
+#: builtin/commit-tree.c:112 builtin/commit.c:1626 builtin/merge.c:284
+#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1666
+#: builtin/tag.c:455
 msgid "message"
 msgstr "说明"
 
-#: builtin/commit-tree.c:113 builtin/commit.c:1627
+#: builtin/commit-tree.c:113 builtin/commit.c:1626
 msgid "commit message"
 msgstr "提交说明"
 
@@ -13464,7 +13842,7 @@ msgstr "提交说明"
 msgid "read commit log message from file"
 msgstr "从文件中读取提交说明"
 
-#: builtin/commit-tree.c:119 builtin/commit.c:1644 builtin/merge.c:303
+#: builtin/commit-tree.c:119 builtin/commit.c:1643 builtin/merge.c:303
 #: builtin/pull.c:180 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "GPG 提交签名"
@@ -13477,15 +13855,15 @@ msgstr "必须精确地提供一个树"
 msgid "git commit-tree: failed to read"
 msgstr "git commit-tree:无法读取"
 
-#: builtin/commit.c:42
+#: builtin/commit.c:43
 msgid "git commit [<options>] [--] <pathspec>..."
 msgstr "git commit [<选项>] [--] <路径规格>..."
 
-#: builtin/commit.c:47
+#: builtin/commit.c:48
 msgid "git status [<options>] [--] <pathspec>..."
 msgstr "git status [<选项>] [--] <路径规格>..."
 
-#: builtin/commit.c:52
+#: builtin/commit.c:53
 msgid ""
 "You asked to amend the most recent commit, but doing so would make\n"
 "it empty. You can repeat your command with --allow-empty, or you can\n"
@@ -13494,7 +13872,7 @@ msgstr ""
 "您要修补最近的提交,但这么做会让它成为空提交。您可以重复您的命令并带上\n"
 "--allow-empty 选项,或者您可用命令 \"git reset HEAD^\" 整个删除该提交。\n"
 
-#: builtin/commit.c:57
+#: builtin/commit.c:58
 msgid ""
 "The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
 "If you wish to commit it anyway, use:\n"
@@ -13508,15 +13886,15 @@ msgstr ""
 "    git commit --allow-empty\n"
 "\n"
 
-#: builtin/commit.c:64
+#: builtin/commit.c:65
 msgid "Otherwise, please use 'git rebase --skip'\n"
 msgstr "否则,请使用 'git rebase --skip'\n"
 
-#: builtin/commit.c:67
+#: builtin/commit.c:68
 msgid "Otherwise, please use 'git cherry-pick --skip'\n"
 msgstr "否则,请使用 'git cherry-pick --skip'\n"
 
-#: builtin/commit.c:70
+#: builtin/commit.c:71
 msgid ""
 "and then use:\n"
 "\n"
@@ -13537,118 +13915,118 @@ msgstr ""
 "    git cherry-pick --skip\n"
 "\n"
 
-#: builtin/commit.c:325
+#: builtin/commit.c:326
 msgid "failed to unpack HEAD tree object"
 msgstr "无法解包 HEAD 树对象"
 
-#: builtin/commit.c:375
+#: builtin/commit.c:376
 msgid "No paths with --include/--only does not make sense."
 msgstr "参数 --include/--only 不跟路径没有意义。"
 
-#: builtin/commit.c:387
+#: builtin/commit.c:388
 msgid "unable to create temporary index"
 msgstr "不能创建临时索引"
 
-#: builtin/commit.c:396
+#: builtin/commit.c:397
 msgid "interactive add failed"
 msgstr "交互式添加失败"
 
-#: builtin/commit.c:411
+#: builtin/commit.c:412
 msgid "unable to update temporary index"
 msgstr "无法更新临时索引"
 
-#: builtin/commit.c:413
+#: builtin/commit.c:414
 msgid "Failed to update main cache tree"
 msgstr "不能更新树的主缓存"
 
-#: builtin/commit.c:438 builtin/commit.c:461 builtin/commit.c:509
+#: builtin/commit.c:439 builtin/commit.c:462 builtin/commit.c:510
 msgid "unable to write new_index file"
 msgstr "无法写 new_index 文件"
 
-#: builtin/commit.c:490
+#: builtin/commit.c:491
 msgid "cannot do a partial commit during a merge."
 msgstr "在合并过程中不能做部分提交。"
 
-#: builtin/commit.c:492
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr "在拣选过程中不能做部分提交。"
 
-#: builtin/commit.c:494
+#: builtin/commit.c:495
 msgid "cannot do a partial commit during a rebase."
 msgstr "在变基过程中不能做部分提交。"
 
-#: builtin/commit.c:502
+#: builtin/commit.c:503
 msgid "cannot read the index"
 msgstr "无法读取索引"
 
-#: builtin/commit.c:521
+#: builtin/commit.c:522
 msgid "unable to write temporary index file"
 msgstr "无法写临时索引文件"
 
-#: builtin/commit.c:619
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "提交 '%s' 缺少作者信息"
 
-#: builtin/commit.c:621
+#: builtin/commit.c:622
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "提交 '%s' 有格式错误的作者信息"
 
-#: builtin/commit.c:640
+#: builtin/commit.c:641
 msgid "malformed --author parameter"
 msgstr "格式错误的 --author 参数"
 
-#: builtin/commit.c:693
+#: builtin/commit.c:694
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
 msgstr "无法选择一个未被当前提交说明使用的注释字符"
 
-#: builtin/commit.c:747 builtin/commit.c:781 builtin/commit.c:1166
+#: builtin/commit.c:750 builtin/commit.c:784 builtin/commit.c:1170
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "不能查询提交 %s"
 
-#: builtin/commit.c:759 builtin/shortlog.c:416
+#: builtin/commit.c:762 builtin/shortlog.c:417
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(正从标准输入中读取日志信息)\n"
 
-#: builtin/commit.c:761
+#: builtin/commit.c:764
 msgid "could not read log from standard input"
 msgstr "不能从标准输入中读取日志信息"
 
-#: builtin/commit.c:765
+#: builtin/commit.c:768
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "不能读取日志文件 '%s'"
 
-#: builtin/commit.c:802
+#: builtin/commit.c:805
 #, c-format
 msgid "options '%s' and '%s:%s' cannot be used together"
 msgstr "选项 '%s' 和 '%s:%s' 不能同时使用"
 
-#: builtin/commit.c:814 builtin/commit.c:830
+#: builtin/commit.c:817 builtin/commit.c:833
 msgid "could not read SQUASH_MSG"
 msgstr "不能读取 SQUASH_MSG"
 
-#: builtin/commit.c:821
+#: builtin/commit.c:824
 msgid "could not read MERGE_MSG"
 msgstr "不能读取 MERGE_MSG"
 
-#: builtin/commit.c:881
+#: builtin/commit.c:884
 msgid "could not write commit template"
 msgstr "不能写提交模版"
 
-#: builtin/commit.c:894
+#: builtin/commit.c:897
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
 "with '%c' will be ignored.\n"
 msgstr "请为您的变更输入提交说明。以 '%c' 开始的行将被忽略。\n"
 
-#: builtin/commit.c:896
+#: builtin/commit.c:899
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13657,7 +14035,7 @@ msgstr ""
 "请为您的变更输入提交说明。以 '%c' 开始的行将被忽略,而一个空的提交\n"
 "说明将会终止提交。\n"
 
-#: builtin/commit.c:900
+#: builtin/commit.c:903
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13666,7 +14044,7 @@ msgstr ""
 "请为您的变更输入提交说明。以 '%c' 开始的行将被保留,如果您愿意\n"
 "也可以删除它们。\n"
 
-#: builtin/commit.c:904
+#: builtin/commit.c:907
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13676,7 +14054,7 @@ msgstr ""
 "请为您的变更输入提交说明。以 '%c' 开始的行将被保留,如果您愿意\n"
 "也可以删除它们。一个空的提交说明将会终止提交。\n"
 
-#: builtin/commit.c:916
+#: builtin/commit.c:919
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -13689,7 +14067,7 @@ msgstr ""
 "\tgit update-ref -d MERGE_HEAD\n"
 "然后重试。\n"
 
-#: builtin/commit.c:921
+#: builtin/commit.c:924
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -13703,368 +14081,348 @@ msgstr ""
 "然后重试。\n"
 
 #  译者:为保证在输出中对齐,注意调整句中空格!
-#: builtin/commit.c:948
+#: builtin/commit.c:951
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%s作者:  %.*s <%.*s>"
 
 #  译者:为保证在输出中对齐,注意调整句中空格!
-#: builtin/commit.c:956
+#: builtin/commit.c:959
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%s日期:  %s"
 
 #  译者:为保证在输出中对齐,注意调整句中空格!
-#: builtin/commit.c:963
+#: builtin/commit.c:966
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%s提交者:%.*s <%.*s>"
 
-#: builtin/commit.c:981
+#: builtin/commit.c:984
 msgid "Cannot read index"
 msgstr "无法读取索引"
 
-#: builtin/commit.c:1026
+#: builtin/commit.c:1029
 msgid "unable to pass trailers to --trailers"
 msgstr "无法将尾注传递给 --trailers"
 
-#: builtin/commit.c:1066
+#: builtin/commit.c:1069
 msgid "Error building trees"
 msgstr "无法创建树对象"
 
-#: builtin/commit.c:1080 builtin/tag.c:316
+#: builtin/commit.c:1083 builtin/tag.c:317
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "请使用 -m 或 -F 选项提供提交说明。\n"
 
-#: builtin/commit.c:1124
+#: builtin/commit.c:1128
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr "--author '%s' 不是 '姓名 <邮箱>' 格式,且未能在现有作者中找到匹配"
 
-#: builtin/commit.c:1138
+#: builtin/commit.c:1142
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "无效的忽略模式 '%s'"
 
-#: builtin/commit.c:1156 builtin/commit.c:1451
+#: builtin/commit.c:1160 builtin/commit.c:1450
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "无效的未跟踪文件参数 '%s'"
 
-#: builtin/commit.c:1227
+#: builtin/commit.c:1231
 msgid "You are in the middle of a merge -- cannot reword."
 msgstr "您正处于一个合并过程中 -- 无法改写说明。"
 
-#: builtin/commit.c:1229
+#: builtin/commit.c:1233
 msgid "You are in the middle of a cherry-pick -- cannot reword."
 msgstr "您正处于一个拣选过程中 -- 无法改写说明。"
 
-#: builtin/commit.c:1232
+#: builtin/commit.c:1236
 #, c-format
 msgid "reword option of '%s' and path '%s' cannot be used together"
 msgstr "改写说明选项 '%s' 和路径 '%s' 不能同时使用"
 
-#: builtin/commit.c:1234
+#: builtin/commit.c:1238
 #, c-format
 msgid "reword option of '%s' and '%s' cannot be used together"
 msgstr "改写说明选项 '%s' 和 '%s' 不能同时使用"
 
-#: builtin/commit.c:1254
-msgid "Using both --reset-author and --author does not make sense"
-msgstr "同时使用 --reset-author 和 --author 没有意义"
-
-#: builtin/commit.c:1261
+#: builtin/commit.c:1263
 msgid "You have nothing to amend."
 msgstr "您没有可修补的提交。"
 
-#: builtin/commit.c:1264
+#: builtin/commit.c:1266
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "您正处于一个合并过程中 -- 无法修补提交。"
 
-#: builtin/commit.c:1266
+#: builtin/commit.c:1268
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr "您正处于一个拣选过程中 -- 无法修补提交。"
 
-#: builtin/commit.c:1268
+#: builtin/commit.c:1270
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr "您正处于一个变基过程中 -- 无法修补提交。"
 
-#: builtin/commit.c:1271
-msgid "Options --squash and --fixup cannot be used together"
-msgstr "选项 --squash 和 --fixup 不能同时使用"
-
-#: builtin/commit.c:1281
-msgid "Only one of -c/-C/-F/--fixup can be used."
-msgstr "只能用一个 -c/-C/-F/--fixup 选项。"
-
-#: builtin/commit.c:1283
-msgid "Option -m cannot be combined with -c/-C/-F."
-msgstr "选项 -m 不能和 -c/-C/-F 同时使用。"
-
-#: builtin/commit.c:1292
+#: builtin/commit.c:1290
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr "--reset-author 只能和 -C、-c 或 --amend 同时使用。"
 
-#: builtin/commit.c:1310
-msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
-msgstr "只能用一个 --include/--only/--all/--interactive/--patch 选项。"
-
-#: builtin/commit.c:1338
+#: builtin/commit.c:1337
 #, c-format
 msgid "unknown option: --fixup=%s:%s"
 msgstr "未知选项:--fixup=%s:%s"
 
-#: builtin/commit.c:1355
+#: builtin/commit.c:1354
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "路径  '%s ...' 和 -a 选项同时使用没有意义"
 
-#: builtin/commit.c:1486 builtin/commit.c:1655
+#: builtin/commit.c:1485 builtin/commit.c:1654
 msgid "show status concisely"
 msgstr "以简洁的格式显示状态"
 
-#: builtin/commit.c:1488 builtin/commit.c:1657
+#: builtin/commit.c:1487 builtin/commit.c:1656
 msgid "show branch information"
 msgstr "显示分支信息"
 
-#: builtin/commit.c:1490
+#: builtin/commit.c:1489
 msgid "show stash information"
 msgstr "显示贮藏区信息"
 
-#: builtin/commit.c:1492 builtin/commit.c:1659
+#: builtin/commit.c:1491 builtin/commit.c:1658
 msgid "compute full ahead/behind values"
 msgstr "计算完整的领先/落后值"
 
-#: builtin/commit.c:1494
+#: builtin/commit.c:1493
 msgid "version"
 msgstr "版本"
 
-#: builtin/commit.c:1494 builtin/commit.c:1661 builtin/push.c:551
-#: builtin/worktree.c:690
+#: builtin/commit.c:1493 builtin/commit.c:1660 builtin/push.c:551
+#: builtin/worktree.c:765
 msgid "machine-readable output"
 msgstr "机器可读的输出"
 
-#: builtin/commit.c:1497 builtin/commit.c:1663
+#: builtin/commit.c:1496 builtin/commit.c:1662
 msgid "show status in long format (default)"
 msgstr "以长格式显示状态(默认)"
 
-#: builtin/commit.c:1500 builtin/commit.c:1666
+#: builtin/commit.c:1499 builtin/commit.c:1665
 msgid "terminate entries with NUL"
 msgstr "条目以 NUL 字符结尾"
 
-#: builtin/commit.c:1502 builtin/commit.c:1506 builtin/commit.c:1669
+#: builtin/commit.c:1501 builtin/commit.c:1505 builtin/commit.c:1668
 #: builtin/fast-export.c:1172 builtin/fast-export.c:1175
-#: builtin/fast-export.c:1178 builtin/rebase.c:1111 parse-options.h:337
+#: builtin/fast-export.c:1178 builtin/rebase.c:1139 parse-options.h:368
 msgid "mode"
 msgstr "模式"
 
-#: builtin/commit.c:1503 builtin/commit.c:1669
+#: builtin/commit.c:1502 builtin/commit.c:1668
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr "显示未跟踪的文件,“模式”的可选参数:all、normal、no。(默认:all)"
 
-#: builtin/commit.c:1507
+#: builtin/commit.c:1506
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
 msgstr ""
 "显示已忽略的文件,可选模式:traditional、matching、no。(默认:traditional)"
 
-#: builtin/commit.c:1509 parse-options.h:192
+#: builtin/commit.c:1508 parse-options.h:197
 msgid "when"
 msgstr "何时"
 
-#: builtin/commit.c:1510
+#: builtin/commit.c:1509
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
 msgstr ""
 "忽略子模组的更改,“何时”的可选参数:all、dirty、untracked。(默认:all)"
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1511
 msgid "list untracked files in columns"
 msgstr "以列的方式显示未跟踪的文件"
 
-#: builtin/commit.c:1513
+#: builtin/commit.c:1512
 msgid "do not detect renames"
 msgstr "不检测重命名"
 
-#: builtin/commit.c:1515
+#: builtin/commit.c:1514
 msgid "detect renames, optionally set similarity index"
 msgstr "检测重命名,可以设置索引相似度"
 
-#: builtin/commit.c:1538
+#: builtin/commit.c:1537
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr "不支持已忽略和未跟踪文件参数的组合"
 
-#: builtin/commit.c:1620
+#: builtin/commit.c:1619
 msgid "suppress summary after successful commit"
 msgstr "提交成功后不显示概述信息"
 
-#: builtin/commit.c:1621
+#: builtin/commit.c:1620
 msgid "show diff in commit message template"
 msgstr "在提交说明模板里显示差异"
 
-#: builtin/commit.c:1623
+#: builtin/commit.c:1622
 msgid "Commit message options"
 msgstr "提交说明选项"
 
-#: builtin/commit.c:1624 builtin/merge.c:288 builtin/tag.c:456
+#: builtin/commit.c:1623 builtin/merge.c:288 builtin/tag.c:457
 msgid "read message from file"
 msgstr "从文件中读取提交说明"
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1624
 msgid "author"
 msgstr "作者"
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1624
 msgid "override author for commit"
 msgstr "提交时覆盖作者"
 
-#: builtin/commit.c:1626 builtin/gc.c:551
+#: builtin/commit.c:1625 builtin/gc.c:551
 msgid "date"
 msgstr "日期"
 
-#: builtin/commit.c:1626
+#: builtin/commit.c:1625
 msgid "override date for commit"
 msgstr "提交时覆盖日期"
 
-#: builtin/commit.c:1628 builtin/commit.c:1629 builtin/commit.c:1635
-#: parse-options.h:329 ref-filter.h:89
+#: builtin/commit.c:1627 builtin/commit.c:1628 builtin/commit.c:1634
+#: parse-options.h:360 ref-filter.h:89
 msgid "commit"
 msgstr "提交"
 
-#: builtin/commit.c:1628
+#: builtin/commit.c:1627
 msgid "reuse and edit message from specified commit"
 msgstr "重用并编辑指定提交的提交说明"
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1628
 msgid "reuse message from specified commit"
 msgstr "重用指定提交的提交说明"
 
 #. TRANSLATORS: Leave "[(amend|reword):]" as-is,
 #. and only translate <commit>.
 #.
-#: builtin/commit.c:1634
+#: builtin/commit.c:1633
 msgid "[(amend|reword):]commit"
 msgstr "[(amend|reword):]提交"
 
-#: builtin/commit.c:1634
+#: builtin/commit.c:1633
 msgid ""
 "use autosquash formatted message to fixup or amend/reword specified commit"
 msgstr "使用自动挤压格式的提交说明对指定的提交进行修正、修补或改写说明"
 
-#: builtin/commit.c:1635
+#: builtin/commit.c:1634
 msgid "use autosquash formatted message to squash specified commit"
 msgstr "使用自动挤压格式的提交说明用以挤压至指定的提交"
 
-#: builtin/commit.c:1636
+#: builtin/commit.c:1635
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "现在将该提交的作者改为我(和 -C/-c/--amend 参数共用)"
 
-#: builtin/commit.c:1637 builtin/interpret-trailers.c:111
+#: builtin/commit.c:1636 builtin/interpret-trailers.c:111
 msgid "trailer"
 msgstr "尾注"
 
-#: builtin/commit.c:1637
+#: builtin/commit.c:1636
 msgid "add custom trailer(s)"
 msgstr "添加自定义尾注"
 
-#: builtin/commit.c:1638 builtin/log.c:1769 builtin/merge.c:306
+#: builtin/commit.c:1637 builtin/log.c:1788 builtin/merge.c:306
 #: builtin/pull.c:146 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr "添加 Signed-off-by 尾注"
 
-#: builtin/commit.c:1639
+#: builtin/commit.c:1638
 msgid "use specified template file"
 msgstr "使用指定的模板文件"
 
-#: builtin/commit.c:1640
+#: builtin/commit.c:1639
 msgid "force edit of commit"
 msgstr "强制编辑提交"
 
-#: builtin/commit.c:1642
+#: builtin/commit.c:1641
 msgid "include status in commit message template"
 msgstr "在提交说明模板里包含状态信息"
 
-#: builtin/commit.c:1647
+#: builtin/commit.c:1646
 msgid "Commit contents options"
 msgstr "提交内容选项"
 
-#: builtin/commit.c:1648
+#: builtin/commit.c:1647
 msgid "commit all changed files"
 msgstr "提交所有改动的文件"
 
-#: builtin/commit.c:1649
+#: builtin/commit.c:1648
 msgid "add specified files to index for commit"
 msgstr "添加指定的文件到索引区等待提交"
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1649
 msgid "interactively add files"
 msgstr "交互式添加文件"
 
-#: builtin/commit.c:1651
+#: builtin/commit.c:1650
 msgid "interactively add changes"
 msgstr "交互式添加变更"
 
-#: builtin/commit.c:1652
+#: builtin/commit.c:1651
 msgid "commit only specified files"
 msgstr "只提交指定的文件"
 
-#: builtin/commit.c:1653
+#: builtin/commit.c:1652
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr "绕过 pre-commit 和 commit-msg 钩子"
 
-#: builtin/commit.c:1654
+#: builtin/commit.c:1653
 msgid "show what would be committed"
 msgstr "显示将要提交的内容"
 
-#: builtin/commit.c:1667
+#: builtin/commit.c:1666
 msgid "amend previous commit"
 msgstr "修改先前的提交"
 
-#: builtin/commit.c:1668
+#: builtin/commit.c:1667
 msgid "bypass post-rewrite hook"
 msgstr "绕过 post-rewrite 钩子"
 
-#: builtin/commit.c:1675
+#: builtin/commit.c:1674
 msgid "ok to record an empty change"
 msgstr "允许一个空提交"
 
-#: builtin/commit.c:1677
+#: builtin/commit.c:1676
 msgid "ok to record a change with an empty message"
 msgstr "允许空的提交说明"
 
-#: builtin/commit.c:1753
+#: builtin/commit.c:1752
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "损坏的 MERGE_HEAD 文件(%s)"
 
-#: builtin/commit.c:1760
+#: builtin/commit.c:1759
 msgid "could not read MERGE_MODE"
 msgstr "不能读取 MERGE_MODE"
 
-#: builtin/commit.c:1781
+#: builtin/commit.c:1780
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "不能读取提交说明:%s"
 
-#: builtin/commit.c:1788
+#: builtin/commit.c:1787
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "终止提交因为提交说明为空。\n"
 
-#: builtin/commit.c:1793
+#: builtin/commit.c:1792
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "终止提交;您未更改来自模版的提交说明。\n"
 
-#: builtin/commit.c:1804
+#: builtin/commit.c:1803
 #, c-format
 msgid "Aborting commit due to empty commit message body.\n"
 msgstr "因提交说明的正文为空而终止提交。\n"
 
-#: builtin/commit.c:1840
+#: builtin/commit.c:1839
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -14186,6 +14544,10 @@ msgstr "获得颜色设置:配置 [stdout-is-tty]"
 msgid "Type"
 msgstr "类型"
 
+#: builtin/config.c:154 builtin/env--helper.c:42 builtin/hash-object.c:97
+msgid "type"
+msgstr "类型"
+
 #: builtin/config.c:154 builtin/env--helper.c:43
 msgid "value is given this type"
 msgstr "取值为该类型"
@@ -14393,10 +14755,6 @@ msgstr ""
 msgid "no such section: %s"
 msgstr "无此小节:%s"
 
-#: builtin/count-objects.c:90
-msgid "git count-objects [-v] [-H | --human-readable]"
-msgstr "git count-objects [-v] [-H | --human-readable]"
-
 #: builtin/count-objects.c:100
 msgid "print sizes in human readable format"
 msgstr "以用户可读的格式显示大小"
@@ -14563,7 +14921,7 @@ msgstr "只考虑匹配 <模式> 的标签"
 msgid "do not consider tags matching <pattern>"
 msgstr "不考虑匹配 <模式> 的标签"
 
-#: builtin/describe.c:570 builtin/name-rev.c:544
+#: builtin/describe.c:570 builtin/name-rev.c:595
 msgid "show abbreviated commit object as fallback"
 msgstr "显示简写的提交号作为后备"
 
@@ -14611,7 +14969,7 @@ msgstr "%s...%s:无合并基线"
 msgid "Not a git repository"
 msgstr "不是 git 仓库"
 
-#: builtin/diff.c:537 builtin/grep.c:698
+#: builtin/diff.c:537 builtin/grep.c:700
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "提供了无效对象 '%s'。"
@@ -14727,11 +15085,11 @@ msgstr "传递给 `diff`"
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool 要求工作区或者 --no-index"
 
-#: builtin/difftool.c:744
+#: builtin/difftool.c:745
 msgid "no <tool> given for --tool=<tool>"
 msgstr "没有为 --tool=<工具> 参数提供 <工具>"
 
-#: builtin/difftool.c:751
+#: builtin/difftool.c:752
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "没有为 --extcmd=<命令> 参数提供 <命令>"
 
@@ -14739,10 +15097,6 @@ msgstr "没有为 --extcmd=<命令> 参数提供 <命令>"
 msgid "git env--helper --type=[bool|ulong] <options> <env-var>"
 msgstr "git env--helper --type=[bool|ulong] <选项> <环境变量>"
 
-#: builtin/env--helper.c:42 builtin/hash-object.c:96
-msgid "type"
-msgstr "类型"
-
 #: builtin/env--helper.c:46
 msgid "default for git_env_*(...) to fall back on"
 msgstr "git_env_*(...) 的默认值"
@@ -14759,13 +15113,13 @@ msgstr "选项 `--default' 和 `--type=bool` 期望一个布尔值,不是 `%s`
 #: builtin/env--helper.c:82
 #, c-format
 msgid ""
-"option `--default' expects an unsigned long value with `--type=ulong`, not `"
-"%s`"
+"option `--default' expects an unsigned long value with `--type=ulong`, not "
+"`%s`"
 msgstr "选项 `--default' 和 `--type=ulong` 期望一个无符号长整型,不是 `%s`"
 
 #: builtin/fast-export.c:29
-msgid "git fast-export [rev-list-opts]"
-msgstr "git fast-export [rev-list-opts]"
+msgid "git fast-export [<rev-list-opts>]"
+msgstr "git fast-export [<rev-list 选项>]"
 
 #: builtin/fast-export.c:843
 msgid "Error: Cannot export nested tags unless --mark-tags is specified."
@@ -14819,7 +15173,7 @@ msgstr "使用 done 功能来终止流"
 msgid "skip output of blob data"
 msgstr "跳过数据对象的输出"
 
-#: builtin/fast-export.c:1196 builtin/log.c:1841
+#: builtin/fast-export.c:1196 builtin/log.c:1860
 msgid "refspec"
 msgstr "引用规格"
 
@@ -14851,36 +15205,36 @@ msgstr "显示数据对象/提交的原始对象 ID"
 msgid "label tags with mark ids"
 msgstr "对带有标记 ID 的标签做标记"
 
-#: builtin/fast-import.c:3090
+#: builtin/fast-import.c:3097
 #, c-format
 msgid "Missing from marks for submodule '%s'"
 msgstr "子模组 '%s' 缺少 from 标记"
 
-#: builtin/fast-import.c:3092
+#: builtin/fast-import.c:3099
 #, c-format
 msgid "Missing to marks for submodule '%s'"
 msgstr "子模组 '%s' 缺少 to 标记"
 
-#: builtin/fast-import.c:3227
+#: builtin/fast-import.c:3234
 #, c-format
 msgid "Expected 'mark' command, got %s"
 msgstr "预期 'mark' 命令,得到 %s"
 
-#: builtin/fast-import.c:3232
+#: builtin/fast-import.c:3239
 #, c-format
 msgid "Expected 'to' command, got %s"
 msgstr "预期 'to' 命令,得到 %s"
 
-#: builtin/fast-import.c:3324
+#: builtin/fast-import.c:3331
 msgid "Expected format name:filename for submodule rewrite option"
 msgstr "子模组重写选项的预期格式为 name:filename"
 
-#: builtin/fast-import.c:3379
+#: builtin/fast-import.c:3386
 #, c-format
 msgid "feature '%s' forbidden in input without --allow-unsafe-features"
 msgstr "不带 --allow-unsafe-features 的输入中禁止使用功能 '%s'"
 
-#: builtin/fetch-pack.c:242
+#: builtin/fetch-pack.c:246
 #, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr "Lockfile 已创建但未报告:%s"
@@ -14901,206 +15255,205 @@ msgstr "git fetch --multiple [<选项>] [(<仓库> | <组>)...]"
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<选项>]"
 
-#: builtin/fetch.c:123
+#: builtin/fetch.c:124
 msgid "fetch.parallel cannot be negative"
 msgstr "fetch.parallel 不能为负数"
 
-#: builtin/fetch.c:146 builtin/pull.c:189
+#: builtin/fetch.c:147 builtin/pull.c:189
 msgid "fetch from all remotes"
 msgstr "从所有的远程抓取"
 
-#: builtin/fetch.c:148 builtin/pull.c:249
+#: builtin/fetch.c:149 builtin/pull.c:249
 msgid "set upstream for git pull/fetch"
 msgstr "为 git pull/fetch 设置上游"
 
-#: builtin/fetch.c:150 builtin/pull.c:192
+#: builtin/fetch.c:151 builtin/pull.c:192
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "追加到 .git/FETCH_HEAD 而不是覆盖它"
 
-#: builtin/fetch.c:152
+#: builtin/fetch.c:153
 msgid "use atomic transaction to update references"
 msgstr "使用原子事务更新引用"
 
-#: builtin/fetch.c:154 builtin/pull.c:195
+#: builtin/fetch.c:155 builtin/pull.c:195
 msgid "path to upload pack on remote end"
 msgstr "上传包到远程的路径"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:156
 msgid "force overwrite of local reference"
 msgstr "强制覆盖本地引用"
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:158
 msgid "fetch from multiple remotes"
 msgstr "从多个远程抓取"
 
-#: builtin/fetch.c:159 builtin/pull.c:199
+#: builtin/fetch.c:160 builtin/pull.c:199
 msgid "fetch all tags and associated objects"
 msgstr "抓取所有的标签和关联对象"
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:162
 msgid "do not fetch all tags (--no-tags)"
 msgstr "不抓取任何标签(--no-tags)"
 
-#: builtin/fetch.c:163
+#: builtin/fetch.c:164
 msgid "number of submodules fetched in parallel"
 msgstr "子模组获取的并发数"
 
-#: builtin/fetch.c:165
+#: builtin/fetch.c:166
 msgid "modify the refspec to place all refs within refs/prefetch/"
 msgstr "修改引用规格以将所有引用放入 refs/prefetch/"
 
-#: builtin/fetch.c:167 builtin/pull.c:202
+#: builtin/fetch.c:168 builtin/pull.c:202
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "清除远程已经不存在的分支的跟踪分支"
 
-#: builtin/fetch.c:169
+#: builtin/fetch.c:170
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr "清除远程不存在的本地标签,并且替换变更标签"
 
 #  译者:可选值,不能翻译
-#: builtin/fetch.c:170 builtin/fetch.c:195 builtin/pull.c:123
+#: builtin/fetch.c:171 builtin/fetch.c:199 builtin/pull.c:123
 msgid "on-demand"
 msgstr "on-demand"
 
-#: builtin/fetch.c:171
+#: builtin/fetch.c:172
 msgid "control recursive fetching of submodules"
 msgstr "控制子模组的递归抓取"
 
-#: builtin/fetch.c:176
+#: builtin/fetch.c:177
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr "将获取到的引用写入 FETCH_HEAD 文件"
 
-#: builtin/fetch.c:177 builtin/pull.c:210
+#: builtin/fetch.c:178 builtin/pull.c:210
 msgid "keep downloaded pack"
 msgstr "保持下载包"
 
-#: builtin/fetch.c:179
+#: builtin/fetch.c:180
 msgid "allow updating of HEAD ref"
 msgstr "允许更新 HEAD 引用"
 
-#: builtin/fetch.c:182 builtin/fetch.c:188 builtin/pull.c:213
+#: builtin/fetch.c:183 builtin/fetch.c:189 builtin/pull.c:213
 #: builtin/pull.c:222
 msgid "deepen history of shallow clone"
 msgstr "深化浅克隆的历史"
 
-#: builtin/fetch.c:184 builtin/pull.c:216
+#: builtin/fetch.c:185 builtin/pull.c:216
 msgid "deepen history of shallow repository based on time"
 msgstr "基于时间来深化浅克隆的历史"
 
-#: builtin/fetch.c:190 builtin/pull.c:225
+#: builtin/fetch.c:191 builtin/pull.c:225
 msgid "convert to a complete repository"
 msgstr "转换为一个完整的仓库"
 
-#: builtin/fetch.c:193
+#: builtin/fetch.c:194
+msgid "re-fetch without negotiating common commits"
+msgstr "不协商共有提交重新获取"
+
+#: builtin/fetch.c:197
 msgid "prepend this to submodule path output"
 msgstr "在子模组路径输出的前面加上此目录"
 
-#: builtin/fetch.c:196
+#: builtin/fetch.c:200
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
 msgstr "递归获取子模组的缺省值(比配置文件优先级低)"
 
-#: builtin/fetch.c:200 builtin/pull.c:228
+#: builtin/fetch.c:204 builtin/pull.c:228
 msgid "accept refs that update .git/shallow"
 msgstr "接受更新 .git/shallow 的引用"
 
-#: builtin/fetch.c:201 builtin/pull.c:230
+#: builtin/fetch.c:205 builtin/pull.c:230
 msgid "refmap"
 msgstr "引用映射"
 
-#: builtin/fetch.c:202 builtin/pull.c:231
+#: builtin/fetch.c:206 builtin/pull.c:231
 msgid "specify fetch refmap"
 msgstr "指定获取操作的引用映射"
 
-#: builtin/fetch.c:209 builtin/pull.c:244
+#: builtin/fetch.c:213 builtin/pull.c:244
 msgid "report that we have only objects reachable from this object"
 msgstr "报告我们只拥有从该对象开始可达的对象"
 
-#: builtin/fetch.c:211
+#: builtin/fetch.c:215
 msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
 msgstr "不获取包文件;而是打印协商的祖先提交"
 
-#: builtin/fetch.c:214 builtin/fetch.c:216
+#: builtin/fetch.c:218 builtin/fetch.c:220
 msgid "run 'maintenance --auto' after fetching"
 msgstr "获取后执行 'maintenance --auto'"
 
-#: builtin/fetch.c:218 builtin/pull.c:247
+#: builtin/fetch.c:222 builtin/pull.c:247
 msgid "check for forced-updates on all updated branches"
 msgstr "在所有更新分支上检查强制更新"
 
-#: builtin/fetch.c:220
+#: builtin/fetch.c:224
 msgid "write the commit-graph after fetching"
 msgstr "抓取后写提交图"
 
-#: builtin/fetch.c:222
+#: builtin/fetch.c:226
 msgid "accept refspecs from stdin"
 msgstr "从标准输入获取引用规格"
 
-#: builtin/fetch.c:592
+#: builtin/fetch.c:618
 msgid "couldn't find remote ref HEAD"
 msgstr "无法发现远程 HEAD 引用"
 
-#: builtin/fetch.c:766
-#, c-format
-msgid "configuration fetch.output contains invalid value %s"
-msgstr "配置变量 fetch.output 包含无效值 %s"
-
-#: builtin/fetch.c:867
+#: builtin/fetch.c:893
 #, c-format
 msgid "object %s not found"
 msgstr "对象 %s 未发现"
 
-#: builtin/fetch.c:871
+#: builtin/fetch.c:897
 msgid "[up to date]"
 msgstr "[最新]"
 
-#: builtin/fetch.c:883 builtin/fetch.c:901 builtin/fetch.c:973
+#: builtin/fetch.c:909 builtin/fetch.c:927 builtin/fetch.c:999
 msgid "[rejected]"
 msgstr "[已拒绝]"
 
-#: builtin/fetch.c:885
+#: builtin/fetch.c:911
 msgid "can't fetch in current branch"
 msgstr "当前分支下不能执行获取操作"
 
-#: builtin/fetch.c:886
+#: builtin/fetch.c:912
 msgid "checked out in another worktree"
 msgstr "已在另一个工作树中检出"
 
-#: builtin/fetch.c:896
+#: builtin/fetch.c:922
 msgid "[tag update]"
 msgstr "[标签更新]"
 
-#: builtin/fetch.c:897 builtin/fetch.c:934 builtin/fetch.c:956
-#: builtin/fetch.c:968
+#: builtin/fetch.c:923 builtin/fetch.c:960 builtin/fetch.c:982
+#: builtin/fetch.c:994
 msgid "unable to update local ref"
 msgstr "不能更新本地引用"
 
-#: builtin/fetch.c:901
+#: builtin/fetch.c:927
 msgid "would clobber existing tag"
 msgstr "会破坏现有的标签"
 
-#: builtin/fetch.c:923
+#: builtin/fetch.c:949
 msgid "[new tag]"
 msgstr "[新标签]"
 
-#: builtin/fetch.c:926
+#: builtin/fetch.c:952
 msgid "[new branch]"
 msgstr "[新分支]"
 
-#: builtin/fetch.c:929
+#: builtin/fetch.c:955
 msgid "[new ref]"
 msgstr "[新引用]"
 
-#: builtin/fetch.c:968
+#: builtin/fetch.c:994
 msgid "forced update"
 msgstr "强制更新"
 
-#: builtin/fetch.c:973
+#: builtin/fetch.c:999
 msgid "non-fast-forward"
 msgstr "非快进"
 
-#: builtin/fetch.c:1076
+#: builtin/fetch.c:1102
 msgid ""
 "fetch normally indicates which branches had a forced update,\n"
 "but that check has been disabled; to re-enable, use '--show-forced-updates'\n"
@@ -15110,7 +15463,7 @@ msgstr ""
 "要重新启用,请使用 '--show-forced-updates' 选项或运行\n"
 "'git config fetch.showForcedUpdates true'"
 
-#: builtin/fetch.c:1080
+#: builtin/fetch.c:1106
 #, c-format
 msgid ""
 "it took %.2f seconds to check forced updates; you can use\n"
@@ -15121,22 +15474,22 @@ msgstr ""
 "花了 %.2f 秒来检查强制更新;您可以使用 '--no-show-forced-updates'\n"
 "或运行 'git config fetch.showForcedUpdates false' 以避免此项检查\n"
 
-#: builtin/fetch.c:1112
+#: builtin/fetch.c:1136
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s 未发送所有必需的对象\n"
 
-#: builtin/fetch.c:1141
+#: builtin/fetch.c:1156
 #, c-format
 msgid "rejected %s because shallow roots are not allowed to be updated"
 msgstr "拒绝 %s 因为浅克隆的根不允许被更新"
 
-#: builtin/fetch.c:1231 builtin/fetch.c:1379
+#: builtin/fetch.c:1259 builtin/fetch.c:1418
 #, c-format
 msgid "From %.*s\n"
 msgstr "来自 %.*s\n"
 
-#: builtin/fetch.c:1252
+#: builtin/fetch.c:1269
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -15146,69 +15499,69 @@ msgstr ""
 " 'git remote prune %s' 来删除旧的、有冲突的分支"
 
 #  译者:注意保持前导空格
-#: builtin/fetch.c:1349
+#: builtin/fetch.c:1377
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s 将成为悬空状态)"
 
 #  译者:注意保持前导空格
-#: builtin/fetch.c:1350
+#: builtin/fetch.c:1378
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s 已成为悬空状态)"
 
-#: builtin/fetch.c:1382
+#: builtin/fetch.c:1421
 msgid "[deleted]"
 msgstr "[已删除]"
 
-#: builtin/fetch.c:1383 builtin/remote.c:1128
+#: builtin/fetch.c:1422 builtin/remote.c:1153
 msgid "(none)"
 msgstr "(无)"
 
-#: builtin/fetch.c:1405
+#: builtin/fetch.c:1446
 #, c-format
 msgid "refusing to fetch into branch '%s' checked out at '%s'"
 msgstr "拒绝获取于 '%2$s' 检出的分支 '%1$s'"
 
-#: builtin/fetch.c:1425
+#: builtin/fetch.c:1466
 #, c-format
 msgid "option \"%s\" value \"%s\" is not valid for %s"
 msgstr "选项 \"%s\" 的值 \"%s\" 对于 %s 是无效的"
 
-#: builtin/fetch.c:1428
+#: builtin/fetch.c:1469
 #, c-format
 msgid "option \"%s\" is ignored for %s\n"
 msgstr "选项 \"%s\" 为 %s 所忽略\n"
 
-#: builtin/fetch.c:1455
+#: builtin/fetch.c:1496
 #, c-format
 msgid "the object %s does not exist"
 msgstr "对象 '%s' 不存在"
 
-#: builtin/fetch.c:1643
+#: builtin/fetch.c:1748
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr "检测到多分支,和 --set-upstream 不兼容"
 
-#: builtin/fetch.c:1655
+#: builtin/fetch.c:1760
 #, c-format
 msgid ""
 "could not set upstream of HEAD to '%s' from '%s' when it does not point to "
 "any branch."
 msgstr "无法在不指向任何分支时将 HEAD 的上游从 '%s' 设置为 '%s'。"
 
-#: builtin/fetch.c:1668
+#: builtin/fetch.c:1773
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr "没有为一个远程跟踪分支设置上游"
 
-#: builtin/fetch.c:1670
+#: builtin/fetch.c:1775
 msgid "not setting upstream for a remote tag"
 msgstr "没有为一个远程标签设置上游"
 
-#: builtin/fetch.c:1672
+#: builtin/fetch.c:1777
 msgid "unknown branch type"
 msgstr "未知的分支类型"
 
-#: builtin/fetch.c:1674
+#: builtin/fetch.c:1779
 msgid ""
 "no source branch found;\n"
 "you need to specify exactly one branch with the --set-upstream option"
@@ -15216,79 +15569,79 @@ msgstr ""
 "未发现源分支;\n"
 "您需要使用 --set-upstream 选项指定一个分支"
 
-#: builtin/fetch.c:1804 builtin/fetch.c:1867
+#: builtin/fetch.c:1904 builtin/fetch.c:1967
 #, c-format
 msgid "Fetching %s\n"
 msgstr "正在获取 %s\n"
 
-#: builtin/fetch.c:1814 builtin/fetch.c:1869
+#: builtin/fetch.c:1914 builtin/fetch.c:1969
 #, c-format
 msgid "could not fetch %s"
 msgstr "不能获取 %s"
 
-#: builtin/fetch.c:1826
+#: builtin/fetch.c:1926
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr "无法获取 '%s'(退出码:%d)\n"
 
-#: builtin/fetch.c:1930
+#: builtin/fetch.c:2030
 msgid ""
 "no remote repository specified; please specify either a URL or a\n"
 "remote name from which new revisions should be fetched"
 msgstr "未指定远程仓库;请指定一个用于获取新版本的 URL 或远程仓库名"
 
-#: builtin/fetch.c:1966
+#: builtin/fetch.c:2066
 msgid "you need to specify a tag name"
 msgstr "您需要指定一个标签名称"
 
-#: builtin/fetch.c:2032
-msgid "--negotiate-only needs one or more --negotiate-tip=*"
-msgstr "--negotiate-only 需要一个或多个 --negotiate-tip=*"
+#: builtin/fetch.c:2156
+msgid "--negotiate-only needs one or more --negotiation-tip=*"
+msgstr "--negotiate-only 需要一个或多个 --negotiation-tip=*"
 
-#: builtin/fetch.c:2036
+#: builtin/fetch.c:2160
 msgid "negative depth in --deepen is not supported"
 msgstr "--deepen 不支持负数深度"
 
-#: builtin/fetch.c:2045
+#: builtin/fetch.c:2169
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "对于一个完整的仓库,参数 --unshallow 没有意义"
 
-#: builtin/fetch.c:2062
+#: builtin/fetch.c:2186
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all 不能带一个仓库参数"
 
-#: builtin/fetch.c:2064
+#: builtin/fetch.c:2188
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all 带引用规格没有任何意义"
 
-#: builtin/fetch.c:2073
+#: builtin/fetch.c:2197
 #, c-format
 msgid "no such remote or remote group: %s"
 msgstr "没有这样的远程或远程组:%s"
 
-#: builtin/fetch.c:2081
+#: builtin/fetch.c:2205
 msgid "fetching a group and specifying refspecs does not make sense"
 msgstr "获取组并指定引用规格没有意义"
 
-#: builtin/fetch.c:2097
+#: builtin/fetch.c:2221
 msgid "must supply remote when using --negotiate-only"
 msgstr "在使用 --negotiate-only 时必须提供远程仓库"
 
-#: builtin/fetch.c:2102
+#: builtin/fetch.c:2226
 msgid "protocol does not support --negotiate-only, exiting"
 msgstr "协议不支持 --negotiate-only,退出"
 
-#: builtin/fetch.c:2121
+#: builtin/fetch.c:2246
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
 msgstr "只可以将 --filter 用于在 extensions.partialclone 中配置的远程仓库"
 
-#: builtin/fetch.c:2125
+#: builtin/fetch.c:2250
 msgid "--atomic can only be used when fetching from one remote"
 msgstr "--atomic 仅在从一个远程仓库获取的时候可用"
 
-#: builtin/fetch.c:2129
+#: builtin/fetch.c:2254
 msgid "--stdin can only be used when fetching from one remote"
 msgstr "--stdin 仅在从一个远程仓库获取的时候可用"
 
@@ -15357,7 +15710,7 @@ msgstr "引用占位符适用于 Tcl"
 msgid "show only <n> matched refs"
 msgstr "只显示 <n> 个匹配的引用"
 
-#: builtin/for-each-ref.c:42 builtin/tag.c:481
+#: builtin/for-each-ref.c:42 builtin/tag.c:482
 msgid "respect format colors"
 msgstr "遵照格式中的颜色输出"
 
@@ -15551,7 +15904,7 @@ msgstr "正在检查对象目录"
 msgid "Checking %s link"
 msgstr "正在检查 %s 链接"
 
-#: builtin/fsck.c:710 builtin/index-pack.c:859
+#: builtin/fsck.c:710 builtin/index-pack.c:862
 #, c-format
 msgid "invalid %s"
 msgstr "无效的 %s"
@@ -15620,7 +15973,7 @@ msgstr "也考虑包和备用对象"
 msgid "check only connectivity"
 msgstr "仅检查连通性"
 
-#: builtin/fsck.c:798 builtin/mktag.c:76
+#: builtin/fsck.c:798 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr "启用更严格的检查"
 
@@ -15650,6 +16003,118 @@ msgstr "%s:对象缺失"
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "无效的参数:期望 sha1,得到 '%s'"
 
+#: builtin/fsmonitor--daemon.c:13
+msgid "git fsmonitor--daemon start [<options>]"
+msgstr "git fsmonitor--daemon start [<选项>]"
+
+#: builtin/fsmonitor--daemon.c:14
+msgid "git fsmonitor--daemon run [<options>]"
+msgstr "git fsmonitor--daemon run [<选项>]"
+
+#: builtin/fsmonitor--daemon.c:15
+msgid "git fsmonitor--daemon stop"
+msgstr "git fsmonitor--daemon stop"
+
+#: builtin/fsmonitor--daemon.c:16
+msgid "git fsmonitor--daemon status"
+msgstr "git fsmonitor--daemon status"
+
+#: builtin/fsmonitor--daemon.c:38 builtin/fsmonitor--daemon.c:47
+#, c-format
+msgid "value of '%s' out of range: %d"
+msgstr "'%s' 的值超出范围:%d"
+
+#: builtin/fsmonitor--daemon.c:57
+#, c-format
+msgid "value of '%s' not bool or int: %d"
+msgstr "'%s' 的值不是 bool 或 int:%d"
+
+#: builtin/fsmonitor--daemon.c:99
+#, c-format
+msgid "fsmonitor-daemon is watching '%s'\n"
+msgstr "fsmonitor-daemon 正在监视 '%s'\n"
+
+#: builtin/fsmonitor--daemon.c:104
+#, c-format
+msgid "fsmonitor-daemon is not watching '%s'\n"
+msgstr "fsmonitor-daemon 不在监视 '%s'\n"
+
+#: builtin/fsmonitor--daemon.c:170
+#, c-format
+msgid "could not create fsmonitor cookie '%s'"
+msgstr "无法创建 fsmonitor cookie '%s'"
+
+#: builtin/fsmonitor--daemon.c:753
+#, c-format
+msgid "fsmonitor: cookie_result '%d' != SEEN"
+msgstr "fsmonitor: cookie_result '%d' != SEEN"
+
+#: builtin/fsmonitor--daemon.c:1187
+#, c-format
+msgid "could not start IPC thread pool on '%s'"
+msgstr "无法在 '%s' 启动 IPC 线程池"
+
+#: builtin/fsmonitor--daemon.c:1199
+msgid "could not start fsmonitor listener thread"
+msgstr "无法启动 fsmonitor 监听线程"
+
+#: builtin/fsmonitor--daemon.c:1297
+msgid "could not initialize listener thread"
+msgstr "无法初始化监听线程"
+
+#: builtin/fsmonitor--daemon.c:1328 builtin/fsmonitor--daemon.c:1383
+#, c-format
+msgid "fsmonitor--daemon is already running '%s'"
+msgstr "fsmonitor--daemon 已经在运行 '%s'"
+
+#: builtin/fsmonitor--daemon.c:1332
+#, c-format
+msgid "running fsmonitor-daemon in '%s'\n"
+msgstr "在 '%s' 中运行 fsmonitor-daemon\n"
+
+#: builtin/fsmonitor--daemon.c:1387
+#, c-format
+msgid "starting fsmonitor-daemon in '%s'\n"
+msgstr "在 '%s' 中启动 fsmonitor-daemon\n"
+
+#: builtin/fsmonitor--daemon.c:1413
+msgid "daemon failed to start"
+msgstr "守护进程无法启动"
+
+#: builtin/fsmonitor--daemon.c:1416
+msgid "daemon not online yet"
+msgstr "守护进程尚未在线"
+
+#: builtin/fsmonitor--daemon.c:1419
+msgid "daemon terminated"
+msgstr "守护进程被终结"
+
+#: builtin/fsmonitor--daemon.c:1429
+msgid "detach from console"
+msgstr "从控制台分离"
+
+#: builtin/fsmonitor--daemon.c:1432
+msgid "use <n> ipc worker threads"
+msgstr "使用 <n> 个 IPC 工作线程"
+
+#: builtin/fsmonitor--daemon.c:1435
+msgid "max seconds to wait for background daemon startup"
+msgstr "等待守护进程启动的最大秒数"
+
+#: builtin/fsmonitor--daemon.c:1449
+#, c-format
+msgid "invalid 'ipc-threads' value (%d)"
+msgstr "无效的 'ipc-threads' 值(%d)"
+
+#: builtin/fsmonitor--daemon.c:1464
+#, c-format
+msgid "Unhandled subcommand '%s'"
+msgstr "未处理的子命令 '%s'"
+
+#: builtin/fsmonitor--daemon.c:1477
+msgid "fsmonitor--daemon not supported on this platform"
+msgstr "fsmonitor--daemon 不支持本平台"
+
 #: builtin/gc.c:39
 msgid "git gc [<options>]"
 msgstr "git gc [<选项>]"
@@ -15891,8 +16356,8 @@ msgstr "无法启动 systemctl"
 msgid "failed to run systemctl"
 msgstr "无法运行 systemctl"
 
-#: builtin/gc.c:2210 builtin/gc.c:2215 builtin/worktree.c:62
-#: builtin/worktree.c:944
+#: builtin/gc.c:2210 builtin/gc.c:2215 builtin/worktree.c:63
+#: builtin/worktree.c:1024
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "无法删除 '%s'"
@@ -15940,16 +16405,16 @@ msgstr "git maintenance <子命令> [<选项>]"
 msgid "invalid subcommand: %s"
 msgstr "无效子命令:%s"
 
-#: builtin/grep.c:30
+#: builtin/grep.c:32
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<选项>] [-e] <模式> [<版本>...] [[--] <路径>...]"
 
-#: builtin/grep.c:239
+#: builtin/grep.c:241
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep:无法创建线程:%s"
 
-#: builtin/grep.c:293
+#: builtin/grep.c:295
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "为 %2$s 设定的线程数 (%1$d) 无效"
@@ -15958,258 +16423,250 @@ msgstr "为 %2$s 设定的线程数 (%1$d) 无效"
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:301 builtin/index-pack.c:1582 builtin/index-pack.c:1785
-#: builtin/pack-objects.c:3142
+#: builtin/grep.c:303 builtin/index-pack.c:1587 builtin/index-pack.c:1791
+#: builtin/pack-objects.c:3150
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "没有线程支持,忽略 %s"
 
-#: builtin/grep.c:488 builtin/grep.c:617 builtin/grep.c:657
+#: builtin/grep.c:490 builtin/grep.c:619 builtin/grep.c:659
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "无法读取树(%s)"
 
-#: builtin/grep.c:672
+#: builtin/grep.c:674
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "无法抓取来自于 %s 类型的对象"
 
-#: builtin/grep.c:752
+#: builtin/grep.c:754
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "开关 `%c' 期望一个数字值"
 
-#: builtin/grep.c:851
+#: builtin/grep.c:852
 msgid "search in index instead of in the work tree"
 msgstr "在索引区搜索而不是在工作区"
 
-#: builtin/grep.c:853
+#: builtin/grep.c:854
 msgid "find in contents not managed by git"
 msgstr "在未被 git 管理的内容中查找"
 
-#: builtin/grep.c:855
+#: builtin/grep.c:856
 msgid "search in both tracked and untracked files"
 msgstr "在跟踪和未跟踪的文件中搜索"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:858
 msgid "ignore files specified via '.gitignore'"
 msgstr "忽略 '.gitignore' 包含的文件"
 
-#: builtin/grep.c:859
+#: builtin/grep.c:860
 msgid "recursively search in each submodule"
 msgstr "在每一个子模组中递归搜索"
 
-#: builtin/grep.c:862
+#: builtin/grep.c:863
 msgid "show non-matching lines"
 msgstr "显示未匹配的行"
 
-#: builtin/grep.c:864
+#: builtin/grep.c:865
 msgid "case insensitive matching"
 msgstr "不区分大小写匹配"
 
-#: builtin/grep.c:866
+#: builtin/grep.c:867
 msgid "match patterns only at word boundaries"
 msgstr "只在单词边界匹配模式"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:869
 msgid "process binary files as text"
 msgstr "把二进制文件当做文本处理"
 
-#: builtin/grep.c:870
+#: builtin/grep.c:871
 msgid "don't match patterns in binary files"
 msgstr "不在二进制文件中匹配模式"
 
-#: builtin/grep.c:873
+#: builtin/grep.c:874
 msgid "process binary files with textconv filters"
 msgstr "用 textconv 过滤器处理二进制文件"
 
-#: builtin/grep.c:875
+#: builtin/grep.c:876
 msgid "search in subdirectories (default)"
 msgstr "在子目录中寻找(默认)"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:878
 msgid "descend at most <depth> levels"
 msgstr "最多以指定的深度向下寻找"
 
-#: builtin/grep.c:881
+#: builtin/grep.c:882
 msgid "use extended POSIX regular expressions"
 msgstr "使用扩展的 POSIX 正则表达式"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:885
 msgid "use basic POSIX regular expressions (default)"
 msgstr "使用基本的 POSIX 正则表达式(默认)"
 
-#: builtin/grep.c:887
+#: builtin/grep.c:888
 msgid "interpret patterns as fixed strings"
 msgstr "把模式解析为固定的字符串"
 
-#: builtin/grep.c:890
+#: builtin/grep.c:891
 msgid "use Perl-compatible regular expressions"
 msgstr "使用 Perl 兼容的正则表达式"
 
-#: builtin/grep.c:893
+#: builtin/grep.c:894
 msgid "show line numbers"
 msgstr "显示行号"
 
-#: builtin/grep.c:894
+#: builtin/grep.c:895
 msgid "show column number of first match"
 msgstr "显示第一个匹配的列号"
 
-#: builtin/grep.c:895
+#: builtin/grep.c:896
 msgid "don't show filenames"
 msgstr "不显示文件名"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:897
 msgid "show filenames"
 msgstr "显示文件名"
 
-#: builtin/grep.c:898
+#: builtin/grep.c:899
 msgid "show filenames relative to top directory"
 msgstr "显示相对于顶级目录的文件名"
 
-#: builtin/grep.c:900
+#: builtin/grep.c:901
 msgid "show only filenames instead of matching lines"
 msgstr "只显示文件名而不显示匹配的行"
 
-#: builtin/grep.c:902
+#: builtin/grep.c:903
 msgid "synonym for --files-with-matches"
 msgstr "和 --files-with-matches 同义"
 
-#: builtin/grep.c:905
+#: builtin/grep.c:906
 msgid "show only the names of files without match"
 msgstr "只显示未匹配的文件名"
 
-#: builtin/grep.c:907
+#: builtin/grep.c:908
 msgid "print NUL after filenames"
 msgstr "在文件名后输出 NUL 字符"
 
-#: builtin/grep.c:910
+#: builtin/grep.c:911
 msgid "show only matching parts of a line"
 msgstr "只显示行中的匹配的部分"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:913
 msgid "show the number of matches instead of matching lines"
 msgstr "显示总匹配行数,而不显示匹配的行"
 
-#: builtin/grep.c:913
+#: builtin/grep.c:914
 msgid "highlight matches"
 msgstr "高亮显示匹配项"
 
-#: builtin/grep.c:915
+#: builtin/grep.c:916
 msgid "print empty line between matches from different files"
 msgstr "在不同文件的匹配项之间打印空行"
 
-#: builtin/grep.c:917
+#: builtin/grep.c:918
 msgid "show filename only once above matches from same file"
 msgstr "只在同一文件的匹配项的上面显示一次文件名"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:921
 msgid "show <n> context lines before and after matches"
 msgstr "显示匹配项前后的 <n> 行上下文"
 
-#: builtin/grep.c:923
+#: builtin/grep.c:924
 msgid "show <n> context lines before matches"
 msgstr "显示匹配项前 <n> 行上下文"
 
-#: builtin/grep.c:925
+#: builtin/grep.c:926
 msgid "show <n> context lines after matches"
 msgstr "显示匹配项后 <n> 行上下文"
 
-#: builtin/grep.c:927
+#: builtin/grep.c:928
 msgid "use <n> worker threads"
 msgstr "使用 <n> 个工作线程"
 
-#: builtin/grep.c:928
+#: builtin/grep.c:929
 msgid "shortcut for -C NUM"
 msgstr "快捷键 -C 数字"
 
-#: builtin/grep.c:931
+#: builtin/grep.c:932
 msgid "show a line with the function name before matches"
 msgstr "在匹配的前面显示一行函数名"
 
-#: builtin/grep.c:933
+#: builtin/grep.c:934
 msgid "show the surrounding function"
 msgstr "显示所在函数的前后内容"
 
-#: builtin/grep.c:936
+#: builtin/grep.c:937
 msgid "read patterns from file"
 msgstr "从文件读取模式"
 
-#: builtin/grep.c:938
+#: builtin/grep.c:939
 msgid "match <pattern>"
 msgstr "匹配 <模式>"
 
-#: builtin/grep.c:940
+#: builtin/grep.c:941
 msgid "combine patterns specified with -e"
 msgstr "组合用 -e 参数设定的模式"
 
-#: builtin/grep.c:952
+#: builtin/grep.c:953
 msgid "indicate hit with exit status without output"
 msgstr "不输出,而用退出码标识命中状态"
 
-#: builtin/grep.c:954
+#: builtin/grep.c:955
 msgid "show only matches from files that match all patterns"
 msgstr "只显示匹配所有模式的文件中的匹配"
 
-#: builtin/grep.c:957
+#: builtin/grep.c:958
 msgid "pager"
 msgstr "分页"
 
-#: builtin/grep.c:957
+#: builtin/grep.c:958
 msgid "show matching files in the pager"
 msgstr "分页显示匹配的文件"
 
-#: builtin/grep.c:961
+#: builtin/grep.c:962
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "允许调用 grep(1)(本次构建忽略)"
 
-#: builtin/grep.c:1027
+#: builtin/grep.c:1028
 msgid "no pattern given"
 msgstr "未提供匹配模式"
 
-#: builtin/grep.c:1063
+#: builtin/grep.c:1064
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr "--no-index 或 --untracked 不能和版本同时使用"
 
-#: builtin/grep.c:1071
+#: builtin/grep.c:1072
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "不能解析版本:%s"
 
-#: builtin/grep.c:1101
+#: builtin/grep.c:1102
 msgid "--untracked not supported with --recurse-submodules"
 msgstr "--untracked 不支持和 --recurse-submodules 共用"
 
-#: builtin/grep.c:1105
+#: builtin/grep.c:1106
 msgid "invalid option combination, ignoring --threads"
 msgstr "无效的选项组合,忽略 --threads"
 
-#: builtin/grep.c:1108 builtin/pack-objects.c:4059
+#: builtin/grep.c:1109 builtin/pack-objects.c:4084
 msgid "no threads support, ignoring --threads"
 msgstr "没有线程支持,忽略 --threads"
 
-#: builtin/grep.c:1111 builtin/index-pack.c:1579 builtin/pack-objects.c:3139
+#: builtin/grep.c:1112 builtin/index-pack.c:1584 builtin/pack-objects.c:3147
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "指定的线程数无效(%d)"
 
-#: builtin/grep.c:1145
+#: builtin/grep.c:1146
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager 仅用于工作区"
 
-#: builtin/grep.c:1171
-msgid "--cached or --untracked cannot be used with --no-index"
-msgstr "--cached 或 --untracked 不能与 --no-index 同时使用"
-
-#: builtin/grep.c:1174
-msgid "--untracked cannot be used with --cached"
-msgstr "--untracked 不能与 --cached 同时使用"
-
-#: builtin/grep.c:1180
+#: builtin/grep.c:1179
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr "--[no-]exclude-standard 不能用于已跟踪内容"
 
-#: builtin/grep.c:1188
+#: builtin/grep.c:1187
 msgid "both --cached and trees are given"
 msgstr "同时给出了 --cached 和树对象"
 
@@ -16221,107 +16678,99 @@ msgstr ""
 "git hash-object [-t <类型>] [-w] [--path=<文件> | --no-filters] [--stdin] "
 "[--] <文件>..."
 
-#: builtin/hash-object.c:84
-msgid "git hash-object  --stdin-paths"
-msgstr "git hash-object  --stdin-paths"
-
-#: builtin/hash-object.c:96
+#: builtin/hash-object.c:97
 msgid "object type"
 msgstr "对象类型"
 
-#: builtin/hash-object.c:97
+#: builtin/hash-object.c:98
 msgid "write the object into the object database"
 msgstr "将对象写入对象数据库"
 
-#: builtin/hash-object.c:99
+#: builtin/hash-object.c:100
 msgid "read the object from stdin"
 msgstr "从标准输入读取对象"
 
-#: builtin/hash-object.c:101
+#: builtin/hash-object.c:102
 msgid "store file as is without filters"
 msgstr "原样存储文件不使用过滤器"
 
-#: builtin/hash-object.c:102
+#: builtin/hash-object.c:103
 msgid ""
 "just hash any random garbage to create corrupt objects for debugging Git"
 msgstr "允许对任意随机垃圾数据做散列来创建损坏的对象以便调试 Git"
 
-#: builtin/hash-object.c:103
+#: builtin/hash-object.c:104
 msgid "process file as it were from this path"
 msgstr "处理文件并假设其来自于此路径"
 
-#: builtin/help.c:55
+#: builtin/help.c:57
 msgid "print all available commands"
 msgstr "打印所有可用的命令"
 
-#: builtin/help.c:57
+#: builtin/help.c:60
+msgid "show external commands in --all"
+msgstr "在 --all 中显示外部命令"
+
+#: builtin/help.c:61
+msgid "show aliases in --all"
+msgstr "在 --all 中显示别名"
+
+#: builtin/help.c:62
 msgid "exclude guides"
 msgstr "排除向导"
 
-#: builtin/help.c:58
+#: builtin/help.c:63
 msgid "show man page"
 msgstr "显示 man 手册"
 
-#: builtin/help.c:59
+#: builtin/help.c:64
 msgid "show manual in web browser"
 msgstr "在 web 浏览器中显示手册"
 
-#: builtin/help.c:61
+#: builtin/help.c:66
 msgid "show info page"
 msgstr "显示 info 手册"
 
-#: builtin/help.c:63
+#: builtin/help.c:68
 msgid "print command description"
 msgstr "打印命令描述"
 
-#: builtin/help.c:65
+#: builtin/help.c:70
 msgid "print list of useful guides"
 msgstr "显示有用的指南列表"
 
-#: builtin/help.c:67
+#: builtin/help.c:72
 msgid "print all configuration variable names"
 msgstr "打印所有配置变量名称"
 
-#: builtin/help.c:78
-msgid ""
-"git help [-a|--all] [--[no-]verbose]]\n"
-"         [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
-msgstr ""
-"git help [-a|--all] [--[no-]verbose]]\n"
-"         [[-i|--info] [-m|--man] [-w|--web]] [<命令>]"
-
-#: builtin/help.c:80
-msgid "git help [-g|--guides]"
-msgstr "git help [-g|--guides]"
+#: builtin/help.c:84
+msgid "git help [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
+msgstr "git help [[-i|--info] [-m|--man] [-w|--web]] [<命令>]"
 
-#: builtin/help.c:81
-msgid "git help [-c|--config]"
-msgstr "git help [-c|--config]"
-
-#: builtin/help.c:196
+#: builtin/help.c:201
 #, c-format
 msgid "unrecognized help format '%s'"
 msgstr "未能识别的帮助格式 '%s'"
 
-#: builtin/help.c:222
+#: builtin/help.c:227
 msgid "Failed to start emacsclient."
 msgstr "无法启动 emacsclient。"
 
-#: builtin/help.c:235
+#: builtin/help.c:240
 msgid "Failed to parse emacsclient version."
 msgstr "无法解析 emacsclient 版本。"
 
-#: builtin/help.c:243
+#: builtin/help.c:248
 #, c-format
 msgid "emacsclient version '%d' too old (< 22)."
 msgstr "emacsclient 版本 '%d' 太老(< 22)。"
 
-#: builtin/help.c:261 builtin/help.c:283 builtin/help.c:293 builtin/help.c:301
+#: builtin/help.c:266 builtin/help.c:288 builtin/help.c:298 builtin/help.c:306
 #, c-format
 msgid "failed to exec '%s'"
 msgstr "无法执行 '%s'"
 
-#: builtin/help.c:339
+#: builtin/help.c:344
 #, c-format
 msgid ""
 "'%s': path for unsupported man viewer.\n"
@@ -16330,7 +16779,7 @@ msgstr ""
 "'%s':不支持的 man 手册查看器的路径。\n"
 "请使用 'man.<工具>.cmd'。"
 
-#: builtin/help.c:351
+#: builtin/help.c:356
 #, c-format
 msgid ""
 "'%s': cmd for supported man viewer.\n"
@@ -16339,42 +16788,56 @@ msgstr ""
 "'%s': 支持的 man 手册查看器命令。\n"
 "请使用 'man.<工具>.path'。"
 
-#: builtin/help.c:466
+#: builtin/help.c:471
 #, c-format
 msgid "'%s': unknown man viewer."
 msgstr "'%s':未知的 man 查看器。"
 
-#: builtin/help.c:482
+#: builtin/help.c:487
 msgid "no man viewer handled the request"
 msgstr "没有 man 查看器处理此请求"
 
-#: builtin/help.c:489
+#: builtin/help.c:494
 msgid "no info viewer handled the request"
 msgstr "没有 info 查看器处理此请求"
 
-#: builtin/help.c:550 builtin/help.c:561 git.c:348
+#: builtin/help.c:555 builtin/help.c:566 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "'%s' 是 '%s' 的别名"
 
-#: builtin/help.c:564 git.c:380
+#: builtin/help.c:569 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr "坏的 alias.%s 字符串:%s"
 
-#: builtin/help.c:580
-msgid "this option doesn't take any other arguments"
-msgstr "这个选项不带其他参数"
+#: builtin/help.c:611
+#, c-format
+msgid "the '%s' option doesn't take any non-option arguments"
+msgstr "'%s' 选项不带任何非选项参数"
+
+#: builtin/help.c:631
+msgid ""
+"the '--no-[external-commands|aliases]' options can only be used with '--all'"
+msgstr "'--no-[external-commands|aliases]' 选项只能和 '--all' 一起使用"
 
-#: builtin/help.c:601 builtin/help.c:628
+#: builtin/help.c:643 builtin/help.c:671
 #, c-format
 msgid "usage: %s%s"
 msgstr "用法:%s%s"
 
-#: builtin/help.c:623
+#: builtin/help.c:666
 msgid "'git help config' for more information"
 msgstr "'git help config' 获取更多信息"
 
+#: builtin/hook.c:10
+msgid "git hook run [--ignore-missing] <hook-name> [-- <hook-args>]"
+msgstr "git hook run [--ignore-missing] <钩子名称> [-- <钩子参数>]"
+
+#: builtin/hook.c:30
+msgid "silently ignore missing requested <hook-name>"
+msgstr "静默地忽略缺失的 <钩子名称>"
+
 #: builtin/index-pack.c:221
 #, c-format
 msgid "object type mismatch at %s"
@@ -16409,244 +16872,245 @@ msgstr "输入上的读错误"
 msgid "used more bytes than were available"
 msgstr "用掉了超过可用的字节"
 
-#: builtin/index-pack.c:324 builtin/pack-objects.c:756
+#: builtin/index-pack.c:324 builtin/pack-objects.c:754
 msgid "pack too large for current definition of off_t"
 msgstr "包太大超过了当前 off_t 的定义"
 
-#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
-msgid "pack exceeds maximum allowed size"
-msgstr "包超过了最大允许值"
+#: builtin/index-pack.c:329
+#, c-format
+msgid "pack exceeds maximum allowed size (%s)"
+msgstr "包超过了最大允许大小(%s)"
 
-#: builtin/index-pack.c:358
+#: builtin/index-pack.c:362
 msgid "pack signature mismatch"
 msgstr "包签名不匹配"
 
-#: builtin/index-pack.c:360
+#: builtin/index-pack.c:364
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "不支持包版本 %<PRIu32>"
 
-#: builtin/index-pack.c:376
+#: builtin/index-pack.c:380
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "包中有错误的对象位于偏移量 %<PRIuMAX>:%s"
 
-#: builtin/index-pack.c:482
+#: builtin/index-pack.c:485
 #, c-format
 msgid "inflate returned %d"
 msgstr "解压缩返回 %d"
 
-#: builtin/index-pack.c:531
+#: builtin/index-pack.c:534
 msgid "offset value overflow for delta base object"
 msgstr "偏移值覆盖了 delta 基准对象"
 
-#: builtin/index-pack.c:539
+#: builtin/index-pack.c:542
 msgid "delta base offset is out of bound"
 msgstr "delta 基准偏移越界"
 
-#: builtin/index-pack.c:547
+#: builtin/index-pack.c:550
 #, c-format
 msgid "unknown object type %d"
 msgstr "未知对象类型 %d"
 
-#: builtin/index-pack.c:578
+#: builtin/index-pack.c:581
 msgid "cannot pread pack file"
 msgstr "无法读取包文件"
 
-#: builtin/index-pack.c:580
+#: builtin/index-pack.c:583
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
 msgstr[0] "包文件过早结束,缺少 %<PRIuMAX> 字节"
 msgstr[1] "包文件过早结束,缺少 %<PRIuMAX> 字节"
 
-#: builtin/index-pack.c:606
+#: builtin/index-pack.c:609
 msgid "serious inflate inconsistency"
 msgstr "解压缩严重的不一致"
 
-#: builtin/index-pack.c:751 builtin/index-pack.c:757 builtin/index-pack.c:781
-#: builtin/index-pack.c:820 builtin/index-pack.c:829
+#: builtin/index-pack.c:754 builtin/index-pack.c:760 builtin/index-pack.c:784
+#: builtin/index-pack.c:823 builtin/index-pack.c:832
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "发现 %s 出现 SHA1 冲突!"
 
-#: builtin/index-pack.c:754 builtin/pack-objects.c:292
-#: builtin/pack-objects.c:352 builtin/pack-objects.c:458
+#: builtin/index-pack.c:757 builtin/pack-objects.c:290
+#: builtin/pack-objects.c:350 builtin/pack-objects.c:456
 #, c-format
 msgid "unable to read %s"
 msgstr "不能读 %s"
 
-#: builtin/index-pack.c:818
+#: builtin/index-pack.c:821
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "不能读取现存对象信息 %s"
 
-#: builtin/index-pack.c:826
+#: builtin/index-pack.c:829
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "不能读取现存对象 %s"
 
-#: builtin/index-pack.c:840
+#: builtin/index-pack.c:843
 #, c-format
 msgid "invalid blob object %s"
 msgstr "无效的数据对象 %s"
 
-#: builtin/index-pack.c:843 builtin/index-pack.c:862
+#: builtin/index-pack.c:846 builtin/index-pack.c:865
 msgid "fsck error in packed object"
 msgstr "对打包对象 fsck 检查出错"
 
-#: builtin/index-pack.c:864
+#: builtin/index-pack.c:867
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr "%s 的所有子对象并非都可达"
 
-#: builtin/index-pack.c:925 builtin/index-pack.c:972
+#: builtin/index-pack.c:928 builtin/index-pack.c:975
 msgid "failed to apply delta"
 msgstr "无法应用 delta"
 
-#: builtin/index-pack.c:1156
+#: builtin/index-pack.c:1161
 msgid "Receiving objects"
 msgstr "接收对象中"
 
-#: builtin/index-pack.c:1156
+#: builtin/index-pack.c:1161
 msgid "Indexing objects"
 msgstr "索引对象中"
 
-#: builtin/index-pack.c:1190
+#: builtin/index-pack.c:1195
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "包冲突(SHA1 不匹配)"
 
-#: builtin/index-pack.c:1195
+#: builtin/index-pack.c:1200
 msgid "cannot fstat packfile"
 msgstr "不能对包文件调用 fstat"
 
-#: builtin/index-pack.c:1198
+#: builtin/index-pack.c:1203
 msgid "pack has junk at the end"
 msgstr "包的结尾有垃圾数据"
 
-#: builtin/index-pack.c:1210
+#: builtin/index-pack.c:1215
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr "parse_pack_objects() 中遇到不可理喻的问题"
 
-#: builtin/index-pack.c:1233
+#: builtin/index-pack.c:1238
 msgid "Resolving deltas"
 msgstr "处理 delta 中"
 
-#: builtin/index-pack.c:1244 builtin/pack-objects.c:2905
+#: builtin/index-pack.c:1249 builtin/pack-objects.c:2913
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "不能创建线程:%s"
 
-#: builtin/index-pack.c:1277
+#: builtin/index-pack.c:1282
 msgid "confusion beyond insanity"
 msgstr "不可理喻"
 
-#: builtin/index-pack.c:1283
+#: builtin/index-pack.c:1288
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
 msgstr[0] "完成 %d 个本地对象"
 msgstr[1] "完成 %d 个本地对象"
 
-#: builtin/index-pack.c:1295
+#: builtin/index-pack.c:1300
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr "对 %s 的尾部校验出现意外(磁盘损坏?)"
 
-#: builtin/index-pack.c:1299
+#: builtin/index-pack.c:1304
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] "包有 %d 个未解决的 delta"
 msgstr[1] "包有 %d 个未解决的 delta"
 
-#: builtin/index-pack.c:1323
+#: builtin/index-pack.c:1328
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "不能压缩附加对象(%d)"
 
-#: builtin/index-pack.c:1419
+#: builtin/index-pack.c:1423
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "本地对象 %s 已损坏"
 
-#: builtin/index-pack.c:1440
+#: builtin/index-pack.c:1445
 #, c-format
 msgid "packfile name '%s' does not end with '.%s'"
 msgstr "包文件名 '%s' 没有以 '.%s' 结尾"
 
-#: builtin/index-pack.c:1464
+#: builtin/index-pack.c:1469
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "无法写入 %s 文件 '%s'"
 
-#: builtin/index-pack.c:1472
+#: builtin/index-pack.c:1477
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr "无法关闭已写入的 %s 文件 '%s'"
 
-#: builtin/index-pack.c:1489
+#: builtin/index-pack.c:1494
 #, c-format
 msgid "unable to rename temporary '*.%s' file to '%s'"
 msgstr "不能重命名临时文件 '*.%s' 为 '%s'"
 
-#: builtin/index-pack.c:1514
+#: builtin/index-pack.c:1519
 msgid "error while closing pack file"
 msgstr "关闭包文件时出错"
 
-#: builtin/index-pack.c:1573 builtin/pack-objects.c:3150
+#: builtin/index-pack.c:1578 builtin/pack-objects.c:3158
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "坏的 pack.indexversion=%<PRIu32>"
 
-#: builtin/index-pack.c:1643
+#: builtin/index-pack.c:1648
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "无法打开现存包文件 '%s'"
 
-#: builtin/index-pack.c:1645
+#: builtin/index-pack.c:1650
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "无法为 %s 打开包索引文件"
 
-#: builtin/index-pack.c:1693
+#: builtin/index-pack.c:1698
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] "非 delta:%d 个对象"
 msgstr[1] "非 delta:%d 个对象"
 
-#: builtin/index-pack.c:1700
+#: builtin/index-pack.c:1705
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
 msgstr[0] "链长 = %d: %lu 对象"
 msgstr[1] "链长 = %d: %lu 对象"
 
-#: builtin/index-pack.c:1742
+#: builtin/index-pack.c:1748
 msgid "Cannot come back to cwd"
 msgstr "无法返回当前工作目录"
 
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1799
-#: builtin/index-pack.c:1819 builtin/index-pack.c:1823
+#: builtin/index-pack.c:1802 builtin/index-pack.c:1805
+#: builtin/index-pack.c:1825 builtin/index-pack.c:1829
 #, c-format
 msgid "bad %s"
 msgstr "错误选项 %s"
 
-#: builtin/index-pack.c:1829 builtin/init-db.c:379 builtin/init-db.c:614
+#: builtin/index-pack.c:1835 builtin/init-db.c:379 builtin/init-db.c:614
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "未知的哈希算法 '%s'"
 
-#: builtin/index-pack.c:1850
+#: builtin/index-pack.c:1856
 msgid "--stdin requires a git repository"
 msgstr "--stdin 需要 git 仓库"
 
-#: builtin/index-pack.c:1867
+#: builtin/index-pack.c:1873
 msgid "--verify with no packfile name given"
 msgstr "--verify 没有提供包文件名参数"
 
-#: builtin/index-pack.c:1933 builtin/unpack-objects.c:584
+#: builtin/index-pack.c:1939 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "在打包对象中 fsck 检查出错"
 
@@ -16853,128 +17317,132 @@ msgstr "--trailer 和 --only-input 同时使用没有意义"
 msgid "no input file given for in-place editing"
 msgstr "没有给出要原位编辑的文件"
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<选项>] [<版本范围>] [[--] <路径>...]"
 
-#: builtin/log.c:60
+#: builtin/log.c:61
 msgid "git show [<options>] <object>..."
 msgstr "git show [<选项>] <对象>..."
 
-#: builtin/log.c:113
+#: builtin/log.c:114
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "无效的 --decorate 选项:%s"
 
-#: builtin/log.c:180
+#: builtin/log.c:181
 msgid "show source"
 msgstr "显示源"
 
-#: builtin/log.c:181
+#: builtin/log.c:182
 msgid "use mail map file"
 msgstr "使用邮件映射文件"
 
-#: builtin/log.c:184
+#: builtin/log.c:185
 msgid "only decorate refs that match <pattern>"
 msgstr "只修饰与 <模式> 匹配的引用"
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "do not decorate refs that match <pattern>"
 msgstr "不修饰和 <模式> 匹配的引用"
 
-#: builtin/log.c:187
+#: builtin/log.c:188
 msgid "decorate options"
 msgstr "修饰选项"
 
-#: builtin/log.c:190
+#: builtin/log.c:191
 msgid ""
 "trace the evolution of line range <start>,<end> or function :<funcname> in "
 "<file>"
 msgstr "跟踪 <文件> 中 <开始>,<结束> 范围内的行或函数 :<函数名> 的演变"
 
-#: builtin/log.c:213
+#: builtin/log.c:214
 msgid "-L<range>:<file> cannot be used with pathspec"
 msgstr "-L<范围>:<文件> 不能和路径表达式共用"
 
-#: builtin/log.c:321
+#: builtin/log.c:322
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "最终输出:%d %s\n"
 
-#: builtin/log.c:586
+#: builtin/log.c:429
+msgid "unable to create temporary object directory"
+msgstr "无法创建临时对象目录"
+
+#: builtin/log.c:599
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: 损坏的文件"
 
-#: builtin/log.c:601 builtin/log.c:691
+#: builtin/log.c:614 builtin/log.c:706
 #, c-format
 msgid "could not read object %s"
 msgstr "不能读取对象 %s"
 
-#: builtin/log.c:716
+#: builtin/log.c:731
 #, c-format
 msgid "unknown type: %d"
 msgstr "未知类型:%d"
 
-#: builtin/log.c:861
+#: builtin/log.c:880
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr "%s:从描述生成附函的模式无效"
 
-#: builtin/log.c:868
+#: builtin/log.c:887
 msgid "format.headers without value"
 msgstr "format.headers 没有值"
 
-#: builtin/log.c:997
+#: builtin/log.c:1016
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "无法打开补丁文件 %s"
 
-#: builtin/log.c:1014
+#: builtin/log.c:1033
 msgid "need exactly one range"
 msgstr "只需要一个范围"
 
-#: builtin/log.c:1024
+#: builtin/log.c:1043
 msgid "not a range"
 msgstr "不是一个范围"
 
-#: builtin/log.c:1188
+#: builtin/log.c:1207
 msgid "cover letter needs email format"
 msgstr "附函需要邮件地址格式"
 
-#: builtin/log.c:1194
+#: builtin/log.c:1213
 msgid "failed to create cover-letter file"
 msgstr "无法创建附函文件"
 
-#: builtin/log.c:1281
+#: builtin/log.c:1300
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "不正常的 in-reply-to:%s"
 
-#: builtin/log.c:1308
+#: builtin/log.c:1327
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<选项>] [<从> | <版本范围>]"
 
-#: builtin/log.c:1366
+#: builtin/log.c:1385
 msgid "two output directories?"
 msgstr "两个输出目录?"
 
-#: builtin/log.c:1517 builtin/log.c:2344 builtin/log.c:2346 builtin/log.c:2358
+#: builtin/log.c:1536 builtin/log.c:2369 builtin/log.c:2371 builtin/log.c:2383
 #, c-format
 msgid "unknown commit %s"
 msgstr "未知提交 %s"
 
-#: builtin/log.c:1528 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1547 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "无法将 '%s' 解析为一个有效引用"
 
-#: builtin/log.c:1537
+#: builtin/log.c:1556
 msgid "could not find exact merge base"
 msgstr "不能找到准确的合并基线"
 
-#: builtin/log.c:1547
+#: builtin/log.c:1566
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -16984,272 +17452,276 @@ msgstr ""
 "git branch --set-upstream-to 来跟踪一个远程分支。或者您可以通过\n"
 "参数 --base=<基线提交> 手动指定一个基线提交"
 
-#: builtin/log.c:1570
+#: builtin/log.c:1589
 msgid "failed to find exact merge base"
 msgstr "无法找到准确的合并基线"
 
-#: builtin/log.c:1587
+#: builtin/log.c:1606
 msgid "base commit should be the ancestor of revision list"
 msgstr "基线提交应该是版本列表的祖先"
 
-#: builtin/log.c:1597
+#: builtin/log.c:1616
 msgid "base commit shouldn't be in revision list"
 msgstr "基线提交不应该出现在版本列表中"
 
-#: builtin/log.c:1655
+#: builtin/log.c:1674
 msgid "cannot get patch id"
 msgstr "无法得到补丁 id"
 
-#: builtin/log.c:1718
+#: builtin/log.c:1737
 msgid "failed to infer range-diff origin of current series"
 msgstr "无法推断当前系列的 range-diff 起始"
 
-#: builtin/log.c:1720
+#: builtin/log.c:1739
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr "使用 '%s' 作为当前系列的 range-diff 源"
 
-#: builtin/log.c:1764
+#: builtin/log.c:1783
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "使用 [PATCH n/m],即使只有一个补丁"
 
-#: builtin/log.c:1767
+#: builtin/log.c:1786
 msgid "use [PATCH] even with multiple patches"
 msgstr "使用 [PATCH],即使有多个补丁"
 
-#: builtin/log.c:1771
+#: builtin/log.c:1790
 msgid "print patches to standard out"
 msgstr "打印补丁到标准输出"
 
-#: builtin/log.c:1773
+#: builtin/log.c:1792
 msgid "generate a cover letter"
 msgstr "生成一封附函"
 
-#: builtin/log.c:1775
+#: builtin/log.c:1794
 msgid "use simple number sequence for output file names"
 msgstr "使用简单的数字序列作为输出文件名"
 
-#: builtin/log.c:1776
+#: builtin/log.c:1795
 msgid "sfx"
 msgstr "后缀"
 
-#: builtin/log.c:1777
+#: builtin/log.c:1796
 msgid "use <sfx> instead of '.patch'"
 msgstr "使用 <后缀> 代替 '.patch'"
 
-#: builtin/log.c:1779
+#: builtin/log.c:1798
 msgid "start numbering patches at <n> instead of 1"
 msgstr "补丁以 <n> 开始编号,而不是1"
 
-#: builtin/log.c:1780
+#: builtin/log.c:1799
 msgid "reroll-count"
 msgstr "重制-计数"
 
-#: builtin/log.c:1781
+#: builtin/log.c:1800
 msgid "mark the series as Nth re-roll"
 msgstr "标记补丁系列是第几次重制"
 
-#: builtin/log.c:1783
+#: builtin/log.c:1802
 msgid "max length of output filename"
 msgstr "输出文件名的最大长度"
 
-#: builtin/log.c:1785
+#: builtin/log.c:1804
 msgid "use [RFC PATCH] instead of [PATCH]"
 msgstr "使用 [RFC PATCH] 代替 [PATCH]"
 
-#: builtin/log.c:1788
+#: builtin/log.c:1807
 msgid "cover-from-description-mode"
 msgstr "从分支描述获取附函的模式"
 
-#: builtin/log.c:1789
+#: builtin/log.c:1808
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr "基于一个分支描述生成部分附函"
 
-#: builtin/log.c:1791
+#: builtin/log.c:1810
 msgid "use [<prefix>] instead of [PATCH]"
 msgstr "使用 [<前缀>] 代替 [PATCH]"
 
-#: builtin/log.c:1794
+#: builtin/log.c:1813
 msgid "store resulting files in <dir>"
 msgstr "把结果文件存储在 <目录>"
 
-#: builtin/log.c:1797
+#: builtin/log.c:1816
 msgid "don't strip/add [PATCH]"
 msgstr "不删除/添加 [PATCH]"
 
-#: builtin/log.c:1800
+#: builtin/log.c:1819
 msgid "don't output binary diffs"
 msgstr "不输出二进制差异"
 
-#: builtin/log.c:1802
+#: builtin/log.c:1821
 msgid "output all-zero hash in From header"
 msgstr "在 From 头信息中输出全为零的哈希值"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1823
 msgid "don't include a patch matching a commit upstream"
 msgstr "不包含已在上游提交中的补丁"
 
-#: builtin/log.c:1806
+#: builtin/log.c:1825
 msgid "show patch format instead of default (patch + stat)"
 msgstr "显示纯补丁格式而非默认的(补丁+状态)"
 
-#: builtin/log.c:1808
+#: builtin/log.c:1827
 msgid "Messaging"
 msgstr "邮件发送"
 
-#: builtin/log.c:1809
+#: builtin/log.c:1828
 msgid "header"
 msgstr "header"
 
-#: builtin/log.c:1810
+#: builtin/log.c:1829
 msgid "add email header"
 msgstr "添加邮件头"
 
-#: builtin/log.c:1811 builtin/log.c:1812
+#: builtin/log.c:1830 builtin/log.c:1831
 msgid "email"
 msgstr "邮件地址"
 
-#: builtin/log.c:1811
+#: builtin/log.c:1830
 msgid "add To: header"
 msgstr "添加收件人"
 
-#: builtin/log.c:1812
+#: builtin/log.c:1831
 msgid "add Cc: header"
 msgstr "添加抄送"
 
-#: builtin/log.c:1813
+#: builtin/log.c:1832
 msgid "ident"
 msgstr "标识"
 
-#: builtin/log.c:1814
+#: builtin/log.c:1833
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr "将 From 地址设置为 <标识>(如若不提供,则用提交者 ID 做为地址)"
 
-#: builtin/log.c:1816
+#: builtin/log.c:1835
 msgid "message-id"
 msgstr "邮件标识"
 
-#: builtin/log.c:1817
+#: builtin/log.c:1836
 msgid "make first mail a reply to <message-id>"
 msgstr "使第一封邮件作为对 <邮件标识> 的回复"
 
-#: builtin/log.c:1818 builtin/log.c:1821
+#: builtin/log.c:1837 builtin/log.c:1840
 msgid "boundary"
 msgstr "边界"
 
-#: builtin/log.c:1819
+#: builtin/log.c:1838
 msgid "attach the patch"
 msgstr "附件方式添加补丁"
 
-#: builtin/log.c:1822
+#: builtin/log.c:1841
 msgid "inline the patch"
 msgstr "内联显示补丁"
 
-#: builtin/log.c:1826
+#: builtin/log.c:1845
 msgid "enable message threading, styles: shallow, deep"
 msgstr "启用邮件线索,风格:浅,深"
 
-#: builtin/log.c:1828
+#: builtin/log.c:1847
 msgid "signature"
 msgstr "签名"
 
-#: builtin/log.c:1829
+#: builtin/log.c:1848
 msgid "add a signature"
 msgstr "添加一个签名"
 
-#: builtin/log.c:1830
+#: builtin/log.c:1849
 msgid "base-commit"
 msgstr "基线提交"
 
-#: builtin/log.c:1831
+#: builtin/log.c:1850
 msgid "add prerequisite tree info to the patch series"
 msgstr "为补丁列表添加前置树信息"
 
-#: builtin/log.c:1834
+#: builtin/log.c:1853
 msgid "add a signature from a file"
 msgstr "从文件添加一个签名"
 
-#: builtin/log.c:1835
+#: builtin/log.c:1854
 msgid "don't print the patch filenames"
 msgstr "不要打印补丁文件名"
 
-#: builtin/log.c:1837
+#: builtin/log.c:1856
 msgid "show progress while generating patches"
 msgstr "在生成补丁时显示进度"
 
-#: builtin/log.c:1839
+#: builtin/log.c:1858
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr "在附函或单个补丁中显示和 <版本> 的差异"
 
-#: builtin/log.c:1842
+#: builtin/log.c:1861
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr "在附函或单个补丁中显示和 <引用规格> 的差异"
 
-#: builtin/log.c:1844 builtin/range-diff.c:28
+#: builtin/log.c:1863 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr "创建权重的百分比"
 
-#: builtin/log.c:1931
+#: builtin/log.c:1953
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "包含无效的身份标识:%s"
 
-#: builtin/log.c:1956
+#: builtin/log.c:1978
 msgid "--name-only does not make sense"
 msgstr "--name-only 无意义"
 
-#: builtin/log.c:1958
+#: builtin/log.c:1980
 msgid "--name-status does not make sense"
 msgstr "--name-status 无意义"
 
-#: builtin/log.c:1960
+#: builtin/log.c:1982
 msgid "--check does not make sense"
 msgstr "--check 无意义"
 
-#: builtin/log.c:2104
+#: builtin/log.c:1984
+msgid "--remerge-diff does not make sense"
+msgstr "--remerge-diff 无意义"
+
+#: builtin/log.c:2129
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff 需要 --cover-letter 或单一补丁"
 
-#: builtin/log.c:2108
+#: builtin/log.c:2133
 msgid "Interdiff:"
 msgstr "版本间差异:"
 
-#: builtin/log.c:2109
+#: builtin/log.c:2134
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "对 v%d 的版本差异:"
 
-#: builtin/log.c:2119
+#: builtin/log.c:2144
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff 需要 --cover-letter 或单一补丁"
 
-#: builtin/log.c:2127
+#: builtin/log.c:2152
 msgid "Range-diff:"
 msgstr "范围差异:"
 
-#: builtin/log.c:2128
+#: builtin/log.c:2153
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "对 v%d 的范围差异:"
 
-#: builtin/log.c:2139
+#: builtin/log.c:2164
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "无法读取签名文件 '%s'"
 
-#: builtin/log.c:2175
+#: builtin/log.c:2200
 msgid "Generating patches"
 msgstr "生成补丁"
 
-#: builtin/log.c:2219
+#: builtin/log.c:2244
 msgid "failed to create output files"
 msgstr "无法创建输出文件"
 
-#: builtin/log.c:2279
+#: builtin/log.c:2304
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<上游> [<头> [<限制>]]]"
 
-#: builtin/log.c:2333
+#: builtin/log.c:2358
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -17343,10 +17815,6 @@ msgstr "添加标准的 git 排除"
 msgid "make the output relative to the project top directory"
 msgstr "显示相对于顶级目录的文件名"
 
-#: builtin/ls-files.c:667
-msgid "recurse through submodules"
-msgstr "在子模组中递归"
-
 #: builtin/ls-files.c:669
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr "如果任何 <文件> 都不在索引区,视为错误"
@@ -17385,7 +17853,7 @@ msgstr ""
 msgid "do not print remote URL"
 msgstr "不打印远程 URL"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1103
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1131
 msgid "exec"
 msgstr "exec"
 
@@ -17417,42 +17885,70 @@ msgstr "若未找到匹配的引用则以退出码2退出"
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr "除了显示指向的对象外,显示指向的引用名"
 
-#: builtin/ls-tree.c:30
+#: builtin/ls-tree.c:36
 msgid "git ls-tree [<options>] <tree-ish> [<path>...]"
 msgstr "git ls-tree [<选项>] <树对象> [<路径>...]"
 
-#: builtin/ls-tree.c:128
+#: builtin/ls-tree.c:54
+#, c-format
+msgid "could not get object info about '%s'"
+msgstr "无法获得关于 '%s' 的对象信息"
+
+#: builtin/ls-tree.c:79
+#, c-format
+msgid "bad ls-tree format: element '%s' does not start with '('"
+msgstr "坏的 ls-tree 格式:元素 '%s' 没有以 '(' 开头"
+
+#: builtin/ls-tree.c:83
+#, c-format
+msgid "bad ls-tree format: element '%s' does not end in ')'"
+msgstr "坏的 ls-tree 格式:元素 '%s' 没有以 ')' 结尾"
+
+#: builtin/ls-tree.c:109
+#, c-format
+msgid "bad ls-tree format: %%%.*s"
+msgstr "坏的 ls-tree 格式: %%%.*s"
+
+#: builtin/ls-tree.c:336
 msgid "only show trees"
 msgstr "只显示树"
 
-#: builtin/ls-tree.c:130
+#: builtin/ls-tree.c:338
 msgid "recurse into subtrees"
 msgstr "递归到子树"
 
-#: builtin/ls-tree.c:132
+#: builtin/ls-tree.c:340
 msgid "show trees when recursing"
 msgstr "当递归时显示树"
 
-#: builtin/ls-tree.c:135
+#: builtin/ls-tree.c:343
 msgid "terminate entries with NUL byte"
 msgstr "条目以 NUL 字符终止"
 
-#: builtin/ls-tree.c:136
+#: builtin/ls-tree.c:344
 msgid "include object size"
 msgstr "包括对象大小"
 
-#: builtin/ls-tree.c:138 builtin/ls-tree.c:140
+#: builtin/ls-tree.c:346 builtin/ls-tree.c:348
 msgid "list only filenames"
 msgstr "只列出文件名"
 
-#: builtin/ls-tree.c:143
+#: builtin/ls-tree.c:350
+msgid "list only objects"
+msgstr "只列出对象"
+
+#: builtin/ls-tree.c:353
 msgid "use full path names"
 msgstr "使用文件的全路径"
 
-#: builtin/ls-tree.c:145
+#: builtin/ls-tree.c:355
 msgid "list entire tree; not just current directory (implies --full-name)"
 msgstr "列出整个树;不仅仅当前目录(隐含 --full-name)"
 
+#: builtin/ls-tree.c:391
+msgid "--format can't be combined with other format-altering options"
+msgstr "--format 不能和改变格式的选项同时使用"
+
 #. TRANSLATORS: keep <> in "<" mail ">" info.
 #: builtin/mailinfo.c:14
 msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
@@ -17502,7 +17998,11 @@ msgstr "找到引号中的 CR 时的操作"
 msgid "use headers in message's body"
 msgstr "在消息正文中使用标头"
 
-#: builtin/mailsplit.c:239
+#: builtin/mailsplit.c:227
+msgid "reading patches from stdin/tty..."
+msgstr "从标准输入或tty读取补丁……"
+
+#: builtin/mailsplit.c:242
 #, c-format
 msgid "empty mbox: '%s'"
 msgstr "空的 mbox:'%s'"
@@ -17527,23 +18027,23 @@ msgstr "git merge-base --is-ancestor <提交> <提交>"
 msgid "git merge-base --fork-point <ref> [<commit>]"
 msgstr "git merge-base --fork-point <引用> [<提交>]"
 
-#: builtin/merge-base.c:143
+#: builtin/merge-base.c:144
 msgid "output all common ancestors"
 msgstr "输出所有共同的祖先"
 
-#: builtin/merge-base.c:145
+#: builtin/merge-base.c:146
 msgid "find ancestors for a single n-way merge"
 msgstr "查找一个多路合并的祖先提交"
 
-#: builtin/merge-base.c:147
+#: builtin/merge-base.c:148
 msgid "list revs not reachable from others"
 msgstr "显示不能被其他访问到的版本"
 
-#: builtin/merge-base.c:149
+#: builtin/merge-base.c:150
 msgid "is the first one ancestor of the other?"
 msgstr "第一个是其他的祖先提交么?"
 
-#: builtin/merge-base.c:151
+#: builtin/merge-base.c:152
 msgid "find where <commit> forked from reflog of <ref>"
 msgstr "根据 <引用> 的引用日志查找 <提交> 的分叉点"
 
@@ -17691,7 +18191,7 @@ msgid "verify that the named commit has a valid GPG signature"
 msgstr "验证指定的提交是否包含一个有效的 GPG 签名"
 
 #: builtin/merge.c:280 builtin/notes.c:785 builtin/pull.c:172
-#: builtin/rebase.c:1117 builtin/revert.c:114
+#: builtin/rebase.c:1145 builtin/revert.c:114
 msgid "strategy"
 msgstr "策略"
 
@@ -17822,72 +18322,72 @@ msgid ""
 "the commit.\n"
 msgstr "以 '%c' 开始的行将被忽略,而空的提交说明将终止提交。\n"
 
-#: builtin/merge.c:894
+#: builtin/merge.c:900
 msgid "Empty commit message."
 msgstr "空提交信息。"
 
-#: builtin/merge.c:909
+#: builtin/merge.c:915
 #, c-format
 msgid "Wonderful.\n"
 msgstr "太棒了。\n"
 
-#: builtin/merge.c:970
+#: builtin/merge.c:976
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr "自动合并失败,修正冲突然后提交修正的结果。\n"
 
-#: builtin/merge.c:1009
+#: builtin/merge.c:1015
 msgid "No current branch."
 msgstr "没有当前分支。"
 
-#: builtin/merge.c:1011
+#: builtin/merge.c:1017
 msgid "No remote for the current branch."
 msgstr "当前分支没有对应的远程仓库。"
 
-#: builtin/merge.c:1013
+#: builtin/merge.c:1019
 msgid "No default upstream defined for the current branch."
 msgstr "当前分支没有定义默认的上游分支。"
 
-#: builtin/merge.c:1018
+#: builtin/merge.c:1024
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "对于 %s 没有来自 %s 的远程跟踪分支"
 
-#: builtin/merge.c:1075
+#: builtin/merge.c:1081
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "环境 '%2$s' 中存在坏的取值 '%1$s'"
 
-#: builtin/merge.c:1177
+#: builtin/merge.c:1183
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "不能在 %s 中合并:%s"
 
-#: builtin/merge.c:1211
+#: builtin/merge.c:1217
 msgid "not something we can merge"
 msgstr "不能合并"
 
-#: builtin/merge.c:1324
+#: builtin/merge.c:1330
 msgid "--abort expects no arguments"
 msgstr "--abort 不带参数"
 
-#: builtin/merge.c:1328
+#: builtin/merge.c:1334
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "没有要终止的合并(MERGE_HEAD 丢失)。"
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1352
 msgid "--quit expects no arguments"
 msgstr "--quit 不带参数"
 
-#: builtin/merge.c:1359
+#: builtin/merge.c:1365
 msgid "--continue expects no arguments"
 msgstr "--continue 不带参数"
 
-#: builtin/merge.c:1363
+#: builtin/merge.c:1369
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "没有进行中的合并(MERGE_HEAD 丢失)。"
 
-#: builtin/merge.c:1379
+#: builtin/merge.c:1385
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17895,7 +18395,7 @@ msgstr ""
 "您尚未结束您的合并(存在 MERGE_HEAD)。\n"
 "请在合并前先提交您的修改。"
 
-#: builtin/merge.c:1386
+#: builtin/merge.c:1392
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17903,84 +18403,80 @@ msgstr ""
 "您尚未结束您的拣选(存在 CHERRY_PICK_HEAD)。\n"
 "请在合并前先提交您的修改。"
 
-#: builtin/merge.c:1389
+#: builtin/merge.c:1395
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "您尚未结束您的拣选(存在 CHERRY_PICK_HEAD)。"
 
-#: builtin/merge.c:1421
+#: builtin/merge.c:1427
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr "未指定提交并且 merge.defaultToUpstream 未设置。"
 
-#: builtin/merge.c:1438
+#: builtin/merge.c:1444
 msgid "Squash commit into empty head not supported yet"
 msgstr "尚不支持到空分支的压缩提交"
 
-#: builtin/merge.c:1440
+#: builtin/merge.c:1446
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr "到空分支的非快进式提交没有意义"
 
-#: builtin/merge.c:1445
+#: builtin/merge.c:1451
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - 不能被合并"
 
-#: builtin/merge.c:1447
+#: builtin/merge.c:1453
 msgid "Can merge only exactly one commit into empty head"
 msgstr "只能将一个提交合并到空分支上"
 
-#: builtin/merge.c:1534
+#: builtin/merge.c:1540
 msgid "refusing to merge unrelated histories"
 msgstr "拒绝合并无关的历史"
 
-#: builtin/merge.c:1553
+#: builtin/merge.c:1559
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "更新 %s..%s\n"
 
-#: builtin/merge.c:1601
+#: builtin/merge.c:1606
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "尝试非常小的索引内合并...\n"
 
-#: builtin/merge.c:1608
+#: builtin/merge.c:1613
 #, c-format
 msgid "Nope.\n"
 msgstr "无。\n"
 
-#: builtin/merge.c:1667 builtin/merge.c:1733
+#: builtin/merge.c:1671 builtin/merge.c:1737
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "将树回滚至原始状态...\n"
 
-#: builtin/merge.c:1671
+#: builtin/merge.c:1675
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "尝试合并策略 %s...\n"
 
-#: builtin/merge.c:1723
+#: builtin/merge.c:1727
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "没有合并策略处理此合并。\n"
 
-#: builtin/merge.c:1725
+#: builtin/merge.c:1729
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "使用策略 %s 合并失败。\n"
 
-#: builtin/merge.c:1735
+#: builtin/merge.c:1739
 #, c-format
 msgid "Using the %s strategy to prepare resolving by hand.\n"
 msgstr "使用 %s 策略以准备手工解决。\n"
 
-#: builtin/merge.c:1749
+#: builtin/merge.c:1753
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr "自动合并进展顺利,按要求在提交前停止\n"
 
-#: builtin/mktag.c:10
-msgid "git mktag"
-msgstr "git mktag"
-
 #: builtin/mktag.c:27
 #, c-format
 msgid "warning: tag input does not pass fsck: %s"
@@ -18006,22 +18502,18 @@ msgstr "不能读取被标记的对象 '%s'"
 msgid "object '%s' tagged as '%s', but is a '%s' type"
 msgstr "对象 '%s' 被标记为 '%s',然而是一个 '%s' 类型"
 
-#: builtin/mktag.c:98
+#: builtin/mktag.c:97
 msgid "tag on stdin did not pass our strict fsck check"
 msgstr "标准输入上的标签未通过我们严格的 fsck 检查"
 
-#: builtin/mktag.c:101
+#: builtin/mktag.c:100
 msgid "tag on stdin did not refer to a valid object"
 msgstr "标准输入上的标签未指向一个有效的对象"
 
-#: builtin/mktag.c:104 builtin/tag.c:242
+#: builtin/mktag.c:103 builtin/tag.c:243
 msgid "unable to write tag file"
 msgstr "无法写标签文件"
 
-#: builtin/mktree.c:66
-msgid "git mktree [-z] [--missing] [--batch]"
-msgstr "git mktree [-z] [--missing] [--batch]"
-
 #: builtin/mktree.c:154
 msgid "input is NUL terminated"
 msgstr "输入以 NUL 字符终止"
@@ -18175,52 +18667,56 @@ msgstr "%s,源=%s,目标=%s"
 msgid "Renaming %s to %s\n"
 msgstr "重命名 %s 至 %s\n"
 
-#: builtin/mv.c:314 builtin/remote.c:790 builtin/repack.c:857
+#: builtin/mv.c:314 builtin/remote.c:812 builtin/repack.c:861
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "重命名 '%s' 失败"
 
-#: builtin/name-rev.c:474
+#: builtin/name-rev.c:524
 msgid "git name-rev [<options>] <commit>..."
 msgstr "git name-rev [<选项>] <提交>..."
 
-#: builtin/name-rev.c:475
+#: builtin/name-rev.c:525
 msgid "git name-rev [<options>] --all"
 msgstr "git name-rev [<选项>] --all"
 
-#: builtin/name-rev.c:476
-msgid "git name-rev [<options>] --stdin"
-msgstr "git name-rev [<选项>] --stdin"
+#: builtin/name-rev.c:526
+msgid "git name-rev [<options>] --annotate-stdin"
+msgstr "git name-rev [<选项>] --annotate-stdin"
 
-#: builtin/name-rev.c:533
+#: builtin/name-rev.c:583
 msgid "print only ref-based names (no object names)"
 msgstr "只打印基于引用的名称(非对象名)"
 
-#: builtin/name-rev.c:534
+#: builtin/name-rev.c:584
 msgid "only use tags to name the commits"
 msgstr "只使用标签来命名提交"
 
-#: builtin/name-rev.c:536
+#: builtin/name-rev.c:586
 msgid "only use refs matching <pattern>"
 msgstr "只使用和 <模式> 相匹配的引用"
 
-#: builtin/name-rev.c:538
+#: builtin/name-rev.c:588
 msgid "ignore refs matching <pattern>"
 msgstr "忽略和 <模式> 相匹配的引用"
 
-#: builtin/name-rev.c:540
+#: builtin/name-rev.c:590
 msgid "list all commits reachable from all refs"
 msgstr "列出可以从所有引用访问的提交"
 
-#: builtin/name-rev.c:541
-msgid "read from stdin"
-msgstr "从标准输入读取"
+#: builtin/name-rev.c:591
+msgid "deprecated: use annotate-stdin instead"
+msgstr "已弃用:取而代之使用 annotate-stdin"
 
-#: builtin/name-rev.c:542
+#: builtin/name-rev.c:592
+msgid "annotate text from stdin"
+msgstr "标注标准输入的文字"
+
+#: builtin/name-rev.c:593
 msgid "allow to print `undefined` names (default)"
 msgstr "允许打印 `未定义` 的名称(默认)"
 
-#: builtin/name-rev.c:548
+#: builtin/name-rev.c:599
 msgid "dereference tags in the input (internal use)"
 msgstr "反向解析输入中的标签(内部使用)"
 
@@ -18261,14 +18757,6 @@ msgid ""
 "git notes [--ref <notes-ref>] merge [-v | -q] [-s <strategy>] <notes-ref>"
 msgstr "git notes [--ref <注解引用>] merge [-v | -q] [-s <策略> ] <注解引用>"
 
-#: builtin/notes.c:35
-msgid "git notes merge --commit [-v | -q]"
-msgstr "git notes merge --commit [-v | -q]"
-
-#: builtin/notes.c:36
-msgid "git notes merge --abort [-v | -q]"
-msgstr "git notes merge --abort [-v | -q]"
-
 #: builtin/notes.c:37
 msgid "git notes [--ref <notes-ref>] remove [<object>...]"
 msgstr "git notes [--ref <注解引用>] remove [<对象>...]"
@@ -18329,10 +18817,6 @@ msgstr "git notes remove [<对象>]"
 msgid "git notes prune [<options>]"
 msgstr "git notes prune [<选项>]"
 
-#: builtin/notes.c:92
-msgid "git notes get-ref"
-msgstr "git notes get-ref"
-
 #: builtin/notes.c:97
 msgid "Write/edit the notes for the following object:"
 msgstr "为下面的对象写/编辑说明:"
@@ -18364,7 +18848,7 @@ msgstr "不能写注解对象"
 msgid "the note contents have been left in %s"
 msgstr "注解内容被留在 %s 中"
 
-#: builtin/notes.c:240 builtin/tag.c:581
+#: builtin/notes.c:240 builtin/tag.c:582
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "不能打开或读取 '%s'"
@@ -18404,13 +18888,6 @@ msgstr "无法把注解从 '%s' 拷贝到 '%s'"
 msgid "refusing to %s notes in %s (outside of refs/notes/)"
 msgstr "拒绝向 %2$s(在 refs/notes/ 之外)%1$s注解"
 
-#: builtin/notes.c:374 builtin/notes.c:429 builtin/notes.c:507
-#: builtin/notes.c:519 builtin/notes.c:596 builtin/notes.c:663
-#: builtin/notes.c:813 builtin/notes.c:965 builtin/notes.c:987
-#: builtin/prune-packed.c:25 builtin/receive-pack.c:2487 builtin/tag.c:591
-msgid "too many arguments"
-msgstr "太多参数"
-
 #: builtin/notes.c:387 builtin/notes.c:676
 #, c-format
 msgid "no note found for object %s."
@@ -18590,7 +19067,7 @@ msgstr ""
 "自动合并说明失败。修改 %s 中的冲突并且使用命令 'git notes merge --commit' 提"
 "交结果,或者使用命令 'git notes merge --abort' 终止合并。\n"
 
-#: builtin/notes.c:899 builtin/tag.c:594
+#: builtin/notes.c:899 builtin/tag.c:595
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "无法解析 '%s' 为一个有效引用。"
@@ -18608,7 +19085,7 @@ msgstr "尝试删除不存在的注解不是一个错误"
 msgid "read object names from the standard input"
 msgstr "从标准输入读取对象名称"
 
-#: builtin/notes.c:956 builtin/prune.c:144 builtin/worktree.c:147
+#: builtin/notes.c:956 builtin/prune.c:144 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr "不删除,只显示"
 
@@ -18624,7 +19101,7 @@ msgstr "注解引用"
 msgid "use notes from <notes-ref>"
 msgstr "从 <注解引用> 使用注解"
 
-#: builtin/notes.c:1036 builtin/stash.c:1818
+#: builtin/notes.c:1036 builtin/stash.c:1802
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "未知子命令:%s"
@@ -18639,7 +19116,7 @@ msgid ""
 "git pack-objects [<options>...] <base-name> [< <ref-list> | < <object-list>]"
 msgstr "git pack-objects [<选项>...] <前缀名称> [< <引用列表> | < <对象列表>]"
 
-#: builtin/pack-objects.c:572
+#: builtin/pack-objects.c:570
 #, c-format
 msgid ""
 "write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
@@ -18647,110 +19124,110 @@ msgid ""
 msgstr ""
 "write_reuse_object:无法定位 %1$s,预期在包 %3$s 中的偏移量 %2$<PRIuMAX> 上"
 
-#: builtin/pack-objects.c:580
+#: builtin/pack-objects.c:578
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr "%s 错的包对象 CRC"
 
-#: builtin/pack-objects.c:591
+#: builtin/pack-objects.c:589
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr "%s 损坏的包对象"
 
-#: builtin/pack-objects.c:722
+#: builtin/pack-objects.c:720
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr "发现对象 %s 递归 delta"
 
-#: builtin/pack-objects.c:941
+#: builtin/pack-objects.c:939
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr "排序了 %u 个对象,预期 %<PRIu32> 个"
 
-#: builtin/pack-objects.c:1036
+#: builtin/pack-objects.c:1034
 #, c-format
 msgid "expected object at offset %<PRIuMAX> in pack %s"
 msgstr "预期对象在包文件 %2$s 的偏移量 %1$<PRIuMAX> 上"
 
-#: builtin/pack-objects.c:1160
+#: builtin/pack-objects.c:1158
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr "禁用 bitmap 写入,因为 pack.packSizeLimit 设置使得包被切分为多个"
 
-#: builtin/pack-objects.c:1173
+#: builtin/pack-objects.c:1171
 msgid "Writing objects"
 msgstr "写入对象中"
 
-#: builtin/pack-objects.c:1235 builtin/update-index.c:90
+#: builtin/pack-objects.c:1243 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "无法对 %s 调用 stat"
 
-#: builtin/pack-objects.c:1268
+#: builtin/pack-objects.c:1276
 msgid "failed to write bitmap index"
 msgstr "无法写入位图索引"
 
-#: builtin/pack-objects.c:1294
+#: builtin/pack-objects.c:1302
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "写入 %<PRIu32> 个对象而预期 %<PRIu32> 个"
 
-#: builtin/pack-objects.c:1536
+#: builtin/pack-objects.c:1544
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr "禁用 bitmap 写入,因为一些对象将不会被打包"
 
-#: builtin/pack-objects.c:1984
+#: builtin/pack-objects.c:1992
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "%s 压缩中 delta 基准偏移越界"
 
-#: builtin/pack-objects.c:1993
+#: builtin/pack-objects.c:2001
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "%s 的 delta 基准偏移越界"
 
-#: builtin/pack-objects.c:2274
+#: builtin/pack-objects.c:2282
 msgid "Counting objects"
 msgstr "对象计数中"
 
-#: builtin/pack-objects.c:2439
+#: builtin/pack-objects.c:2447
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "无法解析对象 %s 头信息"
 
-#: builtin/pack-objects.c:2509 builtin/pack-objects.c:2525
-#: builtin/pack-objects.c:2535
+#: builtin/pack-objects.c:2517 builtin/pack-objects.c:2533
+#: builtin/pack-objects.c:2543
 #, c-format
 msgid "object %s cannot be read"
 msgstr "对象 %s 无法读取"
 
-#: builtin/pack-objects.c:2512 builtin/pack-objects.c:2539
+#: builtin/pack-objects.c:2520 builtin/pack-objects.c:2547
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr "对象 %s 不一致的对象长度(%<PRIuMAX> vs %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2549
+#: builtin/pack-objects.c:2557
 msgid "suboptimal pack - out of memory"
 msgstr "次优(suboptimal)打包 - 内存不足"
 
-#: builtin/pack-objects.c:2864
+#: builtin/pack-objects.c:2872
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "使用 %d 个线程进行压缩"
 
-#: builtin/pack-objects.c:3003
+#: builtin/pack-objects.c:3011
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "无法为标签 %s 压缩对象"
 
-#: builtin/pack-objects.c:3089
+#: builtin/pack-objects.c:3097
 msgid "Compressing objects"
 msgstr "压缩对象中"
 
-#: builtin/pack-objects.c:3095
+#: builtin/pack-objects.c:3103
 msgid "inconsistency with delta count"
 msgstr "不一致的差异计数"
 
-#: builtin/pack-objects.c:3174
+#: builtin/pack-objects.c:3182
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
@@ -18759,24 +19236,24 @@ msgstr ""
 "uploadpack.blobpackfileuri 的取值必须是 '<object-hash> <pack-hash> <uri>' 格"
 "式(得到 '%s')"
 
-#: builtin/pack-objects.c:3177
+#: builtin/pack-objects.c:3185
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
 msgstr "对象已经在另外的 uploadpack.blobpackfileuri 中配置(得到 '%s')"
 
-#: builtin/pack-objects.c:3212
+#: builtin/pack-objects.c:3220
 #, c-format
 msgid "could not get type of object %s in pack %s"
 msgstr "无法获得包 %2$s 中对象 %1$s 的类型"
 
-#: builtin/pack-objects.c:3340 builtin/pack-objects.c:3351
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3348 builtin/pack-objects.c:3359
+#: builtin/pack-objects.c:3373
 #, c-format
 msgid "could not find pack '%s'"
 msgstr "不能找到包 '%s'"
 
-#: builtin/pack-objects.c:3408
+#: builtin/pack-objects.c:3416
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -18785,7 +19262,7 @@ msgstr ""
 "预期边界对象(edge object)ID,却得到垃圾数据:\n"
 " %s"
 
-#: builtin/pack-objects.c:3414
+#: builtin/pack-objects.c:3422
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -18794,242 +19271,238 @@ msgstr ""
 "预期对象 ID,却得到垃圾数据:\n"
 " %s"
 
-#: builtin/pack-objects.c:3507
-msgid "invalid value for --missing"
-msgstr "选项 --missing 的值无效"
-
-#: builtin/pack-objects.c:3532 builtin/pack-objects.c:3619
+#: builtin/pack-objects.c:3540 builtin/pack-objects.c:3627
 msgid "cannot open pack index"
 msgstr "无法打开包文件索引"
 
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3549
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "无法检查 %s 处的松散对象"
 
-#: builtin/pack-objects.c:3627
+#: builtin/pack-objects.c:3635
 msgid "unable to force loose object"
 msgstr "无法强制松散对象"
 
-#: builtin/pack-objects.c:3757
+#: builtin/pack-objects.c:3763
 #, c-format
 msgid "not a rev '%s'"
 msgstr "不是一个版本 '%s'"
 
-#: builtin/pack-objects.c:3760 builtin/rev-parse.c:1061
+#: builtin/pack-objects.c:3766 builtin/rev-parse.c:1061
 #, c-format
 msgid "bad revision '%s'"
 msgstr "坏的版本 '%s'"
 
-#: builtin/pack-objects.c:3788
+#: builtin/pack-objects.c:3794
 msgid "unable to add recent objects"
 msgstr "无法添加最近的对象"
 
-#: builtin/pack-objects.c:3841
+#: builtin/pack-objects.c:3847
 #, c-format
 msgid "unsupported index version %s"
 msgstr "不支持的索引版本 %s"
 
-#: builtin/pack-objects.c:3845
+#: builtin/pack-objects.c:3851
 #, c-format
 msgid "bad index version '%s'"
 msgstr "坏的索引版本 '%s'"
 
-#: builtin/pack-objects.c:3884
+#: builtin/pack-objects.c:3907
 msgid "<version>[,<offset>]"
 msgstr "<版本>[,<偏移>]"
 
-#: builtin/pack-objects.c:3885
+#: builtin/pack-objects.c:3908
 msgid "write the pack index file in the specified idx format version"
 msgstr "用指定的 idx 格式版本来写包索引文件"
 
-#: builtin/pack-objects.c:3888
+#: builtin/pack-objects.c:3911
 msgid "maximum size of each output pack file"
 msgstr "每个输出包的最大尺寸"
 
-#: builtin/pack-objects.c:3890
+#: builtin/pack-objects.c:3913
 msgid "ignore borrowed objects from alternate object store"
 msgstr "忽略从备用对象存储里借用对象"
 
-#: builtin/pack-objects.c:3892
+#: builtin/pack-objects.c:3915
 msgid "ignore packed objects"
 msgstr "忽略包对象"
 
-#: builtin/pack-objects.c:3894
+#: builtin/pack-objects.c:3917
 msgid "limit pack window by objects"
 msgstr "限制打包窗口的对象数"
 
-#: builtin/pack-objects.c:3896
+#: builtin/pack-objects.c:3919
 msgid "limit pack window by memory in addition to object limit"
 msgstr "除对象数量限制外设置打包窗口的内存限制"
 
-#: builtin/pack-objects.c:3898
+#: builtin/pack-objects.c:3921
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr "打包允许的 delta 链的最大长度"
 
-#: builtin/pack-objects.c:3900
+#: builtin/pack-objects.c:3923
 msgid "reuse existing deltas"
 msgstr "重用已存在的 deltas"
 
-#: builtin/pack-objects.c:3902
+#: builtin/pack-objects.c:3925
 msgid "reuse existing objects"
 msgstr "重用已存在的对象"
 
-#: builtin/pack-objects.c:3904
+#: builtin/pack-objects.c:3927
 msgid "use OFS_DELTA objects"
 msgstr "使用 OFS_DELTA 对象"
 
-#: builtin/pack-objects.c:3906
+#: builtin/pack-objects.c:3929
 msgid "use threads when searching for best delta matches"
 msgstr "使用线程查询最佳 delta 匹配"
 
-#: builtin/pack-objects.c:3908
+#: builtin/pack-objects.c:3931
 msgid "do not create an empty pack output"
 msgstr "不创建空的包输出"
 
-#: builtin/pack-objects.c:3910
+#: builtin/pack-objects.c:3933
 msgid "read revision arguments from standard input"
 msgstr "从标准输入读取版本号参数"
 
-#: builtin/pack-objects.c:3912
+#: builtin/pack-objects.c:3935
 msgid "limit the objects to those that are not yet packed"
 msgstr "限制那些尚未打包的对象"
 
-#: builtin/pack-objects.c:3915
+#: builtin/pack-objects.c:3938
 msgid "include objects reachable from any reference"
 msgstr "包括可以从任何引用访问到的对象"
 
-#: builtin/pack-objects.c:3918
+#: builtin/pack-objects.c:3941
 msgid "include objects referred by reflog entries"
 msgstr "包括被引用日志引用到的对象"
 
-#: builtin/pack-objects.c:3921
+#: builtin/pack-objects.c:3944
 msgid "include objects referred to by the index"
 msgstr "包括被索引引用到的对象"
 
-#: builtin/pack-objects.c:3924
+#: builtin/pack-objects.c:3947
 msgid "read packs from stdin"
 msgstr "从标准输入读取包"
 
-#: builtin/pack-objects.c:3926
+#: builtin/pack-objects.c:3949
 msgid "output pack to stdout"
 msgstr "输出包到标准输出"
 
-#: builtin/pack-objects.c:3928
+#: builtin/pack-objects.c:3951
 msgid "include tag objects that refer to objects to be packed"
 msgstr "包括那些引用了待打包对象的标签对象"
 
-#: builtin/pack-objects.c:3930
+#: builtin/pack-objects.c:3953
 msgid "keep unreachable objects"
 msgstr "维持不可达的对象"
 
-#: builtin/pack-objects.c:3932
+#: builtin/pack-objects.c:3955
 msgid "pack loose unreachable objects"
 msgstr "打包松散的不可达对象"
 
-#: builtin/pack-objects.c:3934
+#: builtin/pack-objects.c:3957
 msgid "unpack unreachable objects newer than <time>"
 msgstr "将比给定 <时间> 新的无法访问的对象解包"
 
-#: builtin/pack-objects.c:3937
+#: builtin/pack-objects.c:3960
 msgid "use the sparse reachability algorithm"
 msgstr "使用稀疏可达性算法"
 
-#: builtin/pack-objects.c:3939
+#: builtin/pack-objects.c:3962
 msgid "create thin packs"
 msgstr "创建精简包"
 
-#: builtin/pack-objects.c:3941
+#: builtin/pack-objects.c:3964
 msgid "create packs suitable for shallow fetches"
 msgstr "创建适合浅克隆仓库获取的包"
 
-#: builtin/pack-objects.c:3943
+#: builtin/pack-objects.c:3966
 msgid "ignore packs that have companion .keep file"
 msgstr "忽略配有 .keep 文件的包"
 
-#: builtin/pack-objects.c:3945
+#: builtin/pack-objects.c:3968
 msgid "ignore this pack"
 msgstr "忽略该 pack"
 
-#: builtin/pack-objects.c:3947
+#: builtin/pack-objects.c:3970
 msgid "pack compression level"
 msgstr "打包压缩级别"
 
-#: builtin/pack-objects.c:3949
+#: builtin/pack-objects.c:3972
 msgid "do not hide commits by grafts"
 msgstr "显示被移植隐藏的提交"
 
-#: builtin/pack-objects.c:3951
+#: builtin/pack-objects.c:3974
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr "使用 bitmap 索引(如果有的话)以提高对象计数时的速度"
 
-#: builtin/pack-objects.c:3953
+#: builtin/pack-objects.c:3976
 msgid "write a bitmap index together with the pack index"
 msgstr "在建立包索引的同时创建 bitmap 索引"
 
-#: builtin/pack-objects.c:3957
+#: builtin/pack-objects.c:3980
 msgid "write a bitmap index if possible"
 msgstr "如果可能,写 bitmap 索引"
 
-#: builtin/pack-objects.c:3961
+#: builtin/pack-objects.c:3984
 msgid "handling for missing objects"
 msgstr "处理丢失的对象"
 
-#: builtin/pack-objects.c:3964
+#: builtin/pack-objects.c:3987
 msgid "do not pack objects in promisor packfiles"
 msgstr "不要打包 promisor 包文件中的对象"
 
-#: builtin/pack-objects.c:3966
+#: builtin/pack-objects.c:3989
 msgid "respect islands during delta compression"
 msgstr "在增量压缩时参考数据岛"
 
-#: builtin/pack-objects.c:3968
+#: builtin/pack-objects.c:3991
 msgid "protocol"
 msgstr "协议"
 
-#: builtin/pack-objects.c:3969
+#: builtin/pack-objects.c:3992
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr "使用此协议排除任何已配置的 uploadpack.blobpackfileuri"
 
-#: builtin/pack-objects.c:4002
+#: builtin/pack-objects.c:4027
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "增量链深度 %d 太深了,强制为 %d"
 
-#: builtin/pack-objects.c:4007
+#: builtin/pack-objects.c:4032
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "配置 pack.deltaCacheLimit 太高了,强制为 %d"
 
-#: builtin/pack-objects.c:4063
+#: builtin/pack-objects.c:4088
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr "不能使用 --max-pack-size 来构建传输用的包文件"
 
-#: builtin/pack-objects.c:4065
+#: builtin/pack-objects.c:4090
 msgid "minimum pack size limit is 1 MiB"
 msgstr "最小的包文件大小是 1 MiB"
 
-#: builtin/pack-objects.c:4070
+#: builtin/pack-objects.c:4095
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "--thin 不能用于创建一个可索引包"
 
-#: builtin/pack-objects.c:4079
+#: builtin/pack-objects.c:4104
 msgid "cannot use --filter without --stdout"
 msgstr "不能在没有 --stdout 的情况下使用 --filter"
 
-#: builtin/pack-objects.c:4081
+#: builtin/pack-objects.c:4106
 msgid "cannot use --filter with --stdin-packs"
 msgstr "不能同时使用 --filter 和 --stdin-packs"
 
-#: builtin/pack-objects.c:4085
+#: builtin/pack-objects.c:4110
 msgid "cannot use internal rev list with --stdin-packs"
 msgstr "不能同时使用内部版本列表和 --stdin-packs"
 
-#: builtin/pack-objects.c:4144
+#: builtin/pack-objects.c:4169
 msgid "Enumerating objects"
 msgstr "枚举对象中"
 
-#: builtin/pack-objects.c:4180
+#: builtin/pack-objects.c:4210
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -19063,10 +19536,6 @@ msgstr "打包一切"
 msgid "prune loose refs (default)"
 msgstr "清除松散的引用(默认)"
 
-#: builtin/prune-packed.c:6
-msgid "git prune-packed [-n | --dry-run] [-q | --quiet]"
-msgstr "git prune-packed [-n | --dry-run] [-q | --quiet]"
-
 #: builtin/prune.c:14
 msgid "git prune [-n] [-v] [--progress] [--expire <time>] [--] [<head>...]"
 msgstr "git prune [-n] [-v] [--progress] [--expire <时间>] [--] [<head>...]"
@@ -19087,11 +19556,6 @@ msgstr "限制遍历 promisor 包以外的对象"
 msgid "cannot prune in a precious-objects repo"
 msgstr "不能在珍品仓库中执行清理操作"
 
-#: builtin/pull.c:45 builtin/pull.c:47
-#, c-format
-msgid "Invalid value for %s: %s"
-msgstr "%s 的值无效:%s"
-
 #: builtin/pull.c:67
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
 msgstr "git pull [<选项>] [<仓库> [<引用规格>...]]"
@@ -19116,7 +19580,7 @@ msgstr "允许快进式"
 msgid "control use of pre-merge-commit and commit-msg hooks"
 msgstr "控制 pre-merge-commit 和 commit-msg 钩子的使用"
 
-#: builtin/pull.c:171 parse-options.h:340
+#: builtin/pull.c:171 parse-options.h:371
 msgid "automatically stash/stash pop before and after"
 msgstr "在操作前后执行自动贮藏和弹出贮藏"
 
@@ -19132,11 +19596,6 @@ msgstr "强制覆盖本地分支"
 msgid "number of submodules pulled in parallel"
 msgstr "并发拉取的子模组的数量"
 
-#: builtin/pull.c:321
-#, c-format
-msgid "Invalid value for pull.ff: %s"
-msgstr "pull.ff 的取值无效:%s"
-
 #: builtin/pull.c:449
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
@@ -19164,7 +19623,7 @@ msgstr ""
 "您要求从远程 '%s' 拉取,但是未指定一个分支。因为这不是当前\n"
 "分支默认的远程仓库,您必须在命令行中指定一个分支名。"
 
-#: builtin/pull.c:460 builtin/rebase.c:951
+#: builtin/pull.c:460 builtin/rebase.c:978
 msgid "You are not currently on a branch."
 msgstr "您当前不在一个分支上。"
 
@@ -19181,16 +19640,16 @@ msgid "See git-pull(1) for details."
 msgstr "详见 git-pull(1)。"
 
 #: builtin/pull.c:467 builtin/pull.c:473 builtin/pull.c:482
-#: builtin/rebase.c:957
+#: builtin/rebase.c:984
 msgid "<remote>"
 msgstr "<远程>"
 
 #: builtin/pull.c:467 builtin/pull.c:482 builtin/pull.c:487
-#: contrib/scalar/scalar.c:375
+#: contrib/scalar/scalar.c:374
 msgid "<branch>"
 msgstr "<分支>"
 
-#: builtin/pull.c:475 builtin/rebase.c:949
+#: builtin/pull.c:475 builtin/rebase.c:976
 msgid "There is no tracking information for the current branch."
 msgstr "当前分支没有跟踪信息。"
 
@@ -19244,19 +19703,19 @@ msgstr ""
 "缺省的配置项。您也可以在每次执行 pull 命令时添加 --rebase、--no-rebase,\n"
 "或者 --ff-only 参数覆盖缺省设置。\n"
 
-#: builtin/pull.c:1046
+#: builtin/pull.c:1047
 msgid "Updating an unborn branch with changes added to the index."
 msgstr "更新尚未诞生的分支,变更添加至索引。"
 
-#: builtin/pull.c:1050
+#: builtin/pull.c:1051
 msgid "pull with rebase"
 msgstr "变基式拉取"
 
-#: builtin/pull.c:1051
+#: builtin/pull.c:1052
 msgid "please commit or stash them."
 msgstr "请提交或贮藏它们。"
 
-#: builtin/pull.c:1076
+#: builtin/pull.c:1077
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -19266,7 +19725,7 @@ msgstr ""
 "fetch 更新了当前的分支。快进您的工作区\n"
 "至提交 %s。"
 
-#: builtin/pull.c:1082
+#: builtin/pull.c:1083
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -19283,23 +19742,23 @@ msgstr ""
 "$ git reset --hard\n"
 "恢复之前的状态。"
 
-#: builtin/pull.c:1097
+#: builtin/pull.c:1098
 msgid "Cannot merge multiple branches into empty head."
 msgstr "无法将多个分支合并到空分支。"
 
-#: builtin/pull.c:1102
+#: builtin/pull.c:1103
 msgid "Cannot rebase onto multiple branches."
 msgstr "无法变基到多个分支。"
 
-#: builtin/pull.c:1104
+#: builtin/pull.c:1105
 msgid "Cannot fast-forward to multiple branches."
 msgstr "无法快进到多个分支。"
 
-#: builtin/pull.c:1119
+#: builtin/pull.c:1120
 msgid "Need to specify how to reconcile divergent branches."
 msgstr "需要指定如何调和偏离的分支。"
 
-#: builtin/pull.c:1133
+#: builtin/pull.c:1134
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr "本地子模组中有修改,无法变基"
 
@@ -19462,7 +19921,7 @@ msgstr "推送到 %s\n"
 msgid "failed to push some refs to '%s'"
 msgstr "无法推送一些引用到 '%s'"
 
-#: builtin/push.c:544 builtin/submodule--helper.c:3259
+#: builtin/push.c:544 builtin/submodule--helper.c:3377
 msgid "repository"
 msgstr "仓库"
 
@@ -19700,11 +20159,11 @@ msgstr "调试 unpack-trees"
 msgid "suppress feedback messages"
 msgstr "抑制反馈信息"
 
-#: builtin/read-tree.c:183
+#: builtin/read-tree.c:190
 msgid "You need to resolve your current index first"
 msgstr "您需要先解决当前索引的冲突"
 
-#: builtin/rebase.c:35
+#: builtin/rebase.c:36
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
 "[<upstream> [<branch>]]"
@@ -19712,54 +20171,50 @@ msgstr ""
 "git rebase [-i] [options] [--exec <命令>] [--onto <新基线> | --keep-base] [<"
 "上游> [<分支>]]"
 
-#: builtin/rebase.c:37
+#: builtin/rebase.c:38
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]"
 msgstr ""
 "git rebase [-i] [选项] [--exec <命令>] [--onto <新基线>] --root [<分支>]"
 
-#: builtin/rebase.c:39
-msgid "git rebase --continue | --abort | --skip | --edit-todo"
-msgstr "git rebase --continue | --abort | --skip | --edit-todo"
-
-#: builtin/rebase.c:230
+#: builtin/rebase.c:231
 #, c-format
 msgid "could not create temporary %s"
 msgstr "无法创建临时的 %s"
 
-#: builtin/rebase.c:236
+#: builtin/rebase.c:237
 msgid "could not mark as interactive"
 msgstr "无法标记为交互式"
 
-#: builtin/rebase.c:289
+#: builtin/rebase.c:290
 msgid "could not generate todo list"
 msgstr "无法生成待办列表"
 
-#: builtin/rebase.c:331
+#: builtin/rebase.c:332
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "使用 --upstream 或 --onto 必须提供一个基线提交"
 
-#: builtin/rebase.c:390
+#: builtin/rebase.c:391
 #, c-format
 msgid "%s requires the merge backend"
 msgstr "%s 需要合并后端"
 
-#: builtin/rebase.c:432
+#: builtin/rebase.c:433
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "无法获取 'onto':'%s'"
 
-#: builtin/rebase.c:449
+#: builtin/rebase.c:450
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "无效的原始 head:'%s'"
 
-#: builtin/rebase.c:474
+#: builtin/rebase.c:475
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "忽略无效的 allow_rerere_autoupdate:'%s'"
 
-#: builtin/rebase.c:597
+#: builtin/rebase.c:600
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -19772,7 +20227,7 @@ msgstr ""
 "\"git rebase --skip\" 命令跳过这个提交。如果想要终止执行并回到\n"
 "\"git rebase\" 执行之前的状态,执行 \"git rebase --abort\"。"
 
-#: builtin/rebase.c:680
+#: builtin/rebase.c:685
 #, c-format
 msgid ""
 "\n"
@@ -19790,14 +20245,19 @@ msgstr ""
 "\n"
 "因此 git 无法对其变基。"
 
-#: builtin/rebase.c:925
+#: builtin/rebase.c:836
+#, c-format
+msgid "could not switch to %s"
+msgstr "无法切换到 %s"
+
+#: builtin/rebase.c:952
 #, c-format
 msgid ""
-"unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
-"\"."
+"unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and "
+"\"ask\"."
 msgstr "无法识别的空类型 '%s';有效值有 \"drop\"、\"keep\" 和 \"ask\"。"
 
-#: builtin/rebase.c:943
+#: builtin/rebase.c:970
 #, c-format
 msgid ""
 "%s\n"
@@ -19814,7 +20274,7 @@ msgstr ""
 "    git rebase '<branch>'\n"
 "\n"
 
-#: builtin/rebase.c:959
+#: builtin/rebase.c:986
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -19827,179 +20287,179 @@ msgstr ""
 "    git branch --set-upstream-to=%s/<branch> %s\n"
 "\n"
 
-#: builtin/rebase.c:989
+#: builtin/rebase.c:1016
 msgid "exec commands cannot contain newlines"
 msgstr "exec 命令不能包含换行符"
 
-#: builtin/rebase.c:993
+#: builtin/rebase.c:1020
 msgid "empty exec command"
 msgstr "空的 exec 命令"
 
-#: builtin/rebase.c:1023
+#: builtin/rebase.c:1051
 msgid "rebase onto given branch instead of upstream"
 msgstr "变基到给定的分支而非上游"
 
-#: builtin/rebase.c:1025
+#: builtin/rebase.c:1053
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr "使用上游和分支的合并基线做为当前基线"
 
-#: builtin/rebase.c:1027
+#: builtin/rebase.c:1055
 msgid "allow pre-rebase hook to run"
 msgstr "允许执行 pre-rebase 钩子"
 
-#: builtin/rebase.c:1029
+#: builtin/rebase.c:1057
 msgid "be quiet. implies --no-stat"
 msgstr "安静。暗示 --no-stat"
 
-#: builtin/rebase.c:1032
+#: builtin/rebase.c:1060
 msgid "display a diffstat of what changed upstream"
 msgstr "显示上游变化的差异统计"
 
-#: builtin/rebase.c:1035
+#: builtin/rebase.c:1063
 msgid "do not show diffstat of what changed upstream"
 msgstr "不显示上游变化的差异统计"
 
-#: builtin/rebase.c:1038
+#: builtin/rebase.c:1066
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "为每一个提交添加 Signed-off-by 尾注"
 
-#: builtin/rebase.c:1041
+#: builtin/rebase.c:1069
 msgid "make committer date match author date"
 msgstr "使提交者日期和作者日期一致"
 
-#: builtin/rebase.c:1043
+#: builtin/rebase.c:1071
 msgid "ignore author date and use current date"
 msgstr "忽略作者日期,使用当前日期"
 
-#: builtin/rebase.c:1045
+#: builtin/rebase.c:1073
 msgid "synonym of --reset-author-date"
 msgstr "--reset-author-date 的同义词"
 
-#: builtin/rebase.c:1047 builtin/rebase.c:1051
+#: builtin/rebase.c:1075 builtin/rebase.c:1079
 msgid "passed to 'git apply'"
 msgstr "传递给 'git apply'"
 
-#: builtin/rebase.c:1049
+#: builtin/rebase.c:1077
 msgid "ignore changes in whitespace"
 msgstr "忽略空白字符的变更"
 
-#: builtin/rebase.c:1053 builtin/rebase.c:1056
+#: builtin/rebase.c:1081 builtin/rebase.c:1084
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "拣选所有提交,即使未修改"
 
-#: builtin/rebase.c:1058
+#: builtin/rebase.c:1086
 msgid "continue"
 msgstr "继续"
 
-#: builtin/rebase.c:1061
+#: builtin/rebase.c:1089
 msgid "skip current patch and continue"
 msgstr "跳过当前补丁并继续"
 
-#: builtin/rebase.c:1063
+#: builtin/rebase.c:1091
 msgid "abort and check out the original branch"
 msgstr "终止并检出原有分支"
 
-#: builtin/rebase.c:1066
+#: builtin/rebase.c:1094
 msgid "abort but keep HEAD where it is"
 msgstr "终止但保持 HEAD 不变"
 
-#: builtin/rebase.c:1067
+#: builtin/rebase.c:1095
 msgid "edit the todo list during an interactive rebase"
 msgstr "在交互式变基中编辑待办列表"
 
-#: builtin/rebase.c:1070
+#: builtin/rebase.c:1098
 msgid "show the patch file being applied or merged"
 msgstr "显示正在应用或合并的补丁文件"
 
-#: builtin/rebase.c:1073
+#: builtin/rebase.c:1101
 msgid "use apply strategies to rebase"
 msgstr "使用应用策略进行变基"
 
-#: builtin/rebase.c:1077
+#: builtin/rebase.c:1105
 msgid "use merging strategies to rebase"
 msgstr "使用合并策略进行变基"
 
-#: builtin/rebase.c:1081
+#: builtin/rebase.c:1109
 msgid "let the user edit the list of commits to rebase"
 msgstr "让用户编辑要变基的提交列表"
 
-#: builtin/rebase.c:1085
+#: builtin/rebase.c:1113
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(已弃用)尝试重建合并提交而非忽略它们"
 
-#: builtin/rebase.c:1090
+#: builtin/rebase.c:1118
 msgid "how to handle commits that become empty"
 msgstr "如何处理成为空提交的提交"
 
-#: builtin/rebase.c:1093
+#: builtin/rebase.c:1121
 msgid "keep commits which start empty"
 msgstr "保留初始为空的提交"
 
-#: builtin/rebase.c:1097
+#: builtin/rebase.c:1125
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "在 -i 交互模式下,移动以 squash!/fixup! 开头的提交"
 
-#: builtin/rebase.c:1104
+#: builtin/rebase.c:1132
 msgid "add exec lines after each commit of the editable list"
 msgstr "可编辑列表的每一个提交下面增加一行 exec"
 
-#: builtin/rebase.c:1108
+#: builtin/rebase.c:1136
 msgid "allow rebasing commits with empty messages"
 msgstr "允许针对空提交说明的提交变基"
 
-#: builtin/rebase.c:1112
+#: builtin/rebase.c:1140
 msgid "try to rebase merges instead of skipping them"
 msgstr "尝试对合并提交变基而不是忽略它们"
 
-#: builtin/rebase.c:1115
+#: builtin/rebase.c:1143
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "使用 'merge-base --fork-point' 来优化上游"
 
-#: builtin/rebase.c:1117
+#: builtin/rebase.c:1145
 msgid "use the given merge strategy"
 msgstr "使用给定的合并策略"
 
-#: builtin/rebase.c:1119 builtin/revert.c:115
+#: builtin/rebase.c:1147 builtin/revert.c:115
 msgid "option"
 msgstr "选项"
 
-#: builtin/rebase.c:1120
+#: builtin/rebase.c:1148
 msgid "pass the argument through to the merge strategy"
 msgstr "将参数传递给合并策略"
 
-#: builtin/rebase.c:1123
+#: builtin/rebase.c:1151
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "将所有可达的提交变基到根提交"
 
-#: builtin/rebase.c:1126
+#: builtin/rebase.c:1154
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "自动重新安排任何失败的 `exec`"
 
-#: builtin/rebase.c:1128
+#: builtin/rebase.c:1156
 msgid "apply all changes, even those already present upstream"
 msgstr "应用所有更改,甚至那些已在上游存在的"
 
-#: builtin/rebase.c:1149
+#: builtin/rebase.c:1177
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "看起来 'git am' 正在执行中。无法变基。"
 
-#: builtin/rebase.c:1180
+#: builtin/rebase.c:1208
 msgid "--preserve-merges was replaced by --rebase-merges"
 msgstr "--preserve-merges 被 --rebase-merges 代替。"
 
-#: builtin/rebase.c:1202
+#: builtin/rebase.c:1230
 msgid "No rebase in progress?"
 msgstr "没有正在进行的变基?"
 
-#: builtin/rebase.c:1206
+#: builtin/rebase.c:1234
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr "动作 --edit-todo 只能用在交互式变基过程中。"
 
-#: builtin/rebase.c:1229 t/helper/test-fast-rebase.c:122
+#: builtin/rebase.c:1257 t/helper/test-fast-rebase.c:122
 msgid "Cannot read HEAD"
 msgstr "不能读取 HEAD"
 
-#: builtin/rebase.c:1241
+#: builtin/rebase.c:1269
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -20007,16 +20467,16 @@ msgstr ""
 "您必须编辑所有的合并冲突,然后通过 git add\n"
 "命令将它们标记为已解决"
 
-#: builtin/rebase.c:1260
+#: builtin/rebase.c:1287
 msgid "could not discard worktree changes"
 msgstr "无法丢弃工作区变更"
 
-#: builtin/rebase.c:1279
+#: builtin/rebase.c:1308
 #, c-format
 msgid "could not move back to %s"
 msgstr "无法移回 %s"
 
-#: builtin/rebase.c:1325
+#: builtin/rebase.c:1354
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -20035,122 +20495,117 @@ msgstr ""
 "\t%s\n"
 "然后再重新执行。 为避免丢失重要数据,我已经停止当前操作。\n"
 
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1382
 msgid "switch `C' expects a numerical value"
 msgstr "开关 `C' 期望一个数字值"
 
-#: builtin/rebase.c:1395
+#: builtin/rebase.c:1424
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "未知模式:%s"
 
-#: builtin/rebase.c:1434
+#: builtin/rebase.c:1463
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy 需要 --merge 或 --interactive"
 
-#: builtin/rebase.c:1463
+#: builtin/rebase.c:1492
 msgid "apply options and merge options cannot be used together"
 msgstr "应用选项和合并选项不能同时使用"
 
-#: builtin/rebase.c:1476
+#: builtin/rebase.c:1505
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "未知的变基后端:%s"
 
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1534
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec 需要 --exec 或 --interactive"
 
-#: builtin/rebase.c:1536
+#: builtin/rebase.c:1565
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "无效的上游 '%s'"
 
-#: builtin/rebase.c:1542
+#: builtin/rebase.c:1571
 msgid "Could not create new root commit"
 msgstr "不能创建新的根提交"
 
-#: builtin/rebase.c:1568
+#: builtin/rebase.c:1597
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr "'%s':只需要与分支的一个合并基线"
 
-#: builtin/rebase.c:1571
+#: builtin/rebase.c:1600
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "'%s':只需要一个合并基线"
 
-#: builtin/rebase.c:1580
+#: builtin/rebase.c:1609
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "没有指向一个有效的提交 '%s'"
 
-#: builtin/rebase.c:1607
+#: builtin/rebase.c:1636
 #, c-format
 msgid "no such branch/commit '%s'"
 msgstr "无此分支/提交 '%s'"
 
-#: builtin/rebase.c:1618 builtin/submodule--helper.c:39
-#: builtin/submodule--helper.c:2659
+#: builtin/rebase.c:1647 builtin/submodule--helper.c:43
+#: builtin/submodule--helper.c:2477
 #, c-format
 msgid "No such ref: %s"
 msgstr "没有这样的引用:%s"
 
-#: builtin/rebase.c:1629
+#: builtin/rebase.c:1658
 msgid "Could not resolve HEAD to a revision"
 msgstr "无法将 HEAD 解析为一个版本"
 
-#: builtin/rebase.c:1650
+#: builtin/rebase.c:1679
 msgid "Please commit or stash them."
 msgstr "请提交或贮藏修改。"
 
-#: builtin/rebase.c:1686
-#, c-format
-msgid "could not switch to %s"
-msgstr "无法切换到 %s"
-
-#: builtin/rebase.c:1697
+#: builtin/rebase.c:1714
 msgid "HEAD is up to date."
 msgstr "HEAD 是最新的。"
 
-#: builtin/rebase.c:1699
+#: builtin/rebase.c:1716
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "当前分支 %s 是最新的。\n"
 
-#: builtin/rebase.c:1707
+#: builtin/rebase.c:1724
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD 是最新的,强制变基。"
 
-#: builtin/rebase.c:1709
+#: builtin/rebase.c:1726
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "当前分支 %s 是最新的,强制变基。\n"
 
-#: builtin/rebase.c:1717
+#: builtin/rebase.c:1734
 msgid "The pre-rebase hook refused to rebase."
 msgstr "pre-rebase 钩子拒绝了变基操作。"
 
-#: builtin/rebase.c:1724
+#: builtin/rebase.c:1741
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "到 %s 的变更:\n"
 
-#: builtin/rebase.c:1727
+#: builtin/rebase.c:1744
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "从 %s 到 %s 的变更:\n"
 
-#: builtin/rebase.c:1752
+#: builtin/rebase.c:1769
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr "首先,回退头指针以便在其上重放您的工作...\n"
 
-#: builtin/rebase.c:1761
+#: builtin/rebase.c:1781
 msgid "Could not detach HEAD"
 msgstr "无法分离头指针"
 
-#: builtin/rebase.c:1770
+#: builtin/rebase.c:1790
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "快进 %s 到 %s。\n"
@@ -20159,7 +20614,7 @@ msgstr "快进 %s 到 %s。\n"
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack <仓库目录>"
 
-#: builtin/receive-pack.c:1275
+#: builtin/receive-pack.c:1263
 msgid ""
 "By default, updating the current branch in a non-bare repository\n"
 "is denied, because it will make the index and work tree inconsistent\n"
@@ -20185,7 +20640,7 @@ msgstr ""
 "若要屏蔽此信息且保持默认行为,设置 'receive.denyCurrentBranch'\n"
 "配置变量为 'refuse'。"
 
-#: builtin/receive-pack.c:1295
+#: builtin/receive-pack.c:1283
 msgid ""
 "By default, deleting the current branch is denied, because the next\n"
 "'git clone' won't result in any file checked out, causing confusion.\n"
@@ -20204,79 +20659,110 @@ msgstr ""
 "\n"
 "若要屏蔽此信息,您可以设置它为 'refuse'。"
 
-#: builtin/receive-pack.c:2474
+#: builtin/receive-pack.c:2476
 msgid "quiet"
 msgstr "静默模式"
 
-#: builtin/receive-pack.c:2489
+#: builtin/receive-pack.c:2491
 msgid "you must specify a directory"
 msgstr "您必须指定一个目录"
 
-#: builtin/reflog.c:17
+#: builtin/reflog.c:9
+msgid "git reflog [show] [<log-options>] [<ref>]"
+msgstr "git reflog [show] [<log 选项>] [<引用>]"
+
+#: builtin/reflog.c:12
 msgid ""
-"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<refs>..."
+"git reflog expire [--expire=<time>] [--expire-unreachable=<time>]\n"
+"                  [--rewrite] [--updateref] [--stale-fix]\n"
+"                  [--dry-run | -n] [--verbose] [--all [--single-worktree] | "
+"<refs>...]"
 msgstr ""
-"git reflog expire [--expire=<时间>] [--expire-unreachable=<时间>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] <引"
-"用>..."
+"git reflog expire [--expire=<时间>] [--expire-unreachable=<时间>]\n"
+"                  [--rewrite] [--updateref] [--stale-fix]\n"
+"                  [--dry-run | -n] [--verbose] [--all [--single-worktree] | <"
+"引用>...]"
 
-#: builtin/reflog.c:22
+#: builtin/reflog.c:17
 msgid ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] "
-"<refs>..."
+"git reflog delete [--rewrite] [--updateref]\n"
+"                  [--dry-run | -n] [--verbose] <ref>@{<specifier>}..."
 msgstr ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] <引"
-"用>..."
+"git reflog delete [--rewrite] [--updateref]\n"
+"                  [--dry-run | -n] [--verbose] <引用>@{<指定符>}..."
 
-#: builtin/reflog.c:25
+#: builtin/reflog.c:21
 msgid "git reflog exists <ref>"
 msgstr "git reflog exists <引用>"
 
-#: builtin/reflog.c:585 builtin/reflog.c:590
+#: builtin/reflog.c:197 builtin/reflog.c:211
 #, c-format
-msgid "'%s' is not a valid timestamp"
-msgstr "'%s' 不是一个有效的时间戳"
+msgid "invalid timestamp '%s' given to '--%s'"
+msgstr "给 '--%2$s' 的时间戳 '%1$s' 无效"
+
+#: builtin/reflog.c:240 builtin/reflog.c:359
+msgid "do not actually prune any entries"
+msgstr "不要实际清除任何条目"
+
+#: builtin/reflog.c:243 builtin/reflog.c:362
+msgid ""
+"rewrite the old SHA1 with the new SHA1 of the entry that now precedes it"
+msgstr "用现在前继条目的 SHA1 来重写旧的 SHA1"
 
-#: builtin/reflog.c:631
+#: builtin/reflog.c:246 builtin/reflog.c:365
+msgid "update the reference to the value of the top reflog entry"
+msgstr "更新引用至引用日志顶部的条目"
+
+#: builtin/reflog.c:248 builtin/reflog.c:367
+msgid "print extra information on screen"
+msgstr "在屏幕上打印额外信息"
+
+#: builtin/reflog.c:249 builtin/reflog.c:253
+msgid "timestamp"
+msgstr "时间戳"
+
+#: builtin/reflog.c:250
+msgid "prune entries older than the specified time"
+msgstr "清除早于指定时间之前的条目"
+
+#: builtin/reflog.c:254
+msgid ""
+"prune entries older than <time> that are not reachable from the current tip "
+"of the branch"
+msgstr "清除早于 <时间> 且自当前分支顶部不可达的条目"
+
+#: builtin/reflog.c:258
+msgid "prune any reflog entries that point to broken commits"
+msgstr "清除指向损坏提交的引用条目"
+
+#: builtin/reflog.c:259
+msgid "process the reflogs of all references"
+msgstr "处理所有引用的引用日志"
+
+#: builtin/reflog.c:261
+msgid "limits processing to reflogs from the current worktree only"
+msgstr "仅处理当前工作树的引用日志"
+
+#: builtin/reflog.c:294
 #, c-format
 msgid "Marking reachable objects..."
 msgstr "正在标记可达对象..."
 
-#: builtin/reflog.c:675
+#: builtin/reflog.c:338
 #, c-format
 msgid "%s points nowhere!"
 msgstr "%s 指向不存在!"
 
-#: builtin/reflog.c:731
+#: builtin/reflog.c:374
 msgid "no reflog specified to delete"
 msgstr "未指定要删除的引用日志"
 
-#: builtin/reflog.c:742
-#, c-format
-msgid "not a reflog: %s"
-msgstr "不是一个引用日志:%s"
-
-#: builtin/reflog.c:747
-#, c-format
-msgid "no reflog for '%s'"
-msgstr "没有 '%s' 的引用日志"
-
-#: builtin/reflog.c:794
+#: builtin/reflog.c:396
 #, c-format
 msgid "invalid ref format: %s"
 msgstr "无效的引用格式:%s"
 
-#: builtin/reflog.c:803
-msgid "git reflog [ show | expire | delete | exists ]"
-msgstr "git reflog [ show | expire | delete | exists ]"
-
-#: builtin/remote.c:17
-msgid "git remote [-v | --verbose]"
-msgstr "git remote [-v | --verbose]"
-
-#: builtin/remote.c:18
+#: builtin/remote.c:19
 msgid ""
 "git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--"
 "mirror=<fetch|push>] <name> <url>"
@@ -20284,86 +20770,86 @@ msgstr ""
 "git remote add [-t <分支>] [-m <master>] [-f] [--tags | --no-tags] [--"
 "mirror=<fetch|push>] <名称> <地址>"
 
-#: builtin/remote.c:19 builtin/remote.c:39
-msgid "git remote rename <old> <new>"
-msgstr "git remote rename \97§å\90\8d称> <æ\96°å\90\8d称>"
+#: builtin/remote.c:20 builtin/remote.c:40
+msgid "git remote rename [--[no-]progress] <old> <new>"
+msgstr "git remote rename [--[no-]progress] <æ\97§> <æ\96°>"
 
-#: builtin/remote.c:20 builtin/remote.c:44
+#: builtin/remote.c:21 builtin/remote.c:45
 msgid "git remote remove <name>"
 msgstr "git remote remove <名称>"
 
-#: builtin/remote.c:21 builtin/remote.c:49
+#: builtin/remote.c:22 builtin/remote.c:50
 msgid "git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"
 msgstr "git remote set-head <名称> (-a | --auto | -d | --delete | <分支>)"
 
-#: builtin/remote.c:22
+#: builtin/remote.c:23
 msgid "git remote [-v | --verbose] show [-n] <name>"
 msgstr "git remote [-v | --verbose] show [-n] <名称>"
 
-#: builtin/remote.c:23
+#: builtin/remote.c:24
 msgid "git remote prune [-n | --dry-run] <name>"
 msgstr "git remote prune [-n | --dry-run] <名称>"
 
-#: builtin/remote.c:24
+#: builtin/remote.c:25
 msgid ""
 "git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
 msgstr "git remote [-v | --verbose] update [-p | --prune] [(<组> | <远程>)...]"
 
-#: builtin/remote.c:25
+#: builtin/remote.c:26
 msgid "git remote set-branches [--add] <name> <branch>..."
 msgstr "git remote set-branches [--add] <名称> <分支>..."
 
-#: builtin/remote.c:26 builtin/remote.c:75
+#: builtin/remote.c:27 builtin/remote.c:76
 msgid "git remote get-url [--push] [--all] <name>"
 msgstr "git remote get-url [--push] [--all] <名称>"
 
-#: builtin/remote.c:27 builtin/remote.c:80
+#: builtin/remote.c:28 builtin/remote.c:81
 msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]"
 msgstr "git remote set-url [--push] <名称> <新的地址> [<旧的地址>]"
 
-#: builtin/remote.c:28 builtin/remote.c:81
+#: builtin/remote.c:29 builtin/remote.c:82
 msgid "git remote set-url --add <name> <newurl>"
 msgstr "git remote set-url --add <名称> <新的地址>"
 
-#: builtin/remote.c:29 builtin/remote.c:82
+#: builtin/remote.c:30 builtin/remote.c:83
 msgid "git remote set-url --delete <name> <url>"
 msgstr "git remote set-url --delete <名称> <地址>"
 
-#: builtin/remote.c:34
+#: builtin/remote.c:35
 msgid "git remote add [<options>] <name> <url>"
 msgstr "git remote add [<选项>] <名称> <地址>"
 
-#: builtin/remote.c:54
+#: builtin/remote.c:55
 msgid "git remote set-branches <name> <branch>..."
 msgstr "git remote set-branches <名称> <分支>..."
 
-#: builtin/remote.c:55
+#: builtin/remote.c:56
 msgid "git remote set-branches --add <name> <branch>..."
 msgstr "git remote set-branches --add <名称> <分支>..."
 
-#: builtin/remote.c:60
+#: builtin/remote.c:61
 msgid "git remote show [<options>] <name>"
 msgstr "git remote show [<选项>] <名称>"
 
-#: builtin/remote.c:65
+#: builtin/remote.c:66
 msgid "git remote prune [<options>] <name>"
 msgstr "git remote prune [<选项>] <名称>"
 
-#: builtin/remote.c:70
+#: builtin/remote.c:71
 msgid "git remote update [<options>] [<group> | <remote>]..."
 msgstr "git remote update [<选项>] [<组> | <远程>]..."
 
-#: builtin/remote.c:99
+#: builtin/remote.c:100
 #, c-format
 msgid "Updating %s"
 msgstr "更新 %s 中"
 
-#: builtin/remote.c:101
+#: builtin/remote.c:102
 #, c-format
 msgid "Could not fetch %s"
 msgstr "不能获取 %s"
 
-#: builtin/remote.c:131
+#: builtin/remote.c:132
 msgid ""
 "--mirror is dangerous and deprecated; please\n"
 "\t use --mirror=fetch or --mirror=push instead"
@@ -20371,77 +20857,77 @@ msgstr ""
 "--mirror 选项危险且过时,请使用 --mirror=fetch\n"
 "\t 或 --mirror=push"
 
-#: builtin/remote.c:148
+#: builtin/remote.c:149
 #, c-format
 msgid "unknown mirror argument: %s"
 msgstr "未知的镜像参数:%s"
 
-#: builtin/remote.c:164
+#: builtin/remote.c:165
 msgid "fetch the remote branches"
 msgstr "抓取远程的分支"
 
-#: builtin/remote.c:166
+#: builtin/remote.c:167
 msgid "import all tags and associated objects when fetching"
 msgstr "抓取时导入所有的标签和关联对象"
 
-#: builtin/remote.c:169
+#: builtin/remote.c:170
 msgid "or do not fetch any tag at all (--no-tags)"
 msgstr "或不抓取任何标签(--no-tags)"
 
-#: builtin/remote.c:171
+#: builtin/remote.c:172
 msgid "branch(es) to track"
 msgstr "跟踪的分支"
 
-#: builtin/remote.c:172
+#: builtin/remote.c:173
 msgid "master branch"
 msgstr "主线分支"
 
-#: builtin/remote.c:174
+#: builtin/remote.c:175
 msgid "set up remote as a mirror to push to or fetch from"
 msgstr "把远程设置为用以推送或抓取的镜像"
 
-#: builtin/remote.c:186
+#: builtin/remote.c:187
 msgid "specifying a master branch makes no sense with --mirror"
 msgstr "指定一个 master 分支并使用 --mirror 选项没有意义"
 
-#: builtin/remote.c:188
+#: builtin/remote.c:189
 msgid "specifying branches to track makes sense only with fetch mirrors"
 msgstr "指定要跟踪的分支只在与获取镜像同时使用才有意义"
 
-#: builtin/remote.c:195 builtin/remote.c:705
+#: builtin/remote.c:196 builtin/remote.c:716
 #, c-format
 msgid "remote %s already exists."
 msgstr "远程 %s 已经存在。"
 
-#: builtin/remote.c:240
+#: builtin/remote.c:241
 #, c-format
 msgid "Could not setup master '%s'"
 msgstr "无法设置 master '%s'"
 
-#: builtin/remote.c:322
+#: builtin/remote.c:323
 #, c-format
 msgid "unhandled branch.%s.rebase=%s; assuming 'true'"
 msgstr "未处理的 branch.%s.rebase=%s; 假定为 'true'"
 
-#: builtin/remote.c:366
+#: builtin/remote.c:367
 #, c-format
 msgid "Could not get fetch map for refspec %s"
 msgstr "无法得到引用规格 %s 的获取列表"
 
-#: builtin/remote.c:460 builtin/remote.c:468
+#: builtin/remote.c:461 builtin/remote.c:469
 msgid "(matching)"
 msgstr "(匹配)"
 
-#: builtin/remote.c:472
+#: builtin/remote.c:473
 msgid "(delete)"
 msgstr "(删除)"
 
-#: builtin/remote.c:660
+#: builtin/remote.c:664
 #, c-format
 msgid "could not set '%s'"
 msgstr "不能设置 '%s'"
 
-#: builtin/remote.c:665
+#: builtin/remote.c:669
 #, c-format
 msgid ""
 "The %s configuration remote.pushDefault in:\n"
@@ -20452,17 +20938,17 @@ msgstr ""
 "\t%s:%d\n"
 "现在在为不存在的远程名 '%s' 命名"
 
-#: builtin/remote.c:696 builtin/remote.c:841 builtin/remote.c:948
+#: builtin/remote.c:707 builtin/remote.c:866 builtin/remote.c:973
 #, c-format
 msgid "No such remote: '%s'"
 msgstr "没有此远程仓库:'%s'"
 
-#: builtin/remote.c:715
+#: builtin/remote.c:726
 #, c-format
 msgid "Could not rename config section '%s' to '%s'"
 msgstr "不能重命名配置小节 '%s' 到 '%s'"
 
-#: builtin/remote.c:735
+#: builtin/remote.c:746
 #, c-format
 msgid ""
 "Not updating non-default fetch refspec\n"
@@ -20473,17 +20959,21 @@ msgstr ""
 "\t%s\n"
 "\t如果必要请手动更新配置。"
 
-#: builtin/remote.c:775
+#: builtin/remote.c:783
+msgid "Renaming remote references"
+msgstr "正在重命名远程引用"
+
+#: builtin/remote.c:794
 #, c-format
 msgid "deleting '%s' failed"
 msgstr "删除 '%s' 失败"
 
-#: builtin/remote.c:809
+#: builtin/remote.c:832
 #, c-format
 msgid "creating '%s' failed"
 msgstr "创建 '%s' 失败"
 
-#: builtin/remote.c:887
+#: builtin/remote.c:912
 msgid ""
 "Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
 "to delete it, use:"
@@ -20493,118 +20983,118 @@ msgid_plural ""
 msgstr[0] "注意:ref/remotes 层级之外的一个分支未被移除。要删除它,使用:"
 msgstr[1] "注意:ref/remotes 层级之外的一些分支未被移除。要删除它们,使用:"
 
-#: builtin/remote.c:901
+#: builtin/remote.c:926
 #, c-format
 msgid "Could not remove config section '%s'"
 msgstr "不能移除配置小节 '%s'"
 
-#: builtin/remote.c:1009
+#: builtin/remote.c:1034
 #, c-format
 msgid " new (next fetch will store in remotes/%s)"
 msgstr " 新的(下一次获取将存储于 remotes/%s)"
 
-#: builtin/remote.c:1012
+#: builtin/remote.c:1037
 msgid " tracked"
 msgstr " 已跟踪"
 
-#: builtin/remote.c:1014
+#: builtin/remote.c:1039
 msgid " stale (use 'git remote prune' to remove)"
 msgstr " 过时(使用 'git remote prune' 来移除)"
 
-#: builtin/remote.c:1016
+#: builtin/remote.c:1041
 msgid " ???"
 msgstr " ???"
 
-#: builtin/remote.c:1057
+#: builtin/remote.c:1082
 #, c-format
 msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
 msgstr "无效的 branch.%s.merge,不能变基到一个以上的分支"
 
-#: builtin/remote.c:1066
+#: builtin/remote.c:1091
 #, c-format
 msgid "rebases interactively onto remote %s"
 msgstr "交互式变基到远程 %s"
 
-#: builtin/remote.c:1068
+#: builtin/remote.c:1093
 #, c-format
 msgid "rebases interactively (with merges) onto remote %s"
 msgstr "交互式变基(含合并提交)到远程 %s"
 
-#: builtin/remote.c:1071
+#: builtin/remote.c:1096
 #, c-format
 msgid "rebases onto remote %s"
 msgstr "变基到远程 %s"
 
-#: builtin/remote.c:1075
+#: builtin/remote.c:1100
 #, c-format
 msgid " merges with remote %s"
 msgstr " 与远程 %s 合并"
 
-#: builtin/remote.c:1078
+#: builtin/remote.c:1103
 #, c-format
 msgid "merges with remote %s"
 msgstr "与远程 %s 合并"
 
-#: builtin/remote.c:1081
+#: builtin/remote.c:1106
 #, c-format
 msgid "%-*s    and with remote %s\n"
 msgstr "%-*s    以及和远程 %s\n"
 
-#: builtin/remote.c:1124
+#: builtin/remote.c:1149
 msgid "create"
 msgstr "创建"
 
-#: builtin/remote.c:1127
+#: builtin/remote.c:1152
 msgid "delete"
 msgstr "删除"
 
-#: builtin/remote.c:1131
+#: builtin/remote.c:1156
 msgid "up to date"
 msgstr "最新"
 
-#: builtin/remote.c:1134
+#: builtin/remote.c:1159
 msgid "fast-forwardable"
 msgstr "可快进"
 
-#: builtin/remote.c:1137
+#: builtin/remote.c:1162
 msgid "local out of date"
 msgstr "本地已过时"
 
-#: builtin/remote.c:1144
+#: builtin/remote.c:1169
 #, c-format
 msgid "    %-*s forces to %-*s (%s)"
 msgstr "    %-*s 强制推送至 %-*s (%s)"
 
-#: builtin/remote.c:1147
+#: builtin/remote.c:1172
 #, c-format
 msgid "    %-*s pushes to %-*s (%s)"
 msgstr "    %-*s 推送至 %-*s (%s)"
 
-#: builtin/remote.c:1151
+#: builtin/remote.c:1176
 #, c-format
 msgid "    %-*s forces to %s"
 msgstr "    %-*s 强制推送至 %s"
 
-#: builtin/remote.c:1154
+#: builtin/remote.c:1179
 #, c-format
 msgid "    %-*s pushes to %s"
 msgstr "    %-*s 推送至 %s"
 
-#: builtin/remote.c:1222
+#: builtin/remote.c:1247
 msgid "do not query remotes"
 msgstr "不查询远程"
 
-#: builtin/remote.c:1243
+#: builtin/remote.c:1268
 #, c-format
 msgid "* remote %s"
 msgstr "* 远程 %s"
 
-#: builtin/remote.c:1244
+#: builtin/remote.c:1269
 #, c-format
 msgid "  Fetch URL: %s"
 msgstr "  获取地址:%s"
 
-#: builtin/remote.c:1245 builtin/remote.c:1261 builtin/remote.c:1398
+#: builtin/remote.c:1270 builtin/remote.c:1286 builtin/remote.c:1423
 msgid "(no URL)"
 msgstr "(无 URL)"
 
@@ -20612,31 +21102,31 @@ msgstr "(无 URL)"
 #. with the one in " Fetch URL: %s"
 #. translation.
 #.
-#: builtin/remote.c:1259 builtin/remote.c:1261
+#: builtin/remote.c:1284 builtin/remote.c:1286
 #, c-format
 msgid "  Push  URL: %s"
 msgstr "  推送地址:%s"
 
-#: builtin/remote.c:1263 builtin/remote.c:1265 builtin/remote.c:1267
+#: builtin/remote.c:1288 builtin/remote.c:1290 builtin/remote.c:1292
 #, c-format
 msgid "  HEAD branch: %s"
 msgstr "  HEAD 分支:%s"
 
-#: builtin/remote.c:1263
+#: builtin/remote.c:1288
 msgid "(not queried)"
 msgstr "(未查询)"
 
-#: builtin/remote.c:1265
+#: builtin/remote.c:1290
 msgid "(unknown)"
 msgstr "(未知)"
 
-#: builtin/remote.c:1269
+#: builtin/remote.c:1294
 #, c-format
 msgid ""
 "  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
 msgstr "  HEAD 分支(远程 HEAD 模糊,可能是下列中的一个):\n"
 
-#: builtin/remote.c:1281
+#: builtin/remote.c:1306
 #, c-format
 msgid "  Remote branch:%s"
 msgid_plural "  Remote branches:%s"
@@ -20644,159 +21134,159 @@ msgstr[0] "  远程分支:%s"
 msgstr[1] "  远程分支:%s"
 
 #  译者:中文字符串拼接,可删除前导空格
-#: builtin/remote.c:1284 builtin/remote.c:1310
+#: builtin/remote.c:1309 builtin/remote.c:1335
 msgid " (status not queried)"
 msgstr "(状态未查询)"
 
-#: builtin/remote.c:1293
+#: builtin/remote.c:1318
 msgid "  Local branch configured for 'git pull':"
 msgid_plural "  Local branches configured for 'git pull':"
 msgstr[0] "  为 'git pull' 配置的本地分支:"
 msgstr[1] "  为 'git pull' 配置的本地分支:"
 
-#: builtin/remote.c:1301
+#: builtin/remote.c:1326
 msgid "  Local refs will be mirrored by 'git push'"
 msgstr "  本地引用将在 'git push' 时被镜像"
 
-#: builtin/remote.c:1307
+#: builtin/remote.c:1332
 #, c-format
 msgid "  Local ref configured for 'git push'%s:"
 msgid_plural "  Local refs configured for 'git push'%s:"
 msgstr[0] "  为 'git push' 配置的本地引用%s:"
 msgstr[1] "  为 'git push' 配置的本地引用%s:"
 
-#: builtin/remote.c:1328
+#: builtin/remote.c:1353
 msgid "set refs/remotes/<name>/HEAD according to remote"
 msgstr "根据远程设置 refs/remotes/<名称>/HEAD"
 
-#: builtin/remote.c:1330
+#: builtin/remote.c:1355
 msgid "delete refs/remotes/<name>/HEAD"
 msgstr "删除 refs/remotes/<名称>/HEAD"
 
-#: builtin/remote.c:1344
+#: builtin/remote.c:1369
 msgid "Cannot determine remote HEAD"
 msgstr "无法确定远程 HEAD"
 
-#: builtin/remote.c:1346
+#: builtin/remote.c:1371
 msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
 msgstr "多个远程 HEAD 分支。请明确地选择一个用命令:"
 
-#: builtin/remote.c:1356
+#: builtin/remote.c:1381
 #, c-format
 msgid "Could not delete %s"
 msgstr "无法删除 %s"
 
-#: builtin/remote.c:1364
+#: builtin/remote.c:1389
 #, c-format
 msgid "Not a valid ref: %s"
 msgstr "不是一个有效引用:%s"
 
-#: builtin/remote.c:1366
+#: builtin/remote.c:1391
 #, c-format
 msgid "Could not setup %s"
 msgstr "不能设置 %s"
 
 #  译者:注意保持前导空格
-#: builtin/remote.c:1384
+#: builtin/remote.c:1409
 #, c-format
 msgid " %s will become dangling!"
 msgstr " %s 将成为悬空状态!"
 
 #  译者:注意保持前导空格
-#: builtin/remote.c:1385
+#: builtin/remote.c:1410
 #, c-format
 msgid " %s has become dangling!"
 msgstr " %s 已成为悬空状态!"
 
-#: builtin/remote.c:1394
+#: builtin/remote.c:1419
 #, c-format
 msgid "Pruning %s"
 msgstr "修剪 %s"
 
-#: builtin/remote.c:1395
+#: builtin/remote.c:1420
 #, c-format
 msgid "URL: %s"
 msgstr "URL:%s"
 
-#: builtin/remote.c:1411
+#: builtin/remote.c:1436
 #, c-format
 msgid " * [would prune] %s"
 msgstr " * [将删除] %s"
 
-#: builtin/remote.c:1414
+#: builtin/remote.c:1439
 #, c-format
 msgid " * [pruned] %s"
 msgstr " * [已删除] %s"
 
-#: builtin/remote.c:1459
+#: builtin/remote.c:1484
 msgid "prune remotes after fetching"
 msgstr "抓取后清除远程"
 
-#: builtin/remote.c:1523 builtin/remote.c:1579 builtin/remote.c:1649
+#: builtin/remote.c:1548 builtin/remote.c:1604 builtin/remote.c:1674
 #, c-format
 msgid "No such remote '%s'"
 msgstr "没有此远程 '%s'"
 
-#: builtin/remote.c:1541
+#: builtin/remote.c:1566
 msgid "add branch"
 msgstr "添加分支"
 
-#: builtin/remote.c:1548
+#: builtin/remote.c:1573
 msgid "no remote specified"
 msgstr "未指定远程"
 
-#: builtin/remote.c:1565
+#: builtin/remote.c:1590
 msgid "query push URLs rather than fetch URLs"
 msgstr "查询推送 URL 地址,而非获取 URL 地址"
 
-#: builtin/remote.c:1567
+#: builtin/remote.c:1592
 msgid "return all URLs"
 msgstr "返回所有 URL 地址"
 
-#: builtin/remote.c:1597
+#: builtin/remote.c:1622
 #, c-format
 msgid "no URLs configured for remote '%s'"
 msgstr "没有给远程仓库 '%s' 设定 URL"
 
-#: builtin/remote.c:1623
+#: builtin/remote.c:1648
 msgid "manipulate push URLs"
 msgstr "操作推送 URLS"
 
-#: builtin/remote.c:1625
+#: builtin/remote.c:1650
 msgid "add URL"
 msgstr "添加 URL"
 
-#: builtin/remote.c:1627
+#: builtin/remote.c:1652
 msgid "delete URLs"
 msgstr "删除 URLS"
 
-#: builtin/remote.c:1634
+#: builtin/remote.c:1659
 msgid "--add --delete doesn't make sense"
 msgstr "--add --delete 无意义"
 
-#: builtin/remote.c:1675
+#: builtin/remote.c:1700
 #, c-format
 msgid "Invalid old URL pattern: %s"
 msgstr "无效的旧 URL 匹配模版:%s"
 
-#: builtin/remote.c:1683
+#: builtin/remote.c:1708
 #, c-format
 msgid "No such URL found: %s"
 msgstr "未找到此 URL:%s"
 
-#: builtin/remote.c:1685
+#: builtin/remote.c:1710
 msgid "Will not delete all non-push URLs"
 msgstr "将不会删除所有非推送 URL 地址"
 
-#: builtin/remote.c:1702
+#: builtin/remote.c:1727
 msgid "be verbose; must be placed before a subcommand"
 msgstr "冗长输出;必须置于子命令之前"
 
-#: builtin/repack.c:28
+#: builtin/repack.c:29
 msgid "git repack [<options>]"
 msgstr "git repack [<选项>]"
 
-#: builtin/repack.c:33
+#: builtin/repack.c:34
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -20804,144 +21294,144 @@ msgstr ""
 "增量 repack 和 bitmap 索引不兼容。  使用 --no-write-bitmap-index\n"
 "或禁用 pack.writebitmaps 配置。"
 
-#: builtin/repack.c:201
+#: builtin/repack.c:206
 msgid "could not start pack-objects to repack promisor objects"
 msgstr "无法开始 pack-objects 来重新打包 promisor 对象"
 
-#: builtin/repack.c:275 builtin/repack.c:820
+#: builtin/repack.c:280 builtin/repack.c:824
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr "repack:期望来自 pack-objects 的完整十六进制对象 ID。"
 
-#: builtin/repack.c:299
+#: builtin/repack.c:304
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr "无法完成 pack-objects 来重新打包 promisor 对象"
 
-#: builtin/repack.c:314
+#: builtin/repack.c:319
 #, c-format
 msgid "cannot open index for %s"
 msgstr "不能打开 %s 的索引"
 
-#: builtin/repack.c:373
+#: builtin/repack.c:378
 #, c-format
 msgid "pack %s too large to consider in geometric progression"
 msgstr "包 %s 太大,不在几何级数中考虑"
 
-#: builtin/repack.c:406 builtin/repack.c:413 builtin/repack.c:418
+#: builtin/repack.c:411 builtin/repack.c:418 builtin/repack.c:423
 #, c-format
 msgid "pack %s too large to roll up"
 msgstr "包 %s 太大导致数字溢出"
 
-#: builtin/repack.c:498
+#: builtin/repack.c:503
 #, c-format
 msgid "could not open tempfile %s for writing"
 msgstr "无法打开临时文件 %s 进行写入"
 
-#: builtin/repack.c:516
+#: builtin/repack.c:521
 msgid "could not close refs snapshot tempfile"
 msgstr "不能关闭引用快照临时文件"
 
-#: builtin/repack.c:630
+#: builtin/repack.c:634
 msgid "pack everything in a single pack"
 msgstr "所有内容打包到一个包文件中"
 
-#: builtin/repack.c:632
+#: builtin/repack.c:636
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "和 -a 相同,并将不可达的对象设为松散对象"
 
-#: builtin/repack.c:635
+#: builtin/repack.c:639
 msgid "remove redundant packs, and run git-prune-packed"
 msgstr "删除多余的包,运行 git-prune-packed"
 
-#: builtin/repack.c:637
+#: builtin/repack.c:641
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "向 git-pack-objects 传递参数 --no-reuse-delta"
 
-#: builtin/repack.c:639
+#: builtin/repack.c:643
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "向 git-pack-objects 传递参数 --no-reuse-object"
 
-#: builtin/repack.c:641
+#: builtin/repack.c:645
 msgid "do not run git-update-server-info"
 msgstr "不运行 git-update-server-info"
 
-#: builtin/repack.c:644
+#: builtin/repack.c:648
 msgid "pass --local to git-pack-objects"
 msgstr "向 git-pack-objects 传递参数 --local"
 
-#: builtin/repack.c:646
+#: builtin/repack.c:650
 msgid "write bitmap index"
 msgstr "写 bitmap 索引"
 
-#: builtin/repack.c:648
+#: builtin/repack.c:652
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "向 git-pack-objects 传递参数 --delta-islands"
 
-#: builtin/repack.c:649
+#: builtin/repack.c:653
 msgid "approxidate"
 msgstr "近似日期"
 
-#: builtin/repack.c:650
+#: builtin/repack.c:654
 msgid "with -A, do not loosen objects older than this"
 msgstr "使用 -A,不要将早于给定时间的对象过期"
 
-#: builtin/repack.c:652
+#: builtin/repack.c:656
 msgid "with -a, repack unreachable objects"
 msgstr "使用 -a ,重新对不可达对象打包"
 
-#: builtin/repack.c:654
+#: builtin/repack.c:658
 msgid "size of the window used for delta compression"
 msgstr "用于增量压缩的窗口值"
 
-#: builtin/repack.c:655 builtin/repack.c:661
+#: builtin/repack.c:659 builtin/repack.c:665
 msgid "bytes"
 msgstr "字节"
 
-#: builtin/repack.c:656
+#: builtin/repack.c:660
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr "和上面的相似,但限制内存大小而非条目数"
 
-#: builtin/repack.c:658
+#: builtin/repack.c:662
 msgid "limits the maximum delta depth"
 msgstr "限制最大增量深度"
 
-#: builtin/repack.c:660
+#: builtin/repack.c:664
 msgid "limits the maximum number of threads"
 msgstr "限制最大线程数"
 
-#: builtin/repack.c:662
+#: builtin/repack.c:666
 msgid "maximum size of each packfile"
 msgstr "每个包文件的最大尺寸"
 
-#: builtin/repack.c:664
+#: builtin/repack.c:668
 msgid "repack objects in packs marked with .keep"
 msgstr "对标记为 .keep 的包中的对象重新打包"
 
-#: builtin/repack.c:666
+#: builtin/repack.c:670
 msgid "do not repack this pack"
 msgstr "不要对该包文件重新打包"
 
-#: builtin/repack.c:668
+#: builtin/repack.c:672
 msgid "find a geometric progression with factor <N>"
 msgstr "使用因子 <n> 查找几何级数"
 
-#: builtin/repack.c:670
+#: builtin/repack.c:674
 msgid "write a multi-pack index of the resulting packs"
 msgstr "写入结果包的多包索引"
 
-#: builtin/repack.c:680
+#: builtin/repack.c:684
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "不能删除珍品仓库中的打包文件"
 
-#: builtin/repack.c:829
+#: builtin/repack.c:833
 msgid "Nothing new to pack."
 msgstr "没有新的要打包。"
 
-#: builtin/repack.c:859
+#: builtin/repack.c:863
 #, c-format
 msgid "missing required file: %s"
 msgstr "缺少需要的文件:%s"
 
-#: builtin/repack.c:861
+#: builtin/repack.c:865
 #, c-format
 msgid "could not unlink: %s"
 msgstr "不能删除:%s"
@@ -20958,10 +21448,6 @@ msgstr "git replace [-f] --edit <对象>"
 msgid "git replace [-f] --graft <commit> [<parent>...]"
 msgstr "git replace [-f] --graft <提交> [<父提交>...]"
 
-#: builtin/replace.c:25
-msgid "git replace [-f] --convert-graft-file"
-msgstr "git replace [-f] --convert-graft-file"
-
 #: builtin/replace.c:26
 msgid "git replace -d <object>..."
 msgstr "git replace -d <对象>..."
@@ -21260,96 +21746,91 @@ msgid "HEAD is now at %s"
 msgstr "HEAD 现在位于 %s"
 
 #  译者:汉字之间无空格,故删除%s前后空格
-#: builtin/reset.c:299
+#: builtin/reset.c:304
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "在合并过程中不能做%s重置操作。"
 
-#: builtin/reset.c:396 builtin/stash.c:606 builtin/stash.c:680
-#: builtin/stash.c:704
+#: builtin/reset.c:402 builtin/stash.c:606 builtin/stash.c:669
+#: builtin/stash.c:693
 msgid "be quiet, only report errors"
 msgstr "安静模式,只报告错误"
 
-#: builtin/reset.c:398
+#: builtin/reset.c:404
+msgid "skip refreshing the index after reset"
+msgstr "重置后跳过刷新索引"
+
+#: builtin/reset.c:406
 msgid "reset HEAD and index"
 msgstr "重置 HEAD 和索引"
 
-#: builtin/reset.c:399
+#: builtin/reset.c:407
 msgid "reset only HEAD"
 msgstr "只重置 HEAD"
 
-#: builtin/reset.c:401 builtin/reset.c:403
+#: builtin/reset.c:409 builtin/reset.c:411
 msgid "reset HEAD, index and working tree"
 msgstr "重置 HEAD、索引和工作区"
 
-#: builtin/reset.c:405
+#: builtin/reset.c:413
 msgid "reset HEAD but keep local changes"
 msgstr "重置 HEAD 但保存本地变更"
 
-#: builtin/reset.c:411
+#: builtin/reset.c:419
 msgid "record only the fact that removed paths will be added later"
 msgstr "将删除的路径标记为稍后添加"
 
-#: builtin/reset.c:445
+#: builtin/reset.c:452
 #, c-format
 msgid "Failed to resolve '%s' as a valid revision."
 msgstr "无法将 '%s' 解析为一个有效的版本。"
 
-#: builtin/reset.c:453
+#: builtin/reset.c:460
 #, c-format
 msgid "Failed to resolve '%s' as a valid tree."
 msgstr "无法将 '%s' 解析为一个有效的树对象。"
 
-#: builtin/reset.c:472
+#: builtin/reset.c:479
 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
 msgstr "--mixed 带路径已弃用,而是用 'git reset -- <路径>'。"
 
 #  译者:汉字之间无空格,故删除%s前后空格
-#: builtin/reset.c:474
+#: builtin/reset.c:481
 #, c-format
 msgid "Cannot do %s reset with paths."
 msgstr "不能带路径进行%s重置。"
 
 #  译者:汉字之间无空格,故删除%s前后空格
-#: builtin/reset.c:489
+#: builtin/reset.c:496
 #, c-format
 msgid "%s reset is not allowed in a bare repository"
 msgstr "不能对纯仓库进行%s重置"
 
-#: builtin/reset.c:520
+#: builtin/reset.c:527
 msgid "Unstaged changes after reset:"
 msgstr "重置后取消暂存的变更:"
 
-#: builtin/reset.c:523
+#: builtin/reset.c:530
 #, c-format
 msgid ""
-"\n"
-"It took %.2f seconds to enumerate unstaged changes after reset.  You can\n"
-"use '--quiet' to avoid this.  Set the config setting reset.quiet to true\n"
-"to make this the default.\n"
-msgstr ""
-"\n"
-"重置后,枚举未暂存变更花费了 %.2f 秒。 您可以使用 '--quiet' 避免此情况。\n"
-"将配置变量 reset.quiet 设置为 true 可使其成为默认值。\n"
+"It took %.2f seconds to refresh the index after reset.  You can use\n"
+"'--no-refresh' to avoid this."
+msgstr "在重置后花了 %.2f 秒来刷新索引。使用 '--no-refresh' 以避免之。"
 
-#: builtin/reset.c:541
+#: builtin/reset.c:547
 #, c-format
 msgid "Could not reset index file to revision '%s'."
 msgstr "不能重置索引文件至版本 '%s'。"
 
-#: builtin/reset.c:546
+#: builtin/reset.c:552
 msgid "Could not write new index file."
 msgstr "不能写入新的索引文件。"
 
-#: builtin/rev-list.c:602
-msgid "object filtering requires --objects"
-msgstr "对象过滤需要 --objects"
-
-#: builtin/rev-list.c:674
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr "rev-list 不支持显示注解"
 
-#: builtin/rev-list.c:679
+#: builtin/rev-list.c:664
 #, c-format
 msgid "marked counting and '%s' cannot be used together"
 msgstr "标记计数和 '%s' 不能同时使用"
@@ -21691,11 +22172,11 @@ msgstr "字段"
 msgid "group by field"
 msgstr "按字段分组"
 
-#: builtin/shortlog.c:394
+#: builtin/shortlog.c:395
 msgid "too many arguments given outside repository"
 msgstr "仓库外执行提供了太多的参数"
 
-#: builtin/show-branch.c:13
+#: builtin/show-branch.c:14
 msgid ""
 "git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
 "                [--current] [--color[=<when>] | --no-color] [--sparse]\n"
@@ -21707,119 +22188,119 @@ msgstr ""
 "                [--more=<n> | --list | --independent | --merge-base]\n"
 "                [--no-name | --sha1-name] [--topics] [(<版本> | <通配符>)...]"
 
-#: builtin/show-branch.c:17
+#: builtin/show-branch.c:18
 msgid "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"
 msgstr "git show-branch (-g | --reflog)[=<n>[,<起始点>]] [--list] [<引用>]"
 
-#: builtin/show-branch.c:395
+#: builtin/show-branch.c:396
 #, c-format
 msgid "ignoring %s; cannot handle more than %d ref"
 msgid_plural "ignoring %s; cannot handle more than %d refs"
 msgstr[0] "忽略 %s,无法处理 %d 个以上的引用"
 msgstr[1] "忽略 %s,无法处理 %d 个以上的引用"
 
-#: builtin/show-branch.c:547
+#: builtin/show-branch.c:548
 #, c-format
 msgid "no matching refs with %s"
 msgstr "没有和 %s 匹配的引用"
 
-#: builtin/show-branch.c:644
+#: builtin/show-branch.c:645
 msgid "show remote-tracking and local branches"
 msgstr "显示远程跟踪的和本地的分支"
 
-#: builtin/show-branch.c:646
+#: builtin/show-branch.c:647
 msgid "show remote-tracking branches"
 msgstr "显示远程跟踪的分支"
 
-#: builtin/show-branch.c:648
+#: builtin/show-branch.c:649
 msgid "color '*!+-' corresponding to the branch"
 msgstr "着色 '*!+-' 到相应的分支"
 
-#: builtin/show-branch.c:650
+#: builtin/show-branch.c:651
 msgid "show <n> more commits after the common ancestor"
 msgstr "显示共同祖先后的 <n> 个提交"
 
-#: builtin/show-branch.c:652
+#: builtin/show-branch.c:653
 msgid "synonym to more=-1"
 msgstr "和 more=-1 同义"
 
-#: builtin/show-branch.c:653
+#: builtin/show-branch.c:654
 msgid "suppress naming strings"
 msgstr "不显示字符串命名"
 
-#: builtin/show-branch.c:655
+#: builtin/show-branch.c:656
 msgid "include the current branch"
 msgstr "包括当前分支"
 
-#: builtin/show-branch.c:657
+#: builtin/show-branch.c:658
 msgid "name commits with their object names"
 msgstr "以对象名字命名提交"
 
-#: builtin/show-branch.c:659
+#: builtin/show-branch.c:660
 msgid "show possible merge bases"
 msgstr "显示可能合并的基线"
 
-#: builtin/show-branch.c:661
+#: builtin/show-branch.c:662
 msgid "show refs unreachable from any other ref"
 msgstr "显示没有任何引用的的引用"
 
-#: builtin/show-branch.c:663
+#: builtin/show-branch.c:664
 msgid "show commits in topological order"
 msgstr "以拓扑顺序显示提交"
 
-#: builtin/show-branch.c:666
+#: builtin/show-branch.c:667
 msgid "show only commits not on the first branch"
 msgstr "只显示不在第一个分支上的提交"
 
-#: builtin/show-branch.c:668
+#: builtin/show-branch.c:669
 msgid "show merges reachable from only one tip"
 msgstr "显示仅一个分支可访问的合并提交"
 
-#: builtin/show-branch.c:670
+#: builtin/show-branch.c:671
 msgid "topologically sort, maintaining date order where possible"
 msgstr "拓扑方式排序,并尽可能地保持日期顺序"
 
-#: builtin/show-branch.c:673
+#: builtin/show-branch.c:674
 msgid "<n>[,<base>]"
 msgstr "<n>[,<base>]"
 
-#: builtin/show-branch.c:674
+#: builtin/show-branch.c:675
 msgid "show <n> most recent ref-log entries starting at base"
 msgstr "显示从起始点开始的 <n> 条最近的引用日志记录"
 
-#: builtin/show-branch.c:734
+#: builtin/show-branch.c:735
 msgid "no branches given, and HEAD is not valid"
 msgstr "未提供分支,且 HEAD 无效"
 
-#: builtin/show-branch.c:737
+#: builtin/show-branch.c:738
 msgid "--reflog option needs one branch name"
 msgstr "选项 --reflog 需要一个分支名"
 
-#: builtin/show-branch.c:740
+#: builtin/show-branch.c:741
 #, c-format
 msgid "only %d entry can be shown at one time."
 msgid_plural "only %d entries can be shown at one time."
 msgstr[0] "一次只能显示 %d 个条目。"
 msgstr[1] "一次只能显示 %d 个条目。"
 
-#: builtin/show-branch.c:744
+#: builtin/show-branch.c:745
 #, c-format
 msgid "no such ref %s"
 msgstr "无此引用 %s"
 
-#: builtin/show-branch.c:830
+#: builtin/show-branch.c:831
 #, c-format
 msgid "cannot handle more than %d rev."
 msgid_plural "cannot handle more than %d revs."
 msgstr[0] "不能处理 %d 个以上的版本。"
 msgstr[1] "不能处理 %d 个以上的版本。"
 
-#: builtin/show-branch.c:834
+#: builtin/show-branch.c:835
 #, c-format
 msgid "'%s' is not a valid ref."
 msgstr "'%s' 不是一个有效的引用。"
 
-#: builtin/show-branch.c:837
+#: builtin/show-branch.c:838
 #, c-format
 msgid "cannot find commit %s (%s)"
 msgstr "不能找到提交 %s(%s)"
@@ -21876,120 +22357,142 @@ msgstr "不打印结果到标准输出(例如与 --verify 参数共用)"
 msgid "show refs from stdin that aren't in local repository"
 msgstr "显示从标准输入中读入的不在本地仓库中的引用"
 
-#: builtin/sparse-checkout.c:22
+#: builtin/sparse-checkout.c:23
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr "git sparse-checkout (init|list|set|add|reapply|disable) <选项>"
 
-#: builtin/sparse-checkout.c:46
-msgid "git sparse-checkout list"
-msgstr "git sparse-checkout list"
-
-#: builtin/sparse-checkout.c:60
+#: builtin/sparse-checkout.c:61
 msgid "this worktree is not sparse"
 msgstr "这个工作区不是稀疏的"
 
-#: builtin/sparse-checkout.c:75
+#: builtin/sparse-checkout.c:76
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr "本工作区不是稀疏模式(稀疏检出文件可能不存在)"
 
-#: builtin/sparse-checkout.c:176
+#: builtin/sparse-checkout.c:177
 #, c-format
 msgid ""
 "directory '%s' contains untracked files, but is not in the sparse-checkout "
 "cone"
 msgstr "目录 '%s' 包括了未跟踪文件,但不在稀疏检出锥中"
 
-#: builtin/sparse-checkout.c:184
+#: builtin/sparse-checkout.c:185
 #, c-format
 msgid "failed to remove directory '%s'"
 msgstr "无法删除目录 '%s'"
 
-#: builtin/sparse-checkout.c:324
+#: builtin/sparse-checkout.c:327
 msgid "failed to create directory for sparse-checkout file"
 msgstr "无法为稀疏检出文件创建目录"
 
-#: builtin/sparse-checkout.c:365
-msgid "unable to upgrade repository format to enable worktreeConfig"
-msgstr "无法升级仓库格式以启用 worktreeConfig"
-
-#: builtin/sparse-checkout.c:367
-msgid "failed to set extensions.worktreeConfig setting"
-msgstr "无法设置 extensions.worktreeConfig"
+#: builtin/sparse-checkout.c:366
+msgid "failed to initialize worktree config"
+msgstr "无法初始化工作树配置"
 
 #: builtin/sparse-checkout.c:411
 msgid "failed to modify sparse-index config"
 msgstr "无法修改 sparse-index 配置"
 
-#: builtin/sparse-checkout.c:422
-msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
-msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
-
-#: builtin/sparse-checkout.c:441 builtin/sparse-checkout.c:729
-#: builtin/sparse-checkout.c:778
+#: builtin/sparse-checkout.c:441 builtin/sparse-checkout.c:793
+#: builtin/sparse-checkout.c:847
 msgid "initialize the sparse-checkout in cone mode"
 msgstr "初始化稀疏检出为锥形模式"
 
-#: builtin/sparse-checkout.c:443 builtin/sparse-checkout.c:731
-#: builtin/sparse-checkout.c:780
+#: builtin/sparse-checkout.c:443 builtin/sparse-checkout.c:795
+#: builtin/sparse-checkout.c:849
 msgid "toggle the use of a sparse index"
 msgstr "切换稀疏索引的使用"
 
-#: builtin/sparse-checkout.c:476
+#: builtin/sparse-checkout.c:479
 #, c-format
 msgid "failed to open '%s'"
 msgstr "无法打开 '%s'"
 
-#: builtin/sparse-checkout.c:528
+#: builtin/sparse-checkout.c:531
 #, c-format
 msgid "could not normalize path %s"
 msgstr "无法规范化路径 %s"
 
-#: builtin/sparse-checkout.c:557
+#: builtin/sparse-checkout.c:560
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr "无法为 C 语言风格的字符串 '%s' 去引号"
 
-#: builtin/sparse-checkout.c:612 builtin/sparse-checkout.c:640
+#: builtin/sparse-checkout.c:615 builtin/sparse-checkout.c:643
 msgid "unable to load existing sparse-checkout patterns"
 msgstr "无法加载现存的稀疏检出模式"
 
-#: builtin/sparse-checkout.c:616
+#: builtin/sparse-checkout.c:619
 msgid "existing sparse-checkout patterns do not use cone mode"
 msgstr "已有的稀疏检出模式不使用锥形模式"
 
-#: builtin/sparse-checkout.c:682
-msgid "git sparse-checkout add (--stdin | <patterns>)"
-msgstr "git sparse-checkout add (--stdin | <模式>)"
+#: builtin/sparse-checkout.c:707
+msgid "please run from the toplevel directory in non-cone mode"
+msgstr "请在非锥形模式的顶级目录中运行"
+
+#: builtin/sparse-checkout.c:712
+msgid "specify directories rather than patterns (no leading slash)"
+msgstr "指定目录而不是模式(无前导斜线)"
+
+#: builtin/sparse-checkout.c:714
+msgid ""
+"specify directories rather than patterns.  If your directory starts with a "
+"'!', pass --skip-checks"
+msgstr "指定目录而不是模式。若你的目录以 '!' 开头,传入 --skip-checks"
+
+#: builtin/sparse-checkout.c:716
+msgid ""
+"specify directories rather than patterns.  If your directory really has any "
+"of '*?[]\\' in it, pass --skip-checks"
+msgstr ""
+"指定目录而不是模式。若你的目录真的包含 '*?[]\\' 中的字符,传入 --skip-checks"
+
+#: builtin/sparse-checkout.c:732
+#, c-format
+msgid ""
+"'%s' is not a directory; to treat it as a directory anyway, rerun with --"
+"skip-checks"
+msgstr "'%s' 不是目录;若无论如何都要将它当作目录,使用 --skip-checks 重新运行"
+
+#: builtin/sparse-checkout.c:734
+#, c-format
+msgid ""
+"pass a leading slash before paths such as '%s' if you want a single file "
+"(see NON-CONE PROBLEMS in the git-sparse-checkout manual)."
+msgstr ""
+"如果您想要单独一个文件,在类似于 '%s' 的路径前传入前置斜线 (参见 git-sparse-"
+"checkout 手册中的 NON-CONE PROBLEMS)。"
+
+#: builtin/sparse-checkout.c:739
+msgid "git sparse-checkout add [--skip-checks] (--stdin | <patterns>)"
+msgstr "git sparse-checkout add [--skip-checks] (--stdin | <模式>)"
 
-#: builtin/sparse-checkout.c:694 builtin/sparse-checkout.c:733
+#: builtin/sparse-checkout.c:752 builtin/sparse-checkout.c:797
+msgid ""
+"skip some sanity checks on the given paths that might give false positives"
+msgstr "跳过可能对一些目录产生假阳性错误的合理性检查"
+
+#: builtin/sparse-checkout.c:755 builtin/sparse-checkout.c:800
 msgid "read patterns from standard in"
 msgstr "从标准输入读取模式"
 
-#: builtin/sparse-checkout.c:699
+#: builtin/sparse-checkout.c:760
 msgid "no sparse-checkout to add to"
 msgstr "没有可以添加到的稀疏检出"
 
-#: builtin/sparse-checkout.c:712
+#: builtin/sparse-checkout.c:775
 msgid ""
-"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] (--stdin | "
-"<patterns>)"
+"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] "
+"(--stdin | <patterns>)"
 msgstr ""
-"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] (--stdin | <模式"
-">)"
-
-#: builtin/sparse-checkout.c:765
-msgid "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
-msgstr "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
+"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] "
+"(--stdin | <模式>)"
 
-#: builtin/sparse-checkout.c:785
+#: builtin/sparse-checkout.c:854
 msgid "must be in a sparse-checkout to reapply sparsity patterns"
 msgstr "必须在稀疏检出中重应用稀疏模式"
 
-#: builtin/sparse-checkout.c:803
-msgid "git sparse-checkout disable"
-msgstr "git sparse-checkout disable"
-
-#: builtin/sparse-checkout.c:845
+#: builtin/sparse-checkout.c:914
 msgid "error while refreshing working directory"
 msgstr "刷新工作目录时出错"
 
@@ -22131,167 +22634,151 @@ msgstr "索引未从贮藏中恢复。"
 msgid "could not restore untracked files from stash"
 msgstr "无法从贮藏条目中恢复未跟踪文件"
 
-#: builtin/stash.c:608 builtin/stash.c:706
+#: builtin/stash.c:608 builtin/stash.c:695
 msgid "attempt to recreate the index"
 msgstr "尝试重建索引"
 
-#: builtin/stash.c:652
+#: builtin/stash.c:641
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "丢弃了 %s(%s)"
 
-#: builtin/stash.c:655
+#: builtin/stash.c:644
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s:无法丢弃贮藏条目"
 
-#: builtin/stash.c:668
+#: builtin/stash.c:657
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "'%s' 不是一个贮藏引用"
 
-#: builtin/stash.c:718
+#: builtin/stash.c:707
 msgid "The stash entry is kept in case you need it again."
 msgstr "贮藏条目被保留以备您再次需要。"
 
-#: builtin/stash.c:741
+#: builtin/stash.c:730
 msgid "No branch name specified"
 msgstr "未指定分支名"
 
-#: builtin/stash.c:825
+#: builtin/stash.c:809
 msgid "failed to parse tree"
 msgstr "无法解析树"
 
-#: builtin/stash.c:836
+#: builtin/stash.c:820
 msgid "failed to unpack trees"
 msgstr "无法解包目录树"
 
-#: builtin/stash.c:856
+#: builtin/stash.c:840
 msgid "include untracked files in the stash"
 msgstr "在贮藏中包含未跟踪文件"
 
-#: builtin/stash.c:859
+#: builtin/stash.c:843
 msgid "only show untracked files in the stash"
 msgstr "仅显示贮藏中的未跟踪文件"
 
-#: builtin/stash.c:946 builtin/stash.c:983
+#: builtin/stash.c:930 builtin/stash.c:967
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "无法用 %2$s 更新 %1$s"
 
-#: builtin/stash.c:964 builtin/stash.c:1678 builtin/stash.c:1750
+#: builtin/stash.c:948 builtin/stash.c:1667 builtin/stash.c:1739
 msgid "stash message"
 msgstr "贮藏说明"
 
-#: builtin/stash.c:974
+#: builtin/stash.c:958
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" 需要一个 <提交> 参数"
 
-#: builtin/stash.c:1159
+#: builtin/stash.c:1143
 msgid "No staged changes"
 msgstr "没有暂存的修改"
 
-#: builtin/stash.c:1220
+#: builtin/stash.c:1204
 msgid "No changes selected"
 msgstr "没有选择变更"
 
-#: builtin/stash.c:1320
+#: builtin/stash.c:1304
 msgid "You do not have the initial commit yet"
 msgstr "您尚未建立初始提交"
 
-#: builtin/stash.c:1347
+#: builtin/stash.c:1331
 msgid "Cannot save the current index state"
 msgstr "无法保存当前索引状态"
 
-#: builtin/stash.c:1356
+#: builtin/stash.c:1340
 msgid "Cannot save the untracked files"
 msgstr "无法保存未跟踪文件"
 
-#: builtin/stash.c:1367 builtin/stash.c:1386
+#: builtin/stash.c:1351 builtin/stash.c:1370
 msgid "Cannot save the current worktree state"
 msgstr "无法保存当前工作区状态"
 
-#: builtin/stash.c:1377
+#: builtin/stash.c:1361
 msgid "Cannot save the current staged state"
 msgstr "无法保存当前暂存状态"
 
-#: builtin/stash.c:1414
+#: builtin/stash.c:1398
 msgid "Cannot record working tree state"
 msgstr "不能记录工作区状态"
 
-#: builtin/stash.c:1463
+#: builtin/stash.c:1447
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr "不能同时使用参数 --patch 和 --include-untracked 或 --all"
 
-#: builtin/stash.c:1474
+#: builtin/stash.c:1458
 msgid "Can't use --staged and --include-untracked or --all at the same time"
 msgstr "不能同时使用参数 --staged 和 --include-untracked 或 --all"
 
-#: builtin/stash.c:1492
+#: builtin/stash.c:1476
 msgid "Did you forget to 'git add'?"
 msgstr "您是否忘了执行 'git add'?"
 
-#: builtin/stash.c:1507
+#: builtin/stash.c:1491
 msgid "No local changes to save"
 msgstr "没有要保存的本地修改"
 
-#: builtin/stash.c:1514
+#: builtin/stash.c:1498
 msgid "Cannot initialize stash"
 msgstr "无法初始化贮藏"
 
-#: builtin/stash.c:1529
+#: builtin/stash.c:1513
 msgid "Cannot save the current status"
 msgstr "无法保存当前状态"
 
-#: builtin/stash.c:1534
+#: builtin/stash.c:1518
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "保存工作目录和索引状态 %s"
 
-#: builtin/stash.c:1627
+#: builtin/stash.c:1615
 msgid "Cannot remove worktree changes"
 msgstr "无法删除工作区变更"
 
-#: builtin/stash.c:1667 builtin/stash.c:1739
+#: builtin/stash.c:1656 builtin/stash.c:1728
 msgid "keep index"
 msgstr "保持索引"
 
-#: builtin/stash.c:1669 builtin/stash.c:1741
+#: builtin/stash.c:1658 builtin/stash.c:1730
 msgid "stash staged changes only"
 msgstr "只贮藏暂存的变更"
 
-#: builtin/stash.c:1671 builtin/stash.c:1743
+#: builtin/stash.c:1660 builtin/stash.c:1732
 msgid "stash in patch mode"
 msgstr "以补丁模式贮藏"
 
-#: builtin/stash.c:1672 builtin/stash.c:1744
+#: builtin/stash.c:1661 builtin/stash.c:1733
 msgid "quiet mode"
 msgstr "静默模式"
 
-#: builtin/stash.c:1674 builtin/stash.c:1746
+#: builtin/stash.c:1663 builtin/stash.c:1735
 msgid "include untracked files in stash"
 msgstr "贮藏中包含未跟踪文件"
 
-#: builtin/stash.c:1676 builtin/stash.c:1748
+#: builtin/stash.c:1665 builtin/stash.c:1737
 msgid "include ignore files"
 msgstr "包含忽略的文件"
 
-#: builtin/stash.c:1783
-msgid ""
-"the stash.useBuiltin support has been removed!\n"
-"See its entry in 'git help config' for details."
-msgstr ""
-"对 stash.useBuiltin 的支持已被删除!\n"
-"详见 'git help config' 中的条目。"
-
-#: builtin/stripspace.c:18
-msgid "git stripspace [-s | --strip-comments]"
-msgstr "git stripspace [-s | --strip-comments]"
-
-#: builtin/stripspace.c:19
-msgid "git stripspace [-c | --comment-lines]"
-msgstr "git stripspace [-c | --comment-lines]"
-
 #: builtin/stripspace.c:37
 msgid "skip and remove all lines starting with comment character"
 msgstr "跳过和移除所有的注释行"
@@ -22300,47 +22787,43 @@ msgstr "跳过和移除所有的注释行"
 msgid "prepend comment character and space to each line"
 msgstr "为每一行的行首添加注释符和空格"
 
-#: builtin/submodule--helper.c:46 builtin/submodule--helper.c:2668
+#: builtin/submodule--helper.c:50 builtin/submodule--helper.c:2486
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "期望一个完整的引用名称,却得到 %s"
 
-#: builtin/submodule--helper.c:63
-msgid "submodule--helper print-default-remote takes no arguments"
-msgstr "submodule--helper print-default-remote 不带参数"
-
-#: builtin/submodule--helper.c:101
+#: builtin/submodule--helper.c:103
 #, c-format
 msgid "cannot strip one component off url '%s'"
 msgstr "无法从 url '%s' 剥离一个组件"
 
-#: builtin/submodule--helper.c:211
+#: builtin/submodule--helper.c:213
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
 "authoritative upstream."
 msgstr "无法找到配置 '%s'。假定这个仓库是其自身的官方上游。"
 
-#: builtin/submodule--helper.c:405 builtin/submodule--helper.c:1859
+#: builtin/submodule--helper.c:413 builtin/submodule--helper.c:1873
 msgid "alternative anchor for relative paths"
 msgstr "相对路径的替代锚记(anchor)"
 
-#: builtin/submodule--helper.c:410
+#: builtin/submodule--helper.c:418
 msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper list [--prefix=<路径>] [<路径>...]"
 
-#: builtin/submodule--helper.c:468 builtin/submodule--helper.c:605
-#: builtin/submodule--helper.c:628
+#: builtin/submodule--helper.c:476 builtin/submodule--helper.c:617
+#: builtin/submodule--helper.c:640
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr "在 .gitmodules 中未找到子模组路径 '%s' 的 url"
 
-#: builtin/submodule--helper.c:520
+#: builtin/submodule--helper.c:528
 #, c-format
 msgid "Entering '%s'\n"
 msgstr "进入 '%s'\n"
 
-#: builtin/submodule--helper.c:523
+#: builtin/submodule--helper.c:531
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
@@ -22349,7 +22832,7 @@ msgstr ""
 "对 %s 执行 run_command 返回非零值。\n"
 "."
 
-#: builtin/submodule--helper.c:545
+#: builtin/submodule--helper.c:553
 #, c-format
 msgid ""
 "run_command returned non-zero status while recursing in the nested "
@@ -22359,158 +22842,158 @@ msgstr ""
 "在递归 %s 的子模组执行 run_command 时返回非零值。\n"
 "."
 
-#: builtin/submodule--helper.c:561
+#: builtin/submodule--helper.c:569
 msgid "suppress output of entering each submodule command"
 msgstr "抑制进入每一个子模组命令的输出"
 
-#: builtin/submodule--helper.c:563 builtin/submodule--helper.c:864
-#: builtin/submodule--helper.c:1453
+#: builtin/submodule--helper.c:571 builtin/submodule--helper.c:876
+#: builtin/submodule--helper.c:1458
 msgid "recurse into nested submodules"
 msgstr "递归进入嵌套子模组中"
 
-#: builtin/submodule--helper.c:568
+#: builtin/submodule--helper.c:576
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr "git submodule--helper foreach [--quiet] [--recursive] [--] <命令>"
 
-#: builtin/submodule--helper.c:642
+#: builtin/submodule--helper.c:654
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr "无法为子模组路径 '%s' 注册 url"
 
-#: builtin/submodule--helper.c:646
+#: builtin/submodule--helper.c:658
 #, c-format
 msgid "Submodule '%s' (%s) registered for path '%s'\n"
 msgstr "子模组 '%s'(%s)已对路径 '%s' 注册\n"
 
-#: builtin/submodule--helper.c:656
+#: builtin/submodule--helper.c:668
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr "警告:建议子模组 '%s' 使用命令更新模式\n"
 
-#: builtin/submodule--helper.c:663
+#: builtin/submodule--helper.c:675
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr "无法为子模组路径 '%s' 注册更新模式"
 
-#: builtin/submodule--helper.c:685
+#: builtin/submodule--helper.c:697
 msgid "suppress output for initializing a submodule"
 msgstr "抑制子模组初始化的输出"
 
-#: builtin/submodule--helper.c:690
+#: builtin/submodule--helper.c:702
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr "git submodule--helper init [<选项>] [<路径>]"
 
-#: builtin/submodule--helper.c:763 builtin/submodule--helper.c:898
+#: builtin/submodule--helper.c:775 builtin/submodule--helper.c:910
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr "在 .gitmodules 中没有发现路径 '%s' 的子模组映射"
 
-#: builtin/submodule--helper.c:811
+#: builtin/submodule--helper.c:823
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr "无法解析子模组 '%s' 的 HEAD 引用"
 
-#: builtin/submodule--helper.c:838 builtin/submodule--helper.c:1423
+#: builtin/submodule--helper.c:850 builtin/submodule--helper.c:1428
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "无法递归进入子模组 '%s'"
 
-#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1590
+#: builtin/submodule--helper.c:874 builtin/submodule--helper.c:1595
 msgid "suppress submodule status output"
 msgstr "抑制子模组状态输出"
 
-#: builtin/submodule--helper.c:863
+#: builtin/submodule--helper.c:875
 msgid ""
 "use commit stored in the index instead of the one stored in the submodule "
 "HEAD"
 msgstr "使用存储在索引中的提交,而非存储在子模组 HEAD 中的提交"
 
-#: builtin/submodule--helper.c:869
+#: builtin/submodule--helper.c:881
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr "git submodule status [--quiet] [--cached] [--recursive] [<路径>...]"
 
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:905
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper name <路径>"
 
-#: builtin/submodule--helper.c:965
+#: builtin/submodule--helper.c:977
 #, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr "* %s %s(数据对象)->%s(子模组)"
 
-#: builtin/submodule--helper.c:968
+#: builtin/submodule--helper.c:980
 #, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr "* %s %s(子模组)->%s(数据对象)"
 
-#: builtin/submodule--helper.c:981
+#: builtin/submodule--helper.c:993
 #, c-format
 msgid "%s"
 msgstr "%s"
 
-#: builtin/submodule--helper.c:1031
+#: builtin/submodule--helper.c:1043
 #, c-format
 msgid "couldn't hash object from '%s'"
 msgstr "不能从 '%s' 创建哈希对象"
 
-#: builtin/submodule--helper.c:1035
+#: builtin/submodule--helper.c:1047
 #, c-format
 msgid "unexpected mode %o\n"
 msgstr "意外的模式 %o\n"
 
-#: builtin/submodule--helper.c:1276
+#: builtin/submodule--helper.c:1288
 msgid "use the commit stored in the index instead of the submodule HEAD"
 msgstr "使用存储在索引中的提交,而非存储在子模组 HEAD 中的提交"
 
-#: builtin/submodule--helper.c:1278
+#: builtin/submodule--helper.c:1290
 msgid "compare the commit in the index with that in the submodule HEAD"
 msgstr "比较存储在索引和子模组 HEAD 中的提交"
 
-#: builtin/submodule--helper.c:1280
+#: builtin/submodule--helper.c:1292
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr "跳过设置了 'ignore_config' 为 'all' 的子模组"
 
-#: builtin/submodule--helper.c:1282
+#: builtin/submodule--helper.c:1294
 msgid "limit the summary size"
 msgstr "限制总结的大小"
 
-#: builtin/submodule--helper.c:1287
+#: builtin/submodule--helper.c:1299
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr "git submodule--helper summary [<选项>] [<提交>] [--] [<路径>]"
 
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1323
 msgid "could not fetch a revision for HEAD"
 msgstr "不能为 HEAD 获取一个版本"
 
-#: builtin/submodule--helper.c:1373
+#: builtin/submodule--helper.c:1384
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr "为 '%s' 同步子模组 url\n"
 
-#: builtin/submodule--helper.c:1379
+#: builtin/submodule--helper.c:1390
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr "无法为子模组路径 '%s' 注册 url"
 
-#: builtin/submodule--helper.c:1393
+#: builtin/submodule--helper.c:1399
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr "无法得到子模组 '%s' 的默认远程关联"
 
-#: builtin/submodule--helper.c:1404
+#: builtin/submodule--helper.c:1409
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr "无法为子模组 '%s' 更新远程关联"
 
-#: builtin/submodule--helper.c:1451
+#: builtin/submodule--helper.c:1456
 msgid "suppress output of synchronizing submodule url"
 msgstr "抑制子模组 URL 同步的输出"
 
-#: builtin/submodule--helper.c:1458
+#: builtin/submodule--helper.c:1463
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<路径>]"
 
-#: builtin/submodule--helper.c:1508
+#: builtin/submodule--helper.c:1513
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory. This will be replaced "
@@ -22519,52 +23002,52 @@ msgstr ""
 "子模组工作区 '%s' 包含一个 .git 目录。这将会用 absorbgitdirs 子命令替换成一"
 "个 .git 文件。"
 
-#: builtin/submodule--helper.c:1525
+#: builtin/submodule--helper.c:1530
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
 "them"
 msgstr "子模组工作区 '%s' 包含本地修改;使用 '-f' 丢弃它们"
 
-#: builtin/submodule--helper.c:1533
+#: builtin/submodule--helper.c:1538
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "已清除目录 '%s'\n"
 
-#: builtin/submodule--helper.c:1535
+#: builtin/submodule--helper.c:1540
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr "无法移除子模组工作区 '%s'\n"
 
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1551
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr "不能创建空的子模组目录 %s"
 
-#: builtin/submodule--helper.c:1562
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr "子模组 '%s'(%s)未对路径 '%s' 注册\n"
 
-#: builtin/submodule--helper.c:1591
+#: builtin/submodule--helper.c:1596
 msgid "remove submodule working trees even if they contain local changes"
 msgstr "删除子模组工作区,即使包含本地修改"
 
-#: builtin/submodule--helper.c:1592
+#: builtin/submodule--helper.c:1597
 msgid "unregister all submodules"
 msgstr "将所有子模组取消注册"
 
-#: builtin/submodule--helper.c:1597
+#: builtin/submodule--helper.c:1602
 msgid ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
 msgstr ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<路径>...]]"
 
-#: builtin/submodule--helper.c:1611
+#: builtin/submodule--helper.c:1616
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr "如果您确实想要对所有子模组执行取消初始化,请使用 '--all'"
 
-#: builtin/submodule--helper.c:1656
+#: builtin/submodule--helper.c:1665
 msgid ""
 "An alternate computed from a superproject's alternate is invalid.\n"
 "To allow Git to clone without an alternate in such a case, set\n"
@@ -22576,100 +23059,101 @@ msgstr ""
 "Git 不使用备用仓库克隆,或者等效地使用 '--reference-if-able' 而非\n"
 "'--reference' 来克隆。"
 
-#: builtin/submodule--helper.c:1701 builtin/submodule--helper.c:1704
+#: builtin/submodule--helper.c:1710 builtin/submodule--helper.c:1713
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "子模组 '%s' 不能添加仓库备选:%s"
 
-#: builtin/submodule--helper.c:1740
+#: builtin/submodule--helper.c:1749
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr "不能识别 submodule.alternateErrorStrategy 的取值 '%s'"
 
-#: builtin/submodule--helper.c:1747
+#: builtin/submodule--helper.c:1756
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "不能识别 submodule.alternateLocation 的取值 '%s'"
 
-#: builtin/submodule--helper.c:1772
+#: builtin/submodule--helper.c:1781
 #, c-format
 msgid "refusing to create/use '%s' in another submodule's git dir"
 msgstr "拒绝在另一个子模组的 git 目录中创建/使用 '%s'"
 
-#: builtin/submodule--helper.c:1813
+#: builtin/submodule--helper.c:1826
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
 msgstr "无法克隆 '%s' 到子模组路径 '%s'"
 
-#: builtin/submodule--helper.c:1818
+#: builtin/submodule--helper.c:1831
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr "目录非空:'%s'"
 
-#: builtin/submodule--helper.c:1830
+#: builtin/submodule--helper.c:1843
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr "无法得到 '%s' 的子模组目录"
 
-#: builtin/submodule--helper.c:1862
+#: builtin/submodule--helper.c:1876
 msgid "where the new submodule will be cloned to"
 msgstr "新的子模组将要克隆的路径"
 
-#: builtin/submodule--helper.c:1865
+#: builtin/submodule--helper.c:1879
 msgid "name of the new submodule"
 msgstr "新子模组的名称"
 
-#: builtin/submodule--helper.c:1868
+#: builtin/submodule--helper.c:1882
 msgid "url where to clone the submodule from"
 msgstr "克隆子模组的 url 地址"
 
-#: builtin/submodule--helper.c:1876 builtin/submodule--helper.c:3265
+#: builtin/submodule--helper.c:1890 builtin/submodule--helper.c:3383
 msgid "depth for shallow clones"
 msgstr "浅克隆的深度"
 
-#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:2526
-#: builtin/submodule--helper.c:3258
+#: builtin/submodule--helper.c:1893 builtin/submodule--helper.c:2731
+#: builtin/submodule--helper.c:3376
 msgid "force cloning progress"
 msgstr "强制显示克隆进度"
 
-#: builtin/submodule--helper.c:1881 builtin/submodule--helper.c:2528
+#: builtin/submodule--helper.c:1895 builtin/submodule--helper.c:2733
 msgid "disallow cloning into non-empty directory"
 msgstr "不允许克隆到一个非空目录"
 
-#: builtin/submodule--helper.c:1888
+#: builtin/submodule--helper.c:1903
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
-"<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
-"<url> --path <path>"
+"<repository>] [--name <name>] [--depth <depth>] [--single-branch] [--filter "
+"<filter-spec>] --url <url> --path <path>"
 msgstr ""
 "git submodule--helper clone [--prefix=<路径>] [--quiet] [--reference <仓库>] "
-"[--name <名字>] [--depth <深度>] [--single-branch] --url <url> --path <路径>"
+"[--name <名字>] [--depth <深度>] [--single-branch] [--filter <过滤器规格>] --"
+"url <url> --path <路径>"
 
-#: builtin/submodule--helper.c:1925
+#: builtin/submodule--helper.c:1943
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr "子模组路径 '%2$s' 的更新模式 '%1$s' 无效"
 
-#: builtin/submodule--helper.c:1929
+#: builtin/submodule--helper.c:1947
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr "为子模组路径 '%2$s' 配置的更新模式 '%1$s' 无效"
 
-#: builtin/submodule--helper.c:2044
+#: builtin/submodule--helper.c:2041
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "子模组路径 '%s' 尚未初始化"
 
-#: builtin/submodule--helper.c:2048
+#: builtin/submodule--helper.c:2045
 msgid "Maybe you want to use 'update --init'?"
 msgstr "也许您想要执行 'update --init'?"
 
-#: builtin/submodule--helper.c:2078
+#: builtin/submodule--helper.c:2075
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "略过未合并的子模组 %s"
 
-#: builtin/submodule--helper.c:2107
+#: builtin/submodule--helper.c:2104
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "略过子模组 '%s'"
@@ -22684,226 +23168,254 @@ msgstr "克隆 '%s' 失败。按计划重试"
 msgid "Failed to clone '%s' a second time, aborting"
 msgstr "第二次尝试克隆 '%s' 失败,退出"
 
-#: builtin/submodule--helper.c:2373
+#: builtin/submodule--helper.c:2371
 #, c-format
 msgid "Unable to checkout '%s' in submodule path '%s'"
 msgstr "无法在子模组路径 '%2$s' 中检出 '%1$s'"
 
-#: builtin/submodule--helper.c:2377
+#: builtin/submodule--helper.c:2375
 #, c-format
 msgid "Unable to rebase '%s' in submodule path '%s'"
 msgstr "无法在子模组路径 '%2$s' 中变基 '%1$s'"
 
-#: builtin/submodule--helper.c:2381
+#: builtin/submodule--helper.c:2379
 #, c-format
 msgid "Unable to merge '%s' in submodule path '%s'"
 msgstr "无法在子模组路径 '%2$s' 中合并 '%1$s'"
 
-#: builtin/submodule--helper.c:2385
+#: builtin/submodule--helper.c:2383
 #, c-format
 msgid "Execution of '%s %s' failed in submodule path '%s'"
 msgstr "在子模组路径 '%3$s' 中执行 '%1$s %2$s' 失败"
 
-#: builtin/submodule--helper.c:2409
+#: builtin/submodule--helper.c:2402
 #, c-format
 msgid "Submodule path '%s': checked out '%s'\n"
 msgstr "子模组路径 '%s':检出 '%s'\n"
 
-#: builtin/submodule--helper.c:2413
+#: builtin/submodule--helper.c:2406
 #, c-format
 msgid "Submodule path '%s': rebased into '%s'\n"
 msgstr "子模组路径 '%s':变基至 '%s'\n"
 
-#: builtin/submodule--helper.c:2417
+#: builtin/submodule--helper.c:2410
 #, c-format
 msgid "Submodule path '%s': merged in '%s'\n"
 msgstr "子模组路径 '%s':合并入 '%s'\n"
 
-#: builtin/submodule--helper.c:2421
+#: builtin/submodule--helper.c:2414
 #, c-format
 msgid "Submodule path '%s': '%s %s'\n"
 msgstr "子模组路径 '%s':'%s %s'\n"
 
-#: builtin/submodule--helper.c:2445
+#: builtin/submodule--helper.c:2438
 #, c-format
 msgid "Unable to fetch in submodule path '%s'; trying to directly fetch %s:"
 msgstr "无法在子模组路径 '%s' 中获取;尝试直接获取 %s:"
 
-#: builtin/submodule--helper.c:2454
+#: builtin/submodule--helper.c:2447
 #, c-format
 msgid ""
 "Fetched in submodule path '%s', but it did not contain %s. Direct fetching "
 "of that commit failed."
 msgstr "获取了子模组路径 '%s',但是它没有包含 %s。直接获取该提交失败。"
 
-#: builtin/submodule--helper.c:2505 builtin/submodule--helper.c:2575
-#: builtin/submodule--helper.c:2813
+#: builtin/submodule--helper.c:2481
+#, c-format
+msgid ""
+"Submodule (%s) branch configured to inherit branch from superproject, but "
+"the superproject is not on any branch"
+msgstr "子模组(%s)的分支配置为继承上级项目的分支,但是上级项目不在任何分支上"
+
+#: builtin/submodule--helper.c:2499
+#, c-format
+msgid "could not get a repository handle for submodule '%s'"
+msgstr "无法获得子模组 '%s' 的仓库句柄"
+
+#: builtin/submodule--helper.c:2588
+#, c-format
+msgid "Unable to find current revision in submodule path '%s'"
+msgstr "无法在子模组路径 '%s' 中找到当前版本"
+
+#: builtin/submodule--helper.c:2599
+#, c-format
+msgid "Unable to fetch in submodule path '%s'"
+msgstr "无法在子模组路径 '%s' 中获取"
+
+#: builtin/submodule--helper.c:2604
+#, c-format
+msgid "Unable to find %s revision in submodule path '%s'"
+msgstr "无法在子模组路径 '%2$s' 中找到当前版本 %1$s"
+
+#: builtin/submodule--helper.c:2640
+#, c-format
+msgid "Failed to recurse into submodule path '%s'"
+msgstr "无法递归进入子模组路径 '%s'"
+
+#: builtin/submodule--helper.c:2699
+msgid "force checkout updates"
+msgstr "强制检出更新"
+
+#: builtin/submodule--helper.c:2701
+msgid "initialize uninitialized submodules before update"
+msgstr "在更新前初始化尚未初始化的子模组"
+
+#: builtin/submodule--helper.c:2703
+msgid "use SHA-1 of submodule's remote tracking branch"
+msgstr "使用子模组远程追踪分支的 SHA-1"
+
+#: builtin/submodule--helper.c:2705
+msgid "traverse submodules recursively"
+msgstr "递归遍历子模组"
+
+#: builtin/submodule--helper.c:2707
+msgid "don't fetch new objects from the remote site"
+msgstr "不要从远程地址获取新对象"
+
+#: builtin/submodule--helper.c:2710 builtin/submodule--helper.c:2892
 msgid "path into the working tree"
 msgstr "到工作区的路径"
 
-#: builtin/submodule--helper.c:2508 builtin/submodule--helper.c:2580
+#: builtin/submodule--helper.c:2713
 msgid "path into the working tree, across nested submodule boundaries"
 msgstr "工作区中的路径,递归嵌套子模组"
 
-#: builtin/submodule--helper.c:2512 builtin/submodule--helper.c:2578
+#: builtin/submodule--helper.c:2717
 msgid "rebase, merge, checkout or none"
 msgstr "rebase、merge、checkout 或 none"
 
-#: builtin/submodule--helper.c:2518
+#: builtin/submodule--helper.c:2723
 msgid "create a shallow clone truncated to the specified number of revisions"
 msgstr "创建一个指定深度的浅克隆"
 
-#: builtin/submodule--helper.c:2521
+#: builtin/submodule--helper.c:2726
 msgid "parallel jobs"
 msgstr "并发任务"
 
-#: builtin/submodule--helper.c:2523
+#: builtin/submodule--helper.c:2728
 msgid "whether the initial clone should follow the shallow recommendation"
 msgstr "初始克隆是否应该遵守推荐的浅克隆选项"
 
-#: builtin/submodule--helper.c:2524
+#: builtin/submodule--helper.c:2729
 msgid "don't print cloning progress"
 msgstr "不要输出克隆进度"
 
-#: builtin/submodule--helper.c:2535
-msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
-msgstr "git submodule--helper update-clone [--prefix=<路径>] [<路径>...]"
+#: builtin/submodule--helper.c:2741
+msgid ""
+"git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] "
+"[-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-"
+"shallow] [--reference <repository>] [--recursive] [--[no-]single-branch] "
+"[--] [<path>...]"
+msgstr ""
+"git submodule [--quiet] update [--init [--filter=<过滤器规格>]] [--remote] [-"
+"N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-"
+"shallow] [--reference <仓库>] [--recursive] [--[no-]single-branch] [--] [<路"
+"径>...]"
 
-#: builtin/submodule--helper.c:2548
+#: builtin/submodule--helper.c:2767
 msgid "bad value for update parameter"
 msgstr "update 参数取值错误"
 
-#: builtin/submodule--helper.c:2566
-msgid "suppress output for update by rebase or merge"
-msgstr "抑制变基或合并更新的输出"
-
-#: builtin/submodule--helper.c:2567
-msgid "force checkout updates"
-msgstr "强制检出更新"
-
-#: builtin/submodule--helper.c:2569
-msgid "don't fetch new objects from the remote site"
-msgstr "不要从远程地址获取新对象"
-
-#: builtin/submodule--helper.c:2571
-msgid "overrides update mode in case the repository is a fresh clone"
-msgstr "当仓库是新的克隆时,覆盖更新模式"
-
-#: builtin/submodule--helper.c:2572
-msgid "depth for shallow fetch"
-msgstr "浅获取的深度"
-
-#: builtin/submodule--helper.c:2582
-msgid "sha1"
-msgstr "sha1"
-
-#: builtin/submodule--helper.c:2583
-msgid "SHA1 expected by superproject"
-msgstr "上层项目期待的 SHA1"
-
-#: builtin/submodule--helper.c:2585
-msgid "subsha1"
-msgstr "subsha1"
-
-#: builtin/submodule--helper.c:2586
-msgid "SHA1 of submodule's HEAD"
-msgstr "子模块头指针的 SHA1"
-
-#: builtin/submodule--helper.c:2592
-msgid "git submodule--helper run-update-procedure [<options>] <path>"
-msgstr "git submodule--helper run-update-procedure [<选项>] <路径>"
-
-#: builtin/submodule--helper.c:2663
-#, c-format
-msgid ""
-"Submodule (%s) branch configured to inherit branch from superproject, but "
-"the superproject is not on any branch"
-msgstr "子模组(%s)的分支配置为继承上级项目的分支,但是上级项目不在任何分支上"
-
-#: builtin/submodule--helper.c:2781
-#, c-format
-msgid "could not get a repository handle for submodule '%s'"
-msgstr "无法获得子模组 '%s' 的仓库句柄"
-
-#: builtin/submodule--helper.c:2814
+#: builtin/submodule--helper.c:2893
 msgid "recurse into submodules"
 msgstr "在子模组中递归"
 
-#: builtin/submodule--helper.c:2820
+#: builtin/submodule--helper.c:2899
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr "git submodule--helper absorb-git-dirs [<选项>] [<路径>...]"
 
-#: builtin/submodule--helper.c:2876
+#: builtin/submodule--helper.c:2955
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr "检查写入 .gitmodules 文件是否安全"
 
-#: builtin/submodule--helper.c:2879
+#: builtin/submodule--helper.c:2958
 msgid "unset the config in the .gitmodules file"
 msgstr "取消 .gitmodules 文件中的设置"
 
-#: builtin/submodule--helper.c:2884
+#: builtin/submodule--helper.c:2963
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config <名称> [<值>]"
 
-#: builtin/submodule--helper.c:2885
+#: builtin/submodule--helper.c:2964
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset <名称>"
 
-#: builtin/submodule--helper.c:2886
-msgid "git submodule--helper config --check-writeable"
-msgstr "git submodule--helper config --check-writeable"
-
-#: builtin/submodule--helper.c:2905 builtin/submodule--helper.c:3121
-#: builtin/submodule--helper.c:3277
+#: builtin/submodule--helper.c:2984 builtin/submodule--helper.c:3238
+#: builtin/submodule--helper.c:3395
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr "请确认 .gitmodules 文件在工作区里"
 
-#: builtin/submodule--helper.c:2921
+#: builtin/submodule--helper.c:3000
 msgid "suppress output for setting url of a submodule"
 msgstr "抑制设置子模组 URL 的输出"
 
-#: builtin/submodule--helper.c:2925
+#: builtin/submodule--helper.c:3004
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr "git submodule--helper set-url [--quiet] <路径> <新地址>"
 
-#: builtin/submodule--helper.c:2958
+#: builtin/submodule--helper.c:3037
 msgid "set the default tracking branch to master"
 msgstr "设置默认跟踪分支为 master"
 
-#: builtin/submodule--helper.c:2960
+#: builtin/submodule--helper.c:3039
 msgid "set the default tracking branch"
 msgstr "设置默认跟踪分支"
 
-#: builtin/submodule--helper.c:2964
+#: builtin/submodule--helper.c:3043
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr "git submodule--helper set-branch [-q|--quiet] (-d|--default) <路径>"
 
-#: builtin/submodule--helper.c:2965
+#: builtin/submodule--helper.c:3044
 msgid ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 msgstr ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <分支> <路径>"
 
-#: builtin/submodule--helper.c:2972
+#: builtin/submodule--helper.c:3051
 msgid "--branch or --default required"
 msgstr "需要 --branch 或 --default"
 
-#: builtin/submodule--helper.c:3038
+#: builtin/submodule--helper.c:3072 builtin/submodule--helper.c:3375
+msgid "print only error messages"
+msgstr "只打印错误消息"
+
+#: builtin/submodule--helper.c:3073
+msgid "force creation"
+msgstr "强制创建"
+
+#: builtin/submodule--helper.c:3081
+msgid "show whether the branch would be created"
+msgstr "显示是否将要创建分支"
+
+#: builtin/submodule--helper.c:3085
+msgid ""
+"git submodule--helper create-branch [-f|--force] [--create-reflog] [-q|--"
+"quiet] [-t|--track] [-n|--dry-run] <name> <start-oid> <start-name>"
+msgstr ""
+"git submodule--helper create-branch [-f|--force] [--create-reflog] [-q|--"
+"quiet] [-t|--track] [-n|--dry-run] <名称> <起始对象 ID> <起始名称>"
+
+#: builtin/submodule--helper.c:3097
+#, c-format
+msgid "creating branch '%s'"
+msgstr "正在创建分支 '%s'"
+
+#: builtin/submodule--helper.c:3155
 #, c-format
 msgid "Adding existing repo at '%s' to the index\n"
 msgstr "向索引中添加位于 '%s' 的已存在的仓库\n"
 
-#: builtin/submodule--helper.c:3041
+#: builtin/submodule--helper.c:3158
 #, c-format
 msgid "'%s' already exists and is not a valid git repo"
 msgstr "'%s' 已存在并且不是一个有效的 git 仓库"
 
-#: builtin/submodule--helper.c:3054
+#: builtin/submodule--helper.c:3171
 #, c-format
 msgid "A git directory for '%s' is found locally with remote(s):\n"
 msgstr "发现一个本地 git 目录 '%s' 及其远程仓库:\n"
 
-#: builtin/submodule--helper.c:3061
+#: builtin/submodule--helper.c:3178
 #, c-format
 msgid ""
 "If you want to reuse this local git directory instead of cloning again from\n"
@@ -22918,83 +23430,79 @@ msgstr ""
 "使用 '--force' 选项。如果本地 git 目录不是正确的仓库,或者如果您不确定这里\n"
 "的含义,使用 '--name' 选项指定另外的名称。"
 
-#: builtin/submodule--helper.c:3073
+#: builtin/submodule--helper.c:3190
 #, c-format
 msgid "Reactivating local git directory for submodule '%s'\n"
 msgstr "为子模组 '%s' 重新激活本地 git 目录\n"
 
-#: builtin/submodule--helper.c:3110
+#: builtin/submodule--helper.c:3227
 #, c-format
 msgid "unable to checkout submodule '%s'"
 msgstr "无法检出子模组 '%s'"
 
-#: builtin/submodule--helper.c:3149
+#: builtin/submodule--helper.c:3266
 #, c-format
 msgid "Failed to add submodule '%s'"
 msgstr "无法添加子模组 '%s'"
 
-#: builtin/submodule--helper.c:3153 builtin/submodule--helper.c:3158
-#: builtin/submodule--helper.c:3166
+#: builtin/submodule--helper.c:3270 builtin/submodule--helper.c:3275
+#: builtin/submodule--helper.c:3283
 #, c-format
 msgid "Failed to register submodule '%s'"
 msgstr "无法注册子模组 '%s'"
 
-#: builtin/submodule--helper.c:3222
+#: builtin/submodule--helper.c:3339
 #, c-format
 msgid "'%s' already exists in the index"
 msgstr "'%s' 已经存在于索引中"
 
-#: builtin/submodule--helper.c:3225
+#: builtin/submodule--helper.c:3342
 #, c-format
 msgid "'%s' already exists in the index and is not a submodule"
 msgstr "'%s' 已经存在于索引中且不是一个子模组"
 
-#: builtin/submodule--helper.c:3254
+#: builtin/submodule--helper.c:3372
 msgid "branch of repository to add as submodule"
 msgstr "要添加为子模组的仓库的分支"
 
-#: builtin/submodule--helper.c:3255
+#: builtin/submodule--helper.c:3373
 msgid "allow adding an otherwise ignored submodule path"
 msgstr "允许添加一个被忽略的子模组路径"
 
-#: builtin/submodule--helper.c:3257
-msgid "print only error messages"
-msgstr "只打印错误消息"
-
-#: builtin/submodule--helper.c:3261
+#: builtin/submodule--helper.c:3379
 msgid "borrow the objects from reference repositories"
 msgstr "从引用仓库中借用对象"
 
-#: builtin/submodule--helper.c:3263
+#: builtin/submodule--helper.c:3381
 msgid ""
 "sets the submodule’s name to the given string instead of defaulting to its "
 "path"
 msgstr "将子模组的名称设置为给定的字符串,而非默认为其路径"
 
-#: builtin/submodule--helper.c:3270
+#: builtin/submodule--helper.c:3388
 msgid "git submodule--helper add [<options>] [--] <repository> [<path>]"
 msgstr "git submodule--helper add [<选项>] [--] <仓库> [<路径>]"
 
-#: builtin/submodule--helper.c:3298
+#: builtin/submodule--helper.c:3416
 msgid "Relative path can only be used from the toplevel of the working tree"
 msgstr "只能在工作区的顶级目录中使用相对路径"
 
-#: builtin/submodule--helper.c:3306
+#: builtin/submodule--helper.c:3425
 #, c-format
 msgid "repo URL: '%s' must be absolute or begin with ./|../"
 msgstr "仓库 URL:'%s' 必须是绝对路径或以 ./|../ 起始"
 
-#: builtin/submodule--helper.c:3341
+#: builtin/submodule--helper.c:3460
 #, c-format
 msgid "'%s' is not a valid submodule name"
 msgstr "'%s' 不是一个有效的子模组名称"
 
-#: builtin/submodule--helper.c:3405 git.c:452 git.c:726
+#: builtin/submodule--helper.c:3520 git.c:453 git.c:729
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s 不支持 --super-prefix"
 
-#: builtin/submodule--helper.c:3411
+#: builtin/submodule--helper.c:3526
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "'%s' 不是一个有效的 submodule--helper 子命令"
@@ -23027,7 +23535,7 @@ msgstr "原因"
 msgid "reason of the update"
 msgstr "更新的原因"
 
-#: builtin/tag.c:25
+#: builtin/tag.c:26
 msgid ""
 "git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]\n"
 "        <tagname> [<head>]"
@@ -23035,11 +23543,11 @@ msgstr ""
 "git tag [-a | -s | -u <key-id>] [-f] [-m <消息> | -F <文件>]\n"
 "        <标签名> [<头>]"
 
-#: builtin/tag.c:27
+#: builtin/tag.c:28
 msgid "git tag -d <tagname>..."
 msgstr "git tag -d <标签名>..."
 
-#: builtin/tag.c:28
+#: builtin/tag.c:29
 msgid ""
 "git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--"
 "points-at <object>]\n"
@@ -23050,21 +23558,21 @@ msgstr ""
 "at <对象>]\n"
 "        [--format=<格式>] [--merged <提交>] [--no-merged <提交>] [<模式>...]"
 
-#: builtin/tag.c:30
+#: builtin/tag.c:31
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr "git tag -v [--format=<格式>] <标签名>..."
 
-#: builtin/tag.c:100
+#: builtin/tag.c:101
 #, c-format
 msgid "tag '%s' not found."
 msgstr "未发现标签 '%s'。"
 
-#: builtin/tag.c:135
+#: builtin/tag.c:136
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr "已删除标签 '%s'(曾为 %s)\n"
 
-#: builtin/tag.c:170
+#: builtin/tag.c:171
 #, c-format
 msgid ""
 "\n"
@@ -23077,7 +23585,7 @@ msgstr ""
 "  %s\n"
 "以 '%c' 开头的行将被忽略。\n"
 
-#: builtin/tag.c:174
+#: builtin/tag.c:175
 #, c-format
 msgid ""
 "\n"
@@ -23091,11 +23599,11 @@ msgstr ""
 "  %s\n"
 "以 '%c' 开头的行将被保留,如果您愿意也可以删除它们。\n"
 
-#: builtin/tag.c:240
+#: builtin/tag.c:241
 msgid "unable to sign the tag"
 msgstr "无法签署标签"
 
-#: builtin/tag.c:258
+#: builtin/tag.c:259
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -23108,115 +23616,119 @@ msgstr ""
 "\n"
 "\tgit tag -f %s %s^{}"
 
-#: builtin/tag.c:274
+#: builtin/tag.c:275
 msgid "bad object type."
 msgstr "坏的对象类型。"
 
-#: builtin/tag.c:325
+#: builtin/tag.c:326
 msgid "no tag message?"
 msgstr "无标签说明?"
 
-#: builtin/tag.c:332
+#: builtin/tag.c:333
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "标签说明被保留在 %s\n"
 
-#: builtin/tag.c:444
+#: builtin/tag.c:445
 msgid "list tag names"
 msgstr "列出标签名称"
 
-#: builtin/tag.c:446
+#: builtin/tag.c:447
 msgid "print <n> lines of each tag message"
 msgstr "每个标签信息打印 <n> 行"
 
-#: builtin/tag.c:448
+#: builtin/tag.c:449
 msgid "delete tags"
 msgstr "删除标签"
 
-#: builtin/tag.c:449
+#: builtin/tag.c:450
 msgid "verify tags"
 msgstr "验证标签"
 
-#: builtin/tag.c:451
+#: builtin/tag.c:452
 msgid "Tag creation options"
 msgstr "标签创建选项"
 
-#: builtin/tag.c:453
+#: builtin/tag.c:454
 msgid "annotated tag, needs a message"
 msgstr "附注标签,需要一个说明"
 
-#: builtin/tag.c:455
+#: builtin/tag.c:456
 msgid "tag message"
 msgstr "标签说明"
 
-#: builtin/tag.c:457
+#: builtin/tag.c:458
 msgid "force edit of tag message"
 msgstr "强制编辑标签说明"
 
-#: builtin/tag.c:458
+#: builtin/tag.c:459
 msgid "annotated and GPG-signed tag"
 msgstr "附注并附加 GPG 签名的标签"
 
-#: builtin/tag.c:461
+#: builtin/tag.c:462
 msgid "use another key to sign the tag"
 msgstr "使用另外的私钥签名该标签"
 
-#: builtin/tag.c:462
+#: builtin/tag.c:463
 msgid "replace the tag if exists"
 msgstr "如果存在,替换现有的标签"
 
-#: builtin/tag.c:463 builtin/update-ref.c:511
+#: builtin/tag.c:464 builtin/update-ref.c:511
 msgid "create a reflog"
 msgstr "创建引用日志"
 
-#: builtin/tag.c:465
+#: builtin/tag.c:466
 msgid "Tag listing options"
 msgstr "标签列表选项"
 
-#: builtin/tag.c:466
+#: builtin/tag.c:467
 msgid "show tag list in columns"
 msgstr "以列的方式显示标签列表"
 
-#: builtin/tag.c:467 builtin/tag.c:469
+#: builtin/tag.c:468 builtin/tag.c:470
 msgid "print only tags that contain the commit"
 msgstr "只打印包含该提交的标签"
 
-#: builtin/tag.c:468 builtin/tag.c:470
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that don't contain the commit"
 msgstr "只打印不包含该提交的标签"
 
-#: builtin/tag.c:471
+#: builtin/tag.c:472
 msgid "print only tags that are merged"
 msgstr "只打印已经合并的标签"
 
-#: builtin/tag.c:472
+#: builtin/tag.c:473
 msgid "print only tags that are not merged"
 msgstr "只打印尚未合并的标签"
 
-#: builtin/tag.c:476
+#: builtin/tag.c:477
 msgid "print only tags of the object"
 msgstr "只打印指向该对象的标签"
 
-#: builtin/tag.c:558
+#: builtin/tag.c:559
 #, c-format
 msgid "the '%s' option is only allowed in list mode"
 msgstr "'%s' 选项只允许用在列表显示模式"
 
-#: builtin/tag.c:597
+#: builtin/tag.c:598
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "'%s' 不是一个有效的标签名称。"
 
-#: builtin/tag.c:602
+#: builtin/tag.c:603
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "标签 '%s' 已存在"
 
-#: builtin/tag.c:633
+#: builtin/tag.c:634
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "已更新标签 '%s'(曾为 %s)\n"
 
+#: builtin/unpack-objects.c:95
+msgid "pack exceeds maximum allowed size"
+msgstr "包超过了最大允许大小"
+
 #: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
 msgstr "展开对象中"
@@ -23273,157 +23785,157 @@ msgstr " OK"
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<选项>] [--] [<文件>...]"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:993
 msgid "continue refresh even when index needs update"
 msgstr "当索引需要更新时继续刷新"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:996
 msgid "refresh: ignore submodules"
 msgstr "刷新:忽略子模组"
 
-#: builtin/update-index.c:980
+#: builtin/update-index.c:999
 msgid "do not ignore new files"
 msgstr "不忽略新的文件"
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:1001
 msgid "let files replace directories and vice-versa"
 msgstr "让文件替换目录(反之亦然)"
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:1003
 msgid "notice files missing from worktree"
 msgstr "通知文件从工作区丢失"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:1005
 msgid "refresh even if index contains unmerged entries"
 msgstr "即使索引区包含未合并的条目也执行刷新"
 
-#: builtin/update-index.c:989
+#: builtin/update-index.c:1008
 msgid "refresh stat information"
 msgstr "刷新统计信息"
 
-#: builtin/update-index.c:993
+#: builtin/update-index.c:1012
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "类似于 --refresh,但是忽略 assume-unchanged 设置"
 
-#: builtin/update-index.c:997
+#: builtin/update-index.c:1016
 msgid "<mode>,<object>,<path>"
 msgstr "<存取模式>,<对象>,<路径>"
 
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1017
 msgid "add the specified entry to the index"
 msgstr "添加指定的条目到索引区"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1027
 msgid "mark files as \"not changing\""
 msgstr "把文件标记为 \"没有变更\""
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1030
 msgid "clear assumed-unchanged bit"
 msgstr "清除 assumed-unchanged 位"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1033
 msgid "mark files as \"index-only\""
 msgstr "把文件标记为 \"仅索引\""
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1036
 msgid "clear skip-worktree bit"
 msgstr "清除 skip-worktree 位"
 
-#: builtin/update-index.c:1020
+#: builtin/update-index.c:1039
 msgid "do not touch index-only entries"
 msgstr "不要触碰仅索引条目"
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1041
 msgid "add to index only; do not add content to object database"
 msgstr "只添加到索引区;不添加对象到对象库"
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1043
 msgid "remove named paths even if present in worktree"
 msgstr "即使存在工作区里,也删除路径"
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1045
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "携带 --stdin:输入的行以 null 字符终止"
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1047
 msgid "read list of paths to be updated from standard input"
 msgstr "从标准输入中读取需要更新的路径列表"
 
-#: builtin/update-index.c:1032
+#: builtin/update-index.c:1051
 msgid "add entries from standard input to the index"
 msgstr "从标准输入添加条目到索引区"
 
-#: builtin/update-index.c:1036
+#: builtin/update-index.c:1055
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "为指定文件重新生成第2和第3暂存区"
 
-#: builtin/update-index.c:1040
+#: builtin/update-index.c:1059
 msgid "only update entries that differ from HEAD"
 msgstr "只更新与 HEAD 不同的条目"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1063
 msgid "ignore files missing from worktree"
 msgstr "忽略工作区丢失的文件"
 
-#: builtin/update-index.c:1047
+#: builtin/update-index.c:1066
 msgid "report actions to standard output"
 msgstr "在标准输出显示操作"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1068
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(for porcelains) 忘记保存的未解决的冲突"
 
-#: builtin/update-index.c:1053
+#: builtin/update-index.c:1072
 msgid "write index in this format"
 msgstr "以这种格式写入索引区"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1074
 msgid "enable or disable split index"
 msgstr "启用或禁用索引拆分"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1076
 msgid "enable/disable untracked cache"
 msgstr "启用/禁用对未跟踪文件的缓存"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1078
 msgid "test if the filesystem supports untracked cache"
 msgstr "测试文件系统是否支持未跟踪文件缓存"
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1080
 msgid "enable untracked cache without testing the filesystem"
 msgstr "无需检测文件系统,启用对未跟踪文件的缓存"
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1082
 msgid "write out the index even if is not flagged as changed"
 msgstr "即使没有被标记为已更改,也要写出索引"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1084
 msgid "enable or disable file system monitor"
 msgstr "启用或禁用文件系统监控"
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1086
 msgid "mark files as fsmonitor valid"
 msgstr "标记文件为 fsmonitor 有效"
 
-#: builtin/update-index.c:1070
+#: builtin/update-index.c:1089
 msgid "clear fsmonitor valid bit"
 msgstr "清除 fsmonitor 有效位"
 
-#: builtin/update-index.c:1173
+#: builtin/update-index.c:1195
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
 msgstr ""
 "core.splitIndex 被设置为 false。如果您确实要启用索引拆分,请删除或修改它。"
 
-#: builtin/update-index.c:1182
+#: builtin/update-index.c:1204
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
 msgstr ""
 "core.splitIndex 被设置为 true。如果您确实要禁用索引拆分,请删除或修改它。"
 
-#: builtin/update-index.c:1194
+#: builtin/update-index.c:1216
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -23431,11 +23943,11 @@ msgstr ""
 "core.untrackedCache 被设置为 true。如果您确实要禁用未跟踪文件缓存,请删除或修"
 "改它。"
 
-#: builtin/update-index.c:1198
+#: builtin/update-index.c:1220
 msgid "Untracked cache disabled"
 msgstr "缓存未跟踪文件被禁用"
 
-#: builtin/update-index.c:1206
+#: builtin/update-index.c:1228
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -23443,25 +23955,25 @@ msgstr ""
 "core.untrackedCache 被设置为 false。如果您确实要启用未跟踪文件缓存,请删除或"
 "修改它。"
 
-#: builtin/update-index.c:1210
+#: builtin/update-index.c:1232
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "缓存未跟踪文件在 '%s' 启用"
 
-#: builtin/update-index.c:1218
+#: builtin/update-index.c:1241
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr "core.fsmonitor 未设置;如果想要启用 fsmonitor 请设置该选项"
 
-#: builtin/update-index.c:1222
+#: builtin/update-index.c:1246
 msgid "fsmonitor enabled"
 msgstr "fsmonitor 被启用"
 
-#: builtin/update-index.c:1225
+#: builtin/update-index.c:1250
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr "core.fsmonitor 已设置;如果想要禁用 fsmonitor 请移除该选项"
 
-#: builtin/update-index.c:1229
+#: builtin/update-index.c:1254
 msgid "fsmonitor disabled"
 msgstr "fsmonitor 被禁用"
 
@@ -23493,10 +24005,6 @@ msgstr "标准输入有以 NUL 字符终止的参数"
 msgid "read updates from stdin"
 msgstr "从标准输入读取更新"
 
-#: builtin/update-server-info.c:7
-msgid "git update-server-info [--force]"
-msgstr "git update-server-info [--force]"
-
 #: builtin/update-server-info.c:15
 msgid "update the info files from scratch"
 msgstr "从头开始更新文件信息"
@@ -23578,33 +24086,37 @@ msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<选项>] <工作区>"
 
 #: builtin/worktree.c:25
+msgid "git worktree repair [<path>...]"
+msgstr "git worktree repair [<路径>...]"
+
+#: builtin/worktree.c:26
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <路径>"
 
-#: builtin/worktree.c:75
+#: builtin/worktree.c:76
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr "删除 %s/%s: %s"
 
-#: builtin/worktree.c:148
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
 msgstr "报告清除的工作区"
 
-#: builtin/worktree.c:150
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr "将早于 <时间> 的工作区过期"
 
-#: builtin/worktree.c:220
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr "'%s' 已经存在"
 
-#: builtin/worktree.c:229
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
 msgstr "无法使用的工作区目标 '%s'"
 
-#: builtin/worktree.c:234
+#: builtin/worktree.c:235
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
@@ -23613,7 +24125,7 @@ msgstr ""
 "'%s' 是一个丢失但锁定的工作区,\n"
 "使用 '%s -f -f' 覆盖,或用 'unlock' 和 'prune' 或 'remove' 清除"
 
-#: builtin/worktree.c:236
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
@@ -23622,127 +24134,146 @@ msgstr ""
 "'%s' 是一个丢失但已经注册的工作区,\n"
 "使用 '%s -f' 覆盖,或用 'prune' 或 'remove' 清除"
 
-#: builtin/worktree.c:287
+#: builtin/worktree.c:248
+#, c-format
+msgid "failed to copy '%s' to '%s'; sparse-checkout may not work correctly"
+msgstr "无法将 '%s' 复制至 '%s';稀疏检出可能无法正确工作"
+
+#: builtin/worktree.c:268
+#, c-format
+msgid "failed to copy worktree config from '%s' to '%s'"
+msgstr "无法把工作树配置从 '%s' 拷贝到 '%s'"
+
+#: builtin/worktree.c:280 builtin/worktree.c:285
+#, c-format
+msgid "failed to unset '%s' in '%s'"
+msgstr "无法在 '%2$s' 中取消配置 '%1$s'"
+
+#: builtin/worktree.c:356
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "不能创建目录 '%s'"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:378
 msgid "initializing"
 msgstr "初始化"
 
-#: builtin/worktree.c:420 builtin/worktree.c:426
+#: builtin/worktree.c:492 builtin/worktree.c:498
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "准备工作区(新分支 '%s')"
 
-#: builtin/worktree.c:422
+#: builtin/worktree.c:494
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr "准备工作区(重置分支 '%s',之前为 %s)"
 
-#: builtin/worktree.c:431
+#: builtin/worktree.c:503
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "准备工作区(检出 '%s')"
 
-#: builtin/worktree.c:437
+#: builtin/worktree.c:509
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "准备工作区(分离头指针 %s)"
 
-#: builtin/worktree.c:482
+#: builtin/worktree.c:554
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr "检出 <分支>,即使已经被检出到其它工作区"
 
-#: builtin/worktree.c:485
+#: builtin/worktree.c:557
 msgid "create a new branch"
 msgstr "创建一个新分支"
 
-#: builtin/worktree.c:487
+#: builtin/worktree.c:559
 msgid "create or reset a branch"
 msgstr "创建或重置一个分支"
 
-#: builtin/worktree.c:489
+#: builtin/worktree.c:561
 msgid "populate the new working tree"
 msgstr "生成新的工作区"
 
-#: builtin/worktree.c:490
+#: builtin/worktree.c:562
 msgid "keep the new working tree locked"
 msgstr "锁定新工作区"
 
-#: builtin/worktree.c:492 builtin/worktree.c:729
+#: builtin/worktree.c:564 builtin/worktree.c:809
 msgid "reason for locking"
 msgstr "锁定原因"
 
-#: builtin/worktree.c:495
+#: builtin/worktree.c:567
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "设置跟踪模式(参见 git-branch(1))"
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:570
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "尝试为新分支名匹配一个远程跟踪分支"
 
-#: builtin/worktree.c:512
+#: builtin/worktree.c:584
 msgid "added with --lock"
 msgstr "由 --lock 添加"
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:646
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "只能在创建新分支时使用选项 --[no-]track "
 
-#: builtin/worktree.c:691
+#: builtin/worktree.c:766
 msgid "show extended annotations and reasons, if available"
 msgstr "显示扩展的注释和原因(如果有)"
 
-#: builtin/worktree.c:693
+#: builtin/worktree.c:768
 msgid "add 'prunable' annotation to worktrees older than <time>"
 msgstr "向早于 <时间> 的工作区添添加“可修剪”注释"
 
-#: builtin/worktree.c:741 builtin/worktree.c:774 builtin/worktree.c:848
-#: builtin/worktree.c:972
+#: builtin/worktree.c:770
+msgid "terminate records with a NUL character"
+msgstr "使用 NUL 字符终结记录"
+
+#: builtin/worktree.c:821 builtin/worktree.c:854 builtin/worktree.c:928
+#: builtin/worktree.c:1052
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "'%s' 不是一个工作区"
 
-#: builtin/worktree.c:743 builtin/worktree.c:776
+#: builtin/worktree.c:823 builtin/worktree.c:856
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "主工作区无法被加锁或解锁"
 
-#: builtin/worktree.c:748
+#: builtin/worktree.c:828
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "'%s' 已被锁定,原因:%s"
 
-#: builtin/worktree.c:750
+#: builtin/worktree.c:830
 #, c-format
 msgid "'%s' is already locked"
 msgstr "'%s' 已被锁定"
 
-#: builtin/worktree.c:778
+#: builtin/worktree.c:858
 #, c-format
 msgid "'%s' is not locked"
 msgstr "'%s' 未被锁定"
 
-#: builtin/worktree.c:819
+#: builtin/worktree.c:899
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr "不能移动或删除包含子模组的工作区"
 
-#: builtin/worktree.c:827
+#: builtin/worktree.c:907
 msgid "force move even if worktree is dirty or locked"
 msgstr "强制移动,即使工作区是脏的或已锁定"
 
-#: builtin/worktree.c:850 builtin/worktree.c:974
+#: builtin/worktree.c:930 builtin/worktree.c:1054
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "'%s' 是一个主工作区"
 
-#: builtin/worktree.c:855
+#: builtin/worktree.c:935
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "无法从 '%s' 算出目标名称"
 
-#: builtin/worktree.c:868
+#: builtin/worktree.c:948
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -23751,7 +24282,7 @@ msgstr ""
 "无法移动一个锁定的工作区,锁定原因:%s\n"
 "使用 'move -f -f' 覆盖或先解锁"
 
-#: builtin/worktree.c:870
+#: builtin/worktree.c:950
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -23759,36 +24290,36 @@ msgstr ""
 "无法移动一个锁定的工作区,\n"
 "使用 'move -f -f' 覆盖或先解锁"
 
-#: builtin/worktree.c:873
+#: builtin/worktree.c:953
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "验证失败,无法移动工作区:%s"
 
-#: builtin/worktree.c:878
+#: builtin/worktree.c:958
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "无法移动 '%s' 到 '%s'"
 
-#: builtin/worktree.c:924
+#: builtin/worktree.c:1004
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "无法在 '%s' 中执行 'git status'"
 
-#: builtin/worktree.c:928
+#: builtin/worktree.c:1008
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr "'%s' 包含修改或未跟踪的文件,使用 --force 删除"
 
-#: builtin/worktree.c:933
+#: builtin/worktree.c:1013
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "无法在 '%s' 中执行 'git status',退出码 %d"
 
-#: builtin/worktree.c:956
+#: builtin/worktree.c:1036
 msgid "force removal even if worktree is dirty or locked"
 msgstr "强制删除,即使工作区是脏的或已锁定"
 
-#: builtin/worktree.c:979
+#: builtin/worktree.c:1059
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -23797,7 +24328,7 @@ msgstr ""
 "无法删除一个锁定的工作区,锁定原因:%s\n"
 "使用 'remove -f -f' 覆盖或先解锁"
 
-#: builtin/worktree.c:981
+#: builtin/worktree.c:1061
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -23805,17 +24336,17 @@ msgstr ""
 "无法删除一个锁定的工作区,\n"
 "使用 'remove -f -f' 覆盖或先解锁"
 
-#: builtin/worktree.c:984
+#: builtin/worktree.c:1064
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "验证失败,无法删除工作区:%s"
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:1088
 #, c-format
 msgid "repair: %s: %s"
 msgstr "修理:%s:%s"
 
-#: builtin/worktree.c:1011
+#: builtin/worktree.c:1091
 #, c-format
 msgid "error: %s: %s"
 msgstr "错误:%s:%s"
@@ -23920,29 +24451,29 @@ msgstr "%s 的空别名"
 msgid "recursive alias: %s"
 msgstr "递归的别名:%s"
 
-#: git.c:479
+#: git.c:480
 msgid "write failure on standard output"
 msgstr "在标准输出写入失败"
 
-#: git.c:481
+#: git.c:482
 msgid "unknown write failure on standard output"
 msgstr "到标准输出的未知写入错误"
 
-#: git.c:483
+#: git.c:484
 msgid "close failed on standard output"
 msgstr "标准输出关闭失败"
 
-#: git.c:835
+#: git.c:838
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr "检测到别名循环:'%s'的扩展未终止:%s"
 
-#: git.c:885
+#: git.c:888
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "不能作为内置命令处理 %s"
 
-#: git.c:898
+#: git.c:901
 #, c-format
 msgid ""
 "usage: %s\n"
@@ -23951,12 +24482,12 @@ msgstr ""
 "用法:%s\n"
 "\n"
 
-#: git.c:918
+#: git.c:921
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr "展开别名命令 '%s' 失败,'%s' 不是一个 git 命令\n"
 
-#: git.c:930
+#: git.c:933
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "无法运行命令 '%s':%s\n"
@@ -24110,139 +24641,139 @@ msgstr ""
 "     请求:%s\n"
 "   重定向:%s"
 
-#: remote-curl.c:183
+#: remote-curl.c:184
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr "在 push-option 取值中无效的引号:'%s'"
 
-#: remote-curl.c:304
+#: remote-curl.c:308
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr "%sinfo/refs 无效:这是 git 仓库么?"
 
-#: remote-curl.c:405
+#: remote-curl.c:409
 msgid "invalid server response; expected service, got flush packet"
 msgstr "无效的服务端响应。预期服务,得到 flush 包"
 
-#: remote-curl.c:436
+#: remote-curl.c:440
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr "无效的服务端响应,得到 '%s'"
 
-#: remote-curl.c:496
+#: remote-curl.c:500
 #, c-format
 msgid "repository '%s' not found"
 msgstr "仓库 '%s' 未找到"
 
-#: remote-curl.c:500
+#: remote-curl.c:504
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr "'%s' 鉴权失败"
 
-#: remote-curl.c:504
+#: remote-curl.c:508
 #, c-format
 msgid "unable to access '%s' with http.pinnedPubkey configuration: %s"
 msgstr "无法以 http.pinnedPubkey 设置访问 '%s':%s"
 
-#: remote-curl.c:508
+#: remote-curl.c:512
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "无法访问 '%s':%s"
 
-#: remote-curl.c:514
+#: remote-curl.c:518
 #, c-format
 msgid "redirecting to %s"
 msgstr "重定向到 %s"
 
-#: remote-curl.c:645
+#: remote-curl.c:649
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr "当没有设置温和处理文件结束符(EOF)时,不应该有文件结束符"
 
-#: remote-curl.c:657
+#: remote-curl.c:661
 msgid "remote server sent unexpected response end packet"
 msgstr "远程服务器发送意外的响应结束数据包"
 
-#: remote-curl.c:726
+#: remote-curl.c:730
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr "无法倒回 rpc post 数据 - 尝试增加 http.postBuffer"
 
-#: remote-curl.c:755
+#: remote-curl.c:759
 #, c-format
 msgid "remote-curl: bad line length character: %.4s"
 msgstr "remote-curl:错误的行宽字符:%.4s"
 
-#: remote-curl.c:757
+#: remote-curl.c:761
 msgid "remote-curl: unexpected response end packet"
 msgstr "remote-curl:意外响应结束包"
 
-#: remote-curl.c:833
+#: remote-curl.c:837
 #, c-format
 msgid "RPC failed; %s"
 msgstr "RPC 失败。%s"
 
-#: remote-curl.c:873
+#: remote-curl.c:877
 msgid "cannot handle pushes this big"
 msgstr "不能处理这么大的推送"
 
-#: remote-curl.c:986
+#: remote-curl.c:990
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr "不能压缩请求,zlib 压缩错误 %d"
 
-#: remote-curl.c:990
+#: remote-curl.c:994
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr "不能压缩请求,zlib 结束错误 %d"
 
-#: remote-curl.c:1040
+#: remote-curl.c:1044
 #, c-format
 msgid "%d bytes of length header were received"
 msgstr "收到了 %d 字节长度的头信息"
 
-#: remote-curl.c:1042
+#: remote-curl.c:1046
 #, c-format
 msgid "%d bytes of body are still expected"
 msgstr "预期仍然需要 %d 个字节的正文"
 
-#: remote-curl.c:1131
+#: remote-curl.c:1135
 msgid "dumb http transport does not support shallow capabilities"
 msgstr "哑 http 传输不支持浅克隆能力"
 
-#: remote-curl.c:1146
+#: remote-curl.c:1150
 msgid "fetch failed."
 msgstr "获取失败。"
 
-#: remote-curl.c:1192
+#: remote-curl.c:1198
 msgid "cannot fetch by sha1 over smart http"
 msgstr "无法通过智能 HTTP 获取 sha1"
 
-#: remote-curl.c:1236 remote-curl.c:1242
+#: remote-curl.c:1242 remote-curl.c:1248
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr "协议错误:期望 sha/ref,却得到 '%s'"
 
-#: remote-curl.c:1254 remote-curl.c:1372
+#: remote-curl.c:1260 remote-curl.c:1378
 #, c-format
 msgid "http transport does not support %s"
 msgstr "http 传输协议不支持 %s"
 
-#: remote-curl.c:1290
+#: remote-curl.c:1296
 msgid "git-http-push failed"
 msgstr "git-http-push 失败"
 
-#: remote-curl.c:1478
+#: remote-curl.c:1485
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr "remote-curl:用法:git remote-curl <远程> [<url>]"
 
-#: remote-curl.c:1510
+#: remote-curl.c:1517
 msgid "remote-curl: error reading command stream from git"
 msgstr "remote-curl:错误读取来自 git 的命令流"
 
-#: remote-curl.c:1517
+#: remote-curl.c:1524
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr "remote-curl:尝试没有本地仓库下获取"
 
-#: remote-curl.c:1558
+#: remote-curl.c:1565
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr "remote-curl:未知的来自 git 的命令 '%s'"
@@ -24255,121 +24786,121 @@ msgstr "需要一个工作目录"
 msgid "could not find enlistment root"
 msgstr "无法找到登记根"
 
-#: contrib/scalar/scalar.c:89 contrib/scalar/scalar.c:351
-#: contrib/scalar/scalar.c:436 contrib/scalar/scalar.c:579
+#: contrib/scalar/scalar.c:89 contrib/scalar/scalar.c:350
+#: contrib/scalar/scalar.c:435 contrib/scalar/scalar.c:578
 #, c-format
 msgid "could not switch to '%s'"
 msgstr "无法切换到 '%s'"
 
-#: contrib/scalar/scalar.c:180
+#: contrib/scalar/scalar.c:179
 #, c-format
 msgid "could not configure %s=%s"
 msgstr "无法配置 %s=%s"
 
-#: contrib/scalar/scalar.c:198
+#: contrib/scalar/scalar.c:197
 msgid "could not configure log.excludeDecoration"
 msgstr "无法配置 log.excludeDecoration"
 
-#: contrib/scalar/scalar.c:219
+#: contrib/scalar/scalar.c:218
 msgid "Scalar enlistments require a worktree"
 msgstr "Scalar 登记需要一个工作树"
 
-#: contrib/scalar/scalar.c:311
+#: contrib/scalar/scalar.c:310
 #, c-format
 msgid "remote HEAD is not a branch: '%.*s'"
 msgstr "远程 HEAD 不是一个分支:'%.*s'"
 
-#: contrib/scalar/scalar.c:317
+#: contrib/scalar/scalar.c:316
 msgid "failed to get default branch name from remote; using local default"
 msgstr "无法从远程获取默认分支名称;使用本地默认值"
 
-#: contrib/scalar/scalar.c:330
+#: contrib/scalar/scalar.c:329
 msgid "failed to get default branch name"
 msgstr "无法获取默认分支名称"
 
-#: contrib/scalar/scalar.c:341
+#: contrib/scalar/scalar.c:340
 msgid "failed to unregister repository"
 msgstr "无法取消注册仓库"
 
-#: contrib/scalar/scalar.c:356
+#: contrib/scalar/scalar.c:355
 msgid "failed to delete enlistment directory"
 msgstr "无法删除登记目录"
 
-#: contrib/scalar/scalar.c:376
+#: contrib/scalar/scalar.c:375
 msgid "branch to checkout after clone"
 msgstr "克隆后要检出的分支"
 
-#: contrib/scalar/scalar.c:378
+#: contrib/scalar/scalar.c:377
 msgid "when cloning, create full working directory"
 msgstr "在克隆时,创建完整的工作目录"
 
-#: contrib/scalar/scalar.c:380
+#: contrib/scalar/scalar.c:379
 msgid "only download metadata for the branch that will be checked out"
 msgstr "只下载要检出的分支的元信息"
 
-#: contrib/scalar/scalar.c:385
+#: contrib/scalar/scalar.c:384
 msgid "scalar clone [<options>] [--] <repo> [<dir>]"
 msgstr "scalar clone [<选项>] [--] <仓库> [<目录>]"
 
-#: contrib/scalar/scalar.c:410
+#: contrib/scalar/scalar.c:409
 #, c-format
 msgid "cannot deduce worktree name from '%s'"
 msgstr "无法从 '%s' 猜测工作区名称"
 
-#: contrib/scalar/scalar.c:419
+#: contrib/scalar/scalar.c:418
 #, c-format
 msgid "directory '%s' exists already"
 msgstr "目录 '%s' 已存在"
 
-#: contrib/scalar/scalar.c:446
+#: contrib/scalar/scalar.c:445
 #, c-format
 msgid "failed to get default branch for '%s'"
 msgstr "无法获取 '%s' 的默认分支"
 
-#: contrib/scalar/scalar.c:457
+#: contrib/scalar/scalar.c:456
 #, c-format
 msgid "could not configure remote in '%s'"
 msgstr "无法在 '%s' 中配置远程"
 
-#: contrib/scalar/scalar.c:466
+#: contrib/scalar/scalar.c:465
 #, c-format
 msgid "could not configure '%s'"
 msgstr "无法配置 '%s'"
 
-#: contrib/scalar/scalar.c:469
+#: contrib/scalar/scalar.c:468
 msgid "partial clone failed; attempting full clone"
 msgstr "部分克隆失败;尝试完整克隆"
 
-#: contrib/scalar/scalar.c:473
+#: contrib/scalar/scalar.c:472
 msgid "could not configure for full clone"
 msgstr "无法配置完整克隆"
 
-#: contrib/scalar/scalar.c:505
+#: contrib/scalar/scalar.c:504
 msgid "`scalar list` does not take arguments"
 msgstr "`scalar list` 不带参数"
 
-#: contrib/scalar/scalar.c:518
+#: contrib/scalar/scalar.c:517
 msgid "scalar register [<enlistment>]"
 msgstr "scalar register [<登记>]"
 
-#: contrib/scalar/scalar.c:545
+#: contrib/scalar/scalar.c:544
 msgid "reconfigure all registered enlistments"
 msgstr "重新配置所有注册的登记"
 
-#: contrib/scalar/scalar.c:549
+#: contrib/scalar/scalar.c:548
 msgid "scalar reconfigure [--all | <enlistment>]"
 msgstr "scalar reconfigure [--all | <登记>]"
 
-#: contrib/scalar/scalar.c:567
+#: contrib/scalar/scalar.c:566
 msgid "--all or <enlistment>, but not both"
 msgstr "--all 或者 <登记>,而不是两个一起"
 
-#: contrib/scalar/scalar.c:582
+#: contrib/scalar/scalar.c:581
 #, c-format
 msgid "git repository gone in '%s'"
 msgstr "在 '%s' 的 git 仓库已消失"
 
-#: contrib/scalar/scalar.c:622
+#: contrib/scalar/scalar.c:621
 msgid ""
 "scalar run <task> [<enlistment>]\n"
 "Tasks:\n"
@@ -24377,42 +24908,55 @@ msgstr ""
 "scalar run <任务> [<登记>]\n"
 "任务:\n"
 
-#: contrib/scalar/scalar.c:640
+#: contrib/scalar/scalar.c:639
 #, c-format
 msgid "no such task: '%s'"
 msgstr "没有此任务:'%s'"
 
-#: contrib/scalar/scalar.c:690
+#: contrib/scalar/scalar.c:689
 msgid "scalar unregister [<enlistment>]"
 msgstr "scalar unregister [<登记>]"
 
-#: contrib/scalar/scalar.c:737
+#: contrib/scalar/scalar.c:736
 msgid "scalar delete <enlistment>"
 msgstr "scalar delete <登记>"
 
-#: contrib/scalar/scalar.c:752
+#: contrib/scalar/scalar.c:751
 msgid "refusing to delete current working directory"
 msgstr "拒绝删除当前工作目录"
 
-#: contrib/scalar/scalar.c:767
+#: contrib/scalar/scalar.c:766
 msgid "include Git version"
 msgstr "包括 Git 的版本"
 
-#: contrib/scalar/scalar.c:769
+#: contrib/scalar/scalar.c:768
 msgid "include Git's build options"
 msgstr "包括 Git 的构建选项"
 
-#: contrib/scalar/scalar.c:773
+#: contrib/scalar/scalar.c:772
 msgid "scalar verbose [-v | --verbose] [--build-options]"
 msgstr "scalar verbose [-v | --verbose] [--build-options]"
 
+#: contrib/scalar/scalar.c:813
+msgid "-C requires a <directory>"
+msgstr "-C 需要 <目录>"
+
+#: contrib/scalar/scalar.c:815
+#, c-format
+msgid "could not change to '%s'"
+msgstr "无法变更到 '%s'"
+
 #: contrib/scalar/scalar.c:821
+msgid "-c requires a <key>=<value> argument"
+msgstr "-c 需要 <键>=<值> 参数"
+
+#: contrib/scalar/scalar.c:839
 msgid ""
-"scalar <command> [<options>]\n"
+"scalar [-C <directory>] [-c <key>=<value>] <command> [<options>]\n"
 "\n"
 "Commands:\n"
 msgstr ""
-"scalar <命令> [<选项>]\n"
+"scalar [-C <目录>] [-c <键>=<值>] <命令> [<选项>]\n"
 "\n"
 "命令:\n"
 
@@ -24424,43 +24968,43 @@ msgstr "编译器信息不可用\n"
 msgid "no libc information available\n"
 msgstr "libc 信息不可用\n"
 
-#: list-objects-filter-options.h:94
+#: list-objects-filter-options.h:126
 msgid "args"
 msgstr "参数"
 
-#: list-objects-filter-options.h:95
+#: list-objects-filter-options.h:127
 msgid "object filtering"
 msgstr "对象过滤"
 
-#: parse-options.h:183
+#: parse-options.h:188
 msgid "expiry-date"
 msgstr "到期时间"
 
-#: parse-options.h:197
+#: parse-options.h:202
 msgid "no-op (backward compatibility)"
 msgstr "空操作(向后兼容)"
 
-#: parse-options.h:310
+#: parse-options.h:341
 msgid "be more verbose"
 msgstr "更加详细"
 
-#: parse-options.h:312
+#: parse-options.h:343
 msgid "be more quiet"
 msgstr "更加安静"
 
-#: parse-options.h:318
+#: parse-options.h:349
 msgid "use <n> digits to display object names"
 msgstr "用 <n> 位数字显示对象名"
 
-#: parse-options.h:337
+#: parse-options.h:368
 msgid "how to strip spaces and #comments from message"
 msgstr "设置如何删除提交说明里的空格和#注释"
 
-#: parse-options.h:338
+#: parse-options.h:369
 msgid "read pathspec from file"
 msgstr "从文件读取路径表达式"
 
-#: parse-options.h:339
+#: parse-options.h:370
 msgid ""
 "with --pathspec-from-file, pathspec elements are separated with NUL character"
 msgstr "使用 --pathspec-from-file,路径表达式用空字符分隔"
@@ -24710,447 +25254,452 @@ msgid "Display help information about Git"
 msgstr "显示 Git 的帮助信息"
 
 #: command-list.h:108
+msgid "Run git hooks"
+msgstr "运行 git 钩子"
+
+#: command-list.h:109
 msgid "Server side implementation of Git over HTTP"
 msgstr "Git HTTP 协议的服务端实现"
 
-#: command-list.h:109
+#: command-list.h:110
 msgid "Download from a remote Git repository via HTTP"
 msgstr "通过 HTTP 从远程 Git 仓库下载"
 
-#: command-list.h:110
+#: command-list.h:111
 msgid "Push objects over HTTP/DAV to another repository"
 msgstr "通过 HTTP/DAV 推送对象另一个仓库"
 
-#: command-list.h:111
+#: command-list.h:112
 msgid "Send a collection of patches from stdin to an IMAP folder"
 msgstr "从标准输入将一组补丁发送到IMAP文件夹"
 
-#: command-list.h:112
+#: command-list.h:113
 msgid "Build pack index file for an existing packed archive"
 msgstr "从一个现存的包存档文件创建包索引"
 
-#: command-list.h:113
+#: command-list.h:114
 msgid "Create an empty Git repository or reinitialize an existing one"
 msgstr "创建一个空的 Git 仓库或重新初始化一个已存在的仓库"
 
-#: command-list.h:114
+#: command-list.h:115
 msgid "Instantly browse your working repository in gitweb"
 msgstr "在 gitweb 中即时浏览您的工作仓库"
 
-#: command-list.h:115
+#: command-list.h:116
 msgid "Add or parse structured information in commit messages"
 msgstr "添加或解析提交说明中的结构化信息"
 
-#: command-list.h:116
+#: command-list.h:117
 msgid "Show commit logs"
 msgstr "显示提交日志"
 
-#: command-list.h:117
+#: command-list.h:118
 msgid "Show information about files in the index and the working tree"
 msgstr "显示索引和工作区中文件的信息"
 
-#: command-list.h:118
+#: command-list.h:119
 msgid "List references in a remote repository"
 msgstr "显示一个远程仓库的引用"
 
-#: command-list.h:119
+#: command-list.h:120
 msgid "List the contents of a tree object"
 msgstr "显示一个树对象的内容"
 
-#: command-list.h:120
+#: command-list.h:121
 msgid "Extracts patch and authorship from a single e-mail message"
 msgstr "从单个电子邮件中提取补丁和作者身份"
 
-#: command-list.h:121
+#: command-list.h:122
 msgid "Simple UNIX mbox splitter program"
 msgstr "简单的 UNIX mbox 邮箱切分程序"
 
-#: command-list.h:122
+#: command-list.h:123
 msgid "Run tasks to optimize Git repository data"
 msgstr "运行任务以优化仓库数据"
 
-#: command-list.h:123
+#: command-list.h:124
 msgid "Join two or more development histories together"
 msgstr "合并两个或更多开发历史"
 
-#: command-list.h:124
+#: command-list.h:125
 msgid "Find as good common ancestors as possible for a merge"
 msgstr "为了合并查找尽可能好的公共祖先提交"
 
-#: command-list.h:125
+#: command-list.h:126
 msgid "Run a three-way file merge"
 msgstr "运行一个三路文件合并"
 
-#: command-list.h:126
+#: command-list.h:127
 msgid "Run a merge for files needing merging"
 msgstr "对于需要合并的文件执行合并"
 
-#: command-list.h:127
+#: command-list.h:128
 msgid "The standard helper program to use with git-merge-index"
 msgstr "与 git-merge-index 一起使用的标准向导程序"
 
-#: command-list.h:128
+#: command-list.h:129
 msgid "Show three-way merge without touching index"
 msgstr "在不动索引的情况下显示三路合并"
 
-#: command-list.h:129
+#: command-list.h:130
 msgid "Run merge conflict resolution tools to resolve merge conflicts"
 msgstr "运行合并冲突解决工具以解决合并冲突"
 
-#: command-list.h:130
+#: command-list.h:131
 msgid "Creates a tag object with extra validation"
 msgstr "创建一个有额外验证的标签对象"
 
-#: command-list.h:131
+#: command-list.h:132
 msgid "Build a tree-object from ls-tree formatted text"
 msgstr "基于 ls-tree 的格式化文本创建一个树对象"
 
-#: command-list.h:132
+#: command-list.h:133
 msgid "Write and verify multi-pack-indexes"
 msgstr "写入和校验多包索引"
 
-#: command-list.h:133
+#: command-list.h:134
 msgid "Move or rename a file, a directory, or a symlink"
 msgstr "移动或重命名一个文件、目录或符号链接"
 
 # 查找给定版本的符号名称
-#: command-list.h:134
+#: command-list.h:135
 msgid "Find symbolic names for given revs"
 msgstr "查找给定版本的符号名称"
 
-#: command-list.h:135
+#: command-list.h:136
 msgid "Add or inspect object notes"
 msgstr "添加或检查对象注释"
 
-#: command-list.h:136
+#: command-list.h:137
 msgid "Import from and submit to Perforce repositories"
 msgstr "导入和提交到 Perforce 仓库中"
 
-#: command-list.h:137
+#: command-list.h:138
 msgid "Create a packed archive of objects"
 msgstr "创建对象的存档包"
 
-#: command-list.h:138
+#: command-list.h:139
 msgid "Find redundant pack files"
 msgstr "查找冗余的包文件"
 
-#: command-list.h:139
+#: command-list.h:140
 msgid "Pack heads and tags for efficient repository access"
 msgstr "打包头和标签以实现高效的仓库访问"
 
-#: command-list.h:140
+#: command-list.h:141
 msgid "Compute unique ID for a patch"
 msgstr "计算一个补丁的唯一 ID"
 
-#: command-list.h:141
+#: command-list.h:142
 msgid "Prune all unreachable objects from the object database"
 msgstr "删除对象库中所有不可达对象"
 
-#: command-list.h:142
+#: command-list.h:143
 msgid "Remove extra objects that are already in pack files"
 msgstr "删除已经在包文件中的多余对象"
 
-#: command-list.h:143
+#: command-list.h:144
 msgid "Fetch from and integrate with another repository or a local branch"
 msgstr "获取并整合另外的仓库或一个本地分支"
 
-#: command-list.h:144
+#: command-list.h:145
 msgid "Update remote refs along with associated objects"
 msgstr "更新远程引用和相关的对象"
 
-#: command-list.h:145
+#: command-list.h:146
 msgid "Applies a quilt patchset onto the current branch"
 msgstr "将一个 quilt 补丁集应用到当前分支。"
 
-#: command-list.h:146
+#: command-list.h:147
 msgid "Compare two commit ranges (e.g. two versions of a branch)"
 msgstr "比较两个提交范围(如一个分支的两个版本)"
 
-#: command-list.h:147
+#: command-list.h:148
 msgid "Reads tree information into the index"
 msgstr "将树信息读取到索引"
 
-#: command-list.h:148
+#: command-list.h:149
 msgid "Reapply commits on top of another base tip"
 msgstr "在另一个分支上重新应用提交"
 
-#: command-list.h:149
+#: command-list.h:150
 msgid "Receive what is pushed into the repository"
 msgstr "接收推送到仓库中的对象"
 
-#: command-list.h:150
+#: command-list.h:151
 msgid "Manage reflog information"
 msgstr "管理 reflog 信息"
 
-#: command-list.h:151
+#: command-list.h:152
 msgid "Manage set of tracked repositories"
 msgstr "管理已跟踪仓库"
 
-#: command-list.h:152
+#: command-list.h:153
 msgid "Pack unpacked objects in a repository"
 msgstr "打包仓库中未打包对象"
 
-#: command-list.h:153
+#: command-list.h:154
 msgid "Create, list, delete refs to replace objects"
 msgstr "创建、列出、删除对象替换引用"
 
-#: command-list.h:154
+#: command-list.h:155
 msgid "Generates a summary of pending changes"
 msgstr "生成待定更改的摘要"
 
-#: command-list.h:155
+#: command-list.h:156
 msgid "Reuse recorded resolution of conflicted merges"
 msgstr "重用冲突合并的解决方案记录"
 
-#: command-list.h:156
+#: command-list.h:157
 msgid "Reset current HEAD to the specified state"
 msgstr "重置当前 HEAD 到指定状态"
 
-#: command-list.h:157
+#: command-list.h:158
 msgid "Restore working tree files"
 msgstr "恢复工作区文件"
 
-#: command-list.h:158
+#: command-list.h:159
 msgid "Lists commit objects in reverse chronological order"
 msgstr "按时间顺序列出提交对象"
 
-#: command-list.h:159
+#: command-list.h:160
 msgid "Pick out and massage parameters"
 msgstr "选出并处理参数"
 
-#: command-list.h:160
+#: command-list.h:161
 msgid "Revert some existing commits"
 msgstr "回退一些现存提交"
 
-#: command-list.h:161
+#: command-list.h:162
 msgid "Remove files from the working tree and from the index"
 msgstr "从工作区和索引中删除文件"
 
-#: command-list.h:162
+#: command-list.h:163
 msgid "Send a collection of patches as emails"
 msgstr "通过电子邮件发送一组补丁"
 
-#: command-list.h:163
+#: command-list.h:164
 msgid "Push objects over Git protocol to another repository"
 msgstr "使用 Git 协议推送对象到另一个仓库"
 
-#: command-list.h:164
+#: command-list.h:165
 msgid "Git's i18n setup code for shell scripts"
 msgstr "为 shell 脚本准备的 Git 国际化设置代码"
 
-#: command-list.h:165
+#: command-list.h:166
 msgid "Common Git shell script setup code"
 msgstr "常用的 Git shell 脚本设置代码"
 
-#: command-list.h:166
+#: command-list.h:167
 msgid "Restricted login shell for Git-only SSH access"
 msgstr "只允许 Git SSH 访问的受限登录shell"
 
-#: command-list.h:167
+#: command-list.h:168
 msgid "Summarize 'git log' output"
 msgstr "'git log' 输出摘要"
 
-#: command-list.h:168
+#: command-list.h:169
 msgid "Show various types of objects"
 msgstr "显示各种类型的对象"
 
-#: command-list.h:169
+#: command-list.h:170
 msgid "Show branches and their commits"
 msgstr "显示分支和提交"
 
-#: command-list.h:170
+#: command-list.h:171
 msgid "Show packed archive index"
 msgstr "显示打包归档索引"
 
-#: command-list.h:171
+#: command-list.h:172
 msgid "List references in a local repository"
 msgstr "显示本地仓库中的引用"
 
-#: command-list.h:172
-msgid "Initialize and modify the sparse-checkout"
-msgstr "初始化及修改稀疏检出"
-
+#  译者:中文字符串拼接,可删除前导空格
 #: command-list.h:173
+msgid "Reduce your working tree to a subset of tracked files"
+msgstr "将您的工作树缩减至已追踪文件的子集"
+
+#: command-list.h:174
 msgid "Add file contents to the staging area"
 msgstr "将文件内容添加到暂存区"
 
-#: command-list.h:174
+#: command-list.h:175
 msgid "Stash the changes in a dirty working directory away"
 msgstr "贮藏脏工作区中的修改"
 
-#: command-list.h:175
+#: command-list.h:176
 msgid "Show the working tree status"
 msgstr "显示工作区状态"
 
-#: command-list.h:176
+#: command-list.h:177
 msgid "Remove unnecessary whitespace"
 msgstr "删除不必要的空白字符"
 
-#: command-list.h:177
+#: command-list.h:178
 msgid "Initialize, update or inspect submodules"
 msgstr "初始化、更新或检查子模组"
 
-#: command-list.h:178
+#: command-list.h:179
 msgid "Bidirectional operation between a Subversion repository and Git"
 msgstr "Subersion 仓库和 Git 之间的双向操作"
 
-#: command-list.h:179
+#: command-list.h:180
 msgid "Switch branches"
 msgstr "切换分支"
 
-#: command-list.h:180
+#: command-list.h:181
 msgid "Read, modify and delete symbolic refs"
 msgstr "读取、修改和删除符号引用"
 
-#: command-list.h:181
+#: command-list.h:182
 msgid "Create, list, delete or verify a tag object signed with GPG"
 msgstr "创建、列出、删除或校验一个 GPG 签名的标签对象"
 
-#: command-list.h:182
+#: command-list.h:183
 msgid "Creates a temporary file with a blob's contents"
 msgstr "用 blob 数据对象的内容创建一个临时文件"
 
-#: command-list.h:183
+#: command-list.h:184
 msgid "Unpack objects from a packed archive"
 msgstr "从打包文件中解压缩对象"
 
-#: command-list.h:184
+#: command-list.h:185
 msgid "Register file contents in the working tree to the index"
 msgstr "将工作区的文件内容注册到索引"
 
-#: command-list.h:185
+#: command-list.h:186
 msgid "Update the object name stored in a ref safely"
 msgstr "安全地更新存储于引用中的对象名称"
 
-#: command-list.h:186
+#: command-list.h:187
 msgid "Update auxiliary info file to help dumb servers"
 msgstr "更新辅助信息文件以帮助哑协议服务"
 
-#: command-list.h:187
+#: command-list.h:188
 msgid "Send archive back to git-archive"
 msgstr "将存档发送回 git-archive"
 
-#: command-list.h:188
+#: command-list.h:189
 msgid "Send objects packed back to git-fetch-pack"
 msgstr "将对象压缩包发送回 git-fetch-pack"
 
-#: command-list.h:189
+#: command-list.h:190
 msgid "Show a Git logical variable"
 msgstr "显示一个Git逻辑变量"
 
-#: command-list.h:190
+#: command-list.h:191
 msgid "Check the GPG signature of commits"
 msgstr "检查 GPG 提交签名"
 
-#: command-list.h:191
+#: command-list.h:192
 msgid "Validate packed Git archive files"
 msgstr "校验打包的Git存仓文件"
 
-#: command-list.h:192
+#: command-list.h:193
 msgid "Check the GPG signature of tags"
 msgstr "检查标签的 GPG 签名"
 
-#: command-list.h:193
+#: command-list.h:194
 msgid "Show logs with difference each commit introduces"
 msgstr "显示每一个提交引入的差异日志"
 
-#: command-list.h:194
+#: command-list.h:195
 msgid "Manage multiple working trees"
 msgstr "管理多个工作区"
 
-#: command-list.h:195
+#: command-list.h:196
 msgid "Create a tree object from the current index"
 msgstr "从当前索引创建一个树对象"
 
-#: command-list.h:196
+#: command-list.h:197
 msgid "Defining attributes per path"
 msgstr "定义路径的属性"
 
-#: command-list.h:197
+#: command-list.h:198
 msgid "Git command-line interface and conventions"
 msgstr "Git 命令行界面和约定"
 
-#: command-list.h:198
+#: command-list.h:199
 msgid "A Git core tutorial for developers"
 msgstr "面向开发人员的 Git 核心教程"
 
-#: command-list.h:199
+#: command-list.h:200
 msgid "Providing usernames and passwords to Git"
 msgstr "为 Git 提供用户名和口令"
 
-#: command-list.h:200
+#: command-list.h:201
 msgid "Git for CVS users"
 msgstr "适合 CVS 用户的 Git 帮助"
 
-#: command-list.h:201
+#: command-list.h:202
 msgid "Tweaking diff output"
 msgstr "调整差异输出"
 
-#: command-list.h:202
+#: command-list.h:203
 msgid "A useful minimum set of commands for Everyday Git"
 msgstr "每一天 Git 的一组有用的最小命令集合"
 
-#: command-list.h:203
+#: command-list.h:204
 msgid "Frequently asked questions about using Git"
 msgstr "关于使用 Git 的常见问题"
 
-#: command-list.h:204
+#: command-list.h:205
 msgid "A Git Glossary"
 msgstr "Git 词汇表"
 
-#: command-list.h:205
+#: command-list.h:206
 msgid "Hooks used by Git"
 msgstr "Git 使用的钩子"
 
-#: command-list.h:206
+#: command-list.h:207
 msgid "Specifies intentionally untracked files to ignore"
 msgstr "忽略指定的未跟踪文件"
 
-#: command-list.h:207
+#: command-list.h:208
 msgid "The Git repository browser"
 msgstr "Git 仓库浏览器"
 
-#: command-list.h:208
+#: command-list.h:209
 msgid "Map author/committer names and/or E-Mail addresses"
 msgstr "映射作者/提交者的名称和/或邮件地址"
 
-#: command-list.h:209
+#: command-list.h:210
 msgid "Defining submodule properties"
 msgstr "定义子模组属性"
 
-#: command-list.h:210
+#: command-list.h:211
 msgid "Git namespaces"
 msgstr "Git 名字空间"
 
-#: command-list.h:211
+#: command-list.h:212
 msgid "Helper programs to interact with remote repositories"
 msgstr "与远程仓库交互的助手程序"
 
-#: command-list.h:212
+#: command-list.h:213
 msgid "Git Repository Layout"
 msgstr "Git 仓库布局"
 
-#: command-list.h:213
+#: command-list.h:214
 msgid "Specifying revisions and ranges for Git"
 msgstr "指定 Git 的版本和版本范围"
 
-#: command-list.h:214
+#: command-list.h:215
 msgid "Mounting one repository inside another"
 msgstr "将一个仓库安装到另外一个仓库中"
 
-#: command-list.h:215
+#: command-list.h:216
 msgid "A tutorial introduction to Git"
 msgstr "Git 入门教程"
 
-#: command-list.h:216
+#: command-list.h:217
 msgid "A tutorial introduction to Git: part two"
 msgstr "Git 入门教程:第二部分"
 
-#: command-list.h:217
+#: command-list.h:218
 msgid "Git web interface (web frontend to Git repositories)"
 msgstr "Git web 界面(Git 仓库的 web 前端)"
 
-#: command-list.h:218
+#: command-list.h:219
 msgid "An overview of recommended workflows with Git"
 msgstr "Git 推荐的工作流概览"
 
@@ -25192,66 +25741,44 @@ msgstr "尝试和 $pretty_name 的简单合并"
 msgid "Simple merge did not work, trying automatic merge."
 msgstr "简单合并未生效,尝试自动合并。"
 
-#: git-submodule.sh:401
-#, sh-format
-msgid "Unable to find current revision in submodule path '$displaypath'"
-msgstr "无法在子模组路径 '$displaypath' 中找到当前版本"
-
-#: git-submodule.sh:411
-#, sh-format
-msgid "Unable to fetch in submodule path '$sm_path'"
-msgstr "无法在子模组路径 '$sm_path' 中获取"
-
-#: git-submodule.sh:416
-#, sh-format
-msgid ""
-"Unable to find current ${remote_name}/${branch} revision in submodule path "
-"'$sm_path'"
-msgstr "无法在子模组路径 '$sm_path' 中找到当前版本 ${remote_name}/${branch}"
-
-#: git-submodule.sh:464
-#, sh-format
-msgid "Failed to recurse into submodule path '$displaypath'"
-msgstr "无法递归进子模组路径 '$displaypath'"
-
 #: git-sh-setup.sh:89 git-sh-setup.sh:94
 #, sh-format
 msgid "usage: $dashless $USAGE"
 msgstr "用法:$dashless $USAGE"
 
-#: git-sh-setup.sh:183
+#: git-sh-setup.sh:182
 #, sh-format
 msgid "Cannot chdir to $cdup, the toplevel of the working tree"
 msgstr "不能切换目录到 $cdup,工作区的顶级目录"
 
-#: git-sh-setup.sh:192 git-sh-setup.sh:199
+#: git-sh-setup.sh:191 git-sh-setup.sh:198
 #, sh-format
 msgid "fatal: $program_name cannot be used without a working tree."
 msgstr "致命错误:$program_name 不能在没有工作区的情况下使用"
 
-#: git-sh-setup.sh:213
+#: git-sh-setup.sh:212
 msgid "Cannot rewrite branches: You have unstaged changes."
 msgstr "不能重写分支:您有未暂存的变更。"
 
-#: git-sh-setup.sh:216
+#: git-sh-setup.sh:215
 #, sh-format
 msgid "Cannot $action: You have unstaged changes."
 msgstr "不能 $action:您有未暂存的变更。"
 
-#: git-sh-setup.sh:227
+#: git-sh-setup.sh:226
 #, sh-format
 msgid "Cannot $action: Your index contains uncommitted changes."
 msgstr "不能 $action:您的索引中包含未提交的变更。"
 
-#: git-sh-setup.sh:229
+#: git-sh-setup.sh:228
 msgid "Additionally, your index contains uncommitted changes."
 msgstr "而且您的索引中包含未提交的变更。"
 
-#: git-sh-setup.sh:349
+#: git-sh-setup.sh:348
 msgid "You need to run this command from the toplevel of the working tree."
 msgstr "您需要在工作区的顶级目录中运行这个命令。"
 
-#: git-sh-setup.sh:354
+#: git-sh-setup.sh:353
 msgid "Unable to determine absolute path of git directory"
 msgstr "不能确定 git 目录的绝对路径"
 
@@ -25911,23 +26438,23 @@ msgstr "不能以 7bit 形式发送信息"
 msgid "invalid transfer encoding"
 msgstr "无效的传送编码"
 
-#: git-send-email.perl:2095
+#: git-send-email.perl:2100
 #, perl-format
 msgid ""
-"fatal: %s: rejected by sendemail-validate hook\n"
+"fatal: %s: rejected by %s hook\n"
 "%s\n"
 "warning: no patches were sent\n"
 msgstr ""
-"致命错误:%s:被 sendemail-validate 挂钩拒绝\n"
+"致命错误:%s:被 %s 钩子拒绝\n"
 "%s\n"
 "警告:补丁未能发送\n"
 
-#: git-send-email.perl:2105 git-send-email.perl:2158 git-send-email.perl:2168
+#: git-send-email.perl:2110 git-send-email.perl:2163 git-send-email.perl:2173
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "不能打开 %s:%s\n"
 
-#: git-send-email.perl:2108
+#: git-send-email.perl:2113
 #, perl-format
 msgid ""
 "fatal: %s:%d is longer than 998 characters\n"
@@ -25936,13 +26463,13 @@ msgstr ""
 "致命错误:%s:%d 超过 998 字符\n"
 "警告:补丁未能发送\n"
 
-#: git-send-email.perl:2126
+#: git-send-email.perl:2131
 #, perl-format
 msgid "Skipping %s with backup suffix '%s'.\n"
 msgstr "略过 %s 含备份后缀 '%s'。\n"
 
 #. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:2130
+#: git-send-email.perl:2135
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "您真的要发送 %s?[y|N]:"
index 60fe1235b6870e185e0fb3445e28a0365b06ecc7..caf605733212f4e97a52aaeb5d4ddd4e6e4d9da6 100644 (file)
@@ -22,8 +22,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Git\n"
 "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2022-01-17 08:31+0800\n"
-"PO-Revision-Date: 2022-01-22 07:05+0800\n"
+"POT-Creation-Date: 2022-04-13 14:52+0800\n"
+"PO-Revision-Date: 2022-04-14 08:04+0800\n"
 "Last-Translator: Yi-Jyun Pan <pan93412@gmail.com>\n"
 "Language-Team: Chinese (Traditional) <http://weblate.slat.org/projects/git-"
 "po/git-cli/zh_Hant/>\n"
@@ -36,210 +36,209 @@ msgstr ""
 "X-ZhConverter: 繁化姬 dict-f4bc617e-r910 @ 2019/11/16 20:23:12 | https://"
 "zhconvert.org\n"
 
-#: add-interactive.c:380
+#: add-interactive.c:382
 #, c-format
 msgid "Huh (%s)?"
 msgstr "嗯(%s)?"
 
-#: add-interactive.c:533 add-interactive.c:834 reset.c:65 sequencer.c:3509
-#: sequencer.c:3974 sequencer.c:4136 builtin/rebase.c:1233
-#: builtin/rebase.c:1642
+#: add-interactive.c:535 add-interactive.c:836 reset.c:136 sequencer.c:3505
+#: sequencer.c:3970 sequencer.c:4127 builtin/rebase.c:1261
+#: builtin/rebase.c:1671
 msgid "could not read index"
 msgstr "無法讀取索引"
 
-#: add-interactive.c:588 git-add--interactive.perl:269
+#: add-interactive.c:590 git-add--interactive.perl:269
 #: git-add--interactive.perl:294
 msgid "binary"
 msgstr "二進位"
 
-#: add-interactive.c:646 git-add--interactive.perl:278
+#: add-interactive.c:648 git-add--interactive.perl:278
 #: git-add--interactive.perl:332
 msgid "nothing"
 msgstr "無"
 
-#: add-interactive.c:647 git-add--interactive.perl:314
+#: add-interactive.c:649 git-add--interactive.perl:314
 #: git-add--interactive.perl:329
 msgid "unchanged"
 msgstr "未變更"
 
-#: add-interactive.c:684 git-add--interactive.perl:641
+#: add-interactive.c:686 git-add--interactive.perl:641
 msgid "Update"
 msgstr "更新"
 
-#: add-interactive.c:701 add-interactive.c:889
+#: add-interactive.c:703 add-interactive.c:891
 #, c-format
 msgid "could not stage '%s'"
 msgstr "無法暫存「%s」"
 
-#: add-interactive.c:707 add-interactive.c:896 reset.c:89 sequencer.c:3713
+#: add-interactive.c:709 add-interactive.c:898 reset.c:160 sequencer.c:3709
 msgid "could not write index"
 msgstr "無法寫入索引"
 
-#: add-interactive.c:710 git-add--interactive.perl:626
+#: add-interactive.c:712 git-add--interactive.perl:626
 #, c-format, perl-format
 msgid "updated %d path\n"
 msgid_plural "updated %d paths\n"
 msgstr[0] "已更新 %d 個路徑\n"
 
-#: add-interactive.c:728 git-add--interactive.perl:676
+#: add-interactive.c:730 git-add--interactive.perl:676
 #, c-format, perl-format
 msgid "note: %s is untracked now.\n"
 msgstr "注意:%s 現已不再追蹤。\n"
 
-#: add-interactive.c:733 apply.c:4151 builtin/checkout.c:306
+#: add-interactive.c:735 apply.c:4133 builtin/checkout.c:311
 #: builtin/reset.c:167
 #, c-format
 msgid "make_cache_entry failed for path '%s'"
 msgstr "「%s」路徑執行 make_cache_entry 失敗"
 
-#: add-interactive.c:763 git-add--interactive.perl:653
+#: add-interactive.c:765 git-add--interactive.perl:653
 msgid "Revert"
 msgstr "還原"
 
-#: add-interactive.c:779
+#: add-interactive.c:781
 msgid "Could not parse HEAD^{tree}"
 msgstr "不能解析 HEAD^{樹}"
 
-#: add-interactive.c:817 git-add--interactive.perl:629
+#: add-interactive.c:819 git-add--interactive.perl:629
 #, c-format, perl-format
 msgid "reverted %d path\n"
 msgid_plural "reverted %d paths\n"
 msgstr[0] "還原了 %d 個路徑\n"
 
-#: add-interactive.c:868 git-add--interactive.perl:693
+#: add-interactive.c:870 git-add--interactive.perl:693
 #, c-format
 msgid "No untracked files.\n"
 msgstr "沒有未追蹤的檔案。\n"
 
-#: add-interactive.c:872 git-add--interactive.perl:687
+#: add-interactive.c:874 git-add--interactive.perl:687
 msgid "Add untracked"
 msgstr "新增未追蹤的"
 
-#: add-interactive.c:899 git-add--interactive.perl:623
+#: add-interactive.c:901 git-add--interactive.perl:623
 #, c-format, perl-format
 msgid "added %d path\n"
 msgid_plural "added %d paths\n"
 msgstr[0] "增加了 %d 個路徑\n"
 
-#: add-interactive.c:929
+#: add-interactive.c:931
 #, c-format
 msgid "ignoring unmerged: %s"
 msgstr "忽略未合併:%s"
 
-#: add-interactive.c:941 add-patch.c:1752 git-add--interactive.perl:1371
+#: add-interactive.c:943 add-patch.c:1758 git-add--interactive.perl:1371
 #, c-format
 msgid "Only binary files changed.\n"
 msgstr "只有二進位檔案被修改。\n"
 
-#: add-interactive.c:943 add-patch.c:1750 git-add--interactive.perl:1373
+#: add-interactive.c:945 add-patch.c:1756 git-add--interactive.perl:1373
 #, c-format
 msgid "No changes.\n"
 msgstr "沒有修改。\n"
 
-#: add-interactive.c:947 git-add--interactive.perl:1381
+#: add-interactive.c:949 git-add--interactive.perl:1381
 msgid "Patch update"
 msgstr "修補檔更新"
 
-#: add-interactive.c:986 git-add--interactive.perl:1794
+#: add-interactive.c:988 git-add--interactive.perl:1794
 msgid "Review diff"
 msgstr "檢視 diff"
 
-#: add-interactive.c:1014
+#: add-interactive.c:1016
 msgid "show paths with changes"
 msgstr "顯示有變更的路徑"
 
-#: add-interactive.c:1016
+#: add-interactive.c:1018
 msgid "add working tree state to the staged set of changes"
 msgstr "加入工作區狀態至暫存列表"
 
-#: add-interactive.c:1018
+#: add-interactive.c:1020
 msgid "revert staged set of changes back to the HEAD version"
 msgstr "還原修改的暫存集至 HEAD 版本"
 
-#: add-interactive.c:1020
+#: add-interactive.c:1022
 msgid "pick hunks and update selectively"
 msgstr "挑選區塊並選擇性更新"
 
-#: add-interactive.c:1022
+#: add-interactive.c:1024
 msgid "view diff between HEAD and index"
 msgstr "檢視 HEAD 及索引之間的差異"
 
-#: add-interactive.c:1024
+#: add-interactive.c:1026
 msgid "add contents of untracked files to the staged set of changes"
 msgstr "加入未追蹤檔案的內容至暫存列表"
 
-#: add-interactive.c:1032 add-interactive.c:1081
+#: add-interactive.c:1034 add-interactive.c:1083
 msgid "Prompt help:"
 msgstr "提示說明:"
 
-#: add-interactive.c:1034
+#: add-interactive.c:1036
 msgid "select a single item"
 msgstr "選擇單一項目"
 
-#: add-interactive.c:1036
+#: add-interactive.c:1038
 msgid "select a range of items"
 msgstr "選擇項目範圍"
 
-#: add-interactive.c:1038
+#: add-interactive.c:1040
 msgid "select multiple ranges"
 msgstr "選擇多個範圍"
 
-#: add-interactive.c:1040 add-interactive.c:1085
+#: add-interactive.c:1042 add-interactive.c:1087
 msgid "select item based on unique prefix"
 msgstr "基於唯一前綴選擇項目"
 
-#: add-interactive.c:1042
+#: add-interactive.c:1044
 msgid "unselect specified items"
 msgstr "取消選擇指定項目"
 
-#: add-interactive.c:1044
+#: add-interactive.c:1046
 msgid "choose all items"
 msgstr "選擇所有項目"
 
-#: add-interactive.c:1046
+#: add-interactive.c:1048
 msgid "(empty) finish selecting"
 msgstr "(空)完成選取"
 
-#: add-interactive.c:1083
+#: add-interactive.c:1085
 msgid "select a numbered item"
 msgstr "選擇編號過的項目"
 
-#: add-interactive.c:1087
+#: add-interactive.c:1089
 msgid "(empty) select nothing"
 msgstr "(空)全不選取"
 
-#: add-interactive.c:1095 builtin/clean.c:839 git-add--interactive.perl:1898
+#: add-interactive.c:1097 builtin/clean.c:839 git-add--interactive.perl:1898
 msgid "*** Commands ***"
 msgstr "*** 指令 ***"
 
-#: add-interactive.c:1096 builtin/clean.c:840 git-add--interactive.perl:1895
+#: add-interactive.c:1098 builtin/clean.c:840 git-add--interactive.perl:1895
 msgid "What now"
 msgstr "請選擇"
 
-#: add-interactive.c:1148 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "staged"
 msgstr "快取"
 
-#: add-interactive.c:1148 git-add--interactive.perl:213
+#: add-interactive.c:1150 git-add--interactive.perl:213
 msgid "unstaged"
 msgstr "未快取"
 
-#: add-interactive.c:1148 apply.c:5020 apply.c:5023 builtin/am.c:2367
-#: builtin/am.c:2370 builtin/bugreport.c:107 builtin/clone.c:128
-#: builtin/fetch.c:153 builtin/merge.c:287 builtin/pull.c:194
-#: builtin/submodule--helper.c:404 builtin/submodule--helper.c:1858
-#: builtin/submodule--helper.c:1861 builtin/submodule--helper.c:2504
-#: builtin/submodule--helper.c:2507 builtin/submodule--helper.c:2574
-#: builtin/submodule--helper.c:2579 builtin/submodule--helper.c:2812
+#: add-interactive.c:1150 apply.c:5002 apply.c:5005 builtin/am.c:2370
+#: builtin/am.c:2373 builtin/bugreport.c:107 builtin/clone.c:132
+#: builtin/fetch.c:154 builtin/merge.c:287 builtin/pull.c:194
+#: builtin/submodule--helper.c:412 builtin/submodule--helper.c:1872
+#: builtin/submodule--helper.c:1875 builtin/submodule--helper.c:2709
+#: builtin/submodule--helper.c:2712 builtin/submodule--helper.c:2891
 #: git-add--interactive.perl:213
 msgid "path"
 msgstr "路徑"
 
-#: add-interactive.c:1155
+#: add-interactive.c:1157
 msgid "could not refresh index"
 msgstr "無法重新整理索引"
 
-#: add-interactive.c:1169 builtin/clean.c:804 git-add--interactive.perl:1805
+#: add-interactive.c:1171 builtin/clean.c:804 git-add--interactive.perl:1805
 #, c-format
 msgid "Bye.\n"
 msgstr "再見。\n"
@@ -540,24 +539,24 @@ msgstr "無法解析區塊標頭 '%.*s'"
 msgid "could not parse colored hunk header '%.*s'"
 msgstr "無法解析上色過的區塊標頭 '%.*s'"
 
-#: add-patch.c:420
+#: add-patch.c:431
 msgid "could not parse diff"
 msgstr "無法解析差異 (diff)"
 
-#: add-patch.c:439
+#: add-patch.c:450
 msgid "could not parse colored diff"
 msgstr "無法解析上色過的差異 (diff)"
 
-#: add-patch.c:453
+#: add-patch.c:464
 #, c-format
 msgid "failed to run '%s'"
 msgstr "無法執行 '%s'"
 
-#: add-patch.c:612
+#: add-patch.c:618
 msgid "mismatched output from interactive.diffFilter"
 msgstr "interactive.diffFilter 的輸出不符"
 
-#: add-patch.c:613
+#: add-patch.c:619
 msgid ""
 "Your filter must maintain a one-to-one correspondence\n"
 "between its input and output lines."
@@ -565,7 +564,7 @@ msgstr ""
 "您的過濾器必須在其輸入及輸出行\n"
 "維持一對一的對應關係。"
 
-#: add-patch.c:791
+#: add-patch.c:797
 #, c-format
 msgid ""
 "expected context line #%d in\n"
@@ -574,7 +573,7 @@ msgstr ""
 "應有上下文行 #%d 於\n"
 "%.*s"
 
-#: add-patch.c:806
+#: add-patch.c:812
 #, c-format
 msgid ""
 "hunks do not overlap:\n"
@@ -587,11 +586,11 @@ msgstr ""
 "\t不以下述結尾:\n"
 "%.*s"
 
-#: add-patch.c:1082 git-add--interactive.perl:1115
+#: add-patch.c:1088 git-add--interactive.perl:1115
 msgid "Manual hunk edit mode -- see bottom for a quick guide.\n"
 msgstr "手動區塊編輯模式 -- 檢視底部的快速指南。\n"
 
-#: add-patch.c:1086
+#: add-patch.c:1092
 #, c-format
 msgid ""
 "---\n"
@@ -605,7 +604,7 @@ msgstr ""
 "以 %c 開始的行將被刪除。\n"
 
 #. TRANSLATORS: 'it' refers to the patch mentioned in the previous messages.
-#: add-patch.c:1100 git-add--interactive.perl:1129
+#: add-patch.c:1106 git-add--interactive.perl:1129
 msgid ""
 "If it does not apply cleanly, you will be given an opportunity to\n"
 "edit again.  If all lines of the hunk are removed, then the edit is\n"
@@ -615,11 +614,11 @@ msgstr ""
 "若刪掉此區塊的全部內容,則會中止\n"
 "本次編輯,區塊則不會被修改。\n"
 
-#: add-patch.c:1133
+#: add-patch.c:1139
 msgid "could not parse hunk header"
 msgstr "無法解析區塊標頭"
 
-#: add-patch.c:1178
+#: add-patch.c:1184
 msgid "'git apply --cached' failed"
 msgstr "「git apply --cached」失敗"
 
@@ -635,24 +634,24 @@ msgstr "「git apply --cached」失敗"
 #. Consider translating (saying "no" discards!) as
 #. (saying "n" for "no" discards!) if the translation
 #. of the word "no" does not start with n.
-#: add-patch.c:1247 git-add--interactive.perl:1244
+#: add-patch.c:1253 git-add--interactive.perl:1244
 msgid ""
 "Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? "
 msgstr "未套用編輯區塊。是否重新編輯(輸入 “no” 捨棄!) [y/n]? "
 
-#: add-patch.c:1290
+#: add-patch.c:1296
 msgid "The selected hunks do not apply to the index!"
 msgstr "選取的區塊不會套用進索引!"
 
-#: add-patch.c:1291 git-add--interactive.perl:1348
+#: add-patch.c:1297 git-add--interactive.perl:1348
 msgid "Apply them to the worktree anyway? "
 msgstr "無論如何都要套用到工作區嗎? "
 
-#: add-patch.c:1298 git-add--interactive.perl:1351
+#: add-patch.c:1304 git-add--interactive.perl:1351
 msgid "Nothing was applied.\n"
 msgstr "未套用。\n"
 
-#: add-patch.c:1355
+#: add-patch.c:1361
 msgid ""
 "j - leave this hunk undecided, see next undecided hunk\n"
 "J - leave this hunk undecided, see next hunk\n"
@@ -674,72 +673,72 @@ msgstr ""
 "e - 手動編輯目前區塊\n"
 "? - 顯示說明\n"
 
-#: add-patch.c:1517 add-patch.c:1527
+#: add-patch.c:1523 add-patch.c:1533
 msgid "No previous hunk"
 msgstr "沒有上一個區塊"
 
-#: add-patch.c:1522 add-patch.c:1532
+#: add-patch.c:1528 add-patch.c:1538
 msgid "No next hunk"
 msgstr "沒有下一個區塊"
 
-#: add-patch.c:1538
+#: add-patch.c:1544
 msgid "No other hunks to goto"
 msgstr "沒有其它可供跳轉的區塊"
 
-#: add-patch.c:1549 git-add--interactive.perl:1608
+#: add-patch.c:1555 git-add--interactive.perl:1608
 msgid "go to which hunk (<ret> to see more)? "
 msgstr "要跳轉到哪個區塊(<Enter> 檢視更多)? "
 
-#: add-patch.c:1550 git-add--interactive.perl:1610
+#: add-patch.c:1556 git-add--interactive.perl:1610
 msgid "go to which hunk? "
 msgstr "跳轉到哪個區塊? "
 
-#: add-patch.c:1561
+#: add-patch.c:1567
 #, c-format
 msgid "Invalid number: '%s'"
 msgstr "無效數字:'%s'"
 
-#: add-patch.c:1566
+#: add-patch.c:1572
 #, c-format
 msgid "Sorry, only %d hunk available."
 msgid_plural "Sorry, only %d hunks available."
 msgstr[0] "對不起,只有 %d 個可用區塊。"
 
-#: add-patch.c:1575
+#: add-patch.c:1581
 msgid "No other hunks to search"
 msgstr "沒有其它可供尋找的區塊"
 
-#: add-patch.c:1581 git-add--interactive.perl:1663
+#: add-patch.c:1587 git-add--interactive.perl:1663
 msgid "search for regex? "
 msgstr "使用常規表示式搜尋? "
 
-#: add-patch.c:1596
+#: add-patch.c:1602
 #, c-format
 msgid "Malformed search regexp %s: %s"
 msgstr "錯誤的常規表示式 %s:%s"
 
-#: add-patch.c:1613
+#: add-patch.c:1619
 msgid "No hunk matches the given pattern"
 msgstr "沒有和提供模式相符合的區塊"
 
-#: add-patch.c:1620
+#: add-patch.c:1626
 msgid "Sorry, cannot split this hunk"
 msgstr "對不起,不能分割這個區塊"
 
-#: add-patch.c:1624
+#: add-patch.c:1630
 #, c-format
 msgid "Split into %d hunks."
 msgstr "分割為 %d 個區塊。"
 
-#: add-patch.c:1628
+#: add-patch.c:1634
 msgid "Sorry, cannot edit this hunk"
 msgstr "對不起,不能編輯這個區塊"
 
-#: add-patch.c:1680
+#: add-patch.c:1686
 msgid "'git apply' failed"
 msgstr "'git apply' 失敗"
 
-#: advice.c:78
+#: advice.c:81
 #, c-format
 msgid ""
 "\n"
@@ -748,37 +747,37 @@ msgstr ""
 "\n"
 "請使用「git config advice.%s false」來停用此訊息"
 
-#: advice.c:94
+#: advice.c:97
 #, c-format
 msgid "%shint: %.*s%s\n"
 msgstr "%s提示:%.*s%s\n"
 
-#: advice.c:178
+#: advice.c:181
 msgid "Cherry-picking is not possible because you have unmerged files."
 msgstr "無法揀選,因為您有未合併的檔案。"
 
-#: advice.c:180
+#: advice.c:183
 msgid "Committing is not possible because you have unmerged files."
 msgstr "無法提交,因為您有未合併的檔案。"
 
-#: advice.c:182
+#: advice.c:185
 msgid "Merging is not possible because you have unmerged files."
 msgstr "無法合併,因為您有未合併的檔案。"
 
-#: advice.c:184
+#: advice.c:187
 msgid "Pulling is not possible because you have unmerged files."
 msgstr "無法拉取,因為您有未合併的檔案。"
 
-#: advice.c:186
+#: advice.c:189
 msgid "Reverting is not possible because you have unmerged files."
 msgstr "無法還原提交,因為您有未合併的檔案。"
 
-#: advice.c:188
+#: advice.c:191
 #, c-format
 msgid "It is not possible to %s because you have unmerged files."
 msgstr "無法 %s,因為您有未合併的檔案。"
 
-#: advice.c:196
+#: advice.c:199
 msgid ""
 "Fix them up in the work tree, and then use 'git add/rm <file>'\n"
 "as appropriate to mark resolution and make a commit."
@@ -786,27 +785,27 @@ msgstr ""
 "請在工作區改正檔案,然後酌情使用 'git add/rm <檔案>' 指令標記\n"
 "解決方案並提交。"
 
-#: advice.c:204
+#: advice.c:207
 msgid "Exiting because of an unresolved conflict."
 msgstr "因為存在未解決的衝突而離開。"
 
-#: advice.c:209 builtin/merge.c:1382
+#: advice.c:212 builtin/merge.c:1388
 msgid "You have not concluded your merge (MERGE_HEAD exists)."
 msgstr "您尚未結束您的合併(存在 MERGE_HEAD)。"
 
-#: advice.c:211
+#: advice.c:214
 msgid "Please, commit your changes before merging."
 msgstr "請在合併前先提交您的修改。"
 
-#: advice.c:212
+#: advice.c:215
 msgid "Exiting because of unfinished merge."
 msgstr "因為存在未完成的合併而離開。"
 
-#: advice.c:217
+#: advice.c:220
 msgid "Not possible to fast-forward, aborting."
 msgstr "無法快轉,終止。"
 
-#: advice.c:227
+#: advice.c:230
 #, c-format
 msgid ""
 "The following paths and/or pathspecs matched paths that exist\n"
@@ -817,7 +816,7 @@ msgstr ""
 "符合稀疏簽出定義外且存在的路徑,\n"
 "所以不會在索引中更新:\n"
 
-#: advice.c:234
+#: advice.c:237
 msgid ""
 "If you intend to update such entries, try one of the following:\n"
 "* Use the --sparse option.\n"
@@ -827,7 +826,7 @@ msgstr ""
 "* 使用 --sparse 選項。\n"
 "* 停用或修改稀疏規則。"
 
-#: advice.c:242
+#: advice.c:245
 #, c-format
 msgid ""
 "Note: switching to '%s'.\n"
@@ -885,80 +884,83 @@ msgstr "無法識別的空白字元選項 '%s'"
 msgid "unrecognized whitespace ignore option '%s'"
 msgstr "無法識別的空白字元忽略選項 '%s'"
 
-#: apply.c:136 archive.c:584 range-diff.c:559 revision.c:2303 revision.c:2307
-#: revision.c:2316 revision.c:2321 revision.c:2527 revision.c:2870
-#: revision.c:2874 revision.c:2880 revision.c:2883 revision.c:2885
-#: builtin/add.c:510 builtin/add.c:512 builtin/add.c:529 builtin/add.c:541
-#: builtin/branch.c:727 builtin/checkout.c:467 builtin/checkout.c:470
-#: builtin/checkout.c:1644 builtin/checkout.c:1754 builtin/checkout.c:1757
-#: builtin/clone.c:906 builtin/commit.c:358 builtin/commit.c:361
-#: builtin/commit.c:1196 builtin/describe.c:593 builtin/diff-tree.c:155
-#: builtin/difftool.c:733 builtin/fast-export.c:1245 builtin/fetch.c:2038
-#: builtin/fetch.c:2043 builtin/index-pack.c:1852 builtin/init-db.c:560
-#: builtin/log.c:1946 builtin/log.c:1948 builtin/ls-files.c:778
-#: builtin/merge.c:1403 builtin/merge.c:1405 builtin/pack-objects.c:4073
-#: builtin/push.c:592 builtin/push.c:630 builtin/push.c:636 builtin/push.c:641
-#: builtin/rebase.c:1193 builtin/rebase.c:1195 builtin/rebase.c:1199
-#: builtin/repack.c:684 builtin/repack.c:715 builtin/reset.c:426
-#: builtin/reset.c:462 builtin/rev-list.c:541 builtin/show-branch.c:710
-#: builtin/stash.c:1707 builtin/stash.c:1710 builtin/submodule--helper.c:1316
-#: builtin/submodule--helper.c:2975 builtin/tag.c:526 builtin/tag.c:572
-#: builtin/worktree.c:702
+#: apply.c:138 archive.c:584 parse-options.c:1122 range-diff.c:555
+#: revision.c:2314 revision.c:2318 revision.c:2327 revision.c:2332
+#: revision.c:2560 revision.c:2895 revision.c:2899 revision.c:2907
+#: revision.c:2910 revision.c:2912 builtin/add.c:507 builtin/add.c:509
+#: builtin/add.c:515 builtin/add.c:527 builtin/branch.c:755
+#: builtin/checkout.c:472 builtin/checkout.c:475 builtin/checkout.c:1663
+#: builtin/checkout.c:1773 builtin/checkout.c:1776 builtin/clone.c:921
+#: builtin/commit.c:359 builtin/commit.c:362 builtin/commit.c:1200
+#: builtin/commit.c:1256 builtin/commit.c:1273 builtin/describe.c:593
+#: builtin/diff-tree.c:155 builtin/difftool.c:733 builtin/fast-export.c:1245
+#: builtin/fetch.c:2141 builtin/fetch.c:2162 builtin/fetch.c:2167
+#: builtin/help.c:602 builtin/index-pack.c:1858 builtin/init-db.c:560
+#: builtin/log.c:1968 builtin/log.c:1970 builtin/ls-files.c:778
+#: builtin/merge-base.c:163 builtin/merge-base.c:169 builtin/merge.c:1409
+#: builtin/merge.c:1411 builtin/pack-objects.c:4098 builtin/push.c:592
+#: builtin/push.c:630 builtin/push.c:636 builtin/push.c:641
+#: builtin/rebase.c:1221 builtin/rebase.c:1223 builtin/rebase.c:1227
+#: builtin/repack.c:688 builtin/repack.c:719 builtin/reset.c:433
+#: builtin/reset.c:469 builtin/rev-list.c:537 builtin/show-branch.c:711
+#: builtin/stash.c:1696 builtin/stash.c:1699 builtin/submodule--helper.c:1328
+#: builtin/submodule--helper.c:3054 builtin/tag.c:527 builtin/tag.c:573
+#: builtin/worktree.c:779
 #, c-format
 msgid "options '%s' and '%s' cannot be used together"
 msgstr "不能同時使用 '%s' 和 '%s' 選項"
 
-#: apply.c:139 apply.c:150 apply.c:153
+#: apply.c:141 apply.c:152 apply.c:155
 #, c-format
 msgid "'%s' outside a repository"
 msgstr "'%s' 在版本庫之外"
 
-#: apply.c:800
+#: apply.c:807
 #, c-format
 msgid "Cannot prepare timestamp regexp %s"
 msgstr "無法準備時間戳常規表示式 %s"
 
-#: apply.c:809
+#: apply.c:816
 #, c-format
 msgid "regexec returned %d for input: %s"
 msgstr "regexec 返回 %d,輸入為:%s"
 
-#: apply.c:883
+#: apply.c:890
 #, c-format
 msgid "unable to find filename in patch at line %d"
 msgstr "不能在修補檔的第 %d 行找到檔案名"
 
-#: apply.c:921
+#: apply.c:928
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
 msgstr "git apply:錯誤的 git-diff - 應為 /dev/null,但在第 %2$d 行得到 %1$s"
 
-#: apply.c:927
+#: apply.c:934
 #, c-format
 msgid "git apply: bad git-diff - inconsistent new filename on line %d"
 msgstr "git apply:錯誤的 git-diff - 第 %d 行上新檔案名不一致"
 
-#: apply.c:928
+#: apply.c:935
 #, c-format
 msgid "git apply: bad git-diff - inconsistent old filename on line %d"
 msgstr "git apply:錯誤的 git-diff - 第 %d 行上舊檔案名不一致"
 
-#: apply.c:933
+#: apply.c:940
 #, c-format
 msgid "git apply: bad git-diff - expected /dev/null on line %d"
 msgstr "git apply:錯誤的 git-diff - 第 %d 行處應為 /dev/null"
 
-#: apply.c:962
+#: apply.c:969
 #, c-format
 msgid "invalid mode on line %d: %s"
 msgstr "第 %d 行包含無效檔案模式:%s"
 
-#: apply.c:1281
+#: apply.c:1288
 #, c-format
 msgid "inconsistent header lines %d and %d"
 msgstr "不一致的檔案頭,%d 行和 %d 行"
 
-#: apply.c:1371
+#: apply.c:1378
 #, c-format
 msgid ""
 "git diff header lacks filename information when removing %d leading pathname "
@@ -968,91 +970,91 @@ msgid_plural ""
 "components (line %d)"
 msgstr[0] "當移除 %d 個前導路徑後 git diff 頭缺乏檔案名訊息(第 %d 行)"
 
-#: apply.c:1384
+#: apply.c:1391
 #, c-format
 msgid "git diff header lacks filename information (line %d)"
 msgstr "git diff 的標頭訊息中缺乏檔案名訊息(第 %d 行)"
 
-#: apply.c:1480
+#: apply.c:1487
 #, c-format
 msgid "recount: unexpected line: %.*s"
 msgstr "recount:意外的行:%.*s"
 
-#: apply.c:1549
+#: apply.c:1556
 #, c-format
 msgid "patch fragment without header at line %d: %.*s"
 msgstr "第 %d 行的修補檔區塊沒有標頭訊息:%.*s"
 
-#: apply.c:1752
+#: apply.c:1759
 msgid "new file depends on old contents"
 msgstr "新檔案依賴舊內容"
 
-#: apply.c:1754
+#: apply.c:1761
 msgid "deleted file still has contents"
 msgstr "刪除的檔案仍有內容"
 
-#: apply.c:1788
+#: apply.c:1795
 #, c-format
 msgid "corrupt patch at line %d"
 msgstr "修補檔在第 %d 行發現損壞"
 
-#: apply.c:1825
+#: apply.c:1832
 #, c-format
 msgid "new file %s depends on old contents"
 msgstr "新檔案 %s 依賴舊內容"
 
-#: apply.c:1827
+#: apply.c:1834
 #, c-format
 msgid "deleted file %s still has contents"
 msgstr "刪除的檔案 %s 仍有內容"
 
-#: apply.c:1830
+#: apply.c:1837
 #, c-format
 msgid "** warning: file %s becomes empty but is not deleted"
 msgstr "** 警告:檔案 %s 成為空檔案但並未刪除"
 
-#: apply.c:1978
+#: apply.c:1985
 #, c-format
 msgid "corrupt binary patch at line %d: %.*s"
 msgstr "二進位修補檔在第 %d 行損壞:%.*s"
 
-#: apply.c:2015
+#: apply.c:2022
 #, c-format
 msgid "unrecognized binary patch at line %d"
 msgstr "無法識別的二進位修補檔位於第 %d 行"
 
-#: apply.c:2177
+#: apply.c:2184
 #, c-format
 msgid "patch with only garbage at line %d"
 msgstr "修補檔案的第 %d 行只有垃圾資料"
 
-#: apply.c:2263
+#: apply.c:2270
 #, c-format
 msgid "unable to read symlink %s"
 msgstr "無法讀取符號連結 %s"
 
-#: apply.c:2267
+#: apply.c:2274
 #, c-format
 msgid "unable to open or read %s"
 msgstr "不能開啟或讀取 %s"
 
-#: apply.c:2936
+#: apply.c:2943
 #, c-format
 msgid "invalid start of line: '%c'"
 msgstr "無效的行首字元:'%c'"
 
-#: apply.c:3057
+#: apply.c:3064
 #, c-format
 msgid "Hunk #%d succeeded at %d (offset %d line)."
 msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
 msgstr[0] "區塊 #%d 成功套用於 %d(位移 %d 行)。"
 
-#: apply.c:3069
+#: apply.c:3076
 #, c-format
 msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
 msgstr "上下文減少到(%ld/%ld)以在第 %d 行套用修補檔區塊"
 
-#: apply.c:3075
+#: apply.c:3082
 #, c-format
 msgid ""
 "while searching for:\n"
@@ -1061,442 +1063,442 @@ msgstr ""
 "當查詢:\n"
 "%.*s"
 
-#: apply.c:3097
+#: apply.c:3104
 #, c-format
 msgid "missing binary patch data for '%s'"
 msgstr "缺少 '%s' 的二進位修補檔資料"
 
-#: apply.c:3105
+#: apply.c:3112
 #, c-format
 msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
 msgstr "不能反向套用一個缺少到 '%s' 的反向資料區塊的二進位修補檔"
 
-#: apply.c:3152
+#: apply.c:3159
 #, c-format
 msgid "cannot apply binary patch to '%s' without full index line"
 msgstr "不能在 '%s' 上套用沒有完整索引行的二進位修補檔"
 
-#: apply.c:3163
+#: apply.c:3170
 #, c-format
 msgid ""
 "the patch applies to '%s' (%s), which does not match the current contents."
 msgstr "修補檔套用到 '%s'(%s),但是和目前內容不符合。"
 
-#: apply.c:3171
+#: apply.c:3178
 #, c-format
 msgid "the patch applies to an empty '%s' but it is not empty"
 msgstr "修補檔套用到空檔案 '%s',但其並非空檔案"
 
-#: apply.c:3189
+#: apply.c:3196
 #, c-format
 msgid "the necessary postimage %s for '%s' cannot be read"
 msgstr "無法讀取 '%2$s' 必需的目標檔案 %1$s"
 
-#: apply.c:3202
+#: apply.c:3209
 #, c-format
 msgid "binary patch does not apply to '%s'"
 msgstr "二進位修補檔未套用到 '%s'"
 
-#: apply.c:3209
+#: apply.c:3216
 #, c-format
 msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
 msgstr "到 '%s' 的二進位修補檔產生了不正確的結果(應為 %s,卻為 %s)"
 
-#: apply.c:3230
+#: apply.c:3237
 #, c-format
 msgid "patch failed: %s:%ld"
 msgstr "打修補檔失敗:%s:%ld"
 
-#: apply.c:3353
+#: apply.c:3360
 #, c-format
 msgid "cannot checkout %s"
 msgstr "不能簽出 %s"
 
-#: apply.c:3405 apply.c:3416 apply.c:3462 midx.c:104 pack-revindex.c:214
-#: setup.c:309
+#: apply.c:3412 apply.c:3423 apply.c:3469 midx.c:105 pack-revindex.c:214
+#: setup.c:310
 #, c-format
 msgid "failed to read %s"
 msgstr "無法讀取 %s"
 
-#: apply.c:3413
+#: apply.c:3420
 #, c-format
 msgid "reading from '%s' beyond a symbolic link"
 msgstr "讀取位於符號連結中的 '%s'"
 
-#: apply.c:3442 apply.c:3711
+#: apply.c:3449 apply.c:3721
 #, c-format
 msgid "path %s has been renamed/deleted"
 msgstr "路徑 %s 已經被重新命名/刪除"
 
-#: apply.c:3549 apply.c:3726
+#: apply.c:3559 apply.c:3736
 #, c-format
 msgid "%s: does not exist in index"
 msgstr "%s:不存在於索引中"
 
-#: apply.c:3558 apply.c:3734 apply.c:3978
+#: apply.c:3568 apply.c:3744 apply.c:3960
 #, c-format
 msgid "%s: does not match index"
 msgstr "%s:和索引不符合"
 
-#: apply.c:3595
+#: apply.c:3605
 msgid "repository lacks the necessary blob to perform 3-way merge."
 msgstr "版本庫缺少用來進行三方合併所需要的資料物件。"
 
-#: apply.c:3598
+#: apply.c:3608
 #, c-format
 msgid "Performing three-way merge...\n"
 msgstr "正在進行三方合併⋯⋯\n"
 
-#: apply.c:3614 apply.c:3618
+#: apply.c:3624 apply.c:3628
 #, c-format
 msgid "cannot read the current contents of '%s'"
 msgstr "無法讀取 '%s' 的目前內容"
 
-#: apply.c:3630
+#: apply.c:3640
 #, c-format
 msgid "Failed to perform three-way merge...\n"
 msgstr "無法進行三方合併⋯⋯\n"
 
-#: apply.c:3644
+#: apply.c:3654
 #, c-format
 msgid "Applied patch to '%s' with conflicts.\n"
 msgstr "套用修補檔到 '%s' 存在衝突。\n"
 
-#: apply.c:3649
+#: apply.c:3659
 #, c-format
 msgid "Applied patch to '%s' cleanly.\n"
 msgstr "成功套用修補檔到 '%s'。\n"
 
-#: apply.c:3666
+#: apply.c:3676
 #, c-format
 msgid "Falling back to direct application...\n"
 msgstr "回復至直接套用模式⋯⋯\n"
 
-#: apply.c:3678
+#: apply.c:3688
 msgid "removal patch leaves file contents"
 msgstr "移除修補檔仍留下了檔案內容"
 
-#: apply.c:3751
+#: apply.c:3761
 #, c-format
 msgid "%s: wrong type"
 msgstr "%s:錯誤類型"
 
-#: apply.c:3753
+#: apply.c:3763
 #, c-format
 msgid "%s has type %o, expected %o"
 msgstr "%s 的類型是 %o,應為 %o"
 
-#: apply.c:3918 apply.c:3920 read-cache.c:889 read-cache.c:918
-#: read-cache.c:1381
+#: apply.c:3900 apply.c:3902 read-cache.c:903 read-cache.c:932
+#: read-cache.c:1399
 #, c-format
 msgid "invalid path '%s'"
 msgstr "無效路徑 '%s'"
 
-#: apply.c:3976
+#: apply.c:3958
 #, c-format
 msgid "%s: already exists in index"
 msgstr "%s:已經存在於索引中"
 
-#: apply.c:3980
+#: apply.c:3962
 #, c-format
 msgid "%s: already exists in working directory"
 msgstr "%s:已經存在於工作區中"
 
-#: apply.c:4000
+#: apply.c:3982
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o)"
 msgstr "%2$s 的新模式(%1$o)和舊模式(%3$o)不符合"
 
-#: apply.c:4005
+#: apply.c:3987
 #, c-format
 msgid "new mode (%o) of %s does not match old mode (%o) of %s"
 msgstr "%2$s 的新模式(%1$o)和 %4$s 的舊模式(%3$o)不符合"
 
-#: apply.c:4025
+#: apply.c:4007
 #, c-format
 msgid "affected file '%s' is beyond a symbolic link"
 msgstr "受影響的檔案 '%s' 位於符號連結中"
 
-#: apply.c:4029
+#: apply.c:4011
 #, c-format
 msgid "%s: patch does not apply"
 msgstr "%s:修補檔未套用"
 
-#: apply.c:4044
+#: apply.c:4026
 #, c-format
 msgid "Checking patch %s..."
 msgstr "正在檢查修補檔 %s..."
 
-#: apply.c:4136
+#: apply.c:4118
 #, c-format
 msgid "sha1 information is lacking or useless for submodule %s"
 msgstr "子模組 %s 的 sha1 訊息缺少或無效"
 
-#: apply.c:4143
+#: apply.c:4125
 #, c-format
 msgid "mode change for %s, which is not in current HEAD"
 msgstr "%s 的模式變更,但它不在目前 HEAD 中"
 
-#: apply.c:4146
+#: apply.c:4128
 #, c-format
 msgid "sha1 information is lacking or useless (%s)."
 msgstr "sha1 訊息缺少或無效(%s)。"
 
-#: apply.c:4155
+#: apply.c:4137
 #, c-format
 msgid "could not add %s to temporary index"
 msgstr "不能在暫時索引中新增 %s"
 
-#: apply.c:4165
+#: apply.c:4147
 #, c-format
 msgid "could not write temporary index to %s"
 msgstr "不能把暫時索引寫入到 %s"
 
-#: apply.c:4303
+#: apply.c:4285
 #, c-format
 msgid "unable to remove %s from index"
 msgstr "不能從索引中移除 %s"
 
-#: apply.c:4337
+#: apply.c:4319
 #, c-format
 msgid "corrupt patch for submodule %s"
 msgstr "子模組 %s 損壞的修補檔"
 
-#: apply.c:4343
+#: apply.c:4325
 #, c-format
 msgid "unable to stat newly created file '%s'"
 msgstr "不能對建立檔案 '%s' 呼叫 stat"
 
-#: apply.c:4351
+#: apply.c:4333
 #, c-format
 msgid "unable to create backing store for newly created file %s"
 msgstr "不能為建立檔案 %s 建立後端儲存"
 
-#: apply.c:4357 apply.c:4502
+#: apply.c:4339 apply.c:4484
 #, c-format
 msgid "unable to add cache entry for %s"
 msgstr "無法為 %s 新增快取條目"
 
-#: apply.c:4400 builtin/bisect--helper.c:540 builtin/gc.c:2258
+#: apply.c:4382 builtin/bisect--helper.c:540 builtin/gc.c:2258
 #: builtin/gc.c:2293
 #, c-format
 msgid "failed to write to '%s'"
 msgstr "寫入 '%s' 失敗"
 
-#: apply.c:4404
+#: apply.c:4386
 #, c-format
 msgid "closing file '%s'"
 msgstr "關閉檔案 '%s'"
 
-#: apply.c:4474
+#: apply.c:4456
 #, c-format
 msgid "unable to write file '%s' mode %o"
 msgstr "不能寫入檔案 '%s' 權限 %o"
 
-#: apply.c:4572
+#: apply.c:4554
 #, c-format
 msgid "Applied patch %s cleanly."
 msgstr "成功套用修補檔 %s。"
 
-#: apply.c:4580
+#: apply.c:4562
 msgid "internal error"
 msgstr "內部錯誤"
 
-#: apply.c:4583
+#: apply.c:4565
 #, c-format
 msgid "Applying patch %%s with %d reject..."
 msgid_plural "Applying patch %%s with %d rejects..."
 msgstr[0] "套用 %%s 個修補檔,其中 %d 個被拒絕..."
 
-#: apply.c:4594
+#: apply.c:4576
 #, c-format
 msgid "truncating .rej filename to %.*s.rej"
 msgstr "截短 .rej 檔案名為 %.*s.rej"
 
-#: apply.c:4602
+#: apply.c:4584
 #, c-format
 msgid "cannot open %s"
 msgstr "不能開啟 %s"
 
-#: apply.c:4616
+#: apply.c:4598
 #, c-format
 msgid "Hunk #%d applied cleanly."
 msgstr "成功套用第 #%d 個區塊。"
 
-#: apply.c:4620
+#: apply.c:4602
 #, c-format
 msgid "Rejected hunk #%d."
 msgstr "拒絕第 #%d 個區塊。"
 
-#: apply.c:4749
+#: apply.c:4731
 #, c-format
 msgid "Skipped patch '%s'."
 msgstr "略過修補檔 '%s'。"
 
-#: apply.c:4758
+#: apply.c:4740
 msgid "No valid patches in input (allow with \"--allow-empty\")"
 msgstr "輸入中沒有有效的修補檔內容(傳入「--allow-empty」允許)"
 
-#: apply.c:4779
+#: apply.c:4761
 msgid "unable to read index file"
 msgstr "無法讀取索引檔案"
 
-#: apply.c:4936
+#: apply.c:4918
 #, c-format
 msgid "can't open patch '%s': %s"
 msgstr "不能開啟修補檔 '%s':%s"
 
-#: apply.c:4963
+#: apply.c:4945
 #, c-format
 msgid "squelched %d whitespace error"
 msgid_plural "squelched %d whitespace errors"
 msgstr[0] "抑制下仍有 %d 個空白字元誤用"
 
-#: apply.c:4969 apply.c:4984
+#: apply.c:4951 apply.c:4966
 #, c-format
 msgid "%d line adds whitespace errors."
 msgid_plural "%d lines add whitespace errors."
 msgstr[0] "%d 行新增了空白字元誤用。"
 
-#: apply.c:4977
+#: apply.c:4959
 #, c-format
 msgid "%d line applied after fixing whitespace errors."
 msgid_plural "%d lines applied after fixing whitespace errors."
 msgstr[0] "修復空白錯誤後,套用了 %d 行。"
 
-#: apply.c:4993 builtin/add.c:704 builtin/mv.c:338 builtin/rm.c:430
+#: apply.c:4975 builtin/add.c:690 builtin/mv.c:338 builtin/rm.c:430
 msgid "Unable to write new index file"
 msgstr "無法寫入新索引檔案"
 
-#: apply.c:5021
+#: apply.c:5003
 msgid "don't apply changes matching the given path"
 msgstr "不要套用符合提供路徑的變更"
 
-#: apply.c:5024
+#: apply.c:5006
 msgid "apply changes matching the given path"
 msgstr "套用符合提供路徑的變更"
 
-#: apply.c:5026 builtin/am.c:2376
+#: apply.c:5008 builtin/am.c:2379
 msgid "num"
 msgstr "數字"
 
-#: apply.c:5027
+#: apply.c:5009
 msgid "remove <num> leading slashes from traditional diff paths"
 msgstr "從傳統的 diff 路徑中移除指定數量的前導斜線"
 
-#: apply.c:5030
+#: apply.c:5012
 msgid "ignore additions made by the patch"
 msgstr "忽略修補檔中的新增的檔案"
 
-#: apply.c:5032
+#: apply.c:5014
 msgid "instead of applying the patch, output diffstat for the input"
 msgstr "不套用修補檔,而是顯示輸入的差異統計(diffstat)"
 
-#: apply.c:5036
+#: apply.c:5018
 msgid "show number of added and deleted lines in decimal notation"
 msgstr "以十進位數顯示新增和刪除的行數"
 
-#: apply.c:5038
+#: apply.c:5020
 msgid "instead of applying the patch, output a summary for the input"
 msgstr "不套用修補檔,而是顯示輸入的概要"
 
-#: apply.c:5040
+#: apply.c:5022
 msgid "instead of applying the patch, see if the patch is applicable"
 msgstr "不套用修補檔,而是檢視修補檔是否可套用"
 
-#: apply.c:5042
+#: apply.c:5024
 msgid "make sure the patch is applicable to the current index"
 msgstr "確認修補檔可以套用到目前索引"
 
-#: apply.c:5044
+#: apply.c:5026
 msgid "mark new files with `git add --intent-to-add`"
 msgstr "使用指令 `git add --intent-to-add` 標記新增檔案"
 
-#: apply.c:5046
+#: apply.c:5028
 msgid "apply a patch without touching the working tree"
 msgstr "套用修補檔而不修改工作區"
 
-#: apply.c:5048
+#: apply.c:5030
 msgid "accept a patch that touches outside the working area"
 msgstr "接受修改工作區之外檔案的修補檔"
 
-#: apply.c:5051
+#: apply.c:5033
 msgid "also apply the patch (use with --stat/--summary/--check)"
 msgstr "還套用此修補檔(與 --stat/--summary/--check 選項同時使用)"
 
-#: apply.c:5053
+#: apply.c:5035
 msgid "attempt three-way merge, fall back on normal patch if that fails"
 msgstr "嘗試三方合併。如果失敗,則回到正常修補檔 (patch) 模式"
 
-#: apply.c:5055
+#: apply.c:5037
 msgid "build a temporary index based on embedded index information"
 msgstr "建立一個暫時索引基於嵌入的索引訊息"
 
-#: apply.c:5058 builtin/checkout-index.c:196
+#: apply.c:5040 builtin/checkout-index.c:230
 msgid "paths are separated with NUL character"
 msgstr "路徑以 NUL 字元分隔"
 
-#: apply.c:5060
+#: apply.c:5042
 msgid "ensure at least <n> lines of context match"
 msgstr "確保至少符合 <n> 行上下文"
 
-#: apply.c:5061 builtin/am.c:2352 builtin/am.c:2355
+#: apply.c:5043 builtin/am.c:2355 builtin/am.c:2358
 #: builtin/interpret-trailers.c:98 builtin/interpret-trailers.c:100
-#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3960
-#: builtin/rebase.c:1051
+#: builtin/interpret-trailers.c:102 builtin/pack-objects.c:3983
+#: builtin/rebase.c:1079
 msgid "action"
 msgstr "動作"
 
-#: apply.c:5062
+#: apply.c:5044
 msgid "detect new or modified lines that have whitespace errors"
 msgstr "檢查新增和修改的行中間的空白字元濫用"
 
-#: apply.c:5065 apply.c:5068
+#: apply.c:5047 apply.c:5050
 msgid "ignore changes in whitespace when finding context"
 msgstr "尋找上下文時忽略空白字元的變更"
 
-#: apply.c:5071
+#: apply.c:5053
 msgid "apply the patch in reverse"
 msgstr "反向套用修補檔"
 
-#: apply.c:5073
+#: apply.c:5055
 msgid "don't expect at least one line of context"
 msgstr "無需至少一行上下文"
 
-#: apply.c:5075
+#: apply.c:5057
 msgid "leave the rejected hunks in corresponding *.rej files"
 msgstr "將拒絕的修補檔區塊儲存在對應的 *.rej 檔案中"
 
-#: apply.c:5077
+#: apply.c:5059
 msgid "allow overlapping hunks"
 msgstr "允許重疊的修補檔區塊"
 
-#: apply.c:5080
+#: apply.c:5062
 msgid "tolerate incorrectly detected missing new-line at the end of file"
 msgstr "允許不正確的檔案末尾換行符號"
 
-#: apply.c:5083
+#: apply.c:5065
 msgid "do not trust the line counts in the hunk headers"
 msgstr "不信任修補檔區塊的標頭訊息中的行號"
 
-#: apply.c:5085 builtin/am.c:2364
+#: apply.c:5067 builtin/am.c:2367
 msgid "root"
 msgstr "根目錄"
 
-#: apply.c:5086
+#: apply.c:5068
 msgid "prepend <root> to all filenames"
 msgstr "為所有檔案名前新增 <根目錄>"
 
-#: apply.c:5089
+#: apply.c:5071
 msgid "don't return error for empty patches"
 msgstr "遇到空白修補檔時不回傳錯誤"
 
-#: archive-tar.c:125 archive-zip.c:345
+#: archive-tar.c:125 archive-zip.c:346
 #, c-format
 msgid "cannot stream blob %s"
 msgstr "不能開啟資料物件 %s"
 
-#: archive-tar.c:265 archive-zip.c:358
+#: archive-tar.c:265 archive-zip.c:359
 #, c-format
 msgid "unsupported file mode: 0%o (SHA1: %s)"
 msgstr "不支援的檔案模式:0%o (SHA1: %s)"
@@ -1515,22 +1517,22 @@ msgstr "無法重定向描述符"
 msgid "'%s' filter reported error"
 msgstr "'%s' 過濾器報告了錯誤"
 
-#: archive-zip.c:318
+#: archive-zip.c:319
 #, c-format
 msgid "path is not valid UTF-8: %s"
 msgstr "路徑不是有效的 UTF-8:%s"
 
-#: archive-zip.c:322
+#: archive-zip.c:323
 #, c-format
 msgid "path too long (%d chars, SHA1: %s): %s"
 msgstr "路徑太長(%d 字元,SHA1:%s):%s"
 
-#: archive-zip.c:469 builtin/pack-objects.c:365 builtin/pack-objects.c:368
+#: archive-zip.c:470 builtin/pack-objects.c:363 builtin/pack-objects.c:366
 #, c-format
 msgid "deflate error (%d)"
 msgstr "壓縮錯誤 (%d)"
 
-#: archive-zip.c:603
+#: archive-zip.c:604
 #, c-format
 msgid "timestamp too large for this system: %<PRIuMAX>"
 msgstr "對於本系統時間戳太大:%<PRIuMAX>"
@@ -1539,10 +1541,6 @@ msgstr "對於本系統時間戳太大:%<PRIuMAX>"
 msgid "git archive [<options>] <tree-ish> [<path>...]"
 msgstr "git archive [<選項>] <樹或提交> [<路徑>...]"
 
-#: archive.c:15
-msgid "git archive --list"
-msgstr "git archive --list"
-
 #: archive.c:16
 msgid ""
 "git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"
@@ -1554,12 +1552,12 @@ msgid "git archive --remote <repo> [--exec <cmd>] --list"
 msgstr "git archive --remote <版本庫> [--exec <命令>] --list"
 
 #: archive.c:188 archive.c:341 builtin/gc.c:497 builtin/notes.c:238
-#: builtin/tag.c:578
+#: builtin/tag.c:579
 #, c-format
 msgid "cannot read '%s'"
 msgstr "不能讀取 '%s'"
 
-#: archive.c:426 builtin/add.c:215 builtin/add.c:671 builtin/rm.c:334
+#: archive.c:426 builtin/add.c:214 builtin/add.c:657 builtin/rm.c:334
 #, c-format
 msgid "pathspec '%s' did not match any files"
 msgstr "路徑規格 '%s' 未符合任何檔案"
@@ -1601,7 +1599,7 @@ msgstr "格式"
 msgid "archive format"
 msgstr "歸檔格式"
 
-#: archive.c:552 builtin/log.c:1790
+#: archive.c:552 builtin/log.c:1809
 msgid "prefix"
 msgstr "前綴"
 
@@ -1609,12 +1607,12 @@ msgstr "前綴"
 msgid "prepend prefix to each pathname in the archive"
 msgstr "為歸檔中每個路徑名加上前綴"
 
-#: archive.c:554 archive.c:557 builtin/blame.c:880 builtin/blame.c:884
-#: builtin/blame.c:885 builtin/commit-tree.c:115 builtin/config.c:135
+#: archive.c:554 archive.c:557 builtin/blame.c:881 builtin/blame.c:885
+#: builtin/blame.c:886 builtin/commit-tree.c:115 builtin/config.c:135
 #: builtin/fast-export.c:1181 builtin/fast-export.c:1183
-#: builtin/fast-export.c:1187 builtin/grep.c:935 builtin/hash-object.c:103
+#: builtin/fast-export.c:1187 builtin/grep.c:936 builtin/hash-object.c:104
 #: builtin/ls-files.c:654 builtin/ls-files.c:657 builtin/notes.c:410
-#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:190
+#: builtin/notes.c:576 builtin/read-tree.c:115 parse-options.h:195
 msgid "file"
 msgstr "檔案"
 
@@ -1642,8 +1640,8 @@ msgstr "設定壓縮級別"
 msgid "list supported archive formats"
 msgstr "列出支援的歸檔格式"
 
-#: archive.c:568 builtin/archive.c:89 builtin/clone.c:118 builtin/clone.c:121
-#: builtin/submodule--helper.c:1870 builtin/submodule--helper.c:2513
+#: archive.c:568 builtin/archive.c:89 builtin/clone.c:122 builtin/clone.c:125
+#: builtin/submodule--helper.c:1884 builtin/submodule--helper.c:2718
 msgid "repo"
 msgstr "版本庫"
 
@@ -1664,11 +1662,12 @@ msgstr "遠端 git-upload-archive 指令的路徑"
 msgid "Unexpected option --remote"
 msgstr "未知參數 --remote"
 
-#: archive.c:580 fetch-pack.c:300 revision.c:2887 builtin/add.c:544
-#: builtin/add.c:576 builtin/checkout.c:1763 builtin/commit.c:370
-#: builtin/fast-export.c:1230 builtin/index-pack.c:1848 builtin/log.c:2115
-#: builtin/reset.c:435 builtin/reset.c:493 builtin/rm.c:281
-#: builtin/stash.c:1719 builtin/worktree.c:508 http-fetch.c:144
+#: archive.c:580 fetch-pack.c:300 revision.c:2914 builtin/add.c:530
+#: builtin/add.c:562 builtin/checkout.c:1782 builtin/clone.c:1099
+#: builtin/clone.c:1102 builtin/commit.c:371 builtin/fast-export.c:1230
+#: builtin/index-pack.c:1854 builtin/log.c:2140 builtin/reset.c:442
+#: builtin/reset.c:500 builtin/rm.c:281 builtin/stash.c:1708
+#: builtin/worktree.c:580 builtin/worktree.c:781 http-fetch.c:144
 #: http-fetch.c:153
 #, c-format
 msgid "the option '%s' requires '%s'"
@@ -1688,17 +1687,17 @@ msgstr "未知歸檔格式 '%s'"
 msgid "Argument not supported for format '%s': -%d"
 msgstr "參數不支援此格式 '%s':-%d"
 
-#: attr.c:203
+#: attr.c:202
 #, c-format
 msgid "%.*s is not a valid attribute name"
 msgstr "%.*s 不是一個有效的屬性名"
 
-#: attr.c:364
+#: attr.c:363
 #, c-format
 msgid "%s not allowed: %s:%d"
 msgstr "不允許 %s:%s:%d"
 
-#: attr.c:404
+#: attr.c:403
 msgid ""
 "Negative patterns are ignored in git attributes\n"
 "Use '\\!' for literal leading exclamation."
@@ -1716,12 +1715,12 @@ msgstr "檔案 '%s' 包含錯誤的引用格式:%s"
 msgid "We cannot bisect more!\n"
 msgstr "我們無法進行更多的二分搜尋!\n"
 
-#: bisect.c:764
+#: bisect.c:765
 #, c-format
 msgid "Not a valid commit name %s"
 msgstr "不是一個有效的提交名 %s"
 
-#: bisect.c:789
+#: bisect.c:790
 #, c-format
 msgid ""
 "The merge base %s is bad.\n"
@@ -1730,7 +1729,7 @@ msgstr ""
 "合併基礎 %s 是壞的。\n"
 "這意味著介於 %s 和 [%s] 之間的 bug 已經被修復。\n"
 
-#: bisect.c:794
+#: bisect.c:795
 #, c-format
 msgid ""
 "The merge base %s is new.\n"
@@ -1739,7 +1738,7 @@ msgstr ""
 "合併基礎 %s 是新的。\n"
 "介於 %s 和 [%s] 之間的屬性已經被修改。\n"
 
-#: bisect.c:799
+#: bisect.c:800
 #, c-format
 msgid ""
 "The merge base %s is %s.\n"
@@ -1748,7 +1747,7 @@ msgstr ""
 "合併基礎 %s 是 %s。\n"
 "這意味著第一個 '%s' 提交位於 %s 和 [%s] 之間。\n"
 
-#: bisect.c:807
+#: bisect.c:808
 #, c-format
 msgid ""
 "Some %s revs are not ancestors of the %s rev.\n"
@@ -1759,7 +1758,7 @@ msgstr ""
 "這種情況下 git 二分搜尋無法正常工作。\n"
 "您可能弄錯了 %s 和 %s 版本?\n"
 
-#: bisect.c:820
+#: bisect.c:821
 #, c-format
 msgid ""
 "the merge base between %s and [%s] must be skipped.\n"
@@ -1770,36 +1769,36 @@ msgstr ""
 "所以我們無法確認第一個 %s 提交是否介於 %s 和 %s 之間。\n"
 "我們仍舊繼續。"
 
-#: bisect.c:859
+#: bisect.c:860
 #, c-format
 msgid "Bisecting: a merge base must be tested\n"
 msgstr "二分搜尋中:合併基礎必須是經過測試的\n"
 
-#: bisect.c:909
+#: bisect.c:910
 #, c-format
 msgid "a %s revision is needed"
 msgstr "需要一個 %s 版本"
 
-#: bisect.c:939
+#: bisect.c:940
 #, c-format
 msgid "could not create file '%s'"
 msgstr "不能建立檔案 '%s'"
 
-#: bisect.c:985 builtin/merge.c:155
+#: bisect.c:986 builtin/merge.c:155
 #, c-format
 msgid "could not read file '%s'"
 msgstr "不能讀取檔案 '%s'"
 
-#: bisect.c:1025
+#: bisect.c:1026
 msgid "reading bisect refs failed"
 msgstr "讀取二分搜尋引用失敗"
 
-#: bisect.c:1055
+#: bisect.c:1056
 #, c-format
 msgid "%s was both %s and %s\n"
 msgstr "%s 同時為 %s 和 %s\n"
 
-#: bisect.c:1064
+#: bisect.c:1065
 #, c-format
 msgid ""
 "No testable commit found.\n"
@@ -1808,7 +1807,7 @@ msgstr ""
 "沒找到能夠測試的提交。\n"
 "可能是執行傳入的路徑引數是錯誤的?\n"
 
-#: bisect.c:1093
+#: bisect.c:1094
 #, c-format
 msgid "(roughly %d step)"
 msgid_plural "(roughly %d steps)"
@@ -1817,79 +1816,79 @@ msgstr[0] "(大概 %d 步)"
 #. TRANSLATORS: the last %s will be replaced with "(roughly %d
 #. steps)" translation.
 #.
-#: bisect.c:1099
+#: bisect.c:1100
 #, c-format
 msgid "Bisecting: %d revision left to test after this %s\n"
 msgid_plural "Bisecting: %d revisions left to test after this %s\n"
 msgstr[0] "二分搜尋中:在此之後,還剩 %d 個版本待測試 %s\n"
 
-#: blame.c:2776
+#: blame.c:2773
 msgid "--contents and --reverse do not blend well."
 msgstr "--contents 和 --reverse 不能混用。"
 
-#: blame.c:2790
+#: blame.c:2787
 msgid "cannot use --contents with final commit object name"
 msgstr "不能將 --contents 和最終的提交物件名共用"
 
-#: blame.c:2811
+#: blame.c:2808
 msgid "--reverse and --first-parent together require specified latest commit"
 msgstr "--reverse 和 --first-parent 共用,需要指定最新的提交"
 
-#: blame.c:2820 bundle.c:224 midx.c:1042 ref-filter.c:2370 remote.c:2158
-#: sequencer.c:2352 sequencer.c:4899 submodule.c:883 builtin/commit.c:1114
-#: builtin/log.c:429 builtin/log.c:1036 builtin/log.c:1644 builtin/log.c:2071
-#: builtin/log.c:2362 builtin/merge.c:431 builtin/pack-objects.c:3373
-#: builtin/pack-objects.c:3775 builtin/pack-objects.c:3790
+#: blame.c:2817 bundle.c:231 midx.c:1058 ref-filter.c:2371 remote.c:2157
+#: sequencer.c:2348 sequencer.c:4872 submodule.c:913 builtin/commit.c:1118
+#: builtin/log.c:437 builtin/log.c:1055 builtin/log.c:1663 builtin/log.c:2096
+#: builtin/log.c:2387 builtin/merge.c:431 builtin/pack-objects.c:3381
+#: builtin/pack-objects.c:3781 builtin/pack-objects.c:3796
 #: builtin/shortlog.c:255
 msgid "revision walk setup failed"
 msgstr "版本遍歷設定失敗"
 
-#: blame.c:2838
+#: blame.c:2835
 msgid ""
 "--reverse --first-parent together require range along first-parent chain"
 msgstr "--reverse 和 --first-parent 共用,需要第一祖先鏈上的提交範圍"
 
-#: blame.c:2849
+#: blame.c:2846
 #, c-format
 msgid "no such path %s in %s"
 msgstr "在 %2$s 中無此路徑 %1$s"
 
-#: blame.c:2860
+#: blame.c:2857
 #, c-format
 msgid "cannot read blob %s for path %s"
 msgstr "不能為路徑 %2$s 讀取資料物件 %1$s"
 
-#: branch.c:77
+#: branch.c:93
 msgid ""
 "cannot inherit upstream tracking configuration of multiple refs when "
 "rebasing is requested"
 msgstr "請求重定基底時,無法繼承多個參照的上游追蹤設定"
 
-#: branch.c:88
+#: branch.c:104
 #, c-format
 msgid "not setting branch '%s' as its own upstream"
 msgstr "未將「%s」分支設定為其自己的上游"
 
-#: branch.c:144
+#: branch.c:160
 #, c-format
 msgid "branch '%s' set up to track '%s' by rebasing."
 msgstr "已將「%s」分支設定為透過重定基底追蹤「%s」。"
 
-#: branch.c:145
+#: branch.c:161
 #, c-format
 msgid "branch '%s' set up to track '%s'."
 msgstr "已將「%s」分支設定為追蹤「%s」。"
 
-#: branch.c:148
+#: branch.c:164
 #, c-format
 msgid "branch '%s' set up to track:"
 msgstr "「%s」分支已設定追蹤:"
 
-#: branch.c:160
+#: branch.c:176
 msgid "unable to write upstream branch configuration"
 msgstr "無法寫入上游分支設定"
 
-#: branch.c:162
+#: branch.c:178
 msgid ""
 "\n"
 "After fixing the error cause you may try to fix up\n"
@@ -1899,47 +1898,84 @@ msgstr ""
 "修正錯誤後,您可以執行下述命令\n"
 "命令修正遠端追蹤資訊:"
 
-#: branch.c:203
+#: branch.c:219
 #, c-format
 msgid "asked to inherit tracking from '%s', but no remote is set"
 msgstr "請求繼承「%s」的追蹤設定,但未設定遠端"
 
-#: branch.c:209
+#: branch.c:225
 #, c-format
 msgid "asked to inherit tracking from '%s', but no merge configuration is set"
 msgstr "請求繼承「%s」的追蹤設定,但未設定合併設定"
 
-#: branch.c:252
+#: branch.c:277
+#, c-format
+msgid "not tracking: ambiguous information for ref '%s'"
+msgstr "未追蹤:「%s」引用有歧義"
+
+#  譯者:為保證在輸出中對齊,注意調整句中空格!
+#. TRANSLATORS: This is a line listing a remote with duplicate
+#. refspecs in the advice message below. For RTL languages you'll
+#. probably want to swap the "%s" and leading "  " space around.
+#.
+#. TRANSLATORS: This is line item of ambiguous object output
+#. from describe_ambiguous_object() above. For RTL languages
+#. you'll probably want to swap the "%s" and leading " " space
+#. around.
+#.
+#: branch.c:289 object-name.c:464
+#, c-format
+msgid "  %s\n"
+msgstr "  %s\n"
+
+#. TRANSLATORS: The second argument is a \n-delimited list of
+#. duplicate refspecs, composed above.
+#.
+#: branch.c:295
 #, c-format
-msgid "not tracking: ambiguous information for ref %s"
-msgstr "未追蹤:%s 引用有歧義"
+msgid ""
+"There are multiple remotes whose fetch refspecs map to the remote\n"
+"tracking ref '%s':\n"
+"%s\n"
+"This is typically a configuration error.\n"
+"\n"
+"To support setting up tracking branches, ensure that\n"
+"different remotes' fetch refspecs map into different\n"
+"tracking namespaces."
+msgstr ""
+"有多個遠端的抓取引用規格映射到遠端追蹤引用「%s」的規格:\n"
+"%s\n"
+"這通常是設定錯誤。\n"
+"\n"
+"若要支援設定追蹤分支,請確定不同遠端的抓取引用規格\n"
+"映射到不同的追蹤命名空間。"
 
-#: branch.c:287
+#: branch.c:344
 #, c-format
 msgid "'%s' is not a valid branch name"
 msgstr "「%s」不是一個有效的分支名稱"
 
-#: branch.c:307
+#: branch.c:364
 #, c-format
 msgid "a branch named '%s' already exists"
 msgstr "已有同名「%s」分支"
 
-#: branch.c:313
+#: branch.c:370
 #, c-format
 msgid "cannot force update the branch '%s' checked out at '%s'"
 msgstr "無法強制更新在「%2$s」簽出的「%1$s」分支"
 
-#: branch.c:336
+#: branch.c:393
 #, c-format
 msgid "cannot set up tracking information; starting point '%s' is not a branch"
 msgstr "無法設定追蹤資訊:起始點「%s」不是分支"
 
-#: branch.c:338
+#: branch.c:395
 #, c-format
 msgid "the requested upstream branch '%s' does not exist"
 msgstr "請求的上游分支 '%s' 不存在"
 
-#: branch.c:340
+#: branch.c:397
 msgid ""
 "\n"
 "If you are planning on basing your work on an upstream\n"
@@ -1958,124 +1994,143 @@ msgstr ""
 "且建立兩個分支間的追蹤關係,\n"
 "您可能需要使用「git push -u」推送分支並設定和上游的關聯。"
 
-#: branch.c:384 builtin/replace.c:321 builtin/replace.c:377
+#: branch.c:445 builtin/replace.c:321 builtin/replace.c:377
 #: builtin/replace.c:423 builtin/replace.c:453
 #, c-format
 msgid "not a valid object name: '%s'"
 msgstr "不是一個有效的物件名:'%s'"
 
-#: branch.c:404
+#: branch.c:465
 #, c-format
 msgid "ambiguous object name: '%s'"
 msgstr "物件名稱有歧義:「%s」"
 
-#: branch.c:409
+#: branch.c:470
 #, c-format
 msgid "not a valid branch point: '%s'"
 msgstr "無效的分支點:「%s」"
 
-#: branch.c:469
+#: branch.c:658
+#, c-format
+msgid "submodule '%s': unable to find submodule"
+msgstr "「%s」子模組:找不到子模組"
+
+#: branch.c:661
+#, c-format
+msgid ""
+"You may try updating the submodules using 'git checkout %s && git submodule "
+"update --init'"
+msgstr ""
+"您可以嘗試使用「git checkout %s && git submodule update --init」命令更新子模"
+"組"
+
+#: branch.c:672 branch.c:698
+#, c-format
+msgid "submodule '%s': cannot create branch '%s'"
+msgstr "「%s」子模組:無法建立「%s」分支"
+
+#: branch.c:730
 #, c-format
 msgid "'%s' is already checked out at '%s'"
 msgstr "'%s' 已經簽出到 '%s'"
 
-#: branch.c:494
+#: branch.c:755
 #, c-format
 msgid "HEAD of working tree %s is not updated"
 msgstr "工作區 %s 的 HEAD 指向沒有被更新"
 
-#: bundle.c:44
+#: bundle.c:45
 #, c-format
 msgid "unrecognized bundle hash algorithm: %s"
-msgstr "ç\84¡æ³\95è­\98å\88¥ç\9a\84å\8c\85雜湊演算法:%s"
+msgstr "ç\84¡æ³\95è­\98å\88¥ç\9a\84å¥\97件雜湊演算法:%s"
 
-#: bundle.c:48
+#: bundle.c:53
 #, c-format
 msgid "unknown capability '%s'"
 msgstr "未知功能 '%s'"
 
-#: bundle.c:74
+#: bundle.c:79
 #, c-format
 msgid "'%s' does not look like a v2 or v3 bundle file"
-msgstr "'%s' ä¸\8då\83\8fæ\98¯ä¸\80å\80\8b v2 æ\88\96 v3 ç\89\88æ\9c¬ç\9a\84å\8c\85檔案"
+msgstr "'%s' ä¸\8då\83\8fæ\98¯ä¸\80å\80\8b v2 æ\88\96 v3 ç\89\88æ\9c¬ç\9a\84å¥\97件檔案"
 
-#: bundle.c:113
+#: bundle.c:118
 #, c-format
 msgid "unrecognized header: %s%s (%d)"
 msgstr "無法識別的包頭:%s%s (%d)"
 
-#: bundle.c:140 rerere.c:464 rerere.c:674 sequencer.c:2620 sequencer.c:3406
-#: builtin/commit.c:862
+#: bundle.c:145 rerere.c:464 rerere.c:675 sequencer.c:2616 sequencer.c:3402
+#: builtin/commit.c:865
 #, c-format
 msgid "could not open '%s'"
 msgstr "不能開啟 '%s'"
 
-#: bundle.c:198
+#: bundle.c:203
 msgid "Repository lacks these prerequisite commits:"
 msgstr "版本庫中缺少這些必備的提交:"
 
-#: bundle.c:201
+#: bundle.c:206
 msgid "need a repository to verify a bundle"
-msgstr "需要版本庫驗證一個包"
+msgstr "需要版本庫驗證套件"
 
-#: bundle.c:257
+#: bundle.c:264
 #, c-format
 msgid "The bundle contains this ref:"
-msgid_plural "The bundle contains these %d refs:"
-msgstr[0] "é\80\99å\80\8bå\8c\85中å\90«æ\9c\89é\80\99 %d 個引用:"
+msgid_plural "The bundle contains these %<PRIuMAX> refs:"
+msgstr[0] "é\80\99å\80\8bå¥\97件å\90«æ\9c\89é\80\99 %<PRIuMAX> 個引用:"
 
-#: bundle.c:264
+#: bundle.c:272
 msgid "The bundle records a complete history."
-msgstr "é\80\99å\80\8bå\8c\85è¨\98é\8c\84ä¸\80å\80\8bå®\8cæ\95´æ­·å\8f²。"
+msgstr "é\80\99å\80\8bå¥\97件è¨\98é\8c\84å®\8cæ\95´æ­·å\8f²ç´\80é\8c\84。"
 
-#: bundle.c:266
+#: bundle.c:274
 #, c-format
 msgid "The bundle requires this ref:"
-msgid_plural "The bundle requires these %d refs:"
-msgstr[0] "é\80\99å\80\8bå\8c\85é\9c\80è¦\81é\80\99 %d 個引用:"
+msgid_plural "The bundle requires these %<PRIuMAX> refs:"
+msgstr[0] "é\80\99å\80\8bå¥\97件é\9c\80è¦\81é\80\99 %<PRIuMAX> 個引用:"
 
-#: bundle.c:333
+#: bundle.c:350
 msgid "unable to dup bundle descriptor"
-msgstr "無法複製 bundle 描述符"
+msgstr "無法複製套件描述符"
 
-#: bundle.c:340
+#: bundle.c:357
 msgid "Could not spawn pack-objects"
 msgstr "不能生成 pack-objects 進程"
 
-#: bundle.c:351
+#: bundle.c:368
 msgid "pack-objects died"
 msgstr "pack-objects 終止"
 
-#: bundle.c:400
+#: bundle.c:417
 #, c-format
 msgid "ref '%s' is excluded by the rev-list options"
 msgstr "引用 '%s' 被 rev-list 選項排除"
 
-#: bundle.c:504
+#: bundle.c:533 builtin/log.c:211 builtin/log.c:1975 builtin/shortlog.c:400
 #, c-format
-msgid "unsupported bundle version %d"
-msgstr "不支援的包版本 %d"
+msgid "unrecognized argument: %s"
+msgstr "無法識別的參數:%s"
 
-#: bundle.c:506
+#: bundle.c:548
 #, c-format
-msgid "cannot write bundle version %d with algorithm %s"
-msgstr "無法寫入 %2$s 演算法的包版本 %1$d"
+msgid "unsupported bundle version %d"
+msgstr "不支援的套件版本 %d"
 
-#: bundle.c:524 builtin/log.c:210 builtin/log.c:1953 builtin/shortlog.c:399
+#: bundle.c:550
 #, c-format
-msgid "unrecognized argument: %s"
-msgstr "無法識別的參數:%s"
+msgid "cannot write bundle version %d with algorithm %s"
+msgstr "無法寫入 %2$s 演算法的套件版本 %1$d"
 
-#: bundle.c:553
+#: bundle.c:600
 msgid "Refusing to create empty bundle."
-msgstr "ä¸\8dè\83½å»ºç«\8b空å\8c\85。"
+msgstr "ä¸\8dè\83½å»ºç«\8b空å¥\97件。"
 
-#: bundle.c:563
+#: bundle.c:610
 #, c-format
 msgid "cannot create '%s'"
 msgstr "不能建立 '%s'"
 
-#: bundle.c:588
+#: bundle.c:639
 msgid "index-pack died"
 msgstr "index-pack 終止"
 
@@ -2103,7 +2158,7 @@ msgstr "最終區塊有非零 ID %<PRIx32>"
 msgid "invalid color value: %.*s"
 msgstr "無效的顏色值:%.*s"
 
-#: commit-graph.c:204 midx.c:51
+#: commit-graph.c:204 midx.c:52
 msgid "invalid hash version"
 msgstr "無效的雜湊版本"
 
@@ -2131,232 +2186,233 @@ msgstr "提交圖形雜湊版本 %X 和版本 %X 不符合"
 msgid "commit-graph file is too small to hold %u chunks"
 msgstr "commit-graph 檔案不夠放置 %u 個區塊"
 
-#: commit-graph.c:482
+#: commit-graph.c:485
 msgid "commit-graph has no base graphs chunk"
 msgstr "提交圖形沒有基礎圖形區塊"
 
-#: commit-graph.c:492
+#: commit-graph.c:495
 msgid "commit-graph chain does not match"
 msgstr "提交圖形鏈不符合"
 
-#: commit-graph.c:540
+#: commit-graph.c:543
 #, c-format
 msgid "invalid commit-graph chain: line '%s' not a hash"
 msgstr "無效的提交圖形鏈:行 '%s' 不是一個雜湊值"
 
-#: commit-graph.c:564
+#: commit-graph.c:567
 msgid "unable to find all commit-graph files"
 msgstr "無法找到所有提交圖形檔案"
 
-#: commit-graph.c:749 commit-graph.c:786
+#: commit-graph.c:752 commit-graph.c:789
 msgid "invalid commit position. commit-graph is likely corrupt"
 msgstr "無效的提交位置。提交圖形可能已損壞"
 
-#: commit-graph.c:770
+#: commit-graph.c:773
 #, c-format
 msgid "could not find commit %s"
 msgstr "無法找到提交 %s"
 
-#: commit-graph.c:803
+#: commit-graph.c:806
 msgid "commit-graph requires overflow generation data but has none"
 msgstr "提交圖需要比目前更多的世代資料,但沒有相關資料"
 
-#: commit-graph.c:1108 builtin/am.c:1369
+#: commit-graph.c:1111 builtin/am.c:1370 builtin/checkout.c:775
+#: builtin/clone.c:705
 #, c-format
 msgid "unable to parse commit %s"
 msgstr "不能解析提交 %s"
 
-#: commit-graph.c:1370 builtin/pack-objects.c:3070
+#: commit-graph.c:1373 builtin/pack-objects.c:3078
 #, c-format
 msgid "unable to get type of object %s"
 msgstr "無法獲得物件 %s 類型"
 
-#: commit-graph.c:1401
+#: commit-graph.c:1404
 msgid "Loading known commits in commit graph"
 msgstr "正在載入提交圖中的已知提交"
 
-#: commit-graph.c:1418
+#: commit-graph.c:1421
 msgid "Expanding reachable commits in commit graph"
 msgstr "正在展開提交圖中的可以取得的提交"
 
-#: commit-graph.c:1438
+#: commit-graph.c:1441
 msgid "Clearing commit marks in commit graph"
 msgstr "正在清除提交圖中的提交標記"
 
-#: commit-graph.c:1457
+#: commit-graph.c:1460
 msgid "Computing commit graph topological levels"
 msgstr "正在計算提交圖拓樸級別"
 
-#: commit-graph.c:1510
+#: commit-graph.c:1513
 msgid "Computing commit graph generation numbers"
 msgstr "正在計算提交圖世代數字"
 
-#: commit-graph.c:1591
+#: commit-graph.c:1598
 msgid "Computing commit changed paths Bloom filters"
 msgstr "正在計算提交變更路徑的布隆過濾器"
 
-#: commit-graph.c:1668
+#: commit-graph.c:1675
 msgid "Collecting referenced commits"
 msgstr "正在收集引用提交"
 
-#: commit-graph.c:1693
+#: commit-graph.c:1701
 #, c-format
-msgid "Finding commits for commit graph in %d pack"
-msgid_plural "Finding commits for commit graph in %d packs"
-msgstr[0] "正在 %d 個包中尋找提交圖的提交"
+msgid "Finding commits for commit graph in %<PRIuMAX> pack"
+msgid_plural "Finding commits for commit graph in %<PRIuMAX> packs"
+msgstr[0] "正在從 %<PRIuMAX> 個包中尋找提交圖的提交"
 
-#: commit-graph.c:1706
+#: commit-graph.c:1714
 #, c-format
 msgid "error adding pack %s"
 msgstr "新增包 %s 發生錯誤"
 
-#: commit-graph.c:1710
+#: commit-graph.c:1718
 #, c-format
 msgid "error opening index for %s"
 msgstr "為 %s 開啟索引發生錯誤"
 
-#: commit-graph.c:1747
+#: commit-graph.c:1756
 msgid "Finding commits for commit graph among packed objects"
 msgstr "正在打包物件中尋找提交圖的提交"
 
-#: commit-graph.c:1765
+#: commit-graph.c:1774
 msgid "Finding extra edges in commit graph"
 msgstr "正在尋找提交圖中額外的邊"
 
-#: commit-graph.c:1814
+#: commit-graph.c:1823
 msgid "failed to write correct number of base graph ids"
 msgstr "無法寫入正確數量的基礎圖形 ID"
 
-#: commit-graph.c:1845 midx.c:1149
+#: commit-graph.c:1854 midx.c:1168 builtin/sparse-checkout.c:475
 #, c-format
 msgid "unable to create leading directories of %s"
 msgstr "不能為 %s 建立先導目錄"
 
-#: commit-graph.c:1858
+#: commit-graph.c:1868
 msgid "unable to create temporary graph layer"
 msgstr "無法建立暫時的圖形層"
 
-#: commit-graph.c:1863
+#: commit-graph.c:1873
 #, c-format
 msgid "unable to adjust shared permissions for '%s'"
 msgstr "無法調整「%s」的共用權限"
 
-#: commit-graph.c:1920
+#: commit-graph.c:1930
 #, c-format
 msgid "Writing out commit graph in %d pass"
 msgid_plural "Writing out commit graph in %d passes"
 msgstr[0] "正在用 %d 步寫出提交圖"
 
-#: commit-graph.c:1956
+#: commit-graph.c:1967
 msgid "unable to open commit-graph chain file"
 msgstr "無法開啟提交圖形鏈檔案"
 
-#: commit-graph.c:1972
+#: commit-graph.c:1983
 msgid "failed to rename base commit-graph file"
 msgstr "無法重新命名基礎提交圖形檔案"
 
-#: commit-graph.c:1992
+#: commit-graph.c:2004
 msgid "failed to rename temporary commit-graph file"
 msgstr "無法重新命名暫時提交圖形檔案"
 
-#: commit-graph.c:2125
+#: commit-graph.c:2137
 msgid "Scanning merged commits"
 msgstr "正在掃描合併提交"
 
-#: commit-graph.c:2169
+#: commit-graph.c:2181
 msgid "Merging commit-graph"
 msgstr "正在合併提交圖形"
 
-#: commit-graph.c:2277
+#: commit-graph.c:2289
 msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled"
 msgstr "嘗試寫入提交圖形,但 “core.commitGraph” 已被停用"
 
-#: commit-graph.c:2384
+#: commit-graph.c:2396
 msgid "too many commits to write graph"
 msgstr "提交太多不能畫圖"
 
-#: commit-graph.c:2482
+#: commit-graph.c:2494
 msgid "the commit-graph file has incorrect checksum and is likely corrupt"
 msgstr "提交圖檔案的總和檢查碼錯誤,可能已經損壞"
 
-#: commit-graph.c:2492
+#: commit-graph.c:2504
 #, c-format
 msgid "commit-graph has incorrect OID order: %s then %s"
 msgstr "提交圖形的物件 ID 順序不正確:%s 然後 %s"
 
-#: commit-graph.c:2502 commit-graph.c:2517
+#: commit-graph.c:2514 commit-graph.c:2529
 #, c-format
 msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u"
 msgstr "提交圖形有不正確的扇出值:fanout[%d] = %u != %u"
 
-#: commit-graph.c:2509
+#: commit-graph.c:2521
 #, c-format
 msgid "failed to parse commit %s from commit-graph"
 msgstr "無法從提交圖形中解析提交 %s"
 
-#: commit-graph.c:2527
+#: commit-graph.c:2539
 msgid "Verifying commits in commit graph"
 msgstr "正在驗證提交圖中的提交"
 
-#: commit-graph.c:2542
+#: commit-graph.c:2554
 #, c-format
 msgid "failed to parse commit %s from object database for commit-graph"
 msgstr "無法從提交圖形的物件庫中解析提交 %s"
 
-#: commit-graph.c:2549
+#: commit-graph.c:2561
 #, c-format
 msgid "root tree OID for commit %s in commit-graph is %s != %s"
 msgstr "提交圖形中的提交 %s 的根樹狀物件 ID 是 %s != %s"
 
-#: commit-graph.c:2559
+#: commit-graph.c:2571
 #, c-format
 msgid "commit-graph parent list for commit %s is too long"
 msgstr "提交 %s 的提交圖形父提交列表太長了"
 
-#: commit-graph.c:2568
+#: commit-graph.c:2580
 #, c-format
 msgid "commit-graph parent for %s is %s != %s"
 msgstr "%s 的提交圖形父提交是 %s != %s"
 
-#: commit-graph.c:2582
+#: commit-graph.c:2594
 #, c-format
 msgid "commit-graph parent list for commit %s terminates early"
 msgstr "提交 %s 的提交圖形父提交列表過早終止"
 
-#: commit-graph.c:2587
+#: commit-graph.c:2599
 #, c-format
 msgid ""
 "commit-graph has generation number zero for commit %s, but non-zero elsewhere"
 msgstr "提交圖形中提交 %s 的世代號是零,但其它地方非零"
 
-#: commit-graph.c:2591
+#: commit-graph.c:2603
 #, c-format
 msgid ""
 "commit-graph has non-zero generation number for commit %s, but zero elsewhere"
 msgstr "提交圖形中提交 %s 的世代號非零,但其它地方是零"
 
-#: commit-graph.c:2608
+#: commit-graph.c:2620
 #, c-format
 msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>"
 msgstr "提交 %s 的提交圖形處於 %<PRIuMAX> < %<PRIuMAX> 世代"
 
-#: commit-graph.c:2614
+#: commit-graph.c:2626
 #, c-format
 msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>"
 msgstr "提交圖形中提交 %s 的提交日期是 %<PRIuMAX> != %<PRIuMAX>"
 
-#: commit.c:53 sequencer.c:3109 builtin/am.c:399 builtin/am.c:444
-#: builtin/am.c:449 builtin/am.c:1448 builtin/am.c:2123 builtin/replace.c:456
+#: commit.c:54 sequencer.c:3105 builtin/am.c:400 builtin/am.c:445
+#: builtin/am.c:450 builtin/am.c:1449 builtin/am.c:2124 builtin/replace.c:456
 #, c-format
 msgid "could not parse %s"
 msgstr "不能解析 %s"
 
-#: commit.c:55
+#: commit.c:56
 #, c-format
 msgid "%s %s is not a commit!"
 msgstr "%s %s 不是一個提交!"
 
-#: commit.c:196
+#: commit.c:197
 msgid ""
 "Support for <GIT_DIR>/info/grafts is deprecated\n"
 "and will be removed in a future Git version.\n"
@@ -2376,27 +2432,27 @@ msgstr ""
 "設定 \"git config advice.graftFileDeprecated false\"\n"
 "可關閉本消息"
 
-#: commit.c:1241
+#: commit.c:1252
 #, c-format
 msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
 msgstr "提交 %s 有一個非可信的聲稱來自 %s 的 GPG 簽名。"
 
-#: commit.c:1245
+#: commit.c:1256
 #, c-format
 msgid "Commit %s has a bad GPG signature allegedly by %s."
 msgstr "提交 %s 有一個錯誤的聲稱來自 %s 的 GPG 簽名。"
 
-#: commit.c:1248
+#: commit.c:1259
 #, c-format
 msgid "Commit %s does not have a GPG signature."
 msgstr "提交 %s 沒有 GPG 簽名。"
 
-#: commit.c:1251
+#: commit.c:1262
 #, c-format
 msgid "Commit %s has a good GPG signature by %s\n"
 msgstr "提交 %s 有一個來自 %s 的好的 GPG 簽名。\n"
 
-#: commit.c:1505
+#: commit.c:1516
 msgid ""
 "Warning: commit message did not conform to UTF-8.\n"
 "You may want to amend it after fixing the message, or set the config\n"
@@ -2410,7 +2466,15 @@ msgstr ""
 msgid "memory exhausted"
 msgstr "記憶體耗盡"
 
-#: config.c:125
+#: compat/terminal.c:167
+msgid "cannot resume in the background, please use 'fg' to resume"
+msgstr "無法在背景繼續;請使用 “fg” 繼續"
+
+#: compat/terminal.c:168
+msgid "cannot restore terminal settings"
+msgstr "無法復原終端機設定"
+
+#: config.c:143
 #, c-format
 msgid ""
 "exceeded maximum include depth (%d) while including\n"
@@ -2425,333 +2489,360 @@ msgstr ""
 "\t%2$s\n"
 "這可能是因為循環包含。"
 
-#: config.c:141
+#: config.c:159
 #, c-format
 msgid "could not expand include path '%s'"
 msgstr "無法展開包含路徑 '%s'"
 
-#: config.c:152
+#: config.c:170
 msgid "relative config includes must come from files"
 msgstr "相對路徑的設定檔案引用必須來自於檔案"
 
-#: config.c:201
+#: config.c:219
 msgid "relative config include conditionals must come from files"
 msgstr "相對路徑的設定檔案條件引用必須來自於檔案"
 
-#: config.c:398
+#: config.c:364
+msgid ""
+"remote URLs cannot be configured in file directly or indirectly included by "
+"includeIf.hasconfig:remote.*.url"
+msgstr ""
+"無法在檔案設定遠端 URL,無論是直接或間接透過 includeIf.hasconfig:remote.*."
+"url 引入"
+
+#: config.c:508
 #, c-format
 msgid "invalid config format: %s"
 msgstr "無效的設定檔格式:%s"
 
-#: config.c:402
+#: config.c:512
 #, c-format
 msgid "missing environment variable name for configuration '%.*s'"
 msgstr "缺少「%.*s」組態設定的環境變數名稱"
 
-#: config.c:407
+#: config.c:517
 #, c-format
 msgid "missing environment variable '%s' for configuration '%.*s'"
 msgstr "缺少環境變數「%s」(於「%.*s」組態設定)"
 
-#: config.c:443
+#: config.c:553
 #, c-format
 msgid "key does not contain a section: %s"
 msgstr "鍵名沒有包含一個小節名稱:%s"
 
-#: config.c:448
+#: config.c:558
 #, c-format
 msgid "key does not contain variable name: %s"
 msgstr "鍵名沒有包含變數名:%s"
 
-#: config.c:470 sequencer.c:2806
+#: config.c:580 sequencer.c:2802
 #, c-format
 msgid "invalid key: %s"
 msgstr "無效鍵名:%s"
 
-#: config.c:475
+#: config.c:585
 #, c-format
 msgid "invalid key (newline): %s"
 msgstr "無效鍵名(有換行符號):%s"
 
-#: config.c:495
+#: config.c:605
 msgid "empty config key"
 msgstr "空白設定鍵"
 
-#: config.c:513 config.c:525
+#: config.c:623 config.c:635
 #, c-format
 msgid "bogus config parameter: %s"
 msgstr "偽設定參數:%s"
 
-#: config.c:539 config.c:556 config.c:563 config.c:572
+#: config.c:649 config.c:666 config.c:673 config.c:682
 #, c-format
 msgid "bogus format in %s"
 msgstr "%s 中格式錯誤"
 
-#: config.c:606
+#: config.c:716
 #, c-format
 msgid "bogus count in %s"
 msgstr "%s 中有偽計數"
 
-#: config.c:610
+#: config.c:720
 #, c-format
 msgid "too many entries in %s"
 msgstr "%s 中的項目過多"
 
-#: config.c:620
+#: config.c:730
 #, c-format
 msgid "missing config key %s"
 msgstr "缺少 %s 設定鍵"
 
-#: config.c:628
+#: config.c:738
 #, c-format
 msgid "missing config value %s"
 msgstr "缺少 %s 設定值"
 
-#: config.c:979
+#: config.c:1089
 #, c-format
 msgid "bad config line %d in blob %s"
 msgstr "資料物件 %2$s 中錯誤的設定行 %1$d"
 
-#: config.c:983
+#: config.c:1093
 #, c-format
 msgid "bad config line %d in file %s"
 msgstr "檔案 %2$s 中錯誤的設定行 %1$d"
 
-#: config.c:987
+#: config.c:1097
 #, c-format
 msgid "bad config line %d in standard input"
 msgstr "標準輸入中錯誤的設定行 %d"
 
-#: config.c:991
+#: config.c:1101
 #, c-format
 msgid "bad config line %d in submodule-blob %s"
 msgstr "子模組資料物件 %2$s 中錯誤的設定行 %1$d"
 
-#: config.c:995
+#: config.c:1105
 #, c-format
 msgid "bad config line %d in command line %s"
 msgstr "指令列 %2$s 中錯誤的設定行 %1$d"
 
-#: config.c:999
+#: config.c:1109
 #, c-format
 msgid "bad config line %d in %s"
 msgstr "在 %2$s 中錯誤的設定行 %1$d"
 
-#: config.c:1136
+#: config.c:1246
 msgid "out of range"
 msgstr "超出範圍"
 
-#: config.c:1136
+#: config.c:1246
 msgid "invalid unit"
 msgstr "無效的單位"
 
-#: config.c:1137
+#: config.c:1247
 #, c-format
 msgid "bad numeric config value '%s' for '%s': %s"
 msgstr "設定變數 '%2$s' 的數字取值 '%1$s' 設定錯誤:%3$s"
 
-#: config.c:1147
+#: config.c:1257
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in blob %s: %s"
 msgstr "資料物件 %3$s 中設定變數 '%2$s' 錯誤的取值 '%1$s':%4$s"
 
-#: config.c:1150
+#: config.c:1260
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in file %s: %s"
 msgstr "檔案 %3$s 中設定變數 '%2$s' 錯誤的取值 '%1$s':%4$s"
 
-#: config.c:1153
+#: config.c:1263
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in standard input: %s"
 msgstr "標準輸入中設定變數 '%2$s' 錯誤的取值 '%1$s':%3$s"
 
-#: config.c:1156
+#: config.c:1266
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s"
 msgstr "子模組資料 %3$s 中設定變數 '%2$s' 錯誤的取值 '%1$s':%4$s"
 
-#: config.c:1159
+#: config.c:1269
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in command line %s: %s"
 msgstr "指令列 %3$s 中設定變數 '%2$s' 錯誤的取值 '%1$s':%4$s"
 
-#: config.c:1162
+#: config.c:1272
 #, c-format
 msgid "bad numeric config value '%s' for '%s' in %s: %s"
 msgstr "在 %3$s 中設定變數 '%2$s' 錯誤的取值 '%1$s':%4$s"
 
-#: config.c:1241
+#: config.c:1368
+#, c-format
+msgid "invalid value for variable %s"
+msgstr "%s 變數的值無效"
+
+#: config.c:1389
+#, c-format
+msgid "ignoring unknown core.fsync component '%s'"
+msgstr "忽略未知的 core.fsync 組件「%s」"
+
+#: config.c:1425
 #, c-format
 msgid "bad boolean config value '%s' for '%s'"
 msgstr "「%2$s」的「%1$s」布林設定值無效"
 
-#: config.c:1259
+#: config.c:1443
 #, c-format
 msgid "failed to expand user dir in: '%s'"
 msgstr "無法展開使用者目錄於:’%s’"
 
-#: config.c:1268
+#: config.c:1452
 #, c-format
 msgid "'%s' for '%s' is not a valid timestamp"
 msgstr "'%2$s' 的值 '%1$s' 不是一個有效的時間戳"
 
-#: config.c:1361
+#: config.c:1545
 #, c-format
 msgid "abbrev length out of range: %d"
 msgstr "縮寫長度超出範圍:%d"
 
-#: config.c:1375 config.c:1386
+#: config.c:1559 config.c:1570
 #, c-format
 msgid "bad zlib compression level %d"
 msgstr "錯誤的 zlib 壓縮級別 %d"
 
-#: config.c:1476
+#: config.c:1660
 msgid "core.commentChar should only be one character"
 msgstr "core.commentChar 應該是一個字元"
 
-#: config.c:1509
+#: config.c:1692
+#, c-format
+msgid "ignoring unknown core.fsyncMethod value '%s'"
+msgstr "忽略未知的 core.fsyncMethod 值「%s」"
+
+#: config.c:1698
+msgid "core.fsyncObjectFiles is deprecated; use core.fsync instead"
+msgstr "core.fsyncObjectFiles 已被取代。請改用 core.fsync"
+
+#: config.c:1714
 #, c-format
 msgid "invalid mode for object creation: %s"
 msgstr "無效的物件建立模式:%s"
 
-#: config.c:1584
+#: config.c:1800
 #, c-format
 msgid "malformed value for %s"
 msgstr "%s 的取值格式錯誤"
 
-#: config.c:1610
+#: config.c:1826
 #, c-format
 msgid "malformed value for %s: %s"
 msgstr "%s 的取值格式錯誤:%s"
 
-#: config.c:1611
+#: config.c:1827
 msgid "must be one of nothing, matching, simple, upstream or current"
 msgstr "必須是其中之一:nothing、matching、simple、upstream 或 current"
 
-#: config.c:1672 builtin/pack-objects.c:4053
+#: config.c:1888 builtin/pack-objects.c:4078
 #, c-format
 msgid "bad pack compression level %d"
 msgstr "錯誤的打包壓縮級別 %d"
 
-#: config.c:1795
+#: config.c:2014
 #, c-format
 msgid "unable to load config blob object '%s'"
 msgstr "無法從資料物件 '%s' 載入設定"
 
-#: config.c:1798
+#: config.c:2017
 #, c-format
 msgid "reference '%s' does not point to a blob"
 msgstr "引用 '%s' 沒有指向一個資料物件"
 
-#: config.c:1816
+#: config.c:2035
 #, c-format
 msgid "unable to resolve config blob '%s'"
 msgstr "不能解析設定物件 '%s'"
 
-#: config.c:1861
+#: config.c:2080
 #, c-format
 msgid "failed to parse %s"
 msgstr "解析 %s 失敗"
 
-#: config.c:1917
+#: config.c:2136
 msgid "unable to parse command-line config"
 msgstr "無法解析指令列中的設定"
 
-#: config.c:2285
+#: config.c:2512
 msgid "unknown error occurred while reading the configuration files"
 msgstr "在讀取設定檔案時遇到未知錯誤"
 
-#: config.c:2459
+#: config.c:2686
 #, c-format
 msgid "Invalid %s: '%s'"
 msgstr "無效 %s:'%s'"
 
-#: config.c:2504
+#: config.c:2731
 #, c-format
 msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
 msgstr "splitIndex.maxPercentChange 的取值 '%d' 應該介於 0 和 100 之間"
 
-#: config.c:2550
+#: config.c:2763
 #, c-format
 msgid "unable to parse '%s' from command-line config"
 msgstr "無法解析指令列設定中的 '%s'"
 
-#: config.c:2552
+#: config.c:2765
 #, c-format
 msgid "bad config variable '%s' in file '%s' at line %d"
 msgstr "在檔案 '%2$s' 的第 %3$d 行發現錯誤的設定變數 '%1$s'"
 
-#: config.c:2637
+#: config.c:2850
 #, c-format
 msgid "invalid section name '%s'"
 msgstr "無效的小節名稱 '%s'"
 
-#: config.c:2669
+#: config.c:2882
 #, c-format
 msgid "%s has multiple values"
 msgstr "%s 有多個取值"
 
-#: config.c:2698
+#: config.c:2911
 #, c-format
 msgid "failed to write new configuration file %s"
 msgstr "寫入新的設定檔案 %s 失敗"
 
-#: config.c:2950 config.c:3277
+#: config.c:3177 config.c:3518
 #, c-format
 msgid "could not lock config file %s"
 msgstr "不能鎖定設定檔案 %s"
 
-#: config.c:2961
+#: config.c:3188
 #, c-format
 msgid "opening %s"
 msgstr "開啟 %s"
 
-#: config.c:2998 builtin/config.c:361
+#: config.c:3225 builtin/config.c:361
 #, c-format
 msgid "invalid pattern: %s"
 msgstr "無效模式:%s"
 
-#: config.c:3023
+#: config.c:3250
 #, c-format
 msgid "invalid config file %s"
 msgstr "無效的設定檔案 %s"
 
-#: config.c:3036 config.c:3290
+#: config.c:3263 config.c:3531
 #, c-format
 msgid "fstat on %s failed"
 msgstr "對 %s 呼叫 fstat 失敗"
 
-#: config.c:3047
+#: config.c:3274
 #, c-format
 msgid "unable to mmap '%s'%s"
 msgstr "無法 mmap '%s'%s"
 
-#: config.c:3057 config.c:3295
+#: config.c:3284 config.c:3536
 #, c-format
 msgid "chmod on %s failed"
 msgstr "對 %s 呼叫 chmod 失敗"
 
-#: config.c:3142 config.c:3392
+#: config.c:3369 config.c:3633
 #, c-format
 msgid "could not write config file %s"
 msgstr "不能寫入設定檔案 %s"
 
-#: config.c:3176
+#: config.c:3403
 #, c-format
 msgid "could not set '%s' to '%s'"
 msgstr "不能設定 '%s' 為 '%s'"
 
-#: config.c:3178 builtin/remote.c:662 builtin/remote.c:860 builtin/remote.c:868
+#: config.c:3405 builtin/remote.c:666 builtin/remote.c:885 builtin/remote.c:893
 #, c-format
 msgid "could not unset '%s'"
 msgstr "不能取消設定 '%s'"
 
-#: config.c:3268
+#: config.c:3509
 #, c-format
 msgid "invalid section name: %s"
 msgstr "無效的小節名稱:%s"
 
-#: config.c:3435
+#: config.c:3676
 #, c-format
 msgid "missing value for '%s'"
 msgstr "%s 的取值缺少"
@@ -3079,75 +3170,75 @@ msgstr "拒絕使用缺少主機欄位的憑證"
 msgid "refusing to work with credential missing protocol field"
 msgstr "拒絕使用缺少通訊協定欄位的憑證"
 
-#: credential.c:395
+#: credential.c:396
 #, c-format
 msgid "url contains a newline in its %s component: %s"
 msgstr "URL 的 %s 部分有換行:%s"
 
-#: credential.c:439
+#: credential.c:440
 #, c-format
 msgid "url has no scheme: %s"
 msgstr "URL 沒有 Scheme:%s"
 
-#: credential.c:512
+#: credential.c:513
 #, c-format
 msgid "credential url cannot be parsed: %s"
 msgstr "無法解析憑證 URL:%s"
 
-#: date.c:138
+#: date.c:139
 msgid "in the future"
 msgstr "在將來"
 
-#: date.c:144
+#: date.c:145
 #, c-format
 msgid "%<PRIuMAX> second ago"
 msgid_plural "%<PRIuMAX> seconds ago"
 msgstr[0] "%<PRIuMAX> 秒鐘前"
 
-#: date.c:151
+#: date.c:152
 #, c-format
 msgid "%<PRIuMAX> minute ago"
 msgid_plural "%<PRIuMAX> minutes ago"
 msgstr[0] "%<PRIuMAX> 分鐘前"
 
-#: date.c:158
+#: date.c:159
 #, c-format
 msgid "%<PRIuMAX> hour ago"
 msgid_plural "%<PRIuMAX> hours ago"
 msgstr[0] "%<PRIuMAX> 小時前"
 
-#: date.c:165
+#: date.c:166
 #, c-format
 msgid "%<PRIuMAX> day ago"
 msgid_plural "%<PRIuMAX> days ago"
 msgstr[0] "%<PRIuMAX> 天前"
 
-#: date.c:171
+#: date.c:172
 #, c-format
 msgid "%<PRIuMAX> week ago"
 msgid_plural "%<PRIuMAX> weeks ago"
 msgstr[0] "%<PRIuMAX> 周前"
 
-#: date.c:178
+#: date.c:179
 #, c-format
 msgid "%<PRIuMAX> month ago"
 msgid_plural "%<PRIuMAX> months ago"
 msgstr[0] "%<PRIuMAX> 個月前"
 
-#: date.c:189
+#: date.c:190
 #, c-format
 msgid "%<PRIuMAX> year"
 msgid_plural "%<PRIuMAX> years"
 msgstr[0] "%<PRIuMAX> 年"
 
 #. TRANSLATORS: "%s" is "<n> years"
-#: date.c:192
+#: date.c:193
 #, c-format
 msgid "%s, %<PRIuMAX> month ago"
 msgid_plural "%s, %<PRIuMAX> months ago"
 msgstr[0] "%s %<PRIuMAX> 個月前"
 
-#: date.c:197 date.c:202
+#: date.c:198 date.c:203
 #, c-format
 msgid "%<PRIuMAX> year ago"
 msgid_plural "%<PRIuMAX> years ago"
@@ -3177,10 +3268,14 @@ msgstr "來自 config 的資料島常規表示式有太多的擷取群組(最
 msgid "Marked %d islands, done.\n"
 msgstr "已標記 %d 個資料島,結束。\n"
 
-#: diff-merges.c:70
+#: diff-merges.c:81 gpg-interface.c:719 gpg-interface.c:734 ls-refs.c:37
+#: parallel-checkout.c:42 sequencer.c:2805 setup.c:563 builtin/am.c:203
+#: builtin/am.c:2243 builtin/am.c:2287 builtin/blame.c:724 builtin/blame.c:742
+#: builtin/fetch.c:792 builtin/pack-objects.c:3515 builtin/pull.c:45
+#: builtin/pull.c:47 builtin/pull.c:321
 #, c-format
-msgid "unknown value for --diff-merges: %s"
-msgstr "--diff-merges 的值無效:%s"
+msgid "invalid value for '%s': '%s'"
+msgstr "「%s」的值無效:「%s」"
 
 #: diff-lib.c:561
 msgid "--merge-base does not work with ranges"
@@ -3213,18 +3308,18 @@ msgid ""
 msgstr "不是一個 git 版本庫。使用 --no-index 比較工作區之外的兩個路徑"
 
 #  譯者:請維持前導空格
-#: diff.c:158
+#: diff.c:159
 #, c-format
 msgid "  Failed to parse dirstat cut-off percentage '%s'\n"
 msgstr "  無法解析 dirstat 截止(cut-off)百分比 '%s'\n"
 
 #  譯者:請維持前導空格
-#: diff.c:163
+#: diff.c:164
 #, c-format
 msgid "  Unknown dirstat parameter '%s'\n"
 msgstr "  未知的 dirstat 參數 '%s'\n"
 
-#: diff.c:299
+#: diff.c:300
 msgid ""
 "color moved setting must be one of 'no', 'default', 'blocks', 'zebra', "
 "'dimmed-zebra', 'plain'"
@@ -3232,7 +3327,7 @@ msgstr ""
 "移動的顏色設定必須是 'no'、'default'、'blocks'、'zebra'、'dimmed-"
 "zebra'、'plain'"
 
-#: diff.c:327
+#: diff.c:328
 #, c-format
 msgid ""
 "unknown color-moved-ws mode '%s', possible values are 'ignore-space-change', "
@@ -3241,18 +3336,18 @@ msgstr ""
 "未知的 color-moved-ws 模式 '%s',可能的取值有 'ignore-space-change'、'ignore-"
 "space-at-eol'、'ignore-all-space'、'allow-indentation-change'"
 
-#: diff.c:335
+#: diff.c:336
 msgid ""
 "color-moved-ws: allow-indentation-change cannot be combined with other "
 "whitespace modes"
 msgstr "color-moved-ws:allow-indentation-change 不能與其它空白字元模式共用"
 
-#: diff.c:412
+#: diff.c:413
 #, c-format
 msgid "Unknown value for 'diff.submodule' config variable: '%s'"
 msgstr "設定變數 'diff.submodule' 未知的取值:'%s'"
 
-#: diff.c:472
+#: diff.c:473
 #, c-format
 msgid ""
 "Found errors in 'diff.dirstat' config variable:\n"
@@ -3261,48 +3356,48 @@ msgstr ""
 "發現設定變數 'diff.dirstat' 中的錯誤:\n"
 "%s"
 
-#: diff.c:4237
+#: diff.c:4282
 #, c-format
 msgid "external diff died, stopping at %s"
 msgstr "外部 diff 離開,停止在 %s"
 
-#: diff.c:4589
+#: diff.c:4677 parse-options.c:1114
 #, c-format
 msgid "options '%s', '%s', '%s', and '%s' cannot be used together"
 msgstr "「%s」、「%s」、「%s」和「%s」選項不得同時使用"
 
-#: diff.c:4593 builtin/difftool.c:736 builtin/log.c:1982 builtin/worktree.c:506
+#: diff.c:4681 parse-options.c:1118 builtin/worktree.c:578
 #, c-format
 msgid "options '%s', '%s', and '%s' cannot be used together"
 msgstr "「%s」、「%s」和「%s」選項不得同時使用"
 
-#: diff.c:4597
+#: diff.c:4685
 #, c-format
 msgid "options '%s' and '%s' cannot be used together, use '%s' with '%s'"
 msgstr "「%s」和「%s」選項不得同時使用,請使用「%s」搭配「%s」"
 
-#: diff.c:4601
+#: diff.c:4689
 #, c-format
 msgid ""
 "options '%s' and '%s' cannot be used together, use '%s' with '%s' and '%s'"
 msgstr "「%s」和「%s」選項不得同時使用,請使用「%s」搭配「%s」、「%s」"
 
-#: diff.c:4681
+#: diff.c:4769
 msgid "--follow requires exactly one pathspec"
 msgstr "--follow 明確要求只跟一個路徑規格"
 
-#: diff.c:4729
+#: diff.c:4823
 #, c-format
 msgid "invalid --stat value: %s"
 msgstr "無效的 --stat 值:%s"
 
-#: diff.c:4734 diff.c:4739 diff.c:4744 diff.c:4749 diff.c:5277
+#: diff.c:4828 diff.c:4833 diff.c:4838 diff.c:4843 diff.c:5319
 #: parse-options.c:217 parse-options.c:221
 #, c-format
 msgid "%s expects a numerical value"
 msgstr "%s 期望一個數字值"
 
-#: diff.c:4766
+#: diff.c:4860
 #, c-format
 msgid ""
 "Failed to parse --dirstat/-X option parameter:\n"
@@ -3311,200 +3406,200 @@ msgstr ""
 "無法解析 --dirstat/-X 選項的參數:\n"
 "%s"
 
-#: diff.c:4851
+#: diff.c:4893
 #, c-format
 msgid "unknown change class '%c' in --diff-filter=%s"
 msgstr "--diff-filter=%2$s 中未知的變更類 '%1$c'"
 
-#: diff.c:4875
+#: diff.c:4917
 #, c-format
 msgid "unknown value after ws-error-highlight=%.*s"
 msgstr "ws-error-highlight=%.*s 之後未知的值"
 
-#: diff.c:4889
+#: diff.c:4931
 #, c-format
 msgid "unable to resolve '%s'"
 msgstr "不能解析 '%s'"
 
-#: diff.c:4939 diff.c:4945
+#: diff.c:4981 diff.c:4987
 #, c-format
 msgid "%s expects <n>/<m> form"
 msgstr "%s 期望 <n>/<m> 格式"
 
-#: diff.c:4957
+#: diff.c:4999
 #, c-format
 msgid "%s expects a character, got '%s'"
 msgstr "%s 期望一個字元,得到 '%s'"
 
-#: diff.c:4978
+#: diff.c:5020
 #, c-format
 msgid "bad --color-moved argument: %s"
 msgstr "壞的 --color-moved 參數:%s"
 
-#: diff.c:4997
+#: diff.c:5039
 #, c-format
 msgid "invalid mode '%s' in --color-moved-ws"
 msgstr "--color-moved-ws 中的無效模式 '%s'"
 
-#: diff.c:5037
+#: diff.c:5079
 msgid ""
 "option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and "
 "\"histogram\""
 msgstr ""
 "diff-algorithm 選項有 \"myers\"、\"minimal\"、\"patience\" 和 \"histogram\""
 
-#: diff.c:5073 diff.c:5093
+#: diff.c:5115 diff.c:5135
 #, c-format
 msgid "invalid argument to %s"
 msgstr "%s 的參數無效"
 
-#: diff.c:5197
+#: diff.c:5239
 #, c-format
 msgid "invalid regex given to -I: '%s'"
 msgstr "傳入 -I 的常規表示式無效:「%s」"
 
-#: diff.c:5246
+#: diff.c:5288
 #, c-format
 msgid "failed to parse --submodule option parameter: '%s'"
 msgstr "無法解析 --submodule 選項的參數:'%s'"
 
-#: diff.c:5302
+#: diff.c:5344
 #, c-format
 msgid "bad --word-diff argument: %s"
 msgstr "壞的 --word-diff 參數:%s"
 
-#: diff.c:5338
+#: diff.c:5380
 msgid "Diff output format options"
 msgstr "差異輸出格式化選項"
 
-#: diff.c:5340 diff.c:5346
+#: diff.c:5382 diff.c:5388
 msgid "generate patch"
 msgstr "生成修補檔"
 
-#: diff.c:5343 builtin/log.c:179
+#: diff.c:5385 builtin/log.c:180
 msgid "suppress diff output"
 msgstr "不顯示差異輸出"
 
-#: diff.c:5348 diff.c:5462 diff.c:5469
+#: diff.c:5390 diff.c:5504 diff.c:5511
 msgid "<n>"
 msgstr "<n>"
 
-#: diff.c:5349 diff.c:5352
+#: diff.c:5391 diff.c:5394
 msgid "generate diffs with <n> lines context"
 msgstr "生成含 <n> 行上下文的差異"
 
-#: diff.c:5354
+#: diff.c:5396
 msgid "generate the diff in raw format"
 msgstr "生成原始格式的差異"
 
-#: diff.c:5357
+#: diff.c:5399
 msgid "synonym for '-p --raw'"
 msgstr "和 '-p --raw' 同義"
 
-#: diff.c:5361
+#: diff.c:5403
 msgid "synonym for '-p --stat'"
 msgstr "和 '-p --stat' 同義"
 
-#: diff.c:5365
+#: diff.c:5407
 msgid "machine friendly --stat"
 msgstr "機器友好的 --stat"
 
-#: diff.c:5368
+#: diff.c:5410
 msgid "output only the last line of --stat"
 msgstr "只輸出 --stat 的最後一行"
 
-#: diff.c:5370 diff.c:5378
+#: diff.c:5412 diff.c:5420
 msgid "<param1,param2>..."
 msgstr "<參數1,參數2>..."
 
-#: diff.c:5371
+#: diff.c:5413
 msgid ""
 "output the distribution of relative amount of changes for each sub-directory"
 msgstr "輸出每個子目錄相對變更的分布"
 
-#: diff.c:5375
+#: diff.c:5417
 msgid "synonym for --dirstat=cumulative"
 msgstr "和 --dirstat=cumulative 同義"
 
-#: diff.c:5379
+#: diff.c:5421
 msgid "synonym for --dirstat=files,param1,param2..."
 msgstr "是 --dirstat=files,param1,param2... 的同義詞"
 
-#: diff.c:5383
+#: diff.c:5425
 msgid "warn if changes introduce conflict markers or whitespace errors"
 msgstr "如果變更中引入衝突定界符或空白錯誤,給出警告"
 
-#: diff.c:5386
+#: diff.c:5428
 msgid "condensed summary such as creations, renames and mode changes"
 msgstr "精簡摘要,例如建立、重新命名和模式變更"
 
-#: diff.c:5389
+#: diff.c:5431
 msgid "show only names of changed files"
 msgstr "只顯示變更檔案的檔案名"
 
-#: diff.c:5392
+#: diff.c:5434
 msgid "show only names and status of changed files"
 msgstr "只顯示變更檔案的檔案名和狀態"
 
-#: diff.c:5394
+#: diff.c:5436
 msgid "<width>[,<name-width>[,<count>]]"
 msgstr "<寬度>[,<檔案名寬度>[,<次數>]]"
 
-#: diff.c:5395
+#: diff.c:5437
 msgid "generate diffstat"
 msgstr "生成差異統計(diffstat)"
 
-#: diff.c:5397 diff.c:5400 diff.c:5403
+#: diff.c:5439 diff.c:5442 diff.c:5445
 msgid "<width>"
 msgstr "<寬度>"
 
-#: diff.c:5398
+#: diff.c:5440
 msgid "generate diffstat with a given width"
 msgstr "使用提供的長度生成差異統計"
 
-#: diff.c:5401
+#: diff.c:5443
 msgid "generate diffstat with a given name width"
 msgstr "使用提供的檔案名長度生成差異統計"
 
-#: diff.c:5404
+#: diff.c:5446
 msgid "generate diffstat with a given graph width"
 msgstr "使用提供的圖形長度生成差異統計"
 
-#: diff.c:5406
+#: diff.c:5448
 msgid "<count>"
 msgstr "<次數>"
 
-#: diff.c:5407
+#: diff.c:5449
 msgid "generate diffstat with limited lines"
 msgstr "生成有限行數的差異統計"
 
-#: diff.c:5410
+#: diff.c:5452
 msgid "generate compact summary in diffstat"
 msgstr "生成差異統計的簡潔摘要"
 
-#: diff.c:5413
+#: diff.c:5455
 msgid "output a binary diff that can be applied"
 msgstr "輸出一個可以套用的二進位差異"
 
-#: diff.c:5416
+#: diff.c:5458
 msgid "show full pre- and post-image object names on the \"index\" lines"
 msgstr "在 \"index\" 行顯示完整的前後物件名稱"
 
-#: diff.c:5418
+#: diff.c:5460
 msgid "show colored diff"
 msgstr "顯示帶顏色的差異"
 
-#: diff.c:5419
+#: diff.c:5461
 msgid "<kind>"
 msgstr "<類型>"
 
-#: diff.c:5420
+#: diff.c:5462
 msgid ""
 "highlight whitespace errors in the 'context', 'old' or 'new' lines in the "
 "diff"
 msgstr "對於差異中的上下文、舊的和新的行,加亮顯示錯誤的空白字元"
 
-#: diff.c:5423
+#: diff.c:5465
 msgid ""
 "do not munge pathnames and use NULs as output field terminators in --raw or "
 "--numstat"
@@ -3512,311 +3607,311 @@ msgstr ""
 "在 --raw 或者 --numstat 中,不對路徑字元轉檔並使用 NUL 字元做為輸出欄位的分隔"
 "符"
 
-#: diff.c:5426 diff.c:5429 diff.c:5432 diff.c:5541
+#: diff.c:5468 diff.c:5471 diff.c:5474 diff.c:5583
 msgid "<prefix>"
 msgstr "<前綴>"
 
-#: diff.c:5427
+#: diff.c:5469
 msgid "show the given source prefix instead of \"a/\""
 msgstr "顯示提供的來源前綴,而非 \"a/\""
 
-#: diff.c:5430
+#: diff.c:5472
 msgid "show the given destination prefix instead of \"b/\""
 msgstr "顯示提供的目的地前綴取代 \"b/\""
 
-#: diff.c:5433
+#: diff.c:5475
 msgid "prepend an additional prefix to every line of output"
 msgstr "輸出的每一行附加前綴"
 
-#: diff.c:5436
+#: diff.c:5478
 msgid "do not show any source or destination prefix"
 msgstr "不顯示任何來源和目的地前綴"
 
-#: diff.c:5439
+#: diff.c:5481
 msgid "show context between diff hunks up to the specified number of lines"
 msgstr "顯示指定行數的差異區塊間的上下文"
 
-#: diff.c:5443 diff.c:5448 diff.c:5453
+#: diff.c:5485 diff.c:5490 diff.c:5495
 msgid "<char>"
 msgstr "<字元>"
 
-#: diff.c:5444
+#: diff.c:5486
 msgid "specify the character to indicate a new line instead of '+'"
 msgstr "指定一個字元取代 '+' 來表示新的一行"
 
-#: diff.c:5449
+#: diff.c:5491
 msgid "specify the character to indicate an old line instead of '-'"
 msgstr "指定一個字元取代 '-' 來表示舊的一行"
 
-#: diff.c:5454
+#: diff.c:5496
 msgid "specify the character to indicate a context instead of ' '"
 msgstr "指定一個字元取代 ' ' 來表示一行上下文"
 
-#: diff.c:5457
+#: diff.c:5499
 msgid "Diff rename options"
 msgstr "差異重新命名選項"
 
-#: diff.c:5458
+#: diff.c:5500
 msgid "<n>[/<m>]"
 msgstr "<n>[/<m>]"
 
-#: diff.c:5459
+#: diff.c:5501
 msgid "break complete rewrite changes into pairs of delete and create"
 msgstr "將完全重寫的變更打破為成對的刪除和建立"
 
-#: diff.c:5463
+#: diff.c:5505
 msgid "detect renames"
 msgstr "檢測重新命名"
 
-#: diff.c:5467
+#: diff.c:5509
 msgid "omit the preimage for deletes"
 msgstr "省略刪除變更的差異輸出"
 
-#: diff.c:5470
+#: diff.c:5512
 msgid "detect copies"
 msgstr "檢測複製"
 
-#: diff.c:5474
+#: diff.c:5516
 msgid "use unmodified files as source to find copies"
 msgstr "使用未修改的檔案做為發現拷貝的來源"
 
-#: diff.c:5476
+#: diff.c:5518
 msgid "disable rename detection"
 msgstr "停用重新命名偵測"
 
-#: diff.c:5479
+#: diff.c:5521
 msgid "use empty blobs as rename source"
 msgstr "使用空的資料物件做為重新命名的來源"
 
-#: diff.c:5481
+#: diff.c:5523
 msgid "continue listing the history of a file beyond renames"
 msgstr "繼續列出檔案重新命名以外的歷史記錄"
 
-#: diff.c:5484
+#: diff.c:5526
 msgid ""
 "prevent rename/copy detection if the number of rename/copy targets exceeds "
 "given limit"
 msgstr "如果重新命名/複製目標超過提供的限制,禁止重新命名/複製檢測"
 
-#: diff.c:5486
+#: diff.c:5528
 msgid "Diff algorithm options"
 msgstr "差異演算法選項"
 
-#: diff.c:5488
+#: diff.c:5530
 msgid "produce the smallest possible diff"
 msgstr "生成儘可能小的差異"
 
-#: diff.c:5491
+#: diff.c:5533
 msgid "ignore whitespace when comparing lines"
 msgstr "行比較時忽略空白字元"
 
-#: diff.c:5494
+#: diff.c:5536
 msgid "ignore changes in amount of whitespace"
 msgstr "忽略空白字元的變更"
 
-#: diff.c:5497
+#: diff.c:5539
 msgid "ignore changes in whitespace at EOL"
 msgstr "忽略行尾的空白字元變更"
 
-#: diff.c:5500
+#: diff.c:5542
 msgid "ignore carrier-return at the end of line"
 msgstr "忽略行尾的Enter符(CR)"
 
-#: diff.c:5503
+#: diff.c:5545
 msgid "ignore changes whose lines are all blank"
 msgstr "忽略整行都是空白的變更"
 
-#: diff.c:5505 diff.c:5527 diff.c:5530 diff.c:5575
+#: diff.c:5547 diff.c:5569 diff.c:5572 diff.c:5617
 msgid "<regex>"
 msgstr "<正則>"
 
-#: diff.c:5506
+#: diff.c:5548
 msgid "ignore changes whose all lines match <regex>"
 msgstr "忽略整行符合 <regex> 的變更"
 
-#: diff.c:5509
+#: diff.c:5551
 msgid "heuristic to shift diff hunk boundaries for easy reading"
 msgstr "啟發式轉換差異邊界以便閱讀"
 
-#: diff.c:5512
+#: diff.c:5554
 msgid "generate diff using the \"patience diff\" algorithm"
 msgstr "使用 \"patience diff\" 演算法生成差異"
 
-#: diff.c:5516
+#: diff.c:5558
 msgid "generate diff using the \"histogram diff\" algorithm"
 msgstr "使用 \"histogram diff\" 演算法生成差異"
 
-#: diff.c:5518
+#: diff.c:5560
 msgid "<algorithm>"
 msgstr "<演算法>"
 
-#: diff.c:5519
+#: diff.c:5561
 msgid "choose a diff algorithm"
 msgstr "選擇一個差異演算法"
 
-#: diff.c:5521
+#: diff.c:5563
 msgid "<text>"
 msgstr "<文字>"
 
-#: diff.c:5522
+#: diff.c:5564
 msgid "generate diff using the \"anchored diff\" algorithm"
 msgstr "使用 \"anchored diff\" 演算法生成差異"
 
-#: diff.c:5524 diff.c:5533 diff.c:5536
+#: diff.c:5566 diff.c:5575 diff.c:5578
 msgid "<mode>"
 msgstr "<模式>"
 
-#: diff.c:5525
+#: diff.c:5567
 msgid "show word diff, using <mode> to delimit changed words"
 msgstr "顯示單詞差異,使用 <模式> 分隔變更的單詞"
 
-#: diff.c:5528
+#: diff.c:5570
 msgid "use <regex> to decide what a word is"
 msgstr "使用 <常規表示式> 確定何為一個詞"
 
-#: diff.c:5531
+#: diff.c:5573
 msgid "equivalent to --word-diff=color --word-diff-regex=<regex>"
 msgstr "相當於 --word-diff=color --word-diff-regex=<正則>"
 
-#: diff.c:5534
+#: diff.c:5576
 msgid "moved lines of code are colored differently"
 msgstr "移動的程式碼行用不同方式著色"
 
-#: diff.c:5537
+#: diff.c:5579
 msgid "how white spaces are ignored in --color-moved"
 msgstr "在 --color-moved 下如何忽略空白字元"
 
-#: diff.c:5540
+#: diff.c:5582
 msgid "Other diff options"
 msgstr "其它差異選項"
 
-#: diff.c:5542
+#: diff.c:5584
 msgid "when run from subdir, exclude changes outside and show relative paths"
 msgstr "當從子目錄執行,排除目錄之外的變更並顯示相對路徑"
 
-#: diff.c:5546
+#: diff.c:5588
 msgid "treat all files as text"
 msgstr "把所有檔案當做文字處理"
 
-#: diff.c:5548
+#: diff.c:5590
 msgid "swap two inputs, reverse the diff"
 msgstr "交換兩個輸入,反轉差異"
 
-#: diff.c:5550
+#: diff.c:5592
 msgid "exit with 1 if there were differences, 0 otherwise"
 msgstr "有差異時離開碼為 1,否則為 0"
 
-#: diff.c:5552
+#: diff.c:5594
 msgid "disable all output of the program"
 msgstr "停用本程式的所有輸出"
 
-#: diff.c:5554
+#: diff.c:5596
 msgid "allow an external diff helper to be executed"
 msgstr "允許執行一個外部的差異協助工具"
 
-#: diff.c:5556
+#: diff.c:5598
 msgid "run external text conversion filters when comparing binary files"
 msgstr "當比較二進位檔案時,執行外部的文字轉換過濾器"
 
-#: diff.c:5558
+#: diff.c:5600
 msgid "<when>"
 msgstr "<何時>"
 
-#: diff.c:5559
+#: diff.c:5601
 msgid "ignore changes to submodules in the diff generation"
 msgstr "在生成差異時,忽略子模組的更改"
 
-#: diff.c:5562
+#: diff.c:5604
 msgid "<format>"
 msgstr "<格式>"
 
-#: diff.c:5563
+#: diff.c:5605
 msgid "specify how differences in submodules are shown"
 msgstr "指定子模組的差異如何顯示"
 
-#: diff.c:5567
+#: diff.c:5609
 msgid "hide 'git add -N' entries from the index"
 msgstr "隱藏索引中 'git add -N' 條目"
 
-#: diff.c:5570
+#: diff.c:5612
 msgid "treat 'git add -N' entries as real in the index"
 msgstr "將索引中 'git add -N' 條目當做真實的"
 
-#: diff.c:5572
+#: diff.c:5614
 msgid "<string>"
 msgstr "<字串>"
 
-#: diff.c:5573
+#: diff.c:5615
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "string"
 msgstr "尋找改變了指定字串出現次數的差異"
 
-#: diff.c:5576
+#: diff.c:5618
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "regex"
 msgstr "尋找改變指定正則符合出現次數的差異"
 
-#: diff.c:5579
+#: diff.c:5621
 msgid "show all changes in the changeset with -S or -G"
 msgstr "顯示使用 -S 或 -G 的變更集的所有變更"
 
-#: diff.c:5582
+#: diff.c:5624
 msgid "treat <string> in -S as extended POSIX regular expression"
 msgstr "將 -S 的 <string> 當做延伸 POSIX 常規表示式"
 
-#: diff.c:5585
+#: diff.c:5627
 msgid "control the order in which files appear in the output"
 msgstr "控制輸出中的檔案顯示順序"
 
-#: diff.c:5586 diff.c:5589
+#: diff.c:5628 diff.c:5631
 msgid "<path>"
 msgstr "<路徑>"
 
-#: diff.c:5587
+#: diff.c:5629
 msgid "show the change in the specified path first"
 msgstr "先顯示指定路徑的變更"
 
-#: diff.c:5590
+#: diff.c:5632
 msgid "skip the output to the specified path"
 msgstr "略過輸出至指定路徑"
 
-#: diff.c:5592
+#: diff.c:5634
 msgid "<object-id>"
 msgstr "<物件 ID>"
 
-#: diff.c:5593
+#: diff.c:5635
 msgid ""
 "look for differences that change the number of occurrences of the specified "
 "object"
 msgstr "尋找改變指定物件出現次數的差異"
 
-#: diff.c:5595
+#: diff.c:5637
 msgid "[(A|C|D|M|R|T|U|X|B)...[*]]"
 msgstr "[(A|C|D|M|R|T|U|X|B)...[*]]"
 
-#: diff.c:5596
+#: diff.c:5638
 msgid "select files by diff type"
 msgstr "透過差異類型選擇檔案"
 
-#: diff.c:5598
+#: diff.c:5640
 msgid "<file>"
 msgstr "<檔案>"
 
-#: diff.c:5599
-msgid "Output to a specific file"
-msgstr "輸出到一個指定的檔案"
+#: diff.c:5641
+msgid "output to a specific file"
+msgstr "輸出至指定檔案"
 
-#: diff.c:6257
+#: diff.c:6321
 msgid "exhaustive rename detection was skipped due to too many files."
 msgstr "因為檔案太多,已略過詳細重新命名偵測。"
 
-#: diff.c:6260
+#: diff.c:6324
 msgid "only found copies from modified paths due to too many files."
 msgstr "因為檔案太多,只在修改的路徑中尋找複製。"
 
-#: diff.c:6263
+#: diff.c:6327
 #, c-format
 msgid ""
 "you may want to set your %s variable to at least %d and retry the command."
@@ -3865,20 +3960,20 @@ msgstr "停用 cone 樣式符合模式"
 msgid "cannot use %s as an exclude file"
 msgstr "不能將 %s 用作排除檔案"
 
-#: dir.c:2418
+#: dir.c:2419
 #, c-format
 msgid "could not open directory '%s'"
 msgstr "不能開啟目錄 '%s'"
 
-#: dir.c:2720
+#: dir.c:2721
 msgid "failed to get kernel name and information"
 msgstr "無法獲得核心名稱和訊息"
 
-#: dir.c:2844
+#: dir.c:2846
 msgid "untracked cache is disabled on this system or location"
 msgstr "快取未追蹤檔案在本系統或位置中被停用"
 
-#: dir.c:3112
+#: dir.c:3119
 msgid ""
 "No directory name could be guessed.\n"
 "Please specify a directory on the command line"
@@ -3886,17 +3981,17 @@ msgstr ""
 "無法猜到目錄名。\n"
 "請在指令列指定一個目錄"
 
-#: dir.c:3800
+#: dir.c:3807
 #, c-format
 msgid "index file corrupt in repo %s"
 msgstr "版本庫 %s 中的索引檔案損壞"
 
-#: dir.c:3847 dir.c:3852
+#: dir.c:3854 dir.c:3859
 #, c-format
 msgid "could not create directories for %s"
 msgstr "不能為 %s 建立目錄"
 
-#: dir.c:3881
+#: dir.c:3888
 #, c-format
 msgid "could not migrate git directory from '%s' to '%s'"
 msgstr "不能從 '%s' 遷移 git 目錄到 '%s'"
@@ -3915,7 +4010,7 @@ msgstr "過濾內容"
 msgid "could not stat file '%s'"
 msgstr "不能對檔案 '%s' 呼叫 stat"
 
-#: environment.c:145
+#: environment.c:147
 #, c-format
 msgid "bad git namespace path \"%s\""
 msgstr "錯誤的 git 名字空間路徑 \"%s\""
@@ -3946,253 +4041,280 @@ msgstr "git fetch-pack:應為 ACK/NAK,卻得到 '%s'"
 msgid "unable to write to remote"
 msgstr "無法寫到遠端"
 
-#: fetch-pack.c:395 fetch-pack.c:1439
+#: fetch-pack.c:397 fetch-pack.c:1460
 #, c-format
 msgid "invalid shallow line: %s"
 msgstr "無效的 shallow 訊息:%s"
 
-#: fetch-pack.c:401 fetch-pack.c:1445
+#: fetch-pack.c:403 fetch-pack.c:1466
 #, c-format
 msgid "invalid unshallow line: %s"
 msgstr "無效的 unshallow 訊息:%s"
 
-#: fetch-pack.c:403 fetch-pack.c:1447
+#: fetch-pack.c:405 fetch-pack.c:1468
 #, c-format
 msgid "object not found: %s"
 msgstr "物件未找到:%s"
 
-#: fetch-pack.c:406 fetch-pack.c:1450
+#: fetch-pack.c:408 fetch-pack.c:1471
 #, c-format
 msgid "error in object: %s"
 msgstr "物件中發生錯誤:%s"
 
-#: fetch-pack.c:408 fetch-pack.c:1452
+#: fetch-pack.c:410 fetch-pack.c:1473
 #, c-format
 msgid "no shallow found: %s"
 msgstr "未發現 shallow:%s"
 
-#: fetch-pack.c:411 fetch-pack.c:1456
+#: fetch-pack.c:413 fetch-pack.c:1477
 #, c-format
 msgid "expected shallow/unshallow, got %s"
 msgstr "應為 shallow/unshallow,卻得到 %s"
 
-#: fetch-pack.c:451
+#: fetch-pack.c:453
 #, c-format
 msgid "got %s %d %s"
 msgstr "得到 %s %d %s"
 
-#: fetch-pack.c:468
+#: fetch-pack.c:470
 #, c-format
 msgid "invalid commit %s"
 msgstr "無效提交 %s"
 
-#: fetch-pack.c:499
+#: fetch-pack.c:501
 msgid "giving up"
 msgstr "放棄"
 
-#: fetch-pack.c:512 progress.c:339
+#: fetch-pack.c:514 progress.h:25
 msgid "done"
 msgstr "完成"
 
-#: fetch-pack.c:524
+#: fetch-pack.c:526
 #, c-format
 msgid "got %s (%d) %s"
 msgstr "得到 %s (%d) %s"
 
-#: fetch-pack.c:560
+#: fetch-pack.c:562
 #, c-format
 msgid "Marking %s as complete"
 msgstr "標記 %s 為完成"
 
-#: fetch-pack.c:775
+#: fetch-pack.c:784
 #, c-format
 msgid "already have %s (%s)"
 msgstr "已經有 %s(%s)"
 
-#: fetch-pack.c:861
+#: fetch-pack.c:870
 msgid "fetch-pack: unable to fork off sideband demultiplexer"
 msgstr "fetch-pack:無法衍生 sideband 多路輸出"
 
-#: fetch-pack.c:869
+#: fetch-pack.c:878
 msgid "protocol error: bad pack header"
 msgstr "協定錯誤:壞的包頭"
 
-#: fetch-pack.c:965
+#: fetch-pack.c:974
 #, c-format
 msgid "fetch-pack: unable to fork off %s"
 msgstr "fetch-pack:無法 fork %s 處理程序"
 
-#: fetch-pack.c:971
+#: fetch-pack.c:980
 msgid "fetch-pack: invalid index-pack output"
 msgstr "fetch-pack:無效的 index-pack 輸出"
 
-#: fetch-pack.c:988
+#: fetch-pack.c:997
 #, c-format
 msgid "%s failed"
 msgstr "%s 失敗"
 
-#: fetch-pack.c:990
+#: fetch-pack.c:999
 msgid "error in sideband demultiplexer"
 msgstr "sideband 多路輸出發生錯誤"
 
-#: fetch-pack.c:1035
+#: fetch-pack.c:1048
 #, c-format
 msgid "Server version is %.*s"
 msgstr "伺服器版本 %.*s"
 
-#: fetch-pack.c:1043 fetch-pack.c:1049 fetch-pack.c:1052 fetch-pack.c:1058
-#: fetch-pack.c:1062 fetch-pack.c:1066 fetch-pack.c:1070 fetch-pack.c:1074
-#: fetch-pack.c:1078 fetch-pack.c:1082 fetch-pack.c:1086 fetch-pack.c:1090
-#: fetch-pack.c:1096 fetch-pack.c:1102 fetch-pack.c:1107 fetch-pack.c:1112
+#: fetch-pack.c:1056 fetch-pack.c:1062 fetch-pack.c:1065 fetch-pack.c:1071
+#: fetch-pack.c:1075 fetch-pack.c:1079 fetch-pack.c:1083 fetch-pack.c:1087
+#: fetch-pack.c:1091 fetch-pack.c:1095 fetch-pack.c:1099 fetch-pack.c:1103
+#: fetch-pack.c:1109 fetch-pack.c:1115 fetch-pack.c:1120 fetch-pack.c:1125
 #, c-format
 msgid "Server supports %s"
 msgstr "伺服器支援 %s"
 
-#: fetch-pack.c:1045
+#: fetch-pack.c:1058
 msgid "Server does not support shallow clients"
 msgstr "伺服器不支援 shallow 用戶端"
 
-#: fetch-pack.c:1105
+#: fetch-pack.c:1118
 msgid "Server does not support --shallow-since"
 msgstr "伺服器不支援 --shallow-since"
 
-#: fetch-pack.c:1110
+#: fetch-pack.c:1123
 msgid "Server does not support --shallow-exclude"
 msgstr "伺服器不支援 --shallow-exclude"
 
-#: fetch-pack.c:1114
+#: fetch-pack.c:1127
 msgid "Server does not support --deepen"
 msgstr "伺服器不支援 --deepen"
 
-#: fetch-pack.c:1116
+#: fetch-pack.c:1129
 msgid "Server does not support this repository's object format"
 msgstr "伺服器不支援此版本庫的物件格式"
 
-#: fetch-pack.c:1129
+#: fetch-pack.c:1142
 msgid "no common commits"
 msgstr "沒有共同的提交"
 
-#: fetch-pack.c:1138 fetch-pack.c:1485 builtin/clone.c:1130
+#: fetch-pack.c:1151 fetch-pack.c:1506 builtin/clone.c:1166
 msgid "source repository is shallow, reject to clone."
 msgstr "來源版本庫是淺版本庫 (shallow)。拒絕複製。"
 
-#: fetch-pack.c:1144 fetch-pack.c:1681
+#: fetch-pack.c:1157 fetch-pack.c:1705
 msgid "git fetch-pack: fetch failed."
 msgstr "git fetch-pack:取得失敗。"
 
-#: fetch-pack.c:1258
+#: fetch-pack.c:1271
 #, c-format
 msgid "mismatched algorithms: client %s; server %s"
 msgstr "算法不一致:用戶端 %s;伺服器 %s"
 
-#: fetch-pack.c:1262
+#: fetch-pack.c:1275
 #, c-format
 msgid "the server does not support algorithm '%s'"
 msgstr "伺服器不支援「%s」算法"
 
-#: fetch-pack.c:1295
+#: fetch-pack.c:1308
 msgid "Server does not support shallow requests"
 msgstr "伺服器不支援 shallow 請求"
 
-#: fetch-pack.c:1302
+#: fetch-pack.c:1315
 msgid "Server supports filter"
 msgstr "伺服器支援 filter"
 
-#: fetch-pack.c:1345 fetch-pack.c:2063
+#: fetch-pack.c:1358 fetch-pack.c:2087
 msgid "unable to write request to remote"
 msgstr "無法將請求寫到遠端"
 
-#: fetch-pack.c:1363
+#: fetch-pack.c:1376
 #, c-format
 msgid "error reading section header '%s'"
 msgstr "讀取節標題 '%s' 發生錯誤"
 
-#: fetch-pack.c:1369
+#: fetch-pack.c:1382
 #, c-format
 msgid "expected '%s', received '%s'"
 msgstr "預期 '%s',得到 '%s'"
 
-#: fetch-pack.c:1403
+#: fetch-pack.c:1416
 #, c-format
 msgid "unexpected acknowledgment line: '%s'"
 msgstr "意外的確認行:'%s'"
 
-#: fetch-pack.c:1408
+#: fetch-pack.c:1421
 #, c-format
 msgid "error processing acks: %d"
 msgstr "處理 ack 發生錯誤:%d"
 
-#: fetch-pack.c:1418
-msgid "expected packfile to be sent after 'ready'"
-msgstr "預期在 'ready' 之後傳送 packfile"
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#.
+#: fetch-pack.c:1435
+#, c-format
+msgid "expected packfile to be sent after '%s'"
+msgstr "預期在 「%s」後傳送 packfile"
 
-#: fetch-pack.c:1420
-msgid "expected no other sections to be sent after no 'ready'"
-msgstr "在沒有 'ready' 不應該傳送其它小節"
+#. TRANSLATORS: The parameter will be 'ready', a protocol
+#. keyword.
+#.
+#: fetch-pack.c:1441
+#, c-format
+msgid "expected no other sections to be sent after no '%s'"
+msgstr "預期在沒有「%s」後不傳送其他區段"
 
-#: fetch-pack.c:1461
+#: fetch-pack.c:1482
 #, c-format
 msgid "error processing shallow info: %d"
 msgstr "處理淺複製訊息發生錯誤:%d"
 
-#: fetch-pack.c:1510
+#: fetch-pack.c:1531
 #, c-format
 msgid "expected wanted-ref, got '%s'"
 msgstr "預期 wanted-ref,得到 '%s'"
 
-#: fetch-pack.c:1515
+#: fetch-pack.c:1536
 #, c-format
 msgid "unexpected wanted-ref: '%s'"
 msgstr "意外的 wanted-ref:'%s'"
 
-#: fetch-pack.c:1520
+#: fetch-pack.c:1541
 #, c-format
 msgid "error processing wanted refs: %d"
 msgstr "處理要取得的引用發生錯誤:%d"
 
-#: fetch-pack.c:1550
+#: fetch-pack.c:1571
 msgid "git fetch-pack: expected response end packet"
 msgstr "git fetch-pack: 預期要有回應結束封包"
 
-#: fetch-pack.c:1959
+#: fetch-pack.c:1983
 msgid "no matching remote head"
 msgstr "沒有符合的遠端分支"
 
-#: fetch-pack.c:1982 builtin/clone.c:581
+#: fetch-pack.c:2006 builtin/clone.c:587
 msgid "remote did not send all necessary objects"
 msgstr "遠端沒有傳送所有必需的物件"
 
-#: fetch-pack.c:2085
+#: fetch-pack.c:2109
 msgid "unexpected 'ready' from remote"
 msgstr "從遠端收到非預期的 ‘ready’"
 
-#: fetch-pack.c:2108
+#: fetch-pack.c:2132
 #, c-format
 msgid "no such remote ref %s"
 msgstr "沒有這樣的遠端引用 %s"
 
-#: fetch-pack.c:2111
+#: fetch-pack.c:2135
 #, c-format
 msgid "Server does not allow request for unadvertised object %s"
 msgstr "伺服器不允許請求未公開的物件 %s"
 
-#: gpg-interface.c:329 gpg-interface.c:457 gpg-interface.c:974
-#: gpg-interface.c:990
+#: fsmonitor-ipc.c:119
+#, c-format
+msgid "fsmonitor_ipc__send_query: invalid path '%s'"
+msgstr "fsmonitor_ipc__send_query:路徑「%s」無效"
+
+#: fsmonitor-ipc.c:125
+#, c-format
+msgid "fsmonitor_ipc__send_query: unspecified error on '%s'"
+msgstr "fsmonitor_ipc__send_query:「%s」上有未指定的錯誤"
+
+#: fsmonitor-ipc.c:155
+msgid "fsmonitor--daemon is not running"
+msgstr "fsmonitor--daemon 未在運作"
+
+#: fsmonitor-ipc.c:164
+#, c-format
+msgid "could not send '%s' command to fsmonitor--daemon"
+msgstr "無法將「%s」命令傳送到 fsmonitor--daemon"
+
+#: gpg-interface.c:329 gpg-interface.c:456 gpg-interface.c:995
+#: gpg-interface.c:1011
 msgid "could not create temporary file"
 msgstr "不能建立暫存檔"
 
-#: gpg-interface.c:332 gpg-interface.c:460
+#: gpg-interface.c:332 gpg-interface.c:459
 #, c-format
 msgid "failed writing detached signature to '%s'"
 msgstr "無法將分離式簽名寫入 '%s'"
 
-#: gpg-interface.c:451
+#: gpg-interface.c:450
 msgid ""
 "gpg.ssh.allowedSignersFile needs to be configured and exist for ssh "
 "signature verification"
 msgstr "SSH 簽名驗證需要設定 gpg.ssh.allowedSignersFile,簽名檔案也要存在"
 
-#: gpg-interface.c:480
+#: gpg-interface.c:479
 msgid ""
 "ssh-keygen -Y find-principals/verify is needed for ssh signature "
 "verification (available in openssh version 8.2p1+)"
@@ -4200,61 +4322,61 @@ msgstr ""
 "SSH 簽名驗證需要 ssh-keygen -Y find-principals/verify(可以在 openssh 8.2p1+ "
 "版本使用)"
 
-#: gpg-interface.c:536
+#: gpg-interface.c:550
 #, c-format
 msgid "ssh signing revocation file configured but not found: %s"
 msgstr "有設定 SSH 簽名廢止檔案,但找不到檔案本體:%s"
 
-#: gpg-interface.c:624
+#: gpg-interface.c:638
 #, c-format
 msgid "bad/incompatible signature '%s'"
 msgstr "簽名「%s」損壞或者不相容"
 
-#: gpg-interface.c:801 gpg-interface.c:806
+#: gpg-interface.c:815 gpg-interface.c:820
 #, c-format
 msgid "failed to get the ssh fingerprint for key '%s'"
 msgstr "無法取得「%s」金鑰的 SSH 指紋"
 
-#: gpg-interface.c:829
+#: gpg-interface.c:843
 msgid ""
 "either user.signingkey or gpg.ssh.defaultKeyCommand needs to be configured"
 msgstr "需要設定 user.signingkey 或 gpg.ssh.defaultKeyCommand 任一"
 
-#: gpg-interface.c:851
+#: gpg-interface.c:865
 #, c-format
 msgid "gpg.ssh.defaultKeyCommand succeeded but returned no keys: %s %s"
 msgstr "gpg.ssh.defaultKeyCommand 執行成功,但沒回傳按鍵:%s %s"
 
-#: gpg-interface.c:857
+#: gpg-interface.c:871
 #, c-format
 msgid "gpg.ssh.defaultKeyCommand failed: %s %s"
 msgstr "gpg.ssh.defaultKeyCommand 執行失敗:%s %s"
 
-#: gpg-interface.c:945
+#: gpg-interface.c:966
 msgid "gpg failed to sign the data"
 msgstr "gpg 無法為資料簽名"
 
-#: gpg-interface.c:967
+#: gpg-interface.c:988
 msgid "user.signingkey needs to be set for ssh signing"
 msgstr "需要設定 user.signingkey 才能進行 SSH 簽名"
 
-#: gpg-interface.c:978
+#: gpg-interface.c:999
 #, c-format
 msgid "failed writing ssh signing key to '%s'"
 msgstr "無法將 SSH 簽名金鑰寫入「%s」"
 
-#: gpg-interface.c:996
+#: gpg-interface.c:1017
 #, c-format
 msgid "failed writing ssh signing key buffer to '%s'"
 msgstr "無法將 SSH 簽名金鑰緩衝區寫入「%s」"
 
-#: gpg-interface.c:1014
+#: gpg-interface.c:1035
 msgid ""
 "ssh-keygen -Y sign is needed for ssh signing (available in openssh version "
 "8.2p1+)"
 msgstr "SSH 簽名需要 ssh-keygen -Y sign(可以在 openssh 8.2p1+ 版本使用)"
 
-#: gpg-interface.c:1026
+#: gpg-interface.c:1047
 #, c-format
 msgid "failed reading ssh signing data buffer from '%s'"
 msgstr "無法從「%s」讀取 SSH 簽名資料緩衝區"
@@ -4264,7 +4386,7 @@ msgstr "無法從「%s」讀取 SSH 簽名資料緩衝區"
 msgid "ignored invalid color '%.*s' in log.graphColors"
 msgstr "已忽略 log.graphColors 中無效的 “%.*s” 色彩"
 
-#: grep.c:531
+#: grep.c:446
 msgid ""
 "given pattern contains NULL byte (via -f <file>). This is only supported "
 "with -P under PCRE v2"
@@ -4272,109 +4394,109 @@ msgstr ""
 "提供的模式包含 NULL 字元(通過 -f <檔案> 參數)。只有 PCRE v2 下的 -P 支援此"
 "功能"
 
-#: grep.c:1942
+#: grep.c:1859
 #, c-format
 msgid "'%s': unable to read %s"
 msgstr "'%s':無法讀取 %s"
 
-#: grep.c:1959 setup.c:177 builtin/clone.c:302 builtin/diff.c:90
+#: grep.c:1876 setup.c:178 builtin/clone.c:308 builtin/diff.c:90
 #: builtin/rm.c:136
 #, c-format
 msgid "failed to stat '%s'"
 msgstr "對 '%s' 呼叫 stat 失敗"
 
-#: grep.c:1970
+#: grep.c:1887
 #, c-format
 msgid "'%s': short read"
 msgstr "'%s':讀取不完整"
 
-#: help.c:24
+#: help.c:25
 msgid "start a working area (see also: git help tutorial)"
 msgstr "開始一個工作區(參見:git help tutorial)"
 
-#: help.c:25
+#: help.c:26
 msgid "work on the current change (see also: git help everyday)"
 msgstr "在目前變更上工作(參見:git help everyday)"
 
-#: help.c:26
+#: help.c:27
 msgid "examine the history and state (see also: git help revisions)"
 msgstr "檢查歷史和狀態(參見:git help revisions)"
 
-#: help.c:27
+#: help.c:28
 msgid "grow, mark and tweak your common history"
 msgstr "擴展、標記和調校您的歷史記錄"
 
-#: help.c:28
+#: help.c:29
 msgid "collaborate (see also: git help workflows)"
 msgstr "協同(參見:git help workflows)"
 
-#: help.c:32
+#: help.c:33
 msgid "Main Porcelain Commands"
 msgstr "主要的上層指令"
 
-#: help.c:33
+#: help.c:34
 msgid "Ancillary Commands / Manipulators"
 msgstr "輔助指令/動作者"
 
-#: help.c:34
+#: help.c:35
 msgid "Ancillary Commands / Interrogators"
 msgstr "輔助指令/詢問者"
 
-#: help.c:35
+#: help.c:36
 msgid "Interacting with Others"
 msgstr "與其它系統互動"
 
-#: help.c:36
+#: help.c:37
 msgid "Low-level Commands / Manipulators"
 msgstr "低級指令/動作者"
 
-#: help.c:37
+#: help.c:38
 msgid "Low-level Commands / Interrogators"
 msgstr "低級指令/詢問者"
 
-#: help.c:38
+#: help.c:39
 msgid "Low-level Commands / Syncing Repositories"
 msgstr "低級指令 / 同步版本庫"
 
-#: help.c:39
+#: help.c:40
 msgid "Low-level Commands / Internal Helpers"
 msgstr "低級指令/內部協助工具"
 
-#: help.c:313
+#: help.c:316
 #, c-format
 msgid "available git commands in '%s'"
 msgstr "在 '%s' 下可用的 git 指令"
 
-#: help.c:320
+#: help.c:323
 msgid "git commands available from elsewhere on your $PATH"
 msgstr "在 $PATH 路徑中的其他地方可用的 git 指令"
 
-#: help.c:329
+#: help.c:332
 msgid "These are common Git commands used in various situations:"
 msgstr "這些是各種場合常見的 Git 指令:"
 
-#: help.c:378 git.c:100
+#: help.c:382 git.c:100
 #, c-format
 msgid "unsupported command listing type '%s'"
 msgstr "不支援的指令列表類型 '%s'"
 
-#: help.c:418
+#: help.c:422
 msgid "The Git concept guides are:"
 msgstr "Git 概念嚮導有:"
 
-#: help.c:442
-msgid "See 'git help <command>' to read about a specific subcommand"
-msgstr "執行 'git help <command>' 來檢視特定子指令"
-
-#: help.c:447
+#: help.c:446
 msgid "External commands"
 msgstr "外部指令"
 
-#: help.c:462
+#: help.c:468
 msgid "Command aliases"
 msgstr "指令別名"
 
-#: help.c:543
+#: help.c:486
+msgid "See 'git help <command>' to read about a specific subcommand"
+msgstr "執行 'git help <command>' 來檢視特定子指令"
+
+#: help.c:563
 #, c-format
 msgid ""
 "'%s' appears to be a git command, but we were not\n"
@@ -4383,36 +4505,36 @@ msgstr ""
 "'%s' 像是一個 git 指令,但卻無法執行。\n"
 "可能是 git-%s 受損?"
 
-#: help.c:565 help.c:662
+#: help.c:585 help.c:682
 #, c-format
 msgid "git: '%s' is not a git command. See 'git --help'."
 msgstr "git:'%s' 不是一個 git 指令。參見 'git --help'。"
 
-#: help.c:613
+#: help.c:633
 msgid "Uh oh. Your system reports no Git commands at all."
 msgstr "唉呀,您的系統中未發現 Git 指令。"
 
-#: help.c:635
+#: help.c:655
 #, c-format
 msgid "WARNING: You called a Git command named '%s', which does not exist."
 msgstr "警告:您執行了一個並不存在的 Git 指令 '%s'。"
 
-#: help.c:640
+#: help.c:660
 #, c-format
 msgid "Continuing under the assumption that you meant '%s'."
 msgstr "假定你想要的是 '%s' 並繼續。"
 
-#: help.c:646
+#: help.c:666
 #, c-format
 msgid "Run '%s' instead [y/N]? "
 msgstr "改執行「%s」[y/N]? "
 
-#: help.c:654
+#: help.c:674
 #, c-format
 msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
 msgstr "假定你想要的是 '%2$s',在 %1$0.1f 秒鐘後繼續。"
 
-#: help.c:666
+#: help.c:686
 msgid ""
 "\n"
 "The most similar command is"
@@ -4423,16 +4545,16 @@ msgstr[0] ""
 "\n"
 "最類似的指令有"
 
-#: help.c:706
+#: help.c:729
 msgid "git version [<options>]"
 msgstr "git version [<選項>]"
 
-#: help.c:761
+#: help.c:784
 #, c-format
 msgid "%s: %s - %s"
 msgstr "%s:%s - %s"
 
-#: help.c:765
+#: help.c:788
 msgid ""
 "\n"
 "Did you mean this?"
@@ -4443,7 +4565,7 @@ msgstr[0] ""
 "\n"
 "您指的是這個嗎?"
 
-#: hook.c:27
+#: hook.c:28
 #, c-format
 msgid ""
 "The '%s' hook was ignored because it's not set as executable.\n"
@@ -4452,15 +4574,20 @@ msgstr ""
 "因為沒有將掛鉤 '%s' 設定為可執行,掛鉤被忽略。您可以透過\n"
 "設定 `git config advice.ignoredHook false` 來關閉這條警告。"
 
-#: ident.c:353
+#: hook.c:87
+#, c-format
+msgid "Couldn't start hook '%s'\n"
+msgstr "無法啟動「%s」掛鉤\n"
+
+#: ident.c:354
 msgid "Author identity unknown\n"
 msgstr "作者身分未知\n"
 
-#: ident.c:356
+#: ident.c:357
 msgid "Committer identity unknown\n"
 msgstr "提交者身分未知\n"
 
-#: ident.c:362
+#: ident.c:363
 msgid ""
 "\n"
 "*** Please tell me who you are.\n"
@@ -4486,71 +4613,71 @@ msgstr ""
 "若只要在這個版本庫設定身份標記,請省略 --global 參數。\n"
 "\n"
 
-#: ident.c:397
+#: ident.c:398
 msgid "no email was given and auto-detection is disabled"
 msgstr "未提供信件位址且自動偵測被停用"
 
-#: ident.c:402
+#: ident.c:403
 #, c-format
 msgid "unable to auto-detect email address (got '%s')"
 msgstr "無法自動偵測信件位址(得到 '%s')"
 
-#: ident.c:419
+#: ident.c:420
 msgid "no name was given and auto-detection is disabled"
 msgstr "未提供姓名且自動偵測被停用"
 
-#: ident.c:425
+#: ident.c:426
 #, c-format
 msgid "unable to auto-detect name (got '%s')"
 msgstr "無法自動偵測姓名(得到 '%s')"
 
-#: ident.c:433
+#: ident.c:434
 #, c-format
 msgid "empty ident name (for <%s>) not allowed"
 msgstr "不允許空的姓名(對於 <%s>)"
 
-#: ident.c:439
+#: ident.c:440
 #, c-format
 msgid "name consists only of disallowed characters: %s"
 msgstr "姓名中僅包含停用字元:%s"
 
-#: ident.c:454 builtin/commit.c:648
+#: ident.c:455 builtin/commit.c:649
 #, c-format
 msgid "invalid date format: %s"
 msgstr "無效的日期格式:%s"
 
-#: list-objects-filter-options.c:83
+#: list-objects-filter-options.c:68
 msgid "expected 'tree:<depth>'"
 msgstr "期望 'tree:<深度>'"
 
-#: list-objects-filter-options.c:98
+#: list-objects-filter-options.c:83
 msgid "sparse:path filters support has been dropped"
 msgstr "sparse:path 過濾器支援已被刪除"
 
-#: list-objects-filter-options.c:105
+#: list-objects-filter-options.c:90
 #, c-format
 msgid "'%s' for 'object:type=<type>' is not a valid object type"
 msgstr "“object:type=<type>” 的 “%s” 不是有效的物件格式"
 
-#: list-objects-filter-options.c:124
+#: list-objects-filter-options.c:109
 #, c-format
 msgid "invalid filter-spec '%s'"
 msgstr "無效的過濾器規格 '%s'"
 
-#: list-objects-filter-options.c:140
+#: list-objects-filter-options.c:125
 #, c-format
 msgid "must escape char in sub-filter-spec: '%c'"
 msgstr "必須對 sub-filter-spec 中的字元進行轉義:'%c'"
 
-#: list-objects-filter-options.c:182
+#: list-objects-filter-options.c:167
 msgid "expected something after combine:"
 msgstr "期望在組合後有一些東西:"
 
-#: list-objects-filter-options.c:264
+#: list-objects-filter-options.c:249
 msgid "multiple filter-specs cannot be combined"
 msgstr "不能混用多種過濾規格"
 
-#: list-objects-filter-options.c:376
+#: list-objects-filter-options.c:365
 msgid "unable to upgrade repository format to support partial clone"
 msgstr "無法升級版本庫格式,以致不支援部分複製"
 
@@ -4564,17 +4691,17 @@ msgstr "不能存取 '%s' 中的稀疏資料物件"
 msgid "unable to parse sparse filter data in %s"
 msgstr "無法解析 %s 中的稀疏過濾器資料"
 
-#: list-objects.c:127
+#: list-objects.c:144
 #, c-format
 msgid "entry '%s' in tree %s has tree mode, but is not a tree"
 msgstr "樹 %2$s 中的條目 '%1$s' 具有樹的屬性,但不是一個樹狀物件"
 
-#: list-objects.c:140
+#: list-objects.c:157
 #, c-format
 msgid "entry '%s' in tree %s has blob mode, but is not a blob"
 msgstr "樹 %2$s 中的條目 '%1$s' 具有資料物件的屬性,但不是一個資料物件"
 
-#: list-objects.c:398
+#: list-objects.c:415
 #, c-format
 msgid "unable to load root tree for commit %s"
 msgstr "無法為提交 %s 載入根樹"
@@ -4603,17 +4730,12 @@ msgstr ""
 msgid "Unable to create '%s.lock': %s"
 msgstr "不能建立 '%s.lock':%s"
 
-#: ls-refs.c:37
-#, c-format
-msgid "invalid value '%s' for lsrefs.unborn"
-msgstr "lsrefs.unborn 的值「%s」無效"
-
-#: ls-refs.c:174
+#: ls-refs.c:175
 #, c-format
 msgid "unexpected line: '%s'"
 msgstr "遇到非預期橫列:「%s」"
 
-#: ls-refs.c:178
+#: ls-refs.c:179
 msgid "expected flush after ls-refs arguments"
 msgstr "在 ls-refs 引數之後應該有一個 flush 包"
 
@@ -4621,37 +4743,37 @@ msgstr "在 ls-refs 引數之後應該有一個 flush 包"
 msgid "quoted CRLF detected"
 msgstr "偵測到由可列印字元 (quoted) 所組成的 CRLF"
 
-#: mailinfo.c:1254 builtin/am.c:184 builtin/mailinfo.c:46
+#: mailinfo.c:1254 builtin/am.c:185 builtin/mailinfo.c:46
 #, c-format
 msgid "bad action '%s' for '%s'"
 msgstr "「%s」動作對「%s」無效"
 
-#: merge-ort.c:1584 merge-recursive.c:1211
+#: merge-ort.c:1630 merge-recursive.c:1214
 #, c-format
 msgid "Failed to merge submodule %s (not checked out)"
 msgstr "無法合併子模組 %s (沒有簽出)"
 
-#: merge-ort.c:1593 merge-recursive.c:1218
+#: merge-ort.c:1639 merge-recursive.c:1221
 #, c-format
 msgid "Failed to merge submodule %s (commits not present)"
 msgstr "無法合併子模組 %s(提交不存在)"
 
-#: merge-ort.c:1602 merge-recursive.c:1225
+#: merge-ort.c:1648 merge-recursive.c:1228
 #, c-format
 msgid "Failed to merge submodule %s (commits don't follow merge-base)"
 msgstr "無法合併子模組 %s (提交未跟隨合併基礎)"
 
-#: merge-ort.c:1612 merge-ort.c:1620
+#: merge-ort.c:1658 merge-ort.c:1666
 #, c-format
 msgid "Note: Fast-forwarding submodule %s to %s"
 msgstr "注意:正在將 %s 子模組快轉到 %s"
 
-#: merge-ort.c:1642
+#: merge-ort.c:1688
 #, c-format
 msgid "Failed to merge submodule %s"
 msgstr "無法合併 %s 子模組"
 
-#: merge-ort.c:1649
+#: merge-ort.c:1695
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but a possible merge resolution exists:\n"
@@ -4660,7 +4782,7 @@ msgstr ""
 "無法合併 %s 子模組,但有找到一個可行的合併方案:\n"
 "%s\n"
 
-#: merge-ort.c:1653 merge-recursive.c:1281
+#: merge-ort.c:1699 merge-recursive.c:1284
 #, c-format
 msgid ""
 "If this is correct simply add it to the index for example\n"
@@ -4676,7 +4798,7 @@ msgstr ""
 "\n"
 "接受本建議。\n"
 
-#: merge-ort.c:1666
+#: merge-ort.c:1712
 #, c-format
 msgid ""
 "Failed to merge submodule %s, but multiple possible merges exist:\n"
@@ -4685,21 +4807,21 @@ msgstr ""
 "無法合併 %s 子模組,但有找到幾個可行的合併方案:\n"
 "%s"
 
-#: merge-ort.c:1887 merge-recursive.c:1372
+#: merge-ort.c:1937 merge-recursive.c:1375
 msgid "Failed to execute internal merge"
 msgstr "無法執行內部合併"
 
-#: merge-ort.c:1892 merge-recursive.c:1377
+#: merge-ort.c:1942 merge-recursive.c:1380
 #, c-format
 msgid "Unable to add %s to database"
 msgstr "不能新增 %s 至物件庫"
 
-#: merge-ort.c:1899 merge-recursive.c:1410
+#: merge-ort.c:1949 merge-recursive.c:1413
 #, c-format
 msgid "Auto-merging %s"
 msgstr "自動合併 %s"
 
-#: merge-ort.c:2038 merge-recursive.c:2132
+#: merge-ort.c:2088 merge-recursive.c:2135
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -4708,7 +4830,7 @@ msgstr ""
 "衝突(隱式目錄重新命名):處於隱式目錄重新命名的現存檔案/目錄 %s,將以下路徑"
 "放在:%s。"
 
-#: merge-ort.c:2048 merge-recursive.c:2142
+#: merge-ort.c:2098 merge-recursive.c:2145
 #, c-format
 msgid ""
 "CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -4717,7 +4839,7 @@ msgstr ""
 "衝突(隱式目錄重新命名):無法映射一個以上路徑到 %s,隱式目錄重新命名嘗試將這"
 "些路徑放置於此:%s"
 
-#: merge-ort.c:2106
+#: merge-ort.c:2156
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to rename %s to; it was "
@@ -4727,14 +4849,14 @@ msgstr ""
 "衝突(分割的目錄重新命名):未知 %s 重新命名的位置。它被重新命名為多個其他目"
 "錄,但沒有目的地取得過半檔案。"
 
-#: merge-ort.c:2260 merge-recursive.c:2478
+#: merge-ort.c:2310 merge-recursive.c:2481
 #, c-format
 msgid ""
 "WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
 "renamed."
 msgstr "警告:避免套用 %s -> %s 的重新命名到 %s,因為 %s 本身已被重新命名。"
 
-#: merge-ort.c:2400 merge-recursive.c:3261
+#: merge-ort.c:2450 merge-recursive.c:3264
 #, c-format
 msgid ""
 "Path updated: %s added in %s inside a directory that was renamed in %s; "
@@ -4742,7 +4864,7 @@ msgid ""
 msgstr ""
 "路徑已更新:%s 新增到 %s,位於一個被重新命名到 %s 的目錄中,將其移動到 %s。"
 
-#: merge-ort.c:2407 merge-recursive.c:3268
+#: merge-ort.c:2457 merge-recursive.c:3271
 #, c-format
 msgid ""
 "Path updated: %s renamed to %s in %s, inside a directory that was renamed in "
@@ -4751,7 +4873,7 @@ msgstr ""
 "路徑已更新:%1$s 重新命名為 %3$s 中的 %2$s,而該目錄被重新命名到 %4$s 中,將"
 "其移動到 %5$s。"
 
-#: merge-ort.c:2420 merge-recursive.c:3264
+#: merge-ort.c:2470 merge-recursive.c:3267
 #, c-format
 msgid ""
 "CONFLICT (file location): %s added in %s inside a directory that was renamed "
@@ -4760,7 +4882,7 @@ msgstr ""
 "衝突(檔案位置):%s 新增到 %s,位於一個被重新命名為 %s 的目錄中,建議將其移"
 "動到 %s。"
 
-#: merge-ort.c:2428 merge-recursive.c:3271
+#: merge-ort.c:2478 merge-recursive.c:3274
 #, c-format
 msgid ""
 "CONFLICT (file location): %s renamed to %s in %s, inside a directory that "
@@ -4769,14 +4891,14 @@ msgstr ""
 "衝突(檔案位置):%1$s 重新命名為 %3$s 中的 %2$s,而該目錄被重新命名到 %4$s "
 "中,建議將其移動到 %5$s。"
 
-#: merge-ort.c:2584
+#: merge-ort.c:2634
 #, c-format
 msgid "CONFLICT (rename/rename): %s renamed to %s in %s and to %s in %s."
 msgstr ""
 "衝突(重新命名/重新命名):%1$s 已重新命名為 %3$s 中的 %2$s 和 %5$s 中的 "
 "%4$s。"
 
-#: merge-ort.c:2679
+#: merge-ort.c:2729
 #, c-format
 msgid ""
 "CONFLICT (rename involved in collision): rename of %s -> %s has content "
@@ -4786,30 +4908,30 @@ msgstr ""
 "衝突(重新命名陷入相撞):%s -> %s 這個重新命名有內容衝突並與其他路徑相撞,可"
 "能會因此出現巢狀衝突標記。"
 
-#: merge-ort.c:2698 merge-ort.c:2722
+#: merge-ort.c:2748 merge-ort.c:2772
 #, c-format
 msgid "CONFLICT (rename/delete): %s renamed to %s in %s, but deleted in %s."
 msgstr ""
 "衝突(重新命名/刪除):%1$s 已重新命名為 %3$s 中的 %2$s 卻在 %4$s 中被刪除。"
 
-#: merge-ort.c:3212 merge-recursive.c:3022
+#: merge-ort.c:3261 merge-recursive.c:3025
 #, c-format
 msgid "cannot read object %s"
 msgstr "不能讀取物件 %s"
 
-#: merge-ort.c:3215 merge-recursive.c:3025
+#: merge-ort.c:3264 merge-recursive.c:3028
 #, c-format
 msgid "object %s is not a blob"
 msgstr "物件 %s 不是一個資料物件"
 
-#: merge-ort.c:3644
+#: merge-ort.c:3693
 #, c-format
 msgid ""
 "CONFLICT (file/directory): directory in the way of %s from %s; moving it to "
 "%s instead."
 msgstr "衝突(檔案/目錄):目錄佔住 %2$s 中 %1$s 的位置。改移動到 %3$s。"
 
-#: merge-ort.c:3721
+#: merge-ort.c:3770
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed both "
@@ -4818,7 +4940,7 @@ msgstr ""
 "衝突(類型有異):兩方的 %s 類型皆不同。已經重新命名這兩個來源,這樣就可以分"
 "別記錄這兩方檔案。"
 
-#: merge-ort.c:3728
+#: merge-ort.c:3777
 #, c-format
 msgid ""
 "CONFLICT (distinct types): %s had different types on each side; renamed one "
@@ -4827,24 +4949,24 @@ msgstr ""
 "衝突(類型有異):兩方的 %s 類型皆不同。已經重新命名其中一個來源,這樣就可以"
 "分別記錄這兩方檔案。"
 
-#: merge-ort.c:3819 merge-recursive.c:3101
+#: merge-ort.c:3866 merge-recursive.c:3104
 msgid "content"
 msgstr "內容"
 
-#: merge-ort.c:3821 merge-recursive.c:3105
+#: merge-ort.c:3868 merge-recursive.c:3108
 msgid "add/add"
 msgstr "新增/新增"
 
-#: merge-ort.c:3823 merge-recursive.c:3150
+#: merge-ort.c:3870 merge-recursive.c:3153
 msgid "submodule"
 msgstr "子模組"
 
-#: merge-ort.c:3825 merge-recursive.c:3151
+#: merge-ort.c:3872 merge-recursive.c:3154
 #, c-format
 msgid "CONFLICT (%s): Merge conflict in %s"
 msgstr "衝突(%s):合併衝突於 %s"
 
-#: merge-ort.c:3869
+#: merge-ort.c:3916
 #, c-format
 msgid ""
 "CONFLICT (modify/delete): %s deleted in %s and modified in %s.  Version %s "
@@ -4853,7 +4975,7 @@ msgstr ""
 "衝突(修改/刪除):%1$s 已在 %2$s 刪除和在 %3$s 修改。%5$s 的 %4$s 版本留在樹"
 "上。"
 
-#: merge-ort.c:4165
+#: merge-ort.c:4212
 #, c-format
 msgid ""
 "Note: %s not up to date and in way of checking out conflicted version; old "
@@ -4863,12 +4985,12 @@ msgstr "註:%s 不是最新且干擾到簽出衝突版本。已將舊拷貝重
 #. TRANSLATORS: The %s arguments are: 1) tree hash of a merge
 #. base, and 2-3) the trees for the two trees we're merging.
 #.
-#: merge-ort.c:4534
+#: merge-ort.c:4586
 #, c-format
 msgid "collecting merge info failed for trees %s, %s, %s"
 msgstr "%s, %s, %s 樹的合併資訊收集失敗"
 
-#: merge-ort-wrappers.c:13 merge-recursive.c:3716
+#: merge-ort-wrappers.c:13 merge-recursive.c:3723
 #, c-format
 msgid ""
 "Your local changes to the following files would be overwritten by merge:\n"
@@ -4877,7 +4999,7 @@ msgstr ""
 "您對下列檔案的本機修改將被合併動作覆蓋:\n"
 "  %s"
 
-#: merge-ort-wrappers.c:33 merge-recursive.c:3482 builtin/merge.c:405
+#: merge-ort-wrappers.c:33 merge-recursive.c:3485 builtin/merge.c:405
 msgid "Already up to date."
 msgstr "已經是最新的。"
 
@@ -4914,7 +5036,7 @@ msgstr ":可能是一個目錄/檔案衝突?"
 msgid "refusing to lose untracked file at '%s'"
 msgstr "拒絕捨棄 '%s' 中的未追蹤檔案"
 
-#: merge-recursive.c:956 builtin/cat-file.c:41
+#: merge-recursive.c:956 builtin/cat-file.c:47
 #, c-format
 msgid "cannot read object %s '%s'"
 msgstr "不能讀取物件 %s '%s'"
@@ -4939,41 +5061,41 @@ msgstr "建立符號連結 '%s' 失敗:%s"
 msgid "do not know what to do with %06o %s '%s'"
 msgstr "不知道如何處理 %06o %s '%s'"
 
-#: merge-recursive.c:1233 merge-recursive.c:1246
+#: merge-recursive.c:1236 merge-recursive.c:1249
 #, c-format
 msgid "Fast-forwarding submodule %s to the following commit:"
 msgstr "子模組 %s 快轉到如下提交:"
 
-#: merge-recursive.c:1236 merge-recursive.c:1249
+#: merge-recursive.c:1239 merge-recursive.c:1252
 #, c-format
 msgid "Fast-forwarding submodule %s"
 msgstr "快轉子模組 %s"
 
-#: merge-recursive.c:1273
+#: merge-recursive.c:1276
 #, c-format
 msgid "Failed to merge submodule %s (merge following commits not found)"
 msgstr "無法合併子模組 %s (沒發現合併跟隨的提交)"
 
-#: merge-recursive.c:1277
+#: merge-recursive.c:1280
 #, c-format
 msgid "Failed to merge submodule %s (not fast-forward)"
 msgstr "無法合併子模組 %s(非快轉)"
 
-#: merge-recursive.c:1278
+#: merge-recursive.c:1281
 msgid "Found a possible merge resolution for the submodule:\n"
 msgstr "找到子模組的一個可能的合併方案:\n"
 
-#: merge-recursive.c:1290
+#: merge-recursive.c:1293
 #, c-format
 msgid "Failed to merge submodule %s (multiple merges found)"
 msgstr "無法合併子模組 %s (發現多個合併)"
 
-#: merge-recursive.c:1434
+#: merge-recursive.c:1437
 #, c-format
 msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
 msgstr "錯誤:拒絕遺失未追蹤檔案 '%s',而是寫入 %s。"
 
-#: merge-recursive.c:1506
+#: merge-recursive.c:1509
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -4982,7 +5104,7 @@ msgstr ""
 "衝突(%1$s/刪除):%2$s 在 %3$s 中被刪除,在 %5$s 中被 %4$s。%7$s 的 %6$s 版"
 "本被保留。"
 
-#: merge-recursive.c:1511
+#: merge-recursive.c:1514
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -4991,7 +5113,7 @@ msgstr ""
 "衝突(%1$s/刪除):%2$s 在 %3$s 中被刪除,在 %6$s 中的 %5$s 被 %4$s。%8$s 的 "
 "%7$s 版本被保留。"
 
-#: merge-recursive.c:1518
+#: merge-recursive.c:1521
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -5000,7 +5122,7 @@ msgstr ""
 "衝突(%1$s/刪除):%2$s 在 %3$s 中被刪除,在 %5$s 中被 %4$s。%7$s 的 %6$s 版"
 "本保留在 %8$s 中。"
 
-#: merge-recursive.c:1523
+#: merge-recursive.c:1526
 #, c-format
 msgid ""
 "CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -5009,41 +5131,41 @@ msgstr ""
 "衝突(%1$s/刪除):%2$s 在 %3$s 中被刪除,在 %6$s 中的 %5$s 被 %4$s。%8$s 的 "
 "%7$s 版本保留在 %9$s 中。"
 
-#: merge-recursive.c:1558
+#: merge-recursive.c:1561
 msgid "rename"
 msgstr "重新命名"
 
-#: merge-recursive.c:1558
+#: merge-recursive.c:1561
 msgid "renamed"
 msgstr "重新命名"
 
-#: merge-recursive.c:1609 merge-recursive.c:2515 merge-recursive.c:3178
+#: merge-recursive.c:1612 merge-recursive.c:2518 merge-recursive.c:3181
 #, c-format
 msgid "Refusing to lose dirty file at %s"
 msgstr "拒絕遺失髒檔案 '%s'"
 
-#: merge-recursive.c:1619
+#: merge-recursive.c:1622
 #, c-format
 msgid "Refusing to lose untracked file at %s, even though it's in the way."
 msgstr "拒絕在 '%s' 處失去未追蹤檔案,即使它存在於重新命名中。"
 
-#: merge-recursive.c:1677
+#: merge-recursive.c:1680
 #, c-format
 msgid "CONFLICT (rename/add): Rename %s->%s in %s.  Added %s in %s"
 msgstr ""
 "衝突(重新命名/新增):在 %3$s 中重新命名 %1$s->%2$s。在 %5$s 中新增 %4$s"
 
-#: merge-recursive.c:1708
+#: merge-recursive.c:1711
 #, c-format
 msgid "%s is a directory in %s adding as %s instead"
 msgstr "%s 是 %s 中的一個目錄而已 %s 為名被新增"
 
-#: merge-recursive.c:1713
+#: merge-recursive.c:1716
 #, c-format
 msgid "Refusing to lose untracked file at %s; adding as %s instead"
 msgstr "拒絕遺失未追蹤檔案 '%s',而是新增為 %s"
 
-#: merge-recursive.c:1740
+#: merge-recursive.c:1743
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -5052,18 +5174,18 @@ msgstr ""
 "衝突(重新命名/重新命名):在分支 \"%3$s\" 中重新命名 \"%1$s\"->\"%2$s\",在"
 "分支 \"%6$s\" 中重新命名 \"%4$s\"->\"%5$s\"%7$s"
 
-#: merge-recursive.c:1745
+#: merge-recursive.c:1748
 msgid " (left unresolved)"
 msgstr " (留下未解決)"
 
-#: merge-recursive.c:1837
+#: merge-recursive.c:1840
 #, c-format
 msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
 msgstr ""
 "衝突(重新命名/重新命名):在 %3$s 中重新命名 %1$s->%2$s,在 %6$s 中重新命名 "
 "%4$s->%5$s"
 
-#: merge-recursive.c:2100
+#: merge-recursive.c:2103
 #, c-format
 msgid ""
 "CONFLICT (directory rename split): Unclear where to place %s because "
@@ -5073,7 +5195,7 @@ msgstr ""
 "衝突(分割的目錄重新命名):不清楚 %s 應該放在哪裡,因為目錄 %s 被重新命名到"
 "多個其它目錄,沒有目錄包含大部分檔案。"
 
-#: merge-recursive.c:2234
+#: merge-recursive.c:2237
 #, c-format
 msgid ""
 "CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -5082,77 +5204,77 @@ msgstr ""
 "衝突(重新命名/重新命名):在 %3$s 中重新命名目錄 %1$s->%2$s,在 %6$s 中重新"
 "命名目錄 %4$s->%5$s"
 
-#: merge-recursive.c:3089
+#: merge-recursive.c:3092
 msgid "modify"
 msgstr "修改"
 
-#: merge-recursive.c:3089
+#: merge-recursive.c:3092
 msgid "modified"
 msgstr "修改"
 
-#: merge-recursive.c:3128
+#: merge-recursive.c:3131
 #, c-format
 msgid "Skipped %s (merged same as existing)"
 msgstr "略過 %s(已經做過相同合併)"
 
-#: merge-recursive.c:3181
+#: merge-recursive.c:3184
 #, c-format
 msgid "Adding as %s instead"
 msgstr "而是以 %s 為名新增"
 
-#: merge-recursive.c:3385
+#: merge-recursive.c:3388
 #, c-format
 msgid "Removing %s"
 msgstr "刪除 %s"
 
-#: merge-recursive.c:3408
+#: merge-recursive.c:3411
 msgid "file/directory"
 msgstr "檔案/目錄"
 
-#: merge-recursive.c:3413
+#: merge-recursive.c:3416
 msgid "directory/file"
 msgstr "目錄/檔案"
 
-#: merge-recursive.c:3420
+#: merge-recursive.c:3423
 #, c-format
 msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
 msgstr "衝突(%1$s):在 %3$s 中有一個名為 %2$s 的目錄。以 %5$s 為名新增 %4$s"
 
-#: merge-recursive.c:3429
+#: merge-recursive.c:3432
 #, c-format
 msgid "Adding %s"
 msgstr "新增 %s"
 
-#: merge-recursive.c:3438
+#: merge-recursive.c:3441
 #, c-format
 msgid "CONFLICT (add/add): Merge conflict in %s"
 msgstr "衝突(add/add):合併衝突於 %s"
 
-#: merge-recursive.c:3491
+#: merge-recursive.c:3494
 #, c-format
 msgid "merging of trees %s and %s failed"
 msgstr "無法合併樹 %s 和 %s"
 
-#: merge-recursive.c:3585
+#: merge-recursive.c:3588
 msgid "Merging:"
 msgstr "合併:"
 
-#: merge-recursive.c:3598
+#: merge-recursive.c:3601
 #, c-format
 msgid "found %u common ancestor:"
 msgid_plural "found %u common ancestors:"
 msgstr[0] "發現 %u 個共同祖先:"
 
-#: merge-recursive.c:3648
+#: merge-recursive.c:3651
 msgid "merge returned no commit"
 msgstr "合併未返回提交"
 
-#: merge-recursive.c:3816
+#: merge-recursive.c:3823
 #, c-format
 msgid "Could not parse object '%s'"
 msgstr "不能解析物件 '%s'"
 
-#: merge-recursive.c:3834 builtin/merge.c:720 builtin/merge.c:906
+#: merge-recursive.c:3841 builtin/merge.c:720 builtin/merge.c:912
 #: builtin/stash.c:489
 msgid "Unable to write index."
 msgstr "不能寫入索引。"
@@ -5161,221 +5283,225 @@ msgstr "不能寫入索引。"
 msgid "failed to read the cache"
 msgstr "讀取快取失敗"
 
-#: merge.c:102 rerere.c:704 builtin/am.c:1988 builtin/am.c:2022
-#: builtin/checkout.c:598 builtin/checkout.c:853 builtin/clone.c:706
+#: merge.c:102 rerere.c:705 builtin/am.c:1989 builtin/am.c:2023
+#: builtin/checkout.c:603 builtin/checkout.c:865 builtin/clone.c:714
 #: builtin/stash.c:269
 msgid "unable to write new index file"
 msgstr "無法寫新的索引檔案"
 
-#: midx.c:78
+#: midx.c:79
 msgid "multi-pack-index OID fanout is of the wrong size"
 msgstr "多包索引的物件 ID fanout 大小錯誤"
 
-#: midx.c:111
+#: midx.c:112
 #, c-format
 msgid "multi-pack-index file %s is too small"
 msgstr "多包索引檔案 %s 太小"
 
-#: midx.c:127
+#: midx.c:128
 #, c-format
 msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
 msgstr "多包索引簽名 0x%08x 和簽名 0x%08x 不符合"
 
-#: midx.c:132
+#: midx.c:133
 #, c-format
 msgid "multi-pack-index version %d not recognized"
 msgstr "multi-pack-index 版本 %d 不能被識別"
 
-#: midx.c:137
+#: midx.c:138
 #, c-format
 msgid "multi-pack-index hash version %u does not match version %u"
 msgstr "multi-pack-index 雜湊版本 %u 與版本 %u 不符合"
 
-#: midx.c:154
+#: midx.c:155
 msgid "multi-pack-index missing required pack-name chunk"
 msgstr "多包索引缺少必需的包名區塊"
 
-#: midx.c:156
+#: midx.c:157
 msgid "multi-pack-index missing required OID fanout chunk"
 msgstr "多包索引缺少必需的物件 ID fanout 區塊"
 
-#: midx.c:158
+#: midx.c:159
 msgid "multi-pack-index missing required OID lookup chunk"
 msgstr "多包索引缺少必需的物件 ID 查詢區塊"
 
-#: midx.c:160
+#: midx.c:161
 msgid "multi-pack-index missing required object offsets chunk"
 msgstr "多包索引缺少必需的物件位移區塊"
 
-#: midx.c:176
+#: midx.c:180
 #, c-format
 msgid "multi-pack-index pack names out of order: '%s' before '%s'"
 msgstr "多包索引包名無序:'%s' 在 '%s' 之前"
 
-#: midx.c:224
+#: midx.c:228
 #, c-format
 msgid "bad pack-int-id: %u (%u total packs)"
 msgstr "錯的 pack-int-id:%u(共有 %u 個包)"
 
-#: midx.c:274
+#: midx.c:278
 msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
 msgstr "多包索引儲存一個64位位移,但是 off_t 太小"
 
-#: midx.c:505
+#: midx.c:509
 #, c-format
 msgid "failed to add packfile '%s'"
 msgstr "新增 packfile '%s' 失敗"
 
-#: midx.c:511
+#: midx.c:515
 #, c-format
 msgid "failed to open pack-index '%s'"
 msgstr "開啟包索引 '%s' 失敗"
 
-#: midx.c:579
+#: midx.c:583
 #, c-format
 msgid "failed to locate object %d in packfile"
 msgstr "在 packfile 中定位物件 %d 失敗"
 
-#: midx.c:895
+#: midx.c:911
 msgid "cannot store reverse index file"
 msgstr "無法儲存倒排索引檔案"
 
-#: midx.c:993
+#: midx.c:1009
 #, c-format
 msgid "could not parse line: %s"
 msgstr "無法解析橫列:%s"
 
-#: midx.c:995
+#: midx.c:1011
 #, c-format
 msgid "malformed line: %s"
 msgstr "橫列格式錯誤:%s"
 
-#: midx.c:1162
+#: midx.c:1181
 msgid "ignoring existing multi-pack-index; checksum mismatch"
 msgstr "忽略現有的多包索引:總和檢查碼不符"
 
-#: midx.c:1187
+#: midx.c:1206
 msgid "could not load pack"
 msgstr "無法載入包"
 
-#: midx.c:1193
+#: midx.c:1212
 #, c-format
 msgid "could not open index for %s"
 msgstr "無法開啟 %s 的索引"
 
-#: midx.c:1204
+#: midx.c:1223
 msgid "Adding packfiles to multi-pack-index"
 msgstr "正在新增 packfile 至多包索引"
 
-#: midx.c:1247
+#: midx.c:1266
 #, c-format
 msgid "unknown preferred pack: '%s'"
 msgstr "未知偏好包:「%s」"
 
-#: midx.c:1292
+#: midx.c:1311
 #, c-format
 msgid "cannot select preferred pack %s with no objects"
 msgstr "無法選取偏好,沒有物件的 %s 包"
 
-#: midx.c:1324
+#: midx.c:1343
 #, c-format
 msgid "did not see pack-file %s to drop"
 msgstr "沒有看到要捨棄的包檔案 %s"
 
-#: midx.c:1370
+#: midx.c:1389
 #, c-format
 msgid "preferred pack '%s' is expired"
 msgstr "偏好包「%s」已經過期"
 
-#: midx.c:1383
+#: midx.c:1402
 msgid "no pack files to index."
 msgstr "沒有要索引的 pack 檔案。"
 
-#: midx.c:1420
+#: midx.c:1409
+msgid "refusing to write multi-pack .bitmap without any objects"
+msgstr "拒絕寫入無任何物件的多包 .bitmap"
+
+#: midx.c:1451
 msgid "could not write multi-pack bitmap"
 msgstr "無法寫入多包位圖"
 
-#: midx.c:1430
+#: midx.c:1461
 msgid "could not write multi-pack-index"
 msgstr "無法寫入多包索引"
 
-#: midx.c:1489 builtin/clean.c:37
+#: midx.c:1520 builtin/clean.c:37
 #, c-format
 msgid "failed to remove %s"
 msgstr "刪除 %s 失敗"
 
-#: midx.c:1522
+#: midx.c:1553
 #, c-format
 msgid "failed to clear multi-pack-index at %s"
 msgstr "清理位於 %s 的多包索引失敗"
 
-#: midx.c:1585
+#: midx.c:1616
 msgid "multi-pack-index file exists, but failed to parse"
 msgstr "有 multi-pack-index 檔案,但無法解析"
 
-#: midx.c:1593
+#: midx.c:1624
 msgid "incorrect checksum"
 msgstr "總和檢查碼不正確"
 
-#: midx.c:1596
+#: midx.c:1627
 msgid "Looking for referenced packfiles"
 msgstr "正在尋找引用的 packfile"
 
-#: midx.c:1611
+#: midx.c:1642
 #, c-format
 msgid ""
 "oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 msgstr "物件 ID 扇出無序:fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
 
-#: midx.c:1616
+#: midx.c:1647
 msgid "the midx contains no oid"
 msgstr "midx 沒有 oid"
 
-#: midx.c:1625
+#: midx.c:1656
 msgid "Verifying OID order in multi-pack-index"
 msgstr "正在驗證多包索引中的物件 ID 順序"
 
-#: midx.c:1634
+#: midx.c:1665
 #, c-format
 msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
 msgstr "物件 ID 查詢無序:oid[%d] = %s >= %s = oid[%d]"
 
-#: midx.c:1654
+#: midx.c:1685
 msgid "Sorting objects by packfile"
 msgstr "透過 packfile 為物件排序"
 
-#: midx.c:1661
+#: midx.c:1692
 msgid "Verifying object offsets"
 msgstr "正在驗證物件位移"
 
-#: midx.c:1677
+#: midx.c:1708
 #, c-format
 msgid "failed to load pack entry for oid[%d] = %s"
 msgstr "為 oid[%d] = %s 載入包條目失敗"
 
-#: midx.c:1683
+#: midx.c:1714
 #, c-format
 msgid "failed to load pack-index for packfile %s"
 msgstr "為 packfile %s 載入包索引失敗"
 
-#: midx.c:1692
+#: midx.c:1723
 #, c-format
 msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
 msgstr "oid[%d] = %s 錯誤的物件位移:%<PRIx64> != %<PRIx64>"
 
-#: midx.c:1719
+#: midx.c:1750
 msgid "Counting referenced objects"
 msgstr "正在計算引用物件"
 
-#: midx.c:1729
+#: midx.c:1760
 msgid "Finding and deleting unreferenced packfiles"
 msgstr "正在尋找並刪除沒有引用的 packfile"
 
-#: midx.c:1921
+#: midx.c:1952
 msgid "could not start pack-objects"
 msgstr "不能開始 pack-objects"
 
-#: midx.c:1941
+#: midx.c:1972
 msgid "could not finish pack-objects"
 msgstr "不能結束 pack-objects"
 
@@ -5394,7 +5520,7 @@ msgstr "不能建立 lazy_name 執行緒:%s"
 msgid "unable to join lazy_name thread: %s"
 msgstr "不能加入 lazy_name 執行緒:%s"
 
-#: notes-merge.c:277
+#: notes-merge.c:276
 #, c-format
 msgid ""
 "You have not concluded your previous notes merge (%s exists).\n"
@@ -5405,7 +5531,7 @@ msgstr ""
 "在開始一個新的備註合併之前,請使用 'git notes merge --commit' 或者 'git "
 "notes merge --abort' 來提交/終止前一次合併。"
 
-#: notes-merge.c:284
+#: notes-merge.c:283
 #, c-format
 msgid "You have not concluded your notes merge (%s exists)."
 msgstr "您尚未結束備註合併(存在 %s)。"
@@ -5433,271 +5559,342 @@ msgstr "拒絕向 %s(在 refs/notes/ 之外)寫入註解"
 msgid "Bad %s value: '%s'"
 msgstr "壞的 %s 值:'%s'"
 
-#: object-file.c:456
+#: object-file.c:457
 #, c-format
 msgid "object directory %s does not exist; check .git/objects/info/alternates"
 msgstr "物件目錄 %s 不存在,檢查 .git/objects/info/alternates"
 
-#: object-file.c:514
+#: object-file.c:515
 #, c-format
 msgid "unable to normalize alternate object path: %s"
 msgstr "無法規範化備用物件路徑:%s"
 
-#: object-file.c:588
+#: object-file.c:589
 #, c-format
 msgid "%s: ignoring alternate object stores, nesting too deep"
 msgstr "%s:忽略備用物件庫,嵌套太深"
 
-#: object-file.c:595
+#: object-file.c:596
 #, c-format
 msgid "unable to normalize object directory: %s"
 msgstr "無法規範化物件目錄: %s"
 
-#: object-file.c:638
+#: object-file.c:639
 msgid "unable to fdopen alternates lockfile"
 msgstr "無法 fdopen 取代鎖檔案"
 
-#: object-file.c:656
+#: object-file.c:657
 msgid "unable to read alternates file"
 msgstr "無法讀取替代檔案"
 
-#: object-file.c:663
+#: object-file.c:664
 msgid "unable to move new alternates file into place"
 msgstr "無法將新的替代檔案移動到位"
 
-#: object-file.c:741
+#: object-file.c:742
 #, c-format
 msgid "path '%s' does not exist"
 msgstr "路徑 '%s' 不存在"
 
-#: object-file.c:762
+#: object-file.c:763
 #, c-format
 msgid "reference repository '%s' as a linked checkout is not supported yet."
 msgstr "尚不支援將引用版本庫 '%s' 作為一個連結簽出。"
 
-#: object-file.c:768
+#: object-file.c:769
 #, c-format
 msgid "reference repository '%s' is not a local repository."
 msgstr "引用版本庫 '%s' 不是一個本機版本庫。"
 
-#: object-file.c:774
+#: object-file.c:775
 #, c-format
 msgid "reference repository '%s' is shallow"
 msgstr "引用版本庫 '%s' 是一個淺複製"
 
-#: object-file.c:782
+#: object-file.c:783
 #, c-format
 msgid "reference repository '%s' is grafted"
 msgstr "引用版本庫 '%s' 已被移植"
 
-#: object-file.c:813
+#: object-file.c:814
 #, c-format
 msgid "could not find object directory matching %s"
 msgstr "找不到符合 %s 的物件目錄"
 
-#: object-file.c:863
+#: object-file.c:864
 #, c-format
 msgid "invalid line while parsing alternate refs: %s"
 msgstr "解析備用引用時無效的行:%s"
 
-#: object-file.c:1013
+#: object-file.c:1014
 #, c-format
 msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
 msgstr "嘗試 mmap %<PRIuMAX>,超過了最大值 %<PRIuMAX>"
 
-#: object-file.c:1048
+#: object-file.c:1049
 #, c-format
 msgid "mmap failed%s"
 msgstr "mmap 失敗%s"
 
-#: object-file.c:1214
+#: object-file.c:1230
 #, c-format
 msgid "object file %s is empty"
 msgstr "物件檔案 %s 為空"
 
-#: object-file.c:1333 object-file.c:2542
+#: object-file.c:1349 object-file.c:2588
 #, c-format
 msgid "corrupt loose object '%s'"
 msgstr "損壞的鬆散物件 '%s'"
 
-#: object-file.c:1335 object-file.c:2546
+#: object-file.c:1351 object-file.c:2592
 #, c-format
 msgid "garbage at end of loose object '%s'"
 msgstr "鬆散物件 '%s' 後面有垃圾資料"
 
-#: object-file.c:1457
+#: object-file.c:1473
 #, c-format
 msgid "unable to parse %s header"
 msgstr "無法解析 %s 頭部"
 
-#: object-file.c:1459
+#: object-file.c:1475
 msgid "invalid object type"
 msgstr "無效的物件類型"
 
-#: object-file.c:1470
+#: object-file.c:1486
 #, c-format
 msgid "unable to unpack %s header"
 msgstr "無法解開 %s 頭部"
 
-#: object-file.c:1474
+#: object-file.c:1490
 #, c-format
 msgid "header for %s too long, exceeds %d bytes"
 msgstr "%s 的標頭過長,超出 %d 位元組"
 
-#: object-file.c:1704
+#: object-file.c:1720
 #, c-format
 msgid "failed to read object %s"
 msgstr "讀取物件 %s 失敗"
 
-#: object-file.c:1708
+#: object-file.c:1724
 #, c-format
 msgid "replacement %s not found for %s"
 msgstr "找不到 %2$s 的替代 %1$s"
 
-#: object-file.c:1712
+#: object-file.c:1728
 #, c-format
 msgid "loose object %s (stored in %s) is corrupt"
 msgstr "鬆散物件 %s(儲存在 %s)已損壞"
 
-#: object-file.c:1716
+#: object-file.c:1732
 #, c-format
 msgid "packed object %s (stored in %s) is corrupt"
 msgstr "打包物件 %s(儲存在 %s)已損壞"
 
-#: object-file.c:1821
+#: object-file.c:1855
 #, c-format
 msgid "unable to write file %s"
 msgstr "無法寫檔案 %s"
 
-#: object-file.c:1828
+#: object-file.c:1862
 #, c-format
 msgid "unable to set permission to '%s'"
 msgstr "無法為 '%s' 設定權限"
 
-#: object-file.c:1835
+#: object-file.c:1869
 msgid "file write error"
 msgstr "檔案寫錯誤"
 
-#: object-file.c:1858
+#: object-file.c:1904
 msgid "error when closing loose object file"
 msgstr "關閉鬆散物件檔案時發生錯誤"
 
-#: object-file.c:1925
+#: object-file.c:1971
 #, c-format
 msgid "insufficient permission for adding an object to repository database %s"
 msgstr "權限不足,無法在版本庫物件庫 %s 中新增物件"
 
-#: object-file.c:1927
+#: object-file.c:1973
 msgid "unable to create temporary file"
 msgstr "無法建立暫存檔"
 
-#: object-file.c:1951
+#: object-file.c:1997
 msgid "unable to write loose object file"
 msgstr "不能寫鬆散物件檔案"
 
-#: object-file.c:1957
+#: object-file.c:2003
 #, c-format
 msgid "unable to deflate new object %s (%d)"
 msgstr "不能壓縮新物件 %s(%d)"
 
-#: object-file.c:1961
+#: object-file.c:2007
 #, c-format
 msgid "deflateEnd on object %s failed (%d)"
 msgstr "在物件 %s 上呼叫 deflateEnd 失敗(%d)"
 
-#: object-file.c:1965
+#: object-file.c:2011
 #, c-format
 msgid "confused by unstable object source data for %s"
 msgstr "被 %s 的不穩定物件來源資料混淆"
 
-#: object-file.c:1976 builtin/pack-objects.c:1243
+#: object-file.c:2022 builtin/pack-objects.c:1251
 #, c-format
 msgid "failed utime() on %s"
 msgstr "在 %s 上呼叫 utime() 失敗"
 
-#: object-file.c:2054
+#: object-file.c:2100
 #, c-format
 msgid "cannot read object for %s"
 msgstr "不能讀取物件 %s"
 
-#: object-file.c:2105
+#: object-file.c:2151
 msgid "corrupt commit"
 msgstr "損壞的提交"
 
-#: object-file.c:2113
+#: object-file.c:2159
 msgid "corrupt tag"
 msgstr "損壞的標籤"
 
-#: object-file.c:2213
+#: object-file.c:2259
 #, c-format
 msgid "read error while indexing %s"
 msgstr "索引 %s 時讀取錯誤"
 
-#: object-file.c:2216
+#: object-file.c:2262
 #, c-format
 msgid "short read while indexing %s"
 msgstr "索引 %s 時讀入不完整"
 
-#: object-file.c:2289 object-file.c:2299
+#: object-file.c:2335 object-file.c:2345
 #, c-format
 msgid "%s: failed to insert into database"
 msgstr "%s:插入資料庫失敗"
 
-#: object-file.c:2305
+#: object-file.c:2351
 #, c-format
 msgid "%s: unsupported file type"
 msgstr "%s:不支援的檔案類型"
 
-#: object-file.c:2329 builtin/fetch.c:1453
+#: object-file.c:2375 builtin/fetch.c:1494
 #, c-format
 msgid "%s is not a valid object"
 msgstr "%s 不是一個有效的物件"
 
-#: object-file.c:2331
+#: object-file.c:2377
 #, c-format
 msgid "%s is not a valid '%s' object"
 msgstr "%s 不是一個有效的 '%s' 物件"
 
-#: object-file.c:2358
+#: object-file.c:2404
 #, c-format
 msgid "unable to open %s"
 msgstr "不能開啟 %s"
 
-#: object-file.c:2553
+#: object-file.c:2599
 #, c-format
 msgid "hash mismatch for %s (expected %s)"
 msgstr "%s 的雜湊值不符合(預期 %s)"
 
-#: object-file.c:2576
+#: object-file.c:2622
 #, c-format
 msgid "unable to mmap %s"
 msgstr "不能 mmap %s"
 
-#: object-file.c:2582
+#: object-file.c:2628
 #, c-format
 msgid "unable to unpack header of %s"
 msgstr "無法解壓縮 %s 的頭部"
 
-#: object-file.c:2587
+#: object-file.c:2633
 #, c-format
 msgid "unable to parse header of %s"
 msgstr "無法解析 %s 的頭部"
 
-#: object-file.c:2598
+#: object-file.c:2644
 #, c-format
 msgid "unable to unpack contents of %s"
 msgstr "無法解壓縮 %s 的內容"
 
-#: object-name.c:480
+#. TRANSLATORS: This is a line of ambiguous object
+#. output shown when we cannot look up or parse the
+#. object in question. E.g. "deadbeef [bad object]".
+#.
+#: object-name.c:382
+#, c-format
+msgid "%s [bad object]"
+msgstr "%s [無效物件]"
+
+#. TRANSLATORS: This is a line of ambiguous commit
+#. object output. E.g.:
+#. *
+#. "deadbeef commit 2021-01-01 - Some Commit Message"
+#.
+#: object-name.c:407
+#, c-format
+msgid "%s commit %s - %s"
+msgstr "%s 提交 %s - %s"
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output. E.g.:
+#. *
+#. "deadbeef tag 2022-01-01 - Some Tag Message"
+#. *
+#. The second argument is the YYYY-MM-DD found
+#. in the tag.
+#. *
+#. The third argument is the "tag" string
+#. from object.c.
+#.
+#: object-name.c:428
+#, c-format
+msgid "%s tag %s - %s"
+msgstr "%s 標籤 %s - %s"
+
+#. TRANSLATORS: This is a line of ambiguous
+#. tag object output where we couldn't parse
+#. the tag itself. E.g.:
+#. *
+#. "deadbeef [bad tag, could not parse it]"
+#.
+#: object-name.c:439
+#, c-format
+msgid "%s [bad tag, could not parse it]"
+msgstr "%s [無效標籤,無法解析]"
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef tree".
+#.
+#: object-name.c:447
+#, c-format
+msgid "%s tree"
+msgstr "%s 樹"
+
+#. TRANSLATORS: This is a line of ambiguous <type>
+#. object output. E.g. "deadbeef blob".
+#.
+#: object-name.c:453
+#, c-format
+msgid "%s blob"
+msgstr "%s blob"
+
+#: object-name.c:569
 #, c-format
 msgid "short object ID %s is ambiguous"
 msgstr "短物件 ID %s 存在歧義"
 
-#: object-name.c:491
-msgid "The candidates are:"
-msgstr "候選者有:"
+#. TRANSLATORS: The argument is the list of ambiguous
+#. objects composed in show_ambiguous_object(). See
+#. its "TRANSLATORS" comments for details.
+#.
+#: object-name.c:591
+#, c-format
+msgid ""
+"The candidates are:\n"
+"%s"
+msgstr ""
+"候選物件有:\n"
+"%s"
 
-#: object-name.c:790
+#: object-name.c:888
 msgid ""
 "Git normally never creates a ref that ends with 40 hex characters\n"
 "because it will be ignored when you just specify 40-hex. These refs\n"
@@ -5719,22 +5916,22 @@ msgstr ""
 "請檢查這些引用,並視需要刪除。執行\n"
 "「git config advice.objectNameWarning false」命令以關閉本訊息通知"
 
-#: object-name.c:910
+#: object-name.c:1008
 #, c-format
 msgid "log for '%.*s' only goes back to %s"
 msgstr "'%.*s' 的日誌只能回到 %s"
 
-#: object-name.c:918
+#: object-name.c:1016
 #, c-format
 msgid "log for '%.*s' only has %d entries"
 msgstr "'%.*s' 的日誌只有 %d 個項目"
 
-#: object-name.c:1696
+#: object-name.c:1794
 #, c-format
 msgid "path '%s' exists on disk, but not in '%.*s'"
 msgstr "磁碟上存在 '%s' 路徑,但不存在於 '%.*s'"
 
-#: object-name.c:1702
+#: object-name.c:1800
 #, c-format
 msgid ""
 "path '%s' exists, but not '%s'\n"
@@ -5743,12 +5940,12 @@ msgstr ""
 "'%s' 路徑存在,但不是 '%s'\n"
 "提示:你在說 '%.*s:%s',即 '%.*s:./%s' 嗎?"
 
-#: object-name.c:1711
+#: object-name.c:1809
 #, c-format
 msgid "path '%s' does not exist in '%.*s'"
 msgstr "'%s' 路徑不存在於 '%.*s'"
 
-#: object-name.c:1739
+#: object-name.c:1837
 #, c-format
 msgid ""
 "path '%s' is in the index, but not at stage %d\n"
@@ -5757,7 +5954,7 @@ msgstr ""
 "'%s' 路徑在索引,但不在 %d 暫存區\n"
 "提示:你在說 ':%d:%s' 嗎?"
 
-#: object-name.c:1755
+#: object-name.c:1853
 #, c-format
 msgid ""
 "path '%s' is in the index, but not '%s'\n"
@@ -5766,21 +5963,26 @@ msgstr ""
 "'%s' 路徑在索引,但不是 '%s'\n"
 "提示:你在說 ':%d:%s',即 ':%d:%s' 嗎?"
 
-#: object-name.c:1763
+#: object-name.c:1861
 #, c-format
 msgid "path '%s' exists on disk, but not in the index"
 msgstr "磁碟上存在 '%s' 路徑,但不在索引中"
 
-#: object-name.c:1765
+#: object-name.c:1863
 #, c-format
 msgid "path '%s' does not exist (neither on disk nor in the index)"
 msgstr "'%s' 路徑不存在 (既不存在磁碟,也不存在索引)"
 
-#: object-name.c:1778
+#: object-name.c:1876
 msgid "relative path syntax can't be used outside working tree"
 msgstr "相對路徑與法不能用在工作區外"
 
-#: object-name.c:1916
+#: object-name.c:1901
+#, c-format
+msgid "<object>:<path> required, only <object> '%s' given"
+msgstr "需要指定 <object>:<path>,卻只指定 <object>「%s」"
+
+#: object-name.c:2014
 #, c-format
 msgid "invalid object name '%.*s'."
 msgstr "'%.*s' 物件名稱無效。"
@@ -5805,7 +6007,7 @@ msgstr "物件 %s 有未知的類型 id %d"
 msgid "unable to parse object: %s"
 msgstr "不能解析物件:%s"
 
-#: object.c:283 object.c:295
+#: object.c:283 object.c:294
 #, c-format
 msgid "hash mismatch %s"
 msgstr "雜湊值與 %s 不符合"
@@ -5814,21 +6016,21 @@ msgstr "雜湊值與 %s 不符合"
 msgid "multi-pack bitmap is missing required reverse index"
 msgstr "多包位圖缺少需要的反向索引"
 
-#: pack-bitmap.c:429
+#: pack-bitmap.c:433
 msgid "load_reverse_index: could not open pack"
 msgstr "load_reverse_index:無法開啟包"
 
-#: pack-bitmap.c:1069 pack-bitmap.c:1075 builtin/pack-objects.c:2424
+#: pack-bitmap.c:1072 pack-bitmap.c:1078 builtin/pack-objects.c:2432
 #, c-format
 msgid "unable to get size of %s"
 msgstr "不能得到 %s 的大小"
 
-#: pack-bitmap.c:1935
+#: pack-bitmap.c:1937
 #, c-format
 msgid "could not find %s in pack %s at offset %<PRIuMAX>"
 msgstr "找不到 %2$s 包,偏移位置 %3$<PRIuMAX> 的 %1$s"
 
-#: pack-bitmap.c:1971 builtin/rev-list.c:92
+#: pack-bitmap.c:1973 builtin/rev-list.c:91
 #, c-format
 msgid "unable to get disk usage of %s"
 msgstr "無法取得 %s 的磁碟用量"
@@ -5872,7 +6074,7 @@ msgstr "無法 stat:%s"
 msgid "failed to make %s readable"
 msgstr "無法讓 %s 能夠寫入"
 
-#: pack-write.c:520
+#: pack-write.c:521
 #, c-format
 msgid "could not write '%s' promisor file"
 msgstr "無法寫入「%s」promisor 檔案"
@@ -6207,84 +6409,84 @@ msgstr "object-info:引數後預期要有 flush"
 msgid "Removing duplicate objects"
 msgstr "正在刪除重複物件"
 
-#: range-diff.c:67
+#: range-diff.c:68
 msgid "could not start `log`"
 msgstr "不能啟動 `log`"
 
-#: range-diff.c:69
+#: range-diff.c:70
 msgid "could not read `log` output"
 msgstr "不能讀取 `log` 的輸出"
 
-#: range-diff.c:97 sequencer.c:5602
+#: range-diff.c:98 sequencer.c:5575
 #, c-format
 msgid "could not parse commit '%s'"
 msgstr "不能解析提交 '%s'"
 
-#: range-diff.c:111
+#: range-diff.c:109
 #, c-format
 msgid ""
 "could not parse first line of `log` output: did not start with 'commit ': "
 "'%s'"
 msgstr "無法解析第一行「log」輸出:開頭不是「commit」:「%s」"
 
-#: range-diff.c:137
+#: range-diff.c:132
 #, c-format
 msgid "could not parse git header '%.*s'"
 msgstr "無法解析 git 頭 '%.*s'"
 
-#: range-diff.c:304
+#: range-diff.c:300
 msgid "failed to generate diff"
 msgstr "生成 diff 失敗"
 
-#: range-diff.c:562 range-diff.c:564
+#: range-diff.c:558 range-diff.c:560
 #, c-format
 msgid "could not parse log for '%s'"
 msgstr "不能解析 '%s' 的日誌"
 
-#: read-cache.c:723
+#: read-cache.c:737
 #, c-format
 msgid "will not add file alias '%s' ('%s' already exists in index)"
 msgstr "將不會新增檔案別名 '%s'('%s' 已經存在於索引中)"
 
-#: read-cache.c:739
+#: read-cache.c:753
 msgid "cannot create an empty blob in the object database"
 msgstr "不能在物件資料庫中建立空的資料物件"
 
-#: read-cache.c:761
+#: read-cache.c:775
 #, c-format
 msgid "%s: can only add regular files, symbolic links or git-directories"
 msgstr "%s:只能新增一般檔案、符號連結或 git 目錄"
 
-#: read-cache.c:766 builtin/submodule--helper.c:3242
+#: read-cache.c:780 builtin/submodule--helper.c:3359
 #, c-format
 msgid "'%s' does not have a commit checked out"
 msgstr "'%s' 沒有簽出一個提交"
 
-#: read-cache.c:818
+#: read-cache.c:832
 #, c-format
 msgid "unable to index file '%s'"
 msgstr "無法索引檔案 '%s'"
 
-#: read-cache.c:837
+#: read-cache.c:851
 #, c-format
 msgid "unable to add '%s' to index"
 msgstr "無法在索引中新增 '%s'"
 
-#: read-cache.c:848
+#: read-cache.c:862
 #, c-format
 msgid "unable to stat '%s'"
 msgstr "無法對 %s 執行 stat"
 
-#: read-cache.c:1386
+#: read-cache.c:1404
 #, c-format
 msgid "'%s' appears as both a file and as a directory"
 msgstr "'%s' 看起來既是檔案又是目錄"
 
-#: read-cache.c:1601
+#: read-cache.c:1619
 msgid "Refresh index"
 msgstr "重新整理索引"
 
-#: read-cache.c:1733
+#: read-cache.c:1751
 #, c-format
 msgid ""
 "index.version set, but the value is invalid.\n"
@@ -6293,7 +6495,7 @@ msgstr ""
 "設定了 index.version,但是取值無效。\n"
 "使用版本 %i"
 
-#: read-cache.c:1743
+#: read-cache.c:1761
 #, c-format
 msgid ""
 "GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -6302,144 +6504,148 @@ msgstr ""
 "設定了 GIT_INDEX_VERSION,但是取值無效。\n"
 "使用版本 %i"
 
-#: read-cache.c:1799
+#: read-cache.c:1817
 #, c-format
 msgid "bad signature 0x%08x"
 msgstr "壞的簽名 0x%08x"
 
-#: read-cache.c:1802
+#: read-cache.c:1820
 #, c-format
 msgid "bad index version %d"
 msgstr "壞的索引版本 %d"
 
-#: read-cache.c:1811
+#: read-cache.c:1829
 msgid "bad index file sha1 signature"
 msgstr "壞的索引檔案 sha1 簽名"
 
-#: read-cache.c:1845
+#: read-cache.c:1863
 #, c-format
 msgid "index uses %.4s extension, which we do not understand"
 msgstr "索引使用不被支援的 %.4s 副檔名"
 
 #
-#: read-cache.c:1847
+#: read-cache.c:1865
 #, c-format
 msgid "ignoring %.4s extension"
 msgstr "忽略 %.4s 副檔名"
 
-#: read-cache.c:1884
+#: read-cache.c:1902
 #, c-format
 msgid "unknown index entry format 0x%08x"
 msgstr "未知的索引條目格式 0x%08x"
 
-#: read-cache.c:1900
+#: read-cache.c:1918
 #, c-format
 msgid "malformed name field in the index, near path '%s'"
 msgstr "索引中靠近路徑 '%s' 有錯誤的名稱欄位"
 
-#: read-cache.c:1957
+#: read-cache.c:1975
 msgid "unordered stage entries in index"
 msgstr "索引中有未排序的暫存條目"
 
-#: read-cache.c:1960
+#: read-cache.c:1978
 #, c-format
 msgid "multiple stage entries for merged file '%s'"
 msgstr "合併檔案 '%s' 有多個暫存條目"
 
-#: read-cache.c:1963
+#: read-cache.c:1981
 #, c-format
 msgid "unordered stage entries for '%s'"
 msgstr "'%s' 的未排序暫存條目"
 
-#: read-cache.c:2078 read-cache.c:2384 rerere.c:549 rerere.c:583 rerere.c:1095
-#: submodule.c:1662 builtin/add.c:600 builtin/check-ignore.c:183
-#: builtin/checkout.c:527 builtin/checkout.c:719 builtin/clean.c:1013
-#: builtin/commit.c:378 builtin/diff-tree.c:122 builtin/grep.c:519
-#: builtin/mv.c:148 builtin/reset.c:499 builtin/rm.c:293
-#: builtin/submodule--helper.c:327 builtin/submodule--helper.c:3202
+#: read-cache.c:2096 read-cache.c:2402 rerere.c:549 rerere.c:583 rerere.c:1096
+#: submodule.c:1831 builtin/add.c:586 builtin/check-ignore.c:183
+#: builtin/checkout.c:532 builtin/checkout.c:724 builtin/clean.c:1016
+#: builtin/commit.c:379 builtin/diff-tree.c:122 builtin/grep.c:521
+#: builtin/mv.c:148 builtin/reset.c:506 builtin/rm.c:293
+#: builtin/submodule--helper.c:335 builtin/submodule--helper.c:3319
 msgid "index file corrupt"
 msgstr "索引檔案損壞"
 
-#: read-cache.c:2222
+#: read-cache.c:2240
 #, c-format
 msgid "unable to create load_cache_entries thread: %s"
 msgstr "無法建立 load_cache_entries 執行緒:%s"
 
-#: read-cache.c:2235
+#: read-cache.c:2253
 #, c-format
 msgid "unable to join load_cache_entries thread: %s"
 msgstr "無法加入 load_cache_entries 執行緒:%s"
 
-#: read-cache.c:2268
+#: read-cache.c:2286
 #, c-format
 msgid "%s: index file open failed"
 msgstr "%s:開啟索引檔案失敗"
 
-#: read-cache.c:2272
+#: read-cache.c:2290
 #, c-format
 msgid "%s: cannot stat the open index"
 msgstr "%s:不能對開啟的索引執行 stat 動作"
 
-#: read-cache.c:2276
+#: read-cache.c:2294
 #, c-format
 msgid "%s: index file smaller than expected"
 msgstr "%s:索引檔案比預期的小"
 
-#: read-cache.c:2280
+#: read-cache.c:2298
 #, c-format
 msgid "%s: unable to map index file%s"
 msgstr "%s:無法 map 索引檔案%s"
 
-#: read-cache.c:2323
+#: read-cache.c:2341
 #, c-format
 msgid "unable to create load_index_extensions thread: %s"
 msgstr "無法建立 load_index_extensions 執行緒:%s"
 
-#: read-cache.c:2350
+#: read-cache.c:2368
 #, c-format
 msgid "unable to join load_index_extensions thread: %s"
 msgstr "無法加入 load_index_extensions 執行緒:%s"
 
-#: read-cache.c:2396
+#: read-cache.c:2414
 #, c-format
 msgid "could not freshen shared index '%s'"
 msgstr "無法重新整理共享索引 '%s'"
 
-#: read-cache.c:2455
+#: read-cache.c:2473
 #, c-format
 msgid "broken index, expect %s in %s, got %s"
 msgstr "損壞的索引,期望在 %2$s 中的 %1$s,得到 %3$s"
 
-#: read-cache.c:3086 strbuf.c:1191 wrapper.c:641 builtin/merge.c:1150
+#: read-cache.c:3032
+msgid "cannot write split index for a sparse index"
+msgstr "無法寫入稀疏索引的索引分割"
+
+#: read-cache.c:3114 strbuf.c:1192 wrapper.c:717 builtin/merge.c:1156
 #, c-format
 msgid "could not close '%s'"
 msgstr "不能關閉 '%s'"
 
-#: read-cache.c:3129
+#: read-cache.c:3157
 msgid "failed to convert to a sparse-index"
 msgstr "無法轉換成稀疏索引"
 
-#: read-cache.c:3200
+#: read-cache.c:3228
 #, c-format
 msgid "could not stat '%s'"
 msgstr "不能對 '%s' 呼叫 stat"
 
-#: read-cache.c:3213
+#: read-cache.c:3241
 #, c-format
 msgid "unable to open git dir: %s"
 msgstr "不能開啟 git 目錄:%s"
 
-#: read-cache.c:3225
+#: read-cache.c:3253
 #, c-format
 msgid "unable to unlink: %s"
 msgstr "無法刪除:%s"
 
-#: read-cache.c:3254
+#: read-cache.c:3282
 #, c-format
 msgid "cannot fix permission bits on '%s'"
 msgstr "不能修復 '%s' 的權限位"
 
-#: read-cache.c:3411
+#: read-cache.c:3439
 #, c-format
 msgid "%s: cannot drop to stage #0"
 msgstr "%s:不能落到暫存區 #0"
@@ -6550,9 +6756,9 @@ msgstr ""
 "然而,如果您刪除全部內容,重定基底動作將會終止。\n"
 "\n"
 
-#: rebase-interactive.c:113 rerere.c:469 rerere.c:676 sequencer.c:3883
-#: sequencer.c:3909 sequencer.c:5708 builtin/fsck.c:328 builtin/gc.c:1791
-#: builtin/rebase.c:190
+#: rebase-interactive.c:113 rerere.c:469 rerere.c:677 sequencer.c:3879
+#: sequencer.c:3905 sequencer.c:5681 builtin/fsck.c:328 builtin/gc.c:1791
+#: builtin/rebase.c:191
 #, c-format
 msgid "could not write '%s'"
 msgstr "不能寫入 '%s'"
@@ -6592,7 +6798,7 @@ msgstr ""
 msgid "%s: 'preserve' superseded by 'merges'"
 msgstr "%s:「preserve」已經改成「merges」"
 
-#: ref-filter.c:42 wt-status.c:2048
+#: ref-filter.c:42 wt-status.c:2057
 msgid "gone"
 msgstr "遺失"
 
@@ -6758,81 +6964,91 @@ msgstr "本命令拒絕 atom %%(%.*s)"
 msgid "--format=%.*s cannot be used with --python, --shell, --tcl"
 msgstr "--format=%.*s 不能和 --python、--shell、--tcl 一起使用"
 
-#: ref-filter.c:1706
+#: ref-filter.c:1707
 #, c-format
 msgid "(no branch, rebasing %s)"
 msgstr "(無分支,重定 %s 的基底)"
 
-#: ref-filter.c:1709
+#: ref-filter.c:1710
 #, c-format
 msgid "(no branch, rebasing detached HEAD %s)"
 msgstr "(無分支,重定 %s 分離開頭指標的基底)"
 
-#: ref-filter.c:1712
+#: ref-filter.c:1713
 #, c-format
 msgid "(no branch, bisect started on %s)"
 msgstr "(無分支,二分搜尋從 %s 開始)"
 
-#: ref-filter.c:1716
+#: ref-filter.c:1717
 #, c-format
 msgid "(HEAD detached at %s)"
 msgstr "(開頭指標分離於 %s)"
 
-#: ref-filter.c:1719
+#: ref-filter.c:1720
 #, c-format
 msgid "(HEAD detached from %s)"
 msgstr "(開頭指標分離自 %s)"
 
-#: ref-filter.c:1722
+#: ref-filter.c:1723
 msgid "(no branch)"
 msgstr "(無分支)"
 
-#: ref-filter.c:1754 ref-filter.c:1972
+#: ref-filter.c:1755 ref-filter.c:1973
 #, c-format
 msgid "missing object %s for %s"
 msgstr "缺少 %2$s 的物件 %1$s"
 
-#: ref-filter.c:1764
+#: ref-filter.c:1765
 #, c-format
 msgid "parse_object_buffer failed on %s for %s"
 msgstr "parse_object_buffer 失敗於 %2$s 的 %1$s"
 
-#: ref-filter.c:2155
+#: ref-filter.c:2156
 #, c-format
 msgid "malformed object at '%s'"
 msgstr "格式錯誤的物件 '%s'"
 
-#: ref-filter.c:2245
+#: ref-filter.c:2246
 #, c-format
 msgid "ignoring ref with broken name %s"
 msgstr "忽略帶有錯誤名稱 %s 的引用"
 
-#: ref-filter.c:2250 refs.c:676
+#: ref-filter.c:2251 refs.c:672
 #, c-format
 msgid "ignoring broken ref %s"
 msgstr "忽略損壞的引用 %s"
 
-#: ref-filter.c:2629
+#: ref-filter.c:2630
 #, c-format
 msgid "format: %%(end) atom missing"
 msgstr "格式:缺少 %%(end) 元素"
 
-#: ref-filter.c:2740
+#: ref-filter.c:2741
 #, c-format
 msgid "malformed object name %s"
 msgstr "格式錯誤的物件名 %s"
 
-#: ref-filter.c:2745
+#: ref-filter.c:2746
 #, c-format
 msgid "option `%s' must point to a commit"
 msgstr "選項 `%s' 必須指向一個提交"
 
-#: refs.c:261
+#: reflog.c:407
+#, c-format
+msgid "not a reflog: %s"
+msgstr "不是引用日誌:%s"
+
+#: reflog.c:410
+#, c-format
+msgid "no reflog for '%s'"
+msgstr "沒有 '%s' 的引用日誌"
+
+#: refs.c:262
 #, c-format
 msgid "%s does not point to a valid object!"
 msgstr "%s 沒有指向一個有效的物件!"
 
-#: refs.c:563
+#: refs.c:561
 #, c-format
 msgid ""
 "Using '%s' as the name for the initial branch. This default branch name\n"
@@ -6857,81 +7073,81 @@ msgstr ""
 "\n"
 "\tgit branch -m <name>\n"
 
-#: refs.c:585
+#: refs.c:583
 #, c-format
 msgid "could not retrieve `%s`"
 msgstr "無法擷取「%s」"
 
-#: refs.c:595
+#: refs.c:593
 #, c-format
 msgid "invalid branch name: %s = %s"
 msgstr "分支名稱無效:%s = %s"
 
-#: refs.c:674
+#: refs.c:670
 #, c-format
 msgid "ignoring dangling symref %s"
 msgstr "忽略懸空符號引用 %s"
 
-#: refs.c:925
+#: refs.c:919
 #, c-format
 msgid "log for ref %s has gap after %s"
 msgstr "引用 %s 的日誌在 %s 之後有缺口"
 
-#: refs.c:932
+#: refs.c:926
 #, c-format
 msgid "log for ref %s unexpectedly ended on %s"
 msgstr "引用 %s 的日誌意外終止於 %s"
 
-#: refs.c:997
+#: refs.c:991
 #, c-format
 msgid "log for %s is empty"
 msgstr "%s 的日誌為空"
 
-#: refs.c:1090
+#: refs.c:1086
 #, c-format
 msgid "refusing to update ref with bad name '%s'"
 msgstr "拒絕更新有錯誤名稱 '%s' 的引用"
 
-#: refs.c:1168
+#: refs.c:1164
 #, c-format
 msgid "update_ref failed for ref '%s': %s"
 msgstr "對引用 '%s' 執行 update_ref 失敗:%s"
 
-#: refs.c:2067
+#: refs.c:2059
 #, c-format
 msgid "multiple updates for ref '%s' not allowed"
 msgstr "不允許對引用 '%s' 多次更新"
 
-#: refs.c:2150
+#: refs.c:2145
 msgid "ref updates forbidden inside quarantine environment"
 msgstr "在隔離環境中禁止更新引用"
 
-#: refs.c:2161
+#: refs.c:2156
 msgid "ref updates aborted by hook"
 msgstr "引用更新被掛鉤拒絕"
 
-#: refs.c:2269 refs.c:2299
+#: refs.c:2264 refs.c:2294
 #, c-format
 msgid "'%s' exists; cannot create '%s'"
 msgstr "'%s' 已存在,無法建立 '%s'"
 
-#: refs.c:2275 refs.c:2310
+#: refs.c:2270 refs.c:2305
 #, c-format
 msgid "cannot process '%s' and '%s' at the same time"
 msgstr "無法同時處理 '%s' 和 '%s'"
 
-#: refs/files-backend.c:1267
+#: refs/files-backend.c:1295
 #, c-format
 msgid "could not remove reference %s"
 msgstr "無法刪除引用 %s"
 
-#: refs/files-backend.c:1281 refs/packed-backend.c:1549
-#: refs/packed-backend.c:1559
+#: refs/files-backend.c:1310 refs/packed-backend.c:1565
+#: refs/packed-backend.c:1575
 #, c-format
 msgid "could not delete reference %s: %s"
 msgstr "無法刪除引用 %s:%s"
 
-#: refs/files-backend.c:1284 refs/packed-backend.c:1562
+#: refs/files-backend.c:1313 refs/packed-backend.c:1578
 #, c-format
 msgid "could not delete references: %s"
 msgstr "無法刪除引用:%s"
@@ -6954,37 +7170,37 @@ msgstr "提供了一個以上的 receivepack,使用第一個"
 msgid "more than one uploadpack given, using the first"
 msgstr "提供了一個以上的 uploadpack,使用第一個"
 
-#: remote.c:699
+#: remote.c:698
 #, c-format
 msgid "Cannot fetch both %s and %s to %s"
 msgstr "不能同時取得 %s 和 %s 至 %s"
 
-#: remote.c:703
+#: remote.c:702
 #, c-format
 msgid "%s usually tracks %s, not %s"
 msgstr "%s 通常追蹤 %s,而非 %s"
 
-#: remote.c:707
+#: remote.c:706
 #, c-format
 msgid "%s tracks both %s and %s"
 msgstr "%s 同時追蹤 %s 和 %s"
 
-#: remote.c:775
+#: remote.c:774
 #, c-format
 msgid "key '%s' of pattern had no '*'"
 msgstr "模式的鍵 '%s' 沒有 '*'"
 
-#: remote.c:785
+#: remote.c:784
 #, c-format
 msgid "value '%s' of pattern has no '*'"
 msgstr "模式的值 '%s' 沒有 '*'"
 
-#: remote.c:1192
+#: remote.c:1191
 #, c-format
 msgid "src refspec %s does not match any"
 msgstr "來源引用規格 %s 沒有符合項目"
 
-#: remote.c:1197
+#: remote.c:1196
 #, c-format
 msgid "src refspec %s matches more than one"
 msgstr "來源引用規格 %s 符合超過一個"
@@ -6993,7 +7209,7 @@ msgstr "來源引用規格 %s 符合超過一個"
 #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
 #. the <src>.
 #.
-#: remote.c:1212
+#: remote.c:1211
 #, c-format
 msgid ""
 "The destination you provided is not a full refname (i.e.,\n"
@@ -7015,7 +7231,7 @@ msgstr ""
 "\n"
 "由於這些猜測都不正確,我們放棄了。您必須給出完整引用。"
 
-#: remote.c:1232
+#: remote.c:1231
 #, c-format
 msgid ""
 "The <src> part of the refspec is a commit object.\n"
@@ -7026,7 +7242,7 @@ msgstr ""
 "您是想透過推送至「%s:refs/heads/%s」\n"
 "來建立新分支嗎?"
 
-#: remote.c:1237
+#: remote.c:1236
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tag object.\n"
@@ -7037,7 +7253,7 @@ msgstr ""
 "您是想透過推送至「%s:refs/tags/%s」\n"
 "來建立新標籤嗎?"
 
-#: remote.c:1242
+#: remote.c:1241
 #, c-format
 msgid ""
 "The <src> part of the refspec is a tree object.\n"
@@ -7048,7 +7264,7 @@ msgstr ""
 "您是想透過推送至「%s:refs/tags/%s」\n"
 "為新樹狀物件貼上標籤嗎?"
 
-#: remote.c:1247
+#: remote.c:1246
 #, c-format
 msgid ""
 "The <src> part of the refspec is a blob object.\n"
@@ -7059,113 +7275,113 @@ msgstr ""
 "您是想透過推送至「%s:refs/tags/%s」\n"
 "為新資料物件貼上標籤嗎?"
 
-#: remote.c:1283
+#: remote.c:1282
 #, c-format
 msgid "%s cannot be resolved to branch"
 msgstr "%s 無法被解析為分支"
 
-#: remote.c:1294
+#: remote.c:1293
 #, c-format
 msgid "unable to delete '%s': remote ref does not exist"
 msgstr "無法刪除 '%s':遠端引用不存在"
 
-#: remote.c:1306
+#: remote.c:1305
 #, c-format
 msgid "dst refspec %s matches more than one"
 msgstr "目的地引用規格 %s 符合超過一個"
 
-#: remote.c:1313
+#: remote.c:1312
 #, c-format
 msgid "dst ref %s receives from more than one src"
 msgstr "目的地引用 %s 接收超過一個來源"
 
-#: remote.c:1834 remote.c:1941
+#: remote.c:1833 remote.c:1940
 msgid "HEAD does not point to a branch"
 msgstr "HEAD 沒有指向一個分支"
 
-#: remote.c:1843
+#: remote.c:1842
 #, c-format
 msgid "no such branch: '%s'"
 msgstr "沒有此分支:'%s'"
 
-#: remote.c:1846
+#: remote.c:1845
 #, c-format
 msgid "no upstream configured for branch '%s'"
 msgstr "尚未給分支 '%s' 設定上游"
 
-#: remote.c:1852
+#: remote.c:1851
 #, c-format
 msgid "upstream branch '%s' not stored as a remote-tracking branch"
 msgstr "上游分支 '%s' 沒有儲存為一個遠端追蹤分支"
 
-#: remote.c:1867
+#: remote.c:1866
 #, c-format
 msgid "push destination '%s' on remote '%s' has no local tracking branch"
 msgstr "推送目的地 '%s' 至遠端 '%s' 沒有本機追蹤分支"
 
-#: remote.c:1882
+#: remote.c:1881
 #, c-format
 msgid "branch '%s' has no remote for pushing"
 msgstr "分支 '%s' 沒有設定要推送的遠端伺服器"
 
-#: remote.c:1892
+#: remote.c:1891
 #, c-format
 msgid "push refspecs for '%s' do not include '%s'"
 msgstr "向 '%s' 推送引用規格未包含 '%s'"
 
-#: remote.c:1905
+#: remote.c:1904
 msgid "push has no destination (push.default is 'nothing')"
 msgstr "推送沒有目的地(push.default 是 'nothing')"
 
-#: remote.c:1927
+#: remote.c:1926
 msgid "cannot resolve 'simple' push to a single destination"
 msgstr "無法解析 'simple' 推送至單獨目的地"
 
-#: remote.c:2060
+#: remote.c:2059
 #, c-format
 msgid "couldn't find remote ref %s"
 msgstr "無法找到遠端引用 %s"
 
-#: remote.c:2073
+#: remote.c:2072
 #, c-format
 msgid "* Ignoring funny ref '%s' locally"
 msgstr "* 在本機忽略可笑的引用 '%s'"
 
-#: remote.c:2236
+#: remote.c:2235
 #, c-format
 msgid "Your branch is based on '%s', but the upstream is gone.\n"
 msgstr "您的分支基於 '%s',但此上游分支已經不存在。\n"
 
-#: remote.c:2240
+#: remote.c:2239
 msgid "  (use \"git branch --unset-upstream\" to fixup)\n"
 msgstr "  (使用 \"git branch --unset-upstream\" 來修復)\n"
 
-#: remote.c:2243
+#: remote.c:2242
 #, c-format
 msgid "Your branch is up to date with '%s'.\n"
 msgstr "您的分支與上游分支 '%s' 一致。\n"
 
-#: remote.c:2247
+#: remote.c:2246
 #, c-format
 msgid "Your branch and '%s' refer to different commits.\n"
 msgstr "您的分支和 '%s' 指向不同的提交。\n"
 
-#: remote.c:2250
+#: remote.c:2249
 #, c-format
 msgid "  (use \"%s\" for details)\n"
 msgstr "  (使用 \"%s\" 檢視詳情)\n"
 
-#: remote.c:2254
+#: remote.c:2253
 #, c-format
 msgid "Your branch is ahead of '%s' by %d commit.\n"
 msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
 msgstr[0] "您的分支領先 '%s' 共 %d 個提交。\n"
 
-#: remote.c:2260
+#: remote.c:2259
 msgid "  (use \"git push\" to publish your local commits)\n"
 msgstr "  (使用 \"git push\" 來發布您的本機提交)\n"
 
-#: remote.c:2263
+#: remote.c:2262
 #, c-format
 msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
 msgid_plural ""
@@ -7173,11 +7389,11 @@ msgid_plural ""
 msgstr[0] "您的分支落後 '%s' 共 %d 個提交,並且可以快轉。\n"
 
 #  譯者:請維持前導空格
-#: remote.c:2271
+#: remote.c:2270
 msgid "  (use \"git pull\" to update your local branch)\n"
 msgstr "  (使用 \"git pull\" 來更新您的本機分支)\n"
 
-#: remote.c:2274
+#: remote.c:2273
 #, c-format
 msgid ""
 "Your branch and '%s' have diverged,\n"
@@ -7190,11 +7406,11 @@ msgstr[0] ""
 "並且分別有 %d 和 %d 處不同的提交。\n"
 
 #  譯者:請維持前導空格
-#: remote.c:2284
+#: remote.c:2283
 msgid "  (use \"git pull\" to merge the remote branch into yours)\n"
 msgstr "  (使用 \"git pull\" 來合併遠端分支)\n"
 
-#: remote.c:2476
+#: remote.c:2475
 #, c-format
 msgid "cannot parse expected object name '%s'"
 msgstr "無法解析期望的物件名 '%s'"
@@ -7230,106 +7446,110 @@ msgstr "寫入 '%s' (%s) 時發生錯誤"
 #: rerere.c:482 builtin/gc.c:2263 builtin/gc.c:2298
 #, c-format
 msgid "failed to flush '%s'"
-msgstr "重新整理 '%s' 失敗"
+msgstr "排清 '%s' 失敗"
 
-#: rerere.c:487 rerere.c:1023
+#: rerere.c:487 rerere.c:1024
 #, c-format
 msgid "could not parse conflict hunks in '%s'"
 msgstr "不能解析 '%s' 中的衝突區塊"
 
-#: rerere.c:668
+#: rerere.c:669
 #, c-format
 msgid "failed utime() on '%s'"
 msgstr "在 '%s' 上呼叫 utime() 失敗"
 
-#: rerere.c:678
+#: rerere.c:679
 #, c-format
 msgid "writing '%s' failed"
 msgstr "寫入 '%s' 失敗"
 
-#: rerere.c:698
+#: rerere.c:699
 #, c-format
 msgid "Staged '%s' using previous resolution."
 msgstr "使用之前的解決方案暫存 '%s'。"
 
-#: rerere.c:737
+#: rerere.c:738
 #, c-format
 msgid "Recorded resolution for '%s'."
 msgstr "已記錄 '%s' 的解決方案。"
 
-#: rerere.c:772
+#: rerere.c:773
 #, c-format
 msgid "Resolved '%s' using previous resolution."
 msgstr "使用之前的解決方案解決 '%s'。"
 
-#: rerere.c:787
+#: rerere.c:788
 #, c-format
 msgid "cannot unlink stray '%s'"
 msgstr "不能刪除 stray '%s'"
 
-#: rerere.c:791
+#: rerere.c:792
 #, c-format
 msgid "Recorded preimage for '%s'"
 msgstr "為 '%s' 記錄 preimage"
 
-#: rerere.c:865 submodule.c:2121 builtin/log.c:2017
-#: builtin/submodule--helper.c:1777 builtin/submodule--helper.c:1820
+#: rerere.c:866 submodule.c:2290 builtin/log.c:2042
+#: builtin/submodule--helper.c:1786 builtin/submodule--helper.c:1833
 #, c-format
 msgid "could not create directory '%s'"
 msgstr "不能建立目錄 '%s'"
 
-#: rerere.c:1041
+#: rerere.c:1042
 #, c-format
 msgid "failed to update conflicted state in '%s'"
 msgstr "更新 '%s' 中的衝突狀態失敗"
 
-#: rerere.c:1052 rerere.c:1059
+#: rerere.c:1053 rerere.c:1060
 #, c-format
 msgid "no remembered resolution for '%s'"
 msgstr "沒有為 '%s' 記憶的解決方案"
 
-#: rerere.c:1061
+#: rerere.c:1062
 #, c-format
 msgid "cannot unlink '%s'"
 msgstr "不能刪除 '%s'"
 
-#: rerere.c:1071
+#: rerere.c:1072
 #, c-format
 msgid "Updated preimage for '%s'"
 msgstr "已為 '%s' 更新 preimage"
 
-#: rerere.c:1080
+#: rerere.c:1081
 #, c-format
 msgid "Forgot resolution for '%s'\n"
 msgstr "忘記 '%s' 的解決方案\n"
 
-#: rerere.c:1191
+#: rerere.c:1192
 msgid "unable to open rr-cache directory"
 msgstr "不能開啟 rr-cache 目錄"
 
-#: reset.c:42
+#: reset.c:112
 msgid "could not determine HEAD revision"
 msgstr "不能確定 HEAD 版本"
 
-#: reset.c:70 reset.c:76 sequencer.c:3700
+#: reset.c:141 reset.c:147 sequencer.c:3696
 #, c-format
 msgid "failed to find tree of %s"
 msgstr "無法找到 %s 指向的樹"
 
-#: revision.c:2347
+#: revision.c:2358
 msgid "--unpacked=<packfile> no longer supported"
 msgstr "--unpacked=<packfile> 已不受支援"
 
-#: revision.c:2686
+#: revision.c:2712
 msgid "your current branch appears to be broken"
 msgstr "您的目前分支好像被損壞"
 
-#: revision.c:2689
+#: revision.c:2715
 #, c-format
 msgid "your current branch '%s' does not have any commits yet"
 msgstr "您的目前分支 '%s' 尚無任何提交"
 
-#: revision.c:2891
+#: revision.c:2901
+msgid "object filtering requires --objects"
+msgstr "物件過濾需要 --objects"
+
+#: revision.c:2918
 msgid "-L does not yet support diff formats besides -p and -s"
 msgstr "-L 尚不支援 -p 和 -s 之外的差異格式"
 
@@ -7396,7 +7616,7 @@ msgstr "無效的提交說明清理模式 '%s'"
 msgid "could not delete '%s'"
 msgstr "無法刪除 '%s'"
 
-#: sequencer.c:345 sequencer.c:4751 builtin/rebase.c:563 builtin/rebase.c:1297
+#: sequencer.c:345 sequencer.c:4724 builtin/rebase.c:564 builtin/rebase.c:1326
 #: builtin/rm.c:409
 #, c-format
 msgid "could not remove '%s'"
@@ -7459,13 +7679,13 @@ msgstr ""
 "若要取消並返回 \"git revert\" 前的狀態,\n"
 "請執行 \"git revert --abort\"。"
 
-#: sequencer.c:448 sequencer.c:3292
+#: sequencer.c:448 sequencer.c:3288
 #, c-format
 msgid "could not lock '%s'"
 msgstr "不能鎖定 '%s'"
 
-#: sequencer.c:450 sequencer.c:3091 sequencer.c:3296 sequencer.c:3310
-#: sequencer.c:3561 sequencer.c:5618 strbuf.c:1188 wrapper.c:639
+#: sequencer.c:450 sequencer.c:3087 sequencer.c:3292 sequencer.c:3306
+#: sequencer.c:3557 sequencer.c:5591 strbuf.c:1189 wrapper.c:715
 #, c-format
 msgid "could not write to '%s'"
 msgstr "不能寫入 '%s'"
@@ -7475,14 +7695,14 @@ msgstr "不能寫入 '%s'"
 msgid "could not write eol to '%s'"
 msgstr "不能將換行符號寫入 '%s'"
 
-#: sequencer.c:460 sequencer.c:3096 sequencer.c:3298 sequencer.c:3312
-#: sequencer.c:3569
+#: sequencer.c:460 sequencer.c:3092 sequencer.c:3294 sequencer.c:3308
+#: sequencer.c:3565
 #, c-format
 msgid "failed to finalize '%s'"
 msgstr "無法完成 '%s'"
 
-#: sequencer.c:473 sequencer.c:1934 sequencer.c:3116 sequencer.c:3551
-#: sequencer.c:3679 builtin/am.c:289 builtin/commit.c:834 builtin/merge.c:1148
+#: sequencer.c:473 sequencer.c:1930 sequencer.c:3112 sequencer.c:3547
+#: sequencer.c:3675 builtin/am.c:290 builtin/commit.c:837 builtin/merge.c:1154
 #, c-format
 msgid "could not read '%s'"
 msgstr "不能讀取 '%s'"
@@ -7501,7 +7721,7 @@ msgstr "提交您的修改或儲藏後再繼續。"
 msgid "%s: fast-forward"
 msgstr "%s:快轉"
 
-#: sequencer.c:574 builtin/tag.c:614
+#: sequencer.c:574 builtin/tag.c:615
 #, c-format
 msgid "Invalid cleanup mode %s"
 msgstr "無效的清理模式 %s"
@@ -7532,8 +7752,8 @@ msgstr "在 '%.*s' 中沒有 key"
 msgid "unable to dequote value of '%s'"
 msgstr "無法為 '%s' 的值去引號"
 
-#: sequencer.c:841 wrapper.c:209 wrapper.c:379 builtin/am.c:756
-#: builtin/am.c:848 builtin/rebase.c:694
+#: sequencer.c:841 wrapper.c:219 wrapper.c:389 builtin/am.c:757
+#: builtin/am.c:849 builtin/rebase.c:699
 #, c-format
 msgid "could not open '%s' for reading"
 msgstr "無法開啟 '%s' 進行讀取"
@@ -7647,350 +7867,345 @@ msgstr ""
 "\n"
 "    git commit --amend --reset-author\n"
 
-#: sequencer.c:1288
+#: sequencer.c:1287
 msgid "couldn't look up newly created commit"
 msgstr "無法找到新建立的提交"
 
-#: sequencer.c:1290
+#: sequencer.c:1289
 msgid "could not parse newly created commit"
 msgstr "不能解析新建立的提交"
 
-#: sequencer.c:1339
+#: sequencer.c:1336
 msgid "unable to resolve HEAD after creating commit"
 msgstr "建立提交後,不能解析 HEAD"
 
-#: sequencer.c:1342
+#: sequencer.c:1338
 msgid "detached HEAD"
 msgstr "分離 HEAD"
 
 #  譯者:中文字串拼接,可刪除前導空格
-#: sequencer.c:1346
+#: sequencer.c:1342
 msgid " (root-commit)"
 msgstr " (根提交)"
 
-#: sequencer.c:1367
+#: sequencer.c:1363
 msgid "could not parse HEAD"
 msgstr "不能解析 HEAD"
 
-#: sequencer.c:1369
+#: sequencer.c:1365
 #, c-format
 msgid "HEAD %s is not a commit!"
 msgstr "HEAD %s 不是一個提交!"
 
-#: sequencer.c:1373 sequencer.c:1451 builtin/commit.c:1708
+#: sequencer.c:1369 sequencer.c:1447 builtin/commit.c:1707
 msgid "could not parse HEAD commit"
 msgstr "不能解析 HEAD 提交"
 
-#: sequencer.c:1429 sequencer.c:2314
+#: sequencer.c:1425 sequencer.c:2310
 msgid "unable to parse commit author"
 msgstr "不能解析提交作者"
 
-#: sequencer.c:1440 builtin/am.c:1643 builtin/merge.c:710
+#: sequencer.c:1436 builtin/am.c:1644 builtin/merge.c:710
 msgid "git write-tree failed to write a tree"
 msgstr "git write-tree 無法寫入樹狀物件"
 
-#: sequencer.c:1473 sequencer.c:1593
+#: sequencer.c:1469 sequencer.c:1589
 #, c-format
 msgid "unable to read commit message from '%s'"
 msgstr "不能從 '%s' 讀取提交說明"
 
-#: sequencer.c:1504 sequencer.c:1536
+#: sequencer.c:1500 sequencer.c:1532
 #, c-format
 msgid "invalid author identity '%s'"
 msgstr "無效的作者身分 '%s'"
 
-#: sequencer.c:1510
+#: sequencer.c:1506
 msgid "corrupt author: missing date information"
 msgstr "作者資訊損壞:缺少日期資訊"
 
-#: sequencer.c:1549 builtin/am.c:1670 builtin/commit.c:1822 builtin/merge.c:915
-#: builtin/merge.c:940 t/helper/test-fast-rebase.c:78
+#: sequencer.c:1545 builtin/am.c:1671 builtin/commit.c:1821 builtin/merge.c:921
+#: builtin/merge.c:946 t/helper/test-fast-rebase.c:78
 msgid "failed to write commit object"
 msgstr "寫提交物件失敗"
 
-#: sequencer.c:1576 sequencer.c:4523 t/helper/test-fast-rebase.c:199
+#: sequencer.c:1572 sequencer.c:4496 t/helper/test-fast-rebase.c:199
 #: t/helper/test-fast-rebase.c:217
 #, c-format
 msgid "could not update %s"
 msgstr "不能更新 %s"
 
-#: sequencer.c:1625
+#: sequencer.c:1621
 #, c-format
 msgid "could not parse commit %s"
 msgstr "不能解析提交 %s"
 
-#: sequencer.c:1630
+#: sequencer.c:1626
 #, c-format
 msgid "could not parse parent commit %s"
 msgstr "不能解析父提交 %s"
 
-#: sequencer.c:1713 sequencer.c:1994
+#: sequencer.c:1709 sequencer.c:1990
 #, c-format
 msgid "unknown command: %d"
 msgstr "未知指令:%d"
 
-#: sequencer.c:1755
+#: sequencer.c:1751
 msgid "This is the 1st commit message:"
 msgstr "這是第一個提交說明:"
 
-#: sequencer.c:1756
+#: sequencer.c:1752
 #, c-format
 msgid "This is the commit message #%d:"
 msgstr "這是提交說明 #%d:"
 
-#: sequencer.c:1757
+#: sequencer.c:1753
 msgid "The 1st commit message will be skipped:"
 msgstr "略過第 1 個提交說明:"
 
-#: sequencer.c:1758
+#: sequencer.c:1754
 #, c-format
 msgid "The commit message #%d will be skipped:"
 msgstr "略過第 %d 個提交說明:"
 
-#: sequencer.c:1759
+#: sequencer.c:1755
 #, c-format
 msgid "This is a combination of %d commits."
 msgstr "這是整合 %d 個提交的集合提交。"
 
-#: sequencer.c:1906 sequencer.c:1963
+#: sequencer.c:1902 sequencer.c:1959
 #, c-format
 msgid "cannot write '%s'"
 msgstr "不能寫 '%s'"
 
-#: sequencer.c:1953
+#: sequencer.c:1949
 msgid "need a HEAD to fixup"
 msgstr "需要一個 HEAD 來修復"
 
-#: sequencer.c:1955 sequencer.c:3596
+#: sequencer.c:1951 sequencer.c:3592
 msgid "could not read HEAD"
 msgstr "不能讀取 HEAD"
 
-#: sequencer.c:1957
+#: sequencer.c:1953
 msgid "could not read HEAD's commit message"
 msgstr "不能讀取 HEAD 的提交說明"
 
-#: sequencer.c:1981
+#: sequencer.c:1977
 #, c-format
 msgid "could not read commit message of %s"
 msgstr "不能讀取 %s 的提交說明"
 
-#: sequencer.c:2091
+#: sequencer.c:2087
 msgid "your index file is unmerged."
 msgstr "您的索引檔案未完成合併。"
 
-#: sequencer.c:2098
+#: sequencer.c:2094
 msgid "cannot fixup root commit"
 msgstr "不能修復根提交"
 
-#: sequencer.c:2117
+#: sequencer.c:2113
 #, c-format
 msgid "commit %s is a merge but no -m option was given."
 msgstr "提交 %s 是一個合併提交但未提供 -m 選項。"
 
-#: sequencer.c:2125 sequencer.c:2133
+#: sequencer.c:2121 sequencer.c:2129
 #, c-format
 msgid "commit %s does not have parent %d"
 msgstr "提交 %s 沒有第 %d 個父提交"
 
-#: sequencer.c:2139
+#: sequencer.c:2135
 #, c-format
 msgid "cannot get commit message for %s"
 msgstr "不能得到 %s 的提交說明"
 
 #. TRANSLATORS: The first %s will be a "todo" command like
 #. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:2158
+#: sequencer.c:2154
 #, c-format
 msgid "%s: cannot parse parent commit %s"
 msgstr "%s:不能解析父提交 %s"
 
-#: sequencer.c:2224
+#: sequencer.c:2220
 #, c-format
 msgid "could not rename '%s' to '%s'"
 msgstr "不能將 '%s' 重新命名為 '%s'"
 
-#: sequencer.c:2284
+#: sequencer.c:2280
 #, c-format
 msgid "could not revert %s... %s"
 msgstr "不能還原 %s... %s"
 
-#: sequencer.c:2285
+#: sequencer.c:2281
 #, c-format
 msgid "could not apply %s... %s"
 msgstr "不能套用 %s... %s"
 
-#: sequencer.c:2306
+#: sequencer.c:2302
 #, c-format
 msgid "dropping %s %s -- patch contents already upstream\n"
 msgstr "拋棄 %s %s -- 修補檔的內容已在上游\n"
 
-#: sequencer.c:2364
+#: sequencer.c:2360
 #, c-format
 msgid "git %s: failed to read the index"
 msgstr "git %s:無法讀取索引"
 
-#: sequencer.c:2372
+#: sequencer.c:2368
 #, c-format
 msgid "git %s: failed to refresh the index"
 msgstr "git %s:無法重新整理索引"
 
-#: sequencer.c:2452
+#: sequencer.c:2448
 #, c-format
 msgid "%s does not accept arguments: '%s'"
 msgstr "%s 不接受參數:'%s'"
 
-#: sequencer.c:2461
+#: sequencer.c:2457
 #, c-format
 msgid "missing arguments for %s"
 msgstr "缺少 %s 的參數"
 
-#: sequencer.c:2504
+#: sequencer.c:2500
 #, c-format
 msgid "could not parse '%s'"
 msgstr "無法解析 '%s'"
 
-#: sequencer.c:2565
+#: sequencer.c:2561
 #, c-format
 msgid "invalid line %d: %.*s"
 msgstr "無效行 %d:%.*s"
 
-#: sequencer.c:2576
+#: sequencer.c:2572
 #, c-format
 msgid "cannot '%s' without a previous commit"
 msgstr "沒有父提交的情況下不能 '%s'"
 
-#: sequencer.c:2624 builtin/rebase.c:184
+#: sequencer.c:2620 builtin/rebase.c:185
 #, c-format
 msgid "could not read '%s'."
 msgstr "不能讀取 '%s'。"
 
-#: sequencer.c:2662
+#: sequencer.c:2658
 msgid "cancelling a cherry picking in progress"
 msgstr "正在取消一個進行中的揀選"
 
-#: sequencer.c:2671
+#: sequencer.c:2667
 msgid "cancelling a revert in progress"
 msgstr "正在取消一個進行中的還原"
 
-#: sequencer.c:2711
+#: sequencer.c:2707
 msgid "please fix this using 'git rebase --edit-todo'."
 msgstr "請用 'git rebase --edit-todo' 來修改。"
 
-#: sequencer.c:2713
+#: sequencer.c:2709
 #, c-format
 msgid "unusable instruction sheet: '%s'"
 msgstr "不可用的指令清單:'%s'"
 
-#: sequencer.c:2718
+#: sequencer.c:2714
 msgid "no commits parsed."
 msgstr "沒有解析提交。"
 
-#: sequencer.c:2729
+#: sequencer.c:2725
 msgid "cannot cherry-pick during a revert."
 msgstr "不能在還原提交中執行揀選。"
 
-#: sequencer.c:2731
+#: sequencer.c:2727
 msgid "cannot revert during a cherry-pick."
 msgstr "不能在揀選中執行還原提交。"
 
-#: sequencer.c:2809
-#, c-format
-msgid "invalid value for %s: %s"
-msgstr "%s 的值無效:%s"
-
-#: sequencer.c:2918
+#: sequencer.c:2914
 msgid "unusable squash-onto"
 msgstr "不可用的 squash-onto"
 
-#: sequencer.c:2938
+#: sequencer.c:2934
 #, c-format
 msgid "malformed options sheet: '%s'"
 msgstr "格式錯誤的選項清單:'%s'"
 
-#: sequencer.c:3033 sequencer.c:4902
+#: sequencer.c:3029 sequencer.c:4875
 msgid "empty commit set passed"
 msgstr "提供了空的提交集"
 
-#: sequencer.c:3050
+#: sequencer.c:3046
 msgid "revert is already in progress"
 msgstr "一個還原動作已在進行"
 
-#: sequencer.c:3052
+#: sequencer.c:3048
 #, c-format
 msgid "try \"git revert (--continue | %s--abort | --quit)\""
 msgstr "嘗試 \"git revert (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:3055
+#: sequencer.c:3051
 msgid "cherry-pick is already in progress"
 msgstr "揀選動作已在進行"
 
-#: sequencer.c:3057
+#: sequencer.c:3053
 #, c-format
 msgid "try \"git cherry-pick (--continue | %s--abort | --quit)\""
 msgstr "嘗試 \"git cherry-pick (--continue | %s--abort | --quit)\""
 
-#: sequencer.c:3071
+#: sequencer.c:3067
 #, c-format
 msgid "could not create sequencer directory '%s'"
 msgstr "不能建立序列目錄 '%s'"
 
-#: sequencer.c:3086
+#: sequencer.c:3082
 msgid "could not lock HEAD"
 msgstr "不能鎖定 HEAD"
 
-#: sequencer.c:3146 sequencer.c:4612
+#: sequencer.c:3142 sequencer.c:4585
 msgid "no cherry-pick or revert in progress"
 msgstr "揀選或還原動作並未進行"
 
-#: sequencer.c:3148 sequencer.c:3159
+#: sequencer.c:3144 sequencer.c:3155
 msgid "cannot resolve HEAD"
 msgstr "不能解析 HEAD"
 
-#: sequencer.c:3150 sequencer.c:3194
+#: sequencer.c:3146 sequencer.c:3190
 msgid "cannot abort from a branch yet to be born"
 msgstr "不能從尚未建立的分支終止"
 
-#: sequencer.c:3180 builtin/fetch.c:1004 builtin/fetch.c:1416
-#: builtin/grep.c:772
+#: sequencer.c:3176 builtin/fetch.c:1030 builtin/fetch.c:1457
+#: builtin/grep.c:774
 #, c-format
 msgid "cannot open '%s'"
 msgstr "不能開啟 '%s'"
 
-#: sequencer.c:3182
+#: sequencer.c:3178
 #, c-format
 msgid "cannot read '%s': %s"
 msgstr "不能讀取 '%s':%s"
 
-#: sequencer.c:3183
+#: sequencer.c:3179
 msgid "unexpected end of file"
 msgstr "意外的檔案結束"
 
-#: sequencer.c:3189
+#: sequencer.c:3185
 #, c-format
 msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
 msgstr "儲存揀選提交前的 HEAD 檔案 '%s' 損壞"
 
-#: sequencer.c:3200
+#: sequencer.c:3196
 msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
 msgstr "您好像移動了 HEAD。未能還原,檢查您的 HEAD!"
 
-#: sequencer.c:3241
+#: sequencer.c:3237
 msgid "no revert in progress"
 msgstr "沒有正在進行的還原"
 
-#: sequencer.c:3250
+#: sequencer.c:3246
 msgid "no cherry-pick in progress"
 msgstr "沒有正在進行的揀選"
 
-#: sequencer.c:3260
+#: sequencer.c:3256
 msgid "failed to skip the commit"
 msgstr "無法略過這個提交"
 
-#: sequencer.c:3267
+#: sequencer.c:3263
 msgid "there is nothing to skip"
 msgstr "沒有要略過的"
 
-#: sequencer.c:3270
+#: sequencer.c:3266
 #, c-format
 msgid ""
 "have you committed already?\n"
@@ -7999,16 +8214,16 @@ msgstr ""
 "您已經提交了嗎?\n"
 "試試 \"git %s --continue\""
 
-#: sequencer.c:3432 sequencer.c:4503
+#: sequencer.c:3428 sequencer.c:4476
 msgid "cannot read HEAD"
 msgstr "不能讀取 HEAD"
 
-#: sequencer.c:3449
+#: sequencer.c:3445
 #, c-format
 msgid "unable to copy '%s' to '%s'"
 msgstr "無法複製 '%s' 至 '%s'"
 
-#: sequencer.c:3457
+#: sequencer.c:3453
 #, c-format
 msgid ""
 "You can amend the commit now, with\n"
@@ -8027,28 +8242,28 @@ msgstr ""
 "\n"
 "  git rebase --continue\n"
 
-#: sequencer.c:3467
+#: sequencer.c:3463
 #, c-format
 msgid "Could not apply %s... %.*s"
 msgstr "不能套用 %s... %.*s"
 
-#: sequencer.c:3474
+#: sequencer.c:3470
 #, c-format
 msgid "Could not merge %.*s"
 msgstr "不能合併 %.*s"
 
-#: sequencer.c:3488 sequencer.c:3492 builtin/difftool.c:633
+#: sequencer.c:3484 sequencer.c:3488 builtin/difftool.c:633
 #, c-format
 msgid "could not copy '%s' to '%s'"
 msgstr "不能複製 '%s' 至 '%s'"
 
-#: sequencer.c:3503
+#: sequencer.c:3499
 #, c-format
 msgid "Executing: %s\n"
 msgstr "執行:%s\n"
 
 #  譯者:請維持前導空格
-#: sequencer.c:3514
+#: sequencer.c:3510
 #, c-format
 msgid ""
 "execution failed: %s\n"
@@ -8063,11 +8278,11 @@ msgstr ""
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3520
+#: sequencer.c:3516
 msgid "and made changes to the index and/or the working tree\n"
 msgstr "並且修改索引和/或工作區\n"
 
-#: sequencer.c:3526
+#: sequencer.c:3522
 #, c-format
 msgid ""
 "execution succeeded: %s\n"
@@ -8084,90 +8299,90 @@ msgstr ""
 "  git rebase --continue\n"
 "\n"
 
-#: sequencer.c:3586
+#: sequencer.c:3582
 #, c-format
 msgid "illegal label name: '%.*s'"
 msgstr "非法的標籤名稱:'%.*s'"
 
-#: sequencer.c:3659
+#: sequencer.c:3655
 msgid "writing fake root commit"
 msgstr "寫偽根提交"
 
-#: sequencer.c:3664
+#: sequencer.c:3660
 msgid "writing squash-onto"
 msgstr "寫入 squash-onto"
 
-#: sequencer.c:3743
+#: sequencer.c:3739
 #, c-format
 msgid "could not resolve '%s'"
 msgstr "無法解析 '%s'"
 
-#: sequencer.c:3775
+#: sequencer.c:3771
 msgid "cannot merge without a current revision"
 msgstr "沒有目前版本不能合併"
 
-#: sequencer.c:3797
+#: sequencer.c:3793
 #, c-format
 msgid "unable to parse '%.*s'"
 msgstr "無法解析 '%.*s'"
 
-#: sequencer.c:3806
+#: sequencer.c:3802
 #, c-format
 msgid "nothing to merge: '%.*s'"
 msgstr "無可用合併:'%.*s'"
 
-#: sequencer.c:3818
+#: sequencer.c:3814
 msgid "octopus merge cannot be executed on top of a [new root]"
 msgstr "章魚合並不能在一個新的根提交上執行"
 
-#: sequencer.c:3873
+#: sequencer.c:3869
 #, c-format
 msgid "could not get commit message of '%s'"
 msgstr "不能取得 '%s' 的提交說明"
 
-#: sequencer.c:4019
+#: sequencer.c:4013
 #, c-format
 msgid "could not even attempt to merge '%.*s'"
 msgstr "甚至不能嘗試合併 '%.*s'"
 
-#: sequencer.c:4035
+#: sequencer.c:4029
 msgid "merge: Unable to write new index file"
 msgstr "合併:無法寫入新索引檔案"
 
-#: sequencer.c:4116
+#: sequencer.c:4110
 msgid "Cannot autostash"
 msgstr "無法 autostash"
 
-#: sequencer.c:4119
+#: sequencer.c:4113
 #, c-format
 msgid "Unexpected stash response: '%s'"
 msgstr "意外的 stash 回應:'%s'"
 
-#: sequencer.c:4125
+#: sequencer.c:4119
 #, c-format
 msgid "Could not create directory for '%s'"
 msgstr "不能為 '%s' 建立目錄"
 
-#: sequencer.c:4128
+#: sequencer.c:4122
 #, c-format
 msgid "Created autostash: %s\n"
 msgstr "建立了 autostash:%s\n"
 
-#: sequencer.c:4132
+#: sequencer.c:4124
 msgid "could not reset --hard"
 msgstr "無法 reset --hard"
 
-#: sequencer.c:4157
+#: sequencer.c:4148
 #, c-format
 msgid "Applied autostash.\n"
 msgstr "已套用 autostash。\n"
 
-#: sequencer.c:4169
+#: sequencer.c:4160
 #, c-format
 msgid "cannot store %s"
 msgstr "不能儲存 %s"
 
-#: sequencer.c:4172
+#: sequencer.c:4163
 #, c-format
 msgid ""
 "%s\n"
@@ -8178,29 +8393,29 @@ msgstr ""
 "您的修改安全地儲存在儲藏區中。\n"
 "您可以在任何時候執行 \"git stash pop\" 或 \"git stash drop\"。\n"
 
-#: sequencer.c:4177
+#: sequencer.c:4168
 msgid "Applying autostash resulted in conflicts."
 msgstr "因套用自動儲藏而導致衝突。"
 
-#: sequencer.c:4178
+#: sequencer.c:4169
 msgid "Autostash exists; creating a new stash entry."
 msgstr "已有自動儲藏;建立新儲藏項目。"
 
-#: sequencer.c:4252
+#: sequencer.c:4225
 msgid "could not detach HEAD"
 msgstr "不能分離開頭指標"
 
-#: sequencer.c:4267
+#: sequencer.c:4240
 #, c-format
 msgid "Stopped at HEAD\n"
 msgstr "停止在 HEAD\n"
 
-#: sequencer.c:4269
+#: sequencer.c:4242
 #, c-format
 msgid "Stopped at %s\n"
 msgstr "停止在 %s\n"
 
-#: sequencer.c:4301
+#: sequencer.c:4274
 #, c-format
 msgid ""
 "Could not execute the todo command\n"
@@ -8220,58 +8435,58 @@ msgstr ""
 "    git rebase --edit-todo\n"
 "    git rebase --continue\n"
 
-#: sequencer.c:4347
+#: sequencer.c:4320
 #, c-format
 msgid "Rebasing (%d/%d)%s"
 msgstr "正在重定基底 (%d/%d)%s"
 
-#: sequencer.c:4393
+#: sequencer.c:4366
 #, c-format
 msgid "Stopped at %s...  %.*s\n"
 msgstr "停止在 %s... %.*s\n"
 
-#: sequencer.c:4463
+#: sequencer.c:4436
 #, c-format
 msgid "unknown command %d"
 msgstr "未知指令 %d"
 
-#: sequencer.c:4511
+#: sequencer.c:4484
 msgid "could not read orig-head"
 msgstr "不能讀取 orig-head"
 
-#: sequencer.c:4516
+#: sequencer.c:4489
 msgid "could not read 'onto'"
 msgstr "不能讀取 'onto'"
 
-#: sequencer.c:4530
+#: sequencer.c:4503
 #, c-format
 msgid "could not update HEAD to %s"
 msgstr "不能更新 HEAD 為 %s"
 
-#: sequencer.c:4590
+#: sequencer.c:4563
 #, c-format
 msgid "Successfully rebased and updated %s.\n"
 msgstr "成功重定基底並更新 %s。\n"
 
-#: sequencer.c:4642
+#: sequencer.c:4615
 msgid "cannot rebase: You have unstaged changes."
 msgstr "不能重定基底:您有未暫存的變更。"
 
-#: sequencer.c:4651
+#: sequencer.c:4624
 msgid "cannot amend non-existing commit"
 msgstr "不能修補不存在的提交"
 
-#: sequencer.c:4653
+#: sequencer.c:4626
 #, c-format
 msgid "invalid file: '%s'"
 msgstr "無效檔案:'%s'"
 
-#: sequencer.c:4655
+#: sequencer.c:4628
 #, c-format
 msgid "invalid contents: '%s'"
 msgstr "無效內容:'%s'"
 
-#: sequencer.c:4658
+#: sequencer.c:4631
 msgid ""
 "\n"
 "You have uncommitted changes in your working tree. Please, commit them\n"
@@ -8280,68 +8495,68 @@ msgstr ""
 "\n"
 "您的工作區中有未提交的變更。請先提交然後再次執行 'git rebase --continue'。"
 
-#: sequencer.c:4694 sequencer.c:4733
+#: sequencer.c:4667 sequencer.c:4706
 #, c-format
 msgid "could not write file: '%s'"
 msgstr "不能寫入檔案:'%s'"
 
-#: sequencer.c:4749
+#: sequencer.c:4722
 msgid "could not remove CHERRY_PICK_HEAD"
 msgstr "不能刪除 CHERRY_PICK_HEAD"
 
-#: sequencer.c:4759
+#: sequencer.c:4732
 msgid "could not commit staged changes."
 msgstr "不能提交暫存的修改。"
 
-#: sequencer.c:4879
+#: sequencer.c:4852
 #, c-format
 msgid "%s: can't cherry-pick a %s"
 msgstr "%s:不能揀選一個%s"
 
-#: sequencer.c:4883
+#: sequencer.c:4856
 #, c-format
 msgid "%s: bad revision"
 msgstr "%s:錯誤的版本"
 
-#: sequencer.c:4918
+#: sequencer.c:4891
 msgid "can't revert as initial commit"
 msgstr "不能作為初始提交還原提交"
 
-#: sequencer.c:5189 sequencer.c:5418
+#: sequencer.c:5162 sequencer.c:5391
 #, c-format
 msgid "skipped previously applied commit %s"
 msgstr "已略過先前套用的 %s 提交"
 
-#: sequencer.c:5259 sequencer.c:5434
+#: sequencer.c:5232 sequencer.c:5407
 msgid "use --reapply-cherry-picks to include skipped commits"
 msgstr "使用 --reapply-cherry-picks 以包含略過提交"
 
-#: sequencer.c:5405
+#: sequencer.c:5378
 msgid "make_script: unhandled options"
 msgstr "make_script:有未能處理的選項"
 
-#: sequencer.c:5408
+#: sequencer.c:5381
 msgid "make_script: error preparing revisions"
 msgstr "make_script:準備版本時錯誤"
 
-#: sequencer.c:5666 sequencer.c:5683
+#: sequencer.c:5639 sequencer.c:5656
 msgid "nothing to do"
 msgstr "無事可做"
 
-#: sequencer.c:5702
+#: sequencer.c:5675
 msgid "could not skip unnecessary pick commands"
 msgstr "無法略過不必要的揀選"
 
-#: sequencer.c:5802
+#: sequencer.c:5775
 msgid "the script was already rearranged."
 msgstr "腳本已經重新編排。"
 
-#: setup.c:134
+#: setup.c:135
 #, c-format
 msgid "'%s' is outside repository at '%s'"
 msgstr "'%s' 在位於 '%s' 的版本庫之外"
 
-#: setup.c:186
+#: setup.c:187
 #, c-format
 msgid ""
 "%s: no such path in the working tree.\n"
@@ -8350,7 +8565,7 @@ msgstr ""
 "%s:工作區中無此路徑。\n"
 "使用指令 'git <命令> -- <路徑>...' 來指定本機不存在的路徑。"
 
-#: setup.c:199
+#: setup.c:200
 #, c-format
 msgid ""
 "ambiguous argument '%s': unknown revision or path not in the working tree.\n"
@@ -8361,12 +8576,12 @@ msgstr ""
 "使用 '--' 來分隔版本和路徑,例如:\n"
 "'git <命令> [<版本>...] -- [<檔案>...]'"
 
-#: setup.c:265
+#: setup.c:266
 #, c-format
 msgid "option '%s' must come before non-option arguments"
 msgstr "選項 '%s' 必須在其他非選項參數之前"
 
-#: setup.c:284
+#: setup.c:285
 #, c-format
 msgid ""
 "ambiguous argument '%s': both revision and filename\n"
@@ -8377,98 +8592,98 @@ msgstr ""
 "使用 '--' 來分隔版本和路徑,例如:\n"
 "'git <命令> [<版本>...] -- [<檔案>...]'"
 
-#: setup.c:420
+#: setup.c:421
 msgid "unable to set up work tree using invalid config"
 msgstr "無法使用無效設定來建立工作區"
 
-#: setup.c:424 builtin/rev-parse.c:895
+#: setup.c:425 builtin/rev-parse.c:895
 msgid "this operation must be run in a work tree"
 msgstr "該動作必須在一個工作區中執行"
 
-#: setup.c:722
+#: setup.c:724
 #, c-format
 msgid "Expected git repo version <= %d, found %d"
 msgstr "期望 git 版本庫版本 <= %d,卻得到 %d"
 
-#: setup.c:730
+#: setup.c:732
 msgid "unknown repository extension found:"
 msgid_plural "unknown repository extensions found:"
 msgstr[0] "找到未知的儲存庫擴充元件:"
 
-#: setup.c:744
+#: setup.c:746
 msgid "repo version is 0, but v1-only extension found:"
 msgid_plural "repo version is 0, but v1-only extensions found:"
 msgstr[0] "repo 版本是 0 (v0),但找到只支援 v1 的擴充元件:"
 
-#: setup.c:765
+#: setup.c:767
 #, c-format
 msgid "error opening '%s'"
 msgstr "開啟 '%s' 發生錯誤"
 
-#: setup.c:767
+#: setup.c:769
 #, c-format
 msgid "too large to be a .git file: '%s'"
 msgstr "檔案太大,無法作為 .git 檔案:'%s'"
 
-#: setup.c:769
+#: setup.c:771
 #, c-format
 msgid "error reading %s"
 msgstr "讀取 %s 發生錯誤"
 
-#: setup.c:771
+#: setup.c:773
 #, c-format
 msgid "invalid gitfile format: %s"
 msgstr "無效的 gitfile 格式:%s"
 
-#: setup.c:773
+#: setup.c:775
 #, c-format
 msgid "no path in gitfile: %s"
 msgstr "在 gitfile 中沒有路徑:%s"
 
-#: setup.c:775
+#: setup.c:777
 #, c-format
 msgid "not a git repository: %s"
 msgstr "不是一個 git 版本庫:%s"
 
-#: setup.c:877
+#: setup.c:879
 #, c-format
 msgid "'$%s' too big"
 msgstr "'$%s' 太大"
 
-#: setup.c:891
+#: setup.c:893
 #, c-format
 msgid "not a git repository: '%s'"
 msgstr "不是一個 git 版本庫:'%s'"
 
-#: setup.c:920 setup.c:922 setup.c:953
+#: setup.c:922 setup.c:924 setup.c:955
 #, c-format
 msgid "cannot chdir to '%s'"
 msgstr "不能切換目錄到 '%s'"
 
-#: setup.c:925 setup.c:981 setup.c:991 setup.c:1030 setup.c:1038
+#: setup.c:927 setup.c:983 setup.c:993 setup.c:1032 setup.c:1040
 msgid "cannot come back to cwd"
 msgstr "無法返回目前工作目錄"
 
-#: setup.c:1052
+#: setup.c:1054
 #, c-format
 msgid "failed to stat '%*s%s%s'"
 msgstr "取得 '%*s%s%s' 狀態(stat)失敗"
 
-#: setup.c:1295
+#: setup.c:1338
 msgid "Unable to read current working directory"
 msgstr "不能讀取目前工作目錄"
 
-#: setup.c:1304 setup.c:1310
+#: setup.c:1347 setup.c:1353
 #, c-format
 msgid "cannot change to '%s'"
 msgstr "不能切換到 '%s'"
 
-#: setup.c:1315
+#: setup.c:1358
 #, c-format
 msgid "not a git repository (or any of the parent directories): %s"
 msgstr "不是一個 git 版本庫(或者任何父目錄):%s"
 
-#: setup.c:1321
+#: setup.c:1364
 #, c-format
 msgid ""
 "not a git repository (or any parent up to mount point %s)\n"
@@ -8477,7 +8692,20 @@ msgstr ""
 "不是一個 git 版本庫(或者直至掛載點 %s 的任何父目錄)\n"
 "停止在檔案系統邊界(未設定 GIT_DISCOVERY_ACROSS_FILESYSTEM)。"
 
-#: setup.c:1446
+#: setup.c:1374
+#, c-format
+msgid ""
+"unsafe repository ('%s' is owned by someone else)\n"
+"To add an exception for this directory, call:\n"
+"\n"
+"\tgit config --global --add safe.directory %s"
+msgstr ""
+"不安全版本庫(「%s」由其他人所有)\n"
+"若要放行本目錄,請呼叫:\n"
+"\n"
+"\tgit config --global --add safe.directory %s"
+
+#: setup.c:1502
 #, c-format
 msgid ""
 "problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -8486,186 +8714,200 @@ msgstr ""
 "參數 core.sharedRepository 的檔案屬性值有問題(0%.3o)。\n"
 "檔案所有者必須始終擁有讀寫權限。"
 
-#: setup.c:1508
+#: setup.c:1564
 msgid "fork failed"
 msgstr "fork 失敗"
 
-#: setup.c:1513
+#: setup.c:1569
 msgid "setsid failed"
 msgstr "setsid 失敗"
 
-#: sparse-index.c:289
+#: sparse-index.c:285
 #, c-format
 msgid "index entry is a directory, but not sparse (%08x)"
 msgstr "索引項目是資料夾,但不是稀疏資料夾(%08x)"
 
+#: split-index.c:9
+msgid "cannot use split index with a sparse index"
+msgstr "無法在稀疏索引使用索引分割"
+
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte
-#: strbuf.c:850
+#: strbuf.c:851
 #, c-format
 msgid "%u.%2.2u GiB"
 msgstr "%u.%2.2u GiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 gibibyte/second
-#: strbuf.c:852
+#: strbuf.c:853
 #, c-format
 msgid "%u.%2.2u GiB/s"
 msgstr "%u.%2.2u GiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte
-#: strbuf.c:860
+#: strbuf.c:861
 #, c-format
 msgid "%u.%2.2u MiB"
 msgstr "%u.%2.2u MiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 mebibyte/second
-#: strbuf.c:862
+#: strbuf.c:863
 #, c-format
 msgid "%u.%2.2u MiB/s"
 msgstr "%u.%2.2u MiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte
-#: strbuf.c:869
+#: strbuf.c:870
 #, c-format
 msgid "%u.%2.2u KiB"
 msgstr "%u.%2.2u KiB"
 
 #. TRANSLATORS: IEC 80000-13:2008 kibibyte/second
-#: strbuf.c:871
+#: strbuf.c:872
 #, c-format
 msgid "%u.%2.2u KiB/s"
 msgstr "%u.%2.2u KiB/s"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte
-#: strbuf.c:877
+#: strbuf.c:878
 #, c-format
 msgid "%u byte"
 msgid_plural "%u bytes"
 msgstr[0] "%u 位元組"
 
 #. TRANSLATORS: IEC 80000-13:2008 byte/second
-#: strbuf.c:879
+#: strbuf.c:880
 #, c-format
 msgid "%u byte/s"
 msgid_plural "%u bytes/s"
 msgstr[0] "%u 位元組/秒"
 
-#: strbuf.c:1186 wrapper.c:207 wrapper.c:377 builtin/am.c:765
-#: builtin/rebase.c:650
+#: strbuf.c:1187 wrapper.c:217 wrapper.c:387 builtin/am.c:766
+#: builtin/rebase.c:653
 #, c-format
 msgid "could not open '%s' for writing"
 msgstr "無法開啟 '%s' 進行寫入"
 
-#: strbuf.c:1195
+#: strbuf.c:1196
 #, c-format
 msgid "could not edit '%s'"
 msgstr "無法編輯 '%s'"
 
-#: submodule-config.c:237
+#: submodule-config.c:238
 #, c-format
 msgid "ignoring suspicious submodule name: %s"
 msgstr "忽略可疑的子模組名稱:%s"
 
-#: submodule-config.c:304
+#: submodule-config.c:305
 msgid "negative values not allowed for submodule.fetchjobs"
 msgstr "submodule.fetchjobs 不允許為負值"
 
-#: submodule-config.c:402
+#: submodule-config.c:403
 #, c-format
 msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
 msgstr "忽略可能被解析為指令列選項的 '%s':%s"
 
-#: submodule-config.c:499
+#: submodule-config.c:500 builtin/push.c:489 builtin/send-pack.c:148
 #, c-format
-msgid "invalid value for %s"
-msgstr "%s 的值無效"
+msgid "invalid value for '%s'"
+msgstr "「%s」的值無效"
 
-#: submodule-config.c:767
+#: submodule-config.c:828
 #, c-format
 msgid "Could not update .gitmodules entry %s"
 msgstr "不能更新 .gitmodules 條目 %s"
 
-#: submodule.c:114 submodule.c:143
+#: submodule.c:115 submodule.c:144
 msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
 msgstr "無法修改未合併的 .gitmodules,先解決合併衝突"
 
-#: submodule.c:118 submodule.c:147
+#: submodule.c:119 submodule.c:148
 #, c-format
 msgid "Could not find section in .gitmodules where path=%s"
 msgstr "無法在 .gitmodules 中找到 path=%s 的小節"
 
-#: submodule.c:154
+#: submodule.c:155
 #, c-format
 msgid "Could not remove .gitmodules entry for %s"
 msgstr "無法移除 %s 的 .gitmodules 條目"
 
-#: submodule.c:165
+#: submodule.c:166
 msgid "staging updated .gitmodules failed"
 msgstr "將更新後 .gitmodules 新增暫存區失敗"
 
-#: submodule.c:358
+#: submodule.c:346
 #, c-format
 msgid "in unpopulated submodule '%s'"
 msgstr "位於未簽出的子模組 '%s'"
 
-#: submodule.c:389
+#: submodule.c:377
 #, c-format
 msgid "Pathspec '%s' is in submodule '%.*s'"
 msgstr "路徑規格 '%s' 在子模組 '%.*s' 中"
 
-#: submodule.c:466
+#: submodule.c:454
 #, c-format
 msgid "bad --ignore-submodules argument: %s"
 msgstr "無效 --ignore-submodules 參數:%s"
 
-#: submodule.c:844
+#: submodule.c:866
 #, c-format
 msgid ""
 "Submodule in commit %s at path: '%s' collides with a submodule named the "
 "same. Skipping it."
 msgstr "%s 提交位於路徑:'%s' 的子模組與同名的子模組衝突。略過。"
 
-#: submodule.c:954
+#: submodule.c:987
 #, c-format
 msgid "submodule entry '%s' (%s) is a %s, not a commit"
 msgstr "子模組條目 '%s'(%s)是一個 %s,不是一個提交"
 
-#: submodule.c:1042
+#: submodule.c:1069
 #, c-format
 msgid ""
 "Could not run 'git rev-list <commits> --not --remotes -n 1' command in "
 "submodule %s"
 msgstr "無法在 %s 子模組執行 'git rev-list <提交> --not --remotes -n 1' 命令"
 
-#: submodule.c:1165
+#: submodule.c:1192
 #, c-format
 msgid "process for submodule '%s' failed"
 msgstr "處理 '%s' 子模組失敗"
 
-#: submodule.c:1194 builtin/branch.c:699 builtin/submodule--helper.c:2714
+#: submodule.c:1221 builtin/branch.c:714 builtin/submodule--helper.c:2827
 msgid "Failed to resolve HEAD as a valid ref."
 msgstr "無法將 HEAD 解析為有效引用。"
 
-#: submodule.c:1205
+#: submodule.c:1232
 #, c-format
 msgid "Pushing submodule '%s'\n"
 msgstr "正在推送 '%s' 子模組\n"
 
-#: submodule.c:1208
+#: submodule.c:1235
 #, c-format
 msgid "Unable to push submodule '%s'\n"
 msgstr "無法推送 '%s' 子模組\n"
 
-#: submodule.c:1491
+#: submodule.c:1567
 #, c-format
 msgid "Fetching submodule %s%s\n"
 msgstr "正在抓取 %s%s 子模組\n"
 
-#: submodule.c:1525
+#: submodule.c:1589
 #, c-format
 msgid "Could not access submodule '%s'\n"
 msgstr "無法存取子模組 '%s'\n"
 
-#: submodule.c:1680
+#: submodule.c:1618
+#, c-format
+msgid "Could not access submodule '%s' at commit %s\n"
+msgstr "無法存取 %2$s 提交的子模組「%1$s」\n"
+
+#: submodule.c:1629
+#, c-format
+msgid "Fetching submodule %s%s at commit %s\n"
+msgstr "正在抓取 %3$s 提交的 %1$s%2$s 子模組\n"
+
+#: submodule.c:1849
 #, c-format
 msgid ""
 "Errors during submodule fetch:\n"
@@ -8674,77 +8916,77 @@ msgstr ""
 "抓取子模組時發生錯誤:\n"
 "%s"
 
-#: submodule.c:1705
+#: submodule.c:1874
 #, c-format
 msgid "'%s' not recognized as a git repository"
 msgstr "無法將 '%s' 識別為一個 git 版本庫"
 
-#: submodule.c:1722
+#: submodule.c:1891
 #, c-format
 msgid "Could not run 'git status --porcelain=2' in submodule %s"
 msgstr "無法在 %s 子模組執行 'git status --porcelain=2'"
 
-#: submodule.c:1763
+#: submodule.c:1932
 #, c-format
 msgid "'git status --porcelain=2' failed in submodule %s"
 msgstr "%s 子模組執行 'git status --porcelain=2' 失敗"
 
-#: submodule.c:1838
+#: submodule.c:2007
 #, c-format
 msgid "could not start 'git status' in submodule '%s'"
 msgstr "無法在子模組 '%s' 中啟動 'git status'"
 
-#: submodule.c:1851
+#: submodule.c:2020
 #, c-format
 msgid "could not run 'git status' in submodule '%s'"
 msgstr "無法在子模組 '%s' 中執行 'git status'"
 
-#: submodule.c:1868
+#: submodule.c:2037
 #, c-format
 msgid "Could not unset core.worktree setting in submodule '%s'"
 msgstr "無法在子模組 '%s' 中取消 core.worktree 的設定"
 
-#: submodule.c:1895 submodule.c:2210
+#: submodule.c:2064 submodule.c:2379
 #, c-format
 msgid "could not recurse into submodule '%s'"
 msgstr "無法遞迴子模組路徑 '%s'"
 
-#: submodule.c:1917
+#: submodule.c:2086
 msgid "could not reset submodule index"
 msgstr "無法重設子模組的索引"
 
-#: submodule.c:1959
+#: submodule.c:2128
 #, c-format
 msgid "submodule '%s' has dirty index"
 msgstr "子模組 '%s' 中有髒索引"
 
-#: submodule.c:2013
+#: submodule.c:2182
 #, c-format
 msgid "Submodule '%s' could not be updated."
 msgstr "子模組 '%s' 無法被更新。"
 
-#: submodule.c:2081
+#: submodule.c:2250
 #, c-format
 msgid "submodule git dir '%s' is inside git dir '%.*s'"
 msgstr "「%s」子模組 git 目錄在「%.*s」git 路徑中"
 
-#: submodule.c:2102
+#: submodule.c:2271
 #, c-format
 msgid ""
 "relocate_gitdir for submodule '%s' with more than one worktree not supported"
 msgstr "不支援對有多個工作區的子模組 '%s' 執行 relocate_gitdir"
 
-#: submodule.c:2114 submodule.c:2174
+#: submodule.c:2283 submodule.c:2343
 #, c-format
 msgid "could not lookup name for submodule '%s'"
 msgstr "不能查詢子模組 '%s' 的名稱"
 
-#: submodule.c:2118
+#: submodule.c:2287
 #, c-format
 msgid "refusing to move '%s' into an existing git dir"
 msgstr "拒絕移動「%s」至現存 git 目錄"
 
-#: submodule.c:2124
+#: submodule.c:2293
 #, c-format
 msgid ""
 "Migrating git directory of '%s%s' from\n"
@@ -8755,11 +8997,11 @@ msgstr ""
 "'%s' 遷移至\n"
 "'%s'\n"
 
-#: submodule.c:2255
+#: submodule.c:2424
 msgid "could not start ls-files in .."
 msgstr "無法在 .. 中啟動 ls-files"
 
-#: submodule.c:2295
+#: submodule.c:2464
 #, c-format
 msgid "ls-tree returned unexpected return code %d"
 msgstr "ls-tree 返回未知返回值 %d"
@@ -8780,8 +9022,8 @@ msgstr "執行 trailer 指令 '%s' 失敗"
 msgid "unknown value '%s' for key '%s'"
 msgstr "鍵 '%2$s' 的未知取值 '%1$s'"
 
-#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:299
-#: builtin/remote.c:327
+#: trailer.c:547 trailer.c:552 trailer.c:557 builtin/remote.c:300
+#: builtin/remote.c:328
 #, c-format
 msgid "more than one %s"
 msgstr "多於一個 %s"
@@ -8796,11 +9038,11 @@ msgstr "簽名 '%.*s' 的鍵為空"
 msgid "could not read input file '%s'"
 msgstr "不能讀取輸入檔案 '%s'"
 
-#: trailer.c:766 builtin/mktag.c:89 imap-send.c:1573
+#: trailer.c:766 builtin/mktag.c:88 imap-send.c:1563
 msgid "could not read from stdin"
 msgstr "不能自標準輸入讀取"
 
-#: trailer.c:1024 wrapper.c:684
+#: trailer.c:1024 wrapper.c:760
 #, c-format
 msgid "could not stat %s"
 msgstr "不能對 %s 呼叫 stat"
@@ -8866,7 +9108,7 @@ msgstr "不能執行 fast-import"
 msgid "error while running fast-import"
 msgstr "執行 fast-import 發生錯誤"
 
-#: transport-helper.c:549 transport-helper.c:1251
+#: transport-helper.c:549 transport-helper.c:1254
 #, c-format
 msgid "could not read ref %s"
 msgstr "無法讀取引用 %s"
@@ -8884,7 +9126,7 @@ msgstr "協定不支援設定遠端服務路徑"
 msgid "invalid remote service path"
 msgstr "無效的遠端服務路徑"
 
-#: transport-helper.c:661 transport.c:1479
+#: transport-helper.c:661 transport.c:1496
 msgid "operation not supported by protocol"
 msgstr "協定不支援該動作"
 
@@ -8893,72 +9135,72 @@ msgstr "協定不支援該動作"
 msgid "can't connect to subservice %s"
 msgstr "不能連線到子服務 %s"
 
-#: transport-helper.c:693 transport.c:404
+#: transport-helper.c:693 transport.c:415
 msgid "--negotiate-only requires protocol v2"
 msgstr "--negotiate-only 需要 v2 版協定"
 
-#: transport-helper.c:755
+#: transport-helper.c:758
 msgid "'option' without a matching 'ok/error' directive"
 msgstr "'option' 缺少對應的 'ok/error' 指令"
 
-#: transport-helper.c:798
+#: transport-helper.c:801
 #, c-format
 msgid "expected ok/error, helper said '%s'"
 msgstr "預期 ok/error,協助工具說 '%s'"
 
-#: transport-helper.c:859
+#: transport-helper.c:862
 #, c-format
 msgid "helper reported unexpected status of %s"
 msgstr "協助工具報告 %s 的意外狀態"
 
-#: transport-helper.c:942
+#: transport-helper.c:945
 #, c-format
 msgid "helper %s does not support dry-run"
 msgstr "協助工具 %s 不支援 dry-run"
 
-#: transport-helper.c:945
+#: transport-helper.c:948
 #, c-format
 msgid "helper %s does not support --signed"
 msgstr "協助工具 %s 不支援 --signed"
 
-#: transport-helper.c:948
+#: transport-helper.c:951
 #, c-format
 msgid "helper %s does not support --signed=if-asked"
 msgstr "協助工具 %s 不支援 --signed=if-asked"
 
-#: transport-helper.c:953
+#: transport-helper.c:956
 #, c-format
 msgid "helper %s does not support --atomic"
 msgstr "協助工具 %s 不支援 --atomic"
 
-#: transport-helper.c:957
+#: transport-helper.c:960
 #, c-format
 msgid "helper %s does not support --%s"
 msgstr "協助工具 %s 不支援 --%s"
 
-#: transport-helper.c:964
+#: transport-helper.c:967
 #, c-format
 msgid "helper %s does not support 'push-option'"
 msgstr "協助工具 %s 不支援 'push-option'"
 
-#: transport-helper.c:1064
+#: transport-helper.c:1067
 msgid "remote-helper doesn't support push; refspec needed"
 msgstr "remote-heper 不支援 push,需要引用規格"
 
-#: transport-helper.c:1069
+#: transport-helper.c:1072
 #, c-format
 msgid "helper %s does not support 'force'"
 msgstr "協助工具 %s 不支援 'force'"
 
-#: transport-helper.c:1116
+#: transport-helper.c:1119
 msgid "couldn't run fast-export"
 msgstr "無法執行 fast-export"
 
-#: transport-helper.c:1121
+#: transport-helper.c:1124
 msgid "error while running fast-export"
 msgstr "執行 fast-export 時發生錯誤"
 
-#: transport-helper.c:1146
+#: transport-helper.c:1149
 #, c-format
 msgid ""
 "No refs in common and none specified; doing nothing.\n"
@@ -8967,52 +9209,52 @@ msgstr ""
 "沒有共同的引用並且也沒有指定,什麼也不會做。\n"
 "您或許得指定一個分支。\n"
 
-#: transport-helper.c:1228
+#: transport-helper.c:1231
 #, c-format
 msgid "unsupported object format '%s'"
 msgstr "不支援的物件格式「%s」"
 
-#: transport-helper.c:1237
+#: transport-helper.c:1240
 #, c-format
 msgid "malformed response in ref list: %s"
 msgstr "引用列表中格式錯誤的回應:%s"
 
-#: transport-helper.c:1389
+#: transport-helper.c:1392
 #, c-format
 msgid "read(%s) failed"
 msgstr "讀取(%s)失敗"
 
-#: transport-helper.c:1416
+#: transport-helper.c:1419
 #, c-format
 msgid "write(%s) failed"
 msgstr "寫(%s)失敗"
 
-#: transport-helper.c:1465
+#: transport-helper.c:1468
 #, c-format
 msgid "%s thread failed"
 msgstr "%s 執行緒失敗"
 
-#: transport-helper.c:1469
+#: transport-helper.c:1472
 #, c-format
 msgid "%s thread failed to join: %s"
 msgstr "%s 執行緒等待失敗:%s"
 
-#: transport-helper.c:1488 transport-helper.c:1492
+#: transport-helper.c:1491 transport-helper.c:1495
 #, c-format
 msgid "can't start thread for copying data: %s"
 msgstr "不能啟動執行緒來複製資料:%s"
 
-#: transport-helper.c:1529
+#: transport-helper.c:1532
 #, c-format
 msgid "%s process failed to wait"
 msgstr "%s 進程等待失敗"
 
-#: transport-helper.c:1533
+#: transport-helper.c:1536
 #, c-format
 msgid "%s process failed"
 msgstr "%s 進程失敗"
 
-#: transport-helper.c:1551 transport-helper.c:1560
+#: transport-helper.c:1554 transport-helper.c:1563
 msgid "can't start thread for copying data"
 msgstr "不能啟動執行緒來複製資料"
 
@@ -9021,58 +9263,58 @@ msgstr "不能啟動執行緒來複製資料"
 msgid "Would set upstream of '%s' to '%s' of '%s'\n"
 msgstr "將要設定 '%1$s' 的上游為 '%3$s' 的 '%2$s'\n"
 
-#: transport.c:145
+#: transport.c:138
 #, c-format
 msgid "could not read bundle '%s'"
-msgstr "無法讀取 bundle '%s'"
+msgstr "無法讀取「%s」套件"
 
-#: transport.c:227
+#: transport.c:234
 #, c-format
 msgid "transport: invalid depth option '%s'"
 msgstr "傳輸:無效的深度選項 '%s'"
 
-#: transport.c:279
+#: transport.c:289
 msgid "see protocol.version in 'git help config' for more details"
 msgstr "檢視 'git help config' 中的 protocol.version 取得更多訊息"
 
-#: transport.c:280
+#: transport.c:290
 msgid "server options require protocol version 2 or later"
 msgstr "服務端選項需要版本 2 協定或更高"
 
-#: transport.c:407
+#: transport.c:418
 msgid "server does not support wait-for-done"
 msgstr "伺服器不支援「等待完成」(wait-for-done) 功能"
 
-#: transport.c:759
+#: transport.c:770
 msgid "could not parse transport.color.* config"
 msgstr "不能解析 transport.color.* 設定"
 
-#: transport.c:834
+#: transport.c:845
 msgid "support for protocol v2 not implemented yet"
 msgstr "協定 v2 的支援尚未實現"
 
-#: transport.c:967
+#: transport.c:978
 #, c-format
 msgid "unknown value for config '%s': %s"
 msgstr "設定 '%s' 的取值未知:%s"
 
-#: transport.c:1033
+#: transport.c:1044
 #, c-format
 msgid "transport '%s' not allowed"
 msgstr "傳輸 '%s' 不允許"
 
-#: transport.c:1082
+#: transport.c:1093
 msgid "git-over-rsync is no longer supported"
 msgstr "不再支援 git-over-rsync"
 
-#: transport.c:1185
+#: transport.c:1196
 #, c-format
 msgid ""
 "The following submodule paths contain changes that can\n"
 "not be found on any remote:\n"
 msgstr "下列子模組路徑所包含的修改在任何遠端來源中都找不到:\n"
 
-#: transport.c:1189
+#: transport.c:1200
 #, c-format
 msgid ""
 "\n"
@@ -9099,11 +9341,11 @@ msgstr ""
 "以推送至遠端。\n"
 "\n"
 
-#: transport.c:1197
+#: transport.c:1208
 msgid "Aborting."
 msgstr "正在終止。"
 
-#: transport.c:1343
+#: transport.c:1354
 msgid "failed to push all needed submodules"
 msgstr "不能推送全部需要的子模組"
 
@@ -9373,16 +9615,16 @@ msgstr ""
 "以下路徑發生碰撞(如:在不區分大小寫的檔案系統上的區分大小寫的路徑),\n"
 "並且碰撞組中只有一個檔案存在工作區中:\n"
 
-#: unpack-trees.c:1636
+#: unpack-trees.c:1664
 msgid "Updating index flags"
 msgstr "正在更新索引旗標"
 
-#: unpack-trees.c:2803
+#: unpack-trees.c:2925
 #, c-format
 msgid "worktree and untracked commit have duplicate entries: %s"
 msgstr "工作區和未追蹤提交有重複項目:%s"
 
-#: upload-pack.c:1565
+#: upload-pack.c:1579
 msgid "expected flush after fetch arguments"
 msgstr "在 fetch 引數應為一個 flush 包"
 
@@ -9419,123 +9661,137 @@ msgstr "無效的 '..' 路徑區塊"
 msgid "Fetching objects"
 msgstr "正在抓取物件"
 
-#: worktree.c:238 builtin/am.c:2209 builtin/bisect--helper.c:156
+#: worktree.c:237 builtin/am.c:2210 builtin/bisect--helper.c:156
 #, c-format
 msgid "failed to read '%s'"
 msgstr "讀取 '%s' 失敗"
 
-#: worktree.c:305
+#: worktree.c:304
 #, c-format
 msgid "'%s' at main working tree is not the repository directory"
 msgstr "在主工作區的 '%s' 不是版本庫目錄"
 
-#: worktree.c:316
+#: worktree.c:315
 #, c-format
 msgid "'%s' file does not contain absolute path to the working tree location"
 msgstr "檔案 '%s' 不包含工作區的絕對路徑"
 
-#: worktree.c:328
+#: worktree.c:327
 #, c-format
 msgid "'%s' does not exist"
 msgstr "'%s' 不存在"
 
-#: worktree.c:334
+#: worktree.c:333
 #, c-format
 msgid "'%s' is not a .git file, error code %d"
 msgstr "'%s' 不是一個 .git 檔案,錯誤碼 %d"
 
-#: worktree.c:343
+#: worktree.c:342
 #, c-format
 msgid "'%s' does not point back to '%s'"
 msgstr "'%s' 沒有指回到 '%s'"
 
-#: worktree.c:604
+#: worktree.c:600
 msgid "not a directory"
 msgstr "不是目錄"
 
-#: worktree.c:613
+#: worktree.c:609
 msgid ".git is not a file"
 msgstr ".git 不是檔案"
 
-#: worktree.c:615
+#: worktree.c:611
 msgid ".git file broken"
 msgstr ".git 檔案損毀"
 
-#: worktree.c:617
+#: worktree.c:613
 msgid ".git file incorrect"
 msgstr ".git 檔案不正確"
 
-#: worktree.c:723
+#: worktree.c:719
 msgid "not a valid path"
 msgstr "非有效路徑"
 
-#: worktree.c:729
+#: worktree.c:725
 msgid "unable to locate repository; .git is not a file"
 msgstr "無法定位版本庫;.git 不是檔案"
 
-#: worktree.c:733
+#: worktree.c:729
 msgid "unable to locate repository; .git file does not reference a repository"
 msgstr "無法定位版本庫:.git 檔案未指向版本庫"
 
-#: worktree.c:737
+#: worktree.c:733
 msgid "unable to locate repository; .git file broken"
 msgstr "無法定位版本庫;.git 檔案損壞"
 
-#: worktree.c:743
+#: worktree.c:739
 msgid "gitdir unreadable"
 msgstr "無法讀取 gitdir"
 
-#: worktree.c:747
+#: worktree.c:743
 msgid "gitdir incorrect"
 msgstr "不正確的 gitdir"
 
-#: worktree.c:772
+#: worktree.c:768
 msgid "not a valid directory"
 msgstr "非有效目錄"
 
-#: worktree.c:778
+#: worktree.c:774
 msgid "gitdir file does not exist"
 msgstr "找不到 gitdir 檔案"
 
-#: worktree.c:783 worktree.c:792
+#: worktree.c:779 worktree.c:788
 #, c-format
 msgid "unable to read gitdir file (%s)"
 msgstr "無法讀取 gitdir 檔案 (%s)"
 
-#: worktree.c:802
+#: worktree.c:798
 #, c-format
 msgid "short read (expected %<PRIuMAX> bytes, read %<PRIuMAX>)"
 msgstr "讀取過短(預期有 %<PRIuMAX> 位元組,只讀到 %<PRIuMAX>)"
 
-#: worktree.c:810
+#: worktree.c:806
 msgid "invalid gitdir file"
 msgstr "gitdir 檔案無效"
 
-#: worktree.c:818
+#: worktree.c:814
 msgid "gitdir file points to non-existent location"
 msgstr "gitdir 檔案指向的位置不存在"
 
-#: wrapper.c:151
+#: worktree.c:830
+#, c-format
+msgid "unable to set %s in '%s'"
+msgstr "無法在「%2$s」設定 %1$s"
+
+#: worktree.c:832
+#, c-format
+msgid "unable to unset %s in '%s'"
+msgstr "無法取消在「%2$s」設定的 %1$s"
+
+#: worktree.c:852
+msgid "failed to set extensions.worktreeConfig setting"
+msgstr "無法設定 extensions.worktreeConfig 設定"
+
+#: wrapper.c:161
 #, c-format
 msgid "could not setenv '%s'"
 msgstr "無法 setenv '%s'"
 
-#: wrapper.c:203
+#: wrapper.c:213
 #, c-format
 msgid "unable to create '%s'"
 msgstr "不能建立 '%s'"
 
-#: wrapper.c:205 wrapper.c:375
+#: wrapper.c:215 wrapper.c:385
 #, c-format
 msgid "could not open '%s' for reading and writing"
 msgstr "無法開啟 '%s' 進行讀寫"
 
-#: wrapper.c:406 wrapper.c:607
+#: wrapper.c:416 wrapper.c:683
 #, c-format
 msgid "unable to access '%s'"
 msgstr "不能存取 '%s'"
 
-#: wrapper.c:615
+#: wrapper.c:691
 msgid "unable to get current working directory"
 msgstr "不能取得目前工作目錄"
 
@@ -9574,11 +9830,11 @@ msgstr "  (酌情使用 \"git add/rm <檔案>...\" 標記解決方案)"
 msgid "  (use \"git rm <file>...\" to mark resolution)"
 msgstr "  (使用 \"git rm <檔案>...\" 標記解決方案)"
 
-#: wt-status.c:211 wt-status.c:1131
+#: wt-status.c:211 wt-status.c:1140
 msgid "Changes to be committed:"
 msgstr "要提交的變更:"
 
-#: wt-status.c:234 wt-status.c:1140
+#: wt-status.c:234 wt-status.c:1149
 msgid "Changes not staged for commit:"
 msgstr "尚未暫存以備提交的變更:"
 
@@ -9684,21 +9940,21 @@ msgstr "修改的內容, "
 msgid "untracked content, "
 msgstr "未追蹤的內容, "
 
-#: wt-status.c:964
+#: wt-status.c:973
 #, c-format
 msgid "Your stash currently has %d entry"
 msgid_plural "Your stash currently has %d entries"
 msgstr[0] "您的儲藏區目前有 %d 條紀錄"
 
-#: wt-status.c:995
+#: wt-status.c:1004
 msgid "Submodules changed but not updated:"
 msgstr "子模組已修改但尚未更新:"
 
-#: wt-status.c:997
+#: wt-status.c:1006
 msgid "Submodule changes to be committed:"
 msgstr "要提交的子模組變更:"
 
-#: wt-status.c:1079
+#: wt-status.c:1088
 msgid ""
 "Do not modify or remove the line above.\n"
 "Everything below it will be ignored."
@@ -9706,7 +9962,7 @@ msgstr ""
 "不要改動或刪除上面的一行。\n"
 "其下所有內容都將被忽略。"
 
-#: wt-status.c:1171
+#: wt-status.c:1180
 #, c-format
 msgid ""
 "\n"
@@ -9717,288 +9973,288 @@ msgstr ""
 "花了 %.2f 秒才計算出分支的領先/落後範圍。\n"
 "為避免,您可以使用 '--no-ahead-behind'。\n"
 
-#: wt-status.c:1201
+#: wt-status.c:1210
 msgid "You have unmerged paths."
 msgstr "您有尚未合併的路徑。"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1204
+#: wt-status.c:1213
 msgid "  (fix conflicts and run \"git commit\")"
 msgstr "  (解決衝突並執行 \"git commit\")"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1206
+#: wt-status.c:1215
 msgid "  (use \"git merge --abort\" to abort the merge)"
 msgstr "  (使用 \"git merge --abort\" 終止合併)"
 
-#: wt-status.c:1210
+#: wt-status.c:1219
 msgid "All conflicts fixed but you are still merging."
 msgstr "所有衝突已解決但您仍處於合併中。"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1213
+#: wt-status.c:1222
 msgid "  (use \"git commit\" to conclude merge)"
 msgstr "  (使用 \"git commit\" 結束合併)"
 
-#: wt-status.c:1224
+#: wt-status.c:1233
 msgid "You are in the middle of an am session."
 msgstr "您正處於 am 動作過程中。"
 
-#: wt-status.c:1227
+#: wt-status.c:1236
 msgid "The current patch is empty."
 msgstr "目前的修補檔為空。"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1232
+#: wt-status.c:1241
 msgid "  (fix conflicts and then run \"git am --continue\")"
 msgstr "  (解決衝突,然後執行 \"git am --continue\")"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1234
+#: wt-status.c:1243
 msgid "  (use \"git am --skip\" to skip this patch)"
 msgstr "  (使用 \"git am --skip\" 略過此修補檔)"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1237
+#: wt-status.c:1246
 msgid ""
 "  (use \"git am --allow-empty\" to record this patch as an empty commit)"
 msgstr "  (使用 \"git am --allow-empty\" 將目前修補檔錄製為空白提交)"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1239
+#: wt-status.c:1248
 msgid "  (use \"git am --abort\" to restore the original branch)"
 msgstr "  (使用 \"git am --abort\" 復原原有分支)"
 
-#: wt-status.c:1372
+#: wt-status.c:1381
 msgid "git-rebase-todo is missing."
 msgstr "git-rebase-todo 遺失。"
 
-#: wt-status.c:1374
+#: wt-status.c:1383
 msgid "No commands done."
 msgstr "沒有指令被執行。"
 
-#: wt-status.c:1377
+#: wt-status.c:1386
 #, c-format
-msgid "Last command done (%d command done):"
-msgid_plural "Last commands done (%d commands done):"
-msgstr[0] "最後一條指令已完成(%d 條指令被執行):"
+msgid "Last command done (%<PRIuMAX> command done):"
+msgid_plural "Last commands done (%<PRIuMAX> commands done):"
+msgstr[0] "上次完成的命令(完成 %<PRIuMAX> 條指令):"
 
-#: wt-status.c:1388
+#: wt-status.c:1397
 #, c-format
 msgid "  (see more in file %s)"
 msgstr "  (更多參見檔案 %s)"
 
-#: wt-status.c:1393
+#: wt-status.c:1402
 msgid "No commands remaining."
 msgstr "未剩下任何指令。"
 
-#: wt-status.c:1396
+#: wt-status.c:1405
 #, c-format
-msgid "Next command to do (%d remaining command):"
-msgid_plural "Next commands to do (%d remaining commands):"
-msgstr[0] "接下來要執行的指令(剩餘 %d 條指令):"
+msgid "Next command to do (%<PRIuMAX> remaining command):"
+msgid_plural "Next commands to do (%<PRIuMAX> remaining commands):"
+msgstr[0] "接下來要執行的命令(剩餘 %<PRIuMAX> 條命令):"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1404
+#: wt-status.c:1413
 msgid "  (use \"git rebase --edit-todo\" to view and edit)"
 msgstr "  (使用 \"git rebase --edit-todo\" 來檢視和編輯)"
 
-#: wt-status.c:1416
+#: wt-status.c:1425
 #, c-format
 msgid "You are currently rebasing branch '%s' on '%s'."
 msgstr "您在執行將分支 '%s' 重定基底到 '%s' 的動作。"
 
-#: wt-status.c:1421
+#: wt-status.c:1430
 msgid "You are currently rebasing."
 msgstr "您在執行重定基底動作。"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1434
+#: wt-status.c:1443
 msgid "  (fix conflicts and then run \"git rebase --continue\")"
 msgstr "  (解決衝突,然後執行 \"git rebase --continue\")"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1436
+#: wt-status.c:1445
 msgid "  (use \"git rebase --skip\" to skip this patch)"
 msgstr "  (使用 \"git rebase --skip\" 略過此修補檔)"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1438
+#: wt-status.c:1447
 msgid "  (use \"git rebase --abort\" to check out the original branch)"
 msgstr "  (使用 \"git rebase --abort\" 以簽出原有分支)"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1445
+#: wt-status.c:1454
 msgid "  (all conflicts fixed: run \"git rebase --continue\")"
 msgstr "  (所有衝突已解決:執行 \"git rebase --continue\")"
 
-#: wt-status.c:1449
+#: wt-status.c:1458
 #, c-format
 msgid ""
 "You are currently splitting a commit while rebasing branch '%s' on '%s'."
 msgstr "您在執行將分支 '%s' 重定基底到 '%s' 的動作時分割提交。"
 
-#: wt-status.c:1454
+#: wt-status.c:1463
 msgid "You are currently splitting a commit during a rebase."
 msgstr "您在執行重定基底動作時分割提交。"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1457
+#: wt-status.c:1466
 msgid "  (Once your working directory is clean, run \"git rebase --continue\")"
 msgstr "  (一旦您工作目錄提交乾淨後,執行 \"git rebase --continue\")"
 
-#: wt-status.c:1461
+#: wt-status.c:1470
 #, c-format
 msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
 msgstr "您在執行將分支 '%s' 重定基底到 '%s' 的動作時編輯提交。"
 
-#: wt-status.c:1466
+#: wt-status.c:1475
 msgid "You are currently editing a commit during a rebase."
 msgstr "您在執行重定基底動作時編輯提交。"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1469
+#: wt-status.c:1478
 msgid "  (use \"git commit --amend\" to amend the current commit)"
 msgstr "  (使用 \"git commit --amend\" 修補目前提交)"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1471
+#: wt-status.c:1480
 msgid ""
 "  (use \"git rebase --continue\" once you are satisfied with your changes)"
 msgstr "  (當您對您的修改滿意後執行 \"git rebase --continue\")"
 
-#: wt-status.c:1482
+#: wt-status.c:1491
 msgid "Cherry-pick currently in progress."
 msgstr "揀選動作正在進行中。"
 
-#: wt-status.c:1485
+#: wt-status.c:1494
 #, c-format
 msgid "You are currently cherry-picking commit %s."
 msgstr "您在執行揀選提交 %s 的動作。"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1492
+#: wt-status.c:1501
 msgid "  (fix conflicts and run \"git cherry-pick --continue\")"
 msgstr "  (解決衝突並執行 \"git cherry-pick --continue\")"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1495
+#: wt-status.c:1504
 msgid "  (run \"git cherry-pick --continue\" to continue)"
 msgstr "  (執行 \"git cherry-pick --continue\" 以繼續)"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1498
+#: wt-status.c:1507
 msgid "  (all conflicts fixed: run \"git cherry-pick --continue\")"
 msgstr "  (所有衝突已解決:執行 \"git cherry-pick --continue\")"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1500
+#: wt-status.c:1509
 msgid "  (use \"git cherry-pick --skip\" to skip this patch)"
 msgstr "  (使用 \"git cherry-pick --skip\" 略過此修補檔)"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1502
+#: wt-status.c:1511
 msgid "  (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
 msgstr "  (使用 \"git cherry-pick --abort\" 以取消揀選動作)"
 
-#: wt-status.c:1512
+#: wt-status.c:1521
 msgid "Revert currently in progress."
 msgstr "還原動作正在進行中。"
 
-#: wt-status.c:1515
+#: wt-status.c:1524
 #, c-format
 msgid "You are currently reverting commit %s."
 msgstr "您在執行反轉提交 %s 的動作。"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1521
+#: wt-status.c:1530
 msgid "  (fix conflicts and run \"git revert --continue\")"
 msgstr "  (解決衝突並執行 \"git revert --continue\")"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1524
+#: wt-status.c:1533
 msgid "  (run \"git revert --continue\" to continue)"
 msgstr "  (執行 \"git revert --continue\" 以繼續)"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1527
+#: wt-status.c:1536
 msgid "  (all conflicts fixed: run \"git revert --continue\")"
 msgstr "  (所有衝突已解決:執行 \"git revert --continue\")"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1529
+#: wt-status.c:1538
 msgid "  (use \"git revert --skip\" to skip this patch)"
 msgstr "  (使用 \"git revert --skip\" 略過此修補檔)"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1531
+#: wt-status.c:1540
 msgid "  (use \"git revert --abort\" to cancel the revert operation)"
 msgstr "  (使用 \"git revert --abort\" 以取消反轉提交動作)"
 
-#: wt-status.c:1541
+#: wt-status.c:1550
 #, c-format
 msgid "You are currently bisecting, started from branch '%s'."
 msgstr "您在執行從分支 '%s' 開始的二分搜尋動作。"
 
-#: wt-status.c:1545
+#: wt-status.c:1554
 msgid "You are currently bisecting."
 msgstr "您在執行二分搜尋動作。"
 
 #  譯者:請維持前導空格
-#: wt-status.c:1548
+#: wt-status.c:1557
 msgid "  (use \"git bisect reset\" to get back to the original branch)"
 msgstr "  (使用 \"git bisect reset\" 簽出原有分支)"
 
-#: wt-status.c:1559
+#: wt-status.c:1568
 msgid "You are in a sparse checkout."
 msgstr "您正在稀疏簽出的工作區中。"
 
-#: wt-status.c:1562
+#: wt-status.c:1571
 #, c-format
 msgid "You are in a sparse checkout with %d%% of tracked files present."
 msgstr "您處於稀疏簽出狀態,包含 %d%% 的追蹤檔案。"
 
-#: wt-status.c:1806
+#: wt-status.c:1815
 msgid "On branch "
 msgstr "位於分支 "
 
-#: wt-status.c:1813
+#: wt-status.c:1822
 msgid "interactive rebase in progress; onto "
 msgstr "互動式重定基底動作正在進行中;至 "
 
-#: wt-status.c:1815
+#: wt-status.c:1824
 msgid "rebase in progress; onto "
 msgstr "重定基底動作正在進行中;至 "
 
-#: wt-status.c:1820
+#: wt-status.c:1829
 msgid "HEAD detached at "
 msgstr "開頭指標分離於 "
 
-#: wt-status.c:1822
+#: wt-status.c:1831
 msgid "HEAD detached from "
 msgstr "開頭指標分離自 "
 
-#: wt-status.c:1825
+#: wt-status.c:1834
 msgid "Not currently on any branch."
 msgstr "目前不在任何分支上。"
 
-#: wt-status.c:1842
+#: wt-status.c:1851
 msgid "Initial commit"
 msgstr "初始提交"
 
-#: wt-status.c:1843
+#: wt-status.c:1852
 msgid "No commits yet"
 msgstr "尚無提交"
 
-#: wt-status.c:1857
+#: wt-status.c:1866
 msgid "Untracked files"
 msgstr "未追蹤的檔案"
 
-#: wt-status.c:1859
+#: wt-status.c:1868
 msgid "Ignored files"
 msgstr "忽略的檔案"
 
-#: wt-status.c:1863
+#: wt-status.c:1872
 #, c-format
 msgid ""
 "It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -10008,97 +10264,97 @@ msgstr ""
 "耗費了 %.2f 秒以枚舉未追蹤的檔案。'status -uno' 也許能提高速度,\n"
 "但您需要小心不要忘了新增新檔案(參見 'git help status')。"
 
-#: wt-status.c:1869
+#: wt-status.c:1878
 #, c-format
 msgid "Untracked files not listed%s"
 msgstr "未追蹤的檔案沒有列出%s"
 
 #  譯者:中文字串拼接,可刪除前導空格
-#: wt-status.c:1871
+#: wt-status.c:1880
 msgid " (use -u option to show untracked files)"
 msgstr " (使用 -u 參數顯示未追蹤的檔案)"
 
-#: wt-status.c:1877
+#: wt-status.c:1886
 msgid "No changes"
 msgstr "沒有修改"
 
-#: wt-status.c:1882
+#: wt-status.c:1891
 #, c-format
 msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
 msgstr "修改尚未加入提交(使用 \"git add\" 和/或 \"git commit -a\")\n"
 
-#: wt-status.c:1886
+#: wt-status.c:1895
 #, c-format
 msgid "no changes added to commit\n"
 msgstr "修改尚未加入提交\n"
 
-#: wt-status.c:1890
+#: wt-status.c:1899
 #, c-format
 msgid ""
 "nothing added to commit but untracked files present (use \"git add\" to "
 "track)\n"
 msgstr "提交為空,但是存在尚未追蹤的檔案(使用 \"git add\" 建立追蹤)\n"
 
-#: wt-status.c:1894
+#: wt-status.c:1903
 #, c-format
 msgid "nothing added to commit but untracked files present\n"
 msgstr "提交為空,但是存在尚未追蹤的檔案\n"
 
 #  譯者:中文字串拼接,可刪除前導空格
-#: wt-status.c:1898
+#: wt-status.c:1907
 #, c-format
 msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
 msgstr "無檔案要提交(建立/複製檔案並使用 \"git add\" 建立追蹤)\n"
 
-#: wt-status.c:1902 wt-status.c:1908
+#: wt-status.c:1911 wt-status.c:1917
 #, c-format
 msgid "nothing to commit\n"
 msgstr "無檔案要提交\n"
 
 #  譯者:中文字串拼接,可刪除前導空格
-#: wt-status.c:1905
+#: wt-status.c:1914
 #, c-format
 msgid "nothing to commit (use -u to show untracked files)\n"
 msgstr "無檔案要提交(使用 -u 顯示未追蹤的檔案)\n"
 
 #  譯者:中文字串拼接,可刪除前導空格
-#: wt-status.c:1910
+#: wt-status.c:1919
 #, c-format
 msgid "nothing to commit, working tree clean\n"
 msgstr "沒有要提交的檔案,工作區為乾淨狀態\n"
 
-#: wt-status.c:2015
+#: wt-status.c:2024
 msgid "No commits yet on "
 msgstr "尚無提交在 "
 
-#: wt-status.c:2019
+#: wt-status.c:2028
 msgid "HEAD (no branch)"
 msgstr "HEAD(非分支)"
 
-#: wt-status.c:2050
+#: wt-status.c:2059
 msgid "different"
 msgstr "不同"
 
 #  譯者:請維持句尾空格
-#: wt-status.c:2052 wt-status.c:2060
+#: wt-status.c:2061 wt-status.c:2069
 msgid "behind "
 msgstr "落後 "
 
-#: wt-status.c:2055 wt-status.c:2058
+#: wt-status.c:2064 wt-status.c:2067
 msgid "ahead "
 msgstr "領先 "
 
 #. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2596
+#: wt-status.c:2605
 #, c-format
 msgid "cannot %s: You have unstaged changes."
 msgstr "不能%s:您有未暫存的變更。"
 
-#: wt-status.c:2602
+#: wt-status.c:2611
 msgid "additionally, your index contains uncommitted changes."
 msgstr "另外,您的索引中包含未提交的變更。"
 
-#: wt-status.c:2604
+#: wt-status.c:2613
 #, c-format
 msgid "cannot %s: Your index contains uncommitted changes."
 msgstr "不能%s:您的索引中包含未提交的變更。"
@@ -10121,145 +10377,149 @@ msgstr "無法啟動 accept_thread “%s”"
 msgid "could not start worker[0] for '%s'"
 msgstr "無法啟動「%s」的 worker[0]"
 
-#: compat/precompose_utf8.c:58 builtin/clone.c:347
+#: compat/precompose_utf8.c:58 builtin/clone.c:353
 #, c-format
 msgid "failed to unlink '%s'"
 msgstr "刪除 '%s' 失敗"
 
+#: compat/fsmonitor/fsm-listen-darwin.c:355
+msgid "Unable to create FSEventStream."
+msgstr "無法建立 FSEventStream。"
+
+#: compat/fsmonitor/fsm-listen-darwin.c:403
+msgid "Failed to start the FSEventStream"
+msgstr "無法啟動 FSEventStream"
+
 #: builtin/add.c:26
 msgid "git add [<options>] [--] <pathspec>..."
 msgstr "git add [<選項>] [--] <路徑規格>..."
 
-#: builtin/add.c:64
+#: builtin/add.c:63
 #, c-format
 msgid "cannot chmod %cx '%s'"
 msgstr "無法 chmod %cx ‘%s’"
 
-#: builtin/add.c:106
+#: builtin/add.c:105
 #, c-format
 msgid "unexpected diff status %c"
 msgstr "意外的差異狀態 %c"
 
-#: builtin/add.c:111 builtin/commit.c:298
+#: builtin/add.c:110 builtin/commit.c:299
 msgid "updating files failed"
 msgstr "更新檔案失敗"
 
-#: builtin/add.c:121
+#: builtin/add.c:120
 #, c-format
 msgid "remove '%s'\n"
 msgstr "刪除 '%s'\n"
 
-#: builtin/add.c:205
+#: builtin/add.c:204
 msgid "Unstaged changes after refreshing the index:"
 msgstr "重新整理索引之後尚未被暫存的變更:"
 
-#: builtin/add.c:313 builtin/rev-parse.c:993
+#: builtin/add.c:312 builtin/rev-parse.c:993
 msgid "Could not read the index"
 msgstr "不能讀取索引"
 
-#: builtin/add.c:326
+#: builtin/add.c:325
 msgid "Could not write patch"
 msgstr "不能生成修補檔"
 
-#: builtin/add.c:329
+#: builtin/add.c:328
 msgid "editing patch failed"
 msgstr "編輯修補檔失敗"
 
-#: builtin/add.c:332
+#: builtin/add.c:331
 #, c-format
 msgid "Could not stat '%s'"
 msgstr "不能對 '%s' 呼叫 stat"
 
-#: builtin/add.c:334
+#: builtin/add.c:333
 msgid "Empty patch. Aborted."
 msgstr "空修補檔。異常終止。"
 
-#: builtin/add.c:340
+#: builtin/add.c:339
 #, c-format
 msgid "Could not apply '%s'"
 msgstr "不能套用 '%s'"
 
-#: builtin/add.c:348
+#: builtin/add.c:347
 msgid "The following paths are ignored by one of your .gitignore files:\n"
 msgstr "下列路徑根據您的一個 .gitignore 檔案而被忽略:\n"
 
-#: builtin/add.c:368 builtin/clean.c:927 builtin/fetch.c:174 builtin/mv.c:124
+#: builtin/add.c:367 builtin/clean.c:927 builtin/fetch.c:175 builtin/mv.c:124
 #: builtin/prune-packed.c:14 builtin/pull.c:208 builtin/push.c:550
-#: builtin/remote.c:1429 builtin/rm.c:244 builtin/send-pack.c:194
+#: builtin/remote.c:1454 builtin/rm.c:244 builtin/send-pack.c:194
 msgid "dry run"
 msgstr "測試執行"
 
-#: builtin/add.c:369 builtin/check-ignore.c:22 builtin/commit.c:1484
-#: builtin/count-objects.c:98 builtin/fsck.c:789 builtin/log.c:2313
+#: builtin/add.c:368 builtin/check-ignore.c:22 builtin/commit.c:1483
+#: builtin/count-objects.c:98 builtin/fsck.c:789 builtin/log.c:2338
 #: builtin/mv.c:123 builtin/read-tree.c:120
 msgid "be verbose"
 msgstr "詳細輸出"
 
-#: builtin/add.c:371
+#: builtin/add.c:370
 msgid "interactive picking"
 msgstr "互動式揀選"
 
-#: builtin/add.c:372 builtin/checkout.c:1581 builtin/reset.c:409
+#: builtin/add.c:371 builtin/checkout.c:1599 builtin/reset.c:417
 msgid "select hunks interactively"
 msgstr "互動式挑選資料區塊"
 
-#: builtin/add.c:373
+#: builtin/add.c:372
 msgid "edit current diff and apply"
 msgstr "編輯目前差異並套用"
 
-#: builtin/add.c:374
+#: builtin/add.c:373
 msgid "allow adding otherwise ignored files"
 msgstr "允許新增忽略的檔案"
 
-#: builtin/add.c:375
+#: builtin/add.c:374
 msgid "update tracked files"
 msgstr "更新已追蹤的檔案"
 
-#: builtin/add.c:376
+#: builtin/add.c:375
 msgid "renormalize EOL of tracked files (implies -u)"
 msgstr "對已追蹤檔案(隱含 -u)重新歸一換行符號"
 
-#: builtin/add.c:377
+#: builtin/add.c:376
 msgid "record only the fact that the path will be added later"
 msgstr "只記錄,該路徑稍後再新增"
 
-#: builtin/add.c:378
+#: builtin/add.c:377
 msgid "add changes from all tracked and untracked files"
 msgstr "新增所有改變的已追蹤檔案和未追蹤檔案"
 
-#: builtin/add.c:381
+#: builtin/add.c:380
 msgid "ignore paths removed in the working tree (same as --no-all)"
 msgstr "忽略工作區中移除的路徑(和 --no-all 相同)"
 
-#: builtin/add.c:383
+#: builtin/add.c:382
 msgid "don't add, only refresh the index"
 msgstr "不新增,只重新整理索引"
 
-#: builtin/add.c:384
+#: builtin/add.c:383
 msgid "just skip files which cannot be added because of errors"
 msgstr "略過因發生錯誤不能新增的檔案"
 
-#: builtin/add.c:385
+#: builtin/add.c:384
 msgid "check if - even missing - files are ignored in dry run"
 msgstr "檢查在測試執行模式下檔案(即使不存在)是否被忽略"
 
-#: builtin/add.c:386 builtin/mv.c:128 builtin/rm.c:251
+#: builtin/add.c:385 builtin/mv.c:128 builtin/rm.c:251
 msgid "allow updating entries outside of the sparse-checkout cone"
 msgstr "允許更新稀疏簽出 cone 外的項目"
 
-#: builtin/add.c:388 builtin/update-index.c:1004
+#: builtin/add.c:387 builtin/update-index.c:1023
 msgid "override the executable bit of the listed files"
 msgstr "覆蓋列表裡檔案的可執行位"
 
-#: builtin/add.c:390
+#: builtin/add.c:389
 msgid "warn when adding an embedded repository"
 msgstr "建立一個嵌入式版本庫時給予警告"
 
-#: builtin/add.c:392
-msgid "backend for `git stash -p`"
-msgstr "`git stash -p` 的後端"
-
-#: builtin/add.c:410
+#: builtin/add.c:407
 #, c-format
 msgid ""
 "You've added another git repository inside your current repository.\n"
@@ -10288,12 +10548,12 @@ msgstr ""
 "\n"
 "參見 \"git help submodule\" 取得更多訊息。"
 
-#: builtin/add.c:439
+#: builtin/add.c:436
 #, c-format
 msgid "adding embedded git repository: %s"
 msgstr "正在新增嵌入式 git 版本庫:%s"
 
-#: builtin/add.c:459
+#: builtin/add.c:456
 msgid ""
 "Use -f if you really want to add them.\n"
 "Turn this message off by running\n"
@@ -10303,27 +10563,27 @@ msgstr ""
 "如要關閉此訊息,請執行\n"
 "\"git config advice.addIgnoredFile false\""
 
-#: builtin/add.c:474
+#: builtin/add.c:471
 msgid "adding files failed"
 msgstr "新增檔案失敗"
 
-#: builtin/add.c:548
+#: builtin/add.c:534
 #, c-format
 msgid "--chmod param '%s' must be either -x or +x"
 msgstr "參數 --chmod 取值 '%s' 必須是 -x 或 +x"
 
-#: builtin/add.c:569 builtin/checkout.c:1751 builtin/commit.c:364
-#: builtin/reset.c:429 builtin/rm.c:275 builtin/stash.c:1713
+#: builtin/add.c:555 builtin/checkout.c:1770 builtin/commit.c:365
+#: builtin/reset.c:436 builtin/rm.c:275 builtin/stash.c:1702
 #, c-format
 msgid "'%s' and pathspec arguments cannot be used together"
 msgstr "「%s」和路徑規格引數不得同時使用"
 
-#: builtin/add.c:580
+#: builtin/add.c:566
 #, c-format
 msgid "Nothing specified, nothing added.\n"
 msgstr "沒有指定檔案,也沒有檔案被新增。\n"
 
-#: builtin/add.c:582
+#: builtin/add.c:568
 msgid ""
 "Maybe you wanted to say 'git add .'?\n"
 "Turn this message off by running\n"
@@ -10333,111 +10593,106 @@ msgstr ""
 "如要關閉此訊息,請執行\n"
 "\"git config advice.addEmptyPathspec false\""
 
-#: builtin/am.c:202
-#, c-format
-msgid "Invalid value for --empty: %s"
-msgstr "傳入 --empty 的值無效:%s"
-
-#: builtin/am.c:392
+#: builtin/am.c:393
 msgid "could not parse author script"
 msgstr "不能解析作者腳本"
 
-#: builtin/am.c:482
+#: builtin/am.c:483
 #, c-format
 msgid "'%s' was deleted by the applypatch-msg hook"
 msgstr "'%s' 被 applypatch-msg 掛鉤刪除"
 
-#: builtin/am.c:524
+#: builtin/am.c:525
 #, c-format
 msgid "Malformed input line: '%s'."
 msgstr "非法的輸入行:'%s'。"
 
-#: builtin/am.c:562
+#: builtin/am.c:563
 #, c-format
 msgid "Failed to copy notes from '%s' to '%s'"
 msgstr "從 '%s' 複製註解到 '%s' 時失敗"
 
-#: builtin/am.c:588
+#: builtin/am.c:589
 msgid "fseek failed"
 msgstr "fseek 失敗"
 
-#: builtin/am.c:776
+#: builtin/am.c:777
 #, c-format
 msgid "could not parse patch '%s'"
 msgstr "無法解析修補檔 '%s'"
 
-#: builtin/am.c:841
+#: builtin/am.c:842
 msgid "Only one StGIT patch series can be applied at once"
 msgstr "一次只能有一個 StGIT 修補檔佇列被套用"
 
-#: builtin/am.c:889
+#: builtin/am.c:890
 msgid "invalid timestamp"
 msgstr "無效的時間戳"
 
-#: builtin/am.c:894 builtin/am.c:906
+#: builtin/am.c:895 builtin/am.c:907
 msgid "invalid Date line"
 msgstr "無效的日期行"
 
-#: builtin/am.c:901
+#: builtin/am.c:902
 msgid "invalid timezone offset"
 msgstr "無效的時區位移值"
 
-#: builtin/am.c:994
+#: builtin/am.c:995
 msgid "Patch format detection failed."
 msgstr "修補檔格式偵測失敗。"
 
-#: builtin/am.c:999 builtin/clone.c:300
+#: builtin/am.c:1000 builtin/clone.c:306
 #, c-format
 msgid "failed to create directory '%s'"
 msgstr "建立目錄 '%s' 失敗"
 
-#: builtin/am.c:1004
+#: builtin/am.c:1005
 msgid "Failed to split patches."
 msgstr "分割修補檔失敗。"
 
-#: builtin/am.c:1153
+#: builtin/am.c:1154
 #, c-format
 msgid "When you have resolved this problem, run \"%s --continue\"."
 msgstr "當您解決這一問題,執行 \"%s --continue\"。"
 
-#: builtin/am.c:1154
+#: builtin/am.c:1155
 #, c-format
 msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
 msgstr "如果您想要略過這一修補檔,則執行 \"%s --skip\"。"
 
-#: builtin/am.c:1159
+#: builtin/am.c:1160
 #, c-format
 msgid "To record the empty patch as an empty commit, run \"%s --allow-empty\"."
 msgstr "若要將空白修補檔錄製為空白提交,請執行「%s --allow-empty」。"
 
-#: builtin/am.c:1161
+#: builtin/am.c:1162
 #, c-format
 msgid "To restore the original branch and stop patching, run \"%s --abort\"."
 msgstr "若要復原至原始分支並停止修補動作,執行 \"%s --abort\"。"
 
-#: builtin/am.c:1256
+#: builtin/am.c:1257
 msgid "Patch sent with format=flowed; space at the end of lines might be lost."
 msgstr "修補檔使用 format=flowed 格式傳送,行尾的空格可能會遺失。"
 
-#: builtin/am.c:1344
+#: builtin/am.c:1345
 #, c-format
 msgid "missing author line in commit %s"
 msgstr "在提交 %s 中缺少作者行"
 
-#: builtin/am.c:1347
+#: builtin/am.c:1348
 #, c-format
 msgid "invalid ident line: %.*s"
 msgstr "無效的身份標記:%.*s"
 
-#: builtin/am.c:1566
+#: builtin/am.c:1567
 msgid "Repository lacks necessary blobs to fall back on 3-way merge."
 msgstr "版本庫缺乏必要的資料物件以進行三方合併。"
 
-#: builtin/am.c:1568
+#: builtin/am.c:1569
 msgid "Using index info to reconstruct a base tree..."
 msgstr "使用索引來重建一個(三方合併的)基礎目錄樹..."
 
-#: builtin/am.c:1587
+#: builtin/am.c:1588
 msgid ""
 "Did you hand edit your patch?\n"
 "It does not apply to blobs recorded in its index."
@@ -10445,24 +10700,24 @@ msgstr ""
 "您是否曾手動編輯過您的修補檔?\n"
 "無法套用修補檔到索引中的資料物件上。"
 
-#: builtin/am.c:1593
+#: builtin/am.c:1594
 msgid "Falling back to patching base and 3-way merge..."
 msgstr "回落到基礎版本上修補及進行三方合併..."
 
-#: builtin/am.c:1619
+#: builtin/am.c:1620
 msgid "Failed to merge in the changes."
 msgstr "無法合併變更。"
 
-#: builtin/am.c:1651
+#: builtin/am.c:1652
 msgid "applying to an empty history"
 msgstr "正套用到一個空歷史上"
 
-#: builtin/am.c:1703 builtin/am.c:1707
+#: builtin/am.c:1704 builtin/am.c:1708
 #, c-format
 msgid "cannot resume: %s does not exist."
 msgstr "無法繼續:%s 不存在。"
 
-#: builtin/am.c:1725
+#: builtin/am.c:1726
 msgid "Commit Body is:"
 msgstr "提交內容為:"
 
@@ -10471,57 +10726,57 @@ msgstr "提交內容為:"
 #. in your translation. The program will only accept English
 #. input at this point.
 #.
-#: builtin/am.c:1735
+#: builtin/am.c:1736
 #, c-format
 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
 msgstr "套用?是[y]/否[n]/編輯[e]/檢視修補檔[v]/全部接受[a]: "
 
-#: builtin/am.c:1781 builtin/commit.c:409
+#: builtin/am.c:1782 builtin/commit.c:410
 msgid "unable to write index file"
 msgstr "無法寫入索引檔案"
 
-#: builtin/am.c:1785
+#: builtin/am.c:1786
 #, c-format
 msgid "Dirty index: cannot apply patches (dirty: %s)"
 msgstr "髒索引:不能套用修補檔(髒檔案:%s)"
 
-#: builtin/am.c:1827
+#: builtin/am.c:1828
 #, c-format
 msgid "Skipping: %.*s"
 msgstr "略過:%.*s"
 
-#: builtin/am.c:1832
+#: builtin/am.c:1833
 #, c-format
 msgid "Creating an empty commit: %.*s"
 msgstr "建立空白提交:%.*s"
 
-#: builtin/am.c:1836
+#: builtin/am.c:1837
 msgid "Patch is empty."
 msgstr "修補檔為空。"
 
-#: builtin/am.c:1847 builtin/am.c:1916
+#: builtin/am.c:1848 builtin/am.c:1917
 #, c-format
 msgid "Applying: %.*s"
 msgstr "套用:%.*s"
 
-#: builtin/am.c:1864
+#: builtin/am.c:1865
 msgid "No changes -- Patch already applied."
 msgstr "沒有變更——修補檔已經套用過。"
 
-#: builtin/am.c:1870
+#: builtin/am.c:1871
 #, c-format
 msgid "Patch failed at %s %.*s"
 msgstr "打修補檔失敗於 %s %.*s"
 
-#: builtin/am.c:1874
+#: builtin/am.c:1875
 msgid "Use 'git am --show-current-patch=diff' to see the failed patch"
 msgstr "用 'git am --show-current-patch=diff' 命令檢視失敗的修補檔"
 
-#: builtin/am.c:1920
+#: builtin/am.c:1921
 msgid "No changes - recorded it as an empty commit."
 msgstr "沒有變更 - 將其錄製為空白提交。"
 
-#: builtin/am.c:1922
+#: builtin/am.c:1923
 msgid ""
 "No changes - did you forget to use 'git add'?\n"
 "If there is nothing left to stage, chances are that something else\n"
@@ -10531,7 +10786,7 @@ msgstr ""
 "如果沒有什麼要新增到暫存區的,則很可能是其它提交已經引入了相同的變更。\n"
 "您也許想要略過這個修補檔。"
 
-#: builtin/am.c:1930
+#: builtin/am.c:1931
 msgid ""
 "You still have unmerged paths in your index.\n"
 "You should 'git add' each file with resolved conflicts to mark them as "
@@ -10542,183 +10797,174 @@ msgstr ""
 "您應該對已經衝突解決的每一個檔案執行 'git add' 來標記已經完成。 \n"
 "你可以對 \"由他們刪除\" 的檔案執行 `git rm` 指令。"
 
-#: builtin/am.c:2038 builtin/am.c:2042 builtin/am.c:2054 builtin/reset.c:448
-#: builtin/reset.c:456
+#: builtin/am.c:2039 builtin/am.c:2043 builtin/am.c:2055 builtin/reset.c:455
+#: builtin/reset.c:463
 #, c-format
 msgid "Could not parse object '%s'."
 msgstr "不能解析物件 '%s'。"
 
-#: builtin/am.c:2090 builtin/am.c:2166
+#: builtin/am.c:2091 builtin/am.c:2167
 msgid "failed to clean index"
 msgstr "清空索引失敗"
 
-#: builtin/am.c:2134
+#: builtin/am.c:2135
 msgid ""
 "You seem to have moved HEAD since the last 'am' failure.\n"
 "Not rewinding to ORIG_HEAD"
 msgstr "您好像在上一次 'am' 失敗後移動了 HEAD。未還原至 ORIG_HEAD"
 
-#: builtin/am.c:2242
-#, c-format
-msgid "Invalid value for --patch-format: %s"
-msgstr "無效的 --patch-format 值:%s"
-
-#: builtin/am.c:2285
-#, c-format
-msgid "Invalid value for --show-current-patch: %s"
-msgstr "無效的 --show-current-patch 值:%s"
-
-#: builtin/am.c:2289
+#: builtin/am.c:2292
 #, c-format
 msgid "options '%s=%s' and '%s=%s' cannot be used together"
 msgstr "「%s=%s」和「%s=%s」選項不得同時使用"
 
-#: builtin/am.c:2320
+#: builtin/am.c:2323
 msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
 msgstr "git am [<選項>] [(<mbox> | <Maildir>)...]"
 
-#: builtin/am.c:2321
+#: builtin/am.c:2324
 msgid "git am [<options>] (--continue | --skip | --abort)"
 msgstr "git am [<選項>] (--continue | --skip | --abort)"
 
-#: builtin/am.c:2327
+#: builtin/am.c:2330
 msgid "run interactively"
 msgstr "以互動式方式執行"
 
-#: builtin/am.c:2329
+#: builtin/am.c:2332
 msgid "historical option -- no-op"
 msgstr "老的參數 —— 無作用"
 
-#: builtin/am.c:2331
+#: builtin/am.c:2334
 msgid "allow fall back on 3way merging if needed"
 msgstr "如果必要,允許使用三方合併"
 
-#: builtin/am.c:2332 builtin/init-db.c:547 builtin/prune-packed.c:16
-#: builtin/repack.c:642 builtin/stash.c:962
+#: builtin/am.c:2335 builtin/init-db.c:547 builtin/prune-packed.c:16
+#: builtin/repack.c:646 builtin/stash.c:946
 msgid "be quiet"
 msgstr "靜默模式"
 
-#: builtin/am.c:2334
+#: builtin/am.c:2337
 msgid "add a Signed-off-by trailer to the commit message"
 msgstr "在提交說明結尾加入 Signed-off-by"
 
-#: builtin/am.c:2337
+#: builtin/am.c:2340
 msgid "recode into utf8 (default)"
 msgstr "使用 utf8 字元集(預設)"
 
-#: builtin/am.c:2339
+#: builtin/am.c:2342
 msgid "pass -k flag to git-mailinfo"
 msgstr "向 git-mailinfo 傳遞 -k 參數"
 
-#: builtin/am.c:2341
+#: builtin/am.c:2344
 msgid "pass -b flag to git-mailinfo"
 msgstr "向 git-mailinfo 傳遞 -b 參數"
 
-#: builtin/am.c:2343
+#: builtin/am.c:2346
 msgid "pass -m flag to git-mailinfo"
 msgstr "向 git-mailinfo 傳遞 -m 參數"
 
-#: builtin/am.c:2345
+#: builtin/am.c:2348
 msgid "pass --keep-cr flag to git-mailsplit for mbox format"
 msgstr "針對 mbox 格式,向 git-mailsplit 傳遞 --keep-cr 參數"
 
-#: builtin/am.c:2348
+#: builtin/am.c:2351
 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
 msgstr "不向 git-mailsplit 傳遞 --keep-cr 參數,覆蓋 am.keepcr 的設定"
 
-#: builtin/am.c:2351
+#: builtin/am.c:2354
 msgid "strip everything before a scissors line"
 msgstr "捨棄裁切線前的所有內容"
 
-#: builtin/am.c:2353
+#: builtin/am.c:2356
 msgid "pass it through git-mailinfo"
 msgstr "透過 git-mailinfo 傳遞"
 
-#: builtin/am.c:2356 builtin/am.c:2359 builtin/am.c:2362 builtin/am.c:2365
-#: builtin/am.c:2368 builtin/am.c:2371 builtin/am.c:2374 builtin/am.c:2377
-#: builtin/am.c:2383
+#: builtin/am.c:2359 builtin/am.c:2362 builtin/am.c:2365 builtin/am.c:2368
+#: builtin/am.c:2371 builtin/am.c:2374 builtin/am.c:2377 builtin/am.c:2380
+#: builtin/am.c:2386
 msgid "pass it through git-apply"
 msgstr "傳遞給 git-apply"
 
-#: builtin/am.c:2373 builtin/commit.c:1515 builtin/fmt-merge-msg.c:18
-#: builtin/fmt-merge-msg.c:21 builtin/grep.c:919 builtin/merge.c:263
+#: builtin/am.c:2376 builtin/commit.c:1514 builtin/fmt-merge-msg.c:18
+#: builtin/fmt-merge-msg.c:21 builtin/grep.c:920 builtin/merge.c:263
 #: builtin/pull.c:142 builtin/pull.c:204 builtin/pull.c:221
-#: builtin/rebase.c:1046 builtin/repack.c:653 builtin/repack.c:657
-#: builtin/repack.c:659 builtin/show-branch.c:649 builtin/show-ref.c:172
-#: builtin/tag.c:445 parse-options.h:154 parse-options.h:175
-#: parse-options.h:317
+#: builtin/rebase.c:1074 builtin/repack.c:657 builtin/repack.c:661
+#: builtin/repack.c:663 builtin/show-branch.c:650 builtin/show-ref.c:172
+#: builtin/tag.c:446 parse-options.h:159 parse-options.h:180
+#: parse-options.h:348
 msgid "n"
 msgstr "n"
 
-#: builtin/am.c:2379 builtin/branch.c:680 builtin/bugreport.c:109
-#: builtin/for-each-ref.c:41 builtin/replace.c:555 builtin/tag.c:479
-#: builtin/verify-tag.c:38
+#: builtin/am.c:2382 builtin/branch.c:695 builtin/bugreport.c:109
+#: builtin/cat-file.c:848 builtin/cat-file.c:852 builtin/cat-file.c:856
+#: builtin/for-each-ref.c:41 builtin/ls-tree.c:357 builtin/replace.c:555
+#: builtin/tag.c:480 builtin/verify-tag.c:38
 msgid "format"
 msgstr "格式"
 
-#: builtin/am.c:2380
+#: builtin/am.c:2383
 msgid "format the patch(es) are in"
 msgstr "修補檔的格式"
 
-#: builtin/am.c:2386
+#: builtin/am.c:2389
 msgid "override error message when patch failure occurs"
 msgstr "打修補檔失敗時顯示的錯誤訊息"
 
-#: builtin/am.c:2388
+#: builtin/am.c:2391
 msgid "continue applying patches after resolving a conflict"
 msgstr "衝突解決後繼續套用修補檔"
 
-#: builtin/am.c:2391
+#: builtin/am.c:2394
 msgid "synonyms for --continue"
 msgstr "和 --continue 同義"
 
-#: builtin/am.c:2394
+#: builtin/am.c:2397
 msgid "skip the current patch"
 msgstr "略過目前修補檔"
 
-#: builtin/am.c:2397
+#: builtin/am.c:2400
 msgid "restore the original branch and abort the patching operation"
 msgstr "還原原始分支並中止修補動作"
 
-#: builtin/am.c:2400
+#: builtin/am.c:2403
 msgid "abort the patching operation but keep HEAD where it is"
 msgstr "終止修補動作但保持 HEAD 不變"
 
-#: builtin/am.c:2404
+#: builtin/am.c:2407
 msgid "show the patch being applied"
 msgstr "顯示正在套用的修補檔"
 
-#: builtin/am.c:2408
+#: builtin/am.c:2411
 msgid "record the empty patch as an empty commit"
 msgstr "將空白修補檔錄製為空白提交"
 
-#: builtin/am.c:2412
+#: builtin/am.c:2415
 msgid "lie about committer date"
 msgstr "將作者日期作為提交日期"
 
-#: builtin/am.c:2414
+#: builtin/am.c:2417
 msgid "use current timestamp for author date"
 msgstr "用目前時間作為作者日期"
 
-#: builtin/am.c:2416 builtin/commit-tree.c:118 builtin/commit.c:1643
-#: builtin/merge.c:302 builtin/pull.c:179 builtin/rebase.c:1099
-#: builtin/revert.c:117 builtin/tag.c:460
+#: builtin/am.c:2419 builtin/commit-tree.c:118 builtin/commit.c:1642
+#: builtin/merge.c:302 builtin/pull.c:179 builtin/rebase.c:1127
+#: builtin/revert.c:117 builtin/tag.c:461
 msgid "key-id"
 msgstr "key-id"
 
-#: builtin/am.c:2417 builtin/rebase.c:1100
+#: builtin/am.c:2420 builtin/rebase.c:1128
 msgid "GPG-sign commits"
 msgstr "使用 GPG 簽名提交"
 
-#: builtin/am.c:2420
+#: builtin/am.c:2423
 msgid "how to handle empty patches"
 msgstr "空白修補檔的處理方式"
 
-#: builtin/am.c:2423
+#: builtin/am.c:2426
 msgid "(internal use for git-rebase)"
 msgstr "(內部使用,用於 git-rebase)"
 
-#: builtin/am.c:2441
+#: builtin/am.c:2444
 msgid ""
 "The -b/--binary option has been a no-op for long time, and\n"
 "it will be removed. Please do not use it anymore."
@@ -10726,16 +10972,16 @@ msgstr ""
 "參數 -b/--binary 已經很長時間不做任何實質動作了,並且將被移除。\n"
 "請不要再使用它了。"
 
-#: builtin/am.c:2448
+#: builtin/am.c:2451
 msgid "failed to read the index"
 msgstr "讀取索引失敗"
 
-#: builtin/am.c:2463
+#: builtin/am.c:2466
 #, c-format
 msgid "previous rebase directory %s still exists but mbox given."
 msgstr "之前的重定基底目錄 %s 仍然存在,但卻提供了 mbox。"
 
-#: builtin/am.c:2487
+#: builtin/am.c:2490
 #, c-format
 msgid ""
 "Stray %s directory found.\n"
@@ -10744,11 +10990,11 @@ msgstr ""
 "發現了錯誤的 %s 目錄。\n"
 "使用 \"git am --abort\" 刪除它。"
 
-#: builtin/am.c:2493
+#: builtin/am.c:2496
 msgid "Resolve operation not in progress, we are not resuming."
 msgstr "解決動作未進行,我們不會繼續。"
 
-#: builtin/am.c:2503
+#: builtin/am.c:2506
 msgid "interactive mode requires patches on the command line"
 msgstr "互動式模式需要指令列上提供修補檔"
 
@@ -10785,14 +11031,6 @@ msgstr "git archive:應有一個 flush 包"
 msgid "git bisect--helper --bisect-reset [<commit>]"
 msgstr "git bisect--helper --bisect-reset [<提交>]"
 
-#: builtin/bisect--helper.c:25
-msgid ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
-msgstr ""
-"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
-"term-new]"
-
 #: builtin/bisect--helper.c:26
 msgid ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<term> --term-{old,good}"
@@ -10802,10 +11040,6 @@ msgstr ""
 "git bisect--helper --bisect-start [--term-{new,bad}=<術語> --term-{old,good}"
 "=<術語>] [--no-checkout] [--first-parent] [<壞> [<好>...]] [--] [<路徑>...]"
 
-#: builtin/bisect--helper.c:28
-msgid "git bisect--helper --bisect-next"
-msgstr "git bisect--helper --bisect-next"
-
 #: builtin/bisect--helper.c:29
 msgid "git bisect--helper --bisect-state (bad|new) [<rev>]"
 msgstr "git bisect--helper --bisect-state (bad|new) [<修訂版>]"
@@ -10822,10 +11056,6 @@ msgstr "git bisect--helper --bisect-replay <檔名>"
 msgid "git bisect--helper --bisect-skip [(<rev>|<range>)...]"
 msgstr "git bisect--helper --bisect-skip [(<修訂版>|<範圍>)...]"
 
-#: builtin/bisect--helper.c:33
-msgid "git bisect--helper --bisect-visualize"
-msgstr "git bisect--helper --bisect-visualize"
-
 #: builtin/bisect--helper.c:34
 msgid "git bisect--helper --bisect-run <cmd>..."
 msgstr "git bisect--helper --bisect-run <cmd>..."
@@ -11045,40 +11275,50 @@ msgstr "「%s」??您在說什麼?"
 msgid "cannot read file '%s' for replaying"
 msgstr "無法讀取「%s」檔案來重放"
 
-#: builtin/bisect--helper.c:1107 builtin/bisect--helper.c:1274
+#: builtin/bisect--helper.c:1120 builtin/bisect--helper.c:1152
+#, c-format
+msgid "running %s\n"
+msgstr "正在執行 %s\n"
+
+#: builtin/bisect--helper.c:1145 builtin/bisect--helper.c:1335
 msgid "bisect run failed: no command provided."
 msgstr "二分搜尋執行失敗:沒有提供指令。"
 
-#: builtin/bisect--helper.c:1116
+#: builtin/bisect--helper.c:1166
 #, c-format
-msgid "running %s\n"
-msgstr "正在執行 %s\n"
+msgid "unable to verify '%s' on good revision"
+msgstr "無法在正確修訂版上驗證「%s」"
+
+#: builtin/bisect--helper.c:1172
+#, c-format
+msgid "bogus exit code %d for good revision"
+msgstr "正確修訂版回傳偽造的錯誤代碼 %d"
 
-#: builtin/bisect--helper.c:1120
+#: builtin/bisect--helper.c:1180
 #, c-format
 msgid "bisect run failed: exit code %d from '%s' is < 0 or >= 128"
 msgstr "二分搜尋執行失敗:「%2$s」返回的離開碼 %1$d 小於 0 或 >= 128"
 
-#: builtin/bisect--helper.c:1136
+#: builtin/bisect--helper.c:1195
 #, c-format
 msgid "cannot open file '%s' for writing"
 msgstr "無法開啟「%s」檔案進行寫入"
 
-#: builtin/bisect--helper.c:1152
+#: builtin/bisect--helper.c:1213
 msgid "bisect run cannot continue any more"
 msgstr "二分搜尋不能繼續執行"
 
-#: builtin/bisect--helper.c:1154
+#: builtin/bisect--helper.c:1215
 #, c-format
 msgid "bisect run success"
 msgstr "二分搜尋執行成功"
 
-#: builtin/bisect--helper.c:1157
+#: builtin/bisect--helper.c:1218
 #, c-format
 msgid "bisect found first bad commit"
 msgstr "二分搜尋發現到第一個有問題的提交"
 
-#: builtin/bisect--helper.c:1160
+#: builtin/bisect--helper.c:1221
 #, c-format
 msgid ""
 "bisect run failed: 'git bisect--helper --bisect-state %s' exited with error "
@@ -11086,71 +11326,71 @@ msgid ""
 msgstr ""
 "二分搜尋執行失敗:'git bisect--helper --bisect-state %s' 以錯誤代碼 %d 離開"
 
-#: builtin/bisect--helper.c:1192
+#: builtin/bisect--helper.c:1253
 msgid "reset the bisection state"
 msgstr "清除二分搜尋狀態"
 
-#: builtin/bisect--helper.c:1194
+#: builtin/bisect--helper.c:1255
 msgid "check whether bad or good terms exist"
 msgstr "檢查壞的或好的術語是否存在"
 
-#: builtin/bisect--helper.c:1196
+#: builtin/bisect--helper.c:1257
 msgid "print out the bisect terms"
 msgstr "列印二分搜尋術語"
 
-#: builtin/bisect--helper.c:1198
+#: builtin/bisect--helper.c:1259
 msgid "start the bisect session"
 msgstr "啟動二分搜尋過程"
 
-#: builtin/bisect--helper.c:1200
+#: builtin/bisect--helper.c:1261
 msgid "find the next bisection commit"
 msgstr "尋找下一個二分搜尋提交"
 
-#: builtin/bisect--helper.c:1202
+#: builtin/bisect--helper.c:1263
 msgid "mark the state of ref (or refs)"
 msgstr "標記 ref (或 refs) 的狀態"
 
-#: builtin/bisect--helper.c:1204
+#: builtin/bisect--helper.c:1265
 msgid "list the bisection steps so far"
 msgstr "列出迄今的二分搜尋步驟"
 
-#: builtin/bisect--helper.c:1206
+#: builtin/bisect--helper.c:1267
 msgid "replay the bisection process from the given file"
 msgstr "從指定檔案重放二分搜尋過程"
 
-#: builtin/bisect--helper.c:1208
+#: builtin/bisect--helper.c:1269
 msgid "skip some commits for checkout"
 msgstr "略過要簽出的部分提交"
 
-#: builtin/bisect--helper.c:1210
+#: builtin/bisect--helper.c:1271
 msgid "visualize the bisection"
 msgstr "視覺化二分搜尋過程"
 
-#: builtin/bisect--helper.c:1212
-msgid "use <cmd>... to automatically bisect."
-msgstr "使用 <cmd>... 自動進行二分搜尋"
+#: builtin/bisect--helper.c:1273
+msgid "use <cmd>... to automatically bisect"
+msgstr "使用 <cmd>... 自動進行二分搜尋"
 
-#: builtin/bisect--helper.c:1214
+#: builtin/bisect--helper.c:1275
 msgid "no log for BISECT_WRITE"
 msgstr "BISECT_WRITE 無日誌"
 
-#: builtin/bisect--helper.c:1229
+#: builtin/bisect--helper.c:1290
 msgid "--bisect-reset requires either no argument or a commit"
 msgstr "--bisect-reset 無需參數或者需要一個提交"
 
-#: builtin/bisect--helper.c:1234
+#: builtin/bisect--helper.c:1295
 msgid "--bisect-terms requires 0 or 1 argument"
 msgstr "--bisect-terms 需要 0 或 1 個參數"
 
-#: builtin/bisect--helper.c:1243
+#: builtin/bisect--helper.c:1304
 msgid "--bisect-next requires 0 arguments"
 msgstr "--bisect-next 需要 0 個引數"
 
-#: builtin/bisect--helper.c:1254
+#: builtin/bisect--helper.c:1315
 msgid "--bisect-log requires 0 arguments"
 msgstr "--bisect-log 需要 0 個引數"
 
-#: builtin/bisect--helper.c:1259
+#: builtin/bisect--helper.c:1320
 msgid "no logfile given"
 msgstr "未提供日誌檔案"
 
@@ -11171,142 +11411,133 @@ msgstr "期望一個顏色:%s"
 msgid "must end with a color"
 msgstr "必須以一個顏色結尾"
 
-#: builtin/blame.c:724
-#, c-format
-msgid "invalid color '%s' in color.blame.repeatedLines"
-msgstr "設定 color.blame.repeatedLines 中的無效顏色 '%s'"
-
-#: builtin/blame.c:742
-msgid "invalid value for blame.coloring"
-msgstr "設定 blame.coloring 中的無效取值"
-
-#: builtin/blame.c:841
+#: builtin/blame.c:842
 #, c-format
 msgid "cannot find revision %s to ignore"
 msgstr "不能找到要忽略的版本 %s"
 
-#: builtin/blame.c:863
+#: builtin/blame.c:864
 msgid "show blame entries as we find them, incrementally"
 msgstr "增量式顯示發現的 blame 條目"
 
-#: builtin/blame.c:864
+#: builtin/blame.c:865
 msgid "do not show object names of boundary commits (Default: off)"
 msgstr "不要顯示邊界提交的物件名稱(預設值: off)"
 
-#: builtin/blame.c:865
+#: builtin/blame.c:866
 msgid "do not treat root commits as boundaries (Default: off)"
 msgstr "不將根提交看作邊界(預設值:off)"
 
-#: builtin/blame.c:866
+#: builtin/blame.c:867
 msgid "show work cost statistics"
 msgstr "顯示工作量統計"
 
-#: builtin/blame.c:867 builtin/checkout.c:1536 builtin/clone.c:94
-#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:180
+#: builtin/blame.c:868 builtin/checkout.c:1554 builtin/clone.c:98
+#: builtin/commit-graph.c:75 builtin/commit-graph.c:228 builtin/fetch.c:181
 #: builtin/merge.c:301 builtin/multi-pack-index.c:103
 #: builtin/multi-pack-index.c:154 builtin/multi-pack-index.c:180
 #: builtin/multi-pack-index.c:208 builtin/pull.c:120 builtin/push.c:566
-#: builtin/send-pack.c:202
+#: builtin/remote.c:683 builtin/send-pack.c:202
 msgid "force progress reporting"
 msgstr "強制顯示進度報告"
 
-#: builtin/blame.c:868
+#: builtin/blame.c:869
 msgid "show output score for blame entries"
 msgstr "顯示判斷 blame 條目位移的得分診斷訊息"
 
-#: builtin/blame.c:869
+#: builtin/blame.c:870
 msgid "show original filename (Default: auto)"
 msgstr "顯示原始檔案名稱(預設值:auto)"
 
-#: builtin/blame.c:870
+#: builtin/blame.c:871
 msgid "show original linenumber (Default: off)"
 msgstr "顯示原始檔案名稱(預設值:off)"
 
-#: builtin/blame.c:871
+#: builtin/blame.c:872
 msgid "show in a format designed for machine consumption"
 msgstr "顯示成適合機器讀取的格式"
 
-#: builtin/blame.c:872
+#: builtin/blame.c:873
 msgid "show porcelain format with per-line commit information"
 msgstr "顯示每一列適合機器的提交說明"
 
-#: builtin/blame.c:873
+#: builtin/blame.c:874
 msgid "use the same output mode as git-annotate (Default: off)"
 msgstr "使用和 git-annotate 相同的輸出模式(預設值:off)"
 
-#: builtin/blame.c:874
+#: builtin/blame.c:875
 msgid "show raw timestamp (Default: off)"
 msgstr "顯示原始時間戳(預設值:off)"
 
-#: builtin/blame.c:875
+#: builtin/blame.c:876
 msgid "show long commit SHA1 (Default: off)"
 msgstr "顯示較長的 SHA1 提交編號(預設值:off)"
 
-#: builtin/blame.c:876
+#: builtin/blame.c:877
 msgid "suppress author name and timestamp (Default: off)"
 msgstr "隱藏作者名字及時間戳(預設值:off)"
 
-#: builtin/blame.c:877
+#: builtin/blame.c:878
 msgid "show author email instead of name (Default: off)"
 msgstr "顯示作者信箱而非名稱(預設值:off)"
 
-#: builtin/blame.c:878
+#: builtin/blame.c:879
 msgid "ignore whitespace differences"
 msgstr "忽略空白差異"
 
-#: builtin/blame.c:879 builtin/log.c:1838
+#: builtin/blame.c:880 builtin/log.c:1857
 msgid "rev"
 msgstr "版本"
 
-#: builtin/blame.c:879
+#: builtin/blame.c:880
 msgid "ignore <rev> when blaming"
 msgstr "在執行 blame 動作時忽略 <修訂版>"
 
-#: builtin/blame.c:880
+#: builtin/blame.c:881
 msgid "ignore revisions from <file>"
 msgstr "忽略 <檔案> 中的修訂版"
 
-#: builtin/blame.c:881
+#: builtin/blame.c:882
 msgid "color redundant metadata from previous line differently"
 msgstr "使用顏色間隔輸出與前一行不同的重複中介資料"
 
-#: builtin/blame.c:882
+#: builtin/blame.c:883
 msgid "color lines by age"
 msgstr "依據時間著色"
 
-#: builtin/blame.c:883
+#: builtin/blame.c:884
 msgid "spend extra cycles to find better match"
 msgstr "循環更多次以找到更佳符合"
 
-#: builtin/blame.c:884
+#: builtin/blame.c:885
 msgid "use revisions from <file> instead of calling git-rev-list"
 msgstr "使用來自 <檔案> 的修訂集而不是呼叫 git-rev-list"
 
-#: builtin/blame.c:885
+#: builtin/blame.c:886
 msgid "use <file>'s contents as the final image"
 msgstr "將 <檔案> 的內容當成是最終 image"
 
-#: builtin/blame.c:886 builtin/blame.c:887
+#: builtin/blame.c:887 builtin/blame.c:888
 msgid "score"
 msgstr "得分"
 
-#: builtin/blame.c:886
+#: builtin/blame.c:887
 msgid "find line copies within and across files"
 msgstr "找到檔案內及跨檔案的複製列"
 
-#: builtin/blame.c:887
+#: builtin/blame.c:888
 msgid "find line movements within and across files"
 msgstr "找到檔案內及跨檔案的移動列"
 
-#: builtin/blame.c:888
+#: builtin/blame.c:889
 msgid "range"
 msgstr "range"
 
-#: builtin/blame.c:889
+#: builtin/blame.c:890
 msgid "process only line range <start>,<end> or function :<funcname>"
 msgstr "只處理範圍在 <開始>,<結尾> 的列,或是 :<函數名稱> 函數"
 
-#: builtin/blame.c:947
+#: builtin/blame.c:949
 msgid "--progress can't be used with --incremental or porcelain formats"
 msgstr "--progress 不能跟 --incremental 或 porcelain 格式同時使用"
 
@@ -11318,17 +11549,17 @@ msgstr "--progress 不能跟 --incremental 或 porcelain 格式同時使用"
 #. your language may need more or fewer display
 #. columns.
 #.
-#: builtin/blame.c:998
+#: builtin/blame.c:1000
 msgid "4 years, 11 months ago"
 msgstr "4 年 11 個月前"
 
-#: builtin/blame.c:1114
+#: builtin/blame.c:1116
 #, c-format
 msgid "file %s has only %lu line"
 msgid_plural "file %s has only %lu lines"
 msgstr[0] "檔案 %s 只有 %lu 行"
 
-#: builtin/blame.c:1159
+#: builtin/blame.c:1161
 msgid "Blaming lines"
 msgstr "追蹤程式碼行"
 
@@ -11337,31 +11568,37 @@ msgid "git branch [<options>] [-r | -a] [--merged] [--no-merged]"
 msgstr "git branch [<選項>] [-r | -a] [--merged] [--no-merged]"
 
 #: builtin/branch.c:30
-msgid "git branch [<options>] [-l] [-f] <branch-name> [<start-point>]"
-msgstr "git branch [<選項>] [-l] [-f] <分支名> [<起始點>]"
+msgid ""
+"git branch [<options>] [-f] [--recurse-submodules] <branch-name> [<start-"
+"point>]"
+msgstr "git branch [<選項>] [-f] [--recurse-submodules] <分支名> [<起始點>]"
 
 #: builtin/branch.c:31
+msgid "git branch [<options>] [-l] [<pattern>...]"
+msgstr "git branch [<選項>] [-l] [<模式>...]"
+
+#: builtin/branch.c:32
 msgid "git branch [<options>] [-r] (-d | -D) <branch-name>..."
 msgstr "git branch [<選項>] [-r] (-d | -D) <分支名>..."
 
-#: builtin/branch.c:32
+#: builtin/branch.c:33
 msgid "git branch [<options>] (-m | -M) [<old-branch>] <new-branch>"
 msgstr "git branch [<選項>] (-m | -M) [<舊分支>] <新分支>"
 
-#: builtin/branch.c:33
+#: builtin/branch.c:34
 msgid "git branch [<options>] (-c | -C) [<old-branch>] <new-branch>"
 msgstr "git branch [<選項>] (-c | -C) [<老分支>] <新分支>"
 
-#: builtin/branch.c:34
+#: builtin/branch.c:35
 msgid "git branch [<options>] [-r | -a] [--points-at]"
 msgstr "git branch [<選項>] [-r | -a] [--points-at]"
 
-#: builtin/branch.c:35
+#: builtin/branch.c:36
 msgid "git branch [<options>] [-r | -a] [--format]"
 msgstr "git branch [<選項>] [-r | -a] [--format]"
 
 #  譯者:保持原換行格式,在輸出時 %s 的替代內容會讓字串變長
-#: builtin/branch.c:153
+#: builtin/branch.c:165
 #, c-format
 msgid ""
 "deleting branch '%s' that has been merged to\n"
@@ -11371,7 +11608,7 @@ msgstr ""
 "         '%s',但未合併到 HEAD。"
 
 #  譯者:保持原換行格式,在輸出時 %s 的替代內容會讓字串變長
-#: builtin/branch.c:157
+#: builtin/branch.c:169
 #, c-format
 msgid ""
 "not deleting branch '%s' that is not yet merged to\n"
@@ -11380,12 +11617,12 @@ msgstr ""
 "並未刪除分支 '%s', 雖然它已經合併到 HEAD,\n"
 "         然而卻尚未被合併到分支 '%s' 。"
 
-#: builtin/branch.c:171
+#: builtin/branch.c:183
 #, c-format
 msgid "Couldn't look up commit object for '%s'"
 msgstr "無法查詢 '%s' 指向的提交物件"
 
-#: builtin/branch.c:175
+#: builtin/branch.c:187
 #, c-format
 msgid ""
 "The branch '%s' is not fully merged.\n"
@@ -11394,111 +11631,111 @@ msgstr ""
 "分支 '%s' 沒有完全合併。\n"
 "如果您確認要刪除它,執行 'git branch -D %s'。"
 
-#: builtin/branch.c:188
+#: builtin/branch.c:200
 msgid "Update of config-file failed"
 msgstr "更新設定檔案失敗"
 
-#: builtin/branch.c:223
+#: builtin/branch.c:235
 msgid "cannot use -a with -d"
 msgstr "不能將 -a 和 -d 同時使用"
 
-#: builtin/branch.c:230
+#: builtin/branch.c:242
 msgid "Couldn't look up commit object for HEAD"
 msgstr "無法查詢 HEAD 指向的提交物件"
 
-#: builtin/branch.c:247
+#: builtin/branch.c:259
 #, c-format
 msgid "Cannot delete branch '%s' checked out at '%s'"
 msgstr "無法刪除在「%2$s」簽出的「%1$s」分支"
 
-#: builtin/branch.c:262
+#: builtin/branch.c:274
 #, c-format
 msgid "remote-tracking branch '%s' not found."
 msgstr "未能找到遠端追蹤分支 '%s'。"
 
-#: builtin/branch.c:263
+#: builtin/branch.c:275
 #, c-format
 msgid "branch '%s' not found."
 msgstr "分支 '%s' 未發現。"
 
-#: builtin/branch.c:294
+#: builtin/branch.c:306
 #, c-format
 msgid "Deleted remote-tracking branch %s (was %s).\n"
 msgstr "已刪除遠端追蹤分支 %s(曾為 %s)。\n"
 
-#: builtin/branch.c:295
+#: builtin/branch.c:307
 #, c-format
 msgid "Deleted branch %s (was %s).\n"
 msgstr "已刪除分支 %s(曾為 %s)。\n"
 
-#: builtin/branch.c:445 builtin/tag.c:63
+#: builtin/branch.c:457 builtin/tag.c:64
 msgid "unable to parse format string"
 msgstr "不能解析格式化字串"
 
-#: builtin/branch.c:476
+#: builtin/branch.c:488
 msgid "could not resolve HEAD"
 msgstr "不能解析 HEAD 提交"
 
-#: builtin/branch.c:482
+#: builtin/branch.c:494
 #, c-format
 msgid "HEAD (%s) points outside of refs/heads/"
 msgstr "HEAD (%s) 指向 refs/heads/ 之外"
 
-#: builtin/branch.c:497
+#: builtin/branch.c:509
 #, c-format
 msgid "Branch %s is being rebased at %s"
 msgstr "分支 %s 正被重定基底到 %s"
 
-#: builtin/branch.c:501
+#: builtin/branch.c:513
 #, c-format
 msgid "Branch %s is being bisected at %s"
 msgstr "分支 %s 正被二分搜尋於 %s"
 
-#: builtin/branch.c:518
+#: builtin/branch.c:530
 msgid "cannot copy the current branch while not on any."
 msgstr "無法複製目前分支因為不處於任何分支上。"
 
-#: builtin/branch.c:520
+#: builtin/branch.c:532
 msgid "cannot rename the current branch while not on any."
 msgstr "無法重新命名目前分支因為不處於任何分支上。"
 
-#: builtin/branch.c:531
+#: builtin/branch.c:543
 #, c-format
 msgid "Invalid branch name: '%s'"
 msgstr "無效的分支名:'%s'"
 
-#: builtin/branch.c:560
+#: builtin/branch.c:572
 msgid "Branch rename failed"
 msgstr "分支重新命名失敗"
 
-#: builtin/branch.c:562
+#: builtin/branch.c:574
 msgid "Branch copy failed"
 msgstr "分支複製失敗"
 
-#: builtin/branch.c:566
+#: builtin/branch.c:578
 #, c-format
 msgid "Created a copy of a misnamed branch '%s'"
 msgstr "已為錯誤命名的分支 '%s' 建立了一個副本"
 
-#: builtin/branch.c:569
+#: builtin/branch.c:581
 #, c-format
 msgid "Renamed a misnamed branch '%s' away"
 msgstr "已將錯誤命名的分支 '%s' 重新命名"
 
-#: builtin/branch.c:575
+#: builtin/branch.c:587
 #, c-format
 msgid "Branch renamed to %s, but HEAD is not updated!"
 msgstr "分支重新命名為 %s,但 HEAD 沒有更新!"
 
-#: builtin/branch.c:584
+#: builtin/branch.c:596
 msgid "Branch is renamed, but update of config-file failed"
 msgstr "分支被重新命名,但更新設定檔案失敗"
 
-#: builtin/branch.c:586
+#: builtin/branch.c:598
 msgid "Branch is copied, but update of config-file failed"
 msgstr "分支已複製,但更新設定檔案失敗"
 
-#: builtin/branch.c:602
+#: builtin/branch.c:614
 #, c-format
 msgid ""
 "Please edit the description for the branch\n"
@@ -11509,205 +11746,221 @@ msgstr ""
 "  %s\n"
 "以 '%c' 開頭的行將被過濾。\n"
 
-#: builtin/branch.c:637
+#: builtin/branch.c:651
 msgid "Generic options"
 msgstr "通用選項"
 
-#: builtin/branch.c:639
+#: builtin/branch.c:653
 msgid "show hash and subject, give twice for upstream branch"
 msgstr "顯示雜湊值和主題,若參數出現兩次則顯示上游分支"
 
-#: builtin/branch.c:640
+#: builtin/branch.c:654
 msgid "suppress informational messages"
 msgstr "不顯示訊息"
 
-#: builtin/branch.c:642
+#: builtin/branch.c:656 builtin/checkout.c:1571
+#: builtin/submodule--helper.c:3077
 msgid "set branch tracking configuration"
 msgstr "設定分支追蹤設定"
 
-#: builtin/branch.c:645
+#: builtin/branch.c:659
 msgid "do not use"
 msgstr "不要使用"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:661
 msgid "upstream"
 msgstr "上游"
 
-#: builtin/branch.c:647
+#: builtin/branch.c:661
 msgid "change the upstream info"
 msgstr "改變上游訊息"
 
-#: builtin/branch.c:648
+#: builtin/branch.c:662
 msgid "unset the upstream info"
 msgstr "取消上游資訊設定"
 
-#: builtin/branch.c:649
+#: builtin/branch.c:663
 msgid "use colored output"
 msgstr "使用彩色輸出"
 
-#: builtin/branch.c:650
+#: builtin/branch.c:664
 msgid "act on remote-tracking branches"
 msgstr "作用於遠端追蹤分支"
 
-#: builtin/branch.c:652 builtin/branch.c:654
+#: builtin/branch.c:666 builtin/branch.c:668
 msgid "print only branches that contain the commit"
 msgstr "只列印包含該提交的分支"
 
-#: builtin/branch.c:653 builtin/branch.c:655
+#: builtin/branch.c:667 builtin/branch.c:669
 msgid "print only branches that don't contain the commit"
 msgstr "只列印不包含該提交的分支"
 
-#: builtin/branch.c:658
+#: builtin/branch.c:672
 msgid "Specific git-branch actions:"
 msgstr "具體的 git-branch 動作:"
 
-#: builtin/branch.c:659
+#: builtin/branch.c:673
 msgid "list both remote-tracking and local branches"
 msgstr "列出遠端追蹤及本機分支"
 
-#: builtin/branch.c:661
+#: builtin/branch.c:675
 msgid "delete fully merged branch"
 msgstr "刪除完全合併的分支"
 
-#: builtin/branch.c:662
+#: builtin/branch.c:676
 msgid "delete branch (even if not merged)"
 msgstr "刪除分支(即使沒有合併)"
 
-#: builtin/branch.c:663
+#: builtin/branch.c:677
 msgid "move/rename a branch and its reflog"
 msgstr "移動/重新命名一個分支,以及它的引用日誌"
 
-#: builtin/branch.c:664
+#: builtin/branch.c:678
 msgid "move/rename a branch, even if target exists"
 msgstr "移動/重新命名一個分支,即使目標已存在"
 
-#: builtin/branch.c:665
+#: builtin/branch.c:679
 msgid "copy a branch and its reflog"
-msgstr "複製一個分支和它的引用日誌"
+msgstr "複製分支及其引用日誌"
 
-#: builtin/branch.c:666
+#: builtin/branch.c:680
 msgid "copy a branch, even if target exists"
 msgstr "複製一個分支,即使目標已存在"
 
-#: builtin/branch.c:667
+#: builtin/branch.c:681
 msgid "list branch names"
 msgstr "列出分支名"
 
-#: builtin/branch.c:668
+#: builtin/branch.c:682
 msgid "show current branch name"
 msgstr "顯示目前分支名"
 
-#: builtin/branch.c:669
+#: builtin/branch.c:683 builtin/submodule--helper.c:3075
 msgid "create the branch's reflog"
 msgstr "建立分支的引用日誌"
 
-#: builtin/branch.c:671
+#: builtin/branch.c:685
 msgid "edit the description for the branch"
 msgstr "標記分支的描述"
 
-#: builtin/branch.c:672
+#: builtin/branch.c:686
 msgid "force creation, move/rename, deletion"
 msgstr "強制建立、移動/重新命名、刪除"
 
-#: builtin/branch.c:673
+#: builtin/branch.c:687
 msgid "print only branches that are merged"
 msgstr "只列印已經合併的分支"
 
-#: builtin/branch.c:674
+#: builtin/branch.c:688
 msgid "print only branches that are not merged"
 msgstr "只列印尚未合併的分支"
 
-#: builtin/branch.c:675
+#: builtin/branch.c:689
 msgid "list branches in columns"
 msgstr "以列的方式顯示分支"
 
-#: builtin/branch.c:677 builtin/for-each-ref.c:45 builtin/notes.c:413
+#: builtin/branch.c:691 builtin/for-each-ref.c:45 builtin/notes.c:413
 #: builtin/notes.c:416 builtin/notes.c:579 builtin/notes.c:582
-#: builtin/tag.c:475
+#: builtin/tag.c:476
 msgid "object"
 msgstr "物件"
 
-#: builtin/branch.c:678
+#: builtin/branch.c:692
 msgid "print only branches of the object"
 msgstr "只列印指向該物件的分支"
 
-#: builtin/branch.c:679 builtin/for-each-ref.c:51 builtin/tag.c:482
+#: builtin/branch.c:693 builtin/for-each-ref.c:51 builtin/tag.c:483
 msgid "sorting and filtering are case insensitive"
 msgstr "排序和過濾屬於大小寫不敏感"
 
-#: builtin/branch.c:680 builtin/for-each-ref.c:41 builtin/tag.c:480
-#: builtin/verify-tag.c:38
+#: builtin/branch.c:694 builtin/ls-files.c:667
+msgid "recurse through submodules"
+msgstr "在子模組中遞迴"
+
+#: builtin/branch.c:695 builtin/for-each-ref.c:41 builtin/ls-tree.c:358
+#: builtin/tag.c:481 builtin/verify-tag.c:38
 msgid "format to use for the output"
 msgstr "輸出格式"
 
-#: builtin/branch.c:703 builtin/clone.c:678
+#: builtin/branch.c:718 builtin/clone.c:684
 msgid "HEAD not found below refs/heads!"
 msgstr "HEAD 沒有位於 /refs/heads 之下!"
 
-#: builtin/branch.c:742 builtin/branch.c:798 builtin/branch.c:807
+#: builtin/branch.c:739
+msgid ""
+"branch with --recurse-submodules can only be used if submodule."
+"propagateBranches is enabled"
+msgstr ""
+"有 --recurse-submodules 的分支只能在啟用 submodule.propagateBranches 時使用"
+
+#: builtin/branch.c:741
+msgid "--recurse-submodules can only be used to create branches"
+msgstr "--recurse-submodules 只能用來建立分支"
+
+#: builtin/branch.c:770 builtin/branch.c:826 builtin/branch.c:835
 msgid "branch name required"
 msgstr "必須提供分支名"
 
-#: builtin/branch.c:774
+#: builtin/branch.c:802
 msgid "Cannot give description to detached HEAD"
 msgstr "不能向分離開頭指標提供描述"
 
-#: builtin/branch.c:779
+#: builtin/branch.c:807
 msgid "cannot edit description of more than one branch"
 msgstr "不能為一個以上的分支編輯描述"
 
-#: builtin/branch.c:786
+#: builtin/branch.c:814
 #, c-format
 msgid "No commit on branch '%s' yet."
 msgstr "分支 '%s' 尚無提交。"
 
-#: builtin/branch.c:789
+#: builtin/branch.c:817
 #, c-format
 msgid "No branch named '%s'."
 msgstr "沒有分支 '%s'。"
 
-#: builtin/branch.c:804
+#: builtin/branch.c:832
 msgid "too many branches for a copy operation"
 msgstr "為複製動作提供了太多的分支名"
 
-#: builtin/branch.c:813
+#: builtin/branch.c:841
 msgid "too many arguments for a rename operation"
 msgstr "為重新命名動作提供了太多的參數"
 
-#: builtin/branch.c:818
+#: builtin/branch.c:846
 msgid "too many arguments to set new upstream"
 msgstr "為設定新上游提供了太多的參數"
 
-#: builtin/branch.c:822
+#: builtin/branch.c:850
 #, c-format
 msgid ""
 "could not set upstream of HEAD to %s when it does not point to any branch."
 msgstr "無法設定 HEAD 的上游為 %s,因為 HEAD 沒有指向任何分支。"
 
-#: builtin/branch.c:825 builtin/branch.c:848
+#: builtin/branch.c:853 builtin/branch.c:873
 #, c-format
 msgid "no such branch '%s'"
 msgstr "沒有此分支 '%s'"
 
-#: builtin/branch.c:829
+#: builtin/branch.c:857
 #, c-format
 msgid "branch '%s' does not exist"
 msgstr "分支 '%s' 不存在"
 
-#: builtin/branch.c:842
+#: builtin/branch.c:867
 msgid "too many arguments to unset upstream"
 msgstr "為取消上游設定動作提供了太多的參數"
 
-#: builtin/branch.c:846
+#: builtin/branch.c:871
 msgid "could not unset upstream of HEAD when it does not point to any branch."
 msgstr "在 HEAD 的上游未指向任何分支時無法取消設定。"
 
-#: builtin/branch.c:852
+#: builtin/branch.c:877
 #, c-format
 msgid "Branch '%s' has no upstream information"
 msgstr "分支 '%s' 沒有上游訊息"
 
-#: builtin/branch.c:862
+#: builtin/branch.c:890
 msgid ""
 "The -a, and -r, options to 'git branch' do not take a branch name.\n"
 "Did you mean to use: -a|-r --list <pattern>?"
@@ -11715,7 +11968,7 @@ msgstr ""
 "'git branch' 的 -a 和 -r 選項不帶一個分支名。\n"
 "您是否想要使用:-a|-r --list <模式>?"
 
-#: builtin/branch.c:866
+#: builtin/branch.c:894
 msgid ""
 "the '--set-upstream' option is no longer supported. Please use '--track' or "
 "'--set-upstream-to' instead."
@@ -11828,153 +12081,265 @@ msgstr "git bundle list-heads <檔案> [<引用名稱>...]"
 msgid "git bundle unbundle <file> [<refname>...]"
 msgstr "git bundle unbundle <檔案> [<引用名稱>...]"
 
-#: builtin/bundle.c:65 builtin/pack-objects.c:3876
+#: builtin/bundle.c:65 builtin/pack-objects.c:3899
 msgid "do not show progress meter"
 msgstr "不顯示進度表"
 
-#: builtin/bundle.c:67 builtin/bundle.c:167 builtin/pack-objects.c:3878
+#: builtin/bundle.c:67 builtin/bundle.c:168 builtin/pack-objects.c:3901
 msgid "show progress meter"
 msgstr "顯示進度表"
 
-#: builtin/bundle.c:69 builtin/pack-objects.c:3880
+#: builtin/bundle.c:69 builtin/pack-objects.c:3903
 msgid "show progress meter during object writing phase"
 msgstr "在物件寫入階段顯示進度表"
 
-#: builtin/bundle.c:72 builtin/pack-objects.c:3883
+#: builtin/bundle.c:72 builtin/pack-objects.c:3906
 msgid "similar to --all-progress when progress meter is shown"
 msgstr "當進度表顯示時類似於 --all-progress"
 
 #: builtin/bundle.c:74
 msgid "specify bundle format version"
-msgstr "æ\8c\87å®\9aå\8c\85格式版本"
+msgstr "æ\8c\87å®\9aå¥\97件ç\9a\84格式版本"
 
 #: builtin/bundle.c:94
 msgid "Need a repository to create a bundle."
-msgstr "需要一個版本庫來建立包。"
+msgstr "需要版本庫來建立套件。"
 
-#: builtin/bundle.c:107
+#: builtin/bundle.c:108
 msgid "do not show bundle details"
-msgstr "ä¸\8d顯示å\8c\85 (bundle) 詳細資訊"
+msgstr "ä¸\8d顯示å¥\97件詳細資訊"
 
-#: builtin/bundle.c:126
+#: builtin/bundle.c:127
 #, c-format
 msgid "%s is okay\n"
 msgstr "%s 可以\n"
 
-#: builtin/bundle.c:182
+#: builtin/bundle.c:183
 msgid "Need a repository to unbundle."
-msgstr "需要版本庫才能拆分。"
+msgstr "需要版本庫才能拆分套件。"
 
-#: builtin/bundle.c:185
+#: builtin/bundle.c:186
 msgid "Unbundling objects"
 msgstr "正在解包物件"
 
-#: builtin/bundle.c:219 builtin/remote.c:1733
+#: builtin/bundle.c:220 builtin/remote.c:1758
 #, c-format
 msgid "Unknown subcommand: %s"
 msgstr "未知子指令:%s"
 
-#: builtin/cat-file.c:622
+#: builtin/cat-file.c:568
+msgid "flush is only for --buffer mode"
+msgstr "排清功能只能用於 --buffer 模式"
+
+#: builtin/cat-file.c:612
+msgid "empty command in input"
+msgstr "輸入中沒有命令"
+
+#: builtin/cat-file.c:614
+#, c-format
+msgid "whitespace before command: '%s'"
+msgstr "命令前空格:「%s」"
+
+#: builtin/cat-file.c:623
+#, c-format
+msgid "%s requires arguments"
+msgstr "%s 需要引數"
+
+#: builtin/cat-file.c:628
+#, c-format
+msgid "%s takes no arguments"
+msgstr "%s 不取引數"
+
+#: builtin/cat-file.c:636
+#, c-format
+msgid "unknown command: '%s'"
+msgstr "未知命令:「%s」"
+
+#: builtin/cat-file.c:795
+msgid "only one batch option may be specified"
+msgstr "只能指定一個批次處理選項"
+
+#: builtin/cat-file.c:824
+msgid "git cat-file <type> <object>"
+msgstr "git cat-file <type> <object>"
+
+#: builtin/cat-file.c:825
+msgid "git cat-file (-e | -p) <object>"
+msgstr "git cat-file (-e | -p) <object>"
+
+#: builtin/cat-file.c:826
+msgid "git cat-file (-t | -s) [--allow-unknown-type] <object>"
+msgstr "git cat-file (-t | -s) [--allow-unknown-type] <object>"
+
+#: builtin/cat-file.c:827
 msgid ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <type> | --textconv | --filters) [--path=<path>] <object>"
+"git cat-file (--batch | --batch-check | --batch-command) [--batch-all-"
+"objects]\n"
+"             [--buffer] [--follow-symlinks] [--unordered]\n"
+"             [--textconv | --filters]"
 msgstr ""
-"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
-"p | <類型> | --textconv | --filters) [--path=<路徑>] <物件>"
+"git cat-file (--batch | --batch-check | --batch-command) [--batch-all-"
+"objects]\n"
+"             [--buffer] [--follow-symlinks] [--unordered]\n"
+"             [--textconv | --filters]"
 
-#: builtin/cat-file.c:623
+#: builtin/cat-file.c:830
 msgid ""
-"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
-"symlinks] [--textconv | --filters]"
+"git cat-file (--textconv | --filters)\n"
+"             [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]"
 msgstr ""
-"git cat-file (--batch[=<format>] | --batch-check[=<format>]) [--follow-"
-"symlinks] [--textconv | --filters]"
+"git cat-file (--textconv | --filters)\n"
+"             [<rev>:<path|tree-ish> | --path=<path|tree-ish> <rev>]"
 
-#: builtin/cat-file.c:644
-msgid "only one batch option may be specified"
-msgstr "只能指定一個批次處理選項"
+#: builtin/cat-file.c:836
+msgid "Check object existence or emit object contents"
+msgstr "檢查物件的存在狀態,或輸出物件內容"
 
-#: builtin/cat-file.c:662
-msgid "<type> can be one of: blob, tree, commit, tag"
-msgstr "<類型> 可以是其中之一:blob、tree、commit、tag"
+#: builtin/cat-file.c:838
+msgid "check if <object> exists"
+msgstr "檢查 <object> 是否存在"
 
-#: builtin/cat-file.c:663
-msgid "show object type"
-msgstr "顯示物件類型"
+#: builtin/cat-file.c:839
+msgid "pretty-print <object> content"
+msgstr "美化輸出 <object> 的內容"
 
-#: builtin/cat-file.c:664
+#: builtin/cat-file.c:841
+msgid "Emit [broken] object attributes"
+msgstr "輸出 [損壞的] 物件屬性"
+
+#: builtin/cat-file.c:842
+msgid "show object type (one of 'blob', 'tree', 'commit', 'tag', ...)"
+msgstr "顯示物件類型(可以是 “blob”、“tree”、“commit”、“tag” 等其中一個)"
+
+#: builtin/cat-file.c:843
 msgid "show object size"
 msgstr "顯示物件大小"
 
-#: builtin/cat-file.c:666
-msgid "exit with zero when there's no error"
-msgstr "當沒有錯誤時離開並返回零"
+#: builtin/cat-file.c:845
+msgid "allow -s and -t to work with broken/corrupt objects"
+msgstr "允許 -s 和 -t 對損壞的物件生效"
 
-#: builtin/cat-file.c:667
-msgid "pretty-print object's content"
-msgstr "美觀地列印物件的內容"
+#: builtin/cat-file.c:847
+msgid "Batch objects requested on stdin (or --batch-all-objects)"
+msgstr "批次處理 stdin 上請求的物件(或 --batch-all-objects)"
 
-#: builtin/cat-file.c:669
-msgid "for blob objects, run textconv on object's content"
-msgstr "對於資料物件,對其內容做文字轉換"
+#: builtin/cat-file.c:849
+msgid "show full <object> or <rev> contents"
+msgstr "顯示完整的 <object> 或 <rev> 內容"
 
-#: builtin/cat-file.c:671
-msgid "for blob objects, run filters on object's content"
-msgstr "對於資料物件,對其內容做過濾"
+#: builtin/cat-file.c:853
+msgid "like --batch, but don't emit <contents>"
+msgstr "類似 --batch 但不輸出 <contents>"
 
-#: builtin/cat-file.c:672
-msgid "blob"
-msgstr "blob"
+#: builtin/cat-file.c:857
+msgid "read commands from stdin"
+msgstr "從標準輸入讀取命令"
 
-#: builtin/cat-file.c:673
-msgid "use a specific path for --textconv/--filters"
-msgstr "å°\8dæ\96¼ --textconv/--filters ä½¿ç\94¨ä¸\80å\80\8bç\89¹å®\9aç\9a\84è·¯å¾\91"
+#: builtin/cat-file.c:861
+msgid "with --batch[-check]: ignores stdin, batches all known objects"
+msgstr "å\82³å\85¥ --batch[-check]ï¼\9a忽ç\95¥æ¨\99æº\96輸å\85¥ï¼\8cæ\89¹æ¬¡è\99\95ç\90\86æ\89\80æ\9c\89å·²ç\9f¥ç\89©ä»¶"
 
-#: builtin/cat-file.c:675
-msgid "allow -s and -t to work with broken/corrupt objects"
-msgstr "允許 -s 和 -t 對損壞的物件生效"
+#: builtin/cat-file.c:863
+msgid "Change or optimize batch output"
+msgstr "變更或最佳化批次處理的輸出"
 
-#: builtin/cat-file.c:676
+#: builtin/cat-file.c:864
 msgid "buffer --batch output"
 msgstr "緩衝 --batch 的輸出"
 
-#: builtin/cat-file.c:678
-msgid "show info and content of objects fed from the standard input"
-msgstr "顯示從標準輸入提供的物件的訊息和內容"
+#: builtin/cat-file.c:866
+msgid "follow in-tree symlinks"
+msgstr "追蹤樹中的符號連結"
 
-#: builtin/cat-file.c:682
-msgid "show info about objects fed from the standard input"
-msgstr "顯示從標準輸入提供的物件的訊息"
+#: builtin/cat-file.c:868
+msgid "do not order objects before emitting them"
+msgstr "不要在輸出物件前排序"
 
-#: builtin/cat-file.c:686
-msgid "follow in-tree symlinks (used with --batch or --batch-check)"
-msgstr "跟隨樹內符號連結(和 --batch 或 --batch-check 共用)"
+#: builtin/cat-file.c:870
+msgid ""
+"Emit object (blob or tree) with conversion or filter (stand-alone, or with "
+"batch)"
+msgstr "轉換或過濾後輸出物件(blob 或樹)(單獨或批次處理)"
 
-#: builtin/cat-file.c:688
-msgid "show all objects with --batch or --batch-check"
-msgstr "使用 --batch 或 --batch-check 參數顯示所有物件"
+#: builtin/cat-file.c:872
+msgid "run textconv on object's content"
+msgstr "在物件內容執行 textconv"
 
-#: builtin/cat-file.c:690
-msgid "do not order --batch-all-objects output"
-msgstr "不要對 --batch-all-objects 的輸出排序"
+#: builtin/cat-file.c:874
+msgid "run filters on object's content"
+msgstr "在物件內容執行過濾器"
 
-#: builtin/check-attr.c:13
-msgid "git check-attr [-a | --all | <attr>...] [--] <pathname>..."
-msgstr "git check-attr [-a | --all | <屬性>...] [--] <路徑名>..."
+#: builtin/cat-file.c:875
+msgid "blob|tree"
+msgstr "blob|tree"
 
-#: builtin/check-attr.c:14
-msgid "git check-attr --stdin [-z] [-a | --all | <attr>...]"
-msgstr "git check-attr --stdin [-z] [-a | --all | <屬性>...]"
+#: builtin/cat-file.c:876
+msgid "use a <path> for (--textconv | --filters); Not with 'batch'"
+msgstr "請在 (--textconv | --filters) 使用 <path>,而非 “batch”"
 
-#: builtin/check-attr.c:21
-msgid "report all attributes set on file"
-msgstr "報告設定在檔案上的所有屬性"
+#: builtin/cat-file.c:894
+#, c-format
+msgid "'%s=<%s>' needs '%s' or '%s'"
+msgstr "「%s=<%s>」需要「%s」或「%s」"
 
-#: builtin/check-attr.c:22
-msgid "use .gitattributes only from the index"
-msgstr "只使用索引中的 .gitattributes"
+#: builtin/cat-file.c:896
+msgid "path|tree-ish"
+msgstr "path|tree-ish"
 
-#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:100
+#: builtin/cat-file.c:903 builtin/cat-file.c:906 builtin/cat-file.c:909
+#, c-format
+msgid "'%s' requires a batch mode"
+msgstr "「%s」需要批次處理模式"
+
+#: builtin/cat-file.c:921
+#, c-format
+msgid "'-%c' is incompatible with batch mode"
+msgstr "「-%c」與批次處理模式不相容"
+
+#: builtin/cat-file.c:924
+msgid "batch modes take no arguments"
+msgstr "批次處理模式不取引數"
+
+#: builtin/cat-file.c:932 builtin/cat-file.c:935
+#, c-format
+msgid "<rev> required with '%s'"
+msgstr "<rev> 需要搭配「%s」"
+
+#: builtin/cat-file.c:938
+#, c-format
+msgid "<object> required with '-%c'"
+msgstr "<object> 需要搭配「-%c」"
+
+#: builtin/cat-file.c:943 builtin/notes.c:374 builtin/notes.c:429
+#: builtin/notes.c:507 builtin/notes.c:519 builtin/notes.c:596
+#: builtin/notes.c:663 builtin/notes.c:813 builtin/notes.c:965
+#: builtin/notes.c:987 builtin/prune-packed.c:25 builtin/receive-pack.c:2489
+#: builtin/tag.c:592
+msgid "too many arguments"
+msgstr "太多參數"
+
+#: builtin/cat-file.c:947
+#, c-format
+msgid "only two arguments allowed in <type> <object> mode, not %d"
+msgstr "只允許在 <type> <object> 模式傳入兩個引數,但傳了 %d 個"
+
+#: builtin/check-attr.c:13
+msgid "git check-attr [-a | --all | <attr>...] [--] <pathname>..."
+msgstr "git check-attr [-a | --all | <屬性>...] [--] <路徑名>..."
+
+#: builtin/check-attr.c:14
+msgid "git check-attr --stdin [-z] [-a | --all | <attr>...]"
+msgstr "git check-attr --stdin [-z] [-a | --all | <屬性>...]"
+
+#: builtin/check-attr.c:21
+msgid "report all attributes set on file"
+msgstr "報告設定在檔案上的所有屬性"
+
+#: builtin/check-attr.c:22
+msgid "use .gitattributes only from the index"
+msgstr "只使用索引中的 .gitattributes"
+
+#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:101
 msgid "read file names from stdin"
 msgstr "從標準輸入讀出檔案名"
 
@@ -11982,8 +12347,8 @@ msgstr "從標準輸入讀出檔案名"
 msgid "terminate input and output records by a NUL character"
 msgstr "輸入和輸出的紀錄使用 NUL 字元終結"
 
-#: builtin/check-ignore.c:21 builtin/checkout.c:1532 builtin/gc.c:550
-#: builtin/worktree.c:493
+#: builtin/check-ignore.c:21 builtin/checkout.c:1550 builtin/gc.c:550
+#: builtin/worktree.c:565
 msgid "suppress progress reporting"
 msgstr "不顯示進度報告"
 
@@ -12040,158 +12405,162 @@ msgstr "未指定聯繫位址"
 msgid "git checkout--worker [<options>]"
 msgstr "git checkout--worker [<選項>]"
 
-#: builtin/checkout--worker.c:118 builtin/checkout-index.c:201
-#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1864
-#: builtin/submodule--helper.c:1867 builtin/submodule--helper.c:1875
-#: builtin/submodule--helper.c:2511 builtin/submodule--helper.c:2577
-#: builtin/worktree.c:491 builtin/worktree.c:728
+#: builtin/checkout--worker.c:118 builtin/checkout-index.c:235
+#: builtin/column.c:31 builtin/column.c:32 builtin/submodule--helper.c:1878
+#: builtin/submodule--helper.c:1881 builtin/submodule--helper.c:1889
+#: builtin/submodule--helper.c:2716 builtin/worktree.c:563
+#: builtin/worktree.c:808
 msgid "string"
 msgstr "字串"
 
-#: builtin/checkout--worker.c:119 builtin/checkout-index.c:202
+#: builtin/checkout--worker.c:119 builtin/checkout-index.c:236
 msgid "when creating files, prepend <string>"
 msgstr "在建立檔案時,在前面加上 <字串>"
 
-#: builtin/checkout-index.c:152
+#: builtin/checkout-index.c:184
 msgid "git checkout-index [<options>] [--] [<file>...]"
 msgstr "git checkout-index [<選項>] [--] [<檔案>...]"
 
-#: builtin/checkout-index.c:169
+#: builtin/checkout-index.c:201
 msgid "stage should be between 1 and 3 or all"
 msgstr "索引值應該取值 1 到 3 或者 all"
 
-#: builtin/checkout-index.c:187
+#: builtin/checkout-index.c:219
 msgid "check out all files in the index"
 msgstr "簽出索引區的所有檔案"
 
-#: builtin/checkout-index.c:188
+#: builtin/checkout-index.c:221
+msgid "do not skip files with skip-worktree set"
+msgstr "設定 skip-worktree 時不略過檔案"
+
+#: builtin/checkout-index.c:222
 msgid "force overwrite of existing files"
 msgstr "強制覆蓋現有的檔案"
 
-#: builtin/checkout-index.c:190
+#: builtin/checkout-index.c:224
 msgid "no warning for existing files and files not in index"
 msgstr "存在或不在索引中的檔案都沒有警告"
 
-#: builtin/checkout-index.c:192
+#: builtin/checkout-index.c:226
 msgid "don't checkout new files"
 msgstr "不簽出新檔案"
 
-#: builtin/checkout-index.c:194
+#: builtin/checkout-index.c:228
 msgid "update stat information in the index file"
 msgstr "更新索引中檔案的狀態訊息"
 
-#: builtin/checkout-index.c:198
+#: builtin/checkout-index.c:232
 msgid "read list of paths from the standard input"
 msgstr "從標準輸入讀取路徑列表"
 
-#: builtin/checkout-index.c:200
+#: builtin/checkout-index.c:234
 msgid "write the content to temporary files"
 msgstr "將內容寫入暫存檔"
 
-#: builtin/checkout-index.c:204
+#: builtin/checkout-index.c:238
 msgid "copy out the files from named stage"
 msgstr "從指定暫存區中拷出檔案"
 
-#: builtin/checkout.c:33
+#: builtin/checkout.c:34
 msgid "git checkout [<options>] <branch>"
 msgstr "git checkout [<選項>] <分支>"
 
-#: builtin/checkout.c:34
+#: builtin/checkout.c:35
 msgid "git checkout [<options>] [<branch>] -- <file>..."
 msgstr "git checkout [<選項>] [<分支>] -- <檔案>..."
 
-#: builtin/checkout.c:39
+#: builtin/checkout.c:40
 msgid "git switch [<options>] [<branch>]"
 msgstr "git switch [<選項>] [<分支>]"
 
-#: builtin/checkout.c:44
+#: builtin/checkout.c:45
 msgid "git restore [<options>] [--source=<branch>] <file>..."
 msgstr "git restore [<選項>] [--source=<分支>] <檔案>..."
 
-#: builtin/checkout.c:198 builtin/checkout.c:237
+#: builtin/checkout.c:199 builtin/checkout.c:238
 #, c-format
 msgid "path '%s' does not have our version"
 msgstr "路徑 '%s' 沒有我們的版本"
 
-#: builtin/checkout.c:200 builtin/checkout.c:239
+#: builtin/checkout.c:201 builtin/checkout.c:240
 #, c-format
 msgid "path '%s' does not have their version"
 msgstr "路徑 '%s' 沒有他們的版本"
 
-#: builtin/checkout.c:216
+#: builtin/checkout.c:217
 #, c-format
 msgid "path '%s' does not have all necessary versions"
 msgstr "路徑 '%s' 沒有全部必需的版本"
 
-#: builtin/checkout.c:269
+#: builtin/checkout.c:271
 #, c-format
 msgid "path '%s' does not have necessary versions"
 msgstr "路徑 '%s' 沒有必需的版本"
 
-#: builtin/checkout.c:286
+#: builtin/checkout.c:291
 #, c-format
 msgid "path '%s': cannot merge"
 msgstr "path '%s':無法合併"
 
-#: builtin/checkout.c:302
+#: builtin/checkout.c:307
 #, c-format
 msgid "Unable to add merge result for '%s'"
 msgstr "無法為 '%s' 新增合併結果"
 
-#: builtin/checkout.c:419
+#: builtin/checkout.c:424
 #, c-format
 msgid "Recreated %d merge conflict"
 msgid_plural "Recreated %d merge conflicts"
 msgstr[0] "重新建立了 %d 個合併衝突"
 
-#: builtin/checkout.c:424
+#: builtin/checkout.c:429
 #, c-format
 msgid "Updated %d path from %s"
 msgid_plural "Updated %d paths from %s"
 msgstr[0] "從 %2$s 更新了 %1$d 個路徑"
 
-#: builtin/checkout.c:431
+#: builtin/checkout.c:436
 #, c-format
 msgid "Updated %d path from the index"
 msgid_plural "Updated %d paths from the index"
 msgstr[0] "從索引區更新了 %d 個路徑"
 
-#: builtin/checkout.c:454 builtin/checkout.c:457 builtin/checkout.c:460
-#: builtin/checkout.c:464
+#: builtin/checkout.c:459 builtin/checkout.c:462 builtin/checkout.c:465
+#: builtin/checkout.c:469
 #, c-format
 msgid "'%s' cannot be used with updating paths"
 msgstr "'%s' 不能在更新路徑時使用"
 
-#: builtin/checkout.c:474
+#: builtin/checkout.c:479
 #, c-format
 msgid "Cannot update paths and switch to branch '%s' at the same time."
 msgstr "不能同時更新路徑並切換到分支'%s'。"
 
-#: builtin/checkout.c:478
+#: builtin/checkout.c:483
 #, c-format
 msgid "neither '%s' or '%s' is specified"
 msgstr "'%s' 或 '%s' 都沒有指定"
 
-#: builtin/checkout.c:482
+#: builtin/checkout.c:487
 #, c-format
 msgid "'%s' must be used when '%s' is not specified"
 msgstr "未指定 '%2$s' 時,必須使用 '%1$s'"
 
-#: builtin/checkout.c:487 builtin/checkout.c:492
+#: builtin/checkout.c:492 builtin/checkout.c:497
 #, c-format
 msgid "'%s' or '%s' cannot be used with %s"
 msgstr "'%s' 或 '%s' 不能和 %s 一起使用"
 
-#: builtin/checkout.c:566 builtin/checkout.c:573
+#: builtin/checkout.c:571 builtin/checkout.c:578
 #, c-format
 msgid "path '%s' is unmerged"
 msgstr "路徑 '%s' 未合併"
 
-#: builtin/checkout.c:747
+#: builtin/checkout.c:753
 msgid "you need to resolve your current index first"
 msgstr "您需要先解決目前索引的衝突"
 
-#: builtin/checkout.c:797
+#: builtin/checkout.c:809
 #, c-format
 msgid ""
 "cannot continue with staged changes in the following files:\n"
@@ -12200,51 +12569,51 @@ msgstr ""
 "不能繼續,下列檔案有暫存的修改:\n"
 "%s"
 
-#: builtin/checkout.c:890
+#: builtin/checkout.c:902
 #, c-format
 msgid "Can not do reflog for '%s': %s\n"
 msgstr "不能對 '%s' 執行 reflog 動作:%s\n"
 
-#: builtin/checkout.c:934
+#: builtin/checkout.c:947
 msgid "HEAD is now at"
 msgstr "HEAD 目前位於"
 
-#: builtin/checkout.c:938 builtin/clone.c:609 t/helper/test-fast-rebase.c:203
+#: builtin/checkout.c:951 builtin/clone.c:615 t/helper/test-fast-rebase.c:203
 msgid "unable to update HEAD"
 msgstr "不能更新 HEAD"
 
-#: builtin/checkout.c:942
+#: builtin/checkout.c:955
 #, c-format
 msgid "Reset branch '%s'\n"
 msgstr "重設分支 '%s'\n"
 
-#: builtin/checkout.c:945
+#: builtin/checkout.c:958
 #, c-format
 msgid "Already on '%s'\n"
 msgstr "已經位於 '%s'\n"
 
-#: builtin/checkout.c:949
+#: builtin/checkout.c:962
 #, c-format
 msgid "Switched to and reset branch '%s'\n"
 msgstr "切換並重設分支 '%s'\n"
 
-#: builtin/checkout.c:951 builtin/checkout.c:1388
+#: builtin/checkout.c:964 builtin/checkout.c:1398
 #, c-format
 msgid "Switched to a new branch '%s'\n"
 msgstr "切換到一個新分支 '%s'\n"
 
-#: builtin/checkout.c:953
+#: builtin/checkout.c:966
 #, c-format
 msgid "Switched to branch '%s'\n"
 msgstr "切換到分支 '%s'\n"
 
 #  譯者:請維持前導空格
-#: builtin/checkout.c:1004
+#: builtin/checkout.c:1017
 #, c-format
 msgid " ... and %d more.\n"
 msgstr " ... 及其它 %d 個。\n"
 
-#: builtin/checkout.c:1010
+#: builtin/checkout.c:1023
 #, c-format
 msgid ""
 "Warning: you are leaving %d commit behind, not connected to\n"
@@ -12261,7 +12630,7 @@ msgstr[0] ""
 "\n"
 "%s\n"
 
-#: builtin/checkout.c:1029
+#: builtin/checkout.c:1042
 #, c-format
 msgid ""
 "If you want to keep it by creating a new branch, this may be a good time\n"
@@ -12282,19 +12651,19 @@ msgstr[0] ""
 " git branch <新分支名> %s\n"
 "\n"
 
-#: builtin/checkout.c:1064
+#: builtin/checkout.c:1077
 msgid "internal error in revision walk"
 msgstr "在版本遍歷時遇到內部錯誤"
 
-#: builtin/checkout.c:1068
+#: builtin/checkout.c:1081
 msgid "Previous HEAD position was"
 msgstr "之前的 HEAD 位置是"
 
-#: builtin/checkout.c:1114 builtin/checkout.c:1383
+#: builtin/checkout.c:1124 builtin/checkout.c:1393
 msgid "You are on a branch yet to be born"
 msgstr "您位於一個尚未初始化的分支"
 
-#: builtin/checkout.c:1196
+#: builtin/checkout.c:1206
 #, c-format
 msgid ""
 "'%s' could be both a local file and a tracking branch.\n"
@@ -12303,7 +12672,7 @@ msgstr ""
 "'%s' 既可以是一個本機檔案,也可以是一個追蹤分支。\n"
 "請使用 --(和可選的 --no-guess)來消除歧義"
 
-#: builtin/checkout.c:1203
+#: builtin/checkout.c:1213
 msgid ""
 "If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
 "you can do so by fully qualifying the name with the --track option:\n"
@@ -12322,51 +12691,56 @@ msgstr ""
 "如果您總是喜歡使用模糊的簡短分支名 <name>,而不喜歡如 'origin' 的遠端\n"
 "版本庫名,可以在設定中設定 checkout.defaultRemote=origin。"
 
-#: builtin/checkout.c:1213
+#: builtin/checkout.c:1223
 #, c-format
 msgid "'%s' matched multiple (%d) remote tracking branches"
 msgstr "'%s' 符合多個 (%d) 遠端追蹤分支"
 
-#: builtin/checkout.c:1279
+#: builtin/checkout.c:1289
 msgid "only one reference expected"
 msgstr "預期只有一個引用"
 
-#: builtin/checkout.c:1296
+#: builtin/checkout.c:1306
 #, c-format
 msgid "only one reference expected, %d given."
 msgstr "應只有一個引用,卻提供了 %d 個。"
 
-#: builtin/checkout.c:1342 builtin/worktree.c:269 builtin/worktree.c:436
+#: builtin/checkout.c:1352 builtin/worktree.c:338 builtin/worktree.c:508
 #, c-format
 msgid "invalid reference: %s"
 msgstr "無效引用:%s"
 
-#: builtin/checkout.c:1355 builtin/checkout.c:1725
+#: builtin/checkout.c:1365 builtin/checkout.c:1744
 #, c-format
 msgid "reference is not a tree: %s"
 msgstr "引用不是一個樹:%s"
 
-#: builtin/checkout.c:1402
+#: builtin/checkout.c:1413
 #, c-format
 msgid "a branch is expected, got tag '%s'"
 msgstr "期望一個分支,得到標籤 '%s'"
 
-#: builtin/checkout.c:1404
+#: builtin/checkout.c:1415
 #, c-format
 msgid "a branch is expected, got remote branch '%s'"
 msgstr "期望一個分支,得到遠端分支 '%s'"
 
-#: builtin/checkout.c:1405 builtin/checkout.c:1413
+#: builtin/checkout.c:1417 builtin/checkout.c:1426
 #, c-format
 msgid "a branch is expected, got '%s'"
 msgstr "期望一個分支,得到 '%s'"
 
-#: builtin/checkout.c:1408
+#: builtin/checkout.c:1420
 #, c-format
 msgid "a branch is expected, got commit '%s'"
 msgstr "期望一個分支,得到提交 '%s'"
 
-#: builtin/checkout.c:1424
+#: builtin/checkout.c:1429
+msgid ""
+"If you want to detach HEAD at the commit, try again with the --detach option."
+msgstr "若您想要分離提交的 HEAD,請傳入 --detach 選項重試。"
+
+#: builtin/checkout.c:1442
 msgid ""
 "cannot switch branch while merging\n"
 "Consider \"git merge --quit\" or \"git worktree add\"."
@@ -12374,7 +12748,7 @@ msgstr ""
 "不能在合併時切換分支\n"
 "考慮使用 \"git merge --quit\" 或 \"git worktree add\"。"
 
-#: builtin/checkout.c:1428
+#: builtin/checkout.c:1446
 msgid ""
 "cannot switch branch in the middle of an am session\n"
 "Consider \"git am --quit\" or \"git worktree add\"."
@@ -12382,7 +12756,7 @@ msgstr ""
 "不能在 am 工作階段期間切換分支\n"
 "考慮使用 \"git am --quit\" 或 \"git worktree add\"。"
 
-#: builtin/checkout.c:1432
+#: builtin/checkout.c:1450
 msgid ""
 "cannot switch branch while rebasing\n"
 "Consider \"git rebase --quit\" or \"git worktree add\"."
@@ -12390,7 +12764,7 @@ msgstr ""
 "不能在重定基底時切換分支\n"
 "考慮使用 \"git rebase --quit\" 或 \"git worktree add\"。"
 
-#: builtin/checkout.c:1436
+#: builtin/checkout.c:1454
 msgid ""
 "cannot switch branch while cherry-picking\n"
 "Consider \"git cherry-pick --quit\" or \"git worktree add\"."
@@ -12398,7 +12772,7 @@ msgstr ""
 "不能在揀選時切換分支\n"
 "考慮使用 \"git cherry-pick --quit\" 或 \"git worktree add\"。"
 
-#: builtin/checkout.c:1440
+#: builtin/checkout.c:1458
 msgid ""
 "cannot switch branch while reverting\n"
 "Consider \"git revert --quit\" or \"git worktree add\"."
@@ -12406,196 +12780,192 @@ msgstr ""
 "不能在還原時切換分支\n"
 "考慮使用 \"git revert --quit\" 或 \"git worktree add\"。"
 
-#: builtin/checkout.c:1444
+#: builtin/checkout.c:1462
 msgid "you are switching branch while bisecting"
 msgstr "您在執行二分搜尋時切換分支"
 
-#: builtin/checkout.c:1451
+#: builtin/checkout.c:1469
 msgid "paths cannot be used with switching branches"
 msgstr "路徑不能和切換分支同時使用"
 
-#: builtin/checkout.c:1454 builtin/checkout.c:1458 builtin/checkout.c:1462
+#: builtin/checkout.c:1472 builtin/checkout.c:1476 builtin/checkout.c:1480
 #, c-format
 msgid "'%s' cannot be used with switching branches"
 msgstr "'%s' 不能和切換分支同時使用"
 
-#: builtin/checkout.c:1466 builtin/checkout.c:1469 builtin/checkout.c:1472
-#: builtin/checkout.c:1477 builtin/checkout.c:1482
+#: builtin/checkout.c:1484 builtin/checkout.c:1487 builtin/checkout.c:1490
+#: builtin/checkout.c:1495 builtin/checkout.c:1500
 #, c-format
 msgid "'%s' cannot be used with '%s'"
 msgstr "'%s' 不能和 '%s' 同時使用"
 
-#: builtin/checkout.c:1479
+#: builtin/checkout.c:1497
 #, c-format
 msgid "'%s' cannot take <start-point>"
 msgstr "'%s' 不帶 <起始點>"
 
-#: builtin/checkout.c:1487
+#: builtin/checkout.c:1505
 #, c-format
 msgid "Cannot switch branch to a non-commit '%s'"
 msgstr "不能切換分支到一個非提交 '%s'"
 
-#: builtin/checkout.c:1494
+#: builtin/checkout.c:1512
 msgid "missing branch or commit argument"
 msgstr "缺少分支或提交參數"
 
-#: builtin/checkout.c:1537
+#: builtin/checkout.c:1555
 msgid "perform a 3-way merge with the new branch"
 msgstr "和新的分支執行三方合併"
 
-#: builtin/checkout.c:1538 builtin/log.c:1825 parse-options.h:323
+#: builtin/checkout.c:1556 builtin/log.c:1844 parse-options.h:354
 msgid "style"
 msgstr "風格"
 
-#: builtin/checkout.c:1539
+#: builtin/checkout.c:1557
 msgid "conflict style (merge, diff3, or zdiff3)"
 msgstr "衝突輸出風格(merge、diff3 或 zdiff3)"
 
-#: builtin/checkout.c:1551 builtin/worktree.c:488
+#: builtin/checkout.c:1569 builtin/worktree.c:560
 msgid "detach HEAD at named commit"
 msgstr "HEAD 從指定的提交分離"
 
-#: builtin/checkout.c:1553
-msgid "set up tracking mode (see git-pull(1))"
-msgstr "設定追蹤模式(參見 git-pull(1))"
-
-#: builtin/checkout.c:1556
+#: builtin/checkout.c:1574
 msgid "force checkout (throw away local modifications)"
 msgstr "強制簽出(捨棄本機修改)"
 
-#: builtin/checkout.c:1558
+#: builtin/checkout.c:1576
 msgid "new-branch"
 msgstr "新分支"
 
-#: builtin/checkout.c:1558
+#: builtin/checkout.c:1576
 msgid "new unparented branch"
 msgstr "新的沒有父提交的分支"
 
-#: builtin/checkout.c:1560 builtin/merge.c:305
+#: builtin/checkout.c:1578 builtin/merge.c:305
 msgid "update ignored files (default)"
 msgstr "更新忽略的檔案(預設)"
 
-#: builtin/checkout.c:1563
+#: builtin/checkout.c:1581
 msgid "do not check if another worktree is holding the given ref"
 msgstr "不檢查指定的引用是否被其他工作區所占用"
 
-#: builtin/checkout.c:1576
+#: builtin/checkout.c:1594
 msgid "checkout our version for unmerged files"
 msgstr "對尚未合併的檔案簽出我們的版本"
 
-#: builtin/checkout.c:1579
+#: builtin/checkout.c:1597
 msgid "checkout their version for unmerged files"
 msgstr "對尚未合併的檔案簽出他們的版本"
 
-#: builtin/checkout.c:1583
+#: builtin/checkout.c:1601
 msgid "do not limit pathspecs to sparse entries only"
 msgstr "對路徑不做稀疏簽出的限制"
 
-#: builtin/checkout.c:1640
+#: builtin/checkout.c:1659
 #, c-format
 msgid "options '-%c', '-%c', and '%s' cannot be used together"
 msgstr "「-%c」、「-%c」和「%s」選項不得同時使用"
 
-#: builtin/checkout.c:1681
+#: builtin/checkout.c:1700
 msgid "--track needs a branch name"
 msgstr "--track 需要一個分支名"
 
-#: builtin/checkout.c:1686
+#: builtin/checkout.c:1705
 #, c-format
 msgid "missing branch name; try -%c"
 msgstr "缺少分支名稱,請嘗試 -%c"
 
-#: builtin/checkout.c:1718
+#: builtin/checkout.c:1737
 #, c-format
 msgid "could not resolve %s"
 msgstr "無法解析 %s"
 
-#: builtin/checkout.c:1734
+#: builtin/checkout.c:1753
 msgid "invalid path specification"
 msgstr "無效的路徑規格"
 
-#: builtin/checkout.c:1741
+#: builtin/checkout.c:1760
 #, c-format
 msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
 msgstr "'%s' 不是一個提交,不能基於它建立分支 '%s'"
 
-#: builtin/checkout.c:1745
+#: builtin/checkout.c:1764
 #, c-format
 msgid "git checkout: --detach does not take a path argument '%s'"
 msgstr "git checkout:--detach 不能接收路徑參數 '%s'"
 
-#: builtin/checkout.c:1770
+#: builtin/checkout.c:1789
 msgid ""
 "git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
 "checking out of the index."
 msgstr ""
 "git checkout:在從索引簽出時,--ours/--theirs、--force 和 --merge 不相容。"
 
-#: builtin/checkout.c:1775
+#: builtin/checkout.c:1794
 msgid "you must specify path(s) to restore"
 msgstr "您必須指定一個要復原的路徑"
 
-#: builtin/checkout.c:1800 builtin/checkout.c:1802 builtin/checkout.c:1854
-#: builtin/checkout.c:1856 builtin/clone.c:126 builtin/remote.c:170
-#: builtin/remote.c:172 builtin/submodule--helper.c:2959
-#: builtin/submodule--helper.c:3253 builtin/worktree.c:484
-#: builtin/worktree.c:486
+#: builtin/checkout.c:1819 builtin/checkout.c:1821 builtin/checkout.c:1873
+#: builtin/checkout.c:1875 builtin/clone.c:130 builtin/remote.c:171
+#: builtin/remote.c:173 builtin/submodule--helper.c:3038
+#: builtin/submodule--helper.c:3371 builtin/worktree.c:556
+#: builtin/worktree.c:558
 msgid "branch"
 msgstr "分支"
 
-#: builtin/checkout.c:1801
+#: builtin/checkout.c:1820
 msgid "create and checkout a new branch"
 msgstr "建立並簽出一個新的分支"
 
-#: builtin/checkout.c:1803
+#: builtin/checkout.c:1822
 msgid "create/reset and checkout a branch"
 msgstr "建立/重設並簽出一個分支"
 
-#: builtin/checkout.c:1804
+#: builtin/checkout.c:1823
 msgid "create reflog for new branch"
 msgstr "為新的分支建立引用日誌"
 
-#: builtin/checkout.c:1806
+#: builtin/checkout.c:1825
 msgid "second guess 'git checkout <no-such-branch>' (default)"
 msgstr "二次猜測 'git checkout <無此分支>'(預設)"
 
-#: builtin/checkout.c:1807
+#: builtin/checkout.c:1826
 msgid "use overlay mode (default)"
 msgstr "使用疊加模式(預設)"
 
-#: builtin/checkout.c:1855
+#: builtin/checkout.c:1874
 msgid "create and switch to a new branch"
 msgstr "建立並切換一個新分支"
 
-#: builtin/checkout.c:1857
+#: builtin/checkout.c:1876
 msgid "create/reset and switch to a branch"
 msgstr "建立/重設並切換一個分支"
 
-#: builtin/checkout.c:1859
+#: builtin/checkout.c:1878
 msgid "second guess 'git switch <no-such-branch>'"
 msgstr "二次猜測 'git switch <無此分支>'"
 
-#: builtin/checkout.c:1861
+#: builtin/checkout.c:1880
 msgid "throw away local modifications"
 msgstr "捨棄本機修改"
 
-#: builtin/checkout.c:1897
+#: builtin/checkout.c:1916
 msgid "which tree-ish to checkout from"
 msgstr "要簽出哪一個樹"
 
-#: builtin/checkout.c:1899
+#: builtin/checkout.c:1918
 msgid "restore the index"
 msgstr "復原索引"
 
-#: builtin/checkout.c:1901
+#: builtin/checkout.c:1920
 msgid "restore the working tree (default)"
 msgstr "復原工作區(預設)"
 
-#: builtin/checkout.c:1903
+#: builtin/checkout.c:1922
 msgid "ignore unmerged entries"
 msgstr "忽略未合併條目"
 
-#: builtin/checkout.c:1904
+#: builtin/checkout.c:1923
 msgid "use overlay mode"
 msgstr "使用疊加模式"
 
@@ -12742,8 +13112,8 @@ msgid "remove whole directories"
 msgstr "刪除整個目錄"
 
 #: builtin/clean.c:932 builtin/describe.c:565 builtin/describe.c:567
-#: builtin/grep.c:937 builtin/log.c:184 builtin/log.c:186
-#: builtin/ls-files.c:651 builtin/name-rev.c:535 builtin/name-rev.c:537
+#: builtin/grep.c:938 builtin/log.c:185 builtin/log.c:187
+#: builtin/ls-files.c:651 builtin/name-rev.c:585 builtin/name-rev.c:587
 #: builtin/show-ref.c:179
 msgid "pattern"
 msgstr "模式"
@@ -12778,208 +13148,212 @@ msgstr ""
 msgid "-x and -X cannot be used together"
 msgstr "-x 和 -X 不能同時使用"
 
-#: builtin/clone.c:45
+#: builtin/clone.c:47
 msgid "git clone [<options>] [--] <repo> [<dir>]"
 msgstr "git clone [<選項>] [--] <版本庫> [<路徑>]"
 
-#: builtin/clone.c:96
+#: builtin/clone.c:100
 msgid "don't clone shallow repository"
 msgstr "不要複製淺版本庫"
 
-#: builtin/clone.c:98
+#: builtin/clone.c:102
 msgid "don't create a checkout"
 msgstr "不建立一個簽出"
 
-#: builtin/clone.c:99 builtin/clone.c:101 builtin/init-db.c:542
+#: builtin/clone.c:103 builtin/clone.c:105 builtin/init-db.c:542
 msgid "create a bare repository"
 msgstr "建立一個純版本庫"
 
-#: builtin/clone.c:103
+#: builtin/clone.c:107
 msgid "create a mirror repository (implies bare)"
 msgstr "建立一個鏡像版本庫(也是純版本庫)"
 
-#: builtin/clone.c:105
+#: builtin/clone.c:109
 msgid "to clone from a local repository"
 msgstr "從本機版本庫複製"
 
-#: builtin/clone.c:107
+#: builtin/clone.c:111
 msgid "don't use local hardlinks, always copy"
 msgstr "不使用本機硬連結,始終複製"
 
-#: builtin/clone.c:109
+#: builtin/clone.c:113
 msgid "setup as shared repository"
 msgstr "設定為共享版本庫"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "pathspec"
 msgstr "路徑規格"
 
-#: builtin/clone.c:111
+#: builtin/clone.c:115
 msgid "initialize submodules in the clone"
 msgstr "在複製時初始化子模組"
 
-#: builtin/clone.c:115
+#: builtin/clone.c:119
 msgid "number of submodules cloned in parallel"
 msgstr "並行複製的子模組數"
 
-#: builtin/clone.c:116 builtin/init-db.c:539
+#: builtin/clone.c:120 builtin/init-db.c:539
 msgid "template-directory"
 msgstr "範本目錄"
 
-#: builtin/clone.c:117 builtin/init-db.c:540
+#: builtin/clone.c:121 builtin/init-db.c:540
 msgid "directory from which templates will be used"
 msgstr "範本目錄將被使用"
 
-#: builtin/clone.c:119 builtin/clone.c:121 builtin/submodule--helper.c:1871
-#: builtin/submodule--helper.c:2514 builtin/submodule--helper.c:3260
+#: builtin/clone.c:123 builtin/clone.c:125 builtin/submodule--helper.c:1885
+#: builtin/submodule--helper.c:2719 builtin/submodule--helper.c:3378
 msgid "reference repository"
 msgstr "引用版本庫"
 
-#: builtin/clone.c:123 builtin/submodule--helper.c:1873
-#: builtin/submodule--helper.c:2516
+#: builtin/clone.c:127 builtin/submodule--helper.c:1887
+#: builtin/submodule--helper.c:2721
 msgid "use --reference only while cloning"
 msgstr "僅在複製時參考 --reference 指向的本機版本庫"
 
-#: builtin/clone.c:124 builtin/column.c:27 builtin/fmt-merge-msg.c:27
+#: builtin/clone.c:128 builtin/column.c:27 builtin/fmt-merge-msg.c:27
 #: builtin/init-db.c:550 builtin/merge-file.c:48 builtin/merge.c:290
-#: builtin/pack-objects.c:3944 builtin/repack.c:665
-#: builtin/submodule--helper.c:3262 t/helper/test-simple-ipc.c:595
+#: builtin/pack-objects.c:3967 builtin/repack.c:669
+#: builtin/submodule--helper.c:3380 t/helper/test-simple-ipc.c:595
 #: t/helper/test-simple-ipc.c:597
 msgid "name"
 msgstr "名稱"
 
-#: builtin/clone.c:125
+#: builtin/clone.c:129
 msgid "use <name> instead of 'origin' to track upstream"
 msgstr "使用 <名稱> 而不是 'origin' 去追蹤上游"
 
-#: builtin/clone.c:127
+#: builtin/clone.c:131
 msgid "checkout <branch> instead of the remote's HEAD"
 msgstr "簽出 <分支> 而不是遠端 HEAD"
 
-#: builtin/clone.c:129
+#: builtin/clone.c:133
 msgid "path to git-upload-pack on the remote"
 msgstr "遠端 git-upload-pack 路徑"
 
-#: builtin/clone.c:130 builtin/fetch.c:181 builtin/grep.c:876
+#: builtin/clone.c:134 builtin/fetch.c:182 builtin/grep.c:877
 #: builtin/pull.c:212
 msgid "depth"
 msgstr "深度"
 
-#: builtin/clone.c:131
+#: builtin/clone.c:135
 msgid "create a shallow clone of that depth"
 msgstr "建立一個指定深度的淺複製"
 
-#: builtin/clone.c:132 builtin/fetch.c:183 builtin/pack-objects.c:3933
+#: builtin/clone.c:136 builtin/fetch.c:184 builtin/pack-objects.c:3956
 #: builtin/pull.c:215
 msgid "time"
 msgstr "時間"
 
-#: builtin/clone.c:133
+#: builtin/clone.c:137
 msgid "create a shallow clone since a specific time"
 msgstr "建立從指定時間到現在的淺複製"
 
-#: builtin/clone.c:134 builtin/fetch.c:185 builtin/fetch.c:208
-#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1022
+#: builtin/clone.c:138 builtin/fetch.c:186 builtin/fetch.c:212
+#: builtin/pull.c:218 builtin/pull.c:243 builtin/rebase.c:1050
 msgid "revision"
 msgstr "修訂版"
 
-#: builtin/clone.c:135 builtin/fetch.c:186 builtin/pull.c:219
+#: builtin/clone.c:139 builtin/fetch.c:187 builtin/pull.c:219
 msgid "deepen history of shallow clone, excluding rev"
 msgstr "取得更多淺複製的過去歷史記錄,除了特定版本"
 
-#: builtin/clone.c:137 builtin/submodule--helper.c:1883
-#: builtin/submodule--helper.c:2530
+#: builtin/clone.c:141 builtin/submodule--helper.c:1897
+#: builtin/submodule--helper.c:2735
 msgid "clone only one branch, HEAD or --branch"
 msgstr "只複製一個分支、HEAD 或 --branch"
 
-#: builtin/clone.c:139
+#: builtin/clone.c:143
 msgid "don't clone any tags, and make later fetches not to follow them"
 msgstr "不要複製任何標籤,之後取得也不要追蹤這些標籤"
 
-#: builtin/clone.c:141
+#: builtin/clone.c:145
 msgid "any cloned submodules will be shallow"
 msgstr "子模組將以淺下載模式複製"
 
-#: builtin/clone.c:142 builtin/init-db.c:548
+#: builtin/clone.c:146 builtin/init-db.c:548
 msgid "gitdir"
 msgstr "git目錄"
 
-#: builtin/clone.c:143 builtin/init-db.c:549
+#: builtin/clone.c:147 builtin/init-db.c:549
 msgid "separate git dir from working tree"
 msgstr "git目錄和工作區分離"
 
-#: builtin/clone.c:144
+#: builtin/clone.c:148
 msgid "key=value"
 msgstr "key=value"
 
-#: builtin/clone.c:145
+#: builtin/clone.c:149
 msgid "set config inside the new repository"
 msgstr "在新版本庫中設定設定訊息"
 
-#: builtin/clone.c:147 builtin/fetch.c:203 builtin/ls-remote.c:77
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
 #: builtin/pull.c:234 builtin/push.c:575 builtin/send-pack.c:200
 msgid "server-specific"
 msgstr "server-specific"
 
-#: builtin/clone.c:147 builtin/fetch.c:203 builtin/ls-remote.c:77
+#: builtin/clone.c:151 builtin/fetch.c:207 builtin/ls-remote.c:77
 #: builtin/pull.c:235 builtin/push.c:575 builtin/send-pack.c:201
 msgid "option to transmit"
 msgstr "傳輸選項"
 
-#: builtin/clone.c:148 builtin/fetch.c:204 builtin/pull.c:238
+#: builtin/clone.c:152 builtin/fetch.c:208 builtin/pull.c:238
 #: builtin/push.c:576
 msgid "use IPv4 addresses only"
 msgstr "只使用 IPv4 位址"
 
-#: builtin/clone.c:150 builtin/fetch.c:206 builtin/pull.c:241
+#: builtin/clone.c:154 builtin/fetch.c:210 builtin/pull.c:241
 #: builtin/push.c:578
 msgid "use IPv6 addresses only"
 msgstr "只使用 IPv6 位址"
 
-#: builtin/clone.c:154
+#: builtin/clone.c:158
+msgid "apply partial clone filters to submodules"
+msgstr "將部分複製過濾器套用至子模組"
+
+#: builtin/clone.c:160
 msgid "any cloned submodules will use their remote-tracking branch"
 msgstr "任何複製的子模組都將使用它們的遠端追蹤分支"
 
-#: builtin/clone.c:156
+#: builtin/clone.c:162
 msgid "initialize sparse-checkout file to include only files at root"
 msgstr "初始化稀疏簽出檔案,只包含根目錄中的檔案"
 
-#: builtin/clone.c:231
+#: builtin/clone.c:237
 #, c-format
 msgid "info: Could not add alternate for '%s': %s\n"
 msgstr "info: 不能為 '%s' 新增一個備用:%s\n"
 
-#: builtin/clone.c:304
+#: builtin/clone.c:310
 #, c-format
 msgid "%s exists and is not a directory"
 msgstr "%s 存在且不是一個目錄"
 
-#: builtin/clone.c:322
+#: builtin/clone.c:328
 #, c-format
 msgid "failed to start iterator over '%s'"
 msgstr "無法在 '%s' 上啟動疊代器"
 
-#: builtin/clone.c:353
+#: builtin/clone.c:359
 #, c-format
 msgid "failed to create link '%s'"
 msgstr "建立連結 '%s' 失敗"
 
-#: builtin/clone.c:357
+#: builtin/clone.c:363
 #, c-format
 msgid "failed to copy file to '%s'"
 msgstr "複製檔案至 '%s' 失敗"
 
-#: builtin/clone.c:362
+#: builtin/clone.c:368
 #, c-format
 msgid "failed to iterate over '%s'"
 msgstr "無法在 '%s' 上疊代"
 
-#: builtin/clone.c:389
+#: builtin/clone.c:395
 #, c-format
 msgid "done.\n"
 msgstr "完成。\n"
 
-#: builtin/clone.c:403
+#: builtin/clone.c:409
 msgid ""
 "Clone succeeded, but checkout failed.\n"
 "You can inspect what was checked out with 'git status'\n"
@@ -12989,144 +13363,148 @@ msgstr ""
 "您可以透過 'git status' 檢查哪些已被簽出,然後使用指令\n"
 "'git restore --source=HEAD :/' 重試\n"
 
-#: builtin/clone.c:480
+#: builtin/clone.c:486
 #, c-format
 msgid "Could not find remote branch %s to clone."
 msgstr "找不到要複製的遠端分支 %s。"
 
-#: builtin/clone.c:597
+#: builtin/clone.c:603
 #, c-format
 msgid "unable to update %s"
 msgstr "不能更新 %s"
 
-#: builtin/clone.c:645
+#: builtin/clone.c:651
 msgid "failed to initialize sparse-checkout"
 msgstr "無法初始化稀疏簽出"
 
-#: builtin/clone.c:668
+#: builtin/clone.c:674
 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
 msgstr "遠端 HEAD 指向一個不存在的引用,無法簽出。\n"
 
-#: builtin/clone.c:701
+#: builtin/clone.c:709
 msgid "unable to checkout working tree"
 msgstr "不能簽出工作區"
 
-#: builtin/clone.c:779
+#: builtin/clone.c:793
 msgid "unable to write parameters to config file"
 msgstr "無法將參數寫入設定檔案"
 
-#: builtin/clone.c:842
+#: builtin/clone.c:856
 msgid "cannot repack to clean up"
 msgstr "無法執行 repack 來清理"
 
-#: builtin/clone.c:844
+#: builtin/clone.c:858
 msgid "cannot unlink temporary alternates file"
 msgstr "無法刪除暫時的 alternates 檔案"
 
-#: builtin/clone.c:886
+#: builtin/clone.c:901
 msgid "Too many arguments."
 msgstr "太多參數。"
 
-#: builtin/clone.c:890 contrib/scalar/scalar.c:414
+#: builtin/clone.c:905 contrib/scalar/scalar.c:413
 msgid "You must specify a repository to clone."
 msgstr "您必須指定要複製的版本庫。"
 
-#: builtin/clone.c:903
+#: builtin/clone.c:918
 #, c-format
 msgid "options '%s' and '%s %s' cannot be used together"
 msgstr "「%s」和「%s %s」選項不得同時使用"
 
-#: builtin/clone.c:920
+#: builtin/clone.c:935
 #, c-format
 msgid "repository '%s' does not exist"
 msgstr "版本庫 '%s' 不存在"
 
-#: builtin/clone.c:924 builtin/fetch.c:2052
+#: builtin/clone.c:939 builtin/fetch.c:2176
 #, c-format
 msgid "depth %s is not a positive number"
 msgstr "深度 %s 不是一個正數"
 
-#: builtin/clone.c:934
+#: builtin/clone.c:949
 #, c-format
 msgid "destination path '%s' already exists and is not an empty directory."
 msgstr "目的地路徑 '%s' 已經存在,並且不是一個空目錄。"
 
-#: builtin/clone.c:940
+#: builtin/clone.c:955
 #, c-format
 msgid "repository path '%s' already exists and is not an empty directory."
 msgstr "版本庫路徑 '%s' 已經存在,並且不是一個空目錄。"
 
-#: builtin/clone.c:954
+#: builtin/clone.c:969
 #, c-format
 msgid "working tree '%s' already exists."
 msgstr "工作區 '%s' 已經存在。"
 
-#: builtin/clone.c:969 builtin/clone.c:990 builtin/difftool.c:256
-#: builtin/log.c:2012 builtin/worktree.c:281 builtin/worktree.c:313
+#: builtin/clone.c:984 builtin/clone.c:1005 builtin/difftool.c:256
+#: builtin/log.c:2037 builtin/worktree.c:350 builtin/worktree.c:382
 #, c-format
 msgid "could not create leading directories of '%s'"
 msgstr "不能為 '%s' 建立先導目錄"
 
-#: builtin/clone.c:974
+#: builtin/clone.c:989
 #, c-format
 msgid "could not create work tree dir '%s'"
 msgstr "不能建立工作區目錄 '%s'"
 
-#: builtin/clone.c:994
+#: builtin/clone.c:1009
 #, c-format
 msgid "Cloning into bare repository '%s'...\n"
 msgstr "複製到純版本庫 '%s'...\n"
 
-#: builtin/clone.c:996
+#: builtin/clone.c:1011
 #, c-format
 msgid "Cloning into '%s'...\n"
 msgstr "正複製到 '%s'...\n"
 
-#: builtin/clone.c:1025
+#: builtin/clone.c:1040
 msgid ""
 "clone --recursive is not compatible with both --reference and --reference-if-"
 "able"
 msgstr "clone --recursive 與 --reference 和 --reference-if-able 不相容"
 
-#: builtin/clone.c:1080 builtin/remote.c:200 builtin/remote.c:710
+#: builtin/clone.c:1116 builtin/remote.c:201 builtin/remote.c:721
 #, c-format
 msgid "'%s' is not a valid remote name"
 msgstr "'%s' 不是一個有效的遠端名稱"
 
-#: builtin/clone.c:1121
+#: builtin/clone.c:1157
 msgid "--depth is ignored in local clones; use file:// instead."
 msgstr "本機複製會忽略 --depth。請改用 file:// 通訊協定。"
 
-#: builtin/clone.c:1123
+#: builtin/clone.c:1159
 msgid "--shallow-since is ignored in local clones; use file:// instead."
 msgstr "本機複製會忽略 --shallow-since。請改用 file:// 協定。"
 
-#: builtin/clone.c:1125
+#: builtin/clone.c:1161
 msgid "--shallow-exclude is ignored in local clones; use file:// instead."
 msgstr "本機複製會忽略 --shallow-exclude。請改用 file:// 協定。"
 
-#: builtin/clone.c:1127
+#: builtin/clone.c:1163
 msgid "--filter is ignored in local clones; use file:// instead."
 msgstr "本機複製會忽略 --filter。請改用 file:// 協定。"
 
-#: builtin/clone.c:1132
+#: builtin/clone.c:1168
 msgid "source repository is shallow, ignoring --local"
 msgstr "來源版本庫是淺複製,忽略 --local"
 
-#: builtin/clone.c:1137
+#: builtin/clone.c:1173
 msgid "--local is ignored"
 msgstr "--local 被忽略"
 
-#: builtin/clone.c:1216 builtin/clone.c:1276
+#: builtin/clone.c:1185
+msgid "cannot clone from filtered bundle"
+msgstr "無法從過濾後的套件複製"
+
+#: builtin/clone.c:1265 builtin/clone.c:1324
 msgid "remote transport reported error"
 msgstr "遠端傳輸回報錯誤"
 
-#: builtin/clone.c:1228 builtin/clone.c:1239
+#: builtin/clone.c:1277 builtin/clone.c:1289
 #, c-format
 msgid "Remote branch %s not found in upstream %s"
 msgstr "遠端分支 %s 在上游 %s 未發現"
 
-#: builtin/clone.c:1242
+#: builtin/clone.c:1292
 msgid "You appear to have cloned an empty repository."
 msgstr "您複製的版本庫似乎是空的。"
 
@@ -13179,7 +13557,7 @@ msgstr ""
 "split[=<strategy>]] [--reachable|--stdin-packs|--stdin-commits] [--changed-"
 "paths] [--[no-]max-new-filters <n>] [--[no-]progress] <split options>"
 
-#: builtin/commit-graph.c:51 builtin/fetch.c:192 builtin/log.c:1794
+#: builtin/commit-graph.c:51 builtin/fetch.c:196 builtin/log.c:1813
 msgid "dir"
 msgstr "目錄"
 
@@ -13277,7 +13655,7 @@ msgstr ""
 msgid "duplicate parent %s ignored"
 msgstr "忽略重複的父提交 %s"
 
-#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:577
+#: builtin/commit-tree.c:56 builtin/commit-tree.c:134 builtin/log.c:590
 #, c-format
 msgid "not a valid object name %s"
 msgstr "不是一個有效的物件名 %s"
@@ -13300,13 +13678,13 @@ msgstr "父提交"
 msgid "id of a parent commit object"
 msgstr "父提交物件 ID"
 
-#: builtin/commit-tree.c:112 builtin/commit.c:1627 builtin/merge.c:284
-#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1677
-#: builtin/tag.c:454
+#: builtin/commit-tree.c:112 builtin/commit.c:1626 builtin/merge.c:284
+#: builtin/notes.c:407 builtin/notes.c:573 builtin/stash.c:1666
+#: builtin/tag.c:455
 msgid "message"
 msgstr "訊息"
 
-#: builtin/commit-tree.c:113 builtin/commit.c:1627
+#: builtin/commit-tree.c:113 builtin/commit.c:1626
 msgid "commit message"
 msgstr "提交說明"
 
@@ -13314,7 +13692,7 @@ msgstr "提交說明"
 msgid "read commit log message from file"
 msgstr "從檔案中讀取提交說明"
 
-#: builtin/commit-tree.c:119 builtin/commit.c:1644 builtin/merge.c:303
+#: builtin/commit-tree.c:119 builtin/commit.c:1643 builtin/merge.c:303
 #: builtin/pull.c:180 builtin/revert.c:118
 msgid "GPG sign commit"
 msgstr "GPG 提交簽名"
@@ -13327,15 +13705,15 @@ msgstr "必須精確地提供一個樹"
 msgid "git commit-tree: failed to read"
 msgstr "git commit-tree:讀取失敗"
 
-#: builtin/commit.c:42
+#: builtin/commit.c:43
 msgid "git commit [<options>] [--] <pathspec>..."
 msgstr "git commit [<選項>] [--] <路徑規格>..."
 
-#: builtin/commit.c:47
+#: builtin/commit.c:48
 msgid "git status [<options>] [--] <pathspec>..."
 msgstr "git status [<選項>] [--] <路徑規格>..."
 
-#: builtin/commit.c:52
+#: builtin/commit.c:53
 msgid ""
 "You asked to amend the most recent commit, but doing so would make\n"
 "it empty. You can repeat your command with --allow-empty, or you can\n"
@@ -13344,7 +13722,7 @@ msgstr ""
 "您要修補最近的提交,但這麼做會讓它成為空提交。您可以重複您的指令並帶上\n"
 "--allow-empty 選項,或者您可用指令 \"git reset HEAD^\" 整個刪除該提交。\n"
 
-#: builtin/commit.c:57
+#: builtin/commit.c:58
 msgid ""
 "The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
 "If you wish to commit it anyway, use:\n"
@@ -13358,15 +13736,15 @@ msgstr ""
 "    git commit --allow-empty\n"
 "\n"
 
-#: builtin/commit.c:64
+#: builtin/commit.c:65
 msgid "Otherwise, please use 'git rebase --skip'\n"
 msgstr "否則,請使用 'git rebase --skip'\n"
 
-#: builtin/commit.c:67
+#: builtin/commit.c:68
 msgid "Otherwise, please use 'git cherry-pick --skip'\n"
 msgstr "否則,請使用 'git cherry-pick --skip'\n"
 
-#: builtin/commit.c:70
+#: builtin/commit.c:71
 msgid ""
 "and then use:\n"
 "\n"
@@ -13387,111 +13765,111 @@ msgstr ""
 "    git cherry-pick --skip\n"
 "\n"
 
-#: builtin/commit.c:325
+#: builtin/commit.c:326
 msgid "failed to unpack HEAD tree object"
 msgstr "解包 HEAD 樹狀物件失敗"
 
-#: builtin/commit.c:375
+#: builtin/commit.c:376
 msgid "No paths with --include/--only does not make sense."
 msgstr "參數 --include/--only 不跟路徑沒有意義。"
 
-#: builtin/commit.c:387
+#: builtin/commit.c:388
 msgid "unable to create temporary index"
 msgstr "不能建立暫時索引"
 
-#: builtin/commit.c:396
+#: builtin/commit.c:397
 msgid "interactive add failed"
 msgstr "互動式新增失敗"
 
-#: builtin/commit.c:411
+#: builtin/commit.c:412
 msgid "unable to update temporary index"
 msgstr "無法更新暫時索引"
 
-#: builtin/commit.c:413
+#: builtin/commit.c:414
 msgid "Failed to update main cache tree"
 msgstr "不能更新樹的主快取"
 
-#: builtin/commit.c:438 builtin/commit.c:461 builtin/commit.c:509
+#: builtin/commit.c:439 builtin/commit.c:462 builtin/commit.c:510
 msgid "unable to write new_index file"
 msgstr "無法寫 new_index 檔案"
 
-#: builtin/commit.c:490
+#: builtin/commit.c:491
 msgid "cannot do a partial commit during a merge."
 msgstr "在合併過程中不能做部分提交。"
 
-#: builtin/commit.c:492
+#: builtin/commit.c:493
 msgid "cannot do a partial commit during a cherry-pick."
 msgstr "在揀選過程中不能做部分提交。"
 
-#: builtin/commit.c:494
+#: builtin/commit.c:495
 msgid "cannot do a partial commit during a rebase."
 msgstr "在重定基底過程中不能做部分提交。"
 
-#: builtin/commit.c:502
+#: builtin/commit.c:503
 msgid "cannot read the index"
 msgstr "無法讀取索引"
 
-#: builtin/commit.c:521
+#: builtin/commit.c:522
 msgid "unable to write temporary index file"
 msgstr "無法寫暫時索引檔案"
 
-#: builtin/commit.c:619
+#: builtin/commit.c:620
 #, c-format
 msgid "commit '%s' lacks author header"
 msgstr "提交 '%s' 缺少作者訊息"
 
-#: builtin/commit.c:621
+#: builtin/commit.c:622
 #, c-format
 msgid "commit '%s' has malformed author line"
 msgstr "提交 '%s' 有格式錯誤的作者訊息"
 
-#: builtin/commit.c:640
+#: builtin/commit.c:641
 msgid "malformed --author parameter"
 msgstr "格式錯誤的 --author 參數"
 
-#: builtin/commit.c:693
+#: builtin/commit.c:694
 msgid ""
 "unable to select a comment character that is not used\n"
 "in the current commit message"
 msgstr "無法選擇一個未被目前提交說明使用的備註字元"
 
-#: builtin/commit.c:747 builtin/commit.c:781 builtin/commit.c:1166
+#: builtin/commit.c:750 builtin/commit.c:784 builtin/commit.c:1170
 #, c-format
 msgid "could not lookup commit %s"
 msgstr "不能查詢提交 %s"
 
-#: builtin/commit.c:759 builtin/shortlog.c:416
+#: builtin/commit.c:762 builtin/shortlog.c:417
 #, c-format
 msgid "(reading log message from standard input)\n"
 msgstr "(正從標準輸入中讀取日誌訊息)\n"
 
-#: builtin/commit.c:761
+#: builtin/commit.c:764
 msgid "could not read log from standard input"
 msgstr "不能從標準輸入中讀取日誌訊息"
 
-#: builtin/commit.c:765
+#: builtin/commit.c:768
 #, c-format
 msgid "could not read log file '%s'"
 msgstr "不能讀取日誌檔案 '%s'"
 
-#: builtin/commit.c:802
+#: builtin/commit.c:805
 #, c-format
 msgid "options '%s' and '%s:%s' cannot be used together"
 msgstr "「%s」和「%s:%s」選項不得同時使用"
 
-#: builtin/commit.c:814 builtin/commit.c:830
+#: builtin/commit.c:817 builtin/commit.c:833
 msgid "could not read SQUASH_MSG"
 msgstr "不能讀取 SQUASH_MSG"
 
-#: builtin/commit.c:821
+#: builtin/commit.c:824
 msgid "could not read MERGE_MSG"
 msgstr "不能讀取 MERGE_MSG"
 
-#: builtin/commit.c:881
+#: builtin/commit.c:884
 msgid "could not write commit template"
 msgstr "不能寫提交範本"
 
-#: builtin/commit.c:894
+#: builtin/commit.c:897
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13500,7 +13878,7 @@ msgstr ""
 "請輸入描述您變更的提交訊息。\n"
 "開頭是「%c」的行皆會忽略。\n"
 
-#: builtin/commit.c:896
+#: builtin/commit.c:899
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13509,7 +13887,7 @@ msgstr ""
 "請輸入描述您變更的提交訊息。開頭是「%c」\n"
 "的行皆會忽略。提交訊息空白則取消本次提交作業。\n"
 
-#: builtin/commit.c:900
+#: builtin/commit.c:903
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13518,7 +13896,7 @@ msgstr ""
 "請輸入描述您變更的提交訊息。會保留開頭是「%c」\n"
 "的行,但也可以自己移除掉這些行。\n"
 
-#: builtin/commit.c:904
+#: builtin/commit.c:907
 #, c-format
 msgid ""
 "Please enter the commit message for your changes. Lines starting\n"
@@ -13529,7 +13907,7 @@ msgstr ""
 "「%c」的行,但也可以自己移除掉這些行。\n"
 "提交訊息空白則取消本次提交作業。\n"
 
-#: builtin/commit.c:916
+#: builtin/commit.c:919
 msgid ""
 "\n"
 "It looks like you may be committing a merge.\n"
@@ -13543,7 +13921,7 @@ msgstr ""
 "\tgit update-ref -d MERGE_HEAD\n"
 "後重試。\n"
 
-#: builtin/commit.c:921
+#: builtin/commit.c:924
 msgid ""
 "\n"
 "It looks like you may be committing a cherry-pick.\n"
@@ -13558,167 +13936,147 @@ msgstr ""
 "後重試。\n"
 
 #  譯者:為保證在輸出中對齊,注意調整句中空格!
-#: builtin/commit.c:948
+#: builtin/commit.c:951
 #, c-format
 msgid "%sAuthor:    %.*s <%.*s>"
 msgstr "%s作者:  %.*s <%.*s>"
 
 #  譯者:為保證在輸出中對齊,注意調整句中空格!
-#: builtin/commit.c:956
+#: builtin/commit.c:959
 #, c-format
 msgid "%sDate:      %s"
 msgstr "%s日期:  %s"
 
 #  譯者:為保證在輸出中對齊,注意調整句中空格!
-#: builtin/commit.c:963
+#: builtin/commit.c:966
 #, c-format
 msgid "%sCommitter: %.*s <%.*s>"
 msgstr "%s提交者:%.*s <%.*s>"
 
-#: builtin/commit.c:981
+#: builtin/commit.c:984
 msgid "Cannot read index"
 msgstr "無法讀取索引"
 
-#: builtin/commit.c:1026
+#: builtin/commit.c:1029
 msgid "unable to pass trailers to --trailers"
 msgstr "無法將尾部署名傳遞至 --trailers"
 
-#: builtin/commit.c:1066
+#: builtin/commit.c:1069
 msgid "Error building trees"
 msgstr "無法建立樹狀物件"
 
-#: builtin/commit.c:1080 builtin/tag.c:316
+#: builtin/commit.c:1083 builtin/tag.c:317
 #, c-format
 msgid "Please supply the message using either -m or -F option.\n"
 msgstr "請使用 -m 或 -F 選項提供提交說明。\n"
 
-#: builtin/commit.c:1124
+#: builtin/commit.c:1128
 #, c-format
 msgid "--author '%s' is not 'Name <email>' and matches no existing author"
 msgstr "--author '%s' 不是 '姓名 <信箱>' 格式,且未能在現有作者中找到符合"
 
-#: builtin/commit.c:1138
+#: builtin/commit.c:1142
 #, c-format
 msgid "Invalid ignored mode '%s'"
 msgstr "無效的忽略模式 '%s'"
 
-#: builtin/commit.c:1156 builtin/commit.c:1451
+#: builtin/commit.c:1160 builtin/commit.c:1450
 #, c-format
 msgid "Invalid untracked files mode '%s'"
 msgstr "無效的未追蹤檔案參數 '%s'"
 
-#: builtin/commit.c:1227
+#: builtin/commit.c:1231
 msgid "You are in the middle of a merge -- cannot reword."
 msgstr "正在合併中——不能重新輸入。"
 
-#: builtin/commit.c:1229
+#: builtin/commit.c:1233
 msgid "You are in the middle of a cherry-pick -- cannot reword."
 msgstr "正在揀選中——不能重新輸入。"
 
-#: builtin/commit.c:1232
+#: builtin/commit.c:1236
 #, c-format
 msgid "reword option of '%s' and path '%s' cannot be used together"
 msgstr "「%s」的改寫選項和「%s」路徑不得同時使用"
 
-#: builtin/commit.c:1234
+#: builtin/commit.c:1238
 #, c-format
 msgid "reword option of '%s' and '%s' cannot be used together"
 msgstr "「%s」的改寫選項和「%s」不得同時使用"
 
-#: builtin/commit.c:1254
-msgid "Using both --reset-author and --author does not make sense"
-msgstr "同時使用 --reset-author 和 --author 沒有意義"
-
-#: builtin/commit.c:1261
+#: builtin/commit.c:1263
 msgid "You have nothing to amend."
 msgstr "您沒有可修補的提交。"
 
-#: builtin/commit.c:1264
+#: builtin/commit.c:1266
 msgid "You are in the middle of a merge -- cannot amend."
 msgstr "您正處於一個合併過程中 -- 無法修補提交。"
 
-#: builtin/commit.c:1266
+#: builtin/commit.c:1268
 msgid "You are in the middle of a cherry-pick -- cannot amend."
 msgstr "您正處於一個揀選過程中 -- 無法修補提交。"
 
-#: builtin/commit.c:1268
+#: builtin/commit.c:1270
 msgid "You are in the middle of a rebase -- cannot amend."
 msgstr "您正處於重定基底的過程中 -- 無法修訂。"
 
-#: builtin/commit.c:1271
-msgid "Options --squash and --fixup cannot be used together"
-msgstr "選項 --squash 和 --fixup 不能同時使用"
-
-#: builtin/commit.c:1281
-msgid "Only one of -c/-C/-F/--fixup can be used."
-msgstr "只能用一個 -c/-C/-F/--fixup 選項。"
-
-#: builtin/commit.c:1283
-msgid "Option -m cannot be combined with -c/-C/-F."
-msgstr "選項 -m 不能和 -c/-C/-F 同時使用。"
-
-#: builtin/commit.c:1292
+#: builtin/commit.c:1290
 msgid "--reset-author can be used only with -C, -c or --amend."
 msgstr "--reset-author 只能和 -C、-c 或 --amend 同時使用。"
 
-#: builtin/commit.c:1310
-msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
-msgstr "只能用一個 --include/--only/--all/--interactive/--patch 選項。"
-
-#: builtin/commit.c:1338
+#: builtin/commit.c:1337
 #, c-format
 msgid "unknown option: --fixup=%s:%s"
 msgstr "未知選項:--fixup=%s:%s"
 
-#: builtin/commit.c:1355
+#: builtin/commit.c:1354
 #, c-format
 msgid "paths '%s ...' with -a does not make sense"
 msgstr "路徑 '%s ...' 和 -a 選項同時使用沒有意義"
 
-#: builtin/commit.c:1486 builtin/commit.c:1655
+#: builtin/commit.c:1485 builtin/commit.c:1654
 msgid "show status concisely"
 msgstr "以簡潔的格式顯示狀態"
 
-#: builtin/commit.c:1488 builtin/commit.c:1657
+#: builtin/commit.c:1487 builtin/commit.c:1656
 msgid "show branch information"
 msgstr "顯示分支訊息"
 
-#: builtin/commit.c:1490
+#: builtin/commit.c:1489
 msgid "show stash information"
 msgstr "顯示儲藏區訊息"
 
-#: builtin/commit.c:1492 builtin/commit.c:1659
+#: builtin/commit.c:1491 builtin/commit.c:1658
 msgid "compute full ahead/behind values"
 msgstr "計算完整的領先/落後值"
 
-#: builtin/commit.c:1494
+#: builtin/commit.c:1493
 msgid "version"
 msgstr "版本"
 
-#: builtin/commit.c:1494 builtin/commit.c:1661 builtin/push.c:551
-#: builtin/worktree.c:690
+#: builtin/commit.c:1493 builtin/commit.c:1660 builtin/push.c:551
+#: builtin/worktree.c:765
 msgid "machine-readable output"
 msgstr "機器可讀的輸出"
 
-#: builtin/commit.c:1497 builtin/commit.c:1663
+#: builtin/commit.c:1496 builtin/commit.c:1662
 msgid "show status in long format (default)"
 msgstr "以長格式顯示狀態(預設)"
 
-#: builtin/commit.c:1500 builtin/commit.c:1666
+#: builtin/commit.c:1499 builtin/commit.c:1665
 msgid "terminate entries with NUL"
 msgstr "條目以 NUL 字元結尾"
 
-#: builtin/commit.c:1502 builtin/commit.c:1506 builtin/commit.c:1669
+#: builtin/commit.c:1501 builtin/commit.c:1505 builtin/commit.c:1668
 #: builtin/fast-export.c:1172 builtin/fast-export.c:1175
-#: builtin/fast-export.c:1178 builtin/rebase.c:1111 parse-options.h:337
+#: builtin/fast-export.c:1178 builtin/rebase.c:1139 parse-options.h:368
 msgid "mode"
 msgstr "模式"
 
-#: builtin/commit.c:1503 builtin/commit.c:1669
+#: builtin/commit.c:1502 builtin/commit.c:1668
 msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
 msgstr "顯示未追蹤的檔案,「模式」的可選參數:all、normal、no。(預設值:all)"
 
-#: builtin/commit.c:1507
+#: builtin/commit.c:1506
 msgid ""
 "show ignored files, optional modes: traditional, matching, no. (Default: "
 "traditional)"
@@ -13726,201 +14084,201 @@ msgstr ""
 "顯示已忽略的檔案,可選模式:traditional、matching、no。(預設值:"
 "traditional)"
 
-#: builtin/commit.c:1509 parse-options.h:192
+#: builtin/commit.c:1508 parse-options.h:197
 msgid "when"
 msgstr "何時"
 
-#: builtin/commit.c:1510
+#: builtin/commit.c:1509
 msgid ""
 "ignore changes to submodules, optional when: all, dirty, untracked. "
 "(Default: all)"
 msgstr ""
 "忽略子模組的更改,「何時」的可選參數:all、dirty、untracked。(預設值:all)"
 
-#: builtin/commit.c:1512
+#: builtin/commit.c:1511
 msgid "list untracked files in columns"
 msgstr "以列的方式顯示未追蹤的檔案"
 
-#: builtin/commit.c:1513
+#: builtin/commit.c:1512
 msgid "do not detect renames"
 msgstr "不檢測重新命名"
 
-#: builtin/commit.c:1515
+#: builtin/commit.c:1514
 msgid "detect renames, optionally set similarity index"
 msgstr "檢測重新命名,可以設定索引相似度"
 
-#: builtin/commit.c:1538
+#: builtin/commit.c:1537
 msgid "Unsupported combination of ignored and untracked-files arguments"
 msgstr "不支援已忽略和未追蹤檔案參數的組合"
 
-#: builtin/commit.c:1620
+#: builtin/commit.c:1619
 msgid "suppress summary after successful commit"
 msgstr "提交成功後不顯示概述訊息"
 
-#: builtin/commit.c:1621
+#: builtin/commit.c:1620
 msgid "show diff in commit message template"
 msgstr "在提交說明範本裡顯示差異"
 
-#: builtin/commit.c:1623
+#: builtin/commit.c:1622
 msgid "Commit message options"
 msgstr "提交說明選項"
 
-#: builtin/commit.c:1624 builtin/merge.c:288 builtin/tag.c:456
+#: builtin/commit.c:1623 builtin/merge.c:288 builtin/tag.c:457
 msgid "read message from file"
 msgstr "從檔案中讀取提交說明"
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1624
 msgid "author"
 msgstr "作者"
 
-#: builtin/commit.c:1625
+#: builtin/commit.c:1624
 msgid "override author for commit"
 msgstr "提交時覆蓋作者"
 
-#: builtin/commit.c:1626 builtin/gc.c:551
+#: builtin/commit.c:1625 builtin/gc.c:551
 msgid "date"
 msgstr "日期"
 
-#: builtin/commit.c:1626
+#: builtin/commit.c:1625
 msgid "override date for commit"
 msgstr "提交時覆蓋日期"
 
-#: builtin/commit.c:1628 builtin/commit.c:1629 builtin/commit.c:1635
-#: parse-options.h:329 ref-filter.h:89
+#: builtin/commit.c:1627 builtin/commit.c:1628 builtin/commit.c:1634
+#: parse-options.h:360 ref-filter.h:89
 msgid "commit"
 msgstr "提交"
 
-#: builtin/commit.c:1628
+#: builtin/commit.c:1627
 msgid "reuse and edit message from specified commit"
 msgstr "重用並編輯指定提交的提交說明"
 
-#: builtin/commit.c:1629
+#: builtin/commit.c:1628
 msgid "reuse message from specified commit"
 msgstr "重用指定提交的提交說明"
 
 #. TRANSLATORS: Leave "[(amend|reword):]" as-is,
 #. and only translate <commit>.
 #.
-#: builtin/commit.c:1634
+#: builtin/commit.c:1633
 msgid "[(amend|reword):]commit"
 msgstr "[(amend|reword):]commit"
 
-#: builtin/commit.c:1634
+#: builtin/commit.c:1633
 msgid ""
 "use autosquash formatted message to fixup or amend/reword specified commit"
 msgstr "使用 autosquash 格式化後的說明來 fixup 或是 amend/reword 指定提交"
 
-#: builtin/commit.c:1635
+#: builtin/commit.c:1634
 msgid "use autosquash formatted message to squash specified commit"
 msgstr "使用 autosquash 格式的提交說明用以壓縮至指定的提交"
 
-#: builtin/commit.c:1636
+#: builtin/commit.c:1635
 msgid "the commit is authored by me now (used with -C/-c/--amend)"
 msgstr "現在將該提交的作者改為我(和 -C/-c/--amend 參數共用)"
 
-#: builtin/commit.c:1637 builtin/interpret-trailers.c:111
+#: builtin/commit.c:1636 builtin/interpret-trailers.c:111
 msgid "trailer"
 msgstr "尾部署名"
 
-#: builtin/commit.c:1637
+#: builtin/commit.c:1636
 msgid "add custom trailer(s)"
 msgstr "加入自訂尾部署名"
 
-#: builtin/commit.c:1638 builtin/log.c:1769 builtin/merge.c:306
+#: builtin/commit.c:1637 builtin/log.c:1788 builtin/merge.c:306
 #: builtin/pull.c:146 builtin/revert.c:110
 msgid "add a Signed-off-by trailer"
 msgstr "在結尾加入 Signed-off-by"
 
-#: builtin/commit.c:1639
+#: builtin/commit.c:1638
 msgid "use specified template file"
 msgstr "使用指定的範本檔案"
 
-#: builtin/commit.c:1640
+#: builtin/commit.c:1639
 msgid "force edit of commit"
 msgstr "強制編輯提交"
 
-#: builtin/commit.c:1642
+#: builtin/commit.c:1641
 msgid "include status in commit message template"
 msgstr "在提交說明範本裡包含狀態訊息"
 
-#: builtin/commit.c:1647
+#: builtin/commit.c:1646
 msgid "Commit contents options"
 msgstr "提交內容選項"
 
-#: builtin/commit.c:1648
+#: builtin/commit.c:1647
 msgid "commit all changed files"
 msgstr "提交所有改動的檔案"
 
-#: builtin/commit.c:1649
+#: builtin/commit.c:1648
 msgid "add specified files to index for commit"
 msgstr "新增指定的檔案到索引區等待提交"
 
-#: builtin/commit.c:1650
+#: builtin/commit.c:1649
 msgid "interactively add files"
 msgstr "互動式新增檔案"
 
-#: builtin/commit.c:1651
+#: builtin/commit.c:1650
 msgid "interactively add changes"
 msgstr "互動式新增變更"
 
-#: builtin/commit.c:1652
+#: builtin/commit.c:1651
 msgid "commit only specified files"
 msgstr "只提交指定的檔案"
 
-#: builtin/commit.c:1653
+#: builtin/commit.c:1652
 msgid "bypass pre-commit and commit-msg hooks"
 msgstr "繞過 pre-commit 和 commit-msg 掛鉤"
 
-#: builtin/commit.c:1654
+#: builtin/commit.c:1653
 msgid "show what would be committed"
 msgstr "顯示將要提交的內容"
 
-#: builtin/commit.c:1667
+#: builtin/commit.c:1666
 msgid "amend previous commit"
 msgstr "修改先前的提交"
 
-#: builtin/commit.c:1668
+#: builtin/commit.c:1667
 msgid "bypass post-rewrite hook"
 msgstr "繞過 post-rewrite 掛鉤"
 
-#: builtin/commit.c:1675
+#: builtin/commit.c:1674
 msgid "ok to record an empty change"
 msgstr "允許一個空提交"
 
-#: builtin/commit.c:1677
+#: builtin/commit.c:1676
 msgid "ok to record a change with an empty message"
 msgstr "允許空的提交說明"
 
-#: builtin/commit.c:1753
+#: builtin/commit.c:1752
 #, c-format
 msgid "Corrupt MERGE_HEAD file (%s)"
 msgstr "損壞的 MERGE_HEAD 檔案(%s)"
 
-#: builtin/commit.c:1760
+#: builtin/commit.c:1759
 msgid "could not read MERGE_MODE"
 msgstr "不能讀取 MERGE_MODE"
 
-#: builtin/commit.c:1781
+#: builtin/commit.c:1780
 #, c-format
 msgid "could not read commit message: %s"
 msgstr "不能讀取提交說明:%s"
 
-#: builtin/commit.c:1788
+#: builtin/commit.c:1787
 #, c-format
 msgid "Aborting commit due to empty commit message.\n"
 msgstr "終止提交因為提交說明為空。\n"
 
-#: builtin/commit.c:1793
+#: builtin/commit.c:1792
 #, c-format
 msgid "Aborting commit; you did not edit the message.\n"
 msgstr "終止提交;您未更改來自範本的提交說明。\n"
 
-#: builtin/commit.c:1804
+#: builtin/commit.c:1803
 #, c-format
 msgid "Aborting commit due to empty commit message body.\n"
 msgstr "提交說明內文空白,中止提交作業。\n"
 
-#: builtin/commit.c:1840
+#: builtin/commit.c:1839
 msgid ""
 "repository has been updated, but unable to write\n"
 "new_index file. Check that disk is not full and quota is\n"
@@ -14042,6 +14400,10 @@ msgstr "獲得顏色設定:設定 [stdout-is-tty]"
 msgid "Type"
 msgstr "類型"
 
+#: builtin/config.c:154 builtin/env--helper.c:42 builtin/hash-object.c:97
+msgid "type"
+msgstr "類型"
+
 #: builtin/config.c:154 builtin/env--helper.c:43
 msgid "value is given this type"
 msgstr "取值為該類型"
@@ -14251,10 +14613,6 @@ msgstr ""
 msgid "no such section: %s"
 msgstr "無此小節:%s"
 
-#: builtin/count-objects.c:90
-msgid "git count-objects [-v] [-H | --human-readable]"
-msgstr "git count-objects [-v] [-H | --human-readable]"
-
 #: builtin/count-objects.c:100
 msgid "print sizes in human readable format"
 msgstr "以使用者可讀的格式顯示大小"
@@ -14421,7 +14779,7 @@ msgstr "只考慮符合 <模式> 的標籤"
 msgid "do not consider tags matching <pattern>"
 msgstr "不考慮符合 <模式> 的標籤"
 
-#: builtin/describe.c:570 builtin/name-rev.c:544
+#: builtin/describe.c:570 builtin/name-rev.c:595
 msgid "show abbreviated commit object as fallback"
 msgstr "顯示簡寫的提交號作為後備"
 
@@ -14469,7 +14827,7 @@ msgstr "%s...%s: 無合併基底"
 msgid "Not a git repository"
 msgstr "不是一個 git 版本庫"
 
-#: builtin/diff.c:537 builtin/grep.c:698
+#: builtin/diff.c:537 builtin/grep.c:700
 #, c-format
 msgid "invalid object '%s' given."
 msgstr "提供了無效物件 '%s'。"
@@ -14585,11 +14943,11 @@ msgstr "傳遞給 `diff`"
 msgid "difftool requires worktree or --no-index"
 msgstr "difftool 要求工作區或者 --no-index"
 
-#: builtin/difftool.c:744
+#: builtin/difftool.c:745
 msgid "no <tool> given for --tool=<tool>"
 msgstr "沒有為 --tool=<工具> 參數提供 <工具>"
 
-#: builtin/difftool.c:751
+#: builtin/difftool.c:752
 msgid "no <cmd> given for --extcmd=<cmd>"
 msgstr "沒有為 --extcmd=<命令> 參數提供 <命令>"
 
@@ -14597,10 +14955,6 @@ msgstr "沒有為 --extcmd=<命令> 參數提供 <命令>"
 msgid "git env--helper --type=[bool|ulong] <options> <env-var>"
 msgstr "git env--helper --type=[bool|ulong] <選項> <環境變數>"
 
-#: builtin/env--helper.c:42 builtin/hash-object.c:96
-msgid "type"
-msgstr "類型"
-
 #: builtin/env--helper.c:46
 msgid "default for git_env_*(...) to fall back on"
 msgstr "git_env_*(...) 的預設值"
@@ -14622,8 +14976,8 @@ msgid ""
 msgstr "選項「--default」預期收到「--type=ulong」的無號 long 數值,而非「%s」"
 
 #: builtin/fast-export.c:29
-msgid "git fast-export [rev-list-opts]"
-msgstr "git fast-export [rev-list-opts]"
+msgid "git fast-export [<rev-list-opts>]"
+msgstr "git fast-export [<rev-list-opts>]"
 
 #: builtin/fast-export.c:843
 msgid "Error: Cannot export nested tags unless --mark-tags is specified."
@@ -14677,7 +15031,7 @@ msgstr "使用 done 功能終止串流"
 msgid "skip output of blob data"
 msgstr "略過資料物件資料的輸出"
 
-#: builtin/fast-export.c:1196 builtin/log.c:1841
+#: builtin/fast-export.c:1196 builtin/log.c:1860
 msgid "refspec"
 msgstr "引用規格"
 
@@ -14709,36 +15063,36 @@ msgstr "顯示資料物件及提交的原始物件 ID"
 msgid "label tags with mark ids"
 msgstr "為包含標記 ID 的標籤打上標記"
 
-#: builtin/fast-import.c:3090
+#: builtin/fast-import.c:3097
 #, c-format
 msgid "Missing from marks for submodule '%s'"
 msgstr "「%s」子模組缺少 from 標記"
 
-#: builtin/fast-import.c:3092
+#: builtin/fast-import.c:3099
 #, c-format
 msgid "Missing to marks for submodule '%s'"
 msgstr "「%s」子模組缺少 to 標記"
 
-#: builtin/fast-import.c:3227
+#: builtin/fast-import.c:3234
 #, c-format
 msgid "Expected 'mark' command, got %s"
 msgstr "預期 'mark' 指令,得到 %s"
 
-#: builtin/fast-import.c:3232
+#: builtin/fast-import.c:3239
 #, c-format
 msgid "Expected 'to' command, got %s"
 msgstr "預期 'to' 指令,得到 %s"
 
-#: builtin/fast-import.c:3324
+#: builtin/fast-import.c:3331
 msgid "Expected format name:filename for submodule rewrite option"
 msgstr "期望子模組 rewrite 選項的格式是 name:filename"
 
-#: builtin/fast-import.c:3379
+#: builtin/fast-import.c:3386
 #, c-format
 msgid "feature '%s' forbidden in input without --allow-unsafe-features"
 msgstr "沒有 --allow-unsafe-features 時,禁止在輸入中使用 '%s' 功能"
 
-#: builtin/fetch-pack.c:242
+#: builtin/fetch-pack.c:246
 #, c-format
 msgid "Lockfile created but not reported: %s"
 msgstr "已建立鎖定檔案,但尚未回報:%s"
@@ -14759,206 +15113,205 @@ msgstr "git fetch --multiple [<選項>] [(<版本庫> | <組>)...]"
 msgid "git fetch --all [<options>]"
 msgstr "git fetch --all [<選項>]"
 
-#: builtin/fetch.c:123
+#: builtin/fetch.c:124
 msgid "fetch.parallel cannot be negative"
 msgstr "fetch.parallel 不能為負數"
 
-#: builtin/fetch.c:146 builtin/pull.c:189
+#: builtin/fetch.c:147 builtin/pull.c:189
 msgid "fetch from all remotes"
 msgstr "從所有的遠端抓取"
 
-#: builtin/fetch.c:148 builtin/pull.c:249
+#: builtin/fetch.c:149 builtin/pull.c:249
 msgid "set upstream for git pull/fetch"
 msgstr "為 git pull/fetch 設定上游"
 
-#: builtin/fetch.c:150 builtin/pull.c:192
+#: builtin/fetch.c:151 builtin/pull.c:192
 msgid "append to .git/FETCH_HEAD instead of overwriting"
 msgstr "追加到 .git/FETCH_HEAD 而不是覆蓋它"
 
-#: builtin/fetch.c:152
+#: builtin/fetch.c:153
 msgid "use atomic transaction to update references"
 msgstr "使用 atomic 事務更新引用"
 
-#: builtin/fetch.c:154 builtin/pull.c:195
+#: builtin/fetch.c:155 builtin/pull.c:195
 msgid "path to upload pack on remote end"
 msgstr "上傳包到遠端的路徑"
 
-#: builtin/fetch.c:155
+#: builtin/fetch.c:156
 msgid "force overwrite of local reference"
 msgstr "強制覆蓋本機引用"
 
-#: builtin/fetch.c:157
+#: builtin/fetch.c:158
 msgid "fetch from multiple remotes"
 msgstr "從多個遠端抓取"
 
-#: builtin/fetch.c:159 builtin/pull.c:199
+#: builtin/fetch.c:160 builtin/pull.c:199
 msgid "fetch all tags and associated objects"
 msgstr "抓取所有的標籤和關聯物件"
 
-#: builtin/fetch.c:161
+#: builtin/fetch.c:162
 msgid "do not fetch all tags (--no-tags)"
 msgstr "不抓取任何標籤(--no-tags)"
 
-#: builtin/fetch.c:163
+#: builtin/fetch.c:164
 msgid "number of submodules fetched in parallel"
 msgstr "並行取得的子模組數量"
 
-#: builtin/fetch.c:165
+#: builtin/fetch.c:166
 msgid "modify the refspec to place all refs within refs/prefetch/"
 msgstr "修改引用規格 (refspec) 以便將所有引用 (refs) 放置在 refs/prefetch/ 中"
 
-#: builtin/fetch.c:167 builtin/pull.c:202
+#: builtin/fetch.c:168 builtin/pull.c:202
 msgid "prune remote-tracking branches no longer on remote"
 msgstr "清除遠端已經不存在的分支的追蹤分支"
 
-#: builtin/fetch.c:169
+#: builtin/fetch.c:170
 msgid "prune local tags no longer on remote and clobber changed tags"
 msgstr "清除遠端不存在的本機標籤,並且取代變更標籤"
 
 #  譯者:可選值,不能翻譯
-#: builtin/fetch.c:170 builtin/fetch.c:195 builtin/pull.c:123
+#: builtin/fetch.c:171 builtin/fetch.c:199 builtin/pull.c:123
 msgid "on-demand"
 msgstr "on-demand"
 
-#: builtin/fetch.c:171
+#: builtin/fetch.c:172
 msgid "control recursive fetching of submodules"
 msgstr "控制子模組的遞迴抓取"
 
-#: builtin/fetch.c:176
+#: builtin/fetch.c:177
 msgid "write fetched references to the FETCH_HEAD file"
 msgstr "將取得的引用寫入 FETCH_HEAD 檔案"
 
-#: builtin/fetch.c:177 builtin/pull.c:210
+#: builtin/fetch.c:178 builtin/pull.c:210
 msgid "keep downloaded pack"
 msgstr "保持下載包"
 
-#: builtin/fetch.c:179
+#: builtin/fetch.c:180
 msgid "allow updating of HEAD ref"
 msgstr "允許更新 HEAD 引用"
 
-#: builtin/fetch.c:182 builtin/fetch.c:188 builtin/pull.c:213
+#: builtin/fetch.c:183 builtin/fetch.c:189 builtin/pull.c:213
 #: builtin/pull.c:222
 msgid "deepen history of shallow clone"
 msgstr "取得淺複製的更多過去歷史記錄"
 
-#: builtin/fetch.c:184 builtin/pull.c:216
+#: builtin/fetch.c:185 builtin/pull.c:216
 msgid "deepen history of shallow repository based on time"
 msgstr "基於時間來深化淺複製的歷史"
 
-#: builtin/fetch.c:190 builtin/pull.c:225
+#: builtin/fetch.c:191 builtin/pull.c:225
 msgid "convert to a complete repository"
 msgstr "轉換為一個完整的版本庫"
 
-#: builtin/fetch.c:193
+#: builtin/fetch.c:194
+msgid "re-fetch without negotiating common commits"
+msgstr "重新抓取而不協商共同提交"
+
+#: builtin/fetch.c:197
 msgid "prepend this to submodule path output"
 msgstr "在子模組路徑輸出的前面加上此目錄"
 
-#: builtin/fetch.c:196
+#: builtin/fetch.c:200
 msgid ""
 "default for recursive fetching of submodules (lower priority than config "
 "files)"
 msgstr "遞迴取得子模組的預設值(比設定檔案優先度低)"
 
-#: builtin/fetch.c:200 builtin/pull.c:228
+#: builtin/fetch.c:204 builtin/pull.c:228
 msgid "accept refs that update .git/shallow"
 msgstr "接受更新 .git/shallow 的引用"
 
-#: builtin/fetch.c:201 builtin/pull.c:230
+#: builtin/fetch.c:205 builtin/pull.c:230
 msgid "refmap"
 msgstr "引用映射"
 
-#: builtin/fetch.c:202 builtin/pull.c:231
+#: builtin/fetch.c:206 builtin/pull.c:231
 msgid "specify fetch refmap"
 msgstr "指定取得動作的引用映射"
 
-#: builtin/fetch.c:209 builtin/pull.c:244
+#: builtin/fetch.c:213 builtin/pull.c:244
 msgid "report that we have only objects reachable from this object"
 msgstr "報告我們只擁有從該物件開始可以取得的物件"
 
-#: builtin/fetch.c:211
+#: builtin/fetch.c:215
 msgid "do not fetch a packfile; instead, print ancestors of negotiation tips"
-msgstr "不取得包檔案,而是輸出交涉的祖先提交"
+msgstr "不取得包檔案,而是輸出協商的祖先提交"
 
-#: builtin/fetch.c:214 builtin/fetch.c:216
+#: builtin/fetch.c:218 builtin/fetch.c:220
 msgid "run 'maintenance --auto' after fetching"
 msgstr "取得 (fetch) 後執行 'maintenance --auto'"
 
-#: builtin/fetch.c:218 builtin/pull.c:247
+#: builtin/fetch.c:222 builtin/pull.c:247
 msgid "check for forced-updates on all updated branches"
 msgstr "在所有更新分支上檢查強制更新"
 
-#: builtin/fetch.c:220
+#: builtin/fetch.c:224
 msgid "write the commit-graph after fetching"
 msgstr "抓取後寫入分支圖"
 
-#: builtin/fetch.c:222
+#: builtin/fetch.c:226
 msgid "accept refspecs from stdin"
 msgstr "從標準輸入中接受引用規格"
 
-#: builtin/fetch.c:592
+#: builtin/fetch.c:618
 msgid "couldn't find remote ref HEAD"
 msgstr "找不到遠端 HEAD 引用"
 
-#: builtin/fetch.c:766
-#, c-format
-msgid "configuration fetch.output contains invalid value %s"
-msgstr "設定變數 fetch.output 包含無效值 %s"
-
-#: builtin/fetch.c:867
+#: builtin/fetch.c:893
 #, c-format
 msgid "object %s not found"
 msgstr "物件 %s 未發現"
 
-#: builtin/fetch.c:871
+#: builtin/fetch.c:897
 msgid "[up to date]"
 msgstr "[最新]"
 
-#: builtin/fetch.c:883 builtin/fetch.c:901 builtin/fetch.c:973
+#: builtin/fetch.c:909 builtin/fetch.c:927 builtin/fetch.c:999
 msgid "[rejected]"
 msgstr "[已拒絕]"
 
-#: builtin/fetch.c:885
+#: builtin/fetch.c:911
 msgid "can't fetch in current branch"
 msgstr "目前分支下不能執行取得動作"
 
-#: builtin/fetch.c:886
+#: builtin/fetch.c:912
 msgid "checked out in another worktree"
 msgstr "已在其他工作區簽出"
 
-#: builtin/fetch.c:896
+#: builtin/fetch.c:922
 msgid "[tag update]"
 msgstr "[標籤更新]"
 
-#: builtin/fetch.c:897 builtin/fetch.c:934 builtin/fetch.c:956
-#: builtin/fetch.c:968
+#: builtin/fetch.c:923 builtin/fetch.c:960 builtin/fetch.c:982
+#: builtin/fetch.c:994
 msgid "unable to update local ref"
 msgstr "不能更新本機引用"
 
-#: builtin/fetch.c:901
+#: builtin/fetch.c:927
 msgid "would clobber existing tag"
 msgstr "會破壞現有的標籤"
 
-#: builtin/fetch.c:923
+#: builtin/fetch.c:949
 msgid "[new tag]"
 msgstr "[新標籤]"
 
-#: builtin/fetch.c:926
+#: builtin/fetch.c:952
 msgid "[new branch]"
 msgstr "[新分支]"
 
-#: builtin/fetch.c:929
+#: builtin/fetch.c:955
 msgid "[new ref]"
 msgstr "[新引用]"
 
-#: builtin/fetch.c:968
+#: builtin/fetch.c:994
 msgid "forced update"
 msgstr "強制更新"
 
-#: builtin/fetch.c:973
+#: builtin/fetch.c:999
 msgid "non-fast-forward"
 msgstr "非快轉"
 
-#: builtin/fetch.c:1076
+#: builtin/fetch.c:1102
 msgid ""
 "fetch normally indicates which branches had a forced update,\n"
 "but that check has been disabled; to re-enable, use '--show-forced-updates'\n"
@@ -14968,7 +15321,7 @@ msgstr ""
 "要重新啟用,請使用「--show-forced-updates」選項,或執行\n"
 "「git config fetch.showForcedUpdates true」"
 
-#: builtin/fetch.c:1080
+#: builtin/fetch.c:1106
 #, c-format
 msgid ""
 "it took %.2f seconds to check forced updates; you can use\n"
@@ -14979,22 +15332,22 @@ msgstr ""
 "花了 %.2f 秒檢查強制更新。您可以使用「--no-show-forced-updates」\n"
 "或執行「git config fetch.showForcedUpdates false」避免此項檢查\n"
 
-#: builtin/fetch.c:1112
+#: builtin/fetch.c:1136
 #, c-format
 msgid "%s did not send all necessary objects\n"
 msgstr "%s 未傳送所有必需的物件\n"
 
-#: builtin/fetch.c:1141
+#: builtin/fetch.c:1156
 #, c-format
 msgid "rejected %s because shallow roots are not allowed to be updated"
 msgstr "已拒絕 %s,不允許更新淺複製"
 
-#: builtin/fetch.c:1231 builtin/fetch.c:1379
+#: builtin/fetch.c:1259 builtin/fetch.c:1418
 #, c-format
 msgid "From %.*s\n"
 msgstr "來自 %.*s\n"
 
-#: builtin/fetch.c:1252
+#: builtin/fetch.c:1269
 #, c-format
 msgid ""
 "some local refs could not be updated; try running\n"
@@ -15004,50 +15357,50 @@ msgstr ""
 " 'git remote prune %s' 來刪除舊的、有衝突的分支"
 
 #  譯者:請維持前導空格
-#: builtin/fetch.c:1349
+#: builtin/fetch.c:1377
 #, c-format
 msgid "   (%s will become dangling)"
 msgstr "   (%s 將成為懸空狀態)"
 
 #  譯者:請維持前導空格
-#: builtin/fetch.c:1350
+#: builtin/fetch.c:1378
 #, c-format
 msgid "   (%s has become dangling)"
 msgstr "   (%s 已成為懸空狀態)"
 
-#: builtin/fetch.c:1382
+#: builtin/fetch.c:1421
 msgid "[deleted]"
 msgstr "[已刪除]"
 
-#: builtin/fetch.c:1383 builtin/remote.c:1128
+#: builtin/fetch.c:1422 builtin/remote.c:1153
 msgid "(none)"
 msgstr "(無)"
 
-#: builtin/fetch.c:1405
+#: builtin/fetch.c:1446
 #, c-format
 msgid "refusing to fetch into branch '%s' checked out at '%s'"
 msgstr "拒絕取得在「%2$s」簽出的「%1$s」分支"
 
-#: builtin/fetch.c:1425
+#: builtin/fetch.c:1466
 #, c-format
 msgid "option \"%s\" value \"%s\" is not valid for %s"
 msgstr "選項「%s」的值「%s」對 %s 無效"
 
-#: builtin/fetch.c:1428
+#: builtin/fetch.c:1469
 #, c-format
 msgid "option \"%s\" is ignored for %s\n"
 msgstr "選項「%s」被 %s 忽略\n"
 
-#: builtin/fetch.c:1455
+#: builtin/fetch.c:1496
 #, c-format
 msgid "the object %s does not exist"
 msgstr "%s 物件不存在"
 
-#: builtin/fetch.c:1643
+#: builtin/fetch.c:1748
 msgid "multiple branches detected, incompatible with --set-upstream"
 msgstr "檢測到多分支,和 --set-upstream 不相容"
 
-#: builtin/fetch.c:1655
+#: builtin/fetch.c:1760
 #, c-format
 msgid ""
 "could not set upstream of HEAD to '%s' from '%s' when it does not point to "
@@ -15055,19 +15408,19 @@ msgid ""
 msgstr ""
 "無法將 HEAD 的上游從「%2$s」設定為「%1$s」,因為 HEAD 沒有指向任何分支。"
 
-#: builtin/fetch.c:1668
+#: builtin/fetch.c:1773
 msgid "not setting upstream for a remote remote-tracking branch"
 msgstr "沒有為一個遠端追蹤分支設定上游"
 
-#: builtin/fetch.c:1670
+#: builtin/fetch.c:1775
 msgid "not setting upstream for a remote tag"
 msgstr "沒有為一個遠端標籤設定上游"
 
-#: builtin/fetch.c:1672
+#: builtin/fetch.c:1777
 msgid "unknown branch type"
 msgstr "未知的分支類型"
 
-#: builtin/fetch.c:1674
+#: builtin/fetch.c:1779
 msgid ""
 "no source branch found;\n"
 "you need to specify exactly one branch with the --set-upstream option"
@@ -15075,22 +15428,22 @@ msgstr ""
 "找不到來源分支。\n"
 "您得使用 --set-upstream 選項明確指定一個分支"
 
-#: builtin/fetch.c:1804 builtin/fetch.c:1867
+#: builtin/fetch.c:1904 builtin/fetch.c:1967
 #, c-format
 msgid "Fetching %s\n"
 msgstr "正在取得 %s\n"
 
-#: builtin/fetch.c:1814 builtin/fetch.c:1869
+#: builtin/fetch.c:1914 builtin/fetch.c:1969
 #, c-format
 msgid "could not fetch %s"
 msgstr "不能取得 %s"
 
-#: builtin/fetch.c:1826
+#: builtin/fetch.c:1926
 #, c-format
 msgid "could not fetch '%s' (exit code: %d)\n"
 msgstr "無法取得 '%s'(離開碼:%d)\n"
 
-#: builtin/fetch.c:1930
+#: builtin/fetch.c:2030
 msgid ""
 "no remote repository specified; please specify either a URL or a\n"
 "remote name from which new revisions should be fetched"
@@ -15098,58 +15451,58 @@ msgstr ""
 "未指定遠端版本庫。請指定用以取得新修訂版本之\n"
 "來源 URL 或者遠端版本庫名稱"
 
-#: builtin/fetch.c:1966
+#: builtin/fetch.c:2066
 msgid "you need to specify a tag name"
 msgstr "您需要指定標籤名稱"
 
-#: builtin/fetch.c:2032
-msgid "--negotiate-only needs one or more --negotiate-tip=*"
-msgstr "--negotiate-only 需要一或多個 --negotiate-tip=*"
+#: builtin/fetch.c:2156
+msgid "--negotiate-only needs one or more --negotiation-tip=*"
+msgstr "--negotiate-only 需要一或多個 --negotiation-tip=*"
 
-#: builtin/fetch.c:2036
+#: builtin/fetch.c:2160
 msgid "negative depth in --deepen is not supported"
 msgstr "--deepen 不支援負數深度"
 
-#: builtin/fetch.c:2045
+#: builtin/fetch.c:2169
 msgid "--unshallow on a complete repository does not make sense"
 msgstr "對於一個完整的版本庫,參數 --unshallow 沒有意義"
 
-#: builtin/fetch.c:2062
+#: builtin/fetch.c:2186
 msgid "fetch --all does not take a repository argument"
 msgstr "fetch --all 不能帶一個版本庫參數"
 
-#: builtin/fetch.c:2064
+#: builtin/fetch.c:2188
 msgid "fetch --all does not make sense with refspecs"
 msgstr "fetch --all 帶引用規格沒有任何意義"
 
-#: builtin/fetch.c:2073
+#: builtin/fetch.c:2197
 #, c-format
 msgid "no such remote or remote group: %s"
 msgstr "無此遠端或遠端群組:%s"
 
-#: builtin/fetch.c:2081
+#: builtin/fetch.c:2205
 msgid "fetching a group and specifying refspecs does not make sense"
 msgstr "取得群組並指定引用規格無意義"
 
-#: builtin/fetch.c:2097
+#: builtin/fetch.c:2221
 msgid "must supply remote when using --negotiate-only"
 msgstr "使用 --negotiate-only 時必須提供遠端"
 
-#: builtin/fetch.c:2102
+#: builtin/fetch.c:2226
 msgid "protocol does not support --negotiate-only, exiting"
 msgstr "通訊協定不支援 --negotiate-only。結束"
 
-#: builtin/fetch.c:2121
+#: builtin/fetch.c:2246
 msgid ""
 "--filter can only be used with the remote configured in extensions."
 "partialclone"
 msgstr "只可以將 --filter 用於在 extensions.partialclone 中設定的遠端版本庫"
 
-#: builtin/fetch.c:2125
+#: builtin/fetch.c:2250
 msgid "--atomic can only be used when fetching from one remote"
 msgstr "--atomic 只能在擷取 (fetch) 一個遠端時使用"
 
-#: builtin/fetch.c:2129
+#: builtin/fetch.c:2254
 msgid "--stdin can only be used when fetching from one remote"
 msgstr "--stdin 只能在取得一個遠端時使用"
 
@@ -15218,7 +15571,7 @@ msgstr "引用占位符適用於 Tcl"
 msgid "show only <n> matched refs"
 msgstr "只顯示 <n> 個符合的引用"
 
-#: builtin/for-each-ref.c:42 builtin/tag.c:481
+#: builtin/for-each-ref.c:42 builtin/tag.c:482
 msgid "respect format colors"
 msgstr "遵照格式中的顏色輸出"
 
@@ -15412,7 +15765,7 @@ msgstr "正在檢查物件目錄"
 msgid "Checking %s link"
 msgstr "正在檢查 %s 連結"
 
-#: builtin/fsck.c:710 builtin/index-pack.c:859
+#: builtin/fsck.c:710 builtin/index-pack.c:862
 #, c-format
 msgid "invalid %s"
 msgstr "無效的 %s"
@@ -15471,7 +15824,7 @@ msgstr "將索引亦作為檢查的頭節點"
 
 #: builtin/fsck.c:795
 msgid "make reflogs head nodes (default)"
-msgstr "將引用日誌作為檢查的節點(預設)"
+msgstr "將引用日誌作為檢查的 HEAD 節點(預設)"
 
 #: builtin/fsck.c:796
 msgid "also consider packs and alternate objects"
@@ -15481,7 +15834,7 @@ msgstr "也考慮包和備用物件"
 msgid "check only connectivity"
 msgstr "僅檢查連通性"
 
-#: builtin/fsck.c:798 builtin/mktag.c:76
+#: builtin/fsck.c:798 builtin/mktag.c:75
 msgid "enable more strict checking"
 msgstr "啟用更嚴格的檢查"
 
@@ -15511,6 +15864,118 @@ msgstr "%s:物件缺少"
 msgid "invalid parameter: expected sha1, got '%s'"
 msgstr "無效的參數:期望 sha1,得到 '%s'"
 
+#: builtin/fsmonitor--daemon.c:13
+msgid "git fsmonitor--daemon start [<options>]"
+msgstr "git fsmonitor--daemon start [<options>]"
+
+#: builtin/fsmonitor--daemon.c:14
+msgid "git fsmonitor--daemon run [<options>]"
+msgstr "git fsmonitor--daemon run [<options>]"
+
+#: builtin/fsmonitor--daemon.c:15
+msgid "git fsmonitor--daemon stop"
+msgstr "git fsmonitor--daemon stop"
+
+#: builtin/fsmonitor--daemon.c:16
+msgid "git fsmonitor--daemon status"
+msgstr "git fsmonitor--daemon status"
+
+#: builtin/fsmonitor--daemon.c:38 builtin/fsmonitor--daemon.c:47
+#, c-format
+msgid "value of '%s' out of range: %d"
+msgstr "「%s」的數值超出範圍:%d"
+
+#: builtin/fsmonitor--daemon.c:57
+#, c-format
+msgid "value of '%s' not bool or int: %d"
+msgstr "「%s」的數值不是布林值或整數:%d"
+
+#: builtin/fsmonitor--daemon.c:99
+#, c-format
+msgid "fsmonitor-daemon is watching '%s'\n"
+msgstr "fsmonitor-daemon 正在監控「%s」\n"
+
+#: builtin/fsmonitor--daemon.c:104
+#, c-format
+msgid "fsmonitor-daemon is not watching '%s'\n"
+msgstr "fsmonitor-daemon 未在監控「%s」\n"
+
+#: builtin/fsmonitor--daemon.c:170
+#, c-format
+msgid "could not create fsmonitor cookie '%s'"
+msgstr "無法建立 fsmonitor cookie「%s」"
+
+#: builtin/fsmonitor--daemon.c:753
+#, c-format
+msgid "fsmonitor: cookie_result '%d' != SEEN"
+msgstr "fsmonitor:cookie_result '%d' != SEEN"
+
+#: builtin/fsmonitor--daemon.c:1187
+#, c-format
+msgid "could not start IPC thread pool on '%s'"
+msgstr "無法在「%s」啟動 IPC 執行緒集區"
+
+#: builtin/fsmonitor--daemon.c:1199
+msgid "could not start fsmonitor listener thread"
+msgstr "無法啟動 fsmonitor 監聽執行緒"
+
+#: builtin/fsmonitor--daemon.c:1297
+msgid "could not initialize listener thread"
+msgstr "無法初始化監聽執行緒"
+
+#: builtin/fsmonitor--daemon.c:1328 builtin/fsmonitor--daemon.c:1383
+#, c-format
+msgid "fsmonitor--daemon is already running '%s'"
+msgstr "fsmonitor--daemon 已在執行「%s」"
+
+#: builtin/fsmonitor--daemon.c:1332
+#, c-format
+msgid "running fsmonitor-daemon in '%s'\n"
+msgstr "正在「%s」執行 fsmonitor-daemon\n"
+
+#: builtin/fsmonitor--daemon.c:1387
+#, c-format
+msgid "starting fsmonitor-daemon in '%s'\n"
+msgstr "正在「%s」啟動 fsmonitor-daemon\n"
+
+#: builtin/fsmonitor--daemon.c:1413
+msgid "daemon failed to start"
+msgstr "無法啟動守護程式"
+
+#: builtin/fsmonitor--daemon.c:1416
+msgid "daemon not online yet"
+msgstr "守護程式尚未上線"
+
+#: builtin/fsmonitor--daemon.c:1419
+msgid "daemon terminated"
+msgstr "守護程式已終止"
+
+#: builtin/fsmonitor--daemon.c:1429
+msgid "detach from console"
+msgstr "從主控台分離"
+
+#: builtin/fsmonitor--daemon.c:1432
+msgid "use <n> ipc worker threads"
+msgstr "使用 <n> 個 IPC 工作執行緒"
+
+#: builtin/fsmonitor--daemon.c:1435
+msgid "max seconds to wait for background daemon startup"
+msgstr "要等待背景守護程式啟動的最長秒數"
+
+#: builtin/fsmonitor--daemon.c:1449
+#, c-format
+msgid "invalid 'ipc-threads' value (%d)"
+msgstr "無效的「ipc-threads」數值(%d)"
+
+#: builtin/fsmonitor--daemon.c:1464
+#, c-format
+msgid "Unhandled subcommand '%s'"
+msgstr "未處理的子命令「%s」"
+
+#: builtin/fsmonitor--daemon.c:1477
+msgid "fsmonitor--daemon not supported on this platform"
+msgstr "fsmonitor--daemon 不支援本平台"
+
 #: builtin/gc.c:39
 msgid "git gc [<options>]"
 msgstr "git gc [<選項>]"
@@ -15598,7 +16063,7 @@ msgstr "gc 已在「%s」機器 pid %<PRIuMAX> 執行(如果不是,使用 --
 #: builtin/gc.c:707
 msgid ""
 "There are too many unreachable loose objects; run 'git prune' to remove them."
-msgstr "有太多無法取得的鬆散物件,執行 'git prune' 刪除它們。"
+msgstr "有太多無法取得的鬆散物件,執行「git prune」刪除它們。"
 
 #: builtin/gc.c:717
 msgid ""
@@ -15751,8 +16216,8 @@ msgstr "無法啟動 systemctl"
 msgid "failed to run systemctl"
 msgstr "無法執行 systemctl"
 
-#: builtin/gc.c:2210 builtin/gc.c:2215 builtin/worktree.c:62
-#: builtin/worktree.c:944
+#: builtin/gc.c:2210 builtin/gc.c:2215 builtin/worktree.c:63
+#: builtin/worktree.c:1024
 #, c-format
 msgid "failed to delete '%s'"
 msgstr "刪除 '%s' 失敗"
@@ -15800,16 +16265,16 @@ msgstr "git maintenance <子命令> [<選項>]"
 msgid "invalid subcommand: %s"
 msgstr "無效子命令:%s"
 
-#: builtin/grep.c:30
+#: builtin/grep.c:32
 msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
 msgstr "git grep [<選項>] [-e] <模式> [<版本>...] [[--] <路徑>...]"
 
-#: builtin/grep.c:239
+#: builtin/grep.c:241
 #, c-format
 msgid "grep: failed to create thread: %s"
 msgstr "grep:無法建立執行緒:%s"
 
-#: builtin/grep.c:293
+#: builtin/grep.c:295
 #, c-format
 msgid "invalid number of threads specified (%d) for %s"
 msgstr "為 %2$s 設定的執行緒數 (%1$d) 無效"
@@ -15818,259 +16283,251 @@ msgstr "為 %2$s 設定的執行緒數 (%1$d) 無效"
 #. variable for tweaking threads, currently
 #. grep.threads
 #.
-#: builtin/grep.c:301 builtin/index-pack.c:1582 builtin/index-pack.c:1785
-#: builtin/pack-objects.c:3142
+#: builtin/grep.c:303 builtin/index-pack.c:1587 builtin/index-pack.c:1791
+#: builtin/pack-objects.c:3150
 #, c-format
 msgid "no threads support, ignoring %s"
 msgstr "沒有執行緒支援,忽略 %s"
 
-#: builtin/grep.c:488 builtin/grep.c:617 builtin/grep.c:657
+#: builtin/grep.c:490 builtin/grep.c:619 builtin/grep.c:659
 #, c-format
 msgid "unable to read tree (%s)"
 msgstr "無法讀取樹(%s)"
 
-#: builtin/grep.c:672
+#: builtin/grep.c:674
 #, c-format
 msgid "unable to grep from object of type %s"
 msgstr "無法抓取來自於 %s 類型的物件"
 
-#: builtin/grep.c:752
+#: builtin/grep.c:754
 #, c-format
 msgid "switch `%c' expects a numerical value"
 msgstr "開關 `%c' 期望一個數字值"
 
-#: builtin/grep.c:851
+#: builtin/grep.c:852
 msgid "search in index instead of in the work tree"
 msgstr "在索引區搜尋而不是在工作區"
 
-#: builtin/grep.c:853
+#: builtin/grep.c:854
 msgid "find in contents not managed by git"
 msgstr "在未被 git 管理的內容中尋找"
 
 #  譯者:中文字串拼接,可刪除前導空格
-#: builtin/grep.c:855
+#: builtin/grep.c:856
 msgid "search in both tracked and untracked files"
 msgstr "在追蹤和未追蹤的檔案中搜尋"
 
-#: builtin/grep.c:857
+#: builtin/grep.c:858
 msgid "ignore files specified via '.gitignore'"
 msgstr "忽略 '.gitignore' 包含的檔案"
 
-#: builtin/grep.c:859
+#: builtin/grep.c:860
 msgid "recursively search in each submodule"
 msgstr "在每一個子模組中遞迴搜尋"
 
-#: builtin/grep.c:862
+#: builtin/grep.c:863
 msgid "show non-matching lines"
 msgstr "顯示未符合的行"
 
-#: builtin/grep.c:864
+#: builtin/grep.c:865
 msgid "case insensitive matching"
 msgstr "不區分大小寫符合"
 
-#: builtin/grep.c:866
+#: builtin/grep.c:867
 msgid "match patterns only at word boundaries"
 msgstr "只在單詞邊界符合模式"
 
-#: builtin/grep.c:868
+#: builtin/grep.c:869
 msgid "process binary files as text"
 msgstr "把二進位檔案當做文字處理"
 
-#: builtin/grep.c:870
+#: builtin/grep.c:871
 msgid "don't match patterns in binary files"
 msgstr "不在二進位檔案中符合模式"
 
-#: builtin/grep.c:873
+#: builtin/grep.c:874
 msgid "process binary files with textconv filters"
 msgstr "用 textconv 過濾器處理二進位檔案"
 
-#: builtin/grep.c:875
+#: builtin/grep.c:876
 msgid "search in subdirectories (default)"
 msgstr "在子目錄中尋找(預設)"
 
-#: builtin/grep.c:877
+#: builtin/grep.c:878
 msgid "descend at most <depth> levels"
 msgstr "最多以指定的深度向下尋找"
 
-#: builtin/grep.c:881
+#: builtin/grep.c:882
 msgid "use extended POSIX regular expressions"
 msgstr "使用延伸的 POSIX 常規表示式"
 
-#: builtin/grep.c:884
+#: builtin/grep.c:885
 msgid "use basic POSIX regular expressions (default)"
 msgstr "使用基本的 POSIX 常規表示式(預設)"
 
-#: builtin/grep.c:887
+#: builtin/grep.c:888
 msgid "interpret patterns as fixed strings"
 msgstr "把模式解析為固定的字串"
 
-#: builtin/grep.c:890
+#: builtin/grep.c:891
 msgid "use Perl-compatible regular expressions"
 msgstr "使用 Perl 相容的常規表示式"
 
-#: builtin/grep.c:893
+#: builtin/grep.c:894
 msgid "show line numbers"
 msgstr "顯示行號"
 
-#: builtin/grep.c:894
+#: builtin/grep.c:895
 msgid "show column number of first match"
 msgstr "顯示第一個符合的列號"
 
-#: builtin/grep.c:895
+#: builtin/grep.c:896
 msgid "don't show filenames"
 msgstr "不顯示檔案名"
 
-#: builtin/grep.c:896
+#: builtin/grep.c:897
 msgid "show filenames"
 msgstr "顯示檔案名"
 
-#: builtin/grep.c:898
+#: builtin/grep.c:899
 msgid "show filenames relative to top directory"
 msgstr "顯示相對於頂級目錄的檔案名"
 
-#: builtin/grep.c:900
+#: builtin/grep.c:901
 msgid "show only filenames instead of matching lines"
 msgstr "只顯示檔案名而不顯示符合的行"
 
-#: builtin/grep.c:902
+#: builtin/grep.c:903
 msgid "synonym for --files-with-matches"
 msgstr "和 --files-with-matches 同義"
 
-#: builtin/grep.c:905
+#: builtin/grep.c:906
 msgid "show only the names of files without match"
 msgstr "只顯示未符合的檔案名"
 
-#: builtin/grep.c:907
+#: builtin/grep.c:908
 msgid "print NUL after filenames"
 msgstr "在檔案名後輸出 NUL 字元"
 
-#: builtin/grep.c:910
+#: builtin/grep.c:911
 msgid "show only matching parts of a line"
 msgstr "只顯示行中的符合的部分"
 
-#: builtin/grep.c:912
+#: builtin/grep.c:913
 msgid "show the number of matches instead of matching lines"
 msgstr "顯示總符合行數,而不顯示符合的行"
 
-#: builtin/grep.c:913
+#: builtin/grep.c:914
 msgid "highlight matches"
 msgstr "高亮顯示符合項"
 
-#: builtin/grep.c:915
+#: builtin/grep.c:916
 msgid "print empty line between matches from different files"
 msgstr "在不同檔案的符合項之間列印空行"
 
-#: builtin/grep.c:917
+#: builtin/grep.c:918
 msgid "show filename only once above matches from same file"
 msgstr "只在同一檔案的符合項的上面顯示一次檔案名"
 
-#: builtin/grep.c:920
+#: builtin/grep.c:921
 msgid "show <n> context lines before and after matches"
 msgstr "顯示符合項前後的 <n> 行上下文"
 
-#: builtin/grep.c:923
+#: builtin/grep.c:924
 msgid "show <n> context lines before matches"
 msgstr "顯示符合項前 <n> 行上下文"
 
-#: builtin/grep.c:925
+#: builtin/grep.c:926
 msgid "show <n> context lines after matches"
 msgstr "顯示符合項後 <n> 行上下文"
 
-#: builtin/grep.c:927
+#: builtin/grep.c:928
 msgid "use <n> worker threads"
 msgstr "使用 <n> 個工作執行緒"
 
-#: builtin/grep.c:928
+#: builtin/grep.c:929
 msgid "shortcut for -C NUM"
 msgstr "快捷鍵 -C 數字"
 
-#: builtin/grep.c:931
+#: builtin/grep.c:932
 msgid "show a line with the function name before matches"
 msgstr "在符合的前面顯示一行函數名"
 
-#: builtin/grep.c:933
+#: builtin/grep.c:934
 msgid "show the surrounding function"
 msgstr "顯示所在函數的前後內容"
 
-#: builtin/grep.c:936
+#: builtin/grep.c:937
 msgid "read patterns from file"
 msgstr "從檔案讀取模式"
 
-#: builtin/grep.c:938
+#: builtin/grep.c:939
 msgid "match <pattern>"
 msgstr "符合 <模式>"
 
-#: builtin/grep.c:940
+#: builtin/grep.c:941
 msgid "combine patterns specified with -e"
 msgstr "組合用 -e 參數設定的模式"
 
-#: builtin/grep.c:952
+#: builtin/grep.c:953
 msgid "indicate hit with exit status without output"
 msgstr "不輸出,而用離開碼標記命中狀態"
 
-#: builtin/grep.c:954
+#: builtin/grep.c:955
 msgid "show only matches from files that match all patterns"
 msgstr "只顯示符合所有模式的檔案中的符合"
 
-#: builtin/grep.c:957
+#: builtin/grep.c:958
 msgid "pager"
 msgstr "分頁"
 
-#: builtin/grep.c:957
+#: builtin/grep.c:958
 msgid "show matching files in the pager"
 msgstr "分頁顯示符合的檔案"
 
-#: builtin/grep.c:961
+#: builtin/grep.c:962
 msgid "allow calling of grep(1) (ignored by this build)"
 msgstr "允許呼叫 grep(1)(本次組建忽略)"
 
-#: builtin/grep.c:1027
+#: builtin/grep.c:1028
 msgid "no pattern given"
 msgstr "未提供符合模式"
 
-#: builtin/grep.c:1063
+#: builtin/grep.c:1064
 msgid "--no-index or --untracked cannot be used with revs"
 msgstr "--no-index 或 --untracked 不能和版本同時使用"
 
-#: builtin/grep.c:1071
+#: builtin/grep.c:1072
 #, c-format
 msgid "unable to resolve revision: %s"
 msgstr "不能解析版本:%s"
 
-#: builtin/grep.c:1101
+#: builtin/grep.c:1102
 msgid "--untracked not supported with --recurse-submodules"
 msgstr "--untracked 不支援與 --recurse-submodules 一起使用"
 
-#: builtin/grep.c:1105
+#: builtin/grep.c:1106
 msgid "invalid option combination, ignoring --threads"
 msgstr "無效的選項組合,忽略 --threads"
 
-#: builtin/grep.c:1108 builtin/pack-objects.c:4059
+#: builtin/grep.c:1109 builtin/pack-objects.c:4084
 msgid "no threads support, ignoring --threads"
 msgstr "沒有執行緒支援,忽略 --threads"
 
-#: builtin/grep.c:1111 builtin/index-pack.c:1579 builtin/pack-objects.c:3139
+#: builtin/grep.c:1112 builtin/index-pack.c:1584 builtin/pack-objects.c:3147
 #, c-format
 msgid "invalid number of threads specified (%d)"
 msgstr "指定的執行緒數無效(%d)"
 
-#: builtin/grep.c:1145
+#: builtin/grep.c:1146
 msgid "--open-files-in-pager only works on the worktree"
 msgstr "--open-files-in-pager 僅用於工作區"
 
-#: builtin/grep.c:1171
-msgid "--cached or --untracked cannot be used with --no-index"
-msgstr "--cached 或 --untracked 不能與 --no-index 同時使用"
-
-#: builtin/grep.c:1174
-msgid "--untracked cannot be used with --cached"
-msgstr "--untracked 不能與 --cached 一起使用"
-
-#: builtin/grep.c:1180
+#: builtin/grep.c:1179
 msgid "--[no-]exclude-standard cannot be used for tracked contents"
 msgstr "--[no-]exclude-standard 不能用於已追蹤內容"
 
-#: builtin/grep.c:1188
+#: builtin/grep.c:1187
 msgid "both --cached and trees are given"
 msgstr "同時給出了 --cached 和樹狀物件"
 
@@ -16082,107 +16539,99 @@ msgstr ""
 "git hash-object [-t <類型>] [-w] [--path=<檔案> | --no-filters] [--stdin] "
 "[--] <檔案>..."
 
-#: builtin/hash-object.c:84
-msgid "git hash-object  --stdin-paths"
-msgstr "git hash-object  --stdin-paths"
-
-#: builtin/hash-object.c:96
+#: builtin/hash-object.c:97
 msgid "object type"
 msgstr "物件類型"
 
-#: builtin/hash-object.c:97
+#: builtin/hash-object.c:98
 msgid "write the object into the object database"
 msgstr "將物件寫入物件資料庫"
 
-#: builtin/hash-object.c:99
+#: builtin/hash-object.c:100
 msgid "read the object from stdin"
 msgstr "從標準輸入讀取物件"
 
-#: builtin/hash-object.c:101
+#: builtin/hash-object.c:102
 msgid "store file as is without filters"
 msgstr "原樣儲存檔案不使用過濾器"
 
-#: builtin/hash-object.c:102
+#: builtin/hash-object.c:103
 msgid ""
 "just hash any random garbage to create corrupt objects for debugging Git"
 msgstr "允許對任意隨機垃圾資料做散列來建立損壞的物件以便除錯 Git"
 
-#: builtin/hash-object.c:103
+#: builtin/hash-object.c:104
 msgid "process file as it were from this path"
 msgstr "處理檔案並假設其來自於此路徑"
 
-#: builtin/help.c:55
+#: builtin/help.c:57
 msgid "print all available commands"
 msgstr "列印所有可用的指令"
 
-#: builtin/help.c:57
+#: builtin/help.c:60
+msgid "show external commands in --all"
+msgstr "在 --all 顯示外部命令"
+
+#: builtin/help.c:61
+msgid "show aliases in --all"
+msgstr "在 --all 顯示別名"
+
+#: builtin/help.c:62
 msgid "exclude guides"
 msgstr "排除嚮導"
 
-#: builtin/help.c:58
+#: builtin/help.c:63
 msgid "show man page"
 msgstr "顯示 man 手冊"
 
-#: builtin/help.c:59
+#: builtin/help.c:64
 msgid "show manual in web browser"
 msgstr "在 web 瀏覽器中顯示手冊"
 
-#: builtin/help.c:61
+#: builtin/help.c:66
 msgid "show info page"
 msgstr "顯示 info 手冊"
 
-#: builtin/help.c:63
+#: builtin/help.c:68
 msgid "print command description"
 msgstr "列印指令描述"
 
-#: builtin/help.c:65
+#: builtin/help.c:70
 msgid "print list of useful guides"
 msgstr "顯示有用的指南列表"
 
-#: builtin/help.c:67
+#: builtin/help.c:72
 msgid "print all configuration variable names"
 msgstr "列印所有設定變數名稱"
 
-#: builtin/help.c:78
-msgid ""
-"git help [-a|--all] [--[no-]verbose]]\n"
-"         [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
-msgstr ""
-"git help [-a|--all] [--[no-]verbose]]\n"
-"         [[-i|--info] [-m|--man] [-w|--web]] [<命令>]"
-
-#: builtin/help.c:80
-msgid "git help [-g|--guides]"
-msgstr "git help [-g|--guides]"
-
-#: builtin/help.c:81
-msgid "git help [-c|--config]"
-msgstr "git help [-c|--config]"
+#: builtin/help.c:84
+msgid "git help [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
+msgstr "git help [[-i|--info] [-m|--man] [-w|--web]] [<command>]"
 
-#: builtin/help.c:196
+#: builtin/help.c:201
 #, c-format
 msgid "unrecognized help format '%s'"
 msgstr "無法識別的協助格式 '%s'"
 
-#: builtin/help.c:222
+#: builtin/help.c:227
 msgid "Failed to start emacsclient."
 msgstr "無法啟動 emacsclient。"
 
-#: builtin/help.c:235
+#: builtin/help.c:240
 msgid "Failed to parse emacsclient version."
 msgstr "無法解析 emacsclient 版本。"
 
-#: builtin/help.c:243
+#: builtin/help.c:248
 #, c-format
 msgid "emacsclient version '%d' too old (< 22)."
 msgstr "emacsclient 版本 '%d' 太老(< 22)。"
 
-#: builtin/help.c:261 builtin/help.c:283 builtin/help.c:293 builtin/help.c:301
+#: builtin/help.c:266 builtin/help.c:288 builtin/help.c:298 builtin/help.c:306
 #, c-format
 msgid "failed to exec '%s'"
 msgstr "執行 '%s' 失敗"
 
-#: builtin/help.c:339
+#: builtin/help.c:344
 #, c-format
 msgid ""
 "'%s': path for unsupported man viewer.\n"
@@ -16191,7 +16640,7 @@ msgstr ""
 "'%s':不支援的 man 手冊檢視器的路徑。\n"
 "請使用 'man.<工具>.cmd'。"
 
-#: builtin/help.c:351
+#: builtin/help.c:356
 #, c-format
 msgid ""
 "'%s': cmd for supported man viewer.\n"
@@ -16200,42 +16649,56 @@ msgstr ""
 "'%s': 支援的 man 手冊檢視器指令。\n"
 "請使用 'man.<工具>.path'。"
 
-#: builtin/help.c:466
+#: builtin/help.c:471
 #, c-format
 msgid "'%s': unknown man viewer."
 msgstr "'%s':未知的 man 檢視器。"
 
-#: builtin/help.c:482
+#: builtin/help.c:487
 msgid "no man viewer handled the request"
 msgstr "沒有 man 檢視器處理此請求"
 
-#: builtin/help.c:489
+#: builtin/help.c:494
 msgid "no info viewer handled the request"
 msgstr "沒有 info 檢視器處理此請求"
 
-#: builtin/help.c:550 builtin/help.c:561 git.c:348
+#: builtin/help.c:555 builtin/help.c:566 git.c:348
 #, c-format
 msgid "'%s' is aliased to '%s'"
 msgstr "'%s' 是 '%s' 的別名"
 
-#: builtin/help.c:564 git.c:380
+#: builtin/help.c:569 git.c:380
 #, c-format
 msgid "bad alias.%s string: %s"
 msgstr "壞的 alias.%s 字串:%s"
 
-#: builtin/help.c:580
-msgid "this option doesn't take any other arguments"
-msgstr "本選項不取其他引數"
+#: builtin/help.c:611
+#, c-format
+msgid "the '%s' option doesn't take any non-option arguments"
+msgstr "「%s」選項不取非選項的引數"
+
+#: builtin/help.c:631
+msgid ""
+"the '--no-[external-commands|aliases]' options can only be used with '--all'"
+msgstr "「--no-[external-commands|aliases]」選項只能與「--all」一起使用"
 
-#: builtin/help.c:601 builtin/help.c:628
+#: builtin/help.c:643 builtin/help.c:671
 #, c-format
 msgid "usage: %s%s"
 msgstr "用法:%s%s"
 
-#: builtin/help.c:623
+#: builtin/help.c:666
 msgid "'git help config' for more information"
 msgstr "'git help config' 取得更多訊息"
 
+#: builtin/hook.c:10
+msgid "git hook run [--ignore-missing] <hook-name> [-- <hook-args>]"
+msgstr "git hook run [--ignore-missing] <hook-name> [-- <hook-args>]"
+
+#: builtin/hook.c:30
+msgid "silently ignore missing requested <hook-name>"
+msgstr "靜默忽略不存在而請求的 <hook-name>"
+
 #: builtin/index-pack.c:221
 #, c-format
 msgid "object type mismatch at %s"
@@ -16269,239 +16732,240 @@ msgstr "輸入上的讀錯誤"
 msgid "used more bytes than were available"
 msgstr "用掉了超過可用的位元組"
 
-#: builtin/index-pack.c:324 builtin/pack-objects.c:756
+#: builtin/index-pack.c:324 builtin/pack-objects.c:754
 msgid "pack too large for current definition of off_t"
 msgstr "包太大超過了目前 off_t 的定義"
 
-#: builtin/index-pack.c:327 builtin/unpack-objects.c:95
-msgid "pack exceeds maximum allowed size"
-msgstr "包超過了最大允許值"
+#: builtin/index-pack.c:329
+#, c-format
+msgid "pack exceeds maximum allowed size (%s)"
+msgstr "包超過了最大允許大小 (%s)"
 
-#: builtin/index-pack.c:358
+#: builtin/index-pack.c:362
 msgid "pack signature mismatch"
 msgstr "包簽名不符合"
 
-#: builtin/index-pack.c:360
+#: builtin/index-pack.c:364
 #, c-format
 msgid "pack version %<PRIu32> unsupported"
 msgstr "不支援包版本 %<PRIu32>"
 
-#: builtin/index-pack.c:376
+#: builtin/index-pack.c:380
 #, c-format
 msgid "pack has bad object at offset %<PRIuMAX>: %s"
 msgstr "包中有錯誤的物件位於位移量 %<PRIuMAX>:%s"
 
-#: builtin/index-pack.c:482
+#: builtin/index-pack.c:485
 #, c-format
 msgid "inflate returned %d"
 msgstr "解壓縮返回 %d"
 
-#: builtin/index-pack.c:531
+#: builtin/index-pack.c:534
 msgid "offset value overflow for delta base object"
 msgstr "位移值覆蓋了 delta 基準物件"
 
-#: builtin/index-pack.c:539
+#: builtin/index-pack.c:542
 msgid "delta base offset is out of bound"
 msgstr "delta 基準位移越界"
 
-#: builtin/index-pack.c:547
+#: builtin/index-pack.c:550
 #, c-format
 msgid "unknown object type %d"
 msgstr "未知物件類型 %d"
 
-#: builtin/index-pack.c:578
+#: builtin/index-pack.c:581
 msgid "cannot pread pack file"
 msgstr "無法讀取包檔案"
 
-#: builtin/index-pack.c:580
+#: builtin/index-pack.c:583
 #, c-format
 msgid "premature end of pack file, %<PRIuMAX> byte missing"
 msgid_plural "premature end of pack file, %<PRIuMAX> bytes missing"
 msgstr[0] "包檔案過早結束,缺少 %<PRIuMAX> 位元組"
 
-#: builtin/index-pack.c:606
+#: builtin/index-pack.c:609
 msgid "serious inflate inconsistency"
 msgstr "解壓縮嚴重的不一致"
 
-#: builtin/index-pack.c:751 builtin/index-pack.c:757 builtin/index-pack.c:781
-#: builtin/index-pack.c:820 builtin/index-pack.c:829
+#: builtin/index-pack.c:754 builtin/index-pack.c:760 builtin/index-pack.c:784
+#: builtin/index-pack.c:823 builtin/index-pack.c:832
 #, c-format
 msgid "SHA1 COLLISION FOUND WITH %s !"
 msgstr "發現 %s 出現 SHA1 衝突!"
 
-#: builtin/index-pack.c:754 builtin/pack-objects.c:292
-#: builtin/pack-objects.c:352 builtin/pack-objects.c:458
+#: builtin/index-pack.c:757 builtin/pack-objects.c:290
+#: builtin/pack-objects.c:350 builtin/pack-objects.c:456
 #, c-format
 msgid "unable to read %s"
 msgstr "不能讀 %s"
 
-#: builtin/index-pack.c:818
+#: builtin/index-pack.c:821
 #, c-format
 msgid "cannot read existing object info %s"
 msgstr "不能讀取現存物件訊息 %s"
 
-#: builtin/index-pack.c:826
+#: builtin/index-pack.c:829
 #, c-format
 msgid "cannot read existing object %s"
 msgstr "不能讀取現存物件 %s"
 
-#: builtin/index-pack.c:840
+#: builtin/index-pack.c:843
 #, c-format
 msgid "invalid blob object %s"
 msgstr "無效的資料物件 %s"
 
-#: builtin/index-pack.c:843 builtin/index-pack.c:862
+#: builtin/index-pack.c:846 builtin/index-pack.c:865
 msgid "fsck error in packed object"
 msgstr "對打包物件 fsck 檢查發生錯誤"
 
-#: builtin/index-pack.c:864
+#: builtin/index-pack.c:867
 #, c-format
 msgid "Not all child objects of %s are reachable"
 msgstr "%s 的所有子物件並非都可以取得"
 
-#: builtin/index-pack.c:925 builtin/index-pack.c:972
+#: builtin/index-pack.c:928 builtin/index-pack.c:975
 msgid "failed to apply delta"
 msgstr "套用 delta 失敗"
 
-#: builtin/index-pack.c:1156
+#: builtin/index-pack.c:1161
 msgid "Receiving objects"
 msgstr "接收物件中"
 
-#: builtin/index-pack.c:1156
+#: builtin/index-pack.c:1161
 msgid "Indexing objects"
 msgstr "索引物件中"
 
-#: builtin/index-pack.c:1190
+#: builtin/index-pack.c:1195
 msgid "pack is corrupted (SHA1 mismatch)"
 msgstr "包衝突(SHA1 不符合)"
 
-#: builtin/index-pack.c:1195
+#: builtin/index-pack.c:1200
 msgid "cannot fstat packfile"
 msgstr "不能對 packfile 呼叫 fstat"
 
-#: builtin/index-pack.c:1198
+#: builtin/index-pack.c:1203
 msgid "pack has junk at the end"
 msgstr "包的結尾有垃圾資料"
 
-#: builtin/index-pack.c:1210
+#: builtin/index-pack.c:1215
 msgid "confusion beyond insanity in parse_pack_objects()"
 msgstr "parse_pack_objects() 中遇到不可理喻的問題"
 
-#: builtin/index-pack.c:1233
+#: builtin/index-pack.c:1238
 msgid "Resolving deltas"
 msgstr "處理 delta 中"
 
-#: builtin/index-pack.c:1244 builtin/pack-objects.c:2905
+#: builtin/index-pack.c:1249 builtin/pack-objects.c:2913
 #, c-format
 msgid "unable to create thread: %s"
 msgstr "不能建立執行緒:%s"
 
-#: builtin/index-pack.c:1277
+#: builtin/index-pack.c:1282
 msgid "confusion beyond insanity"
 msgstr "不可理喻"
 
-#: builtin/index-pack.c:1283
+#: builtin/index-pack.c:1288
 #, c-format
 msgid "completed with %d local object"
 msgid_plural "completed with %d local objects"
 msgstr[0] "完成 %d 個本機物件"
 
-#: builtin/index-pack.c:1295
+#: builtin/index-pack.c:1300
 #, c-format
 msgid "Unexpected tail checksum for %s (disk corruption?)"
 msgstr "對 %s 的尾部總和檢查出現意外(磁碟損壞?)"
 
-#: builtin/index-pack.c:1299
+#: builtin/index-pack.c:1304
 #, c-format
 msgid "pack has %d unresolved delta"
 msgid_plural "pack has %d unresolved deltas"
 msgstr[0] "包有 %d 個未解決的 delta"
 
-#: builtin/index-pack.c:1323
+#: builtin/index-pack.c:1328
 #, c-format
 msgid "unable to deflate appended object (%d)"
 msgstr "不能壓縮附加物件(%d)"
 
-#: builtin/index-pack.c:1419
+#: builtin/index-pack.c:1423
 #, c-format
 msgid "local object %s is corrupt"
 msgstr "本機物件 %s 已損壞"
 
-#: builtin/index-pack.c:1440
+#: builtin/index-pack.c:1445
 #, c-format
 msgid "packfile name '%s' does not end with '.%s'"
 msgstr "packfile 名稱「%s」的結尾不是「.%s」"
 
-#: builtin/index-pack.c:1464
+#: builtin/index-pack.c:1469
 #, c-format
 msgid "cannot write %s file '%s'"
 msgstr "無法寫入 %s 檔案 '%s'"
 
-#: builtin/index-pack.c:1472
+#: builtin/index-pack.c:1477
 #, c-format
 msgid "cannot close written %s file '%s'"
 msgstr "無法關閉已寫入的 %s 檔案 '%s'"
 
-#: builtin/index-pack.c:1489
+#: builtin/index-pack.c:1494
 #, c-format
 msgid "unable to rename temporary '*.%s' file to '%s'"
 msgstr "無法將「*.%s」暫存檔的檔名更改為「%s」"
 
-#: builtin/index-pack.c:1514
+#: builtin/index-pack.c:1519
 msgid "error while closing pack file"
 msgstr "關閉包檔案時發生錯誤"
 
-#: builtin/index-pack.c:1573 builtin/pack-objects.c:3150
+#: builtin/index-pack.c:1578 builtin/pack-objects.c:3158
 #, c-format
 msgid "bad pack.indexversion=%<PRIu32>"
 msgstr "壞的 pack.indexversion=%<PRIu32>"
 
-#: builtin/index-pack.c:1643
+#: builtin/index-pack.c:1648
 #, c-format
 msgid "Cannot open existing pack file '%s'"
 msgstr "無法開啟現有包檔案 '%s'"
 
-#: builtin/index-pack.c:1645
+#: builtin/index-pack.c:1650
 #, c-format
 msgid "Cannot open existing pack idx file for '%s'"
 msgstr "無法為 %s 開啟包索引檔案"
 
-#: builtin/index-pack.c:1693
+#: builtin/index-pack.c:1698
 #, c-format
 msgid "non delta: %d object"
 msgid_plural "non delta: %d objects"
 msgstr[0] "非 delta:%d 個物件"
 
-#: builtin/index-pack.c:1700
+#: builtin/index-pack.c:1705
 #, c-format
 msgid "chain length = %d: %lu object"
 msgid_plural "chain length = %d: %lu objects"
 msgstr[0] "鏈長 = %d: %lu 物件"
 
-#: builtin/index-pack.c:1742
+#: builtin/index-pack.c:1748
 msgid "Cannot come back to cwd"
 msgstr "無法返回目前工作目錄"
 
-#: builtin/index-pack.c:1796 builtin/index-pack.c:1799
-#: builtin/index-pack.c:1819 builtin/index-pack.c:1823
+#: builtin/index-pack.c:1802 builtin/index-pack.c:1805
+#: builtin/index-pack.c:1825 builtin/index-pack.c:1829
 #, c-format
 msgid "bad %s"
 msgstr "錯誤選項 %s"
 
-#: builtin/index-pack.c:1829 builtin/init-db.c:379 builtin/init-db.c:614
+#: builtin/index-pack.c:1835 builtin/init-db.c:379 builtin/init-db.c:614
 #, c-format
 msgid "unknown hash algorithm '%s'"
 msgstr "未知的「%s」雜湊算法"
 
-#: builtin/index-pack.c:1850
+#: builtin/index-pack.c:1856
 msgid "--stdin requires a git repository"
 msgstr "--stdin 需要一個 git 版本庫"
 
-#: builtin/index-pack.c:1867
+#: builtin/index-pack.c:1873
 msgid "--verify with no packfile name given"
 msgstr "--verify 沒有提供 packfile 名稱參數"
 
-#: builtin/index-pack.c:1933 builtin/unpack-objects.c:584
+#: builtin/index-pack.c:1939 builtin/unpack-objects.c:584
 msgid "fsck error in pack objects"
 msgstr "在打包物件中 fsck 檢查發生錯誤"
 
@@ -16708,128 +17172,132 @@ msgstr "--trailer 和 --only-input 同時使用沒有意義"
 msgid "no input file given for in-place editing"
 msgstr "沒有給出要原位編輯的檔案"
 
-#: builtin/log.c:59
+#: builtin/log.c:60
 msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
 msgstr "git log [<選項>] [<版本範圍>] [[--] <路徑>...]"
 
-#: builtin/log.c:60
+#: builtin/log.c:61
 msgid "git show [<options>] <object>..."
 msgstr "git show [<選項>] <物件>..."
 
-#: builtin/log.c:113
+#: builtin/log.c:114
 #, c-format
 msgid "invalid --decorate option: %s"
 msgstr "無效的 --decorate 選項:%s"
 
-#: builtin/log.c:180
+#: builtin/log.c:181
 msgid "show source"
 msgstr "顯示來源"
 
-#: builtin/log.c:181
+#: builtin/log.c:182
 msgid "use mail map file"
 msgstr "使用信件映射檔案"
 
-#: builtin/log.c:184
+#: builtin/log.c:185
 msgid "only decorate refs that match <pattern>"
 msgstr "只修飾與 <模式> 符合的引用"
 
-#: builtin/log.c:186
+#: builtin/log.c:187
 msgid "do not decorate refs that match <pattern>"
 msgstr "不修飾和 <模式> 符合的引用"
 
-#: builtin/log.c:187
+#: builtin/log.c:188
 msgid "decorate options"
 msgstr "修飾選項"
 
-#: builtin/log.c:190
+#: builtin/log.c:191
 msgid ""
 "trace the evolution of line range <start>,<end> or function :<funcname> in "
 "<file>"
 msgstr "追蹤 <開始>,<結束> 範圍中橫列或 <檔案> 中> :<函數名稱> 的變化史"
 
-#: builtin/log.c:213
+#: builtin/log.c:214
 msgid "-L<range>:<file> cannot be used with pathspec"
 msgstr "-L<範圍>:<檔案> 和 pathspec 不能同時使用"
 
-#: builtin/log.c:321
+#: builtin/log.c:322
 #, c-format
 msgid "Final output: %d %s\n"
 msgstr "最終輸出:%d %s\n"
 
-#: builtin/log.c:586
+#: builtin/log.c:429
+msgid "unable to create temporary object directory"
+msgstr "無法建立暫存物件目錄"
+
+#: builtin/log.c:599
 #, c-format
 msgid "git show %s: bad file"
 msgstr "git show %s: 損壞的檔案"
 
-#: builtin/log.c:601 builtin/log.c:691
+#: builtin/log.c:614 builtin/log.c:706
 #, c-format
 msgid "could not read object %s"
 msgstr "不能讀取物件 %s"
 
-#: builtin/log.c:716
+#: builtin/log.c:731
 #, c-format
 msgid "unknown type: %d"
 msgstr "未知類型:%d"
 
-#: builtin/log.c:861
+#: builtin/log.c:880
 #, c-format
 msgid "%s: invalid cover from description mode"
 msgstr "%s:從描述產生附函的模式無效"
 
-#: builtin/log.c:868
+#: builtin/log.c:887
 msgid "format.headers without value"
 msgstr "format.headers 沒有值"
 
-#: builtin/log.c:997
+#: builtin/log.c:1016
 #, c-format
 msgid "cannot open patch file %s"
 msgstr "無法開啟修補檔案 %s"
 
-#: builtin/log.c:1014
+#: builtin/log.c:1033
 msgid "need exactly one range"
 msgstr "只需要一個範圍"
 
-#: builtin/log.c:1024
+#: builtin/log.c:1043
 msgid "not a range"
 msgstr "不是一個範圍"
 
-#: builtin/log.c:1188
+#: builtin/log.c:1207
 msgid "cover letter needs email format"
 msgstr "附函需要信件位址格式"
 
-#: builtin/log.c:1194
+#: builtin/log.c:1213
 msgid "failed to create cover-letter file"
 msgstr "無法建立附函檔案"
 
-#: builtin/log.c:1281
+#: builtin/log.c:1300
 #, c-format
 msgid "insane in-reply-to: %s"
 msgstr "不正常的 in-reply-to:%s"
 
-#: builtin/log.c:1308
+#: builtin/log.c:1327
 msgid "git format-patch [<options>] [<since> | <revision-range>]"
 msgstr "git format-patch [<選項>] [<從> | <版本範圍>]"
 
-#: builtin/log.c:1366
+#: builtin/log.c:1385
 msgid "two output directories?"
 msgstr "兩個輸出目錄?"
 
-#: builtin/log.c:1517 builtin/log.c:2344 builtin/log.c:2346 builtin/log.c:2358
+#: builtin/log.c:1536 builtin/log.c:2369 builtin/log.c:2371 builtin/log.c:2383
 #, c-format
 msgid "unknown commit %s"
 msgstr "未知提交 %s"
 
-#: builtin/log.c:1528 builtin/replace.c:58 builtin/replace.c:207
+#: builtin/log.c:1547 builtin/replace.c:58 builtin/replace.c:207
 #: builtin/replace.c:210
 #, c-format
 msgid "failed to resolve '%s' as a valid ref"
 msgstr "無法將 '%s' 解析為一個有效引用"
 
-#: builtin/log.c:1537
+#: builtin/log.c:1556
 msgid "could not find exact merge base"
 msgstr "不能找到準確的合併基礎"
 
-#: builtin/log.c:1547
+#: builtin/log.c:1566
 msgid ""
 "failed to get upstream, if you want to record base commit automatically,\n"
 "please use git branch --set-upstream-to to track a remote branch.\n"
@@ -16839,272 +17307,276 @@ msgstr ""
 "git branch --set-upstream-to 來追蹤一個遠端分支。或者你可以透過\n"
 "參數 --base=<基礎提交> 手動指定一個基礎提交"
 
-#: builtin/log.c:1570
+#: builtin/log.c:1589
 msgid "failed to find exact merge base"
 msgstr "無法找到準確的合併基礎"
 
-#: builtin/log.c:1587
+#: builtin/log.c:1606
 msgid "base commit should be the ancestor of revision list"
 msgstr "基礎提交應該是版本列表的祖先"
 
-#: builtin/log.c:1597
+#: builtin/log.c:1616
 msgid "base commit shouldn't be in revision list"
 msgstr "基礎提交不應該出現在版本列表中"
 
-#: builtin/log.c:1655
+#: builtin/log.c:1674
 msgid "cannot get patch id"
 msgstr "無法得到修補檔 id"
 
-#: builtin/log.c:1718
+#: builtin/log.c:1737
 msgid "failed to infer range-diff origin of current series"
 msgstr "無法推斷目前系列的 range-diff 起點"
 
-#: builtin/log.c:1720
+#: builtin/log.c:1739
 #, c-format
 msgid "using '%s' as range-diff origin of current series"
 msgstr "將 '%s' 當作目前系列的 range-diff 起點"
 
-#: builtin/log.c:1764
+#: builtin/log.c:1783
 msgid "use [PATCH n/m] even with a single patch"
 msgstr "使用 [PATCH n/m],即使只有一個修補檔"
 
-#: builtin/log.c:1767
+#: builtin/log.c:1786
 msgid "use [PATCH] even with multiple patches"
 msgstr "使用 [PATCH],即使有多個修補檔"
 
-#: builtin/log.c:1771
+#: builtin/log.c:1790
 msgid "print patches to standard out"
 msgstr "列印修補檔到標準輸出"
 
-#: builtin/log.c:1773
+#: builtin/log.c:1792
 msgid "generate a cover letter"
 msgstr "生成一封附函"
 
-#: builtin/log.c:1775
+#: builtin/log.c:1794
 msgid "use simple number sequence for output file names"
 msgstr "使用簡單的數字序列作為輸出檔案名"
 
-#: builtin/log.c:1776
+#: builtin/log.c:1795
 msgid "sfx"
 msgstr "後綴"
 
-#: builtin/log.c:1777
+#: builtin/log.c:1796
 msgid "use <sfx> instead of '.patch'"
 msgstr "使用 <後綴> 代替 '.patch'"
 
-#: builtin/log.c:1779
+#: builtin/log.c:1798
 msgid "start numbering patches at <n> instead of 1"
 msgstr "修補檔以 <n> 開始編號,而不是1"
 
-#: builtin/log.c:1780
+#: builtin/log.c:1799
 msgid "reroll-count"
 msgstr "reroll-count"
 
-#: builtin/log.c:1781
+#: builtin/log.c:1800
 msgid "mark the series as Nth re-roll"
 msgstr "標記修補檔系列是第幾次重製"
 
-#: builtin/log.c:1783
+#: builtin/log.c:1802
 msgid "max length of output filename"
 msgstr "輸出檔名的最大長度"
 
-#: builtin/log.c:1785
+#: builtin/log.c:1804
 msgid "use [RFC PATCH] instead of [PATCH]"
 msgstr "使用 [RFC PATCH] 代替 [PATCH]"
 
-#: builtin/log.c:1788
+#: builtin/log.c:1807
 msgid "cover-from-description-mode"
 msgstr "從描述產生附函的模式"
 
-#: builtin/log.c:1789
+#: builtin/log.c:1808
 msgid "generate parts of a cover letter based on a branch's description"
 msgstr "基於分支描述產生部分附函"
 
-#: builtin/log.c:1791
+#: builtin/log.c:1810
 msgid "use [<prefix>] instead of [PATCH]"
 msgstr "使用 [<前綴>] 代替 [PATCH]"
 
-#: builtin/log.c:1794
+#: builtin/log.c:1813
 msgid "store resulting files in <dir>"
 msgstr "把結果檔案儲存在 <目錄>"
 
-#: builtin/log.c:1797
+#: builtin/log.c:1816
 msgid "don't strip/add [PATCH]"
 msgstr "不刪除/新增 [PATCH]"
 
-#: builtin/log.c:1800
+#: builtin/log.c:1819
 msgid "don't output binary diffs"
 msgstr "不輸出二進位差異"
 
-#: builtin/log.c:1802
+#: builtin/log.c:1821
 msgid "output all-zero hash in From header"
 msgstr "在 From 標頭訊息中輸出全為零的雜湊值"
 
-#: builtin/log.c:1804
+#: builtin/log.c:1823
 msgid "don't include a patch matching a commit upstream"
 msgstr "不包含已在上游提交中的修補檔"
 
-#: builtin/log.c:1806
+#: builtin/log.c:1825
 msgid "show patch format instead of default (patch + stat)"
 msgstr "顯示純修補檔格式而非預設的(修補檔+狀態)"
 
-#: builtin/log.c:1808
+#: builtin/log.c:1827
 msgid "Messaging"
 msgstr "信件傳送"
 
-#: builtin/log.c:1809
+#: builtin/log.c:1828
 msgid "header"
 msgstr "header"
 
-#: builtin/log.c:1810
+#: builtin/log.c:1829
 msgid "add email header"
 msgstr "新增信件頭"
 
-#: builtin/log.c:1811 builtin/log.c:1812
+#: builtin/log.c:1830 builtin/log.c:1831
 msgid "email"
 msgstr "信件位址"
 
-#: builtin/log.c:1811
+#: builtin/log.c:1830
 msgid "add To: header"
 msgstr "新增收件人"
 
-#: builtin/log.c:1812
+#: builtin/log.c:1831
 msgid "add Cc: header"
 msgstr "新增抄送"
 
-#: builtin/log.c:1813
+#: builtin/log.c:1832
 msgid "ident"
 msgstr "標記"
 
-#: builtin/log.c:1814
+#: builtin/log.c:1833
 msgid "set From address to <ident> (or committer ident if absent)"
 msgstr "將 From 位址設定為 <標記>(如若不提供,則用提交者 ID 做為位址)"
 
-#: builtin/log.c:1816
+#: builtin/log.c:1835
 msgid "message-id"
 msgstr "信件標記"
 
-#: builtin/log.c:1817
+#: builtin/log.c:1836
 msgid "make first mail a reply to <message-id>"
 msgstr "使第一封信件作為對 <信件標記> 的回覆"
 
-#: builtin/log.c:1818 builtin/log.c:1821
+#: builtin/log.c:1837 builtin/log.c:1840
 msgid "boundary"
 msgstr "邊界"
 
-#: builtin/log.c:1819
+#: builtin/log.c:1838
 msgid "attach the patch"
 msgstr "附件方式新增修補檔"
 
-#: builtin/log.c:1822
+#: builtin/log.c:1841
 msgid "inline the patch"
 msgstr "內聯顯示修補檔"
 
-#: builtin/log.c:1826
+#: builtin/log.c:1845
 msgid "enable message threading, styles: shallow, deep"
 msgstr "啟用信件線索,風格:淺,深"
 
-#: builtin/log.c:1828
+#: builtin/log.c:1847
 msgid "signature"
 msgstr "簽名"
 
-#: builtin/log.c:1829
+#: builtin/log.c:1848
 msgid "add a signature"
 msgstr "新增一個簽名"
 
-#: builtin/log.c:1830
+#: builtin/log.c:1849
 msgid "base-commit"
 msgstr "基礎提交"
 
-#: builtin/log.c:1831
+#: builtin/log.c:1850
 msgid "add prerequisite tree info to the patch series"
 msgstr "為修補檔列表新增前置樹訊息"
 
-#: builtin/log.c:1834
+#: builtin/log.c:1853
 msgid "add a signature from a file"
 msgstr "從檔案新增一個簽名"
 
-#: builtin/log.c:1835
+#: builtin/log.c:1854
 msgid "don't print the patch filenames"
 msgstr "不要列印修補檔檔案名"
 
-#: builtin/log.c:1837
+#: builtin/log.c:1856
 msgid "show progress while generating patches"
 msgstr "在生成修補檔時顯示進度"
 
-#: builtin/log.c:1839
+#: builtin/log.c:1858
 msgid "show changes against <rev> in cover letter or single patch"
 msgstr "在附函或單個修補檔中顯示和 <rev> 的差異"
 
-#: builtin/log.c:1842
+#: builtin/log.c:1861
 msgid "show changes against <refspec> in cover letter or single patch"
 msgstr "在附函或單個修補檔中顯示和 <refspec> 的差異"
 
-#: builtin/log.c:1844 builtin/range-diff.c:28
+#: builtin/log.c:1863 builtin/range-diff.c:28
 msgid "percentage by which creation is weighted"
 msgstr "建立權重的百分比"
 
-#: builtin/log.c:1931
+#: builtin/log.c:1953
 #, c-format
 msgid "invalid ident line: %s"
 msgstr "包含無效的身份標記:%s"
 
-#: builtin/log.c:1956
+#: builtin/log.c:1978
 msgid "--name-only does not make sense"
 msgstr "--name-only 無意義"
 
-#: builtin/log.c:1958
+#: builtin/log.c:1980
 msgid "--name-status does not make sense"
 msgstr "--name-status 無意義"
 
-#: builtin/log.c:1960
+#: builtin/log.c:1982
 msgid "--check does not make sense"
 msgstr "--check 無意義"
 
-#: builtin/log.c:2104
+#: builtin/log.c:1984
+msgid "--remerge-diff does not make sense"
+msgstr "--remerge-diff 無意義"
+
+#: builtin/log.c:2129
 msgid "--interdiff requires --cover-letter or single patch"
 msgstr "--interdiff 需要 --cover-letter 或單一修補檔"
 
-#: builtin/log.c:2108
+#: builtin/log.c:2133
 msgid "Interdiff:"
 msgstr "版本間差異:"
 
-#: builtin/log.c:2109
+#: builtin/log.c:2134
 #, c-format
 msgid "Interdiff against v%d:"
 msgstr "對 v%d 的版本差異:"
 
-#: builtin/log.c:2119
+#: builtin/log.c:2144
 msgid "--range-diff requires --cover-letter or single patch"
 msgstr "--range-diff 需要 --cover-letter 或單一修補檔"
 
-#: builtin/log.c:2127
+#: builtin/log.c:2152
 msgid "Range-diff:"
 msgstr "範圍差異:"
 
-#: builtin/log.c:2128
+#: builtin/log.c:2153
 #, c-format
 msgid "Range-diff against v%d:"
 msgstr "對 v%d 的範圍差異:"
 
-#: builtin/log.c:2139
+#: builtin/log.c:2164
 #, c-format
 msgid "unable to read signature file '%s'"
 msgstr "無法讀取簽名檔案 '%s'"
 
-#: builtin/log.c:2175
+#: builtin/log.c:2200
 msgid "Generating patches"
 msgstr "生成修補檔"
 
-#: builtin/log.c:2219
+#: builtin/log.c:2244
 msgid "failed to create output files"
 msgstr "無法建立輸出檔案"
 
-#: builtin/log.c:2279
+#: builtin/log.c:2304
 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
 msgstr "git cherry [-v] [<上游> [<頭> [<限制>]]]"
 
-#: builtin/log.c:2333
+#: builtin/log.c:2358
 #, c-format
 msgid ""
 "Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -17198,10 +17670,6 @@ msgstr "新增標準的 git 排除"
 msgid "make the output relative to the project top directory"
 msgstr "顯示相對於頂級目錄的檔案名"
 
-#: builtin/ls-files.c:667
-msgid "recurse through submodules"
-msgstr "在子模組中遞迴"
-
 #: builtin/ls-files.c:669
 msgid "if any <file> is not in the index, treat this as an error"
 msgstr "如果任何 <檔案> 都不在索引區,視為錯誤"
@@ -17240,7 +17708,7 @@ msgstr ""
 msgid "do not print remote URL"
 msgstr "不列印遠端 URL"
 
-#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1103
+#: builtin/ls-remote.c:61 builtin/ls-remote.c:63 builtin/rebase.c:1131
 msgid "exec"
 msgstr "exec"
 
@@ -17272,42 +17740,70 @@ msgstr "若未找到符合的引用則以離開碼2離開"
 msgid "show underlying ref in addition to the object pointed by it"
 msgstr "除了顯示指向的物件外,顯示指向的引用名"
 
-#: builtin/ls-tree.c:30
+#: builtin/ls-tree.c:36
 msgid "git ls-tree [<options>] <tree-ish> [<path>...]"
 msgstr "git ls-tree [<選項>] <樹或提交> [<路徑>...]"
 
-#: builtin/ls-tree.c:128
+#: builtin/ls-tree.c:54
+#, c-format
+msgid "could not get object info about '%s'"
+msgstr "無法取得「%s」相關的物件資訊"
+
+#: builtin/ls-tree.c:79
+#, c-format
+msgid "bad ls-tree format: element '%s' does not start with '('"
+msgstr "無效的 ls-tree 格式:「%s」元素的開頭不是「(」"
+
+#: builtin/ls-tree.c:83
+#, c-format
+msgid "bad ls-tree format: element '%s' does not end in ')'"
+msgstr "無效的 ls-tree 格式:「%s」元素的結尾不是「)」"
+
+#: builtin/ls-tree.c:109
+#, c-format
+msgid "bad ls-tree format: %%%.*s"
+msgstr "無效的 ls-tree 格式:%%%.*s"
+
+#: builtin/ls-tree.c:336
 msgid "only show trees"
 msgstr "只顯示樹"
 
-#: builtin/ls-tree.c:130
+#: builtin/ls-tree.c:338
 msgid "recurse into subtrees"
 msgstr "遞迴到子樹"
 
-#: builtin/ls-tree.c:132
+#: builtin/ls-tree.c:340
 msgid "show trees when recursing"
 msgstr "當遞迴時顯示樹"
 
-#: builtin/ls-tree.c:135
+#: builtin/ls-tree.c:343
 msgid "terminate entries with NUL byte"
 msgstr "條目以 NUL 字元終止"
 
-#: builtin/ls-tree.c:136
+#: builtin/ls-tree.c:344
 msgid "include object size"
 msgstr "包括物件大小"
 
-#: builtin/ls-tree.c:138 builtin/ls-tree.c:140
+#: builtin/ls-tree.c:346 builtin/ls-tree.c:348
 msgid "list only filenames"
 msgstr "只列出檔案名"
 
-#: builtin/ls-tree.c:143
+#: builtin/ls-tree.c:350
+msgid "list only objects"
+msgstr "只列出物件"
+
+#: builtin/ls-tree.c:353
 msgid "use full path names"
 msgstr "使用檔案的全路徑"
 
-#: builtin/ls-tree.c:145
+#: builtin/ls-tree.c:355
 msgid "list entire tree; not just current directory (implies --full-name)"
 msgstr "列出整個樹;不僅僅目前目錄(隱含 --full-name)"
 
+#: builtin/ls-tree.c:391
+msgid "--format can't be combined with other format-altering options"
+msgstr "--format 不能與其他修改格式的選項結合使用"
+
 #. TRANSLATORS: keep <> in "<" mail ">" info.
 #: builtin/mailinfo.c:14
 msgid "git mailinfo [<options>] <msg> <patch> < mail >info"
@@ -17357,7 +17853,11 @@ msgstr "當找到可列印 CR 字元時所要採取的行為"
 msgid "use headers in message's body"
 msgstr "在訊息內文中使用標頭"
 
-#: builtin/mailsplit.c:239
+#: builtin/mailsplit.c:227
+msgid "reading patches from stdin/tty..."
+msgstr "正在從標準輸入或 tty 讀取修補檔內容⋯⋯"
+
+#: builtin/mailsplit.c:242
 #, c-format
 msgid "empty mbox: '%s'"
 msgstr "空的 mbox:'%s'"
@@ -17382,23 +17882,23 @@ msgstr "git merge-base --is-ancestor <提交> <提交>"
 msgid "git merge-base --fork-point <ref> [<commit>]"
 msgstr "git merge-base --fork-point <引用> [<提交>]"
 
-#: builtin/merge-base.c:143
+#: builtin/merge-base.c:144
 msgid "output all common ancestors"
 msgstr "輸出所有共同的祖先"
 
-#: builtin/merge-base.c:145
+#: builtin/merge-base.c:146
 msgid "find ancestors for a single n-way merge"
 msgstr "尋找一個多路合併的祖先提交"
 
-#: builtin/merge-base.c:147
+#: builtin/merge-base.c:148
 msgid "list revs not reachable from others"
 msgstr "顯示不能被其他存取到的版本"
 
-#: builtin/merge-base.c:149
+#: builtin/merge-base.c:150
 msgid "is the first one ancestor of the other?"
 msgstr "第一個是其他的祖先提交嗎?"
 
-#: builtin/merge-base.c:151
+#: builtin/merge-base.c:152
 msgid "find where <commit> forked from reflog of <ref>"
 msgstr "根據 <引用> 的引用日誌尋找 <提交> 的衍生處"
 
@@ -17545,7 +18045,7 @@ msgid "verify that the named commit has a valid GPG signature"
 msgstr "驗證指定的提交是否包含一個有效的 GPG 簽名"
 
 #: builtin/merge.c:280 builtin/notes.c:785 builtin/pull.c:172
-#: builtin/rebase.c:1117 builtin/revert.c:114
+#: builtin/rebase.c:1145 builtin/revert.c:114
 msgid "strategy"
 msgstr "策略"
 
@@ -17677,72 +18177,72 @@ msgid ""
 "the commit.\n"
 msgstr "以 '%c' 開始的行將被忽略,而空的提交說明將終止提交。\n"
 
-#: builtin/merge.c:894
+#: builtin/merge.c:900
 msgid "Empty commit message."
 msgstr "空提交說明。"
 
-#: builtin/merge.c:909
+#: builtin/merge.c:915
 #, c-format
 msgid "Wonderful.\n"
 msgstr "太棒了。\n"
 
-#: builtin/merge.c:970
+#: builtin/merge.c:976
 #, c-format
 msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
 msgstr "自動合併失敗,修正衝突然後提交修正的結果。\n"
 
-#: builtin/merge.c:1009
+#: builtin/merge.c:1015
 msgid "No current branch."
 msgstr "沒有目前分支。"
 
-#: builtin/merge.c:1011
+#: builtin/merge.c:1017
 msgid "No remote for the current branch."
 msgstr "目前分支沒有對應的遠端版本庫。"
 
-#: builtin/merge.c:1013
+#: builtin/merge.c:1019
 msgid "No default upstream defined for the current branch."
 msgstr "目前分支沒有定義預設的上游分支。"
 
-#: builtin/merge.c:1018
+#: builtin/merge.c:1024
 #, c-format
 msgid "No remote-tracking branch for %s from %s"
 msgstr "對於 %s 沒有來自 %s 的遠端追蹤分支"
 
-#: builtin/merge.c:1075
+#: builtin/merge.c:1081
 #, c-format
 msgid "Bad value '%s' in environment '%s'"
 msgstr "環境 '%2$s' 中存在壞的取值 '%1$s'"
 
-#: builtin/merge.c:1177
+#: builtin/merge.c:1183
 #, c-format
 msgid "not something we can merge in %s: %s"
 msgstr "不能在 %s 中合併:%s"
 
-#: builtin/merge.c:1211
+#: builtin/merge.c:1217
 msgid "not something we can merge"
 msgstr "不能合併"
 
-#: builtin/merge.c:1324
+#: builtin/merge.c:1330
 msgid "--abort expects no arguments"
 msgstr "--abort 不帶參數"
 
-#: builtin/merge.c:1328
+#: builtin/merge.c:1334
 msgid "There is no merge to abort (MERGE_HEAD missing)."
 msgstr "沒有要終止的合併(MERGE_HEAD 遺失)。"
 
-#: builtin/merge.c:1346
+#: builtin/merge.c:1352
 msgid "--quit expects no arguments"
 msgstr "--quit 不帶參數"
 
-#: builtin/merge.c:1359
+#: builtin/merge.c:1365
 msgid "--continue expects no arguments"
 msgstr "--continue 不帶參數"
 
-#: builtin/merge.c:1363
+#: builtin/merge.c:1369
 msgid "There is no merge in progress (MERGE_HEAD missing)."
 msgstr "沒有進行中的合併(MERGE_HEAD 遺失)。"
 
-#: builtin/merge.c:1379
+#: builtin/merge.c:1385
 msgid ""
 "You have not concluded your merge (MERGE_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17750,7 +18250,7 @@ msgstr ""
 "您尚未結束您的合併(存在 MERGE_HEAD)。\n"
 "請在合併前先提交您的修改。"
 
-#: builtin/merge.c:1386
+#: builtin/merge.c:1392
 msgid ""
 "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
 "Please, commit your changes before you merge."
@@ -17758,84 +18258,80 @@ msgstr ""
 "您尚未結束您的揀選(存在 CHERRY_PICK_HEAD)。\n"
 "請在合併前先提交您的修改。"
 
-#: builtin/merge.c:1389
+#: builtin/merge.c:1395
 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
 msgstr "您尚未結束您的揀選(存在 CHERRY_PICK_HEAD)。"
 
-#: builtin/merge.c:1421
+#: builtin/merge.c:1427
 msgid "No commit specified and merge.defaultToUpstream not set."
 msgstr "未指定提交並且 merge.defaultToUpstream 未設定。"
 
-#: builtin/merge.c:1438
+#: builtin/merge.c:1444
 msgid "Squash commit into empty head not supported yet"
 msgstr "尚不支援到空分支的壓縮提交"
 
-#: builtin/merge.c:1440
+#: builtin/merge.c:1446
 msgid "Non-fast-forward commit does not make sense into an empty head"
 msgstr "到空分支的非快轉式提交沒有意義"
 
-#: builtin/merge.c:1445
+#: builtin/merge.c:1451
 #, c-format
 msgid "%s - not something we can merge"
 msgstr "%s - 不能被合併"
 
-#: builtin/merge.c:1447
+#: builtin/merge.c:1453
 msgid "Can merge only exactly one commit into empty head"
 msgstr "只能將一個提交合並到空分支上"
 
-#: builtin/merge.c:1534
+#: builtin/merge.c:1540
 msgid "refusing to merge unrelated histories"
 msgstr "拒絕合併無關的歷史"
 
-#: builtin/merge.c:1553
+#: builtin/merge.c:1559
 #, c-format
 msgid "Updating %s..%s\n"
 msgstr "更新 %s..%s\n"
 
-#: builtin/merge.c:1601
+#: builtin/merge.c:1606
 #, c-format
 msgid "Trying really trivial in-index merge...\n"
 msgstr "嘗試非常小的索引內合併...\n"
 
-#: builtin/merge.c:1608
+#: builtin/merge.c:1613
 #, c-format
 msgid "Nope.\n"
 msgstr "無。\n"
 
-#: builtin/merge.c:1667 builtin/merge.c:1733
+#: builtin/merge.c:1671 builtin/merge.c:1737
 #, c-format
 msgid "Rewinding the tree to pristine...\n"
 msgstr "將樹回滾至原始狀態...\n"
 
-#: builtin/merge.c:1671
+#: builtin/merge.c:1675
 #, c-format
 msgid "Trying merge strategy %s...\n"
 msgstr "嘗試合併策略 %s...\n"
 
-#: builtin/merge.c:1723
+#: builtin/merge.c:1727
 #, c-format
 msgid "No merge strategy handled the merge.\n"
 msgstr "沒有合併策略處理此合併。\n"
 
-#: builtin/merge.c:1725
+#: builtin/merge.c:1729
 #, c-format
 msgid "Merge with strategy %s failed.\n"
 msgstr "使用策略 %s 合併失敗。\n"
 
-#: builtin/merge.c:1735
+#: builtin/merge.c:1739
 #, c-format
 msgid "Using the %s strategy to prepare resolving by hand.\n"
 msgstr "使用 %s 策略,準備自行解決。\n"
 
-#: builtin/merge.c:1749
+#: builtin/merge.c:1753
 #, c-format
 msgid "Automatic merge went well; stopped before committing as requested\n"
 msgstr "自動合併進展順利,按要求在提交前停止\n"
 
-#: builtin/mktag.c:10
-msgid "git mktag"
-msgstr "git mktag"
-
 #: builtin/mktag.c:27
 #, c-format
 msgid "warning: tag input does not pass fsck: %s"
@@ -17861,22 +18357,18 @@ msgstr "無法讀取有標籤的物件「%s」"
 msgid "object '%s' tagged as '%s', but is a '%s' type"
 msgstr "「%s」已標為「%s」,但卻是「%s」類型"
 
-#: builtin/mktag.c:98
+#: builtin/mktag.c:97
 msgid "tag on stdin did not pass our strict fsck check"
 msgstr "stdin 上的標籤未通過我們的嚴格 fsck 檢查"
 
-#: builtin/mktag.c:101
+#: builtin/mktag.c:100
 msgid "tag on stdin did not refer to a valid object"
 msgstr "標準輸入上的標籤指向的不是有效物件"
 
-#: builtin/mktag.c:104 builtin/tag.c:242
+#: builtin/mktag.c:103 builtin/tag.c:243
 msgid "unable to write tag file"
 msgstr "無法寫標籤檔案"
 
-#: builtin/mktree.c:66
-msgid "git mktree [-z] [--missing] [--batch]"
-msgstr "git mktree [-z] [--missing] [--batch]"
-
 #: builtin/mktree.c:154
 msgid "input is NUL terminated"
 msgstr "輸入以 NUL 字元終止"
@@ -18030,52 +18522,56 @@ msgstr "%s,來源=%s,目的地=%s"
 msgid "Renaming %s to %s\n"
 msgstr "重新命名 %s 至 %s\n"
 
-#: builtin/mv.c:314 builtin/remote.c:790 builtin/repack.c:857
+#: builtin/mv.c:314 builtin/remote.c:812 builtin/repack.c:861
 #, c-format
 msgid "renaming '%s' failed"
 msgstr "重新命名 '%s' 失敗"
 
-#: builtin/name-rev.c:474
+#: builtin/name-rev.c:524
 msgid "git name-rev [<options>] <commit>..."
 msgstr "git name-rev [<選項>] <提交>..."
 
-#: builtin/name-rev.c:475
+#: builtin/name-rev.c:525
 msgid "git name-rev [<options>] --all"
 msgstr "git name-rev [<選項>] --all"
 
-#: builtin/name-rev.c:476
-msgid "git name-rev [<options>] --stdin"
-msgstr "git name-rev [<選項>] --stdin"
+#: builtin/name-rev.c:526
+msgid "git name-rev [<options>] --annotate-stdin"
+msgstr "git name-rev [<options>] --annotate-stdin"
 
-#: builtin/name-rev.c:533
+#: builtin/name-rev.c:583
 msgid "print only ref-based names (no object names)"
 msgstr "只輸出基於引用的名稱 (沒有物件名稱)"
 
-#: builtin/name-rev.c:534
+#: builtin/name-rev.c:584
 msgid "only use tags to name the commits"
 msgstr "只使用標籤來命名提交"
 
-#: builtin/name-rev.c:536
+#: builtin/name-rev.c:586
 msgid "only use refs matching <pattern>"
 msgstr "只使用和 <模式> 相符合的引用"
 
-#: builtin/name-rev.c:538
+#: builtin/name-rev.c:588
 msgid "ignore refs matching <pattern>"
 msgstr "忽略和 <模式> 相符合的引用"
 
-#: builtin/name-rev.c:540
+#: builtin/name-rev.c:590
 msgid "list all commits reachable from all refs"
 msgstr "列出可以從所有引用存取的提交"
 
-#: builtin/name-rev.c:541
-msgid "read from stdin"
-msgstr "å¾\9eæ¨\99æº\96輸å\85¥è®\80å\8f\96"
+#: builtin/name-rev.c:591
+msgid "deprecated: use annotate-stdin instead"
+msgstr "å·²å\8f\96代ï¼\9aè«\8bæ\94¹ç\94¨ annotate-stdin"
 
-#: builtin/name-rev.c:542
+#: builtin/name-rev.c:592
+msgid "annotate text from stdin"
+msgstr "註解從標準輸入收到的文字"
+
+#: builtin/name-rev.c:593
 msgid "allow to print `undefined` names (default)"
 msgstr "允許列印 `未定義` 的名稱(預設)"
 
-#: builtin/name-rev.c:548
+#: builtin/name-rev.c:599
 msgid "dereference tags in the input (internal use)"
 msgstr "反向解析輸入中的標籤(內部使用)"
 
@@ -18116,14 +18612,6 @@ msgid ""
 "git notes [--ref <notes-ref>] merge [-v | -q] [-s <strategy>] <notes-ref>"
 msgstr "git notes [--ref <註解引用>] merge [-v | -q] [-s <策略> ] <註解引用>"
 
-#: builtin/notes.c:35
-msgid "git notes merge --commit [-v | -q]"
-msgstr "git notes merge --commit [-v | -q]"
-
-#: builtin/notes.c:36
-msgid "git notes merge --abort [-v | -q]"
-msgstr "git notes merge --abort [-v | -q]"
-
 #: builtin/notes.c:37
 msgid "git notes [--ref <notes-ref>] remove [<object>...]"
 msgstr "git notes [--ref <註解引用>] remove [<物件>...]"
@@ -18184,10 +18672,6 @@ msgstr "git notes remove [<物件>]"
 msgid "git notes prune [<options>]"
 msgstr "git notes prune [<選項>]"
 
-#: builtin/notes.c:92
-msgid "git notes get-ref"
-msgstr "git notes get-ref"
-
 #: builtin/notes.c:97
 msgid "Write/edit the notes for the following object:"
 msgstr "為下面的物件寫/編輯說明:"
@@ -18219,7 +18703,7 @@ msgstr "不能寫註解物件"
 msgid "the note contents have been left in %s"
 msgstr "註解內容被留在 %s 中"
 
-#: builtin/notes.c:240 builtin/tag.c:581
+#: builtin/notes.c:240 builtin/tag.c:582
 #, c-format
 msgid "could not open or read '%s'"
 msgstr "不能開啟或讀取 '%s'"
@@ -18259,13 +18743,6 @@ msgstr "從 '%s' 複製註解到 '%s' 時失敗"
 msgid "refusing to %s notes in %s (outside of refs/notes/)"
 msgstr "拒絕向 %2$s(在 refs/notes/ 之外)%1$s註解"
 
-#: builtin/notes.c:374 builtin/notes.c:429 builtin/notes.c:507
-#: builtin/notes.c:519 builtin/notes.c:596 builtin/notes.c:663
-#: builtin/notes.c:813 builtin/notes.c:965 builtin/notes.c:987
-#: builtin/prune-packed.c:25 builtin/receive-pack.c:2487 builtin/tag.c:591
-msgid "too many arguments"
-msgstr "太多參數"
-
 #: builtin/notes.c:387 builtin/notes.c:676
 #, c-format
 msgid "no note found for object %s."
@@ -18445,7 +18922,7 @@ msgstr ""
 "自動合併說明失敗。修改 %s 中的衝突並且使用指令 'git notes merge --commit' 提"
 "交結果,或者使用指令 'git notes merge --abort' 終止合併。\n"
 
-#: builtin/notes.c:899 builtin/tag.c:594
+#: builtin/notes.c:899 builtin/tag.c:595
 #, c-format
 msgid "Failed to resolve '%s' as a valid ref."
 msgstr "無法解析 '%s' 為一個有效引用。"
@@ -18463,13 +18940,13 @@ msgstr "嘗試刪除不存在的註解不是一個錯誤"
 msgid "read object names from the standard input"
 msgstr "從標準輸入讀取物件名稱"
 
-#: builtin/notes.c:956 builtin/prune.c:144 builtin/worktree.c:147
+#: builtin/notes.c:956 builtin/prune.c:144 builtin/worktree.c:148
 msgid "do not remove, show only"
 msgstr "不刪除,只顯示"
 
 #: builtin/notes.c:957
 msgid "report pruned notes"
-msgstr "å ±å\91\8aæ¸\85除的註解"
+msgstr "å\9b\9eå ±å\89ª除的註解"
 
 #: builtin/notes.c:1000
 msgid "notes-ref"
@@ -18479,7 +18956,7 @@ msgstr "註解引用"
 msgid "use notes from <notes-ref>"
 msgstr "從 <註解引用> 使用註解"
 
-#: builtin/notes.c:1036 builtin/stash.c:1818
+#: builtin/notes.c:1036 builtin/stash.c:1802
 #, c-format
 msgid "unknown subcommand: %s"
 msgstr "未知子指令:%s"
@@ -18494,7 +18971,7 @@ msgid ""
 "git pack-objects [<options>...] <base-name> [< <ref-list> | < <object-list>]"
 msgstr "git pack-objects [<選項>...] <前綴名稱> [< <引用列表> | < <物件列表>]"
 
-#: builtin/pack-objects.c:572
+#: builtin/pack-objects.c:570
 #, c-format
 msgid ""
 "write_reuse_object: could not locate %s, expected at offset %<PRIuMAX> in "
@@ -18502,110 +18979,110 @@ msgid ""
 msgstr ""
 "write_reuse_object:無法定位 %1$s,預期在 %3$s 包中的 %2$<PRIuMAX> 偏移量"
 
-#: builtin/pack-objects.c:580
+#: builtin/pack-objects.c:578
 #, c-format
 msgid "bad packed object CRC for %s"
 msgstr "%s 錯的包物件 CRC"
 
-#: builtin/pack-objects.c:591
+#: builtin/pack-objects.c:589
 #, c-format
 msgid "corrupt packed object for %s"
 msgstr "%s 損壞的包物件"
 
-#: builtin/pack-objects.c:722
+#: builtin/pack-objects.c:720
 #, c-format
 msgid "recursive delta detected for object %s"
 msgstr "發現物件 %s 遞迴 delta"
 
-#: builtin/pack-objects.c:941
+#: builtin/pack-objects.c:939
 #, c-format
 msgid "ordered %u objects, expected %<PRIu32>"
 msgstr "排序了 %u 個物件,預期 %<PRIu32> 個"
 
-#: builtin/pack-objects.c:1036
+#: builtin/pack-objects.c:1034
 #, c-format
 msgid "expected object at offset %<PRIuMAX> in pack %s"
 msgstr "預期 %2$s 包中的偏移 %1$<PRIuMAX> 有物件"
 
-#: builtin/pack-objects.c:1160
+#: builtin/pack-objects.c:1158
 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit"
 msgstr "停用 bitmap 寫入,因為 pack.packSizeLimit 設定使得包被切分為多個"
 
-#: builtin/pack-objects.c:1173
+#: builtin/pack-objects.c:1171
 msgid "Writing objects"
 msgstr "寫入物件中"
 
-#: builtin/pack-objects.c:1235 builtin/update-index.c:90
+#: builtin/pack-objects.c:1243 builtin/update-index.c:90
 #, c-format
 msgid "failed to stat %s"
 msgstr "對 %s 呼叫 stat 失敗"
 
-#: builtin/pack-objects.c:1268
+#: builtin/pack-objects.c:1276
 msgid "failed to write bitmap index"
 msgstr "無法寫入位圖索引"
 
-#: builtin/pack-objects.c:1294
+#: builtin/pack-objects.c:1302
 #, c-format
 msgid "wrote %<PRIu32> objects while expecting %<PRIu32>"
 msgstr "寫入 %<PRIu32> 個物件而預期 %<PRIu32> 個"
 
-#: builtin/pack-objects.c:1536
+#: builtin/pack-objects.c:1544
 msgid "disabling bitmap writing, as some objects are not being packed"
 msgstr "停用 bitmap 寫入,因為一些物件將不會被打包"
 
-#: builtin/pack-objects.c:1984
+#: builtin/pack-objects.c:1992
 #, c-format
 msgid "delta base offset overflow in pack for %s"
 msgstr "%s 壓縮中 delta 基準位移越界"
 
-#: builtin/pack-objects.c:1993
+#: builtin/pack-objects.c:2001
 #, c-format
 msgid "delta base offset out of bound for %s"
 msgstr "%s 的 delta 基準位移越界"
 
-#: builtin/pack-objects.c:2274
+#: builtin/pack-objects.c:2282
 msgid "Counting objects"
 msgstr "物件計數中"
 
-#: builtin/pack-objects.c:2439
+#: builtin/pack-objects.c:2447
 #, c-format
 msgid "unable to parse object header of %s"
 msgstr "無法解析物件 %s 標頭訊息"
 
-#: builtin/pack-objects.c:2509 builtin/pack-objects.c:2525
-#: builtin/pack-objects.c:2535
+#: builtin/pack-objects.c:2517 builtin/pack-objects.c:2533
+#: builtin/pack-objects.c:2543
 #, c-format
 msgid "object %s cannot be read"
 msgstr "物件 %s 無法讀取"
 
-#: builtin/pack-objects.c:2512 builtin/pack-objects.c:2539
+#: builtin/pack-objects.c:2520 builtin/pack-objects.c:2547
 #, c-format
 msgid "object %s inconsistent object length (%<PRIuMAX> vs %<PRIuMAX>)"
 msgstr "物件 %s 不一致的物件長度(%<PRIuMAX> vs %<PRIuMAX>)"
 
-#: builtin/pack-objects.c:2549
+#: builtin/pack-objects.c:2557
 msgid "suboptimal pack - out of memory"
 msgstr "次優(suboptimal)打包 - 記憶體不足"
 
-#: builtin/pack-objects.c:2864
+#: builtin/pack-objects.c:2872
 #, c-format
 msgid "Delta compression using up to %d threads"
 msgstr "使用 %d 個執行緒進行壓縮"
 
-#: builtin/pack-objects.c:3003
+#: builtin/pack-objects.c:3011
 #, c-format
 msgid "unable to pack objects reachable from tag %s"
 msgstr "無法為標籤 %s 壓縮物件"
 
-#: builtin/pack-objects.c:3089
+#: builtin/pack-objects.c:3097
 msgid "Compressing objects"
 msgstr "壓縮物件中"
 
-#: builtin/pack-objects.c:3095
+#: builtin/pack-objects.c:3103
 msgid "inconsistency with delta count"
 msgstr "不一致的差異計數"
 
-#: builtin/pack-objects.c:3174
+#: builtin/pack-objects.c:3182
 #, c-format
 msgid ""
 "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-"
@@ -18614,24 +19091,24 @@ msgstr ""
 "uploadpack.blobpackfileuri 的值格式必須為 '<object-hash> <pack-hash> "
 "<uri>' (收到 '%s')"
 
-#: builtin/pack-objects.c:3177
+#: builtin/pack-objects.c:3185
 #, c-format
 msgid ""
 "object already configured in another uploadpack.blobpackfileuri (got '%s')"
 msgstr "物件已經在其他 uploadpack.blobpackfileuri 設定過 (收到 '%s')"
 
-#: builtin/pack-objects.c:3212
+#: builtin/pack-objects.c:3220
 #, c-format
 msgid "could not get type of object %s in pack %s"
 msgstr "無法取得 %2$s 包中 %1$s 物件的類型"
 
-#: builtin/pack-objects.c:3340 builtin/pack-objects.c:3351
-#: builtin/pack-objects.c:3365
+#: builtin/pack-objects.c:3348 builtin/pack-objects.c:3359
+#: builtin/pack-objects.c:3373
 #, c-format
 msgid "could not find pack '%s'"
 msgstr "找不到「%s」包"
 
-#: builtin/pack-objects.c:3408
+#: builtin/pack-objects.c:3416
 #, c-format
 msgid ""
 "expected edge object ID, got garbage:\n"
@@ -18640,7 +19117,7 @@ msgstr ""
 "預期邊界物件(edge object)ID,卻得到垃圾資料:\n"
 " %s"
 
-#: builtin/pack-objects.c:3414
+#: builtin/pack-objects.c:3422
 #, c-format
 msgid ""
 "expected object ID, got garbage:\n"
@@ -18649,242 +19126,238 @@ msgstr ""
 "預期物件 ID,卻得到垃圾資料:\n"
 " %s"
 
-#: builtin/pack-objects.c:3507
-msgid "invalid value for --missing"
-msgstr "選項 --missing 的值無效"
-
-#: builtin/pack-objects.c:3532 builtin/pack-objects.c:3619
+#: builtin/pack-objects.c:3540 builtin/pack-objects.c:3627
 msgid "cannot open pack index"
 msgstr "無法開啟包檔案索引"
 
-#: builtin/pack-objects.c:3541
+#: builtin/pack-objects.c:3549
 #, c-format
 msgid "loose object at %s could not be examined"
 msgstr "無法檢查 %s 處的鬆散物件"
 
-#: builtin/pack-objects.c:3627
+#: builtin/pack-objects.c:3635
 msgid "unable to force loose object"
 msgstr "無法強制鬆散物件"
 
-#: builtin/pack-objects.c:3757
+#: builtin/pack-objects.c:3763
 #, c-format
 msgid "not a rev '%s'"
 msgstr "不是一個版本 '%s'"
 
-#: builtin/pack-objects.c:3760 builtin/rev-parse.c:1061
+#: builtin/pack-objects.c:3766 builtin/rev-parse.c:1061
 #, c-format
 msgid "bad revision '%s'"
 msgstr "壞的版本 '%s'"
 
-#: builtin/pack-objects.c:3788
+#: builtin/pack-objects.c:3794
 msgid "unable to add recent objects"
 msgstr "無法新增最近的物件"
 
-#: builtin/pack-objects.c:3841
+#: builtin/pack-objects.c:3847
 #, c-format
 msgid "unsupported index version %s"
 msgstr "不支援的索引版本 %s"
 
-#: builtin/pack-objects.c:3845
+#: builtin/pack-objects.c:3851
 #, c-format
 msgid "bad index version '%s'"
 msgstr "壞的索引版本 '%s'"
 
-#: builtin/pack-objects.c:3884
+#: builtin/pack-objects.c:3907
 msgid "<version>[,<offset>]"
 msgstr "<版本>[,<位移>]"
 
-#: builtin/pack-objects.c:3885
+#: builtin/pack-objects.c:3908
 msgid "write the pack index file in the specified idx format version"
 msgstr "用指定的 idx 格式版本來寫包索引檔案"
 
-#: builtin/pack-objects.c:3888
+#: builtin/pack-objects.c:3911
 msgid "maximum size of each output pack file"
 msgstr "每個輸出包的最大尺寸"
 
-#: builtin/pack-objects.c:3890
+#: builtin/pack-objects.c:3913
 msgid "ignore borrowed objects from alternate object store"
 msgstr "忽略從備用物件儲存裡借用物件"
 
-#: builtin/pack-objects.c:3892
+#: builtin/pack-objects.c:3915
 msgid "ignore packed objects"
 msgstr "忽略包物件"
 
-#: builtin/pack-objects.c:3894
+#: builtin/pack-objects.c:3917
 msgid "limit pack window by objects"
 msgstr "限制打包視窗的物件數"
 
-#: builtin/pack-objects.c:3896
+#: builtin/pack-objects.c:3919
 msgid "limit pack window by memory in addition to object limit"
 msgstr "除物件數量限制外設定打包視窗的記憶體限制"
 
-#: builtin/pack-objects.c:3898
+#: builtin/pack-objects.c:3921
 msgid "maximum length of delta chain allowed in the resulting pack"
 msgstr "打包允許的 delta 鏈的最大長度"
 
-#: builtin/pack-objects.c:3900
+#: builtin/pack-objects.c:3923
 msgid "reuse existing deltas"
 msgstr "重用已存在的 deltas"
 
-#: builtin/pack-objects.c:3902
+#: builtin/pack-objects.c:3925
 msgid "reuse existing objects"
 msgstr "重用已存在的物件"
 
-#: builtin/pack-objects.c:3904
+#: builtin/pack-objects.c:3927
 msgid "use OFS_DELTA objects"
 msgstr "使用 OFS_DELTA 物件"
 
-#: builtin/pack-objects.c:3906
+#: builtin/pack-objects.c:3929
 msgid "use threads when searching for best delta matches"
 msgstr "使用執行緒查詢最佳 delta 符合"
 
-#: builtin/pack-objects.c:3908
+#: builtin/pack-objects.c:3931
 msgid "do not create an empty pack output"
 msgstr "不建立空的包輸出"
 
-#: builtin/pack-objects.c:3910
+#: builtin/pack-objects.c:3933
 msgid "read revision arguments from standard input"
 msgstr "從標準輸入讀取版本號參數"
 
-#: builtin/pack-objects.c:3912
+#: builtin/pack-objects.c:3935
 msgid "limit the objects to those that are not yet packed"
 msgstr "限制那些尚未打包的物件"
 
-#: builtin/pack-objects.c:3915
+#: builtin/pack-objects.c:3938
 msgid "include objects reachable from any reference"
 msgstr "包括可以從任何引用存取到的物件"
 
-#: builtin/pack-objects.c:3918
+#: builtin/pack-objects.c:3941
 msgid "include objects referred by reflog entries"
 msgstr "包括被引用日誌引用到的物件"
 
-#: builtin/pack-objects.c:3921
+#: builtin/pack-objects.c:3944
 msgid "include objects referred to by the index"
 msgstr "包括被索引引用到的物件"
 
-#: builtin/pack-objects.c:3924
+#: builtin/pack-objects.c:3947
 msgid "read packs from stdin"
 msgstr "從標準輸入中讀取包"
 
-#: builtin/pack-objects.c:3926
+#: builtin/pack-objects.c:3949
 msgid "output pack to stdout"
 msgstr "輸出包到標準輸出"
 
-#: builtin/pack-objects.c:3928
+#: builtin/pack-objects.c:3951
 msgid "include tag objects that refer to objects to be packed"
 msgstr "包括那些引用了待打包物件的標籤物件"
 
-#: builtin/pack-objects.c:3930
+#: builtin/pack-objects.c:3953
 msgid "keep unreachable objects"
 msgstr "維持無法取得的物件"
 
-#: builtin/pack-objects.c:3932
+#: builtin/pack-objects.c:3955
 msgid "pack loose unreachable objects"
 msgstr "打包鬆散的無法取得物件"
 
-#: builtin/pack-objects.c:3934
+#: builtin/pack-objects.c:3957
 msgid "unpack unreachable objects newer than <time>"
 msgstr "將比提供 <時間> 新的無法存取的物件解包"
 
-#: builtin/pack-objects.c:3937
+#: builtin/pack-objects.c:3960
 msgid "use the sparse reachability algorithm"
 msgstr "使用稀疏可以取得性演算法"
 
-#: builtin/pack-objects.c:3939
+#: builtin/pack-objects.c:3962
 msgid "create thin packs"
 msgstr "建立精簡包"
 
-#: builtin/pack-objects.c:3941
+#: builtin/pack-objects.c:3964
 msgid "create packs suitable for shallow fetches"
 msgstr "建立適合淺複製版本庫取得的包"
 
-#: builtin/pack-objects.c:3943
+#: builtin/pack-objects.c:3966
 msgid "ignore packs that have companion .keep file"
 msgstr "忽略配有 .keep 檔案的包"
 
-#: builtin/pack-objects.c:3945
+#: builtin/pack-objects.c:3968
 msgid "ignore this pack"
 msgstr "忽略該 pack"
 
-#: builtin/pack-objects.c:3947
+#: builtin/pack-objects.c:3970
 msgid "pack compression level"
 msgstr "打包壓縮級別"
 
-#: builtin/pack-objects.c:3949
+#: builtin/pack-objects.c:3972
 msgid "do not hide commits by grafts"
 msgstr "顯示被移植隱藏的提交"
 
-#: builtin/pack-objects.c:3951
+#: builtin/pack-objects.c:3974
 msgid "use a bitmap index if available to speed up counting objects"
 msgstr "使用 bitmap 索引(如果有的話)以提高物件計數時的速度"
 
-#: builtin/pack-objects.c:3953
+#: builtin/pack-objects.c:3976
 msgid "write a bitmap index together with the pack index"
 msgstr "在建立包索引的同時建立 bitmap 索引"
 
-#: builtin/pack-objects.c:3957
+#: builtin/pack-objects.c:3980
 msgid "write a bitmap index if possible"
 msgstr "如果可能,寫 bitmap 索引"
 
-#: builtin/pack-objects.c:3961
+#: builtin/pack-objects.c:3984
 msgid "handling for missing objects"
 msgstr "處理遺失的物件"
 
-#: builtin/pack-objects.c:3964
+#: builtin/pack-objects.c:3987
 msgid "do not pack objects in promisor packfiles"
 msgstr "不要打包 promisor packfile 中的物件"
 
-#: builtin/pack-objects.c:3966
+#: builtin/pack-objects.c:3989
 msgid "respect islands during delta compression"
 msgstr "在差異壓縮時尊重資料島"
 
-#: builtin/pack-objects.c:3968
+#: builtin/pack-objects.c:3991
 msgid "protocol"
 msgstr "通訊協定"
 
-#: builtin/pack-objects.c:3969
+#: builtin/pack-objects.c:3992
 msgid "exclude any configured uploadpack.blobpackfileuri with this protocol"
 msgstr "排除任何設定過,使用此通訊協定的 uploadpack.blobpackfileuri"
 
-#: builtin/pack-objects.c:4002
+#: builtin/pack-objects.c:4027
 #, c-format
 msgid "delta chain depth %d is too deep, forcing %d"
 msgstr "增量鏈深度 %d 太深了,強制為 %d"
 
-#: builtin/pack-objects.c:4007
+#: builtin/pack-objects.c:4032
 #, c-format
 msgid "pack.deltaCacheLimit is too high, forcing %d"
 msgstr "設定 pack.deltaCacheLimit 太高了,強制為 %d"
 
-#: builtin/pack-objects.c:4063
+#: builtin/pack-objects.c:4088
 msgid "--max-pack-size cannot be used to build a pack for transfer"
 msgstr "不能使用 --max-pack-size 來組建傳輸用的包檔案"
 
-#: builtin/pack-objects.c:4065
+#: builtin/pack-objects.c:4090
 msgid "minimum pack size limit is 1 MiB"
 msgstr "最小的包檔案大小是 1 MiB"
 
-#: builtin/pack-objects.c:4070
+#: builtin/pack-objects.c:4095
 msgid "--thin cannot be used to build an indexable pack"
 msgstr "--thin 不能用於建立一個可索引包"
 
-#: builtin/pack-objects.c:4079
+#: builtin/pack-objects.c:4104
 msgid "cannot use --filter without --stdout"
 msgstr "不能在沒有 --stdout 的情況下使用 --filter"
 
-#: builtin/pack-objects.c:4081
+#: builtin/pack-objects.c:4106
 msgid "cannot use --filter with --stdin-packs"
 msgstr "無法將 --filter 及 --stdin-packs 結合使用"
 
-#: builtin/pack-objects.c:4085
+#: builtin/pack-objects.c:4110
 msgid "cannot use internal rev list with --stdin-packs"
 msgstr "無法將內部版本清單與 --stdin-packs 結合使用"
 
-#: builtin/pack-objects.c:4144
+#: builtin/pack-objects.c:4169
 msgid "Enumerating objects"
 msgstr "枚舉物件"
 
-#: builtin/pack-objects.c:4180
+#: builtin/pack-objects.c:4210
 #, c-format
 msgid ""
 "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-"
@@ -18917,11 +19390,7 @@ msgstr "打包一切"
 
 #: builtin/pack-refs.c:17
 msgid "prune loose refs (default)"
-msgstr "清除鬆散的引用(預設)"
-
-#: builtin/prune-packed.c:6
-msgid "git prune-packed [-n | --dry-run] [-q | --quiet]"
-msgstr "git prune-packed [-n | --dry-run] [-q | --quiet]"
+msgstr "剪除鬆散引用(預設)"
 
 #: builtin/prune.c:14
 msgid "git prune [-n] [-v] [--progress] [--expire <time>] [--] [<head>...]"
@@ -18929,7 +19398,7 @@ msgstr "git prune [-n] [-v] [--progress] [--expire <時間>] [--] [<head>...]"
 
 #: builtin/prune.c:145
 msgid "report pruned objects"
-msgstr "å ±å\91\8aæ¸\85除的物件"
+msgstr "å\9b\9eå ±å\89ª除的物件"
 
 #: builtin/prune.c:148
 msgid "expire objects older than <time>"
@@ -18941,12 +19410,7 @@ msgstr "限制遍歷 promisor packfile 以外的物件"
 
 #: builtin/prune.c:163
 msgid "cannot prune in a precious-objects repo"
-msgstr "不能在珍品版本庫中執行清理動作"
-
-#: builtin/pull.c:45 builtin/pull.c:47
-#, c-format
-msgid "Invalid value for %s: %s"
-msgstr "%s 的值無效:%s"
+msgstr "不能在珍品版本庫中執行剪除動作"
 
 #: builtin/pull.c:67
 msgid "git pull [<options>] [<repository> [<refspec>...]]"
@@ -18972,7 +19436,7 @@ msgstr "允許快轉式"
 msgid "control use of pre-merge-commit and commit-msg hooks"
 msgstr "控制 pre-merge-commit 和 commit-msg 掛鉤的使用"
 
-#: builtin/pull.c:171 parse-options.h:340
+#: builtin/pull.c:171 parse-options.h:371
 msgid "automatically stash/stash pop before and after"
 msgstr "在動作前後執行自動儲藏和彈出儲藏"
 
@@ -18988,11 +19452,6 @@ msgstr "強制覆蓋本機分支"
 msgid "number of submodules pulled in parallel"
 msgstr "並行拉取的子模組數量"
 
-#: builtin/pull.c:321
-#, c-format
-msgid "Invalid value for pull.ff: %s"
-msgstr "pull.ff 的取值無效:%s"
-
 #: builtin/pull.c:449
 msgid ""
 "There is no candidate for rebasing against among the refs that you just "
@@ -19020,7 +19479,7 @@ msgstr ""
 "您要求從遠端 '%s' 拉取,但是未指定一個分支。因為這不是目前\n"
 "分支預設的遠端版本庫,您必須在指令列中指定一個分支名。"
 
-#: builtin/pull.c:460 builtin/rebase.c:951
+#: builtin/pull.c:460 builtin/rebase.c:978
 msgid "You are not currently on a branch."
 msgstr "您目前不在一個分支上。"
 
@@ -19037,16 +19496,16 @@ msgid "See git-pull(1) for details."
 msgstr "詳見 git-pull(1)。"
 
 #: builtin/pull.c:467 builtin/pull.c:473 builtin/pull.c:482
-#: builtin/rebase.c:957
+#: builtin/rebase.c:984
 msgid "<remote>"
 msgstr "<遠端>"
 
 #: builtin/pull.c:467 builtin/pull.c:482 builtin/pull.c:487
-#: contrib/scalar/scalar.c:375
+#: contrib/scalar/scalar.c:374
 msgid "<branch>"
 msgstr "<分支>"
 
-#: builtin/pull.c:475 builtin/rebase.c:949
+#: builtin/pull.c:475 builtin/rebase.c:976
 msgid "There is no tracking information for the current branch."
 msgstr "目前分支沒有追蹤訊息。"
 
@@ -19102,19 +19561,19 @@ msgstr ""
 "pull 命令時傳遞 --rebase、--no-rebase 或 --ff-only 覆蓋\n"
 "設定的預設值。\n"
 
-#: builtin/pull.c:1046
+#: builtin/pull.c:1047
 msgid "Updating an unborn branch with changes added to the index."
 msgstr "更新尚未誕生的分支,變更新增至索引。"
 
-#: builtin/pull.c:1050
+#: builtin/pull.c:1051
 msgid "pull with rebase"
 msgstr "重定基底式拉取"
 
-#: builtin/pull.c:1051
+#: builtin/pull.c:1052
 msgid "please commit or stash them."
 msgstr "請提交或儲藏它們。"
 
-#: builtin/pull.c:1076
+#: builtin/pull.c:1077
 #, c-format
 msgid ""
 "fetch updated the current branch head.\n"
@@ -19124,7 +19583,7 @@ msgstr ""
 "fetch 更新了目前的分支。快轉您的工作區\n"
 "至提交 %s。"
 
-#: builtin/pull.c:1082
+#: builtin/pull.c:1083
 #, c-format
 msgid ""
 "Cannot fast-forward your working tree.\n"
@@ -19141,23 +19600,23 @@ msgstr ""
 "$ git reset --hard\n"
 "復原之前的狀態。"
 
-#: builtin/pull.c:1097
+#: builtin/pull.c:1098
 msgid "Cannot merge multiple branches into empty head."
 msgstr "無法將多個分支合併到空分支。"
 
-#: builtin/pull.c:1102
+#: builtin/pull.c:1103
 msgid "Cannot rebase onto multiple branches."
 msgstr "無法重定基底到多個分支。"
 
-#: builtin/pull.c:1104
+#: builtin/pull.c:1105
 msgid "Cannot fast-forward to multiple branches."
 msgstr "無法快轉至多個分支。"
 
-#: builtin/pull.c:1119
+#: builtin/pull.c:1120
 msgid "Need to specify how to reconcile divergent branches."
 msgstr "需要指定如何調和偏離的分支。"
 
-#: builtin/pull.c:1133
+#: builtin/pull.c:1134
 msgid "cannot rebase with locally recorded submodule modifications"
 msgstr "本機子模組中有修改,無法重定基底"
 
@@ -19321,7 +19780,7 @@ msgstr "推送到 %s\n"
 msgid "failed to push some refs to '%s'"
 msgstr "推送一些引用到 '%s' 失敗"
 
-#: builtin/push.c:544 builtin/submodule--helper.c:3259
+#: builtin/push.c:544 builtin/submodule--helper.c:3377
 msgid "repository"
 msgstr "版本庫"
 
@@ -19376,7 +19835,7 @@ msgstr "設定 git pull/status 的上游"
 
 #: builtin/push.c:567
 msgid "prune locally removed refs"
-msgstr "除本機刪除的引用"
+msgstr "除本機刪除的引用"
 
 #: builtin/push.c:569
 msgid "bypass pre-push hook"
@@ -19559,11 +20018,11 @@ msgstr "除錯 unpack-trees"
 msgid "suppress feedback messages"
 msgstr "抑制回饋訊息"
 
-#: builtin/read-tree.c:183
+#: builtin/read-tree.c:190
 msgid "You need to resolve your current index first"
 msgstr "您需要先解決目前索引的衝突"
 
-#: builtin/rebase.c:35
+#: builtin/rebase.c:36
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase> | --keep-base] "
 "[<upstream> [<branch>]]"
@@ -19571,54 +20030,50 @@ msgstr ""
 "git rebase [-i] [options] [--exec <命令>] [--onto <新基礎> | --keep-base] [<"
 "上游> [<分支>]]"
 
-#: builtin/rebase.c:37
+#: builtin/rebase.c:38
 msgid ""
 "git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]"
 msgstr ""
 "git rebase [-i] [選項] [--exec <命令>] [--onto <新基礎>] --root [<分支>]"
 
-#: builtin/rebase.c:39
-msgid "git rebase --continue | --abort | --skip | --edit-todo"
-msgstr "git rebase --continue | --abort | --skip | --edit-todo"
-
-#: builtin/rebase.c:230
+#: builtin/rebase.c:231
 #, c-format
 msgid "could not create temporary %s"
 msgstr "無法建立暫時的 %s"
 
-#: builtin/rebase.c:236
+#: builtin/rebase.c:237
 msgid "could not mark as interactive"
 msgstr "無法標記為互動式"
 
-#: builtin/rebase.c:289
+#: builtin/rebase.c:290
 msgid "could not generate todo list"
 msgstr "無法生成待辦列表"
 
-#: builtin/rebase.c:331
+#: builtin/rebase.c:332
 msgid "a base commit must be provided with --upstream or --onto"
 msgstr "使用 --upstream 或 --onto 必須提供一個基礎提交"
 
-#: builtin/rebase.c:390
+#: builtin/rebase.c:391
 #, c-format
 msgid "%s requires the merge backend"
 msgstr "%s 需要合併後端"
 
-#: builtin/rebase.c:432
+#: builtin/rebase.c:433
 #, c-format
 msgid "could not get 'onto': '%s'"
 msgstr "無法取得 'onto':'%s'"
 
-#: builtin/rebase.c:449
+#: builtin/rebase.c:450
 #, c-format
 msgid "invalid orig-head: '%s'"
 msgstr "無效的原始 head:'%s'"
 
-#: builtin/rebase.c:474
+#: builtin/rebase.c:475
 #, c-format
 msgid "ignoring invalid allow_rerere_autoupdate: '%s'"
 msgstr "忽略無效的 allow_rerere_autoupdate:'%s'"
 
-#: builtin/rebase.c:597
+#: builtin/rebase.c:600
 msgid ""
 "Resolve all conflicts manually, mark them as resolved with\n"
 "\"git add/rm <conflicted_files>\", then run \"git rebase --continue\".\n"
@@ -19631,7 +20086,7 @@ msgstr ""
 "\"git rebase --skip\" 指令略過這個提交。如果想要終止執行並回到\n"
 "\"git rebase\" 執行之前的狀態,執行 \"git rebase --abort\"。"
 
-#: builtin/rebase.c:680
+#: builtin/rebase.c:685
 #, c-format
 msgid ""
 "\n"
@@ -19649,14 +20104,19 @@ msgstr ""
 "\n"
 "因此 git 無法對其重定基底。"
 
-#: builtin/rebase.c:925
+#: builtin/rebase.c:836
+#, c-format
+msgid "could not switch to %s"
+msgstr "無法切換到 %s"
+
+#: builtin/rebase.c:952
 #, c-format
 msgid ""
 "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and \"ask"
 "\"."
 msgstr "無法識別的 '%s' 空類型;有效的數值有 \"drop\"、\"keep\" 跟 \"ask\"。"
 
-#: builtin/rebase.c:943
+#: builtin/rebase.c:970
 #, c-format
 msgid ""
 "%s\n"
@@ -19673,7 +20133,7 @@ msgstr ""
 "    git rebase '<branch>'\n"
 "\n"
 
-#: builtin/rebase.c:959
+#: builtin/rebase.c:986
 #, c-format
 msgid ""
 "If you wish to set tracking information for this branch you can do so with:\n"
@@ -19686,180 +20146,180 @@ msgstr ""
 "    git branch --set-upstream-to=%s/<branch> %s\n"
 "\n"
 
-#: builtin/rebase.c:989
+#: builtin/rebase.c:1016
 msgid "exec commands cannot contain newlines"
 msgstr "exec 指令不能包含換行符號"
 
-#: builtin/rebase.c:993
+#: builtin/rebase.c:1020
 msgid "empty exec command"
 msgstr "空的 exec 指令"
 
-#: builtin/rebase.c:1023
+#: builtin/rebase.c:1051
 msgid "rebase onto given branch instead of upstream"
 msgstr "重定基底到提供的分支而非上游"
 
-#: builtin/rebase.c:1025
+#: builtin/rebase.c:1053
 msgid "use the merge-base of upstream and branch as the current base"
 msgstr "使用上游和分支的合併基礎做為目前基礎"
 
-#: builtin/rebase.c:1027
+#: builtin/rebase.c:1055
 msgid "allow pre-rebase hook to run"
 msgstr "允許執行 pre-rebase 掛鉤"
 
-#: builtin/rebase.c:1029
+#: builtin/rebase.c:1057
 msgid "be quiet. implies --no-stat"
 msgstr "安靜。暗示 --no-stat"
 
-#: builtin/rebase.c:1032
+#: builtin/rebase.c:1060
 msgid "display a diffstat of what changed upstream"
 msgstr "顯示上游變化的差異統計"
 
-#: builtin/rebase.c:1035
+#: builtin/rebase.c:1063
 msgid "do not show diffstat of what changed upstream"
 msgstr "不顯示上游變化的差異統計"
 
-#: builtin/rebase.c:1038
+#: builtin/rebase.c:1066
 msgid "add a Signed-off-by trailer to each commit"
 msgstr "在每個提交結尾加入 Signed-off-by"
 
-#: builtin/rebase.c:1041
+#: builtin/rebase.c:1069
 msgid "make committer date match author date"
 msgstr "使提交日期與製作日期相符合"
 
-#: builtin/rebase.c:1043
+#: builtin/rebase.c:1071
 msgid "ignore author date and use current date"
 msgstr "忽略製作日期而使用日前日期"
 
-#: builtin/rebase.c:1045
+#: builtin/rebase.c:1073
 msgid "synonym of --reset-author-date"
 msgstr "和 --reset-author-date 同義"
 
-#: builtin/rebase.c:1047 builtin/rebase.c:1051
+#: builtin/rebase.c:1075 builtin/rebase.c:1079
 msgid "passed to 'git apply'"
 msgstr "傳遞給 'git apply'"
 
-#: builtin/rebase.c:1049
+#: builtin/rebase.c:1077
 msgid "ignore changes in whitespace"
 msgstr "忽略空白字元中的變更"
 
-#: builtin/rebase.c:1053 builtin/rebase.c:1056
+#: builtin/rebase.c:1081 builtin/rebase.c:1084
 msgid "cherry-pick all commits, even if unchanged"
 msgstr "揀選所有提交,即使未修改"
 
-#: builtin/rebase.c:1058
+#: builtin/rebase.c:1086
 msgid "continue"
 msgstr "繼續"
 
-#: builtin/rebase.c:1061
+#: builtin/rebase.c:1089
 msgid "skip current patch and continue"
 msgstr "略過目前修補檔並繼續"
 
 #  譯者:請維持前導空格
-#: builtin/rebase.c:1063
+#: builtin/rebase.c:1091
 msgid "abort and check out the original branch"
 msgstr "終止並簽出原有分支"
 
-#: builtin/rebase.c:1066
+#: builtin/rebase.c:1094
 msgid "abort but keep HEAD where it is"
 msgstr "終止但保持 HEAD 不變"
 
-#: builtin/rebase.c:1067
+#: builtin/rebase.c:1095
 msgid "edit the todo list during an interactive rebase"
 msgstr "在互動式重定基底中編輯待辦列表"
 
-#: builtin/rebase.c:1070
+#: builtin/rebase.c:1098
 msgid "show the patch file being applied or merged"
 msgstr "顯示正在套用或合併的修補檔案"
 
-#: builtin/rebase.c:1073
+#: builtin/rebase.c:1101
 msgid "use apply strategies to rebase"
 msgstr "使用套用策略進行重定基底"
 
-#: builtin/rebase.c:1077
+#: builtin/rebase.c:1105
 msgid "use merging strategies to rebase"
 msgstr "使用合併策略進行重定基底"
 
-#: builtin/rebase.c:1081
+#: builtin/rebase.c:1109
 msgid "let the user edit the list of commits to rebase"
 msgstr "讓使用者編輯要重定基底的提交列表"
 
-#: builtin/rebase.c:1085
+#: builtin/rebase.c:1113
 msgid "(DEPRECATED) try to recreate merges instead of ignoring them"
 msgstr "(已棄用)嘗試重建合併提交而非忽略它們"
 
-#: builtin/rebase.c:1090
+#: builtin/rebase.c:1118
 msgid "how to handle commits that become empty"
 msgstr "處理空白提交的方式"
 
-#: builtin/rebase.c:1093
+#: builtin/rebase.c:1121
 msgid "keep commits which start empty"
 msgstr "保留開頭是空白的提交"
 
-#: builtin/rebase.c:1097
+#: builtin/rebase.c:1125
 msgid "move commits that begin with squash!/fixup! under -i"
 msgstr "在 -i 互動模式下,移動以 squash!/fixup! 開頭的提交"
 
-#: builtin/rebase.c:1104
+#: builtin/rebase.c:1132
 msgid "add exec lines after each commit of the editable list"
 msgstr "可編輯列表的每一個提交下面增加一行 exec"
 
-#: builtin/rebase.c:1108
+#: builtin/rebase.c:1136
 msgid "allow rebasing commits with empty messages"
 msgstr "允許針對空提交說明的提交重定基底"
 
-#: builtin/rebase.c:1112
+#: builtin/rebase.c:1140
 msgid "try to rebase merges instead of skipping them"
 msgstr "嘗試對合併提交重定基底而不是忽略它們"
 
-#: builtin/rebase.c:1115
+#: builtin/rebase.c:1143
 msgid "use 'merge-base --fork-point' to refine upstream"
 msgstr "使用 'merge-base --fork-point' 來最佳化上游"
 
-#: builtin/rebase.c:1117
+#: builtin/rebase.c:1145
 msgid "use the given merge strategy"
 msgstr "使用提供的合併策略"
 
-#: builtin/rebase.c:1119 builtin/revert.c:115
+#: builtin/rebase.c:1147 builtin/revert.c:115
 msgid "option"
 msgstr "選項"
 
-#: builtin/rebase.c:1120
+#: builtin/rebase.c:1148
 msgid "pass the argument through to the merge strategy"
 msgstr "將參數傳遞給合併策略"
 
-#: builtin/rebase.c:1123
+#: builtin/rebase.c:1151
 msgid "rebase all reachable commits up to the root(s)"
 msgstr "將所有可以取得的提交重定基底到根提交"
 
-#: builtin/rebase.c:1126
+#: builtin/rebase.c:1154
 msgid "automatically re-schedule any `exec` that fails"
 msgstr "自動重新安排任何失敗的 `exec`"
 
-#: builtin/rebase.c:1128
+#: builtin/rebase.c:1156
 msgid "apply all changes, even those already present upstream"
 msgstr "即使已提供上游,仍套用所有變更"
 
-#: builtin/rebase.c:1149
+#: builtin/rebase.c:1177
 msgid "It looks like 'git am' is in progress. Cannot rebase."
 msgstr "看起來 'git am' 正在執行中。無法重定基底。"
 
-#: builtin/rebase.c:1180
+#: builtin/rebase.c:1208
 msgid "--preserve-merges was replaced by --rebase-merges"
 msgstr "--preserve-merges 已經被 --rebase-merges 取代"
 
-#: builtin/rebase.c:1202
+#: builtin/rebase.c:1230
 msgid "No rebase in progress?"
 msgstr "沒有正在進行的重定基底?"
 
-#: builtin/rebase.c:1206
+#: builtin/rebase.c:1234
 msgid "The --edit-todo action can only be used during interactive rebase."
 msgstr "動作 --edit-todo 只能用在互動式重定基底過程中。"
 
-#: builtin/rebase.c:1229 t/helper/test-fast-rebase.c:122
+#: builtin/rebase.c:1257 t/helper/test-fast-rebase.c:122
 msgid "Cannot read HEAD"
 msgstr "不能讀取 HEAD"
 
-#: builtin/rebase.c:1241
+#: builtin/rebase.c:1269
 msgid ""
 "You must edit all merge conflicts and then\n"
 "mark them as resolved using git add"
@@ -19867,16 +20327,16 @@ msgstr ""
 "您必須編輯所有的合併衝突,然後透過 git add\n"
 "指令將它們標記為已解決"
 
-#: builtin/rebase.c:1260
+#: builtin/rebase.c:1287
 msgid "could not discard worktree changes"
 msgstr "無法捨棄工作區變更"
 
-#: builtin/rebase.c:1279
+#: builtin/rebase.c:1308
 #, c-format
 msgid "could not move back to %s"
 msgstr "無法移回 %s"
 
-#: builtin/rebase.c:1325
+#: builtin/rebase.c:1354
 #, c-format
 msgid ""
 "It seems that there is already a %s directory, and\n"
@@ -19895,122 +20355,117 @@ msgstr ""
 "\t%s\n"
 "然後再重新執行。 為避免遺失重要資料,我已經停止目前動作。\n"
 
-#: builtin/rebase.c:1353
+#: builtin/rebase.c:1382
 msgid "switch `C' expects a numerical value"
 msgstr "開關 `C' 期望一個數字值"
 
-#: builtin/rebase.c:1395
+#: builtin/rebase.c:1424
 #, c-format
 msgid "Unknown mode: %s"
 msgstr "未知模式:%s"
 
-#: builtin/rebase.c:1434
+#: builtin/rebase.c:1463
 msgid "--strategy requires --merge or --interactive"
 msgstr "--strategy 需要 --merge 或 --interactive"
 
-#: builtin/rebase.c:1463
+#: builtin/rebase.c:1492
 msgid "apply options and merge options cannot be used together"
 msgstr "套用選項與合併選項不得同時使用"
 
-#: builtin/rebase.c:1476
+#: builtin/rebase.c:1505
 #, c-format
 msgid "Unknown rebase backend: %s"
 msgstr "未知 rebase 後端:%s"
 
-#: builtin/rebase.c:1505
+#: builtin/rebase.c:1534
 msgid "--reschedule-failed-exec requires --exec or --interactive"
 msgstr "--reschedule-failed-exec 需要 --exec 或 --interactive"
 
-#: builtin/rebase.c:1536
+#: builtin/rebase.c:1565
 #, c-format
 msgid "invalid upstream '%s'"
 msgstr "無效的上游 '%s'"
 
-#: builtin/rebase.c:1542
+#: builtin/rebase.c:1571
 msgid "Could not create new root commit"
 msgstr "不能建立新的根提交"
 
-#: builtin/rebase.c:1568
+#: builtin/rebase.c:1597
 #, c-format
 msgid "'%s': need exactly one merge base with branch"
 msgstr "'%s':只需要與分支的一個合併基礎"
 
-#: builtin/rebase.c:1571
+#: builtin/rebase.c:1600
 #, c-format
 msgid "'%s': need exactly one merge base"
 msgstr "'%s':只需要一個合併基礎"
 
-#: builtin/rebase.c:1580
+#: builtin/rebase.c:1609
 #, c-format
 msgid "Does not point to a valid commit '%s'"
 msgstr "沒有指向一個有效的提交 '%s'"
 
-#: builtin/rebase.c:1607
+#: builtin/rebase.c:1636
 #, c-format
 msgid "no such branch/commit '%s'"
 msgstr "沒有此分支/提交 '%s'"
 
-#: builtin/rebase.c:1618 builtin/submodule--helper.c:39
-#: builtin/submodule--helper.c:2659
+#: builtin/rebase.c:1647 builtin/submodule--helper.c:43
+#: builtin/submodule--helper.c:2477
 #, c-format
 msgid "No such ref: %s"
 msgstr "沒有這樣的引用:%s"
 
-#: builtin/rebase.c:1629
+#: builtin/rebase.c:1658
 msgid "Could not resolve HEAD to a revision"
 msgstr "無法將 HEAD 解析為一個版本"
 
-#: builtin/rebase.c:1650
+#: builtin/rebase.c:1679
 msgid "Please commit or stash them."
 msgstr "請提交或儲藏修改。"
 
-#: builtin/rebase.c:1686
-#, c-format
-msgid "could not switch to %s"
-msgstr "無法切換到 %s"
-
-#: builtin/rebase.c:1697
+#: builtin/rebase.c:1714
 msgid "HEAD is up to date."
 msgstr "HEAD 是最新的。"
 
-#: builtin/rebase.c:1699
+#: builtin/rebase.c:1716
 #, c-format
 msgid "Current branch %s is up to date.\n"
 msgstr "目前分支 %s 是最新的。\n"
 
-#: builtin/rebase.c:1707
+#: builtin/rebase.c:1724
 msgid "HEAD is up to date, rebase forced."
 msgstr "HEAD 是最新的,強制重定基底。"
 
-#: builtin/rebase.c:1709
+#: builtin/rebase.c:1726
 #, c-format
 msgid "Current branch %s is up to date, rebase forced.\n"
 msgstr "目前分支 %s 是最新的,強制重定基底。\n"
 
-#: builtin/rebase.c:1717
+#: builtin/rebase.c:1734
 msgid "The pre-rebase hook refused to rebase."
 msgstr "pre-rebase 掛鉤拒絕了重定基底動作。"
 
-#: builtin/rebase.c:1724
+#: builtin/rebase.c:1741
 #, c-format
 msgid "Changes to %s:\n"
 msgstr "到 %s 的變更:\n"
 
-#: builtin/rebase.c:1727
+#: builtin/rebase.c:1744
 #, c-format
 msgid "Changes from %s to %s:\n"
 msgstr "從 %s 到 %s 的變更:\n"
 
-#: builtin/rebase.c:1752
+#: builtin/rebase.c:1769
 #, c-format
 msgid "First, rewinding head to replay your work on top of it...\n"
 msgstr "首先,還原開頭指標以便在其上重放您的工作...\n"
 
-#: builtin/rebase.c:1761
+#: builtin/rebase.c:1781
 msgid "Could not detach HEAD"
 msgstr "無法分離開頭指標"
 
-#: builtin/rebase.c:1770
+#: builtin/rebase.c:1790
 #, c-format
 msgid "Fast-forwarded %s to %s.\n"
 msgstr "快轉 %s 到 %s。\n"
@@ -20019,7 +20474,7 @@ msgstr "快轉 %s 到 %s。\n"
 msgid "git receive-pack <git-dir>"
 msgstr "git receive-pack <版本庫目錄>"
 
-#: builtin/receive-pack.c:1275
+#: builtin/receive-pack.c:1263
 msgid ""
 "By default, updating the current branch in a non-bare repository\n"
 "is denied, because it will make the index and work tree inconsistent\n"
@@ -20045,7 +20500,7 @@ msgstr ""
 "若要封鎖此訊息且保持預設行為,設定 'receive.denyCurrentBranch'\n"
 "設定變數為 'refuse'。"
 
-#: builtin/receive-pack.c:1295
+#: builtin/receive-pack.c:1283
 msgid ""
 "By default, deleting the current branch is denied, because the next\n"
 "'git clone' won't result in any file checked out, causing confusion.\n"
@@ -20064,79 +20519,110 @@ msgstr ""
 "\n"
 "若要封鎖此訊息,您可以設定它為 'refuse'。"
 
-#: builtin/receive-pack.c:2474
+#: builtin/receive-pack.c:2476
 msgid "quiet"
 msgstr "靜默模式"
 
-#: builtin/receive-pack.c:2489
+#: builtin/receive-pack.c:2491
 msgid "you must specify a directory"
 msgstr "您必須指定目錄"
 
-#: builtin/reflog.c:17
+#: builtin/reflog.c:9
+msgid "git reflog [show] [<log-options>] [<ref>]"
+msgstr "git reflog [show] [<log-options>] [<ref>]"
+
+#: builtin/reflog.c:12
 msgid ""
-"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] "
-"<refs>..."
+"git reflog expire [--expire=<time>] [--expire-unreachable=<time>]\n"
+"                  [--rewrite] [--updateref] [--stale-fix]\n"
+"                  [--dry-run | -n] [--verbose] [--all [--single-worktree] | "
+"<refs>...]"
 msgstr ""
-"git reflog expire [--expire=<時間>] [--expire-unreachable=<時間>] [--"
-"rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] <引"
-"用>..."
+"git reflog expire [--expire=<time>] [--expire-unreachable=<time>]\n"
+"                  [--rewrite] [--updateref] [--stale-fix]\n"
+"                  [--dry-run | -n] [--verbose] [--all [--single-worktree] | "
+"<refs>...]"
 
-#: builtin/reflog.c:22
+#: builtin/reflog.c:17
 msgid ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] "
-"<refs>..."
+"git reflog delete [--rewrite] [--updateref]\n"
+"                  [--dry-run | -n] [--verbose] <ref>@{<specifier>}..."
 msgstr ""
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] <引"
-"用>..."
+"git reflog delete [--rewrite] [--updateref]\n"
+"                  [--dry-run | -n] [--verbose] <ref>@{<specifier>}..."
 
-#: builtin/reflog.c:25
+#: builtin/reflog.c:21
 msgid "git reflog exists <ref>"
 msgstr "git reflog exists <引用>"
 
-#: builtin/reflog.c:585 builtin/reflog.c:590
+#: builtin/reflog.c:197 builtin/reflog.c:211
 #, c-format
-msgid "'%s' is not a valid timestamp"
-msgstr "'%s' 不是一個有效的時間戳"
+msgid "invalid timestamp '%s' given to '--%s'"
+msgstr "傳入「--%s」的時間戳「%s」無效"
+
+#: builtin/reflog.c:240 builtin/reflog.c:359
+msgid "do not actually prune any entries"
+msgstr "不實際剪除任何項目"
 
-#: builtin/reflog.c:631
+#: builtin/reflog.c:243 builtin/reflog.c:362
+msgid ""
+"rewrite the old SHA1 with the new SHA1 of the entry that now precedes it"
+msgstr "將舊的 SHA1 重寫為現在比它早的新 SHA1"
+
+#: builtin/reflog.c:246 builtin/reflog.c:365
+msgid "update the reference to the value of the top reflog entry"
+msgstr "更新引用至首個引用日誌項目的值"
+
+#: builtin/reflog.c:248 builtin/reflog.c:367
+msgid "print extra information on screen"
+msgstr "在螢幕上輸出額外資訊"
+
+#: builtin/reflog.c:249 builtin/reflog.c:253
+msgid "timestamp"
+msgstr "時間戳"
+
+#: builtin/reflog.c:250
+msgid "prune entries older than the specified time"
+msgstr "剪除舊於指定時間的項目"
+
+#: builtin/reflog.c:254
+msgid ""
+"prune entries older than <time> that are not reachable from the current tip "
+"of the branch"
+msgstr "剪除早於 <time> 且不能從分支目前開頭到達的項目"
+
+#: builtin/reflog.c:258
+msgid "prune any reflog entries that point to broken commits"
+msgstr "剪除任何指向損壞提交的引用日誌項目"
+
+#: builtin/reflog.c:259
+msgid "process the reflogs of all references"
+msgstr "處理所有引用的 reflog"
+
+#: builtin/reflog.c:261
+msgid "limits processing to reflogs from the current worktree only"
+msgstr "限制只處理目前工作區的引用日誌"
+
+#: builtin/reflog.c:294
 #, c-format
 msgid "Marking reachable objects..."
 msgstr "正在標記可以取得物件..."
 
-#: builtin/reflog.c:675
+#: builtin/reflog.c:338
 #, c-format
 msgid "%s points nowhere!"
 msgstr "%s 指向不存在!"
 
-#: builtin/reflog.c:731
+#: builtin/reflog.c:374
 msgid "no reflog specified to delete"
 msgstr "未指定要刪除的引用日誌"
 
-#: builtin/reflog.c:742
-#, c-format
-msgid "not a reflog: %s"
-msgstr "不是一個引用日誌:%s"
-
-#: builtin/reflog.c:747
-#, c-format
-msgid "no reflog for '%s'"
-msgstr "沒有 '%s' 的引用日誌"
-
-#: builtin/reflog.c:794
+#: builtin/reflog.c:396
 #, c-format
 msgid "invalid ref format: %s"
 msgstr "無效的引用格式:%s"
 
-#: builtin/reflog.c:803
-msgid "git reflog [ show | expire | delete | exists ]"
-msgstr "git reflog [ show | expire | delete | exists ]"
-
-#: builtin/remote.c:17
-msgid "git remote [-v | --verbose]"
-msgstr "git remote [-v | --verbose]"
-
-#: builtin/remote.c:18
+#: builtin/remote.c:19
 msgid ""
 "git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--"
 "mirror=<fetch|push>] <name> <url>"
@@ -20144,86 +20630,86 @@ msgstr ""
 "git remote add [-t <分支>] [-m <master>] [-f] [--tags | --no-tags] [--"
 "mirror=<fetch|push>] <名稱> <位址>"
 
-#: builtin/remote.c:19 builtin/remote.c:39
-msgid "git remote rename <old> <new>"
-msgstr "git remote rename <舊名稱> <新名稱>"
+#: builtin/remote.c:20 builtin/remote.c:40
+msgid "git remote rename [--[no-]progress] <old> <new>"
+msgstr "git remote rename [--[no-]progress] <old> <new>"
 
-#: builtin/remote.c:20 builtin/remote.c:44
+#: builtin/remote.c:21 builtin/remote.c:45
 msgid "git remote remove <name>"
 msgstr "git remote remove <名稱>"
 
-#: builtin/remote.c:21 builtin/remote.c:49
+#: builtin/remote.c:22 builtin/remote.c:50
 msgid "git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"
 msgstr "git remote set-head <名稱> (-a | --auto | -d | --delete | <分支>)"
 
-#: builtin/remote.c:22
+#: builtin/remote.c:23
 msgid "git remote [-v | --verbose] show [-n] <name>"
 msgstr "git remote [-v | --verbose] show [-n] <名稱>"
 
-#: builtin/remote.c:23
+#: builtin/remote.c:24
 msgid "git remote prune [-n | --dry-run] <name>"
 msgstr "git remote prune [-n | --dry-run] <名稱>"
 
-#: builtin/remote.c:24
+#: builtin/remote.c:25
 msgid ""
 "git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"
 msgstr "git remote [-v | --verbose] update [-p | --prune] [(<組> | <遠端>)...]"
 
-#: builtin/remote.c:25
+#: builtin/remote.c:26
 msgid "git remote set-branches [--add] <name> <branch>..."
 msgstr "git remote set-branches [--add] <名稱> <分支>..."
 
-#: builtin/remote.c:26 builtin/remote.c:75
+#: builtin/remote.c:27 builtin/remote.c:76
 msgid "git remote get-url [--push] [--all] <name>"
 msgstr "git remote get-url [--push] [--all] <名稱>"
 
-#: builtin/remote.c:27 builtin/remote.c:80
+#: builtin/remote.c:28 builtin/remote.c:81
 msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]"
 msgstr "git remote set-url [--push] <名稱> <新的位址> [<舊的位址>]"
 
-#: builtin/remote.c:28 builtin/remote.c:81
+#: builtin/remote.c:29 builtin/remote.c:82
 msgid "git remote set-url --add <name> <newurl>"
 msgstr "git remote set-url --add <名稱> <新的位址>"
 
-#: builtin/remote.c:29 builtin/remote.c:82
+#: builtin/remote.c:30 builtin/remote.c:83
 msgid "git remote set-url --delete <name> <url>"
 msgstr "git remote set-url --delete <名稱> <位址>"
 
-#: builtin/remote.c:34
+#: builtin/remote.c:35
 msgid "git remote add [<options>] <name> <url>"
 msgstr "git remote add [<選項>] <名稱> <位址>"
 
-#: builtin/remote.c:54
+#: builtin/remote.c:55
 msgid "git remote set-branches <name> <branch>..."
 msgstr "git remote set-branches <名稱> <分支>..."
 
-#: builtin/remote.c:55
+#: builtin/remote.c:56
 msgid "git remote set-branches --add <name> <branch>..."
 msgstr "git remote set-branches --add <名稱> <分支>..."
 
-#: builtin/remote.c:60
+#: builtin/remote.c:61
 msgid "git remote show [<options>] <name>"
 msgstr "git remote show [<選項>] <名稱>"
 
-#: builtin/remote.c:65
+#: builtin/remote.c:66
 msgid "git remote prune [<options>] <name>"
 msgstr "git remote prune [<選項>] <名稱>"
 
-#: builtin/remote.c:70
+#: builtin/remote.c:71
 msgid "git remote update [<options>] [<group> | <remote>]..."
 msgstr "git remote update [<選項>] [<組> | <遠端>]..."
 
-#: builtin/remote.c:99
+#: builtin/remote.c:100
 #, c-format
 msgid "Updating %s"
 msgstr "更新 %s 中"
 
-#: builtin/remote.c:101
+#: builtin/remote.c:102
 #, c-format
 msgid "Could not fetch %s"
 msgstr "不能取得 %s"
 
-#: builtin/remote.c:131
+#: builtin/remote.c:132
 msgid ""
 "--mirror is dangerous and deprecated; please\n"
 "\t use --mirror=fetch or --mirror=push instead"
@@ -20231,77 +20717,77 @@ msgstr ""
 "--mirror 選項危險且過時,請使用 --mirror=fetch\n"
 "\t 或 --mirror=push"
 
-#: builtin/remote.c:148
+#: builtin/remote.c:149
 #, c-format
 msgid "unknown mirror argument: %s"
 msgstr "未知的鏡像參數:%s"
 
-#: builtin/remote.c:164
+#: builtin/remote.c:165
 msgid "fetch the remote branches"
 msgstr "抓取遠端的分支"
 
-#: builtin/remote.c:166
+#: builtin/remote.c:167
 msgid "import all tags and associated objects when fetching"
 msgstr "抓取時匯入所有的標籤和關聯物件"
 
-#: builtin/remote.c:169
+#: builtin/remote.c:170
 msgid "or do not fetch any tag at all (--no-tags)"
 msgstr "或不抓取任何標籤(--no-tags)"
 
-#: builtin/remote.c:171
+#: builtin/remote.c:172
 msgid "branch(es) to track"
 msgstr "追蹤的分支"
 
-#: builtin/remote.c:172
+#: builtin/remote.c:173
 msgid "master branch"
 msgstr "master 分支"
 
-#: builtin/remote.c:174
+#: builtin/remote.c:175
 msgid "set up remote as a mirror to push to or fetch from"
 msgstr "把遠端設定為用以推送或抓取的鏡像"
 
-#: builtin/remote.c:186
+#: builtin/remote.c:187
 msgid "specifying a master branch makes no sense with --mirror"
 msgstr "指定一個 master 分支並使用 --mirror 選項沒有意義"
 
-#: builtin/remote.c:188
+#: builtin/remote.c:189
 msgid "specifying branches to track makes sense only with fetch mirrors"
 msgstr "指定要追蹤的分支只在與取得鏡像同時使用才有意義"
 
-#: builtin/remote.c:195 builtin/remote.c:705
+#: builtin/remote.c:196 builtin/remote.c:716
 #, c-format
 msgid "remote %s already exists."
 msgstr "遠端 %s 已經存在。"
 
-#: builtin/remote.c:240
+#: builtin/remote.c:241
 #, c-format
 msgid "Could not setup master '%s'"
 msgstr "無法設定 master '%s'"
 
-#: builtin/remote.c:322
+#: builtin/remote.c:323
 #, c-format
 msgid "unhandled branch.%s.rebase=%s; assuming 'true'"
 msgstr "branch.%s.rebase=%s 未處理。假設成 'true'"
 
-#: builtin/remote.c:366
+#: builtin/remote.c:367
 #, c-format
 msgid "Could not get fetch map for refspec %s"
 msgstr "無法得到引用規格 %s 的取得列表"
 
-#: builtin/remote.c:460 builtin/remote.c:468
+#: builtin/remote.c:461 builtin/remote.c:469
 msgid "(matching)"
 msgstr "(符合)"
 
-#: builtin/remote.c:472
+#: builtin/remote.c:473
 msgid "(delete)"
 msgstr "(刪除)"
 
-#: builtin/remote.c:660
+#: builtin/remote.c:664
 #, c-format
 msgid "could not set '%s'"
 msgstr "無法設定 '%s'"
 
-#: builtin/remote.c:665
+#: builtin/remote.c:669
 #, c-format
 msgid ""
 "The %s configuration remote.pushDefault in:\n"
@@ -20312,17 +20798,17 @@ msgstr ""
 "\t%s:%d\n"
 "現命名成不存在的遠端分支 '%s'"
 
-#: builtin/remote.c:696 builtin/remote.c:841 builtin/remote.c:948
+#: builtin/remote.c:707 builtin/remote.c:866 builtin/remote.c:973
 #, c-format
 msgid "No such remote: '%s'"
 msgstr "沒有此遠端版本庫:'%s'"
 
-#: builtin/remote.c:715
+#: builtin/remote.c:726
 #, c-format
 msgid "Could not rename config section '%s' to '%s'"
 msgstr "不能重新命名設定小節 '%s' 到 '%s'"
 
-#: builtin/remote.c:735
+#: builtin/remote.c:746
 #, c-format
 msgid ""
 "Not updating non-default fetch refspec\n"
@@ -20333,17 +20819,21 @@ msgstr ""
 "\t%s\n"
 "\t如果必要請手動更新設定。"
 
-#: builtin/remote.c:775
+#: builtin/remote.c:783
+msgid "Renaming remote references"
+msgstr "正在重新命名遠端引用"
+
+#: builtin/remote.c:794
 #, c-format
 msgid "deleting '%s' failed"
 msgstr "刪除 '%s' 失敗"
 
-#: builtin/remote.c:809
+#: builtin/remote.c:832
 #, c-format
 msgid "creating '%s' failed"
 msgstr "建立 '%s' 失敗"
 
-#: builtin/remote.c:887
+#: builtin/remote.c:912
 msgid ""
 "Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
 "to delete it, use:"
@@ -20352,118 +20842,118 @@ msgid_plural ""
 "to delete them, use:"
 msgstr[0] "注意:ref/remotes 層級之外的一個分支未被移除。要刪除它,使用:"
 
-#: builtin/remote.c:901
+#: builtin/remote.c:926
 #, c-format
 msgid "Could not remove config section '%s'"
 msgstr "不能移除設定小節 '%s'"
 
-#: builtin/remote.c:1009
+#: builtin/remote.c:1034
 #, c-format
 msgid " new (next fetch will store in remotes/%s)"
 msgstr " 新的(下一次取得將儲存於 remotes/%s)"
 
-#: builtin/remote.c:1012
+#: builtin/remote.c:1037
 msgid " tracked"
 msgstr " 已追蹤"
 
-#: builtin/remote.c:1014
+#: builtin/remote.c:1039
 msgid " stale (use 'git remote prune' to remove)"
-msgstr " 過時(使用 'git remote prune' 移除)"
+msgstr " 過時(使用 'git remote prune' 移除)"
 
-#: builtin/remote.c:1016
+#: builtin/remote.c:1041
 msgid " ???"
 msgstr " ???"
 
-#: builtin/remote.c:1057
+#: builtin/remote.c:1082
 #, c-format
 msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
 msgstr "無效的 branch.%s.merge,不能重定基底到一個以上的分支"
 
-#: builtin/remote.c:1066
+#: builtin/remote.c:1091
 #, c-format
 msgid "rebases interactively onto remote %s"
 msgstr "互動式重定基底到遠端 %s"
 
-#: builtin/remote.c:1068
+#: builtin/remote.c:1093
 #, c-format
 msgid "rebases interactively (with merges) onto remote %s"
 msgstr "互動式重定基底(含合併提交)到遠端 %s"
 
-#: builtin/remote.c:1071
+#: builtin/remote.c:1096
 #, c-format
 msgid "rebases onto remote %s"
 msgstr "重定基底到遠端 %s"
 
-#: builtin/remote.c:1075
+#: builtin/remote.c:1100
 #, c-format
 msgid " merges with remote %s"
 msgstr " 與遠端 %s 合併"
 
-#: builtin/remote.c:1078
+#: builtin/remote.c:1103
 #, c-format
 msgid "merges with remote %s"
 msgstr "與遠端 %s 合併"
 
-#: builtin/remote.c:1081
+#: builtin/remote.c:1106
 #, c-format
 msgid "%-*s    and with remote %s\n"
 msgstr "%-*s    以及和遠端 %s\n"
 
-#: builtin/remote.c:1124
+#: builtin/remote.c:1149
 msgid "create"
 msgstr "建立"
 
-#: builtin/remote.c:1127
+#: builtin/remote.c:1152
 msgid "delete"
 msgstr "刪除"
 
-#: builtin/remote.c:1131
+#: builtin/remote.c:1156
 msgid "up to date"
 msgstr "最新"
 
-#: builtin/remote.c:1134
+#: builtin/remote.c:1159
 msgid "fast-forwardable"
 msgstr "可快轉"
 
-#: builtin/remote.c:1137
+#: builtin/remote.c:1162
 msgid "local out of date"
 msgstr "本機已過時"
 
-#: builtin/remote.c:1144
+#: builtin/remote.c:1169
 #, c-format
 msgid "    %-*s forces to %-*s (%s)"
 msgstr "    %-*s 強制推送至 %-*s (%s)"
 
-#: builtin/remote.c:1147
+#: builtin/remote.c:1172
 #, c-format
 msgid "    %-*s pushes to %-*s (%s)"
 msgstr "    %-*s 推送至 %-*s (%s)"
 
-#: builtin/remote.c:1151
+#: builtin/remote.c:1176
 #, c-format
 msgid "    %-*s forces to %s"
 msgstr "    %-*s 強制推送至 %s"
 
-#: builtin/remote.c:1154
+#: builtin/remote.c:1179
 #, c-format
 msgid "    %-*s pushes to %s"
 msgstr "    %-*s 推送至 %s"
 
-#: builtin/remote.c:1222
+#: builtin/remote.c:1247
 msgid "do not query remotes"
 msgstr "不查詢遠端"
 
-#: builtin/remote.c:1243
+#: builtin/remote.c:1268
 #, c-format
 msgid "* remote %s"
 msgstr "* 遠端 %s"
 
-#: builtin/remote.c:1244
+#: builtin/remote.c:1269
 #, c-format
 msgid "  Fetch URL: %s"
 msgstr "  取得位址:%s"
 
-#: builtin/remote.c:1245 builtin/remote.c:1261 builtin/remote.c:1398
+#: builtin/remote.c:1270 builtin/remote.c:1286 builtin/remote.c:1423
 msgid "(no URL)"
 msgstr "(無 URL)"
 
@@ -20471,189 +20961,189 @@ msgstr "(無 URL)"
 #. with the one in " Fetch URL: %s"
 #. translation.
 #.
-#: builtin/remote.c:1259 builtin/remote.c:1261
+#: builtin/remote.c:1284 builtin/remote.c:1286
 #, c-format
 msgid "  Push  URL: %s"
 msgstr "  推送位址:%s"
 
-#: builtin/remote.c:1263 builtin/remote.c:1265 builtin/remote.c:1267
+#: builtin/remote.c:1288 builtin/remote.c:1290 builtin/remote.c:1292
 #, c-format
 msgid "  HEAD branch: %s"
 msgstr "  HEAD 分支:%s"
 
 #  譯者:中文字串拼接,可刪除前導空格
-#: builtin/remote.c:1263
+#: builtin/remote.c:1288
 msgid "(not queried)"
 msgstr "(未查詢)"
 
-#: builtin/remote.c:1265
+#: builtin/remote.c:1290
 msgid "(unknown)"
 msgstr "(未知)"
 
-#: builtin/remote.c:1269
+#: builtin/remote.c:1294
 #, c-format
 msgid ""
 "  HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
 msgstr "  HEAD 分支(遠端 HEAD 模糊,可能是下列中的一個):\n"
 
-#: builtin/remote.c:1281
+#: builtin/remote.c:1306
 #, c-format
 msgid "  Remote branch:%s"
 msgid_plural "  Remote branches:%s"
 msgstr[0] "  遠端分支:%s"
 
 #  譯者:中文字串拼接,可刪除前導空格
-#: builtin/remote.c:1284 builtin/remote.c:1310
+#: builtin/remote.c:1309 builtin/remote.c:1335
 msgid " (status not queried)"
 msgstr " (狀態未查詢)"
 
-#: builtin/remote.c:1293
+#: builtin/remote.c:1318
 msgid "  Local branch configured for 'git pull':"
 msgid_plural "  Local branches configured for 'git pull':"
 msgstr[0] "  為 'git pull' 設定的本機分支:"
 
-#: builtin/remote.c:1301
+#: builtin/remote.c:1326
 msgid "  Local refs will be mirrored by 'git push'"
 msgstr "  本機引用將在 'git push' 時被鏡像"
 
-#: builtin/remote.c:1307
+#: builtin/remote.c:1332
 #, c-format
 msgid "  Local ref configured for 'git push'%s:"
 msgid_plural "  Local refs configured for 'git push'%s:"
 msgstr[0] "  為 'git push' 設定的本機引用%s:"
 
-#: builtin/remote.c:1328
+#: builtin/remote.c:1353
 msgid "set refs/remotes/<name>/HEAD according to remote"
 msgstr "根據遠端設定 refs/remotes/<名稱>/HEAD"
 
-#: builtin/remote.c:1330
+#: builtin/remote.c:1355
 msgid "delete refs/remotes/<name>/HEAD"
 msgstr "刪除 refs/remotes/<名稱>/HEAD"
 
-#: builtin/remote.c:1344
+#: builtin/remote.c:1369
 msgid "Cannot determine remote HEAD"
 msgstr "無法確定遠端 HEAD"
 
-#: builtin/remote.c:1346
+#: builtin/remote.c:1371
 msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
 msgstr "多個遠端 HEAD 分支。請明確地選擇一個用指令:"
 
-#: builtin/remote.c:1356
+#: builtin/remote.c:1381
 #, c-format
 msgid "Could not delete %s"
 msgstr "無法刪除 %s"
 
-#: builtin/remote.c:1364
+#: builtin/remote.c:1389
 #, c-format
 msgid "Not a valid ref: %s"
 msgstr "不是一個有效引用:%s"
 
-#: builtin/remote.c:1366
+#: builtin/remote.c:1391
 #, c-format
 msgid "Could not setup %s"
 msgstr "不能設定 %s"
 
 #  譯者:請維持前導空格
-#: builtin/remote.c:1384
+#: builtin/remote.c:1409
 #, c-format
 msgid " %s will become dangling!"
 msgstr " %s 將成為懸空狀態!"
 
 #  譯者:請維持前導空格
-#: builtin/remote.c:1385
+#: builtin/remote.c:1410
 #, c-format
 msgid " %s has become dangling!"
 msgstr " %s 已成為懸空狀態!"
 
-#: builtin/remote.c:1394
+#: builtin/remote.c:1419
 #, c-format
 msgid "Pruning %s"
 msgstr "修剪 %s"
 
-#: builtin/remote.c:1395
+#: builtin/remote.c:1420
 #, c-format
 msgid "URL: %s"
 msgstr "URL:%s"
 
-#: builtin/remote.c:1411
+#: builtin/remote.c:1436
 #, c-format
 msgid " * [would prune] %s"
-msgstr " * [å°\87å\88ªé\99¤] %s"
+msgstr " * [å°\87å\89ªé\99¤] %s"
 
-#: builtin/remote.c:1414
+#: builtin/remote.c:1439
 #, c-format
 msgid " * [pruned] %s"
-msgstr " * [å·²å\88ªé\99¤] %s"
+msgstr " * [å·²å\89ªé\99¤] %s"
 
-#: builtin/remote.c:1459
+#: builtin/remote.c:1484
 msgid "prune remotes after fetching"
-msgstr "抓取後除遠端"
+msgstr "抓取後除遠端"
 
-#: builtin/remote.c:1523 builtin/remote.c:1579 builtin/remote.c:1649
+#: builtin/remote.c:1548 builtin/remote.c:1604 builtin/remote.c:1674
 #, c-format
 msgid "No such remote '%s'"
 msgstr "沒有此遠端 '%s'"
 
-#: builtin/remote.c:1541
+#: builtin/remote.c:1566
 msgid "add branch"
 msgstr "新增分支"
 
-#: builtin/remote.c:1548
+#: builtin/remote.c:1573
 msgid "no remote specified"
 msgstr "未指定遠端"
 
-#: builtin/remote.c:1565
+#: builtin/remote.c:1590
 msgid "query push URLs rather than fetch URLs"
 msgstr "查詢推送 URL 位址,而非取得 URL 位址"
 
-#: builtin/remote.c:1567
+#: builtin/remote.c:1592
 msgid "return all URLs"
 msgstr "返回所有 URL 位址"
 
-#: builtin/remote.c:1597
+#: builtin/remote.c:1622
 #, c-format
 msgid "no URLs configured for remote '%s'"
 msgstr "沒有給遠端版本庫 '%s' 設定 URL"
 
-#: builtin/remote.c:1623
+#: builtin/remote.c:1648
 msgid "manipulate push URLs"
 msgstr "動作推送 URLS"
 
-#: builtin/remote.c:1625
+#: builtin/remote.c:1650
 msgid "add URL"
 msgstr "新增 URL"
 
-#: builtin/remote.c:1627
+#: builtin/remote.c:1652
 msgid "delete URLs"
 msgstr "刪除 URL"
 
-#: builtin/remote.c:1634
+#: builtin/remote.c:1659
 msgid "--add --delete doesn't make sense"
 msgstr "--add --delete 無意義"
 
-#: builtin/remote.c:1675
+#: builtin/remote.c:1700
 #, c-format
 msgid "Invalid old URL pattern: %s"
 msgstr "無效的舊 URL 符合範本:%s"
 
-#: builtin/remote.c:1683
+#: builtin/remote.c:1708
 #, c-format
 msgid "No such URL found: %s"
 msgstr "未找到此 URL:%s"
 
-#: builtin/remote.c:1685
+#: builtin/remote.c:1710
 msgid "Will not delete all non-push URLs"
 msgstr "將不會刪除所有非推送 URL 位址"
 
-#: builtin/remote.c:1702
+#: builtin/remote.c:1727
 msgid "be verbose; must be placed before a subcommand"
 msgstr "詳細輸出;必須置於子指令之前"
 
-#: builtin/repack.c:28
+#: builtin/repack.c:29
 msgid "git repack [<options>]"
 msgstr "git repack [<選項>]"
 
-#: builtin/repack.c:33
+#: builtin/repack.c:34
 msgid ""
 "Incremental repacks are incompatible with bitmap indexes.  Use\n"
 "--no-write-bitmap-index or disable the pack.writebitmaps configuration."
@@ -20661,144 +21151,144 @@ msgstr ""
 "增量 repack 和 bitmap 索引不相容。  使用 --no-write-bitmap-index\n"
 "或停用 pack.writebitmaps 設定。"
 
-#: builtin/repack.c:201
+#: builtin/repack.c:206
 msgid "could not start pack-objects to repack promisor objects"
 msgstr "無法開始 pack-objects 來重新打包 promisor 物件"
 
-#: builtin/repack.c:275 builtin/repack.c:820
+#: builtin/repack.c:280 builtin/repack.c:824
 msgid "repack: Expecting full hex object ID lines only from pack-objects."
 msgstr "repack:期望來自 pack-objects 的完整十六進位物件 ID。"
 
-#: builtin/repack.c:299
+#: builtin/repack.c:304
 msgid "could not finish pack-objects to repack promisor objects"
 msgstr "無法完成 pack-objects 來重新打包 promisor 物件"
 
-#: builtin/repack.c:314
+#: builtin/repack.c:319
 #, c-format
 msgid "cannot open index for %s"
 msgstr "無法開啟 %s 的索引"
 
-#: builtin/repack.c:373
+#: builtin/repack.c:378
 #, c-format
 msgid "pack %s too large to consider in geometric progression"
 msgstr "%s 包太大,以致不能在等比數列中考慮"
 
-#: builtin/repack.c:406 builtin/repack.c:413 builtin/repack.c:418
+#: builtin/repack.c:411 builtin/repack.c:418 builtin/repack.c:423
 #, c-format
 msgid "pack %s too large to roll up"
 msgstr "%s 包太大,以致不能縮合"
 
-#: builtin/repack.c:498
+#: builtin/repack.c:503
 #, c-format
 msgid "could not open tempfile %s for writing"
 msgstr "無法開啟 '%s' 暫存檔進行寫入"
 
-#: builtin/repack.c:516
+#: builtin/repack.c:521
 msgid "could not close refs snapshot tempfile"
 msgstr "無法關閉 refs 的快照暫存檔"
 
-#: builtin/repack.c:630
+#: builtin/repack.c:634
 msgid "pack everything in a single pack"
 msgstr "所有內容打包到一個包檔案中"
 
-#: builtin/repack.c:632
+#: builtin/repack.c:636
 msgid "same as -a, and turn unreachable objects loose"
 msgstr "和 -a 相同,並將無法取得的物件設為鬆散物件"
 
-#: builtin/repack.c:635
+#: builtin/repack.c:639
 msgid "remove redundant packs, and run git-prune-packed"
-msgstr "刪除多餘的包,執行 git-prune-packed"
+msgstr "刪除多餘的包,然後執行 git-prune-packed"
 
-#: builtin/repack.c:637
+#: builtin/repack.c:641
 msgid "pass --no-reuse-delta to git-pack-objects"
 msgstr "向 git-pack-objects 傳遞參數 --no-reuse-delta"
 
-#: builtin/repack.c:639
+#: builtin/repack.c:643
 msgid "pass --no-reuse-object to git-pack-objects"
 msgstr "向 git-pack-objects 傳遞參數 --no-reuse-object"
 
-#: builtin/repack.c:641
+#: builtin/repack.c:645
 msgid "do not run git-update-server-info"
 msgstr "不執行 git-update-server-info"
 
-#: builtin/repack.c:644
+#: builtin/repack.c:648
 msgid "pass --local to git-pack-objects"
 msgstr "向 git-pack-objects 傳遞參數 --local"
 
-#: builtin/repack.c:646
+#: builtin/repack.c:650
 msgid "write bitmap index"
 msgstr "寫 bitmap 索引"
 
-#: builtin/repack.c:648
+#: builtin/repack.c:652
 msgid "pass --delta-islands to git-pack-objects"
 msgstr "向 git-pack-objects 傳遞參數 --delta-islands"
 
-#: builtin/repack.c:649
+#: builtin/repack.c:653
 msgid "approxidate"
 msgstr "近似日期"
 
-#: builtin/repack.c:650
+#: builtin/repack.c:654
 msgid "with -A, do not loosen objects older than this"
 msgstr "使用 -A,不要將早於提供時間的物件過期"
 
-#: builtin/repack.c:652
+#: builtin/repack.c:656
 msgid "with -a, repack unreachable objects"
 msgstr "使用 -a ,重新對無法取得物件打包"
 
-#: builtin/repack.c:654
+#: builtin/repack.c:658
 msgid "size of the window used for delta compression"
 msgstr "用於增量壓縮的視窗值"
 
-#: builtin/repack.c:655 builtin/repack.c:661
+#: builtin/repack.c:659 builtin/repack.c:665
 msgid "bytes"
 msgstr "位元組"
 
-#: builtin/repack.c:656
+#: builtin/repack.c:660
 msgid "same as the above, but limit memory size instead of entries count"
 msgstr "和上面的相似,但限制記憶體大小而非條目數"
 
-#: builtin/repack.c:658
+#: builtin/repack.c:662
 msgid "limits the maximum delta depth"
 msgstr "限制最大增量深度"
 
-#: builtin/repack.c:660
+#: builtin/repack.c:664
 msgid "limits the maximum number of threads"
 msgstr "限制最大執行緒數"
 
-#: builtin/repack.c:662
+#: builtin/repack.c:666
 msgid "maximum size of each packfile"
 msgstr "每個 packfile 的最大尺寸"
 
-#: builtin/repack.c:664
+#: builtin/repack.c:668
 msgid "repack objects in packs marked with .keep"
 msgstr "對標記為 .keep 的包中的物件重新打包"
 
-#: builtin/repack.c:666
+#: builtin/repack.c:670
 msgid "do not repack this pack"
 msgstr "不要對該包檔案重新打包"
 
-#: builtin/repack.c:668
+#: builtin/repack.c:672
 msgid "find a geometric progression with factor <N>"
 msgstr "尋找因數是 <N> 的等比數列"
 
-#: builtin/repack.c:670
+#: builtin/repack.c:674
 msgid "write a multi-pack index of the resulting packs"
 msgstr "寫入結果包的多包索引"
 
-#: builtin/repack.c:680
+#: builtin/repack.c:684
 msgid "cannot delete packs in a precious-objects repo"
 msgstr "不能刪除珍品版本庫中的打包檔案"
 
-#: builtin/repack.c:829
+#: builtin/repack.c:833
 msgid "Nothing new to pack."
 msgstr "沒有新的要打包。"
 
-#: builtin/repack.c:859
+#: builtin/repack.c:863
 #, c-format
 msgid "missing required file: %s"
 msgstr "缺少必要檔案:%s"
 
-#: builtin/repack.c:861
+#: builtin/repack.c:865
 #, c-format
 msgid "could not unlink: %s"
 msgstr "無法取消連結:%s"
@@ -20815,10 +21305,6 @@ msgstr "git replace [-f] --edit <物件>"
 msgid "git replace [-f] --graft <commit> [<parent>...]"
 msgstr "git replace [-f] --graft <提交> [<父提交>...]"
 
-#: builtin/replace.c:25
-msgid "git replace [-f] --convert-graft-file"
-msgstr "git replace [-f] --convert-graft-file"
-
 #: builtin/replace.c:26
 msgid "git replace -d <object>..."
 msgstr "git replace -d <物件>..."
@@ -21118,96 +21604,93 @@ msgid "HEAD is now at %s"
 msgstr "HEAD 現在位於 %s"
 
 #  譯者:漢字之間無空格,故刪除%s前後空格
-#: builtin/reset.c:299
+#: builtin/reset.c:304
 #, c-format
 msgid "Cannot do a %s reset in the middle of a merge."
 msgstr "在合併過程中不能做%s重設動作。"
 
-#: builtin/reset.c:396 builtin/stash.c:606 builtin/stash.c:680
-#: builtin/stash.c:704
+#: builtin/reset.c:402 builtin/stash.c:606 builtin/stash.c:669
+#: builtin/stash.c:693
 msgid "be quiet, only report errors"
 msgstr "安靜模式,只報告錯誤"
 
-#: builtin/reset.c:398
+#: builtin/reset.c:404
+msgid "skip refreshing the index after reset"
+msgstr "重設後略過重新整理索引的步驟"
+
+#: builtin/reset.c:406
 msgid "reset HEAD and index"
 msgstr "重設 HEAD 和索引"
 
-#: builtin/reset.c:399
+#: builtin/reset.c:407
 msgid "reset only HEAD"
 msgstr "只重設 HEAD"
 
-#: builtin/reset.c:401 builtin/reset.c:403
+#: builtin/reset.c:409 builtin/reset.c:411
 msgid "reset HEAD, index and working tree"
 msgstr "重設 HEAD、索引和工作區"
 
-#: builtin/reset.c:405
+#: builtin/reset.c:413
 msgid "reset HEAD but keep local changes"
 msgstr "重設 HEAD 但儲存本機變更"
 
-#: builtin/reset.c:411
+#: builtin/reset.c:419
 msgid "record only the fact that removed paths will be added later"
 msgstr "將刪除的路徑標記為稍後新增"
 
-#: builtin/reset.c:445
+#: builtin/reset.c:452
 #, c-format
 msgid "Failed to resolve '%s' as a valid revision."
 msgstr "無法將 '%s' 解析為一個有效的版本。"
 
-#: builtin/reset.c:453
+#: builtin/reset.c:460
 #, c-format
 msgid "Failed to resolve '%s' as a valid tree."
 msgstr "無法將 '%s' 解析為一個有效的樹狀物件。"
 
-#: builtin/reset.c:472
+#: builtin/reset.c:479
 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead."
 msgstr "--mixed 帶路徑已棄用,而是用 'git reset -- <路徑>'。"
 
 #  譯者:漢字之間無空格,故刪除%s前後空格
-#: builtin/reset.c:474
+#: builtin/reset.c:481
 #, c-format
 msgid "Cannot do %s reset with paths."
 msgstr "不能帶路徑進行%s重設。"
 
 #  譯者:漢字之間無空格,故刪除%s前後空格
-#: builtin/reset.c:489
+#: builtin/reset.c:496
 #, c-format
 msgid "%s reset is not allowed in a bare repository"
 msgstr "不能對純版本庫進行%s重設"
 
-#: builtin/reset.c:520
+#: builtin/reset.c:527
 msgid "Unstaged changes after reset:"
 msgstr "重設後取消暫存的變更:"
 
-#: builtin/reset.c:523
+#: builtin/reset.c:530
 #, c-format
 msgid ""
-"\n"
-"It took %.2f seconds to enumerate unstaged changes after reset.  You can\n"
-"use '--quiet' to avoid this.  Set the config setting reset.quiet to true\n"
-"to make this the default.\n"
+"It took %.2f seconds to refresh the index after reset.  You can use\n"
+"'--no-refresh' to avoid this."
 msgstr ""
-"\n"
-"重設後,枚舉未暫存變更花費了 %.2f 秒。 您可以使用 '--quiet' 避免此情況。\n"
-"將設定變數 reset.quiet 設定為 true 可使其成為預設值。\n"
+"重設後花費 %.2f 秒重新整理索引。\n"
+"您可以使用「--no-refresh」避開本步驟。"
 
-#: builtin/reset.c:541
+#: builtin/reset.c:547
 #, c-format
 msgid "Could not reset index file to revision '%s'."
 msgstr "不能重設索引檔案至版本 '%s'。"
 
-#: builtin/reset.c:546
+#: builtin/reset.c:552
 msgid "Could not write new index file."
 msgstr "不能寫入新的索引檔案。"
 
-#: builtin/rev-list.c:602
-msgid "object filtering requires --objects"
-msgstr "物件過濾需要 --objects"
-
-#: builtin/rev-list.c:674
+#: builtin/rev-list.c:659
 msgid "rev-list does not support display of notes"
 msgstr "rev-list 不支援顯示註解"
 
-#: builtin/rev-list.c:679
+#: builtin/rev-list.c:664
 #, c-format
 msgid "marked counting and '%s' cannot be used together"
 msgstr "標記計數 (marked counting) 與「%s」不得同時使用"
@@ -21546,11 +22029,11 @@ msgstr "欄位"
 msgid "group by field"
 msgstr "依欄位分組"
 
-#: builtin/shortlog.c:394
+#: builtin/shortlog.c:395
 msgid "too many arguments given outside repository"
 msgstr "版本庫外執行提供了太多的參數"
 
-#: builtin/show-branch.c:13
+#: builtin/show-branch.c:14
 msgid ""
 "git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n"
 "                [--current] [--color[=<when>] | --no-color] [--sparse]\n"
@@ -21563,116 +22046,116 @@ msgstr ""
 "                [--no-name | --sha1-name] [--topics] [(<版本> | <萬用字元"
 ">)...]"
 
-#: builtin/show-branch.c:17
+#: builtin/show-branch.c:18
 msgid "git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"
 msgstr "git show-branch (-g | --reflog)[=<n>[,<起始點>]] [--list] [<引用>]"
 
-#: builtin/show-branch.c:395
+#: builtin/show-branch.c:396
 #, c-format
 msgid "ignoring %s; cannot handle more than %d ref"
 msgid_plural "ignoring %s; cannot handle more than %d refs"
 msgstr[0] "忽略 %s,無法處理 %d 個以上的引用"
 
-#: builtin/show-branch.c:547
+#: builtin/show-branch.c:548
 #, c-format
 msgid "no matching refs with %s"
 msgstr "沒有和 %s 符合的引用"
 
-#: builtin/show-branch.c:644
+#: builtin/show-branch.c:645
 msgid "show remote-tracking and local branches"
 msgstr "顯示遠端追蹤的和本機的分支"
 
-#: builtin/show-branch.c:646
+#: builtin/show-branch.c:647
 msgid "show remote-tracking branches"
 msgstr "顯示遠端追蹤的分支"
 
-#: builtin/show-branch.c:648
+#: builtin/show-branch.c:649
 msgid "color '*!+-' corresponding to the branch"
 msgstr "著色 '*!+-' 到相應的分支"
 
-#: builtin/show-branch.c:650
+#: builtin/show-branch.c:651
 msgid "show <n> more commits after the common ancestor"
 msgstr "顯示共同祖先後的 <n> 個提交"
 
-#: builtin/show-branch.c:652
+#: builtin/show-branch.c:653
 msgid "synonym to more=-1"
 msgstr "和 more=-1 同義"
 
-#: builtin/show-branch.c:653
+#: builtin/show-branch.c:654
 msgid "suppress naming strings"
 msgstr "不顯示字串命名"
 
-#: builtin/show-branch.c:655
+#: builtin/show-branch.c:656
 msgid "include the current branch"
 msgstr "包括目前分支"
 
-#: builtin/show-branch.c:657
+#: builtin/show-branch.c:658
 msgid "name commits with their object names"
 msgstr "以物件名字命名提交"
 
-#: builtin/show-branch.c:659
+#: builtin/show-branch.c:660
 msgid "show possible merge bases"
 msgstr "顯示可能合併的基礎"
 
-#: builtin/show-branch.c:661
+#: builtin/show-branch.c:662
 msgid "show refs unreachable from any other ref"
 msgstr "顯示沒有任何引用的的引用"
 
-#: builtin/show-branch.c:663
+#: builtin/show-branch.c:664
 msgid "show commits in topological order"
 msgstr "以拓撲順序顯示提交"
 
-#: builtin/show-branch.c:666
+#: builtin/show-branch.c:667
 msgid "show only commits not on the first branch"
 msgstr "只顯示不在第一個分支上的提交"
 
-#: builtin/show-branch.c:668
+#: builtin/show-branch.c:669
 msgid "show merges reachable from only one tip"
 msgstr "顯示僅一個分支可存取的合併提交"
 
-#: builtin/show-branch.c:670
+#: builtin/show-branch.c:671
 msgid "topologically sort, maintaining date order where possible"
 msgstr "拓撲方式排序,並儘可能地保持日期順序"
 
-#: builtin/show-branch.c:673
+#: builtin/show-branch.c:674
 msgid "<n>[,<base>]"
 msgstr "<n>[,<base>]"
 
-#: builtin/show-branch.c:674
+#: builtin/show-branch.c:675
 msgid "show <n> most recent ref-log entries starting at base"
 msgstr "顯示從起始點開始的 <n> 條最近的引用日誌記錄"
 
-#: builtin/show-branch.c:734
+#: builtin/show-branch.c:735
 msgid "no branches given, and HEAD is not valid"
 msgstr "未提供分支,且 HEAD 無效"
 
-#: builtin/show-branch.c:737
+#: builtin/show-branch.c:738
 msgid "--reflog option needs one branch name"
 msgstr "選項 --reflog 需要一個分支名"
 
-#: builtin/show-branch.c:740
+#: builtin/show-branch.c:741
 #, c-format
 msgid "only %d entry can be shown at one time."
 msgid_plural "only %d entries can be shown at one time."
 msgstr[0] "一次只能顯示 %d 個條目。"
 
-#: builtin/show-branch.c:744
+#: builtin/show-branch.c:745
 #, c-format
 msgid "no such ref %s"
 msgstr "無此引用 %s"
 
-#: builtin/show-branch.c:830
+#: builtin/show-branch.c:831
 #, c-format
 msgid "cannot handle more than %d rev."
 msgid_plural "cannot handle more than %d revs."
 msgstr[0] "不能處理 %d 個以上的版本。"
 
-#: builtin/show-branch.c:834
+#: builtin/show-branch.c:835
 #, c-format
 msgid "'%s' is not a valid ref."
 msgstr "'%s' 不是一個有效的引用。"
 
-#: builtin/show-branch.c:837
+#: builtin/show-branch.c:838
 #, c-format
 msgid "cannot find commit %s (%s)"
 msgstr "不能找到提交 %s(%s)"
@@ -21729,120 +22212,143 @@ msgstr "不列印結果到標準輸出(例如與 --verify 參數共用)"
 msgid "show refs from stdin that aren't in local repository"
 msgstr "顯示從標準輸入中讀入的不在本機版本庫中的引用"
 
-#: builtin/sparse-checkout.c:22
+#: builtin/sparse-checkout.c:23
 msgid "git sparse-checkout (init|list|set|add|reapply|disable) <options>"
 msgstr "git sparse-checkout (init|list|set|add|reapply|disable) <選項>"
 
-#: builtin/sparse-checkout.c:46
-msgid "git sparse-checkout list"
-msgstr "git sparse-checkout list"
-
-#: builtin/sparse-checkout.c:60
+#: builtin/sparse-checkout.c:61
 msgid "this worktree is not sparse"
 msgstr "這不是稀疏工作區"
 
-#: builtin/sparse-checkout.c:75
+#: builtin/sparse-checkout.c:76
 msgid "this worktree is not sparse (sparse-checkout file may not exist)"
 msgstr "這不是稀疏工作區(sparse-checkout 檔案可能不存在)"
 
-#: builtin/sparse-checkout.c:176
+#: builtin/sparse-checkout.c:177
 #, c-format
 msgid ""
 "directory '%s' contains untracked files, but is not in the sparse-checkout "
 "cone"
 msgstr "「%s」目錄有未追蹤的檔案,但不在稀疏提交的 cone 中"
 
-#: builtin/sparse-checkout.c:184
+#: builtin/sparse-checkout.c:185
 #, c-format
 msgid "failed to remove directory '%s'"
 msgstr "無法移除 '%s' 目錄"
 
-#: builtin/sparse-checkout.c:324
+#: builtin/sparse-checkout.c:327
 msgid "failed to create directory for sparse-checkout file"
 msgstr "無法建立稀疏簽出檔案的目錄"
 
-#: builtin/sparse-checkout.c:365
-msgid "unable to upgrade repository format to enable worktreeConfig"
-msgstr "無法升級版本庫格式,以致無法啟用 worktreeConfig"
-
-#: builtin/sparse-checkout.c:367
-msgid "failed to set extensions.worktreeConfig setting"
-msgstr "無法設定 extensions.worktreeConfig 設定"
+#: builtin/sparse-checkout.c:366
+msgid "failed to initialize worktree config"
+msgstr "無法初始化工作區組態"
 
 #: builtin/sparse-checkout.c:411
 msgid "failed to modify sparse-index config"
 msgstr "無法修改稀疏索引設定"
 
-#: builtin/sparse-checkout.c:422
-msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
-msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
-
-#: builtin/sparse-checkout.c:441 builtin/sparse-checkout.c:729
-#: builtin/sparse-checkout.c:778
+#: builtin/sparse-checkout.c:441 builtin/sparse-checkout.c:793
+#: builtin/sparse-checkout.c:847
 msgid "initialize the sparse-checkout in cone mode"
 msgstr "以 cone 模式初始化稀疏簽出"
 
-#: builtin/sparse-checkout.c:443 builtin/sparse-checkout.c:731
-#: builtin/sparse-checkout.c:780
+#: builtin/sparse-checkout.c:443 builtin/sparse-checkout.c:795
+#: builtin/sparse-checkout.c:849
 msgid "toggle the use of a sparse index"
 msgstr "切換是否使用稀疏索引"
 
-#: builtin/sparse-checkout.c:476
+#: builtin/sparse-checkout.c:479
 #, c-format
 msgid "failed to open '%s'"
 msgstr "無法開啟「%s」"
 
-#: builtin/sparse-checkout.c:528
+#: builtin/sparse-checkout.c:531
 #, c-format
 msgid "could not normalize path %s"
 msgstr "無法標準化路徑 %s"
 
-#: builtin/sparse-checkout.c:557
+#: builtin/sparse-checkout.c:560
 #, c-format
 msgid "unable to unquote C-style string '%s'"
 msgstr "無法去掉 '%s' C 樣式字串的引號"
 
-#: builtin/sparse-checkout.c:612 builtin/sparse-checkout.c:640
+#: builtin/sparse-checkout.c:615 builtin/sparse-checkout.c:643
 msgid "unable to load existing sparse-checkout patterns"
 msgstr "無法載入現存的稀疏簽出樣式"
 
-#: builtin/sparse-checkout.c:616
+#: builtin/sparse-checkout.c:619
 msgid "existing sparse-checkout patterns do not use cone mode"
 msgstr "現有的稀疏簽出樣式不使用 cone 模式"
 
-#: builtin/sparse-checkout.c:682
-msgid "git sparse-checkout add (--stdin | <patterns>)"
-msgstr "git sparse-checkout add (--stdin | <樣式>)"
+#: builtin/sparse-checkout.c:707
+msgid "please run from the toplevel directory in non-cone mode"
+msgstr "請從上層目錄,以非 cone 模式執行"
+
+#: builtin/sparse-checkout.c:712
+msgid "specify directories rather than patterns (no leading slash)"
+msgstr "指定目錄而非模式(沒有前置斜線)"
+
+#: builtin/sparse-checkout.c:714
+msgid ""
+"specify directories rather than patterns.  If your directory starts with a "
+"'!', pass --skip-checks"
+msgstr "指定目錄而非模式。若您的目錄是以「!」開頭,請傳入 --skip-checks"
+
+#: builtin/sparse-checkout.c:716
+msgid ""
+"specify directories rather than patterns.  If your directory really has any "
+"of '*?[]\\' in it, pass --skip-checks"
+msgstr ""
+"指定目錄而非模式。若您的目錄名稱真的包含「*?[]\\」其中一個,請傳入 --skip-"
+"checks"
+
+#: builtin/sparse-checkout.c:732
+#, c-format
+msgid ""
+"'%s' is not a directory; to treat it as a directory anyway, rerun with --"
+"skip-checks"
+msgstr "「%s」不是目錄。若要仍將其視作目錄,請重新傳入 --skip-checks 執行"
+
+#: builtin/sparse-checkout.c:734
+#, c-format
+msgid ""
+"pass a leading slash before paths such as '%s' if you want a single file "
+"(see NON-CONE PROBLEMS in the git-sparse-checkout manual)."
+msgstr ""
+"若您想要單一檔案,請在目錄前打上斜線,如「%s」(見 git-sparse-checkout 手冊"
+"〈NON-CONE PROBLEMS〉一節)。"
+
+#: builtin/sparse-checkout.c:739
+msgid "git sparse-checkout add [--skip-checks] (--stdin | <patterns>)"
+msgstr "git sparse-checkout add [--skip-checks] (--stdin | <patterns>)"
 
-#: builtin/sparse-checkout.c:694 builtin/sparse-checkout.c:733
+#: builtin/sparse-checkout.c:752 builtin/sparse-checkout.c:797
+msgid ""
+"skip some sanity checks on the given paths that might give false positives"
+msgstr "在可能給出誤判結果的指定目錄,略過某些完整性檢查"
+
+#: builtin/sparse-checkout.c:755 builtin/sparse-checkout.c:800
 msgid "read patterns from standard in"
 msgstr "從標準輸入讀取樣式"
 
-#: builtin/sparse-checkout.c:699
+#: builtin/sparse-checkout.c:760
 msgid "no sparse-checkout to add to"
 msgstr "沒有要加入之稀疏簽出"
 
-#: builtin/sparse-checkout.c:712
+#: builtin/sparse-checkout.c:775
 msgid ""
-"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] (--stdin | "
-"<patterns>)"
+"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] "
+"(--stdin | <patterns>)"
 msgstr ""
-"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] (--stdin | "
-"<patterns>)"
-
-#: builtin/sparse-checkout.c:765
-msgid "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
-msgstr "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
+"git sparse-checkout set [--[no-]cone] [--[no-]sparse-index] [--skip-checks] "
+"(--stdin | <patterns>)"
 
-#: builtin/sparse-checkout.c:785
+#: builtin/sparse-checkout.c:854
 msgid "must be in a sparse-checkout to reapply sparsity patterns"
 msgstr "必須在稀疏提交才能重新套用稀疏樣式 (sparsity pattern)"
 
-#: builtin/sparse-checkout.c:803
-msgid "git sparse-checkout disable"
-msgstr "git sparse-checkout disable"
-
-#: builtin/sparse-checkout.c:845
+#: builtin/sparse-checkout.c:914
 msgid "error while refreshing working directory"
 msgstr "重新整理工作目錄時發生錯誤"
 
@@ -21984,167 +22490,151 @@ msgstr "索引未從儲藏中復原。"
 msgid "could not restore untracked files from stash"
 msgstr "無法從儲藏條目中復原未追蹤檔案"
 
-#: builtin/stash.c:608 builtin/stash.c:706
+#: builtin/stash.c:608 builtin/stash.c:695
 msgid "attempt to recreate the index"
 msgstr "嘗試重建索引"
 
-#: builtin/stash.c:652
+#: builtin/stash.c:641
 #, c-format
 msgid "Dropped %s (%s)"
 msgstr "捨棄了 %s(%s)"
 
-#: builtin/stash.c:655
+#: builtin/stash.c:644
 #, c-format
 msgid "%s: Could not drop stash entry"
 msgstr "%s:無法捨棄儲藏條目"
 
-#: builtin/stash.c:668
+#: builtin/stash.c:657
 #, c-format
 msgid "'%s' is not a stash reference"
 msgstr "'%s' 不是一個儲藏引用"
 
-#: builtin/stash.c:718
+#: builtin/stash.c:707
 msgid "The stash entry is kept in case you need it again."
 msgstr "儲藏條目被保留以備您再次需要。"
 
-#: builtin/stash.c:741
+#: builtin/stash.c:730
 msgid "No branch name specified"
 msgstr "未指定分支名"
 
-#: builtin/stash.c:825
+#: builtin/stash.c:809
 msgid "failed to parse tree"
 msgstr "無法解析樹"
 
-#: builtin/stash.c:836
+#: builtin/stash.c:820
 msgid "failed to unpack trees"
 msgstr "無法解包樹"
 
-#: builtin/stash.c:856
+#: builtin/stash.c:840
 msgid "include untracked files in the stash"
 msgstr "在儲藏區包含未追蹤檔案"
 
-#: builtin/stash.c:859
+#: builtin/stash.c:843
 msgid "only show untracked files in the stash"
 msgstr "只在儲藏區顯示未追蹤檔案"
 
-#: builtin/stash.c:946 builtin/stash.c:983
+#: builtin/stash.c:930 builtin/stash.c:967
 #, c-format
 msgid "Cannot update %s with %s"
 msgstr "無法用 %2$s 更新 %1$s"
 
-#: builtin/stash.c:964 builtin/stash.c:1678 builtin/stash.c:1750
+#: builtin/stash.c:948 builtin/stash.c:1667 builtin/stash.c:1739
 msgid "stash message"
 msgstr "儲藏說明"
 
-#: builtin/stash.c:974
+#: builtin/stash.c:958
 msgid "\"git stash store\" requires one <commit> argument"
 msgstr "\"git stash store\" 需要一個 <提交> 參數"
 
-#: builtin/stash.c:1159
+#: builtin/stash.c:1143
 msgid "No staged changes"
 msgstr "無暫存變更"
 
-#: builtin/stash.c:1220
+#: builtin/stash.c:1204
 msgid "No changes selected"
 msgstr "沒有選擇變更"
 
-#: builtin/stash.c:1320
+#: builtin/stash.c:1304
 msgid "You do not have the initial commit yet"
 msgstr "您尚未建立初始提交"
 
-#: builtin/stash.c:1347
+#: builtin/stash.c:1331
 msgid "Cannot save the current index state"
 msgstr "無法儲存目前索引狀態"
 
-#: builtin/stash.c:1356
+#: builtin/stash.c:1340
 msgid "Cannot save the untracked files"
 msgstr "無法儲存未追蹤檔案"
 
-#: builtin/stash.c:1367 builtin/stash.c:1386
+#: builtin/stash.c:1351 builtin/stash.c:1370
 msgid "Cannot save the current worktree state"
 msgstr "無法儲存目前工作區狀態"
 
-#: builtin/stash.c:1377
+#: builtin/stash.c:1361
 msgid "Cannot save the current staged state"
 msgstr "無法儲存目前暫存狀態"
 
-#: builtin/stash.c:1414
+#: builtin/stash.c:1398
 msgid "Cannot record working tree state"
 msgstr "不能記錄工作區狀態"
 
-#: builtin/stash.c:1463
+#: builtin/stash.c:1447
 msgid "Can't use --patch and --include-untracked or --all at the same time"
 msgstr "不能同時使用參數 --patch 和 --include-untracked 或 --all"
 
-#: builtin/stash.c:1474
+#: builtin/stash.c:1458
 msgid "Can't use --staged and --include-untracked or --all at the same time"
 msgstr "--staged 和 --include-untracked 或 --all 不得同時使用"
 
-#: builtin/stash.c:1492
+#: builtin/stash.c:1476
 msgid "Did you forget to 'git add'?"
 msgstr "您是否忘了執行 'git add'?"
 
-#: builtin/stash.c:1507
+#: builtin/stash.c:1491
 msgid "No local changes to save"
 msgstr "沒有要儲存的本機修改"
 
-#: builtin/stash.c:1514
+#: builtin/stash.c:1498
 msgid "Cannot initialize stash"
 msgstr "無法初始化儲藏"
 
-#: builtin/stash.c:1529
+#: builtin/stash.c:1513
 msgid "Cannot save the current status"
 msgstr "無法儲存目前狀態"
 
-#: builtin/stash.c:1534
+#: builtin/stash.c:1518
 #, c-format
 msgid "Saved working directory and index state %s"
 msgstr "儲存工作目錄和索引狀態 %s"
 
-#: builtin/stash.c:1627
+#: builtin/stash.c:1615
 msgid "Cannot remove worktree changes"
 msgstr "無法刪除工作區變更"
 
-#: builtin/stash.c:1667 builtin/stash.c:1739
+#: builtin/stash.c:1656 builtin/stash.c:1728
 msgid "keep index"
 msgstr "保持索引"
 
-#: builtin/stash.c:1669 builtin/stash.c:1741
+#: builtin/stash.c:1658 builtin/stash.c:1730
 msgid "stash staged changes only"
 msgstr "只儲藏暫存變更"
 
-#: builtin/stash.c:1671 builtin/stash.c:1743
+#: builtin/stash.c:1660 builtin/stash.c:1732
 msgid "stash in patch mode"
 msgstr "以修補檔模式儲藏"
 
-#: builtin/stash.c:1672 builtin/stash.c:1744
+#: builtin/stash.c:1661 builtin/stash.c:1733
 msgid "quiet mode"
 msgstr "靜默模式"
 
-#: builtin/stash.c:1674 builtin/stash.c:1746
+#: builtin/stash.c:1663 builtin/stash.c:1735
 msgid "include untracked files in stash"
 msgstr "儲藏中包含未追蹤檔案"
 
-#: builtin/stash.c:1676 builtin/stash.c:1748
+#: builtin/stash.c:1665 builtin/stash.c:1737
 msgid "include ignore files"
 msgstr "包含忽略的檔案"
 
-#: builtin/stash.c:1783
-msgid ""
-"the stash.useBuiltin support has been removed!\n"
-"See its entry in 'git help config' for details."
-msgstr ""
-"對 stash.useBuiltin 的支援已被刪除!\n"
-"詳見「git help config」中的條目。"
-
-#: builtin/stripspace.c:18
-msgid "git stripspace [-s | --strip-comments]"
-msgstr "git stripspace [-s | --strip-comments]"
-
-#: builtin/stripspace.c:19
-msgid "git stripspace [-c | --comment-lines]"
-msgstr "git stripspace [-c | --comment-lines]"
-
 #: builtin/stripspace.c:37
 msgid "skip and remove all lines starting with comment character"
 msgstr "略過和移除所有的備註行"
@@ -22153,47 +22643,43 @@ msgstr "略過和移除所有的備註行"
 msgid "prepend comment character and space to each line"
 msgstr "為每一行的行首新增備註符和空格"
 
-#: builtin/submodule--helper.c:46 builtin/submodule--helper.c:2668
+#: builtin/submodule--helper.c:50 builtin/submodule--helper.c:2486
 #, c-format
 msgid "Expecting a full ref name, got %s"
 msgstr "期望一個完整的引用名稱,卻得到 %s"
 
-#: builtin/submodule--helper.c:63
-msgid "submodule--helper print-default-remote takes no arguments"
-msgstr "submodule--helper print-default-remote 不帶參數"
-
-#: builtin/submodule--helper.c:101
+#: builtin/submodule--helper.c:103
 #, c-format
 msgid "cannot strip one component off url '%s'"
 msgstr "無法從 url '%s' 剝離一個元件"
 
-#: builtin/submodule--helper.c:211
+#: builtin/submodule--helper.c:213
 #, c-format
 msgid ""
 "could not look up configuration '%s'. Assuming this repository is its own "
 "authoritative upstream."
 msgstr "無法找到設定 '%s'。假定這個版本庫是其自身的官方上游。"
 
-#: builtin/submodule--helper.c:405 builtin/submodule--helper.c:1859
+#: builtin/submodule--helper.c:413 builtin/submodule--helper.c:1873
 msgid "alternative anchor for relative paths"
 msgstr "相對路徑的替代錨記(anchor)"
 
-#: builtin/submodule--helper.c:410
+#: builtin/submodule--helper.c:418
 msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
 msgstr "git submodule--helper list [--prefix=<路徑>] [<路徑>...]"
 
-#: builtin/submodule--helper.c:468 builtin/submodule--helper.c:605
-#: builtin/submodule--helper.c:628
+#: builtin/submodule--helper.c:476 builtin/submodule--helper.c:617
+#: builtin/submodule--helper.c:640
 #, c-format
 msgid "No url found for submodule path '%s' in .gitmodules"
 msgstr "在 .gitmodules 中未找到子模組 '%s' 的 url"
 
-#: builtin/submodule--helper.c:520
+#: builtin/submodule--helper.c:528
 #, c-format
 msgid "Entering '%s'\n"
 msgstr "進入 '%s'\n"
 
-#: builtin/submodule--helper.c:523
+#: builtin/submodule--helper.c:531
 #, c-format
 msgid ""
 "run_command returned non-zero status for %s\n"
@@ -22202,7 +22688,7 @@ msgstr ""
 "對 %s 執行 run_command 返回非零值。\n"
 "."
 
-#: builtin/submodule--helper.c:545
+#: builtin/submodule--helper.c:553
 #, c-format
 msgid ""
 "run_command returned non-zero status while recursing in the nested "
@@ -22212,158 +22698,158 @@ msgstr ""
 "在遞迴 %s 的子模組執行 run_command 時返回非零值。\n"
 "."
 
-#: builtin/submodule--helper.c:561
+#: builtin/submodule--helper.c:569
 msgid "suppress output of entering each submodule command"
 msgstr "隱藏每個子模組進入命令的輸出"
 
-#: builtin/submodule--helper.c:563 builtin/submodule--helper.c:864
-#: builtin/submodule--helper.c:1453
+#: builtin/submodule--helper.c:571 builtin/submodule--helper.c:876
+#: builtin/submodule--helper.c:1458
 msgid "recurse into nested submodules"
 msgstr "遞迴進入嵌套子模組中"
 
-#: builtin/submodule--helper.c:568
+#: builtin/submodule--helper.c:576
 msgid "git submodule--helper foreach [--quiet] [--recursive] [--] <command>"
 msgstr "git submodule--helper foreach [--quiet] [--recursive] [--] <命令>"
 
-#: builtin/submodule--helper.c:642
+#: builtin/submodule--helper.c:654
 #, c-format
 msgid "Failed to register url for submodule path '%s'"
 msgstr "無法為子模組 '%s' 註冊 url"
 
-#: builtin/submodule--helper.c:646
+#: builtin/submodule--helper.c:658
 #, c-format
 msgid "Submodule '%s' (%s) registered for path '%s'\n"
 msgstr "子模組 '%s'(%s)已對路徑 '%s' 註冊\n"
 
-#: builtin/submodule--helper.c:656
+#: builtin/submodule--helper.c:668
 #, c-format
 msgid "warning: command update mode suggested for submodule '%s'\n"
 msgstr "警告:建議子模組 '%s' 使用指令更新模式\n"
 
-#: builtin/submodule--helper.c:663
+#: builtin/submodule--helper.c:675
 #, c-format
 msgid "Failed to register update mode for submodule path '%s'"
 msgstr "無法為子模組 '%s' 註冊更新模式"
 
-#: builtin/submodule--helper.c:685
+#: builtin/submodule--helper.c:697
 msgid "suppress output for initializing a submodule"
 msgstr "隱藏初始化子模組的輸出"
 
-#: builtin/submodule--helper.c:690
+#: builtin/submodule--helper.c:702
 msgid "git submodule--helper init [<options>] [<path>]"
 msgstr "git submodule--helper init [<選項>] [<路徑>]"
 
-#: builtin/submodule--helper.c:763 builtin/submodule--helper.c:898
+#: builtin/submodule--helper.c:775 builtin/submodule--helper.c:910
 #, c-format
 msgid "no submodule mapping found in .gitmodules for path '%s'"
 msgstr "在 .gitmodules 中沒有發現路徑 '%s' 的子模組映射"
 
-#: builtin/submodule--helper.c:811
+#: builtin/submodule--helper.c:823
 #, c-format
 msgid "could not resolve HEAD ref inside the submodule '%s'"
 msgstr "無法解析子模組 '%s' 的 HEAD 引用"
 
-#: builtin/submodule--helper.c:838 builtin/submodule--helper.c:1423
+#: builtin/submodule--helper.c:850 builtin/submodule--helper.c:1428
 #, c-format
 msgid "failed to recurse into submodule '%s'"
 msgstr "遞迴子模組 '%s' 失敗"
 
-#: builtin/submodule--helper.c:862 builtin/submodule--helper.c:1590
+#: builtin/submodule--helper.c:874 builtin/submodule--helper.c:1595
 msgid "suppress submodule status output"
 msgstr "隱藏子模組的狀態輸出"
 
-#: builtin/submodule--helper.c:863
+#: builtin/submodule--helper.c:875
 msgid ""
 "use commit stored in the index instead of the one stored in the submodule "
 "HEAD"
 msgstr "使用儲存在索引中的提交,而非儲存在子模組 HEAD 中的提交"
 
-#: builtin/submodule--helper.c:869
+#: builtin/submodule--helper.c:881
 msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]"
 msgstr "git submodule status [--quiet] [--cached] [--recursive] [<路徑>...]"
 
-#: builtin/submodule--helper.c:893
+#: builtin/submodule--helper.c:905
 msgid "git submodule--helper name <path>"
 msgstr "git submodule--helper name <路徑>"
 
-#: builtin/submodule--helper.c:965
+#: builtin/submodule--helper.c:977
 #, c-format
 msgid "* %s %s(blob)->%s(submodule)"
 msgstr "* %s %s(blob)->%s(submodule)"
 
-#: builtin/submodule--helper.c:968
+#: builtin/submodule--helper.c:980
 #, c-format
 msgid "* %s %s(submodule)->%s(blob)"
 msgstr "* %s %s(submodule)->%s(blob)"
 
-#: builtin/submodule--helper.c:981
+#: builtin/submodule--helper.c:993
 #, c-format
 msgid "%s"
 msgstr "%s"
 
-#: builtin/submodule--helper.c:1031
+#: builtin/submodule--helper.c:1043
 #, c-format
 msgid "couldn't hash object from '%s'"
 msgstr "無法雜湊來自 '%s' 的物件"
 
-#: builtin/submodule--helper.c:1035
+#: builtin/submodule--helper.c:1047
 #, c-format
 msgid "unexpected mode %o\n"
 msgstr "非預期的模式 %o\n"
 
-#: builtin/submodule--helper.c:1276
+#: builtin/submodule--helper.c:1288
 msgid "use the commit stored in the index instead of the submodule HEAD"
 msgstr "使用儲存在索引中的提交而非子模組 HEAD"
 
-#: builtin/submodule--helper.c:1278
+#: builtin/submodule--helper.c:1290
 msgid "compare the commit in the index with that in the submodule HEAD"
 msgstr "比較索引中提交與子模組 HEAD 提交的差異"
 
-#: builtin/submodule--helper.c:1280
+#: builtin/submodule--helper.c:1292
 msgid "skip submodules with 'ignore_config' value set to 'all'"
 msgstr "'ignore_config' 值設為 'all' 時略過子模組"
 
-#: builtin/submodule--helper.c:1282
+#: builtin/submodule--helper.c:1294
 msgid "limit the summary size"
 msgstr "限制摘要大小"
 
-#: builtin/submodule--helper.c:1287
+#: builtin/submodule--helper.c:1299
 msgid "git submodule--helper summary [<options>] [<commit>] [--] [<path>]"
 msgstr "git submodule--helper summary [<選項>] [<提交>] [--] [<路徑>]"
 
-#: builtin/submodule--helper.c:1311
+#: builtin/submodule--helper.c:1323
 msgid "could not fetch a revision for HEAD"
 msgstr "無法取得 HEAD 的版本"
 
-#: builtin/submodule--helper.c:1373
+#: builtin/submodule--helper.c:1384
 #, c-format
 msgid "Synchronizing submodule url for '%s'\n"
 msgstr "為 '%s' 同步子模組 url\n"
 
-#: builtin/submodule--helper.c:1379
+#: builtin/submodule--helper.c:1390
 #, c-format
 msgid "failed to register url for submodule path '%s'"
 msgstr "無法為子模組路徑 '%s' 註冊 url"
 
-#: builtin/submodule--helper.c:1393
+#: builtin/submodule--helper.c:1399
 #, c-format
 msgid "failed to get the default remote for submodule '%s'"
 msgstr "無法得到子模組 '%s' 的預設遠端關聯"
 
-#: builtin/submodule--helper.c:1404
+#: builtin/submodule--helper.c:1409
 #, c-format
 msgid "failed to update remote for submodule '%s'"
 msgstr "無法為子模組 '%s' 更新遠端關聯"
 
-#: builtin/submodule--helper.c:1451
+#: builtin/submodule--helper.c:1456
 msgid "suppress output of synchronizing submodule url"
 msgstr "隱藏子模組 URL 同步的輸出"
 
-#: builtin/submodule--helper.c:1458
+#: builtin/submodule--helper.c:1463
 msgid "git submodule--helper sync [--quiet] [--recursive] [<path>]"
 msgstr "git submodule--helper sync [--quiet] [--recursive] [<路徑>]"
 
-#: builtin/submodule--helper.c:1508
+#: builtin/submodule--helper.c:1513
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains a .git directory. This will be replaced "
@@ -22371,52 +22857,52 @@ msgid ""
 msgstr ""
 "子模組工作區「%s」內有 .git 目錄。使用 absorbgitdirs 會將其替換為 .git 檔案。"
 
-#: builtin/submodule--helper.c:1525
+#: builtin/submodule--helper.c:1530
 #, c-format
 msgid ""
 "Submodule work tree '%s' contains local modifications; use '-f' to discard "
 "them"
 msgstr "子模組工作區 '%s' 包含本機修改;使用 '-f' 捨棄它們"
 
-#: builtin/submodule--helper.c:1533
+#: builtin/submodule--helper.c:1538
 #, c-format
 msgid "Cleared directory '%s'\n"
 msgstr "已清除目錄 '%s'\n"
 
-#: builtin/submodule--helper.c:1535
+#: builtin/submodule--helper.c:1540
 #, c-format
 msgid "Could not remove submodule work tree '%s'\n"
 msgstr "無法移除子模組工作區 '%s'\n"
 
-#: builtin/submodule--helper.c:1546
+#: builtin/submodule--helper.c:1551
 #, c-format
 msgid "could not create empty submodule directory %s"
 msgstr "不能建立空的子模組目錄 %s"
 
-#: builtin/submodule--helper.c:1562
+#: builtin/submodule--helper.c:1567
 #, c-format
 msgid "Submodule '%s' (%s) unregistered for path '%s'\n"
 msgstr "子模組 '%s'(%s)未對路徑 '%s' 註冊\n"
 
-#: builtin/submodule--helper.c:1591
+#: builtin/submodule--helper.c:1596
 msgid "remove submodule working trees even if they contain local changes"
 msgstr "即使有本機變更仍移除子模組的工作區"
 
-#: builtin/submodule--helper.c:1592
+#: builtin/submodule--helper.c:1597
 msgid "unregister all submodules"
 msgstr "取消註冊所有子模組"
 
-#: builtin/submodule--helper.c:1597
+#: builtin/submodule--helper.c:1602
 msgid ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"
 msgstr ""
 "git submodule deinit [--quiet] [-f | --force] [--all | [--] [<路徑>...]]"
 
-#: builtin/submodule--helper.c:1611
+#: builtin/submodule--helper.c:1616
 msgid "Use '--all' if you really want to deinitialize all submodules"
 msgstr "如果您確定想要對所有子模組執行取消初始化,請使用 '--all'"
 
-#: builtin/submodule--helper.c:1656
+#: builtin/submodule--helper.c:1665
 msgid ""
 "An alternate computed from a superproject's alternate is invalid.\n"
 "To allow Git to clone without an alternate in such a case, set\n"
@@ -22428,101 +22914,105 @@ msgstr ""
 "以允許 Git 不用備用版本庫複製,亦可使用等效的 '--reference-if-able'\n"
 "而非 '--reference' 複製。"
 
-#: builtin/submodule--helper.c:1701 builtin/submodule--helper.c:1704
+#: builtin/submodule--helper.c:1710 builtin/submodule--helper.c:1713
 #, c-format
 msgid "submodule '%s' cannot add alternate: %s"
 msgstr "子模組 '%s' 不能新增版本庫備選:%s"
 
-#: builtin/submodule--helper.c:1740
+#: builtin/submodule--helper.c:1749
 #, c-format
 msgid "Value '%s' for submodule.alternateErrorStrategy is not recognized"
 msgstr "不能識別 submodule.alternateErrorStrategy 的取值 '%s'"
 
-#: builtin/submodule--helper.c:1747
+#: builtin/submodule--helper.c:1756
 #, c-format
 msgid "Value '%s' for submodule.alternateLocation is not recognized"
 msgstr "不能識別 submodule.alternateLocation 的取值 '%s'"
 
-#: builtin/submodule--helper.c:1772
+#: builtin/submodule--helper.c:1781
 #, c-format
 msgid "refusing to create/use '%s' in another submodule's git dir"
 msgstr "拒絕在其他子模組的 git 路徑建立/使用「%s」"
 
-#: builtin/submodule--helper.c:1813
+#: builtin/submodule--helper.c:1826
 #, c-format
 msgid "clone of '%s' into submodule path '%s' failed"
 msgstr "無法複製 '%s' 到子模組路徑 '%s'"
 
-#: builtin/submodule--helper.c:1818
+#: builtin/submodule--helper.c:1831
 #, c-format
 msgid "directory not empty: '%s'"
 msgstr "目錄不是空的:「%s」"
 
-#: builtin/submodule--helper.c:1830
+#: builtin/submodule--helper.c:1843
 #, c-format
 msgid "could not get submodule directory for '%s'"
 msgstr "無法得到 '%s' 的子模組目錄"
 
-#: builtin/submodule--helper.c:1862
+#: builtin/submodule--helper.c:1876
 msgid "where the new submodule will be cloned to"
 msgstr "新的子模組將要複製的路徑"
 
-#: builtin/submodule--helper.c:1865
+#: builtin/submodule--helper.c:1879
 msgid "name of the new submodule"
 msgstr "新子模組的名稱"
 
-#: builtin/submodule--helper.c:1868
+#: builtin/submodule--helper.c:1882
 msgid "url where to clone the submodule from"
 msgstr "複製子模組的 url 位址"
 
-#: builtin/submodule--helper.c:1876 builtin/submodule--helper.c:3265
+#: builtin/submodule--helper.c:1890 builtin/submodule--helper.c:3383
 msgid "depth for shallow clones"
 msgstr "淺複製的深度"
 
-#: builtin/submodule--helper.c:1879 builtin/submodule--helper.c:2526
-#: builtin/submodule--helper.c:3258
+#: builtin/submodule--helper.c:1893 builtin/submodule--helper.c:2731
+#: builtin/submodule--helper.c:3376
 msgid "force cloning progress"
 msgstr "強制顯示複製進度"
 
-#: builtin/submodule--helper.c:1881 builtin/submodule--helper.c:2528
+#: builtin/submodule--helper.c:1895 builtin/submodule--helper.c:2733
 msgid "disallow cloning into non-empty directory"
 msgstr "不允許複製至非空白目錄"
 
-#: builtin/submodule--helper.c:1888
+#: builtin/submodule--helper.c:1903
+#| msgid ""
+#| "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
+#| "<repository>] [--name <name>] [--depth <depth>] [--single-branch] [--"
+#| "filter <filter-spec>]--url <url> --path <path>"
 msgid ""
 "git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
-"<repository>] [--name <name>] [--depth <depth>] [--single-branch] --url "
-"<url> --path <path>"
+"<repository>] [--name <name>] [--depth <depth>] [--single-branch] [--filter "
+"<filter-spec>] --url <url> --path <path>"
 msgstr ""
-"git submodule--helper clone [--prefix=<路徑>] [--quiet] [--reference <版本庫"
-">] [--name <名字>] [--depth <深度>] [--single-branch] --url <url> --path <路"
-">"
+"git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
+"<repository>] [--name <name>] [--depth <depth>] [--single-branch] [--filter "
+"<filter-spec>] --url <url> --path <path>"
 
-#: builtin/submodule--helper.c:1925
+#: builtin/submodule--helper.c:1943
 #, c-format
 msgid "Invalid update mode '%s' for submodule path '%s'"
 msgstr "子模組 '%2$s' 的更新模式 '%1$s' 無效"
 
-#: builtin/submodule--helper.c:1929
+#: builtin/submodule--helper.c:1947
 #, c-format
 msgid "Invalid update mode '%s' configured for submodule path '%s'"
 msgstr "為子模組 '%2$s' 設定的更新模式 '%1$s' 無效"
 
-#: builtin/submodule--helper.c:2044
+#: builtin/submodule--helper.c:2041
 #, c-format
 msgid "Submodule path '%s' not initialized"
 msgstr "子模組 '%s' 尚未初始化"
 
-#: builtin/submodule--helper.c:2048
+#: builtin/submodule--helper.c:2045
 msgid "Maybe you want to use 'update --init'?"
 msgstr "也許您想要執行 'update --init'?"
 
-#: builtin/submodule--helper.c:2078
+#: builtin/submodule--helper.c:2075
 #, c-format
 msgid "Skipping unmerged submodule %s"
 msgstr "略過未合併的子模組 %s"
 
-#: builtin/submodule--helper.c:2107
+#: builtin/submodule--helper.c:2104
 #, c-format
 msgid "Skipping submodule '%s'"
 msgstr "略過子模組 '%s'"
@@ -22537,226 +23027,257 @@ msgstr "複製 '%s' 失敗。已排程重試作業"
 msgid "Failed to clone '%s' a second time, aborting"
 msgstr "第二次嘗試複製 '%s' 失敗,中止作業"
 
-#: builtin/submodule--helper.c:2373
+#: builtin/submodule--helper.c:2371
 #, c-format
 msgid "Unable to checkout '%s' in submodule path '%s'"
 msgstr "無法在「%2$s」子模組路徑簽出「%1$s」"
 
-#: builtin/submodule--helper.c:2377
+#: builtin/submodule--helper.c:2375
 #, c-format
 msgid "Unable to rebase '%s' in submodule path '%s'"
 msgstr "無法在「%2$s」子模組路徑重定「%1$s」的基底"
 
-#: builtin/submodule--helper.c:2381
+#: builtin/submodule--helper.c:2379
 #, c-format
 msgid "Unable to merge '%s' in submodule path '%s'"
 msgstr "無法在「%2$s」子模組路徑合併「%1$s」"
 
-#: builtin/submodule--helper.c:2385
+#: builtin/submodule--helper.c:2383
 #, c-format
 msgid "Execution of '%s %s' failed in submodule path '%s'"
 msgstr "「%s %s」在「%s」子模組路徑執行失敗"
 
-#: builtin/submodule--helper.c:2409
+#: builtin/submodule--helper.c:2402
 #, c-format
 msgid "Submodule path '%s': checked out '%s'\n"
 msgstr "子模組路徑「%s」:已簽出「%s」\n"
 
-#: builtin/submodule--helper.c:2413
+#: builtin/submodule--helper.c:2406
 #, c-format
 msgid "Submodule path '%s': rebased into '%s'\n"
 msgstr "子模組路徑「%s」:已重定基底至「%s」\n"
 
-#: builtin/submodule--helper.c:2417
+#: builtin/submodule--helper.c:2410
 #, c-format
 msgid "Submodule path '%s': merged in '%s'\n"
 msgstr "子模組路徑「%s」:已在「%s」合併\n"
 
-#: builtin/submodule--helper.c:2421
+#: builtin/submodule--helper.c:2414
 #, c-format
 msgid "Submodule path '%s': '%s %s'\n"
 msgstr "子模組路徑「%s」:「%s %s」\n"
 
-#: builtin/submodule--helper.c:2445
+#: builtin/submodule--helper.c:2438
 #, c-format
 msgid "Unable to fetch in submodule path '%s'; trying to directly fetch %s:"
 msgstr "無法在子模組路徑 「%s」中取得。嘗試直接取得 %s:"
 
-#: builtin/submodule--helper.c:2454
+#: builtin/submodule--helper.c:2447
 #, c-format
 msgid ""
 "Fetched in submodule path '%s', but it did not contain %s. Direct fetching "
 "of that commit failed."
 msgstr "已經取得「%s」子模組路徑,這個路徑卻未包含「%s」。直接取得該提交失敗。"
 
-#: builtin/submodule--helper.c:2505 builtin/submodule--helper.c:2575
-#: builtin/submodule--helper.c:2813
+#: builtin/submodule--helper.c:2481
+#, c-format
+msgid ""
+"Submodule (%s) branch configured to inherit branch from superproject, but "
+"the superproject is not on any branch"
+msgstr "子模組(%s)的分支設定為繼承上級專案的分支,但是上級專案不在任何分支上"
+
+#: builtin/submodule--helper.c:2499
+#, c-format
+msgid "could not get a repository handle for submodule '%s'"
+msgstr "無法獲得子模組 '%s' 的版本庫句柄"
+
+#: builtin/submodule--helper.c:2588
+#, c-format
+msgid "Unable to find current revision in submodule path '%s'"
+msgstr "無法在子模組路徑「%s」中尋找目前的修訂版本"
+
+#: builtin/submodule--helper.c:2599
+#, c-format
+msgid "Unable to fetch in submodule path '%s'"
+msgstr "無法在子模組路徑「%s」中抓取"
+
+#: builtin/submodule--helper.c:2604
+#, c-format
+msgid "Unable to find %s revision in submodule path '%s'"
+msgstr "無法在子模組路徑「%s」中尋找 %s 修訂版本"
+
+#: builtin/submodule--helper.c:2640
+#, c-format
+msgid "Failed to recurse into submodule path '%s'"
+msgstr "無法遞迴子模組路徑「%s」"
+
+#: builtin/submodule--helper.c:2699
+msgid "force checkout updates"
+msgstr "強制簽出更新"
+
+#: builtin/submodule--helper.c:2701
+msgid "initialize uninitialized submodules before update"
+msgstr "在更新前,初始化尚未進行初始化的子模組"
+
+#: builtin/submodule--helper.c:2703
+msgid "use SHA-1 of submodule's remote tracking branch"
+msgstr "使用子模組遠端追蹤分支的 SHA-1"
+
+#: builtin/submodule--helper.c:2705
+msgid "traverse submodules recursively"
+msgstr "遞迴遍歷子模組"
+
+#: builtin/submodule--helper.c:2707
+msgid "don't fetch new objects from the remote site"
+msgstr "不從遠端站台取得新物件"
+
+#: builtin/submodule--helper.c:2710 builtin/submodule--helper.c:2892
 msgid "path into the working tree"
 msgstr "到工作區的路徑"
 
-#: builtin/submodule--helper.c:2508 builtin/submodule--helper.c:2580
+#: builtin/submodule--helper.c:2713
 msgid "path into the working tree, across nested submodule boundaries"
 msgstr "工作區中的路徑,遞迴嵌套子模組"
 
-#: builtin/submodule--helper.c:2512 builtin/submodule--helper.c:2578
+#: builtin/submodule--helper.c:2717
 msgid "rebase, merge, checkout or none"
 msgstr "rebase、merge、checkout 或 none"
 
-#: builtin/submodule--helper.c:2518
+#: builtin/submodule--helper.c:2723
 msgid "create a shallow clone truncated to the specified number of revisions"
 msgstr "建立一個縮減至指定版本數的淺複製"
 
-#: builtin/submodule--helper.c:2521
+#: builtin/submodule--helper.c:2726
 msgid "parallel jobs"
 msgstr "並行任務"
 
-#: builtin/submodule--helper.c:2523
+#: builtin/submodule--helper.c:2728
 msgid "whether the initial clone should follow the shallow recommendation"
 msgstr "初始複製是否應該遵循建議的淺複製選項"
 
-#: builtin/submodule--helper.c:2524
+#: builtin/submodule--helper.c:2729
 msgid "don't print cloning progress"
 msgstr "不要輸出複製進度"
 
-#: builtin/submodule--helper.c:2535
-msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
-msgstr "git submodule--helper update-clone [--prefix=<路徑>] [<路徑>...]"
+#: builtin/submodule--helper.c:2741
+msgid ""
+"git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] "
+"[-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-"
+"shallow] [--reference <repository>] [--recursive] [--[no-]single-branch] "
+"[--] [<path>...]"
+msgstr ""
+"git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] "
+"[-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-"
+"shallow] [--reference <repository>] [--recursive] [--[no-]single-branch] "
+"[--] [<path>...]"
 
-#: builtin/submodule--helper.c:2548
+#: builtin/submodule--helper.c:2767
 msgid "bad value for update parameter"
 msgstr "update 參數取值錯誤"
 
-#: builtin/submodule--helper.c:2566
-msgid "suppress output for update by rebase or merge"
-msgstr "隱藏 rebase 或 merge 觸發之更新的輸出"
-
-#: builtin/submodule--helper.c:2567
-msgid "force checkout updates"
-msgstr "強制簽出更新"
-
-#: builtin/submodule--helper.c:2569
-msgid "don't fetch new objects from the remote site"
-msgstr "不從遠端站台取得新物件"
-
-#: builtin/submodule--helper.c:2571
-msgid "overrides update mode in case the repository is a fresh clone"
-msgstr "如果版本庫是剛複製的,就覆蓋更新模式"
-
-#: builtin/submodule--helper.c:2572
-msgid "depth for shallow fetch"
-msgstr "淺 fetch 的深度"
-
-#: builtin/submodule--helper.c:2582
-msgid "sha1"
-msgstr "sha1"
-
-#: builtin/submodule--helper.c:2583
-msgid "SHA1 expected by superproject"
-msgstr "上層專案預期應是 SHA1"
-
-#: builtin/submodule--helper.c:2585
-msgid "subsha1"
-msgstr "subsha1"
-
-#: builtin/submodule--helper.c:2586
-msgid "SHA1 of submodule's HEAD"
-msgstr "子模組 HEAD 的 SHA1"
-
-#: builtin/submodule--helper.c:2592
-msgid "git submodule--helper run-update-procedure [<options>] <path>"
-msgstr "git submodule--helper run-update-procedure [<選項>] [<路徑>]"
-
-#: builtin/submodule--helper.c:2663
-#, c-format
-msgid ""
-"Submodule (%s) branch configured to inherit branch from superproject, but "
-"the superproject is not on any branch"
-msgstr "子模組(%s)的分支設定為繼承上級專案的分支,但是上級專案不在任何分支上"
-
-#: builtin/submodule--helper.c:2781
-#, c-format
-msgid "could not get a repository handle for submodule '%s'"
-msgstr "無法獲得子模組 '%s' 的版本庫句柄"
-
-#: builtin/submodule--helper.c:2814
+#: builtin/submodule--helper.c:2893
 msgid "recurse into submodules"
 msgstr "在子模組中遞迴"
 
-#: builtin/submodule--helper.c:2820
+#: builtin/submodule--helper.c:2899
 msgid "git submodule--helper absorb-git-dirs [<options>] [<path>...]"
 msgstr "git submodule--helper absorb-git-dirs [<選項>] [<路徑>...]"
 
-#: builtin/submodule--helper.c:2876
+#: builtin/submodule--helper.c:2955
 msgid "check if it is safe to write to the .gitmodules file"
 msgstr "檢查寫入 .gitmodules 檔案是否安全"
 
-#: builtin/submodule--helper.c:2879
+#: builtin/submodule--helper.c:2958
 msgid "unset the config in the .gitmodules file"
 msgstr "取消 .gitmodules 檔案中的設定"
 
-#: builtin/submodule--helper.c:2884
+#: builtin/submodule--helper.c:2963
 msgid "git submodule--helper config <name> [<value>]"
 msgstr "git submodule--helper config <名稱> [<值>]"
 
-#: builtin/submodule--helper.c:2885
+#: builtin/submodule--helper.c:2964
 msgid "git submodule--helper config --unset <name>"
 msgstr "git submodule--helper config --unset <名稱>"
 
-#: builtin/submodule--helper.c:2886
-msgid "git submodule--helper config --check-writeable"
-msgstr "git submodule--helper config --check-writeable"
-
-#: builtin/submodule--helper.c:2905 builtin/submodule--helper.c:3121
-#: builtin/submodule--helper.c:3277
+#: builtin/submodule--helper.c:2984 builtin/submodule--helper.c:3238
+#: builtin/submodule--helper.c:3395
 msgid "please make sure that the .gitmodules file is in the working tree"
 msgstr "請確認 .gitmodules 檔案在工作區裡"
 
-#: builtin/submodule--helper.c:2921
+#: builtin/submodule--helper.c:3000
 msgid "suppress output for setting url of a submodule"
 msgstr "隱藏子模組設定 URL 的輸出"
 
-#: builtin/submodule--helper.c:2925
+#: builtin/submodule--helper.c:3004
 msgid "git submodule--helper set-url [--quiet] <path> <newurl>"
 msgstr "git submodule--helper set-url [--quiet] <路徑> <新 URL>"
 
-#: builtin/submodule--helper.c:2958
+#: builtin/submodule--helper.c:3037
 msgid "set the default tracking branch to master"
 msgstr "將預設的追蹤分支設為 master"
 
-#: builtin/submodule--helper.c:2960
+#: builtin/submodule--helper.c:3039
 msgid "set the default tracking branch"
 msgstr "設定預設追蹤分支"
 
-#: builtin/submodule--helper.c:2964
+#: builtin/submodule--helper.c:3043
 msgid "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 msgstr "git submodule--helper set-branch [-q|--quiet] (-d|--default) <path>"
 
-#: builtin/submodule--helper.c:2965
+#: builtin/submodule--helper.c:3044
 msgid ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 msgstr ""
 "git submodule--helper set-branch [-q|--quiet] (-b|--branch) <branch> <path>"
 
-#: builtin/submodule--helper.c:2972
+#: builtin/submodule--helper.c:3051
 msgid "--branch or --default required"
 msgstr "需要 --branch 或 --default"
 
-#: builtin/submodule--helper.c:3038
+#: builtin/submodule--helper.c:3072 builtin/submodule--helper.c:3375
+msgid "print only error messages"
+msgstr "只輸出錯誤訊息"
+
+#: builtin/submodule--helper.c:3073
+msgid "force creation"
+msgstr "強制建立"
+
+#: builtin/submodule--helper.c:3081
+msgid "show whether the branch would be created"
+msgstr "顯示分支是否會被建立"
+
+#: builtin/submodule--helper.c:3085
+#| msgid ""
+#| "git submodule--helper create-branch [-f|--force] [--create-reflog] [-q|--"
+#| "quiet] [-t|--track] [-n|--dry-run] <name> <start_oid> <start_name>"
+msgid ""
+"git submodule--helper create-branch [-f|--force] [--create-reflog] [-q|--"
+"quiet] [-t|--track] [-n|--dry-run] <name> <start-oid> <start-name>"
+msgstr ""
+"git submodule--helper create-branch [-f|--force] [--create-reflog] [-q|--"
+"quiet] [-t|--track] [-n|--dry-run] <name> <start-oid> <start-name>"
+
+#: builtin/submodule--helper.c:3097
+#, c-format
+msgid "creating branch '%s'"
+msgstr "建立分支「%s」"
+
+#: builtin/submodule--helper.c:3155
 #, c-format
 msgid "Adding existing repo at '%s' to the index\n"
 msgstr "正在將位於 '%s' 的現有版本庫加入至索引\n"
 
-#: builtin/submodule--helper.c:3041
+#: builtin/submodule--helper.c:3158
 #, c-format
 msgid "'%s' already exists and is not a valid git repo"
 msgstr "「%s」已存在,且不是有效的 git 版本庫"
 
-#: builtin/submodule--helper.c:3054
+#: builtin/submodule--helper.c:3171
 #, c-format
 msgid "A git directory for '%s' is found locally with remote(s):\n"
 msgstr "在本機找到「%s」Git 目錄,與其對應的遠端版本庫:\n"
 
-#: builtin/submodule--helper.c:3061
+#: builtin/submodule--helper.c:3178
 #, c-format
 msgid ""
 "If you want to reuse this local git directory instead of cloning again from\n"
@@ -22771,83 +23292,79 @@ msgstr ""
 "請使用 '--force' 選項。如果本機 git 目錄不是正確的版本庫\n"
 "假如您不太懂意思,請使用 '--name' 選項輸入其他名稱。"
 
-#: builtin/submodule--helper.c:3073
+#: builtin/submodule--helper.c:3190
 #, c-format
 msgid "Reactivating local git directory for submodule '%s'\n"
 msgstr "正在重新啟用「%s」子模組的本機 Git 目錄\n"
 
-#: builtin/submodule--helper.c:3110
+#: builtin/submodule--helper.c:3227
 #, c-format
 msgid "unable to checkout submodule '%s'"
 msgstr "無法簽出「%s」子模組"
 
-#: builtin/submodule--helper.c:3149
+#: builtin/submodule--helper.c:3266
 #, c-format
 msgid "Failed to add submodule '%s'"
 msgstr "無法加入子模組「%s」"
 
-#: builtin/submodule--helper.c:3153 builtin/submodule--helper.c:3158
-#: builtin/submodule--helper.c:3166
+#: builtin/submodule--helper.c:3270 builtin/submodule--helper.c:3275
+#: builtin/submodule--helper.c:3283
 #, c-format
 msgid "Failed to register submodule '%s'"
 msgstr "無法註冊子模組「%s」"
 
-#: builtin/submodule--helper.c:3222
+#: builtin/submodule--helper.c:3339
 #, c-format
 msgid "'%s' already exists in the index"
 msgstr "「%s」已在索引中"
 
-#: builtin/submodule--helper.c:3225
+#: builtin/submodule--helper.c:3342
 #, c-format
 msgid "'%s' already exists in the index and is not a submodule"
 msgstr "「%s」已在索引中,且不是子模組"
 
-#: builtin/submodule--helper.c:3254
+#: builtin/submodule--helper.c:3372
 msgid "branch of repository to add as submodule"
 msgstr "要加入為子模組的版本庫分支"
 
-#: builtin/submodule--helper.c:3255
+#: builtin/submodule--helper.c:3373
 msgid "allow adding an otherwise ignored submodule path"
 msgstr "允許加入忽略的子模組路徑"
 
-#: builtin/submodule--helper.c:3257
-msgid "print only error messages"
-msgstr "只輸出錯誤訊息"
-
-#: builtin/submodule--helper.c:3261
+#: builtin/submodule--helper.c:3379
 msgid "borrow the objects from reference repositories"
 msgstr "從引用的版本庫借用物件"
 
-#: builtin/submodule--helper.c:3263
+#: builtin/submodule--helper.c:3381
 msgid ""
 "sets the submodule’s name to the given string instead of defaulting to its "
 "path"
 msgstr "將子模組名稱設定為指定字串,而非預設的路徑名稱"
 
-#: builtin/submodule--helper.c:3270
+#: builtin/submodule--helper.c:3388
 msgid "git submodule--helper add [<options>] [--] <repository> [<path>]"
 msgstr "git submodule--helper add [<選項>] [--] <版本庫> [<路徑>]"
 
-#: builtin/submodule--helper.c:3298
+#: builtin/submodule--helper.c:3416
 msgid "Relative path can only be used from the toplevel of the working tree"
 msgstr "只能在工作區的頂級目錄中使用相對路徑"
 
-#: builtin/submodule--helper.c:3306
+#: builtin/submodule--helper.c:3425
 #, c-format
 msgid "repo URL: '%s' must be absolute or begin with ./|../"
 msgstr "版本庫 URL:「%s」必須是絕對路徑,或開頭是 ./|../"
 
-#: builtin/submodule--helper.c:3341
+#: builtin/submodule--helper.c:3460
 #, c-format
 msgid "'%s' is not a valid submodule name"
 msgstr "「%s」不是有效的子模組名稱"
 
-#: builtin/submodule--helper.c:3405 git.c:452 git.c:726
+#: builtin/submodule--helper.c:3520 git.c:453 git.c:729
 #, c-format
 msgid "%s doesn't support --super-prefix"
 msgstr "%s 不支援 --super-prefix"
 
-#: builtin/submodule--helper.c:3411
+#: builtin/submodule--helper.c:3526
 #, c-format
 msgid "'%s' is not a valid submodule--helper subcommand"
 msgstr "'%s' 不是一個有效的 submodule--helper 子指令"
@@ -22880,7 +23397,7 @@ msgstr "原因"
 msgid "reason of the update"
 msgstr "更新的原因"
 
-#: builtin/tag.c:25
+#: builtin/tag.c:26
 msgid ""
 "git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>]\n"
 "        <tagname> [<head>]"
@@ -22888,11 +23405,11 @@ msgstr ""
 "git tag [-a | -s | -u <key-id>] [-f] [-m <消息> | -F <檔案>]\n"
 "        <標籤名> [<head>]"
 
-#: builtin/tag.c:27
+#: builtin/tag.c:28
 msgid "git tag -d <tagname>..."
 msgstr "git tag -d <標籤名>..."
 
-#: builtin/tag.c:28
+#: builtin/tag.c:29
 msgid ""
 "git tag -l [-n[<num>]] [--contains <commit>] [--no-contains <commit>] [--"
 "points-at <object>]\n"
@@ -22903,21 +23420,21 @@ msgstr ""
 "at <物件>]\n"
 "        [--format=<格式>] [--merged <提交>] [--no-merged <提交>] [<模式>...]"
 
-#: builtin/tag.c:30
+#: builtin/tag.c:31
 msgid "git tag -v [--format=<format>] <tagname>..."
 msgstr "git tag -v [--format=<格式>] <標籤名>..."
 
-#: builtin/tag.c:100
+#: builtin/tag.c:101
 #, c-format
 msgid "tag '%s' not found."
 msgstr "未發現標籤 '%s'。"
 
-#: builtin/tag.c:135
+#: builtin/tag.c:136
 #, c-format
 msgid "Deleted tag '%s' (was %s)\n"
 msgstr "已刪除標籤 '%s'(曾為 %s)\n"
 
-#: builtin/tag.c:170
+#: builtin/tag.c:171
 #, c-format
 msgid ""
 "\n"
@@ -22930,7 +23447,7 @@ msgstr ""
 "  %s\n"
 "以 '%c' 開頭的行將被忽略。\n"
 
-#: builtin/tag.c:174
+#: builtin/tag.c:175
 #, c-format
 msgid ""
 "\n"
@@ -22944,11 +23461,11 @@ msgstr ""
 "  %s\n"
 "以 '%c' 開頭的行將被保留,如果您願意也可以刪除它們。\n"
 
-#: builtin/tag.c:240
+#: builtin/tag.c:241
 msgid "unable to sign the tag"
 msgstr "無法簽署標籤"
 
-#: builtin/tag.c:258
+#: builtin/tag.c:259
 #, c-format
 msgid ""
 "You have created a nested tag. The object referred to by your new tag is\n"
@@ -22961,115 +23478,119 @@ msgstr ""
 "\n"
 "\tgit tag -f %s %s^{}"
 
-#: builtin/tag.c:274
+#: builtin/tag.c:275
 msgid "bad object type."
 msgstr "壞的物件類型。"
 
-#: builtin/tag.c:325
+#: builtin/tag.c:326
 msgid "no tag message?"
 msgstr "無標籤說明?"
 
-#: builtin/tag.c:332
+#: builtin/tag.c:333
 #, c-format
 msgid "The tag message has been left in %s\n"
 msgstr "標籤說明被保留在 %s\n"
 
-#: builtin/tag.c:444
+#: builtin/tag.c:445
 msgid "list tag names"
 msgstr "列出標籤名稱"
 
-#: builtin/tag.c:446
+#: builtin/tag.c:447
 msgid "print <n> lines of each tag message"
 msgstr "每個標籤訊息列印 <n> 行"
 
-#: builtin/tag.c:448
+#: builtin/tag.c:449
 msgid "delete tags"
 msgstr "刪除標籤"
 
-#: builtin/tag.c:449
+#: builtin/tag.c:450
 msgid "verify tags"
 msgstr "驗證標籤"
 
-#: builtin/tag.c:451
+#: builtin/tag.c:452
 msgid "Tag creation options"
 msgstr "標籤建立選項"
 
-#: builtin/tag.c:453
+#: builtin/tag.c:454
 msgid "annotated tag, needs a message"
 msgstr "附註標籤,需要一個說明"
 
-#: builtin/tag.c:455
+#: builtin/tag.c:456
 msgid "tag message"
 msgstr "標籤說明"
 
-#: builtin/tag.c:457
+#: builtin/tag.c:458
 msgid "force edit of tag message"
 msgstr "強制編輯標籤說明"
 
-#: builtin/tag.c:458
+#: builtin/tag.c:459
 msgid "annotated and GPG-signed tag"
 msgstr "附註並附加 GPG 簽名的標籤"
 
-#: builtin/tag.c:461
+#: builtin/tag.c:462
 msgid "use another key to sign the tag"
 msgstr "使用另外的私鑰簽名該標籤"
 
-#: builtin/tag.c:462
+#: builtin/tag.c:463
 msgid "replace the tag if exists"
 msgstr "如果存在,取代現有的標籤"
 
-#: builtin/tag.c:463 builtin/update-ref.c:511
+#: builtin/tag.c:464 builtin/update-ref.c:511
 msgid "create a reflog"
 msgstr "建立引用日誌"
 
-#: builtin/tag.c:465
+#: builtin/tag.c:466
 msgid "Tag listing options"
 msgstr "標籤列表選項"
 
-#: builtin/tag.c:466
+#: builtin/tag.c:467
 msgid "show tag list in columns"
 msgstr "以列的方式顯示標籤列表"
 
-#: builtin/tag.c:467 builtin/tag.c:469
+#: builtin/tag.c:468 builtin/tag.c:470
 msgid "print only tags that contain the commit"
 msgstr "只列印包含該提交的標籤"
 
-#: builtin/tag.c:468 builtin/tag.c:470
+#: builtin/tag.c:469 builtin/tag.c:471
 msgid "print only tags that don't contain the commit"
 msgstr "只列印不包含該提交的標籤"
 
-#: builtin/tag.c:471
+#: builtin/tag.c:472
 msgid "print only tags that are merged"
 msgstr "只列印已經合併的標籤"
 
-#: builtin/tag.c:472
+#: builtin/tag.c:473
 msgid "print only tags that are not merged"
 msgstr "只列印尚未合併的標籤"
 
-#: builtin/tag.c:476
+#: builtin/tag.c:477
 msgid "print only tags of the object"
 msgstr "只列印指向該物件的標籤"
 
-#: builtin/tag.c:558
+#: builtin/tag.c:559
 #, c-format
 msgid "the '%s' option is only allowed in list mode"
 msgstr "「%s」選項只能在列表顯示模式使用"
 
-#: builtin/tag.c:597
+#: builtin/tag.c:598
 #, c-format
 msgid "'%s' is not a valid tag name."
 msgstr "'%s' 不是一個有效的標籤名稱。"
 
-#: builtin/tag.c:602
+#: builtin/tag.c:603
 #, c-format
 msgid "tag '%s' already exists"
 msgstr "標籤 '%s' 已存在"
 
-#: builtin/tag.c:633
+#: builtin/tag.c:634
 #, c-format
 msgid "Updated tag '%s' (was %s)\n"
 msgstr "已更新標籤 '%s'(曾為 %s)\n"
 
+#: builtin/unpack-objects.c:95
+msgid "pack exceeds maximum allowed size"
+msgstr "包超過了最大允許值"
+
 #: builtin/unpack-objects.c:504
 msgid "Unpacking objects"
 msgstr "展開物件中"
@@ -23126,155 +23647,155 @@ msgstr " OK"
 msgid "git update-index [<options>] [--] [<file>...]"
 msgstr "git update-index [<選項>] [--] [<檔案>...]"
 
-#: builtin/update-index.c:974
+#: builtin/update-index.c:993
 msgid "continue refresh even when index needs update"
 msgstr "當索引需要更新時繼續重新整理"
 
-#: builtin/update-index.c:977
+#: builtin/update-index.c:996
 msgid "refresh: ignore submodules"
 msgstr "重新整理:忽略子模組"
 
-#: builtin/update-index.c:980
+#: builtin/update-index.c:999
 msgid "do not ignore new files"
 msgstr "不忽略新的檔案"
 
-#: builtin/update-index.c:982
+#: builtin/update-index.c:1001
 msgid "let files replace directories and vice-versa"
 msgstr "讓檔案取代目錄(反之亦然)"
 
-#: builtin/update-index.c:984
+#: builtin/update-index.c:1003
 msgid "notice files missing from worktree"
 msgstr "通知檔案從工作區遺失"
 
-#: builtin/update-index.c:986
+#: builtin/update-index.c:1005
 msgid "refresh even if index contains unmerged entries"
 msgstr "即使索引區包含未合併的條目也執行重新整理"
 
-#: builtin/update-index.c:989
+#: builtin/update-index.c:1008
 msgid "refresh stat information"
 msgstr "重新整理統計訊息"
 
-#: builtin/update-index.c:993
+#: builtin/update-index.c:1012
 msgid "like --refresh, but ignore assume-unchanged setting"
 msgstr "類似於 --refresh,但是忽略 assume-unchanged 設定"
 
-#: builtin/update-index.c:997
+#: builtin/update-index.c:1016
 msgid "<mode>,<object>,<path>"
 msgstr "<存取模式>,<物件>,<路徑>"
 
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1017
 msgid "add the specified entry to the index"
 msgstr "新增指定的條目到索引區"
 
-#: builtin/update-index.c:1008
+#: builtin/update-index.c:1027
 msgid "mark files as \"not changing\""
 msgstr "把檔案標記為 \"沒有變更\""
 
-#: builtin/update-index.c:1011
+#: builtin/update-index.c:1030
 msgid "clear assumed-unchanged bit"
 msgstr "清除 assumed-unchanged 位"
 
-#: builtin/update-index.c:1014
+#: builtin/update-index.c:1033
 msgid "mark files as \"index-only\""
 msgstr "把檔案標記為 \"僅索引\""
 
-#: builtin/update-index.c:1017
+#: builtin/update-index.c:1036
 msgid "clear skip-worktree bit"
 msgstr "清除 skip-worktree 位"
 
-#: builtin/update-index.c:1020
+#: builtin/update-index.c:1039
 msgid "do not touch index-only entries"
 msgstr "不要建立只有索引的項目"
 
-#: builtin/update-index.c:1022
+#: builtin/update-index.c:1041
 msgid "add to index only; do not add content to object database"
 msgstr "只新增到索引區;不新增物件到物件庫"
 
-#: builtin/update-index.c:1024
+#: builtin/update-index.c:1043
 msgid "remove named paths even if present in worktree"
 msgstr "即使存在工作區裡,也刪除路徑"
 
-#: builtin/update-index.c:1026
+#: builtin/update-index.c:1045
 msgid "with --stdin: input lines are terminated by null bytes"
 msgstr "攜帶 --stdin:輸入的行以 null 字元終止"
 
-#: builtin/update-index.c:1028
+#: builtin/update-index.c:1047
 msgid "read list of paths to be updated from standard input"
 msgstr "從標準輸入中讀取需要更新的路徑列表"
 
-#: builtin/update-index.c:1032
+#: builtin/update-index.c:1051
 msgid "add entries from standard input to the index"
 msgstr "從標準輸入新增條目到索引區"
 
-#: builtin/update-index.c:1036
+#: builtin/update-index.c:1055
 msgid "repopulate stages #2 and #3 for the listed paths"
 msgstr "為指定檔案重新生成第2和第3暫存區"
 
-#: builtin/update-index.c:1040
+#: builtin/update-index.c:1059
 msgid "only update entries that differ from HEAD"
 msgstr "只更新與 HEAD 不同的條目"
 
-#: builtin/update-index.c:1044
+#: builtin/update-index.c:1063
 msgid "ignore files missing from worktree"
 msgstr "忽略工作區遺失的檔案"
 
-#: builtin/update-index.c:1047
+#: builtin/update-index.c:1066
 msgid "report actions to standard output"
 msgstr "在標準輸出顯示動作"
 
-#: builtin/update-index.c:1049
+#: builtin/update-index.c:1068
 msgid "(for porcelains) forget saved unresolved conflicts"
 msgstr "(for porcelains) 忘記儲存的未解決的衝突"
 
-#: builtin/update-index.c:1053
+#: builtin/update-index.c:1072
 msgid "write index in this format"
 msgstr "以這種格式寫入索引區"
 
-#: builtin/update-index.c:1055
+#: builtin/update-index.c:1074
 msgid "enable or disable split index"
 msgstr "啟用或停用索引分割"
 
-#: builtin/update-index.c:1057
+#: builtin/update-index.c:1076
 msgid "enable/disable untracked cache"
 msgstr "啟用/停用對未追蹤檔案的快取"
 
-#: builtin/update-index.c:1059
+#: builtin/update-index.c:1078
 msgid "test if the filesystem supports untracked cache"
 msgstr "測試檔案系統是否支援未追蹤檔案快取"
 
-#: builtin/update-index.c:1061
+#: builtin/update-index.c:1080
 msgid "enable untracked cache without testing the filesystem"
 msgstr "無需檢測檔案系統,啟用對未追蹤檔案的快取"
 
-#: builtin/update-index.c:1063
+#: builtin/update-index.c:1082
 msgid "write out the index even if is not flagged as changed"
 msgstr "即使沒有被標記為已更改,也要寫出索引"
 
-#: builtin/update-index.c:1065
+#: builtin/update-index.c:1084
 msgid "enable or disable file system monitor"
 msgstr "啟用或停用檔案系統監控"
 
-#: builtin/update-index.c:1067
+#: builtin/update-index.c:1086
 msgid "mark files as fsmonitor valid"
 msgstr "標記檔案為 fsmonitor 有效"
 
-#: builtin/update-index.c:1070
+#: builtin/update-index.c:1089
 msgid "clear fsmonitor valid bit"
 msgstr "清除 fsmonitor 有效位"
 
-#: builtin/update-index.c:1173
+#: builtin/update-index.c:1195
 msgid ""
 "core.splitIndex is set to false; remove or change it, if you really want to "
 "enable split index"
 msgstr "core.splitIndex 被設定為 false。如果您確定要啟用索引分割,請移除或修改"
 
-#: builtin/update-index.c:1182
+#: builtin/update-index.c:1204
 msgid ""
 "core.splitIndex is set to true; remove or change it, if you really want to "
 "disable split index"
 msgstr "core.splitIndex 被設定為 true。如果您確定要停用索引分割,請移除或修改"
 
-#: builtin/update-index.c:1194
+#: builtin/update-index.c:1216
 msgid ""
 "core.untrackedCache is set to true; remove or change it, if you really want "
 "to disable the untracked cache"
@@ -23282,11 +23803,11 @@ msgstr ""
 "core.untrackedCache 被設定為 true。如果您確定要停用未追蹤檔案的快取,請移除或"
 "修改"
 
-#: builtin/update-index.c:1198
+#: builtin/update-index.c:1220
 msgid "Untracked cache disabled"
 msgstr "快取未追蹤檔案被停用"
 
-#: builtin/update-index.c:1206
+#: builtin/update-index.c:1228
 msgid ""
 "core.untrackedCache is set to false; remove or change it, if you really want "
 "to enable the untracked cache"
@@ -23294,25 +23815,25 @@ msgstr ""
 "core.untrackedCache 被設定為 false。如果您確定要啟用未追蹤檔案快取,請移除或"
 "修改"
 
-#: builtin/update-index.c:1210
+#: builtin/update-index.c:1232
 #, c-format
 msgid "Untracked cache enabled for '%s'"
 msgstr "快取未追蹤檔案在 '%s' 啟用"
 
-#: builtin/update-index.c:1218
+#: builtin/update-index.c:1241
 msgid "core.fsmonitor is unset; set it if you really want to enable fsmonitor"
 msgstr "core.fsmonitor 未設定;如果想要啟用 fsmonitor 請設定該選項"
 
-#: builtin/update-index.c:1222
+#: builtin/update-index.c:1246
 msgid "fsmonitor enabled"
 msgstr "fsmonitor 被啟用"
 
-#: builtin/update-index.c:1225
+#: builtin/update-index.c:1250
 msgid ""
 "core.fsmonitor is set; remove it if you really want to disable fsmonitor"
 msgstr "core.fsmonitor 已設定;如果想要停用 fsmonitor 請移除該選項"
 
-#: builtin/update-index.c:1229
+#: builtin/update-index.c:1254
 msgid "fsmonitor disabled"
 msgstr "fsmonitor 被停用"
 
@@ -23344,10 +23865,6 @@ msgstr "標準輸入有以 NUL 字元終止的參數"
 msgid "read updates from stdin"
 msgstr "從標準輸入讀取更新"
 
-#: builtin/update-server-info.c:7
-msgid "git update-server-info [--force]"
-msgstr "git update-server-info [--force]"
-
 #: builtin/update-server-info.c:15
 msgid "update the info files from scratch"
 msgstr "從頭開始更新檔案訊息"
@@ -23429,171 +23946,194 @@ msgid "git worktree remove [<options>] <worktree>"
 msgstr "git worktree remove [<選項>] <工作區>"
 
 #: builtin/worktree.c:25
+msgid "git worktree repair [<path>...]"
+msgstr "git worktree repair [<路徑>...]"
+
+#: builtin/worktree.c:26
 msgid "git worktree unlock <path>"
 msgstr "git worktree unlock <路徑>"
 
-#: builtin/worktree.c:75
+#: builtin/worktree.c:76
 #, c-format
 msgid "Removing %s/%s: %s"
 msgstr "移除 %s/%s: %s"
 
-#: builtin/worktree.c:148
+#: builtin/worktree.c:149
 msgid "report pruned working trees"
-msgstr "報告除的工作區"
+msgstr "報告除的工作區"
 
-#: builtin/worktree.c:150
+#: builtin/worktree.c:151
 msgid "expire working trees older than <time>"
 msgstr "將早於 <時間> 的工作區過期"
 
-#: builtin/worktree.c:220
+#: builtin/worktree.c:221
 #, c-format
 msgid "'%s' already exists"
 msgstr "'%s' 已經存在"
 
-#: builtin/worktree.c:229
+#: builtin/worktree.c:230
 #, c-format
 msgid "unusable worktree destination '%s'"
 msgstr "無法使用的工作目錄目的地「%s」"
 
-#: builtin/worktree.c:234
+#: builtin/worktree.c:235
 #, c-format
 msgid ""
 "'%s' is a missing but locked worktree;\n"
 "use '%s -f -f' to override, or 'unlock' and 'prune' or 'remove' to clear"
 msgstr ""
-"'%s' 是個遺失但被鎖定的工作區;\n"
-"使用 '%s -f -f' 覆蓋,或 'unlock' 和 'prune' 或 'remove' 清除"
+"「%s」是個遺失但被鎖定的工作區;\n"
+"使用「%s -f -f」覆蓋,或「unlock」和「prune」或「remove」清除"
 
-#: builtin/worktree.c:236
+#: builtin/worktree.c:237
 #, c-format
 msgid ""
 "'%s' is a missing but already registered worktree;\n"
 "use '%s -f' to override, or 'prune' or 'remove' to clear"
 msgstr ""
-"'%s' 是個遺失但已註冊的工作區;\n"
-"使用 '%s -f' 覆蓋,或 'prune' 或 'remove' 清除"
+"「%s」是個遺失但已註冊的工作區;\n"
+"使用「%s -f」覆蓋,或「prune」或「remove」清除"
+
+#: builtin/worktree.c:248
+#, c-format
+msgid "failed to copy '%s' to '%s'; sparse-checkout may not work correctly"
+msgstr "無法將「%s」複製到「%s」;稀疏簽出可能無法正常運作"
+
+#: builtin/worktree.c:268
+#, c-format
+msgid "failed to copy worktree config from '%s' to '%s'"
+msgstr "無法將工作區組態從「%s」複製到「%s」"
+
+#: builtin/worktree.c:280 builtin/worktree.c:285
+#, c-format
+msgid "failed to unset '%s' in '%s'"
+msgstr "無法取消「%2$s」中「%1$s」的設定"
 
-#: builtin/worktree.c:287
+#: builtin/worktree.c:356
 #, c-format
 msgid "could not create directory of '%s'"
 msgstr "不能建立目錄 '%s'"
 
-#: builtin/worktree.c:309
+#: builtin/worktree.c:378
 msgid "initializing"
 msgstr "正在初始化"
 
-#: builtin/worktree.c:420 builtin/worktree.c:426
+#: builtin/worktree.c:492 builtin/worktree.c:498
 #, c-format
 msgid "Preparing worktree (new branch '%s')"
 msgstr "準備工作區(新分支 '%s')"
 
-#: builtin/worktree.c:422
+#: builtin/worktree.c:494
 #, c-format
 msgid "Preparing worktree (resetting branch '%s'; was at %s)"
 msgstr "準備工作區(重設分支 '%s',之前為 %s)"
 
-#: builtin/worktree.c:431
+#: builtin/worktree.c:503
 #, c-format
 msgid "Preparing worktree (checking out '%s')"
 msgstr "準備工作區(簽出 '%s')"
 
-#: builtin/worktree.c:437
+#: builtin/worktree.c:509
 #, c-format
 msgid "Preparing worktree (detached HEAD %s)"
 msgstr "準備工作區(分離開頭指標 %s)"
 
-#: builtin/worktree.c:482
+#: builtin/worktree.c:554
 msgid "checkout <branch> even if already checked out in other worktree"
 msgstr "簽出 <分支>,即使已經被簽出到其它工作區"
 
-#: builtin/worktree.c:485
+#: builtin/worktree.c:557
 msgid "create a new branch"
 msgstr "建立一個新分支"
 
-#: builtin/worktree.c:487
+#: builtin/worktree.c:559
 msgid "create or reset a branch"
 msgstr "建立或重設一個分支"
 
-#: builtin/worktree.c:489
+#: builtin/worktree.c:561
 msgid "populate the new working tree"
 msgstr "生成新的工作區"
 
-#: builtin/worktree.c:490
+#: builtin/worktree.c:562
 msgid "keep the new working tree locked"
 msgstr "鎖定新工作區"
 
-#: builtin/worktree.c:492 builtin/worktree.c:729
+#: builtin/worktree.c:564 builtin/worktree.c:809
 msgid "reason for locking"
 msgstr "鎖定原因"
 
-#: builtin/worktree.c:495
+#: builtin/worktree.c:567
 msgid "set up tracking mode (see git-branch(1))"
 msgstr "設定追蹤模式(參見 git-branch(1))"
 
-#: builtin/worktree.c:498
+#: builtin/worktree.c:570
 msgid "try to match the new branch name with a remote-tracking branch"
 msgstr "嘗試為新分支名符合一個遠端追蹤分支"
 
-#: builtin/worktree.c:512
+#: builtin/worktree.c:584
 msgid "added with --lock"
 msgstr "已使用 --lock 加入"
 
-#: builtin/worktree.c:574
+#: builtin/worktree.c:646
 msgid "--[no-]track can only be used if a new branch is created"
 msgstr "只能在建立新分支時使用 --[no-]track 選項"
 
-#: builtin/worktree.c:691
+#: builtin/worktree.c:766
 msgid "show extended annotations and reasons, if available"
 msgstr "如果有則顯示延伸的註釋和原因"
 
-#: builtin/worktree.c:693
+#: builtin/worktree.c:768
 msgid "add 'prunable' annotation to worktrees older than <time>"
 msgstr "對舊於 <時間> 的工作區加上 ‘prunable’ 標示"
 
-#: builtin/worktree.c:741 builtin/worktree.c:774 builtin/worktree.c:848
-#: builtin/worktree.c:972
+#: builtin/worktree.c:770
+msgid "terminate records with a NUL character"
+msgstr "以一個 NUL 字元終止記錄"
+
+#: builtin/worktree.c:821 builtin/worktree.c:854 builtin/worktree.c:928
+#: builtin/worktree.c:1052
 #, c-format
 msgid "'%s' is not a working tree"
 msgstr "'%s' 不是一個工作區"
 
-#: builtin/worktree.c:743 builtin/worktree.c:776
+#: builtin/worktree.c:823 builtin/worktree.c:856
 msgid "The main working tree cannot be locked or unlocked"
 msgstr "主工作區無法被加鎖或解鎖"
 
-#: builtin/worktree.c:748
+#: builtin/worktree.c:828
 #, c-format
 msgid "'%s' is already locked, reason: %s"
 msgstr "'%s' 已被鎖定,原因:%s"
 
-#: builtin/worktree.c:750
+#: builtin/worktree.c:830
 #, c-format
 msgid "'%s' is already locked"
 msgstr "'%s' 已被鎖定"
 
-#: builtin/worktree.c:778
+#: builtin/worktree.c:858
 #, c-format
 msgid "'%s' is not locked"
 msgstr "'%s' 未被鎖定"
 
-#: builtin/worktree.c:819
+#: builtin/worktree.c:899
 msgid "working trees containing submodules cannot be moved or removed"
 msgstr "不能移動或刪除包含子模組的工作區"
 
-#: builtin/worktree.c:827
+#: builtin/worktree.c:907
 msgid "force move even if worktree is dirty or locked"
 msgstr "強制移動,即使工作區是髒的或已鎖定"
 
-#: builtin/worktree.c:850 builtin/worktree.c:974
+#: builtin/worktree.c:930 builtin/worktree.c:1054
 #, c-format
 msgid "'%s' is a main working tree"
 msgstr "'%s' 是一個主工作區"
 
-#: builtin/worktree.c:855
+#: builtin/worktree.c:935
 #, c-format
 msgid "could not figure out destination name from '%s'"
 msgstr "無法從 '%s' 算出目的地名稱"
 
-#: builtin/worktree.c:868
+#: builtin/worktree.c:948
 #, c-format
 msgid ""
 "cannot move a locked working tree, lock reason: %s\n"
@@ -23602,7 +24142,7 @@ msgstr ""
 "無法移動一個鎖定的工作區,鎖定原因:%s\n"
 "使用 'move -f -f' 覆蓋或先解鎖"
 
-#: builtin/worktree.c:870
+#: builtin/worktree.c:950
 msgid ""
 "cannot move a locked working tree;\n"
 "use 'move -f -f' to override or unlock first"
@@ -23610,36 +24150,36 @@ msgstr ""
 "無法移動一個鎖定的工作區,\n"
 "使用 'move -f -f' 覆蓋或先解鎖"
 
-#: builtin/worktree.c:873
+#: builtin/worktree.c:953
 #, c-format
 msgid "validation failed, cannot move working tree: %s"
 msgstr "驗證失敗,無法移動工作區:%s"
 
-#: builtin/worktree.c:878
+#: builtin/worktree.c:958
 #, c-format
 msgid "failed to move '%s' to '%s'"
 msgstr "移動 '%s' 到 '%s' 失敗"
 
-#: builtin/worktree.c:924
+#: builtin/worktree.c:1004
 #, c-format
 msgid "failed to run 'git status' on '%s'"
 msgstr "在 '%s' 中執行 'git status' 失敗"
 
-#: builtin/worktree.c:928
+#: builtin/worktree.c:1008
 #, c-format
 msgid "'%s' contains modified or untracked files, use --force to delete it"
 msgstr "'%s' 包含修改或未追蹤的檔案,使用 --force 刪除"
 
-#: builtin/worktree.c:933
+#: builtin/worktree.c:1013
 #, c-format
 msgid "failed to run 'git status' on '%s', code %d"
 msgstr "在 '%s' 中執行 'git status' 失敗,離開碼 %d"
 
-#: builtin/worktree.c:956
+#: builtin/worktree.c:1036
 msgid "force removal even if worktree is dirty or locked"
 msgstr "強制刪除,即使工作區是髒的或已鎖定"
 
-#: builtin/worktree.c:979
+#: builtin/worktree.c:1059
 #, c-format
 msgid ""
 "cannot remove a locked working tree, lock reason: %s\n"
@@ -23648,7 +24188,7 @@ msgstr ""
 "無法刪除一個鎖定的工作區,鎖定原因:%s\n"
 "使用 'remove -f -f' 覆蓋或先解鎖"
 
-#: builtin/worktree.c:981
+#: builtin/worktree.c:1061
 msgid ""
 "cannot remove a locked working tree;\n"
 "use 'remove -f -f' to override or unlock first"
@@ -23656,17 +24196,17 @@ msgstr ""
 "無法刪除一個鎖定的工作區,\n"
 "使用 'remove -f -f' 覆蓋或先解鎖"
 
-#: builtin/worktree.c:984
+#: builtin/worktree.c:1064
 #, c-format
 msgid "validation failed, cannot remove working tree: %s"
 msgstr "驗證失敗,無法刪除工作區:%s"
 
-#: builtin/worktree.c:1008
+#: builtin/worktree.c:1088
 #, c-format
 msgid "repair: %s: %s"
 msgstr "修復:%s:%s"
 
-#: builtin/worktree.c:1011
+#: builtin/worktree.c:1091
 #, c-format
 msgid "error: %s: %s"
 msgstr "錯誤:%s:%s"
@@ -23771,29 +24311,29 @@ msgstr "%s 的空別名"
 msgid "recursive alias: %s"
 msgstr "遞迴的別名:%s"
 
-#: git.c:479
+#: git.c:480
 msgid "write failure on standard output"
 msgstr "在標準輸出寫入失敗"
 
-#: git.c:481
+#: git.c:482
 msgid "unknown write failure on standard output"
 msgstr "到標準輸出的未知寫入錯誤"
 
-#: git.c:483
+#: git.c:484
 msgid "close failed on standard output"
 msgstr "標準輸出關閉失敗"
 
-#: git.c:835
+#: git.c:838
 #, c-format
 msgid "alias loop detected: expansion of '%s' does not terminate:%s"
 msgstr "偵測到別名循環:展開後的「%s」無窮無盡:%s"
 
-#: git.c:885
+#: git.c:888
 #, c-format
 msgid "cannot handle %s as a builtin"
 msgstr "不能作為內建指令處理 %s"
 
-#: git.c:898
+#: git.c:901
 #, c-format
 msgid ""
 "usage: %s\n"
@@ -23802,12 +24342,12 @@ msgstr ""
 "用法:%s\n"
 "\n"
 
-#: git.c:918
+#: git.c:921
 #, c-format
 msgid "expansion of alias '%s' failed; '%s' is not a git command\n"
 msgstr "展開別名指令 '%s' 失敗,'%s' 不是一個 git 指令\n"
 
-#: git.c:930
+#: git.c:933
 #, c-format
 msgid "failed to run command '%s': %s\n"
 msgstr "執行指令 '%s' 失敗:%s\n"
@@ -23961,139 +24501,139 @@ msgstr ""
 "     請求:%s\n"
 "   重定向:%s"
 
-#: remote-curl.c:183
+#: remote-curl.c:184
 #, c-format
 msgid "invalid quoting in push-option value: '%s'"
 msgstr "在 push-option 取值中無效的引號:'%s'"
 
-#: remote-curl.c:304
+#: remote-curl.c:308
 #, c-format
 msgid "%sinfo/refs not valid: is this a git repository?"
 msgstr "%sinfo/refs 無效:這是一個 git 版本庫嗎?"
 
-#: remote-curl.c:405
+#: remote-curl.c:409
 msgid "invalid server response; expected service, got flush packet"
 msgstr "無效的服務端回應。預期服務,得到 flush 包"
 
-#: remote-curl.c:436
+#: remote-curl.c:440
 #, c-format
 msgid "invalid server response; got '%s'"
 msgstr "無效的服務端回應,得到 '%s'"
 
-#: remote-curl.c:496
+#: remote-curl.c:500
 #, c-format
 msgid "repository '%s' not found"
 msgstr "版本庫 '%s' 未找到"
 
-#: remote-curl.c:500
+#: remote-curl.c:504
 #, c-format
 msgid "Authentication failed for '%s'"
 msgstr "'%s' 身份驗證失敗"
 
-#: remote-curl.c:504
+#: remote-curl.c:508
 #, c-format
 msgid "unable to access '%s' with http.pinnedPubkey configuration: %s"
 msgstr "無法依 http.pinnedPubkey 之設定存取「%s」:%s"
 
-#: remote-curl.c:508
+#: remote-curl.c:512
 #, c-format
 msgid "unable to access '%s': %s"
 msgstr "無法存取 '%s':%s"
 
-#: remote-curl.c:514
+#: remote-curl.c:518
 #, c-format
 msgid "redirecting to %s"
 msgstr "重定向到 %s"
 
-#: remote-curl.c:645
+#: remote-curl.c:649
 msgid "shouldn't have EOF when not gentle on EOF"
 msgstr "當沒有設定溫和處理檔案結束符(EOF)時,不應該有檔案結束符"
 
-#: remote-curl.c:657
+#: remote-curl.c:661
 msgid "remote server sent unexpected response end packet"
 msgstr "遠端伺服器傳送了非預期的回應結束封包"
 
-#: remote-curl.c:726
+#: remote-curl.c:730
 msgid "unable to rewind rpc post data - try increasing http.postBuffer"
 msgstr "無法還原 rpc post 資料 - 嘗試增加 http.postBuffer"
 
-#: remote-curl.c:755
+#: remote-curl.c:759
 #, c-format
 msgid "remote-curl: bad line length character: %.4s"
 msgstr "remote-curl: 錯誤的行長度字串:%.4s"
 
-#: remote-curl.c:757
+#: remote-curl.c:761
 msgid "remote-curl: unexpected response end packet"
 msgstr "remote-curl: 非預期的回應結束封包"
 
-#: remote-curl.c:833
+#: remote-curl.c:837
 #, c-format
 msgid "RPC failed; %s"
 msgstr "RPC 失敗。%s"
 
-#: remote-curl.c:873
+#: remote-curl.c:877
 msgid "cannot handle pushes this big"
 msgstr "不能處理這麼大的推送"
 
-#: remote-curl.c:986
+#: remote-curl.c:990
 #, c-format
 msgid "cannot deflate request; zlib deflate error %d"
 msgstr "不能壓縮請求,zlib 壓縮錯誤 %d"
 
-#: remote-curl.c:990
+#: remote-curl.c:994
 #, c-format
 msgid "cannot deflate request; zlib end error %d"
 msgstr "不能壓縮請求,zlib 結束錯誤 %d"
 
-#: remote-curl.c:1040
+#: remote-curl.c:1044
 #, c-format
 msgid "%d bytes of length header were received"
 msgstr "收到了 %d 位元組長度的標頭"
 
-#: remote-curl.c:1042
+#: remote-curl.c:1046
 #, c-format
 msgid "%d bytes of body are still expected"
 msgstr "預期仍要有 %d 位元組的本文 (body)"
 
-#: remote-curl.c:1131
+#: remote-curl.c:1135
 msgid "dumb http transport does not support shallow capabilities"
 msgstr "啞 http 傳輸不支援 shallow 能力"
 
-#: remote-curl.c:1146
+#: remote-curl.c:1150
 msgid "fetch failed."
 msgstr "取得失敗。"
 
-#: remote-curl.c:1192
+#: remote-curl.c:1198
 msgid "cannot fetch by sha1 over smart http"
 msgstr "無法透過智慧 HTTP 取得 sha1"
 
-#: remote-curl.c:1236 remote-curl.c:1242
+#: remote-curl.c:1242 remote-curl.c:1248
 #, c-format
 msgid "protocol error: expected sha/ref, got '%s'"
 msgstr "協定錯誤:期望 sha/ref,卻得到 '%s'"
 
-#: remote-curl.c:1254 remote-curl.c:1372
+#: remote-curl.c:1260 remote-curl.c:1378
 #, c-format
 msgid "http transport does not support %s"
 msgstr "http 傳輸協定不支援 %s"
 
-#: remote-curl.c:1290
+#: remote-curl.c:1296
 msgid "git-http-push failed"
 msgstr "git-http-push 失敗"
 
-#: remote-curl.c:1478
+#: remote-curl.c:1485
 msgid "remote-curl: usage: git remote-curl <remote> [<url>]"
 msgstr "remote-curl:用法:git remote-curl <遠端> [<url>]"
 
-#: remote-curl.c:1510
+#: remote-curl.c:1517
 msgid "remote-curl: error reading command stream from git"
 msgstr "remote-curl:錯誤讀取來自 git 的指令流"
 
-#: remote-curl.c:1517
+#: remote-curl.c:1524
 msgid "remote-curl: fetch attempted without a local repo"
 msgstr "remote-curl:嘗試沒有本機版本庫下取得"
 
-#: remote-curl.c:1558
+#: remote-curl.c:1565
 #, c-format
 msgid "remote-curl: unknown command '%s' from git"
 msgstr "remote-curl:未知的來自 git 的指令 '%s'"
@@ -24106,121 +24646,121 @@ msgstr "需要工作目錄"
 msgid "could not find enlistment root"
 msgstr "找不到編列名單的根目錄"
 
-#: contrib/scalar/scalar.c:89 contrib/scalar/scalar.c:351
-#: contrib/scalar/scalar.c:436 contrib/scalar/scalar.c:579
+#: contrib/scalar/scalar.c:89 contrib/scalar/scalar.c:350
+#: contrib/scalar/scalar.c:435 contrib/scalar/scalar.c:578
 #, c-format
 msgid "could not switch to '%s'"
 msgstr "無法切換至「%s」"
 
-#: contrib/scalar/scalar.c:180
+#: contrib/scalar/scalar.c:179
 #, c-format
 msgid "could not configure %s=%s"
 msgstr "無法設定 %s=%s"
 
-#: contrib/scalar/scalar.c:198
+#: contrib/scalar/scalar.c:197
 msgid "could not configure log.excludeDecoration"
 msgstr "無法設定 log.excludeDecoration"
 
-#: contrib/scalar/scalar.c:219
+#: contrib/scalar/scalar.c:218
 msgid "Scalar enlistments require a worktree"
 msgstr "純量編列名單需要工作目錄"
 
-#: contrib/scalar/scalar.c:311
+#: contrib/scalar/scalar.c:310
 #, c-format
 msgid "remote HEAD is not a branch: '%.*s'"
 msgstr "遠端 HEAD 不是分支:「%.*s」"
 
-#: contrib/scalar/scalar.c:317
+#: contrib/scalar/scalar.c:316
 msgid "failed to get default branch name from remote; using local default"
 msgstr "無法從遠端取得預設分支名稱。改用本機預設名稱"
 
-#: contrib/scalar/scalar.c:330
+#: contrib/scalar/scalar.c:329
 msgid "failed to get default branch name"
 msgstr "無法取得預設分支名稱"
 
-#: contrib/scalar/scalar.c:341
+#: contrib/scalar/scalar.c:340
 msgid "failed to unregister repository"
 msgstr "無法取消註冊版本庫"
 
-#: contrib/scalar/scalar.c:356
+#: contrib/scalar/scalar.c:355
 msgid "failed to delete enlistment directory"
 msgstr "無法刪除編列名單目錄"
 
-#: contrib/scalar/scalar.c:376
+#: contrib/scalar/scalar.c:375
 msgid "branch to checkout after clone"
 msgstr "複製後要簽出的分支"
 
-#: contrib/scalar/scalar.c:378
+#: contrib/scalar/scalar.c:377
 msgid "when cloning, create full working directory"
 msgstr "複製時建立完整的工作目錄"
 
-#: contrib/scalar/scalar.c:380
+#: contrib/scalar/scalar.c:379
 msgid "only download metadata for the branch that will be checked out"
 msgstr "只下載會簽出的分支中介資料"
 
-#: contrib/scalar/scalar.c:385
+#: contrib/scalar/scalar.c:384
 msgid "scalar clone [<options>] [--] <repo> [<dir>]"
 msgstr "scalar clone [<options>] [--] <repo> [<dir>]"
 
-#: contrib/scalar/scalar.c:410
+#: contrib/scalar/scalar.c:409
 #, c-format
 msgid "cannot deduce worktree name from '%s'"
 msgstr "無法從「%s」推論工作區名稱"
 
-#: contrib/scalar/scalar.c:419
+#: contrib/scalar/scalar.c:418
 #, c-format
 msgid "directory '%s' exists already"
 msgstr "「%s」目錄已經存在"
 
-#: contrib/scalar/scalar.c:446
+#: contrib/scalar/scalar.c:445
 #, c-format
 msgid "failed to get default branch for '%s'"
 msgstr "無法取得「%s」的預設分支"
 
-#: contrib/scalar/scalar.c:457
+#: contrib/scalar/scalar.c:456
 #, c-format
 msgid "could not configure remote in '%s'"
 msgstr "無法設定「%s」中的遠端"
 
-#: contrib/scalar/scalar.c:466
+#: contrib/scalar/scalar.c:465
 #, c-format
 msgid "could not configure '%s'"
 msgstr "無法設定「%s」"
 
-#: contrib/scalar/scalar.c:469
+#: contrib/scalar/scalar.c:468
 msgid "partial clone failed; attempting full clone"
 msgstr "部分複製失敗。嘗試完整複製"
 
-#: contrib/scalar/scalar.c:473
+#: contrib/scalar/scalar.c:472
 msgid "could not configure for full clone"
 msgstr "無法設定完整複製"
 
-#: contrib/scalar/scalar.c:505
+#: contrib/scalar/scalar.c:504
 msgid "`scalar list` does not take arguments"
 msgstr "`scalar list` 未取引數"
 
-#: contrib/scalar/scalar.c:518
+#: contrib/scalar/scalar.c:517
 msgid "scalar register [<enlistment>]"
 msgstr "scalar register [<enlistment>]"
 
-#: contrib/scalar/scalar.c:545
+#: contrib/scalar/scalar.c:544
 msgid "reconfigure all registered enlistments"
 msgstr "重新設定所有註冊的編列名單"
 
-#: contrib/scalar/scalar.c:549
+#: contrib/scalar/scalar.c:548
 msgid "scalar reconfigure [--all | <enlistment>]"
 msgstr "scalar reconfigure [--all | <enlistment>]"
 
-#: contrib/scalar/scalar.c:567
+#: contrib/scalar/scalar.c:566
 msgid "--all or <enlistment>, but not both"
 msgstr "--all 或 <enlistment> 但不能傳入兩者"
 
-#: contrib/scalar/scalar.c:582
+#: contrib/scalar/scalar.c:581
 #, c-format
 msgid "git repository gone in '%s'"
 msgstr "git 版本庫在「%s」遺失"
 
-#: contrib/scalar/scalar.c:622
+#: contrib/scalar/scalar.c:621
 msgid ""
 "scalar run <task> [<enlistment>]\n"
 "Tasks:\n"
@@ -24228,42 +24768,55 @@ msgstr ""
 "scalar run <task> [<enlistment>]\n"
 "作業:\n"
 
-#: contrib/scalar/scalar.c:640
+#: contrib/scalar/scalar.c:639
 #, c-format
 msgid "no such task: '%s'"
 msgstr "無此作業:「%s」"
 
-#: contrib/scalar/scalar.c:690
+#: contrib/scalar/scalar.c:689
 msgid "scalar unregister [<enlistment>]"
 msgstr "scalar unregister [<enlistment>]"
 
-#: contrib/scalar/scalar.c:737
+#: contrib/scalar/scalar.c:736
 msgid "scalar delete <enlistment>"
 msgstr "scalar delete <enlistment>"
 
-#: contrib/scalar/scalar.c:752
+#: contrib/scalar/scalar.c:751
 msgid "refusing to delete current working directory"
 msgstr "拒絕刪除目前工作目錄"
 
-#: contrib/scalar/scalar.c:767
+#: contrib/scalar/scalar.c:766
 msgid "include Git version"
 msgstr "包含 Git 版本"
 
-#: contrib/scalar/scalar.c:769
+#: contrib/scalar/scalar.c:768
 msgid "include Git's build options"
 msgstr "包含 Git 組建選項"
 
-#: contrib/scalar/scalar.c:773
+#: contrib/scalar/scalar.c:772
 msgid "scalar verbose [-v | --verbose] [--build-options]"
 msgstr "scalar verbose [-v | --verbose] [--build-options]"
 
+#: contrib/scalar/scalar.c:813
+msgid "-C requires a <directory>"
+msgstr "-C 需要 <directory>"
+
+#: contrib/scalar/scalar.c:815
+#, c-format
+msgid "could not change to '%s'"
+msgstr "無法更改為「%s」"
+
 #: contrib/scalar/scalar.c:821
+msgid "-c requires a <key>=<value> argument"
+msgstr "-c 需要 <key>=<value> 引數"
+
+#: contrib/scalar/scalar.c:839
 msgid ""
-"scalar <command> [<options>]\n"
+"scalar [-C <directory>] [-c <key>=<value>] <command> [<options>]\n"
 "\n"
 "Commands:\n"
 msgstr ""
-"scalar <command> [<options>]\n"
+"scalar [-C <directory>] [-c <key>=<value>] <command> [<options>]\n"
 "\n"
 "命令:\n"
 
@@ -24275,43 +24828,43 @@ msgstr "沒有可用的編譯器資訊\n"
 msgid "no libc information available\n"
 msgstr "沒有可用的 libc 資訊\n"
 
-#: list-objects-filter-options.h:94
+#: list-objects-filter-options.h:126
 msgid "args"
 msgstr "參數"
 
-#: list-objects-filter-options.h:95
+#: list-objects-filter-options.h:127
 msgid "object filtering"
 msgstr "物件過濾"
 
-#: parse-options.h:183
+#: parse-options.h:188
 msgid "expiry-date"
 msgstr "到期時間"
 
-#: parse-options.h:197
+#: parse-options.h:202
 msgid "no-op (backward compatibility)"
 msgstr "空動作(向後相容)"
 
-#: parse-options.h:310
+#: parse-options.h:341
 msgid "be more verbose"
 msgstr "更加詳細"
 
-#: parse-options.h:312
+#: parse-options.h:343
 msgid "be more quiet"
 msgstr "更加安靜"
 
-#: parse-options.h:318
+#: parse-options.h:349
 msgid "use <n> digits to display object names"
 msgstr "用 <n> 位數字顯示物件名稱"
 
-#: parse-options.h:337
+#: parse-options.h:368
 msgid "how to strip spaces and #comments from message"
 msgstr "設定如何刪除提交說明裡的空格和 #備註"
 
-#: parse-options.h:338
+#: parse-options.h:369
 msgid "read pathspec from file"
 msgstr "從檔案讀取 <路徑規格>"
 
-#: parse-options.h:339
+#: parse-options.h:370
 msgid ""
 "with --pathspec-from-file, pathspec elements are separated with NUL character"
 msgstr "如使用 --pathspec-from-file,則 <路徑規格> 元件會使用 NUL 字元分隔"
@@ -24561,447 +25114,452 @@ msgid "Display help information about Git"
 msgstr "顯示 Git 的說明訊息"
 
 #: command-list.h:108
+msgid "Run git hooks"
+msgstr "執行 git 掛鉤"
+
+#: command-list.h:109
 msgid "Server side implementation of Git over HTTP"
 msgstr "Git HTTP 協定的服務端實現"
 
-#: command-list.h:109
+#: command-list.h:110
 msgid "Download from a remote Git repository via HTTP"
 msgstr "通過 HTTP 從遠端 Git 版本庫下載"
 
-#: command-list.h:110
+#: command-list.h:111
 msgid "Push objects over HTTP/DAV to another repository"
 msgstr "通過 HTTP/DAV 推送物件另一個版本庫"
 
-#: command-list.h:111
+#: command-list.h:112
 msgid "Send a collection of patches from stdin to an IMAP folder"
 msgstr "從標準輸入將一組修補檔傳送到IMAP資料夾"
 
-#: command-list.h:112
+#: command-list.h:113
 msgid "Build pack index file for an existing packed archive"
 msgstr "從一個現存的包存檔檔案建立包索引"
 
-#: command-list.h:113
+#: command-list.h:114
 msgid "Create an empty Git repository or reinitialize an existing one"
 msgstr "建立一個空的 Git 版本庫或重新初始化一個已存在的版本庫"
 
-#: command-list.h:114
+#: command-list.h:115
 msgid "Instantly browse your working repository in gitweb"
 msgstr "在 gitweb 中即時瀏覽您的工作版本庫"
 
-#: command-list.h:115
+#: command-list.h:116
 msgid "Add or parse structured information in commit messages"
 msgstr "新增或解析提交說明中的結構化訊息"
 
-#: command-list.h:116
+#: command-list.h:117
 msgid "Show commit logs"
 msgstr "顯示提交日誌"
 
-#: command-list.h:117
+#: command-list.h:118
 msgid "Show information about files in the index and the working tree"
 msgstr "顯示索引和工作區中檔案的訊息"
 
-#: command-list.h:118
+#: command-list.h:119
 msgid "List references in a remote repository"
 msgstr "顯示一個遠端版本庫的引用"
 
-#: command-list.h:119
+#: command-list.h:120
 msgid "List the contents of a tree object"
 msgstr "顯示一個樹狀物件的內容"
 
-#: command-list.h:120
+#: command-list.h:121
 msgid "Extracts patch and authorship from a single e-mail message"
 msgstr "從單個電子信件中擷取修補檔和作者身份"
 
-#: command-list.h:121
+#: command-list.h:122
 msgid "Simple UNIX mbox splitter program"
 msgstr "簡單的 UNIX mbox 信箱切分程式"
 
-#: command-list.h:122
+#: command-list.h:123
 msgid "Run tasks to optimize Git repository data"
 msgstr "執行用來最佳化 Git 版本庫資料的作業"
 
-#: command-list.h:123
+#: command-list.h:124
 msgid "Join two or more development histories together"
 msgstr "合併兩個或更多開發歷史"
 
-#: command-list.h:124
+#: command-list.h:125
 msgid "Find as good common ancestors as possible for a merge"
 msgstr "為了合併尋找儘可能好的公共祖先提交"
 
-#: command-list.h:125
+#: command-list.h:126
 msgid "Run a three-way file merge"
 msgstr "執行一個三路檔案合併"
 
-#: command-list.h:126
+#: command-list.h:127
 msgid "Run a merge for files needing merging"
 msgstr "對於需要合併的檔案執行合併"
 
-#: command-list.h:127
+#: command-list.h:128
 msgid "The standard helper program to use with git-merge-index"
 msgstr "與 git-merge-index 一起使用的標準嚮導程式"
 
-#: command-list.h:128
+#: command-list.h:129
 msgid "Show three-way merge without touching index"
 msgstr "顯示三路合併而不動索引"
 
-#: command-list.h:129
+#: command-list.h:130
 msgid "Run merge conflict resolution tools to resolve merge conflicts"
 msgstr "執行合併衝突解決工具以解決合併衝突"
 
-#: command-list.h:130
+#: command-list.h:131
 msgid "Creates a tag object with extra validation"
 msgstr "建立有額外驗證的標籤物件"
 
-#: command-list.h:131
+#: command-list.h:132
 msgid "Build a tree-object from ls-tree formatted text"
 msgstr "基於 ls-tree 的格式化文字建立一個樹狀物件"
 
-#: command-list.h:132
+#: command-list.h:133
 msgid "Write and verify multi-pack-indexes"
 msgstr "寫入和驗證多包索引"
 
-#: command-list.h:133
+#: command-list.h:134
 msgid "Move or rename a file, a directory, or a symlink"
 msgstr "移動或重新命名一個檔案、目錄或符號連結"
 
 # 尋找提供版本的符號名稱
-#: command-list.h:134
+#: command-list.h:135
 msgid "Find symbolic names for given revs"
 msgstr "尋找提供版本的符號名稱"
 
-#: command-list.h:135
+#: command-list.h:136
 msgid "Add or inspect object notes"
 msgstr "新增或檢查物件備註"
 
-#: command-list.h:136
+#: command-list.h:137
 msgid "Import from and submit to Perforce repositories"
 msgstr "匯入和提交到 Perforce 版本庫中"
 
-#: command-list.h:137
+#: command-list.h:138
 msgid "Create a packed archive of objects"
 msgstr "建立物件的存檔包"
 
-#: command-list.h:138
+#: command-list.h:139
 msgid "Find redundant pack files"
 msgstr "尋找冗餘的包檔案"
 
-#: command-list.h:139
+#: command-list.h:140
 msgid "Pack heads and tags for efficient repository access"
 msgstr "打包頭和標籤以實現高效的版本庫存取"
 
-#: command-list.h:140
+#: command-list.h:141
 msgid "Compute unique ID for a patch"
 msgstr "計算一個修補檔的唯一 ID"
 
-#: command-list.h:141
+#: command-list.h:142
 msgid "Prune all unreachable objects from the object database"
-msgstr "å\88ªé\99¤ç\89©ä»¶åº«ä¸­æ\89\80æ\9c\89ç\84¡æ³\95å\8f\96å¾\97物件"
+msgstr "å\89ªé\99¤ç\89©ä»¶åº«ä¸­æ\89\80æ\9c\89ç\84¡æ³\95å\8f\96å¾\97ç\9a\84物件"
 
-#: command-list.h:142
+#: command-list.h:143
 msgid "Remove extra objects that are already in pack files"
 msgstr "刪除已經在包檔案中的多餘物件"
 
-#: command-list.h:143
+#: command-list.h:144
 msgid "Fetch from and integrate with another repository or a local branch"
 msgstr "取得並整合另外的版本庫或一個本機分支"
 
-#: command-list.h:144
+#: command-list.h:145
 msgid "Update remote refs along with associated objects"
 msgstr "更新遠端引用和相關的物件"
 
-#: command-list.h:145
+#: command-list.h:146
 msgid "Applies a quilt patchset onto the current branch"
 msgstr "將一個 quilt 修補檔集合套用到目前分支"
 
-#: command-list.h:146
+#: command-list.h:147
 msgid "Compare two commit ranges (e.g. two versions of a branch)"
 msgstr "比較兩個提交範圍(如一個分支的兩個版本)"
 
-#: command-list.h:147
+#: command-list.h:148
 msgid "Reads tree information into the index"
 msgstr "將樹訊息讀取到索引"
 
-#: command-list.h:148
+#: command-list.h:149
 msgid "Reapply commits on top of another base tip"
 msgstr "在另一個分支上重新套用提交"
 
-#: command-list.h:149
+#: command-list.h:150
 msgid "Receive what is pushed into the repository"
 msgstr "接收推送到版本庫中的物件"
 
-#: command-list.h:150
+#: command-list.h:151
 msgid "Manage reflog information"
 msgstr "管理 reflog 訊息"
 
-#: command-list.h:151
+#: command-list.h:152
 msgid "Manage set of tracked repositories"
 msgstr "管理已追蹤版本庫"
 
-#: command-list.h:152
+#: command-list.h:153
 msgid "Pack unpacked objects in a repository"
 msgstr "打包版本庫中未打包物件"
 
-#: command-list.h:153
+#: command-list.h:154
 msgid "Create, list, delete refs to replace objects"
 msgstr "建立、列出、刪除物件取代引用"
 
-#: command-list.h:154
+#: command-list.h:155
 msgid "Generates a summary of pending changes"
 msgstr "生成待定更改的摘要"
 
-#: command-list.h:155
+#: command-list.h:156
 msgid "Reuse recorded resolution of conflicted merges"
 msgstr "重用衝突合併的解決方案記錄"
 
-#: command-list.h:156
+#: command-list.h:157
 msgid "Reset current HEAD to the specified state"
 msgstr "重設目前 HEAD 到指定狀態"
 
-#: command-list.h:157
+#: command-list.h:158
 msgid "Restore working tree files"
 msgstr "復原工作區檔案"
 
-#: command-list.h:158
+#: command-list.h:159
 msgid "Lists commit objects in reverse chronological order"
 msgstr "按時間順序列出提交物件"
 
-#: command-list.h:159
+#: command-list.h:160
 msgid "Pick out and massage parameters"
 msgstr "選出並處理參數"
 
-#: command-list.h:160
+#: command-list.h:161
 msgid "Revert some existing commits"
 msgstr "還原一些現存提交"
 
-#: command-list.h:161
+#: command-list.h:162
 msgid "Remove files from the working tree and from the index"
 msgstr "從工作區和索引中刪除檔案"
 
-#: command-list.h:162
+#: command-list.h:163
 msgid "Send a collection of patches as emails"
 msgstr "透過電子信件傳送一組修補檔"
 
-#: command-list.h:163
+#: command-list.h:164
 msgid "Push objects over Git protocol to another repository"
 msgstr "使用 Git 協定推送物件到另一個版本庫"
 
-#: command-list.h:164
+#: command-list.h:165
 msgid "Git's i18n setup code for shell scripts"
 msgstr "為 shell 腳本準備的 Git 國際化設定程式碼"
 
-#: command-list.h:165
+#: command-list.h:166
 msgid "Common Git shell script setup code"
 msgstr "常用的 Git shell 腳本設定程式碼"
 
-#: command-list.h:166
+#: command-list.h:167
 msgid "Restricted login shell for Git-only SSH access"
 msgstr "只允許 Git SSH 存取的受限登入shell"
 
-#: command-list.h:167
+#: command-list.h:168
 msgid "Summarize 'git log' output"
 msgstr "'git log' 輸出摘要"
 
-#: command-list.h:168
+#: command-list.h:169
 msgid "Show various types of objects"
 msgstr "顯示各種類型的物件"
 
-#: command-list.h:169
+#: command-list.h:170
 msgid "Show branches and their commits"
 msgstr "顯示分支和提交"
 
-#: command-list.h:170
+#: command-list.h:171
 msgid "Show packed archive index"
 msgstr "顯示打包歸檔索引"
 
-#: command-list.h:171
+#: command-list.h:172
 msgid "List references in a local repository"
 msgstr "顯示本機版本庫中的引用"
 
-#: command-list.h:172
-msgid "Initialize and modify the sparse-checkout"
-msgstr "初始化並修改稀疏簽出"
-
+#  譯者:中文字串拼接,可刪除前導空格
 #: command-list.h:173
+msgid "Reduce your working tree to a subset of tracked files"
+msgstr "將工作區限縮至只包含追蹤檔案的子集"
+
+#: command-list.h:174
 msgid "Add file contents to the staging area"
 msgstr "將檔案內容新增到索引"
 
-#: command-list.h:174
+#: command-list.h:175
 msgid "Stash the changes in a dirty working directory away"
 msgstr "儲藏髒工作區中的修改"
 
-#: command-list.h:175
+#: command-list.h:176
 msgid "Show the working tree status"
 msgstr "顯示工作區狀態"
 
-#: command-list.h:176
+#: command-list.h:177
 msgid "Remove unnecessary whitespace"
 msgstr "刪除不必要的空白字元"
 
-#: command-list.h:177
+#: command-list.h:178
 msgid "Initialize, update or inspect submodules"
 msgstr "初始化、更新或檢查子模組"
 
-#: command-list.h:178
+#: command-list.h:179
 msgid "Bidirectional operation between a Subversion repository and Git"
 msgstr "Subversion 版本庫和 Git 之間的雙向動作"
 
-#: command-list.h:179
+#: command-list.h:180
 msgid "Switch branches"
 msgstr "切換分支"
 
-#: command-list.h:180
+#: command-list.h:181
 msgid "Read, modify and delete symbolic refs"
 msgstr "讀取、修改和刪除符號引用"
 
-#: command-list.h:181
+#: command-list.h:182
 msgid "Create, list, delete or verify a tag object signed with GPG"
 msgstr "建立、列出、刪除或驗證一個 GPG 簽名的標籤物件"
 
-#: command-list.h:182
+#: command-list.h:183
 msgid "Creates a temporary file with a blob's contents"
 msgstr "用資料物件的內容建立暫存檔"
 
-#: command-list.h:183
+#: command-list.h:184
 msgid "Unpack objects from a packed archive"
 msgstr "從打包檔案中解壓縮物件"
 
-#: command-list.h:184
+#: command-list.h:185
 msgid "Register file contents in the working tree to the index"
 msgstr "將工作區的檔案內容註冊到索引"
 
-#: command-list.h:185
+#: command-list.h:186
 msgid "Update the object name stored in a ref safely"
 msgstr "安全地更新儲存於引用中的物件名稱"
 
-#: command-list.h:186
+#: command-list.h:187
 msgid "Update auxiliary info file to help dumb servers"
 msgstr "更新輔助訊息檔案以協助啞協定服務"
 
-#: command-list.h:187
+#: command-list.h:188
 msgid "Send archive back to git-archive"
 msgstr "將存檔傳送回 git-archive"
 
-#: command-list.h:188
+#: command-list.h:189
 msgid "Send objects packed back to git-fetch-pack"
 msgstr "將物件壓縮包傳送回 git-fetch-pack"
 
-#: command-list.h:189
+#: command-list.h:190
 msgid "Show a Git logical variable"
 msgstr "顯示 Git 邏輯變數"
 
-#: command-list.h:190
+#: command-list.h:191
 msgid "Check the GPG signature of commits"
 msgstr "檢查 GPG 提交簽名"
 
-#: command-list.h:191
+#: command-list.h:192
 msgid "Validate packed Git archive files"
 msgstr "驗證打包的 Git 封存檔案"
 
-#: command-list.h:192
+#: command-list.h:193
 msgid "Check the GPG signature of tags"
 msgstr "檢查標籤的 GPG 簽名"
 
-#: command-list.h:193
+#: command-list.h:194
 msgid "Show logs with difference each commit introduces"
 msgstr "顯示每一個提交引入的差異日誌"
 
-#: command-list.h:194
+#: command-list.h:195
 msgid "Manage multiple working trees"
 msgstr "管理多個工作區"
 
-#: command-list.h:195
+#: command-list.h:196
 msgid "Create a tree object from the current index"
 msgstr "從目前索引建立一個樹狀物件"
 
-#: command-list.h:196
+#: command-list.h:197
 msgid "Defining attributes per path"
 msgstr "定義路徑的屬性"
 
-#: command-list.h:197
+#: command-list.h:198
 msgid "Git command-line interface and conventions"
 msgstr "Git 指令列介面和約定"
 
-#: command-list.h:198
+#: command-list.h:199
 msgid "A Git core tutorial for developers"
 msgstr "面向開發人員的 Git 核心教學"
 
-#: command-list.h:199
+#: command-list.h:200
 msgid "Providing usernames and passwords to Git"
 msgstr "將使用者名稱及密碼提供給 Git"
 
-#: command-list.h:200
+#: command-list.h:201
 msgid "Git for CVS users"
 msgstr "適合 CVS 使用者的 Git 協助"
 
-#: command-list.h:201
+#: command-list.h:202
 msgid "Tweaking diff output"
 msgstr "調整差異輸出"
 
-#: command-list.h:202
+#: command-list.h:203
 msgid "A useful minimum set of commands for Everyday Git"
 msgstr "每一天 Git 的一組有用的最小指令集合"
 
-#: command-list.h:203
+#: command-list.h:204
 msgid "Frequently asked questions about using Git"
 msgstr "Git 使用的常見問題"
 
-#: command-list.h:204
+#: command-list.h:205
 msgid "A Git Glossary"
 msgstr "Git 詞彙表"
 
-#: command-list.h:205
+#: command-list.h:206
 msgid "Hooks used by Git"
 msgstr "Git 使用的掛鉤"
 
-#: command-list.h:206
+#: command-list.h:207
 msgid "Specifies intentionally untracked files to ignore"
 msgstr "忽略指定的未追蹤檔案"
 
-#: command-list.h:207
+#: command-list.h:208
 msgid "The Git repository browser"
 msgstr "Git 版本庫瀏覽器"
 
-#: command-list.h:208
+#: command-list.h:209
 msgid "Map author/committer names and/or E-Mail addresses"
 msgstr "映射作者或提交者的名稱和(或)電子信箱地址"
 
-#: command-list.h:209
+#: command-list.h:210
 msgid "Defining submodule properties"
 msgstr "定義子模組屬性"
 
-#: command-list.h:210
+#: command-list.h:211
 msgid "Git namespaces"
 msgstr "Git 名字空間"
 
-#: command-list.h:211
+#: command-list.h:212
 msgid "Helper programs to interact with remote repositories"
 msgstr "用來與遠端版本庫互動的協助工具"
 
-#: command-list.h:212
+#: command-list.h:213
 msgid "Git Repository Layout"
 msgstr "Git 版本庫配置"
 
-#: command-list.h:213
+#: command-list.h:214
 msgid "Specifying revisions and ranges for Git"
 msgstr "指定 Git 的版本和版本範圍"
 
-#: command-list.h:214
+#: command-list.h:215
 msgid "Mounting one repository inside another"
 msgstr "在某個版本庫掛載某個版本庫"
 
-#: command-list.h:215
+#: command-list.h:216
 msgid "A tutorial introduction to Git"
 msgstr "一個 Git 教學"
 
-#: command-list.h:216
+#: command-list.h:217
 msgid "A tutorial introduction to Git: part two"
 msgstr "一個 Git 教學:第二部分"
 
-#: command-list.h:217
+#: command-list.h:218
 msgid "Git web interface (web frontend to Git repositories)"
 msgstr "Git web 介面(Git 版本庫的 web 前端)"
 
-#: command-list.h:218
+#: command-list.h:219
 msgid "An overview of recommended workflows with Git"
 msgstr "Git 推薦的工作流概覽"
 
@@ -25043,66 +25601,44 @@ msgstr "嘗試和 $pretty_name 的簡單合併"
 msgid "Simple merge did not work, trying automatic merge."
 msgstr "簡單合併未生效,嘗試自動合併。"
 
-#: git-submodule.sh:401
-#, sh-format
-msgid "Unable to find current revision in submodule path '$displaypath'"
-msgstr "無法在子模組路徑 '$displaypath' 中找到目前版本"
-
-#: git-submodule.sh:411
-#, sh-format
-msgid "Unable to fetch in submodule path '$sm_path'"
-msgstr "無法在子模組路徑 '$sm_path' 中取得"
-
-#: git-submodule.sh:416
-#, sh-format
-msgid ""
-"Unable to find current ${remote_name}/${branch} revision in submodule path "
-"'$sm_path'"
-msgstr "無法在子模組路徑 '$sm_path' 中找到目前版本 ${remote_name}/${branch}"
-
-#: git-submodule.sh:464
-#, sh-format
-msgid "Failed to recurse into submodule path '$displaypath'"
-msgstr "無法遞迴進子模組路徑 '$displaypath'"
-
 #: git-sh-setup.sh:89 git-sh-setup.sh:94
 #, sh-format
 msgid "usage: $dashless $USAGE"
 msgstr "用法:$dashless $USAGE"
 
-#: git-sh-setup.sh:183
+#: git-sh-setup.sh:182
 #, sh-format
 msgid "Cannot chdir to $cdup, the toplevel of the working tree"
 msgstr "不能切換目錄到 $cdup,工作區的頂級目錄"
 
-#: git-sh-setup.sh:192 git-sh-setup.sh:199
+#: git-sh-setup.sh:191 git-sh-setup.sh:198
 #, sh-format
 msgid "fatal: $program_name cannot be used without a working tree."
 msgstr "致命錯誤:$program_name 不能在沒有工作區的情況下使用。"
 
-#: git-sh-setup.sh:213
+#: git-sh-setup.sh:212
 msgid "Cannot rewrite branches: You have unstaged changes."
 msgstr "不能重寫分支:您有未暫存的變更。"
 
-#: git-sh-setup.sh:216
+#: git-sh-setup.sh:215
 #, sh-format
 msgid "Cannot $action: You have unstaged changes."
 msgstr "不能 $action:您有未暫存的變更。"
 
-#: git-sh-setup.sh:227
+#: git-sh-setup.sh:226
 #, sh-format
 msgid "Cannot $action: Your index contains uncommitted changes."
 msgstr "不能 $action:您的索引中包含未提交的變更。"
 
-#: git-sh-setup.sh:229
+#: git-sh-setup.sh:228
 msgid "Additionally, your index contains uncommitted changes."
 msgstr "而且您的索引中包含未提交的變更。"
 
-#: git-sh-setup.sh:349
+#: git-sh-setup.sh:348
 msgid "You need to run this command from the toplevel of the working tree."
 msgstr "您需要在工作區的頂級目錄中執行這個指令。"
 
-#: git-sh-setup.sh:354
+#: git-sh-setup.sh:353
 msgid "Unable to determine absolute path of git directory"
 msgstr "不能確定 git 目錄的絕對路徑"
 
@@ -25759,23 +26295,23 @@ msgstr "不能以 7bit 形式傳送訊息"
 msgid "invalid transfer encoding"
 msgstr "無效的傳送編碼"
 
-#: git-send-email.perl:2095
+#: git-send-email.perl:2100
 #, perl-format
 msgid ""
-"fatal: %s: rejected by sendemail-validate hook\n"
+"fatal: %s: rejected by %s hook\n"
 "%s\n"
 "warning: no patches were sent\n"
 msgstr ""
-"致命錯誤:%s:被 sendemail-validate 掛鈎拒絕\n"
+"致命錯誤:%s:被 %s 掛鈎拒絕\n"
 "%s\n"
 "警告:修補檔未能傳送\n"
 
-#: git-send-email.perl:2105 git-send-email.perl:2158 git-send-email.perl:2168
+#: git-send-email.perl:2110 git-send-email.perl:2163 git-send-email.perl:2173
 #, perl-format
 msgid "unable to open %s: %s\n"
 msgstr "不能開啟 %s:%s\n"
 
-#: git-send-email.perl:2108
+#: git-send-email.perl:2113
 #, perl-format
 msgid ""
 "fatal: %s:%d is longer than 998 characters\n"
@@ -25784,17 +26320,272 @@ msgstr ""
 "致命錯誤:%s:%d 的字元數超過 998\n"
 "警告:修補檔未能傳送\n"
 
-#: git-send-email.perl:2126
+#: git-send-email.perl:2131
 #, perl-format
 msgid "Skipping %s with backup suffix '%s'.\n"
 msgstr "略過 %s 含備份後綴 '%s'。\n"
 
 #. TRANSLATORS: please keep "[y|N]" as is.
-#: git-send-email.perl:2130
+#: git-send-email.perl:2135
 #, perl-format
 msgid "Do you really want to send %s? [y|N]: "
 msgstr "您真的要傳送 %s?[y|N]: "
 
+#, perl-format
+#~ msgid "fatal: %s: rejected by %s hook\n"
+#~ msgstr "致命錯誤:%s:被 %s 掛勾拒絕\n"
+
+#~ msgid "git archive --list"
+#~ msgstr "git archive --list"
+
+#, c-format
+#~ msgid "unknown value for --diff-merges: %s"
+#~ msgstr "--diff-merges 的值無效:%s"
+
+#, c-format
+#~ msgid "invalid value '%s' for lsrefs.unborn"
+#~ msgstr "lsrefs.unborn 的值「%s」無效"
+
+#~ msgid "backend for `git stash -p`"
+#~ msgstr "`git stash -p` 的後端"
+
+#, c-format
+#~ msgid "Invalid value for --empty: %s"
+#~ msgstr "傳入 --empty 的值無效:%s"
+
+#, c-format
+#~ msgid "Invalid value for --patch-format: %s"
+#~ msgstr "無效的 --patch-format 值:%s"
+
+#, c-format
+#~ msgid "Invalid value for --show-current-patch: %s"
+#~ msgstr "無效的 --show-current-patch 值:%s"
+
+#~ msgid ""
+#~ "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad "
+#~ "| --term-new]"
+#~ msgstr ""
+#~ "git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad "
+#~ "| --term-new]"
+
+#~ msgid "git bisect--helper --bisect-next"
+#~ msgstr "git bisect--helper --bisect-next"
+
+#~ msgid "git bisect--helper --bisect-visualize"
+#~ msgstr "git bisect--helper --bisect-visualize"
+
+#, c-format
+#~ msgid "invalid color '%s' in color.blame.repeatedLines"
+#~ msgstr "設定 color.blame.repeatedLines 中的無效顏色 '%s'"
+
+#~ msgid "invalid value for blame.coloring"
+#~ msgstr "設定 blame.coloring 中的無效取值"
+
+#~ msgid ""
+#~ "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e "
+#~ "| -p | <type> | --textconv | --filters) [--path=<path>] <object>"
+#~ msgstr ""
+#~ "git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e "
+#~ "| -p | <類型> | --textconv | --filters) [--path=<路徑>] <物件>"
+
+#~ msgid "show object type"
+#~ msgstr "顯示物件類型"
+
+#~ msgid "exit with zero when there's no error"
+#~ msgstr "當沒有錯誤時離開並返回零"
+
+#~ msgid "show info and content of objects fed from the standard input"
+#~ msgstr "顯示從標準輸入提供的物件的訊息和內容"
+
+#~ msgid "show info about objects fed from the standard input"
+#~ msgstr "顯示從標準輸入提供的物件的訊息"
+
+#~ msgid "follow in-tree symlinks (used with --batch or --batch-check)"
+#~ msgstr "跟隨樹內符號連結(和 --batch 或 --batch-check 共用)"
+
+#~ msgid "show all objects with --batch or --batch-check"
+#~ msgstr "使用 --batch 或 --batch-check 參數顯示所有物件"
+
+#~ msgid "do not order --batch-all-objects output"
+#~ msgstr "不要對 --batch-all-objects 的輸出排序"
+
+#~ msgid "set up tracking mode (see git-pull(1))"
+#~ msgstr "設定追蹤模式(參見 git-pull(1))"
+
+#~ msgid "Using both --reset-author and --author does not make sense"
+#~ msgstr "同時使用 --reset-author 和 --author 沒有意義"
+
+#~ msgid "Options --squash and --fixup cannot be used together"
+#~ msgstr "選項 --squash 和 --fixup 不能同時使用"
+
+#~ msgid "Only one of -c/-C/-F/--fixup can be used."
+#~ msgstr "只能用一個 -c/-C/-F/--fixup 選項。"
+
+#~ msgid "Option -m cannot be combined with -c/-C/-F."
+#~ msgstr "選項 -m 不能和 -c/-C/-F 同時使用。"
+
+#~ msgid ""
+#~ "Only one of --include/--only/--all/--interactive/--patch can be used."
+#~ msgstr "只能用一個 --include/--only/--all/--interactive/--patch 選項。"
+
+#~ msgid "git count-objects [-v] [-H | --human-readable]"
+#~ msgstr "git count-objects [-v] [-H | --human-readable]"
+
+#, c-format
+#~ msgid "configuration fetch.output contains invalid value %s"
+#~ msgstr "設定變數 fetch.output 包含無效值 %s"
+
+#~ msgid "--cached or --untracked cannot be used with --no-index"
+#~ msgstr "--cached 或 --untracked 不能與 --no-index 同時使用"
+
+#~ msgid "--untracked cannot be used with --cached"
+#~ msgstr "--untracked 不能與 --cached 一起使用"
+
+#~ msgid "git hash-object  --stdin-paths"
+#~ msgstr "git hash-object  --stdin-paths"
+
+#~ msgid "git help [-g|--guides]"
+#~ msgstr "git help [-g|--guides]"
+
+#~ msgid "git help [-c|--config]"
+#~ msgstr "git help [-c|--config]"
+
+#~ msgid "git mktag"
+#~ msgstr "git mktag"
+
+#~ msgid "git mktree [-z] [--missing] [--batch]"
+#~ msgstr "git mktree [-z] [--missing] [--batch]"
+
+#~ msgid "read from stdin"
+#~ msgstr "從標準輸入讀取"
+
+#~ msgid "git notes merge --commit [-v | -q]"
+#~ msgstr "git notes merge --commit [-v | -q]"
+
+#~ msgid "git notes merge --abort [-v | -q]"
+#~ msgstr "git notes merge --abort [-v | -q]"
+
+#~ msgid "git notes get-ref"
+#~ msgstr "git notes get-ref"
+
+#~ msgid "invalid value for --missing"
+#~ msgstr "選項 --missing 的值無效"
+
+#~ msgid "git prune-packed [-n | --dry-run] [-q | --quiet]"
+#~ msgstr "git prune-packed [-n | --dry-run] [-q | --quiet]"
+
+#, c-format
+#~ msgid "Invalid value for %s: %s"
+#~ msgstr "%s 的值無效:%s"
+
+#, c-format
+#~ msgid "Invalid value for pull.ff: %s"
+#~ msgstr "pull.ff 的取值無效:%s"
+
+#~ msgid "git rebase --continue | --abort | --skip | --edit-todo"
+#~ msgstr "git rebase --continue | --abort | --skip | --edit-todo"
+
+#, c-format
+#~ msgid "'%s' is not a valid timestamp"
+#~ msgstr "'%s' 不是一個有效的時間戳"
+
+#~ msgid "git reflog [ show | expire | delete | exists ]"
+#~ msgstr "git reflog [ show | expire | delete | exists ]"
+
+#~ msgid "git remote [-v | --verbose]"
+#~ msgstr "git remote [-v | --verbose]"
+
+#~ msgid "git replace [-f] --convert-graft-file"
+#~ msgstr "git replace [-f] --convert-graft-file"
+
+#, c-format
+#~ msgid ""
+#~ "\n"
+#~ "It took %.2f seconds to enumerate unstaged changes after reset.  You can\n"
+#~ "use '--quiet' to avoid this.  Set the config setting reset.quiet to true\n"
+#~ "to make this the default.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "重設後,枚舉未暫存變更花費了 %.2f 秒。 您可以使用 '--quiet' 避免此情況。\n"
+#~ "將設定變數 reset.quiet 設定為 true 可使其成為預設值。\n"
+
+#~ msgid "git sparse-checkout list"
+#~ msgstr "git sparse-checkout list"
+
+#~ msgid "unable to upgrade repository format to enable worktreeConfig"
+#~ msgstr "無法升級版本庫格式,以致無法啟用 worktreeConfig"
+
+#~ msgid "git sparse-checkout init [--cone] [--[no-]sparse-index]"
+#~ msgstr "git sparse-checkout init [--cone] [--[no-]sparse-index]"
+
+#~ msgid "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
+#~ msgstr "git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index]"
+
+#~ msgid "git sparse-checkout disable"
+#~ msgstr "git sparse-checkout disable"
+
+#~ msgid ""
+#~ "the stash.useBuiltin support has been removed!\n"
+#~ "See its entry in 'git help config' for details."
+#~ msgstr ""
+#~ "對 stash.useBuiltin 的支援已被刪除!\n"
+#~ "詳見「git help config」中的條目。"
+
+#~ msgid "git stripspace [-s | --strip-comments]"
+#~ msgstr "git stripspace [-s | --strip-comments]"
+
+#~ msgid "git stripspace [-c | --comment-lines]"
+#~ msgstr "git stripspace [-c | --comment-lines]"
+
+#~ msgid "submodule--helper print-default-remote takes no arguments"
+#~ msgstr "submodule--helper print-default-remote 不帶參數"
+
+#~ msgid "git submodule--helper update-clone [--prefix=<path>] [<path>...]"
+#~ msgstr "git submodule--helper update-clone [--prefix=<路徑>] [<路徑>...]"
+
+#~ msgid "suppress output for update by rebase or merge"
+#~ msgstr "隱藏 rebase 或 merge 觸發之更新的輸出"
+
+#~ msgid "overrides update mode in case the repository is a fresh clone"
+#~ msgstr "如果版本庫是剛複製的,就覆蓋更新模式"
+
+#~ msgid "depth for shallow fetch"
+#~ msgstr "淺 fetch 的深度"
+
+#~ msgid "sha1"
+#~ msgstr "sha1"
+
+#~ msgid "SHA1 expected by superproject"
+#~ msgstr "上層專案預期應是 SHA1"
+
+#~ msgid "subsha1"
+#~ msgstr "subsha1"
+
+#~ msgid "SHA1 of submodule's HEAD"
+#~ msgstr "子模組 HEAD 的 SHA1"
+
+#~ msgid "git submodule--helper run-update-procedure [<options>] <path>"
+#~ msgstr "git submodule--helper run-update-procedure [<選項>] [<路徑>]"
+
+#~ msgid "git submodule--helper config --check-writeable"
+#~ msgstr "git submodule--helper config --check-writeable"
+
+#~ msgid "git update-server-info [--force]"
+#~ msgstr "git update-server-info [--force]"
+
+#~ msgid "Initialize and modify the sparse-checkout"
+#~ msgstr "初始化並修改稀疏簽出"
+
+#, sh-format
+#~ msgid ""
+#~ "Unable to find current ${remote_name}/${branch} revision in submodule "
+#~ "path '$sm_path'"
+#~ msgstr "無法在子模組路徑 '$sm_path' 中找到目前版本 ${remote_name}/${branch}"
+
+#, sh-format
+#~ msgid "Failed to recurse into submodule path '$displaypath'"
+#~ msgstr "無法遞迴進子模組路徑 '$displaypath'"
+
 #~ msgid "--index outside a repository"
 #~ msgstr "--index 在版本庫之外"
 
@@ -26213,9 +27004,6 @@ msgstr "您真的要傳送 %s?[y|N]: "
 #~ msgid "cannot store pack file"
 #~ msgstr "無法儲存包檔案"
 
-#~ msgid "cannot store index file"
-#~ msgstr "無法儲存索引檔案"
-
 #~ msgid "exclude patterns are read from <file>"
 #~ msgstr "從 <檔案> 中讀取排除模式"
 
@@ -26342,21 +27130,12 @@ msgstr "您真的要傳送 %s?[y|N]: "
 #~ msgid "socket/pipe already in use: '%s'"
 #~ msgstr "通訊端 (socket) 或管道 (pipe) 已在使用:「%s」"
 
-#~ msgid "could not start server on: '%s'"
-#~ msgstr "無法在下述位置啟動伺服器:「%s」"
-
 #~ msgid "could not spawn daemon in the background"
 #~ msgstr "無法在背景啟動 (spawn) 守護程式"
 
 #~ msgid "waitpid failed"
 #~ msgstr "waitpid 失敗"
 
-#~ msgid "daemon not online yet"
-#~ msgstr "守護程式尚未上線"
-
-#~ msgid "daemon failed to start"
-#~ msgstr "無法啟動守護程式"
-
 #~ msgid "waitpid is confused"
 #~ msgstr "waitpid 被混淆"
 
@@ -26743,9 +27522,6 @@ msgstr "您真的要傳送 %s?[y|N]: "
 #~ msgid "Error deleting remote-tracking branch '%s'"
 #~ msgstr "無法刪除遠端追蹤分支 '%s'"
 
-#~ msgid "Error deleting branch '%s'"
-#~ msgstr "無法刪除分支 '%s'"
-
 #~ msgid "show parse tree for grep expression"
 #~ msgstr "顯示 grep 表達式的解析樹"
 
index 2f16acd213d6d70c6055472f4f4d6b0e3e4b6f9e..f34e24c53a4925aec51cd62117654fdd5f7f980e 100644 (file)
--- a/pretty.h
+++ b/pretty.h
@@ -2,6 +2,7 @@
 #define PRETTY_H
 
 #include "cache.h"
+#include "date.h"
 #include "string-list.h"
 
 struct commit;
@@ -163,4 +164,13 @@ int format_set_trailers_options(struct process_trailer_options *opts,
                        const char **arg,
                        char **invalid_arg);
 
+/*
+ * Like show_date, but pull the timestamp and tz parameters from
+ * the ident_split. It will also sanity-check the values and produce
+ * a well-known sentinel date if they appear bogus.
+ */
+const char *show_ident_date(const struct ident_split *id,
+                           const struct date_mode *mode);
+
+
 #endif /* PRETTY_H */
index 680c6a8bf93b514a7b82510c475984ca32067eb7..0cdd875d37f166bedbbeb5f0e889046674ed58be 100644 (file)
@@ -311,32 +311,39 @@ struct progress *start_delayed_sparse_progress(const char *title,
 
 static void finish_if_sparse(struct progress *progress)
 {
-       if (progress &&
-           progress->sparse &&
+       if (progress->sparse &&
            progress->last_value != progress->total)
                display_progress(progress, progress->total);
 }
 
-void stop_progress(struct progress **p_progress)
+static void force_last_update(struct progress *progress, const char *msg)
 {
-       if (!p_progress)
-               BUG("don't provide NULL to stop_progress");
-
-       finish_if_sparse(*p_progress);
-
-       if (*p_progress) {
-               trace2_data_intmax("progress", the_repository, "total_objects",
-                                  (*p_progress)->total);
+       char *buf;
+       struct throughput *tp = progress->throughput;
+
+       if (tp) {
+               uint64_t now_ns = progress_getnanotime(progress);
+               unsigned int misecs, rate;
+               misecs = ((now_ns - progress->start_ns) * 4398) >> 32;
+               rate = tp->curr_total / (misecs ? misecs : 1);
+               throughput_string(&tp->display, tp->curr_total, rate);
+       }
+       progress_update = 1;
+       buf = xstrfmt(", %s.\n", msg);
+       display(progress, progress->last_value, buf);
+       free(buf);
+}
 
-               if ((*p_progress)->throughput)
-                       trace2_data_intmax("progress", the_repository,
-                                          "total_bytes",
-                                          (*p_progress)->throughput->curr_total);
+static void log_trace2(struct progress *progress)
+{
+       trace2_data_intmax("progress", the_repository, "total_objects",
+                          progress->total);
 
-               trace2_region_leave("progress", (*p_progress)->title, the_repository);
-       }
+       if (progress->throughput)
+               trace2_data_intmax("progress", the_repository, "total_bytes",
+                                  progress->throughput->curr_total);
 
-       stop_progress_msg(p_progress, _("done"));
+       trace2_region_leave("progress", progress->title, the_repository);
 }
 
 void stop_progress_msg(struct progress **p_progress, const char *msg)
@@ -350,23 +357,12 @@ void stop_progress_msg(struct progress **p_progress, const char *msg)
        if (!progress)
                return;
        *p_progress = NULL;
-       if (progress->last_value != -1) {
-               /* Force the last update */
-               char *buf;
-               struct throughput *tp = progress->throughput;
-
-               if (tp) {
-                       uint64_t now_ns = progress_getnanotime(progress);
-                       unsigned int misecs, rate;
-                       misecs = ((now_ns - progress->start_ns) * 4398) >> 32;
-                       rate = tp->curr_total / (misecs ? misecs : 1);
-                       throughput_string(&tp->display, tp->curr_total, rate);
-               }
-               progress_update = 1;
-               buf = xstrfmt(", %s.\n", msg);
-               display(progress, progress->last_value, buf);
-               free(buf);
-       }
+
+       finish_if_sparse(progress);
+       if (progress->last_value != -1)
+               force_last_update(progress, msg);
+       log_trace2(progress);
+
        clear_progress_signal();
        strbuf_release(&progress->counters_sb);
        if (progress->throughput)
index f1913acf73f1790366ebd2f3f802f0472221bc7c..3a945637c81c22734b563325b66956ee4fb33b0b 100644 (file)
@@ -1,5 +1,6 @@
 #ifndef PROGRESS_H
 #define PROGRESS_H
+#include "gettext.h"
 
 struct progress;
 
@@ -18,7 +19,9 @@ struct progress *start_sparse_progress(const char *title, uint64_t total);
 struct progress *start_delayed_progress(const char *title, uint64_t total);
 struct progress *start_delayed_sparse_progress(const char *title,
                                               uint64_t total);
-void stop_progress(struct progress **progress);
-void stop_progress_msg(struct progress **progress, const char *msg);
-
+void stop_progress_msg(struct progress **p_progress, const char *msg);
+static inline void stop_progress(struct progress **p_progress)
+{
+       stop_progress_msg(p_progress, _("done"));
+}
 #endif
index 30a4de5c2d8a1447dc23d6b5d61278df0f796bbb..b72eb9fdbee8d8d7473c973973e88eb09e15f723 100644 (file)
@@ -40,6 +40,7 @@ static int read_patches(const char *range, struct string_list *list,
        char *line, *current_filename = NULL;
        ssize_t len;
        size_t size;
+       int ret = -1;
 
        strvec_pushl(&cp.args, "log", "--no-color", "-p", "--no-merges",
                     "--reverse", "--date-order", "--decorate=no",
@@ -68,10 +69,10 @@ static int read_patches(const char *range, struct string_list *list,
        if (strbuf_read(&contents, cp.out, 0) < 0) {
                error_errno(_("could not read `log` output"));
                finish_command(&cp);
-               return -1;
+               goto cleanup;
        }
        if (finish_command(&cp))
-               return -1;
+               goto cleanup;
 
        line = contents.buf;
        size = contents.len;
@@ -95,12 +96,9 @@ static int read_patches(const char *range, struct string_list *list,
                        CALLOC_ARRAY(util, 1);
                        if (get_oid(p, &util->oid)) {
                                error(_("could not parse commit '%s'"), p);
-                               free(util);
-                               free(current_filename);
+                               FREE_AND_NULL(util);
                                string_list_clear(list, 1);
-                               strbuf_release(&buf);
-                               strbuf_release(&contents);
-                               return -1;
+                               goto cleanup;
                        }
                        util->matching = -1;
                        in_header = 1;
@@ -111,11 +109,8 @@ static int read_patches(const char *range, struct string_list *list,
                        error(_("could not parse first line of `log` output: "
                                "did not start with 'commit ': '%s'"),
                              line);
-                       free(current_filename);
                        string_list_clear(list, 1);
-                       strbuf_release(&buf);
-                       strbuf_release(&contents);
-                       return -1;
+                       goto cleanup;
                }
 
                if (starts_with(line, "diff --git")) {
@@ -136,12 +131,9 @@ static int read_patches(const char *range, struct string_list *list,
                        if (len < 0) {
                                error(_("could not parse git header '%.*s'"),
                                      orig_len, line);
-                               free(util);
-                               free(current_filename);
+                               FREE_AND_NULL(util);
                                string_list_clear(list, 1);
-                               strbuf_release(&buf);
-                               strbuf_release(&contents);
-                               return -1;
+                               goto cleanup;
                        }
                        strbuf_addstr(&buf, " ## ");
                        if (patch.is_new > 0)
@@ -165,6 +157,7 @@ static int read_patches(const char *range, struct string_list *list,
                                            patch.old_mode, patch.new_mode);
 
                        strbuf_addstr(&buf, " ##");
+                       release_patch(&patch);
                } else if (in_header) {
                        if (starts_with(line, "Author: ")) {
                                strbuf_addstr(&buf, " ## Metadata ##\n");
@@ -218,6 +211,9 @@ static int read_patches(const char *range, struct string_list *list,
                strbuf_addch(&buf, '\n');
                util->diffsize++;
        }
+
+       ret = 0;
+cleanup:
        strbuf_release(&contents);
 
        if (util)
@@ -225,7 +221,7 @@ static int read_patches(const char *range, struct string_list *list,
        strbuf_release(&buf);
        free(current_filename);
 
-       return 0;
+       return ret;
 }
 
 static int patch_util_cmp(const void *dummy, const struct patch_util *a,
index 84e3d0d75ed05fbae051bb031a5e54d600def1e0..b9f4ad886eff72f75eaa45c40d8a75c6ae2d2008 100644 (file)
@@ -205,7 +205,7 @@ void mark_reachable_objects(struct rev_info *revs, int mark_reflog,
        cp.progress = progress;
        cp.count = 0;
 
-       bitmap_git = prepare_bitmap_walk(revs, NULL, 0);
+       bitmap_git = prepare_bitmap_walk(revs, 0);
        if (bitmap_git) {
                traverse_bitmap_commit_list(bitmap_git, revs, mark_object_seen);
                free_bitmap_index(bitmap_git);
index cbe73f14e5e7efc63b20e80a2702fb5c0dea9a5d..4df97e185e9c80cd061ab1d00143eceed81a0242 100644 (file)
@@ -28,6 +28,7 @@
 #include "sparse-index.h"
 #include "csum-file.h"
 #include "promisor-remote.h"
+#include "hook.h"
 
 /* Mask for the name length in ce_flags in the on-disk index */
 
@@ -133,7 +134,7 @@ static void replace_index_entry(struct index_state *istate, int nr, struct cache
 
 void rename_index_entry_at(struct index_state *istate, int nr, const char *new_name)
 {
-       struct cache_entry *old_entry = istate->cache[nr], *new_entry;
+       struct cache_entry *old_entry = istate->cache[nr], *new_entry, *refreshed;
        int namelen = strlen(new_name);
 
        new_entry = make_empty_cache_entry(istate, namelen);
@@ -146,7 +147,20 @@ void rename_index_entry_at(struct index_state *istate, int nr, const char *new_n
        cache_tree_invalidate_path(istate, old_entry->name);
        untracked_cache_remove_from_index(istate, old_entry->name);
        remove_index_entry_at(istate, nr);
-       add_index_entry(istate, new_entry, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
+
+       /*
+        * Refresh the new index entry. Using 'refresh_cache_entry' ensures
+        * we only update stat info if the entry is otherwise up-to-date (i.e.,
+        * the contents/mode haven't changed). This ensures that we reflect the
+        * 'ctime' of the rename in the index without (incorrectly) updating
+        * the cached stat info to reflect unstaged changes on disk.
+        */
+       refreshed = refresh_cache_entry(istate, new_entry, CE_MATCH_REFRESH);
+       if (refreshed && refreshed != new_entry) {
+               add_index_entry(istate, refreshed, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
+               discard_cache_entry(new_entry);
+       } else
+               add_index_entry(istate, new_entry, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
 }
 
 void fill_stat_data(struct stat_data *sd, struct stat *st)
@@ -735,7 +749,7 @@ static struct cache_entry *create_alias_ce(struct index_state *istate,
 void set_object_name_for_intent_to_add_entry(struct cache_entry *ce)
 {
        struct object_id oid;
-       if (write_object_file("", 0, blob_type, &oid))
+       if (write_object_file("", 0, OBJ_BLOB, &oid))
                die(_("cannot create an empty blob in the object database"));
        oidcpy(&ce->oid, &oid);
 }
@@ -1339,9 +1353,6 @@ static int add_index_entry_with_check(struct index_state *istate, struct cache_e
        int skip_df_check = option & ADD_CACHE_SKIP_DFCHECK;
        int new_only = option & ADD_CACHE_NEW_ONLY;
 
-       if (!(option & ADD_CACHE_KEEP_CACHE_TREE))
-               cache_tree_invalidate_path(istate, ce->name);
-
        /*
         * If this entry's path sorts after the last entry in the index,
         * we can avoid searching for it.
@@ -1352,6 +1363,13 @@ static int add_index_entry_with_check(struct index_state *istate, struct cache_e
        else
                pos = index_name_stage_pos(istate, ce->name, ce_namelen(ce), ce_stage(ce), EXPAND_SPARSE);
 
+       /*
+        * Cache tree path should be invalidated only after index_name_stage_pos,
+        * in case it expands a sparse index.
+        */
+       if (!(option & ADD_CACHE_KEEP_CACHE_TREE))
+               cache_tree_invalidate_path(istate, ce->name);
+
        /* existing match? Just replace it. */
        if (pos >= 0) {
                if (!new_only)
@@ -2775,7 +2793,7 @@ static int repo_verify_index(struct repository *repo)
        return verify_index_from(repo->index, repo->index_file);
 }
 
-static int has_racy_timestamp(struct index_state *istate)
+int has_racy_timestamp(struct index_state *istate)
 {
        int entries = istate->cache_nr;
        int i;
@@ -2837,7 +2855,7 @@ static int record_ieot(void)
  * rely on it.
  */
 static int do_write_index(struct index_state *istate, struct tempfile *tempfile,
-                         int strip_extensions)
+                         int strip_extensions, unsigned flags)
 {
        uint64_t start = getnanotime();
        struct hashfile *f;
@@ -2851,6 +2869,7 @@ static int do_write_index(struct index_state *istate, struct tempfile *tempfile,
        struct strbuf previous_name_buf = STRBUF_INIT, *previous_name;
        int drop_cache_tree = istate->drop_cache_tree;
        off_t offset;
+       int csum_fsync_flag;
        int ieot_entries = 1;
        struct index_entry_offset_table *ieot = NULL;
        int nr, nr_threads;
@@ -3009,6 +3028,9 @@ static int do_write_index(struct index_state *istate, struct tempfile *tempfile,
            !is_null_oid(&istate->split_index->base_oid)) {
                struct strbuf sb = STRBUF_INIT;
 
+               if (istate->sparse_index)
+                       die(_("cannot write split index for a sparse index"));
+
                err = write_link_extension(&sb, istate) < 0 ||
                        write_index_ext_header(f, eoie_c, CACHE_EXT_LINK,
                                               sb.len) < 0;
@@ -3081,7 +3103,13 @@ static int do_write_index(struct index_state *istate, struct tempfile *tempfile,
                        return -1;
        }
 
-       finalize_hashfile(f, istate->oid.hash, CSUM_HASH_IN_STREAM);
+       csum_fsync_flag = 0;
+       if (!alternate_index_output && (flags & COMMIT_LOCK))
+               csum_fsync_flag = CSUM_FSYNC;
+
+       finalize_hashfile(f, istate->oid.hash, FSYNC_COMPONENT_INDEX,
+                         CSUM_HASH_IN_STREAM | csum_fsync_flag);
+
        if (close_tempfile_gently(tempfile)) {
                error(_("could not close '%s'"), get_tempfile_path(tempfile));
                return -1;
@@ -3136,7 +3164,7 @@ static int do_write_locked_index(struct index_state *istate, struct lock_file *l
         */
        trace2_region_enter_printf("index", "do_write_index", the_repository,
                                   "%s", get_lock_file_path(lock));
-       ret = do_write_index(istate, lock->tempfile, 0);
+       ret = do_write_index(istate, lock->tempfile, 0, flags);
        trace2_region_leave_printf("index", "do_write_index", the_repository,
                                   "%s", get_lock_file_path(lock));
 
@@ -3150,7 +3178,7 @@ static int do_write_locked_index(struct index_state *istate, struct lock_file *l
        else
                ret = close_lock_file_gently(lock);
 
-       run_hook_le(NULL, "post-index-change",
+       run_hooks_l("post-index-change",
                        istate->updated_workdir ? "1" : "0",
                        istate->updated_skipworktree ? "1" : "0", NULL);
        istate->updated_workdir = 0;
@@ -3230,7 +3258,7 @@ static int clean_shared_index_files(const char *current_hex)
 }
 
 static int write_shared_index(struct index_state *istate,
-                             struct tempfile **temp)
+                             struct tempfile **temp, unsigned flags)
 {
        struct split_index *si = istate->split_index;
        int ret, was_full = !istate->sparse_index;
@@ -3240,7 +3268,7 @@ static int write_shared_index(struct index_state *istate,
 
        trace2_region_enter_printf("index", "shared/do_write_index",
                                   the_repository, "%s", get_tempfile_path(*temp));
-       ret = do_write_index(si->base, *temp, 1);
+       ret = do_write_index(si->base, *temp, 1, flags);
        trace2_region_leave_printf("index", "shared/do_write_index",
                                   the_repository, "%s", get_tempfile_path(*temp));
 
@@ -3349,7 +3377,7 @@ int write_locked_index(struct index_state *istate, struct lock_file *lock,
                        ret = do_write_locked_index(istate, lock, flags);
                        goto out;
                }
-               ret = write_shared_index(istate, &temp);
+               ret = write_shared_index(istate, &temp, flags);
 
                saved_errno = errno;
                if (is_tempfile_active(temp))
index f7a2f17bfd94d7073cead2cfbebf877f6ab9fb98..7838bd22b8db1bd52859361a4f3b7789c2cf4b5b 100644 (file)
@@ -1251,7 +1251,7 @@ static void grab_date(const char *buf, struct atom_value *v, const char *atomnam
        char *zone;
        timestamp_t timestamp;
        long tz;
-       struct date_mode date_mode = { DATE_NORMAL };
+       struct date_mode date_mode = DATE_MODE_INIT;
        const char *formatp;
 
        /*
@@ -1276,6 +1276,7 @@ static void grab_date(const char *buf, struct atom_value *v, const char *atomnam
                goto bad;
        v->s = xstrdup(show_date(timestamp, tz, &date_mode));
        v->value = timestamp;
+       date_mode_release(&date_mode);
        return;
  bad:
        v->s = xstrdup("");
index f26408f6cc1caffd93949ebc95d74426c2a9db25..e9e00ffd479475a6a887b04ae685a64d3b251db7 100644 (file)
@@ -5,6 +5,7 @@
 
 struct commit;
 struct reflog_walk_info;
+struct date_mode;
 
 void init_reflog_walk(struct reflog_walk_info **info);
 int add_reflog_for_walk(struct reflog_walk_info *info,
diff --git a/reflog.c b/reflog.c
new file mode 100644 (file)
index 0000000..135a1a6
--- /dev/null
+++ b/reflog.c
@@ -0,0 +1,434 @@
+#include "cache.h"
+#include "object-store.h"
+#include "reflog.h"
+#include "refs.h"
+#include "revision.h"
+#include "worktree.h"
+
+/* Remember to update object flag allocation in object.h */
+#define INCOMPLETE     (1u<<10)
+#define STUDYING       (1u<<11)
+#define REACHABLE      (1u<<12)
+
+static int tree_is_complete(const struct object_id *oid)
+{
+       struct tree_desc desc;
+       struct name_entry entry;
+       int complete;
+       struct tree *tree;
+
+       tree = lookup_tree(the_repository, oid);
+       if (!tree)
+               return 0;
+       if (tree->object.flags & SEEN)
+               return 1;
+       if (tree->object.flags & INCOMPLETE)
+               return 0;
+
+       if (!tree->buffer) {
+               enum object_type type;
+               unsigned long size;
+               void *data = read_object_file(oid, &type, &size);
+               if (!data) {
+                       tree->object.flags |= INCOMPLETE;
+                       return 0;
+               }
+               tree->buffer = data;
+               tree->size = size;
+       }
+       init_tree_desc(&desc, tree->buffer, tree->size);
+       complete = 1;
+       while (tree_entry(&desc, &entry)) {
+               if (!has_object_file(&entry.oid) ||
+                   (S_ISDIR(entry.mode) && !tree_is_complete(&entry.oid))) {
+                       tree->object.flags |= INCOMPLETE;
+                       complete = 0;
+               }
+       }
+       free_tree_buffer(tree);
+
+       if (complete)
+               tree->object.flags |= SEEN;
+       return complete;
+}
+
+static int commit_is_complete(struct commit *commit)
+{
+       struct object_array study;
+       struct object_array found;
+       int is_incomplete = 0;
+       int i;
+
+       /* early return */
+       if (commit->object.flags & SEEN)
+               return 1;
+       if (commit->object.flags & INCOMPLETE)
+               return 0;
+       /*
+        * Find all commits that are reachable and are not marked as
+        * SEEN.  Then make sure the trees and blobs contained are
+        * complete.  After that, mark these commits also as SEEN.
+        * If some of the objects that are needed to complete this
+        * commit are missing, mark this commit as INCOMPLETE.
+        */
+       memset(&study, 0, sizeof(study));
+       memset(&found, 0, sizeof(found));
+       add_object_array(&commit->object, NULL, &study);
+       add_object_array(&commit->object, NULL, &found);
+       commit->object.flags |= STUDYING;
+       while (study.nr) {
+               struct commit *c;
+               struct commit_list *parent;
+
+               c = (struct commit *)object_array_pop(&study);
+               if (!c->object.parsed && !parse_object(the_repository, &c->object.oid))
+                       c->object.flags |= INCOMPLETE;
+
+               if (c->object.flags & INCOMPLETE) {
+                       is_incomplete = 1;
+                       break;
+               }
+               else if (c->object.flags & SEEN)
+                       continue;
+               for (parent = c->parents; parent; parent = parent->next) {
+                       struct commit *p = parent->item;
+                       if (p->object.flags & STUDYING)
+                               continue;
+                       p->object.flags |= STUDYING;
+                       add_object_array(&p->object, NULL, &study);
+                       add_object_array(&p->object, NULL, &found);
+               }
+       }
+       if (!is_incomplete) {
+               /*
+                * make sure all commits in "found" array have all the
+                * necessary objects.
+                */
+               for (i = 0; i < found.nr; i++) {
+                       struct commit *c =
+                               (struct commit *)found.objects[i].item;
+                       if (!tree_is_complete(get_commit_tree_oid(c))) {
+                               is_incomplete = 1;
+                               c->object.flags |= INCOMPLETE;
+                       }
+               }
+               if (!is_incomplete) {
+                       /* mark all found commits as complete, iow SEEN */
+                       for (i = 0; i < found.nr; i++)
+                               found.objects[i].item->flags |= SEEN;
+               }
+       }
+       /* clear flags from the objects we traversed */
+       for (i = 0; i < found.nr; i++)
+               found.objects[i].item->flags &= ~STUDYING;
+       if (is_incomplete)
+               commit->object.flags |= INCOMPLETE;
+       else {
+               /*
+                * If we come here, we have (1) traversed the ancestry chain
+                * from the "commit" until we reach SEEN commits (which are
+                * known to be complete), and (2) made sure that the commits
+                * encountered during the above traversal refer to trees that
+                * are complete.  Which means that we know *all* the commits
+                * we have seen during this process are complete.
+                */
+               for (i = 0; i < found.nr; i++)
+                       found.objects[i].item->flags |= SEEN;
+       }
+       /* free object arrays */
+       object_array_clear(&study);
+       object_array_clear(&found);
+       return !is_incomplete;
+}
+
+static int keep_entry(struct commit **it, struct object_id *oid)
+{
+       struct commit *commit;
+
+       if (is_null_oid(oid))
+               return 1;
+       commit = lookup_commit_reference_gently(the_repository, oid, 1);
+       if (!commit)
+               return 0;
+
+       /*
+        * Make sure everything in this commit exists.
+        *
+        * We have walked all the objects reachable from the refs
+        * and cache earlier.  The commits reachable by this commit
+        * must meet SEEN commits -- and then we should mark them as
+        * SEEN as well.
+        */
+       if (!commit_is_complete(commit))
+               return 0;
+       *it = commit;
+       return 1;
+}
+
+/*
+ * Starting from commits in the cb->mark_list, mark commits that are
+ * reachable from them.  Stop the traversal at commits older than
+ * the expire_limit and queue them back, so that the caller can call
+ * us again to restart the traversal with longer expire_limit.
+ */
+static void mark_reachable(struct expire_reflog_policy_cb *cb)
+{
+       struct commit_list *pending;
+       timestamp_t expire_limit = cb->mark_limit;
+       struct commit_list *leftover = NULL;
+
+       for (pending = cb->mark_list; pending; pending = pending->next)
+               pending->item->object.flags &= ~REACHABLE;
+
+       pending = cb->mark_list;
+       while (pending) {
+               struct commit_list *parent;
+               struct commit *commit = pop_commit(&pending);
+               if (commit->object.flags & REACHABLE)
+                       continue;
+               if (parse_commit(commit))
+                       continue;
+               commit->object.flags |= REACHABLE;
+               if (commit->date < expire_limit) {
+                       commit_list_insert(commit, &leftover);
+                       continue;
+               }
+               commit->object.flags |= REACHABLE;
+               parent = commit->parents;
+               while (parent) {
+                       commit = parent->item;
+                       parent = parent->next;
+                       if (commit->object.flags & REACHABLE)
+                               continue;
+                       commit_list_insert(commit, &pending);
+               }
+       }
+       cb->mark_list = leftover;
+}
+
+static int unreachable(struct expire_reflog_policy_cb *cb, struct commit *commit, struct object_id *oid)
+{
+       /*
+        * We may or may not have the commit yet - if not, look it
+        * up using the supplied sha1.
+        */
+       if (!commit) {
+               if (is_null_oid(oid))
+                       return 0;
+
+               commit = lookup_commit_reference_gently(the_repository, oid,
+                                                       1);
+
+               /* Not a commit -- keep it */
+               if (!commit)
+                       return 0;
+       }
+
+       /* Reachable from the current ref?  Don't prune. */
+       if (commit->object.flags & REACHABLE)
+               return 0;
+
+       if (cb->mark_list && cb->mark_limit) {
+               cb->mark_limit = 0; /* dig down to the root */
+               mark_reachable(cb);
+       }
+
+       return !(commit->object.flags & REACHABLE);
+}
+
+/*
+ * Return true iff the specified reflog entry should be expired.
+ */
+int should_expire_reflog_ent(struct object_id *ooid, struct object_id *noid,
+                            const char *email, timestamp_t timestamp, int tz,
+                            const char *message, void *cb_data)
+{
+       struct expire_reflog_policy_cb *cb = cb_data;
+       struct commit *old_commit, *new_commit;
+
+       if (timestamp < cb->cmd.expire_total)
+               return 1;
+
+       old_commit = new_commit = NULL;
+       if (cb->cmd.stalefix &&
+           (!keep_entry(&old_commit, ooid) || !keep_entry(&new_commit, noid)))
+               return 1;
+
+       if (timestamp < cb->cmd.expire_unreachable) {
+               switch (cb->unreachable_expire_kind) {
+               case UE_ALWAYS:
+                       return 1;
+               case UE_NORMAL:
+               case UE_HEAD:
+                       if (unreachable(cb, old_commit, ooid) || unreachable(cb, new_commit, noid))
+                               return 1;
+                       break;
+               }
+       }
+
+       if (cb->cmd.recno && --(cb->cmd.recno) == 0)
+               return 1;
+
+       return 0;
+}
+
+int should_expire_reflog_ent_verbose(struct object_id *ooid,
+                                    struct object_id *noid,
+                                    const char *email,
+                                    timestamp_t timestamp, int tz,
+                                    const char *message, void *cb_data)
+{
+       struct expire_reflog_policy_cb *cb = cb_data;
+       int expire;
+
+       expire = should_expire_reflog_ent(ooid, noid, email, timestamp, tz,
+                                         message, cb);
+
+       if (!expire)
+               printf("keep %s", message);
+       else if (cb->dry_run)
+               printf("would prune %s", message);
+       else
+               printf("prune %s", message);
+
+       return expire;
+}
+
+static int push_tip_to_list(const char *refname, const struct object_id *oid,
+                           int flags, void *cb_data)
+{
+       struct commit_list **list = cb_data;
+       struct commit *tip_commit;
+       if (flags & REF_ISSYMREF)
+               return 0;
+       tip_commit = lookup_commit_reference_gently(the_repository, oid, 1);
+       if (!tip_commit)
+               return 0;
+       commit_list_insert(tip_commit, list);
+       return 0;
+}
+
+static int is_head(const char *refname)
+{
+       switch (ref_type(refname)) {
+       case REF_TYPE_OTHER_PSEUDOREF:
+       case REF_TYPE_MAIN_PSEUDOREF:
+               if (parse_worktree_ref(refname, NULL, NULL, &refname))
+                       BUG("not a worktree ref: %s", refname);
+               break;
+       default:
+               break;
+       }
+       return !strcmp(refname, "HEAD");
+}
+
+void reflog_expiry_prepare(const char *refname,
+                          const struct object_id *oid,
+                          void *cb_data)
+{
+       struct expire_reflog_policy_cb *cb = cb_data;
+       struct commit_list *elem;
+       struct commit *commit = NULL;
+
+       if (!cb->cmd.expire_unreachable || is_head(refname)) {
+               cb->unreachable_expire_kind = UE_HEAD;
+       } else {
+               commit = lookup_commit(the_repository, oid);
+               if (commit && is_null_oid(&commit->object.oid))
+                       commit = NULL;
+               cb->unreachable_expire_kind = commit ? UE_NORMAL : UE_ALWAYS;
+       }
+
+       if (cb->cmd.expire_unreachable <= cb->cmd.expire_total)
+               cb->unreachable_expire_kind = UE_ALWAYS;
+
+       switch (cb->unreachable_expire_kind) {
+       case UE_ALWAYS:
+               return;
+       case UE_HEAD:
+               for_each_ref(push_tip_to_list, &cb->tips);
+               for (elem = cb->tips; elem; elem = elem->next)
+                       commit_list_insert(elem->item, &cb->mark_list);
+               break;
+       case UE_NORMAL:
+               commit_list_insert(commit, &cb->mark_list);
+               /* For reflog_expiry_cleanup() below */
+               cb->tip_commit = commit;
+       }
+       cb->mark_limit = cb->cmd.expire_total;
+       mark_reachable(cb);
+}
+
+void reflog_expiry_cleanup(void *cb_data)
+{
+       struct expire_reflog_policy_cb *cb = cb_data;
+       struct commit_list *elem;
+
+       switch (cb->unreachable_expire_kind) {
+       case UE_ALWAYS:
+               return;
+       case UE_HEAD:
+               for (elem = cb->tips; elem; elem = elem->next)
+                       clear_commit_marks(elem->item, REACHABLE);
+               free_commit_list(cb->tips);
+               break;
+       case UE_NORMAL:
+               clear_commit_marks(cb->tip_commit, REACHABLE);
+               break;
+       }
+}
+
+int count_reflog_ent(struct object_id *ooid, struct object_id *noid,
+                    const char *email, timestamp_t timestamp, int tz,
+                    const char *message, void *cb_data)
+{
+       struct cmd_reflog_expire_cb *cb = cb_data;
+       if (!cb->expire_total || timestamp < cb->expire_total)
+               cb->recno++;
+       return 0;
+}
+
+int reflog_delete(const char *rev, enum expire_reflog_flags flags, int verbose)
+{
+       struct cmd_reflog_expire_cb cmd = { 0 };
+       int status = 0;
+       reflog_expiry_should_prune_fn *should_prune_fn = should_expire_reflog_ent;
+       const char *spec = strstr(rev, "@{");
+       char *ep, *ref;
+       int recno;
+       struct expire_reflog_policy_cb cb = {
+               .dry_run = !!(flags & EXPIRE_REFLOGS_DRY_RUN),
+       };
+
+       if (verbose)
+               should_prune_fn = should_expire_reflog_ent_verbose;
+
+       if (!spec)
+               return error(_("not a reflog: %s"), rev);
+
+       if (!dwim_log(rev, spec - rev, NULL, &ref)) {
+               status |= error(_("no reflog for '%s'"), rev);
+               goto cleanup;
+       }
+
+       recno = strtoul(spec + 2, &ep, 10);
+       if (*ep == '}') {
+               cmd.recno = -recno;
+               for_each_reflog_ent(ref, count_reflog_ent, &cmd);
+       } else {
+               cmd.expire_total = approxidate(spec + 2);
+               for_each_reflog_ent(ref, count_reflog_ent, &cmd);
+               cmd.expire_total = 0;
+       }
+
+       cb.cmd = cmd;
+       status |= reflog_expire(ref, flags,
+                               reflog_expiry_prepare,
+                               should_prune_fn,
+                               reflog_expiry_cleanup,
+                               &cb);
+
+ cleanup:
+       free(ref);
+       return status;
+}
diff --git a/reflog.h b/reflog.h
new file mode 100644 (file)
index 0000000..d2906fb
--- /dev/null
+++ b/reflog.h
@@ -0,0 +1,43 @@
+#ifndef REFLOG_H
+#define REFLOG_H
+#include "refs.h"
+
+struct cmd_reflog_expire_cb {
+       int stalefix;
+       int explicit_expiry;
+       timestamp_t expire_total;
+       timestamp_t expire_unreachable;
+       int recno;
+};
+
+struct expire_reflog_policy_cb {
+       enum {
+               UE_NORMAL,
+               UE_ALWAYS,
+               UE_HEAD
+       } unreachable_expire_kind;
+       struct commit_list *mark_list;
+       unsigned long mark_limit;
+       struct cmd_reflog_expire_cb cmd;
+       struct commit *tip_commit;
+       struct commit_list *tips;
+       unsigned int dry_run:1;
+};
+
+int reflog_delete(const char *rev, enum expire_reflog_flags flags,
+                 int verbose);
+void reflog_expiry_cleanup(void *cb_data);
+void reflog_expiry_prepare(const char *refname, const struct object_id *oid,
+                          void *cb_data);
+int should_expire_reflog_ent(struct object_id *ooid, struct object_id *noid,
+                            const char *email, timestamp_t timestamp, int tz,
+                            const char *message, void *cb_data);
+int count_reflog_ent(struct object_id *ooid, struct object_id *noid,
+                    const char *email, timestamp_t timestamp, int tz,
+                    const char *message, void *cb_data);
+int should_expire_reflog_ent_verbose(struct object_id *ooid,
+                                    struct object_id *noid,
+                                    const char *email,
+                                    timestamp_t timestamp, int tz,
+                                    const char *message, void *cb_data);
+#endif /* REFLOG_H */
diff --git a/refs.c b/refs.c
index addb26293b4ffc1b0c997379acce5d13d70991c8..9db66e995518c9f85acd0de0c5fa44658fdcf523 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -19,6 +19,7 @@
 #include "strvec.h"
 #include "repository.h"
 #include "sigchain.h"
+#include "date.h"
 
 /*
  * List of all available backends
@@ -269,10 +270,9 @@ char *refs_resolve_refdup(struct ref_store *refs,
                          struct object_id *oid, int *flags)
 {
        const char *result;
-       int ignore_errno;
 
        result = refs_resolve_ref_unsafe(refs, refname, resolve_flags,
-                                        oid, flags, &ignore_errno);
+                                        oid, flags);
        return xstrdup_or_null(result);
 }
 
@@ -294,11 +294,10 @@ struct ref_filter {
 
 int read_ref_full(const char *refname, int resolve_flags, struct object_id *oid, int *flags)
 {
-       int ignore_errno;
        struct ref_store *refs = get_main_ref_store(the_repository);
 
        if (refs_resolve_ref_unsafe(refs, refname, resolve_flags,
-                                   oid, flags, &ignore_errno))
+                                   oid, flags))
                return 0;
        return -1;
 }
@@ -310,9 +309,8 @@ int read_ref(const char *refname, struct object_id *oid)
 
 int refs_ref_exists(struct ref_store *refs, const char *refname)
 {
-       int ignore_errno;
        return !!refs_resolve_ref_unsafe(refs, refname, RESOLVE_REF_READING,
-                                        NULL, NULL, &ignore_errno);
+                                        NULL, NULL);
 }
 
 int ref_exists(const char *refname)
@@ -656,15 +654,13 @@ int expand_ref(struct repository *repo, const char *str, int len,
                struct object_id *this_result;
                int flag;
                struct ref_store *refs = get_main_ref_store(repo);
-               int ignore_errno;
 
                this_result = refs_found ? &oid_from_ref : oid;
                strbuf_reset(&fullref);
                strbuf_addf(&fullref, *p, len, str);
                r = refs_resolve_ref_unsafe(refs, fullref.buf,
                                            RESOLVE_REF_READING,
-                                           this_result, &flag,
-                                           &ignore_errno);
+                                           this_result, &flag);
                if (r) {
                        if (!refs_found++)
                                *ref = xstrdup(r);
@@ -693,14 +689,12 @@ int repo_dwim_log(struct repository *r, const char *str, int len,
        for (p = ref_rev_parse_rules; *p; p++) {
                struct object_id hash;
                const char *ref, *it;
-               int ignore_errno;
 
                strbuf_reset(&path);
                strbuf_addf(&path, *p, len, str);
                ref = refs_resolve_ref_unsafe(refs, path.buf,
                                              RESOLVE_REF_READING,
-                                             oid ? &hash : NULL, NULL,
-                                             &ignore_errno);
+                                             oid ? &hash : NULL, NULL);
                if (!ref)
                        continue;
                if (refs_reflog_exists(refs, path.buf))
@@ -1390,10 +1384,9 @@ int refs_head_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
 {
        struct object_id oid;
        int flag;
-       int ignore_errno;
 
        if (refs_resolve_ref_unsafe(refs, "HEAD", RESOLVE_REF_READING,
-                                   &oid, &flag, &ignore_errno))
+                                   &oid, &flag))
                return fn("HEAD", &oid, flag, cb_data);
 
        return 0;
@@ -1678,19 +1671,23 @@ int refs_read_raw_ref(struct ref_store *ref_store, const char *refname,
                                           type, failure_errno);
 }
 
+int refs_read_symbolic_ref(struct ref_store *ref_store, const char *refname,
+                          struct strbuf *referent)
+{
+       return ref_store->be->read_symbolic_ref(ref_store, refname, referent);
+}
+
 const char *refs_resolve_ref_unsafe(struct ref_store *refs,
                                    const char *refname,
                                    int resolve_flags,
                                    struct object_id *oid,
-                                   int *flags, int *failure_errno)
+                                   int *flags)
 {
        static struct strbuf sb_refname = STRBUF_INIT;
        struct object_id unused_oid;
        int unused_flags;
        int symref_count;
 
-       assert(failure_errno);
-
        if (!oid)
                oid = &unused_oid;
        if (!flags)
@@ -1700,10 +1697,8 @@ const char *refs_resolve_ref_unsafe(struct ref_store *refs,
 
        if (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL)) {
                if (!(resolve_flags & RESOLVE_REF_ALLOW_BAD_NAME) ||
-                   !refname_is_safe(refname)) {
-                       *failure_errno = EINVAL;
+                   !refname_is_safe(refname))
                        return NULL;
-               }
 
                /*
                 * dwim_ref() uses REF_ISBROKEN to distinguish between
@@ -1718,9 +1713,10 @@ const char *refs_resolve_ref_unsafe(struct ref_store *refs,
 
        for (symref_count = 0; symref_count < SYMREF_MAXDEPTH; symref_count++) {
                unsigned int read_flags = 0;
+               int failure_errno;
 
                if (refs_read_raw_ref(refs, refname, oid, &sb_refname,
-                                     &read_flags, failure_errno)) {
+                                     &read_flags, &failure_errno)) {
                        *flags |= read_flags;
 
                        /* In reading mode, refs must eventually resolve */
@@ -1732,9 +1728,9 @@ const char *refs_resolve_ref_unsafe(struct ref_store *refs,
                         * may show errors besides ENOENT if there are
                         * similarly-named refs.
                         */
-                       if (*failure_errno != ENOENT &&
-                           *failure_errno != EISDIR &&
-                           *failure_errno != ENOTDIR)
+                       if (failure_errno != ENOENT &&
+                           failure_errno != EISDIR &&
+                           failure_errno != ENOTDIR)
                                return NULL;
 
                        oidclr(oid);
@@ -1760,16 +1756,13 @@ const char *refs_resolve_ref_unsafe(struct ref_store *refs,
                }
                if (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL)) {
                        if (!(resolve_flags & RESOLVE_REF_ALLOW_BAD_NAME) ||
-                           !refname_is_safe(refname)) {
-                               *failure_errno = EINVAL;
+                           !refname_is_safe(refname))
                                return NULL;
-                       }
 
                        *flags |= REF_ISBROKEN | REF_BAD_NAME;
                }
        }
 
-       *failure_errno = ELOOP;
        return NULL;
 }
 
@@ -1784,10 +1777,8 @@ int refs_init_db(struct strbuf *err)
 const char *resolve_ref_unsafe(const char *refname, int resolve_flags,
                               struct object_id *oid, int *flags)
 {
-       int ignore_errno;
-
        return refs_resolve_ref_unsafe(get_main_ref_store(the_repository), refname,
-                                      resolve_flags, oid, flags, &ignore_errno);
+                                      resolve_flags, oid, flags);
 }
 
 int resolve_gitlink_ref(const char *submodule, const char *refname,
@@ -1795,15 +1786,14 @@ int resolve_gitlink_ref(const char *submodule, const char *refname,
 {
        struct ref_store *refs;
        int flags;
-       int ignore_errno;
 
        refs = get_submodule_ref_store(submodule);
 
        if (!refs)
                return -1;
 
-       if (!refs_resolve_ref_unsafe(refs, refname, 0, oid, &flags,
-                                    &ignore_errno) || is_null_oid(oid))
+       if (!refs_resolve_ref_unsafe(refs, refname, 0, oid, &flags) ||
+           is_null_oid(oid))
                return -1;
        return 0;
 }
@@ -2429,6 +2419,22 @@ int initial_ref_transaction_commit(struct ref_transaction *transaction,
        return refs->be->initial_transaction_commit(refs, transaction, err);
 }
 
+void ref_transaction_for_each_queued_update(struct ref_transaction *transaction,
+                                           ref_transaction_for_each_queued_update_fn cb,
+                                           void *cb_data)
+{
+       int i;
+
+       for (i = 0; i < transaction->nr; i++) {
+               struct ref_update *update = transaction->updates[i];
+
+               cb(update->refname,
+                  (update->flags & REF_HAVE_OLD) ? &update->old_oid : NULL,
+                  (update->flags & REF_HAVE_NEW) ? &update->new_oid : NULL,
+                  cb_data);
+       }
+}
+
 int refs_delete_refs(struct ref_store *refs, const char *logmsg,
                     struct string_list *refnames, unsigned int flags)
 {
diff --git a/refs.h b/refs.h
index 8f91a7f9ff27ec0909c32d14122bf0f1a5c49573..47cb9edbaa8913c3af721d347744beefacb1e754 100644 (file)
--- a/refs.h
+++ b/refs.h
@@ -58,11 +58,6 @@ struct worktree;
  * resolved. The function returns NULL for such ref names.
  * Caps and underscores refers to the special refs, such as HEAD,
  * FETCH_HEAD and friends, that all live outside of the refs/ directory.
- *
- * Callers should not inspect "errno" on failure, but rather pass in a
- * "failure_errno" parameter, on failure the "errno" will indicate the
- * type of failure encountered, but not necessarily one that came from
- * a syscall. We might have faked it up.
  */
 #define RESOLVE_REF_READING 0x01
 #define RESOLVE_REF_NO_RECURSE 0x02
@@ -72,7 +67,7 @@ const char *refs_resolve_ref_unsafe(struct ref_store *refs,
                                    const char *refname,
                                    int resolve_flags,
                                    struct object_id *oid,
-                                   int *flags, int *failure_errno);
+                                   int *flags);
 
 const char *resolve_ref_unsafe(const char *refname, int resolve_flags,
                               struct object_id *oid, int *flags);
@@ -87,6 +82,9 @@ int read_ref_full(const char *refname, int resolve_flags,
                  struct object_id *oid, int *flags);
 int read_ref(const char *refname, struct object_id *oid);
 
+int refs_read_symbolic_ref(struct ref_store *ref_store, const char *refname,
+                          struct strbuf *referent);
+
 /*
  * Return 0 if a reference named refname could be created without
  * conflicting with the name of an existing reference. Otherwise,
@@ -775,6 +773,20 @@ int ref_transaction_abort(struct ref_transaction *transaction,
 int initial_ref_transaction_commit(struct ref_transaction *transaction,
                                   struct strbuf *err);
 
+/*
+ * Execute the given callback function for each of the reference updates which
+ * have been queued in the given transaction. `old_oid` and `new_oid` may be
+ * `NULL` pointers depending on whether the update has these object IDs set or
+ * not.
+ */
+typedef void ref_transaction_for_each_queued_update_fn(const char *refname,
+                                                      const struct object_id *old_oid,
+                                                      const struct object_id *new_oid,
+                                                      void *cb_data);
+void ref_transaction_for_each_queued_update(struct ref_transaction *transaction,
+                                           ref_transaction_for_each_queued_update_fn cb,
+                                           void *cb_data);
+
 /*
  * Free `*transaction` and all associated data.
  */
index 2b0771ca53b7854c46ab231b22ecf8be919ca19a..eed8bc94b04f68125bb84eddfc26381ad86d3157 100644 (file)
@@ -220,8 +220,9 @@ static int debug_ref_iterator_abort(struct ref_iterator *ref_iterator)
 }
 
 static struct ref_iterator_vtable debug_ref_iterator_vtable = {
-       debug_ref_iterator_advance, debug_ref_iterator_peel,
-       debug_ref_iterator_abort
+       .advance = debug_ref_iterator_advance,
+       .peel = debug_ref_iterator_peel,
+       .abort = debug_ref_iterator_abort,
 };
 
 static struct ref_iterator *
@@ -261,6 +262,24 @@ static int debug_read_raw_ref(struct ref_store *ref_store, const char *refname,
        return res;
 }
 
+static int debug_read_symbolic_ref(struct ref_store *ref_store, const char *refname,
+                                  struct strbuf *referent)
+{
+       struct debug_ref_store *drefs = (struct debug_ref_store *)ref_store;
+       struct ref_store *refs = drefs->refs;
+       int res;
+
+       res = refs->be->read_symbolic_ref(refs, refname, referent);
+       if (!res)
+               trace_printf_key(&trace_refs, "read_symbolic_ref: %s: (%s)\n",
+                                refname, referent->buf);
+       else
+               trace_printf_key(&trace_refs,
+                                "read_symbolic_ref: %s: %d\n", refname, res);
+       return res;
+
+}
+
 static struct ref_iterator *
 debug_reflog_iterator_begin(struct ref_store *ref_store)
 {
@@ -418,29 +437,37 @@ static int debug_reflog_expire(struct ref_store *ref_store, const char *refname,
 }
 
 struct ref_storage_be refs_be_debug = {
-       NULL,
-       "debug",
-       NULL,
-       debug_init_db,
-       debug_transaction_prepare,
-       debug_transaction_finish,
-       debug_transaction_abort,
-       debug_initial_transaction_commit,
-
-       debug_pack_refs,
-       debug_create_symref,
-       debug_delete_refs,
-       debug_rename_ref,
-       debug_copy_ref,
-
-       debug_ref_iterator_begin,
-       debug_read_raw_ref,
-
-       debug_reflog_iterator_begin,
-       debug_for_each_reflog_ent,
-       debug_for_each_reflog_ent_reverse,
-       debug_reflog_exists,
-       debug_create_reflog,
-       debug_delete_reflog,
-       debug_reflog_expire,
+       .next = NULL,
+       .name = "debug",
+       .init = NULL,
+       .init_db = debug_init_db,
+
+       /*
+        * None of these should be NULL. If the "files" backend (in
+        * "struct ref_storage_be refs_be_files" in files-backend.c)
+        * has a function we should also have a wrapper for it here.
+        * Test the output with "GIT_TRACE_REFS=1".
+        */
+       .transaction_prepare = debug_transaction_prepare,
+       .transaction_finish = debug_transaction_finish,
+       .transaction_abort = debug_transaction_abort,
+       .initial_transaction_commit = debug_initial_transaction_commit,
+
+       .pack_refs = debug_pack_refs,
+       .create_symref = debug_create_symref,
+       .delete_refs = debug_delete_refs,
+       .rename_ref = debug_rename_ref,
+       .copy_ref = debug_copy_ref,
+
+       .iterator_begin = debug_ref_iterator_begin,
+       .read_raw_ref = debug_read_raw_ref,
+       .read_symbolic_ref = debug_read_symbolic_ref,
+
+       .reflog_iterator_begin = debug_reflog_iterator_begin,
+       .for_each_reflog_ent = debug_for_each_reflog_ent,
+       .for_each_reflog_ent_reverse = debug_for_each_reflog_ent_reverse,
+       .reflog_exists = debug_reflog_exists,
+       .create_reflog = debug_create_reflog,
+       .delete_reflog = debug_delete_reflog,
+       .reflog_expire = debug_reflog_expire,
 };
index 43a3b882d7c50c231ae714f79b4a4fedfa7e1c9d..8db7882aacb533ebf6635a0457c8b2ac7855c392 100644 (file)
@@ -277,11 +277,10 @@ static void loose_fill_ref_dir(struct ref_store *ref_store,
                                         create_dir_entry(dir->cache, refname.buf,
                                                          refname.len));
                } else {
-                       int ignore_errno;
                        if (!refs_resolve_ref_unsafe(&refs->base,
                                                     refname.buf,
                                                     RESOLVE_REF_READING,
-                                                    &oid, &flag, &ignore_errno)) {
+                                                    &oid, &flag)) {
                                oidclr(&oid);
                                flag |= REF_ISBROKEN;
                        } else if (is_null_oid(&oid)) {
@@ -339,9 +338,9 @@ static struct ref_cache *get_loose_ref_cache(struct files_ref_store *refs)
        return refs->loose;
 }
 
-static int files_read_raw_ref(struct ref_store *ref_store, const char *refname,
-                             struct object_id *oid, struct strbuf *referent,
-                             unsigned int *type, int *failure_errno)
+static int read_ref_internal(struct ref_store *ref_store, const char *refname,
+                            struct object_id *oid, struct strbuf *referent,
+                            unsigned int *type, int *failure_errno, int skip_packed_refs)
 {
        struct files_ref_store *refs =
                files_downcast(ref_store, REF_STORE_READ, "read_raw_ref");
@@ -382,7 +381,7 @@ stat_ref:
        if (lstat(path, &st) < 0) {
                int ignore_errno;
                myerr = errno;
-               if (myerr != ENOENT)
+               if (myerr != ENOENT || skip_packed_refs)
                        goto out;
                if (refs_read_raw_ref(refs->packed_ref_store, refname, oid,
                                      referent, type, &ignore_errno)) {
@@ -426,7 +425,8 @@ stat_ref:
                 * ref is supposed to be, there could still be a
                 * packed ref:
                 */
-               if (refs_read_raw_ref(refs->packed_ref_store, refname, oid,
+               if (skip_packed_refs ||
+                   refs_read_raw_ref(refs->packed_ref_store, refname, oid,
                                      referent, type, &ignore_errno)) {
                        myerr = EISDIR;
                        goto out;
@@ -471,6 +471,27 @@ out:
        return ret;
 }
 
+static int files_read_raw_ref(struct ref_store *ref_store, const char *refname,
+                             struct object_id *oid, struct strbuf *referent,
+                             unsigned int *type, int *failure_errno)
+{
+       return read_ref_internal(ref_store, refname, oid, referent, type, failure_errno, 0);
+}
+
+static int files_read_symbolic_ref(struct ref_store *ref_store, const char *refname,
+                                  struct strbuf *referent)
+{
+       struct object_id oid;
+       int failure_errno, ret;
+       unsigned int type;
+
+       ret = read_ref_internal(ref_store, refname, &oid, referent, &type, &failure_errno, 1);
+       if (ret)
+               return ret;
+
+       return !(type & REF_ISSYMREF);
+}
+
 int parse_loose_ref_contents(const char *buf, struct object_id *oid,
                             struct strbuf *referent, unsigned int *type,
                             int *failure_errno)
@@ -801,9 +822,9 @@ static int files_ref_iterator_abort(struct ref_iterator *ref_iterator)
 }
 
 static struct ref_iterator_vtable files_ref_iterator_vtable = {
-       files_ref_iterator_advance,
-       files_ref_iterator_peel,
-       files_ref_iterator_abort
+       .advance = files_ref_iterator_advance,
+       .peel = files_ref_iterator_peel,
+       .abort = files_ref_iterator_abort,
 };
 
 static struct ref_iterator *files_ref_iterator_begin(
@@ -1006,7 +1027,6 @@ static struct ref_lock *lock_ref_oid_basic(struct files_ref_store *refs,
 {
        struct strbuf ref_file = STRBUF_INIT;
        struct ref_lock *lock;
-       int ignore_errno;
 
        files_assert_main_repository(refs, "lock_ref_oid_basic");
        assert(err);
@@ -1034,7 +1054,7 @@ static struct ref_lock *lock_ref_oid_basic(struct files_ref_store *refs,
        }
 
        if (!refs_resolve_ref_unsafe(&refs->base, lock->ref_name, 0,
-                                    &lock->old_oid, NULL, &ignore_errno))
+                                    &lock->old_oid, NULL))
                oidclr(&lock->old_oid);
        goto out;
 
@@ -1399,7 +1419,6 @@ static int files_copy_or_rename_ref(struct ref_store *ref_store,
        struct strbuf tmp_renamed_log = STRBUF_INIT;
        int log, ret;
        struct strbuf err = STRBUF_INIT;
-       int ignore_errno;
 
        files_reflog_path(refs, &sb_oldref, oldrefname);
        files_reflog_path(refs, &sb_newref, newrefname);
@@ -1413,7 +1432,7 @@ static int files_copy_or_rename_ref(struct ref_store *ref_store,
 
        if (!refs_resolve_ref_unsafe(&refs->base, oldrefname,
                                     RESOLVE_REF_READING | RESOLVE_REF_NO_RECURSE,
-                                    &orig_oid, &flag, &ignore_errno)) {
+                                    &orig_oid, &flag)) {
                ret = error("refname %s not found", oldrefname);
                goto out;
        }
@@ -1459,7 +1478,7 @@ static int files_copy_or_rename_ref(struct ref_store *ref_store,
         */
        if (!copy && refs_resolve_ref_unsafe(&refs->base, newrefname,
                                             RESOLVE_REF_READING | RESOLVE_REF_NO_RECURSE,
-                                            NULL, NULL, &ignore_errno) &&
+                                            NULL, NULL) &&
            refs_delete_ref(&refs->base, NULL, newrefname,
                            NULL, REF_NO_DEREF)) {
                if (errno == EISDIR) {
@@ -1780,6 +1799,7 @@ static int write_ref_to_lockfile(struct ref_lock *lock,
        fd = get_lock_file_fd(&lock->lk);
        if (write_in_full(fd, oid_to_hex(oid), the_hash_algo->hexsz) < 0 ||
            write_in_full(fd, &term, 1) < 0 ||
+           fsync_component(FSYNC_COMPONENT_REFERENCE, get_lock_file_fd(&lock->lk)) < 0 ||
            close_ref_gently(lock) < 0) {
                strbuf_addf(err,
                            "couldn't write '%s'", get_lock_file_path(&lock->lk));
@@ -1828,12 +1848,10 @@ static int commit_ref_update(struct files_ref_store *refs,
                 */
                int head_flag;
                const char *head_ref;
-               int ignore_errno;
 
                head_ref = refs_resolve_ref_unsafe(&refs->base, "HEAD",
                                                   RESOLVE_REF_READING,
-                                                  NULL, &head_flag,
-                                                  &ignore_errno);
+                                                  NULL, &head_flag);
                if (head_ref && (head_flag & REF_ISSYMREF) &&
                    !strcmp(head_ref, lock->ref_name)) {
                        struct strbuf log_err = STRBUF_INIT;
@@ -1877,12 +1895,10 @@ static void update_symref_reflog(struct files_ref_store *refs,
 {
        struct strbuf err = STRBUF_INIT;
        struct object_id new_oid;
-       int ignore_errno;
 
        if (logmsg &&
            refs_resolve_ref_unsafe(&refs->base, target,
-                                   RESOLVE_REF_READING, &new_oid, NULL,
-                                   &ignore_errno) &&
+                                   RESOLVE_REF_READING, &new_oid, NULL) &&
            files_log_ref_write(refs, refname, &lock->old_oid,
                                &new_oid, logmsg, 0, &err)) {
                error("%s", err.buf);
@@ -2156,7 +2172,6 @@ static int files_reflog_iterator_advance(struct ref_iterator *ref_iterator)
                (struct files_reflog_iterator *)ref_iterator;
        struct dir_iterator *diter = iter->dir_iterator;
        int ok;
-       int ignore_errno;
 
        while ((ok = dir_iterator_advance(diter)) == ITER_OK) {
                int flags;
@@ -2170,8 +2185,7 @@ static int files_reflog_iterator_advance(struct ref_iterator *ref_iterator)
 
                if (!refs_resolve_ref_unsafe(iter->ref_store,
                                             diter->relative_path, 0,
-                                            &iter->oid, &flags,
-                                            &ignore_errno)) {
+                                            &iter->oid, &flags)) {
                        error("bad ref for %s", diter->path.buf);
                        continue;
                }
@@ -2208,9 +2222,9 @@ static int files_reflog_iterator_abort(struct ref_iterator *ref_iterator)
 }
 
 static struct ref_iterator_vtable files_reflog_iterator_vtable = {
-       files_reflog_iterator_advance,
-       files_reflog_iterator_peel,
-       files_reflog_iterator_abort
+       .advance = files_reflog_iterator_advance,
+       .peel = files_reflog_iterator_peel,
+       .abort = files_reflog_iterator_abort,
 };
 
 static struct ref_iterator *reflog_iterator_begin(struct ref_store *ref_store,
@@ -2515,11 +2529,9 @@ static int lock_ref_for_update(struct files_ref_store *refs,
                         * the transaction, so we have to read it here
                         * to record and possibly check old_oid:
                         */
-                       int ignore_errno;
                        if (!refs_resolve_ref_unsafe(&refs->base,
                                                     referent.buf, 0,
-                                                    &lock->old_oid, NULL,
-                                                    &ignore_errno)) {
+                                                    &lock->old_oid, NULL)) {
                                if (update->flags & REF_HAVE_OLD) {
                                        strbuf_addf(err, "cannot lock ref '%s': "
                                                    "error reading reference",
@@ -3208,14 +3220,12 @@ static int files_reflog_expire(struct ref_store *ref_store,
 
                if ((expire_flags & EXPIRE_REFLOGS_UPDATE_REF) &&
                    !is_null_oid(&cb.last_kept_oid)) {
-                       int ignore_errno;
                        int type;
                        const char *ref;
 
                        ref = refs_resolve_ref_unsafe(&refs->base, refname,
                                                      RESOLVE_REF_NO_RECURSE,
-                                                     NULL, &type,
-                                                     &ignore_errno);
+                                                     NULL, &type);
                        update = !!(ref && !(type & REF_ISSYMREF));
                }
 
@@ -3270,29 +3280,30 @@ static int files_init_db(struct ref_store *ref_store, struct strbuf *err)
 }
 
 struct ref_storage_be refs_be_files = {
-       NULL,
-       "files",
-       files_ref_store_create,
-       files_init_db,
-       files_transaction_prepare,
-       files_transaction_finish,
-       files_transaction_abort,
-       files_initial_transaction_commit,
-
-       files_pack_refs,
-       files_create_symref,
-       files_delete_refs,
-       files_rename_ref,
-       files_copy_ref,
-
-       files_ref_iterator_begin,
-       files_read_raw_ref,
-
-       files_reflog_iterator_begin,
-       files_for_each_reflog_ent,
-       files_for_each_reflog_ent_reverse,
-       files_reflog_exists,
-       files_create_reflog,
-       files_delete_reflog,
-       files_reflog_expire
+       .next = NULL,
+       .name = "files",
+       .init = files_ref_store_create,
+       .init_db = files_init_db,
+       .transaction_prepare = files_transaction_prepare,
+       .transaction_finish = files_transaction_finish,
+       .transaction_abort = files_transaction_abort,
+       .initial_transaction_commit = files_initial_transaction_commit,
+
+       .pack_refs = files_pack_refs,
+       .create_symref = files_create_symref,
+       .delete_refs = files_delete_refs,
+       .rename_ref = files_rename_ref,
+       .copy_ref = files_copy_ref,
+
+       .iterator_begin = files_ref_iterator_begin,
+       .read_raw_ref = files_read_raw_ref,
+       .read_symbolic_ref = files_read_symbolic_ref,
+
+       .reflog_iterator_begin = files_reflog_iterator_begin,
+       .for_each_reflog_ent = files_for_each_reflog_ent,
+       .for_each_reflog_ent_reverse = files_for_each_reflog_ent_reverse,
+       .reflog_exists = files_reflog_exists,
+       .create_reflog = files_create_reflog,
+       .delete_reflog = files_delete_reflog,
+       .reflog_expire = files_reflog_expire
 };
index a89d132d4fe7796f4ba8edbadbdfc5cdd8cd5978..b2e56bae1c6408bccf66729b8b09f76907b984d9 100644 (file)
@@ -64,9 +64,9 @@ static int empty_ref_iterator_abort(struct ref_iterator *ref_iterator)
 }
 
 static struct ref_iterator_vtable empty_ref_iterator_vtable = {
-       empty_ref_iterator_advance,
-       empty_ref_iterator_peel,
-       empty_ref_iterator_abort
+       .advance = empty_ref_iterator_advance,
+       .peel = empty_ref_iterator_peel,
+       .abort = empty_ref_iterator_abort,
 };
 
 struct ref_iterator *empty_ref_iterator_begin(void)
@@ -201,9 +201,9 @@ static int merge_ref_iterator_abort(struct ref_iterator *ref_iterator)
 }
 
 static struct ref_iterator_vtable merge_ref_iterator_vtable = {
-       merge_ref_iterator_advance,
-       merge_ref_iterator_peel,
-       merge_ref_iterator_abort
+       .advance = merge_ref_iterator_advance,
+       .peel = merge_ref_iterator_peel,
+       .abort = merge_ref_iterator_abort,
 };
 
 struct ref_iterator *merge_ref_iterator_begin(
@@ -378,9 +378,9 @@ static int prefix_ref_iterator_abort(struct ref_iterator *ref_iterator)
 }
 
 static struct ref_iterator_vtable prefix_ref_iterator_vtable = {
-       prefix_ref_iterator_advance,
-       prefix_ref_iterator_peel,
-       prefix_ref_iterator_abort
+       .advance = prefix_ref_iterator_advance,
+       .peel = prefix_ref_iterator_peel,
+       .abort = prefix_ref_iterator_abort,
 };
 
 struct ref_iterator *prefix_ref_iterator_begin(struct ref_iterator *iter0,
index d91a2018f6011d6c8e79a97e5742baa3c32a9f4a..97b68377673067d3a28d60e01f2b4532433750f2 100644 (file)
@@ -911,9 +911,9 @@ static int packed_ref_iterator_abort(struct ref_iterator *ref_iterator)
 }
 
 static struct ref_iterator_vtable packed_ref_iterator_vtable = {
-       packed_ref_iterator_advance,
-       packed_ref_iterator_peel,
-       packed_ref_iterator_abort
+       .advance = packed_ref_iterator_advance,
+       .peel = packed_ref_iterator_peel,
+       .abort = packed_ref_iterator_abort
 };
 
 static struct ref_iterator *packed_ref_iterator_begin(
@@ -1262,7 +1262,8 @@ static int write_with_updates(struct packed_ref_store *refs,
                goto error;
        }
 
-       if (close_tempfile_gently(refs->tempfile)) {
+       if (fsync_component(FSYNC_COMPONENT_REFERENCE, get_tempfile_fd(refs->tempfile)) ||
+           close_tempfile_gently(refs->tempfile)) {
                strbuf_addf(err, "error closing file %s: %s",
                            get_tempfile_path(refs->tempfile),
                            strerror(errno));
@@ -1577,105 +1578,36 @@ static int packed_pack_refs(struct ref_store *ref_store, unsigned int flags)
        return 0;
 }
 
-static int packed_create_symref(struct ref_store *ref_store,
-                              const char *refname, const char *target,
-                              const char *logmsg)
-{
-       BUG("packed reference store does not support symrefs");
-}
-
-static int packed_rename_ref(struct ref_store *ref_store,
-                           const char *oldrefname, const char *newrefname,
-                           const char *logmsg)
-{
-       BUG("packed reference store does not support renaming references");
-}
-
-static int packed_copy_ref(struct ref_store *ref_store,
-                          const char *oldrefname, const char *newrefname,
-                          const char *logmsg)
-{
-       BUG("packed reference store does not support copying references");
-}
-
 static struct ref_iterator *packed_reflog_iterator_begin(struct ref_store *ref_store)
 {
        return empty_ref_iterator_begin();
 }
 
-static int packed_for_each_reflog_ent(struct ref_store *ref_store,
-                                     const char *refname,
-                                     each_reflog_ent_fn fn, void *cb_data)
-{
-       BUG("packed reference store does not support reflogs");
-       return 0;
-}
-
-static int packed_for_each_reflog_ent_reverse(struct ref_store *ref_store,
-                                             const char *refname,
-                                             each_reflog_ent_fn fn,
-                                             void *cb_data)
-{
-       BUG("packed reference store does not support reflogs");
-       return 0;
-}
-
-static int packed_reflog_exists(struct ref_store *ref_store,
-                              const char *refname)
-{
-       BUG("packed reference store does not support reflogs");
-       return 0;
-}
-
-static int packed_create_reflog(struct ref_store *ref_store,
-                               const char *refname, struct strbuf *err)
-{
-       BUG("packed reference store does not support reflogs");
-}
-
-static int packed_delete_reflog(struct ref_store *ref_store,
-                              const char *refname)
-{
-       BUG("packed reference store does not support reflogs");
-       return 0;
-}
-
-static int packed_reflog_expire(struct ref_store *ref_store,
-                               const char *refname,
-                               unsigned int flags,
-                               reflog_expiry_prepare_fn prepare_fn,
-                               reflog_expiry_should_prune_fn should_prune_fn,
-                               reflog_expiry_cleanup_fn cleanup_fn,
-                               void *policy_cb_data)
-{
-       BUG("packed reference store does not support reflogs");
-       return 0;
-}
-
 struct ref_storage_be refs_be_packed = {
-       NULL,
-       "packed",
-       packed_ref_store_create,
-       packed_init_db,
-       packed_transaction_prepare,
-       packed_transaction_finish,
-       packed_transaction_abort,
-       packed_initial_transaction_commit,
-
-       packed_pack_refs,
-       packed_create_symref,
-       packed_delete_refs,
-       packed_rename_ref,
-       packed_copy_ref,
-
-       packed_ref_iterator_begin,
-       packed_read_raw_ref,
-
-       packed_reflog_iterator_begin,
-       packed_for_each_reflog_ent,
-       packed_for_each_reflog_ent_reverse,
-       packed_reflog_exists,
-       packed_create_reflog,
-       packed_delete_reflog,
-       packed_reflog_expire
+       .next = NULL,
+       .name = "packed",
+       .init = packed_ref_store_create,
+       .init_db = packed_init_db,
+       .transaction_prepare = packed_transaction_prepare,
+       .transaction_finish = packed_transaction_finish,
+       .transaction_abort = packed_transaction_abort,
+       .initial_transaction_commit = packed_initial_transaction_commit,
+
+       .pack_refs = packed_pack_refs,
+       .create_symref = NULL,
+       .delete_refs = packed_delete_refs,
+       .rename_ref = NULL,
+       .copy_ref = NULL,
+
+       .iterator_begin = packed_ref_iterator_begin,
+       .read_raw_ref = packed_read_raw_ref,
+       .read_symbolic_ref = NULL,
+
+       .reflog_iterator_begin = packed_reflog_iterator_begin,
+       .for_each_reflog_ent = NULL,
+       .for_each_reflog_ent_reverse = NULL,
+       .reflog_exists = NULL,
+       .create_reflog = NULL,
+       .delete_reflog = NULL,
+       .reflog_expire = NULL,
 };
index be4aa5e09818fad082a7c15303746edd8a5ddcaf..3080ef944d998f87c7a42d1e2be33d5c97d8cfaf 100644 (file)
@@ -456,9 +456,9 @@ static int cache_ref_iterator_abort(struct ref_iterator *ref_iterator)
 }
 
 static struct ref_iterator_vtable cache_ref_iterator_vtable = {
-       cache_ref_iterator_advance,
-       cache_ref_iterator_peel,
-       cache_ref_iterator_abort
+       .advance = cache_ref_iterator_advance,
+       .peel = cache_ref_iterator_peel,
+       .abort = cache_ref_iterator_abort
 };
 
 struct ref_iterator *cache_ref_iterator_begin(struct ref_cache *cache,
index 7ff6fba4f0d3ef138525edf6fd5b9511e2cfe07d..69f93b0e2ac9fa9ec2778b783fa98792030c327e 100644 (file)
@@ -648,6 +648,21 @@ typedef int read_raw_ref_fn(struct ref_store *ref_store, const char *refname,
                            struct object_id *oid, struct strbuf *referent,
                            unsigned int *type, int *failure_errno);
 
+/*
+ * Read a symbolic reference from the specified reference store. This function
+ * is optional: if not implemented by a backend, then `read_raw_ref_fn` is used
+ * to read the symbolcic reference instead. It is intended to be implemented
+ * only in case the backend can optimize the reading of symbolic references.
+ *
+ * Return 0 on success, or -1 on failure. `referent` will be set to the target
+ * of the symbolic reference on success. This function explicitly does not
+ * distinguish between error cases and the reference not being a symbolic
+ * reference to allow backends to optimize this operation in case symbolic and
+ * non-symbolic references are treated differently.
+ */
+typedef int read_symbolic_ref_fn(struct ref_store *ref_store, const char *refname,
+                                struct strbuf *referent);
+
 struct ref_storage_be {
        struct ref_storage_be *next;
        const char *name;
@@ -667,6 +682,7 @@ struct ref_storage_be {
 
        ref_iterator_begin_fn *iterator_begin;
        read_raw_ref_fn *read_raw_ref;
+       read_symbolic_ref_fn *read_symbolic_ref;
 
        reflog_iterator_begin_fn *reflog_iterator_begin;
        for_each_reflog_ent_fn *for_each_reflog_ent;
index e3d852c0bfeca6bd5d166e5c8041d8176eae3a11..63e3112104a949e28e0cae1c8beaee0c27c099f1 100644 (file)
--- a/refspec.c
+++ b/refspec.c
@@ -4,13 +4,13 @@
 #include "refspec.h"
 
 static struct refspec_item s_tag_refspec = {
-       0,
-       1,
-       0,
-       0,
-       0,
-       "refs/tags/*",
-       "refs/tags/*"
+       .force = 0,
+       .pattern = 1,
+       .matching = 0,
+       .exact_sha1 = 0,
+       .negative = 0,
+       .src = "refs/tags/*",
+       .dst = "refs/tags/*",
 };
 
 /* See TAG_REFSPEC for the string version */
index 855e3f5c9472d04e1a9ce00da72c2316523f7ff1..34d4d073692f9e913d84715d987c8e1c35a7fe8a 100644 (file)
@@ -88,8 +88,9 @@ uint8_t block_writer_type(struct block_writer *bw)
        return bw->buf[bw->header_off];
 }
 
-/* adds the reftable_record to the block. Returns -1 if it does not fit, 0 on
-   success */
+/* Adds the reftable_record to the block. Returns -1 if it does not fit, 0 on
+   success. Returns REFTABLE_API_ERROR if attempting to write a record with
+   empty key. */
 int block_writer_add(struct block_writer *w, struct reftable_record *rec)
 {
        struct strbuf empty = STRBUF_INIT;
@@ -105,8 +106,14 @@ int block_writer_add(struct block_writer *w, struct reftable_record *rec)
        int is_restart = 0;
        struct strbuf key = STRBUF_INIT;
        int n = 0;
+       int err = -1;
 
        reftable_record_key(rec, &key);
+       if (!key.len) {
+               err = REFTABLE_API_ERROR;
+               goto done;
+       }
+
        n = reftable_encode_key(&is_restart, out, last, key,
                                reftable_record_val_type(rec));
        if (n < 0)
@@ -118,16 +125,11 @@ int block_writer_add(struct block_writer *w, struct reftable_record *rec)
                goto done;
        string_view_consume(&out, n);
 
-       if (block_writer_register_restart(w, start.len - out.len, is_restart,
-                                         &key) < 0)
-               goto done;
-
-       strbuf_release(&key);
-       return 0;
-
+       err = block_writer_register_restart(w, start.len - out.len, is_restart,
+                                           &key);
 done:
        strbuf_release(&key);
-       return -1;
+       return err;
 }
 
 int block_writer_finish(struct block_writer *w)
@@ -188,13 +190,16 @@ int block_reader_init(struct block_reader *br, struct reftable_block *block,
        uint32_t full_block_size = table_block_size;
        uint8_t typ = block->data[header_off];
        uint32_t sz = get_be24(block->data + header_off + 1);
-
+       int err = 0;
        uint16_t restart_count = 0;
        uint32_t restart_start = 0;
        uint8_t *restart_bytes = NULL;
+       uint8_t *uncompressed = NULL;
 
-       if (!reftable_is_block_type(typ))
-               return REFTABLE_FORMAT_ERROR;
+       if (!reftable_is_block_type(typ)) {
+               err =  REFTABLE_FORMAT_ERROR;
+               goto done;
+       }
 
        if (typ == BLOCK_TYPE_LOG) {
                int block_header_skip = 4 + header_off;
@@ -203,7 +208,7 @@ int block_reader_init(struct block_reader *br, struct reftable_block *block,
                uLongf src_len = block->len - block_header_skip;
                /* Log blocks specify the *uncompressed* size in their header.
                 */
-               uint8_t *uncompressed = reftable_malloc(sz);
+               uncompressed = reftable_malloc(sz);
 
                /* Copy over the block header verbatim. It's not compressed. */
                memcpy(uncompressed, block->data, block_header_skip);
@@ -212,16 +217,19 @@ int block_reader_init(struct block_reader *br, struct reftable_block *block,
                if (Z_OK !=
                    uncompress2(uncompressed + block_header_skip, &dst_len,
                                block->data + block_header_skip, &src_len)) {
-                       reftable_free(uncompressed);
-                       return REFTABLE_ZLIB_ERROR;
+                       err = REFTABLE_ZLIB_ERROR;
+                       goto done;
                }
 
-               if (dst_len + block_header_skip != sz)
-                       return REFTABLE_FORMAT_ERROR;
+               if (dst_len + block_header_skip != sz) {
+                       err = REFTABLE_FORMAT_ERROR;
+                       goto done;
+               }
 
                /* We're done with the input data. */
                reftable_block_done(block);
                block->data = uncompressed;
+               uncompressed = NULL;
                block->len = sz;
                block->source = malloc_block_source();
                full_block_size = src_len + block_header_skip;
@@ -251,7 +259,9 @@ int block_reader_init(struct block_reader *br, struct reftable_block *block,
        br->restart_count = restart_count;
        br->restart_bytes = restart_bytes;
 
-       return 0;
+done:
+       reftable_free(uncompressed);
+       return err;
 }
 
 static uint32_t block_reader_restart_offset(struct block_reader *br, int i)
@@ -324,6 +334,9 @@ int block_iter_next(struct block_iter *it, struct reftable_record *rec)
        if (n < 0)
                return -1;
 
+       if (!key.len)
+               return REFTABLE_FORMAT_ERROR;
+
        string_view_consume(&in, n);
        n = reftable_record_decode(rec, key, extra, in, it->br->hash_size);
        if (n < 0)
@@ -350,6 +363,8 @@ int block_reader_first_key(struct block_reader *br, struct strbuf *key)
        int n = reftable_decode_key(key, &extra, empty, in);
        if (n < 0)
                return n;
+       if (!key->len)
+               return REFTABLE_FORMAT_ERROR;
 
        return 0;
 }
@@ -413,7 +428,7 @@ int block_reader_seek(struct block_reader *br, struct block_iter *it,
 done:
        strbuf_release(&key);
        strbuf_release(&next.last_key);
-       reftable_record_destroy(&rec);
+       reftable_record_release(&rec);
 
        return err;
 }
index 4b3ea262dcbf2d2513a894ba9ec388c0d050bdd0..cb88af4a5639258945f569ede758e31809b62ead 100644 (file)
@@ -26,8 +26,9 @@ static void test_block_read_write(void)
        struct block_writer bw = {
                .last_key = STRBUF_INIT,
        };
-       struct reftable_ref_record ref = { NULL };
-       struct reftable_record rec = { NULL };
+       struct reftable_record rec = {
+               .type = BLOCK_TYPE_REF,
+       };
        int i = 0;
        int n;
        struct block_reader br = { 0 };
@@ -40,7 +41,11 @@ static void test_block_read_write(void)
        block.source = malloc_block_source();
        block_writer_init(&bw, BLOCK_TYPE_REF, block.data, block_size,
                          header_off, hash_size(GIT_SHA1_FORMAT_ID));
-       reftable_record_from_ref(&rec, &ref);
+
+       rec.u.ref.refname = "";
+       rec.u.ref.value_type = REFTABLE_REF_DELETION;
+       n = block_writer_add(&bw, &rec);
+       EXPECT(n == REFTABLE_API_ERROR);
 
        for (i = 0; i < N; i++) {
                char name[100];
@@ -48,14 +53,14 @@ static void test_block_read_write(void)
                snprintf(name, sizeof(name), "branch%02d", i);
                memset(hash, i, sizeof(hash));
 
-               ref.refname = name;
-               ref.value_type = REFTABLE_REF_VAL1;
-               ref.value.val1 = hash;
+               rec.u.ref.refname = name;
+               rec.u.ref.value_type = REFTABLE_REF_VAL1;
+               rec.u.ref.value.val1 = hash;
 
                names[i] = xstrdup(name);
                n = block_writer_add(&bw, &rec);
-               ref.refname = NULL;
-               ref.value_type = REFTABLE_REF_DELETION;
+               rec.u.ref.refname = NULL;
+               rec.u.ref.value_type = REFTABLE_REF_DELETION;
                EXPECT(n == 0);
        }
 
@@ -74,7 +79,7 @@ static void test_block_read_write(void)
                if (r > 0) {
                        break;
                }
-               EXPECT_STREQ(names[j], ref.refname);
+               EXPECT_STREQ(names[j], rec.u.ref.refname);
                j++;
        }
 
@@ -92,7 +97,7 @@ static void test_block_read_write(void)
                n = block_iter_next(&it, &rec);
                EXPECT(n == 0);
 
-               EXPECT_STREQ(names[i], ref.refname);
+               EXPECT_STREQ(names[i], rec.u.ref.refname);
 
                want.len--;
                n = block_reader_seek(&br, &it, &want);
@@ -100,7 +105,7 @@ static void test_block_read_write(void)
 
                n = block_iter_next(&it, &rec);
                EXPECT(n == 0);
-               EXPECT_STREQ(names[10 * (i / 10)], ref.refname);
+               EXPECT_STREQ(names[10 * (i / 10)], rec.u.ref.refname);
 
                block_iter_close(&it);
        }
index 0044eecd9aa39afa476dcfb8e6eeaaa89fb08b86..2605371c28d86f638dcd5079466e038e3eb7a38a 100644 (file)
@@ -134,8 +134,10 @@ int reftable_block_source_from_file(struct reftable_block_source *bs,
        }
 
        err = fstat(fd, &st);
-       if (err < 0)
-               return -1;
+       if (err < 0) {
+               close(fd);
+               return REFTABLE_IO_ERROR;
+       }
 
        p = reftable_calloc(sizeof(struct file_block_source));
        p->size = st.st_size;
index 7a8a738d860982c57398dad589d11bd233b9266c..57f8032db941ca77f5c61d0e6d38268c56958be9 100644 (file)
@@ -7,6 +7,7 @@ https://developers.google.com/open-source/licenses/bsd
 */
 
 #include "basics.h"
+#include "constants.h"
 #include "record.h"
 #include "generic.h"
 #include "reftable-iterator.h"
@@ -15,23 +16,21 @@ https://developers.google.com/open-source/licenses/bsd
 int reftable_table_seek_ref(struct reftable_table *tab,
                            struct reftable_iterator *it, const char *name)
 {
-       struct reftable_ref_record ref = {
-               .refname = (char *)name,
-       };
-       struct reftable_record rec = { NULL };
-       reftable_record_from_ref(&rec, &ref);
+       struct reftable_record rec = { .type = BLOCK_TYPE_REF,
+                                      .u.ref = {
+                                              .refname = (char *)name,
+                                      } };
        return tab->ops->seek_record(tab->table_arg, it, &rec);
 }
 
 int reftable_table_seek_log(struct reftable_table *tab,
                            struct reftable_iterator *it, const char *name)
 {
-       struct reftable_log_record log = {
-               .refname = (char *)name,
-               .update_index = ~((uint64_t)0),
-       };
-       struct reftable_record rec = { NULL };
-       reftable_record_from_log(&rec, &log);
+       struct reftable_record rec = { .type = BLOCK_TYPE_LOG,
+                                      .u.log = {
+                                              .refname = (char *)name,
+                                              .update_index = ~((uint64_t)0),
+                                      } };
        return tab->ops->seek_record(tab->table_arg, it, &rec);
 }
 
@@ -129,17 +128,29 @@ void reftable_iterator_destroy(struct reftable_iterator *it)
 int reftable_iterator_next_ref(struct reftable_iterator *it,
                               struct reftable_ref_record *ref)
 {
-       struct reftable_record rec = { NULL };
-       reftable_record_from_ref(&rec, ref);
-       return iterator_next(it, &rec);
+       struct reftable_record rec = {
+               .type = BLOCK_TYPE_REF,
+               .u = {
+                       .ref = *ref
+               },
+       };
+       int err = iterator_next(it, &rec);
+       *ref = rec.u.ref;
+       return err;
 }
 
 int reftable_iterator_next_log(struct reftable_iterator *it,
                               struct reftable_log_record *log)
 {
-       struct reftable_record rec = { NULL };
-       reftable_record_from_log(&rec, log);
-       return iterator_next(it, &rec);
+       struct reftable_record rec = {
+               .type = BLOCK_TYPE_LOG,
+               .u = {
+                       .log = *log,
+               },
+       };
+       int err = iterator_next(it, &rec);
+       *log = rec.u.log;
+       return err;
 }
 
 int iterator_next(struct reftable_iterator *it, struct reftable_record *rec)
index 93d04f735b852c8d1444623c24048017a956847a..a8d174c040658edda3d2c45a9df2f692aef41c9d 100644 (file)
@@ -32,7 +32,7 @@ static int filtering_ref_iterator_next(void *iter_arg,
                                       struct reftable_record *rec)
 {
        struct filtering_ref_iterator *fri = iter_arg;
-       struct reftable_ref_record *ref = rec->data;
+       struct reftable_ref_record *ref = &rec->u.ref;
        int err = 0;
        while (1) {
                err = reftable_iterator_next_ref(&fri->it, ref);
@@ -127,7 +127,7 @@ static int indexed_table_ref_iter_next_block(struct indexed_table_ref_iter *it)
 static int indexed_table_ref_iter_next(void *p, struct reftable_record *rec)
 {
        struct indexed_table_ref_iter *it = p;
-       struct reftable_ref_record *ref = rec->data;
+       struct reftable_ref_record *ref = &rec->u.ref;
 
        while (1) {
                int err = block_iter_next(&it->cur, rec);
index e5b53da6db3f060e67f7e712b6098b5f42d3e5a5..2a6efa110d5dfaf0f4971a69f7b9e81a9fe04d68 100644 (file)
@@ -30,7 +30,7 @@ static int merged_iter_init(struct merged_iter *mi)
 
                if (err > 0) {
                        reftable_iterator_destroy(&mi->stack[i]);
-                       reftable_record_destroy(&rec);
+                       reftable_record_release(&rec);
                } else {
                        struct pq_entry e = {
                                .rec = rec,
@@ -57,18 +57,17 @@ static void merged_iter_close(void *p)
 static int merged_iter_advance_nonnull_subiter(struct merged_iter *mi,
                                               size_t idx)
 {
-       struct reftable_record rec = reftable_new_record(mi->typ);
        struct pq_entry e = {
-               .rec = rec,
+               .rec = reftable_new_record(mi->typ),
                .index = idx,
        };
-       int err = iterator_next(&mi->stack[idx], &rec);
+       int err = iterator_next(&mi->stack[idx], &e.rec);
        if (err < 0)
                return err;
 
        if (err > 0) {
                reftable_iterator_destroy(&mi->stack[idx]);
-               reftable_record_destroy(&rec);
+               reftable_record_release(&e.rec);
                return 0;
        }
 
@@ -126,11 +125,11 @@ static int merged_iter_next_entry(struct merged_iter *mi,
                if (err < 0) {
                        return err;
                }
-               reftable_record_destroy(&top.rec);
+               reftable_record_release(&top.rec);
        }
 
        reftable_record_copy_from(rec, &entry.rec, hash_size(mi->hash_id));
-       reftable_record_destroy(&entry.rec);
+       reftable_record_release(&entry.rec);
        strbuf_release(&entry_key);
        return 0;
 }
@@ -290,11 +289,12 @@ int reftable_merged_table_seek_ref(struct reftable_merged_table *mt,
                                   struct reftable_iterator *it,
                                   const char *name)
 {
-       struct reftable_ref_record ref = {
-               .refname = (char *)name,
+       struct reftable_record rec = {
+               .type = BLOCK_TYPE_REF,
+               .u.ref = {
+                       .refname = (char *)name,
+               },
        };
-       struct reftable_record rec = { NULL };
-       reftable_record_from_ref(&rec, &ref);
        return merged_table_seek_record(mt, it, &rec);
 }
 
@@ -302,12 +302,11 @@ int reftable_merged_table_seek_log_at(struct reftable_merged_table *mt,
                                      struct reftable_iterator *it,
                                      const char *name, uint64_t update_index)
 {
-       struct reftable_log_record log = {
-               .refname = (char *)name,
-               .update_index = update_index,
-       };
-       struct reftable_record rec = { NULL };
-       reftable_record_from_log(&rec, &log);
+       struct reftable_record rec = { .type = BLOCK_TYPE_LOG,
+                                      .u.log = {
+                                              .refname = (char *)name,
+                                              .update_index = update_index,
+                                      } };
        return merged_table_seek_record(mt, it, &rec);
 }
 
index efc474017a22d7e65e0aaa9fc78ded3ffc5075de..96ca6dd37b3ac0b881781403806d30e52edff46a 100644 (file)
@@ -74,6 +74,7 @@ struct pq_entry merged_iter_pqueue_remove(struct merged_iter_pqueue *pq)
 void merged_iter_pqueue_add(struct merged_iter_pqueue *pq, struct pq_entry e)
 {
        int i = 0;
+
        if (pq->len == pq->cap) {
                pq->cap = 2 * pq->cap + 1;
                pq->heap = reftable_realloc(pq->heap,
@@ -98,7 +99,7 @@ void merged_iter_pqueue_release(struct merged_iter_pqueue *pq)
 {
        int i = 0;
        for (i = 0; i < pq->len; i++) {
-               reftable_record_destroy(&pq->heap[i].rec);
+               reftable_record_release(&pq->heap[i].rec);
        }
        FREE_AND_NULL(pq->heap);
        pq->len = pq->cap = 0;
index c9bb05e37b717eab1527f5a1ac6b39fbec687207..7de5e886f35236eff6b7e033813ea2f7b403b9c8 100644 (file)
@@ -31,7 +31,7 @@ static void test_pq(void)
        int N = ARRAY_SIZE(names) - 1;
 
        struct merged_iter_pqueue pq = { NULL };
-       const char *last = NULL;
+       char *last = NULL;
 
        int i = 0;
        for (i = 0; i < N; i++) {
@@ -42,12 +42,10 @@ static void test_pq(void)
 
        i = 1;
        do {
-               struct reftable_record rec =
-                       reftable_new_record(BLOCK_TYPE_REF);
-               struct pq_entry e = { 0 };
-
-               reftable_record_as_ref(&rec)->refname = names[i];
-               e.rec = rec;
+               struct pq_entry e = { .rec = { .type = BLOCK_TYPE_REF,
+                                              .u.ref = {
+                                                      .refname = names[i],
+                                              } } };
                merged_iter_pqueue_add(&pq, e);
                merged_iter_pqueue_check(pq);
                i = (i * 7) % N;
@@ -55,19 +53,18 @@ static void test_pq(void)
 
        while (!merged_iter_pqueue_is_empty(pq)) {
                struct pq_entry e = merged_iter_pqueue_remove(&pq);
-               struct reftable_ref_record *ref =
-                       reftable_record_as_ref(&e.rec);
-
+               struct reftable_record *rec = &e.rec;
                merged_iter_pqueue_check(pq);
 
+               EXPECT(reftable_record_type(rec) == BLOCK_TYPE_REF);
                if (last) {
-                       EXPECT(strcmp(last, ref->refname) < 0);
+                       EXPECT(strcmp(last, rec->u.ref.refname) < 0);
                }
-               last = ref->refname;
-               ref->refname = NULL;
-               reftable_free(ref);
+               // this is names[i], so don't dealloc.
+               last = rec->u.ref.refname;
+               rec->u.ref.refname = NULL;
+               reftable_record_release(rec);
        }
-
        for (i = 0; i < N; i++) {
                reftable_free(names[i]);
        }
index 006709a645aea2ddbc914673710e66fa2343d569..54b4025105cfd6dc53821d366a1dd20bc8d11004 100644 (file)
@@ -155,6 +155,11 @@ static int parse_footer(struct reftable_reader *r, uint8_t *footer,
        r->log_offsets.is_present = (first_block_typ == BLOCK_TYPE_LOG ||
                                     r->log_offsets.offset > 0);
        r->obj_offsets.is_present = r->obj_offsets.offset > 0;
+       if (r->obj_offsets.is_present && !r->object_id_len) {
+               err = REFTABLE_FORMAT_ERROR;
+               goto done;
+       }
+
        err = 0;
 done:
        return err;
@@ -239,8 +244,7 @@ static int table_iter_next_in_block(struct table_iter *ti,
 {
        int res = block_iter_next(&ti->bi, rec);
        if (res == 0 && reftable_record_type(rec) == BLOCK_TYPE_REF) {
-               ((struct reftable_ref_record *)rec->data)->update_index +=
-                       ti->r->min_update_index;
+               rec->u.ref.update_index += ti->r->min_update_index;
        }
 
        return res;
@@ -290,28 +294,33 @@ int reader_init_block_reader(struct reftable_reader *r, struct block_reader *br,
 
        err = reader_get_block(r, &block, next_off, guess_block_size);
        if (err < 0)
-               return err;
+               goto done;
 
        block_size = extract_block_size(block.data, &block_typ, next_off,
                                        r->version);
-       if (block_size < 0)
-               return block_size;
-
+       if (block_size < 0) {
+               err = block_size;
+               goto done;
+       }
        if (want_typ != BLOCK_TYPE_ANY && block_typ != want_typ) {
-               reftable_block_done(&block);
-               return 1;
+               err = 1;
+               goto done;
        }
 
        if (block_size > guess_block_size) {
                reftable_block_done(&block);
                err = reader_get_block(r, &block, next_off, block_size);
                if (err < 0) {
-                       return err;
+                       goto done;
                }
        }
 
-       return block_reader_init(br, &block, header_off, r->block_size,
-                                hash_size(r->hash_id));
+       err = block_reader_init(br, &block, header_off, r->block_size,
+                               hash_size(r->hash_id));
+done:
+       reftable_block_done(&block);
+
+       return err;
 }
 
 static int table_iter_next_block(struct table_iter *dest,
@@ -475,7 +484,7 @@ static int reader_seek_linear(struct reftable_reader *r, struct table_iter *ti,
 
 done:
        block_iter_close(&next.bi);
-       reftable_record_destroy(&rec);
+       reftable_record_release(&rec);
        strbuf_release(&want_key);
        strbuf_release(&got_key);
        return err;
@@ -485,34 +494,35 @@ static int reader_seek_indexed(struct reftable_reader *r,
                               struct reftable_iterator *it,
                               struct reftable_record *rec)
 {
-       struct reftable_index_record want_index = { .last_key = STRBUF_INIT };
-       struct reftable_record want_index_rec = { NULL };
-       struct reftable_index_record index_result = { .last_key = STRBUF_INIT };
-       struct reftable_record index_result_rec = { NULL };
+       struct reftable_record want_index = {
+               .type = BLOCK_TYPE_INDEX, .u.idx = { .last_key = STRBUF_INIT }
+       };
+       struct reftable_record index_result = {
+               .type = BLOCK_TYPE_INDEX,
+               .u.idx = { .last_key = STRBUF_INIT },
+       };
        struct table_iter index_iter = TABLE_ITER_INIT;
        struct table_iter next = TABLE_ITER_INIT;
        int err = 0;
 
-       reftable_record_key(rec, &want_index.last_key);
-       reftable_record_from_index(&want_index_rec, &want_index);
-       reftable_record_from_index(&index_result_rec, &index_result);
-
+       reftable_record_key(rec, &want_index.u.idx.last_key);
        err = reader_start(r, &index_iter, reftable_record_type(rec), 1);
        if (err < 0)
                goto done;
 
-       err = reader_seek_linear(r, &index_iter, &want_index_rec);
+       err = reader_seek_linear(r, &index_iter, &want_index);
        while (1) {
-               err = table_iter_next(&index_iter, &index_result_rec);
+               err = table_iter_next(&index_iter, &index_result);
                table_iter_block_done(&index_iter);
                if (err != 0)
                        goto done;
 
-               err = reader_table_iter_at(r, &next, index_result.offset, 0);
+               err = reader_table_iter_at(r, &next, index_result.u.idx.offset,
+                                          0);
                if (err != 0)
                        goto done;
 
-               err = block_iter_seek(&next.bi, &want_index.last_key);
+               err = block_iter_seek(&next.bi, &want_index.u.idx.last_key);
                if (err < 0)
                        goto done;
 
@@ -540,8 +550,8 @@ static int reader_seek_indexed(struct reftable_reader *r,
 done:
        block_iter_close(&next.bi);
        table_iter_close(&index_iter);
-       reftable_record_release(&want_index_rec);
-       reftable_record_release(&index_result_rec);
+       reftable_record_release(&want_index);
+       reftable_record_release(&index_result);
        return err;
 }
 
@@ -590,11 +600,12 @@ static int reader_seek(struct reftable_reader *r, struct reftable_iterator *it,
 int reftable_reader_seek_ref(struct reftable_reader *r,
                             struct reftable_iterator *it, const char *name)
 {
-       struct reftable_ref_record ref = {
-               .refname = (char *)name,
+       struct reftable_record rec = {
+               .type = BLOCK_TYPE_REF,
+               .u.ref = {
+                       .refname = (char *)name,
+               },
        };
-       struct reftable_record rec = { NULL };
-       reftable_record_from_ref(&rec, &ref);
        return reader_seek(r, it, &rec);
 }
 
@@ -602,12 +613,11 @@ int reftable_reader_seek_log_at(struct reftable_reader *r,
                                struct reftable_iterator *it, const char *name,
                                uint64_t update_index)
 {
-       struct reftable_log_record log = {
-               .refname = (char *)name,
-               .update_index = update_index,
-       };
-       struct reftable_record rec = { NULL };
-       reftable_record_from_log(&rec, &log);
+       struct reftable_record rec = { .type = BLOCK_TYPE_LOG,
+                                      .u.log = {
+                                              .refname = (char *)name,
+                                              .update_index = update_index,
+                                      } };
        return reader_seek(r, it, &rec);
 }
 
@@ -641,6 +651,8 @@ int reftable_new_reader(struct reftable_reader **p,
 
 void reftable_reader_free(struct reftable_reader *r)
 {
+       if (!r)
+               return;
        reader_close(r);
        reftable_free(r);
 }
@@ -649,31 +661,33 @@ static int reftable_reader_refs_for_indexed(struct reftable_reader *r,
                                            struct reftable_iterator *it,
                                            uint8_t *oid)
 {
-       struct reftable_obj_record want = {
-               .hash_prefix = oid,
-               .hash_prefix_len = r->object_id_len,
+       struct reftable_record want = {
+               .type = BLOCK_TYPE_OBJ,
+               .u.obj = {
+                       .hash_prefix = oid,
+                       .hash_prefix_len = r->object_id_len,
+               },
        };
-       struct reftable_record want_rec = { NULL };
        struct reftable_iterator oit = { NULL };
-       struct reftable_obj_record got = { NULL };
-       struct reftable_record got_rec = { NULL };
+       struct reftable_record got = {
+               .type = BLOCK_TYPE_OBJ,
+               .u.obj = { 0 },
+       };
        int err = 0;
        struct indexed_table_ref_iter *itr = NULL;
 
        /* Look through the reverse index. */
-       reftable_record_from_obj(&want_rec, &want);
-       err = reader_seek(r, &oit, &want_rec);
+       err = reader_seek(r, &oit, &want);
        if (err != 0)
                goto done;
 
        /* read out the reftable_obj_record */
-       reftable_record_from_obj(&got_rec, &got);
-       err = iterator_next(&oit, &got_rec);
+       err = iterator_next(&oit, &got);
        if (err < 0)
                goto done;
 
-       if (err > 0 ||
-           memcmp(want.hash_prefix, got.hash_prefix, r->object_id_len)) {
+       if (err > 0 || memcmp(want.u.obj.hash_prefix, got.u.obj.hash_prefix,
+                             r->object_id_len)) {
                /* didn't find it; return empty iterator */
                iterator_set_empty(it);
                err = 0;
@@ -681,15 +695,16 @@ static int reftable_reader_refs_for_indexed(struct reftable_reader *r,
        }
 
        err = new_indexed_table_ref_iter(&itr, r, oid, hash_size(r->hash_id),
-                                        got.offsets, got.offset_len);
+                                        got.u.obj.offsets,
+                                        got.u.obj.offset_len);
        if (err < 0)
                goto done;
-       got.offsets = NULL;
+       got.u.obj.offsets = NULL;
        iterator_from_indexed_table_ref_iter(it, itr);
 
 done:
        reftable_iterator_destroy(&oit);
-       reftable_record_release(&got_rec);
+       reftable_record_release(&got);
        return err;
 }
 
index 70c7aedba2ccb0ad73731abc2742ec2947200499..469ab79a5adf3dfaba0160e523bdcece5b9875e0 100644 (file)
@@ -100,7 +100,7 @@ static void write_table(char ***names, struct strbuf *buf, int N,
        n = reftable_writer_close(w);
        EXPECT(n == 0);
 
-       stats = writer_stats(w);
+       stats = reftable_writer_stats(w);
        for (i = 0; i < stats->ref_stats.blocks; i++) {
                int off = i * opts.block_size;
                if (off == 0) {
@@ -239,7 +239,7 @@ static void test_log_write_read(void)
        n = reftable_writer_close(w);
        EXPECT(n == 0);
 
-       stats = writer_stats(w);
+       stats = reftable_writer_stats(w);
        EXPECT(stats->log_stats.blocks > 0);
        reftable_writer_free(w);
        w = NULL;
@@ -288,6 +288,71 @@ static void test_log_write_read(void)
        reader_close(&rd);
 }
 
+static void test_log_zlib_corruption(void)
+{
+       struct reftable_write_options opts = {
+               .block_size = 256,
+       };
+       struct reftable_iterator it = { 0 };
+       struct reftable_reader rd = { 0 };
+       struct reftable_block_source source = { 0 };
+       struct strbuf buf = STRBUF_INIT;
+       struct reftable_writer *w =
+               reftable_new_writer(&strbuf_add_void, &buf, &opts);
+       const struct reftable_stats *stats = NULL;
+       uint8_t hash1[GIT_SHA1_RAWSZ] = { 1 };
+       uint8_t hash2[GIT_SHA1_RAWSZ] = { 2 };
+       char message[100] = { 0 };
+       int err, i, n;
+
+       struct reftable_log_record log = {
+               .refname = "refname",
+               .value_type = REFTABLE_LOG_UPDATE,
+               .value = {
+                       .update = {
+                               .new_hash = hash1,
+                               .old_hash = hash2,
+                               .name = "My Name",
+                               .email = "myname@invalid",
+                               .message = message,
+                       },
+               },
+       };
+
+       for (i = 0; i < sizeof(message) - 1; i++)
+               message[i] = (uint8_t)(rand() % 64 + ' ');
+
+       reftable_writer_set_limits(w, 1, 1);
+
+       err = reftable_writer_add_log(w, &log);
+       EXPECT_ERR(err);
+
+       n = reftable_writer_close(w);
+       EXPECT(n == 0);
+
+       stats = reftable_writer_stats(w);
+       EXPECT(stats->log_stats.blocks > 0);
+       reftable_writer_free(w);
+       w = NULL;
+
+       /* corrupt the data. */
+       buf.buf[50] ^= 0x99;
+
+       block_source_from_strbuf(&source, &buf);
+
+       err = init_reader(&rd, &source, "file.log");
+       EXPECT_ERR(err);
+
+       err = reftable_reader_seek_log(&rd, &it, "refname");
+       EXPECT(err == REFTABLE_ZLIB_ERROR);
+
+       reftable_iterator_destroy(&it);
+
+       /* cleanup. */
+       strbuf_release(&buf);
+       reader_close(&rd);
+}
+
 static void test_table_read_write_sequential(void)
 {
        char **names;
@@ -602,6 +667,102 @@ static void test_write_empty_table(void)
        strbuf_release(&buf);
 }
 
+static void test_write_object_id_min_length(void)
+{
+       struct reftable_write_options opts = {
+               .block_size = 75,
+       };
+       struct strbuf buf = STRBUF_INIT;
+       struct reftable_writer *w =
+               reftable_new_writer(&strbuf_add_void, &buf, &opts);
+       uint8_t hash[GIT_SHA1_RAWSZ] = {42};
+       struct reftable_ref_record ref = {
+               .update_index = 1,
+               .value_type = REFTABLE_REF_VAL1,
+               .value.val1 = hash,
+       };
+       int err;
+       int i;
+
+       reftable_writer_set_limits(w, 1, 1);
+
+       /* Write the same hash in many refs. If there is only 1 hash, the
+        * disambiguating prefix is length 0 */
+       for (i = 0; i < 256; i++) {
+               char name[256];
+               snprintf(name, sizeof(name), "ref%05d", i);
+               ref.refname = name;
+               err = reftable_writer_add_ref(w, &ref);
+               EXPECT_ERR(err);
+       }
+
+       err = reftable_writer_close(w);
+       EXPECT_ERR(err);
+       EXPECT(reftable_writer_stats(w)->object_id_len == 2);
+       reftable_writer_free(w);
+       strbuf_release(&buf);
+}
+
+static void test_write_object_id_length(void)
+{
+       struct reftable_write_options opts = {
+               .block_size = 75,
+       };
+       struct strbuf buf = STRBUF_INIT;
+       struct reftable_writer *w =
+               reftable_new_writer(&strbuf_add_void, &buf, &opts);
+       uint8_t hash[GIT_SHA1_RAWSZ] = {42};
+       struct reftable_ref_record ref = {
+               .update_index = 1,
+               .value_type = REFTABLE_REF_VAL1,
+               .value.val1 = hash,
+       };
+       int err;
+       int i;
+
+       reftable_writer_set_limits(w, 1, 1);
+
+       /* Write the same hash in many refs. If there is only 1 hash, the
+        * disambiguating prefix is length 0 */
+       for (i = 0; i < 256; i++) {
+               char name[256];
+               snprintf(name, sizeof(name), "ref%05d", i);
+               ref.refname = name;
+               ref.value.val1[15] = i;
+               err = reftable_writer_add_ref(w, &ref);
+               EXPECT_ERR(err);
+       }
+
+       err = reftable_writer_close(w);
+       EXPECT_ERR(err);
+       EXPECT(reftable_writer_stats(w)->object_id_len == 16);
+       reftable_writer_free(w);
+       strbuf_release(&buf);
+}
+
+static void test_write_empty_key(void)
+{
+       struct reftable_write_options opts = { 0 };
+       struct strbuf buf = STRBUF_INIT;
+       struct reftable_writer *w =
+               reftable_new_writer(&strbuf_add_void, &buf, &opts);
+       struct reftable_ref_record ref = {
+               .refname = "",
+               .update_index = 1,
+               .value_type = REFTABLE_REF_DELETION,
+       };
+       int err;
+
+       reftable_writer_set_limits(w, 1, 1);
+       err = reftable_writer_add_ref(w, &ref);
+       EXPECT(err == REFTABLE_API_ERROR);
+
+       err = reftable_writer_close(w);
+       EXPECT(err == REFTABLE_EMPTY_TABLE_ERROR);
+       reftable_writer_free(w);
+       strbuf_release(&buf);
+}
+
 static void test_write_key_order(void)
 {
        struct reftable_write_options opts = { 0 };
@@ -631,7 +792,6 @@ static void test_write_key_order(void)
        err = reftable_writer_add_ref(w, &refs[0]);
        EXPECT_ERR(err);
        err = reftable_writer_add_ref(w, &refs[1]);
-       printf("%d\n", err);
        EXPECT(err == REFTABLE_API_ERROR);
        reftable_writer_close(w);
        reftable_writer_free(w);
@@ -667,6 +827,7 @@ static void test_corrupt_table(void)
 
 int readwrite_test_main(int argc, const char *argv[])
 {
+       RUN_TEST(test_log_zlib_corruption);
        RUN_TEST(test_corrupt_table);
        RUN_TEST(test_corrupt_table_empty);
        RUN_TEST(test_log_write_read);
@@ -681,7 +842,10 @@ int readwrite_test_main(int argc, const char *argv[])
        RUN_TEST(test_table_read_write_seek_index);
        RUN_TEST(test_table_refs_for_no_index);
        RUN_TEST(test_table_refs_for_obj_index);
+       RUN_TEST(test_write_empty_key);
        RUN_TEST(test_write_empty_table);
        RUN_TEST(test_log_overflow);
+       RUN_TEST(test_write_object_id_length);
+       RUN_TEST(test_write_object_id_min_length);
        return 0;
 }
index 6a5dac32dc69b7187d8c4e9481e6ddbe058ccae2..fbaa1fbef56c52fed8391c7bcef2efd035eb588b 100644 (file)
@@ -15,6 +15,10 @@ https://developers.google.com/open-source/licenses/bsd
 #include "reftable-error.h"
 #include "basics.h"
 
+static struct reftable_record_vtable *
+reftable_record_vtable(struct reftable_record *rec);
+static void *reftable_record_data(struct reftable_record *rec);
+
 int get_var_int(uint64_t *dest, struct string_view *in)
 {
        int ptr = 0;
@@ -72,7 +76,7 @@ int reftable_is_block_type(uint8_t typ)
        return 0;
 }
 
-uint8_t *reftable_ref_record_val1(struct reftable_ref_record *rec)
+uint8_t *reftable_ref_record_val1(const struct reftable_ref_record *rec)
 {
        switch (rec->value_type) {
        case REFTABLE_REF_VAL1:
@@ -84,7 +88,7 @@ uint8_t *reftable_ref_record_val1(struct reftable_ref_record *rec)
        }
 }
 
-uint8_t *reftable_ref_record_val2(struct reftable_ref_record *rec)
+uint8_t *reftable_ref_record_val2(const struct reftable_ref_record *rec)
 {
        switch (rec->value_type) {
        case REFTABLE_REF_VAL2:
@@ -251,24 +255,24 @@ static void hex_format(char *dest, uint8_t *src, int hash_size)
        }
 }
 
-void reftable_ref_record_print(struct reftable_ref_record *ref,
-                              uint32_t hash_id)
+static void reftable_ref_record_print_sz(const struct reftable_ref_record *ref,
+                                        int hash_size)
 {
-       char hex[2 * GIT_SHA256_RAWSZ + 1] = { 0 }; /* BUG */
+       char hex[GIT_MAX_HEXSZ + 1] = { 0 }; /* BUG */
        printf("ref{%s(%" PRIu64 ") ", ref->refname, ref->update_index);
        switch (ref->value_type) {
        case REFTABLE_REF_SYMREF:
                printf("=> %s", ref->value.symref);
                break;
        case REFTABLE_REF_VAL2:
-               hex_format(hex, ref->value.val2.value, hash_size(hash_id));
+               hex_format(hex, ref->value.val2.value, hash_size);
                printf("val 2 %s", hex);
                hex_format(hex, ref->value.val2.target_value,
-                          hash_size(hash_id));
+                          hash_size);
                printf("(T %s)", hex);
                break;
        case REFTABLE_REF_VAL1:
-               hex_format(hex, ref->value.val1, hash_size(hash_id));
+               hex_format(hex, ref->value.val1, hash_size);
                printf("val 1 %s", hex);
                break;
        case REFTABLE_REF_DELETION:
@@ -278,6 +282,11 @@ void reftable_ref_record_print(struct reftable_ref_record *ref,
        printf("}\n");
 }
 
+void reftable_ref_record_print(const struct reftable_ref_record *ref,
+                              uint32_t hash_id) {
+       reftable_ref_record_print_sz(ref, hash_size(hash_id));
+}
+
 static void reftable_ref_record_release_void(void *rec)
 {
        reftable_ref_record_release(rec);
@@ -430,6 +439,21 @@ static int reftable_ref_record_is_deletion_void(const void *p)
                (const struct reftable_ref_record *)p);
 }
 
+
+static int reftable_ref_record_equal_void(const void *a,
+                                         const void *b, int hash_size)
+{
+       struct reftable_ref_record *ra = (struct reftable_ref_record *) a;
+       struct reftable_ref_record *rb = (struct reftable_ref_record *) b;
+       return reftable_ref_record_equal(ra, rb, hash_size);
+}
+
+static void reftable_ref_record_print_void(const void *rec,
+                                          int hash_size)
+{
+       reftable_ref_record_print_sz((struct reftable_ref_record *) rec, hash_size);
+}
+
 static struct reftable_record_vtable reftable_ref_record_vtable = {
        .key = &reftable_ref_record_key,
        .type = BLOCK_TYPE_REF,
@@ -439,6 +463,8 @@ static struct reftable_record_vtable reftable_ref_record_vtable = {
        .decode = &reftable_ref_record_decode,
        .release = &reftable_ref_record_release_void,
        .is_deletion = &reftable_ref_record_is_deletion_void,
+       .equal = &reftable_ref_record_equal_void,
+       .print = &reftable_ref_record_print_void,
 };
 
 static void reftable_obj_record_key(const void *r, struct strbuf *dest)
@@ -457,6 +483,21 @@ static void reftable_obj_record_release(void *rec)
        memset(obj, 0, sizeof(struct reftable_obj_record));
 }
 
+static void reftable_obj_record_print(const void *rec, int hash_size)
+{
+       const struct reftable_obj_record *obj = rec;
+       char hex[GIT_MAX_HEXSZ + 1] = { 0 };
+       struct strbuf offset_str = STRBUF_INIT;
+       int i;
+
+       for (i = 0; i < obj->offset_len; i++)
+               strbuf_addf(&offset_str, "%" PRIu64 " ", obj->offsets[i]);
+       hex_format(hex, obj->hash_prefix, obj->hash_prefix_len);
+       printf("prefix %s (len %d), offsets [%s]\n",
+              hex, obj->hash_prefix_len, offset_str.buf);
+       strbuf_release(&offset_str);
+}
+
 static void reftable_obj_record_copy_from(void *rec, const void *src_rec,
                                          int hash_size)
 {
@@ -465,12 +506,14 @@ static void reftable_obj_record_copy_from(void *rec, const void *src_rec,
                (const struct reftable_obj_record *)src_rec;
 
        reftable_obj_record_release(obj);
-       *obj = *src;
-       obj->hash_prefix = reftable_malloc(obj->hash_prefix_len);
-       memcpy(obj->hash_prefix, src->hash_prefix, obj->hash_prefix_len);
+       obj->hash_prefix = reftable_malloc(src->hash_prefix_len);
+       obj->hash_prefix_len = src->hash_prefix_len;
+       if (src->hash_prefix_len)
+               memcpy(obj->hash_prefix, src->hash_prefix, obj->hash_prefix_len);
 
-       obj->offsets = reftable_malloc(obj->offset_len * sizeof(uint64_t));
-       COPY_ARRAY(obj->offsets, src->offsets, obj->offset_len);
+       obj->offsets = reftable_malloc(src->offset_len * sizeof(uint64_t));
+       obj->offset_len = src->offset_len;
+       COPY_ARRAY(obj->offsets, src->offsets, src->offset_len);
 }
 
 static uint8_t reftable_obj_record_val_type(const void *rec)
@@ -572,6 +615,25 @@ static int not_a_deletion(const void *p)
        return 0;
 }
 
+static int reftable_obj_record_equal_void(const void *a, const void *b, int hash_size)
+{
+       struct reftable_obj_record *ra = (struct reftable_obj_record *) a;
+       struct reftable_obj_record *rb = (struct reftable_obj_record *) b;
+
+       if (ra->hash_prefix_len != rb->hash_prefix_len
+           || ra->offset_len != rb->offset_len)
+               return 0;
+
+       if (ra->hash_prefix_len &&
+           memcmp(ra->hash_prefix, rb->hash_prefix, ra->hash_prefix_len))
+               return 0;
+       if (ra->offset_len &&
+           memcmp(ra->offsets, rb->offsets, ra->offset_len * sizeof(uint64_t)))
+               return 0;
+
+       return 1;
+}
+
 static struct reftable_record_vtable reftable_obj_record_vtable = {
        .key = &reftable_obj_record_key,
        .type = BLOCK_TYPE_OBJ,
@@ -580,32 +642,43 @@ static struct reftable_record_vtable reftable_obj_record_vtable = {
        .encode = &reftable_obj_record_encode,
        .decode = &reftable_obj_record_decode,
        .release = &reftable_obj_record_release,
-       .is_deletion = not_a_deletion,
+       .is_deletion = &not_a_deletion,
+       .equal = &reftable_obj_record_equal_void,
+       .print = &reftable_obj_record_print,
 };
 
-void reftable_log_record_print(struct reftable_log_record *log,
-                              uint32_t hash_id)
+static void reftable_log_record_print_sz(struct reftable_log_record *log,
+                                        int hash_size)
 {
-       char hex[GIT_SHA256_RAWSZ + 1] = { 0 };
+       char hex[GIT_MAX_HEXSZ + 1] = { 0 };
 
        switch (log->value_type) {
        case REFTABLE_LOG_DELETION:
-               printf("log{%s(%" PRIu64 ") delete", log->refname,
+               printf("log{%s(%" PRIu64 ") delete\n", log->refname,
                       log->update_index);
                break;
        case REFTABLE_LOG_UPDATE:
                printf("log{%s(%" PRIu64 ") %s <%s> %" PRIu64 " %04d\n",
-                      log->refname, log->update_index, log->value.update.name,
-                      log->value.update.email, log->value.update.time,
+                      log->refname, log->update_index,
+                      log->value.update.name ? log->value.update.name : "",
+                      log->value.update.email ? log->value.update.email : "",
+                      log->value.update.time,
                       log->value.update.tz_offset);
-               hex_format(hex, log->value.update.old_hash, hash_size(hash_id));
+               hex_format(hex, log->value.update.old_hash, hash_size);
                printf("%s => ", hex);
-               hex_format(hex, log->value.update.new_hash, hash_size(hash_id));
-               printf("%s\n\n%s\n}\n", hex, log->value.update.message);
+               hex_format(hex, log->value.update.new_hash, hash_size);
+               printf("%s\n\n%s\n}\n", hex,
+                      log->value.update.message ? log->value.update.message : "");
                break;
        }
 }
 
+void reftable_log_record_print(struct reftable_log_record *log,
+                                     uint32_t hash_id)
+{
+       reftable_log_record_print_sz(log, hash_size(hash_id));
+}
+
 static void reftable_log_record_key(const void *r, struct strbuf *dest)
 {
        const struct reftable_log_record *rec =
@@ -881,8 +954,16 @@ static int zero_hash_eq(uint8_t *a, uint8_t *b, int sz)
        return !memcmp(a, b, sz);
 }
 
-int reftable_log_record_equal(struct reftable_log_record *a,
-                             struct reftable_log_record *b, int hash_size)
+static int reftable_log_record_equal_void(const void *a,
+                                         const void *b, int hash_size)
+{
+       return reftable_log_record_equal((struct reftable_log_record *) a,
+                                        (struct reftable_log_record *) b,
+                                        hash_size);
+}
+
+int reftable_log_record_equal(const struct reftable_log_record *a,
+                             const struct reftable_log_record *b, int hash_size)
 {
        if (!(null_streq(a->refname, b->refname) &&
              a->update_index == b->update_index &&
@@ -915,6 +996,11 @@ static int reftable_log_record_is_deletion_void(const void *p)
                (const struct reftable_log_record *)p);
 }
 
+static void reftable_log_record_print_void(const void *rec, int hash_size)
+{
+       reftable_log_record_print_sz((struct reftable_log_record*)rec, hash_size);
+}
+
 static struct reftable_record_vtable reftable_log_record_vtable = {
        .key = &reftable_log_record_key,
        .type = BLOCK_TYPE_LOG,
@@ -924,60 +1010,10 @@ static struct reftable_record_vtable reftable_log_record_vtable = {
        .decode = &reftable_log_record_decode,
        .release = &reftable_log_record_release_void,
        .is_deletion = &reftable_log_record_is_deletion_void,
+       .equal = &reftable_log_record_equal_void,
+       .print = &reftable_log_record_print_void,
 };
 
-struct reftable_record reftable_new_record(uint8_t typ)
-{
-       struct reftable_record rec = { NULL };
-       switch (typ) {
-       case BLOCK_TYPE_REF: {
-               struct reftable_ref_record *r =
-                       reftable_calloc(sizeof(struct reftable_ref_record));
-               reftable_record_from_ref(&rec, r);
-               return rec;
-       }
-
-       case BLOCK_TYPE_OBJ: {
-               struct reftable_obj_record *r =
-                       reftable_calloc(sizeof(struct reftable_obj_record));
-               reftable_record_from_obj(&rec, r);
-               return rec;
-       }
-       case BLOCK_TYPE_LOG: {
-               struct reftable_log_record *r =
-                       reftable_calloc(sizeof(struct reftable_log_record));
-               reftable_record_from_log(&rec, r);
-               return rec;
-       }
-       case BLOCK_TYPE_INDEX: {
-               struct reftable_index_record empty = { .last_key =
-                                                              STRBUF_INIT };
-               struct reftable_index_record *r =
-                       reftable_calloc(sizeof(struct reftable_index_record));
-               *r = empty;
-               reftable_record_from_index(&rec, r);
-               return rec;
-       }
-       }
-       abort();
-       return rec;
-}
-
-/* clear out the record, yielding the reftable_record data that was
- * encapsulated. */
-static void *reftable_record_yield(struct reftable_record *rec)
-{
-       void *p = rec->data;
-       rec->data = NULL;
-       return p;
-}
-
-void reftable_record_destroy(struct reftable_record *rec)
-{
-       reftable_record_release(rec);
-       reftable_free(reftable_record_yield(rec));
-}
-
 static void reftable_index_record_key(const void *r, struct strbuf *dest)
 {
        const struct reftable_index_record *rec = r;
@@ -1042,6 +1078,21 @@ static int reftable_index_record_decode(void *rec, struct strbuf key,
        return start.len - in.len;
 }
 
+static int reftable_index_record_equal(const void *a, const void *b, int hash_size)
+{
+       struct reftable_index_record *ia = (struct reftable_index_record *) a;
+       struct reftable_index_record *ib = (struct reftable_index_record *) b;
+
+       return ia->offset == ib->offset && !strbuf_cmp(&ia->last_key, &ib->last_key);
+}
+
+static void reftable_index_record_print(const void *rec, int hash_size)
+{
+       const struct reftable_index_record *idx = rec;
+       /* TODO: escape null chars? */
+       printf("\"%s\" %" PRIu64 "\n", idx->last_key.buf, idx->offset);
+}
+
 static struct reftable_record_vtable reftable_index_record_vtable = {
        .key = &reftable_index_record_key,
        .type = BLOCK_TYPE_INDEX,
@@ -1051,95 +1102,66 @@ static struct reftable_record_vtable reftable_index_record_vtable = {
        .decode = &reftable_index_record_decode,
        .release = &reftable_index_record_release,
        .is_deletion = &not_a_deletion,
+       .equal = &reftable_index_record_equal,
+       .print = &reftable_index_record_print,
 };
 
 void reftable_record_key(struct reftable_record *rec, struct strbuf *dest)
 {
-       rec->ops->key(rec->data, dest);
+       reftable_record_vtable(rec)->key(reftable_record_data(rec), dest);
 }
 
 uint8_t reftable_record_type(struct reftable_record *rec)
 {
-       return rec->ops->type;
+       return rec->type;
 }
 
 int reftable_record_encode(struct reftable_record *rec, struct string_view dest,
                           int hash_size)
 {
-       return rec->ops->encode(rec->data, dest, hash_size);
+       return reftable_record_vtable(rec)->encode(reftable_record_data(rec),
+                                                  dest, hash_size);
 }
 
 void reftable_record_copy_from(struct reftable_record *rec,
                               struct reftable_record *src, int hash_size)
 {
-       assert(src->ops->type == rec->ops->type);
+       assert(src->type == rec->type);
 
-       rec->ops->copy_from(rec->data, src->data, hash_size);
+       reftable_record_vtable(rec)->copy_from(reftable_record_data(rec),
+                                              reftable_record_data(src),
+                                              hash_size);
 }
 
 uint8_t reftable_record_val_type(struct reftable_record *rec)
 {
-       return rec->ops->val_type(rec->data);
+       return reftable_record_vtable(rec)->val_type(reftable_record_data(rec));
 }
 
 int reftable_record_decode(struct reftable_record *rec, struct strbuf key,
                           uint8_t extra, struct string_view src, int hash_size)
 {
-       return rec->ops->decode(rec->data, key, extra, src, hash_size);
+       return reftable_record_vtable(rec)->decode(reftable_record_data(rec),
+                                                  key, extra, src, hash_size);
 }
 
 void reftable_record_release(struct reftable_record *rec)
 {
-       rec->ops->release(rec->data);
+       reftable_record_vtable(rec)->release(reftable_record_data(rec));
 }
 
 int reftable_record_is_deletion(struct reftable_record *rec)
 {
-       return rec->ops->is_deletion(rec->data);
+       return reftable_record_vtable(rec)->is_deletion(
+               reftable_record_data(rec));
 }
 
-void reftable_record_from_ref(struct reftable_record *rec,
-                             struct reftable_ref_record *ref_rec)
+int reftable_record_equal(struct reftable_record *a, struct reftable_record *b, int hash_size)
 {
-       assert(!rec->ops);
-       rec->data = ref_rec;
-       rec->ops = &reftable_ref_record_vtable;
-}
-
-void reftable_record_from_obj(struct reftable_record *rec,
-                             struct reftable_obj_record *obj_rec)
-{
-       assert(!rec->ops);
-       rec->data = obj_rec;
-       rec->ops = &reftable_obj_record_vtable;
-}
-
-void reftable_record_from_index(struct reftable_record *rec,
-                               struct reftable_index_record *index_rec)
-{
-       assert(!rec->ops);
-       rec->data = index_rec;
-       rec->ops = &reftable_index_record_vtable;
-}
-
-void reftable_record_from_log(struct reftable_record *rec,
-                             struct reftable_log_record *log_rec)
-{
-       assert(!rec->ops);
-       rec->data = log_rec;
-       rec->ops = &reftable_log_record_vtable;
-}
-
-struct reftable_ref_record *reftable_record_as_ref(struct reftable_record *rec)
-{
-       assert(reftable_record_type(rec) == BLOCK_TYPE_REF);
-       return rec->data;
-}
-
-struct reftable_log_record *reftable_record_as_log(struct reftable_record *rec)
-{
-       assert(reftable_record_type(rec) == BLOCK_TYPE_LOG);
-       return rec->data;
+       if (a->type != b->type)
+               return 0;
+       return reftable_record_vtable(a)->equal(
+               reftable_record_data(a), reftable_record_data(b), hash_size);
 }
 
 static int hash_equal(uint8_t *a, uint8_t *b, int hash_size)
@@ -1150,13 +1172,15 @@ static int hash_equal(uint8_t *a, uint8_t *b, int hash_size)
        return a == b;
 }
 
-int reftable_ref_record_equal(struct reftable_ref_record *a,
-                             struct reftable_ref_record *b, int hash_size)
+int reftable_ref_record_equal(const struct reftable_ref_record *a,
+                             const struct reftable_ref_record *b, int hash_size)
 {
        assert(hash_size > 0);
-       if (!(0 == strcmp(a->refname, b->refname) &&
-             a->update_index == b->update_index &&
-             a->value_type == b->value_type))
+       if (!null_streq(a->refname, b->refname))
+               return 0;
+
+       if (a->update_index != b->update_index ||
+           a->value_type != b->value_type)
                return 0;
 
        switch (a->value_type) {
@@ -1210,3 +1234,81 @@ void string_view_consume(struct string_view *s, int n)
        s->buf += n;
        s->len -= n;
 }
+
+static void *reftable_record_data(struct reftable_record *rec)
+{
+       switch (rec->type) {
+       case BLOCK_TYPE_REF:
+               return &rec->u.ref;
+       case BLOCK_TYPE_LOG:
+               return &rec->u.log;
+       case BLOCK_TYPE_INDEX:
+               return &rec->u.idx;
+       case BLOCK_TYPE_OBJ:
+               return &rec->u.obj;
+       }
+       abort();
+}
+
+static struct reftable_record_vtable *
+reftable_record_vtable(struct reftable_record *rec)
+{
+       switch (rec->type) {
+       case BLOCK_TYPE_REF:
+               return &reftable_ref_record_vtable;
+       case BLOCK_TYPE_LOG:
+               return &reftable_log_record_vtable;
+       case BLOCK_TYPE_INDEX:
+               return &reftable_index_record_vtable;
+       case BLOCK_TYPE_OBJ:
+               return &reftable_obj_record_vtable;
+       }
+       abort();
+}
+
+struct reftable_record reftable_new_record(uint8_t typ)
+{
+       struct reftable_record clean = {
+               .type = typ,
+       };
+
+       /* the following is involved, but the naive solution (just return
+        * `clean` as is, except for BLOCK_TYPE_INDEX), returns a garbage
+        * clean.u.obj.offsets pointer on Windows VS CI.  Go figure.
+        */
+       switch (typ) {
+       case BLOCK_TYPE_OBJ:
+       {
+               struct reftable_obj_record obj = { 0 };
+               clean.u.obj = obj;
+               break;
+       }
+       case BLOCK_TYPE_INDEX:
+       {
+               struct reftable_index_record idx = {
+                       .last_key = STRBUF_INIT,
+               };
+               clean.u.idx = idx;
+               break;
+       }
+       case BLOCK_TYPE_REF:
+       {
+               struct reftable_ref_record ref = { 0 };
+               clean.u.ref = ref;
+               break;
+       }
+       case BLOCK_TYPE_LOG:
+       {
+               struct reftable_log_record log = { 0 };
+               clean.u.log = log;
+               break;
+       }
+       }
+       return clean;
+}
+
+void reftable_record_print(struct reftable_record *rec, int hash_size)
+{
+       printf("'%c': ", rec->type);
+       reftable_record_vtable(rec)->print(reftable_record_data(rec), hash_size);
+}
index 498e8c50bf4f02eb13bc653fe11006a861f6ab9e..fd80cd451d5d4c3ffea93d5bb1c7a0014531fae9 100644 (file)
@@ -58,18 +58,18 @@ struct reftable_record_vtable {
 
        /* is this a tombstone? */
        int (*is_deletion)(const void *rec);
-};
 
-/* record is a generic wrapper for different types of records. */
-struct reftable_record {
-       void *data;
-       struct reftable_record_vtable *ops;
+       /* Are two records equal? This assumes they have the same type. Returns 0 for non-equal. */
+       int (*equal)(const void *a, const void *b, int hash_size);
+
+       /* Print on stdout, for debugging. */
+       void (*print)(const void *rec, int hash_size);
 };
 
 /* returns true for recognized block types. Block start with the block type. */
 int reftable_is_block_type(uint8_t typ);
 
-/* creates a malloced record of the given type. Dispose with record_destroy */
+/* return an initialized record for the given type */
 struct reftable_record reftable_new_record(uint8_t typ);
 
 /* Encode `key` into `dest`. Sets `is_restart` to indicate a restart. Returns
@@ -97,8 +97,25 @@ struct reftable_obj_record {
        int offset_len;
 };
 
-/* see struct record_vtable */
+/* record is a generic wrapper for different types of records. It is normally
+ * created on the stack, or embedded within another struct. If the type is
+ * known, a fresh instance can be initialized explicitly. Otherwise, use
+ * reftable_new_record() to initialize generically (as the index_record is not
+ * valid as 0-initialized structure)
+ */
+struct reftable_record {
+       uint8_t type;
+       union {
+               struct reftable_ref_record ref;
+               struct reftable_log_record log;
+               struct reftable_obj_record obj;
+               struct reftable_index_record idx;
+       } u;
+};
 
+/* see struct record_vtable */
+int reftable_record_equal(struct reftable_record *a, struct reftable_record *b, int hash_size);
+void reftable_record_print(struct reftable_record *rec, int hash_size);
 void reftable_record_key(struct reftable_record *rec, struct strbuf *dest);
 uint8_t reftable_record_type(struct reftable_record *rec);
 void reftable_record_copy_from(struct reftable_record *rec,
@@ -111,25 +128,9 @@ int reftable_record_decode(struct reftable_record *rec, struct strbuf key,
                           int hash_size);
 int reftable_record_is_deletion(struct reftable_record *rec);
 
-/* zeroes out the embedded record */
+/* frees and zeroes out the embedded record */
 void reftable_record_release(struct reftable_record *rec);
 
-/* clear and deallocate embedded record, and zero `rec`. */
-void reftable_record_destroy(struct reftable_record *rec);
-
-/* initialize generic records from concrete records. The generic record should
- * be zeroed out. */
-void reftable_record_from_obj(struct reftable_record *rec,
-                             struct reftable_obj_record *objrec);
-void reftable_record_from_index(struct reftable_record *rec,
-                               struct reftable_index_record *idxrec);
-void reftable_record_from_ref(struct reftable_record *rec,
-                             struct reftable_ref_record *refrec);
-void reftable_record_from_log(struct reftable_record *rec,
-                             struct reftable_log_record *logrec);
-struct reftable_ref_record *reftable_record_as_ref(struct reftable_record *ref);
-struct reftable_log_record *reftable_record_as_log(struct reftable_record *ref);
-
 /* for qsort. */
 int reftable_ref_record_compare_name(const void *a, const void *b);
 
index f4ad7cace41bb227564e4d6a17078fdefd36c555..70ae78feca4f11cdb50f4fdcb08d90118bf487df 100644 (file)
 
 static void test_copy(struct reftable_record *rec)
 {
-       struct reftable_record copy =
-               reftable_new_record(reftable_record_type(rec));
+       struct reftable_record copy = { 0 };
+       uint8_t typ;
+
+       typ = reftable_record_type(rec);
+       copy = reftable_new_record(typ);
        reftable_record_copy_from(&copy, rec, GIT_SHA1_RAWSZ);
        /* do it twice to catch memory leaks */
        reftable_record_copy_from(&copy, rec, GIT_SHA1_RAWSZ);
-       switch (reftable_record_type(&copy)) {
-       case BLOCK_TYPE_REF:
-               EXPECT(reftable_ref_record_equal(reftable_record_as_ref(&copy),
-                                                reftable_record_as_ref(rec),
-                                                GIT_SHA1_RAWSZ));
-               break;
-       case BLOCK_TYPE_LOG:
-               EXPECT(reftable_log_record_equal(reftable_record_as_log(&copy),
-                                                reftable_record_as_log(rec),
-                                                GIT_SHA1_RAWSZ));
-               break;
-       }
-       reftable_record_destroy(&copy);
+       EXPECT(reftable_record_equal(rec, &copy, GIT_SHA1_RAWSZ));
+
+       puts("testing print coverage:\n");
+       reftable_record_print(&copy, GIT_SHA1_RAWSZ);
+
+       reftable_record_release(&copy);
 }
 
 static void test_varint_roundtrip(void)
@@ -106,61 +102,58 @@ static void test_reftable_ref_record_roundtrip(void)
        int i = 0;
 
        for (i = REFTABLE_REF_DELETION; i < REFTABLE_NR_REF_VALUETYPES; i++) {
-               struct reftable_ref_record in = { NULL };
-               struct reftable_ref_record out = { NULL };
-               struct reftable_record rec_out = { NULL };
+               struct reftable_record in = {
+                       .type = BLOCK_TYPE_REF,
+               };
+               struct reftable_record out = { .type = BLOCK_TYPE_REF };
                struct strbuf key = STRBUF_INIT;
-               struct reftable_record rec = { NULL };
                uint8_t buffer[1024] = { 0 };
                struct string_view dest = {
                        .buf = buffer,
                        .len = sizeof(buffer),
                };
-
                int n, m;
 
-               in.value_type = i;
+               in.u.ref.value_type = i;
                switch (i) {
                case REFTABLE_REF_DELETION:
                        break;
                case REFTABLE_REF_VAL1:
-                       in.value.val1 = reftable_malloc(GIT_SHA1_RAWSZ);
-                       set_hash(in.value.val1, 1);
+                       in.u.ref.value.val1 = reftable_malloc(GIT_SHA1_RAWSZ);
+                       set_hash(in.u.ref.value.val1, 1);
                        break;
                case REFTABLE_REF_VAL2:
-                       in.value.val2.value = reftable_malloc(GIT_SHA1_RAWSZ);
-                       set_hash(in.value.val2.value, 1);
-                       in.value.val2.target_value =
+                       in.u.ref.value.val2.value =
                                reftable_malloc(GIT_SHA1_RAWSZ);
-                       set_hash(in.value.val2.target_value, 2);
+                       set_hash(in.u.ref.value.val2.value, 1);
+                       in.u.ref.value.val2.target_value =
+                               reftable_malloc(GIT_SHA1_RAWSZ);
+                       set_hash(in.u.ref.value.val2.target_value, 2);
                        break;
                case REFTABLE_REF_SYMREF:
-                       in.value.symref = xstrdup("target");
+                       in.u.ref.value.symref = xstrdup("target");
                        break;
                }
-               in.refname = xstrdup("refs/heads/master");
+               in.u.ref.refname = xstrdup("refs/heads/master");
 
-               reftable_record_from_ref(&rec, &in);
-               test_copy(&rec);
+               test_copy(&in);
 
-               EXPECT(reftable_record_val_type(&rec) == i);
+               EXPECT(reftable_record_val_type(&in) == i);
 
-               reftable_record_key(&rec, &key);
-               n = reftable_record_encode(&rec, dest, GIT_SHA1_RAWSZ);
+               reftable_record_key(&in, &key);
+               n = reftable_record_encode(&in, dest, GIT_SHA1_RAWSZ);
                EXPECT(n > 0);
 
                /* decode into a non-zero reftable_record to test for leaks. */
-
-               reftable_record_from_ref(&rec_out, &out);
-               m = reftable_record_decode(&rec_out, key, i, dest,
-                                          GIT_SHA1_RAWSZ);
+               m = reftable_record_decode(&out, key, i, dest, GIT_SHA1_RAWSZ);
                EXPECT(n == m);
 
-               EXPECT(reftable_ref_record_equal(&in, &out, GIT_SHA1_RAWSZ));
-               reftable_record_release(&rec_out);
+               EXPECT(reftable_ref_record_equal(&in.u.ref, &out.u.ref,
+                                                GIT_SHA1_RAWSZ));
+               reftable_record_release(&in);
 
                strbuf_release(&key);
-               reftable_ref_record_release(&in);
+               reftable_record_release(&out);
        }
 }
 
@@ -187,7 +180,8 @@ static void test_reftable_log_record_equal(void)
 static void test_reftable_log_record_roundtrip(void)
 {
        int i;
-       struct reftable_log_record in[2] = {
+
+       struct reftable_log_record in[] = {
                {
                        .refname = xstrdup("refs/heads/master"),
                        .update_index = 42,
@@ -208,12 +202,26 @@ static void test_reftable_log_record_roundtrip(void)
                        .refname = xstrdup("refs/heads/master"),
                        .update_index = 22,
                        .value_type = REFTABLE_LOG_DELETION,
+               },
+               {
+                       .refname = xstrdup("branch"),
+                       .update_index = 33,
+                       .value_type = REFTABLE_LOG_UPDATE,
+                       .value = {
+                               .update = {
+                                       .old_hash = reftable_malloc(GIT_SHA1_RAWSZ),
+                                       .new_hash = reftable_malloc(GIT_SHA1_RAWSZ),
+                                       /* rest of fields left empty. */
+                               },
+                       },
                }
        };
        set_test_hash(in[0].value.update.new_hash, 1);
        set_test_hash(in[0].value.update.old_hash, 2);
+       set_test_hash(in[2].value.update.new_hash, 3);
+       set_test_hash(in[2].value.update.old_hash, 4);
        for (i = 0; i < ARRAY_SIZE(in); i++) {
-               struct reftable_record rec = { NULL };
+               struct reftable_record rec = { .type = BLOCK_TYPE_LOG };
                struct strbuf key = STRBUF_INIT;
                uint8_t buffer[1024] = { 0 };
                struct string_view dest = {
@@ -221,23 +229,25 @@ static void test_reftable_log_record_roundtrip(void)
                        .len = sizeof(buffer),
                };
                /* populate out, to check for leaks. */
-               struct reftable_log_record out = {
-                       .refname = xstrdup("old name"),
-                       .value_type = REFTABLE_LOG_UPDATE,
-                       .value = {
-                               .update = {
-                                       .new_hash = reftable_calloc(GIT_SHA1_RAWSZ),
-                                       .old_hash = reftable_calloc(GIT_SHA1_RAWSZ),
-                                       .name = xstrdup("old name"),
-                                       .email = xstrdup("old@email"),
-                                       .message = xstrdup("old message"),
+               struct reftable_record out = {
+                       .type = BLOCK_TYPE_LOG,
+                       .u.log = {
+                               .refname = xstrdup("old name"),
+                               .value_type = REFTABLE_LOG_UPDATE,
+                               .value = {
+                                       .update = {
+                                               .new_hash = reftable_calloc(GIT_SHA1_RAWSZ),
+                                               .old_hash = reftable_calloc(GIT_SHA1_RAWSZ),
+                                               .name = xstrdup("old name"),
+                                               .email = xstrdup("old@email"),
+                                               .message = xstrdup("old message"),
+                                       },
                                },
                        },
                };
-               struct reftable_record rec_out = { NULL };
                int n, m, valtype;
 
-               reftable_record_from_log(&rec, &in[i]);
+               rec.u.log = in[i];
 
                test_copy(&rec);
 
@@ -245,16 +255,16 @@ static void test_reftable_log_record_roundtrip(void)
 
                n = reftable_record_encode(&rec, dest, GIT_SHA1_RAWSZ);
                EXPECT(n >= 0);
-               reftable_record_from_log(&rec_out, &out);
                valtype = reftable_record_val_type(&rec);
-               m = reftable_record_decode(&rec_out, key, valtype, dest,
+               m = reftable_record_decode(&out, key, valtype, dest,
                                           GIT_SHA1_RAWSZ);
                EXPECT(n == m);
 
-               EXPECT(reftable_log_record_equal(&in[i], &out, GIT_SHA1_RAWSZ));
+               EXPECT(reftable_log_record_equal(&in[i], &out.u.log,
+                                                GIT_SHA1_RAWSZ));
                reftable_log_record_release(&in[i]);
                strbuf_release(&key);
-               reftable_record_release(&rec_out);
+               reftable_record_release(&out);
        }
 }
 
@@ -322,47 +332,45 @@ static void test_reftable_obj_record_roundtrip(void)
                                               } };
        int i = 0;
        for (i = 0; i < ARRAY_SIZE(recs); i++) {
-               struct reftable_obj_record in = recs[i];
                uint8_t buffer[1024] = { 0 };
                struct string_view dest = {
                        .buf = buffer,
                        .len = sizeof(buffer),
                };
-               struct reftable_record rec = { NULL };
+               struct reftable_record in = {
+                       .type = BLOCK_TYPE_OBJ,
+                       .u = {
+                               .obj = recs[i],
+                       },
+               };
                struct strbuf key = STRBUF_INIT;
-               struct reftable_obj_record out = { NULL };
-               struct reftable_record rec_out = { NULL };
+               struct reftable_record out = { .type = BLOCK_TYPE_OBJ };
                int n, m;
                uint8_t extra;
 
-               reftable_record_from_obj(&rec, &in);
-               test_copy(&rec);
-               reftable_record_key(&rec, &key);
-               n = reftable_record_encode(&rec, dest, GIT_SHA1_RAWSZ);
+               test_copy(&in);
+               reftable_record_key(&in, &key);
+               n = reftable_record_encode(&in, dest, GIT_SHA1_RAWSZ);
                EXPECT(n > 0);
-               extra = reftable_record_val_type(&rec);
-               reftable_record_from_obj(&rec_out, &out);
-               m = reftable_record_decode(&rec_out, key, extra, dest,
+               extra = reftable_record_val_type(&in);
+               m = reftable_record_decode(&out, key, extra, dest,
                                           GIT_SHA1_RAWSZ);
                EXPECT(n == m);
 
-               EXPECT(in.hash_prefix_len == out.hash_prefix_len);
-               EXPECT(in.offset_len == out.offset_len);
-
-               EXPECT(!memcmp(in.hash_prefix, out.hash_prefix,
-                              in.hash_prefix_len));
-               EXPECT(0 == memcmp(in.offsets, out.offsets,
-                                  sizeof(uint64_t) * in.offset_len));
+               EXPECT(reftable_record_equal(&in, &out, GIT_SHA1_RAWSZ));
                strbuf_release(&key);
-               reftable_record_release(&rec_out);
+               reftable_record_release(&out);
        }
 }
 
 static void test_reftable_index_record_roundtrip(void)
 {
-       struct reftable_index_record in = {
-               .offset = 42,
-               .last_key = STRBUF_INIT,
+       struct reftable_record in = {
+               .type = BLOCK_TYPE_INDEX,
+               .u.idx = {
+                       .offset = 42,
+                       .last_key = STRBUF_INIT,
+               },
        };
        uint8_t buffer[1024] = { 0 };
        struct string_view dest = {
@@ -370,31 +378,30 @@ static void test_reftable_index_record_roundtrip(void)
                .len = sizeof(buffer),
        };
        struct strbuf key = STRBUF_INIT;
-       struct reftable_record rec = { NULL };
-       struct reftable_index_record out = { .last_key = STRBUF_INIT };
-       struct reftable_record out_rec = { NULL };
+       struct reftable_record out = {
+               .type = BLOCK_TYPE_INDEX,
+               .u.idx = { .last_key = STRBUF_INIT },
+       };
        int n, m;
        uint8_t extra;
 
-       strbuf_addstr(&in.last_key, "refs/heads/master");
-       reftable_record_from_index(&rec, &in);
-       reftable_record_key(&rec, &key);
-       test_copy(&rec);
+       strbuf_addstr(&in.u.idx.last_key, "refs/heads/master");
+       reftable_record_key(&in, &key);
+       test_copy(&in);
 
-       EXPECT(0 == strbuf_cmp(&key, &in.last_key));
-       n = reftable_record_encode(&rec, dest, GIT_SHA1_RAWSZ);
+       EXPECT(0 == strbuf_cmp(&key, &in.u.idx.last_key));
+       n = reftable_record_encode(&in, dest, GIT_SHA1_RAWSZ);
        EXPECT(n > 0);
 
-       extra = reftable_record_val_type(&rec);
-       reftable_record_from_index(&out_rec, &out);
-       m = reftable_record_decode(&out_rec, key, extra, dest, GIT_SHA1_RAWSZ);
+       extra = reftable_record_val_type(&in);
+       m = reftable_record_decode(&out, key, extra, dest, GIT_SHA1_RAWSZ);
        EXPECT(m == n);
 
-       EXPECT(in.offset == out.offset);
+       EXPECT(reftable_record_equal(&in, &out, GIT_SHA1_RAWSZ));
 
-       reftable_record_release(&out_rec);
+       reftable_record_release(&out);
        strbuf_release(&key);
-       strbuf_release(&in.last_key);
+       strbuf_release(&in.u.idx.last_key);
 }
 
 int record_test_main(int argc, const char *argv[])
index 5370d2288c735fbbec3c0b22e19ace82d9dfc3d6..67104f8fbfecd7984127d29dd1ae3fa9bb263394 100644 (file)
@@ -49,25 +49,25 @@ struct reftable_ref_record {
 
 /* Returns the first hash, or NULL if `rec` is not of type
  * REFTABLE_REF_VAL1 or REFTABLE_REF_VAL2. */
-uint8_t *reftable_ref_record_val1(struct reftable_ref_record *rec);
+uint8_t *reftable_ref_record_val1(const struct reftable_ref_record *rec);
 
 /* Returns the second hash, or NULL if `rec` is not of type
  * REFTABLE_REF_VAL2. */
-uint8_t *reftable_ref_record_val2(struct reftable_ref_record *rec);
+uint8_t *reftable_ref_record_val2(const struct reftable_ref_record *rec);
 
 /* returns whether 'ref' represents a deletion */
 int reftable_ref_record_is_deletion(const struct reftable_ref_record *ref);
 
 /* prints a reftable_ref_record onto stdout. Useful for debugging. */
-void reftable_ref_record_print(struct reftable_ref_record *ref,
+void reftable_ref_record_print(const struct reftable_ref_record *ref,
                               uint32_t hash_id);
 
 /* frees and nulls all pointer values inside `ref`. */
 void reftable_ref_record_release(struct reftable_ref_record *ref);
 
 /* returns whether two reftable_ref_records are the same. Useful for testing. */
-int reftable_ref_record_equal(struct reftable_ref_record *a,
-                             struct reftable_ref_record *b, int hash_size);
+int reftable_ref_record_equal(const struct reftable_ref_record *a,
+                             const struct reftable_ref_record *b, int hash_size);
 
 /* reftable_log_record holds a reflog entry */
 struct reftable_log_record {
@@ -104,8 +104,8 @@ int reftable_log_record_is_deletion(const struct reftable_log_record *log);
 void reftable_log_record_release(struct reftable_log_record *log);
 
 /* returns whether two records are equal. Useful for testing. */
-int reftable_log_record_equal(struct reftable_log_record *a,
-                             struct reftable_log_record *b, int hash_size);
+int reftable_log_record_equal(const struct reftable_log_record *a,
+                             const struct reftable_log_record *b, int hash_size);
 
 /* dumps a reftable_log_record on stdout, for debugging/testing. */
 void reftable_log_record_print(struct reftable_log_record *log,
index a560dc1725596d9ae7e8ec775079ceeff6012e27..db8de197f6c42a0de203fc1fbca8174f7f4d2938 100644 (file)
@@ -143,7 +143,7 @@ int reftable_writer_close(struct reftable_writer *w);
 
    This struct becomes invalid when the writer is freed.
  */
-const struct reftable_stats *writer_stats(struct reftable_writer *w);
+const struct reftable_stats *reftable_writer_stats(struct reftable_writer *w);
 
 /* reftable_writer_free deallocates memory for the writer */
 void reftable_writer_free(struct reftable_writer *w);
diff --git a/reftable/reftable.c b/reftable/reftable.c
deleted file mode 100644 (file)
index 0e4607a..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-Copyright 2020 Google LLC
-
-Use of this source code is governed by a BSD-style
-license that can be found in the LICENSE file or at
-https://developers.google.com/open-source/licenses/bsd
-*/
-
-#include "basics.h"
-#include "record.h"
-#include "generic.h"
-#include "reftable-iterator.h"
-#include "reftable-generic.h"
-
-int reftable_table_seek_ref(struct reftable_table *tab,
-                           struct reftable_iterator *it, const char *name)
-{
-       struct reftable_ref_record ref = {
-               .refname = (char *)name,
-       };
-       struct reftable_record rec = { NULL };
-       reftable_record_from_ref(&rec, &ref);
-       return tab->ops->seek_record(tab->table_arg, it, &rec);
-}
-
-int reftable_table_read_ref(struct reftable_table *tab, const char *name,
-                           struct reftable_ref_record *ref)
-{
-       struct reftable_iterator it = { NULL };
-       int err = reftable_table_seek_ref(tab, &it, name);
-       if (err)
-               goto done;
-
-       err = reftable_iterator_next_ref(&it, ref);
-       if (err)
-               goto done;
-
-       if (strcmp(ref->refname, name) ||
-           reftable_ref_record_is_deletion(ref)) {
-               reftable_ref_record_release(ref);
-               err = 1;
-               goto done;
-       }
-
-done:
-       reftable_iterator_destroy(&it);
-       return err;
-}
-
-uint64_t reftable_table_max_update_index(struct reftable_table *tab)
-{
-       return tab->ops->max_update_index(tab->table_arg);
-}
-
-uint64_t reftable_table_min_update_index(struct reftable_table *tab)
-{
-       return tab->ops->min_update_index(tab->table_arg);
-}
-
-uint32_t reftable_table_hash_id(struct reftable_table *tab)
-{
-       return tab->ops->hash_id(tab->table_arg);
-}
-
-void reftable_iterator_destroy(struct reftable_iterator *it)
-{
-       if (!it->ops) {
-               return;
-       }
-       it->ops->close(it->iter_arg);
-       it->ops = NULL;
-       FREE_AND_NULL(it->iter_arg);
-}
-
-int reftable_iterator_next_ref(struct reftable_iterator *it,
-                              struct reftable_ref_record *ref)
-{
-       struct reftable_record rec = { NULL };
-       reftable_record_from_ref(&rec, ref);
-       return iterator_next(it, &rec);
-}
-
-int reftable_iterator_next_log(struct reftable_iterator *it,
-                              struct reftable_log_record *log)
-{
-       struct reftable_record rec = { NULL };
-       reftable_record_from_log(&rec, log);
-       return iterator_next(it, &rec);
-}
-
-int iterator_next(struct reftable_iterator *it, struct reftable_record *rec)
-{
-       return it->ops->next(it->iter_arg, rec);
-}
-
-static int empty_iterator_next(void *arg, struct reftable_record *rec)
-{
-       return 1;
-}
-
-static void empty_iterator_close(void *arg)
-{
-}
-
-static struct reftable_iterator_vtable empty_vtable = {
-       .next = &empty_iterator_next,
-       .close = &empty_iterator_close,
-};
-
-void iterator_set_empty(struct reftable_iterator *it)
-{
-       assert(!it->ops);
-       it->iter_arg = NULL;
-       it->ops = &empty_vtable;
-}
index 56bf5f2d84ae5f9bad040e68768f99274c11e48c..ddbdf1b9c8bf4668dfe4f9b7c03cabd43effb660 100644 (file)
@@ -889,7 +889,7 @@ static int stack_compact_range(struct reftable_stack *st, int first, int last,
        struct strbuf new_table_path = STRBUF_INIT;
        int err = 0;
        int have_lock = 0;
-       int lock_file_fd = 0;
+       int lock_file_fd = -1;
        int compact_count = last - first + 1;
        char **listp = NULL;
        char **delete_on_success =
@@ -923,7 +923,7 @@ static int stack_compact_range(struct reftable_stack *st, int first, int last,
        }
        /* Don't want to write to the lock for now.  */
        close(lock_file_fd);
-       lock_file_fd = 0;
+       lock_file_fd = -1;
 
        have_lock = 1;
        err = stack_uptodate(st);
@@ -1031,7 +1031,7 @@ static int stack_compact_range(struct reftable_stack *st, int first, int last,
                goto done;
        }
        err = close(lock_file_fd);
-       lock_file_fd = 0;
+       lock_file_fd = -1;
        if (err < 0) {
                err = REFTABLE_IO_ERROR;
                unlink(new_table_path.buf);
@@ -1068,9 +1068,9 @@ done:
                listp++;
        }
        free_names(subtable_locks);
-       if (lock_file_fd > 0) {
+       if (lock_file_fd >= 0) {
                close(lock_file_fd);
-               lock_file_fd = 0;
+               lock_file_fd = -1;
        }
        if (have_lock) {
                unlink(lock_file_name.buf);
index f4c743db80c391c1b6c91d3d5f178c76b4393964..19fe4e200859683b13b1f0b0a21c8b1685ad4a08 100644 (file)
@@ -90,7 +90,7 @@ static void test_read_file(void)
                EXPECT(0 == strcmp(want[i], names[i]));
        }
        free_names(names);
-       remove(fn);
+       (void) remove(fn);
 }
 
 static void test_parse_names(void)
@@ -839,6 +839,7 @@ static void test_reftable_stack_auto_compaction(void)
                EXPECT_ERR(err);
 
                err = reftable_stack_auto_compact(st);
+               EXPECT_ERR(err);
                EXPECT(i < 3 || st->merged->stack_len < 2 * fastlog2(i));
        }
 
index 4907306c0c5d4e13ef13ea9f89c9529a6b7a3cda..18f9207dfee16accdaac46a77d13b9960aad3ca2 100644 (file)
@@ -16,17 +16,6 @@ https://developers.google.com/open-source/licenses/bsd
 #include "hash.h" /* hash ID, sizes.*/
 #include "dir.h" /* remove_dir_recursively, for tests.*/
 
-#include <zlib.h>
-
-#ifdef NO_UNCOMPRESS2
-/*
- * This is uncompress2, which is only available in zlib >= 1.2.9
- * (released as of early 2017)
- */
-int uncompress2(Bytef *dest, uLongf *destLen, const Bytef *source,
-               uLong *sourceLen);
-#endif
-
 int hash_size(uint32_t id);
 
 #endif
index 35c8649c9b73cdd06d279a6364440d017c66a9fc..427f1317c6be6121a733fa206ce6e27ab5e029b8 100644 (file)
@@ -150,6 +150,8 @@ void reftable_writer_set_limits(struct reftable_writer *w, uint64_t min,
 
 void reftable_writer_free(struct reftable_writer *w)
 {
+       if (!w)
+               return;
        reftable_free(w->block);
        reftable_free(w);
 }
@@ -238,14 +240,13 @@ static int writer_add_record(struct reftable_writer *w,
 
        writer_reinit_block_writer(w, reftable_record_type(rec));
        err = block_writer_add(w->block_writer, rec);
-       if (err < 0) {
+       if (err == -1) {
                /* we are writing into memory, so an error can only mean it
                 * doesn't fit. */
                err = REFTABLE_ENTRY_TOO_BIG_ERROR;
                goto done;
        }
 
-       err = 0;
 done:
        strbuf_release(&key);
        return err;
@@ -254,8 +255,12 @@ done:
 int reftable_writer_add_ref(struct reftable_writer *w,
                            struct reftable_ref_record *ref)
 {
-       struct reftable_record rec = { NULL };
-       struct reftable_ref_record copy = *ref;
+       struct reftable_record rec = {
+               .type = BLOCK_TYPE_REF,
+               .u = {
+                       .ref = *ref
+               },
+       };
        int err = 0;
 
        if (ref->refname == NULL)
@@ -264,8 +269,7 @@ int reftable_writer_add_ref(struct reftable_writer *w,
            ref->update_index > w->max_update_index)
                return REFTABLE_API_ERROR;
 
-       reftable_record_from_ref(&rec, &copy);
-       copy.update_index -= w->min_update_index;
+       rec.u.ref.update_index -= w->min_update_index;
 
        err = writer_add_record(w, &rec);
        if (err < 0)
@@ -304,7 +308,12 @@ int reftable_writer_add_refs(struct reftable_writer *w,
 static int reftable_writer_add_log_verbatim(struct reftable_writer *w,
                                            struct reftable_log_record *log)
 {
-       struct reftable_record rec = { NULL };
+       struct reftable_record rec = {
+               .type = BLOCK_TYPE_LOG,
+               .u = {
+                       .log = *log,
+               },
+       };
        if (w->block_writer &&
            block_writer_type(w->block_writer) == BLOCK_TYPE_REF) {
                int err = writer_finish_public_section(w);
@@ -314,8 +323,6 @@ static int reftable_writer_add_log_verbatim(struct reftable_writer *w,
 
        w->next -= w->pending_padding;
        w->pending_padding = 0;
-
-       reftable_record_from_log(&rec, log);
        return writer_add_record(w, &rec);
 }
 
@@ -396,8 +403,12 @@ static int writer_finish_section(struct reftable_writer *w)
                w->index_len = 0;
                w->index_cap = 0;
                for (i = 0; i < idx_len; i++) {
-                       struct reftable_record rec = { NULL };
-                       reftable_record_from_index(&rec, idx + i);
+                       struct reftable_record rec = {
+                               .type = BLOCK_TYPE_INDEX,
+                               .u = {
+                                       .idx = idx[i],
+                               },
+                       };
                        if (block_writer_add(w->block_writer, &rec) == 0) {
                                continue;
                        }
@@ -465,17 +476,17 @@ static void write_object_record(void *void_arg, void *key)
 {
        struct write_record_arg *arg = void_arg;
        struct obj_index_tree_node *entry = key;
-       struct reftable_obj_record obj_rec = {
-               .hash_prefix = (uint8_t *)entry->hash.buf,
-               .hash_prefix_len = arg->w->stats.object_id_len,
-               .offsets = entry->offsets,
-               .offset_len = entry->offset_len,
-       };
-       struct reftable_record rec = { NULL };
+       struct reftable_record
+               rec = { .type = BLOCK_TYPE_OBJ,
+                       .u.obj = {
+                               .hash_prefix = (uint8_t *)entry->hash.buf,
+                               .hash_prefix_len = arg->w->stats.object_id_len,
+                               .offsets = entry->offsets,
+                               .offset_len = entry->offset_len,
+                       } };
        if (arg->err < 0)
                goto done;
 
-       reftable_record_from_obj(&rec, &obj_rec);
        arg->err = block_writer_add(arg->w->block_writer, &rec);
        if (arg->err == 0)
                goto done;
@@ -488,7 +499,8 @@ static void write_object_record(void *void_arg, void *key)
        arg->err = block_writer_add(arg->w->block_writer, &rec);
        if (arg->err == 0)
                goto done;
-       obj_rec.offset_len = 0;
+
+       rec.u.obj.offset_len = 0;
        arg->err = block_writer_add(arg->w->block_writer, &rec);
 
        /* Should be able to write into a fresh block. */
@@ -509,7 +521,9 @@ static void object_record_free(void *void_arg, void *key)
 static int writer_dump_object_index(struct reftable_writer *w)
 {
        struct write_record_arg closure = { .w = w };
-       struct common_prefix_arg common = { NULL };
+       struct common_prefix_arg common = {
+               .max = 1,               /* obj_id_len should be >= 2. */
+       };
        if (w->obj_index_tree) {
                infix_walk(w->obj_index_tree, &update_common, &common);
        }
@@ -687,7 +701,7 @@ static int writer_flush_block(struct reftable_writer *w)
        return writer_flush_nonempty_block(w);
 }
 
-const struct reftable_stats *writer_stats(struct reftable_writer *w)
+const struct reftable_stats *reftable_writer_stats(struct reftable_writer *w)
 {
        return &w->stats;
 }
index a5a678c042d9cce43a551752d40d8f416e46cf39..085f35b77a67e64be9808cae3bbf7ec78a9d263d 100644 (file)
@@ -43,6 +43,7 @@ struct options {
                /* see documentation of corresponding flag in fetch-pack.h */
                from_promisor : 1,
 
+               refetch : 1,
                atomic : 1,
                object_format : 1,
                force_if_includes : 1;
@@ -198,6 +199,9 @@ static int set_option(const char *name, const char *value)
        } else if (!strcmp(name, "from-promisor")) {
                options.from_promisor = 1;
                return 0;
+       } else if (!strcmp(name, "refetch")) {
+               options.refetch = 1;
+               return 0;
        } else if (!strcmp(name, "filter")) {
                options.filter = xstrdup(value);
                return 0;
@@ -1180,6 +1184,8 @@ static int fetch_git(struct discovery *heads,
                strvec_push(&args, "--deepen-relative");
        if (options.from_promisor)
                strvec_push(&args, "--from-promisor");
+       if (options.refetch)
+               strvec_push(&args, "--refetch");
        if (options.filter)
                strvec_pushf(&args, "--filter=%s", options.filter);
        strvec_push(&args, url.buf);
@@ -1470,11 +1476,12 @@ int cmd_main(int argc, const char **argv)
 {
        struct strbuf buf = STRBUF_INIT;
        int nongit;
+       int ret = 1;
 
        setup_git_directory_gently(&nongit);
        if (argc < 2) {
                error(_("remote-curl: usage: git remote-curl <remote> [<url>]"));
-               return 1;
+               goto cleanup;
        }
 
        options.verbosity = 1;
@@ -1506,7 +1513,7 @@ int cmd_main(int argc, const char **argv)
                if (strbuf_getline_lf(&buf, stdin) == EOF) {
                        if (ferror(stdin))
                                error(_("remote-curl: error reading command stream from git"));
-                       return 1;
+                       goto cleanup;
                }
                if (buf.len == 0)
                        break;
@@ -1554,12 +1561,15 @@ int cmd_main(int argc, const char **argv)
                                break;
                } else {
                        error(_("remote-curl: unknown command '%s' from git"), buf.buf);
-                       return 1;
+                       goto cleanup;
                }
                strbuf_reset(&buf);
        } while (1);
 
        http_cleanup();
+       ret = 0;
+cleanup:
+       strbuf_release(&buf);
 
-       return 0;
+       return ret;
 }
index a6d8ec6c1ac72f8b3b95978d11c87dd0b4918c01..42a4e7106e1255af5b79d32ff7d86170827582b1 100644 (file)
--- a/remote.c
+++ b/remote.c
@@ -508,9 +508,8 @@ static void read_config(struct repository *repo)
 
        repo->remote_state->current_branch = NULL;
        if (startup_info->have_repository) {
-               int ignore_errno;
                const char *head_ref = refs_resolve_ref_unsafe(
-                       get_main_ref_store(repo), "HEAD", 0, NULL, &flag, &ignore_errno);
+                       get_main_ref_store(repo), "HEAD", 0, NULL, &flag);
                if (head_ref && (flag & REF_ISSYMREF) &&
                    skip_prefix(head_ref, "refs/heads/", &head_ref)) {
                        repo->remote_state->current_branch = make_branch(
@@ -1946,13 +1945,9 @@ const char *branch_get_push(struct branch *branch, struct strbuf *err)
        return branch->push_tracking_ref;
 }
 
-static int ignore_symref_update(const char *refname)
+static int ignore_symref_update(const char *refname, struct strbuf *scratch)
 {
-       int flag;
-
-       if (!resolve_ref_unsafe(refname, 0, NULL, &flag))
-               return 0; /* non-existing refs are OK */
-       return (flag & REF_ISSYMREF);
+       return !refs_read_symbolic_ref(get_main_ref_store(the_repository), refname, scratch);
 }
 
 /*
@@ -1965,6 +1960,7 @@ static int ignore_symref_update(const char *refname)
 static struct ref *get_expanded_map(const struct ref *remote_refs,
                                    const struct refspec_item *refspec)
 {
+       struct strbuf scratch = STRBUF_INIT;
        const struct ref *ref;
        struct ref *ret = NULL;
        struct ref **tail = &ret;
@@ -1972,11 +1968,13 @@ static struct ref *get_expanded_map(const struct ref *remote_refs,
        for (ref = remote_refs; ref; ref = ref->next) {
                char *expn_name = NULL;
 
+               strbuf_reset(&scratch);
+
                if (strchr(ref->name, '^'))
                        continue; /* a dereference item */
                if (match_name_with_pattern(refspec->src, ref->name,
                                            refspec->dst, &expn_name) &&
-                   !ignore_symref_update(expn_name)) {
+                   !ignore_symref_update(expn_name, &scratch)) {
                        struct ref *cpy = copy_ref(ref);
 
                        cpy->peer_ref = alloc_ref(expn_name);
@@ -1988,6 +1986,7 @@ static struct ref *get_expanded_map(const struct ref *remote_refs,
                free(expn_name);
        }
 
+       strbuf_release(&scratch);
        return ret;
 }
 
index 00ca5571a1ab77e8a1b2d505d59e6ff59d629dd9..2dfcb2b6542f2cbe75d4575e8b707cf1676679a3 100644 (file)
@@ -2,6 +2,7 @@
 #include "config.h"
 #include "repository.h"
 #include "midx.h"
+#include "compat/fsmonitor/fsm-listen.h"
 
 static void repo_cfg_bool(struct repository *r, const char *key, int *dest,
                          int def)
@@ -26,7 +27,7 @@ void prepare_repo_settings(struct repository *r)
        /* Defaults */
        r->settings.index_version = -1;
        r->settings.core_untracked_cache = UNTRACKED_CACHE_KEEP;
-       r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_DEFAULT;
+       r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_CONSECUTIVE;
 
        /* Booleans config or default, cascades to other settings */
        repo_cfg_bool(r, "feature.manyfiles", &manyfiles, 0);
@@ -81,10 +82,17 @@ void prepare_repo_settings(struct repository *r)
        }
 
        if (!repo_config_get_string(r, "fetch.negotiationalgorithm", &strval)) {
+               int fetch_default = r->settings.fetch_negotiation_algorithm;
                if (!strcasecmp(strval, "skipping"))
                        r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_SKIPPING;
                else if (!strcasecmp(strval, "noop"))
                        r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_NOOP;
+               else if (!strcasecmp(strval, "consecutive"))
+                       r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_CONSECUTIVE;
+               else if (!strcasecmp(strval, "default"))
+                       r->settings.fetch_negotiation_algorithm = fetch_default;
+               else
+                       die("unknown fetch negotiation algorithm '%s'", strval);
        }
 
        /*
index 34610c5a33e013169de14189274fd4ed42512a96..5d166b692c8aa8ec24bbbde90cab1279ed2bdf53 100644 (file)
@@ -240,6 +240,20 @@ out:
        return ret;
 }
 
+static void repo_clear_path_cache(struct repo_path_cache *cache)
+{
+       FREE_AND_NULL(cache->squash_msg);
+       FREE_AND_NULL(cache->squash_msg);
+       FREE_AND_NULL(cache->merge_msg);
+       FREE_AND_NULL(cache->merge_rr);
+       FREE_AND_NULL(cache->merge_mode);
+       FREE_AND_NULL(cache->merge_head);
+       FREE_AND_NULL(cache->merge_autostash);
+       FREE_AND_NULL(cache->auto_merge);
+       FREE_AND_NULL(cache->fetch_head);
+       FREE_AND_NULL(cache->shallow);
+}
+
 void repo_clear(struct repository *repo)
 {
        FREE_AND_NULL(repo->gitdir);
@@ -280,6 +294,8 @@ void repo_clear(struct repository *repo)
                remote_state_clear(repo->remote_state);
                FREE_AND_NULL(repo->remote_state);
        }
+
+       repo_clear_path_cache(&repo->cached_paths);
 }
 
 int repo_read_index(struct repository *repo)
@@ -301,6 +317,13 @@ int repo_read_index(struct repository *repo)
        if (repo->settings.command_requires_full_index)
                ensure_full_index(repo->index);
 
+       /*
+        * If sparse checkouts are in use, check whether paths with the
+        * SKIP_WORKTREE attribute are missing from the worktree; if not,
+        * clear that attribute for that path.
+        */
+       clear_skip_worktree_from_present_files(repo->index);
+
        return res;
 }
 
index 2b5cf97f31e88934d9b23d96a97cffc60a9606fd..6cc661e5a43b82022ca171a43c015db2f278116e 100644 (file)
@@ -4,6 +4,7 @@
 #include "path.h"
 
 struct config_set;
+struct fsmonitor_settings;
 struct git_hash_algo;
 struct index_state;
 struct lock_file;
@@ -20,7 +21,7 @@ enum untracked_cache_setting {
 };
 
 enum fetch_negotiation_setting {
-       FETCH_NEGOTIATION_DEFAULT,
+       FETCH_NEGOTIATION_CONSECUTIVE,
        FETCH_NEGOTIATION_SKIPPING,
        FETCH_NEGOTIATION_NOOP,
 };
@@ -35,6 +36,8 @@ struct repo_settings {
        int command_requires_full_index;
        int sparse_index;
 
+       struct fsmonitor_settings *fsmonitor; /* lazily loaded */
+
        int index_version;
        enum untracked_cache_setting core_untracked_cache;
 
@@ -44,6 +47,18 @@ struct repo_settings {
        int core_multi_pack_index;
 };
 
+struct repo_path_cache {
+       char *squash_msg;
+       char *merge_msg;
+       char *merge_rr;
+       char *merge_mode;
+       char *merge_head;
+       char *merge_autostash;
+       char *auto_merge;
+       char *fetch_head;
+       char *shallow;
+};
+
 struct repository {
        /* Environment */
        /*
@@ -82,7 +97,7 @@ struct repository {
        /*
         * Contains path to often used file names.
         */
-       struct path_cache cached_paths;
+       struct repo_path_cache cached_paths;
 
        /*
         * Path to the repository's graft file.
index d83d58df4fbc930b756395a8a99a77be4c1e598f..d26627c59329151ef196e26444a64cb44ad699d4 100644 (file)
--- a/rerere.c
+++ b/rerere.c
@@ -609,19 +609,20 @@ static int try_merge(struct index_state *istate,
                     const struct rerere_id *id, const char *path,
                     mmfile_t *cur, mmbuffer_t *result)
 {
-       int ret;
+       enum ll_merge_result ret;
        mmfile_t base = {NULL, 0}, other = {NULL, 0};
 
        if (read_mmfile(&base, rerere_path(id, "preimage")) ||
-           read_mmfile(&other, rerere_path(id, "postimage")))
-               ret = 1;
-       else
+           read_mmfile(&other, rerere_path(id, "postimage"))) {
+               ret = LL_MERGE_CONFLICT;
+       } else {
                /*
                 * A three-way merge. Note that this honors user-customizable
                 * low-level merge driver settings.
                 */
                ret = ll_merge(result, path, &base, NULL, cur, "", &other, "",
                               istate, NULL);
+       }
 
        free(base.ptr);
        free(other.ptr);
diff --git a/reset.c b/reset.c
index f214df3d96ca218a25c780b2dc79ca4ca76999de..e3383a93343e3df16ee9eda6ee7886a49e980a1a 100644 (file)
--- a/reset.c
+++ b/reset.c
 #include "tree-walk.h"
 #include "tree.h"
 #include "unpack-trees.h"
+#include "hook.h"
 
-int reset_head(struct repository *r, struct object_id *oid, const char *action,
-              const char *switch_to_branch, unsigned flags,
-              const char *reflog_orig_head, const char *reflog_head,
-              const char *default_reflog_action)
+static int update_refs(const struct reset_head_opts *opts,
+                      const struct object_id *oid,
+                      const struct object_id *head)
 {
-       unsigned detach_head = flags & RESET_HEAD_DETACH;
-       unsigned reset_hard = flags & RESET_HEAD_HARD;
-       unsigned run_hook = flags & RESET_HEAD_RUN_POST_CHECKOUT_HOOK;
-       unsigned refs_only = flags & RESET_HEAD_REFS_ONLY;
-       unsigned update_orig_head = flags & RESET_ORIG_HEAD;
-       struct object_id head_oid;
+       unsigned detach_head = opts->flags & RESET_HEAD_DETACH;
+       unsigned run_hook = opts->flags & RESET_HEAD_RUN_POST_CHECKOUT_HOOK;
+       unsigned update_orig_head = opts->flags & RESET_ORIG_HEAD;
+       const struct object_id *orig_head = opts->orig_head;
+       const char *switch_to_branch = opts->branch;
+       const char *reflog_branch = opts->branch_msg;
+       const char *reflog_head = opts->head_msg;
+       const char *reflog_orig_head = opts->orig_head_msg;
+       const char *default_reflog_action = opts->default_reflog_action;
+       struct object_id *old_orig = NULL, oid_old_orig;
+       struct strbuf msg = STRBUF_INIT;
+       const char *reflog_action;
+       size_t prefix_len;
+       int ret;
+
+       if ((update_orig_head && !reflog_orig_head) || !reflog_head) {
+               if (!default_reflog_action)
+                       BUG("default_reflog_action must be given when reflog messages are omitted");
+               reflog_action = getenv(GIT_REFLOG_ACTION_ENVIRONMENT);
+               strbuf_addf(&msg, "%s: ", reflog_action ? reflog_action :
+                                                         default_reflog_action);
+       }
+       prefix_len = msg.len;
+
+       if (update_orig_head) {
+               if (!get_oid("ORIG_HEAD", &oid_old_orig))
+                       old_orig = &oid_old_orig;
+               if (head) {
+                       if (!reflog_orig_head) {
+                               strbuf_addstr(&msg, "updating ORIG_HEAD");
+                               reflog_orig_head = msg.buf;
+                       }
+                       update_ref(reflog_orig_head, "ORIG_HEAD",
+                                  orig_head ? orig_head : head,
+                                  old_orig, 0, UPDATE_REFS_MSG_ON_ERR);
+               } else if (old_orig)
+                       delete_ref(NULL, "ORIG_HEAD", old_orig, 0);
+       }
+
+       if (!reflog_head) {
+               strbuf_setlen(&msg, prefix_len);
+               strbuf_addstr(&msg, "updating HEAD");
+               reflog_head = msg.buf;
+       }
+       if (!switch_to_branch)
+               ret = update_ref(reflog_head, "HEAD", oid, head,
+                                detach_head ? REF_NO_DEREF : 0,
+                                UPDATE_REFS_MSG_ON_ERR);
+       else {
+               ret = update_ref(reflog_branch ? reflog_branch : reflog_head,
+                                switch_to_branch, oid, NULL, 0,
+                                UPDATE_REFS_MSG_ON_ERR);
+               if (!ret)
+                       ret = create_symref("HEAD", switch_to_branch,
+                                           reflog_head);
+       }
+       if (!ret && run_hook)
+               run_hooks_l("post-checkout",
+                           oid_to_hex(head ? head : null_oid()),
+                           oid_to_hex(oid), "1", NULL);
+       strbuf_release(&msg);
+       return ret;
+}
+
+int reset_head(struct repository *r, const struct reset_head_opts *opts)
+{
+       const struct object_id *oid = opts->oid;
+       const char *switch_to_branch = opts->branch;
+       unsigned reset_hard = opts->flags & RESET_HEAD_HARD;
+       unsigned refs_only = opts->flags & RESET_HEAD_REFS_ONLY;
+       unsigned update_orig_head = opts->flags & RESET_ORIG_HEAD;
+       struct object_id *head = NULL, head_oid;
        struct tree_desc desc[2] = { { NULL }, { NULL } };
        struct lock_file lock = LOCK_INIT;
        struct unpack_trees_options unpack_tree_opts = { 0 };
        struct tree *tree;
-       const char *reflog_action;
-       struct strbuf msg = STRBUF_INIT;
-       size_t prefix_len;
-       struct object_id *orig = NULL, oid_orig,
-               *old_orig = NULL, oid_old_orig;
+       const char *action;
        int ret = 0, nr = 0;
 
        if (switch_to_branch && !starts_with(switch_to_branch, "refs/"))
                BUG("Not a fully qualified branch: '%s'", switch_to_branch);
 
+       if (opts->orig_head_msg && !update_orig_head)
+               BUG("ORIG_HEAD reflog message given without updating ORIG_HEAD");
+
+       if (opts->branch_msg && !opts->branch)
+               BUG("branch reflog message given without a branch");
+
        if (!refs_only && repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0) {
                ret = -1;
                goto leave_reset_head;
        }
 
-       if ((!oid || !reset_hard) && get_oid("HEAD", &head_oid)) {
+       if (!get_oid("HEAD", &head_oid)) {
+               head = &head_oid;
+       } else if (!oid || !reset_hard) {
                ret = error(_("could not determine HEAD revision"));
                goto leave_reset_head;
        }
@@ -47,8 +117,9 @@ int reset_head(struct repository *r, struct object_id *oid, const char *action,
                oid = &head_oid;
 
        if (refs_only)
-               goto reset_head_refs;
+               return update_refs(opts, oid, head);
 
+       action = reset_hard ? "reset" : "checkout";
        setup_unpack_trees_porcelain(&unpack_tree_opts, action);
        unpack_tree_opts.head_idx = 1;
        unpack_tree_opts.src_index = r->index;
@@ -58,7 +129,7 @@ int reset_head(struct repository *r, struct object_id *oid, const char *action,
        unpack_tree_opts.merge = 1;
        unpack_tree_opts.preserve_ignored = 0; /* FIXME: !overwrite_ignore */
        init_checkout_metadata(&unpack_tree_opts.meta, switch_to_branch, oid, NULL);
-       if (!detach_head)
+       if (reset_hard)
                unpack_tree_opts.reset = UNPACK_RESET_PROTECT_UNTRACKED;
 
        if (repo_read_index_unmerged(r) < 0) {
@@ -90,49 +161,10 @@ int reset_head(struct repository *r, struct object_id *oid, const char *action,
                goto leave_reset_head;
        }
 
-reset_head_refs:
-       reflog_action = getenv(GIT_REFLOG_ACTION_ENVIRONMENT);
-       strbuf_addf(&msg, "%s: ", reflog_action ? reflog_action : default_reflog_action);
-       prefix_len = msg.len;
-
-       if (update_orig_head) {
-               if (!get_oid("ORIG_HEAD", &oid_old_orig))
-                       old_orig = &oid_old_orig;
-               if (!get_oid("HEAD", &oid_orig)) {
-                       orig = &oid_orig;
-                       if (!reflog_orig_head) {
-                               strbuf_addstr(&msg, "updating ORIG_HEAD");
-                               reflog_orig_head = msg.buf;
-                       }
-                       update_ref(reflog_orig_head, "ORIG_HEAD", orig,
-                                  old_orig, 0, UPDATE_REFS_MSG_ON_ERR);
-               } else if (old_orig)
-                       delete_ref(NULL, "ORIG_HEAD", old_orig, 0);
-       }
-
-       if (!reflog_head) {
-               strbuf_setlen(&msg, prefix_len);
-               strbuf_addstr(&msg, "updating HEAD");
-               reflog_head = msg.buf;
-       }
-       if (!switch_to_branch)
-               ret = update_ref(reflog_head, "HEAD", oid, orig,
-                                detach_head ? REF_NO_DEREF : 0,
-                                UPDATE_REFS_MSG_ON_ERR);
-       else {
-               ret = update_ref(reflog_head, switch_to_branch, oid,
-                                NULL, 0, UPDATE_REFS_MSG_ON_ERR);
-               if (!ret)
-                       ret = create_symref("HEAD", switch_to_branch,
-                                           reflog_head);
-       }
-       if (run_hook)
-               run_hook_le(NULL, "post-checkout",
-                           oid_to_hex(orig ? orig : null_oid()),
-                           oid_to_hex(oid), "1", NULL);
+       if (oid != &head_oid || update_orig_head || switch_to_branch)
+               ret = update_refs(opts, oid, head);
 
 leave_reset_head:
-       strbuf_release(&msg);
        rollback_lock_file(&lock);
        clear_unpack_trees_porcelain(&unpack_tree_opts);
        while (nr)
diff --git a/reset.h b/reset.h
index 12f83c78e28094182530046d5891545bcb1b5e90..a28f81829d859dc3dfd3817d6449ab7eb195b0d3 100644 (file)
--- a/reset.h
+++ b/reset.h
@@ -6,15 +6,55 @@
 
 #define GIT_REFLOG_ACTION_ENVIRONMENT "GIT_REFLOG_ACTION"
 
+/* Request a detached checkout */
 #define RESET_HEAD_DETACH (1<<0)
+/* Request a reset rather than a checkout */
 #define RESET_HEAD_HARD (1<<1)
+/* Run the post-checkout hook */
 #define RESET_HEAD_RUN_POST_CHECKOUT_HOOK (1<<2)
+/* Only update refs, do not touch the worktree */
 #define RESET_HEAD_REFS_ONLY (1<<3)
+/* Update ORIG_HEAD as well as HEAD */
 #define RESET_ORIG_HEAD (1<<4)
 
-int reset_head(struct repository *r, struct object_id *oid, const char *action,
-              const char *switch_to_branch, unsigned flags,
-              const char *reflog_orig_head, const char *reflog_head,
-              const char *default_reflog_action);
+struct reset_head_opts {
+       /*
+        * The commit to checkout/reset to. Defaults to HEAD.
+        */
+       const struct object_id *oid;
+       /*
+        * Optional value to set ORIG_HEAD. Defaults to HEAD.
+        */
+       const struct object_id *orig_head;
+       /*
+        * Optional branch to switch to.
+        */
+       const char *branch;
+       /*
+        * Flags defined above.
+        */
+       unsigned flags;
+       /*
+        * Optional reflog message for branch, defaults to head_msg.
+        */
+       const char *branch_msg;
+       /*
+        * Optional reflog message for HEAD, if this omitted but oid or branch
+        * are given then default_reflog_action must be given.
+        */
+       const char *head_msg;
+       /*
+        * Optional reflog message for ORIG_HEAD, if this omitted and flags
+        * contains RESET_ORIG_HEAD then default_reflog_action must be given.
+        */
+       const char *orig_head_msg;
+       /*
+        * Action to use in default reflog messages, only required if a ref is
+        * being updated and the reflog messages above are omitted.
+        */
+       const char *default_reflog_action;
+};
+
+int reset_head(struct repository *r, const struct reset_head_opts *opts);
 
 #endif
index ad4286fbdde521c3eebc048577bc61a341c9e6ee..7d435f80480ef1b7684fdc43b51057d20e79966f 100644 (file)
@@ -32,6 +32,7 @@
 #include "utf8.h"
 #include "bloom.h"
 #include "json-writer.h"
+#include "list-objects-filter-options.h"
 
 volatile show_early_output_fn_t show_early_output;
 
@@ -273,7 +274,7 @@ static void commit_stack_clear(struct commit_stack *stack)
        stack->nr = stack->alloc = 0;
 }
 
-static void mark_one_parent_uninteresting(struct commit *commit,
+static void mark_one_parent_uninteresting(struct rev_info *revs, struct commit *commit,
                                          struct commit_stack *pending)
 {
        struct commit_list *l;
@@ -290,20 +291,26 @@ static void mark_one_parent_uninteresting(struct commit *commit,
         * wasn't uninteresting), in which case we need
         * to mark its parents recursively too..
         */
-       for (l = commit->parents; l; l = l->next)
+       for (l = commit->parents; l; l = l->next) {
                commit_stack_push(pending, l->item);
+               if (revs && revs->exclude_first_parent_only)
+                       break;
+       }
 }
 
-void mark_parents_uninteresting(struct commit *commit)
+void mark_parents_uninteresting(struct rev_info *revs, struct commit *commit)
 {
        struct commit_stack pending = COMMIT_STACK_INIT;
        struct commit_list *l;
 
-       for (l = commit->parents; l; l = l->next)
-               mark_one_parent_uninteresting(l->item, &pending);
+       for (l = commit->parents; l; l = l->next) {
+               mark_one_parent_uninteresting(revs, l->item, &pending);
+               if (revs && revs->exclude_first_parent_only)
+                       break;
+       }
 
        while (pending.nr > 0)
-               mark_one_parent_uninteresting(commit_stack_pop(&pending),
+               mark_one_parent_uninteresting(revs, commit_stack_pop(&pending),
                                              &pending);
 
        commit_stack_clear(&pending);
@@ -441,7 +448,7 @@ static struct commit *handle_commit(struct rev_info *revs,
                if (repo_parse_commit(revs->repo, commit) < 0)
                        die("unable to parse commit %s", name);
                if (flags & UNINTERESTING) {
-                       mark_parents_uninteresting(commit);
+                       mark_parents_uninteresting(revs, commit);
 
                        if (!revs->topo_order || !generation_numbers_enabled(the_repository))
                                revs->limited = 1;
@@ -1124,7 +1131,7 @@ static int process_parents(struct rev_info *revs, struct commit *commit,
                        if (repo_parse_commit_gently(revs->repo, p, 1) < 0)
                                continue;
                        if (p->parents)
-                               mark_parents_uninteresting(p);
+                               mark_parents_uninteresting(revs, p);
                        if (p->object.flags & SEEN)
                                continue;
                        p->object.flags |= (SEEN | NOT_USER_GIVEN);
@@ -1132,6 +1139,8 @@ static int process_parents(struct rev_info *revs, struct commit *commit,
                                commit_list_insert_by_date(p, list);
                        if (queue)
                                prio_queue_put(queue, p);
+                       if (revs->exclude_first_parent_only)
+                               break;
                }
                return 0;
        }
@@ -1422,7 +1431,7 @@ static int limit_list(struct rev_info *revs)
                if (process_parents(revs, commit, &original_list, NULL) < 0)
                        return -1;
                if (obj->flags & UNINTERESTING) {
-                       mark_parents_uninteresting(commit);
+                       mark_parents_uninteresting(revs, commit);
                        slop = still_interesting(original_list, date, slop, &interesting_cache);
                        if (slop)
                                continue;
@@ -1838,7 +1847,7 @@ void repo_init_revisions(struct repository *r,
        revs->commit_format = CMIT_FMT_DEFAULT;
        revs->expand_tabs_in_log_default = 8;
 
-       grep_init(&revs->grep_filter, revs->repo, prefix);
+       grep_init(&revs->grep_filter, revs->repo);
        revs->grep_filter.status_only = 1;
 
        repo_diff_setup(revs->repo, &revs->diffopt);
@@ -2223,6 +2232,8 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
                return argcount;
        } else if (!strcmp(arg, "--first-parent")) {
                revs->first_parent_only = 1;
+       } else if (!strcmp(arg, "--exclude-first-parent-only")) {
+               revs->exclude_first_parent_only = 1;
        } else if (!strcmp(arg, "--ancestry-path")) {
                revs->ancestry_path = 1;
                revs->simplify_history = 0;
@@ -2424,9 +2435,11 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
                revs->pretty_given = 1;
                revs->abbrev_commit = 1;
        } else if (!strcmp(arg, "--graph")) {
-               revs->topo_order = 1;
-               revs->rewrite_parents = 1;
+               graph_clear(revs->graph);
                revs->graph = graph_init(revs);
+       } else if (!strcmp(arg, "--no-graph")) {
+               graph_clear(revs->graph);
+               revs->graph = NULL;
        } else if (!strcmp(arg, "--encode-email-headers")) {
                revs->encode_email_headers = 1;
        } else if (!strcmp(arg, "--no-encode-email-headers")) {
@@ -2523,8 +2536,6 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
                        unkv[(*unkc)++] = arg;
                return opts;
        }
-       if (revs->graph && revs->track_linear)
-               die(_("options '%s' and '%s' cannot be used together"), "--show-linear-break", "--graph");
 
        return 1;
 }
@@ -2543,6 +2554,17 @@ void parse_revision_opt(struct rev_info *revs, struct parse_opt_ctx_t *ctx,
        ctx->argc -= n;
 }
 
+void revision_opts_finish(struct rev_info *revs)
+{
+       if (revs->graph && revs->track_linear)
+               die(_("options '%s' and '%s' cannot be used together"), "--show-linear-break", "--graph");
+
+       if (revs->graph) {
+               revs->topo_order = 1;
+               revs->rewrite_parents = 1;
+       }
+}
+
 static int for_each_bisect_ref(struct ref_store *refs, each_ref_fn fn,
                               void *cb_data, const char *term)
 {
@@ -2669,6 +2691,10 @@ static int handle_revision_pseudo_opt(struct rev_info *revs,
                revs->no_walk = 0;
        } else if (!strcmp(arg, "--single-worktree")) {
                revs->single_worktree = 1;
+       } else if (skip_prefix(arg, ("--filter="), &arg)) {
+               parse_list_objects_filter(&revs->filter, arg);
+       } else if (!strcmp(arg, ("--no-filter"))) {
+               list_objects_filter_set_no_filter(&revs->filter);
        } else {
                return 0;
        }
@@ -2785,6 +2811,7 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s
                        break;
                }
        }
+       revision_opts_finish(revs);
 
        if (prune_data.nr) {
                /*
@@ -2860,8 +2887,6 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s
 
        diff_setup_done(&revs->diffopt);
 
-       grep_commit_pattern_type(GREP_PATTERN_TYPE_UNSPECIFIED,
-                                &revs->grep_filter);
        if (!is_encoding_utf8(get_log_output_encoding()))
                revs->grep_filter.ignore_locale = 1;
        compile_grep_patterns(&revs->grep_filter);
@@ -2872,6 +2897,8 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s
                die("cannot combine --walk-reflogs with history-limiting options");
        if (revs->rewrite_parents && revs->children.name)
                die(_("options '%s' and '%s' cannot be used together"), "--parents", "--children");
+       if (revs->filter.choice && !revs->blob_objects)
+               die(_("object filtering requires --objects"));
 
        /*
         * Limitations on the graph functionality
@@ -3345,7 +3372,7 @@ static void explore_walk_step(struct rev_info *revs)
                return;
 
        if (c->object.flags & UNINTERESTING)
-               mark_parents_uninteresting(c);
+               mark_parents_uninteresting(revs, c);
 
        for (p = c->parents; p; p = p->next)
                test_flag_and_insert(&info->explore_queue, p->item, TOPO_WALK_EXPLORED);
index 3f66147bfd390abdd98de4f366014bdce88179c2..5bc59c7bfe1e35efe7fb24e93f9a093baa28b658 100644 (file)
@@ -8,6 +8,7 @@
 #include "pretty.h"
 #include "diff.h"
 #include "commit-slab-decl.h"
+#include "list-objects-filter-options.h"
 
 /**
  * The revision walking API offers functions to build a list of revisions
@@ -94,6 +95,12 @@ struct rev_info {
        /* The end-points specified by the end user */
        struct rev_cmdline_info cmdline;
 
+       /*
+        * Object filter options. No filtering is specified
+        * if and only if filter.choice is zero.
+        */
+       struct list_objects_filter_options filter;
+
        /* excluding from --branches, --refs, etc. expansion */
        struct string_list *ref_excludes;
 
@@ -158,6 +165,7 @@ struct rev_info {
                        bisect:1,
                        ancestry_path:1,
                        first_parent_only:1,
+                       exclude_first_parent_only:1,
                        line_level_traverse:1,
                        tree_blobs_in_commit_order:1,
 
@@ -195,7 +203,8 @@ struct rev_info {
                        combine_merges:1,
                        combined_all_paths:1,
                        dense_combined_merges:1,
-                       first_parent_merges:1;
+                       first_parent_merges:1,
+                       remerge_diff:1;
 
        /* Format info */
        int             show_notes;
@@ -315,6 +324,9 @@ struct rev_info {
 
        /* misc. flags related to '--no-kept-objects' */
        unsigned keep_pack_cache_flags;
+
+       /* Location where temporary objects for remerge-diff are written. */
+       struct tmp_objdir *remerge_objdir;
 };
 
 int ref_excluded(struct string_list *, const char *path);
@@ -372,6 +384,7 @@ void parse_revision_opt(struct rev_info *revs, struct parse_opt_ctx_t *ctx,
 #define REVARG_COMMITTISH 02
 int handle_revision_arg(const char *arg, struct rev_info *revs,
                        int flags, unsigned revarg_opt);
+void revision_opts_finish(struct rev_info *revs);
 
 /**
  * Reset the flags used by the revision walking api. You can use this to do
@@ -398,7 +411,7 @@ const char *get_revision_mark(const struct rev_info *revs,
 void put_revision_mark(const struct rev_info *revs,
                       const struct commit *commit);
 
-void mark_parents_uninteresting(struct commit *commit);
+void mark_parents_uninteresting(struct rev_info *revs, struct commit *commit);
 void mark_tree_uninteresting(struct repository *r, struct tree *tree);
 void mark_trees_uninteresting_sparse(struct repository *r, struct oidset *trees);
 
index 69dde42f1e7f5e5886f2ea2d9caba02dd9ab8eff..a8501e38cebe50f6a1fefb6d31d92ce049b96ac3 100644 (file)
@@ -1307,39 +1307,6 @@ int async_with_fork(void)
 #endif
 }
 
-int run_hook_ve(const char *const *env, const char *name, va_list args)
-{
-       struct child_process hook = CHILD_PROCESS_INIT;
-       const char *p;
-
-       p = find_hook(name);
-       if (!p)
-               return 0;
-
-       strvec_push(&hook.args, p);
-       while ((p = va_arg(args, const char *)))
-               strvec_push(&hook.args, p);
-       if (env)
-               strvec_pushv(&hook.env_array, (const char **)env);
-       hook.no_stdin = 1;
-       hook.stdout_to_stderr = 1;
-       hook.trace2_hook_name = name;
-
-       return run_command(&hook);
-}
-
-int run_hook_le(const char *const *env, const char *name, ...)
-{
-       va_list args;
-       int ret;
-
-       va_start(args, name);
-       ret = run_hook_ve(env, name, args);
-       va_end(args);
-
-       return ret;
-}
-
 struct io_pump {
        /* initialized by caller */
        int fd;
index 2be5f5d6422e54b84df300abd41974df3cd169da..07bed6c31b4e9f065b9ae0a4490cfd56adada0c7 100644 (file)
@@ -220,23 +220,6 @@ int finish_command_in_signal(struct child_process *);
  */
 int run_command(struct child_process *);
 
-/**
- * Run a hook.
- * The first argument is a pathname to an index file, or NULL
- * if the hook uses the default index file or no index is needed.
- * The second argument is the name of the hook.
- * The further arguments correspond to the hook arguments.
- * The last argument has to be NULL to terminate the arguments list.
- * If the hook does not exist or is not executable, the return
- * value will be zero.
- * If it is executable, the hook will be executed and the exit
- * status of the hook is returned.
- * On execution, .stdout_to_stderr and .no_stdin will be set.
- */
-LAST_ARG_MUST_BE_NULL
-int run_hook_le(const char *const *env, const char *name, ...);
-int run_hook_ve(const char *const *env, const char *name, va_list args);
-
 /*
  * Trigger an auto-gc
  */
index 5213d16e97174adbf10fc487edb0f3d3a726f7d7..8c3ed3532acff7d93fec585f7fd9bc3423d0612d 100644 (file)
@@ -1220,7 +1220,7 @@ static int run_prepare_commit_msg_hook(struct repository *r,
        } else {
                arg1 = "message";
        }
-       if (run_commit_hook(0, r->index_file, "prepare-commit-msg", name,
+       if (run_commit_hook(0, r->index_file, NULL, "prepare-commit-msg", name,
                            arg1, arg2, NULL))
                ret = error(_("'prepare-commit-msg' hook failed"));
 
@@ -1281,7 +1281,6 @@ void print_commit_summary(struct repository *r,
        struct strbuf author_ident = STRBUF_INIT;
        struct strbuf committer_ident = STRBUF_INIT;
        struct ref_store *refs;
-       int resolve_errno;
 
        commit = lookup_commit(r, oid);
        if (!commit)
@@ -1328,16 +1327,12 @@ void print_commit_summary(struct repository *r,
        get_commit_format(format.buf, &rev);
        rev.always_show_header = 0;
        rev.diffopt.detect_rename = DIFF_DETECT_RENAME;
-       rev.diffopt.break_opt = 0;
        diff_setup_done(&rev.diffopt);
 
        refs = get_main_ref_store(the_repository);
-       head = refs_resolve_ref_unsafe(refs, "HEAD", 0, NULL, NULL,
-                                      &resolve_errno);
-       if (!head) {
-               errno = resolve_errno;
-               die_errno(_("unable to resolve HEAD after creating commit"));
-       }
+       head = refs_resolve_ref_unsafe(refs, "HEAD", 0, NULL, NULL);
+       if (!head)
+               die(_("unable to resolve HEAD after creating commit"));
        if (!strcmp(head, "HEAD"))
                head = _("detached HEAD");
        else
@@ -1556,7 +1551,7 @@ static int try_to_commit(struct repository *r,
                goto out;
        }
 
-       run_commit_hook(0, r->index_file, "post-commit", NULL);
+       run_commit_hook(0, r->index_file, NULL, "post-commit", NULL);
        if (flags & AMEND_MSG)
                commit_post_rewrite(r, current_head, oid);
 
@@ -2806,7 +2801,7 @@ static int populate_opts_cb(const char *key, const char *value, void *data)
                return error(_("invalid key: %s"), key);
 
        if (!error_flag)
-               return error(_("invalid value for %s: %s"), key, value);
+               return error(_("invalid value for '%s': '%s'"), key, value);
 
        return 0;
 }
@@ -3753,7 +3748,7 @@ static int do_merge(struct repository *r,
        int run_commit_flags = 0;
        struct strbuf ref_name = STRBUF_INIT;
        struct commit *head_commit, *merge_commit, *i;
-       struct commit_list *bases, *j, *reversed = NULL;
+       struct commit_list *bases, *j;
        struct commit_list *to_merge = NULL, **tail = &to_merge;
        const char *strategy = !opts->xopts_nr &&
                (!opts->strategy ||
@@ -3988,9 +3983,7 @@ static int do_merge(struct repository *r,
                      git_path_merge_head(r), 0);
        write_message("no-ff", 5, git_path_merge_mode(r), 0);
 
-       for (j = bases; j; j = j->next)
-               commit_list_insert(j->item, &reversed);
-       free_commit_list(bases);
+       bases = reverse_commit_list(bases);
 
        repo_read_index(r);
        init_merge_options(&o, r);
@@ -4006,10 +3999,10 @@ static int do_merge(struct repository *r,
                 * update the index and working copy immediately.
                 */
                ret = merge_ort_recursive(&o,
-                                         head_commit, merge_commit, reversed,
+                                         head_commit, merge_commit, bases,
                                          &i);
        } else {
-               ret = merge_recursive(&o, head_commit, merge_commit, reversed,
+               ret = merge_recursive(&o, head_commit, merge_commit, bases,
                                      &i);
        }
        if (ret <= 0)
@@ -4089,8 +4082,7 @@ static enum todo_command peek_command(struct todo_list *todo_list, int offset)
        return -1;
 }
 
-void create_autostash(struct repository *r, const char *path,
-                     const char *default_reflog_action)
+void create_autostash(struct repository *r, const char *path)
 {
        struct strbuf buf = STRBUF_INIT;
        struct lock_file lock_file = LOCK_INIT;
@@ -4105,6 +4097,7 @@ void create_autostash(struct repository *r, const char *path,
        if (has_unstaged_changes(r, 1) ||
            has_uncommitted_changes(r, 1)) {
                struct child_process stash = CHILD_PROCESS_INIT;
+               struct reset_head_opts ropts = { .flags = RESET_HEAD_HARD };
                struct object_id oid;
 
                strvec_pushl(&stash.args,
@@ -4126,11 +4119,8 @@ void create_autostash(struct repository *r, const char *path,
                            path);
                write_file(path, "%s", oid_to_hex(&oid));
                printf(_("Created autostash: %s\n"), buf.buf);
-               if (reset_head(r, NULL, "reset --hard",
-                              NULL, RESET_HEAD_HARD, NULL, NULL,
-                              default_reflog_action) < 0)
+               if (reset_head(r, &ropts) < 0)
                        die(_("could not reset --hard"));
-
                if (discard_index(r->index) < 0 ||
                        repo_read_index(r) < 0)
                        die(_("could not read index"));
@@ -4215,47 +4205,26 @@ int apply_autostash_oid(const char *stash_oid)
        return apply_save_autostash_oid(stash_oid, 1);
 }
 
-static int run_git_checkout(struct repository *r, struct replay_opts *opts,
-                           const char *commit, const char *action)
-{
-       struct child_process cmd = CHILD_PROCESS_INIT;
-       int ret;
-
-       cmd.git_cmd = 1;
-
-       if (startup_info->original_cwd) {
-               cmd.dir = startup_info->original_cwd;
-               strvec_pushf(&cmd.env_array, "%s=%s",
-                            GIT_WORK_TREE_ENVIRONMENT, r->worktree);
-       }
-       strvec_push(&cmd.args, "checkout");
-       strvec_push(&cmd.args, commit);
-       strvec_pushf(&cmd.env_array, GIT_REFLOG_ACTION "=%s", action);
-
-       if (opts->verbose)
-               ret = run_command(&cmd);
-       else
-               ret = run_command_silent_on_success(&cmd);
-
-       if (!ret)
-               discard_index(r->index);
-
-       return ret;
-}
-
 static int checkout_onto(struct repository *r, struct replay_opts *opts,
                         const char *onto_name, const struct object_id *onto,
                         const struct object_id *orig_head)
 {
-       const char *action = reflog_message(opts, "start", "checkout %s", onto_name);
-
-       if (run_git_checkout(r, opts, oid_to_hex(onto), action)) {
+       struct reset_head_opts ropts = {
+               .oid = onto,
+               .orig_head = orig_head,
+               .flags = RESET_HEAD_DETACH | RESET_ORIG_HEAD |
+                               RESET_HEAD_RUN_POST_CHECKOUT_HOOK,
+               .head_msg = reflog_message(opts, "start", "checkout %s",
+                                          onto_name),
+               .default_reflog_action = "rebase"
+       };
+       if (reset_head(r, &ropts)) {
                apply_autostash(rebase_path_autostash());
                sequencer_remove_state(opts);
                return error(_("could not detach HEAD"));
        }
 
-       return update_ref(NULL, "ORIG_HEAD", orig_head, NULL, 0, UPDATE_REFS_MSG_ON_ERR);
+       return 0;
 }
 
 static int stopped_at_head(struct repository *r)
index 05a7d2ba6b392c37b106bea6af5f0e1912dffd9e..da64473636b4bcf991925daf90647503097e4c05 100644 (file)
@@ -197,8 +197,7 @@ void commit_post_rewrite(struct repository *r,
                         const struct commit *current_head,
                         const struct object_id *new_head);
 
-void create_autostash(struct repository *r, const char *path,
-                     const char *default_reflog_action);
+void create_autostash(struct repository *r, const char *path);
 int save_autostash(const char *path);
 int apply_autostash(const char *path);
 int apply_autostash_oid(const char *stash_oid);
diff --git a/setup.c b/setup.c
index 8686ffed341cd98af41585f326f9b4ad52b915cd..ca6a5ddb91f824087acadc9ca26d3d0816367fd5 100644 (file)
--- a/setup.c
+++ b/setup.c
@@ -560,7 +560,8 @@ static enum extension_result handle_extension(const char *var,
                        return config_error_nonbool(var);
                format = hash_algo_by_name(value);
                if (format == GIT_HASH_UNKNOWN)
-                       return error("invalid value for 'extensions.objectformat'");
+                       return error(_("invalid value for '%s': '%s'"),
+                                    "extensions.objectformat", value);
                data->hash_algo = format;
                return EXTENSION_OK;
        }
index 9ed18eb8849b27856b8cc409921757f7f069b28b..e158be58b05591820d645a6a44423d2da97097e1 100644 (file)
--- a/shallow.c
+++ b/shallow.c
@@ -90,6 +90,7 @@ static void reset_repository_shallow(struct repository *r)
 {
        r->parsed_objects->is_shallow = -1;
        stat_validity_clear(r->parsed_objects->shallow_stat);
+       reset_commit_grafts(r);
 }
 
 int commit_shallow_file(struct repository *r, struct shallow_lock *lk)
@@ -603,7 +604,7 @@ static int mark_uninteresting(const char *refname, const struct object_id *oid,
        if (!commit)
                return 0;
        commit->object.flags |= UNINTERESTING;
-       mark_parents_uninteresting(commit);
+       mark_parents_uninteresting(NULL, commit);
        return 0;
 }
 
diff --git a/shared.mak b/shared.mak
new file mode 100644 (file)
index 0000000..50d4596
--- /dev/null
@@ -0,0 +1,103 @@
+### Remove GNU make implicit rules
+
+## This speeds things up since we don't need to look for and stat() a
+## "foo.c,v" every time a rule referring to "foo.c" is in play. See
+## "make -p -f/dev/null | grep ^%::'".
+%:: %,v
+%:: RCS/%,v
+%:: RCS/%
+%:: s.%
+%:: SCCS/s.%
+
+## Likewise delete default $(SUFFIXES). See:
+##
+##     info make --index-search=.SUFFIXES
+.SUFFIXES:
+
+### Flags affecting all rules
+
+# A GNU make extension since gmake 3.72 (released in late 1994) to
+# remove the target of rules if commands in those rules fail. The
+# default is to only do that if make itself receives a signal. Affects
+# all targets, see:
+#
+#    info make --index-search=.DELETE_ON_ERROR
+.DELETE_ON_ERROR:
+
+### Global variables
+
+## comma, empty, space: handy variables as these tokens are either
+## special or can be hard to spot among other Makefile syntax.
+comma := ,
+empty :=
+space := $(empty) $(empty)
+
+### Quieting
+## common
+QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
+QUIET_SUBDIR1  =
+
+ifneq ($(findstring w,$(MAKEFLAGS)),w)
+PRINT_DIR = --no-print-directory
+else # "make -w"
+NO_SUBDIR = :
+endif
+
+ifneq ($(findstring s,$(MAKEFLAGS)),s)
+ifndef V
+## common
+       QUIET_SUBDIR0  = +@subdir=
+       QUIET_SUBDIR1  = ;$(NO_SUBDIR) echo '   ' SUBDIR $$subdir; \
+                        $(MAKE) $(PRINT_DIR) -C $$subdir
+
+       QUIET          = @
+       QUIET_GEN      = @echo '   ' GEN $@;
+
+       QUIET_MKDIR_P_PARENT  = @echo '   ' MKDIR -p $(@D);
+
+## Used in "Makefile"
+       QUIET_CC       = @echo '   ' CC $@;
+       QUIET_AR       = @echo '   ' AR $@;
+       QUIET_LINK     = @echo '   ' LINK $@;
+       QUIET_BUILT_IN = @echo '   ' BUILTIN $@;
+       QUIET_LNCP     = @echo '   ' LN/CP $@;
+       QUIET_XGETTEXT = @echo '   ' XGETTEXT $@;
+       QUIET_MSGFMT   = @echo '   ' MSGFMT $@;
+       QUIET_GCOV     = @echo '   ' GCOV $@;
+       QUIET_SP       = @echo '   ' SP $<;
+       QUIET_HDR      = @echo '   ' HDR $(<:hcc=h);
+       QUIET_RC       = @echo '   ' RC $@;
+       QUIET_SPATCH   = @echo '   ' SPATCH $<;
+
+## Used in "Documentation/Makefile"
+       QUIET_ASCIIDOC  = @echo '   ' ASCIIDOC $@;
+       QUIET_XMLTO     = @echo '   ' XMLTO $@;
+       QUIET_DB2TEXI   = @echo '   ' DB2TEXI $@;
+       QUIET_MAKEINFO  = @echo '   ' MAKEINFO $@;
+       QUIET_DBLATEX   = @echo '   ' DBLATEX $@;
+       QUIET_XSLTPROC  = @echo '   ' XSLTPROC $@;
+       QUIET_GEN       = @echo '   ' GEN $@;
+       QUIET_STDERR    = 2> /dev/null
+
+       QUIET_LINT_GITLINK      = @echo '   ' LINT GITLINK $<;
+       QUIET_LINT_MANSEC       = @echo '   ' LINT MAN SEC $<;
+       QUIET_LINT_MANEND       = @echo '   ' LINT MAN END $<;
+
+       export V
+endif
+endif
+
+### Templates
+
+## mkdir_p_parent: lazily "mkdir -p" the path needed for a $@
+## file. Uses $(wildcard) to avoid the "mkdir -p" if it's not
+## needed.
+##
+## Is racy, but in a good way; we might redundantly (and safely)
+## "mkdir -p" when running in parallel, but won't need to exhaustively create
+## individual rules for "a" -> "prefix" -> "dir" -> "file" if given a
+## "a/prefix/dir/file". This can instead be inserted at the start of
+## the "a/prefix/dir/file" rule.
+define mkdir_p_parent_template
+$(if $(wildcard $(@D)),,$(QUIET_MKDIR_P_PARENT)$(shell mkdir -p $(@D)))
+endef
index a1d505d50e98cfcc7bbe8482d74769c10e56aa04..8636af72de59f38ff9de871c34bd44f8aab75286 100644 (file)
@@ -99,13 +99,9 @@ static int convert_to_sparse_rec(struct index_state *istate,
 
 int set_sparse_index_config(struct repository *repo, int enable)
 {
-       int res;
-       char *config_path = repo_git_path(repo, "config.worktree");
-       res = git_config_set_in_file_gently(config_path,
-                                           "index.sparse",
-                                           enable ? "true" : NULL);
-       free(config_path);
-
+       int res = repo_config_set_worktree_gently(repo,
+                                                 "index.sparse",
+                                                 enable ? "true" : "false");
        prepare_repo_settings(repo);
        repo->settings.sparse_index = enable;
        return res;
@@ -136,7 +132,7 @@ static int is_sparse_index_allowed(struct index_state *istate, int flags)
                /*
                 * The sparse index is not (yet) integrated with a split index.
                 */
-               if (istate->split_index)
+               if (istate->split_index || git_env_bool("GIT_TEST_SPLIT_INDEX", 0))
                        return 0;
                /*
                 * The GIT_TEST_SPARSE_INDEX environment variable triggers the
@@ -341,6 +337,80 @@ void ensure_correct_sparsity(struct index_state *istate)
                ensure_full_index(istate);
 }
 
+static int path_found(const char *path, const char **dirname, size_t *dir_len,
+                     int *dir_found)
+{
+       struct stat st;
+       char *newdir;
+       char *tmp;
+
+       /*
+        * If dirname corresponds to a directory that doesn't exist, and this
+        * path starts with dirname, then path can't exist.
+        */
+       if (!*dir_found && !memcmp(path, *dirname, *dir_len))
+               return 0;
+
+       /*
+        * If path itself exists, return 1.
+        */
+       if (!lstat(path, &st))
+               return 1;
+
+       /*
+        * Otherwise, path does not exist so we'll return 0...but we'll first
+        * determine some info about its parent directory so we can avoid
+        * lstat calls for future cache entries.
+        */
+       newdir = strrchr(path, '/');
+       if (!newdir)
+               return 0; /* Didn't find a parent dir; just return 0 now. */
+
+       /*
+        * If path starts with directory (which we already lstat'ed and found),
+        * then no need to lstat parent directory again.
+        */
+       if (*dir_found && *dirname && memcmp(path, *dirname, *dir_len))
+               return 0;
+
+       /* Free previous dirname, and cache path's dirname */
+       *dirname = path;
+       *dir_len = newdir - path + 1;
+
+       tmp = xstrndup(path, *dir_len);
+       *dir_found = !lstat(tmp, &st);
+       free(tmp);
+
+       return 0;
+}
+
+void clear_skip_worktree_from_present_files(struct index_state *istate)
+{
+       const char *last_dirname = NULL;
+       size_t dir_len = 0;
+       int dir_found = 1;
+
+       int i;
+
+       if (!core_apply_sparse_checkout ||
+           sparse_expect_files_outside_of_patterns)
+               return;
+
+restart:
+       for (i = 0; i < istate->cache_nr; i++) {
+               struct cache_entry *ce = istate->cache[i];
+
+               if (ce_skip_worktree(ce) &&
+                   path_found(ce->name, &last_dirname, &dir_len, &dir_found)) {
+                       if (S_ISSPARSEDIR(ce->ce_mode)) {
+                               ensure_full_index(istate);
+                               goto restart;
+                       }
+                       ce->ce_flags &= ~CE_SKIP_WORKTREE;
+               }
+       }
+}
+
 /*
  * This static global helps avoid infinite recursion between
  * expand_to_path() and index_file_exists().
index 656bd835b25e06c45ea382b174812e501be6e2be..633d4fb7e318afcd69257e5d85850138da9d7348 100644 (file)
@@ -5,6 +5,7 @@ struct index_state;
 #define SPARSE_INDEX_MEMORY_ONLY (1 << 0)
 int convert_to_sparse(struct index_state *istate, int flags);
 void ensure_correct_sparsity(struct index_state *istate);
+void clear_skip_worktree_from_present_files(struct index_state *istate);
 
 /*
  * Some places in the codebase expect to search for a specific path.
index 8e52e891c3bc34d35eab1124302d6f0294d9cedb..9d0ccc30d00e35965f47d55253166f3d8ce142e2 100644 (file)
@@ -5,6 +5,9 @@
 struct split_index *init_split_index(struct index_state *istate)
 {
        if (!istate->split_index) {
+               if (istate->sparse_index)
+                       die(_("cannot use split index with a sparse index"));
+
                CALLOC_ARRAY(istate->split_index, 1);
                istate->split_index->refcount = 1;
        }
index 6cbaf39f7b6ccbb265d77dd17d8c3146d629ca90..7ff12467cdbed54326e2209a39fda4ae68b02f36 100644 (file)
@@ -48,15 +48,9 @@ void git_stable_qsort(void *b, size_t n, size_t s,
                      int (*cmp)(const void *, const void *))
 {
        const size_t size = st_mult(n, s);
-       char buf[1024];
-
-       if (size < sizeof(buf)) {
-               /* The temporary array fits on the small on-stack buffer. */
-               msort_with_tmp(b, n, s, cmp, buf);
-       } else {
-               /* It's somewhat large, so malloc it.  */
-               char *tmp = xmalloc(size);
-               msort_with_tmp(b, n, s, cmp, tmp);
-               free(tmp);
-       }
+       char *tmp;
+
+       tmp = xmalloc(size);
+       msort_with_tmp(b, n, s, cmp, tmp);
+       free(tmp);
 }
index 613fee8c82e0f1682e99b5facee338c5e14cd28a..dd9eb85527ab5a2f5007907b2cb3ce76ed5ccc3f 100644 (file)
--- a/strbuf.c
+++ b/strbuf.c
@@ -2,6 +2,7 @@
 #include "refs.h"
 #include "string-list.h"
 #include "utf8.h"
+#include "date.h"
 
 int starts_with(const char *str, const char *prefix)
 {
@@ -874,9 +875,9 @@ static void strbuf_humanise(struct strbuf *buf, off_t bytes,
                strbuf_addf(buf,
                                humanise_rate == 0 ?
                                        /* TRANSLATORS: IEC 80000-13:2008 byte */
-                                       Q_("%u byte", "%u bytes", (unsigned)bytes) :
+                                       Q_("%u byte", "%u bytes", bytes) :
                                        /* TRANSLATORS: IEC 80000-13:2008 byte/second */
-                                       Q_("%u byte/s", "%u bytes/s", (unsigned)bytes),
+                                       Q_("%u byte/s", "%u bytes/s", bytes),
                                (unsigned)bytes);
        }
 }
index 267d6e5769d9bcea057d68bb46e685d59339d05d..d5a744e1438600080b9970e3f7cdedbe7f2a3708 100644 (file)
@@ -86,7 +86,8 @@ typedef int (*compare_strings_fn)(const char *, const char *);
  */
 struct string_list {
        struct string_list_item *items;
-       unsigned int nr, alloc;
+       size_t nr;
+       size_t alloc;
        unsigned int strdup_strings:1;
        compare_strings_fn cmp; /* NULL uses strcmp() */
 };
index f95344028b5208cc9808382b9c69975d8a692682..29668b0620dd91458b27d61d9a8498f752aa3a1c 100644 (file)
@@ -7,6 +7,7 @@
 #include "strbuf.h"
 #include "object-store.h"
 #include "parse-options.h"
+#include "tree-walk.h"
 
 /*
  * submodule cache lookup structure
@@ -496,7 +497,7 @@ static int parse_config(const char *var, const char *value, void *data)
                else if (parse_submodule_update_strategy(value,
                         &submodule->update_strategy) < 0 ||
                         submodule->update_strategy.type == SM_UPDATE_COMMAND)
-                       die(_("invalid value for %s"), var);
+                       die(_("invalid value for '%s'"), var);
        } else if (!strcmp(item.buf, "shallow")) {
                if (!me->overwrite && submodule->recommend_shallow != -1)
                        warn_multiple_config(me->treeish_name, submodule->name,
@@ -726,6 +727,66 @@ const struct submodule *submodule_from_path(struct repository *r,
        return config_from(r->submodule_cache, treeish_name, path, lookup_path);
 }
 
+/**
+ * Used internally by submodules_of_tree(). Recurses into 'treeish_name'
+ * and appends submodule entries to 'out'. The submodule_cache expects
+ * a root-level treeish_name and paths, so keep track of these values
+ * with 'root_tree' and 'prefix'.
+ */
+static void traverse_tree_submodules(struct repository *r,
+                                    const struct object_id *root_tree,
+                                    char *prefix,
+                                    const struct object_id *treeish_name,
+                                    struct submodule_entry_list *out)
+{
+       struct tree_desc tree;
+       struct submodule_tree_entry *st_entry;
+       struct name_entry *name_entry;
+       char *tree_path = NULL;
+
+       name_entry = xmalloc(sizeof(*name_entry));
+
+       fill_tree_descriptor(r, &tree, treeish_name);
+       while (tree_entry(&tree, name_entry)) {
+               if (prefix)
+                       tree_path =
+                               mkpathdup("%s/%s", prefix, name_entry->path);
+               else
+                       tree_path = xstrdup(name_entry->path);
+
+               if (S_ISGITLINK(name_entry->mode) &&
+                   is_tree_submodule_active(r, root_tree, tree_path)) {
+                       st_entry = xmalloc(sizeof(*st_entry));
+                       st_entry->name_entry = xmalloc(sizeof(*st_entry->name_entry));
+                       *st_entry->name_entry = *name_entry;
+                       st_entry->submodule =
+                               submodule_from_path(r, root_tree, tree_path);
+                       st_entry->repo = xmalloc(sizeof(*st_entry->repo));
+                       if (repo_submodule_init(st_entry->repo, r, tree_path,
+                                               root_tree))
+                               FREE_AND_NULL(st_entry->repo);
+
+                       ALLOC_GROW(out->entries, out->entry_nr + 1,
+                                  out->entry_alloc);
+                       out->entries[out->entry_nr++] = *st_entry;
+               } else if (S_ISDIR(name_entry->mode))
+                       traverse_tree_submodules(r, root_tree, tree_path,
+                                                &name_entry->oid, out);
+               free(tree_path);
+       }
+}
+
+void submodules_of_tree(struct repository *r,
+                       const struct object_id *treeish_name,
+                       struct submodule_entry_list *out)
+{
+       CALLOC_ARRAY(out->entries, 0);
+       out->entry_nr = 0;
+       out->entry_alloc = 0;
+
+       traverse_tree_submodules(r, treeish_name, NULL, treeish_name, out);
+}
+
 void submodule_free(struct repository *r)
 {
        if (r->submodule_cache)
index 65875b94ea503c4f13fa907ec58f8ae648a7d199..fa229a8b97a12ab4bd354db6ed0de5eddd098af5 100644 (file)
@@ -6,6 +6,7 @@
 #include "hashmap.h"
 #include "submodule.h"
 #include "strbuf.h"
+#include "tree-walk.h"
 
 /**
  * The submodule config cache API allows to read submodule
@@ -101,4 +102,37 @@ int check_submodule_name(const char *name);
 void fetch_config_from_gitmodules(int *max_children, int *recurse_submodules);
 void update_clone_config_from_gitmodules(int *max_jobs);
 
+/*
+ * Submodule entry that contains relevant information about a
+ * submodule in a tree.
+ */
+struct submodule_tree_entry {
+       /* The submodule's tree entry. */
+       struct name_entry *name_entry;
+       /*
+        * A struct repository corresponding to the submodule. May be
+        * NULL if the submodule has not been updated.
+        */
+       struct repository *repo;
+       /*
+        * A struct submodule containing the submodule config in the
+        * tree's .gitmodules.
+        */
+       const struct submodule *submodule;
+};
+
+struct submodule_entry_list {
+       struct submodule_tree_entry *entries;
+       int entry_nr;
+       int entry_alloc;
+};
+
+/**
+ * Given a treeish, return all submodules in the tree and its subtrees,
+ * but excluding nested submodules. Callers that require nested
+ * submodules are expected to recurse into the submodules themselves.
+ */
+void submodules_of_tree(struct repository *r,
+                       const struct object_id *treeish_name,
+                       struct submodule_entry_list *ret);
 #endif /* SUBMODULE_CONFIG_H */
index c689070524171b8e6cfae3349cb317c18f693664..86c8f0f89dbdb0e82cb18054392a884c70a71811 100644 (file)
@@ -22,6 +22,7 @@
 #include "parse-options.h"
 #include "object-store.h"
 #include "commit-reach.h"
+#include "shallow.h"
 
 static int config_update_recurse_submodules = RECURSE_SUBMODULES_OFF;
 static int initialized_fetch_ref_tips;
@@ -167,26 +168,6 @@ void stage_updated_gitmodules(struct index_state *istate)
 
 static struct string_list added_submodule_odb_paths = STRING_LIST_INIT_NODUP;
 
-/* TODO: remove this function, use repo_submodule_init instead. */
-int add_submodule_odb(const char *path)
-{
-       struct strbuf objects_directory = STRBUF_INIT;
-       int ret = 0;
-
-       ret = strbuf_git_path_submodule(&objects_directory, path, "objects/");
-       if (ret)
-               goto done;
-       if (!is_directory(objects_directory.buf)) {
-               ret = -1;
-               goto done;
-       }
-       string_list_insert(&added_submodule_odb_paths,
-                          strbuf_detach(&objects_directory, NULL));
-done:
-       strbuf_release(&objects_directory);
-       return ret;
-}
-
 void add_submodule_odb_by_path(const char *path)
 {
        string_list_insert(&added_submodule_odb_paths, xstrdup(path));
@@ -267,7 +248,9 @@ int option_parse_recurse_submodules_worktree_updater(const struct option *opt,
  * ie, the config looks like: "[submodule] active\n".
  * Since that is an invalid pathspec, we should inform the user.
  */
-int is_submodule_active(struct repository *repo, const char *path)
+int is_tree_submodule_active(struct repository *repo,
+                            const struct object_id *treeish_name,
+                            const char *path)
 {
        int ret = 0;
        char *key = NULL;
@@ -275,7 +258,7 @@ int is_submodule_active(struct repository *repo, const char *path)
        const struct string_list *sl;
        const struct submodule *module;
 
-       module = submodule_from_path(repo, null_oid(), path);
+       module = submodule_from_path(repo, treeish_name, path);
 
        /* early return if there isn't a path->module mapping */
        if (!module)
@@ -317,6 +300,11 @@ int is_submodule_active(struct repository *repo, const char *path)
        return ret;
 }
 
+int is_submodule_active(struct repository *repo, const char *path)
+{
+       return is_tree_submodule_active(repo, null_oid(), path);
+}
+
 int is_submodule_populated_gently(const char *path, int *return_error_code)
 {
        int ret = 0;
@@ -775,19 +763,6 @@ const struct submodule *submodule_from_ce(const struct cache_entry *ce)
        return submodule_from_path(the_repository, null_oid(), ce->name);
 }
 
-static struct oid_array *submodule_commits(struct string_list *submodules,
-                                          const char *name)
-{
-       struct string_list_item *item;
-
-       item = string_list_insert(submodules, name);
-       if (item->util)
-               return (struct oid_array *) item->util;
-
-       /* NEEDSWORK: should we have oid_array_init()? */
-       item->util = xcalloc(1, sizeof(struct oid_array));
-       return (struct oid_array *) item->util;
-}
 
 struct collect_changed_submodules_cb_data {
        struct repository *repo;
@@ -812,6 +787,52 @@ static const char *default_name_or_path(const char *path_or_name)
        return path_or_name;
 }
 
+/*
+ * Holds relevant information for a changed submodule. Used as the .util
+ * member of the changed submodule name string_list_item.
+ *
+ * (super_oid, path) allows the submodule config to be read from _some_
+ * .gitmodules file. We store this information the first time we find a
+ * superproject commit that points to the submodule, but this is
+ * arbitrary - we can choose any (super_oid, path) that matches the
+ * submodule's name.
+ *
+ * NEEDSWORK: Storing an arbitrary commit is undesirable because we can't
+ * guarantee that we're reading the commit that the user would expect. A better
+ * scheme would be to just fetch a submodule by its name. This requires two
+ * steps:
+ * - Create a function that behaves like repo_submodule_init(), but accepts a
+ *   submodule name instead of treeish_name and path. This should be easy
+ *   because repo_submodule_init() internally uses the submodule's name.
+ *
+ * - Replace most instances of 'struct submodule' (which is the .gitmodules
+ *   config) with just the submodule name. This is OK because we expect
+ *   submodule settings to be stored in .git/config (via "git submodule init"),
+ *   not .gitmodules. This also lets us delete get_non_gitmodules_submodule(),
+ *   which constructs a bogus 'struct submodule' for the sake of giving a
+ *   placeholder name to a gitlink.
+ */
+struct changed_submodule_data {
+       /*
+        * The first superproject commit in the rev walk that points to
+        * the submodule.
+        */
+       const struct object_id *super_oid;
+       /*
+        * Path to the submodule in the superproject commit referenced
+        * by 'super_oid'.
+        */
+       char *path;
+       /* The submodule commits that have changed in the rev walk. */
+       struct oid_array new_commits;
+};
+
+static void changed_submodule_data_clear(struct changed_submodule_data *cs_data)
+{
+       oid_array_clear(&cs_data->new_commits);
+       free(cs_data->path);
+}
+
 static void collect_changed_submodules_cb(struct diff_queue_struct *q,
                                          struct diff_options *options,
                                          void *data)
@@ -823,9 +844,10 @@ static void collect_changed_submodules_cb(struct diff_queue_struct *q,
 
        for (i = 0; i < q->nr; i++) {
                struct diff_filepair *p = q->queue[i];
-               struct oid_array *commits;
                const struct submodule *submodule;
                const char *name;
+               struct string_list_item *item;
+               struct changed_submodule_data *cs_data;
 
                if (!S_ISGITLINK(p->two->mode))
                        continue;
@@ -852,8 +874,16 @@ static void collect_changed_submodules_cb(struct diff_queue_struct *q,
                if (!name)
                        continue;
 
-               commits = submodule_commits(changed, name);
-               oid_array_append(commits, &p->two->oid);
+               item = string_list_insert(changed, name);
+               if (item->util)
+                       cs_data = item->util;
+               else {
+                       item->util = xcalloc(1, sizeof(struct changed_submodule_data));
+                       cs_data = item->util;
+                       cs_data->super_oid = commit_oid;
+                       cs_data->path = xstrdup(p->two->path);
+               }
+               oid_array_append(&cs_data->new_commits, &p->two->oid);
        }
 }
 
@@ -900,11 +930,12 @@ static void collect_changed_submodules(struct repository *r,
        reset_revision_walk();
 }
 
-static void free_submodules_oids(struct string_list *submodules)
+static void free_submodules_data(struct string_list *submodules)
 {
        struct string_list_item *item;
        for_each_string_list_item(item, submodules)
-               oid_array_clear((struct oid_array *) item->util);
+               changed_submodule_data_clear(item->util);
+
        string_list_clear(submodules, 1);
 }
 
@@ -925,6 +956,7 @@ struct has_commit_data {
        struct repository *repo;
        int result;
        const char *path;
+       const struct object_id *super_oid;
 };
 
 static int check_has_commit(const struct object_id *oid, void *data)
@@ -933,9 +965,10 @@ static int check_has_commit(const struct object_id *oid, void *data)
        struct repository subrepo;
        enum object_type type;
 
-       if (repo_submodule_init(&subrepo, cb->repo, cb->path, null_oid())) {
+       if (repo_submodule_init(&subrepo, cb->repo, cb->path, cb->super_oid)) {
                cb->result = 0;
-               goto cleanup;
+               /* subrepo failed to init, so don't clean it up. */
+               return 0;
        }
 
        type = oid_object_info(&subrepo, oid, NULL);
@@ -961,21 +994,15 @@ cleanup:
 
 static int submodule_has_commits(struct repository *r,
                                 const char *path,
+                                const struct object_id *super_oid,
                                 struct oid_array *commits)
 {
-       struct has_commit_data has_commit = { r, 1, path };
-
-       /*
-        * Perform a cheap, but incorrect check for the existence of 'commits'.
-        * This is done by adding the submodule's object store to the in-core
-        * object store, and then querying for each commit's existence.  If we
-        * do not have the commit object anywhere, there is no chance we have
-        * it in the object store of the correct submodule and have it
-        * reachable from a ref, so we can fail early without spawning rev-list
-        * which is expensive.
-        */
-       if (add_submodule_odb(path))
-               return 0;
+       struct has_commit_data has_commit = {
+               .repo = r,
+               .result = 1,
+               .path = path,
+               .super_oid = super_oid
+       };
 
        oid_array_for_each_unique(commits, check_has_commit, &has_commit);
 
@@ -1010,7 +1037,7 @@ static int submodule_needs_pushing(struct repository *r,
                                   const char *path,
                                   struct oid_array *commits)
 {
-       if (!submodule_has_commits(r, path, commits))
+       if (!submodule_has_commits(r, path, null_oid(), commits))
                /*
                 * NOTE: We do consider it safe to return "no" here. The
                 * correct answer would be "We do not know" instead of
@@ -1070,7 +1097,7 @@ int find_unpushed_submodules(struct repository *r,
        collect_changed_submodules(r, &submodules, &argv);
 
        for_each_string_list_item(name, &submodules) {
-               struct oid_array *commits = name->util;
+               struct changed_submodule_data *cs_data = name->util;
                const struct submodule *submodule;
                const char *path = NULL;
 
@@ -1083,11 +1110,11 @@ int find_unpushed_submodules(struct repository *r,
                if (!path)
                        continue;
 
-               if (submodule_needs_pushing(r, path, commits))
+               if (submodule_needs_pushing(r, path, &cs_data->new_commits))
                        string_list_insert(needs_pushing, path);
        }
 
-       free_submodules_oids(&submodules);
+       free_submodules_data(&submodules);
        strvec_clear(&argv);
 
        return needs_pushing->nr;
@@ -1233,14 +1260,36 @@ void check_for_new_submodule_commits(struct object_id *oid)
        oid_array_append(&ref_tips_after_fetch, oid);
 }
 
+/*
+ * Returns 1 if there is at least one submodule gitdir in
+ * $GIT_DIR/modules and 0 otherwise. This follows
+ * submodule_name_to_gitdir(), which looks for submodules in
+ * $GIT_DIR/modules, not $GIT_COMMON_DIR.
+ *
+ * A submodule can be moved to $GIT_DIR/modules manually by running "git
+ * submodule absorbgitdirs", or it may be initialized there by "git
+ * submodule update".
+ */
+static int repo_has_absorbed_submodules(struct repository *r)
+{
+       int ret;
+       struct strbuf buf = STRBUF_INIT;
+
+       strbuf_repo_git_path(&buf, r, "modules/");
+       ret = file_exists(buf.buf) && !is_empty_dir(buf.buf);
+       strbuf_release(&buf);
+       return ret;
+}
+
 static void calculate_changed_submodule_paths(struct repository *r,
                struct string_list *changed_submodule_names)
 {
        struct strvec argv = STRVEC_INIT;
        struct string_list_item *name;
 
-       /* No need to check if there are no submodules configured */
-       if (!submodule_from_path(r, NULL, NULL))
+       /* No need to check if no submodules would be fetched */
+       if (!submodule_from_path(r, NULL, NULL) &&
+           !repo_has_absorbed_submodules(r))
                return;
 
        strvec_push(&argv, "--"); /* argv[0] program name */
@@ -1257,7 +1306,7 @@ static void calculate_changed_submodule_paths(struct repository *r,
        collect_changed_submodules(r, changed_submodule_names, &argv);
 
        for_each_string_list_item(name, changed_submodule_names) {
-               struct oid_array *commits = name->util;
+               struct changed_submodule_data *cs_data = name->util;
                const struct submodule *submodule;
                const char *path = NULL;
 
@@ -1270,8 +1319,8 @@ static void calculate_changed_submodule_paths(struct repository *r,
                if (!path)
                        continue;
 
-               if (submodule_has_commits(r, path, commits)) {
-                       oid_array_clear(commits);
+               if (submodule_has_commits(r, path, null_oid(), &cs_data->new_commits)) {
+                       changed_submodule_data_clear(cs_data);
                        *name->string = '\0';
                }
        }
@@ -1308,12 +1357,21 @@ int submodule_touches_in_range(struct repository *r,
 
        strvec_clear(&args);
 
-       free_submodules_oids(&subs);
+       free_submodules_data(&subs);
        return ret;
 }
 
 struct submodule_parallel_fetch {
-       int count;
+       /*
+        * The index of the last index entry processed by
+        * get_fetch_task_from_index().
+        */
+       int index_count;
+       /*
+        * The index of the last string_list entry processed by
+        * get_fetch_task_from_changed().
+        */
+       int changed_count;
        struct strvec args;
        struct repository *r;
        const char *prefix;
@@ -1322,7 +1380,16 @@ struct submodule_parallel_fetch {
        int quiet;
        int result;
 
+       /*
+        * Names of submodules that have new commits. Generated by
+        * walking the newly fetched superproject commits.
+        */
        struct string_list changed_submodule_names;
+       /*
+        * Names of submodules that have already been processed. Lets us
+        * avoid fetching the same submodule more than once.
+        */
+       struct string_list seen_submodule_names;
 
        /* Pending fetches by OIDs */
        struct fetch_task **oid_fetch_tasks;
@@ -1333,6 +1400,7 @@ struct submodule_parallel_fetch {
 #define SPF_INIT { \
        .args = STRVEC_INIT, \
        .changed_submodule_names = STRING_LIST_INIT_DUP, \
+       .seen_submodule_names = STRING_LIST_INIT_DUP, \
        .submodules_with_errors = STRBUF_INIT, \
 }
 
@@ -1369,6 +1437,8 @@ struct fetch_task {
        struct repository *repo;
        const struct submodule *sub;
        unsigned free_sub : 1; /* Do we need to free the submodule? */
+       const char *default_argv; /* The default fetch mode. */
+       struct strvec git_args; /* Args for the child git process. */
 
        struct oid_array *commits; /* Ensure these commits are fetched */
 };
@@ -1394,31 +1464,6 @@ static const struct submodule *get_non_gitmodules_submodule(const char *path)
        return (const struct submodule *) ret;
 }
 
-static struct fetch_task *fetch_task_create(struct repository *r,
-                                           const char *path)
-{
-       struct fetch_task *task = xmalloc(sizeof(*task));
-       memset(task, 0, sizeof(*task));
-
-       task->sub = submodule_from_path(r, null_oid(), path);
-       if (!task->sub) {
-               /*
-                * No entry in .gitmodules? Technically not a submodule,
-                * but historically we supported repositories that happen to be
-                * in-place where a gitlink is. Keep supporting them.
-                */
-               task->sub = get_non_gitmodules_submodule(path);
-               if (!task->sub) {
-                       free(task);
-                       return NULL;
-               }
-
-               task->free_sub = 1;
-       }
-
-       return task;
-}
-
 static void fetch_task_release(struct fetch_task *p)
 {
        if (p->free_sub)
@@ -1429,14 +1474,17 @@ static void fetch_task_release(struct fetch_task *p)
        if (p->repo)
                repo_clear(p->repo);
        FREE_AND_NULL(p->repo);
+
+       strvec_clear(&p->git_args);
 }
 
 static struct repository *get_submodule_repo_for(struct repository *r,
-                                                const char *path)
+                                                const char *path,
+                                                const struct object_id *treeish_name)
 {
        struct repository *ret = xmalloc(sizeof(*ret));
 
-       if (repo_submodule_init(ret, r, path, null_oid())) {
+       if (repo_submodule_init(ret, r, path, treeish_name)) {
                free(ret);
                return NULL;
        }
@@ -1444,67 +1492,83 @@ static struct repository *get_submodule_repo_for(struct repository *r,
        return ret;
 }
 
-static int get_next_submodule(struct child_process *cp,
-                             struct strbuf *err, void *data, void **task_cb)
+static struct fetch_task *fetch_task_create(struct submodule_parallel_fetch *spf,
+                                           const char *path,
+                                           const struct object_id *treeish_name)
 {
-       struct submodule_parallel_fetch *spf = data;
+       struct fetch_task *task = xmalloc(sizeof(*task));
+       memset(task, 0, sizeof(*task));
+
+       task->sub = submodule_from_path(spf->r, treeish_name, path);
+
+       if (!task->sub) {
+               /*
+                * No entry in .gitmodules? Technically not a submodule,
+                * but historically we supported repositories that happen to be
+                * in-place where a gitlink is. Keep supporting them.
+                */
+               task->sub = get_non_gitmodules_submodule(path);
+               if (!task->sub)
+                       goto cleanup;
 
-       for (; spf->count < spf->r->index->cache_nr; spf->count++) {
-               const struct cache_entry *ce = spf->r->index->cache[spf->count];
-               const char *default_argv;
+               task->free_sub = 1;
+       }
+
+       if (string_list_lookup(&spf->seen_submodule_names, task->sub->name))
+               goto cleanup;
+
+       switch (get_fetch_recurse_config(task->sub, spf))
+       {
+       default:
+       case RECURSE_SUBMODULES_DEFAULT:
+       case RECURSE_SUBMODULES_ON_DEMAND:
+               if (!task->sub ||
+                       !string_list_lookup(
+                               &spf->changed_submodule_names,
+                               task->sub->name))
+                       goto cleanup;
+               task->default_argv = "on-demand";
+               break;
+       case RECURSE_SUBMODULES_ON:
+               task->default_argv = "yes";
+               break;
+       case RECURSE_SUBMODULES_OFF:
+               goto cleanup;
+       }
+
+       task->repo = get_submodule_repo_for(spf->r, path, treeish_name);
+
+       return task;
+
+ cleanup:
+       fetch_task_release(task);
+       free(task);
+       return NULL;
+}
+
+static struct fetch_task *
+get_fetch_task_from_index(struct submodule_parallel_fetch *spf,
+                         struct strbuf *err)
+{
+       for (; spf->index_count < spf->r->index->cache_nr; spf->index_count++) {
+               const struct cache_entry *ce =
+                       spf->r->index->cache[spf->index_count];
                struct fetch_task *task;
 
                if (!S_ISGITLINK(ce->ce_mode))
                        continue;
 
-               task = fetch_task_create(spf->r, ce->name);
+               task = fetch_task_create(spf, ce->name, null_oid());
                if (!task)
                        continue;
 
-               switch (get_fetch_recurse_config(task->sub, spf))
-               {
-               default:
-               case RECURSE_SUBMODULES_DEFAULT:
-               case RECURSE_SUBMODULES_ON_DEMAND:
-                       if (!task->sub ||
-                           !string_list_lookup(
-                                       &spf->changed_submodule_names,
-                                       task->sub->name))
-                               continue;
-                       default_argv = "on-demand";
-                       break;
-               case RECURSE_SUBMODULES_ON:
-                       default_argv = "yes";
-                       break;
-               case RECURSE_SUBMODULES_OFF:
-                       continue;
-               }
-
-               task->repo = get_submodule_repo_for(spf->r, task->sub->path);
                if (task->repo) {
-                       struct strbuf submodule_prefix = STRBUF_INIT;
-                       child_process_init(cp);
-                       cp->dir = task->repo->gitdir;
-                       prepare_submodule_repo_env_in_gitdir(&cp->env_array);
-                       cp->git_cmd = 1;
                        if (!spf->quiet)
                                strbuf_addf(err, _("Fetching submodule %s%s\n"),
                                            spf->prefix, ce->name);
-                       strvec_init(&cp->args);
-                       strvec_pushv(&cp->args, spf->args.v);
-                       strvec_push(&cp->args, default_argv);
-                       strvec_push(&cp->args, "--submodule-prefix");
-
-                       strbuf_addf(&submodule_prefix, "%s%s/",
-                                                      spf->prefix,
-                                                      task->sub->path);
-                       strvec_push(&cp->args, submodule_prefix.buf);
-
-                       spf->count++;
-                       *task_cb = task;
 
-                       strbuf_release(&submodule_prefix);
-                       return 1;
+                       spf->index_count++;
+                       return task;
                } else {
                        struct strbuf empty_submodule_path = STRBUF_INIT;
 
@@ -1528,6 +1592,111 @@ static int get_next_submodule(struct child_process *cp,
                        strbuf_release(&empty_submodule_path);
                }
        }
+       return NULL;
+}
+
+static struct fetch_task *
+get_fetch_task_from_changed(struct submodule_parallel_fetch *spf,
+                           struct strbuf *err)
+{
+       for (; spf->changed_count < spf->changed_submodule_names.nr;
+            spf->changed_count++) {
+               struct string_list_item item =
+                       spf->changed_submodule_names.items[spf->changed_count];
+               struct changed_submodule_data *cs_data = item.util;
+               struct fetch_task *task;
+
+               if (!is_tree_submodule_active(spf->r, cs_data->super_oid,cs_data->path))
+                       continue;
+
+               task = fetch_task_create(spf, cs_data->path,
+                                        cs_data->super_oid);
+               if (!task)
+                       continue;
+
+               if (!task->repo) {
+                       strbuf_addf(err, _("Could not access submodule '%s' at commit %s\n"),
+                                   cs_data->path,
+                                   find_unique_abbrev(cs_data->super_oid, DEFAULT_ABBREV));
+
+                       fetch_task_release(task);
+                       free(task);
+                       continue;
+               }
+
+               if (!spf->quiet)
+                       strbuf_addf(err,
+                                   _("Fetching submodule %s%s at commit %s\n"),
+                                   spf->prefix, task->sub->path,
+                                   find_unique_abbrev(cs_data->super_oid,
+                                                      DEFAULT_ABBREV));
+
+               spf->changed_count++;
+               /*
+                * NEEDSWORK: Submodules set/unset a value for
+                * core.worktree when they are populated/unpopulated by
+                * "git checkout" (and similar commands, see
+                * submodule_move_head() and
+                * connect_work_tree_and_git_dir()), but if the
+                * submodule is unpopulated in another way (e.g. "git
+                * rm", "rm -r"), core.worktree will still be set even
+                * though the directory doesn't exist, and the child
+                * process will crash while trying to chdir into the
+                * nonexistent directory.
+                *
+                * In this case, we know that the submodule has no
+                * working tree, so we can work around this by
+                * setting "--work-tree=." (--bare does not work because
+                * worktree settings take precedence over bare-ness).
+                * However, this is not necessarily true in other cases,
+                * so a generalized solution is still necessary.
+                *
+                * Possible solutions:
+                * - teach "git [add|rm]" to unset core.worktree and
+                *   discourage users from removing submodules without
+                *   using a Git command.
+                * - teach submodule child processes to ignore stale
+                *   core.worktree values.
+                */
+               strvec_push(&task->git_args, "--work-tree=.");
+               return task;
+       }
+       return NULL;
+}
+
+static int get_next_submodule(struct child_process *cp, struct strbuf *err,
+                             void *data, void **task_cb)
+{
+       struct submodule_parallel_fetch *spf = data;
+       struct fetch_task *task =
+               get_fetch_task_from_index(spf, err);
+       if (!task)
+               task = get_fetch_task_from_changed(spf, err);
+
+       if (task) {
+               struct strbuf submodule_prefix = STRBUF_INIT;
+
+               child_process_init(cp);
+               cp->dir = task->repo->gitdir;
+               prepare_submodule_repo_env_in_gitdir(&cp->env_array);
+               cp->git_cmd = 1;
+               strvec_init(&cp->args);
+               if (task->git_args.nr)
+                       strvec_pushv(&cp->args, task->git_args.v);
+               strvec_pushv(&cp->args, spf->args.v);
+               strvec_push(&cp->args, task->default_argv);
+               strvec_push(&cp->args, "--submodule-prefix");
+
+               strbuf_addf(&submodule_prefix, "%s%s/",
+                                               spf->prefix,
+                                               task->sub->path);
+               strvec_push(&cp->args, submodule_prefix.buf);
+               *task_cb = task;
+
+               strbuf_release(&submodule_prefix);
+               string_list_insert(&spf->seen_submodule_names, task->sub->name);
+               return 1;
+       }
 
        if (spf->oid_fetch_tasks_nr) {
                struct fetch_task *task =
@@ -1590,7 +1759,7 @@ static int fetch_finish(int retvalue, struct strbuf *err,
        struct fetch_task *task = task_cb;
 
        struct string_list_item *it;
-       struct oid_array *commits;
+       struct changed_submodule_data *cs_data;
 
        if (!task || !task->sub)
                BUG("callback cookie bogus");
@@ -1618,14 +1787,14 @@ static int fetch_finish(int retvalue, struct strbuf *err,
                /* Could be an unchanged submodule, not contained in the list */
                goto out;
 
-       commits = it->util;
-       oid_array_filter(commits,
+       cs_data = it->util;
+       oid_array_filter(&cs_data->new_commits,
                         commit_missing_in_sub,
                         task->repo);
 
        /* Are there commits we want, but do not exist? */
-       if (commits->nr) {
-               task->commits = commits;
+       if (cs_data->new_commits.nr) {
+               task->commits = &cs_data->new_commits;
                ALLOC_GROW(spf->oid_fetch_tasks,
                           spf->oid_fetch_tasks_nr + 1,
                           spf->oid_fetch_tasks_alloc);
@@ -1640,11 +1809,11 @@ out:
        return 0;
 }
 
-int fetch_populated_submodules(struct repository *r,
-                              const struct strvec *options,
-                              const char *prefix, int command_line_option,
-                              int default_option,
-                              int quiet, int max_parallel_jobs)
+int fetch_submodules(struct repository *r,
+                    const struct strvec *options,
+                    const char *prefix, int command_line_option,
+                    int default_option,
+                    int quiet, int max_parallel_jobs)
 {
        int i;
        struct submodule_parallel_fetch spf = SPF_INIT;
@@ -1683,7 +1852,7 @@ int fetch_populated_submodules(struct repository *r,
 
        strvec_clear(&spf.args);
 out:
-       free_submodules_oids(&spf.changed_submodule_names);
+       free_submodules_data(&spf.changed_submodule_names);
        return spf.result;
 }
 
index 6bd2c99fd99d409abd89771d511b3a7db5f47252..40c14452377521b9ca46b44e64e3580539c2d1cc 100644 (file)
@@ -54,6 +54,9 @@ int git_default_submodule_config(const char *var, const char *value, void *cb);
 struct option;
 int option_parse_recurse_submodules_worktree_updater(const struct option *opt,
                                                     const char *arg, int unset);
+int is_tree_submodule_active(struct repository *repo,
+                            const struct object_id *treeish_name,
+                            const char *path);
 int is_submodule_active(struct repository *repo, const char *path);
 /*
  * Determine if a submodule has been populated at a given 'path' by checking if
@@ -85,12 +88,12 @@ int should_update_submodules(void);
  */
 const struct submodule *submodule_from_ce(const struct cache_entry *ce);
 void check_for_new_submodule_commits(struct object_id *oid);
-int fetch_populated_submodules(struct repository *r,
-                              const struct strvec *options,
-                              const char *prefix,
-                              int command_line_option,
-                              int default_option,
-                              int quiet, int max_parallel_jobs);
+int fetch_submodules(struct repository *r,
+                    const struct strvec *options,
+                    const char *prefix,
+                    int command_line_option,
+                    int default_option,
+                    int quiet, int max_parallel_jobs);
 unsigned is_submodule_modified(const char *path, int ignore_untracked);
 int submodule_uses_gitfile(const char *path);
 
@@ -100,12 +103,11 @@ int submodule_uses_gitfile(const char *path);
 int bad_to_remove_submodule(const char *path, unsigned flags);
 
 /*
- * Call add_submodule_odb() to add the submodule at the given path to a list.
- * When register_all_submodule_odb_as_alternates() is called, the object stores
- * of all submodules in that list will be added as alternates in
- * the_repository.
+ * Call add_submodule_odb_by_path() to add the submodule at the given
+ * path to a list. When register_all_submodule_odb_as_alternates() is
+ * called, the object stores of all submodules in that list will be
+ * added as alternates in the_repository.
  */
-int add_submodule_odb(const char *path);
 void add_submodule_odb_by_path(const char *path);
 int register_all_submodule_odb_as_alternates(void);
 
index 46cd5fc5273dc0bcb907ab49ce8c97c4783053be..056ce55dcc92c923ce560ef61a0b2888d799c450 100644 (file)
@@ -1,3 +1,6 @@
+# Import tree-wide shared Makefile behavior and libraries
+include ../shared.mak
+
 # Run tests
 #
 # Copyright (c) 2005 Junio C Hamano
index f48e0542cdc42ab12d9b46ffa6cee05d84431e46..9ffea1d31478029a62fd60bdc1041001706a3bea 100644 (file)
--- a/t/README
+++ b/t/README
@@ -405,8 +405,8 @@ every 'git commit-graph write', as if the `--changed-paths` option was
 passed in.
 
 GIT_TEST_FSMONITOR=$PWD/t7519/fsmonitor-all exercises the fsmonitor
-code path for utilizing a file system monitor to speed up detecting
-new or changed files.
+code paths for utilizing a (hook based) file system monitor to speed up
+detecting new or changed files.
 
 GIT_TEST_INDEX_VERSION=<n> exercises the index read/write code path
 for the index version specified.  Can be set to any valid version
index 524b55ca496cab66031eb21f83548a2817280ee6..dc28890a183f1d123b3356131e90fd588aa5a439 100644 (file)
@@ -134,6 +134,21 @@ int cmd__chmtime(int argc, const char **argv)
                }
 
                if (utb.modtime != sb.st_mtime && utime(argv[i], &utb) < 0) {
+#ifdef GIT_WINDOWS_NATIVE
+                       if (S_ISDIR(sb.st_mode)) {
+                               /*
+                                * NEEDSWORK: The Windows version of `utime()`
+                                * (aka `mingw_utime()`) does not correctly
+                                * handle directory arguments, since it uses
+                                * `_wopen()`.  Ignore it for now since this
+                                * is just a test.
+                                */
+                               fprintf(stderr,
+                                       ("Failed to modify time on directory %s. "
+                                        "Skipping\n"), argv[i]);
+                               continue;
+                       }
+#endif
                        fprintf(stderr, "Failed to modify time on %s: %s\n",
                                argv[i], strerror(errno));
                        return 1;
diff --git a/t/helper/test-csprng.c b/t/helper/test-csprng.c
new file mode 100644 (file)
index 0000000..65d1497
--- /dev/null
@@ -0,0 +1,29 @@
+#include "test-tool.h"
+#include "git-compat-util.h"
+
+
+int cmd__csprng(int argc, const char **argv)
+{
+       unsigned long count;
+       unsigned char buf[1024];
+
+       if (argc > 2) {
+               fprintf(stderr, "usage: %s [<size>]\n", argv[0]);
+               return 2;
+       }
+
+       count = (argc == 2) ? strtoul(argv[1], NULL, 0) : -1L;
+
+       while (count) {
+               unsigned long chunk = count < sizeof(buf) ? count : sizeof(buf);
+               if (csprng_bytes(buf, chunk) < 0) {
+                       perror("failed to read");
+                       return 5;
+               }
+               if (fwrite(buf, chunk, 1, stdout) != chunk)
+                       return 1;
+               count -= chunk;
+       }
+
+       return 0;
+}
index 099eff4f0fc880689d06c0b8b6301c3e83dff747..45951b1df87c7bf90a25cc1497344681ae42a161 100644 (file)
@@ -1,5 +1,6 @@
 #include "test-tool.h"
 #include "cache.h"
+#include "date.h"
 
 static const char *usage_msg = "\n"
 "  test-tool date relative [time_t]...\n"
@@ -34,7 +35,7 @@ static void show_human_dates(const char **argv)
 
 static void show_dates(const char **argv, const char *format)
 {
-       struct date_mode mode;
+       struct date_mode mode = DATE_MODE_INIT;
 
        parse_date_format(format, &mode);
        for (; *argv; argv++) {
@@ -53,6 +54,8 @@ static void show_dates(const char **argv, const char *format)
 
                printf("%s -> %s\n", *argv, show_date(t, tz, &mode));
        }
+
+       date_mode_release(&mode);
 }
 
 static void parse_dates(const char **argv)
diff --git a/t/helper/test-fsmonitor-client.c b/t/helper/test-fsmonitor-client.c
new file mode 100644 (file)
index 0000000..3062c8a
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * test-fsmonitor-client.c: client code to send commands/requests to
+ * a `git fsmonitor--daemon` daemon.
+ */
+
+#include "test-tool.h"
+#include "cache.h"
+#include "parse-options.h"
+#include "fsmonitor-ipc.h"
+
+#ifndef HAVE_FSMONITOR_DAEMON_BACKEND
+int cmd__fsmonitor_client(int argc, const char **argv)
+{
+       die("fsmonitor--daemon not available on this platform");
+}
+#else
+
+/*
+ * Read the `.git/index` to get the last token written to the
+ * FSMonitor Index Extension.
+ */
+static const char *get_token_from_index(void)
+{
+       struct index_state *istate = the_repository->index;
+
+       if (do_read_index(istate, the_repository->index_file, 0) < 0)
+               die("unable to read index file");
+       if (!istate->fsmonitor_last_update)
+               die("index file does not have fsmonitor extension");
+
+       return istate->fsmonitor_last_update;
+}
+
+/*
+ * Send an IPC query to a `git-fsmonitor--daemon` daemon and
+ * ask for the changes since the given token or from the last
+ * token in the index extension.
+ *
+ * This will implicitly start a daemon process if necessary.  The
+ * daemon process will persist after we exit.
+ */
+static int do_send_query(const char *token)
+{
+       struct strbuf answer = STRBUF_INIT;
+       int ret;
+
+       if (!token || !*token)
+               token = get_token_from_index();
+
+       ret = fsmonitor_ipc__send_query(token, &answer);
+       if (ret < 0)
+               die("could not query fsmonitor--daemon");
+
+       write_in_full(1, answer.buf, answer.len);
+       strbuf_release(&answer);
+
+       return 0;
+}
+
+/*
+ * Send a "flush" command to the `git-fsmonitor--daemon` (if running)
+ * and tell it to flush its cache.
+ *
+ * This feature is primarily used by the test suite to simulate a loss of
+ * sync with the filesystem where we miss kernel events.
+ */
+static int do_send_flush(void)
+{
+       struct strbuf answer = STRBUF_INIT;
+       int ret;
+
+       ret = fsmonitor_ipc__send_command("flush", &answer);
+       if (ret)
+               return ret;
+
+       write_in_full(1, answer.buf, answer.len);
+       strbuf_release(&answer);
+
+       return 0;
+}
+
+int cmd__fsmonitor_client(int argc, const char **argv)
+{
+       const char *subcmd;
+       const char *token = NULL;
+
+       const char * const fsmonitor_client_usage[] = {
+               "test-tool fsmonitor-client query [<token>]",
+               "test-tool fsmonitor-client flush",
+               NULL,
+       };
+
+       struct option options[] = {
+               OPT_STRING(0, "token", &token, "token",
+                          "command token to send to the server"),
+               OPT_END()
+       };
+
+       argc = parse_options(argc, argv, NULL, options, fsmonitor_client_usage, 0);
+
+       if (argc != 1)
+               usage_with_options(fsmonitor_client_usage, options);
+
+       subcmd = argv[0];
+
+       setup_git_directory();
+
+       if (!strcmp(subcmd, "query"))
+               return !!do_send_query(token);
+
+       if (!strcmp(subcmd, "flush"))
+               return !!do_send_flush();
+
+       die("Unhandled subcommand: '%s'", subcmd);
+}
+#endif
index 5d05cbe7894097f6410328b966bda936e678237f..6cc9735b60127b2f5bab7d1728dc013a27b7adf4 100644 (file)
@@ -3,6 +3,9 @@
  *
  * Reads instructions from standard input, one instruction per line:
  *
+ *   "start <total>[ <title>]" - Call start_progress(title, total),
+ *                               Uses the default title of "Working hard"
+ *                               if the " <title>" is omitted.
  *   "progress <items>" - Call display_progress() with the given item count
  *                        as parameter.
  *   "throughput <bytes> <millis> - Call display_throughput() with the given
@@ -10,6 +13,7 @@
  *                                  specify the time elapsed since the
  *                                  start_progress() call.
  *   "update" - Set the 'progress_update' flag.
+ *   "stop" - Call stop_progress().
  *
  * See 't0500-progress-display.sh' for examples.
  */
 #include "parse-options.h"
 #include "progress.h"
 #include "strbuf.h"
+#include "string-list.h"
 
 int cmd__progress(int argc, const char **argv)
 {
-       int total = 0;
-       const char *title;
+       const char *const default_title = "Working hard";
+       struct string_list titles = STRING_LIST_INIT_DUP;
        struct strbuf line = STRBUF_INIT;
-       struct progress *progress;
+       struct progress *progress = NULL;
 
        const char *usage[] = {
-               "test-tool progress [--total=<n>] <progress-title>",
+               "test-tool progress <stdin",
                NULL
        };
        struct option options[] = {
-               OPT_INTEGER(0, "total", &total, "total number of items"),
                OPT_END(),
        };
 
        argc = parse_options(argc, argv, NULL, options, usage, 0);
-       if (argc != 1)
-               die("need a title for the progress output");
-       title = argv[0];
+       if (argc)
+               usage_with_options(usage, options);
 
        progress_testing = 1;
-       progress = start_progress(title, total);
        while (strbuf_getline(&line, stdin) != EOF) {
                char *end;
 
-               if (skip_prefix(line.buf, "progress ", (const char **) &end)) {
+               if (skip_prefix(line.buf, "start ", (const char **) &end)) {
+                       uint64_t total = strtoull(end, &end, 10);
+                       const char *title;
+
+                       /*
+                        * We can't use "end + 1" as an argument to
+                        * start_progress(), it doesn't xstrdup() its
+                        * "title" argument. We need to hold onto a
+                        * valid "char *" for it until the end.
+                        */
+                       if (!*end)
+                               title = default_title;
+                       else if (*end == ' ')
+                               title = string_list_insert(&titles, end + 1)->string;
+                       else
+                               die("invalid input: '%s'\n", line.buf);
+
+                       progress = start_progress(title, total);
+               } else if (skip_prefix(line.buf, "progress ", (const char **) &end)) {
                        uint64_t item_count = strtoull(end, &end, 10);
                        if (*end != '\0')
                                die("invalid input: '%s'\n", line.buf);
@@ -63,12 +83,16 @@ int cmd__progress(int argc, const char **argv)
                                die("invalid input: '%s'\n", line.buf);
                        progress_test_ns = test_ms * 1000 * 1000;
                        display_throughput(progress, byte_count);
-               } else if (!strcmp(line.buf, "update"))
+               } else if (!strcmp(line.buf, "update")) {
                        progress_test_force_update();
-               else
+               } else if (!strcmp(line.buf, "stop")) {
+                       stop_progress(&progress);
+               } else {
                        die("invalid input: '%s'\n", line.buf);
+               }
        }
-       stop_progress(&progress);
+       strbuf_release(&line);
+       string_list_clear(&titles, 0);
 
        return 0;
 }
index 75927b2c81d28de1b3f16de0ef4a9d55aad5e668..98b73bb8f25aabea7384cde0fb639cff16cf631e 100644 (file)
@@ -3,6 +3,7 @@
 #include "commit-graph.h"
 #include "repository.h"
 #include "object-store.h"
+#include "bloom.h"
 
 int cmd__read_graph(int argc, const char **argv)
 {
@@ -45,6 +46,18 @@ int cmd__read_graph(int argc, const char **argv)
                printf(" bloom_data");
        printf("\n");
 
+       printf("options:");
+       if (graph->bloom_filter_settings)
+               printf(" bloom(%"PRIu32",%"PRIu32",%"PRIu32")",
+                      graph->bloom_filter_settings->hash_version,
+                      graph->bloom_filter_settings->bits_per_entry,
+                      graph->bloom_filter_settings->num_hashes);
+       if (graph->read_generation_data)
+               printf(" read_generation_data");
+       if (graph->topo_levels)
+               printf(" topo_levels");
+       printf("\n");
+
        UNLEAK(graph);
 
        return 0;
index 3e4ddaee70557690e14c09ad5da34ddbab4a781a..9646d85fc84a9e52ff4c05e7614a9582c0fc3b7e 100644 (file)
@@ -180,10 +180,9 @@ static int cmd_resolve_ref(struct ref_store *refs, const char **argv)
        int resolve_flags = arg_flags(*argv++, "resolve-flags", empty_flags);
        int flags;
        const char *ref;
-       int ignore_errno;
 
        ref = refs_resolve_ref_unsafe(refs, refname, resolve_flags,
-                                     &oid, &flags, &ignore_errno);
+                                     &oid, &flags);
        printf("%s %s 0x%x\n", oid_to_hex(&oid), ref ? ref : "(null)", flags);
        return ref ? 0 : 1;
 }
index 26b03d7b7892ee68f7498a1f5cff4ae364190c16..1f0a28cbb64de427ff8d8c542e0b1166250093e2 100644 (file)
@@ -3,15 +3,16 @@
 
 int cmd__reftable(int argc, const char **argv)
 {
+       /* test from simple to complex. */
        basics_test_main(argc, argv);
+       record_test_main(argc, argv);
        block_test_main(argc, argv);
-       merged_test_main(argc, argv);
+       tree_test_main(argc, argv);
        pq_test_main(argc, argv);
-       record_test_main(argc, argv);
-       refname_test_main(argc, argv);
        readwrite_test_main(argc, argv);
+       merged_test_main(argc, argv);
        stack_test_main(argc, argv);
-       tree_test_main(argc, argv);
+       refname_test_main(argc, argv);
        return 0;
 }
 
index 913775a14b758e5b4dd89cbce9ead4ff104abbc1..f3b90aa834a463e57485dc5bc1ec0b377d29626e 100644 (file)
@@ -19,7 +19,6 @@
 #include "thread-utils.h"
 #include "wildmatch.h"
 #include "gettext.h"
-#include "parse-options.h"
 
 static int number_callbacks;
 static int parallel_next(struct child_process *cp,
@@ -180,15 +179,16 @@ static int testsuite(int argc, const char **argv)
        if (max_jobs > suite.tests.nr)
                max_jobs = suite.tests.nr;
 
-       fprintf(stderr, "Running %d tests (%d at a time)\n",
-               suite.tests.nr, max_jobs);
+       fprintf(stderr, "Running %"PRIuMAX" tests (%d at a time)\n",
+               (uintmax_t)suite.tests.nr, max_jobs);
 
        ret = run_processes_parallel(max_jobs, next_test, test_failed,
                                     test_finished, &suite);
 
        if (suite.failed.nr > 0) {
                ret = 1;
-               fprintf(stderr, "%d tests failed:\n\n", suite.failed.nr);
+               fprintf(stderr, "%"PRIuMAX" tests failed:\n\n",
+                       (uintmax_t)suite.failed.nr);
                for (i = 0; i < suite.failed.nr; i++)
                        fprintf(stderr, "\t%s\n", suite.failed.items[i].string);
        }
@@ -221,9 +221,9 @@ static int quote_stress_test(int argc, const char **argv)
        struct strbuf out = STRBUF_INIT;
        struct strvec args = STRVEC_INIT;
        struct option options[] = {
-               OPT_INTEGER('n', "trials", &trials, "Number of trials"),
-               OPT_INTEGER('s', "skip", &skip, "Skip <n> trials"),
-               OPT_BOOL('m', "msys2", &msys2, "Test quoting for MSYS2's sh"),
+               OPT_INTEGER('n', "trials", &trials, "number of trials"),
+               OPT_INTEGER('s', "skip", &skip, "skip <n> trials"),
+               OPT_BOOL('m', "msys2", &msys2, "test quoting for MSYS2's sh"),
                OPT_END()
        };
        const char * const usage[] = {
index 338a57b104d689a843df92b8adc0d6d0381252be..0424f7adf5d69cc2596a58ee3ef33f1826dfc621 100644 (file)
@@ -20,6 +20,7 @@ static struct test_cmd cmds[] = {
        { "chmtime", cmd__chmtime },
        { "config", cmd__config },
        { "crontab", cmd__crontab },
+       { "csprng", cmd__csprng },
        { "ctype", cmd__ctype },
        { "date", cmd__date },
        { "delta", cmd__delta },
@@ -31,6 +32,7 @@ static struct test_cmd cmds[] = {
        { "dump-untracked-cache", cmd__dump_untracked_cache },
        { "example-decorate", cmd__example_decorate },
        { "fast-rebase", cmd__fast_rebase },
+       { "fsmonitor-client", cmd__fsmonitor_client },
        { "genrandom", cmd__genrandom },
        { "genzeros", cmd__genzeros },
        { "getcwd", cmd__getcwd },
index 48cee1f4a2d9855e10897289b08191905f208730..c876e8246fbdff9ddf43e5b4ec46944406f9d33d 100644 (file)
@@ -10,6 +10,7 @@ int cmd__bloom(int argc, const char **argv);
 int cmd__chmtime(int argc, const char **argv);
 int cmd__config(int argc, const char **argv);
 int cmd__crontab(int argc, const char **argv);
+int cmd__csprng(int argc, const char **argv);
 int cmd__ctype(int argc, const char **argv);
 int cmd__date(int argc, const char **argv);
 int cmd__delta(int argc, const char **argv);
@@ -22,6 +23,7 @@ int cmd__dump_untracked_cache(int argc, const char **argv);
 int cmd__dump_reftable(int argc, const char **argv);
 int cmd__example_decorate(int argc, const char **argv);
 int cmd__fast_rebase(int argc, const char **argv);
+int cmd__fsmonitor_client(int argc, const char **argv);
 int cmd__genrandom(int argc, const char **argv);
 int cmd__genzeros(int argc, const char **argv);
 int cmd__getcwd(int argc, const char **argv);
index 31a4bbc716aa3ad97cdeed1344e852f1dfa04b46..6911c2915a74b16647c0075cabda39d415d2562a 100644 (file)
@@ -1,3 +1,6 @@
+# Import tree-wide shared Makefile behavior and libraries
+include ../../shared.mak
+
 -include ../../config.mak
 export GIT_TEST_OPTIONS
 
index 21d0392ddac5a2e21f8ce090d87efc6cda4e4d9a..a95537e759b0365db3f80ccf9135838da0cbde5e 100644 (file)
@@ -1,6 +1,9 @@
 # Helpers for scripts testing bitmap functionality; see t5310 for
 # example usage.
 
+objdir=.git/objects
+midx=$objdir/pack/multi-pack-index
+
 # Compare a file containing rev-list bitmap traversal output to its non-bitmap
 # counterpart. You can't just use test_cmp for this, because the two produce
 # subtly different output:
@@ -264,3 +267,185 @@ have_delta () {
 midx_checksum () {
        test-tool read-midx --checksum "$1"
 }
+
+# midx_pack_source <obj>
+midx_pack_source () {
+       test-tool read-midx --show-objects .git/objects | grep "^$1 " | cut -f2
+}
+
+test_rev_exists () {
+       commit="$1"
+       kind="$2"
+
+       test_expect_success "reverse index exists ($kind)" '
+               GIT_TRACE2_EVENT=$(pwd)/event.trace \
+                       git rev-list --test-bitmap "$commit" &&
+
+               if test "rev" = "$kind"
+               then
+                       test_path_is_file $midx-$(midx_checksum $objdir).rev
+               fi &&
+               grep "\"category\":\"load_midx_revindex\",\"key\":\"source\",\"value\":\"$kind\"" event.trace
+       '
+}
+
+midx_bitmap_core () {
+       rev_kind="${1:-midx}"
+
+       setup_bitmap_history
+
+       test_expect_success 'create single-pack midx with bitmaps' '
+               git repack -ad &&
+               git multi-pack-index write --bitmap &&
+               test_path_is_file $midx &&
+               test_path_is_file $midx-$(midx_checksum $objdir).bitmap
+       '
+
+       test_rev_exists HEAD "$rev_kind"
+
+       basic_bitmap_tests
+
+       test_expect_success 'create new additional packs' '
+               for i in $(test_seq 1 16)
+               do
+                       test_commit "$i" &&
+                       git repack -d || return 1
+               done &&
+
+               git checkout -b other2 HEAD~8 &&
+               for i in $(test_seq 1 8)
+               do
+                       test_commit "side-$i" &&
+                       git repack -d || return 1
+               done &&
+               git checkout second
+       '
+
+       test_expect_success 'create multi-pack midx with bitmaps' '
+               git multi-pack-index write --bitmap &&
+
+               ls $objdir/pack/pack-*.pack >packs &&
+               test_line_count = 25 packs &&
+
+               test_path_is_file $midx &&
+               test_path_is_file $midx-$(midx_checksum $objdir).bitmap
+       '
+
+       test_rev_exists HEAD "$rev_kind"
+
+       basic_bitmap_tests
+
+       test_expect_success '--no-bitmap is respected when bitmaps exist' '
+               git multi-pack-index write --bitmap &&
+
+               test_commit respect--no-bitmap &&
+               git repack -d &&
+
+               test_path_is_file $midx &&
+               test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&
+
+               git multi-pack-index write --no-bitmap &&
+
+               test_path_is_file $midx &&
+               test_path_is_missing $midx-$(midx_checksum $objdir).bitmap &&
+               test_path_is_missing $midx-$(midx_checksum $objdir).rev
+       '
+
+       test_expect_success 'setup midx with base from later pack' '
+               # Write a and b so that "a" is a delta on top of base "b", since Git
+               # prefers to delete contents out of a base rather than add to a shorter
+               # object.
+               test_seq 1 128 >a &&
+               test_seq 1 130 >b &&
+
+               git add a b &&
+               git commit -m "initial commit" &&
+
+               a=$(git rev-parse HEAD:a) &&
+               b=$(git rev-parse HEAD:b) &&
+
+               # In the first pack, "a" is stored as a delta to "b".
+               p1=$(git pack-objects .git/objects/pack/pack <<-EOF
+               $a
+               $b
+               EOF
+               ) &&
+
+               # In the second pack, "a" is missing, and "b" is not a delta nor base to
+               # any other object.
+               p2=$(git pack-objects .git/objects/pack/pack <<-EOF
+               $b
+               $(git rev-parse HEAD)
+               $(git rev-parse HEAD^{tree})
+               EOF
+               ) &&
+
+               git prune-packed &&
+               # Use the second pack as the preferred source, so that "b" occurs
+               # earlier in the MIDX object order, rendering "a" unusable for pack
+               # reuse.
+               git multi-pack-index write --bitmap --preferred-pack=pack-$p2.idx &&
+
+               have_delta $a $b &&
+               test $(midx_pack_source $a) != $(midx_pack_source $b)
+       '
+
+       rev_list_tests 'full bitmap with backwards delta'
+
+       test_expect_success 'clone with bitmaps enabled' '
+               git clone --no-local --bare . clone-reverse-delta.git &&
+               test_when_finished "rm -fr clone-reverse-delta.git" &&
+
+               git rev-parse HEAD >expect &&
+               git --git-dir=clone-reverse-delta.git rev-parse HEAD >actual &&
+               test_cmp expect actual
+       '
+
+       test_expect_success 'changing the preferred pack does not corrupt bitmaps' '
+               rm -fr repo &&
+               git init repo &&
+               test_when_finished "rm -fr repo" &&
+               (
+                       cd repo &&
+
+                       test_commit A &&
+                       test_commit B &&
+
+                       git rev-list --objects --no-object-names HEAD^ >A.objects &&
+                       git rev-list --objects --no-object-names HEAD^.. >B.objects &&
+
+                       A=$(git pack-objects $objdir/pack/pack <A.objects) &&
+                       B=$(git pack-objects $objdir/pack/pack <B.objects) &&
+
+                       cat >indexes <<-EOF &&
+                       pack-$A.idx
+                       pack-$B.idx
+                       EOF
+
+                       git multi-pack-index write --bitmap --stdin-packs \
+                               --preferred-pack=pack-$A.pack <indexes &&
+                       git rev-list --test-bitmap A &&
+
+                       git multi-pack-index write --bitmap --stdin-packs \
+                               --preferred-pack=pack-$B.pack <indexes &&
+                       git rev-list --test-bitmap A
+               )
+       '
+}
+
+midx_bitmap_partial_tests () {
+       rev_kind="${1:-midx}"
+
+       test_expect_success 'setup partial bitmaps' '
+               test_commit packed &&
+               git repack &&
+               test_commit loose &&
+               git multi-pack-index write --bitmap 2>err &&
+               test_path_is_file $midx &&
+               test_path_is_file $midx-$(midx_checksum $objdir).bitmap
+       '
+
+       test_rev_exists HEAD~ "$rev_kind"
+
+       basic_bitmap_tests HEAD~
+}
diff --git a/t/lib-commit-graph.sh b/t/lib-commit-graph.sh
new file mode 100755 (executable)
index 0000000..5d79e1a
--- /dev/null
@@ -0,0 +1,58 @@
+#!/bin/sh
+
+# Helper functions for testing commit-graphs.
+
+# Initialize OID cache with oid_version
+test_oid_cache <<-EOF
+oid_version sha1:1
+oid_version sha256:2
+EOF
+
+graph_git_two_modes() {
+       git -c core.commitGraph=true $1 >output &&
+       git -c core.commitGraph=false $1 >expect &&
+       test_cmp expect output
+}
+
+graph_git_behavior() {
+       MSG=$1
+       DIR=$2
+       BRANCH=$3
+       COMPARE=$4
+       test_expect_success "check normal git operations: $MSG" '
+               cd "$TRASH_DIRECTORY/$DIR" &&
+               graph_git_two_modes "log --oneline $BRANCH" &&
+               graph_git_two_modes "log --topo-order $BRANCH" &&
+               graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
+               graph_git_two_modes "branch -vv" &&
+               graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
+       '
+}
+
+graph_read_expect() {
+       OPTIONAL=""
+       NUM_CHUNKS=3
+       if test -n "$2"
+       then
+               OPTIONAL=" $2"
+               NUM_CHUNKS=$((3 + $(echo "$2" | wc -w)))
+       fi
+       GENERATION_VERSION=2
+       if test -n "$3"
+       then
+               GENERATION_VERSION=$3
+       fi
+       OPTIONS=
+       if test $GENERATION_VERSION -gt 1
+       then
+               OPTIONS=" read_generation_data"
+       fi
+       cat >expect <<- EOF
+       header: 43475048 1 $(test_oid oid_version) $NUM_CHUNKS 0
+       num_commits: $1
+       chunks: oid_fanout oid_lookup commit_metadata$OPTIONAL
+       options:$OPTIONS
+       EOF
+       test-tool read-graph >output &&
+       test_cmp expect output
+}
index 3e7ee1386aa9fcb572652dc38768d099cdfc8368..114785586abde524fb13cb29e4b1f357ae9a3286 100644 (file)
@@ -40,7 +40,7 @@ test_lazy_prereq GPG '
                #               > lib-gpg/ownertrust
                mkdir "$GNUPGHOME" &&
                chmod 0700 "$GNUPGHOME" &&
-               (gpgconf --kill gpg-agent || : ) &&
+               (gpgconf --kill all || : ) &&
                gpg --homedir "${GNUPGHOME}" --import \
                        "$TEST_DIRECTORY"/lib-gpg/keyring.gpg &&
                gpg --homedir "${GNUPGHOME}" --import-ownertrust \
@@ -72,12 +72,11 @@ test_lazy_prereq GPGSM '
                --passphrase-fd 0 --pinentry-mode loopback \
                --import "$TEST_DIRECTORY"/lib-gpg/gpgsm_cert.p12 &&
 
-       gpgsm --homedir "${GNUPGHOME}" -K |
-       grep fingerprint: |
-       cut -d" " -f4 |
-       tr -d "\\n" >"${GNUPGHOME}/trustlist.txt" &&
+       gpgsm --homedir "${GNUPGHOME}" -K --with-colons |
+       awk -F ":" "/^fpr:/ {printf \"%s S relax\\n\", \$10}" \
+               >"${GNUPGHOME}/trustlist.txt" &&
+       (gpgconf --reload all || : ) &&
 
-       echo " S relax" >>"${GNUPGHOME}/trustlist.txt" &&
        echo hello | gpgsm --homedir "${GNUPGHOME}" >/dev/null \
               -u committer@example.com -o /dev/null --sign -
 '
index 168329adbc4edeedc98501575ccc9b9c81f0c061..2da25b314499c33166fa65b0996d9ac5ee5aad35 100644 (file)
@@ -3,21 +3,21 @@
 mkdir Z
 for a in N D M
 do
-    for b in N D M
-    do
-        p=$a$b
+       for b in N D M
+       do
+               p=$a$b
        echo This is $p from the original tree. >$p
        echo This is Z/$p from the original tree. >Z/$p
-       test_expect_success \
-           "adding test file $p and Z/$p" \
-           'git update-index --add $p &&
-           git update-index --add Z/$p'
+       test_expect_success "adding test file $p and Z/$p" '
+           git update-index --add $p &&
+           git update-index --add Z/$p
+    '
     done
 done
 echo This is SS from the original tree. >SS
-test_expect_success \
-    'adding test file SS' \
-    'git update-index --add SS'
+test_expect_success 'adding test file SS' '
+       git update-index --add SS
+'
 cat >TT <<\EOF
 This is a trivial merge sample text.
 Branch A is expected to upcase this word, here.
@@ -30,12 +30,12 @@ At the very end, here comes another line, that is
 the word, expected to be upcased by Branch B.
 This concludes the trivial merge sample file.
 EOF
-test_expect_success \
-    'adding test file TT' \
-    'git update-index --add TT'
-test_expect_success \
-    'prepare initial tree' \
-    'tree_O=$(git write-tree)'
+test_expect_success 'adding test file TT' '
+       git update-index --add TT
+'
+test_expect_success 'prepare initial tree' '
+       tree_O=$(git write-tree)
+'
 
 ################################################################
 # Branch A and B makes the changes according to the above matrix.
@@ -45,48 +45,48 @@ test_expect_success \
 
 to_remove=$(echo D? Z/D?)
 rm -f $to_remove
-test_expect_success \
-    'change in branch A (removal)' \
-    'git update-index --remove $to_remove'
+test_expect_success 'change in branch A (removal)' '
+       git update-index --remove $to_remove
+'
 
 for p in M? Z/M?
 do
-    echo This is modified $p in the branch A. >$p
-    test_expect_success \
-       'change in branch A (modification)' \
-        "git update-index $p"
+       echo This is modified $p in the branch A. >$p
+       test_expect_success 'change in branch A (modification)' '
+               git update-index $p
+       '
 done
 
 for p in AN AA Z/AN Z/AA
 do
-    echo This is added $p in the branch A. >$p
-    test_expect_success \
-       'change in branch A (addition)' \
-       "git update-index --add $p"
+       echo This is added $p in the branch A. >$p
+       test_expect_success 'change in branch A (addition)' '
+               git update-index --add $p
+       '
 done
 
 echo This is SS from the modified tree. >SS
 echo This is LL from the modified tree. >LL
-test_expect_success \
-    'change in branch A (addition)' \
-    'git update-index --add LL &&
-     git update-index SS'
+test_expect_success 'change in branch A (addition)' '
+       git update-index --add LL &&
+       git update-index SS
+'
 mv TT TT-
 sed -e '/Branch A/s/word/WORD/g' <TT- >TT
 rm -f TT-
-test_expect_success \
-    'change in branch A (edit)' \
-    'git update-index TT'
+test_expect_success 'change in branch A (edit)' '
+       git update-index TT
+'
 
 mkdir DF
 echo Branch A makes a file at DF/DF, creating a directory DF. >DF/DF
-test_expect_success \
-    'change in branch A (change file to directory)' \
-    'git update-index --add DF/DF'
+test_expect_success 'change in branch A (change file to directory)' '
+       git update-index --add DF/DF
+'
 
-test_expect_success \
-    'recording branch A tree' \
-    'tree_A=$(git write-tree)'
+test_expect_success 'recording branch A tree' '
+       tree_A=$(git write-tree)
+'
 
 ################################################################
 # Branch B
@@ -94,65 +94,65 @@ test_expect_success \
 
 rm -rf [NDMASLT][NDMASLT] Z DF
 mkdir Z
-test_expect_success \
-    'reading original tree and checking out' \
-    'git read-tree $tree_O &&
-     git checkout-index -a'
+test_expect_success 'reading original tree and checking out' '
+       git read-tree $tree_O &&
+       git checkout-index -a
+'
 
 to_remove=$(echo ?D Z/?D)
 rm -f $to_remove
-test_expect_success \
-    'change in branch B (removal)' \
-    "git update-index --remove $to_remove"
+test_expect_success 'change in branch B (removal)' '
+       git update-index --remove $to_remove
+'
 
 for p in ?M Z/?M
 do
-    echo This is modified $p in the branch B. >$p
-    test_expect_success \
-       'change in branch B (modification)' \
-       "git update-index $p"
+       echo This is modified $p in the branch B. >$p
+       test_expect_success 'change in branch B (modification)' '
+               git update-index $p
+       '
 done
 
 for p in NA AA Z/NA Z/AA
 do
-    echo This is added $p in the branch B. >$p
-    test_expect_success \
-       'change in branch B (addition)' \
-       "git update-index --add $p"
+       echo This is added $p in the branch B. >$p
+       test_expect_success 'change in branch B (addition)' '
+               git update-index --add $p
+       '
 done
 echo This is SS from the modified tree. >SS
 echo This is LL from the modified tree. >LL
-test_expect_success \
-    'change in branch B (addition and modification)' \
-    'git update-index --add LL &&
-     git update-index SS'
+test_expect_success 'change in branch B (addition and modification)' '
+       git update-index --add LL &&
+       git update-index SS
+'
 mv TT TT-
 sed -e '/Branch B/s/word/WORD/g' <TT- >TT
 rm -f TT-
-test_expect_success \
-    'change in branch B (modification)' \
-    'git update-index TT'
+test_expect_success 'change in branch B (modification)' '
+       git update-index TT
+'
 
 echo Branch B makes a file at DF. >DF
-test_expect_success \
-    'change in branch B (addition of a file to conflict with directory)' \
-    'git update-index --add DF'
-
-test_expect_success \
-    'recording branch B tree' \
-    'tree_B=$(git write-tree)'
-
-test_expect_success \
-    'keep contents of 3 trees for easy access' \
-    'rm -f .git/index &&
-     git read-tree $tree_O &&
-     mkdir .orig-O &&
-     git checkout-index --prefix=.orig-O/ -f -q -a &&
-     rm -f .git/index &&
-     git read-tree $tree_A &&
-     mkdir .orig-A &&
-     git checkout-index --prefix=.orig-A/ -f -q -a &&
-     rm -f .git/index &&
-     git read-tree $tree_B &&
-     mkdir .orig-B &&
-     git checkout-index --prefix=.orig-B/ -f -q -a'
+test_expect_success 'change in branch B (addition of a file to conflict with directory)' '
+       git update-index --add DF
+'
+
+test_expect_success 'recording branch B tree' '
+       tree_B=$(git write-tree)
+'
+
+test_expect_success 'keep contents of 3 trees for easy access' '
+       rm -f .git/index &&
+       git read-tree $tree_O &&
+       mkdir .orig-O &&
+       git checkout-index --prefix=.orig-O/ -f -q -a &&
+       rm -f .git/index &&
+       git read-tree $tree_A &&
+       mkdir .orig-A &&
+       git checkout-index --prefix=.orig-A/ -f -q -a &&
+       rm -f .git/index &&
+       git read-tree $tree_B &&
+       mkdir .orig-B &&
+       git checkout-index --prefix=.orig-B/ -f -q -a
+'
index 2465770a7825b4f360d649df3684c5339c8ce657..e4808aebed08bfb87d0cc9ab6ccd2a70eee3c84e 100644 (file)
@@ -1,3 +1,6 @@
+# Import tree-wide shared Makefile behavior and libraries
+include ../../shared.mak
+
 -include ../../config.mak
 export GIT_TEST_OPTIONS
 
diff --git a/t/perf/p1006-cat-file.sh b/t/perf/p1006-cat-file.sh
new file mode 100755 (executable)
index 0000000..dcd8015
--- /dev/null
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+test_description='Tests listing object info performance'
+. ./perf-lib.sh
+
+test_perf_large_repo
+
+test_perf 'cat-file --batch-check' '
+       git cat-file --batch-all-objects --batch-check
+'
+
+test_done
index cb777c74a24f55624604f782675d3356365a37fb..382716cfca909e82c0bc5bf04e3bb3726dc2f9f1 100755 (executable)
@@ -117,5 +117,8 @@ test_perf_on_all git diff
 test_perf_on_all git diff --cached
 test_perf_on_all git blame $SPARSE_CONE/a
 test_perf_on_all git blame $SPARSE_CONE/f3/a
+test_perf_on_all git read-tree -mu HEAD
+test_perf_on_all git checkout-index -f --all
+test_perf_on_all git update-index --add --remove $SPARSE_CONE/a
 
 test_done
index c8be58f3c763beb7b890925251300494365b3900..0b9129ca7bc55a61d3692834fe44940214669244 100755 (executable)
@@ -72,7 +72,7 @@ then
        fi
 fi
 
-trace_start() {
+trace_start () {
        if test -n "$GIT_PERF_7519_TRACE"
        then
                name="$1"
@@ -91,13 +91,20 @@ trace_start() {
        fi
 }
 
-trace_stop() {
+trace_stop () {
        if test -n "$GIT_PERF_7519_TRACE"
        then
                unset GIT_TRACE2_PERF
        fi
 }
 
+touch_files () {
+       n=$1 &&
+       d="$n"_files &&
+
+       (cd $d && test_seq 1 $n | xargs touch )
+}
+
 test_expect_success "one time repo setup" '
        # set untrackedCache depending on the environment
        if test -n "$GIT_PERF_7519_UNTRACKED_CACHE"
@@ -119,10 +126,11 @@ test_expect_success "one time repo setup" '
        fi &&
 
        mkdir 1_file 10_files 100_files 1000_files 10000_files &&
-       for i in $(test_seq 1 10); do touch 10_files/$i || return 1; done &&
-       for i in $(test_seq 1 100); do touch 100_files/$i || return 1; done &&
-       for i in $(test_seq 1 1000); do touch 1000_files/$i || return 1; done &&
-       for i in $(test_seq 1 10000); do touch 10000_files/$i || return 1; done &&
+       : 1_file directory should be left empty &&
+       touch_files 10 &&
+       touch_files 100 &&
+       touch_files 1000 &&
+       touch_files 10000 &&
        git add 1_file 10_files 100_files 1000_files 10000_files &&
        git commit -qm "Add files" &&
 
@@ -133,7 +141,7 @@ test_expect_success "one time repo setup" '
        fi
 '
 
-setup_for_fsmonitor() {
+setup_for_fsmonitor_hook () {
        # set INTEGRATION_SCRIPT depending on the environment
        if test -n "$INTEGRATION_PATH"
        then
@@ -173,8 +181,12 @@ test_perf_w_drop_caches () {
        test_perf "$@"
 }
 
-test_fsmonitor_suite() {
-       if test -n "$INTEGRATION_SCRIPT"; then
+test_fsmonitor_suite () {
+       if test -n "$USE_FSMONITOR_DAEMON"
+       then
+               DESC="builtin fsmonitor--daemon"
+       elif test -n "$INTEGRATION_SCRIPT"
+       then
                DESC="fsmonitor=$(basename $INTEGRATION_SCRIPT)"
        else
                DESC="fsmonitor=disabled"
@@ -199,15 +211,15 @@ test_fsmonitor_suite() {
 
        # Update the mtimes on upto 100k files to make status think
        # that they are dirty.  For simplicity, omit any files with
-       # LFs (i.e. anything that ls-files thinks it needs to dquote).
-       # Then fully backslash-quote the paths to capture any
-       # whitespace so that they pass thru xargs properly.
+       # LFs (i.e. anything that ls-files thinks it needs to dquote)
+       # and any files with whitespace so that they pass thru xargs
+       # properly.
        #
        test_perf_w_drop_caches "status (dirty) ($DESC)" '
                git ls-files | \
                        head -100000 | \
                        grep -v \" | \
-                       sed '\''s/\(.\)/\\\1/g'\'' | \
+                       grep -v " ." | \
                        xargs test-tool chmtime -300 &&
                git status
        '
@@ -253,11 +265,11 @@ test_fsmonitor_suite() {
 trace_start fsmonitor-watchman
 if test -n "$GIT_PERF_7519_FSMONITOR"; then
        for INTEGRATION_PATH in $GIT_PERF_7519_FSMONITOR; do
-               test_expect_success "setup for fsmonitor $INTEGRATION_PATH" 'setup_for_fsmonitor'
+               test_expect_success "setup for fsmonitor $INTEGRATION_PATH" 'setup_for_fsmonitor_hook'
                test_fsmonitor_suite
        done
 else
-       test_expect_success "setup for fsmonitor" 'setup_for_fsmonitor'
+       test_expect_success "setup for fsmonitor hook" 'setup_for_fsmonitor_hook'
        test_fsmonitor_suite
 fi
 
@@ -285,4 +297,30 @@ test_expect_success "setup without fsmonitor" '
 test_fsmonitor_suite
 trace_stop
 
+#
+# Run a full set of perf tests using the built-in fsmonitor--daemon.
+# It does not use the Hook API, so it has a different setup.
+# Explicitly start the daemon here and before we start client commands
+# so that we can later add custom tracing.
+#
+if test_have_prereq FSMONITOR_DAEMON
+then
+       USE_FSMONITOR_DAEMON=t
+
+       test_expect_success "setup for builtin fsmonitor" '
+               trace_start fsmonitor--daemon--server &&
+               git fsmonitor--daemon start &&
+
+               trace_start fsmonitor--daemon--client &&
+
+               git config core.fsmonitor true &&
+               git update-index --fsmonitor
+       '
+
+       test_fsmonitor_suite
+
+       git fsmonitor--daemon stop
+       trace_stop
+fi
+
 test_done
index 407252bac70fbfc7b3a30fe29833f5944b3de8a5..932105cd12c9331362e86030df6d3b10af7f2dac 100644 (file)
@@ -78,7 +78,7 @@ test_perf_copy_repo_contents () {
        for stuff in "$1"/*
        do
                case "$stuff" in
-               */objects|*/hooks|*/config|*/commondir|*/gitdir|*/worktrees)
+               */objects|*/hooks|*/config|*/commondir|*/gitdir|*/worktrees|*/fsmonitor--daemon*)
                        ;;
                *)
                        cp -R "$stuff" "$repo/.git/" || exit 1
index b007f0efef26294d2aa0a0665d37d522eb60f103..17a268ccd1b014201e25c810ebade41f6f31aecf 100755 (executable)
@@ -101,6 +101,19 @@ test_expect_success 'subtest: 2/3 tests passing' '
        EOF
 '
 
+test_expect_success 'subtest: --immediate' '
+       run_sub_test_lib_test_err partial-pass \
+               --immediate &&
+       check_sub_test_lib_test_err partial-pass \
+               <<-\EOF_OUT 3<<-EOF_ERR
+       > ok 1 - passing test #1
+       > not ok 2 - failing test #2
+       > #     false
+       > 1..2
+       EOF_OUT
+       EOF_ERR
+'
+
 test_expect_success 'subtest: a failing TODO test' '
        write_and_run_sub_test_lib_test failing-todo <<-\EOF &&
        test_expect_success "passing test" "true"
@@ -1089,7 +1102,8 @@ test_expect_success 'update-index D/F conflict' '
        mv path2 path0 &&
        mv tmp path2 &&
        git update-index --add --replace path2 path0/file2 &&
-       numpath0=$(git ls-files path0 | wc -l) &&
+       git ls-files path0 >tmp &&
+       numpath0=$(wc -l <tmp) &&
        test $numpath0 = 1
 '
 
@@ -1103,13 +1117,14 @@ test_expect_success 'very long name in the index handled sanely' '
 
        >path4 &&
        git update-index --add path4 &&
+       git ls-files -s path4 >tmp &&
        (
-               git ls-files -s path4 |
-               sed -e "s/      .*/     /" |
+               sed -e "s/      .*/     /" tmp |
                tr -d "\012" &&
                echo "$a"
        ) | git update-index --index-info &&
-       len=$(git ls-files "a*" | wc -c) &&
+       git ls-files "a*" >tmp &&
+       len=$(wc -c <tmp) &&
        test $len = 4098
 '
 
index 3235ab4d53c9dfc282155f1da2caa44d7f40962c..d479303efa03df6f818496f1cdcafe390bee0126 100755 (executable)
@@ -6,7 +6,8 @@ TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 check_config () {
-       if test -d "$1" && test -f "$1/config" && test -d "$1/refs"
+       if test_path_is_dir "$1" &&
+          test_path_is_file "$1/config" && test_path_is_dir "$1/refs"
        then
                : happy
        else
index 76052cb5620bebd4965370077a303d3f633154fc..f6356db183b98c5c29acdb4b03dcb453533a5728 100755 (executable)
@@ -65,9 +65,11 @@ test_expect_success 'check commit-tree' '
        test_path_is_file "$REAL/objects/$(objpath $SHA)"
 '
 
-test_expect_success 'check rev-list' '
+test_expect_success !SANITIZE_LEAK 'check rev-list' '
        git update-ref "HEAD" "$SHA" &&
-       test "$SHA" = "$(git rev-list HEAD)"
+       git rev-list HEAD >actual &&
+       echo $SHA >expected &&
+       test_cmp expected actual
 '
 
 test_expect_success 'setup_git_dir twice in subdir' '
index 167a31ce8ba008ba0b5b1bb4670343f9359a9856..d6c6f9e5c6efe9c51caa18d409c5c8d714fdb2f2 100755 (executable)
@@ -205,15 +205,18 @@ test_expect_success 'attribute test: read paths from stdin' '
 test_expect_success 'attribute test: --all option' '
        grep -v unspecified <expect-all | sort >specified-all &&
        sed -e "s/:.*//" <expect-all | uniq >stdin-all &&
-       git check-attr --stdin --all <stdin-all | sort >actual &&
+       git check-attr --stdin --all <stdin-all >tmp &&
+       sort tmp >actual &&
        test_cmp specified-all actual
 '
 
 test_expect_success 'attribute test: --cached option' '
-       git check-attr --cached --stdin --all <stdin-all | sort >actual &&
+       git check-attr --cached --stdin --all <stdin-all >tmp &&
+       sort tmp >actual &&
        test_must_be_empty actual &&
        git add .gitattributes a/.gitattributes a/b/.gitattributes &&
-       git check-attr --cached --stdin --all <stdin-all | sort >actual &&
+       git check-attr --cached --stdin --all <stdin-all >tmp &&
+       sort tmp >actual &&
        test_cmp specified-all actual
 '
 
index 794186961eebcc0edc8442b8d730287a5ff2c67a..2490162071e700e8a69d0e6311b6f22eda4e7046 100755 (executable)
@@ -1,6 +1,8 @@
 #!/bin/sh
 
 test_description='test date parsing and printing'
+
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 # arbitrary reference time: 2009-08-30 19:20:00
index 91b68c74a154a97c50f1011ebf5ec70c2ce66a33..6c3e1f7159d4dcc6a2e61228fa7c4f3cec42ef3b 100755 (executable)
@@ -35,6 +35,9 @@ test_expect_success 'basic help commands' '
 '
 
 test_expect_success 'invalid usage' '
+       test_expect_code 129 git help -a add &&
+       test_expect_code 129 git help --all add &&
+
        test_expect_code 129 git help -g add &&
        test_expect_code 129 git help -a -c &&
 
@@ -46,6 +49,29 @@ test_expect_success 'invalid usage' '
        test_expect_code 129 git help --config-sections-for-completion add
 '
 
+for opt in '-a' '-g' '-c' '--config-for-completion' '--config-sections-for-completion'
+do
+       test_expect_success "invalid usage of '$opt' with [-i|-m|-w]" '
+               git help $opt &&
+               test_expect_code 129 git help $opt -i &&
+               test_expect_code 129 git help $opt -m &&
+               test_expect_code 129 git help $opt -w
+       '
+
+       if test "$opt" = "-a"
+       then
+               continue
+       fi
+
+       test_expect_success "invalid usage of '$opt' with --no-external-commands" '
+               test_expect_code 129 git help $opt --no-external-commands
+       '
+
+       test_expect_success "invalid usage of '$opt' with --no-aliases" '
+               test_expect_code 129 git help $opt --no-external-commands
+       '
+done
+
 test_expect_success "works for commands and guides by default" '
        configure_help &&
        git help status &&
@@ -138,14 +164,87 @@ test_expect_success 'git help --config-sections-for-completion' '
        test_cmp human.munged sections
 '
 
+test_section_spacing () {
+       cat >expect &&
+       "$@" >out &&
+       grep -E "(^[^ ]|^$)" out >actual
+}
+
+test_section_spacing_trailer () {
+       test_section_spacing "$@" &&
+       test_expect_code 1 git >out &&
+       sed -n '/list available subcommands/,$p' <out >>expect
+}
+
+
+for cmd in git "git help"
+do
+       test_expect_success "'$cmd' section spacing" '
+               test_section_spacing_trailer git help <<-\EOF &&
+               usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]
+
+               These are common Git commands used in various situations:
+
+               start a working area (see also: git help tutorial)
+
+               work on the current change (see also: git help everyday)
+
+               examine the history and state (see also: git help revisions)
+
+               grow, mark and tweak your common history
+
+               collaborate (see also: git help workflows)
+
+               EOF
+               test_cmp expect actual
+       '
+done
+
+test_expect_success "'git help -a' section spacing" '
+       test_section_spacing \
+               git help -a --no-external-commands --no-aliases <<-\EOF &&
+       See '\''git help <command>'\'' to read about a specific subcommand
+
+       Main Porcelain Commands
+
+       Ancillary Commands / Manipulators
+
+       Ancillary Commands / Interrogators
+
+       Interacting with Others
+
+       Low-level Commands / Manipulators
+
+       Low-level Commands / Interrogators
+
+       Low-level Commands / Syncing Repositories
+
+       Low-level Commands / Internal Helpers
+       EOF
+       test_cmp expect actual
+'
+
+test_expect_success "'git help -g' section spacing" '
+       test_section_spacing_trailer git help -g <<-\EOF &&
+       The Git concept guides are:
+
+       EOF
+       test_cmp expect actual
+'
+
 test_expect_success 'generate builtin list' '
+       mkdir -p sub &&
        git --list-cmds=builtins >builtins
 '
 
 while read builtin
 do
        test_expect_success "$builtin can handle -h" '
-               test_expect_code 129 git $builtin -h >output 2>&1 &&
+               (
+                       GIT_CEILING_DIRECTORIES=$(pwd) &&
+                       export GIT_CEILING_DIRECTORIES &&
+                       test_expect_code 129 git -C sub $builtin -h >output 2>&1
+               ) &&
                test_i18ngrep usage output
        '
 done <builtins
index 291e9061f39df557f5cbb3eee2e03d90d547bce5..086822fc45b66c8caf6aff43af86da2a466618ac 100755 (executable)
@@ -15,7 +15,7 @@ test_expect_success 'test basic SHA-1 hash values' '
        grep c12252ceda8be8994d5fa0290a47231c1d16aae3 actual &&
        printf "abcdefghijklmnopqrstuvwxyz" | test-tool sha1 >actual &&
        grep 32d10c7b8cf96570ca04ce37f2a19d84240d3a89 actual &&
-       perl -e "$| = 1; print q{aaaaaaaaaa} for 1..100000;" | \
+       perl -e "$| = 1; print q{aaaaaaaaaa} for 1..100000;" |
                test-tool sha1 >actual &&
        grep 34aa973cd4c4daa4f61eeb2bdbad27316534016f actual &&
        printf "blob 0\0" | test-tool sha1 >actual &&
@@ -38,10 +38,10 @@ test_expect_success 'test basic SHA-256 hash values' '
        printf "abcdefghijklmnopqrstuvwxyz" | test-tool sha256 >actual &&
        grep 71c480df93d6ae2f1efad1447c66c9525e316218cf51fc8d9ed832f2daf18b73 actual &&
        # Try to exercise the chunking code by turning autoflush on.
-       perl -e "$| = 1; print q{aaaaaaaaaa} for 1..100000;" | \
+       perl -e "$| = 1; print q{aaaaaaaaaa} for 1..100000;" |
                test-tool sha256 >actual &&
        grep cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0 actual &&
-       perl -e "$| = 1; print q{abcdefghijklmnopqrstuvwxyz} for 1..100000;" | \
+       perl -e "$| = 1; print q{abcdefghijklmnopqrstuvwxyz} for 1..100000;" |
                test-tool sha256 >actual &&
        grep e406ba321ca712ad35a698bf0af8d61fc4dc40eca6bdcea4697962724ccbde35 actual &&
        printf "blob 0\0" | test-tool sha256 >actual &&
index c1a331e9e939fa975ba038934e885bb2fe93b63c..9fe98912511d3b6cb050aa51e33906caf7fb51c5 100755 (executable)
@@ -24,8 +24,8 @@ test_expect_success setup '
 
 test_expect_success 'diff -M' '
 
-       git diff-tree -M -r --name-status HEAD^ HEAD |
-       sed -e "s/R[0-9]*/RNUM/" >actual &&
+       git diff-tree -M -r --name-status HEAD^ HEAD >tmp &&
+       sed -e "s/R[0-9]*/RNUM/" tmp >actual &&
        echo "RNUM      sample  elpmas" >expect &&
        test_cmp expect actual
 
index 81447978b7f66a7a2169341f0b6da649e106e8bd..f7202c192e7b63e07c904fe9dcf1b76252d8808d 100755 (executable)
@@ -22,8 +22,8 @@ test_expect_success 'renormalize CRLF in repo' '
        i/lf w/lf attr/text=auto LF.txt
        i/lf w/mixed attr/text=auto CRLF_mix_LF.txt
        EOF
-       git ls-files --eol |
-       sed -e "s/      / /g" -e "s/  */ /g" |
+       git ls-files --eol >tmp &&
+       sed -e "s/      / /g" -e "s/  */ /g" tmp |
        sort >actual &&
        test_cmp expect actual
 '
index 4a5c5c602cfa8f53ecb9e329a20e67a008fb0e00..0feb41a23f2c27db155fc49b6fb3ff7f9106cc53 100755 (executable)
@@ -311,8 +311,8 @@ checkout_files () {
                i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__CRLF_nul.txt
                i/-text w/$(stats_ascii $crlfnul) attr/$(attr_ascii $attr $aeol) crlf_false_attr__LF_nul.txt
                EOF
-               git ls-files --eol crlf_false_attr__* |
-               sed -e "s/      / /g" -e "s/  */ /g" |
+               git ls-files --eol crlf_false_attr__* >tmp &&
+               sed -e "s/      / /g" -e "s/  */ /g" tmp |
                sort >actual &&
                test_cmp expect actual
        '
@@ -359,12 +359,12 @@ test_expect_success 'ls-files --eol -o Text/Binary' '
        i/ w/crlf TeBi_126_CL
        i/ w/-text TeBi_126_CLC
        EOF
-       git ls-files --eol -o |
+       git ls-files --eol -o >tmp &&
        sed -n -e "/TeBi_/{s!attr/[     ]*!!g
        s!      ! !g
        s!  *! !g
        p
-       }" | sort >actual &&
+       }" tmp | sort >actual &&
        test_cmp expect actual
 '
 
@@ -597,6 +597,12 @@ do
        # auto: core.autocrlf=false and core.eol unset(or native) uses native eol
        checkout_files     auto  "$id" ""     false   ""       $NL   CRLF  CRLF_mix_LF  LF_mix_CR    LF_nul
        checkout_files     auto  "$id" ""     false   native   $NL   CRLF  CRLF_mix_LF  LF_mix_CR    LF_nul
+       # core.autocrlf false, .gitattributes sets eol
+       checkout_files     ""    "$id" "lf"   false   ""       LF    CRLF  CRLF_mix_LF  LF_mix_CR    LF_nul
+       checkout_files     ""    "$id" "crlf" false   ""       CRLF  CRLF  CRLF         CRLF_mix_CR  CRLF_nul
+       # core.autocrlf true, .gitattributes sets eol
+       checkout_files     ""    "$id" "lf"   true    ""       LF    CRLF  CRLF_mix_LF  LF_mix_CR    LF_nul
+       checkout_files     ""    "$id" "crlf" true    ""       CRLF  CRLF  CRLF         CRLF_mix_CR  CRLF_nul
 done
 
 # The rest of the tests are unique; do the usual linting.
@@ -611,8 +617,8 @@ test_expect_success 'ls-files --eol -d -z' '
        i/lf w/ crlf_false_attr__LF.txt
        i/mixed w/ crlf_false_attr__CRLF_mix_LF.txt
        EOF
-       git ls-files --eol -d |
-       sed -e "s!attr/[^       ]*!!g" -e "s/   / /g" -e "s/  */ /g" |
+       git ls-files --eol -d >tmp &&
+       sed -e "s!attr/[^       ]*!!g" -e "s/   / /g" -e "s/  */ /g" tmp |
        sort >actual &&
        test_cmp expect actual
 '
index b138e1d9cbcd9c459e8e1ce3849a199cb177f57b..4e8e90dd9824b33bd4420423a447decea46e848e 100755 (executable)
@@ -12,8 +12,7 @@ then
 fi
 
 test_expect_success 'setup' '
-       mkdir -p "$TRASH_DIRECTORY/.git/hooks" &&
-       write_script "$TRASH_DIRECTORY/.git/hooks/pre-commit" <<-\EOF
+       test_hook --setup pre-commit <<-\EOF
        echo $HOBBES >&2
        EOF
 '
index ae1ca380c1aa54709a557374d08a700337759b75..0a5713c5248280d88a241b8027b5c98e4f321718 100755 (executable)
@@ -13,6 +13,10 @@ s40='                                        '
 sss="$s40$s40$s40$s40$s40$s40$s40$s40$s40$s40" # 400
 ttt="$t40$t40$t40$t40$t40$t40$t40$t40$t40$t40" # 400
 
+printf_git_stripspace () {
+    printf "$1" | git stripspace
+}
+
 test_expect_success \
     'long lines without spaces should be unchanged' '
     echo "$ttt" >expect &&
@@ -225,32 +229,38 @@ test_expect_success \
 
 test_expect_success \
     'text without newline at end should end with newline' '
-    test $(printf "$ttt" | git stripspace | wc -l) -gt 0 &&
-    test $(printf "$ttt$ttt" | git stripspace | wc -l) -gt 0 &&
-    test $(printf "$ttt$ttt$ttt" | git stripspace | wc -l) -gt 0 &&
-    test $(printf "$ttt$ttt$ttt$ttt" | git stripspace | wc -l) -gt 0
+    test_stdout_line_count -gt 0 printf_git_stripspace "$ttt" &&
+    test_stdout_line_count -gt 0 printf_git_stripspace "$ttt$ttt" &&
+    test_stdout_line_count -gt 0 printf_git_stripspace "$ttt$ttt$ttt" &&
+    test_stdout_line_count -gt 0 printf_git_stripspace "$ttt$ttt$ttt$ttt"
 '
 
 # text plus spaces at the end:
 
 test_expect_success \
     'text plus spaces without newline at end should end with newline' '
-    test $(printf "$ttt$sss" | git stripspace | wc -l) -gt 0 &&
-    test $(printf "$ttt$ttt$sss" | git stripspace | wc -l) -gt 0 &&
-    test $(printf "$ttt$ttt$ttt$sss" | git stripspace | wc -l) -gt 0 &&
-    test $(printf "$ttt$sss$sss" | git stripspace | wc -l) -gt 0 &&
-    test $(printf "$ttt$ttt$sss$sss" | git stripspace | wc -l) -gt 0 &&
-    test $(printf "$ttt$sss$sss$sss" | git stripspace | wc -l) -gt 0
+    test_stdout_line_count -gt 0 printf_git_stripspace "$ttt$sss" &&
+    test_stdout_line_count -gt 0 printf_git_stripspace "$ttt$ttt$sss" &&
+    test_stdout_line_count -gt 0 printf_git_stripspace "$ttt$ttt$ttt$sss" &&
+    test_stdout_line_count -gt 0 printf_git_stripspace "$ttt$sss$sss" &&
+    test_stdout_line_count -gt 0 printf_git_stripspace "$ttt$ttt$sss$sss" &&
+    test_stdout_line_count -gt 0 printf_git_stripspace "$ttt$sss$sss$sss"
 '
 
 test_expect_success \
     'text plus spaces without newline at end should not show spaces' '
-    ! (printf "$ttt$sss" | git stripspace | grep "  " >/dev/null) &&
-    ! (printf "$ttt$ttt$sss" | git stripspace | grep "  " >/dev/null) &&
-    ! (printf "$ttt$ttt$ttt$sss" | git stripspace | grep "  " >/dev/null) &&
-    ! (printf "$ttt$sss$sss" | git stripspace | grep "  " >/dev/null) &&
-    ! (printf "$ttt$ttt$sss$sss" | git stripspace | grep "  " >/dev/null) &&
-    ! (printf "$ttt$sss$sss$sss" | git stripspace | grep "  " >/dev/null)
+    printf "$ttt$sss" | git stripspace >tmp &&
+    ! grep "  " tmp >/dev/null &&
+    printf "$ttt$ttt$sss" | git stripspace >tmp &&
+    ! grep "  " tmp >/dev/null &&
+    printf "$ttt$ttt$ttt$sss" | git stripspace >tmp &&
+    ! grep "  " tmp >/dev/null &&
+    printf "$ttt$sss$sss" | git stripspace >tmp &&
+    ! grep "  " tmp >/dev/null &&
+    printf "$ttt$ttt$sss$sss" | git stripspace >tmp &&
+    ! grep "  " tmp >/dev/null &&
+    printf "$ttt$sss$sss$sss" | git stripspace >tmp &&
+    ! grep "  " tmp >/dev/null
 '
 
 test_expect_success \
@@ -282,12 +292,18 @@ test_expect_success \
 
 test_expect_success \
     'text plus spaces at end should not show spaces' '
-    ! (echo "$ttt$sss" | git stripspace | grep "  " >/dev/null) &&
-    ! (echo "$ttt$ttt$sss" | git stripspace | grep "  " >/dev/null) &&
-    ! (echo "$ttt$ttt$ttt$sss" | git stripspace | grep "  " >/dev/null) &&
-    ! (echo "$ttt$sss$sss" | git stripspace | grep "  " >/dev/null) &&
-    ! (echo "$ttt$ttt$sss$sss" | git stripspace | grep "  " >/dev/null) &&
-    ! (echo "$ttt$sss$sss$sss" | git stripspace | grep "  " >/dev/null)
+    echo "$ttt$sss" | git stripspace >tmp &&
+    ! grep "  " tmp >/dev/null &&
+    echo "$ttt$ttt$sss" | git stripspace >tmp &&
+    ! grep "  " tmp >/dev/null &&
+    echo "$ttt$ttt$ttt$sss" | git stripspace >tmp &&
+    ! grep "  " tmp >/dev/null &&
+    echo "$ttt$sss$sss" | git stripspace >tmp &&
+    ! grep "  " tmp >/dev/null &&
+    echo "$ttt$ttt$sss$sss" | git stripspace >tmp &&
+    ! grep "  " tmp >/dev/null &&
+    echo "$ttt$sss$sss$sss" | git stripspace >tmp &&
+    ! grep "  " tmp >/dev/null
 '
 
 test_expect_success \
@@ -339,11 +355,16 @@ test_expect_success \
 
 test_expect_success \
     'spaces without newline at end should not show spaces' '
-    ! (printf "" | git stripspace | grep " " >/dev/null) &&
-    ! (printf "$sss" | git stripspace | grep " " >/dev/null) &&
-    ! (printf "$sss$sss" | git stripspace | grep " " >/dev/null) &&
-    ! (printf "$sss$sss$sss" | git stripspace | grep " " >/dev/null) &&
-    ! (printf "$sss$sss$sss$sss" | git stripspace | grep " " >/dev/null)
+    printf "" | git stripspace >tmp &&
+    ! grep " " tmp >/dev/null &&
+    printf "$sss" | git stripspace >tmp &&
+    ! grep " " tmp >/dev/null &&
+    printf "$sss$sss" | git stripspace >tmp &&
+    ! grep " " tmp >/dev/null &&
+    printf "$sss$sss$sss" | git stripspace >tmp &&
+    ! grep " " tmp >/dev/null &&
+    printf "$sss$sss$sss$sss" | git stripspace >tmp &&
+    ! grep " " tmp >/dev/null
 '
 
 test_expect_success \
index afc343cf9bb5e5e85d0a203a0eb5ea6f0bc90c2b..5c9dc90d0b096d9f104caedeb035b50b919b6811 100755 (executable)
@@ -104,7 +104,8 @@ test_expect_failure CASE_INSENSITIVE_FS 'add (with different case)' '
        rm camelcase &&
        echo 1 >CamelCase &&
        git add CamelCase &&
-       camel=$(git ls-files | grep -i camelcase) &&
+       git ls-files >tmp &&
+       camel=$(grep -i camelcase tmp) &&
        test $(echo "$camel" | wc -l) = 1 &&
        test "z$(git cat-file blob :$camel)" = z1
 '
index 10ac92d22507ed839552e5cbec1e5978a00ca51d..412f413360d74ee2e432eb50810f4b06155a2d2b 100755 (executable)
@@ -3,8 +3,13 @@
 test_description='Windows named pipes'
 
 . ./test-lib.sh
+if ! test_have_prereq MINGW
+then
+       skip_all='skipping Windows-specific tests'
+       test_done
+fi
 
-test_expect_success MINGW 'o_append write to named pipe' '
+test_expect_success 'o_append write to named pipe' '
        GIT_TRACE="$(pwd)/expect" git status >/dev/null 2>&1 &&
        { test-tool windows-named-pipe t0051 >actual 2>&1 & } &&
        pid=$! &&
index 2fe6ae6a4e544cb4f58ad96e22ee6b24c076de94..aa35350b6f396f562463a16ffcba364ab94ed5d5 100755 (executable)
@@ -542,7 +542,7 @@ test_lazy_prereq CAN_EXEC_IN_PWD '
        ./git rev-parse
 '
 
-test_expect_success RUNTIME_PREFIX,CAN_EXEC_IN_PWD 'RUNTIME_PREFIX works' '
+test_expect_success !VALGRIND,RUNTIME_PREFIX,CAN_EXEC_IN_PWD 'RUNTIME_PREFIX works' '
        mkdir -p pretend/bin pretend/libexec/git-core &&
        echo "echo HERE" | write_script pretend/libexec/git-core/git-here &&
        cp "$GIT_EXEC_PATH"/git$X pretend/bin/ &&
@@ -550,7 +550,7 @@ test_expect_success RUNTIME_PREFIX,CAN_EXEC_IN_PWD 'RUNTIME_PREFIX works' '
        echo HERE >expect &&
        test_cmp expect actual'
 
-test_expect_success RUNTIME_PREFIX,CAN_EXEC_IN_PWD '%(prefix)/ works' '
+test_expect_success !VALGRIND,RUNTIME_PREFIX,CAN_EXEC_IN_PWD '%(prefix)/ works' '
        mkdir -p pretend/bin &&
        cp "$GIT_EXEC_PATH"/git$X pretend/bin/ &&
        git config yes.path "%(prefix)/yes" &&
index eeedbfa919327b206a1d730069edb8cd1ed59930..08f5fe9caef0c8901e49401abf2762753d8a0b7c 100755 (executable)
@@ -60,18 +60,22 @@ test_expect_success 'can create leading directories outside of a git dir' '
 
 test_expect_success 'indicates populated hooks' '
        test_when_finished rm git-bugreport-hooks.txt &&
-       test_when_finished rm -fr .git/hooks &&
-       rm -fr .git/hooks &&
-       mkdir .git/hooks &&
-       for hook in applypatch-msg prepare-commit-msg.sample
-       do
-               write_script ".git/hooks/$hook" <<-EOF || return 1
-               echo "hook $hook exists"
-               EOF
-       done &&
+
+       test_hook applypatch-msg <<-\EOF &&
+       true
+       EOF
+       test_hook unknown-hook <<-\EOF &&
+       true
+       EOF
        git bugreport -s hooks &&
-       grep applypatch-msg git-bugreport-hooks.txt &&
-       ! grep prepare-commit-msg git-bugreport-hooks.txt
+
+       sort >expect <<-\EOF &&
+       [Enabled Hooks]
+       applypatch-msg
+       EOF
+
+       sed -ne "/^\[Enabled Hooks\]$/,/^$/p" <git-bugreport-hooks.txt >actual &&
+       test_cmp expect actual
 '
 
 test_done
index d164b750ff702c32e449d6e844f403c657871b2d..299999f0f896e85de175819568e4ff7662a3ef03 100644 (file)
@@ -59,6 +59,10 @@ while (<>) {
            # and highly variable.  Just omit them.
            goto SKIP_LINE;
        }
+       if ($tokens[$col_category] =~ m/fsync/) {
+           # fsync events aren't interesting for the test
+           goto SKIP_LINE;
+       }
     }
 
     # t_abs and t_rel are either blank or a float.  Replace the float
index f17abd298c83467b3ead07ff87c08623ff640502..1e864cf3172bec45e949a840d026e507a117fec8 100755 (executable)
@@ -618,6 +618,25 @@ test_expect_success 'do not fetch when checking existence of tree we construct o
        git -C repo cherry-pick side1
 '
 
+test_expect_success 'exact rename does not need to fetch the blob lazily' '
+       rm -rf repo partial.git &&
+       test_create_repo repo &&
+       content="some dummy content" &&
+       test_commit -C repo create-a-file file.txt "$content" &&
+       git -C repo mv file.txt new-file.txt &&
+       git -C repo commit -m rename-the-file &&
+       FILE_HASH=$(git -C repo rev-parse HEAD:new-file.txt) &&
+       test_config -C repo uploadpack.allowfilter 1 &&
+       test_config -C repo uploadpack.allowanysha1inwant 1 &&
+
+       git clone --filter=blob:none --bare "file://$(pwd)/repo" partial.git &&
+       git -C partial.git rev-list --objects --missing=print HEAD >out &&
+       grep "[?]$FILE_HASH" out &&
+       git -C partial.git log --follow -- new-file.txt &&
+       git -C partial.git rev-list --objects --missing=print HEAD >out &&
+       grep "[?]$FILE_HASH" out
+'
+
 test_expect_success 'lazy-fetch when accessing object not in the_repository' '
        rm -rf full partial.git &&
        test_create_repo full &&
index 22058b503ac78c41f542eb02a5a3dbd1cb200d3e..1eb3a8306ba15b3e782b940f605afa8ec551ec8c 100755 (executable)
@@ -2,6 +2,7 @@
 
 test_description='progress display'
 
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 show_cr () {
@@ -17,6 +18,7 @@ test_expect_success 'simple progress display' '
        EOF
 
        cat >in <<-\EOF &&
+       start 0
        update
        progress 1
        update
@@ -25,8 +27,9 @@ test_expect_success 'simple progress display' '
        progress 4
        update
        progress 5
+       stop
        EOF
-       test-tool progress "Working hard" <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -41,11 +44,13 @@ test_expect_success 'progress display with total' '
        EOF
 
        cat >in <<-\EOF &&
+       start 3
        progress 1
        progress 2
        progress 3
+       stop
        EOF
-       test-tool progress --total=3 "Working hard" <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -62,14 +67,14 @@ Working hard.......2.........3.........4.........5.........6:
 EOF
 
        cat >in <<-\EOF &&
+       start 100000 Working hard.......2.........3.........4.........5.........6
        progress 100
        progress 1000
        progress 10000
        progress 100000
+       stop
        EOF
-       test-tool progress --total=100000 \
-               "Working hard.......2.........3.........4.........5.........6" \
-               <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -88,16 +93,16 @@ Working hard.......2.........3.........4.........5.........6:
 EOF
 
        cat >in <<-\EOF &&
+       start 100000 Working hard.......2.........3.........4.........5.........6
        update
        progress 1
        update
        progress 2
        progress 10000
        progress 100000
+       stop
        EOF
-       test-tool progress --total=100000 \
-               "Working hard.......2.........3.........4.........5.........6" \
-               <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -116,14 +121,14 @@ Working hard.......2.........3.........4.........5.........6:
 EOF
 
        cat >in <<-\EOF &&
+       start 100000 Working hard.......2.........3.........4.........5.........6
        progress 25000
        progress 50000
        progress 75000
        progress 100000
+       stop
        EOF
-       test-tool progress --total=100000 \
-               "Working hard.......2.........3.........4.........5.........6" \
-               <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -140,14 +145,14 @@ Working hard.......2.........3.........4.........5.........6.........7.........:
 EOF
 
        cat >in <<-\EOF &&
+       start 100000 Working hard.......2.........3.........4.........5.........6.........7.........
        progress 25000
        progress 50000
        progress 75000
        progress 100000
+       stop
        EOF
-       test-tool progress --total=100000 \
-               "Working hard.......2.........3.........4.........5.........6.........7........." \
-               <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -164,12 +169,14 @@ test_expect_success 'progress shortens - crazy caller' '
        EOF
 
        cat >in <<-\EOF &&
+       start 1000
        progress 100
        progress 200
        progress 1
        progress 1000
+       stop
        EOF
-       test-tool progress --total=1000 "Working hard" <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -185,6 +192,7 @@ test_expect_success 'progress display with throughput' '
        EOF
 
        cat >in <<-\EOF &&
+       start 0
        throughput 102400 1000
        update
        progress 10
@@ -197,8 +205,9 @@ test_expect_success 'progress display with throughput' '
        throughput 409600 4000
        update
        progress 40
+       stop
        EOF
-       test-tool progress "Working hard" <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -214,6 +223,7 @@ test_expect_success 'progress display with throughput and total' '
        EOF
 
        cat >in <<-\EOF &&
+       start 40
        throughput 102400 1000
        progress 10
        throughput 204800 2000
@@ -222,8 +232,9 @@ test_expect_success 'progress display with throughput and total' '
        progress 30
        throughput 409600 4000
        progress 40
+       stop
        EOF
-       test-tool progress --total=40 "Working hard" <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -239,6 +250,7 @@ test_expect_success 'cover up after throughput shortens' '
        EOF
 
        cat >in <<-\EOF &&
+       start 0
        throughput 409600 1000
        update
        progress 1
@@ -251,8 +263,9 @@ test_expect_success 'cover up after throughput shortens' '
        throughput 1638400 4000
        update
        progress 4
+       stop
        EOF
-       test-tool progress "Working hard" <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -267,6 +280,7 @@ test_expect_success 'cover up after throughput shortens a lot' '
        EOF
 
        cat >in <<-\EOF &&
+       start 0
        throughput 1 1000
        update
        progress 1
@@ -276,8 +290,9 @@ test_expect_success 'cover up after throughput shortens a lot' '
        throughput 3145728 3000
        update
        progress 3
+       stop
        EOF
-       test-tool progress "Working hard" <in 2>stderr &&
+       test-tool progress <in 2>stderr &&
 
        show_cr <stderr >out &&
        test_cmp expect out
@@ -285,6 +300,7 @@ test_expect_success 'cover up after throughput shortens a lot' '
 
 test_expect_success 'progress generates traces' '
        cat >in <<-\EOF &&
+       start 40
        throughput 102400 1000
        update
        progress 10
@@ -297,10 +313,11 @@ test_expect_success 'progress generates traces' '
        throughput 409600 4000
        update
        progress 40
+       stop
        EOF
 
-       GIT_TRACE2_EVENT="$(pwd)/trace.event" test-tool progress --total=40 \
-               "Working hard" <in 2>stderr &&
+       GIT_TRACE2_EVENT="$(pwd)/trace.event" test-tool progress \
+               <in 2>stderr &&
 
        # t0212/parse_events.perl intentionally omits regions and data.
        test_region progress "Working hard" trace.event &&
@@ -308,4 +325,54 @@ test_expect_success 'progress generates traces' '
        grep "\"key\":\"total_bytes\",\"value\":\"409600\"" trace.event
 '
 
+test_expect_success 'progress generates traces: stop / start' '
+       cat >in <<-\EOF &&
+       start 0
+       stop
+       EOF
+
+       GIT_TRACE2_EVENT="$PWD/trace-startstop.event" test-tool progress \
+               <in 2>stderr &&
+       test_region progress "Working hard" trace-startstop.event
+'
+
+test_expect_success 'progress generates traces: start without stop' '
+       cat >in <<-\EOF &&
+       start 0
+       EOF
+
+       GIT_TRACE2_EVENT="$PWD/trace-start.event" \
+       LSAN_OPTIONS=detect_leaks=0 \
+       test-tool progress \
+               <in 2>stderr &&
+       grep region_enter.*progress trace-start.event &&
+       ! grep region_leave.*progress trace-start.event
+'
+
+test_expect_success 'progress generates traces: stop without start' '
+       cat >in <<-\EOF &&
+       stop
+       EOF
+
+       GIT_TRACE2_EVENT="$PWD/trace-stop.event" test-tool progress \
+               <in 2>stderr &&
+       ! grep region_enter.*progress trace-stop.event &&
+       ! grep region_leave.*progress trace-stop.event
+'
+
+test_expect_success 'progress generates traces: start with active progress bar (no stops)' '
+       cat >in <<-\EOF &&
+       start 0 One
+       start 0 Two
+       EOF
+
+       GIT_TRACE2_EVENT="$PWD/trace-2start.event" \
+       LSAN_OPTIONS=detect_leaks=0 \
+       test-tool progress \
+               <in 2>stderr &&
+       grep region_enter.*progress.*One trace-2start.event &&
+       grep region_enter.*progress.*Two trace-2start.event &&
+       ! grep region_leave trace-2start.event
+'
+
 test_done
index d1115528cb9461495f3ad1e934beb1cd3682f97c..0710b1fb1e945b4d15d989f65f83050076e592cf 100755 (executable)
@@ -21,7 +21,6 @@ In the test, these paths are used:
        yomin   - not in H or M
 '
 
-TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 . "$TEST_DIRECTORY"/lib-read-tree.sh
 
@@ -38,11 +37,12 @@ compare_change () {
 }
 
 check_cache_at () {
-       clean_if_empty=$(git diff-files -- "$1")
+       git diff-files -- "$1" >out &&
+       clean_if_empty=$(cat out) &&
        case "$clean_if_empty" in
        '')  echo "$1: clean" ;;
        ?*)  echo "$1: dirty" ;;
-       esac
+       esac &&
        case "$2,$clean_if_empty" in
        clean,)         :     ;;
        clean,?*)       false ;;
index ca5c5510c737cce1f7c224a7cd8ad0ab95d3010d..46cbd5514a68e135222b5dbec77a21e170ccaa2b 100755 (executable)
@@ -9,7 +9,6 @@ This is identical to t1001, but uses -u to update the work tree as well.
 
 '
 
-TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 . "$TEST_DIRECTORY"/lib-read-tree.sh
 
@@ -23,11 +22,12 @@ compare_change () {
 }
 
 check_cache_at () {
-       clean_if_empty=$(git diff-files -- "$1")
+       git diff-files -- "$1" >out &&
+       clean_if_empty=$(cat out) &&
        case "$clean_if_empty" in
        '')  echo "$1: clean" ;;
        ?*)  echo "$1: dirty" ;;
-       esac
+       esac &&
        case "$2,$clean_if_empty" in
        clean,)         :     ;;
        clean,?*)       false ;;
index e0db2066f3194b7084f25ea249156c30711f3e2b..c860c08ecb46a37a6f20bf403963afd7576fed9f 100755 (executable)
@@ -25,4 +25,14 @@ test_expect_success 'read-tree --prefix' '
        cmp expect actual
 '
 
+test_expect_success 'read-tree --prefix with leading slash exits with error' '
+       git rm -rf . &&
+       test_must_fail git read-tree --prefix=/two/ $tree &&
+       git read-tree --prefix=two/ $tree &&
+
+       git rm -rf . &&
+       test_must_fail git read-tree --prefix=/ $tree &&
+       git read-tree --prefix= $tree
+'
+
 test_done
index 39382fa1958152ae0cb88edda55cd63c33a15b6e..dadf3b14583bec460a51cbf69362a875dd3cc867 100755 (executable)
@@ -4,6 +4,98 @@ test_description='git cat-file'
 
 . ./test-lib.sh
 
+test_cmdmode_usage () {
+       test_expect_code 129 "$@" 2>err &&
+       grep "^error:.*is incompatible with" err
+}
+
+for switches in \
+       '-e -p' \
+       '-p -t' \
+       '-t -s' \
+       '-s --textconv' \
+       '--textconv --filters' \
+       '--batch-all-objects -e'
+do
+       test_expect_success "usage: cmdmode $switches" '
+               test_cmdmode_usage git cat-file $switches
+       '
+done
+
+test_incompatible_usage () {
+       test_expect_code 129 "$@" 2>err &&
+       grep -E "^(fatal|error):.*(requires|incompatible with|needs)" err
+}
+
+for opt in --batch --batch-check
+do
+       test_expect_success "usage: incompatible options: --path with $opt" '
+               test_incompatible_usage git cat-file --path=foo $opt
+       '
+done
+
+test_missing_usage () {
+       test_expect_code 129 "$@" 2>err &&
+       grep -E "^fatal:.*required" err
+}
+
+short_modes="-e -p -t -s"
+cw_modes="--textconv --filters"
+
+for opt in $cw_modes
+do
+       test_expect_success "usage: $opt requires another option" '
+               test_missing_usage git cat-file $opt
+       '
+done
+
+for opt in $short_modes
+do
+       test_expect_success "usage: $opt requires another option" '
+               test_missing_usage git cat-file $opt
+       '
+
+       for opt2 in --batch \
+               --batch-check \
+               --follow-symlinks \
+               "--path=foo HEAD:some-path.txt"
+       do
+               test_expect_success "usage: incompatible options: $opt and $opt2" '
+                       test_incompatible_usage git cat-file $opt $opt2
+               '
+       done
+done
+
+test_too_many_arguments () {
+       test_expect_code 129 "$@" 2>err &&
+       grep -E "^fatal: too many arguments$" err
+}
+
+for opt in $short_modes $cw_modes
+do
+       args="one two three"
+       test_expect_success "usage: too many arguments: $opt $args" '
+               test_too_many_arguments git cat-file $opt $args
+       '
+
+       for opt2 in --buffer --follow-symlinks
+       do
+               test_expect_success "usage: incompatible arguments: $opt with batch option $opt2" '
+                       test_incompatible_usage git cat-file $opt $opt2
+               '
+       done
+done
+
+for opt in --buffer \
+       --follow-symlinks \
+       --batch-all-objects
+do
+       test_expect_success "usage: bad option combination: $opt without batch mode" '
+               test_incompatible_usage git cat-file $opt &&
+               test_incompatible_usage git cat-file $opt commit HEAD
+       '
+done
+
 echo_without_newline () {
     printf '%s' "$*"
 }
@@ -13,13 +105,18 @@ strlen () {
 }
 
 maybe_remove_timestamp () {
-    if test -z "$2"; then
-        echo_without_newline "$1"
-    else
-       echo_without_newline "$(printf '%s\n' "$1" | sed -e 's/ [0-9][0-9]* [-+][0-9][0-9][0-9][0-9]$//')"
-    fi
+       if test -z "$2"; then
+               echo_without_newline "$1"
+       else
+               echo_without_newline "$(printf '%s\n' "$1" | remove_timestamp)"
+       fi
 }
 
+remove_timestamp () {
+       sed -e 's/ [0-9][0-9]* [-+][0-9][0-9][0-9][0-9]$//'
+}
+
+
 run_tests () {
     type=$1
     sha1=$2
@@ -85,12 +182,36 @@ $content"
        test_cmp expect actual
     '
 
+    for opt in --buffer --no-buffer
+    do
+       test -z "$content" ||
+               test_expect_success "--batch-command $opt output of $type content is correct" '
+               maybe_remove_timestamp "$batch_output" $no_ts >expect &&
+               maybe_remove_timestamp "$(test_write_lines "contents $sha1" |
+               git cat-file --batch-command $opt)" $no_ts >actual &&
+               test_cmp expect actual
+       '
+
+       test_expect_success "--batch-command $opt output of $type info is correct" '
+               echo "$sha1 $type $size" >expect &&
+               test_write_lines "info $sha1" |
+               git cat-file --batch-command $opt >actual &&
+               test_cmp expect actual
+       '
+    done
+
     test_expect_success "custom --batch-check format" '
        echo "$type $sha1" >expect &&
        echo $sha1 | git cat-file --batch-check="%(objecttype) %(objectname)" >actual &&
        test_cmp expect actual
     '
 
+    test_expect_success "custom --batch-command format" '
+       echo "$type $sha1" >expect &&
+       echo "info $sha1" | git cat-file --batch-command="%(objecttype) %(objectname)" >actual &&
+       test_cmp expect actual
+    '
+
     test_expect_success '--batch-check with %(rest)' '
        echo "$type this is some extra content" >expect &&
        echo "$sha1    this is some extra content" |
@@ -132,6 +253,22 @@ test_expect_success "setup" '
 
 run_tests 'blob' $hello_sha1 $hello_size "$hello_content" "$hello_content"
 
+test_expect_success '--batch-command --buffer with flush for blob info' '
+       echo "$hello_sha1 blob $hello_size" >expect &&
+       test_write_lines "info $hello_sha1" "flush" |
+       GIT_TEST_CAT_FILE_NO_FLUSH_ON_EXIT=1 \
+       git cat-file --batch-command --buffer >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success '--batch-command --buffer without flush for blob info' '
+       touch output &&
+       test_write_lines "info $hello_sha1" |
+       GIT_TEST_CAT_FILE_NO_FLUSH_ON_EXIT=1 \
+       git cat-file --batch-command --buffer >>output &&
+       test_must_be_empty output
+'
+
 test_expect_success '--batch-check without %(rest) considers whole line' '
        echo "$hello_sha1 blob $hello_size" >expect &&
        git update-index --add --cacheinfo 100644 $hello_sha1 "white space" &&
@@ -175,7 +312,7 @@ test_expect_success \
     "Reach a blob from a tag pointing to it" \
     "test '$hello_content' = \"\$(git cat-file blob $tag_sha1)\""
 
-for batch in batch batch-check
+for batch in batch batch-check batch-command
 do
     for opt in t s e p
     do
@@ -281,6 +418,49 @@ test_expect_success "--batch-check with multiple sha1s gives correct format" '
     "$(echo_without_newline "$batch_check_input" | git cat-file --batch-check)"
 '
 
+test_expect_success '--batch-command with multiple info calls gives correct format' '
+       cat >expect <<-EOF &&
+       $hello_sha1 blob $hello_size
+       $tree_sha1 tree $tree_size
+       $commit_sha1 commit $commit_size
+       $tag_sha1 tag $tag_size
+       deadbeef missing
+       EOF
+
+       git cat-file --batch-command --buffer >actual <<-EOF &&
+       info $hello_sha1
+       info $tree_sha1
+       info $commit_sha1
+       info $tag_sha1
+       info deadbeef
+       EOF
+
+       test_cmp expect actual
+'
+
+test_expect_success '--batch-command with multiple command calls gives correct format' '
+       remove_timestamp >expect <<-EOF &&
+       $hello_sha1 blob $hello_size
+       $hello_content
+       $commit_sha1 commit $commit_size
+       $commit_content
+       $tag_sha1 tag $tag_size
+       $tag_content
+       deadbeef missing
+       EOF
+
+       git cat-file --batch-command --buffer >actual_raw <<-EOF &&
+       contents $hello_sha1
+       contents $commit_sha1
+       contents $tag_sha1
+       contents deadbeef
+       flush
+       EOF
+
+       remove_timestamp <actual_raw >actual &&
+       test_cmp expect actual
+'
+
 test_expect_success 'setup blobs which are likely to delta' '
        test-tool genrandom foo 10240 >foo &&
        { cat foo && echo plus; } >foo-plus &&
@@ -501,7 +681,7 @@ test_expect_success 'cat-file -t and -s on corrupt loose object' '
 
                # Setup and create the empty blob and its path
                empty_path=$(git rev-parse --git-path objects/$(test_oid_to_path "$EMPTY_BLOB")) &&
-               git hash-object -w --stdin </dev/null &&
+               empty_blob=$(git hash-object -w --stdin </dev/null) &&
 
                # Create another blob and its path
                echo other >other.blob &&
@@ -542,7 +722,13 @@ test_expect_success 'cat-file -t and -s on corrupt loose object' '
                # content out as-is. Try to make it zlib-invalid.
                mv -f other.blob "$empty_path" &&
                test_must_fail git fsck 2>err.fsck &&
-               grep "^error: inflate: data stream error (" err.fsck
+               cat >expect <<-EOF &&
+               error: inflate: data stream error (incorrect header check)
+               error: unable to unpack header of ./$empty_path
+               error: $empty_blob: object corrupt or missing: ./$empty_path
+               EOF
+               grep "^error: " err.fsck >actual &&
+               test_cmp expect actual
        )
 '
 
@@ -871,5 +1057,40 @@ test_expect_success 'cat-file --batch-all-objects --batch-check ignores replace'
        echo "$orig commit $orig_size" >expect &&
        test_cmp expect actual
 '
+test_expect_success 'batch-command empty command' '
+       echo "" >cmd &&
+       test_expect_code 128 git cat-file --batch-command <cmd 2>err &&
+       grep "^fatal:.*empty command in input.*" err
+'
+
+test_expect_success 'batch-command whitespace before command' '
+       echo " info deadbeef" >cmd &&
+       test_expect_code 128 git cat-file --batch-command <cmd 2>err &&
+       grep "^fatal:.*whitespace before command.*" err
+'
+
+test_expect_success 'batch-command unknown command' '
+       echo unknown_command >cmd &&
+       test_expect_code 128 git cat-file --batch-command <cmd 2>err &&
+       grep "^fatal:.*unknown command.*" err
+'
+
+test_expect_success 'batch-command missing arguments' '
+       echo "info" >cmd &&
+       test_expect_code 128 git cat-file --batch-command <cmd 2>err &&
+       grep "^fatal:.*info requires arguments.*" err
+'
+
+test_expect_success 'batch-command flush with arguments' '
+       echo "flush arg" >cmd &&
+       test_expect_code 128 git cat-file --batch-command --buffer <cmd 2>err &&
+       grep "^fatal:.*flush takes no arguments.*" err
+'
+
+test_expect_success 'batch-command flush without --buffer' '
+       echo "flush" >cmd &&
+       test_expect_code 128 git cat-file --batch-command <cmd 2>err &&
+       grep "^fatal:.*flush is only for --buffer mode.*" err
+'
 
 test_done
index 64b340f227274c28f00a564a682f2369a7b85d8d..ac5ad8c7402d2bd3f43d38e5a676d864ea415d37 100755 (executable)
@@ -2,6 +2,7 @@
 
 test_description="git hash-object"
 
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 echo_without_newline() {
index 24092c09a95771df742337e8d6c1c9eac77221ba..dd957be1b78c5690fc79495f501eea52e4467600 100755 (executable)
@@ -187,11 +187,32 @@ test_expect_success 'read-tree updates worktree, absent case' '
        test ! -f init.t
 '
 
+test_expect_success 'read-tree will not throw away dirty changes, non-sparse' '
+       echo "/*" >.git/info/sparse-checkout &&
+       read_tree_u_must_succeed -m -u HEAD &&
+
+       echo dirty >init.t &&
+       read_tree_u_must_fail -m -u HEAD^ &&
+       test_path_is_file init.t &&
+       grep -q dirty init.t
+'
+
+test_expect_success 'read-tree will not throw away dirty changes, sparse' '
+       echo "/*" >.git/info/sparse-checkout &&
+       read_tree_u_must_succeed -m -u HEAD &&
+
+       echo dirty >init.t &&
+       echo sub/added >.git/info/sparse-checkout &&
+       read_tree_u_must_fail -m -u HEAD^ &&
+       test_path_is_file init.t &&
+       grep -q dirty init.t
+'
+
 test_expect_success 'read-tree updates worktree, dirty case' '
        echo sub/added >.git/info/sparse-checkout &&
        git checkout -f top &&
        echo dirty >init.t &&
-       read_tree_u_must_succeed -m -u HEAD^ &&
+       read_tree_u_must_fail -m -u HEAD^ &&
        grep -q dirty init.t &&
        rm init.t
 '
index 3deb490187415ec37ae5465ae980d10a775a58db..d1833c0f31b467e1dc5173a7332bfbb16c5de05c 100755 (executable)
@@ -52,6 +52,25 @@ test_expect_success 'return to full checkout of main' '
        test "$(cat b)" = "modified"
 '
 
+test_expect_success 'skip-worktree on files outside sparse patterns' '
+       git sparse-checkout disable &&
+       git sparse-checkout set --no-cone "a*" &&
+       git checkout-index --all --ignore-skip-worktree-bits &&
+
+       git ls-files -t >output &&
+       ! grep ^S output >actual &&
+       test_must_be_empty actual &&
+
+       test_config sparse.expectFilesOutsideOfPatterns true &&
+       cat <<-\EOF >expect &&
+       S b
+       S c
+       EOF
+       git ls-files -t >output &&
+       grep ^S output >actual &&
+       test_cmp expect actual
+'
+
 test_expect_success 'in partial clone, sparse checkout only fetches needed blobs' '
        test_create_repo server &&
        git clone "file://$(pwd)/server" client &&
index d386215ea0355179ba3404601fc19418871ed7d2..7931d51ea90761fbd591f16e353918e13dd1eb2f 100755 (executable)
@@ -5,6 +5,9 @@ test_description='sparse checkout builtin tests'
 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 
+GIT_TEST_SPLIT_INDEX=false
+export GIT_TEST_SPLIT_INDEX
+
 . ./test-lib.sh
 
 list_files() {
@@ -79,6 +82,12 @@ test_expect_success 'git sparse-checkout init' '
        check_files repo a
 '
 
+test_expect_success 'git sparse-checkout init in empty repo' '
+       test_when_finished rm -rf empty-repo blank-template &&
+       git init --template= empty-repo &&
+       git -C empty-repo sparse-checkout init
+'
+
 test_expect_success 'git sparse-checkout list after init' '
        git -C repo sparse-checkout list >actual &&
        cat >expect <<-\EOF &&
@@ -117,7 +126,7 @@ test_expect_success 'switching to cone mode with non-cone mode patterns' '
                cd bad-patterns &&
                git sparse-checkout init &&
                git sparse-checkout add dir &&
-               git config core.sparseCheckoutCone true &&
+               git config --worktree core.sparseCheckoutCone true &&
                test_must_fail git sparse-checkout add dir 2>err &&
                grep "existing sparse-checkout patterns do not use cone mode" err
        )
@@ -146,9 +155,9 @@ test_expect_success 'interaction with clone --no-checkout (unborn index)' '
 '
 
 test_expect_success 'set enables config' '
-       git init empty-config &&
+       git init worktree-config &&
        (
-               cd empty-config &&
+               cd worktree-config &&
                test_commit test file &&
                test_path_is_missing .git/config.worktree &&
                git sparse-checkout set nothing &&
@@ -201,6 +210,21 @@ test_expect_success 'add to sparse-checkout' '
        check_files repo "a folder1 folder2"
 '
 
+test_expect_success 'worktree: add copies sparse-checkout patterns' '
+       cat repo/.git/info/sparse-checkout >old &&
+       test_when_finished cp old repo/.git/info/sparse-checkout &&
+       test_when_finished git -C repo worktree remove ../worktree &&
+       git -C repo sparse-checkout set --no-cone "/*" &&
+       git -C repo worktree add --quiet ../worktree 2>err &&
+       test_must_be_empty err &&
+       new="$(git -C worktree rev-parse --git-path info/sparse-checkout)" &&
+       test_path_is_file "$new" &&
+       test_cmp repo/.git/info/sparse-checkout "$new" &&
+       git -C worktree sparse-checkout set --cone &&
+       test_cmp_config -C worktree true core.sparseCheckoutCone &&
+       test_must_fail git -C repo core.sparseCheckoutCone
+'
+
 test_expect_success 'cone mode: match patterns' '
        git -C repo config --worktree core.sparseCheckoutCone true &&
        rm -rf repo/a repo/folder1 repo/folder2 &&
@@ -228,36 +252,31 @@ test_expect_success 'sparse-checkout disable' '
 '
 
 test_expect_success 'sparse-index enabled and disabled' '
-       (
-               sane_unset GIT_TEST_SPLIT_INDEX &&
-               git -C repo update-index --no-split-index &&
-
-               git -C repo sparse-checkout init --cone --sparse-index &&
-               test_cmp_config -C repo true index.sparse &&
-               git -C repo ls-files --sparse >sparse &&
-               git -C repo sparse-checkout disable &&
-               git -C repo ls-files --sparse >full &&
-
-               cat >expect <<-\EOF &&
-               @@ -1,4 +1,7 @@
-                a
-               -deep/
-               -folder1/
-               -folder2/
-               +deep/a
-               +deep/deeper1/a
-               +deep/deeper1/deepest/a
-               +deep/deeper2/a
-               +folder1/a
-               +folder2/a
-               EOF
+       git -C repo sparse-checkout init --cone --sparse-index &&
+       test_cmp_config -C repo true index.sparse &&
+       git -C repo ls-files --sparse >sparse &&
+       git -C repo sparse-checkout disable &&
+       git -C repo ls-files --sparse >full &&
 
-               diff -u sparse full | tail -n +3 >actual &&
-               test_cmp expect actual &&
+       cat >expect <<-\EOF &&
+       @@ -1,4 +1,7 @@
+        a
+       -deep/
+       -folder1/
+       -folder2/
+       +deep/a
+       +deep/deeper1/a
+       +deep/deeper1/deepest/a
+       +deep/deeper2/a
+       +folder1/a
+       +folder2/a
+       EOF
+
+       diff -u sparse full | tail -n +3 >actual &&
+       test_cmp expect actual &&
 
-               git -C repo config --list >config &&
-               ! grep index.sparse config
-       )
+       git -C repo config --list >config &&
+       test_cmp_config -C repo false index.sparse
 '
 
 test_expect_success 'cone mode: init and set' '
@@ -491,6 +510,37 @@ test_expect_failure 'sparse-checkout reapply' '
        git -C tweak sparse-checkout disable
 '
 
+test_expect_success 'reapply can handle config options' '
+       git -C repo sparse-checkout init --cone --no-sparse-index &&
+       git -C repo config --worktree --list >actual &&
+       cat >expect <<-\EOF &&
+       core.sparsecheckout=true
+       core.sparsecheckoutcone=true
+       index.sparse=false
+       EOF
+       test_cmp expect actual &&
+
+       git -C repo sparse-checkout reapply --no-cone --no-sparse-index &&
+       git -C repo config --worktree --list >actual &&
+       cat >expect <<-\EOF &&
+       core.sparsecheckout=true
+       core.sparsecheckoutcone=false
+       index.sparse=false
+       EOF
+       test_cmp expect actual &&
+
+       git -C repo sparse-checkout reapply --cone --sparse-index &&
+       git -C repo config --worktree --list >actual &&
+       cat >expect <<-\EOF &&
+       core.sparsecheckout=true
+       core.sparsecheckoutcone=true
+       index.sparse=true
+       EOF
+       test_cmp expect actual &&
+
+       git -C repo sparse-checkout disable
+'
+
 test_expect_success 'cone mode: set with core.ignoreCase=true' '
        rm repo/.git/info/sparse-checkout &&
        git -C repo sparse-checkout init --cone &&
@@ -521,17 +571,17 @@ test_expect_success 'interaction with submodules' '
 '
 
 test_expect_success 'different sparse-checkouts with worktrees' '
+       git -C repo sparse-checkout set --cone deep folder1 &&
        git -C repo worktree add --detach ../worktree &&
-       check_files worktree "a deep folder1 folder2" &&
-       git -C worktree sparse-checkout init --cone &&
-       git -C repo sparse-checkout set folder1 &&
-       git -C worktree sparse-checkout set deep/deeper1 &&
-       check_files repo a folder1 &&
-       check_files worktree a deep
+       check_files worktree "a deep folder1" &&
+       git -C repo sparse-checkout set --cone folder1 &&
+       git -C worktree sparse-checkout set --cone deep/deeper1 &&
+       check_files repo "a folder1" &&
+       check_files worktree "a deep"
 '
 
 test_expect_success 'set using filename keeps file on-disk' '
-       git -C repo sparse-checkout set a deep &&
+       git -C repo sparse-checkout set --skip-checks a deep &&
        cat >expect <<-\EOF &&
        /*
        !/*/
@@ -642,7 +692,7 @@ test_expect_success BSLASHPSPEC 'pattern-checks: escaped characters' '
        git -C escaped reset --hard $COMMIT &&
        check_files escaped "a deep folder1 folder2 zbad\\dir zdoes*exist" zglob[!a]? &&
        git -C escaped sparse-checkout init --cone &&
-       git -C escaped sparse-checkout set zbad\\dir/bogus "zdoes*not*exist" "zdoes*exist" "zglob[!a]?" &&
+       git -C escaped sparse-checkout set --skip-checks zbad\\dir/bogus "zdoes*not*exist" "zdoes*exist" "zglob[!a]?" &&
        cat >expect <<-\EOF &&
        /*
        !/*/
@@ -767,4 +817,59 @@ test_expect_success 'malformed cone-mode patterns' '
        grep "warning: disabling cone pattern matching" err
 '
 
+test_expect_success 'set from subdir pays attention to prefix' '
+       git -C repo sparse-checkout disable &&
+       git -C repo/deep sparse-checkout set --cone deeper2 ../folder1 &&
+
+       git -C repo sparse-checkout list >actual &&
+
+       cat >expect <<-\EOF &&
+       deep/deeper2
+       folder1
+       EOF
+       test_cmp expect actual
+'
+
+test_expect_success 'add from subdir pays attention to prefix' '
+       git -C repo sparse-checkout set --cone deep/deeper2 &&
+       git -C repo/deep sparse-checkout add deeper1/deepest ../folder1 &&
+
+       git -C repo sparse-checkout list >actual &&
+
+       cat >expect <<-\EOF &&
+       deep/deeper1/deepest
+       deep/deeper2
+       folder1
+       EOF
+       test_cmp expect actual
+'
+
+test_expect_success 'set from subdir in non-cone mode throws an error' '
+       git -C repo sparse-checkout disable &&
+       test_must_fail git -C repo/deep sparse-checkout set --no-cone deeper2 ../folder1 2>error &&
+
+       grep "run from the toplevel directory in non-cone mode" error
+'
+
+test_expect_success 'set from subdir in non-cone mode throws an error' '
+       git -C repo sparse-checkout set --no-cone deep/deeper2 &&
+       test_must_fail git -C repo/deep sparse-checkout add deeper1/deepest ../folder1 2>error &&
+
+       grep "run from the toplevel directory in non-cone mode" error
+'
+
+test_expect_success 'by default, cone mode will error out when passed files' '
+       git -C repo sparse-checkout reapply --cone &&
+       test_must_fail git -C repo sparse-checkout add .gitignore 2>error &&
+
+       grep ".gitignore.*is not a directory" error
+'
+
+test_expect_success 'by default, non-cone mode will warn on individual files' '
+       git -C repo sparse-checkout reapply --no-cone &&
+       git -C repo sparse-checkout add .gitignore 2>warning &&
+
+       grep "pass a leading slash before paths.*if you want a single file" warning
+'
+
 test_done
index 522c760ca89518aa610fea041e89222b120d0a46..de0bdbdee1b9213cafa7a1128287d96acd52010e 100755 (executable)
@@ -16,7 +16,9 @@ test_expect_success 'setup' '
                echo "after deep" >e &&
                echo "after folder1" >g &&
                echo "after x" >z &&
-               mkdir folder1 folder2 deep x &&
+               mkdir folder1 folder2 deep before x &&
+               echo "before deep" >before/a &&
+               echo "before deep again" >before/b &&
                mkdir deep/deeper1 deep/deeper2 deep/before deep/later &&
                mkdir deep/deeper1/deepest &&
                mkdir deep/deeper1/deepest2 &&
@@ -244,6 +246,25 @@ test_expect_success 'expanded in-memory index matches full index' '
        test_sparse_match git ls-files --stage
 '
 
+test_expect_success 'root directory cannot be sparse' '
+       init_repos &&
+
+       # Remove all in-cone files and directories from the index, collapse index
+       # with `git sparse-checkout reapply`
+       git -C sparse-index rm -r . &&
+       git -C sparse-index sparse-checkout reapply &&
+
+       # Verify sparse directories still present, root directory is not sparse
+       cat >expect <<-EOF &&
+       before/
+       folder1/
+       folder2/
+       x/
+       EOF
+       git -C sparse-index ls-files --sparse >actual &&
+       test_cmp expect actual
+'
+
 test_expect_success 'status with options' '
        init_repos &&
        test_sparse_match ls &&
@@ -260,6 +281,13 @@ test_expect_success 'status with options' '
        test_all_match git status --porcelain=v2 -uno
 '
 
+test_expect_success 'status with diff in unexpanded sparse directory' '
+       init_repos &&
+       test_all_match git checkout rename-base &&
+       test_all_match git reset --soft rename-out-to-out &&
+       test_all_match git status --porcelain=v2
+'
+
 test_expect_success 'status reports sparse-checkout' '
        init_repos &&
        git -C sparse-checkout status >full &&
@@ -367,7 +395,7 @@ test_expect_success 'status/add: outside sparse cone' '
        write_script edit-contents <<-\EOF &&
        echo text >>$1
        EOF
-       run_on_sparse ../edit-contents folder1/a &&
+       run_on_all ../edit-contents folder1/a &&
        run_on_all ../edit-contents folder1/new &&
 
        test_sparse_match git status --porcelain=v2 &&
@@ -376,8 +404,8 @@ test_expect_success 'status/add: outside sparse cone' '
        test_sparse_match test_must_fail git add folder1/a &&
        grep "Disable or modify the sparsity rules" sparse-checkout-err &&
        test_sparse_unstaged folder1/a &&
-       test_sparse_match test_must_fail git add --refresh folder1/a &&
-       grep "Disable or modify the sparsity rules" sparse-checkout-err &&
+       test_all_match git add --refresh folder1/a &&
+       test_must_be_empty sparse-checkout-err &&
        test_sparse_unstaged folder1/a &&
        test_sparse_match test_must_fail git add folder1/new &&
        grep "Disable or modify the sparsity rules" sparse-checkout-err &&
@@ -593,13 +621,11 @@ test_expect_success 'reset with pathspecs outside sparse definition' '
 
        test_sparse_match git reset update-folder1 -- folder1 &&
        git -C full-checkout reset update-folder1 -- folder1 &&
-       test_sparse_match git status --porcelain=v2 &&
-       test_all_match git rev-parse HEAD:folder1 &&
+       test_all_match git ls-files -s -- folder1 &&
 
        test_sparse_match git reset update-folder2 -- folder2/a &&
        git -C full-checkout reset update-folder2 -- folder2/a &&
-       test_sparse_match git status --porcelain=v2 &&
-       test_all_match git rev-parse HEAD:folder2/a
+       test_all_match git ls-files -s -- folder2/a
 '
 
 test_expect_success 'reset with wildcard pathspec' '
@@ -629,6 +655,260 @@ test_expect_success 'reset with wildcard pathspec' '
        test_all_match git ls-files -s -- folder1
 '
 
+test_expect_success 'update-index modify outside sparse definition' '
+       init_repos &&
+
+       write_script edit-contents <<-\EOF &&
+       echo text >>$1
+       EOF
+
+       # Create & modify folder1/a
+       # Note that this setup is a manual way of reaching the erroneous
+       # condition in which a `skip-worktree` enabled, outside-of-cone file
+       # exists on disk. It is used here to ensure `update-index` is stable
+       # and behaves predictably if such a condition occurs.
+       run_on_sparse mkdir -p folder1 &&
+       run_on_sparse cp ../initial-repo/folder1/a folder1/a &&
+       run_on_all ../edit-contents folder1/a &&
+
+       # If file has skip-worktree enabled, but the file is present, it is
+       # treated the same as if skip-worktree is disabled
+       test_all_match git status --porcelain=v2 &&
+       test_all_match git update-index folder1/a &&
+       test_all_match git status --porcelain=v2 &&
+
+       # When skip-worktree is disabled (even on files outside sparse cone), file
+       # is updated in the index
+       test_sparse_match git update-index --no-skip-worktree folder1/a &&
+       test_all_match git status --porcelain=v2 &&
+       test_all_match git update-index folder1/a &&
+       test_all_match git status --porcelain=v2
+'
+
+test_expect_success 'update-index --add outside sparse definition' '
+       init_repos &&
+
+       write_script edit-contents <<-\EOF &&
+       echo text >>$1
+       EOF
+
+       # Create folder1, add new file
+       run_on_sparse mkdir -p folder1 &&
+       run_on_all ../edit-contents folder1/b &&
+
+       # The *untracked* out-of-cone file is added to the index because it does
+       # not have a `skip-worktree` bit to signal that it should be ignored
+       # (unlike in `git add`, which will fail due to the file being outside
+       # the sparse checkout definition).
+       test_all_match git update-index --add folder1/b &&
+       test_all_match git status --porcelain=v2
+'
+
+# NEEDSWORK: `--remove`, unlike the rest of `update-index`, does not ignore
+# `skip-worktree` entries by default and will remove them from the index.
+# The `--ignore-skip-worktree-entries` flag must be used in conjunction with
+# `--remove` to ignore the `skip-worktree` entries and prevent their removal
+# from the index.
+test_expect_success 'update-index --remove outside sparse definition' '
+       init_repos &&
+
+       # When --ignore-skip-worktree-entries is _not_ specified:
+       # out-of-cone, not-on-disk files are removed from the index
+       test_sparse_match git update-index --remove folder1/a &&
+       cat >expect <<-EOF &&
+       D       folder1/a
+       EOF
+       test_sparse_match git diff --cached --name-status &&
+       test_cmp expect sparse-checkout-out &&
+
+       # Reset the state
+       test_all_match git reset --hard &&
+
+       # When --ignore-skip-worktree-entries is specified, out-of-cone
+       # (skip-worktree) files are ignored
+       test_sparse_match git update-index --remove --ignore-skip-worktree-entries folder1/a &&
+       test_sparse_match git diff --cached --name-status &&
+       test_must_be_empty sparse-checkout-out &&
+
+       # Reset the state
+       test_all_match git reset --hard &&
+
+       # --force-remove supercedes --ignore-skip-worktree-entries, removing
+       # a skip-worktree file from the index (and disk) when both are specified
+       # with --remove
+       test_sparse_match git update-index --force-remove --ignore-skip-worktree-entries folder1/a &&
+       cat >expect <<-EOF &&
+       D       folder1/a
+       EOF
+       test_sparse_match git diff --cached --name-status &&
+       test_cmp expect sparse-checkout-out
+'
+
+test_expect_success 'update-index with directories' '
+       init_repos &&
+
+       # update-index will exit silently when provided with a directory name
+       # containing a trailing slash
+       test_all_match git update-index deep/ folder1/ &&
+       grep "Ignoring path deep/" sparse-checkout-err &&
+       grep "Ignoring path folder1/" sparse-checkout-err &&
+
+       # When update-index is given a directory name WITHOUT a trailing slash, it will
+       # behave in different ways depending on the status of the directory on disk:
+       # * if it exists, the command exits with an error ("add individual files instead")
+       # * if it does NOT exist (e.g., in a sparse-checkout), it is assumed to be a
+       #   file and either triggers an error ("does not exist  and --remove not passed")
+       #   or is ignored completely (when using --remove)
+       test_all_match test_must_fail git update-index deep &&
+       run_on_all test_must_fail git update-index folder1 &&
+       test_must_fail git -C full-checkout update-index --remove folder1 &&
+       test_sparse_match git update-index --remove folder1 &&
+       test_all_match git status --porcelain=v2
+'
+
+test_expect_success 'update-index --again file outside sparse definition' '
+       init_repos &&
+
+       test_all_match git checkout -b test-reupdate &&
+
+       # Update HEAD without modifying the index to introduce a difference in
+       # folder1/a
+       test_sparse_match git reset --soft update-folder1 &&
+
+       # Because folder1/a differs in the index vs HEAD,
+       # `git update-index --no-skip-worktree --again` will effectively perform
+       # `git update-index --no-skip-worktree folder1/a` and remove the skip-worktree
+       # flag from folder1/a
+       test_sparse_match git update-index --no-skip-worktree --again &&
+       test_sparse_match git status --porcelain=v2 &&
+
+       cat >expect <<-EOF &&
+       D       folder1/a
+       EOF
+       test_sparse_match git diff --name-status &&
+       test_cmp expect sparse-checkout-out
+'
+
+test_expect_success 'update-index --cacheinfo' '
+       init_repos &&
+
+       deep_a_oid=$(git -C full-checkout rev-parse update-deep:deep/a) &&
+       folder2_oid=$(git -C full-checkout rev-parse update-folder2:folder2) &&
+       folder1_a_oid=$(git -C full-checkout rev-parse update-folder1:folder1/a) &&
+
+       test_all_match git update-index --cacheinfo 100644 $deep_a_oid deep/a &&
+       test_all_match git status --porcelain=v2 &&
+
+       # Cannot add sparse directory, even in sparse index case
+       test_all_match test_must_fail git update-index --add --cacheinfo 040000 $folder2_oid folder2/ &&
+
+       # Sparse match only: the new outside-of-cone entry is added *without* skip-worktree,
+       # so `git status` reports it as "deleted" in the worktree
+       test_sparse_match git update-index --add --cacheinfo 100644 $folder1_a_oid folder1/a &&
+       test_sparse_match git status --porcelain=v2 &&
+       cat >expect <<-EOF &&
+       MD folder1/a
+       EOF
+       test_sparse_match git status --short -- folder1/a &&
+       test_cmp expect sparse-checkout-out &&
+
+       # To return folder1/a to "normal" for a sparse checkout (ignored &
+       # outside-of-cone), add the skip-worktree flag.
+       test_sparse_match git update-index --skip-worktree folder1/a &&
+       cat >expect <<-EOF &&
+       S folder1/a
+       EOF
+       test_sparse_match git ls-files -t -- folder1/a &&
+       test_cmp expect sparse-checkout-out
+'
+
+for MERGE_TREES in "base HEAD update-folder2" \
+                  "update-folder1 update-folder2" \
+                  "update-folder2"
+do
+       test_expect_success "'read-tree -mu $MERGE_TREES' with files outside sparse definition" '
+               init_repos &&
+
+               # Although the index matches, without --no-sparse-checkout, outside-of-
+               # definition files will not exist on disk for sparse checkouts
+               test_all_match git read-tree -mu $MERGE_TREES &&
+               test_all_match git status --porcelain=v2 &&
+               test_path_is_missing sparse-checkout/folder2 &&
+               test_path_is_missing sparse-index/folder2 &&
+
+               test_all_match git read-tree --reset -u HEAD &&
+               test_all_match git status --porcelain=v2 &&
+
+               test_all_match git read-tree -mu --no-sparse-checkout $MERGE_TREES &&
+               test_all_match git status --porcelain=v2 &&
+               test_cmp sparse-checkout/folder2/a sparse-index/folder2/a &&
+               test_cmp sparse-checkout/folder2/a full-checkout/folder2/a
+
+       '
+done
+
+test_expect_success 'read-tree --merge with edit/edit conflicts in sparse directories' '
+       init_repos &&
+
+       # Merge of multiple changes to same directory (but not same files) should
+       # succeed
+       test_all_match git read-tree -mu base rename-base update-folder1 &&
+       test_all_match git status --porcelain=v2 &&
+
+       test_all_match git reset --hard &&
+
+       test_all_match git read-tree -mu rename-base update-folder2 &&
+       test_all_match git status --porcelain=v2 &&
+
+       test_all_match git reset --hard &&
+
+       test_all_match test_must_fail git read-tree -mu base update-folder1 rename-out-to-in &&
+       test_all_match test_must_fail git read-tree -mu rename-out-to-in update-folder1
+'
+
+test_expect_success 'read-tree --prefix' '
+       init_repos &&
+
+       # If files differing between the index and target <commit-ish> exist
+       # inside the prefix, `read-tree --prefix` should fail
+       test_all_match test_must_fail git read-tree --prefix=deep/ deepest &&
+       test_all_match test_must_fail git read-tree --prefix=folder1/ update-folder1 &&
+
+       # If no differing index entries exist matching the prefix,
+       # `read-tree --prefix` updates the index successfully
+       test_all_match git rm -rf deep/deeper1/deepest/ &&
+       test_all_match git read-tree --prefix=deep/deeper1/deepest -u deepest &&
+       test_all_match git status --porcelain=v2 &&
+
+       test_all_match git rm -rf --sparse folder1/ &&
+       test_all_match git read-tree --prefix=folder1/ -u update-folder1 &&
+       test_all_match git status --porcelain=v2 &&
+
+       test_all_match git rm -rf --sparse folder2/0 &&
+       test_all_match git read-tree --prefix=folder2/0/ -u rename-out-to-out &&
+       test_all_match git status --porcelain=v2
+'
+
+test_expect_success 'read-tree --merge with directory-file conflicts' '
+       init_repos &&
+
+       test_all_match git checkout -b test-branch rename-base &&
+
+       # Although the index matches, without --no-sparse-checkout, outside-of-
+       # definition files will not exist on disk for sparse checkouts
+       test_sparse_match git read-tree -mu rename-out-to-out &&
+       test_sparse_match git status --porcelain=v2 &&
+       test_path_is_missing sparse-checkout/folder2 &&
+       test_path_is_missing sparse-index/folder2 &&
+
+       test_sparse_match git read-tree --reset -u HEAD &&
+       test_sparse_match git status --porcelain=v2 &&
+
+       test_sparse_match git read-tree -mu --no-sparse-checkout rename-out-to-out &&
+       test_sparse_match git status --porcelain=v2 &&
+       test_cmp sparse-checkout/folder2/0/1 sparse-index/folder2/0/1
+'
+
 test_expect_success 'merge, cherry-pick, and rebase' '
        init_repos &&
 
@@ -754,6 +1034,74 @@ test_expect_success 'cherry-pick with conflicts' '
        test_all_match test_must_fail git cherry-pick to-cherry-pick
 '
 
+test_expect_success 'checkout-index inside sparse definition' '
+       init_repos &&
+
+       run_on_all rm -f deep/a &&
+       test_all_match git checkout-index -- deep/a &&
+       test_all_match git status --porcelain=v2 &&
+
+       echo test >>new-a &&
+       run_on_all cp ../new-a a &&
+       test_all_match test_must_fail git checkout-index -- a &&
+       test_all_match git checkout-index -f -- a &&
+       test_all_match git status --porcelain=v2
+'
+
+test_expect_success 'checkout-index outside sparse definition' '
+       init_repos &&
+
+       # Without --ignore-skip-worktree-bits, outside-of-cone files will trigger
+       # an error
+       test_sparse_match test_must_fail git checkout-index -- folder1/a &&
+       test_i18ngrep "folder1/a has skip-worktree enabled" sparse-checkout-err &&
+       test_path_is_missing folder1/a &&
+
+       # With --ignore-skip-worktree-bits, outside-of-cone files are checked out
+       test_sparse_match git checkout-index --ignore-skip-worktree-bits -- folder1/a &&
+       test_cmp sparse-checkout/folder1/a sparse-index/folder1/a &&
+       test_cmp sparse-checkout/folder1/a full-checkout/folder1/a &&
+
+       run_on_sparse rm -rf folder1 &&
+       echo test >new-a &&
+       run_on_sparse mkdir -p folder1 &&
+       run_on_all cp ../new-a folder1/a &&
+
+       test_all_match test_must_fail git checkout-index --ignore-skip-worktree-bits -- folder1/a &&
+       test_all_match git checkout-index -f --ignore-skip-worktree-bits -- folder1/a &&
+       test_cmp sparse-checkout/folder1/a sparse-index/folder1/a &&
+       test_cmp sparse-checkout/folder1/a full-checkout/folder1/a
+'
+
+test_expect_success 'checkout-index with folders' '
+       init_repos &&
+
+       # Inside checkout definition
+       test_all_match test_must_fail git checkout-index -f -- deep/ &&
+
+       # Outside checkout definition
+       # Note: although all tests fail (as expected), the messaging differs. For
+       # non-sparse index checkouts, the error is that the "file" does not appear
+       # in the index; for sparse checkouts, the error is explicitly that the
+       # entry is a sparse directory.
+       run_on_all test_must_fail git checkout-index -f -- folder1/ &&
+       test_cmp full-checkout-err sparse-checkout-err &&
+       ! test_cmp full-checkout-err sparse-index-err &&
+       grep "is a sparse directory" sparse-index-err
+'
+
+test_expect_success 'checkout-index --all' '
+       init_repos &&
+
+       test_all_match git checkout-index --all &&
+       test_sparse_match test_path_is_missing folder1 &&
+
+       # --ignore-skip-worktree-bits will cause `skip-worktree` files to be
+       # checked out, causing the outside-of-cone `folder1` to exist on-disk
+       test_all_match git checkout-index --ignore-skip-worktree-bits --all &&
+       test_all_match test_path_exists folder1
+'
+
 test_expect_success 'clean' '
        init_repos &&
 
@@ -763,23 +1111,42 @@ test_expect_success 'clean' '
        test_all_match git commit -m "ignore bogus files" &&
 
        run_on_sparse mkdir folder1 &&
+       run_on_all mkdir -p deep/untracked-deep &&
        run_on_all touch folder1/bogus &&
+       run_on_all touch folder1/untracked &&
+       run_on_all touch deep/untracked-deep/bogus &&
+       run_on_all touch deep/untracked-deep/untracked &&
 
        test_all_match git status --porcelain=v2 &&
        test_all_match git clean -f &&
        test_all_match git status --porcelain=v2 &&
        test_sparse_match ls &&
        test_sparse_match ls folder1 &&
+       run_on_all test_path_exists folder1/bogus &&
+       run_on_all test_path_is_missing folder1/untracked &&
+       run_on_all test_path_exists deep/untracked-deep/bogus &&
+       run_on_all test_path_exists deep/untracked-deep/untracked &&
+
+       test_all_match git clean -fd &&
+       test_all_match git status --porcelain=v2 &&
+       test_sparse_match ls &&
+       test_sparse_match ls folder1 &&
+       run_on_all test_path_exists folder1/bogus &&
+       run_on_all test_path_exists deep/untracked-deep/bogus &&
+       run_on_all test_path_is_missing deep/untracked-deep/untracked &&
 
        test_all_match git clean -xf &&
        test_all_match git status --porcelain=v2 &&
        test_sparse_match ls &&
        test_sparse_match ls folder1 &&
+       run_on_all test_path_is_missing folder1/bogus &&
+       run_on_all test_path_exists deep/untracked-deep/bogus &&
 
        test_all_match git clean -xdf &&
        test_all_match git status --porcelain=v2 &&
        test_sparse_match ls &&
        test_sparse_match ls folder1 &&
+       run_on_all test_path_is_missing deep/untracked-deep/bogus &&
 
        test_sparse_match test_path_is_dir folder1
 '
@@ -900,6 +1267,8 @@ test_expect_success 'sparse-index is not expanded' '
        echo >>sparse-index/untracked.txt &&
        ensure_not_expanded add . &&
 
+       ensure_not_expanded checkout-index -f a &&
+       ensure_not_expanded checkout-index -f --all &&
        for ref in update-deep update-folder1 update-folder2 update-deep
        do
                echo >>sparse-index/README.md &&
@@ -928,6 +1297,8 @@ test_expect_success 'sparse-index is not expanded' '
        # Wildcard identifies only full sparse directories, no index expansion
        ensure_not_expanded reset deepest -- folder\* &&
 
+       ensure_not_expanded clean -fd &&
+
        ensure_not_expanded checkout -f update-deep &&
        test_config -C sparse-index pull.twohead ort &&
        (
@@ -1003,6 +1374,24 @@ test_expect_success 'sparse index is not expanded: diff' '
        ensure_not_expanded diff --cached
 '
 
+test_expect_success 'sparse index is not expanded: update-index' '
+       init_repos &&
+
+       deep_a_oid=$(git -C full-checkout rev-parse update-deep:deep/a) &&
+       ensure_not_expanded update-index --cacheinfo 100644 $deep_a_oid deep/a &&
+
+       echo "test" >sparse-index/README.md &&
+       echo "test2" >sparse-index/a &&
+       rm -f sparse-index/deep/a &&
+
+       ensure_not_expanded update-index --add README.md &&
+       ensure_not_expanded update-index a &&
+       ensure_not_expanded update-index --remove deep/a &&
+
+       ensure_not_expanded reset --soft update-deep &&
+       ensure_not_expanded update-index --add --remove --again
+'
+
 test_expect_success 'sparse index is not expanded: blame' '
        init_repos &&
 
@@ -1025,6 +1414,27 @@ test_expect_success 'sparse index is not expanded: fetch/pull' '
        ensure_not_expanded pull full base
 '
 
+test_expect_success 'sparse index is not expanded: read-tree' '
+       init_repos &&
+
+       ensure_not_expanded checkout -b test-branch update-folder1 &&
+       for MERGE_TREES in "base HEAD update-folder2" \
+                          "base HEAD rename-base" \
+                          "base update-folder2" \
+                          "base rename-base" \
+                          "update-folder2"
+       do
+               ensure_not_expanded read-tree -mu $MERGE_TREES &&
+               ensure_not_expanded reset --hard || return 1
+       done &&
+
+       rm -rf sparse-index/deep/deeper2 &&
+       ensure_not_expanded add . &&
+       ensure_not_expanded commit -m "test" &&
+
+       ensure_not_expanded read-tree --prefix=deep/deeper2 -u deepest
+'
+
 test_expect_success 'ls-files' '
        init_repos &&
 
@@ -1039,6 +1449,7 @@ test_expect_success 'ls-files' '
 
        cat >expect <<-\EOF &&
        a
+       before/
        deep/
        e
        folder1-
@@ -1059,36 +1470,34 @@ test_expect_success 'ls-files' '
        test_cmp dense sparse &&
 
        # Set up a strange condition of having a file edit
-       # outside of the sparse-checkout cone. This is just
-       # to verify that sparse-checkout and sparse-index
-       # behave the same in this case.
+       # outside of the sparse-checkout cone. We want to verify
+       # that all modes handle this the same, and detect the
+       # modification.
        write_script edit-content <<-\EOF &&
-       mkdir folder1 &&
+       mkdir -p folder1 &&
        echo content >>folder1/a
        EOF
-       run_on_sparse ../edit-content &&
+       run_on_all ../edit-content &&
 
-       # ls-files does not currently notice modified files whose
-       # cache entries are marked SKIP_WORKTREE. This may change
-       # in the future, but here we test that sparse index does
-       # not accidentally create a change of behavior.
-       test_sparse_match git ls-files --modified &&
-       test_must_be_empty sparse-checkout-out &&
-       test_must_be_empty sparse-index-out &&
+       test_all_match git ls-files --modified &&
 
        git -C sparse-index ls-files --sparse --modified >sparse-index-out &&
-       test_must_be_empty sparse-index-out &&
+       cat >expect <<-\EOF &&
+       folder1/a
+       EOF
+       test_cmp expect sparse-index-out &&
 
        # Add folder1 to the sparse-checkout cone and
        # check that ls-files shows the expanded files.
        test_sparse_match git sparse-checkout add folder1 &&
-       test_sparse_match git ls-files --modified &&
+       test_all_match git ls-files --modified &&
 
        test_all_match git ls-files &&
        git -C sparse-index ls-files --sparse >actual &&
 
        cat >expect <<-\EOF &&
        a
+       before/
        deep/
        e
        folder1-
index 9df05ac2300e4cf4fec039db4dc535d4a3add401..0c8c1639623aac4e0da7d2acc914b215a7b0a8d2 100755 (executable)
@@ -2418,4 +2418,122 @@ test_expect_success '--get and --get-all with --fixed-value' '
        test_must_fail git config --file=config --get-regexp --fixed-value fixed+ non-existent
 '
 
+test_expect_success 'includeIf.hasconfig:remote.*.url' '
+       git init hasremoteurlTest &&
+       test_when_finished "rm -rf hasremoteurlTest" &&
+
+       cat >include-this <<-\EOF &&
+       [user]
+               this = this-is-included
+       EOF
+       cat >dont-include-that <<-\EOF &&
+       [user]
+               that = that-is-not-included
+       EOF
+       cat >>hasremoteurlTest/.git/config <<-EOF &&
+       [includeIf "hasconfig:remote.*.url:foourl"]
+               path = "$(pwd)/include-this"
+       [includeIf "hasconfig:remote.*.url:barurl"]
+               path = "$(pwd)/dont-include-that"
+       [remote "foo"]
+               url = foourl
+       EOF
+
+       echo this-is-included >expect-this &&
+       git -C hasremoteurlTest config --get user.this >actual-this &&
+       test_cmp expect-this actual-this &&
+
+       test_must_fail git -C hasremoteurlTest config --get user.that
+'
+
+test_expect_success 'includeIf.hasconfig:remote.*.url respects last-config-wins' '
+       git init hasremoteurlTest &&
+       test_when_finished "rm -rf hasremoteurlTest" &&
+
+       cat >include-two-three <<-\EOF &&
+       [user]
+               two = included-config
+               three = included-config
+       EOF
+       cat >>hasremoteurlTest/.git/config <<-EOF &&
+       [remote "foo"]
+               url = foourl
+       [user]
+               one = main-config
+               two = main-config
+       [includeIf "hasconfig:remote.*.url:foourl"]
+               path = "$(pwd)/include-two-three"
+       [user]
+               three = main-config
+       EOF
+
+       echo main-config >expect-main-config &&
+       echo included-config >expect-included-config &&
+
+       git -C hasremoteurlTest config --get user.one >actual &&
+       test_cmp expect-main-config actual &&
+
+       git -C hasremoteurlTest config --get user.two >actual &&
+       test_cmp expect-included-config actual &&
+
+       git -C hasremoteurlTest config --get user.three >actual &&
+       test_cmp expect-main-config actual
+'
+
+test_expect_success 'includeIf.hasconfig:remote.*.url globs' '
+       git init hasremoteurlTest &&
+       test_when_finished "rm -rf hasremoteurlTest" &&
+
+       printf "[user]\ndss = yes\n" >double-star-start &&
+       printf "[user]\ndse = yes\n" >double-star-end &&
+       printf "[user]\ndsm = yes\n" >double-star-middle &&
+       printf "[user]\nssm = yes\n" >single-star-middle &&
+       printf "[user]\nno = no\n" >no &&
+
+       cat >>hasremoteurlTest/.git/config <<-EOF &&
+       [remote "foo"]
+               url = https://foo/bar/baz
+       [includeIf "hasconfig:remote.*.url:**/baz"]
+               path = "$(pwd)/double-star-start"
+       [includeIf "hasconfig:remote.*.url:**/nomatch"]
+               path = "$(pwd)/no"
+       [includeIf "hasconfig:remote.*.url:https:/**"]
+               path = "$(pwd)/double-star-end"
+       [includeIf "hasconfig:remote.*.url:nomatch:/**"]
+               path = "$(pwd)/no"
+       [includeIf "hasconfig:remote.*.url:https:/**/baz"]
+               path = "$(pwd)/double-star-middle"
+       [includeIf "hasconfig:remote.*.url:https:/**/nomatch"]
+               path = "$(pwd)/no"
+       [includeIf "hasconfig:remote.*.url:https://*/bar/baz"]
+               path = "$(pwd)/single-star-middle"
+       [includeIf "hasconfig:remote.*.url:https://*/baz"]
+               path = "$(pwd)/no"
+       EOF
+
+       git -C hasremoteurlTest config --get user.dss &&
+       git -C hasremoteurlTest config --get user.dse &&
+       git -C hasremoteurlTest config --get user.dsm &&
+       git -C hasremoteurlTest config --get user.ssm &&
+       test_must_fail git -C hasremoteurlTest config --get user.no
+'
+
+test_expect_success 'includeIf.hasconfig:remote.*.url forbids remote url in such included files' '
+       git init hasremoteurlTest &&
+       test_when_finished "rm -rf hasremoteurlTest" &&
+
+       cat >include-with-url <<-\EOF &&
+       [remote "bar"]
+               url = barurl
+       EOF
+       cat >>hasremoteurlTest/.git/config <<-EOF &&
+       [includeIf "hasconfig:remote.*.url:foourl"]
+               path = "$(pwd)/include-with-url"
+       EOF
+
+       # test with any Git command
+       test_must_fail git -C hasremoteurlTest status 2>err &&
+       grep "fatal: remote URLs cannot be configured in file directly or indirectly included by includeIf.hasconfig:remote.*.url" err
+'
+
 test_done
index fa9647a7c0b7e39f2afd494b127d3e7e1c70c52c..f6dc83e2aabf69ec51364ae9a5f6d5d50ce8db14 100755 (executable)
@@ -6,11 +6,11 @@ test_description='Test the core.hooksPath configuration variable'
 
 test_expect_success 'set up a pre-commit hook in core.hooksPath' '
        >actual &&
-       mkdir -p .git/custom-hooks .git/hooks &&
+       mkdir -p .git/custom-hooks &&
        write_script .git/custom-hooks/pre-commit <<-\EOF &&
        echo CUSTOM >>actual
        EOF
-       write_script .git/hooks/pre-commit <<-\EOF
+       test_hook --setup pre-commit <<-\EOF
        echo NORMAL >>actual
        EOF
 '
index 1a3ee8845d67e92190261e33d93c98f540972f7f..51f829162819740fea8b080db3be6b422452b366 100755 (executable)
@@ -40,6 +40,12 @@ test_expect_success 'delete_refs(FOO, refs/tags/new-tag)' '
        test_must_fail git rev-parse refs/tags/new-tag --
 '
 
+# In reftable, we keep the reflogs around for deleted refs.
+test_expect_success !REFFILES 'delete-reflog(FOO, refs/tags/new-tag)' '
+       $RUN delete-reflog FOO &&
+       $RUN delete-reflog refs/tags/new-tag
+'
+
 test_expect_success 'rename_refs(main, new-main)' '
        git rev-parse main >expected &&
        $RUN rename-ref refs/heads/main refs/heads/new-main &&
@@ -105,7 +111,7 @@ test_expect_success 'delete_reflog(HEAD)' '
        test_must_fail git reflog exists HEAD
 '
 
-test_expect_success 'create-reflog(HEAD)' '
+test_expect_success REFFILES 'create-reflog(HEAD)' '
        $RUN create-reflog HEAD &&
        git reflog exists HEAD
 '
index d7ddf7612d48363ccbac0a4a80d8399bae7b453f..aa59954f6c52faa2a4b5ba3fa32fdd2a2b4b0b85 100755 (executable)
@@ -106,6 +106,28 @@ test_expect_success setup '
        test_line_count = 4 output
 '
 
+test_expect_success 'correct usage on sub-command -h' '
+       test_expect_code 129 git reflog expire -h >err &&
+       grep "git reflog expire" err
+'
+
+test_expect_success 'correct usage on "git reflog show -h"' '
+       test_expect_code 129 git reflog show -h >err &&
+       grep -F "git reflog [show]" err
+'
+
+test_expect_success 'pass through -- to sub-command' '
+       test_when_finished "rm -rf repo" &&
+       git init repo &&
+       test_commit -C repo message --a-file contents dash-tag &&
+
+       git -C repo reflog show -- --does-not-exist >out &&
+       test_must_be_empty out &&
+       git -C repo reflog show >expect &&
+       git -C repo reflog show -- --a-file >actual &&
+       test_cmp expect actual
+'
+
 test_expect_success rewind '
        test_tick && git reset --hard HEAD~2 &&
        test -f C &&
@@ -341,7 +363,7 @@ test_expect_success 'stale dirs do not cause d/f conflicts (reflogs off)' '
 # Each line is 114 characters, so we need 75 to still have a few before the
 # last 8K. The 89-character padding on the final entry lines up our
 # newline exactly.
-test_expect_success SHA1 'parsing reverse reflogs at BUFSIZ boundaries' '
+test_expect_success REFFILES,SHA1 'parsing reverse reflogs at BUFSIZ boundaries' '
        git checkout -b reflogskip &&
        zf=$(test_oid zero_2) &&
        ident="abc <xyz> 0000000001 +0000" &&
@@ -418,8 +440,18 @@ test_expect_success 'expire with multiple worktrees' '
                test_commit -C link-wt foobar &&
                test_tick &&
                git reflog expire --verbose --all --expire=$test_tick &&
-               test_must_be_empty .git/worktrees/link-wt/logs/HEAD
+               test-tool ref-store worktree:link-wt for-each-reflog-ent HEAD >actual &&
+               test_must_be_empty actual
        )
 '
 
+test_expect_success REFFILES 'empty reflog' '
+       test_when_finished "rm -rf empty" &&
+       git init empty &&
+       test_commit -C empty A &&
+       >empty/.git/logs/refs/heads/foo &&
+       git -C empty reflog expire --all 2>err &&
+       test_must_be_empty err
+'
+
 test_done
index 0bb319b944a0f1bd02bf88a9efda1b02f929511c..975c4ea83a877b2dfaf6059c320c71c0282fee0c 100755 (executable)
@@ -169,9 +169,4 @@ test_expect_success 'git log -g -p shows diffs vs. parents' '
        test_cmp expect actual
 '
 
-test_expect_success 'reflog exists works' '
-       git reflog exists refs/heads/main &&
-       ! git reflog exists refs/heads/nonexistent
-'
-
 test_done
index 6c941027a811a5fa2429f03b3092940b6fa2b782..27731722a5b6b26bad0b1929c274414239cc449e 100755 (executable)
@@ -8,7 +8,6 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 . ./test-lib.sh
 
 test_expect_success setup '
-       mkdir -p .git/hooks &&
        test_commit PRE &&
        PRE_OID=$(git rev-parse PRE) &&
        test_commit POST &&
@@ -16,9 +15,8 @@ test_expect_success setup '
 '
 
 test_expect_success 'hook allows updating ref if successful' '
-       test_when_finished "rm .git/hooks/reference-transaction" &&
        git reset --hard PRE &&
-       write_script .git/hooks/reference-transaction <<-\EOF &&
+       test_hook reference-transaction <<-\EOF &&
                echo "$*" >>actual
        EOF
        cat >expect <<-EOF &&
@@ -30,9 +28,8 @@ test_expect_success 'hook allows updating ref if successful' '
 '
 
 test_expect_success 'hook aborts updating ref in prepared state' '
-       test_when_finished "rm .git/hooks/reference-transaction" &&
        git reset --hard PRE &&
-       write_script .git/hooks/reference-transaction <<-\EOF &&
+       test_hook reference-transaction <<-\EOF &&
                if test "$1" = prepared
                then
                        exit 1
@@ -43,9 +40,9 @@ test_expect_success 'hook aborts updating ref in prepared state' '
 '
 
 test_expect_success 'hook gets all queued updates in prepared state' '
-       test_when_finished "rm .git/hooks/reference-transaction actual" &&
+       test_when_finished "rm actual" &&
        git reset --hard PRE &&
-       write_script .git/hooks/reference-transaction <<-\EOF &&
+       test_hook reference-transaction <<-\EOF &&
                if test "$1" = prepared
                then
                        while read -r line
@@ -66,9 +63,9 @@ test_expect_success 'hook gets all queued updates in prepared state' '
 '
 
 test_expect_success 'hook gets all queued updates in committed state' '
-       test_when_finished "rm .git/hooks/reference-transaction actual" &&
+       test_when_finished "rm actual" &&
        git reset --hard PRE &&
-       write_script .git/hooks/reference-transaction <<-\EOF &&
+       test_hook reference-transaction <<-\EOF &&
                if test "$1" = committed
                then
                        while read -r line
@@ -86,9 +83,9 @@ test_expect_success 'hook gets all queued updates in committed state' '
 '
 
 test_expect_success 'hook gets all queued updates in aborted state' '
-       test_when_finished "rm .git/hooks/reference-transaction actual" &&
+       test_when_finished "rm actual" &&
        git reset --hard PRE &&
-       write_script .git/hooks/reference-transaction <<-\EOF &&
+       test_hook reference-transaction <<-\EOF &&
                if test "$1" = aborted
                then
                        while read -r line
@@ -115,11 +112,11 @@ test_expect_success 'interleaving hook calls succeed' '
 
        git init --bare target-repo.git &&
 
-       write_script target-repo.git/hooks/reference-transaction <<-\EOF &&
+       test_hook -C target-repo.git reference-transaction <<-\EOF &&
                echo $0 "$@" >>actual
        EOF
 
-       write_script target-repo.git/hooks/update <<-\EOF &&
+       test_hook -C target-repo.git update <<-\EOF &&
                echo $0 "$@" >>actual
        EOF
 
diff --git a/t/t1418-reflog-exists.sh b/t/t1418-reflog-exists.sh
new file mode 100755 (executable)
index 0000000..d51ecd5
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+test_description='Test reflog display routines'
+GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
+export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
+
+. ./test-lib.sh
+
+test_expect_success 'setup' '
+       test_commit A
+'
+
+test_expect_success 'usage' '
+       test_expect_code 129 git reflog exists &&
+       test_expect_code 129 git reflog exists -h
+'
+
+test_expect_success 'usage: unknown option' '
+       test_expect_code 129 git reflog exists --unknown-option
+'
+
+test_expect_success 'reflog exists works' '
+       git reflog exists refs/heads/main &&
+       test_must_fail git reflog exists refs/heads/nonexistent
+'
+
+test_expect_success 'reflog exists works with a "--" delimiter' '
+       git reflog exists -- refs/heads/main &&
+       test_must_fail git reflog exists -- refs/heads/nonexistent
+'
+
+test_expect_success 'reflog exists works with a "--end-of-options" delimiter' '
+       git reflog exists --end-of-options refs/heads/main &&
+       test_must_fail git reflog exists --end-of-options refs/heads/nonexistent
+'
+
+test_done
index 6582a76521f9b4e6a47587f12175ffdabcf262f0..0206d98225298b94b1e055de2021748ef3628646 100755 (executable)
@@ -774,10 +774,19 @@ test_expect_success 'fsck finds problems in duplicate loose objects' '
                # no "-d" here, so we end up with duplicates
                git repack &&
                # now corrupt the loose copy
-               file=$(sha1_file "$(git rev-parse HEAD)") &&
+               oid="$(git rev-parse HEAD)" &&
+               file=$(sha1_file "$oid") &&
                rm "$file" &&
                echo broken >"$file" &&
-               test_must_fail git fsck
+               test_must_fail git fsck 2>err &&
+
+               cat >expect <<-EOF &&
+               error: inflate: data stream error (incorrect header check)
+               error: unable to unpack header of $file
+               error: $oid: object corrupt or missing: $file
+               EOF
+               grep "^error: " err >actual &&
+               test_cmp expect actual
        )
 '
 
index 94fe413ee3771d1d30b0d70a4354811a6e93d163..ba43168d1237ad5216e3ba5ed22069323fbf93b0 100755 (executable)
@@ -132,8 +132,9 @@ test_expect_success 'use --default' '
        test_must_fail git rev-parse --verify --default bar
 '
 
-test_expect_success 'main@{n} for various n' '
-       N=$(git reflog | wc -l) &&
+test_expect_success !SANITIZE_LEAK 'main@{n} for various n' '
+       git reflog >out &&
+       N=$(wc -l <out) &&
        Nm1=$(($N-1)) &&
        Np1=$(($N+1)) &&
        git rev-parse --verify main@{0} &&
index b0119bf8bc8417439bee91bb7c1add21bc460c2e..98cefe3b7039fe726148e47fdf81b1f9fb454e15 100755 (executable)
@@ -25,6 +25,87 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 
 . ./test-lib.sh
 
+test_cmp_failed_rev_parse () {
+       dir=$1
+       rev=$2
+
+       cat >expect &&
+       test_must_fail git -C "$dir" rev-parse "$rev" 2>actual.raw &&
+       sed "s/\($rev\)[0-9a-f]*/\1.../" <actual.raw >actual &&
+       test_cmp expect actual
+}
+
+test_expect_success 'ambiguous blob output' '
+       git init --bare blob.prefix &&
+       (
+               cd blob.prefix &&
+
+               # Both start with "dead..", under both SHA-1 and SHA-256
+               echo brocdnra | git hash-object -w --stdin &&
+               echo brigddsv | git hash-object -w --stdin &&
+
+               # Both start with "beef.."
+               echo 1agllotbh | git hash-object -w --stdin &&
+               echo 1bbfctrkc | git hash-object -w --stdin
+       ) &&
+
+       test_must_fail git -C blob.prefix rev-parse dead &&
+       test_cmp_failed_rev_parse blob.prefix beef <<-\EOF
+       error: short object ID beef... is ambiguous
+       hint: The candidates are:
+       hint:   beef... blob
+       hint:   beef... blob
+       fatal: ambiguous argument '\''beef...'\'': unknown revision or path not in the working tree.
+       Use '\''--'\'' to separate paths from revisions, like this:
+       '\''git <command> [<revision>...] -- [<file>...]'\''
+       EOF
+'
+
+test_expect_success 'ambiguous loose bad object parsed as OBJ_BAD' '
+       git init --bare blob.bad &&
+       (
+               cd blob.bad &&
+
+               # Both have the prefix "bad0"
+               echo xyzfaowcoh | git hash-object -t bad -w --stdin --literally &&
+               echo xyzhjpyvwl | git hash-object -t bad -w --stdin --literally
+       ) &&
+
+       test_cmp_failed_rev_parse blob.bad bad0 <<-\EOF
+       error: short object ID bad0... is ambiguous
+       fatal: invalid object type
+       EOF
+'
+
+test_expect_success POSIXPERM 'ambigous zlib corrupt loose blob' '
+       git init --bare blob.corrupt &&
+       (
+               cd blob.corrupt &&
+
+               # Both have the prefix "cafe"
+               echo bnkxmdwz | git hash-object -w --stdin &&
+               oid=$(echo bmwsjxzi | git hash-object -w --stdin) &&
+
+               oidf=objects/$(test_oid_to_path "$oid") &&
+               chmod 755 $oidf &&
+               echo broken >$oidf
+       ) &&
+
+       test_cmp_failed_rev_parse blob.corrupt cafe <<-\EOF
+       error: short object ID cafe... is ambiguous
+       error: inflate: data stream error (incorrect header check)
+       error: unable to unpack cafe... header
+       error: inflate: data stream error (incorrect header check)
+       error: unable to unpack cafe... header
+       hint: The candidates are:
+       hint:   cafe... [bad object]
+       hint:   cafe... blob
+       fatal: ambiguous argument '\''cafe...'\'': unknown revision or path not in the working tree.
+       Use '\''--'\'' to separate paths from revisions, like this:
+       '\''git <command> [<revision>...] -- [<file>...]'\''
+       EOF
+'
+
 if ! test_have_prereq SHA1
 then
        skip_all='not using SHA-1 for objects'
diff --git a/t/t1800-hook.sh b/t/t1800-hook.sh
new file mode 100755 (executable)
index 0000000..26ed5e1
--- /dev/null
@@ -0,0 +1,123 @@
+#!/bin/sh
+
+test_description='git-hook command'
+
+TEST_PASSES_SANITIZE_LEAK=true
+. ./test-lib.sh
+
+test_expect_success 'git hook usage' '
+       test_expect_code 129 git hook &&
+       test_expect_code 129 git hook run &&
+       test_expect_code 129 git hook run -h &&
+       test_expect_code 129 git hook run --unknown 2>err &&
+       grep "unknown option" err
+'
+
+test_expect_success 'git hook run: nonexistent hook' '
+       cat >stderr.expect <<-\EOF &&
+       error: cannot find a hook named test-hook
+       EOF
+       test_expect_code 1 git hook run test-hook 2>stderr.actual &&
+       test_cmp stderr.expect stderr.actual
+'
+
+test_expect_success 'git hook run: nonexistent hook with --ignore-missing' '
+       git hook run --ignore-missing does-not-exist 2>stderr.actual &&
+       test_must_be_empty stderr.actual
+'
+
+test_expect_success 'git hook run: basic' '
+       test_hook test-hook <<-EOF &&
+       echo Test hook
+       EOF
+
+       cat >expect <<-\EOF &&
+       Test hook
+       EOF
+       git hook run test-hook 2>actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'git hook run: stdout and stderr both write to our stderr' '
+       test_hook test-hook <<-EOF &&
+       echo >&1 Will end up on stderr
+       echo >&2 Will end up on stderr
+       EOF
+
+       cat >stderr.expect <<-\EOF &&
+       Will end up on stderr
+       Will end up on stderr
+       EOF
+       git hook run test-hook >stdout.actual 2>stderr.actual &&
+       test_cmp stderr.expect stderr.actual &&
+       test_must_be_empty stdout.actual
+'
+
+for code in 1 2 128 129
+do
+       test_expect_success "git hook run: exit code $code is passed along" '
+               test_hook test-hook <<-EOF &&
+               exit $code
+               EOF
+
+               test_expect_code $code git hook run test-hook
+       '
+done
+
+test_expect_success 'git hook run arg u ments without -- is not allowed' '
+       test_expect_code 129 git hook run test-hook arg u ments
+'
+
+test_expect_success 'git hook run -- pass arguments' '
+       test_hook test-hook <<-\EOF &&
+       echo $1
+       echo $2
+       EOF
+
+       cat >expect <<-EOF &&
+       arg
+       u ments
+       EOF
+
+       git hook run test-hook -- arg "u ments" 2>actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'git hook run -- out-of-repo runs excluded' '
+       test_hook test-hook <<-EOF &&
+       echo Test hook
+       EOF
+
+       nongit test_must_fail git hook run test-hook
+'
+
+test_expect_success 'git -c core.hooksPath=<PATH> hook run' '
+       mkdir my-hooks &&
+       write_script my-hooks/test-hook <<-\EOF &&
+       echo Hook ran $1 >>actual
+       EOF
+
+       cat >expect <<-\EOF &&
+       Test hook
+       Hook ran one
+       Hook ran two
+       Hook ran three
+       Hook ran four
+       EOF
+
+       test_hook test-hook <<-EOF &&
+       echo Test hook
+       EOF
+
+       # Test various ways of specifying the path. See also
+       # t1350-config-hooks-path.sh
+       >actual &&
+       git hook run test-hook -- ignored 2>>actual &&
+       git -c core.hooksPath=my-hooks hook run test-hook -- one 2>>actual &&
+       git -c core.hooksPath=my-hooks/ hook run test-hook -- two 2>>actual &&
+       git -c core.hooksPath="$PWD/my-hooks" hook run test-hook -- three 2>>actual &&
+       git -c core.hooksPath="$PWD/my-hooks/" hook run test-hook -- four 2>>actual &&
+       test_cmp expect actual
+'
+
+test_done
index 42601d5a310de33185c40f928b566a45c9985f1c..1f6c4ed0428a5c966c76359c1f4fa2e536f37fcf 100755 (executable)
@@ -21,14 +21,20 @@ test_expect_success 'first branch switch' '
        git checkout other
 '
 
+test_cmp_symbolic_HEAD_ref () {
+       echo refs/heads/"$1" >expect &&
+       git symbolic-ref HEAD >actual &&
+       test_cmp expect actual
+}
+
 test_expect_success '"checkout -" switches back' '
        git checkout - &&
-       test "z$(git symbolic-ref HEAD)" = "zrefs/heads/main"
+       test_cmp_symbolic_HEAD_ref main
 '
 
 test_expect_success '"checkout -" switches forth' '
        git checkout - &&
-       test "z$(git symbolic-ref HEAD)" = "zrefs/heads/other"
+       test_cmp_symbolic_HEAD_ref other
 '
 
 test_expect_success 'detach HEAD' '
@@ -37,12 +43,16 @@ test_expect_success 'detach HEAD' '
 
 test_expect_success '"checkout -" attaches again' '
        git checkout - &&
-       test "z$(git symbolic-ref HEAD)" = "zrefs/heads/other"
+       test_cmp_symbolic_HEAD_ref other
 '
 
 test_expect_success '"checkout -" detaches again' '
        git checkout - &&
-       test "z$(git rev-parse HEAD)" = "z$(git rev-parse other)" &&
+
+       git rev-parse other >expect &&
+       git rev-parse HEAD >actual &&
+       test_cmp expect actual &&
+
        test_must_fail git symbolic-ref HEAD
 '
 
@@ -63,31 +73,31 @@ more_switches () {
 test_expect_success 'switch to the last' '
        more_switches &&
        git checkout @{-1} &&
-       test "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch2"
+       test_cmp_symbolic_HEAD_ref branch2
 '
 
 test_expect_success 'switch to second from the last' '
        more_switches &&
        git checkout @{-2} &&
-       test "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch3"
+       test_cmp_symbolic_HEAD_ref branch3
 '
 
 test_expect_success 'switch to third from the last' '
        more_switches &&
        git checkout @{-3} &&
-       test "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch4"
+       test_cmp_symbolic_HEAD_ref branch4
 '
 
 test_expect_success 'switch to fourth from the last' '
        more_switches &&
        git checkout @{-4} &&
-       test "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch5"
+       test_cmp_symbolic_HEAD_ref branch5
 '
 
 test_expect_success 'switch to twelfth from the last' '
        more_switches &&
        git checkout @{-12} &&
-       test "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch13"
+       test_cmp_symbolic_HEAD_ref branch13
 '
 
 test_expect_success 'merge base test setup' '
@@ -98,19 +108,28 @@ test_expect_success 'merge base test setup' '
 test_expect_success 'another...main' '
        git checkout another &&
        git checkout another...main &&
-       test "z$(git rev-parse --verify HEAD)" = "z$(git rev-parse --verify main^)"
+
+       git rev-parse --verify main^ >expect &&
+       git rev-parse --verify HEAD >actual &&
+       test_cmp expect actual
 '
 
 test_expect_success '...main' '
        git checkout another &&
        git checkout ...main &&
-       test "z$(git rev-parse --verify HEAD)" = "z$(git rev-parse --verify main^)"
+
+       git rev-parse --verify main^ >expect &&
+       git rev-parse --verify HEAD >actual &&
+       test_cmp expect actual
 '
 
 test_expect_success 'main...' '
        git checkout another &&
        git checkout main... &&
-       test "z$(git rev-parse --verify HEAD)" = "z$(git rev-parse --verify main^)"
+
+       git rev-parse --verify main^ >expect &&
+       git rev-parse --verify HEAD >actual &&
+       test_cmp expect actual
 '
 
 test_expect_success '"checkout -" works after a rebase A' '
@@ -118,7 +137,7 @@ test_expect_success '"checkout -" works after a rebase A' '
        git checkout other &&
        git rebase main &&
        git checkout - &&
-       test "z$(git symbolic-ref HEAD)" = "zrefs/heads/main"
+       test_cmp_symbolic_HEAD_ref main
 '
 
 test_expect_success '"checkout -" works after a rebase A B' '
@@ -127,7 +146,7 @@ test_expect_success '"checkout -" works after a rebase A B' '
        git checkout other &&
        git rebase main moodle &&
        git checkout - &&
-       test "z$(git symbolic-ref HEAD)" = "zrefs/heads/main"
+       test_cmp_symbolic_HEAD_ref main
 '
 
 test_expect_success '"checkout -" works after a rebase -i A' '
@@ -135,7 +154,7 @@ test_expect_success '"checkout -" works after a rebase -i A' '
        git checkout other &&
        git rebase -i main &&
        git checkout - &&
-       test "z$(git symbolic-ref HEAD)" = "zrefs/heads/main"
+       test_cmp_symbolic_HEAD_ref main
 '
 
 test_expect_success '"checkout -" works after a rebase -i A B' '
@@ -144,7 +163,7 @@ test_expect_success '"checkout -" works after a rebase -i A B' '
        git checkout other &&
        git rebase main foodle &&
        git checkout - &&
-       test "z$(git symbolic-ref HEAD)" = "zrefs/heads/main"
+       test_cmp_symbolic_HEAD_ref main
 '
 
 test_done
index ebb961be293ef935d88c3ad3b8056725d248684b..5a7caf958c346620f6daffcc78ceaa75e03afe8f 100755 (executable)
@@ -32,6 +32,17 @@ test_expect_success 'switch and detach' '
        test_must_fail git symbolic-ref HEAD
 '
 
+test_expect_success 'suggestion to detach' '
+       test_must_fail git switch main^{commit} 2>stderr &&
+       grep "try again with the --detach option" stderr
+'
+
+test_expect_success 'suggestion to detach is suppressed with advice.suggestDetachingHead=false' '
+       test_config advice.suggestDetachingHead false &&
+       test_must_fail git switch main^{commit} 2>stderr &&
+       ! grep "try again with the --detach option" stderr
+'
+
 test_expect_success 'switch and detach current branch' '
        test_when_finished git switch main &&
        git switch main &&
diff --git a/t/t2108-update-index-refresh-racy.sh b/t/t2108-update-index-refresh-racy.sh
new file mode 100755 (executable)
index 0000000..bc5f288
--- /dev/null
@@ -0,0 +1,64 @@
+#!/bin/sh
+
+test_description='update-index refresh tests related to racy timestamps'
+
+TEST_PASSES_SANITIZE_LEAK=true
+. ./test-lib.sh
+
+reset_files () {
+       echo content >file &&
+       echo content >other &&
+       test_set_magic_mtime file &&
+       test_set_magic_mtime other
+}
+
+update_assert_changed () {
+       test_set_magic_mtime .git/index &&
+       test_might_fail git update-index "$1" &&
+       ! test_is_magic_mtime .git/index
+}
+
+test_expect_success 'setup' '
+       reset_files &&
+       # we are calling reset_files() a couple of times during tests;
+       # test-tool chmtime does not change the ctime; to not weaken
+       # or even break our tests, disable ctime-checks entirely
+       git config core.trustctime false &&
+       git add file other &&
+       git commit -m "initial import"
+'
+
+test_expect_success '--refresh has no racy timestamps to fix' '
+       reset_files &&
+       # set the index time far enough to the future;
+       # it must be at least 3 seconds for VFAT
+       test_set_magic_mtime .git/index +60 &&
+       git update-index --refresh &&
+       test_is_magic_mtime .git/index +60
+'
+
+test_expect_success '--refresh should fix racy timestamp' '
+       reset_files &&
+       update_assert_changed --refresh
+'
+
+test_expect_success '--really-refresh should fix racy timestamp' '
+       reset_files &&
+       update_assert_changed --really-refresh
+'
+
+test_expect_success '--refresh should fix racy timestamp if other file needs update' '
+       reset_files &&
+       echo content2 >other &&
+       test_set_magic_mtime other &&
+       update_assert_changed --refresh
+'
+
+test_expect_success '--refresh should fix racy timestamp if racy file needs update' '
+       reset_files &&
+       echo content2 >file &&
+       test_set_magic_mtime file &&
+       update_assert_changed --refresh
+'
+
+test_done
index acd3650d3c08cc2ef8227c95d6c89dfd0f063b2f..0c38f8e35695745c8eb02fe090c0d15b6d1666c8 100755 (executable)
@@ -14,7 +14,6 @@ only the updates to dir/sub.
 Also tested are "git add -u" without limiting, and "git add -u"
 without contents changes, and other conditions'
 
-TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 test_expect_success setup '
@@ -41,20 +40,28 @@ test_expect_success update '
 '
 
 test_expect_success 'update noticed a removal' '
-       test "$(git ls-files dir1/sub1)" = ""
+       git ls-files dir1/sub1 >out &&
+       test_must_be_empty out
 '
 
 test_expect_success 'update touched correct path' '
-       test "$(git diff-files --name-status dir2/sub3)" = ""
+       git diff-files --name-status dir2/sub3 >out &&
+       test_must_be_empty out
 '
 
 test_expect_success 'update did not touch other tracked files' '
-       test "$(git diff-files --name-status check)" = "M       check" &&
-       test "$(git diff-files --name-status top)" = "M top"
+       echo "M check" >expect &&
+       git diff-files --name-status check >actual &&
+       test_cmp expect actual &&
+
+       echo "M top" >expect &&
+       git diff-files --name-status top >actual &&
+       test_cmp expect actual
 '
 
 test_expect_success 'update did not touch untracked files' '
-       test "$(git ls-files dir2/other)" = ""
+       git ls-files dir2/other >out &&
+       test_must_be_empty out
 '
 
 test_expect_success 'cache tree has not been corrupted' '
@@ -76,9 +83,8 @@ test_expect_success 'update from a subdirectory' '
 '
 
 test_expect_success 'change gets noticed' '
-
-       test "$(git diff-files --name-status dir1)" = ""
-
+       git diff-files --name-status dir1 >out &&
+       test_must_be_empty out
 '
 
 test_expect_success 'non-qualified update in subdir updates from the root' '
@@ -103,7 +109,8 @@ test_expect_success 'replace a file with a symlink' '
 test_expect_success 'add everything changed' '
 
        git add -u &&
-       test -z "$(git diff-files)"
+       git diff-files >out &&
+       test_must_be_empty out
 
 '
 
@@ -111,7 +118,8 @@ test_expect_success 'touch and then add -u' '
 
        touch check &&
        git add -u &&
-       test -z "$(git diff-files)"
+       git diff-files >out &&
+       test_must_be_empty out
 
 '
 
@@ -119,7 +127,8 @@ test_expect_success 'touch and then add explicitly' '
 
        touch check &&
        git add check &&
-       test -z "$(git diff-files)"
+       git diff-files >out &&
+       test_must_be_empty out
 
 '
 
index 54b0eb6dce5a866c3939b93e88837be2b025c93f..bce01ee5bf9511367262fb6bf3e31125a391b99d 100755 (executable)
@@ -165,8 +165,62 @@ test_expect_success '"add" default branch of a bare repo' '
        (
                git clone --bare . bare2 &&
                cd bare2 &&
-               git worktree add ../there3 main
-       )
+               git worktree add ../there3 main &&
+               cd ../there3 &&
+               # Simple check that a Git command does not
+               # immediately fail with the current setup
+               git status
+       ) &&
+       cat >expect <<-EOF &&
+       init.t
+       EOF
+       ls there3 >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success '"add" to bare repo with worktree config' '
+       (
+               git clone --bare . bare3 &&
+               cd bare3 &&
+               git config extensions.worktreeconfig true &&
+
+               # Add config values that are erroneous to have in
+               # a config.worktree file outside of the main
+               # working tree, to check that Git filters them out
+               # when copying config during "git worktree add".
+               git config --worktree core.bare true &&
+               git config --worktree core.worktree "$(pwd)" &&
+
+               # We want to check that bogus.key is copied
+               git config --worktree bogus.key value &&
+               git config --unset core.bare &&
+               git worktree add ../there4 main &&
+               cd ../there4 &&
+
+               # Simple check that a Git command does not
+               # immediately fail with the current setup
+               git status &&
+               git worktree add --detach ../there5 &&
+               cd ../there5 &&
+               git status
+       ) &&
+
+       # the worktree has the arbitrary value copied.
+       test_cmp_config -C there4 value bogus.key &&
+       test_cmp_config -C there5 value bogus.key &&
+
+       # however, core.bare and core.worktree were removed.
+       test_must_fail git -C there4 config core.bare &&
+       test_must_fail git -C there4 config core.worktree &&
+
+       cat >expect <<-EOF &&
+       init.t
+       EOF
+
+       ls there4 >actual &&
+       test_cmp expect actual &&
+       ls there5 >actual &&
+       test_cmp expect actual
 '
 
 test_expect_success 'checkout with grafts' '
@@ -505,10 +559,7 @@ test_expect_success 'git worktree --no-guess-remote option overrides config' '
 '
 
 post_checkout_hook () {
-       gitdir=${1:-.git}
-       test_when_finished "rm -f $gitdir/hooks/post-checkout" &&
-       mkdir -p $gitdir/hooks &&
-       write_script $gitdir/hooks/post-checkout <<-\EOF
+       test_hook -C "$1" post-checkout <<-\EOF
        {
                echo $*
                git rev-parse --git-dir --show-toplevel
index c8a5a0aac6dc25256536d5b18d9c7979d58d7526..79e0fce2d90fb9e947a76052c32e41d20519e6bd 100755 (executable)
@@ -64,6 +64,25 @@ test_expect_success '"list" all worktrees --porcelain' '
        test_cmp expect actual
 '
 
+test_expect_success '"list" all worktrees --porcelain -z' '
+       test_when_finished "rm -rf here _actual actual expect &&
+                               git worktree prune" &&
+       printf "worktree %sQHEAD %sQbranch %sQQ" \
+               "$(git rev-parse --show-toplevel)" \
+               $(git rev-parse HEAD --symbolic-full-name HEAD) >expect &&
+       git worktree add --detach here main &&
+       printf "worktree %sQHEAD %sQdetachedQQ" \
+               "$(git -C here rev-parse --show-toplevel)" \
+               "$(git rev-parse HEAD)" >>expect &&
+       git worktree list --porcelain -z >_actual &&
+       nul_to_q <_actual >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success '"list" -z fails without --porcelain' '
+       test_must_fail git worktree list -z
+'
+
 test_expect_success '"list" all worktrees with locked annotation' '
        test_when_finished "rm -rf locked unlocked out && git worktree prune" &&
        git worktree add --detach locked main &&
index 4a080007137926b5dcc84ee80856bcbcfc71340f..dd7770e85de8660061116d42aa32b8d20fe52f95 100755 (executable)
@@ -34,6 +34,23 @@ test_expect_success 'ls-files correctly outputs files in submodule' '
        test_cmp expect actual
 '
 
+test_expect_success '--stage' '
+       GITMODULES_HASH=$(git rev-parse HEAD:.gitmodules) &&
+       A_HASH=$(git rev-parse HEAD:a) &&
+       B_HASH=$(git rev-parse HEAD:b/b) &&
+       C_HASH=$(git -C submodule rev-parse HEAD:c) &&
+
+       cat >expect <<-EOF &&
+       100644 $GITMODULES_HASH 0       .gitmodules
+       100644 $A_HASH 0        a
+       100644 $B_HASH 0        b/b
+       100644 $C_HASH 0        submodule/c
+       EOF
+
+       git ls-files --stage --recurse-submodules >actual &&
+       test_cmp expect actual
+'
+
 test_expect_success 'ls-files correctly outputs files in submodule with -z' '
        lf_to_nul >expect <<-\EOF &&
        .gitmodules
@@ -292,7 +309,6 @@ test_incompatible_with_recurse_submodules () {
 test_incompatible_with_recurse_submodules --deleted
 test_incompatible_with_recurse_submodules --modified
 test_incompatible_with_recurse_submodules --others
-test_incompatible_with_recurse_submodules --stage
 test_incompatible_with_recurse_submodules --killed
 test_incompatible_with_recurse_submodules --unmerged
 
index 05fde64225963c119b7f2139681ccf278023c717..217006d1bfb55df9f1e5874641226c9ad703b828 100755 (executable)
@@ -201,31 +201,34 @@ EOF
        test_cmp expected check
 '
 
-test_expect_success 'ls-tree --name-only' '
-       git ls-tree --name-only $tree >current &&
-       cat >expected <<\EOF &&
-1.txt
-2.txt
-path0
-path1
-path2
-path3
-EOF
-       test_output
-'
-
-test_expect_success 'ls-tree --name-only -r' '
-       git ls-tree --name-only -r $tree >current &&
-       cat >expected <<\EOF &&
-1.txt
-2.txt
-path0/a/b/c/1.txt
-path1/b/c/1.txt
-path2/1.txt
-path3/1.txt
-path3/2.txt
-EOF
-       test_output
-'
+for opt in --name-only --name-status
+do
+       test_expect_success "ls-tree $opt" '
+               git ls-tree $opt $tree >current &&
+               cat >expected <<-\EOF &&
+               1.txt
+               2.txt
+               path0
+               path1
+               path2
+               path3
+               EOF
+               test_output
+       '
+
+       test_expect_success "ls-tree $opt -r" '
+               git ls-tree $opt -r $tree >current &&
+               cat >expected <<-\EOF &&
+               1.txt
+               2.txt
+               path0/a/b/c/1.txt
+               path1/b/c/1.txt
+               path2/1.txt
+               path3/1.txt
+               path3/2.txt
+               EOF
+               test_output
+       '
+done
 
 test_done
index d18ba1bd84bb473888c5e24191d79f9d0a792358..81c6343962381fc17b1bff4d3ca8958951bde70d 100755 (executable)
@@ -23,4 +23,19 @@ test_expect_success 'ls-tree fails with non-zero exit code on broken tree' '
        test_must_fail git ls-tree -r HEAD
 '
 
+for opts in \
+       "--long --name-only" \
+       "--name-only --name-status" \
+       "--name-status --object-only" \
+       "--object-only --long"
+do
+       test_expect_success "usage: incompatible options: $opts" '
+               test_expect_code 129 git ls-tree $opts $tree
+       '
+
+       one_opt=$(echo "$opts" | cut -d' '  -f1)
+       test_expect_success "usage: incompatible options: $one_opt and --format" '
+               test_expect_code 129 git ls-tree $one_opt --format=fmt $tree
+       '
+done
 test_done
diff --git a/t/t3104-ls-tree-format.sh b/t/t3104-ls-tree-format.sh
new file mode 100755 (executable)
index 0000000..0769a93
--- /dev/null
@@ -0,0 +1,76 @@
+#!/bin/sh
+
+test_description='ls-tree --format'
+
+TEST_PASSES_SANITIZE_LEAK=true
+. ./test-lib.sh
+
+test_expect_success 'ls-tree --format usage' '
+       test_expect_code 129 git ls-tree --format=fmt -l HEAD &&
+       test_expect_code 129 git ls-tree --format=fmt --name-only HEAD &&
+       test_expect_code 129 git ls-tree --format=fmt --name-status HEAD
+'
+
+test_expect_success 'setup' '
+       mkdir dir &&
+       test_commit dir/sub-file &&
+       test_commit top-file
+'
+
+test_ls_tree_format () {
+       format=$1 &&
+       opts=$2 &&
+       fmtopts=$3 &&
+       shift 2 &&
+
+       test_expect_success "ls-tree '--format=<$format>' is like options '$opts $fmtopts'" '
+               git ls-tree $opts -r HEAD >expect &&
+               git ls-tree --format="$format" -r $fmtopts HEAD >actual &&
+               test_cmp expect actual
+       '
+
+       test_expect_success "ls-tree '--format=<$format>' on optimized v.s. non-optimized path" '
+               git ls-tree --format="$format" -r $fmtopts HEAD >expect &&
+               git ls-tree --format="> $format" -r $fmtopts HEAD >actual.raw &&
+               sed "s/^> //" >actual <actual.raw &&
+               test_cmp expect actual
+       '
+}
+
+test_ls_tree_format \
+       "%(objectmode) %(objecttype) %(objectname)%x09%(path)" \
+       ""
+
+test_ls_tree_format \
+       "%(objectmode) %(objecttype) %(objectname) %(objectsize:padded)%x09%(path)" \
+       "--long"
+
+test_ls_tree_format \
+       "%(path)" \
+       "--name-only"
+
+test_ls_tree_format \
+       "%(objectname)" \
+       "--object-only"
+
+test_ls_tree_format \
+       "%(objectname)" \
+       "--object-only --abbrev" \
+       "--abbrev"
+
+test_ls_tree_format \
+       "%(objectmode) %(objecttype) %(objectname)%x09%(path)" \
+       "-t" \
+       "-t"
+
+test_ls_tree_format \
+       "%(objectmode) %(objecttype) %(objectname)%x09%(path)" \
+       "--full-name" \
+       "--full-name"
+
+test_ls_tree_format \
+       "%(objectmode) %(objecttype) %(objectname)%x09%(path)" \
+       "--full-tree" \
+       "--full-tree"
+
+test_done
index 07ace9e90985dc5701fa3001590c89881cdf6ca5..4f49c49fb74b3f601ea9ddd8cb4668ebb5f24909 100755 (executable)
@@ -42,6 +42,23 @@ test_expect_success 'git branch abc should create a branch' '
        git branch abc && test_path_is_file .git/refs/heads/abc
 '
 
+test_expect_success 'git branch abc should fail when abc exists' '
+       test_must_fail git branch abc
+'
+
+test_expect_success 'git branch --force abc should fail when abc is checked out' '
+       test_when_finished git switch main &&
+       git switch abc &&
+       test_must_fail git branch --force abc HEAD~1
+'
+
+test_expect_success 'git branch --force abc should succeed when abc exists' '
+       git rev-parse HEAD~1 >expect &&
+       git branch --force abc HEAD~1 &&
+       git rev-parse abc >actual &&
+       test_cmp expect actual
+'
+
 test_expect_success 'git branch a/b/c should create a branch' '
        git branch a/b/c && test_path_is_file .git/refs/heads/a/b/c
 '
@@ -1023,13 +1040,27 @@ test_expect_success 'checkout -b with -l makes reflog when core.logAllRefUpdates
        git rev-parse --verify gamma@{0}
 '
 
-test_expect_success 'avoid ambiguous track' '
+test_expect_success 'avoid ambiguous track and advise' '
        git config branch.autosetupmerge true &&
        git config remote.ambi1.url lalala &&
        git config remote.ambi1.fetch refs/heads/lalala:refs/heads/main &&
        git config remote.ambi2.url lilili &&
        git config remote.ambi2.fetch refs/heads/lilili:refs/heads/main &&
-       test_must_fail git branch all1 main &&
+       cat <<-EOF >expected &&
+       fatal: not tracking: ambiguous information for ref '\''refs/heads/main'\''
+       hint: There are multiple remotes whose fetch refspecs map to the remote
+       hint: tracking ref '\''refs/heads/main'\'':
+       hint:   ambi1
+       hint:   ambi2
+       hint: ''
+       hint: This is typically a configuration error.
+       hint: ''
+       hint: To support setting up tracking branches, ensure that
+       hint: different remotes'\'' fetch refspecs map into different
+       hint: tracking namespaces.
+       EOF
+       test_must_fail git branch all1 main 2>actual &&
+       test_cmp expected actual &&
        test -z "$(git config branch.all1.merge)"
 '
 
index 7a1be73ce8771b851dfc2c7a95d80dece4c2b5cb..f2b9199007752eded932a8da541e1a86e350d10a 100755 (executable)
@@ -161,4 +161,18 @@ test_expect_success 'show branch --reflog=2' '
        test_cmp actual expect
 '
 
+# incompatible options
+while read combo
+do
+       test_expect_success "show-branch $combo (should fail)" '
+               test_must_fail git show-branch $combo 2>error &&
+               grep -e "cannot be used together" -e "usage:" error
+       '
+done <<\EOF
+--all --reflog
+--merge-base --reflog
+--list --merge-base
+--reflog --current
+EOF
+
 test_done
diff --git a/t/t3207-branch-submodule.sh b/t/t3207-branch-submodule.sh
new file mode 100755 (executable)
index 0000000..fe72b24
--- /dev/null
@@ -0,0 +1,329 @@
+#!/bin/sh
+
+test_description='git branch submodule tests'
+
+GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
+export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
+
+. ./test-lib.sh
+. "$TEST_DIRECTORY"/lib-rebase.sh
+
+pwd=$(pwd)
+
+# Creates a clean test environment in "pwd" by copying the repo setup
+# from test_dirs.
+reset_test () {
+       rm -fr super &&
+       rm -fr sub-sub-upstream &&
+       rm -fr sub-upstream &&
+       cp -r test_dirs/* .
+}
+
+# Tests that the expected branch does not exist
+test_no_branch () {
+       DIR=$1 &&
+       BRANCH_NAME=$2 &&
+       test_must_fail git -C "$DIR" rev-parse "$BRANCH_NAME" 2>err &&
+       grep "ambiguous argument .$BRANCH_NAME." err
+}
+
+test_expect_success 'setup superproject and submodule' '
+       git config --global protocol.file.allow always &&
+       mkdir test_dirs &&
+       (
+               cd test_dirs &&
+               git init super &&
+               test_commit -C super foo &&
+               git init sub-sub-upstream &&
+               test_commit -C sub-sub-upstream foo &&
+               git init sub-upstream &&
+               # Submodule in a submodule
+               git -C sub-upstream submodule add "${pwd}/test_dirs/sub-sub-upstream" sub-sub &&
+               git -C sub-upstream commit -m "add submodule" &&
+               # Regular submodule
+               git -C super submodule add "${pwd}/test_dirs/sub-upstream" sub &&
+               # Submodule in a subdirectory
+               git -C super submodule add "${pwd}/test_dirs/sub-sub-upstream" second/sub &&
+               git -C super commit -m "add submodule" &&
+               git -C super config submodule.propagateBranches true &&
+               git -C super/sub submodule update --init
+       ) &&
+       reset_test
+'
+
+# Test the argument parsing
+test_expect_success '--recurse-submodules should create branches' '
+       test_when_finished "reset_test" &&
+       (
+               cd super &&
+               git branch --recurse-submodules branch-a &&
+               git rev-parse branch-a &&
+               git -C sub rev-parse branch-a &&
+               git -C sub/sub-sub rev-parse branch-a &&
+               git -C second/sub rev-parse branch-a
+       )
+'
+
+test_expect_success '--recurse-submodules should die if submodule.propagateBranches is false' '
+       test_when_finished "reset_test" &&
+       (
+               cd super &&
+               echo "fatal: branch with --recurse-submodules can only be used if submodule.propagateBranches is enabled" >expected &&
+               test_must_fail git -c submodule.propagateBranches=false branch --recurse-submodules branch-a 2>actual &&
+               test_cmp expected actual
+       )
+'
+
+test_expect_success '--recurse-submodules should fail when not creating branches' '
+       test_when_finished "reset_test" &&
+       (
+               cd super &&
+               git branch --recurse-submodules branch-a &&
+               echo "fatal: --recurse-submodules can only be used to create branches" >expected &&
+               test_must_fail git branch --recurse-submodules -D branch-a 2>actual &&
+               test_cmp expected actual &&
+               # Assert that the branches were not deleted
+               git rev-parse branch-a &&
+               git -C sub rev-parse branch-a
+       )
+'
+
+test_expect_success 'should respect submodule.recurse when creating branches' '
+       test_when_finished "reset_test" &&
+       (
+               cd super &&
+               git -c submodule.recurse=true branch branch-a &&
+               git rev-parse branch-a &&
+               git -C sub rev-parse branch-a
+       )
+'
+
+test_expect_success 'should ignore submodule.recurse when not creating branches' '
+       test_when_finished "reset_test" &&
+       (
+               cd super &&
+               git branch --recurse-submodules branch-a &&
+               git -c submodule.recurse=true branch -D branch-a &&
+               test_no_branch . branch-a &&
+               git -C sub rev-parse branch-a
+       )
+'
+
+# Test branch creation behavior
+test_expect_success 'should create branches based off commit id in superproject' '
+       test_when_finished "reset_test" &&
+       (
+               cd super &&
+               git branch --recurse-submodules branch-a &&
+               git checkout --recurse-submodules branch-a &&
+               git -C sub rev-parse HEAD >expected &&
+               # Move the tip of sub:branch-a so that it no longer matches the commit in super:branch-a
+               git -C sub checkout branch-a &&
+               test_commit -C sub bar &&
+               # Create a new branch-b branch with start-point=branch-a
+               git branch --recurse-submodules branch-b branch-a &&
+               git rev-parse branch-b &&
+               git -C sub rev-parse branch-b >actual &&
+               # Assert that the commit id of sub:second-branch matches super:branch-a and not sub:branch-a
+               test_cmp expected actual
+       )
+'
+
+test_expect_success 'should not create any branches if branch is not valid for all repos' '
+       test_when_finished "reset_test" &&
+       (
+               cd super &&
+               git -C sub branch branch-a &&
+               test_must_fail git branch --recurse-submodules branch-a 2>actual &&
+               test_no_branch . branch-a &&
+               grep "submodule .sub.: fatal: a branch named .branch-a. already exists" actual
+       )
+'
+
+test_expect_success 'should create branches if branch exists and --force is given' '
+       test_when_finished "reset_test" &&
+       (
+               cd super &&
+               git -C sub rev-parse HEAD >expected &&
+               test_commit -C sub baz &&
+               # branch-a in sub now points to a newer commit.
+               git -C sub branch branch-a HEAD &&
+               git -C sub rev-parse branch-a >actual-old-branch-a &&
+               git branch --recurse-submodules --force branch-a &&
+               git rev-parse branch-a &&
+               git -C sub rev-parse branch-a >actual-new-branch-a &&
+               test_cmp expected actual-new-branch-a &&
+               # assert that branch --force actually moved the sub
+               # branch
+               ! test_cmp expected actual-old-branch-a
+       )
+'
+
+test_expect_success 'should create branch when submodule is not in HEAD:.gitmodules' '
+       test_when_finished "reset_test" &&
+       (
+               cd super &&
+               git branch branch-a &&
+               git checkout -b branch-b &&
+               git submodule add ../sub-upstream sub2 &&
+               git -C sub2 submodule update --init &&
+               # branch-b now has a committed submodule not in branch-a
+               git commit -m "add second submodule" &&
+               git checkout branch-a &&
+               git branch --recurse-submodules branch-c branch-b &&
+               git checkout --recurse-submodules branch-c &&
+               git -C sub2 rev-parse branch-c &&
+               git -C sub2/sub-sub rev-parse branch-c
+       )
+'
+
+test_expect_success 'should not create branches in inactive submodules' '
+       test_when_finished "reset_test" &&
+       test_config -C super submodule.sub.active false &&
+       (
+               cd super &&
+               git branch --recurse-submodules branch-a &&
+               git rev-parse branch-a &&
+               test_no_branch sub branch-a
+       )
+'
+
+test_expect_success 'should set up tracking of local branches with track=always' '
+       test_when_finished "reset_test" &&
+       (
+               cd super &&
+               git -c branch.autoSetupMerge=always branch --recurse-submodules branch-a main &&
+               git -C sub rev-parse main &&
+               test_cmp_config -C sub . branch.branch-a.remote &&
+               test_cmp_config -C sub refs/heads/main branch.branch-a.merge
+       )
+'
+
+test_expect_success 'should set up tracking of local branches with explicit track' '
+       test_when_finished "reset_test" &&
+       (
+               cd super &&
+               git branch --track --recurse-submodules branch-a main &&
+               git -C sub rev-parse main &&
+               test_cmp_config -C sub . branch.branch-a.remote &&
+               test_cmp_config -C sub refs/heads/main branch.branch-a.merge
+       )
+'
+
+test_expect_success 'should not set up unnecessary tracking of local branches' '
+       test_when_finished "reset_test" &&
+       (
+               cd super &&
+               git branch --recurse-submodules branch-a main &&
+               git -C sub rev-parse main &&
+               test_cmp_config -C sub "" --default "" branch.branch-a.remote &&
+               test_cmp_config -C sub "" --default "" branch.branch-a.merge
+       )
+'
+
+reset_remote_test () {
+       rm -fr super-clone &&
+       reset_test
+}
+
+test_expect_success 'setup tests with remotes' '
+       (
+               cd test_dirs &&
+               (
+                       cd super &&
+                       git branch branch-a &&
+                       git checkout -b branch-b &&
+                       git submodule add ../sub-upstream sub2 &&
+                       # branch-b now has a committed submodule not in branch-a
+                       git commit -m "add second submodule"
+               ) &&
+               git clone --branch main --recurse-submodules super super-clone &&
+               git -C super-clone config submodule.propagateBranches true
+       ) &&
+       reset_remote_test
+'
+
+test_expect_success 'should get fatal error upon branch creation when submodule is not in .git/modules' '
+       test_when_finished "reset_remote_test" &&
+       (
+               cd super-clone &&
+               # This should succeed because super-clone has sub in .git/modules
+               git branch --recurse-submodules branch-a origin/branch-a &&
+               # This should fail because super-clone does not have sub2 .git/modules
+               test_must_fail git branch --recurse-submodules branch-b origin/branch-b 2>actual &&
+               grep "fatal: submodule .sub2.: unable to find submodule" actual &&
+               test_no_branch . branch-b &&
+               test_no_branch sub branch-b &&
+               # User can fix themselves by initializing the submodule
+               git checkout origin/branch-b &&
+               git submodule update --init --recursive &&
+               git branch --recurse-submodules branch-b origin/branch-b
+       )
+'
+
+test_expect_success 'should set up tracking of remote-tracking branches by default' '
+       test_when_finished "reset_remote_test" &&
+       (
+               cd super-clone &&
+               git branch --recurse-submodules branch-a origin/branch-a &&
+               test_cmp_config origin branch.branch-a.remote &&
+               test_cmp_config refs/heads/branch-a branch.branch-a.merge &&
+               # "origin/branch-a" does not exist for "sub", but it matches the refspec
+               # so tracking should be set up
+               test_cmp_config -C sub origin branch.branch-a.remote &&
+               test_cmp_config -C sub refs/heads/branch-a branch.branch-a.merge &&
+               test_cmp_config -C sub/sub-sub origin branch.branch-a.remote &&
+               test_cmp_config -C sub/sub-sub refs/heads/branch-a branch.branch-a.merge
+       )
+'
+
+test_expect_success 'should not fail when unable to set up tracking in submodule' '
+       test_when_finished "reset_remote_test" &&
+       (
+               cd super-clone &&
+               git remote rename origin ex-origin &&
+               git branch --recurse-submodules branch-a ex-origin/branch-a &&
+               test_cmp_config ex-origin branch.branch-a.remote &&
+               test_cmp_config refs/heads/branch-a branch.branch-a.merge &&
+               test_cmp_config -C sub "" --default "" branch.branch-a.remote &&
+               test_cmp_config -C sub "" --default "" branch.branch-a.merge
+       )
+'
+
+test_expect_success '--track=inherit should set up tracking correctly' '
+       test_when_finished "reset_remote_test" &&
+       (
+               cd super-clone &&
+               git branch --recurse-submodules branch-a origin/branch-a &&
+               # Set this manually instead of using branch --set-upstream-to
+               # to circumvent the "nonexistent upstream" check.
+               git -C sub config branch.branch-a.remote origin &&
+               git -C sub config branch.branch-a.merge refs/heads/sub-branch-a &&
+               git -C sub/sub-sub config branch.branch-a.remote other &&
+               git -C sub/sub-sub config branch.branch-a.merge refs/heads/sub-sub-branch-a &&
+
+               git branch --recurse-submodules --track=inherit branch-b branch-a &&
+               test_cmp_config origin branch.branch-b.remote &&
+               test_cmp_config refs/heads/branch-a branch.branch-b.merge &&
+               test_cmp_config -C sub origin branch.branch-b.remote &&
+               test_cmp_config -C sub refs/heads/sub-branch-a branch.branch-b.merge &&
+               test_cmp_config -C sub/sub-sub other branch.branch-b.remote &&
+               test_cmp_config -C sub/sub-sub refs/heads/sub-sub-branch-a branch.branch-b.merge
+       )
+'
+
+test_expect_success '--no-track should not set up tracking' '
+       test_when_finished "reset_remote_test" &&
+       (
+               cd super-clone &&
+               git branch --recurse-submodules --no-track branch-a origin/branch-a &&
+               test_cmp_config "" --default "" branch.branch-a.remote &&
+               test_cmp_config "" --default "" branch.branch-a.merge &&
+               test_cmp_config -C sub "" --default "" branch.branch-a.remote &&
+               test_cmp_config -C sub "" --default "" branch.branch-a.merge &&
+               test_cmp_config -C sub/sub-sub "" --default "" branch.branch-a.remote &&
+               test_cmp_config -C sub/sub-sub "" --default "" branch.branch-a.merge
+       )
+'
+
+test_done
index bc9d8ee1e6a8b223f084cdc405a52048630ba5b1..bb5fea02a03a563a23e806d80dbb88a673c40802 100755 (executable)
@@ -8,7 +8,6 @@ test_description='Test commit notes index (expensive!)'
 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 
-TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 create_repo () {
@@ -65,7 +64,8 @@ create_repo () {
 test_notes () {
        count=$1 &&
        git config core.notesRef refs/notes/commits &&
-       git log | grep "^    " >output &&
+       git log >tmp &&
+       grep "^    " tmp >output &&
        i=$count &&
        while test $i -gt 0
        do
@@ -90,7 +90,7 @@ write_script time_notes <<\EOF
                        unset GIT_NOTES_REF
                        ;;
                esac
-               git log
+               git log || exit $?
                i=$(($i+1))
        done >/dev/null
 EOF
index 7e0a8960af886fb83d555766919e34fcd532bf7c..eac193757bf1a5cd27ed4d54249a41de7b302bde 100755 (executable)
@@ -5,7 +5,6 @@ test_description='Test commit notes organized in subtrees'
 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 
-TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 number_of_commits=100
@@ -79,7 +78,7 @@ test_sha1_based () {
        (
                start_note_commit &&
                nr=$number_of_commits &&
-               git rev-list refs/heads/main |
+               git rev-list refs/heads/main >out &&
                while read sha1; do
                        note_path=$(echo "$sha1" | sed "$1")
                        cat <<INPUT_END &&
@@ -91,9 +90,9 @@ EOF
 INPUT_END
 
                        nr=$(($nr-1))
-               done
-       ) |
-       git fast-import --quiet
+               done <out
+       ) >gfi &&
+       git fast-import --quiet <gfi
 }
 
 test_expect_success 'test notes in 2/38-fanout' 'test_sha1_based "s|^..|&/|"'
index 1f5964865ae173e05fab2070c179ff305886bf82..9976d787f4721c898d52eb0211399b145c9e1872 100755 (executable)
@@ -2,7 +2,6 @@
 
 test_description='Test that adding/removing many notes triggers automatic fanout restructuring'
 
-TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 path_has_fanout() {
@@ -24,7 +23,7 @@ touched_one_note_with_fanout() {
 all_notes_have_fanout() {
        notes_commit=$1 &&
        fanout=$2 &&
-       git ls-tree -r --name-only $notes_commit 2>/dev/null |
+       git ls-tree -r --name-only $notes_commit |
        while read path
        do
                path_has_fanout $path $fanout || return 1
@@ -51,8 +50,9 @@ test_expect_success 'creating many notes with git-notes' '
        done
 '
 
-test_expect_success 'many notes created correctly with git-notes' '
-       git log | grep "^    " > output &&
+test_expect_success !SANITIZE_LEAK 'many notes created correctly with git-notes' '
+       git log >output.raw &&
+       grep "^    " output.raw >output &&
        i=$num_notes &&
        while test $i -gt 0
        do
@@ -91,13 +91,13 @@ test_expect_success 'stable fanout 0 is followed by stable fanout 1' '
 test_expect_success 'deleting most notes with git-notes' '
        remove_notes=285 &&
        i=0 &&
-       git rev-list HEAD |
+       git rev-list HEAD >revs &&
        while test $i -lt $remove_notes && read sha1
        do
                i=$(($i + 1)) &&
                test_tick &&
-               git notes remove "$sha1" 2>/dev/null || return 1
-       done
+               git notes remove "$sha1" || return 1
+       done <revs
 '
 
 test_expect_success 'most notes deleted correctly with git-notes' '
index 71b1735e1dd180bb16a72df76b1b49f49a59072d..d5a8ee39fc478d3d3ab2ab71ec780efd76140d20 100755 (executable)
@@ -18,10 +18,7 @@ GIT_AUTHOR_EMAIL=bogus@email@address
 export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL
 
 test_expect_success 'prepare repository with topic branches' '
-       git config core.logAllRefUpdates true &&
-       echo First >A &&
-       git update-index --add A &&
-       git commit -m "Add A." &&
+       test_commit "Add A." A First First &&
        git checkout -b force-3way &&
        echo Dummy >Y &&
        git update-index --add Y &&
@@ -32,9 +29,7 @@ test_expect_success 'prepare repository with topic branches' '
        git mv A D/A &&
        git commit -m "Move A." &&
        git checkout -b my-topic-branch main &&
-       echo Second >B &&
-       git update-index --add B &&
-       git commit -m "Add B." &&
+       test_commit "Add B." B Second Second &&
        git checkout -f main &&
        echo Third >>A &&
        git update-index A &&
@@ -399,6 +394,15 @@ test_expect_success 'switch to branch not checked out' '
        git rebase main other
 '
 
+test_expect_success 'switch to non-branch detaches HEAD' '
+       git checkout main &&
+       old_main=$(git rev-parse HEAD) &&
+       git rebase First Second^0 &&
+       test_cmp_rev HEAD Second &&
+       test_cmp_rev main $old_main &&
+       test_must_fail git symbolic-ref HEAD
+'
+
 test_expect_success 'refuse to switch to branch checked out elsewhere' '
        git checkout main &&
        git worktree add wt &&
index a38f2da7691e870f8dfa90936c0107d7d080e0d1..f31afd4a54754a982e26b78271317ea61a3b9cda 100755 (executable)
@@ -619,9 +619,7 @@ test_expect_success 'rebase a detached HEAD' '
 '
 
 test_expect_success 'rebase a commit violating pre-commit' '
-
-       mkdir -p .git/hooks &&
-       write_script .git/hooks/pre-commit <<-\EOF &&
+       test_hook pre-commit <<-\EOF &&
        test -z "$(git diff --cached --check)"
        EOF
        echo "monde! " >> file1 &&
@@ -636,8 +634,6 @@ test_expect_success 'rebase a commit violating pre-commit' '
 '
 
 test_expect_success 'rebase with a file named HEAD in worktree' '
-
-       rm -fr .git/hooks &&
        git reset --hard &&
        git checkout -b branch3 A &&
 
@@ -1688,10 +1684,8 @@ test_expect_success 'valid author header when author contains single quote' '
 '
 
 test_expect_success 'post-commit hook is called' '
-       test_when_finished "rm -f .git/hooks/post-commit" &&
        >actual &&
-       mkdir -p .git/hooks &&
-       write_script .git/hooks/post-commit <<-\EOS &&
+       test_hook post-commit <<-\EOS &&
        git rev-parse HEAD >>actual
        EOS
        (
index 77a313f62eb36c5c340dff627e3c0afcffb65792..d17b450e811cc0f13ab94ac76e288f782e897d64 100755 (executable)
@@ -105,6 +105,29 @@ test_expect_success 'GIT_REFLOG_ACTION' '
        test_cmp expect actual
 '
 
+test_expect_success 'rebase --apply reflog' '
+       git checkout -b reflog-apply start &&
+       old_head_reflog="$(git log -g --format=%gs -1 HEAD)" &&
+
+       git rebase --apply Y &&
+
+       git log -g --format=%gs -4 HEAD >actual &&
+       cat >expect <<-EOF &&
+       rebase finished: returning to refs/heads/reflog-apply
+       rebase: Z
+       rebase: checkout Y
+       $old_head_reflog
+       EOF
+       test_cmp expect actual &&
+
+       git log -g --format=%gs -2 reflog-apply >actual &&
+       cat >expect <<-EOF &&
+       rebase finished: refs/heads/reflog-apply onto $(git rev-parse Y)
+       branch: Created from start
+       EOF
+       test_cmp expect actual
+'
+
 test_expect_success 'rebase -i onto unrelated history' '
        git init unrelated &&
        test_commit -C unrelated 1 &&
index 19c6f4acbf6c8a2872da776e586b327639258901..58371d8a5477f47d53384a84ad0dae14457128d9 100755 (executable)
@@ -11,7 +11,7 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 
 log_with_names () {
        git rev-list --topo-order --parents --pretty="tformat:%s" HEAD |
-       git name-rev --stdin --name-only --refs=refs/heads/$1
+       git name-rev --annotate-stdin --name-only --refs=refs/heads/$1
 }
 
 
@@ -31,12 +31,9 @@ test_expect_success 'rebase --root fails with too many args' '
 '
 
 test_expect_success 'setup pre-rebase hook' '
-       mkdir -p .git/hooks &&
-       cat >.git/hooks/pre-rebase <<EOF &&
-#!$SHELL_PATH
-echo "\$1,\$2" >.git/PRE-REBASE-INPUT
-EOF
-       chmod +x .git/hooks/pre-rebase
+       test_hook --setup pre-rebase <<-\EOF
+       echo "$1,$2" >.git/PRE-REBASE-INPUT
+       EOF
 '
 cat > expect <<EOF
 4
@@ -141,12 +138,9 @@ commit work7~5
 EOF
 
 test_expect_success 'setup pre-rebase hook that fails' '
-       mkdir -p .git/hooks &&
-       cat >.git/hooks/pre-rebase <<EOF &&
-#!$SHELL_PATH
-false
-EOF
-       chmod +x .git/hooks/pre-rebase
+       test_hook --setup --clobber pre-rebase <<-\EOF
+       false
+       EOF
 '
 
 test_expect_success 'pre-rebase hook stops rebase' '
index b4acb3be5cf6f1d12521faf29a8c2afc6d3ff8e2..9fab0d779bb6cf32dbc0ece0a69ad2c2821a598e 100755 (executable)
@@ -41,12 +41,9 @@ test_expect_success 'rebase -i' '
 '
 
 test_expect_success 'setup pre-rebase hook' '
-       mkdir -p .git/hooks &&
-       cat >.git/hooks/pre-rebase <<EOF &&
-#!$SHELL_PATH
-echo "\$1,\$2" >.git/PRE-REBASE-INPUT
-EOF
-       chmod +x .git/hooks/pre-rebase
+       test_hook --setup pre-rebase <<-\EOF
+       echo "$1,$2" >.git/PRE-REBASE-INPUT
+       EOF
 '
 
 test_expect_success 'pre-rebase hook gets correct input (1)' '
@@ -102,12 +99,9 @@ test_expect_success 'pre-rebase hook gets correct input (6)' '
 '
 
 test_expect_success 'setup pre-rebase hook that fails' '
-       mkdir -p .git/hooks &&
-       cat >.git/hooks/pre-rebase <<EOF &&
-#!$SHELL_PATH
-false
-EOF
-       chmod +x .git/hooks/pre-rebase
+       test_hook --setup --clobber pre-rebase <<-\EOF
+       false
+       EOF
 '
 
 test_expect_success 'pre-rebase hook stops rebase (1)' '
index 3716a42e81284f562cef9ba951edbbd1ff6701d6..3e04802cb003b027c0d70319465af4363877de06 100755 (executable)
@@ -129,6 +129,20 @@ test_expect_success 'rebase --keep-base main from topic' '
        test_cmp expect actual
 '
 
+test_expect_success 'rebase --keep-base main topic from main' '
+       git checkout main &&
+       git branch -f topic G &&
+
+       git rebase --keep-base main topic &&
+       git rev-parse C >base.expect &&
+       git merge-base main HEAD >base.actual &&
+       test_cmp base.expect base.actual &&
+
+       git rev-parse HEAD~2 >actual &&
+       git rev-parse C^0 >expect &&
+       test_cmp expect actual
+'
+
 test_expect_success 'rebase --keep-base main from side' '
        git reset --hard &&
        git checkout side &&
@@ -153,6 +167,21 @@ test_expect_success 'rebase -i --keep-base main from topic' '
        test_cmp expect actual
 '
 
+test_expect_success 'rebase -i --keep-base main topic from main' '
+       git checkout main &&
+       git branch -f topic G &&
+
+       set_fake_editor &&
+       EXPECT_COUNT=2 git rebase -i --keep-base main topic &&
+       git rev-parse C >base.expect &&
+       git merge-base main HEAD >base.actual &&
+       test_cmp base.expect base.actual &&
+
+       git rev-parse HEAD~2 >actual &&
+       git rev-parse C^0 >expect &&
+       test_cmp expect actual
+'
+
 test_expect_success 'rebase -i --keep-base main from side' '
        git reset --hard &&
        git checkout side &&
index 22eca73aa3e926cf58d0c723f97c1d0394021371..130e2f9b553003b9972ebe1010f17abff2d5ee05 100755 (executable)
@@ -308,4 +308,30 @@ test_expect_success 'there is no --no-reschedule-failed-exec in an ongoing rebas
        test_expect_code 129 git rebase --edit-todo --no-reschedule-failed-exec
 '
 
+test_orig_head_helper () {
+       test_when_finished 'git rebase --abort &&
+               git checkout topic &&
+               git reset --hard commit-new-file-F2-on-topic-branch' &&
+       git update-ref -d ORIG_HEAD &&
+       test_must_fail git rebase "$@" &&
+       test_cmp_rev ORIG_HEAD commit-new-file-F2-on-topic-branch
+}
+
+test_orig_head () {
+       type=$1
+       test_expect_success "rebase $type sets ORIG_HEAD correctly" '
+               git checkout topic &&
+               git reset --hard commit-new-file-F2-on-topic-branch &&
+               test_orig_head_helper $type main
+       '
+
+       test_expect_success "rebase $type <upstream> <branch> sets ORIG_HEAD correctly" '
+               git checkout main &&
+               test_orig_head_helper $type main topic
+       '
+}
+
+test_orig_head --apply
+test_orig_head --merge
+
 test_done
index 43c82d9a33b003d194e1ec7284e312e4e84337d7..f351701fec281aa6a88e9ee7185101639c8bbcd6 100755 (executable)
@@ -292,9 +292,9 @@ test_expect_success 'post-rewrite hook and fixups work for merges' '
        git commit --fixup HEAD same2.t &&
        fixup="$(git rev-parse HEAD)" &&
 
-       mkdir -p .git/hooks &&
-       test_when_finished "rm .git/hooks/post-rewrite" &&
-       echo "cat >actual" | write_script .git/hooks/post-rewrite &&
+       test_hook post-rewrite <<-\EOF &&
+       cat >actual
+       EOF
 
        test_tick &&
        git rebase -i --autosquash -r HEAD^^^ &&
index 207714655f283971f791b4ab2426aa0d7b910080..94537a6b40a136f71d52a3e34552c1f1f7a298ac 100755 (executable)
@@ -326,7 +326,9 @@ test_expect_success 'correct message when there is nothing to do' '
 test_expect_success 'setup again' '
        git reset --hard &&
        test_chmod +x file &&
-       echo content >>file
+       echo content >>file &&
+       test_write_lines A B C D>file2 &&
+       git add file2
 '
 
 # Write the patch file with a new line at the top and bottom
@@ -341,13 +343,27 @@ test_expect_success 'setup patch' '
         content
        +lastline
        \ No newline at end of file
+       diff --git a/file2 b/file2
+       index 8422d40..35b930a 100644
+       --- a/file2
+       +++ b/file2
+       @@ -1,4 +1,5 @@
+       -A
+       +Z
+        B
+       +Y
+        C
+       -D
+       +X
        EOF
 '
 
 # Expected output, diff is similar to the patch but w/ diff at the top
 test_expect_success 'setup expected' '
        echo diff --git a/file b/file >expected &&
-       cat patch |sed "/^index/s/ 100644/ 100755/" >>expected &&
+       sed -e "/^index 180b47c/s/ 100644/ 100755/" \
+           -e /1,5/s//1,4/ \
+           -e /Y/d patch >>expected &&
        cat >expected-output <<-\EOF
        --- a/file
        +++ b/file
@@ -366,6 +382,28 @@ test_expect_success 'setup expected' '
         content
        +lastline
        \ No newline at end of file
+       --- a/file2
+       +++ b/file2
+       @@ -1,4 +1,5 @@
+       -A
+       +Z
+        B
+       +Y
+        C
+       -D
+       +X
+       @@ -1,2 +1,2 @@
+       -A
+       +Z
+        B
+       @@ -2,2 +2,3 @@
+        B
+       +Y
+        C
+       @@ -3,2 +4,2 @@
+        C
+       -D
+       +X
        EOF
 '
 
@@ -373,9 +411,9 @@ test_expect_success 'setup expected' '
 test_expect_success 'add first line works' '
        git commit -am "clear local changes" &&
        git apply patch &&
-       printf "%s\n" s y y | git add -p file 2>error |
-               sed -n -e "s/^([1-2]\/[1-2]) Stage this hunk[^@]*\(@@ .*\)/\1/" \
-                      -e "/^[-+@ \\\\]"/p  >output &&
+       test_write_lines s y y s y n y | git add -p 2>error >raw-output &&
+       sed -n -e "s/^([1-9]\/[1-9]) Stage this hunk[^@]*\(@@ .*\)/\1/" \
+              -e "/^[-+@ \\\\]"/p raw-output >output &&
        test_must_be_empty error &&
        git diff --cached >diff &&
        diff_cmp expected diff &&
index 81f3384eeed4bba508f2e87aeb72a1a6f9a37394..95609046c61d3711244524d48061df4dae8cc343 100755 (executable)
@@ -19,6 +19,7 @@ setup_sparse_entry () {
        fi &&
        git add sparse_entry &&
        git update-index --skip-worktree sparse_entry &&
+       git config core.sparseCheckout false &&
        git commit --allow-empty -m "ensure sparse_entry exists at HEAD" &&
        SPARSE_ENTRY_BLOB=$(git rev-parse :sparse_entry)
 }
@@ -126,6 +127,7 @@ test_expect_success 'git add --chmod does not update sparse entries' '
 '
 
 test_expect_success 'git add --renormalize does not update sparse entries' '
+       test_when_finished rm .gitattributes &&
        test_config core.autocrlf false &&
        setup_sparse_entry "LINEONE\r\nLINETWO\r\n" &&
        echo "sparse_entry text=auto" >.gitattributes &&
index 686747e55a301a661d75c63223a7d682c30dbd4b..4abbc8fccae78c69358970644320a3a114793083 100755 (executable)
@@ -41,7 +41,7 @@ diff_cmp () {
        rm -f "$1.compare" "$2.compare"
 }
 
-test_expect_success 'stash some dirty working directory' '
+setup_stash() {
        echo 1 >file &&
        git add file &&
        echo unrelated >other-file &&
@@ -55,6 +55,10 @@ test_expect_success 'stash some dirty working directory' '
        git stash &&
        git diff-files --quiet &&
        git diff-index --cached --quiet HEAD
+}
+
+test_expect_success 'stash some dirty working directory' '
+       setup_stash
 '
 
 cat >expect <<EOF
@@ -185,6 +189,43 @@ test_expect_success 'drop middle stash by index' '
        test 1 = $(git show HEAD:file)
 '
 
+test_expect_success 'drop stash reflog updates refs/stash' '
+       git reset --hard &&
+       git rev-parse refs/stash >expect &&
+       echo 9 >file &&
+       git stash &&
+       git stash drop stash@{0} &&
+       git rev-parse refs/stash >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success REFFILES 'drop stash reflog updates refs/stash with rewrite' '
+       git init repo &&
+       (
+               cd repo &&
+               setup_stash
+       ) &&
+       echo 9 >repo/file &&
+
+       old_oid="$(git -C repo rev-parse stash@{0})" &&
+       git -C repo stash &&
+       new_oid="$(git -C repo rev-parse stash@{0})" &&
+
+       cat >expect <<-EOF &&
+       $(test_oid zero) $old_oid
+       $old_oid $new_oid
+       EOF
+       cut -d" " -f1-2 repo/.git/logs/refs/stash >actual &&
+       test_cmp expect actual &&
+
+       git -C repo stash drop stash@{1} &&
+       cut -d" " -f1-2 repo/.git/logs/refs/stash >actual &&
+       cat >expect <<-EOF &&
+       $(test_oid zero) $new_oid
+       EOF
+       test_cmp expect actual
+'
+
 test_expect_success 'stash pop' '
        git reset --hard &&
        git stash pop &&
@@ -261,6 +302,18 @@ test_expect_success 'apply -q is quiet' '
        test_must_be_empty output.out
 '
 
+test_expect_success 'apply --index -q is quiet' '
+       # Added file, deleted file, modified file all staged for commit
+       echo foo >new-file &&
+       echo test >file &&
+       git add new-file file &&
+       git rm other-file &&
+
+       git stash &&
+       git stash apply --index -q >output.out 2>&1 &&
+       test_must_be_empty output.out
+'
+
 test_expect_success 'save -q is quiet' '
        git stash save --quiet >output.out 2>&1 &&
        test_must_be_empty output.out
@@ -291,6 +344,27 @@ test_expect_success 'drop -q is quiet' '
        test_must_be_empty output.out
 '
 
+test_expect_success 'stash push -q --staged refreshes the index' '
+       git reset --hard &&
+       echo test >file &&
+       git add file &&
+       git stash push -q --staged &&
+       git diff-files >output.out &&
+       test_must_be_empty output.out
+'
+
+test_expect_success 'stash apply -q --index refreshes the index' '
+       echo test >other-file &&
+       git add other-file &&
+       echo another-change >other-file &&
+       git diff-files >expect &&
+       git stash &&
+
+       git stash apply -q --index &&
+       git diff-files >actual &&
+       test_cmp expect actual
+'
+
 test_expect_success 'stash -k' '
        echo bar3 >file &&
        echo bar4 >file2 &&
@@ -390,10 +464,11 @@ test_expect_success SYMLINKS 'stash file to symlink' '
        rm file &&
        ln -s file2 file &&
        git stash save "file to symlink" &&
-       test -f file &&
+       test_path_is_file_not_symlink file &&
        test bar = "$(cat file)" &&
        git stash apply &&
-       case "$(ls -l file)" in *" file -> file2") :;; *) false;; esac
+       test_path_is_symlink file &&
+       test "$(test_readlink file)" = file2
 '
 
 test_expect_success SYMLINKS 'stash file to symlink (stage rm)' '
@@ -401,10 +476,11 @@ test_expect_success SYMLINKS 'stash file to symlink (stage rm)' '
        git rm file &&
        ln -s file2 file &&
        git stash save "file to symlink (stage rm)" &&
-       test -f file &&
+       test_path_is_file_not_symlink file &&
        test bar = "$(cat file)" &&
        git stash apply &&
-       case "$(ls -l file)" in *" file -> file2") :;; *) false;; esac
+       test_path_is_symlink file &&
+       test "$(test_readlink file)" = file2
 '
 
 test_expect_success SYMLINKS 'stash file to symlink (full stage)' '
@@ -413,10 +489,11 @@ test_expect_success SYMLINKS 'stash file to symlink (full stage)' '
        ln -s file2 file &&
        git add file &&
        git stash save "file to symlink (full stage)" &&
-       test -f file &&
+       test_path_is_file_not_symlink file &&
        test bar = "$(cat file)" &&
        git stash apply &&
-       case "$(ls -l file)" in *" file -> file2") :;; *) false;; esac
+       test_path_is_symlink file &&
+       test "$(test_readlink file)" = file2
 '
 
 # This test creates a commit with a symlink used for the following tests
@@ -487,7 +564,7 @@ test_expect_failure 'stash directory to file' '
        rm -fr dir &&
        echo bar >dir &&
        git stash save "directory to file" &&
-       test -d dir &&
+       test_path_is_dir dir &&
        test foo = "$(cat dir/file)" &&
        test_must_fail git stash apply &&
        test bar = "$(cat dir)" &&
@@ -500,10 +577,10 @@ test_expect_failure 'stash file to directory' '
        mkdir file &&
        echo foo >file/file &&
        git stash save "file to directory" &&
-       test -f file &&
+       test_path_is_file file &&
        test bar = "$(cat file)" &&
        git stash apply &&
-       test -f file/file &&
+       test_path_is_file file/file &&
        test foo = "$(cat file/file)"
 '
 
@@ -1042,6 +1119,17 @@ test_expect_success 'create stores correct message' '
        test_cmp expect actual
 '
 
+test_expect_success 'create when branch name has /' '
+       test_when_finished "git checkout main" &&
+       git checkout -b some/topic &&
+       >foo &&
+       git add foo &&
+       STASH_ID=$(git stash create "create test message") &&
+       echo "On some/topic: create test message" >expect &&
+       git show --pretty=%s -s ${STASH_ID} >actual &&
+       test_cmp expect actual
+'
+
 test_expect_success 'create with multiple arguments for the message' '
        >foo &&
        git add foo &&
@@ -1272,7 +1360,6 @@ test_expect_success 'stash works when user.name and user.email are not set' '
        >2 &&
        git add 2 &&
        test_config user.useconfigonly true &&
-       test_config stash.usebuiltin true &&
        (
                sane_unset GIT_AUTHOR_NAME &&
                sane_unset GIT_AUTHOR_EMAIL &&
@@ -1323,20 +1410,6 @@ test_expect_success 'stash handles skip-worktree entries nicely' '
        git rev-parse --verify refs/stash:A.t
 '
 
-test_expect_success 'stash -c stash.useBuiltin=false warning ' '
-       expected="stash.useBuiltin support has been removed" &&
-
-       git -c stash.useBuiltin=false stash 2>err &&
-       test_i18ngrep "$expected" err &&
-       env GIT_TEST_STASH_USE_BUILTIN=false git stash 2>err &&
-       test_i18ngrep "$expected" err &&
-
-       git -c stash.useBuiltin=true stash 2>err &&
-       test_must_be_empty err &&
-       env GIT_TEST_STASH_USE_BUILTIN=true git stash 2>err &&
-       test_must_be_empty err
-'
-
 test_expect_success 'git stash succeeds despite directory/file change' '
        test_create_repo directory_file_switch_v1 &&
        (
index 750aee17ea9650530a5e716020b4ae05ad6c0ef9..056e922164d04976570b4e5fc25975f1cbfc8b7a 100755 (executable)
@@ -542,6 +542,39 @@ test_expect_success 'diff-tree --stdin with log formatting' '
        test_cmp expect actual
 '
 
+test_expect_success 'diff-tree --stdin with pathspec' '
+       cat >expect <<-EOF &&
+       Third
+
+       dir/sub
+       Second
+
+       dir/sub
+       EOF
+       git rev-list master^ |
+       git diff-tree -r --stdin --name-only --format=%s dir >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'show A B ... -- <pathspec>' '
+       # side touches dir/sub, file0, and file3
+       # master^ touches dir/sub, and file1
+       # master^^ touches dir/sub, file0, and file2
+       git show --name-only --format="<%s>" side master^ master^^ -- dir >actual &&
+       cat >expect <<-\EOF &&
+       <Side>
+
+       dir/sub
+       <Third>
+
+       dir/sub
+       <Second>
+
+       dir/sub
+       EOF
+       test_cmp expect actual
+'
+
 test_expect_success 'diff -I<regex>: setup' '
        git checkout master &&
        test_seq 50 >file0 &&
index 7dc5a5c736e3f2db0c4bc29c20321b6a386661df..fbec8ad2ef7bb263765357c2f783448184c6b808 100755 (executable)
@@ -926,11 +926,40 @@ test_expect_success 'format-patch --numstat should produce a patch' '
 '
 
 test_expect_success 'format-patch -- <path>' '
-       git format-patch main..side -- file 2>error &&
-       ! grep "Use .--" error
+       rm -f *.patch &&
+       git checkout -b pathspec main &&
+
+       echo file_a 1 >file_a &&
+       echo file_b 1 >file_b &&
+       git add file_a file_b &&
+       git commit -m pathspec_initial &&
+
+       echo file_a 2 >>file_a &&
+       git add file_a &&
+       git commit -m pathspec_a &&
+
+       echo file_b 2 >>file_b &&
+       git add file_b &&
+       git commit -m pathspec_b &&
+
+       echo file_a 3 >>file_a &&
+       echo file_b 3 >>file_b &&
+       git add file_a file_b &&
+       git commit -m pathspec_ab &&
+
+       cat >expect <<-\EOF &&
+       0001-pathspec_initial.patch
+       0002-pathspec_a.patch
+       0003-pathspec_ab.patch
+       EOF
+
+       git format-patch main..pathspec -- file_a >output &&
+       test_cmp expect output &&
+       ! grep file_b *.patch
 '
 
 test_expect_success 'format-patch --ignore-if-in-upstream HEAD' '
+       git checkout side &&
        git format-patch --ignore-if-in-upstream HEAD
 '
 
index 9babf13bc9b977737167569adb4586da336a5470..f3e20dd5bba202ba5d5589e897d753672096b866 100755 (executable)
@@ -6,6 +6,8 @@
 test_description='Test special whitespace in diff engine.
 
 '
+
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 . "$TEST_DIRECTORY"/lib-diff.sh
 
@@ -1622,7 +1624,7 @@ test_expect_success 'cmd option assumes configured colored-moved' '
        test_cmp expected actual
 '
 
-test_expect_success 'no effect from --color-moved with --word-diff' '
+test_expect_success 'no effect on diff from --color-moved with --word-diff' '
        cat <<-\EOF >text.txt &&
        Lorem Ipsum is simply dummy text of the printing and typesetting industry.
        EOF
@@ -1636,6 +1638,12 @@ test_expect_success 'no effect from --color-moved with --word-diff' '
        test_cmp expect actual
 '
 
+test_expect_success !SANITIZE_LEAK 'no effect on show from --color-moved with --word-diff' '
+       git show --color-moved --word-diff >actual &&
+       git show --word-diff >expect &&
+       test_cmp expect actual
+'
+
 test_expect_success 'set up whitespace tests' '
        git reset --hard &&
        # Note that these lines have no leading or trailing whitespace.
@@ -2016,7 +2024,7 @@ test_expect_success '--color-moved rewinds for MIN_ALNUM_COUNT' '
        test_cmp expected actual
 '
 
-test_expect_success 'move detection with submodules' '
+test_expect_success !SANITIZE_LEAK 'move detection with submodules' '
        test_create_repo bananas &&
        echo ripe >bananas/recipe &&
        git -C bananas add recipe &&
diff --git a/t/t4018/kotlin-class b/t/t4018/kotlin-class
new file mode 100644 (file)
index 0000000..bb864f2
--- /dev/null
@@ -0,0 +1,5 @@
+class RIGHT {
+       //comment
+       //comment
+       return ChangeMe
+}
diff --git a/t/t4018/kotlin-enum-class b/t/t4018/kotlin-enum-class
new file mode 100644 (file)
index 0000000..8885f90
--- /dev/null
@@ -0,0 +1,5 @@
+enum class RIGHT{
+       // Left
+       // a comment
+       ChangeMe
+}
diff --git a/t/t4018/kotlin-fun b/t/t4018/kotlin-fun
new file mode 100644 (file)
index 0000000..2a60280
--- /dev/null
@@ -0,0 +1,5 @@
+fun RIGHT(){
+       //a comment
+       //b comment
+    return ChangeMe()
+}
diff --git a/t/t4018/kotlin-inheritace-class b/t/t4018/kotlin-inheritace-class
new file mode 100644 (file)
index 0000000..77376c1
--- /dev/null
@@ -0,0 +1,5 @@
+open class RIGHT{
+       // a comment
+       // b comment
+       // ChangeMe
+}
diff --git a/t/t4018/kotlin-inline-class b/t/t4018/kotlin-inline-class
new file mode 100644 (file)
index 0000000..7bf46dd
--- /dev/null
@@ -0,0 +1,5 @@
+value class RIGHT(Args){
+       // a comment
+       // b comment
+       ChangeMe
+}
diff --git a/t/t4018/kotlin-interface b/t/t4018/kotlin-interface
new file mode 100644 (file)
index 0000000..f686ba7
--- /dev/null
@@ -0,0 +1,5 @@
+interface RIGHT{
+       //another comment
+       //another comment
+       //ChangeMe
+}
diff --git a/t/t4018/kotlin-nested-fun b/t/t4018/kotlin-nested-fun
new file mode 100644 (file)
index 0000000..1218685
--- /dev/null
@@ -0,0 +1,9 @@
+class LEFT{
+       class CENTER{
+               fun RIGHT(  a:Int){
+                       //comment
+                       //comment
+                       ChangeMe
+               }
+       }
+}
diff --git a/t/t4018/kotlin-public-class b/t/t4018/kotlin-public-class
new file mode 100644 (file)
index 0000000..9433fcc
--- /dev/null
@@ -0,0 +1,5 @@
+public class RIGHT{
+       //comment1
+       //comment2
+       ChangeMe
+}
diff --git a/t/t4018/kotlin-sealed-class b/t/t4018/kotlin-sealed-class
new file mode 100644 (file)
index 0000000..0efa4a4
--- /dev/null
@@ -0,0 +1,5 @@
+sealed class RIGHT {
+       // a comment
+       // b comment
+       ChangeMe
+}
index 54bb8ef27e7f0089a46ca48ecccf3998deb84a69..1219f8bd4c05f69ca159717c9b2e92f9510e76da 100755 (executable)
@@ -24,45 +24,38 @@ test_expect_success setup '
 '
 
 test_expect_success 'GIT_EXTERNAL_DIFF environment' '
-
-       GIT_EXTERNAL_DIFF=echo git diff | {
-               read path oldfile oldhex oldmode newfile newhex newmode &&
-               test "z$path" = zfile &&
-               test "z$oldmode" = z100644 &&
-               test "z$newhex" = "z$ZERO_OID" &&
-               test "z$newmode" = z100644 &&
-               oh=$(git rev-parse --verify HEAD:file) &&
-               test "z$oh" = "z$oldhex"
-       }
+       cat >expect <<-EOF &&
+       file $(git rev-parse --verify HEAD:file) 100644 file $(test_oid zero) 100644
+       EOF
+       GIT_EXTERNAL_DIFF=echo git diff >out &&
+       cut -d" " -f1,3- <out >actual &&
+       test_cmp expect actual
 
 '
 
-test_expect_success 'GIT_EXTERNAL_DIFF environment should apply only to diff' '
-
-       GIT_EXTERNAL_DIFF=echo git log -p -1 HEAD |
-       grep "^diff --git a/file b/file"
+test_expect_success !SANITIZE_LEAK 'GIT_EXTERNAL_DIFF environment should apply only to diff' '
+       GIT_EXTERNAL_DIFF=echo git log -p -1 HEAD >out &&
+       grep "^diff --git a/file b/file" out
 
 '
 
 test_expect_success 'GIT_EXTERNAL_DIFF environment and --no-ext-diff' '
-
-       GIT_EXTERNAL_DIFF=echo git diff --no-ext-diff |
-       grep "^diff --git a/file b/file"
+       GIT_EXTERNAL_DIFF=echo git diff --no-ext-diff >out &&
+       grep "^diff --git a/file b/file" out
 
 '
 
 test_expect_success SYMLINKS 'typechange diff' '
        rm -f file &&
        ln -s elif file &&
-       GIT_EXTERNAL_DIFF=echo git diff  | {
-               read path oldfile oldhex oldmode newfile newhex newmode &&
-               test "z$path" = zfile &&
-               test "z$oldmode" = z100644 &&
-               test "z$newhex" = "z$ZERO_OID" &&
-               test "z$newmode" = z120000 &&
-               oh=$(git rev-parse --verify HEAD:file) &&
-               test "z$oh" = "z$oldhex"
-       } &&
+
+       cat >expect <<-EOF &&
+       file $(git rev-parse --verify HEAD:file) 100644 $(test_oid zero) 120000
+       EOF
+       GIT_EXTERNAL_DIFF=echo git diff >out &&
+       cut -d" " -f1,3-4,6- <out >actual &&
+       test_cmp expect actual &&
+
        GIT_EXTERNAL_DIFF=echo git diff --no-ext-diff >actual &&
        git diff >expect &&
        test_cmp expect actual
@@ -72,27 +65,25 @@ test_expect_success 'diff.external' '
        git reset --hard &&
        echo third >file &&
        test_config diff.external echo &&
-       git diff | {
-               read path oldfile oldhex oldmode newfile newhex newmode &&
-               test "z$path" = zfile &&
-               test "z$oldmode" = z100644 &&
-               test "z$newhex" = "z$ZERO_OID" &&
-               test "z$newmode" = z100644 &&
-               oh=$(git rev-parse --verify HEAD:file) &&
-               test "z$oh" = "z$oldhex"
-       }
+
+       cat >expect <<-EOF &&
+       file $(git rev-parse --verify HEAD:file) 100644 $(test_oid zero) 100644
+       EOF
+       git diff >out &&
+       cut -d" " -f1,3-4,6- <out >actual &&
+       test_cmp expect actual
 '
 
-test_expect_success 'diff.external should apply only to diff' '
+test_expect_success !SANITIZE_LEAK 'diff.external should apply only to diff' '
        test_config diff.external echo &&
-       git log -p -1 HEAD |
-       grep "^diff --git a/file b/file"
+       git log -p -1 HEAD >out &&
+       grep "^diff --git a/file b/file" out
 '
 
 test_expect_success 'diff.external and --no-ext-diff' '
        test_config diff.external echo &&
-       git diff --no-ext-diff |
-       grep "^diff --git a/file b/file"
+       git diff --no-ext-diff >out &&
+       grep "^diff --git a/file b/file" out
 '
 
 test_expect_success 'diff attribute' '
@@ -103,29 +94,23 @@ test_expect_success 'diff attribute' '
 
        echo >.gitattributes "file diff=parrot" &&
 
-       git diff | {
-               read path oldfile oldhex oldmode newfile newhex newmode &&
-               test "z$path" = zfile &&
-               test "z$oldmode" = z100644 &&
-               test "z$newhex" = "z$ZERO_OID" &&
-               test "z$newmode" = z100644 &&
-               oh=$(git rev-parse --verify HEAD:file) &&
-               test "z$oh" = "z$oldhex"
-       }
-
+       cat >expect <<-EOF &&
+       file $(git rev-parse --verify HEAD:file) 100644 $(test_oid zero) 100644
+       EOF
+       git diff >out &&
+       cut -d" " -f1,3-4,6- <out >actual &&
+       test_cmp expect actual
 '
 
-test_expect_success 'diff attribute should apply only to diff' '
-
-       git log -p -1 HEAD |
-       grep "^diff --git a/file b/file"
+test_expect_success !SANITIZE_LEAK 'diff attribute should apply only to diff' '
+       git log -p -1 HEAD >out &&
+       grep "^diff --git a/file b/file" out
 
 '
 
 test_expect_success 'diff attribute and --no-ext-diff' '
-
-       git diff --no-ext-diff |
-       grep "^diff --git a/file b/file"
+       git diff --no-ext-diff >out &&
+       grep "^diff --git a/file b/file" out
 
 '
 
@@ -136,48 +121,55 @@ test_expect_success 'diff attribute' '
 
        echo >.gitattributes "file diff=color" &&
 
-       git diff | {
-               read path oldfile oldhex oldmode newfile newhex newmode &&
-               test "z$path" = zfile &&
-               test "z$oldmode" = z100644 &&
-               test "z$newhex" = "z$ZERO_OID" &&
-               test "z$newmode" = z100644 &&
-               oh=$(git rev-parse --verify HEAD:file) &&
-               test "z$oh" = "z$oldhex"
-       }
-
+       cat >expect <<-EOF &&
+       file $(git rev-parse --verify HEAD:file) 100644 $(test_oid zero) 100644
+       EOF
+       git diff >out &&
+       cut -d" " -f1,3-4,6- <out >actual &&
+       test_cmp expect actual
 '
 
-test_expect_success 'diff attribute should apply only to diff' '
-
-       git log -p -1 HEAD |
-       grep "^diff --git a/file b/file"
+test_expect_success !SANITIZE_LEAK 'diff attribute should apply only to diff' '
+       git log -p -1 HEAD >out &&
+       grep "^diff --git a/file b/file" out
 
 '
 
 test_expect_success 'diff attribute and --no-ext-diff' '
-
-       git diff --no-ext-diff |
-       grep "^diff --git a/file b/file"
+       git diff --no-ext-diff >out &&
+       grep "^diff --git a/file b/file" out
 
 '
 
 test_expect_success 'GIT_EXTERNAL_DIFF trumps diff.external' '
        >.gitattributes &&
        test_config diff.external "echo ext-global" &&
-       GIT_EXTERNAL_DIFF="echo ext-env" git diff | grep ext-env
+
+       cat >expect <<-EOF &&
+       ext-env file $(git rev-parse --verify HEAD:file) 100644 file $(test_oid zero) 100644
+       EOF
+       GIT_EXTERNAL_DIFF="echo ext-env" git diff >out &&
+       cut -d" " -f1-2,4- <out >actual &&
+       test_cmp expect actual
 '
 
 test_expect_success 'attributes trump GIT_EXTERNAL_DIFF and diff.external' '
        test_config diff.foo.command "echo ext-attribute" &&
        test_config diff.external "echo ext-global" &&
        echo "file diff=foo" >.gitattributes &&
-       GIT_EXTERNAL_DIFF="echo ext-env" git diff | grep ext-attribute
+
+       cat >expect <<-EOF &&
+       ext-attribute file $(git rev-parse --verify HEAD:file) 100644 file $(test_oid zero) 100644
+       EOF
+       GIT_EXTERNAL_DIFF="echo ext-env" git diff >out &&
+       cut -d" " -f1-2,4- <out >actual &&
+       test_cmp expect actual
 '
 
 test_expect_success 'no diff with -diff' '
        echo >.gitattributes "file -diff" &&
-       git diff | grep Binary
+       git diff >out &&
+       grep Binary out
 '
 
 echo NULZbetweenZwords | perl -pe 'y/Z/\000/' > file
@@ -217,7 +209,12 @@ test_expect_success 'GIT_EXTERNAL_DIFF generates pretty paths' '
        touch file.ext &&
        git add file.ext &&
        echo with extension > file.ext &&
-       GIT_EXTERNAL_DIFF=echo git diff file.ext | grep ......_file\.ext &&
+
+       cat >expect <<-EOF &&
+       file.ext file $(git rev-parse --verify HEAD:file) 100644 file.ext $(test_oid zero) 100644
+       EOF
+       GIT_EXTERNAL_DIFF=echo git diff file.ext >out &&
+       cut -d" " -f1,3- <out >actual &&
        git update-index --force-remove file.ext &&
        rm file.ext
 '
index 6cef0da982faa1fbb86696ca0275eb49c8224090..295da987cce5c8141b96d35944b73fb3f86f7e64 100755 (executable)
@@ -2,7 +2,6 @@
 
 test_description='difference in submodules'
 
-TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 . "$TEST_DIRECTORY"/lib-diff.sh
 
@@ -28,10 +27,8 @@ test_expect_success setup '
                git commit -m "submodule #2"
        ) &&
 
-       set x $(
-               cd sub &&
-               git rev-list HEAD
-       ) &&
+       git -C sub rev-list HEAD >revs &&
+       set x $(cat revs) &&
        echo ":160000 160000 $3 $ZERO_OID M     sub" >expect &&
        subtip=$3 subprev=$2
 '
index d5abcf4b4c6fa9f828b635dccbea37eae3ed4eb7..15764ee9ac8ab7984e57473a121be595c2e9b0cc 100755 (executable)
@@ -324,6 +324,7 @@ test_language_driver dts
 test_language_driver fortran
 test_language_driver html
 test_language_driver java
+test_language_driver kotlin
 test_language_driver matlab
 test_language_driver objc
 test_language_driver pascal
diff --git a/t/t4034/kotlin/expect b/t/t4034/kotlin/expect
new file mode 100644 (file)
index 0000000..7f76f75
--- /dev/null
@@ -0,0 +1,43 @@
+<BOLD>diff --git a/pre b/post<RESET>
+<BOLD>index 11ea3de..2e1df4c 100644<RESET>
+<BOLD>--- a/pre<RESET>
+<BOLD>+++ b/post<RESET>
+<CYAN>@@ -1,30 +1,30 @@<RESET>
+println("Hello World<RED>!\n<RESET><GREEN>?<RESET>")
+<GREEN>(<RESET>1<GREEN>) (<RESET>-1e10<GREEN>) (<RESET>0xabcdef<GREEN>)<RESET> '<RED>x<RESET><GREEN>y<RESET>'
+[<RED>a<RESET><GREEN>x<RESET>] <RED>a<RESET><GREEN>x<RESET>-><RED>b a<RESET><GREEN>y x<RESET>.<RED>b<RESET><GREEN>y<RESET>
+!<RED>a a<RESET><GREEN>x x<RESET>.inv() <RED>a<RESET><GREEN>x<RESET>*<RED>b a<RESET><GREEN>y x<RESET>&<RED>b<RESET>
+<RED>a<RESET><GREEN>y<RESET>
+<GREEN>x<RESET>*<RED>b a<RESET><GREEN>y x<RESET>/<RED>b a<RESET><GREEN>y x<RESET>%<RED>b<RESET>
+<RED>a<RESET><GREEN>y<RESET>
+<GREEN>x<RESET>+<RED>b a<RESET><GREEN>y x<RESET>-<RED>b<RESET><GREEN>y<RESET>
+a <RED>shr<RESET><GREEN>shl<RESET> b
+<RED>a<RESET><GREEN>x<RESET><<RED>b a<RESET><GREEN>y x<RESET><=<RED>b a<RESET><GREEN>y x<RESET>><RED>b a<RESET><GREEN>y x<RESET>>=<RED>b<RESET>
+<RED>a<RESET><GREEN>y<RESET>
+<GREEN>x<RESET>==<RED>b a<RESET><GREEN>y x<RESET>!=<RED>b a<RESET><GREEN>y x<RESET>===<RED>b<RESET>
+<RED>a<RESET><GREEN>y<RESET>
+<GREEN>x<RESET> and <RED>b<RESET>
+<RED>a<RESET><GREEN>y<RESET>
+<GREEN>x<RESET>^<RED>b<RESET>
+<RED>a<RESET><GREEN>y<RESET>
+<GREEN>x<RESET> or <RED>b<RESET>
+<RED>a<RESET><GREEN>y<RESET>
+<GREEN>x<RESET>&&<RED>b a<RESET><GREEN>y x<RESET>||<RED>b<RESET>
+<RED>a<RESET><GREEN>y<RESET>
+<GREEN>x<RESET>=<RED>b a<RESET><GREEN>y x<RESET>+=<RED>b a<RESET><GREEN>y x<RESET>-=<RED>b a<RESET><GREEN>y x<RESET>*=<RED>b a<RESET><GREEN>y x<RESET>/=<RED>b a<RESET><GREEN>y x<RESET>%=<RED>b a<RESET><GREEN>y x<RESET><<=<RED>b a<RESET><GREEN>y x<RESET>>>=<RED>b a<RESET><GREEN>y x<RESET>&=<RED>b a<RESET><GREEN>y x<RESET>^=<RED>b a<RESET><GREEN>y x<RESET>|=<RED>b<RESET><GREEN>y<RESET>
+a<RED>=<RESET><GREEN>+=<RESET>b c<RED>+=<RESET><GREEN>=<RESET>d e<RED>-=<RESET><GREEN><=<RESET>f g<RED>*=<RESET><GREEN>>=<RESET>h i<RED>/=<RESET><GREEN>/<RESET>j k<RED>%=<RESET><GREEN>%<RESET>l m<RED><<=<RESET><GREEN><<<RESET>n o<RED>>>=<RESET><GREEN>>><RESET>p q<RED>&=<RESET><GREEN>&<RESET>r s<RED>^=<RESET><GREEN>^<RESET>t u<RED>|=<RESET><GREEN>|<RESET>v
+a<RED><<=<RESET><GREEN><=<RESET>b
+a<RED>||<RESET><GREEN>|<RESET>b a<RED>&&<RESET><GREEN>&<RESET>b
+<RED>a<RESET><GREEN>x<RESET>,y
+--a<RED>==<RESET><GREEN>!=<RESET>--b
+a++<RED>==<RESET><GREEN>!=<RESET>++b
+<RED>0xFF_EC_DE_5E 0b100_000 100_000<RESET><GREEN>0xFF_E1_DE_5E 0b100_100 200_000<RESET>
+a<RED>==<RESET><GREEN>===<RESET>b
+a<RED>!!<RESET><GREEN>!=<RESET>b
+<RED>_32<RESET><GREEN>_33<RESET>.find(arr)
+X.<RED>fill<RESET><GREEN>find<RESET>()
+X.<RED>u<RESET><GREEN>f<RESET>+1
+X.u<RED>-<RESET><GREEN>+<RESET>2
+a<RED>.<RESET><GREEN>..<RESET>b
+a<RED>?.<RESET><GREEN>?:<RESET>b
+<RED>.32_00_456<RESET><GREEN>.32_00_446<RESET>
diff --git a/t/t4034/kotlin/post b/t/t4034/kotlin/post
new file mode 100644 (file)
index 0000000..2e1df4c
--- /dev/null
@@ -0,0 +1,30 @@
+println("Hello World?")
+(1) (-1e10) (0xabcdef) 'y'
+[x] x->y x.y
+!x x.inv() x*y x&y
+x*y x/y x%y
+x+y x-y
+a shl b
+x<y x<=y x>y x>=y
+x==y x!=y x===y
+x and y
+x^y
+x or y
+x&&y x||y
+x=y x+=y x-=y x*=y x/=y x%=y x<<=y x>>=y x&=y x^=y x|=y
+a+=b c=d e<=f g>=h i/j k%l m<<n o>>p q&r s^t u|v
+a<=b
+a|b a&b
+x,y
+--a!=--b
+a++!=++b
+0xFF_E1_DE_5E 0b100_100 200_000
+a===b
+a!=b
+_33.find(arr)
+X.find()
+X.f+1
+X.u+2
+a..b
+a?:b
+.32_00_446
diff --git a/t/t4034/kotlin/pre b/t/t4034/kotlin/pre
new file mode 100644 (file)
index 0000000..11ea3de
--- /dev/null
@@ -0,0 +1,30 @@
+println("Hello World!\n")
+1 -1e10 0xabcdef 'x'
+[a] a->b a.b
+!a a.inv() a*b a&b
+a*b a/b a%b
+a+b a-b
+a shr b
+a<b a<=b a>b a>=b
+a==b a!=b a===b
+a and b
+a^b
+a or b
+a&&b a||b
+a=b a+=b a-=b a*=b a/=b a%=b a<<=b a>>=b a&=b a^=b a|=b
+a=b c+=d e-=f g*=h i/=j k%=l m<<=n o>>=p q&=r s^=t u|=v
+a<<=b
+a||b a&&b
+a,y
+--a==--b
+a++==++b
+0xFF_EC_DE_5E 0b100_000 100_000
+a==b
+a!!b
+_32.find(arr)
+X.fill()
+X.u+1
+X.u-2
+a.b
+a?.b
+.32_00_456
diff --git a/t/t4069-remerge-diff.sh b/t/t4069-remerge-diff.sh
new file mode 100755 (executable)
index 0000000..35f9495
--- /dev/null
@@ -0,0 +1,291 @@
+#!/bin/sh
+
+test_description='remerge-diff handling'
+
+. ./test-lib.sh
+
+# This test is ort-specific
+if test "${GIT_TEST_MERGE_ALGORITHM}" != ort
+then
+       skip_all="GIT_TEST_MERGE_ALGORITHM != ort"
+       test_done
+fi
+
+test_expect_success 'setup basic merges' '
+       test_write_lines 1 2 3 4 5 6 7 8 9 >numbers &&
+       git add numbers &&
+       git commit -m base &&
+
+       git branch feature_a &&
+       git branch feature_b &&
+       git branch feature_c &&
+
+       git branch ab_resolution &&
+       git branch bc_resolution &&
+
+       git checkout feature_a &&
+       test_write_lines 1 2 three 4 5 6 7 eight 9 >numbers &&
+       git commit -a -m change_a &&
+
+       git checkout feature_b &&
+       test_write_lines 1 2 tres 4 5 6 7 8 9 >numbers &&
+       git commit -a -m change_b &&
+
+       git checkout feature_c &&
+       test_write_lines 1 2 3 4 5 6 7 8 9 10 >numbers &&
+       git commit -a -m change_c &&
+
+       git checkout bc_resolution &&
+       git merge --ff-only feature_b &&
+       # no conflict
+       git merge feature_c &&
+
+       git checkout ab_resolution &&
+       git merge --ff-only feature_a &&
+       # conflicts!
+       test_must_fail git merge feature_b &&
+       # Resolve conflict...and make another change elsewhere
+       test_write_lines 1 2 drei 4 5 6 7 acht 9 >numbers &&
+       git add numbers &&
+       git merge --continue
+'
+
+test_expect_success 'remerge-diff on a clean merge' '
+       git log -1 --oneline bc_resolution >expect &&
+       git show --oneline --remerge-diff bc_resolution >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'remerge-diff with both a resolved conflict and an unrelated change' '
+       git log -1 --oneline ab_resolution >tmp &&
+       cat <<-EOF >>tmp &&
+       diff --git a/numbers b/numbers
+       remerge CONFLICT (content): Merge conflict in numbers
+       index a1fb731..6875544 100644
+       --- a/numbers
+       +++ b/numbers
+       @@ -1,13 +1,9 @@
+        1
+        2
+       -<<<<<<< b0ed5cb (change_a)
+       -three
+       -=======
+       -tres
+       ->>>>>>> 6cd3f82 (change_b)
+       +drei
+        4
+        5
+        6
+        7
+       -eight
+       +acht
+        9
+       EOF
+       # Hashes above are sha1; rip them out so test works with sha256
+       sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >expect &&
+
+       git show --oneline --remerge-diff ab_resolution >tmp &&
+       sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'setup non-content conflicts' '
+       git switch --orphan base &&
+
+       test_write_lines 1 2 3 4 5 6 7 8 9 >numbers &&
+       test_write_lines a b c d e f g h i >letters &&
+       test_write_lines in the way >content &&
+       git add numbers letters content &&
+       git commit -m base &&
+
+       git branch side1 &&
+       git branch side2 &&
+
+       git checkout side1 &&
+       test_write_lines 1 2 three 4 5 6 7 8 9 >numbers &&
+       git mv letters letters_side1 &&
+       git mv content file_or_directory &&
+       git add numbers &&
+       git commit -m side1 &&
+
+       git checkout side2 &&
+       git rm numbers &&
+       git mv letters letters_side2 &&
+       mkdir file_or_directory &&
+       echo hello >file_or_directory/world &&
+       git add file_or_directory/world &&
+       git commit -m side2 &&
+
+       git checkout -b resolution side1 &&
+       test_must_fail git merge side2 &&
+       test_write_lines 1 2 three 4 5 6 7 8 9 >numbers &&
+       git add numbers &&
+       git add letters_side1 &&
+       git rm letters &&
+       git rm letters_side2 &&
+       git add file_or_directory~HEAD &&
+       git mv file_or_directory~HEAD wanted_content &&
+       git commit -m resolved
+'
+
+test_expect_success 'remerge-diff with non-content conflicts' '
+       git log -1 --oneline resolution >tmp &&
+       cat <<-EOF >>tmp &&
+       diff --git a/file_or_directory~HASH (side1) b/wanted_content
+       similarity index 100%
+       rename from file_or_directory~HASH (side1)
+       rename to wanted_content
+       remerge CONFLICT (file/directory): directory in the way of file_or_directory from HASH (side1); moving it to file_or_directory~HASH (side1) instead.
+       diff --git a/letters b/letters
+       remerge CONFLICT (rename/rename): letters renamed to letters_side1 in HASH (side1) and to letters_side2 in HASH (side2).
+       diff --git a/letters_side2 b/letters_side2
+       deleted file mode 100644
+       index b236ae5..0000000
+       --- a/letters_side2
+       +++ /dev/null
+       @@ -1,9 +0,0 @@
+       -a
+       -b
+       -c
+       -d
+       -e
+       -f
+       -g
+       -h
+       -i
+       diff --git a/numbers b/numbers
+       remerge CONFLICT (modify/delete): numbers deleted in HASH (side2) and modified in HASH (side1).  Version HASH (side1) of numbers left in tree.
+       EOF
+       # We still have some sha1 hashes above; rip them out so test works
+       # with sha256
+       sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >expect &&
+
+       git show --oneline --remerge-diff resolution >tmp &&
+       sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'remerge-diff w/ diff-filter=U: all conflict headers, no diff content' '
+       git log -1 --oneline resolution >tmp &&
+       cat <<-EOF >>tmp &&
+       diff --git a/file_or_directory~HASH (side1) b/file_or_directory~HASH (side1)
+       remerge CONFLICT (file/directory): directory in the way of file_or_directory from HASH (side1); moving it to file_or_directory~HASH (side1) instead.
+       diff --git a/letters b/letters
+       remerge CONFLICT (rename/rename): letters renamed to letters_side1 in HASH (side1) and to letters_side2 in HASH (side2).
+       diff --git a/numbers b/numbers
+       remerge CONFLICT (modify/delete): numbers deleted in HASH (side2) and modified in HASH (side1).  Version HASH (side1) of numbers left in tree.
+       EOF
+       # We still have some sha1 hashes above; rip them out so test works
+       # with sha256
+       sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >expect &&
+
+       git show --oneline --remerge-diff --diff-filter=U resolution >tmp &&
+       sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'remerge-diff w/ diff-filter=R: relevant file + conflict header' '
+       git log -1 --oneline resolution >tmp &&
+       cat <<-EOF >>tmp &&
+       diff --git a/file_or_directory~HASH (side1) b/wanted_content
+       similarity index 100%
+       rename from file_or_directory~HASH (side1)
+       rename to wanted_content
+       remerge CONFLICT (file/directory): directory in the way of file_or_directory from HASH (side1); moving it to file_or_directory~HASH (side1) instead.
+       EOF
+       # We still have some sha1 hashes above; rip them out so test works
+       # with sha256
+       sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >expect &&
+
+       git show --oneline --remerge-diff --diff-filter=R resolution >tmp &&
+       sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'remerge-diff w/ pathspec: limits to relevant file including conflict header' '
+       git log -1 --oneline resolution >tmp &&
+       cat <<-EOF >>tmp &&
+       diff --git a/letters b/letters
+       remerge CONFLICT (rename/rename): letters renamed to letters_side1 in HASH (side1) and to letters_side2 in HASH (side2).
+       diff --git a/letters_side2 b/letters_side2
+       deleted file mode 100644
+       index b236ae5..0000000
+       --- a/letters_side2
+       +++ /dev/null
+       @@ -1,9 +0,0 @@
+       -a
+       -b
+       -c
+       -d
+       -e
+       -f
+       -g
+       -h
+       -i
+       EOF
+       # We still have some sha1 hashes above; rip them out so test works
+       # with sha256
+       sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >expect &&
+
+       git show --oneline --remerge-diff resolution -- "letters*" >tmp &&
+       sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'setup non-content conflicts' '
+       git switch --orphan newbase &&
+
+       test_write_lines 1 2 3 4 5 6 7 8 9 >numbers &&
+       git add numbers &&
+       git commit -m base &&
+
+       git branch newside1 &&
+       git branch newside2 &&
+
+       git checkout newside1 &&
+       test_write_lines 1 2 three 4 5 6 7 8 9 >numbers &&
+       git add numbers &&
+       git commit -m side1 &&
+
+       git checkout newside2 &&
+       test_write_lines 1 2 drei 4 5 6 7 8 9 >numbers &&
+       git add numbers &&
+       git commit -m side2 &&
+
+       git checkout -b newresolution newside1 &&
+       test_must_fail git merge newside2 &&
+       git checkout --theirs numbers &&
+       git add -u numbers &&
+       git commit -m resolved
+'
+
+test_expect_success 'remerge-diff turns off history simplification' '
+       git log -1 --oneline newresolution >tmp &&
+       cat <<-EOF >>tmp &&
+       diff --git a/numbers b/numbers
+       remerge CONFLICT (content): Merge conflict in numbers
+       index 070e9e7..5335e78 100644
+       --- a/numbers
+       +++ b/numbers
+       @@ -1,10 +1,6 @@
+        1
+        2
+       -<<<<<<< 96f1e45 (side1)
+       -three
+       -=======
+        drei
+       ->>>>>>> 4fd522f (side2)
+        4
+        5
+        6
+       EOF
+       # We still have some sha1 hashes above; rip them out so test works
+       # with sha256
+       sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >expect &&
+
+       git show --oneline --remerge-diff newresolution -- numbers >tmp &&
+       sed -e "s/[0-9a-f]\{7,\}/HASH/g" tmp >actual &&
+       test_cmp expect actual
+'
+
+test_done
index dfa053ff28e8cbeb9ae311732871811777a8a18c..3ef84619f53e27ddc164d74c07c0a38721dedfdf 100755 (executable)
@@ -2,8 +2,6 @@
 
 test_description='apply a patch that is larger than the preimage'
 
-
-TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 cat >F  <<\EOF
@@ -41,20 +39,8 @@ test_expect_success setup '
 '
 
 test_expect_success 'apply should fail gracefully' '
-
-       if git apply --index patch
-       then
-               echo Oops, should not have succeeded
-               false
-       else
-               status=$? &&
-               echo "Status was $status" &&
-               if test -f .git/index.lock
-               then
-                       echo Oops, should not have crashed
-                       false
-               fi
-       fi
+       test_must_fail git apply --index patch &&
+       test_path_is_missing .git/index.lock
 '
 
 test_done
index cb3181e8b71a8e25586467c20086063b33ec36d0..f6db5a79dd9d356c93a935374c4c27520ecf6593 100755 (executable)
@@ -2,8 +2,6 @@
 
 test_description='apply same filename'
 
-
-TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 test_expect_success 'setup' '
@@ -26,10 +24,11 @@ diff a/bla/blub/dir/file b/bla/blub/dir/file
 EOF
 
 test_expect_success 'apply --directory -p (1)' '
-
        git apply --directory=some/sub -p3 --index patch &&
-       test Bello = $(git show :some/sub/dir/file) &&
-       test Bello = $(cat some/sub/dir/file)
+       echo Bello >expect &&
+       git show :some/sub/dir/file >actual &&
+       test_cmp expect actual &&
+       test_cmp expect some/sub/dir/file
 
 '
 
@@ -37,8 +36,10 @@ test_expect_success 'apply --directory -p (2) ' '
 
        git reset --hard initial &&
        git apply --directory=some/sub/ -p3 --index patch &&
-       test Bello = $(git show :some/sub/dir/file) &&
-       test Bello = $(cat some/sub/dir/file)
+       echo Bello >expect &&
+       git show :some/sub/dir/file >actual &&
+       test_cmp expect actual &&
+       test_cmp expect some/sub/dir/file
 
 '
 
@@ -55,8 +56,10 @@ EOF
 test_expect_success 'apply --directory (new file)' '
        git reset --hard initial &&
        git apply --directory=some/sub/dir/ --index patch &&
-       test content = $(git show :some/sub/dir/newfile) &&
-       test content = $(cat some/sub/dir/newfile)
+       echo content >expect &&
+       git show :some/sub/dir/newfile >actual &&
+       test_cmp expect actual &&
+       test_cmp expect some/sub/dir/newfile
 '
 
 cat > patch << EOF
@@ -72,8 +75,10 @@ EOF
 test_expect_success 'apply --directory -p (new file)' '
        git reset --hard initial &&
        git apply -p2 --directory=some/sub/dir/ --index patch &&
-       test content = $(git show :some/sub/dir/newfile2) &&
-       test content = $(cat some/sub/dir/newfile2)
+       echo content >expect &&
+       git show :some/sub/dir/newfile2 >actual &&
+       test_cmp expect actual &&
+       test_cmp expect some/sub/dir/newfile2
 '
 
 cat > patch << EOF
@@ -91,7 +96,8 @@ test_expect_success 'apply --directory (delete file)' '
        echo content >some/sub/dir/delfile &&
        git add some/sub/dir/delfile &&
        git apply --directory=some/sub/dir/ --index patch &&
-       ! (git ls-files | grep delfile)
+       git ls-files >out &&
+       ! grep delfile out
 '
 
 cat > patch << 'EOF'
@@ -107,8 +113,10 @@ EOF
 test_expect_success 'apply --directory (quoted filename)' '
        git reset --hard initial &&
        git apply --directory=some/sub/dir/ --index patch &&
-       test content = $(git show :some/sub/dir/quotefile) &&
-       test content = $(cat some/sub/dir/quotefile)
+       echo content >expect &&
+       git show :some/sub/dir/quotefile >actual &&
+       test_cmp expect actual &&
+       test_cmp expect some/sub/dir/quotefile
 '
 
 test_done
index 6caff0ca397e442d9d053c0ed1a7808e74bcbfe4..cdad4b688078adc24da922bce14e130982f4484e 100755 (executable)
@@ -315,12 +315,10 @@ test_expect_success 'am --patch-format=hg applies hg patch' '
 '
 
 test_expect_success 'am with applypatch-msg hook' '
-       test_when_finished "rm -f .git/hooks/applypatch-msg" &&
        rm -fr .git/rebase-apply &&
        git reset --hard &&
        git checkout first &&
-       mkdir -p .git/hooks &&
-       write_script .git/hooks/applypatch-msg <<-\EOF &&
+       test_hook applypatch-msg <<-\EOF &&
        cat "$1" >actual-msg &&
        echo hook-message >"$1"
        EOF
@@ -335,12 +333,10 @@ test_expect_success 'am with applypatch-msg hook' '
 '
 
 test_expect_success 'am with failing applypatch-msg hook' '
-       test_when_finished "rm -f .git/hooks/applypatch-msg" &&
        rm -fr .git/rebase-apply &&
        git reset --hard &&
        git checkout first &&
-       mkdir -p .git/hooks &&
-       write_script .git/hooks/applypatch-msg <<-\EOF &&
+       test_hook applypatch-msg <<-\EOF &&
        exit 1
        EOF
        test_must_fail git am patch1 &&
@@ -350,12 +346,10 @@ test_expect_success 'am with failing applypatch-msg hook' '
 '
 
 test_expect_success 'am with pre-applypatch hook' '
-       test_when_finished "rm -f .git/hooks/pre-applypatch" &&
        rm -fr .git/rebase-apply &&
        git reset --hard &&
        git checkout first &&
-       mkdir -p .git/hooks &&
-       write_script .git/hooks/pre-applypatch <<-\EOF &&
+       test_hook pre-applypatch <<-\EOF &&
        git diff first >diff.actual
        exit 0
        EOF
@@ -368,12 +362,10 @@ test_expect_success 'am with pre-applypatch hook' '
 '
 
 test_expect_success 'am with failing pre-applypatch hook' '
-       test_when_finished "rm -f .git/hooks/pre-applypatch" &&
        rm -fr .git/rebase-apply &&
        git reset --hard &&
        git checkout first &&
-       mkdir -p .git/hooks &&
-       write_script .git/hooks/pre-applypatch <<-\EOF &&
+       test_hook pre-applypatch <<-\EOF &&
        exit 1
        EOF
        test_must_fail git am patch1 &&
@@ -383,12 +375,10 @@ test_expect_success 'am with failing pre-applypatch hook' '
 '
 
 test_expect_success 'am with post-applypatch hook' '
-       test_when_finished "rm -f .git/hooks/post-applypatch" &&
        rm -fr .git/rebase-apply &&
        git reset --hard &&
        git checkout first &&
-       mkdir -p .git/hooks &&
-       write_script .git/hooks/post-applypatch <<-\EOF &&
+       test_hook post-applypatch <<-\EOF &&
        git rev-parse HEAD >head.actual
        git diff second >diff.actual
        exit 0
@@ -403,12 +393,10 @@ test_expect_success 'am with post-applypatch hook' '
 '
 
 test_expect_success 'am with failing post-applypatch hook' '
-       test_when_finished "rm -f .git/hooks/post-applypatch" &&
        rm -fr .git/rebase-apply &&
        git reset --hard &&
        git checkout first &&
-       mkdir -p .git/hooks &&
-       write_script .git/hooks/post-applypatch <<-\EOF &&
+       test_hook post-applypatch <<-\EOF &&
        git rev-parse HEAD >head.actual
        exit 1
        EOF
@@ -1169,7 +1157,7 @@ test_expect_success 'invalid when passing the --empty option alone' '
        test_when_finished "git am --abort || :" &&
        git checkout empty-commit^ &&
        test_must_fail git am --empty empty-commit.patch 2>err &&
-       echo "error: Invalid value for --empty: empty-commit.patch" >expected &&
+       echo "error: invalid value for '\''--empty'\'': '\''empty-commit.patch'\''" >expected &&
        test_cmp expected err
 '
 
index 504955986197224ecc41c15e52fea98a021b9f00..6e66352558212e9a40404ef892a0944ab3d09db3 100755 (executable)
@@ -142,6 +142,19 @@ test_expect_success 'diff-filter=R' '
 
 '
 
+test_expect_success 'multiple --diff-filter bits' '
+
+       git log -M --pretty="format:%s" --diff-filter=R HEAD >expect &&
+       git log -M --pretty="format:%s" --diff-filter=Ra HEAD >actual &&
+       test_cmp expect actual &&
+       git log -M --pretty="format:%s" --diff-filter=aR HEAD >actual &&
+       test_cmp expect actual &&
+       git log -M --pretty="format:%s" \
+               --diff-filter=a --diff-filter=R HEAD >actual &&
+       test_cmp expect actual
+
+'
+
 test_expect_success 'diff-filter=C' '
 
        git log -C -C --pretty="format:%s" --diff-filter=C HEAD >actual &&
@@ -449,6 +462,29 @@ test_expect_success !FAIL_PREREQS 'log with various grep.patternType configurati
        )
 '
 
+for cmd in show whatchanged reflog format-patch
+do
+       case "$cmd" in
+       format-patch) myarg="HEAD~.." ;;
+       *) myarg= ;;
+       esac
+
+       test_expect_success "$cmd: understands grep.patternType, like 'log'" '
+               git init "pattern-type-$cmd" &&
+               (
+                       cd "pattern-type-$cmd" &&
+                       test_commit 1 file A &&
+                       test_commit "(1|2)" file B 2 &&
+
+                       git -c grep.patternType=fixed $cmd --grep="..." $myarg >actual &&
+                       test_must_be_empty actual &&
+
+                       git -c grep.patternType=basic $cmd --grep="..." $myarg >actual &&
+                       test_file_not_empty actual
+               )
+       '
+done
+
 test_expect_success 'log --author' '
        cat >expect <<-\EOF &&
        Author: <BOLD;RED>A U<RESET> Thor <author@example.com>
@@ -659,7 +695,7 @@ EOF
 
 test_expect_success 'log --graph with full output' '
        git log --graph --date-order --pretty=short |
-               git name-rev --name-only --stdin |
+               git name-rev --name-only --annotate-stdin |
                sed "s/Merge:.*/Merge: A B/;s/ *\$//" >actual &&
        test_cmp expect actual
 '
@@ -1671,6 +1707,75 @@ test_expect_success 'log --graph with --name-only' '
        test_cmp_graph --name-only tangle..reach
 '
 
+test_expect_success '--no-graph countermands --graph' '
+       git log >expect &&
+       git log --graph --no-graph >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success '--graph countermands --no-graph' '
+       git log --graph >expect &&
+       git log --no-graph --graph >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success '--no-graph does not unset --topo-order' '
+       git log --topo-order >expect &&
+       git log --topo-order --no-graph >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success '--no-graph does not unset --parents' '
+       git log --parents >expect &&
+       git log --parents --no-graph >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success '--reverse and --graph conflict' '
+       test_must_fail git log --reverse --graph 2>stderr &&
+       test_i18ngrep "cannot be used together" stderr
+'
+
+test_expect_success '--reverse --graph --no-graph works' '
+       git log --reverse >expect &&
+       git log --reverse --graph --no-graph >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success '--show-linear-break and --graph conflict' '
+       test_must_fail git log --show-linear-break --graph 2>stderr &&
+       test_i18ngrep "cannot be used together" stderr
+'
+
+test_expect_success '--show-linear-break --graph --no-graph works' '
+       git log --show-linear-break >expect &&
+       git log --show-linear-break --graph --no-graph >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success '--no-walk and --graph conflict' '
+       test_must_fail git log --no-walk --graph 2>stderr &&
+       test_i18ngrep "cannot be used together" stderr
+'
+
+test_expect_success '--no-walk --graph --no-graph works' '
+       git log --no-walk >expect &&
+       git log --no-walk --graph --no-graph >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success '--walk-reflogs and --graph conflict' '
+       test_must_fail git log --walk-reflogs --graph 2>stderr &&
+       (test_i18ngrep "cannot combine" stderr ||
+               test_i18ngrep "cannot be used together" stderr)
+'
+
+test_expect_success '--walk-reflogs --graph --no-graph works' '
+       git log --walk-reflogs >expect &&
+       git log --walk-reflogs --graph --no-graph >actual &&
+       test_cmp expect actual
+'
+
 test_expect_success 'dotdot is a parent directory' '
        mkdir -p a/b &&
        ( echo sixth && echo fifth ) >expect &&
@@ -1887,10 +1992,13 @@ test_expect_success GPG 'log --show-signature for merged tag with GPG failure' '
        git tag -s -m signed_tag_msg signed_tag_fail &&
        git checkout plain-fail &&
        git merge --no-ff -m msg signed_tag_fail &&
-       TMPDIR="$(pwd)/bogus" git log --show-signature -n1 plain-fail >actual &&
-       grep "^merged tag" actual &&
-       grep "^No signature" actual &&
-       ! grep "^gpg: Signature made" actual
+       if ! test_have_prereq VALGRIND
+       then
+               TMPDIR="$(pwd)/bogus" git log --show-signature -n1 plain-fail >actual &&
+               grep "^merged tag" actual &&
+               grep "^No signature" actual &&
+               ! grep "^gpg: Signature made" actual
+       fi
 '
 
 test_expect_success GPGSM 'log --graph --show-signature for merged tag x509' '
@@ -1931,7 +2039,8 @@ test_expect_success GPGSM 'log --graph --show-signature for merged tag x509 miss
        git merge --no-ff -m msg signed_tag_x509_nokey &&
        GNUPGHOME=. git log --graph --show-signature -n1 plain-x509-nokey >actual &&
        grep "^|\\\  merged tag" actual &&
-       grep "^| | gpgsm: certificate not found" actual
+       grep -e "^| | gpgsm: certificate not found" \
+            -e "^| | gpgsm: failed to find the certificate: Not found" actual
 '
 
 test_expect_success GPGSM 'log --graph --show-signature for merged tag x509 bad signature' '
index 80f4a65b285c55cfc7dce38fb115fb0190de97a2..a730c0db9856c1d92ba840ca07f4c67064d437a1 100755 (executable)
@@ -38,7 +38,7 @@ calc_patch_id () {
        shift
        git patch-id "$@" >patch-id.output &&
        sed "s/ .*//" patch-id.output >patch-id_"$patch_name" &&
-       test_line_count -gt 0 patch-id_"$patch_name"
+       test_line_count -eq 1 patch-id_"$patch_name"
 }
 
 get_top_diff () {
@@ -166,40 +166,67 @@ test_expect_success 'patch-id respects config from subdir' '
        )
 '
 
-cat >nonl <<\EOF
-diff --git i/a w/a
-index e69de29..2e65efe 100644
---- i/a
-+++ w/a
-@@ -0,0 +1 @@
-+a
-\ No newline at end of file
-diff --git i/b w/b
-index e69de29..6178079 100644
---- i/b
-+++ w/b
-@@ -0,0 +1 @@
-+b
-EOF
-
-cat >withnl <<\EOF
-diff --git i/a w/a
-index e69de29..7898192 100644
---- i/a
-+++ w/a
-@@ -0,0 +1 @@
-+a
-diff --git i/b w/b
-index e69de29..6178079 100644
---- i/b
-+++ w/b
-@@ -0,0 +1 @@
-+b
-EOF
-
 test_expect_success 'patch-id handles no-nl-at-eof markers' '
-       cat nonl | calc_patch_id nonl &&
-       cat withnl | calc_patch_id withnl &&
+       cat >nonl <<-\EOF &&
+       diff --git i/a w/a
+       index e69de29..2e65efe 100644
+       --- i/a
+       +++ w/a
+       @@ -0,0 +1 @@
+       +a
+       \ No newline at end of file
+       diff --git i/b w/b
+       index e69de29..6178079 100644
+       --- i/b
+       +++ w/b
+       @@ -0,0 +1 @@
+       +b
+       EOF
+       cat >withnl <<-\EOF &&
+       diff --git i/a w/a
+       index e69de29..7898192 100644
+       --- i/a
+       +++ w/a
+       @@ -0,0 +1 @@
+       +a
+       diff --git i/b w/b
+       index e69de29..6178079 100644
+       --- i/b
+       +++ w/b
+       @@ -0,0 +1 @@
+       +b
+       EOF
+       calc_patch_id nonl <nonl &&
+       calc_patch_id withnl <withnl &&
        test_cmp patch-id_nonl patch-id_withnl
 '
+
+test_expect_success 'patch-id handles diffs with one line of before/after' '
+       cat >diffu1 <<-\EOF &&
+       diff --git a/bar b/bar
+       index bdaf90f..31051f6 100644
+       --- a/bar
+       +++ b/bar
+       @@ -2 +2,2 @@
+        b
+       +c
+       diff --git a/car b/car
+       index 00750ed..2ae5e34 100644
+       --- a/car
+       +++ b/car
+       @@ -1 +1,2 @@
+        3
+       +d
+       diff --git a/foo b/foo
+       index e439850..7146eb8 100644
+       --- a/foo
+       +++ b/foo
+       @@ -2 +2,2 @@
+        a
+       +e
+       EOF
+       calc_patch_id diffu1 <diffu1 &&
+       test_config patchid.stable true &&
+       calc_patch_id diffu1stable <diffu1
+'
 test_done
index cc3cebf672242a622e86b388ada63c9e0c1a9c04..fa9d32facfb0ddca6c001d78c1011cf0b3568f19 100755 (executable)
@@ -48,6 +48,7 @@ graph_read_expect () {
        header: 43475048 1 $(test_oid oid_version) $NUM_CHUNKS 0
        num_commits: $1
        chunks: oid_fanout oid_lookup commit_metadata generation_data bloom_indexes bloom_data
+       options: bloom(1,10,7) read_generation_data
        EOF
        test-tool read-graph >actual &&
        test_cmp expect actual
index 2fd845187e76bd2ca7269ae45441c1495eae5839..a11d61206addc4deaf4e8887bb23a7e9fc83cdd7 100755 (executable)
@@ -315,8 +315,10 @@ test_expect_success \
      git index-pack -o tmp.idx test-3.pack &&
      cmp tmp.idx test-1-${packname_1}.idx &&
 
-     git index-pack test-3.pack &&
+     git index-pack --promisor=message test-3.pack &&
      cmp test-3.idx test-1-${packname_1}.idx &&
+     echo message >expect &&
+     test_cmp expect test-3.promisor &&
 
      cat test-2-${packname_2}.pack >test-3.pack &&
      git index-pack -o tmp.idx test-2-${packname_2}.pack &&
index 8ee67df38f6c1c272834adcc3deef239eab6dd30..b0095ab41d30aadda45c7dd6e812fd0a5f40ab26 100755 (executable)
@@ -284,4 +284,12 @@ test_expect_success 'index-pack -v --stdin produces progress for both phases' '
        test_i18ngrep "Resolving deltas" err
 '
 
+test_expect_success 'too-large packs report the breach' '
+       pack=$(git pack-objects --all pack </dev/null) &&
+       sz="$(test_file_size pack-$pack.pack)" &&
+       test "$sz" -gt 20 &&
+       test_must_fail git index-pack --max-input-size=20 pack-$pack.pack 2>err &&
+       grep "maximum allowed size (20 bytes)" err
+'
+
 test_done
index d05ab716f6aa1fd6f641f14e308e2e5b80e70af3..f775fc1ce691d5337b31d067cd93944b7bae3bc5 100755 (executable)
@@ -397,4 +397,32 @@ test_expect_success 'pack.preferBitmapTips' '
        )
 '
 
+test_expect_success 'complains about multiple pack bitmaps' '
+       rm -fr repo &&
+       git init repo &&
+       test_when_finished "rm -fr repo" &&
+       (
+               cd repo &&
+
+               test_commit base &&
+
+               git repack -adb &&
+               bitmap="$(ls .git/objects/pack/pack-*.bitmap)" &&
+               mv "$bitmap" "$bitmap.bak" &&
+
+               test_commit other &&
+               git repack -ab &&
+
+               mv "$bitmap.bak" "$bitmap" &&
+
+               find .git/objects/pack -type f -name "*.pack" >packs &&
+               find .git/objects/pack -type f -name "*.bitmap" >bitmaps &&
+               test_line_count = 2 packs &&
+               test_line_count = 2 bitmaps &&
+
+               git rev-list --use-bitmap-index HEAD 2>err &&
+               grep "ignoring extra bitmap file" err
+       )
+'
+
 test_done
index ea889c088a51f635e1e111f1e55d02cd21b53d0f..9d8e249ae8b7f38c4c941bd76ef904cdfe1b3d27 100755 (executable)
@@ -22,8 +22,8 @@ test_expect_success 'disable reflogs' '
 '
 
 create_bogus_ref () {
-       test_when_finished 'rm -f .git/refs/heads/bogus..name' &&
-       echo $bogus >.git/refs/heads/bogus..name
+       test-tool ref-store main update-ref msg "refs/heads/bogus..name" $bogus $ZERO_OID REF_SKIP_REFNAME_VERIFICATION &&
+       test_when_finished "test-tool ref-store main delete-refs REF_NO_DEREF msg refs/heads/bogus..name"
 }
 
 test_expect_success 'create history reachable only from a bogus-named ref' '
@@ -113,7 +113,7 @@ test_expect_success 'pack-refs does not silently delete broken loose ref' '
 # we do not want to count on running pack-refs to
 # actually pack it, as it is perfectly reasonable to
 # skip processing a broken ref
-test_expect_success 'create packed-refs file with broken ref' '
+test_expect_success REFFILES 'create packed-refs file with broken ref' '
        rm -f .git/refs/heads/main &&
        cat >.git/packed-refs <<-EOF &&
        $missing refs/heads/main
@@ -124,13 +124,13 @@ test_expect_success 'create packed-refs file with broken ref' '
        test_cmp expect actual
 '
 
-test_expect_success 'pack-refs does not silently delete broken packed ref' '
+test_expect_success REFFILES 'pack-refs does not silently delete broken packed ref' '
        git pack-refs --all --prune &&
        git rev-parse refs/heads/main >actual &&
        test_cmp expect actual
 '
 
-test_expect_success 'pack-refs does not drop broken refs during deletion' '
+test_expect_success REFFILES  'pack-refs does not drop broken refs during deletion' '
        git update-ref -d refs/heads/other &&
        git rev-parse refs/heads/main >actual &&
        test_cmp expect actual
index df524f7b6dde1fa63d268bb88730dc766a003f4d..e9045009a1105d09caaea43b830548f77707b096 100755 (executable)
@@ -64,7 +64,11 @@ test_expect_success 'create series of packs' '
                        echo $cur &&
                        echo "$(git rev-parse :file) file"
                } | git pack-objects --stdout >tmp &&
-               git index-pack --stdin --fix-thin <tmp || return 1
+               GIT_TRACE2_EVENT=$PWD/trace \
+               git index-pack -v --stdin --fix-thin <tmp || return 1 &&
+               grep -c region_enter.*progress trace >enter &&
+               grep -c region_leave.*progress trace >leave &&
+               test_cmp enter leave &&
                prev=$cur
        done
 '
index edb728f77c3583cecde2d87555a4547464db7b96..fbf0d64578cde0544251020cf0df5ea6b90c4a2e 100755 (executable)
@@ -29,12 +29,7 @@ test_expect_success 'setup full repo' '
        cd "$TRASH_DIRECTORY/full" &&
        git init &&
        git config core.commitGraph true &&
-       objdir=".git/objects" &&
-
-       test_oid_cache <<-EOF
-       oid_version sha1:1
-       oid_version sha256:2
-       EOF
+       objdir=".git/objects"
 '
 
 test_expect_success POSIXPERM 'tweak umask for modebit tests' '
@@ -69,46 +64,10 @@ test_expect_success 'create commits and repack' '
        git repack
 '
 
-graph_git_two_modes() {
-       git -c core.commitGraph=true $1 >output &&
-       git -c core.commitGraph=false $1 >expect &&
-       test_cmp expect output
-}
-
-graph_git_behavior() {
-       MSG=$1
-       DIR=$2
-       BRANCH=$3
-       COMPARE=$4
-       test_expect_success "check normal git operations: $MSG" '
-               cd "$TRASH_DIRECTORY/$DIR" &&
-               graph_git_two_modes "log --oneline $BRANCH" &&
-               graph_git_two_modes "log --topo-order $BRANCH" &&
-               graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
-               graph_git_two_modes "branch -vv" &&
-               graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
-       '
-}
+. "$TEST_DIRECTORY"/lib-commit-graph.sh
 
 graph_git_behavior 'no graph' full commits/3 commits/1
 
-graph_read_expect() {
-       OPTIONAL=""
-       NUM_CHUNKS=3
-       if test ! -z "$2"
-       then
-               OPTIONAL=" $2"
-               NUM_CHUNKS=$((3 + $(echo "$2" | wc -w)))
-       fi
-       cat >expect <<- EOF
-       header: 43475048 1 $(test_oid oid_version) $NUM_CHUNKS 0
-       num_commits: $1
-       chunks: oid_fanout oid_lookup commit_metadata$OPTIONAL
-       EOF
-       test-tool read-graph >output &&
-       test_cmp expect output
-}
-
 test_expect_success 'exit with correct error on bad input to --stdin-commits' '
        cd "$TRASH_DIRECTORY/full" &&
        # invalid, non-hex OID
@@ -466,10 +425,10 @@ test_expect_success 'warn on improper hash version' '
        )
 '
 
-test_expect_success 'lower layers have overflow chunk' '
+test_expect_success TIME_IS_64BIT,TIME_T_IS_64BIT 'lower layers have overflow chunk' '
        cd "$TRASH_DIRECTORY/full" &&
        UNIX_EPOCH_ZERO="@0 +0000" &&
-       FUTURE_DATE="@2147483646 +0000" &&
+       FUTURE_DATE="@4147483646 +0000" &&
        rm -f .git/objects/info/commit-graph &&
        test_commit --date "$FUTURE_DATE" future-1 &&
        test_commit --date "$UNIX_EPOCH_ZERO" old-1 &&
@@ -497,7 +456,7 @@ test_expect_success 'git commit-graph verify' '
        cd "$TRASH_DIRECTORY/full" &&
        git rev-parse commits/8 | git -c commitGraph.generationVersion=1 commit-graph write --stdin-commits &&
        git commit-graph verify >output &&
-       graph_read_expect 9 extra_edges
+       graph_read_expect 9 extra_edges 1
 '
 
 NUM_COMMITS=9
@@ -825,10 +784,6 @@ test_expect_success 'set up and verify repo with generation data overflow chunk'
        objdir=".git/objects" &&
        UNIX_EPOCH_ZERO="@0 +0000" &&
        FUTURE_DATE="@2147483646 +0000" &&
-       test_oid_cache <<-EOF &&
-       oid_version sha1:1
-       oid_version sha256:2
-       EOF
        cd "$TRASH_DIRECTORY" &&
        mkdir repo &&
        cd repo &&
index 847b8097109cef7102c1e0709bf1c97a0457988c..669ddc645faccfc402b04044ed75676592e64356 100755 (executable)
@@ -30,10 +30,16 @@ graph_read_expect() {
        then
                NUM_BASE=$2
        fi
+       OPTIONS=
+       if test -z "$3"
+       then
+               OPTIONS=" read_generation_data"
+       fi
        cat >expect <<- EOF
        header: 43475048 1 $(test_oid oid_version) 4 $NUM_BASE
        num_commits: $1
        chunks: oid_fanout oid_lookup commit_metadata generation_data
+       options:$OPTIONS
        EOF
        test-tool read-graph >output &&
        test_cmp expect output
@@ -508,6 +514,7 @@ test_expect_success 'setup repo for mixed generation commit-graph-chain' '
                header: 43475048 1 $(test_oid oid_version) 4 1
                num_commits: $NUM_SECOND_LAYER_COMMITS
                chunks: oid_fanout oid_lookup commit_metadata
+               options:
                EOF
                test_cmp expect output &&
                git commit-graph verify &&
@@ -540,6 +547,7 @@ test_expect_success 'do not write generation data chunk if not present on existi
                header: 43475048 1 $(test_oid oid_version) 4 2
                num_commits: $NUM_THIRD_LAYER_COMMITS
                chunks: oid_fanout oid_lookup commit_metadata
+               options:
                EOF
                test_cmp expect output &&
                git commit-graph verify
@@ -581,6 +589,7 @@ test_expect_success 'do not write generation data chunk if the topmost remaining
                header: 43475048 1 $(test_oid oid_version) 4 2
                num_commits: $(($NUM_THIRD_LAYER_COMMITS + $NUM_FOURTH_LAYER_COMMITS))
                chunks: oid_fanout oid_lookup commit_metadata
+               options:
                EOF
                test_cmp expect output &&
                git commit-graph verify
@@ -620,6 +629,7 @@ test_expect_success 'write generation data chunk if topmost remaining layer has
                header: 43475048 1 $(test_oid oid_version) 5 1
                num_commits: $(($NUM_SECOND_LAYER_COMMITS + $NUM_THIRD_LAYER_COMMITS + $NUM_FOURTH_LAYER_COMMITS + $NUM_FIFTH_LAYER_COMMITS))
                chunks: oid_fanout oid_lookup commit_metadata generation_data
+               options: read_generation_data
                EOF
                test_cmp expect output
        )
index e187f90f29e2b592b4074add76d76212b9d0d729..4fe57414c13caca90d862b417ad5471cab28ee12 100755 (executable)
@@ -9,125 +9,13 @@ test_description='exercise basic multi-pack bitmap functionality'
 GIT_TEST_MULTI_PACK_INDEX=0
 GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP=0
 
-objdir=.git/objects
-midx=$objdir/pack/multi-pack-index
+# This test exercise multi-pack bitmap functionality where the object order is
+# stored and read from a special chunk within the MIDX, so use the default
+# behavior here.
+sane_unset GIT_TEST_MIDX_WRITE_REV
+sane_unset GIT_TEST_MIDX_READ_RIDX
 
-# midx_pack_source <obj>
-midx_pack_source () {
-       test-tool read-midx --show-objects .git/objects | grep "^$1 " | cut -f2
-}
-
-setup_bitmap_history
-
-test_expect_success 'enable core.multiPackIndex' '
-       git config core.multiPackIndex true
-'
-
-test_expect_success 'create single-pack midx with bitmaps' '
-       git repack -ad &&
-       git multi-pack-index write --bitmap &&
-       test_path_is_file $midx &&
-       test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&
-       test_path_is_file $midx-$(midx_checksum $objdir).rev
-'
-
-basic_bitmap_tests
-
-test_expect_success 'create new additional packs' '
-       for i in $(test_seq 1 16)
-       do
-               test_commit "$i" &&
-               git repack -d || return 1
-       done &&
-
-       git checkout -b other2 HEAD~8 &&
-       for i in $(test_seq 1 8)
-       do
-               test_commit "side-$i" &&
-               git repack -d || return 1
-       done &&
-       git checkout second
-'
-
-test_expect_success 'create multi-pack midx with bitmaps' '
-       git multi-pack-index write --bitmap &&
-
-       ls $objdir/pack/pack-*.pack >packs &&
-       test_line_count = 25 packs &&
-
-       test_path_is_file $midx &&
-       test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&
-       test_path_is_file $midx-$(midx_checksum $objdir).rev
-'
-
-basic_bitmap_tests
-
-test_expect_success '--no-bitmap is respected when bitmaps exist' '
-       git multi-pack-index write --bitmap &&
-
-       test_commit respect--no-bitmap &&
-       git repack -d &&
-
-       test_path_is_file $midx &&
-       test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&
-       test_path_is_file $midx-$(midx_checksum $objdir).rev &&
-
-       git multi-pack-index write --no-bitmap &&
-
-       test_path_is_file $midx &&
-       test_path_is_missing $midx-$(midx_checksum $objdir).bitmap &&
-       test_path_is_missing $midx-$(midx_checksum $objdir).rev
-'
-
-test_expect_success 'setup midx with base from later pack' '
-       # Write a and b so that "a" is a delta on top of base "b", since Git
-       # prefers to delete contents out of a base rather than add to a shorter
-       # object.
-       test_seq 1 128 >a &&
-       test_seq 1 130 >b &&
-
-       git add a b &&
-       git commit -m "initial commit" &&
-
-       a=$(git rev-parse HEAD:a) &&
-       b=$(git rev-parse HEAD:b) &&
-
-       # In the first pack, "a" is stored as a delta to "b".
-       p1=$(git pack-objects .git/objects/pack/pack <<-EOF
-       $a
-       $b
-       EOF
-       ) &&
-
-       # In the second pack, "a" is missing, and "b" is not a delta nor base to
-       # any other object.
-       p2=$(git pack-objects .git/objects/pack/pack <<-EOF
-       $b
-       $(git rev-parse HEAD)
-       $(git rev-parse HEAD^{tree})
-       EOF
-       ) &&
-
-       git prune-packed &&
-       # Use the second pack as the preferred source, so that "b" occurs
-       # earlier in the MIDX object order, rendering "a" unusable for pack
-       # reuse.
-       git multi-pack-index write --bitmap --preferred-pack=pack-$p2.idx &&
-
-       have_delta $a $b &&
-       test $(midx_pack_source $a) != $(midx_pack_source $b)
-'
-
-rev_list_tests 'full bitmap with backwards delta'
-
-test_expect_success 'clone with bitmaps enabled' '
-       git clone --no-local --bare . clone-reverse-delta.git &&
-       test_when_finished "rm -fr clone-reverse-delta.git" &&
-
-       git rev-parse HEAD >expect &&
-       git --git-dir=clone-reverse-delta.git rev-parse HEAD >actual &&
-       test_cmp expect actual
-'
+midx_bitmap_core
 
 bitmap_reuse_tests() {
        from=$1
@@ -204,17 +92,7 @@ test_expect_success 'missing object closure fails gracefully' '
        )
 '
 
-test_expect_success 'setup partial bitmaps' '
-       test_commit packed &&
-       git repack &&
-       test_commit loose &&
-       git multi-pack-index write --bitmap 2>err &&
-       test_path_is_file $midx &&
-       test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&
-       test_path_is_file $midx-$(midx_checksum $objdir).rev
-'
-
-basic_bitmap_tests HEAD~
+midx_bitmap_partial_tests
 
 test_expect_success 'removing a MIDX clears stale bitmaps' '
        rm -fr repo &&
@@ -228,7 +106,6 @@ test_expect_success 'removing a MIDX clears stale bitmaps' '
 
                # Write a MIDX and bitmap; remove the MIDX but leave the bitmap.
                stale_bitmap=$midx-$(midx_checksum $objdir).bitmap &&
-               stale_rev=$midx-$(midx_checksum $objdir).rev &&
                rm $midx &&
 
                # Then write a new MIDX.
@@ -238,9 +115,7 @@ test_expect_success 'removing a MIDX clears stale bitmaps' '
 
                test_path_is_file $midx &&
                test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&
-               test_path_is_file $midx-$(midx_checksum $objdir).rev &&
-               test_path_is_missing $stale_bitmap &&
-               test_path_is_missing $stale_rev
+               test_path_is_missing $stale_bitmap
        )
 '
 
@@ -261,7 +136,6 @@ test_expect_success 'pack.preferBitmapTips' '
                git multi-pack-index write --bitmap &&
                test_path_is_file $midx &&
                test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&
-               test_path_is_file $midx-$(midx_checksum $objdir).rev &&
 
                test-tool bitmap list-commits | sort >bitmaps &&
                comm -13 bitmaps commits >before &&
@@ -271,7 +145,6 @@ test_expect_success 'pack.preferBitmapTips' '
                        <before | git update-ref --stdin &&
 
                rm -fr $midx-$(midx_checksum $objdir).bitmap &&
-               rm -fr $midx-$(midx_checksum $objdir).rev &&
                rm -fr $midx &&
 
                git -c pack.preferBitmapTips=refs/tags/include \
@@ -309,7 +182,6 @@ test_expect_success 'writing a bitmap with --refs-snapshot' '
                grep "$(git rev-parse two)" bitmaps &&
 
                rm -fr $midx-$(midx_checksum $objdir).bitmap &&
-               rm -fr $midx-$(midx_checksum $objdir).rev &&
                rm -fr $midx &&
 
                # Then again, but with a refs snapshot which only sees
@@ -354,7 +226,6 @@ test_expect_success 'write a bitmap with --refs-snapshot (preferred tips)' '
                ) >snapshot &&
 
                rm -fr $midx-$(midx_checksum $objdir).bitmap &&
-               rm -fr $midx-$(midx_checksum $objdir).rev &&
                rm -fr $midx &&
 
                git multi-pack-index write --bitmap --refs-snapshot=snapshot &&
@@ -395,4 +266,45 @@ test_expect_success 'hash-cache values are propagated from pack bitmaps' '
        )
 '
 
+test_expect_success 'no .bitmap is written without any objects' '
+       rm -fr repo &&
+       git init repo &&
+       test_when_finished "rm -fr repo" &&
+       (
+               cd repo &&
+
+               empty="$(git pack-objects $objdir/pack/pack </dev/null)" &&
+               cat >packs <<-EOF &&
+               pack-$empty.idx
+               EOF
+
+               git multi-pack-index write --bitmap --stdin-packs \
+                       <packs 2>err &&
+
+               grep "bitmap without any objects" err &&
+
+               test_path_is_file $midx &&
+               test_path_is_missing $midx-$(midx_checksum $objdir).bitmap
+       )
+'
+
+test_expect_success 'graceful fallback when missing reverse index' '
+       rm -fr repo &&
+       git init repo &&
+       test_when_finished "rm -fr repo" &&
+       (
+               cd repo &&
+
+               test_commit base &&
+
+               # write a pack and MIDX bitmap containing base
+               git repack -adb &&
+               git multi-pack-index write --bitmap &&
+
+               GIT_TEST_MIDX_READ_RIDX=0 \
+                       git rev-list --use-bitmap-index HEAD 2>err &&
+               ! grep "ignoring extra bitmap file" err
+       )
+'
+
 test_done
diff --git a/t/t5327-multi-pack-bitmaps-rev.sh b/t/t5327-multi-pack-bitmaps-rev.sh
new file mode 100755 (executable)
index 0000000..d30ba63
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+test_description='exercise basic multi-pack bitmap functionality (.rev files)'
+
+. ./test-lib.sh
+. "${TEST_DIRECTORY}/lib-bitmap.sh"
+
+# We'll be writing our own midx and bitmaps, so avoid getting confused by the
+# automatic ones.
+GIT_TEST_MULTI_PACK_INDEX=0
+GIT_TEST_MULTI_PACK_INDEX_WRITE_BITMAP=0
+
+# Unlike t5326, this test exercise multi-pack bitmap functionality where the
+# object order is stored in a separate .rev file.
+GIT_TEST_MIDX_WRITE_REV=1
+GIT_TEST_MIDX_READ_RIDX=0
+export GIT_TEST_MIDX_WRITE_REV
+export GIT_TEST_MIDX_READ_RIDX
+
+midx_bitmap_core rev
+midx_bitmap_partial_tests rev
+
+test_done
diff --git a/t/t5328-commit-graph-64bit-time.sh b/t/t5328-commit-graph-64bit-time.sh
new file mode 100755 (executable)
index 0000000..093f0c0
--- /dev/null
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+test_description='commit graph with 64-bit timestamps'
+. ./test-lib.sh
+
+if ! test_have_prereq TIME_IS_64BIT || ! test_have_prereq TIME_T_IS_64BIT
+then
+       skip_all='skipping 64-bit timestamp tests'
+       test_done
+fi
+
+. "$TEST_DIRECTORY"/lib-commit-graph.sh
+
+UNIX_EPOCH_ZERO="@0 +0000"
+FUTURE_DATE="@4147483646 +0000"
+
+GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS=0
+
+test_expect_success 'lower layers have overflow chunk' '
+       rm -f .git/objects/info/commit-graph &&
+       test_commit --date "$FUTURE_DATE" future-1 &&
+       test_commit --date "$UNIX_EPOCH_ZERO" old-1 &&
+       git commit-graph write --reachable &&
+       test_commit --date "$FUTURE_DATE" future-2 &&
+       test_commit --date "$UNIX_EPOCH_ZERO" old-2 &&
+       git commit-graph write --reachable --split=no-merge &&
+       test_commit extra &&
+       git commit-graph write --reachable --split=no-merge &&
+       git commit-graph write --reachable &&
+       graph_read_expect 5 "generation_data generation_data_overflow" &&
+       mv .git/objects/info/commit-graph commit-graph-upgraded &&
+       git commit-graph write --reachable &&
+       graph_read_expect 5 "generation_data generation_data_overflow" &&
+       test_cmp .git/objects/info/commit-graph commit-graph-upgraded
+'
+
+graph_git_behavior 'overflow' '' HEAD~2 HEAD
+
+test_expect_success 'set up and verify repo with generation data overflow chunk' '
+       mkdir repo &&
+       cd repo &&
+       git init &&
+       test_commit --date "$UNIX_EPOCH_ZERO" 1 &&
+       test_commit 2 &&
+       test_commit --date "$UNIX_EPOCH_ZERO" 3 &&
+       git commit-graph write --reachable &&
+       graph_read_expect 3 generation_data &&
+       test_commit --date "$FUTURE_DATE" 4 &&
+       test_commit 5 &&
+       test_commit --date "$UNIX_EPOCH_ZERO" 6 &&
+       git branch left &&
+       git reset --hard 3 &&
+       test_commit 7 &&
+       test_commit --date "$FUTURE_DATE" 8 &&
+       test_commit 9 &&
+       git branch right &&
+       git reset --hard 3 &&
+       test_merge M left right &&
+       git commit-graph write --reachable &&
+       graph_read_expect 10 "generation_data generation_data_overflow" &&
+       git commit-graph verify
+'
+
+graph_git_behavior 'overflow 2' repo left right
+
+test_done
index 6012cc8172a6bd6e9acad5fc84ddb87cb67815b9..001b7a17ad2bb93610198ebf134ccbedc2781f00 100755 (executable)
@@ -20,45 +20,37 @@ test_expect_success setup '
        git clone --bare ./. victim.git &&
        GIT_DIR=victim.git git update-ref refs/heads/tofail $commit1 &&
        git update-ref refs/heads/main $commit1 &&
-       git update-ref refs/heads/tofail $commit0
-'
+       git update-ref refs/heads/tofail $commit0 &&
 
-cat >victim.git/hooks/pre-receive <<'EOF'
-#!/bin/sh
-printf %s "$@" >>$GIT_DIR/pre-receive.args
-cat - >$GIT_DIR/pre-receive.stdin
-echo STDOUT pre-receive
-echo STDERR pre-receive >&2
-EOF
-chmod u+x victim.git/hooks/pre-receive
+       test_hook --setup -C victim.git pre-receive <<-\EOF &&
+       printf %s "$@" >>$GIT_DIR/pre-receive.args
+       cat - >$GIT_DIR/pre-receive.stdin
+       echo STDOUT pre-receive
+       echo STDERR pre-receive >&2
+       EOF
 
-cat >victim.git/hooks/update <<'EOF'
-#!/bin/sh
-echo "$@" >>$GIT_DIR/update.args
-read x; printf %s "$x" >$GIT_DIR/update.stdin
-echo STDOUT update $1
-echo STDERR update $1 >&2
-test "$1" = refs/heads/main || exit
-EOF
-chmod u+x victim.git/hooks/update
+       test_hook --setup -C victim.git update <<-\EOF &&
+       echo "$@" >>$GIT_DIR/update.args
+       read x; printf %s "$x" >$GIT_DIR/update.stdin
+       echo STDOUT update $1
+       echo STDERR update $1 >&2
+       test "$1" = refs/heads/main || exit
+       EOF
 
-cat >victim.git/hooks/post-receive <<'EOF'
-#!/bin/sh
-printf %s "$@" >>$GIT_DIR/post-receive.args
-cat - >$GIT_DIR/post-receive.stdin
-echo STDOUT post-receive
-echo STDERR post-receive >&2
-EOF
-chmod u+x victim.git/hooks/post-receive
+       test_hook --setup -C victim.git post-receive <<-\EOF &&
+       printf %s "$@" >>$GIT_DIR/post-receive.args
+       cat - >$GIT_DIR/post-receive.stdin
+       echo STDOUT post-receive
+       echo STDERR post-receive >&2
+       EOF
 
-cat >victim.git/hooks/post-update <<'EOF'
-#!/bin/sh
-echo "$@" >>$GIT_DIR/post-update.args
-read x; printf %s "$x" >$GIT_DIR/post-update.stdin
-echo STDOUT post-update
-echo STDERR post-update >&2
-EOF
-chmod u+x victim.git/hooks/post-update
+       test_hook --setup -C victim.git post-update <<-\EOF
+       echo "$@" >>$GIT_DIR/post-update.args
+       read x; printf %s "$x" >$GIT_DIR/post-update.stdin
+       echo STDOUT post-update
+       echo STDERR post-update >&2
+       EOF
+'
 
 test_expect_success push '
        test_must_fail git send-pack --force ./victim.git \
@@ -136,7 +128,7 @@ test_expect_success 'send-pack stderr contains hook messages' '
 '
 
 test_expect_success 'pre-receive hook that forgets to read its input' '
-       write_script victim.git/hooks/pre-receive <<-\EOF &&
+       test_hook --clobber -C victim.git pre-receive <<-\EOF &&
        exit 0
        EOF
        rm -f victim.git/hooks/update victim.git/hooks/post-update &&
index 3e5e19c719170112fa77f924c0b9a6828eea2f6c..915af2de95e162a9581ca23a6efb229737e665a6 100755 (executable)
@@ -25,13 +25,15 @@ test_expect_success setup '
        GIT_DIR=clone2/.git git update-index --add a
 '
 
-for clone in 1 2; do
-       cat >clone${clone}/.git/hooks/post-merge <<'EOF'
-#!/bin/sh
-echo $@ >> $GIT_DIR/post-merge.args
-EOF
-       chmod u+x clone${clone}/.git/hooks/post-merge
-done
+test_expect_success 'setup clone hooks' '
+       test_when_finished "rm -f hook" &&
+       cat >hook <<-\EOF &&
+       echo $@ >>$GIT_DIR/post-merge.args
+       EOF
+
+       test_hook --setup -C clone1 post-merge <hook &&
+       test_hook --setup -C clone2 post-merge <hook
+'
 
 test_expect_success 'post-merge does not run for up-to-date ' '
        GIT_DIR=clone1/.git git merge $commit0 &&
index 1ec9e23be759374258daadf705acd29cb02ff65b..978f240cdaceb4e7593adcf89136e9de9b558aa1 100755 (executable)
@@ -10,8 +10,7 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 . ./test-lib.sh
 
 test_expect_success setup '
-       mkdir -p .git/hooks &&
-       write_script .git/hooks/post-checkout <<-\EOF &&
+       test_hook --setup post-checkout <<-\EOF &&
        echo "$@" >.git/post-checkout.args
        EOF
        test_commit one &&
@@ -49,23 +48,60 @@ test_expect_success 'post-checkout receives the right args when not switching br
        test $old = $new && test $flag = 0
 '
 
-test_expect_success 'post-checkout is triggered on rebase' '
-       test_when_finished "rm -f .git/post-checkout.args" &&
-       git checkout -b rebase-test main &&
-       rm -f .git/post-checkout.args &&
-       git rebase rebase-on-me &&
-       read old new flag <.git/post-checkout.args &&
-       test $old != $new && test $flag = 1
-'
+test_rebase () {
+       args="$*" &&
+       test_expect_success "post-checkout is triggered on rebase $args" '
+               test_when_finished "rm -f .git/post-checkout.args" &&
+               git checkout -B rebase-test main &&
+               rm -f .git/post-checkout.args &&
+               git rebase $args rebase-on-me &&
+               read old new flag <.git/post-checkout.args &&
+               test_cmp_rev main $old &&
+               test_cmp_rev rebase-on-me $new &&
+               test $flag = 1
+       '
+
+       test_expect_success "post-checkout is triggered on rebase $args with fast-forward" '
+               test_when_finished "rm -f .git/post-checkout.args" &&
+               git checkout -B ff-rebase-test rebase-on-me^ &&
+               rm -f .git/post-checkout.args &&
+               git rebase $args rebase-on-me &&
+               read old new flag <.git/post-checkout.args &&
+               test_cmp_rev rebase-on-me^ $old &&
+               test_cmp_rev rebase-on-me $new &&
+               test $flag = 1
+       '
+
+       test_expect_success "rebase $args fast-forward branch checkout runs post-checkout hook" '
+               test_when_finished "test_might_fail git rebase --abort" &&
+               test_when_finished "rm -f .git/post-checkout.args" &&
+               git update-ref refs/heads/rebase-fast-forward three &&
+               git checkout two  &&
+               rm -f .git/post-checkout.args &&
+               git rebase $args HEAD rebase-fast-forward  &&
+               read old new flag <.git/post-checkout.args &&
+               test_cmp_rev two $old &&
+               test_cmp_rev three $new &&
+               test $flag = 1
+       '
+
+       test_expect_success "rebase $args checkout does not remove untracked files" '
+               test_when_finished "test_might_fail git rebase --abort" &&
+               test_when_finished "rm -f .git/post-checkout.args" &&
+               git update-ref refs/heads/rebase-fast-forward three &&
+               git checkout two &&
+               rm -f .git/post-checkout.args &&
+               echo untracked >three.t &&
+               test_when_finished "rm three.t" &&
+               test_must_fail git rebase $args HEAD rebase-fast-forward 2>err &&
+               grep "untracked working tree files would be overwritten by checkout" err &&
+               test_path_is_missing .git/post-checkout.args
 
-test_expect_success 'post-checkout is triggered on rebase with fast-forward' '
-       test_when_finished "rm -f .git/post-checkout.args" &&
-       git checkout -b ff-rebase-test rebase-on-me^ &&
-       rm -f .git/post-checkout.args &&
-       git rebase rebase-on-me &&
-       read old new flag <.git/post-checkout.args &&
-       test $old != $new && test $flag = 1
 '
+}
+
+test_rebase --apply &&
+test_rebase --merge
 
 test_expect_success 'post-checkout hook is triggered by clone' '
        mkdir -p templates/hooks &&
index 5c509db6fc378ebf646833d349ef12fd192f2774..dcbeb42082791ba0bb2683e9f78b545250d380fc 100755 (executable)
@@ -5,7 +5,7 @@ test_description='remote push rejects are reported by client'
 . ./test-lib.sh
 
 test_expect_success 'setup' '
-       write_script .git/hooks/update <<-\EOF &&
+       test_hook update <<-\EOF &&
        exit 1
        EOF
        echo 1 >file &&
index 6da8d760e288dc4b4c75e661f99d2a4850320587..5f3ff051ca2fa3bba8beabbcb1491d5e69262f34 100755 (executable)
@@ -17,15 +17,13 @@ test_expect_success 'setup' '
        git checkout A^0 &&
        test_commit E bar E &&
        test_commit F foo F &&
-       git checkout main
-'
+       git checkout main &&
 
-cat >.git/hooks/post-rewrite <<EOF
-#!/bin/sh
-echo \$@ > "$TRASH_DIRECTORY"/post-rewrite.args
-cat > "$TRASH_DIRECTORY"/post-rewrite.data
-EOF
-chmod u+x .git/hooks/post-rewrite
+       test_hook --setup post-rewrite <<-EOF
+       echo \$@ > "$TRASH_DIRECTORY"/post-rewrite.args
+       cat > "$TRASH_DIRECTORY"/post-rewrite.data
+       EOF
+'
 
 clear_hook_input () {
        rm -f post-rewrite.args post-rewrite.data
index 9f1a483f426ea954af03029eafd1e573fd99cd29..fa5de4500a4f50d48067ef6b1c05491b360a11f4 100755 (executable)
@@ -5,7 +5,7 @@ test_description='remote messages are colorized on the client'
 . ./test-lib.sh
 
 test_expect_success 'setup' '
-       write_script .git/hooks/update <<-\EOF &&
+       test_hook --setup update <<-\EOF &&
        echo error: error
        echo ERROR: also highlighted
        echo hint: hint
index 98b0e81208293b10a57cf8e20a8f3a621ae1f4d1..92cf52c6d4a32c401680a068f9d892950e13d99a 100755 (executable)
@@ -36,7 +36,7 @@ setup_upstream_and_workbench () {
                TAG=$(git -C workbench rev-parse v123) &&
 
                # setup pre-receive hook
-               write_script upstream.git/hooks/pre-receive <<-\EOF &&
+               test_hook --setup -C upstream.git pre-receive <<-\EOF &&
                exec >&2
                echo "# pre-receive hook"
                while read old new ref
@@ -46,7 +46,7 @@ setup_upstream_and_workbench () {
                EOF
 
                # setup post-receive hook
-               write_script upstream.git/hooks/post-receive <<-\EOF &&
+               test_hook --setup -C upstream.git post-receive <<-\EOF &&
                exec >&2
                echo "# post-receive hook"
                while read old new ref
index 297b10925d59a85ab21c26d5a5173ab015d3c628..f9ffb01e50997a45f75b053507b49738b041427d 100644 (file)
@@ -3,7 +3,7 @@ test_expect_success "setup receive.procReceiveRefs" '
 '
 
 test_expect_success "setup proc-receive hook" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic1" \
index 0c3490c9b1b4483f68a9d1ea26455a77a934e69c..98a9d13041a05d7eee850feccba01c20a39497e2 100644 (file)
@@ -1,6 +1,6 @@
 test_expect_success "setup pre-receive hook ($PROTOCOL)" '
        mv "$upstream/hooks/pre-receive" "$upstream/hooks/pre-receive.ok" &&
-       write_script "$upstream/hooks/pre-receive" <<-EOF
+       test_hook -C "$upstream" --clobber pre-receive <<-\EOF
        exit 1
        EOF
 '
@@ -21,7 +21,7 @@ test_expect_success "git-push is declined ($PROTOCOL)" '
        EOF
        test_cmp expect actual &&
 
-       test_cmp_refs -C "$upstream" <<-EOF
+       test_cmp_refs -C "$upstream" <<-\EOF
        <COMMIT-A> refs/heads/main
        EOF
 '
index 2393b04ad95dd804b44a12dddebcf305d92be10d..67ca6dc4f8f232038bc93f4920e7b1bf652fd1b5 100644 (file)
@@ -1,6 +1,6 @@
 test_expect_success "setup pre-receive hook ($PROTOCOL/porcelain)" '
        mv "$upstream/hooks/pre-receive" "$upstream/hooks/pre-receive.ok" &&
-       write_script "$upstream/hooks/pre-receive" <<-EOF
+       test_hook -C "$upstream" --clobber pre-receive <<-\EOF
        exit 1
        EOF
 '
index c08a00ded29eb4df69c0d72fed4569a3247d1a9c..8d22e17aee31a54b3dd1076c7ddb29e52a517d30 100644 (file)
@@ -1,5 +1,5 @@
 test_expect_success "setup proc-receive hook (unknown version, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v --version 2
        EOF
@@ -40,7 +40,7 @@ test_expect_success "proc-receive: bad protocol (unknown version, $PROTOCOL)" '
 '
 
 test_expect_success "setup proc-receive hook (hook --die-read-version, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v --die-read-version
        EOF
@@ -65,13 +65,13 @@ test_expect_success "proc-receive: bad protocol (hook --die-read-version, $PROTO
        grep "remote: fatal: die with the --die-read-version option" out-$test_count &&
        grep "remote: error: fail to negotiate version with proc-receive hook" out-$test_count &&
 
-       test_cmp_refs -C "$upstream" <<-EOF
+       test_cmp_refs -C "$upstream" <<-\EOF
        <COMMIT-A> refs/heads/main
        EOF
 '
 
 test_expect_success "setup proc-receive hook (hook --die-write-version, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v --die-write-version
        EOF
@@ -102,7 +102,7 @@ test_expect_success "proc-receive: bad protocol (hook --die-write-version, $PROT
 '
 
 test_expect_success "setup proc-receive hook (hook --die-read-commands, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v --die-read-commands
        EOF
@@ -132,7 +132,7 @@ test_expect_success "proc-receive: bad protocol (hook --die-read-commands, $PROT
 '
 
 test_expect_success "setup proc-receive hook (hook --die-read-push-options, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v --die-read-push-options
        EOF
@@ -164,7 +164,7 @@ test_expect_success "proc-receive: bad protocol (hook --die-read-push-options, $
 '
 
 test_expect_success "setup proc-receive hook (hook --die-write-report, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v --die-write-report
        EOF
@@ -194,7 +194,7 @@ test_expect_success "proc-receive: bad protocol (hook --die-write-report, $PROTO
 '
 
 test_expect_success "setup proc-receive hook (no report, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v
        EOF
@@ -236,7 +236,7 @@ test_expect_success "cleanup ($PROTOCOL)" '
 '
 
 test_expect_success "setup proc-receive hook (no ref, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok"
@@ -269,7 +269,7 @@ test_expect_success "proc-receive: bad protocol (no ref, $PROTOCOL)" '
 '
 
 test_expect_success "setup proc-receive hook (unknown status, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "xx refs/for/main/topic"
index 3eaa597e0f78bec2630ced80bee2b94ddd2e98b7..298a3d1feca1ff76d145eb7d6a452e8e50f1325d 100644 (file)
@@ -1,5 +1,5 @@
 test_expect_success "setup proc-receive hook (unknown version, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v --version 2
        EOF
@@ -40,7 +40,7 @@ test_expect_success "proc-receive: bad protocol (unknown version, $PROTOCOL/porc
 '
 
 test_expect_success "setup proc-receive hook (hook --die-read-version, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v --die-read-version
        EOF
@@ -71,7 +71,7 @@ test_expect_success "proc-receive: bad protocol (hook --die-read-version, $PROTO
 '
 
 test_expect_success "setup proc-receive hook (hook --die-write-version, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v --die-write-version
        EOF
@@ -102,7 +102,7 @@ test_expect_success "proc-receive: bad protocol (hook --die-write-version, $PROT
 '
 
 test_expect_success "setup proc-receive hook (hook --die-read-commands, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v --die-read-commands
        EOF
@@ -132,7 +132,7 @@ test_expect_success "proc-receive: bad protocol (hook --die-read-commands, $PROT
 '
 
 test_expect_success "setup proc-receive hook (hook --die-read-push-options, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v --die-read-push-options
        EOF
@@ -164,7 +164,7 @@ test_expect_success "proc-receive: bad protocol (hook --die-read-push-options, $
 '
 
 test_expect_success "setup proc-receive hook (hook --die-write-report, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v --die-write-report
        EOF
@@ -194,7 +194,7 @@ test_expect_success "proc-receive: bad protocol (hook --die-write-report, $PROTO
 '
 
 test_expect_success "setup proc-receive hook (no report, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v
        EOF
@@ -236,7 +236,7 @@ test_expect_success "cleanup ($PROTOCOL/porcelain)" '
 '
 
 test_expect_success "setup proc-receive hook (no ref, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok"
@@ -270,7 +270,7 @@ test_expect_success "proc-receive: bad protocol (no ref, $PROTOCOL/porcelain)" '
 '
 
 test_expect_success "setup proc-receive hook (unknown status, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "xx refs/for/main/topic"
index e915dbc28df93fdaee703b33c8ea7666d0917b8c..6347c9629b304aaf60610649bdae030b7fdd6a9f 100644 (file)
@@ -1,5 +1,5 @@
 test_expect_success "setup proc-receive hook (ng, no message, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ng refs/for/main/topic"
@@ -31,7 +31,7 @@ test_expect_success "proc-receive: fail to update (ng, no message, $PROTOCOL)" '
 '
 
 test_expect_success "setup proc-receive hook (ng message, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ng refs/for/main/topic error msg"
index 2a392e099b9ffdb6705749876b69039a83670e68..502b34fe3dd723f8c469cc113e2cca29d1b59f2f 100644 (file)
@@ -1,5 +1,5 @@
 test_expect_success "setup proc-receive hook (ng, no message, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ng refs/for/main/topic"
@@ -32,7 +32,7 @@ test_expect_success "proc-receive: fail to update (ng, no message, $PROTOCOL/por
 '
 
 test_expect_success "setup proc-receive hook (ng message, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ng refs/for/main/topic error msg"
index f7a494bdb9d16fb3f25a3ea0884f107afa4a6555..7744392a6262cfa3935e37e6941029c4646a85c9 100644 (file)
@@ -1,5 +1,5 @@
 test_expect_success "setup proc-receive hook (unexpected ref, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/heads/main"
index 63c479e975964b876cc48f8293a156321ec21b80..6d116ef692c6c281fb1168f75607bfeaa5f3188e 100644 (file)
@@ -1,5 +1,5 @@
 test_expect_success "setup proc-receive hook (unexpected ref, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/heads/main"
index af055aa0864d2adbdb5f1020953e17c63e07c642..619ca2f421aad5fbec8597f6741e5e000c00d291 100644 (file)
@@ -1,5 +1,5 @@
 test_expect_success "setup proc-receive hook (unexpected ref, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic"
index 99601ca321f1ceeac4141007f9e3f5cd32a4295f..8b3f5d05a3fab60ac70a88a019978ccd02bbb9f2 100644 (file)
@@ -1,5 +1,5 @@
 test_expect_success "setup proc-receive hook (unexpected ref, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic"
index fec5f95793bff3c55ea966e1c0355c52e081a618..6dfc7b1c0da421ac143c68005a90caf6a351fb76 100644 (file)
@@ -1,6 +1,6 @@
 test_expect_success "setup proc-receive hook and disable push-options ($PROTOCOL)" '
        git -C "$upstream" config receive.advertisePushOptions false &&
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic"
@@ -31,7 +31,7 @@ test_expect_success "enable push options ($PROTOCOL)" '
 '
 
 test_expect_success "setup version=0 for proc-receive hook ($PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                --version 0 \
@@ -75,7 +75,7 @@ test_expect_success "proc-receive: ignore push-options for version 0 ($PROTOCOL)
 '
 
 test_expect_success "restore proc-receive hook ($PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic"
index 8fb75a8789dc9be9a19d3623c3dedb4a7e82cc2c..768880b40fbdbbb072ed8b362ea638436583e066 100644 (file)
@@ -1,6 +1,6 @@
 test_expect_success "setup proc-receive hook and disable push-options ($PROTOCOL/porcelain)" '
        git -C "$upstream" config receive.advertisePushOptions false &&
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic"
@@ -32,7 +32,7 @@ test_expect_success "enable push options ($PROTOCOL/porcelain)" '
 '
 
 test_expect_success "setup version=0 for proc-receive hook ($PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                --version 0 \
@@ -78,7 +78,7 @@ test_expect_success "proc-receive: ignore push-options for version 0 ($PROTOCOL/
 '
 
 test_expect_success "restore proc-receive hook ($PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic"
index a3a6278213c4cb4a870c78705ecdd5dbf0e1e1e3..0f190a6e851697aac05693097e32c5a79604c7fe 100644 (file)
@@ -1,5 +1,5 @@
 test_expect_success "setup proc-receive hook (ok, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic"
index 0e175388b6523394b5215d96b7d3be89d9ca92b5..7ec39812638a8775a10b03d428cc944ad782fa16 100644 (file)
@@ -1,5 +1,5 @@
 test_expect_success "setup proc-receive hook (ok, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic"
index 988a4302a67f5b8d4f5453852021614096441351..07733b94b81734085a80eb3273fd5f514755b035 100644 (file)
@@ -1,5 +1,5 @@
 test_expect_success "setup proc-receive hook (option without matching ok, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "option refname refs/pull/123/head" \
@@ -30,7 +30,7 @@ test_expect_success "proc-receive: report option without matching ok ($PROTOCOL)
 '
 
 test_expect_success "setup proc-receive hook (option refname, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic" \
@@ -62,7 +62,7 @@ test_expect_success "proc-receive: report option refname ($PROTOCOL)" '
 '
 
 test_expect_success "setup proc-receive hook (option refname and forced-update, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic" \
@@ -95,7 +95,7 @@ test_expect_success "proc-receive: report option refname and forced-update ($PRO
 '
 
 test_expect_success "setup proc-receive hook (option refname and old-oid, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic" \
@@ -129,7 +129,7 @@ test_expect_success "proc-receive: report option refname and old-oid ($PROTOCOL)
 '
 
 test_expect_success "setup proc-receive hook (option old-oid, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic" \
@@ -161,7 +161,7 @@ test_expect_success "proc-receive: report option old-oid ($PROTOCOL)" '
 '
 
 test_expect_success "setup proc-receive hook (option old-oid and new-oid, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic" \
@@ -195,7 +195,7 @@ test_expect_success "proc-receive: report option old-oid and new-oid ($PROTOCOL)
 '
 
 test_expect_success "setup proc-receive hook (report with multiple rewrites, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/a/b/c/topic" \
index daacb3d69d4af4a18f5516b02f017efbe16f72cf..2e1831b104e8a98ab31f83fc9f9d2e4201d9feaa 100644 (file)
@@ -1,5 +1,5 @@
 test_expect_success "setup proc-receive hook (option without matching ok, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "option refname refs/pull/123/head" \
@@ -31,7 +31,7 @@ test_expect_success "proc-receive: report option without matching ok ($PROTOCOL/
 '
 
 test_expect_success "setup proc-receive hook (option refname, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic" \
@@ -64,7 +64,7 @@ test_expect_success "proc-receive: report option refname ($PROTOCOL/porcelain)"
 '
 
 test_expect_success "setup proc-receive hook (option refname and forced-update, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic" \
@@ -99,7 +99,7 @@ test_expect_success "proc-receive: report option refname and forced-update ($PRO
 '
 
 test_expect_success "setup proc-receive hook (option refname and old-oid, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic" \
@@ -134,7 +134,7 @@ test_expect_success "proc-receive: report option refname and old-oid ($PROTOCOL/
 '
 
 test_expect_success "setup proc-receive hook (option old-oid, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic" \
@@ -167,7 +167,7 @@ test_expect_success "proc-receive: report option old-oid ($PROTOCOL/porcelain)"
 '
 
 test_expect_success "setup proc-receive hook (option old-oid and new-oid, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic" \
@@ -202,7 +202,7 @@ test_expect_success "proc-receive: report option old-oid and new-oid ($PROTOCOL/
 '
 
 test_expect_success "setup proc-receive hook (report with multiple rewrites, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/a/b/c/topic" \
index 73a47d1ffdbf84a8c04a8d835991d46c57d584a6..0e37535065345b9aa756441a6cd7d022a9cc6754 100644 (file)
@@ -1,5 +1,5 @@
 test_expect_success "setup proc-receive hook (ft, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic" \
index c3502011075ff974af142317e80e207ab545fb8f..b9a05181f1ac7ac3fa122d98165d2f5d84334a4e 100644 (file)
@@ -1,5 +1,5 @@
 test_expect_success "setup proc-receive hook (fall-through, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-\EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic" \
index 8c8a6c16e10825bd5e16a7db20ac9b0af876a440..889e97057b856581ade7986d7f5da99412f45c7f 100644 (file)
@@ -14,7 +14,7 @@ test_expect_success "setup git config for remote-tracking of special refs" '
 '
 
 test_expect_success "setup proc-receive hook (multiple rewrites for one ref, no refname for the 1st rewrite, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic" \
@@ -87,7 +87,7 @@ test_expect_success "proc-receive: check remote-tracking #1 ($PROTOCOL)" '
 '
 
 test_expect_success "setup proc-receive hook (multiple rewrites for one ref, no refname for the 2nd rewrite, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic" \
@@ -162,7 +162,7 @@ test_expect_success "proc-receive: check remote-tracking #2 ($PROTOCOL)" '
 '
 
 test_expect_success "setup proc-receive hook (multiple rewrites for one ref, $PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic" \
index bc44810f33a82a812ce5bb4d18f7e98f294a65d9..1e523b1c173c6619ae9177c86357b625587b5f79 100644 (file)
@@ -1,5 +1,5 @@
 test_expect_success "setup proc-receive hook (multiple rewrites for one ref, no refname for the 1st rewrite, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic" \
@@ -58,7 +58,7 @@ test_expect_success "proc-receive: multiple rewrite for one ref, no refname for
 '
 
 test_expect_success "setup proc-receive hook (multiple rewrites for one ref, no refname for the 2nd rewrite, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic" \
@@ -119,7 +119,7 @@ test_expect_success "proc-receive: multiple rewrites for one ref, no refname for
 '
 
 test_expect_success "setup proc-receive hook (multiple rewrites for one ref, $PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/main/topic" \
index e63fe7ba1102dab2e75f586e29f149383c21b9a0..4c70e84e4101443c14ea4ccfadcfc689a9e2cd41 100644 (file)
@@ -1,5 +1,5 @@
 test_expect_success "setup proc-receive hook ($PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/next/topic2" \
index 99d17b73afd03e8f50cf05b3ceee18f78687b635..40f4c5b1afba881a79a73caeb92e5190b8962088 100644 (file)
@@ -1,5 +1,5 @@
 test_expect_success "setup proc-receive hook ($PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/for/next/topic2" \
index 2f405adefa892b01f80d3291d993ba882fd7cf5b..7ae3851efb9231c2bff352728991bafe6c76b215 100644 (file)
@@ -17,7 +17,7 @@ test_expect_success "setup upstream branches ($PROTOCOL)" '
 '
 
 test_expect_success "setup proc-receive hook ($PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/heads/main" \
index c88405792ef57c0ef79880ad7d1909496f471ae8..02e1e084d6c9c5c8f8e43e1104a54ff08dd20abc 100644 (file)
@@ -17,7 +17,7 @@ test_expect_success "setup upstream branches ($PROTOCOL/porcelain)" '
 '
 
 test_expect_success "setup proc-receive hook ($PROTOCOL/porcelain)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/heads/main" \
index 31989f018501dab21738fdb92c81af8676662ed1..7efdfe5598722519b8c6706254d93f6462b29136 100644 (file)
@@ -9,7 +9,7 @@ test_expect_success "config receive.procReceiveRefs with modifiers ($PROTOCOL)"
 '
 
 test_expect_success "setup proc-receive hook ($PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/heads/main" \
@@ -70,7 +70,7 @@ test_expect_success "setup upstream: create tags/v123 ($PROTOCOL)" '
 '
 
 test_expect_success "setup proc-receive hook ($PROTOCOL)" '
-       write_script "$upstream/hooks/proc-receive" <<-EOF
+       test_hook -C "$upstream" --clobber proc-receive <<-EOF
        printf >&2 "# proc-receive hook\n"
        test-tool proc-receive -v \
                -r "ok refs/heads/main" \
index f0dc4e696860a4435a1be1182457325290bb1eb4..ee6d2dde9f35677fb9c83a228839bb7ad405a4fa 100755 (executable)
@@ -927,7 +927,8 @@ test_expect_success 'fetching deepen' '
        )
 '
 
-test_expect_success 'use ref advertisement to prune "have" lines sent' '
+test_negotiation_algorithm_default () {
+       test_when_finished rm -rf clientv0 clientv2 &&
        rm -rf server client &&
        git init server &&
        test_commit -C server both_have_1 &&
@@ -946,7 +947,7 @@ test_expect_success 'use ref advertisement to prune "have" lines sent' '
        rm -f trace &&
        cp -r client clientv0 &&
        GIT_TRACE_PACKET="$(pwd)/trace" git -C clientv0 \
-               fetch origin server_has both_have_2 &&
+               "$@" fetch origin server_has both_have_2 &&
        grep "have $(git -C client rev-parse client_has)" trace &&
        grep "have $(git -C client rev-parse both_have_2)" trace &&
        ! grep "have $(git -C client rev-parse both_have_2^)" trace &&
@@ -954,10 +955,27 @@ test_expect_success 'use ref advertisement to prune "have" lines sent' '
        rm -f trace &&
        cp -r client clientv2 &&
        GIT_TRACE_PACKET="$(pwd)/trace" git -C clientv2 -c protocol.version=2 \
-               fetch origin server_has both_have_2 &&
+               "$@" fetch origin server_has both_have_2 &&
        grep "have $(git -C client rev-parse client_has)" trace &&
        grep "have $(git -C client rev-parse both_have_2)" trace &&
        ! grep "have $(git -C client rev-parse both_have_2^)" trace
+}
+
+test_expect_success 'use ref advertisement to prune "have" lines sent' '
+       test_negotiation_algorithm_default
+'
+
+test_expect_success 'same as last but with config overrides' '
+       test_negotiation_algorithm_default \
+               -c feature.experimental=true \
+               -c fetch.negotiationAlgorithm=consecutive
+'
+
+test_expect_success 'ensure bogus fetch.negotiationAlgorithm yields error' '
+       test_when_finished rm -rf clientv0 &&
+       cp -r client clientv0 &&
+       test_must_fail git -C clientv0 --fetch.negotiationAlgorithm=bogus \
+                      fetch origin server_has both_have_2
 '
 
 test_expect_success 'filtering by size' '
index 9ab315424c4b71e1a431c511bddc02b9c0b4e49b..c90cf47acdb23489dbc06e76437372cb407bfa75 100755 (executable)
@@ -753,7 +753,9 @@ test_expect_success 'rename a remote' '
        (
                cd four &&
                git config branch.main.pushRemote origin &&
-               git remote rename origin upstream &&
+               GIT_TRACE2_EVENT=$(pwd)/trace \
+                       git remote rename --progress origin upstream &&
+               test_region progress "Renaming remote references" trace &&
                grep "pushRemote" .git/config &&
                test -z "$(git for-each-ref refs/remotes/origin)" &&
                test "$(git symbolic-ref refs/remotes/upstream/HEAD)" = "refs/remotes/upstream/main" &&
index 8f0d884b88d17acc4373ca47248e177976230878..dea51d4a535f381aae95fbc02f93cc2e432e85d0 100755 (executable)
@@ -164,6 +164,17 @@ test_expect_success 'fetch --prune --tags with refspec prunes based on refspec'
        git rev-parse sometag
 '
 
+test_expect_success REFFILES 'fetch --prune fails to delete branches' '
+       cd "$D" &&
+       git clone . prune-fail &&
+       cd prune-fail &&
+       git update-ref refs/remotes/origin/extrabranch main &&
+       : this will prevent --prune from locking packed-refs for deleting refs, but adding loose refs still succeeds  &&
+       >.git/packed-refs.new &&
+
+       test_must_fail git fetch --prune origin
+'
+
 test_expect_success 'fetch --atomic works with a single branch' '
        test_when_finished "rm -rf \"$D\"/atomic" &&
 
@@ -262,7 +273,7 @@ test_expect_success 'fetch --atomic executes a single reference transaction only
        EOF
 
        rm -f atomic/actual &&
-       write_script atomic/.git/hooks/reference-transaction <<-\EOF &&
+       test_hook -C atomic reference-transaction <<-\EOF &&
                ( echo "$*" && cat ) >>actual
        EOF
 
@@ -295,7 +306,7 @@ test_expect_success 'fetch --atomic aborts all reference updates if hook aborts'
        EOF
 
        rm -f atomic/actual &&
-       write_script atomic/.git/hooks/reference-transaction <<-\EOF &&
+       test_hook -C atomic/.git reference-transaction <<-\EOF &&
                ( echo "$*" && cat ) >>actual
                exit 1
        EOF
@@ -323,7 +334,7 @@ test_expect_success 'fetch --atomic --append appends to FETCH_HEAD' '
        test_line_count = 2 atomic/.git/FETCH_HEAD &&
        cp atomic/.git/FETCH_HEAD expected &&
 
-       write_script atomic/.git/hooks/reference-transaction <<-\EOF &&
+       test_hook -C atomic reference-transaction <<-\EOF &&
                exit 1
        EOF
 
index be025b90f989f68d2b60b96ee7e29b134b557f6f..fc55681a3f2cb5f1b27e6b939142e4c7693e043b 100755 (executable)
@@ -2,6 +2,7 @@
 
 test_description='refspec parsing'
 
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 test_refspec () {
index 2f04cf9a1c7700c599237cee93c3877a0f9f649e..6d5702fd0e557345c8846ce0b309fb55bc98f4c4 100755 (executable)
@@ -23,14 +23,10 @@ D=$(pwd)
 
 mk_empty () {
        repo_name="$1"
-       rm -fr "$repo_name" &&
-       mkdir "$repo_name" &&
-       (
-               cd "$repo_name" &&
-               git init &&
-               git config receive.denyCurrentBranch warn &&
-               mv .git/hooks .git/hooks-disabled
-       )
+       test_when_finished "rm -rf \"$repo_name\"" &&
+       test_path_is_missing "$repo_name" &&
+       git init "$repo_name" &&
+       git -C "$repo_name" config receive.denyCurrentBranch warn
 }
 
 mk_test () {
@@ -59,40 +55,28 @@ mk_test () {
 mk_test_with_hooks() {
        repo_name=$1
        mk_test "$@" &&
-       (
-               cd "$repo_name" &&
-               mkdir .git/hooks &&
-               cd .git/hooks &&
-
-               cat >pre-receive <<-'EOF' &&
-               #!/bin/sh
-               cat - >>pre-receive.actual
-               EOF
-
-               cat >update <<-'EOF' &&
-               #!/bin/sh
-               printf "%s %s %s\n" "$@" >>update.actual
-               EOF
-
-               cat >post-receive <<-'EOF' &&
-               #!/bin/sh
-               cat - >>post-receive.actual
-               EOF
-
-               cat >post-update <<-'EOF' &&
-               #!/bin/sh
-               for ref in "$@"
-               do
-                       printf "%s\n" "$ref" >>post-update.actual
-               done
-               EOF
-
-               chmod +x pre-receive update post-receive post-update
-       )
+       test_hook -C "$repo_name" pre-receive <<-'EOF' &&
+       cat - >>pre-receive.actual
+       EOF
+
+       test_hook -C "$repo_name" update <<-'EOF' &&
+       printf "%s %s %s\n" "$@" >>update.actual
+       EOF
+
+       test_hook -C "$repo_name" post-receive <<-'EOF' &&
+       cat - >>post-receive.actual
+       EOF
+
+       test_hook -C "$repo_name" post-update <<-'EOF'
+       for ref in "$@"
+       do
+               printf "%s\n" "$ref" >>post-update.actual
+       done
+       EOF
 }
 
 mk_child() {
-       rm -rf "$2" &&
+       test_when_finished "rm -rf \"$2\"" &&
        git clone "$1" "$2"
 }
 
@@ -197,38 +181,51 @@ grep_wrote () {
        grep 'write_pack_file/wrote.*"value":"'$1'"' $2
 }
 
-test_expect_success 'push with negotiation' '
-       # Without negotiation
+test_expect_success 'push without negotiation' '
        mk_empty testrepo &&
        git push testrepo $the_first_commit:refs/remotes/origin/first_commit &&
        test_commit -C testrepo unrelated_commit &&
        git -C testrepo config receive.hideRefs refs/remotes/origin/first_commit &&
-       echo now pushing without negotiation &&
+       test_when_finished "rm event" &&
        GIT_TRACE2_EVENT="$(pwd)/event" git -c protocol.version=2 push testrepo refs/heads/main:refs/remotes/origin/main &&
-       grep_wrote 5 event && # 2 commits, 2 trees, 1 blob
+       grep_wrote 5 event # 2 commits, 2 trees, 1 blob
+'
 
-       # Same commands, but with negotiation
-       rm event &&
+test_expect_success 'push with negotiation' '
        mk_empty testrepo &&
        git push testrepo $the_first_commit:refs/remotes/origin/first_commit &&
        test_commit -C testrepo unrelated_commit &&
        git -C testrepo config receive.hideRefs refs/remotes/origin/first_commit &&
+       test_when_finished "rm event" &&
        GIT_TRACE2_EVENT="$(pwd)/event" git -c protocol.version=2 -c push.negotiate=1 push testrepo refs/heads/main:refs/remotes/origin/main &&
        grep_wrote 2 event # 1 commit, 1 tree
 '
 
 test_expect_success 'push with negotiation proceeds anyway even if negotiation fails' '
-       rm event &&
        mk_empty testrepo &&
        git push testrepo $the_first_commit:refs/remotes/origin/first_commit &&
        test_commit -C testrepo unrelated_commit &&
        git -C testrepo config receive.hideRefs refs/remotes/origin/first_commit &&
+       test_when_finished "rm event" &&
        GIT_TEST_PROTOCOL_VERSION=0 GIT_TRACE2_EVENT="$(pwd)/event" \
                git -c push.negotiate=1 push testrepo refs/heads/main:refs/remotes/origin/main 2>err &&
        grep_wrote 5 event && # 2 commits, 2 trees, 1 blob
        test_i18ngrep "push negotiation failed" err
 '
 
+test_expect_success 'push with negotiation does not attempt to fetch submodules' '
+       mk_empty submodule_upstream &&
+       test_commit -C submodule_upstream submodule_commit &&
+       test_config_global protocol.file.allow always &&
+       git submodule add ./submodule_upstream submodule &&
+       mk_empty testrepo &&
+       git push testrepo $the_first_commit:refs/remotes/origin/first_commit &&
+       test_commit -C testrepo unrelated_commit &&
+       git -C testrepo config receive.hideRefs refs/remotes/origin/first_commit &&
+       git -c submodule.recurse=true -c protocol.version=2 -c push.negotiate=1 push testrepo refs/heads/main:refs/remotes/origin/main 2>err &&
+       ! grep "Fetching submodule" err
+'
+
 test_expect_success 'push without wildcard' '
        mk_empty testrepo &&
 
@@ -656,7 +653,6 @@ test_expect_success 'push does not update local refs on failure' '
 
        mk_test testrepo heads/main &&
        mk_child testrepo child &&
-       mkdir testrepo/.git/hooks &&
        echo "#!/no/frobnication/today" >testrepo/.git/hooks/pre-receive &&
        chmod +x testrepo/.git/hooks/pre-receive &&
        (
@@ -1318,7 +1314,7 @@ done
 
 test_expect_success 'fetch follows tags by default' '
        mk_test testrepo heads/main &&
-       rm -fr src dst &&
+       test_when_finished "rm -rf src" &&
        git init src &&
        (
                cd src &&
@@ -1328,6 +1324,7 @@ test_expect_success 'fetch follows tags by default' '
                sed -n "p; s|refs/heads/main$|refs/remotes/origin/main|p" tmp1 |
                sort -k 3 >../expect
        ) &&
+       test_when_finished "rm -rf dst" &&
        git init dst &&
        (
                cd dst &&
@@ -1353,8 +1350,9 @@ test_expect_success 'peeled advertisements are not considered ref tips' '
 
 test_expect_success 'pushing a specific ref applies remote.$name.push as refmap' '
        mk_test testrepo heads/main &&
-       rm -fr src dst &&
+       test_when_finished "rm -rf src" &&
        git init src &&
+       test_when_finished "rm -rf dst" &&
        git init --bare dst &&
        (
                cd src &&
@@ -1377,8 +1375,9 @@ test_expect_success 'pushing a specific ref applies remote.$name.push as refmap'
 
 test_expect_success 'with no remote.$name.push, it is not used as refmap' '
        mk_test testrepo heads/main &&
-       rm -fr src dst &&
+       test_when_finished "rm -rf src" &&
        git init src &&
+       test_when_finished "rm -rf dst" &&
        git init --bare dst &&
        (
                cd src &&
@@ -1399,8 +1398,9 @@ test_expect_success 'with no remote.$name.push, it is not used as refmap' '
 
 test_expect_success 'with no remote.$name.push, upstream mapping is used' '
        mk_test testrepo heads/main &&
-       rm -fr src dst &&
+       test_when_finished "rm -rf src" &&
        git init src &&
+       test_when_finished "rm -rf dst" &&
        git init --bare dst &&
        (
                cd src &&
@@ -1428,8 +1428,9 @@ test_expect_success 'with no remote.$name.push, upstream mapping is used' '
 
 test_expect_success 'push does not follow tags by default' '
        mk_test testrepo heads/main &&
-       rm -fr src dst &&
+       test_when_finished "rm -rf src" &&
        git init src &&
+       test_when_finished "rm -rf dst" &&
        git init --bare dst &&
        (
                cd src &&
@@ -1451,8 +1452,9 @@ test_expect_success 'push does not follow tags by default' '
 
 test_expect_success 'push --follow-tags only pushes relevant tags' '
        mk_test testrepo heads/main &&
-       rm -fr src dst &&
+       test_when_finished "rm -rf src" &&
        git init src &&
+       test_when_finished "rm -rf dst" &&
        git init --bare dst &&
        (
                cd src &&
@@ -1490,9 +1492,9 @@ EOF
 '
 
 test_expect_success 'pushing a tag pushes the tagged object' '
-       rm -rf dst.git &&
        blob=$(echo unreferenced | git hash-object -w --stdin) &&
        git tag -m foo tag-of-blob $blob &&
+       test_when_finished "rm -rf dst.git" &&
        git init --bare dst.git &&
        git push dst.git tag-of-blob &&
        # the receiving index-pack should have noticed
@@ -1503,7 +1505,7 @@ test_expect_success 'pushing a tag pushes the tagged object' '
 '
 
 test_expect_success 'push into bare respects core.logallrefupdates' '
-       rm -rf dst.git &&
+       test_when_finished "rm -rf dst.git" &&
        git init --bare dst.git &&
        git -C dst.git config core.logallrefupdates true &&
 
@@ -1521,7 +1523,7 @@ test_expect_success 'push into bare respects core.logallrefupdates' '
 '
 
 test_expect_success 'fetch into bare respects core.logallrefupdates' '
-       rm -rf dst.git &&
+       test_when_finished "rm -rf dst.git" &&
        git init --bare dst.git &&
        (
                cd dst.git &&
@@ -1542,6 +1544,7 @@ test_expect_success 'fetch into bare respects core.logallrefupdates' '
 '
 
 test_expect_success 'receive.denyCurrentBranch = updateInstead' '
+       mk_empty testrepo &&
        git push testrepo main &&
        (
                cd testrepo &&
@@ -1644,7 +1647,7 @@ test_expect_success 'receive.denyCurrentBranch = updateInstead' '
        ) &&
 
        # (5) push into void
-       rm -fr void &&
+       test_when_finished "rm -rf void" &&
        git init void &&
        (
                cd void &&
@@ -1666,26 +1669,23 @@ test_expect_success 'receive.denyCurrentBranch = updateInstead' '
 '
 
 test_expect_success 'updateInstead with push-to-checkout hook' '
-       rm -fr testrepo &&
+       test_when_finished "rm -rf testrepo" &&
        git init testrepo &&
-       (
-               cd testrepo &&
-               git pull .. main &&
-               git reset --hard HEAD^^ &&
-               git tag initial &&
-               git config receive.denyCurrentBranch updateInstead &&
-               write_script .git/hooks/push-to-checkout <<-\EOF
-               echo >&2 updating from $(git rev-parse HEAD)
-               echo >&2 updating to "$1"
-
-               git update-index -q --refresh &&
-               git read-tree -u -m HEAD "$1" || {
-                       status=$?
-                       echo >&2 read-tree failed
-                       exit $status
-               }
-               EOF
-       ) &&
+       git -C testrepo pull .. main &&
+       git -C testrepo reset --hard HEAD^^ &&
+       git -C testrepo tag initial &&
+       git -C testrepo config receive.denyCurrentBranch updateInstead &&
+       test_hook -C testrepo push-to-checkout <<-\EOF &&
+       echo >&2 updating from $(git rev-parse HEAD)
+       echo >&2 updating to "$1"
+
+       git update-index -q --refresh &&
+       git read-tree -u -m HEAD "$1" || {
+               status=$?
+               echo >&2 read-tree failed
+               exit $status
+       }
+       EOF
 
        # Try pushing into a pristine
        git push testrepo main &&
@@ -1728,35 +1728,32 @@ test_expect_success 'updateInstead with push-to-checkout hook' '
        ) &&
 
        # push into void
-       rm -fr void &&
+       test_when_finished "rm -rf void" &&
        git init void &&
-       (
-               cd void &&
-               git config receive.denyCurrentBranch updateInstead &&
-               write_script .git/hooks/push-to-checkout <<-\EOF
-               if git rev-parse --quiet --verify HEAD
-               then
-                       has_head=yes
-                       echo >&2 updating from $(git rev-parse HEAD)
-               else
-                       has_head=no
-                       echo >&2 pushing into void
-               fi
-               echo >&2 updating to "$1"
-
-               git update-index -q --refresh &&
-               case "$has_head" in
-               yes)
-                       git read-tree -u -m HEAD "$1" ;;
-               no)
-                       git read-tree -u -m "$1" ;;
-               esac || {
-                       status=$?
-                       echo >&2 read-tree failed
-                       exit $status
-               }
-               EOF
-       ) &&
+       git -C void config receive.denyCurrentBranch updateInstead &&
+       test_hook -C void push-to-checkout <<-\EOF &&
+       if git rev-parse --quiet --verify HEAD
+       then
+               has_head=yes
+               echo >&2 updating from $(git rev-parse HEAD)
+       else
+               has_head=no
+               echo >&2 pushing into void
+       fi
+       echo >&2 updating to "$1"
+
+       git update-index -q --refresh &&
+       case "$has_head" in
+       yes)
+               git read-tree -u -m HEAD "$1" ;;
+       no)
+               git read-tree -u -m "$1" ;;
+       esac || {
+               status=$?
+               echo >&2 read-tree failed
+               exit $status
+       }
+       EOF
 
        git push void main &&
        (
@@ -1809,4 +1806,12 @@ test_expect_success 'refuse fetch to current branch of bare repository worktree'
        git -C bare.git fetch -u .. HEAD:wt
 '
 
+test_expect_success 'refuse to push a hidden ref, and make sure do not pollute the repository' '
+       mk_empty testrepo &&
+       git -C testrepo config receive.hiderefs refs/hidden &&
+       git -C testrepo config receive.unpackLimit 1 &&
+       test_must_fail git push testrepo HEAD:refs/hidden/foo &&
+       test_dir_is_empty testrepo/.git/objects/pack
+'
+
 test_done
index 93ecfcdd245b4ed86dd71fd6d3bc69fbf2505934..081808009b2e74aa4cb81a768a15701dd4eca9d5 100755 (executable)
@@ -330,6 +330,19 @@ test_expect_success '--rebase --autostash fast forward' '
        test_cmp_rev HEAD to-rebase-ff
 '
 
+test_expect_success '--rebase with rebase.autostash succeeds on ff' '
+       test_when_finished "rm -fr src dst actual" &&
+       git init src &&
+       test_commit -C src "initial" file "content" &&
+       git clone src dst &&
+       test_commit -C src --printf "more_content" file "more content\ncontent\n" &&
+       echo "dirty" >>dst/file &&
+       test_config -C dst rebase.autostash true &&
+       git -C dst pull --rebase >actual 2>&1 &&
+       grep -q "Fast-forward" actual &&
+       grep -q "Applied autostash." actual
+'
+
 test_expect_success '--rebase with conflicts shows advice' '
        test_when_finished "git rebase --abort; git checkout -f to-rebase" &&
        git checkout -b seq &&
index 66cfcb09c552c9122e648ec01b9ff4793de6ca7c..264de29c35c11cbe09d31d57629aabaae0423b35 100755 (executable)
@@ -233,7 +233,7 @@ test_expect_success 'git pull --no-verify flag passed to merge' '
        git init src &&
        test_commit -C src one &&
        git clone src dst &&
-       write_script dst/.git/hooks/commit-msg <<-\EOF &&
+       test_hook -C dst commit-msg <<-\EOF &&
        false
        EOF
        test_commit -C src two &&
@@ -245,7 +245,7 @@ test_expect_success 'git pull --no-verify --verify passed to merge' '
        git init src &&
        test_commit -C src one &&
        git clone src dst &&
-       write_script dst/.git/hooks/commit-msg <<-\EOF &&
+       test_hook -C dst commit-msg <<-\EOF &&
        false
        EOF
        test_commit -C src two &&
index 93a98e1ef004c9dff5aedc35b59600801b8b4354..072c3216df29664bb5eefc0831662bdd13352529 100755 (executable)
@@ -10,33 +10,122 @@ export GIT_TEST_FATAL_REGISTER_SUBMODULE_ODB
 
 pwd=$(pwd)
 
-add_upstream_commit() {
+write_expected_sub () {
+       NEW_HEAD=$1 &&
+       SUPER_HEAD=$2 &&
+       cat >"$pwd/expect.err.sub" <<-EOF
+       Fetching submodule submodule${SUPER_HEAD:+ at commit $SUPER_HEAD}
+       From $pwd/submodule
+          OLD_HEAD..$NEW_HEAD  sub        -> origin/sub
+       EOF
+}
+
+write_expected_sub2 () {
+       NEW_HEAD=$1 &&
+       SUPER_HEAD=$2 &&
+       cat >"$pwd/expect.err.sub2" <<-EOF
+       Fetching submodule submodule2${SUPER_HEAD:+ at commit $SUPER_HEAD}
+       From $pwd/submodule2
+          OLD_HEAD..$NEW_HEAD  sub2       -> origin/sub2
+       EOF
+}
+
+write_expected_deep () {
+       NEW_HEAD=$1 &&
+       SUB_HEAD=$2 &&
+       cat >"$pwd/expect.err.deep" <<-EOF
+       Fetching submodule submodule/subdir/deepsubmodule${SUB_HEAD:+ at commit $SUB_HEAD}
+       From $pwd/deepsubmodule
+          OLD_HEAD..$NEW_HEAD  deep       -> origin/deep
+       EOF
+}
+
+write_expected_super () {
+       NEW_HEAD=$1 &&
+       cat >"$pwd/expect.err.super" <<-EOF
+       From $pwd/.
+          OLD_HEAD..$NEW_HEAD  super      -> origin/super
+       EOF
+}
+
+# For each submodule in the test setup, this creates a commit and writes
+# a file that contains the expected err if that new commit were fetched.
+# These output files get concatenated in the right order by
+# verify_fetch_result().
+add_submodule_commits () {
        (
                cd submodule &&
-               head1=$(git rev-parse --short HEAD) &&
                echo new >> subfile &&
                test_tick &&
                git add subfile &&
                git commit -m new subfile &&
-               head2=$(git rev-parse --short HEAD) &&
-               echo "Fetching submodule submodule" > ../expect.err &&
-               echo "From $pwd/submodule" >> ../expect.err &&
-               echo "   $head1..$head2  sub        -> origin/sub" >> ../expect.err
+               new_head=$(git rev-parse --short HEAD) &&
+               write_expected_sub $new_head
        ) &&
        (
                cd deepsubmodule &&
-               head1=$(git rev-parse --short HEAD) &&
                echo new >> deepsubfile &&
                test_tick &&
                git add deepsubfile &&
                git commit -m new deepsubfile &&
-               head2=$(git rev-parse --short HEAD) &&
-               echo "Fetching submodule submodule/subdir/deepsubmodule" >> ../expect.err
-               echo "From $pwd/deepsubmodule" >> ../expect.err &&
-               echo "   $head1..$head2  deep       -> origin/deep" >> ../expect.err
+               new_head=$(git rev-parse --short HEAD) &&
+               write_expected_deep $new_head
        )
 }
 
+# For each superproject in the test setup, update its submodule, add the
+# submodule and create a new commit with the submodule change.
+#
+# This requires add_submodule_commits() to be called first, otherwise
+# the submodules will not have changed and cannot be "git add"-ed.
+add_superproject_commits () {
+       (
+               cd submodule &&
+               (
+                       cd subdir/deepsubmodule &&
+                       git fetch &&
+                       git checkout -q FETCH_HEAD
+               ) &&
+               git add subdir/deepsubmodule &&
+               git commit -m "new deep submodule"
+       ) &&
+       git add submodule &&
+       git commit -m "new submodule" &&
+       super_head=$(git rev-parse --short HEAD) &&
+       sub_head=$(git -C submodule rev-parse --short HEAD) &&
+       write_expected_super $super_head &&
+       write_expected_sub $sub_head
+}
+
+# Verifies that the expected repositories were fetched. This is done by
+# concatenating the files expect.err.[super|sub|deep] in the correct
+# order and comparing it to the actual stderr.
+#
+# If a repo should not be fetched in the test, its corresponding
+# expect.err file should be rm-ed.
+verify_fetch_result () {
+       ACTUAL_ERR=$1 &&
+       rm -f expect.err.combined &&
+       if test -f expect.err.super
+       then
+               cat expect.err.super >>expect.err.combined
+       fi &&
+       if test -f expect.err.sub
+       then
+               cat expect.err.sub >>expect.err.combined
+       fi &&
+       if test -f expect.err.deep
+       then
+               cat expect.err.deep >>expect.err.combined
+       fi &&
+       if test -f expect.err.sub2
+       then
+               cat expect.err.sub2 >>expect.err.combined
+       fi &&
+       sed -e 's/[0-9a-f][0-9a-f]*\.\./OLD_HEAD\.\./' "$ACTUAL_ERR" >actual.err.cmp &&
+       test_cmp expect.err.combined actual.err.cmp
+}
+
 test_expect_success setup '
        git config --global protocol.file.allow always &&
        mkdir deepsubmodule &&
@@ -69,38 +158,38 @@ test_expect_success setup '
 '
 
 test_expect_success "fetch --recurse-submodules recurses into submodules" '
-       add_upstream_commit &&
+       add_submodule_commits &&
        (
                cd downstream &&
                git fetch --recurse-submodules >../actual.out 2>../actual.err
        ) &&
        test_must_be_empty actual.out &&
-       test_cmp expect.err actual.err
+       verify_fetch_result actual.err
 '
 
 test_expect_success "submodule.recurse option triggers recursive fetch" '
-       add_upstream_commit &&
+       add_submodule_commits &&
        (
                cd downstream &&
                git -c submodule.recurse fetch >../actual.out 2>../actual.err
        ) &&
        test_must_be_empty actual.out &&
-       test_cmp expect.err actual.err
+       verify_fetch_result actual.err
 '
 
 test_expect_success "fetch --recurse-submodules -j2 has the same output behaviour" '
-       add_upstream_commit &&
+       add_submodule_commits &&
        (
                cd downstream &&
                GIT_TRACE="$TRASH_DIRECTORY/trace.out" git fetch --recurse-submodules -j2 2>../actual.err
        ) &&
        test_must_be_empty actual.out &&
-       test_cmp expect.err actual.err &&
+       verify_fetch_result actual.err &&
        grep "2 tasks" trace.out
 '
 
 test_expect_success "fetch alone only fetches superproject" '
-       add_upstream_commit &&
+       add_submodule_commits &&
        (
                cd downstream &&
                git fetch >../actual.out 2>../actual.err
@@ -125,11 +214,11 @@ test_expect_success "using fetchRecurseSubmodules=true in .gitmodules recurses i
                git fetch >../actual.out 2>../actual.err
        ) &&
        test_must_be_empty actual.out &&
-       test_cmp expect.err actual.err
+       verify_fetch_result actual.err
 '
 
 test_expect_success "--no-recurse-submodules overrides .gitmodules config" '
-       add_upstream_commit &&
+       add_submodule_commits &&
        (
                cd downstream &&
                git fetch --no-recurse-submodules >../actual.out 2>../actual.err
@@ -156,7 +245,7 @@ test_expect_success "--recurse-submodules overrides fetchRecurseSubmodules setti
                git config --unset submodule.submodule.fetchRecurseSubmodules
        ) &&
        test_must_be_empty actual.out &&
-       test_cmp expect.err actual.err
+       verify_fetch_result actual.err
 '
 
 test_expect_success "--quiet propagates to submodules" '
@@ -178,13 +267,13 @@ test_expect_success "--quiet propagates to parallel submodules" '
 '
 
 test_expect_success "--dry-run propagates to submodules" '
-       add_upstream_commit &&
+       add_submodule_commits &&
        (
                cd downstream &&
                git fetch --recurse-submodules --dry-run >../actual.out 2>../actual.err
        ) &&
        test_must_be_empty actual.out &&
-       test_cmp expect.err actual.err
+       verify_fetch_result actual.err
 '
 
 test_expect_success "Without --dry-run propagates to submodules" '
@@ -193,22 +282,22 @@ test_expect_success "Without --dry-run propagates to submodules" '
                git fetch --recurse-submodules >../actual.out 2>../actual.err
        ) &&
        test_must_be_empty actual.out &&
-       test_cmp expect.err actual.err
+       verify_fetch_result actual.err
 '
 
 test_expect_success "recurseSubmodules=true propagates into submodules" '
-       add_upstream_commit &&
+       add_submodule_commits &&
        (
                cd downstream &&
                git config fetch.recurseSubmodules true &&
                git fetch >../actual.out 2>../actual.err
        ) &&
        test_must_be_empty actual.out &&
-       test_cmp expect.err actual.err
+       verify_fetch_result actual.err
 '
 
 test_expect_success "--recurse-submodules overrides config in submodule" '
-       add_upstream_commit &&
+       add_submodule_commits &&
        (
                cd downstream &&
                (
@@ -218,11 +307,11 @@ test_expect_success "--recurse-submodules overrides config in submodule" '
                git fetch --recurse-submodules >../actual.out 2>../actual.err
        ) &&
        test_must_be_empty actual.out &&
-       test_cmp expect.err actual.err
+       verify_fetch_result actual.err
 '
 
 test_expect_success "--no-recurse-submodules overrides config setting" '
-       add_upstream_commit &&
+       add_submodule_commits &&
        (
                cd downstream &&
                git config fetch.recurseSubmodules true &&
@@ -247,36 +336,34 @@ test_expect_success "Recursion doesn't happen when no new commits are fetched in
 '
 
 test_expect_success "Recursion stops when no new submodule commits are fetched" '
-       head1=$(git rev-parse --short HEAD) &&
        git add submodule &&
        git commit -m "new submodule" &&
-       head2=$(git rev-parse --short HEAD) &&
-       echo "From $pwd/." > expect.err.sub &&
-       echo "   $head1..$head2  super      -> origin/super" >>expect.err.sub &&
-       head -3 expect.err >> expect.err.sub &&
+       new_head=$(git rev-parse --short HEAD) &&
+       write_expected_super $new_head &&
+       rm expect.err.deep &&
        (
                cd downstream &&
                git fetch >../actual.out 2>../actual.err
        ) &&
-       test_cmp expect.err.sub actual.err &&
+       verify_fetch_result actual.err &&
        test_must_be_empty actual.out
 '
 
 test_expect_success "Recursion doesn't happen when new superproject commits don't change any submodules" '
-       add_upstream_commit &&
-       head1=$(git rev-parse --short HEAD) &&
+       add_submodule_commits &&
        echo a > file &&
        git add file &&
        git commit -m "new file" &&
-       head2=$(git rev-parse --short HEAD) &&
-       echo "From $pwd/." > expect.err.file &&
-       echo "   $head1..$head2  super      -> origin/super" >> expect.err.file &&
+       new_head=$(git rev-parse --short HEAD) &&
+       write_expected_super $new_head &&
+       rm expect.err.sub &&
+       rm expect.err.deep &&
        (
                cd downstream &&
                git fetch >../actual.out 2>../actual.err
        ) &&
        test_must_be_empty actual.out &&
-       test_cmp expect.err.file actual.err
+       verify_fetch_result actual.err
 '
 
 test_expect_success "Recursion picks up config in submodule" '
@@ -288,14 +375,11 @@ test_expect_success "Recursion picks up config in submodule" '
                        git config fetch.recurseSubmodules true
                )
        ) &&
-       add_upstream_commit &&
-       head1=$(git rev-parse --short HEAD) &&
+       add_submodule_commits &&
        git add submodule &&
        git commit -m "new submodule" &&
-       head2=$(git rev-parse --short HEAD) &&
-       echo "From $pwd/." > expect.err.sub &&
-       echo "   $head1..$head2  super      -> origin/super" >> expect.err.sub &&
-       cat expect.err >> expect.err.sub &&
+       new_head=$(git rev-parse --short HEAD) &&
+       write_expected_super $new_head &&
        (
                cd downstream &&
                git fetch >../actual.out 2>../actual.err &&
@@ -304,60 +388,23 @@ test_expect_success "Recursion picks up config in submodule" '
                        git config --unset fetch.recurseSubmodules
                )
        ) &&
-       test_cmp expect.err.sub actual.err &&
+       verify_fetch_result actual.err &&
        test_must_be_empty actual.out
 '
 
 test_expect_success "Recursion picks up all submodules when necessary" '
-       add_upstream_commit &&
-       (
-               cd submodule &&
-               (
-                       cd subdir/deepsubmodule &&
-                       git fetch &&
-                       git checkout -q FETCH_HEAD
-               ) &&
-               head1=$(git rev-parse --short HEAD^) &&
-               git add subdir/deepsubmodule &&
-               git commit -m "new deepsubmodule" &&
-               head2=$(git rev-parse --short HEAD) &&
-               echo "Fetching submodule submodule" > ../expect.err.sub &&
-               echo "From $pwd/submodule" >> ../expect.err.sub &&
-               echo "   $head1..$head2  sub        -> origin/sub" >> ../expect.err.sub
-       ) &&
-       head1=$(git rev-parse --short HEAD) &&
-       git add submodule &&
-       git commit -m "new submodule" &&
-       head2=$(git rev-parse --short HEAD) &&
-       echo "From $pwd/." > expect.err.2 &&
-       echo "   $head1..$head2  super      -> origin/super" >> expect.err.2 &&
-       cat expect.err.sub >> expect.err.2 &&
-       tail -3 expect.err >> expect.err.2 &&
+       add_submodule_commits &&
+       add_superproject_commits &&
        (
                cd downstream &&
                git fetch >../actual.out 2>../actual.err
        ) &&
-       test_cmp expect.err.2 actual.err &&
+       verify_fetch_result actual.err &&
        test_must_be_empty actual.out
 '
 
 test_expect_success "'--recurse-submodules=on-demand' doesn't recurse when no new commits are fetched in the superproject (and ignores config)" '
-       add_upstream_commit &&
-       (
-               cd submodule &&
-               (
-                       cd subdir/deepsubmodule &&
-                       git fetch &&
-                       git checkout -q FETCH_HEAD
-               ) &&
-               head1=$(git rev-parse --short HEAD^) &&
-               git add subdir/deepsubmodule &&
-               git commit -m "new deepsubmodule" &&
-               head2=$(git rev-parse --short HEAD) &&
-               echo Fetching submodule submodule > ../expect.err.sub &&
-               echo "From $pwd/submodule" >> ../expect.err.sub &&
-               echo "   $head1..$head2  sub        -> origin/sub" >> ../expect.err.sub
-       ) &&
+       add_submodule_commits &&
        (
                cd downstream &&
                git config fetch.recurseSubmodules true &&
@@ -369,15 +416,8 @@ test_expect_success "'--recurse-submodules=on-demand' doesn't recurse when no ne
 '
 
 test_expect_success "'--recurse-submodules=on-demand' recurses as deep as necessary (and ignores config)" '
-       head1=$(git rev-parse --short HEAD) &&
-       git add submodule &&
-       git commit -m "new submodule" &&
-       head2=$(git rev-parse --short HEAD) &&
-       tail -3 expect.err > expect.err.deepsub &&
-       echo "From $pwd/." > expect.err &&
-       echo "   $head1..$head2  super      -> origin/super" >>expect.err &&
-       cat expect.err.sub >> expect.err &&
-       cat expect.err.deepsub >> expect.err &&
+       add_submodule_commits &&
+       add_superproject_commits &&
        (
                cd downstream &&
                git config fetch.recurseSubmodules false &&
@@ -393,24 +433,165 @@ test_expect_success "'--recurse-submodules=on-demand' recurses as deep as necess
                )
        ) &&
        test_must_be_empty actual.out &&
-       test_cmp expect.err actual.err
+       verify_fetch_result actual.err
+'
+
+# These tests verify that we can fetch submodules that aren't in the
+# index.
+#
+# First, test the simple case where the index is empty and we only fetch
+# submodules that are not in the index.
+test_expect_success 'setup downstream branch without submodules' '
+       (
+               cd downstream &&
+               git checkout --recurse-submodules -b no-submodules &&
+               git rm .gitmodules &&
+               git rm submodule &&
+               git commit -m "no submodules" &&
+               git checkout --recurse-submodules super
+       )
+'
+
+test_expect_success "'--recurse-submodules=on-demand' should fetch submodule commits if the submodule is changed but the index has no submodules" '
+       add_submodule_commits &&
+       add_superproject_commits &&
+       # Fetch the new superproject commit
+       (
+               cd downstream &&
+               git switch --recurse-submodules no-submodules &&
+               git fetch --recurse-submodules=on-demand >../actual.out 2>../actual.err
+       ) &&
+       super_head=$(git rev-parse --short HEAD) &&
+       sub_head=$(git -C submodule rev-parse --short HEAD) &&
+       deep_head=$(git -C submodule/subdir/deepsubmodule rev-parse --short HEAD) &&
+
+       # assert that these are fetched from commits, not the index
+       write_expected_sub $sub_head $super_head &&
+       write_expected_deep $deep_head $sub_head &&
+
+       test_must_be_empty actual.out &&
+       verify_fetch_result actual.err
+'
+
+test_expect_success "'--recurse-submodules' should fetch submodule commits if the submodule is changed but the index has no submodules" '
+       add_submodule_commits &&
+       add_superproject_commits &&
+       # Fetch the new superproject commit
+       (
+               cd downstream &&
+               git switch --recurse-submodules no-submodules &&
+               git fetch --recurse-submodules >../actual.out 2>../actual.err
+       ) &&
+       super_head=$(git rev-parse --short HEAD) &&
+       sub_head=$(git -C submodule rev-parse --short HEAD) &&
+       deep_head=$(git -C submodule/subdir/deepsubmodule rev-parse --short HEAD) &&
+
+       # assert that these are fetched from commits, not the index
+       write_expected_sub $sub_head $super_head &&
+       write_expected_deep $deep_head $sub_head &&
+
+       test_must_be_empty actual.out &&
+       verify_fetch_result actual.err
+'
+
+test_expect_success "'--recurse-submodules' should ignore changed, inactive submodules" '
+       add_submodule_commits &&
+       add_superproject_commits &&
+
+       # Fetch the new superproject commit
+       (
+               cd downstream &&
+               git switch --recurse-submodules no-submodules &&
+               git -c submodule.submodule.active=false fetch --recurse-submodules >../actual.out 2>../actual.err
+       ) &&
+       test_must_be_empty actual.out &&
+       super_head=$(git rev-parse --short HEAD) &&
+       write_expected_super $super_head &&
+       # Neither should be fetched because the submodule is inactive
+       rm expect.err.sub &&
+       rm expect.err.deep &&
+       verify_fetch_result actual.err
+'
+
+# Now that we know we can fetch submodules that are not in the index,
+# test that we can fetch index and non-index submodules in the same
+# operation.
+test_expect_success 'setup downstream branch with other submodule' '
+       mkdir submodule2 &&
+       (
+               cd submodule2 &&
+               git init &&
+               echo sub2content >sub2file &&
+               git add sub2file &&
+               git commit -a -m new &&
+               git branch -M sub2
+       ) &&
+       git checkout -b super-sub2-only &&
+       git submodule add "$pwd/submodule2" submodule2 &&
+       git commit -m "add sub2" &&
+       git checkout super &&
+       (
+               cd downstream &&
+               git fetch --recurse-submodules origin &&
+               git checkout super-sub2-only &&
+               # Explicitly run "git submodule update" because sub2 is new
+               # and has not been cloned.
+               git submodule update --init &&
+               git checkout --recurse-submodules super
+       )
+'
+
+test_expect_success "'--recurse-submodules' should fetch submodule commits in changed submodules and the index" '
+       test_when_finished "rm expect.err.sub2" &&
+       # Create new commit in origin/super
+       add_submodule_commits &&
+       add_superproject_commits &&
+
+       # Create new commit in origin/super-sub2-only
+       git checkout super-sub2-only &&
+       (
+               cd submodule2 &&
+               test_commit --no-tag foo
+       ) &&
+       git add submodule2 &&
+       git commit -m "new submodule2" &&
+
+       git checkout super &&
+       (
+               cd downstream &&
+               git fetch --recurse-submodules >../actual.out 2>../actual.err
+       ) &&
+       test_must_be_empty actual.out &&
+       sub2_head=$(git -C submodule2 rev-parse --short HEAD) &&
+       super_head=$(git rev-parse --short super) &&
+       super_sub2_only_head=$(git rev-parse --short super-sub2-only) &&
+       write_expected_sub2 $sub2_head $super_sub2_only_head &&
+
+       # write_expected_super cannot handle >1 branch. Since this is a
+       # one-off, construct expect.err.super manually.
+       cat >"$pwd/expect.err.super" <<-EOF &&
+       From $pwd/.
+          OLD_HEAD..$super_head  super           -> origin/super
+          OLD_HEAD..$super_sub2_only_head  super-sub2-only -> origin/super-sub2-only
+       EOF
+       verify_fetch_result actual.err
 '
 
 test_expect_success "'--recurse-submodules=on-demand' stops when no new submodule commits are found in the superproject (and ignores config)" '
-       add_upstream_commit &&
-       head1=$(git rev-parse --short HEAD) &&
+       add_submodule_commits &&
        echo a >> file &&
        git add file &&
        git commit -m "new file" &&
-       head2=$(git rev-parse --short HEAD) &&
-       echo "From $pwd/." > expect.err.file &&
-       echo "   $head1..$head2  super      -> origin/super" >> expect.err.file &&
+       new_head=$(git rev-parse --short HEAD) &&
+       write_expected_super $new_head &&
+       rm expect.err.sub &&
+       rm expect.err.deep &&
        (
                cd downstream &&
                git fetch --recurse-submodules=on-demand >../actual.out 2>../actual.err
        ) &&
        test_must_be_empty actual.out &&
-       test_cmp expect.err.file actual.err
+       verify_fetch_result actual.err
 '
 
 test_expect_success "'fetch.recurseSubmodules=on-demand' overrides global config" '
@@ -418,15 +599,13 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' overrides global config
                cd downstream &&
                git fetch --recurse-submodules
        ) &&
-       add_upstream_commit &&
+       add_submodule_commits &&
        git config --global fetch.recurseSubmodules false &&
-       head1=$(git rev-parse --short HEAD) &&
        git add submodule &&
        git commit -m "new submodule" &&
-       head2=$(git rev-parse --short HEAD) &&
-       echo "From $pwd/." > expect.err.2 &&
-       echo "   $head1..$head2  super      -> origin/super" >>expect.err.2 &&
-       head -3 expect.err >> expect.err.2 &&
+       new_head=$(git rev-parse --short HEAD) &&
+       write_expected_super $new_head &&
+       rm expect.err.deep &&
        (
                cd downstream &&
                git config fetch.recurseSubmodules on-demand &&
@@ -438,7 +617,7 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' overrides global config
                git config --unset fetch.recurseSubmodules
        ) &&
        test_must_be_empty actual.out &&
-       test_cmp expect.err.2 actual.err
+       verify_fetch_result actual.err
 '
 
 test_expect_success "'submodule.<sub>.fetchRecurseSubmodules=on-demand' overrides fetch.recurseSubmodules" '
@@ -446,15 +625,13 @@ test_expect_success "'submodule.<sub>.fetchRecurseSubmodules=on-demand' override
                cd downstream &&
                git fetch --recurse-submodules
        ) &&
-       add_upstream_commit &&
+       add_submodule_commits &&
        git config fetch.recurseSubmodules false &&
-       head1=$(git rev-parse --short HEAD) &&
        git add submodule &&
        git commit -m "new submodule" &&
-       head2=$(git rev-parse --short HEAD) &&
-       echo "From $pwd/." > expect.err.2 &&
-       echo "   $head1..$head2  super      -> origin/super" >>expect.err.2 &&
-       head -3 expect.err >> expect.err.2 &&
+       new_head=$(git rev-parse --short HEAD) &&
+       write_expected_super $new_head &&
+       rm expect.err.deep &&
        (
                cd downstream &&
                git config submodule.submodule.fetchRecurseSubmodules on-demand &&
@@ -466,7 +643,7 @@ test_expect_success "'submodule.<sub>.fetchRecurseSubmodules=on-demand' override
                git config --unset submodule.submodule.fetchRecurseSubmodules
        ) &&
        test_must_be_empty actual.out &&
-       test_cmp expect.err.2 actual.err
+       verify_fetch_result actual.err
 '
 
 test_expect_success "don't fetch submodule when newly recorded commits are already present" '
@@ -474,18 +651,19 @@ test_expect_success "don't fetch submodule when newly recorded commits are alrea
                cd submodule &&
                git checkout -q HEAD^^
        ) &&
-       head1=$(git rev-parse --short HEAD) &&
        git add submodule &&
        git commit -m "submodule rewound" &&
-       head2=$(git rev-parse --short HEAD) &&
-       echo "From $pwd/." > expect.err &&
-       echo "   $head1..$head2  super      -> origin/super" >> expect.err &&
+       new_head=$(git rev-parse --short HEAD) &&
+       write_expected_super $new_head &&
+       rm expect.err.sub &&
+       # This file does not exist, but rm -f for readability
+       rm -f expect.err.deep &&
        (
                cd downstream &&
                git fetch >../actual.out 2>../actual.err
        ) &&
        test_must_be_empty actual.out &&
-       test_cmp expect.err actual.err &&
+       verify_fetch_result actual.err &&
        (
                cd submodule &&
                git checkout -q sub
@@ -497,15 +675,13 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' works also without .git
                cd downstream &&
                git fetch --recurse-submodules
        ) &&
-       add_upstream_commit &&
-       head1=$(git rev-parse --short HEAD) &&
+       add_submodule_commits &&
        git add submodule &&
        git rm .gitmodules &&
        git commit -m "new submodule without .gitmodules" &&
-       head2=$(git rev-parse --short HEAD) &&
-       echo "From $pwd/." >expect.err.2 &&
-       echo "   $head1..$head2  super      -> origin/super" >>expect.err.2 &&
-       head -3 expect.err >>expect.err.2 &&
+       new_head=$(git rev-parse --short HEAD) &&
+       write_expected_super $new_head &&
+       rm expect.err.deep &&
        (
                cd downstream &&
                rm .gitmodules &&
@@ -521,7 +697,7 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' works also without .git
                git reset --hard
        ) &&
        test_must_be_empty actual.out &&
-       test_cmp expect.err.2 actual.err &&
+       verify_fetch_result actual.err &&
        git checkout HEAD^ -- .gitmodules &&
        git add .gitmodules &&
        git commit -m "new submodule restored .gitmodules"
@@ -843,4 +1019,111 @@ test_expect_success 'recursive fetch after deinit a submodule' '
        test_cmp expect actual
 '
 
+test_expect_success 'setup repo with upstreams that share a submodule name' '
+       mkdir same-name-1 &&
+       (
+               cd same-name-1 &&
+               git init -b main &&
+               test_commit --no-tag a
+       ) &&
+       git clone same-name-1 same-name-2 &&
+       # same-name-1 and same-name-2 both add a submodule with the
+       # name "submodule"
+       (
+               cd same-name-1 &&
+               mkdir submodule &&
+               git -C submodule init -b main &&
+               test_commit -C submodule --no-tag a1 &&
+               git submodule add "$pwd/same-name-1/submodule" &&
+               git add submodule &&
+               git commit -m "super-a1"
+       ) &&
+       (
+               cd same-name-2 &&
+               mkdir submodule &&
+               git -C submodule init -b main &&
+               test_commit -C submodule --no-tag a2 &&
+               git submodule add "$pwd/same-name-2/submodule" &&
+               git add submodule &&
+               git commit -m "super-a2"
+       ) &&
+       git clone same-name-1 -o same-name-1 same-name-downstream &&
+       (
+               cd same-name-downstream &&
+               git remote add same-name-2 ../same-name-2 &&
+               git fetch --all &&
+               # init downstream with same-name-1
+               git submodule update --init
+       )
+'
+
+test_expect_success 'fetch --recurse-submodules updates name-conflicted, populated submodule' '
+       test_when_finished "git -C same-name-downstream checkout main" &&
+       (
+               cd same-name-1 &&
+               test_commit -C submodule --no-tag b1 &&
+               git add submodule &&
+               git commit -m "super-b1"
+       ) &&
+       (
+               cd same-name-2 &&
+               test_commit -C submodule --no-tag b2 &&
+               git add submodule &&
+               git commit -m "super-b2"
+       ) &&
+       (
+               cd same-name-downstream &&
+               # even though the .gitmodules is correct, we cannot
+               # fetch from same-name-2
+               git checkout same-name-2/main &&
+               git fetch --recurse-submodules same-name-1 &&
+               test_must_fail git fetch --recurse-submodules same-name-2
+       ) &&
+       super_head1=$(git -C same-name-1 rev-parse HEAD) &&
+       git -C same-name-downstream cat-file -e $super_head1 &&
+
+       super_head2=$(git -C same-name-2 rev-parse HEAD) &&
+       git -C same-name-downstream cat-file -e $super_head2 &&
+
+       sub_head1=$(git -C same-name-1/submodule rev-parse HEAD) &&
+       git -C same-name-downstream/submodule cat-file -e $sub_head1 &&
+
+       sub_head2=$(git -C same-name-2/submodule rev-parse HEAD) &&
+       test_must_fail git -C same-name-downstream/submodule cat-file -e $sub_head2
+'
+
+test_expect_success 'fetch --recurse-submodules updates name-conflicted, unpopulated submodule' '
+       (
+               cd same-name-1 &&
+               test_commit -C submodule --no-tag c1 &&
+               git add submodule &&
+               git commit -m "super-c1"
+       ) &&
+       (
+               cd same-name-2 &&
+               test_commit -C submodule --no-tag c2 &&
+               git add submodule &&
+               git commit -m "super-c2"
+       ) &&
+       (
+               cd same-name-downstream &&
+               git checkout main &&
+               git rm .gitmodules &&
+               git rm submodule &&
+               git commit -m "no submodules" &&
+               git fetch --recurse-submodules same-name-1
+       ) &&
+       head1=$(git -C same-name-1/submodule rev-parse HEAD) &&
+       head2=$(git -C same-name-2/submodule rev-parse HEAD) &&
+       (
+               cd same-name-downstream/.git/modules/submodule &&
+               # The submodule has core.worktree pointing to the "git
+               # rm"-ed directory, overwrite the invalid value. See
+               # comment in get_fetch_task_from_changed() for more
+               # information.
+               git --work-tree=. cat-file -e $head1 &&
+               test_must_fail git --work-tree=. cat-file -e $head2
+       )
+'
+
 test_done
index 24d374adbae8846de060ae24db9f92b1e8e5e207..7c0a148e73c9e54003ed0fbad0805fe00f31eed0 100755 (executable)
@@ -35,8 +35,7 @@ test_expect_success setup '
 
 test_expect_success 'unsigned push does not send push certificate' '
        prepare_dst &&
-       mkdir -p dst/.git/hooks &&
-       write_script dst/.git/hooks/post-receive <<-\EOF &&
+       test_hook -C dst post-receive <<-\EOF &&
        # discard the update list
        cat >/dev/null
        # record the push certificate
@@ -52,8 +51,7 @@ test_expect_success 'unsigned push does not send push certificate' '
 
 test_expect_success 'talking with a receiver without push certificate support' '
        prepare_dst &&
-       mkdir -p dst/.git/hooks &&
-       write_script dst/.git/hooks/post-receive <<-\EOF &&
+       test_hook -C dst post-receive <<-\EOF &&
        # discard the update list
        cat >/dev/null
        # record the push certificate
@@ -69,22 +67,19 @@ test_expect_success 'talking with a receiver without push certificate support' '
 
 test_expect_success 'push --signed fails with a receiver without push certificate support' '
        prepare_dst &&
-       mkdir -p dst/.git/hooks &&
        test_must_fail git push --signed dst noop ff +noff 2>err &&
        test_i18ngrep "the receiving end does not support" err
 '
 
 test_expect_success 'push --signed=1 is accepted' '
        prepare_dst &&
-       mkdir -p dst/.git/hooks &&
        test_must_fail git push --signed=1 dst noop ff +noff 2>err &&
        test_i18ngrep "the receiving end does not support" err
 '
 
 test_expect_success GPG 'no certificate for a signed push with no update' '
        prepare_dst &&
-       mkdir -p dst/.git/hooks &&
-       write_script dst/.git/hooks/post-receive <<-\EOF &&
+       test_hook -C dst post-receive <<-\EOF &&
        if test -n "${GIT_PUSH_CERT-}"
        then
                git cat-file blob $GIT_PUSH_CERT >../push-cert
@@ -96,9 +91,8 @@ test_expect_success GPG 'no certificate for a signed push with no update' '
 
 test_expect_success GPG 'signed push sends push certificate' '
        prepare_dst &&
-       mkdir -p dst/.git/hooks &&
        git -C dst config receive.certnonceseed sekrit &&
-       write_script dst/.git/hooks/post-receive <<-\EOF &&
+       test_hook -C dst post-receive <<-\EOF &&
        # discard the update list
        cat >/dev/null
        # record the push certificate
@@ -139,10 +133,9 @@ test_expect_success GPG 'signed push sends push certificate' '
 
 test_expect_success GPGSSH 'ssh signed push sends push certificate' '
        prepare_dst &&
-       mkdir -p dst/.git/hooks &&
        git -C dst config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" &&
        git -C dst config receive.certnonceseed sekrit &&
-       write_script dst/.git/hooks/post-receive <<-\EOF &&
+       test_hook -C dst post-receive <<-\EOF &&
        # discard the update list
        cat >/dev/null
        # record the push certificate
@@ -223,9 +216,8 @@ test_expect_success GPG 'inconsistent push options in signed push not allowed' '
 
 test_expect_success GPG 'fail without key and heed user.signingkey' '
        prepare_dst &&
-       mkdir -p dst/.git/hooks &&
        git -C dst config receive.certnonceseed sekrit &&
-       write_script dst/.git/hooks/post-receive <<-\EOF &&
+       test_hook -C dst post-receive <<-\EOF &&
        # discard the update list
        cat >/dev/null
        # record the push certificate
@@ -273,9 +265,8 @@ test_expect_success GPG 'fail without key and heed user.signingkey' '
 test_expect_success GPGSM 'fail without key and heed user.signingkey x509' '
        test_config gpg.format x509 &&
        prepare_dst &&
-       mkdir -p dst/.git/hooks &&
        git -C dst config receive.certnonceseed sekrit &&
-       write_script dst/.git/hooks/post-receive <<-\EOF &&
+       test_hook -C dst post-receive <<-\EOF &&
        # discard the update list
        cat >/dev/null
        # record the push certificate
@@ -326,10 +317,9 @@ test_expect_success GPGSM 'fail without key and heed user.signingkey x509' '
 test_expect_success GPGSSH 'fail without key and heed user.signingkey ssh' '
        test_config gpg.format ssh &&
        prepare_dst &&
-       mkdir -p dst/.git/hooks &&
        git -C dst config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" &&
        git -C dst config receive.certnonceseed sekrit &&
-       write_script dst/.git/hooks/post-receive <<-\EOF &&
+       test_hook -C dst post-receive <<-\EOF &&
        # discard the update list
        cat >/dev/null
        # record the push certificate
index 11d5ea54a9c621eed86d3a7d2e5a6c40da162ee8..9573a2655efb9d87e96bc69145d1676a619944dd 100755 (executable)
@@ -161,6 +161,17 @@ test_expect_success 'fetch --update-shallow' '
        )
 '
 
+test_expect_success 'fetch --update-shallow into a repo with submodules' '
+       test_config_global protocol.file.allow always &&
+
+       git init a-submodule &&
+       test_commit -C a-submodule foo &&
+       git init repo-with-sub &&
+       git -C repo-with-sub submodule add ../a-submodule a-submodule &&
+       git -C repo-with-sub commit -m "added submodule" &&
+       git -C repo-with-sub fetch --update-shallow ../shallow/.git refs/heads/*:refs/remotes/shallow/*
+'
+
 test_expect_success 'fetch --update-shallow (with fetch.writeCommitGraph)' '
        (
        cd shallow &&
index b0dbacf0b9b5ee8300368c1defe54cf87ce3ee05..37db3dec0c5b3939c9cb6f2e6f6e383c80045c87 100755 (executable)
@@ -42,7 +42,9 @@ test_expect_success 'setup remote repository' '
        git clone --bare test_repo test_repo.git &&
        cd test_repo.git &&
        git --bare update-server-info &&
-       mv hooks/post-update.sample hooks/post-update &&
+       test_hook --setup post-update <<-\EOF &&
+       exec git update-server-info
+       EOF
        ORIG_HEAD=$(git rev-parse --verify HEAD) &&
        cd - &&
        mv test_repo.git "$HTTPD_DOCUMENT_ROOT_PATH"
index 8ca50f8b18c1ce68b553efffd1daaa57b730de07..2f09ff4fac60e832ea86c4158740ce36e58d3132 100755 (executable)
@@ -96,18 +96,18 @@ test_expect_success 'create and delete remote branch' '
        test_must_fail git show-ref --verify refs/remotes/origin/dev
 '
 
-cat >"$HTTPD_DOCUMENT_ROOT_PATH/test_repo.git/hooks/update" <<EOF
-#!/bin/sh
-exit 1
-EOF
-chmod a+x "$HTTPD_DOCUMENT_ROOT_PATH/test_repo.git/hooks/update"
+test_expect_success 'setup rejected update hook' '
+       test_hook --setup -C "$HTTPD_DOCUMENT_ROOT_PATH/test_repo.git" update <<-\EOF &&
+       exit 1
+       EOF
 
-cat >exp <<EOF
-remote: error: hook declined to update refs/heads/dev2
-To http://127.0.0.1:$LIB_HTTPD_PORT/smart/test_repo.git
- ! [remote rejected] dev2 -> dev2 (hook declined)
-error: failed to push some refs to 'http://127.0.0.1:$LIB_HTTPD_PORT/smart/test_repo.git'
-EOF
+       cat >exp <<-EOF
+       remote: error: hook declined to update refs/heads/dev2
+       To http://127.0.0.1:$LIB_HTTPD_PORT/smart/test_repo.git
+        ! [remote rejected] dev2 -> dev2 (hook declined)
+       error: failed to push some refs to '\''http://127.0.0.1:$LIB_HTTPD_PORT/smart/test_repo.git'\''
+       EOF
+'
 
 test_expect_success 'rejected update prints status' '
        cd "$ROOT_PATH"/test_repo_clone &&
@@ -419,10 +419,7 @@ test_expect_success CMDLINE_LIMIT 'push 2000 tags over http' '
 '
 
 test_expect_success GPG 'push with post-receive to inspect certificate' '
-       (
-               cd "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git &&
-               mkdir -p hooks &&
-               write_script hooks/post-receive <<-\EOF &&
+       test_hook -C "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git post-receive <<-\EOF &&
                # discard the update list
                cat >/dev/null
                # record the push certificate
@@ -437,8 +434,9 @@ test_expect_success GPG 'push with post-receive to inspect certificate' '
                NONCE_STATUS=${GIT_PUSH_CERT_NONCE_STATUS-nononcestatus}
                NONCE=${GIT_PUSH_CERT_NONCE-nononce}
                E_O_F
-               EOF
-
+       EOF
+       (
+               cd "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git &&
                git config receive.certnonceseed sekrit &&
                git config receive.certnonceslop 30
        ) &&
index bfee461861e456b091ea4c68025a0127d09dbee6..70431122a40360c265dc28627c4208dc360c000c 100755 (executable)
@@ -162,16 +162,10 @@ test_expect_success 'atomic push obeys update hook preventing a branch to be pus
                test_commit two &&
                git push --mirror up
        ) &&
-       (
-               cd upstream &&
-               HOOKDIR="$(git rev-parse --git-dir)/hooks" &&
-               HOOK="$HOOKDIR/update" &&
-               mkdir -p "$HOOKDIR" &&
-               write_script "$HOOK" <<-\EOF
-                       # only allow update to main from now on
-                       test "$1" = "refs/heads/main"
-               EOF
-       ) &&
+       test_hook -C upstream update <<-\EOF &&
+       # only allow update to main from now on
+       test "$1" = "refs/heads/main"
+       EOF
        (
                cd workbench &&
                git checkout main &&
index faaa51ccc562545c18180410e68483019a80832d..1876fb34e51a09f8b3d7f6d82d174044c9a16c84 100755 (executable)
@@ -5,7 +5,7 @@ test_description='check quarantine of objects during push'
 
 test_expect_success 'create picky dest repo' '
        git init --bare dest.git &&
-       write_script dest.git/hooks/pre-receive <<-\EOF
+       test_hook --setup -C dest.git pre-receive <<-\EOF
        while read old new ref; do
                test "$(git log -1 --format=%s $new)" = reject && exit 1
        done
@@ -60,7 +60,7 @@ test_expect_success 'push to repo path with path separator (colon)' '
 
 test_expect_success 'updating a ref from quarantine is forbidden' '
        git init --bare update.git &&
-       write_script update.git/hooks/pre-receive <<-\EOF &&
+       test_hook -C update.git pre-receive <<-\EOF &&
        read old new refname
        git update-ref refs/heads/unrelated $new
        exit 1
index f11ff57e5499a1724841d27cd09c61e18108ce8f..6282728eaf3e7871d99fea48357298f6b14c9fd2 100755 (executable)
@@ -168,7 +168,7 @@ run_git_push_porcelain_output_test() {
        '
 
        test_expect_success "prepare pre-receive hook ($PROTOCOL)" '
-               write_script "$upstream/hooks/pre-receive" <<-EOF
+               test_hook --setup -C "$upstream" pre-receive <<-EOF
                exit 1
                EOF
        '
index 259203926a95d0342a87cff42e00976e66631798..f0d9cd584d3b1865490994f6ce85a7917e3bf129 100755 (executable)
@@ -25,16 +25,17 @@ test_expect_success 'setup repository' '
        git commit -m two
 '
 
+setup_post_update_server_info_hook () {
+       test_hook --setup -C "$1" post-update <<-\EOF &&
+       exec git update-server-info
+       EOF
+       git -C "$1" update-server-info
+}
+
 test_expect_success 'create http-accessible bare repository with loose objects' '
        cp -R .git "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
-       (cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
-        git config core.bare true &&
-        mkdir -p hooks &&
-        write_script "hooks/post-update" <<-\EOF &&
-        exec git update-server-info
-       EOF
-        hooks/post-update
-       ) &&
+       git -C "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" config core.bare true &&
+       setup_post_update_server_info_hook "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
        git remote add public "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
        git push public main:main
 '
@@ -62,13 +63,7 @@ test_expect_success 'create password-protected repository' '
 
 test_expect_success 'create empty remote repository' '
        git init --bare "$HTTPD_DOCUMENT_ROOT_PATH/empty.git" &&
-       (cd "$HTTPD_DOCUMENT_ROOT_PATH/empty.git" &&
-        mkdir -p hooks &&
-        write_script "hooks/post-update" <<-\EOF &&
-        exec git update-server-info
-       EOF
-        hooks/post-update
-       )
+       setup_post_update_server_info_hook "$HTTPD_DOCUMENT_ROOT_PATH/empty.git"
 '
 
 test_expect_success 'empty dumb HTTP repository has default hash algorithm' '
index 660f876eec2122f3b00e2dd087a03e2ffcd685e2..a11b20e378223ea30242e70d5befcfeed889a2ed 100755 (executable)
@@ -6,57 +6,66 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 
 . ./test-lib.sh
 
-# Setup hook that always succeeds
-HOOKDIR="$(git rev-parse --git-dir)/hooks"
-HOOK="$HOOKDIR/pre-push"
-mkdir -p "$HOOKDIR"
-write_script "$HOOK" <<EOF
-cat >/dev/null
-exit 0
-EOF
-
 test_expect_success 'setup' '
+       test_hook pre-push <<-\EOF &&
+       cat >actual
+       EOF
+
        git config push.default upstream &&
        git init --bare repo1 &&
        git remote add parent1 repo1 &&
        test_commit one &&
-       git push parent1 HEAD:foreign
+       cat >expect <<-EOF &&
+       HEAD $(git rev-parse HEAD) refs/heads/foreign $(test_oid zero)
+       EOF
+
+       test_when_finished "rm actual" &&
+       git push parent1 HEAD:foreign &&
+       test_cmp expect actual
 '
-write_script "$HOOK" <<EOF
-cat >/dev/null
-exit 1
-EOF
 
 COMMIT1="$(git rev-parse HEAD)"
 export COMMIT1
 
 test_expect_success 'push with failing hook' '
+       test_hook pre-push <<-\EOF &&
+       cat >actual &&
+       exit 1
+       EOF
+
        test_commit two &&
-       test_must_fail git push parent1 HEAD
+       cat >expect <<-EOF &&
+       HEAD $(git rev-parse HEAD) refs/heads/main $(test_oid zero)
+       EOF
+
+       test_when_finished "rm actual" &&
+       test_must_fail git push parent1 HEAD &&
+       test_cmp expect actual
 '
 
 test_expect_success '--no-verify bypasses hook' '
-       git push --no-verify parent1 HEAD
+       git push --no-verify parent1 HEAD &&
+       test_path_is_missing actual
 '
 
 COMMIT2="$(git rev-parse HEAD)"
 export COMMIT2
 
-write_script "$HOOK" <<'EOF'
-echo "$1" >actual
-echo "$2" >>actual
-cat >>actual
-EOF
-
-cat >expected <<EOF
-parent1
-repo1
-refs/heads/main $COMMIT2 refs/heads/foreign $COMMIT1
-EOF
-
 test_expect_success 'push with hook' '
+       test_hook --setup pre-push <<-\EOF &&
+       echo "$1" >actual
+       echo "$2" >>actual
+       cat >>actual
+       EOF
+
+       cat >expect <<-EOF &&
+       parent1
+       repo1
+       refs/heads/main $COMMIT2 refs/heads/foreign $COMMIT1
+       EOF
+
        git push parent1 main:foreign &&
-       diff expected actual
+       test_cmp expect actual
 '
 
 test_expect_success 'add a branch' '
@@ -67,49 +76,48 @@ test_expect_success 'add a branch' '
 COMMIT3="$(git rev-parse HEAD)"
 export COMMIT3
 
-cat >expected <<EOF
-parent1
-repo1
-refs/heads/other $COMMIT3 refs/heads/foreign $COMMIT2
-EOF
-
 test_expect_success 'push to default' '
+       cat >expect <<-EOF &&
+       parent1
+       repo1
+       refs/heads/other $COMMIT3 refs/heads/foreign $COMMIT2
+       EOF
        git push &&
-       diff expected actual
+       test_cmp expect actual
 '
 
-cat >expected <<EOF
-parent1
-repo1
-refs/tags/one $COMMIT1 refs/tags/tag1 $ZERO_OID
-HEAD~ $COMMIT2 refs/heads/prev $ZERO_OID
-EOF
-
 test_expect_success 'push non-branches' '
+       cat >expect <<-EOF &&
+       parent1
+       repo1
+       refs/tags/one $COMMIT1 refs/tags/tag1 $ZERO_OID
+       HEAD~ $COMMIT2 refs/heads/prev $ZERO_OID
+       EOF
+
        git push parent1 one:tag1 HEAD~:refs/heads/prev &&
-       diff expected actual
+       test_cmp expect actual
 '
 
-cat >expected <<EOF
-parent1
-repo1
-(delete) $ZERO_OID refs/heads/prev $COMMIT2
-EOF
-
 test_expect_success 'push delete' '
+       cat >expect <<-EOF &&
+       parent1
+       repo1
+       (delete) $ZERO_OID refs/heads/prev $COMMIT2
+       EOF
+
        git push parent1 :prev &&
-       diff expected actual
+       test_cmp expect actual
 '
 
-cat >expected <<EOF
-repo1
-repo1
-HEAD $COMMIT3 refs/heads/other $ZERO_OID
-EOF
-
 test_expect_success 'push to URL' '
+       cat >expect <<-EOF &&
+       repo1
+       repo1
+       HEAD $COMMIT3 refs/heads/other $ZERO_OID
+       EOF
+
        git push repo1 HEAD &&
-       diff expected actual
+       test_cmp expect actual
 '
 
 test_expect_success 'set up many-ref tests' '
@@ -124,7 +132,9 @@ test_expect_success 'set up many-ref tests' '
 '
 
 test_expect_success 'sigpipe does not cause pre-push hook failure' '
-       echo "exit 0" | write_script "$HOOK" &&
+       test_hook --clobber pre-push <<-\EOF &&
+       exit 0
+       EOF
        git push parent1 "refs/heads/b/*:refs/heads/b/*"
 '
 
index 20aef0018c2d1d1059096833121c9c2e7838ef1d..16edbcb900b33962f952a5016df2ce5a21e55c17 100755 (executable)
@@ -79,12 +79,10 @@ test_expect_success 'clone from hooks' '
        cd .. &&
        git init r1 &&
        cd r1 &&
-       cat >.git/hooks/pre-commit <<-\EOF &&
-       #!/bin/sh
+       test_hook pre-commit <<-\EOF &&
        git clone ../r0 ../r2
        exit 1
        EOF
-       chmod u+x .git/hooks/pre-commit &&
        : >file &&
        git add file &&
        test_must_fail git commit -m invoke-hook &&
index 4c72e197c4d7c17ba520a420e6f78bf5213b80bc..a3c9f51f7641075af840534a7c4e348c63c8a1d9 100755 (executable)
@@ -166,6 +166,85 @@ test_expect_success 'manual prefetch of missing objects' '
        test_line_count = 0 observed.oids
 '
 
+# create new commits in "src" repo to establish a history on file.4.txt
+# and push to "srv.bare".
+test_expect_success 'push new commits to server for file.4.txt' '
+       for x in a b c d e f
+       do
+               echo "Mod file.4.txt $x" >src/file.4.txt &&
+               if list_contains "a,b" "$x"; then
+                       printf "%10000s" X >>src/file.4.txt
+               fi &&
+               if list_contains "c,d" "$x"; then
+                       printf "%20000s" X >>src/file.4.txt
+               fi &&
+               git -C src add file.4.txt &&
+               git -C src commit -m "mod $x" || return 1
+       done &&
+       git -C src push -u srv main
+'
+
+# Do partial fetch to fetch smaller files; then verify that without --refetch
+# applying a new filter does not refetch missing large objects. Then use
+# --refetch to apply the new filter on existing commits. Test it under both
+# protocol v2 & v0.
+test_expect_success 'apply a different filter using --refetch' '
+       git -C pc1 fetch --filter=blob:limit=999 origin &&
+       git -C pc1 rev-list --quiet --objects --missing=print \
+               main..origin/main >observed &&
+       test_line_count = 4 observed &&
+
+       git -C pc1 fetch --filter=blob:limit=19999 --refetch origin &&
+       git -C pc1 rev-list --quiet --objects --missing=print \
+               main..origin/main >observed &&
+       test_line_count = 2 observed &&
+
+       git -c protocol.version=0 -C pc1 fetch --filter=blob:limit=29999 \
+               --refetch origin &&
+       git -C pc1 rev-list --quiet --objects --missing=print \
+               main..origin/main >observed &&
+       test_line_count = 0 observed
+'
+
+test_expect_success 'fetch --refetch works with a shallow clone' '
+       git clone --no-checkout --depth=1 --filter=blob:none "file://$(pwd)/srv.bare" pc1s &&
+       git -C pc1s rev-list --objects --missing=print HEAD >observed &&
+       test_line_count = 6 observed &&
+
+       GIT_TRACE=1 git -C pc1s fetch --filter=blob:limit=999 --refetch origin &&
+       git -C pc1s rev-list --objects --missing=print HEAD >observed &&
+       test_line_count = 6 observed
+'
+
+test_expect_success 'fetch --refetch triggers repacking' '
+       GIT_TRACE2_CONFIG_PARAMS=gc.autoPackLimit,maintenance.incremental-repack.auto &&
+       export GIT_TRACE2_CONFIG_PARAMS &&
+
+       GIT_TRACE2_EVENT="$PWD/trace1.event" \
+       git -C pc1 fetch --refetch origin &&
+       test_subcommand git maintenance run --auto --no-quiet <trace1.event &&
+       grep \"param\":\"gc.autopacklimit\",\"value\":\"1\" trace1.event &&
+       grep \"param\":\"maintenance.incremental-repack.auto\",\"value\":\"-1\" trace1.event &&
+
+       GIT_TRACE2_EVENT="$PWD/trace2.event" \
+       git -c protocol.version=0 \
+               -c gc.autoPackLimit=0 \
+               -c maintenance.incremental-repack.auto=1234 \
+               -C pc1 fetch --refetch origin &&
+       test_subcommand git maintenance run --auto --no-quiet <trace2.event &&
+       grep \"param\":\"gc.autopacklimit\",\"value\":\"0\" trace2.event &&
+       grep \"param\":\"maintenance.incremental-repack.auto\",\"value\":\"-1\" trace2.event &&
+
+       GIT_TRACE2_EVENT="$PWD/trace3.event" \
+       git -c protocol.version=0 \
+               -c gc.autoPackLimit=1234 \
+               -c maintenance.incremental-repack.auto=0 \
+               -C pc1 fetch --refetch origin &&
+       test_subcommand git maintenance run --auto --no-quiet <trace3.event &&
+       grep \"param\":\"gc.autopacklimit\",\"value\":\"1\" trace3.event &&
+       grep \"param\":\"maintenance.incremental-repack.auto\",\"value\":\"0\" trace3.event
+'
+
 test_expect_success 'partial clone with transfer.fsckobjects=1 works with submodules' '
        test_create_repo submodule &&
        test_commit -C submodule mycommit &&
@@ -227,7 +306,7 @@ test_expect_success 'use fsck before and after manually fetching a missing subtr
 
        # Auto-fetch all remaining trees and blobs with --missing=error
        git -C dst rev-list --missing=error --objects main >fetched_objects &&
-       test_line_count = 70 fetched_objects &&
+       test_line_count = 88 fetched_objects &&
 
        awk -f print_1.awk fetched_objects |
        xargs -n1 git -C dst cat-file -t >fetched_types &&
index 5691f27405c060293ea400b551e86dc21e7aee91..688433824934d89354669d920acd1fb06a5da725 100755 (executable)
@@ -29,6 +29,13 @@ test_expect_success 'setup' '
        )
 '
 
+# bare clone giving "srv.bare" for use as our server.
+test_expect_success 'setup bare clone for server' '
+       git clone --bare "file://$(pwd)/." srv.bare &&
+       git -C srv.bare config --local uploadpack.allowfilter 1 &&
+       git -C srv.bare config --local uploadpack.allowanysha1inwant 1
+'
+
 test_expect_success 'clone with --no-remote-submodules' '
        test_when_finished "rm -rf super_clone" &&
        git clone --recurse-submodules --no-remote-submodules "file://$pwd/." super_clone &&
@@ -66,4 +73,38 @@ test_expect_success 'clone with --single-branch' '
        )
 '
 
+# do basic partial clone from "srv.bare"
+# confirm partial clone was registered in the local config for super and sub.
+test_expect_success 'clone with --filter' '
+       git clone --recurse-submodules \
+               --filter blob:none --also-filter-submodules \
+               "file://$pwd/srv.bare" super_clone &&
+       test_cmp_config -C super_clone true remote.origin.promisor &&
+       test_cmp_config -C super_clone blob:none remote.origin.partialclonefilter &&
+       test_cmp_config -C super_clone/sub true remote.origin.promisor &&
+       test_cmp_config -C super_clone/sub blob:none remote.origin.partialclonefilter
+'
+
+# check that clone.filterSubmodules works (--also-filter-submodules can be
+# omitted)
+test_expect_success 'filters applied with clone.filterSubmodules' '
+       test_config_global clone.filterSubmodules true &&
+       git clone --recurse-submodules --filter blob:none \
+               "file://$pwd/srv.bare" super_clone2 &&
+       test_cmp_config -C super_clone2 true remote.origin.promisor &&
+       test_cmp_config -C super_clone2 blob:none remote.origin.partialclonefilter &&
+       test_cmp_config -C super_clone2/sub true remote.origin.promisor &&
+       test_cmp_config -C super_clone2/sub blob:none remote.origin.partialclonefilter
+'
+
+test_expect_success '--no-also-filter-submodules overrides clone.filterSubmodules=true' '
+       test_config_global clone.filterSubmodules true &&
+       git clone --recurse-submodules --filter blob:none \
+               --no-also-filter-submodules \
+               "file://$pwd/srv.bare" super_clone3 &&
+       test_cmp_config -C super_clone3 true remote.origin.promisor &&
+       test_cmp_config -C super_clone3 blob:none remote.origin.partialclonefilter &&
+       test_cmp_config -C super_clone3/sub false --default false remote.origin.promisor
+'
+
 test_done
index 468bd3e13e1e7d695c95dd06c201279d94ec00ef..6c8d4c6cf1c8e0f98e2a6cccfec798c19b1954a0 100755 (executable)
@@ -149,6 +149,21 @@ test_expect_success 'push with file:// using protocol v1' '
        grep "push< version 1" log
 '
 
+test_expect_success 'cloning branchless tagless but not refless remote' '
+       rm -rf server client &&
+
+       git -c init.defaultbranch=main init server &&
+       echo foo >server/foo.txt &&
+       git -C server add foo.txt &&
+       git -C server commit -m "message" &&
+       git -C server update-ref refs/notbranch/alsonottag HEAD &&
+       git -C server checkout --detach &&
+       git -C server branch -D main &&
+       git -C server symbolic-ref HEAD refs/heads/nonexistentbranch &&
+
+       git -c protocol.version=1 clone "file://$(pwd)/server" client
+'
+
 # Test protocol v1 with 'ssh://' transport
 #
 test_expect_success 'setup ssh wrapper' '
index 710f33e2aa0d1775c21c00a939d04cd129f5b3e5..00ce9aec234685bca8d16018862282290aa64201 100755 (executable)
@@ -619,7 +619,7 @@ test_expect_success 'usage: --negotiate-only without --negotiation-tip' '
        setup_negotiate_only "$SERVER" "$URI" &&
 
        cat >err.expect <<-\EOF &&
-       fatal: --negotiate-only needs one or more --negotiate-tip=*
+       fatal: --negotiate-only needs one or more --negotiation-tip=*
        EOF
 
        test_must_fail git -c protocol.version=2 -C client fetch \
@@ -628,6 +628,18 @@ test_expect_success 'usage: --negotiate-only without --negotiation-tip' '
        test_cmp err.expect err.actual
 '
 
+test_expect_success 'usage: --negotiate-only with --recurse-submodules' '
+       cat >err.expect <<-\EOF &&
+       fatal: options '\''--negotiate-only'\'' and '\''--recurse-submodules'\'' cannot be used together
+       EOF
+
+       test_must_fail git -c protocol.version=2 -C client fetch \
+               --negotiate-only \
+               --recurse-submodules \
+               origin 2>err.actual &&
+       test_cmp err.expect err.actual
+'
+
 test_expect_success 'file:// --negotiate-only' '
        SERVER="server" &&
        URI="file://$(pwd)/server" &&
index 86542c650e241976943ca58c5496cf03965c630e..e960049f647cfca4a18defaba7dde9d43c8f94ef 100755 (executable)
@@ -2,7 +2,6 @@
 
 test_description='git rev-list --max-count and --skip test'
 
-TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 test_expect_success 'setup' '
@@ -14,39 +13,39 @@ test_expect_success 'setup' '
 '
 
 test_expect_success 'no options' '
-    test $(git rev-list HEAD | wc -l) = 5
+       test_stdout_line_count = 5 git rev-list HEAD
 '
 
 test_expect_success '--max-count' '
-    test $(git rev-list HEAD --max-count=0 | wc -l) = 0 &&
-    test $(git rev-list HEAD --max-count=3 | wc -l) = 3 &&
-    test $(git rev-list HEAD --max-count=5 | wc -l) = 5 &&
-    test $(git rev-list HEAD --max-count=10 | wc -l) = 5
+       test_stdout_line_count = 0 git rev-list HEAD --max-count=0 &&
+       test_stdout_line_count = 3 git rev-list HEAD --max-count=3 &&
+       test_stdout_line_count = 5 git rev-list HEAD --max-count=5 &&
+       test_stdout_line_count = 5 git rev-list HEAD --max-count=10
 '
 
 test_expect_success '--max-count all forms' '
-    test $(git rev-list HEAD --max-count=1 | wc -l) = 1 &&
-    test $(git rev-list HEAD -1 | wc -l) = 1 &&
-    test $(git rev-list HEAD -n1 | wc -l) = 1 &&
-    test $(git rev-list HEAD -n 1 | wc -l) = 1
+       test_stdout_line_count = 1 git rev-list HEAD --max-count=1 &&
+       test_stdout_line_count = 1 git rev-list HEAD -1 &&
+       test_stdout_line_count = 1 git rev-list HEAD -n1 &&
+       test_stdout_line_count = 1 git rev-list HEAD -n 1
 '
 
 test_expect_success '--skip' '
-    test $(git rev-list HEAD --skip=0 | wc -l) = 5 &&
-    test $(git rev-list HEAD --skip=3 | wc -l) = 2 &&
-    test $(git rev-list HEAD --skip=5 | wc -l) = 0 &&
-    test $(git rev-list HEAD --skip=10 | wc -l) = 0
+       test_stdout_line_count = 5 git rev-list HEAD --skip=0 &&
+       test_stdout_line_count = 2 git rev-list HEAD --skip=3 &&
+       test_stdout_line_count = 0 git rev-list HEAD --skip=5 &&
+       test_stdout_line_count = 0 git rev-list HEAD --skip=10
 '
 
 test_expect_success '--skip --max-count' '
-    test $(git rev-list HEAD --skip=0 --max-count=0 | wc -l) = 0 &&
-    test $(git rev-list HEAD --skip=0 --max-count=10 | wc -l) = 5 &&
-    test $(git rev-list HEAD --skip=3 --max-count=0 | wc -l) = 0 &&
-    test $(git rev-list HEAD --skip=3 --max-count=1 | wc -l) = 1 &&
-    test $(git rev-list HEAD --skip=3 --max-count=2 | wc -l) = 2 &&
-    test $(git rev-list HEAD --skip=3 --max-count=10 | wc -l) = 2 &&
-    test $(git rev-list HEAD --skip=5 --max-count=10 | wc -l) = 0 &&
-    test $(git rev-list HEAD --skip=10 --max-count=10 | wc -l) = 0
+       test_stdout_line_count = 0 git rev-list HEAD --skip=0 --max-count=0 &&
+       test_stdout_line_count = 5 git rev-list HEAD --skip=0 --max-count=10 &&
+       test_stdout_line_count = 0 git rev-list HEAD --skip=3 --max-count=0 &&
+       test_stdout_line_count = 1 git rev-list HEAD --skip=3 --max-count=1 &&
+       test_stdout_line_count = 2 git rev-list HEAD --skip=3 --max-count=2 &&
+       test_stdout_line_count = 2 git rev-list HEAD --skip=3 --max-count=10 &&
+       test_stdout_line_count = 0 git rev-list HEAD --skip=5 --max-count=10 &&
+       test_stdout_line_count = 0 git rev-list HEAD --skip=10 --max-count=10
 '
 
 test_done
index aebe4b69e13ea56444dc760cb1b6058702f2d241..6f3e5439771fa62f3b3e308ae878fa2e08a08107 100755 (executable)
@@ -58,7 +58,7 @@ EOF
 
 test_expect_success '--left-right' '
        git rev-list --left-right B...C > actual &&
-       git name-rev --stdin --name-only --refs="*tags/*" \
+       git name-rev --annotate-stdin --name-only --refs="*tags/*" \
                < actual > actual.named &&
        test_cmp expect actual.named
 '
@@ -78,14 +78,14 @@ EOF
 
 test_expect_success '--cherry-pick bar does not come up empty' '
        git rev-list --left-right --cherry-pick B...C -- bar > actual &&
-       git name-rev --stdin --name-only --refs="*tags/*" \
+       git name-rev --annotate-stdin --name-only --refs="*tags/*" \
                < actual > actual.named &&
        test_cmp expect actual.named
 '
 
 test_expect_success 'bar does not come up empty' '
        git rev-list --left-right B...C -- bar > actual &&
-       git name-rev --stdin --name-only --refs="*tags/*" \
+       git name-rev --annotate-stdin --name-only --refs="*tags/*" \
                < actual > actual.named &&
        test_cmp expect actual.named
 '
@@ -97,14 +97,14 @@ EOF
 
 test_expect_success '--cherry-pick bar does not come up empty (II)' '
        git rev-list --left-right --cherry-pick F...E -- bar > actual &&
-       git name-rev --stdin --name-only --refs="*tags/*" \
+       git name-rev --annotate-stdin --name-only --refs="*tags/*" \
                < actual > actual.named &&
        test_cmp expect actual.named
 '
 
 test_expect_success 'name-rev multiple --refs combine inclusive' '
        git rev-list --left-right --cherry-pick F...E -- bar >actual &&
-       git name-rev --stdin --name-only --refs="*tags/F" --refs="*tags/E" \
+       git name-rev --annotate-stdin --name-only --refs="*tags/F" --refs="*tags/E" \
                <actual >actual.named &&
        test_cmp expect actual.named
 '
@@ -116,7 +116,7 @@ EOF
 test_expect_success 'name-rev --refs excludes non-matched patterns' '
        git rev-list --left-right --right-only --cherry-pick F...E -- bar >>expect &&
        git rev-list --left-right --cherry-pick F...E -- bar >actual &&
-       git name-rev --stdin --name-only --refs="*tags/F" \
+       git name-rev --annotate-stdin --name-only --refs="*tags/F" \
                <actual >actual.named &&
        test_cmp expect actual.named
 '
@@ -128,14 +128,14 @@ EOF
 test_expect_success 'name-rev --exclude excludes matched patterns' '
        git rev-list --left-right --right-only --cherry-pick F...E -- bar >>expect &&
        git rev-list --left-right --cherry-pick F...E -- bar >actual &&
-       git name-rev --stdin --name-only --refs="*tags/*" --exclude="*E" \
+       git name-rev --annotate-stdin --name-only --refs="*tags/*" --exclude="*E" \
                <actual >actual.named &&
        test_cmp expect actual.named
 '
 
 test_expect_success 'name-rev --no-refs clears the refs list' '
        git rev-list --left-right --cherry-pick F...E -- bar >expect &&
-       git name-rev --stdin --name-only --refs="*tags/F" --refs="*tags/E" --no-refs --refs="*tags/G" \
+       git name-rev --annotate-stdin --name-only --refs="*tags/F" --refs="*tags/E" --no-refs --refs="*tags/G" \
                <expect >actual &&
        test_cmp expect actual
 '
@@ -149,7 +149,7 @@ EOF
 
 test_expect_success '--cherry-mark' '
        git rev-list --cherry-mark F...E -- bar > actual &&
-       git name-rev --stdin --name-only --refs="*tags/*" \
+       git name-rev --annotate-stdin --name-only --refs="*tags/*" \
                < actual > actual.named &&
        test_cmp expect actual.named
 '
@@ -163,7 +163,7 @@ EOF
 
 test_expect_success '--cherry-mark --left-right' '
        git rev-list --cherry-mark --left-right F...E -- bar > actual &&
-       git name-rev --stdin --name-only --refs="*tags/*" \
+       git name-rev --annotate-stdin --name-only --refs="*tags/*" \
                < actual > actual.named &&
        test_cmp expect actual.named
 '
@@ -174,14 +174,14 @@ EOF
 
 test_expect_success '--cherry-pick --right-only' '
        git rev-list --cherry-pick --right-only F...E -- bar > actual &&
-       git name-rev --stdin --name-only --refs="*tags/*" \
+       git name-rev --annotate-stdin --name-only --refs="*tags/*" \
                < actual > actual.named &&
        test_cmp expect actual.named
 '
 
 test_expect_success '--cherry-pick --left-only' '
        git rev-list --cherry-pick --left-only E...F -- bar > actual &&
-       git name-rev --stdin --name-only --refs="*tags/*" \
+       git name-rev --annotate-stdin --name-only --refs="*tags/*" \
                < actual > actual.named &&
        test_cmp expect actual.named
 '
@@ -193,7 +193,7 @@ EOF
 
 test_expect_success '--cherry' '
        git rev-list --cherry F...E -- bar > actual &&
-       git name-rev --stdin --name-only --refs="*tags/*" \
+       git name-rev --annotate-stdin --name-only --refs="*tags/*" \
                < actual > actual.named &&
        test_cmp expect actual.named
 '
index 4f7fa8b6c037bd45b2b4a6836609e35b820cbce6..de1e87f1621d5db8c3730662731fdd67e1dffba7 100755 (executable)
@@ -12,17 +12,18 @@ note () {
 }
 
 unnote () {
-       git name-rev --tags --stdin | sed -e "s|$OID_REGEX (tags/\([^)]*\)) |\1 |g"
+       test_when_finished "rm -f tmp" &&
+       git name-rev --tags --annotate-stdin >tmp &&
+       sed -e "s|$OID_REGEX (tags/\([^)]*\)) |\1 |g" <tmp
 }
 
 #
-# Create a test repo with interesting commit graph:
+# Create a test repo with an interesting commit graph:
 #
-# A--B----------G--H--I--K--L
-#  \  \           /     /
-#   \  \         /     /
-#    C------E---F     J
-#        \_/
+# A-----B-----G--H--I--K--L
+#  \     \      /     /
+#   \     \    /     /
+#    C--D--E--F     J
 #
 # The commits are laid out from left-to-right starting with
 # the root commit A and terminating at the tip commit L.
@@ -112,8 +113,8 @@ check_outcome () {
        shift &&
        param="$*" &&
        test_expect_$outcome "log $param" '
-               git log --pretty="$FMT" --parents $param |
-               unnote >actual &&
+               git log --pretty="$FMT" --parents $param >out &&
+               unnote >actual <out &&
                sed -e "s/^.*   \([^ ]*\) .*/\1/" >check <actual &&
                test_cmp expect check
        '
@@ -142,11 +143,18 @@ check_result 'I B A' --author-date-order -- file
 check_result 'H' --first-parent -- another-file
 check_result 'H' --first-parent --topo-order -- another-file
 
+check_result 'L K I H G B A' --first-parent L
+check_result 'F E D C' --exclude-first-parent-only F ^L
+check_result '' F ^L
+check_result 'L K I H G J' L ^F
+check_result 'L K I H G B J' --exclude-first-parent-only L ^F
+check_result 'L K I H G B' --exclude-first-parent-only --first-parent L ^F
+
 check_result 'E C B A' --full-history E -- lost
 test_expect_success 'full history simplification without parent' '
        printf "%s\n" E C B A >expect &&
-       git log --pretty="$FMT" --full-history E -- lost |
-       unnote >actual &&
+       git log --pretty="$FMT" --full-history E -- lost >out &&
+       unnote >actual <out &&
        sed -e "s/^.*   \([^ ]*\) .*/\1/" >check <actual &&
        test_cmp expect check
 '
index b13e8a52a93a4e96cde54c5076c19960a4d41a2c..833205125abf5a2673ae0cbede62653fbfd151c8 100755 (executable)
@@ -122,6 +122,8 @@ format_and_save_expect () {
        sed -e 's/Z$//' >expect
 }
 
+HASH_MESSAGE="The bundle uses this hash algorithm: $GIT_DEFAULT_HASH"
+
 #            (C)   (D, pull/1/head, topic/1)
 #             o --- o
 #            /       \                              (L)
@@ -194,11 +196,12 @@ test_expect_success 'create bundle from special rev: main^!' '
 
        git bundle verify special-rev.bdl |
                make_user_friendly_and_stable_output >actual &&
-       format_and_save_expect <<-\EOF &&
+       format_and_save_expect <<-EOF &&
        The bundle contains this ref:
        <COMMIT-P> refs/heads/main
        The bundle requires this ref:
        <COMMIT-O> Z
+       $HASH_MESSAGE
        EOF
        test_cmp expect actual &&
 
@@ -215,12 +218,13 @@ test_expect_success 'create bundle with --max-count option' '
 
        git bundle verify max-count.bdl |
                make_user_friendly_and_stable_output >actual &&
-       format_and_save_expect <<-\EOF &&
+       format_and_save_expect <<-EOF &&
        The bundle contains these 2 refs:
        <COMMIT-P> refs/heads/main
        <TAG-1> refs/tags/v1
        The bundle requires this ref:
        <COMMIT-O> Z
+       $HASH_MESSAGE
        EOF
        test_cmp expect actual &&
 
@@ -240,7 +244,7 @@ test_expect_success 'create bundle with --since option' '
 
        git bundle verify since.bdl |
                make_user_friendly_and_stable_output >actual &&
-       format_and_save_expect <<-\EOF &&
+       format_and_save_expect <<-EOF &&
        The bundle contains these 5 refs:
        <COMMIT-P> refs/heads/main
        <COMMIT-N> refs/heads/release
@@ -250,6 +254,7 @@ test_expect_success 'create bundle with --since option' '
        The bundle requires these 2 refs:
        <COMMIT-M> Z
        <COMMIT-K> Z
+       $HASH_MESSAGE
        EOF
        test_cmp expect actual &&
 
@@ -267,11 +272,12 @@ test_expect_success 'create bundle 1 - no prerequisites' '
        EOF
        git bundle create stdin-1.bdl --stdin <input &&
 
-       cat >expect <<-\EOF &&
+       format_and_save_expect <<-EOF &&
        The bundle contains these 2 refs:
        <COMMIT-D> refs/heads/topic/1
        <COMMIT-H> refs/heads/topic/2
        The bundle records a complete history.
+       $HASH_MESSAGE
        EOF
 
        # verify bundle, which has no prerequisites
@@ -308,13 +314,14 @@ test_expect_success 'create bundle 2 - has prerequisites' '
                --stdin \
                release <input &&
 
-       format_and_save_expect <<-\EOF &&
+       format_and_save_expect <<-EOF &&
        The bundle contains this ref:
        <COMMIT-N> refs/heads/release
        The bundle requires these 3 refs:
        <COMMIT-D> Z
        <COMMIT-E> Z
        <COMMIT-G> Z
+       $HASH_MESSAGE
        EOF
 
        git bundle verify 2.bdl |
@@ -367,13 +374,14 @@ test_expect_success 'create bundle 3 - two refs, same object' '
                --stdin \
                main HEAD <input &&
 
-       format_and_save_expect <<-\EOF &&
+       format_and_save_expect <<-EOF &&
        The bundle contains these 2 refs:
        <COMMIT-P> refs/heads/main
        <COMMIT-P> HEAD
        The bundle requires these 2 refs:
        <COMMIT-M> Z
        <COMMIT-K> Z
+       $HASH_MESSAGE
        EOF
 
        git bundle verify 3.bdl |
@@ -409,12 +417,13 @@ test_expect_success 'create bundle 4 - with tags' '
                --stdin \
                --all <input &&
 
-       cat >expect <<-\EOF &&
+       cat >expect <<-EOF &&
        The bundle contains these 3 refs:
        <TAG-1> refs/tags/v1
        <TAG-2> refs/tags/v2
        <TAG-3> refs/tags/v3
        The bundle records a complete history.
+       $HASH_MESSAGE
        EOF
 
        git bundle verify 4.bdl |
@@ -475,4 +484,79 @@ test_expect_success 'clone from bundle' '
        test_cmp expect actual
 '
 
+test_expect_success 'unfiltered bundle with --objects' '
+       git bundle create all-objects.bdl \
+               --all --objects &&
+       git bundle create all.bdl \
+               --all &&
+
+       # Compare the headers of these files.
+       sed -n -e "/^$/q" -e "p" all.bdl >expect &&
+       sed -n -e "/^$/q" -e "p" all-objects.bdl >actual &&
+       test_cmp expect actual
+'
+
+for filter in "blob:none" "tree:0" "tree:1" "blob:limit=100"
+do
+       test_expect_success "filtered bundle: $filter" '
+               test_when_finished rm -rf .git/objects/pack cloned unbundled &&
+               git bundle create partial.bdl \
+                       --all \
+                       --filter=$filter &&
+
+               git bundle verify partial.bdl >unfiltered &&
+               make_user_friendly_and_stable_output <unfiltered >actual &&
+
+               cat >expect <<-EOF &&
+               The bundle contains these 10 refs:
+               <COMMIT-P> refs/heads/main
+               <COMMIT-N> refs/heads/release
+               <COMMIT-D> refs/heads/topic/1
+               <COMMIT-H> refs/heads/topic/2
+               <COMMIT-D> refs/pull/1/head
+               <COMMIT-G> refs/pull/2/head
+               <TAG-1> refs/tags/v1
+               <TAG-2> refs/tags/v2
+               <TAG-3> refs/tags/v3
+               <COMMIT-P> HEAD
+               The bundle records a complete history.
+               $HASH_MESSAGE
+               The bundle uses this filter: $filter
+               EOF
+               test_cmp expect actual &&
+
+               test_config uploadpack.allowfilter 1 &&
+               test_config uploadpack.allowanysha1inwant 1 &&
+               git clone --no-local --filter=$filter --bare "file://$(pwd)" cloned &&
+
+               git init unbundled &&
+               git -C unbundled bundle unbundle ../partial.bdl >ref-list.txt &&
+               ls unbundled/.git/objects/pack/pack-*.promisor >promisor &&
+               test_line_count = 1 promisor &&
+
+               # Count the same number of reachable objects.
+               reflist=$(git for-each-ref --format="%(objectname)") &&
+               git rev-list --objects --filter=$filter --missing=allow-any \
+                       $reflist >expect &&
+               for repo in cloned unbundled
+               do
+                       git -C $repo rev-list --objects --missing=allow-any \
+                               $reflist >actual &&
+                       test_cmp expect actual || return 1
+               done
+       '
+done
+
+# NEEDSWORK: 'git clone --bare' should be able to clone from a filtered
+# bundle, but that requires a change to promisor/filter config options.
+# For now, we fail gracefully with a helpful error. This behavior can be
+# changed in the future to succeed as much as possible.
+test_expect_success 'cloning from filtered bundle has useful error' '
+       git bundle create partial.bdl \
+               --all \
+               --filter=blob:none &&
+       test_must_fail git clone --bare partial.bdl partial 2>err &&
+       grep "cannot clone from filtered bundle" err
+'
+
 test_done
index 1be85d064e7612526a66f0f642a424ed1da12f89..5382e5d21620aea6bd74fdd4a84fb14f0ac644dc 100755 (executable)
@@ -278,6 +278,51 @@ test_expect_success '"git bisect run" with more complex "git bisect start"' '
        git bisect reset
 '
 
+test_expect_success 'bisect run accepts exit code 126 as bad' '
+       test_when_finished "git bisect reset" &&
+       write_script test_script.sh <<-\EOF &&
+       ! grep Another hello || exit 126 >/dev/null
+       EOF
+       git bisect start &&
+       git bisect good $HASH1 &&
+       git bisect bad $HASH4 &&
+       git bisect run ./test_script.sh >my_bisect_log.txt &&
+       grep "$HASH3 is the first bad commit" my_bisect_log.txt
+'
+
+test_expect_success POSIXPERM 'bisect run fails with non-executable test script' '
+       test_when_finished "git bisect reset" &&
+       >not-executable.sh &&
+       chmod -x not-executable.sh &&
+       git bisect start &&
+       git bisect good $HASH1 &&
+       git bisect bad $HASH4 &&
+       test_must_fail git bisect run ./not-executable.sh >my_bisect_log.txt &&
+       ! grep "is the first bad commit" my_bisect_log.txt
+'
+
+test_expect_success 'bisect run accepts exit code 127 as bad' '
+       test_when_finished "git bisect reset" &&
+       write_script test_script.sh <<-\EOF &&
+       ! grep Another hello || exit 127 >/dev/null
+       EOF
+       git bisect start &&
+       git bisect good $HASH1 &&
+       git bisect bad $HASH4 &&
+       git bisect run ./test_script.sh >my_bisect_log.txt &&
+       grep "$HASH3 is the first bad commit" my_bisect_log.txt
+'
+
+test_expect_success 'bisect run fails with missing test script' '
+       test_when_finished "git bisect reset" &&
+       rm -f does-not-exist.sh &&
+       git bisect start &&
+       git bisect good $HASH1 &&
+       git bisect bad $HASH4 &&
+       test_must_fail git bisect run ./does-not-exist.sh >my_bisect_log.txt &&
+       ! grep "is the first bad commit" my_bisect_log.txt
+'
+
 # $HASH1 is good, $HASH5 is bad, we skip $HASH3
 # but $HASH4 is good,
 # so we should find $HASH5 as the first bad commit
index 6f0902b86383191511116ee4fc5406e9dac6fb2e..cf0195e8263c6fdc25977f421252c41238f03419 100755 (executable)
@@ -17,8 +17,13 @@ test_expect_success 'setup unexpected non-blob entry' '
        broken_tree="$(git hash-object -w --literally -t tree broken-tree)"
 '
 
-test_expect_failure 'traverse unexpected non-blob entry (lone)' '
-       test_must_fail git rev-list --objects $broken_tree
+test_expect_success !SANITIZE_LEAK 'TODO (should fail!): traverse unexpected non-blob entry (lone)' '
+       sed "s/Z$//" >expect <<-EOF &&
+       $broken_tree Z
+       $tree foo
+       EOF
+       git rev-list --objects $broken_tree >actual &&
+       test_cmp expect actual
 '
 
 test_expect_success 'traverse unexpected non-blob entry (seen)' '
@@ -116,8 +121,8 @@ test_expect_success 'setup unexpected non-blob tag' '
        tag=$(git hash-object -w --literally -t tag broken-tag)
 '
 
-test_expect_failure 'traverse unexpected non-blob tag (lone)' '
-       test_must_fail git rev-list --objects $tag
+test_expect_success !SANITIZE_LEAK 'TODO (should fail!): traverse unexpected non-blob tag (lone)' '
+       git rev-list --objects $tag
 '
 
 test_expect_success 'traverse unexpected non-blob tag (seen)' '
index e07b6070e0e7a546118c2f4744b9ab4e9faeff9a..90ff14164009d0e3dcdfeaf0a41763c39d2eab23 100755 (executable)
@@ -23,7 +23,8 @@ note () {
 }
 
 unnote () {
-       git name-rev --tags --stdin | sed -e "s|$OID_REGEX (tags/\([^)]*\))\([  ]\)|\1\2|g"
+       git name-rev --tags --annotate-stdin | \
+       sed -e "s|$OID_REGEX (tags/\([^)]*\))\([        ]\)|\1\2|g"
 }
 
 test_expect_success setup '
index d8af2bb9d2b876c3277d1211468ce4717b83697e..9a35e783a757b6fe9800ce475e65e73b880708c7 100755 (executable)
@@ -270,7 +270,7 @@ test_expect_success 'name-rev --all' '
        test_cmp expect actual
 '
 
-test_expect_success 'name-rev --stdin' '
+test_expect_success 'name-rev --annotate-stdin' '
        >expect.unsorted &&
        for rev in $(git rev-list --all)
        do
@@ -278,11 +278,16 @@ test_expect_success 'name-rev --stdin' '
                echo "$rev ($name)" >>expect.unsorted || return 1
        done &&
        sort <expect.unsorted >expect &&
-       git rev-list --all | git name-rev --stdin >actual.unsorted &&
+       git rev-list --all | git name-rev --annotate-stdin >actual.unsorted &&
        sort <actual.unsorted >actual &&
        test_cmp expect actual
 '
 
+test_expect_success 'name-rev --stdin deprecated' "
+       git rev-list --all | git name-rev --stdin 2>actual &&
+       grep -E 'warning: --stdin is deprecated' actual
+"
+
 test_expect_success 'describe --contains with the exact tags' '
        echo "A^0" >expect &&
        tag_object=$(git rev-parse refs/tags/A) &&
@@ -483,6 +488,124 @@ test_expect_success 'name-rev covers all conditions while looking at parents' '
        )
 '
 
+# A-B-C-D-E-main
+#
+# Where C has a non-monotonically increasing commit timestamp w.r.t. other
+# commits
+test_expect_success 'non-monotonic commit dates setup' '
+       UNIX_EPOCH_ZERO="@0 +0000" &&
+       git init non-monotonic &&
+       test_commit -C non-monotonic A &&
+       test_commit -C non-monotonic --no-tag B &&
+       test_commit -C non-monotonic --no-tag --date "$UNIX_EPOCH_ZERO" C &&
+       test_commit -C non-monotonic D &&
+       test_commit -C non-monotonic E
+'
+
+test_expect_success 'name-rev with commitGraph handles non-monotonic timestamps' '
+       test_config -C non-monotonic core.commitGraph true &&
+       (
+               cd non-monotonic &&
+
+               git commit-graph write --reachable &&
+
+               echo "main~3 tags/D~2" >expect &&
+               git name-rev --tags main~3 >actual &&
+
+               test_cmp expect actual
+       )
+'
+
+test_expect_success 'name-rev --all works with non-monotonic timestamps' '
+       test_config -C non-monotonic core.commitGraph false &&
+       (
+               cd non-monotonic &&
+
+               rm -rf .git/info/commit-graph* &&
+
+               cat >tags <<-\EOF &&
+               tags/E
+               tags/D
+               tags/D~1
+               tags/D~2
+               tags/A
+               EOF
+
+               git log --pretty=%H >revs &&
+
+               paste -d" " revs tags | sort >expect &&
+
+               git name-rev --tags --all | sort >actual &&
+               test_cmp expect actual
+       )
+'
+
+test_expect_success 'name-rev --annotate-stdin works with non-monotonic timestamps' '
+       test_config -C non-monotonic core.commitGraph false &&
+       (
+               cd non-monotonic &&
+
+               rm -rf .git/info/commit-graph* &&
+
+               cat >expect <<-\EOF &&
+               E
+               D
+               D~1
+               D~2
+               A
+               EOF
+
+               git log --pretty=%H >revs &&
+               git name-rev --tags --annotate-stdin --name-only <revs >actual &&
+               test_cmp expect actual
+       )
+'
+
+test_expect_success 'name-rev --all works with commitGraph' '
+       test_config -C non-monotonic core.commitGraph true &&
+       (
+               cd non-monotonic &&
+
+               git commit-graph write --reachable &&
+
+               cat >tags <<-\EOF &&
+               tags/E
+               tags/D
+               tags/D~1
+               tags/D~2
+               tags/A
+               EOF
+
+               git log --pretty=%H >revs &&
+
+               paste -d" " revs tags | sort >expect &&
+
+               git name-rev --tags --all | sort >actual &&
+               test_cmp expect actual
+       )
+'
+
+test_expect_success 'name-rev --annotate-stdin works with commitGraph' '
+       test_config -C non-monotonic core.commitGraph true &&
+       (
+               cd non-monotonic &&
+
+               git commit-graph write --reachable &&
+
+               cat >expect <<-\EOF &&
+               E
+               D
+               D~1
+               D~2
+               A
+               EOF
+
+               git log --pretty=%H >revs &&
+               git name-rev --tags --annotate-stdin --name-only <revs >actual &&
+               test_cmp expect actual
+       )
+'
+
 #               B
 #               o
 #                \
index eaf48e941e2a3934fde54ac9bdc22f96a7a035cd..b8735c6db4d7c9cc556231a5b0dab091f2f2eb61 100755 (executable)
@@ -108,8 +108,13 @@ test_expect_success 'refuse to merge binary files' '
        printf "\0\0" >binary-file &&
        git add binary-file &&
        git commit -m binary2 &&
-       test_must_fail git merge F >merge.out 2>merge.err &&
-       grep "Cannot merge binary files: binary-file (HEAD vs. F)" merge.err
+       if test "$GIT_TEST_MERGE_ALGORITHM" = ort
+       then
+               test_must_fail git merge F >merge_output
+       else
+               test_must_fail git merge F 2>merge_output
+       fi &&
+       grep "Cannot merge binary files: binary-file (HEAD vs. F)" merge_output
 '
 
 test_expect_success 'mark rename/delete as unmerged' '
index 57e6af5eaa09e52e9f867c957e2117cb66c46e4b..99abefd44b96e6528900bb672ba7de38c6bb9135 100755 (executable)
@@ -221,8 +221,13 @@ test_expect_success 'binary files with union attribute' '
        printf "two\0" >bin.txt &&
        git commit -am two &&
 
-       test_must_fail git merge bin-main 2>stderr &&
-       grep -i "warning.*cannot merge.*HEAD vs. bin-main" stderr
+       if test "$GIT_TEST_MERGE_ALGORITHM" = ort
+       then
+               test_must_fail git merge bin-main >output
+       else
+               test_must_fail git merge bin-main 2>output
+       fi &&
+       grep -i "warning.*cannot merge.*HEAD vs. bin-main" output
 '
 
 test_done
index 8e6241f92e6a6c10b8686900bf1ed61c2c96d4d3..0753fc95f45efb642543f9f23191d3430d4d6cde 100755 (executable)
@@ -43,14 +43,9 @@ test_expect_success resolve '
        rm -f a* m* &&
        git reset --hard anchor &&
 
-       if git merge -s resolve main
-       then
-               echo Oops, should not have succeeded
-               false
-       else
-               git ls-files -s >current &&
-               test_cmp expect current
-       fi
+       test_must_fail git merge -s resolve main &&
+       git ls-files -s >current &&
+       test_cmp expect current
 '
 
 test_expect_success recursive '
@@ -58,14 +53,9 @@ test_expect_success recursive '
        rm -f a* m* &&
        git reset --hard anchor &&
 
-       if git merge -s recursive main
-       then
-               echo Oops, should not have succeeded
-               false
-       else
-               git ls-files -s >current &&
-               test_cmp expect current
-       fi
+       test_must_fail git merge -s recursive main &&
+       git ls-files -s >current &&
+       test_cmp expect current
 '
 
 test_done
index 5b81a130e9c45086a8bb618d8b8eeed16324ad20..479db32cd629c1b118eb892ee541700fb9100afd 100755 (executable)
@@ -4421,14 +4421,14 @@ test_setup_12c1 () {
 
                git checkout A &&
                git mv node2/ node1/ &&
-               for i in `git ls-files`; do echo side A >>$i; done &&
+               for i in $(git ls-files); do echo side A >>$i; done &&
                git add -u &&
                test_tick &&
                git commit -m "A" &&
 
                git checkout B &&
                git mv node1/ node2/ &&
-               for i in `git ls-files`; do echo side B >>$i; done &&
+               for i in $(git ls-files); do echo side B >>$i; done &&
                git add -u &&
                test_tick &&
                git commit -m "B"
@@ -4511,7 +4511,7 @@ test_setup_12c2 () {
 
                git checkout A &&
                git mv node2/ node1/ &&
-               for i in `git ls-files`; do echo side A >>$i; done &&
+               for i in $(git ls-files); do echo side A >>$i; done &&
                git add -u &&
                echo leaf5 >node1/leaf5 &&
                git add node1/leaf5 &&
@@ -4520,7 +4520,7 @@ test_setup_12c2 () {
 
                git checkout B &&
                git mv node1/ node2/ &&
-               for i in `git ls-files`; do echo side B >>$i; done &&
+               for i in $(git ls-files); do echo side B >>$i; done &&
                git add -u &&
                echo leaf6 >node2/leaf6 &&
                git add node2/leaf6 &&
@@ -4759,7 +4759,7 @@ test_setup_12f () {
                echo g >dir/subdir/tweaked/g &&
                echo h >dir/subdir/tweaked/h &&
                test_seq 20 30 >dir/subdir/tweaked/Makefile &&
-               for i in `test_seq 1 88`; do
+               for i in $(test_seq 1 88); do
                        echo content $i >dir/unchanged/file_$i
                done &&
                git add . &&
index 7e8bf497f821da35e795fcc2d7b23ac0291c7106..142c9aaabc5309078e38cc01607f821520f965fc 100755 (executable)
@@ -112,7 +112,7 @@ test_expect_success 'conflicting entries written to worktree even if sparse' '
        )
 '
 
-test_expect_merge_algorithm failure success 'present-despite-SKIP_WORKTREE handled reasonably' '
+test_expect_success 'present-despite-SKIP_WORKTREE handled reasonably' '
        test_setup_numerals in_the_way &&
        (
                cd numerals_in_the_way &&
@@ -132,26 +132,13 @@ test_expect_merge_algorithm failure success 'present-despite-SKIP_WORKTREE handl
 
                test_must_fail git merge -s recursive B^0 &&
 
-               git ls-files -t >index_files &&
-               test_cmp expected-index index_files &&
+               test_path_is_missing .git/MERGE_HEAD &&
 
-               test_path_is_file README &&
                test_path_is_file numerals &&
 
-               test_cmp expected-merge numerals &&
-
-               # There should still be a file with "foobar" in it
-               grep foobar * &&
-
-               # 5 other files:
-               #   * expected-merge
-               #   * expected-index
-               #   * index_files
-               #   * others
-               #   * whatever name was given to the numerals file that had
-               #     "foobar" in it
-               git ls-files -o >others &&
-               test_line_count = 5 others
+               # numerals should still have "foobar" in it
+               echo foobar >expect &&
+               test_cmp expect numerals
        )
 '
 
index 035edc40b1ebba46305fb555c903d8b44220f8de..f2bc8a7d2a20f4b6acf19b72f03defb4fa667bbb 100755 (executable)
@@ -697,4 +697,71 @@ test_expect_success 'caching renames only on upstream side, part 2' '
        )
 '
 
+#
+# The following testcase just creates two simple renames (slightly modified
+# on both sides but without conflicting changes), and a directory full of
+# files that are otherwise uninteresting.  The setup is as follows:
+#
+#   base:     unrelated/<BUNCH OF FILES>
+#             numbers
+#             values
+#   upstream: modify: numbers
+#             modify: values
+#   topic:    add: unrelated/foo
+#             modify: numbers
+#             modify: values
+#             rename: numbers -> sequence
+#             rename: values -> progression
+#
+# This is a trivial rename case, but we're curious what happens with a very
+# low renameLimit interacting with the restart optimization trying to notice
+# that unrelated/ looks like a trivial merge candidate.
+#
+test_expect_success 'avoid assuming we detected renames' '
+       git init redo-weirdness &&
+       (
+               cd redo-weirdness &&
+
+               mkdir unrelated &&
+               for i in $(test_seq 1 10)
+               do
+                       >unrelated/$i
+               done &&
+               test_seq  2 10 >numbers &&
+               test_seq 12 20 >values &&
+               git add numbers values unrelated/ &&
+               git commit -m orig &&
+
+               git branch upstream &&
+               git branch topic &&
+
+               git switch upstream &&
+               test_seq  1 10 >numbers &&
+               test_seq 11 20 >values &&
+               git add numbers &&
+               git commit -m "Some tweaks" &&
+
+               git switch topic &&
+
+               >unrelated/foo &&
+               test_seq  2 12 >numbers &&
+               test_seq 12 22 >values &&
+               git add numbers values unrelated/ &&
+               git mv numbers sequence &&
+               git mv values progression &&
+               git commit -m A &&
+
+               #
+               # Actual testing
+               #
+
+               git switch --detach topic^0 &&
+
+               test_must_fail git -c merge.renameLimit=1 rebase upstream &&
+
+               git ls-files -u >actual &&
+               ! test_file_is_empty actual
+       )
+'
+
 test_done
index c2021267f2c558151567f274251844dd4abafb5c..cd6c53360d206bef95cac3af0188c5eb3052e76c 100755 (executable)
@@ -101,12 +101,12 @@ test_expect_success 'pre-auto-gc hook can stop auto gc' '
        EOF
 
        git init pre-auto-gc-hook &&
+       test_hook -C pre-auto-gc-hook pre-auto-gc <<-\EOF &&
+       echo >&2 no gc for you &&
+       exit 1
+       EOF
        (
                cd pre-auto-gc-hook &&
-               write_script ".git/hooks/pre-auto-gc" <<-\EOF &&
-               echo >&2 no gc for you &&
-               exit 1
-               EOF
 
                git config gc.auto 3 &&
                git config gc.autoDetach false &&
@@ -128,14 +128,12 @@ test_expect_success 'pre-auto-gc hook can stop auto gc' '
        See "git help gc" for manual housekeeping.
        EOF
 
-       (
-               cd pre-auto-gc-hook &&
-               write_script ".git/hooks/pre-auto-gc" <<-\EOF &&
-               echo >&2 will gc for you &&
-               exit 0
-               EOF
-               git gc --auto >../out.actual 2>../err.actual
-       ) &&
+       test_hook -C pre-auto-gc-hook --clobber pre-auto-gc <<-\EOF &&
+       echo >&2 will gc for you &&
+       exit 0
+       EOF
+
+       git -C pre-auto-gc-hook gc --auto >out.actual 2>err.actual &&
 
        test_must_be_empty out.actual &&
        test_cmp err.expect err.actual
index 9865ecdac8e0964c53625d43e56b0aad87a8b05e..8c37bceb336344f9b10878faf9cabf933dcb8ea2 100755 (executable)
@@ -4,6 +4,25 @@ test_description='git mv in subdirs'
 . ./test-lib.sh
 . "$TEST_DIRECTORY"/lib-diff-data.sh
 
+test_expect_success 'mv -f refreshes updated index entry' '
+       echo test >bar &&
+       git add bar &&
+       git commit -m test &&
+
+       echo foo >foo &&
+       git add foo &&
+
+       # Wait one second to ensure ctime of rename will differ from original
+       # file creation ctime.
+       sleep 1 &&
+       git mv -f foo bar &&
+       git reset --merge HEAD &&
+
+       # Verify the index has been reset
+       git diff-files >out &&
+       test_must_be_empty out
+'
+
 test_expect_success 'prepare reference tree' '
        mkdir path0 path1 &&
        COPYING_test_data >path0/COPYING &&
index a1080b94e388aef309c958e9ca7d6150e2577b06..cb9f1a6981eb5f05dd662eac436a8ee6f7a17dee 100755 (executable)
@@ -171,50 +171,20 @@ test_expect_success 'stash restore in sparse checkout' '
 
                # Put a file in the working directory in the way
                echo in the way >modified &&
-               git stash apply &&
+               test_must_fail git stash apply 2>error&&
 
-               # Ensure stash vivifies modifies paths...
-               cat >expect <<-EOF &&
-               H addme
-               H modified
-               H removeme
-               H subdir/A
-               S untouched
-               EOF
-               git ls-files -t >actual &&
-               test_cmp expect actual &&
+               grep "changes.*would be overwritten by merge" error &&
 
-               # ...and that the paths show up in status as changed...
-               cat >expect <<-EOF &&
-               A  addme
-                M modified
-                D removeme
-                M subdir/A
-               ?? actual
-               ?? expect
-               ?? modified.stash.XXXXXX
-               EOF
-               git status --porcelain | \
-                       sed -e s/stash......./stash.XXXXXX/ >actual &&
-               test_cmp expect actual &&
+               echo in the way >expect &&
+               test_cmp expect modified &&
+               git diff --quiet HEAD ":!modified" &&
 
                # ...and that working directory reflects the files correctly
-               test_path_is_file    addme &&
+               test_path_is_missing addme &&
                test_path_is_file    modified &&
                test_path_is_missing removeme &&
                test_path_is_file    subdir/A &&
-               test_path_is_missing untouched &&
-
-               # ...including that we have the expected "modified" file...
-               cat >expect <<-EOF &&
-               modified
-               tweaked
-               EOF
-               test_cmp expect modified &&
-
-               # ...and that the other "modified" file is still present...
-               echo in the way >expect &&
-               test_cmp expect modified.stash.*
+               test_path_is_missing untouched
        )
 '
 
index a0c123b0a77a6f99877d4e5cd2fd74cb78e0b96c..ca90ee805e7b3411c6e7c8c5868c3aa2063dba05 100755 (executable)
@@ -90,6 +90,9 @@ test_expect_success 'setup' '
        cd worktree &&
        mkdir done dtwo dthree &&
        touch one two three done/one dtwo/two dthree/three &&
+       test-tool chmtime =-300 one two three done/one dtwo/two dthree/three &&
+       test-tool chmtime =-300 done dtwo dthree &&
+       test-tool chmtime =-300 . &&
        git add one two done/one &&
        : >.git/info/exclude &&
        git update-index --untracked-cache &&
@@ -142,7 +145,6 @@ two
 EOF
 
 test_expect_success 'status first time (empty cache)' '
-       avoid_racy &&
        : >../trace.output &&
        GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
        git status --porcelain >../actual &&
@@ -166,7 +168,6 @@ test_expect_success 'untracked cache after first status' '
 '
 
 test_expect_success 'status second time (fully populated cache)' '
-       avoid_racy &&
        : >../trace.output &&
        GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
        git status --porcelain >../actual &&
@@ -190,8 +191,8 @@ test_expect_success 'untracked cache after second status' '
 '
 
 test_expect_success 'modify in root directory, one dir invalidation' '
-       avoid_racy &&
        : >four &&
+       test-tool chmtime =-240 four &&
        : >../trace.output &&
        GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
        git status --porcelain >../actual &&
@@ -241,7 +242,6 @@ EOF
 '
 
 test_expect_success 'new .gitignore invalidates recursively' '
-       avoid_racy &&
        echo four >.gitignore &&
        : >../trace.output &&
        GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
@@ -292,7 +292,6 @@ EOF
 '
 
 test_expect_success 'new info/exclude invalidates everything' '
-       avoid_racy &&
        echo three >>.git/info/exclude &&
        : >../trace.output &&
        GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
@@ -520,14 +519,14 @@ test_expect_success 'create/modify files, some of which are gitignored' '
        echo three >done/three && # three is gitignored
        echo four >done/four && # four is gitignored at a higher level
        echo five >done/five && # five is not gitignored
-       echo test >base && #we need to ensure that the root dir is touched
-       rm base &&
+       test-tool chmtime =-180 done/two done/three done/four done/five done &&
+       # we need to ensure that the root dir is touched (in the past);
+       test-tool chmtime =-180 . &&
        sync_mtime
 '
 
 test_expect_success 'test sparse status with untracked cache' '
        : >../trace.output &&
-       avoid_racy &&
        GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
        git status --porcelain >../status.actual &&
        iuc status --porcelain >../status.iuc &&
@@ -570,7 +569,6 @@ EOF
 '
 
 test_expect_success 'test sparse status again with untracked cache' '
-       avoid_racy &&
        : >../trace.output &&
        GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
        git status --porcelain >../status.actual &&
@@ -597,11 +595,11 @@ EOF
 test_expect_success 'set up for test of subdir and sparse checkouts' '
        mkdir done/sub &&
        mkdir done/sub/sub &&
-       echo "sub" > done/sub/sub/file
+       echo "sub" > done/sub/sub/file &&
+       test-tool chmtime =-120 done/sub/sub/file done/sub/sub done/sub done
 '
 
 test_expect_success 'test sparse status with untracked cache and subdir' '
-       avoid_racy &&
        : >../trace.output &&
        GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
        git status --porcelain >../status.actual &&
@@ -651,7 +649,6 @@ EOF
 '
 
 test_expect_success 'test sparse status again with untracked cache and subdir' '
-       avoid_racy &&
        : >../trace.output &&
        GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace.output" \
        git status --porcelain >../status.actual &&
index d05426062ec29da81cfd48a0b24fd92a44f22e25..22477f3a312e4a44b0c3f99ee356d29487ed5399 100755 (executable)
@@ -462,14 +462,40 @@ test_expect_success 'resetting an unmodified path is a no-op' '
        git diff-index --cached --exit-code HEAD
 '
 
+test_reset_refreshes_index () {
+
+       # To test whether the index is refreshed in `git reset --mixed` with
+       # the given options, create a scenario where we clearly see different
+       # results depending on whether the refresh occurred or not.
+
+       # Step 0: start with a clean index
+       git reset --hard HEAD &&
+
+       # Step 1: remove file2, but only in the index (no change to worktree)
+       git rm --cached file2 &&
+
+       # Step 2: reset index & leave worktree unchanged from HEAD
+       git $1 reset $2 --mixed HEAD &&
+
+       # Step 3: verify whether the index is refreshed by checking whether
+       # file2 still has staged changes in the index differing from HEAD (if
+       # the refresh occurred, there should be no such changes)
+       git diff-files >output.log &&
+       test_must_be_empty output.log
+}
+
 test_expect_success '--mixed refreshes the index' '
-       cat >expect <<-\EOF &&
-       Unstaged changes after reset:
-       M       file2
-       EOF
-       echo 123 >>file2 &&
-       git reset --mixed HEAD >output &&
-       test_cmp expect output
+       # Verify default behavior (without --[no-]refresh or reset.refresh)
+       test_reset_refreshes_index &&
+
+       # With --quiet
+       test_reset_refreshes_index "" --quiet
+'
+
+test_expect_success '--mixed --[no-]refresh sets refresh behavior' '
+       # Verify that --[no-]refresh controls index refresh
+       test_reset_refreshes_index "" --refresh &&
+       ! test_reset_refreshes_index "" --no-refresh
 '
 
 test_expect_success '--mixed preserves skip-worktree' '
index 0de83e36199ec44eec0ea1ca568c730da759d5d3..a60153f9f32318c5ee31d2b16ec506a7a59ddd6d 100755 (executable)
@@ -63,9 +63,12 @@ test_expect_success '"mixed" reset is not allowed in bare' '
        test_must_fail git reset --mixed HEAD^
 '
 
-test_expect_success '"soft" reset is allowed in bare' '
+test_expect_success !SANITIZE_LEAK '"soft" reset is allowed in bare' '
        git reset --soft HEAD^ &&
-       test "$(git show --pretty=format:%s | head -n 1)" = "one"
+       git show --pretty=format:%s >out &&
+       echo one >expect &&
+       head -n 1 out >actual &&
+       test_cmp expect actual
 '
 
 test_done
index a21781d68a1abf91bf2d34d029a1c90732991f2b..58e55a7c7791616fa22efec12c79350c308fcaf9 100755 (executable)
@@ -17,8 +17,7 @@ test_expect_success 'setup' '
 '
 
 test_expect_success 'test status, add, commit, others trigger hook without flags set' '
-       mkdir -p .git/hooks &&
-       write_script .git/hooks/post-index-change <<-\EOF &&
+       test_hook post-index-change <<-\EOF &&
                if test "$1" -eq 1; then
                        echo "Invalid combination of flags passed to hook; updated_workdir is set." >testfailure
                        exit 1
@@ -63,7 +62,7 @@ test_expect_success 'test status, add, commit, others trigger hook without flags
 '
 
 test_expect_success 'test checkout and reset trigger the hook' '
-       write_script .git/hooks/post-index-change <<-\EOF &&
+       test_hook post-index-change <<-\EOF &&
                if test "$1" -eq 1 && test "$2" -eq 1; then
                        echo "Invalid combination of flags passed to hook; updated_workdir and updated_skipworktree are both set." >testfailure
                        exit 1
@@ -106,7 +105,7 @@ test_expect_success 'test checkout and reset trigger the hook' '
 '
 
 test_expect_success 'test reset --mixed and update-index triggers the hook' '
-       write_script .git/hooks/post-index-change <<-\EOF &&
+       test_hook post-index-change <<-\EOF &&
                if test "$1" -eq 1 && test "$2" -eq 1; then
                        echo "Invalid combination of flags passed to hook; updated_workdir and updated_skipworktree are both set." >testfailure
                        exit 1
index 53d419c0edbd246e3405875e3627aa968d7d83e4..1d5f8970e66060538ea35d73ed7c2cd9fb8c53a8 100755 (executable)
@@ -206,8 +206,18 @@ test_expect_success 'submodule update should fail due to local changes' '
         (cd submodule &&
          compare_head
         ) &&
-        test_must_fail git submodule update submodule
-       )
+        test_must_fail git submodule update submodule 2>../actual.raw
+       ) &&
+       sed "s/^> //" >expect <<-\EOF &&
+       > error: Your local changes to the following files would be overwritten by checkout:
+       >       file
+       > Please commit your changes or stash them before you switch branches.
+       > Aborting
+       > fatal: Unable to checkout OID in submodule path '\''submodule'\''
+       EOF
+       sed -e "s/checkout $SQ[^$SQ]*$SQ/checkout OID/" <actual.raw >actual &&
+       test_cmp expect actual
+
 '
 test_expect_success 'submodule update should throw away changes with --force ' '
        (cd super &&
@@ -661,6 +671,39 @@ test_expect_success 'submodule update --init skips submodule with update=none' '
        )
 '
 
+test_expect_success 'submodule update with pathspec warns against uninitialized ones' '
+       test_when_finished "rm -fr selective" &&
+       git clone super selective &&
+       (
+               cd selective &&
+               git submodule init submodule &&
+
+               git submodule update submodule 2>err &&
+               ! grep "Submodule path .* not initialized" err &&
+
+               git submodule update rebasing 2>err &&
+               grep "Submodule path .rebasing. not initialized" err &&
+
+               test_path_exists submodule/.git &&
+               test_path_is_missing rebasing/.git
+       )
+
+'
+
+test_expect_success 'submodule update without pathspec updates only initialized ones' '
+       test_when_finished "rm -fr selective" &&
+       git clone super selective &&
+       (
+               cd selective &&
+               git submodule init submodule &&
+               git submodule update 2>err &&
+               test_path_exists submodule/.git &&
+               test_path_is_missing rebasing/.git &&
+               ! grep "Submodule path .* not initialized" err
+       )
+
+'
+
 test_expect_success 'submodule update continues after checkout error' '
        (cd super &&
         git reset --hard HEAD &&
@@ -1062,4 +1105,16 @@ test_expect_success 'submodule update --quiet passes quietness to fetch with a s
        )
 '
 
+test_expect_success 'submodule update --filter requires --init' '
+       test_expect_code 129 git -C super submodule update --filter blob:none
+'
+
+test_expect_success 'submodule update --filter sets partial clone settings' '
+       test_when_finished "rm -rf super-filter" &&
+       git clone cloned super-filter &&
+       git -C super-filter submodule update --init --filter blob:none &&
+       test_cmp_config -C super-filter/submodule true remote.origin.promisor &&
+       test_cmp_config -C super-filter/submodule blob:none remote.origin.partialclonefilter
+'
+
 test_done
index 02feb8577962687a81d9bc03ea330fcec2c5b6ee..d6040e0a33703310d52d588607e4f62912f0c049 100755 (executable)
@@ -197,7 +197,19 @@ test_expect_success 'missing nested submodule alternate fails clone and submodul
                cd supersuper-clone &&
                check_that_two_of_three_alternates_are_used &&
                # update of the submodule fails
-               test_must_fail git submodule update --init --recursive
+               cat >expect <<-\EOF &&
+               fatal: submodule '\''sub'\'' cannot add alternate: path ... does not exist
+               Failed to clone '\''sub'\''. Retry scheduled
+               fatal: submodule '\''sub-dissociate'\'' cannot add alternate: path ... does not exist
+               Failed to clone '\''sub-dissociate'\''. Retry scheduled
+               fatal: submodule '\''sub'\'' cannot add alternate: path ... does not exist
+               Failed to clone '\''sub'\'' a second time, aborting
+               fatal: Failed to recurse into submodule path ...
+               EOF
+               test_must_fail git submodule update --init --recursive 2>err &&
+               grep -e fatal: -e ^Failed err >actual.raw &&
+               sed -e "s/path $SQ[^$SQ]*$SQ/path .../" <actual.raw >actual &&
+               test_cmp expect actual
        )
 '
 
index 91964653a0b6937cf41c3ac2b687523f482abdb2..5fcaa0b4f2aa5e7b533f0dc0beb5426f2997645a 100755 (executable)
@@ -442,7 +442,7 @@ test_expect_success '--fixup=reword: give error with pathsec' '
 '
 
 test_expect_success '--fixup=reword: -F give error message' '
-       echo "fatal: Only one of -c/-C/-F/--fixup can be used." >expect &&
+       echo "fatal: options '\''-F'\'' and '\''--fixup'\'' cannot be used together" >expect &&
        test_must_fail git commit --fixup=reword:HEAD~ -F msg  2>actual &&
        test_cmp expect actual
 '
index 606d8d0f08909622d7f916ba4fd55bdfb3d820f1..ad1eb64ba0db16d4f1452961c0a226fdf2e5cce0 100755 (executable)
@@ -7,37 +7,6 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 
 . ./test-lib.sh
 
-HOOKDIR="$(git rev-parse --git-dir)/hooks"
-PRECOMMIT="$HOOKDIR/pre-commit"
-PREMERGE="$HOOKDIR/pre-merge-commit"
-
-# Prepare sample scripts that write their $0 to actual_hooks
-test_expect_success 'sample script setup' '
-       mkdir -p "$HOOKDIR" &&
-       write_script "$HOOKDIR/success.sample" <<-\EOF &&
-       echo $0 >>actual_hooks
-       exit 0
-       EOF
-       write_script "$HOOKDIR/fail.sample" <<-\EOF &&
-       echo $0 >>actual_hooks
-       exit 1
-       EOF
-       write_script "$HOOKDIR/non-exec.sample" <<-\EOF &&
-       echo $0 >>actual_hooks
-       exit 1
-       EOF
-       chmod -x "$HOOKDIR/non-exec.sample" &&
-       write_script "$HOOKDIR/require-prefix.sample" <<-\EOF &&
-       echo $0 >>actual_hooks
-       test $GIT_PREFIX = "success/"
-       EOF
-       write_script "$HOOKDIR/check-author.sample" <<-\EOF
-       echo $0 >>actual_hooks
-       test "$GIT_AUTHOR_NAME" = "New Author" &&
-       test "$GIT_AUTHOR_EMAIL" = "newauthor@example.com"
-       EOF
-'
-
 test_expect_success 'root commit' '
        echo "root" >file &&
        git add file &&
@@ -96,10 +65,16 @@ test_expect_success '--no-verify with no hook (merge)' '
        test_path_is_missing actual_hooks
 '
 
+setup_success_hook () {
+       test_when_finished "rm -f actual_hooks expected_hooks" &&
+       echo "$1" >expected_hooks &&
+       test_hook "$1" <<-EOF
+       echo $1 >>actual_hooks
+       EOF
+}
+
 test_expect_success 'with succeeding hook' '
-       test_when_finished "rm -f \"$PRECOMMIT\" expected_hooks actual_hooks" &&
-       cp "$HOOKDIR/success.sample" "$PRECOMMIT" &&
-       echo "$PRECOMMIT" >expected_hooks &&
+       setup_success_hook "pre-commit" &&
        echo "more" >>file &&
        git add file &&
        git commit -m "more" &&
@@ -107,9 +82,7 @@ test_expect_success 'with succeeding hook' '
 '
 
 test_expect_success 'with succeeding hook (merge)' '
-       test_when_finished "rm -f \"$PREMERGE\" expected_hooks actual_hooks" &&
-       cp "$HOOKDIR/success.sample" "$PREMERGE" &&
-       echo "$PREMERGE" >expected_hooks &&
+       setup_success_hook "pre-merge-commit" &&
        git checkout side &&
        git merge -m "merge main" main &&
        git checkout main &&
@@ -117,17 +90,14 @@ test_expect_success 'with succeeding hook (merge)' '
 '
 
 test_expect_success 'automatic merge fails; both hooks are available' '
-       test_when_finished "rm -f \"$PREMERGE\" \"$PRECOMMIT\"" &&
-       test_when_finished "rm -f expected_hooks actual_hooks" &&
-       test_when_finished "git checkout main" &&
-       cp "$HOOKDIR/success.sample" "$PREMERGE" &&
-       cp "$HOOKDIR/success.sample" "$PRECOMMIT" &&
+       setup_success_hook "pre-commit" &&
+       setup_success_hook "pre-merge-commit" &&
 
        git checkout conflicting-a &&
        test_must_fail git merge -m "merge conflicting-b" conflicting-b &&
        test_path_is_missing actual_hooks &&
 
-       echo "$PRECOMMIT" >expected_hooks &&
+       echo "pre-commit" >expected_hooks &&
        echo a+b >conflicting &&
        git add conflicting &&
        git commit -m "resolve conflict" &&
@@ -135,8 +105,7 @@ test_expect_success 'automatic merge fails; both hooks are available' '
 '
 
 test_expect_success '--no-verify with succeeding hook' '
-       test_when_finished "rm -f \"$PRECOMMIT\" actual_hooks" &&
-       cp "$HOOKDIR/success.sample" "$PRECOMMIT" &&
+       setup_success_hook "pre-commit" &&
        echo "even more" >>file &&
        git add file &&
        git commit --no-verify -m "even more" &&
@@ -144,8 +113,7 @@ test_expect_success '--no-verify with succeeding hook' '
 '
 
 test_expect_success '--no-verify with succeeding hook (merge)' '
-       test_when_finished "rm -f \"$PREMERGE\" actual_hooks" &&
-       cp "$HOOKDIR/success.sample" "$PREMERGE" &&
+       setup_success_hook "pre-merge-commit" &&
        git branch -f side side-orig &&
        git checkout side &&
        git merge --no-verify -m "merge main" main &&
@@ -153,10 +121,19 @@ test_expect_success '--no-verify with succeeding hook (merge)' '
        test_path_is_missing actual_hooks
 '
 
+setup_failing_hook () {
+       test_when_finished "rm -f actual_hooks" &&
+       test_hook "$1" <<-EOF
+       echo $1-failing-hook >>actual_hooks
+       exit 1
+       EOF
+}
+
 test_expect_success 'with failing hook' '
-       test_when_finished "rm -f \"$PRECOMMIT\" expected_hooks actual_hooks" &&
-       cp "$HOOKDIR/fail.sample" "$PRECOMMIT" &&
-       echo "$PRECOMMIT" >expected_hooks &&
+       setup_failing_hook "pre-commit" &&
+       test_when_finished "rm -f expected_hooks" &&
+       echo "pre-commit-failing-hook" >expected_hooks &&
+
        echo "another" >>file &&
        git add file &&
        test_must_fail git commit -m "another" &&
@@ -164,8 +141,7 @@ test_expect_success 'with failing hook' '
 '
 
 test_expect_success '--no-verify with failing hook' '
-       test_when_finished "rm -f \"$PRECOMMIT\" actual_hooks" &&
-       cp "$HOOKDIR/fail.sample" "$PRECOMMIT" &&
+       setup_failing_hook "pre-commit" &&
        echo "stuff" >>file &&
        git add file &&
        git commit --no-verify -m "stuff" &&
@@ -173,9 +149,8 @@ test_expect_success '--no-verify with failing hook' '
 '
 
 test_expect_success 'with failing hook (merge)' '
-       test_when_finished "rm -f \"$PREMERGE\" expected_hooks actual_hooks" &&
-       cp "$HOOKDIR/fail.sample" "$PREMERGE" &&
-       echo "$PREMERGE" >expected_hooks &&
+       setup_failing_hook "pre-merge-commit" &&
+       echo "pre-merge-commit-failing-hook" >expected_hooks &&
        git checkout side &&
        test_must_fail git merge -m "merge main" main &&
        git checkout main &&
@@ -183,8 +158,8 @@ test_expect_success 'with failing hook (merge)' '
 '
 
 test_expect_success '--no-verify with failing hook (merge)' '
-       test_when_finished "rm -f \"$PREMERGE\" actual_hooks" &&
-       cp "$HOOKDIR/fail.sample" "$PREMERGE" &&
+       setup_failing_hook "pre-merge-commit" &&
+
        git branch -f side side-orig &&
        git checkout side &&
        git merge --no-verify -m "merge main" main &&
@@ -192,9 +167,18 @@ test_expect_success '--no-verify with failing hook (merge)' '
        test_path_is_missing actual_hooks
 '
 
+setup_non_exec_hook () {
+       test_when_finished "rm -f actual_hooks" &&
+       test_hook "$1" <<-\EOF &&
+       echo non-exec >>actual_hooks
+       exit 1
+       EOF
+       test_hook --disable "$1"
+}
+
+
 test_expect_success POSIXPERM 'with non-executable hook' '
-       test_when_finished "rm -f \"$PRECOMMIT\" actual_hooks" &&
-       cp "$HOOKDIR/non-exec.sample" "$PRECOMMIT" &&
+       setup_non_exec_hook "pre-commit" &&
        echo "content" >>file &&
        git add file &&
        git commit -m "content" &&
@@ -202,8 +186,7 @@ test_expect_success POSIXPERM 'with non-executable hook' '
 '
 
 test_expect_success POSIXPERM '--no-verify with non-executable hook' '
-       test_when_finished "rm -f \"$PRECOMMIT\" actual_hooks" &&
-       cp "$HOOKDIR/non-exec.sample" "$PRECOMMIT" &&
+       setup_non_exec_hook "pre-commit" &&
        echo "more content" >>file &&
        git add file &&
        git commit --no-verify -m "more content" &&
@@ -211,8 +194,7 @@ test_expect_success POSIXPERM '--no-verify with non-executable hook' '
 '
 
 test_expect_success POSIXPERM 'with non-executable hook (merge)' '
-       test_when_finished "rm -f \"$PREMERGE\" actual_hooks" &&
-       cp "$HOOKDIR/non-exec.sample" "$PREMERGE" &&
+       setup_non_exec_hook "pre-merge" &&
        git branch -f side side-orig &&
        git checkout side &&
        git merge -m "merge main" main &&
@@ -221,8 +203,7 @@ test_expect_success POSIXPERM 'with non-executable hook (merge)' '
 '
 
 test_expect_success POSIXPERM '--no-verify with non-executable hook (merge)' '
-       test_when_finished "rm -f \"$PREMERGE\" actual_hooks" &&
-       cp "$HOOKDIR/non-exec.sample" "$PREMERGE" &&
+       setup_non_exec_hook "pre-merge" &&
        git branch -f side side-orig &&
        git checkout side &&
        git merge --no-verify -m "merge main" main &&
@@ -230,10 +211,18 @@ test_expect_success POSIXPERM '--no-verify with non-executable hook (merge)' '
        test_path_is_missing actual_hooks
 '
 
+setup_require_prefix_hook () {
+       test_when_finished "rm -f expected_hooks" &&
+       echo require-prefix >expected_hooks &&
+       test_hook pre-commit <<-\EOF
+       echo require-prefix >>actual_hooks
+       test $GIT_PREFIX = "success/"
+       EOF
+}
+
 test_expect_success 'with hook requiring GIT_PREFIX' '
-       test_when_finished "rm -rf \"$PRECOMMIT\" expected_hooks actual_hooks success" &&
-       cp "$HOOKDIR/require-prefix.sample" "$PRECOMMIT" &&
-       echo "$PRECOMMIT" >expected_hooks &&
+       test_when_finished "rm -rf actual_hooks success" &&
+       setup_require_prefix_hook &&
        echo "more content" >>file &&
        git add file &&
        mkdir success &&
@@ -245,9 +234,8 @@ test_expect_success 'with hook requiring GIT_PREFIX' '
 '
 
 test_expect_success 'with failing hook requiring GIT_PREFIX' '
-       test_when_finished "rm -rf \"$PRECOMMIT\" expected_hooks actual_hooks fail" &&
-       cp "$HOOKDIR/require-prefix.sample" "$PRECOMMIT" &&
-       echo "$PRECOMMIT" >expected_hooks &&
+       test_when_finished "rm -rf actual_hooks fail" &&
+       setup_require_prefix_hook &&
        echo "more content" >>file &&
        git add file &&
        mkdir fail &&
@@ -259,13 +247,23 @@ test_expect_success 'with failing hook requiring GIT_PREFIX' '
        test_cmp expected_hooks actual_hooks
 '
 
+setup_require_author_hook () {
+       test_when_finished "rm -f expected_hooks actual_hooks" &&
+       echo check-author >expected_hooks &&
+       test_hook pre-commit <<-\EOF
+       echo check-author >>actual_hooks
+       test "$GIT_AUTHOR_NAME" = "New Author" &&
+       test "$GIT_AUTHOR_EMAIL" = "newauthor@example.com"
+       EOF
+}
+
+
 test_expect_success 'check the author in hook' '
-       test_when_finished "rm -f \"$PRECOMMIT\" expected_hooks actual_hooks" &&
-       cp "$HOOKDIR/check-author.sample" "$PRECOMMIT" &&
+       setup_require_author_hook &&
        cat >expected_hooks <<-EOF &&
-       $PRECOMMIT
-       $PRECOMMIT
-       $PRECOMMIT
+       check-author
+       check-author
+       check-author
        EOF
        test_must_fail git commit --allow-empty -m "by a.u.thor" &&
        (
index bba58f04806fdfc247c1b72112ed6805340934c1..a39de8c112674f070f8dc19745e27980b7b52c9c 100755 (executable)
@@ -54,15 +54,11 @@ test_expect_success '--no-verify with no hook (editor)' '
 
 '
 
-# now install hook that always succeeds
-HOOKDIR="$(git rev-parse --git-dir)/hooks"
-HOOK="$HOOKDIR/commit-msg"
-mkdir -p "$HOOKDIR"
-cat > "$HOOK" <<EOF
-#!/bin/sh
-exit 0
-EOF
-chmod +x "$HOOK"
+test_expect_success 'setup: commit-msg hook that always succeeds' '
+       test_hook --setup commit-msg <<-\EOF
+       exit 0
+       EOF
+'
 
 test_expect_success 'with succeeding hook' '
 
@@ -98,11 +94,11 @@ test_expect_success '--no-verify with succeeding hook (editor)' '
 
 '
 
-# now a hook that fails
-cat > "$HOOK" <<EOF
-#!/bin/sh
-exit 1
-EOF
+test_expect_success 'setup: commit-msg hook that always fails' '
+       test_hook --clobber commit-msg <<-\EOF
+       exit 1
+       EOF
+'
 
 commit_msg_is () {
        test "$(git log --pretty=format:%s%b -1)" = "$1"
@@ -176,8 +172,12 @@ test_expect_success 'merge bypasses failing hook with --no-verify' '
        commit_msg_is "Merge branch '\''main'\'' into newbranch"
 '
 
+test_expect_success 'setup: commit-msg hook made non-executable' '
+       git_dir="$(git rev-parse --git-dir)" &&
+       chmod -x "$git_dir/hooks/commit-msg"
+'
+
 
-chmod -x "$HOOK"
 test_expect_success POSIXPERM 'with non-executable hook' '
 
        echo "content" >file &&
@@ -212,13 +212,12 @@ test_expect_success POSIXPERM '--no-verify with non-executable hook (editor)' '
 
 '
 
-# now a hook that edits the commit message
-cat > "$HOOK" <<'EOF'
-#!/bin/sh
-echo "new message" > "$1"
-exit 0
-EOF
-chmod +x "$HOOK"
+test_expect_success 'setup: commit-msg hook that edits the commit message' '
+       test_hook --clobber commit-msg <<-\EOF
+       echo "new message" >"$1"
+       exit 0
+       EOF
+'
 
 test_expect_success 'hook edits commit message' '
 
index e39c809ca42f04dbda578689e627b4aceb67d044..2128142a61c60da918381f6b6f74ca612ac9227b 100755 (executable)
@@ -47,25 +47,19 @@ test_expect_success 'with no hook' '
 
 '
 
-# set up fake editor for interactive editing
-cat > fake-editor <<'EOF'
-#!/bin/sh
-exit 0
-EOF
-chmod +x fake-editor
-
-## Not using test_set_editor here so we can easily ensure the editor variable
-## is only set for the editor tests
-FAKE_EDITOR="$(pwd)/fake-editor"
-export FAKE_EDITOR
+test_expect_success 'setup fake editor for interactive editing' '
+       write_script fake-editor <<-\EOF &&
+       exit 0
+       EOF
 
-# now install hook that always succeeds and adds a message
-HOOKDIR="$(git rev-parse --git-dir)/hooks"
-HOOK="$HOOKDIR/prepare-commit-msg"
-mkdir -p "$HOOKDIR"
-echo "#!$SHELL_PATH" > "$HOOK"
-cat >> "$HOOK" <<'EOF'
+       ## Not using test_set_editor here so we can easily ensure the editor variable
+       ## is only set for the editor tests
+       FAKE_EDITOR="$(pwd)/fake-editor" &&
+       export FAKE_EDITOR
+'
 
+test_expect_success 'setup prepare-commit-msg hook' '
+       test_hook --setup prepare-commit-msg <<\EOF
 GIT_DIR=$(git rev-parse --git-dir)
 if test -d "$GIT_DIR/rebase-merge"
 then
@@ -103,7 +97,7 @@ else
 fi
 exit 0
 EOF
-chmod +x "$HOOK"
+'
 
 echo dummy template > "$(git rev-parse --git-dir)/template"
 
@@ -265,10 +259,11 @@ test_expect_success 'with hook and editor (cherry-pick)' '
        test "$(git log -1 --pretty=format:%s)" = merge
 '
 
-cat > "$HOOK" <<'EOF'
-#!/bin/sh
-exit 1
-EOF
+test_expect_success 'setup: commit-msg hook that always fails' '
+       test_hook --setup --clobber prepare-commit-msg <<-\EOF
+       exit 1
+       EOF
+'
 
 test_expect_success 'with failing hook' '
 
@@ -296,9 +291,9 @@ test_expect_success 'with failing hook (merge)' '
        git checkout -B other HEAD@{1} &&
        echo "more" >> file &&
        git add file &&
-       rm -f "$HOOK" &&
+       test_hook --remove prepare-commit-msg &&
        git commit -m other &&
-       write_script "$HOOK" <<-EOF &&
+       test_hook --setup prepare-commit-msg <<-\EOF &&
        exit 1
        EOF
        git checkout - &&
index 05c6c02435d5b99f406470f1cf18acdd0bc9757a..2b7ef6c41a455423c0c62087a440e51bc4c72486 100755 (executable)
@@ -1647,13 +1647,33 @@ test_expect_success '"Initial commit" should not be noted in commit template' '
 '
 
 test_expect_success '--no-optional-locks prevents index update' '
-       test-tool chmtime =1234567890 .git/index &&
+       test_set_magic_mtime .git/index &&
        git --no-optional-locks status &&
-       test-tool chmtime --get .git/index >out &&
-       grep ^1234567890 out &&
+       test_is_magic_mtime .git/index &&
        git status &&
-       test-tool chmtime --get .git/index >out &&
-       ! grep ^1234567890 out
+       ! test_is_magic_mtime .git/index
+'
+
+test_expect_success 'racy timestamps will be fixed for clean worktree' '
+       echo content >racy-dirty &&
+       echo content >racy-racy &&
+       git add racy* &&
+       git commit -m "racy test files" &&
+       # let status rewrite the index, if necessary; after that we expect
+       # no more index writes unless caused by racy timestamps; note that
+       # timestamps may already be racy now (depending on previous tests)
+       git status &&
+       test_set_magic_mtime .git/index &&
+       git status &&
+       ! test_is_magic_mtime .git/index
+'
+
+test_expect_success 'racy timestamps will be fixed for dirty worktree' '
+       echo content2 >racy-dirty &&
+       git status &&
+       test_set_magic_mtime .git/index &&
+       git status &&
+       ! test_is_magic_mtime .git/index
 '
 
 test_done
index a6308acf006c9e4d35e47578465e348bb213356f..d4f9c6a837b18075a3bff10a7c87e7932e4e46fe 100755 (executable)
@@ -26,7 +26,7 @@ dirty_repo () {
 }
 
 write_integration_script () {
-       write_script .git/hooks/fsmonitor-test<<-\EOF
+       test_hook --setup --clobber fsmonitor-test<<-\EOF
        if test "$#" -ne 2
        then
                echo "$0: exactly 2 arguments expected"
@@ -56,7 +56,6 @@ test_lazy_prereq UNTRACKED_CACHE '
 '
 
 test_expect_success 'setup' '
-       mkdir -p .git/hooks &&
        : >tracked &&
        : >modified &&
        mkdir dir1 &&
@@ -108,7 +107,7 @@ EOF
 
 # test that "update-index --fsmonitor-valid" sets the fsmonitor valid bit
 test_expect_success 'update-index --fsmonitor-valid" sets the fsmonitor valid bit' '
-       write_script .git/hooks/fsmonitor-test<<-\EOF &&
+       test_hook fsmonitor-test<<-\EOF &&
                printf "last_update_token\0"
        EOF
        git update-index --fsmonitor &&
@@ -169,7 +168,7 @@ EOF
 
 # test that newly added files are marked valid
 test_expect_success 'newly added files are marked valid' '
-       write_script .git/hooks/fsmonitor-test<<-\EOF &&
+       test_hook --setup --clobber fsmonitor-test<<-\EOF &&
                printf "last_update_token\0"
        EOF
        git add new &&
@@ -210,7 +209,7 @@ EOF
 
 # test that *only* files returned by the integration script get flagged as invalid
 test_expect_success '*only* files returned by the integration script get flagged as invalid' '
-       write_script .git/hooks/fsmonitor-test<<-\EOF &&
+       test_hook --clobber fsmonitor-test<<-\EOF &&
        printf "last_update_token\0"
        printf "dir1/modified\0"
        EOF
@@ -231,7 +230,7 @@ test_expect_success 'refresh_index() invalidates fsmonitor cache' '
        dirty_repo &&
        write_integration_script &&
        git add . &&
-       write_script .git/hooks/fsmonitor-test<<-\EOF &&
+       test_hook --clobber fsmonitor-test<<-\EOF &&
        EOF
        git commit -m "to reset" &&
        git reset HEAD~1 &&
@@ -280,7 +279,7 @@ do
                # Make sure it's actually skipping the check for modified and untracked
                # (if enabled) files unless it is told about them.
                test_expect_success "status doesn't detect unreported modifications" '
-                       write_script .git/hooks/fsmonitor-test<<-\EOF &&
+                       test_hook --clobber fsmonitor-test<<-\EOF &&
                        printf "last_update_token\0"
                        :>marker
                        EOF
@@ -322,19 +321,25 @@ test_expect_success UNTRACKED_CACHE 'ignore .git changes when invalidating UNTR'
        test_create_repo dot-git &&
        (
                cd dot-git &&
-               mkdir -p .git/hooks &&
                : >tracked &&
+               test-tool chmtime =-60 tracked &&
                : >modified &&
+               test-tool chmtime =-60 modified &&
                mkdir dir1 &&
                : >dir1/tracked &&
+               test-tool chmtime =-60 dir1/tracked &&
                : >dir1/modified &&
+               test-tool chmtime =-60 dir1/modified &&
                mkdir dir2 &&
                : >dir2/tracked &&
+               test-tool chmtime =-60 dir2/tracked &&
                : >dir2/modified &&
+               test-tool chmtime =-60 dir2/modified &&
                write_integration_script &&
                git config core.fsmonitor .git/hooks/fsmonitor-test &&
                git update-index --untracked-cache &&
                git update-index --fsmonitor &&
+               git status &&
                GIT_TRACE2_PERF="$TRASH_DIRECTORY/trace-before" \
                git status &&
                test-tool dump-untracked-cache >../before
@@ -407,14 +412,14 @@ test_expect_success 'status succeeds with sparse index' '
                git -C sparse sparse-checkout init --cone --sparse-index &&
                git -C sparse sparse-checkout set dir1 dir2 &&
 
-               write_script .git/hooks/fsmonitor-test <<-\EOF &&
+               test_hook --clobber fsmonitor-test <<-\EOF &&
                        printf "last_update_token\0"
                EOF
                git -C full config core.fsmonitor ../.git/hooks/fsmonitor-test &&
                git -C sparse config core.fsmonitor ../.git/hooks/fsmonitor-test &&
                check_sparse_index_behavior ! &&
 
-               write_script .git/hooks/fsmonitor-test <<-\EOF &&
+               test_hook --clobber fsmonitor-test <<-\EOF &&
                        printf "last_update_token\0"
                        printf "dir1/modified\0"
                EOF
@@ -432,7 +437,7 @@ test_expect_success 'status succeeds with sparse index' '
 
                # This one modifies outside the sparse-checkout definition
                # and hence we expect to expand the sparse-index.
-               write_script .git/hooks/fsmonitor-test <<-\EOF &&
+               test_hook --clobber fsmonitor-test <<-\EOF &&
                        printf "last_update_token\0"
                        printf "dir1a/modified\0"
                EOF
index 634fb7f23a040be8e6afbf7e3946048f7b3dc163..dc57526e6f1f7af741a4cd6c1ce4800563be5c37 100755 (executable)
@@ -5,10 +5,7 @@ test_description='ignored hook warning'
 . ./test-lib.sh
 
 test_expect_success setup '
-       hookdir="$(git rev-parse --git-dir)/hooks" &&
-       hook="$hookdir/pre-commit" &&
-       mkdir -p "$hookdir" &&
-       write_script "$hook" <<-\EOF
+       test_hook --setup pre-commit <<-\EOF
        exit 0
        EOF
 '
@@ -19,20 +16,20 @@ test_expect_success 'no warning if hook is not ignored' '
 '
 
 test_expect_success POSIXPERM 'warning if hook is ignored' '
-       chmod -x "$hook" &&
+       test_hook --disable pre-commit &&
        git commit --allow-empty -m "even more" 2>message &&
        test_i18ngrep -e "hook was ignored" message
 '
 
 test_expect_success POSIXPERM 'no warning if advice.ignoredHook set to false' '
        test_config advice.ignoredHook false &&
-       chmod -x "$hook" &&
+       test_hook --disable pre-commit &&
        git commit --allow-empty -m "even more" 2>message &&
        test_i18ngrep ! -e "hook was ignored" message
 '
 
 test_expect_success 'no warning if unset advice.ignoredHook and hook removed' '
-       rm -f "$hook" &&
+       test_hook --remove pre-commit &&
        test_unconfig advice.ignoredHook &&
        git commit --allow-empty -m "even more" 2>message &&
        test_i18ngrep ! -e "hook was ignored" message
diff --git a/t/t7524-commit-summary.sh b/t/t7524-commit-summary.sh
new file mode 100755 (executable)
index 0000000..47b2f1d
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+test_description='git commit summary'
+. ./test-lib.sh
+
+test_expect_success 'setup' '
+       test_seq 101 200 >file &&
+       git add file &&
+       git commit -m initial &&
+       git tag initial
+'
+
+test_expect_success 'commit summary ignores rewrites' '
+       git reset --hard initial &&
+       test_seq 200 300 >file &&
+
+       git diff --stat >diffstat &&
+       git diff --stat --break-rewrites >diffstatrewrite &&
+
+       # make sure this scenario is a detectable rewrite
+       ! test_cmp_bin diffstat diffstatrewrite &&
+
+       git add file &&
+       git commit -m second >actual &&
+
+       grep "1 file" <actual >actual.total &&
+       grep "1 file" <diffstat >diffstat.total &&
+       test_cmp diffstat.total actual.total
+'
+
+test_done
diff --git a/t/t7527-builtin-fsmonitor.sh b/t/t7527-builtin-fsmonitor.sh
new file mode 100755 (executable)
index 0000000..bd0c952
--- /dev/null
@@ -0,0 +1,609 @@
+#!/bin/sh
+
+test_description='built-in file system watcher'
+
+. ./test-lib.sh
+
+if ! test_have_prereq FSMONITOR_DAEMON
+then
+       skip_all="fsmonitor--daemon is not supported on this platform"
+       test_done
+fi
+
+stop_daemon_delete_repo () {
+       r=$1 &&
+       test_might_fail git -C $r fsmonitor--daemon stop &&
+       rm -rf $1
+}
+
+start_daemon () {
+       r= tf= t2= tk= &&
+
+       while test "$#" -ne 0
+       do
+               case "$1" in
+               -C)
+                       r="-C ${2?}"
+                       shift
+                       ;;
+               --tf)
+                       tf="${2?}"
+                       shift
+                       ;;
+               --t2)
+                       t2="${2?}"
+                       shift
+                       ;;
+               --tk)
+                       tk="${2?}"
+                       shift
+                       ;;
+               -*)
+                       BUG "error: unknown option: '$1'"
+                       ;;
+               *)
+                       BUG "error: unbound argument: '$1'"
+                       ;;
+               esac
+               shift
+       done &&
+
+       (
+               if test -n "$tf"
+               then
+                       GIT_TRACE_FSMONITOR="$tf"
+                       export GIT_TRACE_FSMONITOR
+               fi &&
+
+               if test -n "$t2"
+               then
+                       GIT_TRACE2_PERF="$t2"
+                       export GIT_TRACE2_PERF
+               fi &&
+
+               if test -n "$tk"
+               then
+                       GIT_TEST_FSMONITOR_TOKEN="$tk"
+                       export GIT_TEST_FSMONITOR_TOKEN
+               fi &&
+
+               git $r fsmonitor--daemon start &&
+               git $r fsmonitor--daemon status
+       )
+}
+
+# Is a Trace2 data event present with the given catetory and key?
+# We do not care what the value is.
+#
+have_t2_data_event () {
+       c=$1 &&
+       k=$2 &&
+
+       grep -e '"event":"data".*"category":"'"$c"'".*"key":"'"$k"'"'
+}
+
+test_expect_success 'explicit daemon start and stop' '
+       test_when_finished "stop_daemon_delete_repo test_explicit" &&
+
+       git init test_explicit &&
+       start_daemon -C test_explicit &&
+
+       git -C test_explicit fsmonitor--daemon stop &&
+       test_must_fail git -C test_explicit fsmonitor--daemon status
+'
+
+test_expect_success 'implicit daemon start' '
+       test_when_finished "stop_daemon_delete_repo test_implicit" &&
+
+       git init test_implicit &&
+       test_must_fail git -C test_implicit fsmonitor--daemon status &&
+
+       # query will implicitly start the daemon.
+       #
+       # for test-script simplicity, we send a V1 timestamp rather than
+       # a V2 token.  either way, the daemon response to any query contains
+       # a new V2 token.  (the daemon may complain that we sent a V1 request,
+       # but this test case is only concerned with whether the daemon was
+       # implicitly started.)
+
+       GIT_TRACE2_EVENT="$PWD/.git/trace" \
+               test-tool -C test_implicit fsmonitor-client query --token 0 >actual &&
+       nul_to_q <actual >actual.filtered &&
+       grep "builtin:" actual.filtered &&
+
+       # confirm that a daemon was started in the background.
+       #
+       # since the mechanism for starting the background daemon is platform
+       # dependent, just confirm that the foreground command received a
+       # response from the daemon.
+
+       have_t2_data_event fsm_client query/response-length <.git/trace &&
+
+       git -C test_implicit fsmonitor--daemon status &&
+       git -C test_implicit fsmonitor--daemon stop &&
+       test_must_fail git -C test_implicit fsmonitor--daemon status
+'
+
+test_expect_success 'implicit daemon stop (delete .git)' '
+       test_when_finished "stop_daemon_delete_repo test_implicit_1" &&
+
+       git init test_implicit_1 &&
+
+       start_daemon -C test_implicit_1 &&
+
+       # deleting the .git directory will implicitly stop the daemon.
+       rm -rf test_implicit_1/.git &&
+
+       # [1] Create an empty .git directory so that the following Git
+       #     command will stay relative to the `-C` directory.
+       #
+       #     Without this, the Git command will override the requested
+       #     -C argument and crawl out to the containing Git source tree.
+       #     This would make the test result dependent upon whether we
+       #     were using fsmonitor on our development worktree.
+       #
+       sleep 1 &&
+       mkdir test_implicit_1/.git &&
+
+       test_must_fail git -C test_implicit_1 fsmonitor--daemon status
+'
+
+test_expect_success 'implicit daemon stop (rename .git)' '
+       test_when_finished "stop_daemon_delete_repo test_implicit_2" &&
+
+       git init test_implicit_2 &&
+
+       start_daemon -C test_implicit_2 &&
+
+       # renaming the .git directory will implicitly stop the daemon.
+       mv test_implicit_2/.git test_implicit_2/.xxx &&
+
+       # See [1] above.
+       #
+       sleep 1 &&
+       mkdir test_implicit_2/.git &&
+
+       test_must_fail git -C test_implicit_2 fsmonitor--daemon status
+'
+
+test_expect_success 'cannot start multiple daemons' '
+       test_when_finished "stop_daemon_delete_repo test_multiple" &&
+
+       git init test_multiple &&
+
+       start_daemon -C test_multiple &&
+
+       test_must_fail git -C test_multiple fsmonitor--daemon start 2>actual &&
+       grep "fsmonitor--daemon is already running" actual &&
+
+       git -C test_multiple fsmonitor--daemon stop &&
+       test_must_fail git -C test_multiple fsmonitor--daemon status
+'
+
+# These tests use the main repo in the trash directory
+
+test_expect_success 'setup' '
+       >tracked &&
+       >modified &&
+       >delete &&
+       >rename &&
+       mkdir dir1 &&
+       >dir1/tracked &&
+       >dir1/modified &&
+       >dir1/delete &&
+       >dir1/rename &&
+       mkdir dir2 &&
+       >dir2/tracked &&
+       >dir2/modified &&
+       >dir2/delete &&
+       >dir2/rename &&
+       mkdir dirtorename &&
+       >dirtorename/a &&
+       >dirtorename/b &&
+
+       cat >.gitignore <<-\EOF &&
+       .gitignore
+       expect*
+       actual*
+       flush*
+       trace*
+       EOF
+
+       git -c core.fsmonitor=false add . &&
+       test_tick &&
+       git -c core.fsmonitor=false commit -m initial &&
+
+       git config core.fsmonitor true
+'
+
+# The test already explicitly stopped (or tried to stop) the daemon.
+# This is here in case something else fails first.
+#
+redundant_stop_daemon () {
+       test_might_fail git fsmonitor--daemon stop
+}
+
+test_expect_success 'update-index implicitly starts daemon' '
+       test_when_finished redundant_stop_daemon &&
+
+       test_must_fail git fsmonitor--daemon status &&
+
+       GIT_TRACE2_EVENT="$PWD/.git/trace_implicit_1" \
+               git update-index --fsmonitor &&
+
+       git fsmonitor--daemon status &&
+       test_might_fail git fsmonitor--daemon stop &&
+
+       # Confirm that the trace2 log contains a record of the
+       # daemon starting.
+       test_subcommand git fsmonitor--daemon start <.git/trace_implicit_1
+'
+
+test_expect_success 'status implicitly starts daemon' '
+       test_when_finished redundant_stop_daemon &&
+
+       test_must_fail git fsmonitor--daemon status &&
+
+       GIT_TRACE2_EVENT="$PWD/.git/trace_implicit_2" \
+               git status >actual &&
+
+       git fsmonitor--daemon status &&
+       test_might_fail git fsmonitor--daemon stop &&
+
+       # Confirm that the trace2 log contains a record of the
+       # daemon starting.
+       test_subcommand git fsmonitor--daemon start <.git/trace_implicit_2
+'
+
+edit_files () {
+       echo 1 >modified &&
+       echo 2 >dir1/modified &&
+       echo 3 >dir2/modified &&
+       >dir1/untracked
+}
+
+delete_files () {
+       rm -f delete &&
+       rm -f dir1/delete &&
+       rm -f dir2/delete
+}
+
+create_files () {
+       echo 1 >new &&
+       echo 2 >dir1/new &&
+       echo 3 >dir2/new
+}
+
+rename_files () {
+       mv rename renamed &&
+       mv dir1/rename dir1/renamed &&
+       mv dir2/rename dir2/renamed
+}
+
+file_to_directory () {
+       rm -f delete &&
+       mkdir delete &&
+       echo 1 >delete/new
+}
+
+directory_to_file () {
+       rm -rf dir1 &&
+       echo 1 >dir1
+}
+
+# The next few test cases confirm that our fsmonitor daemon sees each type
+# of OS filesystem notification that we care about.  At this layer we just
+# ensure we are getting the OS notifications and do not try to confirm what
+# is reported by `git status`.
+#
+# We run a simple query after modifying the filesystem just to introduce
+# a bit of a delay so that the trace logging from the daemon has time to
+# get flushed to disk.
+#
+# We `reset` and `clean` at the bottom of each test (and before stopping the
+# daemon) because these commands might implicitly restart the daemon.
+
+clean_up_repo_and_stop_daemon () {
+       git reset --hard HEAD &&
+       git clean -fd &&
+       test_might_fail git fsmonitor--daemon stop &&
+       rm -f .git/trace
+}
+
+test_expect_success 'edit some files' '
+       test_when_finished clean_up_repo_and_stop_daemon &&
+
+       start_daemon --tf "$PWD/.git/trace" &&
+
+       edit_files &&
+
+       test-tool fsmonitor-client query --token 0 &&
+
+       grep "^event: dir1/modified$"  .git/trace &&
+       grep "^event: dir2/modified$"  .git/trace &&
+       grep "^event: modified$"       .git/trace &&
+       grep "^event: dir1/untracked$" .git/trace
+'
+
+test_expect_success 'create some files' '
+       test_when_finished clean_up_repo_and_stop_daemon &&
+
+       start_daemon --tf "$PWD/.git/trace" &&
+
+       create_files &&
+
+       test-tool fsmonitor-client query --token 0 &&
+
+       grep "^event: dir1/new$" .git/trace &&
+       grep "^event: dir2/new$" .git/trace &&
+       grep "^event: new$"      .git/trace
+'
+
+test_expect_success 'delete some files' '
+       test_when_finished clean_up_repo_and_stop_daemon &&
+
+       start_daemon --tf "$PWD/.git/trace" &&
+
+       delete_files &&
+
+       test-tool fsmonitor-client query --token 0 &&
+
+       grep "^event: dir1/delete$" .git/trace &&
+       grep "^event: dir2/delete$" .git/trace &&
+       grep "^event: delete$"      .git/trace
+'
+
+test_expect_success 'rename some files' '
+       test_when_finished clean_up_repo_and_stop_daemon &&
+
+       start_daemon --tf "$PWD/.git/trace" &&
+
+       rename_files &&
+
+       test-tool fsmonitor-client query --token 0 &&
+
+       grep "^event: dir1/rename$"  .git/trace &&
+       grep "^event: dir2/rename$"  .git/trace &&
+       grep "^event: rename$"       .git/trace &&
+       grep "^event: dir1/renamed$" .git/trace &&
+       grep "^event: dir2/renamed$" .git/trace &&
+       grep "^event: renamed$"      .git/trace
+'
+
+test_expect_success 'rename directory' '
+       test_when_finished clean_up_repo_and_stop_daemon &&
+
+       start_daemon --tf "$PWD/.git/trace" &&
+
+       mv dirtorename dirrenamed &&
+
+       test-tool fsmonitor-client query --token 0 &&
+
+       grep "^event: dirtorename/*$" .git/trace &&
+       grep "^event: dirrenamed/*$"  .git/trace
+'
+
+test_expect_success 'file changes to directory' '
+       test_when_finished clean_up_repo_and_stop_daemon &&
+
+       start_daemon --tf "$PWD/.git/trace" &&
+
+       file_to_directory &&
+
+       test-tool fsmonitor-client query --token 0 &&
+
+       grep "^event: delete$"     .git/trace &&
+       grep "^event: delete/new$" .git/trace
+'
+
+test_expect_success 'directory changes to a file' '
+       test_when_finished clean_up_repo_and_stop_daemon &&
+
+       start_daemon --tf "$PWD/.git/trace" &&
+
+       directory_to_file &&
+
+       test-tool fsmonitor-client query --token 0 &&
+
+       grep "^event: dir1$" .git/trace
+'
+
+# The next few test cases exercise the token-resync code.  When filesystem
+# drops events (because of filesystem velocity or because the daemon isn't
+# polling fast enough), we need to discard the cached data (relative to the
+# current token) and start collecting events under a new token.
+#
+# the 'test-tool fsmonitor-client flush' command can be used to send a
+# "flush" message to a running daemon and ask it to do a flush/resync.
+
+test_expect_success 'flush cached data' '
+       test_when_finished "stop_daemon_delete_repo test_flush" &&
+
+       git init test_flush &&
+
+       start_daemon -C test_flush --tf "$PWD/.git/trace_daemon" --tk true &&
+
+       # The daemon should have an initial token with no events in _0 and
+       # then a few (probably platform-specific number of) events in _1.
+       # These should both have the same <token_id>.
+
+       test-tool -C test_flush fsmonitor-client query --token "builtin:test_00000001:0" >actual_0 &&
+       nul_to_q <actual_0 >actual_q0 &&
+
+       >test_flush/file_1 &&
+       >test_flush/file_2 &&
+
+       test-tool -C test_flush fsmonitor-client query --token "builtin:test_00000001:0" >actual_1 &&
+       nul_to_q <actual_1 >actual_q1 &&
+
+       grep "file_1" actual_q1 &&
+
+       # Force a flush.  This will change the <token_id>, reset the <seq_nr>, and
+       # flush the file data.  Then create some events and ensure that the file
+       # again appears in the cache.  It should have the new <token_id>.
+
+       test-tool -C test_flush fsmonitor-client flush >flush_0 &&
+       nul_to_q <flush_0 >flush_q0 &&
+       grep "^builtin:test_00000002:0Q/Q$" flush_q0 &&
+
+       test-tool -C test_flush fsmonitor-client query --token "builtin:test_00000002:0" >actual_2 &&
+       nul_to_q <actual_2 >actual_q2 &&
+
+       grep "^builtin:test_00000002:0Q$" actual_q2 &&
+
+       >test_flush/file_3 &&
+
+       test-tool -C test_flush fsmonitor-client query --token "builtin:test_00000002:0" >actual_3 &&
+       nul_to_q <actual_3 >actual_q3 &&
+
+       grep "file_3" actual_q3
+'
+
+# The next few test cases create repos where the .git directory is NOT
+# inside the one of the working directory.  That is, where .git is a file
+# that points to a directory elsewhere.  This happens for submodules and
+# non-primary worktrees.
+
+test_expect_success 'setup worktree base' '
+       git init wt-base &&
+       echo 1 >wt-base/file1 &&
+       git -C wt-base add file1 &&
+       git -C wt-base commit -m "c1"
+'
+
+test_expect_success 'worktree with .git file' '
+       git -C wt-base worktree add ../wt-secondary &&
+
+       start_daemon -C wt-secondary \
+               --tf "$PWD/trace_wt_secondary" \
+               --t2 "$PWD/trace2_wt_secondary" &&
+
+       git -C wt-secondary fsmonitor--daemon stop &&
+       test_must_fail git -C wt-secondary fsmonitor--daemon status
+'
+
+# NEEDSWORK: Repeat one of the "edit" tests on wt-secondary and
+# confirm that we get the same events and behavior -- that is, that
+# fsmonitor--daemon correctly watches BOTH the working directory and
+# the external GITDIR directory and behaves the same as when ".git"
+# is a directory inside the working directory.
+
+test_expect_success 'cleanup worktrees' '
+       stop_daemon_delete_repo wt-secondary &&
+       stop_daemon_delete_repo wt-base
+'
+
+# The next few tests perform arbitrary/contrived file operations and
+# confirm that status is correct.  That is, that the data (or lack of
+# data) from fsmonitor doesn't cause incorrect results.  And doesn't
+# cause incorrect results when the untracked-cache is enabled.
+
+test_lazy_prereq UNTRACKED_CACHE '
+       git update-index --test-untracked-cache
+'
+
+test_expect_success 'Matrix: setup for untracked-cache,fsmonitor matrix' '
+       test_unconfig core.fsmonitor &&
+       git update-index --no-fsmonitor &&
+       test_might_fail git fsmonitor--daemon stop
+'
+
+matrix_clean_up_repo () {
+       git reset --hard HEAD &&
+       git clean -fd
+}
+
+matrix_try () {
+       uc=$1 &&
+       fsm=$2 &&
+       fn=$3 &&
+
+       if test $uc = true && test $fsm = false
+       then
+               # The untracked-cache is buggy when FSMonitor is
+               # DISABLED, so skip the tests for this matrix
+               # combination.
+               #
+               # We've observed random, occasional test failures on
+               # Windows and MacOS when the UC is turned on and FSM
+               # is turned off.  These are rare, but they do happen
+               # indicating that it is probably a race condition within
+               # the untracked cache itself.
+               #
+               # It usually happens when a test does F/D trickery and
+               # then the NEXT test fails because of extra status
+               # output from stale UC data from the previous test.
+               #
+               # Since FSMonitor is not involved in the error, skip
+               # the tests for this matrix combination.
+               #
+               return 0
+       fi &&
+
+       test_expect_success "Matrix[uc:$uc][fsm:$fsm] $fn" '
+               matrix_clean_up_repo &&
+               $fn &&
+               if test $uc = false && test $fsm = false
+               then
+                       git status --porcelain=v1 >.git/expect.$fn
+               else
+                       git status --porcelain=v1 >.git/actual.$fn &&
+                       test_cmp .git/expect.$fn .git/actual.$fn
+               fi
+       '
+}
+
+uc_values="false"
+test_have_prereq UNTRACKED_CACHE && uc_values="false true"
+for uc_val in $uc_values
+do
+       if test $uc_val = false
+       then
+               test_expect_success "Matrix[uc:$uc_val] disable untracked cache" '
+                       git config core.untrackedcache false &&
+                       git update-index --no-untracked-cache
+               '
+       else
+               test_expect_success "Matrix[uc:$uc_val] enable untracked cache" '
+                       git config core.untrackedcache true &&
+                       git update-index --untracked-cache
+               '
+       fi
+
+       fsm_values="false true"
+       for fsm_val in $fsm_values
+       do
+               if test $fsm_val = false
+               then
+                       test_expect_success "Matrix[uc:$uc_val][fsm:$fsm_val] disable fsmonitor" '
+                               test_unconfig core.fsmonitor &&
+                               git update-index --no-fsmonitor &&
+                               test_might_fail git fsmonitor--daemon stop
+                       '
+               else
+                       test_expect_success "Matrix[uc:$uc_val][fsm:$fsm_val] enable fsmonitor" '
+                               git config core.fsmonitor true &&
+                               git fsmonitor--daemon start &&
+                               git update-index --fsmonitor
+                       '
+               fi
+
+               matrix_try $uc_val $fsm_val edit_files
+               matrix_try $uc_val $fsm_val delete_files
+               matrix_try $uc_val $fsm_val create_files
+               matrix_try $uc_val $fsm_val rename_files
+               matrix_try $uc_val $fsm_val file_to_directory
+               matrix_try $uc_val $fsm_val directory_to_file
+
+               if test $fsm_val = true
+               then
+                       test_expect_success "Matrix[uc:$uc_val][fsm:$fsm_val] disable fsmonitor at end" '
+                               test_unconfig core.fsmonitor &&
+                               git update-index --no-fsmonitor &&
+                               test_might_fail git fsmonitor--daemon stop
+                       '
+               fi
+       done
+done
+
+test_done
index e489869dd94daf98f900d14d75a3da97f5f7ab34..ca45c4cd2c1a8a422e396fd4d29dee8c49c0c10e 100755 (executable)
@@ -312,16 +312,13 @@ test_expect_success 'cleans up MIDX when appropriate' '
                checksum=$(midx_checksum $objdir) &&
                test_path_is_file $midx &&
                test_path_is_file $midx-$checksum.bitmap &&
-               test_path_is_file $midx-$checksum.rev &&
 
                test_commit repack-3 &&
                GIT_TEST_MULTI_PACK_INDEX=0 git repack -Adb --write-midx &&
 
                test_path_is_file $midx &&
                test_path_is_missing $midx-$checksum.bitmap &&
-               test_path_is_missing $midx-$checksum.rev &&
                test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&
-               test_path_is_file $midx-$(midx_checksum $objdir).rev &&
 
                test_commit repack-4 &&
                GIT_TEST_MULTI_PACK_INDEX=0 git repack -Adb &&
@@ -354,7 +351,6 @@ test_expect_success '--write-midx with preferred bitmap tips' '
                test_line_count = 1 before &&
 
                rm -fr $midx-$(midx_checksum $objdir).bitmap &&
-               rm -fr $midx-$(midx_checksum $objdir).rev &&
                rm -fr $midx &&
 
                # instead of constructing the snapshot ourselves (c.f., the test
@@ -373,10 +369,61 @@ test_expect_success '--write-midx with preferred bitmap tips' '
        )
 '
 
+# The first argument is expected to be a filename
+# and that file should contain the name of a .idx
+# file. Send the list of objects in that .idx file
+# into stdout.
+get_sorted_objects_from_pack () {
+       git show-index <$(cat "$1") >raw &&
+       cut -d" " -f2 raw
+}
+
 test_expect_success '--write-midx -b packs non-kept objects' '
-       GIT_TRACE2_EVENT="$(pwd)/trace.txt" \
-               git repack --write-midx -a -b &&
-       test_subcommand_inexact git pack-objects --honor-pack-keep <trace.txt
+       git init repo &&
+       test_when_finished "rm -fr repo" &&
+       (
+               cd repo &&
+
+               # Create a kept pack-file
+               test_commit base &&
+               git repack -ad &&
+               find $objdir/pack -name "*.idx" >before &&
+               test_line_count = 1 before &&
+               before_name=$(cat before) &&
+               >${before_name%.idx}.keep &&
+
+               # Create a non-kept pack-file
+               test_commit other &&
+               git repack &&
+
+               # Create loose objects
+               test_commit loose &&
+
+               # Repack everything
+               git repack --write-midx -a -b -d &&
+
+               # There should be two pack-files now, the
+               # old, kept pack and the new, non-kept pack.
+               find $objdir/pack -name "*.idx" | sort >after &&
+               test_line_count = 2 after &&
+               find $objdir/pack -name "*.keep" >kept &&
+               kept_name=$(cat kept) &&
+               echo ${kept_name%.keep}.idx >kept-idx &&
+               test_cmp before kept-idx &&
+
+               # Get object list from the kept pack.
+               get_sorted_objects_from_pack before >old.objects &&
+
+               # Get object list from the one non-kept pack-file
+               comm -13 before after >new-pack &&
+               test_line_count = 1 new-pack &&
+               get_sorted_objects_from_pack new-pack >new.objects &&
+
+               # None of the objects in the new pack should
+               # exist within the kept pack.
+               comm -12 old.objects new.objects >shared.objects &&
+               test_must_be_empty shared.objects
+       )
 '
 
 test_expect_success TTY '--quiet disables progress' '
@@ -385,4 +432,54 @@ test_expect_success TTY '--quiet disables progress' '
        test_must_be_empty stderr
 '
 
+test_expect_success 'setup for update-server-info' '
+       git init update-server-info &&
+       test_commit -C update-server-info message
+'
+
+test_server_info_present () {
+       test_path_is_file update-server-info/.git/objects/info/packs &&
+       test_path_is_file update-server-info/.git/info/refs
+}
+
+test_server_info_missing () {
+       test_path_is_missing update-server-info/.git/objects/info/packs &&
+       test_path_is_missing update-server-info/.git/info/refs
+}
+
+test_server_info_cleanup () {
+       rm -f update-server-info/.git/objects/info/packs update-server-info/.git/info/refs &&
+       test_server_info_missing
+}
+
+test_expect_success 'updates server info by default' '
+       test_server_info_cleanup &&
+       git -C update-server-info repack &&
+       test_server_info_present
+'
+
+test_expect_success '-n skips updating server info' '
+       test_server_info_cleanup &&
+       git -C update-server-info repack -n &&
+       test_server_info_missing
+'
+
+test_expect_success 'repack.updateServerInfo=true updates server info' '
+       test_server_info_cleanup &&
+       git -C update-server-info -c repack.updateServerInfo=true repack &&
+       test_server_info_present
+'
+
+test_expect_success 'repack.updateServerInfo=false skips updating server info' '
+       test_server_info_cleanup &&
+       git -C update-server-info -c repack.updateServerInfo=false repack &&
+       test_server_info_missing
+'
+
+test_expect_success '-n overrides repack.updateServerInfo=true' '
+       test_server_info_cleanup &&
+       git -C update-server-info -c repack.updateServerInfo=true repack -n &&
+       test_server_info_missing
+'
+
 test_done
index 424c31c3287d352e135faf1754e221cc17eb8247..69356011713fad1add8044471f01f9d6d3dee892 100755 (executable)
@@ -98,6 +98,37 @@ test_expect_success 'grep should not segfault with a bad input' '
 
 test_invalid_grep_expression --and -e A
 
+test_pattern_type () {
+       H=$1 &&
+       HC=$2 &&
+       L=$3 &&
+       type=$4 &&
+       shift 4 &&
+
+       expected_str= &&
+       case "$type" in
+       BRE)
+               expected_str="${HC}ab:a+bc"
+               ;;
+       ERE)
+               expected_str="${HC}ab:abc"
+               ;;
+       FIX)
+               expected_str="${HC}ab:a+b*c"
+               ;;
+       *)
+               BUG "unknown pattern type '$type'"
+               ;;
+       esac &&
+       config_str="$@" &&
+
+       test_expect_success "grep $L with '$config_str' interpreted as $type" '
+               echo $expected_str >expected &&
+               git $config_str grep "a+b*c" $H ab >actual &&
+               test_cmp expected actual
+       '
+}
+
 for H in HEAD ''
 do
        case "$H" in
@@ -393,35 +424,13 @@ do
                git grep --no-recursive -n -e vvv $H -- t . >actual &&
                test_cmp expected actual
        '
-       test_expect_success "grep $L with grep.extendedRegexp=false" '
-               echo "${HC}ab:a+bc" >expected &&
-               git -c grep.extendedRegexp=false grep "a+b*c" $H ab >actual &&
-               test_cmp expected actual
-       '
 
-       test_expect_success "grep $L with grep.extendedRegexp=true" '
-               echo "${HC}ab:abc" >expected &&
-               git -c grep.extendedRegexp=true grep "a+b*c" $H ab >actual &&
-               test_cmp expected actual
-       '
 
-       test_expect_success "grep $L with grep.patterntype=basic" '
-               echo "${HC}ab:a+bc" >expected &&
-               git -c grep.patterntype=basic grep "a+b*c" $H ab >actual &&
-               test_cmp expected actual
-       '
-
-       test_expect_success "grep $L with grep.patterntype=extended" '
-               echo "${HC}ab:abc" >expected &&
-               git -c grep.patterntype=extended grep "a+b*c" $H ab >actual &&
-               test_cmp expected actual
-       '
-
-       test_expect_success "grep $L with grep.patterntype=fixed" '
-               echo "${HC}ab:a+b*c" >expected &&
-               git -c grep.patterntype=fixed grep "a+b*c" $H ab >actual &&
-               test_cmp expected actual
-       '
+       test_pattern_type "$H" "$HC" "$L" BRE -c grep.extendedRegexp=false
+       test_pattern_type "$H" "$HC" "$L" ERE -c grep.extendedRegexp=true
+       test_pattern_type "$H" "$HC" "$L" BRE -c grep.patternType=basic
+       test_pattern_type "$H" "$HC" "$L" ERE -c grep.patternType=extended
+       test_pattern_type "$H" "$HC" "$L" FIX -c grep.patternType=fixed
 
        test_expect_success PCRE "grep $L with grep.patterntype=perl" '
                echo "${HC}ab:a+b*c" >expected &&
@@ -433,59 +442,76 @@ do
                test_must_fail git -c grep.patterntype=perl grep "foo.*bar"
        '
 
-       test_expect_success "grep $L with grep.patternType=default and grep.extendedRegexp=true" '
-               echo "${HC}ab:abc" >expected &&
-               git \
-                       -c grep.patternType=default \
-                       -c grep.extendedRegexp=true \
-                       grep "a+b*c" $H ab >actual &&
-               test_cmp expected actual
-       '
-
-       test_expect_success "grep $L with grep.extendedRegexp=true and grep.patternType=default" '
-               echo "${HC}ab:abc" >expected &&
-               git \
-                       -c grep.extendedRegexp=true \
-                       -c grep.patternType=default \
-                       grep "a+b*c" $H ab >actual &&
-               test_cmp expected actual
-       '
-
-       test_expect_success "grep $L with grep.patternType=extended and grep.extendedRegexp=false" '
-               echo "${HC}ab:abc" >expected &&
-               git \
-                       -c grep.patternType=extended \
-                       -c grep.extendedRegexp=false \
-                       grep "a+b*c" $H ab >actual &&
-               test_cmp expected actual
-       '
-
-       test_expect_success "grep $L with grep.patternType=basic and grep.extendedRegexp=true" '
-               echo "${HC}ab:a+bc" >expected &&
-               git \
-                       -c grep.patternType=basic \
-                       -c grep.extendedRegexp=true \
-                       grep "a+b*c" $H ab >actual &&
-               test_cmp expected actual
-       '
-
-       test_expect_success "grep $L with grep.extendedRegexp=false and grep.patternType=extended" '
-               echo "${HC}ab:abc" >expected &&
-               git \
-                       -c grep.extendedRegexp=false \
-                       -c grep.patternType=extended \
-                       grep "a+b*c" $H ab >actual &&
-               test_cmp expected actual
-       '
-
-       test_expect_success "grep $L with grep.extendedRegexp=true and grep.patternType=basic" '
-               echo "${HC}ab:a+bc" >expected &&
-               git \
-                       -c grep.extendedRegexp=true \
-                       -c grep.patternType=basic \
-                       grep "a+b*c" $H ab >actual &&
-               test_cmp expected actual
-       '
+       test_pattern_type "$H" "$HC" "$L" ERE \
+               -c grep.patternType=default \
+               -c grep.extendedRegexp=true
+       test_pattern_type "$H" "$HC" "$L" ERE \
+               -c grep.extendedRegexp=true \
+               -c grep.patternType=default
+       test_pattern_type "$H" "$HC" "$L" ERE \
+               -c grep.patternType=extended \
+               -c grep.extendedRegexp=false
+       test_pattern_type "$H" "$HC" "$L" BRE \
+               -c grep.patternType=basic \
+               -c grep.extendedRegexp=true
+       test_pattern_type "$H" "$HC" "$L" ERE \
+               -c grep.extendedRegexp=false \
+               -c grep.patternType=extended
+       test_pattern_type "$H" "$HC" "$L" BRE \
+               -c grep.extendedRegexp=true \
+               -c grep.patternType=basic
+
+       # grep.extendedRegexp is last-one-wins
+       test_pattern_type "$H" "$HC" "$L" BRE \
+               -c grep.extendedRegexp=true \
+               -c grep.extendedRegexp=false
+
+       # grep.patternType=basic pays no attention to grep.extendedRegexp
+       test_pattern_type "$H" "$HC" "$L" BRE \
+               -c grep.extendedRegexp=true \
+               -c grep.patternType=basic \
+               -c grep.extendedRegexp=false
+
+       # grep.patternType=extended pays no attention to grep.extendedRegexp
+       test_pattern_type "$H" "$HC" "$L" ERE \
+               -c grep.extendedRegexp=true \
+               -c grep.patternType=extended \
+               -c grep.extendedRegexp=false
+
+       # grep.extendedRegexp is used with a last-one-wins grep.patternType=default
+       test_pattern_type "$H" "$HC" "$L" ERE \
+               -c grep.patternType=fixed \
+               -c grep.extendedRegexp=true \
+               -c grep.patternType=default
+
+       # grep.extendedRegexp is used with earlier grep.patternType=default
+       test_pattern_type "$H" "$HC" "$L" ERE \
+               -c grep.extendedRegexp=false \
+               -c grep.patternType=default \
+               -c grep.extendedRegexp=true
+
+       # grep.extendedRegexp is used with a last-one-loses grep.patternType=default
+       test_pattern_type "$H" "$HC" "$L" ERE \
+               -c grep.extendedRegexp=false \
+               -c grep.extendedRegexp=true \
+               -c grep.patternType=default
+
+       # grep.extendedRegexp and grep.patternType are both last-one-wins independently
+       test_pattern_type "$H" "$HC" "$L" BRE \
+               -c grep.patternType=default \
+               -c grep.extendedRegexp=true \
+               -c grep.patternType=basic
+
+       # grep.patternType=extended and grep.patternType=default
+       test_pattern_type "$H" "$HC" "$L" BRE \
+               -c grep.patternType=extended \
+               -c grep.patternType=default
+
+       # grep.patternType=[extended -> default -> fixed] (BRE)" '
+       test_pattern_type "$H" "$HC" "$L" FIX \
+               -c grep.patternType=extended \
+               -c grep.patternType=default \
+               -c grep.patternType=fixed
 
        test_expect_success "grep --count $L" '
                echo ${HC}ab:3 >expected &&
index ca3f24f8079b7acf491f8e8b0cb20c14e43272d3..9047d665a1049195ec03b64504c973559a677c36 100755 (executable)
@@ -11,9 +11,19 @@ test_expect_success GETTEXT_LOCALE 'setup' '
        export LC_ALL
 '
 
-test_have_prereq GETTEXT_LOCALE &&
-test-tool regex "HALLÓ" "Halló" ICASE &&
-test_set_prereq REGEX_LOCALE
+test_expect_success GETTEXT_LOCALE 'setup REGEX_LOCALE prerequisite' '
+       # This "test-tool" invocation is identical...
+       if test-tool regex "HALLÓ" "Halló" ICASE
+       then
+               test_set_prereq REGEX_LOCALE
+       else
+
+               # ... to this one, but this way "test_must_fail" will
+               # tell a segfault or abort() from the regexec() test
+               # itself
+               test_must_fail test-tool regex "HALLÓ" "Halló" ICASE
+       fi
+'
 
 test_expect_success REGEX_LOCALE 'grep literal string, no -F' '
        git grep -i "TILRAUN: Halló Heimur!" &&
index a10b20c87f1fbe85e706165eb8eeedf325c63b42..7a8e15beb833789c9edb9f301534eb9d3baf7273 100755 (executable)
@@ -548,4 +548,46 @@ test_expect_failure 'grep saves textconv cache in the appropriate repository' '
        test_path_is_file "$sub_textconv_cache"
 '
 
+test_expect_success 'grep partially-cloned submodule' '
+       # Set up clean superproject and submodule for partial cloning.
+       test_config_global protocol.file.allow always &&
+       git init super &&
+       git init super/sub &&
+       (
+               cd super &&
+               test_commit --no-tag "Add file in superproject" \
+                       super-file "Some content for super-file" &&
+               test_commit -C sub --no-tag "Add file in submodule" \
+                       sub-file "Some content for sub-file" &&
+               git submodule add ./sub &&
+               git commit -m "Add other as submodule sub" &&
+               test_tick &&
+               test_commit -C sub --no-tag --append "Update file in submodule" \
+                       sub-file "Some more content for sub-file" &&
+               git add sub &&
+               git commit -m "Update submodule" &&
+               test_tick &&
+               git config --local uploadpack.allowfilter 1 &&
+               git config --local uploadpack.allowanysha1inwant 1 &&
+               git -C sub config --local uploadpack.allowfilter 1 &&
+               git -C sub config --local uploadpack.allowanysha1inwant 1
+       ) &&
+       # Clone the superproject & submodule, then make sure we can lazy-fetch submodule objects.
+       git clone --filter=blob:none --also-filter-submodules \
+               --recurse-submodules "file://$(pwd)/super" partial &&
+       (
+               cd partial &&
+               cat >expect <<-\EOF &&
+               HEAD^:sub/sub-file:Some content for sub-file
+               HEAD^:super-file:Some content for super-file
+               EOF
+
+               GIT_TRACE2_EVENT="$(pwd)/trace2.log" git grep -e content \
+                       --recurse-submodules HEAD^ >actual &&
+               test_cmp expect actual &&
+               # Verify that we actually fetched data from the promisor remote:
+               grep \"category\":\"promisor\",\"key\":\"fetch_count\",\"value\":\"1\" trace2.log
+       )
+'
+
 test_done
index 590b99bbb6f7bbc2182acf528a4cef566075cc68..eb595645657fad7f1dce4cf5fca6ac57eeb6bfce 100755 (executable)
@@ -83,10 +83,13 @@ test_expect_success 'setup' '
 
 # The test below covers a special case: the sparsity patterns exclude '/b' and
 # sparse checkout is enabled, but the path exists in the working tree (e.g.
-# manually created after `git sparse-checkout init`). git grep should skip it.
+# manually created after `git sparse-checkout init`).  Although b is marked
+# as SKIP_WORKTREE, git grep should notice it IS present in the worktree and
+# report it.
 test_expect_success 'working tree grep honors sparse checkout' '
        cat >expect <<-EOF &&
        a:text
+       b:new-text
        EOF
        test_when_finished "rm -f b" &&
        echo "new-text" >b &&
@@ -126,12 +129,16 @@ test_expect_success 'grep --cached searches entries with the SKIP_WORKTREE bit'
 '
 
 # Note that sub2/ is present in the worktree but it is excluded by the sparsity
-# patterns, so grep should not recurse into it.
+# patterns.  We also explicitly mark it as SKIP_WORKTREE in case it got cleared
+# by previous git commands.  Thus sub2 starts as SKIP_WORKTREE but since it is
+# present in the working tree, grep should recurse into it.
 test_expect_success 'grep --recurse-submodules honors sparse checkout in submodule' '
        cat >expect <<-EOF &&
        a:text
        sub/B/b:text
+       sub2/a:text
        EOF
+       git update-index --skip-worktree sub2 &&
        git grep --recurse-submodules "text" >actual &&
        test_cmp expect actual
 '
index eacd49ade636f5be6166e05d4e200b9a324073be..b067983ba1c6adf152131c96a67fc7a709e6666b 100755 (executable)
@@ -19,6 +19,48 @@ test_expect_success 'setup ' '
        GIT_AUTHOR_NAME=Number2 git commit -a -m Second --date="2010-01-01 20:00:00"
 '
 
+test_expect_success 'usage: <bad rev>' '
+       cat >expect <<-\EOF &&
+       fatal: Not a valid object name HEAD2
+       EOF
+       test_must_fail git cat-file --textconv HEAD2 2>actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'usage: <bad rev>:<bad path>' '
+       cat >expect <<-\EOF &&
+       fatal: invalid object name '\''HEAD2'\''.
+       EOF
+       test_must_fail git cat-file --textconv HEAD2:two.bin 2>actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'usage: <rev>:<bad path>' '
+       cat >expect <<-\EOF &&
+       fatal: path '\''two.bin'\'' does not exist in '\''HEAD'\''
+       EOF
+       test_must_fail git cat-file --textconv HEAD:two.bin 2>actual &&
+       test_cmp expect actual
+'
+
+
+test_expect_success 'usage: <rev> with no <path>' '
+       cat >expect <<-\EOF &&
+       fatal: <object>:<path> required, only <object> '\''HEAD'\'' given
+       EOF
+       test_must_fail git cat-file --textconv HEAD 2>actual &&
+       test_cmp expect actual
+'
+
+
+test_expect_success 'usage: <bad rev>:<good (in HEAD) path>' '
+       cat >expect <<-\EOF &&
+       fatal: invalid object name '\''HEAD2'\''.
+       EOF
+       test_must_fail git cat-file --textconv HEAD2:one.bin 2>actual &&
+       test_cmp expect actual
+'
+
 cat >expected <<EOF
 bin: test version 2
 EOF
index aa0c20499ba3e9620739dee08fbdb118b62446e4..42694fe58419fbf13e78f72dde91a0ac2f61e2cb 100755 (executable)
@@ -539,7 +539,7 @@ test_expect_success $PREREQ "--validate respects relative core.hooksPath path" '
        test_path_is_file my-hooks.ran &&
        cat >expect <<-EOF &&
        fatal: longline.patch: rejected by sendemail-validate hook
-       fatal: command '"'"'my-hooks/sendemail-validate'"'"' died with exit code 1
+       fatal: command '"'"'git hook run --ignore-missing sendemail-validate -- <patch>'"'"' died with exit code 1
        warning: no patches were sent
        EOF
        test_cmp expect actual
@@ -558,7 +558,7 @@ test_expect_success $PREREQ "--validate respects absolute core.hooksPath path" '
        test_path_is_file my-hooks.ran &&
        cat >expect <<-EOF &&
        fatal: longline.patch: rejected by sendemail-validate hook
-       fatal: command '"'"'$hooks_path/sendemail-validate'"'"' died with exit code 1
+       fatal: command '"'"'git hook run --ignore-missing sendemail-validate -- <patch>'"'"' died with exit code 1
        warning: no patches were sent
        EOF
        test_cmp expect actual
@@ -2288,9 +2288,7 @@ test_expect_success $PREREQ 'cmdline in-reply-to used with --no-thread' '
 '
 
 test_expect_success $PREREQ 'invoke hook' '
-       mkdir -p .git/hooks &&
-
-       write_script .git/hooks/sendemail-validate <<-\EOF &&
+       test_hook sendemail-validate <<-\EOF &&
        # test that we have the correct environment variable, pwd, and
        # argument
        case "$GIT_DIR" in
index 7b2049caa0ce496f5c1b07152a3092363fb71c64..946ef85eb9803f005da614bf4f58aa3949f4d882 100755 (executable)
@@ -1,7 +1,6 @@
 #!/bin/sh
 test_description='git svn rmdir'
 
-TEST_PASSES_SANITIZE_LEAK=true
 . ./lib-git-svn.sh
 
 test_expect_success 'initialize repo' '
index 3320b1f39cf65ca770a6257e62779eb397eda8c2..ead404589eb622edd30adda06ad9684517b7e1f4 100755 (executable)
@@ -5,7 +5,6 @@
 
 test_description='git svn respects rewriteRoot during rebuild'
 
-TEST_PASSES_SANITIZE_LEAK=true
 . ./lib-git-svn.sh
 
 mkdir import
index 9871f5abc933b8f86b33f1efcbea5e1966b55eee..783e3ba0c531e380eda014a3c706d143118809f8 100755 (executable)
@@ -5,7 +5,6 @@
 
 test_description='git svn partial-rebuild tests'
 
-TEST_PASSES_SANITIZE_LEAK=true
 . ./lib-git-svn.sh
 
 test_expect_success 'initialize svnrepo' '
index d9fd111c1052a251b918ad7e66f30e52c2b4574c..d8128430a8d0833b3806aa7211c17008146cec92 100755 (executable)
@@ -5,7 +5,6 @@
 
 test_description='git svn branch for subproject clones'
 
-TEST_PASSES_SANITIZE_LEAK=true
 . ./lib-git-svn.sh
 
 test_expect_success 'initialize svnrepo' '
index 63beeb9f620e4814cf96975918bef25f52555491..ff21a12ee6e4eb1557eca22bb60ab2e01aa6b909 100755 (executable)
@@ -502,6 +502,13 @@ test_expect_success 'path limiting with import-marks does not lose unmodified fi
        grep file0 actual
 '
 
+test_expect_success 'path limiting works' '
+       git fast-export simple -- file >actual &&
+       sed -ne "s/^M .* //p" <actual | sort -u >actual.files &&
+       echo file >expect &&
+       test_cmp expect actual.files
+'
+
 test_expect_success 'avoid corrupt stream with non-existent mark' '
        test_create_repo avoid_non_existent_mark &&
        (
index 3167473b3031c66555883745d296a881593b8272..8cb582f0e610d407ec5ba560740606629e5bc9da 100755 (executable)
@@ -34,7 +34,7 @@ EOF
 #
 # This will check that gitweb HTTP header contains proposed filename
 # as <basename> with '.tar' suffix added, and that generated tarfile
-# (gitweb message body) has <prefix> as prefix for al files in tarfile
+# (gitweb message body) has <prefix> as prefix for all files in tarfile
 #
 # <prefix> default to <basename>
 check_snapshot () {
@@ -207,4 +207,17 @@ test_expect_success 'xss checks' '
        xss "" "$TAG+"
 '
 
+no_http_equiv_content_type() {
+       gitweb_run "$@" &&
+       ! grep -E "http-equiv=['\"]?content-type" gitweb.body
+}
+
+# See: <https://html.spec.whatwg.org/dev/semantics.html#attr-meta-http-equiv-content-type>
+test_expect_success 'no http-equiv="content-type" in XHTML' '
+       no_http_equiv_content_type &&
+       no_http_equiv_content_type "p=.git" &&
+       no_http_equiv_content_type "p=.git;a=log" &&
+       no_http_equiv_content_type "p=.git;a=tree"
+'
+
 test_done
index 806005a793a3ed70492d08878d99fae499464ca9..8b30062c0cfcc80a0cdff0f73367be43246280b3 100755 (executable)
@@ -277,16 +277,21 @@ test_expect_success 'run hook p4-pre-submit before submit' '
                git commit -m "add hello.txt" &&
                git config git-p4.skipSubmitEdit true &&
                git p4 submit --dry-run >out &&
-               grep "Would apply" out &&
-               mkdir -p .git/hooks &&
-               write_script .git/hooks/p4-pre-submit <<-\EOF &&
-               exit 0
-               EOF
+               grep "Would apply" out
+       ) &&
+       test_hook -C "$git" p4-pre-submit <<-\EOF &&
+       exit 0
+       EOF
+       (
+               cd "$git" &&
                git p4 submit --dry-run >out &&
-               grep "Would apply" out &&
-               write_script .git/hooks/p4-pre-submit <<-\EOF &&
-               exit 1
-               EOF
+               grep "Would apply" out
+       ) &&
+       test_hook -C "$git" --clobber p4-pre-submit <<-\EOF &&
+       exit 1
+       EOF
+       (
+               cd "$git" &&
                test_must_fail git p4 submit --dry-run >errs 2>&1 &&
                ! grep "Would apply" errs
        )
index 98c628063288bca40f08664abf329340f05a28fa..31526e6b64156852a5d5d528c505dd17a16a8c34 100755 (executable)
@@ -1444,6 +1444,161 @@ test_expect_success 'git checkout - with --detach, complete only references' '
        EOF
 '
 
+test_expect_success 'setup sparse-checkout tests' '
+       # set up sparse-checkout repo
+       git init sparse-checkout &&
+       (
+               cd sparse-checkout &&
+               mkdir -p folder1/0/1 folder2/0 folder3 &&
+               touch folder1/0/1/t.txt &&
+               touch folder2/0/t.txt &&
+               touch folder3/t.txt &&
+               git add . &&
+               git commit -am "Initial commit"
+       )
+'
+
+test_expect_success 'sparse-checkout completes subcommands' '
+       test_completion "git sparse-checkout " <<-\EOF
+       list Z
+       init Z
+       set Z
+       add Z
+       reapply Z
+       disable Z
+       EOF
+'
+
+test_expect_success 'cone mode sparse-checkout completes directory names' '
+       # initialize sparse-checkout definitions
+       git -C sparse-checkout sparse-checkout set --cone folder1/0 folder3 &&
+
+       # test tab completion
+       (
+               cd sparse-checkout &&
+               test_completion "git sparse-checkout set f" <<-\EOF
+               folder1/
+               folder2/
+               folder3/
+               EOF
+       ) &&
+
+       (
+               cd sparse-checkout &&
+               test_completion "git sparse-checkout set folder1/" <<-\EOF
+               folder1/0/
+               EOF
+       ) &&
+
+       (
+               cd sparse-checkout &&
+               test_completion "git sparse-checkout set folder1/0/" <<-\EOF
+               folder1/0/1/
+               EOF
+       ) &&
+
+       (
+               cd sparse-checkout/folder1 &&
+               test_completion "git sparse-checkout add 0" <<-\EOF
+               0/
+               EOF
+       )
+'
+
+test_expect_success 'cone mode sparse-checkout completes directory names with spaces and accents' '
+       # reset sparse-checkout
+       git -C sparse-checkout sparse-checkout disable &&
+       (
+               cd sparse-checkout &&
+               mkdir "directory with spaces" &&
+               mkdir "directory-with-áccent" &&
+               >"directory with spaces/randomfile" &&
+               >"directory-with-áccent/randomfile" &&
+               git add . &&
+               git commit -m "Add directory with spaces and directory with accent" &&
+               git sparse-checkout set --cone "directory with spaces" \
+                       "directory-with-áccent" &&
+               test_completion "git sparse-checkout add dir" <<-\EOF &&
+               directory with spaces/
+               directory-with-áccent/
+               EOF
+               rm -rf "directory with spaces" &&
+               rm -rf "directory-with-áccent" &&
+               git add . &&
+               git commit -m "Remove directory with spaces and directory with accent"
+       )
+'
+
+# use FUNNYNAMES to avoid running on Windows, which doesn't permit tabs in paths
+test_expect_success FUNNYNAMES 'cone mode sparse-checkout completes directory names with tabs' '
+       # reset sparse-checkout
+       git -C sparse-checkout sparse-checkout disable &&
+       (
+               cd sparse-checkout &&
+               mkdir "$(printf "directory\twith\ttabs")" &&
+               >"$(printf "directory\twith\ttabs")/randomfile" &&
+               git add . &&
+               git commit -m "Add directory with tabs" &&
+               git sparse-checkout set --cone \
+                       "$(printf "directory\twith\ttabs")" &&
+               test_completion "git sparse-checkout add dir" <<-\EOF &&
+               directory       with    tabs/
+               EOF
+               rm -rf "$(printf "directory\twith\ttabs")" &&
+               git add . &&
+               git commit -m "Remove directory with tabs"
+       )
+'
+
+# use FUNNYNAMES to avoid running on Windows, and !CYGWIN for Cygwin, as neither permit backslashes in paths
+test_expect_success FUNNYNAMES,!CYGWIN 'cone mode sparse-checkout completes directory names with backslashes' '
+       # reset sparse-checkout
+       git -C sparse-checkout sparse-checkout disable &&
+       (
+               cd sparse-checkout &&
+               mkdir "directory\with\backslashes" &&
+               >"directory\with\backslashes/randomfile" &&
+               git add . &&
+               git commit -m "Add directory with backslashes" &&
+               git sparse-checkout set --cone \
+                       "directory\with\backslashes" &&
+               test_completion "git sparse-checkout add dir" <<-\EOF &&
+               directory\with\backslashes/
+               EOF
+               rm -rf "directory\with\backslashes" &&
+               git add . &&
+               git commit -m "Remove directory with backslashes"
+       )
+'
+
+test_expect_success 'non-cone mode sparse-checkout uses bash completion' '
+       # reset sparse-checkout repo to non-cone mode
+       git -C sparse-checkout sparse-checkout disable &&
+       git -C sparse-checkout sparse-checkout set --no-cone &&
+
+       (
+               cd sparse-checkout &&
+               # expected to be empty since we have not configured
+               # custom completion for non-cone mode
+               test_completion "git sparse-checkout set f" <<-\EOF
+
+               EOF
+       )
+'
+
+test_expect_success 'git sparse-checkout set --cone completes directory names' '
+       git -C sparse-checkout sparse-checkout disable &&
+
+       (
+               cd sparse-checkout &&
+               test_completion "git sparse-checkout set --cone f" <<-\EOF
+               folder1/
+               folder2/
+               folder3/
+               EOF
+       )
+'
+
 test_expect_success 'git switch - with -d, complete all references' '
        test_completion "git switch -d " <<-\EOF
        HEAD Z
@@ -2396,27 +2551,33 @@ test_expect_success 'options with value' '
 '
 
 test_expect_success 'sourcing the completion script clears cached commands' '
-       __git_compute_all_commands &&
-       verbose test -n "$__git_all_commands" &&
-       . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
-       verbose test -z "$__git_all_commands"
+       (
+               __git_compute_all_commands &&
+               verbose test -n "$__git_all_commands" &&
+               . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
+               verbose test -z "$__git_all_commands"
+       )
 '
 
 test_expect_success 'sourcing the completion script clears cached merge strategies' '
-       __git_compute_merge_strategies &&
-       verbose test -n "$__git_merge_strategies" &&
-       . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
-       verbose test -z "$__git_merge_strategies"
+       (
+               __git_compute_merge_strategies &&
+               verbose test -n "$__git_merge_strategies" &&
+               . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
+               verbose test -z "$__git_merge_strategies"
+       )
 '
 
 test_expect_success 'sourcing the completion script clears cached --options' '
-       __gitcomp_builtin checkout &&
-       verbose test -n "$__gitcomp_builtin_checkout" &&
-       __gitcomp_builtin notes_edit &&
-       verbose test -n "$__gitcomp_builtin_notes_edit" &&
-       . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
-       verbose test -z "$__gitcomp_builtin_checkout" &&
-       verbose test -z "$__gitcomp_builtin_notes_edit"
+       (
+               __gitcomp_builtin checkout &&
+               verbose test -n "$__gitcomp_builtin_checkout" &&
+               __gitcomp_builtin notes_edit &&
+               verbose test -n "$__gitcomp_builtin_notes_edit" &&
+               . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
+               verbose test -z "$__gitcomp_builtin_checkout" &&
+               verbose test -z "$__gitcomp_builtin_notes_edit"
+       )
 '
 
 test_expect_success 'option aliases are not shown by default' '
@@ -2424,12 +2585,45 @@ test_expect_success 'option aliases are not shown by default' '
 '
 
 test_expect_success 'option aliases are shown with GIT_COMPLETION_SHOW_ALL' '
-       . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
-       GIT_COMPLETION_SHOW_ALL=1 && export GIT_COMPLETION_SHOW_ALL &&
-       test_completion "git clone --recurs" <<-\EOF
-       --recurse-submodules Z
-       --recursive Z
-       EOF
+       (
+               . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
+               GIT_COMPLETION_SHOW_ALL=1 && export GIT_COMPLETION_SHOW_ALL &&
+               test_completion "git clone --recurs" <<-\EOF
+               --recurse-submodules Z
+               --recursive Z
+               EOF
+       )
+'
+
+test_expect_success 'plumbing commands are excluded without GIT_COMPLETION_SHOW_ALL_COMMANDS' '
+       (
+               . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
+               sane_unset GIT_TESTING_PORCELAIN_COMMAND_LIST &&
+
+               # Just mainporcelain, not plumbing commands
+               run_completion "git c" &&
+               grep checkout out &&
+               ! grep cat-file out
+       )
+'
+
+test_expect_success 'all commands are shown with GIT_COMPLETION_SHOW_ALL_COMMANDS (also main non-builtin)' '
+       (
+               . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
+               GIT_COMPLETION_SHOW_ALL_COMMANDS=1 &&
+               export GIT_COMPLETION_SHOW_ALL_COMMANDS &&
+               sane_unset GIT_TESTING_PORCELAIN_COMMAND_LIST &&
+
+               # Both mainporcelain and plumbing commands
+               run_completion "git c" &&
+               grep checkout out &&
+               grep cat-file out &&
+
+               # Check "gitk", a "main" command, but not a built-in + more plumbing
+               run_completion "git g" &&
+               grep gitk out &&
+               grep get-tar-commit-id out
+       )
 '
 
 test_expect_success '__git_complete' '
index c3d38aaccbd526be398416de3a942f6335aa9bb4..93c03380d449668fb81927e4ce17dda645bd0715 100644 (file)
@@ -329,7 +329,7 @@ test_commit () {
        else
                $echo "${3-$1}" >"$indir$file"
        fi &&
-       git ${indir:+ -C "$indir"} add "$file" &&
+       git ${indir:+ -C "$indir"} add -- "$file" &&
        if test -z "$notick"
        then
                test_tick
@@ -551,6 +551,82 @@ write_script () {
        chmod +x "$1"
 }
 
+# Usage: test_hook [options] <hook-name> <<-\EOF
+#
+#   -C <dir>:
+#      Run all git commands in directory <dir>
+#   --setup
+#      Setup a hook for subsequent tests, i.e. don't remove it in a
+#      "test_when_finished"
+#   --clobber
+#      Overwrite an existing <hook-name>, if it exists. Implies
+#      --setup (i.e. the "test_when_finished" is assumed to have been
+#      set up already).
+#    --disable
+#      Disable (chmod -x) an existing <hook-name>, which must exist.
+#    --remove
+#      Remove (rm -f) an existing <hook-name>, which must exist.
+test_hook () {
+       setup= &&
+       clobber= &&
+       disable= &&
+       remove= &&
+       indir= &&
+       while test $# != 0
+       do
+               case "$1" in
+               -C)
+                       indir="$2" &&
+                       shift
+                       ;;
+               --setup)
+                       setup=t
+                       ;;
+               --clobber)
+                       clobber=t
+                       ;;
+               --disable)
+                       disable=t
+                       ;;
+               --remove)
+                       remove=t
+                       ;;
+               -*)
+                       BUG "invalid argument: $1"
+                       ;;
+               *)
+                       break
+                       ;;
+               esac &&
+               shift
+       done &&
+
+       git_dir=$(git -C "$indir" rev-parse --absolute-git-dir) &&
+       hook_dir="$git_dir/hooks" &&
+       hook_file="$hook_dir/$1" &&
+       if test -n "$disable$remove"
+       then
+               test_path_is_file "$hook_file" &&
+               if test -n "$disable"
+               then
+                       chmod -x "$hook_file"
+               elif test -n "$remove"
+               then
+                       rm -f "$hook_file"
+               fi &&
+               return 0
+       fi &&
+       if test -z "$clobber"
+       then
+               test_path_is_missing "$hook_file"
+       fi &&
+       if test -z "$setup$clobber"
+       then
+               test_when_finished "rm \"$hook_file\""
+       fi &&
+       write_script "$hook_file"
+}
+
 # Use test_set_prereq to tell that a particular prerequisite is available.
 # The prerequisite can later be checked for in two ways:
 #
@@ -856,6 +932,16 @@ test_path_is_file () {
        fi
 }
 
+test_path_is_file_not_symlink () {
+       test "$#" -ne 1 && BUG "1 param"
+       test_path_is_file "$1" &&
+       if test -h "$1"
+       then
+               echo "$1 shouldn't be a symbolic link"
+               false
+       fi
+}
+
 test_path_is_dir () {
        test "$#" -ne 1 && BUG "1 param"
        if ! test -d "$1"
@@ -865,6 +951,16 @@ test_path_is_dir () {
        fi
 }
 
+test_path_is_dir_not_symlink () {
+       test "$#" -ne 1 && BUG "1 param"
+       test_path_is_dir "$1" &&
+       if test -h "$1"
+       then
+               echo "$1 shouldn't be a symbolic link"
+               false
+       fi
+}
+
 test_path_exists () {
        test "$#" -ne 1 && BUG "1 param"
        if ! test -e "$1"
@@ -874,6 +970,15 @@ test_path_exists () {
        fi
 }
 
+test_path_is_symlink () {
+       test "$#" -ne 1 && BUG "1 param"
+       if ! test -h "$1"
+       then
+               echo "Symbolic link $1 doesn't exist"
+               false
+       fi
+}
+
 # Check if the directory exists and is empty as expected, barf otherwise.
 test_dir_is_empty () {
        test "$#" -ne 1 && BUG "1 param"
@@ -1759,40 +1864,6 @@ test_subcommand () {
        fi
 }
 
-# Check that the given command was invoked as part of the
-# trace2-format trace on stdin, but without an exact set of
-# arguments.
-#
-#      test_subcommand [!] <command> <args>... < <trace>
-#
-# For example, to look for an invocation of "git pack-objects"
-# with the "--honor-pack-keep" argument, use
-#
-#      GIT_TRACE2_EVENT=event.log git repack ... &&
-#      test_subcommand git pack-objects --honor-pack-keep <event.log
-#
-# If the first parameter passed is !, this instead checks that
-# the given command was not called.
-#
-test_subcommand_inexact () {
-       local negate=
-       if test "$1" = "!"
-       then
-               negate=t
-               shift
-       fi
-
-       local expr=$(printf '"%s".*' "$@")
-       expr="${expr%,}"
-
-       if test -n "$negate"
-       then
-               ! grep "\"event\":\"child_start\".*\[$expr\]"
-       else
-               grep "\"event\":\"child_start\".*\[$expr\]"
-       fi
-}
-
 # Check that the given command was invoked as part of the
 # trace2-format trace on stdin.
 #
@@ -1840,3 +1911,36 @@ test_region () {
 test_readlink () {
        perl -le 'print readlink($_) for @ARGV' "$@"
 }
+
+# Set mtime to a fixed "magic" timestamp in mid February 2009, before we
+# run an operation that may or may not touch the file.  If the file was
+# touched, its timestamp will not accidentally have such an old timestamp,
+# as long as your filesystem clock is reasonably correct.  To verify the
+# timestamp, follow up with test_is_magic_mtime.
+#
+# An optional increment to the magic timestamp may be specified as second
+# argument.
+test_set_magic_mtime () {
+       local inc=${2:-0} &&
+       local mtime=$((1234567890 + $inc)) &&
+       test-tool chmtime =$mtime "$1" &&
+       test_is_magic_mtime "$1" $inc
+}
+
+# Test whether the given file has the "magic" mtime set.  This is meant to
+# be used in combination with test_set_magic_mtime.
+#
+# An optional increment to the magic timestamp may be specified as second
+# argument.  Usually, this should be the same increment which was used for
+# the associated test_set_magic_mtime.
+test_is_magic_mtime () {
+       local inc=${2:-0} &&
+       local mtime=$((1234567890 + $inc)) &&
+       echo $mtime >.git/test-mtime-expect &&
+       test-tool chmtime --get "$1" >.git/test-mtime-actual &&
+       test_cmp .git/test-mtime-expect .git/test-mtime-actual
+       local ret=$?
+       rm -f .git/test-mtime-expect
+       rm -f .git/test-mtime-actual
+       return $ret
+}
index 0f7a137c7d8d1ba15cc88f04c471aff4fcf7ecf6..8ba5ca1534518a5f35e50a6d27a81d1a06282720 100644 (file)
 # t/ subdirectory and are run in 'trash directory' subdirectory.
 if test -z "$TEST_DIRECTORY"
 then
-       # We allow tests to override this, in case they want to run tests
-       # outside of t/, e.g. for running tests on the test library
-       # itself.
-       TEST_DIRECTORY=$(pwd)
-else
        # ensure that TEST_DIRECTORY is an absolute path so that it
        # is valid even if the current working directory is changed
+       TEST_DIRECTORY=$(pwd)
+else
+       # The TEST_DIRECTORY will always be the path to the "t"
+       # directory in the git.git checkout. This is overridden by
+       # e.g. t/lib-subtest.sh, but only because its $(pwd) is
+       # different. Those tests still set "$TEST_DIRECTORY" to the
+       # same path.
+       #
+       # See use of "$GIT_BUILD_DIR" and "$TEST_DIRECTORY" below for
+       # hard assumptions about "$GIT_BUILD_DIR/t" existing and being
+       # the "$TEST_DIRECTORY", and e.g. "$TEST_DIRECTORY/helper"
+       # needing to exist.
        TEST_DIRECTORY=$(cd "$TEST_DIRECTORY" && pwd) || exit 1
 fi
 if test -z "$TEST_OUTPUT_DIRECTORY"
@@ -34,19 +41,42 @@ then
        # elsewhere
        TEST_OUTPUT_DIRECTORY=$TEST_DIRECTORY
 fi
-GIT_BUILD_DIR="$TEST_DIRECTORY"/..
+GIT_BUILD_DIR="${TEST_DIRECTORY%/t}"
+if test "$TEST_DIRECTORY" = "$GIT_BUILD_DIR"
+then
+       echo "PANIC: Running in a $TEST_DIRECTORY that doesn't end in '/t'?" >&2
+       exit 1
+fi
+
+# Prepend a string to a VAR using an arbitrary ":" delimiter, not
+# adding the delimiter if VAR or VALUE is empty. I.e. a generalized:
+#
+#      VAR=$1${VAR:+${1:+$2}$VAR}
+#
+# Usage (using ":" as the $2 delimiter):
+#
+#      prepend_var VAR : VALUE
+prepend_var () {
+       eval "$1=$3\${$1:+${3:+$2}\$$1}"
+}
+
+# If [AL]SAN is in effect we want to abort so that we notice
+# problems. The GIT_SAN_OPTIONS variable can be used to set common
+# defaults shared between [AL]SAN_OPTIONS.
+prepend_var GIT_SAN_OPTIONS : abort_on_error=1
+prepend_var GIT_SAN_OPTIONS : strip_path_prefix=\"$GIT_BUILD_DIR/\"
 
 # If we were built with ASAN, it may complain about leaks
 # of program-lifetime variables. Disable it by default to lower
 # the noise level. This needs to happen at the start of the script,
 # before we even do our "did we build git yet" check (since we don't
 # want that one to complain to stderr).
-: ${ASAN_OPTIONS=detect_leaks=0:abort_on_error=1}
+prepend_var ASAN_OPTIONS : $GIT_SAN_OPTIONS
+prepend_var ASAN_OPTIONS : detect_leaks=0
 export ASAN_OPTIONS
 
-# If LSAN is in effect we _do_ want leak checking, but we still
-# want to abort so that we notice the problems.
-: ${LSAN_OPTIONS=abort_on_error=1}
+prepend_var LSAN_OPTIONS : $GIT_SAN_OPTIONS
+prepend_var LSAN_OPTIONS : fast_unwind_on_malloc=0
 export LSAN_OPTIONS
 
 if test ! -f "$GIT_BUILD_DIR"/GIT-BUILD-OPTIONS
@@ -449,6 +479,8 @@ unset VISUAL EMAIL LANGUAGE $("$PERL_PATH" -e '
 unset XDG_CACHE_HOME
 unset XDG_CONFIG_HOME
 unset GITPERLLIB
+unset GIT_TRACE2_PARENT_NAME
+unset GIT_TRACE2_PARENT_SID
 TEST_AUTHOR_LOCALNAME=author
 TEST_AUTHOR_DOMAIN=example.com
 GIT_AUTHOR_EMAIL=${TEST_AUTHOR_LOCALNAME}@${TEST_AUTHOR_DOMAIN}
@@ -503,9 +535,10 @@ case $GIT_TEST_FSYNC in
        ;;
 esac
 
-# Add libc MALLOC and MALLOC_PERTURB test
-# only if we are not executing the test with valgrind
+# Add libc MALLOC and MALLOC_PERTURB test only if we are not executing
+# the test with valgrind and have not compiled with SANITIZE=address.
 if test -n "$valgrind" ||
+   test -n "$SANITIZE_ADDRESS" ||
    test -n "$TEST_NO_MALLOC_CHECK"
 then
        setup_malloc_check () {
@@ -516,11 +549,29 @@ then
        }
 else
        setup_malloc_check () {
+               local g
+               local t
                MALLOC_CHECK_=3 MALLOC_PERTURB_=165
                export MALLOC_CHECK_ MALLOC_PERTURB_
+               if _GLIBC_VERSION=$(getconf GNU_LIBC_VERSION 2>/dev/null) &&
+                  _GLIBC_VERSION=${_GLIBC_VERSION#"glibc "} &&
+                  expr 2.34 \<= "$_GLIBC_VERSION" >/dev/null
+               then
+                       g=
+                       LD_PRELOAD="libc_malloc_debug.so.0"
+                       for t in \
+                               glibc.malloc.check=1 \
+                               glibc.malloc.perturb=165
+                       do
+                               g="${g#:}:$t"
+                       done
+                       GLIBC_TUNABLES=$g
+                       export LD_PRELOAD GLIBC_TUNABLES
+               fi
        }
        teardown_malloc_check () {
                unset MALLOC_CHECK_ MALLOC_PERTURB_
+               unset LD_PRELOAD GLIBC_TUNABLES
        }
 fi
 
@@ -756,7 +807,11 @@ test_failure_ () {
        say_color error "not ok $test_count - $1"
        shift
        printf '%s\n' "$*" | sed -e 's/^/#      /'
-       test "$immediate" = "" || _error_exit
+       if test -n "$immediate"
+       then
+               say_color error "1..$test_count"
+               _error_exit
+       fi
 }
 
 test_known_broken_ok_ () {
@@ -1612,6 +1667,7 @@ test -n "$USE_LIBPCRE2" && test_set_prereq PCRE
 test -n "$USE_LIBPCRE2" && test_set_prereq LIBPCRE2
 test -z "$NO_GETTEXT" && test_set_prereq GETTEXT
 test -n "$SANITIZE_LEAK" && test_set_prereq SANITIZE_LEAK
+test -n "$GIT_VALGRIND_ENABLED" && test_set_prereq VALGRIND
 
 if test -z "$GIT_TEST_CHECK_CACHE_TREE"
 then
@@ -1797,3 +1853,10 @@ test_lazy_prereq SHA1 '
 # Tests that verify the scheduler integration must set this locally
 # to avoid errors.
 GIT_TEST_MAINT_SCHEDULER="none:exit 1"
+
+# Does this platform support `git fsmonitor--daemon`
+#
+test_lazy_prereq FSMONITOR_DAEMON '
+       git version --build-options >output &&
+       grep "feature: fsmonitor--daemon" output
+'
index d22a71a3999b3dc0e99f5e36053447b33f967bd7..367ad00c24cb34c0668eb5236dc3b08a477a65b7 100644 (file)
@@ -1,9 +1,7 @@
-# make and install sample templates
-
-ifndef V
-       QUIET = @
-endif
+# Import tree-wide shared Makefile behavior and libraries
+include ../shared.mak
 
+# make and install sample templates
 INSTALL ?= install
 TAR ?= tar
 RM ?= rm -f
index 3d38eeab66bfb048c20dd3490f92f2a6e15e040b..adf6033549ee7369c370e333a57db18ac8bdf0d6 100644 (file)
@@ -79,6 +79,11 @@ static void remove_tmp_objdir_on_signal(int signo)
        raise(signo);
 }
 
+void tmp_objdir_discard_objects(struct tmp_objdir *t)
+{
+       remove_dir_recursively(&t->path, REMOVE_DIR_KEEP_TOPLEVEL);
+}
+
 /*
  * These env_* functions are for setting up the child environment; the
  * "replace" variant overrides the value of any existing variable with that
index cda5ec7677881c5a47bb5f2ebf3edc3a3140a73c..76efc7edee5be4a9197a242f526c74b05f49802a 100644 (file)
@@ -46,6 +46,12 @@ int tmp_objdir_migrate(struct tmp_objdir *);
  */
 int tmp_objdir_destroy(struct tmp_objdir *);
 
+/*
+ * Remove all objects from the temporary object directory, while leaving it
+ * around so more objects can be added.
+ */
+void tmp_objdir_discard_objects(struct tmp_objdir *);
+
 /*
  * Add the temporary object directory as an alternate object store in the
  * current process.
diff --git a/trace.c b/trace.c
index f726686fd92f0b9f388b7dddeca55edc2ea8d8a8..794a087c21e100e147665181a592bc811b3c1265 100644 (file)
--- a/trace.c
+++ b/trace.c
@@ -108,16 +108,11 @@ static int prepare_trace_line(const char *file, int line,
        gettimeofday(&tv, NULL);
        secs = tv.tv_sec;
        localtime_r(&secs, &tm);
-       strbuf_addf(buf, "%02d:%02d:%02d.%06ld ", tm.tm_hour, tm.tm_min,
-                   tm.tm_sec, (long) tv.tv_usec);
-
-#ifdef HAVE_VARIADIC_MACROS
-       /* print file:line */
-       strbuf_addf(buf, "%s:%d ", file, line);
+       strbuf_addf(buf, "%02d:%02d:%02d.%06ld %s:%d", tm.tm_hour, tm.tm_min,
+                   tm.tm_sec, (long) tv.tv_usec, file, line);
        /* align trace output (column 40 catches most files names in git) */
        while (buf->len < 40)
                strbuf_addch(buf, ' ');
-#endif
 
        return 1;
 }
@@ -229,74 +224,6 @@ static void trace_performance_vprintf_fl(const char *file, int line,
        strbuf_release(&buf);
 }
 
-#ifndef HAVE_VARIADIC_MACROS
-
-void trace_printf(const char *format, ...)
-{
-       va_list ap;
-       va_start(ap, format);
-       trace_vprintf_fl(NULL, 0, &trace_default_key, format, ap);
-       va_end(ap);
-}
-
-void trace_printf_key(struct trace_key *key, const char *format, ...)
-{
-       va_list ap;
-       va_start(ap, format);
-       trace_vprintf_fl(NULL, 0, key, format, ap);
-       va_end(ap);
-}
-
-void trace_argv_printf(const char **argv, const char *format, ...)
-{
-       va_list ap;
-       va_start(ap, format);
-       trace_argv_vprintf_fl(NULL, 0, argv, format, ap);
-       va_end(ap);
-}
-
-void trace_strbuf(struct trace_key *key, const struct strbuf *data)
-{
-       trace_strbuf_fl(NULL, 0, key, data);
-}
-
-void trace_performance(uint64_t nanos, const char *format, ...)
-{
-       va_list ap;
-       va_start(ap, format);
-       trace_performance_vprintf_fl(NULL, 0, nanos, format, ap);
-       va_end(ap);
-}
-
-void trace_performance_since(uint64_t start, const char *format, ...)
-{
-       va_list ap;
-       va_start(ap, format);
-       trace_performance_vprintf_fl(NULL, 0, getnanotime() - start,
-                                    format, ap);
-       va_end(ap);
-}
-
-void trace_performance_leave(const char *format, ...)
-{
-       va_list ap;
-       uint64_t since;
-
-       if (perf_indent)
-               perf_indent--;
-
-       if (!format) /* Allow callers to leave without tracing anything */
-               return;
-
-       since = perf_start_times[perf_indent];
-       va_start(ap, format);
-       trace_performance_vprintf_fl(NULL, 0, getnanotime() - since,
-                                    format, ap);
-       va_end(ap);
-}
-
-#else
-
 void trace_printf_key_fl(const char *file, int line, struct trace_key *key,
                         const char *format, ...)
 {
@@ -342,9 +269,6 @@ void trace_performance_leave_fl(const char *file, int line,
        va_end(ap);
 }
 
-#endif /* HAVE_VARIADIC_MACROS */
-
-
 static const char *quote_crnl(const char *path)
 {
        static struct strbuf new_path = STRBUF_INIT;
diff --git a/trace.h b/trace.h
index e25984051aa041eb7557766a29a8c8b4743c62fd..4e771f86ac289ada2f5b97eb4013ef313fbb3cbf 100644 (file)
--- a/trace.h
+++ b/trace.h
@@ -126,71 +126,6 @@ void trace_command_performance(const char **argv);
 void trace_verbatim(struct trace_key *key, const void *buf, unsigned len);
 uint64_t trace_performance_enter(void);
 
-#ifndef HAVE_VARIADIC_MACROS
-
-/**
- * Prints a formatted message, similar to printf.
- */
-__attribute__((format (printf, 1, 2)))
-void trace_printf(const char *format, ...);
-
-__attribute__((format (printf, 2, 3)))
-void trace_printf_key(struct trace_key *key, const char *format, ...);
-
-/**
- * Prints a formatted message, followed by a quoted list of arguments.
- */
-__attribute__((format (printf, 2, 3)))
-void trace_argv_printf(const char **argv, const char *format, ...);
-
-/**
- * Prints the strbuf, without additional formatting (i.e. doesn't
- * choke on `%` or even `\0`).
- */
-void trace_strbuf(struct trace_key *key, const struct strbuf *data);
-
-/**
- * Prints elapsed time (in nanoseconds) if GIT_TRACE_PERFORMANCE is enabled.
- *
- * Example:
- * ------------
- * uint64_t t = 0;
- * for (;;) {
- *     // ignore
- * t -= getnanotime();
- * // code section to measure
- * t += getnanotime();
- * // ignore
- * }
- * trace_performance(t, "frotz");
- * ------------
- */
-__attribute__((format (printf, 2, 3)))
-void trace_performance(uint64_t nanos, const char *format, ...);
-
-/**
- * Prints elapsed time since 'start' if GIT_TRACE_PERFORMANCE is enabled.
- *
- * Example:
- * ------------
- * uint64_t start = getnanotime();
- * // code section to measure
- * trace_performance_since(start, "foobar");
- * ------------
- */
-__attribute__((format (printf, 2, 3)))
-void trace_performance_since(uint64_t start, const char *format, ...);
-
-__attribute__((format (printf, 1, 2)))
-void trace_performance_leave(const char *format, ...);
-
-#else
-
-/*
- * Macros to add file:line - see above for C-style declarations of how these
- * should be used.
- */
-
 /*
  * TRACE_CONTEXT may be set to __FUNCTION__ if the compiler supports it. The
  * default is __FILE__, as it is consistent with assert(), and static function
@@ -204,7 +139,10 @@ void trace_performance_leave(const char *format, ...);
 # define TRACE_CONTEXT __FILE__
 #endif
 
-/*
+/**
+ * Macros to add the file:line of the calling code, instead of that of
+ * the trace function itself.
+ *
  * Note: with C99 variadic macros, __VA_ARGS__ must include the last fixed
  * parameter ('format' in this case). Otherwise, a call without variable
  * arguments will have a surplus ','. E.g.:
@@ -220,6 +158,16 @@ void trace_performance_leave(const char *format, ...);
  * comma, but this is non-standard.
  */
 
+/**
+ * trace_printf(), accepts "const char *format, ...".
+ *
+ * Prints a formatted message, similar to printf.
+ */
+#define trace_printf(...) trace_printf_key(&trace_default_key, __VA_ARGS__)
+
+/**
+ * trace_printf_key(), accepts "struct trace_key *key, const char *format, ...".
+ */
 #define trace_printf_key(key, ...)                                         \
        do {                                                                \
                if (trace_pass_fl(key))                                     \
@@ -227,8 +175,11 @@ void trace_performance_leave(const char *format, ...);
                                            __VA_ARGS__);                   \
        } while (0)
 
-#define trace_printf(...) trace_printf_key(&trace_default_key, __VA_ARGS__)
-
+/**
+ * trace_argv_printf(), accepts "struct trace_key *key, const char *format, ...)".
+ *
+ * Prints a formatted message, followed by a quoted list of arguments.
+ */
 #define trace_argv_printf(argv, ...)                                       \
        do {                                                                \
                if (trace_pass_fl(&trace_default_key))                      \
@@ -236,12 +187,36 @@ void trace_performance_leave(const char *format, ...);
                                            argv, __VA_ARGS__);             \
        } while (0)
 
+/**
+ * trace_strbuf(), accepts "struct trace_key *key, const struct strbuf *data".
+ *
+ * Prints the strbuf, without additional formatting (i.e. doesn't
+ * choke on `%` or even `\0`).
+ */
 #define trace_strbuf(key, data)                                                    \
        do {                                                                \
                if (trace_pass_fl(key))                                     \
                        trace_strbuf_fl(TRACE_CONTEXT, __LINE__, key, data);\
        } while (0)
 
+/**
+ * trace_performance(), accepts "uint64_t nanos, const char *format, ...".
+ *
+ * Prints elapsed time (in nanoseconds) if GIT_TRACE_PERFORMANCE is enabled.
+ *
+ * Example:
+ * ------------
+ * uint64_t t = 0;
+ * for (;;) {
+ *     // ignore
+ * t -= getnanotime();
+ * // code section to measure
+ * t += getnanotime();
+ * // ignore
+ * }
+ * trace_performance(t, "frotz");
+ * ------------
+ */
 #define trace_performance(nanos, ...)                                      \
        do {                                                                \
                if (trace_pass_fl(&trace_perf_key))                         \
@@ -249,6 +224,18 @@ void trace_performance_leave(const char *format, ...);
                                             __VA_ARGS__);                  \
        } while (0)
 
+/**
+ * trace_performance_since(), accepts "uint64_t start, const char *format, ...".
+ *
+ * Prints elapsed time since 'start' if GIT_TRACE_PERFORMANCE is enabled.
+ *
+ * Example:
+ * ------------
+ * uint64_t start = getnanotime();
+ * // code section to measure
+ * trace_performance_since(start, "foobar");
+ * ------------
+ */
 #define trace_performance_since(start, ...)                                \
        do {                                                                \
                if (trace_pass_fl(&trace_perf_key))                         \
@@ -257,6 +244,9 @@ void trace_performance_leave(const char *format, ...);
                                             __VA_ARGS__);                  \
        } while (0)
 
+/**
+ * trace_performance_leave(), accepts "const char *format, ...".
+ */
 #define trace_performance_leave(...)                                       \
        do {                                                                \
                if (trace_pass_fl(&trace_perf_key))                         \
@@ -285,6 +275,4 @@ static inline int trace_pass_fl(struct trace_key *key)
        return key->fd || !key->initialized;
 }
 
-#endif /* HAVE_VARIADIC_MACROS */
-
 #endif /* TRACE_H */
index b2d471526fd64cf323ae7ef6facc730cbd133107..e01cf77f1a894ea1e890d5979fdf2b829f3e2066 100644 (file)
--- a/trace2.c
+++ b/trace2.c
@@ -214,6 +214,7 @@ int trace2_cmd_exit_fl(const char *file, int line, int code)
        if (!trace2_enabled)
                return code;
 
+       trace_git_fsync_stats();
        trace2_collect_process_info(TRACE2_PROCESS_INFO_EXIT);
 
        tr2main_exit_code = code;
@@ -641,20 +642,6 @@ void trace2_region_enter_printf_fl(const char *file, int line,
        va_end(ap);
 }
 
-#ifndef HAVE_VARIADIC_MACROS
-void trace2_region_enter_printf(const char *category, const char *label,
-                               const struct repository *repo, const char *fmt,
-                               ...)
-{
-       va_list ap;
-
-       va_start(ap, fmt);
-       trace2_region_enter_printf_va_fl(NULL, 0, category, label, repo, fmt,
-                                        ap);
-       va_end(ap);
-}
-#endif
-
 void trace2_region_leave_printf_va_fl(const char *file, int line,
                                      const char *category, const char *label,
                                      const struct repository *repo,
@@ -717,20 +704,6 @@ void trace2_region_leave_printf_fl(const char *file, int line,
        va_end(ap);
 }
 
-#ifndef HAVE_VARIADIC_MACROS
-void trace2_region_leave_printf(const char *category, const char *label,
-                               const struct repository *repo, const char *fmt,
-                               ...)
-{
-       va_list ap;
-
-       va_start(ap, fmt);
-       trace2_region_leave_printf_va_fl(NULL, 0, category, label, repo, fmt,
-                                        ap);
-       va_end(ap);
-}
-#endif
-
 void trace2_data_string_fl(const char *file, int line, const char *category,
                           const struct repository *repo, const char *key,
                           const char *value)
@@ -826,17 +799,6 @@ void trace2_printf_fl(const char *file, int line, const char *fmt, ...)
        va_end(ap);
 }
 
-#ifndef HAVE_VARIADIC_MACROS
-void trace2_printf(const char *fmt, ...)
-{
-       va_list ap;
-
-       va_start(ap, fmt);
-       trace2_printf_va_fl(NULL, 0, fmt, ap);
-       va_end(ap);
-}
-#endif
-
 const char *trace2_session_id(void)
 {
        return tr2_sid_get();
index 0cc7b5f53127e25c50021776bc5b505454ff5b5d..1b109f57d0a94a6eef1649b2ccc1a286b0e92381 100644 (file)
--- a/trace2.h
+++ b/trace2.h
@@ -397,18 +397,9 @@ void trace2_region_enter_printf_fl(const char *file, int line,
                                   const struct repository *repo,
                                   const char *fmt, ...);
 
-#ifdef HAVE_VARIADIC_MACROS
 #define trace2_region_enter_printf(category, label, repo, ...)                 \
        trace2_region_enter_printf_fl(__FILE__, __LINE__, (category), (label), \
                                      (repo), __VA_ARGS__)
-#else
-/* clang-format off */
-__attribute__((format (region_enter_printf, 4, 5)))
-void trace2_region_enter_printf(const char *category, const char *label,
-                               const struct repository *repo, const char *fmt,
-                               ...);
-/* clang-format on */
-#endif
 
 /**
  * Emit a 'region_leave' event for <category>.<label> with optional
@@ -442,18 +433,9 @@ void trace2_region_leave_printf_fl(const char *file, int line,
                                   const struct repository *repo,
                                   const char *fmt, ...);
 
-#ifdef HAVE_VARIADIC_MACROS
 #define trace2_region_leave_printf(category, label, repo, ...)                 \
        trace2_region_leave_printf_fl(__FILE__, __LINE__, (category), (label), \
                                      (repo), __VA_ARGS__)
-#else
-/* clang-format off */
-__attribute__((format (region_leave_printf, 4, 5)))
-void trace2_region_leave_printf(const char *category, const char *label,
-                               const struct repository *repo, const char *fmt,
-                               ...);
-/* clang-format on */
-#endif
 
 /**
  * Emit a key-value pair 'data' event of the form <category>.<key> = <value>.
@@ -506,14 +488,7 @@ void trace2_printf_va_fl(const char *file, int line, const char *fmt,
 
 void trace2_printf_fl(const char *file, int line, const char *fmt, ...);
 
-#ifdef HAVE_VARIADIC_MACROS
 #define trace2_printf(...) trace2_printf_fl(__FILE__, __LINE__, __VA_ARGS__)
-#else
-/* clang-format off */
-__attribute__((format (printf, 1, 2)))
-void trace2_printf(const char *fmt, ...);
-/* clang-format on */
-#endif
 
 /*
  * Optional platform-specific code to dump information about the
index bd17ecdc32162e88eb8f43c663e3f3745f08b34a..c5c8cfbbaa065bccfbc058efd9eaffc71507d011 100644 (file)
@@ -10,7 +10,9 @@
 #include "trace2/tr2_tgt.h"
 #include "trace2/tr2_tls.h"
 
-static struct tr2_dst tr2dst_event = { TR2_SYSENV_EVENT, 0, 0, 0, 0 };
+static struct tr2_dst tr2dst_event = {
+       .sysenv_var = TR2_SYSENV_EVENT,
+};
 
 /*
  * The version number of the JSON data generated by the EVENT target in this
@@ -613,34 +615,34 @@ static void fn_data_json_fl(const char *file, int line,
 }
 
 struct tr2_tgt tr2_tgt_event = {
-       &tr2dst_event,
-
-       fn_init,
-       fn_term,
-
-       fn_version_fl,
-       fn_start_fl,
-       fn_exit_fl,
-       fn_signal,
-       fn_atexit,
-       fn_error_va_fl,
-       fn_command_path_fl,
-       fn_command_ancestry_fl,
-       fn_command_name_fl,
-       fn_command_mode_fl,
-       fn_alias_fl,
-       fn_child_start_fl,
-       fn_child_exit_fl,
-       fn_child_ready_fl,
-       fn_thread_start_fl,
-       fn_thread_exit_fl,
-       fn_exec_fl,
-       fn_exec_result_fl,
-       fn_param_fl,
-       fn_repo_fl,
-       fn_region_enter_printf_va_fl,
-       fn_region_leave_printf_va_fl,
-       fn_data_fl,
-       fn_data_json_fl,
-       NULL, /* printf */
+       .pdst = &tr2dst_event,
+
+       .pfn_init = fn_init,
+       .pfn_term = fn_term,
+
+       .pfn_version_fl = fn_version_fl,
+       .pfn_start_fl = fn_start_fl,
+       .pfn_exit_fl = fn_exit_fl,
+       .pfn_signal = fn_signal,
+       .pfn_atexit = fn_atexit,
+       .pfn_error_va_fl = fn_error_va_fl,
+       .pfn_command_path_fl = fn_command_path_fl,
+       .pfn_command_ancestry_fl = fn_command_ancestry_fl,
+       .pfn_command_name_fl = fn_command_name_fl,
+       .pfn_command_mode_fl = fn_command_mode_fl,
+       .pfn_alias_fl = fn_alias_fl,
+       .pfn_child_start_fl = fn_child_start_fl,
+       .pfn_child_exit_fl = fn_child_exit_fl,
+       .pfn_child_ready_fl = fn_child_ready_fl,
+       .pfn_thread_start_fl = fn_thread_start_fl,
+       .pfn_thread_exit_fl = fn_thread_exit_fl,
+       .pfn_exec_fl = fn_exec_fl,
+       .pfn_exec_result_fl = fn_exec_result_fl,
+       .pfn_param_fl = fn_param_fl,
+       .pfn_repo_fl = fn_repo_fl,
+       .pfn_region_enter_printf_va_fl = fn_region_enter_printf_va_fl,
+       .pfn_region_leave_printf_va_fl = fn_region_leave_printf_va_fl,
+       .pfn_data_fl = fn_data_fl,
+       .pfn_data_json_fl = fn_data_json_fl,
+       .pfn_printf_va_fl = NULL,
 };
index 6e429a3fb9e6d8fefe200e24180e0f1d966cf9a1..c42fbade7f0381d4ca80c562f51a7864ceb5449e 100644 (file)
@@ -9,7 +9,9 @@
 #include "trace2/tr2_tgt.h"
 #include "trace2/tr2_tls.h"
 
-static struct tr2_dst tr2dst_normal = { TR2_SYSENV_NORMAL, 0, 0, 0, 0 };
+static struct tr2_dst tr2dst_normal = {
+       .sysenv_var = TR2_SYSENV_NORMAL,
+};
 
 /*
  * Use the TR2_SYSENV_NORMAL_BRIEF setting to omit the "<time> <file>:<line>"
@@ -325,34 +327,34 @@ static void fn_printf_va_fl(const char *file, int line,
 }
 
 struct tr2_tgt tr2_tgt_normal = {
-       &tr2dst_normal,
-
-       fn_init,
-       fn_term,
-
-       fn_version_fl,
-       fn_start_fl,
-       fn_exit_fl,
-       fn_signal,
-       fn_atexit,
-       fn_error_va_fl,
-       fn_command_path_fl,
-       fn_command_ancestry_fl,
-       fn_command_name_fl,
-       fn_command_mode_fl,
-       fn_alias_fl,
-       fn_child_start_fl,
-       fn_child_exit_fl,
-       fn_child_ready_fl,
-       NULL, /* thread_start */
-       NULL, /* thread_exit */
-       fn_exec_fl,
-       fn_exec_result_fl,
-       fn_param_fl,
-       fn_repo_fl,
-       NULL, /* region_enter */
-       NULL, /* region_leave */
-       NULL, /* data */
-       NULL, /* data_json */
-       fn_printf_va_fl,
+       .pdst = &tr2dst_normal,
+
+       .pfn_init = fn_init,
+       .pfn_term = fn_term,
+
+       .pfn_version_fl = fn_version_fl,
+       .pfn_start_fl = fn_start_fl,
+       .pfn_exit_fl = fn_exit_fl,
+       .pfn_signal = fn_signal,
+       .pfn_atexit = fn_atexit,
+       .pfn_error_va_fl = fn_error_va_fl,
+       .pfn_command_path_fl = fn_command_path_fl,
+       .pfn_command_ancestry_fl = fn_command_ancestry_fl,
+       .pfn_command_name_fl = fn_command_name_fl,
+       .pfn_command_mode_fl = fn_command_mode_fl,
+       .pfn_alias_fl = fn_alias_fl,
+       .pfn_child_start_fl = fn_child_start_fl,
+       .pfn_child_exit_fl = fn_child_exit_fl,
+       .pfn_child_ready_fl = fn_child_ready_fl,
+       .pfn_thread_start_fl = NULL,
+       .pfn_thread_exit_fl = NULL,
+       .pfn_exec_fl = fn_exec_fl,
+       .pfn_exec_result_fl = fn_exec_result_fl,
+       .pfn_param_fl = fn_param_fl,
+       .pfn_repo_fl = fn_repo_fl,
+       .pfn_region_enter_printf_va_fl = NULL,
+       .pfn_region_leave_printf_va_fl = NULL,
+       .pfn_data_fl = NULL,
+       .pfn_data_json_fl = NULL,
+       .pfn_printf_va_fl = fn_printf_va_fl,
 };
index 2ff9cf708355b4f5e64a9fa802c04c93f5b81728..a1eff8bea3101aab10a2b2c4e2a655f2f498a5df 100644 (file)
@@ -11,7 +11,9 @@
 #include "trace2/tr2_tgt.h"
 #include "trace2/tr2_tls.h"
 
-static struct tr2_dst tr2dst_perf = { TR2_SYSENV_PERF, 0, 0, 0, 0 };
+static struct tr2_dst tr2dst_perf = {
+       .sysenv_var = TR2_SYSENV_PERF,
+};
 
 /*
  * Use TR2_SYSENV_PERF_BRIEF to omit the "<time> <file>:<line>"
@@ -549,34 +551,34 @@ static void fn_printf_va_fl(const char *file, int line,
 }
 
 struct tr2_tgt tr2_tgt_perf = {
-       &tr2dst_perf,
-
-       fn_init,
-       fn_term,
-
-       fn_version_fl,
-       fn_start_fl,
-       fn_exit_fl,
-       fn_signal,
-       fn_atexit,
-       fn_error_va_fl,
-       fn_command_path_fl,
-       fn_command_ancestry_fl,
-       fn_command_name_fl,
-       fn_command_mode_fl,
-       fn_alias_fl,
-       fn_child_start_fl,
-       fn_child_exit_fl,
-       fn_child_ready_fl,
-       fn_thread_start_fl,
-       fn_thread_exit_fl,
-       fn_exec_fl,
-       fn_exec_result_fl,
-       fn_param_fl,
-       fn_repo_fl,
-       fn_region_enter_printf_va_fl,
-       fn_region_leave_printf_va_fl,
-       fn_data_fl,
-       fn_data_json_fl,
-       fn_printf_va_fl,
+       .pdst = &tr2dst_perf,
+
+       .pfn_init = fn_init,
+       .pfn_term = fn_term,
+
+       .pfn_version_fl = fn_version_fl,
+       .pfn_start_fl = fn_start_fl,
+       .pfn_exit_fl = fn_exit_fl,
+       .pfn_signal = fn_signal,
+       .pfn_atexit = fn_atexit,
+       .pfn_error_va_fl = fn_error_va_fl,
+       .pfn_command_path_fl = fn_command_path_fl,
+       .pfn_command_ancestry_fl = fn_command_ancestry_fl,
+       .pfn_command_name_fl = fn_command_name_fl,
+       .pfn_command_mode_fl = fn_command_mode_fl,
+       .pfn_alias_fl = fn_alias_fl,
+       .pfn_child_start_fl = fn_child_start_fl,
+       .pfn_child_exit_fl = fn_child_exit_fl,
+       .pfn_child_ready_fl = fn_child_ready_fl,
+       .pfn_thread_start_fl = fn_thread_start_fl,
+       .pfn_thread_exit_fl = fn_thread_exit_fl,
+       .pfn_exec_fl = fn_exec_fl,
+       .pfn_exec_result_fl = fn_exec_result_fl,
+       .pfn_param_fl = fn_param_fl,
+       .pfn_repo_fl = fn_repo_fl,
+       .pfn_region_enter_printf_va_fl = fn_region_enter_printf_va_fl,
+       .pfn_region_leave_printf_va_fl = fn_region_leave_printf_va_fl,
+       .pfn_data_fl = fn_data_fl,
+       .pfn_data_json_fl = fn_data_json_fl,
+       .pfn_printf_va_fl = fn_printf_va_fl,
 };
index a0297b0986c62e7a6e8f8951071ed5ea9da2640b..b4dbbabb0c2ef6c95b9e08f5bc7abc67322e27d4 100644 (file)
@@ -715,6 +715,9 @@ static int fetch_refs(struct transport *transport,
        if (data->transport_options.update_shallow)
                set_helper_option(transport, "update-shallow", "true");
 
+       if (data->transport_options.refetch)
+               set_helper_option(transport, "refetch", "true");
+
        if (data->transport_options.filter_options.choice) {
                const char *spec = expand_list_objects_filter_spec(
                        &data->transport_options.filter_options);
index fba1aecde07a3f57936ce1d901d3e67ca5e70e88..d514ab9508677f108c83f938d9512b64cac0230c 100644 (file)
@@ -125,16 +125,9 @@ struct bundle_transport_data {
        unsigned get_refs_from_bundle_called : 1;
 };
 
-static struct ref *get_refs_from_bundle(struct transport *transport,
-                                       int for_push,
-                                       struct transport_ls_refs_options *transport_options)
+static void get_refs_from_bundle_inner(struct transport *transport)
 {
        struct bundle_transport_data *data = transport->data;
-       struct ref *result = NULL;
-       int i;
-
-       if (for_push)
-               return NULL;
 
        data->get_refs_from_bundle_called = 1;
 
@@ -145,6 +138,20 @@ static struct ref *get_refs_from_bundle(struct transport *transport,
                die(_("could not read bundle '%s'"), transport->url);
 
        transport->hash_algo = data->header.hash_algo;
+}
+
+static struct ref *get_refs_from_bundle(struct transport *transport,
+                                       int for_push,
+                                       struct transport_ls_refs_options *transport_options)
+{
+       struct bundle_transport_data *data = transport->data;
+       struct ref *result = NULL;
+       int i;
+
+       if (for_push)
+               return NULL;
+
+       get_refs_from_bundle_inner(transport);
 
        for (i = 0; i < data->header.references.nr; i++) {
                struct string_list_item *e = data->header.references.items + i;
@@ -169,7 +176,7 @@ static int fetch_refs_from_bundle(struct transport *transport,
                strvec_push(&extra_index_pack_args, "-v");
 
        if (!data->get_refs_from_bundle_called)
-               get_refs_from_bundle(transport, 0, NULL);
+               get_refs_from_bundle_inner(transport);
        ret = unbundle(the_repository, &data->header, data->fd,
                       &extra_index_pack_args);
        transport->hash_algo = data->header.hash_algo;
@@ -243,6 +250,9 @@ static int set_git_option(struct git_transport_options *opts,
                list_objects_filter_die_if_populated(&opts->filter_options);
                parse_list_objects_filter(&opts->filter_options, value);
                return 0;
+       } else if (!strcmp(name, TRANS_OPT_REFETCH)) {
+               opts->refetch = !!value;
+               return 0;
        } else if (!strcmp(name, TRANS_OPT_REJECT_SHALLOW)) {
                opts->reject_shallow = !!value;
                return 0;
@@ -377,6 +387,7 @@ static int fetch_refs_via_pack(struct transport *transport,
        args.update_shallow = data->options.update_shallow;
        args.from_promisor = data->options.from_promisor;
        args.filter_options = data->options.filter_options;
+       args.refetch = data->options.refetch;
        args.stateless_rpc = transport->stateless_rpc;
        args.server_options = transport->server_options;
        args.negotiation_tips = data->options.negotiation_tips;
@@ -1291,7 +1302,7 @@ int transport_push(struct repository *r,
                                                               &transport_options);
                trace2_region_leave("transport_push", "get_refs_list", r);
 
-               strvec_clear(&transport_options.ref_prefixes);
+               transport_ls_refs_options_release(&transport_options);
 
                if (flags & TRANSPORT_PUSH_ALL)
                        match_flags |= MATCH_REFS_ALL;
@@ -1419,6 +1430,12 @@ const struct ref *transport_get_remote_refs(struct transport *transport,
        return transport->remote_refs;
 }
 
+void transport_ls_refs_options_release(struct transport_ls_refs_options *opts)
+{
+       strvec_clear(&opts->ref_prefixes);
+       free((char *)opts->unborn_head_target);
+}
+
 int transport_fetch_refs(struct transport *transport, struct ref *refs)
 {
        int rc;
index 3f16e50c1965db222173a2330b12c26aee3d6d25..12bc08fc33949a2caa7d95b0143f58751b899b77 100644 (file)
@@ -16,6 +16,7 @@ struct git_transport_options {
        unsigned update_shallow : 1;
        unsigned reject_shallow : 1;
        unsigned deepen_relative : 1;
+       unsigned refetch : 1;
 
        /* see documentation of corresponding flag in fetch-pack.h */
        unsigned from_promisor : 1;
@@ -216,6 +217,9 @@ void transport_check_allowed(const char *type);
 /* Filter objects for partial clone and fetch */
 #define TRANS_OPT_LIST_OBJECTS_FILTER "filter"
 
+/* Refetch all objects without negotiating */
+#define TRANS_OPT_REFETCH "refetch"
+
 /* Request atomic (all-or-nothing) updates when pushing */
 #define TRANS_OPT_ATOMIC "atomic"
 
@@ -257,15 +261,19 @@ struct transport_ls_refs_options {
        /*
         * If unborn_head_target is not NULL, and the remote reports HEAD as
         * pointing to an unborn branch, transport_get_remote_refs() stores the
-        * unborn branch in unborn_head_target. It should be freed by the
-        * caller.
+        * unborn branch in unborn_head_target.
         */
-       char *unborn_head_target;
+       const char *unborn_head_target;
 };
 #define TRANSPORT_LS_REFS_OPTIONS_INIT { \
        .ref_prefixes = STRVEC_INIT, \
 }
 
+/**
+ * Release the "struct transport_ls_refs_options".
+ */
+void transport_ls_refs_options_release(struct transport_ls_refs_options *opts);
+
 /*
  * Retrieve refs from a remote.
  */
index 3a94959d64a3a63b784bcadfd47cd12213f3fb2d..506234b4b8138894d6516fc80e9fc42753f78f00 100644 (file)
@@ -89,7 +89,7 @@ void *fill_tree_descriptor(struct repository *r,
        void *buf = NULL;
 
        if (oid) {
-               buf = read_object_with_reference(r, oid, tree_type, &size, NULL);
+               buf = read_object_with_reference(r, oid, OBJ_TREE, &size, NULL);
                if (!buf)
                        die("unable to read tree %s", oid_to_hex(oid));
        }
@@ -605,7 +605,7 @@ int get_tree_entry(struct repository *r,
        unsigned long size;
        struct object_id root;
 
-       tree = read_object_with_reference(r, tree_oid, tree_type, &size, &root);
+       tree = read_object_with_reference(r, tree_oid, OBJ_TREE, &size, &root);
        if (!tree)
                return -1;
 
@@ -677,7 +677,7 @@ enum get_oid_result get_tree_entry_follow_symlinks(struct repository *r,
                        unsigned long size;
                        tree = read_object_with_reference(r,
                                                          &current_tree_oid,
-                                                         tree_type, &size,
+                                                         OBJ_TREE, &size,
                                                          &root);
                        if (!tree)
                                goto done;
index 360844bda3ab976c73e9443b318b58dfc400f475..7f528d35cc263ad2d87444d2b9c0081ba6e1da74 100644 (file)
@@ -595,13 +595,6 @@ static void mark_ce_used(struct cache_entry *ce, struct unpack_trees_options *o)
 {
        ce->ce_flags |= CE_UNPACKED;
 
-       /*
-        * If this is a sparse directory, don't advance cache_bottom.
-        * That will be advanced later using the cache-tree data.
-        */
-       if (S_ISSPARSEDIR(ce->ce_mode))
-               return;
-
        if (o->cache_bottom < o->src_index->cache_nr &&
            o->src_index->cache[o->cache_bottom] == ce) {
                int bottom = o->cache_bottom;
@@ -651,24 +644,17 @@ static void mark_ce_used_same_name(struct cache_entry *ce,
        }
 }
 
-static struct cache_entry *next_cache_entry(struct unpack_trees_options *o, int *hint)
+static struct cache_entry *next_cache_entry(struct unpack_trees_options *o)
 {
        const struct index_state *index = o->src_index;
        int pos = o->cache_bottom;
 
-       if (*hint > pos)
-               pos = *hint;
-
        while (pos < index->cache_nr) {
                struct cache_entry *ce = index->cache[pos];
-               if (!(ce->ce_flags & CE_UNPACKED)) {
-                       *hint = pos + 1;
+               if (!(ce->ce_flags & CE_UNPACKED))
                        return ce;
-               }
                pos++;
        }
-
-       *hint = pos;
        return NULL;
 }
 
@@ -1360,6 +1346,42 @@ static int is_sparse_directory_entry(struct cache_entry *ce,
        return sparse_dir_matches_path(ce, info, name);
 }
 
+static int unpack_sparse_callback(int n, unsigned long mask, unsigned long dirmask, struct name_entry *names, struct traverse_info *info)
+{
+       struct cache_entry *src[MAX_UNPACK_TREES + 1] = { NULL, };
+       struct unpack_trees_options *o = info->data;
+       int ret;
+
+       assert(o->merge);
+
+       /*
+        * Unlike in 'unpack_callback', where src[0] is derived from the index when
+        * merging, src[0] is a transient cache entry derived from the first tree
+        * provided. Create the temporary entry as if it came from a non-sparse index.
+        */
+       if (!is_null_oid(&names[0].oid)) {
+               src[0] = create_ce_entry(info, &names[0], 0,
+                                       &o->result, 1,
+                                       dirmask & (1ul << 0));
+               src[0]->ce_flags |= (CE_SKIP_WORKTREE | CE_NEW_SKIP_WORKTREE);
+       }
+
+       /*
+        * 'unpack_single_entry' assumes that src[0] is derived directly from
+        * the index, rather than from an entry in 'names'. This is *not* true when
+        * merging a sparse directory, in which case names[0] is the "index" source
+        * entry. To match the expectations of 'unpack_single_entry', shift past the
+        * "index" tree (i.e., names[0]) and adjust 'names', 'n', 'mask', and
+        * 'dirmask' accordingly.
+        */
+       ret = unpack_single_entry(n - 1, mask >> 1, dirmask >> 1, src, names + 1, info);
+
+       if (src[0])
+               discard_cache_entry(src[0]);
+
+       return ret >= 0 ? mask : -1;
+}
+
 /*
  * Note that traverse_by_cache_tree() duplicates some logic in this function
  * without actually calling it. If you change the logic here you may need to
@@ -1380,13 +1402,12 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str
 
        /* Are we supposed to look at the index too? */
        if (o->merge) {
-               int hint = -1;
                while (1) {
                        int cmp;
                        struct cache_entry *ce;
 
                        if (o->diff_index_cached)
-                               ce = next_cache_entry(o, &hint);
+                               ce = next_cache_entry(o);
                        else
                                ce = find_cache_entry(info, p);
 
@@ -1442,7 +1463,14 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str
                         * it does not do any look-ahead, so this is safe.
                         */
                        if (matches) {
-                               o->cache_bottom += matches;
+                               /*
+                                * Only increment the cache_bottom if the
+                                * directory isn't a sparse directory index
+                                * entry (if it is, it was already incremented)
+                                * in 'mark_ce_used()'
+                                */
+                               if (!src[0] || !S_ISSPARSEDIR(src[0]->ce_mode))
+                                       o->cache_bottom += matches;
                                return mask;
                        }
                }
@@ -1693,6 +1721,41 @@ static void populate_from_existing_patterns(struct unpack_trees_options *o,
                o->pl = pl;
 }
 
+static void update_sparsity_for_prefix(const char *prefix,
+                                      struct index_state *istate)
+{
+       int prefix_len = strlen(prefix);
+       struct strbuf ce_prefix = STRBUF_INIT;
+
+       if (!istate->sparse_index)
+               return;
+
+       while (prefix_len > 0 && prefix[prefix_len - 1] == '/')
+               prefix_len--;
+
+       if (prefix_len <= 0)
+               BUG("Invalid prefix passed to update_sparsity_for_prefix");
+
+       strbuf_grow(&ce_prefix, prefix_len + 1);
+       strbuf_add(&ce_prefix, prefix, prefix_len);
+       strbuf_addch(&ce_prefix, '/');
+
+       /*
+        * If the prefix points to a sparse directory or a path inside a sparse
+        * directory, the index should be expanded. This is accomplished in one
+        * of two ways:
+        * - if the prefix is inside a sparse directory, it will be expanded by
+        *   the 'ensure_full_index(...)' call in 'index_name_pos(...)'.
+        * - if the prefix matches an existing sparse directory entry,
+        *   'index_name_pos(...)' will return its index position, triggering
+        *   the 'ensure_full_index(...)' below.
+        */
+       if (!path_in_cone_mode_sparse_checkout(ce_prefix.buf, istate) &&
+           index_name_pos(istate, ce_prefix.buf, ce_prefix.len) >= 0)
+               ensure_full_index(istate);
+
+       strbuf_release(&ce_prefix);
+}
 
 static int verify_absent(const struct cache_entry *,
                         enum unpack_trees_error_types,
@@ -1706,7 +1769,7 @@ static int verify_absent(const struct cache_entry *,
 int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options *o)
 {
        struct repository *repo = the_repository;
-       int i, hint, ret;
+       int i, ret;
        static struct cache_entry *dfc;
        struct pattern_list pl;
        int free_pattern_list = 0;
@@ -1739,6 +1802,9 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
                setup_standard_excludes(o->dir);
        }
 
+       if (o->prefix)
+               update_sparsity_for_prefix(o->prefix, o->src_index);
+
        if (!core_apply_sparse_checkout || !o->update)
                o->skip_sparse_checkout = 1;
        if (!o->skip_sparse_checkout && !o->pl) {
@@ -1795,15 +1861,13 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
                info.pathspec = o->pathspec;
 
                if (o->prefix) {
-                       hint = -1;
-
                        /*
                         * Unpack existing index entries that sort before the
                         * prefix the tree is spliced into.  Note that o->merge
                         * is always true in this case.
                         */
                        while (1) {
-                               struct cache_entry *ce = next_cache_entry(o, &hint);
+                               struct cache_entry *ce = next_cache_entry(o);
                                if (!ce)
                                        break;
                                if (ce_in_traverse_path(ce, &info))
@@ -1824,9 +1888,8 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
 
        /* Any left-over entries in the index? */
        if (o->merge) {
-               hint = -1;
                while (1) {
-                       struct cache_entry *ce = next_cache_entry(o, &hint);
+                       struct cache_entry *ce = next_cache_entry(o);
                        if (!ce)
                                break;
                        if (unpack_index_entry(ce, o) < 0)
@@ -2065,7 +2128,9 @@ static int verify_uptodate_1(const struct cache_entry *ce,
 int verify_uptodate(const struct cache_entry *ce,
                    struct unpack_trees_options *o)
 {
-       if (!o->skip_sparse_checkout && (ce->ce_flags & CE_NEW_SKIP_WORKTREE))
+       if (!o->skip_sparse_checkout &&
+           (ce->ce_flags & CE_SKIP_WORKTREE) &&
+           (ce->ce_flags & CE_NEW_SKIP_WORKTREE))
                return 0;
        return verify_uptodate_1(ce, o, ERROR_NOT_UPTODATE_FILE);
 }
@@ -2434,6 +2499,37 @@ static int merged_entry(const struct cache_entry *ce,
        return 1;
 }
 
+static int merged_sparse_dir(const struct cache_entry * const *src, int n,
+                            struct unpack_trees_options *o)
+{
+       struct tree_desc t[MAX_UNPACK_TREES + 1];
+       void * tree_bufs[MAX_UNPACK_TREES + 1];
+       struct traverse_info info;
+       int i, ret;
+
+       /*
+        * Create the tree traversal information for traversing into *only* the
+        * sparse directory.
+        */
+       setup_traverse_info(&info, src[0]->name);
+       info.fn = unpack_sparse_callback;
+       info.data = o;
+       info.show_all_errors = o->show_all_errors;
+       info.pathspec = o->pathspec;
+
+       /* Get the tree descriptors of the sparse directory in each of the merging trees */
+       for (i = 0; i < n; i++)
+               tree_bufs[i] = fill_tree_descriptor(o->src_index->repo, &t[i],
+                                                   src[i] && !is_null_oid(&src[i]->oid) ? &src[i]->oid : NULL);
+
+       ret = traverse_trees(o->src_index, n, t, &info);
+
+       for (i = 0; i < n; i++)
+               free(tree_bufs[i]);
+
+       return ret;
+}
+
 static int deleted_entry(const struct cache_entry *ce,
                         const struct cache_entry *old,
                         struct unpack_trees_options *o)
@@ -2538,16 +2634,24 @@ int threeway_merge(const struct cache_entry * const *stages,
         */
        /* #14, #14ALT, #2ALT */
        if (remote && !df_conflict_head && head_match && !remote_match) {
-               if (index && !same(index, remote) && !same(index, head))
-                       return reject_merge(index, o);
+               if (index && !same(index, remote) && !same(index, head)) {
+                       if (S_ISSPARSEDIR(index->ce_mode))
+                               return merged_sparse_dir(stages, 4, o);
+                       else
+                               return reject_merge(index, o);
+               }
                return merged_entry(remote, index, o);
        }
        /*
         * If we have an entry in the index cache, then we want to
         * make sure that it matches head.
         */
-       if (index && !same(index, head))
-               return reject_merge(index, o);
+       if (index && !same(index, head)) {
+               if (S_ISSPARSEDIR(index->ce_mode))
+                       return merged_sparse_dir(stages, 4, o);
+               else
+                       return reject_merge(index, o);
+       }
 
        if (head) {
                /* #5ALT, #15 */
@@ -2609,11 +2713,21 @@ int threeway_merge(const struct cache_entry * const *stages,
 
        }
 
-       /* Below are "no merge" cases, which require that the index be
-        * up-to-date to avoid the files getting overwritten with
-        * conflict resolution files.
-        */
+       /* Handle "no merge" cases (see t/t1000-read-tree-m-3way.sh) */
        if (index) {
+               /*
+                * If we've reached the "no merge" cases and we're merging
+                * a sparse directory, we may have an "edit/edit" conflict that
+                * can be resolved by individually merging directory contents.
+                */
+               if (S_ISSPARSEDIR(index->ce_mode))
+                       return merged_sparse_dir(stages, 4, o);
+
+               /*
+                * If we're not merging a sparse directory, ensure the index is
+                * up-to-date to avoid files getting overwritten with conflict
+                * resolution files
+                */
                if (verify_uptodate(index, o))
                        return -1;
        }
@@ -2704,6 +2818,14 @@ int twoway_merge(const struct cache_entry * const *src,
                         * reject the merge instead.
                         */
                        return merged_entry(newtree, current, o);
+               } else if (S_ISSPARSEDIR(current->ce_mode)) {
+                       /*
+                        * The sparse directories differ, but we don't know whether that's
+                        * because of two different files in the directory being modified
+                        * (can be trivially merged) or if there is a real file conflict.
+                        * Merge the sparse directory by OID to compare file-by-file.
+                        */
+                       return merged_sparse_dir(src, 3, o);
                } else
                        return reject_merge(current, o);
        }
index 8acc98741bbb83db90dc6b0901d5be817cacd0a3..3a851b360663a56bc2ad0d7beed0cc566d581546 100644 (file)
@@ -1400,13 +1400,19 @@ static int parse_want(struct packet_writer *writer, const char *line,
        const char *arg;
        if (skip_prefix(line, "want ", &arg)) {
                struct object_id oid;
+               struct commit *commit;
                struct object *o;
 
                if (get_oid_hex(arg, &oid))
                        die("git upload-pack: protocol error, "
                            "expected to get oid, not '%s'", line);
 
-               o = parse_object(the_repository, &oid);
+               commit = lookup_commit_in_graph(the_repository, &oid);
+               if (commit)
+                       o = &commit->object;
+               else
+                       o = parse_object(the_repository, &oid);
+
                if (!o) {
                        packet_writer_error(writer,
                                            "upload-pack: not our ref %s",
@@ -1434,7 +1440,7 @@ static int parse_want_ref(struct packet_writer *writer, const char *line,
        if (skip_prefix(line, "want-ref ", &refname_nons)) {
                struct object_id oid;
                struct string_list_item *item;
-               struct object *o;
+               struct object *o = NULL;
                struct strbuf refname = STRBUF_INIT;
 
                strbuf_addf(&refname, "%s%s", get_git_namespace(), refname_nons);
@@ -1448,7 +1454,15 @@ static int parse_want_ref(struct packet_writer *writer, const char *line,
                item = string_list_append(wanted_refs, refname_nons);
                item->util = oiddup(&oid);
 
-               o = parse_object_or_die(&oid, refname_nons);
+               if (!starts_with(refname_nons, "refs/tags/")) {
+                       struct commit *commit = lookup_commit_in_graph(the_repository, &oid);
+                       if (commit)
+                               o = &commit->object;
+               }
+
+               if (!o)
+                       o = parse_object_or_die(&oid, refname_nons);
+
                if (!(o->flags & WANTED)) {
                        o->flags |= WANTED;
                        add_object_array(o, NULL, want_obj);
index 03ad3f30a9c09f793aa94cac1fa2730cf4180b45..b615adc923ae019b756e25a1cdcfb251333e69ff 100644 (file)
@@ -611,3 +611,8 @@ int urlmatch_config_entry(const char *var, const char *value, void *cb)
        strbuf_release(&synthkey);
        return retval;
 }
+
+void urlmatch_config_release(struct urlmatch_config *config)
+{
+       string_list_clear(&config->vars, 1);
+}
index 34a3ba6d1973b4aa8d82a2af7fab8b6672433cc5..9f40b00bfb82b1f32bf75e60538be145bbe9d116 100644 (file)
@@ -71,5 +71,6 @@ struct urlmatch_config {
 }
 
 int urlmatch_config_entry(const char *var, const char *value, void *cb);
+void urlmatch_config_release(struct urlmatch_config *config);
 
 #endif /* URL_MATCH_H */
diff --git a/usage.c b/usage.c
index 9943dd8742e8adb2d283be453d7cb9da478a0a7e..b738dd178b3c9983cbe381248f188caefec79336 100644 (file)
--- a/usage.c
+++ b/usage.c
@@ -299,10 +299,7 @@ static NORETURN void BUG_vfl(const char *file, int line, const char *fmt, va_lis
        va_copy(params_copy, params);
 
        /* truncation via snprintf is OK here */
-       if (file)
-               snprintf(prefix, sizeof(prefix), "BUG: %s:%d: ", file, line);
-       else
-               snprintf(prefix, sizeof(prefix), "BUG: ");
+       snprintf(prefix, sizeof(prefix), "BUG: %s:%d: ", file, line);
 
        vreportf(prefix, fmt, params);
 
@@ -317,7 +314,6 @@ static NORETURN void BUG_vfl(const char *file, int line, const char *fmt, va_lis
        abort();
 }
 
-#ifdef HAVE_VARIADIC_MACROS
 NORETURN void BUG_fl(const char *file, int line, const char *fmt, ...)
 {
        va_list ap;
@@ -325,15 +321,6 @@ NORETURN void BUG_fl(const char *file, int line, const char *fmt, ...)
        BUG_vfl(file, line, fmt, ap);
        va_end(ap);
 }
-#else
-NORETURN void BUG(const char *fmt, ...)
-{
-       va_list ap;
-       va_start(ap, fmt);
-       BUG_vfl(NULL, 0, fmt, ap);
-       va_end(ap);
-}
-#endif
 
 #ifdef SUPPRESS_ANNOTATED_LEAKS
 void unleak_memory(const void *ptr, size_t len)
index 8578cb0d12e59848ebd3d4bff754ada89ec99656..151d9a52784b1f4a149913d38739c91e389d95d6 100644 (file)
@@ -7,12 +7,24 @@ static struct userdiff_driver *drivers;
 static int ndrivers;
 static int drivers_alloc;
 
-#define PATTERNS(name, pattern, word_regex)                    \
-       { name, NULL, -1, { pattern, REG_EXTENDED },            \
-         word_regex "|[^[:space:]]|[\xc0-\xff][\x80-\xbf]+" }
-#define IPATTERN(name, pattern, word_regex)                    \
-       { name, NULL, -1, { pattern, REG_EXTENDED | REG_ICASE }, \
-         word_regex "|[^[:space:]]|[\xc0-\xff][\x80-\xbf]+" }
+#define PATTERNS(lang, rx, wrx) { \
+       .name = lang, \
+       .binary = -1, \
+       .funcname = { \
+               .pattern = rx, \
+               .cflags = REG_EXTENDED, \
+       }, \
+       .word_regex = wrx "|[^[:space:]]|[\xc0-\xff][\x80-\xbf]+", \
+}
+#define IPATTERN(lang, rx, wrx) { \
+       .name = lang, \
+       .binary = -1, \
+       .funcname = { \
+               .pattern = rx, \
+               .cflags = REG_EXTENDED | REG_ICASE, \
+       }, \
+       .word_regex = wrx "|[^[:space:]]|[\xc0-\xff][\x80-\xbf]+", \
+}
 
 /*
  * Built-in drivers for various languages, sorted by their names
@@ -168,6 +180,18 @@ PATTERNS("java",
         "|[-+0-9.e]+[fFlL]?|0[xXbB]?[0-9a-fA-F]+[lL]?"
         "|[-+*/<>%&^|=!]="
         "|--|\\+\\+|<<=?|>>>?=?|&&|\\|\\|"),
+PATTERNS("kotlin",
+        "^[ \t]*(([a-z]+[ \t]+)*(fun|class|interface)[ \t]+.*)$",
+        /* -- */
+        "[a-zA-Z_][a-zA-Z0-9_]*"
+        /* hexadecimal and binary numbers */
+        "|0[xXbB][0-9a-fA-F_]+[lLuU]*"
+        /* integers and floats */
+        "|[0-9][0-9_]*([.][0-9_]*)?([Ee][-+]?[0-9]+)?[fFlLuU]*"
+        /* floating point numbers beginning with decimal point */
+        "|[.][0-9][0-9_]*([Ee][-+]?[0-9]+)?[fFlLuU]?"
+        /* unary and binary operators */
+        "|[-+*/<>%&^|=!]==?|--|\\+\\+|<<=|>>=|&&|\\|\\||->|\\.\\*|!!|[?:.][.:]"),
 PATTERNS("markdown",
         "^ {0,3}#{1,6}[ \t].*",
         /* -- */
@@ -275,17 +299,13 @@ PATTERNS("tex", "^(\\\\((sub)*section|chapter|part)\\*{0,1}\\{.*)$",
 #undef IPATTERN
 
 static struct userdiff_driver driver_true = {
-       "diff=true",
-       NULL,
-       0,
-       { NULL, 0 }
+       .name = "diff=true",
+       .binary = 0,
 };
 
 static struct userdiff_driver driver_false = {
-       "!diff",
-       NULL,
-       1,
-       { NULL, 0 }
+       .name = "!diff",
+       .binary = 1,
 };
 
 struct find_by_namelen_data {
index 6f598dcfcdf96fa7b3e4f59bb6a028abef89fdf5..90fc085f76b4cc2ad89587cfc2bfc718f57144d9 100644 (file)
@@ -5,6 +5,7 @@
 #include "worktree.h"
 #include "dir.h"
 #include "wt-status.h"
+#include "config.h"
 
 void free_worktrees(struct worktree **worktrees)
 {
@@ -28,13 +29,11 @@ static void add_head_info(struct worktree *wt)
 {
        int flags;
        const char *target;
-       int ignore_errno;
 
        target = refs_resolve_ref_unsafe(get_worktree_ref_store(wt),
                                         "HEAD",
                                         0,
-                                        &wt->head_oid, &flags,
-                                        &ignore_errno);
+                                        &wt->head_oid, &flags);
        if (!target)
                return;
 
@@ -416,7 +415,6 @@ const struct worktree *find_shared_symref(struct worktree **worktrees,
                const char *symref_target;
                struct ref_store *refs;
                int flags;
-               int ignore_errno;
 
                if (wt->is_bare)
                        continue;
@@ -434,8 +432,7 @@ const struct worktree *find_shared_symref(struct worktree **worktrees,
 
                refs = get_worktree_ref_store(wt);
                symref_target = refs_resolve_ref_unsafe(refs, symref, 0,
-                                                       NULL, &flags,
-                                                       &ignore_errno);
+                                                       NULL, &flags);
                if ((flags & REF_ISSYMREF) &&
                    symref_target && !strcmp(symref_target, target)) {
                        existing = wt;
@@ -563,7 +560,6 @@ int other_head_refs(each_ref_fn fn, void *cb_data)
                struct worktree *wt = *p;
                struct object_id oid;
                int flag;
-               int ignore_errno;
 
                if (wt->is_current)
                        continue;
@@ -573,7 +569,7 @@ int other_head_refs(each_ref_fn fn, void *cb_data)
                if (refs_resolve_ref_unsafe(get_main_ref_store(the_repository),
                                            refname.buf,
                                            RESOLVE_REF_READING,
-                                           &oid, &flag, &ignore_errno))
+                                           &oid, &flag))
                        ret = fn(refname.buf, &oid, flag, cb_data);
                if (ret)
                        break;
@@ -826,3 +822,75 @@ int should_prune_worktree(const char *id, struct strbuf *reason, char **wtpath,
        *wtpath = path;
        return 0;
 }
+
+static int move_config_setting(const char *key, const char *value,
+                              const char *from_file, const char *to_file)
+{
+       if (git_config_set_in_file_gently(to_file, key, value))
+               return error(_("unable to set %s in '%s'"), key, to_file);
+       if (git_config_set_in_file_gently(from_file, key, NULL))
+               return error(_("unable to unset %s in '%s'"), key, from_file);
+       return 0;
+}
+
+int init_worktree_config(struct repository *r)
+{
+       int res = 0;
+       int bare = 0;
+       struct config_set cs = { { 0 } };
+       const char *core_worktree;
+       char *common_config_file;
+       char *main_worktree_file;
+
+       /*
+        * If the extension is already enabled, then we can skip the
+        * upgrade process.
+        */
+       if (repository_format_worktree_config)
+               return 0;
+       if ((res = git_config_set_gently("extensions.worktreeConfig", "true")))
+               return error(_("failed to set extensions.worktreeConfig setting"));
+
+       common_config_file = xstrfmt("%s/config", r->commondir);
+       main_worktree_file = xstrfmt("%s/config.worktree", r->commondir);
+
+       git_configset_init(&cs);
+       git_configset_add_file(&cs, common_config_file);
+
+       /*
+        * If core.bare is true in the common config file, then we need to
+        * move it to the main worktree's config file or it will break all
+        * worktrees. If it is false, then leave it in place because it
+        * _could_ be negating a global core.bare=true.
+        */
+       if (!git_configset_get_bool(&cs, "core.bare", &bare) && bare) {
+               if ((res = move_config_setting("core.bare", "true",
+                                              common_config_file,
+                                              main_worktree_file)))
+                       goto cleanup;
+       }
+       /*
+        * If core.worktree is set, then the main worktree is located
+        * somewhere different than the parent of the common Git dir.
+        * Relocate that value to avoid breaking all worktrees with this
+        * upgrade to worktree config.
+        */
+       if (!git_configset_get_value(&cs, "core.worktree", &core_worktree)) {
+               if ((res = move_config_setting("core.worktree", core_worktree,
+                                              common_config_file,
+                                              main_worktree_file)))
+                       goto cleanup;
+       }
+
+       /*
+        * Ensure that we use worktree config for the remaining lifetime
+        * of the current process.
+        */
+       repository_format_worktree_config = 1;
+
+cleanup:
+       git_configset_clear(&cs);
+       free(common_config_file);
+       free(main_worktree_file);
+       return res;
+}
index 9e06fcbdf3d53f724ba6746db04db1ffd40e800f..e9e839926b0b83a605acdeb5b82c2e01f7104f3f 100644 (file)
@@ -183,4 +183,25 @@ void strbuf_worktree_ref(const struct worktree *wt,
                         struct strbuf *sb,
                         const char *refname);
 
+/**
+ * Enable worktree config for the first time. This will make the following
+ * adjustments:
+ *
+ * 1. Add extensions.worktreeConfig=true in the common config file.
+ *
+ * 2. If the common config file has a core.worktree value, then that value
+ *    is moved to the main worktree's config.worktree file.
+ *
+ * 3. If the common config file has a core.bare enabled, then that value
+ *    is moved to the main worktree's config.worktree file.
+ *
+ * If extensions.worktreeConfig is already true, then this method
+ * terminates early without any of the above steps. The existing config
+ * arrangement is assumed to be intentional.
+ *
+ * Returns 0 on success. Reports an error message and returns non-zero
+ * if any of these steps fail.
+ */
+int init_worktree_config(struct repository *r);
+
 #endif
index 36e12119d76556a710dbc8da2953a4710e630fdb..f512994690b0292587d819c6b042c18e3b9675a4 100644 (file)
--- a/wrapper.c
+++ b/wrapper.c
@@ -4,6 +4,16 @@
 #include "cache.h"
 #include "config.h"
 
+static intmax_t count_fsync_writeout_only;
+static intmax_t count_fsync_hardware_flush;
+
+#ifdef HAVE_RTLGENRANDOM
+/* This is required to get access to RtlGenRandom. */
+#define SystemFunction036 NTAPI SystemFunction036
+#include <NTSecAPI.h>
+#undef SystemFunction036
+#endif
+
 static int memory_limit_check(size_t size, int gentle)
 {
        static size_t limit = 0;
@@ -463,8 +473,6 @@ int git_mkstemps_mode(char *pattern, int suffix_len, int mode)
        static const int num_letters = ARRAY_SIZE(letters) - 1;
        static const char x_pattern[] = "XXXXXX";
        static const int num_x = ARRAY_SIZE(x_pattern) - 1;
-       uint64_t value;
-       struct timeval tv;
        char *filename_template;
        size_t len;
        int fd, count;
@@ -485,12 +493,13 @@ int git_mkstemps_mode(char *pattern, int suffix_len, int mode)
         * Replace pattern's XXXXXX characters with randomness.
         * Try TMP_MAX different filenames.
         */
-       gettimeofday(&tv, NULL);
-       value = ((uint64_t)tv.tv_usec << 16) ^ tv.tv_sec ^ getpid();
        filename_template = &pattern[len - num_x - suffix_len];
        for (count = 0; count < TMP_MAX; ++count) {
-               uint64_t v = value;
                int i;
+               uint64_t v;
+               if (csprng_bytes(&v, sizeof(v)) < 0)
+                       return error_errno("unable to get random bytes for temporary file");
+
                /* Fill in the random bits. */
                for (i = 0; i < num_x; i++) {
                        filename_template[i] = letters[v % num_letters];
@@ -506,12 +515,6 @@ int git_mkstemps_mode(char *pattern, int suffix_len, int mode)
                 */
                if (errno != EEXIST)
                        break;
-               /*
-                * This is a random value.  It is only necessary that
-                * the next TMP_MAX values generated by adding 7777 to
-                * VALUE are different with (module 2^32).
-                */
-               value += 7777;
        }
        /* We return the null string if we can't find a unique file name.  */
        pattern[0] = '\0';
@@ -546,6 +549,79 @@ int xmkstemp_mode(char *filename_template, int mode)
        return fd;
 }
 
+/*
+ * Some platforms return EINTR from fsync. Since fsync is invoked in some
+ * cases by a wrapper that dies on failure, do not expose EINTR to callers.
+ */
+static int fsync_loop(int fd)
+{
+       int err;
+
+       do {
+               err = fsync(fd);
+       } while (err < 0 && errno == EINTR);
+       return err;
+}
+
+int git_fsync(int fd, enum fsync_action action)
+{
+       switch (action) {
+       case FSYNC_WRITEOUT_ONLY:
+               count_fsync_writeout_only += 1;
+
+#ifdef __APPLE__
+               /*
+                * On macOS, fsync just causes filesystem cache writeback but
+                * does not flush hardware caches.
+                */
+               return fsync_loop(fd);
+#endif
+
+#ifdef HAVE_SYNC_FILE_RANGE
+               /*
+                * On linux 2.6.17 and above, sync_file_range is the way to
+                * issue a writeback without a hardware flush. An offset of
+                * 0 and size of 0 indicates writeout of the entire file and the
+                * wait flags ensure that all dirty data is written to the disk
+                * (potentially in a disk-side cache) before we continue.
+                */
+
+               return sync_file_range(fd, 0, 0, SYNC_FILE_RANGE_WAIT_BEFORE |
+                                                SYNC_FILE_RANGE_WRITE |
+                                                SYNC_FILE_RANGE_WAIT_AFTER);
+#endif
+
+#ifdef fsync_no_flush
+               return fsync_no_flush(fd);
+#endif
+
+               errno = ENOSYS;
+               return -1;
+
+       case FSYNC_HARDWARE_FLUSH:
+               count_fsync_hardware_flush += 1;
+
+               /*
+                * On macOS, a special fcntl is required to really flush the
+                * caches within the storage controller. As of this writing,
+                * this is a very expensive operation on Apple SSDs.
+                */
+#ifdef __APPLE__
+               return fcntl(fd, F_FULLFSYNC);
+#else
+               return fsync_loop(fd);
+#endif
+       default:
+               BUG("unexpected git_fsync(%d) call", action);
+       }
+}
+
+void trace_git_fsync_stats(void)
+{
+       trace2_data_intmax("fsync", the_repository, "fsync/writeout-only", count_fsync_writeout_only);
+       trace2_data_intmax("fsync", the_repository, "fsync/hardware-flush", count_fsync_hardware_flush);
+}
+
 static int warn_if_unremovable(const char *op, const char *file, int rc)
 {
        int err;
@@ -702,3 +778,69 @@ int open_nofollow(const char *path, int flags)
        return open(path, flags);
 #endif
 }
+
+int csprng_bytes(void *buf, size_t len)
+{
+#if defined(HAVE_ARC4RANDOM) || defined(HAVE_ARC4RANDOM_LIBBSD)
+       /* This function never returns an error. */
+       arc4random_buf(buf, len);
+       return 0;
+#elif defined(HAVE_GETRANDOM)
+       ssize_t res;
+       char *p = buf;
+       while (len) {
+               res = getrandom(p, len, 0);
+               if (res < 0)
+                       return -1;
+               len -= res;
+               p += res;
+       }
+       return 0;
+#elif defined(HAVE_GETENTROPY)
+       int res;
+       char *p = buf;
+       while (len) {
+               /* getentropy has a maximum size of 256 bytes. */
+               size_t chunk = len < 256 ? len : 256;
+               res = getentropy(p, chunk);
+               if (res < 0)
+                       return -1;
+               len -= chunk;
+               p += chunk;
+       }
+       return 0;
+#elif defined(HAVE_RTLGENRANDOM)
+       if (!RtlGenRandom(buf, len))
+               return -1;
+       return 0;
+#elif defined(HAVE_OPENSSL_CSPRNG)
+       int res = RAND_bytes(buf, len);
+       if (res == 1)
+               return 0;
+       if (res == -1)
+               errno = ENOTSUP;
+       else
+               errno = EIO;
+       return -1;
+#else
+       ssize_t res;
+       char *p = buf;
+       int fd, err;
+       fd = open("/dev/urandom", O_RDONLY);
+       if (fd < 0)
+               return -1;
+       while (len) {
+               res = xread(fd, p, len);
+               if (res < 0) {
+                       err = errno;
+                       close(fd);
+                       errno = err;
+                       return -1;
+               }
+               len -= res;
+               p += res;
+       }
+       close(fd);
+       return 0;
+#endif
+}
index a3d5784cec94230d18747612bfe59e8db8248ff9..c4fd91b5b4308aa13cc8e2407df1e826470f54dd 100644 (file)
@@ -56,16 +56,37 @@ void fprintf_or_die(FILE *f, const char *fmt, ...)
        }
 }
 
-void fsync_or_die(int fd, const char *msg)
+static int maybe_fsync(int fd)
 {
        if (use_fsync < 0)
                use_fsync = git_env_bool("GIT_TEST_FSYNC", 1);
        if (!use_fsync)
-               return;
-       while (fsync(fd) < 0) {
-               if (errno != EINTR)
-                       die_errno("fsync error on '%s'", msg);
-       }
+               return 0;
+
+       if (fsync_method == FSYNC_METHOD_WRITEOUT_ONLY &&
+           git_fsync(fd, FSYNC_WRITEOUT_ONLY) >= 0)
+               return 0;
+
+       return git_fsync(fd, FSYNC_HARDWARE_FLUSH);
+}
+
+void fsync_or_die(int fd, const char *msg)
+{
+       if (maybe_fsync(fd) < 0)
+               die_errno("fsync error on '%s'", msg);
+}
+
+int fsync_component(enum fsync_component component, int fd)
+{
+       if (fsync_components & component)
+               return maybe_fsync(fd);
+       return 0;
+}
+
+void fsync_component_or_die(enum fsync_component component, int fd, const char *msg)
+{
+       if (fsync_components & component)
+               fsync_or_die(fd, msg);
 }
 
 void write_or_die(int fd, const void *buf, size_t count)
index 335e723a71e2537095359d3d4ee6cb77daea1e16..d33f9272b724b562f5b854d306500e8c0b445c4c 100644 (file)
@@ -651,6 +651,15 @@ static void wt_status_collect_changes_index(struct wt_status *s)
        rev.diffopt.detect_rename = s->detect_rename >= 0 ? s->detect_rename : rev.diffopt.detect_rename;
        rev.diffopt.rename_limit = s->rename_limit >= 0 ? s->rename_limit : rev.diffopt.rename_limit;
        rev.diffopt.rename_score = s->rename_score >= 0 ? s->rename_score : rev.diffopt.rename_score;
+
+       /*
+        * The `recursive` option must be enabled to allow the diff to recurse
+        * into subdirectories of sparse directory index entries. If it is not
+        * enabled, a subdirectory containing file(s) with changes is reported
+        * as "modified", rather than the modified files themselves.
+        */
+       rev.diffopt.flags.recursive = 1;
+
        copy_pathspec(&rev.prune_data, &s->pathspec);
        run_diff_index(&rev, 1);
        object_array_clear(&rev.pending);
@@ -1374,10 +1383,10 @@ static void show_rebase_information(struct wt_status *s,
                        status_printf_ln(s, color, _("No commands done."));
                else {
                        status_printf_ln(s, color,
-                               Q_("Last command done (%d command done):",
-                                       "Last commands done (%d commands done):",
+                               Q_("Last command done (%"PRIuMAX" command done):",
+                                       "Last commands done (%"PRIuMAX" commands done):",
                                        have_done.nr),
-                               have_done.nr);
+                               (uintmax_t)have_done.nr);
                        for (i = (have_done.nr > nr_lines_to_show)
                                ? have_done.nr - nr_lines_to_show : 0;
                                i < have_done.nr;
@@ -1393,10 +1402,10 @@ static void show_rebase_information(struct wt_status *s,
                                         _("No commands remaining."));
                else {
                        status_printf_ln(s, color,
-                               Q_("Next command to do (%d remaining command):",
-                                       "Next commands to do (%d remaining commands):",
+                               Q_("Next command to do (%"PRIuMAX" remaining command):",
+                                       "Next commands to do (%"PRIuMAX" remaining commands):",
                                        yet_to_do.nr),
-                               yet_to_do.nr);
+                               (uintmax_t)yet_to_do.nr);
                        for (i = 0; i < nr_lines_to_show && i < yet_to_do.nr; i++)
                                status_printf_ln(s, color, "   %s", yet_to_do.items[i].string);
                        if (s->hints)
index 69689fab2478c8fed40b63e9a7cefb43c13e7ae7..758410c11ac286adc77c6f992e51822def202a40 100644 (file)
@@ -315,16 +315,19 @@ int xdl_do_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
        long *kvd, *kvdf, *kvdb;
        xdalgoenv_t xenv;
        diffdata_t dd1, dd2;
+       int res;
 
-       if (XDF_DIFF_ALG(xpp->flags) == XDF_PATIENCE_DIFF)
-               return xdl_do_patience_diff(mf1, mf2, xpp, xe);
-
-       if (XDF_DIFF_ALG(xpp->flags) == XDF_HISTOGRAM_DIFF)
-               return xdl_do_histogram_diff(mf1, mf2, xpp, xe);
+       if (xdl_prepare_env(mf1, mf2, xpp, xe) < 0)
+               return -1;
 
-       if (xdl_prepare_env(mf1, mf2, xpp, xe) < 0) {
+       if (XDF_DIFF_ALG(xpp->flags) == XDF_PATIENCE_DIFF) {
+               res = xdl_do_patience_diff(mf1, mf2, xpp, xe);
+               goto out;
+       }
 
-               return -1;
+       if (XDF_DIFF_ALG(xpp->flags) == XDF_HISTOGRAM_DIFF) {
+               res = xdl_do_histogram_diff(mf1, mf2, xpp, xe);
+               goto out;
        }
 
        /*
@@ -359,17 +362,15 @@ int xdl_do_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
        dd2.rchg = xe->xdf2.rchg;
        dd2.rindex = xe->xdf2.rindex;
 
-       if (xdl_recs_cmp(&dd1, 0, dd1.nrec, &dd2, 0, dd2.nrec,
-                        kvdf, kvdb, (xpp->flags & XDF_NEED_MINIMAL) != 0, &xenv) < 0) {
-
-               xdl_free(kvd);
-               xdl_free_env(xe);
-               return -1;
-       }
-
+       res = xdl_recs_cmp(&dd1, 0, dd1.nrec, &dd2, 0, dd2.nrec,
+                          kvdf, kvdb, (xpp->flags & XDF_NEED_MINIMAL) != 0,
+                          &xenv);
        xdl_free(kvd);
+ out:
+       if (res < 0)
+               xdl_free_env(xe);
 
-       return 0;
+       return res;
 }
 
 
index 80794748b0de6bb9176ce088c472d44c62b91e6d..01decffc332629dd9dcfd79c904187b7cc6d0943 100644 (file)
@@ -372,9 +372,6 @@ out:
 int xdl_do_histogram_diff(mmfile_t *file1, mmfile_t *file2,
        xpparam_t const *xpp, xdfenv_t *env)
 {
-       if (xdl_prepare_env(file1, file2, xpp, env) < 0)
-               return -1;
-
        return histogram_diff(xpp, env,
                env->xdf1.dstart + 1, env->xdf1.dend - env->xdf1.dstart + 1,
                env->xdf2.dstart + 1, env->xdf2.dend - env->xdf2.dstart + 1);
index fff0b594f9a851a8e1a6fca961692614ff0c822a..af40c88a5b36fa86386a0cd5dfbe8d6dbe8f7fb7 100644 (file)
@@ -684,42 +684,42 @@ static int xdl_do_merge(xdfenv_t *xe1, xdchange_t *xscr1,
 int xdl_merge(mmfile_t *orig, mmfile_t *mf1, mmfile_t *mf2,
                xmparam_t const *xmp, mmbuffer_t *result)
 {
-       xdchange_t *xscr1, *xscr2;
+       xdchange_t *xscr1 = NULL, *xscr2 = NULL;
        xdfenv_t xe1, xe2;
-       int status;
+       int status = -1;
        xpparam_t const *xpp = &xmp->xpp;
 
        result->ptr = NULL;
        result->size = 0;
 
-       if (xdl_do_diff(orig, mf1, xpp, &xe1) < 0) {
+       if (xdl_do_diff(orig, mf1, xpp, &xe1) < 0)
                return -1;
-       }
-       if (xdl_do_diff(orig, mf2, xpp, &xe2) < 0) {
-               xdl_free_env(&xe1);
-               return -1;
-       }
+
+       if (xdl_do_diff(orig, mf2, xpp, &xe2) < 0)
+               goto free_xe1; /* avoid double free of xe2 */
+
        if (xdl_change_compact(&xe1.xdf1, &xe1.xdf2, xpp->flags) < 0 ||
            xdl_change_compact(&xe1.xdf2, &xe1.xdf1, xpp->flags) < 0 ||
-           xdl_build_script(&xe1, &xscr1) < 0) {
-               xdl_free_env(&xe1);
-               return -1;
-       }
+           xdl_build_script(&xe1, &xscr1) < 0)
+               goto out;
+
        if (xdl_change_compact(&xe2.xdf1, &xe2.xdf2, xpp->flags) < 0 ||
            xdl_change_compact(&xe2.xdf2, &xe2.xdf1, xpp->flags) < 0 ||
-           xdl_build_script(&xe2, &xscr2) < 0) {
-               xdl_free_script(xscr1);
-               xdl_free_env(&xe1);
-               xdl_free_env(&xe2);
-               return -1;
-       }
-       status = 0;
+           xdl_build_script(&xe2, &xscr2) < 0)
+               goto out;
+
        if (!xscr1) {
                result->ptr = xdl_malloc(mf2->size);
+               if (!result->ptr)
+                       goto out;
+               status = 0;
                memcpy(result->ptr, mf2->ptr, mf2->size);
                result->size = mf2->size;
        } else if (!xscr2) {
                result->ptr = xdl_malloc(mf1->size);
+               if (!result->ptr)
+                       goto out;
+               status = 0;
                memcpy(result->ptr, mf1->ptr, mf1->size);
                result->size = mf1->size;
        } else {
@@ -727,11 +727,13 @@ int xdl_merge(mmfile_t *orig, mmfile_t *mf1, mmfile_t *mf2,
                                      &xe2, xscr2,
                                      xmp, result);
        }
+ out:
        xdl_free_script(xscr1);
        xdl_free_script(xscr2);
 
-       xdl_free_env(&xe1);
        xdl_free_env(&xe2);
+ free_xe1:
+       xdl_free_env(&xe1);
 
        return status;
 }
index c5d48e80aefb33eddb4dbe4e359f2c598a5483d7..1a21c6a74b368cb094e20c708a43071c72558d7e 100644 (file)
@@ -198,7 +198,7 @@ static int binary_search(struct entry **sequence, int longest,
  * item per sequence length: the sequence with the smallest last
  * element (in terms of line2).
  */
-static struct entry *find_longest_common_sequence(struct hashmap *map)
+static int find_longest_common_sequence(struct hashmap *map, struct entry **res)
 {
        struct entry **sequence = xdl_malloc(map->nr * sizeof(struct entry *));
        int longest = 0, i;
@@ -211,6 +211,9 @@ static struct entry *find_longest_common_sequence(struct hashmap *map)
         */
        int anchor_i = -1;
 
+       if (!sequence)
+               return -1;
+
        for (entry = map->first; entry; entry = entry->next) {
                if (!entry->line2 || entry->line2 == NON_UNIQUE)
                        continue;
@@ -230,8 +233,9 @@ static struct entry *find_longest_common_sequence(struct hashmap *map)
 
        /* No common unique lines were found */
        if (!longest) {
+               *res = NULL;
                xdl_free(sequence);
-               return NULL;
+               return 0;
        }
 
        /* Iterate starting at the last element, adjusting the "next" members */
@@ -241,8 +245,9 @@ static struct entry *find_longest_common_sequence(struct hashmap *map)
                entry->previous->next = entry;
                entry = entry->previous;
        }
+       *res = entry;
        xdl_free(sequence);
-       return entry;
+       return 0;
 }
 
 static int match(struct hashmap *map, int line1, int line2)
@@ -358,14 +363,16 @@ static int patience_diff(mmfile_t *file1, mmfile_t *file2,
                return 0;
        }
 
-       first = find_longest_common_sequence(&map);
+       result = find_longest_common_sequence(&map, &first);
+       if (result)
+               goto out;
        if (first)
                result = walk_common_sequence(&map, first,
                        line1, count1, line2, count2);
        else
                result = fall_back_to_classic_diff(&map,
                        line1, count1, line2, count2);
-
+ out:
        xdl_free(map.entries);
        return result;
 }
@@ -373,10 +380,6 @@ static int patience_diff(mmfile_t *file1, mmfile_t *file2,
 int xdl_do_patience_diff(mmfile_t *file1, mmfile_t *file2,
                xpparam_t const *xpp, xdfenv_t *env)
 {
-       if (xdl_prepare_env(file1, file2, xpp, env) < 0)
-               return -1;
-
-       /* environment is cleaned up in xdl_diff() */
        return patience_diff(file1, file2, xpp, env,
                        1, env->xdf1.nrec, 1, env->xdf2.nrec);
 }